1 /***********************************************************
2 * Rocks'n'Diamonds -- McDuffin Strikes Back! *
3 *----------------------------------------------------------*
4 * (c) 1995-2002 Artsoft Entertainment *
6 * Detmolder Strasse 189 *
9 * e-mail: info@artsoft.org *
10 *----------------------------------------------------------*
12 ***********************************************************/
19 /* values for toon definition */
22 #define DWARF_XSIZE 40
23 #define DWARF_YSIZE 48
27 #define DWARF_FRAMES 8
29 #define DWARF_STEPSIZE 4
30 #define JUMPER_XSIZE 48
31 #define JUMPER_YSIZE 56
34 #define JUMPER_FRAMES 8
36 #define JUMPER_STEPSIZE 4
37 #define CLOWN_XSIZE 80
38 #define CLOWN_YSIZE 110
41 #define CLOWN_FRAMES 1
43 #define CLOWN_STEPSIZE 4
52 #define BIRD_STEPSIZE 4
54 #define GAMETOON_XSIZE TILEX
55 #define GAMETOON_YSIZE TILEY
56 #define GAMETOON_FRAMES_4 4
57 #define GAMETOON_FRAMES_8 8
58 #define GAMETOON_FPS 20
59 #define GAMETOON_STEPSIZE 4
61 struct ToonInfo toons[NUM_TOONS] =
65 DWARF_XSIZE, DWARF_YSIZE,
76 DWARF_XSIZE, DWARF_YSIZE,
87 JUMPER_XSIZE, JUMPER_YSIZE,
98 CLOWN_XSIZE, CLOWN_YSIZE,
109 BIRD_XSIZE, BIRD_YSIZE,
120 BIRD_XSIZE, BIRD_YSIZE,
131 GAMETOON_XSIZE, GAMETOON_YSIZE,
132 ((GFX_SPIELER1_LEFT - GFX_START_ROCKSHEROES) % HEROES_PER_LINE)*TILEX,
133 ((GFX_SPIELER1_LEFT - GFX_START_ROCKSHEROES) / HEROES_PER_LINE)*TILEY,
143 GAMETOON_XSIZE, GAMETOON_YSIZE,
144 ((GFX_SPIELER1_RIGHT - GFX_START_ROCKSHEROES) % HEROES_PER_LINE)*TILEX,
145 ((GFX_SPIELER1_RIGHT - GFX_START_ROCKSHEROES) / HEROES_PER_LINE)*TILEY,
155 GAMETOON_XSIZE, GAMETOON_YSIZE,
156 ((GFX_PINGUIN_LEFT - GFX_START_ROCKSHEROES) % HEROES_PER_LINE)*TILEX,
157 ((GFX_PINGUIN_LEFT - GFX_START_ROCKSHEROES) / HEROES_PER_LINE)*TILEY,
167 GAMETOON_XSIZE, GAMETOON_YSIZE,
168 ((GFX_PINGUIN_RIGHT - GFX_START_ROCKSHEROES) % HEROES_PER_LINE)*TILEX,
169 ((GFX_PINGUIN_RIGHT - GFX_START_ROCKSHEROES) / HEROES_PER_LINE)*TILEY,
179 GAMETOON_XSIZE, GAMETOON_YSIZE,
180 ((GFX_MOLE_LEFT - GFX_START_ROCKSHEROES) % HEROES_PER_LINE)*TILEX,
181 ((GFX_MOLE_LEFT - GFX_START_ROCKSHEROES) / HEROES_PER_LINE)*TILEY,
191 GAMETOON_XSIZE, GAMETOON_YSIZE,
192 ((GFX_MOLE_RIGHT - GFX_START_ROCKSHEROES) % HEROES_PER_LINE)*TILEX,
193 ((GFX_MOLE_RIGHT - GFX_START_ROCKSHEROES) / HEROES_PER_LINE)*TILEY,
203 GAMETOON_XSIZE, GAMETOON_YSIZE,
204 ((GFX_SCHWEIN_LEFT - GFX_START_ROCKSHEROES) % HEROES_PER_LINE)*TILEX,
205 ((GFX_SCHWEIN_LEFT - GFX_START_ROCKSHEROES) / HEROES_PER_LINE)*TILEY,
215 GAMETOON_XSIZE, GAMETOON_YSIZE,
216 ((GFX_SCHWEIN_RIGHT - GFX_START_ROCKSHEROES) % HEROES_PER_LINE)*TILEX,
217 ((GFX_SCHWEIN_RIGHT - GFX_START_ROCKSHEROES) / HEROES_PER_LINE)*TILEY,
227 GAMETOON_XSIZE, GAMETOON_YSIZE,
228 ((GFX_DRACHE_LEFT - GFX_START_ROCKSHEROES) % HEROES_PER_LINE)*TILEX,
229 ((GFX_DRACHE_LEFT - GFX_START_ROCKSHEROES) / HEROES_PER_LINE)*TILEY,
239 GAMETOON_XSIZE, GAMETOON_YSIZE,
240 ((GFX_DRACHE_RIGHT - GFX_START_ROCKSHEROES) % HEROES_PER_LINE)*TILEX,
241 ((GFX_DRACHE_RIGHT - GFX_START_ROCKSHEROES) / HEROES_PER_LINE)*TILEY,
251 GAMETOON_XSIZE, GAMETOON_YSIZE,
252 ((GFX_SONDE - GFX_START_ROCKSHEROES) % HEROES_PER_LINE)*TILEX,
253 ((GFX_SONDE - GFX_START_ROCKSHEROES) / HEROES_PER_LINE)*TILEY,
263 GAMETOON_XSIZE, GAMETOON_YSIZE,
264 ((GFX_SONDE - GFX_START_ROCKSHEROES) % HEROES_PER_LINE)*TILEX,
265 ((GFX_SONDE - GFX_START_ROCKSHEROES) / HEROES_PER_LINE)*TILEY,
275 static void PrepareBackbuffer()
277 /* Fill empty backbuffer for animation functions */
278 if (setup.direct_draw && game_status == PLAYING)
282 SetDrawtoField(DRAW_BACKBUFFER);
284 for(xx=0; xx<SCR_FIELDX; xx++)
285 for(yy=0; yy<SCR_FIELDY; yy++)
286 DrawScreenField(xx,yy);
289 SetDrawtoField(DRAW_DIRECT);
292 if (setup.soft_scrolling && game_status == PLAYING)
294 int fx = FX, fy = FY;
296 fx += (ScreenMovDir & (MV_LEFT|MV_RIGHT) ? ScreenGfxPos : 0);
297 fy += (ScreenMovDir & (MV_UP|MV_DOWN) ? ScreenGfxPos : 0);
299 BlitBitmap(fieldbuffer, backbuffer, fx,fy, SXSIZE,SYSIZE, SX,SY);
303 boolean ToonNeedsRedraw()
305 return (game_status == HELPSCREEN ||
306 (game_status == MAINMENU &&
307 ((redraw_mask & REDRAW_MICROLEVEL) ||
308 (redraw_mask & REDRAW_MICROLABEL))));
313 InitToonScreen(pix, pix[PIX_DB_DOOR],
314 BackToFront, PrepareBackbuffer, ToonNeedsRedraw,
316 REAL_SX, REAL_SY, FULL_SXSIZE, FULL_SYSIZE);