Hello ,
I tried playing this yesterday . Once the first 3DO image appeared the screen went blank for like 4 mins until it finally let me into the game. Then it was really sluggish to play. In the first battle it crashed,
Im not sure IF i am meant to send this to you here as i have never been involved in any open-source projects before so if this is the wrong spot let me know.
hey it’s good to post buginfos about the project - it is valuable to developers.
however you should put it not exactly here. on main menu of vcmi homepage there’s “tracker” button. tracker make menaging bugs easier than on forum. you see there many bugreports of which most are resolved. note you must make register there independently.
but it’s not wrong you posted there. the help&bugs board used to be used like this before they moved to tracker. also when you post about bugs you need post both crashdumps (for client and for server) and both logs (logs are human redable info that is noted in text file and is almost same as the infos in the console)
Hi luke83,
are the issues you describe reproducible? Can you tell us what is the output in the console window at the moment of that 4min freeze (or just post the screenshot)? It may tell us which part of loading took so long. Also, the log files will be helpful.
Translated stacktrace:
> VCMI_lib.dll!BattleInfo::getAccessibility(const CStack * stack=0x00000000, bool addOccupiable=true, std::vector<THex,std::allocator<THex> > * attackable=0x055d6fb8 ...]()) Line 327 + 0x3e bytes C++
VCMI_lib.dll!CBattleInfoCallback::battleGetAvailableHexes(const CStack * stack=0x00000000, bool addOccupiable=true, std::vector<THex,std::allocator<THex> > * attackable=0x055d6fb8 ...]()) Line 226 + 0x15 bytes C++
VCMI_client.exe!CBattleInterface::redrawBackgroundWithHexes(const CStack * activeStack=0x00000000) Line 3545 + 0x1e bytes C++
VCMI_client.exe!CBattleInterface::setPrintCellBorders(bool set=true) Line 1468 C++
VCMI_client.exe!boost::detail::function::void_function_obj_invoker0<boost::_bi::bind_t<void,boost::_mfi::mf1<void,OptionsTab,int>,boost::_bi::list2<boost::_bi::value<OptionsTab *>,boost::_bi::value<unsigned char> > >,void>::invoke(boost::detail::function::function_buffer & function_obj_ptr={...}) Line 154 C++
VCMI_client.exe!CFunctionList<void __cdecl(void)>::operator()() Line 64 + 0x12 bytes C++
VCMI_client.exe!CHighlightableButton::select(bool on=true) Line 291 C++
VCMI_client.exe!CBattleOptionsWindow::CBattleOptionsWindow(const SDL_Rect & position={...}, CBattleInterface * owner=0x055d6fb8) Line 4431 C++
VCMI_client.exe!CBattleInterface::bOptionsf() Line 2303 + 0x2d bytes C++
VCMI_client.exe!CFunctionList<void __cdecl(void)>::operator()() Line 64 + 0x12 bytes C++
VCMI_client.exe!AdventureMapButton::clickLeft(boost::logic::tribool down={...}, bool previousState=true) Line 168 C++
VCMI_client.exe!CGuiHandler::handleEvent(SDL_Event * sEvent=0x00000001) Line 255 C++
VCMI_client.exe!CGuiHandler::handleEvents() Line 155 C++
VCMI_client.exe!CPlayerInterface::update() Line 1350 C++
VCMI_client.exe!CGuiHandler::run() Line 363 C++
VCMI_client.exe!boost::`anonymous namespace'::thread_start_function() + 0x63 bytes C++
msvcr100.dll!_callthreadstartex() Line 314 + 0x6 bytes C
msvcr100.dll!_threadstartex(void * ptd=0x0538f130) Line 292 + 0x5 bytes C
kernel32.dll!7c80b729()
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]
Seems to be reading from NULL+78h at that huge if in BattleInfo::getAccessibility (BattleState.cpp line 324-327). Strange, as I don’t see, what can be NULL there (if stack was, that should’ve crashed much earlier).
it seems to run somewhat slower (but not 4 min only for intro) in virtualbox than native in linux, maybe if you use ubuntu you should compile it and run it native.
Tow,
Got same backtrace - happens if options window opened during move of our creature. Check for NULL in redrawBackgroundWithHexes works fine.
luke83,
If you can’t or don’t want to compile VCMI yourself then try running it in Wine. It should be more-less stable and you won’t get several minutes startup time.
Ivan , Currently, i Cant compile form source as i have never learned how , i only made the switch from windows about 1 year ago and until now i have not needed to try. I wil lstart reading up on HOW to do this.
IssJBrolli , I didn’t actually time it , it just felt like forever :), Maybe it just felt like 4 mins because i really wanted to play it I will try to have more accurate information in the future.
Starting...
Creating console and logfile: 0
Loading settings: 344
VCMI 0.85c (client)
New screen flags: 0
Initializing screen: 609
Initializing video: 594
Initializing minors: 0
Loading default system settings: 234
Initializing sound: 2125
Initializing screen and sound handling: 2359
Loading .lod files: 1453
General text handler: 1218
Hero handler: 391
Artifact handler: 172
Not parsed bonus L#64
.....................................
Not parsed bonus k#71
Creature handler: 969
Town handler: 453
Object handler: 234
Def information handler: 985
Building handler: 93
Spell handler: 172
Initializing VCMI_Lib: 6422
Screen handler: 78
Loading and transforming heroes' flags: 1156
Main graphics: 2532
Initializing game graphics: 0
Message handler: 62
Initialization of VCMI (together): 16219
Assertion failed: Mix_GetMusicType(music) == MUS_MP3_MAD, file e:\game\vcmi\trun
k\client\cmusichandler.cpp, line 495
And than i got:
Debug Error!
Program: E:\game\vcmi\trunk\VCMI_client.exe
R6010
abort() has been called
I tested with VC2010 and msvc-pack.7z from forum (contain libs and include files) on Win XP SP3. Compiled fine:
========== Build: 6 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
That assertion is meant to fail when an old version of SDL_mixer.dll is used.
You have either copied old files or put them in a wrong place (it has to be VCMI working directory).
Go to the folder of VCMI and check SDL_mixer.dll file. It should have size of 233.5kB and date of 2011-08-11.
Try deleting the file and run VCMI. It should not start at all, giving a message about missing library. If VCMI starts, it means there is somewhere another copy of DLL that VCMI is using.
When i delete SDL_mixer.dll, i go message like “This application has failed to start because SDL_mixer.dll was not found. Re-installing the application may fix this problem.”
No, the same error:
Initializing game graphics: 0
Message handler: 0
Initialization of VCMI (together): 1671
Assertion failed: Mix_GetMusicType(music) == MUS_MP3_MAD, file CMusicHandler.cpp
, line 495
But if i comment 493-496 lines and build solution, it starts fine =)
Huh… I really have no further ideas, what’s going on. If even the development build is crashing, it’s not anything with your dev environment. Rather something strange in system, making the DLL behave in a different way… but why would SDL_mixer.dll return objects of one type on one machine and different type on another? Especially when I built it deliberately without SMPEG support, to force it to use MAD.
Of course, you can keep the assertion commented out but it’s like shooting the messenger: a workaround instead of solution. Something inside is going wrong.
Now, having the official build issued with a new music support, we’ll see if more reports like yours show up.
I found the reason of error in VCMI_Client_log.txt:
Initializing game graphics: 0
Message handler: 0
Initialization of VCMI (together): 6047
Loading music file ./Mp3/MAINMENU.MP3
And I did’t copy Mp3 folder at all. You can see the same error, if you remove this folder.
So, can you add some clear error message like “File ./Mp3/MAINMENU.MP3 not found!” ?
My current list of files added to trunk version:
In root:
BINKW32.DLL
SMACKW32.DLL
Create folder "Games" for savegames
Copy folders "Maps" and "Mp3"
Data
-H3ab_ahd.snd
-H3ab_ahd.vid
-H3ab_bmp.lod
-H3bitmap.lod
-H3sprite.lod
-Heroes3.snd
-VIDEO.VID
-*.pxc (for using other resolutions)
Sprites
-*.DEF (for using other resolutions)
*.pxc and *.DEF files taken from development build http://download.vcmi.eu/vcmi_085c.7z ]
Many thanks for the information.
The strangest issues are often caused by the simplest causes. I’ll soon fix VCMI to give reasonable error message and not crash on missing MP3.