ddnet/src/game/g_protocol.h

204 lines
2.9 KiB
C
Raw Normal View History

2007-11-25 19:42:40 +00:00
/* copyright (c) 2007 magnus auvinen, see licence.txt for more info */
2007-08-22 21:13:33 +00:00
// NOTE: Be very careful when editing this file as it will change the network version
2008-01-12 17:09:00 +00:00
#ifndef GAME_PROTOCOL_H
#define GAME_PROTOCOL_H
2007-08-22 21:13:33 +00:00
// Network stuff
enum
{
OBJTYPE_NULL=0,
OBJTYPE_GAME,
OBJTYPE_PLAYER_INFO,
OBJTYPE_PLAYER_CHARACTER, // use this if you are searching for the player entity
2007-08-22 21:13:33 +00:00
OBJTYPE_PROJECTILE,
OBJTYPE_POWERUP,
OBJTYPE_FLAG,
EVENT_EXPLOSION,
EVENT_DAMAGEINDICATION,
EVENT_SOUND_WORLD,
2007-08-22 21:13:33 +00:00
EVENT_SMOKE,
EVENT_PLAYERSPAWN,
2007-08-22 21:13:33 +00:00
EVENT_DEATH,
EVENT_AIR_JUMP,
EVENT_DUMMY
2007-08-22 21:13:33 +00:00
};
enum
{
MSG_NULL=0,
MSG_SAY, // client -> server
MSG_CHAT, // server -> client
MSG_SETINFO, // server -> client - contains name, skin and color info
MSG_KILLMSG, // server -> client
2007-10-07 20:23:33 +00:00
MSG_SETTEAM,
2007-08-22 21:13:33 +00:00
MSG_JOIN,
MSG_QUIT,
MSG_EMOTICON,
MSG_STARTINFO, // client -> server
MSG_CHANGEINFO, // client -> server
2007-11-24 14:07:06 +00:00
MSG_READY_TO_ENTER, // server -> client
MSG_WEAPON_PICKUP,
MSG_SOUND_GLOBAL,
MSG_TUNE_PARAMS,
2007-08-22 21:13:33 +00:00
};
enum
{
EMOTE_NORMAL=0,
EMOTE_PAIN,
EMOTE_HAPPY,
EMOTE_SURPRISE,
EMOTE_ANGRY,
EMOTE_BLINK,
};
2007-10-07 23:43:14 +00:00
enum
{
INPUT_STATE_MASK=0x1f,
};
2007-08-22 21:13:33 +00:00
enum
{
2008-01-29 21:55:13 +00:00
PLAYERSTATE_UNKNOWN=0,
PLAYERSTATE_PLAYING,
PLAYERSTATE_IN_MENU,
PLAYERSTATE_CHATTING,
2007-11-08 09:11:32 +00:00
GAMETYPE_DM=0,
GAMETYPE_TDM,
GAMETYPE_CTF,
2007-08-22 21:13:33 +00:00
};
struct player_input
{
int left;
int right;
2007-08-22 21:13:33 +00:00
int target_x;
int target_y;
2007-08-22 21:13:33 +00:00
int jump;
int fire;
int hook;
int blink;
2008-01-29 21:55:13 +00:00
int player_state;
2007-10-07 23:43:14 +00:00
int wanted_weapon;
2007-10-07 15:32:54 +00:00
int next_weapon;
int prev_weapon;
2007-08-22 21:13:33 +00:00
};
struct ev_common
2007-08-22 21:13:33 +00:00
{
int x, y;
};
struct ev_explosion : public ev_common
2007-08-22 21:13:33 +00:00
{
};
struct ev_spawn : public ev_common
2007-08-22 21:13:33 +00:00
{
};
struct ev_death : public ev_common
2007-08-22 21:13:33 +00:00
{
};
struct ev_sound : public ev_common
{
int sound;
};
struct ev_damageind : public ev_common
2007-08-22 21:13:33 +00:00
{
int angle;
};
struct obj_game
{
int round_start_tick;
int game_over;
int sudden_death;
int paused;
2007-08-22 21:13:33 +00:00
int score_limit;
int time_limit;
int gametype;
2007-10-06 17:36:24 +00:00
int warmup;
2007-10-03 21:32:02 +00:00
int teamscore[2];
2007-08-22 21:13:33 +00:00
};
struct obj_projectile
{
int type;
int x, y;
int vx, vy; // should be an angle instead
int start_tick;
2007-08-22 21:13:33 +00:00
};
struct obj_powerup
{
int x, y;
int type; // why do we need two types?
int subtype;
};
struct obj_flag
{
int x, y;
int team;
int carried_by; // is set if the local player has the flag
2007-08-22 21:13:33 +00:00
};
// core object needed for physics
struct obj_player_core
{
int x, y;
int vx, vy;
int angle;
2007-12-09 09:48:53 +00:00
int jumped;
2007-09-22 18:55:52 +00:00
int hooked_player;
int hook_state;
int hook_tick;
int hook_x, hook_y;
int hook_dx, hook_dy;
};
// info about the player that is only needed when it's on screen
struct obj_player_character : public obj_player_core
2007-08-22 21:13:33 +00:00
{
2008-01-29 21:55:13 +00:00
int player_state;
2007-08-22 21:13:33 +00:00
int health;
int armor;
int ammocount;
2007-10-14 13:54:02 +00:00
int weaponstage;
2007-08-22 21:13:33 +00:00
int weapon; // current active weapon
int emote;
2007-08-22 21:13:33 +00:00
int attacktick; // num attack ticks left of current attack
};
// information about the player that is always needed
struct obj_player_info
{
int local;
int clientid;
int team;
2007-08-22 21:13:33 +00:00
int score;
int latency;
int latency_flux;
};
2008-01-12 17:09:00 +00:00
#endif