Skip to main content

Extension Mapping

Overview

ddon-extractor uses a multi-layered mapping system to associate file extensions with deserializers:

  1. ClientResourceFileExtension enum — maps extension strings to symbolic resource type names.
  2. ClientResourceFileManager — maps (extension, FileHeader) pairs to ClientResourceFile objects containing deserializers. Note: This is due to the fact that the extension by itself is not enough, since across seasons the extension might become deprecated and re-used. There are also some file headers that are not enough by themselves, especially generic table-derivatives that only contain version information - only in combination with the file extension do they become uniquely identifiable.
  3. FrameworkResourcesUtil / DTI.txt — maps MT Framework resource class names to file extensions (e.g., rGUIMessage.gmd).

File Extension → Resource Type Mapping

The ClientResourceFileExtension enum's static initializer defines ~200 extension-to-resource mappings. These are the file types for which ddon-extractor has implemented or registered deserializers. The complete table:

ExtensionResource TypeDescription
.2EA55F30rPlayerExpTablePlayer experience table (JamCRC fallback)
.3FD51519rCraftSkillGainCraft skill gain (JamCRC fallback)
.4BB8A7C5rCraftSkillBurstCraft skill burst (JamCRC fallback)
.46ECE09CrCraftSkillStrCraft skill strength (JamCRC fallback)
.5362A636rPartsCtrlTableParts control table (JamCRC fallback)
.5810D1F1rCraftRecipeCraft recipe (JamCRC fallback)
.60BA5E0BrCraftWepQualityParamCraft weapon quality param (JamCRC fallback)
.767645BErCraftArmQualityParamCraft armor quality param (JamCRC fallback)
.aadrAbilityAddDataAbility add data
.abdrAbilityDataAbility data
.ablrAbilityListAbility list
.achrAchievementHeaderAchievement header
.acvrAchievementAchievement
.ajprAdjustParamJob adjust parameters
.alarArchiveListArrayArchive list array
.alprAdjLimitParamAdjust limit parameters
.amlrAnimalDataAnimal data
.amrrAreaMasterRankDataArea master rank data
.amsrAreaMasterSpotDataArea master spot data
.amsdrAreaMasterSpotDetailDataArea master spot detail data
.apsrAIPawnSkillParamTblAI pawn skill param table
.arcrArchiveArchive (encrypted ARCC or reference ARCS)
.arirAreaInfoArea info
.arjrAreaInfoJointAreaArea info joint area
.arsrAreaInfoStageArea info stage
.bjtrBakeJointBake joint table
.blow_saverBlowSaveEmLvParamBlow save enemy level param
.btbrBitTableBit table
.caiprCaughtInfoParamCaught info param
.ccprCraftCapPassCraft cap pass
.cdarCalcDamageAtdmAdjCalc damage atdm adjust
.cdaraterCalcDamageAtdmAdjRateCalc damage atdm adjust rate
.cdlrCalcDamageLvAdjCalc damage level adjust
.cdrrrCaughtDamageRateRefTblCaught damage rate ref table
.cdrtrCaughtDamageRateTblCaught damage rate table
.ceerCraftElementExpCraft element exp
.chantrMagicChantParamMagic chant parameters
.ciprCatchInfoParamCatch info param
.ckbrCraftSkillBurstCraft skill burst
.ckcrCraftSkillCostCraft skill cost
.ckgrCraftSkillGainCraft skill gain
.cksrCraftSkillSpdCraft skill speed
.ckstrCraftSkillStrCraft skill strength
.cperCharParamEnemyCharacter param enemy
.cqarCraftArmQualityParamCraft armor quality param
.cqirCycleQuestInfoCycle quest info
.cqrrCraftQualityCraft quality
.cqwrCraftWepQualityParamCraft weapon quality param
.crsrChildRegionStatusParamChild region status param
.csdrCustomSkillDataCustom skill data
.csirCycleContentsSortieInfoCycle contents sortie info
.cuexrCraftUpGradeExpCraft upgrade exp
.ddsDirectDrawSurfaceDDS texture
.dgmrGUIDogmaOrbGUI dogma orb
.dmirDungeonMarkerDungeon marker
.dttrEmDmgTimerTblEnemy damage timer table
.ebi_svrEmBaseInfoSvEnemy base info (server)
.ebsrEnemyBloodStainEnemy blood stain
.edt_color_defrCharacterEditColorDefCharacter edit color definition
.edt_tex_palrCharacterEditTexturePaletteCharacter edit texture palette
.edt_voice_palrCharacterEditVoicePaletteCharacter edit voice palette
.edvrEmDamageDirInfoEnemy damage direction info
.eirrItemEquipJobInfoListItem equip job info list (S3)
.elerEnemyLocalEstEnemy local EST
.elirVfxLightInfluenceVFX light influence
.emarEnemyMaterialTableEnemy material table
.emgrEnemyGroupEnemy group
.eocrOcdElectricParamOCD electric param
.eplrEnhancedParamListEnhanced param list (S3)
.equip_presetrEquipPresetEquipment preset
.erarEnemyReactResExEnemy react res ex
.esirEndContentsSortieInfoEnd contents sortie info
.eslrEmScaleTableEnemy scale table
.esnrEmSoundTableEnemy sound table
.esprEditStageParamEdit stage param
.estrEnemyStatusChangeEnemy status change
.evdrEvidenceListEvidence list (S3)
.evlrEvaluationTableEvaluation table
.evprEventParamEvent param
.evsirEventViewerSetInfoEvent viewer set info
.ewkrEmWorkRateTableEnemy work rate table
.ewprEmWarpParamEnemy warp param
.exprPlayerExpTablePlayer experience table
.faarFieldAreaAdjoinListField area adjoin list
.falrFieldAreaListField area list
.fmdrFieldMapDataField map data
.fmirFieldAreaMarkerInfoField area marker info
.fndrFurnitureDataFurniture data (S2+)
.fngrFurnitureGroupFurniture group (S2+)
.fnirFurnitureItemFurniture item (S2+)
.fnlrFurnitureLayoutFurniture layout (S2+)
.fsmrAIFSMAI FSM
.gatrGatheringItemGathering item
.gmdrGUIMessageGUI message data
.gmprGUIMapSettingGUI map setting
.gplrLayoutGroupParamListLayout group param list
.hmcsrHumanEnemyCustomSkillHuman enemy custom skill
.hmeqrHumanEnemyEquipHuman enemy equipment
.iparItemListItem list
.jbirJukeBoxItemJukebox item (S3)
.jlt2rJobLevelUpTbl2Job level up table
.jmcrJobMasterCtrlJob master control
.jmprJumpParamTblJump param table
.jnt_inforJointInfoJoint info
.jnt_orderrJointOrderJoint order
.jobbaserJobBaseParamJob base parameters
.jtqrJobTutorialQuestListJob tutorial quest list
.kcttrKeyConfigTextTableKey config text table
.lairLandInfoLand info
.lcdrLocationDataLocation data
.lcprLargeCameraParamLarge camera param
.loprLayoutPresetLayout preset
.lotrLayoutLayout
.luprEmLvUpParamEnemy level up param
.maprMandraActionParamMandra action param
.mcwrMagicCommandWordMagic command word
.mgccrMagicCommandListMagic command list
.mrarMyRoomActParamMy room act param
.msdrMapSpotDataMap spot data
.mslrMapSpotStageListMap spot stage list
.mssrMsgSetMessage set
.navrNavigationMeshNavigation mesh
.ncirNpcConstItemNPC const item
.ncsrNpcCustomSkillNPC custom skill
.ndprNamedParamNamed param
.nllrNpcLedgerListNPC ledger list
.nmprNpcMeetingPlaceNPC meeting place
.nsdrNormalSkillDataNormal skill data
.nsprNpcIsNoSetPS3NPC is no set PS3
.oIprOcdImmuneParamResOCD immune param res
.omkrOmKeyOM key
.omprOmParamOM param (S1/S2)
.ompprOmParamPartOM param part (S3)
.osprOcdStatusParamResOCD status param res
.pamrAIPawnAutoMotionTblAI pawn auto motion table
.paorAIPawnOrderAI pawn order
.pasrAIPawnActNoSwitchAI pawn act no switch
.pawrAIPawnAutoWordTblAI pawn auto word table
.peprAIPawnEmParamAI pawn enemy param
.phsrPrologueHmStatusPrologue HM status
.planetrPlanetariumItemPlanetarium item (S3)
.pprrPartnerReactParamPartner react param
.pptrPartnerPawnTalkPartner pawn talk
.pqirPackageQuestInfoPackage quest info
.pqtrPawnQuestTalkPawn quest talk
.prsrParentRegionStatusParamParent region status param
.psirPlPartsInfoPlayer parts info
.ptcrPartsCtrlTableParts control table
.push_raterPushRatePush rate
.qhdrQuestHistoryDataQuest history data
.qmirQuestMarkerInfoQuest marker info
.qsqrQuestSequenceListQuest sequence list
.qstrQuestListQuest list
.qtdrQuestTextDataQuest text data
.racrReactionReaction
.ragrRageTableRage table
.rcprCraftRecipeCraft recipe
.repgmdlistrReplaceWardGmdListReplace ward GMD list
.rslrChildRegionStatusParamListChild region status param list
.rtexrRenderTargetTextureRender target texture
.rwrrRoomWearParamRoom wear param
.salrStageAdjoinListStage adjoin list
.sal2rStageAdjoinList2Stage adjoin list 2
.sbbrSoundBossBgmSound boss BGM
.sbvrShrinkBlowValueShrink blow value
.scarStageCustomStage custom
.sccrStageConnectStage connect
.scerScenarioScenario
.sckrStatusCheckStatus check
.scprStageCustomPartsStage custom parts (S1/S2)
.scpxrStageCustomPartsExStage custom parts ex (S2/S3)
.sdlrSchedulerScheduler
.sdtrStaminaDecTblStamina decrease table
.sg_tblrStatusGainTableStatus gain table
.sjarStageJointStage joint
.sltrStageListStage list
.smcrSituationMsgCtrlSituation message control
.smprStageMapStage map
.sn2rAISensorAI sensor
.sotrSoundOptDataSound option data
.spg_tblrShopGoodsShop goods
.srirShotReqInfoShot req info
.sri2rShotReqInfo2Shot req info 2
.starStartPosAreaStart position area
.stirStageInfoStage info
.stprStartPosStart position
.stsrStageToSpotStage to spot
.tcmrTbl2ChatMacroTable 2 chat macro
.tcorTargetCursorOffsetTarget cursor offset
.tderTexDetailEditTex detail edit
.tdmrTutorialDialogMessageTutorial dialog message
.texrTextureTexture
.tltrTutorialListTutorial list
.tqgrTutorialQuestGroupTutorial quest group
.ujprNpcIsUseJobParamExNPC is use job param ex
.walrWarpLocationWarp location
.wcrtrWepCateResTblWeapon category res table
.wp2rWaypoint2Waypoint 2
.wpn_ofsrWeaponOffsetWeapon offset
.wptrWaypointWaypoint
.wrtrWeaponResTableWeapon res table
.wsirWeatherStageInfoWeather stage info
.wtfrWeatherFogInfoWeather fog info
.wtlrWeatherParamInfoTblWeather param info table

