Skip to content

Latest commit

 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pc-fftype0-doc

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.


Headline findings

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.


Repository layout

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.


Tools

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 file

With 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.csv

Nothing in tools/ writes to the game directory.


Method and provenance

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.

Legal

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.

About

File-format and runtime documentation for the PC (Steam) release of FINAL FANTASY TYPE-0 HD - archive format, PSP heritage, and the HexaDrive render layer

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages