You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit a9a1fb3
Browse filesBrowse the repository at this point in the historyBrowse files
Improvement run ported from the Xenosaga I kit: LZSS maps, package textures, PSMT4, hidden text
Five lessons from the XS1 extractor re-checked against XS3; each paid off:
* xcpack.py: Xc MR-package layer with the engine's four LZSS decoders
(from the SLUS loader FUN_001b7330 dispatch). Every E3_* field map is
compressed (98/168 on Disc 1); chr-decode and the browse sweep now
decompress transparently, `xc-unpack` writes the stored form. Editing
commands refuse compressed packages (no recompressor yet).
* browse --kinds package_textures: decodes the ~20,900 textures inside
.chr/.wpn/.map packages and .esd/.esp/.sme effect files, sha1 de-dup,
package_textures.csv manifest.
* chrtex.py: PSMT4 (fmt 0x14) entries decode (derived against the proven
PSMT8 path); strip count read from the table header (8-strip maps were
stamping entry 0 over the canvas); txy v2 second upload bank overlaid
(118/315 E3_CIT01 entries were blank); exceptions instead of sys.exit.
* text kind: .txd menu-text tables decoded (not RenderWare), .sb scene
banks decoded (field dialogue + EUC-JP writer notes), mnu/us/*.bin and
.dat string tables sniffed, .t manifests copied.
* xtx_decode.py: coherence-ranked CLUT selection with per-block rescue for
the 8 swizzled UI sheets (XS1 issue-#1 selector).
* soundbanks kind: DTPK banks embedded in .sme bundles.
* Fix: `textures` + `textures_png` together (the default) never produced
PNGs because of an early return.
Docs: docs/UPDATES.md (new, newest-first change log with before/after
panels), disc-catalog corrections (.txd/.sb/.map/.xep/.sme, Xc version
table), chr-txy-format spec additions, README and GUI wiring.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
@@ -332,6 +346,7 @@ Disc 2 is the same flow with a fresh `--work` directory, using `Lba0.txt` +
332
346
|`repack-extract`| Pull any one file out of an ISO via the Lba tables (all three tables, both discs). |
333
347
|`repack-patch`| Write a file back into an ISO in place, read-back verified. Same-size by default; `--pad` allows resizes up to the slot's sector allocation. |
334
348
|`repack-tree`| Patch an entire mod directory that mirrors the game tree (`mymod/mdl/chr/...` → `\mdl\chr\...`). `--dry-run` previews. GUI card 14. |
349
+
|`xc-unpack`| Inspect an `Xc` MR package (`.chr`/`.map`/`.wpn`/`.sme`): version, sub-resources; `--out` writes it decompressed (the field maps are LZSS-packed on disc — see `xcpack.py`). |
335
350
336
351
Full loop and the disc model's rules: [docs/REPACK.md](docs/REPACK.md).
337
352
Underlying module works standalone too: [`repack.py`](repack.py).
@@ -340,7 +355,7 @@ Underlying module works standalone too: [`repack.py`](repack.py).
340
355
341
356
| Command | What it does |
342
357
|-----------------|--------------|
343
-
|`chr-decode`| Decode every texture inside a `.chr` (or `.wpn`/`.sme`) to PNG, plus the raw atlas + index map. |
358
+
|`chr-decode`| Decode every texture inside a `.chr` (or `.wpn`/`.map`, compressed maps included) to PNG — 8-bit, 4-bit and raw-CT32 entries — plus the raw atlas + index map. |
344
359
|`chr-palettes`| Export each texture's 256-color CLUT as an editable 16×16 PNG swatch (one pixel = one color). |
345
360
|`chr-import-palettes`| Write edited swatch PNGs back into a `.chr` (lossless round-trip for untouched entries). |
346
361
|`chr-import-entry`| Repaint a texture from a same-size PNG, quantized to its existing palette (experimental). |
0 commit comments