1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-11-24 08:32:34 +02:00

Made all paths dependent on DATA_DIR, USER_DIR, BIN_DIR or LIB_DIR. Data access can now be separated from saved games and binaries.

Fixed a file handle leak.
Bumped revision to 0.74b (linux).
Reworked the build system to remove uneeded dependencies (linux).
Removed use of PATHSEPARATOR since Windows can use / too.
This commit is contained in:
Frank Zago 2009-10-04 02:02:45 +00:00
parent 8d34b602b3
commit 1609b8fdb9
41 changed files with 171 additions and 149 deletions

View File

@ -1,5 +1,5 @@
pkglib_LTLIBRARIES = EmptyAI.la pkglib_LTLIBRARIES = EmptyAI.la
EmptyAI_la_LIBADD = $(top_builddir)/lib/libvcmi.la @BOOST_SYSTEM_LIB@ @BOOST_FILESYSTEM_LIB@ @BOOST_THREAD_LIB@ EmptyAI_la_LIBADD = $(top_builddir)/lib/libvcmi.la
EmptyAI_la_LDFLAGS = -L$(top_builddir)/lib -module EmptyAI_la_LDFLAGS = -L$(top_builddir)/lib -module
EmptyAI_la_SOURCES = \ EmptyAI_la_SOURCES = \
CEmptyAI.cpp \ CEmptyAI.cpp \

View File

@ -218,7 +218,7 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
pkglib_LTLIBRARIES = EmptyAI.la pkglib_LTLIBRARIES = EmptyAI.la
EmptyAI_la_LIBADD = $(top_builddir)/lib/libvcmi.la @BOOST_SYSTEM_LIB@ @BOOST_FILESYSTEM_LIB@ @BOOST_THREAD_LIB@ EmptyAI_la_LIBADD = $(top_builddir)/lib/libvcmi.la
EmptyAI_la_LDFLAGS = -L$(top_builddir)/lib -module EmptyAI_la_LDFLAGS = -L$(top_builddir)/lib -module
EmptyAI_la_SOURCES = \ EmptyAI_la_SOURCES = \
CEmptyAI.cpp \ CEmptyAI.cpp \

View File

@ -1,5 +1,5 @@
pkglib_LTLIBRARIES = GeniusAI.la pkglib_LTLIBRARIES = GeniusAI.la
GeniusAI_la_LIBADD = $(top_builddir)/lib/libvcmi.la @BOOST_SYSTEM_LIB@ @BOOST_FILESYSTEM_LIB@ @BOOST_THREAD_LIB@ GeniusAI_la_LIBADD = $(top_builddir)/lib/libvcmi.la
GeniusAI_la_LDFLAGS = -L$(top_builddir)/lib -module GeniusAI_la_LDFLAGS = -L$(top_builddir)/lib -module
GeniusAI_la_SOURCES = \ GeniusAI_la_SOURCES = \
AIPriorities.cpp \ AIPriorities.cpp \

View File

@ -220,7 +220,7 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
pkglib_LTLIBRARIES = GeniusAI.la pkglib_LTLIBRARIES = GeniusAI.la
GeniusAI_la_LIBADD = $(top_builddir)/lib/libvcmi.la @BOOST_SYSTEM_LIB@ @BOOST_FILESYSTEM_LIB@ @BOOST_THREAD_LIB@ GeniusAI_la_LIBADD = $(top_builddir)/lib/libvcmi.la
GeniusAI_la_LDFLAGS = -L$(top_builddir)/lib -module GeniusAI_la_LDFLAGS = -L$(top_builddir)/lib -module
GeniusAI_la_SOURCES = \ GeniusAI_la_SOURCES = \
AIPriorities.cpp \ AIPriorities.cpp \

View File

