/***********************************************************
-* Rocks'n'Diamonds -- McDuffin Strikes Back! *
+* Rocks'n'Diamonds -- McDuffin Strikes Back! *
*----------------------------------------------------------*
-* (c) 1995-98 Artsoft Entertainment *
-* Holger Schemel *
-* Oststrasse 11a *
-* 33604 Bielefeld *
-* phone: ++49 +521 290471 *
-* email: aeglos@valinor.owl.de *
+* (c) 1995-2002 Artsoft Entertainment *
+* Holger Schemel *
+* Detmolder Strasse 189 *
+* 33604 Bielefeld *
+* Germany *
+* e-mail: info@artsoft.org *
*----------------------------------------------------------*
-* main.c *
+* main.c *
***********************************************************/
+#include "libgame/libgame.h"
+
#include "main.h"
#include "init.h"
#include "game.h"
#include "events.h"
-#include "sound.h"
-#include "joystick.h"
-#include "misc.h"
-#if defined(PLATFORM_MSDOS)
-#include <fcntl.h>
+GC tile_clip_gc;
+#if 0
+Bitmap *pix[NUM_BITMAPS];
#endif
-
-Display *display;
-Visual *visual;
-int screen;
-DrawWindow window = None;
-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];
-
-DrawBuffer drawto, drawto_field, backbuffer, fieldbuffer;
-Colormap cmap;
-
-char *sound_device_name = AUDIO_DEVICE;
-
-int joystick_device = 0;
-char *joystick_device_name[MAX_PLAYERS] =
-{
- DEV_JOYSTICK_0,
- DEV_JOYSTICK_1,
- DEV_JOYSTICK_2,
- DEV_JOYSTICK_3
-};
-
-char *program_name = NULL;
+Bitmap *bitmap_db_field, *bitmap_db_door;
+Pixmap tile_clipmask[NUM_TILES];
+DrawBuffer *fieldbuffer;
+DrawBuffer *drawto_field;
int game_status = MAINMENU;
boolean level_editor_test_game = FALSE;
boolean network_playing = FALSE;
-int button_status = MB_NOT_PRESSED;
-boolean motion_status = FALSE;
+
int key_joystick_mapping = 0;
-int global_joystick_status = JOYSTICK_STATUS;
-int joystick_status = JOYSTICK_STATUS;
-boolean fullscreen_available = FULLSCREEN_STATUS;
-boolean fullscreen_enabled = FALSE;
boolean redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE];
int redraw_x1 = 0, redraw_y1 = 0;
-int redraw_mask;
-int redraw_tiles;
short Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
short Ur[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
short Store[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
short Store2[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
short StorePlayer[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
-short Frame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
boolean Stop[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
short JustStopped[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
short AmoebaNr[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
short AmoebaCnt[MAX_NUM_AMOEBA], AmoebaCnt2[MAX_NUM_AMOEBA];
+short ExplodePhase[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+short ExplodeField[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
unsigned long Elementeigenschaften1[MAX_ELEMENTS];
unsigned long Elementeigenschaften2[MAX_ELEMENTS];
-int level_nr;
+int GfxFrame[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+short GfxAction[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
+
int lev_fieldx,lev_fieldy, scroll_x,scroll_y;
int FX = SX, FY = SY, ScrollStepSize;
int ScreenMovDir = MV_NO_MOVING, ScreenMovPos = 0;
int ScreenGfxPos = 0;
-int BorderElement = EL_BETON;
+int BorderElement = EL_STEELWALL;
int GameFrameDelay = GAME_FRAME_DELAY;
int FfwdFrameDelay = FFWD_FRAME_DELAY;
int BX1 = 0, BY1 = 0, BX2 = SCR_FIELDX-1, BY2 = SCR_FIELDY-1;
int SBY_Upper, SBY_Lower;
int ZX,ZY, ExitX,ExitY;
int AllPlayersGone;
-int FrameCounter, TimeFrames, TimePlayed, TimeLeft;
+
+int TimeFrames, TimePlayed, TimeLeft;
boolean network_player_action_received = FALSE;
-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 SampleInfo Sound[NUM_SOUNDS];
struct TapeInfo tape;
-struct OptionInfo options;
struct SetupInfo setup;
struct GameInfo game;
-struct AudioSystemInfo audio;
struct GlobalInfo global;
-/* data needed for playing sounds */
+/* filenames of sound effects */
char *sound_name[NUM_SOUNDS] =
{
- "alchemy",
- "amoebe",
- "antigrav",
- "autsch",
- "blurb",
- "bong",
- "buing",
- "chase",
- "czardasz",
- "deng",
- "fuel",
- "gong",
- "halloffame",
- "holz",
- "hui",
- "kabumm",
- "kink",
- "klapper",
- "kling",
- "klopf",
- "klumpf",
- "knack",
- "knurk",
- "krach",
- "lachen",
- "laser",
- "miep",
- "network",
- "njam",
- "oeffnen",
- "pling",
- "pong",
- "pusch",
- "quiek",
- "quirk",
- "rhythmloop",
- "roaaar",
- "roehr",
- "rumms",
- "schlopp",
- "schlurf",
- "schrff",
- "schwirr",
- "sirr",
- "slurp",
- "sproing",
- "twilight",
- "tyger",
- "voyager",
- "warnton",
- "whoosh",
- "zisch",
- "base",
- "infotron",
- "zonkdown",
- "zonkpush",
- "bug",
- "boom",
- "booom",
- "exit",
- "empty",
- "gate"
+ "amoebe.wav",
+ "antigrav.wav",
+ "autsch.wav",
+ "blurb.wav",
+ "bong.wav",
+ "buing.wav",
+ "deng.wav",
+ "fuel.wav",
+ "gong.wav",
+ "halloffame.wav",
+ "holz.wav",
+ "hui.wav",
+ "kabumm.wav",
+ "kink.wav",
+ "klapper.wav",
+ "kling.wav",
+ "klopf.wav",
+ "klumpf.wav",
+ "knack.wav",
+ "knurk.wav",
+ "krach.wav",
+ "lachen.wav",
+ "laser.wav",
+ "miep.wav",
+ "njam.wav",
+ "oeffnen.wav",
+ "pling.wav",
+ "pong.wav",
+ "pusch.wav",
+ "quiek.wav",
+ "quirk.wav",
+ "rhythmloop.wav",
+ "roaaar.wav",
+ "roehr.wav",
+ "rumms.wav",
+ "schlopp.wav",
+ "schlurf.wav",
+ "schrff.wav",
+ "schwirr.wav",
+ "sirr.wav",
+ "slurp.wav",
+ "sproing.wav",
+ "warnton.wav",
+ "whoosh.wav",
+ "zisch.wav",
+ "base.wav",
+ "infotron.wav",
+ "zonkdown.wav",
+ "zonkpush.wav",
+ "bug.wav",
+ "boom.wav",
+ "booom.wav",
+ "exit.wav",
+ "empty.wav",
+ "gate.wav"
};
-/* background music */
-int background_loop[] =
+/* this is used to reduce memory usage of the different animation types */
+int graphics_action_mapping[] =
{
- SND_ALCHEMY,
- SND_CHASE,
- SND_NETWORK,
- SND_CZARDASZ,
- SND_TYGER,
- SND_VOYAGER,
- SND_TWILIGHT
+ 0, /* GFX_ACTION_DEFAULT (0) */
+ 0, /* GFX_ACTION_WAITING (1) */
+
+ 1, /* GFX_ACTION_FALLING (2) */
+ 2, /* GFX_ACTION_MOVING (3) */
+ 3, /* GFX_ACTION_DIGGING (4) */
+ 4, /* GFX_ACTION_SNAPPING (5) */
+ 5, /* GFX_ACTION_COLLECTING (6) */
+ 6, /* GFX_ACTION_PUSHING (7) */
+
+ 7, /* GFX_ACTION_PASSING (8) */
+ 7, /* GFX_ACTION_IMPACT (9) */
+ 7, /* GFX_ACTION_CRACKING (10) */
+ 7, /* GFX_ACTION_BREAKING (11) */
+ 7, /* GFX_ACTION_ACTIVATING (12) */
+ 7, /* GFX_ACTION_OPENING (13) */
+ 7, /* GFX_ACTION_CLOSING (14) */
+ 7, /* GFX_ACTION_EATING (15) */
+ 7, /* GFX_ACTION_ATTACKING (16) */
+ 7, /* GFX_ACTION_GROWING (17) */
+ 7, /* GFX_ACTION_SHRINKING (18) */
+ 7 /* GFX_ACTION_OTHER (19) */
};
-int num_bg_loops = sizeof(background_loop)/sizeof(int);
-char *element_info[] =
+struct FileInfo *image_files;
+struct FileInfo *sound_files;
+
+struct ElementInfo element_info[MAX_ELEMENTS] =
{
- "empty space", /* 0 */
- "sand",
- "normal wall",
- "round wall",
- "rock",
- "key",
- "emerald",
- "closed exit",
- "player",
- "bug",
- "spaceship", /* 10 */
- "yam yam",
- "robot",
- "steel wall",
- "diamond",
- "dead amoeba",
- "empty quicksand",
- "quicksand with rock",
- "amoeba drop",
- "bomb",
- "magic wall", /* 20 */
- "speed ball",
- "acid pool",
- "dropping amoeba",
- "normal amoeba",
- "nut with emerald",
- "life wall",
- "biomaze",
- "burning dynamite",
- "unknown",
- "magic wheel", /* 30 */
- "running wire",
- "red key",
- "yellow key",
- "green key",
- "blue key",
- "red door",
- "yellow door",
- "green door",
- "blue door",
- "gray door (opened by red key)", /* 40 */
- "gray door (opened by yellow key)",
- "gray door (opened by green key)",
- "gray door (opened by blue key)",
- "dynamite",
- "pac man",
- "invisible normal wall",
- "light bulb (dark)",
- "ligh bulb (glowing)",
- "wall with emerald",
- "wall with diamond", /* 50 */
- "amoeba with content",
- "amoeba (BD style)",
- "time orb (full)",
- "time orb (empty)",
- "growing wall",
- "diamond (BD style)",
- "yellow emerald",
- "wall with BD style diamond",
- "wall with yellow emerald",
- "dark yam yam", /* 60 */
- "magic wall (BD style)",
- "invisible steel wall",
- "-",
- "increases number of bombs",
- "increases explosion size",
- "increases power of explosion",
- "sokoban object",
- "sokoban empty field",
- "sokoban field with object",
- "butterfly (starts moving right)", /* 70 */
- "butterfly (starts moving up)",
- "butterfly (starts moving left)",
- "butterfly (starts moving down)",
- "firefly (starts moving right)",
- "firefly (starts moving up)",
- "firefly (starts moving left)",
- "firefly (starts moving down)",
- "butterfly",
- "firefly",
- "yellow player", /* 80 */
- "red player",
- "green player",
- "blue player",
- "bug (starts moving right)",
- "bug (starts moving up)",
- "bug (starts moving left)",
- "bug (starts moving down)",
- "spaceship (starts moving right)",
- "spaceship (starts moving up)",
- "spaceship (starts moving left)", /* 90 */
- "spaceship (starts moving down)",
- "pac man (starts moving right)",
- "pac man (starts moving up)",
- "pac man (starts moving left)",
- "pac man (starts moving down)",
- "red emerald",
- "violet emerald",
- "wall with red emerald",
- "wall with violet emerald",
- "unknown", /* 100 */
- "unknown",
- "unknown",
- "unknown",
- "unknown",
- "normal wall (BD style)",
- "rock (BD style)",
- "open exit",
- "unknown",
- "amoeba",
- "mole", /* 110 */
- "penguin",
- "satellite",
- "arrow left",
- "arrow right",
- "arrow up",
- "arrow down",
- "pig",
- "fire breathing dragon",
- "unknown",
- "letter ' '", /* 120 */
- "letter '!'",
- "letter '\"'",
- "letter '#'",
- "letter '$'",
- "letter '%'",
- "letter '&'",
- "letter '''",
- "letter '('",
- "letter ')'",
- "letter '*'", /* 130 */
- "letter '+'",
- "letter ','",
- "letter '-'",
- "letter '.'",
- "letter '/'",
- "letter '0'",
- "letter '1'",
- "letter '2'",
- "letter '3'",
- "letter '4'", /* 140 */
- "letter '5'",
- "letter '6'",
- "letter '7'",
- "letter '8'",
- "letter '9'",
- "letter ':'",
- "letter ';'",
- "letter '<'",
- "letter '='",
- "letter '>'", /* 150 */
- "letter '?'",
- "letter '@'",
- "letter 'A'",
- "letter 'B'",
- "letter 'C'",
- "letter 'D'",
- "letter 'E'",
- "letter 'F'",
- "letter 'G'",
- "letter 'H'", /* 160 */
- "letter 'I'",
- "letter 'J'",
- "letter 'K'",
- "letter 'L'",
- "letter 'M'",
- "letter 'N'",
- "letter 'O'",
- "letter 'P'",
- "letter 'Q'",
- "letter 'R'", /* 170 */
- "letter 'S'",
- "letter 'T'",
- "letter 'U'",
- "letter 'V'",
- "letter 'W'",
- "letter 'X'",
- "letter 'Y'",
- "letter 'Z'",
- "letter 'Ä'",
- "letter 'Ö'", /* 180 */
- "letter 'Ü'",
- "letter '^'",
- "letter ''",
- "letter ''",
- "letter ''",
- "letter ''",
- "letter ''",
- "letter ''",
- "letter ''",
- "letter ''", /* 190 */
- "letter ''",
- "letter ''",
- "letter ''",
- "letter ''",
- "letter ''",
- "letter ''",
- "letter ''",
- "letter ''",
- "letter ''",
- "growing wall (horizontal)", /* 200 */
- "growing wall (vertical)",
- "growing wall (all directions)",
- "unused",
- "unused",
- "unused",
- "unused",
- "unused",
- "unused",
- "unused",
- "empty space", /* 210 */
- "zonk",
- "base",
- "murphy",
- "infotron",
- "chip (single)",
- "hardware",
- "exit",
- "orange disk",
- "port (leading right)",
- "port (leading down)", /* 220 */
- "port (leading left)",
- "port (leading up)",
- "port (leading right)",
- "port (leading down)",
- "port (leading left)",
- "port (leading up)",
- "snik snak",
- "yellow disk",
- "terminal",
- "red disk", /* 230 */
- "port (vertical)",
- "port (horizontal)",
- "port (all directions)",
- "electron",
- "buggy base",
- "chip (left half)",
- "chip (right half)",
- "hardware",
- "hardware",
- "hardware", /* 240 */
- "hardware",
- "hardware",
- "hardware",
- "hardware",
- "hardware",
- "hardware",
- "hardware",
- "chip (upper half)",
- "chip (lower half)",
- "unknown", /* 250 */
- "unknown",
- "unknown",
- "unknown",
- "unknown",
- "unknown",
+ { "empty_space", "empty space" }, /* 0 */
+ { "sand", "sand" },
+ { "wall", "normal wall" },
+ { "wall", "round wall" },
+ { "rock", "rock" },
+ { "key", "key" },
+ { "emerald", "emerald" },
+ { "exit", "closed exit" },
+ { "player", "player" },
+ { "bug", "bug" },
+ { "spaceship", "spaceship" }, /* 10 */
+ { "yamyam", "yam yam" },
+ { "robot", "robot" },
+ { "wall", "steel wall" },
+ { "diamond", "diamond" },
+ { "amoeba", "dead amoeba" },
+ { "quicksand", "empty quicksand" },
+ { "quicksand", "quicksand with rock" },
+ { "amoeba", "amoeba drop" },
+ { "bomb", "bomb" },
+ { "magic_wall", "magic wall" }, /* 20 */
+ { "speed_pill", "speed pill" },
+ { "acid", "acid" },
+ { "amoeba", "dropping amoeba" },
+ { "amoeba", "normal amoeba" },
+ { "nut", "nut with emerald" },
+ { "gameoflife", "Conway's wall of life" },
+ { "biomaze", "biomaze" },
+ { "dynamite", "burning dynamite" },
+ { "wall", "wall" },
+ { "robot_wheel", "magic wheel" }, /* 30 */
+ { "robot_wheel", "magic wheel (running)" },
+ { "key", "red key" },
+ { "key", "yellow key" },
+ { "key", "green key" },
+ { "key", "blue key" },
+ { "gate", "red door" },
+ { "gate", "yellow door" },
+ { "gate", "green door" },
+ { "gate", "blue door" },
+ { "gate", "gray door (opened by red key)" }, /* 40 */
+ { "gate", "gray door (opened by yellow key)"},
+ { "gate", "gray door (opened by green key)"},
+ { "gate", "gray door (opened by blue key)"},
+ { "dynamite", "dynamite" },
+ { "pacman", "pac man" },
+ { "wall", "invisible normal wall" },
+ { "lamp", "lamp (off)" },
+ { "lamp", "lamp (on)" },
+ { "wall", "wall with emerald" },
+ { "wall", "wall with diamond" }, /* 50 */
+ { "amoeba", "amoeba with content" },
+ { "bd_amoeba", "amoeba (BD style)" },
+ { "time_orb_full", "time orb (full)" },
+ { "time_orb_empty", "time orb (empty)" },
+ { "wall", "growing wall" },
+ { "bd_diamond", "diamond (BD style)" },
+ { "emerald", "yellow emerald" },
+ { "wall", "wall with BD style diamond" },
+ { "wall", "wall with yellow emerald" },
+ { "dark_yamyam", "dark yam yam" }, /* 60 */
+ { "bd_magic_wall", "magic wall (BD style)" },
+ { "wall", "invisible steel wall" },
+
+ { NULL, "(not used)" },
+
+ { "dynabomb_nr", "increases number of bombs" },
+ { "dynabomb_sz", "increases explosion size" },
+ { "dynabomb_xl", "increases power of explosion" },
+ { "sokoban_object", "sokoban object" },
+ { "sokoban_field", "sokoban empty field" },
+ { "sokoban_field", "sokoban field with object" },
+ { "bd_butterfly", "butterfly (starts moving right)"}, /* 70 */
+ { "bd_butterfly", "butterfly (starts moving up)" },
+ { "bd_butterfly", "butterfly (starts moving left)"},
+ { "bd_butterfly", "butterfly (starts moving down)"},
+ { "bd_firefly", "firefly (starts moving right)" },
+ { "bd_firefly", "firefly (starts moving up)" },
+ { "bd_firefly", "firefly (starts moving left)" },
+ { "bd_firefly", "firefly (starts moving down)" },
+ { "bd_butterfly", "butterfly" },
+ { "bd_firefly", "firefly" },
+ { "player", "yellow player" }, /* 80 */
+ { "player", "red player" },
+ { "player", "green player" },
+ { "player", "blue player" },
+ { "bug", "bug (starts moving right)" },
+ { "bug", "bug (starts moving up)" },
+ { "bug", "bug (starts moving left)" },
+ { "bug", "bug (starts moving down)" },
+ { "spaceship", "spaceship (starts moving right)"},
+ { "spaceship", "spaceship (starts moving up)" },
+ { "spaceship", "spaceship (starts moving left)"}, /* 90 */
+ { "spaceship", "spaceship (starts moving down)"},
+ { "pacman", "pac man (starts moving right)" },
+ { "pacman", "pac man (starts moving up)" },
+ { "pacman", "pac man (starts moving left)" },
+ { "pacman", "pac man (starts moving down)" },
+ { "emerald", "red emerald" },
+ { "emerald", "purple emerald" },
+ { "wall", "wall with red emerald" },
+ { "wall", "wall with purple emerald" },
+ { "wall", "acid pool (top left)" }, /* 100 */
+ { "wall", "acid pool (top right)" },
+ { "wall", "acid pool (bottom left)" },
+ { "wall", "acid pool (bottom)" },
+ { "wall", "acid pool (bottom right)" },
+ { "wall", "normal wall (BD style)" },
+ { "bd_rock", "rock (BD style)" },
+ { "exit", "open exit" },
+ { NULL, "black orb bomb" },
+ { "amoeba", "amoeba" },
+ { "mole", "mole" }, /* 110 */
+ { "penguin", "penguin" },
+ { "satellite", "satellite" },
+ { NULL, "arrow left" },
+ { NULL, "arrow right" },
+ { NULL, "arrow up" },
+ { NULL, "arrow down" },
+ { "pig", "pig" },
+ { "dragon", "fire breathing dragon" },
+ { "key", "red key (EM style)" },
+ { NULL, "letter ' '" }, /* 120 */
+ { NULL, "letter '!'" },
+ { NULL, "letter '\"'" },
+ { NULL, "letter '#'" },
+ { NULL, "letter '$'" },
+ { NULL, "letter '%'" },
+ { NULL, "letter '&'" },
+ { NULL, "letter '''" },
+ { NULL, "letter '('" },
+ { NULL, "letter ')'" },
+ { NULL, "letter '*'" }, /* 130 */
+ { NULL, "letter '+'" },
+ { NULL, "letter ','" },
+ { NULL, "letter '-'" },
+ { NULL, "letter '.'" },
+ { NULL, "letter '/'" },
+ { NULL, "letter '0'" },
+ { NULL, "letter '1'" },
+ { NULL, "letter '2'" },
+ { NULL, "letter '3'" },
+ { NULL, "letter '4'" }, /* 140 */
+ { NULL, "letter '5'" },
+ { NULL, "letter '6'" },
+ { NULL, "letter '7'" },
+ { NULL, "letter '8'" },
+ { NULL, "letter '9'" },
+ { NULL, "letter ':'" },
+ { NULL, "letter ';'" },
+ { NULL, "letter '<'" },
+ { NULL, "letter '='" },
+ { NULL, "letter '>'" }, /* 150 */
+ { NULL, "letter '?'" },
+ { NULL, "letter '@'" },
+ { NULL, "letter 'A'" },
+ { NULL, "letter 'B'" },
+ { NULL, "letter 'C'" },
+ { NULL, "letter 'D'" },
+ { NULL, "letter 'E'" },
+ { NULL, "letter 'F'" },
+ { NULL, "letter 'G'" },
+ { NULL, "letter 'H'" }, /* 160 */
+ { NULL, "letter 'I'" },
+ { NULL, "letter 'J'" },
+ { NULL, "letter 'K'" },
+ { NULL, "letter 'L'" },
+ { NULL, "letter 'M'" },
+ { NULL, "letter 'N'" },
+ { NULL, "letter 'O'" },
+ { NULL, "letter 'P'" },
+ { NULL, "letter 'Q'" },
+ { NULL, "letter 'R'" }, /* 170 */
+ { NULL, "letter 'S'" },
+ { NULL, "letter 'T'" },
+ { NULL, "letter 'U'" },
+ { NULL, "letter 'V'" },
+ { NULL, "letter 'W'" },
+ { NULL, "letter 'X'" },
+ { NULL, "letter 'Y'" },
+ { NULL, "letter 'Z'" },
+ { NULL, "letter 'Ä'" },
+ { NULL, "letter 'Ö'" }, /* 180 */
+ { NULL, "letter 'Ü'" },
+ { NULL, "letter '^'" },
+ { NULL, "letter ''" },
+ { NULL, "letter ''" },
+ { NULL, "letter ''" },
+ { NULL, "letter ''" },
+ { NULL, "letter ''" },
+ { NULL, "letter ''" },
+ { NULL, "letter ''" },
+ { NULL, "letter ''" }, /* 190 */
+ { NULL, "letter ''" },
+ { NULL, "letter ''" },
+ { NULL, "letter ''" },
+ { NULL, "letter ''" },
+ { NULL, "letter ''" },
+ { NULL, "letter ''" },
+ { NULL, "letter ''" },
+ { NULL, "letter ''" },
+ { NULL, "letter ''" },
+ { "wall", "growing wall (horizontal)" }, /* 200 */
+ { "wall", "growing wall (vertical)" },
+ { "wall", "growing wall (all directions)" },
+ { "gate", "red door (EM style)" },
+ { "gate", "yellow door (EM style)" },
+ { "gate", "green door (EM style)" },
+ { "gate", "blue door (EM style)" },
+ { "key", "yellow key (EM style)" },
+ { "key", "green key (EM style)" },
+ { "key", "blue key (EM style)" },
+ { "empty_space", "empty space" }, /* 210 */
+ { "sp_zonk", "zonk" },
+ { "sp_base", "base" },
+ { "player", "murphy" },
+ { "sp_infotron", "infotron" },
+ { "wall", "chip (single)" },
+ { "wall", "hardware" },
+ { "sp_exit", "exit" },
+ { "sp_disk_orange", "orange disk" },
+ { "sp_port", "port (leading right)" },
+ { "sp_port", "port (leading down)" }, /* 220 */
+ { "sp_port", "port (leading left)" },
+ { "sp_port", "port (leading up)" },
+ { "sp_port", "port (leading right)" },
+ { "sp_port", "port (leading down)" },
+ { "sp_port", "port (leading left)" },
+ { "sp_port", "port (leading up)" },
+ { "sp_sniksnak", "snik snak" },
+ { "sp_disk_yellow", "yellow disk" },
+ { "sp_terminal", "terminal" },
+ { "sp_disk_red", "red disk" }, /* 230 */
+ { "sp_port", "port (vertical)" },
+ { "sp_port", "port (horizontal)" },
+ { "sp_port", "port (all directions)" },
+ { "sp_electron", "electron" },
+ { "sp_buggy_base", "buggy base" },
+ { "wall", "chip (left half)" },
+ { "wall", "chip (right half)" },
+ { "wall", "hardware" },
+ { "wall", "hardware" },
+ { "wall", "hardware" }, /* 240 */
+ { "wall", "hardware" },
+ { "wall", "hardware" },
+ { "wall", "hardware" },
+ { "wall", "hardware" },
+ { "wall", "hardware" },
+ { "wall", "hardware" },
+ { "wall", "hardware" },
+ { "wall", "chip (upper half)" },
+ { "wall", "chip (lower half)" },
+ { "gate", "gray door (EM style, red key)" }, /* 250 */
+ { "gate", "gray door (EM style, yellow key)"},
+ { "gate", "gray door (EM style, green key)"},
+ { "gate", "gray door (EM style, blue key)"},
+
+ { NULL, "(not used)" },
+ { NULL, "(not used)" },
/* 256 */
- "pearl", /* (256) */
- "crystal",
- "wall with pearl",
- "wall with crystal",
- "white door", /* 260 */
- "gray door (opened by white key)",
- "white key",
- "shield (passive)",
- "extra time",
- "switch gate (open)",
- "switch gate (closed)",
- "switch for switch gate",
- "switch for switch gate",
- "-",
- "-", /* 270 */
- "red conveyor belt (left)",
- "red conveyor belt (middle)",
- "red conveyor belt (right)",
- "switch for red conveyor belt (left)",
- "switch for red conveyor belt (middle)",
- "switch for red conveyor belt (right)",
- "yellow conveyor belt (left)",
- "yellow conveyor belt (middle)",
- "yellow conveyor belt (right)",
- "switch for yellow conveyor belt (left)", /* 280 */
- "switch for yellow conveyor belt (middle)",
- "switch for yellow conveyor belt (right)",
- "green conveyor belt (left)",
- "green conveyor belt (middle)",
- "green conveyor belt (right)",
- "switch for green conveyor belt (left)",
- "switch for green conveyor belt (middle)",
- "switch for green conveyor belt (right)",
- "blue conveyor belt (left)",
- "blue conveyor belt (middle)", /* 290 */
- "blue conveyor belt (right)",
- "switch for blue conveyor belt (left)",
- "switch for blue conveyor belt (middle)",
- "switch for blue conveyor belt (right)",
- "land mine",
- "mail envelope",
- "light switch (off)",
- "light switch (on)",
- "sign (exclamation)",
- "sign (radio activity)", /* 300 */
- "sign (stop)",
- "sign (wheel chair)",
- "sign (parking)",
- "sign (one way)",
- "sign (heart)",
- "sign (triangle)",
- "sign (round)",
- "sign (exit)",
- "sign (yin yang)",
- "sign (other)", /* 310 */
- "mole (starts moving left)",
- "mole (starts moving right)",
- "mole (starts moving up)",
- "mole (starts moving down)",
- "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)",
- "-"
+ { "pearl", "pearl" }, /* (256) */
+ { "crystal", "crystal" },
+ { "wall", "wall with pearl" },
+ { "wall", "wall with crystal" },
+ { "gate", "white door" }, /* 260 */
+ { "gate", "gray door (opened by white key)"},
+ { "key", "white key" },
+ { "shield_normal", "shield (normal)" },
+ { "extra_time", "extra time" },
+ { "switchgate", "switch gate (open)" },
+ { "switchgate", "switch gate (closed)" },
+ { "switchgate_switch", "switch for switch gate" },
+ { "switchgate_switch", "switch for switch gate" },
+ { NULL, "-" },
+ { NULL, "-" }, /* 270 */
+ { "conveyor_belt", "red conveyor belt (left)" },
+ { "conveyor_belt", "red conveyor belt (middle)" },
+ { "conveyor_belt", "red conveyor belt (right)" },
+ { "conveyor_belt_switch", "switch for red conveyor belt (left)"},
+ { "conveyor_belt_switch", "switch for red conveyor belt (middle)"},
+ { "conveyor_belt_switch", "switch for red conveyor belt (right)"},
+ { "conveyor_belt", "yellow conveyor belt (left)" },
+ { "conveyor_belt", "yellow conveyor belt (middle)" },
+ { "conveyor_belt", "yellow conveyor belt (right)" },
+ { "conveyor_belt_switch", "switch for yellow conveyor belt (left)"},
+ { "conveyor_belt_switch", "switch for yellow conveyor belt (middle)"},
+ { "conveyor_belt_switch", "switch for yellow conveyor belt (right)"},
+ { "conveyor_belt", "green conveyor belt (left)" },
+ { "conveyor_belt", "green conveyor belt (middle)" },
+ { "conveyor_belt", "green conveyor belt (right)" },
+ { "conveyor_belt_switch", "switch for green conveyor belt (left)"},
+ { "conveyor_belt_switch", "switch for green conveyor belt (middle)"},
+ { "conveyor_belt_switch", "switch for green conveyor belt (right)"},
+ { "conveyor_belt", "blue conveyor belt (left)" },
+ { "conveyor_belt", "blue conveyor belt (middle)" },
+ { "conveyor_belt", "blue conveyor belt (right)" },
+ { "conveyor_belt_switch", "switch for blue conveyor belt (left)"},
+ { "conveyor_belt_switch", "switch for blue conveyor belt (middle)"},
+ { "conveyor_belt_switch", "switch for blue conveyor belt (right)"},
+ { "sand", "land mine" },
+ { "envelope", "mail envelope" },
+ { "light_switch", "light switch (off)" },
+ { "light_switch", "light switch (on)" },
+ { "wall", "sign (exclamation)" },
+ { "wall", "sign (radio activity)" }, /* 300 */
+ { "wall", "sign (stop)" },
+ { "wall", "sign (wheel chair)" },
+ { "wall", "sign (parking)" },
+ { "wall", "sign (one way)" },
+ { "wall", "sign (heart)" },
+ { "wall", "sign (triangle)" },
+ { "wall", "sign (round)" },
+ { "wall", "sign (exit)" },
+ { "wall", "sign (yin yang)" },
+ { "wall", "sign (other)" }, /* 310 */
+ { "mole", "mole (starts moving left)" },
+ { "mole", "mole (starts moving right)" },
+ { "mole", "mole (starts moving up)" },
+ { "mole", "mole (starts moving down)" },
+ { "wall", "steel wall (slanted)" },
+ { "sand", "invisible sand" },
+
+ { NULL, "dx unknown element 15" },
+ { NULL, "dx unknown element 42" },
+
+ { NULL, "(not used)" },
+ { NULL, "(not used)" }, /* 320 */
+
+ { "shield_deadly", "shield (deadly, kills enemies)"},
+ { "timegate", "time gate (open)" },
+ { "timegate", "time gate (closed)" },
+ { "timegate_switch", "switch for time gate" },
+ { "timegate_switch", "switch for time gate" },
+ { "balloon", "balloon" },
+ { "balloon_switch", "send balloon to the left" },
+ { "balloon_switch", "send balloon to the right" },
+ { "balloon_switch", "send balloon up" },
+ { "balloon_switch", "send balloon down" }, /* 330 */
+ { "balloon_switch", "send balloon in any direction" },
+ { "wall", "steel wall" },
+ { "wall", "steel wall" },
+ { "wall", "steel wall" },
+ { "wall", "steel wall" },
+ { "wall", "normal wall" },
+ { "wall", "normal wall" },
+ { "wall", "normal wall" },
+ { "wall", "normal wall" },
+ { "wall", "normal wall" }, /* 340 */
+ { "wall", "normal wall" },
+ { "wall", "normal wall" },
+ { "wall", "normal wall" },
+ { "tube", "tube (all directions)" },
+ { "tube", "tube (vertical)" },
+ { "tube", "tube (horizontal)" },
+ { "tube", "tube (vertical & left)" },
+ { "tube", "tube (vertical & right)" },
+ { "tube", "tube (horizontal & up)" },
+ { "tube", "tube (horizontal & down)" }, /* 350 */
+ { "tube", "tube (left & up)" },
+ { "tube", "tube (left & down)" },
+ { "tube", "tube (right & up)" },
+ { "tube", "tube (right & down)" },
+ { "spring", "spring" },
+ { "trap", "trap" },
+ { "dx_bomb", "stable bomb (DX style)" },
+ { NULL, "-" },
+ { NULL, "-" },
+ { "custom", "custom element 1" },
+ { "custom", "custom element 2" },
+ { "custom", "custom element 3" },
+ { "custom", "custom element 4" },
+ { "custom", "custom element 5" },
+ { "custom", "custom element 6" },
+ { "custom", "custom element 7" },
+ { "custom", "custom element 8" },
+ { "custom", "custom element 9" },
+ { "custom", "custom element 10" },
+ { "custom", "custom element 11" },
+ { "custom", "custom element 12" },
+ { "custom", "custom element 13" },
+ { "custom", "custom element 14" },
+ { "custom", "custom element 15" },
+ { "custom", "custom element 16" },
+ { "custom", "custom element 17" },
+ { "custom", "custom element 18" },
+ { "custom", "custom element 19" },
+ { "custom", "custom element 20" },
+ { "custom", "custom element 21" },
+ { "custom", "custom element 22" },
+ { "custom", "custom element 23" },
+ { "custom", "custom element 24" },
+ { "custom", "custom element 25" },
+ { "custom", "custom element 26" },
+ { "custom", "custom element 27" },
+ { "custom", "custom element 28" },
+ { "custom", "custom element 29" },
+ { "custom", "custom element 30" },
+ { "custom", "custom element 31" },
+ { "custom", "custom element 32" },
+ { "custom", "custom element 33" },
+ { "custom", "custom element 34" },
+ { "custom", "custom element 35" },
+ { "custom", "custom element 36" },
+ { "custom", "custom element 37" },
+ { "custom", "custom element 38" },
+ { "custom", "custom element 39" },
+ { "custom", "custom element 40" },
+ { "custom", "custom element 41" },
+ { "custom", "custom element 42" },
+ { "custom", "custom element 43" },
+ { "custom", "custom element 44" },
+ { "custom", "custom element 45" },
+ { "custom", "custom element 46" },
+ { "custom", "custom element 47" },
+ { "custom", "custom element 48" },
+ { "custom", "custom element 49" },
+ { "custom", "custom element 50" },
+ { "custom", "custom element 51" },
+ { "custom", "custom element 52" },
+ { "custom", "custom element 53" },
+ { "custom", "custom element 54" },
+ { "custom", "custom element 55" },
+ { "custom", "custom element 56" },
+ { "custom", "custom element 57" },
+ { "custom", "custom element 58" },
+ { "custom", "custom element 59" },
+ { "custom", "custom element 60" },
+ { "custom", "custom element 61" },
+ { "custom", "custom element 62" },
+ { "custom", "custom element 63" },
+ { "custom", "custom element 64" },
+ { "custom", "custom element 65" },
+ { "custom", "custom element 66" },
+ { "custom", "custom element 67" },
+ { "custom", "custom element 68" },
+ { "custom", "custom element 69" },
+ { "custom", "custom element 70" },
+ { "custom", "custom element 71" },
+ { "custom", "custom element 72" },
+ { "custom", "custom element 73" },
+ { "custom", "custom element 74" },
+ { "custom", "custom element 75" },
+ { "custom", "custom element 76" },
+ { "custom", "custom element 77" },
+ { "custom", "custom element 78" },
+ { "custom", "custom element 79" },
+ { "custom", "custom element 80" },
+ { "custom", "custom element 81" },
+ { "custom", "custom element 82" },
+ { "custom", "custom element 83" },
+ { "custom", "custom element 84" },
+ { "custom", "custom element 85" },
+ { "custom", "custom element 86" },
+ { "custom", "custom element 87" },
+ { "custom", "custom element 88" },
+ { "custom", "custom element 89" },
+ { "custom", "custom element 90" },
+ { "custom", "custom element 91" },
+ { "custom", "custom element 92" },
+ { "custom", "custom element 93" },
+ { "custom", "custom element 94" },
+ { "custom", "custom element 95" },
+ { "custom", "custom element 96" },
+ { "custom", "custom element 97" },
+ { "custom", "custom element 98" },
+ { "custom", "custom element 99" },
+ { "custom", "custom element 100" },
+ { "custom", "custom element 101" },
+ { "custom", "custom element 102" },
+ { "custom", "custom element 103" },
+ { "custom", "custom element 104" },
+ { "custom", "custom element 105" },
+ { "custom", "custom element 106" },
+ { "custom", "custom element 107" },
+ { "custom", "custom element 108" },
+ { "custom", "custom element 109" },
+ { "custom", "custom element 110" },
+ { "custom", "custom element 111" },
+ { "custom", "custom element 112" },
+ { "custom", "custom element 113" },
+ { "custom", "custom element 114" },
+ { "custom", "custom element 115" },
+ { "custom", "custom element 116" },
+ { "custom", "custom element 117" },
+ { "custom", "custom element 118" },
+ { "custom", "custom element 119" },
+ { "custom", "custom element 120" },
+ { "custom", "custom element 121" },
+ { "custom", "custom element 122" },
+ { "custom", "custom element 123" },
+ { "custom", "custom element 124" },
+ { "custom", "custom element 125" },
+ { "custom", "custom element 126" },
+ { "custom", "custom element 127" },
+ { "custom", "custom element 128" },
+
+ { NULL, "-" }
/*
"-------------------------------",
*/
};
-int num_element_info = sizeof(element_info)/sizeof(char *);
-
-
-
-/* +-----------------------------------------------------------------------+ */
-/* | SDL TEST STUFF | */
-/* +-----------------------------------------------------------------------+ */
-
-#if defined(TARGET_SDL)
-
-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();
-}
-
-#define SCREEN_WIDTH 640
-#define SCREEN_HEIGHT 480
-
-void WatchJoysticks()
-{
- SDL_Surface *screen;
- const char *name;
- int i, done;
- SDL_Event event;
- int x, y, draw;
- SDL_Rect axis_area[2];
- int joystick_nr = 0;
- SDL_Joystick *joystick = Get_SDL_Joystick(joystick_nr);
-
- /* Set a video mode to display joystick axis position */
- screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 16, 0);
- if ( screen == NULL ) {
- fprintf(stderr, "Couldn't set video mode: %s\n",SDL_GetError());
- return;
- }
-
- /* Print info about the joysticks we are watching */
- for (i=0; i<2; i++)
- {
- joystick = Get_SDL_Joystick(i);
-
- name = SDL_JoystickName(i);
- printf("Watching joystick %d: (%s)\n", i,
- name ? name : "Unknown Joystick");
- printf("Joystick has %d axes, %d hats, %d balls, and %d buttons\n",
- SDL_JoystickNumAxes(joystick),
- SDL_JoystickNumHats(joystick),
- SDL_JoystickNumBalls(joystick),
- SDL_JoystickNumButtons(joystick));
- }
-
- /* Initialize drawing rectangles */
- memset(axis_area, 0, (sizeof axis_area));
- draw = 0;
-
- /* Loop, getting joystick events! */
- done = 0;
- while ( ! done ) {
- while ( SDL_PollEvent(&event) ) {
- switch (event.type) {
- case SDL_JOYAXISMOTION:
- joystick_nr = event.jaxis.which;
- printf("Joystick %d axis %d value: %d\n",
- event.jaxis.which,
- event.jaxis.axis,
- event.jaxis.value);
- break;
- case SDL_JOYHATMOTION:
- joystick_nr = event.jaxis.which;
- printf("Joystick %d hat %d value:",
- event.jhat.which,
- event.jhat.hat);
- if ( event.jhat.value == SDL_HAT_CENTERED )
- printf(" centered");
- if ( event.jhat.value & SDL_HAT_UP )
- printf(" up");
- if ( event.jhat.value & SDL_HAT_RIGHT )
- printf(" right");
- if ( event.jhat.value & SDL_HAT_DOWN )
- printf(" down");
- if ( event.jhat.value & SDL_HAT_LEFT )
- printf(" left");
- printf("\n");
- break;
- case SDL_JOYBALLMOTION:
- joystick_nr = event.jaxis.which;
- printf("Joystick %d ball %d delta: (%d,%d)\n",
- event.jball.which,
- event.jball.ball,
- event.jball.xrel,
- event.jball.yrel);
- break;
- case SDL_JOYBUTTONDOWN:
- joystick_nr = event.jaxis.which;
- printf("Joystick %d button %d down\n",
- event.jbutton.which,
- event.jbutton.button);
- break;
- case SDL_JOYBUTTONUP:
- joystick_nr = event.jaxis.which;
- printf("Joystick %d button %d up\n",
- event.jbutton.which,
- event.jbutton.button);
- break;
- case SDL_KEYDOWN:
- if ( event.key.keysym.sym != SDLK_ESCAPE ) {
- break;
- }
- /* Fall through to signal quit */
- case SDL_QUIT:
- done = 1;
- break;
- default:
- break;
- }
- }
-
- joystick = Get_SDL_Joystick(joystick_nr);
-
- /* Update visual joystick state */
- for ( i=0; i<SDL_JoystickNumButtons(joystick); ++i ) {
- SDL_Rect area;
-
- area.x = i*34;
- area.y = SCREEN_HEIGHT-34;
- area.w = 32;
- area.h = 32;
- if (SDL_JoystickGetButton(joystick, i) == SDL_PRESSED) {
- SDL_FillRect(screen, &area, 0xFFFF);
- } else {
- SDL_FillRect(screen, &area, 0x0000);
- }
- SDL_UpdateRects(screen, 1, &area);
- }
-
- /* Erase previous axes */
- SDL_FillRect(screen, &axis_area[draw], 0x0000);
-
- /* Draw the X/Y axis */
- draw = !draw;
- x = (((int)SDL_JoystickGetAxis(joystick, 0))+32768);
- x *= SCREEN_WIDTH;
- x /= 65535;
- if ( x < 0 ) {
- x = 0;
- } else
- if ( x > (SCREEN_WIDTH-16) ) {
- x = SCREEN_WIDTH-16;
- }
- y = (((int)SDL_JoystickGetAxis(joystick, 1))+32768);
- y *= SCREEN_HEIGHT;
- y /= 65535;
- if ( y < 0 ) {
- y = 0;
- } else
- if ( y > (SCREEN_HEIGHT-16) ) {
- y = SCREEN_HEIGHT-16;
- }
- axis_area[draw].x = (Sint16)x;
- axis_area[draw].y = (Sint16)y;
- axis_area[draw].w = 16;
- axis_area[draw].h = 16;
- SDL_FillRect(screen, &axis_area[draw], 0xFFFF);
-
- SDL_UpdateRects(screen, 2, axis_area);
- }
-}
-
-void TEST_SDL_JOYSTICK()
-{
- const char *name;
- int i;
-
- /* Initialize SDL (Note: video is required to start event loop) */
- if ( SDL_Init(SDL_INIT_VIDEO|SDL_INIT_JOYSTICK) < 0 )
- {
- fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError());
- exit(1);
- }
-
- /* Print information about the joysticks */
- printf("There are %d joysticks attached\n", SDL_NumJoysticks());
- for ( i=0; i<SDL_NumJoysticks(); ++i )
- {
- name = SDL_JoystickName(i);
- printf("Joystick %d: %s\n",i,name ? name : "Unknown Joystick");
- }
-
- for (i=0; i<2; i++)
- {
- if (!Open_SDL_Joystick(i))
- printf("Couldn't open joystick %d: %s\n", i, SDL_GetError());
- }
-
- WatchJoysticks();
-
- for (i=0; i<2; i++)
- Close_SDL_Joystick(i);
-
- SDL_QuitSubSystem(SDL_INIT_VIDEO|SDL_INIT_JOYSTICK);
-}
-
-#endif /* TARGET_SDL */
-
-/* +-----------------------------------------------------------------------+ */
-/* | SDL TEST STUFF | */
-/* +-----------------------------------------------------------------------+ */
+struct GraphicInfo graphic_info[MAX_GRAPHICS];
+struct NewGraphicInfo new_graphic_info[NUM_IMAGE_FILES];
+/* ========================================================================= */
+/* main() */
+/* ========================================================================= */
int main(int argc, char *argv[])
{
- program_name = (strrchr(argv[0],'/') ? strrchr(argv[0],'/') + 1 : argv[0]);
-
-#if defined(PLATFORM_MSDOS)
- _fmode = O_BINARY;
-#endif
+ InitCommandName(argv[0]);
+ InitExitFunction(CloseAllAndExit);
+ InitPlatformDependantStuff();
-#if 1
GetOptions(argv);
- OpenAll(argc,argv);
-#endif
-
-#if 0
-#ifdef TARGET_SDL
- /*
- TEST_SDL_BLIT_RECT((WIN_XSIZE - TILEX)/2, (WIN_YSIZE - TILEY)/2);
- TEST_SDL_EVENT_LOOP();
- */
- TEST_SDL_JOYSTICK();
- exit(0);
-#endif
-#endif
+ OpenAll();
EventLoop();
CloseAllAndExit(0);
- exit(0); /* to keep compilers happy */
+
+ return 0; /* to keep compilers happy */
}