OpenKh

This is a centralized place for the documentation and other discoveries about the internal working of Kingdom Hearts games.

View on GitHub

Kingdom Hearts Melody of Memory Database

Most of the game logic is able to be manipulated using a SQLite database located in…

Platform Location
Switch StreamingAssets\SQLite\Table.db
PC StreamingAssets\Data\data.dat

The database is encrypted using SQLCipher 3 with default values.

Documented Tables

Table Name Notes
AbilityTable Lists IDs of all abilities
DoorTable Defines criteria for doors to unlock other worlds
GameSceneFlowTable Defines menu layout, eg. Title>Tutorial>Main Screen, comments describe what each flow does, translation required however
MusicTable Defines music track properties, like difficulty values, item drops and drop rates
PartyTable Defines which characters are in each team, and if they’re selectable by the player or not.
TripWorldTable Defines worlds, eg. which tracks should be included (up to 8), world icon, clearing rewards, and more

Noteworthy Details

Example Edits

Using a SQLite DB editor, such as “DB Browser for SQLite” execute these SQL queries:

Disabling first start tutorial

Title Screen goes directly to Main Menu:

UPDATE GameSceneFlowTable
SET NextGameSceneID = 10000034
WHERE GameSceneID=10000005 AND NextGameSceneID=10000077;

Disabling promotion screen after playing a few songs

The trigger still happens automatically after finishing a few songs but drops you at the music list instead of the eShop promo screen:

UPDATE GameSceneFlowTable
SET NextGameSceneID = 10000000
WHERE GameSceneID=10000003 AND NextGameSceneID=11000000;

Changing Team Classic to contain Sora, Roxas, and Ventus

Can be done with other characters, however you will need to assign them DeformedChara and Ability values in CharacterTable.

UPDATE PartyTable
SET Character1 = 110000000
WHERE PartyID=120000000;
UPDATE PartyTable
SET Character2 = 110000006
WHERE PartyID=120000000;
UPDATE PartyTable
SET Character3 = 110000009
WHERE PartyID=120000000;

Unlock all worlds on the world map by default

UPDATE TripWorldTable
SET StartFlag = 1;