STemplet.dat File Format

Used for elevation tiles.

struct templets {
    struct templet {
        int32_t header_length;         // number of bytes to read this Templet
        int32_t tile_size_x;           // seems to be always 97
        int32_t tile_size_y;           // mainly 49, but 25 for shorter tiles, and 73 for longer tiles.
        int32_t hotspot_x;             // rendering offset
        int32_t hotspot_y;             //
        int32_t tiles_total;           // used for allocating rhombus tile count in bytes
        int32_t offset_start1;         // colors1 start from header
        int32_t offset_start2;         // colors2 start from header

        // Now follows an outline table, exactly how they are found in SLP files.
        struct {
            uint16_t outline_left;     // number of transparent pixels at the start of this row (0x8000 must be interpreted as 0)
            uint16_t outline_right;    // number of transparent pixels at the end of this row (item dito)
        }[tile_size_y];

        // Now follows a command table, exactly how they are found in SLP files.
        // the next tile_size_y ints, (0 <= i < tile_size_y) indicate the offsets where the commands for row i are found,
        // within an imaginary SLP file that could be generated from this data.
        // The offsets would be 0x40 (header) + tile_size_y * 4 (length of outline table) + command offset
        int32_t slp_command_offsets[tile_size_y];

        // Normally, this is where the commands follow in slp files, but these are not included.
        // The game is procedurally generating the missing commands.
        // For example, at offset 0x00419AAB
        // It doesn't make much sense because I don't think it updates the slp_command_offsets, but I may be wrong.
    }[17];                                 // always seems to be 17
};