@ -39,7 +39,7 @@ CGlobalAI * CAIHandler::getNewAI(CCallback * cb, std::string dllname)
getName = (void(*)(char*))GetProcAddress(dll,"GetAiName"); getName = (void(*)(char*))GetProcAddress(dll,"GetAiName");
getAI = (CGlobalAI*(*)())GetProcAddress(dll,"GetNewAI"); getAI = (CGlobalAI*(*)())GetProcAddress(dll,"GetNewAI");
#else #else
dllPath = "AI/"+dllname+".so"; dllPath = LIB_DIR "/" + dllname + ".so";
void *dll = dlopen(dllPath.c_str(), RTLD_LOCAL | RTLD_LAZY); void *dll = dlopen(dllPath.c_str(), RTLD_LOCAL | RTLD_LAZY);
if (!dll) if (!dll)
{ {

View File

@ -1,7 +1,5 @@
ACLOCAL_AMFLAGS = -I aclocal/m4 ACLOCAL_AMFLAGS = -I aclocal/m4
EXTRA_DIST = aclocal/m4 EXTRA_DIST = aclocal/m4 README.linux
AM_CXXFLAGS = @BOOST_CPPFLAGS@
AM_LDFLAGS = @BOOST_LDFLAGS@
SUBDIRS = lib client server AI SUBDIRS = lib client server AI

View File

@ -206,9 +206,7 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
ACLOCAL_AMFLAGS = -I aclocal/m4 ACLOCAL_AMFLAGS = -I aclocal/m4
EXTRA_DIST = aclocal/m4 EXTRA_DIST = aclocal/m4 README.linux
AM_CXXFLAGS = @BOOST_CPPFLAGS@
AM_LDFLAGS = @BOOST_LDFLAGS@
SUBDIRS = lib client server AI SUBDIRS = lib client server AI
all: all-recursive all: all-recursive

View File

@ -24,20 +24,19 @@ To compile, at least the following packages (and their development counterparts)
On Ubuntu 9.04, run: On Ubuntu 9.04, run:
sudo apt-get install g++ libsdl1.2debian-all libsdl-image1.2-dev libsdl-ttf2.0-dev libsdl-mixer1.2-dev zlib1g-dev libavformat-dev libswscale-dev libboost1.37-dev sudo apt-get install g++ libsdl1.2debian-all libsdl-image1.2-dev libsdl-ttf2.0-dev libsdl-mixer1.2-dev zlib1g-dev libavformat-dev libswscale-dev libboost1.37-dev
Create a directory /YOUR_INSTALL_PATH/vcmi (such as
/usr/local/share/games/vcmi) that will contain the game data files. The /vcmi at the end is necessary.
Then do the usual Then run configure:
./configure ./configure --datadir=/YOUR_INSTALL_PATH/ --bindir=/YOUR_INSTALL_PATH/vcmi --libdir=/YOUR_INSTALL_PATH/
Note that on 64 bits linux, if the boost libraries are installed in /usr/lib64, configure will not find them and will fail. Until this is fixed, use: On 64 bits linux (such as OpenSUSE but not Ubuntu), if the boost
./configure --with-boost-libdir=/usr/lib64 libraries are installed in /usr/lib64, configure will not find them
and will fail. Until this is fixed, add the following option to
./configure: --with-boost-libdir=/usr/lib64
Note: if you've not installed everything, some files will be missing, and you may want to hack your system (don't) such as: If you want to use the Intel C++ compiler, add the following option to ./configure:
============= CXX="icc -diag-disable 383,981,1418,869,1563,2259,1782,444,271,1,10156,1419"
Another note on ubuntu(posible others to) - create symlincs to correct libnames in /usr/lib
eg:
sudo ln -s libswscale.so.0.7.1 libswscale.so
sudo ln -s libavformat.so.52 libavformat.so
=============
Then build vcmi: Then build vcmi:
make make
@ -47,37 +46,45 @@ That will generate vcmiclient, vcmiserver as well as 3 .so libraries.
II. Installing Heroes of Might and Magic 3 II. Installing Heroes of Might and Magic 3
VCMI needs an installed version of Heroes III as well as WoG on top of it. VCMI needs an installed version of Heroes III as well as WoG on top of
The version of Heroes needed is (I think!) Shadow of Death or Complete. it. The version of Heroes needed is (I think!) either Shadow of Death
or Complete.
Wog can be downloaded from: http://www.maps4heroes.com/heroes3/files/allinone_358f.zip Wog can be downloaded from: http://www.maps4heroes.com/heroes3/files/allinone_358f.zip
Wine can be used to install both. Wine can be used to install both.
Install Heroes 3 and Wog. Then move all the installed files into
/YOUR_INSTALL_PATH/vcmi. For instance that will create
/YOUR_INSTALL_PATH/vcmi/Data.
Once both programs are installed, you can install VCMI. Once both programs are installed, you can install VCMI.
Download the windows VCMI release (at time of writing: http://vcmi.antypika.aplus.pl/forum/dload.php?action=download&id=11) and extract it in a private directory. Then move some files to your Heroes3 directory: Download the windows VCMI release (at time of writing:
mv sprites /PATH_TO_H3_DIR/Sprites http://vcmi.antypika.aplu...=download&id=14)
mv Data/* /PATH_TO_H3_DIR/Data and extract it in a private directory. Populate /YOUR_INSTALL_PATH/vcmi:
mv Fonts Games /PATH_TO_H3_DIR/
mv sprites /YOUR_INSTALL_PATH/vcmi/Sprites
mv Data/* /YOUR_INSTALL_PATH/vcmi/Data
mv Fonts Games /YOUR_INSTALL_PATH/vcmi/
If you also have the original linux version of Heroes, you can also install the videos: If you also have the original linux version of Heroes, you can also install the videos:
cp -a /PATH_TO_CDROM/data/video /PATH_TO_H3_DIR/Data cp -a /PATH_TO_CDROM/data/video /YOUR_INSTALL_PATH/vcmi/Data
III. Installing VCMI III. Installing VCMI
Since VCMI is still in development, there's no install procedure, although something like Since VCMI is still in development, there's no install procedure, although something like
DESTDIR=/path/to/heroes3 make install DESTDIR=/path/to/heroes3 make install
might work. will work.
For development puposes, it's better to use links. Go
to /YOUR_INSTALL_PATH/vcmi, and type:
For development puposes, it's better to use links. Go to your new Heroes3 directory, and type:
ln -s /PATH_TO_VCMI/client/vcmiclient ln -s /PATH_TO_VCMI/client/vcmiclient
ln -s /PATH_TO_VCMI/server/vcmiserver ln -s /PATH_TO_VCMI/server/vcmiserver
ln -s /PATH_TO_VCMI/config ln -s /PATH_TO_VCMI/config
ln -s /PATH_TO_VCMI/AI/GeniusAI/.libs AI ln -s /PATH_TO_VCMI/AI/GeniusAI/.libs/GeniusAI.so
And start ./vcmiclient And start ./vcmiclient

View File

@ -85,7 +85,7 @@ CMinimap::CMinimap(bool draw)
SDL_SetColorKey(radar,SDL_SRCCOLORKEY,SDL_MapRGB(radar->format,0,255,255)); SDL_SetColorKey(radar,SDL_SRCCOLORKEY,SDL_MapRGB(radar->format,0,255,255));
//radar = CDefHandler::giveDef("RADAR.DEF"); //radar = CDefHandler::giveDef("RADAR.DEF");
std::ifstream is("config/minimap.txt",std::ifstream::in); std::ifstream is(DATA_DIR "/config/minimap.txt",std::ifstream::in);
for (int i=0;i<TERRAIN_TYPES;i++) for (int i=0;i<TERRAIN_TYPES;i++)
{ {
std::pair<int,SDL_Color> vinya; std::pair<int,SDL_Color> vinya;

View File

@ -187,7 +187,7 @@ SDL_Surface * BitmapHandler::loadBitmap(std::string fname, bool setKey)
if(e->offset<0) if(e->offset<0)
{ {
fname.replace(fname.find_first_of('.'),fname.find_first_of('.')+4,".BMP"); fname.replace(fname.find_first_of('.'),fname.find_first_of('.')+4,".BMP");
fname = "Data/"+fname; fname = DATA_DIR "/Data/" + fname;
FILE * f = fopen(fname.c_str(),"r"); FILE * f = fopen(fname.c_str(),"r");
if(f) if(f)
{ {
@ -259,4 +259,4 @@ SDL_Surface * BitmapHandler::loadBitmap(std::string fname, bool setKey)
SDL_SetColorKey(ret,SDL_SRCCOLORKEY,SDL_MapRGB(ret->format, c.r, c.g, c.b)); SDL_SetColorKey(ret,SDL_SRCCOLORKEY,SDL_MapRGB(ret->format, c.r, c.g, c.b));
} }
return ret; return ret;
} }

View File

@ -344,7 +344,7 @@ CConfigHandler::~CConfigHandler(void)
void config::CConfigHandler::init() void config::CConfigHandler::init()
{ {
std::vector<char> settings; std::vector<char> settings;
std::ifstream ifs("config/settings.txt"); std::ifstream ifs(DATA_DIR "/config/settings.txt");
if(!ifs) if(!ifs)
{ {
tlog1 << "Cannot open config/settings.txt !\n"; tlog1 << "Cannot open config/settings.txt !\n";

View File

@ -92,11 +92,11 @@ void init()
TTF_Init(); TTF_Init();
atexit(TTF_Quit); atexit(TTF_Quit);
TNRB16 = TTF_OpenFont("Fonts" PATHSEPARATOR "tnrb.ttf",16); TNRB16 = TTF_OpenFont(DATA_DIR "/Fonts/tnrb.ttf",16);
GEOR13 = TTF_OpenFont("Fonts" PATHSEPARATOR "georgia.ttf",13); GEOR13 = TTF_OpenFont(DATA_DIR "/Fonts/georgia.ttf",13);
GEOR16 = TTF_OpenFont("Fonts" PATHSEPARATOR "georgia.ttf",16); GEOR16 = TTF_OpenFont(DATA_DIR "/Fonts/georgia.ttf",16);
GEORXX = TTF_OpenFont("Fonts" PATHSEPARATOR "tnrb.ttf",22); GEORXX = TTF_OpenFont(DATA_DIR "/Fonts/tnrb.ttf",22);
GEORM = TTF_OpenFont("Fonts" PATHSEPARATOR "georgia.ttf",10); GEORM = TTF_OpenFont(DATA_DIR "/Fonts/georgia.ttf",10);
if(! (TNRB16 && GEOR16 && GEORXX && GEORM)) if(! (TNRB16 && GEOR16 && GEORXX && GEORM))
{ {
tlog1 << "One of the fonts couldn't be loaded!\n"; tlog1 << "One of the fonts couldn't be loaded!\n";
@ -106,7 +106,7 @@ void init()
{ {
//read system options //read system options
CLoadFile settings("config" PATHSEPARATOR "sysopts.bin"); CLoadFile settings(DATA_DIR "/config/sysopts.bin");
if(settings.sfile) if(settings.sfile)
{ {
settings >> GDefaultOptions; settings >> GDefaultOptions;
@ -326,7 +326,7 @@ void processCommand(const std::string &message)
boost::filesystem::create_directory("Extracted_txts"); boost::filesystem::create_directory("Extracted_txts");
tlog0<<"Command accepted. Opening .lod file...\t"; tlog0<<"Command accepted. Opening .lod file...\t";
CLodHandler * txth = new CLodHandler; CLodHandler * txth = new CLodHandler;
txth->init(std::string(DATA_DIR "Data" PATHSEPARATOR "H3bitmap.lod"),""); txth->init(std::string(DATA_DIR "/Data/H3bitmap.lod"),"");
tlog0<<"done.\nScanning .lod file\n"; tlog0<<"done.\nScanning .lod file\n";
int curp=0; int curp=0;
std::string pattern = ".TXT", pom; std::string pattern = ".TXT", pom;
@ -335,7 +335,7 @@ void processCommand(const std::string &message)
pom = txth->entries[i].nameStr; pom = txth->entries[i].nameStr;
if(boost::algorithm::find_last(pom,pattern)) if(boost::algorithm::find_last(pom,pattern))
{ {
txth->extractFile(std::string("Extracted_txts" PATHSEPARATOR)+pom,pom); txth->extractFile(std::string(DATA_DIR "/Extracted_txts/")+pom,pom);
} }
if(i%8) continue; if(i%8) continue;
int p2 = ((float)i/(float)txth->entries.size())*(float)100; int p2 = ((float)i/(float)txth->entries.size())*(float)100;
@ -533,4 +533,4 @@ void startGame(StartInfo * options)
client->run(); client->run();
//boost::thread t(boost::bind(&CClient::run,&cl)); //boost::thread t(boost::bind(&CClient::run,&cl));
} }
} }

View File

@ -1563,12 +1563,12 @@ void SystemOptions::setMapScrollingSpeed( int newSpeed )
void SystemOptions::settingsChanged() void SystemOptions::settingsChanged()
{ {
CSaveFile settings("config" PATHSEPARATOR "sysopts.bin"); CSaveFile settings(DATA_DIR "/config/sysopts.bin");
if(settings.sfile) if(settings.sfile)
settings << *this; settings << *this;
else else
tlog1 << "Cannot save settings to config" PATHSEPARATOR "sysopts.bin!\n"; tlog1 << "Cannot save settings to config/sysopts.bin!\n";
} }
void SystemOptions::apply() void SystemOptions::apply()
@ -1593,4 +1593,4 @@ SystemOptions::SystemOptions()
animSpeed = 2; animSpeed = 2;
printMouseShadow = true; printMouseShadow = true;
showQueue = true; showQueue = true;
} }

View File

@ -418,7 +418,7 @@ void SelectionTab::getFiles(std::vector<FileInfo> &out, const std::string &dirna
{ {
tlog1 << "Cannot find " << dirname << " directory!\n"; tlog1 << "Cannot find " << dirname << " directory!\n";
} }
fs::path tie( (fs::initial_path<fs::path>())/dirname ); fs::path tie(dirname);
fs::directory_iterator end_iter; fs::directory_iterator end_iter;
for ( fs::directory_iterator file (tie); file!=end_iter; ++file ) for ( fs::directory_iterator file (tie); file!=end_iter; ++file )
{ {
@ -497,14 +497,14 @@ SelectionTab::SelectionTab(EState Type, const boost::function<void(CMapInfo *)>
switch(type) switch(type)
{ {
case newGame: case newGame:
getFiles(toParse, "Maps", "h3m"); getFiles(toParse, DATA_DIR "/Maps", "h3m");
parseMaps(toParse); parseMaps(toParse);
positions = 18; positions = 18;
break; break;
case loadGame: case loadGame:
case saveGame: case saveGame:
getFiles(toParse, "Games", "vlgm1"); getFiles(toParse, USER_DIR "/Games", "vlgm1");
parseGames(toParse); parseGames(toParse);
if(type == loadGame) if(type == loadGame)
{ {
@ -548,7 +548,7 @@ SelectionTab::SelectionTab(EState Type, const boost::function<void(CMapInfo *)>
switch(type) switch(type)
{ {
case newGame: case newGame:
selectFName("Maps/Arrogance.h3m"); selectFName(DATA_DIR "Maps/Arrogance.h3m");
break; break;
case loadGame: case loadGame:
select(0); select(0);

View File

@ -160,7 +160,7 @@ void Graphics::loadPaletteAndColors()
neutralColorPalette = new SDL_Color[32]; neutralColorPalette = new SDL_Color[32];
std::ifstream ncp; std::ifstream ncp;
ncp.open("config/NEUTRAL.PAL", std::ios::binary); ncp.open(DATA_DIR "/config/NEUTRAL.PAL", std::ios::binary);
for(int i=0; i<32; ++i) for(int i=0; i<32; ++i)
{ {
ncp.read((char*)&neutralColorPalette[i].r,1); ncp.read((char*)&neutralColorPalette[i].r,1);
@ -182,7 +182,7 @@ void Graphics::loadPaletteAndColors()
} }
neutralColor->r = 0x84; neutralColor->g = 0x84; neutralColor->b = 0x84; neutralColor->unused = 0x0;//gray neutralColor->r = 0x84; neutralColor->g = 0x84; neutralColor->b = 0x84; neutralColor->unused = 0x0;//gray
std::ifstream bback("config/mageBg.txt"); std::ifstream bback(DATA_DIR "/config/mageBg.txt");
while(!bback.eof()) while(!bback.eof())
{ {
bback >> pals; bback >> pals;
@ -193,7 +193,7 @@ void Graphics::loadPaletteAndColors()
void Graphics::initializeBattleGraphics() void Graphics::initializeBattleGraphics()
{ {
std::ifstream bback("config/battleBack.txt"); std::ifstream bback(DATA_DIR "/config/battleBack.txt");
battleBacks.resize(26); battleBacks.resize(26);
for(int i=1; i<26; ++i) //25 - number of terrains battle can be fought on for(int i=1; i<26; ++i) //25 - number of terrains battle can be fought on
{ {
@ -207,7 +207,7 @@ void Graphics::initializeBattleGraphics()
} }
//initializing battle hero animation //initializing battle hero animation
std::ifstream bher("config/battleHeroes.txt"); std::ifstream bher(DATA_DIR "/config/battleHeroes.txt");
int numberofh; int numberofh;
bher>>numberofh; bher>>numberofh;
battleHeroes.resize(numberofh); battleHeroes.resize(numberofh);
@ -218,7 +218,7 @@ void Graphics::initializeBattleGraphics()
//initialization of AC->def name mapping //initialization of AC->def name mapping
std::ifstream acd; std::ifstream acd;
acd.open("config/AC_desc.txt", std::ios::binary); acd.open(DATA_DIR "/config/AC_desc.txt", std::ios::binary);
if(!acd.is_open()) if(!acd.is_open())
{ {
tlog1<<"lack of config/AC_desc.txt file!"<<std::endl; tlog1<<"lack of config/AC_desc.txt file!"<<std::endl;
@ -292,7 +292,7 @@ Graphics::Graphics()
tasks += GET_DEF_ESS(abils82,"SECSK82.DEF"); tasks += GET_DEF_ESS(abils82,"SECSK82.DEF");
tasks += GET_DEF_ESS(spellscr,"SPELLSCR.DEF"); tasks += GET_DEF_ESS(spellscr,"SPELLSCR.DEF");
std::ifstream ifs("config/cr_bgs.txt"); std::ifstream ifs(DATA_DIR "/config/cr_bgs.txt");
int id; int id;
std::string name; std::string name;
while(!ifs.eof()) while(!ifs.eof())
@ -322,7 +322,7 @@ Graphics::Graphics()
} }
void Graphics::loadHeroPortraits() void Graphics::loadHeroPortraits()
{ {
std::ifstream of("config/portrety.txt"); std::ifstream of(DATA_DIR "/config/portrety.txt");
int numberOfPortraits; int numberOfPortraits;
of>>numberOfPortraits; of>>numberOfPortraits;
for (int j=0; j<numberOfPortraits; j++) for (int j=0; j<numberOfPortraits; j++)
@ -662,4 +662,4 @@ int Font::getWidth(const char *text ) const
} }
return ret; return ret;
} }

View File

@ -1,7 +1,7 @@
bin_PROGRAMS = vcmiclient bin_PROGRAMS = vcmiclient
vcmiclient_LDADD = $(top_builddir)/lib/libvcmi.la @SDL_LIBS@ @BOOST_SYSTEM_LIB@ @BOOST_FILESYSTEM_LIB@ @BOOST_THREAD_LIB@ @BOOST_IOSTREAMS_LIB@ @FFMPEG_LIBS@ vcmiclient_LDADD = $(top_builddir)/lib/libvcmi.la @SDL_LIBS@ @FFMPEG_LIBS@
vcmiclient_CXXFLAGS = @CXXFLAGS@ @SDL_CXXFLAGS@ @FFMPEG_CXXFLAGS@ vcmiclient_CXXFLAGS = @SDL_CXXFLAGS@ @FFMPEG_CXXFLAGS@
vcmiclient_LDFLAGS = -L$(top_builddir)/lib vcmiclient_LDFLAGS = -L$(top_builddir)/lib
vcmiclient_SOURCES = \ vcmiclient_SOURCES = \
../AI_Base.h \ ../AI_Base.h \

View File

@ -238,8 +238,8 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
vcmiclient_LDADD = $(top_builddir)/lib/libvcmi.la @SDL_LIBS@ @BOOST_SYSTEM_LIB@ @BOOST_FILESYSTEM_LIB@ @BOOST_THREAD_LIB@ @BOOST_IOSTREAMS_LIB@ @FFMPEG_LIBS@ vcmiclient_LDADD = $(top_builddir)/lib/libvcmi.la @SDL_LIBS@ @FFMPEG_LIBS@
vcmiclient_CXXFLAGS = @CXXFLAGS@ @SDL_CXXFLAGS@ @FFMPEG_CXXFLAGS@ vcmiclient_CXXFLAGS = @SDL_CXXFLAGS@ @FFMPEG_CXXFLAGS@
vcmiclient_LDFLAGS = -L$(top_builddir)/lib vcmiclient_LDFLAGS = -L$(top_builddir)/lib
vcmiclient_SOURCES = \ vcmiclient_SOURCES = \
../AI_Base.h \ ../AI_Base.h \

View File

@ -541,7 +541,7 @@ void YourTurn::applyCl( CClient *cl )
void SaveGame::applyCl(CClient *cl) void SaveGame::applyCl(CClient *cl)
{ {
CSaveFile save("Games" PATHSEPARATOR + fname + ".vcgm1"); CSaveFile save("Games/" + fname + ".vcgm1");
save << *cl; save << *cl;
} }
@ -639,4 +639,4 @@ void TradeComponents::applyCl(CClient *cl)
default: default:
tlog2 << "Shop type not supported! \n"; tlog2 << "Shop type not supported! \n";
} }
} }

22
configure vendored
View File

@ -1,6 +1,6 @@
#! /bin/sh #! /bin/sh
# Guess values for system-dependent variables and create Makefiles. # Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.63 for vcmi 0.73b. # Generated by GNU Autoconf 2.63 for vcmi 0.74b.
# #
# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
# 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
@ -743,8 +743,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
# Identity of this package. # Identity of this package.
PACKAGE_NAME='vcmi' PACKAGE_NAME='vcmi'
PACKAGE_TARNAME='vcmi' PACKAGE_TARNAME='vcmi'
PACKAGE_VERSION='0.73b' PACKAGE_VERSION='0.74b'
PACKAGE_STRING='vcmi 0.73b' PACKAGE_STRING='vcmi 0.74b'
PACKAGE_BUGREPORT='' PACKAGE_BUGREPORT=''
# Factoring default headers for most tests. # Factoring default headers for most tests.
@ -1490,7 +1490,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing. # Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh. # This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF cat <<_ACEOF
\`configure' configures vcmi 0.73b to adapt to many kinds of systems. \`configure' configures vcmi 0.74b to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]... Usage: $0 [OPTION]... [VAR=VALUE]...
@ -1560,7 +1560,7 @@ fi
if test -n "$ac_init_help"; then if test -n "$ac_init_help"; then
case $ac_init_help in case $ac_init_help in
short | recursive ) echo "Configuration of vcmi 0.73b:";; short | recursive ) echo "Configuration of vcmi 0.74b:";;
esac esac
cat <<\_ACEOF cat <<\_ACEOF
@ -1687,7 +1687,7 @@ fi
test -n "$ac_init_help" && exit $ac_status test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then if $ac_init_version; then
cat <<\_ACEOF cat <<\_ACEOF
vcmi configure 0.73b vcmi configure 0.74b
generated by GNU Autoconf 2.63 generated by GNU Autoconf 2.63
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
@ -1701,7 +1701,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake. running configure, to aid debugging if configure makes a mistake.
It was created by vcmi $as_me 0.73b, which was It was created by vcmi $as_me 0.74b, which was
generated by GNU Autoconf 2.63. Invocation command line was generated by GNU Autoconf 2.63. Invocation command line was
$ $0 $@ $ $0 $@
@ -2417,7 +2417,7 @@ fi
# Define the identity of the package. # Define the identity of the package.
PACKAGE='vcmi' PACKAGE='vcmi'
VERSION='0.73b' VERSION='0.74b'
cat >>confdefs.h <<_ACEOF cat >>confdefs.h <<_ACEOF
@ -15237,6 +15237,8 @@ if test "x$GXX" = "xyes" -a "x$enable_debug" = "xyes" ; then
CXXFLAGS="-O0 -ggdb -Wall -Wcast-align -Wpointer-arith" CXXFLAGS="-O0 -ggdb -Wall -Wcast-align -Wpointer-arith"
fi fi
CXXFLAGS="$CXXFLAGS -DDATA_DIR=\\\"\$(pkgdatadir)\\\" -DBIN_DIR=\\\"\$(bindir)\\\" -DLIB_DIR=\\\"\$(pkglibdir)\\\""
# Check for Boost libraries # Check for Boost libraries
@ -18598,7 +18600,7 @@ exec 6>&1
# report actual input values of CONFIG_FILES etc. instead of their # report actual input values of CONFIG_FILES etc. instead of their
# values after options handling. # values after options handling.
ac_log=" ac_log="
This file was extended by vcmi $as_me 0.73b, which was This file was extended by vcmi $as_me 0.74b, which was
generated by GNU Autoconf 2.63. Invocation command line was generated by GNU Autoconf 2.63. Invocation command line was
CONFIG_FILES = $CONFIG_FILES CONFIG_FILES = $CONFIG_FILES
@ -18652,7 +18654,7 @@ Report bugs to <bug-autoconf@gnu.org>."
_ACEOF _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_version="\\ ac_cs_version="\\
vcmi config.status 0.73b vcmi config.status 0.74b
configured by $0, generated by GNU Autoconf 2.63, configured by $0, generated by GNU Autoconf 2.63,
with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"

View File

@ -2,7 +2,7 @@
# Process this file with autoconf to produce a configure script. # Process this file with autoconf to produce a configure script.
AC_PREREQ(2.60) AC_PREREQ(2.60)
AC_INIT(vcmi, 0.73b) # Follow NAME_VER in global.h AC_INIT(vcmi, 0.74b) # Follow NAME_VER in global.h
AM_INIT_AUTOMAKE AM_INIT_AUTOMAKE
AC_CONFIG_MACRO_DIR([aclocal/m4]) AC_CONFIG_MACRO_DIR([aclocal/m4])
@ -25,6 +25,8 @@ if test "x$GXX" = "xyes" -a "x$enable_debug" = "xyes" ; then
CXXFLAGS="-O0 -ggdb -Wall -Wcast-align -Wpointer-arith" CXXFLAGS="-O0 -ggdb -Wall -Wcast-align -Wpointer-arith"
fi fi
CXXFLAGS="$CXXFLAGS -DDATA_DIR=\\\"\$(pkgdatadir)\\\" -DBIN_DIR=\\\"\$(bindir)\\\" -DLIB_DIR=\\\"\$(pkglibdir)\\\""
# Check for Boost libraries # Check for Boost libraries
AX_BOOST_BASE([1.36]) AX_BOOST_BASE([1.36])
AX_BOOST_SYSTEM AX_BOOST_SYSTEM

View File

@ -26,14 +26,28 @@ extern std::string NAME_AFFIX; //client / server
#define CONSOLE_LOGGING_LEVEL 5 #define CONSOLE_LOGGING_LEVEL 5
#define FILE_LOGGING_LEVEL 6 #define FILE_LOGGING_LEVEL 6
/*
* DATA_DIR contains the game data (Data/, MP3/, ...).
* USER_DIR is where to save games (Games/).
* BIN_DIR is where the vcmiclient/vcmiserver binaries reside (linux only)
* LIB_DIR is where the AI libraries reside (linux only)
*/
#ifdef _WIN32 #ifdef _WIN32
#define PATHSEPARATOR "\\" #define DATA_DIR "."
#define DATA_DIR "" #define USER_DIR "."
#define SERVER_NAME "VCMI_server.exe" #define SERVER_NAME "VCMI_server.exe"
#else #else
#define PATHSEPARATOR "/" #ifndef DATA_DIR
#define DATA_DIR "" #error DATA_DIR undefined.
#define SERVER_NAME "./vcmiserver" #endif
#ifndef BIN_DIR
#error BIN_DIR undefined.
#endif
#ifndef LIB_DIR
#error LIB_DIR undefined.
#endif
#define USER_DIR DATA_DIR // TODO: should be $HOME/.vcmi
#define SERVER_NAME BIN_DIR "/vcmiserver"
#endif #endif
/* /*

View File

@ -99,7 +99,7 @@ void CBuildingHandler::loadBuildings()
/////done reading BUILDING.TXT***************************** /////done reading BUILDING.TXT*****************************
char line[100]; //bufor char line[100]; //bufor
std::ifstream ofs("config/hall.txt"); std::ifstream ofs(DATA_DIR "/config/hall.txt");
int castles; int castles;
ofs>>castles; ofs>>castles;
for(int i=0;i<castles;i++) for(int i=0;i<castles;i++)

View File

@ -172,7 +172,7 @@ void CCreatureHandler::loadCreatures()
bool useCreAbilsFromZCRTRAIT = true; bool useCreAbilsFromZCRTRAIT = true;
////////////reading cr_abils.txt /////////////////// ////////////reading cr_abils.txt ///////////////////
std::ifstream abils("config" PATHSEPARATOR "cr_abils.txt", std::ios::in | std::ios::binary); //this file is not in lod std::ifstream abils(DATA_DIR "/config/cr_abils.txt", std::ios::in | std::ios::binary); //this file is not in lod
const int MAX_LINE_SIZE = 1000; const int MAX_LINE_SIZE = 1000;
char abilLine[MAX_LINE_SIZE+1]; char abilLine[MAX_LINE_SIZE+1];
for(int i=0; i<5; ++i) //removing 5 comment lines for(int i=0; i<5; ++i) //removing 5 comment lines
@ -402,7 +402,7 @@ void CCreatureHandler::loadCreatures()
tlog5 << "\t\tReading config/crerefnam.txt" << std::endl; tlog5 << "\t\tReading config/crerefnam.txt" << std::endl;
//loading reference names //loading reference names
std::ifstream ifs("config/crerefnam.txt"); std::ifstream ifs(DATA_DIR "/config/crerefnam.txt");
int tempi; int tempi;
std::string temps; std::string temps;
for (;;) for (;;)
@ -419,7 +419,7 @@ void CCreatureHandler::loadCreatures()
levelCreatures.insert(std::pair<int,std::vector<CCreature*> >(i,std::vector<CCreature*>())); levelCreatures.insert(std::pair<int,std::vector<CCreature*> >(i,std::vector<CCreature*>()));
tlog5 << "\t\tReading config/monsters.txt" << std::endl; tlog5 << "\t\tReading config/monsters.txt" << std::endl;
ifs.open("config/monsters.txt"); ifs.open(DATA_DIR "/config/monsters.txt");
{ {
while(!ifs.eof()) while(!ifs.eof())
{ {
@ -436,7 +436,7 @@ void CCreatureHandler::loadCreatures()
ifs.clear(); ifs.clear();
tlog5 << "\t\tReading config/cr_factions.txt" << std::endl; tlog5 << "\t\tReading config/cr_factions.txt" << std::endl;
ifs.open("config/cr_factions.txt"); ifs.open(DATA_DIR "/config/cr_factions.txt");
while(!ifs.eof()) while(!ifs.eof())
{ {
int id, fact; int id, fact;
@ -447,7 +447,7 @@ void CCreatureHandler::loadCreatures()
ifs.clear(); ifs.clear();
tlog5 << "\t\tReading config/cr_upgrade_list.txt" << std::endl; tlog5 << "\t\tReading config/cr_upgrade_list.txt" << std::endl;
ifs.open("config/cr_upgrade_list.txt"); ifs.open(DATA_DIR "/config/cr_upgrade_list.txt");
while(!ifs.eof()) while(!ifs.eof())
{ {
int id, up; int id, up;
@ -459,7 +459,7 @@ void CCreatureHandler::loadCreatures()
//loading unit animation def names //loading unit animation def names
tlog5 << "\t\tReading config/CREDEFS.TXT" << std::endl; tlog5 << "\t\tReading config/CREDEFS.TXT" << std::endl;
std::ifstream inp("config/CREDEFS.TXT", std::ios::in | std::ios::binary); //this file is not in lod std::ifstream inp(DATA_DIR "/config/CREDEFS.TXT", std::ios::in | std::ios::binary); //this file is not in lod
inp.seekg(0,std::ios::end); // na koniec inp.seekg(0,std::ios::end); // na koniec
int andame2 = inp.tellg(); // read length int andame2 = inp.tellg(); // read length
inp.seekg(0,std::ios::beg); // wracamy na poczatek inp.seekg(0,std::ios::beg); // wracamy na poczatek
@ -507,7 +507,7 @@ void CCreatureHandler::loadCreatures()
//loading id to projectile mapping //loading id to projectile mapping
tlog5 << "\t\tReading config/cr_shots.txt" << std::endl; tlog5 << "\t\tReading config/cr_shots.txt" << std::endl;
std::ifstream inp2("config" PATHSEPARATOR "cr_shots.txt", std::ios::in | std::ios::binary); //this file is not in lod std::ifstream inp2(DATA_DIR "/config/cr_shots.txt", std::ios::in | std::ios::binary); //this file is not in lod
char dump [200]; char dump [200];
inp2.getline(dump, 200); inp2.getline(dump, 200);
while(true) while(true)
@ -529,7 +529,7 @@ void CCreatureHandler::loadCreatures()
//reading factionToTurretCreature //reading factionToTurretCreature
tlog5 << "\t\tReading config/cr_to_turret.txt" << std::endl; tlog5 << "\t\tReading config/cr_to_turret.txt" << std::endl;
std::ifstream inp3("config" PATHSEPARATOR "cr_to_turret.txt", std::ios::in | std::ios::binary); //this file is not in lod std::ifstream inp3(DATA_DIR "/config/cr_to_turret.txt", std::ios::in | std::ios::binary); //this file is not in lod
std::string dump2; std::string dump2;
inp3 >> dump2 >> dump2; inp3 >> dump2 >> dump2;
for(int g=0; g<F_NUMBER; ++g) for(int g=0; g<F_NUMBER; ++g)

View File

@ -134,7 +134,7 @@ CHeroHandler::CHeroHandler()
void CHeroHandler::loadWallPositions() void CHeroHandler::loadWallPositions()
{ {
std::ifstream inp; std::ifstream inp;
inp.open("config" PATHSEPARATOR "wall_pos.txt", std::ios_base::in|std::ios_base::binary); inp.open(DATA_DIR "/config/wall_pos.txt", std::ios_base::in|std::ios_base::binary);
if(!inp.is_open()) if(!inp.is_open())
{ {
tlog1<<"missing file: config/wall_pos.txt"<<std::endl; tlog1<<"missing file: config/wall_pos.txt"<<std::endl;
@ -164,7 +164,7 @@ void CHeroHandler::loadWallPositions()
void CHeroHandler::loadObstacles() void CHeroHandler::loadObstacles()
{ {
std::ifstream inp; std::ifstream inp;
inp.open("config" PATHSEPARATOR "obstacles.txt", std::ios_base::in|std::ios_base::binary); inp.open(DATA_DIR "/config/obstacles.txt", std::ios_base::in|std::ios_base::binary);
if(!inp.is_open()) if(!inp.is_open())
{ {
tlog1<<"missing file: config/obstacles.txt"<<std::endl; tlog1<<"missing file: config/obstacles.txt"<<std::endl;
@ -197,7 +197,7 @@ void CHeroHandler::loadObstacles()
void CHeroHandler::loadPuzzleInfo() void CHeroHandler::loadPuzzleInfo()
{ {
std::ifstream inp; std::ifstream inp;
inp.open("config" PATHSEPARATOR "puzzle_map.txt", std::ios_base::in|std::ios_base::binary); inp.open(DATA_DIR "/config/puzzle_map.txt", std::ios_base::in|std::ios_base::binary);
if(!inp.is_open()) if(!inp.is_open())
{ {
tlog1<<"missing file: config/puzzle_map.txt"<<std::endl; tlog1<<"missing file: config/puzzle_map.txt"<<std::endl;
@ -306,7 +306,7 @@ void CHeroHandler::loadHeroes()
//loading initial secondary skills //loading initial secondary skills
{ {
std::ifstream inp; std::ifstream inp;
inp.open("config" PATHSEPARATOR "heroes_sec_skills.txt", std::ios_base::in|std::ios_base::binary); inp.open(DATA_DIR "/config/heroes_sec_skills.txt", std::ios_base::in|std::ios_base::binary);
if(!inp.is_open()) if(!inp.is_open())
{ {
tlog1<<"missing file: config/heroes_sec_skills.txt"<<std::endl; tlog1<<"missing file: config/heroes_sec_skills.txt"<<std::endl;
@ -338,7 +338,7 @@ void CHeroHandler::loadHeroes()
std::ifstream inp; std::ifstream inp;
std::istringstream iss; std::istringstream iss;
dump.clear(); dump.clear();
inp.open("config" PATHSEPARATOR "hero_spells.txt"); inp.open(DATA_DIR "/config/hero_spells.txt");
while(inp) while(inp)
{ {
getline(inp, dump); getline(inp, dump);
@ -517,7 +517,7 @@ ui64 CHeroHandler::reqExp (unsigned int level)
void CHeroHandler::initTerrainCosts() void CHeroHandler::initTerrainCosts()
{ {
std::ifstream inp; std::ifstream inp;
inp.open("config" PATHSEPARATOR "TERCOSTS.TXT", std::ios_base::in|std::ios_base::binary); inp.open(DATA_DIR "/config/TERCOSTS.TXT", std::ios_base::in|std::ios_base::binary);
if(!inp.is_open()) if(!inp.is_open())
{ {
@ -544,7 +544,7 @@ void CHeroHandler::initTerrainCosts()
void CHeroHandler::loadNativeTerrains() void CHeroHandler::loadNativeTerrains()
{ {
std::ifstream inp; std::ifstream inp;
inp.open("config" PATHSEPARATOR "native_terrains.txt", std::ios_base::in|std::ios_base::binary); inp.open(DATA_DIR "/config/native_terrains.txt", std::ios_base::in|std::ios_base::binary);
if(!inp.is_open()) if(!inp.is_open())
{ {
@ -574,4 +574,4 @@ CHero::CHero()
CHero::~CHero() CHero::~CHero()
{ {
} }

View File

@ -55,12 +55,11 @@ unsigned char * CLodHandler::giveFile(std::string defName, int * length)
if (ourEntry->offset<0) //file is in the sprites/ folder; no compression if (ourEntry->offset<0) //file is in the sprites/ folder; no compression
{ {
unsigned char * outp = new unsigned char[ourEntry->realSize]; unsigned char * outp = new unsigned char[ourEntry->realSize];
char name[30];memset(name,0,30); char name[30];
strcat(name, myDir.c_str()); sprintf(name, "%s/%s/%s", DATA_DIR, myDir.c_str(), ourEntry->nameStr.c_str());
strcat(name, PATHSEPARATOR);
strcat(name,ourEntry->nameStr.c_str());
FILE * f = fopen(name,"rb"); FILE * f = fopen(name,"rb");
int result = fread(outp,1,ourEntry->realSize,f); int result = fread(outp,1,ourEntry->realSize,f);
fclose(f);
mutex->unlock(); mutex->unlock();
if(result<0) {tlog1<<"Error in file reading: "<<name<<std::endl;delete[] outp; return NULL;} if(result<0) {tlog1<<"Error in file reading: "<<name<<std::endl;delete[] outp; return NULL;}
else else

View File

@ -88,7 +88,7 @@ void CSoundHandler::init()
if (initialized) if (initialized)
// Load sounds // Load sounds
sndh = new CSndHandler(std::string(DATA_DIR "Data" PATHSEPARATOR "Heroes3.snd")); sndh = new CSndHandler(std::string(DATA_DIR "/Data/Heroes3.snd"));
} }
void CSoundHandler::release() void CSoundHandler::release()
@ -151,7 +151,7 @@ soundBase::soundID CSoundHandler::getSoundID(std::string &fileName)
void CSoundHandler::initCreaturesSounds(std::vector<CCreature> &creatures) void CSoundHandler::initCreaturesSounds(std::vector<CCreature> &creatures)
{ {
tlog5 << "\t\tReading config/cr_sounds.txt" << std::endl; tlog5 << "\t\tReading config/cr_sounds.txt" << std::endl;
std::ifstream ifs("config/cr_sounds.txt"); std::ifstream ifs(DATA_DIR "/config/cr_sounds.txt");
std::string line; std::string line;
while(getline(ifs, line)) while(getline(ifs, line))
@ -225,7 +225,7 @@ void CSoundHandler::initCreaturesSounds(std::vector<CCreature> &creatures)
void CSoundHandler::initSpellsSounds(std::vector<CSpell> &spells) void CSoundHandler::initSpellsSounds(std::vector<CSpell> &spells)
{ {
tlog5 << "\t\tReading config/sp_sounds.txt" << std::endl; tlog5 << "\t\tReading config/sp_sounds.txt" << std::endl;
std::ifstream ifs("config/sp_sounds.txt"); std::ifstream ifs(DATA_DIR "/config/sp_sounds.txt");
std::string line; std::string line;
while(getline(ifs, line)) while(getline(ifs, line))
@ -345,7 +345,7 @@ void CMusicHandler::playMusic(musicBase::musicID musicID, int loop)
if (!initialized) if (!initialized)
return; return;
std::string filename = DATA_DIR "Mp3" PATHSEPARATOR; std::string filename = DATA_DIR "/Mp3/";
filename += musics[musicID]; filename += musics[musicID];
musicMutex.lock(); musicMutex.lock();
@ -442,4 +442,4 @@ int CMusicHandler::PlayMusic(Mix_Music *music, int loops)
tlog1 << "Unable to play music (" << Mix_GetError() << ")" << std::endl; tlog1 << "Unable to play music (" << Mix_GetError() << ")" << std::endl;
return ret; return ret;
} }

View File

@ -132,7 +132,7 @@ void CObjectHandler::loadObjects()
{ {
cregens[i]=-1; cregens[i]=-1;
} }
std::ifstream ifs("config/cregens.txt"); std::ifstream ifs(DATA_DIR "/config/cregens.txt");
while(!ifs.eof()) while(!ifs.eof())
{ {
int dw, cr; int dw, cr;
@ -143,7 +143,7 @@ void CObjectHandler::loadObjects()
} }
std::ifstream istr; std::ifstream istr;
istr.open("config/bankconfig.txt", std::ios_base::binary); istr.open(DATA_DIR "/config/bankconfig.txt", std::ios_base::binary);
if(!istr.is_open()) if(!istr.is_open())
{ {
tlog1 << "No config/bankconfig.txt file !!!\n"; tlog1 << "No config/bankconfig.txt file !!!\n";
@ -4752,4 +4752,4 @@ void CGRefugeeCamp::reset(ui32 val)
VLC->creh->creatures[creatures[creid].second[0]].growth; VLC->creh->creatures[creatures[creid].second[0]].growth;
available[0] = new Component (Component::CREATURE, creid, 0, 0); available[0] = new Component (Component::CREATURE, creid, 0, 0);
*/ */
} }

