![[Mouse's hull]](mousehul.jpg)
This document describes the contents of some data files "Re-Volt" uses. It is intended for those who are interested in creating Re-Volt cars of their own.
Re-Volt is a game by Acclaim (www.acclaim.com). This is no publication from Acclaim, so don't expect them to answer to questions.
If you have questions, corrections or additions, feel free to write an e-mail to ali. Updated versions of this document can be found here. If you are willing to correct my bad english, please do so.
Data structures are given in C++-stylish pseudo-syntax.
The above picture shows a visualization for the hull of Mouse. The faces aren't drawn, but it should be clear where there are. A small program to create such images by converting hulls to POV-Ray source is available here as hul2pov.cpp. (But be warned that it sometimes fails. Some cars, like Panga, contain degenerated edges and faces.)
struct HullFile
{
rvshort chull_count;
ConvexHull chulls[chull_count];
Interior interior;
};
On my installation Candy Pebbles has a zero-length hull.hul. Either I screwed something up, or that car is strange.
Maybe there may be more than one interior part: All cars except for Mouse have one. Mouse has three. WTF? More strange, the second and third interior are same, but different to the first.
struct ConvexHull
{
rvshort vertex_count;
rvshort edge_count;
rvshort face_count;
rvfloat bbox_xlo, bbox_xhi;
rvfloat bbox_ylo, bbox_yhi;
rvfloat bbox_zlo, bbox_zhi;
Vector unknown_vector;
Vector vertices[vertex_count];
Edge edges[edge_count];
Face faces[face_count];
};
This is basically a simplicial complex, although I hardly see a reason why faces must consist of three vertices, arbitrary shaped polygons should be possible.
The purpose of unknown_vector is, well, unknown.
struct Edge
{
rvshort verts[2];
};
struct Face
{
Vector normal;
rvfloat distance;
};
This is just a plane (and the main reason why hull parts are convex)
struct Interior
{
rvshort sphere_count;
Sphere spheres[sphere_count];
};
This seems to be the main thing used for collision detection. It is a set of spheres that fill the car's interior. (Ever knew you are driving a bunch of bubbles around?)
struct Sphere
{
Vector center;
rvfloat radius;
};