Skip to content

Commit 6ecf959

Browse files
authored
Add custom Callbacks for window settings (#260)
Adds the following callbacks: - GetWindowInfo : sets the current value of various window settings to variables of the same Engine.SettingName (e.g. custom var Engine.WindowScale gets the current value of WindowScale) - SetWindowChanges : sets the current window settings to the values found in its equivalent Engine.SettingName (e.g. ScreenWidth values gets set to that of Engine.ScreenWidth) - OpenModMenu : works like v4's
1 parent 7303418 commit 6ecf959

File tree

3 files changed

+130
-29
lines changed

3 files changed

+130
-29
lines changed

RSDKv3/Debug.cpp

Lines changed: 41 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -626,38 +626,50 @@ void ProcessStageSelect()
626626
}
627627
else if (keyPress.B) {
628628
RefreshEngine();
629-
630-
stageMode = DEVMENU_MAIN;
631-
SetupTextMenu(&gameMenu[0], 0);
632-
AddTextMenuEntry(&gameMenu[0], "RETRO ENGINE DEV MENU");
633-
AddTextMenuEntry(&gameMenu[0], " ");
634-
char version[0x80];
635-
StrCopy(version, Engine.gameWindowText);
636-
StrAdd(version, " Version");
637-
AddTextMenuEntry(&gameMenu[0], version);
638-
AddTextMenuEntry(&gameMenu[0], Engine.gameVersion);
629+
630+
if (Engine.modMenuCalled) {
631+
stageMode = STAGEMODE_LOAD;
632+
Engine.gameMode = ENGINE_MAINGAME;
633+
Engine.modMenuCalled = false;
634+
635+
if (stageListPosition >= stageListCount[activeStageList]) {
636+
activeStageList = 0;
637+
stageListPosition = 0;
638+
}
639+
}
640+
else {
641+
stageMode = DEVMENU_MAIN;
642+
SetupTextMenu(&gameMenu[0], 0);
643+
AddTextMenuEntry(&gameMenu[0], "RETRO ENGINE DEV MENU");
644+
AddTextMenuEntry(&gameMenu[0], " ");
645+
char version[0x80];
646+
StrCopy(version, Engine.gameWindowText);
647+
StrAdd(version, " Version");
648+
AddTextMenuEntry(&gameMenu[0], version);
649+
AddTextMenuEntry(&gameMenu[0], Engine.gameVersion);
639650
#ifdef RETRO_DEV_EXTRA
640-
AddTextMenuEntry(&gameMenu[0], RETRO_DEV_EXTRA);
651+
AddTextMenuEntry(&gameMenu[0], RETRO_DEV_EXTRA);
641652
#else
642-
AddTextMenuEntry(&gameMenu[0], " ");
653+
AddTextMenuEntry(&gameMenu[0], " ");
643654
#endif
644-
AddTextMenuEntry(&gameMenu[0], " ");
645-
AddTextMenuEntry(&gameMenu[0], " ");
646-
AddTextMenuEntry(&gameMenu[0], " ");
647-
AddTextMenuEntry(&gameMenu[0], " ");
648-
AddTextMenuEntry(&gameMenu[0], "START GAME");
649-
AddTextMenuEntry(&gameMenu[0], " ");
650-
AddTextMenuEntry(&gameMenu[0], "STAGE SELECT");
651-
AddTextMenuEntry(&gameMenu[0], " ");
652-
AddTextMenuEntry(&gameMenu[0], "MODS");
653-
AddTextMenuEntry(&gameMenu[0], " ");
654-
AddTextMenuEntry(&gameMenu[0], "EXIT GAME");
655-
gameMenu[0].alignment = 2;
656-
gameMenu[0].selectionCount = 2;
657-
gameMenu[0].selection1 = 0;
658-
gameMenu[0].selection2 = 9;
659-
gameMenu[1].visibleRowCount = 0;
660-
gameMenu[1].visibleRowOffset = 0;
655+
AddTextMenuEntry(&gameMenu[0], " ");
656+
AddTextMenuEntry(&gameMenu[0], " ");
657+
AddTextMenuEntry(&gameMenu[0], " ");
658+
AddTextMenuEntry(&gameMenu[0], " ");
659+
AddTextMenuEntry(&gameMenu[0], "START GAME");
660+
AddTextMenuEntry(&gameMenu[0], " ");
661+
AddTextMenuEntry(&gameMenu[0], "STAGE SELECT");
662+
AddTextMenuEntry(&gameMenu[0], " ");
663+
AddTextMenuEntry(&gameMenu[0], "MODS");
664+
AddTextMenuEntry(&gameMenu[0], " ");
665+
AddTextMenuEntry(&gameMenu[0], "EXIT GAME");
666+
gameMenu[0].alignment = 2;
667+
gameMenu[0].selectionCount = 2;
668+
gameMenu[0].selection1 = 0;
669+
gameMenu[0].selection2 = 9;
670+
gameMenu[1].visibleRowCount = 0;
671+
gameMenu[1].visibleRowOffset = 0;
672+
}
661673
}
662674

663675
DrawTextMenu(&gameMenu[0], SCREEN_CENTERX - 4, 40);

