summaryrefslogtreecommitdiff
path: root/arm9/src
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2020-08-25 15:37:40 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2020-08-25 15:42:23 -0400
commit2d15e6612b94971cd26dafb508dbedbd9e8e4686 (patch)
treeeb5b819c55232898651a7c3270222712492af0bb /arm9/src
parent3ba4677d3c00c7b607df7f147723a408dbb3d2b1 (diff)
Decompile hall_of_fame.c
Diffstat (limited to 'arm9/src')
-rw-r--r--arm9/src/hall_of_fame.c147
-rw-r--r--arm9/src/save_arrays.c8
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 }
};