From a7e29ee420dd833d180a94d12fcf2b0ceee52bbd Mon Sep 17 00:00:00 2001 From: Nico de Poel Date: Thu, 2 Feb 2023 15:07:05 +0100 Subject: [PATCH] Fixed issue with model data memory alignment, officially using model #0 now to draw the static world geometry. --- ps1bsp.h | 6 ++++-- test.ps1bsp | Bin 447687 -> 447763 bytes world.c | 4 ++-- world.h | 6 +++--- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/ps1bsp.h b/ps1bsp.h index 3ee06db..14b9562 100755 --- a/ps1bsp.h +++ b/ps1bsp.h @@ -154,8 +154,10 @@ typedef struct SVECTOR boundingSphere; SVECTOR origin; - u_short nodeId; - u_short clipNodeId; + u_short nodeId0; + u_short nodeId1; + u_short nodeId2; + u_short nodeId3; } ps1bsp_model_t; // Pre-parsed and encoded entity data (this runs the risk of becoming too bloated) diff --git a/test.ps1bsp b/test.ps1bsp index 23c2221e3f1bc33264e641e2e243fb81a8a7fe14..bb4139af521f17ad9caf81bc2b8f616ce2fd43b6 100755 GIT binary patch delta 516 zcmX@UQhM?#=?NjCHuY=_EFugH4wKm!E;}+Xl+>~@oM_B!&17uNWNOW1Zp~zA&1Bu0 z$;Mq<-@xG@ynyky5Ca4VfT-Eb3=9pt4Wb7aE<=SG1bUfwuci0|*%;9AKiVN4Xz$BJ3zhHX@w%~wR1EUlp zOnf!-7q(wu3lxA3@`sCWWM*JzV+T11ReU=$54#XZoEKGmFS7)@98i1#GsxoQPzTjB z2pncsVb=mmByc(o{L*^XzGEcCE6AB89{BRA=nH$*KfZ_=p4J->7 h7Q%z>Epre1B!~q-ha#fpGxH4gdF&17uNWNOW1Zp~zA&1Bu0 z$;Mr~-KL)HdT4zEhlB6}#@|8=5Fh}e8h9H-4=`MY3NZ-uGVfq(;6N3d%zT7x0W+%D zOy&!03pf-64*WmF4Am?!pZN}311|$mOqc~Gwv_n=(7Xd;4UAItj4;8~%wK>8DgZ6^ zhl_1wW?*mNKo#50%){Qmiz>F4S%Q55Gsu$VaElK!tFR|mDhcNFXvjNaN20n-X z1yDQc7zEBU+psh6J8+y}FoRosmDvZV@BuHwzb3fYZRP~_UyNQHJCM{pWX=JqJE5S! j$PZWdoVfvLaRbW&hJ|p)yk+hInFn+XB2+&!&tL}t0YF+K diff --git a/world.c b/world.c index 536c0a9..06e32c3 100644 --- a/world.c +++ b/world.c @@ -49,9 +49,9 @@ void world_load(const u_long *data, world_t *world) LOAD_CHUNK(ps1bsp_plane_t, world->planes, world->numPlanes, bytes, header->planes); LOAD_CHUNK(ps1bsp_node_t, world->nodes, world->numNodes, bytes, header->nodes); LOAD_CHUNK(ps1bsp_leaf_t, world->leaves, world->numLeaves, bytes, header->leaves); + LOAD_CHUNK(ps1bsp_model_t, world->models, world->numModels, bytes, header->models); LOAD_CHUNK(u_short, world->leafFaces, world->numLeafFaces, bytes, header->leafFaces); LOAD_CHUNK(u_char, world->visData, world->numVisData, bytes, header->visData); - LOAD_CHUNK(ps1bsp_model_t, world->models, world->numModels, bytes, header->models); } static INLINE short world_pointPlaneDist(const VECTOR *point, const ps1bsp_plane_t *plane) @@ -331,7 +331,7 @@ void world_draw(const world_t *world) else world_drawface = &world_drawface_lit; - ps1bsp_leaf_t *firstLeaf = world_sortLeafs(world, 0, pvs); + ps1bsp_leaf_t *firstLeaf = world_sortLeafs(world, world->models[0].nodeId0, pvs); ps1bsp_face_t *firstFace = world_sortFaces(world, firstLeaf); world_drawFaces(world, firstFace); } diff --git a/world.h b/world.h index a8bf541..c4aeb50 100644 --- a/world.h +++ b/world.h @@ -34,14 +34,14 @@ typedef struct u_short numLeaves; ps1bsp_leaf_t *leaves; + u_short numModels; + ps1bsp_model_t *models; + u_short numLeafFaces; u_short *leafFaces; u_short numVisData; u_char *visData; - - u_short numModels; - ps1bsp_model_t *models; } world_t; #define CONTENTS_EMPTY -1