Update to Factory version #1

Manually merged
jengelh merged 3 commits from mlin7442/descent3:161_branch_20260205 into leap-16.1 2026-02-09 09:50:56 +01:00
7 changed files with 544 additions and 57 deletions

Binary file not shown.

View File

@@ -1,3 +1,27 @@
-------------------------------------------------------------------
Sat Aug 23 11:06:06 UTC 2025 - Jan Engelhardt <jengelh@inai.de>
- Add httplib0_23.patch
-------------------------------------------------------------------
Tue Aug 5 08:22:43 UTC 2025 - Jan Engelhardt <jengelh@inai.de>
- Update to snapshot 1.6.0~git632.c68f6b0
* Add higher resolutions, fullscreen toggle and FOV settings
* XDG specification is heeded; configuration now lives in
~/.local/share/Outrage Entertainment/Descent3 (instead of
~/.config/descent3). Data files are read from either the XDG
dir or from /usr/share/descent3 (can be used for global
installs).
- Add static-order.patch
- Delete fstream.patch (merged)
-------------------------------------------------------------------
Mon Aug 4 21:56:02 UTC 2025 - Andreas Stieger <andreas.stieger@gmx.de>
- switch cpp-httplib requirement to cmake(httplib) as preferred and
supported by upstream
-------------------------------------------------------------------
Wed May 28 22:57:52 UTC 2025 - Jan Engelhardt <jengelh@inai.de>

View File

@@ -1,7 +1,7 @@
#
# spec file for package descent3
#
# Copyright (c) 2025 SUSE LLC
# Copyright (c) 2025 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,8 +17,8 @@
Name: descent3
%define commit c99e57cfabb16b2b428d4827eedb26b8cc20a1ee
Version: 1.6.0~git533.c99e57c
%define commit c68f6b029a006f3fd927ef4905ebe3e099c60322
Version: 1.6.0~git632.c68f6b0
Release: 0
Summary: Tunnelterrain-hybrid ship-based shooter fighting robots
License: GPL-3.0-or-later
@@ -27,7 +27,8 @@ URL: https://github.com/DescentDevelopers/Descent3
Source: https://github.com/jengelh/descent3/archive/%commit.tar.gz
Source2: https://github.com/SergiusTheBest/plog/archive/e21baecd4753f14da64ede979c5a19302618b752.tar.gz
Patch1: system-libacm.patch
Patch2: fstream.patch
Patch2: static-order.patch
Patch3: httplib0_23.patch
%if 0%{?suse_version} && 0%{?suse_version} < 1600
BuildRequires: gcc13-c++
Provides: bundled(plog)
@@ -37,7 +38,7 @@ BuildRequires: plog-devel
%endif
BuildRequires: cmake
BuildRequires: libacm-devel
BuildRequires: pkgconfig(cpp-httplib)
BuildRequires: cmake(httplib)
BuildRequires: pkgconfig(glm)
BuildRequires: pkgconfig(sdl3)
BuildRequires: pkgconfig(zlib)
@@ -60,6 +61,9 @@ different game types.
%prep
%autosetup -p1 -n descent3-%commit -a2
%if %{pkg_vcmp cmake(httplib) < 0.23}
%patch -P 3 -R -p1
%endif
rm -Rf third_party/plog
mv plog-* third_party/plog
@@ -67,8 +71,7 @@ mv plog-* third_party/plog
%if 0%{?suse_version} && 0%{?suse_version} < 1600
export CXX=g++-13
%endif
%cmake -DCMAKE_INSTALL_BINDIR="%_libexecdir/%name" \
-DCMAKE_INSTALL_DATADIR="%_datadir/%name" \
%cmake \
-DCMAKE_INSTALL_DOCDIR:PATH="share/doc/packages/%name" \
-DFORCE_PORTABLE_INSTALL=OFF \
%if 0%{?suse_version} >= 1600
@@ -81,30 +84,38 @@ export CXX=g++-13
%install
%cmake_install
b="%buildroot"
mv -v "$b/%_datadir/Descent3" "$b/%_datadir/descent3"
ln -sv descent3 "$b/%_datadir/Descent3"
# packaged separately
rm -fv "$b/%_defaultdocdir/%name/LICENSE"
mkdir -p "$b/%_bindir"
# add config wrapper
mkdir -p "$b/%_libexecdir/%name"
mv -v "$b/%_bindir/Descent3" "$b/%_libexecdir/%name/"
cat >"$b/%_bindir/descent3" <<-EOF
#!/bin/sh -e
progdir="%_libexecdir/descent3"
datadir="%_datadir/descent3"
progdir="%_libexecdir/%name"
datadir="%_datadir/%name"
userdir="\$HOME/.config/descent3"
olduserdir="\$HOME/.config/descent3"
userdir="\$HOME/.local/share/Outrage Entertainment/Descent 3"
if [ -d "\$olduserdir" ] && [ ! -L "\$olduserdir" ] && [ ! -e "\$userdir" ]; then
echo "INFO: Trying to mv \$olduserdir to \$userdir"
mkdir -p "\${userdir%/*}"
mv -v "\$olduserdir" "\$userdir"
fi
mkdir -p "\$userdir/missions"
cd "\$userdir"
if [ ! -e d3-linux.hog ]; then
ln -s "\$datadir/d3-linux.hog" .
fi
if [ ! -e online ]; then
ln -s "\$datadir/online" .
fi
if [ ! -e d3.hog ]; then
echo "ERROR: Copy d3.hog to \$userdir, then relaunch."
echo "INFO: You may find this file on the D3 Linux ISO."
exit 1
fi
if [ ! -e extra.hog ] || [ ! -e extra13.hog ]; then
echo "NOTE: Copy extra.hog and extra13.hog to \$userdir, then relaunch."
echo "NOTE: Copy extra.hog and extra13.hog to \$userdir or /usr/share/descent3, then relaunch."
echo "INFO: You may find these files on the D3 Linux ISO in data.tar.gz."
echo "INFO: tar -C \$userdir -xf /path/to/data.tar.gz extra.hog extra13.hog"
exit 1
@@ -127,9 +138,9 @@ chmod a+x "%buildroot/%_bindir/descent3"
%license LICENSE
%_bindir/descent3
%_datadir/descent3/
%_defaultdocdir/%name/
%_datadir/Descent3
%_libexecdir/%name/
# these are .so-like files
%_libdir/netgames/
%_defaultdocdir/%name/
%changelog

