Skip to content
View in the app

A better way to browse. Learn more.

ResHax

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
Help us keep the site running.

[PC] Lumines Remastered save file format

Featured Replies

  • Author
  • Localization

mbc07, posted Sun Nov 03, 2019 8:34 pm (51866)


So, I found the password and data structure used by Lumines Remastered save files and decided to share the details since there's little to no documentation about this game file formats. I checked this with the game version 1.04 for PC but the console ports are very likely to use the same format:

  • The game uses Easy Save 2 plugin to handle its save file
  • The game uses the plugin's built-in encryption (from a quick look seems to be based on AES-128) and the password used is RsALO31A0D58eRwnh5e8L1nQvrXIke
  • The actual content written to/read from the save file as well as the order which the variables are read/written are important when using Easy Save 2. Lumines Remastered stores the following variables, on the following order:
Code:
float playTime;
long totalScore;
uint basicHiScore;
uint basicBestLevel;
uint basicBestClearTime;
uint endlessHiScore;
uint endlessBestLevel;
uint shuffleBestLevel;
uint shuffleHiScore;
uint SkinEditHiScore;
uint timeAttack60HiScore;
uint timeAttack180HiScore;
uint timeAttack300HiScore;
uint playedSkinNum[];                  // array length: 40
uint vscpuBossNum;
uint vscpuNum;
uint vs2pWinNum;
uint vs2pLoseNum;
uint oneTimelineMaxDeleteSquareNum;
uint oneTimelineBestScore;
uint maxCombo;
uint chainBlockMaxConnectBlockNum;
uint allDeletedBonusNum;
uint uniColorBonusNum;
string currentAvaterId;
string skinEditPlayList;
bool unLockAvater[];                   // array length: 44
bool unLockSkin[];                     // array length: 40
bool unLockTips[];                     // array length: 0
bool unLockEndressMode;
bool unLockShuffleMode;
bool puzzleClearList[];                // array length: 100
int puzzleTime[];                      // array length: 100
bool missionClearList[];               // array length: 50
int missionTime[];                     // array length: 50
int scoreRanking[0][];                 // array length: 10
int scoreRanking[1][];                 // array length: 10
int scoreRanking[2][];                 // array length: 10
int scoreRanking[3][];                 // array length: 10
int scoreRanking[4][];                 // array length: 10
int scoreRanking[5][];                 // array length: 10
int scoreRanking[6][];                 // array length: 10
int scoreRanking[7][];                 // array length: 10
string scoreRankingName[0][];          // array length: 10
string scoreRankingName[1][];          // array length: 10
string scoreRankingName[2][];          // array length: 10
string scoreRankingName[3][];          // array length: 10
string scoreRankingName[4][];          // array length: 10
string scoreRankingName[5][];          // array length: 10
string scoreRankingName[6][];          // array length: 10
string scoreRankingName[7][];          // array length: 10
uint vsCPUClearNum;
uint maxVsCPUClearTime;
uint minVsCPUClearTime;

// enum ControllType {None, A, B, C}
// enum VibrationSettingType {PLAY = 2, RHYTHM = 4, ON = 8, LR = 16}
ControllType joyOne;   
ControllType joyDual;
ControllType fullKey;
VibrationSettingType controllorVibType;
VibrationSettingType transVibType;

float seVolume;
float bgmVolume;
string lang;
bool generalFlag[];                    // array length: 200
bool isUseInterface;
bool isScoreBonus;
int vibrationPower;
int tranceVibrationPower;
uint drawMonitorNum;

// enum ScreenType {WINDOW, FULL_SCREEN, BORDERLESS}
// enum ResolationType {TYPE_1280_720, TYPE_1280_768, TYPE_1280_800, TYPE_1280_960,
//                      TYPE_1280_1024, TYPE_1360_768, TYPE_1366_768, TYPE_1600_900,
//                      TYPE_1600_1024, TYPE_1680_1050, TYPE_1920_1080, TYPE_1920_1200,
//                      TYPE_2560_1080, TYPE_2560_1440, TYPE_3840_2160, MAX}
ScreenType screenType; 
ResolationType resolationType;

bool Vsync;
uint brightnessSetting;
int player1KeyBindControllerList[];    // array length: 10
int player1KeyBindPrimary[];           // array length: 10
int player1KeyBindSecondary[];         // array length: 10


I didn't dig too deep on Easy Save 2 source code, but it should be easy to write a standalone app to handle Lumines Remastered save files, if there's interest. Since I was too lazy, I instead created an empty Unity project, imported Easy Save 2 to the project and used the plugin directly, which also works but it's a bit overkill...
Guest
This topic is now closed to further replies.

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.