SPR
(Redirected from Spr)
		
		
		
		Jump to navigation
		Jump to search
		.SPR is a file format used to store 2D sprites in  GoldSrc. It is a modified version of the SPR format used by
 GoldSrc. It is a modified version of the SPR format used by  Quake, adding a dedicated color palette and additional translucency formats (Quake SPRs only support alphatest transparency).
 Quake, adding a dedicated color palette and additional translucency formats (Quake SPRs only support alphatest transparency).
SPR files are technically considered models by the game code and engine. As such, any entity which displays a sprite can be made to display a MDL or external BSP by simply changing the file path.
Limitations
 Warning:All frames in a multi-frame sprite share the same palette.
Warning:All frames in a multi-frame sprite share the same palette. Bug:Oriented sprites are finicky; see The303's tutorials for more information.
Bug:Oriented sprites are finicky; see The303's tutorials for more information. Bug:Sprites being displayed via env_glow cannot be oriented in the map editor. If rotation is necessary, use env_sprite instead.
Bug:Sprites being displayed via env_glow cannot be oriented in the map editor. If rotation is necessary, use env_sprite instead.Image format types
| Format | Explanation | 
|---|---|
| Normal | Opaque image with no transparency | 
| Additive | Same as Normal; Additive translucency can be achieved for any image format by changing the sprite's rendermode (either in a sprite entity, or via code) | 
| IndexAlpha | Single-color with 8-bit translucency | 
| AlphaTest | Binary alpha-tested transparency; pixels using the last color in the palette will be transparent | 
Orientation types
| Orientation | Explaination | 
|---|---|
| Parallel | Rotates to always face the camera | 
| Parallel Upright | Like parallel, but doesn't rotate around Z axis | 
| Oriented | Rotated in map editor to face a specific direction | 
| Parallel Oriented | Combination of parallel and oriented. | 
| Facing Upright | Like parallel upright, but rotated based on player origin, rather than camera. | 
Technical
Header
struct sprite
{
    int         id;             // format ID, "IDSP" (0x49 0x44 0x53 0x50)
    int         version;        // Format version number. HL1 SPRs are version 2 (0x02,0x00,0x00,0x00)
    int         spriteType;     // Orientation method
    int         textFormat;     // Translucency/Transparency method
    float       boundingRadius;
    int         maxWidth;
    int         maxHeight;
    int         frameNum;          // number of frames the sprite contains
    float       beamLength;
    int         synchType;
    short       paletteColorCount; // number of colors in the palette; should be 256
};
Palette
After the header, comes a list of palette colors of "paletteColorCount" size, each one 3 bytes - Red, Green, Blue.
Frames
After that come the sprite frames. (frameNum from the header)
struct sprite_frame_header
{
    int         group;            
    int         originX;        // not sure about this one, it always huge for sprites in HL1
    int         originY;
    int         width;
    int         height;
    // Right after this, the paletted image data comes, each byte is a pixel.
    // The image size is given in the frame header, so the entire data for 1 frame is width*height bytes.
};