static variables to hall of fame c

This commit is contained in:
DizzyEggg 2017-11-06 18:57:22 +01:00
parent a729e9838e
commit 19d9cff2ff
4 changed files with 51 additions and 71 deletions

View File

@ -26,7 +26,7 @@ sub_81754DC: @ 81754DC
ands r0, r1
cmp r0, 0
beq _08175522
ldr r0, =HasHallOfFameRecords
ldr r0, =gHasHallOfFameRecords
ldrb r0, [r0]
cmp r0, 0
beq _08175522

View File

@ -4043,12 +4043,12 @@ sub_8137734: @ 8137734
lsrs r1, r0, 24
cmp r1, 0x1
bne _08137760
ldr r0, =HasHallOfFameRecords
ldr r0, =gHasHallOfFameRecords
strb r1, [r0]
b _0813776C
.pool
_08137760:
ldr r1, =HasHallOfFameRecords
ldr r1, =gHasHallOfFameRecords
movs r0, 0
strb r0, [r1]
adds r0, r4, 0

View File

@ -39,35 +39,19 @@ struct HallofFameMons
struct HallofFameMon mons[6];
};
extern struct HallofFameMons *gHofMonsPtr;
struct HofGfx
{
u16 state;
u8 field_2;
u8 field_3;
u8 field_4;
u8 field_5;
u8 field_6;
u8 field_7;
u8 field_8;
u8 field_9;
u8 field_A;
u8 field_B;
u8 field_C;
u8 field_D;
u8 field_E;
u8 field_F;
u8 field_10;
u8 field_11;
u8 field_2[16];
u8 tilemap1[0x1000];
u8 tilemap2[0x1000];
};
extern struct HofGfx *gUnknown_0203BCDC;
static EWRAM_DATA struct HallofFameMons *sHofMonsPtr = NULL;
static EWRAM_DATA struct HofGfx *sHofGfxPtr = NULL;
extern bool8 gHasHallOfFameRecords;
extern u32 gUnknown_0203BCD4;
extern bool8 HasHallOfFameRecords;
extern u8 gDecompressionBuffer[];
extern struct MusicPlayerInfo gMPlay_BGM;
extern MainCallback gGameContinueCallback;
@ -532,7 +516,7 @@ static bool8 InitHallOfFameScreen(void)
case 0:
SetVBlankCallback(NULL);
ClearVramOamPltt_LoadHofPal();
gUnknown_0203BCDC = AllocZeroed(sizeof(*gUnknown_0203BCDC));
sHofGfxPtr = AllocZeroed(sizeof(*sHofGfxPtr));
gMain.state = 1;
break;
case 1:
@ -544,7 +528,7 @@ static bool8 InitHallOfFameScreen(void)
SetGpuReg(REG_OFFSET_BLDALPHA, 0x710);
SetGpuReg(REG_OFFSET_BLDY, 0);
sub_8174FAC();
gUnknown_0203BCDC->state = 0;
sHofGfxPtr->state = 0;
gMain.state++;
break;
case 3:
@ -581,7 +565,7 @@ void CB2_DoHallOfFameScreen(void)
{
u8 taskId = CreateTask(Task_Hof_InitMonData, 0);
gTasks[taskId].tDontSaveData = FALSE;
gHofMonsPtr = AllocZeroed(sizeof(*gHofMonsPtr));
sHofMonsPtr = AllocZeroed(sizeof(*sHofMonsPtr));
}
}
@ -591,7 +575,7 @@ void CB2_DoHallOfFameScreenDontSaveData(void)
{
u8 taskId = CreateTask(Task_Hof_InitMonData, 0);
gTasks[taskId].tDontSaveData = TRUE;
gHofMonsPtr = AllocZeroed(sizeof(*gHofMonsPtr));
sHofMonsPtr = AllocZeroed(sizeof(*sHofMonsPtr));
}
}
@ -606,24 +590,24 @@ static void Task_Hof_InitMonData(u8 taskId)
u8 nick[POKEMON_NAME_LENGTH + 2];
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES))
{
gHofMonsPtr->mons[i].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
gHofMonsPtr->mons[i].tid = GetMonData(&gPlayerParty[i], MON_DATA_OT_ID);
gHofMonsPtr->mons[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY);
gHofMonsPtr->mons[i].lvl = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL);
sHofMonsPtr->mons[i].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
sHofMonsPtr->mons[i].tid = GetMonData(&gPlayerParty[i], MON_DATA_OT_ID);
sHofMonsPtr->mons[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY);
sHofMonsPtr->mons[i].lvl = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL);
GetMonData(&gPlayerParty[i], MON_DATA_NICKNAME, nick);
for (j = 0; j < POKEMON_NAME_LENGTH; j++)
{
gHofMonsPtr->mons[i].nick[j] = nick[j];
sHofMonsPtr->mons[i].nick[j] = nick[j];
}
gTasks[taskId].tPokesNumber++;
}
else
{
gHofMonsPtr->mons[i].species = 0;
gHofMonsPtr->mons[i].tid = 0;
gHofMonsPtr->mons[i].personality = 0;
gHofMonsPtr->mons[i].lvl = 0;
gHofMonsPtr->mons[i].nick[0] = EOS;
sHofMonsPtr->mons[i].species = 0;
sHofMonsPtr->mons[i].tid = 0;
sHofMonsPtr->mons[i].personality = 0;
sHofMonsPtr->mons[i].lvl = 0;
sHofMonsPtr->mons[i].nick[0] = EOS;
}
}
@ -647,7 +631,7 @@ static void Task_Hof_InitTeamSaveData(u8 taskId)
u16 i;
struct HallofFameMons* lastSavedTeam = (struct HallofFameMons*)(gDecompressionBuffer);
if (!HasHallOfFameRecords)
if (!gHasHallOfFameRecords)
{
memset(gDecompressionBuffer, 0, 0x2000);
}
@ -673,7 +657,7 @@ static void Task_Hof_InitTeamSaveData(u8 taskId)
}
lastSavedTeam--;
}
*lastSavedTeam = *gHofMonsPtr;
*lastSavedTeam = *sHofMonsPtr;
sub_81973C4(0, 0);
AddTextPrinterParametrized(0, 1, gText_SavingDontTurnOffPower, 0, NULL, 2, 1, 3);
@ -690,10 +674,10 @@ static void Task_Hof_TrySaveData(u8 taskId)
UnsetBgTilemapBuffer(3);
FreeAllWindowBuffers();
if (gUnknown_0203BCDC != NULL)
FREE_AND_SET_NULL(gUnknown_0203BCDC);
if (gHofMonsPtr != NULL)
FREE_AND_SET_NULL(gHofMonsPtr);
if (sHofGfxPtr != NULL)
FREE_AND_SET_NULL(sHofGfxPtr);
if (sHofMonsPtr != NULL)
FREE_AND_SET_NULL(sHofMonsPtr);
DestroyTask(taskId);
}
@ -728,7 +712,7 @@ static void Task_Hof_DisplayMon(u8 taskId)
s16 xPos, yPos, field4, field6;
u16 currMonId = gTasks[taskId].tDisplayedMonId;
struct HallofFameMon* currMon = &gHofMonsPtr->mons[currMonId];
struct HallofFameMon* currMon = &sHofMonsPtr->mons[currMonId];
if (gTasks[taskId].tPokesNumber > 3)
{
@ -762,7 +746,7 @@ static void Task_Hof_DisplayMon(u8 taskId)
static void Task_Hof_PrintMonInfoAfterAnimating(u8 taskId)
{
u16 currMonId = gTasks[taskId].tDisplayedMonId;
struct HallofFameMon* currMon = &gHofMonsPtr->mons[currMonId];
struct HallofFameMon* currMon = &sHofMonsPtr->mons[currMonId];
struct Sprite *monSprite = &gSprites[gTasks[taskId].tMonSpriteId(currMonId)];
if (monSprite->callback == SpriteCallbackDummy)
@ -777,7 +761,7 @@ static void Task_Hof_PrintMonInfoAfterAnimating(u8 taskId)
static void Task_Hof_TryDisplayAnotherMon(u8 taskId)
{
u16 currPokeID = gTasks[taskId].tDisplayedMonId;
struct HallofFameMon* currMon = &gHofMonsPtr->mons[currPokeID];
struct HallofFameMon* currMon = &sHofMonsPtr->mons[currPokeID];
if (gTasks[taskId].tFrameCount != 0)
{
@ -931,10 +915,10 @@ static void Task_Hof_HandleExit(u8 taskId)
ResetBgsAndClearDma3BusyFlags(0);
DestroyTask(taskId);
if (gUnknown_0203BCDC != NULL)
FREE_AND_SET_NULL(gUnknown_0203BCDC);
if (gHofMonsPtr != NULL)
FREE_AND_SET_NULL(gHofMonsPtr);
if (sHofGfxPtr != NULL)
FREE_AND_SET_NULL(sHofGfxPtr);
if (sHofMonsPtr != NULL)
FREE_AND_SET_NULL(sHofMonsPtr);
SetCallback2AfterHallOfFameDisplay();
}
@ -966,7 +950,7 @@ void CB2_DoHallOfFamePC(void)
default:
SetVBlankCallback(NULL);
ClearVramOamPltt_LoadHofPal();
gUnknown_0203BCDC = AllocZeroed(sizeof(*gUnknown_0203BCDC));
sHofGfxPtr = AllocZeroed(sizeof(*sHofGfxPtr));
gMain.state = 1;
break;
case 1:
@ -1012,7 +996,7 @@ void CB2_DoHallOfFamePC(void)
gTasks[taskId].tMonSpriteId(i) = 0xFF;
}
gHofMonsPtr = AllocZeroed(0x2000);
sHofMonsPtr = AllocZeroed(0x2000);
SetMainCallback2(CB2_HallOfFame);
}
break;
@ -1031,8 +1015,8 @@ static void Task_HofPC_CopySaveData(u8 taskId)
u16 i;
struct HallofFameMons* savedTeams;
CpuCopy16(gDecompressionBuffer, gHofMonsPtr, 0x2000);
savedTeams = gHofMonsPtr;
CpuCopy16(gDecompressionBuffer, sHofMonsPtr, 0x2000);
savedTeams = sHofMonsPtr;
for (i = 0; i < HALL_OF_FAME_MAX_TEAMS; i++, savedTeams++)
{
if (savedTeams->mons[0].species == SPECIES_NONE)
@ -1052,7 +1036,7 @@ static void Task_HofPC_CopySaveData(u8 taskId)
static void Task_HofPC_DrawSpritesPrintText(u8 taskId)
{
struct HallofFameMons* savedTeams = gHofMonsPtr;
struct HallofFameMons* savedTeams = sHofMonsPtr;
struct HallofFameMon* currMon;
u16 i;
@ -1118,7 +1102,7 @@ static void Task_HofPC_DrawSpritesPrintText(u8 taskId)
static void Task_HofPC_PrintMonInfo(u8 taskId)
{
struct HallofFameMons* savedTeams = gHofMonsPtr;
struct HallofFameMons* savedTeams = sHofMonsPtr;
struct HallofFameMon* currMon;
u16 i;
u16 currMonID;
@ -1239,10 +1223,10 @@ static void Task_HofPC_HandleExit(u8 taskId)
ResetBgsAndClearDma3BusyFlags(0);
DestroyTask(taskId);
if (gUnknown_0203BCDC != NULL)
FREE_AND_SET_NULL(gUnknown_0203BCDC);
if (gHofMonsPtr != NULL)
FREE_AND_SET_NULL(gHofMonsPtr);
if (sHofGfxPtr != NULL)
FREE_AND_SET_NULL(sHofGfxPtr);
if (sHofMonsPtr != NULL)
FREE_AND_SET_NULL(sHofMonsPtr);
sub_8137C3C();
}
@ -1453,8 +1437,8 @@ static void sub_8174FAC(void)
{
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, sHof_BgTemplates, ARRAY_COUNT(sHof_BgTemplates));
SetBgTilemapBuffer(1, gUnknown_0203BCDC->tilemap1);
SetBgTilemapBuffer(3, gUnknown_0203BCDC->tilemap2);
SetBgTilemapBuffer(1, sHofGfxPtr->tilemap1);
SetBgTilemapBuffer(3, sHofGfxPtr->tilemap2);
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
ChangeBgX(1, 0, 0);
@ -1465,7 +1449,7 @@ static void sub_8174FAC(void)
static bool8 sub_8175024(void)
{
switch (gUnknown_0203BCDC->state)
switch (sHofGfxPtr->state)
{
case 0:
decompress_and_copy_tile_data_to_vram(1, sHallOfFame_Gfx, 0, 0, 0);
@ -1492,11 +1476,11 @@ static bool8 sub_8175024(void)
ShowBg(0);
ShowBg(1);
ShowBg(3);
gUnknown_0203BCDC->state = 0;
sHofGfxPtr->state = 0;
return FALSE;
}
gUnknown_0203BCDC->state++;
sHofGfxPtr->state++;
return TRUE;
}

View File

@ -1404,11 +1404,7 @@ gUnknown_0203BCD0: @ 203BCD0
gUnknown_0203BCD4: @ 203BCD4
.space 0x4
gHofMonsPtr: @ 203BCD8
.space 0x4
gUnknown_0203BCDC: @ 203BCDC
.space 0x4
.include "src/hall_of_fame.o"
gUnknown_0203BCE0: @ 203BCE0
.space 0x2
@ -1416,7 +1412,7 @@ gUnknown_0203BCE0: @ 203BCE0
gUnknown_0203BCE2: @ 203BCE2
.space 0x2
HasHallOfFameRecords: @ 203BCE4
gHasHallOfFameRecords: @ 203BCE4
.space 0x1
gUnknown_0203BCE5: @ 203BCE5