RSDKv3/RetroEngine.cpp

Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -459,7 +459,43 @@ void RetroEngine::Run()
459459
if (ProcessVideo() == 1)
460460
gameMode = ENGINE_MAINGAME;
461461
break;
462+
463+
#if RETRO_USE_MOD_LOADER
464+
case ENGINE_INITMODMENU:
465+
Engine.LoadGameConfig("Data/Game/GameConfig.bin");
466+
InitDevMenu();
467+
468+
ResetCurrentStageFolder();
469+
470+
SetupTextMenu(&gameMenu[0], 0);
471+
AddTextMenuEntry(&gameMenu[0], "MOD LIST");
472+
SetupTextMenu(&gameMenu[1], 0);
473+
InitMods();
474+
475+
char buffer[0x100];
476+
for (int m = 0; m < modList.size(); ++m) {
477+
StrCopy(buffer, modList[m].name.c_str());
478+
StrAdd(buffer, ": ");
479+
StrAdd(buffer, modList[m].active ? " Active" : "Inactive");
480+
AddTextMenuEntry(&gameMenu[1], buffer);
481+
gameMenu[1].entryHighlight[m] = false;
482+
}
462483

484+
gameMenu[1].alignment = 1;
485+
gameMenu[1].selectionCount = 3;
486+
gameMenu[1].selection1 = 0;
487+
if (gameMenu[1].rowCount > 18)
488+
gameMenu[1].visibleRowCount = 18;
489+
else
490+
gameMenu[1].visibleRowCount = 0;
491+
492+
gameMenu[0].alignment = 2;
493+
gameMenu[0].selectionCount = 1;
494+
gameMenu[1].timer = 0;
495+
gameMenu[1].visibleRowOffset = 0;
496+
stageMode = DEVMENU_MODMENU;
497+
break;
498+
#endif
463499
default: break;
464500
}
465501
}
@@ -1423,6 +1459,49 @@ void RetroEngine::Callback(int callbackID)
14231459
#if RETRO_USE_MOD_LOADER
14241460
case CALLBACK_SET1P: activePlayerCount = 1; break;
14251461
case CALLBACK_SET2P: activePlayerCount = 2; break;
1462+
case CALLBACK_GETWINDOWINFO:
1463+
SetGlobalVariableByName("Engine.Fullscreen", Engine.isFullScreen);
1464+
SetGlobalVariableByName("Engine.Borderless", Engine.borderless);
1465+
SetGlobalVariableByName("Engine.VSync", Engine.vsync);
1466+
SetGlobalVariableByName("Engine.ScalingMode", Engine.scalingMode);
1467+
SetGlobalVariableByName("Engine.WindowScale", Engine.windowScale);
1468+
SetGlobalVariableByName("Engine.ScreenWidth", SCREEN_XSIZE);
1469+
SetGlobalVariableByName("Engine.HardwareRenderer", Engine.gameRenderType == "HW_Rendering");
1470+
break;
1471+
case CALLBACK_SETWINDOWCHANGES:
1472+
Engine.startFullScreen = Engine.isFullScreen; // Account for f4 toggle
1473+
for (int v = 0; v < globalVariablesCount; ++v) {
1474+
if (StrComp("Engine.Fullscreen", globalVariableNames[v])){
1475+
Engine.startFullScreen = globalVariables[v];
1476+
Engine.isFullScreen = Engine.startFullScreen;
1477+
}
1478+
else if (StrComp("Engine.Borderless", globalVariableNames[v]))
1479+
Engine.borderless = globalVariables[v];
1480+
else if (StrComp("Engine.VSync", globalVariableNames[v]))
1481+
Engine.vsync = globalVariables[v];
1482+
else if (StrComp("Engine.ScalingMode", globalVariableNames[v]))
1483+
Engine.scalingMode = globalVariables[v];
1484+
else if (StrComp("Engine.WindowScale", globalVariableNames[v]))
1485+
Engine.windowScale = globalVariables[v];
1486+
else if (StrComp("Engine.ScreenWidth", globalVariableNames[v])){
1487+
SCREEN_XSIZE = globalVariables[v];
1488+
SCREEN_XSIZE_CONFIG = SCREEN_XSIZE;
1489+
}
1490+
else if (StrComp("Engine.HardwareRenderer", globalVariableNames[v]))
1491+
Engine.gameRenderType = gameRenderTypes[globalVariables[v]];
1492+
}
1493+
#if RETRO_USING_OPENGL
1494+
for (int i = 0; i < HW_TEXTURE_COUNT; ++i) {
1495+
glDeleteTextures(1, &gfxTextureID[i]);
1496+
}
1497+
#endif
1498+
ReleaseRenderDevice();
1499+
InitRenderDevice();
1500+
break;
1501+
case CALLBACK_OPENMODMENU:
1502+
Engine.gameMode = ENGINE_INITMODMENU;
1503+
Engine.modMenuCalled = true;
1504+
break;
14261505
#endif
14271506
}
14281507
}

RSDKv3/RetroEngine.hpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,9 @@ enum RetroStates {
222222
ENGINE_PAUSE = 7,
223223
ENGINE_WAIT = 8,
224224
ENGINE_VIDEOWAIT = 9,
225+
#if RETRO_USE_MOD_LOADER
226+
ENGINE_INITMODMENU = 0x82,
227+
#endif
225228
};
226229

227230
enum RetroEngineMessages {
@@ -327,6 +330,9 @@ enum RetroEngineCallbacks {
327330
// Mod CBs start at 0x1000
328331
CALLBACK_SET1P = 0x1001,
329332
CALLBACK_SET2P = 0x1002,
333+
CALLBACK_GETWINDOWINFO = 0x1003,
334+
CALLBACK_SETWINDOWCHANGES = 0x1004,
335+
CALLBACK_OPENMODMENU = 0x1005,
330336
#endif
331337
};
332338

@@ -517,6 +523,10 @@ class RetroEngine
517523
const char *gameHapticSetting = "No_Haptics";
518524
#endif
519525

526+
#if RETRO_USE_MOD_LOADER
527+
bool modMenuCalled = false;
528+
#endif
529+
520530
int gameTypeID = 0;
521531
const char *releaseType = "Use_Standalone";
522532

0 commit comments

Comments
 (0)