From 36016cc82846bda6c5d849d4a1731fea2240364c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=B3=D0=BE=D1=80=D1=8C=20=D0=A4=D0=B5=D0=B4=D0=BE?= =?UTF-8?q?=D1=81=D0=B5=D0=B5=D0=B2?= Date: Tue, 13 Oct 2026 20:39:40 +0300 Subject: [PATCH] perf(engine): implement multi-threaded DDA raycasting with worker thread pool --- build/graphics/poker.exe | Bin 877568 -> 878592 bytes casino3d.inc | 11131 +++++++++++++++++++------------------ poker.exe | Bin 877568 -> 878592 bytes poker.obj | Bin 1070933 -> 1072156 bytes 4 files changed, 5614 insertions(+), 5517 deletions(-) diff --git a/build/graphics/poker.exe b/build/graphics/poker.exe index f017cf7e3135319ebf4366ebee34a08827079587..2f4481cf9e97411dbcb595f8f7a95ec87ab815b8 100644 GIT binary patch delta 151265 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

ZDIoygUr>uS7W0kDdvpb>@$9=z9IM%m_ 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

f?W8CG6Z?oq3{b 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⋙_mztA>3EQjNIM z&V0}qmJ>Jn*W%F_)mkKrq%a?=*VmRFmJ1|6s5ESW+LL5IxlmXOg0$v>x4QWM-DANpbp#F?vr0x%W!7 zvfjao!dNl*`uLs%hqY`g;=&FZ>yaIzNv409dO0LJ);&X6OHzFZoRR`UCSrdC5 zegdPQ`(sdHnwyhd5$C6HzzhZS1)v0W|G3!~VE@m?JHqcGT+I(~MV#iSLdV;HJnW)j zem(Xdoc%pP1X-xwa7LW1L6jpb+5*zrtv#TdVesHmj7|Uz2Y_?{*`V)^uVYtB@WWFL z(vSc^SgXgo*eVZ%N1|MbSMSyH|3-wA9h=5_C{|Vb#n5vRHE<~GgHAJ^u#Jh*NN25p-ds@*f;vk98jaqMXrg45y3bxy)>sN+S1J5IxINgD6DCxl($bjO6>{w)h> zrxy1Brk7&nQ-M>)(5&ZxxT^4A_+0rOXcqq}gp7&btGSS!ek+x$0=bSv$5P1M)slq6 zVBuK+&PD1!0J*A>1IkclIdHjw%s=6?k)>F6G8>ht)EU}_o|59+P6Fo&{JQUfKW>oY zr>gKk4FwGq9;~6@GB=f!P>6fmSfVUE7*t8QPR1L`oF~qb6hc#(_~|^eOrB!8t>y0-Jy<1|JHzA>%DjD)^&D{Quapa+ z?1rN2N|rhs6_)*iU1?qcg$*Vj{LA~sU^D%oHS~RBe!s82VX~i76JeiK7rrQO6RZW! zlkIpH;XP~-p4FqQ*WWj~kL)Va)(X*IKvdsOHrMg#*I0$jtK~*FIYWzWlF7Vl;0LSS zE+f|%Wx03Zd6+w_n|B!>c7~EcgQjf_yC-1nN%A^&kI}COQtjEwRHv#|Hk)YvW?mZB{W@6K71OObdyJlGZ+wot z;!Dq5so<{LV)dD|1`Ni&$7`Pci(w74lc!iM10fn(LE$Oh%esNSGbar5UtH$i446B( zmP{#I-k1*Qyo0uGc+dKI58k|bA18L(Zv;+iJ}lB=)d7rTWh_43eG2->^TN9jZQVa1 zTJ;5|qn^VEshtngdEL&K^HWG90`oQoT>I_b_QFI*nk$$EXM>Y;sff*0c?!Q<%{4o% z$38L&DMyhCNMc--HSogmPW&Q8rwW|pP@0ZiRn7>YnMG=*5c*a`3s2R5t|fcrUyyA5 z`4Huz5{M$sZE()i;70lgvMuT;a_rnNxrRD2bE?t;m7O72vly-iy-+NyO@!di$g4Kf zA~geEQISbfU94Wh2$hR9dw|F8Ww`7~EXKe;yIh%rsslo+g`m{WFiEbCF2OZO>KK-c zAy_wAwkl2YjAuF|%&(XzP-ijBvG-%RcZur>+_vy0jQjdTvykmOjGBE9Ayp|`fWpn0 zOOjnRJ4#ztrF;e~Mr!=JjQ0<*|8Z$pnASi37I)4Vz{43I|4$L{NPc`Ual)fY=zBm(f--#elLBkNNc?wp6 zU$Ye4Pv>foY7uUy^FPdCNz{@6-2%EGD(iIRR}e#ocpr3XR6K+@C&9^cd{SSt(Mj4h z)|@<+Xf ztZJ4$-$J*k7pEhSw#|-7o_3Pi>hGh;5HVX+4JYNGD|BTkJYMtJL)Oio7-_vBNDXU~ zh*HB!q%HzKZIw_9gumTm{p}Ou*6yEhulA`;oxrf+D=eyZ#V~uL!;$I8eY0lUC)U_c zjm)$SI9!ptDr=uKGs0G{eb&vN8vbOUf(MckwpFbfvd=pDsnN5==Qzm?-d*+^QvwVy zA-QT*F91N|-1dZ23~Ng>aA{Qn9``{YJV3#Bk;|l^$&%bbv6)sLm2&?DVg=nx;mC1S zayqQceKQ=jfLxVOZ*cqIrb*+f{1@ENHreuNtaVri_8Yy7qgLW)#!Z2}Oegj-9^PYRC}X_(lk40pa3k`qVbC_foJ|Pr zLpd}Iir7wMN#SufHRK96Jvy90h;SgZoSz%ZM?rl5s9ESii=&7G9Ku=W6Q;K7FFrxKiXL=_%J z^kvK6;y!*nV6y^OlXVXj9@(uDP+5Xtg1lH%dt;q~F?YOX)n4oRFN_z=+8tKrmquTi zWtjA((cd^>-TWoWpZndZzi+Qiy4+FPvx;9U{H1XPOE~%pD~5Um%^n+@-}nLoj#!_7 z4+?gOcOMrzCS!eq7#JD!52bCPt03ckx|X*^FuHMZGe6kwGQ|5H0uT1Sjleo2ZX@=l zE~?FNGA^DS*@EaM1+8TVjFfarwV4@!UG_Wf!|HD+adptWbC31-0b}gIf5uA0$)c)C zTzdd3aG~uDgWivOu+Zr7nbqbi!yh0)G@k_ygH5eMb&!H|t!5lJql4^o;KtO%wT#Ub zd4BPsBV-_`*tBJK5?>S3+;+Q>5YT91A$tLv9rr@uA^r!W)y zaOQvsv_^kp^pZqw4V!*DhFING@vH{e!K)*W)#_z1H4(Zh_4jUtk53Ka> zjXwCC^S$BDM7A;#8l+H(TqpS#P!8Y7pnLZo>w)i${>Yb$thc^5o;3DY3x6;k3ZR|q zgFKb%U|oDmr<~?lOlRAV;glmi*U>qWPC3_eDV=lal*2t!>AZtZIpK3Qotx;CV?McX zV&140l6fefj-UvcgcHRYBWQ_;N)*F@l^`yet0TiUHHH@&`H?s=H5DTiY8~}S6a|7y zT=F9ld`pWVT#ui3(fot%wMeF1GrgASN1=VNA3Ha|8;5Y*eZ&(xk~#vQ9R8d#cb6E9 z6ULcN#}DqGJ%rEb6k@y+`|~>j z&4zxhN|T~a0`(t7Ev|MjHdr+bZaY&)`=%TYsrt8(PPZ@VUE+njYKJp+-(KhaG+(I`#2;<8{{XnPmGS;xOtSWM48@is7E0WUk+VkNaos0 z9kxxxiwBZIDHOTxkeN^iRh)N1=GLvkW4P@L$NX+NW}KUjjIOIs%-trO7u7m(%YejY z{qva7!)!Qc{cz0aBMP+BabvImlaCv>j`cxd!dMVP;&8*j^}gFQqCYK*Q@E>jccb`0 zXU6@Y$kAI9;j^O0jn(GNZ>+n2GKQh)*ZpLqjX?ulSo_igRP7r999iRWaGB*YK0o{yutcDq5X&xDW++a+DChyUR=??^pg~5raSeQ~+ zfsHk5;2A1Bo=|wC#sV1j-O9UKN7glBu15U!g?(jBDAHj6Ru-o!67AI%;-dK^R?ons z_u$mE!^1-|(fqsV)iFQBkN=cbuS07vcXIb$Yfqyw>SE|Ar{jQ$1RkC#VP-{zn&)u$ z6{!!Npi-pvLH2%$>}@8#Q!HAIz#0+E7EW0(?Q?%NIy2FOo`et$^{k#wf|A(qD*CYc z*gga$?HD5%xZzBrb^WVTsr{XjFU++;%<4t8rgI#EY(|u}I8x5t?BeJOytnOnU9@2H z=`zma)L<-|EY~kaXH0MRyk@Dq#$zkLBez6O?^ zmJzo~vJf%6VzyXyCyfr~{DaoVCyks*x)azA4zZG61$|~a4BR37E60xKVN0jYMBlPo z-&%PPgZdJ_EcA(|jO*v-VdvsT=0R@ZXBeLPKa;%RR*Ww2fj+8XMzG#9BT(;am=PF8 z)G%exNj1!fP@$?}`Z!0-)WLqMVcOJEEA>~SOBy7`l_JUs1t4{hskGd`8okpG?Z@DD z-QFV(PcP(B$uxbf-_FmhTYp6t@hW{`9Oz+s$+g<|&ydXX+VH%9c6hEQ#oe)>J=Fk^#3g1&R8Z!YK8X5g zNErS1$kWET^4NR|Lg~I803a5hhS(A`#PP3&$V5YbjYFIo(YSIO((`Td5FSyw(ulyI zQ*Cg?jnwX*ve6~Qze3lZ1izp2$Bls{Hv}7#d_|l=vARZ$etgB?jxx@XjIT=JtjczA zK-d^h*&i!jl{noXh~`+^usG-CN~DnnD0G(lfMAn#^5}8|@^z zv_(|DvF%YS^d^|UgT2?QVa{ilE(pucd^Kt5*}=x8rTOT8(=E4QwqhlKgUM?+3bQ3) zTPTHdT;mJsT&s2gTf=B1z2vYH7*{zoJydsW1CMLf-{7w2F7kCx>S-_>>&0>p0%E?R z18$ioN8i~+>LHvV1L_uB9S%uGdu7nga?v(XsZhx@bc{#T_gqja9>kLpz3jR7Iv8E zIqlGqH#n^)hhLr>GuYR%qSlx2?AOP)w{&c!2ec{P&cS^dGmEq+E{eh&gABflW3TJB z21^*MozLZLJU43!Ge`*44YmJn8`=Ez@tS2o)`ak*UOHDRG(N2zJellTMNRCg z$>f|WE*DK)y9QMHO~!B^_apTuo%}p<{5QK#(4$3;3zT4*-??l-yL31Up+UgqeCjs-(XA zw#*%?g}C3IAcRG<5I$I&8gxsIz;gg92_{~BV*ha9OY2Arb2RMB0WHmLfk$^Ej%y#@ zfTPu(ClE~972>`f_^mq+u!vY?V0&%-94@goW_os0z!qvN1T2|bGEwfOE5Q>_%vgOh z3lDI4x@D##g-tf-Fh=&!zp&B92VOj}5m3vR$X7nvXg`P5!t(%ltNFyTp>zKbruU!N z1-F<>L}CLI7lPDS#&38oFMr74$;#~F@N8xZ)=;=C&tFN=FCOCx#@JiV&#IO>T;+pz zSQC=W_US*xxgXY4Y!2$9-PR3BX4lMZao-=bFP8{a4LGB6SWhOIgV+lE{UFKT-+J2N znN&0yw`Izf84h$f5>%IhN2CyadK5bHl<3GKm_Ho{hDBPYfz0q~xC^9#L;KzbM}1aI zNp!Mz%!{T_=e-YVW`%G|ZR@#neFQ6xn$_34thues^h`))Vm4#Ro!?<09n3@_dY+>^ z&+oGCZ)Ik8yB~aXzTQrP2>j%Pi}LQWcC|7)rT_XK2sWbA@H|O^Z$W@9LKAmcr(2ns zMKETTHQxxMu zJ7i=L%6xl|wWzh(!%$XrYqL*4sFPuEFOqu>G4i++C!k(EJkincoy-yM3v-H9kI^`Q z;gomGbtKIB@LZ=*+|by3()MteGvc{UA&+_K!4T$iPc5uvK@hjqewNAP5k7dORUx8$7Q$=Tjkp_CtwTD#hq zGuqUCa3AJrg2HQHvbn&M0YP{KR1>M%gw~9KpX-I)32$=WWhgWXPN73h zc3ePQ!kQ7l)qR~>_9n%w>NrRu8*fJzaTWsVf`16s>1Q#9h6R_VVb->WKJKR)&;+s& zrFBn=*(C`mj6jE-uwF_ryB4A5RJ(l@FdW#hj$x0BR0YHxadNOlucjem#L2qjK+fx- zHM6|+5p|vbiYUU zcXTor)Ejg@huZ6zhadGKoqOoKjm|KgKhgPTI`5-%#}PPR#E%Nn*%Fn=^ItlBbWWvn z7=F}zIxFbB{wPd-HIwePKf?WYdQYaafX?l7j-vBgI=`T^Kb@=TJV9qyIPt7GKwL@2 zV}b;6(bo^0CQguP;-EXB$(ta&zm9v4zS8q1FCCLhxBhh}xoyQ1n!`676B2p*@j4=0 zTwG2~I06Hw<8$1&kXpSFlZ;1QW>$cOQcIbnJpMsQisCs!QVLHHk^*>ukmUVpLXzth zge1fNL`d@bWQ{_fUispi1mD6*g$UEgCXxdc^FednzV8&tFFQ-X~*ESb9X z#8GQtJ2Q_ntyi}*`x!rNsA^{xC-g>3MZb;hBJ8&h82WriTh8Yk_?5kH*YIb*{-q;y z1UemIxe5ISBH)uM!gKYR)+co+og8(wDkudxmrCFKm)UYF|VS zRd(=xn|FfvmB%%{R^wZEzti{|(a1^vH;qsBey3)-92*|!Xl9wbUK8SSa)siytoizs zwD%A2QCGc<`9Oy!hqb#{!xITl*6`jxoCJrw zFdPV=o;t~(%+23%EojHrfHIg*ZI3#w`~P#a&OdUHQFChTO3*ad`78j(%BC5I&hU-R zIMk16-eWNIyjW;VfuPF>Gnq287iKbLZZFJa%IseAPKF8LpPD;Rx98wn*wFfa&W>{O z4>Qza-*A1JiQ?qw+lAtBK=*CzSO5Q~GnTq=;%TdIH#1Kbkg#>NVW0ECPYj2iaO`>y zWWDYZ`iX-5^ zEObFq@Mm+$3>@lKsA~4mw7(vjR*9O?l~AV?l~8BqdD!F0k*4QA$X?GTpw)S=bNkOX zaQ_7~^u!4`slR@|{qW9-Dj6uHg!u4Ik+NoGn69&-WU&6u;glX3J`2cIz74;60EqKc zobJ%0E*>y)1!?nRG-o}Yfk^>`H`qEru9axdGB=&P9n5=!mLAp}$|)v2$8&_|wgSa@ zTA3mPjsu0IQW#qfR3!cx0+qSxp8K6Xni+#*Z4>peIcHfNxa~daoKk6Aq)MEPfMpW&^G_S1%u9SB-0A zKgu+-XJ4`z_WhPm4mv#dB9)kj=5(9NN0DjlW5h1j*eqgq?Zxc$3&46%X8H)XY5|XW z_vW{N)p?EQQ#Zf&t2Lv$*=gEsuOZYO@BGJ6TylkesyV_qz(dqca9EJyX8=%FMj;3JxVNb$(o0%8zIK||7;b^YR>P+ zS_QLOU3eEKK(-ajqAEH!&JO9$t*a!9b9N5jl@TYMF2`urLOnOz6O-lAA6~A5G`7SF zEqmi&ZBh-X>oGncX`(lq^XiXhnO$1|&5dNWS!So};Dy)7ab;)CSwN%jY>khav_<;S zzJ$*PEZyZyG#yc+u1anoMpyks27AyTyX(r@TcI*Sp~ZlAA1bR`&=>do)Gg`C{xsHa`(Gt2n#FMVJ)v?;WD^f8NDx56QTmZ9LpR)yAzK4yBa?^zHL=jz*vIV8VBhpHM|Moa6&vla5BZl~r=wMqvqAEHLZLOJ zubDmYUqCev=r}YP*%P`dd(r-kP;eX~%x#GwqK56+0m5Nk5W&-_^C0PR zBJjkk&s;Iu!i(Ev#o>u%&B;jWpIu;%uFh@ zuFf%g@>`i>4(4}#j+t|QN}&U{e~j=R+mweGW{jVq2K6`{y$mDd+3><%G=8cw#8s6h zuBrZg5$C|Rg`n5lZ)7h}QF5WxzrX3529HqU{Ss_KT2u%_9Z4R?rfV#AuO)idV)xn^ zz7-pGfvr$j|LJcAu0V4582O~cMYSWUHzu)=mp6vTK&;$J$t;XXX*EO1eo}hP2!2yW zzz?f4!}2~rl-ZO&@%~ZpIk#Z9_xtMcW|4>VYW!fUZh$$-OewTl<(l1DKl zTr<-Qcej@3ngeoLfam1iRg;Et9v9tCWKwSyS$G^cqe53r%85)G*uq(8y`O7#b_p^; zBkO?tDc8(4@$Ed&?41Qxf54=P!{q}JFEaAhf#!e$a1!F=*e90gf=Nk>6GD@c`cFzS zCM6q_QVr**CSp=qUko(65f_@2T*Iug8F5Ipb5Y%h$jaHsR{o*z6TRO@oFw93_)>%( zHpuKS4G1O^Az_a)OZ8F%{5kq=hL`&5B%a-16TQ@2;;q$#%$(7PFt{w+@Q({kunTO0 zF0kJfQ}7q3_b_HQrIb44TK^q{aUOz)I*wxG#Yw^Cjab|YO-Pchy-XYTqv0-%fgk^h zQ898^h4=g#Rm17**^);!;Ed)oxVpL?$e~0o2a@T z#K2&n(FEpYVkQ&Q4Ocn=5h3C%B3gSsBRl}G=SMutpt1=SFrH3;f^KG^!{13qlMpBS z`9lP5k1K2PN#J31RVTC2vk8;^@Z~^iM4eDVTD&FPF`z}H`xYSu~Co}+KnV_3G%INR9oyUG8FYK&fWx9?T zGSPDpMSA%I#P#tZD{rVdWAxlI2lv({dMko%7BMEdF8U(7>Xjm>jY#lf{PHifePL|{8ig|ny>wOZQlP6| znJXmoY?4UO6Nj$1A2qR* z8aAWE%JzjswQ!Z+2$3SrR9B&O+b}c3tj)0=8fNy&P5qPf3VqO3<09hPoExwUZdWH9 z`aH?DT$)lfVr}iH8=zfxb+Xhjb6|!o(;|P;sL<_<61#Nj4md-rA&fP2xY><4VdK)O zDQDd;sR?h^>;Y5k_(BAm$eEi!qsP{d^2yjYEwnv&APe1F>uT$r;pQ~%x$cx_c26Vg`fsW>Gk=*z=Aktu&+OUz+NF~6 zTV>Es3zs&G``z=A>NLC}E!)wp)p=%@J_wrN%U$%vD6wal=|Z|-L5wtre6ZflGe?hw zUzPs|3?oeDrlO#0cU%u+`Y-}++V?T+x~~$Xe1ji2HgW$I<`37fytz3o2obG`Bh0r= zeB0!kGXwCz)_KftV}?E&lq5L(r6H*XO_eGl_2{`2*i%qSowSE&Uh(*IJIr{W6R#H| zn(BoPcwjL6yZ@FQg$qO|l9UD&W^8L(BN|}Pjf%vR^7`6G+c5kEv|_Y1zaAM$Gn{Fl zrpcI%@-~93*TKzf6nN|dD-|)+|c<#6n8IwIK`U>fzuaJYf;VIeD zKQI*>MyyZ6hb*|Izj}p%woVMpsDS}~lef@WkWo!??CDPyZ|vzO8hiR%$ewwyIN%=P$=p+~t0frwGP#t(u<_TN4tSd&D z9jQ%F&+ybmY`Ea6Y%LB>Hlc0&Dlx{CZltjBjtW!PwKH=8g)0T9kDOqF4~8IS_}KEK zF!k{h!5`twAJ$k38%vj^al;x{bl~H90k&gD&iy5fHhT=D&VZr|T>|%Mj-bmZt5 z+772qN^^q0WS90Lb{9^Y?XikRo1JGNExNYw4oxgU!yWad>AAZcNymP0=mv!*Rmn4_ zJ@Vr$=qc9*C*g&)a?SpRl&j!av~ylUoohqNwe78~qfNKV;?PMi**mv(U0}67+sp{G z1B3Mn9c~dqc+RJD8=ZtaQ&6lbThyQ*Pn=AIlW)ayb?Fw6yDE4QTEyuG%s*TPYeUuU z<$yLN1DRJVO1y>vnsFVENFvUOtis^Iq2)?`5^z@7z^tQVrH=ehOQ^MQc(WEbeR$IX z$~_TIecK=RU^W(ci156GIB;#>V(M*I#VVk1UXwn4?AW2_^r9KV{9Ytrv~xY2{_6ta zP58EPZo%&}4y=OuF9{QF*ww~KAH?mSAbiy=(6I&1qd@wH<(-(Rj)E_?id@p6&@no3 zeI4*ix}flqy$7rF8CSLY2K;VN7j@O-lc;n$09Ffc;Y_sv0dQU`aqUk)P%39ZVUm9!-s9_oT*R)7 z;PPacgCMYTm9?leIhweBd3&pm+w4O*&Uc$x^N7Cz3(&%OUa{iIQ5ZTBEO{-1d8fk+ zs03R`ODdHH5?flj>jxXMfd9XqUr={j@4L;eR4*+`r!UH6Ta4*V-#NP9smTB`;>^Y` z|J3`^kx(HL#Uj;{WNGx=kz`L?U$G634`2Wko91o0O<6q&8q90cCk@A85e(Z9z%;h; z?CRg%T=fh{yx7yry&l|HTsl@?;*{e(O9MB1OEj>QyFhq()OH5BM#CHzGXsd{4rA}! zlA&teb!2 zB92bT_b{t?4Krn%a-tH*BGoKerAjUxih}wU1y$|t4Fb7w=sE1(YBOe?uVIXPv+vlm zUmw9Xu8s7?4G$PDZ+8-IjwzlQ&$TfyY1RC9V2D5PxK%UO92i*kAhu~`QkY_OC1UsR zh2x@<0^CbJ^C5U`LtoPZIni*`^U=Qd@SffM9n;Xd&WHb5@b}zZ`yn>EKfHDj^5@+EMf&B!0V)?!Kozfk7U%qjpMAw3M@jpVDIS{F*fiDU0XsdO z3mNbQV)N9`z#_;c558t!chkOPx(=~a{l|)hxFiCX z92y*l?(a!eSClNX1#s2xT@JCtTLsULMYj62=tUq|0*-n027 z{f0#&ylob^(`*w)aUB2bBZsdGvEdIK7P`t`23iY!t1I{v99oKd0lCWWkGmfOD$;R`e@7ov^lyO~^+tsm8t^{(LUptG}|B^1kd zubuD2sjlb@rTDVdlB-x_d{}n47cJQEPm@Lp%y_$jj*eaAC-oA{BT^*+I7<4cj$`jV z9j#$=R2M7&hBx!Q{ixM#GK^yKb5*8eMDx4r&F)1geFfFjZqWJ3nDpO&pQyd&*PH3f z%23^R#>u;&tz&l}hbHP7gs_{7t6~c(sCHnh{f}^Xtba^4Q?oM}^qo(?aCjCmCJ&aK zu0uH8jpPsLYW;h%*(-fKsh~|9o+}x_^`1W?d8)^KR*xw(UgExUwJ%Fp{TEp1>E_px z4KDHMgBzdU6XQ3Zv0m?C^;KJ%h3G%}TwY{02_aarYF#|U936sri+eCQ{(O%Wonq!gjpk2<+4D}nW=bQ>|O9(A*4C2PrSN9%7 zFTVa`6fVdvgn-qP`UJ;RQr|j!;L|G@Y2Cypfbe3uuhdv}YSG+)s-N!;fL%)%s$Z*>~(D5=sHLj}hui;(C!*ECJ}Zo_*+F)sgA2lnUuQLg!a>UQcHd ze$)qWq7EHEb@pI$gB_*;C*jV(>Y#yUXbB-K{t0Z*eHhH;*4{+0#lCLnGXZe7uE>RC z>Fpk|TYI&1f4LCi2=}`P3Bz(gIursqU}48zDancTO<>BRfzS@M>=)e2q1_}Gd)!)c zzB#*%59{3*9KdkGcboOg`Q`#SMtbc9=8Z;Y>w^o-$sNhURe2Q24&_sReNc7qbaPN4 zbqzYi)#O-sm@^x(xI1_*MSy5NJ4AIh($2jaJlcuvqgeA@SQ|wc9ObLQ>Cnfgn`v#C z>xCC^8^r zHO}|&DRpjo{?({sMoA0Wdse~>^9HFxr8CStBi(v>hWTx~bX^OB%hQUy7%zU5Zmqq@ z%rSh{_KVCOlbIaMJK^LsQnavk8zRO;5~i2ZBt@Kw9}fI4evfldbPgR>LfcK}_ZnBCY_PEo>ai|Gi#=L70sz2|LH8$gDwSbe*M`&w+E6&{hh1w3GmGjjc8E?z znUxKB3@s!!YuU{EqZl#qlU?P3SX;uzGc2R?U8f4B+*R>} z)CS2pwDr7fu+SNV@XSuQD4We~rW)*YU|2bdx;@V0O7NJeQnC=qX2;5G#~Y57Sw`6y ziQj>3LMu|lVI959>_j1#ry;v-=80gAO*=E|yNw1vc&<3FN&~hWm9;BIFRFd!!A&>WF2<~{rF&gzFCOH8+TjG)vCz7Ax`CG}6lNrs58F7&ugDYEftH%{)L4jSr zn(|jpTIh7^{Y@y1V`xcs4%Ia#a?fxwE0=YJnLiF$s;>~TGs_k>j$?sFoYWiqtMByN zCSfJdhK54~{DYMXLQ$R0b#dGaacHt#XCuz@;?RY0s5lM<;?USQG$9U+v>{R3uYh^< zTCJ>^P7xzsjaQ7JX%LVlU;+jvEY9NKFClC(Kuw&IHsxYR}8bR92*CV&$%vNMY5+!;{ z3`r=OoVwSku+F{8EXYQaaQJe$tgiK5U1KsE74CdX1qS`i+N;dENf57UL^ZQEl2}dE z#Xo>-Q8riskP!j<7C>!tRL5)%U|-3yo}6nA7zrkbu11(SEnuLlUi%xRyFj*nfknLPwIfTUF*fkZZP> zs}UB#e6ldK@dlhD(zlrn7>l+9TY``(#>tZ&L3dGi>(n*SuB;{g6OFF3JCI?bsN_U`ZBzh_9_1}0MdWu%D5m5OYq@Un zP1g5yrI0Y5OjLL~N17SQv?BSZ&c{!fCEifTNlAwH_yBUpV{-xoMJY~2<}V7mKhlQ3;)T}6uEUycF;(pZub9cP!W?;+e;E3y6jAA z?|gHJZJA;CKps?@c5TqD3au@cBq=L7An#hz4Mkc3wuZl5RVE3lGHKy!5<$cWe7*Aa z$Kf^;f+tZtLS~1{Zwe@-9X9|Ce;&6^|5oKu2}0$)w!j=R3^A5{#p|_#Zpl7>Hyj7> zVdkP{7BZeNMvgUC0A{;NncTzbdL33-K#;5Ha7?MLF(KiMKyvjJ{bd{-^KZroVg~U# zNl20@B8oca9*GN*bCcIHAFD2CY*XhOw7;-%f8nW5j(wJL6@=J7=Q!@M=@W>$aMuNG z6J6@89jX&5A+jY2HZZF@>v`pIc<5MyCta>p-@+NoNmu1wy4-G7x7g(*muSZp@zKSX zUb){@`5X{sZe5wLa<~H3j{wo!cH*#se-S5@riQ4}H1tPGS=1xEwer?<55z;nG>q0t zOrO|J(z!Vt?brlgVMm8QfXA|}w>{?NJ)}C7gzTYGVG_DI%no6^e~QcHEc9^;%|GQZ z7T=(zY8i1h4O^QU(LLR*uNUG3UxwAX#LON>-mc2WA&Px2KeYTfMvb)?L)$eBhdY4S zrxA$jiV|~RSCl00GCPQ=sZDHl4Tl<*D@+x@KU`uKc7Z>n49z)Ghf5=HLWjt7EL&Lgsvr17 zoaCY~ha(g+-U_E-*`h!70s62uw6_5SST@qtd?o${6*KCaei;idCh5g894;r&u5_qg z*^tFDdx>2Z%P=O5t?;WMpJH=p^*FnWl1gs+hZ!=j5OlNln6C0N^kKn453s*9)lwXd z3A$x4;QK=5<02G@jk#L355s?XnVUi#fuyeTX$Ys=N|O7Q0H z21oTIoWVLdQiPg^GQvJ{Y)AM`5Wd8`6ZN=(!(NR`63JLZR2Q!DMkG~Bt``jz+0 zSu5Si_gc^1WL|}gYJD>%hQVV|?NXvABBPU}<}Rx3p5Wx54>PmOb8IHNfG{XX8ePD|%Sxdrdcot-k!24)SB9ay(bhk2Q@{jsOGQ_Ochp zC%>JKrKYmeLs6?-<+w*lFTqr~7qM7y(c4YcETk>$=#<4OK@@8SAO| z$t^XtjgBV?+|anNVZRNl zs`&`qO1z-DrefUMK{euS(V&|phBY$P7UpPE^Y<6qy@xLyFfPGlGj{1=lWjw3?7`JO zbKo3lTPe1ZMW2ae{qJfaHG=0Nsb0}rqjz;8Kukqv!HqWO&=>uo53xG?&2fRV=OG^- zdiyhUamS0*{A-cZ7y9cw^0aHSSG4G%-yOXZ+~oz~7Z{QcjYji1{sHc0mGuQCOyqge z9zBVYO_Zv#iINjSK;HvF)Q_LzTIJ0hKp1pWF(dOgcY;e^8Z8FZMp8{hU@YNz7klu6 z*I5JkSXX>CdnBd$-5bQ65n}Tr5HnW#&dqDYg#w3Kb#8t>?rIT$^R>8>hcS~OVJy#_ zo9huoXNF53!0dz_5|>|NXGXES;Pp31p+h)%rkt^~@MncmI5b8v_hOPBdj31?@an2h zbuOXUlEY{9)YlljhLnP_3C4LRHgnYV1{a`F6)+8OVzD`&@_%>i9=rDRgZxu16a?1hnYFoy5Ux{GoMHEfSr~q z5|6BdnqpmltC`-nWTrYR?*Crg|1#A{*vY)1?`G?!Tg^_{Pa-|4@v0cNy)kOf)AaaA zV$AGO8z(prCtxS3)*>DeaNVtD=E!o8*)^9#{&>xmWR=V-nXP70E@=q|K>(FCTTPg2 zMQ=5`_1<}9%#qj^I+h8EfFB{;6$i!uzuVWk`%l7=jzh<6C=hY}*9P^HIo>>k8ymH-FAkGWB~Eo{HnO!gv4+A# zod0h@o(2sv7?$%o8_GLTVyeG_1%}-dfI|l1+HEGH9@nPb#Pm-p$R}^_-k@6&hw~;* zl5!-ZNuw!DYtStzruSqx`3DYwqA3g)CXvZfFA>cICHAZAL$ z*#L+|rt42Okl~R)EvikZd6-`ErEx)u83G4V?e496wSRJpPWZ2D!VxVmFd_ULr6H)t0g%J*) zu*S^GA&)P6TH%1%A(K9?%I_qB#7=^1)};XXD~UVQ9&Dt_NZ?W&~+J8C1CK|y2uy` z>;&mr8EXupG?xEOl*Sn)v7RO2UPosBc0qRp07h9bAzHzD#ju<{xC<%h{-^ll27>My zLG>&#)W1;|Z5jtdzi)>&)w|k9syTf=w0#oP%gw_0a_tCw18lA8>k_^Rqy?gT7pIlX zQ{T^oVs9K%nuPe&FH!5dGBa&D28Ea*daTtO*IOiZyWu zTIB7v!`fM9jx+AHT9=!{Ti=K6n^$bx?i_TVHL2X}YrDzKT3l`pJ}2hiTLZ;2)fVKG zJ)u&MSVoIVSdy$&1EN45(qC|B71r0~=0$dAKKi zeZ7OukzhBx%*_v9pm*J#3>vJ4*=}eYY+2u;$vb0xgXFH;|AR4DaF94ik*yvU3RlH@ z@Ss8nplKpwxX)bgD0Qv66L4%-X#v>$wvU%K1Dc4F6_?E-;*@$IkQB2(ufUgo5vLW0 zzKlZ;YbcP8g9TdH<`Dd8oNvf7!&XgVPf!IHSIn3-g#b*jQQHLvpJ%s_Zs! zV2X#Ubupx&{;rWYVt8dcTl*>*~O?V+{>;5E0O(sy|?z|qLLyYl9kD=?WeFEKfyBO-1 z$E;g!H;0%LF0!7u9ec^{u>N_wIX;1}_PAD=J=@ErrP!)<@eH&?*{WqtSY-~+K=fJ* zIQ<@ZI?p?25VzWdQm*Z3-Mh*Rw_`c^j%-BMq07T1wLPr~cVJ-=dl$K9G3a*n0)eaI zi)7>~D}~*^`<>w>aACTn$uNz1Ee$R|jy^;y8uk`&P|-+*k>|&~=ju>Pfpu3PZtp_d zB=XJO#5!Q9J8-ucg4R!L;$J@s(_onIqSC{=<^QF3A025cjuxeW{2hYs2FA&4IwWBn zK{p|Xzhfw$>4{C5$c#ySPMDs!!X|~^vbqCcKZ6@z0~lt~+&l@iT8d|@ai0{~;4e%y z2T}McN5j#wU#LiUNe%rG+|DK3(XUa^IyTA~Ls7lNG7P!FfHXvrb%t-acFSyaytO#I zcwdKEVlauz0LY3u140O!S4;Y_m|!_*ChYrlJP9!rs-}%fjG=Hjm5plU$IK)%(D0wL zLQ1TDLQGC5*s+Y)KVLisp$$8hURK{Lmi5zPAqy$Bwf;_X#3*F9O2vajhYrM}aQbfy zy4NrYSLI{C>UzOy>7CJ3J9~u83sXVV!k^Df@eg6@t(76OM}RypO~r&zuIyRJm2&nl z0(l9k$Wse2n$N89OdxSCh+}o2i>?D@+a1p(u_nBF2PV%jO~Ch!Sc6)*DpsJp>@>M5 zc>BF}IDOp&80Ki*vd+mli}0V=G3+v2e)dAEbJ%Qdb--|GJ>qW#yi>d zNN)&Hq1guzTbvo6JhBHeuFCmvklT5y&D_xp8AM2o0J!N~s*kH;J1TUurWR_6%jNov z9Xl4+Fa;xtU;mfEUs!GS9mwFlW5I!?y^co>H&Kb=HmpV$uC~JBA|h|-X&HCJ1Z9XX zlkEs$m}2Me0i90v3|?cLl!G(`U$17*WBmMQcFaCRW*roR-z4vA^NhZmp3{@fRyKbGq7L$Jz z{V{oQ^v(pot%$V}lS{gZRTnN?@FkmGRdRN^Qmh%Z;<*7ihwRS1DG;#8<+Msg+fDSB zp%;vt=x?mDaq?J>%^`O1D82>lxcthV@9D8S4dN?bkChY0Z`$FkFL`76XpTw#{MFbn zS=jf^FU9V&XY!#fAM;jwaXfL`xQ2J0)jrWaC>3oy3070wfex9UJQ-K3Lh_dfzZc=X zn*i+ODeTc8c8BQIxLQ?`Z``;c)})GGSmdo~&7r(74(|;VJ>s&h@}j@jQB#PUd(n@SA5HnxA4sSe zUH7TKQniX~`Gwe~e{37iuS=e=aUavN#qHWHYV*gw5VgPy8donB%`(|9C6tfall=wq zi;ecOQF0m4rnS7M-$hGBJ5MG!Q9e3tvj0^+&QJE|DvVolDLs{-SJF zZHhm?;Qiv~+b?#CZLZ}{?%d}*6Hv-WTTStPcKj570XOYn-p}6R9o60|#GZP5Ife;+ zG{o^7r(X6(;h4q0!Mbg{Up{(qioaTBe#zI%9paoW6)iFqtWhdjXR2Q-ByQVfF)}5LY&*=c6WT#Y&o}cQ^TVxhMQe-C2Vj;0t z?)ZX7`_7sb%{9$mEDQU_4l<{B0TrQX{x?mwL@fvv_|GjX=?lL0EHZ|tOK%eP_n%wU z2RZYo^NewRW#_fr8-+;~mC^mv{3Y^>;h%FQPU3$?#ghM;#ZlD2VQymSATB* zncn`KSe}{wG6kOfBInVL70FY7i!l1O%!bGs?5-9qR5XeOR*h3Mv){z4J) zaCLg)%i=ji9{7vL@pE$m|C>=1^T90swKF02!iKu9#e8~BoCS`^;!OXK z(IYm`-TM=-Hu~8tf2Dk%IB?)gPV%;;ryO{bSX(!GewM#zq@Gyi-OwJ;O1l3wks>s>T^?noJm=++VD?Trlr;Aq(0|i>Te&T{*x|gE3&iV z=*O%$^$9CFq}Au3{@nr87a2(X>uL1~y^F+N$e4EVIfiDT>oG>ysAAeiel~jRo2R!h zx^u2SZ+&s&vQk}q=d(MD`M@=Q5_|CySA5pP24bT;Z1m{da~sVT8=bttMw_2)6fHTA z2M39*6FJS*?b#qxN6ujMvkeGa=7>FP#{IlUaivFEeR}FMwxT{0#g!Im^%y)R(VAn!+YmY zp6P7YlI>1VwO}YOGZD`R%dojV_1AKV=M`qy+(axVZGMZ7-CWxvnTekR;3ybXsGm@$ONYr}VgO(y*n6g2Cb`hd7zSY23W3koz`SX3rn%H+* zd|xN+M|N`lk@&+Ts>I5t{m@aWlefk<&P6RuS4Ok}!#?W}P281)*m%YjT-Pl=s4n&- z$-7cVl;IlgMrv;#~`-dsBh5ZYXo?4{viSTGAYCNHA+YZ*nY zpXm8XPgv@OMu^?pM3L^H=;6mWLK9!F!cR1@^wa>{_kK`Rh`%9@unG)=|E%@uSc}`~ zW%o91Ht6H5ey+23t|yRT6Qg%N^Oq?s?tRWU*L!Us8;GDo@4WG$r!4djP=3SB6rQX1 z1b^{T1k_K+8=V#6U#jvY$BsIAD<@Tu z5?R$aHbrdUh!t6T^Quv?N^a1&cJFKp-eGabxrBvch!PNFckfA7j~EC0lAdk1K&)LT zHrrcLypkm?h?^{^`(&Hr zbA9LeRYq^)ahj+Y^LTW69zT@HZrR&E=J89{Zt?6PZ_C(Sw(}}-^T7(g z)+>9mEzaebcc9+q;+yZy!hm_&?S}9`ucpnC&!gL73)w39I!g^=bG;pU`JWu&G{*2{ z;UT*4!g?IOb3%hyGp=o61HLSLk0M#5rm~$SYMW58FUg>kxE(xfmn9mHrRpp-yHuT} zHl0~a79zHbP3QRgl5X+?6}%1aumpoi-945{U?w~4OM1v+f{%sAqKZx39Hqa~L3Uo7S|+{XY#(Qmc1XQKJIi`b}WwM zPv`@2SA^E!ZGj8LNFVa?O%zq(*-AVLEGPp-7Sf=xcT%-_hj_>%F=VhTeOEb4+-o&=iJmYt#u(CmHH;W>Cw~PaDGtel$lm?w6&yM{8s~5~?%gRa9#jPy5 zNGunfP1(7OcrUS7dZLMS;%0b9Kj2wOaUMcHUTYFR?Dr7z&yHG99CfTXQj$2uF-0ee z<)S0SQM{u@#Nrc8tV}y>&$PpGRPOdYp%||ff65~^_FhjCe+#yF1_52UsCfG0)4BQ! z#S6T;?A-orUhG2gmM`z|kX?4xWbXb#@oKMUhUiJ}^xj1IBGDepdFIKn=#u4rCm&Ek zJj8Kdl6V7ST=Soq8GW!E*Hq}3O{jD_Z;qkgadw{0n?ZHwoXMm3XdKJT>c+8|Vk1Ya z$eCl&->H5|o?`{su3q{3(aTJb^r&#r^x=_3$Z-Lmj?33c0)Bc2o;abo+Do?Vgm?#_kc zM;C}=FBHG#z3kFEo2Le&^K%bI?7{}Io*Y9cfwH>+q)tw&6a699_B?e()9O$rzL+b1J?{fnB&MxEb@A)>sJn@8 z8NVc|ND{>KTsf0ghmoVQ5<6bmpH}JBeUyVbuJ!qyR~Dyk{(tKl6{K$Lf9rY-<%j$I zw{GnS>fZZr-S86;DjWQ_vPT&XC?>AQtZR5>f&Z?ZUXr!Nyt+-ay!eY>9hQfX2e;;m z@4tJr4Hq(g|QJlN=!t^BMS`-MC@G_om7s{yA)km*u9uZYh&ArH0YeE zK}=BeZ#9U0%g43Mv10^oDXLWdpBl;+1cCWlOJY z);*~?aa->&|^~#A}ImIidd*y7eobQ#3ymEh)*ZuH8nUb*u~O{l`Md%Q2bj*3(1=at>P@{Cu1&MPl^Wy~wDd*w~9yyKPk zyz-$}`n-J;y)vU$X7$RPUYXY`3wUJ_%E*(lCA=?Xyt0BRy@b zl`nf`J+Exwl})_zEw60pm2JH8J+G|omGixFi74xpUF3cF(koNEa;R61^vbbbIngVp zc;$4job8nv<5%pJiAQQibM5dSjZ{DF_ccKzMEq4c?)L?edPqy82Qm_wjx0fTAt#Vu zkr zIfcZKJ4hcy{H^3fMj|s25xDjNxKdCRDX8%ja->pnMhAW6FI$Lz1y>=SY40fJp1eav%j$~ zCl~SM(^eEKwsNz&i<5q?t^hav4BKseuC5GqDQqWB?Ac#y(Y236OO8#<|NnRQ|F3rU z1b^y*js7+M8aWec^=RL=SNkT(e9$LP_~PH|^lATouNrifq{i)gd0!Yk>6^9f)a#`W zdNl6ze#fru-*~rk`*yujKicB|Xm4th!RZE+jO?uCOGUmxenc)Hw-Nu>wS2je(uj_{ zigZBwBO{Qh$YNvzau7L-+(+{6s^u$-=*a6x2c!=&0-29&Mvfv^kOxSyth;OZN+BlF z29zzpb=4Npd zvJKgV>|0bjIw?a^;po3Z6SHTc;t%BCMbX^D5??F1xVEnpQXY{I9dVGFNIj(C;?z%u zC2mQ0wp;I6sWnF=w)H11t?i30jV>9LSSu5Yr;v+FQ}2vQe4H-R3j8>ns7x!P|Bg#+ zoQ*{dago|9qi>IA@0GPvxr~Y>Q-5ET_)}uS(9|946MLsCdc3x$&E9-dVEDoa3Vx?o z`f41HHr$w4IN^A-Tl`}bAJ2C1`Lg&rd@iVHcJQU+pXVtbkA5BB@|XC>{r~I$h2_1g zGoA0yA+eLs_u=uVyvh58`tgrWd=$MEKP8{<1)uU)R_|RDGYTg7%CSS&ThRsaEw{x# zPX1?yLcR`{b8>W_uLG!BoE$sk+RQK9idKz(yu!!-exbk@o;;9`eCV$0*v zIq@Af{bz@)X{Y2%@%c)|ceoYbGTRpKhbr>%zhB7h?cl5K^X=;G^OcG3&^Es1$MKID z|Jfm%cS_~Lsfs9waW1vT&ct@P&9rkOstX1X7a?9alE^plis|?tT`Q%qw@%y@;eX1vqS=4+ zF0c|GX-7#RxSWzP?I;4%{O>5j5zdjePV_~N@=5$CGoL?-H+4je1Yzibf8LhQ&LxrF z1-?n~c}F4?A&zn*ew56|oxZ>v`&RRIaY3IU=eVgZ~ zy?uAmqd#YnKk?G%_&R}^*mvji>!OF_N4fg^QJ!7Vf3|#j6rTqSy}K^%ycov371}+X zSU5>EK#I_PuM6GxLhA10iEYw}7iEiAWQ(_$3lXop7V_-7_!O_p7N5`miI-`MI`Jta z{wJD<6WA%f#Z`iM!FK#l-1t2423r@e5wF~ies(gkV8TDqttYwJY1;}2n*0B@ZG5ky z-n#$(Ml|OsZuURXDt!F!D58sy^08Cw_kW&Edg{`9ic5KVHsk(@ro@jj`}w1!h_00( zt)q!!iC2Joe_nHDN?Rv7*ucBdo8l;UqghXLF3+~)w|psLP>A!0pNn{*qyDR zO8<8hubvkC&$?*!Gv2wh*b18$B%MI9EBt@UkR~~ z7!X`l3h@e5ylAob6(!I%Plx}>xcV1c2bM)k{KB~`OSOMV{4R46F9R+8IGR0{Sp1bI zAPZj|-@t@AzR&%2e6?8B1QEae4k89u1EdA=CL&&?)r@_*u+I|qIl(@?*?z?1Xde!j zk5#i-^((8gq^skb$EvR$N0&Wa^#iN&vPTV89bwg($I)L|Rg=B4vqw!LL^@uUnwMn z)I&NV{gKJYGGq^O0=b5y=HF-P|CXzyxrBdpnOi7RZ#j4ct9YTIUen!qA7m+`Zzp6ZcO)aw} zy_)e&t&XoCQXDCZyoi`cU8D)p2I+!y7vCGv`;Z>U+eka4KazqBLq;PLk*STM|K>}2 zu>`wBkYUIeWHK@XnUB~$*Y~2hzpr?xcEsZRNl1Dm1CkNRgk(mtq%O{%b=42i5BA1aX z%d#AlZMnYOSZ*nImb=Rz$&=*IDg#$Z~a)x=%f>{-$Qs@@r+ZfL2{=ul3XhX%n0gpImw)E z&NY{sYs?+ycjk}gIrF;tz|0>i5(Co6p%I}4p%tNZp{=0XdRSI4zu>ys2ZR zv&e}Ya85fh=MU$O^RJWJE#g{kW4EQ--hJQg>!!G)+)v$E?jm=kyU{)F{_AE97YvsU zR}Jgo8sV1VuHio6;o-62CE-=!ufjXS`@=tk&xJ3CZ-@U0KMD&CD{|BGNhPGJk}bU? zy)CtuK9R;tbETEicImM6t8^nGJ(jY|#pG(TE59zcmfx2@k;lt(Y0d5OVfk12hWuF0 z9w-~o0*wRh0{sJ{0}BFc0{a6$2mTB^3FKGGDUMQKc~9x3j8SGOYn5HfN#%;-Q*)|i zR8?)O_Ed+dQS}QNdAE90J+D4cb84kDMRT;aS{LnOEiyv;RGY1>)Kayb+CJ^1c2T>g zJ<>7mTU7^%Q-yK1W}q zFVnx$cj!Orr}T6BHT^IBzCOzM!q{f~Xk0O#82QY~W(~8M+07hc&M;S*- z?0j}bTeq9oE$sK~!S+OZshvto|7QPVCpbBr(vIxZaT+__ok7k>XS_4RS?KI{ZaMdy z$4(|Uk6X=s+wI~;`q0Xsx}UjUx|`iS?qT<5_kw%f{oD10Gl%nri-jwM17SP-Qn*35 zMfkn&`{91!!L<0a@ci(y@W$|W;S01iwnXyzx&t6ym)?>(NPVOM(j;k`^qI7RcHS#} zD;<|kNf)In(jDo(lv&O#zaW>C%gK_gMda#o9l0qj-%jo(_mDr92h;wO<kJD*{6K3Tvq;7{AzBsf*Me5wJ{nXGFTm}ey;9N52!z?*VKY^ zj`CU+P1b^%g(j$@y{f&THPM=Dt+jSqver%Oq4m`Uq8)~7W3-9dRBfg` zoD=*axF)zI_)YM8l*(_xKZ4oxqPnHOuD_|jqqo<)>jU%=`gFS327QaZSN~o=sbA24 z*RSih^uKkUW@RK9nT;GqUZbE<+^B5SG+s8E81EUKjXuUuW0W!3m~MP-e2F63X6!b; zM-lyI{9`;cvYU~j^h(*RZq_khHQz9sn9a?1%=b}8ADKhV@#YkB9tvrdx!K%f9yE`e zXU$9IO_WlGP_9tnP}NWkI_`U+o+zbhp=F`e(6-Q#&`+Ujp(ZR-VgK(EDEd$M7|2_417xmx*7O4kY3596j7?tao$nh zSB5KJU^osaKPrD^!(*QlwemBZ@K>TUJ0nnNq8Rn_Wg zO|{P2M_7*;^oy1BiGA7+^o6UMKUgSOF{lP>1>X*K4)zWX4bBcOj|9I8UJm{nOw_aL z`DpXfdKF#Q!}?3KeMkL6y}v$KpMYZ7pzrcp{f?e!e~U%s18=+l^D0 zmGovdGmlx^e9?T3M(k|%GCwg#nUl>q<`Q$Qxz*ff9!2F`_8KrLlq2*;sC6jPKJ)=b zWq4?IXm#j26wkd-A*+m~TDDc!dc%6(>Ss-}KC@O@JFSDLoogtbOm-3bMLT3SwBNS7 z*?mzxW9@nNI(w7-wSB-oY@b90-LW${xt$^yoAQq7)N)>T-g4SG-JDU*XU-;Pw{yxl z=iGIkIGG}DUbmQA!PQ;It>eDwwspI@LM6>}m%CrPKf1Twd+sAQd$@R5!sIj#HxCa8 ze;M8$J{0~X91H&y7O475j7*}GLnWQHlDJ_vwrJd3dDJ3v5FfEXm zasQ&K(Tok%_G%AxfI3EvtW&pQ|9?{dRv)T~T28G9<3Fg?&{}F;wXuxvS=txcTJ3A? zN9~MuMZ1e-C>Sgsd@&ei3^xt74|WTF92^^*5?mNu&Hz3b{2_QQ_$ZiFFR!b5J-wwK z(WmNRhGRqHEu$?1vZvAC7;KC)qQ(LSQ))s4*b=HbmdF)bl72B}u+L4C#`}RkS$oY)NZyARF+UcEa zn2gcRRA;WU%Gu?db*^GIvd~ba-70QPw;_h3qt{4t+$HW>cei`U{mK0mbdWxr4RlZi zbWlCqkU={LOEEe8efa0_)$rZ$Lt!V{_y&NEUgd~#Mu}WtbUy$vxx2te#Xas#n!N)%)PXd|Dw!xK8hQ1B;NX_15}p(F( z^!qSO1xQ`cYs+O#equLaP@=r-$f7&5ZVp`N75{V+Q(sv$5YeVPrym zoAjCbW?Qp^`JvgzOfiR<6V2J?0`p6-tunT3n}E$$ z0L^*!B72p+-rjESX8fPD|F->32}gAt=S`=dGu>J0taUa!-#J&D?7)snuIkos8@Mgp z4xr145qBE!a+|x)J?frve{-**`7?yG13d~c;_HSRh2IK)0LYvaUKCyd$lMY>0l=gq zb&vZE1*8gi4yIH~>WjxP4{u?sbU^w+IxYPM+_)?G<*a~>QgS8v6}he432ZT)K6FFQ z7|0tah9!th2+R#^rL&w3+yhP;N-f}IGrGxeWvue4GDBIYtXDQEdz8bX}~qrlQ@y z1zw)Tk@(k62f(c81RULI>a=k_a0WQzoGH$7XALcV#JS}B>Ev+>qbpi^nqq>x)ZOZS z=bm@3xp&bM3E`|XupRCa?jH${3eN~H4Q~q{pk*(F{}gsTCEm6frMyx_=|!(~>q||g zmQr`AA4+2^&~i55a=G-Cv<3Yx;N>}VM-pwFS1t;$tS0NSBiF)5d<$gR9xXB)4YF3= zjqdnG{$0K;Ka|s>ISL0N5^zNR)%KTvzA5p>C9 zbuCurn)*o1rWMsHX(6qa_KMaB3)4FSP?)aG#mMZ`&H@x4Y3YMmf`x-+f>nTtq2Q~* z#=+*ncY}R{DZ$~v3Bg6djlo?QnKPhWxX95WFiRhYf!=kaG?)8Sdjiy z(|FxzZA9ozlQ226<3`8WX?$xOH_jSYjmRD2u~EPbnyz^?bP4O9;JF>etxA}VnpOj= zjn&Ee$Qor$1P3gz)>x@l1G~N5-yUjDuxHo{?UnXMdzZc6{uuz5(J6uU4}@!ln}*vk zY(EJP^&s0Jn)Xuoju^HReZD)G>r7G}sen{esu-bt9jS>lTADzcF2G{1#15RHHUIRS zg<^6AIe>5YGTweGyu*I@2V>=F@_cz2{{D7(KP`GjzKnk$Y(f4&34Da=f%<{YfdPT3 z;JdYfREGENzybWle*)>0OiEFuilQs8DNU5-ScFIiWuP)znXi1VY{V$+qBYMcG36gx zGMk!5E$sn@TI$Q{n`&#duQ~|G@D*&qS@jC`ptx39tEs)FHPD)At+ei1KW!AAz$$G! z_TVthc~i?5d>NF`jpiF3oD}>lcp&&=@E2HvG(8b{PEouK(*H;wqJOF{1?BJ4kLah- z{}1&HMlRz8Lj&`DXpBVje`Q=S@|dO22CmrPa@t7(TCGVY_HC7%B%#{J(w@FMt+ zVe2)kiPhXnwz{Fh$AJT80O(d*XRHgrxyUW+9tb^?o!2ggJE_o~>+Kz&xZmun_9Hvd zdBM?eB0q4(IA4IZw&)5QeT3(j_DbVl13%NKz+A22Eg>B zhvO-QakencEj_h8*c@j@%|+%4Gu1qRL5`XKM8I^pVF1d4>O!HnLR~>~J3~K$-+Wej zt1N>sY`qME>uXJC;JsxJut(W*0oyz5z4j4|?FBn#|7Ab4b2o-1lGY^SunFOQ3D@OC?d+LCKO{ zmEM%v!1r_q=M86YPi1&7lQv6VOD8?koJr0u7m{C$c$&HnE!{+ZTmC@qgTFRWo*^%h z_sT~+oOeS`2xJYE3&;T{&@Au{zFWV*$AQ79>D7VFIB!3K^8R3KKME9JY?r4G)K@yf z`}I>kRwgOa=nJdp3m25@%55c=s;FVLHoQZOFIP9Hd)05%BkCFTvibx+ zAiGu&EgjYxh<>bP2Kdj$i2#dMsL(s?N(NUo~f0M_?oklaFfg?v)JO8>|lC=;j(FVq0N z|6|}%;9($-Qc0-yI+CZPU^qvm-IhS&FO&Vm5h3f`2Hy7ImTim zhgsMxZz^UO7rdF-9ymS%-sA#A?wQc-&_AJ!RyM1cRhnUKf~()K+C;4ORv+~8SZfkm z`3q~Kwaq$g{b*gZu2>JOCss~azH%_Twq1h;Y6dLpW`BaaHU;Cm4A{NX{>DCGpSG{t zw{YC@In|w3jQ{IS67E`J*ms1OE<cJ`bC@ zPCuZZhjh*8Vd?Tlz_1x^4UD%LXdf7TK|v#osm2Q98@#6T#x>)v;WHzd%)Dk19PcVP z-i;tl2AIQfo@Sbh&6VaRT&Dw&CTGom%pAB&0$|q;y$-}q_6FX_knou1hCUCid^-3p zg>Hr(d4Rhl%$IJ}pp{!O=muG{Y2M}59vb&I>ksQ6E3;jQhOHj4-+)HxZKv2H?8){D zAoh7+R4Fw18%}elz4M{-F~e=Dv%p#5Y<0ecIJp9Yo59V`U{l>%X!4HkKzF!137Y;( z2HDTFj=1_Gj|5@=ZiF?&${5mNTL{I8ssp=WsHeDA=xKoq5% z8u%t~Fz|igSl}eaITpAbNK*1BC6%g52=m+wu%g*3b!F74V>F7jyqR&z=meZX%&Jt&( zlZsZ$grO{oE(@c_mbxe0n0w333A*VS9v5C2-UX&XQQh?UsxY*CQhF&nx3r*CnkYv| zdPRC20%`!kt0};mrMM_3r3=zE=^yTBvfNi5Dv!pz&GW)lyX6BB`GkB{z9j!4-$##S z2;}5;RtfMt9<UAM#o`Sm_Axmy3*55|#FInOly*ct`g0@afp#`2`;}jm ztMJU zU7KMYqpkn3a@pl=7j4-MO*sQCDPmwh*gx67*uSGEAKRI6UkibbRydJ$c&uMLhn-)Y zi_U$==caeFxH+LDt3gRNaGNo}-erjO2I-D>XA&n_0@_{c?sShZ)Gk3(-**3TAG(>t z`C+~)L0M?w5R`Qjh{|?&Kp*4Y?hW4){e@6FUB*{QdPj;vR3BxG6_%?<=nx`$xkOF{ z-(F@wMbOoA1B(O88A@N_f*uOwBbw0+J2rzhKCR?bORDA7py!fwQD>$-04^&jP?NVONE;c?sgS84i9syE~R7GSnUqgYzX^{5L3{ zqo|*&cyjmbTv+}RPFbh2V>peRmQE)^NV8Bp3hYf?w<-5ynmZfYz75jmZ#NU1->Y2n zUYrv=@rlrRk|n0bV0%h^h80FK&Al zR4-_>!cG}T7MFN!JI@kKhD_T9b$-QpK(MwjDyp_y-)#*U8^IC#92mdf{lPusUd9GI z!2W0VVkp6|8~&US?S}9^T(V!_SiI&bk>ER%5Fs~3DgO^VlLAA8OJL~TS z;b)=2wnM1>j2632i#?JuK(dtZqIV&=w)`rKFpVwLeuWRF+YlG`$fJZ z`+@J}A!se!@)m)2A!t8Dp*;wcQ&c4sQC8RT}tJ0`;wltqcI3Pt_wkY2{xDrTw8l0?)l*lr}6#IDyi;g6b|BIZfTH1qGiA z$Q>Z;KEN7=qM2?jw7!B&7f|h_^)LL{3;55a?Fx9%)$P~p1{n43_Ba}IhkeF_W`!Mz zaI6TtuX1v@CGnvp*K}WvcoC1j?nIPJJj}ieD}KT~haJD_-ftlx9XN-zXf&*s;Y8o{J> zz%lDD4V5C}rRh*TDaG3zygFvE^T`52at`r;j-3QBFYC zTvhHUkAbPV)gsuvN~)xW@bF#-L%d6%t`G2ZC;)YeI#*rd(Qtcl^G-qEUQ}wV~R0%;j{C+uZ;`cMxCUS32Bv?Y8z1qAn*9y)tw> zBUm%|Qt+){8~nkZK-QH(8|(KfF`rq+GGi-x;}`VCV^43C#>83X%MdpmgzkvI)=z-V zoe6qbX>K!rgQ0(5`a&5(*~t4S6{-j?-~u{dgWqXRj==k52@DF2#175^c77RJ3*Yk% z@t(`5m^+@=m(|K`6|hQrp;rY<(8zj=_|JP*XREt4&>Bn@!FX$mHPhN>4M*cd4&p4_ z^D;lm(IYJsNLdY7mxdD76J?Mj&fXK-ON7{*oSugr108oO~Wf ze#rxw$uI!Dnr)8i6m}op$XbHI>+X0(LybOSA zo>xauy;dq^{arZKsYSM4t^_HS!^*VK^XU zZ6DzCv~%9MhC^KdB~byQ&GvMBQxAwFla}*|JKb}t_duv0BW7~Wz2g1_1Q8LF;^DF+ z=Y+!bplv#X|34;jGBG?eyb$fb(bEo>N0`KkTjt{Edp`L zFzFK@U^mb_#gxhf-(FVUP&zAp@h=Z4e<=@@B$)CS)bbHkrbQYsTHC3;A<9=1aytbH zbK7$vD{5_U9D6~*jP%lUK7Tq0|Iq%@65+`u!fmewn=t4;ffwHcv6@3Kh9R#{N={{? z1`XGVNXle*??uKcW0!Hxcw`hN;lUtY*2?T?b~hsf@%H8tDBEV8s*WgZb z6Zx*;)brxreVoDIr>HZ}^D$nd=}x=#aL$fJ!Y2hdY?I& zFZNtQ%S$9Dv?TMXBcTV8$U^?p5N@sT$(L!XwaxhCXECRD&~8b=?BuGH4ORw7iHK$= zOsmLzn+n^tl!)d=obi1)<39)Q5$(>S7sk9A#JgVB-_Sehee^;4aDAK}g)>=)`IfS zkm?|Oh`FIvp&y8pN6v??5F*nElh-0R)&Qb>py#Qtx4y@+U$YYIT#zrX(7tW$jyM$k zJx6^8n0X0pz2CkF^>W*DDe^i+opR2Lz_r&v%e}opy%EOz7w0!PvS+?UE(W$k;#Gfl zC?3W12rfk~FU?AYZWSq3-59kK;KVkDzb3uvN0_mTgwOAUAB%p{J;9fiev(njEftZ< zNfHicEixV&;mNmT0C#{d>rVRBFbLOa4CT*Z)ptohN@p?Yw@|nVnDnfkV_!{vQ+^k1 z8yP5%BAl|A6d5s|zX7$KC9s|Wn!O~WISA=mEAUF-^}t)i#|8x^1!e{o2EGie3v3GP zAZmID^YMeCbQNyV6HZZyqMKDfIw9;4G8MrQ;O zu~lAP%n4$sH{nr>+Li18NfmFCkT;Y5u@aL0Fg+wUzEoL&yhA2TJ)$WsQ2Jw>$#4ya zBF-5c&zsI8r+`}#c76z){A5UnwWQ-6as?|Yy{IPONLa3-q4sF+P+}Bu_WQmL7DG@aQ_1WB7ywbeAwHHat&a6Q!*@) z<%meS8!S%&w=V|EZIE}u?HnV}5_=jX&579+goOUIAG||9_&6{Mre|?r4`H>#@I1c) z-Vz}bi$S`oN=<@mZ^I^zfPS9=tX~SFxEV8iL^-9L2d+KxdV?^=fVD^(TI&W@8w^sL ztgceGsr%7m*Wqe2fcx{4l=B)Pwl3N*QgS}kPSN7O6Rt@Y%pWXH%Lf5p4d4sg613?J zAwP_u%?wgC_u>Iuf+@U1P(Guc6DO~*UY4+ppfO%0S+@fuMr5cLHk}WLv6i6QPLk`6 z=$FaeeW3e|EFO;`qpj+bz0=A_#ux01FF1z2vcyr*aEMt$ABH{wwoOIxtOT(A0A#z4-pLdpGGEG)Nw8>Zb+vlYt;Sn( zNw-SHdp`yXe8)?lD`Jnfr`exlUN#bjKMjlV7df7pojguSI@POAGl==_P9KoOFmS|T zn8I)9S67_dPJ2{M4|g4*_nUyYBBXPM2+zU>5{gam?GgT;Kx#!%B{k?cN9ii*=EqNCblJ#r zEC~#+8G1W382|4`C=8@-V|B241EptJ^JuIc;DJ+wQ)6g>j2>aHk{|bq-4c7zll-_T z_5wn7hi#ve7i!l8`*lDAq(JO$ia3XyV_pCy8}48|f~q~-(PTkhCjmDT$<_fc2-nuj zejG+J)eHdl*Cbm168T zHvqcx(mk|*Xx`@VE&Yh0M5dBrdqO@30r@u|yL3PSy|sXJ>>C&n_%!et0K2x*Kxqkf z>*+n%~(CO;X&Qga^O3Kf^{Q=RewZh|ACjDm9&}4fQVWo&NX9vcJW}uSU`lxipmP{{&py{ zm&;Pjs^HPks@7L4wJ(& z5YxP!fp<_oPD5RjZ^0EO1#$-pk{ADCz$ByfwLlwuB9Y}d3*PW6K=)zH^6!CLB(;{t zmsS-Eo}~q`@jgVyKP4u*7%w_i*{wuQkk@n<+Bg?zyeLy66oRAJWpyMmoyFuje61dY zK)ygsr#!=QGP&}LXvuY8MPYs~Yhiffy)@syK}WBHv2CPJLzkw)o*g1FIV)UnA^fNc zq^v5Wu+@ODe}m{}D`PaUe3tQ91Vx$(-n$PAoZT$pB_r2hF2rmw-4^p(a@Dev@n|vp z8shy9BEw+?sxu=VZY3h)Z=)}#1J^{We`6ho>lE}_CObb=jKmPEZNE-X^If~E-G>Ov zXa?e3Z&t)sNSP}zZ0Vdx4yHq>w0M{{Z%pv4BShN()aV3SekTsuaTMt#GF7v?#WBzd z*zHxfx%-aW9ZtAEwA)a!*v4bBXOObG6p#5U7}4GC0Wu^VjqBr`f{!DinQ{CAZnFas*PJwoK7`L_5js!BasCarITxe1 zs%(pgI`k4Well9&D+ga(;Hch!d`5&ozVk?HG$CEVptGA@wSqH z`L?7dk1!WSNG<=`JYxP1>ybcK;)|g5zM)C58;e2c@qE^wLg#U1j^IbIB zzBZ%2yEUA+=}gGDFRlI759GA`?u~olmX#r-T@Tp)4(UqWNM`%UjsV>!*>i}SrVsp%*^w<@9ID#8k-ELnKcK^q!8)#nNt7VgfbXMznq>_ahi^ zF>hieu>cWvJ5Ou>L+WB4bip`ix%s3ku4hinAu=T{3h;g;!G|jFrGJi&bEH=yD1-NC z zUq>dyINCS?$eov@R!yx=G^mN%ik#=JBruItClNJROu$wouSdkZho71KbcKAz2Wl~* zwGp88c4jWz24EEm)+0JJjqK(fjPdk@TDy{{I);{>t$(4fAntP%zT_+;Js%h;#Y;)C5vEP`0Ye#sm2-6J45pZ43M1!wG$3v$>cVWD8;G&lUK{=$W)wLSqz`aAt z+6QFJ42S1hK&Hb%>j=HVPXwemZGO%!?6f6WF&QRhn;WSGohqo35fCM_(BQjpx=w|! z;Bb+zd@jK!-ak=LDo$*#4lY(NX)?xi7qeOJOZniyWd>qfqIv`InjXoSU_olZa`yBR zRL0^heZgSd9moV0l9iXh#cz5__ybZ?hLCmksWLYLJYESr-l66IlWE9o_D>uZM@5l55k+vRL3iq`RZ~jp5CGs2w<0y^Sr|6lDd}J~? zB&JL-rl6vCfpX6CB%zI4BFzh@4}6)*QcSGaJv zGC{Rg5RN18i$w$ZZYKDy17J(y_qHNGt2%+; z`hnp_pg7jy&z%7$Wb{1!Dp-x0U^x+->BMxpQ7}AHiIFXQn(@4csN&BchPc*vjkK%Q zL=vOujQvb(_yx)?LpWCiN>xm+Y86fp=c}wC5AIuN zw(BIG=7MUgsw>$1Ug(2Oq+VqAQcg`0F4~d8+>^wnA^1v@NjhC@EGKPo2Q%T$7?+IF zXaUD;fM0zt;*oASLj@q+DnPrv9%_sB-y0I?GFhw=puD<}GH(O3ms;z{joHWSx6|19 zKZ$Aj?W~OG3dGMkVBveB;ZtC=1vRsbrrHMKdV+N2E6jWJI~kqqfbWt{H4OdBOh$Rv z=|yJ6I42Ti66AUi-hP;xGhn=QZdPVNmUb(w!l%5mj)GM*B#0j~q*#>25}BLDFMYF;oag-LB2hDR0I zul=ow*(`O?^l#!sw+=Jb@x`;Nif_OivUnNk7!k zl7LXvcc5akY6ZxLst%3Oj>wW2ZPSP=t&Dgv>mv-dba=J-iCYVwHa>Y|G)Wn=Nj`n1 zqPM|teMe05CYev!pj=Dql^A}y?&x*Bgv0jC7whfKBpJ^%Cqc!x7(K+fOww8HB_n+cr+rSZ0?Hl4 z{O(J}ZSGhB^2pjSfAV8onEgz*y9=x>7AnV`c`ei=)Cq7qh`fLq*vvHmm@5&cNN2UWJD7C@sC6NM zj6PVkK<9Whk5bj5?PDyGOw3J9OET_6q!%d0Y zc4BtkV09E305jD2xS`wO1Ak;P*0Z>+U&{jeDdy#YSWMGxsI?%b(US>#pTQJu1^Zlp zW_Y0a$SN#HqHara3CA*;7L&>?@(2%r2`&Un=#g@IH81C*1%y#2y&p*d6KUZ^AluDE zEe?|DS%B30+T;T?^fJ3YAS+-D^wE4KVC{x0zGVE#R9X?JD8nq;uC)7H9M?SrBW^M> zGNAV=hD@gGy@J-8=qbBZjD;O!h5UpgdoALHn2HgttzrcTF}(qH?P(2RhR$4c-FoQd z1Nb$k@oWCFDnl-dP()*VT4C*`dATAR7!~CSDK-OE4JM6kwQ~SQ`5rE7dN&(cpoQI1 zIIeARQNJZt_=lVBxqO1x!;#j69J-R(){ku5%}l4{fr_;E%Vcl2mELE%O$s#fEGA}% zOtu|FZ;wJH|1CWs6<1_|h^U~*0cil8G(esye?c14KKSE{WPN1EbXD{wW3<3%eZb6` zD9-7(5EB=@gnf|@ST{mulL!_JfG(a)CfjndK=ybM+kfa8nV6RM0{KodS=%k?4{PvP zju6?(teJq8IokKcaGMj5%Bh#cRJ{XVBqrgnWloi!?7;dweqj!nZyWIS5V0i@S^C?^ z>dl-8lA`-Evt%Qk7_0GVva^W-ZZPvQT8CqXT!^KH&9!^y~Ce1U9_Y25xbP^ zI`{y`V+^$2S{MKWUH6946eKvD8Srztv+F$X{}9OFE&3{3@TcHa2=;sgUd59U zUV#H@{`9#BV=+MMnUr*xadd-;Zh}+K4I5O=Fu@IjjIj|i-@ha`R@tOo7d9Mb4B==QJe zA++QqFF3!}*#=4!+3pGC2iYll{Si(j4|tTUi_iIV1M|&?|aU9p3id@ zOt+XeaveIs4%DC~E@FqV2as+I=|&q$;V6}nlCvTN#cC37vJ<5PFI0KMWj>%`Z^Hq$ZO$?)9Jjk)=fkp%bH0d`G{R`GR>TXJ7T(U7R+E8#awP}6OU|b@&g*k zFp6uO%Ru{)#W*pKsLeWb`$lwo1NO>v9Ni@h3}tY_n@Bp=!i_eNYCVO&d!4+atkvkw zgFBGfA%O&h>`z(l-o`md!f^30C*)9PQT)h7wa6Q=loh@5=f5%db`BJvBBcQRVeH1k z8mAuCkvyx?*Q{eUs6k-3i7_iwWEjfN5OBKh&4zYG;~pXM=y`#UIc2+=|(RWTi3%!j_WB5@5D`CBe>fTy+vN30D;>>;#_ zpuK%n4>^p^C>8C;!^iYO+82O6q5qU&u2zt9ujOu^Hy#W9IyKw*8{wPfz16waro^i zE*ek|v;QPs`zf4_xlrU93P350$Jd;Wohf^;;7&6CUt_n9oQ!aAo?(iwnxJ%mnY3dS z?j4$YFa6kI1Ochd2IcgYq5}NPDxKEU8$eYLf(q5mR(xg& z-p@u#h_u_1hdhVG@EmBlh2l}haXXxN7Eqpmp=87N0a1x>8T2M>5B=jpOH^k!E$mw zVK5e50(|WU>_OTm{Bxwq%C>_%psE@s|2Ay*4%FQcHSy=sRtK0{WWIldf**l~AJ4lj zRAenp^chlZdbpqry5&j;iv89ob{lyJqOQO*l?5bCO2}!q^|bdw%#EUe+Zb%pSZg#6 zStrY`O(9rZ%KDjl=A0+?0T|>CCjL2&Rg909aKVG%`TKLO1OqgY!t zRwI+P6c495`9~(5t9*nIG@X~Yj&A}~ts;6}=Q<5y(*<;5d`cD(kn zx1?bP^GQarP~b!OiB*c8I8NN`A9~$Blwh&yh7&k@177y?)C~yp0Tp39hli@&mTyzt z*^eavP`F8OWT=9>os|^ngc7IWfqx8`US?Vklvs-ecMHKyc(+7WQq6{Rt48BJg4rU4 z^%21;JseCVB#cWnU))%C;^SCX>KLSdN(nN z(p$*vzZp)hf#m8{A{kwry#Z8BP6s7-Bvb!nif%rfLm}%(B#11U>OrKuqj=`O@HGER zBrz62PYhexE0d30w^rkl9b~Nl|BXT9AP#tHJmz=-QfejB>=9xa?J42zSZvqftR2ZC z>$JsP?LLHr+WeG$ysknRkAPG=t+swp4$*K91|qCZ7LmLH4JlhBWYBq!5edo4G;p0>V8arBp1PxQM=KRh-D_cn##_4Wa? z7NkDj#1GZ`qqFszZmhpDTR*AqtS+6~?7=4NurhAhU0>l3%hBiSPWTIQ^zY~{`>*8a vV{~`?-F*7>!9iX9-}vu1r#nQC@Ta} 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 F{sT_f6zu>2 diff --git a/casino3d.inc b/casino3d.inc index 628a60e..72afffe 100644 --- a/casino3d.inc +++ b/casino3d.inc @@ -1,5517 +1,5614 @@ - -; ============================================================================== -; CASINO 2.5D - MASM32 SOFTWARE RAYCASTER (CP1251) -; Graphical migration; this is not id Software's Doom engine. -; ============================================================================== - -includelib gdi32.lib -includelib winmm.lib - -CreateWindowExA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD -RegisterClassExA PROTO :DWORD -DefWindowProcA PROTO :DWORD,:DWORD,:DWORD,:DWORD -ShowWindow PROTO :DWORD,:DWORD -UpdateWindow PROTO :DWORD -GetDC PROTO :DWORD -ReleaseDC PROTO :DWORD,:DWORD -StretchDIBits PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD -PeekMessageA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD -TranslateMessage PROTO :DWORD -DispatchMessageA PROTO :DWORD -PostQuitMessage PROTO :DWORD -DestroyWindow PROTO :DWORD -SetWindowTextA PROTO :DWORD,:DWORD -SetForegroundWindow PROTO :DWORD -GetConsoleWindow PROTO -GetSystemMetrics PROTO :DWORD -CreateFileA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD -ReadFile PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD -CloseHandle PROTO :DWORD -GetAsyncKeyState PROTO :DWORD -PlaySoundA PROTO :DWORD,:DWORD,:DWORD -GetModuleFileNameA PROTO :DWORD,:DWORD,:DWORD -CopyFileA PROTO :DWORD,:DWORD,:DWORD -lstrcmpiA PROTO :DWORD,:DWORD -GetFileSize PROTO :DWORD,:DWORD -Sleep PROTO :DWORD - -C3D_POINT STRUCT - x dd ? - y dd ? -C3D_POINT ENDS - -C3D_MSG STRUCT - hwnd dd ? - message dd ? - wParam dd ? - lParam dd ? - time dd ? - pt C3D_POINT <> -C3D_MSG ENDS - -C3D_WNDCLASSEX STRUCT - cbSize dd ? - style dd ? - lpfnWndProc dd ? - cbClsExtra dd ? - cbWndExtra dd ? - hInstance dd ? - hIcon dd ? - hCursor dd ? - hbrBackground dd ? - lpszMenuName dd ? - lpszClassName dd ? - hIconSm dd ? -C3D_WNDCLASSEX ENDS - -C3D_BITMAPINFOHEADER STRUCT - biSize dd ? - biWidth dd ? - biHeight dd ? - biPlanes dw ? - biBitCount dw ? - biCompression dd ? - biSizeImage dd ? - biXPelsPerMeter dd ? - biYPelsPerMeter dd ? - biClrUsed dd ? - biClrImportant dd ? -C3D_BITMAPINFOHEADER ENDS - -C3D_BITMAPINFO STRUCT - bmiHeader C3D_BITMAPINFOHEADER <> - bmiColors dd ? -C3D_BITMAPINFO ENDS - -SpriteObject STRUCT - posX dd ? - posY dd ? - baseTexId dd ? - frameCount dd ? - curFrame dd ? - animTimer dd ? - animSpeed dd ? - interactId dd ? - promptPtr dd ? - distSq dd ? -SpriteObject ENDS - -SCREEN_W equ 640 -SCREEN_H equ 480 -HALF_W equ 320 -HALF_H equ 240 -SCREEN_SIZE equ (SCREEN_W * SCREEN_H) -WIN_SCALE equ 1 -WINDOW_W equ (SCREEN_W * WIN_SCALE) -WINDOW_H equ (SCREEN_H * WIN_SCALE) - -FP_1 equ 65536 -FP_HALF equ 32768 -CHROMA_KEY equ 00FF00FFh - -MODE_WALK equ 0 -MODE_SLOTS equ 1 -MODE_BLACKJACK equ 2 -MODE_ROULETTE equ 3 -MODE_SHOP equ 4 -MODE_ATM equ 5 -MODE_COIN equ 6 -MODE_DICE equ 7 -MODE_SKULLS equ 8 -MODE_SKILL equ 9 - -WS_OVERLAPPEDWINDOW equ 00CF0000h -SW_SHOW equ 5 -SW_HIDE equ 0 -PM_REMOVE equ 1 -WM_DESTROY equ 0002h -WM_CLOSE equ 0010h -WM_QUIT equ 0012h -CS_HREDRAW equ 2 -CS_VREDRAW equ 1 -DIB_RGB_COLORS equ 0 -SRCCOPY equ 00CC0020h -INVALID_FILE_HANDLE equ -1 - -include casino3d_data.inc -include font8x8.inc -include src_graphics\platform_data.inc -include src_graphics\casino_actions_data.inc -include src_graphics\audio_data.inc -include src_graphics\startup_data.inc -include src_graphics\card_tables_data.inc -include src_graphics\native_durak_data.inc -include src_graphics\scene_animation_data.inc -include src_graphics\arrival_data.inc -include src_graphics\city_arrival_data.inc -include src_graphics\merchant_data.inc -include src_graphics\hall_data.inc -include src_graphics\npc_mind_data.inc -include src_graphics\npc_life_data.inc -include src_graphics\native_wheel_data.inc -include src_graphics\billiards_data.inc -include src_graphics\buckshot_data.inc -include src_graphics\russian_view_data.inc -include src_graphics\unavailable_data.inc -include src_graphics\native_slots_data.inc -include src_graphics\native_clover_data.inc -include src_graphics\native_coin_data.inc - -.data -ALIGN 4 -h3DInst dd 0 -h3DWnd dd 0 -h3DDC dd 0 -hCasinoConsole dd 0 - -bmi3D C3D_BITMAPINFO <> -msg3D C3D_MSG <> -wc3D C3D_WNDCLASSEX <> - -sz3DClassName db "Casino3DRetroClass",0 -sz3DWindowTitle db 192,241,241,229,236,225,235,229,240,32,202,224,231,232,237,238,32,45,32,50,46,53,68,0 -szTexturesRelPath db "assets\textures\casino3d-hd.bin",0 -szTexturesFullPath db 260 dup(0) - - -playerX dd (16 * FP_1 + FP_HALF) -playerY dd (16 * FP_1 + FP_HALF) -playerAngle dd 384 -playerDirX dd 0 -playerDirY dd -FP_1 -playerPlaneX dd (FP_1 * 66 / 100) -playerPlaneY dd 0 - -engineMode dd 0 -interactTargetId dd 0 -interactPromptPtr dd 0 -dancerLuckBuff dd 0 -flashTimer dd 0 -flashMessage db 128 dup(0) - -promptDancer db "[E] ÊÀÁÀÐÅ - ×ÀÅÂÛÅ $100",0 -promptBlackjack db "[E] ÁËÝÊÄÆÅÊ (21)",0 -promptPoker db 91,69,93,32,207,206,202,197,208,32,40,210,197,213,192,209,209,202,200,201,32,213,206,203,196,197,204,41,0 -promptDurak db "[E] ÊÀÐÒÛ: ÏÎÄÊÈÄÍÎÉ ÄÓÐÀÊ",0 -promptCasinoRoulette db "[E] ÅÂÐÎÏÅÉÑÊÀß ÐÓËÅÒÊÀ",0 -promptClassicSlot db "[E] ÊËÀÑÑÈ×ÅÑÊÈÅ ÑËÎÒÛ 777",0 -promptCloverSlot db "[E] ÑËÎÒÛ CLOVERPIT (5x3)",0 -promptDice db 91,69,93,32,200,195,208,192,32,194,32,202,206,209,210,200,0 -promptSkulls db "[E] ÍÀϨÐÑÒÊÈ (×ÅÐÅÏÀ)",0 -promptCoin db "[E] ÌÎÍÅÒÊÀ (ÎШË/ÐÅØÊÀ)",0 -promptSkillCheck db "[E] ÒÐÅÍÈÐÎÂÊÀ ÐÅÀÊÖÈÈ",0 -promptBuckshot db 91,69,93,32,193,192,202,216,206,210,32,208,211,203,197,210,202,192,0 -promptRussianRoulette db "[E] ÐÓÑÑÊÀß ÐÓËÅÒÊÀ (VIP)",0 -promptOnlineRR db "[E] ÑÅÒÅÂÀß ÐÓËÅÒÊÀ (NET)",0 -promptUmamusume db "[E] ÑÊÀ×ÊÈ ÓÌÀÌÓÑÓÌÝ",0 -promptHellTower db "[E] ÁÀØÍß ÀÄÀ (10 ÝÒÀÆÅÉ)",0 -promptShop db "[E] ÁÓÒÈÊ È ÒÀËÈÑÌÀÍÛ",0 -promptATM db "[E] ÁÀÍÊÎÌÀÒ È ÁÀËÀÍÑ",0 -promptPlayerTerminal db "[E] ÒÅÐÌÈÍÀË: ÑÒÀÒÛ È À×ÈÂÊÈ",0 -promptObserver db "[E] ÐÅÆÈÌ ÍÀÁËÞÄÀÒÅËß (ÈÈ)",0 - -szTitleBlackjack db 202,192,199,200,202,32,51,68,32,45,32,193,203,221,202,196,198,197,202,32,40,50,49,41,0 -szTitlePoker db 202,192,199,200,202,32,51,68,32,45,32,207,206,202,197,208,32,40,210,197,213,192,209,209,202,200,201,32,213,206,203,196 - db 197,204,41,0 -szTitleDurak db 202,192,199,200,202,32,51,68,32,45,32,207,197,208,197,194,206,196,205,206,201,32,196,211,208,192,202,0 -szTitleCasinoRoulette db 202,192,199,200,202,32,51,68,32,45,32,197,194,208,206,207,197,201,209,202,192,223,32,208,211,203,197,210,202,192,0 -szTitleClassicSlot db 202,192,199,200,202,32,51,68,32,45,32,192,194,210,206,204,192,210,32,55,55,55,0 -szTitleCloverSlot db 202,192,199,200,202,32,51,68,32,45,32,202,203,197,194,197,208,205,192,223,32,223,204,192,32,40,53,120,51,41,0 -szTitleDice db 202,192,199,200,202,32,51,68,32,45,32,200,195,208,192,32,194,32,202,206,209,210,200,0 -szTitleSkulls db 202,192,199,200,202,32,51,68,32,45,32,205,192,207,168,208,209,210,202,200,0 -szTitleCoin db 202,192,199,200,202,32,51,68,32,45,32,204,206,205,197,210,202,192,32,40,206,208,168,203,47,208,197,216,202,192,41,0 -szTitleSkillCheck db 202,192,199,200,202,32,51,68,32,45,32,207,208,206,194,197,208,202,192,32,205,192,194,219,202,192,0 -szTitleBuckshot db 202,192,199,200,202,32,51,68,32,45,32,193,192,202,216,206,210,32,208,211,203,197,210,202,192,0 -szTitleRussianRoulette db 202,192,199,200,202,32,51,68,32,45,32,208,211,209,209,202,192,223,32,208,211,203,197,210,202,192,0 -szTitleOnlineRR db 202,192,199,200,202,32,51,68,32,45,32,209,197,210,197,194,192,223,32,208,211,209,209,202,192,223,32,208,211,203,197,210 - db 202,192,0 -szTitleUmamusume db 202,192,199,200,202,32,51,68,32,45,32,195,206,205,202,200,32,211,204,192,204,211,209,211,204,197,0 -szTitleHellTower db 202,192,199,200,202,32,51,68,32,45,32,192,196,209,202,192,223,32,193,192,216,205,223,0 -szTitleShop db 202,192,199,200,202,32,51,68,32,45,32,202,192,208,210,219,32,200,32,210,192,203,200,209,204,192,205,219,0 -szTitleATM db 202,192,199,200,202,32,51,68,32,45,32,193,192,205,202,206,204,192,210,0 -szTitleTerminal db 202,192,199,200,202,32,51,68,32,45,32,203,206,202,192,203,220,205,219,197,32,207,208,206,212,200,203,200,0 -szTitleObserver db 202,192,199,200,202,32,51,68,32,45,32,205,192,193,203,222,196,192,210,197,203,220,32,40,200,200,41,0 -textCabinetFooter db "[ ÂÛÕÎÄ: ÂÂÅÄÈÒÅ 0 / ÂÛÁÅÐÈÒÅ 'N' ÄËß ÂÎÇÂÐÀÒÀ  ÇÀË ]",0 - -msgDancerTipped db "Âû áðîñèëè $100 òàíöîâùèöå! ÓÄÀ×À ÀÊÒÈÂÈÐÎÂÀÍÀ!",0 -msgNeedMoney db "Íåäîñòàòî÷íî äåíåã â êîøåëüêå!",0 -statusHUDFormat db "ÁÀÍÊÐÎËË: $",0 -targetHUDFormat db " ÖÅËÜ: $",0 -luckHUDFormat db " ÓÄÀ×À: +",0 -controlsHUD db "WASD/Ñòðåëêè: Õîäüáà | E: Äåéñòâèå | ESC: Ìåíþ",0 - -NUM_SPRITES equ 22 - -INTERACT_NONE equ 0 -INTERACT_BLACKJACK equ 1 -INTERACT_POKER equ 2 -INTERACT_SLOTS_777 equ 3 -INTERACT_ROULETTE equ 4 -INTERACT_SKULLS equ 5 -INTERACT_SHOP equ 6 -INTERACT_ATM equ 7 -INTERACT_DANCER equ 8 -INTERACT_HELL_TOWER equ 9 -INTERACT_DURAK equ 10 -INTERACT_BUCKSHOT equ 11 -INTERACT_COIN equ 12 -INTERACT_DICE equ 13 -INTERACT_SLOTS_CLOVER equ 14 -INTERACT_UMAMUSUME equ 15 -INTERACT_OBSERVER equ 16 -INTERACT_TERMINAL equ 17 -INTERACT_ONLINE_RR equ 18 -INTERACT_RUSSIAN_ROULETTE equ 19 -INTERACT_SKILL_CHECK equ 20 -ALIGN 4 -casinoSprites SpriteObject NUM_SPRITES dup(<>) -sortedSprites dd NUM_SPRITES dup(0) - -rowDistTable dd 120 dup(0) -rngSeed3D dd 12345678h - -slotBet dd 50 -slotReel1 dd 0 -slotReel2 dd 1 -slotReel3 dd 2 -slotSpinState dd 0 -slotSpinTimer dd 0 -slotWinAmount dd 0 -slotWinMsg db 64 dup(0) - -bjState dd 0 -bjBet dd 100 -bjPlayerCards dd 10 dup(0) -bjPlayerCardCount dd 0 -bjPlayerScore dd 0 -bjDealerCards dd 10 dup(0) -bjDealerCardCount dd 0 -bjDealerScore dd 0 -bjDealerHideHole dd 1 -bjOutcomeMsg db 64 dup(0) - -roulState dd 0 -roulBetType dd 1 -roulBetAmount dd 100 -roulWheelAngle dd 0 -roulBallAngle dd 0 -roulSpinTimer dd 0 -roulWinningNum dd 0 -roulPayout dd 0 -roulOutcomeMsg db 64 dup(0) - -coinRxAnimTable db 26, 22, 16, 6, 16, 22, 26, 22, 16, 6 - -; --- Native 2.5D Coin Flip --- -coin3d_bet dd 50 -coin3d_choice dd 1 ; 1 = Îð¸ë, 2 = Ðåøêà -coin3d_state dd 0 ; 0 = Idle, 1 = Flipping, 2 = Result -coin3d_timer dd 0 -coin3d_result dd 1 ; 1 = Îð¸ë, 2 = Ðåøêà -coin3d_streak dd 0 -coin3d_win dd 0 - -textCoinTitle db "* * * Ç Î Ë Î Ò À ß Ì Î Í Å Ò À * * *",0 -textCoinHeads db "ÎШË",0 -textCoinTails db "ÐÅØÊÀ",0 -textCoinSide1 db "[1] ÎШË",0 -textCoinSide2 db "[2] ÐÅØÊÀ",0 -textCoinFlipping db "ÌÎÍÅÒÀ  ÏÎ˨ÒÅ...",0 -textCoinWin db "ÏÎÁÅÄÀ: +$",0 -textCoinLose db "ÍÅ ÓÃÀÄÀËÈ!",0 -textCoinStreakFmt db "ÑÅÐÈß ÏÎÁÅÄ: x",0 -textCoinSelected db "ÂÛÁÐÀÍÎ",0 -textCoinKey1 db "[1] ÎШË",0 -textCoinKey2 db "[2] ÐÅØÊÀ",0 -textCoinKeySpace db "[SPACE]",0 - -; --- Native 2.5D Dice Game --- -dice3d_bet dd 50 -dice3d_choice dd 1 ; 1 = ׸ò, 2 = Íå÷åò -dice3d_state dd 0 ; 0 = Idle, 1 = Rolling, 2 = Result -dice3d_timer dd 0 -dice3d_val1 dd 4 -dice3d_val2 dd 6 -dice3d_sum dd 10 -dice3d_win dd 0 - -textDiceTitle db 200,195,208,192,32,194,32,202,206,209,210,200,0 -textDiceEven db "[1] רÒ",0 -textDiceOdd db "[2] ÍÅ×ÅÒ",0 -textDiceEvenNums db "2 4 6 ...",0 -textDiceOddNums db "3 5 7 ...",0 -textDiceSumHdr db "ÑÓÌÌÀ: ",0 -textDicePlus db " + ",0 -textDiceEqual db " = ",0 -textDiceEvenResult db " (רÒ)",0 -textDiceOddResult db " (ÍÅ×ÅÒ)",0 -textDiceRolling db "ÊÎÑÒÈ ËÅÒßÒ ÏÎ ÑÓÊÍÓ...",0 -textDiceWin db "ÂÛÈÃÐÛØ: +$",0 -textDiceWinMult db "! (x2)",0 -textDiceLose db "ÏÐÎÈÃÐÛØ!",0 -textDiceKey1 db "[1] רÒ",0 -textDiceKey2 db "[2] ÍÅ×ÅÒ",0 -textDiceKeySpace db "[SPACE]",0 - -; --- Native 2.5D Skulls Game --- -skulls3d_bet dd 50 -skulls3d_state dd 0 ; 0 = Idle, 1 = Show ball, 2 = Shuffle, 3 = Pick, 4 = Reveal -skulls3d_timer dd 0 -skulls3d_ballPos dd 1 ; 0, 1, 2 -skulls3d_choice dd 1 ; 0, 1, 2 -skulls3d_win dd 0 -skulls3d_swapPair0 dd 0 -skulls3d_swapPair1 dd 1 -skulls3d_swapPair2 dd 2 -skulls3d_cup0 dd 0 -skulls3d_cup1 dd 1 -skulls3d_cup2 dd 2 - -textSkullsTitle db "* * * Í À Ï ¨ Ð Ñ Ò Ê È * * *",0 -textSkullsPhase0 db "ÄÅËÀÉ ÑÒÀÂÊÓ È ÆÌÈ [ÏÐÎÁÅË]",0 -textSkullsPhase1 db "ÑÌÎÒÐÈ, ÃÄÅ ÇÎËÎÒÎÉ ØÀÐ...",0 -textSkullsPhase2 db "ÊÐÓ×Ó, ÂÅÐ×Ó, ÇÀÏÓÒÀÒÜ ÕÎ×Ó...",0 -textSkullsPhase3 db "ÃÄÅ ØÀÐ? ÂÛÁÈÐÀÉ: [1], [2] ÈËÈ [3]!",0 -textSkullsWin db "ÂÛÈÃÐÛØ: +$",0 -textSkullsWinMult db "! (x3) ÂÛ ÓÃÀÄÀËÈ!",0 -textSkullsLose db "ÌÈÌÎ! ØÀÐ ÁÛË Â ÄÐÓÃÎÌ ÌÅÑÒÅ!",0 -textSkullsAgain db "[ÏÐÎÁÅË] - ÑÛÃÐÀÒÜ ÅÙ¨ ÐÀÇ",0 -textSkullsKey1 db "[1]",0 -textSkullsKey2 db "[2]",0 -textSkullsKey3 db "[3]",0 -textSkullsKeySpace db "[SPACE] ÑÒÀÐÒ",0 - -; --- Native 2.5D Skill Check (Dead by Daylight Survivor Check) --- -skill3d_bet dd 50 -skill3d_state dd 0 ; 0=Ready, 1=Active, 2=Hit Result, 3=Miss Result, 4=Escaped, 5=Defeated -skill3d_timer dd 0 -skill3d_needle dd 55 ; Needle X (52..268) -skill3d_speed dd 4 -skill3d_dir dd 1 ; 1=Right, -1=Left -skill3d_zone_start dd 140 -skill3d_zone_width dd 48 -skill3d_great_start dd 176 -skill3d_great_width dd 12 -skill3d_hits dd 0 -skill3d_misses dd 0 -skill3d_last_result dd 0 -skill3d_win_amount dd 0 - -textSkillTitle db 61,61,61,32,207,208,206,194,197,208,202,192,32,205,192,194,219,202,192,32,61,61,61,0 -textSkillHitsHdr db "ÕÈÒ: ",0 -textSkillMissHdr db "ÏÐÎÌÀÕ: ",0 -textSkillReadyMsg db "ÍÀÆÌÈÒÅ [ÏÐÎÁÅË] ÄËß ÑÒÀÐÒÀ",0 -textSkillPrompt db "ÍÀÆÌÈÒÅ [ÏÐÎÁÅË]  ÇÎÍÅ!",0 -textSkillHitMsg db "ÕÈÒ! ÒÎ×ÍÎÅ ÏÎÏÀÄÀÍÈÅ!",0 -textSkillGreatMsg db 206,210,203,200,215,205,206,33,32,43,193,206,205,211,209,33,0 -textSkillMissMsg db "ÏÐÎÌÀÕ! ÒÐÅÂÎÃÀ!",0 -textSkillEscape db "ÏÎÁÅà ÓÑÏÅØÅÍ! ÂÛÈÃÐÛØ: +$",0 -textSkillLost db "ÂÛ ÏÎÉÌÀÍÛ! ÏÐÎÈÃÐÛØ ÑÒÀÂÊÈ!",0 -textSkillKeySpace db "[SPACE] ÐÅÀÊÖÈß",0 -textSkillKeyBet db "[ÂÂÅÐÕ/ÂÍÈÇ]",0 - -; --- Shared UI Strings --- -textKeyEsc db "[ESC]",0 -textBankPrompt db "ÁÀÍÊ: $",0 -textBetPrompt db "ÑÒÀÂÊÀ: $",0 -textBetHint db " [W/S]",0 - -shopMsg db 128 dup(0) -atmMsg db 128 dup(0) - -strWin db "ÏÎÁÅÄÀ! +$",0 -strLose db "ÏÐÎÈÃÐÛØ",0 -strJackpot db "ÄÆÅÊÏÎÒ! +$",0 -strPush db 205,200,215,220,223,0 -strDealerBust db "ÄÈËÅÐ ÏÅÐÅÁÐÀË! ÏÎÁÅÄÀ! +$",0 -strPlayerBust db "ÏÅÐÅÁÎÐ (>21)! ÏÐÎÈÃÐÛØ",0 - -sym7 db " 777 ",0 -symBar db " BAR ",0 -symBell db 32,199,194,206,205,0 -symCherry db 194,200,216,205,223,0 -symClover db 202,203,197,194,197,208,0 -symGem db 192,203,204,192,199,0 -symCrown db 202,206,208,206,205,192,0 - -cardRankStr db "A ",0,"2 ",0,"3 ",0,"4 ",0,"5 ",0,"6 ",0,"7 ",0,"8 ",0,"9 ",0,"10",0,"J ",0,"Q ",0,"K ",0 - -.data? -ALIGN 4 -screenBuffer dd SCREEN_SIZE dup(?) -ALIGN 4 -zBuffer dd SCREEN_W dup(?) -ALIGN 4 -texturesBuffer dd (104 * 128 * 128) dup(?) - -hudNumBuffer db 32 dup(?) - -.code - -; --- 3D Window Procedure --- -Casino3DWndProc PROC hwnd:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD - invoke WindowEvents3D, hwnd, uMsg, wParam, lParam - ret -Casino3DWndProc ENDP - -; --- Random Generator --- -RandomRange3D PROC maxVal:DWORD - mov eax, rngSeed3D - imul eax, 1103515245 - add eax, 12345 - mov rngSeed3D, eax - shr eax, 16 - and eax, 7FFFh - xor edx, edx - div maxVal - mov eax, edx - ret -RandomRange3D ENDP - -; --- Copy String --- -CopyString3D PROC src:DWORD, dst:DWORD - push esi - push edi - mov esi, src - mov edi, dst -@@: - mov al, [esi] - mov [edi], al - test al, al - jz @F - inc esi - inc edi - jmp @B -@@: - pop edi - pop esi - ret -CopyString3D ENDP - -; --- Format Number to Decimal String --- -FormatNumber PROC num:DWORD, buf:DWORD - push ebx - push esi - push edi - mov eax, num - mov edi, buf - test eax, eax - jns fn_pos - mov BYTE PTR [edi], '-' - inc edi - neg eax -fn_pos: - mov ebx, 10 - push 0 -fn_div: - xor edx, edx - div ebx - add dl, '0' - push edx - test eax, eax - jnz fn_div -fn_pop: - pop eax - test al, al - jz fn_done - mov [edi], al - inc edi - jmp fn_pop -fn_done: - mov BYTE PTR [edi], 0 - pop edi - pop esi - pop ebx - ret -FormatNumber ENDP - -; --- Fast 2D Drawing Primitives --- -DrawBox PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD - -DrawPixel PROC x:DWORD, y:DWORD, color:DWORD - invoke DrawBox, x, y, 1, 1, color - ret -DrawPixel ENDP - -DrawBox PROC x:DWORD, y:DWORD, w:DWORD, h:DWORD, color:DWORD - shl x, 1 - shl y, 1 - shl w, 1 - shl h, 1 - push ebx - push esi - push edi - mov edi, y -box_row_loop: - mov eax, y - add eax, h - cmp edi, eax - jge box_done - cmp edi, 0 - jl next_box_row - cmp edi, SCREEN_H - jge box_done - - mov esi, x -box_col_loop: - mov eax, x - add eax, w - cmp esi, eax - jge next_box_row - cmp esi, 0 - jl next_box_col - cmp esi, SCREEN_W - jge next_box_row - - mov ecx, edi - imul ecx, SCREEN_W - add ecx, esi - mov edx, color - mov [screenBuffer + ecx*4], edx - -next_box_col: - inc esi - jmp box_col_loop - -next_box_row: - inc edi - jmp box_row_loop - -box_done: - pop edi - pop esi - pop ebx - ret -DrawBox ENDP - -DrawBoxBorder PROC uses ebx x:DWORD, y:DWORD, w:DWORD, h:DWORD, fillColor:DWORD, borderColor:DWORD, bWidth:DWORD - invoke DrawBox, x, y, w, h, borderColor - mov eax, x - add eax, bWidth - mov edx, y - add edx, bWidth - mov ecx, w - sub ecx, bWidth - sub ecx, bWidth - mov ebx, h - sub ebx, bWidth - sub ebx, bWidth - invoke DrawBox, eax, edx, ecx, ebx, fillColor - ret -DrawBoxBorder ENDP - -DrawCircle PROC cxVal:DWORD, cyVal:DWORD, radius:DWORD, color:DWORD - push ebx - push esi - push edi - mov eax, radius - neg eax - mov edi, eax -circ_y: - cmp edi, radius - jg circ_done - mov eax, radius - neg eax - mov esi, eax -circ_x: - cmp esi, radius - jg next_circ_y - - mov eax, esi - imul eax, eax - mov ebx, edi - imul ebx, ebx - add eax, ebx - mov edx, radius - imul edx, edx - cmp eax, edx - jg next_circ_x - - mov eax, cxVal - add eax, esi - mov ecx, cyVal - add ecx, edi - invoke DrawPixel, eax, ecx, color - -next_circ_x: - inc esi - jmp circ_x -next_circ_y: - inc edi - jmp circ_y -circ_done: - pop edi - pop esi - pop ebx - ret -DrawCircle ENDP - -DrawChar8x8 PROC uses ebx esi edi x:DWORD, y:DWORD, chVal:DWORD, color:DWORD - local column:DWORD - mov eax, chVal - and eax, 255 - lea esi, [font8x8 + eax*8] - xor edi, edi -glyph_row: - movzx ebx, BYTE PTR [esi+edi] - mov column, 0 -glyph_col: - test ebx, 80h - jz glyph_next - mov eax, x - add eax, column - mov edx, y - add edx, edi - invoke DrawPixel, eax, edx, color -glyph_next: - shl ebx, 1 - inc column - cmp column, 8 - jl glyph_col - inc edi - cmp edi, 8 - jl glyph_row - ret -DrawChar8x8 ENDP - -DrawString8x8 PROC x:DWORD, y:DWORD, strPtr:DWORD, color:DWORD - push ebx - push esi - mov esi, strPtr - mov ebx, x -str_loop: - movzx eax, BYTE PTR [esi] - test al, al - jz str_done - invoke DrawChar8x8, ebx, y, eax, color - add ebx, 8 - inc esi - jmp str_loop -str_done: - pop esi - pop ebx - ret -DrawString8x8 ENDP - -; --- True 3D Perspective Floor & Ceiling Rendering --- - -; --- DDA Raycasting Walls --- -RenderWalls PROC - local col:DWORD - local originalStart:DWORD - local camX:DWORD - local rayDirX:DWORD - local rayDirY:DWORD - local mapX:DWORD - local mapY:DWORD - local deltaDistX:DWORD - local deltaDistY:DWORD - local stepX:DWORD - local stepY:DWORD - local sideDistX:DWORD - local sideDistY:DWORD - local side:DWORD - local perpWallDist:DWORD - local lineH:DWORD - local drawStart:DWORD - local drawEnd:DWORD - local wallHit:DWORD - local texX:DWORD - local texXHD:DWORD - local pixelMaterial:DWORD - local texId:DWORD - local shade:DWORD - - push ebx - push esi - push edi - - mov eax, playerAngle - and eax, 511 - mov ebx, [tableCos + eax*4] - mov playerDirX, ebx - mov ebx, [tableSin + eax*4] - mov playerDirY, ebx - - mov eax, ebx - imul eax, -66 - cdq - mov ecx, 100 - idiv ecx - mov playerPlaneX, eax - - mov eax, playerDirX - imul eax, 66 - cdq - idiv ecx - mov playerPlaneY, eax - - mov col, 0 -col_loop: - cmp col, SCREEN_W - jge walls_done - - mov eax, col - shl eax, 1 - sub eax, SCREEN_W - imul eax, FP_1 - cdq - mov ecx, SCREEN_W - idiv ecx - mov camX, eax - - mov eax, playerPlaneX - imul camX - shrd eax, edx, 16 - add eax, playerDirX - mov rayDirX, eax - - mov eax, playerPlaneY - imul camX - shrd eax, edx, 16 - add eax, playerDirY - mov rayDirY, eax - - mov eax, playerX - sar eax, 16 - mov mapX, eax - mov eax, playerY - sar eax, 16 - mov mapY, eax - - mov eax, rayDirX - test eax, eax - jnz calc_delta_x - mov deltaDistX, 7FFFFFFFh - jmp calc_delta_y -calc_delta_x: - test eax, eax - jns @F - neg eax -@@: - mov ebx, eax - cmp ebx, 4 - jbe delta_x_clamp - xor eax, eax - mov edx, 1 - div ebx - mov deltaDistX, eax - jmp calc_delta_y -delta_x_clamp: - mov deltaDistX, 7FFFFFFFh - -calc_delta_y: - mov eax, rayDirY - test eax, eax - jnz calc_delta_y_ok - mov deltaDistY, 7FFFFFFFh - jmp check_step -calc_delta_y_ok: - test eax, eax - jns @F - neg eax -@@: - mov ebx, eax - cmp ebx, 4 - jbe delta_y_clamp - xor eax, eax - mov edx, 1 - div ebx - mov deltaDistY, eax - jmp check_step -delta_y_clamp: - mov deltaDistY, 7FFFFFFFh - -check_step: - cmp rayDirX, 0 - jge step_x_pos - mov stepX, -1 - mov eax, playerX - mov edx, mapX - shl edx, 16 - sub eax, edx - imul deltaDistX - shrd eax, edx, 16 - mov sideDistX, eax - jmp check_step_y -step_x_pos: - mov stepX, 1 - mov eax, mapX - inc eax - shl eax, 16 - sub eax, playerX - imul deltaDistX - shrd eax, edx, 16 - mov sideDistX, eax - -check_step_y: - cmp rayDirY, 0 - jge step_y_pos - mov stepY, -1 - mov eax, playerY - mov edx, mapY - shl edx, 16 - sub eax, edx - imul deltaDistY - shrd eax, edx, 16 - mov sideDistY, eax - jmp dda_start -step_y_pos: - mov stepY, 1 - mov eax, mapY - inc eax - shl eax, 16 - sub eax, playerY - imul deltaDistY - shrd eax, edx, 16 - mov sideDistY, eax - -dda_start: - xor ecx, ecx -dda_step_loop: - inc ecx - cmp ecx, 64 - jge wall_map_boundary - - mov eax, sideDistX - cmp eax, sideDistY - jge step_in_y - - mov eax, deltaDistX - add sideDistX, eax - mov eax, stepX - add mapX, eax - mov side, 0 - jmp check_tile - -step_in_y: - mov eax, deltaDistY - add sideDistY, eax - mov eax, stepY - add mapY, eax - mov side, 1 - -check_tile: - cmp mapX, 0 - jl wall_map_boundary - cmp mapX, MAP_WIDTH - jge wall_map_boundary - cmp mapY, 0 - jl wall_map_boundary - cmp mapY, MAP_HEIGHT - jge wall_map_boundary - - mov eax, mapY - shl eax, 5 - add eax, mapX - mov edx, worldMap3D - movzx eax, BYTE PTR [edx + eax] - test eax, eax - jnz hit_wall - jmp dda_step_loop - -wall_map_boundary: - cmp outdoorRender3D, 0 - je hit_wall - mov eax, col - mov zBuffer[eax*4], 7FFFFFFFh - jmp next_col - -hit_wall: - cmp side, 0 - jne perp_y - mov eax, sideDistX - sub eax, deltaDistX - mov perpWallDist, eax - jmp perp_done -perp_y: - mov eax, sideDistY - sub eax, deltaDistY - mov perpWallDist, eax - -perp_done: - cmp perpWallDist, 2048 - jge @F - mov perpWallDist, 2048 -@@: - mov eax, col - mov edx, perpWallDist - mov [zBuffer + eax*4], edx - - ; Unit projection is shared by indoor room height and outdoor storeys. - mov eax, SCREEN_H - imul eax, FP_1 - cdq - idiv perpWallDist - mov lineH, eax - - mov eax, lineH - imul viewEye3D - shrd eax, edx, 16 - add eax, viewHorizon3D - mov drawEnd, eax - mov ebx, lineH - mov eax, viewCeiling3D - cmp outdoorRender3D, 0 - je @F - mov eax, CITY_STOREY_HEIGHT -@@: - imul ebx - shrd eax, edx, 16 - mov ebx, eax - mov lineH, ebx - mov eax, drawEnd - sub eax, ebx - mov drawStart, eax - cmp outdoorRender3D, 0 - je wall_store_original_start - ; Floor height is independent of storey height. - mov eax, drawEnd - sub eax, lineH - mov drawStart, eax - mov eax, mapY - shl eax, 5 - add eax, mapX - mov edx, worldMap3D - movzx eax, BYTE PTR [edx+eax] -wall_exterior_tall: - ; Roof projection and texture sampling use the same storey count. - mov eax, lineH - imul eax, CITY_BUILDING_STOREYS-1 - sub drawStart, eax - mov eax, lineH - imul eax, CITY_BUILDING_STOREYS - mov lineH, eax -wall_store_original_start: - mov eax, drawStart - mov originalStart, eax - - cmp side, 0 - jne hit_side_y - mov eax, perpWallDist - imul rayDirY - shrd eax, edx, 16 - add eax, playerY - mov wallHit, eax - jmp calc_tex_x -hit_side_y: - mov eax, perpWallDist - imul rayDirX - shrd eax, edx, 16 - add eax, playerX - mov wallHit, eax - -calc_tex_x: - ; MASK WITH 0FFFFh to prevent texture scrambling! - mov eax, wallHit - and eax, 0FFFFh - mov texXHD, eax - shr eax, 9 - and eax, 127 - mov texX, eax - - cmp side, 0 - jne @F - cmp rayDirX, 0 - jle @F - mov eax, 127 - sub eax, texX - mov texX, eax - xor texXHD, 0FFFFh -@@: - cmp side, 1 - jne select_tex - cmp rayDirY, 0 - jge select_tex - mov eax, 127 - sub eax, texX - mov texX, eax - xor texXHD, 0FFFFh - -select_tex: - mov eax, mapY - shl eax, 5 - add eax, mapX - mov edx, worldMap3D - movzx eax, BYTE PTR [edx + eax] - mov texId, eax - cmp texId, 0 - jne @F - mov texId, 1 -@@: - - mov eax, perpWallDist - shr eax, 13 - mov edx, 256 - sub edx, eax - cmp edx, 75 - jge @F - mov edx, 75 -@@: - cmp side, 1 - jne @F - imul edx, 3 - shr edx, 2 -@@: - mov shade, edx - - cmp drawStart, 0 - jge @F - mov drawStart, 0 -@@: - cmp drawEnd, SCREEN_H - jl @F - mov drawEnd, SCREEN_H - 1 -@@: - - mov eax, lineH - cmp eax, 1 - jge @F - mov eax, 1 - mov lineH, eax -@@: - - mov eax, 128 * FP_1 - cdq - idiv lineH - mov esi, eax ; stepY - - mov eax, drawStart - sub eax, originalStart - imul eax, esi - mov edi, eax ; texPos - - mov ecx, drawStart -draw_stripe_loop: - cmp ecx, drawEnd - jg next_col - - mov eax, edi - shr eax, 16 - and eax, 127 - mov edx, texId - cmp outdoorRender3D, 0 - je wall_sample_material - imul eax, CITY_BUILDING_STOREYS - cmp eax, 128*(CITY_BUILDING_STOREYS-1) - jae wall_lower_storey - push eax - shr eax, 7 - add eax, mapX - add eax, mapY - xor edx, edx - mov ebx, 3 - div ebx - add edx, 65 - pop eax - and eax, 127 - jmp wall_sample_material -wall_lower_storey: - sub eax, 128*(CITY_BUILDING_STOREYS-1) -wall_sample_material: - mov pixelMaterial, edx - cmp outdoorRender3D, 0 - je wall_sample_indoor_hd - cmp hallCityDetail3D.pixels, 0 - je wall_sample_standard - cmp edx, 57 - jb wall_sample_standard - cmp edx, 72 - ja wall_sample_standard - cmp perpWallDist, 6*FP_1 - ja wall_sample_standard - ; Preserve subtexel detail near facades; retain the 128px mip at distance. - push edx - mov eax, edi - shr eax, 15 - imul eax, CITY_BUILDING_STOREYS - and eax, 255 - shl eax, 8 - mov ebx, texXHD - shr ebx, 8 - add eax, ebx - pop edx - sub edx, 57 - shl edx, 16 - add eax, edx - mov ebx, hallCityDetail3D.pixels - mov eax, [ebx+eax*4] - jmp wall_shade_pixel -wall_sample_indoor_hd: - cmp edx, 80 - jb wall_sample_standard - cmp edx, 103 - ja wall_sample_standard - mov ebx, hallRoomHD3D.pixels - cmp edx, 92 - jb wall_sample_room_hd - mov ebx, hallArchitectureHD3D.pixels - sub edx, 12 -wall_sample_room_hd: - test ebx, ebx - jz wall_sample_standard_restore - sub edx, 80 - shl edx, 18 - add ebx, edx - mov eax, edi - shr eax, 15 - and eax, 255 - shl eax, 8 - mov edx, texXHD - shr edx, 8 - add eax, edx - mov eax, [ebx+eax*4] - jmp wall_shade_pixel -wall_sample_standard_restore: - mov edx, texId - mov eax, edi - shr eax, 16 - and eax, 127 -wall_sample_standard: - shl eax, 7 - add eax, texX - - shl edx, 14 - add eax, edx - mov eax, [texturesBuffer + eax*4] - - ; Shade wall pixel -wall_shade_pixel: - mov ebx, shade - cmp outdoorRender3D, 0 - je wall_ambient_shade - push eax - push ecx - invoke IsCityEmissive3D, eax, pixelMaterial - pop ecx - test eax, eax - pop eax - jz wall_ambient_shade - mov ebx, 256 -wall_ambient_shade: - cmp hallLevel3D, 0 - je @F - imul ebx, 7 - shr ebx, 3 -@@: - movzx edx, al - imul edx, ebx - shr edx, 8 - push edx - - movzx edx, ah - imul edx, ebx - shr edx, 8 - shl edx, 8 - - shr eax, 16 - movzx eax, al - imul eax, ebx - shr eax, 8 - shl eax, 16 - or eax, edx - pop edx - or eax, edx - - mov edx, ecx - imul edx, SCREEN_W - add edx, col - mov [screenBuffer + edx*4], eax - - add edi, esi - inc ecx - jmp draw_stripe_loop - -next_col: - inc col - jmp col_loop - -walls_done: - pop edi - pop esi - pop ebx - ret -RenderWalls ENDP - -; --- Render 3D Billboard Sprites --- - -; --- HUD & Minimap Radar --- -RenderHUD PROC uses ebx esi edi - invoke DrawBox, 0, 0, 320, 16, 0014191Dh - invoke DrawString8x8, 8, 4, OFFSET textBank3D, 00D8BC6Ah - invoke FormatNumber, bankroll, OFFSET hudNumBuffer - invoke DrawString8x8, 64, 4, OFFSET hudNumBuffer, 00FFFFFFh - invoke DrawString8x8, 176, 4, OFFSET textWindowKeys3D, 00A8B6BBh - invoke DrawBox, 0, 226, 320, 14, 0014191Dh - invoke DrawString8x8, 12, 230, OFFSET textWalkKeys3D, 00A8B6BBh - invoke DrawBox, 159, 118, 2, 5, 00E7DFC8h - invoke DrawBox, 157, 120, 6, 1, 00E7DFC8h - cmp interactPromptPtr, 0 - je @F - invoke DrawBoxBorder, 4, 199, 312, 18, 0014191Dh, 00D8BC6Ah, 1 - invoke DrawString8x8, 10, 204, interactPromptPtr, 00F5E2B0h -@@: - cmp flashTimer, 0 - je hud_finished - dec flashTimer - invoke DrawBox, 4, 22, 312, 16, 0014191Dh - invoke DrawString8x8, 10, 26, OFFSET flashMessage, 00FFFFFFh -hud_finished: - ret -RenderHUD ENDP - -RenderMinimap PROC uses ebx esi edi - local radarX:DWORD - local radarY:DWORD - local radarSize:DWORD - - mov radarX, 320 - 48 - mov radarY, 20 - mov radarSize, 44 - - invoke DrawBoxBorder, radarX, radarY, radarSize, radarSize, 00101510h, 00FFD700h, 1 - - ; Draw Sprites on radar - cmp hallLevel3D, 0 - jne draw_player_radar - xor esi, esi -radar_spr_loop: - cmp esi, NUM_SPRITES - jge draw_player_radar - mov eax, esi - imul eax, SIZEOF SpriteObject - mov eax, [casinoSprites + eax].posX - sar eax, 16 - imul eax, radarSize - shr eax, 5 - add eax, radarX - mov ebx, eax - - mov eax, esi - imul eax, SIZEOF SpriteObject - mov eax, [casinoSprites + eax].posY - sar eax, 16 - imul eax, radarSize - shr eax, 5 - add eax, radarY - - invoke DrawPixel, ebx, eax, 00FFAA00h - inc esi - jmp radar_spr_loop - -draw_player_radar: - mov eax, playerX - sar eax, 16 - imul eax, radarSize - shr eax, 5 - add eax, radarX - mov ebx, eax - - mov eax, playerY - sar eax, 16 - imul eax, radarSize - shr eax, 5 - add eax, radarY - - invoke DrawCircle, ebx, eax, 2, 00FF2020h - ret -RenderMinimap ENDP - -; ============================================================================== -; IN-ENGINE 2.5D MINI-GAME: SLOTS 777 -; ============================================================================== -HandleSlotsInput PROC - cmp slotSpinState, 1 - je slots_input_done - - invoke Pressed3D, 20h ; SPACE -> Spin - test ah, 80h - jz check_bet_adjust - mov eax, bankroll - cmp eax, slotBet - jl @F - sub eax, slotBet - mov bankroll, eax - mov slotSpinState, 1 - mov slotSpinTimer, 0 - mov slotWinAmount, 0 - invoke PlayCasinoSound3D, OFFSET soundSlotSpin, 0, 1 - jmp slots_input_done -@@: - invoke CopyString3D, OFFSET msgNeedMoney, OFFSET flashMessage - mov flashTimer, 60 - -check_bet_adjust: - invoke Pressed3D, 26h ; UP / W - test ah, 80h - jnz inc_bet - invoke Pressed3D, 57h - test ah, 80h - jz check_bet_down -inc_bet: - cmp slotBet, 500 - jge slots_input_done - cmp slotBet, 100 - jge @F - cmp slotBet, 50 - jge set_100 - mov slotBet, 50 - jmp slots_input_done -set_100: - mov slotBet, 100 - jmp slots_input_done -@@: - mov slotBet, 500 - jmp slots_input_done - -check_bet_down: - invoke Pressed3D, 28h ; DOWN / S - test ah, 80h - jnz dec_bet - invoke Pressed3D, 53h - test ah, 80h - jz slots_input_done -dec_bet: - cmp slotBet, 50 - jle set_10 - cmp slotBet, 100 - jle set_50 - mov slotBet, 100 - jmp slots_input_done -set_50: - mov slotBet, 50 - jmp slots_input_done -set_10: - mov slotBet, 10 - -slots_input_done: - ret -HandleSlotsInput ENDP - -RenderSlotsGame PROC uses ebx esi edi - ; Cabinet Background (Dark Cherry Wood & Gold) - invoke DrawBox, 0, 0, SCREEN_W, SCREEN_H, 00150A10h - invoke DrawBoxBorder, 10, 10, 300, 220, 00251015h, 00FFD700h, 3 - - ; Illuminated Top Marquee - invoke DrawBoxBorder, 25, 20, 270, 32, 000A0505h, 00FFFF00h, 2 - invoke DrawString8x8, 55, 32, OFFSET textSlots3D, 00FFD700h - - ; Spinning Animation Logic - cmp slotSpinState, 1 - jne draw_reels - inc slotSpinTimer - - cmp slotSpinTimer, 22 - jge @F - invoke RandomRange3D, 7 - mov slotReel1, eax -@@: - cmp slotSpinTimer, 36 - jge @F - invoke RandomRange3D, 7 - mov slotReel2, eax -@@: - cmp slotSpinTimer, 50 - jge @F - invoke RandomRange3D, 7 - mov slotReel3, eax -@@: - cmp slotSpinTimer, 50 - jl draw_reels - - ; Spin finished! Check outcome! - mov slotSpinState, 0 - mov eax, slotReel1 - cmp eax, slotReel2 - jne check_pairs - cmp eax, slotReel3 - jne check_pairs - - ; 3 Matching! - cmp eax, 0 ; 777! - jne @F - mov eax, slotBet - imul eax, 25 - mov slotWinAmount, eax - add bankroll, eax - invoke PlayCasinoSound3D, OFFSET soundJackpot, 0, 1 - jmp draw_reels -@@: - cmp eax, 6 ; CROWN! - jne @F - mov eax, slotBet - imul eax, 50 - mov slotWinAmount, eax - add bankroll, eax - invoke PlayCasinoSound3D, OFFSET soundJackpot, 0, 1 - jmp draw_reels -@@: - mov eax, slotBet - imul eax, 10 - mov slotWinAmount, eax - add bankroll, eax - invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 - jmp draw_reels - -check_pairs: - mov eax, slotReel1 - cmp eax, slotReel2 - je pair_win - mov eax, slotReel2 - cmp eax, slotReel3 - je pair_win - mov eax, slotReel1 - cmp eax, slotReel3 - je pair_win - jmp draw_reels -pair_win: - mov eax, slotBet - imul eax, 2 - mov slotWinAmount, eax - add bankroll, eax - invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 - -draw_reels: - ; Reels Window - invoke DrawBoxBorder, 30, 62, 260, 95, 000F0F12h, 0000A5FFh, 2 - - ; Reel 1 (45..105) - invoke DrawBoxBorder, 45, 68, 65, 82, 00F0F0F5h, 00505050h, 2 - mov eax, slotReel1 - call DrawReelSymbolAt1 - - ; Reel 2 (128..188) - invoke DrawBoxBorder, 128, 68, 65, 82, 00F0F0F5h, 00505050h, 2 - mov eax, slotReel2 - call DrawReelSymbolAt2 - - ; Reel 3 (210..270) - invoke DrawBoxBorder, 210, 68, 65, 82, 00F0F0F5h, 00505050h, 2 - mov eax, slotReel3 - call DrawReelSymbolAt3 - - ; Bottom Control Panel - invoke DrawBoxBorder, 20, 165, 280, 58, 00151515h, 00FFD700h, 1 - - invoke DrawString8x8, 28, 172, OFFSET textBank3D, 00FFD700h - invoke FormatNumber, bankroll, OFFSET hudNumBuffer - invoke DrawString8x8, 110, 172, OFFSET hudNumBuffer, 00FFFF00h - - invoke DrawString8x8, 175, 172, OFFSET textBet3D, 00FFD700h - invoke FormatNumber, slotBet, OFFSET hudNumBuffer - invoke DrawString8x8, 240, 172, OFFSET hudNumBuffer, 0050FF50h - - cmp slotWinAmount, 0 - jle draw_slot_ctrls - invoke DrawString8x8, 28, 187, OFFSET strWin, 00FFFF00h - invoke FormatNumber, slotWinAmount, OFFSET hudNumBuffer - invoke DrawString8x8, 110, 187, OFFSET hudNumBuffer, 00FFFF00h - -draw_slot_ctrls: - invoke DrawString8x8, 28, 204, OFFSET textSlotsKeys3D, 00A0A0A0h - ret -RenderSlotsGame ENDP - -DrawReelSymbolAt1 PROC - cmp eax, 0 - jne @F - invoke DrawString8x8, 52, 105, OFFSET sym7, 00FF2020h - ret -@@: - cmp eax, 1 - jne @F - invoke DrawString8x8, 52, 105, OFFSET symBar, 00FFAA00h - ret -@@: - cmp eax, 2 - jne @F - invoke DrawString8x8, 52, 105, OFFSET symBell, 00FFD700h - ret -@@: - cmp eax, 3 - jne @F - invoke DrawString8x8, 48, 105, OFFSET symCherry, 000000D0h - ret -@@: - cmp eax, 4 - jne @F - invoke DrawString8x8, 48, 105, OFFSET symClover, 0000A000h - ret -@@: - cmp eax, 5 - jne @F - invoke DrawString8x8, 52, 105, OFFSET symGem, 00FFFF00h - ret -@@: - invoke DrawString8x8, 52, 105, OFFSET symCrown, 00FFD700h - ret -DrawReelSymbolAt1 ENDP - -DrawReelSymbolAt2 PROC - cmp eax, 0 - jne @F - invoke DrawString8x8, 135, 105, OFFSET sym7, 00FF2020h - ret -@@: - cmp eax, 1 - jne @F - invoke DrawString8x8, 135, 105, OFFSET symBar, 00FFAA00h - ret -@@: - cmp eax, 2 - jne @F - invoke DrawString8x8, 135, 105, OFFSET symBell, 00FFD700h - ret -@@: - cmp eax, 3 - jne @F - invoke DrawString8x8, 131, 105, OFFSET symCherry, 000000D0h - ret -@@: - cmp eax, 4 - jne @F - invoke DrawString8x8, 131, 105, OFFSET symClover, 0000A000h - ret -@@: - cmp eax, 5 - jne @F - invoke DrawString8x8, 135, 105, OFFSET symGem, 00FFFF00h - ret -@@: - invoke DrawString8x8, 135, 105, OFFSET symCrown, 00FFD700h - ret -DrawReelSymbolAt2 ENDP - -DrawReelSymbolAt3 PROC - cmp eax, 0 - jne @F - invoke DrawString8x8, 218, 105, OFFSET sym7, 00FF2020h - ret -@@: - cmp eax, 1 - jne @F - invoke DrawString8x8, 218, 105, OFFSET symBar, 00FFAA00h - ret -@@: - cmp eax, 2 - jne @F - invoke DrawString8x8, 218, 105, OFFSET symBell, 00FFD700h - ret -@@: - cmp eax, 3 - jne @F - invoke DrawString8x8, 214, 105, OFFSET symCherry, 000000D0h - ret -@@: - cmp eax, 4 - jne @F - invoke DrawString8x8, 214, 105, OFFSET symClover, 0000A000h - ret -@@: - cmp eax, 5 - jne @F - invoke DrawString8x8, 218, 105, OFFSET symGem, 00FFFF00h - ret -@@: - invoke DrawString8x8, 218, 105, OFFSET symCrown, 00FFD700h - ret -DrawReelSymbolAt3 ENDP - -; ============================================================================== -; IN-ENGINE 2.5D MINI-GAME: BLACKJACK (21) -; ============================================================================== -HandleBlackjackInput PROC uses ebx - cmp bjState, 0 ; Need Deal - jne check_bj_player_turn - invoke Pressed3D, 20h ; SPACE -> Deal - test ah, 80h - jz check_bj_bet_change - mov eax, bankroll - cmp eax, bjBet - jl bj_need_cash - sub eax, bjBet - mov bankroll, eax - - ; Deal 2 cards to player, 2 cards to dealer - mov bjPlayerCardCount, 0 - mov bjDealerCardCount, 0 - mov bjDealerHideHole, 1 - - ; Player Card 1 - invoke RandomRange3D, 13 - inc eax - mov ebx, bjPlayerCardCount - mov [bjPlayerCards + ebx*4], eax - inc bjPlayerCardCount - - ; Dealer Card 1 - invoke RandomRange3D, 13 - inc eax - mov ebx, bjDealerCardCount - mov [bjDealerCards + ebx*4], eax - inc bjDealerCardCount - - ; Player Card 2 - invoke RandomRange3D, 13 - inc eax - mov ebx, bjPlayerCardCount - mov [bjPlayerCards + ebx*4], eax - inc bjPlayerCardCount - - ; Dealer Card 2 (Hole card) - invoke RandomRange3D, 13 - inc eax - mov ebx, bjDealerCardCount - mov [bjDealerCards + ebx*4], eax - inc bjDealerCardCount - - invoke PlayCasinoSound3D, OFFSET soundCards, 0, 1 - - ; Calc Player Score - call CalcPlayerBJScore - cmp bjPlayerScore, 21 - jne set_bj_turn - ; Instant Blackjack! - mov bjDealerHideHole, 0 - mov eax, bjBet - imul eax, 5 - shr eax, 1 - add bankroll, eax - invoke CopyString3D, OFFSET strWin, OFFSET bjOutcomeMsg - invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 - mov bjState, 2 - ret -set_bj_turn: - mov bjState, 1 - mov BYTE PTR [bjOutcomeMsg], 0 - ret - -bj_need_cash: - invoke CopyString3D, OFFSET msgNeedMoney, OFFSET flashMessage - mov flashTimer, 60 - ret - -check_bj_player_turn: - cmp bjState, 1 - jne check_bj_round_over - - invoke Pressed3D, 48h ; 'H' -> Hit - test ah, 80h - jz check_bj_stand - invoke RandomRange3D, 13 - inc eax - mov ebx, bjPlayerCardCount - cmp ebx, 8 - jge @F - mov [bjPlayerCards + ebx*4], eax - inc bjPlayerCardCount -@@: - invoke PlayCasinoSound3D, OFFSET soundCards, 0, 1 - call CalcPlayerBJScore - cmp bjPlayerScore, 21 - jle bj_input_done - ; Bust! - invoke CopyString3D, OFFSET strPlayerBust, OFFSET bjOutcomeMsg - mov bjDealerHideHole, 0 - mov bjState, 2 - ret - -check_bj_stand: - invoke Pressed3D, 53h ; 'S' -> Stand - test ah, 80h - jz bj_input_done - - ; Dealer Turn - mov bjDealerHideHole, 0 -dealer_loop: - call CalcDealerBJScore - cmp bjDealerScore, 17 - jge dealer_finished - invoke RandomRange3D, 13 - inc eax - mov ebx, bjDealerCardCount - cmp ebx, 8 - jge dealer_finished - mov [bjDealerCards + ebx*4], eax - inc bjDealerCardCount - jmp dealer_loop - -dealer_finished: - cmp bjDealerScore, 21 - jle compare_scores - ; Dealer Bust! - mov eax, bjBet - shl eax, 1 - add bankroll, eax - invoke CopyString3D, OFFSET strDealerBust, OFFSET bjOutcomeMsg - invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 - mov bjState, 2 - ret - -compare_scores: - mov eax, bjPlayerScore - cmp eax, bjDealerScore - jle check_dealer_won - ; Player Won! - mov eax, bjBet - shl eax, 1 - add bankroll, eax - invoke CopyString3D, OFFSET strWin, OFFSET bjOutcomeMsg - invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 - mov bjState, 2 - ret -check_dealer_won: - cmp eax, bjDealerScore - jl dealer_wins - ; Push (Tie) - mov eax, bjBet - add bankroll, eax - invoke CopyString3D, OFFSET strPush, OFFSET bjOutcomeMsg - mov bjState, 2 - ret -dealer_wins: - invoke CopyString3D, OFFSET strLose, OFFSET bjOutcomeMsg - mov bjState, 2 - ret - -check_bj_round_over: - invoke Pressed3D, 20h ; SPACE -> Next Hand - test ah, 80h - jz bj_input_done - mov bjState, 0 - ret - -check_bj_bet_change: - invoke Pressed3D, 26h ; UP - test ah, 80h - jz @F - cmp bjBet, 500 - jge bj_input_done - add bjBet, 50 - ret -@@: - invoke Pressed3D, 28h ; DOWN - test ah, 80h - jz bj_input_done - cmp bjBet, 50 - jle bj_input_done - sub bjBet, 50 - -bj_input_done: - ret -HandleBlackjackInput ENDP - -CalcPlayerBJScore PROC uses ebx esi - xor eax, eax - xor ebx, ebx - xor esi, esi -calc_p_loop: - cmp esi, bjPlayerCardCount - jge calc_p_done - mov edx, [bjPlayerCards + esi*4] - cmp edx, 10 - jle @F - mov edx, 10 -@@: - cmp edx, 1 - jne add_p_val - inc ebx ; count Aces - add eax, 11 - jmp next_p_card -add_p_val: - add eax, edx -next_p_card: - inc esi - jmp calc_p_loop -calc_p_done: - ; Soft Ace reduction -reduce_p_ace: - cmp eax, 21 - jle store_p_score - test ebx, ebx - jz store_p_score - sub eax, 10 - dec ebx - jmp reduce_p_ace -store_p_score: - mov bjPlayerScore, eax - ret -CalcPlayerBJScore ENDP - -CalcDealerBJScore PROC uses ebx esi - xor eax, eax - xor ebx, ebx - xor esi, esi -calc_d_loop: - cmp esi, bjDealerCardCount - jge calc_d_done - mov edx, [bjDealerCards + esi*4] - cmp edx, 10 - jle @F - mov edx, 10 -@@: - cmp edx, 1 - jne add_d_val - inc ebx - add eax, 11 - jmp next_d_card -add_d_val: - add eax, edx -next_d_card: - inc esi - jmp calc_d_loop -calc_d_done: -reduce_d_ace: - cmp eax, 21 - jle store_d_score - test ebx, ebx - jz store_d_score - sub eax, 10 - dec ebx - jmp reduce_d_ace -store_d_score: - mov bjDealerScore, eax - ret -CalcDealerBJScore ENDP - -RenderBlackjackGame PROC uses ebx esi edi - ; Emerald Felt Table Background - invoke DrawBox, 0, 0, SCREEN_W, SCREEN_H, 000A3015h - invoke DrawBoxBorder, 10, 10, 300, 220, 000D4018h, 00FFD700h, 3 - - ; Dealer Area Top - invoke DrawString8x8, 25, 20, OFFSET textBJ3D, 00FFD700h - invoke DrawString8x8, 25, 35, OFFSET textDealer3D, 00FFFFFFh - invoke FormatNumber, bjDealerScore, OFFSET hudNumBuffer - invoke DrawString8x8, 120, 35, OFFSET hudNumBuffer, 00FFFF00h - - ; Dealer Cards - xor esi, esi -draw_dealer_cards: - cmp esi, bjDealerCardCount - jge draw_player_bj_area - mov eax, esi - imul eax, 45 - add eax, 25 - mov ebx, eax - - cmp esi, 1 - jne draw_dealer_face - cmp bjDealerHideHole, 1 - jne draw_dealer_face - ; Face Down Card - mov eax, selectedBack3D - mov eax, cardBackColors3D[eax*4] - invoke DrawBoxBorder, ebx, 48, 38, 52, eax, 00FFFFFFh, 2 - jmp next_dealer_card_draw - -draw_dealer_face: - invoke DrawBoxBorder, ebx, 48, 38, 52, 00F0F0F5h, 00000000h, 2 - mov eax, [bjDealerCards + esi*4] - dec eax - imul eax, 3 - lea edx, [cardRankStr + eax] - mov eax, ebx - add eax, 8 - invoke DrawString8x8, eax, 68, edx, 00000000h - -next_dealer_card_draw: - inc esi - jmp draw_dealer_cards - -draw_player_bj_area: - ; Player Area Bottom - invoke DrawString8x8, 25, 110, OFFSET textPlayer3D, 00FFFFFFh - invoke FormatNumber, bjPlayerScore, OFFSET hudNumBuffer - invoke DrawString8x8, 120, 110, OFFSET hudNumBuffer, 0050FF50h - - ; Player Cards - xor esi, esi -draw_player_cards: - cmp esi, bjPlayerCardCount - jge draw_bj_footer - mov eax, esi - imul eax, 45 - add eax, 25 - mov ebx, eax - - invoke DrawBoxBorder, ebx, 124, 38, 52, 00F0F0F5h, 00000000h, 2 - mov eax, [bjPlayerCards + esi*4] - dec eax - imul eax, 3 - lea edx, [cardRankStr + eax] - mov eax, ebx - add eax, 8 - invoke DrawString8x8, eax, 144, edx, 00000000h - - inc esi - jmp draw_player_cards - -draw_bj_footer: - ; Footer Status & Controls - invoke DrawBoxBorder, 20, 182, 280, 42, 00102010h, 00FFD700h, 1 - cmp BYTE PTR [bjOutcomeMsg], 0 - je draw_bj_controls - invoke DrawString8x8, 28, 188, OFFSET bjOutcomeMsg, 00FFFF00h - invoke DrawString8x8, 28, 204, OFFSET textNext3D, 00A0A0A0h - ret - -draw_bj_controls: - invoke DrawString8x8, 28, 188, OFFSET textBJKeys3D, 00FFFFFFh - invoke DrawString8x8, 28, 204, OFFSET textDeal3D, 00A0A0A0h - ret -RenderBlackjackGame ENDP - -; ============================================================================== -; IN-ENGINE 2.5D MINI-GAME: ROULETTE -; ============================================================================== -HandleRouletteInput PROC uses ebx - cmp roulState, 1 - je roul_input_done - - invoke Pressed3D, 31h ; '1' -> RED - test ah, 80h - jz @F - mov roulBetType, 1 -@@: - invoke Pressed3D, 32h ; '2' -> BLACK - test ah, 80h - jz @F - mov roulBetType, 2 -@@: - invoke Pressed3D, 33h ; '3' -> ZERO (0) - test ah, 80h - jz @F - mov roulBetType, 3 -@@: - invoke Pressed3D, 34h ; '4' -> EVEN - test ah, 80h - jz @F - mov roulBetType, 4 -@@: - invoke Pressed3D, 35h ; '5' -> ODD - test ah, 80h - jz check_roul_spin - mov roulBetType, 5 - -check_roul_spin: - invoke Pressed3D, 20h ; SPACE -> Spin - test ah, 80h - jz roul_input_done - mov eax, bankroll - cmp eax, roulBetAmount - jl roul_no_cash - sub eax, roulBetAmount - mov bankroll, eax - mov roulState, 1 - mov roulSpinTimer, 50 - mov roulPayout, 0 - invoke PlayCasinoSound3D, OFFSET soundRoulette, 0, 1 - ret - -roul_no_cash: - invoke CopyString3D, OFFSET msgNeedMoney, OFFSET flashMessage - mov flashTimer, 60 - -roul_input_done: - ret -HandleRouletteInput ENDP - -RenderRouletteGame PROC uses ebx esi edi - ; Table felt background - invoke DrawBox, 0, 0, SCREEN_W, SCREEN_H, 00151525h - invoke DrawBoxBorder, 10, 10, 300, 220, 00201525h, 00FFD700h, 3 - - ; 2.5D Rotating Wheel on Left - invoke DrawCircle, 85, 110, 65, 00102550h - invoke DrawCircle, 85, 110, 60, 00FFD700h - invoke DrawCircle, 85, 110, 52, 00101010h - invoke DrawCircle, 85, 110, 22, 00FFD700h ; Center brass turret - - ; Spinning Wheel / Ball Logic - cmp roulState, 1 - jne draw_roul_ball - dec roulSpinTimer - add roulWheelAngle, 8 - sub roulBallAngle, 14 - cmp roulSpinTimer, 0 - jg draw_roul_ball - - ; Wheel stopped! Determine result! - mov roulState, 2 - invoke RandomRange3D, 37 - mov roulWinningNum, eax - - ; Check bet - cmp roulBetType, 1 ; RED - jne check_ro_black - call IsNumberRed - test eax, eax - jz ro_lost - mov eax, roulBetAmount - shl eax, 1 - mov roulPayout, eax - add bankroll, eax - invoke CopyString3D, OFFSET strWin, OFFSET roulOutcomeMsg - invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 - jmp draw_roul_ball - -check_ro_black: - cmp roulBetType, 2 ; BLACK - jne check_ro_zero - cmp roulWinningNum, 0 - je ro_lost - call IsNumberRed - test eax, eax - jnz ro_lost - mov eax, roulBetAmount - shl eax, 1 - mov roulPayout, eax - add bankroll, eax - invoke CopyString3D, OFFSET strWin, OFFSET roulOutcomeMsg - invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 - jmp draw_roul_ball - -check_ro_zero: - cmp roulBetType, 3 ; ZERO - jne check_ro_even - cmp roulWinningNum, 0 - jne ro_lost - mov eax, roulBetAmount - imul eax, 36 - mov roulPayout, eax - add bankroll, eax - invoke CopyString3D, OFFSET strJackpot, OFFSET roulOutcomeMsg - invoke PlayCasinoSound3D, OFFSET soundJackpot, 0, 1 - jmp draw_roul_ball - -check_ro_even: - cmp roulBetType, 4 ; EVEN - jne check_ro_odd - mov eax, roulWinningNum - test eax, eax - jz ro_lost - test al, 1 - jnz ro_lost - mov eax, roulBetAmount - shl eax, 1 - mov roulPayout, eax - add bankroll, eax - invoke CopyString3D, OFFSET strWin, OFFSET roulOutcomeMsg - invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 - jmp draw_roul_ball - -check_ro_odd: - mov eax, roulWinningNum - test eax, eax - jz ro_lost - test al, 1 - jz ro_lost - mov eax, roulBetAmount - shl eax, 1 - mov roulPayout, eax - add bankroll, eax - invoke CopyString3D, OFFSET strWin, OFFSET roulOutcomeMsg - invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 - jmp draw_roul_ball - -ro_lost: - invoke CopyString3D, OFFSET strLose, OFFSET roulOutcomeMsg - -draw_roul_ball: - ; Draw White Ball on Rim - mov eax, roulBallAngle - and eax, 511 - mov ebx, [tableCos + eax*4] - imul ebx, 42 - sar ebx, 16 - add ebx, 85 - - mov eax, roulBallAngle - and eax, 511 - mov edx, [tableSin + eax*4] - imul edx, 42 - sar edx, 16 - add edx, 110 - invoke DrawCircle, ebx, edx, 3, 00FFFFFFh - - ; Right Betting Board - invoke DrawBoxBorder, 175, 25, 125, 28, 001010C0h, 00FFFFFFh, 2 ; [1] RED - invoke DrawString8x8, 190, 35, OFFSET textRed3D, 00FFFFFFh - - invoke DrawBoxBorder, 175, 60, 125, 28, 00151515h, 00FFFFFFh, 2 ; [2] BLACK - invoke DrawString8x8, 190, 70, OFFSET textBlack3D, 00FFFFFFh - - invoke DrawBoxBorder, 175, 95, 125, 28, 00106010h, 00FFFFFFh, 2 ; [3] ZERO - invoke DrawString8x8, 190, 105, OFFSET textZero3D, 00FFFFFFh - - invoke DrawBoxBorder, 175, 130, 60, 26, 00302020h, 00FFFFFFh, 1 ; [4] EVEN - invoke DrawString8x8, 185, 139, OFFSET textEven3D, 00FFFFFFh - - invoke DrawBoxBorder, 240, 130, 60, 26, 00302020h, 00FFFFFFh, 1 ; [5] ODD - invoke DrawString8x8, 250, 139, OFFSET textOdd3D, 00FFFFFFh - - ; Highlight Active Bet - cmp roulBetType, 1 - jne @F - invoke DrawBoxBorder, 173, 23, 129, 32, 0, 00FFFF00h, 2 -@@: - cmp roulBetType, 2 - jne @F - invoke DrawBoxBorder, 173, 58, 129, 32, 0, 00FFFF00h, 2 -@@: - cmp roulBetType, 3 - jne @F - invoke DrawBoxBorder, 173, 93, 129, 32, 0, 00FFFF00h, 2 -@@: - cmp roulBetType, 4 - jne @F - invoke DrawBoxBorder, 173, 128, 64, 30, 0, 00FFFF00h, 2 -@@: - cmp roulBetType, 5 - jne draw_ro_footer - invoke DrawBoxBorder, 238, 128, 64, 30, 0, 00FFFF00h, 2 - -draw_ro_footer: - invoke DrawBoxBorder, 20, 180, 280, 42, 00101015h, 00FFD700h, 1 - - cmp roulState, 2 - jne @F - invoke DrawString8x8, 28, 186, OFFSET textResult3D, 00FFD700h - invoke FormatNumber, roulWinningNum, OFFSET hudNumBuffer - invoke DrawString8x8, 85, 186, OFFSET hudNumBuffer, 00FFFF00h - invoke DrawString8x8, 130, 186, OFFSET roulOutcomeMsg, 0050FF50h -@@: - invoke DrawString8x8, 28, 202, OFFSET textSpin3D, 00A0A0A0h - ret -RenderRouletteGame ENDP - -IsNumberRed PROC - mov eax, roulWinningNum - cmp eax, 1 - je red_yes - cmp eax, 3 - je red_yes - cmp eax, 5 - je red_yes - cmp eax, 7 - je red_yes - cmp eax, 9 - je red_yes - cmp eax, 12 - je red_yes - cmp eax, 14 - je red_yes - cmp eax, 16 - je red_yes - cmp eax, 18 - je red_yes - cmp eax, 19 - je red_yes - cmp eax, 21 - je red_yes - cmp eax, 23 - je red_yes - cmp eax, 25 - je red_yes - cmp eax, 27 - je red_yes - cmp eax, 30 - je red_yes - cmp eax, 32 - je red_yes - cmp eax, 34 - je red_yes - cmp eax, 36 - je red_yes - xor eax, eax - ret -red_yes: - mov eax, 1 - ret -IsNumberRed ENDP - -; ============================================================================== -; IN-ENGINE 2.5D MINI-GAME: BAR & SHOP -; ============================================================================== -HandleShopInput PROC uses ebx esi - xor esi, esi -shop_choice: - inc esi - lea eax, [esi+30h] - invoke Pressed3D, eax - test eax, eax - jnz shop_chosen - cmp esi, 3 - jb shop_choice - ret -shop_chosen: - bt ownedBacks3D, esi - jc shop_equip - mov ebx, 1500 - cmp esi, 1 - jne @F - mov ebx, 1000 -@@: - cmp bankroll, ebx - jb shop_no_money - sub bankroll, ebx - bts ownedBacks3D, esi -shop_equip: - mov selectedBack3D, esi - invoke CopyString3D, OFFSET textBought3D, OFFSET shopMsg - call SaveProgress3D - ret -shop_no_money: - invoke CopyString3D, OFFSET textNoCash3D, OFFSET shopMsg - ret -HandleShopInput ENDP - -RenderShopGame PROC - invoke DrawBox, 0, 0, SCREEN_W, SCREEN_H, 00150A0Ah - invoke DrawBoxBorder, 10, 10, 300, 220, 00251515h, 00FFD700h, 3 - invoke DrawString8x8, 25, 20, OFFSET textShop3D, 00FFD700h - - invoke DrawBoxBorder, 20, 40, 280, 32, 001A1010h, 00FFFFFFh, 1 - invoke DrawString8x8, 28, 46, OFFSET textItem1_3D, 00FFFF00h - invoke DrawString8x8, 28, 58, OFFSET textShopHint3D, 00A0A0A0h - - invoke DrawBoxBorder, 20, 80, 280, 32, 001A1010h, 00FFFFFFh, 1 - invoke DrawString8x8, 28, 86, OFFSET textItem2_3D, 00FFFF00h - invoke DrawString8x8, 28, 98, OFFSET textShopHint3D, 00A0A0A0h - - invoke DrawBoxBorder, 20, 120, 280, 32, 001A1010h, 00FFFFFFh, 1 - invoke DrawString8x8, 28, 126, OFFSET textItem3_3D, 00FFFF00h - invoke DrawString8x8, 28, 138, OFFSET textShopHint3D, 00A0A0A0h - - invoke DrawBoxBorder, 20, 165, 280, 55, 00100A0Ah, 00FFD700h, 1 - invoke DrawString8x8, 28, 172, OFFSET textBank3D, 00FFD700h - invoke FormatNumber, bankroll, OFFSET hudNumBuffer - invoke DrawString8x8, 110, 172, OFFSET hudNumBuffer, 00FFFF00h - - cmp BYTE PTR [shopMsg], 0 - je @F - invoke DrawString8x8, 28, 188, OFFSET shopMsg, 0050FF50h -@@: - invoke DrawString8x8, 28, 204, OFFSET textBack3D, 00A0A0A0h - ret -RenderShopGame ENDP - -; ============================================================================== -; IN-ENGINE 2.5D MINI-GAME: ATM TERMINAL -; ============================================================================== -HandleATMInput PROC - ret -HandleATMInput ENDP - -RenderATMGame PROC - invoke DrawBox, 0, 0, 320, 240, 00172120h - invoke DrawString8x8, 24, 30, OFFSET textATM3D, 00D8BC6Ah - invoke DrawString8x8, 24, 70, OFFSET textBank3D, 00FFFFFFh - invoke FormatNumber, bankroll, OFFSET hudNumBuffer - invoke DrawString8x8, 96, 70, OFFSET hudNumBuffer, 0089DAB2h - invoke DrawString8x8, 24, 115, OFFSET textATMNote3D, 00B7C8C1h - invoke DrawString8x8, 24, 140, OFFSET textATMNote2_3D, 00B7C8C1h - invoke DrawString8x8, 24, 208, OFFSET textBack3D, 00D8BC6Ah - ret -RenderATMGame ENDP - -; ============================================================================== -; ============================================================================== -; ============================================================================== -; SHARED RICH UI PROCEDURES -; ============================================================================== -DrawKeycap3D PROC uses ebx esi edi, x:DWORD, y:DWORD, strPtr:DWORD, isActive:DWORD - local keyW:DWORD - mov esi, strPtr - xor ecx, ecx -keycap_len: - mov al, [esi+ecx] - test al, al - jz keycap_len_done - inc ecx - jmp keycap_len -keycap_len_done: - shl ecx, 3 - add ecx, 8 - mov keyW, ecx - - ; Drop shadow - mov eax, y - add eax, 2 - invoke DrawBox, x, eax, keyW, 13, 0008080Ch - - ; Border and Fill - cmp isActive, 0 - je keycap_inactive - mov eax, 00FFFF00h ; Bright Yellow active border - mov edx, 001B4B22h ; Casino Green active fill - mov ebx, 00FFFF00h ; Bright Yellow active text - jmp keycap_draw_box -keycap_inactive: - mov eax, 00606870h ; Slate inactive border - mov edx, 001A1C22h ; Charcoal inactive fill - mov ebx, 00D0D8E0h ; Silver inactive text - -keycap_draw_box: - push ebx - invoke DrawBoxBorder, x, y, keyW, 13, edx, eax, 1 - pop ebx - - ; Text label - mov eax, x - add eax, 4 - mov edx, y - add edx, 3 - invoke DrawString8x8, eax, edx, strPtr, ebx - - mov eax, keyW - add eax, 4 - ret -DrawKeycap3D ENDP - -DrawChipStack PROC uses ebx esi edi, x:DWORD, y:DWORD, chipCount:DWORD - mov edi, chipCount - xor esi, esi -chip_loop: - cmp esi, edi - jge chip_done - mov eax, esi - shl eax, 2 - mov edx, y - sub edx, eax - - ; Shadow - mov eax, x - add eax, 2 - mov ecx, edx - add ecx, 5 - invoke DrawBox, eax, ecx, 20, 2, 00061004h - - ; Red Clay Chip body with white rim - invoke DrawBoxBorder, x, edx, 24, 6, 00B81515h, 00FFFFFFh, 1 - - ; White stripe inlays - mov eax, x - add eax, 4 - mov ecx, edx - add ecx, 1 - invoke DrawBox, eax, ecx, 3, 4, 00FFFFFFh - - mov eax, x - add eax, 17 - mov ecx, edx - add ecx, 1 - invoke DrawBox, eax, ecx, 3, 4, 00FFFFFFh - - inc esi - jmp chip_loop -chip_done: - ret -DrawChipStack ENDP - -DrawDetailedCoin PROC uses ebx esi edi, cxVal:DWORD, cyVal:DWORD, rxVal:DWORD, ryVal:DWORD, outerColor:DWORD, innerColor:DWORD, reliefType:DWORD - local rxSq:DWORD - local rySq:DWORD - local rxRySq:DWORD - local threshSq:DWORD - local curDy:DWORD - local curDx:DWORD - local curX:DWORD - local curY:DWORD - - mov eax, rxVal - cmp eax, 0 - jle coin_draw_done - mov eax, ryVal - cmp eax, 0 - jle coin_draw_done - - mov eax, rxVal - imul eax, rxVal - mov rxSq, eax - - mov eax, ryVal - imul eax, ryVal - mov rySq, eax - - imul eax, rxSq - mov rxRySq, eax - - ; 3/4 threshold for rim bevel - mov ecx, 3 - imul eax, ecx - shr eax, 2 - mov threshSq, eax - - ; Scan rows - mov eax, ryVal - neg eax - mov curDy, eax -coin_row_loop: - mov eax, curDy - cmp eax, ryVal - jg coin_relief_check - - mov edx, cyVal - add edx, curDy - mov curY, edx - - ; Scan columns - mov eax, rxVal - neg eax - mov curDx, eax -coin_col_loop: - mov eax, curDx - cmp eax, rxVal - jg coin_col_next_row - - mov ecx, cxVal - add ecx, curDx - mov curX, ecx - - ; val = dx*dx*rySq + dy*dy*rxSq - mov eax, curDx - imul eax, curDx - imul eax, rySq - mov ebx, eax - - mov eax, curDy - imul eax, curDy - imul eax, rxSq - add eax, ebx - - cmp eax, rxRySq - ja coin_pixel_outside - - cmp eax, threshSq - jb coin_draw_inner - invoke DrawPixel, curX, curY, outerColor - jmp coin_pixel_outside -coin_draw_inner: - invoke DrawPixel, curX, curY, innerColor - -coin_pixel_outside: - inc curDx - jmp coin_col_loop - -coin_col_next_row: - inc curDy - jmp coin_row_loop - -coin_relief_check: - cmp rxVal, 14 - jl coin_draw_done - - cmp reliefType, 1 - je coin_draw_eagle - cmp reliefType, 2 - je coin_draw_numeral - jmp coin_draw_done - -coin_draw_eagle: - ; Imperial Eagle relief (Dark Gold 009A7A00h / Bright 00FFD700h) - mov eax, cxVal - sub eax, 3 - mov edx, cyVal - sub edx, 14 - invoke DrawBox, eax, edx, 7, 2, 009A7A00h - - mov eax, cxVal - sub eax, 4 - mov edx, cyVal - sub edx, 12 - invoke DrawBox, eax, edx, 9, 2, 009A7A00h - - mov eax, cxVal - sub eax, 2 - mov edx, cyVal - sub edx, 9 - invoke DrawBox, eax, edx, 5, 12, 009A7A00h - - mov eax, cxVal - sub eax, 1 - mov edx, cyVal - sub edx, 8 - invoke DrawBox, eax, edx, 3, 10, 00FFD700h - - mov eax, cxVal - sub eax, 10 - mov edx, cyVal - sub edx, 8 - invoke DrawBox, eax, edx, 7, 3, 009A7A00h - - mov eax, cxVal - sub eax, 13 - mov edx, cyVal - sub edx, 5 - invoke DrawBox, eax, edx, 10, 3, 009A7A00h - - mov eax, cxVal - sub eax, 11 - mov edx, cyVal - sub edx, 2 - invoke DrawBox, eax, edx, 7, 3, 009A7A00h - - mov eax, cxVal - add eax, 4 - mov edx, cyVal - sub edx, 8 - invoke DrawBox, eax, edx, 7, 3, 009A7A00h - - mov eax, cxVal - add eax, 4 - mov edx, cyVal - sub edx, 5 - invoke DrawBox, eax, edx, 10, 3, 009A7A00h - - mov eax, cxVal - add eax, 5 - mov edx, cyVal - sub edx, 2 - invoke DrawBox, eax, edx, 7, 3, 009A7A00h - - mov eax, cxVal - sub eax, 4 - mov edx, cyVal - add edx, 4 - invoke DrawBox, eax, edx, 9, 3, 009A7A00h - - mov eax, cxVal - sub eax, 3 - mov edx, cyVal - add edx, 7 - invoke DrawBox, eax, edx, 7, 3, 009A7A00h - jmp coin_draw_done - -coin_draw_numeral: - ; Roman numeral 'I' & laurel - mov eax, cxVal - sub eax, 5 - mov edx, cyVal - sub edx, 10 - invoke DrawBox, eax, edx, 11, 3, 009A7A00h - - mov eax, cxVal - sub eax, 2 - mov edx, cyVal - sub edx, 7 - invoke DrawBox, eax, edx, 5, 14, 009A7A00h - - mov eax, cxVal - sub eax, 1 - mov edx, cyVal - sub edx, 6 - invoke DrawBox, eax, edx, 3, 12, 00FFD700h - - mov eax, cxVal - sub eax, 6 - mov edx, cyVal - add edx, 7 - invoke DrawBox, eax, edx, 13, 3, 009A7A00h - - ; Laurel dots - mov eax, cxVal - sub eax, 12 - mov edx, cyVal - sub edx, 8 - invoke DrawBox, eax, edx, 2, 2, 009A7A00h - - mov eax, cxVal - add eax, 11 - mov edx, cyVal - sub edx, 8 - invoke DrawBox, eax, edx, 2, 2, 009A7A00h - - mov eax, cxVal - sub eax, 12 - mov edx, cyVal - invoke DrawBox, eax, edx, 2, 2, 009A7A00h - - mov eax, cxVal - add eax, 11 - mov edx, cyVal - invoke DrawBox, eax, edx, 2, 2, 009A7A00h - - mov eax, cxVal - sub eax, 12 - mov edx, cyVal - add edx, 8 - invoke DrawBox, eax, edx, 2, 2, 009A7A00h - - mov eax, cxVal - add eax, 11 - mov edx, cyVal - add edx, 8 - invoke DrawBox, eax, edx, 2, 2, 009A7A00h - -coin_draw_done: - ret -DrawDetailedCoin ENDP - -; ============================================================================== -; IN-ENGINE 2.5D MINI-GAME: COIN FLIP -; ============================================================================== -InitCoinGame PROC - call InitNativeCoin3D - ret -InitCoinGame ENDP - -HandleCoinInput PROC - call HandleNativeCoin3D - ret -; Retained legacy frame-count prototype, excluded from the executable. -IF 0 - cmp coin3d_state, 0 - je coin_handle_idle - cmp coin3d_state, 1 - je coin_handle_flipping - cmp coin3d_state, 2 - je coin_handle_result - ret - -coin_handle_idle: - invoke Pressed3D, 26h ; UP - test eax, eax - jnz coin_bet_up - invoke Pressed3D, 57h ; 'W' - test eax, eax - jnz coin_bet_up - invoke Pressed3D, 28h ; DOWN - test eax, eax - jnz coin_bet_down - invoke Pressed3D, 53h ; 'S' - test eax, eax - jnz coin_bet_down - invoke Pressed3D, 31h ; '1' - test eax, eax - jnz coin_pick_1 - invoke Pressed3D, 32h ; '2' - test eax, eax - jnz coin_pick_2 - invoke Pressed3D, 20h ; SPACE - test eax, eax - jnz coin_start_flip - ret - -coin_bet_up: - mov eax, coin3d_bet - add eax, 50 - cmp eax, bankroll - jle @F - mov eax, bankroll -@@: - cmp eax, 5000 - jle @F - mov eax, 5000 -@@: - mov coin3d_bet, eax - invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 - ret - -coin_bet_down: - mov eax, coin3d_bet - sub eax, 50 - cmp eax, 50 - jge @F - mov eax, 50 -@@: - mov coin3d_bet, eax - invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 - ret - -coin_pick_1: - mov coin3d_choice, 1 - invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 - ret - -coin_pick_2: - mov coin3d_choice, 2 - invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 - ret - -coin_start_flip: - mov eax, coin3d_bet - cmp eax, bankroll - jle @F - mov eax, bankroll - mov coin3d_bet, eax - test eax, eax - jz coin_done -@@: - mov eax, coin3d_bet - sub bankroll, eax - mov coin3d_state, 1 - mov coin3d_timer, 40 - invoke PlayCasinoSound3D, OFFSET soundCoin, 0, 1 - ret - -coin_handle_flipping: - dec coin3d_timer - cmp coin3d_timer, 0 - jg coin_done - invoke RandomRange3D, 2 - inc eax - mov coin3d_result, eax - mov edx, coin3d_choice - cmp eax, edx - jne coin_flip_lost - - ; Won! - inc coin3d_streak - mov eax, coin3d_bet - shl eax, 1 - add bankroll, eax - mov coin3d_win, eax - mov coin3d_state, 2 - invoke PlayCasinoSound3D, OFFSET soundCoinDing, 0, 1 - ret - -coin_flip_lost: - mov coin3d_streak, 0 - mov coin3d_win, 0 - mov coin3d_state, 2 - invoke PlayCasinoSound3D, OFFSET soundLose, 0, 1 - ret - -coin_handle_result: - invoke Pressed3D, 20h - test eax, eax - jz coin_done - mov coin3d_state, 0 - invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 -coin_done: - ret -ENDIF -HandleCoinInput ENDP - -RenderCoinGame PROC uses ebx esi edi - local cyVal:DWORD - local rxVal:DWORD - local kx:DWORD - - call RenderNativeCoin3D - ret -IF 0 - ; Background & Cabinet border - invoke DrawBox, 0, 0, 320, 240, 00140906h - invoke DrawBoxBorder, 6, 6, 308, 228, 0022150Fh, 00482E1Bh, 3 - - ; Header - invoke DrawBoxBorder, 20, 12, 280, 26, 001C100Ah, 00FFD700h, 2 - invoke DrawString8x8, 44, 21, OFFSET textCoinTitle, 00FFFF00h - - ; Corner rivets - invoke DrawBox, 12, 12, 3, 3, 00FFD700h - invoke DrawBox, 306, 12, 3, 3, 00FFD700h - invoke DrawBox, 12, 226, 3, 3, 00FFD700h - invoke DrawBox, 306, 226, 3, 3, 00FFD700h - - ; Status meters - invoke DrawBoxBorder, 20, 44, 110, 18, 000E1A0Ah, 00224B1Ah, 1 - invoke DrawString8x8, 24, 49, OFFSET textBankPrompt, 003CFF3Ch - invoke FormatNumber, bankroll, OFFSET hudNumBuffer - invoke DrawString8x8, 72, 49, OFFSET hudNumBuffer, 003CFF3Ch - - invoke DrawBoxBorder, 190, 44, 110, 18, 001A100Ah, 003A2814h, 1 - invoke DrawString8x8, 194, 49, OFFSET textBetPrompt, 00FFD700h - invoke FormatNumber, coin3d_bet, OFFSET hudNumBuffer - invoke DrawString8x8, 254, 49, OFFSET hudNumBuffer, 00FFD700h - - ; Left: Heads - cmp coin3d_choice, 1 - jne coin_left_inactive - invoke DrawBoxBorder, 20, 72, 76, 68, 00101828h, 00FFFF00h, 2 - invoke DrawString8x8, 30, 78, OFFSET textCoinSide1, 00FFFF00h - invoke DrawDetailedCoin, 58, 106, 14, 14, 00D0A000h, 00FFD700h, 1 - invoke DrawString8x8, 24, 126, OFFSET textCoinSelected, 003CFF3Ch - jmp coin_right_side -coin_left_inactive: - invoke DrawBoxBorder, 20, 72, 76, 68, 000A101Ch, 00404855h, 1 - invoke DrawString8x8, 30, 78, OFFSET textCoinSide1, 00D0D8E0h - invoke DrawDetailedCoin, 58, 106, 14, 14, 009A7A00h, 00D0A000h, 1 - -coin_right_side: - ; Right: Tails - cmp coin3d_choice, 2 - jne coin_right_inactive - invoke DrawBoxBorder, 224, 72, 76, 68, 00101828h, 00FFFF00h, 2 - invoke DrawString8x8, 234, 78, OFFSET textCoinSide2, 00FFFF00h - invoke DrawDetailedCoin, 262, 106, 14, 14, 00D0A000h, 00FFD700h, 2 - invoke DrawString8x8, 228, 126, OFFSET textCoinSelected, 003CFF3Ch - jmp coin_center_area -coin_right_inactive: - invoke DrawBoxBorder, 224, 72, 76, 68, 000A101Ch, 00404855h, 1 - invoke DrawString8x8, 234, 78, OFFSET textCoinSide2, 00D0D8E0h - invoke DrawDetailedCoin, 262, 106, 14, 14, 009A7A00h, 00D0A000h, 2 - -coin_center_area: - ; Center spotlight - invoke DrawCircle, 160, 110, 48, 00121620h - invoke DrawCircle, 160, 110, 44, 00FFD700h - invoke DrawCircle, 160, 110, 42, 000E141Eh - - cmp coin3d_state, 1 - je coin_render_flipping - cmp coin3d_state, 2 - je coin_render_result - - ; Idle coin - invoke DrawDetailedCoin, 160, 110, 26, 26, 00D0A000h, 00FFD700h, coin3d_choice - jmp coin_render_keys - -coin_render_flipping: - mov eax, coin3d_timer - and eax, 7 - movzx eax, byte ptr [coinRxAnimTable + eax] - mov rxVal, eax - invoke DrawDetailedCoin, 160, 110, rxVal, 26, 00D0A000h, 00FFD700h, 0 - invoke DrawString8x8, 88, 160, OFFSET textCoinFlipping, 00FFFF00h - jmp coin_render_keys - -coin_render_result: - invoke DrawDetailedCoin, 160, 110, 26, 26, 00D0A000h, 00FFD700h, coin3d_result - mov eax, coin3d_result - cmp eax, coin3d_choice - jne coin_render_loss_msg - - ; Win banner - invoke DrawBoxBorder, 44, 154, 232, 22, 000E141Eh, 003CFF3Ch, 1 - invoke DrawString8x8, 64, 161, OFFSET textCoinWin, 003CFF3Ch - invoke FormatNumber, coin3d_win, OFFSET hudNumBuffer - invoke DrawString8x8, 152, 161, OFFSET hudNumBuffer, 003CFF3Ch - jmp coin_render_keys - -coin_render_loss_msg: - invoke DrawBoxBorder, 44, 154, 232, 22, 000E141Eh, 00C81414h, 1 - invoke DrawString8x8, 114, 161, OFFSET textCoinLose, 00FF6464h - -coin_render_keys: - mov kx, 16 - xor eax, eax - cmp coin3d_choice, 1 - sete al - invoke DrawKeycap3D, kx, 192, OFFSET textCoinKey1, eax - add kx, eax - - xor eax, eax - cmp coin3d_choice, 2 - sete al - invoke DrawKeycap3D, kx, 192, OFFSET textCoinKey2, eax - add kx, eax - - invoke DrawKeycap3D, kx, 192, OFFSET textCoinKeySpace, 1 - add kx, eax - - invoke DrawKeycap3D, kx, 192, OFFSET textKeyEsc, 0 - ret -ENDIF -RenderCoinGame ENDP - -; ============================================================================== -; IN-ENGINE 2.5D MINI-GAME: CRAPS / DICE -; ============================================================================== -DrawCrapsDie PROC uses ebx esi edi, x:DWORD, y:DWORD, sizeVal:DWORD, valNum:DWORD - ; Drop shadow - mov eax, x - add eax, 3 - mov edx, y - add edx, sizeVal - invoke DrawBox, eax, edx, sizeVal, 3, 00081403h - - mov eax, x - add eax, sizeVal - mov edx, y - add edx, 3 - invoke DrawBox, eax, edx, 3, sizeVal, 00081403h - - ; Ivory body & bevel - invoke DrawBoxBorder, x, y, sizeVal, sizeVal, 00FAF4F0h, 00403535h, 1 - mov eax, x - inc eax - mov edx, y - inc edx - mov ecx, sizeVal - sub ecx, 2 - invoke DrawBox, eax, edx, ecx, 1, 00FFFFFFh - invoke DrawBox, eax, edx, 1, ecx, 00FFFFFFh - - ; Ruby pips (00C81515h) - mov eax, valNum - test al, 1 - jz @F - ; Center pip - mov eax, x - add eax, 18 - mov edx, y - add edx, 18 - invoke DrawCircle, eax, edx, 3, 00C81515h - dec eax - dec edx - invoke DrawPixel, eax, edx, 00FFFFFFh -@@: - cmp valNum, 2 - jl die_pips_done - mov eax, x - add eax, 9 - mov edx, y - add edx, 9 - invoke DrawCircle, eax, edx, 3, 00C81515h - mov eax, x - add eax, 27 - mov edx, y - add edx, 27 - invoke DrawCircle, eax, edx, 3, 00C81515h - - cmp valNum, 4 - jl die_pips_done - mov eax, x - add eax, 27 - mov edx, y - add edx, 9 - invoke DrawCircle, eax, edx, 3, 00C81515h - mov eax, x - add eax, 9 - mov edx, y - add edx, 27 - invoke DrawCircle, eax, edx, 3, 00C81515h - - cmp valNum, 6 - jl die_pips_done - mov eax, x - add eax, 9 - mov edx, y - add edx, 18 - invoke DrawCircle, eax, edx, 3, 00C81515h - mov eax, x - add eax, 27 - mov edx, y - add edx, 18 - invoke DrawCircle, eax, edx, 3, 00C81515h - -die_pips_done: - ret -DrawCrapsDie ENDP - -InitDiceGame PROC - mov dice3d_state, 0 - mov dice3d_timer, 0 - mov dice3d_win, 0 - ret -InitDiceGame ENDP - -HandleDiceInput PROC - cmp dice3d_state, 0 - je dice_handle_idle - cmp dice3d_state, 1 - je dice_handle_rolling - cmp dice3d_state, 2 - je dice_handle_result - ret - -dice_handle_idle: - invoke Pressed3D, 26h ; UP - test eax, eax - jnz dice_bet_up - invoke Pressed3D, 57h ; 'W' - test eax, eax - jnz dice_bet_up - invoke Pressed3D, 28h ; DOWN - test eax, eax - jnz dice_bet_down - invoke Pressed3D, 53h ; 'S' - test eax, eax - jnz dice_bet_down - invoke Pressed3D, 31h ; '1' - test eax, eax - jnz dice_pick_1 - invoke Pressed3D, 32h ; '2' - test eax, eax - jnz dice_pick_2 - invoke Pressed3D, 20h ; SPACE - test eax, eax - jnz dice_start_roll - ret - -dice_bet_up: - mov eax, dice3d_bet - add eax, 50 - cmp eax, bankroll - jle @F - mov eax, bankroll -@@: - cmp eax, 5000 - jle @F - mov eax, 5000 -@@: - mov dice3d_bet, eax - invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 - ret - -dice_bet_down: - mov eax, dice3d_bet - sub eax, 50 - cmp eax, 50 - jge @F - mov eax, 50 -@@: - mov dice3d_bet, eax - invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 - ret - -dice_pick_1: - mov dice3d_choice, 1 - invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 - ret - -dice_pick_2: - mov dice3d_choice, 2 - invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 - ret - -dice_start_roll: - mov eax, dice3d_bet - cmp eax, bankroll - jle @F - mov eax, bankroll - mov dice3d_bet, eax - test eax, eax - jz dice_done -@@: - mov eax, dice3d_bet - test eax, eax - jle dice_done - sub bankroll, eax - mov dice3d_state, 1 - mov dice3d_timer, 0 - invoke RandomRange3D, 6 - inc eax - mov dice3d_val1, eax - invoke RandomRange3D, 6 - inc eax - mov dice3d_val2, eax - invoke PlayCasinoSound3D, OFFSET soundDiceRoll, 0, 1 - call SaveProgress3D - ret - -dice_handle_rolling: - mov eax, deltaTime3D - add dice3d_timer, eax - cmp dice3d_timer, 1600 - jb dice_done - mov dice3d_timer, 1600 - mov eax, dice3d_val2 - mov edx, dice3d_val1 - add edx, eax - mov dice3d_sum, edx - - ; Parity check - mov eax, edx - and eax, 1 - jnz dice_sum_is_odd - ; Even - mov eax, 1 - jmp dice_check_win -dice_sum_is_odd: - mov eax, 2 - -dice_check_win: - cmp eax, dice3d_choice - jne dice_roll_lost - - ; Won! - mov eax, dice3d_bet - shl eax, 1 - add bankroll, eax - mov dice3d_win, eax - mov dice3d_state, 2 - invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 - invoke NpcRecordRound3D,8,1 - call SaveProgress3D - ret - -dice_roll_lost: - mov dice3d_win, 0 - mov dice3d_state, 2 - invoke PlayCasinoSound3D, OFFSET soundLose, 0, 1 - invoke NpcRecordRound3D,8,0 - call SaveProgress3D - ret - -dice_handle_result: - invoke Pressed3D, 20h - test eax, eax - jz dice_done - mov dice3d_state, 0 - invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 -dice_done: - ret -HandleDiceInput ENDP - -RenderDiceGame PROC uses ebx esi edi - local kx:DWORD - - ; Mahogany frame & Deep Felt Green table - invoke DrawBox, 0, 0, 320, 240, 00140906h - invoke DrawBoxBorder, 6, 6, 308, 228, 000A3816h, 00FFD700h, 2 - - ; Header - invoke DrawBoxBorder, 20, 12, 280, 26, 00072E13h, 00FFD700h, 2 - invoke DrawString8x8, 116, 21, OFFSET textDiceTitle, 00FFFF00h - - ; Status - invoke DrawBoxBorder, 20, 44, 110, 18, 00072E13h, 001B4B22h, 1 - invoke DrawString8x8, 24, 49, OFFSET textBankPrompt, 003CFF3Ch - invoke FormatNumber, bankroll, OFFSET hudNumBuffer - invoke DrawString8x8, 72, 49, OFFSET hudNumBuffer, 003CFF3Ch - - invoke DrawBoxBorder, 190, 44, 110, 18, 00072E13h, 001B4B22h, 1 - invoke DrawString8x8, 194, 49, OFFSET textBetPrompt, 00FFD700h - invoke FormatNumber, dice3d_bet, OFFSET hudNumBuffer - invoke DrawString8x8, 258, 49, OFFSET hudNumBuffer, 00FFD700h - - ; [1] ×¨Ò - cmp dice3d_choice, 1 - jne dice_even_inactive - invoke DrawBoxBorder, 16, 70, 88, 48, 00072E13h, 00FFFF00h, 2 - invoke DrawString8x8, 30, 76, OFFSET textDiceEven, 00FFFF00h - invoke DrawString8x8, 22, 90, OFFSET textDiceEvenNums, 00FFD700h - invoke DrawString8x8, 26, 104, OFFSET textCoinSelected, 003CFF3Ch - jmp dice_odd_side -dice_even_inactive: - invoke DrawBoxBorder, 16, 70, 88, 48, 00072E13h, 001B4B22h, 1 - invoke DrawString8x8, 30, 76, OFFSET textDiceEven, 00D0D8E0h - invoke DrawString8x8, 22, 90, OFFSET textDiceEvenNums, 0080B090h - -dice_odd_side: - ; [2] ÍÅ×ÅÒ - cmp dice3d_choice, 2 - jne dice_odd_inactive - invoke DrawBoxBorder, 216, 70, 88, 48, 00072E13h, 00FFFF00h, 2 - invoke DrawString8x8, 226, 76, OFFSET textDiceOdd, 00FFFF00h - invoke DrawString8x8, 224, 90, OFFSET textDiceOddNums, 00FFD700h - invoke DrawString8x8, 226, 104, OFFSET textCoinSelected, 003CFF3Ch - jmp dice_center_cubes -dice_odd_inactive: - invoke DrawBoxBorder, 216, 70, 88, 48, 00072E13h, 001B4B22h, 1 - invoke DrawString8x8, 226, 76, OFFSET textDiceOdd, 00D0D8E0h - invoke DrawString8x8, 224, 90, OFFSET textDiceOddNums, 0080B090h - -dice_center_cubes: - call RenderDiceThrow3D - - cmp dice3d_state, 1 - je dice_render_rolling - cmp dice3d_state, 2 - je dice_render_result - jmp dice_render_keys - -dice_render_rolling: - invoke DrawString8x8, 76, 138, OFFSET textDiceRolling, 00FFFF00h - jmp dice_render_keys - -dice_render_result: - invoke DrawBoxBorder, 36, 130, 248, 36, 00072E13h, 00FFD700h, 1 - invoke DrawString8x8, 44, 135, OFFSET textDiceSumHdr, 00FFD700h - invoke FormatNumber, dice3d_val1, OFFSET hudNumBuffer - invoke DrawString8x8, 92, 135, OFFSET hudNumBuffer, 00FFFF00h - invoke DrawString8x8, 110, 135, OFFSET textDicePlus, 00FFD700h - invoke FormatNumber, dice3d_val2, OFFSET hudNumBuffer - invoke DrawString8x8, 126, 135, OFFSET hudNumBuffer, 00FFFF00h - invoke DrawString8x8, 144, 135, OFFSET textDiceEqual, 00FFD700h - invoke FormatNumber, dice3d_sum, OFFSET hudNumBuffer - invoke DrawString8x8, 168, 135, OFFSET hudNumBuffer, 00FFFF00h - - mov eax, dice3d_sum - and eax, 1 - jnz dice_render_odd_res - invoke DrawString8x8, 186, 135, OFFSET textDiceEvenResult, 003CFF3Ch - jmp dice_render_outcome -dice_render_odd_res: - invoke DrawString8x8, 186, 135, OFFSET textDiceOddResult, 003CFF3Ch - -dice_render_outcome: - mov eax, dice3d_win - test eax, eax - jz dice_render_loss_outcome - invoke DrawString8x8, 68, 150, OFFSET textDiceWin, 003CFF3Ch - invoke FormatNumber, dice3d_win, OFFSET hudNumBuffer - invoke DrawString8x8, 156, 150, OFFSET hudNumBuffer, 003CFF3Ch - invoke DrawString8x8, 188, 150, OFFSET textDiceWinMult, 003CFF3Ch - jmp dice_render_keys - -dice_render_loss_outcome: - invoke DrawString8x8, 116, 150, OFFSET textDiceLose, 00FF6464h - -dice_render_keys: - mov kx, 16 - xor eax, eax - cmp dice3d_choice, 1 - sete al - invoke DrawKeycap3D, kx, 192, OFFSET textDiceKey1, eax - add kx, eax - - xor eax, eax - cmp dice3d_choice, 2 - sete al - invoke DrawKeycap3D, kx, 192, OFFSET textDiceKey2, eax - add kx, eax - - invoke DrawKeycap3D, kx, 192, OFFSET textDiceKeySpace, 1 - add kx, eax - - invoke DrawKeycap3D, kx, 192, OFFSET textKeyEsc, 0 - ret -RenderDiceGame ENDP - -; ============================================================================== -; IN-ENGINE 2.5D MINI-GAME: SKULLS & CUPS (ÍÀϨÐÑÒÊÈ) -; ============================================================================== -DrawGlowingOrb PROC uses ebx esi edi, cxVal:DWORD, cyVal:DWORD - invoke DrawCircle, cxVal, cyVal, 14, 002E1E08h - invoke DrawCircle, cxVal, cyVal, 11, 00583A10h - invoke DrawCircle, cxVal, cyVal, 8, 008A581Ah - invoke DrawCircle, cxVal, cyVal, 6, 00D0B000h - invoke DrawCircle, cxVal, cyVal, 4, 00FFE000h - mov eax, cxVal - dec eax - mov edx, cyVal - dec edx - invoke DrawCircle, eax, edx, 2, 00FFFF80h - dec eax - dec edx - invoke DrawPixel, eax, edx, 00FFFFFFh - ret -DrawGlowingOrb ENDP - -DrawGothicCup PROC uses ebx esi edi, x:DWORD, y:DWORD, cupId:DWORD, isLifted:DWORD, hasBall:DWORD - local liftY:DWORD - - mov eax, y - cmp isLifted, 0 - je @F - sub eax, 36 -@@: - mov liftY, eax - - ; Drop shadow - cmp isLifted, 0 - jne cup_shadow_lifted - mov eax, x - add eax, 6 - mov edx, y - add edx, 42 - invoke DrawBox, eax, edx, 36, 4, 0010040Ah - jmp cup_ball_check -cup_shadow_lifted: - mov eax, x - add eax, 10 - mov edx, y - add edx, 42 - invoke DrawBox, eax, edx, 28, 2, 001A0612h - -cup_ball_check: - cmp isLifted, 0 - je cup_body_draw - cmp hasBall, 0 - je cup_body_draw - mov eax, x - add eax, 24 - mov edx, y - add edx, 26 - invoke DrawGlowingOrb, eax, edx - -cup_body_draw: - ; Base pedestal - mov eax, x - add eax, 6 - mov edx, liftY - add edx, 36 - invoke DrawBoxBorder, eax, edx, 36, 6, 00301A22h, 00D0B000h, 1 - - ; Stem - mov eax, x - add eax, 18 - mov edx, liftY - add edx, 28 - invoke DrawBox, eax, edx, 12, 8, 00452533h - mov eax, x - add eax, 22 - invoke DrawBox, eax, edx, 4, 8, 006E4055h - - ; Goblet Bowl - mov eax, x - add eax, 8 - mov edx, liftY - add edx, 8 - invoke DrawBoxBorder, eax, edx, 32, 20, 00401E2Dh, 00FFD700h, 1 - - mov eax, x - add eax, 14 - mov edx, liftY - add edx, 10 - invoke DrawBox, eax, edx, 6, 16, 00703550h - mov eax, x - add eax, 17 - invoke DrawBox, eax, edx, 3, 16, 00A05078h - - ; Golden Rim - mov eax, x - add eax, 4 - mov edx, liftY - add edx, 2 - invoke DrawBoxBorder, eax, edx, 40, 7, 00200A15h, 00FFFF00h, 1 - mov eax, x - add eax, 12 - mov edx, liftY - add edx, 4 - invoke DrawBox, eax, edx, 16, 2, 00FFFF00h - - ; Skull face emblem - mov eax, x - add eax, 21 - mov edx, liftY - add edx, 12 - invoke DrawBox, eax, edx, 6, 5, 00FFD700h - mov eax, x - add eax, 22 - mov edx, liftY - add edx, 17 - invoke DrawBox, eax, edx, 4, 3, 00FFD700h - mov eax, x - add eax, 22 - mov edx, liftY - add edx, 14 - invoke DrawPixel, eax, edx, 00200A15h - mov eax, x - add eax, 24 - invoke DrawPixel, eax, edx, 00200A15h - - ; Cup number label - mov eax, x - add eax, 21 - mov edx, liftY - add edx, 24 - mov ecx, cupId - add ecx, '1' - invoke DrawChar8x8, eax, edx, ecx, 00FFFF00h - ret -DrawGothicCup ENDP - -InitSkullsGame PROC - mov skulls3d_state, 0 - mov skulls3d_timer, 0 - mov skulls3d_win, 0 - mov skulls3d_choice, 1 - mov skulls3d_cup0, 0 - mov skulls3d_cup1, 1 - mov skulls3d_cup2, 2 - invoke RandomRange3D, 3 - mov skulls3d_ballPos, eax - ret -InitSkullsGame ENDP - -FinalizeSkullsGuess PROC uses ebx - cmp skulls3d_state,3 - jne skulls_guess_done - mov eax, skulls3d_choice - cmp eax, skulls3d_ballPos - jne skulls_guess_wrong - - ; Correct! 3x payout - mov eax, skulls3d_bet - imul eax, 3 - add bankroll, eax - mov skulls3d_win, eax - mov skulls3d_state, 4 - invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 - invoke NpcRecordRound3D,9,1 - call SaveProgress3D - ret - -skulls_guess_wrong: - mov skulls3d_win, 0 - mov skulls3d_state, 4 - invoke PlayCasinoSound3D, OFFSET soundLose, 0, 1 - invoke NpcRecordRound3D,9,0 - call SaveProgress3D -skulls_guess_done: - ret -FinalizeSkullsGuess ENDP - -HandleSkullsInput PROC - cmp skulls3d_state, 0 - je skulls_handle_idle - cmp skulls3d_state, 1 - je skulls_handle_show - cmp skulls3d_state, 2 - je skulls_handle_shuffle - cmp skulls3d_state, 3 - je skulls_handle_pick - cmp skulls3d_state, 4 - je skulls_handle_reveal - ret - -skulls_handle_idle: - invoke Pressed3D, 26h ; UP - test eax, eax - jnz skulls_bet_up - invoke Pressed3D, 57h ; 'W' - test eax, eax - jnz skulls_bet_up - invoke Pressed3D, 28h ; DOWN - test eax, eax - jnz skulls_bet_down - invoke Pressed3D, 53h ; 'S' - test eax, eax - jnz skulls_bet_down - invoke Pressed3D, 20h ; SPACE - test eax, eax - jnz skulls_start_game - ret - -skulls_bet_up: - mov eax, skulls3d_bet - add eax, 50 - cmp eax, bankroll - jle @F - mov eax, bankroll -@@: - cmp eax, 5000 - jle @F - mov eax, 5000 -@@: - mov skulls3d_bet, eax - invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 - ret - -skulls_bet_down: - mov eax, skulls3d_bet - sub eax, 50 - cmp eax, 50 - jge @F - mov eax, 50 -@@: - mov skulls3d_bet, eax - invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 - ret - -skulls_start_game: - mov eax, skulls3d_bet - cmp eax, bankroll - jle @F - mov eax, bankroll - mov skulls3d_bet, eax - test eax, eax - jz skulls_input_done -@@: - mov eax, skulls3d_bet - sub bankroll, eax - invoke RandomRange3D, 3 - mov skulls3d_ballPos, eax - mov skulls3d_cup0, 0 - mov skulls3d_cup1, 1 - mov skulls3d_cup2, 2 - - ; Pre-generate 3 dynamic swap pairs - invoke RandomRange3D, 3 - mov skulls3d_swapPair0, eax - invoke RandomRange3D, 3 - mov skulls3d_swapPair1, eax - invoke RandomRange3D, 3 - mov skulls3d_swapPair2, eax - - mov skulls3d_state, 1 - mov skulls3d_timer, 0 - invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 - ret - -skulls_handle_show: - inc skulls3d_timer - cmp skulls3d_timer, 45 - jl skulls_input_done - ; Transition to Phase 2: Active Shuffle Animation - mov skulls3d_state, 2 - mov skulls3d_timer, 0 - invoke PlayCasinoSound3D, OFFSET soundShuffle, 0, 1 - ret - -skulls_handle_shuffle: - inc skulls3d_timer - cmp skulls3d_timer, 60 - jl skulls_input_done - ; Transition to Phase 3: Pick cup - mov skulls3d_state, 3 - mov skulls3d_timer, 0 - ret - -skulls_handle_pick: - invoke Pressed3D, 31h ; '1' - test eax, eax - jnz skulls_pick_1 - invoke Pressed3D, 32h ; '2' - test eax, eax - jnz skulls_pick_2 - invoke Pressed3D, 33h ; '3' - test eax, eax - jnz skulls_pick_3 - ret - -skulls_pick_1: - mov skulls3d_choice, 0 - call FinalizeSkullsGuess - ret - -skulls_pick_2: - mov skulls3d_choice, 1 - call FinalizeSkullsGuess - ret - -skulls_pick_3: - mov skulls3d_choice, 2 - call FinalizeSkullsGuess - ret - -skulls_handle_reveal: - invoke Pressed3D, 20h - test eax, eax - jz skulls_input_done - mov skulls3d_state, 0 - invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 -skulls_input_done: - ret -HandleSkullsInput ENDP - -RenderSkullsGame PROC uses ebx esi edi - local kx:DWORD - local passTick:DWORD, curPair:DWORD, swapSlotA:DWORD, swapSlotB:DWORD - local xA:DWORD, xB:DWORD, curXA:DWORD, curXB:DWORD, curYA:DWORD, curYB:DWORD - local distX:DWORD, dxVal:DWORD, archY:DWORD - - ; Mahogany & Gothic Purple table - invoke DrawBox, 0, 0, 320, 240, 00140906h - invoke DrawBoxBorder, 6, 6, 308, 228, 00300F22h, 00FFD700h, 2 - - ; Header - invoke DrawBoxBorder, 20, 12, 280, 26, 001A0812h, 00FFD700h, 2 - invoke DrawString8x8, 44, 21, OFFSET textSkullsTitle, 00FFFF00h - - ; Status - invoke DrawBoxBorder, 20, 44, 110, 18, 001A0812h, 00452033h, 1 - invoke DrawString8x8, 24, 49, OFFSET textBankPrompt, 003CFF3Ch - invoke FormatNumber, bankroll, OFFSET hudNumBuffer - invoke DrawString8x8, 72, 49, OFFSET hudNumBuffer, 003CFF3Ch - - invoke DrawBoxBorder, 190, 44, 110, 18, 001A0812h, 00452033h, 1 - invoke DrawString8x8, 194, 49, OFFSET textBetPrompt, 00FFD700h - invoke FormatNumber, skulls3d_bet, OFFSET hudNumBuffer - invoke DrawString8x8, 254, 49, OFFSET hudNumBuffer, 00FFD700h - - ; Phase Prompts - cmp skulls3d_state, 0 - jne @F - invoke DrawString8x8, 56, 62, OFFSET textSkullsPhase0, 00FFD700h - jmp skulls_draw_idle_cups -@@: - cmp skulls3d_state, 1 - jne @F - invoke DrawString8x8, 56, 62, OFFSET textSkullsPhase1, 00FFFF00h - jmp skulls_draw_phase1_cups -@@: - cmp skulls3d_state, 2 - jne @F - invoke DrawString8x8, 44, 62, OFFSET textSkullsPhase2, 00FFFF00h - jmp skulls_draw_animated_cups -@@: - cmp skulls3d_state, 3 - jne @F - invoke DrawString8x8, 28, 62, OFFSET textSkullsPhase3, 00FFFF00h - jmp skulls_draw_idle_cups -@@: - ; Phase 4: Reveal outcome - mov eax, skulls3d_win - test eax, eax - jz skulls_reveal_loss_text - invoke DrawString8x8, 40, 62, OFFSET textSkullsWin, 003CFF3Ch - invoke FormatNumber, skulls3d_win, OFFSET hudNumBuffer - invoke DrawString8x8, 136, 62, OFFSET hudNumBuffer, 003CFF3Ch - invoke DrawString8x8, 168, 62, OFFSET textSkullsWinMult, 003CFF3Ch - jmp skulls_draw_reveal_cups - -skulls_reveal_loss_text: - invoke DrawString8x8, 40, 62, OFFSET textSkullsLose, 00FF6464h - jmp skulls_draw_reveal_cups - -skulls_draw_idle_cups: - ; Draw resting cups at static slots: Slot 0 (X=36), Slot 1 (X=136), Slot 2 (X=236) - invoke DrawGothicCup, 36, 114, skulls3d_cup0, 0, 0 - invoke DrawGothicCup, 136, 114, skulls3d_cup1, 0, 0 - invoke DrawGothicCup, 236, 114, skulls3d_cup2, 0, 0 - jmp skulls_render_controls - -skulls_draw_phase1_cups: - ; Draw with golden ball showing under starting cup - mov ebx, 0 - mov edx, 0 - cmp skulls3d_ballPos, 0 - jne @F - mov ebx, 1 - mov edx, 1 -@@: - invoke DrawGothicCup, 36, 114, skulls3d_cup0, ebx, edx - - mov ebx, 0 - mov edx, 0 - cmp skulls3d_ballPos, 1 - jne @F - mov ebx, 1 - mov edx, 1 -@@: - invoke DrawGothicCup, 136, 114, skulls3d_cup1, ebx, edx - - mov ebx, 0 - mov edx, 0 - cmp skulls3d_ballPos, 2 - jne @F - mov ebx, 1 - mov edx, 1 -@@: - invoke DrawGothicCup, 236, 114, skulls3d_cup2, ebx, edx - jmp skulls_render_controls - -skulls_draw_animated_cups: - ; 60 frames = 3 passes of 20 frames - mov eax, skulls3d_timer - cmp eax, 20 - jbe pass_0 - cmp eax, 40 - jbe pass_1 - sub eax, 41 - mov passTick, eax - mov eax, skulls3d_swapPair2 - mov curPair, eax - jmp setup_pass - -pass_0: - dec eax - mov passTick, eax - mov eax, skulls3d_swapPair0 - mov curPair, eax - jmp setup_pass - -pass_1: - sub eax, 21 - mov passTick, eax - mov eax, skulls3d_swapPair1 - mov curPair, eax - -setup_pass: - ; curPair determines swap pair: - ; 0: swap slot 0 (X=36) and slot 1 (X=136) - ; 1: swap slot 1 (X=136) and slot 2 (X=236) - ; 2: swap slot 0 (X=36) and slot 2 (X=236) - cmp curPair, 1 - je pair_1 - cmp curPair, 2 - je pair_2 - mov swapSlotA, 0 - mov swapSlotB, 1 - mov xA, 36 - mov xB, 136 - jmp calc_coords -pair_1: - mov swapSlotA, 1 - mov swapSlotB, 2 - mov xA, 136 - mov xB, 236 - jmp calc_coords -pair_2: - mov swapSlotA, 0 - mov swapSlotB, 2 - mov xA, 36 - mov xB, 236 - -calc_coords: - ; distX = xB - xA - mov eax, xB - sub eax, xA - mov distX, eax - - ; dxVal = (distX * passTick) / 20 - mov eax, distX - imul eax, passTick - xor edx, edx - mov ecx, 20 - div ecx - mov dxVal, eax - - ; curXA = xA + dxVal - mov eax, xA - add eax, dxVal - mov curXA, eax - - ; curXB = xB - dxVal - mov eax, xB - sub eax, dxVal - mov curXB, eax - - ; archY = (passTick * (20 - passTick)) / 10 - mov eax, passTick - mov ecx, 20 - sub ecx, eax - imul eax, ecx - xor edx, edx - mov ecx, 10 - div ecx - mov archY, eax - - ; Cup A hops UP: 114 - archY - mov eax, 114 - sub eax, archY - mov curYA, eax - - ; Cup B hops DOWN: 114 + archY - mov eax, 114 - add eax, archY - mov curYB, eax - - ; Check if pass ended (frame 19): swap ball position and cups - cmp passTick, 19 - jne draw_active_shuffle - - ; Swap ball position if involved - mov eax, skulls3d_ballPos - cmp eax, swapSlotA - jne check_ball_b - mov edx, swapSlotB - mov skulls3d_ballPos, edx - jmp swap_slot_identities -check_ball_b: - cmp eax, swapSlotB - jne swap_slot_identities - mov edx, swapSlotA - mov skulls3d_ballPos, edx - -swap_slot_identities: - cmp curPair, 1 - je swap_ids_1_2 - cmp curPair, 2 - je swap_ids_0_2 - ; swap 0 and 1 - mov eax, skulls3d_cup0 - xchg eax, skulls3d_cup1 - mov skulls3d_cup0, eax - jmp swap_sound_tick -swap_ids_1_2: - mov eax, skulls3d_cup1 - xchg eax, skulls3d_cup2 - mov skulls3d_cup1, eax - jmp swap_sound_tick -swap_ids_0_2: - mov eax, skulls3d_cup0 - xchg eax, skulls3d_cup2 - mov skulls3d_cup0, eax - -swap_sound_tick: - invoke PlayCasinoSound3D, OFFSET soundShuffle, 0, 1 - -draw_active_shuffle: - ; Draw stationary cup - cmp curPair, 1 - je draw_stat_cup0 - cmp curPair, 2 - je draw_stat_cup1 - ; Stationary cup is slot 2 (X=236) - invoke DrawGothicCup, 236, 114, skulls3d_cup2, 0, 0 - jmp draw_moving_cups -draw_stat_cup0: - ; Stationary cup is slot 0 (X=36) - invoke DrawGothicCup, 36, 114, skulls3d_cup0, 0, 0 - jmp draw_moving_cups -draw_stat_cup1: - ; Stationary cup is slot 1 (X=136) - invoke DrawGothicCup, 136, 114, skulls3d_cup1, 0, 0 - -draw_moving_cups: - ; Moving Cup A and Moving Cup B - cmp curPair, 1 - je ids_pair_1 - cmp curPair, 2 - je ids_pair_2 - mov eax, skulls3d_cup0 - mov ebx, skulls3d_cup1 - jmp draw_the_pair -ids_pair_1: - mov eax, skulls3d_cup1 - mov ebx, skulls3d_cup2 - jmp draw_the_pair -ids_pair_2: - mov eax, skulls3d_cup0 - mov ebx, skulls3d_cup2 - -draw_the_pair: - push ebx - invoke DrawGothicCup, curXA, curYA, eax, 0, 0 - pop ebx - invoke DrawGothicCup, curXB, curYB, ebx, 0, 0 - jmp skulls_render_controls - -skulls_draw_reveal_cups: - ; Reveal Phase: lift chosen cup and lift actual ball cup if different - ; Slot 0 - mov ebx, 0 - mov edx, 0 - cmp skulls3d_choice, 0 - je slot0_is_lifted - cmp skulls3d_ballPos, 0 - jne @F -slot0_is_lifted: - mov ebx, 1 - cmp skulls3d_ballPos, 0 - sete dl -@@: - invoke DrawGothicCup, 36, 114, skulls3d_cup0, ebx, edx - - ; Slot 1 - mov ebx, 0 - mov edx, 0 - cmp skulls3d_choice, 1 - je slot1_is_lifted - cmp skulls3d_ballPos, 1 - jne @F -slot1_is_lifted: - mov ebx, 1 - cmp skulls3d_ballPos, 1 - sete dl -@@: - invoke DrawGothicCup, 136, 114, skulls3d_cup1, ebx, edx - - ; Slot 2 - mov ebx, 0 - mov edx, 0 - cmp skulls3d_choice, 2 - je slot2_is_lifted - cmp skulls3d_ballPos, 2 - jne @F -slot2_is_lifted: - mov ebx, 1 - cmp skulls3d_ballPos, 2 - sete dl -@@: - invoke DrawGothicCup, 236, 114, skulls3d_cup2, ebx, edx - -skulls_render_controls: - ; Cup selection slot labels [1], [2], [3] - invoke DrawString8x8, 54, 168, OFFSET textSkullsKey1, 00D0D8E0h - invoke DrawString8x8, 150, 168, OFFSET textSkullsKey2, 00D0D8E0h - invoke DrawString8x8, 250, 168, OFFSET textSkullsKey3, 00D0D8E0h - - ; Keycaps - mov kx, 16 - xor eax, eax - cmp skulls3d_state, 3 - je key1_active - cmp skulls3d_choice, 0 - sete al - jmp draw_key1 -key1_active: - mov eax, 1 -draw_key1: - invoke DrawKeycap3D, kx, 192, OFFSET textSkullsKey1, eax - add kx, eax - - xor eax, eax - cmp skulls3d_state, 3 - je key2_active - cmp skulls3d_choice, 1 - sete al - jmp draw_key2 -key2_active: - mov eax, 1 -draw_key2: - invoke DrawKeycap3D, kx, 192, OFFSET textSkullsKey2, eax - add kx, eax - - xor eax, eax - cmp skulls3d_state, 3 - je key3_active - cmp skulls3d_choice, 2 - sete al - jmp draw_key3 -key3_active: - mov eax, 1 -draw_key3: - invoke DrawKeycap3D, kx, 192, OFFSET textSkullsKey3, eax - add kx, eax - - xor eax, eax - cmp skulls3d_state, 0 - je start_active - cmp skulls3d_state, 4 - je start_active - jmp draw_start_key -start_active: - mov eax, 1 -draw_start_key: - invoke DrawKeycap3D, kx, 192, OFFSET textSkullsKeySpace, eax - add kx, eax - - invoke DrawKeycap3D, kx, 192, OFFSET textKeyEsc, 0 - ret -RenderSkullsGame ENDP - -InitSkillGame PROC - mov skill3d_state, 0 - mov skill3d_timer, 0 - mov skill3d_hits, 0 - mov skill3d_misses, 0 - mov skill3d_needle, 55 - mov skill3d_speed, 4 - mov skill3d_dir, 1 - mov skill3d_last_result, 0 - mov skill3d_win_amount, 0 - - ; Randomize initial zone: 80 + RandomRange(90) -> 80..170 - invoke RandomRange3D, 90 - add eax, 80 - mov skill3d_zone_start, eax - - ; Great zone: start + 20 + RandomRange(12) - invoke RandomRange3D, 12 - add eax, skill3d_zone_start - add eax, 20 - mov skill3d_great_start, eax - ret -InitSkillGame ENDP - -HandleSkillInput PROC uses ebx esi - mov eax, skill3d_state - cmp eax, 0 - je skill_handle_ready - cmp eax, 1 - je skill_handle_active - cmp eax, 2 - je skill_handle_round_wait - cmp eax, 3 - je skill_handle_round_wait - cmp eax, 4 - je skill_handle_end_wait - cmp eax, 5 - je skill_handle_end_wait - ret - -skill_handle_ready: - invoke Pressed3D, 26h ; UP - test eax, eax - jnz skill_bet_up - invoke Pressed3D, 57h ; 'W' - test eax, eax - jnz skill_bet_up - invoke Pressed3D, 28h ; DOWN - test eax, eax - jnz skill_bet_down - invoke Pressed3D, 53h ; 'S' - test eax, eax - jnz skill_bet_down - jmp skill_check_start - -skill_bet_up: - mov eax, skill3d_bet - add eax, 50 - cmp eax, bankroll - jle @F - mov eax, bankroll -@@: - cmp eax, 5000 - jle @F - mov eax, 5000 -@@: - mov skill3d_bet, eax - invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 - ret - -skill_bet_down: - mov eax, skill3d_bet - sub eax, 50 - cmp eax, 50 - jge @F - mov eax, 50 -@@: - mov skill3d_bet, eax - invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 - ret - -skill_check_start: - invoke Pressed3D, 20h ; SPACE - test eax, eax - jz skill_input_done - - ; Deduct bet on game start if beginning of run - mov eax, skill3d_hits - or eax, skill3d_misses - jnz @F - mov eax, skill3d_bet - cmp eax, bankroll - jle skill_has_funds - mov eax, bankroll - mov skill3d_bet, eax - test eax, eax - jz skill_input_done -skill_has_funds: - mov eax, skill3d_bet - sub bankroll, eax -@@: - mov skill3d_state, 1 - mov skill3d_needle, 55 - mov skill3d_dir, 1 - invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 - ret - -skill_handle_active: - ; Move needle smoothly - mov eax, skill3d_needle - mov edx, skill3d_speed - cmp skill3d_dir, 1 - je skill_move_right - sub eax, edx - cmp eax, 52 - jge skill_update_needle - mov eax, 52 - mov skill3d_dir, 1 - jmp skill_update_needle -skill_move_right: - add eax, edx - cmp eax, 268 - jle skill_update_needle - mov eax, 268 - mov skill3d_dir, -1 -skill_update_needle: - mov skill3d_needle, eax - - ; Check SPACE pressed (Reaction Hit Attempt!) - invoke Pressed3D, 20h - test eax, eax - jz skill_input_done - - ; Is needle in Great Sweet Spot? - mov eax, skill3d_needle - mov edx, skill3d_great_start - cmp eax, edx - jl check_success_zone - add edx, skill3d_great_width - cmp eax, edx - jg check_success_zone - - ; GREAT HIT! - mov skill3d_last_result, 2 - add skill3d_hits, 2 - mov skill3d_state, 2 - mov skill3d_timer, 40 - invoke PlayCasinoSound3D, OFFSET soundSkillPerfect, 0, 1 - jmp skill_check_finish_round - -check_success_zone: - mov eax, skill3d_needle - mov edx, skill3d_zone_start - cmp eax, edx - jl skill_was_miss - add edx, skill3d_zone_width - cmp eax, edx - jg skill_was_miss - - ; NORMAL HIT! - mov skill3d_last_result, 1 - inc skill3d_hits - mov skill3d_state, 2 - mov skill3d_timer, 40 - invoke PlayCasinoSound3D, OFFSET soundSkillHit, 0, 1 - jmp skill_check_finish_round - -skill_was_miss: - ; MISS! - mov skill3d_last_result, 0 - inc skill3d_misses - mov skill3d_state, 3 - mov skill3d_timer, 45 - invoke PlayCasinoSound3D, OFFSET soundSkillMiss, 0, 1 - -skill_check_finish_round: - cmp skill3d_hits, 5 - jge skill_game_escaped - cmp skill3d_misses, 3 - jge skill_game_lost - ret - -skill_game_escaped: - mov skill3d_state, 4 - mov skill3d_timer, 0 - ; Payout: 3x total return (+$2x bet profit) - mov eax, skill3d_bet - imul eax, 3 - add bankroll, eax - mov eax, skill3d_bet - shl eax, 1 - mov skill3d_win_amount, eax - invoke NpcRecordRound3D,10,1 - call SaveProgress3D - invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 - ret - -skill_game_lost: - mov skill3d_state, 5 - mov skill3d_timer, 0 - invoke NpcRecordRound3D,10,0 - call SaveProgress3D - invoke PlayCasinoSound3D, OFFSET soundLose, 0, 1 - ret - -skill_handle_round_wait: - dec skill3d_timer - cmp skill3d_timer, 0 - jg skill_input_done - - ; Next round setup - invoke RandomRange3D, 90 - add eax, 80 - mov skill3d_zone_start, eax - - invoke RandomRange3D, 12 - add eax, skill3d_zone_start - add eax, 20 - mov skill3d_great_start, eax - - mov eax, skill3d_hits - shr eax, 1 - add eax, 4 - mov skill3d_speed, eax - mov skill3d_state, 1 - ret - -skill_handle_end_wait: - invoke Pressed3D, 20h - test eax, eax - jz skill_input_done - call InitSkillGame - ret - -skill_input_done: - ret -HandleSkillInput ENDP - -RenderSkillGame PROC uses ebx esi edi - local kx:DWORD - local tx:DWORD - - ; Industrial Steel bezel - invoke DrawBox, 0, 0, 320, 240, 00121416h - invoke DrawBoxBorder, 6, 6, 308, 228, 001A1D20h, 00FFD700h, 2 - - ; Header - invoke DrawBoxBorder, 20, 12, 280, 26, 00121418h, 00FFD700h, 2 - invoke DrawString8x8, 40, 21, OFFSET textSkillTitle, 00FFFF00h - - ; Status - invoke DrawBoxBorder, 20, 44, 110, 18, 00121418h, 002A3540h, 1 - invoke DrawString8x8, 24, 49, OFFSET textBankPrompt, 003CFF3Ch - invoke FormatNumber, bankroll, OFFSET hudNumBuffer - invoke DrawString8x8, 72, 49, OFFSET hudNumBuffer, 003CFF3Ch - - invoke DrawBoxBorder, 190, 44, 110, 18, 00121418h, 002A3540h, 1 - invoke DrawString8x8, 194, 49, OFFSET textBetPrompt, 00FFD700h - invoke FormatNumber, skill3d_bet, OFFSET hudNumBuffer - invoke DrawString8x8, 254, 49, OFFSET hudNumBuffer, 00FFD700h - - ; Survivor Progress - invoke DrawString8x8, 24, 70, OFFSET textSkillHitsHdr, 003CFF3Ch - invoke FormatNumber, skill3d_hits, OFFSET hudNumBuffer - invoke DrawString8x8, 64, 70, OFFSET hudNumBuffer, 003CFF3Ch - - invoke DrawString8x8, 180, 70, OFFSET textSkillMissHdr, 00FF6464h - invoke FormatNumber, skill3d_misses, OFFSET hudNumBuffer - invoke DrawString8x8, 240, 70, OFFSET hudNumBuffer, 00FF6464h - - ; Dial Frame (Track: X=50..270, Y=102..134) - invoke DrawBoxBorder, 50, 102, 220, 32, 000F1114h, 00404855h, 2 - - ; Calibrated ticks - mov tx, 60 -skill_ticks_loop: - cmp tx, 260 - jge skill_draw_zones - invoke DrawBox, tx, 104, 1, 6, 00303845h - invoke DrawBox, tx, 126, 1, 6, 00303845h - add tx, 12 - jmp skill_ticks_loop - -skill_draw_zones: - ; Normal Success Zone (Green) - invoke DrawBoxBorder, skill3d_zone_start, 106, skill3d_zone_width, 24, 00155020h, 003CFF3Ch, 1 - - ; Great Zone (Gold) - invoke DrawBoxBorder, skill3d_great_start, 106, skill3d_great_width, 24, 00FFD700h, 00FFFF00h, 1 - - ; Pointer / Needle at skill3d_needle - mov eax, skill3d_needle - dec eax - invoke DrawBox, eax, 98, 3, 40, 00FFFFFFh - mov eax, skill3d_needle - sub eax, 2 - invoke DrawBox, eax, 96, 5, 2, 00FF3030h - invoke DrawBox, eax, 138, 5, 2, 00FF3030h - - ; Center prompts / outcome - cmp skill3d_state, 0 - jne @F - invoke DrawString8x8, 52, 150, OFFSET textSkillReadyMsg, 00FFD700h - invoke DrawString8x8, 76, 166, OFFSET textSkillPrompt, 00D0D8E0h - jmp skill_render_keys -@@: - cmp skill3d_state, 1 - jne @F - invoke DrawString8x8, 76, 150, OFFSET textSkillPrompt, 00FFFF00h - jmp skill_render_keys -@@: - cmp skill3d_state, 2 - jne @F - cmp skill3d_last_result, 2 - jne skill_normal_hit_text - invoke DrawString8x8, 36, 150, OFFSET textSkillGreatMsg, 00FFFF00h - jmp skill_render_keys -skill_normal_hit_text: - invoke DrawString8x8, 64, 150, OFFSET textSkillHitMsg, 003CFF3Ch - jmp skill_render_keys -@@: - cmp skill3d_state, 3 - jne @F - invoke DrawString8x8, 88, 150, OFFSET textSkillMissMsg, 00FF6464h - jmp skill_render_keys -@@: - cmp skill3d_state, 4 - jne @F - invoke DrawString8x8, 48, 150, OFFSET textSkillEscape, 003CFF3Ch - invoke FormatNumber, skill3d_win_amount, OFFSET hudNumBuffer - invoke DrawString8x8, 240, 150, OFFSET hudNumBuffer, 003CFF3Ch - invoke DrawString8x8, 64, 166, OFFSET textSkullsAgain, 00FFD700h - jmp skill_render_keys -@@: - invoke DrawString8x8, 44, 150, OFFSET textSkillLost, 00FF6464h - invoke DrawString8x8, 64, 166, OFFSET textSkullsAgain, 00FFD700h - -skill_render_keys: - mov kx, 16 - invoke DrawKeycap3D, kx, 192, OFFSET textSkillKeySpace, 1 - add kx, eax - - invoke DrawKeycap3D, kx, 192, OFFSET textSkillKeyBet, 0 - add kx, eax - - invoke DrawKeycap3D, kx, 192, OFFSET textKeyEsc, 0 - ret -RenderSkillGame ENDP - -HandlePlayerInput PROC uses ebx esi edi - local speed:DWORD - local nextX:DWORD - local nextY:DWORD - mov eax, deltaTime3D - imul eax, 200 - mov speed, eax - cmp keys3D[10h], 0 - je @F - shl speed, 1 -@@: - mov eax, deltaTime3D - shr eax, 2 - inc eax - cmp keys3D[41h], 0 - jne input_turn_left - cmp keys3D[25h], 0 - je input_right -input_turn_left: - sub playerAngle, eax -input_right: - cmp keys3D[44h], 0 - jne input_turn_right - cmp keys3D[27h], 0 - je input_forward -input_turn_right: - add playerAngle, eax -input_forward: - and playerAngle, 511 - call UpdateCamera3D - xor edi, edi - cmp keys3D[57h], 0 - jne input_go_forward - cmp keys3D[26h], 0 - je input_back -input_go_forward: - inc edi -input_back: - cmp keys3D[53h], 0 - jne input_go_back - cmp keys3D[28h], 0 - je input_move -input_go_back: - dec edi -input_move: - test edi, edi - jz input_action - imul edi, speed - mov eax, playerDirX - imul edi - shrd eax, edx, 16 - add eax, playerX - mov nextX, eax - mov eax, playerDirY - imul edi - shrd eax, edx, 16 - add eax, playerY - mov nextY, eax - invoke CanWalk3D, nextX, playerY - test eax, eax - jz @F - mov eax, nextX - mov playerX, eax -@@: - invoke CanWalk3D, playerX, nextY - test eax, eax - jz input_action - mov eax, nextY - mov playerY, eax -input_action: - invoke Pressed3D, 45h - test eax, eax - jz @F - call Trigger3DInteraction -@@: - ret -HandlePlayerInput ENDP - -CheckInteractions PROC uses ebx esi edi - local nearest:DWORD - mov nearest, 262144 - mov interactTargetId, 0 - mov interactPromptPtr, 0 - xor esi, esi -interaction_scan: - cmp esi, NUM_SPRITES - jge interaction_done - imul edi, esi, SIZEOF SpriteObject - cmp [casinoSprites+edi].interactId, 0 - je interaction_next - mov eax, [casinoSprites+edi].posX - sub eax, playerX - sar eax, 8 - mov ebx, eax - imul eax, eax - mov ecx, eax - mov eax, [casinoSprites+edi].posY - sub eax, playerY - sar eax, 8 - mov edx, eax - imul eax, eax - add ecx, eax - cmp ecx, nearest - jae interaction_next - ; Only target objects in front of the camera. - mov eax, playerDirX - sar eax, 8 - imul eax, ebx - mov ebx, playerDirY - sar ebx, 8 - imul ebx, edx - add eax, ebx - cmp eax, 18000 - jl interaction_next - mov nearest, ecx - mov eax, [casinoSprites+edi].interactId - mov interactTargetId, eax - mov eax, [casinoSprites+edi].promptPtr - mov interactPromptPtr, eax -interaction_next: - inc esi - jmp interaction_scan -interaction_done: - call CheckHallInteractions3D - ret -CheckInteractions ENDP - -; --- RenderCabinetBezel: Îòðèñîâêà àðêàäíîãî áåçåëÿ òåðìèíàëà íà 3D ýêðàíå --- -RenderCabinetBezel PROC uses ebx esi edi, pTitle:DWORD - ; Çàòåìíÿåì 3D-çàë â áóôåðå êàäðà (äåëèì ÿðêîñòü ïîïîëàì) - mov ecx, SCREEN_SIZE - xor esi, esi -dim_bezel_loop: - mov eax, [screenBuffer + esi*4] - shr eax, 1 - and eax, 007F7F7Fh - mov [screenBuffer + esi*4], eax - inc esi - loop dim_bezel_loop - - ; Âíåøíÿÿ çîëîòàÿ ðàìêà òåðìèíàëà - invoke DrawBoxBorder, 10, 14, 300, 212, 000C0E14h, 00D8BC6Ah, 2 - - ; Øàïêà òåðìèíàëà ñ íàçâàíèåì èãðû - invoke DrawBox, 12, 16, 296, 16, 00221A10h - invoke DrawString8x8, 20, 20, pTitle, 00F5E2B0h - - ; Ïîäâàëüíàÿ ïëàøêà ñ ïîäñêàçêîé ïî âûõîäó - invoke DrawBox, 12, 210, 296, 14, 00141416h - invoke DrawString8x8, 20, 213, OFFSET textCabinetFooter, 00AAAAAAh - - ; Âûâîäèì êàäð áåçåëÿ â îêíî - call Present3D - ret -RenderCabinetBezel ENDP - -; --- LaunchClassicGame: Âñòðàèâàíèå èãðû â UI òåðìèíàëà êàçèíî --- -LaunchClassicGame PROC uses ebx esi edi, pGameProc:DWORD, gameId:DWORD, pTitle:DWORD - LOCAL rcClient[16]:BYTE - LOCAL ptScreen[8]:BYTE - LOCAL fontInfo[84]:BYTE - LOCAL conWnd:DWORD - LOCAL conW:DWORD, conH:DWORD, conX:DWORD, conY:DWORD - LOCAL viewW:DWORD, viewH:DWORD - LOCAL offsetX:DWORD, offsetY:DWORD - - mov eax, gameId - mov currentGameId, eax - - ; 1. Ðèñóåì çîëîòîé áåçåëü òåðìèíàëà íà 3D ýêðàíå - cmp pTitle, 0 - je @F - invoke RenderCabinetBezel, pTitle -@@: - - ; 2. Âûäåëÿåì êîíñîëü - invoke AllocConsole - test eax, eax - jz launch_ret - - invoke GetStdHandle, STD_OUTPUT_HANDLE - mov hOut, eax - invoke GetStdHandle, STD_INPUT_HANDLE - mov hIn, eax - - invoke SetConsoleCP, 1251 - invoke SetConsoleOutputCP, 1251 - - cmp pTitle, 0 - je @F - invoke SetConsoleTitleA, pTitle -@@: - call EnableAnsi - call ConfigureConsoleSize - - ; 3. Íàñòðàèâàåì øðèôò Consolas Bold 16pt - lea edi, fontInfo - xor eax, eax - mov ecx, 21 - rep stosd - mov dword ptr fontInfo[0], 84 ; cbSize - mov word ptr fontInfo[8], 0 ; dwFontSize.X - mov word ptr fontInfo[10], 16 ; dwFontSize.Y - mov dword ptr fontInfo[16], 700 ; FontWeight = FW_BOLD - mov word ptr fontInfo[20], 'C' - mov word ptr fontInfo[22], 'o' - mov word ptr fontInfo[24], 'n' - mov word ptr fontInfo[26], 's' - mov word ptr fontInfo[28], 'o' - mov word ptr fontInfo[30], 'l' - mov word ptr fontInfo[32], 'a' - mov word ptr fontInfo[34], 's' - mov word ptr fontInfo[36], 0 - lea eax, fontInfo - invoke SetCurrentConsoleFontEx, hOut, 0, eax - - ; 4. Ïîëó÷àåì äåñêðèïòîð îêíà êîíñîëè - invoke GetConsoleWindow - mov conWnd, eax - test eax, eax - jz run_game_body - - ; 5. Ñíèìàåì ñèñòåìíóþ ðàìêó Windows è çàãîëîâîê ñ êíîïêàìè çàêðûòèÿ/ñâîðà÷èâàíèÿ - invoke GetWindowLongA, conWnd, -16 ; GWL_STYLE - and eax, NOT (00C00000h or 00040000h or 00080000h or 00010000h or 00020000h) - or eax, 80000000h ; WS_POPUP - invoke SetWindowLongA, conWnd, -16, eax - - ; Ñâÿçûâàåì êàê äî÷åðíåå/ïðèíàäëåæàùåå îêíî ê îêíó èãðû - cmp h3DWnd, 0 - je show_con_fallback - invoke SetWindowLongA, conWnd, -8, h3DWnd ; GWL_HWNDPARENT - - ; 6. Âû÷èñëÿåì òî÷íûå êîîðäèíàòû äëÿ ïîñàäêè ýêðàíà âíóòðü áåçåëÿ - lea eax, rcClient - invoke GetClientRect, h3DWnd, eax - mov esi, dword ptr rcClient[8] ; øèðèíà êëèåíòñêîé îáëàñòè - mov edi, dword ptr rcClient[12] ; âûñîòà êëèåíòñêîé îáëàñòè - test esi, esi - jz show_con_fallback - test edi, edi - jz show_con_fallback - - ; Ðàñ÷åò âüþïîðòà 4:3 òî÷íî êàê â Present3D - mov viewW, esi - mov eax, esi - imul eax, 3 - shr eax, 2 - cmp eax, edi - jle calc_view_h - mov eax, edi - imul eax, 4 - xor edx, edx - mov ecx, 3 - div ecx - mov viewW, eax - mov eax, edi -calc_view_h: - mov viewH, eax - - mov ebx, esi - sub ebx, viewW - shr ebx, 1 - mov offsetX, ebx - - mov ebx, edi - sub ebx, viewH - shr ebx, 1 - mov offsetY, ebx - - ; Ýêðàííûå êîîðäèíàòû ëåâîãî âåðõíåãî óãëà êëèåíòñêîé îáëàñòè - mov dword ptr ptScreen[0], 0 - mov dword ptr ptScreen[4], 0 - lea eax, ptScreen - invoke ClientToScreen, h3DWnd, eax - - ; conW = viewW * 280 / 320 (âíóòðåííåå îêíî áåçåëÿ) - mov eax, viewW - imul eax, 280 - xor edx, edx - mov ecx, 320 - div ecx - mov conW, eax - - ; conH = viewH * 168 / 240 - mov eax, viewH - imul eax, 168 - xor edx, edx - mov ecx, 240 - div ecx - mov conH, eax - - ; conX = ptScreen.x + offsetX + (viewW * 20 / 320) - mov eax, viewW - imul eax, 20 - xor edx, edx - mov ecx, 320 - div ecx - add eax, offsetX - add eax, dword ptr ptScreen[0] - mov conX, eax - - ; conY = ptScreen.y + offsetY + (viewH * 38 / 240) - mov eax, viewH - imul eax, 38 - xor edx, edx - mov ecx, 240 - div ecx - add eax, offsetY - add eax, dword ptr ptScreen[4] - mov conY, eax - - ; Ïîçèöèîíèðóåì áåçðàìî÷íûé ýêðàí òî÷íî âíóòðü çîëîòîé ðàìêè áåçåëÿ - invoke SetWindowPos, conWnd, 0, conX, conY, conW, conH, 20h or 40h ; SWP_FRAMECHANGED | SWP_SHOWWINDOW - jmp set_con_focus - -show_con_fallback: - invoke ShowWindow, conWnd, 5 ; SW_SHOW -set_con_focus: - invoke SetForegroundWindow, conWnd - invoke SetFocus, conWnd - -run_game_body: - invoke PlayCasinoSound3D, 0, 0, 0 - call InitSounds - ; Çàïóñê îðèãèíàëüíîé èãðû! - call pGameProc - call CloseLegacySounds3D - - ; Çàêðûâàåì êîíñîëü - invoke FreeConsole - mov hOut, 0 - mov hIn, 0 - - ; Âîçâðàùàåì ôîêóñ â îêíî 3D èãðû - cmp h3DWnd, 0 - je cleanup_game_input - invoke SetForegroundWindow, h3DWnd - invoke SetFocus, h3DWnd - -cleanup_game_input: - mov ecx, 256 - xor eax, eax - lea edi, keys3D - rep stosb - mov ecx, 256 - lea edi, pressedKeys3D - rep stosb - - invoke GetTickCount - mov previousTick3D, eax - mov frameStart3D, eax - mov deltaTime3D, 0 - - call SaveProgress3D - -launch_ret: - ret -LaunchClassicGame ENDP - -Trigger3DInteraction PROC - call TriggerHallInteraction3D - test eax, eax - jnz trigger_done - mov eax, interactTargetId - test eax, eax - jz trigger_done - - cmp eax, INTERACT_DANCER - jne check_target_bj - cmp bankroll, 100 - jl dancer_no_cash - sub bankroll, 100 - inc dancerLuckBuff - invoke CopyString3D, OFFSET textTips3D, OFFSET flashMessage - mov flashTimer, 100 - invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 - ret -dancer_no_cash: - invoke CopyString3D, OFFSET msgNeedMoney, OFFSET flashMessage - mov flashTimer, 60 - ret - -check_target_bj: - cmp eax, INTERACT_BLACKJACK - jne check_target_poker - call InitNativeBlackjack3D - mov engineMode, MODE_BLACKJACK - ret - -check_target_poker: - cmp eax, INTERACT_POKER - jne check_target_durak - call InitNativePoker3D - test eax, eax - jz target_unported - mov engineMode, MODE_POKER - ret - -check_target_durak: - cmp eax, INTERACT_DURAK - jne check_target_slots777 - call InitNativeDurak3D - mov engineMode, MODE_DURAK - ret - -check_target_slots777: - cmp eax, INTERACT_SLOTS_777 - jne check_target_slots_clover - call InitNativeSlots3D - test eax,eax - jz target_unported - mov engineMode,MODE_SLOTS - ret - -check_target_slots_clover: - cmp eax, INTERACT_SLOTS_CLOVER - jne check_target_roulette - call InitNativeClover3D - test eax,eax - jz target_unported - mov engineMode,MODE_CLOVER - ret - -check_target_roulette: - cmp eax, INTERACT_ROULETTE - jne check_target_dice - call InitNativeWheel3D - mov engineMode, MODE_ROULETTE - ret - -check_target_dice: - cmp eax, INTERACT_DICE - jne check_target_skulls - call InitDiceGame - mov engineMode, MODE_DICE - ret - -check_target_skulls: - cmp eax, INTERACT_SKULLS - jne check_target_coin - call InitSkullsGame - mov engineMode, MODE_SKULLS - ret - -check_target_coin: - cmp eax, INTERACT_COIN - jne check_target_skill - call InitCoinGame - mov engineMode, MODE_COIN - ret - -check_target_skill: - cmp eax, INTERACT_SKILL_CHECK - jne check_target_buckshot - call InitSkillGame - mov engineMode, MODE_SKILL - ret - -check_target_buckshot: - cmp eax, INTERACT_BUCKSHOT - jne check_target_rr - call InitBuckshot3D - mov engineMode, MODE_BUCKSHOT - ret - -check_target_rr: - cmp eax, INTERACT_RUSSIAN_ROULETTE - jne check_target_online_rr - call InitRussianGame3D - test eax, eax - jz @F - mov engineMode, MODE_RUSSIAN -@@: - ret - -check_target_online_rr: - cmp eax, INTERACT_ONLINE_RR - jne check_target_umamusume - call BeginUnavailable3D - ret - -check_target_umamusume: - cmp eax, INTERACT_UMAMUSUME - jne check_target_hell - call BeginUnavailable3D - ret - -check_target_hell: - cmp eax, INTERACT_HELL_TOWER - jne check_target_shop - call BeginUnavailable3D - ret - -check_target_shop: - cmp eax, INTERACT_SHOP - jne check_target_atm - call BeginMerchant3D - ret - -check_target_atm: - cmp eax, INTERACT_ATM - jne check_target_terminal - mov engineMode, MODE_ATM - ret - -check_target_terminal: - cmp eax, INTERACT_TERMINAL - jne check_target_observer - call BeginUnavailable3D - ret - -check_target_observer: - cmp eax, INTERACT_OBSERVER - jne target_unported - call BeginUnavailable3D - ret - -target_unported: - call BeginUnavailable3D -trigger_done: - ret -Trigger3DInteraction ENDP - -; --- Engine Initialization --- -Init3DEngine PROC - local screenCX:DWORD - local screenCY:DWORD - local posX:DWORD - local posY:DWORD - local bytesRead:DWORD - - push ebx - push esi - push edi - - call LoadDisplaySettings3D - call Create3DWindow - test eax, eax - jz init_failed - call LoadTextures3D - test eax, eax - jz init_failed - - call InitializeCasinoSprites3D - - call InitHall3D - call BeginStartup3D - call RenderStartup3D - invoke ShowWindow, h3DWnd, SW_SHOW - invoke UpdateWindow, h3DWnd - invoke SetForegroundWindow, h3DWnd - mov eax, 1 - jmp init_return -init_failed: - xor eax, eax -init_return: - pop edi - pop esi - pop ebx - ret -Init3DEngine ENDP - -InitializeCasinoSprites3D PROC -init_sprites_table: - ; Sprite 0: VIP Dancer 1 (Stage Left) - mov casinoSprites[0*SIZEOF SpriteObject].posX, (13 * FP_1 + FP_HALF) - mov casinoSprites[0*SIZEOF SpriteObject].posY, (4 * FP_1) - mov casinoSprites[0*SIZEOF SpriteObject].baseTexId, 10 - mov casinoSprites[0*SIZEOF SpriteObject].frameCount, 12 - mov casinoSprites[0*SIZEOF SpriteObject].curFrame, 0 - mov casinoSprites[0*SIZEOF SpriteObject].animTimer, 0 - mov casinoSprites[0*SIZEOF SpriteObject].animSpeed, 5 - mov casinoSprites[0*SIZEOF SpriteObject].interactId, INTERACT_DANCER - mov casinoSprites[0*SIZEOF SpriteObject].promptPtr, OFFSET promptDancer - - ; Sprite 1: VIP Dancer 2 (Center Stage Star) - mov casinoSprites[1*SIZEOF SpriteObject].posX, (16 * FP_1 + FP_HALF) - mov casinoSprites[1*SIZEOF SpriteObject].posY, (3 * FP_1 + FP_HALF) - mov casinoSprites[1*SIZEOF SpriteObject].baseTexId, 10 - mov casinoSprites[1*SIZEOF SpriteObject].frameCount, 12 - mov casinoSprites[1*SIZEOF SpriteObject].curFrame, 2 - mov casinoSprites[1*SIZEOF SpriteObject].animTimer, 0 - mov casinoSprites[1*SIZEOF SpriteObject].animSpeed, 5 - mov casinoSprites[1*SIZEOF SpriteObject].interactId, INTERACT_DANCER - mov casinoSprites[1*SIZEOF SpriteObject].promptPtr, OFFSET promptDancer - - ; Sprite 2: VIP Dancer 3 (Stage Right) - mov casinoSprites[2*SIZEOF SpriteObject].posX, (19 * FP_1 + FP_HALF) - mov casinoSprites[2*SIZEOF SpriteObject].posY, (4 * FP_1) - mov casinoSprites[2*SIZEOF SpriteObject].baseTexId, 10 - mov casinoSprites[2*SIZEOF SpriteObject].frameCount, 12 - mov casinoSprites[2*SIZEOF SpriteObject].curFrame, 1 - mov casinoSprites[2*SIZEOF SpriteObject].animTimer, 0 - mov casinoSprites[2*SIZEOF SpriteObject].animSpeed, 5 - mov casinoSprites[2*SIZEOF SpriteObject].interactId, INTERACT_DANCER - mov casinoSprites[2*SIZEOF SpriteObject].promptPtr, OFFSET promptDancer - - ; Sprite 3: VIP Blackjack (Front Center Left) - mov casinoSprites[3*SIZEOF SpriteObject].posX, (12 * FP_1 + FP_HALF) - mov casinoSprites[3*SIZEOF SpriteObject].posY, (8 * FP_1) - mov casinoSprites[3*SIZEOF SpriteObject].baseTexId, 30 - mov casinoSprites[3*SIZEOF SpriteObject].frameCount, 1 - mov casinoSprites[3*SIZEOF SpriteObject].curFrame, 0 - mov casinoSprites[3*SIZEOF SpriteObject].animTimer, 0 - mov casinoSprites[3*SIZEOF SpriteObject].animSpeed, 1 - mov casinoSprites[3*SIZEOF SpriteObject].interactId, INTERACT_BLACKJACK - mov casinoSprites[3*SIZEOF SpriteObject].promptPtr, OFFSET promptBlackjack - - ; Sprite 4: European Roulette Table (Front Center) - mov casinoSprites[4*SIZEOF SpriteObject].posX, (16 * FP_1 + FP_HALF) - mov casinoSprites[4*SIZEOF SpriteObject].posY, (10 * FP_1) - mov casinoSprites[4*SIZEOF SpriteObject].baseTexId, 31 - mov casinoSprites[4*SIZEOF SpriteObject].frameCount, 1 - mov casinoSprites[4*SIZEOF SpriteObject].curFrame, 0 - mov casinoSprites[4*SIZEOF SpriteObject].animTimer, 0 - mov casinoSprites[4*SIZEOF SpriteObject].animSpeed, 1 - mov casinoSprites[4*SIZEOF SpriteObject].interactId, INTERACT_ROULETTE - mov casinoSprites[4*SIZEOF SpriteObject].promptPtr, OFFSET promptCasinoRoulette - - ; Sprite 5: Texas Hold'em Poker Table (Front Center Right) - mov casinoSprites[5*SIZEOF SpriteObject].posX, (20 * FP_1 + FP_HALF) - mov casinoSprites[5*SIZEOF SpriteObject].posY, (8 * FP_1) - mov casinoSprites[5*SIZEOF SpriteObject].baseTexId, 30 - mov casinoSprites[5*SIZEOF SpriteObject].frameCount, 1 - mov casinoSprites[5*SIZEOF SpriteObject].curFrame, 0 - mov casinoSprites[5*SIZEOF SpriteObject].animTimer, 0 - mov casinoSprites[5*SIZEOF SpriteObject].animSpeed, 1 - mov casinoSprites[5*SIZEOF SpriteObject].interactId, INTERACT_POKER - mov casinoSprites[5*SIZEOF SpriteObject].promptPtr, OFFSET promptPoker - - ; Sprite 6: Podkidnoy Durak Card Table - mov casinoSprites[6*SIZEOF SpriteObject].posX, (24 * FP_1 + FP_HALF) - mov casinoSprites[6*SIZEOF SpriteObject].posY, (8 * FP_1) - mov casinoSprites[6*SIZEOF SpriteObject].baseTexId, 30 - mov casinoSprites[6*SIZEOF SpriteObject].frameCount, 1 - mov casinoSprites[6*SIZEOF SpriteObject].curFrame, 0 - mov casinoSprites[6*SIZEOF SpriteObject].animTimer, 0 - mov casinoSprites[6*SIZEOF SpriteObject].animSpeed, 1 - mov casinoSprites[6*SIZEOF SpriteObject].interactId, INTERACT_DURAK - mov casinoSprites[6*SIZEOF SpriteObject].promptPtr, OFFSET promptDurak - - ; Sprite 7: Classic Slots 777 (West Arcade 1) - mov casinoSprites[7*SIZEOF SpriteObject].posX, (6 * FP_1) - mov casinoSprites[7*SIZEOF SpriteObject].posY, (8 * FP_1) - mov casinoSprites[7*SIZEOF SpriteObject].baseTexId, 24 - mov casinoSprites[7*SIZEOF SpriteObject].frameCount, 3 - mov casinoSprites[7*SIZEOF SpriteObject].curFrame, 0 - mov casinoSprites[7*SIZEOF SpriteObject].animTimer, 0 - mov casinoSprites[7*SIZEOF SpriteObject].animSpeed, 8 - mov casinoSprites[7*SIZEOF SpriteObject].interactId, INTERACT_SLOTS_777 - mov casinoSprites[7*SIZEOF SpriteObject].promptPtr, OFFSET promptClassicSlot - - ; Sprite 8: CloverPit Slots 5x3 (West Arcade 2) - mov casinoSprites[8*SIZEOF SpriteObject].posX, (6 * FP_1) - mov casinoSprites[8*SIZEOF SpriteObject].posY, (11 * FP_1) - mov casinoSprites[8*SIZEOF SpriteObject].baseTexId, 24 - mov casinoSprites[8*SIZEOF SpriteObject].frameCount, 3 - mov casinoSprites[8*SIZEOF SpriteObject].curFrame, 1 - mov casinoSprites[8*SIZEOF SpriteObject].animTimer, 0 - mov casinoSprites[8*SIZEOF SpriteObject].animSpeed, 8 - mov casinoSprites[8*SIZEOF SpriteObject].interactId, INTERACT_SLOTS_CLOVER - mov casinoSprites[8*SIZEOF SpriteObject].promptPtr, OFFSET promptCloverSlot - - ; Sprite 9: Craps & Dice Table (West Arcade 3) - mov casinoSprites[9*SIZEOF SpriteObject].posX, (6 * FP_1) - mov casinoSprites[9*SIZEOF SpriteObject].posY, (14 * FP_1) - mov casinoSprites[9*SIZEOF SpriteObject].baseTexId, 30 - mov casinoSprites[9*SIZEOF SpriteObject].frameCount, 1 - mov casinoSprites[9*SIZEOF SpriteObject].curFrame, 0 - mov casinoSprites[9*SIZEOF SpriteObject].animTimer, 0 - mov casinoSprites[9*SIZEOF SpriteObject].animSpeed, 1 - mov casinoSprites[9*SIZEOF SpriteObject].interactId, INTERACT_DICE - mov casinoSprites[9*SIZEOF SpriteObject].promptPtr, OFFSET promptDice - - ; Sprite 10: Skulls & Cups Table - mov casinoSprites[10*SIZEOF SpriteObject].posX, (10 * FP_1) - mov casinoSprites[10*SIZEOF SpriteObject].posY, (15 * FP_1) - mov casinoSprites[10*SIZEOF SpriteObject].baseTexId, 30 - mov casinoSprites[10*SIZEOF SpriteObject].frameCount, 1 - mov casinoSprites[10*SIZEOF SpriteObject].curFrame, 0 - mov casinoSprites[10*SIZEOF SpriteObject].animTimer, 0 - mov casinoSprites[10*SIZEOF SpriteObject].animSpeed, 1 - mov casinoSprites[10*SIZEOF SpriteObject].interactId, INTERACT_SKULLS - mov casinoSprites[10*SIZEOF SpriteObject].promptPtr, OFFSET promptSkulls - - ; Sprite 11: Coin Toss Stand - mov casinoSprites[11*SIZEOF SpriteObject].posX, (14 * FP_1) - mov casinoSprites[11*SIZEOF SpriteObject].posY, (15 * FP_1) - mov casinoSprites[11*SIZEOF SpriteObject].baseTexId, 30 - mov casinoSprites[11*SIZEOF SpriteObject].frameCount, 1 - mov casinoSprites[11*SIZEOF SpriteObject].curFrame, 0 - mov casinoSprites[11*SIZEOF SpriteObject].animTimer, 0 - mov casinoSprites[11*SIZEOF SpriteObject].animSpeed, 1 - mov casinoSprites[11*SIZEOF SpriteObject].interactId, INTERACT_COIN - mov casinoSprites[11*SIZEOF SpriteObject].promptPtr, OFFSET promptCoin - - ; Sprite 12: Skill Check Stand - mov casinoSprites[12*SIZEOF SpriteObject].posX, (18 * FP_1) - mov casinoSprites[12*SIZEOF SpriteObject].posY, (15 * FP_1) - mov casinoSprites[12*SIZEOF SpriteObject].baseTexId, 30 - mov casinoSprites[12*SIZEOF SpriteObject].frameCount, 1 - mov casinoSprites[12*SIZEOF SpriteObject].curFrame, 0 - mov casinoSprites[12*SIZEOF SpriteObject].animTimer, 0 - mov casinoSprites[12*SIZEOF SpriteObject].animSpeed, 1 - mov casinoSprites[12*SIZEOF SpriteObject].interactId, INTERACT_SKILL_CHECK - mov casinoSprites[12*SIZEOF SpriteObject].promptPtr, OFFSET promptSkillCheck - - ; Sprite 13: Umamusume Derby Lounge - mov casinoSprites[13*SIZEOF SpriteObject].posX, (22 * FP_1) - mov casinoSprites[13*SIZEOF SpriteObject].posY, (15 * FP_1) - mov casinoSprites[13*SIZEOF SpriteObject].baseTexId, 30 - mov casinoSprites[13*SIZEOF SpriteObject].frameCount, 1 - mov casinoSprites[13*SIZEOF SpriteObject].curFrame, 0 - mov casinoSprites[13*SIZEOF SpriteObject].animTimer, 0 - mov casinoSprites[13*SIZEOF SpriteObject].animSpeed, 1 - mov casinoSprites[13*SIZEOF SpriteObject].interactId, INTERACT_UMAMUSUME - mov casinoSprites[13*SIZEOF SpriteObject].promptPtr, OFFSET promptUmamusume - - ; Sprite 14: Boutique & Shop (East Wing) - mov casinoSprites[14*SIZEOF SpriteObject].posX, (26 * FP_1) - mov casinoSprites[14*SIZEOF SpriteObject].posY, (12 * FP_1) - mov casinoSprites[14*SIZEOF SpriteObject].baseTexId, 32 - mov casinoSprites[14*SIZEOF SpriteObject].frameCount, 1 - mov casinoSprites[14*SIZEOF SpriteObject].curFrame, 0 - mov casinoSprites[14*SIZEOF SpriteObject].animTimer, 0 - mov casinoSprites[14*SIZEOF SpriteObject].animSpeed, 1 - mov casinoSprites[14*SIZEOF SpriteObject].interactId, INTERACT_SHOP - mov casinoSprites[14*SIZEOF SpriteObject].promptPtr, OFFSET promptShop - - ; Sprite 15: Cashier & ATM (East Wing) - mov casinoSprites[15*SIZEOF SpriteObject].posX, (26 * FP_1) - mov casinoSprites[15*SIZEOF SpriteObject].posY, (16 * FP_1) - mov casinoSprites[15*SIZEOF SpriteObject].baseTexId, 33 - mov casinoSprites[15*SIZEOF SpriteObject].frameCount, 1 - mov casinoSprites[15*SIZEOF SpriteObject].curFrame, 0 - mov casinoSprites[15*SIZEOF SpriteObject].animTimer, 0 - mov casinoSprites[15*SIZEOF SpriteObject].animSpeed, 1 - mov casinoSprites[15*SIZEOF SpriteObject].interactId, INTERACT_ATM - mov casinoSprites[15*SIZEOF SpriteObject].promptPtr, OFFSET promptATM - - ; Sprite 16: Player Terminal (East Wing) - mov casinoSprites[16*SIZEOF SpriteObject].posX, (26 * FP_1) - mov casinoSprites[16*SIZEOF SpriteObject].posY, (20 * FP_1) - mov casinoSprites[16*SIZEOF SpriteObject].baseTexId, 33 - mov casinoSprites[16*SIZEOF SpriteObject].frameCount, 1 - mov casinoSprites[16*SIZEOF SpriteObject].curFrame, 0 - mov casinoSprites[16*SIZEOF SpriteObject].animTimer, 0 - mov casinoSprites[16*SIZEOF SpriteObject].animSpeed, 1 - mov casinoSprites[16*SIZEOF SpriteObject].interactId, INTERACT_TERMINAL - mov casinoSprites[16*SIZEOF SpriteObject].promptPtr, OFFSET promptPlayerTerminal - - ; Sprite 17: Buckshot Roulette (South-West) - mov casinoSprites[17*SIZEOF SpriteObject].posX, (12 * FP_1) - mov casinoSprites[17*SIZEOF SpriteObject].posY, (22 * FP_1) - mov casinoSprites[17*SIZEOF SpriteObject].baseTexId, 30 - mov casinoSprites[17*SIZEOF SpriteObject].frameCount, 1 - mov casinoSprites[17*SIZEOF SpriteObject].curFrame, 0 - mov casinoSprites[17*SIZEOF SpriteObject].animTimer, 0 - mov casinoSprites[17*SIZEOF SpriteObject].animSpeed, 1 - mov casinoSprites[17*SIZEOF SpriteObject].interactId, INTERACT_BUCKSHOT - mov casinoSprites[17*SIZEOF SpriteObject].promptPtr, OFFSET promptBuckshot - - ; Sprite 18: Observer Lounge (South-East) - mov casinoSprites[18*SIZEOF SpriteObject].posX, (20 * FP_1) - mov casinoSprites[18*SIZEOF SpriteObject].posY, (22 * FP_1) - mov casinoSprites[18*SIZEOF SpriteObject].baseTexId, 30 - mov casinoSprites[18*SIZEOF SpriteObject].frameCount, 1 - mov casinoSprites[18*SIZEOF SpriteObject].curFrame, 0 - mov casinoSprites[18*SIZEOF SpriteObject].animTimer, 0 - mov casinoSprites[18*SIZEOF SpriteObject].animSpeed, 1 - mov casinoSprites[18*SIZEOF SpriteObject].interactId, INTERACT_OBSERVER - mov casinoSprites[18*SIZEOF SpriteObject].promptPtr, OFFSET promptObserver - - ; Sprite 19: Russian Roulette (Backroom Entrance) - mov casinoSprites[19*SIZEOF SpriteObject].posX, (16 * FP_1) - mov casinoSprites[19*SIZEOF SpriteObject].posY, (25 * FP_1) - mov casinoSprites[19*SIZEOF SpriteObject].baseTexId, 34 - mov casinoSprites[19*SIZEOF SpriteObject].frameCount, 1 - mov casinoSprites[19*SIZEOF SpriteObject].curFrame, 0 - mov casinoSprites[19*SIZEOF SpriteObject].animTimer, 0 - mov casinoSprites[19*SIZEOF SpriteObject].animSpeed, 1 - mov casinoSprites[19*SIZEOF SpriteObject].interactId, INTERACT_RUSSIAN_ROULETTE - mov casinoSprites[19*SIZEOF SpriteObject].promptPtr, OFFSET promptRussianRoulette - - ; Sprite 20: Online Russian Roulette (Backroom Secret Terminal) - mov casinoSprites[20*SIZEOF SpriteObject].posX, (18 * FP_1) - mov casinoSprites[20*SIZEOF SpriteObject].posY, (25 * FP_1) - mov casinoSprites[20*SIZEOF SpriteObject].baseTexId, 34 - mov casinoSprites[20*SIZEOF SpriteObject].frameCount, 1 - mov casinoSprites[20*SIZEOF SpriteObject].curFrame, 0 - mov casinoSprites[20*SIZEOF SpriteObject].animTimer, 0 - mov casinoSprites[20*SIZEOF SpriteObject].animSpeed, 1 - mov casinoSprites[20*SIZEOF SpriteObject].interactId, INTERACT_ONLINE_RR - mov casinoSprites[20*SIZEOF SpriteObject].promptPtr, OFFSET promptOnlineRR - - ; Sprite 21: Hell Tower Portal (South Wing Deep End) - mov casinoSprites[21*SIZEOF SpriteObject].posX, (16 * FP_1 + FP_HALF) - mov casinoSprites[21*SIZEOF SpriteObject].posY, (29 * FP_1) - mov casinoSprites[21*SIZEOF SpriteObject].baseTexId, 4 - mov casinoSprites[21*SIZEOF SpriteObject].frameCount, 1 - mov casinoSprites[21*SIZEOF SpriteObject].curFrame, 0 - mov casinoSprites[21*SIZEOF SpriteObject].animTimer, 0 - mov casinoSprites[21*SIZEOF SpriteObject].animSpeed, 1 - mov casinoSprites[21*SIZEOF SpriteObject].interactId, INTERACT_HELL_TOWER - mov casinoSprites[21*SIZEOF SpriteObject].promptPtr, OFFSET promptHellTower - ret -InitializeCasinoSprites3D ENDP - -include src_graphics\audio_code.inc -include src_graphics\dice_animation.inc -include src_graphics\russian_roulette.inc -include src_graphics\startup_code.inc -include src_graphics\card_table_assets.inc -include src_graphics\poker_evaluator.inc -include src_graphics\native_poker.inc -include src_graphics\native_blackjack.inc -include src_graphics\native_durak.inc -include src_graphics\card_tables_render.inc -include src_graphics\durak_render.inc -include src_graphics\card_table_input.inc -include src_graphics\scene_animation.inc -include src_graphics\native_slots.inc -include src_graphics\native_clover.inc -include src_graphics\native_coin.inc -include src_graphics\graphic_profiles.inc -include src_graphics\city_arrival_scene.inc -include src_graphics\arrival_scene.inc -include src_graphics\merchant_scene.inc -include src_graphics\hall_scene.inc -include src_graphics\npc_mind.inc -include src_graphics\npc_life.inc -include src_graphics\npc_contracts.inc -include src_graphics\native_wheel.inc -include src_graphics\billiards.inc -include src_graphics\buckshot.inc -include src_graphics\russian_table.inc -include src_graphics\unavailable.inc - -; --- Main Loop of the 3D Casino Engine --- -StartCasino3D PROC uses ebx esi edi - call Init3DEngine - test eax, eax - jz engine_shutdown - invoke GetTickCount - mov rngSeed3D, eax - mov previousTick3D, eax -engine_loop: - invoke PeekMessageA, OFFSET msg3D, 0, 0, 0, PM_REMOVE - test eax, eax - jz dispatch_frame - cmp msg3D.message, WM_QUIT - je engine_shutdown - invoke TranslateMessage, OFFSET msg3D - invoke DispatchMessageA, OFFSET msg3D - jmp engine_loop - -dispatch_frame: - invoke GetTickCount - mov frameStart3D, eax - sub eax, previousTick3D - cmp eax, 50 - jbe @F - mov eax, 50 -@@: - mov deltaTime3D, eax - mov eax, frameStart3D - mov previousTick3D, eax - invoke GetForegroundWindow - cmp eax, h3DWnd - jne engine_idle - invoke IsIconic, h3DWnd - test eax, eax - jnz engine_idle - invoke Pressed3D, 7Ah - test eax, eax - jz @F - call ToggleFullscreen3D -@@: - invoke Pressed3D, 1Bh - test eax, eax - jz engine_tick - cmp engineMode, MODE_INTRO - jne @F - call FinishStartup3D - jmp engine_tick -@@: - cmp engineMode, MODE_ARRIVAL - jne @F - call ArrivalEscape3D - jmp engine_tick -@@: - cmp engineMode, MODE_WALK - jne leave_table - xor paused3D, 1 - jmp engine_tick -leave_table: - call CardTableEscape3D - test eax, eax - jnz engine_tick - call TableBusy3D - test eax, eax - jz leave_idle_table - xor paused3D, 1 - call ClearKeys3D - jmp engine_tick -leave_idle_table: - mov paused3D, 0 - mov engineMode, MODE_WALK - call ClearKeys3D - invoke PlayCasinoSound3D, 0, 0, 0 -engine_tick: - cmp paused3D, 0 - jne draw_pause - mov eax, deltaTime3D - add animationClock3D, eax - cmp engineMode, MODE_INTRO - jne check_arrival_mode - call HandleStartupInput3D - cmp engineMode, MODE_INTRO - jne check_arrival_mode - call RenderStartup3D - jmp present_frame -check_arrival_mode: - cmp engineMode, MODE_ARRIVAL - jne check_walk_mode - call HandleArrival3D - cmp engineMode, MODE_WALK - je check_walk_mode - call RenderArrival3D - jmp present_frame -check_walk_mode: - cmp engineMode, MODE_WALK - jne check_slots_mode - call UpdateHall3D - call UpdateCamera3D - call CheckInteractions - call HandlePlayerInput - call UpdateCamera3D - call RenderCeilingAndFloor - call RenderWalls - call PrepareCityDepth3D - call RenderSprites - call RenderHall3D - call RenderHUD - call RenderMinimap - jmp present_frame -check_slots_mode: - cmp engineMode,MODE_CLOVER - jne @F - call HandleNativeClover3D - call RenderNativeClover3D - jmp present_frame -@@: - cmp engineMode,MODE_NPC_DIALOG - jne @F - call HandleNpcDialog3D - call RenderNpcDialog3D - jmp present_frame -@@: - cmp engineMode, MODE_UNAVAILABLE - jne @F - call HandleUnavailable3D - call RenderUnavailable3D - jmp present_frame -@@: - cmp engineMode, MODE_POOL - jne @F - call HandlePool3D - call RenderPool3D - jmp present_frame -@@: - cmp engineMode, MODE_BAR - jne @F - call HandleBar3D - call RenderBar3D - jmp present_frame -@@: - cmp engineMode, MODE_STAIRS - jne @F - call HandleStairs3D - call RenderStairs3D - jmp present_frame -@@: - cmp engineMode, MODE_SLOTS - jne check_bj_mode - call HandleNativeSlots3D - cmp engineMode,MODE_WALK - je check_walk_mode - call RenderNativeSlots3D - jmp present_frame -check_bj_mode: - cmp engineMode, MODE_BLACKJACK - jne check_poker_mode - call HandleNativeBlackjack3D - cmp engineMode, MODE_WALK - je check_walk_mode - call RenderNativeBlackjack3D - jmp present_frame -check_poker_mode: - cmp engineMode, MODE_POKER - jne check_durak_mode - call HandleNativePoker3D - cmp engineMode, MODE_WALK - je check_walk_mode - call RenderNativePoker3D - jmp present_frame -check_durak_mode: - cmp engineMode, MODE_DURAK - jne check_roul_mode - call HandleNativeDurak3D - cmp engineMode, MODE_WALK - je check_walk_mode - call RenderNativeDurak3D - jmp present_frame -check_roul_mode: - cmp engineMode, MODE_ROULETTE - jne check_shop_mode - call HandleNativeWheel3D - call RenderNativeWheel3D - jmp present_frame -check_shop_mode: - cmp engineMode, MODE_SHOP - jne check_atm_mode - call HandleMerchant3D - call RenderMerchant3D - jmp present_frame -check_atm_mode: - cmp engineMode, MODE_ATM - jne check_coin_mode - call HandleATMInput - call RenderATMGame - jmp present_frame -check_coin_mode: - cmp engineMode, MODE_COIN - jne check_dice_mode - call HandleCoinInput - call RenderCoinGame - jmp present_frame -check_dice_mode: - cmp engineMode, MODE_DICE - jne check_skulls_mode - call HandleDiceInput - call RenderDiceGame - jmp present_frame -check_skulls_mode: - cmp engineMode, MODE_SKULLS - jne check_skill_mode - call HandleSkullsInput - call RenderSkullsGame - jmp present_frame -check_skill_mode: - cmp engineMode, MODE_SKILL - jne check_buckshot_mode - call HandleSkillInput - call RenderSkillGame - jmp present_frame -check_buckshot_mode: - cmp engineMode, MODE_BUCKSHOT - jne check_russian_mode - call HandleBuckshot3D - call RenderBuckshot3D - jmp present_frame -check_russian_mode: - cmp engineMode, MODE_RUSSIAN - jne present_frame - call HandleRussianInput3D - call RenderRussianGame3D - jmp present_frame -draw_pause: - invoke DrawBoxBorder, 28, 36, 264, 168, 00151C21h, 00D8BC6Ah, 2 - invoke DrawString8x8, 44, 48, OFFSET textPause3D, 00FFFFFFh - cmp displayFill3D, 0 - je @F - invoke DrawString8x8, 44, 72, OFFSET textDisplayFill3D, 00D8BC6Ah - jmp pause_draw_quality -@@: - invoke DrawString8x8, 44, 72, OFFSET textDisplayFit3D, 00D8BC6Ah -pause_draw_quality: - invoke DrawString8x8, 44, 92, OFFSET textLowSpec3D, 00D8BC6Ah - mov eax, settingsLowSpec - cmp eax, 0 - jne @F - mov edx, OFFSET textLowSpecOff3D - jmp pause_draw_quality_value -@@: - cmp eax, 1 - jne @F - mov edx, OFFSET textLowSpecEco3D - jmp pause_draw_quality_value -@@: - mov edx, OFFSET textLowSpecQuiet3D -pause_draw_quality_value: - invoke DrawString8x8, 208, 92, edx, 00FFFFFFh - invoke DrawString8x8, 44, 112, OFFSET textVolumeKeys3D, 00D8BC6Ah - invoke DrawString8x8, 44, 130, OFFSET textSoundLevel3D, 00BBBBBBh - invoke FormatNumber, settingsVolume, OFFSET hudNumBuffer - invoke DrawString8x8, 124, 130, OFFSET hudNumBuffer, 00FFFFFFh - invoke DrawString8x8, 44, 150, OFFSET textFullscreenKey3D, 00A0A0A0h - invoke DrawString8x8, 44, 170, OFFSET textResume3D, 00D8BC6Ah - invoke DrawString8x8, 44, 188, OFFSET textQuit3D, 00BBBBBBh - invoke Pressed3D, 31h - test eax, eax - jz @F - xor displayFill3D, 1 - call SaveDisplaySettings3D -@@: - invoke Pressed3D, 32h - test eax, eax - jz @F - inc settingsLowSpec - cmp settingsLowSpec, 3 - jb pause_low_spec_saved - mov settingsLowSpec, 0 -pause_low_spec_saved: - call SaveProgress3D -@@: - invoke Pressed3D, 0BBh - test eax, eax - jz @F - cmp settingsVolume, 10 - jae @F - inc settingsVolume - call ApplySoundVolume - call SaveProgress3D -@@: - invoke Pressed3D, 0BDh - test eax, eax - jz @F - mov eax, settingsVolume - test eax, eax - jz @F - dec settingsVolume - call ApplySoundVolume - call SaveProgress3D -@@: - invoke Pressed3D, 51h - test eax, eax - jz @F - call SaveProgress3D - jmp engine_shutdown -present_frame: - mov eax, engineMode - cmp eax, lastPersistMode3D - je @F - cmp eax, MODE_WALK - jne @F - call SaveProgress3D -@@: - mov eax, engineMode - mov lastPersistMode3D, eax - call Present3D - mov mouseClick3D, 0 - lea edi, pressedKeys3D - xor eax, eax - mov ecx, 64 - rep stosd - invoke GetTickCount - sub eax, frameStart3D - mov ecx, 16 - cmp settingsLowSpec, 1 - jne @F - mov ecx, 24 -@@: - cmp settingsLowSpec, 2 - jne @F - mov ecx, 33 -@@: - cmp eax, ecx - jae engine_loop - sub ecx, eax - invoke Sleep, ecx - jmp engine_loop -engine_idle: - invoke Sleep, 50 - jmp engine_loop -engine_shutdown: - call SaveProgress3D - invoke PlayCasinoSound3D, 0, 0, 0 - call FreeRussianAssets3D - call FreeStartupAssets3D - call FreeCardTableAssets3D - call FreeBuckshotAssets3D - call FreeNativeSlots3D - call FreeNativeClover3D - call FreePyramidAssets3D - call FreeArrivalAssets3D - cmp h3DDC, 0 - je @F - invoke ReleaseDC, h3DWnd, h3DDC - mov h3DDC, 0 -@@: - cmp h3DWnd, 0 - je @F - invoke DestroyWindow, h3DWnd - mov h3DWnd, 0 -@@: - ret -StartCasino3D ENDP - -include src_graphics\platform_code.inc - -IFDEF CASINO_ACTION_TEST -include tools\tests\casino_actions_test.inc -ENDIF + +; ============================================================================== +; CASINO 2.5D - MASM32 SOFTWARE RAYCASTER (CP1251) +; Graphical migration; this is not id Software's Doom engine. +; ============================================================================== + +includelib gdi32.lib +includelib winmm.lib + +CreateWindowExA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD +RegisterClassExA PROTO :DWORD +DefWindowProcA PROTO :DWORD,:DWORD,:DWORD,:DWORD +ShowWindow PROTO :DWORD,:DWORD +UpdateWindow PROTO :DWORD +GetDC PROTO :DWORD +ReleaseDC PROTO :DWORD,:DWORD +StretchDIBits PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD +PeekMessageA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD +TranslateMessage PROTO :DWORD +DispatchMessageA PROTO :DWORD +PostQuitMessage PROTO :DWORD +DestroyWindow PROTO :DWORD +SetWindowTextA PROTO :DWORD,:DWORD +SetForegroundWindow PROTO :DWORD +GetConsoleWindow PROTO +GetSystemMetrics PROTO :DWORD +CreateFileA PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD +ReadFile PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD +CloseHandle PROTO :DWORD +GetAsyncKeyState PROTO :DWORD +PlaySoundA PROTO :DWORD,:DWORD,:DWORD +GetModuleFileNameA PROTO :DWORD,:DWORD,:DWORD +CopyFileA PROTO :DWORD,:DWORD,:DWORD +lstrcmpiA PROTO :DWORD,:DWORD +GetFileSize PROTO :DWORD,:DWORD +Sleep PROTO :DWORD +CreateThread PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD +CreateEventA PROTO :DWORD,:DWORD,:DWORD,:DWORD +SetEvent PROTO :DWORD +WaitForSingleObject PROTO :DWORD,:DWORD + +C3D_POINT STRUCT + x dd ? + y dd ? +C3D_POINT ENDS + +C3D_MSG STRUCT + hwnd dd ? + message dd ? + wParam dd ? + lParam dd ? + time dd ? + pt C3D_POINT <> +C3D_MSG ENDS + +C3D_WNDCLASSEX STRUCT + cbSize dd ? + style dd ? + lpfnWndProc dd ? + cbClsExtra dd ? + cbWndExtra dd ? + hInstance dd ? + hIcon dd ? + hCursor dd ? + hbrBackground dd ? + lpszMenuName dd ? + lpszClassName dd ? + hIconSm dd ? +C3D_WNDCLASSEX ENDS + +C3D_BITMAPINFOHEADER STRUCT + biSize dd ? + biWidth dd ? + biHeight dd ? + biPlanes dw ? + biBitCount dw ? + biCompression dd ? + biSizeImage dd ? + biXPelsPerMeter dd ? + biYPelsPerMeter dd ? + biClrUsed dd ? + biClrImportant dd ? +C3D_BITMAPINFOHEADER ENDS + +C3D_BITMAPINFO STRUCT + bmiHeader C3D_BITMAPINFOHEADER <> + bmiColors dd ? +C3D_BITMAPINFO ENDS + +SpriteObject STRUCT + posX dd ? + posY dd ? + baseTexId dd ? + frameCount dd ? + curFrame dd ? + animTimer dd ? + animSpeed dd ? + interactId dd ? + promptPtr dd ? + distSq dd ? +SpriteObject ENDS + +SCREEN_W equ 640 +SCREEN_H equ 480 +HALF_W equ 320 +HALF_H equ 240 +SCREEN_SIZE equ (SCREEN_W * SCREEN_H) +WIN_SCALE equ 1 +WINDOW_W equ (SCREEN_W * WIN_SCALE) +WINDOW_H equ (SCREEN_H * WIN_SCALE) + +FP_1 equ 65536 +FP_HALF equ 32768 +CHROMA_KEY equ 00FF00FFh + +MODE_WALK equ 0 +MODE_SLOTS equ 1 +MODE_BLACKJACK equ 2 +MODE_ROULETTE equ 3 +MODE_SHOP equ 4 +MODE_ATM equ 5 +MODE_COIN equ 6 +MODE_DICE equ 7 +MODE_SKULLS equ 8 +MODE_SKILL equ 9 + +WS_OVERLAPPEDWINDOW equ 00CF0000h +SW_SHOW equ 5 +SW_HIDE equ 0 +PM_REMOVE equ 1 +WM_DESTROY equ 0002h +WM_CLOSE equ 0010h +WM_QUIT equ 0012h +CS_HREDRAW equ 2 +CS_VREDRAW equ 1 +DIB_RGB_COLORS equ 0 +SRCCOPY equ 00CC0020h +INVALID_FILE_HANDLE equ -1 + +include casino3d_data.inc +include font8x8.inc +include src_graphics\platform_data.inc +include src_graphics\casino_actions_data.inc +include src_graphics\audio_data.inc +include src_graphics\startup_data.inc +include src_graphics\card_tables_data.inc +include src_graphics\native_durak_data.inc +include src_graphics\scene_animation_data.inc +include src_graphics\arrival_data.inc +include src_graphics\city_arrival_data.inc +include src_graphics\merchant_data.inc +include src_graphics\hall_data.inc +include src_graphics\npc_mind_data.inc +include src_graphics\npc_life_data.inc +include src_graphics\native_wheel_data.inc +include src_graphics\billiards_data.inc +include src_graphics\buckshot_data.inc +include src_graphics\russian_view_data.inc +include src_graphics\unavailable_data.inc +include src_graphics\native_slots_data.inc +include src_graphics\native_clover_data.inc +include src_graphics\native_coin_data.inc + +.data +ALIGN 4 +h3DInst dd 0 +h3DWnd dd 0 +h3DDC dd 0 +hCasinoConsole dd 0 + +ALIGN 4 +hRaycastThread dd 0 +hRaycastStartEvent dd 0 +hRaycastDoneEvent dd 0 +bRaycastQuit dd 0 +raycastThreadId dd 0 + +bmi3D C3D_BITMAPINFO <> +msg3D C3D_MSG <> +wc3D C3D_WNDCLASSEX <> + +sz3DClassName db "Casino3DRetroClass",0 +sz3DWindowTitle db 192,241,241,229,236,225,235,229,240,32,202,224,231,232,237,238,32,45,32,50,46,53,68,0 +szTexturesRelPath db "assets\textures\casino3d-hd.bin",0 +szTexturesFullPath db 260 dup(0) + + +playerX dd (16 * FP_1 + FP_HALF) +playerY dd (16 * FP_1 + FP_HALF) +playerAngle dd 384 +playerDirX dd 0 +playerDirY dd -FP_1 +playerPlaneX dd (FP_1 * 66 / 100) +playerPlaneY dd 0 + +engineMode dd 0 +interactTargetId dd 0 +interactPromptPtr dd 0 +dancerLuckBuff dd 0 +flashTimer dd 0 +flashMessage db 128 dup(0) + +promptDancer db "[E] ÊÀÁÀÐÅ - ×ÀÅÂÛÅ $100",0 +promptBlackjack db "[E] ÁËÝÊÄÆÅÊ (21)",0 +promptPoker db 91,69,93,32,207,206,202,197,208,32,40,210,197,213,192,209,209,202,200,201,32,213,206,203,196,197,204,41,0 +promptDurak db "[E] ÊÀÐÒÛ: ÏÎÄÊÈÄÍÎÉ ÄÓÐÀÊ",0 +promptCasinoRoulette db "[E] ÅÂÐÎÏÅÉÑÊÀß ÐÓËÅÒÊÀ",0 +promptClassicSlot db "[E] ÊËÀÑÑÈ×ÅÑÊÈÅ ÑËÎÒÛ 777",0 +promptCloverSlot db "[E] ÑËÎÒÛ CLOVERPIT (5x3)",0 +promptDice db 91,69,93,32,200,195,208,192,32,194,32,202,206,209,210,200,0 +promptSkulls db "[E] ÍÀϨÐÑÒÊÈ (×ÅÐÅÏÀ)",0 +promptCoin db "[E] ÌÎÍÅÒÊÀ (ÎШË/ÐÅØÊÀ)",0 +promptSkillCheck db "[E] ÒÐÅÍÈÐÎÂÊÀ ÐÅÀÊÖÈÈ",0 +promptBuckshot db 91,69,93,32,193,192,202,216,206,210,32,208,211,203,197,210,202,192,0 +promptRussianRoulette db "[E] ÐÓÑÑÊÀß ÐÓËÅÒÊÀ (VIP)",0 +promptOnlineRR db "[E] ÑÅÒÅÂÀß ÐÓËÅÒÊÀ (NET)",0 +promptUmamusume db "[E] ÑÊÀ×ÊÈ ÓÌÀÌÓÑÓÌÝ",0 +promptHellTower db "[E] ÁÀØÍß ÀÄÀ (10 ÝÒÀÆÅÉ)",0 +promptShop db "[E] ÁÓÒÈÊ È ÒÀËÈÑÌÀÍÛ",0 +promptATM db "[E] ÁÀÍÊÎÌÀÒ È ÁÀËÀÍÑ",0 +promptPlayerTerminal db "[E] ÒÅÐÌÈÍÀË: ÑÒÀÒÛ È À×ÈÂÊÈ",0 +promptObserver db "[E] ÐÅÆÈÌ ÍÀÁËÞÄÀÒÅËß (ÈÈ)",0 + +szTitleBlackjack db 202,192,199,200,202,32,51,68,32,45,32,193,203,221,202,196,198,197,202,32,40,50,49,41,0 +szTitlePoker db 202,192,199,200,202,32,51,68,32,45,32,207,206,202,197,208,32,40,210,197,213,192,209,209,202,200,201,32,213,206,203,196 + db 197,204,41,0 +szTitleDurak db 202,192,199,200,202,32,51,68,32,45,32,207,197,208,197,194,206,196,205,206,201,32,196,211,208,192,202,0 +szTitleCasinoRoulette db 202,192,199,200,202,32,51,68,32,45,32,197,194,208,206,207,197,201,209,202,192,223,32,208,211,203,197,210,202,192,0 +szTitleClassicSlot db 202,192,199,200,202,32,51,68,32,45,32,192,194,210,206,204,192,210,32,55,55,55,0 +szTitleCloverSlot db 202,192,199,200,202,32,51,68,32,45,32,202,203,197,194,197,208,205,192,223,32,223,204,192,32,40,53,120,51,41,0 +szTitleDice db 202,192,199,200,202,32,51,68,32,45,32,200,195,208,192,32,194,32,202,206,209,210,200,0 +szTitleSkulls db 202,192,199,200,202,32,51,68,32,45,32,205,192,207,168,208,209,210,202,200,0 +szTitleCoin db 202,192,199,200,202,32,51,68,32,45,32,204,206,205,197,210,202,192,32,40,206,208,168,203,47,208,197,216,202,192,41,0 +szTitleSkillCheck db 202,192,199,200,202,32,51,68,32,45,32,207,208,206,194,197,208,202,192,32,205,192,194,219,202,192,0 +szTitleBuckshot db 202,192,199,200,202,32,51,68,32,45,32,193,192,202,216,206,210,32,208,211,203,197,210,202,192,0 +szTitleRussianRoulette db 202,192,199,200,202,32,51,68,32,45,32,208,211,209,209,202,192,223,32,208,211,203,197,210,202,192,0 +szTitleOnlineRR db 202,192,199,200,202,32,51,68,32,45,32,209,197,210,197,194,192,223,32,208,211,209,209,202,192,223,32,208,211,203,197,210 + db 202,192,0 +szTitleUmamusume db 202,192,199,200,202,32,51,68,32,45,32,195,206,205,202,200,32,211,204,192,204,211,209,211,204,197,0 +szTitleHellTower db 202,192,199,200,202,32,51,68,32,45,32,192,196,209,202,192,223,32,193,192,216,205,223,0 +szTitleShop db 202,192,199,200,202,32,51,68,32,45,32,202,192,208,210,219,32,200,32,210,192,203,200,209,204,192,205,219,0 +szTitleATM db 202,192,199,200,202,32,51,68,32,45,32,193,192,205,202,206,204,192,210,0 +szTitleTerminal db 202,192,199,200,202,32,51,68,32,45,32,203,206,202,192,203,220,205,219,197,32,207,208,206,212,200,203,200,0 +szTitleObserver db 202,192,199,200,202,32,51,68,32,45,32,205,192,193,203,222,196,192,210,197,203,220,32,40,200,200,41,0 +textCabinetFooter db "[ ÂÛÕÎÄ: ÂÂÅÄÈÒÅ 0 / ÂÛÁÅÐÈÒÅ 'N' ÄËß ÂÎÇÂÐÀÒÀ  ÇÀË ]",0 + +msgDancerTipped db "Âû áðîñèëè $100 òàíöîâùèöå! ÓÄÀ×À ÀÊÒÈÂÈÐÎÂÀÍÀ!",0 +msgNeedMoney db "Íåäîñòàòî÷íî äåíåã â êîøåëüêå!",0 +statusHUDFormat db "ÁÀÍÊÐÎËË: $",0 +targetHUDFormat db " ÖÅËÜ: $",0 +luckHUDFormat db " ÓÄÀ×À: +",0 +controlsHUD db "WASD/Ñòðåëêè: Õîäüáà | E: Äåéñòâèå | ESC: Ìåíþ",0 + +NUM_SPRITES equ 22 + +INTERACT_NONE equ 0 +INTERACT_BLACKJACK equ 1 +INTERACT_POKER equ 2 +INTERACT_SLOTS_777 equ 3 +INTERACT_ROULETTE equ 4 +INTERACT_SKULLS equ 5 +INTERACT_SHOP equ 6 +INTERACT_ATM equ 7 +INTERACT_DANCER equ 8 +INTERACT_HELL_TOWER equ 9 +INTERACT_DURAK equ 10 +INTERACT_BUCKSHOT equ 11 +INTERACT_COIN equ 12 +INTERACT_DICE equ 13 +INTERACT_SLOTS_CLOVER equ 14 +INTERACT_UMAMUSUME equ 15 +INTERACT_OBSERVER equ 16 +INTERACT_TERMINAL equ 17 +INTERACT_ONLINE_RR equ 18 +INTERACT_RUSSIAN_ROULETTE equ 19 +INTERACT_SKILL_CHECK equ 20 +ALIGN 4 +casinoSprites SpriteObject NUM_SPRITES dup(<>) +sortedSprites dd NUM_SPRITES dup(0) + +rowDistTable dd 120 dup(0) +rngSeed3D dd 12345678h + +slotBet dd 50 +slotReel1 dd 0 +slotReel2 dd 1 +slotReel3 dd 2 +slotSpinState dd 0 +slotSpinTimer dd 0 +slotWinAmount dd 0 +slotWinMsg db 64 dup(0) + +bjState dd 0 +bjBet dd 100 +bjPlayerCards dd 10 dup(0) +bjPlayerCardCount dd 0 +bjPlayerScore dd 0 +bjDealerCards dd 10 dup(0) +bjDealerCardCount dd 0 +bjDealerScore dd 0 +bjDealerHideHole dd 1 +bjOutcomeMsg db 64 dup(0) + +roulState dd 0 +roulBetType dd 1 +roulBetAmount dd 100 +roulWheelAngle dd 0 +roulBallAngle dd 0 +roulSpinTimer dd 0 +roulWinningNum dd 0 +roulPayout dd 0 +roulOutcomeMsg db 64 dup(0) + +coinRxAnimTable db 26, 22, 16, 6, 16, 22, 26, 22, 16, 6 + +; --- Native 2.5D Coin Flip --- +coin3d_bet dd 50 +coin3d_choice dd 1 ; 1 = Îð¸ë, 2 = Ðåøêà +coin3d_state dd 0 ; 0 = Idle, 1 = Flipping, 2 = Result +coin3d_timer dd 0 +coin3d_result dd 1 ; 1 = Îð¸ë, 2 = Ðåøêà +coin3d_streak dd 0 +coin3d_win dd 0 + +textCoinTitle db "* * * Ç Î Ë Î Ò À ß Ì Î Í Å Ò À * * *",0 +textCoinHeads db "ÎШË",0 +textCoinTails db "ÐÅØÊÀ",0 +textCoinSide1 db "[1] ÎШË",0 +textCoinSide2 db "[2] ÐÅØÊÀ",0 +textCoinFlipping db "ÌÎÍÅÒÀ  ÏÎ˨ÒÅ...",0 +textCoinWin db "ÏÎÁÅÄÀ: +$",0 +textCoinLose db "ÍÅ ÓÃÀÄÀËÈ!",0 +textCoinStreakFmt db "ÑÅÐÈß ÏÎÁÅÄ: x",0 +textCoinSelected db "ÂÛÁÐÀÍÎ",0 +textCoinKey1 db "[1] ÎШË",0 +textCoinKey2 db "[2] ÐÅØÊÀ",0 +textCoinKeySpace db "[SPACE]",0 + +; --- Native 2.5D Dice Game --- +dice3d_bet dd 50 +dice3d_choice dd 1 ; 1 = ׸ò, 2 = Íå÷åò +dice3d_state dd 0 ; 0 = Idle, 1 = Rolling, 2 = Result +dice3d_timer dd 0 +dice3d_val1 dd 4 +dice3d_val2 dd 6 +dice3d_sum dd 10 +dice3d_win dd 0 + +textDiceTitle db 200,195,208,192,32,194,32,202,206,209,210,200,0 +textDiceEven db "[1] רÒ",0 +textDiceOdd db "[2] ÍÅ×ÅÒ",0 +textDiceEvenNums db "2 4 6 ...",0 +textDiceOddNums db "3 5 7 ...",0 +textDiceSumHdr db "ÑÓÌÌÀ: ",0 +textDicePlus db " + ",0 +textDiceEqual db " = ",0 +textDiceEvenResult db " (רÒ)",0 +textDiceOddResult db " (ÍÅ×ÅÒ)",0 +textDiceRolling db "ÊÎÑÒÈ ËÅÒßÒ ÏÎ ÑÓÊÍÓ...",0 +textDiceWin db "ÂÛÈÃÐÛØ: +$",0 +textDiceWinMult db "! (x2)",0 +textDiceLose db "ÏÐÎÈÃÐÛØ!",0 +textDiceKey1 db "[1] רÒ",0 +textDiceKey2 db "[2] ÍÅ×ÅÒ",0 +textDiceKeySpace db "[SPACE]",0 + +; --- Native 2.5D Skulls Game --- +skulls3d_bet dd 50 +skulls3d_state dd 0 ; 0 = Idle, 1 = Show ball, 2 = Shuffle, 3 = Pick, 4 = Reveal +skulls3d_timer dd 0 +skulls3d_ballPos dd 1 ; 0, 1, 2 +skulls3d_choice dd 1 ; 0, 1, 2 +skulls3d_win dd 0 +skulls3d_swapPair0 dd 0 +skulls3d_swapPair1 dd 1 +skulls3d_swapPair2 dd 2 +skulls3d_cup0 dd 0 +skulls3d_cup1 dd 1 +skulls3d_cup2 dd 2 + +textSkullsTitle db "* * * Í À Ï ¨ Ð Ñ Ò Ê È * * *",0 +textSkullsPhase0 db "ÄÅËÀÉ ÑÒÀÂÊÓ È ÆÌÈ [ÏÐÎÁÅË]",0 +textSkullsPhase1 db "ÑÌÎÒÐÈ, ÃÄÅ ÇÎËÎÒÎÉ ØÀÐ...",0 +textSkullsPhase2 db "ÊÐÓ×Ó, ÂÅÐ×Ó, ÇÀÏÓÒÀÒÜ ÕÎ×Ó...",0 +textSkullsPhase3 db "ÃÄÅ ØÀÐ? ÂÛÁÈÐÀÉ: [1], [2] ÈËÈ [3]!",0 +textSkullsWin db "ÂÛÈÃÐÛØ: +$",0 +textSkullsWinMult db "! (x3) ÂÛ ÓÃÀÄÀËÈ!",0 +textSkullsLose db "ÌÈÌÎ! ØÀÐ ÁÛË Â ÄÐÓÃÎÌ ÌÅÑÒÅ!",0 +textSkullsAgain db "[ÏÐÎÁÅË] - ÑÛÃÐÀÒÜ ÅÙ¨ ÐÀÇ",0 +textSkullsKey1 db "[1]",0 +textSkullsKey2 db "[2]",0 +textSkullsKey3 db "[3]",0 +textSkullsKeySpace db "[SPACE] ÑÒÀÐÒ",0 + +; --- Native 2.5D Skill Check (Dead by Daylight Survivor Check) --- +skill3d_bet dd 50 +skill3d_state dd 0 ; 0=Ready, 1=Active, 2=Hit Result, 3=Miss Result, 4=Escaped, 5=Defeated +skill3d_timer dd 0 +skill3d_needle dd 55 ; Needle X (52..268) +skill3d_speed dd 4 +skill3d_dir dd 1 ; 1=Right, -1=Left +skill3d_zone_start dd 140 +skill3d_zone_width dd 48 +skill3d_great_start dd 176 +skill3d_great_width dd 12 +skill3d_hits dd 0 +skill3d_misses dd 0 +skill3d_last_result dd 0 +skill3d_win_amount dd 0 + +textSkillTitle db 61,61,61,32,207,208,206,194,197,208,202,192,32,205,192,194,219,202,192,32,61,61,61,0 +textSkillHitsHdr db "ÕÈÒ: ",0 +textSkillMissHdr db "ÏÐÎÌÀÕ: ",0 +textSkillReadyMsg db "ÍÀÆÌÈÒÅ [ÏÐÎÁÅË] ÄËß ÑÒÀÐÒÀ",0 +textSkillPrompt db "ÍÀÆÌÈÒÅ [ÏÐÎÁÅË]  ÇÎÍÅ!",0 +textSkillHitMsg db "ÕÈÒ! ÒÎ×ÍÎÅ ÏÎÏÀÄÀÍÈÅ!",0 +textSkillGreatMsg db 206,210,203,200,215,205,206,33,32,43,193,206,205,211,209,33,0 +textSkillMissMsg db "ÏÐÎÌÀÕ! ÒÐÅÂÎÃÀ!",0 +textSkillEscape db "ÏÎÁÅà ÓÑÏÅØÅÍ! ÂÛÈÃÐÛØ: +$",0 +textSkillLost db "ÂÛ ÏÎÉÌÀÍÛ! ÏÐÎÈÃÐÛØ ÑÒÀÂÊÈ!",0 +textSkillKeySpace db "[SPACE] ÐÅÀÊÖÈß",0 +textSkillKeyBet db "[ÂÂÅÐÕ/ÂÍÈÇ]",0 + +; --- Shared UI Strings --- +textKeyEsc db "[ESC]",0 +textBankPrompt db "ÁÀÍÊ: $",0 +textBetPrompt db "ÑÒÀÂÊÀ: $",0 +textBetHint db " [W/S]",0 + +shopMsg db 128 dup(0) +atmMsg db 128 dup(0) + +strWin db "ÏÎÁÅÄÀ! +$",0 +strLose db "ÏÐÎÈÃÐÛØ",0 +strJackpot db "ÄÆÅÊÏÎÒ! +$",0 +strPush db 205,200,215,220,223,0 +strDealerBust db "ÄÈËÅÐ ÏÅÐÅÁÐÀË! ÏÎÁÅÄÀ! +$",0 +strPlayerBust db "ÏÅÐÅÁÎÐ (>21)! ÏÐÎÈÃÐÛØ",0 + +sym7 db " 777 ",0 +symBar db " BAR ",0 +symBell db 32,199,194,206,205,0 +symCherry db 194,200,216,205,223,0 +symClover db 202,203,197,194,197,208,0 +symGem db 192,203,204,192,199,0 +symCrown db 202,206,208,206,205,192,0 + +cardRankStr db "A ",0,"2 ",0,"3 ",0,"4 ",0,"5 ",0,"6 ",0,"7 ",0,"8 ",0,"9 ",0,"10",0,"J ",0,"Q ",0,"K ",0 + +.data? +ALIGN 4 +screenBuffer dd SCREEN_SIZE dup(?) +ALIGN 4 +zBuffer dd SCREEN_W dup(?) +ALIGN 4 +texturesBuffer dd (104 * 128 * 128) dup(?) + +hudNumBuffer db 32 dup(?) + +.code + +; --- 3D Window Procedure --- +Casino3DWndProc PROC hwnd:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD + invoke WindowEvents3D, hwnd, uMsg, wParam, lParam + ret +Casino3DWndProc ENDP + +; --- Random Generator --- +RandomRange3D PROC maxVal:DWORD + mov eax, rngSeed3D + imul eax, 1103515245 + add eax, 12345 + mov rngSeed3D, eax + shr eax, 16 + and eax, 7FFFh + xor edx, edx + div maxVal + mov eax, edx + ret +RandomRange3D ENDP + +; --- Copy String --- +CopyString3D PROC src:DWORD, dst:DWORD + push esi + push edi + mov esi, src + mov edi, dst +@@: + mov al, [esi] + mov [edi], al + test al, al + jz @F + inc esi + inc edi + jmp @B +@@: + pop edi + pop esi + ret +CopyString3D ENDP + +; --- Format Number to Decimal String --- +FormatNumber PROC num:DWORD, buf:DWORD + push ebx + push esi + push edi + mov eax, num + mov edi, buf + test eax, eax + jns fn_pos + mov BYTE PTR [edi], '-' + inc edi + neg eax +fn_pos: + mov ebx, 10 + push 0 +fn_div: + xor edx, edx + div ebx + add dl, '0' + push edx + test eax, eax + jnz fn_div +fn_pop: + pop eax + test al, al + jz fn_done + mov [edi], al + inc edi + jmp fn_pop +fn_done: + mov BYTE PTR [edi], 0 + pop edi + pop esi + pop ebx + ret +FormatNumber ENDP + +; --- Fast 2D Drawing Primitives --- +DrawBox PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD + +DrawPixel PROC x:DWORD, y:DWORD, color:DWORD + invoke DrawBox, x, y, 1, 1, color + ret +DrawPixel ENDP + +DrawBox PROC x:DWORD, y:DWORD, w:DWORD, h:DWORD, color:DWORD + shl x, 1 + shl y, 1 + shl w, 1 + shl h, 1 + push ebx + push esi + push edi + mov edi, y +box_row_loop: + mov eax, y + add eax, h + cmp edi, eax + jge box_done + cmp edi, 0 + jl next_box_row + cmp edi, SCREEN_H + jge box_done + + mov esi, x +box_col_loop: + mov eax, x + add eax, w + cmp esi, eax + jge next_box_row + cmp esi, 0 + jl next_box_col + cmp esi, SCREEN_W + jge next_box_row + + mov ecx, edi + imul ecx, SCREEN_W + add ecx, esi + mov edx, color + mov [screenBuffer + ecx*4], edx + +next_box_col: + inc esi + jmp box_col_loop + +next_box_row: + inc edi + jmp box_row_loop + +box_done: + pop edi + pop esi + pop ebx + ret +DrawBox ENDP + +DrawBoxBorder PROC uses ebx x:DWORD, y:DWORD, w:DWORD, h:DWORD, fillColor:DWORD, borderColor:DWORD, bWidth:DWORD + invoke DrawBox, x, y, w, h, borderColor + mov eax, x + add eax, bWidth + mov edx, y + add edx, bWidth + mov ecx, w + sub ecx, bWidth + sub ecx, bWidth + mov ebx, h + sub ebx, bWidth + sub ebx, bWidth + invoke DrawBox, eax, edx, ecx, ebx, fillColor + ret +DrawBoxBorder ENDP + +DrawCircle PROC cxVal:DWORD, cyVal:DWORD, radius:DWORD, color:DWORD + push ebx + push esi + push edi + mov eax, radius + neg eax + mov edi, eax +circ_y: + cmp edi, radius + jg circ_done + mov eax, radius + neg eax + mov esi, eax +circ_x: + cmp esi, radius + jg next_circ_y + + mov eax, esi + imul eax, eax + mov ebx, edi + imul ebx, ebx + add eax, ebx + mov edx, radius + imul edx, edx + cmp eax, edx + jg next_circ_x + + mov eax, cxVal + add eax, esi + mov ecx, cyVal + add ecx, edi + invoke DrawPixel, eax, ecx, color + +next_circ_x: + inc esi + jmp circ_x +next_circ_y: + inc edi + jmp circ_y +circ_done: + pop edi + pop esi + pop ebx + ret +DrawCircle ENDP + +DrawChar8x8 PROC uses ebx esi edi x:DWORD, y:DWORD, chVal:DWORD, color:DWORD + local column:DWORD + mov eax, chVal + and eax, 255 + lea esi, [font8x8 + eax*8] + xor edi, edi +glyph_row: + movzx ebx, BYTE PTR [esi+edi] + mov column, 0 +glyph_col: + test ebx, 80h + jz glyph_next + mov eax, x + add eax, column + mov edx, y + add edx, edi + invoke DrawPixel, eax, edx, color +glyph_next: + shl ebx, 1 + inc column + cmp column, 8 + jl glyph_col + inc edi + cmp edi, 8 + jl glyph_row + ret +DrawChar8x8 ENDP + +DrawString8x8 PROC x:DWORD, y:DWORD, strPtr:DWORD, color:DWORD + push ebx + push esi + mov esi, strPtr + mov ebx, x +str_loop: + movzx eax, BYTE PTR [esi] + test al, al + jz str_done + invoke DrawChar8x8, ebx, y, eax, color + add ebx, 8 + inc esi + jmp str_loop +str_done: + pop esi + pop ebx + ret +DrawString8x8 ENDP + +; --- True 3D Perspective Floor & Ceiling Rendering --- + +; --- DDA Raycasting Walls --- +RenderWallsRange PROC colStart:DWORD, colLimit:DWORD + local col:DWORD + local originalStart:DWORD + local camX:DWORD + local rayDirX:DWORD + local rayDirY:DWORD + local mapX:DWORD + local mapY:DWORD + local deltaDistX:DWORD + local deltaDistY:DWORD + local stepX:DWORD + local stepY:DWORD + local sideDistX:DWORD + local sideDistY:DWORD + local side:DWORD + local perpWallDist:DWORD + local lineH:DWORD + local drawStart:DWORD + local drawEnd:DWORD + local wallHit:DWORD + local texX:DWORD + local texXHD:DWORD + local pixelMaterial:DWORD + local texId:DWORD + local shade:DWORD + + push ebx + push esi + push edi + + mov eax, playerAngle + and eax, 511 + mov ebx, [tableCos + eax*4] + mov playerDirX, ebx + mov ebx, [tableSin + eax*4] + mov playerDirY, ebx + + mov eax, ebx + imul eax, -66 + cdq + mov ecx, 100 + idiv ecx + mov playerPlaneX, eax + + mov eax, playerDirX + imul eax, 66 + cdq + idiv ecx + mov playerPlaneY, eax + + mov eax, colStart + mov col, eax +col_loop: + mov eax, colLimit + cmp col, eax + jge walls_done + + mov eax, col + shl eax, 1 + sub eax, SCREEN_W + imul eax, FP_1 + cdq + mov ecx, SCREEN_W + idiv ecx + mov camX, eax + + mov eax, playerPlaneX + imul camX + shrd eax, edx, 16 + add eax, playerDirX + mov rayDirX, eax + + mov eax, playerPlaneY + imul camX + shrd eax, edx, 16 + add eax, playerDirY + mov rayDirY, eax + + mov eax, playerX + sar eax, 16 + mov mapX, eax + mov eax, playerY + sar eax, 16 + mov mapY, eax + + mov eax, rayDirX + test eax, eax + jnz calc_delta_x + mov deltaDistX, 7FFFFFFFh + jmp calc_delta_y +calc_delta_x: + test eax, eax + jns @F + neg eax +@@: + mov ebx, eax + cmp ebx, 4 + jbe delta_x_clamp + xor eax, eax + mov edx, 1 + div ebx + mov deltaDistX, eax + jmp calc_delta_y +delta_x_clamp: + mov deltaDistX, 7FFFFFFFh + +calc_delta_y: + mov eax, rayDirY + test eax, eax + jnz calc_delta_y_ok + mov deltaDistY, 7FFFFFFFh + jmp check_step +calc_delta_y_ok: + test eax, eax + jns @F + neg eax +@@: + mov ebx, eax + cmp ebx, 4 + jbe delta_y_clamp + xor eax, eax + mov edx, 1 + div ebx + mov deltaDistY, eax + jmp check_step +delta_y_clamp: + mov deltaDistY, 7FFFFFFFh + +check_step: + cmp rayDirX, 0 + jge step_x_pos + mov stepX, -1 + mov eax, playerX + mov edx, mapX + shl edx, 16 + sub eax, edx + imul deltaDistX + shrd eax, edx, 16 + mov sideDistX, eax + jmp check_step_y +step_x_pos: + mov stepX, 1 + mov eax, mapX + inc eax + shl eax, 16 + sub eax, playerX + imul deltaDistX + shrd eax, edx, 16 + mov sideDistX, eax + +check_step_y: + cmp rayDirY, 0 + jge step_y_pos + mov stepY, -1 + mov eax, playerY + mov edx, mapY + shl edx, 16 + sub eax, edx + imul deltaDistY + shrd eax, edx, 16 + mov sideDistY, eax + jmp dda_start +step_y_pos: + mov stepY, 1 + mov eax, mapY + inc eax + shl eax, 16 + sub eax, playerY + imul deltaDistY + shrd eax, edx, 16 + mov sideDistY, eax + +dda_start: + xor ecx, ecx +dda_step_loop: + inc ecx + cmp ecx, 64 + jge wall_map_boundary + + mov eax, sideDistX + cmp eax, sideDistY + jge step_in_y + + mov eax, deltaDistX + add sideDistX, eax + mov eax, stepX + add mapX, eax + mov side, 0 + jmp check_tile + +step_in_y: + mov eax, deltaDistY + add sideDistY, eax + mov eax, stepY + add mapY, eax + mov side, 1 + +check_tile: + cmp mapX, 0 + jl wall_map_boundary + cmp mapX, MAP_WIDTH + jge wall_map_boundary + cmp mapY, 0 + jl wall_map_boundary + cmp mapY, MAP_HEIGHT + jge wall_map_boundary + + mov eax, mapY + shl eax, 5 + add eax, mapX + mov edx, worldMap3D + movzx eax, BYTE PTR [edx + eax] + test eax, eax + jnz hit_wall + jmp dda_step_loop + +wall_map_boundary: + cmp outdoorRender3D, 0 + je hit_wall + mov eax, col + mov zBuffer[eax*4], 7FFFFFFFh + jmp next_col + +hit_wall: + cmp side, 0 + jne perp_y + mov eax, sideDistX + sub eax, deltaDistX + mov perpWallDist, eax + jmp perp_done +perp_y: + mov eax, sideDistY + sub eax, deltaDistY + mov perpWallDist, eax + +perp_done: + cmp perpWallDist, 2048 + jge @F + mov perpWallDist, 2048 +@@: + mov eax, col + mov edx, perpWallDist + mov [zBuffer + eax*4], edx + + ; Unit projection is shared by indoor room height and outdoor storeys. + mov eax, SCREEN_H + imul eax, FP_1 + cdq + idiv perpWallDist + mov lineH, eax + + mov eax, lineH + imul viewEye3D + shrd eax, edx, 16 + add eax, viewHorizon3D + mov drawEnd, eax + mov ebx, lineH + mov eax, viewCeiling3D + cmp outdoorRender3D, 0 + je @F + mov eax, CITY_STOREY_HEIGHT +@@: + imul ebx + shrd eax, edx, 16 + mov ebx, eax + mov lineH, ebx + mov eax, drawEnd + sub eax, ebx + mov drawStart, eax + cmp outdoorRender3D, 0 + je wall_store_original_start + ; Floor height is independent of storey height. + mov eax, drawEnd + sub eax, lineH + mov drawStart, eax + mov eax, mapY + shl eax, 5 + add eax, mapX + mov edx, worldMap3D + movzx eax, BYTE PTR [edx+eax] +wall_exterior_tall: + ; Roof projection and texture sampling use the same storey count. + mov eax, lineH + imul eax, CITY_BUILDING_STOREYS-1 + sub drawStart, eax + mov eax, lineH + imul eax, CITY_BUILDING_STOREYS + mov lineH, eax +wall_store_original_start: + mov eax, drawStart + mov originalStart, eax + + cmp side, 0 + jne hit_side_y + mov eax, perpWallDist + imul rayDirY + shrd eax, edx, 16 + add eax, playerY + mov wallHit, eax + jmp calc_tex_x +hit_side_y: + mov eax, perpWallDist + imul rayDirX + shrd eax, edx, 16 + add eax, playerX + mov wallHit, eax + +calc_tex_x: + ; MASK WITH 0FFFFh to prevent texture scrambling! + mov eax, wallHit + and eax, 0FFFFh + mov texXHD, eax + shr eax, 9 + and eax, 127 + mov texX, eax + + cmp side, 0 + jne @F + cmp rayDirX, 0 + jle @F + mov eax, 127 + sub eax, texX + mov texX, eax + xor texXHD, 0FFFFh +@@: + cmp side, 1 + jne select_tex + cmp rayDirY, 0 + jge select_tex + mov eax, 127 + sub eax, texX + mov texX, eax + xor texXHD, 0FFFFh + +select_tex: + mov eax, mapY + shl eax, 5 + add eax, mapX + mov edx, worldMap3D + movzx eax, BYTE PTR [edx + eax] + mov texId, eax + cmp texId, 0 + jne @F + mov texId, 1 +@@: + + mov eax, perpWallDist + shr eax, 13 + mov edx, 256 + sub edx, eax + cmp edx, 75 + jge @F + mov edx, 75 +@@: + cmp side, 1 + jne @F + imul edx, 3 + shr edx, 2 +@@: + mov shade, edx + + cmp drawStart, 0 + jge @F + mov drawStart, 0 +@@: + cmp drawEnd, SCREEN_H + jl @F + mov drawEnd, SCREEN_H - 1 +@@: + + mov eax, lineH + cmp eax, 1 + jge @F + mov eax, 1 + mov lineH, eax +@@: + + mov eax, 128 * FP_1 + cdq + idiv lineH + mov esi, eax ; stepY + + mov eax, drawStart + sub eax, originalStart + imul eax, esi + mov edi, eax ; texPos + + mov ecx, drawStart +draw_stripe_loop: + cmp ecx, drawEnd + jg next_col + + mov eax, edi + shr eax, 16 + and eax, 127 + mov edx, texId + cmp outdoorRender3D, 0 + je wall_sample_material + imul eax, CITY_BUILDING_STOREYS + cmp eax, 128*(CITY_BUILDING_STOREYS-1) + jae wall_lower_storey + push eax + shr eax, 7 + add eax, mapX + add eax, mapY + xor edx, edx + mov ebx, 3 + div ebx + add edx, 65 + pop eax + and eax, 127 + jmp wall_sample_material +wall_lower_storey: + sub eax, 128*(CITY_BUILDING_STOREYS-1) +wall_sample_material: + mov pixelMaterial, edx + cmp outdoorRender3D, 0 + je wall_sample_indoor_hd + cmp hallCityDetail3D.pixels, 0 + je wall_sample_standard + cmp edx, 57 + jb wall_sample_standard + cmp edx, 72 + ja wall_sample_standard + cmp perpWallDist, 6*FP_1 + ja wall_sample_standard + ; Preserve subtexel detail near facades; retain the 128px mip at distance. + push edx + mov eax, edi + shr eax, 15 + imul eax, CITY_BUILDING_STOREYS + and eax, 255 + shl eax, 8 + mov ebx, texXHD + shr ebx, 8 + add eax, ebx + pop edx + sub edx, 57 + shl edx, 16 + add eax, edx + mov ebx, hallCityDetail3D.pixels + mov eax, [ebx+eax*4] + jmp wall_shade_pixel +wall_sample_indoor_hd: + cmp edx, 80 + jb wall_sample_standard + cmp edx, 103 + ja wall_sample_standard + mov ebx, hallRoomHD3D.pixels + cmp edx, 92 + jb wall_sample_room_hd + mov ebx, hallArchitectureHD3D.pixels + sub edx, 12 +wall_sample_room_hd: + test ebx, ebx + jz wall_sample_standard_restore + sub edx, 80 + shl edx, 18 + add ebx, edx + mov eax, edi + shr eax, 15 + and eax, 255 + shl eax, 8 + mov edx, texXHD + shr edx, 8 + add eax, edx + mov eax, [ebx+eax*4] + jmp wall_shade_pixel +wall_sample_standard_restore: + mov edx, texId + mov eax, edi + shr eax, 16 + and eax, 127 +wall_sample_standard: + shl eax, 7 + add eax, texX + + shl edx, 14 + add eax, edx + mov eax, [texturesBuffer + eax*4] + + ; Shade wall pixel +wall_shade_pixel: + mov ebx, shade + cmp outdoorRender3D, 0 + je wall_ambient_shade + push eax + push ecx + invoke IsCityEmissive3D, eax, pixelMaterial + pop ecx + test eax, eax + pop eax + jz wall_ambient_shade + mov ebx, 256 +wall_ambient_shade: + cmp hallLevel3D, 0 + je @F + imul ebx, 7 + shr ebx, 3 +@@: + movzx edx, al + imul edx, ebx + shr edx, 8 + push edx + + movzx edx, ah + imul edx, ebx + shr edx, 8 + shl edx, 8 + + shr eax, 16 + movzx eax, al + imul eax, ebx + shr eax, 8 + shl eax, 16 + or eax, edx + pop edx + or eax, edx + + mov edx, ecx + imul edx, SCREEN_W + add edx, col + mov [screenBuffer + edx*4], eax + + add edi, esi + inc ecx + jmp draw_stripe_loop + +next_col: + inc col + jmp col_loop + +walls_done: + pop edi + pop esi + pop ebx + ret +RenderWallsRange ENDP + +; --- Raycasting Background Worker Thread --- +RaycastWorkerProc PROC uses ebx esi edi lpParam:DWORD +worker_loop: + invoke WaitForSingleObject, hRaycastStartEvent, 0FFFFFFFFh + cmp bRaycastQuit, 1 + je worker_exit + invoke RenderWallsRange, 320, 640 + invoke SetEvent, hRaycastDoneEvent + jmp worker_loop +worker_exit: + xor eax, eax + ret +RaycastWorkerProc ENDP + +; --- Multi-Threaded DDA Raycasting Walls Dispatcher --- +RenderWalls PROC + push ebx + push esi + push edi + + mov eax, playerAngle + and eax, 511 + mov ebx, [tableCos + eax*4] + mov playerDirX, ebx + mov ebx, [tableSin + eax*4] + mov playerDirY, ebx + + mov eax, ebx + imul eax, -66 + cdq + mov ecx, 100 + idiv ecx + mov playerPlaneX, eax + + mov eax, playerDirX + imul eax, 66 + cdq + idiv ecx + mov playerPlaneY, eax + + cmp hRaycastStartEvent, 0 + je single_thread_fallback + + ; Signal background worker to render columns [320..640) + invoke SetEvent, hRaycastStartEvent + + ; Main thread processes columns [0..320) in parallel + invoke RenderWallsRange, 0, 320 + + ; Synchronize with worker completion + invoke WaitForSingleObject, hRaycastDoneEvent, 0FFFFFFFFh + jmp walls_finished + +single_thread_fallback: + invoke RenderWallsRange, 0, SCREEN_W + +walls_finished: + pop edi + pop esi + pop ebx + ret +RenderWalls ENDP + +; --- Render 3D Billboard Sprites --- + +; --- HUD & Minimap Radar --- +RenderHUD PROC uses ebx esi edi + invoke DrawBox, 0, 0, 320, 16, 0014191Dh + invoke DrawString8x8, 8, 4, OFFSET textBank3D, 00D8BC6Ah + invoke FormatNumber, bankroll, OFFSET hudNumBuffer + invoke DrawString8x8, 64, 4, OFFSET hudNumBuffer, 00FFFFFFh + invoke DrawString8x8, 176, 4, OFFSET textWindowKeys3D, 00A8B6BBh + invoke DrawBox, 0, 226, 320, 14, 0014191Dh + invoke DrawString8x8, 12, 230, OFFSET textWalkKeys3D, 00A8B6BBh + invoke DrawBox, 159, 118, 2, 5, 00E7DFC8h + invoke DrawBox, 157, 120, 6, 1, 00E7DFC8h + cmp interactPromptPtr, 0 + je @F + invoke DrawBoxBorder, 4, 199, 312, 18, 0014191Dh, 00D8BC6Ah, 1 + invoke DrawString8x8, 10, 204, interactPromptPtr, 00F5E2B0h +@@: + cmp flashTimer, 0 + je hud_finished + dec flashTimer + invoke DrawBox, 4, 22, 312, 16, 0014191Dh + invoke DrawString8x8, 10, 26, OFFSET flashMessage, 00FFFFFFh +hud_finished: + ret +RenderHUD ENDP + +RenderMinimap PROC uses ebx esi edi + local radarX:DWORD + local radarY:DWORD + local radarSize:DWORD + + mov radarX, 320 - 48 + mov radarY, 20 + mov radarSize, 44 + + invoke DrawBoxBorder, radarX, radarY, radarSize, radarSize, 00101510h, 00FFD700h, 1 + + ; Draw Sprites on radar + cmp hallLevel3D, 0 + jne draw_player_radar + xor esi, esi +radar_spr_loop: + cmp esi, NUM_SPRITES + jge draw_player_radar + mov eax, esi + imul eax, SIZEOF SpriteObject + mov eax, [casinoSprites + eax].posX + sar eax, 16 + imul eax, radarSize + shr eax, 5 + add eax, radarX + mov ebx, eax + + mov eax, esi + imul eax, SIZEOF SpriteObject + mov eax, [casinoSprites + eax].posY + sar eax, 16 + imul eax, radarSize + shr eax, 5 + add eax, radarY + + invoke DrawPixel, ebx, eax, 00FFAA00h + inc esi + jmp radar_spr_loop + +draw_player_radar: + mov eax, playerX + sar eax, 16 + imul eax, radarSize + shr eax, 5 + add eax, radarX + mov ebx, eax + + mov eax, playerY + sar eax, 16 + imul eax, radarSize + shr eax, 5 + add eax, radarY + + invoke DrawCircle, ebx, eax, 2, 00FF2020h + ret +RenderMinimap ENDP + +; ============================================================================== +; IN-ENGINE 2.5D MINI-GAME: SLOTS 777 +; ============================================================================== +HandleSlotsInput PROC + cmp slotSpinState, 1 + je slots_input_done + + invoke Pressed3D, 20h ; SPACE -> Spin + test ah, 80h + jz check_bet_adjust + mov eax, bankroll + cmp eax, slotBet + jl @F + sub eax, slotBet + mov bankroll, eax + mov slotSpinState, 1 + mov slotSpinTimer, 0 + mov slotWinAmount, 0 + invoke PlayCasinoSound3D, OFFSET soundSlotSpin, 0, 1 + jmp slots_input_done +@@: + invoke CopyString3D, OFFSET msgNeedMoney, OFFSET flashMessage + mov flashTimer, 60 + +check_bet_adjust: + invoke Pressed3D, 26h ; UP / W + test ah, 80h + jnz inc_bet + invoke Pressed3D, 57h + test ah, 80h + jz check_bet_down +inc_bet: + cmp slotBet, 500 + jge slots_input_done + cmp slotBet, 100 + jge @F + cmp slotBet, 50 + jge set_100 + mov slotBet, 50 + jmp slots_input_done +set_100: + mov slotBet, 100 + jmp slots_input_done +@@: + mov slotBet, 500 + jmp slots_input_done + +check_bet_down: + invoke Pressed3D, 28h ; DOWN / S + test ah, 80h + jnz dec_bet + invoke Pressed3D, 53h + test ah, 80h + jz slots_input_done +dec_bet: + cmp slotBet, 50 + jle set_10 + cmp slotBet, 100 + jle set_50 + mov slotBet, 100 + jmp slots_input_done +set_50: + mov slotBet, 50 + jmp slots_input_done +set_10: + mov slotBet, 10 + +slots_input_done: + ret +HandleSlotsInput ENDP + +RenderSlotsGame PROC uses ebx esi edi + ; Cabinet Background (Dark Cherry Wood & Gold) + invoke DrawBox, 0, 0, SCREEN_W, SCREEN_H, 00150A10h + invoke DrawBoxBorder, 10, 10, 300, 220, 00251015h, 00FFD700h, 3 + + ; Illuminated Top Marquee + invoke DrawBoxBorder, 25, 20, 270, 32, 000A0505h, 00FFFF00h, 2 + invoke DrawString8x8, 55, 32, OFFSET textSlots3D, 00FFD700h + + ; Spinning Animation Logic + cmp slotSpinState, 1 + jne draw_reels + inc slotSpinTimer + + cmp slotSpinTimer, 22 + jge @F + invoke RandomRange3D, 7 + mov slotReel1, eax +@@: + cmp slotSpinTimer, 36 + jge @F + invoke RandomRange3D, 7 + mov slotReel2, eax +@@: + cmp slotSpinTimer, 50 + jge @F + invoke RandomRange3D, 7 + mov slotReel3, eax +@@: + cmp slotSpinTimer, 50 + jl draw_reels + + ; Spin finished! Check outcome! + mov slotSpinState, 0 + mov eax, slotReel1 + cmp eax, slotReel2 + jne check_pairs + cmp eax, slotReel3 + jne check_pairs + + ; 3 Matching! + cmp eax, 0 ; 777! + jne @F + mov eax, slotBet + imul eax, 25 + mov slotWinAmount, eax + add bankroll, eax + invoke PlayCasinoSound3D, OFFSET soundJackpot, 0, 1 + jmp draw_reels +@@: + cmp eax, 6 ; CROWN! + jne @F + mov eax, slotBet + imul eax, 50 + mov slotWinAmount, eax + add bankroll, eax + invoke PlayCasinoSound3D, OFFSET soundJackpot, 0, 1 + jmp draw_reels +@@: + mov eax, slotBet + imul eax, 10 + mov slotWinAmount, eax + add bankroll, eax + invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 + jmp draw_reels + +check_pairs: + mov eax, slotReel1 + cmp eax, slotReel2 + je pair_win + mov eax, slotReel2 + cmp eax, slotReel3 + je pair_win + mov eax, slotReel1 + cmp eax, slotReel3 + je pair_win + jmp draw_reels +pair_win: + mov eax, slotBet + imul eax, 2 + mov slotWinAmount, eax + add bankroll, eax + invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 + +draw_reels: + ; Reels Window + invoke DrawBoxBorder, 30, 62, 260, 95, 000F0F12h, 0000A5FFh, 2 + + ; Reel 1 (45..105) + invoke DrawBoxBorder, 45, 68, 65, 82, 00F0F0F5h, 00505050h, 2 + mov eax, slotReel1 + call DrawReelSymbolAt1 + + ; Reel 2 (128..188) + invoke DrawBoxBorder, 128, 68, 65, 82, 00F0F0F5h, 00505050h, 2 + mov eax, slotReel2 + call DrawReelSymbolAt2 + + ; Reel 3 (210..270) + invoke DrawBoxBorder, 210, 68, 65, 82, 00F0F0F5h, 00505050h, 2 + mov eax, slotReel3 + call DrawReelSymbolAt3 + + ; Bottom Control Panel + invoke DrawBoxBorder, 20, 165, 280, 58, 00151515h, 00FFD700h, 1 + + invoke DrawString8x8, 28, 172, OFFSET textBank3D, 00FFD700h + invoke FormatNumber, bankroll, OFFSET hudNumBuffer + invoke DrawString8x8, 110, 172, OFFSET hudNumBuffer, 00FFFF00h + + invoke DrawString8x8, 175, 172, OFFSET textBet3D, 00FFD700h + invoke FormatNumber, slotBet, OFFSET hudNumBuffer + invoke DrawString8x8, 240, 172, OFFSET hudNumBuffer, 0050FF50h + + cmp slotWinAmount, 0 + jle draw_slot_ctrls + invoke DrawString8x8, 28, 187, OFFSET strWin, 00FFFF00h + invoke FormatNumber, slotWinAmount, OFFSET hudNumBuffer + invoke DrawString8x8, 110, 187, OFFSET hudNumBuffer, 00FFFF00h + +draw_slot_ctrls: + invoke DrawString8x8, 28, 204, OFFSET textSlotsKeys3D, 00A0A0A0h + ret +RenderSlotsGame ENDP + +DrawReelSymbolAt1 PROC + cmp eax, 0 + jne @F + invoke DrawString8x8, 52, 105, OFFSET sym7, 00FF2020h + ret +@@: + cmp eax, 1 + jne @F + invoke DrawString8x8, 52, 105, OFFSET symBar, 00FFAA00h + ret +@@: + cmp eax, 2 + jne @F + invoke DrawString8x8, 52, 105, OFFSET symBell, 00FFD700h + ret +@@: + cmp eax, 3 + jne @F + invoke DrawString8x8, 48, 105, OFFSET symCherry, 000000D0h + ret +@@: + cmp eax, 4 + jne @F + invoke DrawString8x8, 48, 105, OFFSET symClover, 0000A000h + ret +@@: + cmp eax, 5 + jne @F + invoke DrawString8x8, 52, 105, OFFSET symGem, 00FFFF00h + ret +@@: + invoke DrawString8x8, 52, 105, OFFSET symCrown, 00FFD700h + ret +DrawReelSymbolAt1 ENDP + +DrawReelSymbolAt2 PROC + cmp eax, 0 + jne @F + invoke DrawString8x8, 135, 105, OFFSET sym7, 00FF2020h + ret +@@: + cmp eax, 1 + jne @F + invoke DrawString8x8, 135, 105, OFFSET symBar, 00FFAA00h + ret +@@: + cmp eax, 2 + jne @F + invoke DrawString8x8, 135, 105, OFFSET symBell, 00FFD700h + ret +@@: + cmp eax, 3 + jne @F + invoke DrawString8x8, 131, 105, OFFSET symCherry, 000000D0h + ret +@@: + cmp eax, 4 + jne @F + invoke DrawString8x8, 131, 105, OFFSET symClover, 0000A000h + ret +@@: + cmp eax, 5 + jne @F + invoke DrawString8x8, 135, 105, OFFSET symGem, 00FFFF00h + ret +@@: + invoke DrawString8x8, 135, 105, OFFSET symCrown, 00FFD700h + ret +DrawReelSymbolAt2 ENDP + +DrawReelSymbolAt3 PROC + cmp eax, 0 + jne @F + invoke DrawString8x8, 218, 105, OFFSET sym7, 00FF2020h + ret +@@: + cmp eax, 1 + jne @F + invoke DrawString8x8, 218, 105, OFFSET symBar, 00FFAA00h + ret +@@: + cmp eax, 2 + jne @F + invoke DrawString8x8, 218, 105, OFFSET symBell, 00FFD700h + ret +@@: + cmp eax, 3 + jne @F + invoke DrawString8x8, 214, 105, OFFSET symCherry, 000000D0h + ret +@@: + cmp eax, 4 + jne @F + invoke DrawString8x8, 214, 105, OFFSET symClover, 0000A000h + ret +@@: + cmp eax, 5 + jne @F + invoke DrawString8x8, 218, 105, OFFSET symGem, 00FFFF00h + ret +@@: + invoke DrawString8x8, 218, 105, OFFSET symCrown, 00FFD700h + ret +DrawReelSymbolAt3 ENDP + +; ============================================================================== +; IN-ENGINE 2.5D MINI-GAME: BLACKJACK (21) +; ============================================================================== +HandleBlackjackInput PROC uses ebx + cmp bjState, 0 ; Need Deal + jne check_bj_player_turn + invoke Pressed3D, 20h ; SPACE -> Deal + test ah, 80h + jz check_bj_bet_change + mov eax, bankroll + cmp eax, bjBet + jl bj_need_cash + sub eax, bjBet + mov bankroll, eax + + ; Deal 2 cards to player, 2 cards to dealer + mov bjPlayerCardCount, 0 + mov bjDealerCardCount, 0 + mov bjDealerHideHole, 1 + + ; Player Card 1 + invoke RandomRange3D, 13 + inc eax + mov ebx, bjPlayerCardCount + mov [bjPlayerCards + ebx*4], eax + inc bjPlayerCardCount + + ; Dealer Card 1 + invoke RandomRange3D, 13 + inc eax + mov ebx, bjDealerCardCount + mov [bjDealerCards + ebx*4], eax + inc bjDealerCardCount + + ; Player Card 2 + invoke RandomRange3D, 13 + inc eax + mov ebx, bjPlayerCardCount + mov [bjPlayerCards + ebx*4], eax + inc bjPlayerCardCount + + ; Dealer Card 2 (Hole card) + invoke RandomRange3D, 13 + inc eax + mov ebx, bjDealerCardCount + mov [bjDealerCards + ebx*4], eax + inc bjDealerCardCount + + invoke PlayCasinoSound3D, OFFSET soundCards, 0, 1 + + ; Calc Player Score + call CalcPlayerBJScore + cmp bjPlayerScore, 21 + jne set_bj_turn + ; Instant Blackjack! + mov bjDealerHideHole, 0 + mov eax, bjBet + imul eax, 5 + shr eax, 1 + add bankroll, eax + invoke CopyString3D, OFFSET strWin, OFFSET bjOutcomeMsg + invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 + mov bjState, 2 + ret +set_bj_turn: + mov bjState, 1 + mov BYTE PTR [bjOutcomeMsg], 0 + ret + +bj_need_cash: + invoke CopyString3D, OFFSET msgNeedMoney, OFFSET flashMessage + mov flashTimer, 60 + ret + +check_bj_player_turn: + cmp bjState, 1 + jne check_bj_round_over + + invoke Pressed3D, 48h ; 'H' -> Hit + test ah, 80h + jz check_bj_stand + invoke RandomRange3D, 13 + inc eax + mov ebx, bjPlayerCardCount + cmp ebx, 8 + jge @F + mov [bjPlayerCards + ebx*4], eax + inc bjPlayerCardCount +@@: + invoke PlayCasinoSound3D, OFFSET soundCards, 0, 1 + call CalcPlayerBJScore + cmp bjPlayerScore, 21 + jle bj_input_done + ; Bust! + invoke CopyString3D, OFFSET strPlayerBust, OFFSET bjOutcomeMsg + mov bjDealerHideHole, 0 + mov bjState, 2 + ret + +check_bj_stand: + invoke Pressed3D, 53h ; 'S' -> Stand + test ah, 80h + jz bj_input_done + + ; Dealer Turn + mov bjDealerHideHole, 0 +dealer_loop: + call CalcDealerBJScore + cmp bjDealerScore, 17 + jge dealer_finished + invoke RandomRange3D, 13 + inc eax + mov ebx, bjDealerCardCount + cmp ebx, 8 + jge dealer_finished + mov [bjDealerCards + ebx*4], eax + inc bjDealerCardCount + jmp dealer_loop + +dealer_finished: + cmp bjDealerScore, 21 + jle compare_scores + ; Dealer Bust! + mov eax, bjBet + shl eax, 1 + add bankroll, eax + invoke CopyString3D, OFFSET strDealerBust, OFFSET bjOutcomeMsg + invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 + mov bjState, 2 + ret + +compare_scores: + mov eax, bjPlayerScore + cmp eax, bjDealerScore + jle check_dealer_won + ; Player Won! + mov eax, bjBet + shl eax, 1 + add bankroll, eax + invoke CopyString3D, OFFSET strWin, OFFSET bjOutcomeMsg + invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 + mov bjState, 2 + ret +check_dealer_won: + cmp eax, bjDealerScore + jl dealer_wins + ; Push (Tie) + mov eax, bjBet + add bankroll, eax + invoke CopyString3D, OFFSET strPush, OFFSET bjOutcomeMsg + mov bjState, 2 + ret +dealer_wins: + invoke CopyString3D, OFFSET strLose, OFFSET bjOutcomeMsg + mov bjState, 2 + ret + +check_bj_round_over: + invoke Pressed3D, 20h ; SPACE -> Next Hand + test ah, 80h + jz bj_input_done + mov bjState, 0 + ret + +check_bj_bet_change: + invoke Pressed3D, 26h ; UP + test ah, 80h + jz @F + cmp bjBet, 500 + jge bj_input_done + add bjBet, 50 + ret +@@: + invoke Pressed3D, 28h ; DOWN + test ah, 80h + jz bj_input_done + cmp bjBet, 50 + jle bj_input_done + sub bjBet, 50 + +bj_input_done: + ret +HandleBlackjackInput ENDP + +CalcPlayerBJScore PROC uses ebx esi + xor eax, eax + xor ebx, ebx + xor esi, esi +calc_p_loop: + cmp esi, bjPlayerCardCount + jge calc_p_done + mov edx, [bjPlayerCards + esi*4] + cmp edx, 10 + jle @F + mov edx, 10 +@@: + cmp edx, 1 + jne add_p_val + inc ebx ; count Aces + add eax, 11 + jmp next_p_card +add_p_val: + add eax, edx +next_p_card: + inc esi + jmp calc_p_loop +calc_p_done: + ; Soft Ace reduction +reduce_p_ace: + cmp eax, 21 + jle store_p_score + test ebx, ebx + jz store_p_score + sub eax, 10 + dec ebx + jmp reduce_p_ace +store_p_score: + mov bjPlayerScore, eax + ret +CalcPlayerBJScore ENDP + +CalcDealerBJScore PROC uses ebx esi + xor eax, eax + xor ebx, ebx + xor esi, esi +calc_d_loop: + cmp esi, bjDealerCardCount + jge calc_d_done + mov edx, [bjDealerCards + esi*4] + cmp edx, 10 + jle @F + mov edx, 10 +@@: + cmp edx, 1 + jne add_d_val + inc ebx + add eax, 11 + jmp next_d_card +add_d_val: + add eax, edx +next_d_card: + inc esi + jmp calc_d_loop +calc_d_done: +reduce_d_ace: + cmp eax, 21 + jle store_d_score + test ebx, ebx + jz store_d_score + sub eax, 10 + dec ebx + jmp reduce_d_ace +store_d_score: + mov bjDealerScore, eax + ret +CalcDealerBJScore ENDP + +RenderBlackjackGame PROC uses ebx esi edi + ; Emerald Felt Table Background + invoke DrawBox, 0, 0, SCREEN_W, SCREEN_H, 000A3015h + invoke DrawBoxBorder, 10, 10, 300, 220, 000D4018h, 00FFD700h, 3 + + ; Dealer Area Top + invoke DrawString8x8, 25, 20, OFFSET textBJ3D, 00FFD700h + invoke DrawString8x8, 25, 35, OFFSET textDealer3D, 00FFFFFFh + invoke FormatNumber, bjDealerScore, OFFSET hudNumBuffer + invoke DrawString8x8, 120, 35, OFFSET hudNumBuffer, 00FFFF00h + + ; Dealer Cards + xor esi, esi +draw_dealer_cards: + cmp esi, bjDealerCardCount + jge draw_player_bj_area + mov eax, esi + imul eax, 45 + add eax, 25 + mov ebx, eax + + cmp esi, 1 + jne draw_dealer_face + cmp bjDealerHideHole, 1 + jne draw_dealer_face + ; Face Down Card + mov eax, selectedBack3D + mov eax, cardBackColors3D[eax*4] + invoke DrawBoxBorder, ebx, 48, 38, 52, eax, 00FFFFFFh, 2 + jmp next_dealer_card_draw + +draw_dealer_face: + invoke DrawBoxBorder, ebx, 48, 38, 52, 00F0F0F5h, 00000000h, 2 + mov eax, [bjDealerCards + esi*4] + dec eax + imul eax, 3 + lea edx, [cardRankStr + eax] + mov eax, ebx + add eax, 8 + invoke DrawString8x8, eax, 68, edx, 00000000h + +next_dealer_card_draw: + inc esi + jmp draw_dealer_cards + +draw_player_bj_area: + ; Player Area Bottom + invoke DrawString8x8, 25, 110, OFFSET textPlayer3D, 00FFFFFFh + invoke FormatNumber, bjPlayerScore, OFFSET hudNumBuffer + invoke DrawString8x8, 120, 110, OFFSET hudNumBuffer, 0050FF50h + + ; Player Cards + xor esi, esi +draw_player_cards: + cmp esi, bjPlayerCardCount + jge draw_bj_footer + mov eax, esi + imul eax, 45 + add eax, 25 + mov ebx, eax + + invoke DrawBoxBorder, ebx, 124, 38, 52, 00F0F0F5h, 00000000h, 2 + mov eax, [bjPlayerCards + esi*4] + dec eax + imul eax, 3 + lea edx, [cardRankStr + eax] + mov eax, ebx + add eax, 8 + invoke DrawString8x8, eax, 144, edx, 00000000h + + inc esi + jmp draw_player_cards + +draw_bj_footer: + ; Footer Status & Controls + invoke DrawBoxBorder, 20, 182, 280, 42, 00102010h, 00FFD700h, 1 + cmp BYTE PTR [bjOutcomeMsg], 0 + je draw_bj_controls + invoke DrawString8x8, 28, 188, OFFSET bjOutcomeMsg, 00FFFF00h + invoke DrawString8x8, 28, 204, OFFSET textNext3D, 00A0A0A0h + ret + +draw_bj_controls: + invoke DrawString8x8, 28, 188, OFFSET textBJKeys3D, 00FFFFFFh + invoke DrawString8x8, 28, 204, OFFSET textDeal3D, 00A0A0A0h + ret +RenderBlackjackGame ENDP + +; ============================================================================== +; IN-ENGINE 2.5D MINI-GAME: ROULETTE +; ============================================================================== +HandleRouletteInput PROC uses ebx + cmp roulState, 1 + je roul_input_done + + invoke Pressed3D, 31h ; '1' -> RED + test ah, 80h + jz @F + mov roulBetType, 1 +@@: + invoke Pressed3D, 32h ; '2' -> BLACK + test ah, 80h + jz @F + mov roulBetType, 2 +@@: + invoke Pressed3D, 33h ; '3' -> ZERO (0) + test ah, 80h + jz @F + mov roulBetType, 3 +@@: + invoke Pressed3D, 34h ; '4' -> EVEN + test ah, 80h + jz @F + mov roulBetType, 4 +@@: + invoke Pressed3D, 35h ; '5' -> ODD + test ah, 80h + jz check_roul_spin + mov roulBetType, 5 + +check_roul_spin: + invoke Pressed3D, 20h ; SPACE -> Spin + test ah, 80h + jz roul_input_done + mov eax, bankroll + cmp eax, roulBetAmount + jl roul_no_cash + sub eax, roulBetAmount + mov bankroll, eax + mov roulState, 1 + mov roulSpinTimer, 50 + mov roulPayout, 0 + invoke PlayCasinoSound3D, OFFSET soundRoulette, 0, 1 + ret + +roul_no_cash: + invoke CopyString3D, OFFSET msgNeedMoney, OFFSET flashMessage + mov flashTimer, 60 + +roul_input_done: + ret +HandleRouletteInput ENDP + +RenderRouletteGame PROC uses ebx esi edi + ; Table felt background + invoke DrawBox, 0, 0, SCREEN_W, SCREEN_H, 00151525h + invoke DrawBoxBorder, 10, 10, 300, 220, 00201525h, 00FFD700h, 3 + + ; 2.5D Rotating Wheel on Left + invoke DrawCircle, 85, 110, 65, 00102550h + invoke DrawCircle, 85, 110, 60, 00FFD700h + invoke DrawCircle, 85, 110, 52, 00101010h + invoke DrawCircle, 85, 110, 22, 00FFD700h ; Center brass turret + + ; Spinning Wheel / Ball Logic + cmp roulState, 1 + jne draw_roul_ball + dec roulSpinTimer + add roulWheelAngle, 8 + sub roulBallAngle, 14 + cmp roulSpinTimer, 0 + jg draw_roul_ball + + ; Wheel stopped! Determine result! + mov roulState, 2 + invoke RandomRange3D, 37 + mov roulWinningNum, eax + + ; Check bet + cmp roulBetType, 1 ; RED + jne check_ro_black + call IsNumberRed + test eax, eax + jz ro_lost + mov eax, roulBetAmount + shl eax, 1 + mov roulPayout, eax + add bankroll, eax + invoke CopyString3D, OFFSET strWin, OFFSET roulOutcomeMsg + invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 + jmp draw_roul_ball + +check_ro_black: + cmp roulBetType, 2 ; BLACK + jne check_ro_zero + cmp roulWinningNum, 0 + je ro_lost + call IsNumberRed + test eax, eax + jnz ro_lost + mov eax, roulBetAmount + shl eax, 1 + mov roulPayout, eax + add bankroll, eax + invoke CopyString3D, OFFSET strWin, OFFSET roulOutcomeMsg + invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 + jmp draw_roul_ball + +check_ro_zero: + cmp roulBetType, 3 ; ZERO + jne check_ro_even + cmp roulWinningNum, 0 + jne ro_lost + mov eax, roulBetAmount + imul eax, 36 + mov roulPayout, eax + add bankroll, eax + invoke CopyString3D, OFFSET strJackpot, OFFSET roulOutcomeMsg + invoke PlayCasinoSound3D, OFFSET soundJackpot, 0, 1 + jmp draw_roul_ball + +check_ro_even: + cmp roulBetType, 4 ; EVEN + jne check_ro_odd + mov eax, roulWinningNum + test eax, eax + jz ro_lost + test al, 1 + jnz ro_lost + mov eax, roulBetAmount + shl eax, 1 + mov roulPayout, eax + add bankroll, eax + invoke CopyString3D, OFFSET strWin, OFFSET roulOutcomeMsg + invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 + jmp draw_roul_ball + +check_ro_odd: + mov eax, roulWinningNum + test eax, eax + jz ro_lost + test al, 1 + jz ro_lost + mov eax, roulBetAmount + shl eax, 1 + mov roulPayout, eax + add bankroll, eax + invoke CopyString3D, OFFSET strWin, OFFSET roulOutcomeMsg + invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 + jmp draw_roul_ball + +ro_lost: + invoke CopyString3D, OFFSET strLose, OFFSET roulOutcomeMsg + +draw_roul_ball: + ; Draw White Ball on Rim + mov eax, roulBallAngle + and eax, 511 + mov ebx, [tableCos + eax*4] + imul ebx, 42 + sar ebx, 16 + add ebx, 85 + + mov eax, roulBallAngle + and eax, 511 + mov edx, [tableSin + eax*4] + imul edx, 42 + sar edx, 16 + add edx, 110 + invoke DrawCircle, ebx, edx, 3, 00FFFFFFh + + ; Right Betting Board + invoke DrawBoxBorder, 175, 25, 125, 28, 001010C0h, 00FFFFFFh, 2 ; [1] RED + invoke DrawString8x8, 190, 35, OFFSET textRed3D, 00FFFFFFh + + invoke DrawBoxBorder, 175, 60, 125, 28, 00151515h, 00FFFFFFh, 2 ; [2] BLACK + invoke DrawString8x8, 190, 70, OFFSET textBlack3D, 00FFFFFFh + + invoke DrawBoxBorder, 175, 95, 125, 28, 00106010h, 00FFFFFFh, 2 ; [3] ZERO + invoke DrawString8x8, 190, 105, OFFSET textZero3D, 00FFFFFFh + + invoke DrawBoxBorder, 175, 130, 60, 26, 00302020h, 00FFFFFFh, 1 ; [4] EVEN + invoke DrawString8x8, 185, 139, OFFSET textEven3D, 00FFFFFFh + + invoke DrawBoxBorder, 240, 130, 60, 26, 00302020h, 00FFFFFFh, 1 ; [5] ODD + invoke DrawString8x8, 250, 139, OFFSET textOdd3D, 00FFFFFFh + + ; Highlight Active Bet + cmp roulBetType, 1 + jne @F + invoke DrawBoxBorder, 173, 23, 129, 32, 0, 00FFFF00h, 2 +@@: + cmp roulBetType, 2 + jne @F + invoke DrawBoxBorder, 173, 58, 129, 32, 0, 00FFFF00h, 2 +@@: + cmp roulBetType, 3 + jne @F + invoke DrawBoxBorder, 173, 93, 129, 32, 0, 00FFFF00h, 2 +@@: + cmp roulBetType, 4 + jne @F + invoke DrawBoxBorder, 173, 128, 64, 30, 0, 00FFFF00h, 2 +@@: + cmp roulBetType, 5 + jne draw_ro_footer + invoke DrawBoxBorder, 238, 128, 64, 30, 0, 00FFFF00h, 2 + +draw_ro_footer: + invoke DrawBoxBorder, 20, 180, 280, 42, 00101015h, 00FFD700h, 1 + + cmp roulState, 2 + jne @F + invoke DrawString8x8, 28, 186, OFFSET textResult3D, 00FFD700h + invoke FormatNumber, roulWinningNum, OFFSET hudNumBuffer + invoke DrawString8x8, 85, 186, OFFSET hudNumBuffer, 00FFFF00h + invoke DrawString8x8, 130, 186, OFFSET roulOutcomeMsg, 0050FF50h +@@: + invoke DrawString8x8, 28, 202, OFFSET textSpin3D, 00A0A0A0h + ret +RenderRouletteGame ENDP + +IsNumberRed PROC + mov eax, roulWinningNum + cmp eax, 1 + je red_yes + cmp eax, 3 + je red_yes + cmp eax, 5 + je red_yes + cmp eax, 7 + je red_yes + cmp eax, 9 + je red_yes + cmp eax, 12 + je red_yes + cmp eax, 14 + je red_yes + cmp eax, 16 + je red_yes + cmp eax, 18 + je red_yes + cmp eax, 19 + je red_yes + cmp eax, 21 + je red_yes + cmp eax, 23 + je red_yes + cmp eax, 25 + je red_yes + cmp eax, 27 + je red_yes + cmp eax, 30 + je red_yes + cmp eax, 32 + je red_yes + cmp eax, 34 + je red_yes + cmp eax, 36 + je red_yes + xor eax, eax + ret +red_yes: + mov eax, 1 + ret +IsNumberRed ENDP + +; ============================================================================== +; IN-ENGINE 2.5D MINI-GAME: BAR & SHOP +; ============================================================================== +HandleShopInput PROC uses ebx esi + xor esi, esi +shop_choice: + inc esi + lea eax, [esi+30h] + invoke Pressed3D, eax + test eax, eax + jnz shop_chosen + cmp esi, 3 + jb shop_choice + ret +shop_chosen: + bt ownedBacks3D, esi + jc shop_equip + mov ebx, 1500 + cmp esi, 1 + jne @F + mov ebx, 1000 +@@: + cmp bankroll, ebx + jb shop_no_money + sub bankroll, ebx + bts ownedBacks3D, esi +shop_equip: + mov selectedBack3D, esi + invoke CopyString3D, OFFSET textBought3D, OFFSET shopMsg + call SaveProgress3D + ret +shop_no_money: + invoke CopyString3D, OFFSET textNoCash3D, OFFSET shopMsg + ret +HandleShopInput ENDP + +RenderShopGame PROC + invoke DrawBox, 0, 0, SCREEN_W, SCREEN_H, 00150A0Ah + invoke DrawBoxBorder, 10, 10, 300, 220, 00251515h, 00FFD700h, 3 + invoke DrawString8x8, 25, 20, OFFSET textShop3D, 00FFD700h + + invoke DrawBoxBorder, 20, 40, 280, 32, 001A1010h, 00FFFFFFh, 1 + invoke DrawString8x8, 28, 46, OFFSET textItem1_3D, 00FFFF00h + invoke DrawString8x8, 28, 58, OFFSET textShopHint3D, 00A0A0A0h + + invoke DrawBoxBorder, 20, 80, 280, 32, 001A1010h, 00FFFFFFh, 1 + invoke DrawString8x8, 28, 86, OFFSET textItem2_3D, 00FFFF00h + invoke DrawString8x8, 28, 98, OFFSET textShopHint3D, 00A0A0A0h + + invoke DrawBoxBorder, 20, 120, 280, 32, 001A1010h, 00FFFFFFh, 1 + invoke DrawString8x8, 28, 126, OFFSET textItem3_3D, 00FFFF00h + invoke DrawString8x8, 28, 138, OFFSET textShopHint3D, 00A0A0A0h + + invoke DrawBoxBorder, 20, 165, 280, 55, 00100A0Ah, 00FFD700h, 1 + invoke DrawString8x8, 28, 172, OFFSET textBank3D, 00FFD700h + invoke FormatNumber, bankroll, OFFSET hudNumBuffer + invoke DrawString8x8, 110, 172, OFFSET hudNumBuffer, 00FFFF00h + + cmp BYTE PTR [shopMsg], 0 + je @F + invoke DrawString8x8, 28, 188, OFFSET shopMsg, 0050FF50h +@@: + invoke DrawString8x8, 28, 204, OFFSET textBack3D, 00A0A0A0h + ret +RenderShopGame ENDP + +; ============================================================================== +; IN-ENGINE 2.5D MINI-GAME: ATM TERMINAL +; ============================================================================== +HandleATMInput PROC + ret +HandleATMInput ENDP + +RenderATMGame PROC + invoke DrawBox, 0, 0, 320, 240, 00172120h + invoke DrawString8x8, 24, 30, OFFSET textATM3D, 00D8BC6Ah + invoke DrawString8x8, 24, 70, OFFSET textBank3D, 00FFFFFFh + invoke FormatNumber, bankroll, OFFSET hudNumBuffer + invoke DrawString8x8, 96, 70, OFFSET hudNumBuffer, 0089DAB2h + invoke DrawString8x8, 24, 115, OFFSET textATMNote3D, 00B7C8C1h + invoke DrawString8x8, 24, 140, OFFSET textATMNote2_3D, 00B7C8C1h + invoke DrawString8x8, 24, 208, OFFSET textBack3D, 00D8BC6Ah + ret +RenderATMGame ENDP + +; ============================================================================== +; ============================================================================== +; ============================================================================== +; SHARED RICH UI PROCEDURES +; ============================================================================== +DrawKeycap3D PROC uses ebx esi edi, x:DWORD, y:DWORD, strPtr:DWORD, isActive:DWORD + local keyW:DWORD + mov esi, strPtr + xor ecx, ecx +keycap_len: + mov al, [esi+ecx] + test al, al + jz keycap_len_done + inc ecx + jmp keycap_len +keycap_len_done: + shl ecx, 3 + add ecx, 8 + mov keyW, ecx + + ; Drop shadow + mov eax, y + add eax, 2 + invoke DrawBox, x, eax, keyW, 13, 0008080Ch + + ; Border and Fill + cmp isActive, 0 + je keycap_inactive + mov eax, 00FFFF00h ; Bright Yellow active border + mov edx, 001B4B22h ; Casino Green active fill + mov ebx, 00FFFF00h ; Bright Yellow active text + jmp keycap_draw_box +keycap_inactive: + mov eax, 00606870h ; Slate inactive border + mov edx, 001A1C22h ; Charcoal inactive fill + mov ebx, 00D0D8E0h ; Silver inactive text + +keycap_draw_box: + push ebx + invoke DrawBoxBorder, x, y, keyW, 13, edx, eax, 1 + pop ebx + + ; Text label + mov eax, x + add eax, 4 + mov edx, y + add edx, 3 + invoke DrawString8x8, eax, edx, strPtr, ebx + + mov eax, keyW + add eax, 4 + ret +DrawKeycap3D ENDP + +DrawChipStack PROC uses ebx esi edi, x:DWORD, y:DWORD, chipCount:DWORD + mov edi, chipCount + xor esi, esi +chip_loop: + cmp esi, edi + jge chip_done + mov eax, esi + shl eax, 2 + mov edx, y + sub edx, eax + + ; Shadow + mov eax, x + add eax, 2 + mov ecx, edx + add ecx, 5 + invoke DrawBox, eax, ecx, 20, 2, 00061004h + + ; Red Clay Chip body with white rim + invoke DrawBoxBorder, x, edx, 24, 6, 00B81515h, 00FFFFFFh, 1 + + ; White stripe inlays + mov eax, x + add eax, 4 + mov ecx, edx + add ecx, 1 + invoke DrawBox, eax, ecx, 3, 4, 00FFFFFFh + + mov eax, x + add eax, 17 + mov ecx, edx + add ecx, 1 + invoke DrawBox, eax, ecx, 3, 4, 00FFFFFFh + + inc esi + jmp chip_loop +chip_done: + ret +DrawChipStack ENDP + +DrawDetailedCoin PROC uses ebx esi edi, cxVal:DWORD, cyVal:DWORD, rxVal:DWORD, ryVal:DWORD, outerColor:DWORD, innerColor:DWORD, reliefType:DWORD + local rxSq:DWORD + local rySq:DWORD + local rxRySq:DWORD + local threshSq:DWORD + local curDy:DWORD + local curDx:DWORD + local curX:DWORD + local curY:DWORD + + mov eax, rxVal + cmp eax, 0 + jle coin_draw_done + mov eax, ryVal + cmp eax, 0 + jle coin_draw_done + + mov eax, rxVal + imul eax, rxVal + mov rxSq, eax + + mov eax, ryVal + imul eax, ryVal + mov rySq, eax + + imul eax, rxSq + mov rxRySq, eax + + ; 3/4 threshold for rim bevel + mov ecx, 3 + imul eax, ecx + shr eax, 2 + mov threshSq, eax + + ; Scan rows + mov eax, ryVal + neg eax + mov curDy, eax +coin_row_loop: + mov eax, curDy + cmp eax, ryVal + jg coin_relief_check + + mov edx, cyVal + add edx, curDy + mov curY, edx + + ; Scan columns + mov eax, rxVal + neg eax + mov curDx, eax +coin_col_loop: + mov eax, curDx + cmp eax, rxVal + jg coin_col_next_row + + mov ecx, cxVal + add ecx, curDx + mov curX, ecx + + ; val = dx*dx*rySq + dy*dy*rxSq + mov eax, curDx + imul eax, curDx + imul eax, rySq + mov ebx, eax + + mov eax, curDy + imul eax, curDy + imul eax, rxSq + add eax, ebx + + cmp eax, rxRySq + ja coin_pixel_outside + + cmp eax, threshSq + jb coin_draw_inner + invoke DrawPixel, curX, curY, outerColor + jmp coin_pixel_outside +coin_draw_inner: + invoke DrawPixel, curX, curY, innerColor + +coin_pixel_outside: + inc curDx + jmp coin_col_loop + +coin_col_next_row: + inc curDy + jmp coin_row_loop + +coin_relief_check: + cmp rxVal, 14 + jl coin_draw_done + + cmp reliefType, 1 + je coin_draw_eagle + cmp reliefType, 2 + je coin_draw_numeral + jmp coin_draw_done + +coin_draw_eagle: + ; Imperial Eagle relief (Dark Gold 009A7A00h / Bright 00FFD700h) + mov eax, cxVal + sub eax, 3 + mov edx, cyVal + sub edx, 14 + invoke DrawBox, eax, edx, 7, 2, 009A7A00h + + mov eax, cxVal + sub eax, 4 + mov edx, cyVal + sub edx, 12 + invoke DrawBox, eax, edx, 9, 2, 009A7A00h + + mov eax, cxVal + sub eax, 2 + mov edx, cyVal + sub edx, 9 + invoke DrawBox, eax, edx, 5, 12, 009A7A00h + + mov eax, cxVal + sub eax, 1 + mov edx, cyVal + sub edx, 8 + invoke DrawBox, eax, edx, 3, 10, 00FFD700h + + mov eax, cxVal + sub eax, 10 + mov edx, cyVal + sub edx, 8 + invoke DrawBox, eax, edx, 7, 3, 009A7A00h + + mov eax, cxVal + sub eax, 13 + mov edx, cyVal + sub edx, 5 + invoke DrawBox, eax, edx, 10, 3, 009A7A00h + + mov eax, cxVal + sub eax, 11 + mov edx, cyVal + sub edx, 2 + invoke DrawBox, eax, edx, 7, 3, 009A7A00h + + mov eax, cxVal + add eax, 4 + mov edx, cyVal + sub edx, 8 + invoke DrawBox, eax, edx, 7, 3, 009A7A00h + + mov eax, cxVal + add eax, 4 + mov edx, cyVal + sub edx, 5 + invoke DrawBox, eax, edx, 10, 3, 009A7A00h + + mov eax, cxVal + add eax, 5 + mov edx, cyVal + sub edx, 2 + invoke DrawBox, eax, edx, 7, 3, 009A7A00h + + mov eax, cxVal + sub eax, 4 + mov edx, cyVal + add edx, 4 + invoke DrawBox, eax, edx, 9, 3, 009A7A00h + + mov eax, cxVal + sub eax, 3 + mov edx, cyVal + add edx, 7 + invoke DrawBox, eax, edx, 7, 3, 009A7A00h + jmp coin_draw_done + +coin_draw_numeral: + ; Roman numeral 'I' & laurel + mov eax, cxVal + sub eax, 5 + mov edx, cyVal + sub edx, 10 + invoke DrawBox, eax, edx, 11, 3, 009A7A00h + + mov eax, cxVal + sub eax, 2 + mov edx, cyVal + sub edx, 7 + invoke DrawBox, eax, edx, 5, 14, 009A7A00h + + mov eax, cxVal + sub eax, 1 + mov edx, cyVal + sub edx, 6 + invoke DrawBox, eax, edx, 3, 12, 00FFD700h + + mov eax, cxVal + sub eax, 6 + mov edx, cyVal + add edx, 7 + invoke DrawBox, eax, edx, 13, 3, 009A7A00h + + ; Laurel dots + mov eax, cxVal + sub eax, 12 + mov edx, cyVal + sub edx, 8 + invoke DrawBox, eax, edx, 2, 2, 009A7A00h + + mov eax, cxVal + add eax, 11 + mov edx, cyVal + sub edx, 8 + invoke DrawBox, eax, edx, 2, 2, 009A7A00h + + mov eax, cxVal + sub eax, 12 + mov edx, cyVal + invoke DrawBox, eax, edx, 2, 2, 009A7A00h + + mov eax, cxVal + add eax, 11 + mov edx, cyVal + invoke DrawBox, eax, edx, 2, 2, 009A7A00h + + mov eax, cxVal + sub eax, 12 + mov edx, cyVal + add edx, 8 + invoke DrawBox, eax, edx, 2, 2, 009A7A00h + + mov eax, cxVal + add eax, 11 + mov edx, cyVal + add edx, 8 + invoke DrawBox, eax, edx, 2, 2, 009A7A00h + +coin_draw_done: + ret +DrawDetailedCoin ENDP + +; ============================================================================== +; IN-ENGINE 2.5D MINI-GAME: COIN FLIP +; ============================================================================== +InitCoinGame PROC + call InitNativeCoin3D + ret +InitCoinGame ENDP + +HandleCoinInput PROC + call HandleNativeCoin3D + ret +; Retained legacy frame-count prototype, excluded from the executable. +IF 0 + cmp coin3d_state, 0 + je coin_handle_idle + cmp coin3d_state, 1 + je coin_handle_flipping + cmp coin3d_state, 2 + je coin_handle_result + ret + +coin_handle_idle: + invoke Pressed3D, 26h ; UP + test eax, eax + jnz coin_bet_up + invoke Pressed3D, 57h ; 'W' + test eax, eax + jnz coin_bet_up + invoke Pressed3D, 28h ; DOWN + test eax, eax + jnz coin_bet_down + invoke Pressed3D, 53h ; 'S' + test eax, eax + jnz coin_bet_down + invoke Pressed3D, 31h ; '1' + test eax, eax + jnz coin_pick_1 + invoke Pressed3D, 32h ; '2' + test eax, eax + jnz coin_pick_2 + invoke Pressed3D, 20h ; SPACE + test eax, eax + jnz coin_start_flip + ret + +coin_bet_up: + mov eax, coin3d_bet + add eax, 50 + cmp eax, bankroll + jle @F + mov eax, bankroll +@@: + cmp eax, 5000 + jle @F + mov eax, 5000 +@@: + mov coin3d_bet, eax + invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 + ret + +coin_bet_down: + mov eax, coin3d_bet + sub eax, 50 + cmp eax, 50 + jge @F + mov eax, 50 +@@: + mov coin3d_bet, eax + invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 + ret + +coin_pick_1: + mov coin3d_choice, 1 + invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 + ret + +coin_pick_2: + mov coin3d_choice, 2 + invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 + ret + +coin_start_flip: + mov eax, coin3d_bet + cmp eax, bankroll + jle @F + mov eax, bankroll + mov coin3d_bet, eax + test eax, eax + jz coin_done +@@: + mov eax, coin3d_bet + sub bankroll, eax + mov coin3d_state, 1 + mov coin3d_timer, 40 + invoke PlayCasinoSound3D, OFFSET soundCoin, 0, 1 + ret + +coin_handle_flipping: + dec coin3d_timer + cmp coin3d_timer, 0 + jg coin_done + invoke RandomRange3D, 2 + inc eax + mov coin3d_result, eax + mov edx, coin3d_choice + cmp eax, edx + jne coin_flip_lost + + ; Won! + inc coin3d_streak + mov eax, coin3d_bet + shl eax, 1 + add bankroll, eax + mov coin3d_win, eax + mov coin3d_state, 2 + invoke PlayCasinoSound3D, OFFSET soundCoinDing, 0, 1 + ret + +coin_flip_lost: + mov coin3d_streak, 0 + mov coin3d_win, 0 + mov coin3d_state, 2 + invoke PlayCasinoSound3D, OFFSET soundLose, 0, 1 + ret + +coin_handle_result: + invoke Pressed3D, 20h + test eax, eax + jz coin_done + mov coin3d_state, 0 + invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 +coin_done: + ret +ENDIF +HandleCoinInput ENDP + +RenderCoinGame PROC uses ebx esi edi + local cyVal:DWORD + local rxVal:DWORD + local kx:DWORD + + call RenderNativeCoin3D + ret +IF 0 + ; Background & Cabinet border + invoke DrawBox, 0, 0, 320, 240, 00140906h + invoke DrawBoxBorder, 6, 6, 308, 228, 0022150Fh, 00482E1Bh, 3 + + ; Header + invoke DrawBoxBorder, 20, 12, 280, 26, 001C100Ah, 00FFD700h, 2 + invoke DrawString8x8, 44, 21, OFFSET textCoinTitle, 00FFFF00h + + ; Corner rivets + invoke DrawBox, 12, 12, 3, 3, 00FFD700h + invoke DrawBox, 306, 12, 3, 3, 00FFD700h + invoke DrawBox, 12, 226, 3, 3, 00FFD700h + invoke DrawBox, 306, 226, 3, 3, 00FFD700h + + ; Status meters + invoke DrawBoxBorder, 20, 44, 110, 18, 000E1A0Ah, 00224B1Ah, 1 + invoke DrawString8x8, 24, 49, OFFSET textBankPrompt, 003CFF3Ch + invoke FormatNumber, bankroll, OFFSET hudNumBuffer + invoke DrawString8x8, 72, 49, OFFSET hudNumBuffer, 003CFF3Ch + + invoke DrawBoxBorder, 190, 44, 110, 18, 001A100Ah, 003A2814h, 1 + invoke DrawString8x8, 194, 49, OFFSET textBetPrompt, 00FFD700h + invoke FormatNumber, coin3d_bet, OFFSET hudNumBuffer + invoke DrawString8x8, 254, 49, OFFSET hudNumBuffer, 00FFD700h + + ; Left: Heads + cmp coin3d_choice, 1 + jne coin_left_inactive + invoke DrawBoxBorder, 20, 72, 76, 68, 00101828h, 00FFFF00h, 2 + invoke DrawString8x8, 30, 78, OFFSET textCoinSide1, 00FFFF00h + invoke DrawDetailedCoin, 58, 106, 14, 14, 00D0A000h, 00FFD700h, 1 + invoke DrawString8x8, 24, 126, OFFSET textCoinSelected, 003CFF3Ch + jmp coin_right_side +coin_left_inactive: + invoke DrawBoxBorder, 20, 72, 76, 68, 000A101Ch, 00404855h, 1 + invoke DrawString8x8, 30, 78, OFFSET textCoinSide1, 00D0D8E0h + invoke DrawDetailedCoin, 58, 106, 14, 14, 009A7A00h, 00D0A000h, 1 + +coin_right_side: + ; Right: Tails + cmp coin3d_choice, 2 + jne coin_right_inactive + invoke DrawBoxBorder, 224, 72, 76, 68, 00101828h, 00FFFF00h, 2 + invoke DrawString8x8, 234, 78, OFFSET textCoinSide2, 00FFFF00h + invoke DrawDetailedCoin, 262, 106, 14, 14, 00D0A000h, 00FFD700h, 2 + invoke DrawString8x8, 228, 126, OFFSET textCoinSelected, 003CFF3Ch + jmp coin_center_area +coin_right_inactive: + invoke DrawBoxBorder, 224, 72, 76, 68, 000A101Ch, 00404855h, 1 + invoke DrawString8x8, 234, 78, OFFSET textCoinSide2, 00D0D8E0h + invoke DrawDetailedCoin, 262, 106, 14, 14, 009A7A00h, 00D0A000h, 2 + +coin_center_area: + ; Center spotlight + invoke DrawCircle, 160, 110, 48, 00121620h + invoke DrawCircle, 160, 110, 44, 00FFD700h + invoke DrawCircle, 160, 110, 42, 000E141Eh + + cmp coin3d_state, 1 + je coin_render_flipping + cmp coin3d_state, 2 + je coin_render_result + + ; Idle coin + invoke DrawDetailedCoin, 160, 110, 26, 26, 00D0A000h, 00FFD700h, coin3d_choice + jmp coin_render_keys + +coin_render_flipping: + mov eax, coin3d_timer + and eax, 7 + movzx eax, byte ptr [coinRxAnimTable + eax] + mov rxVal, eax + invoke DrawDetailedCoin, 160, 110, rxVal, 26, 00D0A000h, 00FFD700h, 0 + invoke DrawString8x8, 88, 160, OFFSET textCoinFlipping, 00FFFF00h + jmp coin_render_keys + +coin_render_result: + invoke DrawDetailedCoin, 160, 110, 26, 26, 00D0A000h, 00FFD700h, coin3d_result + mov eax, coin3d_result + cmp eax, coin3d_choice + jne coin_render_loss_msg + + ; Win banner + invoke DrawBoxBorder, 44, 154, 232, 22, 000E141Eh, 003CFF3Ch, 1 + invoke DrawString8x8, 64, 161, OFFSET textCoinWin, 003CFF3Ch + invoke FormatNumber, coin3d_win, OFFSET hudNumBuffer + invoke DrawString8x8, 152, 161, OFFSET hudNumBuffer, 003CFF3Ch + jmp coin_render_keys + +coin_render_loss_msg: + invoke DrawBoxBorder, 44, 154, 232, 22, 000E141Eh, 00C81414h, 1 + invoke DrawString8x8, 114, 161, OFFSET textCoinLose, 00FF6464h + +coin_render_keys: + mov kx, 16 + xor eax, eax + cmp coin3d_choice, 1 + sete al + invoke DrawKeycap3D, kx, 192, OFFSET textCoinKey1, eax + add kx, eax + + xor eax, eax + cmp coin3d_choice, 2 + sete al + invoke DrawKeycap3D, kx, 192, OFFSET textCoinKey2, eax + add kx, eax + + invoke DrawKeycap3D, kx, 192, OFFSET textCoinKeySpace, 1 + add kx, eax + + invoke DrawKeycap3D, kx, 192, OFFSET textKeyEsc, 0 + ret +ENDIF +RenderCoinGame ENDP + +; ============================================================================== +; IN-ENGINE 2.5D MINI-GAME: CRAPS / DICE +; ============================================================================== +DrawCrapsDie PROC uses ebx esi edi, x:DWORD, y:DWORD, sizeVal:DWORD, valNum:DWORD + ; Drop shadow + mov eax, x + add eax, 3 + mov edx, y + add edx, sizeVal + invoke DrawBox, eax, edx, sizeVal, 3, 00081403h + + mov eax, x + add eax, sizeVal + mov edx, y + add edx, 3 + invoke DrawBox, eax, edx, 3, sizeVal, 00081403h + + ; Ivory body & bevel + invoke DrawBoxBorder, x, y, sizeVal, sizeVal, 00FAF4F0h, 00403535h, 1 + mov eax, x + inc eax + mov edx, y + inc edx + mov ecx, sizeVal + sub ecx, 2 + invoke DrawBox, eax, edx, ecx, 1, 00FFFFFFh + invoke DrawBox, eax, edx, 1, ecx, 00FFFFFFh + + ; Ruby pips (00C81515h) + mov eax, valNum + test al, 1 + jz @F + ; Center pip + mov eax, x + add eax, 18 + mov edx, y + add edx, 18 + invoke DrawCircle, eax, edx, 3, 00C81515h + dec eax + dec edx + invoke DrawPixel, eax, edx, 00FFFFFFh +@@: + cmp valNum, 2 + jl die_pips_done + mov eax, x + add eax, 9 + mov edx, y + add edx, 9 + invoke DrawCircle, eax, edx, 3, 00C81515h + mov eax, x + add eax, 27 + mov edx, y + add edx, 27 + invoke DrawCircle, eax, edx, 3, 00C81515h + + cmp valNum, 4 + jl die_pips_done + mov eax, x + add eax, 27 + mov edx, y + add edx, 9 + invoke DrawCircle, eax, edx, 3, 00C81515h + mov eax, x + add eax, 9 + mov edx, y + add edx, 27 + invoke DrawCircle, eax, edx, 3, 00C81515h + + cmp valNum, 6 + jl die_pips_done + mov eax, x + add eax, 9 + mov edx, y + add edx, 18 + invoke DrawCircle, eax, edx, 3, 00C81515h + mov eax, x + add eax, 27 + mov edx, y + add edx, 18 + invoke DrawCircle, eax, edx, 3, 00C81515h + +die_pips_done: + ret +DrawCrapsDie ENDP + +InitDiceGame PROC + mov dice3d_state, 0 + mov dice3d_timer, 0 + mov dice3d_win, 0 + ret +InitDiceGame ENDP + +HandleDiceInput PROC + cmp dice3d_state, 0 + je dice_handle_idle + cmp dice3d_state, 1 + je dice_handle_rolling + cmp dice3d_state, 2 + je dice_handle_result + ret + +dice_handle_idle: + invoke Pressed3D, 26h ; UP + test eax, eax + jnz dice_bet_up + invoke Pressed3D, 57h ; 'W' + test eax, eax + jnz dice_bet_up + invoke Pressed3D, 28h ; DOWN + test eax, eax + jnz dice_bet_down + invoke Pressed3D, 53h ; 'S' + test eax, eax + jnz dice_bet_down + invoke Pressed3D, 31h ; '1' + test eax, eax + jnz dice_pick_1 + invoke Pressed3D, 32h ; '2' + test eax, eax + jnz dice_pick_2 + invoke Pressed3D, 20h ; SPACE + test eax, eax + jnz dice_start_roll + ret + +dice_bet_up: + mov eax, dice3d_bet + add eax, 50 + cmp eax, bankroll + jle @F + mov eax, bankroll +@@: + cmp eax, 5000 + jle @F + mov eax, 5000 +@@: + mov dice3d_bet, eax + invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 + ret + +dice_bet_down: + mov eax, dice3d_bet + sub eax, 50 + cmp eax, 50 + jge @F + mov eax, 50 +@@: + mov dice3d_bet, eax + invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 + ret + +dice_pick_1: + mov dice3d_choice, 1 + invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 + ret + +dice_pick_2: + mov dice3d_choice, 2 + invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 + ret + +dice_start_roll: + mov eax, dice3d_bet + cmp eax, bankroll + jle @F + mov eax, bankroll + mov dice3d_bet, eax + test eax, eax + jz dice_done +@@: + mov eax, dice3d_bet + test eax, eax + jle dice_done + sub bankroll, eax + mov dice3d_state, 1 + mov dice3d_timer, 0 + invoke RandomRange3D, 6 + inc eax + mov dice3d_val1, eax + invoke RandomRange3D, 6 + inc eax + mov dice3d_val2, eax + invoke PlayCasinoSound3D, OFFSET soundDiceRoll, 0, 1 + call SaveProgress3D + ret + +dice_handle_rolling: + mov eax, deltaTime3D + add dice3d_timer, eax + cmp dice3d_timer, 1600 + jb dice_done + mov dice3d_timer, 1600 + mov eax, dice3d_val2 + mov edx, dice3d_val1 + add edx, eax + mov dice3d_sum, edx + + ; Parity check + mov eax, edx + and eax, 1 + jnz dice_sum_is_odd + ; Even + mov eax, 1 + jmp dice_check_win +dice_sum_is_odd: + mov eax, 2 + +dice_check_win: + cmp eax, dice3d_choice + jne dice_roll_lost + + ; Won! + mov eax, dice3d_bet + shl eax, 1 + add bankroll, eax + mov dice3d_win, eax + mov dice3d_state, 2 + invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 + invoke NpcRecordRound3D,8,1 + call SaveProgress3D + ret + +dice_roll_lost: + mov dice3d_win, 0 + mov dice3d_state, 2 + invoke PlayCasinoSound3D, OFFSET soundLose, 0, 1 + invoke NpcRecordRound3D,8,0 + call SaveProgress3D + ret + +dice_handle_result: + invoke Pressed3D, 20h + test eax, eax + jz dice_done + mov dice3d_state, 0 + invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 +dice_done: + ret +HandleDiceInput ENDP + +RenderDiceGame PROC uses ebx esi edi + local kx:DWORD + + ; Mahogany frame & Deep Felt Green table + invoke DrawBox, 0, 0, 320, 240, 00140906h + invoke DrawBoxBorder, 6, 6, 308, 228, 000A3816h, 00FFD700h, 2 + + ; Header + invoke DrawBoxBorder, 20, 12, 280, 26, 00072E13h, 00FFD700h, 2 + invoke DrawString8x8, 116, 21, OFFSET textDiceTitle, 00FFFF00h + + ; Status + invoke DrawBoxBorder, 20, 44, 110, 18, 00072E13h, 001B4B22h, 1 + invoke DrawString8x8, 24, 49, OFFSET textBankPrompt, 003CFF3Ch + invoke FormatNumber, bankroll, OFFSET hudNumBuffer + invoke DrawString8x8, 72, 49, OFFSET hudNumBuffer, 003CFF3Ch + + invoke DrawBoxBorder, 190, 44, 110, 18, 00072E13h, 001B4B22h, 1 + invoke DrawString8x8, 194, 49, OFFSET textBetPrompt, 00FFD700h + invoke FormatNumber, dice3d_bet, OFFSET hudNumBuffer + invoke DrawString8x8, 258, 49, OFFSET hudNumBuffer, 00FFD700h + + ; [1] ×¨Ò + cmp dice3d_choice, 1 + jne dice_even_inactive + invoke DrawBoxBorder, 16, 70, 88, 48, 00072E13h, 00FFFF00h, 2 + invoke DrawString8x8, 30, 76, OFFSET textDiceEven, 00FFFF00h + invoke DrawString8x8, 22, 90, OFFSET textDiceEvenNums, 00FFD700h + invoke DrawString8x8, 26, 104, OFFSET textCoinSelected, 003CFF3Ch + jmp dice_odd_side +dice_even_inactive: + invoke DrawBoxBorder, 16, 70, 88, 48, 00072E13h, 001B4B22h, 1 + invoke DrawString8x8, 30, 76, OFFSET textDiceEven, 00D0D8E0h + invoke DrawString8x8, 22, 90, OFFSET textDiceEvenNums, 0080B090h + +dice_odd_side: + ; [2] ÍÅ×ÅÒ + cmp dice3d_choice, 2 + jne dice_odd_inactive + invoke DrawBoxBorder, 216, 70, 88, 48, 00072E13h, 00FFFF00h, 2 + invoke DrawString8x8, 226, 76, OFFSET textDiceOdd, 00FFFF00h + invoke DrawString8x8, 224, 90, OFFSET textDiceOddNums, 00FFD700h + invoke DrawString8x8, 226, 104, OFFSET textCoinSelected, 003CFF3Ch + jmp dice_center_cubes +dice_odd_inactive: + invoke DrawBoxBorder, 216, 70, 88, 48, 00072E13h, 001B4B22h, 1 + invoke DrawString8x8, 226, 76, OFFSET textDiceOdd, 00D0D8E0h + invoke DrawString8x8, 224, 90, OFFSET textDiceOddNums, 0080B090h + +dice_center_cubes: + call RenderDiceThrow3D + + cmp dice3d_state, 1 + je dice_render_rolling + cmp dice3d_state, 2 + je dice_render_result + jmp dice_render_keys + +dice_render_rolling: + invoke DrawString8x8, 76, 138, OFFSET textDiceRolling, 00FFFF00h + jmp dice_render_keys + +dice_render_result: + invoke DrawBoxBorder, 36, 130, 248, 36, 00072E13h, 00FFD700h, 1 + invoke DrawString8x8, 44, 135, OFFSET textDiceSumHdr, 00FFD700h + invoke FormatNumber, dice3d_val1, OFFSET hudNumBuffer + invoke DrawString8x8, 92, 135, OFFSET hudNumBuffer, 00FFFF00h + invoke DrawString8x8, 110, 135, OFFSET textDicePlus, 00FFD700h + invoke FormatNumber, dice3d_val2, OFFSET hudNumBuffer + invoke DrawString8x8, 126, 135, OFFSET hudNumBuffer, 00FFFF00h + invoke DrawString8x8, 144, 135, OFFSET textDiceEqual, 00FFD700h + invoke FormatNumber, dice3d_sum, OFFSET hudNumBuffer + invoke DrawString8x8, 168, 135, OFFSET hudNumBuffer, 00FFFF00h + + mov eax, dice3d_sum + and eax, 1 + jnz dice_render_odd_res + invoke DrawString8x8, 186, 135, OFFSET textDiceEvenResult, 003CFF3Ch + jmp dice_render_outcome +dice_render_odd_res: + invoke DrawString8x8, 186, 135, OFFSET textDiceOddResult, 003CFF3Ch + +dice_render_outcome: + mov eax, dice3d_win + test eax, eax + jz dice_render_loss_outcome + invoke DrawString8x8, 68, 150, OFFSET textDiceWin, 003CFF3Ch + invoke FormatNumber, dice3d_win, OFFSET hudNumBuffer + invoke DrawString8x8, 156, 150, OFFSET hudNumBuffer, 003CFF3Ch + invoke DrawString8x8, 188, 150, OFFSET textDiceWinMult, 003CFF3Ch + jmp dice_render_keys + +dice_render_loss_outcome: + invoke DrawString8x8, 116, 150, OFFSET textDiceLose, 00FF6464h + +dice_render_keys: + mov kx, 16 + xor eax, eax + cmp dice3d_choice, 1 + sete al + invoke DrawKeycap3D, kx, 192, OFFSET textDiceKey1, eax + add kx, eax + + xor eax, eax + cmp dice3d_choice, 2 + sete al + invoke DrawKeycap3D, kx, 192, OFFSET textDiceKey2, eax + add kx, eax + + invoke DrawKeycap3D, kx, 192, OFFSET textDiceKeySpace, 1 + add kx, eax + + invoke DrawKeycap3D, kx, 192, OFFSET textKeyEsc, 0 + ret +RenderDiceGame ENDP + +; ============================================================================== +; IN-ENGINE 2.5D MINI-GAME: SKULLS & CUPS (ÍÀϨÐÑÒÊÈ) +; ============================================================================== +DrawGlowingOrb PROC uses ebx esi edi, cxVal:DWORD, cyVal:DWORD + invoke DrawCircle, cxVal, cyVal, 14, 002E1E08h + invoke DrawCircle, cxVal, cyVal, 11, 00583A10h + invoke DrawCircle, cxVal, cyVal, 8, 008A581Ah + invoke DrawCircle, cxVal, cyVal, 6, 00D0B000h + invoke DrawCircle, cxVal, cyVal, 4, 00FFE000h + mov eax, cxVal + dec eax + mov edx, cyVal + dec edx + invoke DrawCircle, eax, edx, 2, 00FFFF80h + dec eax + dec edx + invoke DrawPixel, eax, edx, 00FFFFFFh + ret +DrawGlowingOrb ENDP + +DrawGothicCup PROC uses ebx esi edi, x:DWORD, y:DWORD, cupId:DWORD, isLifted:DWORD, hasBall:DWORD + local liftY:DWORD + + mov eax, y + cmp isLifted, 0 + je @F + sub eax, 36 +@@: + mov liftY, eax + + ; Drop shadow + cmp isLifted, 0 + jne cup_shadow_lifted + mov eax, x + add eax, 6 + mov edx, y + add edx, 42 + invoke DrawBox, eax, edx, 36, 4, 0010040Ah + jmp cup_ball_check +cup_shadow_lifted: + mov eax, x + add eax, 10 + mov edx, y + add edx, 42 + invoke DrawBox, eax, edx, 28, 2, 001A0612h + +cup_ball_check: + cmp isLifted, 0 + je cup_body_draw + cmp hasBall, 0 + je cup_body_draw + mov eax, x + add eax, 24 + mov edx, y + add edx, 26 + invoke DrawGlowingOrb, eax, edx + +cup_body_draw: + ; Base pedestal + mov eax, x + add eax, 6 + mov edx, liftY + add edx, 36 + invoke DrawBoxBorder, eax, edx, 36, 6, 00301A22h, 00D0B000h, 1 + + ; Stem + mov eax, x + add eax, 18 + mov edx, liftY + add edx, 28 + invoke DrawBox, eax, edx, 12, 8, 00452533h + mov eax, x + add eax, 22 + invoke DrawBox, eax, edx, 4, 8, 006E4055h + + ; Goblet Bowl + mov eax, x + add eax, 8 + mov edx, liftY + add edx, 8 + invoke DrawBoxBorder, eax, edx, 32, 20, 00401E2Dh, 00FFD700h, 1 + + mov eax, x + add eax, 14 + mov edx, liftY + add edx, 10 + invoke DrawBox, eax, edx, 6, 16, 00703550h + mov eax, x + add eax, 17 + invoke DrawBox, eax, edx, 3, 16, 00A05078h + + ; Golden Rim + mov eax, x + add eax, 4 + mov edx, liftY + add edx, 2 + invoke DrawBoxBorder, eax, edx, 40, 7, 00200A15h, 00FFFF00h, 1 + mov eax, x + add eax, 12 + mov edx, liftY + add edx, 4 + invoke DrawBox, eax, edx, 16, 2, 00FFFF00h + + ; Skull face emblem + mov eax, x + add eax, 21 + mov edx, liftY + add edx, 12 + invoke DrawBox, eax, edx, 6, 5, 00FFD700h + mov eax, x + add eax, 22 + mov edx, liftY + add edx, 17 + invoke DrawBox, eax, edx, 4, 3, 00FFD700h + mov eax, x + add eax, 22 + mov edx, liftY + add edx, 14 + invoke DrawPixel, eax, edx, 00200A15h + mov eax, x + add eax, 24 + invoke DrawPixel, eax, edx, 00200A15h + + ; Cup number label + mov eax, x + add eax, 21 + mov edx, liftY + add edx, 24 + mov ecx, cupId + add ecx, '1' + invoke DrawChar8x8, eax, edx, ecx, 00FFFF00h + ret +DrawGothicCup ENDP + +InitSkullsGame PROC + mov skulls3d_state, 0 + mov skulls3d_timer, 0 + mov skulls3d_win, 0 + mov skulls3d_choice, 1 + mov skulls3d_cup0, 0 + mov skulls3d_cup1, 1 + mov skulls3d_cup2, 2 + invoke RandomRange3D, 3 + mov skulls3d_ballPos, eax + ret +InitSkullsGame ENDP + +FinalizeSkullsGuess PROC uses ebx + cmp skulls3d_state,3 + jne skulls_guess_done + mov eax, skulls3d_choice + cmp eax, skulls3d_ballPos + jne skulls_guess_wrong + + ; Correct! 3x payout + mov eax, skulls3d_bet + imul eax, 3 + add bankroll, eax + mov skulls3d_win, eax + mov skulls3d_state, 4 + invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 + invoke NpcRecordRound3D,9,1 + call SaveProgress3D + ret + +skulls_guess_wrong: + mov skulls3d_win, 0 + mov skulls3d_state, 4 + invoke PlayCasinoSound3D, OFFSET soundLose, 0, 1 + invoke NpcRecordRound3D,9,0 + call SaveProgress3D +skulls_guess_done: + ret +FinalizeSkullsGuess ENDP + +HandleSkullsInput PROC + cmp skulls3d_state, 0 + je skulls_handle_idle + cmp skulls3d_state, 1 + je skulls_handle_show + cmp skulls3d_state, 2 + je skulls_handle_shuffle + cmp skulls3d_state, 3 + je skulls_handle_pick + cmp skulls3d_state, 4 + je skulls_handle_reveal + ret + +skulls_handle_idle: + invoke Pressed3D, 26h ; UP + test eax, eax + jnz skulls_bet_up + invoke Pressed3D, 57h ; 'W' + test eax, eax + jnz skulls_bet_up + invoke Pressed3D, 28h ; DOWN + test eax, eax + jnz skulls_bet_down + invoke Pressed3D, 53h ; 'S' + test eax, eax + jnz skulls_bet_down + invoke Pressed3D, 20h ; SPACE + test eax, eax + jnz skulls_start_game + ret + +skulls_bet_up: + mov eax, skulls3d_bet + add eax, 50 + cmp eax, bankroll + jle @F + mov eax, bankroll +@@: + cmp eax, 5000 + jle @F + mov eax, 5000 +@@: + mov skulls3d_bet, eax + invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 + ret + +skulls_bet_down: + mov eax, skulls3d_bet + sub eax, 50 + cmp eax, 50 + jge @F + mov eax, 50 +@@: + mov skulls3d_bet, eax + invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 + ret + +skulls_start_game: + mov eax, skulls3d_bet + cmp eax, bankroll + jle @F + mov eax, bankroll + mov skulls3d_bet, eax + test eax, eax + jz skulls_input_done +@@: + mov eax, skulls3d_bet + sub bankroll, eax + invoke RandomRange3D, 3 + mov skulls3d_ballPos, eax + mov skulls3d_cup0, 0 + mov skulls3d_cup1, 1 + mov skulls3d_cup2, 2 + + ; Pre-generate 3 dynamic swap pairs + invoke RandomRange3D, 3 + mov skulls3d_swapPair0, eax + invoke RandomRange3D, 3 + mov skulls3d_swapPair1, eax + invoke RandomRange3D, 3 + mov skulls3d_swapPair2, eax + + mov skulls3d_state, 1 + mov skulls3d_timer, 0 + invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 + ret + +skulls_handle_show: + inc skulls3d_timer + cmp skulls3d_timer, 45 + jl skulls_input_done + ; Transition to Phase 2: Active Shuffle Animation + mov skulls3d_state, 2 + mov skulls3d_timer, 0 + invoke PlayCasinoSound3D, OFFSET soundShuffle, 0, 1 + ret + +skulls_handle_shuffle: + inc skulls3d_timer + cmp skulls3d_timer, 60 + jl skulls_input_done + ; Transition to Phase 3: Pick cup + mov skulls3d_state, 3 + mov skulls3d_timer, 0 + ret + +skulls_handle_pick: + invoke Pressed3D, 31h ; '1' + test eax, eax + jnz skulls_pick_1 + invoke Pressed3D, 32h ; '2' + test eax, eax + jnz skulls_pick_2 + invoke Pressed3D, 33h ; '3' + test eax, eax + jnz skulls_pick_3 + ret + +skulls_pick_1: + mov skulls3d_choice, 0 + call FinalizeSkullsGuess + ret + +skulls_pick_2: + mov skulls3d_choice, 1 + call FinalizeSkullsGuess + ret + +skulls_pick_3: + mov skulls3d_choice, 2 + call FinalizeSkullsGuess + ret + +skulls_handle_reveal: + invoke Pressed3D, 20h + test eax, eax + jz skulls_input_done + mov skulls3d_state, 0 + invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 +skulls_input_done: + ret +HandleSkullsInput ENDP + +RenderSkullsGame PROC uses ebx esi edi + local kx:DWORD + local passTick:DWORD, curPair:DWORD, swapSlotA:DWORD, swapSlotB:DWORD + local xA:DWORD, xB:DWORD, curXA:DWORD, curXB:DWORD, curYA:DWORD, curYB:DWORD + local distX:DWORD, dxVal:DWORD, archY:DWORD + + ; Mahogany & Gothic Purple table + invoke DrawBox, 0, 0, 320, 240, 00140906h + invoke DrawBoxBorder, 6, 6, 308, 228, 00300F22h, 00FFD700h, 2 + + ; Header + invoke DrawBoxBorder, 20, 12, 280, 26, 001A0812h, 00FFD700h, 2 + invoke DrawString8x8, 44, 21, OFFSET textSkullsTitle, 00FFFF00h + + ; Status + invoke DrawBoxBorder, 20, 44, 110, 18, 001A0812h, 00452033h, 1 + invoke DrawString8x8, 24, 49, OFFSET textBankPrompt, 003CFF3Ch + invoke FormatNumber, bankroll, OFFSET hudNumBuffer + invoke DrawString8x8, 72, 49, OFFSET hudNumBuffer, 003CFF3Ch + + invoke DrawBoxBorder, 190, 44, 110, 18, 001A0812h, 00452033h, 1 + invoke DrawString8x8, 194, 49, OFFSET textBetPrompt, 00FFD700h + invoke FormatNumber, skulls3d_bet, OFFSET hudNumBuffer + invoke DrawString8x8, 254, 49, OFFSET hudNumBuffer, 00FFD700h + + ; Phase Prompts + cmp skulls3d_state, 0 + jne @F + invoke DrawString8x8, 56, 62, OFFSET textSkullsPhase0, 00FFD700h + jmp skulls_draw_idle_cups +@@: + cmp skulls3d_state, 1 + jne @F + invoke DrawString8x8, 56, 62, OFFSET textSkullsPhase1, 00FFFF00h + jmp skulls_draw_phase1_cups +@@: + cmp skulls3d_state, 2 + jne @F + invoke DrawString8x8, 44, 62, OFFSET textSkullsPhase2, 00FFFF00h + jmp skulls_draw_animated_cups +@@: + cmp skulls3d_state, 3 + jne @F + invoke DrawString8x8, 28, 62, OFFSET textSkullsPhase3, 00FFFF00h + jmp skulls_draw_idle_cups +@@: + ; Phase 4: Reveal outcome + mov eax, skulls3d_win + test eax, eax + jz skulls_reveal_loss_text + invoke DrawString8x8, 40, 62, OFFSET textSkullsWin, 003CFF3Ch + invoke FormatNumber, skulls3d_win, OFFSET hudNumBuffer + invoke DrawString8x8, 136, 62, OFFSET hudNumBuffer, 003CFF3Ch + invoke DrawString8x8, 168, 62, OFFSET textSkullsWinMult, 003CFF3Ch + jmp skulls_draw_reveal_cups + +skulls_reveal_loss_text: + invoke DrawString8x8, 40, 62, OFFSET textSkullsLose, 00FF6464h + jmp skulls_draw_reveal_cups + +skulls_draw_idle_cups: + ; Draw resting cups at static slots: Slot 0 (X=36), Slot 1 (X=136), Slot 2 (X=236) + invoke DrawGothicCup, 36, 114, skulls3d_cup0, 0, 0 + invoke DrawGothicCup, 136, 114, skulls3d_cup1, 0, 0 + invoke DrawGothicCup, 236, 114, skulls3d_cup2, 0, 0 + jmp skulls_render_controls + +skulls_draw_phase1_cups: + ; Draw with golden ball showing under starting cup + mov ebx, 0 + mov edx, 0 + cmp skulls3d_ballPos, 0 + jne @F + mov ebx, 1 + mov edx, 1 +@@: + invoke DrawGothicCup, 36, 114, skulls3d_cup0, ebx, edx + + mov ebx, 0 + mov edx, 0 + cmp skulls3d_ballPos, 1 + jne @F + mov ebx, 1 + mov edx, 1 +@@: + invoke DrawGothicCup, 136, 114, skulls3d_cup1, ebx, edx + + mov ebx, 0 + mov edx, 0 + cmp skulls3d_ballPos, 2 + jne @F + mov ebx, 1 + mov edx, 1 +@@: + invoke DrawGothicCup, 236, 114, skulls3d_cup2, ebx, edx + jmp skulls_render_controls + +skulls_draw_animated_cups: + ; 60 frames = 3 passes of 20 frames + mov eax, skulls3d_timer + cmp eax, 20 + jbe pass_0 + cmp eax, 40 + jbe pass_1 + sub eax, 41 + mov passTick, eax + mov eax, skulls3d_swapPair2 + mov curPair, eax + jmp setup_pass + +pass_0: + dec eax + mov passTick, eax + mov eax, skulls3d_swapPair0 + mov curPair, eax + jmp setup_pass + +pass_1: + sub eax, 21 + mov passTick, eax + mov eax, skulls3d_swapPair1 + mov curPair, eax + +setup_pass: + ; curPair determines swap pair: + ; 0: swap slot 0 (X=36) and slot 1 (X=136) + ; 1: swap slot 1 (X=136) and slot 2 (X=236) + ; 2: swap slot 0 (X=36) and slot 2 (X=236) + cmp curPair, 1 + je pair_1 + cmp curPair, 2 + je pair_2 + mov swapSlotA, 0 + mov swapSlotB, 1 + mov xA, 36 + mov xB, 136 + jmp calc_coords +pair_1: + mov swapSlotA, 1 + mov swapSlotB, 2 + mov xA, 136 + mov xB, 236 + jmp calc_coords +pair_2: + mov swapSlotA, 0 + mov swapSlotB, 2 + mov xA, 36 + mov xB, 236 + +calc_coords: + ; distX = xB - xA + mov eax, xB + sub eax, xA + mov distX, eax + + ; dxVal = (distX * passTick) / 20 + mov eax, distX + imul eax, passTick + xor edx, edx + mov ecx, 20 + div ecx + mov dxVal, eax + + ; curXA = xA + dxVal + mov eax, xA + add eax, dxVal + mov curXA, eax + + ; curXB = xB - dxVal + mov eax, xB + sub eax, dxVal + mov curXB, eax + + ; archY = (passTick * (20 - passTick)) / 10 + mov eax, passTick + mov ecx, 20 + sub ecx, eax + imul eax, ecx + xor edx, edx + mov ecx, 10 + div ecx + mov archY, eax + + ; Cup A hops UP: 114 - archY + mov eax, 114 + sub eax, archY + mov curYA, eax + + ; Cup B hops DOWN: 114 + archY + mov eax, 114 + add eax, archY + mov curYB, eax + + ; Check if pass ended (frame 19): swap ball position and cups + cmp passTick, 19 + jne draw_active_shuffle + + ; Swap ball position if involved + mov eax, skulls3d_ballPos + cmp eax, swapSlotA + jne check_ball_b + mov edx, swapSlotB + mov skulls3d_ballPos, edx + jmp swap_slot_identities +check_ball_b: + cmp eax, swapSlotB + jne swap_slot_identities + mov edx, swapSlotA + mov skulls3d_ballPos, edx + +swap_slot_identities: + cmp curPair, 1 + je swap_ids_1_2 + cmp curPair, 2 + je swap_ids_0_2 + ; swap 0 and 1 + mov eax, skulls3d_cup0 + xchg eax, skulls3d_cup1 + mov skulls3d_cup0, eax + jmp swap_sound_tick +swap_ids_1_2: + mov eax, skulls3d_cup1 + xchg eax, skulls3d_cup2 + mov skulls3d_cup1, eax + jmp swap_sound_tick +swap_ids_0_2: + mov eax, skulls3d_cup0 + xchg eax, skulls3d_cup2 + mov skulls3d_cup0, eax + +swap_sound_tick: + invoke PlayCasinoSound3D, OFFSET soundShuffle, 0, 1 + +draw_active_shuffle: + ; Draw stationary cup + cmp curPair, 1 + je draw_stat_cup0 + cmp curPair, 2 + je draw_stat_cup1 + ; Stationary cup is slot 2 (X=236) + invoke DrawGothicCup, 236, 114, skulls3d_cup2, 0, 0 + jmp draw_moving_cups +draw_stat_cup0: + ; Stationary cup is slot 0 (X=36) + invoke DrawGothicCup, 36, 114, skulls3d_cup0, 0, 0 + jmp draw_moving_cups +draw_stat_cup1: + ; Stationary cup is slot 1 (X=136) + invoke DrawGothicCup, 136, 114, skulls3d_cup1, 0, 0 + +draw_moving_cups: + ; Moving Cup A and Moving Cup B + cmp curPair, 1 + je ids_pair_1 + cmp curPair, 2 + je ids_pair_2 + mov eax, skulls3d_cup0 + mov ebx, skulls3d_cup1 + jmp draw_the_pair +ids_pair_1: + mov eax, skulls3d_cup1 + mov ebx, skulls3d_cup2 + jmp draw_the_pair +ids_pair_2: + mov eax, skulls3d_cup0 + mov ebx, skulls3d_cup2 + +draw_the_pair: + push ebx + invoke DrawGothicCup, curXA, curYA, eax, 0, 0 + pop ebx + invoke DrawGothicCup, curXB, curYB, ebx, 0, 0 + jmp skulls_render_controls + +skulls_draw_reveal_cups: + ; Reveal Phase: lift chosen cup and lift actual ball cup if different + ; Slot 0 + mov ebx, 0 + mov edx, 0 + cmp skulls3d_choice, 0 + je slot0_is_lifted + cmp skulls3d_ballPos, 0 + jne @F +slot0_is_lifted: + mov ebx, 1 + cmp skulls3d_ballPos, 0 + sete dl +@@: + invoke DrawGothicCup, 36, 114, skulls3d_cup0, ebx, edx + + ; Slot 1 + mov ebx, 0 + mov edx, 0 + cmp skulls3d_choice, 1 + je slot1_is_lifted + cmp skulls3d_ballPos, 1 + jne @F +slot1_is_lifted: + mov ebx, 1 + cmp skulls3d_ballPos, 1 + sete dl +@@: + invoke DrawGothicCup, 136, 114, skulls3d_cup1, ebx, edx + + ; Slot 2 + mov ebx, 0 + mov edx, 0 + cmp skulls3d_choice, 2 + je slot2_is_lifted + cmp skulls3d_ballPos, 2 + jne @F +slot2_is_lifted: + mov ebx, 1 + cmp skulls3d_ballPos, 2 + sete dl +@@: + invoke DrawGothicCup, 236, 114, skulls3d_cup2, ebx, edx + +skulls_render_controls: + ; Cup selection slot labels [1], [2], [3] + invoke DrawString8x8, 54, 168, OFFSET textSkullsKey1, 00D0D8E0h + invoke DrawString8x8, 150, 168, OFFSET textSkullsKey2, 00D0D8E0h + invoke DrawString8x8, 250, 168, OFFSET textSkullsKey3, 00D0D8E0h + + ; Keycaps + mov kx, 16 + xor eax, eax + cmp skulls3d_state, 3 + je key1_active + cmp skulls3d_choice, 0 + sete al + jmp draw_key1 +key1_active: + mov eax, 1 +draw_key1: + invoke DrawKeycap3D, kx, 192, OFFSET textSkullsKey1, eax + add kx, eax + + xor eax, eax + cmp skulls3d_state, 3 + je key2_active + cmp skulls3d_choice, 1 + sete al + jmp draw_key2 +key2_active: + mov eax, 1 +draw_key2: + invoke DrawKeycap3D, kx, 192, OFFSET textSkullsKey2, eax + add kx, eax + + xor eax, eax + cmp skulls3d_state, 3 + je key3_active + cmp skulls3d_choice, 2 + sete al + jmp draw_key3 +key3_active: + mov eax, 1 +draw_key3: + invoke DrawKeycap3D, kx, 192, OFFSET textSkullsKey3, eax + add kx, eax + + xor eax, eax + cmp skulls3d_state, 0 + je start_active + cmp skulls3d_state, 4 + je start_active + jmp draw_start_key +start_active: + mov eax, 1 +draw_start_key: + invoke DrawKeycap3D, kx, 192, OFFSET textSkullsKeySpace, eax + add kx, eax + + invoke DrawKeycap3D, kx, 192, OFFSET textKeyEsc, 0 + ret +RenderSkullsGame ENDP + +InitSkillGame PROC + mov skill3d_state, 0 + mov skill3d_timer, 0 + mov skill3d_hits, 0 + mov skill3d_misses, 0 + mov skill3d_needle, 55 + mov skill3d_speed, 4 + mov skill3d_dir, 1 + mov skill3d_last_result, 0 + mov skill3d_win_amount, 0 + + ; Randomize initial zone: 80 + RandomRange(90) -> 80..170 + invoke RandomRange3D, 90 + add eax, 80 + mov skill3d_zone_start, eax + + ; Great zone: start + 20 + RandomRange(12) + invoke RandomRange3D, 12 + add eax, skill3d_zone_start + add eax, 20 + mov skill3d_great_start, eax + ret +InitSkillGame ENDP + +HandleSkillInput PROC uses ebx esi + mov eax, skill3d_state + cmp eax, 0 + je skill_handle_ready + cmp eax, 1 + je skill_handle_active + cmp eax, 2 + je skill_handle_round_wait + cmp eax, 3 + je skill_handle_round_wait + cmp eax, 4 + je skill_handle_end_wait + cmp eax, 5 + je skill_handle_end_wait + ret + +skill_handle_ready: + invoke Pressed3D, 26h ; UP + test eax, eax + jnz skill_bet_up + invoke Pressed3D, 57h ; 'W' + test eax, eax + jnz skill_bet_up + invoke Pressed3D, 28h ; DOWN + test eax, eax + jnz skill_bet_down + invoke Pressed3D, 53h ; 'S' + test eax, eax + jnz skill_bet_down + jmp skill_check_start + +skill_bet_up: + mov eax, skill3d_bet + add eax, 50 + cmp eax, bankroll + jle @F + mov eax, bankroll +@@: + cmp eax, 5000 + jle @F + mov eax, 5000 +@@: + mov skill3d_bet, eax + invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 + ret + +skill_bet_down: + mov eax, skill3d_bet + sub eax, 50 + cmp eax, 50 + jge @F + mov eax, 50 +@@: + mov skill3d_bet, eax + invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 + ret + +skill_check_start: + invoke Pressed3D, 20h ; SPACE + test eax, eax + jz skill_input_done + + ; Deduct bet on game start if beginning of run + mov eax, skill3d_hits + or eax, skill3d_misses + jnz @F + mov eax, skill3d_bet + cmp eax, bankroll + jle skill_has_funds + mov eax, bankroll + mov skill3d_bet, eax + test eax, eax + jz skill_input_done +skill_has_funds: + mov eax, skill3d_bet + sub bankroll, eax +@@: + mov skill3d_state, 1 + mov skill3d_needle, 55 + mov skill3d_dir, 1 + invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 + ret + +skill_handle_active: + ; Move needle smoothly + mov eax, skill3d_needle + mov edx, skill3d_speed + cmp skill3d_dir, 1 + je skill_move_right + sub eax, edx + cmp eax, 52 + jge skill_update_needle + mov eax, 52 + mov skill3d_dir, 1 + jmp skill_update_needle +skill_move_right: + add eax, edx + cmp eax, 268 + jle skill_update_needle + mov eax, 268 + mov skill3d_dir, -1 +skill_update_needle: + mov skill3d_needle, eax + + ; Check SPACE pressed (Reaction Hit Attempt!) + invoke Pressed3D, 20h + test eax, eax + jz skill_input_done + + ; Is needle in Great Sweet Spot? + mov eax, skill3d_needle + mov edx, skill3d_great_start + cmp eax, edx + jl check_success_zone + add edx, skill3d_great_width + cmp eax, edx + jg check_success_zone + + ; GREAT HIT! + mov skill3d_last_result, 2 + add skill3d_hits, 2 + mov skill3d_state, 2 + mov skill3d_timer, 40 + invoke PlayCasinoSound3D, OFFSET soundSkillPerfect, 0, 1 + jmp skill_check_finish_round + +check_success_zone: + mov eax, skill3d_needle + mov edx, skill3d_zone_start + cmp eax, edx + jl skill_was_miss + add edx, skill3d_zone_width + cmp eax, edx + jg skill_was_miss + + ; NORMAL HIT! + mov skill3d_last_result, 1 + inc skill3d_hits + mov skill3d_state, 2 + mov skill3d_timer, 40 + invoke PlayCasinoSound3D, OFFSET soundSkillHit, 0, 1 + jmp skill_check_finish_round + +skill_was_miss: + ; MISS! + mov skill3d_last_result, 0 + inc skill3d_misses + mov skill3d_state, 3 + mov skill3d_timer, 45 + invoke PlayCasinoSound3D, OFFSET soundSkillMiss, 0, 1 + +skill_check_finish_round: + cmp skill3d_hits, 5 + jge skill_game_escaped + cmp skill3d_misses, 3 + jge skill_game_lost + ret + +skill_game_escaped: + mov skill3d_state, 4 + mov skill3d_timer, 0 + ; Payout: 3x total return (+$2x bet profit) + mov eax, skill3d_bet + imul eax, 3 + add bankroll, eax + mov eax, skill3d_bet + shl eax, 1 + mov skill3d_win_amount, eax + invoke NpcRecordRound3D,10,1 + call SaveProgress3D + invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 + ret + +skill_game_lost: + mov skill3d_state, 5 + mov skill3d_timer, 0 + invoke NpcRecordRound3D,10,0 + call SaveProgress3D + invoke PlayCasinoSound3D, OFFSET soundLose, 0, 1 + ret + +skill_handle_round_wait: + dec skill3d_timer + cmp skill3d_timer, 0 + jg skill_input_done + + ; Next round setup + invoke RandomRange3D, 90 + add eax, 80 + mov skill3d_zone_start, eax + + invoke RandomRange3D, 12 + add eax, skill3d_zone_start + add eax, 20 + mov skill3d_great_start, eax + + mov eax, skill3d_hits + shr eax, 1 + add eax, 4 + mov skill3d_speed, eax + mov skill3d_state, 1 + ret + +skill_handle_end_wait: + invoke Pressed3D, 20h + test eax, eax + jz skill_input_done + call InitSkillGame + ret + +skill_input_done: + ret +HandleSkillInput ENDP + +RenderSkillGame PROC uses ebx esi edi + local kx:DWORD + local tx:DWORD + + ; Industrial Steel bezel + invoke DrawBox, 0, 0, 320, 240, 00121416h + invoke DrawBoxBorder, 6, 6, 308, 228, 001A1D20h, 00FFD700h, 2 + + ; Header + invoke DrawBoxBorder, 20, 12, 280, 26, 00121418h, 00FFD700h, 2 + invoke DrawString8x8, 40, 21, OFFSET textSkillTitle, 00FFFF00h + + ; Status + invoke DrawBoxBorder, 20, 44, 110, 18, 00121418h, 002A3540h, 1 + invoke DrawString8x8, 24, 49, OFFSET textBankPrompt, 003CFF3Ch + invoke FormatNumber, bankroll, OFFSET hudNumBuffer + invoke DrawString8x8, 72, 49, OFFSET hudNumBuffer, 003CFF3Ch + + invoke DrawBoxBorder, 190, 44, 110, 18, 00121418h, 002A3540h, 1 + invoke DrawString8x8, 194, 49, OFFSET textBetPrompt, 00FFD700h + invoke FormatNumber, skill3d_bet, OFFSET hudNumBuffer + invoke DrawString8x8, 254, 49, OFFSET hudNumBuffer, 00FFD700h + + ; Survivor Progress + invoke DrawString8x8, 24, 70, OFFSET textSkillHitsHdr, 003CFF3Ch + invoke FormatNumber, skill3d_hits, OFFSET hudNumBuffer + invoke DrawString8x8, 64, 70, OFFSET hudNumBuffer, 003CFF3Ch + + invoke DrawString8x8, 180, 70, OFFSET textSkillMissHdr, 00FF6464h + invoke FormatNumber, skill3d_misses, OFFSET hudNumBuffer + invoke DrawString8x8, 240, 70, OFFSET hudNumBuffer, 00FF6464h + + ; Dial Frame (Track: X=50..270, Y=102..134) + invoke DrawBoxBorder, 50, 102, 220, 32, 000F1114h, 00404855h, 2 + + ; Calibrated ticks + mov tx, 60 +skill_ticks_loop: + cmp tx, 260 + jge skill_draw_zones + invoke DrawBox, tx, 104, 1, 6, 00303845h + invoke DrawBox, tx, 126, 1, 6, 00303845h + add tx, 12 + jmp skill_ticks_loop + +skill_draw_zones: + ; Normal Success Zone (Green) + invoke DrawBoxBorder, skill3d_zone_start, 106, skill3d_zone_width, 24, 00155020h, 003CFF3Ch, 1 + + ; Great Zone (Gold) + invoke DrawBoxBorder, skill3d_great_start, 106, skill3d_great_width, 24, 00FFD700h, 00FFFF00h, 1 + + ; Pointer / Needle at skill3d_needle + mov eax, skill3d_needle + dec eax + invoke DrawBox, eax, 98, 3, 40, 00FFFFFFh + mov eax, skill3d_needle + sub eax, 2 + invoke DrawBox, eax, 96, 5, 2, 00FF3030h + invoke DrawBox, eax, 138, 5, 2, 00FF3030h + + ; Center prompts / outcome + cmp skill3d_state, 0 + jne @F + invoke DrawString8x8, 52, 150, OFFSET textSkillReadyMsg, 00FFD700h + invoke DrawString8x8, 76, 166, OFFSET textSkillPrompt, 00D0D8E0h + jmp skill_render_keys +@@: + cmp skill3d_state, 1 + jne @F + invoke DrawString8x8, 76, 150, OFFSET textSkillPrompt, 00FFFF00h + jmp skill_render_keys +@@: + cmp skill3d_state, 2 + jne @F + cmp skill3d_last_result, 2 + jne skill_normal_hit_text + invoke DrawString8x8, 36, 150, OFFSET textSkillGreatMsg, 00FFFF00h + jmp skill_render_keys +skill_normal_hit_text: + invoke DrawString8x8, 64, 150, OFFSET textSkillHitMsg, 003CFF3Ch + jmp skill_render_keys +@@: + cmp skill3d_state, 3 + jne @F + invoke DrawString8x8, 88, 150, OFFSET textSkillMissMsg, 00FF6464h + jmp skill_render_keys +@@: + cmp skill3d_state, 4 + jne @F + invoke DrawString8x8, 48, 150, OFFSET textSkillEscape, 003CFF3Ch + invoke FormatNumber, skill3d_win_amount, OFFSET hudNumBuffer + invoke DrawString8x8, 240, 150, OFFSET hudNumBuffer, 003CFF3Ch + invoke DrawString8x8, 64, 166, OFFSET textSkullsAgain, 00FFD700h + jmp skill_render_keys +@@: + invoke DrawString8x8, 44, 150, OFFSET textSkillLost, 00FF6464h + invoke DrawString8x8, 64, 166, OFFSET textSkullsAgain, 00FFD700h + +skill_render_keys: + mov kx, 16 + invoke DrawKeycap3D, kx, 192, OFFSET textSkillKeySpace, 1 + add kx, eax + + invoke DrawKeycap3D, kx, 192, OFFSET textSkillKeyBet, 0 + add kx, eax + + invoke DrawKeycap3D, kx, 192, OFFSET textKeyEsc, 0 + ret +RenderSkillGame ENDP + +HandlePlayerInput PROC uses ebx esi edi + local speed:DWORD + local nextX:DWORD + local nextY:DWORD + mov eax, deltaTime3D + imul eax, 200 + mov speed, eax + cmp keys3D[10h], 0 + je @F + shl speed, 1 +@@: + mov eax, deltaTime3D + shr eax, 2 + inc eax + cmp keys3D[41h], 0 + jne input_turn_left + cmp keys3D[25h], 0 + je input_right +input_turn_left: + sub playerAngle, eax +input_right: + cmp keys3D[44h], 0 + jne input_turn_right + cmp keys3D[27h], 0 + je input_forward +input_turn_right: + add playerAngle, eax +input_forward: + and playerAngle, 511 + call UpdateCamera3D + xor edi, edi + cmp keys3D[57h], 0 + jne input_go_forward + cmp keys3D[26h], 0 + je input_back +input_go_forward: + inc edi +input_back: + cmp keys3D[53h], 0 + jne input_go_back + cmp keys3D[28h], 0 + je input_move +input_go_back: + dec edi +input_move: + test edi, edi + jz input_action + imul edi, speed + mov eax, playerDirX + imul edi + shrd eax, edx, 16 + add eax, playerX + mov nextX, eax + mov eax, playerDirY + imul edi + shrd eax, edx, 16 + add eax, playerY + mov nextY, eax + invoke CanWalk3D, nextX, playerY + test eax, eax + jz @F + mov eax, nextX + mov playerX, eax +@@: + invoke CanWalk3D, playerX, nextY + test eax, eax + jz input_action + mov eax, nextY + mov playerY, eax +input_action: + invoke Pressed3D, 45h + test eax, eax + jz @F + call Trigger3DInteraction +@@: + ret +HandlePlayerInput ENDP + +CheckInteractions PROC uses ebx esi edi + local nearest:DWORD + mov nearest, 262144 + mov interactTargetId, 0 + mov interactPromptPtr, 0 + xor esi, esi +interaction_scan: + cmp esi, NUM_SPRITES + jge interaction_done + imul edi, esi, SIZEOF SpriteObject + cmp [casinoSprites+edi].interactId, 0 + je interaction_next + mov eax, [casinoSprites+edi].posX + sub eax, playerX + sar eax, 8 + mov ebx, eax + imul eax, eax + mov ecx, eax + mov eax, [casinoSprites+edi].posY + sub eax, playerY + sar eax, 8 + mov edx, eax + imul eax, eax + add ecx, eax + cmp ecx, nearest + jae interaction_next + ; Only target objects in front of the camera. + mov eax, playerDirX + sar eax, 8 + imul eax, ebx + mov ebx, playerDirY + sar ebx, 8 + imul ebx, edx + add eax, ebx + cmp eax, 18000 + jl interaction_next + mov nearest, ecx + mov eax, [casinoSprites+edi].interactId + mov interactTargetId, eax + mov eax, [casinoSprites+edi].promptPtr + mov interactPromptPtr, eax +interaction_next: + inc esi + jmp interaction_scan +interaction_done: + call CheckHallInteractions3D + ret +CheckInteractions ENDP + +; --- RenderCabinetBezel: Îòðèñîâêà àðêàäíîãî áåçåëÿ òåðìèíàëà íà 3D ýêðàíå --- +RenderCabinetBezel PROC uses ebx esi edi, pTitle:DWORD + ; Çàòåìíÿåì 3D-çàë â áóôåðå êàäðà (äåëèì ÿðêîñòü ïîïîëàì) + mov ecx, SCREEN_SIZE + xor esi, esi +dim_bezel_loop: + mov eax, [screenBuffer + esi*4] + shr eax, 1 + and eax, 007F7F7Fh + mov [screenBuffer + esi*4], eax + inc esi + loop dim_bezel_loop + + ; Âíåøíÿÿ çîëîòàÿ ðàìêà òåðìèíàëà + invoke DrawBoxBorder, 10, 14, 300, 212, 000C0E14h, 00D8BC6Ah, 2 + + ; Øàïêà òåðìèíàëà ñ íàçâàíèåì èãðû + invoke DrawBox, 12, 16, 296, 16, 00221A10h + invoke DrawString8x8, 20, 20, pTitle, 00F5E2B0h + + ; Ïîäâàëüíàÿ ïëàøêà ñ ïîäñêàçêîé ïî âûõîäó + invoke DrawBox, 12, 210, 296, 14, 00141416h + invoke DrawString8x8, 20, 213, OFFSET textCabinetFooter, 00AAAAAAh + + ; Âûâîäèì êàäð áåçåëÿ â îêíî + call Present3D + ret +RenderCabinetBezel ENDP + +; --- LaunchClassicGame: Âñòðàèâàíèå èãðû â UI òåðìèíàëà êàçèíî --- +LaunchClassicGame PROC uses ebx esi edi, pGameProc:DWORD, gameId:DWORD, pTitle:DWORD + LOCAL rcClient[16]:BYTE + LOCAL ptScreen[8]:BYTE + LOCAL fontInfo[84]:BYTE + LOCAL conWnd:DWORD + LOCAL conW:DWORD, conH:DWORD, conX:DWORD, conY:DWORD + LOCAL viewW:DWORD, viewH:DWORD + LOCAL offsetX:DWORD, offsetY:DWORD + + mov eax, gameId + mov currentGameId, eax + + ; 1. Ðèñóåì çîëîòîé áåçåëü òåðìèíàëà íà 3D ýêðàíå + cmp pTitle, 0 + je @F + invoke RenderCabinetBezel, pTitle +@@: + + ; 2. Âûäåëÿåì êîíñîëü + invoke AllocConsole + test eax, eax + jz launch_ret + + invoke GetStdHandle, STD_OUTPUT_HANDLE + mov hOut, eax + invoke GetStdHandle, STD_INPUT_HANDLE + mov hIn, eax + + invoke SetConsoleCP, 1251 + invoke SetConsoleOutputCP, 1251 + + cmp pTitle, 0 + je @F + invoke SetConsoleTitleA, pTitle +@@: + call EnableAnsi + call ConfigureConsoleSize + + ; 3. Íàñòðàèâàåì øðèôò Consolas Bold 16pt + lea edi, fontInfo + xor eax, eax + mov ecx, 21 + rep stosd + mov dword ptr fontInfo[0], 84 ; cbSize + mov word ptr fontInfo[8], 0 ; dwFontSize.X + mov word ptr fontInfo[10], 16 ; dwFontSize.Y + mov dword ptr fontInfo[16], 700 ; FontWeight = FW_BOLD + mov word ptr fontInfo[20], 'C' + mov word ptr fontInfo[22], 'o' + mov word ptr fontInfo[24], 'n' + mov word ptr fontInfo[26], 's' + mov word ptr fontInfo[28], 'o' + mov word ptr fontInfo[30], 'l' + mov word ptr fontInfo[32], 'a' + mov word ptr fontInfo[34], 's' + mov word ptr fontInfo[36], 0 + lea eax, fontInfo + invoke SetCurrentConsoleFontEx, hOut, 0, eax + + ; 4. Ïîëó÷àåì äåñêðèïòîð îêíà êîíñîëè + invoke GetConsoleWindow + mov conWnd, eax + test eax, eax + jz run_game_body + + ; 5. Ñíèìàåì ñèñòåìíóþ ðàìêó Windows è çàãîëîâîê ñ êíîïêàìè çàêðûòèÿ/ñâîðà÷èâàíèÿ + invoke GetWindowLongA, conWnd, -16 ; GWL_STYLE + and eax, NOT (00C00000h or 00040000h or 00080000h or 00010000h or 00020000h) + or eax, 80000000h ; WS_POPUP + invoke SetWindowLongA, conWnd, -16, eax + + ; Ñâÿçûâàåì êàê äî÷åðíåå/ïðèíàäëåæàùåå îêíî ê îêíó èãðû + cmp h3DWnd, 0 + je show_con_fallback + invoke SetWindowLongA, conWnd, -8, h3DWnd ; GWL_HWNDPARENT + + ; 6. Âû÷èñëÿåì òî÷íûå êîîðäèíàòû äëÿ ïîñàäêè ýêðàíà âíóòðü áåçåëÿ + lea eax, rcClient + invoke GetClientRect, h3DWnd, eax + mov esi, dword ptr rcClient[8] ; øèðèíà êëèåíòñêîé îáëàñòè + mov edi, dword ptr rcClient[12] ; âûñîòà êëèåíòñêîé îáëàñòè + test esi, esi + jz show_con_fallback + test edi, edi + jz show_con_fallback + + ; Ðàñ÷åò âüþïîðòà 4:3 òî÷íî êàê â Present3D + mov viewW, esi + mov eax, esi + imul eax, 3 + shr eax, 2 + cmp eax, edi + jle calc_view_h + mov eax, edi + imul eax, 4 + xor edx, edx + mov ecx, 3 + div ecx + mov viewW, eax + mov eax, edi +calc_view_h: + mov viewH, eax + + mov ebx, esi + sub ebx, viewW + shr ebx, 1 + mov offsetX, ebx + + mov ebx, edi + sub ebx, viewH + shr ebx, 1 + mov offsetY, ebx + + ; Ýêðàííûå êîîðäèíàòû ëåâîãî âåðõíåãî óãëà êëèåíòñêîé îáëàñòè + mov dword ptr ptScreen[0], 0 + mov dword ptr ptScreen[4], 0 + lea eax, ptScreen + invoke ClientToScreen, h3DWnd, eax + + ; conW = viewW * 280 / 320 (âíóòðåííåå îêíî áåçåëÿ) + mov eax, viewW + imul eax, 280 + xor edx, edx + mov ecx, 320 + div ecx + mov conW, eax + + ; conH = viewH * 168 / 240 + mov eax, viewH + imul eax, 168 + xor edx, edx + mov ecx, 240 + div ecx + mov conH, eax + + ; conX = ptScreen.x + offsetX + (viewW * 20 / 320) + mov eax, viewW + imul eax, 20 + xor edx, edx + mov ecx, 320 + div ecx + add eax, offsetX + add eax, dword ptr ptScreen[0] + mov conX, eax + + ; conY = ptScreen.y + offsetY + (viewH * 38 / 240) + mov eax, viewH + imul eax, 38 + xor edx, edx + mov ecx, 240 + div ecx + add eax, offsetY + add eax, dword ptr ptScreen[4] + mov conY, eax + + ; Ïîçèöèîíèðóåì áåçðàìî÷íûé ýêðàí òî÷íî âíóòðü çîëîòîé ðàìêè áåçåëÿ + invoke SetWindowPos, conWnd, 0, conX, conY, conW, conH, 20h or 40h ; SWP_FRAMECHANGED | SWP_SHOWWINDOW + jmp set_con_focus + +show_con_fallback: + invoke ShowWindow, conWnd, 5 ; SW_SHOW +set_con_focus: + invoke SetForegroundWindow, conWnd + invoke SetFocus, conWnd + +run_game_body: + invoke PlayCasinoSound3D, 0, 0, 0 + call InitSounds + ; Çàïóñê îðèãèíàëüíîé èãðû! + call pGameProc + call CloseLegacySounds3D + + ; Çàêðûâàåì êîíñîëü + invoke FreeConsole + mov hOut, 0 + mov hIn, 0 + + ; Âîçâðàùàåì ôîêóñ â îêíî 3D èãðû + cmp h3DWnd, 0 + je cleanup_game_input + invoke SetForegroundWindow, h3DWnd + invoke SetFocus, h3DWnd + +cleanup_game_input: + mov ecx, 256 + xor eax, eax + lea edi, keys3D + rep stosb + mov ecx, 256 + lea edi, pressedKeys3D + rep stosb + + invoke GetTickCount + mov previousTick3D, eax + mov frameStart3D, eax + mov deltaTime3D, 0 + + call SaveProgress3D + +launch_ret: + ret +LaunchClassicGame ENDP + +Trigger3DInteraction PROC + call TriggerHallInteraction3D + test eax, eax + jnz trigger_done + mov eax, interactTargetId + test eax, eax + jz trigger_done + + cmp eax, INTERACT_DANCER + jne check_target_bj + cmp bankroll, 100 + jl dancer_no_cash + sub bankroll, 100 + inc dancerLuckBuff + invoke CopyString3D, OFFSET textTips3D, OFFSET flashMessage + mov flashTimer, 100 + invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 + ret +dancer_no_cash: + invoke CopyString3D, OFFSET msgNeedMoney, OFFSET flashMessage + mov flashTimer, 60 + ret + +check_target_bj: + cmp eax, INTERACT_BLACKJACK + jne check_target_poker + call InitNativeBlackjack3D + mov engineMode, MODE_BLACKJACK + ret + +check_target_poker: + cmp eax, INTERACT_POKER + jne check_target_durak + call InitNativePoker3D + test eax, eax + jz target_unported + mov engineMode, MODE_POKER + ret + +check_target_durak: + cmp eax, INTERACT_DURAK + jne check_target_slots777 + call InitNativeDurak3D + mov engineMode, MODE_DURAK + ret + +check_target_slots777: + cmp eax, INTERACT_SLOTS_777 + jne check_target_slots_clover + call InitNativeSlots3D + test eax,eax + jz target_unported + mov engineMode,MODE_SLOTS + ret + +check_target_slots_clover: + cmp eax, INTERACT_SLOTS_CLOVER + jne check_target_roulette + call InitNativeClover3D + test eax,eax + jz target_unported + mov engineMode,MODE_CLOVER + ret + +check_target_roulette: + cmp eax, INTERACT_ROULETTE + jne check_target_dice + call InitNativeWheel3D + mov engineMode, MODE_ROULETTE + ret + +check_target_dice: + cmp eax, INTERACT_DICE + jne check_target_skulls + call InitDiceGame + mov engineMode, MODE_DICE + ret + +check_target_skulls: + cmp eax, INTERACT_SKULLS + jne check_target_coin + call InitSkullsGame + mov engineMode, MODE_SKULLS + ret + +check_target_coin: + cmp eax, INTERACT_COIN + jne check_target_skill + call InitCoinGame + mov engineMode, MODE_COIN + ret + +check_target_skill: + cmp eax, INTERACT_SKILL_CHECK + jne check_target_buckshot + call InitSkillGame + mov engineMode, MODE_SKILL + ret + +check_target_buckshot: + cmp eax, INTERACT_BUCKSHOT + jne check_target_rr + call InitBuckshot3D + mov engineMode, MODE_BUCKSHOT + ret + +check_target_rr: + cmp eax, INTERACT_RUSSIAN_ROULETTE + jne check_target_online_rr + call InitRussianGame3D + test eax, eax + jz @F + mov engineMode, MODE_RUSSIAN +@@: + ret + +check_target_online_rr: + cmp eax, INTERACT_ONLINE_RR + jne check_target_umamusume + call BeginUnavailable3D + ret + +check_target_umamusume: + cmp eax, INTERACT_UMAMUSUME + jne check_target_hell + call BeginUnavailable3D + ret + +check_target_hell: + cmp eax, INTERACT_HELL_TOWER + jne check_target_shop + call BeginUnavailable3D + ret + +check_target_shop: + cmp eax, INTERACT_SHOP + jne check_target_atm + call BeginMerchant3D + ret + +check_target_atm: + cmp eax, INTERACT_ATM + jne check_target_terminal + mov engineMode, MODE_ATM + ret + +check_target_terminal: + cmp eax, INTERACT_TERMINAL + jne check_target_observer + call BeginUnavailable3D + ret + +check_target_observer: + cmp eax, INTERACT_OBSERVER + jne target_unported + call BeginUnavailable3D + ret + +target_unported: + call BeginUnavailable3D +trigger_done: + ret +Trigger3DInteraction ENDP + +; --- Engine Initialization --- +Init3DEngine PROC + local screenCX:DWORD + local screenCY:DWORD + local posX:DWORD + local posY:DWORD + local bytesRead:DWORD + + push ebx + push esi + push edi + + call LoadDisplaySettings3D + call Create3DWindow + test eax, eax + jz init_failed + call LoadTextures3D + test eax, eax + jz init_failed + + call InitializeCasinoSprites3D + + ; Initialize raycasting worker thread and sync events + invoke CreateEventA, 0, 0, 0, 0 + mov hRaycastStartEvent, eax + invoke CreateEventA, 0, 0, 0, 0 + mov hRaycastDoneEvent, eax + mov bRaycastQuit, 0 + invoke CreateThread, 0, 65536, OFFSET RaycastWorkerProc, 0, 0, ADDR raycastThreadId + mov hRaycastThread, eax + + call InitHall3D + call BeginStartup3D + call RenderStartup3D + invoke ShowWindow, h3DWnd, SW_SHOW + invoke UpdateWindow, h3DWnd + invoke SetForegroundWindow, h3DWnd + mov eax, 1 + jmp init_return +init_failed: + xor eax, eax +init_return: + pop edi + pop esi + pop ebx + ret +Init3DEngine ENDP + +InitializeCasinoSprites3D PROC +init_sprites_table: + ; Sprite 0: VIP Dancer 1 (Stage Left) + mov casinoSprites[0*SIZEOF SpriteObject].posX, (13 * FP_1 + FP_HALF) + mov casinoSprites[0*SIZEOF SpriteObject].posY, (4 * FP_1) + mov casinoSprites[0*SIZEOF SpriteObject].baseTexId, 10 + mov casinoSprites[0*SIZEOF SpriteObject].frameCount, 12 + mov casinoSprites[0*SIZEOF SpriteObject].curFrame, 0 + mov casinoSprites[0*SIZEOF SpriteObject].animTimer, 0 + mov casinoSprites[0*SIZEOF SpriteObject].animSpeed, 5 + mov casinoSprites[0*SIZEOF SpriteObject].interactId, INTERACT_DANCER + mov casinoSprites[0*SIZEOF SpriteObject].promptPtr, OFFSET promptDancer + + ; Sprite 1: VIP Dancer 2 (Center Stage Star) + mov casinoSprites[1*SIZEOF SpriteObject].posX, (16 * FP_1 + FP_HALF) + mov casinoSprites[1*SIZEOF SpriteObject].posY, (3 * FP_1 + FP_HALF) + mov casinoSprites[1*SIZEOF SpriteObject].baseTexId, 10 + mov casinoSprites[1*SIZEOF SpriteObject].frameCount, 12 + mov casinoSprites[1*SIZEOF SpriteObject].curFrame, 2 + mov casinoSprites[1*SIZEOF SpriteObject].animTimer, 0 + mov casinoSprites[1*SIZEOF SpriteObject].animSpeed, 5 + mov casinoSprites[1*SIZEOF SpriteObject].interactId, INTERACT_DANCER + mov casinoSprites[1*SIZEOF SpriteObject].promptPtr, OFFSET promptDancer + + ; Sprite 2: VIP Dancer 3 (Stage Right) + mov casinoSprites[2*SIZEOF SpriteObject].posX, (19 * FP_1 + FP_HALF) + mov casinoSprites[2*SIZEOF SpriteObject].posY, (4 * FP_1) + mov casinoSprites[2*SIZEOF SpriteObject].baseTexId, 10 + mov casinoSprites[2*SIZEOF SpriteObject].frameCount, 12 + mov casinoSprites[2*SIZEOF SpriteObject].curFrame, 1 + mov casinoSprites[2*SIZEOF SpriteObject].animTimer, 0 + mov casinoSprites[2*SIZEOF SpriteObject].animSpeed, 5 + mov casinoSprites[2*SIZEOF SpriteObject].interactId, INTERACT_DANCER + mov casinoSprites[2*SIZEOF SpriteObject].promptPtr, OFFSET promptDancer + + ; Sprite 3: VIP Blackjack (Front Center Left) + mov casinoSprites[3*SIZEOF SpriteObject].posX, (12 * FP_1 + FP_HALF) + mov casinoSprites[3*SIZEOF SpriteObject].posY, (8 * FP_1) + mov casinoSprites[3*SIZEOF SpriteObject].baseTexId, 30 + mov casinoSprites[3*SIZEOF SpriteObject].frameCount, 1 + mov casinoSprites[3*SIZEOF SpriteObject].curFrame, 0 + mov casinoSprites[3*SIZEOF SpriteObject].animTimer, 0 + mov casinoSprites[3*SIZEOF SpriteObject].animSpeed, 1 + mov casinoSprites[3*SIZEOF SpriteObject].interactId, INTERACT_BLACKJACK + mov casinoSprites[3*SIZEOF SpriteObject].promptPtr, OFFSET promptBlackjack + + ; Sprite 4: European Roulette Table (Front Center) + mov casinoSprites[4*SIZEOF SpriteObject].posX, (16 * FP_1 + FP_HALF) + mov casinoSprites[4*SIZEOF SpriteObject].posY, (10 * FP_1) + mov casinoSprites[4*SIZEOF SpriteObject].baseTexId, 31 + mov casinoSprites[4*SIZEOF SpriteObject].frameCount, 1 + mov casinoSprites[4*SIZEOF SpriteObject].curFrame, 0 + mov casinoSprites[4*SIZEOF SpriteObject].animTimer, 0 + mov casinoSprites[4*SIZEOF SpriteObject].animSpeed, 1 + mov casinoSprites[4*SIZEOF SpriteObject].interactId, INTERACT_ROULETTE + mov casinoSprites[4*SIZEOF SpriteObject].promptPtr, OFFSET promptCasinoRoulette + + ; Sprite 5: Texas Hold'em Poker Table (Front Center Right) + mov casinoSprites[5*SIZEOF SpriteObject].posX, (20 * FP_1 + FP_HALF) + mov casinoSprites[5*SIZEOF SpriteObject].posY, (8 * FP_1) + mov casinoSprites[5*SIZEOF SpriteObject].baseTexId, 30 + mov casinoSprites[5*SIZEOF SpriteObject].frameCount, 1 + mov casinoSprites[5*SIZEOF SpriteObject].curFrame, 0 + mov casinoSprites[5*SIZEOF SpriteObject].animTimer, 0 + mov casinoSprites[5*SIZEOF SpriteObject].animSpeed, 1 + mov casinoSprites[5*SIZEOF SpriteObject].interactId, INTERACT_POKER + mov casinoSprites[5*SIZEOF SpriteObject].promptPtr, OFFSET promptPoker + + ; Sprite 6: Podkidnoy Durak Card Table + mov casinoSprites[6*SIZEOF SpriteObject].posX, (24 * FP_1 + FP_HALF) + mov casinoSprites[6*SIZEOF SpriteObject].posY, (8 * FP_1) + mov casinoSprites[6*SIZEOF SpriteObject].baseTexId, 30 + mov casinoSprites[6*SIZEOF SpriteObject].frameCount, 1 + mov casinoSprites[6*SIZEOF SpriteObject].curFrame, 0 + mov casinoSprites[6*SIZEOF SpriteObject].animTimer, 0 + mov casinoSprites[6*SIZEOF SpriteObject].animSpeed, 1 + mov casinoSprites[6*SIZEOF SpriteObject].interactId, INTERACT_DURAK + mov casinoSprites[6*SIZEOF SpriteObject].promptPtr, OFFSET promptDurak + + ; Sprite 7: Classic Slots 777 (West Arcade 1) + mov casinoSprites[7*SIZEOF SpriteObject].posX, (6 * FP_1) + mov casinoSprites[7*SIZEOF SpriteObject].posY, (8 * FP_1) + mov casinoSprites[7*SIZEOF SpriteObject].baseTexId, 24 + mov casinoSprites[7*SIZEOF SpriteObject].frameCount, 3 + mov casinoSprites[7*SIZEOF SpriteObject].curFrame, 0 + mov casinoSprites[7*SIZEOF SpriteObject].animTimer, 0 + mov casinoSprites[7*SIZEOF SpriteObject].animSpeed, 8 + mov casinoSprites[7*SIZEOF SpriteObject].interactId, INTERACT_SLOTS_777 + mov casinoSprites[7*SIZEOF SpriteObject].promptPtr, OFFSET promptClassicSlot + + ; Sprite 8: CloverPit Slots 5x3 (West Arcade 2) + mov casinoSprites[8*SIZEOF SpriteObject].posX, (6 * FP_1) + mov casinoSprites[8*SIZEOF SpriteObject].posY, (11 * FP_1) + mov casinoSprites[8*SIZEOF SpriteObject].baseTexId, 24 + mov casinoSprites[8*SIZEOF SpriteObject].frameCount, 3 + mov casinoSprites[8*SIZEOF SpriteObject].curFrame, 1 + mov casinoSprites[8*SIZEOF SpriteObject].animTimer, 0 + mov casinoSprites[8*SIZEOF SpriteObject].animSpeed, 8 + mov casinoSprites[8*SIZEOF SpriteObject].interactId, INTERACT_SLOTS_CLOVER + mov casinoSprites[8*SIZEOF SpriteObject].promptPtr, OFFSET promptCloverSlot + + ; Sprite 9: Craps & Dice Table (West Arcade 3) + mov casinoSprites[9*SIZEOF SpriteObject].posX, (6 * FP_1) + mov casinoSprites[9*SIZEOF SpriteObject].posY, (14 * FP_1) + mov casinoSprites[9*SIZEOF SpriteObject].baseTexId, 30 + mov casinoSprites[9*SIZEOF SpriteObject].frameCount, 1 + mov casinoSprites[9*SIZEOF SpriteObject].curFrame, 0 + mov casinoSprites[9*SIZEOF SpriteObject].animTimer, 0 + mov casinoSprites[9*SIZEOF SpriteObject].animSpeed, 1 + mov casinoSprites[9*SIZEOF SpriteObject].interactId, INTERACT_DICE + mov casinoSprites[9*SIZEOF SpriteObject].promptPtr, OFFSET promptDice + + ; Sprite 10: Skulls & Cups Table + mov casinoSprites[10*SIZEOF SpriteObject].posX, (10 * FP_1) + mov casinoSprites[10*SIZEOF SpriteObject].posY, (15 * FP_1) + mov casinoSprites[10*SIZEOF SpriteObject].baseTexId, 30 + mov casinoSprites[10*SIZEOF SpriteObject].frameCount, 1 + mov casinoSprites[10*SIZEOF SpriteObject].curFrame, 0 + mov casinoSprites[10*SIZEOF SpriteObject].animTimer, 0 + mov casinoSprites[10*SIZEOF SpriteObject].animSpeed, 1 + mov casinoSprites[10*SIZEOF SpriteObject].interactId, INTERACT_SKULLS + mov casinoSprites[10*SIZEOF SpriteObject].promptPtr, OFFSET promptSkulls + + ; Sprite 11: Coin Toss Stand + mov casinoSprites[11*SIZEOF SpriteObject].posX, (14 * FP_1) + mov casinoSprites[11*SIZEOF SpriteObject].posY, (15 * FP_1) + mov casinoSprites[11*SIZEOF SpriteObject].baseTexId, 30 + mov casinoSprites[11*SIZEOF SpriteObject].frameCount, 1 + mov casinoSprites[11*SIZEOF SpriteObject].curFrame, 0 + mov casinoSprites[11*SIZEOF SpriteObject].animTimer, 0 + mov casinoSprites[11*SIZEOF SpriteObject].animSpeed, 1 + mov casinoSprites[11*SIZEOF SpriteObject].interactId, INTERACT_COIN + mov casinoSprites[11*SIZEOF SpriteObject].promptPtr, OFFSET promptCoin + + ; Sprite 12: Skill Check Stand + mov casinoSprites[12*SIZEOF SpriteObject].posX, (18 * FP_1) + mov casinoSprites[12*SIZEOF SpriteObject].posY, (15 * FP_1) + mov casinoSprites[12*SIZEOF SpriteObject].baseTexId, 30 + mov casinoSprites[12*SIZEOF SpriteObject].frameCount, 1 + mov casinoSprites[12*SIZEOF SpriteObject].curFrame, 0 + mov casinoSprites[12*SIZEOF SpriteObject].animTimer, 0 + mov casinoSprites[12*SIZEOF SpriteObject].animSpeed, 1 + mov casinoSprites[12*SIZEOF SpriteObject].interactId, INTERACT_SKILL_CHECK + mov casinoSprites[12*SIZEOF SpriteObject].promptPtr, OFFSET promptSkillCheck + + ; Sprite 13: Umamusume Derby Lounge + mov casinoSprites[13*SIZEOF SpriteObject].posX, (22 * FP_1) + mov casinoSprites[13*SIZEOF SpriteObject].posY, (15 * FP_1) + mov casinoSprites[13*SIZEOF SpriteObject].baseTexId, 30 + mov casinoSprites[13*SIZEOF SpriteObject].frameCount, 1 + mov casinoSprites[13*SIZEOF SpriteObject].curFrame, 0 + mov casinoSprites[13*SIZEOF SpriteObject].animTimer, 0 + mov casinoSprites[13*SIZEOF SpriteObject].animSpeed, 1 + mov casinoSprites[13*SIZEOF SpriteObject].interactId, INTERACT_UMAMUSUME + mov casinoSprites[13*SIZEOF SpriteObject].promptPtr, OFFSET promptUmamusume + + ; Sprite 14: Boutique & Shop (East Wing) + mov casinoSprites[14*SIZEOF SpriteObject].posX, (26 * FP_1) + mov casinoSprites[14*SIZEOF SpriteObject].posY, (12 * FP_1) + mov casinoSprites[14*SIZEOF SpriteObject].baseTexId, 32 + mov casinoSprites[14*SIZEOF SpriteObject].frameCount, 1 + mov casinoSprites[14*SIZEOF SpriteObject].curFrame, 0 + mov casinoSprites[14*SIZEOF SpriteObject].animTimer, 0 + mov casinoSprites[14*SIZEOF SpriteObject].animSpeed, 1 + mov casinoSprites[14*SIZEOF SpriteObject].interactId, INTERACT_SHOP + mov casinoSprites[14*SIZEOF SpriteObject].promptPtr, OFFSET promptShop + + ; Sprite 15: Cashier & ATM (East Wing) + mov casinoSprites[15*SIZEOF SpriteObject].posX, (26 * FP_1) + mov casinoSprites[15*SIZEOF SpriteObject].posY, (16 * FP_1) + mov casinoSprites[15*SIZEOF SpriteObject].baseTexId, 33 + mov casinoSprites[15*SIZEOF SpriteObject].frameCount, 1 + mov casinoSprites[15*SIZEOF SpriteObject].curFrame, 0 + mov casinoSprites[15*SIZEOF SpriteObject].animTimer, 0 + mov casinoSprites[15*SIZEOF SpriteObject].animSpeed, 1 + mov casinoSprites[15*SIZEOF SpriteObject].interactId, INTERACT_ATM + mov casinoSprites[15*SIZEOF SpriteObject].promptPtr, OFFSET promptATM + + ; Sprite 16: Player Terminal (East Wing) + mov casinoSprites[16*SIZEOF SpriteObject].posX, (26 * FP_1) + mov casinoSprites[16*SIZEOF SpriteObject].posY, (20 * FP_1) + mov casinoSprites[16*SIZEOF SpriteObject].baseTexId, 33 + mov casinoSprites[16*SIZEOF SpriteObject].frameCount, 1 + mov casinoSprites[16*SIZEOF SpriteObject].curFrame, 0 + mov casinoSprites[16*SIZEOF SpriteObject].animTimer, 0 + mov casinoSprites[16*SIZEOF SpriteObject].animSpeed, 1 + mov casinoSprites[16*SIZEOF SpriteObject].interactId, INTERACT_TERMINAL + mov casinoSprites[16*SIZEOF SpriteObject].promptPtr, OFFSET promptPlayerTerminal + + ; Sprite 17: Buckshot Roulette (South-West) + mov casinoSprites[17*SIZEOF SpriteObject].posX, (12 * FP_1) + mov casinoSprites[17*SIZEOF SpriteObject].posY, (22 * FP_1) + mov casinoSprites[17*SIZEOF SpriteObject].baseTexId, 30 + mov casinoSprites[17*SIZEOF SpriteObject].frameCount, 1 + mov casinoSprites[17*SIZEOF SpriteObject].curFrame, 0 + mov casinoSprites[17*SIZEOF SpriteObject].animTimer, 0 + mov casinoSprites[17*SIZEOF SpriteObject].animSpeed, 1 + mov casinoSprites[17*SIZEOF SpriteObject].interactId, INTERACT_BUCKSHOT + mov casinoSprites[17*SIZEOF SpriteObject].promptPtr, OFFSET promptBuckshot + + ; Sprite 18: Observer Lounge (South-East) + mov casinoSprites[18*SIZEOF SpriteObject].posX, (20 * FP_1) + mov casinoSprites[18*SIZEOF SpriteObject].posY, (22 * FP_1) + mov casinoSprites[18*SIZEOF SpriteObject].baseTexId, 30 + mov casinoSprites[18*SIZEOF SpriteObject].frameCount, 1 + mov casinoSprites[18*SIZEOF SpriteObject].curFrame, 0 + mov casinoSprites[18*SIZEOF SpriteObject].animTimer, 0 + mov casinoSprites[18*SIZEOF SpriteObject].animSpeed, 1 + mov casinoSprites[18*SIZEOF SpriteObject].interactId, INTERACT_OBSERVER + mov casinoSprites[18*SIZEOF SpriteObject].promptPtr, OFFSET promptObserver + + ; Sprite 19: Russian Roulette (Backroom Entrance) + mov casinoSprites[19*SIZEOF SpriteObject].posX, (16 * FP_1) + mov casinoSprites[19*SIZEOF SpriteObject].posY, (25 * FP_1) + mov casinoSprites[19*SIZEOF SpriteObject].baseTexId, 34 + mov casinoSprites[19*SIZEOF SpriteObject].frameCount, 1 + mov casinoSprites[19*SIZEOF SpriteObject].curFrame, 0 + mov casinoSprites[19*SIZEOF SpriteObject].animTimer, 0 + mov casinoSprites[19*SIZEOF SpriteObject].animSpeed, 1 + mov casinoSprites[19*SIZEOF SpriteObject].interactId, INTERACT_RUSSIAN_ROULETTE + mov casinoSprites[19*SIZEOF SpriteObject].promptPtr, OFFSET promptRussianRoulette + + ; Sprite 20: Online Russian Roulette (Backroom Secret Terminal) + mov casinoSprites[20*SIZEOF SpriteObject].posX, (18 * FP_1) + mov casinoSprites[20*SIZEOF SpriteObject].posY, (25 * FP_1) + mov casinoSprites[20*SIZEOF SpriteObject].baseTexId, 34 + mov casinoSprites[20*SIZEOF SpriteObject].frameCount, 1 + mov casinoSprites[20*SIZEOF SpriteObject].curFrame, 0 + mov casinoSprites[20*SIZEOF SpriteObject].animTimer, 0 + mov casinoSprites[20*SIZEOF SpriteObject].animSpeed, 1 + mov casinoSprites[20*SIZEOF SpriteObject].interactId, INTERACT_ONLINE_RR + mov casinoSprites[20*SIZEOF SpriteObject].promptPtr, OFFSET promptOnlineRR + + ; Sprite 21: Hell Tower Portal (South Wing Deep End) + mov casinoSprites[21*SIZEOF SpriteObject].posX, (16 * FP_1 + FP_HALF) + mov casinoSprites[21*SIZEOF SpriteObject].posY, (29 * FP_1) + mov casinoSprites[21*SIZEOF SpriteObject].baseTexId, 4 + mov casinoSprites[21*SIZEOF SpriteObject].frameCount, 1 + mov casinoSprites[21*SIZEOF SpriteObject].curFrame, 0 + mov casinoSprites[21*SIZEOF SpriteObject].animTimer, 0 + mov casinoSprites[21*SIZEOF SpriteObject].animSpeed, 1 + mov casinoSprites[21*SIZEOF SpriteObject].interactId, INTERACT_HELL_TOWER + mov casinoSprites[21*SIZEOF SpriteObject].promptPtr, OFFSET promptHellTower + ret +InitializeCasinoSprites3D ENDP + +include src_graphics\audio_code.inc +include src_graphics\dice_animation.inc +include src_graphics\russian_roulette.inc +include src_graphics\startup_code.inc +include src_graphics\card_table_assets.inc +include src_graphics\poker_evaluator.inc +include src_graphics\native_poker.inc +include src_graphics\native_blackjack.inc +include src_graphics\native_durak.inc +include src_graphics\card_tables_render.inc +include src_graphics\durak_render.inc +include src_graphics\card_table_input.inc +include src_graphics\scene_animation.inc +include src_graphics\native_slots.inc +include src_graphics\native_clover.inc +include src_graphics\native_coin.inc +include src_graphics\graphic_profiles.inc +include src_graphics\city_arrival_scene.inc +include src_graphics\arrival_scene.inc +include src_graphics\merchant_scene.inc +include src_graphics\hall_scene.inc +include src_graphics\npc_mind.inc +include src_graphics\npc_life.inc +include src_graphics\npc_contracts.inc +include src_graphics\native_wheel.inc +include src_graphics\billiards.inc +include src_graphics\buckshot.inc +include src_graphics\russian_table.inc +include src_graphics\unavailable.inc + +; --- Main Loop of the 3D Casino Engine --- +StartCasino3D PROC uses ebx esi edi + call Init3DEngine + test eax, eax + jz engine_shutdown + invoke GetTickCount + mov rngSeed3D, eax + mov previousTick3D, eax +engine_loop: + invoke PeekMessageA, OFFSET msg3D, 0, 0, 0, PM_REMOVE + test eax, eax + jz dispatch_frame + cmp msg3D.message, WM_QUIT + je engine_shutdown + invoke TranslateMessage, OFFSET msg3D + invoke DispatchMessageA, OFFSET msg3D + jmp engine_loop + +dispatch_frame: + invoke GetTickCount + mov frameStart3D, eax + sub eax, previousTick3D + cmp eax, 50 + jbe @F + mov eax, 50 +@@: + mov deltaTime3D, eax + mov eax, frameStart3D + mov previousTick3D, eax + invoke GetForegroundWindow + cmp eax, h3DWnd + jne engine_idle + invoke IsIconic, h3DWnd + test eax, eax + jnz engine_idle + invoke Pressed3D, 7Ah + test eax, eax + jz @F + call ToggleFullscreen3D +@@: + invoke Pressed3D, 1Bh + test eax, eax + jz engine_tick + cmp engineMode, MODE_INTRO + jne @F + call FinishStartup3D + jmp engine_tick +@@: + cmp engineMode, MODE_ARRIVAL + jne @F + call ArrivalEscape3D + jmp engine_tick +@@: + cmp engineMode, MODE_WALK + jne leave_table + xor paused3D, 1 + jmp engine_tick +leave_table: + call CardTableEscape3D + test eax, eax + jnz engine_tick + call TableBusy3D + test eax, eax + jz leave_idle_table + xor paused3D, 1 + call ClearKeys3D + jmp engine_tick +leave_idle_table: + mov paused3D, 0 + mov engineMode, MODE_WALK + call ClearKeys3D + invoke PlayCasinoSound3D, 0, 0, 0 +engine_tick: + cmp paused3D, 0 + jne draw_pause + mov eax, deltaTime3D + add animationClock3D, eax + cmp engineMode, MODE_INTRO + jne check_arrival_mode + call HandleStartupInput3D + cmp engineMode, MODE_INTRO + jne check_arrival_mode + call RenderStartup3D + jmp present_frame +check_arrival_mode: + cmp engineMode, MODE_ARRIVAL + jne check_walk_mode + call HandleArrival3D + cmp engineMode, MODE_WALK + je check_walk_mode + call RenderArrival3D + jmp present_frame +check_walk_mode: + cmp engineMode, MODE_WALK + jne check_slots_mode + call UpdateHall3D + call UpdateCamera3D + call CheckInteractions + call HandlePlayerInput + call UpdateCamera3D + call RenderCeilingAndFloor + call RenderWalls + call PrepareCityDepth3D + call RenderSprites + call RenderHall3D + call RenderHUD + call RenderMinimap + jmp present_frame +check_slots_mode: + cmp engineMode,MODE_CLOVER + jne @F + call HandleNativeClover3D + call RenderNativeClover3D + jmp present_frame +@@: + cmp engineMode,MODE_NPC_DIALOG + jne @F + call HandleNpcDialog3D + call RenderNpcDialog3D + jmp present_frame +@@: + cmp engineMode, MODE_UNAVAILABLE + jne @F + call HandleUnavailable3D + call RenderUnavailable3D + jmp present_frame +@@: + cmp engineMode, MODE_POOL + jne @F + call HandlePool3D + call RenderPool3D + jmp present_frame +@@: + cmp engineMode, MODE_BAR + jne @F + call HandleBar3D + call RenderBar3D + jmp present_frame +@@: + cmp engineMode, MODE_STAIRS + jne @F + call HandleStairs3D + call RenderStairs3D + jmp present_frame +@@: + cmp engineMode, MODE_SLOTS + jne check_bj_mode + call HandleNativeSlots3D + cmp engineMode,MODE_WALK + je check_walk_mode + call RenderNativeSlots3D + jmp present_frame +check_bj_mode: + cmp engineMode, MODE_BLACKJACK + jne check_poker_mode + call HandleNativeBlackjack3D + cmp engineMode, MODE_WALK + je check_walk_mode + call RenderNativeBlackjack3D + jmp present_frame +check_poker_mode: + cmp engineMode, MODE_POKER + jne check_durak_mode + call HandleNativePoker3D + cmp engineMode, MODE_WALK + je check_walk_mode + call RenderNativePoker3D + jmp present_frame +check_durak_mode: + cmp engineMode, MODE_DURAK + jne check_roul_mode + call HandleNativeDurak3D + cmp engineMode, MODE_WALK + je check_walk_mode + call RenderNativeDurak3D + jmp present_frame +check_roul_mode: + cmp engineMode, MODE_ROULETTE + jne check_shop_mode + call HandleNativeWheel3D + call RenderNativeWheel3D + jmp present_frame +check_shop_mode: + cmp engineMode, MODE_SHOP + jne check_atm_mode + call HandleMerchant3D + call RenderMerchant3D + jmp present_frame +check_atm_mode: + cmp engineMode, MODE_ATM + jne check_coin_mode + call HandleATMInput + call RenderATMGame + jmp present_frame +check_coin_mode: + cmp engineMode, MODE_COIN + jne check_dice_mode + call HandleCoinInput + call RenderCoinGame + jmp present_frame +check_dice_mode: + cmp engineMode, MODE_DICE + jne check_skulls_mode + call HandleDiceInput + call RenderDiceGame + jmp present_frame +check_skulls_mode: + cmp engineMode, MODE_SKULLS + jne check_skill_mode + call HandleSkullsInput + call RenderSkullsGame + jmp present_frame +check_skill_mode: + cmp engineMode, MODE_SKILL + jne check_buckshot_mode + call HandleSkillInput + call RenderSkillGame + jmp present_frame +check_buckshot_mode: + cmp engineMode, MODE_BUCKSHOT + jne check_russian_mode + call HandleBuckshot3D + call RenderBuckshot3D + jmp present_frame +check_russian_mode: + cmp engineMode, MODE_RUSSIAN + jne present_frame + call HandleRussianInput3D + call RenderRussianGame3D + jmp present_frame +draw_pause: + invoke DrawBoxBorder, 28, 36, 264, 168, 00151C21h, 00D8BC6Ah, 2 + invoke DrawString8x8, 44, 48, OFFSET textPause3D, 00FFFFFFh + cmp displayFill3D, 0 + je @F + invoke DrawString8x8, 44, 72, OFFSET textDisplayFill3D, 00D8BC6Ah + jmp pause_draw_quality +@@: + invoke DrawString8x8, 44, 72, OFFSET textDisplayFit3D, 00D8BC6Ah +pause_draw_quality: + invoke DrawString8x8, 44, 92, OFFSET textLowSpec3D, 00D8BC6Ah + mov eax, settingsLowSpec + cmp eax, 0 + jne @F + mov edx, OFFSET textLowSpecOff3D + jmp pause_draw_quality_value +@@: + cmp eax, 1 + jne @F + mov edx, OFFSET textLowSpecEco3D + jmp pause_draw_quality_value +@@: + mov edx, OFFSET textLowSpecQuiet3D +pause_draw_quality_value: + invoke DrawString8x8, 208, 92, edx, 00FFFFFFh + invoke DrawString8x8, 44, 112, OFFSET textVolumeKeys3D, 00D8BC6Ah + invoke DrawString8x8, 44, 130, OFFSET textSoundLevel3D, 00BBBBBBh + invoke FormatNumber, settingsVolume, OFFSET hudNumBuffer + invoke DrawString8x8, 124, 130, OFFSET hudNumBuffer, 00FFFFFFh + invoke DrawString8x8, 44, 150, OFFSET textFullscreenKey3D, 00A0A0A0h + invoke DrawString8x8, 44, 170, OFFSET textResume3D, 00D8BC6Ah + invoke DrawString8x8, 44, 188, OFFSET textQuit3D, 00BBBBBBh + invoke Pressed3D, 31h + test eax, eax + jz @F + xor displayFill3D, 1 + call SaveDisplaySettings3D +@@: + invoke Pressed3D, 32h + test eax, eax + jz @F + inc settingsLowSpec + cmp settingsLowSpec, 3 + jb pause_low_spec_saved + mov settingsLowSpec, 0 +pause_low_spec_saved: + call SaveProgress3D +@@: + invoke Pressed3D, 0BBh + test eax, eax + jz @F + cmp settingsVolume, 10 + jae @F + inc settingsVolume + call ApplySoundVolume + call SaveProgress3D +@@: + invoke Pressed3D, 0BDh + test eax, eax + jz @F + mov eax, settingsVolume + test eax, eax + jz @F + dec settingsVolume + call ApplySoundVolume + call SaveProgress3D +@@: + invoke Pressed3D, 51h + test eax, eax + jz @F + call SaveProgress3D + jmp engine_shutdown +present_frame: + mov eax, engineMode + cmp eax, lastPersistMode3D + je @F + cmp eax, MODE_WALK + jne @F + call SaveProgress3D +@@: + mov eax, engineMode + mov lastPersistMode3D, eax + call Present3D + mov mouseClick3D, 0 + lea edi, pressedKeys3D + xor eax, eax + mov ecx, 64 + rep stosd + invoke GetTickCount + sub eax, frameStart3D + mov ecx, 16 + cmp settingsLowSpec, 1 + jne @F + mov ecx, 24 +@@: + cmp settingsLowSpec, 2 + jne @F + mov ecx, 33 +@@: + cmp eax, ecx + jae engine_loop + sub ecx, eax + invoke Sleep, ecx + jmp engine_loop +engine_idle: + invoke Sleep, 50 + jmp engine_loop +engine_shutdown: + cmp hRaycastThread, 0 + je @F + mov bRaycastQuit, 1 + invoke SetEvent, hRaycastStartEvent + invoke WaitForSingleObject, hRaycastThread, 1000 + invoke CloseHandle, hRaycastThread + invoke CloseHandle, hRaycastStartEvent + invoke CloseHandle, hRaycastDoneEvent + mov hRaycastThread, 0 + mov hRaycastStartEvent, 0 + mov hRaycastDoneEvent, 0 +@@: + call SaveProgress3D + invoke PlayCasinoSound3D, 0, 0, 0 + call FreeRussianAssets3D + call FreeStartupAssets3D + call FreeCardTableAssets3D + call FreeBuckshotAssets3D + call FreeNativeSlots3D + call FreeNativeClover3D + call FreePyramidAssets3D + call FreeArrivalAssets3D + cmp h3DDC, 0 + je @F + invoke ReleaseDC, h3DWnd, h3DDC + mov h3DDC, 0 +@@: + cmp h3DWnd, 0 + je @F + invoke DestroyWindow, h3DWnd + mov h3DWnd, 0 +@@: + ret +StartCasino3D ENDP + +include src_graphics\platform_code.inc + +IFDEF CASINO_ACTION_TEST +include tools\tests\casino_actions_test.inc +ENDIF diff --git a/poker.exe b/poker.exe index f017cf7e3135319ebf4366ebee34a08827079587..2f4481cf9e97411dbcb595f8f7a95ec87ab815b8 100644 GIT binary patch delta 151265 zcma&P2Ygf2`#+wJw57C!GD~Tp>^)0aC9)Ajq_ncP3@;T0+7xhL3IPEtDqK-iP(naN zMFf?-qZAcnxKJDjj#GmJQ7Oy(-|utoy$Rsw`}>C%>9fysp7We}M~V(-79G!gdS3f- zAI@lc@AKyWxYsAIcu3-tpRa+x=e!eFOqYKr$-g;MCTNshS|@qw@wht-r>Hw6QXk=)Q zr|r%ho9&$wk+xJ)n%iOGortA%QYy7{O`7e3f!3Q1<6HEvB5JkQ%7eyo67Y8`{)T;hz(RMffR(X3!(>MVO*X~I~Q%UiPdjL+B{`8*L}WZFhGryQbY^|8$dB$i4~5`ql_(`=4?G- z&JqN<^g0Xlyxuo|Lw?VRQC>W#|$6#!NF+T;NtTLm*L?u&`HdTH3)M-@MmikWzb|L9tMR0 zP4*;`8Xe3GV@}+tAGbG;Sf^jNzmD$>F$-_IyO&L@ydDhFtd>CRNfS#YR%Bw$iRGJE z7h)5y>lMq_>bjC}SCcb}SQ`_YO01rVJwmLii9JCqR@pdD`0O>qk2i>YYGS*I9Wt>a z#I~E**Ti1CMn5`t84P%V$+YUH?9=_H7-90DQn?l#wyc z#Nx=yF|lM~y-chzvGz34brHcNlhK!0l!*-^_V*RTYmL~?CN`VcmseyIPZ55{hJ#qgFAbY?>QKm zBfbZ!{ka*8F8~P*awXCTd<$B}F$87j6!(tvvD6Z2*QVcAxthD*QD~lD#{mapRL1@h zvJSqr5W}#SfZ-=ELQ9up6KSFiMV+MET%A{w(IwIKS(kWMYH?M1JNHVN+h!~9FPcXW zgR-Q+yW)#~=@td}39R)vCF~k$7kj`8W=iAt!T9zF2q-V;G<;se(3QwAQ8~{hYC(eo zWGj!8L9@9U1~UnWNTzt)Dxono;>oJaM!6>9XNx?}!A z6l#RL6cmKq<9tT3hJodAu24vSAR?)Y&9+>4}ci zdIm^rGtQ@MtI;4%_C-Qcx^C%&tonW5!$zpA68qCe zsnGuspw-rt6Lyy1B%L9G8P(niJzf2ZtI}Viu`8I3O&S{eOeaKXKBkDg1hKfG&6X|x z^hPS>HOvY+pw~@mFmxBlrT3sYLN1l&0u_(aLS0x0W=c<}A70II@GP&fco<}n1KAs^ ztiP00fB1cf#sCcd@SsiK16%(L1 zV&pJ?w#WGd)FKKKAaHn%xQ~sP5ja za72;w9#HNq98~0-0AOHY-y-Kk33M%TP6Ci!*uKa)89=wf7Ddi`B~ZV_{wqtDEqMVD zKQdIQ5|mxVpRwOBJcyL1EW*{=e=kCo}mX|0dKx^^_TajbIav1#2WJ`J3N;cQ+ zMxwbogy)&N;KoFIRh+`mAw{jUQqc-5k)ulBF;Rrc$;hE>S%3_vV*y8y5<6?n=$1Nw z8e&Z#rnP4FEcpW?>pNhJcVA+!N(k>(`q(PT?h%lh1bHJhA16LIgeQ#z-aCZXA)Xn+ zR}pUz!Z#AH8p3Oi0&WlCEs6gPUySnHD@ph0{x9*WA$#7Bq^R^BZA zB&DAYNzW!;bc@jhH^V(8B=-;HhTkIhIK_H|#AXn0dyAMHziWoX{-Rj!L6hg&LU04<%+G~O z?jUVF?e+--gWe-+dfIkzq$xi9$vN*~U<>@N_IVY=hVvL>#%!QqEeK)>Chi!B5we1K znw;0ku!A9<1>d7j;L|iTvp8`$rliG#Hp8UpCsRi8;K5o$MFSB_p5wHp*2_H{TkXb*`4g;|j}@On z_q}0>EmcN@sgyTW;tM}1_K(D5Khpo7N)4n^A5~DCp~bahMEocChEOfyyEr z^Ya;_;Bdux+gICSub;O~S_NYO%nbdxy zE;ytQO0)d=l&L^}#*??)&|uC<>iwjyGN`Yb)CWm@)u1jjsZWvm_91;=$e+n3ZyR~< z85-Fp^(d)F59txLs#Z66^-bRIYPw^oP&i(_7W9?uMj~u8HmCU@Sm(4Hy%)D7cVU7n>(K zqY9>6#YUh%LD{(XA^R(iUBsuTdzjdsH;o!hqF8N;@qFke3Fz2Fq?N0GI+iogZT z9hB%#iFr3lJhILxCKv~aag-PrE}=sH^zkU0_=Xam_w_dEsY%q5jUnD5^~v}3G3jaT zONTV)}NIWHCx7bwA_q%dnAz(z0_YZC`3QSOjFpiXK#^zMxP7hl6* z@K0zsFn9NIIOx7KG#orE2N8W$o%#`H^n-O8*SlqGJMnZ#S`AcsV%-!-H?G^<{VtqZ z`#qx51_vyDEsOXwz=N4Gksh-KUpI(;oN$z#MZRtQ5MuXJ?O&k5%&Dk{7-7lgQg#q_ z#b%O~*eSstQ)2JF-puFT>wDr50-q9lKZ`iPf(BX8U<+b8GTBP(|J5y+Mao_gAap3m zt+Z&XE$9HOC^`2I5ZQ_)_B|oC1+k5lAX`d78*qrDpp6!^*@A`}uI}J5|Gv?{O3<`8 zn<$As`?n%44kM;p)OW+E7V-P_`h|K!xTBLcoNL|$S|Cf#W1UEN%RuY44Rgx0O}9Jcl{f5!x*JZ zW37~D4X41^D$AHeUk4h@tn+G5nWA!iwk4sS^nlv@Cb~LfjWFKhyuMEVr9q2!FcNt225nRM#V10_<&<)K z;b&5@f5Tdx-a!v~>KpW^+Nc4k$g;u&t%&qlpa;H&+e3zW{|4j0nV5Y&u=kBB+uLKh zzNTS)4upL{-7BeopbGjI4Qq2W<40V^B%t+}ZiaXyJ;8ZPZ{IhN@RG5CSHB9Yc$_p} zr664lg%?3PF{v2Lq^M{lHEo3-8F(6SY~XUWFX`rUUk8J`SYTEf6$|cbUF`3cEk<5M z>3{R+a~1@O{qWOHKeNTXz|~53G@zb=!#K+k?dlJg$@jtzWA{onKEwr!#Z{PYFL}LRG@==b+r4 z{G;G&H3<1B`7_qpUD~*+c4_On3kLK7jqA4}b0Ni;HDV4Sxk@h}v>T(6nD#hMb3|`t zUSHifxg~YFSvu`4o#vKKW9keVlCwABm7dRC`81-Ad&HRGvZ+h#AlY(<^lanhIO?+l z^Ku;ZH6X-s)K`uW#!;Iukr0PbUlJh>qrR$yIE?yg5aKZEOC!W#)K`ZP$3I^aNh8$a z6%5HM62KkJkw$wteC~6?LUGLESkIwo4x)dFt!P?b)%AMwrZwFh zjFJ|sbZ+kZ4EpGMys)VyV`S7Az+fiHV&I}k6Z{F_SX}foqPz!w@`K6Ug5I|v)_F~@@Ik$Tt4Royb1>MO2e{wd^< zSr6_KZmCD!LaQEs15}%qbjLiLKiRyjuag<$SilwWT)CrRB=Rd4SFMU@iq04cvJN^H zWK*0O<(4Z(OcsS{9yPxdRtcZDIajhWUZ$FlN#|v%`IvNGrkamQ=Vhw-m~>vInvY56 zWvcm@bjr#4j(JyM$;-Us0)O7Gz&vhTfLZthARm)bNj7%OJ4s3Axij03bM1KtDZ%7d z673xG-l7CE7rr~@uOXkw>_rNLlrYQg+e4IT>?uojEG(h~Gh12c=$Q8aEx4K8KIXZi zcX7-cN;*^BQx@k~*pGV5eihC0h=pTbI}lZlGCk!yAD*L1^baXoj@H;+JY^Fd3$KFa zV-Hdy*KAk;Ip+Pu0J9_cn2cU_Bp;K}%Z}t@GAePlgk#=PO0#46n4F3e4Nm^UUUo81 zSv)GwY*nl{vc`Gsk`)0KJE3AFM4~-|g^}m7f*gxA;^rdKEi7&+~Hy#>b!~ z1Ce-BWU(c({eOvYDW$9||6d~CD-rCG8)OINk~C=V4Vrimi+eE#YPh16WoH`Cv?H7K z6D=$E1QL`hRgpufsiqWD98&zFrTvK^C{jG^fWSp8spV0SS;BzzdZSjys-e*`PVQ=q zR=jkv$D*oiMDL!>dP3{8ssIb){@vfDNq*#85o92As6MCztKWs9P?LONUUSNZXt1w`HxvhIoF)h z`NXb97P?h&lcQXD3X0)MjUL9jhAAMZo{SDH5KAt+8zG$w<8s9x*W_VFVRgsWC)tg2Mfz0?z=sQB{(bEI z&3c`7y}3wRR2ls#CC@G9JoSe~e#R-tqJ~=xtUc7P~>y@nC$dH=Hg2DJ<+2S{x zZ(uE>|K4t3BJ7Es9|wcdw%$LpW+Q)3TaH)?lGc<;3jxWp=d!%)Y>`dvrn~henbq&7 zz}*nYm3I?li@M;2d)<9l*1>{WI5&L@MQeE!Zvb(z6{x(RdN9rg7nhOy)P8Vd$z2h~ z9R_v**&}!BN$u<1whKaEe+GOfp`Aw|z8wn$QHck$f0OnKXu(WoxhUjeiCnZT1yPIM zt>?FImcg;fg|_4b6y>U>RXPmOJ0RfK$`kA=!I}iy5yWy#Ki-nc{UPA@-#WAb7CK{-KrkykE@m_V&CHoB6% zyv&zzaz_*r`qBl@l?YdLT>BsH2VF1fklq5^2v?%V$x%Df70;8M6KD8+-~K56(XQ`- z)9q0%eLmWuM$^5(E77GqhbV@_T4hpf^o$|#qiI|ur|#7&cC6No%#$C1If2aV+?*1- zxs8^KQs?T&A}}K@gMVJ8?OZ39s_EWXTR{q8eR9XP%DUiKL*o5|pjA zU_o6_P%x8BQJ$v^vY{HW^zHPoF)s8OS9|5A-m&0u7R#x-K`qkAWblKToOVSf&Oem*gJ`z`*|$?Y5}B#BAnNW2Ts54{ zRYw81FpPMtMuoN2l&MOUSAYguBIy^AK9lt8AAtTO>D3@Vo%AK7|48~wqC<#&4%E1k z>`KNp{@cl!M$YaJf_l%+Nlgi_rBWtYV~8%7N^%7&m12~V{%GgwDdbO}_+PBmHllX} z)mH4*H+60u@s56`a}~MgoS7X=WFP{4Jx>0OFX$SyOG1aBTrsQqM&&myu@=yQRJjrG z{1G7+8i7Q)8z3qd7oTF-6x)6c21^?whAI;`qD%ARkx6HB<#?RaW%;gtG8uPG1oP6l z;xy)D#>q<;J!Sn1>U+xC7F70>)hLJz)Ge{o2AbU#sHR}7VQhhT1+&*N;k3G2QPtLm z(Tga~?pcT3vk{g|u1<*Tvy8$B3YD(~DX|i`Uu#Rk)e@sqQN+1buh^wpP0~+-E`#aU zHt@{tAaLxg^zL1%CKF#neg^HJiK|ihy?6Box>S<~b}lmQWXeleaz_@`I}QuXnfC3h zv|M3A@d&)pexkkZR5?lKdYrdzfy$Mdp0eio6Fs6au5(NjLn~nW?k~7o2JnPHH4E%= zA8qvDhIZM7jozCe?qdnpSi+e@!Cvf{e5%-bx!bzla}jvOLbcCq==&1+Wb88sVVVzSk|6GO zac3sM06<(|nohL^fJ1kfX6MQQ3)iJ^X)%UZ3gc|${n&r#uici)uI_^1vzu5@*+AWosJoE5uVYD$BawIL-J)R&}lBqgCYjwH!R(s7W2i8K?~ zAcli1r;l8@a@Q(Q;!Q{>kLdcPbJ=3%SI~CLsb?9OS{lU`(NHEQI5Cubb?yTqMu%K+ zgv0$9%8dg_q##fnBf9&JvOUwN7Ii91jzY7VFP6CW2*ulk%-SrosUW&#mmBHVUZz-i zP|-a$|~b&yFBCtmx~^!5-a+RukjgWcq1(l=3T zvDb%)y?+h5gIWSNG7+NIb=2tBGx+)i>EM|Y7oVS?wIVNCM3UDHjv%aDZ5ZS5tX5(S z7i7&joer6S>9jhNs1F_JPpAtZ@d1j)J%VC7j=$uPk|nPZIOe?ugKp6a7Q{civLcTH z>vG2Vg!yWtnQY!+`Og8?gJ%Nb{Zk;yM)@8@Z6euU021xsd6@P5gt^w0h``Tc-%k*J zkd^5s+GC}z{Yu4`4g_nMhVQowFQ(x=AL$SEsFjH#apb_GPT2%#Y_(DOj|r!SV;(mu zns!t_+M^bCaov31;9Gl$cXUR=XkH%?fgotlkZ@tYB>XWAgttgIqX^%TaEOFsitsTB zf`q*!j1YT32qx0B$H{M7;Y!g7v0}=Lwp z3y4PUMqPo_Nz4J_80JdR0qM%?>=*#o^~Cn7FotXCk+>gFUgjyRsIKmzwQ&87jN-Hd z>)!sb*QSW-7f>np9@wbJk`gH|nNRnb6Tv}SEiP`FDsP%8`$1p(`46_(F3yz8xN?;4 zzX@D)rTGI)$VrT8x@d^|giY6Qs=|{ie$YU{-H>WQpIp$?pXi(3fXu?G9;du2Ru~y* z7`i})LGo=XG&rQ6=v(VfNE%alf;y_9(Ljtfp+7*`iySA;?L=KwD{eUf=cbS&9sa=J z=vnsDWllO=h1Z0vCV z(7bkH3zYVaTdhCUe}fwyR-Kvbajpemb2&UMRsx6*CK3;PhhDYXlz7#YAO#Y{A)&p^ z{qdY_%rfeVJF(YSNuYtK?IU}PWK&VJu-N@T)VJMP)13o}E0n!N=np`-;U8H)}8zhH~Y-@VVkThM)*LD~nMXr<@bGAU_6T@hNQ# zg}X}O3m6)6#c?UjszVt2Rsj592W~;#j6tEq-phj6!}-Bb=k_=$5nqrdu5kT7nI)x> zgxjOmuH|ti5e#*?gFH@}py)A*W=TxFEtgiU?-z|?qn&krJ{pB>n=D;?X9f}kI4w?Jm&H*dqrebiqM zMxedQ#uslC+D@Sf!}R{ysnsYt32fzl=_EibZBF(Lr41XHUbQ)ki&K`eMHGk3f?@ip zY~}7L*fc^Q-Hjbo&?Dq7x4QO%(OLGspcS+&j$ZH=5&_3iiKxz{3yXVSQ~j>i}d|Hbh_HQ)2}FEFTv+@GsxNb?TQ)4+@(?zyFi!Ph)j;tCt64!jiR!lL%( zW|StQHX95xYEy3%T1=q{j8`s&l5|f_h>c<)r4(%qeIXRothN=+C!!L}X;pO$qe>Bcigw=E16r=o}2`Y_Ku8Dxx`|;$%dZ z%a)){2gOxgq-Yu5U zt(+(@4nPj$Z1~{G!35h&*&q2J7pqiIvp97DtCcGn{bP>MM$Ashkve?PrG+p943#v% zQ8HKj1YaWL5FKW~k-xg}=Ew)H zpo&eQB_=Z-auWRvQbzdKVvnuDzaK=SU{`JJC=1>w1XqA6r}v|O$>|*n zy0W6Kw!&Y>B6ixdTlM)vT6ATlUG2qTh^Q%~zcGi1S(vS~Z9LR!1Vee1#Fii7+%Npn zaC(UNX{Wa8e+;R@eUs;^J--%gLi(3CjN3(u)eMs@o<{5f)fM*$xM2LXR_`=4y|OI5 zkw{1BJ~kA})29wib<@stNQyn!AaY6_A_Qix5_>i^@F}t1Z9z9QoTsc^L5IELu)-;IKI z4a?9R?+id|$AB+hK)R?@y7b!3sdV)c8XhB+*n0s&53mFMf?-jcPVK`GSLN&l#8JU5 zGgNG$MOnZrV91+lQ~}T3QoxHSK#l-Uah{YTz>`c`+1Vc$ZVmtsS+o(P$pJtnx0LHc z8V3Nk$gu?5f*2P3;2*FmE6@xT5Z^K-

ZDIoygUr>uS7W0kDdvpb>@$9=z9IM%m_ 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

f?W8CG6Z?oq3{b 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⋙_mztA>3EQjNIM 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 z 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 vV{~`?-F*7>!9iX9-}vu1r#nQC@Ta} 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 F{sT_f6zu>2 diff --git a/poker.obj b/poker.obj index ac529566f81588bc550592fc967c2e1db66db45e..1a3aa40a62cab769de54717c883f1106997da985 100644 GIT binary patch delta 181805 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�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

  • AlmGABvd(r-rN8rwI8TSa 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%0DLL)Bzm*aT_HUw3Bx(`3F!YSO=0@E?$7 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