From fed880cce2a97e2fbeb632835f7fd453c09d2972 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: Fri, 16 Oct 2026 13:47:23 +0300 Subject: [PATCH] feat(charms): port and integrate roguelike charms system into 3D casino MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add 4 unique charms: Clover of Luck, Golden Horseshoe, Skull of Immortality, Devil's Contract - Add Sidorovich shop tabs ([РУБ�ШКИ] / [Т�ЛИСМ��Ы]) with TAB/arrow navigation and purchases - Extend casino3d-progress.dat to 32 bytes with backward-compatible save/load - Hook event triggers into Blackjack, Poker, Durak, Coin, Dice, Scratch, Slots, Roulette, Russian Roulette, Buckshot, and Hell Tower - Display active charm badges on HUD and Hell Tower briefing --- build/graphics/poker.exe | Bin 1772032 -> 1404928 bytes casino3d.inc | 14 +- poker.exe | Bin 1772032 -> 1404928 bytes poker.obj | Bin 1551470 -> 1557308 bytes src_graphics/buckshot.inc | 2852 +++++++++++++++-------------- src_graphics/charms.inc | 204 +++ src_graphics/charms_data.inc | 58 + src_graphics/hell_tower.inc | 739 ++++---- src_graphics/merchant_data.inc | 91 +- src_graphics/merchant_scene.inc | 223 ++- src_graphics/native_blackjack.inc | 687 +++---- src_graphics/native_clover.inc | 1374 +++++++------- src_graphics/native_coin.inc | 1315 ++++++------- src_graphics/native_durak.inc | 1779 +++++++++--------- src_graphics/native_poker.inc | 1264 ++++++------- src_graphics/native_slots.inc | 1256 ++++++------- src_graphics/native_wheel.inc | 1962 ++++++++++---------- src_graphics/platform_code.inc | 1194 ++++++------ src_graphics/platform_data.inc | 2 +- src_graphics/russian_roulette.inc | 1539 ++++++++-------- src_graphics/scratch.inc | 10 + 21 files changed, 8574 insertions(+), 7989 deletions(-) create mode 100644 src_graphics/charms.inc create mode 100644 src_graphics/charms_data.inc diff --git a/build/graphics/poker.exe b/build/graphics/poker.exe index 19d8aa211f0d44553cd762e2ccf8d5871a168687..de9cd1e5f1b2fdadb2b966d6b88c39e7cf8020fd 100644 GIT binary patch delta 123889 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®My{u`p7U$eFMdlwQ=O{4shfL5&U!GR zM)LG8uF|HaFYhMlGjeGU;eyZPDEdr};`QVzpQX{G6esa$Or7PXNn`g0CjGHx5EYF} z0qjvIcV&l`ev+4ZhL}>%5F+&q{vZmD;}?S&Mq_-q^3;71NOV8;s@~-st2_J@n%Pacp*YIyCReuh>)Zs@=b{F;ve=~ zeRRWI6WbOqei2+oOYz6_gD0{MPxON;}wA3Lax|CBAQR&b|!8W(&P%MoJuw6 zO}eG4n_X8C)n76DLYPEmrlyd6sVO9on!<&}Z9^})cH?p*a8gQ=-E=8RTXX&voVbLm z%Dk5X9k>n$Ng=G;O<#wgo3IYjD5ulz=^$ckC;}%Dqk)!&_@nYrG4_#+mCG1iNof30 z|L#LCC&mO}@JGE13~rTMIoo3-^wu;+5`C5#vsU7!V<#a(uXh+59F5;03}4=tWi~Fs z5kT&OMRZ}Iy=fadgA<24UAGdm=}zRw!RE`k(r$y!m3|q7b$}2-+o3C2_%i5Du|7I% z>d1{}z6m6E2L^?TYWRX>p;r1?k|0K$1fT~x3D74iX{sl9l%)xx5lhbp8)*ZE9TQ3! zAkizR`0Gx7mVQbR6KY?QSPKedzP&BT`VJ;9t#}&aZ(Yd*VtSV9i8+@hrh+Z=1cz-* zMFC8xJ9z?eKYOjmRs^=Dw{RsKtb^0+Eu~=sCmCSe<(_e`BUv&IBP9rDc?6{iU9FUj zQruAZL}E#T<`UpB@act~51yx|((V>Z#W&lDDtaGe^LA_?jmJ3c1r}D(k*Ni!> zkegO8yxUeG49U9oVs%apfcQ>U!{&ipiHTUXhoRuwT5v@XX78h82bJ1q$jpt%t3gIJ z63JR2Xz)2%DvNR$Y~kt(GzX&r{mZ&^bwv)~F0@9g(#MJy^eJM7Yg_X`&bLPUXa|-s zZHPmY`}k0VsuevxIZ)D7^s%XEz9%Q;rJ#;4KJQR}0Rz(bqE~947g8gz634LtT^DBa zFQ9ZCX+|O3N8MQV2F$y@30SxSweMX4IMcRo> zl%0qc}7?x|Aiu^dkNIu&+QIc<7JbOw$bdPGnl zSOc+PYSJqlYS+S$)!8FahihnBKAY%%qBKk`VI18$cnbG~;AsUZ3@po1kDwA9mRQv~ zLZ`hrFNH6wUzWk2v@`}I4Ftlo)Kga=v=o-rlUn3qNlfU+ zgF0$d=S|$Ao2h%MAHZ5&pl0*Sz{o?c+1%zn7_n;viz72cvaQ0on;HS@aKdI5gJv_G zsKPG(H2ruNJ)W)3dU^{-y8N;bXOo+@SH3tHF#*zs{!ZB>bIlq&34IbEWUWNmoK9?+psCNKDUfz+ zm4Wk0=ClUkjS<=fKzU?1M=!Fi0f_t`>HAn$wRH`ZMGY;h!^JZ5&ufN(M$7E(xC3GCP!J3k(LUx5+|XRQ1z%al8u_J`*4+SdrKGPV=0K$@7Mcu&;Y_#D@*Md+3a#xYUpXJxn^{&hjUxdlc zqV7`7RODkS$4#ranA$oJFaBmv2gDla)w#Wx2*GRNa^vlLg6(UjOPQV0a$RQ2Pk6EX z6Iv_dMODlg%EPVdYIoaq5bMy+anH7_NXqcydqAkJ~nY_|4ioI2lS&dYK*lJoGt+ana+LHpW*4$1~$jz%-jo)6Nx0W2vy zRJKcB2vB!R`J%qMugqMs8ABA!4#^?+d@!K_KmO(9(pQJzx{THBlt#1JYbajiTi*-@Gt0=Lcu`zcRZ+dtx(p2S&Gc!P8gKm z|Af+4e#%E@F24VHBT{nO2!pRxjZ8vm;q{(u^#sU~F%t(H(c2=U2w535RT&{iPq++k zqA)V@2+9KZlL)`|^`tm|9MZpD-AuW6k8ngwqeInPLP5ZpFnnuWKbG^=7nsF4-w`d1 zP@7dF`U%b_LHAq-xTs3hhcJRGoexWX5jOK-Ns8EGCSf)WM(y%!qJ{y?CZ1pb<3I*{ zDt+^>DGC6MDIyuGjjV-Y>_D!-idxDSBM8l^yv*`xC1lQ`A^^q7+;7+78T~|xM7XX} zmlM}3FSTjxi==+2nszicLL^l}1h)_)?%X=sxsd-QODUc$K zr1m8$KexIfuaL|a)$be`E=0HI@R4TeK6Qnw50jSKL8}jc6UAB=+DP*d+$mt7@BNb0 z+#bE7MqPyUgt{I>(p3w!U}?O4X=0qK^VuJRw{)A#{fFWWHR-rPWkS+tS%Oq9RwEqC zT34XeOK1wqx$Rw0NElwg;`~l@iB#CvoO(;p)xlmyS=}}2kEj|h9M0&{gb6kOKvTe4 zx0dXpARN}Z4^!esbb0jZXkBzBCQG%@21IS-*Px(>qgO{W)iuEG!vZXww+h%+8Z321 z#X_wxlz2oudQ*h-SF4d=bSv{C6l!Gg51mGn07s+=f7A(%$)18*Dez3S3-35Yw*B>K z-KIz=dW-toPjn{Pxq4QBDy_FV!kqPLqr(Z^{Tu$Bq}yvk&yntG)dC5BTi^WPQCwUD z>Uv`I%6}(`FH{%%5=<)%l;&Vc@Okj5pQ2#6mau9dr|;d_@hc=JjXQ5ZW`E+hL3A20 zwbh;v?5=EFtrnM$4N!|=Ebkg)$&ZyPt%JMa=GKBRU)_s0Kq90#S|Ha=?*ovcLRd!P(2@1s~23( zZe&)yiGha&rM3dK`n`hSGT$;OJ_tID87=$+CvO<9b6n)t(-;UFYBVfRXCRk!effOPHteHhscG0T(d)31GMOfPf`UucjwJc4p zb=FAM#a?#Tk&upgGq23+g@IgE+G^x)f71)4_=OlOhyB@I1>q>2r&Ay*67-KObsh1( z_qvZaELCFuj;ll-${DUZQzM&SiWTTebx!ipB%?#!ixTNjljyJh6p!SNGa|mTR^KHJ zenbeI63V^AdR<)xIcJ7V$NzreuF0sf((?Kd4i#N}{8gP~G6*TBN_}f&FA4o}H)-d> zm|KOycyotywg_l{i*v#}xUq>>3E8pf0t91a`(7p;W7L@c;YD>GXLwe%df;Q!$r);} zA6;3knt;}pnN9CNR6kf3OXu4IRPA{J(=5Gi5-XfQ4yzXTN1a=DD*7Gfn&b}-53L&p zofDx`@(nZ=8X`@~YbX0Ojg_QwYEKa)E#~TmZ4Q;-H{h4oCdI-61Z(xOYDnEUk?bSY zBL$usfEM4OP8GO#zV6&<{A=m>awe|NVnoP!e<;fuNb_rm{Rl7AixsrWNKON)Zp9Kq zE2t8=EUUuj*H%qjk|1W+vvJqs%lr9HbRx!PjF;kfCN6Xu3CXOf%BRV(DPxQcbCxbM*3<;b3xUDgn5|VeR~Q>;9LKdR)%bwiP+ly|SND7$AKT4a zL|kh!ErbG%$d32^Y0Tjis?|x*J`<%}`;hyFMXoi@u}I%lf{hx%WIK&9h_4u1RdA0B z)CE6u8VjZ2^^P^%e9ICW8i4-rvFke2rI}9s7_t8-2yHfRh7L?JNY(KJ(KMHc@01|3 zj^BC#=6gZJr9d}`kegS8|0j^T5q(QNMSqT<_50k` zv9zkm#CR3`Isf0_=H4SCbM$NKv`!uYhUmbervPE3Y^GTQ5nSrq%xod`Z47$SUKo`CJ-K> z6L>V5*7bbQvomA>s8%cg23d9^d;LrEFM}vro<6)EFA+5n2*BG}6lq z@~scM3%4p}*5%{iI~4$Z>53yL(2e`bYUwc_cqv9U{REIo!`=6nwbR>jMRmkNSx4xF zeyjofNv{tdNiK%p_)~E9fz=<;mPu{a>V5PZFSsw>?u2>BymjE;yrxA&lSh`Uh+!t`q}`R3rC*Oz#EE(2ieXF8K! zq~|&l*+g>swAr)`L^zYt;+R}#GQ(_snkc+WHA^;kY@VtYn$153g->TtMEF~HsGxRh z-qi#!j*rD4+-Rt3D(zER}=w7^|}0JyP||Z>zXBrZ3xPTC?Z$R=aj9B;@zHa zn&00q;azOnahu=IClySy`YhAuk0{oq9n#NHg=GmstfTbNZYSV}qI1+bYfmoa)6?-m z^i+zFmGq5xdyw(c?-cr-ZUh5zLQW%42$`jPIq>=n_bBt3EPHbXzT(vUs@c>Cz2?)K zWTqa^T#d%rwkLDVkB88HFq%Kingy1g58Api?ZhmM-)(z>c6$kee)^4*`0Q?cL~S4k zo(~4wmL#aP2E)BNl)52@#PMzkeqtd6QCqUN-+TaJ%!{mjcr^v*81ieMlcue(&M_Mo z!FX9R-g@Ha9mcey`%eeE_h8d!w$FAjx$RRnE4}vl6A)#v`)@$fK4)Gr<7~6JnV(UJ zvWt3$Z@|0NH{jjiHL7C{cr%Va;0@3N-e=@mjMXKCZ6R3nnR(s;rsL-MHy}!$e-23U zTz$!0*SyQWLpfY61S?bDj}1}(OP;3JAe;y@)@3_^KsJH@c0x`A-zw$ z?<3b;+Yu?9hTF=!LGfZV1F*7a~vi0q^DB8q=`pPm&A2)>!H5+e28YFKvKLR_k@dP(SQ3Reiu#4KA27$>u5dq*BihfY=KZv7tk)DpcN!uMOiHtDRhR zkqz(sgAT{UTTpnNq2w-mbIAT=T8jm#kl;czoM;w5zDntL1TV8*r-rCo z4IMScY1;^@b6IF3{ovCMYC505qCSEY=!eISoC&$0V?K1?{tble`6xsPtT&Oitm7^g-fnguHs`d-1?m7e<&iZIIx; z@mkYXCFWz{y=LPdfJx>8R%RoQ4Vy8xZ|@9uQEK>_EXXi)H%!9$-JSTs;o=?m!GW)B z_}NNdIi9^co_QZNgV{S7=#J0c!N9@z>}?F-qn%qB=vxy$P_1I_dUJzX#)Q*&pUGd&@UT&pJ}xVlzk%uH~DA;3Y$gO`x28VTtVuA9Gxe#%6yQaONQq zJbJ13w=w_)>aw(tPTl=7misR}&o^lZJ2A<%8LX(B&yicBohotbX10UDt^!$RSmiW? zbq6@l{gcMT+fc8)udPGN)Pd_D@YHnG*TCV<5@F`{pLfO7!-SSmV~3czR&z7^^SOFDHi?Y zoDp~~ukW>DUST9p;XFtIixT4V>dj+aP@}HFz@SSTSy4~V2Z z>-PQ$5rwfnCTZ;|@H0NWAd;`nlwG#yoBy-h5gl^Tkamv|5-S&@ISA7*aA-8XV7uF z7^UJB+7o}|3vm2Nl5X11Lhp7PHR^_@GG)7DwXkOLUy19HN7nFUYy%bJhmS;Y&pQ68 zo8Z0l=h_f2&ZzxUKSRY=EI%W5rLVF)3q0e7!Z`hXP=B?<5a(RRn1{J;FY;vGdI>Vq zSTQCP+=cBu0jb=8g)g0nCZUvWlg=%PQwtV|o5iL3j&2rTC`Ge)216@ax&$!X(^B## z4SKYs6|B32-@kBYPVs-Sf2Q!D4h)w63&C={O@a$9`s~9wwKe!nUIt0%S)!vNh`0)8t_29jF)Fsdm#j5MW1v zMb*u~$wQvmOi|a>OsRy{I=KW;s@V}}+DpkfZsra50oSix3mGm#zXU#TDH`vAZnNHENAmHE1izbW_;?GX4oCAYf)p8QXnQ0je*+_nn>7ox`7g|qD(JJ+T z2o1nS+ygj`fu!cDy9DPMalRNaQ{BoG-kG>jn6e@GL-Zm4Cazj_z!^6v6)FAChSV=m z`05jE**h^2E2k`lPcyz$K0B|j6ib3Ru9LWOhJ83MHUu|x<2#MZrjU=!}!==`Vo}t#KYid@^=bIde}=jpx|{ z(KLHK@v#?Y$gw`8egr}k*CgYgDuSC}5eJd&Ao^QE)uR5shmWo3E!Xvugx@u; zaP<^gCvm$GMTKZZAYt2%UjB1DaUss42h}IA-RY{tqrUZy#}c%z7hg!Jn2kkX@U4&1 zJ}fK#Nh_Z0#1>h$|! zlk4WC)tH_wj)cire>_M(g7O=(8J?XD@ha8pmH)uqTuxb}VuM6Z?dQQ@9qA+MhsjEz zc3^BMO#UAkDGaqqfDE-!fD6>(U$8f>6thv?NoZg-&cH=MUcF4`&L%b?%eem$m98%5 zy1|!)M~JFyRUw!fmCYEliH}#N)Ws+*9s>UPsDHr1%X~(i9rKuPkA(BzIu(85LJ_B zCf}xsw%5i4N_XpO{ap2P1Zdm&5)Lt#8y)$kFl+17FG-pm6$yA1O5aOQi3H z8E9ZM?G}h2(C3zcy=r1!-Ez*XJAALXD#Jc95P@Rs^W*!md1)*sA(d!#_Db7i=zXR_pVS80&Aa<+xtkY3tX5$~hP@@K;1Zc~d{E!qP!lmD) z2kcM;w|{wRT79xh(lzgmyHzv?_bo6ldyW^Fl2`<^+8g4RO|(DCt2>uXZ^^tbRW&iS zY~phglls!AyI4dc`xsw%0a^-mlWwGG||zs`~!uA0t-c`e9o za?5=MqV;hB$1j^~e^j`9t`q=m@g9h=_I<@ayGQ0OZZkE+gv zALFRSQQE(P_4~|;)oRsxcDOk;suneVbq7}InYDj&*k=fETCF}1TvjJXY9{PJinXWN zy^HHkMvKRp8rozzJiIQyTAc|!o(UW{D09{-&Oxw{6?%c%M&#iacZhq6p1~&yRrc2~ zYvgllBUW#wR5r|-9X48;?!Ef zB1mCpF+1|wzJKAf+hkOe2&(6jZE@$bu zpZ1+_<4iAYI3cIJCv*ii%IMkIBYJ~YxbD^$eUnjr2lFUrV{n-4Ag65@M@mNGKHbUQ zuJBvfnTY)A4W(;13tyxfivo>MMe>-0Zy4pMLPBl$>!S`Tl7PJ`g`6^vp2bWjUFt)9 zt_LUhY12#n1zdcxxGYs(0fb@N&mq(C9@jPF;B3734@6>1Qj-~uo>QY9gltQFx3usq zD^CGO;-2af`&M= zGV+_Z-`CkX2cN4#g7K<}*cfus9IDgIB`<7c;@gpx`rH=Ib}ch!#kaIhhvgI}LUo~A zbkGT_puPqte6al5iM9HAVkxHRO6>KiF8ICV?0CULE%WwDQUOc)EkZ+R0BbIo8jyLm zIPuagD^8h%y97k~rzCAsThIu)A7f_uq64)J8>k#bW5~*jS54RNVkXBU0~r{un7(Rq z;W7qbUpr4K=-TIHj9FWfg3jm|AuddnB3G2BaXS;0C=fQn@? ze)|=Roj{Q5V7%Z#;z7=_XGf5IB!D574KZkIon~rIjaj2up_GaoEUN5RFz63mR1)YX z2UR=V=}hrHwfB_m(wEMP@*pXvOW$PD6TnRq;oh;7R{ep@WkYch5!t;82yHiEs5?H!e-@oIhEDXSc0Ko%G4>=<&zF-%4@ zmd5B+_d?50hSNjz}kANVe z9I#e$KC+#y`(4C- zoz7(M5tFx~7$iL$Rf#nGuvh2k86sD!UxBQ8u+L7Bq7Lxi=wWy_vN+E#k>9 z+VIycxHr;+JWVBPm)GM?teF%5Y@7r;cFI?t#P>)N}}$PiEqFlpfkblM=u7N zUliUd2GDs(flx8V3#1d#Kq&k@9^tzT)V09X)#|1j@#3XS2{Bx~QI``xEW6>X@lR!k zc#EaO#NbDa=@(C;3cJ?IwuYEST+YNvsxoE?h35M1 zQVUVU(>N(iXftA1TFUani%(nz)o#>q***QEhF_qR_q>7>k4vCk9l&Pr+zXN=+7GAkklPnEIUibMR2r>6{!D0 zT~LB*1&WBdnFST}f!f&Sa+S#=kv$uJQi*m6|78ht(O@#tyO33w>)aK<^TDfNc3WOi9DFLU?^ z1)V0uNeav>o%IqzKIF;Wl+ET};gMe9)Qf&(exUCW$2!W}O#5!47k?Aqz{anriRPZOVjs-?v(oepxEFDCe0wOrF|XGj%5CnJ|8#@Y$}y55ZtV)`IE zktH=61&aCTa93CM(!^=bw|<2FD2rgj<} zi%`%N2jFW|stYqUwH7<`UY~pOaeeqk%0?7WTa>Uto}u663!2UM11q`bE`kqNNqkZV zBa>6r&tZqO$PE2~AIbF~vIFh!Q@aAnT!)>c2U>%x)%#G`oLFcD(+`29_Z9Ur_UL8V z#*!JgzUT6+x>8AHbe&91^(oWp zn)zznA`~D8SL8c7$!%1n-id@vv$+$R9V@jWd|<-YxD42vob5yW^I9OLW55|nR>@1b zb*JhfM_2sJevehjH)PmR*OEyxi#ipMG@fo8=^chA)eYU~o4I)TvmN_xSb1yPtZaP( zOCmwzQAM@67_fdUT>(md-6! zZ&mVDTx)V26*Mm*@^&W0JIkX5)VWEe}KL&XAJqLw?Q1uY(}ZQ&F;} z9mTWy#t4eA>k2TN$VbWpc55DUAK>z*yJ`_H`+}?LQC3YQDynzVv%MF8MNNL~Tp>*4 zG|7Xn!+-cTY=L>V0uEuK)9_4TqEV(zyX15)hy6bQWaT9lYua=z1@~3Q+#K_pKPPtS znr7pV@E~bD1%+lKCKCF23q9Lk$MfdUsel7M6^mW2^8lIl74EZWxxjrEEtB!QIW$VN zNOEs+awoZrG<=x$Ks>JlWN>hnG9~9vdoME^6`{|^AG>$H+4v5CiXY>T+4u?(uAt|K z`I$oL75f<^b2eN+&;R1*#|Y$_Y$Oluyv|I<)P}_{F{BX~DWsg*I|Nu(tD}(hwOci}{XngxtJ3^SX{-3Q$L^Z<%cC}@%Q;b9%CV}~dBfOF8I z3+p7a@ni6)>-bcG(A|R?6!$V4|4Q_edBgvI@%Ap@QC8R9_?yfm86fZm2pEt{nM6#dSWl~MX{$B0`nB~&kCzj~%7kb@MGHb} zRH_kCHx9KyQ!{8vzTaAFzn2NI=ls9tJb#{t$-b<;_S%M*?G->WV>m3v z3Kyz`lXgD0GcHx8+ zzEV{PVr%h+dC43}(dH$6PwOU1?lGrzsNBa{FtQk|{`Es{|8%K7!!jGqvXt%EX0bH> zWQ{(n`vC{kgLI=>Y$&!|bKPR&r8DvT7q~LoPdBw6G+q+baK&OgdOj~e-wG}9&t8R{ zB$`|NYR#-6c%EoZvb*I&PxCzF7Pat&3G6qyEKWl)eznC9cd0P(LhvX8aj8S)g*1;{5bXTiKBf2>G}VFnp|#1t zHZmiSOOtcr8+OWBfq|4V6e$)#cc)BIJO{COI~svG3r!&}k5K4)T3ywYFIHcn2X!GW{D~sa#vRNkXKEI!t4CY- zGo!Nt|M};AqBaUn!W6z^iS8P)Thndbv?y&NPr^hl2cWLctS8MaX-B(2By<>=q2mxn znr=o0X-XxJyBH6k-fd@QM{lJPm9!jYRwigOwCpq2UMWth!v6TSn7Z1!{lb{!_RH0P z#_j7)`|^uNw87x-Y)=%$SE$shV0!(U27EzS8@ejg1>m}pr@>JBlZ@S;#9MbO&1q)L ztNe;~lqMiIirUuZf>q-JLs5WEmCU-Kn40!s;x%-bczUdDr1Xb3dZt$6o)T|$oB!F( znhGylmYF+}+~k9TGArt5Vge6+&}C2No8cPjH4Kb^WJJ%` zt4<0NE%4fB-8LYNYZCyIV+9GR;jJ&?=0FV^sp^oez6XtzAj^yv$pV-cyb`x9e@h^l zR|2iAW5lP#sTVl};B8*F60#nJpoE-a17ORqL7Hw+WDQ;}!eoxk;;9~XZk>1|LJX3|Hw-MKi6){w5JL2je9<2xM zv-J^Dd>T-{K1^UcEHGY&T#f-E1Jy^cZzFl2RjtKyjqauCbriLASk93rEkvt8yrYul zZ)^nhB-N`2?20Q8w^tH?l&dc)tZ_xJtq0ds4C#iLeVLS)$z(@^L(<`Wl4m2?F++~} z8hYuJDTPy}&MC->rE*r|TkNDW7CMXQOh1b_q)(hWaU&}ZCj|;%RLh9IXDY#^`e zr=XHa`iORnvMzWXl^}5$nx}UT;mF#YEfXva-_R5yp4Ua%tQ;N%KaFslHQTubjCW9ye19O4_4^QXj1n;e4yfLh&}dc8b$9>~FdW z-v>UNrlrifhp{P(j2whY;Q?18^U$o6qrLPkg=Tb-Z#zti{*l)t_EA!BaMPImWg@fSR2ZC%lZ( zg;RB53+Ut?b8*#AmLW0SV4$1Gb6E#qmK>lYP-rcfCs3($zPg1#j^V2x?^94MOfMKX zMD1<>6i>Fm=Di=-J0tCyRmjm3A~M;vallZEW7rS7pvalT76Yo(fi~+WU>fSVZ`R*} zNZ{4KysRh2*+8AwhqSVE(k=kV->I2SsYwAJP13h1)zumK=><;}Z%}^(ltuX&%v$hz z96UF0l$!i$!phEAJxq%gX9w~L|4wAZd9ucOaff=V5Aa}hJ_rZmtyPI(@jqWw_3E%# zi$22MO~&F-m`Pn3(IQ&Ztt0gjL}t;hwMAEefzqta>2x3Yp>0@XMo_(J$(N(*xyk!& z#%eXyNP2j>%R(pC8VCGr^{7eIgjo+#6}{2Zbz7setwzsK3ohc5kW&LIw|-1-GfxOE zr*h|Bg1Se={5{!jltIecy_M>(lev%MYFc5S?;&#<^o1FtNfO^K%6^apwd3z7i#sbb zskXo{ot8I;C}|VwAB;6T5}sb$JH!oRWUqiX;U~Y#XZMRy5rvelRhmGMqRr)(3xl8 zm_x0=k4sL>h%9x*ywMzvCFcq$S&w%h<4ga*qR`DzKY$#UHtC&@tWvUrtVVY6d$C^JDYHszt)mecZlw%R8S_}b zo-xc*7jq@n1!>>qt5T^{_mzE9-()IaB2D>LoY7C*9|G6$F^*qlEu0k_9Hs8KhYk zM}}~PqJ;lG;_55>(2>mxVBv*zhe{?lGSG>aY>O;{W^n+yvu+^UGQmL|VAhd-SmL7a zJqh_zd9_(bAB|*^ir0*h3P}61q$=Hbe$xjJEe%ch&l>qU;<#g}OGDSN&YF<1&N{SA ztEx%)!K&)eNkqNb@GvEauKEEAN`rrZ;O05_N#41cG;G|`+gY)l3~rulrCiS*nUYI4 zUty(`ZLXkF|GQdg>H@VI-Hy(^Q2HzvibZ%*Z^aU-m5-UMYJA}}q!bFwa8B`lfE4|8 zf@M?N|M1_L&Zy&`#%#nVh8mXs2&XyD)KQ%n7*OH56Ya|U=qUh0QoyfJkRKhS%FwyZ zC}q9n0iT|#=cM#B57KrR8EJ4CNDB{1hZ}*ktBy}k%eB;JxcjBsZAq;IA@1lkYmk}& zvV;zYVke|d0_~DroN!K>j)Lys@oFUWwm5Qcc$cD=svI3XlE#apS4qqyu zh1S6e?Ngzt0ze9m&@>4bqWbU&Nv$Kq3a)-l+9T7cK#h9R)f-JHi;rrEeXG+X^}BHp zCjv+|@hTVx@}lE~0I0-np%m_VT%lS{z&9{Vu366=b0z*^#VhIJriuFe0}~AS-%(QcI6U zM2~1r^pfOdn$pPZr2eimB4;IMTB%cEm@iFplFM6BxsA>GtyjV+qNlSDYlK~A-@9I3uDH+zDd9W=Nmt;t1T_%vwqEtxkBY~+v z=%)uf=jC(9kO+;FZvcbw#v2$^Km#3xx7KV#zkFPtR0kNkaIx;a$Z-tYyE@+@VEa61 z4RCvf)@1JM9S{huzOH|TW_fi1-bde0ZD)O#kzb85^vbi%c!u~rKelyWt9#8LK7BASdf+Gxy4UIUjzo2f|Aj>fW`+x}xB(!Q_Y*lJ(fe_n>WVg`M^~pu zZ%&UcMO4wGQ+NEQTx-)e6U=&A$h8AJgv^GAIPSx54aaHak(+#2>uM2^s|;HW<8=6( z#ATu<>65An=QQ^ky+$&Nd-U=B2e)(AoQ^zswthN?cH#F74z0qhzy&?zDumAF&^ee> zXL5+1m7c+&c7%ul$6n!)G}5xDH_t<3euZMV^9$h!0ET+bYP5RX4mH`KpV^@eb|_|t z?yy6**`b^4&^31GayvBN4wc%WVmoxQ9U5($*0nyfA%#Cp z_-}|Xl$sS9KR1?I8yYpY)C;)K(7B~-gEU}n>6H}En5%b(=&&s`$K?B?O#oSp2sh*t z1=<@AWJ^0O*G@~(J*xcJH`!s6bEi=ayYWVGO8lf)y2O3tEd@zShhp+wO%WjtfRGTtj zheHc9+LL9#(u9^vcwS6gi0uRVMJmU&=hDv6Uasb#c4)z8ulp{RyqKDewNKx!zFq~`gT?(@M#$yatjB%xzo-@)$y{f*umM@#P9-EXBMSEf|H86@Ip6N^DYik zdg-0eF1VSy^Ko8Pa`pG|0P>_O;t0u&SBakk(T|qT&q0Ud4byBOL8`Wt<_Rt0;y_ei z>y=HJiwlmfZo$Fq7CWq(Z8kiJqT-wv5h7JeW0ujT?C^j8n;{w`!6$1DqWsUPLp}Z* zi`!HmV(kS3Zdvhyhsyv0nbBx*7mC`SkuY|=9SdXEM2M;5h*>Emiw<-BHUzbC*7_$9 zb{Xso1rB}4{U7&%ZRM`LAwgqqLc-87>wV^Y5($hVFaNp21G`%73#+9gTZ6*--4l97 zof68x^Z}bj1=Rjpwjp!~6iqhfIu51q4QmCzoM&{2 zm%dv(9@5e=5UY_WjyD@v2a0xJ`RSg-*?18>UmL8n?9cXWV}lk4rALr(DqG9rx;U{4 zV9RDYluD8ZZv6t(hXk**p=rBznk1-6 zyfo`BMUKR=b3x5S#*|WQm05R&owQeD78+hk8s)Gy(?^h8O29H_B{dn= zzs!g0`3~dW4WLG>TAe0>>3fk!(H1zNBgiv~TBAaS5oBIV=Iy&7$8C*nNL~hiHL<*-IQ!hT4>1=)& zIq*lw3_({MuRFF4$5pO2yNq@a3qcYWYVq1L=6nqN!aRPb{%x+FY}%IySKjcIS%1Wn zcJ%t?qs3n>R@a~$FNIx!+uuA$&wF@-*TMQDcm`MkCncajj#`97nWUM~8BIvB9#5Uh z5zw{+Y2Am({L_ezkn$M;k`#dSYBhq8@?qt0#{|%z#Pq|;i>D*WIjqda$?FVC0v_wI zGIBcN&S7PC@Me_{5b!;r)d3?gUqLoRX5A!%7cz3Wj=Fr#n!M0Fd| z_4Q5csALXVfx6u(Q`8)!$T3H7ty&Cg41MN7>y(;@xE=$uehlcs;PY8EbqV)HfIjHp zalvsaGp$R4dlR9KTluR;65r}5PEPkoV6r>fJD zie~amX470VxID0v@>Z#Frvi^X$Hl;<23hJGWMDxMGv6igWqBLEzrZ1zN4`S+l}ZB| z!ii6fq=u!>jV0{g)uBq%Y-^&0l9vagEJ=y{p%1mb`DDX4@r?E$WYfUjSx@Z zmPW|_z?McnK*WV(rN*&?VW1Z@&M_P4dlqQ~k*7F9GH;IA(1btER`dT~$dORc)_y5a zy${&3N~IrSfmzNd#t-9hSw`Ajs%2y#Ip-=d3E(!O{;85v*AA;%CEM5n)*Q`SgW~ehw ziC_Z3myfE&6Eri*G75L~w}#y1<2zWN0VJa05DuvSG}agEqaw&p2^3Pr78Cs6i%il? zNAy`R7#g_#L?1d4QMoI=P4sy_oG$u2hPd8rehq%t7JXXF`ieex0#Z*_h(0tHF6qU} za7#X(pI~K>jC9H8vmYa)zj0H$kfY_D!KhB`v6lH@VET=B%|Z*;OdcUi&ME3&&WYzf z2ojB|SI_DGkc1t#fK!z?hojEDv$<%GLlNVrGo-pAq{mW2!}={nTExt{kw_Fyo`f4S zmW^N4iO*XTXx4WD&SIGHoqvp|)kEhq18?%tbLl?97bBKHvLRQH$($e;xq`S?hq7y0 zOG!mz*8Ld2r34#3SD+Qbp}QnZ3x-(-;Zv$PrQDhK{B4!<}M%D7Q)VDJ0o(JrdHpb z;B`afA!`B{k!wU^;!e@Zhz0I36%^Uw;=YpAg#U?TKx>Jt8lg1EnLy17Dsr3h-b}{ zi!0P95x58$d;VeCipa2zcA2m67z}ok`Z%(|_0aPkajZsc5vR+vvD1!V6cIE1!IEeSE%8Wz+|a?po_P@ zJ<=z*nD;2EOVeq^Xq&WlRDW0TSFDwbzqzNQ!QU0RjRj8H54#UnCC0=O=hGmLc>oD` zR;6)Sj~4NQW1!NmP-jgfW)PlujIiMoHVKS$7A< z;21IS9b`M)C*KvDh*mm`Gm^fm@+gU@)B8>tm9iOG$bGbMtItsXw@HfaRKn(>ElIJN z+Q6dL=)g9h2t16R;Q4AUpk2aXUkP%!E03;>p^&{;_ZQ;^Rs?uyS)k@pH?d@jk^2vP zK@u^{`g%m1mNR^SmUNXzbW$x=`%ggJku3;upq&6e1>qXz3MfxR$O$}+ELcjvhD@0y zg6qr;NH>&0$Vex^sSGT&{(}0fPX^agiwtx$XYn;T6W8QulM#KwcY(0~Y}!>+S$ciM zmj`HXP*ct>6()W2^V5*^Fdn1JOjm{&n z`xu#fIB4iUZ=&j^nz(H9kpOMZsts{_Mv^`gH9GS5 z4nodS`N-ffRY#TDoe~@i`THiS(Vm*YQ-WjE6@8LK%`pq9SnnW}4~lI+H(e@c3s^Op z%28`9!F=&JcXdm|c)JTU;0b_mNjeJD`z}%EEyV0$=~rU^E>&Z%H7<$$A{3&1q+d?f+1>kwXm&`N6GD=U$CL4z9@eUD zk}`#LyJxtg@TRaB1snl4WwF_2J+V04P5h(A?9;s_(ZT7_qwjIM>3A?eCLscJ_DXbB zW}t>J@ecxqDx}oBKnKF|!>I$2s)g3b1S>Gg3b>9tc*|-fulx{OTGjj^R&9T>NK((( zq2D9q^qZ@LrE4;x*=oj2`|ye=oANo6H>P#TT2*^uXN-SvwCy)I;Dv1Rk5# zPcT49?O~%0`Jv;bIbR_hcANaga6Ds;#+lqla-Tmmq?GzEoI~3fWFYlRH~KSyUQI)a z#T#SO`~q+mrZVu~?IL+j0RR1l1hp3ikk^HtaFLz?1&}74pJliTje}&6smdi#sN#a* zMj)$^pw_+s+5bsHChdF=#F%v(kRx&0%FI}`9cO{9?iM>vy=lglrD1Xi>@TDa#hm7Y zikDG?11Gg&Xh8+-!4fCCx^RiKbhTOcA9lvw40zOz{}7>2R0{oy^I+;@B(>;AjSDSt z8Wz4pQ2Ig_NZ>}Z?k&JbBp5nHK#4-L?iKt>ocbV?Ct+@X9WSmYs&NZ>3SR~RY`6q3 zgm~qX;I$CE{&fihTpm0_eIdb>!RhK#3Eqsc-zUKUhHJM3msvhQXu&gMUlMsdcl8S_ zh})9(bo1^#ls}CU)AFT*F;;+;FhIuy>w8PY5i z=swIqWGv}5*ye`>k9OqF;oMjPPkfqi&rMo32Ce;O2ZC5rlJs|Xvi6%(fEa$m=}!i$ zrSU@dE{u&Cqxl9og-sYYQxZvsJynV8U^OTM0l6%Lj^Da(>VbkMPaY~qE;x9kFYBp# z@6wiJo~KnVH5IjsBc~RXDaD&mfkC5^MV6;>2}YxmrED^_n(2;@X&_+fQwlY_cSmmb zdlCnbQT1LSs)~K%31@BbATCu&&j=J&cU|5YCnr>hG6HuiLP8nWY>fnZVj6V<$(4@x_i5gx+o(4_i%C?eXW~ z5vX-BHs{Rs`15D_d(3-rEnRFl^*f;?*~{d|+VCArkA7T0>wWt>J(hC|n#AF$@`Nyb zS^~hQemaOmL;Z6PuH0-wh=)0r7$TX$EcvVNVW}Tum;7&W{T{d&&2H7*F0&TBeoP9a zeeEE}ssoyovxpku_-+ImiR)kXlkJ9>4T!+lQTYbEQPWf=7D|0K42ciD^|4@qY@e&n z%x8}B(&*hrVCppZTp5BxI}ac9sR_f=!2`6{sLW$a*mspX`&1ylUUm^4ro{}fzVA3# z{9Km~IvQ7~en)U!7WXk0l?{RM62vZu;%>^9JVri@2%YryO8M*}5->j--gaT>`| z6>u+1$1TYV)JC9(AhGffZAM_y>2TPd2bP(3^WbVVktif`xX;DC%=eTBi25xNpuJpu zKJ=JEY&57|w+S{PqXMy?SOPyueS!a^qQ3_OtP^P{bj#Qm$t|yb1`?r1lkpiAygER9 z0op{aJpwyE)z`6^$%iMW8~dW+N1MC84NXv$9E&DUPXrYJlhxFdXI@|ghXt?Yy5;!Q zlit)06bTS-s5+2wZ~%q@3%Y-hYAV*9vQ<4_~ED^Bf#za;Hm6pKEzjHnOeC$ix`az0|Cf& zMj@aGwE?Rv+@Rov#`+t$kG>~s2?@aXyaqp1IsMeYhFMXFH$NOvpP*hxOi*wJ(gp{; zt^_go?X=cwBQnC3DRdJ;Yf^mQNpisf>y6wcTF_gx!QW{u#8i4iv{S2gsVl$yKhZP! zkwak`;v=Z_MI$IHm``tpQ%JB|&1TxKzfPMc(-Q;MVAVf}4&l0S2}A$w=u^E#{6sg6 zBl{9%)?*0J^{AZxS=U&(?f@mh1PTA>6nP3D<6~)%i^kGWHPeXHep85963&XZf=ME3 z3MoH}n1oUqHn1J^2Ny?pc;fy8`Y-kuY^(=LvIyb2>OO=$+JsaY(I&3Ze;}rOMLb2~ zV+)a2G?wZJ=2xKaDAdbJ^|Ze0(<6PWkXC~@;u%2=8(w$Cm-Q627cJ}9{f(!!gxgV_ z)kGEOYL|7Cw64pHgJn_V^uB}rpuii-p|q;qA6jI*Iu|pZwm;YOaRp^MJ^`ECJhT2C zRD}?B5n6s~t8+8J!bIn8@Na_G6`APffBExaE)L4ca=f{;03mse8#yB@6V&09^I|MD z$*j8vXb#>lSo2|~OAV$Q1gPW$L@|0+)Qqm);7{1qH2R-V7ou`^)qz4|C)&X?Lw?e} z&EDvXz0qcFY4i!6IBtZ=p^ENbB(;(X6|;$O9u8^HlelP=YqgN*W45tp32cmoDdg!C zE|iADVaA48%wWgM^5Xu2FCPbU)?1bz{pgzQp#TWIMPa|PbZoI6(^IGi@ zYWo_{4eIeQeF0py;Rbf^?wfG&Ck4}gU+76th0ATe&`&@kTyJOiee(`h0frBgG~?J= zv1CJaZ(9zgVcwR3AOK_cWzDwJFT3YB7!rShPcoVhJ45aq90T-T58+974_P4E_8%nT zgIkStWPmf5y9#k!x5_0xFY7U6@(qL@1OV34(vd@RB)6qw05jM<9zWedK#O9DS-Nj^ zzo0u9T3Z3~)vT`gnC$LWpz4ieHjamZB$^DKdfQE=wJ_?gOCS`mPQ`t4`Ed z>);vAo*$mvgbX<0<_QG3EVKK)%J&GE1+r`iWKc(0egK%OwpZS>P=$lZth0HHEz40v zQxX~2jEJ$N96v!X^GD^ZGp|rL;!uWb*Sp3_wDi%v>-85^4(u=?q-WsL(r=~o6>2h_ z=n%9tGQi1qs^|Ly7o)W=@x5UPpx<)wdtA$M^)~X-(seCckPVy2=!FyOU=R9uFPbxd?gEQ_Im)|E}{cMqL$ZvV+SZ<0b0kJT*Y)Sy)yEkS^V- zF2;$5D_Vjmc&-kj-%(+QFC#p{;Tx1i<<&BzTB_;)UPmou#Er;S=?2MPtl5AK)cUCCwNu zdkQLJ+vY~>P6UL^!$NmT_z)G3(P@^%+bFNVjp|9HXnzX&WC53HevU+;3SNKdJYFKp z!@jmGx)qqAL05!s7hEqQF?>^7)^t~<5xr6}Nhk^}kT9z^X9>F1p<+oS)h3~y!lfnc zhg3*=VEq;4=d@*=$oc9ytQ~60$@T&g)jkaH2!OgAd9p9#lAYc#upE*iOe!@j)j8Ik zTBJ7NzfszWpYYJCgcm9n3bO(#=`ZD{g-1=Jq^d+NGE>-C$%CaAn_F^n>3*<(;nHaY zR+;c(Yyd(QInc@YQ>dQQVb0XVVLL})s30@$FRknl)F#+cL_|mQqlAFiP;}-XqmS5d zxd)Th{(9k{Yq|QR*P6W`$WZg4@o*-a`ha?`7-=FKyJYcYKHnns+v`tS`z9L2Hei z6X)9yIQgMlt}>Q+>}H8y#X}>1Y+#h^=_`(#a@9LDc0goJj*$dqPY!`vpq?S9K4llH z2m6$LxA*8VWp7k#?6UNY2*y?FhCXE<>Zj~FRRSoh=@$l`{L6is3wV|=J%k@Mst=yU zgr^T6ui>3&7&>^x3QJYQI1+^8FUWFg+yJ#B2n$5)MGa5HipG2HCxI)&rrds z!GOdcqj*m6oZvYU|EXZ1^_OR)q}EWXCqPQ_z!>^rI)eSCUWrtT5h%3+XIcTgCP5;x z@&DyOTWULOb&C4b4*ksz?Xg3z+M%s>=s7#|xE*Rj$XTUb{Dd{r+$XX`vI|7L^Dlcw z!jDfQas|~$J47WM^!;_L)FDKnZc zP^Z}N6cTt(bev?;dLbd2l@eNukWFJvm&f?>4{0>g+gFuGYgT~`+YV4mlGSpWRDd;@ z^ciXd9k49wiG7B^Tb^yDn^EDK0c|<3l`*0jbLaEfMoPqx(92q6V?|Kt>3QRjW8}5alM-rTHgE#~SA%Z$GhZR23KBk%L`0qn% z4kn|@0+&H&g|_w!>(}*YiLTjfz(J_Ce2g8*G}n`bur_1IhOz_G@nNp`8=@{3Xgw7QkStZMSl6b`J^t+5pfEt304T<`mM+aH`h zz!->UhTE8T4W3grpkd-!q?W<>E;&d?#*f9*Z_{y5ugbs~Steak@u|Ux)N0IN9zFh6 zy&={keVQlc$wHzhI)vTmzpx2ZvDLEQhYy~nBH0H|&w2`>s<-Z}-F6=WKepQCiEZ;q z7*Afu663Uyvpq*30J3d`ED~k|35^2p4bcl;r0u(BsI0YcibU5|Ax`wd>bt02oPvf2 zLw{AYO)pY;*0LnmVDZk7+|x0lx7lugJbPq)^t@g30;5i(i7`p?3?MG56Bbq=~9TUi`0EajV{1 zfkk&V*26VJ=?u9wz9`r8SEvZzMR|PE1J~`sr1q|R#YPo-nbdhu0v7q9i|*N2ysc;( z`3la*aX5~?IbPBVw+QX=R(o`2LwScO4GHn-Hh2l?g3eN$EZOl~D0Dm3<)Cj~NwjPA zUZx%DUmg`BT5Sa)63B>FSpog3XGZiYof66C?%{dmgk&ln`>Up)P6x~hISY%6_n;|S z0d@C4d>PUCnkcj3=?r_$n03EF#N6s1M*7^JQux;i^Lf3`i1D;c`5bsAIY?YCbline zsBLHhKu-TIlJsHKL0G{VsBQ$RGwVsK2UuS;U%ifz6auNxL6{5@SSC?5P(6jrgJk@Q zBm+s2kqD52J~9{q58-N{Yj_REz;&VNlnz0KBMO3I>cJ)cl7}_yyT2-e;(RG-uwPc@srfk|HPj{ z2R^C!976A;@(Ba$sM!ld9``ulj3l|_+KdKBgVUa!X#l0x6q5?(b z+Bb3chWf!Ky}ajwyY8A^f@hO(`)53EsR{?9`8u|Xpz8T1>PH|omY76Tit7n46U-Pb z+x1`k0}DS)D5w@q?74@Jf*XgzmQvXdz%8!qIT&;1fiv>P>-Q7ZxQ?|XzXR@Q4cJj z7h`f;l5W4M#e%@h1;_VQEq?X+(OxwG)5H242C7zU`v*?~Hb>kKUJH-oOfb`~GM?7E zhxQKba!l-^ozymqgL5j>=V+v!#L?+apUABgVq5Uc7^<^7iw#J`F6I_wXcaH@?Jmr1 z%(liw`pTIRfx9ty#mKZ8p% zIjYp}q1U`bC5*_)D1@(^L`iU2?*`yA5K(G;_u&oR;qeiqQHXo%*rDLOUjHGU#54Ve zLVxP@cj`!Is2-x5j`WyyCD?OyH$+1ED~nVXe^vES_X4^SUsCt$D|!pNe#_GC84NCYLfHTdo8=`Gm^avH&42puJI7 zu)a=x1Djl^q5GLDuTjnR;ZATBPKoj{eXNl!P#=%LP`-YgGnul~nJ^$ZMhRU@h-{@E z8=AfT_oL}LTh|j8oBM!^5_%&_SW4*osq;t)eNs9oDWPvCIOJP;#;1~qVTKjPrzVxFj?dh!5e@h`su~nq;NzSj}sNAK?Zy*YUqqd$E zA{OzJT=aOBdIAf(l{<$=D5kK7$=)4Pvq)S?SO9|}XdL;f0Megrk-YFYBL3R<&{} z6ULU~w0B1>k!(Z%2&Z+b9U{vKNuzlrZ2&L-pq+f79U6^qUqFdrmC(bycLD@U|96|O zL%KAHeCY-#TCRp-A*K~-`h1thU*$2z2Rzf;>n)LMY~0@(dd ztmRZmv-s?&evlL@0R6tOdjFtx%1QRwO+W+Y(;LraU5J$SxFfc1(x}00WlJ}SogKlk9-f(=af(cvRggIFI=Uf%xCCXFAQ;bk@QZQ+{YgQq0lgA zR3?a|G?>bE?$ogargDH7{rd9-QULa^=oNaKl0O#FL1^8~HOO$BcXwLa7PH|KAX=;* zhT;mp7 znVU<%(0#y)$sYf*RL!g$yxNUfU|6$&>zO^Lq^v8n-?BaG485ksiK@hks{H4u@e4|} zg{HZbJ?WZ291BoWY(-Bgyc97ftb2wIANnXCXF>T`0>rF*y#1s97v*CKmFiddsCDpf z$nrt-i<)@=O0b$4Po!b8#M`ASxf9A&a{tj@>C1R$?KkxvNT%y*zuAkwW*s(ry>5BU zdbS1m<|E38jRzj726hOB?jfp?QTLu&M;Jy)YiR6dq!_iWJ0v<}Gqt^Bdnju&)C_Rj zO$u?NF_*_Yd6(2rC3M4R^Kv&Vd98q;1`Fi8z98CzB~_%c5QuI)LS(Q(nK1YeWunzX zoeHA4C|}Z+BYKUU%2_KQ_oJ)l_1ui5N+XkEsq-Qy86#^T+8`MpE{>lffr`{?%>{jMVHLp$Mg(ukZo}JxdF90LfaP* z+IHDOo9Bx-FXwUZe|Q4?2z%UZV6%0hUKfAKX1-VI}{Q zQJ+?0=;dUnwTwr=ZFZ3cLytGjv{5wE#xf&Wt`5F`6ox0AR1=hbI)JBYImMb}K*I5O zbtehvTDgE{qnoH4o{dhyrL|t7Nc)0=Nw20PSF=zNPfX=7>(>ddA{`&&Q|6B$wA2E) zEREg09CRI{&iHpVCcL)pq(apIzwRaYWf~|azVjxA@1$_#kaVyT1g4&R`+=q}8x3*kB-b;8{ zteXyEmx9=b{{~`hi7`M*1)y&_z`Kzi!V?JwlSa#-D(OC6 zarF=YuCx7f8*f^xiL{P`Jr9HJwnL-0Io7S)0kh}6@I)#wi`HlC8zruSLH z%qOA53|OKS4GWtpu?v>ql;D{vNZn>j+n8LlR2jyCBtJIck_t)SW5cbgw&AhFIrw7T zHd*Y0r5vh*u|S5Umz?V3@CS!R;rw7>@SKX^TCKwQ>o1{f9vyGP7$BpdB5)7L)xG`# z@=zETYndLcjVupdr(OhF(%YDIu*uLEToPoLK-eagnWb=Q4!$uW@M_@ zk&YxTF3AZ>ewM&_E5ree1YjaYmJza(#g4+a6@6p4QaB_)r$@m&-DQvbLfbKET|>`1 z?g8UEf|FDQD(FKf+~|~2DzMsaNw)S=c&QrMPvN!7unY4dr((yJ<>6CrchD?k`32%H z8PgAFrm0DsI9Q6*f}`>XKqfMAf6m9_xRdyJBE&u?!wE?r zj*OmQ^=g6S`Et;8w(t1IsCdQVCh7vWzc#V2xWje5%YUud1& z$%j8Ld&gQHJLNg5)OW|AV>u@6557w%F0xq5BS! zqbe)__{4>n47)?31x`2odV;k&{1h~?;f9MJtV|4EIm*bo{>xiuJwi0c+xc#I7TkQL zampA&Nd>fmL%Us_VW(si`JF4T@UTfX+izMc{)t^K+VIKyXEzQs(- zE<8Z|kw?3L*Zd3qpovCz8vu<62I>KN~j2rS@Z?nFr$aBp~I6S8m`Yjot;?|$q{PT*9m z(-wOxVk`t+E1?q%^^|H_*QcO-ZFMJcwd;sWq5urD_?8(S`A}9(W55c>)U}lfTGBj7 zSIgto`)cl7?=d1{E0-POj$Wp8CzEIcr>GASb-naNlPd9dg`UCb0MOvxd+0a)^rpL7 z2V>2w2houjql-Zj@l1thU}y4yLNwZq1^}0~Q>Q>)u@Z^%ZD! z`1%0-xk5d};!3KjeOAjizF6y&7iba{?J}R>=iAg@H!6c)bD58;Q zQQ4k0(p=`#MZiw*n0m{dk9slJvqGYPk{w1!8uO>4`dR^HsVyQyyXrusCnCxgo-YH{GSX_kwV=E3w2xCtY&2ssQDi+T@gRWE1 z7fQB9YZlpg?8i^@`-vq3TM}8t+2k4_uXtP5<~wFQ6l?SD|Ewg7^o!A9 zv@6?ew4##wZ8I&1^q_T24*#ghFJgBkD2W!QM=66Fd?v7h!QmY}U$he4%w^;O!fYUU z`K43vQ~c@=yhCQ48krV5GTn@QjFefYhrF|9t{#Kz%Rbg9<52keZ6e1e6a->SqJGW`8QWX%C@An>l#Eg ze^GAbs3DNiFdP>&F?zo7+nC=#5myCXfHQzhHLh0^dGG}wa1yNXH5>LKU1IzZIlH)f z!aa`CsuGZL-bvNU7*Ggg9nbz`!}+d8JwQdyrXmjX3Q8jdYAaJYxpzEf>*tBOcF)`c>Ge$QepgBxJLW zO2_83&i))x@nNSvvT_zHDuiZDwblTNr`@}i4-M)|4S4~#QU$p7$eHS-W*hBoKr5{P zoj6m%tX2O)AE=EjI5?p+QREgUY=v$N{&wtj>kNRn8!+A?Q>vVn9vzn+HLWNUN}or= zhp3T@O8H%&)D?XnQTr|MLhuQC`Z9<$h0Xe30mP|n-*-2RSwxT}t!qx(FvicpJ!^`uUdnzW8xrfpgAia(+k$Np zAHcd3x6p@`9DnuF;`b0eZVO>g=Aj699RrYZ$2Gp5meyDY>=PR~h zn=A+l<(p*EJ#+C)Wc-qR2p@;z+u{`kc=x1aZhmM~(cFCa%=N`D@fBU-?f$SkoDVNE zbA8Dnt`r>fRF#Zrl-5JRzn+M5&~}H%#5!{5DKv|u>`<-4D2PQ0pPQKVUlaMIID0gv zm<@l&AKBXy2$>Ckc!3dS$t(Tral7w`@M z7Ep@*)ZFE%2~ARjMR-{BZfX>9Zg=A^0!X25!WM)Z<I#Z zC+tH~%vbwZ2;`xf?rDUBJYJDOY08OW*!^9l^j7G)(zFbMa}_Is&FN;N8q@qB9;K^# z^@8prS=5O5qAptdV7!aF20F-Ef=!q+&^^Yl%Wquva-5EN61X?s=x^rJpBK0LpCyX6 z`!~^_*!S^@Z2hg6nelmftkAs?;o9n#DKmNw*q%^vEHx#3Ds@+TUOYzKgjIeVu*PH5 zPmTT;<1vD6^gkPqQ9m{MH}$Ue_MWYvcImDCnx8|xcM#BGqQ=|#jneL0ecjbP*mLgv z5>4S=FxM*tF_gO%oPRA#X}DYs_qqd@U^ubKDVkRxCYi9n)uKTW>9@PACQOR0%QK?m zFwU$4<@F51T$Q*LUZ>!&N+&=#=z!f&`irY7R^4HcMA1R*qj})p=kXs(e{A&tH0cbq zPk>l|yn!rLweomF9)~dq{Jbkv;~3x%hFwZuHF!e+eQ?{?D ztP5|r?v0avf>asbL4oG@qFulmkM4|nv#p*QG8xm_D5a-GBj+V^us9nvp|j%MwVzAF zdP?|n2v5+T1qu^R7dme?qiD?WlCXpq7gJUJ z78-Lk1RIuW!ct4C-I(5I_t?c~7LvRl*+1>*UCq9P^Y zPP=-DRZQQ2i1nTpdJ~0D4ZULDMSzWGC=ZUfnHi#YfSXYrS3s`HY16~U9ZQ8nLu0Ac zVK$tf4l>DzA(px=bSkpKCtGL9qhsne+XKYr8j$h={SYu&M|h!0^Qn&WBn533>3B;A zCWzb)fr~Wny_$=OWS8W?-AT^lb83%}BpNz!N%S2>9YcgwEXIqutr%=0lMcWLp!+b^ znhfZ!U5gAiOAD>>wr|OpTl)=H@U(6){Cc#=9#{%|@IgoGn?HA>`P*%IXkPaberph; zcozkD(V-)$-e{rPiBFzb$&=}G_wQ{i+ts)TZ~Ptt)kb{TAv)2CF6@<8?u0?ZiMLu0 zT(St5rE@6%drz3JR8pZx(oWb2|HBQ*yH;{JB*gXV^f zz-t*n9^&PHA5EdCkXRbcoqY7@QM@6WHKicW(9DJZKnBhL{rhAYz>>#=)vd`iy!w3b=m5^e#2)=giFc%pa2MiS5bU@F)Vz&EadLSbT^zh9@P|J@d|fnxWY`+mh;JM<8b9w0FakSs2N;UZpa8V;F$-wtP5`Z3 z380-jeF&ZCGt>nD5)qKj-)xJs=P-MN3xjh48#kg1$!LM%FM+uDOOz?XR?3+xKSAcs zg~(j_2@vkgMdlD>swGtQ!ay;0dZ~Z<9zwGmkkj`7(kKMvcJyEHVgc$e|7GwFKw>0- zgfSIAgYp|U@()$F5J>6-i3U10|1LsuNnqy>zonC|r+nR$PA9HD&g#VT`_1Q0{>Pi> zqhc$Iz;q-03udqqml=)n4+h+k^SZWLXd34 zcO@-lBHqa5?x2<|1d^qMWFh*`0^*tQi>m;%^M^DhHR#S_0MU_Z&&m@A&_YautIr*< zmi4TBYyhIX-qO;xbK&vW{d*w97UJWsPJuZ@fGQb9IwEimsS2`C`5Wd$EolS!;56$P zAijX188mOG7Sj_%6^B7|=!@Q7VdcN5J<3AWxF&qA#xxpGYxC8MH^b2fN%Q&Gua0=M zD?x~rBVQ?VepiE4wRb9L&A}H_lGXnEJBqwcr0pe2nSbz#V z8NQ=_0Pw^h28D>C8K8$FE6b?KFs7A)8z(Zq2kBkNoPR?eMy_*PG|$+QkL6d7*Ko98 z%0A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%0D(ZUZ)tv1Y5tYc{OjUA`z0$! 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 diff --git a/src_graphics/buckshot.inc b/src_graphics/buckshot.inc index bdae1db..0758298 100644 --- a/src_graphics/buckshot.inc +++ b/src_graphics/buckshot.inc @@ -1,1423 +1,1429 @@ -.code -FreeBuckshotAssets3D PROC uses esi - xor esi, esi -bs_free_pack: - invoke FreeAnimPack3D, bs3d_packs[esi*4] - inc esi - cmp esi, BS_ASSET_COUNT - jb bs_free_pack - ret -FreeBuckshotAssets3D ENDP - -LoadBuckshotAssets3D PROC uses ebx esi - xor esi, esi -bs_load_pack: - invoke LoadAnimPack3D, bs3d_packs[esi*4], bs3d_paths[esi*4] - test eax, eax - jz bs_pack_failed - mov ebx, bs3d_packs[esi*4] - mov eax, [ebx].AnimPack3D.frames - cmp eax, bs3d_frameCounts[esi*4] - jne bs_pack_failed - mov eax, [ebx].AnimPack3D.imageWidth - cmp eax, bs3d_frameWidths[esi*4] - jne bs_pack_failed - mov eax, [ebx].AnimPack3D.height - cmp eax, bs3d_frameHeights[esi*4] - jne bs_pack_failed - inc esi - cmp esi, BS_ASSET_COUNT - jb bs_load_pack - mov eax, 1 - ret -bs_pack_failed: - call FreeBuckshotAssets3D - xor eax, eax - ret -LoadBuckshotAssets3D ENDP - -InitBuckshot3D PROC - call LoadBuckshotAssets3D - test eax, eax - jz bs_init_error - mov bs3d_state, BS_READY - mov bs3d_hpPlayer, 4 - mov bs3d_hpDealer, 4 - mov bs3d_shellCount, 0 - mov bs3d_shellIndex, 0 - mov bs3d_liveCount, 0 - mov bs3d_blankCount, 0 - mov bs3d_timer, 0 - mov bs3d_clock, 0 - mov bs3d_error, 0 - mov bs3d_message, 0 - mov bs3d_payout, 0 - mov bs3d_result, 0 - mov bs3d_pitch, 0 - mov eax, 1 - ret -bs_init_error: - mov bs3d_state, BS_ERROR - xor eax, eax - ret -InitBuckshot3D ENDP - -BuckshotReload3D PROC uses ebx esi - invoke RandomRange3D, 5 - add eax, 4 - mov bs3d_shellCount, eax - mov bs3d_shellIndex, 0 - mov bs3d_liveCount, 0 - mov bs3d_blankCount, 0 - mov bs3d_known, -1 - mov bs3d_known[4], -1 - xor esi, esi -bs_reload_shell: - invoke RandomRange3D, 2 - mov bs3d_shells[esi*4], eax - test eax, eax - jz bs_reload_blank - inc bs3d_liveCount - jmp bs_reload_next -bs_reload_blank: - inc bs3d_blankCount -bs_reload_next: - inc esi - cmp esi, bs3d_shellCount - jb bs_reload_shell - cmp bs3d_liveCount, 0 - jne @F - mov bs3d_shells, 1 - inc bs3d_liveCount - dec bs3d_blankCount -@@: - cmp bs3d_blankCount, 0 - jne @F - mov bs3d_shells[4], 0 - inc bs3d_blankCount - dec bs3d_liveCount -@@: - ; The loading motion loops once per actual cartridge, then racks the pump. - mov eax, bs3d_shellCount - imul eax, 330 - add eax, 920 - mov bs3d_loadDuration, eax - mov eax, bs3d_turn - mov bs3d_loadActor, eax - inc eax - mov bs3d_afterAnim, eax - mov bs3d_timer, 0 - mov bs3d_state, BS_LOAD - invoke PlayCasinoSound3D, OFFSET bs3d_pumpSound, 0, 20003h - ret -BuckshotReload3D ENDP - -; Animation queues a shot; the cartridge and health change exactly once at the trigger frame. -BuckshotShoot3D PROC target:DWORD - mov eax, bs3d_shellIndex - cmp eax, bs3d_shellCount - jae bs_shoot_done - cmp target, 1 - ja bs_shoot_done - mov eax, target - mov bs3d_target, eax - mov eax, bs3d_turn - mov bs3d_shooter, eax - mov bs3d_effectDone, 0 - mov bs3d_timer, 0 - mov bs3d_state, BS_SHOT -bs_shoot_done: - ret -BuckshotShoot3D ENDP - -CommitBuckshotShot3D PROC uses ebx esi edi - cmp bs3d_effectDone, 0 - jne bs_commit_done - mov bs3d_effectDone, 1 - mov esi, bs3d_shooter - mov edi, esi - mov ebx, bs3d_shellIndex - cmp ebx, bs3d_shellCount - jae bs_commit_done - mov eax, bs3d_shells[ebx*4] - mov bs3d_lastShot, eax - inc bs3d_shellIndex - test eax, eax - jz bs_commit_blank - dec bs3d_liveCount - mov ecx, bs3d_damage[esi*4] - cmp bs3d_target, 0 - jne bs_commit_dealer_hit - sub bs3d_hpPlayer, ecx - cmp bs3d_hpPlayer, 0 - jg bs_commit_live_turn - mov bs3d_hpPlayer, 0 - mov bs3d_afterAnim, BS_LOSE - jmp bs_commit_live_sound -bs_commit_dealer_hit: - sub bs3d_hpDealer, ecx - cmp bs3d_hpDealer, 0 - jg bs_commit_live_turn - mov bs3d_hpDealer, 0 - mov bs3d_afterAnim, BS_WIN - jmp bs_commit_live_sound -bs_commit_live_turn: - xor esi, 1 - mov bs3d_turn, esi - inc esi - mov bs3d_afterAnim, esi -bs_commit_live_sound: - mov bs3d_message, OFFSET bs3d_textShot - invoke PlayCasinoSound3D, OFFSET rrFireSound3D, 0, 20003h - jmp bs_commit_cleanup -bs_commit_blank: - dec bs3d_blankCount - ; Only a blank directed at the shooter's own side keeps the current turn. - mov eax, bs3d_target - cmp eax, esi - je @F - xor esi, 1 -@@: - mov bs3d_turn, esi - inc esi - mov bs3d_afterAnim, esi - mov bs3d_message, OFFSET bs3d_textDry - invoke PlayCasinoSound3D, OFFSET rrDrySound3D, 0, 20003h -bs_commit_cleanup: - mov bs3d_damage[edi*4], 1 - mov bs3d_known, -1 - mov bs3d_known[4], -1 - mov bs3d_messageTime, 1800 -bs_commit_done: - ret -CommitBuckshotShot3D ENDP - -FinishBuckshotAction3D PROC uses ebx - cmp bs3d_state, BS_SHOT - jne bs_finish_done - mov eax, bs3d_afterAnim - cmp eax, BS_WIN - je bs_finish_win - cmp eax, BS_LOSE - je bs_finish_lose - mov ebx, bs3d_turn - cmp bs3d_skip[ebx*4], 0 - je @F - dec bs3d_skip[ebx*4] - xor ebx, 1 - mov bs3d_turn, ebx -@@: - mov eax, bs3d_shellIndex - cmp eax, bs3d_shellCount - jae bs_finish_reload - lea eax, [ebx+1] - mov bs3d_state, eax - mov bs3d_timer, 0 - ret -bs_finish_reload: - call BuckshotReload3D - ret -bs_finish_win: - mov bs3d_state, BS_DEATH - mov bs3d_result, BS_WIN - mov bs3d_victim, 1 - mov bs3d_timer, 800 - mov eax, bs3d_bet - imul eax, 3 - mov bs3d_payout, eax - add bankroll, eax - cmp bankroll, 1000000000 - jbe @F - mov bankroll, 1000000000 -@@: - invoke NpcRecordRound3D,7,1 - call SaveProgress3D - ret -bs_finish_lose: - mov bs3d_state, BS_DEATH - mov bs3d_result, BS_LOSE - mov bs3d_victim, 0 - mov bs3d_timer, 800 - invoke NpcRecordRound3D,7,0 - call SaveProgress3D -bs_finish_done: - ret -FinishBuckshotAction3D ENDP - -UseBuckshotItem3D PROC uses ebx esi item:DWORD - mov eax, bs3d_state - cmp eax, BS_PLAYER - je @F - cmp eax, BS_DEALER - jne bs_item_invalid -@@: - mov eax, bs3d_shellIndex - cmp eax, bs3d_shellCount - jae bs_item_invalid - cmp item, 3 - ja bs_item_invalid - mov esi, bs3d_turn - mov ebx, esi - shl ebx, 2 - add ebx, item - cmp bs3d_items[ebx*4], 0 - je bs_item_invalid - cmp item, 1 - jne @F - cmp bs3d_damage[esi*4], 2 - je bs_item_invalid -@@: - cmp item, 3 - jne @F - mov eax, esi - xor eax, 1 - cmp bs3d_skip[eax*4], 0 - jne bs_item_invalid -@@: - dec bs3d_items[ebx*4] - mov eax, item - mov bs3d_item, eax - mov bs3d_timer, 0 - mov bs3d_effectDone, 0 - lea eax, [esi+1] - mov bs3d_afterAnim, eax - mov bs3d_state, BS_ITEM - mov eax, 1 - ret -bs_item_invalid: - cmp bs3d_turn, 0 - jne @F - mov bs3d_message, OFFSET bs3d_textItemEmpty - mov bs3d_messageTime, 1500 -@@: - xor eax, eax - ret -UseBuckshotItem3D ENDP - -CommitBuckshotItem3D PROC uses ebx esi - cmp bs3d_effectDone, 0 - jne bs_item_commit_done - mov bs3d_effectDone, 1 - mov esi, bs3d_turn - mov eax, bs3d_item - test eax, eax - jz bs_item_glass - cmp eax, 1 - je bs_item_saw - cmp eax, 2 - je bs_item_beer - mov eax, esi - xor eax, 1 - mov bs3d_skip[eax*4], 1 - mov bs3d_message, OFFSET bs3d_textCuffs - jmp bs_item_committed -bs_item_glass: - mov ebx, bs3d_shellIndex - mov eax, bs3d_shells[ebx*4] - mov bs3d_known[esi*4], eax - mov bs3d_message, OFFSET bs3d_textKnownBlank - test eax, eax - jz bs_item_committed - mov bs3d_message, OFFSET bs3d_textKnownLive - jmp bs_item_committed -bs_item_saw: - mov bs3d_damage[esi*4], 2 - mov bs3d_message, OFFSET bs3d_textSaw - jmp bs_item_committed -bs_item_beer: - mov ebx, bs3d_shellIndex - mov eax, bs3d_shells[ebx*4] - mov bs3d_lastShot, eax - inc bs3d_shellIndex - test eax, eax - jz @F - dec bs3d_liveCount - jmp bs_item_beer_counts -@@: - dec bs3d_blankCount -bs_item_beer_counts: - mov bs3d_known, -1 - mov bs3d_known[4], -1 - mov bs3d_message, OFFSET bs3d_textBeer -bs_item_committed: - mov bs3d_messageTime, 1800 - invoke PlayCasinoSound3D, OFFSET bs3d_pumpSound, 0, 20003h -bs_item_commit_done: - ret -CommitBuckshotItem3D ENDP - -; The dealer reasons from the revealed shell or remaining counts, never from hidden order. -ChooseBuckshotDealer3D PROC - mov eax, bs3d_shellIndex - cmp eax, bs3d_shellCount - jae bs_dealer_reload - cmp bs3d_known[4], -1 - jne bs_dealer_saw - cmp bs3d_items[16], 0 - je bs_dealer_saw - invoke UseBuckshotItem3D, 0 - ret -bs_dealer_saw: - cmp bs3d_known[4], 1 - jne bs_dealer_beer - cmp bs3d_items[20], 0 - je bs_dealer_cuffs - cmp bs3d_damage[4], 1 - jne bs_dealer_cuffs - invoke UseBuckshotItem3D, 1 - ret -bs_dealer_beer: - cmp bs3d_known[4], 0 - jne bs_dealer_cuffs - cmp bs3d_items[24], 0 - je bs_dealer_cuffs - invoke UseBuckshotItem3D, 2 - ret -bs_dealer_cuffs: - cmp bs3d_skip, 0 - jne bs_dealer_target - cmp bs3d_items[28], 0 - je bs_dealer_target - invoke UseBuckshotItem3D, 3 - ret -bs_dealer_target: - cmp bs3d_known[4], 0 - je bs_dealer_self - cmp bs3d_known[4], 1 - je bs_dealer_player - cmp bs3d_liveCount, 0 - je bs_dealer_self - mov eax, bs3d_blankCount - cmp eax, bs3d_liveCount - jbe bs_dealer_player - invoke RandomRange3D, 100 - cmp eax, 60 - jae bs_dealer_player -bs_dealer_self: - invoke BuckshotShoot3D, 1 - ret -bs_dealer_player: - invoke BuckshotShoot3D, 0 - ret -bs_dealer_reload: - call BuckshotReload3D - ret -ChooseBuckshotDealer3D ENDP - -BuckshotMouse3D PROC uses ebx - cmp mouseClick3D, 0 - je bs_mouse_done - mov mouseClick3D, 0 - mov eax, mouseX3D - shl eax, 1 - mov ebx, mouseY3D - shl ebx, 1 - cmp bs3d_state, BS_READY - je bs_mouse_start - cmp bs3d_state, BS_WIN - je bs_mouse_start - cmp bs3d_state, BS_LOSE - je bs_mouse_start - cmp bs3d_state, BS_PLAYER - jne bs_mouse_done - cmp ebx, 396 - jb bs_mouse_done - cmp ebx, 443 - jae bs_mouse_shoot - sub eax, 160 - js bs_mouse_done - xor edx, edx - mov ecx, 112 - div ecx - cmp eax, 3 - ja bs_mouse_done - add eax, 33h - mov pressedKeys3D[eax], 1 - ret -bs_mouse_shoot: - cmp ebx, 476 - jae bs_mouse_done - cmp eax, 32 - jb bs_mouse_done - cmp eax, 132 - jb bs_mouse_self - cmp eax, 150 - jb bs_mouse_done - cmp eax, 270 - jae bs_mouse_done - mov pressedKeys3D[32h], 1 - ret -bs_mouse_self: - mov pressedKeys3D[31h], 1 - ret -bs_mouse_start: - cmp ebx, 442 - jb bs_mouse_amount - cmp ebx, 476 - jae bs_mouse_done - cmp eax, 246 - jb bs_mouse_done - cmp eax, 382 - jae bs_mouse_done - mov pressedKeys3D[20h], 1 - ret -bs_mouse_amount: - cmp bs3d_state, BS_READY - jne bs_mouse_done - cmp ebx, 442 - jae bs_mouse_done - cmp ebx, 408 - jb bs_mouse_done - cmp eax, 30 - jb bs_mouse_done - cmp eax, 60 - jb bs_mouse_down - cmp eax, 112 - jb bs_mouse_done - cmp eax, 144 - jae bs_mouse_done - mov pressedKeys3D[26h], 1 - ret -bs_mouse_down: - mov pressedKeys3D[28h], 1 -bs_mouse_done: - ret -BuckshotMouse3D ENDP - -HandleBuckshot3D PROC uses ebx esi - call BuckshotMouse3D - mov eax, deltaTime3D - add bs3d_clock, eax - cmp bs3d_messageTime, eax - ja @F - mov bs3d_messageTime, 0 - jmp bs_update_state -@@: - sub bs3d_messageTime, eax -bs_update_state: - mov eax, bs3d_state - cmp eax, BS_READY - je bs_input_ready - cmp eax, BS_PLAYER - je bs_input_player - cmp eax, BS_DEALER - je bs_input_dealer - cmp eax, BS_LOAD - je bs_input_loading - cmp eax, BS_SHOT - je bs_input_shot - cmp eax, BS_ITEM - je bs_input_item - cmp eax, BS_DEATH - je bs_input_death - cmp eax, BS_RECOVERY - je bs_input_recovery - cmp eax, BS_ERROR - je bs_input_done - cmp tournamentMode, 1 - jne bs_regular_restart - invoke Pressed3D, 20h - test eax, eax - jnz bs_tourney_report - invoke Pressed3D, 0Dh - test eax, eax - jnz bs_tourney_report - ret -bs_tourney_report: - cmp bs3d_state, BS_WIN - jne bs_tourney_loss - invoke TowerReportRoundOutcome, 1 - ret -bs_tourney_loss: - invoke TowerReportRoundOutcome, 2 - ret -bs_regular_restart: - invoke Pressed3D, 20h - test eax, eax - jz bs_input_done - call InitBuckshot3D - test eax, eax - jz bs_input_done - jmp bs_input_start -bs_input_ready: - invoke Pressed3D, 26h - test eax, eax - jz @F - add bs3d_bet, 50 - cmp bs3d_bet, 5000 - jbe bs_input_done - mov bs3d_bet, 5000 - ret -@@: - invoke Pressed3D, 28h - test eax, eax - jz @F - cmp bs3d_bet, 50 - jbe bs_input_done - sub bs3d_bet, 50 - ret -@@: - invoke Pressed3D, 20h - test eax, eax - jz bs_input_done -bs_input_start: - mov eax, bs3d_bet - cmp eax, 0 - je bs_input_no_cash - cmp eax, bankroll - ja bs_input_no_cash - sub bankroll, eax - mov bs3d_hpPlayer, 4 - mov bs3d_hpDealer, 4 - mov bs3d_turn, 0 - mov bs3d_damage, 1 - mov bs3d_damage[4], 1 - mov bs3d_skip, 0 - mov bs3d_skip[4], 0 - mov bs3d_error, 0 - mov bs3d_messageTime, 0 - mov bs3d_payout, 0 - xor esi, esi -bs_give_item: - mov bs3d_items[esi*4], 1 - inc esi - cmp esi, 8 - jb bs_give_item - call BuckshotReload3D - call SaveProgress3D - ret -bs_input_no_cash: - mov bs3d_error, 1 - ret -bs_input_player: - mov eax, bs3d_shellIndex - cmp eax, bs3d_shellCount - jae bs_input_reload - mov bs3d_turn, 0 - invoke Pressed3D, 31h - test eax, eax - jz @F - invoke BuckshotShoot3D, 0 - ret -@@: - invoke Pressed3D, 32h - test eax, eax - jz @F - invoke BuckshotShoot3D, 1 - ret -@@: - xor esi, esi -bs_item_key: - lea ebx, [esi+33h] - invoke Pressed3D, ebx - test eax, eax - jz @F - invoke UseBuckshotItem3D, esi - ret -@@: - inc esi - cmp esi, 4 - jb bs_item_key - ret -bs_input_dealer: - mov eax, deltaTime3D - add bs3d_timer, eax - cmp bs3d_timer, 850 - jb bs_input_done - mov bs3d_turn, 1 - call ChooseBuckshotDealer3D - ret -bs_input_reload: - call BuckshotReload3D - ret -bs_input_loading: - mov eax, deltaTime3D - add bs3d_timer, eax - mov eax, bs3d_timer - cmp eax, bs3d_loadDuration - jb bs_input_done - mov eax, bs3d_afterAnim - mov bs3d_state, eax - mov bs3d_timer, 0 - call ClearKeys3D - ret -bs_input_shot: - mov eax, deltaTime3D - add bs3d_timer, eax - cmp bs3d_timer, 450 - jb bs_input_done - call CommitBuckshotShot3D - cmp bs3d_timer, 1250 - jb bs_input_done - call FinishBuckshotAction3D - call ClearKeys3D - ret -bs_input_item: - mov eax, deltaTime3D - add bs3d_timer, eax - cmp bs3d_timer, 430 - jb bs_input_done - call CommitBuckshotItem3D - cmp bs3d_timer, 1000 - jb bs_input_done - mov eax, bs3d_shellIndex - cmp eax, bs3d_shellCount - jae bs_input_reload - mov eax, bs3d_afterAnim - mov bs3d_state, eax - mov bs3d_timer, 0 - call ClearKeys3D - ret -bs_input_death: - mov eax, deltaTime3D - add bs3d_timer, eax - cmp bs3d_timer, 1800 - jb bs_input_done - mov bs3d_timer, 0 - mov bs3d_state, BS_RECOVERY - invoke PlayCasinoSound3D, OFFSET bs3d_pumpSound, 0, 20003h - ret -bs_input_recovery: - mov eax, deltaTime3D - add bs3d_timer, eax - cmp bs3d_timer, 3600 - jb bs_input_done - mov eax, bs3d_result - mov bs3d_state, eax - mov bs3d_hpPlayer, 4 - mov bs3d_hpDealer, 4 - mov bs3d_timer, 0 - cmp eax, BS_WIN - jne @F - invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 20003h - jmp bs_recovery_done -@@: - invoke PlayCasinoSound3D, OFFSET soundRoundLose, 0, 20003h -bs_recovery_done: - call ClearKeys3D -bs_input_done: - ret -HandleBuckshot3D ENDP - -; This scene's HUD uses physical 640x480 coordinates, unlike the legacy doubled primitives. -DrawBuckshotPanel3D PROC uses ebx x:DWORD,y:DWORD,w:DWORD,h:DWORD,ink:DWORD - mov eax, x - sar eax, 1 - mov edx, y - sar edx, 1 - mov ecx, w - shr ecx, 1 - mov ebx, h - shr ebx, 1 - invoke DrawBox, eax, edx, ecx, ebx, ink - ret -DrawBuckshotPanel3D ENDP - -DrawBuckshotText3D PROC uses ebx esi edi x:DWORD,y:DWORD,source:DWORD,ink:DWORD - local px:DWORD,rowPx:DWORD,glyphBits:DWORD - mov esi, source - test esi, esi - jz bs_text_done - mov eax, x - mov px, eax -bs_text_char: - movzx eax, byte ptr [esi] - test eax, eax - jz bs_text_done - lea edi, font8x8[eax*8] - xor ebx, ebx -bs_text_row: - movzx eax, byte ptr [edi+ebx] - mov glyphBits, eax - mov edx, y - add edx, ebx - cmp edx, 480 - jae bs_text_next_row - imul edx, 640 - mov rowPx, edx - xor ecx, ecx -bs_text_pixel: - mov eax, px - add eax, ecx - cmp eax, 640 - jae bs_text_skip - test glyphBits, 80h - jz bs_text_skip - add eax, rowPx - mov edx, ink - mov screenBuffer[eax*4], edx -bs_text_skip: - shl glyphBits, 1 - inc ecx - cmp ecx, 8 - jb bs_text_pixel -bs_text_next_row: - inc ebx - cmp ebx, 8 - jb bs_text_row - add px, 8 - inc esi - jmp bs_text_char -bs_text_done: - ret -DrawBuckshotText3D ENDP - -DrawBuckshotNumber3D PROC x:DWORD,y:DWORD,value:DWORD,ink:DWORD - invoke FormatNumber, value, OFFSET hudNumBuffer - invoke DrawBuckshotText3D, x, y, OFFSET hudNumBuffer, ink - ret -DrawBuckshotNumber3D ENDP - -; Keep each pose anchored; move the whole silhouette smoothly as hands rise and settle. -DrawBuckshotHand3D PROC pack:DWORD,frame:DWORD,x:DWORD,y:DWORD,w:DWORD,h:DWORD - invoke DrawAnimSprite3D, pack, frame, x, y, w, h - ret -DrawBuckshotHand3D ENDP - -ResolveBuckshotPose3D PROC uses ebx - mov eax, bs3d_timer - cmp bs3d_state, BS_LOAD - jne bs_resolve_shot - cmp eax, 220 - jb bs_pose_first - sub eax, 220 - mov ecx, bs3d_shellCount - imul ecx, 330 - cmp eax, ecx - jae bs_pose_pump - xor edx, edx - mov ecx, 330 - div ecx - and eax, 1 - imul ebx, eax, 3 - mov eax, edx - xor edx, edx - mov ecx, 110 - div ecx - inc eax - add eax, ebx - ret -bs_pose_pump: - sub eax, ecx - xor edx, edx - cmp eax, 100 - jb bs_pose_settle - sub eax, 100 - mov ecx, 150 - div ecx - cmp eax, 3 - jbe @F - mov eax, 3 -@@: - add eax, 8 - ret -bs_pose_settle: - mov eax, 7 - ret -bs_pose_first: - xor eax, eax - ret -bs_resolve_shot: - cmp eax, 140 - jb bs_pose_first - cmp eax, 300 - jb bs_pose_aim - cmp eax, 450 - jb bs_pose_steady - cmp eax, 535 - jb bs_pose_flash - cmp eax, 700 - jb bs_pose_smoke - cmp eax, 890 - jb bs_pose_rack - cmp eax, 1080 - jb bs_pose_return - mov eax, 7 - ret -bs_pose_aim: - mov eax, 1 - ret -bs_pose_steady: - mov eax, 2 - ret -bs_pose_flash: - cmp bs3d_lastShot, 0 - je bs_pose_steady - mov eax, 3 - ret -bs_pose_smoke: - cmp bs3d_lastShot, 0 - je bs_pose_steady - mov eax, 4 - ret -bs_pose_rack: - mov eax, 5 - ret -bs_pose_return: - mov eax, 6 - ret -ResolveBuckshotPose3D ENDP - -RenderBuckshot3D PROC uses ebx esi edi - local handY:DWORD,pose:DWORD,actor:DWORD - mov animOpacity3D, 255 - cmp bs3d_room.pixels, 0 - je bs_render_error - mov eax, bs3d_turn - cmp bs3d_state, BS_SHOT - jne @F - mov eax, bs3d_shooter -@@: - mov actor, eax - mov bs3d_pitch, 0 - cmp bs3d_state, BS_SHOT - jne bs_pitch_death - cmp actor, 0 - jne bs_pitch_done - cmp bs3d_target, 0 - jne bs_pitch_done - mov eax, bs3d_timer - cmp eax, 300 - jb bs_pitch_rise - mov bs3d_pitch, 120 - cmp eax, 900 - jb bs_pitch_done - cmp bs3d_hpPlayer, 0 - je bs_pitch_done - mov ecx, 1250 - sub ecx, eax - jle bs_pitch_clear - imul eax, ecx, 120 - xor edx, edx - mov ecx, 350 - div ecx - mov bs3d_pitch, eax - jmp bs_pitch_done -bs_pitch_clear: - mov bs3d_pitch, 0 - jmp bs_pitch_done -bs_pitch_rise: - imul eax, 120 - xor edx, edx - mov ecx, 300 - div ecx - mov bs3d_pitch, eax - jmp bs_pitch_done -bs_pitch_death: - cmp bs3d_state, BS_DEATH - je bs_pitch_dead_player - cmp bs3d_state, BS_RECOVERY - jne bs_pitch_done -bs_pitch_dead_player: - cmp bs3d_victim, 0 - jne bs_pitch_done - mov bs3d_pitch, 120 -bs_pitch_done: - cmp bs3d_pitch, 0 - jne bs_render_pitched_room - mov esi, bs3d_room.pixels - lea edi, screenBuffer - mov ecx, SCREEN_SIZE - rep movsd - jmp bs_render_room_done -bs_render_pitched_room: - mov eax, bs3d_pitch - neg eax - mov ecx, bs3d_pitch - add ecx, 480 - invoke DrawAnimSprite3D, OFFSET bs3d_room, 0, 0, eax, 640, ecx -bs_render_room_done: - mov bs3d_dealerFrame, 0 - mov eax, bs3d_clock - xor edx, edx - mov ecx, 3100 - div ecx - cmp edx, 150 - jae @F - mov bs3d_dealerFrame, 1 -@@: - cmp bs3d_state, BS_DEALER - jne @F - mov bs3d_dealerFrame, 2 -@@: - cmp bs3d_state, BS_LOAD - jne @F - mov bs3d_dealerFrame, 4 -@@: - cmp bs3d_state, BS_SHOT - jne @F - mov bs3d_dealerFrame, 6 - cmp actor, 1 - je @F - mov bs3d_dealerFrame, 0 - cmp bs3d_timer, 450 - jb @F - cmp bs3d_target, 1 - jne @F - cmp bs3d_lastShot, 0 - je @F - mov bs3d_dealerFrame, 12 -@@: - cmp bs3d_state, BS_ITEM - jne @F - cmp bs3d_turn, 1 - jne @F - mov bs3d_dealerFrame, 7 -@@: - cmp bs3d_state, BS_WIN - jne @F - mov bs3d_dealerFrame, 14 -@@: - cmp bs3d_state, BS_LOSE - jne @F - mov bs3d_dealerFrame, 11 -@@: - cmp bs3d_state, BS_DEATH - jne bs_dealer_death_shot - cmp bs3d_victim, 1 - jne bs_dealer_normal - mov eax, bs3d_timer - jmp bs_dealer_death_pose -bs_dealer_death_shot: - cmp bs3d_state, BS_SHOT - jne bs_dealer_medical - cmp bs3d_hpDealer, 0 - jne bs_dealer_normal - mov eax, bs3d_timer - sub eax, 450 - js bs_dealer_normal - jmp bs_dealer_death_pose -bs_dealer_medical: - cmp bs3d_state, BS_RECOVERY - jne bs_dealer_normal - cmp bs3d_victim, 1 - jne bs_dealer_normal - cmp bs3d_timer, 2250 - jae bs_dealer_normal - mov eax, 1100 -bs_dealer_death_pose: - xor edx, edx - mov ecx, 100 - div ecx - cmp eax, 11 - jbe @F - mov eax, 11 -@@: - invoke DrawAnimSprite3D, OFFSET bs3d_death, eax, 192, 2, 256, 224 - jmp bs_render_rail -bs_dealer_normal: - cmp bs3d_state, BS_LOAD - jne bs_dealer_forward_pose - cmp bs3d_loadActor, 1 - jne bs_dealer_gesture - mov eax, bs3d_timer - cmp eax, 220 - jb bs_dealer_reach - sub eax, 220 - mov ecx, bs3d_shellCount - imul ecx, 330 - cmp eax, ecx - jae bs_dealer_pump_pose - xor edx, edx - mov ecx, 330 - div ecx - mov eax, edx - xor edx, edx - mov ecx, 110 - div ecx - add eax, 2 - jmp bs_dealer_action_draw -bs_dealer_pump_pose: - sub eax, ecx - cmp eax, 100 - jb bs_dealer_grip - cmp eax, 400 - jb bs_dealer_pull - mov eax, 7 - jmp bs_dealer_action_draw -bs_dealer_grip: - mov eax, 5 - jmp bs_dealer_action_draw -bs_dealer_pull: - mov eax, 6 - jmp bs_dealer_action_draw -bs_dealer_reach: - xor eax, eax - jmp bs_dealer_action_draw -bs_dealer_forward_pose: - cmp bs3d_state, BS_SHOT - jne bs_dealer_gesture - cmp actor, 1 - jne bs_dealer_gesture - cmp bs3d_target, 0 - jne bs_dealer_gesture - call ResolveBuckshotPose3D - add eax, 8 -bs_dealer_action_draw: - invoke DrawAnimSprite3D, OFFSET bs3d_dealerActions, eax, 192, 2, 256, 224 - jmp bs_render_rail -bs_dealer_gesture: - mov eax, 2 - sub eax, bs3d_pitch - invoke DrawAnimSprite3D, OFFSET bs3d_dealer, bs3d_dealerFrame, 192, eax, 256, 224 -bs_render_rail: - ; Dealer's torso stops at the far leather rail; hands can overlap its upper edge. - cmp bs3d_pitch, 0 - jne bs_render_after_rail - mov esi, bs3d_room.pixels - add esi, 640*222*4 - lea edi, screenBuffer[640*222*4] - mov ecx, 640*8 - rep movsd -bs_render_after_rail: - cmp bs3d_state, BS_DEATH - je bs_render_death - cmp bs3d_state, BS_RECOVERY - je bs_render_recovery - cmp bs3d_state, BS_LOAD - je bs_render_load - cmp bs3d_state, BS_SHOT - je bs_render_shot - cmp bs3d_state, BS_ITEM - je bs_render_item - jmp bs_render_idle_gun -bs_render_load: - call ResolveBuckshotPose3D - mov pose, eax - cmp bs3d_loadActor, 1 - je bs_render_dealer_load - mov handY, 140 - mov eax, bs3d_timer - cmp eax, 220 - jae @F - mov ecx, 220 - sub ecx, eax - imul ecx, 60 - mov eax, ecx - xor edx, edx - mov ecx, 220 - div ecx - add handY, eax -@@: - invoke DrawBuckshotHand3D, OFFSET bs3d_loading, pose, 166, handY, 320, 280 - jmp bs_render_hud -bs_render_dealer_load: - jmp bs_render_hud -bs_render_shot: - call ResolveBuckshotPose3D - mov pose, eax - cmp actor, 1 - je bs_render_dealer_shot - mov eax, bs3d_target - test eax, eax - jz bs_render_self_shot - mov handY, 140 - mov eax, bs3d_timer - cmp eax, 140 - jae @F - mov ecx, 140 - sub ecx, eax - imul eax, ecx, 60 - xor edx, edx - mov ecx, 140 - div ecx - add handY, eax -@@: - invoke DrawBuckshotHand3D, OFFSET bs3d_shots, pose, 158, handY, 320, 280 - jmp bs_render_hit_overlay -bs_render_self_shot: - mov handY, 120 - mov eax, bs3d_timer - cmp eax, 300 - jae @F - mov ecx, 300 - sub ecx, eax - imul eax, ecx, 80 - xor edx, edx - mov ecx, 300 - div ecx - add handY, eax -@@: - mov eax, bs3d_timer - xor edx, edx - mov ecx, 150 - div ecx - cmp eax, 7 - jbe @F - mov eax, 7 -@@: - cmp bs3d_timer, 450 - jb @F - cmp bs3d_timer, 900 - jae @F - mov eax, 5 -@@: - invoke DrawBuckshotHand3D, OFFSET bs3d_self, eax, 156, handY, 328, 287 - cmp bs3d_effectDone, 0 - je bs_render_hit_overlay - cmp bs3d_lastShot, 0 - je bs_render_hit_overlay - cmp bs3d_timer, 900 - jae bs_render_hit_overlay - mov eax, bs3d_timer - sub eax, 450 - cmp eax, 120 - jae bs_self_smoke - xor edx, edx - mov ecx, 30 - div ecx - jmp bs_self_flash_draw -bs_self_smoke: - sub eax, 120 - xor edx, edx - mov ecx, 90 - div ecx - add eax, 4 - cmp eax, 7 - jbe bs_self_flash_draw - mov eax, 7 -bs_self_flash_draw: - ; The atlas origin is its center, aligned with the bore rather than the weapon bounds. - mov edx, handY - add edx, 44 - invoke DrawAnimSprite3D, OFFSET bs3d_selfFlash, eax, 251, edx, 128, 128 - jmp bs_render_hit_overlay -bs_render_dealer_shot: - ; The dealer action atlas already owns the raised weapon, including its first pose. - cmp bs3d_target, 1 - je bs_render_dealer_self - jmp bs_render_hit_overlay -bs_render_dealer_self: - invoke DrawAnimSprite3D, OFFSET bs3d_props, 1, 206, 78, 176, 94 - jmp bs_render_hit_overlay -bs_render_hit_overlay: - cmp bs3d_effectDone, 0 - je bs_render_hud - cmp bs3d_lastShot, 0 - je bs_render_hud - cmp bs3d_target, 0 - jne bs_render_hud - mov eax, bs3d_timer - sub eax, 450 - xor edx, edx - mov ecx, 180 - div ecx - cmp eax, 7 - jbe @F - mov eax, 7 -@@: - invoke DrawAnimSprite3D, OFFSET bs3d_blood, eax, 0, 0, 640, 480 - ret -bs_render_death: - cmp bs3d_victim, 1 - je bs_draw_done - ; First-person death keeps the player's body off camera. - lea edi, screenBuffer - mov ecx, SCREEN_SIZE -bs_dim_death: - mov eax, [edi] - shr eax, 2 - and eax, 003F3F3Fh - mov [edi], eax - add edi, 4 - loop bs_dim_death - mov eax, bs3d_timer - xor edx, edx - mov ecx, 250 - div ecx - cmp eax, 7 - jbe @F - mov eax, 7 -@@: - invoke DrawAnimSprite3D, OFFSET bs3d_blood, eax, 0, 0, 640, 480 - ret -bs_render_recovery: - ; Both perspectives use all sixteen poses, once, in chronological order. - mov eax, bs3d_timer - imul eax,16 - xor edx, edx - mov ecx,3600 - div ecx - cmp eax,15 - jbe @F - mov eax,15 -@@: - cmp bs3d_victim, 0 - jne @F - add eax,16 -@@: - invoke DrawAnimSprite3D, OFFSET bs3d_medical, eax, 0, 0, 640, 480 - ret -bs_render_item: - mov eax, bs3d_item - shl eax, 1 - cmp bs3d_timer, 430 - jb @F - inc eax -@@: - mov pose, eax - cmp bs3d_turn, 1 - je bs_render_dealer_item - invoke DrawBuckshotHand3D, OFFSET bs3d_itemHands, pose, 180, 168, 256, 256 - jmp bs_render_hud -bs_render_dealer_item: - mov eax, bs3d_item - add eax, 4 - invoke DrawAnimSprite3D, OFFSET bs3d_props, eax, 244, 161, 86, 86 - jmp bs_render_hud -bs_render_idle_gun: - invoke DrawAnimSprite3D, OFFSET bs3d_props, 0, 190, 226, 260, 168 -bs_render_hud: - invoke DrawBuckshotPanel3D, 0, 0, 640, 32, 00111116h - invoke DrawBuckshotText3D, 14, 12, OFFSET bs3d_textTitle, 00E9C47Ah - invoke DrawBuckshotText3D, 488, 12, OFFSET bs3d_textBank, 00BCBCBCh - invoke DrawBuckshotNumber3D, 540, 12, bankroll, 00F3E4BAh - invoke DrawBuckshotPanel3D, 10, 42, 110, 28, 00151C20h - invoke DrawBuckshotPanel3D, 520, 42, 110, 28, 00151C20h - invoke DrawBuckshotText3D, 16, 48, OFFSET bs3d_textPlayer, 00E2E2E2h - invoke DrawBuckshotText3D, 526, 48, OFFSET bs3d_textDealer, 00E2E2E2h - xor esi, esi -bs_draw_health: - imul ebx, esi, 16 - add ebx, 18 - mov ecx, 003B3232h - cmp esi, bs3d_hpPlayer - jae @F - mov ecx, 00BD4F46h -@@: - invoke DrawBuckshotPanel3D, ebx, 60, 12, 6, ecx - add ebx, 510 - mov ecx, 003B3232h - cmp esi, bs3d_hpDealer - jae @F - mov ecx, 00BD4F46h -@@: - invoke DrawBuckshotPanel3D, ebx, 60, 12, 6, ecx - inc esi - cmp esi, 4 - jb bs_draw_health - invoke DrawBuckshotPanel3D, 0, 386, 640, 94, 00111617h - invoke DrawBuckshotPanel3D, 0, 386, 640, 2, 008A794Bh - invoke DrawBuckshotText3D, 16, 396, OFFSET bs3d_textShells, 00C7B88Fh - mov eax, bs3d_shellCount - sub eax, bs3d_shellIndex - invoke DrawBuckshotNumber3D, 78, 396, eax, 00FFFFFFh - invoke DrawBuckshotText3D, 14, 412, OFFSET bs3d_textLive, 00DF6656h - invoke DrawBuckshotNumber3D, 70, 412, bs3d_liveCount, 00DF6656h - invoke DrawBuckshotText3D, 14, 430, OFFSET bs3d_textBlank, 007DBBCCh - invoke DrawBuckshotNumber3D, 86, 430, bs3d_blankCount, 007DBBCCh - xor esi, esi -bs_draw_inventory: - imul ebx, esi, 112 - add ebx, 160 - invoke DrawBuckshotPanel3D, ebx, 396, 104, 44, 0020292Ch - lea eax, [esi+4] - lea edx, [ebx+4] - invoke DrawAnimSprite3D, OFFSET bs3d_props, eax, edx, 399, 34, 34 - lea eax, [ebx+40] - invoke DrawBuckshotText3D, eax, 404, bs3d_textItems[esi*4], 00CFCAACh - lea eax, [ebx+44] - invoke DrawBuckshotNumber3D, eax, 420, bs3d_items[esi*4], 00EEEEEEh - inc esi - cmp esi, 4 - jb bs_draw_inventory - cmp bs3d_state, BS_READY - je bs_draw_ready - cmp bs3d_state, BS_WIN - je bs_draw_win - cmp bs3d_state, BS_LOSE - je bs_draw_lose - cmp bs3d_state, BS_PLAYER - je bs_draw_player - cmp bs3d_state, BS_LOAD - je bs_draw_loading - cmp bs3d_state, BS_ITEM - je bs_draw_using - cmp bs3d_state, BS_DEATH - je bs_draw_death - cmp bs3d_state, BS_RECOVERY - je bs_draw_recovery - mov ebx, OFFSET bs3d_textWait - cmp bs3d_state, BS_SHOT - jne bs_draw_message - cmp bs3d_effectDone, 0 - je bs_draw_message - mov ebx, bs3d_message - jmp bs_draw_message -bs_draw_loading: - mov ebx, OFFSET bs3d_textLoad - jmp bs_draw_message -bs_draw_using: - mov ebx, OFFSET bs3d_textItem - jmp bs_draw_message -bs_draw_death: - mov ebx, OFFSET bs3d_textDeath - jmp bs_draw_message -bs_draw_recovery: - mov ebx, OFFSET bs3d_textMedical -bs_draw_message: - invoke DrawBuckshotText3D, 24, 455, ebx, 00E1C67Bh - invoke DrawBuckshotText3D, 530, 455, OFFSET bs3d_textPause, 00AFAFAFh - jmp bs_draw_notice -bs_draw_ready: - invoke DrawBuckshotPanel3D, 30, 416, 28, 22, 00404A46h - invoke DrawBuckshotText3D, 40, 423, OFFSET bs3d_minus, 00FFFFFFh - invoke DrawBuckshotPanel3D, 112, 416, 28, 22, 00404A46h - invoke DrawBuckshotText3D, 122, 423, OFFSET bs3d_plus, 00FFFFFFh - invoke DrawBuckshotText3D, 22, 451, OFFSET bs3d_textBet, 00C7B88Fh - invoke DrawBuckshotNumber3D, 92, 451, bs3d_bet, 00FFFFFFh - invoke DrawBuckshotPanel3D, 246, 446, 136, 24, 00363C30h - invoke DrawBuckshotText3D, 258, 454, OFFSET bs3d_textReady, 00E1C67Bh - invoke DrawBuckshotText3D, 548, 454, OFFSET bs3d_textExit, 00AFAFAFh - cmp bs3d_error, 0 - je bs_draw_done - invoke DrawBuckshotPanel3D, 232, 348, 176, 22, 00291919h - invoke DrawBuckshotText3D, 260, 355, OFFSET bs3d_textEmpty, 00DD7768h - jmp bs_draw_done -bs_draw_player: - invoke DrawBuckshotPanel3D, 30, 446, 102, 24, 00383E33h - invoke DrawBuckshotPanel3D, 150, 446, 122, 24, 00462E2Eh - invoke DrawBuckshotText3D, 48, 455, OFFSET bs3d_textChoose, 00E9DDC4h - invoke DrawBuckshotText3D, 176, 455, OFFSET bs3d_textOpponent, 00E9DDC4h - invoke DrawBuckshotText3D, 530, 455, OFFSET bs3d_textPause, 00AFAFAFh - jmp bs_draw_notice -bs_draw_win: - invoke DrawBuckshotText3D, 20, 455, OFFSET bs3d_textWin, 007FE395h - invoke DrawBuckshotNumber3D, 120, 455, bs3d_payout, 007FE395h - jmp bs_draw_result -bs_draw_lose: - invoke DrawBuckshotText3D, 20, 455, OFFSET bs3d_textLose, 00E1766Ah -bs_draw_result: - invoke DrawBuckshotPanel3D, 246, 446, 136, 24, 00363C30h - invoke DrawBuckshotText3D, 254, 455, OFFSET bs3d_textResult, 00E1C67Bh - invoke DrawBuckshotText3D, 548, 455, OFFSET bs3d_textExit, 00AFAFAFh - jmp bs_draw_done -bs_draw_notice: - cmp bs3d_turn, 0 - jne bs_draw_done - cmp bs3d_known, -1 - je @F - mov eax, OFFSET bs3d_textKnownBlank - cmp bs3d_known, 0 - je bs_draw_known - mov eax, OFFSET bs3d_textKnownLive -bs_draw_known: - ; Drawing primitives may overwrite EAX; preserve the selected string address. - mov ebx, eax - invoke DrawBuckshotPanel3D, 8, 350, 120, 22, 001B2325h - invoke DrawBuckshotText3D, 14, 357, ebx, 00E9C47Ah -@@: - cmp bs3d_messageTime, 0 - je bs_draw_done - cmp bs3d_message, 0 - je bs_draw_done - invoke DrawBuckshotPanel3D, 170, 354, 280, 22, 001B2325h - invoke DrawBuckshotText3D, 180, 361, bs3d_message, 00E1C67Bh -bs_draw_done: - ret -bs_render_error: - invoke DrawBuckshotPanel3D, 0, 0, 640, 480, 00111719h - invoke DrawBuckshotText3D, 184, 230, OFFSET bs3d_textAssets, 00E1C67Bh - invoke DrawBuckshotText3D, 276, 254, OFFSET bs3d_textExit, 00C7B88Fh - ret -RenderBuckshot3D ENDP +.code +FreeBuckshotAssets3D PROC uses esi + xor esi, esi +bs_free_pack: + invoke FreeAnimPack3D, bs3d_packs[esi*4] + inc esi + cmp esi, BS_ASSET_COUNT + jb bs_free_pack + ret +FreeBuckshotAssets3D ENDP + +LoadBuckshotAssets3D PROC uses ebx esi + xor esi, esi +bs_load_pack: + invoke LoadAnimPack3D, bs3d_packs[esi*4], bs3d_paths[esi*4] + test eax, eax + jz bs_pack_failed + mov ebx, bs3d_packs[esi*4] + mov eax, [ebx].AnimPack3D.frames + cmp eax, bs3d_frameCounts[esi*4] + jne bs_pack_failed + mov eax, [ebx].AnimPack3D.imageWidth + cmp eax, bs3d_frameWidths[esi*4] + jne bs_pack_failed + mov eax, [ebx].AnimPack3D.height + cmp eax, bs3d_frameHeights[esi*4] + jne bs_pack_failed + inc esi + cmp esi, BS_ASSET_COUNT + jb bs_load_pack + mov eax, 1 + ret +bs_pack_failed: + call FreeBuckshotAssets3D + xor eax, eax + ret +LoadBuckshotAssets3D ENDP + +InitBuckshot3D PROC + call LoadBuckshotAssets3D + test eax, eax + jz bs_init_error + mov bs3d_state, BS_READY + mov bs3d_hpPlayer, 4 + mov bs3d_hpDealer, 4 + mov bs3d_shellCount, 0 + mov bs3d_shellIndex, 0 + mov bs3d_liveCount, 0 + mov bs3d_blankCount, 0 + mov bs3d_timer, 0 + mov bs3d_clock, 0 + mov bs3d_error, 0 + mov bs3d_message, 0 + mov bs3d_payout, 0 + mov bs3d_result, 0 + mov bs3d_pitch, 0 + mov eax, 1 + ret +bs_init_error: + mov bs3d_state, BS_ERROR + xor eax, eax + ret +InitBuckshot3D ENDP + +BuckshotReload3D PROC uses ebx esi + invoke RandomRange3D, 5 + add eax, 4 + mov bs3d_shellCount, eax + mov bs3d_shellIndex, 0 + mov bs3d_liveCount, 0 + mov bs3d_blankCount, 0 + mov bs3d_known, -1 + mov bs3d_known[4], -1 + xor esi, esi +bs_reload_shell: + invoke RandomRange3D, 2 + mov bs3d_shells[esi*4], eax + test eax, eax + jz bs_reload_blank + inc bs3d_liveCount + jmp bs_reload_next +bs_reload_blank: + inc bs3d_blankCount +bs_reload_next: + inc esi + cmp esi, bs3d_shellCount + jb bs_reload_shell + cmp bs3d_liveCount, 0 + jne @F + mov bs3d_shells, 1 + inc bs3d_liveCount + dec bs3d_blankCount +@@: + cmp bs3d_blankCount, 0 + jne @F + mov bs3d_shells[4], 0 + inc bs3d_blankCount + dec bs3d_liveCount +@@: + ; The loading motion loops once per actual cartridge, then racks the pump. + mov eax, bs3d_shellCount + imul eax, 330 + add eax, 920 + mov bs3d_loadDuration, eax + mov eax, bs3d_turn + mov bs3d_loadActor, eax + inc eax + mov bs3d_afterAnim, eax + mov bs3d_timer, 0 + mov bs3d_state, BS_LOAD + invoke PlayCasinoSound3D, OFFSET bs3d_pumpSound, 0, 20003h + ret +BuckshotReload3D ENDP + +; Animation queues a shot; the cartridge and health change exactly once at the trigger frame. +BuckshotShoot3D PROC target:DWORD + mov eax, bs3d_shellIndex + cmp eax, bs3d_shellCount + jae bs_shoot_done + cmp target, 1 + ja bs_shoot_done + mov eax, target + mov bs3d_target, eax + mov eax, bs3d_turn + mov bs3d_shooter, eax + mov bs3d_effectDone, 0 + mov bs3d_timer, 0 + mov bs3d_state, BS_SHOT +bs_shoot_done: + ret +BuckshotShoot3D ENDP + +CommitBuckshotShot3D PROC uses ebx esi edi + cmp bs3d_effectDone, 0 + jne bs_commit_done + mov bs3d_effectDone, 1 + mov esi, bs3d_shooter + mov edi, esi + mov ebx, bs3d_shellIndex + cmp ebx, bs3d_shellCount + jae bs_commit_done + mov eax, bs3d_shells[ebx*4] + mov bs3d_lastShot, eax + inc bs3d_shellIndex + test eax, eax + jz bs_commit_blank + dec bs3d_liveCount + mov ecx, bs3d_damage[esi*4] + cmp bs3d_target, 0 + jne bs_commit_dealer_hit + sub bs3d_hpPlayer, ecx + cmp bs3d_hpPlayer, 0 + jg bs_commit_live_turn + invoke TriggerCharmBulletProtection + test eax, eax + jz @F + mov bs3d_hpPlayer, 1 + jmp bs_commit_live_turn +@@: + mov bs3d_hpPlayer, 0 + mov bs3d_afterAnim, BS_LOSE + jmp bs_commit_live_sound +bs_commit_dealer_hit: + sub bs3d_hpDealer, ecx + cmp bs3d_hpDealer, 0 + jg bs_commit_live_turn + mov bs3d_hpDealer, 0 + mov bs3d_afterAnim, BS_WIN + jmp bs_commit_live_sound +bs_commit_live_turn: + xor esi, 1 + mov bs3d_turn, esi + inc esi + mov bs3d_afterAnim, esi +bs_commit_live_sound: + mov bs3d_message, OFFSET bs3d_textShot + invoke PlayCasinoSound3D, OFFSET rrFireSound3D, 0, 20003h + jmp bs_commit_cleanup +bs_commit_blank: + dec bs3d_blankCount + ; Only a blank directed at the shooter's own side keeps the current turn. + mov eax, bs3d_target + cmp eax, esi + je @F + xor esi, 1 +@@: + mov bs3d_turn, esi + inc esi + mov bs3d_afterAnim, esi + mov bs3d_message, OFFSET bs3d_textDry + invoke PlayCasinoSound3D, OFFSET rrDrySound3D, 0, 20003h +bs_commit_cleanup: + mov bs3d_damage[edi*4], 1 + mov bs3d_known, -1 + mov bs3d_known[4], -1 + mov bs3d_messageTime, 1800 +bs_commit_done: + ret +CommitBuckshotShot3D ENDP + +FinishBuckshotAction3D PROC uses ebx + cmp bs3d_state, BS_SHOT + jne bs_finish_done + mov eax, bs3d_afterAnim + cmp eax, BS_WIN + je bs_finish_win + cmp eax, BS_LOSE + je bs_finish_lose + mov ebx, bs3d_turn + cmp bs3d_skip[ebx*4], 0 + je @F + dec bs3d_skip[ebx*4] + xor ebx, 1 + mov bs3d_turn, ebx +@@: + mov eax, bs3d_shellIndex + cmp eax, bs3d_shellCount + jae bs_finish_reload + lea eax, [ebx+1] + mov bs3d_state, eax + mov bs3d_timer, 0 + ret +bs_finish_reload: + call BuckshotReload3D + ret +bs_finish_win: + mov bs3d_state, BS_DEATH + mov bs3d_result, BS_WIN + mov bs3d_victim, 1 + mov bs3d_timer, 800 + mov eax, bs3d_bet + imul eax, 3 + mov bs3d_payout, eax + add bankroll, eax + cmp bankroll, 1000000000 + jbe @F + mov bankroll, 1000000000 +@@: + invoke NpcRecordRound3D,7,1 + call SaveProgress3D + ret +bs_finish_lose: + mov bs3d_state, BS_DEATH + mov bs3d_result, BS_LOSE + mov bs3d_victim, 0 + mov bs3d_timer, 800 + invoke NpcRecordRound3D,7,0 + call SaveProgress3D +bs_finish_done: + ret +FinishBuckshotAction3D ENDP + +UseBuckshotItem3D PROC uses ebx esi item:DWORD + mov eax, bs3d_state + cmp eax, BS_PLAYER + je @F + cmp eax, BS_DEALER + jne bs_item_invalid +@@: + mov eax, bs3d_shellIndex + cmp eax, bs3d_shellCount + jae bs_item_invalid + cmp item, 3 + ja bs_item_invalid + mov esi, bs3d_turn + mov ebx, esi + shl ebx, 2 + add ebx, item + cmp bs3d_items[ebx*4], 0 + je bs_item_invalid + cmp item, 1 + jne @F + cmp bs3d_damage[esi*4], 2 + je bs_item_invalid +@@: + cmp item, 3 + jne @F + mov eax, esi + xor eax, 1 + cmp bs3d_skip[eax*4], 0 + jne bs_item_invalid +@@: + dec bs3d_items[ebx*4] + mov eax, item + mov bs3d_item, eax + mov bs3d_timer, 0 + mov bs3d_effectDone, 0 + lea eax, [esi+1] + mov bs3d_afterAnim, eax + mov bs3d_state, BS_ITEM + mov eax, 1 + ret +bs_item_invalid: + cmp bs3d_turn, 0 + jne @F + mov bs3d_message, OFFSET bs3d_textItemEmpty + mov bs3d_messageTime, 1500 +@@: + xor eax, eax + ret +UseBuckshotItem3D ENDP + +CommitBuckshotItem3D PROC uses ebx esi + cmp bs3d_effectDone, 0 + jne bs_item_commit_done + mov bs3d_effectDone, 1 + mov esi, bs3d_turn + mov eax, bs3d_item + test eax, eax + jz bs_item_glass + cmp eax, 1 + je bs_item_saw + cmp eax, 2 + je bs_item_beer + mov eax, esi + xor eax, 1 + mov bs3d_skip[eax*4], 1 + mov bs3d_message, OFFSET bs3d_textCuffs + jmp bs_item_committed +bs_item_glass: + mov ebx, bs3d_shellIndex + mov eax, bs3d_shells[ebx*4] + mov bs3d_known[esi*4], eax + mov bs3d_message, OFFSET bs3d_textKnownBlank + test eax, eax + jz bs_item_committed + mov bs3d_message, OFFSET bs3d_textKnownLive + jmp bs_item_committed +bs_item_saw: + mov bs3d_damage[esi*4], 2 + mov bs3d_message, OFFSET bs3d_textSaw + jmp bs_item_committed +bs_item_beer: + mov ebx, bs3d_shellIndex + mov eax, bs3d_shells[ebx*4] + mov bs3d_lastShot, eax + inc bs3d_shellIndex + test eax, eax + jz @F + dec bs3d_liveCount + jmp bs_item_beer_counts +@@: + dec bs3d_blankCount +bs_item_beer_counts: + mov bs3d_known, -1 + mov bs3d_known[4], -1 + mov bs3d_message, OFFSET bs3d_textBeer +bs_item_committed: + mov bs3d_messageTime, 1800 + invoke PlayCasinoSound3D, OFFSET bs3d_pumpSound, 0, 20003h +bs_item_commit_done: + ret +CommitBuckshotItem3D ENDP + +; The dealer reasons from the revealed shell or remaining counts, never from hidden order. +ChooseBuckshotDealer3D PROC + mov eax, bs3d_shellIndex + cmp eax, bs3d_shellCount + jae bs_dealer_reload + cmp bs3d_known[4], -1 + jne bs_dealer_saw + cmp bs3d_items[16], 0 + je bs_dealer_saw + invoke UseBuckshotItem3D, 0 + ret +bs_dealer_saw: + cmp bs3d_known[4], 1 + jne bs_dealer_beer + cmp bs3d_items[20], 0 + je bs_dealer_cuffs + cmp bs3d_damage[4], 1 + jne bs_dealer_cuffs + invoke UseBuckshotItem3D, 1 + ret +bs_dealer_beer: + cmp bs3d_known[4], 0 + jne bs_dealer_cuffs + cmp bs3d_items[24], 0 + je bs_dealer_cuffs + invoke UseBuckshotItem3D, 2 + ret +bs_dealer_cuffs: + cmp bs3d_skip, 0 + jne bs_dealer_target + cmp bs3d_items[28], 0 + je bs_dealer_target + invoke UseBuckshotItem3D, 3 + ret +bs_dealer_target: + cmp bs3d_known[4], 0 + je bs_dealer_self + cmp bs3d_known[4], 1 + je bs_dealer_player + cmp bs3d_liveCount, 0 + je bs_dealer_self + mov eax, bs3d_blankCount + cmp eax, bs3d_liveCount + jbe bs_dealer_player + invoke RandomRange3D, 100 + cmp eax, 60 + jae bs_dealer_player +bs_dealer_self: + invoke BuckshotShoot3D, 1 + ret +bs_dealer_player: + invoke BuckshotShoot3D, 0 + ret +bs_dealer_reload: + call BuckshotReload3D + ret +ChooseBuckshotDealer3D ENDP + +BuckshotMouse3D PROC uses ebx + cmp mouseClick3D, 0 + je bs_mouse_done + mov mouseClick3D, 0 + mov eax, mouseX3D + shl eax, 1 + mov ebx, mouseY3D + shl ebx, 1 + cmp bs3d_state, BS_READY + je bs_mouse_start + cmp bs3d_state, BS_WIN + je bs_mouse_start + cmp bs3d_state, BS_LOSE + je bs_mouse_start + cmp bs3d_state, BS_PLAYER + jne bs_mouse_done + cmp ebx, 396 + jb bs_mouse_done + cmp ebx, 443 + jae bs_mouse_shoot + sub eax, 160 + js bs_mouse_done + xor edx, edx + mov ecx, 112 + div ecx + cmp eax, 3 + ja bs_mouse_done + add eax, 33h + mov pressedKeys3D[eax], 1 + ret +bs_mouse_shoot: + cmp ebx, 476 + jae bs_mouse_done + cmp eax, 32 + jb bs_mouse_done + cmp eax, 132 + jb bs_mouse_self + cmp eax, 150 + jb bs_mouse_done + cmp eax, 270 + jae bs_mouse_done + mov pressedKeys3D[32h], 1 + ret +bs_mouse_self: + mov pressedKeys3D[31h], 1 + ret +bs_mouse_start: + cmp ebx, 442 + jb bs_mouse_amount + cmp ebx, 476 + jae bs_mouse_done + cmp eax, 246 + jb bs_mouse_done + cmp eax, 382 + jae bs_mouse_done + mov pressedKeys3D[20h], 1 + ret +bs_mouse_amount: + cmp bs3d_state, BS_READY + jne bs_mouse_done + cmp ebx, 442 + jae bs_mouse_done + cmp ebx, 408 + jb bs_mouse_done + cmp eax, 30 + jb bs_mouse_done + cmp eax, 60 + jb bs_mouse_down + cmp eax, 112 + jb bs_mouse_done + cmp eax, 144 + jae bs_mouse_done + mov pressedKeys3D[26h], 1 + ret +bs_mouse_down: + mov pressedKeys3D[28h], 1 +bs_mouse_done: + ret +BuckshotMouse3D ENDP + +HandleBuckshot3D PROC uses ebx esi + call BuckshotMouse3D + mov eax, deltaTime3D + add bs3d_clock, eax + cmp bs3d_messageTime, eax + ja @F + mov bs3d_messageTime, 0 + jmp bs_update_state +@@: + sub bs3d_messageTime, eax +bs_update_state: + mov eax, bs3d_state + cmp eax, BS_READY + je bs_input_ready + cmp eax, BS_PLAYER + je bs_input_player + cmp eax, BS_DEALER + je bs_input_dealer + cmp eax, BS_LOAD + je bs_input_loading + cmp eax, BS_SHOT + je bs_input_shot + cmp eax, BS_ITEM + je bs_input_item + cmp eax, BS_DEATH + je bs_input_death + cmp eax, BS_RECOVERY + je bs_input_recovery + cmp eax, BS_ERROR + je bs_input_done + cmp tournamentMode, 1 + jne bs_regular_restart + invoke Pressed3D, 20h + test eax, eax + jnz bs_tourney_report + invoke Pressed3D, 0Dh + test eax, eax + jnz bs_tourney_report + ret +bs_tourney_report: + cmp bs3d_state, BS_WIN + jne bs_tourney_loss + invoke TowerReportRoundOutcome, 1 + ret +bs_tourney_loss: + invoke TowerReportRoundOutcome, 2 + ret +bs_regular_restart: + invoke Pressed3D, 20h + test eax, eax + jz bs_input_done + call InitBuckshot3D + test eax, eax + jz bs_input_done + jmp bs_input_start +bs_input_ready: + invoke Pressed3D, 26h + test eax, eax + jz @F + add bs3d_bet, 50 + cmp bs3d_bet, 5000 + jbe bs_input_done + mov bs3d_bet, 5000 + ret +@@: + invoke Pressed3D, 28h + test eax, eax + jz @F + cmp bs3d_bet, 50 + jbe bs_input_done + sub bs3d_bet, 50 + ret +@@: + invoke Pressed3D, 20h + test eax, eax + jz bs_input_done +bs_input_start: + mov eax, bs3d_bet + cmp eax, 0 + je bs_input_no_cash + cmp eax, bankroll + ja bs_input_no_cash + sub bankroll, eax + mov bs3d_hpPlayer, 4 + mov bs3d_hpDealer, 4 + mov bs3d_turn, 0 + mov bs3d_damage, 1 + mov bs3d_damage[4], 1 + mov bs3d_skip, 0 + mov bs3d_skip[4], 0 + mov bs3d_error, 0 + mov bs3d_messageTime, 0 + mov bs3d_payout, 0 + xor esi, esi +bs_give_item: + mov bs3d_items[esi*4], 1 + inc esi + cmp esi, 8 + jb bs_give_item + call BuckshotReload3D + call SaveProgress3D + ret +bs_input_no_cash: + mov bs3d_error, 1 + ret +bs_input_player: + mov eax, bs3d_shellIndex + cmp eax, bs3d_shellCount + jae bs_input_reload + mov bs3d_turn, 0 + invoke Pressed3D, 31h + test eax, eax + jz @F + invoke BuckshotShoot3D, 0 + ret +@@: + invoke Pressed3D, 32h + test eax, eax + jz @F + invoke BuckshotShoot3D, 1 + ret +@@: + xor esi, esi +bs_item_key: + lea ebx, [esi+33h] + invoke Pressed3D, ebx + test eax, eax + jz @F + invoke UseBuckshotItem3D, esi + ret +@@: + inc esi + cmp esi, 4 + jb bs_item_key + ret +bs_input_dealer: + mov eax, deltaTime3D + add bs3d_timer, eax + cmp bs3d_timer, 850 + jb bs_input_done + mov bs3d_turn, 1 + call ChooseBuckshotDealer3D + ret +bs_input_reload: + call BuckshotReload3D + ret +bs_input_loading: + mov eax, deltaTime3D + add bs3d_timer, eax + mov eax, bs3d_timer + cmp eax, bs3d_loadDuration + jb bs_input_done + mov eax, bs3d_afterAnim + mov bs3d_state, eax + mov bs3d_timer, 0 + call ClearKeys3D + ret +bs_input_shot: + mov eax, deltaTime3D + add bs3d_timer, eax + cmp bs3d_timer, 450 + jb bs_input_done + call CommitBuckshotShot3D + cmp bs3d_timer, 1250 + jb bs_input_done + call FinishBuckshotAction3D + call ClearKeys3D + ret +bs_input_item: + mov eax, deltaTime3D + add bs3d_timer, eax + cmp bs3d_timer, 430 + jb bs_input_done + call CommitBuckshotItem3D + cmp bs3d_timer, 1000 + jb bs_input_done + mov eax, bs3d_shellIndex + cmp eax, bs3d_shellCount + jae bs_input_reload + mov eax, bs3d_afterAnim + mov bs3d_state, eax + mov bs3d_timer, 0 + call ClearKeys3D + ret +bs_input_death: + mov eax, deltaTime3D + add bs3d_timer, eax + cmp bs3d_timer, 1800 + jb bs_input_done + mov bs3d_timer, 0 + mov bs3d_state, BS_RECOVERY + invoke PlayCasinoSound3D, OFFSET bs3d_pumpSound, 0, 20003h + ret +bs_input_recovery: + mov eax, deltaTime3D + add bs3d_timer, eax + cmp bs3d_timer, 3600 + jb bs_input_done + mov eax, bs3d_result + mov bs3d_state, eax + mov bs3d_hpPlayer, 4 + mov bs3d_hpDealer, 4 + mov bs3d_timer, 0 + cmp eax, BS_WIN + jne @F + invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 20003h + jmp bs_recovery_done +@@: + invoke PlayCasinoSound3D, OFFSET soundRoundLose, 0, 20003h +bs_recovery_done: + call ClearKeys3D +bs_input_done: + ret +HandleBuckshot3D ENDP + +; This scene's HUD uses physical 640x480 coordinates, unlike the legacy doubled primitives. +DrawBuckshotPanel3D PROC uses ebx x:DWORD,y:DWORD,w:DWORD,h:DWORD,ink:DWORD + mov eax, x + sar eax, 1 + mov edx, y + sar edx, 1 + mov ecx, w + shr ecx, 1 + mov ebx, h + shr ebx, 1 + invoke DrawBox, eax, edx, ecx, ebx, ink + ret +DrawBuckshotPanel3D ENDP + +DrawBuckshotText3D PROC uses ebx esi edi x:DWORD,y:DWORD,source:DWORD,ink:DWORD + local px:DWORD,rowPx:DWORD,glyphBits:DWORD + mov esi, source + test esi, esi + jz bs_text_done + mov eax, x + mov px, eax +bs_text_char: + movzx eax, byte ptr [esi] + test eax, eax + jz bs_text_done + lea edi, font8x8[eax*8] + xor ebx, ebx +bs_text_row: + movzx eax, byte ptr [edi+ebx] + mov glyphBits, eax + mov edx, y + add edx, ebx + cmp edx, 480 + jae bs_text_next_row + imul edx, 640 + mov rowPx, edx + xor ecx, ecx +bs_text_pixel: + mov eax, px + add eax, ecx + cmp eax, 640 + jae bs_text_skip + test glyphBits, 80h + jz bs_text_skip + add eax, rowPx + mov edx, ink + mov screenBuffer[eax*4], edx +bs_text_skip: + shl glyphBits, 1 + inc ecx + cmp ecx, 8 + jb bs_text_pixel +bs_text_next_row: + inc ebx + cmp ebx, 8 + jb bs_text_row + add px, 8 + inc esi + jmp bs_text_char +bs_text_done: + ret +DrawBuckshotText3D ENDP + +DrawBuckshotNumber3D PROC x:DWORD,y:DWORD,value:DWORD,ink:DWORD + invoke FormatNumber, value, OFFSET hudNumBuffer + invoke DrawBuckshotText3D, x, y, OFFSET hudNumBuffer, ink + ret +DrawBuckshotNumber3D ENDP + +; Keep each pose anchored; move the whole silhouette smoothly as hands rise and settle. +DrawBuckshotHand3D PROC pack:DWORD,frame:DWORD,x:DWORD,y:DWORD,w:DWORD,h:DWORD + invoke DrawAnimSprite3D, pack, frame, x, y, w, h + ret +DrawBuckshotHand3D ENDP + +ResolveBuckshotPose3D PROC uses ebx + mov eax, bs3d_timer + cmp bs3d_state, BS_LOAD + jne bs_resolve_shot + cmp eax, 220 + jb bs_pose_first + sub eax, 220 + mov ecx, bs3d_shellCount + imul ecx, 330 + cmp eax, ecx + jae bs_pose_pump + xor edx, edx + mov ecx, 330 + div ecx + and eax, 1 + imul ebx, eax, 3 + mov eax, edx + xor edx, edx + mov ecx, 110 + div ecx + inc eax + add eax, ebx + ret +bs_pose_pump: + sub eax, ecx + xor edx, edx + cmp eax, 100 + jb bs_pose_settle + sub eax, 100 + mov ecx, 150 + div ecx + cmp eax, 3 + jbe @F + mov eax, 3 +@@: + add eax, 8 + ret +bs_pose_settle: + mov eax, 7 + ret +bs_pose_first: + xor eax, eax + ret +bs_resolve_shot: + cmp eax, 140 + jb bs_pose_first + cmp eax, 300 + jb bs_pose_aim + cmp eax, 450 + jb bs_pose_steady + cmp eax, 535 + jb bs_pose_flash + cmp eax, 700 + jb bs_pose_smoke + cmp eax, 890 + jb bs_pose_rack + cmp eax, 1080 + jb bs_pose_return + mov eax, 7 + ret +bs_pose_aim: + mov eax, 1 + ret +bs_pose_steady: + mov eax, 2 + ret +bs_pose_flash: + cmp bs3d_lastShot, 0 + je bs_pose_steady + mov eax, 3 + ret +bs_pose_smoke: + cmp bs3d_lastShot, 0 + je bs_pose_steady + mov eax, 4 + ret +bs_pose_rack: + mov eax, 5 + ret +bs_pose_return: + mov eax, 6 + ret +ResolveBuckshotPose3D ENDP + +RenderBuckshot3D PROC uses ebx esi edi + local handY:DWORD,pose:DWORD,actor:DWORD + mov animOpacity3D, 255 + cmp bs3d_room.pixels, 0 + je bs_render_error + mov eax, bs3d_turn + cmp bs3d_state, BS_SHOT + jne @F + mov eax, bs3d_shooter +@@: + mov actor, eax + mov bs3d_pitch, 0 + cmp bs3d_state, BS_SHOT + jne bs_pitch_death + cmp actor, 0 + jne bs_pitch_done + cmp bs3d_target, 0 + jne bs_pitch_done + mov eax, bs3d_timer + cmp eax, 300 + jb bs_pitch_rise + mov bs3d_pitch, 120 + cmp eax, 900 + jb bs_pitch_done + cmp bs3d_hpPlayer, 0 + je bs_pitch_done + mov ecx, 1250 + sub ecx, eax + jle bs_pitch_clear + imul eax, ecx, 120 + xor edx, edx + mov ecx, 350 + div ecx + mov bs3d_pitch, eax + jmp bs_pitch_done +bs_pitch_clear: + mov bs3d_pitch, 0 + jmp bs_pitch_done +bs_pitch_rise: + imul eax, 120 + xor edx, edx + mov ecx, 300 + div ecx + mov bs3d_pitch, eax + jmp bs_pitch_done +bs_pitch_death: + cmp bs3d_state, BS_DEATH + je bs_pitch_dead_player + cmp bs3d_state, BS_RECOVERY + jne bs_pitch_done +bs_pitch_dead_player: + cmp bs3d_victim, 0 + jne bs_pitch_done + mov bs3d_pitch, 120 +bs_pitch_done: + cmp bs3d_pitch, 0 + jne bs_render_pitched_room + mov esi, bs3d_room.pixels + lea edi, screenBuffer + mov ecx, SCREEN_SIZE + rep movsd + jmp bs_render_room_done +bs_render_pitched_room: + mov eax, bs3d_pitch + neg eax + mov ecx, bs3d_pitch + add ecx, 480 + invoke DrawAnimSprite3D, OFFSET bs3d_room, 0, 0, eax, 640, ecx +bs_render_room_done: + mov bs3d_dealerFrame, 0 + mov eax, bs3d_clock + xor edx, edx + mov ecx, 3100 + div ecx + cmp edx, 150 + jae @F + mov bs3d_dealerFrame, 1 +@@: + cmp bs3d_state, BS_DEALER + jne @F + mov bs3d_dealerFrame, 2 +@@: + cmp bs3d_state, BS_LOAD + jne @F + mov bs3d_dealerFrame, 4 +@@: + cmp bs3d_state, BS_SHOT + jne @F + mov bs3d_dealerFrame, 6 + cmp actor, 1 + je @F + mov bs3d_dealerFrame, 0 + cmp bs3d_timer, 450 + jb @F + cmp bs3d_target, 1 + jne @F + cmp bs3d_lastShot, 0 + je @F + mov bs3d_dealerFrame, 12 +@@: + cmp bs3d_state, BS_ITEM + jne @F + cmp bs3d_turn, 1 + jne @F + mov bs3d_dealerFrame, 7 +@@: + cmp bs3d_state, BS_WIN + jne @F + mov bs3d_dealerFrame, 14 +@@: + cmp bs3d_state, BS_LOSE + jne @F + mov bs3d_dealerFrame, 11 +@@: + cmp bs3d_state, BS_DEATH + jne bs_dealer_death_shot + cmp bs3d_victim, 1 + jne bs_dealer_normal + mov eax, bs3d_timer + jmp bs_dealer_death_pose +bs_dealer_death_shot: + cmp bs3d_state, BS_SHOT + jne bs_dealer_medical + cmp bs3d_hpDealer, 0 + jne bs_dealer_normal + mov eax, bs3d_timer + sub eax, 450 + js bs_dealer_normal + jmp bs_dealer_death_pose +bs_dealer_medical: + cmp bs3d_state, BS_RECOVERY + jne bs_dealer_normal + cmp bs3d_victim, 1 + jne bs_dealer_normal + cmp bs3d_timer, 2250 + jae bs_dealer_normal + mov eax, 1100 +bs_dealer_death_pose: + xor edx, edx + mov ecx, 100 + div ecx + cmp eax, 11 + jbe @F + mov eax, 11 +@@: + invoke DrawAnimSprite3D, OFFSET bs3d_death, eax, 192, 2, 256, 224 + jmp bs_render_rail +bs_dealer_normal: + cmp bs3d_state, BS_LOAD + jne bs_dealer_forward_pose + cmp bs3d_loadActor, 1 + jne bs_dealer_gesture + mov eax, bs3d_timer + cmp eax, 220 + jb bs_dealer_reach + sub eax, 220 + mov ecx, bs3d_shellCount + imul ecx, 330 + cmp eax, ecx + jae bs_dealer_pump_pose + xor edx, edx + mov ecx, 330 + div ecx + mov eax, edx + xor edx, edx + mov ecx, 110 + div ecx + add eax, 2 + jmp bs_dealer_action_draw +bs_dealer_pump_pose: + sub eax, ecx + cmp eax, 100 + jb bs_dealer_grip + cmp eax, 400 + jb bs_dealer_pull + mov eax, 7 + jmp bs_dealer_action_draw +bs_dealer_grip: + mov eax, 5 + jmp bs_dealer_action_draw +bs_dealer_pull: + mov eax, 6 + jmp bs_dealer_action_draw +bs_dealer_reach: + xor eax, eax + jmp bs_dealer_action_draw +bs_dealer_forward_pose: + cmp bs3d_state, BS_SHOT + jne bs_dealer_gesture + cmp actor, 1 + jne bs_dealer_gesture + cmp bs3d_target, 0 + jne bs_dealer_gesture + call ResolveBuckshotPose3D + add eax, 8 +bs_dealer_action_draw: + invoke DrawAnimSprite3D, OFFSET bs3d_dealerActions, eax, 192, 2, 256, 224 + jmp bs_render_rail +bs_dealer_gesture: + mov eax, 2 + sub eax, bs3d_pitch + invoke DrawAnimSprite3D, OFFSET bs3d_dealer, bs3d_dealerFrame, 192, eax, 256, 224 +bs_render_rail: + ; Dealer's torso stops at the far leather rail; hands can overlap its upper edge. + cmp bs3d_pitch, 0 + jne bs_render_after_rail + mov esi, bs3d_room.pixels + add esi, 640*222*4 + lea edi, screenBuffer[640*222*4] + mov ecx, 640*8 + rep movsd +bs_render_after_rail: + cmp bs3d_state, BS_DEATH + je bs_render_death + cmp bs3d_state, BS_RECOVERY + je bs_render_recovery + cmp bs3d_state, BS_LOAD + je bs_render_load + cmp bs3d_state, BS_SHOT + je bs_render_shot + cmp bs3d_state, BS_ITEM + je bs_render_item + jmp bs_render_idle_gun +bs_render_load: + call ResolveBuckshotPose3D + mov pose, eax + cmp bs3d_loadActor, 1 + je bs_render_dealer_load + mov handY, 140 + mov eax, bs3d_timer + cmp eax, 220 + jae @F + mov ecx, 220 + sub ecx, eax + imul ecx, 60 + mov eax, ecx + xor edx, edx + mov ecx, 220 + div ecx + add handY, eax +@@: + invoke DrawBuckshotHand3D, OFFSET bs3d_loading, pose, 166, handY, 320, 280 + jmp bs_render_hud +bs_render_dealer_load: + jmp bs_render_hud +bs_render_shot: + call ResolveBuckshotPose3D + mov pose, eax + cmp actor, 1 + je bs_render_dealer_shot + mov eax, bs3d_target + test eax, eax + jz bs_render_self_shot + mov handY, 140 + mov eax, bs3d_timer + cmp eax, 140 + jae @F + mov ecx, 140 + sub ecx, eax + imul eax, ecx, 60 + xor edx, edx + mov ecx, 140 + div ecx + add handY, eax +@@: + invoke DrawBuckshotHand3D, OFFSET bs3d_shots, pose, 158, handY, 320, 280 + jmp bs_render_hit_overlay +bs_render_self_shot: + mov handY, 120 + mov eax, bs3d_timer + cmp eax, 300 + jae @F + mov ecx, 300 + sub ecx, eax + imul eax, ecx, 80 + xor edx, edx + mov ecx, 300 + div ecx + add handY, eax +@@: + mov eax, bs3d_timer + xor edx, edx + mov ecx, 150 + div ecx + cmp eax, 7 + jbe @F + mov eax, 7 +@@: + cmp bs3d_timer, 450 + jb @F + cmp bs3d_timer, 900 + jae @F + mov eax, 5 +@@: + invoke DrawBuckshotHand3D, OFFSET bs3d_self, eax, 156, handY, 328, 287 + cmp bs3d_effectDone, 0 + je bs_render_hit_overlay + cmp bs3d_lastShot, 0 + je bs_render_hit_overlay + cmp bs3d_timer, 900 + jae bs_render_hit_overlay + mov eax, bs3d_timer + sub eax, 450 + cmp eax, 120 + jae bs_self_smoke + xor edx, edx + mov ecx, 30 + div ecx + jmp bs_self_flash_draw +bs_self_smoke: + sub eax, 120 + xor edx, edx + mov ecx, 90 + div ecx + add eax, 4 + cmp eax, 7 + jbe bs_self_flash_draw + mov eax, 7 +bs_self_flash_draw: + ; The atlas origin is its center, aligned with the bore rather than the weapon bounds. + mov edx, handY + add edx, 44 + invoke DrawAnimSprite3D, OFFSET bs3d_selfFlash, eax, 251, edx, 128, 128 + jmp bs_render_hit_overlay +bs_render_dealer_shot: + ; The dealer action atlas already owns the raised weapon, including its first pose. + cmp bs3d_target, 1 + je bs_render_dealer_self + jmp bs_render_hit_overlay +bs_render_dealer_self: + invoke DrawAnimSprite3D, OFFSET bs3d_props, 1, 206, 78, 176, 94 + jmp bs_render_hit_overlay +bs_render_hit_overlay: + cmp bs3d_effectDone, 0 + je bs_render_hud + cmp bs3d_lastShot, 0 + je bs_render_hud + cmp bs3d_target, 0 + jne bs_render_hud + mov eax, bs3d_timer + sub eax, 450 + xor edx, edx + mov ecx, 180 + div ecx + cmp eax, 7 + jbe @F + mov eax, 7 +@@: + invoke DrawAnimSprite3D, OFFSET bs3d_blood, eax, 0, 0, 640, 480 + ret +bs_render_death: + cmp bs3d_victim, 1 + je bs_draw_done + ; First-person death keeps the player's body off camera. + lea edi, screenBuffer + mov ecx, SCREEN_SIZE +bs_dim_death: + mov eax, [edi] + shr eax, 2 + and eax, 003F3F3Fh + mov [edi], eax + add edi, 4 + loop bs_dim_death + mov eax, bs3d_timer + xor edx, edx + mov ecx, 250 + div ecx + cmp eax, 7 + jbe @F + mov eax, 7 +@@: + invoke DrawAnimSprite3D, OFFSET bs3d_blood, eax, 0, 0, 640, 480 + ret +bs_render_recovery: + ; Both perspectives use all sixteen poses, once, in chronological order. + mov eax, bs3d_timer + imul eax,16 + xor edx, edx + mov ecx,3600 + div ecx + cmp eax,15 + jbe @F + mov eax,15 +@@: + cmp bs3d_victim, 0 + jne @F + add eax,16 +@@: + invoke DrawAnimSprite3D, OFFSET bs3d_medical, eax, 0, 0, 640, 480 + ret +bs_render_item: + mov eax, bs3d_item + shl eax, 1 + cmp bs3d_timer, 430 + jb @F + inc eax +@@: + mov pose, eax + cmp bs3d_turn, 1 + je bs_render_dealer_item + invoke DrawBuckshotHand3D, OFFSET bs3d_itemHands, pose, 180, 168, 256, 256 + jmp bs_render_hud +bs_render_dealer_item: + mov eax, bs3d_item + add eax, 4 + invoke DrawAnimSprite3D, OFFSET bs3d_props, eax, 244, 161, 86, 86 + jmp bs_render_hud +bs_render_idle_gun: + invoke DrawAnimSprite3D, OFFSET bs3d_props, 0, 190, 226, 260, 168 +bs_render_hud: + invoke DrawBuckshotPanel3D, 0, 0, 640, 32, 00111116h + invoke DrawBuckshotText3D, 14, 12, OFFSET bs3d_textTitle, 00E9C47Ah + invoke DrawBuckshotText3D, 488, 12, OFFSET bs3d_textBank, 00BCBCBCh + invoke DrawBuckshotNumber3D, 540, 12, bankroll, 00F3E4BAh + invoke DrawBuckshotPanel3D, 10, 42, 110, 28, 00151C20h + invoke DrawBuckshotPanel3D, 520, 42, 110, 28, 00151C20h + invoke DrawBuckshotText3D, 16, 48, OFFSET bs3d_textPlayer, 00E2E2E2h + invoke DrawBuckshotText3D, 526, 48, OFFSET bs3d_textDealer, 00E2E2E2h + xor esi, esi +bs_draw_health: + imul ebx, esi, 16 + add ebx, 18 + mov ecx, 003B3232h + cmp esi, bs3d_hpPlayer + jae @F + mov ecx, 00BD4F46h +@@: + invoke DrawBuckshotPanel3D, ebx, 60, 12, 6, ecx + add ebx, 510 + mov ecx, 003B3232h + cmp esi, bs3d_hpDealer + jae @F + mov ecx, 00BD4F46h +@@: + invoke DrawBuckshotPanel3D, ebx, 60, 12, 6, ecx + inc esi + cmp esi, 4 + jb bs_draw_health + invoke DrawBuckshotPanel3D, 0, 386, 640, 94, 00111617h + invoke DrawBuckshotPanel3D, 0, 386, 640, 2, 008A794Bh + invoke DrawBuckshotText3D, 16, 396, OFFSET bs3d_textShells, 00C7B88Fh + mov eax, bs3d_shellCount + sub eax, bs3d_shellIndex + invoke DrawBuckshotNumber3D, 78, 396, eax, 00FFFFFFh + invoke DrawBuckshotText3D, 14, 412, OFFSET bs3d_textLive, 00DF6656h + invoke DrawBuckshotNumber3D, 70, 412, bs3d_liveCount, 00DF6656h + invoke DrawBuckshotText3D, 14, 430, OFFSET bs3d_textBlank, 007DBBCCh + invoke DrawBuckshotNumber3D, 86, 430, bs3d_blankCount, 007DBBCCh + xor esi, esi +bs_draw_inventory: + imul ebx, esi, 112 + add ebx, 160 + invoke DrawBuckshotPanel3D, ebx, 396, 104, 44, 0020292Ch + lea eax, [esi+4] + lea edx, [ebx+4] + invoke DrawAnimSprite3D, OFFSET bs3d_props, eax, edx, 399, 34, 34 + lea eax, [ebx+40] + invoke DrawBuckshotText3D, eax, 404, bs3d_textItems[esi*4], 00CFCAACh + lea eax, [ebx+44] + invoke DrawBuckshotNumber3D, eax, 420, bs3d_items[esi*4], 00EEEEEEh + inc esi + cmp esi, 4 + jb bs_draw_inventory + cmp bs3d_state, BS_READY + je bs_draw_ready + cmp bs3d_state, BS_WIN + je bs_draw_win + cmp bs3d_state, BS_LOSE + je bs_draw_lose + cmp bs3d_state, BS_PLAYER + je bs_draw_player + cmp bs3d_state, BS_LOAD + je bs_draw_loading + cmp bs3d_state, BS_ITEM + je bs_draw_using + cmp bs3d_state, BS_DEATH + je bs_draw_death + cmp bs3d_state, BS_RECOVERY + je bs_draw_recovery + mov ebx, OFFSET bs3d_textWait + cmp bs3d_state, BS_SHOT + jne bs_draw_message + cmp bs3d_effectDone, 0 + je bs_draw_message + mov ebx, bs3d_message + jmp bs_draw_message +bs_draw_loading: + mov ebx, OFFSET bs3d_textLoad + jmp bs_draw_message +bs_draw_using: + mov ebx, OFFSET bs3d_textItem + jmp bs_draw_message +bs_draw_death: + mov ebx, OFFSET bs3d_textDeath + jmp bs_draw_message +bs_draw_recovery: + mov ebx, OFFSET bs3d_textMedical +bs_draw_message: + invoke DrawBuckshotText3D, 24, 455, ebx, 00E1C67Bh + invoke DrawBuckshotText3D, 530, 455, OFFSET bs3d_textPause, 00AFAFAFh + jmp bs_draw_notice +bs_draw_ready: + invoke DrawBuckshotPanel3D, 30, 416, 28, 22, 00404A46h + invoke DrawBuckshotText3D, 40, 423, OFFSET bs3d_minus, 00FFFFFFh + invoke DrawBuckshotPanel3D, 112, 416, 28, 22, 00404A46h + invoke DrawBuckshotText3D, 122, 423, OFFSET bs3d_plus, 00FFFFFFh + invoke DrawBuckshotText3D, 22, 451, OFFSET bs3d_textBet, 00C7B88Fh + invoke DrawBuckshotNumber3D, 92, 451, bs3d_bet, 00FFFFFFh + invoke DrawBuckshotPanel3D, 246, 446, 136, 24, 00363C30h + invoke DrawBuckshotText3D, 258, 454, OFFSET bs3d_textReady, 00E1C67Bh + invoke DrawBuckshotText3D, 548, 454, OFFSET bs3d_textExit, 00AFAFAFh + cmp bs3d_error, 0 + je bs_draw_done + invoke DrawBuckshotPanel3D, 232, 348, 176, 22, 00291919h + invoke DrawBuckshotText3D, 260, 355, OFFSET bs3d_textEmpty, 00DD7768h + jmp bs_draw_done +bs_draw_player: + invoke DrawBuckshotPanel3D, 30, 446, 102, 24, 00383E33h + invoke DrawBuckshotPanel3D, 150, 446, 122, 24, 00462E2Eh + invoke DrawBuckshotText3D, 48, 455, OFFSET bs3d_textChoose, 00E9DDC4h + invoke DrawBuckshotText3D, 176, 455, OFFSET bs3d_textOpponent, 00E9DDC4h + invoke DrawBuckshotText3D, 530, 455, OFFSET bs3d_textPause, 00AFAFAFh + jmp bs_draw_notice +bs_draw_win: + invoke DrawBuckshotText3D, 20, 455, OFFSET bs3d_textWin, 007FE395h + invoke DrawBuckshotNumber3D, 120, 455, bs3d_payout, 007FE395h + jmp bs_draw_result +bs_draw_lose: + invoke DrawBuckshotText3D, 20, 455, OFFSET bs3d_textLose, 00E1766Ah +bs_draw_result: + invoke DrawBuckshotPanel3D, 246, 446, 136, 24, 00363C30h + invoke DrawBuckshotText3D, 254, 455, OFFSET bs3d_textResult, 00E1C67Bh + invoke DrawBuckshotText3D, 548, 455, OFFSET bs3d_textExit, 00AFAFAFh + jmp bs_draw_done +bs_draw_notice: + cmp bs3d_turn, 0 + jne bs_draw_done + cmp bs3d_known, -1 + je @F + mov eax, OFFSET bs3d_textKnownBlank + cmp bs3d_known, 0 + je bs_draw_known + mov eax, OFFSET bs3d_textKnownLive +bs_draw_known: + ; Drawing primitives may overwrite EAX; preserve the selected string address. + mov ebx, eax + invoke DrawBuckshotPanel3D, 8, 350, 120, 22, 001B2325h + invoke DrawBuckshotText3D, 14, 357, ebx, 00E9C47Ah +@@: + cmp bs3d_messageTime, 0 + je bs_draw_done + cmp bs3d_message, 0 + je bs_draw_done + invoke DrawBuckshotPanel3D, 170, 354, 280, 22, 001B2325h + invoke DrawBuckshotText3D, 180, 361, bs3d_message, 00E1C67Bh +bs_draw_done: + ret +bs_render_error: + invoke DrawBuckshotPanel3D, 0, 0, 640, 480, 00111719h + invoke DrawBuckshotText3D, 184, 230, OFFSET bs3d_textAssets, 00E1C67Bh + invoke DrawBuckshotText3D, 276, 254, OFFSET bs3d_textExit, 00C7B88Fh + ret +RenderBuckshot3D ENDP diff --git a/src_graphics/charms.inc b/src_graphics/charms.inc new file mode 100644 index 0000000..c664eb0 --- /dev/null +++ b/src_graphics/charms.inc @@ -0,0 +1,204 @@ + +.code + +; ------------------------------------------------------------------------------ +; TriggerCharmLossProtection: Checks Devil's Contract and Clover to save bet +; Input: betAmount (DWORD) +; Output: eax = 1 if saved (bet refunded to bankroll), 0 if not saved +; ------------------------------------------------------------------------------ +TriggerCharmLossProtection PROC uses ebx ecx edx, betAmount:DWORD + ; 1. Check Devil's Contract (50% chance to refund full bet) + cmp charmDevilUses, 0 + jle check_clover + + invoke RandomRange, 100 + cmp eax, 50 + jge check_clover + + ; Devil Contract Triggered! + dec charmDevilUses + mov eax, betAmount + test eax, eax + jz @F + add bankroll, eax +@@: + invoke CopyString3D, OFFSET msgCharmDevilSave, OFFSET flashMessage + mov flashTimer, 120 + invoke PlayCasinoSound3D, OFFSET soundJackpot, 0, 1 + call SaveProgress3D + mov eax, 1 + ret + +check_clover: + ; 2. Check Clover of Luck (15% chance to refund bet) + cmp charmCloverUses, 0 + jle protection_none + + invoke RandomRange, 100 + cmp eax, 15 + jge protection_none + + ; Clover Triggered! + dec charmCloverUses + mov eax, betAmount + test eax, eax + jz @F + add bankroll, eax +@@: + invoke CopyString3D, OFFSET msgCharmCloverSave, OFFSET flashMessage + mov flashTimer, 120 + invoke PlayCasinoSound3D, OFFSET soundJackpot, 0, 1 + call SaveProgress3D + mov eax, 1 + ret + +protection_none: + xor eax, eax + ret +TriggerCharmLossProtection ENDP + +; ------------------------------------------------------------------------------ +; TriggerCharmWinBonus: Grants +15% extra payout on slot / roulette win +; Input: winAmount (DWORD) +; Output: eax = bonus amount added to bankroll, 0 if no horseshoe active +; ------------------------------------------------------------------------------ +TriggerCharmWinBonus PROC uses ebx ecx edx, winAmount:DWORD + cmp charmHorseshoeUses, 0 + jle bonus_none + + mov eax, winAmount + test eax, eax + jle bonus_none + + ; Calculate 15% bonus: (winAmount * 15) / 100 + imul eax, 15 + xor edx, edx + mov ecx, 100 + div ecx + cmp eax, 1 + jge @F + mov eax, 1 +@@: + mov ebx, eax + add bankroll, ebx + dec charmHorseshoeUses + invoke CopyString3D, OFFSET msgCharmHorseshoeWin, OFFSET flashMessage + mov flashTimer, 120 + invoke PlayCasinoSound3D, OFFSET soundCoin, 0, 1 + call SaveProgress3D + mov eax, ebx + ret + +bonus_none: + xor eax, eax + ret +TriggerCharmWinBonus ENDP + +; ------------------------------------------------------------------------------ +; TriggerCharmBulletProtection: Protects player from fatal gunshot +; Output: eax = 1 if saved (bullet misfired), 0 if no skull active +; ------------------------------------------------------------------------------ +TriggerCharmBulletProtection PROC uses ebx ecx edx + cmp charmSkullUses, 0 + jle bullet_none + + dec charmSkullUses + invoke CopyString3D, OFFSET msgCharmSkullSave, OFFSET flashMessage + mov flashTimer, 140 + invoke PlayCasinoSound3D, OFFSET rrDrySound3D, 0, 1 + call SaveProgress3D + mov eax, 1 + ret + +bullet_none: + xor eax, eax + ret +TriggerCharmBulletProtection ENDP + +; ------------------------------------------------------------------------------ +; DrawCharmsHUD: Draws active charm badges with remaining charges +; Input: drawX, drawY (screen coordinates) +; ------------------------------------------------------------------------------ +DrawCharmsHUD PROC uses ebx esi edi, drawX:DWORD, drawY:DWORD + local curX:DWORD, tempBuf[16]:BYTE + + mov eax, charmCloverUses + or eax, charmHorseshoeUses + or eax, charmSkullUses + or eax, charmDevilUses + test eax, eax + jz hud_done + + mov eax, drawX + mov curX, eax + + ; 1. Clover Badge + cmp charmCloverUses, 0 + jle check_horse_hud + + invoke DrawString8x8, curX, drawY, OFFSET badgeCloverPrefix, 0080FF80h + add curX, 32 + invoke FormatNumber, charmCloverUses, ADDR tempBuf + invoke DrawString8x8, curX, drawY, ADDR tempBuf, 00FFFFFFh + cmp charmCloverUses, 10 + jb @F + add curX, 8 +@@: + add curX, 8 + invoke DrawString8x8, curX, drawY, OFFSET badgeCloseBracket, 0080FF80h + add curX, 16 + +check_horse_hud: + ; 2. Horseshoe Badge + cmp charmHorseshoeUses, 0 + jle check_skull_hud + + invoke DrawString8x8, curX, drawY, OFFSET badgeHorsePrefix, 00FFE060h + add curX, 32 + invoke FormatNumber, charmHorseshoeUses, ADDR tempBuf + invoke DrawString8x8, curX, drawY, ADDR tempBuf, 00FFFFFFh + cmp charmHorseshoeUses, 10 + jb @F + add curX, 8 +@@: + add curX, 8 + invoke DrawString8x8, curX, drawY, OFFSET badgeCloseBracket, 00FFE060h + add curX, 16 + +check_skull_hud: + ; 3. Skull Badge + cmp charmSkullUses, 0 + jle check_devil_hud + + invoke DrawString8x8, curX, drawY, OFFSET badgeSkullPrefix, 0080FFFFh + add curX, 32 + invoke FormatNumber, charmSkullUses, ADDR tempBuf + invoke DrawString8x8, curX, drawY, ADDR tempBuf, 00FFFFFFh + cmp charmSkullUses, 10 + jb @F + add curX, 8 +@@: + add curX, 8 + invoke DrawString8x8, curX, drawY, OFFSET badgeCloseBracket, 0080FFFFh + add curX, 16 + +check_devil_hud: + ; 4. Devil Contract Badge + cmp charmDevilUses, 0 + jle hud_done + + invoke DrawString8x8, curX, drawY, OFFSET badgeDevilPrefix, 00FF6060h + add curX, 32 + invoke FormatNumber, charmDevilUses, ADDR tempBuf + invoke DrawString8x8, curX, drawY, ADDR tempBuf, 00FFFFFFh + cmp charmDevilUses, 10 + jb @F + add curX, 8 +@@: + add curX, 8 + invoke DrawString8x8, curX, drawY, OFFSET badgeCloseBracket, 00FF6060h + add curX, 16 + +hud_done: + ret +DrawCharmsHUD ENDP diff --git a/src_graphics/charms_data.inc b/src_graphics/charms_data.inc new file mode 100644 index 0000000..0f03943 --- /dev/null +++ b/src_graphics/charms_data.inc @@ -0,0 +1,58 @@ +CHARM_COUNT equ 4 + +CHARM_CLOVER_PRICE equ 12000 +CHARM_CLOVER_USES equ 3 + +CHARM_HORSESHOE_PRICE equ 20000 +CHARM_HORSESHOE_USES equ 5 + +CHARM_SKULL_PRICE equ 35000 +CHARM_SKULL_USES equ 1 + +CHARM_DEVIL_PRICE equ 50000 +CHARM_DEVIL_USES equ 2 + +TriggerCharmLossProtection PROTO :DWORD +TriggerCharmWinBonus PROTO :DWORD +TriggerCharmBulletProtection PROTO +DrawCharmsHUD PROTO :DWORD, :DWORD + +.data + +; Active Charm Charges +charmCloverUses dd 0 +charmHorseshoeUses dd 0 +charmSkullUses dd 0 +charmDevilUses dd 0 + +; Charm Store Metadata +charmPrices3D dd CHARM_CLOVER_PRICE, CHARM_HORSESHOE_PRICE, CHARM_SKULL_PRICE, CHARM_DEVIL_PRICE +charmUsesPack3D dd CHARM_CLOVER_USES, CHARM_HORSESHOE_USES, CHARM_SKULL_USES, CHARM_DEVIL_USES + +charmNameClover db 'Êëåâåð Óäà÷è',0 +charmNameHorseshoe db 'Çîëîòàÿ Ïîäêîâà',0 +charmNameSkull db '×åðåï Áåññìåðòèÿ',0 +charmNameDevil db 'Êîíòðàêò Äüÿâîëà',0 + +charmNames3D dd OFFSET charmNameClover, OFFSET charmNameHorseshoe, OFFSET charmNameSkull, OFFSET charmNameDevil + +charmDescClover db '15% øàíñ ñïàñòè ñòàâêó',0 +charmDescHorseshoe db '+15% ê âûèãðûøó â ñëîòàõ',0 +charmDescSkull db '100% ñïàñåíèå îò ïóëè',0 +charmDescDevil db '50% øàíñ ñïàñòè ñòàâêó',0 + +charmDescs3D dd OFFSET charmDescClover, OFFSET charmDescHorseshoe, OFFSET charmDescSkull, OFFSET charmDescDevil + +; HUD Flash Messages +msgCharmCloverSave db 'Êëåâåð ñïàñ âàøó ñòàâêó!',0 +msgCharmDevilSave db 'Äüÿâîë: ñòàâêà âîçâðàùåíà!',0 +msgCharmHorseshoeWin db 'Ïîäêîâà: +15% ê âûèãðûøó!',0 +msgCharmSkullSave db '×åðåï: Îñå÷êà! Âû âûæèëè!',0 +msgCharmTowerSave db 'Òàëèñìàí ñïàñ âàñ îò ïàäåíèÿ ñ Áàøíè!',0 + +; Compact HUD Badges +badgeCloverPrefix db '[ÊË:',0 +badgeHorsePrefix db '[ÏÊ:',0 +badgeSkullPrefix db '[×Ð:',0 +badgeDevilPrefix db '[ÊÒ:',0 +badgeCloseBracket db '] ',0 diff --git a/src_graphics/hell_tower.inc b/src_graphics/hell_tower.inc index 5469eb7..543ce9b 100644 --- a/src_graphics/hell_tower.inc +++ b/src_graphics/hell_tower.inc @@ -1,364 +1,375 @@ -; --- hell_tower.inc: Implementation of Hell Tower (10-floor Boss Rush) --- -.code - -InitHellTower3D PROC - mov tournamentMode, 1 - mov towerStage, 1 - mov towerFloorState, TOWER_STATE_BRIEFING - mov towerAnimClock, 0 - call PlayTowerRandomMusic - mov engineMode, MODE_HELL_TOWER - call ClearKeys3D - ret -InitHellTower3D ENDP - -TowerExitToHall PROC - call StopTowerMusic - mov tournamentMode, 0 - mov engineMode, MODE_WALK - call ClearKeys3D - ret -TowerExitToHall ENDP - -TowerLaunchCurrentFloor PROC uses ebx esi edi - mov eax, towerStage - dec eax - cmp eax, 10 - jae @F - jmp launch_valid -@@: - xor eax, eax -launch_valid: - mov edx, towerFloorModes[eax*4] - mov towerCurrentGame, edx - mov towerFloorState, TOWER_STATE_IN_GAME - - ; Launch corresponding game - cmp edx, MODE_COIN - jne @F - call InitCoinGame - mov engineMode, MODE_COIN - jmp launch_done -@@: - cmp edx, MODE_DICE - jne @F - call InitDiceGame - mov engineMode, MODE_DICE - jmp launch_done -@@: - cmp edx, MODE_SKULLS - jne @F - call InitSkullsGame - mov engineMode, MODE_SKULLS - jmp launch_done -@@: - cmp edx, MODE_BLACKJACK - jne @F - call InitNativeBlackjack3D - mov engineMode, MODE_BLACKJACK - jmp launch_done -@@: - cmp edx, MODE_POKER - jne @F - call InitNativePoker3D - mov engineMode, MODE_POKER - jmp launch_done -@@: - cmp edx, MODE_RUSSIAN - jne @F - call InitRussianGame3D - mov engineMode, MODE_RUSSIAN - jmp launch_done -@@: - cmp edx, MODE_ROULETTE - jne @F - call InitNativeWheel3D - mov engineMode, MODE_ROULETTE - jmp launch_done -@@: - cmp edx, MODE_DURAK - jne @F - call InitNativeDurak3D - mov engineMode, MODE_DURAK - jmp launch_done -@@: - cmp edx, MODE_SKILL - jne @F - call InitSkillGame - mov engineMode, MODE_SKILL - jmp launch_done -@@: - cmp edx, MODE_BUCKSHOT - jne launch_done - call InitBuckshot3D - mov engineMode, MODE_BUCKSHOT - -launch_done: - call ClearKeys3D - ret -TowerLaunchCurrentFloor ENDP - -TowerReportRoundOutcome PROC uses eax outcome:DWORD - cmp tournamentMode, 1 - jne report_exit - mov eax, outcome - cmp eax, 1 - jne report_loss - - ; --- Victory --- - cmp towerStage, 10 - jae report_champion - - mov towerFloorState, TOWER_STATE_CLEAR - invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 - mov engineMode, MODE_HELL_TOWER - call ClearKeys3D - ret - -report_champion: - mov towerFloorState, TOWER_STATE_CHAMPION - mov eax, towerPrizeAmount - add bankroll, eax - invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 - call SaveProgress3D - mov engineMode, MODE_HELL_TOWER - call ClearKeys3D - ret - -report_loss: - mov towerFloorState, TOWER_STATE_DEFEAT - call StopTowerMusic - invoke PlayCasinoSound3D, OFFSET soundRoundLose, 0, 1 - mov engineMode, MODE_HELL_TOWER - call ClearKeys3D - ret - -report_exit: - ret -TowerReportRoundOutcome ENDP - -HandleHellTowerInput PROC - mov eax, towerFloorState - cmp eax, TOWER_STATE_BRIEFING - je input_briefing - cmp eax, TOWER_STATE_CLEAR - je input_clear - cmp eax, TOWER_STATE_DEFEAT - je input_defeat - cmp eax, TOWER_STATE_CHAMPION - je input_champion - ret - -input_briefing: - invoke Pressed3D, 1Bh ; ESC - test eax, eax - jz @F - call TowerExitToHall - ret -@@: - invoke Pressed3D, 20h ; SPACE - test eax, eax - jnz start_stage - invoke Pressed3D, 0Dh ; ENTER - test eax, eax - jnz start_stage - ret -start_stage: - call TowerLaunchCurrentFloor - ret - -input_clear: - invoke Pressed3D, 1Bh ; ESC - test eax, eax - jz @F - call TowerExitToHall - ret -@@: - invoke Pressed3D, 20h ; SPACE - test eax, eax - jnz advance_stage - invoke Pressed3D, 0Dh ; ENTER - test eax, eax - jnz advance_stage - ret -advance_stage: - inc towerStage - mov towerFloorState, TOWER_STATE_BRIEFING - call ClearKeys3D - ret - -input_defeat: - invoke Pressed3D, 1Bh ; ESC - test eax, eax - jnz exit_to_hall - invoke Pressed3D, 20h ; SPACE - test eax, eax - jnz exit_to_hall - invoke Pressed3D, 0Dh ; ENTER - test eax, eax - jnz exit_to_hall - ret - -input_champion: - invoke Pressed3D, 1Bh ; ESC - test eax, eax - jnz exit_to_hall - invoke Pressed3D, 20h ; SPACE - test eax, eax - jnz exit_to_hall - invoke Pressed3D, 0Dh ; ENTER - test eax, eax - jnz exit_to_hall - ret - -exit_to_hall: - call TowerExitToHall - ret -HandleHellTowerInput ENDP - -RenderHellTower3D PROC uses ebx esi edi - ; 1. Clear background with deep infernal maroon - lea edi, screenBuffer - mov ecx, SCREEN_SIZE - mov eax, 00100202h - rep stosd - - ; 2. Outer and inner border - invoke DrawBoxBorder, 8, 8, 304, 224, 00120202h, 00CC2222h, 2 - invoke DrawBoxBorder, 12, 12, 296, 216, 000C0202h, 00881111h, 1 - - ; 3. Header Banner (Centered: 192px wide, (320 - 192)/2 = 64) - invoke DrawBoxBorder, 18, 16, 284, 20, 00220404h, 00FF4444h, 1 - invoke DrawString8x8, 64, 22, OFFSET towerHeader, 00FFDD66h - - ; 4. Floor Header & Segment Progress Bar - invoke DrawString8x8, 26, 42, OFFSET towerFloorPrefix, 00FF6666h - invoke FormatNumber, towerStage, OFFSET hudNumBuffer - invoke DrawString8x8, 66, 42, OFFSET hudNumBuffer, 00FFFFFFh - invoke DrawString8x8, 74, 42, OFFSET towerOfTen, 00AAAAAAh - - ; Draw 10 stage pips across x = 26 .. 293 - xor esi, esi -draw_pips_loop: - mov eax, esi - imul eax, 27 - add eax, 26 ; x position - mov ebx, eax - - ; Color based on state - mov ecx, towerStage - dec ecx - cmp esi, ecx - jae pip_future - ; Past stage (Cleared): Bright Gold - invoke DrawBoxBorder, ebx, 54, 24, 6, 00DDBB22h, 00FFEE44h, 1 - jmp pip_next -pip_future: - je pip_current - ; Future stage: Dark - invoke DrawBoxBorder, ebx, 54, 24, 6, 002A0808h, 00441111h, 1 - jmp pip_next -pip_current: - ; Current stage: Pulsing Fire Red/Orange - invoke DrawBoxBorder, ebx, 54, 24, 6, 00EE3311h, 00FFAA33h, 1 -pip_next: - inc esi - cmp esi, 10 - jb draw_pips_loop - - ; 5. Specific State Panels - mov eax, towerFloorState - cmp eax, TOWER_STATE_BRIEFING - je render_briefing - cmp eax, TOWER_STATE_CLEAR - je render_clear - cmp eax, TOWER_STATE_DEFEAT - je render_defeat - cmp eax, TOWER_STATE_CHAMPION - je render_champion - ret - -render_briefing: - ; Boss & Game Card - invoke DrawBoxBorder, 20, 66, 280, 58, 001E0404h, 00AA2222h, 1 - invoke DrawString8x8, 28, 72, OFFSET towerEnemyLabel, 00FFAA55h - - mov eax, towerStage - dec eax - mov edx, towerBossNames[eax*4] - invoke DrawString8x8, 76, 72, edx, 00FFFFFFh - - invoke DrawString8x8, 28, 86, OFFSET towerGameLabel, 00FFAA55h - mov eax, towerStage - dec eax - mov edx, towerGameNames[eax*4] - invoke DrawString8x8, 76, 86, edx, 00FFDD66h - - mov eax, towerStage - dec eax - mov edx, towerDescriptions[eax*4] - invoke DrawString8x8, 28, 104, edx, 00CCCCCCh - - ; Rules & Warning (fits cleanly inside 300px boundary) - invoke DrawString8x8, 24, 132, OFFSET towerRuleText, 00FFAA33h - invoke DrawString8x8, 24, 146, OFFSET towerLossWarning, 00EE4444h - - ; Bankroll Display - invoke DrawString8x8, 24, 164, OFFSET textBank3D, 00AAAAAAh - invoke FormatNumber, bankroll, OFFSET hudNumBuffer - invoke DrawString8x8, 76, 164, OFFSET hudNumBuffer, 0066FF66h - - ; Action Buttons (Centered text inside buttons) - invoke DrawBoxBorder, 22, 184, 132, 24, 003D0C0Ch, 00FF4444h, 1 - invoke DrawString8x8, 32, 192, OFFSET towerStartBtn, 00FFFFFFh - - invoke DrawBoxBorder, 164, 184, 132, 24, 00220606h, 00882222h, 1 - invoke DrawString8x8, 178, 192, OFFSET towerEscBtn, 00AAAAAAh - ret - -render_clear: - invoke DrawBoxBorder, 20, 76, 280, 74, 00082208h, 0033CC33h, 2 - invoke DrawString8x8, 48, 90, OFFSET towerClearTitle, 0066FF66h - invoke DrawString8x8, 24, 112, OFFSET towerClearDesc, 00FFFFFFh - - invoke DrawBoxBorder, 50, 174, 220, 26, 00114411h, 0044FF44h, 1 - invoke DrawString8x8, 100, 183, OFFSET towerNextBtn, 00FFFFFFh - ret - -render_defeat: - invoke DrawBoxBorder, 20, 76, 280, 74, 002A0404h, 00FF2222h, 2 - invoke DrawString8x8, 60, 90, OFFSET towerDefeatTitle, 00FF4444h - invoke DrawString8x8, 36, 112, OFFSET towerDefeatDesc, 00FFFFFFh - - invoke DrawBoxBorder, 32, 174, 256, 26, 00441010h, 00FF4444h, 1 - invoke DrawString8x8, 48, 183, OFFSET towerReturnBtn, 00FFFFFFh - ret - -render_champion: - invoke DrawBoxBorder, 18, 70, 284, 86, 00332200h, 00FFD700h, 2 - invoke DrawString8x8, 40, 82, OFFSET towerChampTitle, 00FFE066h - invoke DrawString8x8, 56, 100, OFFSET towerChampSubtitle, 00FFFFFFh - invoke DrawString8x8, 36, 122, OFFSET towerPrizeText, 0066FF66h - - invoke DrawBoxBorder, 32, 174, 256, 26, 00443300h, 00FFCC00h, 1 - invoke DrawString8x8, 48, 183, OFFSET towerReturnBtn, 00FFFFFFh - ret -RenderHellTower3D ENDP - -RenderTowerInGameBadge PROC - cmp tournamentMode, 1 - jne badge_done - cmp engineMode, MODE_HELL_TOWER - je badge_done - cmp engineMode, MODE_WALK - je badge_done - - invoke DrawBoxBorder, 4, 4, 96, 16, 00220404h, 00FF3333h, 1 - invoke DrawString8x8, 8, 8, OFFSET towerHudBadge, 00FFAA55h - invoke FormatNumber, towerStage, OFFSET hudNumBuffer - invoke DrawString8x8, 64, 8, OFFSET hudNumBuffer, 00FFFFFFh - invoke DrawString8x8, 72, 8, OFFSET towerHudOfTen, 00AAAAAAh - -badge_done: - ret -RenderTowerInGameBadge ENDP +; --- hell_tower.inc: Implementation of Hell Tower (10-floor Boss Rush) --- +.code + +InitHellTower3D PROC + mov tournamentMode, 1 + mov towerStage, 1 + mov towerFloorState, TOWER_STATE_BRIEFING + mov towerAnimClock, 0 + call PlayTowerRandomMusic + mov engineMode, MODE_HELL_TOWER + call ClearKeys3D + ret +InitHellTower3D ENDP + +TowerExitToHall PROC + call StopTowerMusic + mov tournamentMode, 0 + mov engineMode, MODE_WALK + call ClearKeys3D + ret +TowerExitToHall ENDP + +TowerLaunchCurrentFloor PROC uses ebx esi edi + mov eax, towerStage + dec eax + cmp eax, 10 + jae @F + jmp launch_valid +@@: + xor eax, eax +launch_valid: + mov edx, towerFloorModes[eax*4] + mov towerCurrentGame, edx + mov towerFloorState, TOWER_STATE_IN_GAME + + ; Launch corresponding game + cmp edx, MODE_COIN + jne @F + call InitCoinGame + mov engineMode, MODE_COIN + jmp launch_done +@@: + cmp edx, MODE_DICE + jne @F + call InitDiceGame + mov engineMode, MODE_DICE + jmp launch_done +@@: + cmp edx, MODE_SKULLS + jne @F + call InitSkullsGame + mov engineMode, MODE_SKULLS + jmp launch_done +@@: + cmp edx, MODE_BLACKJACK + jne @F + call InitNativeBlackjack3D + mov engineMode, MODE_BLACKJACK + jmp launch_done +@@: + cmp edx, MODE_POKER + jne @F + call InitNativePoker3D + mov engineMode, MODE_POKER + jmp launch_done +@@: + cmp edx, MODE_RUSSIAN + jne @F + call InitRussianGame3D + mov engineMode, MODE_RUSSIAN + jmp launch_done +@@: + cmp edx, MODE_ROULETTE + jne @F + call InitNativeWheel3D + mov engineMode, MODE_ROULETTE + jmp launch_done +@@: + cmp edx, MODE_DURAK + jne @F + call InitNativeDurak3D + mov engineMode, MODE_DURAK + jmp launch_done +@@: + cmp edx, MODE_SKILL + jne @F + call InitSkillGame + mov engineMode, MODE_SKILL + jmp launch_done +@@: + cmp edx, MODE_BUCKSHOT + jne launch_done + call InitBuckshot3D + mov engineMode, MODE_BUCKSHOT + +launch_done: + call ClearKeys3D + ret +TowerLaunchCurrentFloor ENDP + +TowerReportRoundOutcome PROC uses eax outcome:DWORD + cmp tournamentMode, 1 + jne report_exit + mov eax, outcome + cmp eax, 1 + jne report_loss + + ; --- Victory --- + cmp towerStage, 10 + jae report_champion + + mov towerFloorState, TOWER_STATE_CLEAR + invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 + mov engineMode, MODE_HELL_TOWER + call ClearKeys3D + ret + +report_champion: + mov towerFloorState, TOWER_STATE_CHAMPION + mov eax, towerPrizeAmount + add bankroll, eax + invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 + call SaveProgress3D + mov engineMode, MODE_HELL_TOWER + call ClearKeys3D + ret + +report_loss: + invoke TriggerCharmLossProtection, 0 + test eax, eax + jz @F + mov towerFloorState, TOWER_STATE_BRIEFING + invoke CopyString3D, OFFSET msgCharmTowerSave, OFFSET flashMessage + mov flashTimer, 140 + mov engineMode, MODE_HELL_TOWER + call ClearKeys3D + ret +@@: + mov towerFloorState, TOWER_STATE_DEFEAT + call StopTowerMusic + invoke PlayCasinoSound3D, OFFSET soundRoundLose, 0, 1 + mov engineMode, MODE_HELL_TOWER + call ClearKeys3D + ret + +report_exit: + ret +TowerReportRoundOutcome ENDP + +HandleHellTowerInput PROC + mov eax, towerFloorState + cmp eax, TOWER_STATE_BRIEFING + je input_briefing + cmp eax, TOWER_STATE_CLEAR + je input_clear + cmp eax, TOWER_STATE_DEFEAT + je input_defeat + cmp eax, TOWER_STATE_CHAMPION + je input_champion + ret + +input_briefing: + invoke Pressed3D, 1Bh ; ESC + test eax, eax + jz @F + call TowerExitToHall + ret +@@: + invoke Pressed3D, 20h ; SPACE + test eax, eax + jnz start_stage + invoke Pressed3D, 0Dh ; ENTER + test eax, eax + jnz start_stage + ret +start_stage: + call TowerLaunchCurrentFloor + ret + +input_clear: + invoke Pressed3D, 1Bh ; ESC + test eax, eax + jz @F + call TowerExitToHall + ret +@@: + invoke Pressed3D, 20h ; SPACE + test eax, eax + jnz advance_stage + invoke Pressed3D, 0Dh ; ENTER + test eax, eax + jnz advance_stage + ret +advance_stage: + inc towerStage + mov towerFloorState, TOWER_STATE_BRIEFING + call ClearKeys3D + ret + +input_defeat: + invoke Pressed3D, 1Bh ; ESC + test eax, eax + jnz exit_to_hall + invoke Pressed3D, 20h ; SPACE + test eax, eax + jnz exit_to_hall + invoke Pressed3D, 0Dh ; ENTER + test eax, eax + jnz exit_to_hall + ret + +input_champion: + invoke Pressed3D, 1Bh ; ESC + test eax, eax + jnz exit_to_hall + invoke Pressed3D, 20h ; SPACE + test eax, eax + jnz exit_to_hall + invoke Pressed3D, 0Dh ; ENTER + test eax, eax + jnz exit_to_hall + ret + +exit_to_hall: + call TowerExitToHall + ret +HandleHellTowerInput ENDP + +RenderHellTower3D PROC uses ebx esi edi + ; 1. Clear background with deep infernal maroon + lea edi, screenBuffer + mov ecx, SCREEN_SIZE + mov eax, 00100202h + rep stosd + + ; 2. Outer and inner border + invoke DrawBoxBorder, 8, 8, 304, 224, 00120202h, 00CC2222h, 2 + invoke DrawBoxBorder, 12, 12, 296, 216, 000C0202h, 00881111h, 1 + + ; 3. Header Banner (Centered: 192px wide, (320 - 192)/2 = 64) + invoke DrawBoxBorder, 18, 16, 284, 20, 00220404h, 00FF4444h, 1 + invoke DrawString8x8, 64, 22, OFFSET towerHeader, 00FFDD66h + + ; 4. Floor Header & Segment Progress Bar + invoke DrawString8x8, 26, 42, OFFSET towerFloorPrefix, 00FF6666h + invoke FormatNumber, towerStage, OFFSET hudNumBuffer + invoke DrawString8x8, 66, 42, OFFSET hudNumBuffer, 00FFFFFFh + invoke DrawString8x8, 74, 42, OFFSET towerOfTen, 00AAAAAAh + invoke DrawCharmsHUD, 130, 42 + + ; Draw 10 stage pips across x = 26 .. 293 + xor esi, esi +draw_pips_loop: + mov eax, esi + imul eax, 27 + add eax, 26 ; x position + mov ebx, eax + + ; Color based on state + mov ecx, towerStage + dec ecx + cmp esi, ecx + jae pip_future + ; Past stage (Cleared): Bright Gold + invoke DrawBoxBorder, ebx, 54, 24, 6, 00DDBB22h, 00FFEE44h, 1 + jmp pip_next +pip_future: + je pip_current + ; Future stage: Dark + invoke DrawBoxBorder, ebx, 54, 24, 6, 002A0808h, 00441111h, 1 + jmp pip_next +pip_current: + ; Current stage: Pulsing Fire Red/Orange + invoke DrawBoxBorder, ebx, 54, 24, 6, 00EE3311h, 00FFAA33h, 1 +pip_next: + inc esi + cmp esi, 10 + jb draw_pips_loop + + ; 5. Specific State Panels + mov eax, towerFloorState + cmp eax, TOWER_STATE_BRIEFING + je render_briefing + cmp eax, TOWER_STATE_CLEAR + je render_clear + cmp eax, TOWER_STATE_DEFEAT + je render_defeat + cmp eax, TOWER_STATE_CHAMPION + je render_champion + ret + +render_briefing: + ; Boss & Game Card + invoke DrawBoxBorder, 20, 66, 280, 58, 001E0404h, 00AA2222h, 1 + invoke DrawString8x8, 28, 72, OFFSET towerEnemyLabel, 00FFAA55h + + mov eax, towerStage + dec eax + mov edx, towerBossNames[eax*4] + invoke DrawString8x8, 76, 72, edx, 00FFFFFFh + + invoke DrawString8x8, 28, 86, OFFSET towerGameLabel, 00FFAA55h + mov eax, towerStage + dec eax + mov edx, towerGameNames[eax*4] + invoke DrawString8x8, 76, 86, edx, 00FFDD66h + + mov eax, towerStage + dec eax + mov edx, towerDescriptions[eax*4] + invoke DrawString8x8, 28, 104, edx, 00CCCCCCh + + ; Rules & Warning (fits cleanly inside 300px boundary) + invoke DrawString8x8, 24, 132, OFFSET towerRuleText, 00FFAA33h + invoke DrawString8x8, 24, 146, OFFSET towerLossWarning, 00EE4444h + + ; Bankroll Display + invoke DrawString8x8, 24, 164, OFFSET textBank3D, 00AAAAAAh + invoke FormatNumber, bankroll, OFFSET hudNumBuffer + invoke DrawString8x8, 76, 164, OFFSET hudNumBuffer, 0066FF66h + + ; Action Buttons (Centered text inside buttons) + invoke DrawBoxBorder, 22, 184, 132, 24, 003D0C0Ch, 00FF4444h, 1 + invoke DrawString8x8, 32, 192, OFFSET towerStartBtn, 00FFFFFFh + + invoke DrawBoxBorder, 164, 184, 132, 24, 00220606h, 00882222h, 1 + invoke DrawString8x8, 178, 192, OFFSET towerEscBtn, 00AAAAAAh + ret + +render_clear: + invoke DrawBoxBorder, 20, 76, 280, 74, 00082208h, 0033CC33h, 2 + invoke DrawString8x8, 48, 90, OFFSET towerClearTitle, 0066FF66h + invoke DrawString8x8, 24, 112, OFFSET towerClearDesc, 00FFFFFFh + + invoke DrawBoxBorder, 50, 174, 220, 26, 00114411h, 0044FF44h, 1 + invoke DrawString8x8, 100, 183, OFFSET towerNextBtn, 00FFFFFFh + ret + +render_defeat: + invoke DrawBoxBorder, 20, 76, 280, 74, 002A0404h, 00FF2222h, 2 + invoke DrawString8x8, 60, 90, OFFSET towerDefeatTitle, 00FF4444h + invoke DrawString8x8, 36, 112, OFFSET towerDefeatDesc, 00FFFFFFh + + invoke DrawBoxBorder, 32, 174, 256, 26, 00441010h, 00FF4444h, 1 + invoke DrawString8x8, 48, 183, OFFSET towerReturnBtn, 00FFFFFFh + ret + +render_champion: + invoke DrawBoxBorder, 18, 70, 284, 86, 00332200h, 00FFD700h, 2 + invoke DrawString8x8, 40, 82, OFFSET towerChampTitle, 00FFE066h + invoke DrawString8x8, 56, 100, OFFSET towerChampSubtitle, 00FFFFFFh + invoke DrawString8x8, 36, 122, OFFSET towerPrizeText, 0066FF66h + + invoke DrawBoxBorder, 32, 174, 256, 26, 00443300h, 00FFCC00h, 1 + invoke DrawString8x8, 48, 183, OFFSET towerReturnBtn, 00FFFFFFh + ret +RenderHellTower3D ENDP + +RenderTowerInGameBadge PROC + cmp tournamentMode, 1 + jne badge_done + cmp engineMode, MODE_HELL_TOWER + je badge_done + cmp engineMode, MODE_WALK + je badge_done + + invoke DrawBoxBorder, 4, 4, 96, 16, 00220404h, 00FF3333h, 1 + invoke DrawString8x8, 8, 8, OFFSET towerHudBadge, 00FFAA55h + invoke FormatNumber, towerStage, OFFSET hudNumBuffer + invoke DrawString8x8, 64, 8, OFFSET hudNumBuffer, 00FFFFFFh + invoke DrawString8x8, 72, 8, OFFSET towerHudOfTen, 00AAAAAAh + +badge_done: + ret +RenderTowerInGameBadge ENDP diff --git a/src_graphics/merchant_data.inc b/src_graphics/merchant_data.inc index 753b222..ecace96 100644 --- a/src_graphics/merchant_data.inc +++ b/src_graphics/merchant_data.inc @@ -1,42 +1,49 @@ -BeginMerchant3D PROTO -HandleMerchant3D PROTO -RenderMerchant3D PROTO -BuyMerchantBack3D PROTO :DWORD -.data -merchantSelected3D dd 0 -merchantTime3D dd 0 -merchantReaction3D dd 1200 -merchantReactionKind3D dd 1 -merchantPreviousFocus3D dd 0 -merchantMessage3D dd 0 -merchantPrices3D dd 0,3000,3000,10000,12000,15000,17000,18000,20000,22000,22000,23000,24000 -merchantGrey3D db 209,197,208,197,193,208,206,0 -merchantBlue3D db 209,192,207,212,200,208,206,194,192,223,32,194,206,203,205,192,0 -merchantRed3D db 193,192,195,208,206,194,219,201,32,202,208,197,209,210,0 -merchantGold3D db 199,206,203,206,210,206,197,32,209,206,203,205,214,197,0 -merchantSkull3D db 215,197,208,197,207,32,200,32,208,206,199,219,0 -merchantClover3D db 202,203,197,194,197,208,0 -merchantArcane3D db 192,208,202,192,205,192,0 -merchantNoir3D db 205,211,192,208,0 -merchantDiamond3D db 192,203,204,192,199,0 -merchantRider3D db 205,192,197,199,196,205,200,202,0 -merchantBee3D db 207,215,197,203,192,0 -merchantFan3D db 194,197,197,208,0 -merchantWeb3D db 207,192,211,210,200,205,192,0 -merchantNames3D dd OFFSET merchantGrey3D,OFFSET merchantBlue3D,OFFSET merchantRed3D - dd OFFSET merchantGold3D,OFFSET merchantSkull3D,OFFSET merchantClover3D - dd OFFSET merchantArcane3D,OFFSET merchantNoir3D,OFFSET merchantDiamond3D - dd OFFSET merchantRider3D,OFFSET merchantBee3D,OFFSET merchantFan3D,OFFSET merchantWeb3D -merchantTitle3D db 209,200,196,206,208,206,194,200,215,0 -merchantStock3D db 208,211,193,192,216,202,200,0 -merchantBuy3D db 202,211,207,200,210,220,0 -merchantOwned3D db 197,209,210,220,0 -merchantEquipped3D db 205,192,196,197,210,206,0 -merchantPoor3D db 204,192,203,206,32,212,200,216,197,202,0 -merchantShopKeys3D db 194,194,197,208,213,47,194,205,200,199,32,32,69,78,84,69,82,58,32,202,211,207,200,210,220,32,32,69,83,67,58,32 - db 213,206,203,203,0 -merchantHello3D db 207,206,209,204,206,210,208,200,44,32,215,210,206,32,197,209,210,220,46,0 -merchantThanks3D db 213,206,208,206,216,200,201,32,194,219,193,206,208,46,0 -merchantArrowUp3D db "^",0 -merchantArrowDown3D db "v",0 -.code +BeginMerchant3D PROTO +HandleMerchant3D PROTO +RenderMerchant3D PROTO +BuyMerchantBack3D PROTO :DWORD +BuyMerchantCharm3D PROTO :DWORD +.data +merchantTab3D dd 0 +merchantCharmSelected3D dd 0 +merchantSelected3D dd 0 +merchantTime3D dd 0 +merchantReaction3D dd 1200 +merchantReactionKind3D dd 1 +merchantPreviousFocus3D dd 0 +merchantMessage3D dd 0 +merchantPrices3D dd 0,3000,3000,10000,12000,15000,17000,18000,20000,22000,22000,23000,24000 +merchantGrey3D db 209,197,208,197,193,208,206,0 +merchantBlue3D db 209,192,207,212,200,208,206,194,192,223,32,194,206,203,205,192,0 +merchantRed3D db 193,192,195,208,206,194,219,201,32,202,208,197,209,210,0 +merchantGold3D db 199,206,203,206,210,206,197,32,209,206,203,205,214,197,0 +merchantSkull3D db 215,197,208,197,207,32,200,32,208,206,199,219,0 +merchantClover3D db 202,203,197,194,197,208,0 +merchantArcane3D db 192,208,202,192,205,192,0 +merchantNoir3D db 205,211,192,208,0 +merchantDiamond3D db 192,203,204,192,199,0 +merchantRider3D db 205,192,197,199,196,205,200,202,0 +merchantBee3D db 207,215,197,203,192,0 +merchantFan3D db 194,197,197,208,0 +merchantWeb3D db 207,192,211,210,200,205,192,0 +merchantNames3D dd OFFSET merchantGrey3D,OFFSET merchantBlue3D,OFFSET merchantRed3D + dd OFFSET merchantGold3D,OFFSET merchantSkull3D,OFFSET merchantClover3D + dd OFFSET merchantArcane3D,OFFSET merchantNoir3D,OFFSET merchantDiamond3D + dd OFFSET merchantRider3D,OFFSET merchantBee3D,OFFSET merchantFan3D,OFFSET merchantWeb3D +merchantTitle3D db 209,200,196,206,208,206,194,200,215,0 +merchantStock3D db 208,211,193,192,216,202,200,0 +merchantBuy3D db 202,211,207,200,210,220,0 +merchantOwned3D db 197,209,210,220,0 +merchantEquipped3D db 205,192,196,197,210,206,0 +merchantPoor3D db 204,192,203,206,32,212,200,216,197,202,0 +merchantShopKeys3D db 194,194,197,208,213,47,194,205,200,199,32,32,69,78,84,69,82,58,32,202,211,207,200,210,220,32,32,69,83,67,58,32 + db 213,206,203,203,0 +merchantTabCharmsLabel db 210,192,203,200,209,204,192,205,219,0 +merchantDollar3D db '$',0 +merchantStockUsesLabel db 199,224,240,58,32,0 +merchantShopKeysWithTabs db 84,65,66,58,32,194,234,235,224,228,234,224,32,32,69,78,84,69,82,58,32,202,243,239,232,242,252,32,32,69,83,67,58,32,213,238,235,235,0 +merchantHello3D db 207,206,209,204,206,210,208,200,44,32,215,210,206,32,197,209,210,220,46,0 +merchantThanks3D db 213,206,208,206,216,200,201,32,194,219,193,206,208,46,0 +merchantArrowUp3D db "^",0 +merchantArrowDown3D db "v",0 +.code diff --git a/src_graphics/merchant_scene.inc b/src_graphics/merchant_scene.inc index 0863adf..9548027 100644 --- a/src_graphics/merchant_scene.inc +++ b/src_graphics/merchant_scene.inc @@ -4,6 +4,8 @@ BeginMerchant3D PROC mov merchantTime3D, 0 mov merchantReaction3D, 1280 mov merchantMessage3D, 0 + mov merchantTab3D, 0 + mov merchantCharmSelected3D, 0 mov eax, selectedBack3D cmp eax, 12 jbe @F @@ -46,6 +48,48 @@ merchant_purchase_done: ret BuyMerchantBack3D ENDP +BuyMerchantCharm3D PROC uses ebx charmIndex:DWORD + mov ebx, charmIndex + cmp ebx, 3 + ja charm_purchase_done + mov eax, charmPrices3D[ebx*4] + cmp bankroll, eax + jb charm_purchase_poor + sub bankroll, eax + mov ecx, charmUsesPack3D[ebx*4] + cmp ebx, 0 + jne @F + add charmCloverUses, ecx + jmp charm_bought +@@: + cmp ebx, 1 + jne @F + add charmHorseshoeUses, ecx + jmp charm_bought +@@: + cmp ebx, 2 + jne @F + add charmSkullUses, ecx + jmp charm_bought +@@: + cmp ebx, 3 + jne charm_bought + add charmDevilUses, ecx +charm_bought: + mov merchantMessage3D, 1 + mov merchantReaction3D, 0 + mov merchantReactionKind3D, 2 + call SaveProgress3D + invoke PlayCasinoSound3D, OFFSET soundCoin, 0, 1 + ret +charm_purchase_poor: + mov merchantMessage3D, 2 + mov merchantReaction3D, 0 + mov merchantReactionKind3D, 1 +charm_purchase_done: + ret +BuyMerchantCharm3D ENDP + HandleMerchant3D PROC uses ebx mov eax, merchantSelected3D cmp eax, merchantPreviousFocus3D @@ -57,6 +101,27 @@ HandleMerchant3D PROC uses ebx mov eax, deltaTime3D add merchantTime3D, eax add merchantReaction3D, eax + + ; TAB (09h), Left Arrow (25h), Right Arrow (27h) toggle tabs + invoke Pressed3D, 09h + test eax, eax + jnz merchant_tab_toggle + invoke Pressed3D, 25h + test eax, eax + jnz merchant_tab_toggle + invoke Pressed3D, 27h + test eax, eax + jz @F +merchant_tab_toggle: + xor merchantTab3D, 1 + mov merchantReaction3D, 0 + mov merchantReactionKind3D, 1 + invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 +@@: + cmp merchantTab3D, 0 + jne handle_charms_vertical + + ; Shirts vertical navigation invoke Pressed3D, 26h test eax, eax jz @F @@ -66,17 +131,53 @@ HandleMerchant3D PROC uses ebx @@: invoke Pressed3D, 28h test eax, eax - jz @F + jz merchant_after_vertical cmp merchantSelected3D, 12 - jae @F + jae merchant_after_vertical inc merchantSelected3D + jmp merchant_after_vertical + +handle_charms_vertical: + ; Charms vertical navigation + invoke Pressed3D, 26h + test eax, eax + jz @F + cmp merchantCharmSelected3D, 0 + je @F + dec merchantCharmSelected3D @@: + invoke Pressed3D, 28h + test eax, eax + jz merchant_after_vertical + cmp merchantCharmSelected3D, 3 + jae merchant_after_vertical + inc merchantCharmSelected3D + +merchant_after_vertical: cmp mouseClick3D, 0 je merchant_enter cmp mouseX3D, 168 jb merchant_enter cmp mouseX3D, 311 jae merchant_enter + + ; Tab header clicks (y 31..46) + cmp mouseY3D, 31 + jb merchant_enter + cmp mouseY3D, 46 + jae merchant_mouse_content + cmp mouseX3D, 235 + jae tab_charms_click + mov merchantTab3D, 0 + ret +tab_charms_click: + mov merchantTab3D, 1 + ret + +merchant_mouse_content: + cmp merchantTab3D, 0 + jne merchant_mouse_charms + cmp mouseY3D, 48 jae merchant_mouse_rows cmp mouseY3D, 34 @@ -114,18 +215,41 @@ merchant_mouse_rows: ja merchant_handle_done mov merchantSelected3D, eax ret + +merchant_mouse_charms: + cmp mouseY3D, 50 + jb merchant_mouse_buy + cmp mouseY3D, 178 + jae merchant_mouse_buy + mov eax, mouseY3D + sub eax, 50 + xor edx, edx + mov ecx, 32 + div ecx + cmp eax, 3 + ja merchant_handle_done + mov merchantCharmSelected3D, eax + ret + merchant_mouse_buy: cmp mouseY3D, 193 jb merchant_handle_done cmp mouseY3D, 211 ja merchant_handle_done jmp merchant_confirm + merchant_enter: invoke Pressed3D, 0Dh test eax, eax jz merchant_handle_done + merchant_confirm: + cmp merchantTab3D, 0 + jne @F invoke BuyMerchantBack3D, merchantSelected3D + ret +@@: + invoke BuyMerchantCharm3D, merchantCharmSelected3D merchant_handle_done: ret HandleMerchant3D ENDP @@ -173,14 +297,45 @@ merchant_draw_pose: mov esi, OFFSET merchantThanks3D @@: invoke DrawString8x8, 6, 209, esi, 00F0D7ABh + + ; Draw card back preview only on Shirts tab + cmp merchantTab3D, 0 + jne @F invoke DrawAnimSprite3D, OFFSET backsPack3D, merchantSelected3D, 24, 282, 68, 96 +@@: invoke DrawBox, 0, 0, 320, 21, 00181D1Bh invoke DrawString8x8, 8, 6, OFFSET merchantTitle3D, 00E9CD9Ah invoke DrawString8x8, 152, 6, OFFSET textBank3D, 00B8D5B3h invoke FormatNumber, bankroll, OFFSET hudNumBuffer invoke DrawString8x8, 203, 6, OFFSET hudNumBuffer, 00FFFFFFh + + ; Right Panel invoke DrawBoxBorder, 166, 31, 147, 187, 00191D1Fh, 009A825Ah, 1 - invoke DrawString8x8, 173, 36, OFFSET merchantStock3D, 00E9CD9Ah + + ; Tab 1: [ ÐÓÁÀØÊÈ ] (x 169..232) + cmp merchantTab3D, 0 + jne @F + invoke DrawBox, 169, 33, 64, 13, 00395046h + invoke DrawString8x8, 171, 36, OFFSET merchantStock3D, 00FFFFFFh + jmp tab2_draw +@@: + invoke DrawString8x8, 171, 36, OFFSET merchantStock3D, 007E8E81h + +tab2_draw: + ; Tab 2: [ ÒÀËÈÑÌÀÍÛ ] (x 236..310) + cmp merchantTab3D, 1 + jne @F + invoke DrawBox, 236, 33, 74, 13, 00395046h + invoke DrawString8x8, 238, 36, OFFSET merchantTabCharmsLabel, 00FFFFFFh + jmp tab_draw_done +@@: + invoke DrawString8x8, 238, 36, OFFSET merchantTabCharmsLabel, 007E8E81h + +tab_draw_done: + cmp merchantTab3D, 0 + jne render_charms_view + + ; --- SHIRTS VIEW --- invoke DrawBoxBorder, 248, 34, 24, 12, 00373F3Bh, 00889985h, 1 invoke DrawString8x8, 256, 36, OFFSET merchantArrowUp3D, 00FFFFFFh invoke DrawBoxBorder, 279, 34, 24, 12, 00373F3Bh, 00889985h, 1 @@ -225,6 +380,66 @@ merchant_item_status: sub eax, start cmp eax, 5 jb merchant_render_row + jmp merchant_render_footer + +render_charms_view: + ; --- CHARMS VIEW --- + xor ebx, ebx + mov rowY, 50 +charm_render_loop: + cmp ebx, 4 + jae merchant_render_footer + + mov ink, 00C1C8C1h + cmp ebx, merchantCharmSelected3D + jne @F + invoke DrawBoxBorder, 168, rowY, 142, 28, 00395046h, 00A7C4AEh, 1 + mov ink, 00FFFFFFh +@@: + ; Line 1: Charm Name + mov eax, rowY + add eax, 2 + invoke DrawString8x8, 171, eax, charmNames3D[ebx*4], ink + + ; Line 2: Charm Description + mov eax, rowY + add eax, 11 + invoke DrawString8x8, 171, eax, charmDescs3D[ebx*4], 0088B8A8h + + ; Line 3: Price and Charges + mov eax, rowY + add eax, 20 + push eax + + invoke DrawString8x8, 171, eax, OFFSET merchantDollar3D, 00C7B58Ah + invoke FormatNumber, charmPrices3D[ebx*4], OFFSET hudNumBuffer + pop eax + push eax + invoke DrawString8x8, 179, eax, OFFSET hudNumBuffer, 00FFFFFFh + + pop eax + push eax + invoke DrawString8x8, 234, eax, OFFSET merchantStockUsesLabel, 00A0A0A0h + + mov edx, charmCloverUses + cmp ebx, 0 + je draw_cur_uses + mov edx, charmHorseshoeUses + cmp ebx, 1 + je draw_cur_uses + mov edx, charmSkullUses + cmp ebx, 2 + je draw_cur_uses + mov edx, charmDevilUses +draw_cur_uses: + invoke FormatNumber, edx, OFFSET hudNumBuffer + pop eax + invoke DrawString8x8, 274, eax, OFFSET hudNumBuffer, 00FFE060h + + add rowY, 31 + inc ebx + jmp charm_render_loop + merchant_render_footer: cmp merchantMessage3D, 2 jne @F @@ -233,6 +448,6 @@ merchant_render_footer: invoke DrawBoxBorder, 171, 194, 136, 17, 003B5949h, 00CBAF73h, 1 invoke DrawString8x8, 194, 199, OFFSET merchantBuy3D, 00FFFFFFh invoke DrawBox, 0, 224, 320, 16, 00181D1Bh - invoke DrawString8x8, 8, 229, OFFSET merchantShopKeys3D, 00C5C7B8h + invoke DrawString8x8, 8, 229, OFFSET merchantShopKeysWithTabs, 00C5C7B8h ret RenderMerchant3D ENDP diff --git a/src_graphics/native_blackjack.inc b/src_graphics/native_blackjack.inc index f91eac1..96d6cba 100644 --- a/src_graphics/native_blackjack.inc +++ b/src_graphics/native_blackjack.inc @@ -1,342 +1,345 @@ -; Single 52-card deck; dealer stands on all 17s, blackjack pays 3:2. -InitNativeBlackjack3D PROC - mov cardExitActive3D, 0 - call LoadCardTableAssets3D - mov cbState3D, CB_IDLE - mov cbPlayerCount3D, 0 - mov cbDealerCount3D, 0 - mov cbStake3D, 0 - mov cbError3D, 0 - call InitBJParty3D - call ClearKeys3D - ret -InitNativeBlackjack3D ENDP - -NativeBJScore3D PROC uses ebx esi edi hand:DWORD,count:DWORD - mov esi, hand - xor edi, edi - xor ebx, ebx - xor ecx, ecx -bj_score_card: - cmp ecx, count - jae bj_score_soft - mov eax, [esi+ecx*4] - push ecx - xor edx, edx - mov ecx, 13 - div ecx - pop ecx - inc ecx - cmp edx, 12 - je bj_score_ace - add edx, 2 - cmp edx, 10 - jbe @F - mov edx, 10 -@@: - add edi, edx - jmp bj_score_card -bj_score_ace: - add edi, 11 - inc ebx - jmp bj_score_card -bj_score_soft: - cmp edi, 21 - jbe bj_score_done - test ebx, ebx - jz bj_score_done - sub edi, 10 - dec ebx - jmp bj_score_soft -bj_score_done: - mov eax, edi - ret -NativeBJScore3D ENDP - -NativeBJSettle3D PROC result:DWORD - cmp cbState3D, CB_RESULT - je bj_settle_done - mov cbState3D, CB_RESULT - mov cbVisible3D, 1 - mov eax, result - mov cbOutcome3D, eax - call ResolveBJParty3D - mov eax, result - cmp eax, 1 - je bj_settle_loss - mov eax, cbStake3D - cmp result, 2 - je bj_settle_credit - shl eax, 1 - cmp result, 3 - jne bj_settle_credit - mov edx, cbStake3D - shr edx, 1 - add eax, edx -bj_settle_credit: - add bankroll, eax - invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 - jmp bj_settle_save -bj_settle_loss: - invoke PlayCasinoSound3D, OFFSET soundRoundLose, 0, 1 -bj_settle_save: - call ClearKeys3D - xor eax,eax - cmp cbOutcome3D,0 - sete al - cmp cbOutcome3D,3 - jne @F - mov eax,1 -@@: - invoke NpcRecordRound3D,1,eax - call SaveProgress3D -bj_settle_done: - ret -NativeBJSettle3D ENDP - -StartNativeBlackjack3D PROC - cmp cbState3D, CB_IDLE - je @F - cmp cbState3D, CB_RESULT - jne bj_start_done -@@: - mov eax, cbBet3D - cmp bankroll, eax - jb bj_start_empty - sub bankroll, eax - mov cbStake3D, eax - mov cbError3D, 0 - mov cbDouble3D, 0 - mov cbEarlyOutcome3D, -1 - mov cbBotsSettled3D, 0 - mov cbInitialFlights3D, 4 - mov cbVisible3D, 0 - mov cbPlayerCount3D, 2 - mov cbDealerCount3D, 2 - mov cbCursor3D, 4 - invoke ShuffleCards3D, OFFSET cbDeck3D - mov eax, cbDeck3D[0] - mov cbPlayer3D[0], eax - mov eax, cbDeck3D[4] - mov cbDealer3D[0], eax - mov eax, cbDeck3D[8] - mov cbPlayer3D[4], eax - mov eax, cbDeck3D[12] - mov cbDealer3D[4], eax - cmp cbBotCount3D, 0 - je @F - call DealBJParty3D -@@: - invoke NativeBJScore3D, OFFSET cbPlayer3D, 2 - mov cbPlayerScore3D, eax - invoke NativeBJScore3D, OFFSET cbDealer3D, 2 - mov cbDealerScore3D, eax - mov cbTimer3D, 0 - mov cbState3D, CB_DEAL - call ClearKeys3D - invoke PlayCasinoSound3D, OFFSET soundCards, 0, 1 - call SaveProgress3D -bj_start_done: - ret -bj_start_empty: - mov cbError3D, 1 - ret -StartNativeBlackjack3D ENDP - -NativeBJHit3D PROC uses ebx - cmp cbState3D, CB_PLAYER - jne bj_hit_done - cmp cbPlayerCount3D, 12 - jae bj_hit_done - cmp cbCursor3D, 52 - jae bj_hit_done - mov ebx, cbCursor3D - mov eax, cbDeck3D[ebx*4] - mov cbCard3D, eax - inc cbCursor3D - mov cbTimer3D, 0 - mov cbState3D, CB_HIT - call ClearKeys3D - invoke PlayCasinoSound3D, OFFSET soundCards, 0, 1 -bj_hit_done: - ret -NativeBJHit3D ENDP - -HandleNativeBlackjack3D PROC uses ebx - call HandleCardExit3D - test eax, eax - jnz bj_input_done - call BJPartyInput3D - invoke CardTableMouse3D, MODE_BLACKJACK - cmp cardExitActive3D, 0 - jne bj_input_done - cmp engineMode, MODE_BLACKJACK - jne bj_input_done - cmp cbState3D, CB_IDLE - je bj_ready_input - cmp cbState3D, CB_RESULT - je bj_ready_input - cmp cbState3D, CB_PLAYER - je bj_player_input - cmp cbState3D, CB_BOTS - jne @F - call UpdateBJParty3D - ret -@@: - mov eax, deltaTime3D - add cbTimer3D, eax - cmp cbState3D, CB_DEAL - jne bj_animate_hit - mov eax, cbInitialFlights3D - imul eax, TABLE_FLIGHT_MS - cmp cbTimer3D, eax - jb bj_input_done - cmp cbDealerScore3D, 21 - jne bj_player_natural - mov eax, 1 - cmp cbPlayerScore3D, 21 - jne @F - mov eax, 2 -@@: - invoke NativeBJSettle3D, eax - ret -bj_player_natural: - cmp cbPlayerScore3D, 21 - jne bj_begin_player - invoke FinishBJPlayer3D, 3 - ret -bj_begin_player: - mov cbState3D, CB_PLAYER - call ClearKeys3D - ret -bj_animate_hit: - cmp cbState3D, CB_HIT - jne bj_animate_dealer - cmp cbTimer3D, TABLE_FLIGHT_MS - jb bj_input_done - mov ebx, cbPlayerCount3D - mov eax, cbCard3D - mov cbPlayer3D[ebx*4], eax - inc cbPlayerCount3D - invoke NativeBJScore3D, OFFSET cbPlayer3D, cbPlayerCount3D - mov cbPlayerScore3D, eax - cmp eax, 21 - ja bj_player_bust - je bj_begin_dealer - cmp cbDouble3D, 0 - jne bj_begin_dealer - jmp bj_begin_player -bj_player_bust: - invoke FinishBJPlayer3D, 1 - ret -bj_animate_dealer: - cmp cbTimer3D, 600 - jb bj_input_done - cmp cbDealerScore3D, 17 - jae bj_compare_hands - cmp cbDealerCount3D, 12 - jae bj_compare_hands - cmp cbCursor3D, 52 - jae bj_compare_hands - mov ebx, cbCursor3D - mov eax, cbDeck3D[ebx*4] - inc cbCursor3D - mov ebx, cbDealerCount3D - mov cbDealer3D[ebx*4], eax - inc cbDealerCount3D - invoke NativeBJScore3D, OFFSET cbDealer3D, cbDealerCount3D - mov cbDealerScore3D, eax - mov cbTimer3D, 0 - invoke PlayCasinoSound3D, OFFSET soundCards, 0, 1 - ret -bj_compare_hands: - cmp cbEarlyOutcome3D, -1 - je @F - invoke NativeBJSettle3D, cbEarlyOutcome3D - ret -@@: - mov eax, cbDealerScore3D - cmp eax, 21 - ja bj_player_win - cmp eax, cbPlayerScore3D - jb bj_player_win - je bj_player_push - invoke NativeBJSettle3D, 1 - ret -bj_player_win: - invoke NativeBJSettle3D, 0 - ret -bj_player_push: - invoke NativeBJSettle3D, 2 - ret -bj_player_input: - invoke Pressed3D, 44h - test eax, eax - jz @F - cmp cbPlayerCount3D, 2 - jne bj_input_done - mov eax, cbStake3D - cmp bankroll, eax - jb bj_input_done - sub bankroll, eax - add cbStake3D, eax - mov cbDouble3D, 1 - call SaveProgress3D - call NativeBJHit3D - ret -@@: - invoke Pressed3D, 48h - test eax, eax - jz @F - call NativeBJHit3D - ret -@@: - invoke Pressed3D, 53h - test eax, eax - jz bj_input_done -bj_begin_dealer: - invoke FinishBJPlayer3D, -1 - ret -bj_ready_input: - invoke Pressed3D, 26h - test eax, eax - jz @F - cmp cbBet3D, 10000 - jae @F - add cbBet3D, 100 -@@: - invoke Pressed3D, 28h - test eax, eax - jz @F - cmp cbBet3D, 100 - jbe @F - sub cbBet3D, 100 -@@: - cmp tournamentMode, 1 - jne bj_regular_start - cmp cbState3D, CB_RESULT - jne bj_regular_start - invoke Pressed3D, 20h - test eax, eax - jnz bj_tourney_report - invoke Pressed3D, 0Dh - test eax, eax - jnz bj_tourney_report - ret -bj_tourney_report: - cmp cbOutcome3D, 1 - je bj_tourney_loss - invoke TowerReportRoundOutcome, 1 - ret -bj_tourney_loss: - invoke TowerReportRoundOutcome, 2 - ret -bj_regular_start: - invoke Pressed3D, 20h - test eax, eax - jz bj_input_done - call StartNativeBlackjack3D -bj_input_done: - ret -HandleNativeBlackjack3D ENDP -include src_graphics\native_blackjack_party.inc +; Single 52-card deck; dealer stands on all 17s, blackjack pays 3:2. +InitNativeBlackjack3D PROC + mov cardExitActive3D, 0 + call LoadCardTableAssets3D + mov cbState3D, CB_IDLE + mov cbPlayerCount3D, 0 + mov cbDealerCount3D, 0 + mov cbStake3D, 0 + mov cbError3D, 0 + call InitBJParty3D + call ClearKeys3D + ret +InitNativeBlackjack3D ENDP + +NativeBJScore3D PROC uses ebx esi edi hand:DWORD,count:DWORD + mov esi, hand + xor edi, edi + xor ebx, ebx + xor ecx, ecx +bj_score_card: + cmp ecx, count + jae bj_score_soft + mov eax, [esi+ecx*4] + push ecx + xor edx, edx + mov ecx, 13 + div ecx + pop ecx + inc ecx + cmp edx, 12 + je bj_score_ace + add edx, 2 + cmp edx, 10 + jbe @F + mov edx, 10 +@@: + add edi, edx + jmp bj_score_card +bj_score_ace: + add edi, 11 + inc ebx + jmp bj_score_card +bj_score_soft: + cmp edi, 21 + jbe bj_score_done + test ebx, ebx + jz bj_score_done + sub edi, 10 + dec ebx + jmp bj_score_soft +bj_score_done: + mov eax, edi + ret +NativeBJScore3D ENDP + +NativeBJSettle3D PROC result:DWORD + cmp cbState3D, CB_RESULT + je bj_settle_done + mov cbState3D, CB_RESULT + mov cbVisible3D, 1 + mov eax, result + mov cbOutcome3D, eax + call ResolveBJParty3D + mov eax, result + cmp eax, 1 + je bj_settle_loss + mov eax, cbStake3D + cmp result, 2 + je bj_settle_credit + shl eax, 1 + cmp result, 3 + jne bj_settle_credit + mov edx, cbStake3D + shr edx, 1 + add eax, edx +bj_settle_credit: + add bankroll, eax + invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 + jmp bj_settle_save +bj_settle_loss: + invoke TriggerCharmLossProtection, cbStake3D + test eax, eax + jnz bj_settle_save + invoke PlayCasinoSound3D, OFFSET soundRoundLose, 0, 1 +bj_settle_save: + call ClearKeys3D + xor eax,eax + cmp cbOutcome3D,0 + sete al + cmp cbOutcome3D,3 + jne @F + mov eax,1 +@@: + invoke NpcRecordRound3D,1,eax + call SaveProgress3D +bj_settle_done: + ret +NativeBJSettle3D ENDP + +StartNativeBlackjack3D PROC + cmp cbState3D, CB_IDLE + je @F + cmp cbState3D, CB_RESULT + jne bj_start_done +@@: + mov eax, cbBet3D + cmp bankroll, eax + jb bj_start_empty + sub bankroll, eax + mov cbStake3D, eax + mov cbError3D, 0 + mov cbDouble3D, 0 + mov cbEarlyOutcome3D, -1 + mov cbBotsSettled3D, 0 + mov cbInitialFlights3D, 4 + mov cbVisible3D, 0 + mov cbPlayerCount3D, 2 + mov cbDealerCount3D, 2 + mov cbCursor3D, 4 + invoke ShuffleCards3D, OFFSET cbDeck3D + mov eax, cbDeck3D[0] + mov cbPlayer3D[0], eax + mov eax, cbDeck3D[4] + mov cbDealer3D[0], eax + mov eax, cbDeck3D[8] + mov cbPlayer3D[4], eax + mov eax, cbDeck3D[12] + mov cbDealer3D[4], eax + cmp cbBotCount3D, 0 + je @F + call DealBJParty3D +@@: + invoke NativeBJScore3D, OFFSET cbPlayer3D, 2 + mov cbPlayerScore3D, eax + invoke NativeBJScore3D, OFFSET cbDealer3D, 2 + mov cbDealerScore3D, eax + mov cbTimer3D, 0 + mov cbState3D, CB_DEAL + call ClearKeys3D + invoke PlayCasinoSound3D, OFFSET soundCards, 0, 1 + call SaveProgress3D +bj_start_done: + ret +bj_start_empty: + mov cbError3D, 1 + ret +StartNativeBlackjack3D ENDP + +NativeBJHit3D PROC uses ebx + cmp cbState3D, CB_PLAYER + jne bj_hit_done + cmp cbPlayerCount3D, 12 + jae bj_hit_done + cmp cbCursor3D, 52 + jae bj_hit_done + mov ebx, cbCursor3D + mov eax, cbDeck3D[ebx*4] + mov cbCard3D, eax + inc cbCursor3D + mov cbTimer3D, 0 + mov cbState3D, CB_HIT + call ClearKeys3D + invoke PlayCasinoSound3D, OFFSET soundCards, 0, 1 +bj_hit_done: + ret +NativeBJHit3D ENDP + +HandleNativeBlackjack3D PROC uses ebx + call HandleCardExit3D + test eax, eax + jnz bj_input_done + call BJPartyInput3D + invoke CardTableMouse3D, MODE_BLACKJACK + cmp cardExitActive3D, 0 + jne bj_input_done + cmp engineMode, MODE_BLACKJACK + jne bj_input_done + cmp cbState3D, CB_IDLE + je bj_ready_input + cmp cbState3D, CB_RESULT + je bj_ready_input + cmp cbState3D, CB_PLAYER + je bj_player_input + cmp cbState3D, CB_BOTS + jne @F + call UpdateBJParty3D + ret +@@: + mov eax, deltaTime3D + add cbTimer3D, eax + cmp cbState3D, CB_DEAL + jne bj_animate_hit + mov eax, cbInitialFlights3D + imul eax, TABLE_FLIGHT_MS + cmp cbTimer3D, eax + jb bj_input_done + cmp cbDealerScore3D, 21 + jne bj_player_natural + mov eax, 1 + cmp cbPlayerScore3D, 21 + jne @F + mov eax, 2 +@@: + invoke NativeBJSettle3D, eax + ret +bj_player_natural: + cmp cbPlayerScore3D, 21 + jne bj_begin_player + invoke FinishBJPlayer3D, 3 + ret +bj_begin_player: + mov cbState3D, CB_PLAYER + call ClearKeys3D + ret +bj_animate_hit: + cmp cbState3D, CB_HIT + jne bj_animate_dealer + cmp cbTimer3D, TABLE_FLIGHT_MS + jb bj_input_done + mov ebx, cbPlayerCount3D + mov eax, cbCard3D + mov cbPlayer3D[ebx*4], eax + inc cbPlayerCount3D + invoke NativeBJScore3D, OFFSET cbPlayer3D, cbPlayerCount3D + mov cbPlayerScore3D, eax + cmp eax, 21 + ja bj_player_bust + je bj_begin_dealer + cmp cbDouble3D, 0 + jne bj_begin_dealer + jmp bj_begin_player +bj_player_bust: + invoke FinishBJPlayer3D, 1 + ret +bj_animate_dealer: + cmp cbTimer3D, 600 + jb bj_input_done + cmp cbDealerScore3D, 17 + jae bj_compare_hands + cmp cbDealerCount3D, 12 + jae bj_compare_hands + cmp cbCursor3D, 52 + jae bj_compare_hands + mov ebx, cbCursor3D + mov eax, cbDeck3D[ebx*4] + inc cbCursor3D + mov ebx, cbDealerCount3D + mov cbDealer3D[ebx*4], eax + inc cbDealerCount3D + invoke NativeBJScore3D, OFFSET cbDealer3D, cbDealerCount3D + mov cbDealerScore3D, eax + mov cbTimer3D, 0 + invoke PlayCasinoSound3D, OFFSET soundCards, 0, 1 + ret +bj_compare_hands: + cmp cbEarlyOutcome3D, -1 + je @F + invoke NativeBJSettle3D, cbEarlyOutcome3D + ret +@@: + mov eax, cbDealerScore3D + cmp eax, 21 + ja bj_player_win + cmp eax, cbPlayerScore3D + jb bj_player_win + je bj_player_push + invoke NativeBJSettle3D, 1 + ret +bj_player_win: + invoke NativeBJSettle3D, 0 + ret +bj_player_push: + invoke NativeBJSettle3D, 2 + ret +bj_player_input: + invoke Pressed3D, 44h + test eax, eax + jz @F + cmp cbPlayerCount3D, 2 + jne bj_input_done + mov eax, cbStake3D + cmp bankroll, eax + jb bj_input_done + sub bankroll, eax + add cbStake3D, eax + mov cbDouble3D, 1 + call SaveProgress3D + call NativeBJHit3D + ret +@@: + invoke Pressed3D, 48h + test eax, eax + jz @F + call NativeBJHit3D + ret +@@: + invoke Pressed3D, 53h + test eax, eax + jz bj_input_done +bj_begin_dealer: + invoke FinishBJPlayer3D, -1 + ret +bj_ready_input: + invoke Pressed3D, 26h + test eax, eax + jz @F + cmp cbBet3D, 10000 + jae @F + add cbBet3D, 100 +@@: + invoke Pressed3D, 28h + test eax, eax + jz @F + cmp cbBet3D, 100 + jbe @F + sub cbBet3D, 100 +@@: + cmp tournamentMode, 1 + jne bj_regular_start + cmp cbState3D, CB_RESULT + jne bj_regular_start + invoke Pressed3D, 20h + test eax, eax + jnz bj_tourney_report + invoke Pressed3D, 0Dh + test eax, eax + jnz bj_tourney_report + ret +bj_tourney_report: + cmp cbOutcome3D, 1 + je bj_tourney_loss + invoke TowerReportRoundOutcome, 1 + ret +bj_tourney_loss: + invoke TowerReportRoundOutcome, 2 + ret +bj_regular_start: + invoke Pressed3D, 20h + test eax, eax + jz bj_input_done + call StartNativeBlackjack3D +bj_input_done: + ret +HandleNativeBlackjack3D ENDP +include src_graphics\native_blackjack_party.inc diff --git a/src_graphics/native_clover.inc b/src_graphics/native_clover.inc index 303b19c..db3f866 100644 --- a/src_graphics/native_clover.inc +++ b/src_graphics/native_clover.inc @@ -1,685 +1,689 @@ -FreeNativeClover3D PROC - invoke FreeAnimPack3D,OFFSET clpCabinet3D - invoke FreeAnimPack3D,OFFSET clpSymbols3D - ret -FreeNativeClover3D ENDP - -InitNativeClover3D PROC - invoke LoadAnimPack3D,OFFSET clpCabinet3D,OFFSET clpCabinetPath3D - test eax,eax - jz clp_init_fail - cmp clpCabinet3D.imageWidth,640 - jne clp_init_fail - cmp clpCabinet3D.height,480 - jne clp_init_fail - cmp clpCabinet3D.frames,1 - jne clp_init_fail - invoke LoadAnimPack3D,OFFSET clpSymbols3D,OFFSET clpSymbolsPath3D - test eax,eax - jz clp_init_fail - cmp clpSymbols3D.imageWidth,CLP_CELL - jne clp_init_fail - cmp clpSymbols3D.height,CLP_CELL - jne clp_init_fail - cmp clpSymbols3D.frames,7 - jne clp_init_fail - mov clpState3D,SLOT_READY - mov clpTimer3D,0 - mov clpStake3D,0 - mov clpGross3D,0 - mov clpTotal3D,0 - mov clpCount3D,0 - mov clpWinMask3D,0 - mov clpSelected3D,0 - mov clpPaytable3D,0 - mov clpLeave3D,0 - mov clpError3D,0 - mov clpBet3D,50 - mov clpBetIndex3D,1 - mov paused3D,0 - mov cardExitActive3D,0 - call ClearKeys3D - mov eax,1 - ret -clp_init_fail: - call FreeNativeClover3D - xor eax,eax - ret -InitNativeClover3D ENDP - -; Tape contents and final board are frozen at the single stake debit. -StartNativeClover3D PROC uses ebx esi edi - cmp clpState3D,SLOT_SPIN - je clp_start_done - cmp clpPaytable3D,0 - jne clp_start_done - cmp clpCabinet3D.pixels,0 - je clp_start_done - cmp clpSymbols3D.pixels,0 - je clp_start_done - mov eax,clpBet3D - test eax,eax - jz clp_start_done - cmp eax,10000 - ja clp_start_done - cmp eax,bankroll - ja clp_start_money - sub bankroll,eax - mov clpStake3D,eax - mov clpState3D,SLOT_SPIN - mov clpTimer3D,0 - mov clpGross3D,0 - mov clpCount3D,0 - mov clpTotal3D,0 - mov clpWinMask3D,0 - mov clpSelected3D,0 - mov clpLeave3D,0 - mov clpError3D,0 - xor esi,esi -clp_start_column: - mov ebx,esi - shl ebx,8 - xor edi,edi -clp_start_tape: - invoke RandomRange3D,7 - mov clpTape3D[ebx+edi*4],eax - inc edi - cmp edi,64 - jb clp_start_tape - xor edi,edi -clp_start_rows: - mov ecx,edi - imul ecx,5 - add ecx,esi - mov eax,clpGrid3D[ecx*4] - mov clpTape3D[ebx+edi*4],eax - invoke RandomRange3D,7 - mov clpGrid3D[ecx*4],eax - mov edx,clpSteps3D[esi*4] - add edx,edi - mov clpTape3D[ebx+edx*4],eax - inc edi - cmp edi,3 - jb clp_start_rows - inc esi - cmp esi,5 - jb clp_start_column - call SaveProgress3D - invoke PlayCasinoSound3D,OFFSET soundSlotSpin,0,1 -clp_start_done: - ret -clp_start_money: - mov clpError3D,1 - ret -StartNativeClover3D ENDP - -; Reuse the original pure assembly evaluator, never the console game or payer. -CloverEvaluate3D PROC uses ebx esi edi - mov clpTotal3D,0 - mov clpCount3D,0 - mov clpWinMask3D,0 - mov clpJackpot3D,0 - xor esi,esi -clp_eval_validate: - cmp clpGrid3D[esi*4],6 - ja clp_eval_done - inc esi - cmp esi,15 - jb clp_eval_validate - lea esi,clpGrid3D - lea edi,slotGrid - mov ecx,15 - rep movsd - call EvaluateSlotCombos - mov eax,slotBestMultiplier - mov clpTotal3D,eax - mov eax,slotWinMask - mov clpWinMask3D,eax - mov eax,slotJackpotHit - mov clpJackpot3D,eax - mov eax,slotComboCount - mov clpCount3D,eax - lea esi,slotComboNames - lea edi,clpNames3D - mov ecx,eax - rep movsd - lea esi,slotComboMults - lea edi,clpMults3D - mov ecx,clpCount3D - rep movsd - lea esi,slotComboMasks - lea edi,clpMasks3D - mov ecx,clpCount3D - rep movsd -clp_eval_done: - xor eax,eax - ret -CloverEvaluate3D ENDP - -SettleNativeClover3D PROC - cmp clpState3D,SLOT_SPIN - jne clp_settle_done - call CloverEvaluate3D - mov eax,clpTotal3D - mul clpStake3D - mov ecx,1000000000 - sub ecx,bankroll - cmp eax,ecx - jbe @F - mov eax,ecx -@@: - mov clpGross3D,eax - add bankroll,eax - mov clpState3D,SLOT_RESULT - mov clpTimer3D,3400 - xor eax,eax - mov ecx,clpGross3D - cmp ecx,clpStake3D - seta al - invoke NpcRecordRound3D,4,eax - call SaveProgress3D - mov eax,clpGross3D - cmp eax,clpStake3D - jb clp_settle_loss - jne @F - invoke PlayCasinoSound3D,0,0,0 - jmp clp_settle_leave -@@: - invoke PlayCasinoSound3D,OFFSET soundRoundWin,0,1 - jmp clp_settle_leave -clp_settle_loss: - invoke PlayCasinoSound3D,OFFSET soundRoundLose,0,1 -clp_settle_leave: - cmp clpLeave3D,0 - je clp_settle_done - call CloverEscape3D -clp_settle_done: - ret -SettleNativeClover3D ENDP - -CloverEscape3D PROC - mov paused3D,0 - cmp clpPaytable3D,0 - je @F - mov clpPaytable3D,0 - call ClearKeys3D - ret -@@: - cmp clpState3D,SLOT_SPIN - jne clp_escape_hall - mov clpLeave3D,1 - call ClearKeys3D - ret -clp_escape_hall: - mov clpLeave3D,0 - mov engineMode,MODE_WALK - call ClearKeys3D - invoke PlayCasinoSound3D,0,0,0 - ret -CloverEscape3D ENDP - -CloverReelPosition3D PROC uses ebx index:DWORD - mov ebx,index - xor eax,eax - cmp ebx,4 - ja clp_pos_done - cmp clpState3D,SLOT_SPIN - jne clp_pos_end - mov eax,clpTimer3D - cmp eax,clpDurations3D[ebx*4] - jae clp_pos_end - shl eax,10 - xor edx,edx - div clpDurations3D[ebx*4] - mov ecx,2048 - sub ecx,eax - imul eax,ecx - mov ecx,clpSteps3D[ebx*4] - imul ecx,CLP_CELL - mul ecx - shrd eax,edx,20 - ret -clp_pos_end: - mov eax,clpSteps3D[ebx*4] - imul eax,CLP_CELL -clp_pos_done: - ret -CloverReelPosition3D ENDP - -HandleNativeClover3D PROC uses ebx - cmp mouseClick3D,0 - je clp_handle_tick - mov mouseClick3D,0 - mov eax,mouseY3D - cmp eax,3 - jb clp_handle_tick - cmp eax,17 - jae clp_handle_mouse_controls - cmp mouseX3D,252 - jb clp_handle_tick - cmp mouseX3D,312 - jae clp_handle_tick - call CloverEscape3D - cmp clpState3D,SLOT_SPIN - je clp_handle_tick - ret -clp_handle_mouse_controls: - cmp clpState3D,SLOT_SPIN - je clp_handle_tick - cmp clpPaytable3D,0 - je @F - cmp eax,202 - jb clp_handle_tick - cmp eax,220 - jae clp_handle_tick - cmp mouseX3D,112 - jb clp_handle_tick - cmp mouseX3D,208 - jae clp_handle_tick - mov clpPaytable3D,0 - ret -@@: - cmp eax,170 - jb clp_handle_tick - cmp eax,185 - jae clp_handle_mouse_footer - cmp mouseX3D,232 - jb clp_handle_tick - cmp mouseX3D,250 - jb clp_handle_previous - cmp mouseX3D,292 - jb clp_handle_tick - cmp mouseX3D,310 - jb clp_handle_next - jmp clp_handle_tick -clp_handle_mouse_footer: - cmp eax,222 - jb clp_handle_tick - cmp eax,238 - jae clp_handle_tick - mov eax,mouseX3D - cmp eax,11 - jb clp_handle_tick - cmp eax,29 - jb clp_handle_down - cmp eax,35 - jb clp_handle_tick - cmp eax,53 - jb clp_handle_up - cmp eax,120 - jb clp_handle_tick - cmp eax,190 - jb clp_handle_start - cmp eax,202 - jb clp_handle_tick - cmp eax,272 - jb clp_handle_paytable -clp_handle_tick: - cmp clpState3D,SLOT_SPIN - jne clp_handle_keys - mov eax,deltaTime3D - cmp eax,250 - jbe @F - mov eax,250 -@@: - add clpTimer3D,eax - cmp clpTimer3D,3400 - jb clp_handle_done - call SettleNativeClover3D - ret -clp_handle_keys: - invoke Pressed3D,50h - test eax,eax - jnz clp_handle_paytable - cmp clpPaytable3D,0 - je clp_handle_game_keys - invoke Pressed3D,20h - test eax,eax - jnz clp_handle_paytable - invoke Pressed3D,0Dh - test eax,eax - jnz clp_handle_paytable - ret -clp_handle_game_keys: - invoke Pressed3D,25h - test eax,eax - jnz clp_handle_previous - invoke Pressed3D,27h - test eax,eax - jnz clp_handle_next - invoke Pressed3D,57h - test eax,eax - jnz clp_handle_up - invoke Pressed3D,26h - test eax,eax - jnz clp_handle_up - invoke Pressed3D,53h - test eax,eax - jnz clp_handle_down - invoke Pressed3D,28h - test eax,eax - jnz clp_handle_down - invoke Pressed3D,20h - test eax,eax - jnz clp_handle_start - invoke Pressed3D,0Dh - test eax,eax - jz clp_handle_done -clp_handle_start: - call StartNativeClover3D - ret -clp_handle_paytable: - xor clpPaytable3D,1 - ret -clp_handle_previous: - cmp clpCount3D,0 - je clp_handle_done - cmp clpSelected3D,0 - jne @F - mov eax,clpCount3D - mov clpSelected3D,eax -@@: - dec clpSelected3D - ret -clp_handle_next: - cmp clpCount3D,0 - je clp_handle_done - inc clpSelected3D - mov eax,clpSelected3D - cmp eax,clpCount3D - jb clp_handle_done - mov clpSelected3D,0 - ret -clp_handle_up: - cmp clpBetIndex3D,6 - jae clp_handle_done - inc clpBetIndex3D - jmp clp_handle_bet -clp_handle_down: - cmp clpBetIndex3D,0 - je clp_handle_done - dec clpBetIndex3D -clp_handle_bet: - mov ecx,clpBetIndex3D - mov eax,slotBetValues3D[ecx*4] - mov clpBet3D,eax - mov clpError3D,0 -clp_handle_done: - ret -HandleNativeClover3D ENDP - -DrawCloverSymbol3D PROC uses ebx esi edi symbol:DWORD,x:DWORD,y:DWORD - local row:DWORD,lastRow:DWORD,source:DWORD - cmp symbol,6 - ja clp_symbol_done - mov eax,clpSymbols3D.pixels - test eax,eax - jz clp_symbol_done - mov ecx,symbol - imul ecx,CLP_CELL*CLP_CELL*4 - add eax,ecx - mov source,eax - mov eax,y - cmp eax,CLP_TOP - jge @F - mov eax,CLP_TOP -@@: - mov row,eax - mov eax,y - add eax,CLP_CELL - cmp eax,CLP_BOTTOM - jle @F - mov eax,CLP_BOTTOM -@@: - mov lastRow,eax -clp_symbol_row: - mov eax,row - cmp eax,lastRow - jge clp_symbol_done - mov ecx,eax - sub ecx,y - imul ecx,CLP_CELL*4 - mov esi,source - add esi,ecx - imul eax,640*4 - mov ecx,x - lea edi,screenBuffer[eax+ecx*4] - mov ecx,CLP_CELL -clp_symbol_column: - lodsd - test eax,0FF000000h - jz @F - and eax,00FFFFFFh - mov [edi],eax -@@: - add edi,4 - dec ecx - jnz clp_symbol_column - inc row - jmp clp_symbol_row -clp_symbol_done: - ret -DrawCloverSymbol3D ENDP - -DrawCloverReel3D PROC uses ebx esi edi index:DWORD - local symbolY:DWORD,baseStop:DWORD,columnX:DWORD - mov ebx,index - mov eax,clpColumns3D[ebx*4] - mov columnX,eax - cmp clpState3D,SLOT_SPIN - jne clp_reel_static - invoke CloverReelPosition3D,ebx - xor edx,edx - mov ecx,CLP_CELL - div ecx - mov baseStop,eax - mov eax,CLP_TOP - sub eax,edx - mov symbolY,eax - shl ebx,8 - xor esi,esi -clp_reel_tape: - mov ecx,baseStop - add ecx,esi - mov eax,clpTape3D[ebx+ecx*4] - invoke DrawCloverSymbol3D,eax,columnX,symbolY - add symbolY,CLP_CELL - inc esi - cmp esi,4 - jb clp_reel_tape - ret -clp_reel_static: - mov symbolY,CLP_TOP - xor esi,esi -clp_reel_rows: - mov ecx,esi - imul ecx,5 - add ecx,ebx - mov eax,clpGrid3D[ecx*4] - invoke DrawCloverSymbol3D,eax,columnX,symbolY - add symbolY,CLP_CELL - inc esi - cmp esi,3 - jb clp_reel_rows - ret -DrawCloverReel3D ENDP - -CloverComboText3D PROC index:DWORD - mov ecx,index - cmp ecx,clpCount3D - jae clp_combo_none - mov edx,clpNames3D[ecx*4] - xor ecx,ecx -clp_combo_lookup: - cmp edx,clpLegacyNames3D[ecx*4] - je clp_combo_found - inc ecx - cmp ecx,11 - jb clp_combo_lookup -clp_combo_none: - mov eax,OFFSET clpNoCombo3D - ret -clp_combo_found: - mov eax,clpShapeNames3D[ecx*4] - ret -CloverComboText3D ENDP - -RenderNativeClover3D PROC uses ebx esi edi - local cellX:DWORD,cellY:DWORD,selectedMask:DWORD - mov esi,clpCabinet3D.pixels - test esi,esi - jz clp_render_done - lea edi,screenBuffer - mov ecx,SCREEN_SIZE - rep movsd - xor esi,esi -clp_render_reels: - mov ebx,clpColumns3D[esi*4] - shr ebx,1 - invoke DrawBoxBorder,ebx,63,28,84,000D1816h,00405A46h,1 - invoke DrawCloverReel3D,esi - inc esi - cmp esi,5 - jb clp_render_reels - cmp clpState3D,SLOT_RESULT - jne clp_render_header - mov ecx,clpSelected3D - cmp ecx,clpCount3D - jae clp_render_header - mov eax,clpMasks3D[ecx*4] - mov selectedMask,eax - xor esi,esi -clp_render_highlight: - mov eax,1 - mov ecx,esi - shl eax,cl - test selectedMask,eax - jz clp_render_next_cell - mov eax,esi - xor edx,edx - mov ecx,5 - div ecx - imul eax,28 - add eax,63 - mov cellY,eax - mov ebx,clpColumns3D[edx*4] - shr ebx,1 - mov cellX,ebx - ; Border strips do not paint over the transparent symbol interior. - invoke DrawBox,ebx,cellY,28,1,00E9CE71h - mov eax,cellY - add eax,27 - invoke DrawBox,ebx,eax,28,1,00E9CE71h - invoke DrawBox,ebx,cellY,1,28,00E9CE71h - add ebx,27 - invoke DrawBox,ebx,cellY,1,28,00E9CE71h -clp_render_next_cell: - inc esi - cmp esi,15 - jb clp_render_highlight -clp_render_header: - invoke DrawBox,0,0,320,19,00151D20h - invoke DrawString8x8,8,6,OFFSET clpTitle3D,00E8D7ADh - invoke DrawString8x8,108,6,OFFSET textBank3D,00A8DDB9h - invoke FormatNumber,bankroll,OFFSET hudNumBuffer - invoke DrawString8x8,157,6,OFFSET hudNumBuffer,00F4F3E8h - invoke DrawBoxBorder,252,3,60,14,002C3637h,00687672h,1 - invoke DrawString8x8,258,6,OFFSET cardExitButton3D,00E9D8B0h - invoke DrawBox,63,160,194,26,00151D20h - mov ebx,OFFSET slotReadyText3D - cmp clpState3D,SLOT_SPIN - jne @F - mov ebx,OFFSET slotRollingText3D -@@: - cmp clpState3D,SLOT_RESULT - jne @F - mov ebx,OFFSET clpNoCombo3D - cmp clpCount3D,0 - je @F - mov ebx,OFFSET clpTotalText3D -@@: - cmp clpError3D,0 - je @F - mov ebx,OFFSET slotNoMoney3D -@@: - cmp clpLeave3D,0 - je @F - mov ebx,OFFSET slotExitText3D -@@: - invoke DrawString8x8,72,163,ebx,00E8D7ADh - cmp clpState3D,SLOT_RESULT - jne clp_render_footer - cmp clpCount3D,0 - je clp_render_footer - invoke DrawString8x8,208,163,OFFSET strMultiplier3D,00A8DDB9h - invoke FormatNumber,clpTotal3D,OFFSET hudNumBuffer - invoke DrawString8x8,216,163,OFFSET hudNumBuffer,00A8DDB9h - invoke CloverComboText3D,clpSelected3D - invoke DrawString8x8,72,175,eax,00F4F3E8h - mov ecx,clpSelected3D - invoke FormatNumber,clpMults3D[ecx*4],OFFSET hudNumBuffer - invoke DrawString8x8,208,175,OFFSET strMultiplier3D,00E9CE71h - invoke DrawString8x8,216,175,OFFSET hudNumBuffer,00E9CE71h - invoke DrawBoxBorder,232,170,18,15,0025372Ch,00E9CE71h,1 - invoke DrawBoxBorder,292,170,18,15,0025372Ch,00E9CE71h,1 - invoke DrawString8x8,237,174,OFFSET clpLeft3D,00E9CE71h - invoke DrawString8x8,297,174,OFFSET clpRight3D,00E9CE71h - mov eax,clpSelected3D - inc eax - invoke FormatNumber,eax,OFFSET hudNumBuffer - invoke DrawString8x8,252,174,OFFSET hudNumBuffer,00F4F3E8h - invoke DrawString8x8,268,174,OFFSET clpSlash3D,00F4F3E8h - invoke FormatNumber,clpCount3D,OFFSET hudNumBuffer - invoke DrawString8x8,276,174,OFFSET hudNumBuffer,00F4F3E8h -clp_render_footer: - invoke DrawBox,0,198,320,42,00151D20h - invoke DrawString8x8,11,201,OFFSET slotBetText3D,00E8D7ADh - invoke FormatNumber,clpBet3D,OFFSET hudNumBuffer - invoke DrawString8x8,75,201,OFFSET hudNumBuffer,00F4F3E8h - cmp clpState3D,SLOT_RESULT - jne @F - invoke DrawSlotTotals3D,clpGross3D,clpStake3D,120 -@@: - mov ebx,1 - cmp clpState3D,SLOT_SPIN - jne @F - xor ebx,ebx -@@: - invoke DrawBoxBorder,11,222,18,16,0025372Ch,00EEE5CDh,1 - invoke DrawBoxBorder,35,222,18,16,0025372Ch,00EEE5CDh,1 - invoke DrawString8x8,16,226,OFFSET tableMinusText3D,00EEE5CDh - invoke DrawString8x8,40,226,OFFSET tablePlusText3D,00EEE5CDh - invoke DrawTableButton3D,120,OFFSET slotSpinText3D,ebx - invoke DrawTableButton3D,202,OFFSET slotPayText3D,ebx - cmp clpPaytable3D,0 - je clp_render_done - invoke DrawBoxBorder,18,22,284,200,00151D20h,00D1B16Eh,1 - invoke DrawString8x8,76,29,OFFSET slotPayTitle3D,00E8D7ADh - invoke DrawString8x8,28,44,OFFSET clpSymbolsText3D,00A8DDB9h - invoke DrawString8x8,164,44,OFFSET clpShapesText3D,00A8DDB9h - xor esi,esi -clp_render_pay_row: - mov edi,esi - imul edi,11 - add edi,58 - mov eax,clpShapeNames3D[esi*4] - invoke DrawString8x8,156,edi,eax,00F4F3E8h - invoke FormatNumber,clpShapeFactors3D[esi*4],OFFSET hudNumBuffer - invoke DrawString8x8,280,edi,OFFSET hudNumBuffer,00E8D7ADh - cmp esi,7 - jae clp_render_pay_next - mov eax,clpSymbolNames3D[esi*4] - invoke DrawString8x8,28,edi,eax,00F4F3E8h - invoke FormatNumber,slotSymbolValues[esi*4],OFFSET hudNumBuffer - invoke DrawString8x8,132,edi,OFFSET hudNumBuffer,00E8D7ADh -clp_render_pay_next: - inc esi - cmp esi,11 - jb clp_render_pay_row - invoke DrawString8x8,28,181,OFFSET clpOverlapText3D,00A8DDB9h - invoke DrawString8x8,28,193,OFFSET slotPayNote3D,00A8DDB9h - invoke DrawBoxBorder,112,204,96,15,003B6C59h,00E9D8B0h,1 - invoke DrawString8x8,128,207,OFFSET slotCloseText3D,00E9D8B0h -clp_render_done: - ret -RenderNativeClover3D ENDP +FreeNativeClover3D PROC + invoke FreeAnimPack3D,OFFSET clpCabinet3D + invoke FreeAnimPack3D,OFFSET clpSymbols3D + ret +FreeNativeClover3D ENDP + +InitNativeClover3D PROC + invoke LoadAnimPack3D,OFFSET clpCabinet3D,OFFSET clpCabinetPath3D + test eax,eax + jz clp_init_fail + cmp clpCabinet3D.imageWidth,640 + jne clp_init_fail + cmp clpCabinet3D.height,480 + jne clp_init_fail + cmp clpCabinet3D.frames,1 + jne clp_init_fail + invoke LoadAnimPack3D,OFFSET clpSymbols3D,OFFSET clpSymbolsPath3D + test eax,eax + jz clp_init_fail + cmp clpSymbols3D.imageWidth,CLP_CELL + jne clp_init_fail + cmp clpSymbols3D.height,CLP_CELL + jne clp_init_fail + cmp clpSymbols3D.frames,7 + jne clp_init_fail + mov clpState3D,SLOT_READY + mov clpTimer3D,0 + mov clpStake3D,0 + mov clpGross3D,0 + mov clpTotal3D,0 + mov clpCount3D,0 + mov clpWinMask3D,0 + mov clpSelected3D,0 + mov clpPaytable3D,0 + mov clpLeave3D,0 + mov clpError3D,0 + mov clpBet3D,50 + mov clpBetIndex3D,1 + mov paused3D,0 + mov cardExitActive3D,0 + call ClearKeys3D + mov eax,1 + ret +clp_init_fail: + call FreeNativeClover3D + xor eax,eax + ret +InitNativeClover3D ENDP + +; Tape contents and final board are frozen at the single stake debit. +StartNativeClover3D PROC uses ebx esi edi + cmp clpState3D,SLOT_SPIN + je clp_start_done + cmp clpPaytable3D,0 + jne clp_start_done + cmp clpCabinet3D.pixels,0 + je clp_start_done + cmp clpSymbols3D.pixels,0 + je clp_start_done + mov eax,clpBet3D + test eax,eax + jz clp_start_done + cmp eax,10000 + ja clp_start_done + cmp eax,bankroll + ja clp_start_money + sub bankroll,eax + mov clpStake3D,eax + mov clpState3D,SLOT_SPIN + mov clpTimer3D,0 + mov clpGross3D,0 + mov clpCount3D,0 + mov clpTotal3D,0 + mov clpWinMask3D,0 + mov clpSelected3D,0 + mov clpLeave3D,0 + mov clpError3D,0 + xor esi,esi +clp_start_column: + mov ebx,esi + shl ebx,8 + xor edi,edi +clp_start_tape: + invoke RandomRange3D,7 + mov clpTape3D[ebx+edi*4],eax + inc edi + cmp edi,64 + jb clp_start_tape + xor edi,edi +clp_start_rows: + mov ecx,edi + imul ecx,5 + add ecx,esi + mov eax,clpGrid3D[ecx*4] + mov clpTape3D[ebx+edi*4],eax + invoke RandomRange3D,7 + mov clpGrid3D[ecx*4],eax + mov edx,clpSteps3D[esi*4] + add edx,edi + mov clpTape3D[ebx+edx*4],eax + inc edi + cmp edi,3 + jb clp_start_rows + inc esi + cmp esi,5 + jb clp_start_column + call SaveProgress3D + invoke PlayCasinoSound3D,OFFSET soundSlotSpin,0,1 +clp_start_done: + ret +clp_start_money: + mov clpError3D,1 + ret +StartNativeClover3D ENDP + +; Reuse the original pure assembly evaluator, never the console game or payer. +CloverEvaluate3D PROC uses ebx esi edi + mov clpTotal3D,0 + mov clpCount3D,0 + mov clpWinMask3D,0 + mov clpJackpot3D,0 + xor esi,esi +clp_eval_validate: + cmp clpGrid3D[esi*4],6 + ja clp_eval_done + inc esi + cmp esi,15 + jb clp_eval_validate + lea esi,clpGrid3D + lea edi,slotGrid + mov ecx,15 + rep movsd + call EvaluateSlotCombos + mov eax,slotBestMultiplier + mov clpTotal3D,eax + mov eax,slotWinMask + mov clpWinMask3D,eax + mov eax,slotJackpotHit + mov clpJackpot3D,eax + mov eax,slotComboCount + mov clpCount3D,eax + lea esi,slotComboNames + lea edi,clpNames3D + mov ecx,eax + rep movsd + lea esi,slotComboMults + lea edi,clpMults3D + mov ecx,clpCount3D + rep movsd + lea esi,slotComboMasks + lea edi,clpMasks3D + mov ecx,clpCount3D + rep movsd +clp_eval_done: + xor eax,eax + ret +CloverEvaluate3D ENDP + +SettleNativeClover3D PROC + cmp clpState3D,SLOT_SPIN + jne clp_settle_done + call CloverEvaluate3D + mov eax,clpTotal3D + mul clpStake3D + mov ecx,1000000000 + sub ecx,bankroll + cmp eax,ecx + jbe @F + mov eax,ecx +@@: + mov clpGross3D,eax + add bankroll,eax + mov clpState3D,SLOT_RESULT + mov clpTimer3D,3400 + xor eax,eax + mov ecx,clpGross3D + cmp ecx,clpStake3D + seta al + invoke NpcRecordRound3D,4,eax + call SaveProgress3D + mov eax,clpGross3D + cmp eax,clpStake3D + jb clp_settle_loss + jne @F + invoke PlayCasinoSound3D,0,0,0 + jmp clp_settle_leave +@@: + invoke PlayCasinoSound3D,OFFSET soundRoundWin,0,1 + invoke TriggerCharmWinBonus, clpGross3D + jmp clp_settle_leave +clp_settle_loss: + invoke TriggerCharmLossProtection, clpStake3D + test eax, eax + jnz clp_settle_leave + invoke PlayCasinoSound3D,OFFSET soundRoundLose,0,1 +clp_settle_leave: + cmp clpLeave3D,0 + je clp_settle_done + call CloverEscape3D +clp_settle_done: + ret +SettleNativeClover3D ENDP + +CloverEscape3D PROC + mov paused3D,0 + cmp clpPaytable3D,0 + je @F + mov clpPaytable3D,0 + call ClearKeys3D + ret +@@: + cmp clpState3D,SLOT_SPIN + jne clp_escape_hall + mov clpLeave3D,1 + call ClearKeys3D + ret +clp_escape_hall: + mov clpLeave3D,0 + mov engineMode,MODE_WALK + call ClearKeys3D + invoke PlayCasinoSound3D,0,0,0 + ret +CloverEscape3D ENDP + +CloverReelPosition3D PROC uses ebx index:DWORD + mov ebx,index + xor eax,eax + cmp ebx,4 + ja clp_pos_done + cmp clpState3D,SLOT_SPIN + jne clp_pos_end + mov eax,clpTimer3D + cmp eax,clpDurations3D[ebx*4] + jae clp_pos_end + shl eax,10 + xor edx,edx + div clpDurations3D[ebx*4] + mov ecx,2048 + sub ecx,eax + imul eax,ecx + mov ecx,clpSteps3D[ebx*4] + imul ecx,CLP_CELL + mul ecx + shrd eax,edx,20 + ret +clp_pos_end: + mov eax,clpSteps3D[ebx*4] + imul eax,CLP_CELL +clp_pos_done: + ret +CloverReelPosition3D ENDP + +HandleNativeClover3D PROC uses ebx + cmp mouseClick3D,0 + je clp_handle_tick + mov mouseClick3D,0 + mov eax,mouseY3D + cmp eax,3 + jb clp_handle_tick + cmp eax,17 + jae clp_handle_mouse_controls + cmp mouseX3D,252 + jb clp_handle_tick + cmp mouseX3D,312 + jae clp_handle_tick + call CloverEscape3D + cmp clpState3D,SLOT_SPIN + je clp_handle_tick + ret +clp_handle_mouse_controls: + cmp clpState3D,SLOT_SPIN + je clp_handle_tick + cmp clpPaytable3D,0 + je @F + cmp eax,202 + jb clp_handle_tick + cmp eax,220 + jae clp_handle_tick + cmp mouseX3D,112 + jb clp_handle_tick + cmp mouseX3D,208 + jae clp_handle_tick + mov clpPaytable3D,0 + ret +@@: + cmp eax,170 + jb clp_handle_tick + cmp eax,185 + jae clp_handle_mouse_footer + cmp mouseX3D,232 + jb clp_handle_tick + cmp mouseX3D,250 + jb clp_handle_previous + cmp mouseX3D,292 + jb clp_handle_tick + cmp mouseX3D,310 + jb clp_handle_next + jmp clp_handle_tick +clp_handle_mouse_footer: + cmp eax,222 + jb clp_handle_tick + cmp eax,238 + jae clp_handle_tick + mov eax,mouseX3D + cmp eax,11 + jb clp_handle_tick + cmp eax,29 + jb clp_handle_down + cmp eax,35 + jb clp_handle_tick + cmp eax,53 + jb clp_handle_up + cmp eax,120 + jb clp_handle_tick + cmp eax,190 + jb clp_handle_start + cmp eax,202 + jb clp_handle_tick + cmp eax,272 + jb clp_handle_paytable +clp_handle_tick: + cmp clpState3D,SLOT_SPIN + jne clp_handle_keys + mov eax,deltaTime3D + cmp eax,250 + jbe @F + mov eax,250 +@@: + add clpTimer3D,eax + cmp clpTimer3D,3400 + jb clp_handle_done + call SettleNativeClover3D + ret +clp_handle_keys: + invoke Pressed3D,50h + test eax,eax + jnz clp_handle_paytable + cmp clpPaytable3D,0 + je clp_handle_game_keys + invoke Pressed3D,20h + test eax,eax + jnz clp_handle_paytable + invoke Pressed3D,0Dh + test eax,eax + jnz clp_handle_paytable + ret +clp_handle_game_keys: + invoke Pressed3D,25h + test eax,eax + jnz clp_handle_previous + invoke Pressed3D,27h + test eax,eax + jnz clp_handle_next + invoke Pressed3D,57h + test eax,eax + jnz clp_handle_up + invoke Pressed3D,26h + test eax,eax + jnz clp_handle_up + invoke Pressed3D,53h + test eax,eax + jnz clp_handle_down + invoke Pressed3D,28h + test eax,eax + jnz clp_handle_down + invoke Pressed3D,20h + test eax,eax + jnz clp_handle_start + invoke Pressed3D,0Dh + test eax,eax + jz clp_handle_done +clp_handle_start: + call StartNativeClover3D + ret +clp_handle_paytable: + xor clpPaytable3D,1 + ret +clp_handle_previous: + cmp clpCount3D,0 + je clp_handle_done + cmp clpSelected3D,0 + jne @F + mov eax,clpCount3D + mov clpSelected3D,eax +@@: + dec clpSelected3D + ret +clp_handle_next: + cmp clpCount3D,0 + je clp_handle_done + inc clpSelected3D + mov eax,clpSelected3D + cmp eax,clpCount3D + jb clp_handle_done + mov clpSelected3D,0 + ret +clp_handle_up: + cmp clpBetIndex3D,6 + jae clp_handle_done + inc clpBetIndex3D + jmp clp_handle_bet +clp_handle_down: + cmp clpBetIndex3D,0 + je clp_handle_done + dec clpBetIndex3D +clp_handle_bet: + mov ecx,clpBetIndex3D + mov eax,slotBetValues3D[ecx*4] + mov clpBet3D,eax + mov clpError3D,0 +clp_handle_done: + ret +HandleNativeClover3D ENDP + +DrawCloverSymbol3D PROC uses ebx esi edi symbol:DWORD,x:DWORD,y:DWORD + local row:DWORD,lastRow:DWORD,source:DWORD + cmp symbol,6 + ja clp_symbol_done + mov eax,clpSymbols3D.pixels + test eax,eax + jz clp_symbol_done + mov ecx,symbol + imul ecx,CLP_CELL*CLP_CELL*4 + add eax,ecx + mov source,eax + mov eax,y + cmp eax,CLP_TOP + jge @F + mov eax,CLP_TOP +@@: + mov row,eax + mov eax,y + add eax,CLP_CELL + cmp eax,CLP_BOTTOM + jle @F + mov eax,CLP_BOTTOM +@@: + mov lastRow,eax +clp_symbol_row: + mov eax,row + cmp eax,lastRow + jge clp_symbol_done + mov ecx,eax + sub ecx,y + imul ecx,CLP_CELL*4 + mov esi,source + add esi,ecx + imul eax,640*4 + mov ecx,x + lea edi,screenBuffer[eax+ecx*4] + mov ecx,CLP_CELL +clp_symbol_column: + lodsd + test eax,0FF000000h + jz @F + and eax,00FFFFFFh + mov [edi],eax +@@: + add edi,4 + dec ecx + jnz clp_symbol_column + inc row + jmp clp_symbol_row +clp_symbol_done: + ret +DrawCloverSymbol3D ENDP + +DrawCloverReel3D PROC uses ebx esi edi index:DWORD + local symbolY:DWORD,baseStop:DWORD,columnX:DWORD + mov ebx,index + mov eax,clpColumns3D[ebx*4] + mov columnX,eax + cmp clpState3D,SLOT_SPIN + jne clp_reel_static + invoke CloverReelPosition3D,ebx + xor edx,edx + mov ecx,CLP_CELL + div ecx + mov baseStop,eax + mov eax,CLP_TOP + sub eax,edx + mov symbolY,eax + shl ebx,8 + xor esi,esi +clp_reel_tape: + mov ecx,baseStop + add ecx,esi + mov eax,clpTape3D[ebx+ecx*4] + invoke DrawCloverSymbol3D,eax,columnX,symbolY + add symbolY,CLP_CELL + inc esi + cmp esi,4 + jb clp_reel_tape + ret +clp_reel_static: + mov symbolY,CLP_TOP + xor esi,esi +clp_reel_rows: + mov ecx,esi + imul ecx,5 + add ecx,ebx + mov eax,clpGrid3D[ecx*4] + invoke DrawCloverSymbol3D,eax,columnX,symbolY + add symbolY,CLP_CELL + inc esi + cmp esi,3 + jb clp_reel_rows + ret +DrawCloverReel3D ENDP + +CloverComboText3D PROC index:DWORD + mov ecx,index + cmp ecx,clpCount3D + jae clp_combo_none + mov edx,clpNames3D[ecx*4] + xor ecx,ecx +clp_combo_lookup: + cmp edx,clpLegacyNames3D[ecx*4] + je clp_combo_found + inc ecx + cmp ecx,11 + jb clp_combo_lookup +clp_combo_none: + mov eax,OFFSET clpNoCombo3D + ret +clp_combo_found: + mov eax,clpShapeNames3D[ecx*4] + ret +CloverComboText3D ENDP + +RenderNativeClover3D PROC uses ebx esi edi + local cellX:DWORD,cellY:DWORD,selectedMask:DWORD + mov esi,clpCabinet3D.pixels + test esi,esi + jz clp_render_done + lea edi,screenBuffer + mov ecx,SCREEN_SIZE + rep movsd + xor esi,esi +clp_render_reels: + mov ebx,clpColumns3D[esi*4] + shr ebx,1 + invoke DrawBoxBorder,ebx,63,28,84,000D1816h,00405A46h,1 + invoke DrawCloverReel3D,esi + inc esi + cmp esi,5 + jb clp_render_reels + cmp clpState3D,SLOT_RESULT + jne clp_render_header + mov ecx,clpSelected3D + cmp ecx,clpCount3D + jae clp_render_header + mov eax,clpMasks3D[ecx*4] + mov selectedMask,eax + xor esi,esi +clp_render_highlight: + mov eax,1 + mov ecx,esi + shl eax,cl + test selectedMask,eax + jz clp_render_next_cell + mov eax,esi + xor edx,edx + mov ecx,5 + div ecx + imul eax,28 + add eax,63 + mov cellY,eax + mov ebx,clpColumns3D[edx*4] + shr ebx,1 + mov cellX,ebx + ; Border strips do not paint over the transparent symbol interior. + invoke DrawBox,ebx,cellY,28,1,00E9CE71h + mov eax,cellY + add eax,27 + invoke DrawBox,ebx,eax,28,1,00E9CE71h + invoke DrawBox,ebx,cellY,1,28,00E9CE71h + add ebx,27 + invoke DrawBox,ebx,cellY,1,28,00E9CE71h +clp_render_next_cell: + inc esi + cmp esi,15 + jb clp_render_highlight +clp_render_header: + invoke DrawBox,0,0,320,19,00151D20h + invoke DrawString8x8,8,6,OFFSET clpTitle3D,00E8D7ADh + invoke DrawString8x8,108,6,OFFSET textBank3D,00A8DDB9h + invoke FormatNumber,bankroll,OFFSET hudNumBuffer + invoke DrawString8x8,157,6,OFFSET hudNumBuffer,00F4F3E8h + invoke DrawBoxBorder,252,3,60,14,002C3637h,00687672h,1 + invoke DrawString8x8,258,6,OFFSET cardExitButton3D,00E9D8B0h + invoke DrawBox,63,160,194,26,00151D20h + mov ebx,OFFSET slotReadyText3D + cmp clpState3D,SLOT_SPIN + jne @F + mov ebx,OFFSET slotRollingText3D +@@: + cmp clpState3D,SLOT_RESULT + jne @F + mov ebx,OFFSET clpNoCombo3D + cmp clpCount3D,0 + je @F + mov ebx,OFFSET clpTotalText3D +@@: + cmp clpError3D,0 + je @F + mov ebx,OFFSET slotNoMoney3D +@@: + cmp clpLeave3D,0 + je @F + mov ebx,OFFSET slotExitText3D +@@: + invoke DrawString8x8,72,163,ebx,00E8D7ADh + cmp clpState3D,SLOT_RESULT + jne clp_render_footer + cmp clpCount3D,0 + je clp_render_footer + invoke DrawString8x8,208,163,OFFSET strMultiplier3D,00A8DDB9h + invoke FormatNumber,clpTotal3D,OFFSET hudNumBuffer + invoke DrawString8x8,216,163,OFFSET hudNumBuffer,00A8DDB9h + invoke CloverComboText3D,clpSelected3D + invoke DrawString8x8,72,175,eax,00F4F3E8h + mov ecx,clpSelected3D + invoke FormatNumber,clpMults3D[ecx*4],OFFSET hudNumBuffer + invoke DrawString8x8,208,175,OFFSET strMultiplier3D,00E9CE71h + invoke DrawString8x8,216,175,OFFSET hudNumBuffer,00E9CE71h + invoke DrawBoxBorder,232,170,18,15,0025372Ch,00E9CE71h,1 + invoke DrawBoxBorder,292,170,18,15,0025372Ch,00E9CE71h,1 + invoke DrawString8x8,237,174,OFFSET clpLeft3D,00E9CE71h + invoke DrawString8x8,297,174,OFFSET clpRight3D,00E9CE71h + mov eax,clpSelected3D + inc eax + invoke FormatNumber,eax,OFFSET hudNumBuffer + invoke DrawString8x8,252,174,OFFSET hudNumBuffer,00F4F3E8h + invoke DrawString8x8,268,174,OFFSET clpSlash3D,00F4F3E8h + invoke FormatNumber,clpCount3D,OFFSET hudNumBuffer + invoke DrawString8x8,276,174,OFFSET hudNumBuffer,00F4F3E8h +clp_render_footer: + invoke DrawBox,0,198,320,42,00151D20h + invoke DrawString8x8,11,201,OFFSET slotBetText3D,00E8D7ADh + invoke FormatNumber,clpBet3D,OFFSET hudNumBuffer + invoke DrawString8x8,75,201,OFFSET hudNumBuffer,00F4F3E8h + cmp clpState3D,SLOT_RESULT + jne @F + invoke DrawSlotTotals3D,clpGross3D,clpStake3D,120 +@@: + mov ebx,1 + cmp clpState3D,SLOT_SPIN + jne @F + xor ebx,ebx +@@: + invoke DrawBoxBorder,11,222,18,16,0025372Ch,00EEE5CDh,1 + invoke DrawBoxBorder,35,222,18,16,0025372Ch,00EEE5CDh,1 + invoke DrawString8x8,16,226,OFFSET tableMinusText3D,00EEE5CDh + invoke DrawString8x8,40,226,OFFSET tablePlusText3D,00EEE5CDh + invoke DrawTableButton3D,120,OFFSET slotSpinText3D,ebx + invoke DrawTableButton3D,202,OFFSET slotPayText3D,ebx + cmp clpPaytable3D,0 + je clp_render_done + invoke DrawBoxBorder,18,22,284,200,00151D20h,00D1B16Eh,1 + invoke DrawString8x8,76,29,OFFSET slotPayTitle3D,00E8D7ADh + invoke DrawString8x8,28,44,OFFSET clpSymbolsText3D,00A8DDB9h + invoke DrawString8x8,164,44,OFFSET clpShapesText3D,00A8DDB9h + xor esi,esi +clp_render_pay_row: + mov edi,esi + imul edi,11 + add edi,58 + mov eax,clpShapeNames3D[esi*4] + invoke DrawString8x8,156,edi,eax,00F4F3E8h + invoke FormatNumber,clpShapeFactors3D[esi*4],OFFSET hudNumBuffer + invoke DrawString8x8,280,edi,OFFSET hudNumBuffer,00E8D7ADh + cmp esi,7 + jae clp_render_pay_next + mov eax,clpSymbolNames3D[esi*4] + invoke DrawString8x8,28,edi,eax,00F4F3E8h + invoke FormatNumber,slotSymbolValues[esi*4],OFFSET hudNumBuffer + invoke DrawString8x8,132,edi,OFFSET hudNumBuffer,00E8D7ADh +clp_render_pay_next: + inc esi + cmp esi,11 + jb clp_render_pay_row + invoke DrawString8x8,28,181,OFFSET clpOverlapText3D,00A8DDB9h + invoke DrawString8x8,28,193,OFFSET slotPayNote3D,00A8DDB9h + invoke DrawBoxBorder,112,204,96,15,003B6C59h,00E9D8B0h,1 + invoke DrawString8x8,128,207,OFFSET slotCloseText3D,00E9D8B0h +clp_render_done: + ret +RenderNativeClover3D ENDP diff --git a/src_graphics/native_coin.inc b/src_graphics/native_coin.inc index a9200d4..1f88295 100644 --- a/src_graphics/native_coin.inc +++ b/src_graphics/native_coin.inc @@ -1,656 +1,659 @@ -InitNativeCoin3D PROC - mov coin3d_state,COIN_IDLE - mov coin3d_timer,0 - mov coin3d_streak,0 - mov coin3d_win,0 - mov coin3d_choice,1 - mov coin3d_result,1 - mov coinExitQueued3D,0 - mov coinError3D,0 - cmp coin3d_bet,50 - jae @F - mov coin3d_bet,50 -@@: - cmp coin3d_bet,5000 - jbe @F - mov coin3d_bet,5000 -@@: - call LoadNativeCoinArt3D - call OpenCoinDetail3D - ret -InitNativeCoin3D ENDP - -LoadNativeCoinArt3D PROC - cmp coinArtReady3D,1 - je coin_art_loaded - invoke LoadAnimPack3D,OFFSET coinTableArt3D,OFFSET coinTablePath3D - invoke LoadAnimPack3D,OFFSET coinFacesArt3D,OFFSET coinFacesPath3D - invoke LoadAnimPack3D,OFFSET coinHandsArt3D,OFFSET coinHandsPath3D - invoke ValidateCityPack3D,OFFSET coinTableArt3D,640,480,1 - invoke ValidateCityPack3D,OFFSET coinFacesArt3D,128,128,2 - invoke ValidateCityPack3D,OFFSET coinHandsArt3D,224,224,16 - cmp coinTableArt3D.pixels,0 - je coin_art_failed - cmp coinFacesArt3D.pixels,0 - je coin_art_failed - cmp coinHandsArt3D.pixels,0 - je coin_art_failed - mov coinArtReady3D,1 -coin_art_loaded: - mov eax,1 - ret -coin_art_failed: - call FreeNativeCoinArt3D - xor eax,eax - ret -LoadNativeCoinArt3D ENDP - -FreeNativeCoinArt3D PROC - call CloseCoinDetail3D - invoke FreeAnimPack3D,OFFSET coinTableArt3D - invoke FreeAnimPack3D,OFFSET coinFacesArt3D - invoke FreeAnimPack3D,OFFSET coinHandsArt3D - mov coinArtReady3D,0 - ret -FreeNativeCoinArt3D ENDP - -CoinEscape3D PROC - mov paused3D,0 - cmp tournamentMode, 1 - jne @F - call TowerExitToHall - ret -@@: - cmp coin3d_state,COIN_TOSS - jne coin_leave_hall - mov coinExitQueued3D,1 - call ClearKeys3D - ret -coin_leave_hall: - call CloseCoinDetail3D - mov coinExitQueued3D,0 - mov engineMode,MODE_WALK - call ClearKeys3D - invoke PlayCasinoSound3D,0,0,0 - ret -CoinEscape3D ENDP - -; A paid flip settles once, even if Escape was pressed while it was in the air. -CoinSettle3D PROC - cmp coin3d_state,COIN_TOSS - jne coin_settle_done - mov coin3d_timer,COIN_TOTAL_MS - mov coin3d_win,0 - mov eax,coin3d_choice - cmp eax,coin3d_result - jne coin_settle_loss - inc coin3d_streak - mov eax,coin3d_bet - shl eax,1 - mov coin3d_win,eax - add bankroll,eax - jnc @F - mov bankroll,1000000000 -@@: - cmp bankroll,1000000000 - jbe @F - mov bankroll,1000000000 -@@: - invoke PlayCasinoSound3D,OFFSET soundCoinDing,0,1 - jmp coin_settle_save -coin_settle_loss: - mov coin3d_streak,0 - invoke PlayCasinoSound3D,OFFSET soundLose,0,1 -coin_settle_save: - mov coin3d_state,COIN_RESULT - xor eax,eax - cmp coin3d_win,0 - setne al - invoke NpcRecordRound3D,0,eax - call SaveProgress3D -coin_settle_done: - ret -CoinSettle3D ENDP - -HandleNativeCoin3D PROC uses ebx - cmp mouseClick3D,0 - je coin_native_state - cmp mouseY3D,3 - jb coin_native_state - cmp mouseY3D,17 - jae coin_native_state - cmp mouseX3D,252 - jb coin_native_view - cmp mouseX3D,312 - jae coin_native_state - mov mouseClick3D,0 - call CoinEscape3D - cmp engineMode,MODE_WALK - je coin_native_done - jmp coin_native_state -coin_native_view: - cmp mouseX3D,198 - jb coin_native_state - cmp mouseX3D,246 - jae coin_native_state - mov mouseClick3D,0 - call OpenCoinDetail3D -coin_native_state: - cmp coin3d_state,COIN_TOSS - jne coin_native_result - mov eax,coin3d_timer - add eax,deltaTime3D - jc coin_native_settle - cmp eax,COIN_TOTAL_MS - jae coin_native_settle - mov coin3d_timer,eax - ret -coin_native_settle: - call CoinSettle3D - cmp coinExitQueued3D,0 - je coin_native_done - call CoinEscape3D - ret -coin_native_result: - cmp coin3d_state,COIN_RESULT - jne coin_native_mouse - cmp tournamentMode, 1 - jne coin_regular_result - invoke Pressed3D,20h - test eax,eax - jnz coin_tourney_report - invoke Pressed3D,0Dh - test eax,eax - jnz coin_tourney_report - cmp mouseClick3D,0 - je coin_native_done - mov mouseClick3D,0 -coin_tourney_report: - call CloseCoinDetail3D - cmp coin3d_win, 0 - je @F - invoke TowerReportRoundOutcome, 1 - ret -@@: - invoke TowerReportRoundOutcome, 2 - ret -coin_regular_result: - invoke Pressed3D,20h - test eax,eax - jnz coin_native_again - invoke Pressed3D,0Dh - test eax,eax - jnz coin_native_again - cmp mouseClick3D,0 - je coin_native_done - mov mouseClick3D,0 - cmp mouseY3D,219 - jb coin_native_done - cmp mouseY3D,237 - jae coin_native_done - cmp mouseX3D,220 - jb coin_native_done - cmp mouseX3D,312 - jae coin_native_done -coin_native_again: - mov coin3d_state,COIN_IDLE - mov coin3d_timer,0 - mov coinError3D,0 - mov mouseClick3D,0 - call ClearKeys3D - ret -coin_native_mouse: - cmp mouseClick3D,0 - je coin_native_keys - mov mouseClick3D,0 - cmp mouseY3D,199 - jb coin_native_keys - cmp mouseY3D,215 - jae coin_native_sides - cmp mouseX3D,118 - jb coin_native_keys - cmp mouseX3D,134 - jb coin_native_less - cmp mouseX3D,140 - jb coin_native_keys - cmp mouseX3D,156 - jb coin_native_more - jmp coin_native_keys -coin_native_sides: - cmp mouseY3D,219 - jb coin_native_keys - cmp mouseY3D,237 - jae coin_native_keys - cmp mouseX3D,8 - jb coin_native_keys - cmp mouseX3D,98 - jb coin_native_heads - cmp mouseX3D,106 - jb coin_native_keys - cmp mouseX3D,196 - jb coin_native_tails - cmp mouseX3D,220 - jb coin_native_keys - cmp mouseX3D,312 - jb coin_native_start -coin_native_keys: - invoke Pressed3D,26h - test eax,eax - jnz coin_native_more - invoke Pressed3D,57h - test eax,eax - jnz coin_native_more - invoke Pressed3D,28h - test eax,eax - jnz coin_native_less - invoke Pressed3D,53h - test eax,eax - jnz coin_native_less - invoke Pressed3D,31h - test eax,eax - jnz coin_native_heads - invoke Pressed3D,32h - test eax,eax - jnz coin_native_tails - invoke Pressed3D,20h - test eax,eax - jnz coin_native_start - invoke Pressed3D,0Dh - test eax,eax - jnz coin_native_start - ret -coin_native_more: - cmp coin3d_bet,5000 - jae coin_native_done - add coin3d_bet,50 - mov coinError3D,0 - ret -coin_native_less: - cmp coin3d_bet,50 - jbe coin_native_done - sub coin3d_bet,50 - mov coinError3D,0 - ret -coin_native_heads: - mov coin3d_choice,1 - ret -coin_native_tails: - mov coin3d_choice,2 - ret -coin_native_start: - cmp coinArtReady3D,1 - jne coin_native_done - mov eax,coin3d_bet - cmp eax,50 - jb coin_native_done - cmp eax,5000 - ja coin_native_done - cmp eax,bankroll - ja coin_native_insufficient - sub bankroll,eax - mov coin3d_state,COIN_TOSS - mov coin3d_timer,0 - mov coin3d_win,0 - mov coinExitQueued3D,0 - mov coinError3D,0 - mov eax,coin3d_choice - dec eax - shl eax,8 - add eax,96 - mov coinStartPhase3D,eax - invoke RandomRange3D,2 - inc eax - mov coin3d_result,eax - call SaveProgress3D - invoke PlayCasinoSound3D,OFFSET soundCoin,0,1 - call ClearKeys3D - ret -coin_native_insufficient: - mov coinError3D,1 -coin_native_done: - ret -HandleNativeCoin3D ENDP - -; Derive pose from absolute elapsed time; never alter bank, outcome or RNG here. -CoinPose3D PROC uses ebx esi timeMs:DWORD - local phase:DWORD,flightTime:DWORD,bounceTime:DWORD - mov coinX3D,414 - mov coinY3D,266 - mov coinGroundY3D,344 - mov coinWidth3D,32 - mov coinHeight3D,12 - mov coinShadowRadius3D,30 - mov coinShadowAlpha3D,90 - mov coinHandY3D,240 - mov coinHandPose3D,0 - mov eax,coin3d_choice - dec eax - mov coinFace3D,eax - shl eax,8 - mov coinAngle3D,eax - cmp coin3d_state,COIN_IDLE - je coin_pose_done - mov eax,timeMs - cmp eax,COIN_RELEASE_MS - jae coin_pose_air - xor edx,edx - mov ecx,60 - div ecx - mov coinHandPose3D,eax - ret -coin_pose_air: - sub eax,COIN_RELEASE_MS - mov flightTime,eax - mov ebx,eax - xor edx,edx - mov ecx,65 - div ecx - add eax,5 - cmp eax,15 - jbe @F - mov eax,15 -@@: - mov coinHandPose3D,eax - cmp ebx,200 - jb @F - sub ebx,200 - shr ebx,1 - cmp ebx,300 - jbe coin_pose_withdraw - mov ebx,300 -coin_pose_withdraw: - add coinHandY3D,ebx -@@: - cmp flightTime,COIN_FLIGHT_MS - jae coin_pose_landing - mov eax,flightTime - shl eax,16 - xor edx,edx - mov ecx,COIN_FLIGHT_MS - div ecx - mov phase,eax - imul eax,94 - shr eax,16 - sub coinX3D,eax - ; Ballistic height from the thumb to the felt, with no mid-air easing/hover. - mov eax,FP_1 - sub eax,phase - mul phase - shrd eax,edx,16 - imul eax,480 - shr eax,16 - mov ebx,FP_1 - sub ebx,phase - imul ebx,78 - shr ebx,16 - add eax,ebx - mov ebx,coinGroundY3D - sub ebx,eax - mov coinY3D,ebx - shr eax,2 - sub coinShadowAlpha3D,eax - mov eax,coin3d_result - dec eax - shl eax,8 - add eax,2*512 - sub eax,coinStartPhase3D - mul phase - shrd eax,edx,16 - add eax,coinStartPhase3D - and eax,511 - mov coinAngle3D,eax - mov ebx,tableCos[eax*4] - mov coinFace3D,0 - test ebx,ebx - jns @F - neg ebx - mov coinFace3D,1 -@@: - imul ebx,32 - shr ebx,16 - cmp ebx,3 - jae @F - mov ebx,3 -@@: - mov coinHeight3D,ebx - ret -coin_pose_landing: - mov coinX3D,320 - mov coinY3D,344 - mov coinGroundY3D,344 - mov coinHeight3D,32 - mov coinShadowAlpha3D,110 - mov eax,coin3d_result - dec eax - mov coinFace3D,eax - shl eax,8 - mov coinAngle3D,eax - mov eax,flightTime - sub eax,COIN_FLIGHT_MS - mov bounceTime,eax - cmp eax,60 - jbe @F - mov eax,60 -@@: - mov ebx,eax - imul eax,18 - xor edx,edx - mov ecx,60 - div ecx - sub coinHeight3D,eax - mov eax,ebx - imul eax,24 - xor edx,edx - div ecx - add coinWidth3D,eax - mov eax,bounceTime - mov ebx,180 - mov esi,72 - cmp eax,180 - jb coin_pose_bounce - sub eax,180 - mov ebx,120 - mov esi,24 - cmp eax,120 - jae coin_pose_done -coin_pose_bounce: - shl eax,16 - xor edx,edx - div ebx - mov ecx,eax - neg eax - add eax,FP_1 - mul ecx - shrd eax,edx,16 - imul eax,esi - shr eax,16 - sub coinY3D,eax -coin_pose_done: - ret -CoinPose3D ENDP - -; Fractional shadow on actual framebuffer pixels, rather than a black rectangular sprite. -DrawCoinShadow3D PROC uses ebx esi edi centerX:DWORD,centerY:DWORD,radiusX:DWORD,radiusY:DWORD,opacity:DWORD - local row:DWORD,column:DWORD,dy2:DWORD,limit:DWORD,inverse:DWORD - mov eax,255 - sub eax,opacity - mov inverse,eax - mov eax,radiusX - imul eax,eax - mov ebx,radiusY - imul ebx,ebx - imul eax,ebx - mov limit,eax - mov eax,centerY - sub eax,radiusY - mov row,eax -coin_shadow_row: - mov eax,row - sub eax,centerY - imul eax,eax - imul eax,radiusX - imul eax,radiusX - mov dy2,eax - mov eax,centerX - sub eax,radiusX - mov column,eax -coin_shadow_pixel: - cmp row,SCREEN_H - jae coin_shadow_next - cmp column,SCREEN_W - jae coin_shadow_next - mov eax,column - sub eax,centerX - imul eax,eax - imul eax,radiusY - imul eax,radiusY - add eax,dy2 - cmp eax,limit - ja coin_shadow_next - mov edi,row - imul edi,SCREEN_W - add edi,column - lea edi,screenBuffer[edi*4] - mov esi,[edi] - xor ebx,ebx - xor ecx,ecx -coin_shadow_channel: - mov eax,esi - and eax,255 - imul eax,inverse - add eax,128 - mov edx,eax - shr edx,8 - add eax,edx - shr eax,8 - shl eax,cl - or ebx,eax - shr esi,8 - add ecx,8 - cmp ecx,24 - jb coin_shadow_channel - mov [edi],ebx -coin_shadow_next: - inc column - mov eax,centerX - add eax,radiusX - cmp column,eax - jle coin_shadow_pixel - inc row - mov eax,centerY - add eax,radiusY - cmp row,eax - jle coin_shadow_row - ret -DrawCoinShadow3D ENDP - -RenderNativeCoin3D PROC uses ebx esi edi - local x:DWORD,y:DWORD,tint:DWORD - cmp coinArtReady3D,1 - jne coin_render_missing - mov esi,coinTableArt3D.pixels - lea edi,screenBuffer - mov ecx,SCREEN_SIZE - rep movsd - invoke CoinPose3D,coin3d_timer - cmp coin3d_timer,COIN_RELEASE_MS - jae coin_render_released - invoke DrawAnimSprite3D,OFFSET coinHandsArt3D,coinHandPose3D,320,coinHandY3D,240,240 - jmp coin_render_hud -coin_render_released: - mov eax,coinGroundY3D - add eax,14 - invoke DrawCoinShadow3D,coinX3D,eax,coinShadowRadius3D,5,coinShadowAlpha3D - invoke DrawAnimSprite3D,OFFSET coinHandsArt3D,coinHandPose3D,320,coinHandY3D,240,240 - mov eax,coinWidth3D - shr eax,1 - neg eax - add eax,coinX3D - mov x,eax - mov eax,coinHeight3D - shr eax,1 - neg eax - add eax,coinY3D - mov y,eax - add eax,2 - invoke DrawAnimSprite3D,OFFSET coinFacesArt3D,coinFace3D,x,eax,coinWidth3D,coinHeight3D - invoke DrawAnimSprite3D,OFFSET coinFacesArt3D,coinFace3D,x,y,coinWidth3D,coinHeight3D -coin_render_hud: - invoke DrawBox,0,0,320,20,0014191Dh - invoke DrawString8x8,12,6,OFFSET coinTitle3D,00E5D29Eh - invoke DrawBoxBorder,198,3,48,14,00252D2Ah,0086754Eh,1 - invoke DrawString8x8,210,6,OFFSET coinDetailView3D,00E5D29Eh - invoke DrawBoxBorder,252,3,60,14,00252D2Ah,0086754Eh,1 - invoke DrawString8x8,266,6,OFFSET coinExitText3D,00E5D29Eh - invoke DrawBox,4,23,138,15,0014191Dh - invoke DrawString8x8,8,26,OFFSET coinBankText3D,00E5D29Eh - invoke DrawNumber,60,26,bankroll,00FFFFFFh - invoke DrawBox,0,194,320,46,0014191Dh - cmp coin3d_state,COIN_TOSS - je coin_render_toss_hud - cmp coin3d_state,COIN_RESULT - je coin_render_result_hud - invoke DrawString8x8,8,202,OFFSET coinStakeText3D,00E5D29Eh - invoke DrawNumber,72,202,coin3d_bet,00FFFFFFh - invoke DrawBoxBorder,118,199,16,16,003B3024h,00C6AA66h,1 - invoke DrawString8x8,122,203,OFFSET coinMinusText3D,00FFFFFFh - invoke DrawBoxBorder,140,199,16,16,003B3024h,00C6AA66h,1 - invoke DrawString8x8,144,203,OFFSET coinPlusText3D,00FFFFFFh - cmp coinError3D,0 - je @F - invoke DrawString8x8,178,202,OFFSET coinLowBankText3D,00E99383h -@@: - mov tint,0086754Eh - cmp coin3d_choice,1 - jne @F - mov tint,00EAC96Dh -@@: - invoke DrawBoxBorder,8,219,90,18,00252D2Ah,tint,1 - invoke DrawString8x8,34,224,OFFSET coinHeadsText3D,00F4E7C8h - mov tint,0086754Eh - cmp coin3d_choice,2 - jne @F - mov tint,00EAC96Dh -@@: - invoke DrawBoxBorder,106,219,90,18,00252D2Ah,tint,1 - invoke DrawString8x8,132,224,OFFSET coinTailsText3D,00F4E7C8h - invoke DrawBoxBorder,220,219,92,18,00423929h,00C6AA66h,1 - invoke DrawString8x8,242,224,OFFSET coinFlipText3D,00FFFFFFh - jmp coin_render_done -coin_render_toss_hud: - mov eax,OFFSET coinTossText3D - cmp coin3d_timer,COIN_RELEASE_MS - jae @F - mov eax,OFFSET coinPrepareText3D -@@: - cmp coin3d_timer,COIN_LAND_MS - jb @F - mov eax,OFFSET coinLandingText3D -@@: - cmp coinExitQueued3D,0 - je @F - mov eax,OFFSET coinLeavingText3D -@@: - invoke DrawString8x8,82,214,eax,00E5D29Eh - jmp coin_render_done -coin_render_result_hud: - mov eax,OFFSET coinHeadsText3D - cmp coin3d_result,1 - je @F - mov eax,OFFSET coinTailsText3D -@@: - invoke DrawString8x8,8,202,eax,00E5D29Eh - invoke DrawString8x8,140,202,OFFSET coinReturnText3D,00E5D29Eh - invoke DrawNumber,212,202,coin3d_win,00FFFFFFh - invoke DrawBoxBorder,220,219,92,18,003B3024h,00C6AA66h,1 - invoke DrawString8x8,238,224,OFFSET coinAgainText3D,00FFFFFFh - jmp coin_render_done -coin_render_missing: - invoke DrawBox,0,0,320,240,0014191Dh - invoke DrawString8x8,76,108,OFFSET coinMissingText3D,00E5D29Eh -coin_render_done: - call UpdateCoinDetail3D - ret -RenderNativeCoin3D ENDP - -include src_graphics\coin_detail.inc +InitNativeCoin3D PROC + mov coin3d_state,COIN_IDLE + mov coin3d_timer,0 + mov coin3d_streak,0 + mov coin3d_win,0 + mov coin3d_choice,1 + mov coin3d_result,1 + mov coinExitQueued3D,0 + mov coinError3D,0 + cmp coin3d_bet,50 + jae @F + mov coin3d_bet,50 +@@: + cmp coin3d_bet,5000 + jbe @F + mov coin3d_bet,5000 +@@: + call LoadNativeCoinArt3D + call OpenCoinDetail3D + ret +InitNativeCoin3D ENDP + +LoadNativeCoinArt3D PROC + cmp coinArtReady3D,1 + je coin_art_loaded + invoke LoadAnimPack3D,OFFSET coinTableArt3D,OFFSET coinTablePath3D + invoke LoadAnimPack3D,OFFSET coinFacesArt3D,OFFSET coinFacesPath3D + invoke LoadAnimPack3D,OFFSET coinHandsArt3D,OFFSET coinHandsPath3D + invoke ValidateCityPack3D,OFFSET coinTableArt3D,640,480,1 + invoke ValidateCityPack3D,OFFSET coinFacesArt3D,128,128,2 + invoke ValidateCityPack3D,OFFSET coinHandsArt3D,224,224,16 + cmp coinTableArt3D.pixels,0 + je coin_art_failed + cmp coinFacesArt3D.pixels,0 + je coin_art_failed + cmp coinHandsArt3D.pixels,0 + je coin_art_failed + mov coinArtReady3D,1 +coin_art_loaded: + mov eax,1 + ret +coin_art_failed: + call FreeNativeCoinArt3D + xor eax,eax + ret +LoadNativeCoinArt3D ENDP + +FreeNativeCoinArt3D PROC + call CloseCoinDetail3D + invoke FreeAnimPack3D,OFFSET coinTableArt3D + invoke FreeAnimPack3D,OFFSET coinFacesArt3D + invoke FreeAnimPack3D,OFFSET coinHandsArt3D + mov coinArtReady3D,0 + ret +FreeNativeCoinArt3D ENDP + +CoinEscape3D PROC + mov paused3D,0 + cmp tournamentMode, 1 + jne @F + call TowerExitToHall + ret +@@: + cmp coin3d_state,COIN_TOSS + jne coin_leave_hall + mov coinExitQueued3D,1 + call ClearKeys3D + ret +coin_leave_hall: + call CloseCoinDetail3D + mov coinExitQueued3D,0 + mov engineMode,MODE_WALK + call ClearKeys3D + invoke PlayCasinoSound3D,0,0,0 + ret +CoinEscape3D ENDP + +; A paid flip settles once, even if Escape was pressed while it was in the air. +CoinSettle3D PROC + cmp coin3d_state,COIN_TOSS + jne coin_settle_done + mov coin3d_timer,COIN_TOTAL_MS + mov coin3d_win,0 + mov eax,coin3d_choice + cmp eax,coin3d_result + jne coin_settle_loss + inc coin3d_streak + mov eax,coin3d_bet + shl eax,1 + mov coin3d_win,eax + add bankroll,eax + jnc @F + mov bankroll,1000000000 +@@: + cmp bankroll,1000000000 + jbe @F + mov bankroll,1000000000 +@@: + invoke PlayCasinoSound3D,OFFSET soundCoinDing,0,1 + jmp coin_settle_save +coin_settle_loss: + mov coin3d_streak,0 + invoke TriggerCharmLossProtection, coin3d_bet + test eax, eax + jnz coin_settle_save + invoke PlayCasinoSound3D,OFFSET soundLose,0,1 +coin_settle_save: + mov coin3d_state,COIN_RESULT + xor eax,eax + cmp coin3d_win,0 + setne al + invoke NpcRecordRound3D,0,eax + call SaveProgress3D +coin_settle_done: + ret +CoinSettle3D ENDP + +HandleNativeCoin3D PROC uses ebx + cmp mouseClick3D,0 + je coin_native_state + cmp mouseY3D,3 + jb coin_native_state + cmp mouseY3D,17 + jae coin_native_state + cmp mouseX3D,252 + jb coin_native_view + cmp mouseX3D,312 + jae coin_native_state + mov mouseClick3D,0 + call CoinEscape3D + cmp engineMode,MODE_WALK + je coin_native_done + jmp coin_native_state +coin_native_view: + cmp mouseX3D,198 + jb coin_native_state + cmp mouseX3D,246 + jae coin_native_state + mov mouseClick3D,0 + call OpenCoinDetail3D +coin_native_state: + cmp coin3d_state,COIN_TOSS + jne coin_native_result + mov eax,coin3d_timer + add eax,deltaTime3D + jc coin_native_settle + cmp eax,COIN_TOTAL_MS + jae coin_native_settle + mov coin3d_timer,eax + ret +coin_native_settle: + call CoinSettle3D + cmp coinExitQueued3D,0 + je coin_native_done + call CoinEscape3D + ret +coin_native_result: + cmp coin3d_state,COIN_RESULT + jne coin_native_mouse + cmp tournamentMode, 1 + jne coin_regular_result + invoke Pressed3D,20h + test eax,eax + jnz coin_tourney_report + invoke Pressed3D,0Dh + test eax,eax + jnz coin_tourney_report + cmp mouseClick3D,0 + je coin_native_done + mov mouseClick3D,0 +coin_tourney_report: + call CloseCoinDetail3D + cmp coin3d_win, 0 + je @F + invoke TowerReportRoundOutcome, 1 + ret +@@: + invoke TowerReportRoundOutcome, 2 + ret +coin_regular_result: + invoke Pressed3D,20h + test eax,eax + jnz coin_native_again + invoke Pressed3D,0Dh + test eax,eax + jnz coin_native_again + cmp mouseClick3D,0 + je coin_native_done + mov mouseClick3D,0 + cmp mouseY3D,219 + jb coin_native_done + cmp mouseY3D,237 + jae coin_native_done + cmp mouseX3D,220 + jb coin_native_done + cmp mouseX3D,312 + jae coin_native_done +coin_native_again: + mov coin3d_state,COIN_IDLE + mov coin3d_timer,0 + mov coinError3D,0 + mov mouseClick3D,0 + call ClearKeys3D + ret +coin_native_mouse: + cmp mouseClick3D,0 + je coin_native_keys + mov mouseClick3D,0 + cmp mouseY3D,199 + jb coin_native_keys + cmp mouseY3D,215 + jae coin_native_sides + cmp mouseX3D,118 + jb coin_native_keys + cmp mouseX3D,134 + jb coin_native_less + cmp mouseX3D,140 + jb coin_native_keys + cmp mouseX3D,156 + jb coin_native_more + jmp coin_native_keys +coin_native_sides: + cmp mouseY3D,219 + jb coin_native_keys + cmp mouseY3D,237 + jae coin_native_keys + cmp mouseX3D,8 + jb coin_native_keys + cmp mouseX3D,98 + jb coin_native_heads + cmp mouseX3D,106 + jb coin_native_keys + cmp mouseX3D,196 + jb coin_native_tails + cmp mouseX3D,220 + jb coin_native_keys + cmp mouseX3D,312 + jb coin_native_start +coin_native_keys: + invoke Pressed3D,26h + test eax,eax + jnz coin_native_more + invoke Pressed3D,57h + test eax,eax + jnz coin_native_more + invoke Pressed3D,28h + test eax,eax + jnz coin_native_less + invoke Pressed3D,53h + test eax,eax + jnz coin_native_less + invoke Pressed3D,31h + test eax,eax + jnz coin_native_heads + invoke Pressed3D,32h + test eax,eax + jnz coin_native_tails + invoke Pressed3D,20h + test eax,eax + jnz coin_native_start + invoke Pressed3D,0Dh + test eax,eax + jnz coin_native_start + ret +coin_native_more: + cmp coin3d_bet,5000 + jae coin_native_done + add coin3d_bet,50 + mov coinError3D,0 + ret +coin_native_less: + cmp coin3d_bet,50 + jbe coin_native_done + sub coin3d_bet,50 + mov coinError3D,0 + ret +coin_native_heads: + mov coin3d_choice,1 + ret +coin_native_tails: + mov coin3d_choice,2 + ret +coin_native_start: + cmp coinArtReady3D,1 + jne coin_native_done + mov eax,coin3d_bet + cmp eax,50 + jb coin_native_done + cmp eax,5000 + ja coin_native_done + cmp eax,bankroll + ja coin_native_insufficient + sub bankroll,eax + mov coin3d_state,COIN_TOSS + mov coin3d_timer,0 + mov coin3d_win,0 + mov coinExitQueued3D,0 + mov coinError3D,0 + mov eax,coin3d_choice + dec eax + shl eax,8 + add eax,96 + mov coinStartPhase3D,eax + invoke RandomRange3D,2 + inc eax + mov coin3d_result,eax + call SaveProgress3D + invoke PlayCasinoSound3D,OFFSET soundCoin,0,1 + call ClearKeys3D + ret +coin_native_insufficient: + mov coinError3D,1 +coin_native_done: + ret +HandleNativeCoin3D ENDP + +; Derive pose from absolute elapsed time; never alter bank, outcome or RNG here. +CoinPose3D PROC uses ebx esi timeMs:DWORD + local phase:DWORD,flightTime:DWORD,bounceTime:DWORD + mov coinX3D,414 + mov coinY3D,266 + mov coinGroundY3D,344 + mov coinWidth3D,32 + mov coinHeight3D,12 + mov coinShadowRadius3D,30 + mov coinShadowAlpha3D,90 + mov coinHandY3D,240 + mov coinHandPose3D,0 + mov eax,coin3d_choice + dec eax + mov coinFace3D,eax + shl eax,8 + mov coinAngle3D,eax + cmp coin3d_state,COIN_IDLE + je coin_pose_done + mov eax,timeMs + cmp eax,COIN_RELEASE_MS + jae coin_pose_air + xor edx,edx + mov ecx,60 + div ecx + mov coinHandPose3D,eax + ret +coin_pose_air: + sub eax,COIN_RELEASE_MS + mov flightTime,eax + mov ebx,eax + xor edx,edx + mov ecx,65 + div ecx + add eax,5 + cmp eax,15 + jbe @F + mov eax,15 +@@: + mov coinHandPose3D,eax + cmp ebx,200 + jb @F + sub ebx,200 + shr ebx,1 + cmp ebx,300 + jbe coin_pose_withdraw + mov ebx,300 +coin_pose_withdraw: + add coinHandY3D,ebx +@@: + cmp flightTime,COIN_FLIGHT_MS + jae coin_pose_landing + mov eax,flightTime + shl eax,16 + xor edx,edx + mov ecx,COIN_FLIGHT_MS + div ecx + mov phase,eax + imul eax,94 + shr eax,16 + sub coinX3D,eax + ; Ballistic height from the thumb to the felt, with no mid-air easing/hover. + mov eax,FP_1 + sub eax,phase + mul phase + shrd eax,edx,16 + imul eax,480 + shr eax,16 + mov ebx,FP_1 + sub ebx,phase + imul ebx,78 + shr ebx,16 + add eax,ebx + mov ebx,coinGroundY3D + sub ebx,eax + mov coinY3D,ebx + shr eax,2 + sub coinShadowAlpha3D,eax + mov eax,coin3d_result + dec eax + shl eax,8 + add eax,2*512 + sub eax,coinStartPhase3D + mul phase + shrd eax,edx,16 + add eax,coinStartPhase3D + and eax,511 + mov coinAngle3D,eax + mov ebx,tableCos[eax*4] + mov coinFace3D,0 + test ebx,ebx + jns @F + neg ebx + mov coinFace3D,1 +@@: + imul ebx,32 + shr ebx,16 + cmp ebx,3 + jae @F + mov ebx,3 +@@: + mov coinHeight3D,ebx + ret +coin_pose_landing: + mov coinX3D,320 + mov coinY3D,344 + mov coinGroundY3D,344 + mov coinHeight3D,32 + mov coinShadowAlpha3D,110 + mov eax,coin3d_result + dec eax + mov coinFace3D,eax + shl eax,8 + mov coinAngle3D,eax + mov eax,flightTime + sub eax,COIN_FLIGHT_MS + mov bounceTime,eax + cmp eax,60 + jbe @F + mov eax,60 +@@: + mov ebx,eax + imul eax,18 + xor edx,edx + mov ecx,60 + div ecx + sub coinHeight3D,eax + mov eax,ebx + imul eax,24 + xor edx,edx + div ecx + add coinWidth3D,eax + mov eax,bounceTime + mov ebx,180 + mov esi,72 + cmp eax,180 + jb coin_pose_bounce + sub eax,180 + mov ebx,120 + mov esi,24 + cmp eax,120 + jae coin_pose_done +coin_pose_bounce: + shl eax,16 + xor edx,edx + div ebx + mov ecx,eax + neg eax + add eax,FP_1 + mul ecx + shrd eax,edx,16 + imul eax,esi + shr eax,16 + sub coinY3D,eax +coin_pose_done: + ret +CoinPose3D ENDP + +; Fractional shadow on actual framebuffer pixels, rather than a black rectangular sprite. +DrawCoinShadow3D PROC uses ebx esi edi centerX:DWORD,centerY:DWORD,radiusX:DWORD,radiusY:DWORD,opacity:DWORD + local row:DWORD,column:DWORD,dy2:DWORD,limit:DWORD,inverse:DWORD + mov eax,255 + sub eax,opacity + mov inverse,eax + mov eax,radiusX + imul eax,eax + mov ebx,radiusY + imul ebx,ebx + imul eax,ebx + mov limit,eax + mov eax,centerY + sub eax,radiusY + mov row,eax +coin_shadow_row: + mov eax,row + sub eax,centerY + imul eax,eax + imul eax,radiusX + imul eax,radiusX + mov dy2,eax + mov eax,centerX + sub eax,radiusX + mov column,eax +coin_shadow_pixel: + cmp row,SCREEN_H + jae coin_shadow_next + cmp column,SCREEN_W + jae coin_shadow_next + mov eax,column + sub eax,centerX + imul eax,eax + imul eax,radiusY + imul eax,radiusY + add eax,dy2 + cmp eax,limit + ja coin_shadow_next + mov edi,row + imul edi,SCREEN_W + add edi,column + lea edi,screenBuffer[edi*4] + mov esi,[edi] + xor ebx,ebx + xor ecx,ecx +coin_shadow_channel: + mov eax,esi + and eax,255 + imul eax,inverse + add eax,128 + mov edx,eax + shr edx,8 + add eax,edx + shr eax,8 + shl eax,cl + or ebx,eax + shr esi,8 + add ecx,8 + cmp ecx,24 + jb coin_shadow_channel + mov [edi],ebx +coin_shadow_next: + inc column + mov eax,centerX + add eax,radiusX + cmp column,eax + jle coin_shadow_pixel + inc row + mov eax,centerY + add eax,radiusY + cmp row,eax + jle coin_shadow_row + ret +DrawCoinShadow3D ENDP + +RenderNativeCoin3D PROC uses ebx esi edi + local x:DWORD,y:DWORD,tint:DWORD + cmp coinArtReady3D,1 + jne coin_render_missing + mov esi,coinTableArt3D.pixels + lea edi,screenBuffer + mov ecx,SCREEN_SIZE + rep movsd + invoke CoinPose3D,coin3d_timer + cmp coin3d_timer,COIN_RELEASE_MS + jae coin_render_released + invoke DrawAnimSprite3D,OFFSET coinHandsArt3D,coinHandPose3D,320,coinHandY3D,240,240 + jmp coin_render_hud +coin_render_released: + mov eax,coinGroundY3D + add eax,14 + invoke DrawCoinShadow3D,coinX3D,eax,coinShadowRadius3D,5,coinShadowAlpha3D + invoke DrawAnimSprite3D,OFFSET coinHandsArt3D,coinHandPose3D,320,coinHandY3D,240,240 + mov eax,coinWidth3D + shr eax,1 + neg eax + add eax,coinX3D + mov x,eax + mov eax,coinHeight3D + shr eax,1 + neg eax + add eax,coinY3D + mov y,eax + add eax,2 + invoke DrawAnimSprite3D,OFFSET coinFacesArt3D,coinFace3D,x,eax,coinWidth3D,coinHeight3D + invoke DrawAnimSprite3D,OFFSET coinFacesArt3D,coinFace3D,x,y,coinWidth3D,coinHeight3D +coin_render_hud: + invoke DrawBox,0,0,320,20,0014191Dh + invoke DrawString8x8,12,6,OFFSET coinTitle3D,00E5D29Eh + invoke DrawBoxBorder,198,3,48,14,00252D2Ah,0086754Eh,1 + invoke DrawString8x8,210,6,OFFSET coinDetailView3D,00E5D29Eh + invoke DrawBoxBorder,252,3,60,14,00252D2Ah,0086754Eh,1 + invoke DrawString8x8,266,6,OFFSET coinExitText3D,00E5D29Eh + invoke DrawBox,4,23,138,15,0014191Dh + invoke DrawString8x8,8,26,OFFSET coinBankText3D,00E5D29Eh + invoke DrawNumber,60,26,bankroll,00FFFFFFh + invoke DrawBox,0,194,320,46,0014191Dh + cmp coin3d_state,COIN_TOSS + je coin_render_toss_hud + cmp coin3d_state,COIN_RESULT + je coin_render_result_hud + invoke DrawString8x8,8,202,OFFSET coinStakeText3D,00E5D29Eh + invoke DrawNumber,72,202,coin3d_bet,00FFFFFFh + invoke DrawBoxBorder,118,199,16,16,003B3024h,00C6AA66h,1 + invoke DrawString8x8,122,203,OFFSET coinMinusText3D,00FFFFFFh + invoke DrawBoxBorder,140,199,16,16,003B3024h,00C6AA66h,1 + invoke DrawString8x8,144,203,OFFSET coinPlusText3D,00FFFFFFh + cmp coinError3D,0 + je @F + invoke DrawString8x8,178,202,OFFSET coinLowBankText3D,00E99383h +@@: + mov tint,0086754Eh + cmp coin3d_choice,1 + jne @F + mov tint,00EAC96Dh +@@: + invoke DrawBoxBorder,8,219,90,18,00252D2Ah,tint,1 + invoke DrawString8x8,34,224,OFFSET coinHeadsText3D,00F4E7C8h + mov tint,0086754Eh + cmp coin3d_choice,2 + jne @F + mov tint,00EAC96Dh +@@: + invoke DrawBoxBorder,106,219,90,18,00252D2Ah,tint,1 + invoke DrawString8x8,132,224,OFFSET coinTailsText3D,00F4E7C8h + invoke DrawBoxBorder,220,219,92,18,00423929h,00C6AA66h,1 + invoke DrawString8x8,242,224,OFFSET coinFlipText3D,00FFFFFFh + jmp coin_render_done +coin_render_toss_hud: + mov eax,OFFSET coinTossText3D + cmp coin3d_timer,COIN_RELEASE_MS + jae @F + mov eax,OFFSET coinPrepareText3D +@@: + cmp coin3d_timer,COIN_LAND_MS + jb @F + mov eax,OFFSET coinLandingText3D +@@: + cmp coinExitQueued3D,0 + je @F + mov eax,OFFSET coinLeavingText3D +@@: + invoke DrawString8x8,82,214,eax,00E5D29Eh + jmp coin_render_done +coin_render_result_hud: + mov eax,OFFSET coinHeadsText3D + cmp coin3d_result,1 + je @F + mov eax,OFFSET coinTailsText3D +@@: + invoke DrawString8x8,8,202,eax,00E5D29Eh + invoke DrawString8x8,140,202,OFFSET coinReturnText3D,00E5D29Eh + invoke DrawNumber,212,202,coin3d_win,00FFFFFFh + invoke DrawBoxBorder,220,219,92,18,003B3024h,00C6AA66h,1 + invoke DrawString8x8,238,224,OFFSET coinAgainText3D,00FFFFFFh + jmp coin_render_done +coin_render_missing: + invoke DrawBox,0,0,320,240,0014191Dh + invoke DrawString8x8,76,108,OFFSET coinMissingText3D,00E5D29Eh +coin_render_done: + call UpdateCoinDetail3D + ret +RenderNativeCoin3D ENDP + +include src_graphics\coin_detail.inc diff --git a/src_graphics/native_durak.inc b/src_graphics/native_durak.inc index a87d135..e72ca2f 100644 --- a/src_graphics/native_durak.inc +++ b/src_graphics/native_durak.inc @@ -1,888 +1,891 @@ -InitNativeDurak3D PROC - call LoadCardTableAssets3D - mov cardExitActive3D, 0 - mov dkState3D, DK_IDLE - mov dkStake3D, 0 - mov dkError3D, 0 - mov durakPlayerCnt, 0 - mov durakAICnt, 0 - mov durakDeckLeft, 0 - mov dkPendingCard3D, 0FFFFFFFFh - call ClearDurakTable - call ClearKeys3D - ret -InitNativeDurak3D ENDP - -; Removing ranks 2..5 from a uniformly shuffled deck preserves uniformity. -; The exposed trump remains in the talon and is dealt last. -StartNativeDurak3D PROC uses ebx esi edi - cmp dkState3D, DK_IDLE - je @F - cmp dkState3D, DK_RESULT - jne dk_start_done -@@: - mov eax, dkBet3D - cmp bankroll, eax - jb dk_start_no_cash - sub bankroll, eax - mov dkStake3D, eax - invoke ShuffleCards3D, OFFSET dkDeck3D - xor esi, esi - xor edi, edi -dk_compact: - mov ebx, dkDeck3D[esi*4] - invoke DurakCardRank, ebx - cmp eax, 4 - jb @F - mov dkDeck3D[edi*4], ebx - inc edi -@@: - inc esi - cmp esi, 52 - jb dk_compact - mov eax, dkDeck3D[35*4] - mov durakTrumpCard, eax - invoke DurakCardSuit, eax - mov durakTrumpSuit, eax - mov durakPlayerCnt, 0 - mov durakAICnt, 0 - mov dkCursor3D, 0 - mov durakDeckLeft, 36 - mov dkDiscardCount3D, 0 - mov dkBouts3D, 0 - mov dkError3D, 0 - mov dkSelection3D, 0 - mov dkPage3D, 0 - mov dkTaking3D, 0 - mov dkPendingCard3D, 0FFFFFFFFh - call ClearDurakTable - xor esi, esi -dk_deal_hands: - mov eax, dkDeck3D[esi*8] - invoke AddDurakCard, OFFSET durakPlayerHand, OFFSET durakPlayerCnt, eax - mov eax, dkDeck3D[esi*8+4] - invoke AddDurakCard, OFFSET durakAIHand, OFFSET durakAICnt, eax - inc esi - cmp esi, 6 - jb dk_deal_hands - mov dkCursor3D, 12 - mov durakDeckLeft, 24 - ; First attacker: holder of the lowest trump, random if neither has one. - mov edi, 0FFFFFFFFh - xor ebx, ebx - xor esi, esi -dk_low_trump: - mov eax, durakPlayerHand[esi*4] - cmp ebx, 0 - je @F - mov eax, durakAIHand[esi*4] -@@: - push eax - invoke DurakCardSuit, eax - pop edx - cmp eax, durakTrumpSuit - jne dk_low_next - cmp edx, edi - jae dk_low_next - mov edi, edx - mov dkAttacker3D, ebx -dk_low_next: - inc esi - cmp esi, 6 - jb dk_low_trump - xor esi, esi - inc ebx - cmp ebx, 2 - jb dk_low_trump - cmp edi, 0FFFFFFFFh - jne @F - invoke RandomRange3D, 2 - mov dkAttacker3D, eax -@@: - mov eax, dkAttacker3D - mov dkActor3D, eax - mov dkTimer3D, 0 - mov dkState3D, DK_DEAL - call ClearKeys3D - invoke PlayCasinoSound3D, OFFSET soundCards, 0, 1 - call SaveProgress3D -dk_start_done: - ret -dk_start_no_cash: - mov dkError3D, 1 - ret -StartNativeDurak3D ENDP - -NativeDurakSettle3D PROC result:DWORD - cmp dkState3D, DK_RESULT - je dk_settle_done - mov dkState3D, DK_RESULT - mov eax, result - mov dkOutcome3D, eax - cmp eax, 1 - je dk_settle_loss - mov eax, dkStake3D - cmp result, 2 - je @F - shl eax, 1 -@@: - add bankroll, eax - invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 - jmp dk_settle_save -dk_settle_loss: - invoke PlayCasinoSound3D, OFFSET soundRoundLose, 0, 1 -dk_settle_save: - call ClearKeys3D - xor eax,eax - cmp dkOutcome3D,0 - sete al - invoke NpcRecordRound3D,5,eax - call SaveProgress3D -dk_settle_done: - ret -NativeDurakSettle3D ENDP - -DurakClampSelection3D PROC - mov eax, durakPlayerCnt - test eax, eax - jz dk_select_zero - cmp dkSelection3D, eax - jb dk_select_page - dec eax - mov dkSelection3D, eax -dk_select_page: - mov eax, dkSelection3D - shr eax, 3 - shl eax, 3 - mov dkPage3D, eax - ret -dk_select_zero: - mov dkSelection3D, 0 - mov dkPage3D, 0 - ret -DurakClampSelection3D ENDP - -DurakMoveSelection3D PROC amount:SDWORD - cmp durakPlayerCnt, 0 - je dk_move_done - mov eax, dkSelection3D - add eax, amount - jns @F - mov eax, durakPlayerCnt - dec eax -@@: - cmp eax, durakPlayerCnt - jb @F - xor eax, eax -@@: - mov dkSelection3D, eax - call DurakClampSelection3D -dk_move_done: - ret -DurakMoveSelection3D ENDP - -DurakBeginBout3D PROC - call ClearDurakTable - mov eax, dkAttacker3D - mov dkOriginal3D, eax - mov dkActor3D, eax - xor eax, 1 - mov ecx, durakPlayerCnt - test eax, eax - jz @F - mov ecx, durakAICnt -@@: - cmp ecx, 6 - jbe @F - mov ecx, 6 -@@: - mov dkLimit3D, ecx - mov dkTaking3D, 0 - mov dkState3D, DK_TURN - mov dkTimer3D, 0 - mov dkError3D, 0 - inc dkBouts3D - call DurakClampSelection3D - call ClearKeys3D - ret -DurakBeginBout3D ENDP - -DurakCanTransfer3D PROC uses ebx actor:DWORD,card:DWORD - cmp dkVariant3D, 0 - je dk_transfer_no - cmp dkTaking3D, 0 - jne dk_transfer_no - mov eax, actor - cmp eax, dkAttacker3D - je dk_transfer_no - cmp durakTableCnt, 0 - je dk_transfer_no - cmp durakTableCnt, 6 - jae dk_transfer_no - call DurakTableHasDefense - test eax, eax - jnz dk_transfer_no - invoke DurakCardRank, card - mov ebx, eax - invoke DurakCardRank, durakAttackCards[0] - cmp eax, ebx - jne dk_transfer_no - mov eax, durakPlayerCnt - cmp actor, 1 - je @F - mov eax, durakAICnt -@@: - cmp eax, durakTableCnt - jbe dk_transfer_no - mov eax, 1 - ret -dk_transfer_no: - xor eax, eax - ret -DurakCanTransfer3D ENDP - -DurakCanPlay3D PROC uses ebx esi actor:DWORD,index:DWORD,kind:DWORD - cmp dkState3D, DK_TURN - jne dk_can_no - mov eax, actor - cmp eax, dkActor3D - jne dk_can_no - mov esi, OFFSET durakPlayerHand - mov ecx, durakPlayerCnt - test eax, eax - jz @F - mov esi, OFFSET durakAIHand - mov ecx, durakAICnt -@@: - mov eax, index - cmp eax, ecx - jae dk_can_no - mov ebx, [esi+eax*4] - cmp kind, DK_TRANSFER - jne @F - invoke DurakCanTransfer3D, actor, ebx - ret -@@: - cmp kind, DK_DEFEND - jne dk_can_attack - cmp dkTaking3D, 0 - jne dk_can_no - mov eax, actor - cmp eax, dkAttacker3D - je dk_can_no - call DurakFirstUnbeaten - cmp eax, 0FFFFFFFFh - je dk_can_no - invoke CanDurakBeat, durakAttackCards[eax*4], ebx - ret -dk_can_attack: - cmp kind, DK_ATTACK - jne dk_can_no - mov eax, actor - cmp eax, dkAttacker3D - jne dk_can_no - mov eax, durakTableCnt - cmp eax, dkLimit3D - jae dk_can_no - test eax, eax - jz dk_can_yes - invoke DurakRankOnTable, ebx - ret -dk_can_yes: - mov eax, 1 - ret -dk_can_no: - xor eax, eax - ret -DurakCanPlay3D ENDP - -; A card has one owner even while moving: removed from the hand, committed -; to its table slot only when this nonblocking flight finishes. -DurakPlay3D PROC uses ebx esi actor:DWORD,index:DWORD,kind:DWORD - invoke DurakCanPlay3D, actor, index, kind - test eax, eax - jz dk_play_invalid - mov eax, actor - mov dkPendingActor3D, eax - mov eax, kind - mov dkPendingKind3D, eax - mov eax, durakTableCnt - cmp kind, DK_DEFEND - jne @F - call DurakFirstUnbeaten -@@: - mov dkPendingSlot3D, eax - imul eax, 40 - add eax, 12 - mov dkTargetY3D, 98 - cmp kind, DK_DEFEND - jne @F - add eax, 6 - mov dkTargetY3D, 106 -@@: - mov dkTargetX3D, eax - mov eax, index - and eax, 7 - imul eax, 35 - add eax, 20 - mov dkPendingX3D, eax - mov dkPendingY3D, 168 - cmp actor, 0 - je dk_play_player - mov dkPendingX3D, 144 - mov dkPendingY3D, 48 - invoke RemoveDurakCard, OFFSET durakAIHand, OFFSET durakAICnt, index - jmp dk_play_removed -dk_play_player: - invoke RemoveDurakCard, OFFSET durakPlayerHand, OFFSET durakPlayerCnt, index -dk_play_removed: - mov dkPendingCard3D, eax - mov dkState3D, DK_FLIGHT - mov dkTimer3D, 0 - mov dkError3D, 0 - call DurakClampSelection3D - call ClearKeys3D - invoke PlayCasinoSound3D, OFFSET soundCards, 0, 1 - mov eax, 1 - ret -dk_play_invalid: - mov dkError3D, 2 - xor eax, eax - ret -DurakPlay3D ENDP - -DurakCommitFlight3D PROC uses ebx - cmp dkState3D, DK_FLIGHT - jne dk_commit_done - mov eax, dkPendingCard3D - cmp dkPendingKind3D, DK_DEFEND - jne dk_commit_attack - mov ebx, dkPendingSlot3D - mov durakDefenseCards[ebx*4], eax - jmp dk_commit_turn -dk_commit_attack: - call AddDurakAttack - cmp dkPendingKind3D, DK_TRANSFER - jne dk_commit_turn - mov eax, dkPendingActor3D - mov dkAttacker3D, eax - mov ecx, durakPlayerCnt - test eax, eax - jnz @F - mov ecx, durakAICnt -@@: - cmp ecx, 6 - jbe @F - mov ecx, 6 -@@: - mov dkLimit3D, ecx -dk_commit_turn: - mov dkPendingCard3D, 0FFFFFFFFh - mov eax, dkAttacker3D - cmp dkTaking3D, 0 - jne dk_commit_actor - push eax - call DurakAllDefended - test eax, eax - pop eax - jnz dk_commit_actor - xor eax, 1 -dk_commit_actor: - mov dkActor3D, eax - mov dkState3D, DK_TURN - mov dkTimer3D, 0 - call ClearKeys3D -dk_commit_done: - ret -DurakCommitFlight3D ENDP - -DurakTake3D PROC actor:DWORD - cmp dkState3D, DK_TURN - jne dk_take_done - mov eax, actor - cmp eax, dkActor3D - jne dk_take_done - cmp eax, dkAttacker3D - je dk_take_done - cmp dkTaking3D, 0 - jne dk_take_done - cmp durakTableCnt, 0 - je dk_take_done - mov dkTaking3D, 1 - mov eax, dkAttacker3D - mov dkActor3D, eax - mov dkTimer3D, 0 - mov dkError3D, 0 - call ClearKeys3D -dk_take_done: - ret -DurakTake3D ENDP - -DurakFinish3D PROC actor:DWORD - cmp dkState3D, DK_TURN - jne dk_finish_done - mov eax, actor - cmp eax, dkActor3D - jne dk_finish_done - cmp eax, dkAttacker3D - jne dk_finish_done - cmp durakTableCnt, 0 - je dk_finish_done - cmp dkTaking3D, 0 - jne dk_finish_sweep - call DurakAllDefended - test eax, eax - jz dk_finish_done -dk_finish_sweep: - mov dkState3D, DK_SWEEP - mov dkTimer3D, 0 - mov dkError3D, 0 - call ClearKeys3D -dk_finish_done: - ret -DurakFinish3D ENDP - -DurakRefill3D PROC uses ebx esi actor:DWORD - mov ebx, OFFSET durakPlayerCnt - mov esi, OFFSET durakPlayerHand - cmp actor, 0 - je @F - mov ebx, OFFSET durakAICnt - mov esi, OFFSET durakAIHand -@@: -dk_refill_loop: - cmp DWORD PTR [ebx], 6 - jae dk_refill_done - cmp dkCursor3D, 36 - jae dk_refill_done - mov eax, dkCursor3D - mov eax, dkDeck3D[eax*4] - invoke AddDurakCard, esi, ebx, eax - inc dkCursor3D - dec durakDeckLeft - jmp dk_refill_loop -dk_refill_done: - ret -DurakRefill3D ENDP - -DurakResolveBout3D PROC uses ebx esi - cmp dkState3D, DK_SWEEP - jne dk_resolve_done - cmp dkTaking3D, 0 - je dk_discard - cmp dkAttacker3D, 0 - je dk_collect_ai - invoke CollectDurakTable, OFFSET durakPlayerHand, OFFSET durakPlayerCnt - jmp dk_bout_refill -dk_collect_ai: - invoke CollectDurakTable, OFFSET durakAIHand, OFFSET durakAICnt - jmp dk_bout_refill -dk_discard: - xor esi, esi - mov ebx, dkDiscardCount3D -dk_discard_pair: - cmp esi, durakTableCnt - jae dk_discard_done - mov eax, durakAttackCards[esi*4] - mov dkDiscard3D[ebx*4], eax - inc ebx - mov eax, durakDefenseCards[esi*4] - mov dkDiscard3D[ebx*4], eax - inc ebx - inc esi - jmp dk_discard_pair -dk_discard_done: - mov dkDiscardCount3D, ebx - call ClearDurakTable -dk_bout_refill: - invoke DurakRefill3D, dkOriginal3D - mov eax, dkOriginal3D - xor eax, 1 - invoke DurakRefill3D, eax - call CheckDurakEnd - test eax, eax - jz dk_continue_bout - dec eax ; legacy 1=win, 2=loss, 3=draw - invoke NativeDurakSettle3D, eax - ret -dk_continue_bout: - ; A defensive turn that takes the pile is skipped. - cmp dkTaking3D, 0 - jne @F - xor dkAttacker3D, 1 -@@: - ; A pathological repeating take cycle is a push, not an arbitrary loss. - cmp dkBouts3D, 300 - jb @F - invoke NativeDurakSettle3D, 2 - ret -@@: - call DurakBeginBout3D -dk_resolve_done: - ret -DurakResolveBout3D ENDP - -DurakCardValue3D PROC uses ebx card:DWORD - invoke DurakCardRank, card - mov ebx, eax - invoke DurakCardSuit, card - cmp eax, durakTrumpSuit - jne @F - add ebx, 32 -@@: - mov eax, ebx - ret -DurakCardValue3D ENDP - -; AI sees only its own cards, public table/trump and the defender's count. -; This helper also serves the deterministic regression player's legal moves. -DurakFindMove3D PROC uses ebx esi edi actor:DWORD,kind:DWORD - local bestValue:DWORD,bestIndex:DWORD,handPtr:DWORD,handCount:DWORD - mov bestValue, 0FFFFFFFFh - mov bestIndex, 0FFFFFFFFh - mov handPtr, OFFSET durakPlayerHand - mov eax, durakPlayerCnt - cmp actor, 0 - je @F - mov handPtr, OFFSET durakAIHand - mov eax, durakAICnt -@@: - mov handCount, eax - xor esi, esi -dk_find_card: - cmp esi, handCount - jae dk_find_done - invoke DurakCanPlay3D, actor, esi, kind - test eax, eax - jz dk_find_next - mov ebx, handPtr - invoke DurakCardValue3D, DWORD PTR [ebx+esi*4] - cmp eax, bestValue - jae dk_find_next - mov bestValue, eax - mov bestIndex, esi -dk_find_next: - inc esi - jmp dk_find_card -dk_find_done: - mov eax, bestIndex - ret -DurakFindMove3D ENDP - -DurakAITurn3D PROC - cmp dkAttacker3D, 1 - je dk_ai_attack - invoke DurakFindMove3D, 1, DK_TRANSFER - cmp eax, 0FFFFFFFFh - je @F - invoke DurakPlay3D, 1, eax, DK_TRANSFER - ret -@@: - invoke DurakFindMove3D, 1, DK_DEFEND - cmp eax, 0FFFFFFFFh - je dk_ai_take - invoke DurakPlay3D, 1, eax, DK_DEFEND - ret -dk_ai_take: - invoke DurakTake3D, 1 - ret -dk_ai_attack: - invoke DurakFindMove3D, 1, DK_ATTACK - cmp eax, 0FFFFFFFFh - je dk_ai_finish - invoke DurakPlay3D, 1, eax, DK_ATTACK - ret -dk_ai_finish: - invoke DurakFinish3D, 1 - ret -DurakAITurn3D ENDP - -DurakMouse3D PROC uses ebx - cmp mouseClick3D, 0 - je dk_mouse_done - mov mouseClick3D, 0 - cmp mouseY3D, 3 - jb dk_mouse_done - cmp mouseY3D, 17 - jae @F - cmp mouseX3D, 252 - jb dk_mouse_done - cmp mouseX3D, 312 - jae dk_mouse_done - call RequestCardExit3D - ret -@@: - cmp dkState3D, DK_IDLE - je dk_mouse_ready - cmp dkState3D, DK_RESULT - je dk_mouse_ready - cmp dkState3D, DK_TURN - jne dk_mouse_done - cmp dkActor3D, 0 - jne dk_mouse_done - cmp mouseY3D, 168 - jb dk_mouse_actions - cmp mouseY3D, 216 - jae dk_mouse_actions - cmp mouseX3D, 16 - jb dk_mouse_prev - cmp mouseX3D, 304 - jae dk_mouse_next - mov eax, mouseX3D - sub eax, 20 - js dk_mouse_done - xor edx, edx - mov ecx, 35 - div ecx - cmp edx, 34 - jae dk_mouse_done - cmp eax, 8 - jae dk_mouse_done - add eax, dkPage3D - cmp eax, durakPlayerCnt - jae dk_mouse_done - mov dkSelection3D, eax - ret -dk_mouse_prev: - cmp durakPlayerCnt, DK_PAGE_SIZE - jbe dk_mouse_done - cmp mouseX3D, 2 - jb dk_mouse_done - cmp mouseY3D, 180 - jb dk_mouse_done - cmp mouseY3D, 200 - jae dk_mouse_done - mov pressedKeys3D[21h], 1 - ret -dk_mouse_next: - cmp durakPlayerCnt, DK_PAGE_SIZE - jbe dk_mouse_done - cmp mouseX3D, 318 - jae dk_mouse_done - cmp mouseY3D, 180 - jb dk_mouse_done - cmp mouseY3D, 200 - jae dk_mouse_done - mov pressedKeys3D[22h], 1 - ret -dk_mouse_actions: - cmp mouseY3D, 222 - jb dk_mouse_done - cmp mouseY3D, 238 - jae dk_mouse_done - mov eax, mouseX3D - mov ecx, 0Dh - cmp eax, 8 - jb dk_mouse_done - cmp eax, 78 - jb dk_mouse_key - mov ecx, 42h - cmp eax, 86 - jb dk_mouse_done - cmp eax, 156 - jb dk_mouse_key - mov ecx, 54h - cmp eax, 164 - jb dk_mouse_done - cmp eax, 234 - jb dk_mouse_key - mov ecx, 44h - cmp eax, 242 - jb dk_mouse_done - cmp eax, 312 - jb dk_mouse_key - ret -dk_mouse_ready: - cmp mouseY3D, 222 - jb dk_mouse_bet - cmp mouseY3D, 238 - jae dk_mouse_done - cmp mouseX3D, 8 - jb dk_mouse_done - cmp mouseX3D, 118 - jb dk_mouse_variant - cmp mouseX3D, 125 - jb dk_mouse_done - cmp mouseX3D, 195 - jae dk_mouse_done - mov ecx, 20h - jmp dk_mouse_key -dk_mouse_variant: - mov ecx, 54h - jmp dk_mouse_key -dk_mouse_bet: - cmp mouseY3D, 199 - jb dk_mouse_done - cmp mouseY3D, 215 - jae dk_mouse_done - cmp mouseX3D, 11 - jb dk_mouse_done - mov ecx, 28h - cmp mouseX3D, 29 - jb dk_mouse_key - cmp mouseX3D, 35 - jb dk_mouse_done - cmp mouseX3D, 53 - jae dk_mouse_done - mov ecx, 26h -dk_mouse_key: - mov pressedKeys3D[ecx], 1 -dk_mouse_done: - ret -DurakMouse3D ENDP - -HandleNativeDurak3D PROC uses ebx - call HandleCardExit3D - test eax, eax - jnz dk_input_done - call DurakMouse3D - cmp cardExitActive3D, 0 - jne dk_input_done - cmp engineMode, MODE_DURAK - jne dk_input_done - cmp dkState3D, DK_IDLE - je dk_ready_input - cmp dkState3D, DK_RESULT - je dk_ready_input - mov eax, deltaTime3D - add dkTimer3D, eax - cmp dkState3D, DK_DEAL - jne @F - cmp dkTimer3D, TABLE_FLIGHT_MS*12 - jb dk_input_done - call DurakBeginBout3D - ret -@@: - cmp dkState3D, DK_FLIGHT - jne @F - cmp dkTimer3D, TABLE_FLIGHT_MS - jb dk_input_done - call DurakCommitFlight3D - ret -@@: - cmp dkState3D, DK_SWEEP - jne @F - cmp dkTimer3D, 600 - jb dk_input_done - call DurakResolveBout3D - ret -@@: - cmp dkState3D, DK_TURN - jne dk_input_done - cmp dkActor3D, 0 - je dk_player_input - cmp dkTimer3D, 650 - jb dk_input_done - call DurakAITurn3D - ret -dk_player_input: - invoke Pressed3D, 25h - test eax, eax - jz @F - invoke DurakMoveSelection3D, -1 -@@: - invoke Pressed3D, 27h - test eax, eax - jz @F - invoke DurakMoveSelection3D, 1 -@@: - invoke Pressed3D, 21h - test eax, eax - jz @F - invoke DurakMoveSelection3D, -8 -@@: - invoke Pressed3D, 22h - test eax, eax - jz @F - invoke DurakMoveSelection3D, 8 -@@: - mov ebx, 31h -dk_number_select: - invoke Pressed3D, ebx - test eax, eax - jz @F - mov eax, ebx - sub eax, 31h - add eax, dkPage3D - cmp eax, durakPlayerCnt - jae @F - mov dkSelection3D, eax -@@: - inc ebx - cmp ebx, 39h - jb dk_number_select - invoke Pressed3D, 42h - test eax, eax - jz @F - invoke DurakTake3D, 0 - ret -@@: - invoke Pressed3D, 44h - test eax, eax - jz @F - invoke DurakFinish3D, 0 - ret -@@: - invoke Pressed3D, 54h - test eax, eax - jz @F - invoke DurakPlay3D, 0, dkSelection3D, DK_TRANSFER - ret -@@: - invoke Pressed3D, 0Dh - test eax, eax - jnz dk_player_play - invoke Pressed3D, 20h - test eax, eax - jz dk_input_done -dk_player_play: - mov eax, DK_ATTACK - cmp dkAttacker3D, 0 - je @F - mov eax, DK_DEFEND -@@: - invoke DurakPlay3D, 0, dkSelection3D, eax - ret -dk_ready_input: - invoke Pressed3D, 54h - test eax, eax - jz @F - xor dkVariant3D, 1 -@@: - invoke Pressed3D, 26h - test eax, eax - jz @F - cmp dkBet3D, 10000 - jae @F - add dkBet3D, 100 -@@: - invoke Pressed3D, 28h - test eax, eax - jz @F - cmp dkBet3D, 100 - jbe @F - sub dkBet3D, 100 -@@: - invoke Pressed3D, 20h - test eax, eax - jnz dk_ready_start - invoke Pressed3D, 0Dh - test eax, eax - jz dk_input_done -dk_ready_start: - cmp tournamentMode, 1 - jne @F - cmp dkState3D, DK_RESULT - jne @F - cmp dkOutcome3D, 0 - jne dk_tourney_loss - invoke TowerReportRoundOutcome, 1 - ret -dk_tourney_loss: - invoke TowerReportRoundOutcome, 2 - ret -@@: - call StartNativeDurak3D -dk_input_done: - ret -HandleNativeDurak3D ENDP +InitNativeDurak3D PROC + call LoadCardTableAssets3D + mov cardExitActive3D, 0 + mov dkState3D, DK_IDLE + mov dkStake3D, 0 + mov dkError3D, 0 + mov durakPlayerCnt, 0 + mov durakAICnt, 0 + mov durakDeckLeft, 0 + mov dkPendingCard3D, 0FFFFFFFFh + call ClearDurakTable + call ClearKeys3D + ret +InitNativeDurak3D ENDP + +; Removing ranks 2..5 from a uniformly shuffled deck preserves uniformity. +; The exposed trump remains in the talon and is dealt last. +StartNativeDurak3D PROC uses ebx esi edi + cmp dkState3D, DK_IDLE + je @F + cmp dkState3D, DK_RESULT + jne dk_start_done +@@: + mov eax, dkBet3D + cmp bankroll, eax + jb dk_start_no_cash + sub bankroll, eax + mov dkStake3D, eax + invoke ShuffleCards3D, OFFSET dkDeck3D + xor esi, esi + xor edi, edi +dk_compact: + mov ebx, dkDeck3D[esi*4] + invoke DurakCardRank, ebx + cmp eax, 4 + jb @F + mov dkDeck3D[edi*4], ebx + inc edi +@@: + inc esi + cmp esi, 52 + jb dk_compact + mov eax, dkDeck3D[35*4] + mov durakTrumpCard, eax + invoke DurakCardSuit, eax + mov durakTrumpSuit, eax + mov durakPlayerCnt, 0 + mov durakAICnt, 0 + mov dkCursor3D, 0 + mov durakDeckLeft, 36 + mov dkDiscardCount3D, 0 + mov dkBouts3D, 0 + mov dkError3D, 0 + mov dkSelection3D, 0 + mov dkPage3D, 0 + mov dkTaking3D, 0 + mov dkPendingCard3D, 0FFFFFFFFh + call ClearDurakTable + xor esi, esi +dk_deal_hands: + mov eax, dkDeck3D[esi*8] + invoke AddDurakCard, OFFSET durakPlayerHand, OFFSET durakPlayerCnt, eax + mov eax, dkDeck3D[esi*8+4] + invoke AddDurakCard, OFFSET durakAIHand, OFFSET durakAICnt, eax + inc esi + cmp esi, 6 + jb dk_deal_hands + mov dkCursor3D, 12 + mov durakDeckLeft, 24 + ; First attacker: holder of the lowest trump, random if neither has one. + mov edi, 0FFFFFFFFh + xor ebx, ebx + xor esi, esi +dk_low_trump: + mov eax, durakPlayerHand[esi*4] + cmp ebx, 0 + je @F + mov eax, durakAIHand[esi*4] +@@: + push eax + invoke DurakCardSuit, eax + pop edx + cmp eax, durakTrumpSuit + jne dk_low_next + cmp edx, edi + jae dk_low_next + mov edi, edx + mov dkAttacker3D, ebx +dk_low_next: + inc esi + cmp esi, 6 + jb dk_low_trump + xor esi, esi + inc ebx + cmp ebx, 2 + jb dk_low_trump + cmp edi, 0FFFFFFFFh + jne @F + invoke RandomRange3D, 2 + mov dkAttacker3D, eax +@@: + mov eax, dkAttacker3D + mov dkActor3D, eax + mov dkTimer3D, 0 + mov dkState3D, DK_DEAL + call ClearKeys3D + invoke PlayCasinoSound3D, OFFSET soundCards, 0, 1 + call SaveProgress3D +dk_start_done: + ret +dk_start_no_cash: + mov dkError3D, 1 + ret +StartNativeDurak3D ENDP + +NativeDurakSettle3D PROC result:DWORD + cmp dkState3D, DK_RESULT + je dk_settle_done + mov dkState3D, DK_RESULT + mov eax, result + mov dkOutcome3D, eax + cmp eax, 1 + je dk_settle_loss + mov eax, dkStake3D + cmp result, 2 + je @F + shl eax, 1 +@@: + add bankroll, eax + invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 + jmp dk_settle_save +dk_settle_loss: + invoke TriggerCharmLossProtection, dkStake3D + test eax, eax + jnz dk_settle_save + invoke PlayCasinoSound3D, OFFSET soundRoundLose, 0, 1 +dk_settle_save: + call ClearKeys3D + xor eax,eax + cmp dkOutcome3D,0 + sete al + invoke NpcRecordRound3D,5,eax + call SaveProgress3D +dk_settle_done: + ret +NativeDurakSettle3D ENDP + +DurakClampSelection3D PROC + mov eax, durakPlayerCnt + test eax, eax + jz dk_select_zero + cmp dkSelection3D, eax + jb dk_select_page + dec eax + mov dkSelection3D, eax +dk_select_page: + mov eax, dkSelection3D + shr eax, 3 + shl eax, 3 + mov dkPage3D, eax + ret +dk_select_zero: + mov dkSelection3D, 0 + mov dkPage3D, 0 + ret +DurakClampSelection3D ENDP + +DurakMoveSelection3D PROC amount:SDWORD + cmp durakPlayerCnt, 0 + je dk_move_done + mov eax, dkSelection3D + add eax, amount + jns @F + mov eax, durakPlayerCnt + dec eax +@@: + cmp eax, durakPlayerCnt + jb @F + xor eax, eax +@@: + mov dkSelection3D, eax + call DurakClampSelection3D +dk_move_done: + ret +DurakMoveSelection3D ENDP + +DurakBeginBout3D PROC + call ClearDurakTable + mov eax, dkAttacker3D + mov dkOriginal3D, eax + mov dkActor3D, eax + xor eax, 1 + mov ecx, durakPlayerCnt + test eax, eax + jz @F + mov ecx, durakAICnt +@@: + cmp ecx, 6 + jbe @F + mov ecx, 6 +@@: + mov dkLimit3D, ecx + mov dkTaking3D, 0 + mov dkState3D, DK_TURN + mov dkTimer3D, 0 + mov dkError3D, 0 + inc dkBouts3D + call DurakClampSelection3D + call ClearKeys3D + ret +DurakBeginBout3D ENDP + +DurakCanTransfer3D PROC uses ebx actor:DWORD,card:DWORD + cmp dkVariant3D, 0 + je dk_transfer_no + cmp dkTaking3D, 0 + jne dk_transfer_no + mov eax, actor + cmp eax, dkAttacker3D + je dk_transfer_no + cmp durakTableCnt, 0 + je dk_transfer_no + cmp durakTableCnt, 6 + jae dk_transfer_no + call DurakTableHasDefense + test eax, eax + jnz dk_transfer_no + invoke DurakCardRank, card + mov ebx, eax + invoke DurakCardRank, durakAttackCards[0] + cmp eax, ebx + jne dk_transfer_no + mov eax, durakPlayerCnt + cmp actor, 1 + je @F + mov eax, durakAICnt +@@: + cmp eax, durakTableCnt + jbe dk_transfer_no + mov eax, 1 + ret +dk_transfer_no: + xor eax, eax + ret +DurakCanTransfer3D ENDP + +DurakCanPlay3D PROC uses ebx esi actor:DWORD,index:DWORD,kind:DWORD + cmp dkState3D, DK_TURN + jne dk_can_no + mov eax, actor + cmp eax, dkActor3D + jne dk_can_no + mov esi, OFFSET durakPlayerHand + mov ecx, durakPlayerCnt + test eax, eax + jz @F + mov esi, OFFSET durakAIHand + mov ecx, durakAICnt +@@: + mov eax, index + cmp eax, ecx + jae dk_can_no + mov ebx, [esi+eax*4] + cmp kind, DK_TRANSFER + jne @F + invoke DurakCanTransfer3D, actor, ebx + ret +@@: + cmp kind, DK_DEFEND + jne dk_can_attack + cmp dkTaking3D, 0 + jne dk_can_no + mov eax, actor + cmp eax, dkAttacker3D + je dk_can_no + call DurakFirstUnbeaten + cmp eax, 0FFFFFFFFh + je dk_can_no + invoke CanDurakBeat, durakAttackCards[eax*4], ebx + ret +dk_can_attack: + cmp kind, DK_ATTACK + jne dk_can_no + mov eax, actor + cmp eax, dkAttacker3D + jne dk_can_no + mov eax, durakTableCnt + cmp eax, dkLimit3D + jae dk_can_no + test eax, eax + jz dk_can_yes + invoke DurakRankOnTable, ebx + ret +dk_can_yes: + mov eax, 1 + ret +dk_can_no: + xor eax, eax + ret +DurakCanPlay3D ENDP + +; A card has one owner even while moving: removed from the hand, committed +; to its table slot only when this nonblocking flight finishes. +DurakPlay3D PROC uses ebx esi actor:DWORD,index:DWORD,kind:DWORD + invoke DurakCanPlay3D, actor, index, kind + test eax, eax + jz dk_play_invalid + mov eax, actor + mov dkPendingActor3D, eax + mov eax, kind + mov dkPendingKind3D, eax + mov eax, durakTableCnt + cmp kind, DK_DEFEND + jne @F + call DurakFirstUnbeaten +@@: + mov dkPendingSlot3D, eax + imul eax, 40 + add eax, 12 + mov dkTargetY3D, 98 + cmp kind, DK_DEFEND + jne @F + add eax, 6 + mov dkTargetY3D, 106 +@@: + mov dkTargetX3D, eax + mov eax, index + and eax, 7 + imul eax, 35 + add eax, 20 + mov dkPendingX3D, eax + mov dkPendingY3D, 168 + cmp actor, 0 + je dk_play_player + mov dkPendingX3D, 144 + mov dkPendingY3D, 48 + invoke RemoveDurakCard, OFFSET durakAIHand, OFFSET durakAICnt, index + jmp dk_play_removed +dk_play_player: + invoke RemoveDurakCard, OFFSET durakPlayerHand, OFFSET durakPlayerCnt, index +dk_play_removed: + mov dkPendingCard3D, eax + mov dkState3D, DK_FLIGHT + mov dkTimer3D, 0 + mov dkError3D, 0 + call DurakClampSelection3D + call ClearKeys3D + invoke PlayCasinoSound3D, OFFSET soundCards, 0, 1 + mov eax, 1 + ret +dk_play_invalid: + mov dkError3D, 2 + xor eax, eax + ret +DurakPlay3D ENDP + +DurakCommitFlight3D PROC uses ebx + cmp dkState3D, DK_FLIGHT + jne dk_commit_done + mov eax, dkPendingCard3D + cmp dkPendingKind3D, DK_DEFEND + jne dk_commit_attack + mov ebx, dkPendingSlot3D + mov durakDefenseCards[ebx*4], eax + jmp dk_commit_turn +dk_commit_attack: + call AddDurakAttack + cmp dkPendingKind3D, DK_TRANSFER + jne dk_commit_turn + mov eax, dkPendingActor3D + mov dkAttacker3D, eax + mov ecx, durakPlayerCnt + test eax, eax + jnz @F + mov ecx, durakAICnt +@@: + cmp ecx, 6 + jbe @F + mov ecx, 6 +@@: + mov dkLimit3D, ecx +dk_commit_turn: + mov dkPendingCard3D, 0FFFFFFFFh + mov eax, dkAttacker3D + cmp dkTaking3D, 0 + jne dk_commit_actor + push eax + call DurakAllDefended + test eax, eax + pop eax + jnz dk_commit_actor + xor eax, 1 +dk_commit_actor: + mov dkActor3D, eax + mov dkState3D, DK_TURN + mov dkTimer3D, 0 + call ClearKeys3D +dk_commit_done: + ret +DurakCommitFlight3D ENDP + +DurakTake3D PROC actor:DWORD + cmp dkState3D, DK_TURN + jne dk_take_done + mov eax, actor + cmp eax, dkActor3D + jne dk_take_done + cmp eax, dkAttacker3D + je dk_take_done + cmp dkTaking3D, 0 + jne dk_take_done + cmp durakTableCnt, 0 + je dk_take_done + mov dkTaking3D, 1 + mov eax, dkAttacker3D + mov dkActor3D, eax + mov dkTimer3D, 0 + mov dkError3D, 0 + call ClearKeys3D +dk_take_done: + ret +DurakTake3D ENDP + +DurakFinish3D PROC actor:DWORD + cmp dkState3D, DK_TURN + jne dk_finish_done + mov eax, actor + cmp eax, dkActor3D + jne dk_finish_done + cmp eax, dkAttacker3D + jne dk_finish_done + cmp durakTableCnt, 0 + je dk_finish_done + cmp dkTaking3D, 0 + jne dk_finish_sweep + call DurakAllDefended + test eax, eax + jz dk_finish_done +dk_finish_sweep: + mov dkState3D, DK_SWEEP + mov dkTimer3D, 0 + mov dkError3D, 0 + call ClearKeys3D +dk_finish_done: + ret +DurakFinish3D ENDP + +DurakRefill3D PROC uses ebx esi actor:DWORD + mov ebx, OFFSET durakPlayerCnt + mov esi, OFFSET durakPlayerHand + cmp actor, 0 + je @F + mov ebx, OFFSET durakAICnt + mov esi, OFFSET durakAIHand +@@: +dk_refill_loop: + cmp DWORD PTR [ebx], 6 + jae dk_refill_done + cmp dkCursor3D, 36 + jae dk_refill_done + mov eax, dkCursor3D + mov eax, dkDeck3D[eax*4] + invoke AddDurakCard, esi, ebx, eax + inc dkCursor3D + dec durakDeckLeft + jmp dk_refill_loop +dk_refill_done: + ret +DurakRefill3D ENDP + +DurakResolveBout3D PROC uses ebx esi + cmp dkState3D, DK_SWEEP + jne dk_resolve_done + cmp dkTaking3D, 0 + je dk_discard + cmp dkAttacker3D, 0 + je dk_collect_ai + invoke CollectDurakTable, OFFSET durakPlayerHand, OFFSET durakPlayerCnt + jmp dk_bout_refill +dk_collect_ai: + invoke CollectDurakTable, OFFSET durakAIHand, OFFSET durakAICnt + jmp dk_bout_refill +dk_discard: + xor esi, esi + mov ebx, dkDiscardCount3D +dk_discard_pair: + cmp esi, durakTableCnt + jae dk_discard_done + mov eax, durakAttackCards[esi*4] + mov dkDiscard3D[ebx*4], eax + inc ebx + mov eax, durakDefenseCards[esi*4] + mov dkDiscard3D[ebx*4], eax + inc ebx + inc esi + jmp dk_discard_pair +dk_discard_done: + mov dkDiscardCount3D, ebx + call ClearDurakTable +dk_bout_refill: + invoke DurakRefill3D, dkOriginal3D + mov eax, dkOriginal3D + xor eax, 1 + invoke DurakRefill3D, eax + call CheckDurakEnd + test eax, eax + jz dk_continue_bout + dec eax ; legacy 1=win, 2=loss, 3=draw + invoke NativeDurakSettle3D, eax + ret +dk_continue_bout: + ; A defensive turn that takes the pile is skipped. + cmp dkTaking3D, 0 + jne @F + xor dkAttacker3D, 1 +@@: + ; A pathological repeating take cycle is a push, not an arbitrary loss. + cmp dkBouts3D, 300 + jb @F + invoke NativeDurakSettle3D, 2 + ret +@@: + call DurakBeginBout3D +dk_resolve_done: + ret +DurakResolveBout3D ENDP + +DurakCardValue3D PROC uses ebx card:DWORD + invoke DurakCardRank, card + mov ebx, eax + invoke DurakCardSuit, card + cmp eax, durakTrumpSuit + jne @F + add ebx, 32 +@@: + mov eax, ebx + ret +DurakCardValue3D ENDP + +; AI sees only its own cards, public table/trump and the defender's count. +; This helper also serves the deterministic regression player's legal moves. +DurakFindMove3D PROC uses ebx esi edi actor:DWORD,kind:DWORD + local bestValue:DWORD,bestIndex:DWORD,handPtr:DWORD,handCount:DWORD + mov bestValue, 0FFFFFFFFh + mov bestIndex, 0FFFFFFFFh + mov handPtr, OFFSET durakPlayerHand + mov eax, durakPlayerCnt + cmp actor, 0 + je @F + mov handPtr, OFFSET durakAIHand + mov eax, durakAICnt +@@: + mov handCount, eax + xor esi, esi +dk_find_card: + cmp esi, handCount + jae dk_find_done + invoke DurakCanPlay3D, actor, esi, kind + test eax, eax + jz dk_find_next + mov ebx, handPtr + invoke DurakCardValue3D, DWORD PTR [ebx+esi*4] + cmp eax, bestValue + jae dk_find_next + mov bestValue, eax + mov bestIndex, esi +dk_find_next: + inc esi + jmp dk_find_card +dk_find_done: + mov eax, bestIndex + ret +DurakFindMove3D ENDP + +DurakAITurn3D PROC + cmp dkAttacker3D, 1 + je dk_ai_attack + invoke DurakFindMove3D, 1, DK_TRANSFER + cmp eax, 0FFFFFFFFh + je @F + invoke DurakPlay3D, 1, eax, DK_TRANSFER + ret +@@: + invoke DurakFindMove3D, 1, DK_DEFEND + cmp eax, 0FFFFFFFFh + je dk_ai_take + invoke DurakPlay3D, 1, eax, DK_DEFEND + ret +dk_ai_take: + invoke DurakTake3D, 1 + ret +dk_ai_attack: + invoke DurakFindMove3D, 1, DK_ATTACK + cmp eax, 0FFFFFFFFh + je dk_ai_finish + invoke DurakPlay3D, 1, eax, DK_ATTACK + ret +dk_ai_finish: + invoke DurakFinish3D, 1 + ret +DurakAITurn3D ENDP + +DurakMouse3D PROC uses ebx + cmp mouseClick3D, 0 + je dk_mouse_done + mov mouseClick3D, 0 + cmp mouseY3D, 3 + jb dk_mouse_done + cmp mouseY3D, 17 + jae @F + cmp mouseX3D, 252 + jb dk_mouse_done + cmp mouseX3D, 312 + jae dk_mouse_done + call RequestCardExit3D + ret +@@: + cmp dkState3D, DK_IDLE + je dk_mouse_ready + cmp dkState3D, DK_RESULT + je dk_mouse_ready + cmp dkState3D, DK_TURN + jne dk_mouse_done + cmp dkActor3D, 0 + jne dk_mouse_done + cmp mouseY3D, 168 + jb dk_mouse_actions + cmp mouseY3D, 216 + jae dk_mouse_actions + cmp mouseX3D, 16 + jb dk_mouse_prev + cmp mouseX3D, 304 + jae dk_mouse_next + mov eax, mouseX3D + sub eax, 20 + js dk_mouse_done + xor edx, edx + mov ecx, 35 + div ecx + cmp edx, 34 + jae dk_mouse_done + cmp eax, 8 + jae dk_mouse_done + add eax, dkPage3D + cmp eax, durakPlayerCnt + jae dk_mouse_done + mov dkSelection3D, eax + ret +dk_mouse_prev: + cmp durakPlayerCnt, DK_PAGE_SIZE + jbe dk_mouse_done + cmp mouseX3D, 2 + jb dk_mouse_done + cmp mouseY3D, 180 + jb dk_mouse_done + cmp mouseY3D, 200 + jae dk_mouse_done + mov pressedKeys3D[21h], 1 + ret +dk_mouse_next: + cmp durakPlayerCnt, DK_PAGE_SIZE + jbe dk_mouse_done + cmp mouseX3D, 318 + jae dk_mouse_done + cmp mouseY3D, 180 + jb dk_mouse_done + cmp mouseY3D, 200 + jae dk_mouse_done + mov pressedKeys3D[22h], 1 + ret +dk_mouse_actions: + cmp mouseY3D, 222 + jb dk_mouse_done + cmp mouseY3D, 238 + jae dk_mouse_done + mov eax, mouseX3D + mov ecx, 0Dh + cmp eax, 8 + jb dk_mouse_done + cmp eax, 78 + jb dk_mouse_key + mov ecx, 42h + cmp eax, 86 + jb dk_mouse_done + cmp eax, 156 + jb dk_mouse_key + mov ecx, 54h + cmp eax, 164 + jb dk_mouse_done + cmp eax, 234 + jb dk_mouse_key + mov ecx, 44h + cmp eax, 242 + jb dk_mouse_done + cmp eax, 312 + jb dk_mouse_key + ret +dk_mouse_ready: + cmp mouseY3D, 222 + jb dk_mouse_bet + cmp mouseY3D, 238 + jae dk_mouse_done + cmp mouseX3D, 8 + jb dk_mouse_done + cmp mouseX3D, 118 + jb dk_mouse_variant + cmp mouseX3D, 125 + jb dk_mouse_done + cmp mouseX3D, 195 + jae dk_mouse_done + mov ecx, 20h + jmp dk_mouse_key +dk_mouse_variant: + mov ecx, 54h + jmp dk_mouse_key +dk_mouse_bet: + cmp mouseY3D, 199 + jb dk_mouse_done + cmp mouseY3D, 215 + jae dk_mouse_done + cmp mouseX3D, 11 + jb dk_mouse_done + mov ecx, 28h + cmp mouseX3D, 29 + jb dk_mouse_key + cmp mouseX3D, 35 + jb dk_mouse_done + cmp mouseX3D, 53 + jae dk_mouse_done + mov ecx, 26h +dk_mouse_key: + mov pressedKeys3D[ecx], 1 +dk_mouse_done: + ret +DurakMouse3D ENDP + +HandleNativeDurak3D PROC uses ebx + call HandleCardExit3D + test eax, eax + jnz dk_input_done + call DurakMouse3D + cmp cardExitActive3D, 0 + jne dk_input_done + cmp engineMode, MODE_DURAK + jne dk_input_done + cmp dkState3D, DK_IDLE + je dk_ready_input + cmp dkState3D, DK_RESULT + je dk_ready_input + mov eax, deltaTime3D + add dkTimer3D, eax + cmp dkState3D, DK_DEAL + jne @F + cmp dkTimer3D, TABLE_FLIGHT_MS*12 + jb dk_input_done + call DurakBeginBout3D + ret +@@: + cmp dkState3D, DK_FLIGHT + jne @F + cmp dkTimer3D, TABLE_FLIGHT_MS + jb dk_input_done + call DurakCommitFlight3D + ret +@@: + cmp dkState3D, DK_SWEEP + jne @F + cmp dkTimer3D, 600 + jb dk_input_done + call DurakResolveBout3D + ret +@@: + cmp dkState3D, DK_TURN + jne dk_input_done + cmp dkActor3D, 0 + je dk_player_input + cmp dkTimer3D, 650 + jb dk_input_done + call DurakAITurn3D + ret +dk_player_input: + invoke Pressed3D, 25h + test eax, eax + jz @F + invoke DurakMoveSelection3D, -1 +@@: + invoke Pressed3D, 27h + test eax, eax + jz @F + invoke DurakMoveSelection3D, 1 +@@: + invoke Pressed3D, 21h + test eax, eax + jz @F + invoke DurakMoveSelection3D, -8 +@@: + invoke Pressed3D, 22h + test eax, eax + jz @F + invoke DurakMoveSelection3D, 8 +@@: + mov ebx, 31h +dk_number_select: + invoke Pressed3D, ebx + test eax, eax + jz @F + mov eax, ebx + sub eax, 31h + add eax, dkPage3D + cmp eax, durakPlayerCnt + jae @F + mov dkSelection3D, eax +@@: + inc ebx + cmp ebx, 39h + jb dk_number_select + invoke Pressed3D, 42h + test eax, eax + jz @F + invoke DurakTake3D, 0 + ret +@@: + invoke Pressed3D, 44h + test eax, eax + jz @F + invoke DurakFinish3D, 0 + ret +@@: + invoke Pressed3D, 54h + test eax, eax + jz @F + invoke DurakPlay3D, 0, dkSelection3D, DK_TRANSFER + ret +@@: + invoke Pressed3D, 0Dh + test eax, eax + jnz dk_player_play + invoke Pressed3D, 20h + test eax, eax + jz dk_input_done +dk_player_play: + mov eax, DK_ATTACK + cmp dkAttacker3D, 0 + je @F + mov eax, DK_DEFEND +@@: + invoke DurakPlay3D, 0, dkSelection3D, eax + ret +dk_ready_input: + invoke Pressed3D, 54h + test eax, eax + jz @F + xor dkVariant3D, 1 +@@: + invoke Pressed3D, 26h + test eax, eax + jz @F + cmp dkBet3D, 10000 + jae @F + add dkBet3D, 100 +@@: + invoke Pressed3D, 28h + test eax, eax + jz @F + cmp dkBet3D, 100 + jbe @F + sub dkBet3D, 100 +@@: + invoke Pressed3D, 20h + test eax, eax + jnz dk_ready_start + invoke Pressed3D, 0Dh + test eax, eax + jz dk_input_done +dk_ready_start: + cmp tournamentMode, 1 + jne @F + cmp dkState3D, DK_RESULT + jne @F + cmp dkOutcome3D, 0 + jne dk_tourney_loss + invoke TowerReportRoundOutcome, 1 + ret +dk_tourney_loss: + invoke TowerReportRoundOutcome, 2 + ret +@@: + call StartNativeDurak3D +dk_input_done: + ret +HandleNativeDurak3D ENDP diff --git a/src_graphics/native_poker.inc b/src_graphics/native_poker.inc index d3054a1..5dce089 100644 --- a/src_graphics/native_poker.inc +++ b/src_graphics/native_poker.inc @@ -1,629 +1,635 @@ -; Heads-up no-limit Hold'em: real shuffled deck, four betting streets, no console. -InitNativePoker3D PROC - mov cardExitActive3D, 0 - call LoadCardTableAssets3D - test eax, eax - jz @F - mov pkState3D, PK_IDLE - mov pkError3D, 0 - mov pkPot3D, 0 - mov pkAiMessage3D, 0 - mov pkStreet3D, 0 - mov pkBoardCount3D, 0 - mov pkResult3D, 0 - mov pkChipTimer3D, 320 - call ClearKeys3D - mov eax, 1 -@@: - ret -InitNativePoker3D ENDP - -PokerPay3D PROC uses ebx actor:DWORD,amount:DWORD - mov ebx, actor - mov eax, amount - mov edx, bankroll - test ebx, ebx - jz @F - mov edx, pkStack3D -@@: - cmp eax, edx - jbe @F - mov eax, edx -@@: - test ebx, ebx - jnz poker_pay_dealer - sub bankroll, eax - jmp poker_pay_pot -poker_pay_dealer: - sub pkStack3D, eax -poker_pay_pot: - add pkPaid3D[ebx*4], eax - add pkPot3D, eax - mov pkChipAmount3D, eax - mov pkChipActor3D, ebx - mov pkChipTimer3D, 0 - ret -PokerPay3D ENDP - -StartNativePoker3D PROC uses ebx esi - cmp pkState3D, PK_IDLE - je @F - cmp pkState3D, PK_RESULT - jne poker_start_done -@@: - mov eax, bankroll - cmp eax, pkBlind3D - jb poker_start_empty - mov pkStack3D, eax - xor pkButton3D, 1 - mov pkStreet3D, 0 - mov pkPot3D, 0 - mov pkPaid3D[0], 0 - mov pkPaid3D[4], 0 - mov pkActed3D[0], 0 - mov pkActed3D[4], 0 - mov pkRaisedCount3D, 0 - mov pkCanRaise3D, 1 - mov pkBoardCount3D, 0 - mov pkOldBoardCount3D, 0 - mov pkCursor3D, 4 - mov pkResult3D, 0 - mov pkError3D, 0 - mov pkAiMessage3D, 0 - mov eax, pkBlind3D - mov pkMinRaise3D, eax - mov pkRaise3D, eax - mov pkCurrent3D, eax - invoke ShuffleCards3D, OFFSET pkDeck3D - mov esi, pkButton3D - xor esi, 1 - shl esi, 3 ; first card goes to the non-button player - mov ebx, esi - xor ebx, 8 - mov eax, pkDeck3D[0] - mov pkHole3D[esi], eax - mov eax, pkDeck3D[4] - mov pkHole3D[ebx], eax - mov eax, pkDeck3D[8] - mov pkHole3D[esi+4], eax - mov eax, pkDeck3D[12] - mov pkHole3D[ebx+4], eax - mov ebx, pkButton3D - mov eax, pkBlind3D - shr eax, 1 - invoke PokerPay3D, ebx, eax - xor ebx, 1 - invoke PokerPay3D, ebx, pkBlind3D - mov eax, pkButton3D - mov pkTurn3D, eax - mov pkTimer3D, 0 - mov pkState3D, PK_DEAL - call ClearKeys3D - invoke PlayCasinoSound3D, OFFSET soundCards, 0, 1 - call SaveProgress3D -poker_start_done: - ret -poker_start_empty: - mov pkError3D, 1 - ret -StartNativePoker3D ENDP - -PokerNextTurn3D PROC actor:DWORD - mov eax, pkPaid3D[0] - cmp eax, pkPaid3D[4] - jne poker_switch_turn - cmp bankroll, 0 - je poker_finish_street - cmp pkStack3D, 0 - je poker_finish_street - cmp pkActed3D[0], 0 - je poker_switch_turn - cmp pkActed3D[4], 0 - jne poker_finish_street -poker_switch_turn: - mov eax, actor - xor eax, 1 - mov pkTurn3D, eax - mov pkTimer3D, 0 - mov pkState3D, PK_PLAYER - call ClearKeys3D - mov eax, pkTurn3D - test eax, eax - jz @F - mov pkState3D, PK_AI -@@: - ret -poker_finish_street: - call PokerNextStreet3D - ret -PokerNextTurn3D ENDP - -PokerCall3D PROC uses ebx esi actor:DWORD - mov pkError3D, 0 - mov ebx, actor - mov eax, pkCurrent3D - sub eax, pkPaid3D[ebx*4] - invoke PokerPay3D, ebx, eax - mov pkActed3D[ebx*4], 1 - ; Heads-up unmatched all-in excess is returned; no phantom side pot. - mov eax, pkPaid3D[ebx*4] - cmp eax, pkCurrent3D - jae poker_call_next - mov esi, ebx - xor esi, 1 - mov edx, pkPaid3D[esi*4] - sub edx, eax - sub pkPot3D, edx - mov pkPaid3D[esi*4], eax - mov pkCurrent3D, eax - test esi, esi - jnz @F - add bankroll, edx - jmp poker_call_next -@@: - add pkStack3D, edx -poker_call_next: - invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 - invoke PokerNextTurn3D, ebx - ret -PokerCall3D ENDP - -PokerRaise3D PROC uses ebx esi edi actor:DWORD,extra:DWORD - local owed:DWORD,available:DWORD - cmp pkCanRaise3D, 0 - je poker_raise_done - mov ebx, actor - mov esi, ebx - xor esi, 1 - mov eax, pkCurrent3D - sub eax, pkPaid3D[ebx*4] - mov owed, eax - mov eax, bankroll - test ebx, ebx - jz @F - mov eax, pkStack3D -@@: - mov available, eax - mov edi, extra - add edi, owed - cmp edi, eax - jbe @F - mov edi, eax -@@: - ; Never ask the opponent to cover more than their effective stack. - mov eax, bankroll - test esi, esi - jz @F - mov eax, pkStack3D -@@: - add eax, pkPaid3D[esi*4] - sub eax, pkPaid3D[ebx*4] - cmp edi, eax - jbe @F - mov edi, eax -@@: - cmp edi, owed - jbe poker_raise_as_call - mov eax, edi - sub eax, owed - cmp eax, pkMinRaise3D - jae poker_full_raise - cmp edi, available - jne poker_raise_invalid - ; A short all-in does not reopen raising for a player who already acted. - mov pkCanRaise3D, 0 - jmp poker_commit_raise -poker_full_raise: - mov pkMinRaise3D, eax - mov pkRaise3D, eax - mov pkActed3D[esi*4], 0 - mov pkCanRaise3D, 1 -poker_commit_raise: - mov pkError3D, 0 - invoke PokerPay3D, ebx, edi - mov eax, pkPaid3D[ebx*4] - mov pkCurrent3D, eax - mov pkActed3D[ebx*4], 1 - inc pkRaisedCount3D - invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 - invoke PokerNextTurn3D, ebx -poker_raise_done: - ret -poker_raise_invalid: - cmp actor, 0 - jne poker_raise_as_call - mov pkError3D, 2 - ret -poker_raise_as_call: - cmp actor, 1 - jne @F - mov pkAiMessage3D, 1 - cmp owed, 0 - je @F - mov pkAiMessage3D, 2 -@@: - invoke PokerCall3D, ebx - ret -PokerRaise3D ENDP - -PokerFold3D PROC actor:DWORD - cmp pkState3D, PK_RESULT - je poker_fold_done - mov pkResult3D, 0 - mov pkOutcome3D, 1 - cmp actor, 0 - je poker_fold_player - mov eax, pkPot3D - add bankroll, eax - mov pkOutcome3D, 0 - invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 - jmp poker_fold_settled -poker_fold_player: - mov eax, pkPot3D - add pkStack3D, eax - invoke PlayCasinoSound3D, OFFSET soundRoundLose, 0, 1 -poker_fold_settled: - mov pkState3D, PK_RESULT - call ClearKeys3D - xor eax,eax - cmp pkOutcome3D,0 - sete al - invoke NpcRecordRound3D,2,eax - call SaveProgress3D -poker_fold_done: - ret -PokerFold3D ENDP - -PokerNextStreet3D PROC uses ebx esi - cmp pkStreet3D, 3 - je poker_begin_reveal - inc pkStreet3D - mov eax, pkBoardCount3D - mov pkOldBoardCount3D, eax - mov eax, pkStreet3D - add eax, 2 - mov pkBoardCount3D, eax - inc pkCursor3D ; burn one card before each board street - mov esi, pkOldBoardCount3D -poker_deal_board: - mov ebx, pkCursor3D - mov eax, pkDeck3D[ebx*4] - mov pkBoard3D[esi*4], eax - inc pkCursor3D - inc esi - cmp esi, pkBoardCount3D - jb poker_deal_board - mov pkPaid3D[0], 0 - mov pkPaid3D[4], 0 - mov pkActed3D[0], 0 - mov pkActed3D[4], 0 - mov pkCurrent3D, 0 - mov pkRaisedCount3D, 0 - mov pkCanRaise3D, 1 - mov eax, pkBlind3D - mov pkMinRaise3D, eax - mov pkRaise3D, eax - mov eax, pkButton3D - xor eax, 1 - mov pkTurn3D, eax - mov pkTimer3D, 0 - mov pkState3D, PK_BOARD - invoke PlayCasinoSound3D, OFFSET soundCards, 0, 1 - ret -poker_begin_reveal: - mov pkTimer3D, 0 - mov pkState3D, PK_REVEAL - ret -PokerNextStreet3D ENDP - -PokerShowdown3D PROC uses ebx esi edi - cmp pkState3D, PK_RESULT - je poker_showdown_done - xor ebx, ebx -poker_evaluate_player: - lea edi, pkEvalHand3D - lea esi, pkHole3D[ebx*8] - movsd - movsd - lea esi, pkBoard3D - mov ecx, 5 - rep movsd - invoke EvaluateNativePoker3D, OFFSET pkEvalHand3D, 7 - mov pkScore3D[ebx*4], eax - inc ebx - cmp ebx, 2 - jb poker_evaluate_player - mov pkResult3D, 1 - mov eax, pkScore3D[0] - cmp eax, pkScore3D[4] - ja poker_showdown_lose - je poker_showdown_tie - mov eax, pkPot3D - add bankroll, eax - mov pkOutcome3D, 0 - invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 - jmp poker_showdown_settled -poker_showdown_lose: - mov eax, pkPot3D - add pkStack3D, eax - mov pkOutcome3D, 1 - invoke PlayCasinoSound3D, OFFSET soundRoundLose, 0, 1 - jmp poker_showdown_settled -poker_showdown_tie: - mov eax, pkPot3D - shr eax, 1 - mov edx, pkPot3D - and edx, 1 - cmp pkButton3D, 1 - jne @F - add eax, edx ; odd chip goes to the non-button player -@@: - add bankroll, eax - mov edx, pkPot3D - sub edx, eax - add pkStack3D, edx - mov pkOutcome3D, 2 -poker_showdown_settled: - mov pkState3D, PK_RESULT - call ClearKeys3D - xor eax,eax - cmp pkOutcome3D,0 - sete al - invoke NpcRecordRound3D,2,eax - call SaveProgress3D -poker_showdown_done: - ret -PokerShowdown3D ENDP - -; The AI sees only its two cards and the already exposed board. No player cards/future deck. -PokerAIDecide3D PROC uses ebx esi edi - local strength:DWORD,owed:DWORD - mov eax, pkCurrent3D - sub eax, pkPaid3D[4] - mov owed, eax - cmp pkBoardCount3D, 3 - jae poker_ai_postflop - mov eax, pkHole3D[8] - xor edx, edx - mov ecx, 13 - div ecx - mov esi, edx - mov eax, pkHole3D[12] - xor edx, edx - div ecx - mov strength, 0 - cmp esi, edx - je poker_ai_pair - cmp esi, 8 - jb @F - inc strength -@@: - cmp edx, 8 - jb poker_ai_odds - inc strength - jmp poker_ai_odds -poker_ai_pair: - mov strength, 3 - cmp esi, 7 - jb poker_ai_odds - mov strength, 5 - jmp poker_ai_odds -poker_ai_postflop: - lea edi, pkEvalHand3D - lea esi, pkHole3D[8] - movsd - movsd - lea esi, pkBoard3D - mov ecx, pkBoardCount3D - rep movsd - mov eax, pkBoardCount3D - add eax, 2 - invoke EvaluateNativePoker3D, OFFSET pkEvalHand3D, eax - invoke NativePokerClass3D, eax - inc eax - mov strength, eax -poker_ai_odds: - invoke RandomRange3D, 100 - mov ebx, eax - cmp owed, 0 - je poker_ai_consider_raise - mov eax, pkBlind3D - imul eax, 2 - cmp owed, eax - jbe poker_ai_small_call - cmp strength, 3 - jae poker_ai_consider_raise - cmp ebx, 18 - jb poker_ai_call - jmp poker_ai_fold -poker_ai_small_call: - cmp strength, 1 - jae poker_ai_consider_raise - cmp ebx, 32 - jb poker_ai_fold -poker_ai_consider_raise: - cmp pkCanRaise3D, 0 - je poker_ai_call - cmp pkRaisedCount3D, 2 - jae poker_ai_call - cmp bankroll, 0 - je poker_ai_call - cmp strength, 3 - jae poker_ai_strong_raise - cmp ebx, 9 - jae poker_ai_call - jmp poker_ai_raise -poker_ai_strong_raise: - cmp ebx, 62 - jae poker_ai_call -poker_ai_raise: - mov pkAiMessage3D, 3 - invoke PokerRaise3D, 1, pkMinRaise3D - ret -poker_ai_fold: - mov pkAiMessage3D, 4 - invoke PokerFold3D, 1 - ret -poker_ai_call: - mov pkAiMessage3D, 1 - cmp owed, 0 - je @F - mov pkAiMessage3D, 2 -@@: - invoke PokerCall3D, 1 - ret -PokerAIDecide3D ENDP - -HandleNativePoker3D PROC uses ebx - call HandleCardExit3D - test eax, eax - jnz poker_input_done - invoke CardTableMouse3D, MODE_POKER - cmp cardExitActive3D, 0 - jne poker_input_done - cmp engineMode, MODE_POKER - jne poker_input_done - cmp pkChipTimer3D, 320 - jae @F - mov eax, deltaTime3D - add pkChipTimer3D, eax -@@: - cmp pkState3D, PK_IDLE - je poker_ready_input - cmp pkState3D, PK_RESULT - je poker_ready_input - cmp pkState3D, PK_PLAYER - je poker_player_input - mov eax, deltaTime3D - add pkTimer3D, eax - cmp pkState3D, PK_AI - jne poker_animate_deal - cmp pkTimer3D, 650 - jb poker_input_done - call PokerAIDecide3D - ret -poker_animate_deal: - cmp pkState3D, PK_REVEAL - jne @F - cmp pkTimer3D, 650 - jb poker_input_done - call PokerShowdown3D - ret -@@: - mov eax, TABLE_FLIGHT_MS*4 - cmp pkState3D, PK_DEAL - je poker_animation_limit - mov eax, pkBoardCount3D - sub eax, pkOldBoardCount3D - imul eax, TABLE_FLIGHT_MS -poker_animation_limit: - cmp pkTimer3D, eax - jb poker_input_done - mov pkTimer3D, 0 - cmp pkState3D, PK_BOARD - jne poker_begin_turn - cmp bankroll, 0 - je poker_runout - cmp pkStack3D, 0 - je poker_runout -poker_begin_turn: - mov pkState3D, PK_PLAYER - call ClearKeys3D - cmp pkTurn3D, 0 - je poker_input_done - mov pkState3D, PK_AI - ret -poker_runout: - call PokerNextStreet3D - ret -poker_ready_input: - invoke Pressed3D, 26h - test eax, eax - jz @F - cmp pkBlind3D, 1000 - jae @F - add pkBlind3D, 50 -@@: - invoke Pressed3D, 28h - test eax, eax - jz @F - cmp pkBlind3D, 50 - jbe @F - sub pkBlind3D, 50 -@@: - cmp tournamentMode, 1 - jne poker_regular_start - cmp pkState3D, PK_RESULT - jne poker_regular_start - invoke Pressed3D, 20h - test eax, eax - jnz poker_tourney_report - invoke Pressed3D, 0Dh - test eax, eax - jnz poker_tourney_report - ret -poker_tourney_report: - cmp pkOutcome3D, 1 - je poker_tourney_loss - invoke TowerReportRoundOutcome, 1 - ret -poker_tourney_loss: - invoke TowerReportRoundOutcome, 2 - ret -poker_regular_start: - invoke Pressed3D, 20h - test eax, eax - jz poker_input_done - call StartNativePoker3D - ret -poker_player_input: - invoke Pressed3D, 41h - test eax, eax - jz @F - invoke PokerRaise3D, 0, bankroll - ret -@@: - invoke Pressed3D, 26h - test eax, eax - jz @F - cmp pkRaise3D, 50000 - jae @F - mov eax, pkBlind3D - add pkRaise3D, eax -@@: - invoke Pressed3D, 28h - test eax, eax - jz @F - mov eax, pkMinRaise3D - cmp pkRaise3D, eax - jbe @F - mov eax, pkBlind3D - sub pkRaise3D, eax - mov eax, pkMinRaise3D - cmp pkRaise3D, eax - jae @F - mov pkRaise3D, eax -@@: - invoke Pressed3D, 46h - test eax, eax - jz @F - invoke PokerFold3D, 0 - ret -@@: - invoke Pressed3D, 52h - test eax, eax - jz @F - invoke PokerRaise3D, 0, pkRaise3D - ret -@@: - invoke Pressed3D, 43h - test eax, eax - jnz poker_player_call - invoke Pressed3D, 20h - test eax, eax - jz poker_input_done -poker_player_call: - invoke PokerCall3D, 0 -poker_input_done: - ret -HandleNativePoker3D ENDP +; Heads-up no-limit Hold'em: real shuffled deck, four betting streets, no console. +InitNativePoker3D PROC + mov cardExitActive3D, 0 + call LoadCardTableAssets3D + test eax, eax + jz @F + mov pkState3D, PK_IDLE + mov pkError3D, 0 + mov pkPot3D, 0 + mov pkAiMessage3D, 0 + mov pkStreet3D, 0 + mov pkBoardCount3D, 0 + mov pkResult3D, 0 + mov pkChipTimer3D, 320 + call ClearKeys3D + mov eax, 1 +@@: + ret +InitNativePoker3D ENDP + +PokerPay3D PROC uses ebx actor:DWORD,amount:DWORD + mov ebx, actor + mov eax, amount + mov edx, bankroll + test ebx, ebx + jz @F + mov edx, pkStack3D +@@: + cmp eax, edx + jbe @F + mov eax, edx +@@: + test ebx, ebx + jnz poker_pay_dealer + sub bankroll, eax + jmp poker_pay_pot +poker_pay_dealer: + sub pkStack3D, eax +poker_pay_pot: + add pkPaid3D[ebx*4], eax + add pkPot3D, eax + mov pkChipAmount3D, eax + mov pkChipActor3D, ebx + mov pkChipTimer3D, 0 + ret +PokerPay3D ENDP + +StartNativePoker3D PROC uses ebx esi + cmp pkState3D, PK_IDLE + je @F + cmp pkState3D, PK_RESULT + jne poker_start_done +@@: + mov eax, bankroll + cmp eax, pkBlind3D + jb poker_start_empty + mov pkStack3D, eax + xor pkButton3D, 1 + mov pkStreet3D, 0 + mov pkPot3D, 0 + mov pkPaid3D[0], 0 + mov pkPaid3D[4], 0 + mov pkActed3D[0], 0 + mov pkActed3D[4], 0 + mov pkRaisedCount3D, 0 + mov pkCanRaise3D, 1 + mov pkBoardCount3D, 0 + mov pkOldBoardCount3D, 0 + mov pkCursor3D, 4 + mov pkResult3D, 0 + mov pkError3D, 0 + mov pkAiMessage3D, 0 + mov eax, pkBlind3D + mov pkMinRaise3D, eax + mov pkRaise3D, eax + mov pkCurrent3D, eax + invoke ShuffleCards3D, OFFSET pkDeck3D + mov esi, pkButton3D + xor esi, 1 + shl esi, 3 ; first card goes to the non-button player + mov ebx, esi + xor ebx, 8 + mov eax, pkDeck3D[0] + mov pkHole3D[esi], eax + mov eax, pkDeck3D[4] + mov pkHole3D[ebx], eax + mov eax, pkDeck3D[8] + mov pkHole3D[esi+4], eax + mov eax, pkDeck3D[12] + mov pkHole3D[ebx+4], eax + mov ebx, pkButton3D + mov eax, pkBlind3D + shr eax, 1 + invoke PokerPay3D, ebx, eax + xor ebx, 1 + invoke PokerPay3D, ebx, pkBlind3D + mov eax, pkButton3D + mov pkTurn3D, eax + mov pkTimer3D, 0 + mov pkState3D, PK_DEAL + call ClearKeys3D + invoke PlayCasinoSound3D, OFFSET soundCards, 0, 1 + call SaveProgress3D +poker_start_done: + ret +poker_start_empty: + mov pkError3D, 1 + ret +StartNativePoker3D ENDP + +PokerNextTurn3D PROC actor:DWORD + mov eax, pkPaid3D[0] + cmp eax, pkPaid3D[4] + jne poker_switch_turn + cmp bankroll, 0 + je poker_finish_street + cmp pkStack3D, 0 + je poker_finish_street + cmp pkActed3D[0], 0 + je poker_switch_turn + cmp pkActed3D[4], 0 + jne poker_finish_street +poker_switch_turn: + mov eax, actor + xor eax, 1 + mov pkTurn3D, eax + mov pkTimer3D, 0 + mov pkState3D, PK_PLAYER + call ClearKeys3D + mov eax, pkTurn3D + test eax, eax + jz @F + mov pkState3D, PK_AI +@@: + ret +poker_finish_street: + call PokerNextStreet3D + ret +PokerNextTurn3D ENDP + +PokerCall3D PROC uses ebx esi actor:DWORD + mov pkError3D, 0 + mov ebx, actor + mov eax, pkCurrent3D + sub eax, pkPaid3D[ebx*4] + invoke PokerPay3D, ebx, eax + mov pkActed3D[ebx*4], 1 + ; Heads-up unmatched all-in excess is returned; no phantom side pot. + mov eax, pkPaid3D[ebx*4] + cmp eax, pkCurrent3D + jae poker_call_next + mov esi, ebx + xor esi, 1 + mov edx, pkPaid3D[esi*4] + sub edx, eax + sub pkPot3D, edx + mov pkPaid3D[esi*4], eax + mov pkCurrent3D, eax + test esi, esi + jnz @F + add bankroll, edx + jmp poker_call_next +@@: + add pkStack3D, edx +poker_call_next: + invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 + invoke PokerNextTurn3D, ebx + ret +PokerCall3D ENDP + +PokerRaise3D PROC uses ebx esi edi actor:DWORD,extra:DWORD + local owed:DWORD,available:DWORD + cmp pkCanRaise3D, 0 + je poker_raise_done + mov ebx, actor + mov esi, ebx + xor esi, 1 + mov eax, pkCurrent3D + sub eax, pkPaid3D[ebx*4] + mov owed, eax + mov eax, bankroll + test ebx, ebx + jz @F + mov eax, pkStack3D +@@: + mov available, eax + mov edi, extra + add edi, owed + cmp edi, eax + jbe @F + mov edi, eax +@@: + ; Never ask the opponent to cover more than their effective stack. + mov eax, bankroll + test esi, esi + jz @F + mov eax, pkStack3D +@@: + add eax, pkPaid3D[esi*4] + sub eax, pkPaid3D[ebx*4] + cmp edi, eax + jbe @F + mov edi, eax +@@: + cmp edi, owed + jbe poker_raise_as_call + mov eax, edi + sub eax, owed + cmp eax, pkMinRaise3D + jae poker_full_raise + cmp edi, available + jne poker_raise_invalid + ; A short all-in does not reopen raising for a player who already acted. + mov pkCanRaise3D, 0 + jmp poker_commit_raise +poker_full_raise: + mov pkMinRaise3D, eax + mov pkRaise3D, eax + mov pkActed3D[esi*4], 0 + mov pkCanRaise3D, 1 +poker_commit_raise: + mov pkError3D, 0 + invoke PokerPay3D, ebx, edi + mov eax, pkPaid3D[ebx*4] + mov pkCurrent3D, eax + mov pkActed3D[ebx*4], 1 + inc pkRaisedCount3D + invoke PlayCasinoSound3D, OFFSET soundClick, 0, 1 + invoke PokerNextTurn3D, ebx +poker_raise_done: + ret +poker_raise_invalid: + cmp actor, 0 + jne poker_raise_as_call + mov pkError3D, 2 + ret +poker_raise_as_call: + cmp actor, 1 + jne @F + mov pkAiMessage3D, 1 + cmp owed, 0 + je @F + mov pkAiMessage3D, 2 +@@: + invoke PokerCall3D, ebx + ret +PokerRaise3D ENDP + +PokerFold3D PROC actor:DWORD + cmp pkState3D, PK_RESULT + je poker_fold_done + mov pkResult3D, 0 + mov pkOutcome3D, 1 + cmp actor, 0 + je poker_fold_player + mov eax, pkPot3D + add bankroll, eax + mov pkOutcome3D, 0 + invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 + jmp poker_fold_settled +poker_fold_player: + mov eax, pkPot3D + add pkStack3D, eax + invoke TriggerCharmLossProtection, pkPaid3D[0] + test eax, eax + jnz poker_fold_settled + invoke PlayCasinoSound3D, OFFSET soundRoundLose, 0, 1 +poker_fold_settled: + mov pkState3D, PK_RESULT + call ClearKeys3D + xor eax,eax + cmp pkOutcome3D,0 + sete al + invoke NpcRecordRound3D,2,eax + call SaveProgress3D +poker_fold_done: + ret +PokerFold3D ENDP + +PokerNextStreet3D PROC uses ebx esi + cmp pkStreet3D, 3 + je poker_begin_reveal + inc pkStreet3D + mov eax, pkBoardCount3D + mov pkOldBoardCount3D, eax + mov eax, pkStreet3D + add eax, 2 + mov pkBoardCount3D, eax + inc pkCursor3D ; burn one card before each board street + mov esi, pkOldBoardCount3D +poker_deal_board: + mov ebx, pkCursor3D + mov eax, pkDeck3D[ebx*4] + mov pkBoard3D[esi*4], eax + inc pkCursor3D + inc esi + cmp esi, pkBoardCount3D + jb poker_deal_board + mov pkPaid3D[0], 0 + mov pkPaid3D[4], 0 + mov pkActed3D[0], 0 + mov pkActed3D[4], 0 + mov pkCurrent3D, 0 + mov pkRaisedCount3D, 0 + mov pkCanRaise3D, 1 + mov eax, pkBlind3D + mov pkMinRaise3D, eax + mov pkRaise3D, eax + mov eax, pkButton3D + xor eax, 1 + mov pkTurn3D, eax + mov pkTimer3D, 0 + mov pkState3D, PK_BOARD + invoke PlayCasinoSound3D, OFFSET soundCards, 0, 1 + ret +poker_begin_reveal: + mov pkTimer3D, 0 + mov pkState3D, PK_REVEAL + ret +PokerNextStreet3D ENDP + +PokerShowdown3D PROC uses ebx esi edi + cmp pkState3D, PK_RESULT + je poker_showdown_done + xor ebx, ebx +poker_evaluate_player: + lea edi, pkEvalHand3D + lea esi, pkHole3D[ebx*8] + movsd + movsd + lea esi, pkBoard3D + mov ecx, 5 + rep movsd + invoke EvaluateNativePoker3D, OFFSET pkEvalHand3D, 7 + mov pkScore3D[ebx*4], eax + inc ebx + cmp ebx, 2 + jb poker_evaluate_player + mov pkResult3D, 1 + mov eax, pkScore3D[0] + cmp eax, pkScore3D[4] + ja poker_showdown_lose + je poker_showdown_tie + mov eax, pkPot3D + add bankroll, eax + mov pkOutcome3D, 0 + invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 1 + jmp poker_showdown_settled +poker_showdown_lose: + mov eax, pkPot3D + add pkStack3D, eax + mov pkOutcome3D, 1 + invoke TriggerCharmLossProtection, pkPaid3D[0] + test eax, eax + jnz poker_showdown_settled + invoke PlayCasinoSound3D, OFFSET soundRoundLose, 0, 1 + jmp poker_showdown_settled +poker_showdown_tie: + mov eax, pkPot3D + shr eax, 1 + mov edx, pkPot3D + and edx, 1 + cmp pkButton3D, 1 + jne @F + add eax, edx ; odd chip goes to the non-button player +@@: + add bankroll, eax + mov edx, pkPot3D + sub edx, eax + add pkStack3D, edx + mov pkOutcome3D, 2 +poker_showdown_settled: + mov pkState3D, PK_RESULT + call ClearKeys3D + xor eax,eax + cmp pkOutcome3D,0 + sete al + invoke NpcRecordRound3D,2,eax + call SaveProgress3D +poker_showdown_done: + ret +PokerShowdown3D ENDP + +; The AI sees only its two cards and the already exposed board. No player cards/future deck. +PokerAIDecide3D PROC uses ebx esi edi + local strength:DWORD,owed:DWORD + mov eax, pkCurrent3D + sub eax, pkPaid3D[4] + mov owed, eax + cmp pkBoardCount3D, 3 + jae poker_ai_postflop + mov eax, pkHole3D[8] + xor edx, edx + mov ecx, 13 + div ecx + mov esi, edx + mov eax, pkHole3D[12] + xor edx, edx + div ecx + mov strength, 0 + cmp esi, edx + je poker_ai_pair + cmp esi, 8 + jb @F + inc strength +@@: + cmp edx, 8 + jb poker_ai_odds + inc strength + jmp poker_ai_odds +poker_ai_pair: + mov strength, 3 + cmp esi, 7 + jb poker_ai_odds + mov strength, 5 + jmp poker_ai_odds +poker_ai_postflop: + lea edi, pkEvalHand3D + lea esi, pkHole3D[8] + movsd + movsd + lea esi, pkBoard3D + mov ecx, pkBoardCount3D + rep movsd + mov eax, pkBoardCount3D + add eax, 2 + invoke EvaluateNativePoker3D, OFFSET pkEvalHand3D, eax + invoke NativePokerClass3D, eax + inc eax + mov strength, eax +poker_ai_odds: + invoke RandomRange3D, 100 + mov ebx, eax + cmp owed, 0 + je poker_ai_consider_raise + mov eax, pkBlind3D + imul eax, 2 + cmp owed, eax + jbe poker_ai_small_call + cmp strength, 3 + jae poker_ai_consider_raise + cmp ebx, 18 + jb poker_ai_call + jmp poker_ai_fold +poker_ai_small_call: + cmp strength, 1 + jae poker_ai_consider_raise + cmp ebx, 32 + jb poker_ai_fold +poker_ai_consider_raise: + cmp pkCanRaise3D, 0 + je poker_ai_call + cmp pkRaisedCount3D, 2 + jae poker_ai_call + cmp bankroll, 0 + je poker_ai_call + cmp strength, 3 + jae poker_ai_strong_raise + cmp ebx, 9 + jae poker_ai_call + jmp poker_ai_raise +poker_ai_strong_raise: + cmp ebx, 62 + jae poker_ai_call +poker_ai_raise: + mov pkAiMessage3D, 3 + invoke PokerRaise3D, 1, pkMinRaise3D + ret +poker_ai_fold: + mov pkAiMessage3D, 4 + invoke PokerFold3D, 1 + ret +poker_ai_call: + mov pkAiMessage3D, 1 + cmp owed, 0 + je @F + mov pkAiMessage3D, 2 +@@: + invoke PokerCall3D, 1 + ret +PokerAIDecide3D ENDP + +HandleNativePoker3D PROC uses ebx + call HandleCardExit3D + test eax, eax + jnz poker_input_done + invoke CardTableMouse3D, MODE_POKER + cmp cardExitActive3D, 0 + jne poker_input_done + cmp engineMode, MODE_POKER + jne poker_input_done + cmp pkChipTimer3D, 320 + jae @F + mov eax, deltaTime3D + add pkChipTimer3D, eax +@@: + cmp pkState3D, PK_IDLE + je poker_ready_input + cmp pkState3D, PK_RESULT + je poker_ready_input + cmp pkState3D, PK_PLAYER + je poker_player_input + mov eax, deltaTime3D + add pkTimer3D, eax + cmp pkState3D, PK_AI + jne poker_animate_deal + cmp pkTimer3D, 650 + jb poker_input_done + call PokerAIDecide3D + ret +poker_animate_deal: + cmp pkState3D, PK_REVEAL + jne @F + cmp pkTimer3D, 650 + jb poker_input_done + call PokerShowdown3D + ret +@@: + mov eax, TABLE_FLIGHT_MS*4 + cmp pkState3D, PK_DEAL + je poker_animation_limit + mov eax, pkBoardCount3D + sub eax, pkOldBoardCount3D + imul eax, TABLE_FLIGHT_MS +poker_animation_limit: + cmp pkTimer3D, eax + jb poker_input_done + mov pkTimer3D, 0 + cmp pkState3D, PK_BOARD + jne poker_begin_turn + cmp bankroll, 0 + je poker_runout + cmp pkStack3D, 0 + je poker_runout +poker_begin_turn: + mov pkState3D, PK_PLAYER + call ClearKeys3D + cmp pkTurn3D, 0 + je poker_input_done + mov pkState3D, PK_AI + ret +poker_runout: + call PokerNextStreet3D + ret +poker_ready_input: + invoke Pressed3D, 26h + test eax, eax + jz @F + cmp pkBlind3D, 1000 + jae @F + add pkBlind3D, 50 +@@: + invoke Pressed3D, 28h + test eax, eax + jz @F + cmp pkBlind3D, 50 + jbe @F + sub pkBlind3D, 50 +@@: + cmp tournamentMode, 1 + jne poker_regular_start + cmp pkState3D, PK_RESULT + jne poker_regular_start + invoke Pressed3D, 20h + test eax, eax + jnz poker_tourney_report + invoke Pressed3D, 0Dh + test eax, eax + jnz poker_tourney_report + ret +poker_tourney_report: + cmp pkOutcome3D, 1 + je poker_tourney_loss + invoke TowerReportRoundOutcome, 1 + ret +poker_tourney_loss: + invoke TowerReportRoundOutcome, 2 + ret +poker_regular_start: + invoke Pressed3D, 20h + test eax, eax + jz poker_input_done + call StartNativePoker3D + ret +poker_player_input: + invoke Pressed3D, 41h + test eax, eax + jz @F + invoke PokerRaise3D, 0, bankroll + ret +@@: + invoke Pressed3D, 26h + test eax, eax + jz @F + cmp pkRaise3D, 50000 + jae @F + mov eax, pkBlind3D + add pkRaise3D, eax +@@: + invoke Pressed3D, 28h + test eax, eax + jz @F + mov eax, pkMinRaise3D + cmp pkRaise3D, eax + jbe @F + mov eax, pkBlind3D + sub pkRaise3D, eax + mov eax, pkMinRaise3D + cmp pkRaise3D, eax + jae @F + mov pkRaise3D, eax +@@: + invoke Pressed3D, 46h + test eax, eax + jz @F + invoke PokerFold3D, 0 + ret +@@: + invoke Pressed3D, 52h + test eax, eax + jz @F + invoke PokerRaise3D, 0, pkRaise3D + ret +@@: + invoke Pressed3D, 43h + test eax, eax + jnz poker_player_call + invoke Pressed3D, 20h + test eax, eax + jz poker_input_done +poker_player_call: + invoke PokerCall3D, 0 +poker_input_done: + ret +HandleNativePoker3D ENDP diff --git a/src_graphics/native_slots.inc b/src_graphics/native_slots.inc index a16e6fa..a90dc0c 100644 --- a/src_graphics/native_slots.inc +++ b/src_graphics/native_slots.inc @@ -1,626 +1,630 @@ -FreeNativeSlots3D PROC - invoke FreeAnimPack3D, OFFSET slotCabinetPack3D - invoke FreeAnimPack3D, OFFSET slotSymbolsPack3D - ret -FreeNativeSlots3D ENDP - -InitNativeSlots3D PROC - invoke LoadAnimPack3D, OFFSET slotCabinetPack3D, OFFSET slotCabinetPath3D - test eax,eax - jz slot_init_fail - cmp slotCabinetPack3D.imageWidth,640 - jne slot_init_fail - cmp slotCabinetPack3D.height,480 - jne slot_init_fail - cmp slotCabinetPack3D.frames,1 - jne slot_init_fail - invoke LoadAnimPack3D, OFFSET slotSymbolsPack3D, OFFSET slotSymbolsPath3D - test eax,eax - jz slot_init_fail - cmp slotSymbolsPack3D.imageWidth,64 - jne slot_init_fail - cmp slotSymbolsPack3D.height,64 - jne slot_init_fail - cmp slotSymbolsPack3D.frames,8 - jne slot_init_fail - mov slotSpinState,SLOT_READY - mov slotSpinTimer,0 - mov slotWinAmount,0 - mov slotStake3D,0 - mov slotLeaveAfter3D,0 - mov slotPaytable3D,0 - mov slotError3D,0 - mov slotEffects3D,0 - mov slotBetIndex3D,1 - mov slotBet,50 - mov cardExitActive3D,0 - mov paused3D,0 - call ClearKeys3D - mov eax,1 - ret -slot_init_fail: - call FreeNativeSlots3D - xor eax,eax - ret -InitNativeSlots3D ENDP - -; Results are sampled once at stake debit. Rendering never consumes RNG or pays. -StartNativeSlots3D PROC uses ebx esi - cmp slotSpinState,SLOT_SPIN - je slot_start_done - cmp slotPaytable3D,0 - jne slot_start_done - cmp slotCabinetPack3D.pixels,0 - je slot_start_done - cmp slotSymbolsPack3D.pixels,0 - je slot_start_done - mov eax,slotBet - test eax,eax - jz slot_start_done - cmp eax,10000 - ja slot_start_done - cmp eax,bankroll - ja slot_start_money - sub bankroll,eax - mov slotStake3D,eax - mov slotSpinState,SLOT_SPIN - mov slotSpinTimer,0 - mov slotWinAmount,0 - mov slotLeaveAfter3D,0 - mov slotError3D,0 - mov slotEffects3D,0 - xor esi,esi -slot_start_reel: - mov eax,slotStops3D[esi*4] - mov slotStartStops3D[esi*4],eax - invoke RandomRange3D,20 - mov slotTargets3D[esi*4],eax - mov edx,slotStrip3D[eax*4] - mov slotReel1[esi*4],edx - sub eax,slotStartStops3D[esi*4] - jns @F - add eax,20 -@@: - add eax,slotCycles3D[esi*4] - shl eax,6 - mov slotTravel3D[esi*4],eax - inc esi - cmp esi,3 - jb slot_start_reel - call SaveProgress3D - invoke PlayCasinoSound3D, OFFSET soundSlotSpin,0,1 - ret -slot_start_money: - mov slotError3D,1 -slot_start_done: - ret -StartNativeSlots3D ENDP - -; Gross multipliers. A cherry pair pays 2x, any other pair returns the stake. -SlotMultiplier3D PROC first:DWORD,second:DWORD,third:DWORD - mov eax,first - cmp eax,7 - ja slot_multiplier_zero - cmp second,7 - ja slot_multiplier_zero - cmp third,7 - ja slot_multiplier_zero - cmp eax,second - jne slot_multiplier_other_pair - cmp eax,third - jne slot_multiplier_pair - mov eax,slotTriple3D[eax*4] - ret -slot_multiplier_other_pair: - cmp eax,third - je slot_multiplier_pair - mov eax,second - cmp eax,third - jne slot_multiplier_zero -slot_multiplier_pair: - cmp eax,1 - jne @F - mov eax,2 - ret -@@: - mov eax,1 - ret -slot_multiplier_zero: - xor eax,eax - ret -SlotMultiplier3D ENDP - -SettleNativeSlots3D PROC uses esi - cmp slotSpinState,SLOT_SPIN - jne slot_settle_done - invoke SlotMultiplier3D,slotReel1,slotReel2,slotReel3 - mul slotStake3D - mov ecx,1000000000 - sub ecx,bankroll - cmp eax,ecx - jbe @F - mov eax,ecx -@@: - mov slotWinAmount,eax - add bankroll,eax - jc slot_settle_cap - cmp bankroll,1000000000 - jbe @F -slot_settle_cap: - mov bankroll,1000000000 -@@: - xor esi,esi -slot_settle_stops: - mov eax,slotTargets3D[esi*4] - mov slotStops3D[esi*4],eax - inc esi - cmp esi,3 - jb slot_settle_stops - mov slotSpinTimer,3000 - mov slotSpinState,SLOT_RESULT - mov slotEffects3D,0 - xor eax,eax - mov ecx,slotWinAmount - cmp ecx,slotStake3D - seta al - invoke NpcRecordRound3D,4,eax - call SaveProgress3D - mov eax,slotWinAmount - cmp eax,slotStake3D - jb slot_settle_loss - jne @F - invoke PlayCasinoSound3D,0,0,0 - jmp slot_settle_exit -@@: - invoke PlayCasinoSound3D,OFFSET soundRoundWin,0,1 - jmp slot_settle_exit -slot_settle_loss: - invoke PlayCasinoSound3D,OFFSET soundRoundLose,0,1 -slot_settle_exit: - cmp slotLeaveAfter3D,0 - je slot_settle_done - call SlotEscape3D -slot_settle_done: - ret -SettleNativeSlots3D ENDP - -; Escape queues a safe exit during a paid spin; it never opens the pause menu. -SlotEscape3D PROC - mov paused3D,0 - cmp slotPaytable3D,0 - je @F - mov slotPaytable3D,0 - call ClearKeys3D - ret -@@: - cmp slotSpinState,SLOT_SPIN - jne slot_exit_hall - mov slotLeaveAfter3D,1 - call ClearKeys3D - ret -slot_exit_hall: - mov slotLeaveAfter3D,0 - mov paused3D,0 - mov engineMode,MODE_WALK - call ClearKeys3D - invoke PlayCasinoSound3D,0,0,0 - ret -SlotEscape3D ENDP - -; A monotonic quadratic ease-out maps elapsed milliseconds to strip pixels. -SlotReelPosition3D PROC uses ebx index:DWORD - mov ebx,index - cmp ebx,2 - ja slot_position_zero - mov eax,slotStops3D[ebx*4] - shl eax,6 - cmp slotSpinState,SLOT_SPIN - jne slot_position_done - mov eax,slotSpinTimer - cmp eax,slotDurations3D[ebx*4] - jae slot_position_end - shl eax,10 - xor edx,edx - div slotDurations3D[ebx*4] - mov ecx,2048 - sub ecx,eax - imul eax,ecx - mul slotTravel3D[ebx*4] - shrd eax,edx,20 - mov edx,slotStartStops3D[ebx*4] - shl edx,6 - add eax,edx - ret -slot_position_end: - mov eax,slotStartStops3D[ebx*4] - shl eax,6 - add eax,slotTravel3D[ebx*4] -slot_position_done: - ret -slot_position_zero: - xor eax,eax - ret -SlotReelPosition3D ENDP - -SlotExitMouse3D PROC - cmp mouseClick3D,0 - je slot_exit_mouse_done - mov mouseClick3D,0 - cmp mouseY3D,3 - jb slot_exit_mouse_done - cmp mouseY3D,17 - jae slot_exit_mouse_done - cmp mouseX3D,252 - jb slot_exit_mouse_done - cmp mouseX3D,312 - jae slot_exit_mouse_done - call SlotEscape3D -slot_exit_mouse_done: - ret -SlotExitMouse3D ENDP - -HandleNativeSlots3D PROC uses ebx - cmp slotSpinState,SLOT_SPIN - jne slot_handle_idle - ; Process the header before settlement so the final spin tick cannot eat it. - call SlotExitMouse3D - mov eax,deltaTime3D - cmp eax,250 - jbe @F - mov eax,250 -@@: - add slotSpinTimer,eax - cmp slotSpinTimer,3000 - jb slot_handle_exit_mouse - call SettleNativeSlots3D - ret -slot_handle_idle: - mov eax,deltaTime3D - add slotEffects3D,eax - cmp slotEffects3D,2000 - jbe @F - mov slotEffects3D,2000 -@@: - cmp slotPaytable3D,0 - je slot_handle_controls - invoke Pressed3D,0Dh - test eax,eax - jnz slot_close_paytable - invoke Pressed3D,20h - test eax,eax - jnz slot_close_paytable - invoke Pressed3D,50h - test eax,eax - jnz slot_close_paytable - cmp mouseClick3D,0 - je slot_handle_done - mov mouseClick3D,0 - cmp mouseY3D,202 - jb slot_handle_done - cmp mouseY3D,220 - jae slot_handle_done - cmp mouseX3D,112 - jb slot_handle_done - cmp mouseX3D,208 - jae slot_handle_done -slot_close_paytable: - mov slotPaytable3D,0 - ret -slot_handle_controls: - cmp mouseClick3D,0 - je slot_handle_keys - cmp mouseY3D,222 - jb slot_handle_keys - cmp mouseY3D,238 - jae slot_handle_keys - mov mouseClick3D,0 - mov eax,mouseX3D - cmp eax,11 - jb slot_handle_keys - cmp eax,29 - jb slot_bet_down - cmp eax,35 - jb slot_handle_keys - cmp eax,53 - jb slot_bet_up - cmp eax,120 - jb slot_handle_keys - cmp eax,190 - jb slot_handle_start - cmp eax,202 - jb slot_handle_keys - cmp eax,272 - jae slot_handle_keys - mov slotPaytable3D,1 - ret -slot_handle_keys: - invoke Pressed3D,50h - test eax,eax - jz @F - mov slotPaytable3D,1 - ret -@@: - invoke Pressed3D,57h - test eax,eax - jnz slot_bet_up - invoke Pressed3D,26h - test eax,eax - jnz slot_bet_up - invoke Pressed3D,53h - test eax,eax - jnz slot_bet_down - invoke Pressed3D,28h - test eax,eax - jnz slot_bet_down - invoke Pressed3D,20h - test eax,eax - jnz slot_handle_start - invoke Pressed3D,0Dh - test eax,eax - jz slot_handle_exit_mouse -slot_handle_start: - call StartNativeSlots3D - ret -slot_bet_up: - cmp slotBetIndex3D,6 - jae slot_handle_done - inc slotBetIndex3D - jmp slot_bet_changed -slot_bet_down: - cmp slotBetIndex3D,0 - je slot_handle_done - dec slotBetIndex3D -slot_bet_changed: - mov ecx,slotBetIndex3D - mov eax,slotBetValues3D[ecx*4] - mov slotBet,eax - mov slotError3D,0 - ret -slot_handle_exit_mouse: - call SlotExitMouse3D -slot_handle_done: - ret -HandleNativeSlots3D ENDP - -; Clip the 64x64 alpha-tested symbol to its own reel window, not the cabinet. -DrawSlotSymbol3D PROC uses ebx esi edi symbol:DWORD,x:DWORD,y:DWORD - local row:DWORD,lastRow:DWORD,source:DWORD - cmp symbol,7 - ja slot_symbol_done - mov eax,slotSymbolsPack3D.pixels - test eax,eax - jz slot_symbol_done - mov ecx,symbol - shl ecx,14 - add eax,ecx - mov source,eax - mov eax,y - cmp eax,SLOT_TOP - jge @F - mov eax,SLOT_TOP -@@: - mov row,eax - mov eax,y - add eax,64 - cmp eax,SLOT_BOTTOM - jle @F - mov eax,SLOT_BOTTOM -@@: - mov lastRow,eax -slot_symbol_row: - mov eax,row - cmp eax,lastRow - jge slot_symbol_done - mov ecx,eax - sub ecx,y - shl ecx,8 - mov esi,source - add esi,ecx - imul eax,640*4 - mov ecx,x - lea edi,screenBuffer[eax+ecx*4] - mov ecx,64 -slot_symbol_column: - lodsd - test eax,0FF000000h - jz @F - and eax,00FFFFFFh - mov [edi],eax -@@: - add edi,4 - dec ecx - jnz slot_symbol_column - inc row - jmp slot_symbol_row -slot_symbol_done: - ret -DrawSlotSymbol3D ENDP - -DrawSlotReel3D PROC uses ebx esi edi index:DWORD - local offsetPx:DWORD,baseStop:DWORD,symbolY:DWORD,symbolX:DWORD - invoke SlotReelPosition3D,index - xor edx,edx - mov ecx,64 - div ecx - mov offsetPx,edx - xor edx,edx - mov ecx,20 - div ecx - mov baseStop,edx - mov ebx,index - mov eax,slotWindows3D[ebx*4] - add eax,12 - mov symbolX,eax - mov eax,160 - sub eax,offsetPx - sub eax,64 - mov symbolY,eax - mov esi,baseStop - add esi,19 - xor edi,edi -slot_reel_symbol: - mov eax,esi - xor edx,edx - mov ecx,20 - div ecx - mov eax,slotStrip3D[edx*4] - invoke DrawSlotSymbol3D,eax,symbolX,symbolY - add symbolY,64 - inc esi - inc edi - cmp edi,4 - jb slot_reel_symbol - ret -DrawSlotReel3D ENDP - -RenderNativeSlots3D PROC uses ebx esi edi - ; The validated cabinet is opaque and already framebuffer-sized. - mov esi,slotCabinetPack3D.pixels - test esi,esi - jz slot_render_done - lea edi,screenBuffer - mov ecx,SCREEN_SIZE - rep movsd - xor esi,esi -slot_render_reels: - invoke DrawSlotReel3D,esi - inc esi - cmp esi,3 - jb slot_render_reels - ; The payline is fixed at the center of the three physical drums. - invoke DrawBox,86,94,4,3,00E9CE71h - invoke DrawBox,232,94,4,3,00E9CE71h - cmp slotSpinState,SLOT_RESULT - jne slot_render_header - mov eax,slotWinAmount - cmp eax,slotStake3D - jbe slot_render_header - mov eax,slotEffects3D - xor edx,edx - mov ecx,200 - div ecx - test eax,1 - jnz slot_render_header - invoke DrawBox,90,94,142,1,00E9CE71h -slot_render_header: - invoke DrawBox,0,0,320,19,00151D20h - invoke DrawString8x8,8,6,OFFSET slotTitle3D,00E8D7ADh - invoke DrawString8x8,54,6,OFFSET textBank3D,00A8DDB9h - invoke FormatNumber,bankroll,OFFSET hudNumBuffer - invoke DrawString8x8,103,6,OFFSET hudNumBuffer,00F4F3E8h - invoke DrawBoxBorder,252,3,60,14,002C3637h,00687672h,1 - invoke DrawString8x8,258,6,OFFSET cardExitButton3D,00E9D8B0h - mov ebx,OFFSET slotReadyText3D - cmp slotSpinState,SLOT_SPIN - jne @F - mov ebx,OFFSET slotRollingText3D -@@: - cmp slotSpinState,SLOT_RESULT - jne @F - mov ebx,OFFSET slotLoseText3D - mov eax,slotWinAmount - cmp eax,slotStake3D - jb @F - mov ebx,OFFSET slotRefundText3D - je @F - mov ebx,OFFSET slotWinText3D -@@: - cmp slotError3D,0 - je @F - mov ebx,OFFSET slotNoMoney3D -@@: - cmp slotLeaveAfter3D,0 - je @F - mov ebx,OFFSET slotExitText3D -@@: - ; Keep the message on the generated inset plate, with fixed-size numerals. - invoke DrawBox,98,147,126,12,00151D20h - invoke DrawString8x8,104,149,ebx,00E8D7ADh - cmp slotSpinState,SLOT_RESULT - jne slot_render_controls - cmp ebx,OFFSET slotWinText3D - je @F - cmp ebx,OFFSET slotRefundText3D - jne slot_render_controls -@@: - invoke FormatNumber,slotWinAmount,OFFSET hudNumBuffer - invoke DrawString8x8,164,149,OFFSET hudNumBuffer,00A8DDB9h -slot_render_controls: - invoke DrawBox,0,198,320,42,00151D20h - invoke DrawString8x8,11,201,OFFSET slotBetText3D,00E8D7ADh - invoke FormatNumber,slotBet,OFFSET hudNumBuffer - invoke DrawString8x8,75,201,OFFSET hudNumBuffer,00F4F3E8h - cmp slotSpinState,SLOT_RESULT - jne @F - invoke DrawSlotTotals3D,slotWinAmount,slotStake3D,120 -@@: - mov ebx,1 - cmp slotSpinState,SLOT_SPIN - jne @F - xor ebx,ebx -@@: - mov edi,006D7470h - test ebx,ebx - jz @F - mov edi,00EEE5CDh -@@: - invoke DrawBoxBorder,11,222,18,16,0025372Ch,edi,1 - invoke DrawBoxBorder,35,222,18,16,0025372Ch,edi,1 - invoke DrawString8x8,16,226,OFFSET tableMinusText3D,edi - invoke DrawString8x8,40,226,OFFSET tablePlusText3D,edi - invoke DrawTableButton3D,120,OFFSET slotSpinText3D,ebx - invoke DrawTableButton3D,202,OFFSET slotPayText3D,ebx - cmp slotPaytable3D,0 - je slot_render_done - invoke DrawBoxBorder,30,23,260,198,00151D20h,00D1B16Eh,1 - invoke DrawString8x8,76,31,OFFSET slotPayTitle3D,00E8D7ADh - invoke DrawString8x8,42,48,OFFSET slotTripleText3D,00A8DDB9h - xor esi,esi -slot_render_pay_row: - mov edi,esi - imul edi,12 - add edi,62 - mov eax,slotSymbolNames3D[esi*4] - invoke DrawString8x8,62,edi,eax,00F4F3E8h - invoke FormatNumber,slotTriple3D[esi*4],OFFSET hudNumBuffer - invoke DrawString8x8,212,edi,OFFSET strMultiplier3D,00E8D7ADh - invoke DrawString8x8,220,edi,OFFSET hudNumBuffer,00E8D7ADh - inc esi - cmp esi,8 - jb slot_render_pay_row - invoke DrawString8x8,62,160,OFFSET slotPairText3D,00A8DDB9h - invoke DrawString8x8,62,173,OFFSET slotCherryPair3D,00A8DDB9h - invoke DrawString8x8,42,188,OFFSET slotPayNote3D,00A8DDB9h - invoke DrawBoxBorder,112,204,96,15,003B6C59h,00E9D8B0h,1 - invoke DrawString8x8,128,207,OFFSET slotCloseText3D,00E9D8B0h -slot_render_done: - ret -RenderNativeSlots3D ENDP - -; Gross is the actual credited sum, including any returned stake. -DrawSlotTotals3D PROC uses ebx esi edi gross:DWORD,stake:DWORD,x:DWORD - mov ebx,x - lea edi,[ebx+72] - invoke DrawString8x8,ebx,201,OFFSET slotWinText3D,00E8D7ADh - invoke FormatNumber,gross,OFFSET hudNumBuffer - invoke DrawString8x8,edi,201,OFFSET hudNumBuffer,00F4F3E8h - invoke DrawString8x8,ebx,211,OFFSET slotNetText3D,00E8D7ADh - mov eax,gross - sub eax,stake - mov esi,00D0D4D0h - lea ebx,slotNetBuffer3D - test eax,eax - jz totals_format - mov BYTE PTR [ebx],'+' - mov esi,00A8DDB9h - jns @F - mov BYTE PTR [ebx],'-' - mov esi,00EE9988h - neg eax -@@: - inc ebx -totals_format: - invoke FormatNumber,eax,ebx - invoke DrawString8x8,edi,211,OFFSET slotNetBuffer3D,esi - ret -DrawSlotTotals3D ENDP +FreeNativeSlots3D PROC + invoke FreeAnimPack3D, OFFSET slotCabinetPack3D + invoke FreeAnimPack3D, OFFSET slotSymbolsPack3D + ret +FreeNativeSlots3D ENDP + +InitNativeSlots3D PROC + invoke LoadAnimPack3D, OFFSET slotCabinetPack3D, OFFSET slotCabinetPath3D + test eax,eax + jz slot_init_fail + cmp slotCabinetPack3D.imageWidth,640 + jne slot_init_fail + cmp slotCabinetPack3D.height,480 + jne slot_init_fail + cmp slotCabinetPack3D.frames,1 + jne slot_init_fail + invoke LoadAnimPack3D, OFFSET slotSymbolsPack3D, OFFSET slotSymbolsPath3D + test eax,eax + jz slot_init_fail + cmp slotSymbolsPack3D.imageWidth,64 + jne slot_init_fail + cmp slotSymbolsPack3D.height,64 + jne slot_init_fail + cmp slotSymbolsPack3D.frames,8 + jne slot_init_fail + mov slotSpinState,SLOT_READY + mov slotSpinTimer,0 + mov slotWinAmount,0 + mov slotStake3D,0 + mov slotLeaveAfter3D,0 + mov slotPaytable3D,0 + mov slotError3D,0 + mov slotEffects3D,0 + mov slotBetIndex3D,1 + mov slotBet,50 + mov cardExitActive3D,0 + mov paused3D,0 + call ClearKeys3D + mov eax,1 + ret +slot_init_fail: + call FreeNativeSlots3D + xor eax,eax + ret +InitNativeSlots3D ENDP + +; Results are sampled once at stake debit. Rendering never consumes RNG or pays. +StartNativeSlots3D PROC uses ebx esi + cmp slotSpinState,SLOT_SPIN + je slot_start_done + cmp slotPaytable3D,0 + jne slot_start_done + cmp slotCabinetPack3D.pixels,0 + je slot_start_done + cmp slotSymbolsPack3D.pixels,0 + je slot_start_done + mov eax,slotBet + test eax,eax + jz slot_start_done + cmp eax,10000 + ja slot_start_done + cmp eax,bankroll + ja slot_start_money + sub bankroll,eax + mov slotStake3D,eax + mov slotSpinState,SLOT_SPIN + mov slotSpinTimer,0 + mov slotWinAmount,0 + mov slotLeaveAfter3D,0 + mov slotError3D,0 + mov slotEffects3D,0 + xor esi,esi +slot_start_reel: + mov eax,slotStops3D[esi*4] + mov slotStartStops3D[esi*4],eax + invoke RandomRange3D,20 + mov slotTargets3D[esi*4],eax + mov edx,slotStrip3D[eax*4] + mov slotReel1[esi*4],edx + sub eax,slotStartStops3D[esi*4] + jns @F + add eax,20 +@@: + add eax,slotCycles3D[esi*4] + shl eax,6 + mov slotTravel3D[esi*4],eax + inc esi + cmp esi,3 + jb slot_start_reel + call SaveProgress3D + invoke PlayCasinoSound3D, OFFSET soundSlotSpin,0,1 + ret +slot_start_money: + mov slotError3D,1 +slot_start_done: + ret +StartNativeSlots3D ENDP + +; Gross multipliers. A cherry pair pays 2x, any other pair returns the stake. +SlotMultiplier3D PROC first:DWORD,second:DWORD,third:DWORD + mov eax,first + cmp eax,7 + ja slot_multiplier_zero + cmp second,7 + ja slot_multiplier_zero + cmp third,7 + ja slot_multiplier_zero + cmp eax,second + jne slot_multiplier_other_pair + cmp eax,third + jne slot_multiplier_pair + mov eax,slotTriple3D[eax*4] + ret +slot_multiplier_other_pair: + cmp eax,third + je slot_multiplier_pair + mov eax,second + cmp eax,third + jne slot_multiplier_zero +slot_multiplier_pair: + cmp eax,1 + jne @F + mov eax,2 + ret +@@: + mov eax,1 + ret +slot_multiplier_zero: + xor eax,eax + ret +SlotMultiplier3D ENDP + +SettleNativeSlots3D PROC uses esi + cmp slotSpinState,SLOT_SPIN + jne slot_settle_done + invoke SlotMultiplier3D,slotReel1,slotReel2,slotReel3 + mul slotStake3D + mov ecx,1000000000 + sub ecx,bankroll + cmp eax,ecx + jbe @F + mov eax,ecx +@@: + mov slotWinAmount,eax + add bankroll,eax + jc slot_settle_cap + cmp bankroll,1000000000 + jbe @F +slot_settle_cap: + mov bankroll,1000000000 +@@: + xor esi,esi +slot_settle_stops: + mov eax,slotTargets3D[esi*4] + mov slotStops3D[esi*4],eax + inc esi + cmp esi,3 + jb slot_settle_stops + mov slotSpinTimer,3000 + mov slotSpinState,SLOT_RESULT + mov slotEffects3D,0 + xor eax,eax + mov ecx,slotWinAmount + cmp ecx,slotStake3D + seta al + invoke NpcRecordRound3D,4,eax + call SaveProgress3D + mov eax,slotWinAmount + cmp eax,slotStake3D + jb slot_settle_loss + jne @F + invoke PlayCasinoSound3D,0,0,0 + jmp slot_settle_exit +@@: + invoke PlayCasinoSound3D,OFFSET soundRoundWin,0,1 + invoke TriggerCharmWinBonus, slotWinAmount + jmp slot_settle_exit +slot_settle_loss: + invoke TriggerCharmLossProtection, slotStake3D + test eax, eax + jnz slot_settle_exit + invoke PlayCasinoSound3D,OFFSET soundRoundLose,0,1 +slot_settle_exit: + cmp slotLeaveAfter3D,0 + je slot_settle_done + call SlotEscape3D +slot_settle_done: + ret +SettleNativeSlots3D ENDP + +; Escape queues a safe exit during a paid spin; it never opens the pause menu. +SlotEscape3D PROC + mov paused3D,0 + cmp slotPaytable3D,0 + je @F + mov slotPaytable3D,0 + call ClearKeys3D + ret +@@: + cmp slotSpinState,SLOT_SPIN + jne slot_exit_hall + mov slotLeaveAfter3D,1 + call ClearKeys3D + ret +slot_exit_hall: + mov slotLeaveAfter3D,0 + mov paused3D,0 + mov engineMode,MODE_WALK + call ClearKeys3D + invoke PlayCasinoSound3D,0,0,0 + ret +SlotEscape3D ENDP + +; A monotonic quadratic ease-out maps elapsed milliseconds to strip pixels. +SlotReelPosition3D PROC uses ebx index:DWORD + mov ebx,index + cmp ebx,2 + ja slot_position_zero + mov eax,slotStops3D[ebx*4] + shl eax,6 + cmp slotSpinState,SLOT_SPIN + jne slot_position_done + mov eax,slotSpinTimer + cmp eax,slotDurations3D[ebx*4] + jae slot_position_end + shl eax,10 + xor edx,edx + div slotDurations3D[ebx*4] + mov ecx,2048 + sub ecx,eax + imul eax,ecx + mul slotTravel3D[ebx*4] + shrd eax,edx,20 + mov edx,slotStartStops3D[ebx*4] + shl edx,6 + add eax,edx + ret +slot_position_end: + mov eax,slotStartStops3D[ebx*4] + shl eax,6 + add eax,slotTravel3D[ebx*4] +slot_position_done: + ret +slot_position_zero: + xor eax,eax + ret +SlotReelPosition3D ENDP + +SlotExitMouse3D PROC + cmp mouseClick3D,0 + je slot_exit_mouse_done + mov mouseClick3D,0 + cmp mouseY3D,3 + jb slot_exit_mouse_done + cmp mouseY3D,17 + jae slot_exit_mouse_done + cmp mouseX3D,252 + jb slot_exit_mouse_done + cmp mouseX3D,312 + jae slot_exit_mouse_done + call SlotEscape3D +slot_exit_mouse_done: + ret +SlotExitMouse3D ENDP + +HandleNativeSlots3D PROC uses ebx + cmp slotSpinState,SLOT_SPIN + jne slot_handle_idle + ; Process the header before settlement so the final spin tick cannot eat it. + call SlotExitMouse3D + mov eax,deltaTime3D + cmp eax,250 + jbe @F + mov eax,250 +@@: + add slotSpinTimer,eax + cmp slotSpinTimer,3000 + jb slot_handle_exit_mouse + call SettleNativeSlots3D + ret +slot_handle_idle: + mov eax,deltaTime3D + add slotEffects3D,eax + cmp slotEffects3D,2000 + jbe @F + mov slotEffects3D,2000 +@@: + cmp slotPaytable3D,0 + je slot_handle_controls + invoke Pressed3D,0Dh + test eax,eax + jnz slot_close_paytable + invoke Pressed3D,20h + test eax,eax + jnz slot_close_paytable + invoke Pressed3D,50h + test eax,eax + jnz slot_close_paytable + cmp mouseClick3D,0 + je slot_handle_done + mov mouseClick3D,0 + cmp mouseY3D,202 + jb slot_handle_done + cmp mouseY3D,220 + jae slot_handle_done + cmp mouseX3D,112 + jb slot_handle_done + cmp mouseX3D,208 + jae slot_handle_done +slot_close_paytable: + mov slotPaytable3D,0 + ret +slot_handle_controls: + cmp mouseClick3D,0 + je slot_handle_keys + cmp mouseY3D,222 + jb slot_handle_keys + cmp mouseY3D,238 + jae slot_handle_keys + mov mouseClick3D,0 + mov eax,mouseX3D + cmp eax,11 + jb slot_handle_keys + cmp eax,29 + jb slot_bet_down + cmp eax,35 + jb slot_handle_keys + cmp eax,53 + jb slot_bet_up + cmp eax,120 + jb slot_handle_keys + cmp eax,190 + jb slot_handle_start + cmp eax,202 + jb slot_handle_keys + cmp eax,272 + jae slot_handle_keys + mov slotPaytable3D,1 + ret +slot_handle_keys: + invoke Pressed3D,50h + test eax,eax + jz @F + mov slotPaytable3D,1 + ret +@@: + invoke Pressed3D,57h + test eax,eax + jnz slot_bet_up + invoke Pressed3D,26h + test eax,eax + jnz slot_bet_up + invoke Pressed3D,53h + test eax,eax + jnz slot_bet_down + invoke Pressed3D,28h + test eax,eax + jnz slot_bet_down + invoke Pressed3D,20h + test eax,eax + jnz slot_handle_start + invoke Pressed3D,0Dh + test eax,eax + jz slot_handle_exit_mouse +slot_handle_start: + call StartNativeSlots3D + ret +slot_bet_up: + cmp slotBetIndex3D,6 + jae slot_handle_done + inc slotBetIndex3D + jmp slot_bet_changed +slot_bet_down: + cmp slotBetIndex3D,0 + je slot_handle_done + dec slotBetIndex3D +slot_bet_changed: + mov ecx,slotBetIndex3D + mov eax,slotBetValues3D[ecx*4] + mov slotBet,eax + mov slotError3D,0 + ret +slot_handle_exit_mouse: + call SlotExitMouse3D +slot_handle_done: + ret +HandleNativeSlots3D ENDP + +; Clip the 64x64 alpha-tested symbol to its own reel window, not the cabinet. +DrawSlotSymbol3D PROC uses ebx esi edi symbol:DWORD,x:DWORD,y:DWORD + local row:DWORD,lastRow:DWORD,source:DWORD + cmp symbol,7 + ja slot_symbol_done + mov eax,slotSymbolsPack3D.pixels + test eax,eax + jz slot_symbol_done + mov ecx,symbol + shl ecx,14 + add eax,ecx + mov source,eax + mov eax,y + cmp eax,SLOT_TOP + jge @F + mov eax,SLOT_TOP +@@: + mov row,eax + mov eax,y + add eax,64 + cmp eax,SLOT_BOTTOM + jle @F + mov eax,SLOT_BOTTOM +@@: + mov lastRow,eax +slot_symbol_row: + mov eax,row + cmp eax,lastRow + jge slot_symbol_done + mov ecx,eax + sub ecx,y + shl ecx,8 + mov esi,source + add esi,ecx + imul eax,640*4 + mov ecx,x + lea edi,screenBuffer[eax+ecx*4] + mov ecx,64 +slot_symbol_column: + lodsd + test eax,0FF000000h + jz @F + and eax,00FFFFFFh + mov [edi],eax +@@: + add edi,4 + dec ecx + jnz slot_symbol_column + inc row + jmp slot_symbol_row +slot_symbol_done: + ret +DrawSlotSymbol3D ENDP + +DrawSlotReel3D PROC uses ebx esi edi index:DWORD + local offsetPx:DWORD,baseStop:DWORD,symbolY:DWORD,symbolX:DWORD + invoke SlotReelPosition3D,index + xor edx,edx + mov ecx,64 + div ecx + mov offsetPx,edx + xor edx,edx + mov ecx,20 + div ecx + mov baseStop,edx + mov ebx,index + mov eax,slotWindows3D[ebx*4] + add eax,12 + mov symbolX,eax + mov eax,160 + sub eax,offsetPx + sub eax,64 + mov symbolY,eax + mov esi,baseStop + add esi,19 + xor edi,edi +slot_reel_symbol: + mov eax,esi + xor edx,edx + mov ecx,20 + div ecx + mov eax,slotStrip3D[edx*4] + invoke DrawSlotSymbol3D,eax,symbolX,symbolY + add symbolY,64 + inc esi + inc edi + cmp edi,4 + jb slot_reel_symbol + ret +DrawSlotReel3D ENDP + +RenderNativeSlots3D PROC uses ebx esi edi + ; The validated cabinet is opaque and already framebuffer-sized. + mov esi,slotCabinetPack3D.pixels + test esi,esi + jz slot_render_done + lea edi,screenBuffer + mov ecx,SCREEN_SIZE + rep movsd + xor esi,esi +slot_render_reels: + invoke DrawSlotReel3D,esi + inc esi + cmp esi,3 + jb slot_render_reels + ; The payline is fixed at the center of the three physical drums. + invoke DrawBox,86,94,4,3,00E9CE71h + invoke DrawBox,232,94,4,3,00E9CE71h + cmp slotSpinState,SLOT_RESULT + jne slot_render_header + mov eax,slotWinAmount + cmp eax,slotStake3D + jbe slot_render_header + mov eax,slotEffects3D + xor edx,edx + mov ecx,200 + div ecx + test eax,1 + jnz slot_render_header + invoke DrawBox,90,94,142,1,00E9CE71h +slot_render_header: + invoke DrawBox,0,0,320,19,00151D20h + invoke DrawString8x8,8,6,OFFSET slotTitle3D,00E8D7ADh + invoke DrawString8x8,54,6,OFFSET textBank3D,00A8DDB9h + invoke FormatNumber,bankroll,OFFSET hudNumBuffer + invoke DrawString8x8,103,6,OFFSET hudNumBuffer,00F4F3E8h + invoke DrawBoxBorder,252,3,60,14,002C3637h,00687672h,1 + invoke DrawString8x8,258,6,OFFSET cardExitButton3D,00E9D8B0h + mov ebx,OFFSET slotReadyText3D + cmp slotSpinState,SLOT_SPIN + jne @F + mov ebx,OFFSET slotRollingText3D +@@: + cmp slotSpinState,SLOT_RESULT + jne @F + mov ebx,OFFSET slotLoseText3D + mov eax,slotWinAmount + cmp eax,slotStake3D + jb @F + mov ebx,OFFSET slotRefundText3D + je @F + mov ebx,OFFSET slotWinText3D +@@: + cmp slotError3D,0 + je @F + mov ebx,OFFSET slotNoMoney3D +@@: + cmp slotLeaveAfter3D,0 + je @F + mov ebx,OFFSET slotExitText3D +@@: + ; Keep the message on the generated inset plate, with fixed-size numerals. + invoke DrawBox,98,147,126,12,00151D20h + invoke DrawString8x8,104,149,ebx,00E8D7ADh + cmp slotSpinState,SLOT_RESULT + jne slot_render_controls + cmp ebx,OFFSET slotWinText3D + je @F + cmp ebx,OFFSET slotRefundText3D + jne slot_render_controls +@@: + invoke FormatNumber,slotWinAmount,OFFSET hudNumBuffer + invoke DrawString8x8,164,149,OFFSET hudNumBuffer,00A8DDB9h +slot_render_controls: + invoke DrawBox,0,198,320,42,00151D20h + invoke DrawString8x8,11,201,OFFSET slotBetText3D,00E8D7ADh + invoke FormatNumber,slotBet,OFFSET hudNumBuffer + invoke DrawString8x8,75,201,OFFSET hudNumBuffer,00F4F3E8h + cmp slotSpinState,SLOT_RESULT + jne @F + invoke DrawSlotTotals3D,slotWinAmount,slotStake3D,120 +@@: + mov ebx,1 + cmp slotSpinState,SLOT_SPIN + jne @F + xor ebx,ebx +@@: + mov edi,006D7470h + test ebx,ebx + jz @F + mov edi,00EEE5CDh +@@: + invoke DrawBoxBorder,11,222,18,16,0025372Ch,edi,1 + invoke DrawBoxBorder,35,222,18,16,0025372Ch,edi,1 + invoke DrawString8x8,16,226,OFFSET tableMinusText3D,edi + invoke DrawString8x8,40,226,OFFSET tablePlusText3D,edi + invoke DrawTableButton3D,120,OFFSET slotSpinText3D,ebx + invoke DrawTableButton3D,202,OFFSET slotPayText3D,ebx + cmp slotPaytable3D,0 + je slot_render_done + invoke DrawBoxBorder,30,23,260,198,00151D20h,00D1B16Eh,1 + invoke DrawString8x8,76,31,OFFSET slotPayTitle3D,00E8D7ADh + invoke DrawString8x8,42,48,OFFSET slotTripleText3D,00A8DDB9h + xor esi,esi +slot_render_pay_row: + mov edi,esi + imul edi,12 + add edi,62 + mov eax,slotSymbolNames3D[esi*4] + invoke DrawString8x8,62,edi,eax,00F4F3E8h + invoke FormatNumber,slotTriple3D[esi*4],OFFSET hudNumBuffer + invoke DrawString8x8,212,edi,OFFSET strMultiplier3D,00E8D7ADh + invoke DrawString8x8,220,edi,OFFSET hudNumBuffer,00E8D7ADh + inc esi + cmp esi,8 + jb slot_render_pay_row + invoke DrawString8x8,62,160,OFFSET slotPairText3D,00A8DDB9h + invoke DrawString8x8,62,173,OFFSET slotCherryPair3D,00A8DDB9h + invoke DrawString8x8,42,188,OFFSET slotPayNote3D,00A8DDB9h + invoke DrawBoxBorder,112,204,96,15,003B6C59h,00E9D8B0h,1 + invoke DrawString8x8,128,207,OFFSET slotCloseText3D,00E9D8B0h +slot_render_done: + ret +RenderNativeSlots3D ENDP + +; Gross is the actual credited sum, including any returned stake. +DrawSlotTotals3D PROC uses ebx esi edi gross:DWORD,stake:DWORD,x:DWORD + mov ebx,x + lea edi,[ebx+72] + invoke DrawString8x8,ebx,201,OFFSET slotWinText3D,00E8D7ADh + invoke FormatNumber,gross,OFFSET hudNumBuffer + invoke DrawString8x8,edi,201,OFFSET hudNumBuffer,00F4F3E8h + invoke DrawString8x8,ebx,211,OFFSET slotNetText3D,00E8D7ADh + mov eax,gross + sub eax,stake + mov esi,00D0D4D0h + lea ebx,slotNetBuffer3D + test eax,eax + jz totals_format + mov BYTE PTR [ebx],'+' + mov esi,00A8DDB9h + jns @F + mov BYTE PTR [ebx],'-' + mov esi,00EE9988h + neg eax +@@: + inc ebx +totals_format: + invoke FormatNumber,eax,ebx + invoke DrawString8x8,edi,211,OFFSET slotNetBuffer3D,esi + ret +DrawSlotTotals3D ENDP diff --git a/src_graphics/native_wheel.inc b/src_graphics/native_wheel.inc index 0b07b90..1dd2522 100644 --- a/src_graphics/native_wheel.inc +++ b/src_graphics/native_wheel.inc @@ -1,976 +1,986 @@ -InitNativeWheel3D PROC uses edi - lea edi, wheelBets3D - xor eax, eax - mov ecx, 49 - rep stosd - mov roulState, 0 - mov wheelStake3D, 0 - mov wheelReturn3D, 0 - mov wheelTime3D, 0 - mov wheelExitQueued3D, 0 - call LoadNativeWheelArt3D - ret -InitNativeWheel3D ENDP - -WheelAddBet3D PROC index:DWORD - cmp roulState, 0 - jne wheel_add_done - mov ecx, index - cmp ecx, 48 - ja wheel_add_done - mov eax, wheelStake3D - add eax, wheelChip3D - jc wheel_add_done - cmp eax, bankroll - ja wheel_add_done - mov wheelStake3D, eax - mov eax, wheelChip3D - add wheelBets3D[ecx*4], eax -wheel_add_done: - ret -WheelAddBet3D ENDP - -; Gross returns include the stake, so zero is a loss for every outside bet. -WheelBetMultiplier3D PROC uses ebx index:DWORD,result:DWORD - mov ecx, index - mov ebx, result - xor eax, eax - cmp ecx, 37 - jae wheel_outside - cmp ecx, ebx - jne wheel_multiplier_done - mov eax, 36 - ret -wheel_outside: - test ebx, ebx - jz wheel_multiplier_done - cmp ecx, 39 - jae wheel_parity - bt wheelRedMask3D, ebx - setc al - cmp ecx, 37 - je @F - xor eax, 1 -@@: - shl eax, 1 - ret -wheel_parity: - cmp ecx, 41 - jae wheel_halves - mov eax, ebx - and eax, 1 - cmp ecx, 40 - je @F - xor eax, 1 -@@: - shl eax, 1 - ret -wheel_halves: - cmp ecx, 43 - jae wheel_dozen_column - cmp ebx, 18 - seta al - cmp ecx, 42 - je @F - xor eax, 1 -@@: - shl eax, 1 - ret -wheel_dozen_column: - mov eax, ebx - dec eax - xor edx, edx - cmp ecx, 46 - jae wheel_column - mov ebx, 12 - div ebx - sub ecx, 43 - cmp eax, ecx - jne wheel_multiplier_zero - mov eax, 3 - ret -wheel_column: - mov ebx, 3 - div ebx - sub ecx, 46 - cmp edx, ecx - jne wheel_multiplier_zero - mov eax, 3 - ret -wheel_multiplier_zero: - xor eax, eax -wheel_multiplier_done: - ret -WheelBetMultiplier3D ENDP - -WheelSettle3D PROC uses ebx esi - cmp roulState, 1 - jne wheel_settle_done - mov wheelReturn3D, 0 - xor esi, esi -wheel_settle_loop: - invoke WheelBetMultiplier3D, esi,wheelResult3D - mul wheelBets3D[esi*4] - test edx, edx - jnz wheel_settle_cap - add wheelReturn3D, eax - jc wheel_settle_cap - cmp wheelReturn3D, 1000000000 - jbe wheel_settle_next -wheel_settle_cap: - mov wheelReturn3D, 1000000000 -wheel_settle_next: - inc esi - cmp esi, 49 - jb wheel_settle_loop - mov eax, wheelReturn3D - add bankroll, eax - jc wheel_bank_cap - cmp bankroll, 1000000000 - jbe @F -wheel_bank_cap: - mov bankroll, 1000000000 -@@: - mov roulState, 2 - xor eax,eax - mov ecx,wheelReturn3D - cmp ecx,wheelStake3D - seta al - invoke NpcRecordRound3D,3,eax - call SaveProgress3D -wheel_settle_done: - ret -WheelSettle3D ENDP - -HandleNativeWheel3D PROC uses ebx esi edi - cmp mouseClick3D,0 - je wheel_header_done - cmp mouseY3D,3 - jb wheel_header_done - cmp mouseY3D,17 - jae wheel_header_done - cmp mouseX3D,252 - jb wheel_header_done - cmp mouseX3D,312 - jae wheel_header_done - mov mouseClick3D,0 - call WheelEscape3D - cmp engineMode,MODE_WALK - je wheel_handle_done -wheel_header_done: - cmp roulState, 1 - jne wheel_draft_input - mov eax, deltaTime3D - add wheelTime3D, eax - cmp wheelTime3D, 4200 - jb wheel_handle_done - call WheelSettle3D - cmp wheelExitQueued3D,0 - je wheel_handle_done - call WheelEscape3D - ret -wheel_draft_input: - cmp roulState, 2 - jne @F - ; Keep the landed ball and payout visible until an explicit next-round command. - invoke Pressed3D,20h - test eax,eax - jnz wheel_next_layout - invoke Pressed3D,0Dh - test eax,eax - jnz wheel_next_layout - cmp mouseClick3D,0 - je wheel_handle_done - cmp mouseY3D,219 - jb wheel_handle_done - cmp mouseY3D,237 - jae wheel_handle_done - cmp mouseX3D,120 - jb wheel_handle_done - cmp mouseX3D,200 - jae wheel_handle_done -wheel_next_layout: - mov mouseClick3D,0 - call InitNativeWheel3D - ret -@@: - invoke Pressed3D, 57h - test eax, eax - jz @F - cmp wheelChip3D, 1000000 - jae @F - add wheelChip3D, 50 -@@: - invoke Pressed3D, 53h - test eax, eax - jz @F - cmp wheelChip3D, 50 - jbe @F - sub wheelChip3D, 50 -@@: - invoke Pressed3D, 08h - test eax, eax - jz wheel_mouse - call InitNativeWheel3D -wheel_mouse: - cmp mouseClick3D, 0 - je wheel_spin_input - cmp mouseY3D, 123 - jb wheel_button - cmp mouseY3D, 183 - jae wheel_mouse_outside - cmp mouseX3D, 60 - jae wheel_mouse_number - cmp mouseX3D, 24 - jb wheel_spin_input - invoke WheelAddBet3D, 0 - jmp wheel_spin_input -wheel_mouse_number: - cmp mouseX3D, 300 - jae wheel_spin_input - mov eax, mouseX3D - sub eax, 60 - xor edx, edx - mov ecx, 20 - div ecx - imul ebx, eax, 3 - mov eax, mouseY3D - sub eax, 123 - xor edx, edx - div ecx - neg eax - add eax,2 - add eax, ebx - inc eax - invoke WheelAddBet3D, eax - jmp wheel_spin_input -wheel_mouse_outside: - cmp mouseY3D, 223 - jae wheel_button - cmp mouseX3D, 24 - jb wheel_spin_input - cmp mouseX3D, 300 - jae wheel_spin_input - mov eax, mouseX3D - sub eax, 24 - xor edx, edx - mov ecx, 46 - div ecx - mov ebx, eax - mov eax, mouseY3D - sub eax, 183 - xor edx, edx - mov ecx, 20 - div ecx - imul eax, 6 - add eax, ebx - add eax, 37 - invoke WheelAddBet3D, eax - jmp wheel_spin_input -wheel_button: - cmp mouseY3D, 105 - jb wheel_spin_input - cmp mouseY3D, 121 - jae wheel_spin_input - cmp mouseX3D,145 - jb wheel_spin_input - cmp mouseX3D,159 - jb wheel_mouse_more - cmp mouseX3D,162 - jb wheel_spin_input - cmp mouseX3D,176 - jb wheel_mouse_less - cmp mouseX3D,180 - jb wheel_spin_input - cmp mouseX3D,226 - jb wheel_mouse_clear - cmp mouseX3D, 230 - jb wheel_spin_input - cmp mouseX3D,300 - jae wheel_spin_input - mov pressedKeys3D[20h], 1 - jmp wheel_spin_input -wheel_mouse_more: - cmp wheelChip3D,1000000 - jae wheel_handle_done - add wheelChip3D,50 - ret -wheel_mouse_less: - cmp wheelChip3D,50 - jbe wheel_handle_done - sub wheelChip3D,50 - ret -wheel_mouse_clear: - call InitNativeWheel3D - ret -wheel_spin_input: - cmp roulState, 2 - jne wheel_regular_spin - cmp tournamentMode, 1 - jne wheel_regular_spin - invoke Pressed3D, 20h - test eax, eax - jnz wheel_tourney_report - invoke Pressed3D, 0Dh - test eax, eax - jnz wheel_tourney_report - ret -wheel_tourney_report: - mov ecx, wheelReturn3D - cmp ecx, wheelStake3D - ja wheel_tourney_win - invoke TowerReportRoundOutcome, 2 - ret -wheel_tourney_win: - invoke TowerReportRoundOutcome, 1 - ret -wheel_regular_spin: - invoke Pressed3D, 20h - test eax, eax - jz wheel_handle_done - cmp wheelArtReady3D,1 - jne wheel_handle_done - mov eax, wheelStake3D - test eax, eax - jz wheel_handle_done - cmp eax, bankroll - ja wheel_handle_done - sub bankroll, eax - mov roulState, 1 - mov wheelTime3D, 0 - invoke RandomRange3D, 37 - mov wheelResult3D, eax - call SaveProgress3D - invoke PlayCasinoSound3D, OFFSET soundRoulette,0,1 -wheel_handle_done: - ret -HandleNativeWheel3D ENDP - -RenderNativeWheel3D PROC uses ebx esi edi - local x:DWORD,y:DWORD,ink:DWORD,angle:DWORD - call RenderWheelScene3D - cmp wheelArtReady3D,1 - jne wheel_render_missing - invoke DrawBox,0,0,320,20,0014191Dh - invoke DrawString8x8,16,12,OFFSET wheelTitle3D,00E5D29Eh - invoke DrawBoxBorder,252,3,60,14,00252D2Ah,0086754Eh,1 - invoke DrawString8x8,266,6,OFFSET wheelExitText3D,00E5D29Eh - cmp roulState,1 - je wheel_render_spin_hud - cmp roulState,2 - je wheel_render_result_hud - invoke DrawBox,8,101,304,123,00142D22h - invoke DrawString8x8,18,104,OFFSET wheelAmountText3D,00DEDACAh - invoke DrawNumber,78,104,wheelChip3D,00FFFFFFh - invoke DrawBoxBorder,145,104,14,16,003B3024h,00C6AA66h,1 - invoke DrawString8x8,148,108,OFFSET wheelPlusText3D,00FFFFFFh - invoke DrawBoxBorder,162,104,14,16,003B3024h,00C6AA66h,1 - invoke DrawString8x8,165,108,OFFSET wheelMinusText3D,00FFFFFFh - invoke DrawBoxBorder,180,104,46,16,003B3024h,00C6AA66h,1 - invoke DrawString8x8,183,108,OFFSET wheelClear3D,00FFFFFFh - invoke DrawBoxBorder,230,104,70,16,00423929h,00C6AA66h,1 - invoke DrawString8x8,237,108,OFFSET wheelSpin3D,00FFFFFFh - invoke DrawBoxBorder,24,123,34,60,00174A33h,009C9A76h,1 - invoke DrawNumber,36,147,0,00FFFFFFh - cmp wheelBets3D, 0 - je @F - invoke DrawCircle,49,174,3,00DCC671h -@@: - mov esi, 1 -wheel_render_numbers: - mov eax, esi - dec eax - xor edx, edx - mov ecx, 3 - div ecx - imul eax, 20 - add eax, 60 - mov x, eax - neg edx - add edx,2 - imul edx, 20 - add edx, 123 - mov y, edx - mov ink, 001E2523h - bt wheelRedMask3D, esi - jnc @F - mov ink, 00822C32h -@@: - invoke DrawBoxBorder,x,y,20,20,ink,009C9A76h,1 - mov ebx, x - add ebx, 2 - mov edi, y - add edi, 4 - invoke DrawNumber,ebx,edi,esi,00FFFFFFh - cmp wheelBets3D[esi*4], 0 - je @F - add ebx, 12 - add edi, 11 - invoke DrawCircle,ebx,edi,2,00EAD47Eh -@@: - inc esi - cmp esi, 37 - jb wheel_render_numbers - xor esi, esi -wheel_render_outside: - mov eax, esi - xor edx, edx - mov ecx, 6 - div ecx - imul eax, 20 - add eax, 183 - mov y, eax - imul edx, 46 - add edx, 24 - mov x, edx - invoke DrawBoxBorder,x,y,46,20,0022392Ah,009C9A76h,1 - mov ebx, x - add ebx, 3 - mov edi, y - add edi, 5 - invoke DrawString8x8,ebx,edi,wheelLabels3D[esi*4],00E4D7B4h - lea eax, [esi+37] - cmp wheelBets3D[eax*4], 0 - je @F - add ebx, 35 - add edi, 10 - invoke DrawCircle,ebx,edi,2,00EAD47Eh -@@: - inc esi - cmp esi, 12 - jb wheel_render_outside - invoke DrawString8x8,24,228,OFFSET wheelStakedText3D,00D3C08Fh - invoke DrawNumber,88,228,wheelStake3D,00FFFFFFh - invoke DrawNumber,206,26,bankroll,00F4E7C8h - ret -wheel_render_spin_hud: - invoke DrawBox,0,220,320,20,0014191Dh - mov eax,OFFSET wheelSpinningText3D - cmp wheelExitQueued3D,0 - je @F - mov eax,OFFSET wheelLeavingText3D -@@: - invoke DrawString8x8,76,226,eax,00E5D29Eh - ret -wheel_render_result_hud: - invoke DrawBox,0,219,320,21,0014191Dh - invoke DrawString8x8,8,225,OFFSET wheelResultText3D,00E5D29Eh - invoke DrawNumber,61,225,wheelResult3D,00FFFFFFh - invoke DrawBoxBorder,120,220,80,17,003B3024h,00BA9955h,1 - invoke DrawString8x8,144,225,OFFSET wheelBetView3D,00FFFFFFh - invoke DrawString8x8,208,223,OFFSET wheelPaidText3D,00E5D29Eh - invoke DrawNumber,208,232,wheelReturn3D,00FFFFFFh - ret -wheel_render_missing: - invoke DrawBox,0,0,320,240,0014191Dh - invoke DrawString8x8,64,108,OFFSET wheelMissingArt3D,00E5D29Eh - ret -RenderNativeWheel3D ENDP - -LoadNativeWheelArt3D PROC - cmp wheelArtReady3D,1 - je wheel_art_loaded - invoke LoadAnimPack3D,OFFSET wheelTableArt3D,OFFSET wheelTablePath3D - invoke LoadAnimPack3D,OFFSET wheelCloseArt3D,OFFSET wheelClosePath3D - invoke LoadAnimPack3D,OFFSET wheelRotorArt3D,OFFSET wheelRotorPath3D - invoke ValidateCityPack3D,OFFSET wheelTableArt3D,640,480,1 - invoke ValidateCityPack3D,OFFSET wheelCloseArt3D,640,480,1 - invoke ValidateCityPack3D,OFFSET wheelRotorArt3D,480,480,1 - cmp wheelTableArt3D.pixels,0 - je wheel_art_failed - cmp wheelCloseArt3D.pixels,0 - je wheel_art_failed - cmp wheelRotorArt3D.pixels,0 - je wheel_art_failed - mov wheelArtReady3D,1 -wheel_art_loaded: - mov eax,1 - ret -wheel_art_failed: - call FreeNativeWheelArt3D - xor eax,eax - ret -LoadNativeWheelArt3D ENDP - -FreeNativeWheelArt3D PROC - invoke FreeAnimPack3D,OFFSET wheelTableArt3D - invoke FreeAnimPack3D,OFFSET wheelCloseArt3D - invoke FreeAnimPack3D,OFFSET wheelRotorArt3D - mov wheelArtReady3D,0 - ret -FreeNativeWheelArt3D ENDP - -WheelEscape3D PROC - mov paused3D,0 - cmp roulState,1 - jne wheel_leave_hall - mov wheelExitQueued3D,1 - call ClearKeys3D - ret -wheel_leave_hall: - mov wheelExitQueued3D,0 - mov engineMode,MODE_WALK - call ClearKeys3D - invoke PlayCasinoSound3D,0,0,0 - ret -WheelEscape3D ENDP - -; Integer quadratic easing, preserving the 64-bit product until division. -WheelTravel3D PROC uses ebx timeMs:DWORD,durationMs:DWORD,total:DWORD - mov eax,timeMs - cmp eax,durationMs - jae wheel_travel_end - mov eax,durationMs - sub eax,timeMs - mul eax - mul total - mov ebx,durationMs - imul ebx,ebx - div ebx - neg eax - add eax,total - ret -wheel_travel_end: - mov eax,total - ret -WheelTravel3D ENDP - -; Rotate the exact numbered rotor by inverse sampling, then project onto the bowl ellipse. -; Physical framebuffer coordinates; rendering cannot change the selected outcome or bank. -DrawNativeWheelDisc3D PROC uses ebx esi edi centerX:DWORD,centerY:DWORD,radiusX:DWORD,radiusY:DWORD,rotorAngle:DWORD - local row:DWORD,column:DWORD,minX:DWORD,maxX:DWORD,maxY:DWORD - local circleX:DWORD,circleY:DWORD,cosine:DWORD,sine:DWORD,sourceX:DWORD - mov eax,rotorAngle - and eax,511 - mov ecx,tableCos[eax*4] - mov cosine,ecx - mov ecx,tableSin[eax*4] - mov sine,ecx - mov eax,centerX - sub eax,radiusX - jns @F - xor eax,eax -@@: - mov minX,eax - mov eax,centerX - add eax,radiusX - cmp eax,SCREEN_W - jl @F - mov eax,SCREEN_W-1 -@@: - mov maxX,eax - mov eax,centerY - add eax,radiusY - cmp eax,SCREEN_H - jl @F - mov eax,SCREEN_H-1 -@@: - mov maxY,eax - mov eax,centerY - sub eax,radiusY - jns @F - xor eax,eax -@@: - mov row,eax -wheel_disc_row: - mov eax,row - sub eax,centerY - imul eax,224 - cdq - idiv radiusY - mov circleY,eax - mov eax,row - imul eax,SCREEN_W*4 - add eax,OFFSET screenBuffer - mov ecx,minX - lea edi,[eax+ecx*4] - mov column,ecx -wheel_disc_pixel: - mov eax,column - sub eax,centerX - imul eax,224 - cdq - idiv radiusX - mov circleX,eax - imul eax,eax - mov ecx,circleY - imul ecx,ecx - add eax,ecx - cmp eax,224*224 - ja wheel_disc_next - mov eax,circleX - imul eax,cosine - mov ecx,circleY - imul ecx,sine - add eax,ecx - sar eax,16 - add eax,240 - mov sourceX,eax - mov eax,circleY - imul eax,cosine - mov ecx,circleX - imul ecx,sine - sub eax,ecx - sar eax,16 - add eax,240 - imul eax,480 - add eax,sourceX - mov esi,wheelRotorArt3D.pixels - mov eax,[esi+eax*4] - cmp eax,80000000h - jb wheel_disc_next - and eax,00FFFFFFh - mov [edi],eax -wheel_disc_next: - add edi,4 - inc column - mov eax,column - cmp eax,maxX - jle wheel_disc_pixel - inc row - mov eax,row - cmp eax,maxY - jle wheel_disc_row - ret -DrawNativeWheelDisc3D ENDP - -RenderWheelScene3D PROC uses ebx esi edi - local centerX:DWORD,centerY:DWORD,radiusX:DWORD,radiusY:DWORD - local cameraPhase:DWORD,ballRadius:DWORD,ballAngle:DWORD,oldOpacity:DWORD - cmp wheelArtReady3D,1 - jne wheel_scene_done - mov esi,wheelTableArt3D.pixels - lea edi,screenBuffer - mov ecx,SCREEN_SIZE - rep movsd - mov centerX,206 - mov centerY,170 - mov radiusX,142 - mov radiusY,46 - mov cameraPhase,0 - cmp roulState,0 - je wheel_scene_geometry - mov cameraPhase,FP_1 - cmp roulState,1 - jne wheel_scene_close - invoke CityEase3D,wheelTime3D,600 - mov cameraPhase,eax -wheel_scene_close: - mov eax,animOpacity3D - mov oldOpacity,eax - mov eax,cameraPhase - imul eax,255 - shr eax,16 - mov animOpacity3D,eax - invoke DrawAnimSprite3D,OFFSET wheelCloseArt3D,0,0,0,640,480 - mov eax,oldOpacity - mov animOpacity3D,eax - mov eax,cameraPhase - imul eax,114 - shr eax,16 - add centerX,eax - mov eax,cameraPhase - imul eax,108 - shr eax,16 - add centerY,eax - mov eax,cameraPhase - imul eax,63 - shr eax,16 - add radiusX,eax - mov eax,cameraPhase - imul eax,42 - shr eax,16 - add radiusY,eax -wheel_scene_geometry: - mov wheelRotorAngle3D,0 - cmp roulState,1 - jne @F - invoke WheelTravel3D,wheelTime3D,4200,4096 - and eax,511 - mov wheelRotorAngle3D,eax -@@: - invoke DrawNativeWheelDisc3D,centerX,centerY,radiusX,radiusY,wheelRotorAngle3D - cmp roulState,2 - je @F - invoke DrawWheelLabels3D,centerX,centerY,radiusX,radiusY,wheelRotorAngle3D -@@: - cmp roulState,0 - je wheel_scene_done - xor esi,esi -wheel_find_pocket: - mov eax,wheelOrder3D[esi*4] - cmp eax,wheelResult3D - je wheel_found_pocket - inc esi - cmp esi,37 - jb wheel_find_pocket - jmp wheel_scene_done -wheel_found_pocket: - mov wheelResultSlot3D,esi - imul eax,esi,512 - xor edx,edx - mov ecx,37 - div ecx - add eax,wheelRotorAngle3D - mov ballAngle,eax - mov ballRadius,170 - cmp roulState,1 - jne wheel_ball_place - invoke WheelTravel3D,wheelTime3D,4200,6144 - sub eax,6144 - add ballAngle,eax - mov ballRadius,216 - cmp wheelTime3D,2600 - jb wheel_ball_place - mov eax,wheelTime3D - sub eax,2600 - cmp eax,1600 - jbe @F - mov eax,1600 -@@: - imul eax,46 - xor edx,edx - mov ecx,1600 - div ecx - sub ballRadius,eax -wheel_ball_place: - mov eax,ballAngle - and eax,511 - mov wheelBallAngle3D,eax - mov ebx,tableCos[eax*4] - imul ebx,ballRadius - sar ebx,16 - imul ebx,radiusX - mov eax,ebx - cdq - mov ecx,224 - idiv ecx - add eax,centerX - mov wheelBallX3D,eax - mov eax,wheelBallAngle3D - mov ebx,tableSin[eax*4] - imul ebx,ballRadius - sar ebx,16 - imul ebx,radiusY - mov eax,ebx - cdq - idiv ecx - add eax,centerY - mov wheelBallY3D,eax - sar eax,1 - mov edi,eax - mov ebx,wheelBallX3D - sar ebx,1 - invoke DrawCircle,ebx,edi,3,003C3026h - invoke DrawCircle,ebx,edi,2,00F6EFE0h - cmp roulState,2 - jne wheel_scene_done - invoke DrawWheelLabels3D,centerX,centerY,radiusX,radiusY,wheelRotorAngle3D - invoke DrawWheelBox3D,278,245,84,61,002D211Bh - invoke DrawBuckshotText3D,296,253,OFFSET wheelLandedText3D,00E5D29Eh - mov ecx,00F4E7C8h - cmp wheelResult3D,0 - je @F - mov eax,wheelResult3D - bt wheelRedMask3D,eax - jnc @F - mov ecx,00FFB4ADh -@@: - invoke DrawWheelValue3D,320,268,wheelResult3D,6,ecx -wheel_scene_done: - ret -RenderWheelScene3D ENDP - -; Exact framebuffer rectangles avoid the two-pixel rounding of the logical UI grid. -DrawWheelBox3D PROC uses ebx esi edi x:DWORD,y:DWORD,w:DWORD,h:DWORD,ink:DWORD - local bottom:DWORD - mov esi,x - test esi,esi - jns @F - xor esi,esi -@@: - mov eax,x - add eax,w - cmp eax,SCREEN_W - jle @F - mov eax,SCREEN_W -@@: - sub eax,esi - jle wheel_box_done - mov ebx,eax - mov edx,y - test edx,edx - jns @F - xor edx,edx -@@: - mov eax,y - add eax,h - cmp eax,SCREEN_H - jle @F - mov eax,SCREEN_H -@@: - cmp eax,edx - jle wheel_box_done - mov bottom,eax -wheel_box_row: - imul edi,edx,SCREEN_W - add edi,esi - lea edi,screenBuffer[edi*4] - mov eax,ink - mov ecx,ebx - rep stosd - inc edx - cmp edx,bottom - jl wheel_box_row -wheel_box_done: - ret -DrawWheelBox3D ENDP - -; Upright screen-space digits retain their shape when the wheel is projected. -DrawWheelDigit3D PROC uses ebx esi edi x:DWORD,y:DWORD,digit:DWORD,scale:DWORD,ink:DWORD - local row:DWORD,column:DWORD,bits:DWORD,px:DWORD,py:DWORD - cmp scale,0 - je wheel_digit_done - cmp digit,9 - ja wheel_digit_done - mov eax,digit - imul eax,5 - lea esi,wheelDigitMasks3D[eax] - mov row,0 -wheel_digit_row: - mov eax,row - movzx eax,BYTE PTR [esi+eax] - mov bits,eax - mov column,0 -wheel_digit_column: - test bits,4 - jz wheel_digit_next - mov eax,column - imul eax,scale - add eax,x - mov px,eax - mov eax,row - imul eax,scale - add eax,y - mov py,eax - invoke DrawWheelBox3D,px,py,scale,scale,ink -wheel_digit_next: - shl bits,1 - inc column - cmp column,3 - jb wheel_digit_column - inc row - cmp row,5 - jb wheel_digit_row -wheel_digit_done: - ret -DrawWheelDigit3D ENDP - -DrawWheelValue3D PROC uses ebx centerX:DWORD,y:DWORD,value:DWORD,scale:DWORD,ink:DWORD - local x:DWORD,ones:DWORD - mov eax,scale - imul eax,3 - cmp value,10 - jb @F - mov eax,scale - imul eax,7 -@@: - shr eax,1 - neg eax - add eax,centerX - mov x,eax - mov eax,value - cmp eax,10 - jb wheel_value_single - xor edx,edx - mov ecx,10 - div ecx - mov ones,edx - invoke DrawWheelDigit3D,x,y,eax,scale,ink - mov eax,scale - shl eax,2 - add x,eax - mov eax,ones -wheel_value_single: - invoke DrawWheelDigit3D,x,y,eax,scale,ink - ret -DrawWheelValue3D ENDP - -DrawWheelLabels3D PROC uses ebx esi edi centerX:DWORD,centerY:DWORD,radiusX:DWORD,radiusY:DWORD,angle:DWORD - local phase:DWORD,x:DWORD,y:DWORD - mov wheelNumberScale3D,1 - cmp radiusY,80 - jb @F - mov wheelNumberScale3D,2 -@@: - xor esi,esi -wheel_label_pocket: - mov eax,esi - imul eax,512 - xor edx,edx - mov ecx,37 - div ecx - add eax,angle - and eax,511 - mov phase,eax - mov eax,tableCos[eax*4] - imul eax,195 - sar eax,16 - imul eax,radiusX - cdq - mov ecx,224 - idiv ecx - add eax,centerX - mov x,eax - mov wheelNumberX3D[esi*4],eax - mov eax,phase - mov eax,tableSin[eax*4] - imul eax,195 - sar eax,16 - imul eax,radiusY - cdq - idiv ecx - add eax,centerY - mov wheelNumberY3D[esi*4],eax - mov ebx,wheelNumberScale3D - imul ebx,5 - shr ebx,1 - sub eax,ebx - mov y,eax - invoke DrawWheelValue3D,x,y,wheelOrder3D[esi*4],wheelNumberScale3D,00FFF8DEh - inc esi - cmp esi,37 - jb wheel_label_pocket - cmp roulState,2 - jne wheel_labels_done - ; Highlight the actual winning label after drawing the ball, preserving every digit. - xor esi,esi -wheel_label_find_result: - mov eax,wheelOrder3D[esi*4] - cmp eax,wheelResult3D - je wheel_label_highlight - inc esi - cmp esi,37 - jb wheel_label_find_result - jmp wheel_labels_done -wheel_label_highlight: - mov ebx,wheelNumberX3D[esi*4] - mov edi,wheelNumberY3D[esi*4] - sub ebx,9 - sub edi,6 - invoke DrawWheelBox3D,ebx,edi,18,12,00E5C978h - inc ebx - inc edi - invoke DrawWheelBox3D,ebx,edi,16,10,00121916h - mov eax,wheelNumberY3D[esi*4] - sub eax,5 - invoke DrawWheelValue3D,wheelNumberX3D[esi*4],eax,wheelResult3D,2,00FFF8DEh -wheel_labels_done: - ret -DrawWheelLabels3D ENDP - -DrawNumber PROC x:DWORD,y:DWORD,value:DWORD,ink:DWORD - invoke FormatNumber,value,OFFSET hudNumBuffer - invoke DrawString8x8,x,y,OFFSET hudNumBuffer,ink - ret -DrawNumber ENDP +InitNativeWheel3D PROC uses edi + lea edi, wheelBets3D + xor eax, eax + mov ecx, 49 + rep stosd + mov roulState, 0 + mov wheelStake3D, 0 + mov wheelReturn3D, 0 + mov wheelTime3D, 0 + mov wheelExitQueued3D, 0 + call LoadNativeWheelArt3D + ret +InitNativeWheel3D ENDP + +WheelAddBet3D PROC index:DWORD + cmp roulState, 0 + jne wheel_add_done + mov ecx, index + cmp ecx, 48 + ja wheel_add_done + mov eax, wheelStake3D + add eax, wheelChip3D + jc wheel_add_done + cmp eax, bankroll + ja wheel_add_done + mov wheelStake3D, eax + mov eax, wheelChip3D + add wheelBets3D[ecx*4], eax +wheel_add_done: + ret +WheelAddBet3D ENDP + +; Gross returns include the stake, so zero is a loss for every outside bet. +WheelBetMultiplier3D PROC uses ebx index:DWORD,result:DWORD + mov ecx, index + mov ebx, result + xor eax, eax + cmp ecx, 37 + jae wheel_outside + cmp ecx, ebx + jne wheel_multiplier_done + mov eax, 36 + ret +wheel_outside: + test ebx, ebx + jz wheel_multiplier_done + cmp ecx, 39 + jae wheel_parity + bt wheelRedMask3D, ebx + setc al + cmp ecx, 37 + je @F + xor eax, 1 +@@: + shl eax, 1 + ret +wheel_parity: + cmp ecx, 41 + jae wheel_halves + mov eax, ebx + and eax, 1 + cmp ecx, 40 + je @F + xor eax, 1 +@@: + shl eax, 1 + ret +wheel_halves: + cmp ecx, 43 + jae wheel_dozen_column + cmp ebx, 18 + seta al + cmp ecx, 42 + je @F + xor eax, 1 +@@: + shl eax, 1 + ret +wheel_dozen_column: + mov eax, ebx + dec eax + xor edx, edx + cmp ecx, 46 + jae wheel_column + mov ebx, 12 + div ebx + sub ecx, 43 + cmp eax, ecx + jne wheel_multiplier_zero + mov eax, 3 + ret +wheel_column: + mov ebx, 3 + div ebx + sub ecx, 46 + cmp edx, ecx + jne wheel_multiplier_zero + mov eax, 3 + ret +wheel_multiplier_zero: + xor eax, eax +wheel_multiplier_done: + ret +WheelBetMultiplier3D ENDP + +WheelSettle3D PROC uses ebx esi + cmp roulState, 1 + jne wheel_settle_done + mov wheelReturn3D, 0 + xor esi, esi +wheel_settle_loop: + invoke WheelBetMultiplier3D, esi,wheelResult3D + mul wheelBets3D[esi*4] + test edx, edx + jnz wheel_settle_cap + add wheelReturn3D, eax + jc wheel_settle_cap + cmp wheelReturn3D, 1000000000 + jbe wheel_settle_next +wheel_settle_cap: + mov wheelReturn3D, 1000000000 +wheel_settle_next: + inc esi + cmp esi, 49 + jb wheel_settle_loop + mov eax, wheelReturn3D + add bankroll, eax + jc wheel_bank_cap + cmp bankroll, 1000000000 + jbe @F +wheel_bank_cap: + mov bankroll, 1000000000 +@@: + mov ecx, wheelReturn3D + cmp ecx, wheelStake3D + ja wheel_win_charm + cmp ecx, 0 + jne wheel_charm_done + invoke TriggerCharmLossProtection, wheelStake3D + jmp wheel_charm_done +wheel_win_charm: + invoke TriggerCharmWinBonus, wheelReturn3D +wheel_charm_done: + mov roulState, 2 + xor eax,eax + mov ecx,wheelReturn3D + cmp ecx,wheelStake3D + seta al + invoke NpcRecordRound3D,3,eax + call SaveProgress3D +wheel_settle_done: + ret +WheelSettle3D ENDP + +HandleNativeWheel3D PROC uses ebx esi edi + cmp mouseClick3D,0 + je wheel_header_done + cmp mouseY3D,3 + jb wheel_header_done + cmp mouseY3D,17 + jae wheel_header_done + cmp mouseX3D,252 + jb wheel_header_done + cmp mouseX3D,312 + jae wheel_header_done + mov mouseClick3D,0 + call WheelEscape3D + cmp engineMode,MODE_WALK + je wheel_handle_done +wheel_header_done: + cmp roulState, 1 + jne wheel_draft_input + mov eax, deltaTime3D + add wheelTime3D, eax + cmp wheelTime3D, 4200 + jb wheel_handle_done + call WheelSettle3D + cmp wheelExitQueued3D,0 + je wheel_handle_done + call WheelEscape3D + ret +wheel_draft_input: + cmp roulState, 2 + jne @F + ; Keep the landed ball and payout visible until an explicit next-round command. + invoke Pressed3D,20h + test eax,eax + jnz wheel_next_layout + invoke Pressed3D,0Dh + test eax,eax + jnz wheel_next_layout + cmp mouseClick3D,0 + je wheel_handle_done + cmp mouseY3D,219 + jb wheel_handle_done + cmp mouseY3D,237 + jae wheel_handle_done + cmp mouseX3D,120 + jb wheel_handle_done + cmp mouseX3D,200 + jae wheel_handle_done +wheel_next_layout: + mov mouseClick3D,0 + call InitNativeWheel3D + ret +@@: + invoke Pressed3D, 57h + test eax, eax + jz @F + cmp wheelChip3D, 1000000 + jae @F + add wheelChip3D, 50 +@@: + invoke Pressed3D, 53h + test eax, eax + jz @F + cmp wheelChip3D, 50 + jbe @F + sub wheelChip3D, 50 +@@: + invoke Pressed3D, 08h + test eax, eax + jz wheel_mouse + call InitNativeWheel3D +wheel_mouse: + cmp mouseClick3D, 0 + je wheel_spin_input + cmp mouseY3D, 123 + jb wheel_button + cmp mouseY3D, 183 + jae wheel_mouse_outside + cmp mouseX3D, 60 + jae wheel_mouse_number + cmp mouseX3D, 24 + jb wheel_spin_input + invoke WheelAddBet3D, 0 + jmp wheel_spin_input +wheel_mouse_number: + cmp mouseX3D, 300 + jae wheel_spin_input + mov eax, mouseX3D + sub eax, 60 + xor edx, edx + mov ecx, 20 + div ecx + imul ebx, eax, 3 + mov eax, mouseY3D + sub eax, 123 + xor edx, edx + div ecx + neg eax + add eax,2 + add eax, ebx + inc eax + invoke WheelAddBet3D, eax + jmp wheel_spin_input +wheel_mouse_outside: + cmp mouseY3D, 223 + jae wheel_button + cmp mouseX3D, 24 + jb wheel_spin_input + cmp mouseX3D, 300 + jae wheel_spin_input + mov eax, mouseX3D + sub eax, 24 + xor edx, edx + mov ecx, 46 + div ecx + mov ebx, eax + mov eax, mouseY3D + sub eax, 183 + xor edx, edx + mov ecx, 20 + div ecx + imul eax, 6 + add eax, ebx + add eax, 37 + invoke WheelAddBet3D, eax + jmp wheel_spin_input +wheel_button: + cmp mouseY3D, 105 + jb wheel_spin_input + cmp mouseY3D, 121 + jae wheel_spin_input + cmp mouseX3D,145 + jb wheel_spin_input + cmp mouseX3D,159 + jb wheel_mouse_more + cmp mouseX3D,162 + jb wheel_spin_input + cmp mouseX3D,176 + jb wheel_mouse_less + cmp mouseX3D,180 + jb wheel_spin_input + cmp mouseX3D,226 + jb wheel_mouse_clear + cmp mouseX3D, 230 + jb wheel_spin_input + cmp mouseX3D,300 + jae wheel_spin_input + mov pressedKeys3D[20h], 1 + jmp wheel_spin_input +wheel_mouse_more: + cmp wheelChip3D,1000000 + jae wheel_handle_done + add wheelChip3D,50 + ret +wheel_mouse_less: + cmp wheelChip3D,50 + jbe wheel_handle_done + sub wheelChip3D,50 + ret +wheel_mouse_clear: + call InitNativeWheel3D + ret +wheel_spin_input: + cmp roulState, 2 + jne wheel_regular_spin + cmp tournamentMode, 1 + jne wheel_regular_spin + invoke Pressed3D, 20h + test eax, eax + jnz wheel_tourney_report + invoke Pressed3D, 0Dh + test eax, eax + jnz wheel_tourney_report + ret +wheel_tourney_report: + mov ecx, wheelReturn3D + cmp ecx, wheelStake3D + ja wheel_tourney_win + invoke TowerReportRoundOutcome, 2 + ret +wheel_tourney_win: + invoke TowerReportRoundOutcome, 1 + ret +wheel_regular_spin: + invoke Pressed3D, 20h + test eax, eax + jz wheel_handle_done + cmp wheelArtReady3D,1 + jne wheel_handle_done + mov eax, wheelStake3D + test eax, eax + jz wheel_handle_done + cmp eax, bankroll + ja wheel_handle_done + sub bankroll, eax + mov roulState, 1 + mov wheelTime3D, 0 + invoke RandomRange3D, 37 + mov wheelResult3D, eax + call SaveProgress3D + invoke PlayCasinoSound3D, OFFSET soundRoulette,0,1 +wheel_handle_done: + ret +HandleNativeWheel3D ENDP + +RenderNativeWheel3D PROC uses ebx esi edi + local x:DWORD,y:DWORD,ink:DWORD,angle:DWORD + call RenderWheelScene3D + cmp wheelArtReady3D,1 + jne wheel_render_missing + invoke DrawBox,0,0,320,20,0014191Dh + invoke DrawString8x8,16,12,OFFSET wheelTitle3D,00E5D29Eh + invoke DrawBoxBorder,252,3,60,14,00252D2Ah,0086754Eh,1 + invoke DrawString8x8,266,6,OFFSET wheelExitText3D,00E5D29Eh + cmp roulState,1 + je wheel_render_spin_hud + cmp roulState,2 + je wheel_render_result_hud + invoke DrawBox,8,101,304,123,00142D22h + invoke DrawString8x8,18,104,OFFSET wheelAmountText3D,00DEDACAh + invoke DrawNumber,78,104,wheelChip3D,00FFFFFFh + invoke DrawBoxBorder,145,104,14,16,003B3024h,00C6AA66h,1 + invoke DrawString8x8,148,108,OFFSET wheelPlusText3D,00FFFFFFh + invoke DrawBoxBorder,162,104,14,16,003B3024h,00C6AA66h,1 + invoke DrawString8x8,165,108,OFFSET wheelMinusText3D,00FFFFFFh + invoke DrawBoxBorder,180,104,46,16,003B3024h,00C6AA66h,1 + invoke DrawString8x8,183,108,OFFSET wheelClear3D,00FFFFFFh + invoke DrawBoxBorder,230,104,70,16,00423929h,00C6AA66h,1 + invoke DrawString8x8,237,108,OFFSET wheelSpin3D,00FFFFFFh + invoke DrawBoxBorder,24,123,34,60,00174A33h,009C9A76h,1 + invoke DrawNumber,36,147,0,00FFFFFFh + cmp wheelBets3D, 0 + je @F + invoke DrawCircle,49,174,3,00DCC671h +@@: + mov esi, 1 +wheel_render_numbers: + mov eax, esi + dec eax + xor edx, edx + mov ecx, 3 + div ecx + imul eax, 20 + add eax, 60 + mov x, eax + neg edx + add edx,2 + imul edx, 20 + add edx, 123 + mov y, edx + mov ink, 001E2523h + bt wheelRedMask3D, esi + jnc @F + mov ink, 00822C32h +@@: + invoke DrawBoxBorder,x,y,20,20,ink,009C9A76h,1 + mov ebx, x + add ebx, 2 + mov edi, y + add edi, 4 + invoke DrawNumber,ebx,edi,esi,00FFFFFFh + cmp wheelBets3D[esi*4], 0 + je @F + add ebx, 12 + add edi, 11 + invoke DrawCircle,ebx,edi,2,00EAD47Eh +@@: + inc esi + cmp esi, 37 + jb wheel_render_numbers + xor esi, esi +wheel_render_outside: + mov eax, esi + xor edx, edx + mov ecx, 6 + div ecx + imul eax, 20 + add eax, 183 + mov y, eax + imul edx, 46 + add edx, 24 + mov x, edx + invoke DrawBoxBorder,x,y,46,20,0022392Ah,009C9A76h,1 + mov ebx, x + add ebx, 3 + mov edi, y + add edi, 5 + invoke DrawString8x8,ebx,edi,wheelLabels3D[esi*4],00E4D7B4h + lea eax, [esi+37] + cmp wheelBets3D[eax*4], 0 + je @F + add ebx, 35 + add edi, 10 + invoke DrawCircle,ebx,edi,2,00EAD47Eh +@@: + inc esi + cmp esi, 12 + jb wheel_render_outside + invoke DrawString8x8,24,228,OFFSET wheelStakedText3D,00D3C08Fh + invoke DrawNumber,88,228,wheelStake3D,00FFFFFFh + invoke DrawNumber,206,26,bankroll,00F4E7C8h + ret +wheel_render_spin_hud: + invoke DrawBox,0,220,320,20,0014191Dh + mov eax,OFFSET wheelSpinningText3D + cmp wheelExitQueued3D,0 + je @F + mov eax,OFFSET wheelLeavingText3D +@@: + invoke DrawString8x8,76,226,eax,00E5D29Eh + ret +wheel_render_result_hud: + invoke DrawBox,0,219,320,21,0014191Dh + invoke DrawString8x8,8,225,OFFSET wheelResultText3D,00E5D29Eh + invoke DrawNumber,61,225,wheelResult3D,00FFFFFFh + invoke DrawBoxBorder,120,220,80,17,003B3024h,00BA9955h,1 + invoke DrawString8x8,144,225,OFFSET wheelBetView3D,00FFFFFFh + invoke DrawString8x8,208,223,OFFSET wheelPaidText3D,00E5D29Eh + invoke DrawNumber,208,232,wheelReturn3D,00FFFFFFh + ret +wheel_render_missing: + invoke DrawBox,0,0,320,240,0014191Dh + invoke DrawString8x8,64,108,OFFSET wheelMissingArt3D,00E5D29Eh + ret +RenderNativeWheel3D ENDP + +LoadNativeWheelArt3D PROC + cmp wheelArtReady3D,1 + je wheel_art_loaded + invoke LoadAnimPack3D,OFFSET wheelTableArt3D,OFFSET wheelTablePath3D + invoke LoadAnimPack3D,OFFSET wheelCloseArt3D,OFFSET wheelClosePath3D + invoke LoadAnimPack3D,OFFSET wheelRotorArt3D,OFFSET wheelRotorPath3D + invoke ValidateCityPack3D,OFFSET wheelTableArt3D,640,480,1 + invoke ValidateCityPack3D,OFFSET wheelCloseArt3D,640,480,1 + invoke ValidateCityPack3D,OFFSET wheelRotorArt3D,480,480,1 + cmp wheelTableArt3D.pixels,0 + je wheel_art_failed + cmp wheelCloseArt3D.pixels,0 + je wheel_art_failed + cmp wheelRotorArt3D.pixels,0 + je wheel_art_failed + mov wheelArtReady3D,1 +wheel_art_loaded: + mov eax,1 + ret +wheel_art_failed: + call FreeNativeWheelArt3D + xor eax,eax + ret +LoadNativeWheelArt3D ENDP + +FreeNativeWheelArt3D PROC + invoke FreeAnimPack3D,OFFSET wheelTableArt3D + invoke FreeAnimPack3D,OFFSET wheelCloseArt3D + invoke FreeAnimPack3D,OFFSET wheelRotorArt3D + mov wheelArtReady3D,0 + ret +FreeNativeWheelArt3D ENDP + +WheelEscape3D PROC + mov paused3D,0 + cmp roulState,1 + jne wheel_leave_hall + mov wheelExitQueued3D,1 + call ClearKeys3D + ret +wheel_leave_hall: + mov wheelExitQueued3D,0 + mov engineMode,MODE_WALK + call ClearKeys3D + invoke PlayCasinoSound3D,0,0,0 + ret +WheelEscape3D ENDP + +; Integer quadratic easing, preserving the 64-bit product until division. +WheelTravel3D PROC uses ebx timeMs:DWORD,durationMs:DWORD,total:DWORD + mov eax,timeMs + cmp eax,durationMs + jae wheel_travel_end + mov eax,durationMs + sub eax,timeMs + mul eax + mul total + mov ebx,durationMs + imul ebx,ebx + div ebx + neg eax + add eax,total + ret +wheel_travel_end: + mov eax,total + ret +WheelTravel3D ENDP + +; Rotate the exact numbered rotor by inverse sampling, then project onto the bowl ellipse. +; Physical framebuffer coordinates; rendering cannot change the selected outcome or bank. +DrawNativeWheelDisc3D PROC uses ebx esi edi centerX:DWORD,centerY:DWORD,radiusX:DWORD,radiusY:DWORD,rotorAngle:DWORD + local row:DWORD,column:DWORD,minX:DWORD,maxX:DWORD,maxY:DWORD + local circleX:DWORD,circleY:DWORD,cosine:DWORD,sine:DWORD,sourceX:DWORD + mov eax,rotorAngle + and eax,511 + mov ecx,tableCos[eax*4] + mov cosine,ecx + mov ecx,tableSin[eax*4] + mov sine,ecx + mov eax,centerX + sub eax,radiusX + jns @F + xor eax,eax +@@: + mov minX,eax + mov eax,centerX + add eax,radiusX + cmp eax,SCREEN_W + jl @F + mov eax,SCREEN_W-1 +@@: + mov maxX,eax + mov eax,centerY + add eax,radiusY + cmp eax,SCREEN_H + jl @F + mov eax,SCREEN_H-1 +@@: + mov maxY,eax + mov eax,centerY + sub eax,radiusY + jns @F + xor eax,eax +@@: + mov row,eax +wheel_disc_row: + mov eax,row + sub eax,centerY + imul eax,224 + cdq + idiv radiusY + mov circleY,eax + mov eax,row + imul eax,SCREEN_W*4 + add eax,OFFSET screenBuffer + mov ecx,minX + lea edi,[eax+ecx*4] + mov column,ecx +wheel_disc_pixel: + mov eax,column + sub eax,centerX + imul eax,224 + cdq + idiv radiusX + mov circleX,eax + imul eax,eax + mov ecx,circleY + imul ecx,ecx + add eax,ecx + cmp eax,224*224 + ja wheel_disc_next + mov eax,circleX + imul eax,cosine + mov ecx,circleY + imul ecx,sine + add eax,ecx + sar eax,16 + add eax,240 + mov sourceX,eax + mov eax,circleY + imul eax,cosine + mov ecx,circleX + imul ecx,sine + sub eax,ecx + sar eax,16 + add eax,240 + imul eax,480 + add eax,sourceX + mov esi,wheelRotorArt3D.pixels + mov eax,[esi+eax*4] + cmp eax,80000000h + jb wheel_disc_next + and eax,00FFFFFFh + mov [edi],eax +wheel_disc_next: + add edi,4 + inc column + mov eax,column + cmp eax,maxX + jle wheel_disc_pixel + inc row + mov eax,row + cmp eax,maxY + jle wheel_disc_row + ret +DrawNativeWheelDisc3D ENDP + +RenderWheelScene3D PROC uses ebx esi edi + local centerX:DWORD,centerY:DWORD,radiusX:DWORD,radiusY:DWORD + local cameraPhase:DWORD,ballRadius:DWORD,ballAngle:DWORD,oldOpacity:DWORD + cmp wheelArtReady3D,1 + jne wheel_scene_done + mov esi,wheelTableArt3D.pixels + lea edi,screenBuffer + mov ecx,SCREEN_SIZE + rep movsd + mov centerX,206 + mov centerY,170 + mov radiusX,142 + mov radiusY,46 + mov cameraPhase,0 + cmp roulState,0 + je wheel_scene_geometry + mov cameraPhase,FP_1 + cmp roulState,1 + jne wheel_scene_close + invoke CityEase3D,wheelTime3D,600 + mov cameraPhase,eax +wheel_scene_close: + mov eax,animOpacity3D + mov oldOpacity,eax + mov eax,cameraPhase + imul eax,255 + shr eax,16 + mov animOpacity3D,eax + invoke DrawAnimSprite3D,OFFSET wheelCloseArt3D,0,0,0,640,480 + mov eax,oldOpacity + mov animOpacity3D,eax + mov eax,cameraPhase + imul eax,114 + shr eax,16 + add centerX,eax + mov eax,cameraPhase + imul eax,108 + shr eax,16 + add centerY,eax + mov eax,cameraPhase + imul eax,63 + shr eax,16 + add radiusX,eax + mov eax,cameraPhase + imul eax,42 + shr eax,16 + add radiusY,eax +wheel_scene_geometry: + mov wheelRotorAngle3D,0 + cmp roulState,1 + jne @F + invoke WheelTravel3D,wheelTime3D,4200,4096 + and eax,511 + mov wheelRotorAngle3D,eax +@@: + invoke DrawNativeWheelDisc3D,centerX,centerY,radiusX,radiusY,wheelRotorAngle3D + cmp roulState,2 + je @F + invoke DrawWheelLabels3D,centerX,centerY,radiusX,radiusY,wheelRotorAngle3D +@@: + cmp roulState,0 + je wheel_scene_done + xor esi,esi +wheel_find_pocket: + mov eax,wheelOrder3D[esi*4] + cmp eax,wheelResult3D + je wheel_found_pocket + inc esi + cmp esi,37 + jb wheel_find_pocket + jmp wheel_scene_done +wheel_found_pocket: + mov wheelResultSlot3D,esi + imul eax,esi,512 + xor edx,edx + mov ecx,37 + div ecx + add eax,wheelRotorAngle3D + mov ballAngle,eax + mov ballRadius,170 + cmp roulState,1 + jne wheel_ball_place + invoke WheelTravel3D,wheelTime3D,4200,6144 + sub eax,6144 + add ballAngle,eax + mov ballRadius,216 + cmp wheelTime3D,2600 + jb wheel_ball_place + mov eax,wheelTime3D + sub eax,2600 + cmp eax,1600 + jbe @F + mov eax,1600 +@@: + imul eax,46 + xor edx,edx + mov ecx,1600 + div ecx + sub ballRadius,eax +wheel_ball_place: + mov eax,ballAngle + and eax,511 + mov wheelBallAngle3D,eax + mov ebx,tableCos[eax*4] + imul ebx,ballRadius + sar ebx,16 + imul ebx,radiusX + mov eax,ebx + cdq + mov ecx,224 + idiv ecx + add eax,centerX + mov wheelBallX3D,eax + mov eax,wheelBallAngle3D + mov ebx,tableSin[eax*4] + imul ebx,ballRadius + sar ebx,16 + imul ebx,radiusY + mov eax,ebx + cdq + idiv ecx + add eax,centerY + mov wheelBallY3D,eax + sar eax,1 + mov edi,eax + mov ebx,wheelBallX3D + sar ebx,1 + invoke DrawCircle,ebx,edi,3,003C3026h + invoke DrawCircle,ebx,edi,2,00F6EFE0h + cmp roulState,2 + jne wheel_scene_done + invoke DrawWheelLabels3D,centerX,centerY,radiusX,radiusY,wheelRotorAngle3D + invoke DrawWheelBox3D,278,245,84,61,002D211Bh + invoke DrawBuckshotText3D,296,253,OFFSET wheelLandedText3D,00E5D29Eh + mov ecx,00F4E7C8h + cmp wheelResult3D,0 + je @F + mov eax,wheelResult3D + bt wheelRedMask3D,eax + jnc @F + mov ecx,00FFB4ADh +@@: + invoke DrawWheelValue3D,320,268,wheelResult3D,6,ecx +wheel_scene_done: + ret +RenderWheelScene3D ENDP + +; Exact framebuffer rectangles avoid the two-pixel rounding of the logical UI grid. +DrawWheelBox3D PROC uses ebx esi edi x:DWORD,y:DWORD,w:DWORD,h:DWORD,ink:DWORD + local bottom:DWORD + mov esi,x + test esi,esi + jns @F + xor esi,esi +@@: + mov eax,x + add eax,w + cmp eax,SCREEN_W + jle @F + mov eax,SCREEN_W +@@: + sub eax,esi + jle wheel_box_done + mov ebx,eax + mov edx,y + test edx,edx + jns @F + xor edx,edx +@@: + mov eax,y + add eax,h + cmp eax,SCREEN_H + jle @F + mov eax,SCREEN_H +@@: + cmp eax,edx + jle wheel_box_done + mov bottom,eax +wheel_box_row: + imul edi,edx,SCREEN_W + add edi,esi + lea edi,screenBuffer[edi*4] + mov eax,ink + mov ecx,ebx + rep stosd + inc edx + cmp edx,bottom + jl wheel_box_row +wheel_box_done: + ret +DrawWheelBox3D ENDP + +; Upright screen-space digits retain their shape when the wheel is projected. +DrawWheelDigit3D PROC uses ebx esi edi x:DWORD,y:DWORD,digit:DWORD,scale:DWORD,ink:DWORD + local row:DWORD,column:DWORD,bits:DWORD,px:DWORD,py:DWORD + cmp scale,0 + je wheel_digit_done + cmp digit,9 + ja wheel_digit_done + mov eax,digit + imul eax,5 + lea esi,wheelDigitMasks3D[eax] + mov row,0 +wheel_digit_row: + mov eax,row + movzx eax,BYTE PTR [esi+eax] + mov bits,eax + mov column,0 +wheel_digit_column: + test bits,4 + jz wheel_digit_next + mov eax,column + imul eax,scale + add eax,x + mov px,eax + mov eax,row + imul eax,scale + add eax,y + mov py,eax + invoke DrawWheelBox3D,px,py,scale,scale,ink +wheel_digit_next: + shl bits,1 + inc column + cmp column,3 + jb wheel_digit_column + inc row + cmp row,5 + jb wheel_digit_row +wheel_digit_done: + ret +DrawWheelDigit3D ENDP + +DrawWheelValue3D PROC uses ebx centerX:DWORD,y:DWORD,value:DWORD,scale:DWORD,ink:DWORD + local x:DWORD,ones:DWORD + mov eax,scale + imul eax,3 + cmp value,10 + jb @F + mov eax,scale + imul eax,7 +@@: + shr eax,1 + neg eax + add eax,centerX + mov x,eax + mov eax,value + cmp eax,10 + jb wheel_value_single + xor edx,edx + mov ecx,10 + div ecx + mov ones,edx + invoke DrawWheelDigit3D,x,y,eax,scale,ink + mov eax,scale + shl eax,2 + add x,eax + mov eax,ones +wheel_value_single: + invoke DrawWheelDigit3D,x,y,eax,scale,ink + ret +DrawWheelValue3D ENDP + +DrawWheelLabels3D PROC uses ebx esi edi centerX:DWORD,centerY:DWORD,radiusX:DWORD,radiusY:DWORD,angle:DWORD + local phase:DWORD,x:DWORD,y:DWORD + mov wheelNumberScale3D,1 + cmp radiusY,80 + jb @F + mov wheelNumberScale3D,2 +@@: + xor esi,esi +wheel_label_pocket: + mov eax,esi + imul eax,512 + xor edx,edx + mov ecx,37 + div ecx + add eax,angle + and eax,511 + mov phase,eax + mov eax,tableCos[eax*4] + imul eax,195 + sar eax,16 + imul eax,radiusX + cdq + mov ecx,224 + idiv ecx + add eax,centerX + mov x,eax + mov wheelNumberX3D[esi*4],eax + mov eax,phase + mov eax,tableSin[eax*4] + imul eax,195 + sar eax,16 + imul eax,radiusY + cdq + idiv ecx + add eax,centerY + mov wheelNumberY3D[esi*4],eax + mov ebx,wheelNumberScale3D + imul ebx,5 + shr ebx,1 + sub eax,ebx + mov y,eax + invoke DrawWheelValue3D,x,y,wheelOrder3D[esi*4],wheelNumberScale3D,00FFF8DEh + inc esi + cmp esi,37 + jb wheel_label_pocket + cmp roulState,2 + jne wheel_labels_done + ; Highlight the actual winning label after drawing the ball, preserving every digit. + xor esi,esi +wheel_label_find_result: + mov eax,wheelOrder3D[esi*4] + cmp eax,wheelResult3D + je wheel_label_highlight + inc esi + cmp esi,37 + jb wheel_label_find_result + jmp wheel_labels_done +wheel_label_highlight: + mov ebx,wheelNumberX3D[esi*4] + mov edi,wheelNumberY3D[esi*4] + sub ebx,9 + sub edi,6 + invoke DrawWheelBox3D,ebx,edi,18,12,00E5C978h + inc ebx + inc edi + invoke DrawWheelBox3D,ebx,edi,16,10,00121916h + mov eax,wheelNumberY3D[esi*4] + sub eax,5 + invoke DrawWheelValue3D,wheelNumberX3D[esi*4],eax,wheelResult3D,2,00FFF8DEh +wheel_labels_done: + ret +DrawWheelLabels3D ENDP + +DrawNumber PROC x:DWORD,y:DWORD,value:DWORD,ink:DWORD + invoke FormatNumber,value,OFFSET hudNumBuffer + invoke DrawString8x8,x,y,OFFSET hudNumBuffer,ink + ret +DrawNumber ENDP diff --git a/src_graphics/platform_code.inc b/src_graphics/platform_code.inc index 4ae72a4..aa3082d 100644 --- a/src_graphics/platform_code.inc +++ b/src_graphics/platform_code.inc @@ -1,586 +1,608 @@ -; Main and owned coin-detail windows are processed on the same thread; no CMD fallback. -WindowEvents3D PROC uses ebx esi edi hwnd:DWORD, uMsg:DWORD, wp:DWORD, lp:DWORD - cmp engineMode,MODE_SCRATCH - jne @F - invoke ScratchMouseEvent3D,hwnd,uMsg,wp,lp - test eax,eax - jz @F - ret -@@: - cmp uMsg, 102h - jne @F - invoke ArrivalChar3D, wp - xor eax, eax - ret -@@: - cmp uMsg, 201h - je event_mouse_down - cmp uMsg,203h - jne @F - cmp engineMode,MODE_POOL - je event_mouse_down - jmp event_default -@@: - cmp uMsg, 200h - jne @F - cmp engineMode, MODE_POOL - jne event_default - test wp, 1 - jnz event_mouse_down - jmp event_default -@@: - cmp uMsg, 100h - je event_key_down - cmp uMsg, 104h - jne @F - cmp wp, 0Dh - je event_fullscreen -@@: - cmp uMsg, 101h - je event_key_up - cmp uMsg, 8 - je event_focus_lost - cmp uMsg, 14h - je event_erase - cmp uMsg, 0Fh - je event_paint - cmp uMsg, WM_CLOSE - je event_close - cmp uMsg, WM_DESTROY - je event_close -event_default: - invoke DefWindowProcA, hwnd, uMsg, wp, lp - ret -event_mouse_down: - cmp viewWidth3D, 0 - je event_done - cmp viewHeight3D, 0 - je event_done - movsx eax, WORD PTR lp - sub eax, viewLeft3D - cmp eax, viewWidth3D - jae event_done - imul eax, 320 - xor edx, edx - div viewWidth3D - mov mouseX3D, eax - movsx eax, WORD PTR lp[2] - sub eax, viewTop3D - cmp eax, viewHeight3D - jae event_done - imul eax, 240 - xor edx, edx - div viewHeight3D - mov mouseY3D, eax - cmp uMsg,200h - jne @F - cmp eax,50 - jb event_done - cmp eax,211 - jae event_done -@@: - cmp uMsg,203h - je pyr_event_pick - mov pyrPickClick3D,0 - jmp pyr_event_pick_done -pyr_event_pick: - mov pyrPickClick3D,1 -pyr_event_pick_done: - mov mouseClick3D, 1 - jmp event_done -event_key_down: - mov ecx, wp - cmp ecx, 255 - ja event_done - test lp, 40000000h - jnz event_done - mov keys3D[ecx], 1 - mov pressedKeys3D[ecx], 1 - jmp event_done -event_key_up: - mov ecx, wp - cmp ecx, 255 - ja event_done - mov keys3D[ecx], 0 - jmp event_done -event_fullscreen: - test lp, 40000000h - jnz event_done - call ToggleFullscreen3D - jmp event_done -event_focus_lost: - call ClearKeys3D - jmp event_done -event_erase: - mov eax, 1 - ret -event_paint: - invoke BeginPaint, hwnd, OFFSET paint3D - cmp h3DDC, 0 - je @F - call Present3D -@@: - invoke EndPaint, hwnd, OFFSET paint3D - jmp event_done -event_close: - invoke PostQuitMessage, 0 -event_done: - xor eax, eax - ret -WindowEvents3D ENDP - -LoadDisplaySettings3D PROC uses ebx - invoke CreateFileA, OFFSET displaySettingsPath3D, 80000000h, 1, 0, 3, 80h, 0 - cmp eax, -1 - je display_settings_load_done - mov ebx, eax - invoke ReadFile, ebx, OFFSET displaySettingsData3D, 12, OFFSET displaySettingsIo3D, 0 - invoke CloseHandle, ebx - cmp displaySettingsIo3D, 12 - jne display_settings_load_done - cmp displaySettingsData3D, 44535031h - jne display_settings_load_done - mov eax, displaySettingsData3D[4] - and eax, 1 - mov displayFill3D, eax -display_settings_load_done: - ret -LoadDisplaySettings3D ENDP - -SaveDisplaySettings3D PROC uses ebx - invoke CreateDirectoryA, OFFSET runtime3D, 0 - mov displaySettingsData3D, 44535031h - mov eax, displayFill3D - mov displaySettingsData3D[4], eax - mov displaySettingsData3D[8], 0 - invoke CreateFileA, OFFSET displaySettingsPath3D, 40000000h, 0, 0, 2, 80h, 0 - cmp eax, -1 - je display_settings_save_done - mov ebx, eax - invoke WriteFile, ebx, OFFSET displaySettingsData3D, 12, OFFSET displaySettingsIo3D, 0 - invoke CloseHandle, ebx -display_settings_save_done: - ret -SaveDisplaySettings3D ENDP - -Pressed3D PROC key:DWORD - mov ecx, key - xor eax, eax - cmp ecx, 255 - ja @F - cmp pressedKeys3D[ecx], 0 - je @F - mov pressedKeys3D[ecx], 0 - mov eax, 8000h -@@: - ret -Pressed3D ENDP - -InitPaths3D PROC uses ebx esi edi - invoke GetModuleFileNameA, 0, OFFSET directory3D, SIZEOF directory3D - test eax, eax - jz path_done - lea esi, directory3D - mov edi, esi -path_scan: - mov al, [esi] - test al, al - jz path_found - cmp al, '\' - jne @F - mov edi, esi -@@: - inc esi - jmp path_scan -path_found: - mov BYTE PTR [edi], 0 - invoke SetCurrentDirectoryA, OFFSET directory3D - mov ebx, 3 -path_assets: - invoke GetFileAttributesA, OFFSET szTexturesRelPath - cmp eax, -1 - jne path_done - dec ebx - jz path_restore - ; Root, bin and build/graphics launches resolve the same asset directory. - invoke SetCurrentDirectoryA, OFFSET parent3D - test eax, eax - jnz path_assets -path_restore: - invoke SetCurrentDirectoryA, OFFSET directory3D -path_done: - ret -InitPaths3D ENDP - -Create3DWindow PROC uses ebx esi edi - local widthPx:DWORD - local heightPx:DWORD - invoke GetModuleHandleA, OFFSET user32Name3D - invoke GetProcAddress, eax, OFFSET dpiName3D - test eax, eax - jz @F - call eax -@@: - invoke GetModuleHandleA, 0 - mov h3DInst, eax - mov wc3D.hInstance, eax - invoke LoadIconA, eax, 1 - mov wc3D.hIcon, eax - mov wc3D.hIconSm, eax - invoke LoadCursorA, 0, 32512 - mov wc3D.hCursor, eax - mov wc3D.cbSize, SIZEOF C3D_WNDCLASSEX - mov wc3D.style, CS_HREDRAW or CS_VREDRAW - mov wc3D.lpfnWndProc, OFFSET Casino3DWndProc - mov wc3D.lpszClassName, OFFSET sz3DClassName - invoke RegisterClassExA, OFFSET wc3D - mov bmi3D.bmiHeader.biSize, SIZEOF C3D_BITMAPINFOHEADER - mov bmi3D.bmiHeader.biWidth, SCREEN_W - mov bmi3D.bmiHeader.biHeight, -SCREEN_H - mov bmi3D.bmiHeader.biPlanes, 1 - mov bmi3D.bmiHeader.biBitCount, 32 - mov bmi3D.bmiHeader.biSizeImage, SCREEN_SIZE * 4 - invoke GetSystemMetrics, 0 - mov esi, eax - sub eax, 80 - cmp eax, 1120 - jle @F - mov eax, 1120 -@@: - mov widthPx, eax - invoke GetSystemMetrics, 1 - mov edi, eax - sub eax, 120 - mov heightPx, eax - mov eax, widthPx - imul eax, 3 - shr eax, 2 - cmp eax, heightPx - jle @F - mov eax, heightPx - imul eax, 4 - xor edx, edx - mov ecx, 3 - div ecx - mov widthPx, eax -@@: - mov eax, widthPx - imul eax, 3 - shr eax, 2 - mov clientRect3D[12], eax - mov eax, widthPx - mov clientRect3D[8], eax - invoke AdjustWindowRectEx, OFFSET clientRect3D, WS_OVERLAPPEDWINDOW, 0, 0 - mov eax, clientRect3D[8] - sub eax, clientRect3D - mov widthPx, eax - sub esi, eax - sar esi, 1 - mov eax, clientRect3D[12] - sub eax, clientRect3D[4] - mov heightPx, eax - sub edi, eax - sar edi, 1 - invoke CreateWindowExA, 0, OFFSET sz3DClassName, OFFSET sz3DWindowTitle, WS_OVERLAPPEDWINDOW, esi, edi, widthPx, heightPx, 0, 0, h3DInst, 0 - test eax, eax - jz window_failed - mov h3DWnd, eax - invoke GetDC, h3DWnd - mov h3DDC, eax - test eax, eax - jz window_failed - invoke SetStretchBltMode, h3DDC, 3 - ; Resize while hidden. Init3DEngine paints the ident before showing it. - mov fullscreen3D, 0 - call ToggleFullscreen3D - mov eax, 1 -window_failed: - ret -Create3DWindow ENDP - -LoadTextures3D PROC uses ebx - local count:DWORD - invoke CreateFileA, OFFSET szTexturesRelPath, 80000000h, 1, 0, 3, 80h, 0 - cmp eax, -1 - je assets_failed - mov ebx, eax - invoke ReadFile, ebx, OFFSET texturesBuffer, 48*128*128*4, ADDR count, 0 - push eax - invoke CloseHandle, ebx - pop eax - test eax, eax - jz assets_failed - cmp count, 48*128*128*4 - jne assets_failed - mov eax, 1 - ret -assets_failed: - invoke MessageBoxA, h3DWnd, OFFSET textMissing3D, OFFSET sz3DWindowTitle, 10h - xor eax, eax - ret -LoadTextures3D ENDP - -Present3D PROC uses ebx esi edi - local viewW:DWORD - local viewH:DWORD - local offsetX:DWORD - local offsetY:DWORD - invoke GetClientRect, h3DWnd, OFFSET clientRect3D - mov esi, clientRect3D[8] - mov edi, clientRect3D[12] - test esi, esi - jz present_done - test edi, edi - jz present_done - cmp displayFill3D, 0 - je present_keep_aspect - mov viewW, esi - mov viewH, edi - jmp present_geometry_ready -present_keep_aspect: - mov viewW, esi - mov eax, esi - imul eax, 3 - shr eax, 2 - cmp eax, edi - jle @F - mov eax, edi - imul eax, 4 - xor edx, edx - mov ecx, 3 - div ecx - mov viewW, eax - mov eax, edi -@@: - mov viewH, eax -present_geometry_ready: - 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 viewTop3D, ebx - mov eax, offsetX - mov viewLeft3D, eax - mov eax, viewW - mov viewWidth3D, eax - mov eax, viewH - mov viewHeight3D, eax - ; Only clear the letterbox bars, never erase under the next frame. - cmp offsetY, 0 - je @F - invoke PatBlt, h3DDC, 0, 0, esi, offsetY, 42h -@@: - mov eax, offsetY - add eax, viewH - mov ecx, edi - sub ecx, eax - test ecx, ecx - jz @F - invoke PatBlt, h3DDC, 0, eax, esi, ecx, 42h -@@: - cmp offsetX, 0 - je @F - invoke PatBlt, h3DDC, 0, 0, offsetX, edi, 42h -@@: - mov eax, offsetX - add eax, viewW - mov ecx, esi - sub ecx, eax - test ecx, ecx - jz @F - invoke PatBlt, h3DDC, eax, 0, ecx, edi, 42h -@@: - invoke StretchDIBits, h3DDC, offsetX, offsetY, viewW, viewH, 0, 0, SCREEN_W, SCREEN_H, OFFSET screenBuffer, OFFSET bmi3D, 0, SRCCOPY -present_done: - ret -Present3D ENDP - -ToggleFullscreen3D PROC uses ebx esi edi - local visibleStyle:DWORD - local detailOpen:DWORD - mov eax,coinDetailWnd3D - mov detailOpen,eax - call CloseCoinDetail3D - invoke GetWindowLongA, h3DWnd, -16 - and eax, 10000000h - mov visibleStyle, eax - cmp fullscreen3D, 0 - jne restore_window - invoke GetWindowRect, h3DWnd, OFFSET savedRect3D - invoke MonitorFromWindow, h3DWnd, 2 - invoke GetMonitorInfoA, eax, OFFSET monitor3D - test eax, eax - jz fullscreen_done - mov eax, visibleStyle - or eax, 80000000h - invoke SetWindowLongA, h3DWnd, -16, eax - mov eax, monitor3D[12] - sub eax, monitor3D[4] - mov ebx, monitor3D[16] - sub ebx, monitor3D[8] - invoke SetWindowPos, h3DWnd, 0, monitor3D[4], monitor3D[8], eax, ebx, 24h - mov fullscreen3D, 1 - jmp fullscreen_done -restore_window: - mov eax, visibleStyle - or eax, WS_OVERLAPPEDWINDOW - invoke SetWindowLongA, h3DWnd, -16, eax - mov eax, savedRect3D[8] - sub eax, savedRect3D - mov ebx, savedRect3D[12] - sub ebx, savedRect3D[4] - invoke SetWindowPos, h3DWnd, 0, savedRect3D, savedRect3D[4], eax, ebx, 24h - mov fullscreen3D, 0 -fullscreen_done: - cmp detailOpen,0 - je @F - call OpenCoinDetail3D -@@: - ret -ToggleFullscreen3D ENDP - -UpdateCamera3D PROC uses ebx - mov eax, playerAngle - and eax, 511 - mov ebx, tableCos[eax*4] - mov playerDirX, ebx - mov eax, tableSin[eax*4] - mov playerDirY, eax - imul eax, -66 - cdq - mov ecx, 100 - idiv ecx - mov playerPlaneX, eax - mov eax, playerDirX - imul eax, 66 - cdq - idiv ecx - mov playerPlaneY, eax - ret -UpdateCamera3D ENDP - -; Four corners of a 0.3-tile-wide body; bounds checked before every map read. -CanWalk3D PROC uses ebx esi edi px:DWORD, py:DWORD - invoke CanWalkHall3D, px, py - test eax, eax - jz walk_blocked - mov esi, -9830 -walk_corner_x: - mov edi, -9830 -walk_corner_y: - mov eax, px - add eax, esi - sar eax, 16 - cmp eax, MAP_WIDTH - jae walk_blocked - mov ebx, eax - mov eax, py - add eax, edi - sar eax, 16 - cmp eax, MAP_HEIGHT - jae walk_blocked - shl eax, 5 - add eax, ebx - mov ecx, worldMap3D - cmp BYTE PTR [ecx+eax], 0 - jne walk_blocked - add edi, 19660 - cmp edi, 9830 - jle walk_corner_y - add esi, 19660 - cmp esi, 9830 - jle walk_corner_x - mov eax, 1 - ret -walk_blocked: - xor eax, eax - ret -CanWalk3D ENDP - -LoadProgress3D PROC uses ebx - mov bankroll, 10000 - mov ownedBacks3D, 1 - mov selectedBack3D, 0 - invoke CreateFileA, OFFSET savePath3D, 80000000h, 1, 0, 3, 80h, 0 - cmp eax, -1 - je progress_loaded - mov ebx, eax - invoke ReadFile, ebx, OFFSET saveData3D, 16, OFFSET saveIo3D, 0 - invoke CloseHandle, ebx - cmp saveIo3D, 16 - jne progress_loaded - cmp saveData3D, 33443343h - je progress_version_ok - cmp saveData3D, 32443343h - jne progress_loaded - ; Preserve the old preview's gold/emerald/crimson purchases by identity. - mov edx, 1 - test saveData3D[8], 2 - jz @F - or edx, 8 -@@: - test saveData3D[8], 4 - jz @F - or edx, 20h -@@: - test saveData3D[8], 8 - jz @F - or edx, 4 -@@: - mov saveData3D[8], edx - mov ecx, saveData3D[12] - cmp ecx, 3 - ja progress_loaded - mov eax, previewBackMap3D[ecx*4] - mov saveData3D[12], eax -progress_version_ok: - mov eax, saveData3D[4] - cmp eax, 1000000000 - ja progress_loaded - mov bankroll, eax - mov eax, saveData3D[8] - and eax, 1FFFh - or eax, 1 - mov ownedBacks3D, eax - mov ecx, saveData3D[12] - cmp ecx, 12 - ja progress_loaded - bt eax, ecx - jnc progress_loaded - mov selectedBack3D, ecx -progress_loaded: - ret -LoadProgress3D ENDP - -SaveProgress3D PROC uses ebx -IFDEF CASINO_ACTION_TEST - ret -ENDIF - cmp arrivalConfirmed3D, 0 - je progress_saved - cmp nativeProfileActive3D, 0 - je @F - call SaveGraphicProfile3D - ret -@@: - invoke CreateDirectoryA, OFFSET runtime3D, 0 - mov saveData3D, 33443343h - mov eax, bankroll - mov saveData3D[4], eax - mov eax, ownedBacks3D - mov saveData3D[8], eax - mov eax, selectedBack3D - mov saveData3D[12], eax - invoke CreateFileA, OFFSET savePath3D, 40000000h, 0, 0, 2, 80h, 0 - cmp eax, -1 - je progress_saved - mov ebx, eax - invoke WriteFile, ebx, OFFSET saveData3D, 16, OFFSET saveIo3D, 0 - invoke CloseHandle, ebx -progress_saved: - ret -SaveProgress3D ENDP +; Main and owned coin-detail windows are processed on the same thread; no CMD fallback. +WindowEvents3D PROC uses ebx esi edi hwnd:DWORD, uMsg:DWORD, wp:DWORD, lp:DWORD + cmp engineMode,MODE_SCRATCH + jne @F + invoke ScratchMouseEvent3D,hwnd,uMsg,wp,lp + test eax,eax + jz @F + ret +@@: + cmp uMsg, 102h + jne @F + invoke ArrivalChar3D, wp + xor eax, eax + ret +@@: + cmp uMsg, 201h + je event_mouse_down + cmp uMsg,203h + jne @F + cmp engineMode,MODE_POOL + je event_mouse_down + jmp event_default +@@: + cmp uMsg, 200h + jne @F + cmp engineMode, MODE_POOL + jne event_default + test wp, 1 + jnz event_mouse_down + jmp event_default +@@: + cmp uMsg, 100h + je event_key_down + cmp uMsg, 104h + jne @F + cmp wp, 0Dh + je event_fullscreen +@@: + cmp uMsg, 101h + je event_key_up + cmp uMsg, 8 + je event_focus_lost + cmp uMsg, 14h + je event_erase + cmp uMsg, 0Fh + je event_paint + cmp uMsg, WM_CLOSE + je event_close + cmp uMsg, WM_DESTROY + je event_close +event_default: + invoke DefWindowProcA, hwnd, uMsg, wp, lp + ret +event_mouse_down: + cmp viewWidth3D, 0 + je event_done + cmp viewHeight3D, 0 + je event_done + movsx eax, WORD PTR lp + sub eax, viewLeft3D + cmp eax, viewWidth3D + jae event_done + imul eax, 320 + xor edx, edx + div viewWidth3D + mov mouseX3D, eax + movsx eax, WORD PTR lp[2] + sub eax, viewTop3D + cmp eax, viewHeight3D + jae event_done + imul eax, 240 + xor edx, edx + div viewHeight3D + mov mouseY3D, eax + cmp uMsg,200h + jne @F + cmp eax,50 + jb event_done + cmp eax,211 + jae event_done +@@: + cmp uMsg,203h + je pyr_event_pick + mov pyrPickClick3D,0 + jmp pyr_event_pick_done +pyr_event_pick: + mov pyrPickClick3D,1 +pyr_event_pick_done: + mov mouseClick3D, 1 + jmp event_done +event_key_down: + mov ecx, wp + cmp ecx, 255 + ja event_done + test lp, 40000000h + jnz event_done + mov keys3D[ecx], 1 + mov pressedKeys3D[ecx], 1 + jmp event_done +event_key_up: + mov ecx, wp + cmp ecx, 255 + ja event_done + mov keys3D[ecx], 0 + jmp event_done +event_fullscreen: + test lp, 40000000h + jnz event_done + call ToggleFullscreen3D + jmp event_done +event_focus_lost: + call ClearKeys3D + jmp event_done +event_erase: + mov eax, 1 + ret +event_paint: + invoke BeginPaint, hwnd, OFFSET paint3D + cmp h3DDC, 0 + je @F + call Present3D +@@: + invoke EndPaint, hwnd, OFFSET paint3D + jmp event_done +event_close: + invoke PostQuitMessage, 0 +event_done: + xor eax, eax + ret +WindowEvents3D ENDP + +LoadDisplaySettings3D PROC uses ebx + invoke CreateFileA, OFFSET displaySettingsPath3D, 80000000h, 1, 0, 3, 80h, 0 + cmp eax, -1 + je display_settings_load_done + mov ebx, eax + invoke ReadFile, ebx, OFFSET displaySettingsData3D, 12, OFFSET displaySettingsIo3D, 0 + invoke CloseHandle, ebx + cmp displaySettingsIo3D, 12 + jne display_settings_load_done + cmp displaySettingsData3D, 44535031h + jne display_settings_load_done + mov eax, displaySettingsData3D[4] + and eax, 1 + mov displayFill3D, eax +display_settings_load_done: + ret +LoadDisplaySettings3D ENDP + +SaveDisplaySettings3D PROC uses ebx + invoke CreateDirectoryA, OFFSET runtime3D, 0 + mov displaySettingsData3D, 44535031h + mov eax, displayFill3D + mov displaySettingsData3D[4], eax + mov displaySettingsData3D[8], 0 + invoke CreateFileA, OFFSET displaySettingsPath3D, 40000000h, 0, 0, 2, 80h, 0 + cmp eax, -1 + je display_settings_save_done + mov ebx, eax + invoke WriteFile, ebx, OFFSET displaySettingsData3D, 12, OFFSET displaySettingsIo3D, 0 + invoke CloseHandle, ebx +display_settings_save_done: + ret +SaveDisplaySettings3D ENDP + +Pressed3D PROC key:DWORD + mov ecx, key + xor eax, eax + cmp ecx, 255 + ja @F + cmp pressedKeys3D[ecx], 0 + je @F + mov pressedKeys3D[ecx], 0 + mov eax, 8000h +@@: + ret +Pressed3D ENDP + +InitPaths3D PROC uses ebx esi edi + invoke GetModuleFileNameA, 0, OFFSET directory3D, SIZEOF directory3D + test eax, eax + jz path_done + lea esi, directory3D + mov edi, esi +path_scan: + mov al, [esi] + test al, al + jz path_found + cmp al, '\' + jne @F + mov edi, esi +@@: + inc esi + jmp path_scan +path_found: + mov BYTE PTR [edi], 0 + invoke SetCurrentDirectoryA, OFFSET directory3D + mov ebx, 3 +path_assets: + invoke GetFileAttributesA, OFFSET szTexturesRelPath + cmp eax, -1 + jne path_done + dec ebx + jz path_restore + ; Root, bin and build/graphics launches resolve the same asset directory. + invoke SetCurrentDirectoryA, OFFSET parent3D + test eax, eax + jnz path_assets +path_restore: + invoke SetCurrentDirectoryA, OFFSET directory3D +path_done: + ret +InitPaths3D ENDP + +Create3DWindow PROC uses ebx esi edi + local widthPx:DWORD + local heightPx:DWORD + invoke GetModuleHandleA, OFFSET user32Name3D + invoke GetProcAddress, eax, OFFSET dpiName3D + test eax, eax + jz @F + call eax +@@: + invoke GetModuleHandleA, 0 + mov h3DInst, eax + mov wc3D.hInstance, eax + invoke LoadIconA, eax, 1 + mov wc3D.hIcon, eax + mov wc3D.hIconSm, eax + invoke LoadCursorA, 0, 32512 + mov wc3D.hCursor, eax + mov wc3D.cbSize, SIZEOF C3D_WNDCLASSEX + mov wc3D.style, CS_HREDRAW or CS_VREDRAW + mov wc3D.lpfnWndProc, OFFSET Casino3DWndProc + mov wc3D.lpszClassName, OFFSET sz3DClassName + invoke RegisterClassExA, OFFSET wc3D + mov bmi3D.bmiHeader.biSize, SIZEOF C3D_BITMAPINFOHEADER + mov bmi3D.bmiHeader.biWidth, SCREEN_W + mov bmi3D.bmiHeader.biHeight, -SCREEN_H + mov bmi3D.bmiHeader.biPlanes, 1 + mov bmi3D.bmiHeader.biBitCount, 32 + mov bmi3D.bmiHeader.biSizeImage, SCREEN_SIZE * 4 + invoke GetSystemMetrics, 0 + mov esi, eax + sub eax, 80 + cmp eax, 1120 + jle @F + mov eax, 1120 +@@: + mov widthPx, eax + invoke GetSystemMetrics, 1 + mov edi, eax + sub eax, 120 + mov heightPx, eax + mov eax, widthPx + imul eax, 3 + shr eax, 2 + cmp eax, heightPx + jle @F + mov eax, heightPx + imul eax, 4 + xor edx, edx + mov ecx, 3 + div ecx + mov widthPx, eax +@@: + mov eax, widthPx + imul eax, 3 + shr eax, 2 + mov clientRect3D[12], eax + mov eax, widthPx + mov clientRect3D[8], eax + invoke AdjustWindowRectEx, OFFSET clientRect3D, WS_OVERLAPPEDWINDOW, 0, 0 + mov eax, clientRect3D[8] + sub eax, clientRect3D + mov widthPx, eax + sub esi, eax + sar esi, 1 + mov eax, clientRect3D[12] + sub eax, clientRect3D[4] + mov heightPx, eax + sub edi, eax + sar edi, 1 + invoke CreateWindowExA, 0, OFFSET sz3DClassName, OFFSET sz3DWindowTitle, WS_OVERLAPPEDWINDOW, esi, edi, widthPx, heightPx, 0, 0, h3DInst, 0 + test eax, eax + jz window_failed + mov h3DWnd, eax + invoke GetDC, h3DWnd + mov h3DDC, eax + test eax, eax + jz window_failed + invoke SetStretchBltMode, h3DDC, 3 + ; Resize while hidden. Init3DEngine paints the ident before showing it. + mov fullscreen3D, 0 + call ToggleFullscreen3D + mov eax, 1 +window_failed: + ret +Create3DWindow ENDP + +LoadTextures3D PROC uses ebx + local count:DWORD + invoke CreateFileA, OFFSET szTexturesRelPath, 80000000h, 1, 0, 3, 80h, 0 + cmp eax, -1 + je assets_failed + mov ebx, eax + invoke ReadFile, ebx, OFFSET texturesBuffer, 48*128*128*4, ADDR count, 0 + push eax + invoke CloseHandle, ebx + pop eax + test eax, eax + jz assets_failed + cmp count, 48*128*128*4 + jne assets_failed + mov eax, 1 + ret +assets_failed: + invoke MessageBoxA, h3DWnd, OFFSET textMissing3D, OFFSET sz3DWindowTitle, 10h + xor eax, eax + ret +LoadTextures3D ENDP + +Present3D PROC uses ebx esi edi + local viewW:DWORD + local viewH:DWORD + local offsetX:DWORD + local offsetY:DWORD + invoke GetClientRect, h3DWnd, OFFSET clientRect3D + mov esi, clientRect3D[8] + mov edi, clientRect3D[12] + test esi, esi + jz present_done + test edi, edi + jz present_done + cmp displayFill3D, 0 + je present_keep_aspect + mov viewW, esi + mov viewH, edi + jmp present_geometry_ready +present_keep_aspect: + mov viewW, esi + mov eax, esi + imul eax, 3 + shr eax, 2 + cmp eax, edi + jle @F + mov eax, edi + imul eax, 4 + xor edx, edx + mov ecx, 3 + div ecx + mov viewW, eax + mov eax, edi +@@: + mov viewH, eax +present_geometry_ready: + 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 viewTop3D, ebx + mov eax, offsetX + mov viewLeft3D, eax + mov eax, viewW + mov viewWidth3D, eax + mov eax, viewH + mov viewHeight3D, eax + ; Only clear the letterbox bars, never erase under the next frame. + cmp offsetY, 0 + je @F + invoke PatBlt, h3DDC, 0, 0, esi, offsetY, 42h +@@: + mov eax, offsetY + add eax, viewH + mov ecx, edi + sub ecx, eax + test ecx, ecx + jz @F + invoke PatBlt, h3DDC, 0, eax, esi, ecx, 42h +@@: + cmp offsetX, 0 + je @F + invoke PatBlt, h3DDC, 0, 0, offsetX, edi, 42h +@@: + mov eax, offsetX + add eax, viewW + mov ecx, esi + sub ecx, eax + test ecx, ecx + jz @F + invoke PatBlt, h3DDC, eax, 0, ecx, edi, 42h +@@: + invoke StretchDIBits, h3DDC, offsetX, offsetY, viewW, viewH, 0, 0, SCREEN_W, SCREEN_H, OFFSET screenBuffer, OFFSET bmi3D, 0, SRCCOPY +present_done: + ret +Present3D ENDP + +ToggleFullscreen3D PROC uses ebx esi edi + local visibleStyle:DWORD + local detailOpen:DWORD + mov eax,coinDetailWnd3D + mov detailOpen,eax + call CloseCoinDetail3D + invoke GetWindowLongA, h3DWnd, -16 + and eax, 10000000h + mov visibleStyle, eax + cmp fullscreen3D, 0 + jne restore_window + invoke GetWindowRect, h3DWnd, OFFSET savedRect3D + invoke MonitorFromWindow, h3DWnd, 2 + invoke GetMonitorInfoA, eax, OFFSET monitor3D + test eax, eax + jz fullscreen_done + mov eax, visibleStyle + or eax, 80000000h + invoke SetWindowLongA, h3DWnd, -16, eax + mov eax, monitor3D[12] + sub eax, monitor3D[4] + mov ebx, monitor3D[16] + sub ebx, monitor3D[8] + invoke SetWindowPos, h3DWnd, 0, monitor3D[4], monitor3D[8], eax, ebx, 24h + mov fullscreen3D, 1 + jmp fullscreen_done +restore_window: + mov eax, visibleStyle + or eax, WS_OVERLAPPEDWINDOW + invoke SetWindowLongA, h3DWnd, -16, eax + mov eax, savedRect3D[8] + sub eax, savedRect3D + mov ebx, savedRect3D[12] + sub ebx, savedRect3D[4] + invoke SetWindowPos, h3DWnd, 0, savedRect3D, savedRect3D[4], eax, ebx, 24h + mov fullscreen3D, 0 +fullscreen_done: + cmp detailOpen,0 + je @F + call OpenCoinDetail3D +@@: + ret +ToggleFullscreen3D ENDP + +UpdateCamera3D PROC uses ebx + mov eax, playerAngle + and eax, 511 + mov ebx, tableCos[eax*4] + mov playerDirX, ebx + mov eax, tableSin[eax*4] + mov playerDirY, eax + imul eax, -66 + cdq + mov ecx, 100 + idiv ecx + mov playerPlaneX, eax + mov eax, playerDirX + imul eax, 66 + cdq + idiv ecx + mov playerPlaneY, eax + ret +UpdateCamera3D ENDP + +; Four corners of a 0.3-tile-wide body; bounds checked before every map read. +CanWalk3D PROC uses ebx esi edi px:DWORD, py:DWORD + invoke CanWalkHall3D, px, py + test eax, eax + jz walk_blocked + mov esi, -9830 +walk_corner_x: + mov edi, -9830 +walk_corner_y: + mov eax, px + add eax, esi + sar eax, 16 + cmp eax, MAP_WIDTH + jae walk_blocked + mov ebx, eax + mov eax, py + add eax, edi + sar eax, 16 + cmp eax, MAP_HEIGHT + jae walk_blocked + shl eax, 5 + add eax, ebx + mov ecx, worldMap3D + cmp BYTE PTR [ecx+eax], 0 + jne walk_blocked + add edi, 19660 + cmp edi, 9830 + jle walk_corner_y + add esi, 19660 + cmp esi, 9830 + jle walk_corner_x + mov eax, 1 + ret +walk_blocked: + xor eax, eax + ret +CanWalk3D ENDP + +LoadProgress3D PROC uses ebx + mov bankroll, 10000 + mov ownedBacks3D, 1 + mov selectedBack3D, 0 + mov charmCloverUses, 0 + mov charmHorseshoeUses, 0 + mov charmSkullUses, 0 + mov charmDevilUses, 0 + invoke CreateFileA, OFFSET savePath3D, 80000000h, 1, 0, 3, 80h, 0 + cmp eax, -1 + je progress_loaded + mov ebx, eax + invoke ReadFile, ebx, OFFSET saveData3D, 32, OFFSET saveIo3D, 0 + invoke CloseHandle, ebx + cmp saveIo3D, 16 + jb progress_loaded + cmp saveData3D, 33443343h + je progress_version_ok + cmp saveData3D, 32443343h + jne progress_loaded +; Preserve the old preview's gold/emerald/crimson purchases by identity. + mov edx, 1 + test saveData3D[8], 2 + jz @F + or edx, 8 +@@: + test saveData3D[8], 4 + jz @F + or edx, 20h +@@: + test saveData3D[8], 8 + jz @F + or edx, 4 +@@: + mov saveData3D[8], edx + mov ecx, saveData3D[12] + cmp ecx, 3 + ja progress_loaded + mov eax, previewBackMap3D[ecx*4] + mov saveData3D[12], eax +progress_version_ok: + mov eax, saveData3D[4] + cmp eax, 1000000000 + ja progress_loaded + mov bankroll, eax + mov eax, saveData3D[8] + and eax, 1FFFh + or eax, 1 + mov ownedBacks3D, eax + mov ecx, saveData3D[12] + cmp ecx, 12 + ja progress_loaded + bt eax, ecx + jnc progress_loaded + mov selectedBack3D, ecx + cmp saveIo3D, 32 + jb progress_loaded + mov eax, saveData3D[16] + mov charmCloverUses, eax + mov eax, saveData3D[20] + mov charmHorseshoeUses, eax + mov eax, saveData3D[24] + mov charmSkullUses, eax + mov eax, saveData3D[28] + mov charmDevilUses, eax +progress_loaded: + ret +LoadProgress3D ENDP + +SaveProgress3D PROC uses ebx + IFDEF CASINO_ACTION_TEST + ret + ENDIF + cmp arrivalConfirmed3D, 0 + je progress_saved + cmp nativeProfileActive3D, 0 + je @F + call SaveGraphicProfile3D + ret +@@: + invoke CreateDirectoryA, OFFSET runtime3D, 0 + mov saveData3D, 33443343h + mov eax, bankroll + mov saveData3D[4], eax + mov eax, ownedBacks3D + mov saveData3D[8], eax + mov eax, selectedBack3D + mov saveData3D[12], eax + mov eax, charmCloverUses + mov saveData3D[16], eax + mov eax, charmHorseshoeUses + mov saveData3D[20], eax + mov eax, charmSkullUses + mov saveData3D[24], eax + mov eax, charmDevilUses + mov saveData3D[28], eax + invoke CreateFileA, OFFSET savePath3D, 40000000h, 0, 0, 2, 80h, 0 + cmp eax, -1 + je progress_saved + mov ebx, eax + invoke WriteFile, ebx, OFFSET saveData3D, 32, OFFSET saveIo3D, 0 + invoke CloseHandle, ebx +progress_saved: + ret +SaveProgress3D ENDP diff --git a/src_graphics/platform_data.inc b/src_graphics/platform_data.inc index 5bb1d0f..ce9d64b 100644 --- a/src_graphics/platform_data.inc +++ b/src_graphics/platform_data.inc @@ -66,7 +66,7 @@ displaySettingsPath3D db "runtime\display.cfg",0 displaySettingsData3D dd 44535031h,1,0 displaySettingsIo3D dd 0 savePath3D db "runtime\casino3d-progress.dat",0 -saveData3D dd 32443343h, 10000, 0, 0 +saveData3D dd 32443343h, 10000, 0, 0, 0, 0, 0, 0 saveIo3D dd 0 previewBackMap3D dd 0,3,5,2 textPause3D db 202,192,199,200,205,206,32,47,32,205,192,209,210,208,206,201,202,200,0 diff --git a/src_graphics/russian_roulette.inc b/src_graphics/russian_roulette.inc index 8f4c2cb..3193e1d 100644 --- a/src_graphics/russian_roulette.inc +++ b/src_graphics/russian_roulette.inc @@ -1,765 +1,774 @@ -; Native roulette: one cylinder, one paid stake, cinematic states in the same window. -.code -FreeRussianAssets3D PROC - invoke FreeAnimPack3D,OFFSET rrPartyArt3D - invoke FreeAnimPack3D,OFFSET rr3d_room - invoke FreeAnimPack3D,OFFSET rr3d_dealer - invoke FreeAnimPack3D,OFFSET rr3d_hands - cmp rr3d_assets, 0 - je @F - invoke HeapFree, rr3d_heap, 0, rr3d_assets - mov rr3d_assets, 0 -@@: - ret -FreeRussianAssets3D ENDP - -LoadRussianAssets3D PROC uses ebx - local count:DWORD - cmp rr3d_assets, 0 - jne rr_assets_ready - invoke CreateFileA, OFFSET rrAssetPath3D, 80000000h, 1, 0, 3, 80h, 0 - cmp eax, -1 - je rr_assets_failed - mov ebx, eax - invoke GetProcessHeap - mov rr3d_heap, eax - invoke HeapAlloc, eax, 0, 4194304 - mov rr3d_assets, eax - test eax, eax - jz rr_assets_close_failed - invoke ReadFile, ebx, rr3d_assets, 4194304, ADDR count, 0 - test eax, eax - jz rr_assets_close_failed - cmp count, 4194304 - jne rr_assets_close_failed - invoke CloseHandle, ebx -rr_assets_ready: - invoke LoadAnimPack3D,OFFSET rr3d_room,OFFSET bs3d_roomPath - test eax,eax - jz rr_view_failed - cmp rr3d_room.imageWidth,640 - jne rr_view_failed - cmp rr3d_room.height,480 - jne rr_view_failed - invoke LoadAnimPack3D,OFFSET rr3d_dealer,OFFSET bs3d_dealerPath - test eax,eax - jz rr_view_failed - cmp rr3d_dealer.frames,16 - jne rr_view_failed - invoke LoadAnimPack3D,OFFSET rr3d_hands,OFFSET rrHandsPath3D - test eax,eax - jz rr_view_failed - cmp rr3d_hands.frames,16 - jne rr_view_failed - mov eax, 1 - ret -rr_view_failed: - call FreeRussianAssets3D - jmp rr_assets_failed -rr_assets_close_failed: - invoke CloseHandle, ebx - call FreeRussianAssets3D -rr_assets_failed: - invoke MessageBoxA, h3DWnd, OFFSET rrAssetError3D, OFFSET rrTitleText3D, 10h - xor eax, eax - ret -LoadRussianAssets3D ENDP - -InitRussianGame3D PROC - call LoadRussianAssets3D - test eax, eax - jz @F - mov rr3d_state, RR_READY - mov rr3d_timer, 0 - mov rr3d_payout, 0 - mov rr3d_error, 0 - mov cardExitActive3D,0 - call RRPartyInit3D -@@: - ret -InitRussianGame3D ENDP - -StartRussianRound3D PROC uses ebx esi - cmp rr3d_state, RR_READY - jne rr_start_done - mov eax, rr3d_bet - test eax, eax - jle rr_start_empty - cmp eax, bankroll - ja rr_start_empty - cmp rr3d_bullets, 1 - jb rr_start_empty - cmp rr3d_bullets, 3 - ja rr_start_empty - call RRPartyReset3D - mov eax,rr3d_bet - mov rrPartyStake3D,eax - mov rrPartySettled3D,0 - sub bankroll, eax - mov rr3d_payout, 0 - mov rr3d_error, 0 - call RRLoadCylinder3D - invoke RandomRange3D, rrPartySize3D - mov rr3d_turn, eax - mov rr3d_state, RR_LOAD - mov rr3d_timer, 0 - invoke PlayCasinoSound3D, OFFSET rrLoadSound3D, 0, 20003h - call SaveProgress3D - jmp rr_start_done -rr_start_empty: - mov rr3d_error, 1 -rr_start_done: - ret -StartRussianRound3D ENDP - -AdvanceRussianScene3D PROC - mov eax, rr3d_state - cmp eax, RR_LOAD - je rr_next_spin - cmp eax, RR_SPIN - je rr_next_turn - cmp eax, RR_RAISE - je rr_next_fire - cmp eax, RR_FIRE - je rr_next_outcome - cmp eax, RR_DRY - je rr_next_chamber - cmp eax, RR_GLITCH - je rr_next_dark - cmp eax, RR_DARK - je rr_next_gman - cmp eax, RR_GMAN - je rr_next_return - cmp eax, RR_RETURN - je rr_next_casino - ret -rr_next_spin: - mov rr3d_state, RR_SPIN - ret -rr_next_turn: - mov rr3d_state, RR_PLAYER - cmp rr3d_turn, 0 - je @F - mov rr3d_state, RR_RAISE -@@: - ret -rr_next_fire: - mov eax, rr3d_chamber - bt rr3d_mask, eax - setc al - movzx eax, al - mov rr3d_shot, eax - mov rr3d_state, RR_FIRE - test eax, eax - jz @F - invoke PlayCasinoSound3D, OFFSET rrFireSound3D, 0, 20003h - ret -@@: - invoke PlayCasinoSound3D, OFFSET rrDrySound3D, 0, 20003h - ret -rr_next_outcome: - cmp rr3d_shot, 0 - jne rr_live_round - mov rr3d_state, RR_DRY - ret -rr_live_round: - cmp rrPartyCount3D,1 - jbe @F - call RRPartyHit3D - ret -@@: - cmp rr3d_turn, 0 - je rr_player_lost - mov eax, rr3d_bet - shl eax, 1 - mov rr3d_payout, eax - add bankroll, eax - mov rr3d_state, RR_WIN - mov rrPartySettled3D,1 - invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 20003h - invoke NpcRecordRound3D,6,1 - call SaveProgress3D - ret -rr_player_lost: - mov rrPartySettled3D,1 - mov rr3d_state, RR_GLITCH - invoke NpcRecordRound3D,6,0 - call SaveProgress3D - ret -rr_next_chamber: - cmp rrPartyCount3D,1 - jbe @F - call RRPartyNext3D - ret -@@: - inc rr3d_chamber - cmp rr3d_chamber, 6 - jb @F - mov rr3d_chamber, 0 -@@: - xor rr3d_turn, 1 - jmp rr_next_turn -rr_next_dark: - mov rr3d_state, RR_DARK - ret -rr_next_gman: - mov rr3d_state, RR_GMAN - invoke GetFileAttributesA, OFFSET rrGmanSound3D - cmp eax, -1 - je @F - invoke PlayCasinoSound3D, OFFSET rrGmanSound3D, 0, 20003h -@@: - ret -rr_next_return: - mov rr3d_state, RR_RETURN - invoke PlayCasinoSound3D, 0, 0, 0 - ret -rr_next_casino: - mov rr3d_state, RR_READY - mov rr3d_timer, 0 - mov engineMode, MODE_WALK - mov paused3D, 0 - ret -AdvanceRussianScene3D ENDP - -HandleRussianInput3D PROC uses ebx - call HandleCardExit3D - test eax,eax - jnz rr_input_done - call RRPartyInput3D - cmp cardExitActive3D,0 - jne rr_input_done - cmp engineMode,MODE_RUSSIAN - jne rr_input_done - cmp rr3d_state, RR_READY - je rr_input_ready - cmp rr3d_state, RR_PLAYER - je rr_input_fire - cmp rr3d_state, RR_WIN - je rr_input_next - mov eax, deltaTime3D - add rr3d_timer, eax -rr_update_scene: - mov ebx, rr3d_state - mov ecx, rr3d_durations[ebx*4] - test ecx, ecx - jz rr_input_done - cmp rr3d_timer, ecx - jb rr_input_done - sub rr3d_timer, ecx - call AdvanceRussianScene3D - cmp engineMode, MODE_WALK - jne rr_update_scene - ret -rr_input_ready: - invoke Pressed3D, 57h - test eax, eax - jnz rr_bet_up - invoke Pressed3D, 26h - test eax, eax - jnz rr_bet_up - invoke Pressed3D, 53h - test eax, eax - jnz rr_bet_down - invoke Pressed3D, 28h - test eax, eax - jnz rr_bet_down - invoke Pressed3D, 31h - test eax, eax - jz @F - mov rr3d_bullets, 1 -@@: - invoke Pressed3D, 32h - test eax, eax - jz @F - mov rr3d_bullets, 2 -@@: - invoke Pressed3D, 33h - test eax, eax - jz @F - mov rr3d_bullets, 3 -@@: - invoke Pressed3D, 20h - test eax, eax - jz rr_input_done - call StartRussianRound3D - ret -rr_bet_up: - mov eax, rr3d_bet - add eax, 50 - cmp eax, 5000 - jbe @F - mov eax, 5000 -@@: - cmp eax, bankroll - jbe @F - mov eax, bankroll -@@: - mov rr3d_bet, eax - mov rr3d_error, 0 - ret -rr_bet_down: - sub rr3d_bet, 50 - cmp rr3d_bet, 50 - jge rr_input_done - mov rr3d_bet, 50 - ret -rr_input_fire: - invoke Pressed3D, 20h - test eax, eax - jz rr_input_done - mov rr3d_state, RR_RAISE - mov rr3d_timer, 0 - ret -rr_input_next: - cmp tournamentMode, 1 - jne @F - invoke Pressed3D, 20h - test eax, eax - jnz rr_tourney_report - invoke Pressed3D, 0Dh - test eax, eax - jnz rr_tourney_report - ret -rr_tourney_report: - cmp rr3d_state, RR_WIN - jne rr_tourney_loss - invoke TowerReportRoundOutcome, 1 - ret -rr_tourney_loss: - invoke TowerReportRoundOutcome, 2 - ret -@@: - invoke Pressed3D, 20h - test eax, eax - jz rr_input_done - mov rr3d_state, RR_READY - mov rr3d_timer, 0 - call RRPartyReset3D -rr_input_done: - ret -HandleRussianInput3D ENDP - -; Inverse-mapped rotation keeps every frame aligned and transparent. -DrawRouletteSprite3D PROC uses ebx esi edi frame:DWORD,centerX:DWORD,centerY:DWORD,wide:DWORD,tall:DWORD,angle:DWORD - local sx:DWORD,sy:DWORD,cosa:DWORD,sina:DWORD,base:DWORD - local px:DWORD,py:DWORD,loX:DWORD,hiX:DWORD,hiY:DWORD,rad:DWORD - cmp rr3d_assets, 0 - je rr_sprite_done - mov eax, frame - shl eax, 18 - add eax, rr3d_assets - mov base, eax - mov eax, angle - and eax, 511 - mov ecx, tableSin[eax*4] - mov sina, ecx - mov ecx, tableCos[eax*4] - mov cosa, ecx - mov eax, wide - add eax, tall - shr eax, 1 - mov rad, eax - mov ecx, centerX - sub ecx, eax - cmp ecx, 0 - jge @F - xor ecx, ecx -@@: - mov loX, ecx - add eax, centerX - cmp eax, 319 - jle @F - mov eax, 319 -@@: - mov hiX, eax - mov eax, centerY - sub eax, rad - cmp eax, 0 - jge @F - xor eax, eax -@@: - mov py, eax - mov eax, centerY - add eax, rad - cmp eax, 239 - jle @F - mov eax, 239 -@@: - mov hiY, eax - ; Axis-aligned frames need only their rectangular footprint. - cmp angle, 0 - jne rr_sprite_row - mov eax, wide - shr eax, 1 - mov ecx, centerX - sub ecx, eax - cmp ecx, 0 - jge @F - xor ecx, ecx -@@: - mov loX, ecx - add eax, centerX - cmp eax, 319 - jle @F - mov eax, 319 -@@: - mov hiX, eax - mov eax, tall - shr eax, 1 - mov ecx, centerY - sub ecx, eax - cmp ecx, 0 - jge @F - xor ecx, ecx -@@: - mov py, ecx - add eax, centerY - cmp eax, 239 - jle @F - mov eax, 239 -@@: - mov hiY, eax -rr_sprite_row: - mov eax, loX - mov px, eax -rr_sprite_pixel: - mov eax, px - sub eax, centerX - mov sx, eax - mov ebx, py - sub ebx, centerY - mov sy, ebx - imul eax, cosa - imul ebx, sina - add eax, ebx - sar eax, 8 - cdq - idiv wide - add eax, 128 - cmp eax, 255 - ja rr_sprite_skip - mov esi, eax - mov eax, sy - imul eax, cosa - mov ebx, sx - imul ebx, sina - sub eax, ebx - sar eax, 8 - cdq - idiv tall - add eax, 128 - cmp eax, 255 - ja rr_sprite_skip - shl eax, 8 - add eax, esi - mov esi, base - mov ebx, [esi+eax*4] - test ebx, 80000000h - jz rr_sprite_skip - mov eax, py - imul eax, SCREEN_W*2 - mov edx, px - shl edx, 1 - add eax, edx - lea edi, screenBuffer[eax*4] - mov [edi], ebx - mov [edi+4], ebx - mov [edi+SCREEN_W*4], ebx - mov [edi+SCREEN_W*4+4], ebx -rr_sprite_skip: - inc px - mov eax, px - cmp eax, hiX - jle rr_sprite_pixel - inc py - mov eax, py - cmp eax, hiY - jle rr_sprite_row -rr_sprite_done: - ret -DrawRouletteSprite3D ENDP - -; Visual noise never consumes the gameplay RNG or changes the outcome. -RenderRussianGlitch3D PROC uses ebx esi edi strength:DWORD - local visualSeed:DWORD,scanRow:DWORD - mov eax, rr3d_timer - xor eax, 13579BDFh - mov visualSeed, eax - mov scanRow, 0 -rr_glitch_row: - mov eax, visualSeed - imul eax, 1664525 - add eax, 1013904223 - mov visualSeed, eax - shr eax, 16 - and eax, 255 - cmp eax, strength - jae rr_glitch_next - mov eax, scanRow - imul eax, SCREEN_W*4*2 - lea edi, screenBuffer[eax] - mov esi, SCREEN_W*2 - mov ebx, 001ECFD8h - test scanRow, 2 - jz @F - mov ebx, 00983478h -@@: -rr_glitch_pixels: - xor [edi], ebx - add edi, 4 - dec esi - jnz rr_glitch_pixels -rr_glitch_next: - add scanRow, 3 - cmp scanRow, 240 - jb rr_glitch_row - ret -RenderRussianGlitch3D ENDP - -RenderRussianCylinder3D PROC uses ebx esi - local loaded:DWORD,hx:DWORD,hy:DWORD - invoke DrawRouletteSprite3D, 2, 251, 112, 62, 62, 0 - mov eax, rr3d_timer - xor edx, edx - mov ecx, 450 - div ecx - cmp eax, rr3d_bullets - jbe @F - mov eax, rr3d_bullets -@@: - mov loaded, eax - xor esi, esi - xor ebx, ebx -rr_draw_chambers: - bt rr3d_mask, esi - jnc rr_next_hole - cmp ebx, loaded - jae rr_next_hole - inc ebx - imul eax, esi, 512 - xor edx, edx - mov ecx, 6 - div ecx - sub eax, 128 - and eax, 511 - mov edx, tableCos[eax*4] - imul edx, 17 - sar edx, 16 - add edx, 251 - mov hx, edx - mov edx, tableSin[eax*4] - imul edx, 17 - sar edx, 16 - add edx, 112 - mov hy, edx - invoke DrawCircle, hx, hy, 7, 00C49B41h - invoke DrawCircle, hx, hy, 3, 006E5129h -rr_next_hole: - inc esi - cmp esi, 6 - jb rr_draw_chambers - ret -RenderRussianCylinder3D ENDP - -RenderRussianHall3D PROC - call UpdateCamera3D - call RenderCeilingAndFloor - call RenderWalls - call RenderSprites - call RenderHUD - call RenderMinimap - ret -RenderRussianHall3D ENDP - -RenderRussianGame3D PROC uses ebx esi edi - local angle:DWORD,poseY:DWORD,poseX:DWORD,scale:DWORD - cmp engineMode, MODE_WALK - je rr_render_hall - cmp rr3d_state, RR_RETURN - je rr_render_return - cmp rr3d_state, RR_DARK - je rr_render_dark - cmp rr3d_state, RR_GMAN - je rr_render_gman - call RenderRussianTable3D - call RenderRussianExit3D - ret - invoke DrawBox, 0, 0, 320, 240, 00100D17h - invoke DrawBoxBorder, 7, 7, 306, 226, 00192320h, 00BE994Ah, 2 - invoke DrawBox, 15, 64, 290, 110, 000E3025h - invoke DrawBox, 15, 165, 290, 9, 004E2D24h - invoke DrawString8x8, 96, 18, OFFSET rrTitleText3D, 00EBD5A0h - invoke DrawString8x8, 18, 43, OFFSET textBankPrompt, 003CFF3Ch - invoke FormatNumber, bankroll, OFFSET hudNumBuffer - invoke DrawString8x8, 66, 43, OFFSET hudNumBuffer, 003CFF3Ch - invoke DrawString8x8, 195, 43, OFFSET textBetPrompt, 00FFD700h - invoke FormatNumber, rr3d_bet, OFFSET hudNumBuffer - invoke DrawString8x8, 251, 43, OFFSET hudNumBuffer, 00FFD700h - mov eax, rr3d_state - cmp eax, RR_LOAD - je rr_render_loading - cmp eax, RR_SPIN - je rr_render_spin - cmp eax, RR_RAISE - je rr_render_raise - cmp eax, RR_FIRE - je rr_render_fire - cmp eax, RR_DRY - je rr_render_dry - cmp eax, RR_WIN - je rr_render_win - cmp eax, RR_GLITCH - je rr_render_glitch - invoke DrawRouletteSprite3D, 0, 160, 114, 165, 104, 0 - cmp rr3d_state, RR_PLAYER - je rr_render_player - invoke DrawString8x8, 18, 180, OFFSET rrCartridgeText3D, 00EBD5A0h - invoke FormatNumber, rr3d_bullets, OFFSET hudNumBuffer - invoke DrawString8x8, 90, 180, OFFSET hudNumBuffer, 00FFFFFFh - invoke DrawString8x8, 18, 197, OFFSET rrBulletKeys3D, 00C1C9CFh - invoke DrawString8x8, 197, 197, OFFSET rrBetKeys3D, 00C1C9CFh - invoke DrawString8x8, 18, 218, OFFSET rrStartText3D, 003CFF3Ch - cmp rr3d_error, 0 - je rr_render_done - invoke DrawString8x8, 18, 181, OFFSET textNoCash3D, 00FF6464h - ret -rr_render_player: - invoke DrawString8x8, 130, 180, OFFSET rrPlayerText3D, 003CFF3Ch - invoke DrawString8x8, 55, 207, OFFSET rrFireText3D, 00EBD5A0h - ret -rr_render_loading: - mov eax, rr3d_timer - xor edx, edx - mov ecx, 450 - div ecx - mov ebx, 1 - cmp eax, rr3d_bullets - jae @F - cmp edx, 180 - jb @F - cmp edx, 390 - jae @F - mov ebx, 7 -@@: - push eax - push edx - invoke DrawRouletteSprite3D, ebx, 121, 112, 170, 112, 0 - call RenderRussianCylinder3D - pop edx - pop eax - cmp eax, rr3d_bullets - jae rr_loading_label - mov eax, edx - imul eax, 41 - xor edx, edx - mov ecx, 450 - div ecx - mov edx, 156 - sub edx, eax - invoke DrawRouletteSprite3D, 3, 251, edx, 32, 18, 128 -rr_loading_label: - invoke DrawString8x8, 100, 192, OFFSET rrLoadText3D, 00EBD5A0h - ret -rr_render_spin: - mov eax, 1400 - sub eax, rr3d_timer - imul eax, eax - shl eax, 1 - xor edx, edx - mov ecx, 1400 - div ecx - mov angle, eax - invoke DrawRouletteSprite3D, 0, 160, 113, 160, 105, angle - invoke DrawString8x8, 92, 192, OFFSET rrSpinText3D, 00EBD5A0h - ret -rr_render_raise: - mov eax, rr3d_timer - imul eax, 15 - xor edx, edx - mov ecx, 750 - div ecx - mov ebx, 114 - sub ebx, eax - mov poseY, ebx - mov poseX, 164 - invoke DrawRouletteSprite3D, 6, 67, 115, 91, 119, 0 - invoke DrawRouletteSprite3D, 4, poseX, poseY, 174, 114, 0 - jmp rr_render_turn_label -rr_render_fire: - invoke DrawRouletteSprite3D, 6, 67, 115, 91, 119, 0 - mov eax, 4 - cmp rr3d_shot, 0 - je @F - mov eax, 5 -@@: - invoke DrawRouletteSprite3D, eax, 164, 99, 174, 114, 0 - cmp rr3d_shot, 0 - je rr_render_done - invoke DrawString8x8, 132, 192, OFFSET rrBangText3D, 00FF9864h - ret -rr_render_dry: - invoke DrawRouletteSprite3D, 4, 170, 114, 174, 114, 0 - invoke DrawString8x8, 108, 192, OFFSET rrClickText3D, 00B6DDD0h - ret -rr_render_turn_label: - mov eax, OFFSET rrPlayerText3D - cmp rr3d_turn, 0 - je @F - mov eax, OFFSET rrDealerText3D -@@: - invoke DrawString8x8, 125, 192, eax, 00EBD5A0h - ret -rr_render_win: - invoke DrawRouletteSprite3D, 0, 160, 114, 165, 104, 0 - invoke DrawString8x8, 80, 188, OFFSET rrVictoryText3D, 003CFF3Ch - invoke FormatNumber, rr3d_payout, OFFSET hudNumBuffer - invoke DrawString8x8, 160, 188, OFFSET hudNumBuffer, 003CFF3Ch - invoke DrawString8x8, 88, 216, OFFSET rrRoundText3D, 00EBD5A0h - ret -rr_render_glitch: - invoke DrawRouletteSprite3D, 4, 164, 99, 174, 114, 0 - invoke RenderRussianGlitch3D, 190 - ret -rr_render_dark: - invoke DrawBox, 0, 0, 320, 240, 0 - ret -rr_render_gman: - invoke DrawBox, 0, 0, 320, 240, 0004090Ch - mov eax, rr3d_timer - xor edx, edx - mov ecx, 180 - div ecx - and eax, 7 - add eax, 8 - mov esi, eax - mov eax, rr3d_timer - xor edx, edx - mov ecx, 120 - div ecx - add eax, 180 - mov scale, eax - invoke DrawRouletteSprite3D, esi, 160, 110, scale, scale, 0 - invoke DrawBox, 0, 220, 320, 20, 0004090Ch - invoke DrawString8x8, 52, 227, OFFSET rrWakeText3D, 00D7DFE3h - cmp rr3d_timer, 400 - jae rr_render_done - invoke RenderRussianGlitch3D, 48 - ret -rr_render_return: - call RenderRussianHall3D - mov eax, 700 - sub eax, rr3d_timer - imul eax, 170 - xor edx, edx - mov ecx, 700 - div ecx - invoke RenderRussianGlitch3D, eax - ret -rr_render_hall: - call RenderRussianHall3D -rr_render_done: - call RenderRussianExit3D - ret -RenderRussianGame3D ENDP -include src_graphics\russian_party.inc +; Native roulette: one cylinder, one paid stake, cinematic states in the same window. +.code +FreeRussianAssets3D PROC + invoke FreeAnimPack3D,OFFSET rrPartyArt3D + invoke FreeAnimPack3D,OFFSET rr3d_room + invoke FreeAnimPack3D,OFFSET rr3d_dealer + invoke FreeAnimPack3D,OFFSET rr3d_hands + cmp rr3d_assets, 0 + je @F + invoke HeapFree, rr3d_heap, 0, rr3d_assets + mov rr3d_assets, 0 +@@: + ret +FreeRussianAssets3D ENDP + +LoadRussianAssets3D PROC uses ebx + local count:DWORD + cmp rr3d_assets, 0 + jne rr_assets_ready + invoke CreateFileA, OFFSET rrAssetPath3D, 80000000h, 1, 0, 3, 80h, 0 + cmp eax, -1 + je rr_assets_failed + mov ebx, eax + invoke GetProcessHeap + mov rr3d_heap, eax + invoke HeapAlloc, eax, 0, 4194304 + mov rr3d_assets, eax + test eax, eax + jz rr_assets_close_failed + invoke ReadFile, ebx, rr3d_assets, 4194304, ADDR count, 0 + test eax, eax + jz rr_assets_close_failed + cmp count, 4194304 + jne rr_assets_close_failed + invoke CloseHandle, ebx +rr_assets_ready: + invoke LoadAnimPack3D,OFFSET rr3d_room,OFFSET bs3d_roomPath + test eax,eax + jz rr_view_failed + cmp rr3d_room.imageWidth,640 + jne rr_view_failed + cmp rr3d_room.height,480 + jne rr_view_failed + invoke LoadAnimPack3D,OFFSET rr3d_dealer,OFFSET bs3d_dealerPath + test eax,eax + jz rr_view_failed + cmp rr3d_dealer.frames,16 + jne rr_view_failed + invoke LoadAnimPack3D,OFFSET rr3d_hands,OFFSET rrHandsPath3D + test eax,eax + jz rr_view_failed + cmp rr3d_hands.frames,16 + jne rr_view_failed + mov eax, 1 + ret +rr_view_failed: + call FreeRussianAssets3D + jmp rr_assets_failed +rr_assets_close_failed: + invoke CloseHandle, ebx + call FreeRussianAssets3D +rr_assets_failed: + invoke MessageBoxA, h3DWnd, OFFSET rrAssetError3D, OFFSET rrTitleText3D, 10h + xor eax, eax + ret +LoadRussianAssets3D ENDP + +InitRussianGame3D PROC + call LoadRussianAssets3D + test eax, eax + jz @F + mov rr3d_state, RR_READY + mov rr3d_timer, 0 + mov rr3d_payout, 0 + mov rr3d_error, 0 + mov cardExitActive3D,0 + call RRPartyInit3D +@@: + ret +InitRussianGame3D ENDP + +StartRussianRound3D PROC uses ebx esi + cmp rr3d_state, RR_READY + jne rr_start_done + mov eax, rr3d_bet + test eax, eax + jle rr_start_empty + cmp eax, bankroll + ja rr_start_empty + cmp rr3d_bullets, 1 + jb rr_start_empty + cmp rr3d_bullets, 3 + ja rr_start_empty + call RRPartyReset3D + mov eax,rr3d_bet + mov rrPartyStake3D,eax + mov rrPartySettled3D,0 + sub bankroll, eax + mov rr3d_payout, 0 + mov rr3d_error, 0 + call RRLoadCylinder3D + invoke RandomRange3D, rrPartySize3D + mov rr3d_turn, eax + mov rr3d_state, RR_LOAD + mov rr3d_timer, 0 + invoke PlayCasinoSound3D, OFFSET rrLoadSound3D, 0, 20003h + call SaveProgress3D + jmp rr_start_done +rr_start_empty: + mov rr3d_error, 1 +rr_start_done: + ret +StartRussianRound3D ENDP + +AdvanceRussianScene3D PROC + mov eax, rr3d_state + cmp eax, RR_LOAD + je rr_next_spin + cmp eax, RR_SPIN + je rr_next_turn + cmp eax, RR_RAISE + je rr_next_fire + cmp eax, RR_FIRE + je rr_next_outcome + cmp eax, RR_DRY + je rr_next_chamber + cmp eax, RR_GLITCH + je rr_next_dark + cmp eax, RR_DARK + je rr_next_gman + cmp eax, RR_GMAN + je rr_next_return + cmp eax, RR_RETURN + je rr_next_casino + ret +rr_next_spin: + mov rr3d_state, RR_SPIN + ret +rr_next_turn: + mov rr3d_state, RR_PLAYER + cmp rr3d_turn, 0 + je @F + mov rr3d_state, RR_RAISE +@@: + ret +rr_next_fire: + mov eax, rr3d_chamber + bt rr3d_mask, eax + setc al + movzx eax, al + mov rr3d_shot, eax + cmp rr3d_turn, 0 + jne @F + cmp rr3d_shot, 0 + je @F + invoke TriggerCharmBulletProtection + test eax, eax + jz @F + mov rr3d_shot, 0 +@@: + mov rr3d_state, RR_FIRE + cmp rr3d_shot, 0 + jz @F + invoke PlayCasinoSound3D, OFFSET rrFireSound3D, 0, 20003h + ret +@@: + invoke PlayCasinoSound3D, OFFSET rrDrySound3D, 0, 20003h + ret +rr_next_outcome: + cmp rr3d_shot, 0 + jne rr_live_round + mov rr3d_state, RR_DRY + ret +rr_live_round: + cmp rrPartyCount3D,1 + jbe @F + call RRPartyHit3D + ret +@@: + cmp rr3d_turn, 0 + je rr_player_lost + mov eax, rr3d_bet + shl eax, 1 + mov rr3d_payout, eax + add bankroll, eax + mov rr3d_state, RR_WIN + mov rrPartySettled3D,1 + invoke PlayCasinoSound3D, OFFSET soundRoundWin, 0, 20003h + invoke NpcRecordRound3D,6,1 + call SaveProgress3D + ret +rr_player_lost: + mov rrPartySettled3D,1 + mov rr3d_state, RR_GLITCH + invoke NpcRecordRound3D,6,0 + call SaveProgress3D + ret +rr_next_chamber: + cmp rrPartyCount3D,1 + jbe @F + call RRPartyNext3D + ret +@@: + inc rr3d_chamber + cmp rr3d_chamber, 6 + jb @F + mov rr3d_chamber, 0 +@@: + xor rr3d_turn, 1 + jmp rr_next_turn +rr_next_dark: + mov rr3d_state, RR_DARK + ret +rr_next_gman: + mov rr3d_state, RR_GMAN + invoke GetFileAttributesA, OFFSET rrGmanSound3D + cmp eax, -1 + je @F + invoke PlayCasinoSound3D, OFFSET rrGmanSound3D, 0, 20003h +@@: + ret +rr_next_return: + mov rr3d_state, RR_RETURN + invoke PlayCasinoSound3D, 0, 0, 0 + ret +rr_next_casino: + mov rr3d_state, RR_READY + mov rr3d_timer, 0 + mov engineMode, MODE_WALK + mov paused3D, 0 + ret +AdvanceRussianScene3D ENDP + +HandleRussianInput3D PROC uses ebx + call HandleCardExit3D + test eax,eax + jnz rr_input_done + call RRPartyInput3D + cmp cardExitActive3D,0 + jne rr_input_done + cmp engineMode,MODE_RUSSIAN + jne rr_input_done + cmp rr3d_state, RR_READY + je rr_input_ready + cmp rr3d_state, RR_PLAYER + je rr_input_fire + cmp rr3d_state, RR_WIN + je rr_input_next + mov eax, deltaTime3D + add rr3d_timer, eax +rr_update_scene: + mov ebx, rr3d_state + mov ecx, rr3d_durations[ebx*4] + test ecx, ecx + jz rr_input_done + cmp rr3d_timer, ecx + jb rr_input_done + sub rr3d_timer, ecx + call AdvanceRussianScene3D + cmp engineMode, MODE_WALK + jne rr_update_scene + ret +rr_input_ready: + invoke Pressed3D, 57h + test eax, eax + jnz rr_bet_up + invoke Pressed3D, 26h + test eax, eax + jnz rr_bet_up + invoke Pressed3D, 53h + test eax, eax + jnz rr_bet_down + invoke Pressed3D, 28h + test eax, eax + jnz rr_bet_down + invoke Pressed3D, 31h + test eax, eax + jz @F + mov rr3d_bullets, 1 +@@: + invoke Pressed3D, 32h + test eax, eax + jz @F + mov rr3d_bullets, 2 +@@: + invoke Pressed3D, 33h + test eax, eax + jz @F + mov rr3d_bullets, 3 +@@: + invoke Pressed3D, 20h + test eax, eax + jz rr_input_done + call StartRussianRound3D + ret +rr_bet_up: + mov eax, rr3d_bet + add eax, 50 + cmp eax, 5000 + jbe @F + mov eax, 5000 +@@: + cmp eax, bankroll + jbe @F + mov eax, bankroll +@@: + mov rr3d_bet, eax + mov rr3d_error, 0 + ret +rr_bet_down: + sub rr3d_bet, 50 + cmp rr3d_bet, 50 + jge rr_input_done + mov rr3d_bet, 50 + ret +rr_input_fire: + invoke Pressed3D, 20h + test eax, eax + jz rr_input_done + mov rr3d_state, RR_RAISE + mov rr3d_timer, 0 + ret +rr_input_next: + cmp tournamentMode, 1 + jne @F + invoke Pressed3D, 20h + test eax, eax + jnz rr_tourney_report + invoke Pressed3D, 0Dh + test eax, eax + jnz rr_tourney_report + ret +rr_tourney_report: + cmp rr3d_state, RR_WIN + jne rr_tourney_loss + invoke TowerReportRoundOutcome, 1 + ret +rr_tourney_loss: + invoke TowerReportRoundOutcome, 2 + ret +@@: + invoke Pressed3D, 20h + test eax, eax + jz rr_input_done + mov rr3d_state, RR_READY + mov rr3d_timer, 0 + call RRPartyReset3D +rr_input_done: + ret +HandleRussianInput3D ENDP + +; Inverse-mapped rotation keeps every frame aligned and transparent. +DrawRouletteSprite3D PROC uses ebx esi edi frame:DWORD,centerX:DWORD,centerY:DWORD,wide:DWORD,tall:DWORD,angle:DWORD + local sx:DWORD,sy:DWORD,cosa:DWORD,sina:DWORD,base:DWORD + local px:DWORD,py:DWORD,loX:DWORD,hiX:DWORD,hiY:DWORD,rad:DWORD + cmp rr3d_assets, 0 + je rr_sprite_done + mov eax, frame + shl eax, 18 + add eax, rr3d_assets + mov base, eax + mov eax, angle + and eax, 511 + mov ecx, tableSin[eax*4] + mov sina, ecx + mov ecx, tableCos[eax*4] + mov cosa, ecx + mov eax, wide + add eax, tall + shr eax, 1 + mov rad, eax + mov ecx, centerX + sub ecx, eax + cmp ecx, 0 + jge @F + xor ecx, ecx +@@: + mov loX, ecx + add eax, centerX + cmp eax, 319 + jle @F + mov eax, 319 +@@: + mov hiX, eax + mov eax, centerY + sub eax, rad + cmp eax, 0 + jge @F + xor eax, eax +@@: + mov py, eax + mov eax, centerY + add eax, rad + cmp eax, 239 + jle @F + mov eax, 239 +@@: + mov hiY, eax + ; Axis-aligned frames need only their rectangular footprint. + cmp angle, 0 + jne rr_sprite_row + mov eax, wide + shr eax, 1 + mov ecx, centerX + sub ecx, eax + cmp ecx, 0 + jge @F + xor ecx, ecx +@@: + mov loX, ecx + add eax, centerX + cmp eax, 319 + jle @F + mov eax, 319 +@@: + mov hiX, eax + mov eax, tall + shr eax, 1 + mov ecx, centerY + sub ecx, eax + cmp ecx, 0 + jge @F + xor ecx, ecx +@@: + mov py, ecx + add eax, centerY + cmp eax, 239 + jle @F + mov eax, 239 +@@: + mov hiY, eax +rr_sprite_row: + mov eax, loX + mov px, eax +rr_sprite_pixel: + mov eax, px + sub eax, centerX + mov sx, eax + mov ebx, py + sub ebx, centerY + mov sy, ebx + imul eax, cosa + imul ebx, sina + add eax, ebx + sar eax, 8 + cdq + idiv wide + add eax, 128 + cmp eax, 255 + ja rr_sprite_skip + mov esi, eax + mov eax, sy + imul eax, cosa + mov ebx, sx + imul ebx, sina + sub eax, ebx + sar eax, 8 + cdq + idiv tall + add eax, 128 + cmp eax, 255 + ja rr_sprite_skip + shl eax, 8 + add eax, esi + mov esi, base + mov ebx, [esi+eax*4] + test ebx, 80000000h + jz rr_sprite_skip + mov eax, py + imul eax, SCREEN_W*2 + mov edx, px + shl edx, 1 + add eax, edx + lea edi, screenBuffer[eax*4] + mov [edi], ebx + mov [edi+4], ebx + mov [edi+SCREEN_W*4], ebx + mov [edi+SCREEN_W*4+4], ebx +rr_sprite_skip: + inc px + mov eax, px + cmp eax, hiX + jle rr_sprite_pixel + inc py + mov eax, py + cmp eax, hiY + jle rr_sprite_row +rr_sprite_done: + ret +DrawRouletteSprite3D ENDP + +; Visual noise never consumes the gameplay RNG or changes the outcome. +RenderRussianGlitch3D PROC uses ebx esi edi strength:DWORD + local visualSeed:DWORD,scanRow:DWORD + mov eax, rr3d_timer + xor eax, 13579BDFh + mov visualSeed, eax + mov scanRow, 0 +rr_glitch_row: + mov eax, visualSeed + imul eax, 1664525 + add eax, 1013904223 + mov visualSeed, eax + shr eax, 16 + and eax, 255 + cmp eax, strength + jae rr_glitch_next + mov eax, scanRow + imul eax, SCREEN_W*4*2 + lea edi, screenBuffer[eax] + mov esi, SCREEN_W*2 + mov ebx, 001ECFD8h + test scanRow, 2 + jz @F + mov ebx, 00983478h +@@: +rr_glitch_pixels: + xor [edi], ebx + add edi, 4 + dec esi + jnz rr_glitch_pixels +rr_glitch_next: + add scanRow, 3 + cmp scanRow, 240 + jb rr_glitch_row + ret +RenderRussianGlitch3D ENDP + +RenderRussianCylinder3D PROC uses ebx esi + local loaded:DWORD,hx:DWORD,hy:DWORD + invoke DrawRouletteSprite3D, 2, 251, 112, 62, 62, 0 + mov eax, rr3d_timer + xor edx, edx + mov ecx, 450 + div ecx + cmp eax, rr3d_bullets + jbe @F + mov eax, rr3d_bullets +@@: + mov loaded, eax + xor esi, esi + xor ebx, ebx +rr_draw_chambers: + bt rr3d_mask, esi + jnc rr_next_hole + cmp ebx, loaded + jae rr_next_hole + inc ebx + imul eax, esi, 512 + xor edx, edx + mov ecx, 6 + div ecx + sub eax, 128 + and eax, 511 + mov edx, tableCos[eax*4] + imul edx, 17 + sar edx, 16 + add edx, 251 + mov hx, edx + mov edx, tableSin[eax*4] + imul edx, 17 + sar edx, 16 + add edx, 112 + mov hy, edx + invoke DrawCircle, hx, hy, 7, 00C49B41h + invoke DrawCircle, hx, hy, 3, 006E5129h +rr_next_hole: + inc esi + cmp esi, 6 + jb rr_draw_chambers + ret +RenderRussianCylinder3D ENDP + +RenderRussianHall3D PROC + call UpdateCamera3D + call RenderCeilingAndFloor + call RenderWalls + call RenderSprites + call RenderHUD + call RenderMinimap + ret +RenderRussianHall3D ENDP + +RenderRussianGame3D PROC uses ebx esi edi + local angle:DWORD,poseY:DWORD,poseX:DWORD,scale:DWORD + cmp engineMode, MODE_WALK + je rr_render_hall + cmp rr3d_state, RR_RETURN + je rr_render_return + cmp rr3d_state, RR_DARK + je rr_render_dark + cmp rr3d_state, RR_GMAN + je rr_render_gman + call RenderRussianTable3D + call RenderRussianExit3D + ret + invoke DrawBox, 0, 0, 320, 240, 00100D17h + invoke DrawBoxBorder, 7, 7, 306, 226, 00192320h, 00BE994Ah, 2 + invoke DrawBox, 15, 64, 290, 110, 000E3025h + invoke DrawBox, 15, 165, 290, 9, 004E2D24h + invoke DrawString8x8, 96, 18, OFFSET rrTitleText3D, 00EBD5A0h + invoke DrawString8x8, 18, 43, OFFSET textBankPrompt, 003CFF3Ch + invoke FormatNumber, bankroll, OFFSET hudNumBuffer + invoke DrawString8x8, 66, 43, OFFSET hudNumBuffer, 003CFF3Ch + invoke DrawString8x8, 195, 43, OFFSET textBetPrompt, 00FFD700h + invoke FormatNumber, rr3d_bet, OFFSET hudNumBuffer + invoke DrawString8x8, 251, 43, OFFSET hudNumBuffer, 00FFD700h + mov eax, rr3d_state + cmp eax, RR_LOAD + je rr_render_loading + cmp eax, RR_SPIN + je rr_render_spin + cmp eax, RR_RAISE + je rr_render_raise + cmp eax, RR_FIRE + je rr_render_fire + cmp eax, RR_DRY + je rr_render_dry + cmp eax, RR_WIN + je rr_render_win + cmp eax, RR_GLITCH + je rr_render_glitch + invoke DrawRouletteSprite3D, 0, 160, 114, 165, 104, 0 + cmp rr3d_state, RR_PLAYER + je rr_render_player + invoke DrawString8x8, 18, 180, OFFSET rrCartridgeText3D, 00EBD5A0h + invoke FormatNumber, rr3d_bullets, OFFSET hudNumBuffer + invoke DrawString8x8, 90, 180, OFFSET hudNumBuffer, 00FFFFFFh + invoke DrawString8x8, 18, 197, OFFSET rrBulletKeys3D, 00C1C9CFh + invoke DrawString8x8, 197, 197, OFFSET rrBetKeys3D, 00C1C9CFh + invoke DrawString8x8, 18, 218, OFFSET rrStartText3D, 003CFF3Ch + cmp rr3d_error, 0 + je rr_render_done + invoke DrawString8x8, 18, 181, OFFSET textNoCash3D, 00FF6464h + ret +rr_render_player: + invoke DrawString8x8, 130, 180, OFFSET rrPlayerText3D, 003CFF3Ch + invoke DrawString8x8, 55, 207, OFFSET rrFireText3D, 00EBD5A0h + ret +rr_render_loading: + mov eax, rr3d_timer + xor edx, edx + mov ecx, 450 + div ecx + mov ebx, 1 + cmp eax, rr3d_bullets + jae @F + cmp edx, 180 + jb @F + cmp edx, 390 + jae @F + mov ebx, 7 +@@: + push eax + push edx + invoke DrawRouletteSprite3D, ebx, 121, 112, 170, 112, 0 + call RenderRussianCylinder3D + pop edx + pop eax + cmp eax, rr3d_bullets + jae rr_loading_label + mov eax, edx + imul eax, 41 + xor edx, edx + mov ecx, 450 + div ecx + mov edx, 156 + sub edx, eax + invoke DrawRouletteSprite3D, 3, 251, edx, 32, 18, 128 +rr_loading_label: + invoke DrawString8x8, 100, 192, OFFSET rrLoadText3D, 00EBD5A0h + ret +rr_render_spin: + mov eax, 1400 + sub eax, rr3d_timer + imul eax, eax + shl eax, 1 + xor edx, edx + mov ecx, 1400 + div ecx + mov angle, eax + invoke DrawRouletteSprite3D, 0, 160, 113, 160, 105, angle + invoke DrawString8x8, 92, 192, OFFSET rrSpinText3D, 00EBD5A0h + ret +rr_render_raise: + mov eax, rr3d_timer + imul eax, 15 + xor edx, edx + mov ecx, 750 + div ecx + mov ebx, 114 + sub ebx, eax + mov poseY, ebx + mov poseX, 164 + invoke DrawRouletteSprite3D, 6, 67, 115, 91, 119, 0 + invoke DrawRouletteSprite3D, 4, poseX, poseY, 174, 114, 0 + jmp rr_render_turn_label +rr_render_fire: + invoke DrawRouletteSprite3D, 6, 67, 115, 91, 119, 0 + mov eax, 4 + cmp rr3d_shot, 0 + je @F + mov eax, 5 +@@: + invoke DrawRouletteSprite3D, eax, 164, 99, 174, 114, 0 + cmp rr3d_shot, 0 + je rr_render_done + invoke DrawString8x8, 132, 192, OFFSET rrBangText3D, 00FF9864h + ret +rr_render_dry: + invoke DrawRouletteSprite3D, 4, 170, 114, 174, 114, 0 + invoke DrawString8x8, 108, 192, OFFSET rrClickText3D, 00B6DDD0h + ret +rr_render_turn_label: + mov eax, OFFSET rrPlayerText3D + cmp rr3d_turn, 0 + je @F + mov eax, OFFSET rrDealerText3D +@@: + invoke DrawString8x8, 125, 192, eax, 00EBD5A0h + ret +rr_render_win: + invoke DrawRouletteSprite3D, 0, 160, 114, 165, 104, 0 + invoke DrawString8x8, 80, 188, OFFSET rrVictoryText3D, 003CFF3Ch + invoke FormatNumber, rr3d_payout, OFFSET hudNumBuffer + invoke DrawString8x8, 160, 188, OFFSET hudNumBuffer, 003CFF3Ch + invoke DrawString8x8, 88, 216, OFFSET rrRoundText3D, 00EBD5A0h + ret +rr_render_glitch: + invoke DrawRouletteSprite3D, 4, 164, 99, 174, 114, 0 + invoke RenderRussianGlitch3D, 190 + ret +rr_render_dark: + invoke DrawBox, 0, 0, 320, 240, 0 + ret +rr_render_gman: + invoke DrawBox, 0, 0, 320, 240, 0004090Ch + mov eax, rr3d_timer + xor edx, edx + mov ecx, 180 + div ecx + and eax, 7 + add eax, 8 + mov esi, eax + mov eax, rr3d_timer + xor edx, edx + mov ecx, 120 + div ecx + add eax, 180 + mov scale, eax + invoke DrawRouletteSprite3D, esi, 160, 110, scale, scale, 0 + invoke DrawBox, 0, 220, 320, 20, 0004090Ch + invoke DrawString8x8, 52, 227, OFFSET rrWakeText3D, 00D7DFE3h + cmp rr3d_timer, 400 + jae rr_render_done + invoke RenderRussianGlitch3D, 48 + ret +rr_render_return: + call RenderRussianHall3D + mov eax, 700 + sub eax, rr3d_timer + imul eax, 170 + xor edx, edx + mov ecx, 700 + div ecx + invoke RenderRussianGlitch3D, eax + ret +rr_render_hall: + call RenderRussianHall3D +rr_render_done: + call RenderRussianExit3D + ret +RenderRussianGame3D ENDP +include src_graphics\russian_party.inc diff --git a/src_graphics/scratch.inc b/src_graphics/scratch.inc index 8fbba2b..d25ca7a 100644 --- a/src_graphics/scratch.inc +++ b/src_graphics/scratch.inc @@ -410,6 +410,16 @@ FinishScratch3D PROC mov eax,1000000000 @@: mov bankroll,eax + mov ecx, scrGross3D + cmp ecx, scrStake3D + ja scratch_charm_win + cmp ecx, 0 + jne @F + invoke TriggerCharmLossProtection, scrStake3D + jmp @F +scratch_charm_win: + invoke TriggerCharmWinBonus, scrGross3D +@@: call ScratchStartPayout3D call SaveProgress3D scratch_finish_done:

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