Decompile unk_0202C9A0.s -> save_trainer_card.c

This commit is contained in:
PikalaxALT 2022-03-11 10:05:29 -05:00
parent 9e554c0350
commit 0b2879913f
13 changed files with 117 additions and 158 deletions

View File

@ -91,8 +91,8 @@ _021E80D6:
bl sub_0200FA24
add r0, r6, #0
bl OverlayManager_GetField18
bl sub_0202C9D8
bl sub_0202C9E4
bl Save_TranerCard_get
bl TrainerCard_GetSignature
ldr r1, _021E8238 ; =0x00005B98
str r0, [r4, r1]
add r0, r6, #0

View File

@ -1,101 +0,0 @@
.include "asm/macros.inc"
.include "global.inc"
.text
thumb_func_start sub_0202C9A0
sub_0202C9A0: ; 0x0202C9A0
mov r0, #0x62
lsl r0, r0, #4
bx lr
.balign 4, 0
thumb_func_end sub_0202C9A0
thumb_func_start sub_0202C9A8
sub_0202C9A8: ; 0x0202C9A8
push {r4, r5, r6, lr}
mov r2, #0x62
add r4, r0, #0
mov r1, #0
lsl r2, r2, #4
bl memset
add r0, r4, #0
bl sub_0202CA10
add r5, r0, #0
mov r4, #0
mov r6, #0x8c
_0202C9C2:
lsl r0, r4, #0x18
lsr r0, r0, #0x18
add r1, r6, #0
add r2, r5, #0
bl sub_0202CA1C
add r4, r4, #1
cmp r4, #8
blt _0202C9C2
pop {r4, r5, r6, pc}
.balign 4, 0
thumb_func_end sub_0202C9A8
thumb_func_start sub_0202C9D8
sub_0202C9D8: ; 0x0202C9D8
ldr r3, _0202C9E0 ; =SavArray_get
mov r1, #0xf
bx r3
nop
_0202C9E0: .word SavArray_get
thumb_func_end sub_0202C9D8
thumb_func_start sub_0202C9E4
sub_0202C9E4: ; 0x0202C9E4
add r0, #0x20
bx lr
thumb_func_end sub_0202C9E4
thumb_func_start sub_0202C9E8
sub_0202C9E8: ; 0x0202C9E8
push {r3, r4}
mov r3, #0
mov r1, #6
add r4, r3, #0
add r0, #0x20
lsl r1, r1, #6
_0202C9F4:
ldr r2, [r0]
add r4, r4, #1
add r3, r3, r2
add r0, r0, #4
cmp r4, r1
blt _0202C9F4
cmp r3, #0
beq _0202CA0A
mov r0, #1
pop {r3, r4}
bx lr
_0202CA0A:
mov r0, #0
pop {r3, r4}
bx lr
thumb_func_end sub_0202C9E8
thumb_func_start sub_0202CA10
sub_0202CA10: ; 0x0202CA10
bx lr
.balign 4, 0
thumb_func_end sub_0202CA10
thumb_func_start sub_0202CA14
sub_0202CA14: ; 0x0202CA14
lsl r0, r0, #2
ldr r0, [r1, r0]
bx lr
.balign 4, 0
thumb_func_end sub_0202CA14
thumb_func_start sub_0202CA1C
sub_0202CA1C: ; 0x0202CA1C
lsl r0, r0, #2
str r1, [r2, r0]
bx lr
.balign 4, 0
thumb_func_end sub_0202CA1C

View File