View File

@ -267,7 +267,7 @@ void CSpellHandler::loadSpells()
} }
//loading of additional spell traits //loading of additional spell traits
std::ifstream ast; std::ifstream ast;
ast.open("config/spell_info.txt", std::ios::binary); ast.open(DATA_DIR "/config/spell_info.txt", std::ios::binary);
if(!ast.is_open()) if(!ast.is_open())
{ {
tlog1<<"lack of config/spell_info.txt file!"<<std::endl; tlog1<<"lack of config/spell_info.txt file!"<<std::endl;

View File

@ -49,7 +49,7 @@ void CTownHandler::loadNames()
for(int x=0;x<towns.size();x++) for(int x=0;x<towns.size();x++)
towns[x].basicCreatures.resize(7); towns[x].basicCreatures.resize(7);
of.open("config/basicCres.txt"); of.open(DATA_DIR "/config/basicCres.txt");
while(!of.eof()) while(!of.eof())
{ {
int tid, lid, cid; //town,level,creature int tid, lid, cid; //town,level,creature
@ -63,7 +63,7 @@ void CTownHandler::loadNames()
for(int x=0;x<towns.size();x++) for(int x=0;x<towns.size();x++)
towns[x].upgradedCreatures.resize(7); towns[x].upgradedCreatures.resize(7);
of.open("config/creatures_upgr.txt"); of.open(DATA_DIR "/config/creatures_upgr.txt");
while(!of.eof()) while(!of.eof())
{ {
int tid, lid, cid; //town,level,creature int tid, lid, cid; //town,level,creature
@ -74,7 +74,7 @@ void CTownHandler::loadNames()
of.close(); of.close();
of.clear(); of.clear();
of.open("config/building_horde.txt"); of.open(DATA_DIR "/config/building_horde.txt");
while(!of.eof()) while(!of.eof())
{ {
int tid, lid, cid; //town,horde serial,creature level int tid, lid, cid; //town,horde serial,creature level
@ -84,7 +84,7 @@ void CTownHandler::loadNames()
of.close(); of.close();
of.clear(); of.clear();
of.open("config/mageLevel.txt"); of.open(DATA_DIR "/config/mageLevel.txt");
of >> si; of >> si;
for(itr=0; itr<si; itr++) for(itr=0; itr<si; itr++)
{ {
@ -93,7 +93,7 @@ void CTownHandler::loadNames()
of.close(); of.close();
of.clear(); of.clear();
of.open("config/requirements.txt"); of.open(DATA_DIR "/config/requirements.txt");
while(!of.eof()) while(!of.eof())
{ {
int ile, town, build, pom; int ile, town, build, pom;
@ -125,7 +125,7 @@ void CTownHandler::loadNames()
void CTownHandler::loadStructures() void CTownHandler::loadStructures()
{ {
//read buildings coords //read buildings coords
std::ifstream of("config/buildings.txt"); std::ifstream of(DATA_DIR "/config/buildings.txt");
while(!of.eof()) while(!of.eof())
{ {
Structure *vinya = new Structure; Structure *vinya = new Structure;
@ -143,7 +143,7 @@ void CTownHandler::loadStructures()
of.clear(); of.clear();
//read building priorities //read building priorities
of.open("config/buildings2.txt"); of.open(DATA_DIR "/config/buildings2.txt");
int format, idt; int format, idt;
std::string s; std::string s;
of >> format >> idt; of >> format >> idt;
@ -176,7 +176,7 @@ void CTownHandler::loadStructures()
of.clear(); of.clear();
//read borders and areas names //read borders and areas names
of.open("config/buildings3.txt"); of.open(DATA_DIR "/config/buildings3.txt");
while(!of.eof()) while(!of.eof())
{ {
std::map<int,std::map<int, Structure*> >::iterator i; std::map<int,std::map<int, Structure*> >::iterator i;
@ -202,7 +202,7 @@ void CTownHandler::loadStructures()
//read groups //read groups
int itr = 0; int itr = 0;
of.open("config/buildings4.txt"); of.open(DATA_DIR "/config/buildings4.txt");
of >> format; of >> format;
if(format!=1) if(format!=1)
{ {
@ -293,4 +293,4 @@ const std::vector<std::string> & CTown::Names() const
return names; return names;
else else
return VLC->generaltexth->townNames[typeID]; return VLC->generaltexth->townNames[typeID];
} }

View File

@ -359,7 +359,7 @@ void CSmackPlayer::redraw( int x, int y, SDL_Surface *dst, bool update )
CVideoPlayer::CVideoPlayer() CVideoPlayer::CVideoPlayer()
{ {
vidh = new CVidHandler(std::string(DATA_DIR "Data" PATHSEPARATOR "VIDEO.VID")); vidh = new CVidHandler(std::string(DATA_DIR "/Data/VIDEO.VID"));
current = NULL; current = NULL;
} }
@ -573,7 +573,7 @@ CVideoPlayer::CVideoPlayer()
// Register our protocol 'lod' so we can directly read from mmaped memory // Register our protocol 'lod' so we can directly read from mmaped memory
av_register_protocol(&lod_protocol); av_register_protocol(&lod_protocol);
vidh = new CVidHandler(std::string(DATA_DIR "Data" PATHSEPARATOR "VIDEO.VID")); vidh = new CVidHandler(std::string(DATA_DIR "/Data/VIDEO.VID"));
} }
// loop = to loop through the video // loop = to loop through the video
@ -600,8 +600,8 @@ bool CVideoPlayer::open(std::string fname, bool loop, bool useOverlay)
} }
} else { } else {
// File is not in a container // File is not in a container
if (av_open_input_file(&format, (DATA_DIR "Data/video/" + fname).c_str(), NULL, 0, NULL)!=0) { if (av_open_input_file(&format, (DATA_DIR "/Data/video/" + fname).c_str(), NULL, 0, NULL)!=0) {
// tlog1 << "Video file not found: " DATA_DIR "Data/video/" + fname << std::endl; // tlog1 << "Video file not found: " DATA_DIR "/Data/video/" + fname << std::endl;
return false; return false;
} }
} }

View File

@ -1302,7 +1302,7 @@ void CGameState::init(StartInfo * si, Mapa * map, int Seed)
/******************RESOURCES****************************************************/ /******************RESOURCES****************************************************/
//TODO: computer player should receive other amount of resource than computer (depending on difficulty) //TODO: computer player should receive other amount of resource than computer (depending on difficulty)
std::vector<int> startres; std::vector<int> startres;
std::ifstream tis("config/startres.txt"); std::ifstream tis(DATA_DIR "/config/startres.txt");
int k; int k;
for (int j=0;j<scenarioOps->difficulty;j++) for (int j=0;j<scenarioOps->difficulty;j++)
{ {
@ -1325,7 +1325,7 @@ void CGameState::init(StartInfo * si, Mapa * map, int Seed)
(*i).second.resources[x] = startres[x]; (*i).second.resources[x] = startres[x];
} }
tis.open("config/resources.txt"); tis.open(DATA_DIR "/config/resources.txt");
tis >> k; tis >> k;
int pom; int pom;
for(int i=0;i<k;i++) for(int i=0;i<k;i++)
@ -3058,4 +3058,4 @@ PlayerState::PlayerState()
: color(-1), currentSelection(0xffffffff) : color(-1), currentSelection(0xffffffff)
{ {
} }

View File

@ -174,7 +174,7 @@ void CConnection::close()
} }
CSaveFile::CSaveFile( const std::string &fname ) CSaveFile::CSaveFile( const std::string &fname )
:sfile(new std::ofstream(fname.c_str(),std::ios::binary)) :sfile(new std::ofstream((USER_DIR "/" + fname).c_str(),std::ios::binary))
{ {
registerTypes(*this); registerTypes(*this);
if(!(*sfile)) if(!(*sfile))
@ -267,4 +267,4 @@ ui16 CTypeList::getTypeID( const std::type_info *type )
return i->second; return i->second;
else else
return 0; return 0;
} }

View File

@ -1,4 +1,5 @@
pkglib_LTLIBRARIES = libvcmi.la pkglib_LTLIBRARIES = libvcmi.la
libvcmi_la_LIBADD = @BOOST_SYSTEM_LIB@ @BOOST_FILESYSTEM_LIB@ @BOOST_THREAD_LIB@ @BOOST_IOSTREAMS_LIB@ -lz -lpthread
libvcmi_la_CXXFLAGS = @SDL_CXXFLAGS@ libvcmi_la_CXXFLAGS = @SDL_CXXFLAGS@
libvcmi_la_SOURCES = \ libvcmi_la_SOURCES = \
../CConsoleHandler.cpp \ ../CConsoleHandler.cpp \

View File

@ -59,7 +59,7 @@ am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
am__installdirs = "$(DESTDIR)$(pkglibdir)" am__installdirs = "$(DESTDIR)$(pkglibdir)"
pkglibLTLIBRARIES_INSTALL = $(INSTALL) pkglibLTLIBRARIES_INSTALL = $(INSTALL)
LTLIBRARIES = $(pkglib_LTLIBRARIES) LTLIBRARIES = $(pkglib_LTLIBRARIES)
libvcmi_la_LIBADD = libvcmi_la_DEPENDENCIES =
am_libvcmi_la_OBJECTS = libvcmi_la-CConsoleHandler.lo \ am_libvcmi_la_OBJECTS = libvcmi_la-CConsoleHandler.lo \
libvcmi_la-CArtHandler.lo libvcmi_la-CBuildingHandler.lo \ libvcmi_la-CArtHandler.lo libvcmi_la-CBuildingHandler.lo \
libvcmi_la-CCreatureHandler.lo \ libvcmi_la-CCreatureHandler.lo \
@ -228,6 +228,7 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
pkglib_LTLIBRARIES = libvcmi.la pkglib_LTLIBRARIES = libvcmi.la
libvcmi_la_LIBADD = @BOOST_SYSTEM_LIB@ @BOOST_FILESYSTEM_LIB@ @BOOST_THREAD_LIB@ @BOOST_IOSTREAMS_LIB@ -lz -lpthread
libvcmi_la_CXXFLAGS = @SDL_CXXFLAGS@ libvcmi_la_CXXFLAGS = @SDL_CXXFLAGS@
libvcmi_la_SOURCES = \ libvcmi_la_SOURCES = \
../CConsoleHandler.cpp \ ../CConsoleHandler.cpp \

View File

@ -239,11 +239,11 @@ LibClasses::LibClasses()
//load .lod archives //load .lod archives
timeHandler pomtime; timeHandler pomtime;
spriteh = new CLodHandler(); spriteh = new CLodHandler();
spriteh->init("Data" PATHSEPARATOR "H3sprite.lod","Sprites"); spriteh->init(DATA_DIR "/Data/H3sprite.lod", DATA_DIR "/Sprites");
bitmaph = new CLodHandler; bitmaph = new CLodHandler;
bitmaph->init("Data" PATHSEPARATOR "H3bitmap.lod","Data"); bitmaph->init(DATA_DIR "/Data/H3bitmap.lod", DATA_DIR "/Data");
tlog0<<"Loading .lod files: "<<pomtime.getDif()<<std::endl; tlog0<<"Loading .lod files: "<<pomtime.getDif()<<std::endl;
//init pointers to handlers //init pointers to handlers
makeNull(); makeNull();
} }

View File

@ -23,7 +23,7 @@ static std::set<si32> convertBuildings(const std::set<si32> h3m, int castleID)
{ {
std::map<int,int> mapa; std::map<int,int> mapa;
std::set<si32> ret; std::set<si32> ret;
std::ifstream b5("config/buildings5.txt"); std::ifstream b5(DATA_DIR "/config/buildings5.txt");
while(!b5.eof()) while(!b5.eof())
{ {
int a, b; int a, b;
@ -2153,4 +2153,4 @@ void CMapInfo::init(const std::string &fname, const unsigned char *map )
int i = 0; int i = 0;
initFromMemory(map, i); initFromMemory(map, i);
countPlayers(); countPlayers();
} }

View File

@ -442,7 +442,7 @@ void CMapHandler::init()
offsetX = (mapW - (2*frameW+1)*32)/2; offsetX = (mapW - (2*frameW+1)*32)/2;
offsetY = (mapH - (2*frameH+1)*32)/2; offsetY = (mapH - (2*frameH+1)*32)/2;
std::ifstream ifs("config/townsDefs.txt"); std::ifstream ifs(DATA_DIR "/config/townsDefs.txt");
int ccc; int ccc;
ifs>>ccc; ifs>>ccc;
for(int i=0;i<ccc*2;i++) for(int i=0;i<ccc*2;i++)

View File

@ -996,7 +996,7 @@ void CGameHandler::setupBattle( BattleInfo * curB, int3 tile, const CCreatureSet
//reading battleStartpos //reading battleStartpos
std::ifstream positions; std::ifstream positions;
positions.open("config" PATHSEPARATOR "battleStartpos.txt", std::ios_base::in|std::ios_base::binary); positions.open(DATA_DIR "/config/battleStartpos.txt", std::ios_base::in|std::ios_base::binary);
if(!positions.is_open()) if(!positions.is_open())
{ {
tlog1<<"Unable to open battleStartpos.txt!"<<std::endl; tlog1<<"Unable to open battleStartpos.txt!"<<std::endl;
@ -1840,14 +1840,14 @@ void CGameHandler::save( const std::string &fname )
{ {
tlog0 << "Serializing game info...\n"; tlog0 << "Serializing game info...\n";
CSaveFile save(std::string("Games") + PATHSEPARATOR + fname + ".vlgm1"); CSaveFile save(std::string("Games/") + fname + ".vlgm1");
char hlp[8] = "VCMISVG"; char hlp[8] = "VCMISVG";
save << hlp << static_cast<CMapHeader&>(*gs->map) << gs->scenarioOps->difficulty << *VLC << gs; save << hlp << static_cast<CMapHeader&>(*gs->map) << gs->scenarioOps->difficulty << *VLC << gs;
} }
{ {
tlog0 << "Serializing server info...\n"; tlog0 << "Serializing server info...\n";
CSaveFile save(std::string("Games") + PATHSEPARATOR + fname + ".vsgm1"); CSaveFile save(std::string("Games/") + fname + ".vsgm1");
save << *this; save << *this;
} }
tlog0 << "Game has been succesfully saved!\n"; tlog0 << "Game has been succesfully saved!\n";
@ -3374,4 +3374,4 @@ void CGameHandler::engageIntoBattle( ui8 player )
pb.player = player; pb.player = player;
pb.reason = PlayerBlocked::UPCOMING_BATTLE; pb.reason = PlayerBlocked::UPCOMING_BATTLE;
sendAndApply(&pb); sendAndApply(&pb);
} }

View File

@ -246,7 +246,7 @@ int main(int argc, char** argv)
} }
tlog0 << "Port " << port << " will be used." << std::endl; tlog0 << "Port " << port << " will be used." << std::endl;
CLodHandler h3bmp; CLodHandler h3bmp;
h3bmp.init("Data" PATHSEPARATOR "H3bitmap.lod","Data"); h3bmp.init(DATA_DIR "/Data/H3bitmap.lod", DATA_DIR "/Data");
initDLL(console,logfile); initDLL(console,logfile);
srand ( (unsigned int)time(NULL) ); srand ( (unsigned int)time(NULL) );
try try

View File

@ -1,6 +1,6 @@
bin_PROGRAMS = vcmiserver bin_PROGRAMS = vcmiserver
vcmiserver_LDADD = $(top_builddir)/lib/libvcmi.la @BOOST_SYSTEM_LIB@ @BOOST_FILESYSTEM_LIB@ @BOOST_THREAD_LIB@ -lz vcmiserver_LDADD = $(top_builddir)/lib/libvcmi.la
vcmiserver_LDFLAGS = -L$(top_builddir)/lib vcmiserver_LDFLAGS = -L$(top_builddir)/lib
vcmiserver_SOURCES = \ vcmiserver_SOURCES = \
CGameHandler.cpp \ CGameHandler.cpp \

View File

@ -213,7 +213,7 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@ top_builddir = @top_builddir@
top_srcdir = @top_srcdir@ top_srcdir = @top_srcdir@
vcmiserver_LDADD = $(top_builddir)/lib/libvcmi.la @BOOST_SYSTEM_LIB@ @BOOST_FILESYSTEM_LIB@ @BOOST_THREAD_LIB@ -lz vcmiserver_LDADD = $(top_builddir)/lib/libvcmi.la
vcmiserver_LDFLAGS = -L$(top_builddir)/lib vcmiserver_LDFLAGS = -L$(top_builddir)/lib
vcmiserver_SOURCES = \ vcmiserver_SOURCES = \
CGameHandler.cpp \ CGameHandler.cpp \