View File

@@ -1,34 +0,0 @@
From e1a907bd64d700308e3a1625f0e0a5ddb1c22ef0 Mon Sep 17 00:00:00 2001
From: Jon Daniel <joneqdaniel@gmail.com>
Date: Thu, 8 May 2025 12:36:35 -0700
Subject: [PATCH] build: add missing #include to cure compile error
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
References: https://github.com/DescentDevelopers/Descent3/pull/715
[g++-14 complains:
mission_download.cpp:402:19: error: variable std::fstream in has initializer but incomplete type
402 | std::fstream in(qualfile, std::ios::binary | std::ios::trunc | std::ios::out);
jengelh]
---
Descent3/mission_download.cpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/Descent3/mission_download.cpp b/Descent3/mission_download.cpp
index 52e408e4..7343ee8d 100644
--- a/Descent3/mission_download.cpp
+++ b/Descent3/mission_download.cpp
@@ -120,6 +120,7 @@
#include <cstdio>
#include <future>
+#include <fstream>
#include "mem.h"
#include "args.h"
--
2.49.0

113
httplib0_23.patch Normal file
View File

@@ -0,0 +1,113 @@
From 951bf416f403bff550102b4f16dc17c4432d391c Mon Sep 17 00:00:00 2001
From: Jan Engelhardt <jengelh@inai.de>
Date: Sat, 23 Aug 2025 13:02:08 +0200
Subject: [PATCH] build: fix build failure with cpp-httplib >= 0.23
References: https://github.com/DescentDevelopers/Descent3/pull/721
---
BUILD.md | 2 +-
Descent3/mission_download.cpp | 2 +-
netcon/inetfile/httpclient.cpp | 4 ++--
netcon/inetfile/httpclient.h | 10 ++++++++--
vcpkg.json | 5 ++++-
5 files changed, 16 insertions(+), 7 deletions(-)
diff --git a/BUILD.md b/BUILD.md
index 0ed8b771..7782e0fe 100644
--- a/BUILD.md
+++ b/BUILD.md
@@ -4,7 +4,7 @@
## Dependencies
The build process uses [**CMake**](https://cmake.org/) and, by default, [**Ninja**](https://ninja-build.org/). You must install these; the project cannot locate them for you. The source code also depends on third-party libraries that are not provided as part of the repository:
- [**SDL3**](https://wiki.libsdl.org/SDL3/FrontPage) which is used as the base to handle video, audio and input.
-- [**cpp-httplib**](https://github.com/yhirose/cpp-httplib) as a HTTP client to download levels.
+- [**cpp-httplib**](https://github.com/yhirose/cpp-httplib) >= 0.23 as a HTTP client to download levels.
- [**glm**](https://github.com/g-truc/glm) providing useful additions to OpenGL.
- [**plog**](https://github.com/SergiusTheBest/plog) for logging
- [**zlib**](https://www.zlib.net/) as a compression utility
diff --git a/Descent3/mission_download.cpp b/Descent3/mission_download.cpp
index f494abe9..00263779 100644
--- a/Descent3/mission_download.cpp
+++ b/Descent3/mission_download.cpp
@@ -399,7 +399,7 @@ bool msn_DownloadWithStatus(const char *url, const std::filesystem::path &filena
}
httplib::Result (D3::HttpClient::*hcg)(const std::string &, const httplib::ContentReceiver &,
- const httplib::Progress &) = &D3::HttpClient::Get;
+ const D3::HttpClient::Progress &) = &D3::HttpClient::Get;
std::fstream in(qualfile, std::ios::binary | std::ios::trunc | std::ios::out);
auto async_task = std::async(
std::launch::async, hcg, &http_client, download_uri,
diff --git a/netcon/inetfile/httpclient.cpp b/netcon/inetfile/httpclient.cpp
index d15bc906..33c1e314 100644
--- a/netcon/inetfile/httpclient.cpp
+++ b/netcon/inetfile/httpclient.cpp
@@ -30,7 +30,7 @@ httplib::Result HttpClient::Get(const std::string &URIPath) {
return m_client->Get(URIPath);
}
-httplib::Result HttpClient::Get(const std::string &URIPath, const httplib::Progress &progress) {
+httplib::Result HttpClient::Get(const std::string &URIPath, const D3::HttpClient::Progress &progress) {
return m_client->Get(URIPath, progress);
}
@@ -39,7 +39,7 @@ httplib::Result HttpClient::Get(const std::string &URIPath, const httplib::Conte
}
httplib::Result HttpClient::Get(const std::string &URIPath, const httplib::ContentReceiver &content_receiver,
- const httplib::Progress &progress) {
+ const D3::HttpClient::Progress &progress) {
return m_client->Get(URIPath, content_receiver, progress);
}
diff --git a/netcon/inetfile/httpclient.h b/netcon/inetfile/httpclient.h
index d3e2499c..a373405e 100644
--- a/netcon/inetfile/httpclient.h
+++ b/netcon/inetfile/httpclient.h
@@ -32,6 +32,12 @@ namespace D3 {
class HttpClient {
public:
+ using Progress = httplib::DownloadProgress;
+ // no way to test with macro; would have to do a cmake-level compile check
+ //#if httplib < 0.23
+ //using Progress = httplib::Progress;
+ //#endif
+
/**
* Constructor for HttpClient
* @param URL request URL, should be in form of http://example.com. Don't add "/" on the end as it's part of URIPath.
@@ -46,12 +52,12 @@ public:
* @param URIPath requested path (for example, "/some_dir/my_file.txt")
* @return standard HTTP code. 200 means is OK.
*/
- httplib::Result Get(const std::string &URIPath, const httplib::Progress &progress);
+ httplib::Result Get(const std::string &URIPath, const Progress &progress);
httplib::Result Get(const std::string &URIPath, const httplib::ContentReceiver &content_receiver);
httplib::Result Get(const std::string &URIPath, const httplib::ContentReceiver &content_receiver,
- const httplib::Progress &progress);
+ const Progress &progress);
void SetProxy(const std::string &proxy_host, uint16_t port);
diff --git a/vcpkg.json b/vcpkg.json
index c383313e..b5e7f64c 100644
--- a/vcpkg.json
+++ b/vcpkg.json
@@ -1,7 +1,10 @@
{
"builtin-baseline": "8f90c294883ccf67d2f4953383718aeae981575f",
"dependencies": [
- "cpp-httplib",
+ {
+ "name": "cpp-httplib",
+ "version>=": "0.23"
+ },
"glm",
"gtest",
"plog",
--
2.51.0

373
static-order.patch Normal file
View File

@@ -0,0 +1,373 @@
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();