mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-08-20 13:24:40 -04:00
Use carousel button on prelaunch; more cleanup
This commit is contained in:
@@ -3,40 +3,48 @@
|
||||
#include <mods/api.h>
|
||||
#include <mods/svc/config.h>
|
||||
|
||||
#define GAMEMODE_SERVICE_ID "dev.twilitrealm.dusklight.gamemode"
|
||||
#define GAMEMODE_SERVICE_MAJOR 1u
|
||||
#define GAMEMODE_SERVICE_MINOR 0u
|
||||
#define GAME_MODE_SERVICE_ID "dev.twilitrealm.dusklight.gamemode"
|
||||
#define GAME_MODE_SERVICE_MAJOR 1u
|
||||
#define GAME_MODE_SERVICE_MINOR 0u
|
||||
|
||||
/* MOD_OK on success; failures disable the mod. */
|
||||
typedef ModResult (*GameModeCallback)(void* user_data, ModError* out_error);
|
||||
|
||||
typedef enum GameModeNewSaveState {
|
||||
GAME_MODE_STATE_PENDING = 0,
|
||||
GAME_MODE_STATE_PROCEED,
|
||||
GAME_MODE_STATE_RETURN,
|
||||
} GameModeNewSaveState;
|
||||
|
||||
/* Set state to PROCEED after custom UI completes, or RETURN to cancel.
|
||||
* State pointer is valid until selection completes. */
|
||||
typedef ModResult (*GameModeNewSaveSelectCallback)(
|
||||
void* user_data, GameModeNewSaveState* state, ModError* out_error);
|
||||
|
||||
typedef struct {
|
||||
const char* gameModeId;
|
||||
const char* fullName;
|
||||
const char saveName[32]; // Empty uses default (gczelda2); max 31 chars
|
||||
void (*onActivatedFunction)(); // Called when the game mode is selected
|
||||
void (*onDeactivatedFunction)(); // Called when the game mode is deselected
|
||||
void (*onPlayFunction)(); // Called when play is pressed on the prelaunch menu
|
||||
void (*onSaveLoadedFunction)(); // Called whenever a save file is loaded
|
||||
void (*onNewSaveFunction)(); // Called when a new save is created
|
||||
void (*onNewSaveSelectFunction)(bool* out_proceedToNameSelect,
|
||||
bool* out_returnToFileSelect); // Set out_proceedToNameSelect to true once any UI flows are
|
||||
// completed
|
||||
void (*onGameResetFunction)(); // Called when the game is reset
|
||||
void (*onTickFunction)(); // Called on every tick
|
||||
uint32_t struct_size;
|
||||
const char* game_mode_id;
|
||||
const char* full_name;
|
||||
const char save_name[32]; // Empty uses default (gczelda2); max 31 chars
|
||||
void* user_data; // Pointer will be passed to all callbacks
|
||||
GameModeCallback on_activated; // Called when the game mode is selected
|
||||
GameModeCallback on_deactivated; // Called when the game mode is deselected
|
||||
GameModeCallback on_play; // Called when play is pressed
|
||||
GameModeCallback on_save_loaded; // Called whenever a save file is loaded
|
||||
GameModeCallback on_new_save; // Called when a new save is created
|
||||
GameModeNewSaveSelectCallback on_new_save_select;
|
||||
GameModeCallback on_game_reset; // Called when the game is reset
|
||||
GameModeCallback on_tick; // Called on every game tick while active
|
||||
} GameModeDesc;
|
||||
|
||||
#define GAME_MODE_DESC_INIT {sizeof(GameModeDesc)}
|
||||
|
||||
typedef struct GameModeService {
|
||||
ServiceHeader header;
|
||||
ModResult (*register_game_mode)(ModContext* ctx, const GameModeDesc* desc);
|
||||
ModResult (*unregister_game_mode)(ModContext* ctx, const char* id);
|
||||
ModResult (*is_active)(ModContext* ctx, const char* gameModeId, bool* out_active);
|
||||
ModResult (*is_active)(ModContext* ctx, const char* game_mode_id, bool* out_active);
|
||||
} GameModeService;
|
||||
|
||||
#ifdef __cplusplus
|
||||
#include "mods/service.hpp"
|
||||
|
||||
template <>
|
||||
struct mods::ServiceTraits<GameModeService> {
|
||||
static constexpr const char* id = GAMEMODE_SERVICE_ID;
|
||||
static constexpr uint16_t major_version = GAMEMODE_SERVICE_MAJOR;
|
||||
static constexpr uint16_t minor_version = GAMEMODE_SERVICE_MINOR;
|
||||
};
|
||||
#endif
|
||||
MOD_DECLARE_SERVICE(GameModeService, svc_game_mode, GAME_MODE_SERVICE_ID, GAME_MODE_SERVICE_MAJOR,
|
||||
GAME_MODE_SERVICE_MINOR);
|
||||
|
||||
Reference in New Issue
Block a user