RenderWare

From Grand Theft Wiki
Jump to navigation Jump to search
The RenderWare Logo

RenderWare (RW for short) is the graphics engine by Criterion Software that was licensed and used by Rockstar Games for their titles Manhunt, Bully, Grand Theft Auto III, Grand Theft Auto: Vice City and Grand Theft Auto: San Andreas, just as for various other games. GTA III's portable successors Grand Theft Auto: Liberty City Stories and Grand Theft Auto: Vice City Stories use the Rockstar Leeds engine that is almost a clone of the original RenderWare engine, which was already influenced by Rockstar Game's custom engine called RAGE, which was used in the later titles Grand Theft Auto IV and Grand Theft Auto V.

Description

RenderWare is a 3D API (Application Programming Interface) and graphics rendering engine used in computer and console games such as Grand Theft Auto III and Grand Theft Auto: San Andreas,and and in MUVRS's such as Active Worlds, and some VRML (Virtual Reality Markup Language) browsers. RenderWare is developed by Criterion Software Ltd. (which used to be a wholly-owned subsidiary of Canon but is now owned by Electronic Arts).

Prior to versions 2.x, an external programming or scripting language had to be used to take advantage of RenderWare. RenderWare 2.x, on the other hand, has its own internal scripting language: RWX (RenderWare script).

RWX support was dropped from RenderWare 3.x, instead focusing on a binary model file format. RWX scripts are incompatible with RW3.x.

With RenderWare 4.x, Criterion is slated to drop support for RW3.x's formats, thereby making version 4.x incompatible with scripts/files from all previous versions.

RenderWare is available for use in Windows based PC applications, and many video game consoles such as PlayStation 2, GameCube, Xbox and PlayStation Portable.

Versioning

Each GTA game was linked against a certain version of the RenderWare engine. The following table gives an overview over the different versions that apply to GTA.

GTA III GTA Vice City GTA San Andreas
PS2 3.1.0.0 3.3.0.2 3.6.0.3
PC 3.3.0.2 3.4.0.3 3.6.0.3
Xbox 3.5.0.0 3.5.0.0 3.6.0.3
Android 3.4.0.5 3.4.0.5 3.6.0.3

On binary level, versions are used in different cases, most notably the library identifier stamp found in RenderWare's binary stream files. The stamp contains the version and build number of the RW library that wrote the file. It is a number that appears in the form 0xVJNBB, where V (3 bits) is the Renderware version, J (4 bits) is the major revision, N (4 bits) is the minor revision and B (6 bits) is the binary revision. Version 3.6.0.3 for instance would be encoded as 0x36003. The library build is 0xFFFF in all versions used by GTA.

To make the library ID stamp, 0x30000 is subtracted from the version first and then packed as follows (where D is the 16 bit build number):

VVJJ JJNN NNBB BBBB DDDD DDDD DDDD DDDD

Version 0x36003 build 0xFFFF for instance is encoded as 0x1803FFFF.

Version 3.1.0.0 and before had no binary revision and build number and the library ID stamp was just 0x00000VJN (no 0x30000 subtracted). Version 3.1.0.0 for instance would be encoded as 0x00000310. Version 3.1.0.1 (used in some GTA III files, build FFFF) on the other hand is encoded as 0x0401FFFF. To find out what version a file has when reading, RW checks the upper 16 bits and assumes the old format when they're zero.

These C example functions pack and unpack library ID stamps:

RwUInt32
libraryIDPack(RwUInt32 version, RwUInt32 build)
{
	if(version <= 0x31000)
		return version>>8;
	return (version-0x30000 & 0x3FF00) << 14 | (version & 0x3F) << 16 |
	       (build & 0xFFFF);
}

RwUInt32
libraryIDUnpackVersion(RwUInt32 libid)
{
	if(libid & 0xFFFF0000)
		return (libid>>14 & 0x3FF00) + 0x30000 |
		       (libid>>16 & 0x3F);
	return libid<<8;
}

RwUInt32
libraryIDUnpackBuild(RwUInt32 libid)
{
	if(libid & 0xFFFF0000)
		return libid & 0xFFFF;
	return 0;
}

Binary streams

The most notable part of the engine when used in a modding context are the binary stream files, which contain either the games geometry (DFF) or its textures (TXD).

External links