About 32bpp



Usually there's a lot of confusion when people hear 32bpp in the context of OpenTTD. Let's try to sort things through and split different tasks into what they are: separate tasks. We'll look at each and try to make suggestions how to get going. The most important one is the graphics side.

While it's not required that 32bpp sprites are rendered it seems somewhat concensus that it is usually done and should be done. Unspoken the aim is to create a complete replacement for all sprites of a baseset in 32bpp. This is a task which involves roughly 10.000 sprites, and only a fraction of this has so far been created. The other aspect is using 32bpp sprites in NewGRFs.

What this project is not

[1] see section on 'OpenTTD side' though

32bpp base set

The aim of this project is to create a full base set consisting of 32bpp sprites. NewGRFs will not be considered in this context, but NewGRF authors of course might want to have a look at the technical aspects as well in order to see how to match sprites from the base set.


Base sets which want to be distributed along with OpenTTD should follow the same license as OpenTTD, thus GPL v2 shall be the license of the 32bpp base set. This means for all contributions and contributors: please provide also your source file (blender, 3dmax). Other contributions cannot be considered


A somewhat uniform appearance of the base set is desired. The graphics in TTD are crisp and clear with a high contrast. Vehicles use a lot of company colour.

Light & Perspective

The sun is up high at around 4:30pm to 5pm. Like with 8bpp sprites, graphics use isometric projection with the camera at a 26 degree downward angle, with up in the game world being north. There exist camera & lighting templates for 3DSMax (by Ben Robbins), Lightwave and Blender (by Aracirion).


Where applicable a few standardized textures for common materials have been suggested:


Scale is not a matter of colours used. The same scales as used by the 8bpp sprites are applicable. This means that no common scale exists between different features and the same limitations apply as for all graphics, e.g. that vehicles must not be longer than half a tile. The scale may even be different for the length and the height of the very same oject (e.g. train waggons are a good example there)

Deliberate lack of national identity

In vanilla TT, the temperate climate is set in the British Isles, the home of game creator Chris Sawyer. The sub-tropical climate is set in Central South America and the sub-arctic climate possibly in Canada, northern Scandinavia or Eurasia. Those locations are identified by distinct properties of landscape, nature and architecture, not by national or cultural symbols such as flags or writing. We, while creating artwork, must also refrain from including such national or cultural fingerprints, while still retaining the look and feel of these locations.

OpenTTD side

Current state

To date OpenTTD does support sprites for all zoom levels and for both 8bpp and 32bpp.

Name Precondition Description
8bpp normal

normal zoom (always required)
8bpp zoom-out
8bpp zoom-in
8bpp normal Sprites for other zoom levels than the default in 8bpp (8x, 4x, 2x zoom-out and 4x, 2x zoom-in ("extra zoom")
32bpp (all versions) 8bpp normal Available in all zoom levels: normal zoom, 8x, 4x, 2x zoom-out and 2x, 4x zoom-in ("extra-zoom")
mask following on 32bpp The mask sprite must have the exact same dimensions as the preceeding 32bpp sprite. In this case the mask sprite provides a colour from the 8bpp palette to be drawn on that place of the 32bpp sprite (index 0 = transparent and the 32bpp sprite will be drawn there) while the 32bpp sprite then only defines alpha channel and intensity.

Sprites can be provided for the normal zoom, for 8x, 4x and 2x zoomed out and 2x and 4x zoomed-in state.

Consequences for graphics

Thus as advise for graphics artists:

provide your models not (only) as pre-rendered sprites, but keep the blender file (or whatever programme you use to generate the sprites).

Providing models gives all the advantages: