You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
170 lines
5.8 KiB
170 lines
5.8 KiB
/* $Id: player.h,v 1.7 2004/10/03 20:22:45 stpohle Exp $
|
|
* playerinclude file
|
|
*/
|
|
|
|
#ifndef _PLAYER_H_
|
|
#define _PLAYER_H_
|
|
|
|
#include "bomb.h"
|
|
|
|
enum _specials {
|
|
SP_nothing=0, // player has no special
|
|
SP_trigger, // triggered bomb
|
|
SP_row, // bomb row
|
|
SP_push, // push bombs
|
|
SP_moved, // moved bombs
|
|
SP_liquid, // liquid bombs
|
|
SP_kick, // kick bombs
|
|
|
|
SP_max, // just to know how many types there are
|
|
SP_clear // needed to let the server know we removed the special
|
|
};
|
|
|
|
|
|
|
|
enum _playerillnestype {
|
|
PI_keys = 0, // switch keys
|
|
PI_range, // set exploding range to 1
|
|
PI_slow, // sets speed to 6
|
|
PI_fast, // sets speed to 150
|
|
PI_bomb, // player is dropping bombs permanently
|
|
PI_nobomb, // player cannot drop a bomb or only 1 bomb
|
|
|
|
PI_max // just to know what is the last number
|
|
};
|
|
|
|
|
|
enum _playerstateflags { // not Set | Set
|
|
PSF_used = 1, // Player Unused | Player Used
|
|
PSF_net = 2, // Local Player | Network Player
|
|
PSF_alife = 4, // Player is Dead | Player is Alife
|
|
PSF_playing = 8, // Watching Player| Playing Player -- as long as one don't delete
|
|
PSF_ai = 16, // | AI Player
|
|
PSF_respawn = 32 // | Player is Respawning
|
|
};
|
|
|
|
#define PSFM_used (PSF_used + PSF_playing)
|
|
#define PSFM_alife (PSF_used + PSF_alife + PSF_playing)
|
|
#define PS_IS_dead(__ps) (((__ps) & (PSFM_alife + PSF_respawn)) == (PSFM_used))
|
|
#define PS_IS_respawn(__ps) (((__ps) & (PSFM_alife + PSF_respawn)) == (PSFM_used + PSF_respawn))
|
|
#define PS_IS_alife(__ps) (((__ps) & (PSFM_alife)) == (PSFM_alife))
|
|
#define PS_IS_netplayer(__ps) (((__ps) & (PSF_net)) != 0)
|
|
#define PS_IS_playing(__ps) (((__ps) & (PSFM_used)) == (PSFM_used))
|
|
#define PS_IS_used(__ps) (((__ps) & (PSFM_used)) != 0)
|
|
#define PS_IS_aiplayer(__ps) ((((__ps) & (PSFM_used)) != 0) && (((__ps) & (PSF_ai)) == PSF_ai))
|
|
|
|
|
|
struct {
|
|
float to; // if (to > 0) the ilness is still working
|
|
int datai; // hold a integer data (like number of something..)
|
|
float dataf; // hold a float data (speed and so on)
|
|
} typedef _playerilness;
|
|
|
|
|
|
struct {
|
|
int type; // type of the special
|
|
float to; // timeout
|
|
int numuse; // num of uses left
|
|
int use; /* currently used set by special_use
|
|
and deleted in special_loop */
|
|
} typedef _special;
|
|
|
|
|
|
struct {
|
|
_gfxplayer *gfx; // pointer to the gfx information
|
|
int gfx_nr; // number of the player GFX
|
|
|
|
float frame; // step of the animation (only integer part will shown)
|
|
float illframe;
|
|
|
|
_pointf pos; // position on the field
|
|
_pointf old; // the old position
|
|
float tunnelto; /* timeout for dont show and move player
|
|
needed on the tunnel effect */
|
|
|
|
signed char d; // direction
|
|
signed char m; // player is moving ?
|
|
signed char old_m; // to save the old state..
|
|
signed char keyf_bomb; // flag for the bomb key
|
|
signed char keyf_special; // flag for the special key
|
|
|
|
int bombs_n; // maximal number of bombs for the player
|
|
int bomb_lastex; // number of the bomb which explode the last time
|
|
_bomb bombs[MAX_BOMBS]; // number of bombs who are ticking.
|
|
int range; // range of the bombs
|
|
float speed; // how fast we can go (0 = slow, 1 = normal... 3 = fastest)
|
|
float stepsleft; // distance to walk on the next stepmove_player
|
|
int collect_shoes;
|
|
_playerilness ill[PI_max]; // all possible types
|
|
_special special; // special the player has
|
|
|
|
char name[LEN_PLAYERNAME]; // name oder name[0] == 0
|
|
int team_nr; // number of the team we are in or -1
|
|
unsigned char state; // status of the player
|
|
signed char in_nr; // number of the connected player entry
|
|
|
|
int points; // points
|
|
int wins; // wins
|
|
signed char dead_by; // player who killed this player
|
|
|
|
_net_player net; // holds all important network data
|
|
} typedef _player;
|
|
|
|
|
|
struct __team {
|
|
_player *players[MAX_PLAYERS];
|
|
char name[LEN_PLAYERNAME];
|
|
int wins;
|
|
int points;
|
|
} typedef _team;
|
|
|
|
|
|
// everything what is declared in players.c
|
|
extern _player *players;
|
|
extern _team *teams;
|
|
|
|
extern void dead_playerani ();
|
|
extern void draw_player (_player * player);
|
|
extern void restore_players_screen ();
|
|
extern void player_move (int pl_nr);
|
|
extern float stepmove_player (int pl_nr);
|
|
extern void player_drop_bomb (int pl_nr);
|
|
extern void get_player_on (float x, float y, int pl_nr[]);
|
|
extern void player_died (_player * player, signed char dead_by);
|
|
extern void draw_players ();
|
|
extern void player_animation (_player * player);
|
|
extern int check_field (short int x, short int y);
|
|
extern int check_exfield (short int x, short int y);
|
|
extern void player_calcpos ();
|
|
extern void player_set_ilness (_player * p, int t, float new_to);
|
|
extern void player_clear_ilness (_player *p, int type);
|
|
extern void player_ilness_loop (int plnr);
|
|
extern void player_check_powerup (int p_nr);
|
|
extern void player_set_gfx (_player *p, signed char gfx_nr);
|
|
extern int player_findfreebomb (_player *player);
|
|
extern int player_checkpos (int x, int y);
|
|
extern void player_checkdeath (int pnr);
|
|
extern void player_check (int pl_nr);
|
|
extern void player_delete (int pl_nr);
|
|
|
|
extern void player2_join ();
|
|
extern void player2_add (int pl_nr);
|
|
|
|
extern void team_update ();
|
|
|
|
|
|
// for the playerinput handling
|
|
extern void playerinput_loop (int pl_nr);
|
|
extern void playerinput_keyb_loop (int pl_nr);
|
|
extern inline void playerinput_keyb_read (int pk_offset, int pl_nr);
|
|
|
|
/* playermenu.c */
|
|
extern void playernamemenu ();
|
|
extern void playermenu ();
|
|
extern int playermenu_selgfx (int pl_nr);
|
|
extern void playermenu_getflags (char *text, _player *player);
|
|
|
|
extern void teammenu ();
|
|
|
|
#endif
|