@ -2845,7 +2845,7 @@ sub_0203F818: ; 0x0203F818
sub sp, #0x10
add r4, r0, #0
ldr r0, [r4, #0xc]
bl sub_0202C9D8
bl Save_TranerCard_get
ldr r5, _0203F840 ; =_020FA254
add r3, sp, #0
add r2, r3, #0

View File

@ -901,8 +901,8 @@ sub_0206759C: ; 0x0206759C
str r1, [sp]
cmp r1, #0
ble _02067606
bl sub_0202C9D8
bl sub_0202CA10
bl Save_TranerCard_get
bl TrainerCard_GetBadgeShininessArr
add r4, r0, #0
add r0, r5, #0
bl Sav2_PlayerData_GetProfileAddr
@ -920,7 +920,7 @@ _020675C2:
beq _020675FC
add r0, r5, #0
add r1, r4, #0
bl sub_0202CA14
bl GetShininessOfBadgeI
add r1, r0, #0
cmp r1, #0
ble _020675E4
@ -941,7 +941,7 @@ _020675EE:
_020675F4:
add r0, r5, #0
add r2, r4, #0
bl sub_0202CA1C
bl SetShininessOfBadgeI
_020675FC:
add r0, r5, #1
lsl r0, r0, #0x18

View File

@ -100,7 +100,7 @@ sub_02068FC8: ; 0x02068FC8
add r3, sp, #0x84
bl sub_02069308
ldr r0, [r6, #0xc]
bl sub_0202C9D8
bl Save_TranerCard_get
str r0, [sp, #0x44]
add r0, r4, #0
mov r1, #0x21
@ -159,10 +159,10 @@ sub_02068FC8: ; 0x02068FC8
bl GameStats_GetCapped
add r4, r0, #0
ldr r0, [sp, #0x44]
bl sub_0202C9E8
bl TrainerCard_SignatureExists
str r0, [sp, #0x74]
ldr r0, [sp, #0x44]
bl sub_0202C9E4
bl TrainerCard_GetSignature
ldr r1, [sp, #0x74]
ldr r2, [sp, #0x60]
lsl r1, r1, #0x18
@ -536,8 +536,8 @@ sub_0206940C: ; 0x0206940C
add r7, r0, #0
ldr r0, [r1, #0xc]
add r6, r2, #0
bl sub_0202C9D8
bl sub_0202CA10
bl Save_TranerCard_get
bl TrainerCard_GetBadgeShininessArr
add r1, r6, #0
mov r2, #0
add r1, #0x48

View File

@ -27389,14 +27389,14 @@
.public sub_0202C88C
.public sub_0202C8C4
.public sub_0202C8E4
.public sub_0202C9A0
.public sub_0202C9A8
.public sub_0202C9D8
.public sub_0202C9E4
.public sub_0202C9E8
.public sub_0202CA10
.public sub_0202CA14
.public sub_0202CA1C
.public Save_TrainerCard_sizeof
.public Save_TrainerCard_init
.public Save_TranerCard_get
.public TrainerCard_GetSignature
.public TrainerCard_SignatureExists
.public TrainerCard_GetBadgeShininessArr
.public GetShininessOfBadgeI
.public SetShininessOfBadgeI
.public sub_0202CA24
.public sub_0202CA2C
.public sub_0202CA44

View File

@ -18,7 +18,7 @@
#define SAVE_DRESSUP_DATA 12
#define SAVE_MAILBOX 13
#define SAVE_FRIEND_GROUP 14
#define SAVE_UNK_15 15
#define SAVE_TRAINER_CARD 15
#define SAVE_GAMESTATS 16
#define SAVE_SEAL_CASE 17
#define SAVE_CHATOT 18

View File

@ -0,0 +1,20 @@
#ifndef POKEHEARTGOLD_SAVE_TRAINER_CARD_H
#define POKEHEARTGOLD_SAVE_TRAINER_CARD_H
#include "save.h"
struct SaveTrainerCard {
int badgeShininess[8];
int signaturePointData[0x180];
}; // size=0x620
u32 Save_TrainerCard_sizeof(void);
void Save_TrainerCard_init(struct SaveTrainerCard *data);
struct SaveTrainerCard *Save_TranerCard_get(SAVEDATA *saveData);
int *TrainerCard_GetSignature(struct SaveTrainerCard *data);
BOOL TrainerCard_SignatureExists(struct SaveTrainerCard *data);
int *TrainerCard_GetBadgeShininessArr(struct SaveTrainerCard *data);
int GetShininessOfBadgeI(u8 idx, int *arr);
void SetShininessOfBadgeI(u8 idx, int val, int *arr);
#endif //POKEHEARTGOLD_SAVE_TRAINER_CARD_H

View File

@ -1,8 +0,0 @@
#ifndef POKEHEARTGOLD_UNK_0202C9A0_H
#define POKEHEARTGOLD_UNK_0202C9A0_H
void *sub_0202C9D8(SAVEDATA *saveData);
void *sub_0202C9E4(void *);
BOOL sub_0202C9E8(void *);
#endif //POKEHEARTGOLD_UNK_0202C9A0_H

View File

@ -104,7 +104,7 @@ Static main
Object asm/unk_0202C034.o
Object asm/unk_0202C730.o
Object src/coins.o
Object asm/unk_0202C9A0.o
Object src/save_trainer_card.o
Object asm/unk_0202CA24.o
Object src/seal_case.o
Object src/igt.o

View File

@ -3,7 +3,7 @@
#include "overlay_trainer_card_main.h"
#include "overlay_trainer_card_signature.h"
#include "unk_02004A44.h"
#include "unk_0202C9A0.h"
#include "save_trainer_card.h"
FS_EXTERN_OVERLAY(OVY_51);
FS_EXTERN_OVERLAY(OVY_52);
@ -114,8 +114,8 @@ static int TCardAppRunStep_SignatureExec(TrainerCardAppState *a0) {
return TRAINERCARD_RUN_SIGNATURE_EXEC;
}
ptr = sub_0202C9D8(a0->unkC->saveData);
a0->unkC->unk4b = sub_0202C9E8(ptr);
MI_CpuCopy8(sub_0202C9E4(ptr), a0->unkC->unk68, sizeof(a0->unkC->unk68));
ptr = Save_TranerCard_get(a0->unkC->saveData);
a0->unkC->unk4b = TrainerCard_SignatureExists(ptr);
MI_CpuCopy8(TrainerCard_GetSignature(ptr), a0->unkC->unk68, sizeof(a0->unkC->unk68));
return TRAINERCARD_RUN_INIT;
}

View File

@ -20,6 +20,8 @@
#include "safari_zone.h"
#include "pokewalker.h"
#include "photo_album.h"
#include "save_follow_poke.h"
#include "save_trainer_card.h"
#define DECL_CHUNK(prefix) extern u32 prefix##_sizeof(void); extern void prefix##_init(void *);
#define DECL_CHUNK_EX(sizefn, initfn) extern u32 sizefn(void); extern void initfn(void *);
@ -28,7 +30,6 @@ DECL_CHUNK(Save_FlyPoints)
DECL_CHUNK_EX(sub_0203B920, sub_0203B928)
DECL_CHUNK_EX(sub_020290B8, sub_020290C8)
DECL_CHUNK(Sav2_DressupData)
DECL_CHUNK_EX(sub_0202C9A0, sub_0202C9A8)
DECL_CHUNK(GameStats)
DECL_CHUNK_EX(sub_02031000, sub_02031008)
DECL_CHUNK_EX(sub_0202D938, sub_0202D93C)
@ -41,7 +42,6 @@ DECL_CHUNK_EX(sub_0202EB30, sub_0202EB38)
DECL_CHUNK_EX(sub_02031AF0, sub_02031AF4)
DECL_CHUNK_EX(sub_0203170C, sub_02031710)
DECL_CHUNK_EX(sub_020318C8, sub_020318CC)
DECL_CHUNK(Sav2_FollowPoke)
DECL_CHUNK(SaveData_GSPlayerMisc)
DECL_CHUNK_EX(sub_02031904, sub_0203190C)
DECL_CHUNK(Save_ApricornBox)
@ -53,27 +53,27 @@ const struct SaveChunkHeader gSaveChunkHeaders[] = {
{ SAVE_PARTY, 0, (SAVESIZEFN)SavArray_Party_sizeof, (SAVEINITFN)SavArray_Party_init },
{ SAVE_BAG, 0, (SAVESIZEFN)Sav2_Bag_sizeof, (SAVEINITFN)Sav2_Bag_init },
{ SAVE_FLAGS, 0, (SAVESIZEFN)SavArray_Flags_sizeof, (SAVEINITFN)SavArray_Flags_init },
{ SAVE_FLYPOINTS, 0, (SAVESIZEFN)Save_FlyPoints_sizeof, (SAVEINITFN)Save_FlyPoints_init },
{ SAVE_POKEDEX, 0, (SAVESIZEFN)Save_Pokedex_sizeof, (SAVEINITFN)Save_Pokedex_init },
{ SAVE_DAYCARE, 0, (SAVESIZEFN)Sav2_Daycare_sizeof, (SAVEINITFN)Sav2_Daycare_init },
{ SAVE_PALPAD, 0, (SAVESIZEFN)Save_PalPad_sizeof, (SAVEINITFN)Save_PalPad_init },
{ SAVE_MISC, 0, (SAVESIZEFN)Sav2_Misc_sizeof, (SAVEINITFN)Sav2_Misc_init },
{ SAVE_UNK_10, 0, (SAVESIZEFN)sub_0203B920, (SAVEINITFN)sub_0203B928 },
{ SAVE_UNK_11, 0, (SAVESIZEFN)sub_020290B8, (SAVEINITFN)sub_020290C8 },
{ SAVE_DRESSUP_DATA, 0, (SAVESIZEFN)Sav2_DressupData_sizeof, (SAVEINITFN)Sav2_DressupData_init },
{ SAVE_MAILBOX, 0, (SAVESIZEFN)Sav2_Mailbox_sizeof, (SAVEINITFN)Sav2_Mailbox_init },
{ SAVE_FRIEND_GROUP, 0, (SAVESIZEFN)Sav2_FriendGroup_sizeof, (SAVEINITFN)Sav2_FriendGroup_init },
{ SAVE_UNK_15, 0, (SAVESIZEFN)sub_0202C9A0, (SAVEINITFN)sub_0202C9A8 },
{ SAVE_GAMESTATS, 0, (SAVESIZEFN)GameStats_sizeof, (SAVEINITFN)GameStats_init },
{ SAVE_SEAL_CASE, 0, (SAVESIZEFN)Sav2_SealCase_sizeof, (SAVEINITFN)Sav2_SealCase_init },
{ SAVE_CHATOT, 0, (SAVESIZEFN)Sav2_Chatot_sizeof, (SAVEINITFN)Sav2_Chatot_init },
{ SAVE_UNK_19, 0, (SAVESIZEFN)sub_02031000, (SAVEINITFN)sub_02031008 },
{ SAVE_UNK_20, 0, (SAVESIZEFN)sub_0202D938, (SAVEINITFN)sub_0202D93C },
{ SAVE_ROAMER, 0, (SAVESIZEFN)Save_Roamers_sizeof, (SAVEINITFN)Save_Roamers_init },
{ SAVE_UNK_22, 0, (SAVESIZEFN)sub_0202DB40, (SAVEINITFN)sub_0202DB44 },
{ SAVE_UNK_23, 0, (SAVESIZEFN)sub_0202E41C, (SAVEINITFN)sub_0202E424 },
{ SAVE_UNK_24, 0, (SAVESIZEFN)sub_0202E4F4, (SAVEINITFN)sub_0202E4FC },
{ SAVE_UNK_25, 0, (SAVESIZEFN)sub_0202C034, (SAVEINITFN)sub_0202C03C },
{SAVE_FLYPOINTS, 0, (SAVESIZEFN)Save_FlyPoints_sizeof, (SAVEINITFN)Save_FlyPoints_init },
{SAVE_POKEDEX, 0, (SAVESIZEFN)Save_Pokedex_sizeof, (SAVEINITFN)Save_Pokedex_init },
{SAVE_DAYCARE, 0, (SAVESIZEFN)Sav2_Daycare_sizeof, (SAVEINITFN)Sav2_Daycare_init },
{SAVE_PALPAD, 0, (SAVESIZEFN)Save_PalPad_sizeof, (SAVEINITFN)Save_PalPad_init },
{SAVE_MISC, 0, (SAVESIZEFN)Sav2_Misc_sizeof, (SAVEINITFN)Sav2_Misc_init },
{SAVE_UNK_10, 0, (SAVESIZEFN)sub_0203B920, (SAVEINITFN)sub_0203B928 },
{SAVE_UNK_11, 0, (SAVESIZEFN)sub_020290B8, (SAVEINITFN)sub_020290C8 },
{SAVE_DRESSUP_DATA, 0, (SAVESIZEFN)Sav2_DressupData_sizeof, (SAVEINITFN)Sav2_DressupData_init },
{SAVE_MAILBOX, 0, (SAVESIZEFN)Sav2_Mailbox_sizeof, (SAVEINITFN)Sav2_Mailbox_init },
{SAVE_FRIEND_GROUP, 0, (SAVESIZEFN)Sav2_FriendGroup_sizeof, (SAVEINITFN)Sav2_FriendGroup_init },
{SAVE_TRAINER_CARD, 0, (SAVESIZEFN)Save_TrainerCard_sizeof, (SAVEINITFN)Save_TrainerCard_init },
{SAVE_GAMESTATS, 0, (SAVESIZEFN)GameStats_sizeof, (SAVEINITFN)GameStats_init },
{SAVE_SEAL_CASE, 0, (SAVESIZEFN)Sav2_SealCase_sizeof, (SAVEINITFN)Sav2_SealCase_init },
{SAVE_CHATOT, 0, (SAVESIZEFN)Sav2_Chatot_sizeof, (SAVEINITFN)Sav2_Chatot_init },
{SAVE_UNK_19, 0, (SAVESIZEFN)sub_02031000, (SAVEINITFN)sub_02031008 },
{SAVE_UNK_20, 0, (SAVESIZEFN)sub_0202D938, (SAVEINITFN)sub_0202D93C },
{SAVE_ROAMER, 0, (SAVESIZEFN)Save_Roamers_sizeof, (SAVEINITFN)Save_Roamers_init },
{SAVE_UNK_22, 0, (SAVESIZEFN)sub_0202DB40, (SAVEINITFN)sub_0202DB44 },
{SAVE_UNK_23, 0, (SAVESIZEFN)sub_0202E41C, (SAVEINITFN)sub_0202E424 },
{SAVE_UNK_24, 0, (SAVESIZEFN)sub_0202E4F4, (SAVEINITFN)sub_0202E4FC },
{SAVE_UNK_25, 0, (SAVESIZEFN)sub_0202C034, (SAVEINITFN)sub_0202C03C },
{ SAVE_UNK_26, 0, (SAVESIZEFN)sub_0202CA24, (SAVEINITFN)sub_0202CA2C },
{ SAVE_MYSTERY_GIFT, 0, (SAVESIZEFN)Save_MysteryGift_sizeof, (SAVEINITFN)Save_MysteryGift_init },
{ SAVE_UNK_28, 0, (SAVESIZEFN)sub_0202EB30, (SAVEINITFN)sub_0202EB38 },

48
src/save_trainer_card.c Normal file
View File

@ -0,0 +1,48 @@
#include "save_trainer_card.h"
u32 Save_TrainerCard_sizeof(void) {
return sizeof(struct SaveTrainerCard);
}
void Save_TrainerCard_init(struct SaveTrainerCard *data) {
int i;
int *badges;
memset(data, 0, sizeof(struct SaveTrainerCard));
badges = TrainerCard_GetBadgeShininessArr(data);
for (i = 0; i < 8; i++) {
SetShininessOfBadgeI(i, 0x8C, badges);
}
}
struct SaveTrainerCard *Save_TranerCard_get(SAVEDATA *saveData) {
return SavArray_get(saveData, SAVE_TRAINER_CARD);
}
int *TrainerCard_GetSignature(struct SaveTrainerCard *data) {
return data->signaturePointData;
}
BOOL TrainerCard_SignatureExists(struct SaveTrainerCard *data) {
u32 total = 0;
int i;
int *arr;
for (i = 0, arr = data->signaturePointData; i < 0x180; i++) {
total += arr[i];
}
return total != 0;
}
int *TrainerCard_GetBadgeShininessArr(struct SaveTrainerCard *data) {
return data->badgeShininess;
}
int GetShininessOfBadgeI(u8 idx, int *arr) {
return arr[idx];
}
void SetShininessOfBadgeI(u8 idx, int val, int *arr) {
arr[idx] = val;
}