mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-24 13:21:20 +00:00
b533594a33
Add absolute Z height flag for mapthings in UDMF See merge request STJr/SRB2!2015
228 lines
5.4 KiB
C
228 lines
5.4 KiB
C
// SONIC ROBO BLAST 2
|
|
//-----------------------------------------------------------------------------
|
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
|
// Copyright (C) 1999-2023 by Sonic Team Junior.
|
|
//
|
|
// This program is free software distributed under the
|
|
// terms of the GNU General Public License, version 2.
|
|
// See the 'LICENSE' file for more details.
|
|
//-----------------------------------------------------------------------------
|
|
/// \file doomdata.h
|
|
/// \brief all external data is defined here
|
|
///
|
|
/// most of the data is loaded into different structures at run time
|
|
/// some internal structures shared by many modules are here
|
|
|
|
#ifndef __DOOMDATA__
|
|
#define __DOOMDATA__
|
|
|
|
// The most basic types we use, portability.
|
|
#include "doomtype.h"
|
|
|
|
// Some global defines, that configure the game.
|
|
#include "doomdef.h"
|
|
|
|
#include "taglist.h"
|
|
#include "m_fixed.h" // See the mapthing_t scale.
|
|
|
|
//
|
|
// Map level types.
|
|
// The following data structures define the persistent format
|
|
// used in the lumps of the WAD files.
|
|
//
|
|
|
|
// Lump order in a map WAD: each map needs a couple of lumps
|
|
// to provide a complete scene geometry description.
|
|
enum
|
|
{
|
|
ML_LABEL, // A separator, name, MAPxx
|
|
ML_THINGS, // Enemies, rings, monitors, scenery, etc.
|
|
ML_LINEDEFS, // Linedefs, from editing
|
|
ML_SIDEDEFS, // Sidedefs, from editing
|
|
ML_VERTEXES, // Vertices, edited and BSP splits generated
|
|
ML_SEGS, // Linesegs, from linedefs split by BSP
|
|
ML_SSECTORS, // Subsectors, list of linesegs
|
|
ML_NODES, // BSP nodes
|
|
ML_SECTORS, // Sectors, from editing
|
|
ML_REJECT, // LUT, sector-sector visibility
|
|
ML_BLOCKMAP, // LUT, motion clipping, walls/grid element
|
|
};
|
|
|
|
// Extra flag for objects.
|
|
#define MTF_EXTRA 1
|
|
|
|
// Reverse gravity flag for objects.
|
|
#define MTF_OBJECTFLIP 2
|
|
|
|
// Special flag used with certain objects.
|
|
#define MTF_OBJECTSPECIAL 4
|
|
|
|
// Deaf monsters/do not react to sound.
|
|
#define MTF_AMBUSH 8
|
|
|
|
// Do not use bit five or after, as they are used for object z-offsets.
|
|
// Unless it's exclusive to UDMF.
|
|
|
|
// Flag to use Z as absolute spawn height, ignoring the floor and ceiling.
|
|
#define MTF_ABSOLUTEZ 16
|
|
|
|
#if defined(_MSC_VER)
|
|
#pragma pack(1)
|
|
#endif
|
|
|
|
// A single Vertex.
|
|
typedef struct
|
|
{
|
|
INT16 x, y;
|
|
}ATTRPACK mapvertex_t;
|
|
|
|
// A SideDef, defining the visual appearance of a wall,
|
|
// by setting textures and offsets.
|
|
typedef struct
|
|
{
|
|
INT16 textureoffset, rowoffset;
|
|
char toptexture[8], bottomtexture[8], midtexture[8];
|
|
// Front sector, towards viewer.
|
|
INT16 sector;
|
|
} ATTRPACK mapsidedef_t;
|
|
|
|
// A LineDef, as used for editing, and as input
|
|
// to the BSP builder.
|
|
typedef struct
|
|
{
|
|
INT16 v1, v2;
|
|
INT16 flags;
|
|
INT16 special;
|
|
INT16 tag;
|
|
// sidenum[1] will be 0xffff if one sided
|
|
UINT16 sidenum[2];
|
|
} ATTRPACK maplinedef_t;
|
|
|
|
//
|
|
// LineDef attributes.
|
|
//
|
|
|
|
// Solid, is an obstacle.
|
|
#define ML_IMPASSIBLE 1
|
|
|
|
// Blocks monsters only.
|
|
#define ML_BLOCKMONSTERS 2
|
|
|
|
// Backside will not be present at all if not two sided.
|
|
#define ML_TWOSIDED 4
|
|
|
|
// If a texture is pegged, the texture will have
|
|
// the end exposed to air held constant at the
|
|
// top or bottom of the texture (stairs or pulled
|
|
// down things) and will move with a height change
|
|
// of one of the neighbor sectors.
|
|
// Unpegged textures allways have the first row of
|
|
// the texture at the top pixel of the line for both
|
|
// top and bottom textures (use next to windows).
|
|
|
|
// upper texture unpegged
|
|
#define ML_DONTPEGTOP 8
|
|
|
|
// lower texture unpegged
|
|
#define ML_DONTPEGBOTTOM 16
|
|
|
|
#define ML_SKEWTD 32
|
|
|
|
// Don't let Knuckles climb on this line
|
|
#define ML_NOCLIMB 64
|
|
|
|
#define ML_NOSKEW 128
|
|
#define ML_MIDPEG 256
|
|
#define ML_MIDSOLID 512
|
|
#define ML_WRAPMIDTEX 1024
|
|
|
|
#define ML_NETONLY 2048 // Apply effect only in netgames
|
|
#define ML_NONET 4096 // Apply effect only in single player games
|
|
#define ML_EFFECT6 8192
|
|
|
|
// Bounce off walls!
|
|
#define ML_BOUNCY 16384
|
|
|
|
#define ML_TFERLINE 32768
|
|
|
|
// Sector definition, from editing.
|
|
typedef struct
|
|
{
|
|
INT16 floorheight;
|
|
INT16 ceilingheight;
|
|
char floorpic[8];
|
|
char ceilingpic[8];
|
|
INT16 lightlevel;
|
|
INT16 special;
|
|
INT16 tag;
|
|
} ATTRPACK mapsector_t;
|
|
|
|
// SubSector, as generated by BSP.
|
|
typedef struct
|
|
{
|
|
UINT16 numsegs;
|
|
// Index of first one, segs are stored sequentially.
|
|
UINT16 firstseg;
|
|
} ATTRPACK mapsubsector_t;
|
|
|
|
|
|
// LineSeg, generated by splitting LineDefs
|
|
// using partition lines selected by BSP builder.
|
|
typedef struct
|
|
{
|
|
INT16 v1, v2;
|
|
INT16 angle;
|
|
INT16 linedef;
|
|
INT16 side;
|
|
INT16 offset;
|
|
} ATTRPACK mapseg_t;
|
|
|
|
// BSP node structure.
|
|
|
|
// Indicate a leaf.
|
|
#define NF_SUBSECTOR 0x8000
|
|
|
|
typedef struct
|
|
{
|
|
// Partition line from (x,y) to x+dx,y+dy)
|
|
INT16 x, y;
|
|
INT16 dx, dy;
|
|
|
|
// Bounding box for each child, clip against view frustum.
|
|
INT16 bbox[2][4];
|
|
|
|
// If NF_SUBSECTOR it's a subsector, else it's a node of another subtree.
|
|
UINT16 children[2];
|
|
} ATTRPACK mapnode_t;
|
|
|
|
#if defined(_MSC_VER)
|
|
#pragma pack()
|
|
#endif
|
|
|
|
#define NUMMAPTHINGARGS 10
|
|
#define NUMMAPTHINGSTRINGARGS 2
|
|
|
|
// Thing definition, position, orientation and type,
|
|
// plus visibility flags and attributes.
|
|
typedef struct
|
|
{
|
|
INT16 x, y;
|
|
INT16 angle, pitch, roll;
|
|
UINT16 type;
|
|
UINT16 options;
|
|
INT16 z;
|
|
UINT8 extrainfo;
|
|
taglist_t tags;
|
|
fixed_t scale;
|
|
fixed_t spritexscale, spriteyscale;
|
|
INT32 args[NUMMAPTHINGARGS];
|
|
char *stringargs[NUMMAPTHINGSTRINGARGS];
|
|
struct mobj_s *mobj;
|
|
} mapthing_t;
|
|
|
|
#define ZSHIFT 4
|
|
|
|
#define NUMMAPS 1035
|
|
|
|
#endif // __DOOMDATA__
|