hull.hul breakdown

[Mouse's hull]

Introduction / Disclaimer

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.)


Basic Types


hull.hul

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.


Convex Hull

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.


Edge

struct Edge
{
  rvshort  verts[2];
};

Face

struct Face
{
  Vector   normal;
  rvfloat  distance;
};

This is just a plane (and the main reason why hull parts are convex)


Interior

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?)


Sphere

struct Sphere
{
  Vector   center;
  rvfloat  radius;
};

Alexander Kröller; Last modified: Fri Sep 8 16:41:25 CEST 2000