lev_fieldx = level->fieldx = fgetc(file);
lev_fieldy = level->fieldy = fgetc(file);
- level->time = getFile16BitInteger(file, BYTE_ORDER_BIG_ENDIAN);
- level->gems_needed = getFile16BitInteger(file, BYTE_ORDER_BIG_ENDIAN);
+ level->time = getFile16BitBE(file);
+ level->gems_needed = getFile16BitBE(file);
for(i=0; i<MAX_LEVEL_NAME_LEN; i++)
level->name[i] = fgetc(file);
for(x=0; x<3; x++)
level->yam_content[i][x][y] =
checkLevelElement(level->encoding_16bit_field ?
- getFile16BitInteger(file, BYTE_ORDER_BIG_ENDIAN) :
- fgetc(file));
+ getFile16BitBE(file) : fgetc(file));
return chunk_size;
}
for(x=0; x<level->fieldx; x++)
Feld[x][y] = Ur[x][y] =
checkLevelElement(level->encoding_16bit_field ?
- getFile16BitInteger(file, BYTE_ORDER_BIG_ENDIAN) :
- fgetc(file));
+ getFile16BitBE(file) : fgetc(file));
return chunk_size;
}
int num_contents, content_xsize, content_ysize;
int content_array[MAX_ELEMENT_CONTENTS][3][3];
- element = checkLevelElement(getFile16BitInteger(file,BYTE_ORDER_BIG_ENDIAN));
+ element = checkLevelElement(getFile16BitBE(file));
num_contents = fgetc(file);
content_xsize = fgetc(file);
content_ysize = fgetc(file);
for(i=0; i<MAX_ELEMENT_CONTENTS; i++)
for(y=0; y<3; y++)
for(x=0; x<3; x++)
- content_array[i][x][y] =
- checkLevelElement(getFile16BitInteger(file, BYTE_ORDER_BIG_ENDIAN));
+ content_array[i][x][y] = checkLevelElement(getFile16BitBE(file));
/* correct invalid number of content fields -- should never happen */
if (num_contents < 1 || num_contents > MAX_ELEMENT_CONTENTS)
return;
}
- getFileChunk(file, chunk_name, NULL, BYTE_ORDER_BIG_ENDIAN);
+ getFileChunkBE(file, chunk_name, NULL);
if (strcmp(chunk_name, "RND1") == 0)
{
- getFile32BitInteger(file, BYTE_ORDER_BIG_ENDIAN); /* not used */
+ getFile32BitBE(file); /* not used */
- getFileChunk(file, chunk_name, NULL, BYTE_ORDER_BIG_ENDIAN);
+ getFileChunkBE(file, chunk_name, NULL);
if (strcmp(chunk_name, "CAVE") != 0)
{
Error(ERR_WARN, "unknown format of level file '%s'", filename);
{ NULL, 0, NULL }
};
- while (getFileChunk(file, chunk_name, &chunk_size, BYTE_ORDER_BIG_ENDIAN))
+ while (getFileChunkBE(file, chunk_name, &chunk_size))
{
int i = 0;
/* player was faster than monsters in (pre-)1.0 levels */
level.double_speed = TRUE;
}
+
+ /* Default behaviour for EM style gems was "slippery" only in 2.0.1 */
+ if (level.game_version == VERSION_IDENT(2,0,1))
+ level.em_slippery_gems = TRUE;
}
else
{
fputc(level->fieldx, file);
fputc(level->fieldy, file);
- putFile16BitInteger(file, level->time, BYTE_ORDER_BIG_ENDIAN);
- putFile16BitInteger(file, level->gems_needed, BYTE_ORDER_BIG_ENDIAN);
+ putFile16BitBE(file, level->time);
+ putFile16BitBE(file, level->gems_needed);
for(i=0; i<MAX_LEVEL_NAME_LEN; i++)
fputc(level->name[i], file);
for(y=0; y<3; y++)
for(x=0; x<3; x++)
if (level->encoding_16bit_field)
- putFile16BitInteger(file, level->yam_content[i][x][y],
- BYTE_ORDER_BIG_ENDIAN);
+ putFile16BitBE(file, level->yam_content[i][x][y]);
else
fputc(level->yam_content[i][x][y], file);
}
for(y=0; y<level->fieldy; y++)
for(x=0; x<level->fieldx; x++)
if (level->encoding_16bit_field)
- putFile16BitInteger(file, Ur[x][y], BYTE_ORDER_BIG_ENDIAN);
+ putFile16BitBE(file, Ur[x][y]);
else
fputc(Ur[x][y], file);
}
return;
}
- putFile16BitInteger(file, element, BYTE_ORDER_BIG_ENDIAN);
+ putFile16BitBE(file, element);
fputc(num_contents, file);
fputc(content_xsize, file);
fputc(content_ysize, file);
for(i=0; i<MAX_ELEMENT_CONTENTS; i++)
for(y=0; y<3; y++)
for(x=0; x<3; x++)
- putFile16BitInteger(file, content_array[i][x][y],
- BYTE_ORDER_BIG_ENDIAN);
+ putFile16BitBE(file, content_array[i][x][y]);
}
void SaveLevel(int level_nr)
body_chunk_size =
level.fieldx * level.fieldy * (level.encoding_16bit_field ? 2 : 1);
- putFileChunk(file, "RND1", CHUNK_SIZE_UNDEFINED, BYTE_ORDER_BIG_ENDIAN);
- putFileChunk(file, "CAVE", CHUNK_SIZE_NONE, BYTE_ORDER_BIG_ENDIAN);
+ putFileChunkBE(file, "RND1", CHUNK_SIZE_UNDEFINED);
+ putFileChunkBE(file, "CAVE", CHUNK_SIZE_NONE);
- putFileChunk(file, "VERS", FILE_VERS_CHUNK_SIZE, BYTE_ORDER_BIG_ENDIAN);
+ putFileChunkBE(file, "VERS", FILE_VERS_CHUNK_SIZE);
WriteChunk_VERS(file, FILE_VERSION_ACTUAL, GAME_VERSION_ACTUAL);
- putFileChunk(file, "HEAD", LEVEL_HEADER_SIZE, BYTE_ORDER_BIG_ENDIAN);
+ putFileChunkBE(file, "HEAD", LEVEL_HEADER_SIZE);
SaveLevel_HEAD(file, &level);
- putFileChunk(file, "AUTH", MAX_LEVEL_AUTHOR_LEN, BYTE_ORDER_BIG_ENDIAN);
+ putFileChunkBE(file, "AUTH", MAX_LEVEL_AUTHOR_LEN);
SaveLevel_AUTH(file, &level);
- putFileChunk(file, "BODY", body_chunk_size, BYTE_ORDER_BIG_ENDIAN);
+ putFileChunkBE(file, "BODY", body_chunk_size);
SaveLevel_BODY(file, &level);
if (level.encoding_16bit_yamyam ||
level.num_yam_contents != STD_ELEMENT_CONTENTS)
{
- putFileChunk(file, "CNT2", LEVEL_CHUNK_CNT2_SIZE, BYTE_ORDER_BIG_ENDIAN);
+ putFileChunkBE(file, "CNT2", LEVEL_CHUNK_CNT2_SIZE);
SaveLevel_CNT2(file, &level, EL_MAMPFER);
}
if (level.encoding_16bit_amoeba)
{
- putFileChunk(file, "CNT2", LEVEL_CHUNK_CNT2_SIZE, BYTE_ORDER_BIG_ENDIAN);
+ putFileChunkBE(file, "CNT2", LEVEL_CHUNK_CNT2_SIZE);
SaveLevel_CNT2(file, &level, EL_AMOEBE_BD);
}
{
int i;
- tape->random_seed = getFile32BitInteger(file, BYTE_ORDER_BIG_ENDIAN);
- tape->date = getFile32BitInteger(file, BYTE_ORDER_BIG_ENDIAN);
- tape->length = getFile32BitInteger(file, BYTE_ORDER_BIG_ENDIAN);
+ tape->random_seed = getFile32BitBE(file);
+ tape->date = getFile32BitBE(file);
+ tape->length = getFile32BitBE(file);
/* read header fields that are new since version 1.2 */
if (tape->file_version >= FILE_VERSION_1_2)
if (!(file = fopen(filename, MODE_READ)))
return;
- getFileChunk(file, chunk_name, NULL, BYTE_ORDER_BIG_ENDIAN);
+ getFileChunkBE(file, chunk_name, NULL);
if (strcmp(chunk_name, "RND1") == 0)
{
- getFile32BitInteger(file, BYTE_ORDER_BIG_ENDIAN); /* not used */
+ getFile32BitBE(file); /* not used */
- getFileChunk(file, chunk_name, NULL, BYTE_ORDER_BIG_ENDIAN);
+ getFileChunkBE(file, chunk_name, NULL);
if (strcmp(chunk_name, "TAPE") != 0)
{
Error(ERR_WARN, "unknown format of tape file '%s'", filename);
{ NULL, 0, NULL }
};
- while (getFileChunk(file, chunk_name, &chunk_size, BYTE_ORDER_BIG_ENDIAN))
+ while (getFileChunkBE(file, chunk_name, &chunk_size))
{
int i = 0;
if (tape->player_participates[i])
store_participating_players |= (1 << i);
- putFile32BitInteger(file, tape->random_seed, BYTE_ORDER_BIG_ENDIAN);
- putFile32BitInteger(file, tape->date, BYTE_ORDER_BIG_ENDIAN);
- putFile32BitInteger(file, tape->length, BYTE_ORDER_BIG_ENDIAN);
+ putFile32BitBE(file, tape->random_seed);
+ putFile32BitBE(file, tape->date);
+ putFile32BitBE(file, tape->length);
fputc(store_participating_players, file);
body_chunk_size = (num_participating_players + 1) * tape.length;
- putFileChunk(file, "RND1", CHUNK_SIZE_UNDEFINED, BYTE_ORDER_BIG_ENDIAN);
- putFileChunk(file, "TAPE", CHUNK_SIZE_NONE, BYTE_ORDER_BIG_ENDIAN);
+ putFileChunkBE(file, "RND1", CHUNK_SIZE_UNDEFINED);
+ putFileChunkBE(file, "TAPE", CHUNK_SIZE_NONE);
- putFileChunk(file, "VERS", FILE_VERS_CHUNK_SIZE, BYTE_ORDER_BIG_ENDIAN);
+ putFileChunkBE(file, "VERS", FILE_VERS_CHUNK_SIZE);
WriteChunk_VERS(file, FILE_VERSION_ACTUAL, GAME_VERSION_ACTUAL);
- putFileChunk(file, "HEAD", TAPE_HEADER_SIZE, BYTE_ORDER_BIG_ENDIAN);
+ putFileChunkBE(file, "HEAD", TAPE_HEADER_SIZE);
SaveTape_HEAD(file, &tape);
- putFileChunk(file, "BODY", body_chunk_size, BYTE_ORDER_BIG_ENDIAN);
+ putFileChunkBE(file, "BODY", body_chunk_size);
SaveTape_BODY(file, &tape);
fclose(file);
/* setup file functions */
/* ========================================================================= */
-#define TOKEN_STR_PLAYER_PREFIX "player_"
+#define TOKEN_STR_PLAYER_PREFIX "player_"
/* global setup */
-#define SETUP_TOKEN_PLAYER_NAME 0
-#define SETUP_TOKEN_SOUND 1
-#define SETUP_TOKEN_SOUND_LOOPS 2
-#define SETUP_TOKEN_SOUND_MUSIC 3
-#define SETUP_TOKEN_SOUND_SIMPLE 4
-#define SETUP_TOKEN_TOONS 5
-#define SETUP_TOKEN_SCROLL_DELAY 6
-#define SETUP_TOKEN_SOFT_SCROLLING 7
-#define SETUP_TOKEN_FADING 8
-#define SETUP_TOKEN_AUTORECORD 9
-#define SETUP_TOKEN_QUICK_DOORS 10
-#define SETUP_TOKEN_TEAM_MODE 11
-#define SETUP_TOKEN_HANDICAP 12
-#define SETUP_TOKEN_TIME_LIMIT 13
-#define SETUP_TOKEN_FULLSCREEN 14
-#define SETUP_TOKEN_ASK_ON_ESCAPE 15
-#define SETUP_TOKEN_GRAPHICS_SET 16
-#define SETUP_TOKEN_SOUNDS_SET 17
-#define SETUP_TOKEN_MUSIC_SET 18
-
-#define NUM_GLOBAL_SETUP_TOKENS 19
+#define SETUP_TOKEN_PLAYER_NAME 0
+#define SETUP_TOKEN_SOUND 1
+#define SETUP_TOKEN_SOUND_LOOPS 2
+#define SETUP_TOKEN_SOUND_MUSIC 3
+#define SETUP_TOKEN_SOUND_SIMPLE 4
+#define SETUP_TOKEN_TOONS 5
+#define SETUP_TOKEN_SCROLL_DELAY 6
+#define SETUP_TOKEN_SOFT_SCROLLING 7
+#define SETUP_TOKEN_FADING 8
+#define SETUP_TOKEN_AUTORECORD 9
+#define SETUP_TOKEN_QUICK_DOORS 10
+#define SETUP_TOKEN_TEAM_MODE 11
+#define SETUP_TOKEN_HANDICAP 12
+#define SETUP_TOKEN_TIME_LIMIT 13
+#define SETUP_TOKEN_FULLSCREEN 14
+#define SETUP_TOKEN_ASK_ON_ESCAPE 15
+#define SETUP_TOKEN_GRAPHICS_SET 16
+#define SETUP_TOKEN_SOUNDS_SET 17
+#define SETUP_TOKEN_MUSIC_SET 18
+#define SETUP_TOKEN_OVERRIDE_LEVEL_GRAPHICS 19
+#define SETUP_TOKEN_OVERRIDE_LEVEL_SOUNDS 20
+#define SETUP_TOKEN_OVERRIDE_LEVEL_MUSIC 21
+
+#define NUM_GLOBAL_SETUP_TOKENS 22
/* shortcut setup */
-#define SETUP_TOKEN_SAVE_GAME 0
-#define SETUP_TOKEN_LOAD_GAME 1
+#define SETUP_TOKEN_SAVE_GAME 0
+#define SETUP_TOKEN_LOAD_GAME 1
+#define SETUP_TOKEN_TOGGLE_PAUSE 2
-#define NUM_SHORTCUT_SETUP_TOKENS 2
+#define NUM_SHORTCUT_SETUP_TOKENS 3
/* player setup */
-#define SETUP_TOKEN_USE_JOYSTICK 0
-#define SETUP_TOKEN_JOY_DEVICE_NAME 1
-#define SETUP_TOKEN_JOY_XLEFT 2
-#define SETUP_TOKEN_JOY_XMIDDLE 3
-#define SETUP_TOKEN_JOY_XRIGHT 4
-#define SETUP_TOKEN_JOY_YUPPER 5
-#define SETUP_TOKEN_JOY_YMIDDLE 6
-#define SETUP_TOKEN_JOY_YLOWER 7
-#define SETUP_TOKEN_JOY_SNAP 8
-#define SETUP_TOKEN_JOY_BOMB 9
-#define SETUP_TOKEN_KEY_LEFT 10
-#define SETUP_TOKEN_KEY_RIGHT 11
-#define SETUP_TOKEN_KEY_UP 12
-#define SETUP_TOKEN_KEY_DOWN 13
-#define SETUP_TOKEN_KEY_SNAP 14
-#define SETUP_TOKEN_KEY_BOMB 15
-
-#define NUM_PLAYER_SETUP_TOKENS 16
+#define SETUP_TOKEN_USE_JOYSTICK 0
+#define SETUP_TOKEN_JOY_DEVICE_NAME 1
+#define SETUP_TOKEN_JOY_XLEFT 2
+#define SETUP_TOKEN_JOY_XMIDDLE 3
+#define SETUP_TOKEN_JOY_XRIGHT 4
+#define SETUP_TOKEN_JOY_YUPPER 5
+#define SETUP_TOKEN_JOY_YMIDDLE 6
+#define SETUP_TOKEN_JOY_YLOWER 7
+#define SETUP_TOKEN_JOY_SNAP 8
+#define SETUP_TOKEN_JOY_BOMB 9
+#define SETUP_TOKEN_KEY_LEFT 10
+#define SETUP_TOKEN_KEY_RIGHT 11
+#define SETUP_TOKEN_KEY_UP 12
+#define SETUP_TOKEN_KEY_DOWN 13
+#define SETUP_TOKEN_KEY_SNAP 14
+#define SETUP_TOKEN_KEY_BOMB 15
+
+#define NUM_PLAYER_SETUP_TOKENS 16
static struct SetupInfo si;
static struct SetupShortcutInfo ssi;
{ TYPE_STRING, &si.graphics_set, "graphics_set" },
{ TYPE_STRING, &si.sounds_set, "sounds_set" },
{ TYPE_STRING, &si.music_set, "music_set" },
+ { TYPE_SWITCH, &si.override_level_graphics, "override_level_graphics" },
+ { TYPE_SWITCH, &si.override_level_sounds, "override_level_sounds" },
+ { TYPE_SWITCH, &si.override_level_music, "override_level_music" },
};
static struct TokenInfo shortcut_setup_tokens[] =
{
/* shortcut setup */
- { TYPE_KEY_X11, &ssi.save_game, "shortcut.save_game" },
- { TYPE_KEY_X11, &ssi.load_game, "shortcut.load_game" }
+ { TYPE_KEY_X11, &ssi.save_game, "shortcut.save_game" },
+ { TYPE_KEY_X11, &ssi.load_game, "shortcut.load_game" },
+ { TYPE_KEY_X11, &ssi.toggle_pause, "shortcut.toggle_pause" }
};
static struct TokenInfo player_setup_tokens[] =
si->graphics_set = getStringCopy(GRAPHICS_SUBDIR);
si->sounds_set = getStringCopy(SOUNDS_SUBDIR);
si->music_set = getStringCopy(MUSIC_SUBDIR);
+ si->override_level_graphics = FALSE;
+ si->override_level_sounds = FALSE;
+ si->override_level_music = FALSE;
si->shortcut.save_game = DEFAULT_KEY_SAVE_GAME;
si->shortcut.load_game = DEFAULT_KEY_LOAD_GAME;
+ si->shortcut.toggle_pause = DEFAULT_KEY_TOGGLE_PAUSE;
for (i=0; i<MAX_PLAYERS; i++)
{