Registrarse

[Decomp-GBA] Save forzado

Hoennwalker

Usuario de platino
Este código es de pokeemerald pero en pokefirered no debería ser muy diferente ya que lo único que hay que hacer es cambiar el callback desde el cual se comienza el proceso de guardado. Lo podemos encontrar en start_menu.c, en la función InitSave.

En el interior de la función vemos el callback "sSaveDialogCallback " que es el de confirmar "SaveConfirmSaveCallback". También añado el método para guardar la partida debajo.
C:
static void InitSave(void)
{
    SaveMapView();
    sSaveDialogCallback = SaveConfirmSaveCallback;
    sSavingComplete = FALSE;
}
void SaveGame(void)
{
    InitSave();
    CreateTask(SaveGameTask, 0x50);
}
Pues sólo hay que crearse otra función pero que callback sea el que guarda directamente "SaveSavingMessageCallback" y hacemos un nuevo método de save debajo. Además hay que añadir una línea más en el método de la última fase del proceso.
C:
static void InitForcedSave(void)
{
    SaveMapView();
    sSaveDialogCallback = SaveSavingMessageCallback;
    sSavingComplete = FALSE;
}
void ForcedSaveGame(void)
{
    ShowSaveInfoWindow();
    InitForcedSave();
    CreateTask(SaveGameTask, 0x50);
}
static u8 SaveReturnSuccessCallback(void)
{
    if (!IsSEPlaying() && SaveSuccesTimer())
    {
        HideSaveMessageWindow();// AÑADIR ESTA LÍNEA
        HideSaveInfoWindow();
        return SAVE_SUCCESS;
    }
    else
    {
        return SAVE_IN_PROGRESS;
    }
}
Podéis ver que se añade además ShowSaveInfoWindow(), este es el recuadro grande con la información del save. Se añade ahí porque si partimos del callback que guarda directamente, otro callback que nos hemos saltado aplicaba ese método. Si no lo añadiéramos, solo aparecería el msgbox y no se podría cerrar al terminar el guardado.

¡¡ Un saludo a tod@s !!
 
Última edición:
Arriba