Path: blob/main/RSDKv4/Debug.cpp
817 views
#include "RetroEngine.hpp"12bool endLine = true;3int touchFlags = 0;45int taListStore = 0;67void PrintLog(const char *msg, ...)8{9#ifndef RETRO_DISABLE_LOG10if (engineDebugMode || Engine.consoleEnabled) {11char buffer[0x100];1213// make the full string14va_list args;15va_start(args, msg);16vsprintf(buffer, msg, args);17if (endLine) {18printf("%s\n", buffer);19sprintf(buffer, "%s\n", buffer);20}21else {22printf("%s", buffer);23sprintf(buffer, "%s", buffer);24}2526if (engineDebugMode) {27char pathBuffer[0x100];28#if RETRO_PLATFORM == RETRO_UWP29if (!usingCWD)30sprintf(pathBuffer, "%s/log.txt", getResourcesPath());31else32sprintf(pathBuffer, "log.txt");33#elif RETRO_PLATFORM == RETRO_ANDROID34sprintf(pathBuffer, "%s/log.txt", gamePath);35__android_log_print(ANDROID_LOG_INFO, "RSDKv4", "%s", buffer);36#else37sprintf(pathBuffer, BASE_PATH "log.txt");38#endif39FileIO *file = fOpen(pathBuffer, "a");40if (file) {41fWrite(&buffer, 1, StrLength(buffer), file);42fClose(file);43}44}45}46#endif47}4849void PrintLog(const ushort *msg)50{51#ifndef RETRO_DISABLE_LOG52if (engineDebugMode || Engine.consoleEnabled) {53int mPos = 0;54while (msg[mPos]) {55printf("%lc", (ushort)msg[mPos]);56mPos++;57}58if (endLine)59printf("\n");6061if (engineDebugMode) {62char pathBuffer[0x100];63#if RETRO_PLATFORM == RETRO_UWP64if (!usingCWD)65sprintf(pathBuffer, "%s/log.txt", getResourcesPath());66else67sprintf(pathBuffer, "log.txt");68#elif RETRO_PLATFORM == RETRO_ANDROID69sprintf(pathBuffer, "%s/log.txt", gamePath);70__android_log_print(ANDROID_LOG_INFO, "RSDKv4", "%ls", (wchar_t *)msg);71#else72sprintf(pathBuffer, BASE_PATH "log.txt");73#endif74mPos = 0;75FileIO *file = fOpen(pathBuffer, "a");76if (file) {77while (msg[mPos]) {78fWrite(&msg[mPos], 2, 1, file);79mPos++;80}8182ushort el = '\n';83if (endLine)84fWrite(&el, 2, 1, file);85fClose(file);86}87}88}89#endif90}9192void InitDevMenu()93{94#if RETRO_USE_MOD_LOADER95for (int m = 0; m < modList.size(); ++m) ScanModFolder(&modList[m]);96#endif97// DrawStageGFXHQ = 0;98xScrollOffset = 0;99yScrollOffset = 0;100StopMusic(true);101StopAllSfx();102ReleaseStageSfx();103fadeMode = 0;104playerListPos = 0;105Engine.gameMode = ENGINE_DEVMENU;106ClearGraphicsData();107ClearAnimationData();108SetActivePalette(0, 0, 256);109textMenuSurfaceNo = SURFACE_COUNT - 1;110LoadGIFFile("Data/Game/SystemText.gif", SURFACE_COUNT - 1);111SetPaletteEntry(-1, 1, 0x00, 0x00, 0x00);112SetPaletteEntry(-1, 8, 0x80, 0x80, 0x80);113SetPaletteEntry(-1, 0xF0, 0x00, 0x00, 0x00);114SetPaletteEntry(-1, 0xFF, 0xFF, 0xFF, 0xFF);115SetTextMenu(DEVMENU_MAIN);116drawStageGFXHQ = false;117#if !RETRO_USE_ORIGINAL_CODE118RemoveNativeObjectType(PauseMenu_Create, PauseMenu_Main);119#endif120#if RETRO_HARDWARE_RENDER121render3DEnabled = false;122UpdateHardwareTextures();123#endif124}125void InitErrorMessage()126{127xScrollOffset = 0;128yScrollOffset = 0;129StopMusic(true);130StopAllSfx();131ReleaseStageSfx();132fadeMode = 0;133Engine.gameMode = ENGINE_DEVMENU;134ClearGraphicsData();135ClearAnimationData();136SetActivePalette(0, 0, 256);137textMenuSurfaceNo = SURFACE_COUNT - 1;138LoadGIFFile("Data/Game/SystemText.gif", SURFACE_COUNT - 1);139SetPaletteEntry(-1, 1, 0x00, 0x00, 0x00);140SetPaletteEntry(-1, 8, 0x80, 0x80, 0x80);141SetPaletteEntry(-1, 0xF0, 0x00, 0x00, 0x00);142SetPaletteEntry(-1, 0xFF, 0xFF, 0xFF, 0xFF);143gameMenu[0].alignment = 2;144gameMenu[0].selectionCount = 1;145gameMenu[0].selection1 = 0;146gameMenu[1].visibleRowCount = 0;147gameMenu[1].visibleRowOffset = 0;148stageMode = DEVMENU_SCRIPTERROR;149drawStageGFXHQ = false;150#if !RETRO_USE_ORIGINAL_CODE151RemoveNativeObjectType(PauseMenu_Create, PauseMenu_Main);152#endif153#if RETRO_HARDWARE_RENDER154render3DEnabled = false;155UpdateHardwareTextures();156#endif157}158void ProcessStageSelect()159{160ClearScreen(0xF0);161162CheckKeyDown(&keyDown);163CheckKeyPress(&keyPress);164165#if defined RETRO_USING_MOUSE || defined RETRO_USING_TOUCH166DrawSprite(32, 0x42, 16, 16, 78, 240, textMenuSurfaceNo);167DrawSprite(32, 0xB2, 16, 16, 95, 240, textMenuSurfaceNo);168DrawSprite(SCREEN_XSIZE - 32, SCREEN_YSIZE - 32, 16, 16, 112, 240, textMenuSurfaceNo);169#endif170171if (!keyDown.start && !keyDown.up && !keyDown.down) {172int tFlags = touchFlags;173touchFlags = 0;174175for (int t = 0; t < touches; ++t) {176if (touchDown[t]) {177if (touchX[t] < SCREEN_CENTERX) {178if (touchY[t] >= SCREEN_CENTERY) {179if (!(tFlags & 2))180keyPress.down = true;181else182touchFlags |= 1 << 1;183}184else {185if (!(tFlags & 1))186keyPress.up = true;187else188touchFlags |= 1 << 0;189}190}191else if (touchX[t] > SCREEN_CENTERX) {192if (touchY[t] > SCREEN_CENTERY) {193if (!(tFlags & 4))194keyPress.start = true;195else196touchFlags |= 1 << 2;197}198else {199if (!(tFlags & 8))200keyPress.B = true;201else202touchFlags |= 1 << 3;203}204}205}206}207208touchFlags |= (int)keyPress.up << 0;209touchFlags |= (int)keyPress.down << 1;210touchFlags |= (int)keyPress.start << 2;211touchFlags |= (int)keyPress.B << 3;212}213214switch (stageMode) {215case DEVMENU_MAIN: // Main Menu216{217if (keyPress.down)218gameMenu[0].selection2 += 2;219220if (keyPress.up)221gameMenu[0].selection2 -= 2;222223int count = 15;224#if RETRO_USE_MOD_LOADER225count += 2;226#endif227228if (gameMenu[0].selection2 > count)229gameMenu[0].selection2 = 9;230if (gameMenu[0].selection2 < 9)231gameMenu[0].selection2 = count;232233DrawTextMenu(&gameMenu[0], SCREEN_CENTERX, 72);234if (keyPress.start || keyPress.A) {235if (gameMenu[0].selection2 == 9) {236ClearGraphicsData();237ClearAnimationData();238activeStageList = 0;239stageMode = STAGEMODE_LOAD;240Engine.gameMode = ENGINE_MAINGAME;241stageListPosition = 0;242}243else if (gameMenu[0].selection2 == 11) {244SetupTextMenu(&gameMenu[0], 0);245AddTextMenuEntry(&gameMenu[0], "SELECT A PLAYER");246SetupTextMenu(&gameMenu[1], 0);247LoadConfigListText(&gameMenu[1], 0);248gameMenu[1].alignment = 0;249gameMenu[1].selectionCount = 1;250gameMenu[1].selection1 = 0;251stageMode = DEVMENU_PLAYERSEL;252}253else if (gameMenu[0].selection2 == 13) {254ClearNativeObjects();255Engine.gameMode = ENGINE_WAIT;256Engine.nativeMenuFadeIn = false;257#if !RETRO_USE_ORIGINAL_CODE258if (skipStartMenu) {259ClearGraphicsData();260ClearAnimationData();261activeStageList = 0;262stageMode = STAGEMODE_LOAD;263Engine.gameMode = ENGINE_MAINGAME;264stageListPosition = 0;265CREATE_ENTITY(RetroGameLoop);266if (Engine.gameDeviceType == RETRO_MOBILE)267CREATE_ENTITY(VirtualDPad);268}269else {270#endif271CREATE_ENTITY(SegaSplash);272#if !RETRO_USE_ORIGINAL_CODE273}274#endif275}276#if RETRO_USE_MOD_LOADER277else if (gameMenu[0].selection2 == 15) {278InitMods(); // reload mods279SetTextMenu(DEVMENU_MODMENU);280}281#endif282else {283#if RETRO_USE_MOD_LOADER284ExitGame();285#else286Engine.running = false;287#endif288}289}290else if (keyPress.B) {291ClearGraphicsData();292ClearAnimationData();293activeStageList = 0;294stageMode = STAGEMODE_LOAD;295Engine.gameMode = ENGINE_MAINGAME;296stageListPosition = 0;297}298break;299}300case DEVMENU_PLAYERSEL: // Selecting Player301{302if (keyPress.down)303++gameMenu[1].selection1;304if (keyPress.up)305--gameMenu[1].selection1;306if (gameMenu[1].selection1 == gameMenu[1].rowCount)307gameMenu[1].selection1 = 0;308309if (gameMenu[1].selection1 < 0)310gameMenu[1].selection1 = gameMenu[1].rowCount - 1;311312DrawTextMenu(&gameMenu[0], SCREEN_CENTERX - 4, 72);313DrawTextMenu(&gameMenu[1], SCREEN_CENTERX - 40, 96);314if (keyPress.start || keyPress.A) {315playerListPos = gameMenu[1].selection1;316SetTextMenu(DEVMENU_STAGELISTSEL);317}318else if (keyPress.B) {319SetTextMenu(DEVMENU_MAIN);320}321break;322}323case DEVMENU_STAGELISTSEL: // Selecting Category324{325if (keyPress.down)326gameMenu[0].selection2 += 2;327if (keyPress.up)328gameMenu[0].selection2 -= 2;329330if (gameMenu[0].selection2 > 9)331gameMenu[0].selection2 = 3;332333if (gameMenu[0].selection2 < 3)334gameMenu[0].selection2 = 9;335336DrawTextMenu(&gameMenu[0], SCREEN_CENTERX - 80, 72);337bool nextMenu = false;338switch (gameMenu[0].selection2) {339case 3: // Presentation340if (stageListCount[0] > 0)341nextMenu = true;342activeStageList = 0;343break;344case 5: // Regular345if (stageListCount[1] > 0)346nextMenu = true;347activeStageList = 1;348break;349case 7: // Special350if (stageListCount[3] > 0)351nextMenu = true;352activeStageList = 3;353break;354case 9: // Bonus355if (stageListCount[2] > 0)356nextMenu = true;357activeStageList = 2;358break;359default: break;360}361362if ((keyPress.start || keyPress.A) && nextMenu) {363SetupTextMenu(&gameMenu[0], 0);364AddTextMenuEntry(&gameMenu[0], "SELECT A STAGE");365SetupTextMenu(&gameMenu[1], 0);366LoadConfigListText(&gameMenu[1], ((gameMenu[0].selection2 - 3) >> 1) + 1);367gameMenu[1].alignment = 1;368gameMenu[1].selectionCount = 3;369gameMenu[1].selection1 = 0;370if (gameMenu[1].rowCount > 18)371gameMenu[1].visibleRowCount = 18;372else373gameMenu[1].visibleRowCount = 0;374375gameMenu[0].alignment = 2;376gameMenu[0].selectionCount = 1;377gameMenu[1].timer = 0;378stageMode = DEVMENU_STAGESEL;379}380else if (keyPress.B) {381SetupTextMenu(&gameMenu[0], 0);382AddTextMenuEntry(&gameMenu[0], "SELECT A PLAYER");383SetupTextMenu(&gameMenu[1], 0);384LoadConfigListText(&gameMenu[1], 0);385gameMenu[0].alignment = 2;386gameMenu[1].alignment = 0;387gameMenu[1].selectionCount = 1;388gameMenu[1].visibleRowCount = 0;389gameMenu[1].visibleRowOffset = 0;390gameMenu[1].selection1 = playerListPos;391stageMode = DEVMENU_PLAYERSEL;392}393break;394}395case DEVMENU_STAGESEL: // Selecting Stage396{397if (keyDown.down) {398gameMenu[1].timer += 1;399if (gameMenu[1].timer > 8) {400gameMenu[1].timer = 0;401keyPress.down = true;402}403}404else {405if (keyDown.up) {406gameMenu[1].timer -= 1;407if (gameMenu[1].timer < -8) {408gameMenu[1].timer = 0;409keyPress.up = true;410}411}412else {413gameMenu[1].timer = 0;414}415}416if (keyPress.down) {417gameMenu[1].selection1++;418if (gameMenu[1].selection1 - gameMenu[1].visibleRowOffset >= gameMenu[1].visibleRowCount) {419gameMenu[1].visibleRowOffset += 1;420}421}422if (keyPress.up) {423gameMenu[1].selection1--;424if (gameMenu[1].selection1 - gameMenu[1].visibleRowOffset < 0) {425gameMenu[1].visibleRowOffset -= 1;426}427}428if (gameMenu[1].selection1 == gameMenu[1].rowCount) {429gameMenu[1].selection1 = 0;430gameMenu[1].visibleRowOffset = 0;431}432if (gameMenu[1].selection1 < 0) {433gameMenu[1].selection1 = gameMenu[1].rowCount - 1;434gameMenu[1].visibleRowOffset = gameMenu[1].rowCount - gameMenu[1].visibleRowCount;435}436437DrawTextMenu(&gameMenu[0], SCREEN_CENTERX - 4, 40);438DrawTextMenu(&gameMenu[1], SCREEN_CENTERX + 100, 64);439if (keyPress.start || keyPress.A) {440debugMode = keyDown.A;441stageMode = STAGEMODE_LOAD;442Engine.gameMode = ENGINE_MAINGAME;443stageListPosition = gameMenu[1].selection1;444SetGlobalVariableByName("options.gameMode", 0);445SetGlobalVariableByName("lampPostID", 0); // For S1446SetGlobalVariableByName("starPostID", 0); // For S2447}448else if (keyPress.B) {449SetTextMenu(DEVMENU_STAGELISTSEL);450}451break;452}453case DEVMENU_SCRIPTERROR: // Script Error454{455DrawTextMenu(&gameMenu[0], SCREEN_CENTERX, 72);456if (keyPress.start || keyPress.A) {457SetTextMenu(DEVMENU_MAIN);458}459else if (keyPress.B) {460ClearGraphicsData();461ClearAnimationData();462activeStageList = 0;463stageMode = DEVMENU_STAGESEL;464Engine.gameMode = ENGINE_MAINGAME;465stageListPosition = 0;466}467else if (keyPress.C) {468ClearGraphicsData();469ClearAnimationData();470stageMode = STAGEMODE_LOAD;471Engine.gameMode = ENGINE_MAINGAME;472}473break;474}475#if RETRO_USE_MOD_LOADER476case DEVMENU_MODMENU: // Mod Menu477{478int preOption = gameMenu[1].selection1;479if (keyDown.down) {480gameMenu[1].timer++;481if (gameMenu[1].timer > 8) {482gameMenu[1].timer = 0;483keyPress.down = true;484}485}486else {487if (keyDown.up) {488gameMenu[1].timer--;489if (gameMenu[1].timer < -8) {490gameMenu[1].timer = 0;491keyPress.up = true;492}493}494else {495gameMenu[1].timer = 0;496}497}498499if (keyPress.down) {500gameMenu[1].selection1++;501if (gameMenu[1].selection1 - gameMenu[1].visibleRowOffset >= gameMenu[1].visibleRowCount) {502gameMenu[1].visibleRowOffset++;503}504}505506if (keyPress.up) {507gameMenu[1].selection1--;508if (gameMenu[1].selection1 - gameMenu[1].visibleRowOffset < 0 && gameMenu[1].visibleRowOffset > 0) {509gameMenu[1].visibleRowOffset--;510}511}512513if (gameMenu[1].selection1 >= gameMenu[1].rowCount) {514if (keyDown.C) {515gameMenu[1].selection1--;516gameMenu[1].visibleRowOffset--;517}518else {519gameMenu[1].selection1 = 0;520gameMenu[1].visibleRowOffset = 0;521}522}523524if (gameMenu[1].selection1 < 0) {525if (keyDown.C) {526gameMenu[1].selection1++;527}528else {529gameMenu[1].selection1 = gameMenu[1].rowCount - 1;530gameMenu[1].visibleRowOffset = gameMenu[1].rowCount - gameMenu[1].visibleRowCount;531}532}533gameMenu[1].selection2 = gameMenu[1].selection1; // its a bug fix LOL534535char buffer[0x100];536if (gameMenu[1].selection1 < modList.size() && (keyPress.A || keyPress.start || keyPress.left || keyPress.right)) {537modList[gameMenu[1].selection1].active ^= 1;538StrCopy(buffer, modList[gameMenu[1].selection1].name.c_str());539StrAdd(buffer, ": ");540StrAdd(buffer, (modList[gameMenu[1].selection1].active ? " Active" : "Inactive"));541EditTextMenuEntry(&gameMenu[1], buffer, gameMenu[1].selection1);542}543else if (keyDown.C && gameMenu[1].selection1 != preOption) {544int visibleOffset = gameMenu[1].visibleRowOffset;545int option = gameMenu[1].selection1;546ModInfo swap = modList[preOption];547modList[preOption] = modList[option];548modList[option] = swap;549SetTextMenu(DEVMENU_MODMENU);550gameMenu[1].selection1 = option;551gameMenu[1].visibleRowOffset = visibleOffset;552}553else if (keyPress.B) {554RefreshEngine();555556if (Engine.modMenuCalled) {557stageMode = STAGEMODE_LOAD;558Engine.gameMode = ENGINE_MAINGAME;559Engine.modMenuCalled = false;560561if (stageListPosition >= stageListCount[activeStageList]) {562activeStageList = 0;563stageListPosition = 0;564}565}566else {567SetTextMenu(DEVMENU_MAIN);568569SetPaletteEntry(-1, 1, 0x00, 0x00, 0x00);570SetPaletteEntry(-1, 8, 0x80, 0x80, 0x80);571SetPaletteEntry(-1, 0xF0, 0x00, 0x00, 0x00);572SetPaletteEntry(-1, 0xFF, 0xFF, 0xFF, 0xFF);573}574}575576DrawTextMenu(&gameMenu[0], SCREEN_CENTERX - 4, 40);577DrawTextMenu(&gameMenu[1], SCREEN_CENTERX + 100, 64);578break;579}580#endif581default: break;582}583}584585void SetTextMenu(int sm)586{587stageMode = sm;588SetupTextMenu(&gameMenu[0], 0);589SetupTextMenu(&gameMenu[1], 0);590switch (sm) {591case DEVMENU_MAIN: {592AddTextMenuEntry(&gameMenu[0], "RETRO ENGINE DEV MENU");593AddTextMenuEntry(&gameMenu[0], " ");594char version[0x80];595StrCopy(version, Engine.gameWindowText);596StrAdd(version, " Version");597AddTextMenuEntry(&gameMenu[0], version);598AddTextMenuEntry(&gameMenu[0], Engine.gameVersion);599#ifdef RETRO_DEV_EXTRA600AddTextMenuEntry(&gameMenu[0], RETRO_DEV_EXTRA);601#else602AddTextMenuEntry(&gameMenu[0], " ");603#endif604AddTextMenuEntry(&gameMenu[0], " ");605AddTextMenuEntry(&gameMenu[0], " ");606AddTextMenuEntry(&gameMenu[0], " ");607AddTextMenuEntry(&gameMenu[0], " ");608AddTextMenuEntry(&gameMenu[0], "START GAME");609AddTextMenuEntry(&gameMenu[0], " ");610AddTextMenuEntry(&gameMenu[0], "STAGE SELECT");611#if !RETRO_USE_ORIGINAL_CODE612AddTextMenuEntry(&gameMenu[0], " ");613AddTextMenuEntry(&gameMenu[0], "START MENU");614#if RETRO_USE_MOD_LOADER615AddTextMenuEntry(&gameMenu[0], " ");616AddTextMenuEntry(&gameMenu[0], "MODS");617#endif618AddTextMenuEntry(&gameMenu[0], " ");619AddTextMenuEntry(&gameMenu[0], "EXIT GAME");620#endif621gameMenu[0].alignment = 2;622gameMenu[0].selectionCount = 2;623gameMenu[0].selection1 = 0;624gameMenu[0].selection2 = 9;625gameMenu[1].visibleRowCount = 0;626gameMenu[1].visibleRowOffset = 0;627break;628}629case DEVMENU_STAGELISTSEL:630AddTextMenuEntry(&gameMenu[0], "SELECT A STAGE LIST");631AddTextMenuEntry(&gameMenu[0], " ");632AddTextMenuEntry(&gameMenu[0], " ");633AddTextMenuEntry(&gameMenu[0], " PRESENTATION");634AddTextMenuEntry(&gameMenu[0], " ");635AddTextMenuEntry(&gameMenu[0], " REGULAR");636AddTextMenuEntry(&gameMenu[0], " ");637AddTextMenuEntry(&gameMenu[0], " SPECIAL");638AddTextMenuEntry(&gameMenu[0], " ");639AddTextMenuEntry(&gameMenu[0], " BONUS");640gameMenu[0].alignment = 0;641gameMenu[0].selection2 = 3;642gameMenu[0].selectionCount = 2;643break;644#if RETRO_USE_MOD_LOADER645case DEVMENU_MODMENU:646SetupTextMenu(&gameMenu[0], 0);647AddTextMenuEntry(&gameMenu[0], "MOD LIST");648SetupTextMenu(&gameMenu[1], 0);649650char buffer[0x100];651for (int m = 0; m < modList.size(); ++m) {652StrCopy(buffer, modList[m].name.c_str());653StrAdd(buffer, ": ");654StrAdd(buffer, modList[m].active ? " Active" : "Inactive");655AddTextMenuEntry(&gameMenu[1], buffer);656gameMenu[1].entryHighlight[m] = false;657}658659gameMenu[1].alignment = 1;660gameMenu[1].selectionCount = 3;661gameMenu[1].selection1 = 0;662if (gameMenu[1].rowCount > 18)663gameMenu[1].visibleRowCount = 18;664else665gameMenu[1].visibleRowCount = 0;666667gameMenu[0].alignment = 2;668gameMenu[0].selectionCount = 1;669gameMenu[1].timer = 0;670gameMenu[1].visibleRowOffset = 0;671break;672#endif673}674}675676677