From 8bc15db7de1eeafe8ba63f676bbab7308dc6d7d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20R=C3=A1=C4=8Dek?= Date: Wed, 20 Aug 2025 15:32:44 +0200 Subject: [PATCH] Fixed lua function resolution, reverted fixed point handling --- output.bin | Bin 433084 -> 433272 bytes src/lua.cpp | 26 ++++++++++++++++++++------ src/lua.h | 14 +++++++++----- src/scenemanager.cpp | 2 +- 4 files changed, 30 insertions(+), 12 deletions(-) diff --git a/output.bin b/output.bin index 066fa29f4d0e48deab2dff53e07c9928a7fb27b0..f0d2372bb20ed1ad86df38666ca1d0650552b04d 100644 GIT binary patch delta 4961 zcmZ{m3se->8OL|Q+4!0eLM*6NmKaadbCK~MW(6GY_NQxk+F;qw+(QZi407{ewwIu!iL+;$op+$Gk|NGtl z_uZL0_kOdEs!4-qC;fcQuk|_)`lr_kI)m=)^voYc`n^%}ckL z;}EY&iQASk!(!c*obof{)|AcWZ8OEOM*0)SniJ#2vEtbOm$@u4{(t2K1sT_Fwk8|3 zv`uk|#@_^+jj74zcw@>|qs5vSx5fH~*_e#$FmC$cLX1|6G0|*}H`Am)%xw33F26_A zW$5r?iVq_(eK7ZHbJ|9MQ6X~QXu9q08P_sJc_5?9p$eU+P83i(E z81iPGFqQP_2Wd;<0S@fjL!^IBPtd?~jGQAfG`D{aC%r^^=l2Bl&taYb0hRlF_+5k( zX-=rMT!~|zEF!046|+5o5rs%wM0?DoXh!;pl!w|P>?;@vG?+wZSo4aeP)4GOlt-3_ zI>Q*rCSr>y4=s;mq?X9(SX;yyt?~eoT1(?PemygvFo})pYAu!PSk?w2b!pXUH7Shb zf>`U)&TFKBNKHz0nqp<1heVtfr`c&{Bxp2<;zr_#)LQDSJS!g_b0y8svMv%)i10c? zM6Sd&ujlJCZ;VMi6K!9AI+kUbiIhj$Bl(>c5owHS3UAU@qlJhw%=v1wwyOHECegma z`6^$-=ZUn(v_*7kSym#gskJ*VY-e*FBvQ7sEV)`ESBcc6UD(cvFbh~&j)#^kJK{@bj)s0tJRtS+JuN+#ne<>rc z!(;A@?2c#TD3QF_lE@2wfrrMITKHZzYXn#Arc-SLCk&Rk5S&{~*Opgo;bA_bPh zr0jH-Wh0W~Rpgfy$jA*M7yPbIt2Z*@{iI2(H&)E93SeXzk;A@4emUBC-$A53rpwH) z=M<3><88B!X?1R?0RV<^PD3xIJwWC_px5o@g}DA!+@u0{{(f; zbxmh;g{#Chop-G)BAwnY1Mg7^k>-TDv^wo9_YCkKg?CEF8tC%LM6uEg=DBlzJg_wR6N=X3#)!lVPc_{n{Z$Y4VMj_xgN z<&O|4uw~O=QB2QTM#fA;R(Jd(Z6|~fc@)zf&podb=~>$ud2v?^yc?^@y{bb!vtE^VC`6Df%--N;XODv`X{A~WwuHX?;d_Jp!zHrEZ6 z6k3b5&gMNCz0S3n-{~?UwpqD>{JifVQZbeK#B5gQ6cM|3#Z*pi5jkc&?CaKlerghn z{f`-Kvsl)0B8Pp8{fqn<*+oR2pBuYO>zV!mjnmENIb}YCY z%)8A>BJ%v~VBTAH6Y10675Q1NP{|!Hmx0x}O~e`26xtNd$dsun32%&IB#a2XDMR@g z+@q4Vh!)LrjtIS#!+2J&N*bdYwOc0Yz->0Cln?z&qE@usm%%e3_YQwI4XH%&wQIju=S?$-4Z#(&`Mb%il6oWGQAI>92R8(B z(lX6txJ>c28E>ET(bLC+KA!X$Rdv!wc=~s;v{%TK9XZ0Ezt0#Xq&3X!`X ztO%@_GL-%B9e^qp_Q*>P3UA1c1MnR}#z9mrA&Uc{bQr7z>91f%px%W-D3zk# zyY#j2DEX99Vj;)qOF<|dhYz820t%sIgE}GP$SY0?+hhe{$a|RMBu3xI=zEy=6xjPv zr=dFfd1;NXQ?604&Q6Thz;_-Bp;QZn zP^yDMDAhwDlrBKkW8MbLi%|LqtO4xrU>`v>5>pUL7ctrh)`ZcE^eh)Q(-k0%Wi@f|xAw^cY=$XI#70%X|@O8uYmGEczm$!xO za!og$)*UMEyiF?PYh39a_`8md?LgM7Y+1{U>^Md`(r-oxzLTL=xXsEGJ2&HjQ2&M64R>qN85)IUQ#uHokq=D`c;X*H{Ck>fZwO)qD8S)h` VgK*rDV;FthQDpEq?vM>0{{?g7-1h(g delta 4866 zcmZXX4OCO-8OLwH8>Ka3@Pi;Ngd-mYhvE{jmV*@39wY*yh6FqYSPUm*fG`0QYy{Th zoM*?Q)Y4aM?dn!_wzaKOr?%MEt+utBU0v%|yV}*Rw%XQKRP+r>+4E2O-pd)BlmGeW z_dd__e%yPX8~CwleMhIIFJG#WG*Se8WJxO>yE7~$O5wjxG{eJ^^b?IFZKBWNi0;M* zBgQ0m|MbC*!;>`9FCrzWZ>vV?lqAhVG~Ty0BIMr)`N%Mj03Q?PAuoq{C|664xtQ`|a@8!@dXpM%Xj>oA8lRU+p$TqoFT0VZYnx4Nb~IajMij9QU=m=fz0OFDybmSV6M+-o-Jaw5LrX}PSbQqY#uHorxXA&|O)wucll zho|Z0x8$_t)`=K5k-XYGcb;32-Vn(hLCz4#uPvxkvot}0A}fnXE)lg(9g(Fq z)|Kk{>>@I!!n|@;wa7Y4#9}ww)t$}hpt@w$!y;=xk)($cN~SFk3zC(-#;82@qLe%$hkjNsxm?jInWsXytjoM8x5AyVdo?4X5d5j5npH zDs_rOB-N;9brDIfiub7dIzl8X!K}}X6?0u7GB+tJK_NZ&Yp|ZVNh&ELVvJ2S##0v! zb%36YL~>&n8kAl194BI*UNLX^3=wmcNaO=iDLTuKge7SR=~H6O%5g9o(DE52Gwjnv z)MlVSCN($F0NDv3SG-g0Q>-7TA1M0~D4-`O+9KNmRG;C@bftV+=**m03!azQ$^RsA;JWF6#kWQc>)%m5W-ZfpXoms+A_ihQhV7 z9ZI)jb7YFjuFQ5Qk27-vJ=9X5_A=HBghr*b9CikX`c$ooG+Lm#+!0Y(Ky)~DYE)e~ ziVjCSR%{ngVWoAY(qY+IAoI%XN~K*fc`TtKTd_mwPHY}fa#f<;q-?tZ$m~t7QWJLr z<*dtTD-dmjoddFZOIlSFHI7i`TC-PaHY^v&>Rno+UbJQ)PkpoBB_3wB2guNLUqE@j z*?AzJx7qKh7neg9MQCcR&ZqggK>0u|OWK|FD+Fo<@_9Y0+m+j7KTx~Vvs#V1093!i zX|FC3iTZm8CEBBxB`9bSP(n%cGNs2cKaj)ew7ZqFKM+n#u2Q-Iy9g9h9p_eB7@Kl0 zAw!edo4HoZxHyaqb@8GZvH+0F=kloAJ_uw=*QY2=f?Wd2N}%pCQ`CwZPsps#N>EWT zP^!@wtMo0_1r(o{YBZ&b#3Mk)*!aXagFsh+V$J##HR^sHp#?_!^b*m9SQ$`6YE(+( z10r!FP{q7bi_)vuaiCbU&Z2gvt3ZvKH9EBeBuxk*Z?sD*YT1DD%8E*hYyxfm5!nhI z0-XS&w{5BV)b@vwt-M%?N{OZ@dbgLUi4|c~=qMCFK-dLzK=GdBD&=<|n-dd4X0M@1M7e=V zTCHC7sqGCThf{e`vNJ&Xl&BQ-&e2Q?p*VwjuVw))r#G7N)?;;HluNgmm~j`-B1_gx z<-NzwhS36}ddta^DXP@6$fBZogrZ9cD7Ty>9a_1xCdj92IkER7~9U|6g-)h>V=8YgEjU zQ88Dpr)k4`-&8wUL!SuxMAB!>(b~y!%p;6%lYh-Rx5+-nyX9Z9_HKCt`AaE z5%-k5k!^TNUeAKNkg*GKPowhFsQg=GK=?CY&w%X)gYe(MLHO_CApBXZo_d?89xFB;eUdI z@S|`LehhOQ!yLzP{>O3tufV-R2N`@7bG(YUKJ31a7(ao^C**b(d<~SHhfMe&i@Mr;a`A#0d`5=!Zu!#TUhW*x-y+#(lrl$h00$c?y~$F z_UL7~mGLXcy@IRtHI4eeCU@r>n#lJJ;=aWwgkQx9uG0GMekVV|eBWWE-=p657`=wL zYheB4{E*;vj9$m+4U9tgO}Lwg8^GuQ*e#stEu86Xj6ygE<6uFsAl5gCt1yVsJ75rg z7w#_V4UzK?QBnQ_7=#bQk@RqFXOB-yM5Co^s?kzZ1by{EcqANzkAZ`584kj=a1cHg zxnq$#4h+Jh;2``SI0(NN4#LO7ji(1); + L.getField(2, "x"); - go->position.x = L.toFixedPoint(3); + psyqo::FixedPoint<> x(L.toNumber(3), psyqo::FixedPoint<>::RAW); + go->position.x = x; L.pop(); + L.getField(2, "y"); - go->position.y = L.toFixedPoint(3); + psyqo::FixedPoint<> y(L.toNumber(3), psyqo::FixedPoint<>::RAW); + go->position.y = y; L.pop(); L.getField(2, "z"); - go->position.z = L.toFixedPoint(3); + + psyqo::FixedPoint<> z(L.toNumber(3), psyqo::FixedPoint<>::RAW); + go->position.z = z; L.pop(); return 0; + } + + static int gameobjectGetPosition(psyqo::Lua L) { + auto go = L.toUserdata(1); + L.newTable(); - L.push(go->position.x); + L.pushNumber(go->position.x.raw()); L.setField(2, "x"); - L.push(go->position.y); + L.pushNumber(go->position.y.raw()); L.setField(2, "y"); - L.push(go->position.z); + L.pushNumber(go->position.z.raw()); L.setField(2, "z"); + return 1; + } void psxsplash::Lua::Init() { diff --git a/src/lua.h b/src/lua.h index 38a5960..09f652c 100644 --- a/src/lua.h +++ b/src/lua.h @@ -42,13 +42,17 @@ class Lua { typedef irqus::typestring methodName; // Needs the methods table at index 1, and the script environment table at index 3 static void resolveGlobal(psyqo::Lua L) { - L.pushNumber(methodId); - L.getTable(3); + // Push the method name string to access the environment table + L.push(methodName::data(), methodName::size()); + L.getTable(3); + if (L.isFunction(-1)) { - L.push(methodName::data(), methodName::size()); - L.setTable(1); + // Store the function in methods table using numeric ID as key + L.pushNumber(methodId); // Push numeric key for methods table + L.copy(-2); // Push the function (copy from top -2) + L.setTable(1); // methodsTable[methodId] = function } else { - L.pop(); + L.pop(); // Pop the non-function value } } template diff --git a/src/scenemanager.cpp b/src/scenemanager.cpp index 52bce6e..2211853 100644 --- a/src/scenemanager.cpp +++ b/src/scenemanager.cpp @@ -67,5 +67,5 @@ void psxsplash::SceneManager::GameTick() { static_cast>(m_playerPosition.z)); m_currentCamera.SetRotation(playerRotationX, playerRotationY, playerRotationZ); - L.OnCollision(m_gameObjects[0], m_gameObjects[1]); // Example call, replace with actual logic + L.OnCollision(m_gameObjects[1], m_gameObjects[0]); // Example call, replace with actual logic } \ No newline at end of file