From 7e4532d846d37fb1eb5f3497cd3c9ff9479c403b Mon Sep 17 00:00:00 2001 From: jracek Date: Thu, 17 Apr 2025 15:35:59 +0200 Subject: [PATCH] Added IsActive flags and scene Lua files --- output.bin | Bin 408324 -> 408332 bytes src/gameobject.hh | 14 +++++++++++++- src/scenemanager.hh | 1 + src/splashpack.cpp | 5 ++++- src/splashpack.hh | 1 + 5 files changed, 19 insertions(+), 2 deletions(-) diff --git a/output.bin b/output.bin index 9b8443c66d1d2d2d7afac0d776f44aa279157a7c..6dc40e71e2d7d2d32a181eba1644f749c97271c2 100644 GIT binary patch delta 4844 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 Jx*C1T{{SzWhdclP delta 4741 zcmZXW4NO#57RLwVv9&u7ow6>tt}-meu^NIbpi*o7Xti1d77H_gm5(h$nW?rQA3`k! zR8-nG;(+p?_{A<_r>zt-plJw2P!k0~jZ4H$B$^2cHb6^P8+Ajn=l|II?j$5LC;$1~ z|2g-)`|dq&q~H7x{N{gD|MIII8ci;J>pbmQD?B&Z$0yiJ;A-ExuS(>J`3END*Qs(q{E;mr*$~=uhTjb`ajcpCG-<$PmPx| z(4*AD`Ag8TF;P>h!AE1G37*LIxgG{WrTF|GU7JSkuIDpdAvz_|-IXzo+-n`5>AEq~ zH8s-}_R5UwGEXD-8S7`d`e(X4d}q{(oJQ`oEHhj+Cp`_~Wa!lL@$l)jd0KOa$b|2( z?x#772(t|0c=)r`<7*j-A~F%+S}@_u$SxwoRK>NLkwztJc==ceBZEYK7N>MPYql52 zGw&%K^Q=+GgvT>_w0L|^YjTN9hK_|ieU*{3M5dNchH`SB$awfz$YdzX0eB+_PT zi|dMKq?m}q*cR7jV&puLmUM^lf?D|zk?ySPDg1io{mvj>PwCFOn8LEQ5a}uGDEu*> zkrEI~PvK>iTp;peen(-ag?UDZbY*p!yUdKte+i`1jl>Y?&g!x7ta5nF7ioT$)lQ_7 z2(R;)$nA{2?R zAa?AbtU^{NnMiedS!&fbMr=gJ5=Jxm?A=68o2t{f=P8kq4G&`nwFSwd&K! zAX1xEmt!kpS;vV~&8hdV3})m8k*ogqg0AQpnIdvU-@fcpAR}Qu2Jwtvy?>Q@-pxdY zQb)}Edg_UMt#vGIR_pXDq*>3iJmwh0rnH7^eqWJ9+7~%>oqlXC3z18K?Ta`$N#u(D zQXnUHh@A0j);9#OEMYF~L%*y3{4S!1+zYxNb$1E#>>{#%Rb{X(f{{id_Fy@juf`ye zyGsU^+zVo!**bI*>TGKFTSLUPVA!okvHp)CGu>+L;&w&_fbbjOznr_E3|(? zhL^h*v$@tQ#I=}rtpXy$I+r)^Q4S(~)}F#1^(;Ri(oyKN@^h;5#TmSrJe0~RZzSR{ zwxlAXJ}#GA?eNrOgKXA6-|b4xn!NF_wN z;x8ug&US&w#gvOl{N#=hxt!nQ*0tu(qb%x3ytl*%zDONQVC1QiHJbTC-3hPFH;6A%M>Dx+2a&OaVbjA{mSrb$ z+ElgeluE7zj$L6}B zkUC3)+S#UvxQbla{7%Cb(C%Go59a6HOr(7g^@(MyPCXH)u6+?F{Y0AeXZ+my&z}uq zLqN0Mv6N*+5;^175K!;Wh=qt8ZV%?3lSHoQ?*$F0o#YOYeTyrD_pf4E!a{?1Kk8Nl z?>13H{mT!iO^d)o@d=x$n~V_>OTiD0RIX)ExePgS4fYA|8poH@~@bG8~I!gg$x?` zd-(y8Z(^L${G{mgAP(bc^}W22$cd7=9RA#k71Em5x|iM8c_L-0)#-eewTSj*{M{6`Tr0*>HdR?mZ6$%%~Qm9ZSYeR*@^0DPYk*r-V?30g#37^Z_ zFdC5licth994cJcFIPnfC9*a`D3@)K6nr9S;K&N0R2C7Wl~llIB^8iXAp=2*0*eBB zoifDN;ad&0TBwk#-w-~PwQs<;1{rHm`AxED-vnC=wiaw1*gCNFUh4R^)z!Q3Pox zS;U>BY`fswg=_wpE>in3MnA#mC#aW$j2zUItbq(_znqQ%JN}hkL+_8Ppgv3 zG3`vO<`1$pu%l2%iP`L^V#jDTd`QIs;!Le2rlL07H=e356gvK_N(Ip%A2IsAlAzL+&}SufY%`2NZ(z4HSa( zEw1ldT;F$eGd|xDJ8~X(c^>!H0@WgvUDACo{I^ure=i8 #include #include @@ -7,7 +8,11 @@ namespace psxsplash { +// LSB is active in flags + class GameObject final { + typedef Utilities::BitSpan IsActive; + typedef Utilities::BitField GameObjectFlags; public: union { Tri *polygons; @@ -15,8 +20,15 @@ class GameObject final { }; psyqo::Vec3 position; psyqo::Matrix33 rotation; + // linear & angular velocity placeholders uint16_t polyCount; int16_t luaFileIndex; + union { + GameObjectFlags flags; + uint32_t flagsAsInt; + }; + bool isActive() const { return flags.get(); } + void setActive(bool active) { flags.set(active); } }; -static_assert(sizeof(GameObject) == 56, "GameObject is not 56 bytes"); +static_assert(sizeof(GameObject) == 60, "GameObject is not 56 bytes"); } // namespace psxsplash \ No newline at end of file diff --git a/src/scenemanager.hh b/src/scenemanager.hh index 7f3e399..3991600 100644 --- a/src/scenemanager.hh +++ b/src/scenemanager.hh @@ -21,6 +21,7 @@ class SceneManager { psxsplash::Lua L; psxsplash::SplashPackLoader m_loader; + eastl::vector m_luaFiles; eastl::vector m_gameObjects; eastl::vector m_navmeshes; diff --git a/src/splashpack.cpp b/src/splashpack.cpp index 0aaee1a..593f60a 100644 --- a/src/splashpack.cpp +++ b/src/splashpack.cpp @@ -25,7 +25,8 @@ struct SPLASHPACKFileHeader { psyqo::GTE::PackedVec3 playerStartPos; psyqo::GTE::PackedVec3 playerStartRot; psyqo::FixedPoint<12, uint16_t> playerHeight; - uint16_t pad[2]; + uint16_t sceneLuaFileIndex; + uint16_t pad; }; struct SPLASHPACKTextureAtlas { @@ -64,6 +65,8 @@ void SplashPackLoader::LoadSplashpack(uint8_t *data, SplashpackSceneSetup &setup curentPointer += sizeof(psxsplash::LuaFile); } + setup.sceneLuaFile = setup.luaFiles[header->sceneLuaFileIndex]; + for (uint16_t i = 0; i < header->gameObjectCount; i++) { psxsplash::GameObject *go = reinterpret_cast(curentPointer); go->polygons = reinterpret_cast(data + go->polygonsOffset); diff --git a/src/splashpack.hh b/src/splashpack.hh index 080dca1..0a8c360 100644 --- a/src/splashpack.hh +++ b/src/splashpack.hh @@ -11,6 +11,7 @@ namespace psxsplash { struct SplashpackSceneSetup { + LuaFile* sceneLuaFile; eastl::vector luaFiles; eastl::vector objects; eastl::vector navmeshes;