Path: blob/master/RSDKv5/RSDK/Storage/Legacy/UserStorageLegacy.cpp
1168 views
12void *RSDK::Legacy::nativeFunction[LEGACY_v4_NATIIVEFUNCTION_COUNT];3int32 RSDK::Legacy::nativeFunctionCount = 0;45int32 RSDK::Legacy::globalVariablesCount = 0;6RSDK::Legacy::GlobalVariable RSDK::Legacy::globalVariables[LEGACY_GLOBALVAR_COUNT];78int32 RSDK::Legacy::saveRAM[LEGACY_SAVEDATA_SIZE];910int32 RSDK::Legacy::GetGlobalVariableByName(const char *name)11{12for (int32 v = 0; v < globalVariablesCount; ++v) {13if (StrComp(name, globalVariables[v].name))14return globalVariables[v].value;15}16return 0;17}1819void RSDK::Legacy::SetGlobalVariableByName(const char *name, int32 value)20{21for (int32 v = 0; v < globalVariablesCount; ++v) {22if (StrComp(name, globalVariables[v].name)) {23globalVariables[v].value = value;24break;25}26}27}28int32 RSDK::Legacy::GetGlobalVariableID(const char *name)29{30for (int32 v = 0; v < globalVariablesCount; ++v) {31if (StrComp(name, globalVariables[v].name))32return v;33}34return 0xFF;35}3637bool32 RSDK::Legacy::ReadSaveRAM() { return SKU::LoadUserFile("SGame.bin", saveRAM, sizeof(saveRAM)); }38bool32 RSDK::Legacy::WriteSaveRAM() { return SKU::SaveUserFile("SGame.bin", saveRAM, sizeof(saveRAM)); }3940void RSDK::Legacy::v3::SetAchievement(int32 achievementID, int32 achievementDone)41{42PrintLog(PRINT_NORMAL, "[RSDKv3] Achieved achievement: %d (%d)!", achievementID, achievementDone);43}44void RSDK::Legacy::v3::SetLeaderboard(int32 leaderboardID, int32 score)45{46PrintLog(PRINT_NORMAL, "[RSDKv3] Setting Leaderboard %d score to %d...", leaderboardID, score);47}4849// Native Functions5051void RSDK::Legacy::v4::SetAchievement(int32 *achievementID, int32 *status)52{53if (!achievementID || !status)54return;5556PrintLog(PRINT_NORMAL, "[RSDKv4] Achieved achievement: %d (%d)!", *achievementID, *status);5758if ((uint32)*achievementID >= achievementList.size())59return;6061achievementList[*achievementID].achieved = *status ? true : false;62}63void RSDK::Legacy::v4::SetLeaderboard(int32 *leaderboardID, int32 *score)64{65if (!leaderboardID || !score)66return;6768PrintLog(PRINT_NORMAL, "[RSDKv4] Setting Leaderboard %d score to %d...", *leaderboardID, *score);69}70void RSDK::Legacy::v4::HapticEffect(int32 *id, int32 *unknown1, int32 *unknown2, int32 *unknown3) {}7172enum NotifyCallbackIDs {73NOTIFY_DEATH_EVENT = 128,74NOTIFY_TOUCH_SIGNPOST = 129,75NOTIFY_HUD_ENABLE = 130,76NOTIFY_ADD_COIN = 131,77NOTIFY_KILL_ENEMY = 132,78NOTIFY_SAVESLOT_SELECT = 133,79NOTIFY_FUTURE_PAST = 134,80NOTIFY_GOTO_FUTURE_PAST = 135,81NOTIFY_BOSS_END = 136,82NOTIFY_SPECIAL_END = 137,83NOTIFY_DEBUGPRINT = 138,84NOTIFY_KILL_BOSS = 139,85NOTIFY_TOUCH_EMERALD = 140,86NOTIFY_STATS_ENEMY = 141,87NOTIFY_STATS_CHARA_ACTION = 142,88NOTIFY_STATS_RING = 143,89NOTIFY_STATS_MOVIE = 144,90NOTIFY_STATS_PARAM_1 = 145,91NOTIFY_STATS_PARAM_2 = 146,92NOTIFY_CHARACTER_SELECT = 147,93NOTIFY_SPECIAL_RETRY = 148,94NOTIFY_TOUCH_CHECKPOINT = 149,95NOTIFY_ACT_FINISH = 150,96NOTIFY_1P_VS_SELECT = 151,97NOTIFY_CONTROLLER_SUPPORT = 152,98NOTIFY_STAGE_RETRY = 153,99NOTIFY_SOUND_TRACK = 154,100NOTIFY_GOOD_ENDING = 155,101NOTIFY_BACK_TO_MAINMENU = 156,102NOTIFY_LEVEL_SELECT_MENU = 157,103NOTIFY_PLAYER_SET = 158,104NOTIFY_EXTRAS_MODE = 159,105NOTIFY_SPIN_DASH_TYPE = 160,106NOTIFY_TIME_OVER = 161,107NOTIFY_TIMEATTACK_MODE = 162,108NOTIFY_STATS_BREAK_OBJECT = 163,109NOTIFY_STATS_SAVE_FUTURE = 164,110NOTIFY_STATS_CHARA_ACTION2 = 165,111};112113void RSDK::Legacy::v4::NotifyCallback(int32 *callback, int32 *param1, int32 *param2, int32 *param3)114{115if (!callback || !param1)116return;117118switch (*callback) {119default: PrintLog(PRINT_NORMAL, "NOTIFY: Unknown Callback -> %d", *param1); break;120case NOTIFY_DEATH_EVENT: PrintLog(PRINT_NORMAL, "NOTIFY: DeathEvent() -> %d", *param1); break;121case NOTIFY_TOUCH_SIGNPOST: PrintLog(PRINT_NORMAL, "NOTIFY: TouchSignPost() -> %d", *param1); break;122case NOTIFY_HUD_ENABLE: PrintLog(PRINT_NORMAL, "NOTIFY: HUDEnable() -> %d", *param1); break;123case NOTIFY_ADD_COIN:124PrintLog(PRINT_NORMAL, "NOTIFY: AddCoin() -> %d", *param1);125SetGlobalVariableByName("game.coinCount", GetGlobalVariableByName("game.coinCount") + *param1);126break;127case NOTIFY_KILL_ENEMY: PrintLog(PRINT_NORMAL, "NOTIFY: KillEnemy() -> %d", *param1); break;128case NOTIFY_SAVESLOT_SELECT: PrintLog(PRINT_NORMAL, "NOTIFY: SaveSlotSelect() -> %d", *param1); break;129case NOTIFY_FUTURE_PAST: PrintLog(PRINT_NORMAL, "NOTIFY: FuturePast() -> %d", *param1); break;130case NOTIFY_GOTO_FUTURE_PAST: PrintLog(PRINT_NORMAL, "NOTIFY: GotoFuturePast() -> %d", *param1); break;131case NOTIFY_BOSS_END: PrintLog(PRINT_NORMAL, "NOTIFY: BossEnd() -> %d", *param1); break;132case NOTIFY_SPECIAL_END: PrintLog(PRINT_NORMAL, "NOTIFY: SpecialEnd() -> %d", *param1); break;133case NOTIFY_DEBUGPRINT:134// Although there are instances of this being called from both CallNativeFunction2 and CallNativeFunction4 in Origins' scripts, there's no way we can tell which one was used here to handle possible errors135// Due to this, we'll only print param1 regardless of the opcode used136PrintLog(PRINT_NORMAL, "NOTIFY: DebugPrint() -> %d", *param1);137break;138case NOTIFY_KILL_BOSS: PrintLog(PRINT_NORMAL, "NOTIFY: KillBoss() -> %d", *param1); break;139case NOTIFY_TOUCH_EMERALD: PrintLog(PRINT_NORMAL, "NOTIFY: TouchEmerald() -> %d", *param1); break;140case NOTIFY_STATS_ENEMY: PrintLog(PRINT_NORMAL, "NOTIFY: StatsEnemy() -> %d, %d, %d", *param1, *param2, *param3); break;141case NOTIFY_STATS_CHARA_ACTION: PrintLog(PRINT_NORMAL, "NOTIFY: StatsCharaAction() -> %d, %d, %d", *param1, *param2, *param3); break;142case NOTIFY_STATS_RING: PrintLog(PRINT_NORMAL, "NOTIFY: StatsRing() -> %d", *param1); break;143case NOTIFY_STATS_MOVIE:144PrintLog(PRINT_NORMAL, "NOTIFY: StatsMovie() -> %d", *param1);145sceneInfo.activeCategory = 0;146sceneInfo.listPos = 0;147gameMode = ENGINE_MAINGAME;148stageMode = STAGEMODE_LOAD;149break;150case NOTIFY_STATS_PARAM_1: PrintLog(PRINT_NORMAL, "NOTIFY: StatsParam1() -> %d, %d, %d", *param1, *param2, *param3); break;151case NOTIFY_STATS_PARAM_2: PrintLog(PRINT_NORMAL, "NOTIFY: StatsParam2() -> %d", *param1); break;152case NOTIFY_CHARACTER_SELECT:153PrintLog(PRINT_NORMAL, "NOTIFY: CharacterSelect() -> %d", *param1);154SetGlobalVariableByName("game.callbackResult", 1);155SetGlobalVariableByName("game.continueFlag", 0);156break;157case NOTIFY_SPECIAL_RETRY:158PrintLog(PRINT_NORMAL, "NOTIFY: SpecialRetry() -> %d, %d, %d", *param1, *param2, *param3);159SetGlobalVariableByName("game.callbackResult", 1);160break;161case NOTIFY_TOUCH_CHECKPOINT: PrintLog(PRINT_NORMAL, "NOTIFY: TouchCheckpoint() -> %d", *param1); break;162case NOTIFY_ACT_FINISH: PrintLog(PRINT_NORMAL, "NOTIFY: ActFinish() -> %d", *param1); break;163case NOTIFY_1P_VS_SELECT: PrintLog(PRINT_NORMAL, "NOTIFY: 1PVSSelect() -> %d", *param1); break;164case NOTIFY_CONTROLLER_SUPPORT:165PrintLog(PRINT_NORMAL, "NOTIFY: ControllerSupport() -> %d", *param1);166SetGlobalVariableByName("game.callbackResult", 1);167break;168case NOTIFY_STAGE_RETRY: PrintLog(PRINT_NORMAL, "NOTIFY: StageRetry() -> %d", *param1); break;169case NOTIFY_SOUND_TRACK: PrintLog(PRINT_NORMAL, "NOTIFY: SoundTrack() -> %d", *param1); break;170case NOTIFY_GOOD_ENDING: PrintLog(PRINT_NORMAL, "NOTIFY: GoodEnding() -> %d", *param1); break;171case NOTIFY_BACK_TO_MAINMENU: PrintLog(PRINT_NORMAL, "NOTIFY: BackToMainMenu() -> %d", *param1); break;172case NOTIFY_LEVEL_SELECT_MENU: PrintLog(PRINT_NORMAL, "NOTIFY: LevelSelectMenu() -> %d", *param1); break;173case NOTIFY_PLAYER_SET: PrintLog(PRINT_NORMAL, "NOTIFY: PlayerSet() -> %d", *param1); break;174case NOTIFY_EXTRAS_MODE: PrintLog(PRINT_NORMAL, "NOTIFY: ExtrasMode() -> %d", *param1); break;175case NOTIFY_SPIN_DASH_TYPE: PrintLog(PRINT_NORMAL, "NOTIFY: SpindashType() -> %d", *param1); break;176case NOTIFY_TIME_OVER: PrintLog(PRINT_NORMAL, "NOTIFY: TimeOver() -> %d", *param1); break;177case NOTIFY_TIMEATTACK_MODE: PrintLog(PRINT_NORMAL, "NOTIFY: TimeAttackMode() -> %d", *param1); break;178case NOTIFY_STATS_BREAK_OBJECT: PrintLog(PRINT_NORMAL, "NOTIFY: StatsBreakObject() -> %d, %d", *param1, *param2); break;179case NOTIFY_STATS_SAVE_FUTURE: PrintLog(PRINT_NORMAL, "NOTIFY: StatsSaveFuture() -> %d", *param1); break;180case NOTIFY_STATS_CHARA_ACTION2: PrintLog(PRINT_NORMAL, "NOTIFY: StatsCharaAction2() -> %d, %d, %d", *param1, *param2, *param3); break;181}182}183184