Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Glide splash tables

The GOG Glide overlay contains authored geometry, animation transforms, and textures for the animated 3dfx splash.

rgpre::import::glide_splash::parse_glide_splash extracts data from the player’s DOSBOX/glide2x_emu.ovl. It does not execute the overlay. This library API supports the GOG LE table layout; other overlay versions and the Windows 3DfxSpl2.dll animation resource use different layouts. The latter is supported by parse_windows_glide_splash.

Overall Structure

[DOS header and LE executable header]
[LE object table and page map]
[Initialized writable object]
  [Mesh pointers and vertex counts]
  [Face pointers and triangle counts]
  [Authored frame count and transforms]
  [Vertex and face arrays]
  [Texture descriptors, color tables, and mip chains]

The extractor reconstructs writable LE objects from their page maps. Table pointers are relative to their data object. It identifies the supported layout by its mesh counts and validates all pointer ranges, finite values, triangle indices, material IDs, and edge flags. It rejects ambiguous matches.

Mesh tables

There are three meshes, in shield, logo, outer-shield order:

MeshVerticesTriangles
Shield68100
Logo16941606
Outer shield3432

The table contains three vertex pointers, three vertex counts, three face pointers, three face counts, then the frame count. All scalar values are little-endian 32-bit words. There are 75 authored frames; each contains three column-major 4×4 float matrices in mesh order.

A vertex occupies 32 bytes:

OffsetSizeTypeNameDescription
012[f32; 3]positionObject-space position
1212[f32; 3]normalObject-space normal
248[f32; 2]texture coordinatesGlide S/T coordinates

A face occupies 20 bytes:

OffsetSizeTypeNameDescription
012[u32; 3]verticesIndices into this mesh’s vertex array
124u32materialMaterial ID, 0 through 4
164u32edgesThree bits selecting antialiased triangle edges

Textures

The three texture blocks begin with width, height, small LOD, large LOD, aspect ratio, and Glide texture format, as six u32 values. A 1028-byte color-table union follows, then the mip-chain byte length and pixel data. The largest mip is first. The current API returns that mip as RGBA, without embedding assets in the library.

TextureDimensionsGlide formatInterpretation
Logo color64×641YIQ8 with an NCC color table
Highlight32×323Intensity8
Shadow64×323Intensity8

Intensity8 produces (intensity, intensity, intensity, 255). It is opaque grayscale, not an alpha mask.

YIQ8 uses the first 64 bytes of the color-table union: 16 unsigned luma bytes, then four signed three-channel I vectors and four signed three-channel Q vectors, each component stored in a u16 slot as a signed nine-bit value. Sign extension uses bit 8: values 256 through 511 represent -256 through -1. For pixel p, RGB is the clamped sum of Y[p >> 4] + I[(p >> 2) & 3] + Q[p & 3]; alpha is 255.

See startup rendering for transforms, materials, and screen sequence.

External References