Path: blob/master/SonicMania/Objects/Helpers/Options.c
338 views
// ---------------------------------------------------------------------1// RSDK Project: Sonic Mania2// Object Description: Options Object3// Object Author: Christian Whitehead/Simon Thomley/Hunter Bridges4// Decompiled by: Rubberduckycooly & RMGRich5// ---------------------------------------------------------------------67#include "Game.h"89ObjectOptions *Options;1011void Options_Update(void) {}1213void Options_LateUpdate(void) {}1415void Options_StaticUpdate(void) {}1617void Options_Draw(void) {}1819void Options_Create(void *data) {}2021void Options_StageLoad(void)22{23#if !MANIA_USE_PLUS24Options->changed = false;25if (sku_platform == PLATFORM_PC || sku_platform == PLATFORM_DEV) {26Options_Reload();27}28else {29OptionsRAM *options = Options_GetOptionsRAM();3031options->vSync = false;32options->windowed = false;33options->windowBorder = false;34options->tripleBuffering = false;35}36#endif37}3839OptionsRAM *Options_GetOptionsRAM(void) { return (OptionsRAM *)globals->optionsRAM; }4041void Options_Reload(void)42{43OptionsRAM *options = Options_GetOptionsRAM();4445options->overrideLanguage = true;4647options->screenShader = RSDK.GetVideoSetting(VIDEOSETTING_SHADERID) % 4;48options->volMusic = RSDK.GetVideoSetting(VIDEOSETTING_STREAM_VOL);49options->volSfx = RSDK.GetVideoSetting(VIDEOSETTING_SFX_VOL);50options->language = RSDK.GetVideoSetting(VIDEOSETTING_LANGUAGE);51options->vSync = RSDK.GetVideoSetting(VIDEOSETTING_VSYNC);52options->windowBorder = RSDK.GetVideoSetting(VIDEOSETTING_BORDERED);53options->windowed = RSDK.GetVideoSetting(VIDEOSETTING_WINDOWED);54options->tripleBuffering = RSDK.GetVideoSetting(VIDEOSETTING_TRIPLEBUFFERED);5556Options_GetWinSize();5758LogHelpers_Print("optionsPtr->screenShader = %d", options->screenShader);59LogHelpers_Print("optionsPtr->volMusic = %d", options->volMusic);60LogHelpers_Print("optionsPtr->volSfx = %d", options->volSfx);61LogHelpers_Print("optionsPtr->language = %d", options->language);62LogHelpers_Print("optionsPtr->overrideLanguage = %d", options->overrideLanguage);63LogHelpers_Print("optionsPtr->vsync = %d", options->vSync);64LogHelpers_Print("optionsPtr->tripleBuffering = %d", options->tripleBuffering);65LogHelpers_Print("optionsPtr->windowBorder = %d", options->windowBorder);66LogHelpers_Print("optionsPtr->windowed = %d", options->windowed);67LogHelpers_Print("optionsPtr->windowSize = %d", options->windowSize);68}6970void Options_GetWinSize(void)71{72OptionsRAM *options = Options_GetOptionsRAM();7374bool32 windowed = RSDK.GetVideoSetting(VIDEOSETTING_WINDOWED);75if (!windowed) {76options->windowSize = 4;77}78else {79int32 width = RSDK.GetVideoSetting(VIDEOSETTING_WINDOW_WIDTH);8081if (width <= WIDE_SCR_XSIZE)82options->windowSize = 0;83else if (width <= WIDE_SCR_XSIZE * 2)84options->windowSize = 1;85else if (width <= WIDE_SCR_XSIZE * 3)86options->windowSize = 2;87else88options->windowSize = 3;89}90}9192void Options_LoadCallback(bool32 success)93{94if (success) {95Localization->loaded = false;9697Localization_LoadStrings();98UIWidgets_ApplyLanguage();99UIHeading_LoadSprites();100}101}102103void Options_LoadFile(void (*callback)(bool32 success))104{105if (sku_platform != PLATFORM_PC && sku_platform != PLATFORM_DEV) {106if (globals->optionsLoaded != STATUS_CONTINUE) {107if (globals->optionsLoaded == STATUS_OK) {108if (callback)109callback(true);110}111else {112globals->optionsLoaded = STATUS_CONTINUE;113Options->loadEntityPtr = SceneInfo->entity;114Options->loadCallback = callback;115API_LoadUserFile("Options.bin", globals->optionsRAM, sizeof(globals->optionsRAM), Options_LoadOptionsCallback);116}117}118}119else {120globals->optionsLoaded = STATUS_OK;121if (callback)122callback(true);123}124}125126#if MANIA_USE_PLUS127void Options_SaveFile(void (*callback)(bool32 success))128#else129void Options_SaveFile(void (*callback)(void))130#endif131{132if (Options->changed) {133if (sku_platform != PLATFORM_PC && sku_platform != PLATFORM_DEV) {134if (globals->optionsLoaded == STATUS_OK) {135Options->saveEntityPtr = SceneInfo->entity;136Options->saveCallback = callback;137138#if MANIA_USE_PLUS139API_SaveUserFile("Options.bin", globals->optionsRAM, sizeof(globals->optionsRAM), Options_SaveOptionsCallback, false);140#else141API_SaveUserFile("Options.bin", globals->optionsRAM, sizeof(globals->optionsRAM), Options_SaveOptionsCallback);142#endif143}144else {145Options->changed = false;146#if MANIA_USE_PLUS147if (callback)148callback(false);149#else150if (callback)151callback();152#endif153}154155return;156}157else {158#if MANIA_USE_PLUS159RSDK.SetVideoSetting(VIDEOSETTING_WRITE, true);160#else161APICallback_SaveSettingsINI();162#endif163Options_Reload();164}165}166167#if MANIA_USE_PLUS168if (callback)169callback(true);170#else171if (callback)172callback();173#endif174}175176void Options_SetLanguage(int32 language)177{178OptionsRAM *options = Options_GetOptionsRAM();179180if (language >= 0) {181options->language = language;182options->overrideLanguage = true;183}184else {185options->language = -1;186options->overrideLanguage = false;187}188189if (sku_platform == PLATFORM_PC || sku_platform == PLATFORM_DEV)190RSDK.SetVideoSetting(VIDEOSETTING_LANGUAGE, language);191192Options->changed = true;193}194195void Options_LoadValuesFromSettings(OptionsRAM *options)196{197Localization->language = options->overrideLanguage ? options->language : sku_language;198199if (!options->overrideShader)200options->screenShader = RSDK.GetVideoSetting(VIDEOSETTING_SHADERID) % 4;201202if (!options->overrideMusicVol)203options->volMusic = RSDK.GetVideoSetting(VIDEOSETTING_STREAM_VOL);204205if (!options->overrideSfxVol)206options->volSfx = RSDK.GetVideoSetting(VIDEOSETTING_SFX_VOL);207}208209void Options_LoadOptionsCallback(int32 status)210{211OptionsRAM *options = Options_GetOptionsRAM();212bool32 success = false;213214#if MANIA_USE_PLUS215if (status == STATUS_OK || status == STATUS_NOTFOUND) {216#else217if (status) {218#endif219success = true;220globals->optionsLoaded = STATUS_OK;221222LogHelpers_Print("dataPtr.language = %d", options->language);223LogHelpers_Print("dataPtr.overrideLanguage = %d", options->overrideLanguage);224Options_LoadValuesFromSettings(Options_GetOptionsRAM());225226RSDK.SetVideoSetting(VIDEOSETTING_SHADERID, options->screenShader);227RSDK.SetVideoSetting(VIDEOSETTING_STREAM_VOL, options->volMusic);228RSDK.SetVideoSetting(VIDEOSETTING_SFX_VOL, options->volSfx);229}230else {231success = false;232globals->optionsLoaded = STATUS_ERROR;233}234235if (Options->loadCallback) {236Entity *entStore = SceneInfo->entity;237if (Options->loadEntityPtr)238SceneInfo->entity = Options->loadEntityPtr;239Options->loadCallback(success);240SceneInfo->entity = entStore;241242Options->loadCallback = NULL;243Options->loadEntityPtr = NULL;244}245}246247void Options_SaveOptionsCallback(int32 status)248{249Options->changed = false;250if (Options->saveCallback) {251Entity *entStore = SceneInfo->entity;252if (Options->saveEntityPtr)253SceneInfo->entity = Options->saveEntityPtr;254255#if MANIA_USE_PLUS256Options->saveCallback(status == STATUS_OK);257#else258Options->saveCallback();259#endif260SceneInfo->entity = entStore;261262Options->saveCallback = NULL;263Options->saveEntityPtr = NULL;264}265}266267#if GAME_INCLUDE_EDITOR268void Options_EditorDraw(void) {}269270void Options_EditorLoad(void) {}271#endif272273void Options_Serialize(void) {}274275276