mirror of
https://github.com/pret/pokediamond.git
synced 2026-08-28 03:34:38 -05:00
Merge pull request #269 from PikalaxALT/pikalax_work
Decompile hall_of_fame.c
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
147
arm9/src/hall_of_fame.c
Normal 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;
|
||||
}
|
||||
@@ -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
55
include/hall_of_fame.h
Normal 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
|
||||
Reference in New Issue
Block a user