diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2020-08-25 15:37:40 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2020-08-25 15:42:23 -0400 |
commit | 2d15e6612b94971cd26dafb508dbedbd9e8e4686 (patch) | |
tree | eb5b819c55232898651a7c3270222712492af0bb /arm9/src | |
parent | 3ba4677d3c00c7b607df7f147723a408dbb3d2b1 (diff) |
Decompile hall_of_fame.c
Diffstat (limited to 'arm9/src')
-rw-r--r-- | arm9/src/hall_of_fame.c | 147 | ||||
-rw-r--r-- | arm9/src/save_arrays.c | 8 |
2 files changed, 150 insertions, 5 deletions
diff --git a/arm9/src/hall_of_fame.c b/arm9/src/hall_of_fame.c new file mode 100644 index 00000000..1baf1c12 --- /dev/null +++ b/arm9/src/hall_of_fame.c @@ -0,0 +1,147 @@ +#include "global.h" +#include "pokemon.h" +#include "save_block_2.h" +#include "MI_memory.h" +#include "party.h" +#include "string16.h" +#include "RTC_api.h" +#include "hall_of_fame.h" + +#pragma thumb on + +u32 Sav2_HOF_sizeof(void) +{ + return sizeof(struct HallOfFame); +} + +void Sav2_HOF_init(struct HallOfFame * hof) +{ + MI_CpuClear32(hof, sizeof(struct HallOfFame)); +} + +void Sav2_HOF_RecordParty(struct HallOfFame * hof, struct PlayerParty * party, RTCDate * date) +{ + GF_ASSERT(hof != NULL); + GF_ASSERT(hof->next_record < NUM_HOF_RECORDS); + if (hof->num_total < 9999) + { + struct HOFParty * hof_party = &hof->parties[hof->next_record]; + int nmons = GetPartyCount(party); + struct String * str = String_ctor(POKEMON_NAME_LENGTH + 1, 0); + MI_CpuClear16(hof_party->party, 6 * sizeof(struct HOFMon)); + int i, j; + for (i = 0, j = 0; i < nmons; i++) + { + struct Pokemon * mon = GetPartyMonByIndex(party, i); + BOOL lock = AcquireMonLock(mon); + if (!GetMonData(mon, MON_DATA_IS_EGG, NULL)) + { + hof_party->party[j].species = (u16)GetMonData(mon, MON_DATA_SPECIES, NULL); + hof_party->party[j].level = (u8)GetMonData(mon, MON_DATA_LEVEL, NULL); + hof_party->party[j].forme = (u8)GetMonData(mon, MON_DATA_FORME, NULL); + hof_party->party[j].personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL); + hof_party->party[j].otid = GetMonData(mon, MON_DATA_OTID, NULL); + hof_party->party[j].moves[0] = (u16)GetMonData(mon, MON_DATA_MOVE1, NULL); + hof_party->party[j].moves[1] = (u16)GetMonData(mon, MON_DATA_MOVE2, NULL); + hof_party->party[j].moves[2] = (u16)GetMonData(mon, MON_DATA_MOVE3, NULL); + hof_party->party[j].moves[3] = (u16)GetMonData(mon, MON_DATA_MOVE4, NULL); + if (str != NULL) + { + GetMonData(mon, MON_DATA_NICKNAME_3, str); + CopyStringToU16Array(str, hof_party->party[j].nickname, POKEMON_NAME_LENGTH + 1); + GetMonData(mon, MON_DATA_OT_NAME_2, str); + CopyStringToU16Array(str, hof_party->party[j].otname, OT_NAME_LENGTH + 1); + } + else + { + hof_party->party[j].nickname[0] = EOS; + hof_party->party[j].otname[0] = EOS; + } + j++; + } + ReleaseMonLock(mon, lock); + } + hof_party->year = (u16)date->year; + hof_party->month = (u8)date->month; + hof_party->day = (u8)date->day; + hof->next_record++; + if (hof->next_record >= NUM_HOF_RECORDS) + hof->next_record = 0; + hof->num_total++; + if (str != NULL) + String_dtor(str); + } +} + +u32 Sav2_HOF_GetNumRecords(struct HallOfFame * hof) +{ + GF_ASSERT(hof != NULL); + GF_ASSERT(hof->next_record < NUM_HOF_RECORDS); + if (hof->num_total < NUM_HOF_RECORDS) + return hof->num_total; + else + return NUM_HOF_RECORDS; +} + +int Sav2_HOF_TranslateRecordIdx(struct HallOfFame * hof, int a1) +{ + GF_ASSERT(hof != NULL); + GF_ASSERT(hof->next_record < NUM_HOF_RECORDS); + GF_ASSERT(a1 < NUM_HOF_RECORDS); + return (int)(hof->num_total - a1); +} + +u32 Sav2_HOF_RecordCountMons(struct HallOfFame * hof, int a1) +{ + GF_ASSERT(hof != NULL); + GF_ASSERT(hof->next_record < NUM_HOF_RECORDS); + GF_ASSERT(a1 < NUM_HOF_RECORDS); + int hofno = (int)(hof->next_record - 1 - a1); + if (hofno < 0) + hofno += NUM_HOF_RECORDS; + struct HOFParty * hof_party = &hof->parties[hofno]; + u32 i; + for (i = 0; i < 6; i++) + { + if (hof_party->party[i].species == SPECIES_NONE) + break; + } + return i; +} + +void Sav2_HOF_GetMonStatsByIndexPair(struct HallOfFame * hof, int a1, int a2, struct HofDisplayMon * dest) +{ + GF_ASSERT(hof != NULL); + GF_ASSERT(hof->next_record < NUM_HOF_RECORDS); + GF_ASSERT(a1 < NUM_HOF_RECORDS); + int hofno = (int)(hof->next_record - 1 - a1); + if (hofno < 0) + hofno += NUM_HOF_RECORDS; + struct HOFMon * mon = &hof->parties[hofno].party[a2]; + dest->species = mon->species; + dest->level = mon->level; + dest->personality = mon->personality; + dest->otid = mon->otid; + dest->forme = mon->forme; + CopyU16ArrayToString(dest->nickname, mon->nickname); + CopyU16ArrayToString(dest->otname, mon->otname); + for (int i = 0; i < 4; i++) + { + dest->moves[i] = mon->moves[i]; + } +} + +void Sav2_HOF_GetClearDate(struct HallOfFame * hof, int a1, RTCDate * dest) +{ + GF_ASSERT(hof != NULL); + GF_ASSERT(hof->next_record < NUM_HOF_RECORDS); + GF_ASSERT(a1 < NUM_HOF_RECORDS); + int hofno = (int)(hof->next_record - 1 - a1); + if (hofno < 0) + hofno += NUM_HOF_RECORDS; + struct HOFParty *party = &hof->parties[hofno]; + dest->year = party->year; + dest->month = party->month; + dest->day = party->day; + dest->week = RTC_WEEK_SUNDAY; +}
\ No newline at end of file diff --git a/arm9/src/save_arrays.c b/arm9/src/save_arrays.c index 02dc4a16..797539d2 100644 --- a/arm9/src/save_arrays.c +++ b/arm9/src/save_arrays.c @@ -7,8 +7,9 @@ #include "pokemon_storage_system.h" #include "sav_system_info.h" #include "poketch.h" +#include "hall_of_fame.h" +#include "unk_020286F8.h" -extern u32 FUN_0202B034(void); extern u32 FUN_0202AC20(void); extern u32 FUN_02034D7C(void); extern u32 FUN_02023D64(void); @@ -21,7 +22,6 @@ extern u32 FUN_02023AC8(void); extern u32 FUN_02026FD8(void); extern u32 FUN_02025844(void); extern u32 FUN_02028054(void); -extern u32 FUN_020286F8(void); extern u32 FUN_02028980(void); extern u32 FUN_02029A84(void); extern u32 FUN_02029FB0(void); @@ -38,7 +38,6 @@ extern u32 FUN_02029AE0(void); extern u32 FUN_0202BE98(void); extern u32 FUN_0202C0E0(void); extern u32 FUN_02013B28(void); -extern void FUN_0202B03C(void *); extern void FUN_0202AC28(void *); extern void FUN_02034D98(void *); extern void FUN_02024378(void *); @@ -51,7 +50,6 @@ extern void FUN_02023AD8(void *); extern void FUN_02026F60(void *); extern void FUN_0202584C(void *); extern void FUN_0202805C(void *); -extern void FUN_02028724(void *); extern void FUN_02028994(void *); extern void FUN_02029A8C(void *); extern void FUN_02029FB8(void *); @@ -70,7 +68,7 @@ extern void FUN_0202C0E4(void *); extern void FUN_02013B2C(void *); const struct SaveChunkHeader UNK_020EE6E0[] = { - { 0, 32, (SAVSIZEFN)FUN_0202B034, (SAVINITFN)FUN_0202B03C }, + { 0, 32, (SAVSIZEFN)Sav2_HOF_sizeof, (SAVINITFN)Sav2_HOF_init }, { 1, 35, (SAVSIZEFN)FUN_0202AC20, (SAVINITFN)FUN_0202AC28 } }; |