Extraction Guide
How to run the Frida extraction scripts, the output directory structure, JSON format conventions, and field naming rules.
How to Run
Start the Frida server on the emulator, then launch the extraction script from your Mac. The game must be running and past the title screen.
adb shell /data/local/tmp/frida-server & python3 extraction/mac/extract_game_data.py
Output
All extracted data lands in data/game_reference/, versioned by game build.
A latest symlink always points to the most recent extraction.
data/game_reference/
v1.1.79/
ships.json # All ship data
skills.json # All skill data
admirals.json # All admiral data
equipment.json # All item data
gemstones.json # Gemstone data
gemstone_slots.json
gemstone_skills.json
gemstone_collections.json
stages.json # Stage / level data
bosses.json # Boss scaling data
waves.json # Wave / formation data
buildings.json # Building data
enums.json # All enum mappings
extraction_log.json # Counts and errors
latest -> v1.1.79/ # Symlink
JSON Format
Every table file follows the same two-part structure: a metadata block
describing the source, and a data array of extracted records.
{
"metadata": {
"table": "GeneralShipTable",
"source": "TableDataManager.ship_dict",
"gameVersion": "1.1.79",
"extractedAt": "...",
"count": 156,
"structFields": [ ... ]
},
"data": [
{
"ID": 10004,
"eMainType": 0,
"eMainType_name": "Ship",
"iName": 12345,
"iName_resolved": "Aegis Cruiser",
...
}
]
}
Metadata Fields
| Field | Description |
|---|---|
table | IL2CPP struct name (e.g. GeneralShipTable) |
source | TableDataManager dictionary field the data was read from |
gameVersion | Version of the game binary at extraction time |
extractedAt | ISO timestamp of the extraction run |
count | Number of records in the data array |
structFields | Ordered list of fields read from the struct, with types |
Naming Convention
The extraction script enriches raw struct fields with human-readable companions. Every enriched field sits next to the original field it was derived from.
- Enum field
eFoo→ companioneFoo_namewith the resolved enum label - Localization ID
iName→ companioniName_resolvedwith the display string - Enum array
eTypes→ companioneTypes_nameswith an array of labels - Internal keys prefixed with
_(e.g._outerKey) for dictionary keys and derived values
Examples
| Raw Field | Companion Field | Example Value |
|---|---|---|
eMainType | eMainType_name | "Ship" |
eGradeType | eGradeType_name | "Legendary" |
iName | iName_resolved | "Aegis Cruiser" |
iDesc | iDesc_resolved | "A heavily armored..." |
ePropertyTypes | ePropertyTypes_names | ["ATK", "DEF", "HP"] |
Verification
After running an extraction, validate the output:
- Confirm each JSON file has a non-zero
countin metadata - Spot-check
iName_resolvedfields — they should be real display strings, not numeric IDs - Verify enum
_namefields resolve to readable labels, not raw integers - Check
extraction_log.jsonfor any extraction errors or warnings