diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 95d1918cc..3ea3ca800 100755 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -1,5 +1,9 @@ D2X-Rebirth Changelog +20070616 +-------- +main/newmenu.c: adjusted size of Inputbox; code cleanup for saving/restoring state; also display savegame thumbnail when saving game + 20070615 -------- SConstruct, arch/sdl/digi.c: complete removal of hmiplay-code usage diff --git a/main/game.c b/main/game.c index 8ba04715d..a40755260 100755 --- a/main/game.c +++ b/main/game.c @@ -1453,7 +1453,7 @@ void show_help() m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "F3\t SWITCH COCKPIT MODES"; m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = TXT_HELP_F4; m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = TXT_HELP_F5; - m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "F6\t Fast Save"; +// m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "F6\t Fast Save"; m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = "ALT-F7\t SWITCH HUD MODES"; #ifndef MACINTOSH m[nitems].type = NM_TYPE_TEXT; m[nitems++].text = TXT_HELP_PAUSE; diff --git a/main/gamecntl.c b/main/gamecntl.c index 91567c6bf..2f40b1dc7 100755 --- a/main/gamecntl.c +++ b/main/gamecntl.c @@ -1121,24 +1121,6 @@ int HandleSystemKey(int key) #endif break; - MAC(case KEY_COMMAND + KEY_6:) - case KEY_F6: - if (!Player_is_dead && !(Game_mode & GM_MULTI)) - { - int rsave, gsave, bsave; - rsave = PaletteRedAdd; - gsave = PaletteGreenAdd; - bsave = PaletteBlueAdd; - - full_palette_save(); - PaletteRedAdd = rsave; - PaletteGreenAdd = gsave; - PaletteBlueAdd = bsave; - state_save_all(0, 0, NULL, 1); // 0 means not between levels. - palette_restore(); - } - break; - MAC(case KEY_COMMAND+KEY_7:) case KEY_F7: #ifdef NETWORK @@ -1220,7 +1202,7 @@ int HandleSystemKey(int key) PaletteRedAdd = rsave; PaletteGreenAdd = gsave; PaletteBlueAdd = bsave; - state_save_all(0, 0, NULL, 0); // 0 means not between levels. + state_save_all(0, 0, NULL); // 0 means not between levels. palette_restore(); } break; diff --git a/main/gameseq.c b/main/gameseq.c index 98b4c7e30..36016ac17 100755 --- a/main/gameseq.c +++ b/main/gameseq.c @@ -1256,7 +1256,7 @@ void ExitSecretLevel(void) return; if (!Control_center_destroyed) { - state_save_all(0, 2, SECRETC_FILENAME, 0); + state_save_all(0, 2, SECRETC_FILENAME); } if (PHYSFS_exists(SECRETB_FILENAME)) @@ -1317,7 +1317,7 @@ void EnterSecretLevel(void) DoEndLevelScoreGlitz(0); if (Newdemo_state != ND_STATE_PLAYBACK) - state_save_all(0, 1, NULL, 0); // Not between levels (ie, save all), IS a secret level, NO filename override + state_save_all(0, 1, NULL); // Not between levels (ie, save all), IS a secret level, NO filename override // Find secret level number to go to, stuff in Next_level_num. for (i=0; i<-Last_secret_level; i++) @@ -1727,7 +1727,7 @@ void DoPlayerDead() { returning_to_level_message(); if (!Control_center_destroyed) - state_save_all(0, 2, SECRETC_FILENAME, 0); + state_save_all(0, 2, SECRETC_FILENAME); state_restore_all(1, 2, SECRETB_FILENAME); set_pos_from_return_segment(); Players[Player_num].lives--; // re-lose the life, Players[Player_num].lives got written over in restore. diff --git a/main/multi.c b/main/multi.c index de88a4e38..68f43c50e 100755 --- a/main/multi.c +++ b/main/multi.c @@ -3621,7 +3621,7 @@ void multi_initiate_save_game() //stop_time(); - slot = state_get_save_file(filename, desc, 1, 0); + slot = state_get_save_file(filename, desc, 1/*, 0*/); if (!slot) { //start_time(); return; diff --git a/main/newmenu.c b/main/newmenu.c index b3912f5c1..20137500a 100644 --- a/main/newmenu.c +++ b/main/newmenu.c @@ -115,7 +115,7 @@ typedef struct bkg { grs_bitmap nm_background,nm_background1,nm_background_save; #define MESSAGEBOX_TEXT_SIZE 2176 // How many characters in messagebox (changed form 300 (fixes crash from show_game_score and friends) - 2000/01/18 Matt Mueller) -#define MAX_TEXT_WIDTH ((MenuHires)?FONTSCALE_X(200):100) // How many pixels wide a input box can be +#define MAX_TEXT_WIDTH FONTSCALE_X((MenuHires)?240:120) // How many pixels wide a input box can be #define MENSCALE_X ((MenuHires)?(SWIDTH/640):(SWIDTH/320)) #define MENSCALE_Y ((MenuHires)?(SHEIGHT/480):(SHEIGHT/200)) @@ -663,7 +663,7 @@ int check_button_press() } extern int network_request_player_names(int); -extern int RestoringMenu; +// extern int RestoringMenu; #ifdef NEWMENU_MOUSE ubyte Hack_DblClick_MenuMode=0; @@ -841,7 +841,7 @@ int newmenu_do4( char * title, char * subtitle, int nitems, newmenu_item * item, Assert( strlen(item[i].text) < NM_MAX_TEXT_LEN ); strcpy(item[i].saved_text, item[i].text ); nothers++; - string_width = item[i].text_len*FONTSCALE_X(grd_curcanv->cv_font->ft_w+((MenuHires?3:1))*item[i].text_len); + string_width = item[i].text_len*FONTSCALE_X(grd_curcanv->cv_font->ft_w)+item[i].text_len; if ( string_width > MAX_TEXT_WIDTH ) string_width = MAX_TEXT_WIDTH; item[i].value = -1; @@ -851,7 +851,7 @@ int newmenu_do4( char * title, char * subtitle, int nitems, newmenu_item * item, Assert( strlen(item[i].text) < NM_MAX_TEXT_LEN ); strcpy(item[i].saved_text, item[i].text ); nmenus++; - string_width = item[i].text_len*FONTSCALE_X(grd_curcanv->cv_font->ft_w+((MenuHires?3:1))*item[i].text_len); + string_width = item[i].text_len*FONTSCALE_X(grd_curcanv->cv_font->ft_w)+item[i].text_len; item[i].value = -1; item[i].group = 0; } @@ -907,8 +907,8 @@ int newmenu_do4( char * title, char * subtitle, int nitems, newmenu_item * item, w = tw; } - if (RestoringMenu) - { right_offset=0; twidth=0;} +// if (RestoringMenu) +// { right_offset=0; twidth=0;} mprintf(( 0, "Right offset = %d\n", right_offset )); @@ -1641,7 +1641,7 @@ int newmenu_do4( char * title, char * subtitle, int nitems, newmenu_item * item, } // HACK! Don't redraw loadgame preview - if (RestoringMenu) item[0].redraw = 0; +// if (RestoringMenu) item[0].redraw = 0; #endif // NEWMENU_MOUSE if ( choice > -1 ) { diff --git a/main/state.c b/main/state.c index eb57d20bb..50c4408dc 100755 --- a/main/state.c +++ b/main/state.c @@ -129,7 +129,7 @@ COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. // 20- First_secret_visit // 22- Omega_charge -#define NUM_SAVES 9 +#define NUM_SAVES 10 #define THUMBNAIL_W 100 #define THUMBNAIL_H 50 #define DESC_LENGTH 20 @@ -149,11 +149,11 @@ extern void do_lunacy_off(void); extern int First_secret_visit; int sc_last_item= 0; -grs_bitmap *sc_bmp[NUM_SAVES+1]; +grs_bitmap *sc_bmp[NUM_SAVES]; char dgss_id[4] = "DGSS"; -int state_default_item = -2; +int state_default_item = 0; uint state_game_id; @@ -217,81 +217,25 @@ void rpad_string( char * string, int max_chars ) *string = 0; // NULL terminate } -int state_get_save_file(char * fname, char * dsc, int multi, int blind_save) +/* Present a menu for selection of a savegame filename. + * For saving, dsc should be a pre-allocated buffer into which the new + * savegame description will be stored. + * For restoring, dsc should be NULL, in which case empty slots will not be + * selectable and savagames descriptions will not be editable. + */ +int state_get_savegame_filename(char * fname, char * dsc, int multi, char * caption ) { - PHYSFS_file *fp; - int i, choice, version; - newmenu_item m[NUM_SAVES+2]; - char filename[NUM_SAVES+1][30]; - char desc[NUM_SAVES+1][DESC_LENGTH+16]; - char id[5]; - int valid=0; - - for (i=0;i= STATE_COMPATIBLE_VERSION) { - // Read description - PHYSFS_read(fp, desc[i], sizeof(char) * DESC_LENGTH, 1); - valid = 1; - } - } - PHYSFS_close(fp); - } - if (!valid) { - strcpy( desc[i], TXT_EMPTY ); - } - m[i].type = NM_TYPE_INPUT_MENU; m[i].text = desc[i]; m[i].text_len = DESC_LENGTH-1; - } - - sc_last_item = -1; - if (blind_save && state_default_item >= 0) - choice = state_default_item; - else - choice = newmenu_do3(NULL, "Save Game", NUM_SAVES+1, m, state_callback, (state_default_item >= 0) ? state_default_item : 0, NULL, FONTSCALE_X(MenuHires?385:190), -1 ); - - for (i=0; i -1) { - strcpy( fname, filename[choice] ); - strcpy( dsc, desc[choice] ); - state_default_item = choice; - return choice+1; - } - return 0; -} - -int RestoringMenu=0; -extern int Current_display_mode; - -int state_get_restore_file(char * fname, int multi) -{ - PHYSFS_file *fp; + PHYSFS_file * fp; int i, choice, version, nsaves; - newmenu_item m[NUM_SAVES+2]; - char filename[NUM_SAVES+1][30]; - char desc[NUM_SAVES+1][DESC_LENGTH + 16]; + newmenu_item m[NUM_SAVES+1]; + char filename[NUM_SAVES][20]; + char desc[NUM_SAVES][DESC_LENGTH + 16]; char id[5]; int valid; nsaves=0; - m[0].type = NM_TYPE_TEXT; m[0].text = "\n\n\n\n"; - for (i=0;i= STATE_COMPATIBLE_VERSION) { + if (version >= STATE_COMPATIBLE_VERSION) { // Read description PHYSFS_read(fp, desc[i], sizeof(char) * DESC_LENGTH, 1); //rpad_string( desc[i], DESC_LENGTH-1 ); - m[i+1].type = NM_TYPE_MENU; m[i+1].text = desc[i]; + if (dsc == NULL) m[i+1].type = NM_TYPE_MENU; // Read thumbnail sc_bmp[i] = gr_create_bitmap(THUMBNAIL_W,THUMBNAIL_H ); PHYSFS_read(fp, sc_bmp[i]->bm_data, THUMBNAIL_W * THUMBNAIL_H, 1); @@ -324,53 +267,51 @@ int state_get_restore_file(char * fname, int multi) } } PHYSFS_close(fp); - } + } if (!valid) { strcpy( desc[i], TXT_EMPTY ); //rpad_string( desc[i], DESC_LENGTH-1 ); - m[i+1].type = NM_TYPE_TEXT; m[i+1].text = desc[i]; + if (dsc == NULL) m[i+1].type = NM_TYPE_TEXT; } + if (dsc != NULL) { + m[i+1].type = NM_TYPE_INPUT_MENU; + } + m[i+1].text_len = DESC_LENGTH-1; + m[i+1].text = desc[i]; } - if ( nsaves < 1 ) { + if ( dsc == NULL && nsaves < 1 ) { nm_messagebox( NULL, 1, "Ok", "No saved games were found!" ); return 0; } - if (Current_display_mode == 3) //restore menu won't fit on 640x400 - VR_screen_flags ^= VRF_COMPATIBLE_MENUS; - sc_last_item = -1; + choice = newmenu_do3( NULL, caption, NUM_SAVES+1, m, state_callback, state_default_item + 1, NULL, -1, -1 ); -#if defined(WINDOWS) || defined(MACINTOSH) - Hack_DblClick_MenuMode = 1; -#endif - - RestoringMenu=1; - choice = newmenu_do3( NULL, "Select Game to Restore", NUM_SAVES+2, m, state_callback, (state_default_item >= 0) ? state_default_item + 1 : 1, NULL, 190, -1 ); - RestoringMenu=0; - -#if defined(WINDOWS) || defined(MACINTOSH) - Hack_DblClick_MenuMode = 0; -#endif - - if (Current_display_mode == 3) //set flag back - VR_screen_flags ^= VRF_COMPATIBLE_MENUS; - - - for (i=0; i 0) { strcpy( fname, filename[choice-1] ); + if ( dsc != NULL ) strcpy( dsc, desc[choice-1] ); state_default_item = choice - 1; return choice; } return 0; } +int state_get_save_file(char * fname, char * dsc, int multi ) +{ + return state_get_savegame_filename(fname, dsc, multi, "Save Game"); +} + +int state_get_restore_file(char * fname, int multi ) +{ + return state_get_savegame_filename(fname, NULL, multi, "Select Game to Restore"); +} + #define DESC_OFFSET 8 // ----------------------------------------------------------------------------------- @@ -428,8 +369,7 @@ int copy_file(char *old_file, char *new_file) extern int Final_boss_is_dead; // ----------------------------------------------------------------------------------- -// blind_save means don't prompt user for any info. -int state_save_all(int between_levels, int secret_save, char *filename_override, int blind_save) +int state_save_all(int between_levels, int secret_save, char *filename_override) { int rval, filenum = -1; @@ -471,7 +411,7 @@ int state_save_all(int between_levels, int secret_save, char *filename_override, filename_override = filename; sprintf(filename_override, SECRETC_FILENAME); } else { - if (!(filenum = state_get_save_file(filename, desc, 0, blind_save))) + if (!(filenum = state_get_save_file(filename, desc, 0))) { start_time(); return 0; diff --git a/main/state.h b/main/state.h index 25211f4c0..51a43da2a 100755 --- a/main/state.h +++ b/main/state.h @@ -27,7 +27,7 @@ extern int Use_players_dir; #define SECRETB_FILENAME Use_players_dir? "Players/secret.sgb" : "secret.sgb" #define SECRETC_FILENAME Use_players_dir? "Players/secret.sgc" : "secret.sgc" -int state_save_all(int between_levels, int secret_save, char *filename_override, int blind_save); +int state_save_all(int between_levels, int secret_save, char *filename_override); int state_restore_all(int in_game, int secret_restore, char *filename_override); int state_save_all_sub(char *filename, char *desc, int between_levels); @@ -35,7 +35,7 @@ int state_restore_all_sub(char *filename, int multi, int secret_restore); extern uint state_game_id; -int state_get_save_file(char *fname, char * dsc, int multi, int blind_save); +int state_get_save_file(char *fname, char * dsc, int multi); int state_get_restore_file(char *fname, int multi); #endif /* _STATE_H */