Merge pull request #269 from PikalaxALT/pikalax_work

Decompile hall_of_fame.c
This commit is contained in:
red031000
2020-08-25 21:41:41 +01:00
committed by GitHub
11 changed files with 232 additions and 457 deletions

View File

@@ -113,7 +113,7 @@ Static arm9
Object unk_0202A924.o
Object unk_0202ABBC.o
Object unk_0202AC20.o
Object unk_0202B034.o
Object hall_of_fame.o
Object unk_0202B374.o
Object unk_0202B870.o
Object unk_0202BE98.o

View File

@@ -11771,7 +11771,7 @@ FUN_0203F760: ; 0x0203F760
mov r1, #0x20
ldr r0, [r0, #0xc]
add r2, sp, #0x0
bl LoadSaveFile
bl LoadHallOfFame
ldr r1, [sp, #0x0]
add r4, r0, #0x0
cmp r1, #0x0
@@ -11785,7 +11785,7 @@ _0203F798:
cmp r1, #0x1
bne _0203F7AE
mov r1, #0x0
bl FUN_0202B21C
bl Sav2_HOF_TranslateRecordIdx
strh r0, [r5, #0x0]
add r0, r4, #0x0
bl FreeToHeap

View File

@@ -35,16 +35,16 @@ FUN_02022528: ; 0x02022528
nop
_02022530: .word SavArray_get
thumb_func_start LoadSaveFile
LoadSaveFile: ; 0x02022534
thumb_func_start LoadHallOfFame
LoadHallOfFame: ; 0x02022534
push {r3, lr}
add r3, r2, #0x0
mov r2, #0x0
bl ReadSaveFileFromFlash
pop {r3, pc}
thumb_func_start SaveGame
SaveGame: ; 0x02022540
thumb_func_start SaveHallOfFame
SaveHallOfFame: ; 0x02022540
ldr r3, _02022548 ; =WriteSaveFileToFlash
add r2, r1, #0x0
mov r1, #0x0

View File

@@ -1,425 +0,0 @@
.include "asm/macros.inc"
.include "global.inc"
.text
thumb_func_start FUN_0202B034
FUN_0202B034: ; 0x0202B034
ldr r0, _0202B038 ; =0x00002AB0
bx lr
.balign 4
_0202B038: .word 0x00002AB0
thumb_func_start FUN_0202B03C
FUN_0202B03C: ; 0x0202B03C
ldr r3, _0202B048 ; =MIi_CpuClear32
add r1, r0, #0x0
mov r0, #0x0
ldr r2, _0202B04C ; =0x00002AB0
bx r3
nop
_0202B048: .word MIi_CpuClear32
_0202B04C: .word 0x00002AB0
thumb_func_start FUN_0202B050
FUN_0202B050: ; 0x0202B050
push {r3-r7, lr}
sub sp, #0x18
str r0, [sp, #0x0]
str r1, [sp, #0x4]
str r2, [sp, #0x8]
cmp r0, #0x0
bne _0202B062
bl ErrorHandling
_0202B062:
ldr r1, _0202B1E0 ; =0x00002AA8
ldr r0, [sp, #0x0]
ldr r0, [r0, r1]
cmp r0, #0x1e
blo _0202B070
bl ErrorHandling
_0202B070:
ldr r1, _0202B1E4 ; =0x00002AAC
ldr r0, [sp, #0x0]
ldr r2, [r0, r1]
ldr r0, _0202B1E8 ; =0x0000270F
cmp r2, r0
blo _0202B07E
b _0202B1DC
_0202B07E:
ldr r0, [sp, #0x0]
sub r1, r1, #0x4
ldr r1, [r0, r1]
mov r0, #0x5b
lsl r0, r0, #0x2
add r2, r1, #0x0
mul r2, r0
ldr r0, [sp, #0x0]
add r0, r0, r2
str r0, [sp, #0x14]
ldr r0, [sp, #0x4]
bl GetPartyCount
str r0, [sp, #0x10]
mov r0, #0xb
mov r1, #0x0
bl String_ctor
mov r2, #0x5a
add r6, r0, #0x0
ldr r1, [sp, #0x14]
mov r0, #0x0
lsl r2, r2, #0x2
bl MIi_CpuClear16
ldr r0, [sp, #0x10]
mov r7, #0x0
cmp r0, #0x0
ble _0202B18E
ldr r5, [sp, #0x14]
_0202B0BA:
ldr r0, [sp, #0x4]
add r1, r7, #0x0
bl GetPartyMonByIndex
add r4, r0, #0x0
bl AcquireMonLock
str r0, [sp, #0xc]
add r0, r4, #0x0
mov r1, #0x4c
mov r2, #0x0
bl GetMonData
cmp r0, #0x0
bne _0202B17E
add r0, r4, #0x0
mov r1, #0x5
mov r2, #0x0
bl GetMonData
strh r0, [r5, #0x0]
add r0, r4, #0x0
mov r1, #0xa0
mov r2, #0x0
bl GetMonData
strb r0, [r5, #0x2]
add r0, r4, #0x0
mov r1, #0x70
mov r2, #0x0
bl GetMonData
mov r1, #0x0
strb r0, [r5, #0x3]
add r0, r4, #0x0
add r2, r1, #0x0
bl GetMonData
str r0, [r5, #0x4]
add r0, r4, #0x0
mov r1, #0x7
mov r2, #0x0
bl GetMonData
str r0, [r5, #0x8]
add r0, r4, #0x0
mov r1, #0x36
mov r2, #0x0
bl GetMonData
strh r0, [r5, #0x32]
add r0, r4, #0x0
mov r1, #0x37
mov r2, #0x0
bl GetMonData
strh r0, [r5, #0x34]
add r0, r4, #0x0
mov r1, #0x38
mov r2, #0x0
bl GetMonData
strh r0, [r5, #0x36]
add r0, r4, #0x0
mov r1, #0x39
mov r2, #0x0
bl GetMonData
strh r0, [r5, #0x38]
cmp r6, #0x0
beq _0202B176
add r0, r4, #0x0
mov r1, #0x76
add r2, r6, #0x0
bl GetMonData
add r1, r5, #0x0
add r0, r6, #0x0
add r1, #0xc
mov r2, #0xb
bl CopyStringToU16Array
add r0, r4, #0x0
mov r1, #0x90
add r2, r6, #0x0
bl GetMonData
add r1, r5, #0x0
add r0, r6, #0x0
add r1, #0x22
mov r2, #0x8
bl CopyStringToU16Array
b _0202B17C
_0202B176:
ldr r0, _0202B1EC ; =0x0000FFFF
strh r0, [r5, #0xc]
strh r0, [r5, #0x22]
_0202B17C:
add r5, #0x3c
_0202B17E:
ldr r1, [sp, #0xc]
add r0, r4, #0x0
bl ReleaseMonLock
ldr r0, [sp, #0x10]
add r7, r7, #0x1
cmp r7, r0
blt _0202B0BA
_0202B18E:
ldr r0, [sp, #0x8]
mov r1, #0x5a
ldr r2, [r0, #0x0]
ldr r0, [sp, #0x14]
lsl r1, r1, #0x2
strh r2, [r0, r1]
ldr r0, [sp, #0x8]
add r2, r1, #0x2
ldr r3, [r0, #0x4]
ldr r0, [sp, #0x14]
add r1, r1, #0x3
strb r3, [r0, r2]
ldr r0, [sp, #0x8]
ldr r2, [r0, #0x8]
ldr r0, [sp, #0x14]
strb r2, [r0, r1]
ldr r1, _0202B1E0 ; =0x00002AA8
ldr r0, [sp, #0x0]
ldr r0, [r0, r1]
add r2, r0, #0x1
ldr r0, [sp, #0x0]
str r2, [r0, r1]
ldr r0, [r0, r1]
cmp r0, #0x1e
blo _0202B1C6
ldr r0, [sp, #0x0]
mov r2, #0x0
str r2, [r0, r1]
_0202B1C6:
ldr r1, _0202B1E4 ; =0x00002AAC
ldr r0, [sp, #0x0]
ldr r0, [r0, r1]
add r2, r0, #0x1
ldr r0, [sp, #0x0]
cmp r6, #0x0
str r2, [r0, r1]
beq _0202B1DC
add r0, r6, #0x0
bl String_dtor
_0202B1DC:
add sp, #0x18
pop {r3-r7, pc}
.balign 4
_0202B1E0: .word 0x00002AA8
_0202B1E4: .word 0x00002AAC
_0202B1E8: .word 0x0000270F
_0202B1EC: .word 0x0000FFFF
thumb_func_start FUN_0202B1F0
FUN_0202B1F0: ; 0x0202B1F0
push {r4, lr}
add r4, r0, #0x0
bne _0202B1FA
bl ErrorHandling
_0202B1FA:
ldr r0, _0202B214 ; =0x00002AA8
ldr r0, [r4, r0]
cmp r0, #0x1e
blo _0202B206
bl ErrorHandling
_0202B206:
ldr r0, _0202B218 ; =0x00002AAC
ldr r0, [r4, r0]
cmp r0, #0x1e
blo _0202B210
mov r0, #0x1e
_0202B210:
pop {r4, pc}
nop
_0202B214: .word 0x00002AA8
_0202B218: .word 0x00002AAC
thumb_func_start FUN_0202B21C
FUN_0202B21C: ; 0x0202B21C
push {r3-r5, lr}
add r5, r0, #0x0
add r4, r1, #0x0
cmp r5, #0x0
bne _0202B22A
bl ErrorHandling
_0202B22A:
ldr r0, _0202B248 ; =0x00002AA8
ldr r0, [r5, r0]
cmp r0, #0x1e
blo _0202B236
bl ErrorHandling
_0202B236:
cmp r4, #0x1e
blt _0202B23E
bl ErrorHandling
_0202B23E:
ldr r0, _0202B24C ; =0x00002AAC
ldr r0, [r5, r0]
sub r0, r0, r4
pop {r3-r5, pc}
nop
_0202B248: .word 0x00002AA8
_0202B24C: .word 0x00002AAC
thumb_func_start FUN_0202B250
FUN_0202B250: ; 0x0202B250
push {r3-r5, lr}
add r5, r0, #0x0
add r4, r1, #0x0
cmp r5, #0x0
bne _0202B25E
bl ErrorHandling
_0202B25E:
ldr r0, _0202B298 ; =0x00002AA8
ldr r0, [r5, r0]
cmp r0, #0x1e
blo _0202B26A
bl ErrorHandling
_0202B26A:
cmp r4, #0x1e
blt _0202B272
bl ErrorHandling
_0202B272:
ldr r0, _0202B298 ; =0x00002AA8
ldr r0, [r5, r0]
sub r0, r0, #0x1
sub r2, r0, r4
bpl _0202B27E
add r2, #0x1e
_0202B27E:
mov r1, #0x5b
lsl r1, r1, #0x2
mul r1, r2
mov r0, #0x0
add r2, r5, r1
_0202B288:
ldrh r1, [r2, #0x0]
cmp r1, #0x0
beq _0202B296
add r0, r0, #0x1
add r2, #0x3c
cmp r0, #0x6
blo _0202B288
_0202B296:
pop {r3-r5, pc}
.balign 4
_0202B298: .word 0x00002AA8
thumb_func_start FUN_0202B29C
FUN_0202B29C: ; 0x0202B29C
push {r3-r7, lr}
add r5, r0, #0x0
add r6, r1, #0x0
add r7, r2, #0x0
add r4, r3, #0x0
cmp r5, #0x0
bne _0202B2AE
bl ErrorHandling
_0202B2AE:
ldr r0, _0202B318 ; =0x00002AA8
ldr r0, [r5, r0]
cmp r0, #0x1e
blo _0202B2BA
bl ErrorHandling
_0202B2BA:
cmp r6, #0x1e
blt _0202B2C2
bl ErrorHandling
_0202B2C2:
ldr r0, _0202B318 ; =0x00002AA8
ldr r0, [r5, r0]
sub r0, r0, #0x1
sub r1, r0, r6
bpl _0202B2CE
add r1, #0x1e
_0202B2CE:
mov r0, #0x5b
lsl r0, r0, #0x2
mul r0, r1
add r1, r5, r0
mov r0, #0x3c
mul r0, r7
add r5, r1, r0
ldrh r0, [r1, r0]
add r1, r5, #0x0
add r1, #0xc
strh r0, [r4, #0x10]
ldrb r0, [r5, #0x2]
strb r0, [r4, #0x12]
ldr r0, [r5, #0x4]
str r0, [r4, #0x8]
ldr r0, [r5, #0x8]
str r0, [r4, #0xc]
ldrb r0, [r5, #0x3]
strb r0, [r4, #0x13]
ldr r0, [r4, #0x0]
bl CopyU16ArrayToString
add r1, r5, #0x0
ldr r0, [r4, #0x4]
add r1, #0x22
bl CopyU16ArrayToString
mov r1, #0x0
_0202B306:
ldrh r0, [r5, #0x32]
add r1, r1, #0x1
add r5, r5, #0x2
strh r0, [r4, #0x14]
add r4, r4, #0x2
cmp r1, #0x4
blt _0202B306
pop {r3-r7, pc}
nop
_0202B318: .word 0x00002AA8
thumb_func_start FUN_0202B31C
FUN_0202B31C: ; 0x0202B31C
push {r4-r6, lr}
add r5, r0, #0x0
add r6, r1, #0x0
add r4, r2, #0x0
cmp r5, #0x0
bne _0202B32C
bl ErrorHandling
_0202B32C:
ldr r0, _0202B370 ; =0x00002AA8
ldr r0, [r5, r0]
cmp r0, #0x1e
blo _0202B338
bl ErrorHandling
_0202B338:
cmp r6, #0x1e
blt _0202B340
bl ErrorHandling
_0202B340:
ldr r0, _0202B370 ; =0x00002AA8
ldr r0, [r5, r0]
sub r0, r0, #0x1
sub r2, r0, r6
bpl _0202B34C
add r2, #0x1e
_0202B34C:
mov r0, #0x5b
lsl r0, r0, #0x2
add r1, r2, #0x0
mul r1, r0
add r2, r5, r1
sub r1, r0, #0x4
ldrh r1, [r2, r1]
str r1, [r4, #0x0]
sub r1, r0, #0x2
ldrb r1, [r2, r1]
sub r0, r0, #0x1
str r1, [r4, #0x4]
ldrb r0, [r2, r0]
str r0, [r4, #0x8]
mov r0, #0x0
str r0, [r4, #0xc]
pop {r4-r6, pc}
nop
_0202B370: .word 0x00002AA8

View File

@@ -2253,7 +2253,7 @@ FUN_02038824: ; 0x02038824
ldr r0, [r5, #0xc]
mov r1, #0xb
add r2, sp, #0x0
bl LoadSaveFile
bl LoadHallOfFame
ldr r1, [sp, #0x0]
add r4, r0, #0x0
cmp r1, #0x2

View File

@@ -29,7 +29,7 @@ FUN_020484A8: ; 0x020484A8
add r6, r1, #0x0
mov r1, #0xb
add r2, sp, #0x0
bl LoadSaveFile
bl LoadHallOfFame
add r4, r0, #0x0
ldr r0, [sp, #0x0]
cmp r0, #0x1
@@ -38,7 +38,7 @@ FUN_020484A8: ; 0x020484A8
bne _020484CC
_020484C6:
add r0, r4, #0x0
bl FUN_0202B03C
bl Sav2_HOF_init
_020484CC:
ldr r0, [r5, #0xc]
bl SavArray_PlayerParty_get
@@ -48,10 +48,10 @@ _020484CC:
add r0, r4, #0x0
add r1, r6, #0x0
add r2, sp, #0x4
bl FUN_0202B050
bl Sav2_HOF_RecordParty
ldr r0, [r5, #0xc]
add r1, r4, #0x0
bl SaveGame
bl SaveHallOfFame
add r0, r4, #0x0
bl FreeToHeap
add sp, #0x14

View File

@@ -1431,8 +1431,8 @@
.extern GetStoragePCPointer
.extern FUN_0202251C
.extern FUN_02022528
.extern LoadSaveFile
.extern SaveGame
.extern LoadHallOfFame
.extern SaveHallOfFame
.extern SaveBlock2_new
.extern FUN_020225F8
.extern SavArray_get
@@ -2102,14 +2102,14 @@
.extern FUN_0202AFC0
.extern FUN_0202AFFC
.extern FUN_0202B020
.extern FUN_0202B034
.extern FUN_0202B03C
.extern FUN_0202B050
.extern FUN_0202B1F0
.extern FUN_0202B21C
.extern FUN_0202B250
.extern FUN_0202B29C
.extern FUN_0202B31C
.extern Sav2_HOF_sizeof
.extern Sav2_HOF_init
.extern Sav2_HOF_RecordParty
.extern Sav2_HOF_GetNumRecords
.extern Sav2_HOF_TranslateRecordIdx
.extern Sav2_HOF_RecordCountMons
.extern Sav2_HOF_GetMonStatsByIndexPair
.extern Sav2_HOF_GetClearDate
.extern FUN_0202B374
.extern FUN_0202B37C
.extern FUN_0202B390

View File

@@ -35,7 +35,7 @@ MOD70_021D74E0: ; 0x021D74E0
add r0, r4, #0
add r0, #0xcc
ldr r0, [r0]
bl FUN_0202B1F0
bl Sav2_HOF_GetNumRecords
add r1, r4, #0
add r1, #0xd0
str r0, [r1]
@@ -357,16 +357,16 @@ MOD70_021D777C: ; 0x021D777C
str r2, [sp]
add r0, r7, #0
add r1, r2, #0
bl FUN_0202B21C
bl Sav2_HOF_TranslateRecordIdx
str r0, [r6]
ldr r1, [sp]
add r0, r7, #0
bl FUN_0202B250
bl Sav2_HOF_RecordCountMons
str r0, [r6, #0x14]
ldr r1, [sp]
add r0, r7, #0
add r2, r6, #4
bl FUN_0202B31C
bl Sav2_HOF_GetClearDate
ldr r0, [r6, #0x14]
mov r4, #0
cmp r0, #0
@@ -378,7 +378,7 @@ _021D77AE:
add r0, r7, #0
add r2, r4, #0
add r3, r5, #0
bl FUN_0202B29C
bl Sav2_HOF_GetMonStatsByIndexPair
ldr r0, [r6, #0x14]
add r4, r4, #1
add r5, #0x1c

147
arm9/src/hall_of_fame.c Normal file
View File

@@ -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;
}

View File

@@ -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 }
};

55
include/hall_of_fame.h Normal file
View File

@@ -0,0 +1,55 @@
#ifndef POKEDIAMOND_HALL_OF_FAME_H
#define POKEDIAMOND_HALL_OF_FAME_H
#define NUM_HOF_RECORDS 30
struct HOFMon
{
/* 0x00 */ u16 species;
/* 0x02 */ u8 level;
/* 0x03 */ u8 forme;
/* 0x04 */ u32 personality;
/* 0x08 */ u32 otid;
/* 0x0C */ u16 nickname[POKEMON_NAME_LENGTH + 1];
/* 0x22 */ u16 otname[OT_NAME_LENGTH + 1];
/* 0x32 */ u16 moves[4];
/* 0x3A */ u8 padding[2];
};
struct HOFParty
{
struct HOFMon party[6];
u16 year;
u8 month;
u8 day;
};
struct HallOfFame
{
struct HOFParty parties[NUM_HOF_RECORDS];
u32 next_record;
u32 num_total;
};
struct HofDisplayMon
{
struct String * nickname;
struct String * otname;
u32 personality;
u32 otid;
u16 species;
u8 level;
u8 forme;
u16 moves[4];
};
u32 Sav2_HOF_sizeof(void);
void Sav2_HOF_init(struct HallOfFame * hof);
void Sav2_HOF_RecordParty(struct HallOfFame * hof, struct PlayerParty * party, RTCDate * date);
u32 Sav2_HOF_GetNumRecords(struct HallOfFame * hof);
int Sav2_HOF_TranslateRecordIdx(struct HallOfFame * hof, int a1);
u32 Sav2_HOF_RecordCountMons(struct HallOfFame * hof, int a1);
void Sav2_HOF_GetMonStatsByIndexPair(struct HallOfFame * hof, int a1, int a2, struct HofDisplayMon * dest);
void Sav2_HOF_GetClearDate(struct HallOfFame * hof, int a1, RTCDate * dest);
#endif //POKEDIAMOND_HALL_OF_FAME_H