2007-08-22 07:52:33 +00:00
|
|
|
#include <engine/system.h>
|
|
|
|
#include <game/math.h>
|
2007-05-22 15:03:32 +00:00
|
|
|
#include <math.h>
|
2007-05-24 20:54:08 +00:00
|
|
|
#include "../engine/interface.h"
|
2007-05-22 15:03:32 +00:00
|
|
|
#include "mapres_col.h"
|
|
|
|
|
2007-08-22 07:52:33 +00:00
|
|
|
inline vec2 get_direction(int angle)
|
2007-05-22 15:03:32 +00:00
|
|
|
{
|
|
|
|
float a = angle/256.0f;
|
2007-08-22 07:52:33 +00:00
|
|
|
return vec2(cosf(a), sinf(a));
|
2007-05-22 15:03:32 +00:00
|
|
|
}
|
|
|
|
|
2007-08-22 07:52:33 +00:00
|
|
|
inline float get_angle(vec2 dir)
|
2007-05-22 15:03:32 +00:00
|
|
|
{
|
|
|
|
float a = atan(dir.y/dir.x);
|
|
|
|
if(dir.x < 0)
|
2007-08-22 07:52:33 +00:00
|
|
|
a = a+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-08-22 07:52:33 +00:00
|
|
|
inline bool col_check_point(vec2 p) { return col_check_point(p.x, p.y); }
|
2007-05-22 15:03:32 +00:00
|
|
|
|
|
|
|
// Network stuff
|
|
|
|
|
|
|
|
enum
|
|
|
|
{
|
|
|
|
OBJTYPE_NULL=0,
|
2007-07-15 10:47:50 +00:00
|
|
|
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,
|
2007-07-14 22:35:00 +00:00
|
|
|
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-08-14 22:48:49 +00:00
|
|
|
MSG_EMOTICON,
|
|
|
|
MSG_CHANGENAME,
|
2007-07-14 13:09:42 +00:00
|
|
|
};
|
|
|
|
|
2007-05-22 15:03:32 +00:00
|
|
|
enum
|
|
|
|
{
|
|
|
|
EMOTE_NORMAL=0,
|
|
|
|
EMOTE_PAIN,
|
|
|
|
EMOTE_HAPPY,
|
2007-08-09 00:18:11 +00:00
|
|
|
EMOTE_SURPRISE,
|
|
|
|
EMOTE_ANGRY,
|
|
|
|
EMOTE_BLINK,
|
2007-05-22 15:03:32 +00:00
|
|
|
};
|
|
|
|
|
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;
|
2007-07-21 18:07:27 +00:00
|
|
|
|
|
|
|
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-07-14 22:35:00 +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
|
|
|
};
|
|
|
|
|
2007-07-15 10:47:50 +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-07-15 10:47:50 +00:00
|
|
|
};
|
|
|
|
|
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;
|
|
|
|
|
2007-07-15 10:47:50 +00:00
|
|
|
int weapon; // current active weapon
|
2007-05-22 15:03:32 +00:00
|
|
|
|
2007-07-15 10:47:50 +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;
|
2007-07-26 07:15:52 +00:00
|
|
|
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,
|
|
|
|
};
|