Display *display;
Visual *visual;
int screen;
-Window window;
-GC gc, clip_gc[NUM_PIXMAPS], tile_clip_gc;
-Pixmap pix[NUM_PIXMAPS];
-Pixmap clipmask[NUM_PIXMAPS], tile_clipmask[NUM_TILES];
+DrawWindow window;
+GC gc, clip_gc[NUM_BITMAPS], tile_clip_gc;
+Bitmap pix[NUM_BITMAPS];
+Bitmap pix_masked[NUM_BITMAPS], tile_masked[NUM_TILES];
+Pixmap clipmask[NUM_BITMAPS], tile_clipmask[NUM_TILES];
#ifdef USE_XPM_LIBRARY
XpmAttributes xpm_att[NUM_PICTURES];
#endif
-Drawable drawto, drawto_field, backbuffer, fieldbuffer;
+DrawBuffer drawto, drawto_field, backbuffer, fieldbuffer;
Colormap cmap;
int sound_pipe[2];
unsigned long Elementeigenschaften1[MAX_ELEMENTS];
unsigned long Elementeigenschaften2[MAX_ELEMENTS];
-int level_nr, leveldir_nr, num_leveldirs;
+int level_nr;
int lev_fieldx,lev_fieldy, scroll_x,scroll_y;
int FX = SX, FY = SY, ScrollStepSize;
boolean network_player_action_received = FALSE;
-struct LevelDirInfo leveldir[MAX_LEVDIR_ENTRIES];
+struct LevelDirInfo *leveldir_first = NULL, *leveldir_current = NULL;
struct LevelInfo level;
struct PlayerInfo stored_player[MAX_PLAYERS], *local_player = NULL;
struct HiScore highscore[MAX_SCORE_ENTRIES];
struct TapeInfo tape;
struct OptionInfo options;
struct SetupInfo setup;
-struct SetupFileList *setup_list = NULL;
-struct SetupFileList *level_setup_list = NULL;
struct GameInfo game;
struct GlobalInfo global;
"dark yam yam", /* 60 */
"magic wall (BD style)",
"invisible steel wall",
- "dynabomb",
+ "-",
"increases number of bombs",
"increases explosion size",
"increases power of explosion",
"unknown",
"unknown",
"unknown",
- "unknown",
- "unknown",
+ "normal wall (BD style)",
+ "rock (BD style)",
"open exit",
"unknown",
"amoeba",
"letter ''",
"letter ''",
"letter ''",
- "growing wall (horizontally)", /* 200 */
- "growing wall (vertically)",
+ "growing wall (horizontal)", /* 200 */
+ "growing wall (vertical)",
"growing wall (all directions)",
"unused",
"unused",
"yellow disk",
"terminal",
"red disk", /* 230 */
- "port (vertically)",
- "port (horizontally)",
+ "port (vertical)",
+ "port (horizontal)",
"port (all directions)",
"electron",
"buggy base",
"white door", /* 260 */
"gray door (opened by white key)",
"white key",
- "force field",
+ "shield (passive)",
"extra time",
"switch gate (open)",
"switch gate (closed)",
- "switch for switch gate (open)",
- "switch for switch gate (closed)",
- "time gate",
- "time gate with magic wheel", /* 270 */
+ "switch for switch gate",
+ "switch for switch gate",
+ "-",
+ "-", /* 270 */
"red conveyor belt (left)",
"red conveyor belt (middle)",
"red conveyor belt (right)",
"switch for blue conveyor belt (right)",
"land mine",
"mail envelope",
- "light switch",
+ "light switch (off)",
+ "light switch (on)",
"sign (exclamation)",
- "sign (radio activity)",
- "sign (stop)", /* 300 */
+ "sign (radio activity)", /* 300 */
+ "sign (stop)",
"sign (wheel chair)",
"sign (parking)",
"sign (one way)",
"sign (round)",
"sign (exit)",
"sign (yin yang)",
- "sign (other)",
- "mole (starts moving left)", /* 310 */
+ "sign (other)", /* 310 */
+ "mole (starts moving left)",
"mole (starts moving right)",
"mole (starts moving up)",
"mole (starts moving down)",
- "steel (?)",
+ "steel wall (slanted)",
"invisible sand",
- "-",
- "-",
- "-",
+ "dx unknown 15",
+ "dx unknown 42",
"-",
"-", /* 320 */
- "-",
- "-",
- "-",
- "-",
+ "shield (active, kills enemies)",
+ "time gate (open)",
+ "time gate (closed)",
+ "switch for time gate",
+ "switch for time gate",
+ "balloon",
+ "send balloon to the left",
+ "send balloon to the right",
+ "send balloon up",
+ "send balloon down", /* 330 */
+ "send balloon in any direction",
+ "steel wall",
+ "steel wall",
+ "steel wall",
+ "steel wall",
+ "normal wall",
+ "normal wall",
+ "normal wall",
+ "normal wall",
+ "normal wall", /* 340 */
+ "normal wall",
+ "normal wall",
+ "normal wall",
+ "tube (all directions)",
+ "tube (vertical)",
+ "tube (horizontal)",
+ "tube (vertical & left)",
+ "tube (vertical & right)",
+ "tube (horizontal & up)",
+ "tube (horizontal & down)", /* 350 */
+ "tube (left & up)",
+ "tube (left & down)",
+ "tube (right & up)",
+ "tube (right & down)",
+ "spring",
+ "trap",
+ "stable bomb (DX style)",
"-"
/*
*/
};
+
+
+/* +-----------------------------------------------------------------------+ */
+/* | SDL TEST STUFF | */
+/* +-----------------------------------------------------------------------+ */
+
+#ifdef USE_SDL_LIBRARY
+
+SDL_Surface *sdl_screen, *sdl_image_tmp, *sdl_image, *sdl_image_masked;
+SDL_Surface *sdl_image2_tmp, *sdl_image2, *sdl_image2_masked;
+
+void TEST_SDL_BLIT_RECT(int x, int y)
+{
+ SDL_Rect rect_src, rect_dst;
+
+ SDLCopyArea(pix_masked[PIX_HEROES], window,
+ 8 * TILEX, 8 * TILEY, TILEX, TILEY, x, y);
+ return;
+
+ rect_src.x = 8 * TILEX;
+ rect_src.y = 8 * TILEY;
+ rect_src.w = TILEX;
+ rect_src.h = TILEY;
+
+ rect_dst.x = x;
+ rect_dst.y = y;
+ rect_dst.w = TILEX;
+ rect_dst.h = TILEY;
+
+ SDL_BlitSurface(sdl_image2_masked, &rect_src, sdl_screen, &rect_dst);
+ SDL_UpdateRect(sdl_screen, x, y, TILEX, TILEY);
+}
+
+void TEST_SDL_INIT_DISPLAY()
+{
+ SDL_Rect rect_src, rect_dst;
+
+ if (SDL_Init(SDL_INIT_VIDEO) < 0)
+ {
+ fprintf(stderr, "SDL_Init() failed: %s\n", SDL_GetError());
+ exit(1);
+ }
+
+ /* automatically cleanup SDL stuff after exit() */
+ atexit(SDL_Quit);
+
+ if ((sdl_screen = SDL_SetVideoMode(WIN_XSIZE, WIN_YSIZE, 16, SDL_HWSURFACE))
+ == NULL)
+ {
+ fprintf(stderr, "SDL_SetVideoMode() failed: %s\n", SDL_GetError());
+ exit(1);
+ }
+
+ SDL_WM_SetCaption(WINDOW_TITLE_STRING, WINDOW_TITLE_STRING);
+
+ if ((sdl_image_tmp = IMG_Load("graphics/RocksScreen.pcx")) == NULL)
+ {
+ fprintf(stderr, "IMG_Load() failed: %s\n", SDL_GetError());
+ exit(1);
+ }
+
+ sdl_image = SDL_DisplayFormat(sdl_image_tmp);
+
+ SDL_SetColorKey(sdl_image_tmp, SDL_SRCCOLORKEY,
+ SDL_MapRGB(sdl_image_tmp->format, 0x00, 0x00, 0x00));
+ sdl_image_masked = SDL_DisplayFormat(sdl_image_tmp);
+
+ SDL_FreeSurface(sdl_image_tmp);
+
+ if ((sdl_image2_tmp = IMG_Load("graphics/RocksHeroes.pcx")) == NULL)
+ {
+ fprintf(stderr, "IMG_Load() failed: %s\n", SDL_GetError());
+ exit(1);
+ }
+
+ sdl_image2 = SDL_DisplayFormat(sdl_image2_tmp);
+ SDL_FreeSurface(sdl_image2_tmp);
+
+ sdl_image2_masked = SDL_DisplayFormat(sdl_image2);
+ SDL_SetColorKey(sdl_image2_masked, SDL_SRCCOLORKEY,
+ SDL_MapRGB(sdl_image2_masked->format, 0x00, 0x00, 0x00));
+
+ rect_src.x = 0;
+ rect_src.y = 0;
+ rect_src.w = sdl_image->w;
+ rect_src.h = sdl_image->h;
+
+ rect_dst.x = 0;
+ rect_dst.y = 0;
+ rect_dst.w = sdl_image->w;
+ rect_dst.h = sdl_image->h;
+
+ SDL_BlitSurface(sdl_image, &rect_src, sdl_screen, &rect_dst);
+
+ /*
+ SDL_UpdateRect(sdl_screen, 0, 0, WIN_XSIZE, WIN_YSIZE);
+ */
+ /*
+ SDL_UpdateRect(sdl_screen, 0, 0, 0, 0);
+ */
+ SDL_Flip(sdl_screen);
+
+ /*
+ SDL_Delay(5000);
+ */
+}
+
+void TEST_SDL_EVENT_LOOP()
+{
+ int quit_loop = 0;
+
+ SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE);
+
+ /*
+ while (!quit_loop && SDL_WaitEvent(&event) >=0)
+ */
+
+ while (!quit_loop)
+ {
+ SDL_Event event;
+
+ if (SDL_PollEvent(&event))
+ {
+ /* hier werden die Ereignisse behandelt */
+ switch(event.type)
+ {
+ case SDL_QUIT:
+ {
+ quit_loop = 1;
+ break;
+ }
+
+ case SDL_MOUSEBUTTONDOWN:
+ {
+ int x = event.button.x;
+ int y = event.button.y;
+
+ SDL_EventState(SDL_MOUSEMOTION, SDL_ENABLE);
+
+ TEST_SDL_BLIT_RECT(x, y);
+
+ printf("SDL_MOUSEBUTTONDOWN(%d, %d)\n", x, y);
+ break;
+ }
+
+ case SDL_MOUSEBUTTONUP:
+ {
+ int x = event.button.x;
+ int y = event.button.y;
+
+ SDL_EventState(SDL_MOUSEMOTION, SDL_IGNORE);
+
+ printf("SDL_MOUSEBUTTONUP(%d, %d)\n", x, y);
+ break;
+ }
+
+ case SDL_MOUSEMOTION:
+ {
+ int x = event.motion.x;
+ int y = event.motion.y;
+
+ TEST_SDL_BLIT_RECT(x, y);
+
+ printf("SDL_MOUSEMOTION(%d, %d)\n", x, y);
+ break;
+ }
+
+ default:
+ break;
+ }
+ }
+
+ if (!SDL_PollEvent(NULL)) /* delay only if no pending events */
+ {
+ printf("waiting...\n");
+ Delay(100);
+ }
+ }
+
+ SDL_FreeSurface(sdl_image);
+ SDL_Quit();
+}
+
+#endif /* USE_SDL_LIBRARY */
+
+/* +-----------------------------------------------------------------------+ */
+/* | SDL TEST STUFF | */
+/* +-----------------------------------------------------------------------+ */
+
+
+
int main(int argc, char *argv[])
{
program_name = (strrchr(argv[0],'/') ? strrchr(argv[0],'/') + 1 : argv[0]);
GetOptions(argv);
OpenAll(argc,argv);
+
+#if 0
+#ifdef USE_SDL_LIBRARY
+ TEST_SDL_BLIT_RECT((WIN_XSIZE - TILEX)/2, (WIN_YSIZE - TILEY)/2);
+ TEST_SDL_EVENT_LOOP();
+ exit(0);
+#endif
+#endif
+
EventLoop();
CloseAllAndExit(0);
exit(0); /* to keep compilers happy */