How is made

As any software product, Transport Empire is made as an amalgamate of several technologies. Here we promptly present them in no praticular order.

 

  1. Main Programming Language.

 

The programming language of choice for TE is C++. It was chosen for several reasons. One of them was the fact that it was the only 'cool' language the lead developer ( that would be me – Uz. ) knew name of back in 2003. However the most important features of the language, which matter in the scope of the game are:

  • support – C++ is a 'de facto' standard when it comes to writing games. This means that there are, literally, several dozen of complete frameworks and libraries to choose from. Several IDEs with hundreads extensions are available as well.
  • speed – C++ is a native language, thus if the programmers do not screw up, the result is pretty fast. This means that 'more' game can be fit into the screen at sensible frame rates. 'More' means more vehicles, industries, trees and overall coolness.
  • heterogeneity – C++ can be used as a functional language (ok, somewhat), object oriented, procedural and other gods-know-what paradigms. This gives a lot of flexibility.
  • platform independent - C++ has very good compilers for Windows, Linux, Solaris and pretty much each 'heavyweight' hardware platform.
  • flexible – when needed C++ can be easily glued into other languages, such as shading languages, GPGPU languages, scripting languages etc.

While the language has its pitfalls, it's strengths seem to be convincing.

The version of language used in the game is C++11, as support for new features comes available.

  1. Cg / HLSL


To produce all that eye popping ( ahem ) eye candy TE uses Cg/HLSL. Cg was chosen because it is supported both on Windows and Linux platforms. Since TE is, at least, planned as multiplatform, then it is important to use as portable solution as possible.

 

  1. Scripting languages


Scripting languages offer a distinctive feature of not needing to recompile the software to test new changes. While for the core business logic of the game scripting languages are not considered due to performance constraints. After all TE wants to animate 1000 trains at the same time with 60 frames per second. However some auxiliary functions, such as content management, can be performed with scripts. The language being deemed the best is LUA, but at the current moment TE does not use them.

  1. Ogre / OIS / MyGui


Well. We want to make a game, not a game engine, thus it seemed sensible to find a package which nicely encapsulates all the auxiliary functionality such as rendering window management and such...

The library of choice, made on on the principle of  'its there, it works, its multiplatform, lets use it' was Ogre rendering engine with its OIS input system and MyGui gui library.

  1. Boost


Boost is a collection of libraries which make creation of boilerplate code a a lot easier. Boost is portable, easy to learn and mind bending to understand when one looks at the code. Boost is used in several places in the TE code base, so getting familiar with it is advised.

 

  1. Configuration

 

Games, in principle, are huge collection of numbers brought to life with the game's engine. While it is possible to hardcode all the necessary data, it is "less then optimal" solution.

Well. It is actually downright retarded.

Transport Empire gets its numerical content ( vehicle statistics and alike ) from a simple, external spreadsheets formatted in the CSV format ( actually, TSV, but I digress ).

This approach was chosen as a tradeoff between flexibility of script language and speed of C++. Files are parsed once and from there content they define can be freely used. With some work the game just needs to rebuilt its content tables, no restart needed.