diff -ruN ./CMakeLists.txt ../c/CMakeLists.txt --- ./CMakeLists.txt 2012-03-26 02:50:49.000000000 +0200 +++ ../c/CMakeLists.txt 2020-09-03 16:25:55.870086658 +0200 @@ -10,7 +10,7 @@ project (vsUTCS) - +include(GNUInstallDirs) include_directories(${vsUTCS_SOURCE_DIR}/src ${vsUTCS_SOURCE_DIR}/src/cmd @@ -828,33 +828,33 @@ #Find FFMpeg -find_package(FFMPEG) -IF(FFMPEG_FOUND) - SET(TST_INCLUDES ${TST_INCLUDES} ${FFMPEG_INCLUDE_DIRS}) - SET(TST_LIBS ${TST_LIBS} ${FFMPEG_LIBRARIES}) - add_definitions(${FFMPEG_DEFINITIONS}) - SET(HAVE_FFMPEG 1 ) - IF(swscale1_FOUND) - message("++ FFmpeg's libswscale found.") - ELSE(swscale1_FOUND) - message("-- FFMpeg's libswscale not found... depending on your ffmpeg version, VS might not build.") - ENDIF(swscale1_FOUND) -ELSE(FFMPEG_FOUND) - message("-- FFMPEG Not Found") -ENDIF(FFMPEG_FOUND) +#find_package(FFMPEG) +#IF(FFMPEG_FOUND) +# SET(TST_INCLUDES ${TST_INCLUDES} ${FFMPEG_INCLUDE_DIRS}) +# SET(TST_LIBS ${TST_LIBS} ${FFMPEG_LIBRARIES}) +# add_definitions(${FFMPEG_DEFINITIONS}) +# SET(HAVE_FFMPEG 1 ) +# IF(swscale1_FOUND) +# message("++ FFmpeg's libswscale found.") +# ELSE(swscale1_FOUND) +# message("-- FFMpeg's libswscale not found... depending on your ffmpeg version, VS might not build.") +# ENDIF(swscale1_FOUND) +#ELSE(FFMPEG_FOUND) +# message("-- FFMPEG Not Found") +#ENDIF(FFMPEG_FOUND) #Find Ogre -find_package(OGRE) -IF(OGRE_FOUND) - SET(TST_INCLUDES ${TST_INCLUDES} ${OGRE_INCLUDE_DIR}) - SET(TST_LIBS ${TST_LIBS} ${OGRE_LIBRARY}) - add_definitions(${OGRE_DEFINITIONS}) - SET(HAVE_OGRE 1) - message("++ Found Ogre: ${OGRE_VERSION}") -ELSE(OGRE_FOUND) - message("-- Ogre Not Found: compiling without") -ENDIF(OGRE_FOUND) +#find_package(OGRE) +#IF(OGRE_FOUND) +# SET(TST_INCLUDES ${TST_INCLUDES} ${OGRE_INCLUDE_DIR}) +# SET(TST_LIBS ${TST_LIBS} ${OGRE_LIBRARY}) +# add_definitions(${OGRE_DEFINITIONS}) +# SET(HAVE_OGRE 1) +# message("++ Found Ogre: ${OGRE_VERSION}") +#ELSE(OGRE_FOUND) +# message("-- Ogre Not Found: compiling without") +#ENDIF(OGRE_FOUND) IF(NOT BEOS) FIND_LIBRARY(UTIL_LIB util) @@ -977,12 +977,12 @@ HAVE_AVFORMAT_H HAVE_AVCODEC_H HAVE_AVIO_H - HAVE_FFMPEG_SWSCALE_H +# HAVE_FFMPEG_SWSCALE_H CMAKE_BACKWARDS_COMPATIBILITY - FFMPEG_INCLUDE_DIR - FFMPEG_FOUND - FFMPEG_LIBRARIES - FFMPEG_DEFINITIONS +# FFMPEG_INCLUDE_DIR +# FFMPEG_FOUND +# FFMPEG_LIBRARIES +# FFMPEG_DEFINITIONS GTK2_ATK_INCLUDE_DIR GTK2_ATK_LIBRARY GTK2_CAIRO_INCLUDE_DIR diff -ruN ./objconv/basemaker/base_maker_texture.cpp ../c/objconv/basemaker/base_maker_texture.cpp --- ./objconv/basemaker/base_maker_texture.cpp 2010-03-10 03:56:23.000000000 +0100 +++ ../c/objconv/basemaker/base_maker_texture.cpp 2020-09-03 16:25:55.871086646 +0200 @@ -6,9 +6,12 @@ #define XMD_H #define HAVE_BOOLEAN #endif + extern "C" { //YUCK it doesn't even have extern c in the headers! #include +#include + } #define strip_16 true diff -ruN ./objconv/mesher/to_OgreMesh.cpp ../c/objconv/mesher/to_OgreMesh.cpp --- ./objconv/mesher/to_OgreMesh.cpp 2011-06-02 01:47:36.000000000 +0200 +++ ../c/objconv/mesher/to_OgreMesh.cpp 2020-09-03 16:25:55.872086633 +0200 @@ -1078,10 +1078,15 @@ Ogre::VertexDeclaration *newDcl = data->vertexDeclaration->getAutoOrganisedDeclaration( mesh->hasSkeleton() ); -#else +#elif (OGRE_VERSION_MAJOR == 1) && (OGRE_VERSION_MINOR < 8) Ogre::VertexDeclaration *newDcl = data->vertexDeclaration->getAutoOrganisedDeclaration( mesh->hasSkeleton(), mesh->hasVertexAnimation() || (mesh->getPoseCount() > 0) ); +#else + Ogre::VertexDeclaration *newDcl = + data->vertexDeclaration->getAutoOrganisedDeclaration( + mesh->hasSkeleton(), mesh->hasVertexAnimation() || (mesh->getPoseCount() > 0), + mesh->getSharedVertexDataAnimationIncludesNormals()); // what about Pose objects? #endif if ( *newDcl != *(data->vertexDeclaration) ) { //Usages don't matter here since we're onlly exporting @@ -1109,35 +1114,35 @@ } } -void AutoLOD( void *outputcontext, bool force, int numLod, float reductionFactor, float refDistance ) -{ - struct outputContext *ctxt = (struct outputContext*) outputcontext; - MeshPtr newMesh = ctxt->top; - if ( force || (newMesh->getNumLodLevels() <= 1) ) { - if (newMesh->getNumLodLevels() <= 1) - newMesh->removeLodLevels(); - const Ogre::ProgressiveMesh::VertexReductionQuota quota = Ogre::ProgressiveMesh::VRQ_PROPORTIONAL; - const Real reduction = Real( 1-reductionFactor ); - - Real currDist = refDistance; - - #if (OGRE_VERSION >= 0x010700) - Ogre::Mesh::LodValueList distanceList; - - // pixel area is squared length, and length is proportional to triangle count - const Real distFactor = reductionFactor * reductionFactor; - newMesh->setLodStrategy(Ogre::LodStrategyManager::getSingletonPtr()-> - getStrategy( "PixelCount" ) ); - #else - Ogre::Mesh::LodDistanceList distanceList; - const Real distFactor = ( (reduction > 0.00001) ? 1/reduction : 1 ); - #endif - - for (int iLod = 0; iLod < numLod; ++iLod, currDist *= distFactor) - distanceList.push_back( currDist ); - newMesh->generateLodLevels( distanceList, quota, reduction ); - } -} +//void AutoLOD( void *outputcontext, bool force, int numLod, float reductionFactor, float refDistance ) +//{ +// struct outputContext *ctxt = (struct outputContext*) outputcontext; +// MeshPtr newMesh = ctxt->top; +// if ( force || (newMesh->getNumLodLevels() <= 1) ) { +// if (newMesh->getNumLodLevels() <= 1) +// newMesh->removeLodLevels(); +// const Ogre::ProgressiveMesh::VertexReductionQuota quota = Ogre::ProgressiveMesh::VRQ_PROPORTIONAL; +// const Real reduction = Real( 1-reductionFactor ); +// +// Real currDist = refDistance; +// +// #if (OGRE_VERSION >= 0x010700) +// Ogre::Mesh::LodValueList distanceList; +// +// // pixel area is squared length, and length is proportional to triangle count +// const Real distFactor = reductionFactor * reductionFactor; +// newMesh->setLodStrategy(Ogre::LodStrategyManager::getSingletonPtr()-> +// getStrategy( "PixelCount" ) ); +// #else +// Ogre::Mesh::LodDistanceList distanceList; +// const Real distFactor = ( (reduction > 0.00001) ? 1/reduction : 1 ); +// #endif +// +// for (int iLod = 0; iLod < numLod; ++iLod, currDist *= distFactor) +// distanceList.push_back( currDist ); +// newMesh->generateLodLevels( distanceList, quota, reduction ); +// } +//} void DoneMeshes( void *outputcontext ) { diff -ruN ./objconv/mesher/to_OgreMesh.h ../c/objconv/mesher/to_OgreMesh.h --- ./objconv/mesher/to_OgreMesh.h 2010-02-25 16:22:25.000000000 +0100 +++ ../c/objconv/mesher/to_OgreMesh.h 2020-09-03 16:25:55.873086621 +0200 @@ -20,7 +20,7 @@ float RadialSize( void *outputcontext ); //returns the size of the resulting mesh (it's maximum distance from 0,0,0). Useful for LODding. void Optimize( void *outputcontext ); //a good idea - reorganizes internal buffers so that the output mesh is more efficient -void AutoLOD( void *outputcontext, bool force, int numLod, float reductionFactor, float refDistance ); //autogenerates LOD levels - if force==true, will discard current LOD data +//void AutoLOD( void *outputcontext, bool force, int numLod, float reductionFactor, float refDistance ); //autogenerates LOD levels - if force==true, will discard current LOD data void AutoEdgeList( void *outputcontext ); //a good idea - prepares the mesh for stencil shadows void AutoTangents( void *outputcontext ); //prepares the mesh for normal mapping (only needed if the material uses normal mapping) } diff -ruN ./setup/src/c/setup.cpp ../c/setup/src/c/setup.cpp --- ./setup/src/c/setup.cpp 2011-03-15 01:28:47.000000000 +0100 +++ ../c/setup/src/c/setup.cpp 2020-09-03 16:25:55.873086621 +0200 @@ -110,10 +110,22 @@ return 1; } } - + #ifdef DATA_DIR data_paths.push_back( DATA_DIR ); #endif + /* whatever the plan was, it does not work on Linux - at least + * not at this stage. Hence, use fixed absolute paths to + * find data directory + */ + data_paths.push_back( "/usr/share/games/vegastrike/data"); + data_paths.push_back( "/usr/share/vegastrike/data"); + data_paths.push_back( "/usr/games/vegastrike/data"); + data_paths.push_back( "/usr/local/share/games/vegastrike/data"); + data_paths.push_back( "/usr/local/share/vegastrike/data"); + data_paths.push_back( "/usr/local/games/vegastrike/data"); + data_paths.push_back( "/opt/vegastrike/data"); + data_paths.push_back( origpath ); data_paths.push_back( string( origpath )+"/.." ); data_paths.push_back( string( origpath )+"/../data4.x" ); @@ -133,22 +145,7 @@ data_paths.push_back( "../Resources" ); data_paths.push_back( "../Resources/data" ); data_paths.push_back( "../Resources/data4.x" ); -/* - * data_paths.push_back( "/usr/share/local/vegastrike/data"); - * data_paths.push_back( "/usr/local/share/vegastrike/data"); - * data_paths.push_back( "/usr/local/vegastrike/data"); - * data_paths.push_back( "/usr/share/vegastrike/data"); - * data_paths.push_back( "/usr/local/games/vegastrike/data"); - * data_paths.push_back( "/usr/games/vegastrike/data"); - * data_paths.push_back( "/opt/share/vegastrike/data"); - * data_paths.push_back( "/usr/share/local/vegastrike/data4.x"); - * data_paths.push_back( "/usr/local/share/vegastrike/data4.x"); - * data_paths.push_back( "/usr/local/vegastrike/data4.x"); - * data_paths.push_back( "/usr/share/vegastrike/data4.x"); - * data_paths.push_back( "/usr/local/games/vegastrike/data4.x"); - * data_paths.push_back( "/usr/games/vegastrike/data4.x"); - * data_paths.push_back( "/opt/share/vegastrike/data4.x"); - */ + //Win32 data should be "." char tmppath[16384]; for (vector< string >::iterator vsit = data_paths.begin(); vsit != data_paths.end(); vsit++) { diff -ruN ./setup/src/include/central.cpp ../c/setup/src/include/central.cpp --- ./setup/src/include/central.cpp 2004-10-25 04:27:13.000000000 +0200 +++ ../c/setup/src/include/central.cpp 2020-09-03 17:45:35.786329482 +0200 @@ -20,6 +20,8 @@ struct group GROUPS; struct global_settings CONFIG; +static char EMPTY_STR[] = ""; + // Primary initialization function. Sets everything up and takes care of the program void Start(int * argc, char ***argv) { LoadMainConfig(); @@ -65,7 +67,7 @@ if (CUR->name == NULL) { continue; } if (strcmp(CUR->name, group) == 0) { return CUR->setting; } } while ((CUR = CUR->next) > 0); - return '\0'; + return EMPTY_STR; } struct catagory *GetCatStruct(char *name) { diff -ruN ./src/cmd/music.cpp ../c/src/cmd/music.cpp --- ./src/cmd/music.cpp 2012-03-19 09:20:14.000000000 +0100 +++ ../c/src/cmd/music.cpp 2020-09-03 16:25:55.874086608 +0200 @@ -448,7 +448,9 @@ if (foundcache) { *me->music_load_info = wherecache->second; me->freeWav = false; - } + } else if ( ! AUDLoadSoundFile(songname, me->music_load_info, true)) { + VSFileSystem::vs_dprintf(1, "Failed to load music file \"%s\"", songname); + } } if (me->freeWav && docacheme) { me->freeWav = false; diff -ruN ./src/cmd/unit.cpp ../c/src/cmd/unit.cpp --- ./src/cmd/unit.cpp 2012-03-19 09:20:14.000000000 +0100 +++ ../c/src/cmd/unit.cpp 2020-09-03 16:25:55.875086596 +0200 @@ -80,6 +80,7 @@ template < class UnitType >GameUnit< UnitType >::GameUnit( int ) : sparkle_accum( 0 ) , phalos( new HaloSystem() ) { + VSFileSystem::vs_dprintf(3, "Unit created by Constructor: template < class UnitType >GameUnit< UnitType >::GameUnit( int ) : sparkle_accum( 0 ), phalos( new HaloSystem() )\n"); this->Unit::Init(); } @@ -99,6 +100,14 @@ , phalos( new HaloSystem() ) { Unit::Init( filename, SubU, faction, unitModifications, flightgrp, fg_subnumber, netxml ); + + std::string fn = string(filename); + std::string str_faction = string(FactionUtil::GetFaction(faction)); + std::string objtype = UniverseUtil::LookupUnitStat( fn, str_faction, "Object_Type"); + if (objtype.compare("Vessel") == 0) { + VSFileSystem::vs_dprintf(3, "Recomputing upgrades for (units.csv) Object_Type: %s\n", objtype.c_str()); + UnitUtil::RecomputeUnitUpgrades(this); + } } template < class UnitType >GameUnit< UnitType >::~GameUnit() diff -ruN ./src/cmd/unit_collide.h ../c/src/cmd/unit_collide.h --- ./src/cmd/unit_collide.h 2012-03-19 09:20:14.000000000 +0100 +++ ../c/src/cmd/unit_collide.h 2020-09-03 17:34:09.178913256 +0200 @@ -94,9 +94,9 @@ { if ( !hugeobjects.empty() ) hugeobjects.clear(); - if ( this->active_huge.size() ) + if ( this->active_huge->size() ) ha.clear(); - if ( this->accum_huge.size() ) + if ( this->accum_huge->size() ) hb.clear(); acc_huge.clear(); act_huge.clear(); diff -ruN ./src/cmd/unit_generic.cpp ../c/src/cmd/unit_generic.cpp --- ./src/cmd/unit_generic.cpp 2012-03-19 09:20:14.000000000 +0100 +++ ../c/src/cmd/unit_generic.cpp 2020-09-03 16:25:55.879086546 +0200 @@ -4903,16 +4903,26 @@ static const string LOAD_FAILED = "LOAD_FAILED"; +//const Unit * makeFinalBlankUpgrade( string name, int faction ) +//{ +// char *unitdir = GetUnitDir( name.c_str() ); +// string limiternam = name; +// if (unitdir != name) +// limiternam = string( unitdir )+string( ".blank" ); +// free( unitdir ); +// const Unit *lim = UnitConstCache::getCachedConst( StringIntKey( limiternam, faction ) ); +// if (!lim) +// lim = UnitConstCache::setCachedConst( StringIntKey( limiternam, faction ), makeBlankUpgrade( limiternam, faction ) ); +// if (lim->name == LOAD_FAILED) +// lim = NULL; +// return lim; +//} + const Unit * makeFinalBlankUpgrade( string name, int faction ) { - char *unitdir = GetUnitDir( name.c_str() ); - string limiternam = name; - if (unitdir != name) - limiternam = string( unitdir )+string( ".blank" ); - free( unitdir ); - const Unit *lim = UnitConstCache::getCachedConst( StringIntKey( limiternam, faction ) ); + const Unit *lim = UnitConstCache::getCachedConst( StringIntKey( name, faction ) ); if (!lim) - lim = UnitConstCache::setCachedConst( StringIntKey( limiternam, faction ), makeBlankUpgrade( limiternam, faction ) ); + lim = UnitConstCache::setCachedConst( StringIntKey( name, faction ), makeBlankUpgrade( name, faction ) ); if (lim->name == LOAD_FAILED) lim = NULL; return lim; @@ -6387,21 +6397,48 @@ int tmpammo = mounts[jmod].ammo; if (mounts[jmod].ammo != -1 && up->mounts[i].ammo != -1) { tmpammo += up->mounts[i].ammo; - if (templ) { - if (templ->GetNumMounts() > jmod) { - if (templ->mounts[jmod].volume != -1) { - if (templ->mounts[jmod].volume < mounts[jmod].type->volume*tmpammo) { - tmpammo = - (int) floor( .125 - +( (0 - +templ->mounts[jmod].volume) - /mounts[jmod].type->volume ) ); + if (ismissiletype) { + if (templ) { + if (templ->GetNumMounts() > jmod) { + if (templ->mounts[jmod].volume != -1) { + if (templ->mounts[jmod].volume < mounts[jmod].type->volume*tmpammo) { + tmpammo = + (int) floor( .125 + +( (0 + +templ->mounts[jmod].volume) + /mounts[jmod].type->volume ) ); + } } } } + if (tmpammo*mounts[jmod].type->volume > mounts[jmod].volume) + tmpammo = (int) floor( .125+( (0+mounts[jmod].volume)/mounts[jmod].type->volume ) ); + } else { + std::string ammoname = up->name.get(); + std::size_t ammopos = ammoname.find("_ammo"); + std::string weaponname = ammoname.substr(0, ammopos); + + /* Do NOT delete this Unit because it will be either fetched + * from a cache or - if it has to be created - it will + * be automatically put in a cache. + * Deletion will corrupt the cache! + */ + const Unit * weapon = getUnitFromUpgradeName(weaponname); + + if (weapon == NULL || weapon->name == LOAD_FAILED) { + // this should not happen + VSFileSystem::vs_dprintf(1, "UpgradeMount(): FAILED to obtain weapon: %s\n", weaponname.c_str()); + cancompletefully = false; + break; + } + + int maxammo = weapon->mounts[0].ammo; + + if (tmpammo > maxammo) { + tmpammo = maxammo; + } } - if (tmpammo*mounts[jmod].type->volume > mounts[jmod].volume) - tmpammo = (int) floor( .125+( (0+mounts[jmod].volume)/mounts[jmod].type->volume ) ); + if (tmpammo > mounts[jmod].ammo) { cancompletefully = true; if (touchme) diff -ruN ./src/cmd/unit_jump.h ../c/src/cmd/unit_jump.h --- ./src/cmd/unit_jump.h 2012-03-19 09:20:14.000000000 +0100 +++ ../c/src/cmd/unit_jump.h 2020-09-03 16:25:55.880086533 +0200 @@ -108,7 +108,7 @@ (tester = *i) != NULL; ++i) if (tester->isUnit() == UNITPTR && tester != this) if ( ( this->LocalPosition()-tester->LocalPosition() ).Magnitude() < this->rSize()+tester->rSize() ) - SetCurPosition( this->LocalPosition()+this->cumulative_transformation_matrix.getR() + this->SetCurPosition( this->LocalPosition()+this->cumulative_transformation_matrix.getR() *( 4*( this->rSize()+tester->rSize() ) ) ); DealPossibleJumpDamage( this ); static int jumparrive = AUDCreateSound( vs_config->getVariable( "unitaudio", "jumparrive", "sfx43.wav" ), false ); diff -ruN ./src/gfx/cockpit_xml.cpp ../c/src/gfx/cockpit_xml.cpp --- ./src/gfx/cockpit_xml.cpp 2010-12-15 09:53:40.000000000 +0100 +++ ../c/src/gfx/cockpit_xml.cpp 2020-09-03 16:30:00.313030701 +0200 @@ -315,7 +315,7 @@ for (counter = 0; counter < 4; ++counter) if (!replaced[counter]) { delete Pit[counter]; - Pit[counter] = false; + Pit[counter] = NULL; } break; case UnitImages< void >::SHIELD4: diff -ruN ./src/gfx/quadsquare.cpp ../c/src/gfx/quadsquare.cpp --- ./src/gfx/quadsquare.cpp 2010-03-10 06:27:01.000000000 +0100 +++ ../c/src/gfx/quadsquare.cpp 2020-09-03 16:25:55.881086521 +0200 @@ -13,9 +13,9 @@ #include #include #include -#include "quadsquare.h" #include "gfxlib.h" #include "aux_texture.h" +#include "quadsquare.h" using std::vector; unsigned int*quadsquare::VertexAllocated; diff -ruN ./src/gui/text_area.cpp ../c/src/gui/text_area.cpp --- ./src/gui/text_area.cpp 2010-02-25 15:26:53.000000000 +0100 +++ ../c/src/gui/text_area.cpp 2020-09-03 17:46:51.883378138 +0200 @@ -32,6 +32,8 @@ * }; */ +static char EMPTY_STR[] = ""; + TextArea::~TextArea() {} TextArea::TextArea() @@ -316,7 +318,7 @@ { TextAreaItem *search; search = ItemList->FindCount( cur_selected, 0 ); - if (search == 0) return '\0'; + if (search == 0) return EMPTY_STR; if (type == 1) return search->name; else return search->description; diff -ruN ./src/networking/lowlevel/packetmem.cpp ../c/src/networking/lowlevel/packetmem.cpp --- ./src/networking/lowlevel/packetmem.cpp 2008-03-31 10:20:19.000000000 +0200 +++ ../c/src/networking/lowlevel/packetmem.cpp 2020-09-03 16:25:55.881086521 +0200 @@ -102,7 +102,7 @@ } else { - _buffer.reset( 0 ); + _buffer.reset(); _len = 0; } } diff -ruN ./src/pk3.cpp ../c/src/pk3.cpp --- ./src/pk3.cpp 2012-03-19 09:20:14.000000000 +0100 +++ ../c/src/pk3.cpp 2020-09-03 16:31:12.819124250 +0200 @@ -356,7 +356,7 @@ } //if the file isn't in the archive if (index == -1) - return false; + return NULL; int flength = GetFileLen( index ); buffer = new char[flength]; diff -ruN ./src/vsfilesystem.cpp ../c/src/vsfilesystem.cpp --- ./src/vsfilesystem.cpp 2012-03-19 09:20:14.000000000 +0100 +++ ../c/src/vsfilesystem.cpp 2020-09-03 16:25:55.882086508 +0200 @@ -460,13 +460,15 @@ int vs_fprintf( FILE *fp, const char *format, ... ) { + int ret = 0; if (!use_volumes) { va_list ap; va_start( ap, format ); - return vfprintf( fp, format, ap ); - } else {} - return 0; + ret = vfprintf( fp, format, ap ); + va_end(ap); + } + return ret; } void vs_dprintf( char level, const char *format, ... ) @@ -475,19 +477,22 @@ va_list ap; va_start( ap, format ); vfprintf( stderr, format, ap ); + va_end(ap); } } #if 0 int vs_fscanf( FILE *fp, const char *format, ... ) { + int ret = 0; if (!use_volumes) { va_list arglist; va_start( arglist, format ); //return _input(fp,(unsigned char*)format,arglist); - return vfscanf( fp, format, arglist ); - } else {} - return 0; + ret = vfscanf( fp, format, arglist ); + va_end(arglist); + } + return ret; } #endif @@ -563,6 +568,18 @@ data_paths.push_back( DATA_DIR ); #endif if ( !vegastrike_cwd.empty() ) { + /* whatever the plan was, it does not work on Linux - at least + * not at this stage. Hence, use fixed absolute paths to + * find data directory + */ + data_paths.push_back( "/usr/share/games/vegastrike/data"); + data_paths.push_back( "/usr/share/vegastrike/data"); + data_paths.push_back( "/usr/games/vegastrike/data"); + data_paths.push_back( "/usr/local/share/games/vegastrike/data"); + data_paths.push_back( "/usr/local/share/vegastrike/data"); + data_paths.push_back( "/usr/local/games/vegastrike/data"); + data_paths.push_back( "/opt/vegastrike/data"); + data_paths.push_back( vegastrike_cwd ); data_paths.push_back( vegastrike_cwd+"/.." ); data_paths.push_back( vegastrike_cwd+"/../data4.x" ); @@ -1713,16 +1730,18 @@ int VSFile::Fprintf( const char *format, ... ) { + int ret = 0; if (!UseVolumes[alt_type] || this->volume_type == VSFSNone) { va_list ap; va_start( ap, format ); - return vfprintf( this->fp, format, ap ); + ret = vfprintf( this->fp, format, ap ); + va_end(ap); } else { cerr<<"!!! ERROR : Writing is not supported within resource/volume files"<volume_type == VSFSNone) { //return _input(fp,(unsigned char*)format,arglist); ret = vfscanf( this->fp, newformat, arglist ); - va_end( arglist ); } else { if (q_volume_format == vfmtVSR) {} else if (q_volume_format == vfmtPK3) { //If the file has not been extracted yet we do now checkExtracted(); ret = vsscanf( pk3_extracted_file+offset, newformat, arglist ); readbytes = GetReadBytes( newformat, arglist ); - va_end( arglist ); cerr<<" SSCANF : Read "<offset += readbytes; } } + va_end( arglist ); delete[] newformat; return ret; }