MtDTI, DTI.txt, and FrameworkResourcesUtil

Background: MtDTI in the MT Framework

Capcom's MT Framework engine uses a runtime type system called MtDTI (Data Type Information). Every class in the engine — resources, entities, collision shapes, packet structures, etc. — has a MtDTI, which provides:

  • A class name string (e.g., rGUIMessage, CDataItemList, nZone::ShapeInfoArea)
  • A class CRC (MtDTI::mID) — a JamCRC32 hash of the class name, used as a compact identifier in binary formats
  • Support for dynamic instantiation (the engine can construct objects by CRC at runtime)
  • An inheritance hierarchy (nested classes use :: syntax, e.g., rAcquirement::rAbilityAddData)

Whenever a binary resource file embeds a reference to another class — such as an archive entry storing a resource type, or an XFS file declaring its class structure — it either uses the class CRC or the string name.

DTI.txt

The file lib-api/src/main/resources/DTI.txt is a reverse-engineered collection of all class names found across:

  • DWARF debug symbols from the PS4 client binary (recorded in the ddon-data repository)
  • Symbol dumps from the unpacked PC client executable

It contains 13,468 class entries, one per line. These span the entire MT Framework class hierarchy:

Prefix / PatternCountExamples
CData*~509CDataItemList, CDataAbilityParam, CDataQuestProcessState
r* (resource classes)~885rGUIMessage, rTexture, rArchive, rAreaInfo
Mt* (engine internals)~200+MtArray, MtObject, MtCollisionUtil::MtDtiObject
Nested (::)~200+rAI::TaskPerformanceInfo::LOD, AHShapePolygon::PosUnit

