mirror of
https://github.com/Polprzewodnikowy/N64FlashcartMenu.git
synced 2025-01-29 18:06:49 +01:00
Merge branch 'develop' into improve-rom-info
This commit is contained in:
commit
9bce06f155
@ -57,6 +57,8 @@ Generated documentation is located in the `output/docs` folder and auto-publishe
|
|||||||
Once merged, they can be viewed [here](https://polprzewodnikowy.github.io/N64FlashcartMenu/)
|
Once merged, they can be viewed [here](https://polprzewodnikowy.github.io/N64FlashcartMenu/)
|
||||||
|
|
||||||
### Test generated docs in the dev-container
|
### Test generated docs in the dev-container
|
||||||
|
Testing the documentation locally allows you to preview changes and ensure everything renders correctly before submitting your changes.
|
||||||
|
|
||||||
Install Prerequisites:
|
Install Prerequisites:
|
||||||
```bash
|
```bash
|
||||||
apt-get install ruby-full build-essential zlib1g-dev
|
apt-get install ruby-full build-essential zlib1g-dev
|
||||||
|
@ -25,8 +25,8 @@ static void actions_clear (menu_t *menu) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void actions_update_direction (menu_t *menu) {
|
static void actions_update_direction (menu_t *menu) {
|
||||||
joypad_8way_t held_dir;
|
joypad_8way_t held_dir = JOYPAD_8WAY_NONE;
|
||||||
joypad_8way_t fast_dir;
|
joypad_8way_t fast_dir = JOYPAD_8WAY_NONE;
|
||||||
|
|
||||||
JOYPAD_PORT_FOREACH (i) {
|
JOYPAD_PORT_FOREACH (i) {
|
||||||
held_dir = joypad_get_direction(i, JOYPAD_2D_DPAD | JOYPAD_2D_STICK);
|
held_dir = joypad_get_direction(i, JOYPAD_2D_DPAD | JOYPAD_2D_STICK);
|
||||||
@ -90,7 +90,7 @@ static void actions_update_direction (menu_t *menu) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void actions_update_buttons (menu_t *menu) {
|
static void actions_update_buttons (menu_t *menu) {
|
||||||
joypad_buttons_t pressed;
|
joypad_buttons_t pressed = {0};
|
||||||
|
|
||||||
JOYPAD_PORT_FOREACH (i) {
|
JOYPAD_PORT_FOREACH (i) {
|
||||||
pressed = joypad_get_buttons_pressed(i);
|
pressed = joypad_get_buttons_pressed(i);
|
||||||
|
@ -10,7 +10,9 @@
|
|||||||
|
|
||||||
#include "menu_state.h"
|
#include "menu_state.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialize the actions module
|
||||||
|
*/
|
||||||
void actions_init (void);
|
void actions_init (void);
|
||||||
void actions_update (menu_t *menu);
|
void actions_update (menu_t *menu);
|
||||||
|
|
||||||
|
@ -40,20 +40,28 @@ component_boxart_t *component_boxart_init (const char *storage_prefix, char *gam
|
|||||||
switch (current_image_view) {
|
switch (current_image_view) {
|
||||||
case IMAGE_GAMEPAK_FRONT:
|
case IMAGE_GAMEPAK_FRONT:
|
||||||
path_push(path, "gamepak_front.png");
|
path_push(path, "gamepak_front.png");
|
||||||
|
break;
|
||||||
case IMAGE_GAMEPAK_BACK:
|
case IMAGE_GAMEPAK_BACK:
|
||||||
path_push(path, "gamepak_back.png");
|
path_push(path, "gamepak_back.png");
|
||||||
|
break;
|
||||||
case IMAGE_BOXART_BACK:
|
case IMAGE_BOXART_BACK:
|
||||||
path_push(path, "boxart_back.png");
|
path_push(path, "boxart_back.png");
|
||||||
|
break;
|
||||||
case IMAGE_BOXART_LEFT:
|
case IMAGE_BOXART_LEFT:
|
||||||
path_push(path, "boxart_left.png");
|
path_push(path, "boxart_left.png");
|
||||||
|
break;
|
||||||
case IMAGE_BOXART_RIGHT:
|
case IMAGE_BOXART_RIGHT:
|
||||||
path_push(path, "boxart_right.png");
|
path_push(path, "boxart_right.png");
|
||||||
|
break;
|
||||||
case IMAGE_BOXART_BOTTOM:
|
case IMAGE_BOXART_BOTTOM:
|
||||||
path_push(path, "boxart_bottom.png");
|
path_push(path, "boxart_bottom.png");
|
||||||
|
break;
|
||||||
case IMAGE_BOXART_TOP:
|
case IMAGE_BOXART_TOP:
|
||||||
path_push(path, "boxart_top.png");
|
path_push(path, "boxart_top.png");
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
path_push(path, "boxart_front.png");
|
path_push(path, "boxart_front.png");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (file_exists(path_get(path))) {
|
if (file_exists(path_get(path))) {
|
||||||
@ -65,12 +73,13 @@ component_boxart_t *component_boxart_init (const char *storage_prefix, char *gam
|
|||||||
}
|
}
|
||||||
else { // compatibility mode
|
else { // compatibility mode
|
||||||
|
|
||||||
char file_name[8];
|
char file_name[9];
|
||||||
|
|
||||||
// reset the directory path used for boxart.
|
// reset the directory path used for boxart.
|
||||||
|
path_free(path);
|
||||||
path = path_init(storage_prefix, BOXART_DIRECTORY);
|
path = path_init(storage_prefix, BOXART_DIRECTORY);
|
||||||
|
|
||||||
sprintf(file_name, "%c%c%c%c.png", game_code[0], game_code[1], game_code[2], game_code[3]);
|
snprintf(file_name, sizeof(file_name), "%c%c%c%c.png", game_code[0], game_code[1], game_code[2], game_code[3]);
|
||||||
path_push(path, file_name);
|
path_push(path, file_name);
|
||||||
|
|
||||||
if (file_exists(path_get(path))) {
|
if (file_exists(path_get(path))) {
|
||||||
@ -81,21 +90,19 @@ component_boxart_t *component_boxart_init (const char *storage_prefix, char *gam
|
|||||||
}
|
}
|
||||||
|
|
||||||
path_pop(path);
|
path_pop(path);
|
||||||
sprintf(file_name, "%c%c%c.png", game_code[0], game_code[1], game_code[2]);
|
snprintf(file_name, sizeof(file_name), "%c%c%c.png", game_code[0], game_code[1], game_code[2]);
|
||||||
path_push(path, file_name);
|
path_push(path, file_name);
|
||||||
|
|
||||||
if (file_exists(path_get(path))) {
|
if (file_exists(path_get(path))) {
|
||||||
if (file_exists(path_get(path))) {
|
if (png_decoder_start(path_get(path), BOXART_WIDTH_MAX, BOXART_HEIGHT_MAX, png_decoder_callback, b) == PNG_OK) {
|
||||||
if (png_decoder_start(path_get(path), BOXART_WIDTH_MAX, BOXART_HEIGHT_MAX, png_decoder_callback, b) == PNG_OK) {
|
path_free(path);
|
||||||
path_free(path);
|
return b;
|
||||||
return b;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
path_pop(path);
|
path_pop(path);
|
||||||
|
|
||||||
sprintf(file_name, "%c%c.png", game_code[1], game_code[2]);
|
snprintf(file_name, sizeof(file_name), "%c%c.png", game_code[1], game_code[2]);
|
||||||
path_push(path, file_name);
|
path_push(path, file_name);
|
||||||
if (file_exists(path_get(path))) {
|
if (file_exists(path_get(path))) {
|
||||||
if (png_decoder_start(path_get(path), BOXART_WIDTH_MAX, BOXART_HEIGHT_MAX, png_decoder_callback, b) == PNG_OK) {
|
if (png_decoder_start(path_get(path), BOXART_WIDTH_MAX, BOXART_HEIGHT_MAX, png_decoder_callback, b) == PNG_OK) {
|
||||||
|
@ -846,6 +846,7 @@ static rom_err_t save_override (path_t *path, const char *id, int value, int def
|
|||||||
mini_t *ini = mini_try_load(path_get(rom_info_path));
|
mini_t *ini = mini_try_load(path_get(rom_info_path));
|
||||||
|
|
||||||
if (!ini) {
|
if (!ini) {
|
||||||
|
path_free(overrides_path);
|
||||||
return ROM_ERR_SAVE_IO;
|
return ROM_ERR_SAVE_IO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,6 +12,9 @@
|
|||||||
#define SOUND_MP3_PLAYER_CHANNEL (0)
|
#define SOUND_MP3_PLAYER_CHANNEL (0)
|
||||||
#define SOUND_SFX_CHANNEL (2)
|
#define SOUND_SFX_CHANNEL (2)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enumeration of available sound effects for menu interactions.
|
||||||
|
*/
|
||||||
typedef enum {
|
typedef enum {
|
||||||
SFX_CURSOR,
|
SFX_CURSOR,
|
||||||
SFX_ERROR,
|
SFX_ERROR,
|
||||||
@ -23,8 +26,22 @@ typedef enum {
|
|||||||
|
|
||||||
void sound_init_default (void);
|
void sound_init_default (void);
|
||||||
void sound_init_mp3_playback (void);
|
void sound_init_mp3_playback (void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialize sound effects system.
|
||||||
|
*/
|
||||||
void sound_init_sfx (void);
|
void sound_init_sfx (void);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Enable or disable sound effects.
|
||||||
|
* @param enable True to enable sound effects, false to disable.
|
||||||
|
*/
|
||||||
void sound_use_sfx(bool);
|
void sound_use_sfx(bool);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Play a specified sound effect.
|
||||||
|
* @param sfx The sound effect to play, as defined in sound_effect_t.
|
||||||
|
*/
|
||||||
void sound_play_effect(sound_effect_t sfx);
|
void sound_play_effect(sound_effect_t sfx);
|
||||||
void sound_deinit (void);
|
void sound_deinit (void);
|
||||||
void sound_poll (void);
|
void sound_poll (void);
|
||||||
|
@ -4,8 +4,8 @@
|
|||||||
|
|
||||||
static void process (menu_t *menu) {
|
static void process (menu_t *menu) {
|
||||||
if (menu->actions.back) {
|
if (menu->actions.back) {
|
||||||
menu->next_mode = MENU_MODE_BROWSER;
|
|
||||||
sound_play_effect(SFX_EXIT);
|
sound_play_effect(SFX_EXIT);
|
||||||
|
menu->next_mode = MENU_MODE_BROWSER;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,7 +94,9 @@ static void draw (menu_t *menu, surface_t *d) {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
component_boxart_draw(boxart);
|
if (boxart != NULL) {
|
||||||
|
component_boxart_draw(boxart);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rdpq_detach_show();
|
rdpq_detach_show();
|
||||||
|
@ -274,7 +274,9 @@ static void draw (menu_t *menu, surface_t *d) {
|
|||||||
"R: Options"
|
"R: Options"
|
||||||
);
|
);
|
||||||
|
|
||||||
component_boxart_draw(boxart);
|
if (boxart != NULL) {
|
||||||
|
component_boxart_draw(boxart);
|
||||||
|
}
|
||||||
|
|
||||||
if (show_extra_info_message) {
|
if (show_extra_info_message) {
|
||||||
component_messagebox_draw(
|
component_messagebox_draw(
|
||||||
@ -347,6 +349,7 @@ static void load (menu_t *menu) {
|
|||||||
|
|
||||||
static void deinit (void) {
|
static void deinit (void) {
|
||||||
component_boxart_free(boxart);
|
component_boxart_free(boxart);
|
||||||
|
boxart = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ static void draw (menu_t *menu, surface_t *d) {
|
|||||||
"\n"
|
"\n"
|
||||||
"\n"
|
"\n"
|
||||||
"To set the date and time, please use the PC terminal\n"
|
"To set the date and time, please use the PC terminal\n"
|
||||||
"application and set via USB or a game that uses it.\n\n"
|
"application and set via USB,\n or a N64 game with RTC support.\n\n"
|
||||||
"Current date & time: %s\n",
|
"Current date & time: %s\n",
|
||||||
menu->current_time >= 0 ? ctime(&menu->current_time) : "Unknown\n"
|
menu->current_time >= 0 ? ctime(&menu->current_time) : "Unknown\n"
|
||||||
);
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user