Browse Source

BSP file now includes model data for dynamic world objects

unrollquadloop
Nico de Poel 3 years ago
parent
commit
38e91f4c3a
  1. 10
      ps1bsp.h
  2. BIN
      test.ps1bsp
  3. 3
      world.c
  4. 3
      world.h

10
ps1bsp.h

@ -39,6 +39,7 @@ typedef struct
ps1bsp_dentry_t leaves;
ps1bsp_dentry_t leafFaces;
ps1bsp_dentry_t visData;
ps1bsp_dentry_t models;
} ps1bsp_header_t;
typedef struct
@ -142,6 +143,15 @@ typedef struct ps1bsp_leaf_s
const struct ps1bsp_leaf_s* nextLeaf; // For chaining leafs in drawing order
} ps1bsp_leaf_t;
typedef struct
{
SVECTOR boundingSphere;
SVECTOR origin;
u_short nodeId;
u_short clipNodeId;
} ps1bsp_model_t;
// Pre-parsed and encoded entity data (this runs the risk of becoming too bloated)
typedef struct
{

BIN
test.ps1bsp

3
world.c

@ -50,6 +50,7 @@ void world_load(const u_long *data, world_t *world)
LOAD_CHUNK(ps1bsp_leaf_t, world->leaves, world->numLeaves, bytes, header->leaves);
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)
@ -315,7 +316,7 @@ void world_draw(const world_t *world)
world_drawface = &world_drawface_lit;
ps1bsp_leaf_t *firstLeaf = NULL;
world_sortLeafs(world, 0, pvs, &firstLeaf);
world_sortLeafs(world, world->models[0].nodeId, pvs, &firstLeaf);
ps1bsp_face_t *firstFace = world_sortFaces(world, firstLeaf);
world_drawFaces(world, firstFace);
}

3
world.h

@ -37,6 +37,9 @@ typedef struct
u_short numVisData;
u_char *visData;
u_short numModels;
ps1bsp_model_t *models;
} world_t;
#define CONTENTS_EMPTY -1

Loading…
Cancel
Save