You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
360 lines
11 KiB
360 lines
11 KiB
--- savagewheels-1.6.0/src/Main.cpp.old 2016-04-14 21:18:38.115071742 -0700
|
|
+++ savagewheels-1.6.0/src/Main.cpp 2016-04-14 22:01:42.375422000 -0700
|
|
@@ -43,10 +43,17 @@
|
|
* Alpha Release: 29.06.2003
|
|
*/
|
|
|
|
#include "Main.h"
|
|
|
|
+const char *sys_datadir;
|
|
+const char *usr_cfgdir;
|
|
+const char *usr_datadir;
|
|
+
|
|
+char *ART_FILE;
|
|
+char *BINDINGS_FILE;
|
|
+
|
|
int main( int argc, char *argv[] )
|
|
{
|
|
bool hardware_support = true;
|
|
/*
|
|
* Start the game in a window by default.
|
|
@@ -57,16 +64,92 @@ int main( int argc, char *argv[] )
|
|
* Linux Note: Running the game in fullscreen would sometimes crash the gfx manager.
|
|
* This is probably due to some video drivers. I was so far able to reproduce it on
|
|
* ATI Mobility type of video cards.
|
|
*/
|
|
bool fullscreen = false;
|
|
+ String tmp;
|
|
|
|
#ifdef LINUX_BUILD
|
|
+ sys_datadir = getenv("SAVAGEWHEELS_SYS_DATADIR");
|
|
+ if (sys_datadir == NULL)
|
|
+ {
|
|
+ fprintf(stderr, "SAVAGEWHEELS_SYS_DATADIR not set.\n");
|
|
+ return 1;
|
|
+ }
|
|
+ sys_datadir = strdup(sys_datadir);
|
|
+
|
|
+ usr_cfgdir = getenv("SAVAGEWHEELS_USR_CONFDIR");
|
|
+ if (usr_cfgdir == NULL)
|
|
+ {
|
|
+ fprintf(stderr, "SAVAGEWHEELS_USR_CONFDIR not set.\n");
|
|
+ return 1;
|
|
+ }
|
|
+ usr_cfgdir = strdup(usr_cfgdir);
|
|
+
|
|
+ usr_datadir = getenv("SAVAGEWHEELS_USR_DATADIR");
|
|
+ if (usr_datadir == NULL)
|
|
+ {
|
|
+ fprintf(stderr, "SAVAGEWHEELS_USR_DATADIR not set.\n");
|
|
+ return 1;
|
|
+ }
|
|
+ usr_datadir = strdup(usr_datadir);
|
|
+
|
|
+ if (sys_datadir == NULL || usr_cfgdir == NULL || usr_datadir == NULL)
|
|
+ {
|
|
+ fprintf(stderr, "Insufficient memory. Execution aborted.\n");
|
|
+ return 1;
|
|
+ }
|
|
+
|
|
setenv("SDL_VIDEO_CENTERED", "1", 1);
|
|
#else
|
|
+ sys_datadir = usr_cfgdir = usr_datadir = "./";
|
|
_putenv("SDL_VIDEO_CENTERED=1");
|
|
#endif
|
|
+ int len;
|
|
+ len = snprintf(NULL, 0, "%s/graphics/gfxdata.kdf", sys_datadir);
|
|
+ if (len < 0)
|
|
+ {
|
|
+ fprintf(stderr,
|
|
+ "Unable to store '%s/graphics/gfxdata.kdf': %s\n",
|
|
+ sys_datadir, strerror(errno));
|
|
+ return 1;
|
|
+ }
|
|
+ if (len == INT_MAX)
|
|
+ {
|
|
+ fprintf(stderr, "Unable to store '%s/graphics/gfxdata.kdf': "
|
|
+ "Path too log\n", sys_datadir);
|
|
+ return 1;
|
|
+ }
|
|
+ ART_FILE = new (std::nothrow) char[len + 1];
|
|
+ if (ART_FILE == NULL)
|
|
+ {
|
|
+ fprintf(stderr, "Insufficent memory. Execution aborted.\n");
|
|
+ return 1;
|
|
+ }
|
|
+ sprintf(ART_FILE, "%s/graphics/gfxdata.kdf", sys_datadir);
|
|
+
|
|
+ len = snprintf(NULL, 0, "%s/bindings.xml", usr_cfgdir);
|
|
+ if (len < 0)
|
|
+ {
|
|
+ fprintf(stderr,
|
|
+ "Unable to store '%s/bindings.xml': %s\n", usr_cfgdir,
|
|
+ strerror(errno));
|
|
+ return 1;
|
|
+ }
|
|
+ if (len == INT_MAX)
|
|
+ {
|
|
+ fprintf(stderr, "Unable to store '%s/bindings.xml': "
|
|
+ "Path too log\n", usr_cfgdir);
|
|
+ return 1;
|
|
+ }
|
|
+ BINDINGS_FILE = new (std::nothrow) char[len + 1];
|
|
+ if (BINDINGS_FILE == NULL)
|
|
+ {
|
|
+ fprintf(stderr, "Insufficent memory. Execution aborted.\n");
|
|
+ return 1;
|
|
+ }
|
|
+ sprintf(BINDINGS_FILE, "%s/bindings.xml", usr_cfgdir);
|
|
|
|
if (argc > 1) {
|
|
for (int i = 1; i < argc; i++) {
|
|
if (!strncmp(argv[i], "-wnd", 4)) {
|
|
fullscreen = false;
|
|
@@ -104,11 +187,12 @@
|
|
|
|
/*
|
|
* Load & Start Game
|
|
*/
|
|
|
|
- OpenLog("debug.html");
|
|
+ tmp = String(usr_datadir).append("/debug.html");
|
|
+ OpenLog(tmp.c_str());
|
|
|
|
CGame game;
|
|
game.Execute(fullscreen, hardware_support);
|
|
game.Close();
|
|
|
|
--- savagewheels-1.6.0/src/Main.h.old 2016-04-14 21:20:27.443522441 -0700
|
|
+++ savagewheels-1.6.0/src/Main.h 2016-04-14 21:56:22.449964486 -0700
|
|
@@ -35,10 +35,11 @@
|
|
#include <cstdlib>
|
|
#include <cmath>
|
|
#include <cstdarg>
|
|
#include <cassert>
|
|
#include <exception>
|
|
+#include <cerrno>
|
|
|
|
#include <ctime>
|
|
#include <sys/stat.h>
|
|
#include <sys/types.h>
|
|
#include <sys/timeb.h>
|
|
@@ -84,12 +85,10 @@
|
|
|
|
// --- version
|
|
#include "Config.h"
|
|
|
|
// --- global game defines
|
|
-#define ART_FILE "graphics/gfxdata.kdf"
|
|
-#define BINDINGS_FILE "bindings.xml"
|
|
#define LOAD_OK (-1)
|
|
#define LOAD_FAILED (0)
|
|
#define HRESULT(x) ( (x) == NULL : LOAD_OK ? LOAD_FAILED )
|
|
#define NLPTR_SURF 0 //((SDL_Surface *)NULL)
|
|
|
|
@@ -100,10 +99,16 @@
|
|
#endif
|
|
|
|
typedef std::string String;
|
|
typedef std::ostringstream OutputSStream;
|
|
|
|
+extern const char *sys_datadir;
|
|
+extern const char *usr_cfgdir;
|
|
+extern const char *usr_datadir;
|
|
+
|
|
+extern char *ART_FILE;
|
|
+extern char *BINDINGS_FILE;
|
|
//#include "pstdint.h" // portable types
|
|
#include "Utils.h"
|
|
#include "CKdf.h"
|
|
#include "CSdl.h"
|
|
#include "CSwv_module.h"
|
|
--- savagewheels-1.6.0/src/Utils.cpp.old 2016-04-15 19:28:21.757879157 -0700
|
|
+++ savagewheels-1.6.0/src/Utils.cpp 2016-04-15 19:28:28.478786779 -0700
|
|
@@ -261,11 +261,11 @@ inline String GetFormattedTime()
|
|
bool OpenLog ( const char* filename )
|
|
{
|
|
String time( GetFormattedTime() );
|
|
|
|
// open debug file
|
|
- debug_file.open ( "debug.html", std::ios::out ); //ios::ate );
|
|
+ debug_file.open ( filename, std::ios::out ); //ios::ate );
|
|
if ( ! debug_file.good() )
|
|
return false;
|
|
|
|
debug_file << "<html><head><title>Savage Wheels Log File</title></head><body><h1>Savage Wheels V" << VER_MAJ << "." << VER_MIN << " - Log File</h1>";
|
|
debug_file << "<hr/><pre>";
|
|
--- savagewheels-1.6.0/src/CGame.cpp.old 2016-04-15 20:43:37.479330001 -0700
|
|
+++ savagewheels-1.6.0/src/CGame.cpp 2016-04-15 21:04:48.044721904 -0700
|
|
@@ -116,10 +116,11 @@ void CGame::Close()
|
|
///////////////////////////////////////////////////////////////////////
|
|
bool CGame::LoadGame()
|
|
{
|
|
char buf[255];
|
|
int i = 0;
|
|
+ String tmp (sys_datadir);
|
|
|
|
AppendToLog( LOG_DASH );
|
|
AppendToLog("Loading Game...");
|
|
|
|
// global screen rect
|
|
@@ -161,11 +162,14 @@ bool CGame::LoadGame()
|
|
srand( (unsigned)SDL_GetTicks() );
|
|
|
|
UpdateSplash(); // UPDATESPLASH...
|
|
|
|
// search for vehicles
|
|
- if ( Swv.SearchAndLoad( "autos" ) != SWV_SUCCESS ) return false;
|
|
+ tmp.resize(strlen(sys_datadir));
|
|
+ tmp.append("/autos");
|
|
+ if ( Swv.SearchAndLoad( tmp.c_str() ) != SWV_SUCCESS )
|
|
+ return false;
|
|
|
|
// check for vehicle number
|
|
if ( Swv.GetVehicles() < 4 )
|
|
{
|
|
AppendToLog( "Not enough vehicles in the /auto dir!" );
|
|
--- savagewheels-1.6.0/src/CSdl.cpp.old 2016-04-16 16:00:56.600502348 -0700
|
|
+++ savagewheels-1.6.0/src/CSdl.cpp 2016-04-16 16:01:16.152226435 -0700
|
|
@@ -1298,13 +1298,10 @@
|
|
return NULL;
|
|
#else
|
|
|
|
SDL_Surface *sdl_surf = NULL;
|
|
|
|
- char filename_buf[255];
|
|
- sprintf( filename_buf, "../%s", filename );
|
|
-
|
|
if ( ( sdl_surf = SDL_LoadBMP( filename_buf )) == NULL )
|
|
{
|
|
LOG("...failed to load graphics from : " << filename_buf );
|
|
return NULL;
|
|
}
|
|
--- savagewheels-1.6.0/src/CSounds.cpp.old 2016-04-16 16:06:43.887600441 -0700
|
|
+++ savagewheels-1.6.0/src/CSounds.cpp 2016-04-16 16:17:44.729332218 -0700
|
|
@@ -46,22 +46,39 @@
|
|
// Name: Initialize()
|
|
// Desc: Load all ingame sounds
|
|
//////////////////////////////////////////////////////////////////////
|
|
bool CSounds::Initialize( CSdl *pSdl )
|
|
{
|
|
- ASSERT( _sdl != NULL );
|
|
+ ASSERT( pSdl != NULL );
|
|
this->_sdl = pSdl;
|
|
|
|
#if defined(WITH_FMOD) || defined(WITH_SDLMIXER)
|
|
+ String tmp (sys_datadir);
|
|
|
|
-#define LOAD_SOUND( container, name, buffered ) if ( (sounds[container] = _sdl->LoadSound( name, buffered )) == -1 ) { \
|
|
- LOG( "Failed to load " << name << " ! "); \
|
|
- return false; }
|
|
+#define LOAD_SOUND( container, name, buffered) \
|
|
+ do { \
|
|
+ tmp.append("/").append(name); \
|
|
+ sounds[container] = \
|
|
+ _sdl->LoadSound( tmp.c_str(), buffered ); \
|
|
+ if ( sounds[container] == -1 ) { \
|
|
+ LOG( "Failed to load " << name << " ! " ); \
|
|
+ return false; \
|
|
+ } \
|
|
+ tmp.resize(strlen(sys_datadir)); \
|
|
+ } while(0)
|
|
|
|
-#define LOAD_MUSIC( container, name ) if ( (music[container] = _sdl->LoadSound( name, false, true )) == -1 ) { \
|
|
- LOG( "Failed to load music " << name << " ! "); \
|
|
- return false; }
|
|
+#define LOAD_MUSIC( container, name) \
|
|
+ do { \
|
|
+ tmp.append("/").append(name); \
|
|
+ music[container] = \
|
|
+ _sdl->LoadSound( tmp.c_str(), false, true ); \
|
|
+ if ( music[container] == -1 ) { \
|
|
+ LOG( "Failed to load music " << name << " ! " ); \
|
|
+ return false; \
|
|
+ } \
|
|
+ tmp.resize(strlen(sys_datadir)); \
|
|
+ } while(0)
|
|
|
|
LOAD_SOUND( SND_CRASHLIGHT1, "sound/crash3.wav", true );
|
|
LOAD_SOUND( SND_CRASHLIGHT2, "sound/crash2.wav", true );
|
|
LOAD_SOUND( SND_CRASHLIGHT3, "sound/crash1.wav", true );
|
|
LOAD_SOUND( SND_EXPLOSION1, "sound/exp.wav", true );
|
|
--- savagewheels-1.6.0/src/CSwv_module.cpp.old 2016-04-16 20:58:04.366973388 -0700
|
|
+++ savagewheels-1.6.0/src/CSwv_module.cpp 2016-04-16 20:58:13.026851358 -0700
|
|
@@ -204,12 +204,10 @@ int CSwv_module::Load( char *filename, S
|
|
// DBG("pos: " << swv_file->pfiles[i].pos
|
|
// << " size (KB): " << swv_file->pfiles[i].length
|
|
// << " name: " << swv_file->pfiles[i].filename);
|
|
// }
|
|
|
|
- // set module filename
|
|
- sprintf( swv_file->filename, "%s", filename );
|
|
|
|
if ( fp != NULL )
|
|
fclose( fp );
|
|
|
|
return SWV_SUCCESS;
|
|
--- savagewheels-1.6.0/src/CSdl.cpp.old 2016-04-16 21:02:07.680544534 -0700
|
|
+++ savagewheels-1.6.0/src/CSdl.cpp 2016-04-16 21:06:59.400432874 -0700
|
|
@@ -1336,12 +1339,25 @@ SDL_Surface* CSdl::LoadBitmap( const cha
|
|
SDL_Surface* CSdl::LoadBitmap( const char *filename, int32_t file_offset, Uint32 file_size, Uint32 color_key, Uint16 alpha_value )
|
|
{
|
|
SDL_Surface *sdl_surf = NULL; // temp surface
|
|
FILE *fp = NULL; // file pointer
|
|
SDL_RWops *sdl_rw = NULL; // sdl_read_write_operations
|
|
+ String tmp;
|
|
|
|
- if ( ( fp = fopen( filename, "rb")) == NULL )
|
|
+#ifdef LINUX_BUILD
|
|
+ if ( filename[0] != '/' )
|
|
+ {
|
|
+ tmp = String(sys_datadir).append("/autos/").append(filename);
|
|
+ }
|
|
+ else
|
|
+ {
|
|
+ tmp = String(filename);
|
|
+ }
|
|
+#else
|
|
+ tmp = String(filename);
|
|
+#endif
|
|
+ if ( ( fp = fopen( tmp.c_str(), "rb")) == NULL )
|
|
{
|
|
LOG("...failed to open file : " << filename );
|
|
return NULL;
|
|
}
|
|
|
|
--- savagewheels-1.6.0/src/CMainMenu.cpp.old 2016-04-16 22:13:23.442523534 -0700
|
|
+++ savagewheels-1.6.0/src/CMainMenu.cpp 2016-04-16 22:13:17.701605381 -0700
|
|
@@ -1121,12 +1121,13 @@ void CMainMenu::SaveSettings()
|
|
if ( _game == NULL )
|
|
return;
|
|
|
|
FILE *fp = NULL;
|
|
char header[3] = { 'S', 'W', 'P' };
|
|
+ String strPref(String(usr_cfgdir) + "/pref");
|
|
|
|
- if ( ( fp = fopen( "pref", "wb" ) ) == NULL )
|
|
+ if ( ( fp = fopen( strPref.c_str(), "wb" ) ) == NULL )
|
|
{
|
|
AppendToLog( "Error writing to /pref file !" );
|
|
return;
|
|
}
|
|
|
|
--- savagewheels-1.6.0/src/CMainMenu.cpp.old 2016-04-17 07:38:09.417653268 -0700
|
|
+++ savagewheels-1.6.0/src/CMainMenu.cpp 2016-04-17 07:38:24.277437113 -0700
|
|
@@ -1168,12 +1167,13 @@ void CMainMenu::SaveSettings()
|
|
void CMainMenu::LoadSettings()
|
|
{
|
|
FILE *fp = NULL;
|
|
char header[3];
|
|
bool success = true;
|
|
+ String strPref(String(usr_cfgdir) + "/pref");
|
|
|
|
- if ( ( fp = fopen( "pref", "rb" ) ) == NULL )
|
|
+ if ( ( fp = fopen( strPref.c_str(), "wb" ) ) == NULL )
|
|
{
|
|
AppendToLog( "Error opening /pref file !" );
|
|
success = false;
|
|
}
|
|
|