diff --git a/ChangeLog b/ChangeLog index 7e88345..88dfff0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,7 @@ -$Id: ChangeLog,v 1.46 2003/12/28 19:07:37 stpohle Exp $ +$Id: ChangeLog,v 1.47 2004/01/02 13:54:47 stpohle Exp $ + +- Fixed: If the player is move on a field where is + currently an explosion then will the player die. - wrote new OpenGameCache Server for this game and other games. This server is working almost the same diff --git a/TODO b/TODO index 7e4cf8c..8fe973b 100644 --- a/TODO +++ b/TODO @@ -1,12 +1,9 @@ -$Id: TODO,v 1.32 2003/12/31 01:09:58 stpohle Exp $ +$Id: TODO,v 1.33 2004/01/02 13:54:47 stpohle Exp $ * player position at start up need some little work it is still happening that player just die because they could not been set. -* check if the player is on a field with - an running explosion - - better configuration for home made map files - opetion that you can have only one illness.. if you catch diff --git a/include/bomberclone.h b/include/bomberclone.h index 8f1ff72..8e9d705 100644 --- a/include/bomberclone.h +++ b/include/bomberclone.h @@ -1,4 +1,4 @@ -/* $Id: bomberclone.h,v 1.9 2003/12/24 02:38:15 stpohle Exp $ */ +/* $Id: bomberclone.h,v 1.10 2004/01/02 13:54:48 stpohle Exp $ */ /* bomberclone.h */ #ifndef _BOMBERCLONE_H_ @@ -201,6 +201,7 @@ 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_calcstep (_player * pl); extern void player_calcpos (); extern void player_set_ilness (_player *p, int t); diff --git a/src/player.c b/src/player.c index 0659a02..2879f65 100644 --- a/src/player.c +++ b/src/player.c @@ -1,4 +1,5 @@ -/* player.c - everything what have to do with the player */ +/* $Id: player.c,v 1.55 2004/01/02 13:54:48 stpohle Exp $ + * player.c - everything what have to do with the player */ #include #include "bomberclone.h" @@ -213,7 +214,7 @@ player_check_powerup (int p_nr) int check_field (short int x, short int y) { - int res = 0; + int res = 0, i; if (map.field[x][y].type != FT_stone && map.field[x][y].type != FT_block) res = 1; @@ -222,6 +223,18 @@ check_field (short int x, short int y) } +/* check if there is any explosion on this field */ +int check_exfield (short int x, short int y) { + int res = 1, i; + + for (i = 0; (i < 4 && res == 1); i++) + if (map.field[x][y].ex[i].count > 0) + res = 0; + + return res; +} + + /* make only a smal step until i can go around the corner return the rest speed for this move */ int @@ -400,15 +413,15 @@ move_player (int pl_nr) /* check the players position */ if ((CUTINT(p->pos.x) > EXPLOSION_SAVE_DISTANCE && (p->d == left || p->d == right)) - && (!check_field (p->pos.x + 1.0f, p->pos.y))) + && (!check_exfield (p->pos.x + 1.0f, p->pos.y))) player_died (p, -1); if ((CUTINT(p->pos.y) > EXPLOSION_SAVE_DISTANCE && (p->d == up || p->d == down)) - && (!check_field (p->pos.x, p->pos.y + 1.0f))) + && (!check_exfield (p->pos.x, p->pos.y + 1.0f))) player_died (p, -1); if (((CUTINT(p->pos.x) < (1.0f - EXPLOSION_SAVE_DISTANCE) && (p->d == left || p->d == right)) || (CUTINT(p->pos.y) < (1.0f - EXPLOSION_SAVE_DISTANCE) && (p->d == up || p->d == down))) - && (!check_field (p->pos.x, p->pos.y))) + && (!check_exfield (p->pos.x, p->pos.y))) player_died (p, -1); } };