X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Ffiles.c;h=6d858c475be133ebbe2e54027677bbdbb63c9db7;hb=38c26472a6e9f0f037ddfe535d3919c00772b26f;hp=fad45178abaf3bf6c61eb9567df2b2e97bdd5dc9;hpb=fa2a77aa4b53bb786e67f35d6c46f759ebe7823d;p=rocksndiamonds.git diff --git a/src/files.c b/src/files.c index fad45178..6d858c47 100644 --- a/src/files.c +++ b/src/files.c @@ -96,6 +96,11 @@ static void setLevelInfoToDefaults() BorderElement = EL_STEELWALL; + level.no_level_file = FALSE; + + if (leveldir_current == NULL) /* only when dumping level */ + return; + /* try to determine better author name than 'anonymous' */ if (strcmp(leveldir_current->author, ANONYMOUS_NAME) != 0) { @@ -125,8 +130,6 @@ static void setLevelInfoToDefaults() break; } } - - level.no_level_file = FALSE; } static int checkLevelElement(int element) @@ -310,9 +313,8 @@ static int LoadLevel_CNT2(FILE *file, int chunk_size, struct LevelInfo *level) return chunk_size; } -void LoadLevel(int level_nr) +void LoadLevelFromFilename(char *filename) { - char *filename = getLevelFilename(level_nr); char cookie[MAX_LINE_LEN]; char chunk_name[CHUNK_ID_LEN + 1]; int chunk_size; @@ -433,6 +435,9 @@ void LoadLevel(int level_nr) fclose(file); + if (leveldir_current == NULL) /* only when dumping level */ + return; + if (IS_LEVELCLASS_CONTRIBUTION(leveldir_current) || IS_LEVELCLASS_USER(leveldir_current)) { @@ -484,6 +489,13 @@ void LoadLevel(int level_nr) SetBorderElement(); } +void LoadLevel(int level_nr) +{ + char *filename = getLevelFilename(level_nr); + + LoadLevelFromFilename(filename); +} + static void SaveLevel_VERS(FILE *file, struct LevelInfo *level) { putFileVersion(file, level->file_version); @@ -688,6 +700,35 @@ void SaveLevel(int level_nr) SetFilePermissions(filename, PERMS_PRIVATE); } +void DumpLevel(struct LevelInfo *level) +{ + printf_line('-', 79); + printf("Level xxx (file version %06d, game version %06d)\n", + level->file_version, level->game_version); + printf_line('-', 79); + + printf("Level Author: '%s'\n", level->author); + printf("Level Title: '%s'\n", level->name); + printf("\n"); + printf("Playfield Size: %d x %d\n", level->fieldx, level->fieldy); + printf("\n"); + printf("Level Time: %d seconds\n", level->time); + printf("Gems needed: %d\n", level->gems_needed); + printf("\n"); + printf("Time for Magic Wall: %d seconds\n", level->time_magic_wall); + printf("Time for Wheel: %d seconds\n", level->time_wheel); + printf("Time for Light: %d seconds\n", level->time_light); + printf("Time for Timegate: %d seconds\n", level->time_timegate); + printf("\n"); + printf("Amoeba Speed: %d\n", level->amoeba_speed); + printf("\n"); + printf("Gravity: %s\n", (level->gravity ? "yes" : "no")); + printf("Double Speed Movement: %s\n", (level->double_speed ? "yes" : "no")); + printf("EM style slippery gems: %s\n", (level->em_slippery_gems ? "yes" : "no")); + + printf_line('-', 79); +} + /* ========================================================================= */ /* tape file functions */ @@ -1080,7 +1121,7 @@ void DumpTape(struct TapeInfo *tape) } printf_line('-', 79); - printf("Tape of Level %d (file version %06d, game version %06d)\n", + printf("Tape of Level %03d (file version %06d, game version %06d)\n", tape->level_nr, tape->file_version, tape->game_version); printf_line('-', 79); @@ -1229,34 +1270,48 @@ void SaveScore(int level_nr) #define NUM_GLOBAL_SETUP_TOKENS 22 +/* editor setup */ +#define SETUP_TOKEN_EDITOR_EL_BOULDERDASH 0 +#define SETUP_TOKEN_EDITOR_EL_EMERALD_MINE 1 +#define SETUP_TOKEN_EDITOR_EL_MORE 2 +#define SETUP_TOKEN_EDITOR_EL_SOKOBAN 3 +#define SETUP_TOKEN_EDITOR_EL_SUPAPLEX 4 +#define SETUP_TOKEN_EDITOR_EL_DIAMOND_CAVES 5 +#define SETUP_TOKEN_EDITOR_EL_DX_BOULDERDASH 6 +#define SETUP_TOKEN_EDITOR_EL_CHARS 7 +#define SETUP_TOKEN_EDITOR_EL_CUSTOM 8 + +#define NUM_EDITOR_SETUP_TOKENS 9 + /* shortcut setup */ -#define SETUP_TOKEN_SAVE_GAME 0 -#define SETUP_TOKEN_LOAD_GAME 1 -#define SETUP_TOKEN_TOGGLE_PAUSE 2 +#define SETUP_TOKEN_SHORTCUT_SAVE_GAME 0 +#define SETUP_TOKEN_SHORTCUT_LOAD_GAME 1 +#define SETUP_TOKEN_SHORTCUT_TOGGLE_PAUSE 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 SETUP_TOKEN_PLAYER_USE_JOYSTICK 0 +#define SETUP_TOKEN_PLAYER_JOY_DEVICE_NAME 1 +#define SETUP_TOKEN_PLAYER_JOY_XLEFT 2 +#define SETUP_TOKEN_PLAYER_JOY_XMIDDLE 3 +#define SETUP_TOKEN_PLAYER_JOY_XRIGHT 4 +#define SETUP_TOKEN_PLAYER_JOY_YUPPER 5 +#define SETUP_TOKEN_PLAYER_JOY_YMIDDLE 6 +#define SETUP_TOKEN_PLAYER_JOY_YLOWER 7 +#define SETUP_TOKEN_PLAYER_JOY_SNAP 8 +#define SETUP_TOKEN_PLAYER_JOY_BOMB 9 +#define SETUP_TOKEN_PLAYER_KEY_LEFT 10 +#define SETUP_TOKEN_PLAYER_KEY_RIGHT 11 +#define SETUP_TOKEN_PLAYER_KEY_UP 12 +#define SETUP_TOKEN_PLAYER_KEY_DOWN 13 +#define SETUP_TOKEN_PLAYER_KEY_SNAP 14 +#define SETUP_TOKEN_PLAYER_KEY_BOMB 15 #define NUM_PLAYER_SETUP_TOKENS 16 static struct SetupInfo si; +static struct SetupEditorInfo sei; static struct SetupShortcutInfo ssi; static struct SetupInputInfo sii; @@ -1287,6 +1342,20 @@ static struct TokenInfo global_setup_tokens[] = { TYPE_SWITCH, &si.override_level_music, "override_level_music" }, }; +static struct TokenInfo editor_setup_tokens[] = +{ + /* shortcut setup */ + { TYPE_SWITCH, &sei.el_boulderdash, "editor.el_boulderdash" }, + { TYPE_SWITCH, &sei.el_emerald_mine, "editor.el_emerald_mine" }, + { TYPE_SWITCH, &sei.el_more, "editor.el_more" }, + { TYPE_SWITCH, &sei.el_sokoban, "editor.el_sokoban" }, + { TYPE_SWITCH, &sei.el_supaplex, "editor.el_supaplex" }, + { TYPE_SWITCH, &sei.el_diamond_caves, "editor.el_diamond_caves" }, + { TYPE_SWITCH, &sei.el_dx_boulderdash,"editor.el_dx_boulderdash" }, + { TYPE_SWITCH, &sei.el_chars, "editor.el_chars" }, + { TYPE_SWITCH, &sei.el_custom, "editor.el_custom" }, +}; + static struct TokenInfo shortcut_setup_tokens[] = { /* shortcut setup */ @@ -1347,6 +1416,16 @@ static void setSetupInfoToDefaults(struct SetupInfo *si) si->override_level_sounds = FALSE; si->override_level_music = FALSE; + si->editor.el_boulderdash = TRUE; + si->editor.el_emerald_mine = TRUE; + si->editor.el_more = TRUE; + si->editor.el_sokoban = TRUE; + si->editor.el_supaplex = TRUE; + si->editor.el_diamond_caves = TRUE; + si->editor.el_dx_boulderdash = TRUE; + si->editor.el_chars = TRUE; + si->editor.el_custom = 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; @@ -1386,6 +1465,13 @@ static void decodeSetupFileList(struct SetupFileList *setup_file_list) getTokenValue(setup_file_list, global_setup_tokens[i].text)); setup = si; + /* editor setup */ + sei = setup.editor; + for (i=0; i