Sample entries:

AHShapeBox
CDataAbilityParam
CDataItemList
MtCollisionUtil::MtDtiObject
nZone::ShapeInfoArea
rAI::TaskPerformanceInfo::LOD
rAcquirement::rAbilityAddData
rArchive
rGUIMessage
rTexture

FrameworkResourcesUtil

At startup, FrameworkResourcesUtil loads all 13,468 entries from DTI.txt and builds three lookup maps:

1. resourceToFileExtensionMap (class name → file extension)

Default rule: Every DTI entry gets a default extension of "." + className.replace("::", "_").

For example, rAI::TaskPerformanceInfo.rAI_TaskPerformanceInfo.

Manual overrides: ~420 entries have explicit file extension mappings that override the default. These are the known, human-readable extensions derived from the PS4 debug symbols and game client analysis:

resourceToFileExtensionMap.put("rGUIMessage", ".gmd");
resourceToFileExtensionMap.put("rArchive", ".arc");
resourceToFileExtensionMap.put("rTexture", ".tex");
resourceToFileExtensionMap.put("rAcquirement::rAbilityAddData", ".aad");
// ... ~420 total overrides

2. jamCrcToResourceMap (CRC → class name)

Maps the JamCRC32 hash of every DTI class name to its string form. Used to resolve class references embedded in binary files:

