|
|
|
@ -1,4 +1,4 @@
|
|
|
|
|
/* $Id: special.c,v 1.20 2003/07/13 00:08:26 stpohle Exp $ */
|
|
|
|
|
/* $Id: special.c,v 1.21 2003/07/13 22:49:08 stpohle Exp $ */
|
|
|
|
|
/* special.c - procedues to control the specials */
|
|
|
|
|
|
|
|
|
|
#include "bomberclone.h"
|
|
|
|
@ -24,7 +24,6 @@ special_trigger (int p_nr)
|
|
|
|
|
if (p_nr == bman.p_nr && GT_MP_PTP && z)
|
|
|
|
|
net_game_send_special (p_nr, ex_nr);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (z) {
|
|
|
|
|
bman.last_ex_nr = ex_nr + 6;
|
|
|
|
|
p->special.numuse--;
|
|
|
|
@ -181,57 +180,61 @@ special_pickup (int p_nr, int s_nr)
|
|
|
|
|
void
|
|
|
|
|
special_clear (int p_nr)
|
|
|
|
|
{
|
|
|
|
|
if ( bman.players[p_nr].special.type == SP_trigger ) {
|
|
|
|
|
_bomb *bomb;
|
|
|
|
|
int i;
|
|
|
|
|
/* put all bombs to normal and if the timeout is higher as usual
|
|
|
|
|
set it to normal */
|
|
|
|
|
for (i = 0; i < MAX_BOMBS; i++) {
|
|
|
|
|
bomb = &bman.players[p_nr].bombs[i];
|
|
|
|
|
if (bomb->state == BS_trigger) {
|
|
|
|
|
bomb->state = BS_ticking;
|
|
|
|
|
if (bomb->to > BOMB_TIMEOUT * TIME_FACTOR)
|
|
|
|
|
bomb->to = BOMB_TIMEOUT * TIME_FACTOR; // 5 Secs * 200
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (bman.players[p_nr].special.type == SP_trigger) {
|
|
|
|
|
_bomb *bomb;
|
|
|
|
|
int i;
|
|
|
|
|
/* put all bombs to normal and if the timeout is higher as usual
|
|
|
|
|
set it to normal */
|
|
|
|
|
for (i = 0; i < MAX_BOMBS; i++) {
|
|
|
|
|
bomb = &bman.players[p_nr].bombs[i];
|
|
|
|
|
if (bomb->state == BS_trigger) {
|
|
|
|
|
bomb->state = BS_ticking;
|
|
|
|
|
if (bomb->to > BOMB_TIMEOUT * TIME_FACTOR)
|
|
|
|
|
bomb->to = BOMB_TIMEOUT * TIME_FACTOR; // 5 Secs * 200
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bman.players[p_nr].special.type = 0;
|
|
|
|
|
bman.updatestatusbar = 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
special_loop (int p_nr)
|
|
|
|
|
special_loop ()
|
|
|
|
|
{
|
|
|
|
|
_special *s = &bman.players[p_nr].special;
|
|
|
|
|
|
|
|
|
|
if (s->use) {
|
|
|
|
|
switch (bman.players[p_nr].special.type) {
|
|
|
|
|
case SP_trigger:
|
|
|
|
|
special_trigger (p_nr);
|
|
|
|
|
break;
|
|
|
|
|
case SP_row:
|
|
|
|
|
if (bman.players[p_nr].m)
|
|
|
|
|
special_row (p_nr);
|
|
|
|
|
break;
|
|
|
|
|
case SP_push:
|
|
|
|
|
if (bman.players[p_nr].m)
|
|
|
|
|
special_push (p_nr);
|
|
|
|
|
break;
|
|
|
|
|
case SP_kick:
|
|
|
|
|
break;
|
|
|
|
|
_special *s;
|
|
|
|
|
int p_nr;
|
|
|
|
|
|
|
|
|
|
for (p_nr = 0; p_nr < MAX_PLAYERS; p_nr++) {
|
|
|
|
|
s = &bman.players[p_nr].special;
|
|
|
|
|
if (s->use) {
|
|
|
|
|
switch (bman.players[p_nr].special.type) {
|
|
|
|
|
case SP_trigger:
|
|
|
|
|
special_trigger (p_nr);
|
|
|
|
|
break;
|
|
|
|
|
case SP_row:
|
|
|
|
|
if (bman.players[p_nr].m)
|
|
|
|
|
special_row (p_nr);
|
|
|
|
|
break;
|
|
|
|
|
case SP_push:
|
|
|
|
|
if (bman.players[p_nr].m)
|
|
|
|
|
special_push (p_nr);
|
|
|
|
|
break;
|
|
|
|
|
case SP_kick:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
s->use = 0;
|
|
|
|
|
}
|
|
|
|
|
s->use = 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!s->type)
|
|
|
|
|
return;
|
|
|
|
|
if (!s->type)
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
|
|
if (s->to) {
|
|
|
|
|
s->to--;
|
|
|
|
|
if (!s->to)
|
|
|
|
|
special_clear (p_nr);
|
|
|
|
|
if (s->to) {
|
|
|
|
|
s->to--;
|
|
|
|
|
if (!s->to)
|
|
|
|
|
special_clear (p_nr);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -239,5 +242,5 @@ special_loop (int p_nr)
|
|
|
|
|
void
|
|
|
|
|
special_use (int p_nr)
|
|
|
|
|
{
|
|
|
|
|
bman.players[p_nr].special.use = 1;
|
|
|
|
|
bman.players[p_nr].special.use = 1;
|
|
|
|
|
}
|
|
|
|
|