quakeforge/tools/qfbsp/include/map.h
2010-10-13 20:52:06 +09:00

121 lines
3.4 KiB
C

/*
Copyright (C) 1996-1997 Id Software, Inc.
This program 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.
This program 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 this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
See file, 'COPYING', for details.
$Id$
*/
#ifndef qfbsp_map_h
#define qfbsp_map_h
#include "bsp5.h"
#define MAX_FACES 256
typedef struct mface_s {
struct mface_s *next;
plane_t plane;
int texinfo;
} mface_t;
typedef struct mbrush_s {
struct mbrush_s *next;
mface_t *faces;
qboolean detail; ///< true if brush is detail brush
} mbrush_t;
typedef struct epair_s {
struct epair_s *next;
char *key;
char *value;
} epair_t;
/** In-memory representation of an entity as parsed from the map script.
*/
typedef struct {
vec3_t origin; ///< Location of this entity in world-space.
mbrush_t *brushes; ///< Nul terminated list of brushes.
epair_t *epairs; ///< Nul terminated list of key=value pairs.
} entity_t;
extern int nummapbrushes;
extern mbrush_t mapbrushes[MAX_MAP_BRUSHES];
extern int num_entities;
extern entity_t entities[MAX_MAP_ENTITIES];
extern int nummiptex;
extern char miptex[MAX_MAP_TEXINFO][16];
/** Load and parse the map script.
Fills in the ::mapbrushes, ::entities and ::miptex arrays.
\param filename Path of the map script to parse.
*/
void LoadMapFile (const char *filename);
/** Allocate a miptex handle for the named miptex.
If the a miptex with the same name already exists, the previous handle
will be returned. \c hint and \c skip textures are handled specially,
returning \c TEX_HINT and \c TEX_SKIP respectively.
\param name The name of the texture.
\return The handle for the texture.
*/
int FindMiptex (const char *name);
/** Dump an entity's data to stdout.
\param ent The entity to dump.
*/
void PrintEntity (entity_t *ent);
/** Get the value for the specified key from an entity.
\param ent The entity from which to fetch the value.
\param key The key for which to fetch the value.
\return The value for the key, or the empty string if the key
does not exist in this entity.
*/
const char *ValueForKey (entity_t *ent, const char *key);
/** Set the value of the entity's key.
If the key does not exist, one will be added.
\param ent The entity owning the key.
\param key The key to set.
\param value The value to which the key is to be set.
*/
void SetKeyValue (entity_t *ent, const char *key, const char *value);
/** Parse a vector value from an entity's key.
\param ent The entity from which to fetch the key.
\param key The key of wich to parse the vector value.
\param vec The destination of the vector value.
*/
void GetVectorForKey (entity_t *ent, const char *key, vec3_t vec);
/** Write all valid entities to the bsp file.
Writes all entities that still have \c key=value pairs to the bsp file.
Only the key=value pairs are written: any brush data is left out.
*/
void WriteEntitiesToString (void);
#endif//qfbsp_map_h