|
|
|
@ -12,19 +12,18 @@ draw_player (_player * player)
|
|
|
|
|
dest;
|
|
|
|
|
int i;
|
|
|
|
|
|
|
|
|
|
if (PS_IS_alife (player->state)) {
|
|
|
|
|
/* player is alife */
|
|
|
|
|
dest.w = src.w = player->gfx->size.x;
|
|
|
|
|
dest.h = src.h = player->gfx->size.y;
|
|
|
|
|
|
|
|
|
|
dest.x =
|
|
|
|
|
gfx.offset.x + player->gfx->offset.x + (player->pos.x >> 8) * gfx.block.x +
|
|
|
|
|
gfx.postab[player->pos.x & 255];
|
|
|
|
|
dest.y =
|
|
|
|
|
gfx.offset.y + player->gfx->offset.y + (player->pos.y >> 8) * gfx.block.y +
|
|
|
|
|
gfx.postab[player->pos.y & 255];
|
|
|
|
|
|
|
|
|
|
src.x = player->d * player->gfx->size.x;
|
|
|
|
|
src.y = player->frame * player->gfx->size.y;
|
|
|
|
|
|
|
|
|
|
SDL_BlitSurface (player->gfx->ani.image, &src, gfx.screen, &dest);
|
|
|
|
|
|
|
|
|
|
/* if the player is ill, draw this image above him */
|
|
|
|
@ -33,21 +32,36 @@ draw_player (_player * player)
|
|
|
|
|
if (i >= 0) {
|
|
|
|
|
dest.w = src.w = gfx.block.x * 2;
|
|
|
|
|
dest.h = src.h = gfx.block.y * 2;
|
|
|
|
|
|
|
|
|
|
src.x = 0;
|
|
|
|
|
src.y = (2 * gfx.block.y) * player->illframe;
|
|
|
|
|
|
|
|
|
|
dest.x =
|
|
|
|
|
(-(gfx.block.x >> 1)) + gfx.offset.x + (player->pos.x >> 8) * gfx.block.x +
|
|
|
|
|
gfx.postab[player->pos.x & 255];
|
|
|
|
|
dest.y =
|
|
|
|
|
gfx.offset.y + ((player->pos.y >> 8) - 1) * gfx.block.y +
|
|
|
|
|
gfx.postab[player->pos.y & 255];
|
|
|
|
|
|
|
|
|
|
SDL_BlitSurface (gfx.ill.image, &src, gfx.screen, &dest);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
else {
|
|
|
|
|
/* player is dead */
|
|
|
|
|
dest.w = src.w = gfx.dead.image->w;
|
|
|
|
|
dest.h = src.h = player->gfx->size.y;
|
|
|
|
|
|
|
|
|
|
dest.x =
|
|
|
|
|
gfx.offset.x + player->gfx->offset.x + (player->pos.x >> 8) * gfx.block.x +
|
|
|
|
|
gfx.postab[player->pos.x & 255];
|
|
|
|
|
dest.y =
|
|
|
|
|
gfx.offset.y + player->gfx->offset.y + (player->pos.y >> 8) * gfx.block.y +
|
|
|
|
|
gfx.postab[player->pos.y & 255];
|
|
|
|
|
|
|
|
|
|
src.x = 0;
|
|
|
|
|
src.y = (2 * gfx.block.y) * player->frame;
|
|
|
|
|
|
|
|
|
|
SDL_BlitSurface (gfx.dead.image, &src, gfx.screen, &dest);
|
|
|
|
|
}
|
|
|
|
|
gfx_AddUpdateRect (dest.x, dest.y, dest.w, dest.h);
|
|
|
|
|
player->old = player->pos; // save this position
|
|
|
|
|
};
|
|
|
|
@ -56,6 +70,7 @@ draw_player (_player * player)
|
|
|
|
|
void
|
|
|
|
|
restore_players_screen ()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
int i,
|
|
|
|
|
x,
|
|
|
|
|
xs,
|
|
|
|
@ -63,7 +78,6 @@ restore_players_screen ()
|
|
|
|
|
y,
|
|
|
|
|
ys,
|
|
|
|
|
ye;
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < MAX_PLAYERS; i++)
|
|
|
|
|
if ((PS_IS_used (bman.players[i].state)) && bman.players[i].old.x != -1) {
|
|
|
|
|
if ((bman.players[i].old.x & 0xFF) > 128) {
|
|
|
|
@ -78,7 +92,6 @@ restore_players_screen ()
|
|
|
|
|
x = 0;
|
|
|
|
|
if (xe >= bman.fieldsize.x)
|
|
|
|
|
xe = bman.fieldsize.x - 1;
|
|
|
|
|
|
|
|
|
|
ys = (bman.players[i].old.y >> 8) - 1;
|
|
|
|
|
ye = (bman.players[i].old.y >> 8) + 1;
|
|
|
|
|
if (ys < 0)
|
|
|
|
@ -89,10 +102,8 @@ restore_players_screen ()
|
|
|
|
|
for (; x <= xe; x++)
|
|
|
|
|
for (y = ys; y <= ye; y++)
|
|
|
|
|
draw_stone (x, y);
|
|
|
|
|
|
|
|
|
|
gfx_AddUpdateRect (xs * gfx.block.x + gfx.offset.x, ys * gfx.block.y + gfx.offset.y,
|
|
|
|
|
gfx.block.x * 3, gfx.block.y * 3);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
@ -101,7 +112,6 @@ void
|
|
|
|
|
player_check_powerup (int p_nr)
|
|
|
|
|
{
|
|
|
|
|
_player *p = &bman.players[p_nr];
|
|
|
|
|
|
|
|
|
|
int fx = p->pos.x >> 8;
|
|
|
|
|
int fy = p->pos.y >> 8;
|
|
|
|
|
int _x = p->pos.x & 255;
|
|
|
|
@ -115,10 +125,8 @@ player_check_powerup (int p_nr)
|
|
|
|
|
/* Get the right field position */
|
|
|
|
|
if (_x > 128)
|
|
|
|
|
fx = fx + 1;
|
|
|
|
|
|
|
|
|
|
if (_y > 128)
|
|
|
|
|
fy = fy + 1;
|
|
|
|
|
|
|
|
|
|
ft = bman.field[fx][fy].type;
|
|
|
|
|
/* we found a mixed powerup */
|
|
|
|
|
if (ft == FT_mixed) {
|
|
|
|
@ -150,7 +158,6 @@ player_check_powerup (int p_nr)
|
|
|
|
|
}
|
|
|
|
|
field_clear (fx, fy);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
/* we found a fire powerup */
|
|
|
|
|
case FT_fire:
|
|
|
|
|
if (p->range < MAX_RANGE && p->ill[PI_range].to <= 0) {
|
|
|
|
@ -159,7 +166,6 @@ player_check_powerup (int p_nr)
|
|
|
|
|
}
|
|
|
|
|
field_clear (fx, fy);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
/* we found a shoe powerup */
|
|
|
|
|
case FT_shoe:
|
|
|
|
|
if (p->speed < MAX_SPEED && p->ill[PI_slow].to <= 0) {
|
|
|
|
@ -168,7 +174,6 @@ player_check_powerup (int p_nr)
|
|
|
|
|
}
|
|
|
|
|
field_clear (fx, fy);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
/* we found a death ?powerup? */
|
|
|
|
|
case FT_death:
|
|
|
|
|
player_set_ilness (p, -1);
|
|
|
|
@ -177,13 +182,12 @@ player_check_powerup (int p_nr)
|
|
|
|
|
net_game_send_ill (bman.p_nr);
|
|
|
|
|
field_clear (fx, fy);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
/* we found a special */
|
|
|
|
|
case FT_sp_trigger:
|
|
|
|
|
case FT_sp_row:
|
|
|
|
|
case FT_sp_push:
|
|
|
|
|
case FT_sp_kick:
|
|
|
|
|
special_pickup(p_nr,ft-FT_sp_trigger+1);
|
|
|
|
|
special_pickup (p_nr, ft - FT_sp_trigger + 1);
|
|
|
|
|
bman.updatestatusbar = 1;
|
|
|
|
|
field_clear (fx, fy);
|
|
|
|
|
break;
|
|
|
|
@ -203,11 +207,9 @@ check_field (short int fx, short int fy, _player * p)
|
|
|
|
|
|
|
|
|
|
if (bman.field[fx][fy].type != FT_stone && bman.field[fx][fy].type != FT_block)
|
|
|
|
|
res = 1;
|
|
|
|
|
|
|
|
|
|
get_bomb_on (fx, fy, bombs);
|
|
|
|
|
if (bombs[0].x != -1)
|
|
|
|
|
res = 0;
|
|
|
|
|
|
|
|
|
|
return res;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -228,22 +230,18 @@ stepmove_player (int pl_nr)
|
|
|
|
|
|
|
|
|
|
fx = p->pos.x >> 8;
|
|
|
|
|
fy = p->pos.y >> 8;
|
|
|
|
|
|
|
|
|
|
_x = p->pos.x & 255;
|
|
|
|
|
_y = p->pos.y & 255;
|
|
|
|
|
|
|
|
|
|
// do direction correction for going up/down
|
|
|
|
|
if (_x > 0 && _x <= 128 && (p->d == up || p->d == down))
|
|
|
|
|
p->d = left;
|
|
|
|
|
if (_x > 128 && _x < 256 && (p->d == up || p->d == down))
|
|
|
|
|
p->d = right;
|
|
|
|
|
|
|
|
|
|
// do direction correction for left/right
|
|
|
|
|
if (_y > 0 && _y <= 128 && (p->d == left || p->d == right))
|
|
|
|
|
p->d = up;
|
|
|
|
|
if (_y > 128 && _y < 256 && (p->d == left || p->d == right))
|
|
|
|
|
p->d = down;
|
|
|
|
|
|
|
|
|
|
/* get the pos to the next field */
|
|
|
|
|
if (p->d == left)
|
|
|
|
|
speed = _x;
|
|
|
|
@ -253,29 +251,22 @@ stepmove_player (int pl_nr)
|
|
|
|
|
speed = _y;
|
|
|
|
|
else
|
|
|
|
|
speed = 256 - _y;
|
|
|
|
|
|
|
|
|
|
if (speed > p->speed || speed == 0)
|
|
|
|
|
speed = p->speed;
|
|
|
|
|
|
|
|
|
|
// go left
|
|
|
|
|
if (p->d == left && _y == 0 && ((_x == 0 && check_field (fx - 1, fy, p)) || (_x > 0)))
|
|
|
|
|
dx = -speed;
|
|
|
|
|
|
|
|
|
|
// go right
|
|
|
|
|
if (p->d == right && _y == 0 && ((_x == 0 && check_field (fx + 1, fy, p)) || (_x > 0)))
|
|
|
|
|
dx = speed;
|
|
|
|
|
|
|
|
|
|
// go up
|
|
|
|
|
if (p->d == up && _x == 0 && ((_y == 0 && check_field (fx, fy - 1, p)) || (_y > 0)))
|
|
|
|
|
dy = -speed;
|
|
|
|
|
|
|
|
|
|
// go down
|
|
|
|
|
if (p->d == down && _x == 0 && ((_y == 0 && check_field (fx, fy + 1, p)) || (_y > 0)))
|
|
|
|
|
dy = speed;
|
|
|
|
|
|
|
|
|
|
p->pos.x = p->pos.x + dx;
|
|
|
|
|
p->pos.y = p->pos.y + dy;
|
|
|
|
|
|
|
|
|
|
player_check_powerup (pl_nr);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -288,6 +279,7 @@ stepmove_player (int pl_nr)
|
|
|
|
|
void
|
|
|
|
|
move_player (int pl_nr)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
int oldd,
|
|
|
|
|
stepsleft,
|
|
|
|
|
speed;
|
|
|
|
@ -296,7 +288,6 @@ move_player (int pl_nr)
|
|
|
|
|
oldd = p->d;
|
|
|
|
|
if (p->m) {
|
|
|
|
|
player_animation (p);
|
|
|
|
|
|
|
|
|
|
if ((stepsleft = stepmove_player (pl_nr)) > 0) {
|
|
|
|
|
/* save the speed and go the rest of the step */
|
|
|
|
|
p->d = oldd;
|
|
|
|
@ -314,7 +305,6 @@ move_player (int pl_nr)
|
|
|
|
|
/* the player just stopt moving so send data */
|
|
|
|
|
if (bman.gametype != GT_single && p->m == 0 && p->old_m != 0)
|
|
|
|
|
net_game_send_playermove (pl_nr, 1);
|
|
|
|
|
|
|
|
|
|
p->old_m = p->m; // save the old state
|
|
|
|
|
p->m = 0;
|
|
|
|
|
};
|
|
|
|
@ -323,24 +313,21 @@ move_player (int pl_nr)
|
|
|
|
|
void
|
|
|
|
|
player_drop_bomb (int pl_nr)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
_player *player = &bman.players[pl_nr];
|
|
|
|
|
_bomb *bomb = NULL;
|
|
|
|
|
int i,
|
|
|
|
|
_x,
|
|
|
|
|
_y;
|
|
|
|
|
_point bombs[MAX_PLAYERS * MAX_BOMBS];
|
|
|
|
|
|
|
|
|
|
for (i = 0; ((i < player->bombs_n) && (player->bombs[i].state != BS_off)); i++);
|
|
|
|
|
|
|
|
|
|
if (i < player->bombs_n && PS_IS_alife(player->state)) { // free bomb found
|
|
|
|
|
if (i < player->bombs_n && PS_IS_alife (player->state)) { // free bomb found
|
|
|
|
|
// get the best position for the bomb.
|
|
|
|
|
bomb = &player->bombs[i];
|
|
|
|
|
|
|
|
|
|
bomb->pos.x = player->pos.x >> 8;
|
|
|
|
|
bomb->pos.y = player->pos.y >> 8;
|
|
|
|
|
_x = player->pos.x & 255;
|
|
|
|
|
_y = player->pos.y & 255;
|
|
|
|
|
|
|
|
|
|
if (_x > 0 && _x <= 128)
|
|
|
|
|
_x = 0;
|
|
|
|
|
else if (_x > 128) {
|
|
|
|
@ -359,7 +346,6 @@ player_drop_bomb (int pl_nr)
|
|
|
|
|
get_bomb_on (bomb->pos.x, bomb->pos.y, bombs);
|
|
|
|
|
if (bombs[0].x != -1) // is there already a bomb
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
d_printf ("Player %d Dropped Bomb %d\n", pl_nr, i);
|
|
|
|
|
bomb->r = player->range;
|
|
|
|
|
if (player->special.type == SP_trigger) {
|
|
|
|
@ -372,9 +358,8 @@ player_drop_bomb (int pl_nr)
|
|
|
|
|
}
|
|
|
|
|
bomb->ex_nr = -1;
|
|
|
|
|
bman.bfield[bomb->pos.x][bomb->pos.y] = 1;
|
|
|
|
|
bomb->pos.x=bomb->pos.x << 8;
|
|
|
|
|
bomb->pos.y=bomb->pos.y << 8;
|
|
|
|
|
|
|
|
|
|
bomb->pos.x = bomb->pos.x << 8;
|
|
|
|
|
bomb->pos.y = bomb->pos.y << 8;
|
|
|
|
|
if (bman.gametype != GT_single) {
|
|
|
|
|
net_game_send_bomb (pl_nr, i);
|
|
|
|
|
if (GT_MP_PTPS)
|
|
|
|
@ -415,18 +400,16 @@ player_died (_player * player, signed char dead_by)
|
|
|
|
|
// player die !
|
|
|
|
|
|
|
|
|
|
d_printf ("player_died (%10s)\n", player->name);
|
|
|
|
|
bman.updatestatusbar = 1; // force an update
|
|
|
|
|
|
|
|
|
|
bman.updatestatusbar = 1; // force an update
|
|
|
|
|
if (PS_IS_alife (player->state) && dead_by >= 0 && dead_by < MAX_PLAYERS)
|
|
|
|
|
if (bman.p_nr != dead_by)
|
|
|
|
|
bman.players[dead_by].points++;
|
|
|
|
|
|
|
|
|
|
player->frame = 0;
|
|
|
|
|
player->state &= (0xFF - PSF_alife);
|
|
|
|
|
player->dead_by = dead_by;
|
|
|
|
|
|
|
|
|
|
if (GT_MP_PTP)
|
|
|
|
|
net_game_send_player (bman.p_nr);
|
|
|
|
|
|
|
|
|
|
snd_play (SND_dead);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
@ -434,8 +417,8 @@ player_died (_player * player, signed char dead_by)
|
|
|
|
|
void
|
|
|
|
|
draw_players ()
|
|
|
|
|
{
|
|
|
|
|
int p;
|
|
|
|
|
|
|
|
|
|
int p;
|
|
|
|
|
for (p = 0; p < MAX_PLAYERS; p++) {
|
|
|
|
|
if (PS_IS_playing (bman.players[p].state))
|
|
|
|
|
draw_player (&bman.players[p]);
|
|
|
|
@ -449,14 +432,23 @@ player_animation (_player * player)
|
|
|
|
|
if (player->gfx == NULL)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (PS_IS_alife (player->state)) {
|
|
|
|
|
if (player->frame < player->gfx->ani.frames
|
|
|
|
|
&& (player->frameto <= 0 || player->frameto > ANI_PLAYERTIMEOUT)) {
|
|
|
|
|
player->frameto = ANI_PLAYERTIMEOUT;
|
|
|
|
|
player->frame++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (player->frame >= player->gfx->ani.frames && PS_IS_alife (player->state))
|
|
|
|
|
if (player->frame >= player->gfx->ani.frames)
|
|
|
|
|
player->frame = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (PS_IS_dead (player->state)) {
|
|
|
|
|
if (player->frame < gfx.dead.frames
|
|
|
|
|
&& (player->frameto <= 0 || player->frameto > ANI_PLAYERTIMEOUT * 2)) {
|
|
|
|
|
player->frameto = ANI_PLAYERTIMEOUT * 2;
|
|
|
|
|
player->frame++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (player->frameto > 0)
|
|
|
|
|
player->frameto--;
|
|
|
|
@ -466,14 +458,15 @@ player_animation (_player * player)
|
|
|
|
|
int
|
|
|
|
|
dead_playerani ()
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
int i,
|
|
|
|
|
b = 0;
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < MAX_PLAYERS; i++)
|
|
|
|
|
if (PS_IS_dead (bman.players[i].state)) {
|
|
|
|
|
player_animation (&bman.players[i]);
|
|
|
|
|
b++;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return b;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
@ -481,15 +474,13 @@ dead_playerani ()
|
|
|
|
|
void
|
|
|
|
|
player_calcstep (_player * pl)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
_point d;
|
|
|
|
|
int fx,
|
|
|
|
|
fy;
|
|
|
|
|
|
|
|
|
|
player_animation (pl);
|
|
|
|
|
|
|
|
|
|
fx = pl->pos.x >> 8;
|
|
|
|
|
fy = pl->pos.y >> 8;
|
|
|
|
|
|
|
|
|
|
if (bman.field[fx][fy].type != FT_block && bman.field[fx][fy].type != FT_stone) {
|
|
|
|
|
d.x = 0;
|
|
|
|
|
d.y = 0;
|
|
|
|
@ -501,7 +492,6 @@ player_calcstep (_player * pl)
|
|
|
|
|
d.y = -16;
|
|
|
|
|
else if (pl->d == down)
|
|
|
|
|
d.y = 16;
|
|
|
|
|
|
|
|
|
|
pl->pos.x += d.x;
|
|
|
|
|
pl->pos.y += d.y;
|
|
|
|
|
}
|
|
|
|
@ -527,13 +517,10 @@ player_calcpos ()
|
|
|
|
|
pl->speeddat = 1;
|
|
|
|
|
else
|
|
|
|
|
pl->speeddat = 0;
|
|
|
|
|
|
|
|
|
|
oldm = pl->m;
|
|
|
|
|
oldd = pl->d;
|
|
|
|
|
|
|
|
|
|
if (pl->speed > 1)
|
|
|
|
|
stepmove_player (p);
|
|
|
|
|
|
|
|
|
|
if (pl->speeddat) {
|
|
|
|
|
pl->m = oldm;
|
|
|
|
|
pl->d = oldd;
|
|
|
|
@ -574,9 +561,9 @@ player_ilness_loop (int pl_nr)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* check if we have contact with an other ill player */
|
|
|
|
|
p = &bman.players[pl_nr];
|
|
|
|
|
|
|
|
|
|
get_player_on (p->pos.x, p->pos.y, pl);
|
|
|
|
|
for (i = 0; (pl[i] != -1 && i < MAX_PLAYERS); i++)
|
|
|
|
|
if (pl[i] != pl_nr) {
|
|
|
|
@ -641,12 +628,10 @@ void
|
|
|
|
|
player_set_ilness (_player * p, int t)
|
|
|
|
|
{
|
|
|
|
|
int type;
|
|
|
|
|
|
|
|
|
|
if (t == -1)
|
|
|
|
|
type = s_random (PI_max);
|
|
|
|
|
else
|
|
|
|
|
type = t;
|
|
|
|
|
|
|
|
|
|
d_printf ("Ilness : %d\n", type);
|
|
|
|
|
switch (type) {
|
|
|
|
|
case PI_slow:
|
|
|
|
@ -657,7 +642,6 @@ player_set_ilness (_player * p, int t)
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
p->ill[type].data = p->speed;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
p->speed = 6;
|
|
|
|
|
break;
|
|
|
|
@ -669,7 +653,6 @@ player_set_ilness (_player * p, int t)
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
p->ill[type].data = p->speed;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
p->speed = 150;
|
|
|
|
@ -684,7 +667,6 @@ player_set_ilness (_player * p, int t)
|
|
|
|
|
p->ill[type].data = p->bombs_n;
|
|
|
|
|
p->bombs_n = s_random (2);
|
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
bman.updatestatusbar = 1;
|
|
|
|
|
p->ill[type].to += TIME_FACTOR * IL_TIMEOUT;
|
|
|
|
@ -710,7 +692,6 @@ player_clear_ilness (_player * p, int type)
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
p->ill[type].to = 0;
|
|
|
|
|
|
|
|
|
|
if (bman.gametype != GT_single)
|
|
|
|
|
net_game_send_ill (bman.p_nr);
|
|
|
|
|
bman.updatestatusbar = 1;
|
|
|
|
@ -721,10 +702,8 @@ void
|
|
|
|
|
player_set_gfx (_player * p, signed char gfx_nr)
|
|
|
|
|
{
|
|
|
|
|
p->gfx_nr = gfx_nr;
|
|
|
|
|
|
|
|
|
|
if (p->gfx_nr < 0 || p->gfx_nr >= MAX_PLAYERS)
|
|
|
|
|
p->gfx_nr = -1;
|
|
|
|
|
|
|
|
|
|
if (p->gfx_nr == -1) {
|
|
|
|
|
p->gfx = NULL;
|
|
|
|
|
p->state &= (0xFF - (PSF_alife + PSF_playing));
|
|
|
|
|