-/***********************************************************
-* Rocks'n'Diamonds -- McDuffin Strikes Back! *
-*----------------------------------------------------------*
-* (c) 1995-2006 Artsoft Entertainment *
-* Holger Schemel *
-* Detmolder Strasse 189 *
-* 33604 Bielefeld *
-* Germany *
-* e-mail: info@artsoft.org *
-*----------------------------------------------------------*
-* main.c *
-***********************************************************/
+// ============================================================================
+// Rocks'n'Diamonds - McDuffin Strikes Back!
+// ----------------------------------------------------------------------------
+// (c) 1995-2014 by Artsoft Entertainment
+// Holger Schemel
+// info@artsoft.org
+// http://www.artsoft.org/
+// ----------------------------------------------------------------------------
+// main.c
+// ============================================================================
#include "libgame/libgame.h"
#include "init.h"
#include "game.h"
#include "tape.h"
+#include "tools.h"
#include "events.h"
#include "config.h"
+Bitmap *bitmap_db_store;
Bitmap *bitmap_db_cross;
Bitmap *bitmap_db_field;
Bitmap *bitmap_db_panel;
-Bitmap *bitmap_db_door;
+Bitmap *bitmap_db_door_1;
+Bitmap *bitmap_db_door_2;
Bitmap *bitmap_db_toons;
DrawBuffer *fieldbuffer;
DrawBuffer *drawto_field;
int key_joystick_mapping = 0;
-boolean redraw[MAX_BUF_XSIZE][MAX_BUF_YSIZE];
+boolean redraw[2 + MAX_LEV_FIELDX + 2][2 + MAX_LEV_FIELDY + 2];
int redraw_x1 = 0, redraw_y1 = 0;
short Feld[MAX_LEV_FIELDX][MAX_LEV_FIELDY];
int lev_fieldx, lev_fieldy;
int scroll_x, scroll_y;
-int FX = SX, FY = SY;
+int WIN_XSIZE = 672, WIN_YSIZE = 560;
+int SCR_FIELDX = 17, SCR_FIELDY = 17;
+int REAL_SX = 6, REAL_SY = 6;
+int SX = 8, SY = 8;
+int DX = 566, DY = 60;
+int VX = 566, VY = 400;
+int EX = 566, EY = 356;
+int dDX, dDY;
+int FULL_SXSIZE = 2 + 17 * TILEX + 2; /* 2 + SXSIZE + 2 */
+int FULL_SYSIZE = 2 + 17 * TILEY + 2; /* 2 + SYSIZE + 2 */
+int SXSIZE = 17 * TILEX; /* SCR_FIELDX * TILEX */
+int SYSIZE = 17 * TILEY; /* SCR_FIELDY * TILEY */
+int DXSIZE = 100;
+int DYSIZE = 280;
+int VXSIZE = 100;
+int VYSIZE = 100;
+int EXSIZE = 100;
+int EYSIZE = 144;
+int TILESIZE_VAR = TILESIZE;
+
+int FX, FY;
int ScrollStepSize;
int ScreenMovDir = MV_NONE, ScreenMovPos = 0;
int ScreenGfxPos = 0;
int BorderElement = EL_STEELWALL;
int GameFrameDelay = GAME_FRAME_DELAY;
int FfwdFrameDelay = FFWD_FRAME_DELAY;
-int BX1 = 0, BY1 = 0;
-int BX2 = SCR_FIELDX - 1, BY2 = SCR_FIELDY - 1;
+int BX1, BY1;
+int BX2, BY2;
int SBX_Left, SBX_Right;
int SBY_Upper, SBY_Lower;
int ZX, ZY;
struct GameInfo game;
struct GlobalInfo global;
struct BorderInfo border;
+struct ViewportInfo viewport;
struct TitleFadingInfo fading;
struct TitleFadingInfo title_initial_default;
struct TitleFadingInfo title_default;
struct TitleMessageInfo titlemessage_default;
struct TitleMessageInfo titlemessage[MAX_NUM_TITLE_MESSAGES];
struct TitleMessageInfo readme;
-struct InitInfo init;
+struct InitInfo init, init_last;
struct MenuInfo menu;
struct DoorInfo door_1, door_2;
+struct RequestInfo request;
struct PreviewInfo preview;
+struct EditorInfo editor;
+
struct GraphicInfo *graphic_info = NULL;
struct SoundInfo *sound_info = NULL;
struct MusicInfo *music_info = NULL;
struct MusicFileInfo *music_file_info = NULL;
struct HelpAnimInfo *helpanim_info = NULL;
+
SetupFileHash *helptext_info = NULL;
SetupFileHash *image_config_hash = NULL;
SetupFileHash *element_token_hash = NULL;
{
"char_copyright",
"char",
- "letter '©'"
+ "letter '\xa9'"
},
{
"char_aumlaut",
"char",
- "letter 'Ä'"
+ "letter '\xc4'"
},
{
"char_oumlaut",
"char",
- "letter 'Ö'"
+ "letter '\xd6'"
},
{
"char_uumlaut",
"char",
- "letter 'Ü'"
+ "letter '\xdc'"
},
{
"char_degree",
"char",
- "letter '°'"
+ "letter '\xb0'"
},
{
"char_trademark",
"char",
- "letter '®'"
+ "letter '\xae'"
},
{
"char_cursor",
"char",
- "letter ' '"
+ "letter '\xa0'"
},
{
"char_unused",
},
{
"sp_gravity_port_right",
- "sp_port",
- "gravity port (leading right)"
+ "sp_gravity_port",
+ "gravity-on/off port (leading right)"
},
{
"sp_gravity_port_down",
- "sp_port",
- "gravity port (leading down)"
+ "sp_gravity_port",
+ "gravity-on/off port (leading down)"
},
{
"sp_gravity_port_left",
- "sp_port",
- "gravity port (leading left)"
+ "sp_gravity_port",
+ "gravity-on/off port (leading left)"
},
{
"sp_gravity_port_up",
- "sp_port",
- "gravity port (leading up)"
+ "sp_gravity_port",
+ "gravity-on/off port (leading up)"
},
{
"sp_sniksnak",
},
{
"sp_gravity_on_port_right",
- "sp_port",
- "gravity on port (leading right)"
+ "sp_gravity_on_port",
+ "gravity-on port (leading right)"
},
{
"sp_gravity_on_port_down",
- "sp_port",
- "gravity on port (leading down)"
+ "sp_gravity_on_port",
+ "gravity-on port (leading down)"
},
{
"sp_gravity_on_port_left",
- "sp_port",
- "gravity on port (leading left)"
+ "sp_gravity_on_port",
+ "gravity-on port (leading left)"
},
{
"sp_gravity_on_port_up",
- "sp_port",
- "gravity on port (leading up)"
+ "sp_gravity_on_port",
+ "gravity-on port (leading up)"
},
{
"sp_gravity_off_port_right",
- "sp_port",
- "gravity off port (leading right)"
+ "sp_gravity_off_port",
+ "gravity-off port (leading right)"
},
{
"sp_gravity_off_port_down",
- "sp_port",
- "gravity off port (leading down)"
+ "sp_gravity_off_port",
+ "gravity-off port (leading down)"
},
{
"sp_gravity_off_port_left",
- "sp_port",
- "gravity off port (leading left)"
+ "sp_gravity_off_port",
+ "gravity-off port (leading left)"
},
{
"sp_gravity_off_port_up",
- "sp_port",
- "gravity off port (leading up)"
+ "sp_gravity_off_port",
+ "gravity-off port (leading up)"
},
{
"balloon_switch_none",
{
"steel_char_copyright",
"steel_char",
- "steel letter '©'"
+ "steel letter '\xa9'"
},
{
"steel_char_aumlaut",
"steel_char",
- "steel letter 'Ä'"
+ "steel letter '\xc4'"
},
{
"steel_char_oumlaut",
"steel_char",
- "steel letter 'Ö'"
+ "steel letter '\xd6'"
},
{
"steel_char_uumlaut",
"steel_char",
- "steel letter 'Ü'"
+ "steel letter '\xdc'"
},
{
"steel_char_degree",
"steel_char",
- "steel letter '°'"
+ "steel letter '\xb0'"
},
{
"steel_char_trademark",
"steel_char",
- "steel letter '®'"
+ "steel letter '\xae'"
},
{
"steel_char_cursor",
"steel_char",
- "steel letter ' '"
+ "steel letter '\xa0'"
},
{
"steel_char_unused",
"quicksand",
"fast quicksand (with rock)"
},
+ {
+ "from_level_template",
+ "from_level_template",
+ "element taken from level template"
+ },
/* ----------------------------------------------------------------------- */
/* "real" (and therefore drawable) runtime elements */
{ ".TITLE", GFX_SPECIAL_ARG_TITLE, },
{ ".MAIN", GFX_SPECIAL_ARG_MAIN, },
{ ".LEVELS", GFX_SPECIAL_ARG_LEVELS },
+ { ".LEVELNR", GFX_SPECIAL_ARG_LEVELNR },
{ ".SCORES", GFX_SPECIAL_ARG_SCORES, },
{ ".EDITOR", GFX_SPECIAL_ARG_EDITOR, },
{ ".INFO", GFX_SPECIAL_ARG_INFO, },
{ ".SETUP", GFX_SPECIAL_ARG_SETUP, },
{ ".PLAYING", GFX_SPECIAL_ARG_PLAYING, },
{ ".DOOR", GFX_SPECIAL_ARG_DOOR, },
+ { ".TAPE", GFX_SPECIAL_ARG_TAPE, },
{ ".PANEL", GFX_SPECIAL_ARG_PANEL, },
{ ".PREVIEW", GFX_SPECIAL_ARG_PREVIEW, },
{ ".CRUMBLED", GFX_SPECIAL_ARG_CRUMBLED, },
{ "font.envelope_2" },
{ "font.envelope_3" },
{ "font.envelope_4" },
+ { "font.request" },
{ "font.input_1.active" },
{ "font.input_2.active" },
{ "font.input_1" },
" -n, --network network multiplayer game\n"
" --serveronly only start network server\n"
" -v, --verbose verbose mode\n"
+ " -V, --version show program version\n"
" --debug display debugging information\n"
- " --debug-x11-sync enable X11 synchronous mode\n"
" -e, --execute COMMAND execute batch COMMAND\n"
"\n"
"Valid commands for '--execute' option:\n"
program.command_basename);
}
-int main(int argc, char *argv[])
+static void print_version()
{
- char * window_title_string = getWindowTitleString();
+ printf("%s %d.%d.%d.%d\n",
+ PROGRAM_TITLE_STRING,
+ PROGRAM_VERSION_MAJOR,
+ PROGRAM_VERSION_MINOR,
+ PROGRAM_VERSION_PATCH,
+ PROGRAM_VERSION_BUILD);
+
+ if (options.debug)
+ {
+ SDL_version sdl_version;
+
+ SDL_VERSION(&sdl_version);
+ printf("- SDL %d.%d.%d\n",
+ sdl_version.major,
+ sdl_version.minor,
+ sdl_version.patch);
+ SDL_IMAGE_VERSION(&sdl_version);
+ printf("- SDL_image %d.%d.%d\n",
+ sdl_version.major,
+ sdl_version.minor,
+ sdl_version.patch);
+
+ SDL_MIXER_VERSION(&sdl_version);
+ printf("- SDL_mixer %d.%d.%d\n",
+ sdl_version.major,
+ sdl_version.minor,
+ sdl_version.patch);
+
+ SDL_NET_VERSION(&sdl_version);
+ printf("- SDL_net %d.%d.%d\n",
+ sdl_version.major,
+ sdl_version.minor,
+ sdl_version.patch);
+ }
+}
+
+int main(int argc, char *argv[])
+{
InitProgramInfo(argv[0], USERDATA_DIRECTORY, USERDATA_DIRECTORY_UNIX,
- PROGRAM_TITLE_STRING, window_title_string, ICON_TITLE_STRING,
- X11_ICON_FILENAME, X11_ICONMASK_FILENAME, SDL_ICON_FILENAME,
- MSDOS_POINTER_FILENAME,
- COOKIE_PREFIX, FILENAME_PREFIX, GAME_VERSION_ACTUAL);
+ PROGRAM_TITLE_STRING, ICON_TITLE_STRING, SDL_ICON_FILENAME,
+ COOKIE_PREFIX, GAME_VERSION_ACTUAL);
+ InitWindowTitleFunction(getWindowTitleString);
+ InitExitMessageFunction(DisplayExitMessage);
InitExitFunction(CloseAllAndExit);
InitPlatformDependentStuff();
- GetOptions(argv, print_usage);
+ GetOptions(argv, print_usage, print_version);
OpenAll();
EventLoop();