mirror of
https://github.com/RocketRobz/SuperAllStarPhotoStudio.git
synced 2025-06-18 17:15:35 -04:00
Add a settings menu
Studio BG and Frame Rate can be changed
This commit is contained in:
parent
1d0161ba41
commit
5a77cda71c
@ -30,6 +30,7 @@ namespace GFX
|
||||
|
||||
// Sprirte Functions.
|
||||
bool loadCharSprite(const char* t3xPathAllSeasons, const char* t3xPathOneSeason);
|
||||
void loadBgSprite(void);
|
||||
void showBgSprite(int zoomIn);
|
||||
void showCharSprite(int zoomIn, int fadeAlpha);
|
||||
void DrawGameSelSprite(int img, int x, int y, float ScaleX = 1, float ScaleY = 1);
|
||||
|
@ -9,10 +9,11 @@ enum ScreenMode {
|
||||
SCREEN_MODE_EXIT = -1, // Exit homebrew
|
||||
SCREEN_MODE_ROCKETROBZ = 0, // RocketRobz logo
|
||||
SCREEN_MODE_GAME_SELECT = 1, // Game select
|
||||
SCREEN_MODE_WHAT_TO_DO = 2, // What to do?
|
||||
SCREEN_MODE_CHANGE_CHARACTER = 3, // Change character
|
||||
SCREEN_MODE_CHANGE_MUSIC = 4, // Change music
|
||||
SCREEN_MODE_CHANGE_EMBLEM = 5, // Change emblem
|
||||
SCREEN_MODE_SETTINGS = 2, // Settings
|
||||
SCREEN_MODE_WHAT_TO_DO = 3, // What to do?
|
||||
SCREEN_MODE_CHANGE_CHARACTER = 4, // Change character
|
||||
SCREEN_MODE_CHANGE_MUSIC = 5, // Change music
|
||||
SCREEN_MODE_CHANGE_EMBLEM = 6 // Change emblem
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -7,7 +7,10 @@ static C2D_SpriteSheet gameSelSprites;
|
||||
static C2D_SpriteSheet gameShotSprites;
|
||||
static C2D_SpriteSheet bgSprite;
|
||||
static C2D_SpriteSheet chracterSprite;
|
||||
static bool dochracterSpriteFree = false;
|
||||
static bool doChracterSpriteFree = false;
|
||||
static bool doBgSpriteFree = false;
|
||||
|
||||
extern int studioBg;
|
||||
|
||||
extern bool showCursor;
|
||||
extern int cursorX;
|
||||
@ -18,7 +21,7 @@ Result GFX::loadSheets() {
|
||||
sprites = C2D_SpriteSheetLoad("romfs:/gfx/sprites.t3x");
|
||||
gameSelSprites = C2D_SpriteSheetLoad("romfs:/gfx/gameSelSprites.t3x");
|
||||
gameShotSprites = C2D_SpriteSheetLoad("romfs:/gfx/gameShotSprites.t3x");
|
||||
bgSprite = C2D_SpriteSheetLoad("romfs:/gfx/bgNight_loversBell.t3x");
|
||||
GFX::loadBgSprite();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -26,30 +29,50 @@ Result GFX::unloadSheets() {
|
||||
C2D_SpriteSheetFree(sprites);
|
||||
C2D_SpriteSheetFree(gameSelSprites);
|
||||
C2D_SpriteSheetFree(gameShotSprites);
|
||||
C2D_SpriteSheetFree(bgSprite);
|
||||
if (dochracterSpriteFree) {
|
||||
if (doBgSpriteFree) {
|
||||
C2D_SpriteSheetFree(bgSprite);
|
||||
}
|
||||
if (doChracterSpriteFree) {
|
||||
C2D_SpriteSheetFree(chracterSprite);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void GFX::loadBgSprite(void) {
|
||||
if (doBgSpriteFree) {
|
||||
C2D_SpriteSheetFree(bgSprite);
|
||||
}
|
||||
const char* bgPath;
|
||||
switch (studioBg) {
|
||||
case 0:
|
||||
default:
|
||||
bgPath = "romfs:/gfx/bg_blue.t3x";
|
||||
break;
|
||||
case 1:
|
||||
bgPath = "romfs:/gfx/bgNight_loversBell.t3x";
|
||||
break;
|
||||
}
|
||||
bgSprite = C2D_SpriteSheetLoad(bgPath);
|
||||
doBgSpriteFree = true;
|
||||
}
|
||||
|
||||
bool GFX::loadCharSprite(const char* t3xPathAllSeasons, const char* t3xPathOneSeason) {
|
||||
if (dochracterSpriteFree) {
|
||||
if (doChracterSpriteFree) {
|
||||
C2D_SpriteSheetFree(chracterSprite);
|
||||
}
|
||||
if (access(t3xPathAllSeasons, F_OK) == 0) {
|
||||
chracterSprite = C2D_SpriteSheetLoad(t3xPathAllSeasons);
|
||||
dochracterSpriteFree = true;
|
||||
doChracterSpriteFree = true;
|
||||
return true;
|
||||
} else {
|
||||
dochracterSpriteFree = false;
|
||||
doChracterSpriteFree = false;
|
||||
}
|
||||
if (access(t3xPathOneSeason, F_OK) == 0) {
|
||||
chracterSprite = C2D_SpriteSheetLoad(t3xPathOneSeason);
|
||||
dochracterSpriteFree = true;
|
||||
doChracterSpriteFree = true;
|
||||
return true;
|
||||
} else {
|
||||
dochracterSpriteFree = false;
|
||||
doChracterSpriteFree = false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -22,6 +22,7 @@ static char verText[32];
|
||||
|
||||
extern int iFps;
|
||||
extern void loadSettings(void);
|
||||
extern void saveSettings(void);
|
||||
|
||||
static int screenmode = 0; // Current screen mode.
|
||||
int screenmodebuffer = 0;
|
||||
@ -221,7 +222,15 @@ void controlThread(void) {
|
||||
fadecolor = 0;
|
||||
fadeout = true;
|
||||
}
|
||||
if (hDown & KEY_SELECT) {
|
||||
sndSelect();
|
||||
screenmodebuffer = SCREEN_MODE_SETTINGS;
|
||||
fadeout = true;
|
||||
}
|
||||
}
|
||||
} else if (screenmode == SCREEN_MODE_SETTINGS) {
|
||||
extern void settingsMenu(void);
|
||||
settingsMenu();
|
||||
} else if (screenmode == SCREEN_MODE_WHAT_TO_DO) {
|
||||
if (showMessage) {
|
||||
if ((hDown & KEY_A) || ((hDown & KEY_TOUCH) && touch.px >= 115 && touch.px < 115+90 && touch.py >= 188 && touch.py < 188+47)) {
|
||||
@ -329,6 +338,8 @@ int main()
|
||||
|
||||
gfxInitDefault();
|
||||
|
||||
loadSettings();
|
||||
|
||||
Gui::init();
|
||||
GFX::loadSheets();
|
||||
|
||||
@ -483,8 +494,6 @@ int main()
|
||||
|
||||
sprintf(verText, "Ver. %i.%i.%i", VERSION_MAJOR, VERSION_MINOR, VERSION_MICRO);
|
||||
|
||||
loadSettings();
|
||||
|
||||
C3D_FrameRate(iFps);
|
||||
|
||||
screenon();
|
||||
@ -525,7 +534,7 @@ int main()
|
||||
Gui::ScreenDraw(Top);
|
||||
|
||||
GFX::DrawSprite(sprites_logo_rocketrobz_idx, 0, 0);
|
||||
Gui::DrawString(8, 220, 0.50, BLACK, yeartext);
|
||||
Gui::DrawString(8, 218, 0.50, BLACK, yeartext);
|
||||
if (fadealpha > 0) Gui::Draw_Rect(0, 0, 400, 240, C2D_Color32(fadecolor, fadecolor, fadecolor, fadealpha)); // Fade in/out effect
|
||||
|
||||
Gui::ScreenDraw(Bottom);
|
||||
@ -598,12 +607,17 @@ int main()
|
||||
}
|
||||
Gui::DrawString(8, 112, 0.55, BLACK, "<");
|
||||
Gui::DrawString(304, 112, 0.55, BLACK, ">");
|
||||
Gui::DrawString(248, 220, 0.50, BLACK, verText);
|
||||
Gui::DrawString(8, 202, 0.50, BLACK, "START: Exit");
|
||||
Gui::DrawString(8, 218, 0.50, BLACK, "SELECT: Settings");
|
||||
Gui::DrawString(248, 218, 0.50, BLACK, verText);
|
||||
if (showMessage) {
|
||||
drawCannotEditMsg();
|
||||
}
|
||||
if (fadealpha > 0) Gui::Draw_Rect(0, 0, 400, 240, C2D_Color32(fadecolor, fadecolor, fadecolor, fadealpha)); // Fade in/out effect
|
||||
C3D_FrameEnd(0);
|
||||
} else if (screenmode == SCREEN_MODE_SETTINGS) {
|
||||
extern void settingsMenuGraphics(void);
|
||||
settingsMenuGraphics();
|
||||
} else if (screenmode == SCREEN_MODE_WHAT_TO_DO) {
|
||||
if ((highlightedGame == 0)
|
||||
|| (highlightedGame > 1 && whatToChange_cursorPosition == 1)
|
||||
@ -791,6 +805,8 @@ int main()
|
||||
|
||||
runThreads = false;
|
||||
|
||||
saveSettings();
|
||||
|
||||
commitSaveData();
|
||||
archiveUnmountAll();
|
||||
|
||||
|
@ -3,14 +3,139 @@
|
||||
|
||||
#define settingsIni "sdmc:/3ds/SavvyManager/settings.ini"
|
||||
|
||||
#include "common.hpp"
|
||||
#include "screenMode.h"
|
||||
#include "inifile.h"
|
||||
|
||||
int studioBg = 0;
|
||||
int iFps = 60;
|
||||
std::string currentMusicPack = "";
|
||||
|
||||
static const char* studioBgName(void) {
|
||||
switch (studioBg) {
|
||||
case 0:
|
||||
default:
|
||||
return "Blue";
|
||||
case 1:
|
||||
return "Lovers Bell";
|
||||
}
|
||||
|
||||
return "null";
|
||||
}
|
||||
|
||||
extern void sndSelect(void);
|
||||
extern void sndBack(void);
|
||||
extern void sndHighlight(void);
|
||||
|
||||
//static int screenmode = 0;
|
||||
extern int screenmodebuffer;
|
||||
|
||||
//static int subScreenMode = 0;
|
||||
/*
|
||||
*/
|
||||
|
||||
extern u8 sysRegion;
|
||||
extern int highlightedGame;
|
||||
|
||||
extern int fadealpha;
|
||||
extern int fadecolor;
|
||||
extern bool fadein;
|
||||
extern bool fadeout;
|
||||
|
||||
extern float bg_xPos;
|
||||
extern float bg_yPos;
|
||||
|
||||
extern bool showCursor;
|
||||
extern int cursorX;
|
||||
extern int cursorY;
|
||||
extern int cursorAlpha;
|
||||
|
||||
extern u32 hDown;
|
||||
extern touchPosition touch;
|
||||
extern bool touchingBackButton(void);
|
||||
|
||||
static bool displayStudioBg = true;
|
||||
|
||||
#define numberOfSettings 1
|
||||
|
||||
static int cursorPosition = 0;
|
||||
static int cursorPositionOnScreen = 0;
|
||||
|
||||
static int settingShownFirst = 0;
|
||||
|
||||
//static bool modeInited = false;
|
||||
|
||||
static char txt_studioBG[32];
|
||||
static char txt_frameRate[24];
|
||||
|
||||
void settingsMenuGraphics(void) {
|
||||
C3D_FrameBegin(C3D_FRAME_SYNCDRAW);
|
||||
C2D_TargetClear(Top, TRANSPARENT);
|
||||
C2D_TargetClear(Bottom, TRANSPARENT);
|
||||
Gui::clearTextBufs();
|
||||
Gui::ScreenDraw(Top);
|
||||
|
||||
if (displayStudioBg) {
|
||||
GFX::showBgSprite(0);
|
||||
} else {
|
||||
Gui::Draw_Rect(0, 0, 400, 240, WHITE); // Fill gaps of BG
|
||||
for(int w = 0; w < 7; w++) {
|
||||
for(int h = 0; h < 3; h++) {
|
||||
GFX::DrawSprite(sprites_phone_bg_idx, -72+bg_xPos+w*72, bg_yPos+h*136);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (fadealpha > 0) Gui::Draw_Rect(0, 0, 400, 240, C2D_Color32(fadecolor, fadecolor, fadecolor, fadealpha)); // Fade in/out effect
|
||||
|
||||
Gui::ScreenDraw(Bottom);
|
||||
Gui::Draw_Rect(0, 0, 320, 240, WHITE); // Fill gaps of BG
|
||||
for(int w = 0; w < 7; w++) {
|
||||
for(int h = 0; h < 3; h++) {
|
||||
GFX::DrawSprite(sprites_phone_bg_idx, -76+bg_xPos+w*72, bg_yPos+h*136);
|
||||
}
|
||||
}
|
||||
|
||||
cursorX = 248;
|
||||
cursorY = 64+(48*cursorPositionOnScreen);
|
||||
|
||||
Gui::DrawStringCentered(0, 8, 0.55, BLACK, "Settings");
|
||||
|
||||
int i2 = 48;
|
||||
for (int i = settingShownFirst; i < settingShownFirst+3; i++) {
|
||||
if (i > numberOfSettings) break;
|
||||
|
||||
GFX::DrawSprite(sprites_item_button_idx, 16, i2-20);
|
||||
switch (i) {
|
||||
case 0:
|
||||
sprintf(txt_studioBG, "Studio BG: %s", studioBgName());
|
||||
Gui::DrawString(32, i2, 0.65, BLACK, txt_studioBG);
|
||||
break;
|
||||
case 1:
|
||||
sprintf(txt_frameRate, "Frame Rate: %i", iFps);
|
||||
Gui::DrawString(32, i2, 0.65, BLACK, txt_frameRate);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
i2 += 48;
|
||||
}
|
||||
|
||||
GFX::DrawSprite(sprites_button_shadow_idx, 5, 199);
|
||||
GFX::DrawSprite(sprites_button_red_idx, 5, 195);
|
||||
GFX::DrawSprite(sprites_arrow_back_idx, 19, 195);
|
||||
GFX::DrawSprite(sprites_button_b_idx, 44, 218);
|
||||
|
||||
GFX::drawCursor();
|
||||
|
||||
if (fadealpha > 0) Gui::Draw_Rect(0, 0, 400, 240, C2D_Color32(fadecolor, fadecolor, fadecolor, fadealpha)); // Fade in/out effect
|
||||
C3D_FrameEnd(0);
|
||||
}
|
||||
|
||||
void loadSettings(void) {
|
||||
CIniFile settingsini(settingsIni);
|
||||
|
||||
studioBg = settingsini.GetInt("SAVVY-MANAGER", "STUDIO_BG", studioBg);
|
||||
iFps = settingsini.GetInt("SAVVY-MANAGER", "FRAME_RATE", iFps);
|
||||
|
||||
currentMusicPack = settingsini.GetString("SS2", "CURRENT_MUSIC_PACK", currentMusicPack);
|
||||
@ -19,9 +144,73 @@ void loadSettings(void) {
|
||||
void saveSettings(void) {
|
||||
CIniFile settingsini(settingsIni);
|
||||
|
||||
settingsini.SetInt("SAVVY-MANAGER", "STUDIO_BG", studioBg);
|
||||
settingsini.SetInt("SAVVY-MANAGER", "FRAME_RATE", iFps);
|
||||
|
||||
settingsini.SetString("SS2", "CURRENT_MUSIC_PACK", currentMusicPack);
|
||||
|
||||
settingsini.SaveIniFile(settingsIni);
|
||||
settingsini.SaveIniFileModified(settingsIni);
|
||||
}
|
||||
|
||||
void settingsMenu(void) {
|
||||
if (!fadein && !fadeout) {
|
||||
if (showCursor) {
|
||||
if (hDown & KEY_UP) {
|
||||
sndHighlight();
|
||||
cursorPosition--;
|
||||
cursorPositionOnScreen--;
|
||||
if (cursorPosition < 0) {
|
||||
cursorPosition = 0;
|
||||
settingShownFirst = 0;
|
||||
} else if (cursorPosition < settingShownFirst) {
|
||||
settingShownFirst--;
|
||||
}
|
||||
if (cursorPositionOnScreen < 0) {
|
||||
cursorPositionOnScreen = 0;
|
||||
}
|
||||
}
|
||||
if (hDown & KEY_DOWN) {
|
||||
sndHighlight();
|
||||
cursorPosition++;
|
||||
cursorPositionOnScreen++;
|
||||
if (cursorPosition > numberOfSettings) {
|
||||
cursorPosition = numberOfSettings;
|
||||
settingShownFirst = numberOfSettings-2;
|
||||
if (settingShownFirst < 0) settingShownFirst = 0;
|
||||
if (cursorPositionOnScreen > numberOfSettings) {
|
||||
cursorPositionOnScreen = numberOfSettings;
|
||||
}
|
||||
} else if (cursorPosition > settingShownFirst+2) {
|
||||
settingShownFirst++;
|
||||
}
|
||||
if (cursorPositionOnScreen > 2) {
|
||||
cursorPositionOnScreen = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((hDown & KEY_A) && (cursorPosition <= numberOfSettings)) {
|
||||
sndSelect();
|
||||
switch (cursorPosition) {
|
||||
case 0:
|
||||
studioBg++;
|
||||
if (studioBg > 1) studioBg = 0;
|
||||
displayStudioBg = false;
|
||||
gspWaitForVBlank();
|
||||
GFX::loadBgSprite();
|
||||
displayStudioBg = true;
|
||||
break;
|
||||
case 1:
|
||||
if (iFps==60) iFps = 24;
|
||||
else if (iFps==24) iFps = 30;
|
||||
else if (iFps==30) iFps = 60;
|
||||
C3D_FrameRate(iFps);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ((hDown & KEY_B) || ((hDown & KEY_TOUCH) && touchingBackButton())) {
|
||||
sndBack();
|
||||
screenmodebuffer = SCREEN_MODE_GAME_SELECT;
|
||||
fadeout = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user