diff options
Diffstat (limited to 'code/bspc/sinfiles.h')
-rwxr-xr-x | code/bspc/sinfiles.h | 730 |
1 files changed, 365 insertions, 365 deletions
diff --git a/code/bspc/sinfiles.h b/code/bspc/sinfiles.h index 31091c5..bcb5ee6 100755 --- a/code/bspc/sinfiles.h +++ b/code/bspc/sinfiles.h @@ -1,365 +1,365 @@ -/*
-===========================================================================
-Copyright (C) 1999-2005 Id Software, Inc.
-
-This file is part of Quake III Arena source code.
-
-Quake III Arena source code is free software; you can redistribute it
-and/or modify it under the terms of the GNU General Public License as
-published by the Free Software Foundation; either version 2 of the License,
-or (at your option) any later version.
-
-Quake III Arena source code is distributed in the hope that it will be
-useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with Foobar; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
-===========================================================================
-*/
-
-/*
-==============================================================================
-
- .BSP file format
-
-==============================================================================
-*/
-
-#define SIN
-
-#define SINBSPVERSION 41
-
-// upper design bounds
-// leaffaces, leafbrushes, planes, and verts are still bounded by
-// 16 bit short limits
-#define SIN_MAX_MAP_MODELS 1024
-#define SIN_MAX_MAP_BRUSHES 8192
-#define SIN_MAX_MAP_ENTITIES 2048
-#define SIN_MAX_MAP_ENTSTRING 0x40000
-#define SIN_MAX_MAP_TEXINFO 8192
-
-#define SIN_MAX_MAP_AREAS 256
-#define SIN_MAX_MAP_AREAPORTALS 1024
-#define SIN_MAX_MAP_PLANES 65536
-#define SIN_MAX_MAP_NODES 65536
-#define SIN_MAX_MAP_BRUSHSIDES 65536
-#define SIN_MAX_MAP_LEAFS 65536
-#define SIN_MAX_MAP_VERTS 65536
-#define SIN_MAX_MAP_FACES 65536
-#define SIN_MAX_MAP_LEAFFACES 65536
-#define SIN_MAX_MAP_LEAFBRUSHES 65536
-#define SIN_MAX_MAP_PORTALS 65536
-#define SIN_MAX_MAP_EDGES 128000
-#define SIN_MAX_MAP_SURFEDGES 256000
-#define SIN_MAX_MAP_LIGHTING 0x320000
-#define SIN_MAX_MAP_VISIBILITY 0x280000
-
-#ifdef SIN
-#define SIN_MAX_MAP_LIGHTINFO 8192
-#endif
-
-#ifdef SIN
-#undef SIN_MAX_MAP_LIGHTING //undef the Quake2 bsp version
-#define SIN_MAX_MAP_LIGHTING 0x300000
-#endif
-
-#ifdef SIN
-#undef SIN_MAX_MAP_VISIBILITY //undef the Quake2 bsp version
-#define SIN_MAX_MAP_VISIBILITY 0x280000
-#endif
-
-//=============================================================================
-
-typedef struct
-{
- int fileofs, filelen;
-} sin_lump_t;
-
-#define SIN_LUMP_ENTITIES 0
-#define SIN_LUMP_PLANES 1
-#define SIN_LUMP_VERTEXES 2
-#define SIN_LUMP_VISIBILITY 3
-#define SIN_LUMP_NODES 4
-#define SIN_LUMP_TEXINFO 5
-#define SIN_LUMP_FACES 6
-#define SIN_LUMP_LIGHTING 7
-#define SIN_LUMP_LEAFS 8
-#define SIN_LUMP_LEAFFACES 9
-#define SIN_LUMP_LEAFBRUSHES 10
-#define SIN_LUMP_EDGES 11
-#define SIN_LUMP_SURFEDGES 12
-#define SIN_LUMP_MODELS 13
-#define SIN_LUMP_BRUSHES 14
-#define SIN_LUMP_BRUSHSIDES 15
-#define SIN_LUMP_POP 16
-#define SIN_LUMP_AREAS 17
-#define SIN_LUMP_AREAPORTALS 18
-
-#ifdef SIN
-#define SIN_LUMP_LIGHTINFO 19
-#define SINHEADER_LUMPS 20
-#endif
-
-typedef struct
-{
- int ident;
- int version;
- sin_lump_t lumps[SINHEADER_LUMPS];
-} sin_dheader_t;
-
-typedef struct
-{
- float mins[3], maxs[3];
- float origin[3]; // for sounds or lights
- int headnode;
- int firstface, numfaces; // submodels just draw faces
- // without walking the bsp tree
-} sin_dmodel_t;
-
-typedef struct
-{
- float point[3];
-} sin_dvertex_t;
-
-
-// 0-2 are axial planes
-#define PLANE_X 0
-#define PLANE_Y 1
-#define PLANE_Z 2
-
-// 3-5 are non-axial planes snapped to the nearest
-#define PLANE_ANYX 3
-#define PLANE_ANYY 4
-#define PLANE_ANYZ 5
-
-// planes (x&~1) and (x&~1)+1 are allways opposites
-
-typedef struct
-{
- float normal[3];
- float dist;
- int type; // PLANE_X - PLANE_ANYZ ?remove? trivial to regenerate
-} sin_dplane_t;
-
-
-// contents flags are seperate bits
-// a given brush can contribute multiple content bits
-// multiple brushes can be in a single leaf
-
-// these definitions also need to be in q_shared.h!
-
-// lower bits are stronger, and will eat weaker brushes completely
-#ifdef SIN
-#define CONTENTS_FENCE 4
-#endif
-// remaining contents are non-visible, and don't eat brushes
-
-#ifdef SIN
-#define CONTENTS_DUMMYFENCE 0x1000
-#endif
-
-#ifdef SIN
-#define SURF_MASKED 0x2 // surface texture is masked
-#endif
-
-#define SURF_SKY 0x4 // don't draw, but add to skybox
-#define SURF_WARP 0x8 // turbulent water warp
-
-#ifdef SIN
-#define SURF_NONLIT 0x10 // surface is not lit
-#define SURF_NOFILTER 0x20 // surface is not bi-linear filtered
-#endif
-
-#define SURF_FLOWING 0x40 // scroll towards angle
-#define SURF_NODRAW 0x80 // don't bother referencing the texture
-
-#define SURF_HINT 0x100 // make a primary bsp splitter
-#define SURF_SKIP 0x200 // completely ignore, allowing non-closed brushes
-
-#ifdef SIN
-#define SURF_CONVEYOR 0x40 // surface is not lit
-#endif
-
-#ifdef SIN
-#define SURF_WAVY 0x400 // surface has waves
-#define SURF_RICOCHET 0x800 // projectiles bounce literally bounce off this surface
-#define SURF_PRELIT 0x1000 // surface has intensity information for pre-lighting
-#define SURF_MIRROR 0x2000 // surface is a mirror
-#define SURF_CONSOLE 0x4000 // surface is a console
-#define SURF_USECOLOR 0x8000 // surface is lit with non-lit * color
-#define SURF_HARDWAREONLY 0x10000 // surface has been damaged
-#define SURF_DAMAGE 0x20000 // surface can be damaged
-#define SURF_WEAK 0x40000 // surface has weak hit points
-#define SURF_NORMAL 0x80000 // surface has normal hit points
-#define SURF_ADD 0x100000 // surface will be additive
-#define SURF_ENVMAPPED 0x200000 // surface is envmapped
-#define SURF_RANDOMANIMATE 0x400000 // surface start animating on a random frame
-#define SURF_ANIMATE 0x800000 // surface animates
-#define SURF_RNDTIME 0x1000000 // time between animations is random
-#define SURF_TRANSLATE 0x2000000 // surface translates
-#define SURF_NOMERGE 0x4000000 // surface is not merged in csg phase
-#define SURF_TYPE_BIT0 0x8000000 // 0 bit of surface type
-#define SURF_TYPE_BIT1 0x10000000 // 1 bit of surface type
-#define SURF_TYPE_BIT2 0x20000000 // 2 bit of surface type
-#define SURF_TYPE_BIT3 0x40000000 // 3 bit of surface type
-
-#define SURF_START_BIT 27
-#define SURFACETYPE_FROM_FLAGS( x ) ( ( x >> (SURF_START_BIT) ) & 0xf )
-
-
-#define SURF_TYPE_SHIFT(x) ( (x) << (SURF_START_BIT) ) // macro for getting proper bit mask
-
-#define SURF_TYPE_NONE SURF_TYPE_SHIFT(0)
-#define SURF_TYPE_WOOD SURF_TYPE_SHIFT(1)
-#define SURF_TYPE_METAL SURF_TYPE_SHIFT(2)
-#define SURF_TYPE_STONE SURF_TYPE_SHIFT(3)
-#define SURF_TYPE_CONCRETE SURF_TYPE_SHIFT(4)
-#define SURF_TYPE_DIRT SURF_TYPE_SHIFT(5)
-#define SURF_TYPE_FLESH SURF_TYPE_SHIFT(6)
-#define SURF_TYPE_GRILL SURF_TYPE_SHIFT(7)
-#define SURF_TYPE_GLASS SURF_TYPE_SHIFT(8)
-#define SURF_TYPE_FABRIC SURF_TYPE_SHIFT(9)
-#define SURF_TYPE_MONITOR SURF_TYPE_SHIFT(10)
-#define SURF_TYPE_GRAVEL SURF_TYPE_SHIFT(11)
-#define SURF_TYPE_VEGETATION SURF_TYPE_SHIFT(12)
-#define SURF_TYPE_PAPER SURF_TYPE_SHIFT(13)
-#define SURF_TYPE_DUCT SURF_TYPE_SHIFT(14)
-#define SURF_TYPE_WATER SURF_TYPE_SHIFT(15)
-#endif
-
-
-typedef struct
-{
- int planenum;
- int children[2]; // negative numbers are -(leafs+1), not nodes
- short mins[3]; // for frustom culling
- short maxs[3];
- unsigned short firstface;
- unsigned short numfaces; // counting both sides
-} sin_dnode_t;
-
-#ifdef SIN
-
-typedef struct sin_lightvalue_s
-{
- int value; // light emission, etc
- vec3_t color;
- float direct;
- float directangle;
- float directstyle;
- char directstylename[32];
-} sin_lightvalue_t;
-
-typedef struct sin_texinfo_s
-{
- float vecs[2][4]; // [s/t][xyz offset]
- int flags; // miptex flags + overrides
- char texture[64]; // texture name (textures/*.wal)
- int nexttexinfo; // for animations, -1 = end of chain
- float trans_mag;
- int trans_angle;
- int base_angle;
- float animtime;
- float nonlit;
- float translucence;
- float friction;
- float restitution;
- vec3_t color;
- char groupname[32];
-} sin_texinfo_t;
-
-#endif //SIN
-
-// note that edge 0 is never used, because negative edge nums are used for
-// counterclockwise use of the edge in a face
-typedef struct
-{
- unsigned short v[2]; // vertex numbers
-} sin_dedge_t;
-
-#ifdef MAXLIGHTMAPS
-#undef MAXLIGHTMAPS
-#endif
-#define MAXLIGHTMAPS 16
-typedef struct
-{
- unsigned short planenum;
- short side;
-
- int firstedge; // we must support > 64k edges
- short numedges;
- short texinfo;
-
-// lighting info
- byte styles[MAXLIGHTMAPS];
- int lightofs; // start of [numstyles*surfsize] samples
-#ifdef SIN
- int lightinfo;
-#endif
-} sin_dface_t;
-
-typedef struct
-{
- int contents; // OR of all brushes (not needed?)
-
- short cluster;
- short area;
-
- short mins[3]; // for frustum culling
- short maxs[3];
-
- unsigned short firstleafface;
- unsigned short numleaffaces;
-
- unsigned short firstleafbrush;
- unsigned short numleafbrushes;
-} sin_dleaf_t;
-
-typedef struct
-{
- unsigned short planenum; // facing out of the leaf
- short texinfo;
-#ifdef SIN
- int lightinfo;
-#endif
-} sin_dbrushside_t;
-
-typedef struct
-{
- int firstside;
- int numsides;
- int contents;
-} sin_dbrush_t;
-
-#define ANGLE_UP -1
-#define ANGLE_DOWN -2
-
-
-// the visibility lump consists of a header with a count, then
-// byte offsets for the PVS and PHS of each cluster, then the raw
-// compressed bit vectors
-#define DVIS_PVS 0
-#define DVIS_PHS 1
-typedef struct
-{
- int numclusters;
- int bitofs[8][2]; // bitofs[numclusters][2]
-} sin_dvis_t;
-
-// each area has a list of portals that lead into other areas
-// when portals are closed, other areas may not be visible or
-// hearable even if the vis info says that it should be
-typedef struct
-{
- int portalnum;
- int otherarea;
-} sin_dareaportal_t;
-
-typedef struct
-{
- int numareaportals;
- int firstareaportal;
-} sin_darea_t;
+/* +=========================================================================== +Copyright (C) 1999-2005 Id Software, Inc. + +This file is part of Quake III Arena source code. + +Quake III Arena source code is free software; you can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation; either version 2 of the License, +or (at your option) any later version. + +Quake III Arena source code is distributed in the hope that it will be +useful, but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Foobar; if not, write to the Free Software +Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +=========================================================================== +*/ + +/* +============================================================================== + + .BSP file format + +============================================================================== +*/ + +#define SIN + +#define SINBSPVERSION 41 + +// upper design bounds +// leaffaces, leafbrushes, planes, and verts are still bounded by +// 16 bit short limits +#define SIN_MAX_MAP_MODELS 1024 +#define SIN_MAX_MAP_BRUSHES 8192 +#define SIN_MAX_MAP_ENTITIES 2048 +#define SIN_MAX_MAP_ENTSTRING 0x40000 +#define SIN_MAX_MAP_TEXINFO 8192 + +#define SIN_MAX_MAP_AREAS 256 +#define SIN_MAX_MAP_AREAPORTALS 1024 +#define SIN_MAX_MAP_PLANES 65536 +#define SIN_MAX_MAP_NODES 65536 +#define SIN_MAX_MAP_BRUSHSIDES 65536 +#define SIN_MAX_MAP_LEAFS 65536 +#define SIN_MAX_MAP_VERTS 65536 +#define SIN_MAX_MAP_FACES 65536 +#define SIN_MAX_MAP_LEAFFACES 65536 +#define SIN_MAX_MAP_LEAFBRUSHES 65536 +#define SIN_MAX_MAP_PORTALS 65536 +#define SIN_MAX_MAP_EDGES 128000 +#define SIN_MAX_MAP_SURFEDGES 256000 +#define SIN_MAX_MAP_LIGHTING 0x320000 +#define SIN_MAX_MAP_VISIBILITY 0x280000 + +#ifdef SIN +#define SIN_MAX_MAP_LIGHTINFO 8192 +#endif + +#ifdef SIN +#undef SIN_MAX_MAP_LIGHTING //undef the Quake2 bsp version +#define SIN_MAX_MAP_LIGHTING 0x300000 +#endif + +#ifdef SIN +#undef SIN_MAX_MAP_VISIBILITY //undef the Quake2 bsp version +#define SIN_MAX_MAP_VISIBILITY 0x280000 +#endif + +//============================================================================= + +typedef struct +{ + int fileofs, filelen; +} sin_lump_t; + +#define SIN_LUMP_ENTITIES 0 +#define SIN_LUMP_PLANES 1 +#define SIN_LUMP_VERTEXES 2 +#define SIN_LUMP_VISIBILITY 3 +#define SIN_LUMP_NODES 4 +#define SIN_LUMP_TEXINFO 5 +#define SIN_LUMP_FACES 6 +#define SIN_LUMP_LIGHTING 7 +#define SIN_LUMP_LEAFS 8 +#define SIN_LUMP_LEAFFACES 9 +#define SIN_LUMP_LEAFBRUSHES 10 +#define SIN_LUMP_EDGES 11 +#define SIN_LUMP_SURFEDGES 12 +#define SIN_LUMP_MODELS 13 +#define SIN_LUMP_BRUSHES 14 +#define SIN_LUMP_BRUSHSIDES 15 +#define SIN_LUMP_POP 16 +#define SIN_LUMP_AREAS 17 +#define SIN_LUMP_AREAPORTALS 18 + +#ifdef SIN +#define SIN_LUMP_LIGHTINFO 19 +#define SINHEADER_LUMPS 20 +#endif + +typedef struct +{ + int ident; + int version; + sin_lump_t lumps[SINHEADER_LUMPS]; +} sin_dheader_t; + +typedef struct +{ + float mins[3], maxs[3]; + float origin[3]; // for sounds or lights + int headnode; + int firstface, numfaces; // submodels just draw faces + // without walking the bsp tree +} sin_dmodel_t; + +typedef struct +{ + float point[3]; +} sin_dvertex_t; + + +// 0-2 are axial planes +#define PLANE_X 0 +#define PLANE_Y 1 +#define PLANE_Z 2 + +// 3-5 are non-axial planes snapped to the nearest +#define PLANE_ANYX 3 +#define PLANE_ANYY 4 +#define PLANE_ANYZ 5 + +// planes (x&~1) and (x&~1)+1 are allways opposites + +typedef struct +{ + float normal[3]; + float dist; + int type; // PLANE_X - PLANE_ANYZ ?remove? trivial to regenerate +} sin_dplane_t; + + +// contents flags are seperate bits +// a given brush can contribute multiple content bits +// multiple brushes can be in a single leaf + +// these definitions also need to be in q_shared.h! + +// lower bits are stronger, and will eat weaker brushes completely +#ifdef SIN +#define CONTENTS_FENCE 4 +#endif +// remaining contents are non-visible, and don't eat brushes + +#ifdef SIN +#define CONTENTS_DUMMYFENCE 0x1000 +#endif + +#ifdef SIN +#define SURF_MASKED 0x2 // surface texture is masked +#endif + +#define SURF_SKY 0x4 // don't draw, but add to skybox +#define SURF_WARP 0x8 // turbulent water warp + +#ifdef SIN +#define SURF_NONLIT 0x10 // surface is not lit +#define SURF_NOFILTER 0x20 // surface is not bi-linear filtered +#endif + +#define SURF_FLOWING 0x40 // scroll towards angle +#define SURF_NODRAW 0x80 // don't bother referencing the texture + +#define SURF_HINT 0x100 // make a primary bsp splitter +#define SURF_SKIP 0x200 // completely ignore, allowing non-closed brushes + +#ifdef SIN +#define SURF_CONVEYOR 0x40 // surface is not lit +#endif + +#ifdef SIN +#define SURF_WAVY 0x400 // surface has waves +#define SURF_RICOCHET 0x800 // projectiles bounce literally bounce off this surface +#define SURF_PRELIT 0x1000 // surface has intensity information for pre-lighting +#define SURF_MIRROR 0x2000 // surface is a mirror +#define SURF_CONSOLE 0x4000 // surface is a console +#define SURF_USECOLOR 0x8000 // surface is lit with non-lit * color +#define SURF_HARDWAREONLY 0x10000 // surface has been damaged +#define SURF_DAMAGE 0x20000 // surface can be damaged +#define SURF_WEAK 0x40000 // surface has weak hit points +#define SURF_NORMAL 0x80000 // surface has normal hit points +#define SURF_ADD 0x100000 // surface will be additive +#define SURF_ENVMAPPED 0x200000 // surface is envmapped +#define SURF_RANDOMANIMATE 0x400000 // surface start animating on a random frame +#define SURF_ANIMATE 0x800000 // surface animates +#define SURF_RNDTIME 0x1000000 // time between animations is random +#define SURF_TRANSLATE 0x2000000 // surface translates +#define SURF_NOMERGE 0x4000000 // surface is not merged in csg phase +#define SURF_TYPE_BIT0 0x8000000 // 0 bit of surface type +#define SURF_TYPE_BIT1 0x10000000 // 1 bit of surface type +#define SURF_TYPE_BIT2 0x20000000 // 2 bit of surface type +#define SURF_TYPE_BIT3 0x40000000 // 3 bit of surface type + +#define SURF_START_BIT 27 +#define SURFACETYPE_FROM_FLAGS( x ) ( ( x >> (SURF_START_BIT) ) & 0xf ) + + +#define SURF_TYPE_SHIFT(x) ( (x) << (SURF_START_BIT) ) // macro for getting proper bit mask + +#define SURF_TYPE_NONE SURF_TYPE_SHIFT(0) +#define SURF_TYPE_WOOD SURF_TYPE_SHIFT(1) +#define SURF_TYPE_METAL SURF_TYPE_SHIFT(2) +#define SURF_TYPE_STONE SURF_TYPE_SHIFT(3) +#define SURF_TYPE_CONCRETE SURF_TYPE_SHIFT(4) +#define SURF_TYPE_DIRT SURF_TYPE_SHIFT(5) +#define SURF_TYPE_FLESH SURF_TYPE_SHIFT(6) +#define SURF_TYPE_GRILL SURF_TYPE_SHIFT(7) +#define SURF_TYPE_GLASS SURF_TYPE_SHIFT(8) +#define SURF_TYPE_FABRIC SURF_TYPE_SHIFT(9) +#define SURF_TYPE_MONITOR SURF_TYPE_SHIFT(10) +#define SURF_TYPE_GRAVEL SURF_TYPE_SHIFT(11) +#define SURF_TYPE_VEGETATION SURF_TYPE_SHIFT(12) +#define SURF_TYPE_PAPER SURF_TYPE_SHIFT(13) +#define SURF_TYPE_DUCT SURF_TYPE_SHIFT(14) +#define SURF_TYPE_WATER SURF_TYPE_SHIFT(15) +#endif + + +typedef struct +{ + int planenum; + int children[2]; // negative numbers are -(leafs+1), not nodes + short mins[3]; // for frustom culling + short maxs[3]; + unsigned short firstface; + unsigned short numfaces; // counting both sides +} sin_dnode_t; + +#ifdef SIN + +typedef struct sin_lightvalue_s +{ + int value; // light emission, etc + vec3_t color; + float direct; + float directangle; + float directstyle; + char directstylename[32]; +} sin_lightvalue_t; + +typedef struct sin_texinfo_s +{ + float vecs[2][4]; // [s/t][xyz offset] + int flags; // miptex flags + overrides + char texture[64]; // texture name (textures/*.wal) + int nexttexinfo; // for animations, -1 = end of chain + float trans_mag; + int trans_angle; + int base_angle; + float animtime; + float nonlit; + float translucence; + float friction; + float restitution; + vec3_t color; + char groupname[32]; +} sin_texinfo_t; + +#endif //SIN + +// note that edge 0 is never used, because negative edge nums are used for +// counterclockwise use of the edge in a face +typedef struct +{ + unsigned short v[2]; // vertex numbers +} sin_dedge_t; + +#ifdef MAXLIGHTMAPS +#undef MAXLIGHTMAPS +#endif +#define MAXLIGHTMAPS 16 +typedef struct +{ + unsigned short planenum; + short side; + + int firstedge; // we must support > 64k edges + short numedges; + short texinfo; + +// lighting info + byte styles[MAXLIGHTMAPS]; + int lightofs; // start of [numstyles*surfsize] samples +#ifdef SIN + int lightinfo; +#endif +} sin_dface_t; + +typedef struct +{ + int contents; // OR of all brushes (not needed?) + + short cluster; + short area; + + short mins[3]; // for frustum culling + short maxs[3]; + + unsigned short firstleafface; + unsigned short numleaffaces; + + unsigned short firstleafbrush; + unsigned short numleafbrushes; +} sin_dleaf_t; + +typedef struct +{ + unsigned short planenum; // facing out of the leaf + short texinfo; +#ifdef SIN + int lightinfo; +#endif +} sin_dbrushside_t; + +typedef struct +{ + int firstside; + int numsides; + int contents; +} sin_dbrush_t; + +#define ANGLE_UP -1 +#define ANGLE_DOWN -2 + + +// the visibility lump consists of a header with a count, then +// byte offsets for the PVS and PHS of each cluster, then the raw +// compressed bit vectors +#define DVIS_PVS 0 +#define DVIS_PHS 1 +typedef struct +{ + int numclusters; + int bitofs[8][2]; // bitofs[numclusters][2] +} sin_dvis_t; + +// each area has a list of portals that lead into other areas +// when portals are closed, other areas may not be visible or +// hearable even if the vis info says that it should be +typedef struct +{ + int portalnum; + int otherarea; +} sin_dareaportal_t; + +typedef struct +{ + int numareaportals; + int firstareaportal; +} sin_darea_t; |