diff --git a/src/field.c b/src/field.c index 73d6c28..0436c3c 100644 --- a/src/field.c +++ b/src/field.c @@ -1,4 +1,4 @@ -/* $Id: field.c,v 1.6 2003/05/04 21:44:14 ob1kenewb Exp $ */ +/* $Id: field.c,v 1.7 2003/05/05 00:22:21 stpohle Exp $ */ /* field.c - procedures which are needed to control the field */ #include @@ -13,7 +13,7 @@ draw_stone (int x, int y) _field *stone = &bman.field[x][y]; SDL_Rect dest, src; - SDL_Surface *srcimg; + SDL_Surface *srcimg; int i, d; @@ -23,34 +23,34 @@ draw_stone (int x, int y) dest.x = x * gfx.block.x + gfx.offset.x; dest.y = y * gfx.block.y + gfx.offset.y; - src.x = 0; - - if (stone->frame == 0 || stone->type != FT_stone) { - srcimg = gfx.field[stone->type].image; - src.y = 0; - } - else { - if (stone->frameto == 0) { - if (stone->frame < gfx.field[stone->type].frames) { - stone->frame++; - stone->frameto = ANI_STONETIMEOUT; - } - } - if (stone->frameto > 0) - stone->frameto--; - if (stone->frame < gfx.field[stone->type].frames) { - src.y = stone->frame * gfx.block.y; - srcimg = gfx.field[stone->type].image; - } - else { - src.y = 0; - srcimg = gfx.field[FT_nothing].image; - } - - } - - if (stone->frame > 0) - SDL_BlitSurface (gfx.field[FT_nothing].image, NULL, gfx.screen, &dest); + src.x = 0; + + if (stone->frame == 0 || stone->type != FT_stone) { + srcimg = gfx.field[stone->type].image; + src.y = 0; + } + else { + if (stone->frameto == 0) { + if (stone->frame < gfx.field[stone->type].frames) { + stone->frame++; + stone->frameto = ANI_STONETIMEOUT; + } + } + if (stone->frameto > 0) + stone->frameto--; + if (stone->frame < gfx.field[stone->type].frames) { + src.y = stone->frame * gfx.block.y; + srcimg = gfx.field[stone->type].image; + } + else { + src.y = 0; + srcimg = gfx.field[FT_nothing].image; + } + + } + + if (stone->frame > 0) + SDL_BlitSurface (gfx.field[FT_nothing].image, NULL, gfx.screen, &dest); SDL_BlitSurface (srcimg, &src, gfx.screen, &dest); @@ -84,57 +84,52 @@ draw_field () (# correspond to a bloc and @ correspond to a stone, an espace is nothing ' ' % are commentary at the beginning of the map */ - -void field_load(FILE *map) + +void +field_load (FILE * map) { - size_t length; - char *currentline; - char tmp[MAX_FIELDSIZE_X]; - int sizex=0; - int sizey=0; - int i; - int d; - - while((currentline=fgets(tmp,MAX_FIELDSIZE_X,map))) -/* fgetln is only implemented on *BSD */ -/* while((currentline=fgetln(map,&length))) */ - { - length=strlen(currentline); - if(currentline[0]=='%') - continue; - /* now each line correspond to the field */ - else - { - for(i=0;i> 8; + y = bman.players[d].pos.y >> 8; + + bman.field[x][y].type = FT_nothing; + if (x > 1) + bman.field[x - 1][y].type = FT_nothing; + if (x < bman.fieldsize.x - 2) + bman.field[x + 1][y].type = FT_nothing; + if (y > 1) + bman.field[x][y - 1].type = FT_nothing; + if (y < bman.fieldsize.y - 2) + bman.field[x][y + 1].type = FT_nothing; + } - for (d = 0; d < 4; d++) - bman.field[x][y].ex[d] = 0; - bman.field[x][y].ex_nr = -1; - bman.field[x][y].frame = 0; - bman.field[x][y].frameto = 0; - bman.field[x][y].special = FT_nothing; + nb_try = 100; // to prevent infinite loops (maybe there are no stones) + /* put the fire powerups in the field */ + for (d = 0, x = 0, y = 0; d < GAME_SPECIAL_ITEMFIRE * fkt; d++) { + while (bman.field[x][y].type != FT_stone || bman.field[x][y].special != FT_nothing) { + x = ((float) rand () / (float) RAND_MAX) * (bman.fieldsize.x - 1); + y = ((float) rand () / (float) RAND_MAX) * (bman.fieldsize.y - 1); + nb_try--; + if (nb_try < 0) + break; + } + bman.field[x][y].special = FT_fire; + x = y = 0; + } + + nb_try = 100; + /* put the bomb powerups in the field */ + for (d = 0, x = 0, y = 0; d < GAME_SPECIAL_ITEMBOMB * fkt; d++) { + while (bman.field[x][y].type != FT_stone || bman.field[x][y].special != FT_nothing) { + x = ((float) rand () / (float) RAND_MAX) * (bman.fieldsize.x - 1); + y = ((float) rand () / (float) RAND_MAX) * (bman.fieldsize.y - 1); + nb_try--; + if (nb_try < 0) + break; + } + bman.field[x][y].special = FT_bomb; + x = y = 0; + } + + nb_try = 100; + /* put the shoe powerup in the field */ + for (d = 0, x = 0, y = 0; d < GAME_SPECIAL_ITEMSHOE * fkt; d++) { + while (bman.field[x][y].type != FT_stone || bman.field[x][y].special != FT_nothing) { + x = ((float) rand () / (float) RAND_MAX) * (bman.fieldsize.x - 1); + y = ((float) rand () / (float) RAND_MAX) * (bman.fieldsize.y - 1); + nb_try--; + if (nb_try < 0) + break; + } + bman.field[x][y].special = FT_shoe; + x = y = 0; + } + + nb_try = 100; + /* put the death ?powerups? in the field */ + for (d = 0, x = 0, y = 0; d < GAME_SPECIAL_ITEMDEATH * fkt; d++) { + while (bman.field[x][y].type != FT_stone || bman.field[x][y].special != FT_nothing) { + x = ((float) rand () / (float) RAND_MAX) * (bman.fieldsize.x - 1); + y = ((float) rand () / (float) RAND_MAX) * (bman.fieldsize.y - 1); + nb_try--; + if (nb_try < 0) + break; } - } - - /* get some free space for the playerstart position */ - for (d = 0; d < MAX_PLAYERS; d++) - if ((PS_IS_alife (bman.players[d].state)) != 0) { - x = bman.players[d].pos.x >> 8; - y = bman.players[d].pos.y >> 8; - - bman.field[x][y].type = FT_nothing; - if (x > 1) - bman.field[x-1][y].type = FT_nothing; - if (x < bman.fieldsize.x-2) - bman.field[x+1][y].type = FT_nothing; - if (y > 1) - bman.field[x][y-1].type = FT_nothing; - if (y < bman.fieldsize.y -2) - bman.field[x][y+1].type = FT_nothing; - } - - nb_try=100; - /* put the fire powerups in the field */ - for (d = 0, x = 0, y = 0; d < GAME_SPECIAL_ITEMFIRE * fkt; d++) { - while (bman.field[x][y].type != FT_stone || bman.field[x][y].special != FT_nothing) { - x = ((float) rand() / (float) RAND_MAX) * (bman.fieldsize.x-1); - y = ((float) rand() / (float) RAND_MAX) * (bman.fieldsize.y-1); - nb_try--; - if(nb_try<0) - break; - } - bman.field[x][y].special = FT_fire; - x = y = 0; - } - - nb_try=100; - /* put the bomb powerups in the field */ - for (d = 0, x = 0, y = 0; d < GAME_SPECIAL_ITEMBOMB * fkt; d++) { - while (bman.field[x][y].type != FT_stone || bman.field[x][y].special != FT_nothing) { - x = ((float) rand() / (float) RAND_MAX) * (bman.fieldsize.x-1); - y = ((float) rand() / (float) RAND_MAX) * (bman.fieldsize.y-1); - nb_try--; - if(nb_try<0) - break; - } - bman.field[x][y].special = FT_bomb; - x = y = 0; - } - - nb_try=100; - /* put the shoe powerup in the field */ - for (d = 0, x = 0, y = 0; d < GAME_SPECIAL_ITEMSHOE * fkt; d++) { - while (bman.field[x][y].type != FT_stone || bman.field[x][y].special != FT_nothing) { - x = ((float) rand() / (float) RAND_MAX) * (bman.fieldsize.x-1); - y = ((float) rand() / (float) RAND_MAX) * (bman.fieldsize.y-1); - nb_try--; - if(nb_try<0) - break; - } - bman.field[x][y].special = FT_shoe; - x = y = 0; - } - - nb_try=100; - /* put the death ?powerups? in the field */ - for (d = 0, x = 0, y = 0; d < GAME_SPECIAL_ITEMDEATH * fkt; d++) { - while (bman.field[x][y].type != FT_stone || bman.field[x][y].special != FT_nothing) { - x = ((float) rand() / (float) RAND_MAX) * (bman.fieldsize.x-1); - y = ((float) rand() / (float) RAND_MAX) * (bman.fieldsize.y-1); - nb_try--; - if(nb_try<0) - break; - } - bman.field[x][y].special = FT_death; - x = y = 0; - } + bman.field[x][y].special = FT_death; + x = y = 0; + } }