adjusted size of Inputbox; code cleanup for saving/restoring state; also display savegame thumbnail when saving game
This commit is contained in:
parent
cf14254e01
commit
0aa3fc1acf
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 ) {
|
||||
|
|
142
main/state.c
142
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<NUM_SAVES+1; i++ ) {
|
||||
sc_bmp[i] = NULL;
|
||||
if ( !multi )
|
||||
sprintf( filename[i], Use_players_dir? "Players/%s.sg%x" : "%s.sg%x", Players[Player_num].callsign, i );
|
||||
else
|
||||
sprintf( filename[i], Use_players_dir? "Players/%s.mg%x" : "%s.mg%x", Players[Player_num].callsign, i );
|
||||
valid = 0;
|
||||
fp = PHYSFSX_openReadBuffered(filename[i]);
|
||||
if ( fp ) {
|
||||
//Read id
|
||||
//FIXME: check for swapped file, react accordingly...
|
||||
PHYSFS_read(fp, id, sizeof(char) * 4, 1);
|
||||
if ( !memcmp( id, dgss_id, 4 )) {
|
||||
//Read version
|
||||
PHYSFS_read(fp, &version, sizeof(int), 1);
|
||||
if (version >= 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<NUM_SAVES; i++ ) {
|
||||
if ( sc_bmp[i] )
|
||||
gr_free_bitmap( sc_bmp[i] );
|
||||
}
|
||||
|
||||
if (choice > -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<NUM_SAVES+1; i++ ) {
|
||||
m[0].type = NM_TYPE_TEXT; m[0].text = "\n\n\n\n";
|
||||
for (i=0;i<NUM_SAVES; i++ ) {
|
||||
sc_bmp[i] = NULL;
|
||||
if (!multi)
|
||||
sprintf( filename[i], Use_players_dir? "Players/%s.sg%x" : "%s.sg%x", Players[Player_num].callsign, i );
|
||||
|
@ -301,16 +245,15 @@ int state_get_restore_file(char * fname, int multi)
|
|||
fp = PHYSFSX_openReadBuffered(filename[i]);
|
||||
if ( fp ) {
|
||||
//Read id
|
||||
//FIXME: check for swapped file, react accordingly...
|
||||
PHYSFS_read(fp, id, sizeof(char) * 4, 1);
|
||||
if ( !memcmp( id, dgss_id, 4 )) {
|
||||
//Read version
|
||||
PHYSFS_read(fp, &version, sizeof(int), 1);
|
||||
if (version >= 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<NUM_SAVES+1; i++ ) {
|
||||
for (i=0; i<NUM_SAVES; i++ ) {
|
||||
if ( sc_bmp[i] )
|
||||
gr_free_bitmap( sc_bmp[i] );
|
||||
}
|
||||
|
||||
if (choice > 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;
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in a new issue