ddnet/src/game/mapitems.h

501 lines
8.3 KiB
C
Raw Normal View History

2010-11-20 10:37:14 +00:00
/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
/* If you are missing that file, acquire a complete release at teeworlds.com. */
2010-05-29 07:25:38 +00:00
#ifndef GAME_MAPITEMS_H
#define GAME_MAPITEMS_H
#include <base/vmath.h>
2010-05-29 07:25:38 +00:00
// layer types
enum
{
2020-09-14 14:00:32 +00:00
LAYERTYPE_INVALID = 0,
LAYERTYPE_GAME, // unused
2010-05-29 07:25:38 +00:00
LAYERTYPE_TILES,
LAYERTYPE_QUADS,
LAYERTYPE_FRONT,
LAYERTYPE_TELE,
LAYERTYPE_SPEEDUP,
LAYERTYPE_SWITCH,
LAYERTYPE_TUNE,
LAYERTYPE_SOUNDS_DEPRECATED, // deprecated! do not use this, this is just for compatibility reasons
2014-10-08 15:33:06 +00:00
LAYERTYPE_SOUNDS,
2020-09-14 14:00:32 +00:00
MAPITEMTYPE_VERSION = 0,
2010-05-29 07:25:38 +00:00
MAPITEMTYPE_INFO,
MAPITEMTYPE_IMAGE,
MAPITEMTYPE_ENVELOPE,
MAPITEMTYPE_GROUP,
MAPITEMTYPE_LAYER,
MAPITEMTYPE_ENVPOINTS,
2014-10-11 11:38:08 +00:00
MAPITEMTYPE_SOUND,
// High map item type numbers suggest that they use the alternate
// format with UUIDs. See src/engine/shared/datafile.cpp for some of
// the implementation.
2020-09-14 14:00:32 +00:00
CURVETYPE_STEP = 0,
2010-05-29 07:25:38 +00:00
CURVETYPE_LINEAR,
CURVETYPE_SLOW,
CURVETYPE_FAST,
CURVETYPE_SMOOTH,
NUM_CURVETYPES,
2010-05-29 07:25:38 +00:00
// game layer tiles
// TODO define which Layer uses which tiles (needed for mapeditor)
2020-09-14 14:00:32 +00:00
ENTITY_NULL = 0,
2010-05-29 07:25:38 +00:00
ENTITY_SPAWN,
ENTITY_SPAWN_RED,
ENTITY_SPAWN_BLUE,
ENTITY_FLAGSTAND_RED,
ENTITY_FLAGSTAND_BLUE,
ENTITY_ARMOR_1,
ENTITY_HEALTH_1,
ENTITY_WEAPON_SHOTGUN,
ENTITY_WEAPON_GRENADE,
ENTITY_POWERUP_NINJA,
ENTITY_WEAPON_LASER,
//DDRace - Main Lasers
ENTITY_LASER_FAST_CCW,
ENTITY_LASER_NORMAL_CCW,
ENTITY_LASER_SLOW_CCW,
ENTITY_LASER_STOP,
ENTITY_LASER_SLOW_CW,
ENTITY_LASER_NORMAL_CW,
ENTITY_LASER_FAST_CW,
//DDRace - Laser Modifiers
ENTITY_LASER_SHORT,
ENTITY_LASER_MEDIUM,
ENTITY_LASER_LONG,
ENTITY_LASER_C_SLOW,
ENTITY_LASER_C_NORMAL,
ENTITY_LASER_C_FAST,
ENTITY_LASER_O_SLOW,
ENTITY_LASER_O_NORMAL,
ENTITY_LASER_O_FAST,
2010-08-12 11:30:46 +00:00
//DDRace - Plasma
2020-09-14 14:00:32 +00:00
ENTITY_PLASMAE = 29,
2010-08-12 11:30:46 +00:00
ENTITY_PLASMAF,
ENTITY_PLASMA,
ENTITY_PLASMAU,
//DDRace - Shotgun
2010-11-01 01:51:17 +00:00
ENTITY_CRAZY_SHOTGUN_EX,
ENTITY_CRAZY_SHOTGUN,
//DDNet - Removing specific weapon
ENTITY_ARMOR_SHOTGUN,
ENTITY_ARMOR_GRENADE,
ENTITY_ARMOR_NINJA,
ENTITY_ARMOR_LASER,
2010-08-12 11:30:46 +00:00
//DDRace - Draggers
2020-09-14 14:00:32 +00:00
ENTITY_DRAGGER_WEAK = 42,
2010-08-12 11:30:46 +00:00
ENTITY_DRAGGER_NORMAL,
ENTITY_DRAGGER_STRONG,
//Draggers Behind Walls
ENTITY_DRAGGER_WEAK_NW,
ENTITY_DRAGGER_NORMAL_NW,
ENTITY_DRAGGER_STRONG_NW,
//Doors
2020-09-14 14:00:32 +00:00
ENTITY_DOOR = 49,
//End Of Lower Tiles
2010-05-29 07:25:38 +00:00
NUM_ENTITIES,
//Start From Top Left
//Tile Controllers
2020-09-14 14:00:32 +00:00
TILE_AIR = 0,
2010-05-29 07:25:38 +00:00
TILE_SOLID,
TILE_DEATH,
TILE_NOHOOK,
TILE_NOLASER,
TILE_THROUGH_CUT,
TILE_THROUGH,
TILE_JUMP,
2010-11-01 01:51:17 +00:00
TILE_FREEZE = 9,
TILE_TELEINEVIL,
TILE_UNFREEZE,
2011-01-14 13:37:02 +00:00
TILE_DFREEZE,
TILE_DUNFREEZE,
2013-08-13 02:59:25 +00:00
TILE_TELEINWEAPON,
TILE_TELEINHOOK,
2014-06-21 16:14:22 +00:00
TILE_WALLJUMP = 16,
2020-09-13 20:00:49 +00:00
TILE_EHOOK_ENABLE,
TILE_EHOOK_DISABLE,
TILE_HIT_ENABLE,
TILE_HIT_DISABLE,
TILE_SOLO_ENABLE,
TILE_SOLO_DISABLE,
//Switches
2010-11-22 20:43:22 +00:00
TILE_SWITCHTIMEDOPEN = 22,
TILE_SWITCHTIMEDCLOSE,
TILE_SWITCHOPEN,
TILE_SWITCHCLOSE,
TILE_TELEIN,
TILE_TELEOUT,
TILE_BOOST,
TILE_TELECHECK,
TILE_TELECHECKOUT,
TILE_TELECHECKIN,
TILE_REFILL_JUMPS = 32,
2020-09-13 20:00:49 +00:00
TILE_START,
TILE_FINISH,
TILE_TIME_CHECKPOINT_FIRST = 35,
TILE_TIME_CHECKPOINT_LAST = 59,
2010-11-01 01:51:17 +00:00
TILE_STOP = 60,
TILE_STOPS,
TILE_STOPA,
2015-11-12 18:46:27 +00:00
TILE_TELECHECKINEVIL,
TILE_CP,
2010-11-01 01:51:17 +00:00
TILE_CP_F,
2015-11-12 18:46:27 +00:00
TILE_THROUGH_ALL,
TILE_THROUGH_DIR,
2020-09-13 20:00:49 +00:00
TILE_TUNE,
2010-12-01 22:45:04 +00:00
TILE_OLDLASER = 71,
TILE_NPC,
TILE_EHOOK,
TILE_NOHIT,
TILE_NPH,
TILE_UNLOCK_TEAM,
2020-09-13 20:00:49 +00:00
TILE_ADD_TIME = 79,
TILE_NPC_DISABLE = 88,
TILE_UNLIMITED_JUMPS_DISABLE,
TILE_JETPACK_DISABLE,
TILE_NPH_DISABLE,
2021-02-01 13:55:26 +00:00
TILE_SUBTRACT_TIME = 95,
2018-02-14 15:27:26 +00:00
TILE_TELE_GUN_ENABLE = 96,
TILE_TELE_GUN_DISABLE = 97,
2018-10-26 13:55:35 +00:00
TILE_ALLOW_TELE_GUN = 98,
2018-11-02 23:02:20 +00:00
TILE_ALLOW_BLUE_TELE_GUN = 99,
2020-09-13 20:00:49 +00:00
TILE_NPC_ENABLE = 104,
TILE_UNLIMITED_JUMPS_ENABLE,
TILE_JETPACK_ENABLE,
TILE_NPH_ENABLE,
2018-02-14 15:27:26 +00:00
TILE_TELE_GRENADE_ENABLE = 112,
TILE_TELE_GRENADE_DISABLE = 113,
TILE_TELE_LASER_ENABLE = 128,
TILE_TELE_LASER_DISABLE = 129,
TILE_CREDITS_1 = 140,
TILE_CREDITS_2 = 141,
TILE_CREDITS_3 = 142,
TILE_CREDITS_4 = 143,
TILE_LFREEZE = 144,
TILE_LUNFREEZE = 145,
TILE_CREDITS_5 = 156,
TILE_CREDITS_6 = 157,
TILE_CREDITS_7 = 158,
TILE_CREDITS_8 = 159,
TILE_ENTITIES_OFF_1 = 190,
TILE_ENTITIES_OFF_2,
//End of higher tiles
//Layers
2020-09-14 14:00:32 +00:00
LAYER_GAME = 0,
LAYER_FRONT,
LAYER_TELE,
LAYER_SPEEDUP,
LAYER_SWITCH,
LAYER_TUNE,
NUM_LAYERS,
//Flags
TILEFLAG_XFLIP = 1,
TILEFLAG_YFLIP = 2,
2020-09-14 14:00:32 +00:00
TILEFLAG_OPAQUE = 4,
TILEFLAG_ROTATE = 8,
//Rotation
ROTATION_0 = 0,
ROTATION_90 = TILEFLAG_ROTATE,
ROTATION_180 = (TILEFLAG_XFLIP | TILEFLAG_YFLIP),
ROTATION_270 = (TILEFLAG_XFLIP | TILEFLAG_YFLIP | TILEFLAG_ROTATE),
2020-09-14 14:00:32 +00:00
LAYERFLAG_DETAIL = 1,
TILESLAYERFLAG_GAME = 1,
TILESLAYERFLAG_TELE = 2,
TILESLAYERFLAG_SPEEDUP = 4,
TILESLAYERFLAG_FRONT = 8,
TILESLAYERFLAG_SWITCH = 16,
TILESLAYERFLAG_TUNE = 32,
2020-09-14 14:00:32 +00:00
ENTITY_OFFSET = 255 - 16 * 4,
2010-05-29 07:25:38 +00:00
};
typedef ivec2 CPoint; // 22.10 fixed point
typedef ivec4 CColor;
2010-05-29 07:25:38 +00:00
struct CQuad
{
CPoint m_aPoints[5];
CColor m_aColors[4];
CPoint m_aTexcoords[4];
2010-05-29 07:25:38 +00:00
int m_PosEnv;
int m_PosEnvOffset;
2010-05-29 07:25:38 +00:00
int m_ColorEnv;
int m_ColorEnvOffset;
};
class CTile
2010-05-29 07:25:38 +00:00
{
2010-07-05 19:04:19 +00:00
public:
2010-05-29 07:25:38 +00:00
unsigned char m_Index;
unsigned char m_Flags;
unsigned char m_Skip;
unsigned char m_Reserved;
};
2011-07-12 21:31:39 +00:00
struct CMapItemInfo
{
int m_Version;
int m_Author;
int m_MapVersion;
int m_Credits;
int m_License;
};
2011-07-12 21:31:39 +00:00
struct CMapItemInfoSettings : CMapItemInfo
{
int m_Settings;
};
2010-05-29 07:25:38 +00:00
struct CMapItemImage
{
int m_Version;
int m_Width;
int m_Height;
int m_External;
int m_ImageName;
int m_ImageData;
};
2010-05-29 07:25:38 +00:00
struct CMapItemGroup_v1
{
int m_Version;
int m_OffsetX;
int m_OffsetY;
int m_ParallaxX;
int m_ParallaxY;
int m_StartLayer;
int m_NumLayers;
};
2010-05-29 07:25:38 +00:00
struct CMapItemGroup : public CMapItemGroup_v1
{
enum
{
CURRENT_VERSION = 3
};
2010-05-29 07:25:38 +00:00
int m_UseClipping;
int m_ClipX;
int m_ClipY;
int m_ClipW;
int m_ClipH;
2011-07-12 01:14:46 +00:00
int m_aName[3];
};
2010-05-29 07:25:38 +00:00
struct CMapItemLayer
{
int m_Version;
int m_Type;
int m_Flags;
};
2010-05-29 07:25:38 +00:00
struct CMapItemLayerTilemap
{
CMapItemLayer m_Layer;
int m_Version;
2010-05-29 07:25:38 +00:00
int m_Width;
int m_Height;
int m_Flags;
2010-05-29 07:25:38 +00:00
CColor m_Color;
int m_ColorEnv;
int m_ColorEnvOffset;
2010-05-29 07:25:38 +00:00
int m_Image;
int m_Data;
int m_aName[3];
// DDRace
int m_Tele;
int m_Speedup;
int m_Front;
int m_Switch;
int m_Tune;
};
2010-05-29 07:25:38 +00:00
struct CMapItemLayerQuads
{
CMapItemLayer m_Layer;
int m_Version;
2010-05-29 07:25:38 +00:00
int m_NumQuads;
int m_Data;
int m_Image;
2011-07-12 01:14:46 +00:00
int m_aName[3];
};
2010-05-29 07:25:38 +00:00
struct CMapItemVersion
{
int m_Version;
};
2010-05-29 07:25:38 +00:00
struct CEnvPoint
{
2023-01-24 19:11:33 +00:00
enum
{
MAX_CHANNELS = 4,
};
2010-05-29 07:25:38 +00:00
int m_Time; // in ms
int m_Curvetype;
2023-01-24 19:11:33 +00:00
int m_aValues[MAX_CHANNELS]; // 1-4 depending on envelope (22.10 fixed point)
2020-10-08 05:28:53 +00:00
bool operator<(const CEnvPoint &Other) const { return m_Time < Other.m_Time; }
};
2010-05-29 07:25:38 +00:00
struct CMapItemEnvelope_v1
2010-05-29 07:25:38 +00:00
{
int m_Version;
int m_Channels;
int m_StartPoint;
int m_NumPoints;
int m_aName[8];
};
2010-05-29 07:25:38 +00:00
struct CMapItemEnvelope : public CMapItemEnvelope_v1
{
enum
{
CURRENT_VERSION = 2
};
int m_Synchronized;
};
struct CSoundShape
{
enum
{
SHAPE_RECTANGLE = 0,
SHAPE_CIRCLE,
NUM_SHAPES,
};
struct CRectangle
{
int m_Width, m_Height; // fxp 22.10
};
struct CCircle
{
2014-11-28 19:01:25 +00:00
int m_Radius;
};
int m_Type;
union
{
CRectangle m_Rectangle;
CCircle m_Circle;
};
};
2014-10-09 10:44:03 +00:00
struct CSoundSource
{
CPoint m_Position;
int m_Loop;
int m_Pan; // 0 - no panning, 1 - panning
2014-10-10 17:50:39 +00:00
int m_TimeDelay; // in s
int m_Falloff; // [0,255] // 0 - No falloff, 255 - full
2014-10-11 14:05:36 +00:00
int m_PosEnv;
int m_PosEnvOffset;
2014-10-11 14:05:36 +00:00
int m_SoundEnv;
int m_SoundEnvOffset;
CSoundShape m_Shape;
2014-10-09 10:44:03 +00:00
};
struct CMapItemLayerSounds
{
enum
{
CURRENT_VERSION = 2
};
CMapItemLayer m_Layer;
int m_Version;
2014-10-09 10:44:03 +00:00
int m_NumSources;
int m_Data;
int m_Sound;
int m_aName[3];
};
2014-10-11 11:38:08 +00:00
struct CMapItemSound
{
int m_Version;
int m_External;
int m_SoundName;
int m_SoundData;
2014-10-11 12:50:16 +00:00
int m_SoundDataSize;
};
2014-10-11 11:38:08 +00:00
2011-12-09 22:00:40 +00:00
// DDRace
class CTeleTile
{
public:
unsigned char m_Number;
unsigned char m_Type;
};
class CSpeedupTile
{
public:
unsigned char m_Force;
unsigned char m_MaxSpeed;
unsigned char m_Type;
short m_Angle;
};
class CSwitchTile
{
public:
unsigned char m_Number;
unsigned char m_Type;
unsigned char m_Flags;
unsigned char m_Delay;
};
class CDoorTile
{
public:
unsigned char m_Index;
unsigned char m_Flags;
int m_Number;
};
class CTuneTile
{
public:
unsigned char m_Number;
unsigned char m_Type;
};
bool IsValidGameTile(int Index);
bool IsValidFrontTile(int Index);
bool IsValidTeleTile(int Index);
bool IsTeleTileNumberUsed(int Index); // Assumes that Index is a valid tele tile index
bool IsValidSpeedupTile(int Index);
bool IsValidSwitchTile(int Index);
bool IsValidTuneTile(int Index);
bool IsValidEntity(int Index);
bool IsRotatableTile(int Index);
2020-09-08 13:11:32 +00:00
bool IsCreditsTile(int TileIndex);
#endif