Cauldron3D.Formats
Readers for the Quake family of game files into Cauldron3D structures.
Installation
def deps do
[
{:cauldron_3d_formats, "~> 0.2"}
]
end
| Module | Reads |
|---|---|
Files |
a game's files from directories: pak0.pak… archives, .pk3 zips (including zips inside zips), loose files; later sources override earlier ones |
Bsp |
map files: BSP29, BSP2 and Half-Life's BSP30 (textures with their own palettes, red-green-blue lighting), into a Cauldron3D.Bsp |
Mdl |
Quake models |
Studio |
Half-Life studio models (.mdl version 10): bones, controllers, hitboxes, sequences and events, attachments, textures, skin families, meshes, and the compressed animation decoded to bone poses |
Spr |
sprites, Quake's and Half-Life's |
Wad2, Wad3 |
picture, texture and font collections |
Tga, Bmp |
TGA and BMP pictures |
Wav |
WAVE sounds to 16-bit PCM |
Entities |
a map's entity text |
Normals |
the vertex normal table Quake models index into |
{:ok, files} = Cauldron3D.Formats.Files.open("/games/quake", within: "id1")
{:ok, %{bsp: bsp, entities: text}} =
Cauldron3D.Formats.Bsp.parse(Cauldron3D.Formats.Files.read(files, "maps/e1m1.bsp"),
hulls: [{{-16.0, -16.0, -24.0}, {16.0, 16.0, 32.0}}, {{-32.0, -32.0, -24.0}, {32.0, 32.0, 64.0}}],
texture: &MyGame.texture/2
)
Game conventions are options rather than built in: each game names its own hull sizes and its own texture kinds (sky, liquid, hidden, masked), so the same reader serves Quake and Half-Life.
Sources
The readers follow the file formats. The Normals table is the 162 directions the MDL
format indexes into; MIT-licensed readers such as three.js's MD2 loader carry the same
table.
License
MIT. No game data is included.