# doom-wad-php Small PHP toolkit for reading Doom WAD files and rendering patch/texture graphics. It currently focuses on the graphics side of classic Doom data: - WAD header + lump directory parsing - Doom patch (`Picture`) parsing - `TEXTURE1` / `TEXTURE2` (`TextureX`) parsing - `PNAMES` parsing - Texture resolution (`TEXTUREX + PNAMES + patch lumps`) - PNG rendering through `intervention/image` ## Requirements - PHP 8.2+ - Composer ## Install ```bash composer install ``` ## Run tests ```bash composer test ``` ## Quick start ### 1) Parse a WAD ```php createPicture(); $patch = $wad->firstLumpByName('S3DUMMY'); if ($patch !== null) { $pictureRenderer->render($patch->asPicture())->save('output/S3DUMMY.png'); } ``` ### 3) Resolve and render composite textures ```php use Doom\Image\Renderer; $renderer = new Renderer(); $textures = $wad->resolveTextures(); foreach ($textures as $texture) { $canvas = $renderer->createTexture($texture->width, $texture->height); foreach ($texture->patches as $patch) { if ($patch->patchName === null) { continue; } $path = sprintf('output/patches/%s.png', $patch->patchName); if (is_file($path)) { $canvas->blit($path, $patch->originX, $patch->originY); } } $canvas->image()->save(sprintf('output/textures/%s.png', $texture->name)); } ``` For a full runnable example, see `test.php`. ## Main API - `Doom\Wad\File::parse(...)` - `Doom\Wad\File::firstLumpByName(...)` - `Doom\Wad\File::pNames()` - `Doom\Wad\File::resolveTextures()` - `Doom\Wad\Types\Lump::asPicture()` - `Doom\Wad\Types\Lump::asTextureX()` - `Doom\Image\Renderer` - `createPicture()` -> `Doom\Image\PictureRenderer` - `createTexture($width, $height)` -> `Doom\Image\TextureRenderer` ## Notes - Rendering is palette-index based (Doom 8-bit graphics model). - The default Doom palette is built in, and custom palettes are supported via `Doom\Picture\Palette`. ## References - [Doom source code](https://github.com/id-Software/DOOM) - [Doom Wiki](https://doomwiki.org) - [Unofficial Doom specs](https://www.gamers.org/dhs/helpdocs/dmsp1666.html) - [SLADE 3](https://github.com/sirjuddington/SLADE)