Patches for linux

Beklager. It’s fixed now. Do an update.

den er god hehe ill try it again when i reboot into suse again, still testing vcmi in win7

still no luck im afraid

make[1]: *** No rule to make target ../CGameState.cpp', needed byCGameState.lo’. Stop.
make[1]: Leaving directory `/home/ron-emir/vcmi/lib’
make: *** [all-recursive] Error 1

You’re out of luck :stuck_out_tongue: Sources have been reorganized this morning.
It’s fixed now.

hehe well, so far i’ve gotten my h3 fix from wine ill test it out later then

btw ubuntux, you arent from norway by any chance?

Nei, men Google Translate er min venn.

I removed all boost packages and installed it from src.rpm and with that configure option pointing it to /usr/lib64 I managed to build it. Followed instructions in README.linux and I have it up and running, at first clicking here and there it segfaulted :stuck_out_tongue: Polish font is broken, is there and easy way change language to english?

In folder Fonts, you can replace this files, rename etc. but new font must be TTF.

mediafire.com/?3r35lz216nk Here is a little multiplayermod I made long ago (based on WoG) … It should change all txt in polish version to english … Though this mod is not made to work with wog … and doesn’t have most of wog options… I don’t know if it will work with VCMI. BTW any chances to see some debs ? :slight_smile: even precompiled with checkinstall ? or maybe a static linked 7zipped vcmi build ? (yeah I know it’s not *nix like but some other games like GLEST provide this kind of builds that install in /home folder)

I’ll try to stick with Polish fonts, whenever I try to move on any map I get a horse walking sound loop and in console:

sh: line 1: 20044 Naruszenie ochrony pamięci   ./vcmiserver 3030 > server_log.txt
Connection reset by peer
Lost connection to server, ending listening thread!
Cannot get object with id -1
Broken pipe

The server crashed. Could you post VCMI_Server_log.txt and server_log.txt ?

You can put english language files into /data subfolder.

VCMI_Server_log:

Port 3030 will be used.
Loading .lod files: 40000
		Reading OBJNAMES 
		Reading ADVEVENT 
		Reading XTRAINFO 
		Reading MINENAME 
		Reading MINEEVNT 
		Reading RESTYPES 
		Reading RANDSIGN 
		Reading ZCRGN1 
	General text handler: 30000
	Hero handler: 0
	Artifact handler: 10000
		Reading ZCRTRAIT.TXT
		Reading config/crerefnam.txt
		Reading config/monsters.txt
		Reading config/cr_factions.txt
		Reading config/cr_upgrade_list.txt
		Reading config/CREDEFS.TXT
We have 197 creatures
		Reading CRANIM.TXT.txt
		Reading config/cr_shots.txt
	Creature handler: 20000
	Town handler: 0
		Reading cregens 
		Done loading objects!
	Object handler: 0
	Def information handler: 20000
	Building handler: 10000
	Spell handler: 10000
CVCMIServer created!
Listening for connections at port 3030
We've accepted someone... 
Established connection with VCMI 0.71c (client)
Got connection!
Opening map file: Maps/Dwarven Gold.h3m	 done.
	Our map checksum: 3865464600
	Reading header: 0
	Reading rumors: 0
	Reading predefined heroes: 0
	Reading terrain: 0
	Reading defs info: 0
	Reading objects: 0
	Reading events: 0
	Calculating blocked/visitable tiles: 10000
Map loaded!
Gamestate created!
Gamestate initialized!
Turn 1
Sending to all clients a package of type 18SetAvailableHeroes
Sending to all clients a package of type 18SetAvailableHeroes
Sending to all clients a package of type 18SetAvailableHeroes
Sending to all clients a package of type 7NewTurn
Info about turn 1has been sent!
Sending to all clients a package of type 10InfoWindow
Sending to all clients a package of type 10InfoWindow
Sending to all clients a package of type 10InfoWindow
Warning: Cannot find info for player 3
Warning: Cannot find info for player 4
Warning: Cannot find info for player 5
Warning: Cannot find info for player 6
Warning: Cannot find info for player 7
Sending to all clients a package of type 17SetObjectProperty
Sending to all clients a package of type 12SetHoverName
Sending to all clients a package of type 17SetObjectProperty
Sending to all clients a package of type 12SetHoverName
Received client message of type 8SaveGame
Ordering clients to serialize...
Serializing game info...

Server_log:

e[1;40;32mPort e[0me[1;40;32m3030e[0me[1;40;32m will be used.e[0m
e[1;40;32mLoading .lod files: e[0me[1;40;32m40000e[0m
e[1;40;32m	General text handler: e[0me[1;40;32m30000e[0m
e[1;40;32m	Hero handler: e[0me[1;40;32m0e[0m
e[1;40;32m	Artifact handler: e[0me[1;40;32m10000e[0m
e[1;40;32m	Creature handler: e[0me[1;40;32m20000e[0m
e[1;40;32m	Town handler: e[0me[1;40;32m0e[0m
e[1;40;32m	Object handler: e[0me[1;40;32m0e[0m
e[1;40;32m	Def information handler: e[0me[1;40;32m20000e[0m
e[1;40;32m	Building handler: e[0me[1;40;32m10000e[0m
e[1;40;32m	Spell handler: e[0me[1;40;32m10000e[0m
e[1;40;39mCVCMIServer created!e[0m
e[1;40;32mListening for connections at port e[0me[1;40;32m3030e[0m
e[1;40;32mWe've accepted someone... e[0m
e[1;40;32mEstablished connection with e[0me[1;40;32mVCMI 0.71c (client)e[0m
e[1;40;32mGot connection!e[0m
e[1;40;32mOpening map file: e[0me[1;40;32mMaps/Dwarven Gold.h3me[0me[1;40;32m	 e[0me[1;40;32mdone.e[0m
e[1;40;32m	Our map checksum: e[0me[1;40;32m3865464600e[0m
e[1;40;32m	Reading header: e[0me[1;40;32m0e[0m
e[1;40;32m	Reading rumors: e[0me[1;40;32m0e[0m
e[1;40;32m	Reading predefined heroes: e[0me[1;40;32m0e[0m
e[1;40;32m	Reading terrain: e[0me[1;40;32m0e[0m
e[1;40;32m	Reading defs info: e[0me[1;40;32m0e[0m
e[1;40;32m	Reading objects: e[0me[1;40;32m0e[0m
e[1;40;32m	Reading events: e[0me[1;40;32m0e[0m
e[1;40;32m	Calculating blocked/visitable tiles: e[0me[1;40;32m10000e[0m
e[1;40;32mMap loaded!e[0m
e[1;40;32mGamestate created!e[0m
e[1;40;32mGamestate initialized!e[0m
e[1;40;35mWarning: Cannot find info for player e[0me[1;40;35m3e[0m
e[1;40;35mWarning: Cannot find info for player e[0me[1;40;35m4e[0m
e[1;40;35mWarning: Cannot find info for player e[0me[1;40;35m5e[0m
e[1;40;35mWarning: Cannot find info for player e[0me[1;40;35m6e[0m
e[1;40;35mWarning: Cannot find info for player e[0me[1;40;35m7e[0m
e[1;40;32mOrdering clients to serialize...
e[0me[1;40;32mSerializing game info...

Could be related to the save game bug. The server is trying to save unexistant players.

In server/CGameHandler.cpp, find the function “void CGameHandler::save” and add a return at the begining:

void CGameHandler::save( const std::string &fname )
{
    return;

    {
        tlog0 << "Ordering clients to serialize...\n";
        SaveGame sg(fname);

Yes, adding a ‘return;’ in “void CGameHandler::save” fixes my issue. Now I get a message

System message: Saving...
System message: Game has been succesfully saved!

instead of “Naruszenie ochrony pamięci” (segmentation fault).

Thanks for all your help :slight_smile:

Why do you think so? Warnings present in the log files (“Cannot find info for player”) are normal (I have them too) and not related to the saving itself (they appear before game is serialized).

Actually it not fixes the issue, it only disables saving and tells us that there is a bug.
Could you run VCMI (without that “return” workaround) in the debugger and retrieve backtrace for vcmi_server at the crash moment? It should tell us more about what is happening.

English files for H3 are available here:
download.antypika.aplus.pl/dataEN.7z

Well , I should have said it was just a workaround.

Here’s a back trace:

#0  0x4157aca9 in std::string::length () from /usr/lib/libstdc++.so.6
#1  0x08120048 in SaveSerializable<CSaveFile, std::string>::invoke (s=@0xa519815c, data=@0x8f1f500) at ../lib/Connection.h:118
#2  0x0812006c in COSer<CSaveFile>::save<std::string> (this=0xa519815c, data=@0x8f1f500) at ../lib/Connection.h:343
#3  0x08120090 in COSer<CSaveFile>::operator<< <std::string> (this=0xa519815c, t=@0x8f1f500) at ../lib/Connection.h:274
#4  0x081200c0 in COSer<CSaveFile>::operator&<std::string> (this=0xa519815c, t=@0x8f1f500) at ../lib/Connection.h:281
#5  0x0812265d in PlayerInfo::serialize<COSer<CSaveFile> > (this=0x8f1f4e0, h=@0xa519815c, version=704) at ../lib/map.h:127
#6  0x081226da in COSer<CSaveFile>::saveSerializable<PlayerInfo> (this=0xa519815c, data=@0x8f1f4e0) at ../lib/Connection.h:348
#7  0x081226f4 in SaveSerializable<CSaveFile, PlayerInfo>::invoke (s=@0xa519815c, data=@0x8f1f4e0) at ../lib/Connection.h:118
#8  0x08122718 in COSer<CSaveFile>::save<PlayerInfo> (this=0xa519815c, data=@0x8f1f4e0) at ../lib/Connection.h:343
#9  0x0812273c in COSer<CSaveFile>::operator<< <PlayerInfo> (this=0xa519815c, t=@0x8f1f4e0) at ../lib/Connection.h:274
#10 0x0812279a in COSer<CSaveFile>::saveSerializable<PlayerInfo> (this=0xa519815c, data=@0x8f1f1ac) at ../lib/Connection.h:356
#11 0x081227c0 in SaveSerializable<CSaveFile, std::vector<PlayerInfo, std::allocator<PlayerInfo> > >::invoke (s=@0xa519815c, 
    data=@0x8f1f1ac) at ../lib/Connection.h:118
#12 0x081227e4 in COSer<CSaveFile>::save<std::vector<PlayerInfo, std::allocator<PlayerInfo> > > (this=0xa519815c, data=@0x8f1f1ac)
    at ../lib/Connection.h:343
#13 0x08122808 in COSer<CSaveFile>::operator<< <std::vector<PlayerInfo, std::allocator<PlayerInfo> > > (this=0xa519815c, 
    t=@0x8f1f1ac) at ../lib/Connection.h:274
#14 0x08122838 in COSer<CSaveFile>::operator&<std::vector<PlayerInfo, std::allocator<PlayerInfo> > > (this=0xa519815c, t=@0x8f1f1ac)
    at ../lib/Connection.h:281
#15 0x08122a71 in CMapHeader::serialize<COSer<CSaveFile> > (this=0x8f1f150, h=@0xa519815c, Version=704) at ../lib/map.h:229
#16 0x08122acc in COSer<CSaveFile>::saveSerializable<CMapHeader> (this=0xa519815c, data=@0x8f1f150) at ../lib/Connection.h:348
#17 0x08122ae6 in SaveSerializable<CSaveFile, CMapHeader>::invoke (s=@0xa519815c, data=@0x8f1f150) at ../lib/Connection.h:118
#18 0x08122b0a in COSer<CSaveFile>::save<CMapHeader> (this=0xa519815c, data=@0x8f1f150) at ../lib/Connection.h:343
#19 0x08122b2e in COSer<CSaveFile>::operator<< <CMapHeader> (this=0xa519815c, t=@0x8f1f150) at ../lib/Connection.h:274
#20 0x080d8f75 in CGameHandler::save (this=0xbffa15ac, fname=@0xa48005cc) at CGameHandler.cpp:1475
#21 0x0816a1eb in SaveGame::applyGh (this=0xa48005b8, gh=0xbffa15ac) at NetPacksServer.cpp:29
#22 0x0812efdf in CApplyOnGH<SaveGame>::applyOnGH (this=0x8f1eec0, gh=0xbffa15ac, c=0x8f167f8, pack=0xa48005b8)
    at CGameHandler.cpp:65
#23 0x080e25a5 in CGameHandler::handleConnection (this=0xbffa15ac, players=
          {_M_t = {_M_impl = {<std::allocator<std::_Rb_tree_node<int> >> = {<__gnu_cxx::new_allocator<std::_Rb_tree_node<int> >> = {<No data fields>}, <No data fields>}, _M_key_compare = {<std::binary_function<int, int, bool>> = {<No data fields>}, <No data fields>}, _M_header = {_M_color = 150038520, _M_parent = 0x8107bf7, _M_left = 0xa4800468, _M_right = 0x0}, _M_node_count = 2759853304}}}, 
    c=@0x8f167f8) at CGameHandler.cpp:504
#24 0x08107fb8 in boost::_mfi::mf2<void, CGameHandler, std::set<int, std::less<int>, std::allocator<int> >, CConnection&>::operator() (this=0x9237ed4, p=0xbffa15ac, a1=
          {_M_t = {_M_impl = {<std::allocator<std::_Rb_tree_node<int> >> = {<__gnu_cxx::new_allocator<std::_Rb_tree_node<int> >> = {<No data fields>}, <No data fields>}, _M_key_compare = {<std::binary_function<int, int, bool>> = {<No data fields>}, <No data fields>}, _M_header = {_M_color = 150038520, _M_parent = 0x1, _M_left = 0xb7c0614c, _M_right = 0xa5198318}, _M_node_count = 1095618548}}}, 
    a2=@0x8f167f8) at /usr/include/boost/bind/mem_fn_template.hpp:274
#25 0x08108071 in boost::_bi::list3<boost::_bi::value<CGameHandler*>, boost::_bi::value<std::set<int, std::less<int>, std::allocator<int> > >, boost::reference_wrapper<CConnection> >::operator()<boost::_mfi::mf2<void, CGameHandler, std::set<int, std::less<int>, std::allocator<int> >, CConnection&>, boost::_bi::list0> (this=0x9237edc, f=@0x9237ed4, a=@0xa5198357)
    at /usr/include/boost/bind.hpp:371
#26 0x081080e3 in boost::_bi::bind_t<void, boost::_mfi::mf2<void, CGameHandler, std::set<int, std::less<int>, std::allocator<int> >, CConnection&>, boost::_bi::list3<boost::_bi::value<CGameHandler*>, boost::_bi::value<std::set<int, std::less<int>, std::allocator<int> > >, boost::reference_wrapper<CConnection> > >::operator() (this=0x9237ed4) at /usr/include/boost/bind/bind_template.hpp:20
#27 0x081080fc in boost::detail::thread_data<boost::_bi::bind_t<void, boost::_mfi::mf2<void, CGameHandler, std::set<int, std::less<in---Type <return> to continue, or q <return> to quit---
t>, std::allocator<int> >, CConnection&>, boost::_bi::list3<boost::_bi::value<CGameHandler*>, boost::_bi::value<std::set<int, std::less<int>, std::allocator<int> > >, boost::reference_wrapper<CConnection> > > >::run (this=0x9237e18)
    at /usr/include/boost/thread/detail/thread.hpp:56
#28 0xb7bff848 in thread_proxy () from /usr/lib/libboost_thread-mt.so.1.37.0
#29 0x41ad64ff in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
#30 0x4146249e in clone () from /lib/tls/i686/cmov/libc.so.6

This bug only happens in map with less than 8 players. When I tracked the bug I though that it was trying to save a player that’s not in the game (and thus is full of unitialized values).

maybe before loadgame/loadmap just initialize players ?

The save game crash is fixed now.