Handle player selection and demo playing in filename_menu_handler, fixing bug where it won't leave the player listbox if there's no LastPlayer; close do_options dialog when changing resolution
This commit is contained in:
parent
e5adf29b6c
commit
5f73aa9005
|
@ -3,6 +3,7 @@ D1X-Rebirth Changelog
|
||||||
20100206
|
20100206
|
||||||
--------
|
--------
|
||||||
main/newmenu.c: Set the correct scroll position for the listbox when it's shown
|
main/newmenu.c: Set the correct scroll position for the listbox when it's shown
|
||||||
|
main/gameseq.c, main/gameseq.h, main/menu.c, main/menu.h: Handle player selection and demo playing in filename_menu_handler, fixing bug where it won't leave the player listbox if there's no LastPlayer; close do_options dialog when changing resolution
|
||||||
|
|
||||||
20100205
|
20100205
|
||||||
--------
|
--------
|
||||||
|
|
|
@ -590,37 +590,18 @@ try_again:
|
||||||
//Inputs the player's name, without putting up the background screen
|
//Inputs the player's name, without putting up the background screen
|
||||||
int RegisterPlayer()
|
int RegisterPlayer()
|
||||||
{
|
{
|
||||||
char filename[PATH_MAX];
|
|
||||||
int allow_abort_flag = 1;
|
int allow_abort_flag = 1;
|
||||||
|
|
||||||
if ( Players[Player_num].callsign[0] == 0 ) {
|
if ( Players[Player_num].callsign[0] == 0 )
|
||||||
|
{
|
||||||
// Read the last player's name from config file, not lastplr.txt
|
// Read the last player's name from config file, not lastplr.txt
|
||||||
strncpy( Players[Player_num].callsign, GameCfg.LastPlayer, CALLSIGN_LEN );
|
strncpy( Players[Player_num].callsign, GameCfg.LastPlayer, CALLSIGN_LEN );
|
||||||
|
|
||||||
if (GameCfg.LastPlayer[0]==0)
|
if (GameCfg.LastPlayer[0]==0)
|
||||||
allow_abort_flag = 0;
|
allow_abort_flag = 0;
|
||||||
}
|
|
||||||
|
|
||||||
do_menu_again:
|
|
||||||
;
|
|
||||||
|
|
||||||
if (get_filename(TXT_SELECT_PILOT, ".plr", filename, allow_abort_flag))
|
|
||||||
{
|
|
||||||
if ( filename[0] == '<' ) {
|
|
||||||
// They selected 'create new pilot'
|
|
||||||
if (!MakeNewPlayerFile(allow_abort_flag))
|
|
||||||
//return 0; // They hit Esc during enter name stage
|
|
||||||
goto do_menu_again;
|
|
||||||
} else {
|
|
||||||
strncpy(Players[Player_num].callsign,filename, CALLSIGN_LEN);
|
|
||||||
strlwr(Players[Player_num].callsign);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (read_player_file() != EZERO)
|
select_filename(TXT_SELECT_PILOT, ".plr", allow_abort_flag);
|
||||||
goto do_menu_again;
|
|
||||||
|
|
||||||
WriteConfigFile(); // Update lastplr
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
235
main/gameseq.h
235
main/gameseq.h
|
@ -1,3 +1,4 @@
|
||||||
|
/* $Id: gameseq.h,v 1.1.1.1 2006/03/17 19:57:54 zicodxx Exp $ */
|
||||||
/*
|
/*
|
||||||
THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
|
THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
|
||||||
SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
|
SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO
|
||||||
|
@ -7,164 +8,15 @@ IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
|
||||||
SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
|
SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
|
||||||
FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
|
FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
|
||||||
CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
|
CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS
|
||||||
AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
|
AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.
|
||||||
COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
|
COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
|
||||||
*/
|
*/
|
||||||
/*
|
|
||||||
* $Source: /cvsroot/dxx-rebirth/d1x-rebirth/main/gameseq.h,v $
|
|
||||||
* $Revision: 1.1.1.1 $
|
|
||||||
* $Author: zicodxx $
|
|
||||||
* $Date: 2006/03/17 19:45:04 $
|
|
||||||
*
|
|
||||||
* Prototypes for functions for game sequencing.
|
|
||||||
*
|
|
||||||
* $Log: gameseq.h,v $
|
|
||||||
* Revision 1.1.1.1 2006/03/17 19:45:04 zicodxx
|
|
||||||
* initial import
|
|
||||||
*
|
|
||||||
* Revision 1.1.1.1 1999/06/14 22:12:27 donut
|
|
||||||
* Import of d1x 1.37 source.
|
|
||||||
*
|
|
||||||
* Revision 2.0 1995/02/27 11:32:03 john
|
|
||||||
* New version 2.0, which has no anonymous unions, builds with
|
|
||||||
* Watcom 10.0, and doesn't require parsing BITMAPS.TBL.
|
|
||||||
*
|
|
||||||
* Revision 1.41 1995/02/07 10:51:54 rob
|
|
||||||
* fix typo.
|
|
||||||
*
|
|
||||||
* Revision 1.40 1995/02/06 20:10:16 rob
|
|
||||||
* Extern'ed DoEndLevelScoreGlitz.
|
|
||||||
*
|
|
||||||
* Revision 1.39 1995/02/01 16:34:13 john
|
|
||||||
* Linted.
|
|
||||||
*
|
|
||||||
* Revision 1.38 1995/01/27 11:15:03 rob
|
|
||||||
* Added extern for player position vars.
|
|
||||||
*
|
|
||||||
* Revision 1.37 1995/01/20 22:47:38 matt
|
|
||||||
* Mission system implemented, though imcompletely
|
|
||||||
*
|
|
||||||
* Revision 1.36 1995/01/17 13:36:08 john
|
|
||||||
* Moved pig loading into StartNewLevelSub.
|
|
||||||
*
|
|
||||||
* Revision 1.35 1995/01/04 12:21:28 john
|
|
||||||
* *** empty log message ***
|
|
||||||
*
|
|
||||||
* Revision 1.34 1995/01/04 12:20:47 john
|
|
||||||
* Declearations to work better with game state save.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* Revision 1.33 1994/12/08 09:46:35 matt
|
|
||||||
* Made level name len a multiple of 4 for alignment
|
|
||||||
*
|
|
||||||
* Revision 1.32 1994/11/29 16:33:29 rob
|
|
||||||
* Added new defines for last_secret_level based on shareware or not shareware.
|
|
||||||
*
|
|
||||||
* Revision 1.31 1994/11/26 15:30:20 matt
|
|
||||||
* Allow escape out of change pilot menu
|
|
||||||
*
|
|
||||||
* Revision 1.30 1994/11/21 17:29:38 matt
|
|
||||||
* Cleaned up sequencing & game saving for secret levels
|
|
||||||
*
|
|
||||||
* Revision 1.29 1994/11/21 15:55:03 matt
|
|
||||||
* Corrected LAST_LEVEL
|
|
||||||
*
|
|
||||||
* Revision 1.28 1994/11/20 22:12:43 mike
|
|
||||||
* set LAST_LEVEL based on SHAREWARE.
|
|
||||||
*
|
|
||||||
* Revision 1.27 1994/11/09 10:55:51 matt
|
|
||||||
* Cleaned up initialization for editor -> game transitions
|
|
||||||
*
|
|
||||||
* Revision 1.26 1994/11/08 17:50:48 rob
|
|
||||||
* ADded prototype for StartNewLEvel.
|
|
||||||
*
|
|
||||||
*
|
|
||||||
* Revision 1.25 1994/11/07 17:50:57 rob
|
|
||||||
* Added extern prototype for init_player_stats_level called for
|
|
||||||
* network games.
|
|
||||||
*
|
|
||||||
* Revision 1.24 1994/10/25 15:40:03 yuan
|
|
||||||
* *** empty log message ***
|
|
||||||
*
|
|
||||||
* Revision 1.23 1994/10/22 00:08:52 matt
|
|
||||||
* Fixed up problems with bonus & game sequencing
|
|
||||||
* Player doesn't get credit for hostages unless he gets them out alive
|
|
||||||
*
|
|
||||||
* Revision 1.22 1994/10/18 18:57:08 matt
|
|
||||||
* Added main menu option to enter new player name
|
|
||||||
*
|
|
||||||
* Revision 1.21 1994/10/07 23:37:32 matt
|
|
||||||
* Added prototype
|
|
||||||
*
|
|
||||||
* Revision 1.20 1994/10/07 16:02:53 matt
|
|
||||||
* Loading saved game no longer clears players weapons & other stats
|
|
||||||
*
|
|
||||||
* Revision 1.19 1994/10/06 14:12:46 matt
|
|
||||||
* Added flash effect when player appears
|
|
||||||
*
|
|
||||||
* Revision 1.18 1994/10/03 13:34:44 matt
|
|
||||||
* Added new (and hopefully better) game sequencing functions
|
|
||||||
*
|
|
||||||
* Revision 1.17 1994/09/30 15:19:53 matt
|
|
||||||
* Added new game sequencing functions, but left them disabled for now.
|
|
||||||
*
|
|
||||||
* Revision 1.16 1994/09/28 17:24:34 matt
|
|
||||||
* Added first draft of game save/load system
|
|
||||||
*
|
|
||||||
* Revision 1.15 1994/09/27 12:29:42 matt
|
|
||||||
* Changed level naming
|
|
||||||
*
|
|
||||||
* Revision 1.14 1994/09/02 11:53:55 mike
|
|
||||||
* Rename init_player_stats to init_player_stats_game.
|
|
||||||
*
|
|
||||||
* Revision 1.13 1994/08/31 20:57:34 matt
|
|
||||||
* Cleaned up endlevel/death code
|
|
||||||
*
|
|
||||||
* Revision 1.12 1994/08/23 18:45:06 yuan
|
|
||||||
* Added level 10 capability.. (LEDGES)
|
|
||||||
*
|
|
||||||
* Revision 1.11 1994/08/18 10:47:38 john
|
|
||||||
* Cleaned up game sequencing and player death stuff
|
|
||||||
* in preparation for making the player explode into
|
|
||||||
* pieces when dead.
|
|
||||||
*
|
|
||||||
* Revision 1.10 1994/08/15 15:24:45 john
|
|
||||||
* Made players know who killed them; Disabled cheat menu
|
|
||||||
* during net player; fixed bug with not being able to turn
|
|
||||||
* of invulnerability; Made going into edit/starting new leve
|
|
||||||
* l drop you out of a net game; made death dialog box.
|
|
||||||
*
|
|
||||||
* Revision 1.9 1994/08/13 12:20:56 john
|
|
||||||
* Made the networking uise the Players array.
|
|
||||||
*
|
|
||||||
* Revision 1.8 1994/07/22 12:36:24 matt
|
|
||||||
* Cleaned up editor/game interactions some more.
|
|
||||||
*
|
|
||||||
* Revision 1.7 1994/07/19 20:15:33 matt
|
|
||||||
* Name for each level now saved in the .SAV file & stored in Current_level_name
|
|
||||||
*
|
|
||||||
* Revision 1.6 1994/07/02 13:49:33 matt
|
|
||||||
* Cleaned up includes
|
|
||||||
*
|
|
||||||
* Revision 1.5 1994/07/02 13:09:52 matt
|
|
||||||
* Moved player stats struct from gameseq.h to player.h
|
|
||||||
*
|
|
||||||
* Revision 1.4 1994/07/01 16:35:35 yuan
|
|
||||||
* Added key system
|
|
||||||
*
|
|
||||||
* Revision 1.3 1994/06/26 14:07:35 matt
|
|
||||||
* Added prototypes
|
|
||||||
*
|
|
||||||
* Revision 1.2 1994/06/24 17:03:56 john
|
|
||||||
* Added VFX support. Also took all game sequencing stuff like
|
|
||||||
* EndGame out and put it into gameseq.c
|
|
||||||
*
|
|
||||||
* Revision 1.1 1994/06/24 14:13:53 john
|
|
||||||
* Initial revision
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Prototypes for functions for game sequencing.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef _GAMESEQ_H
|
#ifndef _GAMESEQ_H
|
||||||
|
@ -173,10 +25,10 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
|
||||||
#include "player.h"
|
#include "player.h"
|
||||||
#include "mission.h"
|
#include "mission.h"
|
||||||
|
|
||||||
#define SUPER_MISSILE 0
|
#define SUPER_MISSILE 0
|
||||||
#define SUPER_SEEKER 1
|
#define SUPER_SEEKER 1
|
||||||
#define SUPER_SMARTBOMB 2
|
#define SUPER_SMARTBOMB 2
|
||||||
#define SUPER_SHOCKWAVE 3
|
#define SUPER_SHOCKWAVE 3
|
||||||
|
|
||||||
#ifdef SHAREWARE
|
#ifdef SHAREWARE
|
||||||
#define Last_level 7 //the number of the very last level for shareware
|
#define Last_level 7 //the number of the very last level for shareware
|
||||||
|
@ -187,86 +39,87 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
|
||||||
|
|
||||||
// extern int Secret_level_table[MAX_SECRET_LEVELS_PER_MISSION];
|
// extern int Secret_level_table[MAX_SECRET_LEVELS_PER_MISSION];
|
||||||
|
|
||||||
#define LEVEL_NAME_LEN 36 //make sure this is multipe of 4!
|
#define LEVEL_NAME_LEN 36 //make sure this is multiple of 4!
|
||||||
|
|
||||||
//Current_level_num starts at 1 for the first level
|
// Current_level_num starts at 1 for the first level
|
||||||
//-1,-2,-3 are secret levels
|
// -1,-2,-3 are secret levels
|
||||||
//0 means not a real level loaded
|
// 0 means not a real level loaded
|
||||||
extern int Current_level_num,Next_level_num;
|
extern int Current_level_num, Next_level_num;
|
||||||
extern char Current_level_name[LEVEL_NAME_LEN];
|
extern char Current_level_name[LEVEL_NAME_LEN];
|
||||||
extern obj_position Player_init[MAX_PLAYERS];
|
extern obj_position Player_init[MAX_PLAYERS];
|
||||||
|
|
||||||
|
|
||||||
//This is the highest level the player has ever reached
|
// This is the highest level the player has ever reached
|
||||||
extern int Player_highest_level;
|
extern int Player_highest_level;
|
||||||
|
|
||||||
//
|
//
|
||||||
// New game sequencing functions
|
// New game sequencing functions
|
||||||
//
|
//
|
||||||
|
|
||||||
//called once at program startup to get the player's name
|
// called once at program startup to get the player's name
|
||||||
int RegisterPlayer();
|
int RegisterPlayer();
|
||||||
|
int MakeNewPlayerFile(int allow_abort);
|
||||||
|
|
||||||
//Inputs the player's name, without putting up the background screen
|
// Inputs the player's name, without putting up the background screen
|
||||||
void RegisterPlayerSub(int allow_abort_flag);
|
void RegisterPlayerSub(int allow_abort_flag);
|
||||||
|
|
||||||
//starts a new game on the given level
|
// starts a new game on the given level
|
||||||
void StartNewGame(int start_level);
|
void StartNewGame(int start_level);
|
||||||
|
|
||||||
//starts the next level
|
// starts the next level
|
||||||
void StartNewLevel(int level_num);
|
void StartNewLevel(int level_num);
|
||||||
|
|
||||||
// Actually does the work to start new level
|
// Actually does the work to start new level
|
||||||
void StartNewLevelSub(int level_num, int page_in_textures);
|
void StartNewLevelSub(int level_num, int page_in_textures);
|
||||||
|
|
||||||
void InitPlayerObject(); //make sure player's object set up
|
void InitPlayerObject(); //make sure player's object set up
|
||||||
void init_player_stats_game(); //clear all stats
|
void init_player_stats_game(); //clear all stats
|
||||||
|
|
||||||
//starts a resumed game loaded from disk
|
// starts a resumed game loaded from disk
|
||||||
void ResumeSavedGame(int start_level);
|
void ResumeSavedGame(int start_level);
|
||||||
|
|
||||||
//called when the player has finished a level
|
// called when the player has finished a level
|
||||||
//if secret flag is true, advance to secret level, else next normal level
|
// if secret flag is true, advance to secret level, else next normal level
|
||||||
void PlayerFinishedLevel(int secret_flag);
|
void PlayerFinishedLevel(int secret_flag);
|
||||||
|
|
||||||
//called when the player has died
|
// called when the player has died
|
||||||
void DoPlayerDead();
|
void DoPlayerDead(void);
|
||||||
|
|
||||||
//load a level off disk. level numbers start at 1.
|
// load a level off disk. level numbers start at 1.
|
||||||
//Secret levels are -1,-2,-3
|
// Secret levels are -1,-2,-3
|
||||||
void LoadLevel(int level_num);
|
void LoadLevel(int level_num);
|
||||||
|
|
||||||
extern void gameseq_remove_unused_players();
|
extern void gameseq_remove_unused_players();
|
||||||
|
|
||||||
extern void show_help();
|
extern void show_help();
|
||||||
extern void update_player_stats();
|
extern void update_player_stats();
|
||||||
|
|
||||||
//from scores.c
|
// from scores.c
|
||||||
|
|
||||||
extern void show_high_scores( int place );
|
extern void show_high_scores(int place);
|
||||||
extern void draw_high_scores( int place );
|
extern void draw_high_scores(int place);
|
||||||
extern int add_player_to_high_scores(player *pp);
|
extern int add_player_to_high_scores(player *pp);
|
||||||
extern void input_name ( int place );
|
extern void input_name (int place);
|
||||||
extern int reset_high_scores();
|
extern int reset_high_scores();
|
||||||
extern void init_player_stats_level();
|
extern void init_player_stats_level();
|
||||||
|
|
||||||
void open_message_window(void);
|
void open_message_window(void);
|
||||||
void close_message_window(void);
|
void close_message_window(void);
|
||||||
|
|
||||||
//create flash for player appearance
|
// create flash for player appearance
|
||||||
extern void create_player_appearance_effect(object *player_obj);
|
extern void create_player_appearance_effect(object *player_obj);
|
||||||
|
|
||||||
//goto whatever secrect level is appropriate given the current level
|
// goto whatever secrect level is appropriate given the current level
|
||||||
//extern int goto_secret_level();
|
//extern int goto_secret_level();
|
||||||
|
|
||||||
//reset stuff so game is semi-normal when playing from editor
|
// reset stuff so game is semi-normal when playing from editor
|
||||||
void editor_reset_stuff_on_level();
|
void editor_reset_stuff_on_level();
|
||||||
|
|
||||||
//Show endlevel bonus scores
|
// Show endlevel bonus scores
|
||||||
extern void DoEndLevelScoreGlitz(int network);
|
extern void DoEndLevelScoreGlitz(int network);
|
||||||
|
|
||||||
//stuff for multiplayer
|
// stuff for multiplayer
|
||||||
extern int MaxNumNetPlayers;
|
extern int MaxNumNetPlayers;
|
||||||
extern int NumNetPlayerPositions;
|
extern int NumNetPlayerPositions;
|
||||||
|
|
||||||
#endif
|
#endif /* _GAMESEQ_H */
|
||||||
|
|
95
main/menu.c
95
main/menu.c
|
@ -257,12 +257,8 @@ void do_option ( int select)
|
||||||
case MENU_GAME:
|
case MENU_GAME:
|
||||||
break;
|
break;
|
||||||
case MENU_DEMO_PLAY:
|
case MENU_DEMO_PLAY:
|
||||||
{
|
select_filename(TXT_SELECT_DEMO, ".dem", 1);
|
||||||
char demo_file[PATH_MAX];
|
|
||||||
if (get_filename(TXT_SELECT_DEMO, ".dem", demo_file, 1))
|
|
||||||
newdemo_start_playback(demo_file);
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
case MENU_LOAD_GAME:
|
case MENU_LOAD_GAME:
|
||||||
state_restore_all(0);
|
state_restore_all(0);
|
||||||
break;
|
break;
|
||||||
|
@ -420,13 +416,10 @@ typedef struct file_list
|
||||||
char **list; // just to free it in below callback
|
char **list; // just to free it in below callback
|
||||||
} file_list;
|
} file_list;
|
||||||
|
|
||||||
int filename_menu_handler( listbox *lb, d_event *event, file_list *l )
|
int filename_menu_keycommand( listbox *lb, d_event *event, file_list *l )
|
||||||
{
|
{
|
||||||
char **items = listbox_get_items(lb);
|
char **items = listbox_get_items(lb);
|
||||||
int citem = listbox_get_citem(lb);
|
int citem = listbox_get_citem(lb);
|
||||||
|
|
||||||
if (event->type != EVENT_KEY_COMMAND)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
switch (((d_event_keycommand *)event)->keycode)
|
switch (((d_event_keycommand *)event)->keycode)
|
||||||
{
|
{
|
||||||
|
@ -438,7 +431,7 @@ int filename_menu_handler( listbox *lb, d_event *event, file_list *l )
|
||||||
x = nm_messagebox( NULL, 2, TXT_YES, TXT_NO, "%s %s?", TXT_DELETE_PILOT, items[citem]+(((l->mode == FILE_PLAYER_MODE) && items[citem][0]=='$')?1:0) );
|
x = nm_messagebox( NULL, 2, TXT_YES, TXT_NO, "%s %s?", TXT_DELETE_PILOT, items[citem]+(((l->mode == FILE_PLAYER_MODE) && items[citem][0]=='$')?1:0) );
|
||||||
else if (l->mode == FILE_DEMO_MODE)
|
else if (l->mode == FILE_DEMO_MODE)
|
||||||
x = nm_messagebox( NULL, 2, TXT_YES, TXT_NO, "%s %s?", TXT_DELETE_DEMO, items[citem]+(((l->mode == FILE_DEMO_MODE) && items[citem][0]=='$')?1:0) );
|
x = nm_messagebox( NULL, 2, TXT_YES, TXT_NO, "%s %s?", TXT_DELETE_DEMO, items[citem]+(((l->mode == FILE_DEMO_MODE) && items[citem][0]=='$')?1:0) );
|
||||||
if (x==0) {
|
if (x==0) {
|
||||||
char * p;
|
char * p;
|
||||||
char plxfile[PATH_MAX], efffile[PATH_MAX];
|
char plxfile[PATH_MAX], efffile[PATH_MAX];
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -476,12 +469,12 @@ int filename_menu_handler( listbox *lb, d_event *event, file_list *l )
|
||||||
else
|
else
|
||||||
listbox_delete_item(lb, citem);
|
listbox_delete_item(lb, citem);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case KEY_CTRLED+KEY_C:
|
case KEY_CTRLED+KEY_C:
|
||||||
if (l->mode == FILE_DEMO_MODE)
|
if (l->mode == FILE_DEMO_MODE)
|
||||||
{
|
{
|
||||||
int x = 1;
|
int x = 1;
|
||||||
|
@ -502,11 +495,69 @@ int filename_menu_handler( listbox *lb, d_event *event, file_list *l )
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int filename_menu_handler( listbox *lb, d_event *event, file_list *l )
|
||||||
|
{
|
||||||
|
char **items = listbox_get_items(lb);
|
||||||
|
int citem = listbox_get_citem(lb);
|
||||||
|
|
||||||
|
switch (event->type)
|
||||||
|
{
|
||||||
|
case EVENT_KEY_COMMAND:
|
||||||
|
return filename_menu_keycommand(lb, event, l);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EVENT_NEWMENU_SELECTED:
|
||||||
|
if (citem < 0)
|
||||||
|
return 0; // shouldn't happen
|
||||||
|
|
||||||
|
switch (l->mode)
|
||||||
|
{
|
||||||
|
case FILE_PLAYER_MODE:
|
||||||
|
if (citem == 0)
|
||||||
|
{
|
||||||
|
// They selected 'create new pilot'
|
||||||
|
return !MakeNewPlayerFile(1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
strncpy(Players[Player_num].callsign,items[citem] + ((items[citem][0]=='$')?1:0), CALLSIGN_LEN);
|
||||||
|
strlwr(Players[Player_num].callsign);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FILE_DEMO_MODE:
|
||||||
|
newdemo_start_playback(items[citem]);
|
||||||
|
// return 1; // later - when the listbox uses the main loop
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case EVENT_WINDOW_CLOSE:
|
||||||
|
if (l->mode == FILE_PLAYER_MODE)
|
||||||
|
{
|
||||||
|
if (read_player_file() != EZERO)
|
||||||
|
return 1; // abort close!
|
||||||
|
|
||||||
|
WriteConfigFile(); // Update lastplr
|
||||||
|
}
|
||||||
|
|
||||||
|
PHYSFS_freeList(l->list);
|
||||||
|
d_free(items);
|
||||||
|
d_free(l);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int get_filename(char *title, char *type, char *filename, int allow_abort_flag)
|
int select_filename(char *title, char *type, int allow_abort_flag)
|
||||||
{
|
{
|
||||||
char **m;
|
char **m;
|
||||||
char **f;
|
char **f;
|
||||||
|
@ -539,7 +590,7 @@ int get_filename(char *title, char *type, char *filename, int allow_abort_flag)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else if ( !*l->list && (l->mode == FILE_PLAYER_MODE) ) {
|
else if ( !*l->list && (l->mode == FILE_PLAYER_MODE) ) {
|
||||||
strcpy(filename, TXT_CREATE_NEW); // make a new player without showing listbox
|
MakeNewPlayerFile(allow_abort_flag); // make a new player without showing listbox
|
||||||
PHYSFS_freeList(l->list);
|
PHYSFS_freeList(l->list);
|
||||||
d_free(l);
|
d_free(l);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -591,18 +642,8 @@ int get_filename(char *title, char *type, char *filename, int allow_abort_flag)
|
||||||
if (!stricmp(Players[Player_num].callsign, m[i]) )
|
if (!stricmp(Players[Player_num].callsign, m[i]) )
|
||||||
citem = i;
|
citem = i;
|
||||||
|
|
||||||
citem = newmenu_listbox1(title, NumItems, m, allow_abort_flag, citem, (int (*)(listbox *, d_event *, void *))filename_menu_handler, l);
|
newmenu_listbox1(title, NumItems, m, allow_abort_flag, citem, (int (*)(listbox *, d_event *, void *))filename_menu_handler, l);
|
||||||
|
|
||||||
if ( citem > -1 )
|
|
||||||
strncpy( filename, m[citem] + (((l->mode == FILE_PLAYER_MODE) && m[citem][0]=='$')?1:0), PATH_MAX );
|
|
||||||
|
|
||||||
PHYSFS_freeList(l->list);
|
|
||||||
d_free(m);
|
|
||||||
d_free(l);
|
|
||||||
|
|
||||||
if (citem < 0)
|
|
||||||
return 0; // aborted
|
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -821,6 +862,8 @@ void change_res()
|
||||||
gr_set_mode(Game_screen_mode);
|
gr_set_mode(Game_screen_mode);
|
||||||
init_cockpit();
|
init_cockpit();
|
||||||
game_init_render_buffers(SM_W(screen_mode), SM_H(screen_mode), VR_NONE);
|
game_init_render_buffers(SM_W(screen_mode), SM_H(screen_mode), VR_NONE);
|
||||||
|
window_close(window_get_front()); // close options dialog - it will be messy with a different resolution
|
||||||
|
//do_options_menu(); // reopen it. D'OH: Can't yet, not until we have a main event loop for it
|
||||||
}
|
}
|
||||||
|
|
||||||
int input_menuset(newmenu *menu, d_event *event, void *userdata)
|
int input_menuset(newmenu *menu, d_event *event, void *userdata)
|
||||||
|
|
|
@ -23,7 +23,7 @@ COPYRIGHT 1993-1998 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED.
|
||||||
// returns number of item chosen
|
// returns number of item chosen
|
||||||
extern int DoMenu();
|
extern int DoMenu();
|
||||||
extern void do_options_menu();
|
extern void do_options_menu();
|
||||||
extern int get_filename(char *title, char *type, char *filename, int allow_abort_flag);
|
extern int select_filename(char *title, char *type, int allow_abort_flag);
|
||||||
#define Menu_pcx_name (((SWIDTH>=640&&SHEIGHT>=480) && cfexist("menuh.pcx"))?"menuh.pcx":"menu.pcx")
|
#define Menu_pcx_name (((SWIDTH>=640&&SHEIGHT>=480) && cfexist("menuh.pcx"))?"menuh.pcx":"menu.pcx")
|
||||||
#define STARS_BACKGROUND (((SWIDTH>=640&&SHEIGHT>=480) && cfexist("starsb.pcx"))?"starsb.pcx":"stars.pcx")
|
#define STARS_BACKGROUND (((SWIDTH>=640&&SHEIGHT>=480) && cfexist("starsb.pcx"))?"starsb.pcx":"stars.pcx")
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue