§
    yØj�  ã                  óú   — d Z ddlmZ ddhZddlZddlmZ ddlmZ dd	l	m
Z
mZ d
Z G d„ de¦  «        Z G d„ dej        ¦  «        Zdd„Z e
j        ej        ee¦  «          e
j        ej        ddg¦  «         dS )a  
A Pillow loader for .ftc and .ftu files (FTEX)
Jerome Leclanche <jerome@leclan.ch>

The contents of this file are hereby released in the public domain (CC0)
Full text of the CC0 license:
  https://creativecommons.org/publicdomain/zero/1.0/

Independence War 2: Edge Of Chaos - Texture File Format - 16 October 2001

The textures used for 3D objects in Independence War 2: Edge Of Chaos are in a
packed custom format called FTEX. This file format uses file extensions FTC
and FTU.
* FTC files are compressed textures (using standard texture compression).
* FTU files are not compressed.
Texture File Format
The FTC and FTU texture files both use the same format. This
has the following structure:
{header}
{format_directory}
{data}
Where:
{header} = {
    u32:magic,
    u32:version,
    u32:width,
    u32:height,
    u32:mipmap_count,
    u32:format_count
}

* The "magic" number is "FTEX".
* "width" and "height" are the dimensions of the texture.
* "mipmap_count" is the number of mipmaps in the texture.
* "format_count" is the number of texture formats (different versions of the
same texture) in this file.

{format_directory} = format_count * { u32:format, u32:where }

The format value is 0 for DXT1 compressed textures and 1 for 24-bit RGB
uncompressed textures.
The texture data for a format starts at the position "where" in the file.

Each set of texture data in the file has the following structure:
{data} = format_count * { u32:mipmap_size, mipmap_size * { u8 } }
* "mipmap_size" is the number of bytes in that mip level. For compressed
textures this is the size of the texture data compressed with DXT1. For 24 bit
uncompressed textures, this is 3 * width * height. Following this are the image
bytes for that mipmap level.

Note: All data is stored in little-Endian (Intel) byte order.
é    )ÚannotationsÚioÚstructN)ÚIntEnum)ÚBytesIOé   )ÚImageÚ	ImageFiles   FTEXc                  ó   — e Zd ZdZdZdS )ÚFormatr   r   N)Ú__name__Ú
__module__Ú__qualname__ÚDXT1ÚUNCOMPRESSED© ó    úˆ/Users/tedpeters/Documents/Projects/Claude Projects/Misc Tools/notename-sheets/.venv/lib/python3.11/site-packages/PIL/FtexImagePlugin.pyr   r   C   s   € € € € € Ø€DØ€L€L€Lr   r   c                  ó&   — e Zd ZdZdZd
d„Zdd„Zd	S )ÚFtexImageFileÚFTEXzTexture File Format (IW2:EOC)ÚreturnÚNonec                ó˜  — | j         €J ‚t          | j                              d¦  «        ¦  «        sd}t          |¦  «        ‚t	          j        d| j                              d¦  «        ¦  «         t	          j        d| j                              d¦  «        ¦  «        | _        t	          j        d| j                              d¦  «        ¦  «        \  }}|dk    rd|› �}t          |¦  «        ‚t	          j        d| j                              d¦  «        ¦  «        \  }}| j                              |¦  «         t	          j        d| j                              d¦  «        ¦  «        \  }| j                              |¦  «        }|t          j
        k    r/d| _        t          j        d	d
d
g| j        ¢R d
d¦  «        g| _        n`|t          j        k    r/d| _        t          j        dd
d
g| j        ¢R d
d¦  «        g| _        n!dt#          |¦  «        › �}t          |¦  «        ‚| j                              ¦   «          t'          |¦  «        | _         d S )Né   znot an FTEX filez<iz<2ié   r   z'Unsupported number of texture formats: ÚRGBAÚbcnr   )r   ÚRGBÚrawz$Invalid texture compression format: )ÚfpÚ_acceptÚreadÚSyntaxErrorr   ÚunpackÚ_sizeÚ
ValueErrorÚseekr   r   Ú_moder
   Ú_TileÚsizeÚtiler   ÚreprÚcloser   )ÚselfÚmsgÚmipmap_countÚformat_countÚformatÚwhereÚmipmap_sizeÚdatas           r   Ú_openzFtexImageFile._openL   sé  € ØŒwÐ"Ð"Ð"Ý�t”w—|’| A‘”Ñ'Ô'ð 	#Ø$ˆCÝ˜cÑ"Ô"Ð"ÝŒ�d˜DœGŸLšL¨™OœOÑ,Ô,Ð,Ý”] 5¨$¬'¯,ª,°q©/¬/Ñ:Ô:ˆŒ
Ý%+¤]°5¸$¼'¿,º,Àq¹/¼/Ñ%JÔ%JÑ"ˆ�lð ˜1ÒÐØJ¸LÐJÐJˆCÝ˜S‘/”/Ð!åœ e¨T¬W¯\ª\¸!©_¬_Ñ=Ô=‰ˆ�ØŒ�Š�UÑÔÐÝœ t¨T¬W¯\ª\¸!©_¬_Ñ=Ô=‰ˆàŒw�|Š|˜KÑ(Ô(ˆà•V”[Ò Ð ØˆDŒJÝ"œ¨°°AÐ0B¸¼	Ð0BÐ0BÀAÀtÑLÔLÐMˆDŒIˆIØ•vÔ*Ò*Ð*ØˆDŒJÝ"œ¨°°AÐ0B¸¼	Ð0BÐ0BÀAÀuÑMÔMÐNˆDŒIˆIàG½¸f¹¼ÐGÐGˆCÝ˜S‘/”/Ð!àŒ�Š‰ŒˆÝ˜$‘-”-ˆŒˆˆr   ÚposÚintc                ó   — d S ©Nr   )r/   r8   s     r   Ú	load_seekzFtexImageFile.load_seekn   s   € Øˆr   N)r   r   )r8   r9   r   r   )r   r   r   r3   Úformat_descriptionr7   r<   r   r   r   r   r   H   sH   € € € € € Ø€FØ8Ðð  ð   ð   ð   ðDð ð ð ð ð r   r   ÚprefixÚbytesr   Úboolc                ó6   — |                       t          ¦  «        S r;   )Ú
startswithÚMAGIC)r>   s    r   r"   r"   r   s   € Ø×Ò�UÑ#Ô#Ð#r   z.ftcz.ftu)r>   r?   r   r@   )Ú__doc__Ú
__future__r   Ú__lazy_modules__r   Úenumr   r   r   Ú r	   r
   rC   r   r   r"   Úregister_openr3   Úregister_extensionsr   r   r   ú<module>rK      s$  ðð3ð 3ðj #Ð "Ð "Ð "Ð "Ð "à˜(Ð#Ð à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ð Ð à€ðð ð ð ð ˆWñ ô ð ð
'ð 'ð 'ð 'ð '�IÔ'ñ 'ô 'ð 'ðT$ð $ð $ð $ð €Ô �MÔ(¨-¸Ñ AÔ AÐ AØ €Ô ˜-Ô.°¸Ð0@Ñ AÔ AÐ AÐ AÐ Ar   