Hello everyone, a couple of people sent me the links to this article yesterday, thank you for that – one Mr.Tiemo Jung made an analysis of the World of Tanks client on his website and it’s quite interesting. I have contacted him on EU forums and he gave me a permission to repost his analysis here, so here goes. The text is his, it is written from his perspective, I did not edit it apart from formatting it a bit (I did cut down the intro description a bit though). Enjoy. Introduction Finally i’ve got some time to work on a Project that i’ve wanted to do for quite some time, analyze the World of Tanks client, to find out how it ticks. System Configuration: Intel core i5 2400 (4 cores 3.1GHz) 16 GB Ram Nvidia GeForce 660 Ti w/ 3 GB Ram Samsung SSD 840 Series (240 GB): OS and Temp Western Digital WD20EARX (2 TB): Game Windows 8.1 Pro And please excuse my not so perfect english, its not my native language, thanks. Part 1 – Processes The log that is used as base of this analysis can be downloaded here. If you want to see the log for your self, just get Process Explorer and open the WotLog.PML contained in the wotlog.7z with it. This analysis is structured in multiple section, for each game state. First initialisation, this is from starting wot.exe until the login screen is displayed. Next is the login, this is from the display of the login screen until the the engine loads the hangar. Next parts are the hangar, match loading, the match it self and the hangar afterwards and the shutdown. There are also some sections covering some special behavior that are present during multiple phases, like shader loading, config storage and bugs. Initialization The init is straightforward, but has some small surprises to offer. The list of 3rd party libraries and interfaces that gets loaded: The devs didn’t bother to keep the dev code separated from the release code, on launch the first non-os dll is ‘BugTrapU.dll’ its a debug library from IntelleSoft. It is shipped with the CT release but not with the live release. Engine tries to load a steam_api.dll, this dll provides the connection to the steam overlay. So a steam support is incoming? Or was it considered but the code was not removed? If you put a copy of steam_api.dll into the root folder of wot, you get a error message, that wot was unable to find steam and you should try to run it through steam. Fmod, which handles audio processing, it creates 3 threads, inspects the games root path for possible extensions and then scans the /audio sub path for possible audio data. It also looks into the audio files, to probably build a dictionary of audio data. umbra OB 3 gets loaded, umbra itself creates 2 worker threads. As far as i know, wot does not use umbra 3 yet, so this is again an indicator for bad programming practices, you do not ship software with unfinished code and stuff that eats resources and have no benefit, especially if you target low end systems. ‘Uberwoorf’ interface, force feedback for your back and arse, i just had to lol hard when i found out about that :) lightFX, probably part of Alienware computers, i don’t have one, so i can’t test what it does. Logitech API get loaded, i have a Logitech mouse (G700) so the module gets loaded, but it does nothing, because the target of the interface are the keyboards with a lcd display attached to it. Nevertheless the Logitech driver create 2 threads, they do nothing (bad design from Logitech). vivox, used by some well known publishers and developers to provide ingame VOIP. Strange behaviors: /res, /res_bw and /res_mods/[client version] gets scanned and enumerated more than one time, which indicates that they do not record their findings for later use. .pkg files get scanned multiple times to. user configuration gets loaded multiple times and in probably at least 2 different ways, which indicates code duplication with possible bugs. Other observations: large amount of compiled python files, indicate that vast portions of the engine are written in python. flash is used for ui logic / display. Login Login is short, if you enable auto login, it loads the login key/handle and transmits the data, if everything is okay, the hangar gets loaded. Hangar On first enter of the hangar, the voip system starts multiple threads. The engine loads more python files, it also loads a bunch of def files about the tanks. The strange thing here is, the net traffic of the client to the server is somewhat clustered, probably the net system has some sync problems and delays the keep alive messages that are send to the server. The server sends multiple large packets back, probably the user state in some incremental form (first the current tank with some basic data, later other stuff) but this is pure speculation. In the log you can see that the game is streaming the music (and the ambient sound of the hangar), but i set the music volume to zero, they should stop streaming music if the volume is set to zero. You can also see, that the engine tries to load the user config from huge amount of combinations of game path + path to user config, and they are all malformed, this indicates that there is a bug in their file system. the final stuff that gets loaded is the texture and model of the selected tank. After that the hangar is ready for user interaction. What you can not see at this log, model and texture data of each tank gets streamed as they are needed (user selects a other tank -> wheel appears). Match Loading Only one special thing happens here, a icons.dat get written, probably downloaded from a wargaming server. Other than that, normal graphics and ui data loading and the bugy loading of the user preferences. Match While the match is running, audio data gets streamed and some data gets loaded especially as spectator later when i switched to other tanks. Some audio banks are opened and not kept open while the game is running, this results sometimes into frame drops. The replay is also written into temp.wotreplay. music gest streamed, even if its volume is zero. For the section where the game plays no music, there is a no_music bank used, so the play constantly music. Post Match Hangar temp.wotreplay gets renamed to the proper file name, and a new temp.wotreplay gets created. Some cache data files gets updated. Continue reading →

More...