#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#include "save.h"
SaveData gameFile_saveData[4];
s8 gameFile_GameIdToFileIdMap[4];
s32 D_80383F04;
int __gameFile_8033CD90(s32 filenum){
int i;
s32 tmp_v1;
void *save_data_ptr;
save_data_ptr = &gameFile_saveData[filenum];
tmp_v1 = savedata_8033CA2C(filenum, save_data_ptr);
if(tmp_v1)
savedata_clear(save_data_ptr);
return tmp_v1;
}
void __gameFile_8033CE14(s32 gamenum){
__gameFile_8033CD90(gameFile_GameIdToFileIdMap[gamenum]);
}
void gameFile_8033CE40(void) {
s32 game_index;
s32 file_index;
s32 file_state[4];
D_80383F04 = -1;
file_state[3] = game_index = 0;
if (file_state[3] < 3) {
for(game_index = game_index; game_index < 3; game_index++) {
gameFile_GameIdToFileIdMap[game_index] = -1;
file_state[game_index] = 0;
game_index++; game_index--;
}
}
for(file_index = 0; file_index < 4; file_index++){
if( (__gameFile_8033CD90(file_index) == 0)
&& (gameFile_GameIdToFileIdMap[gameFile_saveData[file_index].slotIndex - 1] == -1)
) {
gameFile_GameIdToFileIdMap[gameFile_saveData[file_index].slotIndex - 1] = file_index;
file_state[file_index] = 1;
} else {
D_80383F04 = file_index;
}
}
file_state[D_80383F04] = 1;
for(game_index = 0; game_index < 3; game_index++){
for(file_index = 0; (file_index < 4) && (gameFile_GameIdToFileIdMap[game_index] == -1); file_index++){
if (file_state[file_index] == 0) {
file_state[file_index] = 1;
gameFile_GameIdToFileIdMap[game_index] = file_index;
}
}
}
}
s32 gameFile_8033CFD4(s32 gamenum){
s32 next;
s32 filenum;
SaveData *save_data;
filenum = D_80383F04;
next = gameFile_GameIdToFileIdMap[gamenum];
gameFile_GameIdToFileIdMap[gamenum] = D_80383F04;
bcopy(&gameFile_saveData[next], &gameFile_saveData[filenum], sizeof(SaveData));
save_data = gameFile_saveData + filenum;
save_data->slotIndex = gamenum + 1;
savedata_update_crc(save_data, sizeof(SaveData));
CALL_EVENT(OnSaveFileSave, save_data, gamenum);
#if 0
{
for (eeprom_error = 1; eeprom_error && i > 0; i--) {
eeprom_error = savedata_8033CC98(filenum, save_data);
if (!eeprom_error) {
__gameFile_8033CE14(gamenum);
}
}
if (!eeprom_error) {
for (i = 3; i > 0; i--) {
eeprom_error = savedata_8033CCD0(next);
if (!eeprom_error)
break;
}
}
if (eeprom_error) {
gameFile_GameIdToFileIdMap[gamenum] = next;
}
else {
D_80383F04 = next;
}
return eeprom_error;
}
#endif
return 0;
}
void gameFile_clear(s32 gamenum){
s32 filenum = gameFile_GameIdToFileIdMap[gamenum];
savedata_clear(&gameFile_saveData[filenum]);
CALL_EVENT(OnGameErase, gamenum);
}
void gameFile_load(s32 gamenum){
s32 filenum = gameFile_GameIdToFileIdMap[gamenum];
CALL_EVENT(OnGameLoad, filenum);
saveData_load(&gameFile_saveData[filenum]);
}
void gameFile_save(s32 gamenum){
s32 filenum = gameFile_GameIdToFileIdMap[gamenum];
saveData_create(&gameFile_saveData[filenum]);
CALL_EVENT(OnGameSave, filenum);
}
bool gameFile_isNotEmpty(s32 gamenum){
s32 filenum = gameFile_GameIdToFileIdMap[gamenum];
return gameFile_saveData[filenum].magic != 0;
}
bool gameFile_anyNonEmpty(void){
int i;
for(i = 0; i < 3; i++){
if(gameFile_isNotEmpty(i))
return true;
}
return false;
}