ddnet/src/game/game.h

207 lines
2.7 KiB
C
Raw Normal View History

2007-05-22 15:03:32 +00:00
#include <baselib/system.h>
2007-07-13 13:40:04 +00:00
#include <baselib/math.h>
2007-05-22 15:03:32 +00:00
#include <math.h>
#include "../engine/interface.h"
2007-05-22 15:03:32 +00:00
#include "mapres_col.h"
inline baselib::vec2 get_direction(int angle)
{
float a = angle/256.0f;
return baselib::vec2(cosf(a), sinf(a));
}
inline float get_angle(baselib::vec2 dir)
{
float a = atan(dir.y/dir.x);
if(dir.x < 0)
2007-07-13 13:40:04 +00:00
a = a+baselib::pi;
2007-05-22 15:03:32 +00:00
return a;
}
2007-07-21 19:03:50 +00:00
#define LERP(a,b,t) (a + (b-a) * t)
#define min(a, b) ( a > b ? b : a)
#define max(a, b) ( a > b ? a : b)
2007-07-13 21:22:45 +00:00
inline bool col_check_point(float x, float y) { return col_check_point((int)x, (int)y) != 0; }
2007-05-22 15:03:32 +00:00
inline bool col_check_point(baselib::vec2 p) { return col_check_point(p.x, p.y); }
// Network stuff
enum
{
OBJTYPE_NULL=0,
OBJTYPE_GAME,
2007-05-22 15:03:32 +00:00
OBJTYPE_PLAYER,
OBJTYPE_PROJECTILE,
OBJTYPE_POWERUP,
2007-07-26 09:21:47 +00:00
OBJTYPE_FLAG,
2007-05-22 15:03:32 +00:00
EVENT_EXPLOSION,
2007-07-14 13:09:42 +00:00
EVENT_DAMAGEINDICATION,
2007-05-22 15:03:32 +00:00
EVENT_SOUND,
EVENT_SMOKE,
2007-07-21 19:03:50 +00:00
EVENT_SPAWN,
2007-07-21 21:17:38 +00:00
EVENT_DEATH,
2007-05-22 15:03:32 +00:00
};
2007-07-14 13:09:42 +00:00
enum
{
MSG_NULL=0,
MSG_SAY,
MSG_CHAT,
MSG_SETNAME,
MSG_KILLMSG,
2007-07-22 11:53:15 +00:00
MSG_SWITCHTEAM,
2007-07-29 22:56:25 +00:00
MSG_JOIN,
MSG_QUIT,
2007-07-14 13:09:42 +00:00
};
2007-05-22 15:03:32 +00:00
enum
{
EMOTE_NORMAL=0,
EMOTE_BLINK,
EMOTE_WINK,
EMOTE_PAIN,
EMOTE_HAPPY,
};
2007-07-26 11:33:49 +00:00
enum
{
STATE_UNKNOWN=0,
STATE_PLAYING,
STATE_IN_MENU,
STATE_CHATTING,
};
2007-05-22 15:03:32 +00:00
struct player_input
{
int left;
int right;
int target_x;
int target_y;
2007-05-22 15:03:32 +00:00
int jump;
int fire;
int hook;
int blink;
int activeweapon;
2007-07-26 11:33:49 +00:00
int state;
2007-05-22 15:03:32 +00:00
};
2007-05-22 15:03:32 +00:00
struct ev_explosion
{
int x, y;
};
2007-07-21 19:03:50 +00:00
struct ev_spawn
{
int x, y;
};
2007-07-21 21:17:38 +00:00
struct ev_death
{
int x, y;
};
2007-05-22 15:03:32 +00:00
struct ev_sound
{
int x, y;
int sound; // if (0x80000000 flag is set -> looping) if (0x40000000 is set -> stop looping
};
2007-07-14 13:09:42 +00:00
struct ev_damageind
2007-05-22 15:03:32 +00:00
{
2007-07-14 13:09:42 +00:00
int x, y;
int angle;
2007-05-22 15:03:32 +00:00
};
struct obj_game
{
int round_start_tick;
int game_over;
int sudden_death;
int paused;
int score_limit;
int time_limit;
2007-07-21 21:47:21 +00:00
int gametype;
};
2007-05-22 15:03:32 +00:00
struct obj_projectile
{
int type;
int x, y;
2007-07-13 13:40:04 +00:00
int vx, vy; // should be an angle instead
2007-05-22 15:03:32 +00:00
};
struct obj_powerup
{
int x, y;
2007-07-13 13:40:04 +00:00
int type; // why do we need two types?
int subtype;
2007-05-22 15:03:32 +00:00
};
2007-07-26 09:21:47 +00:00
struct obj_flag
{
int x, y;
int team;
};
2007-05-22 15:03:32 +00:00
struct obj_player
{
int local;
int clientid;
2007-07-26 11:33:49 +00:00
int state;
2007-05-22 15:03:32 +00:00
int health;
int armor;
int ammocount;
int x, y;
int vx, vy;
int angle;
int weapon; // current active weapon
2007-05-22 15:03:32 +00:00
int attacktick; // num attack ticks left of current attack
2007-05-22 15:03:32 +00:00
int score;
2007-07-22 09:15:34 +00:00
int latency;
int latency_flux;
2007-05-22 15:03:32 +00:00
int emote;
int hook_active;
int hook_x, hook_y;
2007-07-21 21:47:21 +00:00
int team;
2007-05-22 15:03:32 +00:00
};
struct mapres_spawnpoint
{
int x, y;
int type;
};
struct mapres_item
{
int x, y;
int type;
};
enum
{
MAPRES_SPAWNPOINT=1,
MAPRES_ITEM=2,
ITEM_NULL=0,
ITEM_WEAPON_GUN=0x00010001,
ITEM_WEAPON_SHOTGUN=0x00010002,
ITEM_WEAPON_ROCKET=0x00010003,
ITEM_WEAPON_SNIPER=0x00010004,
ITEM_WEAPON_HAMMER=0x00010005,
2007-07-15 13:25:10 +00:00
ITEM_HEALTH =0x00020001,
ITEM_ARMOR=0x00030001,
2007-05-22 15:03:32 +00:00
ITEM_NINJA=0x00040001,
};