0x242BB29A → "rGUIMessage"
0x73850D05 → "rTexture"
0x4F3D2D3E → "CDataItemList"

3. jamCrcToFileExtensionMap (CRC → file extension)

Maps JamCRC hashes directly to file extensions. A convenience shortcut that combines maps 1 and 2.

Where Class CRCs Appear in Binary Formats

The DTI CRC lookup is essential for several binary format parsing tasks:

Archive entries (.arc): Each packed resource's Type field is a JamCRC of the class name (e.g., 0x242BB29A = rGUIMessage). Resolution: getFrameworkResourceClassNameByCrc(type) → class name → getFileExtension().gmd.

XFS files (binary XML): The ClassData.ID field is a JamCRC identifying the class whose properties follow. Resolution: getFrameworkResourceClassNameByCrc(ID) → resolves to e.g., cSetInfoOmCtrl.

Resource IDs: A 64-bit composite value where the upper 32 bits are the JamCRC of the class name and the lower 32 bits are the framework CRC32 of the path. Resolution: convertResourceIdToTagId() extracts the class CRC; convertResourceIdToPathId() extracts the path CRC.

Archive List Arrays (.ala): File name hashing uses convertTagIdToTargetTagNumber() to derive archive indices from frameworkCrc32(path).

JamCRC vs. Framework CRC

CrcUtil provides two CRC variants, both based on standard CRC32 with different final XOR masks:

FunctionFormulaBitsUsage
jamCrc32(name)~CRC32(name) & 0x7FFFFFFF31-bitMtDTI::mID — class type identification
frameworkCrc32(path)~CRC32(path) & 0xFFFFFFFF32-bitPath hashing for resource lookup

JamCRC Fallback Extensions

Some older ARC unpackers couldn't reliably determine all file extensions, so for historic reasons some S1 or S2 extensions are documented via their JamCRC as well.

.2EA55F30 → rPlayerExpTable     (JamCRC of "rPlayerExpTable" = 0x2EA55F30)
.5810D1F1 → rCraftRecipe (JamCRC of "rCraftRecipe" = 0x5810D1F1)
.3FD51519 → rCraftSkillGain (JamCRC of "rCraftSkillGain" = 0x3FD51519)