374 lines
12 KiB
Diff
374 lines
12 KiB
Diff
|
References: https://github.com/DescentDevelopers/Descent3/pull/719
|
||
|
|
||
|
diff --git a/Descent3/config.cpp a/Descent3/config.cpp
|
||
|
index 900f03aa..fe854719 100644
|
||
|
--- a/Descent3/config.cpp
|
||
|
+++ a/Descent3/config.cpp
|
||
|
@@ -353,7 +353,7 @@ void ConfigureDisplayResolutions() {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
- std::set<tVideoResolution, tVideoResolution::tVideoResolutionCompare> resolutions;
|
||
|
+ std::set<tVideoResolution> resolutions;
|
||
|
for (int d = 0; d < display_count; d++) {
|
||
|
SDL_DisplayID display_id = displays[d];
|
||
|
|
||
|
@@ -417,7 +417,7 @@ void ConfigureDisplayResolutions() {
|
||
|
if (resolutions_vec.empty()) {
|
||
|
return;
|
||
|
}
|
||
|
- std::swap(resolutions_vec, Video_res_list);
|
||
|
+ Video_res_list = std::move(resolutions_vec);
|
||
|
SDL_free(displays);
|
||
|
|
||
|
// Find the index of the current screen resolution in the list
|
||
|
diff --git a/Descent3/config.h a/Descent3/config.h
|
||
|
index 3ffe50de..5a35ab8c 100644
|
||
|
--- a/Descent3/config.h
|
||
|
+++ a/Descent3/config.h
|
||
|
@@ -145,21 +145,14 @@ struct tVideoResolution
|
||
|
return ss.str();
|
||
|
}
|
||
|
|
||
|
- bool operator==(const tVideoResolution& other) {
|
||
|
+ bool operator==(const tVideoResolution& other) const {
|
||
|
return other.width == this->width && other.height == this->height;
|
||
|
}
|
||
|
|
||
|
- struct tVideoResolutionCompare
|
||
|
+ bool operator<(const tVideoResolution& other) const
|
||
|
{
|
||
|
- bool operator()(const tVideoResolution &lres, const tVideoResolution &rres) const
|
||
|
- {
|
||
|
- if (lres.width != rres.width)
|
||
|
- {
|
||
|
- return lres.width < rres.width;
|
||
|
- }
|
||
|
- return lres.height < rres.height;
|
||
|
- }
|
||
|
- };
|
||
|
+ return width != other.width ? width < other.width : height < other.height;
|
||
|
+ }
|
||
|
};
|
||
|
|
||
|
extern std::vector<tVideoResolution> Video_res_list;
|
||
|
diff --git a/Descent3/init.cpp a/Descent3/init.cpp
|
||
|
index 65573807..23f912da 100644
|
||
|
--- a/Descent3/init.cpp
|
||
|
+++ a/Descent3/init.cpp
|
||
|
@@ -2061,12 +2061,9 @@ void DeleteTempFiles() {
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
-static int Init_old_screen_mode;
|
||
|
static void (*Init_old_ui_callback)() = NULL;
|
||
|
static bool Init_old_control_mode;
|
||
|
-static bool Init_ui_cursor_visible;
|
||
|
static bool Init_was_game_paused = false;
|
||
|
-static pilot Init_old_pilot;
|
||
|
|
||
|
// TODO: MTS: Unused in project
|
||
|
void ShutdownD3() {
|
||
|
@@ -2096,81 +2093,14 @@ void ShutdownD3() {
|
||
|
Sound_system.PauseSounds();
|
||
|
}
|
||
|
|
||
|
- SaveControlConfig(&Init_old_pilot);
|
||
|
CloseControls();
|
||
|
|
||
|
// shutdown cinematics.
|
||
|
|
||
|
// shutdown screen.
|
||
|
- Init_ui_cursor_visible = ui_IsCursorVisible();
|
||
|
- Init_old_screen_mode = GetScreenMode();
|
||
|
Init_old_ui_callback = GetUICallback();
|
||
|
SetScreenMode(SM_NULL);
|
||
|
|
||
|
// shutdown IO
|
||
|
ddio_Close();
|
||
|
}
|
||
|
-
|
||
|
-// TODO: MTS: unused in project
|
||
|
-// This function restarts all game systems
|
||
|
-void RestartD3() {
|
||
|
- ddio_init_info io_info;
|
||
|
-
|
||
|
- if (!Init_systems_init)
|
||
|
- return;
|
||
|
-
|
||
|
- LOG_INFO << "Restarting D3...";
|
||
|
-
|
||
|
- if (!FindArg("-windowed")) {
|
||
|
- if (Dedicated_server) {
|
||
|
- ddio_MouseMode(MOUSE_STANDARD_MODE);
|
||
|
- } else {
|
||
|
- ddio_MouseMode(MOUSE_EXCLUSIVE_MODE);
|
||
|
- }
|
||
|
- }
|
||
|
-
|
||
|
- // startup io
|
||
|
- io_info.obj = Descent;
|
||
|
- if (!ddio_Init(&io_info)) {
|
||
|
- Error("I/O initialization failed.");
|
||
|
- }
|
||
|
-
|
||
|
- // startup screen.
|
||
|
- ddio_KeyFlush();
|
||
|
- SetScreenMode(Init_old_screen_mode);
|
||
|
- SetUICallback(Init_old_ui_callback);
|
||
|
- if (Init_ui_cursor_visible)
|
||
|
- ui_ShowCursor();
|
||
|
-
|
||
|
- // startup game systems
|
||
|
- InitControls();
|
||
|
- LoadControlConfig(&Init_old_pilot);
|
||
|
-
|
||
|
- // resume game sounds and time as needed
|
||
|
- if (GetFunctionMode() == GAME_MODE) {
|
||
|
- if (!(Game_mode & GM_MULTI)) {
|
||
|
- if (!Init_was_game_paused) {
|
||
|
- ResumeGame();
|
||
|
- } else {
|
||
|
- D3MusicResume();
|
||
|
- }
|
||
|
- }
|
||
|
- } else {
|
||
|
- Sound_system.ResumeSounds();
|
||
|
- D3MusicResume();
|
||
|
- }
|
||
|
-
|
||
|
- // resume controller if it was active before alt-tabbing out.
|
||
|
- if (Init_old_control_mode) {
|
||
|
- ResumeControls();
|
||
|
- }
|
||
|
-
|
||
|
- // Restart Force Feedback
|
||
|
- ForceRestart();
|
||
|
-
|
||
|
- // startup cinematics.
|
||
|
-
|
||
|
- // startup sound.
|
||
|
- // Sound_system.ResumeSounds();
|
||
|
- // Sound_system.InitSoundLib(Descent, Sound_mixer, Sound_quality, false);
|
||
|
-}
|
||
|
diff --git a/Descent3/pilot.cpp a/Descent3/pilot.cpp
|
||
|
index 2a0448b5..201cb703 100644
|
||
|
--- a/Descent3/pilot.cpp
|
||
|
+++ a/Descent3/pilot.cpp
|
||
|
@@ -682,7 +682,6 @@ void ShipSelectDeleteLogo(newuiListBox *lb);
|
||
|
void ShowPilotPicDialog(pilot *Pilot);
|
||
|
|
||
|
UITextItem *pilot_items = nullptr; // array of UITextItems for use in Pilot listbox
|
||
|
-pilot temp; // pilot in use by the listbox
|
||
|
static std::vector<std::string> filelist; // list of pilot filenames
|
||
|
static int filecount; // number of pilot filenames found
|
||
|
void PilotListSelectChangeCallback(int index);
|
||
|
@@ -825,7 +824,7 @@ struct {
|
||
|
bool initial_call;
|
||
|
bool all_setup;
|
||
|
} PilotChooseDialogInfo;
|
||
|
-pilot working_pilot;
|
||
|
+static pilot working_pilot;
|
||
|
|
||
|
void PilotListSelectChangeCallback(int index) {
|
||
|
if (!filecount || !PilotChooseDialogInfo.all_setup)
|
||
|
diff --git a/Descent3/pilot_class.cpp a/Descent3/pilot_class.cpp
|
||
|
index 59f101a3..dee8a99b 100644
|
||
|
--- a/Descent3/pilot_class.cpp
|
||
|
+++ a/Descent3/pilot_class.cpp
|
||
|
@@ -172,48 +172,22 @@ extern float Key_ramp_speed;
|
||
|
|
||
|
pilot::~pilot() { clean(false); }
|
||
|
|
||
|
-pilot::pilot() {
|
||
|
- write_pending = false;
|
||
|
- initialize();
|
||
|
+pilot::pilot() :
|
||
|
+ difficulty{DIFFICULTY_ROOKIE},
|
||
|
+ hud_mode{HUD_COCKPIT},
|
||
|
+ hud_graphical_stat{STAT_STANDARD}
|
||
|
+{
|
||
|
}
|
||
|
|
||
|
-pilot::pilot(pilot *copy) {
|
||
|
- write_pending = true;
|
||
|
- initialize();
|
||
|
-}
|
||
|
-
|
||
|
-pilot::pilot(char *fname) {
|
||
|
- write_pending = true;
|
||
|
- initialize();
|
||
|
-}
|
||
|
-
|
||
|
-// initializes all the data (for constructors)
|
||
|
+// Two-stage construction (because it references global vars)
|
||
|
void pilot::initialize(void) {
|
||
|
int i;
|
||
|
|
||
|
filename.clear();
|
||
|
- name = NULL;
|
||
|
ship_model = mem_strdup("Pyro-GL");
|
||
|
- ship_logo = NULL;
|
||
|
- audio1_file = NULL;
|
||
|
- audio2_file = NULL;
|
||
|
- audio3_file = NULL;
|
||
|
- audio4_file = NULL;
|
||
|
guidebot_name = mem_strdup("GB");
|
||
|
- picture_id = PPIC_INVALID_ID;
|
||
|
- difficulty = DIFFICULTY_ROOKIE;
|
||
|
- hud_mode = (uint8_t)HUD_COCKPIT;
|
||
|
- hud_stat = 0;
|
||
|
- hud_graphical_stat = STAT_STANDARD;
|
||
|
game_window_w = Video_res_list[Current_video_resolution_id].width;
|
||
|
game_window_h = Video_res_list[Current_video_resolution_id].height;
|
||
|
- num_missions_flown = 0;
|
||
|
- mission_data = NULL;
|
||
|
- mouselook_control = false;
|
||
|
- key_ramping = 0.35f;
|
||
|
- lrearview_enabled = false;
|
||
|
- rrearview_enabled = false;
|
||
|
-
|
||
|
bool kiddie_settings = true;
|
||
|
|
||
|
if (Database) {
|
||
|
@@ -237,8 +211,6 @@ void pilot::initialize(void) {
|
||
|
strcpy(taunts[i], TXT(TXT_TAUNT_TEXT + i));
|
||
|
}
|
||
|
|
||
|
- read_controller = READF_MOUSE + READF_JOY;
|
||
|
-
|
||
|
if (Controller) {
|
||
|
for (i = 0; i < NUM_CONTROLLER_FUNCTIONS; i++) {
|
||
|
Controller->get_controller_function(Controller_needs[i].id, controls[i].type, &controls[i].value,
|
||
|
diff --git a/Descent3/pilot_class.h a/Descent3/pilot_class.h
|
||
|
index a9c180cc..11c094ed 100644
|
||
|
--- a/Descent3/pilot_class.h
|
||
|
+++ a/Descent3/pilot_class.h
|
||
|
@@ -170,8 +170,6 @@ class pilot {
|
||
|
public:
|
||
|
~pilot();
|
||
|
pilot();
|
||
|
- pilot(pilot *copy);
|
||
|
- pilot(char *fname);
|
||
|
|
||
|
// This function guts the data so it's virgin (fresh for reading)
|
||
|
// frees any memory that needs to be freed, etc.
|
||
|
@@ -235,9 +233,9 @@ public:
|
||
|
void get_mission_data(int index, tMissionData *data);
|
||
|
int find_mission_data(const char *mission_name);
|
||
|
|
||
|
-private:
|
||
|
void initialize(void); // initializes all the data (for constructors)
|
||
|
- bool write_pending; // data has changed and pilot data is out of sync with file
|
||
|
+private:
|
||
|
+ bool write_pending = false; // data has changed and pilot data is out of sync with file
|
||
|
private:
|
||
|
// internal file access functions
|
||
|
void write_name(CFILE *file);
|
||
|
@@ -256,7 +254,7 @@ private:
|
||
|
|
||
|
// for the read functions, skip is true if the data should actually
|
||
|
// just be skipped and not processed
|
||
|
- int file_version;
|
||
|
+ int file_version = 0;
|
||
|
void read_name(CFILE *file, bool skip);
|
||
|
void read_ship_info(CFILE *file, bool skip);
|
||
|
void read_custom_multiplayer_data(CFILE *file, bool skip);
|
||
|
@@ -275,46 +273,46 @@ private:
|
||
|
//--- Pilot data ---//
|
||
|
//--- Try to preserve alignment ---//
|
||
|
std::string filename;// filename location of this pilot
|
||
|
- char *name; // name of the pilot (used in the game)
|
||
|
- char *ship_logo; // ship logo for multiplayer play (filename)
|
||
|
- char *ship_model; // what ship does this pilot fly
|
||
|
- char *audio1_file; // audio taunt #1 (filename)
|
||
|
- char *audio2_file; // audio taunt #2 (filename)
|
||
|
- char *audio3_file; // audio taunt #1 (filename)
|
||
|
- char *audio4_file; // audio taunt #2 (filename)
|
||
|
- char *guidebot_name; // guidebot name
|
||
|
-
|
||
|
- uint16_t picture_id; // pilot picture image id
|
||
|
+ char *name = nullptr; // name of the pilot (used in the game)
|
||
|
+ char *ship_logo = nullptr; // ship logo for multiplayer play (filename)
|
||
|
+ char *ship_model = nullptr; // what ship does this pilot fly
|
||
|
+ char *audio1_file = nullptr; // audio taunt #1 (filename)
|
||
|
+ char *audio2_file = nullptr; // audio taunt #2 (filename)
|
||
|
+ char *audio3_file = nullptr; // audio taunt #1 (filename)
|
||
|
+ char *audio4_file = nullptr; // audio taunt #2 (filename)
|
||
|
+ char *guidebot_name = nullptr; // guidebot name
|
||
|
+
|
||
|
+ uint16_t picture_id = PPIC_INVALID_ID; // pilot picture image id
|
||
|
uint8_t difficulty; // difficulty setting for this pilot (DIFFICULTY_*)
|
||
|
uint8_t hud_mode; // hud display mode
|
||
|
- bool profanity_filter_on, audiotaunts;
|
||
|
+ bool profanity_filter_on = false, audiotaunts = true;
|
||
|
|
||
|
- uint16_t hud_stat; // hud layout using the STAT mask
|
||
|
+ uint16_t hud_stat = 0; // hud layout using the STAT mask
|
||
|
uint16_t hud_graphical_stat;
|
||
|
|
||
|
- int game_window_w, game_window_h; // game window size
|
||
|
+ int game_window_w = 0, game_window_h = 0; // game window size
|
||
|
|
||
|
- int num_missions_flown; // number of mission's flown
|
||
|
- tMissionData *mission_data; // mission data
|
||
|
+ int num_missions_flown = 0; // number of mission's flown
|
||
|
+ tMissionData *mission_data = nullptr; // mission data
|
||
|
|
||
|
- uint16_t PrimarySelectList[MAX_PRIMARY_WEAPONS];
|
||
|
- uint16_t SecondarySelectList[MAX_SECONDARY_WEAPONS];
|
||
|
+ uint16_t PrimarySelectList[MAX_PRIMARY_WEAPONS]{};
|
||
|
+ uint16_t SecondarySelectList[MAX_SECONDARY_WEAPONS]{};
|
||
|
|
||
|
- tGameToggles gameplay_toggles; // special options in config menu.
|
||
|
+ tGameToggles gameplay_toggles{}; // special options in config menu.
|
||
|
|
||
|
public:
|
||
|
- char taunts[MAX_PILOT_TAUNTS][PILOT_TAUNT_SIZE]; // taunt macros
|
||
|
-
|
||
|
- cntrldata controls[NUM_CONTROLLER_FUNCTIONS]; // controller settings
|
||
|
- float mouse_sensitivity[N_MOUSE_AXIS]; // axis sensitivities
|
||
|
- float joy_sensitivity[N_JOY_AXIS]; // axis sensitivities
|
||
|
- float key_ramping;
|
||
|
- char read_controller; // do we read the controller port also (beyond keyboard/mouse)
|
||
|
- bool mouselook_control; // mouselook control.
|
||
|
- bool lrearview_enabled;
|
||
|
- bool rrearview_enabled; // are these small views enabled?
|
||
|
-
|
||
|
- uint8_t ingame_difficulty; // DAJ for optimization
|
||
|
+ char taunts[MAX_PILOT_TAUNTS][PILOT_TAUNT_SIZE]{}; // taunt macros
|
||
|
+
|
||
|
+ cntrldata controls[NUM_CONTROLLER_FUNCTIONS]{}; // controller settings
|
||
|
+ float mouse_sensitivity[N_MOUSE_AXIS]{}; // axis sensitivities
|
||
|
+ float joy_sensitivity[N_JOY_AXIS]{}; // axis sensitivities
|
||
|
+ float key_ramping = 0.35;
|
||
|
+ char read_controller = READF_MOUSE + READF_JOY; // do we read the controller port also (beyond keyboard/mouse)
|
||
|
+ bool mouselook_control = false; // mouselook control.
|
||
|
+ bool lrearview_enabled = false;
|
||
|
+ bool rrearview_enabled = false; // are these small views enabled?
|
||
|
+
|
||
|
+ uint8_t ingame_difficulty = 0; // DAJ for optimization
|
||
|
};
|
||
|
|
||
|
#endif
|
||
|
diff --git a/Descent3/sdlmain.cpp a/Descent3/sdlmain.cpp
|
||
|
index 92974f5d..c6138297 100644
|
||
|
--- a/Descent3/sdlmain.cpp
|
||
|
+++ a/Descent3/sdlmain.cpp
|
||
|
@@ -45,6 +45,7 @@
|
||
|
#include "init.h"
|
||
|
#include "log.h"
|
||
|
#include "config.h"
|
||
|
+#include "pilot.h"
|
||
|
|
||
|
#ifdef WIN32
|
||
|
#include "debug.h"
|
||
|
@@ -222,6 +223,7 @@ int main(int argc, char *argv[]) {
|
||
|
GatherArgs(argv);
|
||
|
bool enable_winconsole = true;
|
||
|
#endif
|
||
|
+ Current_pilot.initialize();
|
||
|
|
||
|
orig_pwd = std::filesystem::current_path();
|
||
|
|