diff --git a/src/gfx.c b/src/gfx.c index 99f5add..6c15d91 100644 --- a/src/gfx.c +++ b/src/gfx.c @@ -1,4 +1,4 @@ -/* $Id: gfx.c,v 1.24 2003/07/22 18:29:08 stpohle Exp $ */ +/* $Id: gfx.c,v 1.25 2003/07/22 23:15:03 stpohle Exp $ */ /* gfx.c */ #include "bomberclone.h" @@ -39,19 +39,19 @@ gfx_load_players (int sx, int sy) else { /* load the game player image */ - gfx.players[i].size.y = sy * 2; - gfx.players[i].size.x = (tmpimage->w / 4) * sfkt; + gfx.players[i].ani.h = sy * 2; + gfx.players[i].ani.w = (tmpimage->w / 4) * sfkt; gfx.players[i].ani.frames = tmpimage->h / GFX_PLAYERIMGSIZE_Y; tmpimage1 = - scale_image (tmpimage, gfx.players[i].size.x * 4, - gfx.players[i].ani.frames * gfx.players[i].size.y); + scale_image (tmpimage, gfx.players[i].ani.w * 4, + gfx.players[i].ani.frames * gfx.players[i].ani.h); getRGBpixel (tmpimage1, 0, 0, &r, &g, &b); SDL_SetColorKey (tmpimage1, SDL_SRCCOLORKEY, SDL_MapRGB (tmpimage1->format, r, g, b)); gfx.players[i].ani.image = SDL_DisplayFormat (tmpimage1); SDL_FreeSurface (tmpimage1); /* calculate the numbers of images for the animation */ - gfx.players[i].offset.x = (sx - gfx.players[i].size.x) / 2; + gfx.players[i].offset.x = (sx - gfx.players[i].ani.w) / 2; gfx.players[i].offset.y = -sy; /* load the smal image */ @@ -261,6 +261,7 @@ redraw_logo (int x, int y, int w, int h) src.x = x; src.y = y; SDL_BlitSurface (gfx.logo, &src, gfx.screen, &dest); + gfx_blitupdaterectadd (&dest); }; diff --git a/src/gfx.h b/src/gfx.h index 0c37445..0a85281 100644 --- a/src/gfx.h +++ b/src/gfx.h @@ -1,10 +1,11 @@ -/* $Id: gfx.h,v 1.14 2003/07/22 18:29:08 stpohle Exp $ */ +/* $Id: gfx.h,v 1.15 2003/07/22 23:15:31 stpohle Exp $ */ #ifndef _GFX_H_ #define _GFX_H_ #define SCALE_MAXRES 10000 #define GFX_IMGSIZE 64 +#define GFX_IMGBIGSIZE 96 #define GFX_PLAYERIMGSIZE_Y 128 #include "basic.h" @@ -22,13 +23,15 @@ struct __gfxblit { struct __gfxani { SDL_Surface *image; int frames; // how many single frames (image -> heigh / (1.5 * gamestyle.height)) + int w; // size of a single frame + int h; } typedef _gfxani; struct __gfxplayer { _gfxani ani; _point offset; - _point size; // height of the image.. needed for faster access. +// _point size; // height of the image.. needed for faster access. _point smal_size; SDL_Surface *smal_image; // smal size of the animation } typedef _gfxplayer; diff --git a/src/multiwait.c b/src/multiwait.c index ce0d561..f0f3697 100644 --- a/src/multiwait.c +++ b/src/multiwait.c @@ -105,7 +105,7 @@ mw_draw_status () dest.x = x1 * 320; dest.y = y - 4; - SDL_BlitSurface (bman.players[pnr].gfx->smal_image, &src, gfx.screen, &dest); + gfx_blit (bman.players[pnr].gfx->smal_image, &src, gfx.screen, &dest, 0xFFFF); } sprintf (text, " %10s %2d %2d", bman.players[pnr].name, bman.players[pnr].wins, @@ -151,17 +151,17 @@ mw_draw_gfxselect (int selgfx) if (bman.players[bman.p_nr].gfx_nr == -1) { /* draw selection */ for (i = 0; i < MAX_PLAYERS; i++) { - dest.w = src.w = gfx.players[i].size.x; - dest.h = src.h = gfx.players[i].size.y; + dest.w = src.w = gfx.players[i].ani.w; + dest.h = src.h = gfx.players[i].ani.h; - dest.x = i * xstep + (xstep >> 1) - (gfx.players[i].size.x >> 1); + dest.x = i * xstep + (xstep >> 1) - (gfx.players[i].ani.w >> 1); dest.y = mw_player + 8; redraw_logo (dest.x, dest.y, dest.w, dest.h); - src.x = 3 * gfx.players[i].size.x; + src.x = 3 * gfx.players[i].ani.w; if (i == selgfx) - src.y = mw_frame * gfx.players[i].size.y; + src.y = mw_frame * gfx.players[i].ani.h; else src.y = 0; @@ -182,27 +182,27 @@ mw_draw_gfxselect (int selgfx) mw_frame = 0; } - SDL_BlitSurface (gfx.players[i].ani.image, &src, gfx.screen, &dest); + gfx_blit (gfx.players[i].ani.image, &src, gfx.screen, &dest, 0); } else - SDL_BlitSurface (mw_plgfx[i], &src, gfx.screen, &dest); + gfx_blit (mw_plgfx[i], &src, gfx.screen, &dest, 0); } } } else { /* draw selected players */ for (i = 0; i < MAX_PLAYERS; i++) { - dest.w = src.w = gfx.players[i].size.x; - dest.h = src.h = gfx.players[i].size.y; + dest.w = src.w = gfx.players[i].ani.w; + dest.h = src.h = gfx.players[i].ani.h; - dest.x = i * xstep + (xstep >> 1) - (gfx.players[i].size.x >> 1); + dest.x = i * xstep + (xstep >> 1) - (gfx.players[i].ani.w >> 1); dest.y = mw_player + 8; redraw_logo (dest.x, dest.y, dest.w, dest.h); - src.x = 3 * gfx.players[i].size.x; + src.x = 3 * gfx.players[i].ani.w; if (i == selgfx) - src.y = mw_frame * gfx.players[i].size.y; + src.y = mw_frame * gfx.players[i].ani.h; else src.y = 0; @@ -211,9 +211,9 @@ mw_draw_gfxselect (int selgfx) if (select < MAX_PLAYERS && select >= 0) { /* this player have been selected */ if (bman.players[bman.p_nr].gfx_nr == i) - SDL_BlitSurface (gfx.players[i].ani.image, &src, gfx.screen, &dest); + gfx_blit (gfx.players[i].ani.image, &src, gfx.screen, &dest, 0); else - SDL_BlitSurface (mw_plgfx[i], &src, gfx.screen, &dest); + gfx_blit (mw_plgfx[i], &src, gfx.screen, &dest, 0); } } } @@ -221,10 +221,10 @@ mw_draw_gfxselect (int selgfx) dest.x = 0; dest.y = mw_player; dest.w = gfx.res.x; - dest.h = 8 + gfx.players[0].size.y; + dest.h = 8 + gfx.players[0].ani.h; gfx_blitupdaterectdraw (&dest); - mw_chat = mw_player + 8 + gfx.players[0].size.y; + mw_chat = mw_player + 8 + gfx.players[0].ani.h; } @@ -294,6 +294,7 @@ wait_for_players () mw_draw_chat (); } + gfx_blitdraw (); gfx_blitupdaterectdraw (); /* do the keyboard handling */ diff --git a/src/player.c b/src/player.c index 5d257b5..2695a59 100644 --- a/src/player.c +++ b/src/player.c @@ -21,16 +21,16 @@ draw_player (_player * player) 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.w = src.w = player->gfx->ani.w; + dest.h = src.h = player->gfx->ani.h; 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; + src.x = player->d * player->gfx->ani.w; + src.y = player->frame * player->gfx->ani.h; gfx_blit (player->gfx->ani.image, &src, gfx.screen, &dest, player->pos.y + 128); @@ -56,7 +56,7 @@ draw_player (_player * player) else { /* player is dead */ dest.w = src.w = gfx.dead.image->w; - dest.h = src.h = player->gfx->size.y; + dest.h = src.h = player->gfx->ani.h; dest.x = gfx.offset.x + player->gfx->offset.x + (player->pos.x >> 8) * gfx.block.x + diff --git a/src/tileset.c b/src/tileset.c index c4e1430..74efa82 100644 --- a/src/tileset.c +++ b/src/tileset.c @@ -1,4 +1,4 @@ -/* $Id: tileset.c,v 1.3 2003/07/22 18:29:08 stpohle Exp $ */ +/* $Id: tileset.c,v 1.4 2003/07/22 23:15:31 stpohle Exp $ */ /* load and select tilesets */ #include "bomberclone.h" @@ -151,54 +151,64 @@ tileset_load (char *tilesetname) for (i = 0; i < FT_max; i++) { switch (i) { case (FT_nothing): - sprintf (filename, "background.bmp"); + sprintf (filename, "background"); break; case (FT_stone): - sprintf (filename, "stone.bmp"); + sprintf (filename, "stone"); break; case (FT_block): - sprintf (filename, "block.bmp"); + sprintf (filename, "block"); break; case (FT_death): - sprintf (filename, "pwdeath.bmp"); + sprintf (filename, "pwdeath"); break; case (FT_bomb): - sprintf (filename, "pwbomb.bmp"); + sprintf (filename, "pwbomb"); break; case (FT_fire): - sprintf (filename, "pwfire.bmp"); + sprintf (filename, "pwfire"); break; case (FT_shoe): - sprintf (filename, "pwshoe.bmp"); + sprintf (filename, "pwshoe"); break; case (FT_sp_trigger): - sprintf (filename, "sptrigger.bmp"); + sprintf (filename, "sptrigger"); break; case (FT_sp_row): - sprintf (filename, "sprow.bmp"); + sprintf (filename, "sprow"); break; case (FT_sp_push): - sprintf (filename, "sppush.bmp"); + sprintf (filename, "sppush"); break; case (FT_sp_kick): - sprintf (filename, "spkick.bmp"); + sprintf (filename, "spkick"); continue; // remove this if you find a kick image break; } if (i != FT_mixed) { - sprintf (fullname, "%s/tileset/%s/%s", bman.datapath, tileset, filename); + sprintf (fullname, "%s/tileset/%s/%s.bmp", bman.datapath, tileset, filename); + gfx.field[i].w = GFX_IMGSIZE; + gfx.field[i].h = GFX_IMGSIZE; tmpimage = SDL_LoadBMP (fullname); if (tmpimage == NULL) { - sprintf (fullname, "%s/tileset/default/%s", bman.datapath, filename); - tmpimage = SDL_LoadBMP (fullname); - if (tmpimage == NULL) { - printf ("Can't load image: %s\n", SDL_GetError ()); - exit (1); - } + sprintf (fullname, "%s/tileset/%s/%s96.bmp", bman.datapath, tileset, filename); + gfx.field[i].h = GFX_IMGBIGSIZE; + tmpimage = SDL_LoadBMP (fullname); + if (tmpimage == NULL) { + sprintf (fullname, "%s/tileset/default/%s.bmp", bman.datapath, filename); + gfx.field[i].h = GFX_IMGSIZE; + tmpimage = SDL_LoadBMP (fullname); + if (tmpimage == NULL) { + printf ("Can't load image: %s\n", SDL_GetError ()); + exit (1); + } + } } - gfx.field[i].frames = tmpimage->h / GFX_IMGSIZE; - tmpimage1 = scale_image (tmpimage, (tmpimage->w / GFX_IMGSIZE) * gfx.block.x, - gfx.field[i].frames * gfx.block.y); + gfx.field[i].frames = tmpimage->h / gfx.field[i].h; + gfx.field[i].h = ((float) ((float)gfx.field[i].h / (float)GFX_IMGSIZE) * (float)gfx.block.y); + gfx.field[i].w = (gfx.field[i].w / GFX_IMGSIZE) * gfx.block.x; + tmpimage1 = scale_image (tmpimage, (tmpimage->w / gfx.field[i].w) * gfx.block.x, + gfx.field[i].frames * gfx.field[i].h); if (i == FT_nothing || i == FT_block || i == FT_stone) r = g = b = 255; else