Files
llamamod/notes/textures.md
T

52 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# TEXT-Chunk (Texturen)
Quelle: groove.exe `FUN_004067b0` (Größenlauf), `FUN_004071d0` → `FUN_00406880` (Paletten),
`FUN_00406ab0` (Seiten), `FUN_00406a10` (RLE), `FUN_00406d30` (Texturliste),
`FUN_00406e40` (Texturanimationen), `FUN_00407240`/`FUN_00408470` (Upload/Konvertierung).
Werkzeug: `tools/textchunk.py`, `tools/text_export.py`. Parse + Neuaufbau ist für **alle
Level-WADs byte-identisch** (auch der RLE-Encoder erzeugt exakt die Originaldaten).
## Aufbau
```
u32 nPal (in allen WADs 0)
nPal × { u32 id, u32 n, u16 farbe[n], u8 extra[n] }
u32 nSeiten (13–22 je Level, alle 256×256)
nSeiten × { u32 flags, u32 w, u32 h, Daten }
flags == 0 : w·h Byte (8 Bit, Palette) – unbenutzt
flags & 0x80 : u32 Länge, RLE16 – alle Originalseiten
sonst : w·h u16 roh
u32 nTex (~180–1260)
nTex × 8 Byte { u16 flags, u8 seite, u8 clut(0xff), u8 x0, u8 x1, u8 y0, u8 y1 } (Kanten inklusive)
u32 nAnim
nAnim × { u16 texIndex, u8 typ, Nutzdaten je typ }
typ 1,2 : 3 Byte typ 7,9 : u16,u16,u8,u8
typ 8 : u8, u8 nFrames, u8, nFrames × u16 texIndex (Daumenkino)
typ 10,11: u8,u8,u8,u8 n, n × u16 texIndex
```
RLE16: Folge von s16 n; n>0 → n Literal-u16; n<0 → nächstes u16 (−n)-mal.
## Pixel
16 Bit **PS1-Reihenfolge**: Bits 0–4 R, 5–9 G, 10–14 B, Bit 15 = STP.
`0x0000` = durchsichtig (Konverter schreibt 0 für Pixel 0, alles andere wird umgerechnet).
STP=0 bei Farbe≠0 tritt auf Seiten mit Blendmodus auf (halbtransparente Pixel).
Export: Alpha 0 = 0x0000, Alpha 128 = STP 0, Alpha 255 = STP 1.
Seiten-flags & 0x7f = Format/Blendklasse (Tabelle 0x570370, je 0x20 Byte):
1 = opak, 2 = eigener Konverter (0x409640), 3 = opak+Flag, 4/7 = Alpha (Blend 1),
5 = Blend 3, 6 = wie 1. (Modi 1/2/3 ≈ PS1-Halbtransparenz-Modi; Details offen.)
## Texturliste
Faces der Modelle (TRAK/STPC, Face+8 u16) verweisen auf den Index in der Texturliste;
Eintrag = Rechteck auf einer Seite. `flags`-Lowbyte 4/5/6/0xc6, Highbyte 1/4/17/20/36/…
(Bedeutung offen; vermutl. Blend/Größenklasse). Fürs Ersetzen: Liste unverändert lassen
und nur Pixel in den Seiten tauschen → keine Querverweise betroffen.
## Export / Ersetzen
```
text_export.py export level.wad ordner # pageNN_fXX.png + texinfo.txt (≈370 KB je Level)
text_export.py import level.wad ordner neu.wad
```
Import ändert nur Pixel, deren RGBA vom Export abweicht → unveränderte Seiten bleiben
bitgenau. Größe muss 256×256 bleiben. Neue Seiten/Texturen anhängen ist möglich
(nTex/nSeiten erhöhen), dann müssen aber Faces in TRAK/STPC die neuen Indizes verwenden.