File-format and runtime documentation for the PC (Steam) release of FINAL FANTASY TYPE-0 HD,
written from a clean-room inspection of a legitimately owned Steam copy
(FINAL FANTASY TYPE-0 HD, Windows build fftype0hd.exe, timestamped 2023-05-27), compared
against a dump of the owner's own Japanese PSP UMDs.
The guiding question of this project is narrow and specific:
Is the PC version a naked repackage of the PSP original, or is there real engineering in it?
Session 2 answered it by measurement, against a dump of the Japanese PSP release (NPJH-50443/50444):
5 517 of the PC build's 26 582 populated files — 20.8 % — are byte-for-byte identical to a file on the PSP UMD. Those files are 0.3 % of the PC build's 24.50 GB of data.
One file in five came straight off the UMD; they are three bytes in a thousand. The split is very clean:
- the game — its data model, its file layout, its runtime OS calls, and a large part of its
asset formats — is the 2011 PSP title
Suzaku, recompiled for x64 and running on a hand-written PSP-API compatibility shim; - the presentation layer — renderer, textures, audio codecs, movies, post-processing and the whole content-variant system — was genuinely rebuilt.
This repository is documentation only. It contains no game data, no executable patches, and no porting work. Everything here is descriptive: format specs, measurements, and small read-only Python tools you can point at your own copy of the game.
| Area | Finding |
|---|---|
| Archive | Custom suzaku.fnd + suzaku.fsd + pack0..9.pac filesystem, 32 357 entries, 15.86 GB, 100 % dense (only 18 MB unreferenced) |
| Compression | Raw DEFLATE (no zlib/gzip wrapper), per-file, 1.68× average (24.5 GB logical → 14.56 GB stored) |
| Addressing | Files are addressed by index, not by path — 131 paths appear more than once (one dummy voice path is repeated 661 times as padding) |
| Content variants | The descriptor table carries a second-level table of alternate takes: 9-slot language sets for text/subtitles, and 1-slot Japanese/English pairs for voice and lip-sync motion |
| Audio | Re-encoded to Ogg Vorbis (JP 44.1 kHz / EN 48 kHz) inside Square Enix SEDBSSCF (SCD) containers — but 830 Japanese voice clips are still PSP-era Sony ATRAC3 (WAVE_FORMAT 0x0270), and the PC exe still ships an ATRAC3 decoder for them |
| Textures | Fully remade: BC7 sRGB albedo, BC5 normal maps, BC4 masks, up to 1024×1024 with full mip chains. The PSP had none of these |
| Movies | .hxmf is a plain MP4 (ftyp mp42, H.264, 1280×720) with a renamed extension; movies live loose on disk, not in the packs |
| Subtitles | Pre-rendered DDS (DX10) image atlases, shipped twice — once in pack0, once loose on disk (≈210 MB of exact duplication) |
| PSP heritage | SZK_UTILITY_MODULE_AV_LIBATRAC3PLUS, HEAP_TYPE_UMD, ms0:/PSP/SAVEDATA/, NPJH50443, CUMDFileIo, FunnyEffectsForPSP, szkKernelCreateThread — a 1:1 shim over the PSP OS API |
| PC layer | New hx:: (HexaDrive) and px:: namespaces: D3D11 deferred renderer, 206 DXBC shaders, SMAA/TAA/SAO/HDR-bloom/DOF/motion-blur/RLR post stack, per-area .meta files with light probes |
| Texture census | 53 238 textures, 18.99 GB — 77.5 % of all the game's data. BC7 sRGB albedo, BC5 normals, BC4 masks, BC6H HDR probes and sky panoramas; particles still on legacy BC3 |
| Dead weight | 5 775 of 32 357 entries (17.8 %) hold zero bytes — 5 225 flagged absent, 550 flagged present but empty |
| Lineage | The PSP's yellow.fsd has the same 44-byte header layout, same 28-byte group stride and same group numbers — the PC descriptor is the PSP's 8-byte one widened to 56 |
| What survived | Mission tables, cutscene scripts, world-map data, battle stats, 3 798 motion clips, 829 ATRAC3 voice lines |
| What did not | Every music track, every effect archive, every battle motion set, all of chr/bin, and bg/bin — 11.06 GB that has no UMD counterpart at all |
| PSP redundancy | The two UMDs duplicate 0.75 GB (23 %) of their content; the PC build duplicates 0.8 % |
Read docs/00-verdict.md for the reasoned answer to the guiding question.
docs/ the actual documentation
tools/ read-only Python tools (stdlib only, no dependencies)
data/ derived metadata tables (paths, offsets and type names - no game content)
| Data file | Contents |
|---|---|
data/filelist.csv |
all 32 357 index entries: path, group, pack, offset, sizes, flags, variant link |
data/scd_survey.csv |
per-SCD codec / sample rate / channels, primary and alternate take |
data/scd_survey_summary.txt |
the aggregated codec census |
data/meta_tags.txt |
chunk-tag census of the PC-only JP/../meta tree |
data/rtti_classes.txt |
920 MSVC RTTI class names recovered from fftype0hd.exe |
data/psp_pc_group_compare.csv / .txt |
per-group PSP-vs-PC positional comparison |
data/psp_vs_pc.txt |
whole-archive content-hash comparison against the UMD |
data/texture_census.csv / .txt |
all 53 238 embedded textures: blob, offset, size, dimensions, format |
| Document | Contents |
|---|---|
docs/00-verdict.md |
Repackage or real port? The evidence, weighed |
docs/01-package-filesystem.md |
Complete spec of suzaku.fnd, suzaku.fsd and packN.pac |
docs/02-content-inventory.md |
The 38 asset groups, extension census, size breakdown |
docs/03-audio.md |
SCD containers, codec census, the ATRAC3 survivors, dual-language wiring |
docs/04-movies-and-subtitles.md |
.hxmf, subtitle atlases, movie_volume*.bin |
docs/05-psp-heritage.md |
The szk compatibility shim and every PSP fossil found so far |
docs/06-pc-render-layer.md |
hx::/px:: architecture, shaders, .meta chunk format |
docs/07-launcher.md |
The external launcher and the graphics options it exposes |
docs/08-psp-vs-pc.md |
The direct comparison — the PSP yellow filesystem, group-by-group and file-by-file |
docs/09-asset-blobs-and-textures.md |
The 12.3 GB bg/bin / chr/bin blobs, and a full texture census + extractor |
docs/10-save-data.md |
Where saves live, why they look like PSP saves, and the fact that they are encrypted |
docs/99-open-questions.md |
What is still unsettled |
The running backlog is docs/99-open-questions.md; TODO.md is the prioritised
plan for the next session, with an approach attached to each item.
All tools are pure-stdlib Python 3 and read only. Point them at your own
.../FINAL FANTASY TYPE-0 HD/WIN/JP/package directory.
# inventory
python tools/suzaku_fs.py "<...>/WIN/JP/package" stats
python tools/suzaku_fs.py "<...>/WIN/JP/package" list --csv data/filelist.csv
# extract every file whose path contains a substring
python tools/suzaku_fs.py "<...>/WIN/JP/package" extract "program/prx" out/
# textures: census across the whole package, or extract from matching blobs
python tools/textures.py "<...>/WIN/JP/package" census --csv data/texture_census.csv
python tools/textures.py "<...>/WIN/JP/package" extract chr/bin/p_card_hi out/
# audio survey
python tools/scd_info.py "<...>/WIN/JP/package"
# chunked PC metadata (.meta/.btl/.face/.posttone)
python tools/meta_chunks.py "<...>/WIN/JP/package" # tag census
python tools/meta_chunks.py "<...>/WIN/JP/package" bg/sba03_02 # one fileWith a PSP dump as well (two ISOs, or directories holding yellow.fsd + yellow.pkg):
# the UMD filesystem
python tools/yellow_fs.py disc1.iso disc2.iso
# align the two builds and measure what survived
python tools/compare_psp_pc.py "<...>/WIN/JP/package" disc1.iso disc2.iso --skip 14 --csv data/psp_pc_group_compare.csvNothing in tools/ writes to the game directory.
Everything documented here was derived by direct inspection of the shipped files:
hex analysis of the index files, structural validation against the actual pack contents
(offset/size chains, round-trip decompression), ASCII/UTF-16 string extraction, and MSVC
RTTI type-name recovery from fftype0hd.exe and fftype0hdlauncher.exe.
No debugger, no disassembly of program logic, no circumvention of any protection.
The PSP comparison uses a dump of the user's own Japanese UMDs, read through plain ISO9660.
The PSP EBOOT.BIN is encrypted with Sony's UMD key and was deliberately not decrypted;
no PSP-side code was examined, and nothing in these documents depends on it.
Claims in these documents are marked as follows:
- verified — reproduced against the shipped data by one of the tools in
tools/; - inferred — consistent with all observed data but not independently confirmed;
- open — explicitly listed in
docs/99-open-questions.md.
FINAL FANTASY TYPE-0 is © Square Enix. This repository contains no Square Enix code, assets, or data — only descriptions, measurements, and independently written analysis tools. It exists for preservation and interoperability research.