Files
2ship2harkinian-Android/mm/2s2h/DeveloperTools/BetterMapSelect.c
briaguya 6da0031295 run clang format (#448)
* add linux clang format script

* first shot at powershell

* whoops

* webrequest is slow, try webclient

* just get the one file

* simplify and maybe make it work?

* whoops again

* try a different suggestion

* why is it always windows

* again

* try again

* bit of path stuff

* chmod +x

* add action to check

* fix workflow name

* run clang format
2024-05-22 09:05:05 -05:00

225 lines
7.7 KiB
C

#include "BetterMapSelect.h"
#include "overlays/gamestates/ovl_file_choose/z_file_select.h"
#include "overlays/gamestates/ovl_select/z_select.h"
#include <libultraship/bridge.h>
extern SceneSelectEntry sScenes[143];
void BetterMapSelect_LoadGame(MapSelectState* mapSelectState, u32 entrance, s32 spawn) {
CVarSetInteger("gDeveloperTools.BetterMapSelect.CurrentScene", mapSelectState->currentScene);
CVarSetInteger("gDeveloperTools.BetterMapSelect.TopDisplayedScene", mapSelectState->topDisplayedScene);
CVarSetInteger("gDeveloperTools.BetterMapSelect.PageDownIndex", mapSelectState->pageDownIndex);
CVarSave();
MapSelect_LoadGame(mapSelectState, entrance, spawn);
}
void BetterMapSelect_LoadFileSelect(MapSelectState* mapSelectState) {
CVarSetInteger("gDeveloperTools.BetterMapSelect.CurrentScene", mapSelectState->currentScene);
CVarSetInteger("gDeveloperTools.BetterMapSelect.TopDisplayedScene", mapSelectState->topDisplayedScene);
CVarSetInteger("gDeveloperTools.BetterMapSelect.PageDownIndex", mapSelectState->pageDownIndex);
CVarSave();
STOP_GAMESTATE(&mapSelectState->state);
SET_NEXT_GAMESTATE(&mapSelectState->state, FileSelect_Init, sizeof(FileSelectState));
}
// 2S2H Added columns to scene table: entranceSceneId, betterMapSelectIndex, humanName
#define DEFINE_SCENE(_name, _enumValue, _textId, _drawConfig, _restrictionFlags, _persistentCycleFlags, \
entranceSceneId, _betterMapSelectIndex, humanName) \
{ humanName, BetterMapSelect_LoadGame, ENTRANCE(entranceSceneId, 0) },
#define DEFINE_SCENE_UNSET(_enumValue)
static SceneSelectEntry sBetterScenes[104] = {
#include "tables/scene_table.h"
{ "File Select", BetterMapSelect_LoadFileSelect, 0 },
{ "Title Screen", MapSelect_LoadConsoleLogo, 0 },
};
#undef DEFINE_SCENE
#undef DEFINE_SCENE_UNSET
// 2S2H Added columns to scene table: entranceSceneId, betterMapSelectIndex, humanName
#define DEFINE_SCENE(_name, _enumValue, _textId, _drawConfig, _restrictionFlags, _persistentCycleFlags, \
entranceSceneId, betterMapSelectIndex, humanName) \
{ humanName, ENTRANCE(entranceSceneId, 0), betterMapSelectIndex },
#define DEFINE_SCENE_UNSET(_enumValue)
typedef struct {
char* name;
s32 entrance;
s32 index;
} BetterMapSelectInfoEntry;
static BetterMapSelectInfoEntry sBetterMapSelectInfo[102] = {
#include "tables/scene_table.h"
};
#undef DEFINE_SCENE
#undef DEFINE_SCENE_UNSET
static bool isBetterMapSelect = false;
static bool isInitialized = false;
void BetterMapSelect_Init(MapSelectState* mapSelectState) {
isBetterMapSelect = CVarGetInteger("gDeveloperTools.BetterMapSelect.Enabled", 0);
if (CVarGetInteger("gDeveloperTools.BetterMapSelect.Enabled", 0)) {
if (!isInitialized) {
s32 i;
for (i = 0; i < ARRAY_COUNT(sBetterMapSelectInfo); i++) {
sBetterScenes[sBetterMapSelectInfo[i].index].name = sBetterMapSelectInfo[i].name;
sBetterScenes[sBetterMapSelectInfo[i].index].entrance = sBetterMapSelectInfo[i].entrance;
}
isInitialized = true;
}
mapSelectState->scenes = sBetterScenes;
mapSelectState->count = ARRAY_COUNT(sBetterScenes);
mapSelectState->currentScene = CVarGetInteger("gDeveloperTools.BetterMapSelect.CurrentScene", 0);
mapSelectState->topDisplayedScene = CVarGetInteger("gDeveloperTools.BetterMapSelect.TopDisplayedScene", 0);
mapSelectState->pageDownIndex = CVarGetInteger("gDeveloperTools.BetterMapSelect.PageDownIndex", 0);
} else {
mapSelectState->scenes = sScenes;
mapSelectState->count = ARRAY_COUNT(sScenes);
mapSelectState->currentScene = 0;
mapSelectState->topDisplayedScene = 0;
mapSelectState->pageDownIndex = 0;
}
}
void BetterMapSelect_Update(MapSelectState* mapSelectState) {
if (isBetterMapSelect != CVarGetInteger("gDeveloperTools.BetterMapSelect.Enabled", 0)) {
BetterMapSelect_Init(mapSelectState);
}
}
static const char* betterFormLabels[] = {
"Deity", "Goron", "Zora", "Deku", "Child",
};
void BetterMapSelect_PrintMenu(MapSelectState* mapSelectState, GfxPrint* printer) {
s32 i;
s32 sceneIndex;
char* sceneName;
char* stageName;
char* dayName;
// Header
GfxPrint_SetColor(printer, 255, 255, 255, 255);
GfxPrint_SetPos(printer, 12, 2);
GfxPrint_Printf(printer, "Scene Selection");
GfxPrint_SetColor(printer, 255, 255, 255, 255);
// Scenes
for (i = 0; i < 20; i++) {
GfxPrint_SetPos(printer, 3, i + 4);
sceneIndex = (mapSelectState->topDisplayedScene + i + mapSelectState->count) % mapSelectState->count;
if (sceneIndex == mapSelectState->currentScene) {
GfxPrint_SetColor(printer, 255, 100, 100, 255);
} else {
GfxPrint_SetColor(printer, 175, 175, 175, 255);
}
sceneName = sBetterScenes[sceneIndex].name;
GfxPrint_Printf(printer, "%3d %s", sceneIndex, sceneName);
};
// Entrance
GfxPrint_SetColor(printer, 100, 100, 100, 255);
GfxPrint_SetPos(printer, 28, 26);
GfxPrint_Printf(printer, "Entrance:");
GfxPrint_SetColor(printer, 200, 200, 50, 255);
GfxPrint_Printf(printer, "%2d", mapSelectState->opt);
// Form
GfxPrint_SetPos(printer, 26, 25);
GfxPrint_SetColor(printer, 100, 100, 100, 255);
GfxPrint_Printf(printer, "(B)Form:");
GfxPrint_SetColor(printer, 55, 200, 50, 255);
GfxPrint_Printf(printer, "%s", betterFormLabels[GET_PLAYER_FORM]);
// Day
GfxPrint_SetPos(printer, 1, 25);
GfxPrint_SetColor(printer, 100, 100, 100, 255);
GfxPrint_Printf(printer, "Day:");
GfxPrint_SetColor(printer, 100, 100, 200, 255);
switch (gSaveContext.save.day) {
case 1:
dayName = "First Day";
break;
case 2:
dayName = "Second Day";
break;
case 3:
dayName = "Final Day";
break;
case 4:
dayName = "Clear Day";
break;
default:
gSaveContext.save.day = 1;
dayName = "First Day";
break;
}
GfxPrint_Printf(printer, "%s", dayName);
// Stage
GfxPrint_SetPos(printer, 1, 26);
GfxPrint_SetColor(printer, 100, 100, 100, 255);
GfxPrint_Printf(printer, "(Z/R)Stage:");
GfxPrint_SetColor(printer, 200, 100, 200, 255);
switch (gSaveContext.save.cutsceneIndex) {
case 0:
gSaveContext.save.time = CLOCK_TIME(12, 0);
stageName = "Afternoon";
break;
case 0x8000:
gSaveContext.save.time = CLOCK_TIME(6, 0) + 1;
stageName = "Morning";
break;
case 0x8800:
gSaveContext.save.time = CLOCK_TIME(18, 1);
stageName = "Night";
break;
case 0xFFF0:
gSaveContext.save.time = CLOCK_TIME(12, 0);
stageName = "0";
break;
case 0xFFF1:
stageName = "1";
break;
case 0xFFF2:
stageName = "2";
break;
case 0xFFF3:
stageName = "3";
break;
case 0xFFF4:
stageName = "4";
break;
case 0xFFF5:
stageName = "5";
break;
case 0xFFF6:
stageName = "6";
break;
case 0xFFF7:
stageName = "7";
break;
case 0xFFF8:
stageName = "8";
break;
case 0xFFF9:
stageName = "9";
break;
case 0xFFFA:
stageName = "A";
break;
default:
stageName = "???";
break;
}
GfxPrint_Printf(printer, "%s", stageName);
};