save_misc.c, 1

This commit is contained in:
PikalaxALT 2022-01-27 08:49:33 -05:00
parent 4363c723f6
commit e21ff298d7
11 changed files with 199 additions and 414 deletions

View File

@ -225,12 +225,12 @@ ov17_02201D30: ; 0x02201D30
ldr r0, [r5, #4]
ldr r0, [r0, #4]
ldr r0, [r0, #0xc]
bl sub_0202A978
bl Sav2_BerryPots_get
str r0, [r5, #0x14]
ldr r0, [r5, #4]
ldr r0, [r0, #4]
ldr r0, [r0, #0xc]
bl sub_0202A988
bl Sav2_BerryPotRTC_get
str r0, [r5, #0x18]
ldr r1, [r5, #4]
ldrb r0, [r1, #0x14]

View File

@ -134,8 +134,8 @@ _021E59E8:
bl Sav2_SysInfo_RTC_get
bl sub_02028E4C
add r0, r4, #0
bl sub_0202A988
bl sub_0202A8A8
bl Sav2_BerryPotRTC_get
bl Sav2_BerryPotRTC_init
add r0, r5, #0
bl Sav2_SysInfo_InitFromSystem
add r0, r4, #0
@ -180,8 +180,8 @@ ov36_021E5A38: ; 0x021E5A38
bl Sav2_SysInfo_RTC_get
bl Sav2_SysInfo_RTC_init
add r0, r6, #0
bl sub_0202A988
bl sub_0202A8A8
bl Sav2_BerryPotRTC_get
bl Sav2_BerryPotRTC_init
add r0, r6, #0
bl sub_0202C854
add r4, r0, #0

View File

@ -3,410 +3,10 @@
.include "asm/macros.inc"
.include "global.inc"
.rodata
_020F677C:
.byte 0x00, 0x04
.byte 0x04, 0x02
.byte 0x06, 0x02
.public _020F677C
.text
thumb_func_start sub_0202A888
sub_0202A888: ; 0x0202A888
push {r4, lr}
mov r1, #0
mov r2, #0x30
add r4, r0, #0
bl MI_CpuFill8
mov r1, #0
add r0, r1, #0
_0202A898:
strb r0, [r4, #1]
strb r0, [r4]
add r1, r1, #1
add r4, #0xc
cmp r1, #4
blt _0202A898
pop {r4, pc}
.balign 4, 0
thumb_func_end sub_0202A888
thumb_func_start sub_0202A8A8
sub_0202A8A8: ; 0x0202A8A8
ldr r3, _0202A8B0 ; =GF_RTC_CopyDateTime
add r1, r0, #0
add r1, #0x10
bx r3
.balign 4, 0
_0202A8B0: .word GF_RTC_CopyDateTime
thumb_func_end sub_0202A8A8
thumb_func_start Sav2_Misc_sizeof
Sav2_Misc_sizeof: ; 0x0202A8B4
mov r0, #0x2e
lsl r0, r0, #4
bx lr
.balign 4, 0
thumb_func_end Sav2_Misc_sizeof
thumb_func_start Sav2_Misc_init
Sav2_Misc_init: ; 0x0202A8BC
push {r4, lr}
add r4, r0, #0
mov r2, #0x2e
mov r0, #0
add r1, r4, #0
lsl r2, r2, #4
bl MIi_CpuClearFast
add r0, r4, #0
bl ApricornTrees_init
mov r0, #2
lsl r0, r0, #8
add r0, r4, r0
bl sub_0202A888
mov r0, #0x23
lsl r0, r0, #4
add r0, r4, r0
bl sub_0202A8A8
mov r0, #0x93
lsl r0, r0, #2
add r0, r4, r0
bl SavGymmick_Clear
mov r1, #0x27
lsl r1, r1, #4
ldr r0, _0202A948 ; =0x0000FFFF
add r1, r4, r1
mov r2, #8
bl MIi_CpuClear16
mov r0, #0xa
lsl r0, r0, #6
add r0, r4, r0
mov r1, #0xff
mov r2, #8
bl MI_CpuFill8
; REGARDS!\nHello!
mov r0, #0x2a
lsl r0, r0, #4
add r0, r4, r0
mov r1, #MAILMSG_BANK_0295_GMM
bl MailMsg_init_withBank
ldr r0, _0202A94C ; =0x000002A2
mov r1, #msg_0295_00000
strh r1, [r4, r0]
ldr r0, _0202A950 ; =0x0000011F ; msg_0287.gmm
mov r1, #msg_0287_regards
bl GetECWordIndexByPair
mov r1, #0x2A4>>2
lsl r1, r1, #2
strh r0, [r4, r1]
ldr r2, _0202A948 ; =0x0000FFFF
add r0, r1, #2
strh r2, [r4, r0]
mov r3, #0
add r0, r1, #4
sub r2, r3, #1
add r1, #0x18
_0202A93A:
str r2, [r4, r0]
str r2, [r4, r1]
add r3, r3, #1
add r4, r4, #4
cmp r3, #5
blt _0202A93A
pop {r4, pc}
.balign 4, 0
_0202A948: .word 0x0000FFFF
_0202A94C: .word 0x000002A2
_0202A950: .word 0x0000011F
thumb_func_end Sav2_Misc_init
thumb_func_start Sav2_Misc_get
Sav2_Misc_get: ; 0x0202A954
ldr r3, _0202A95C ; =SavArray_get
mov r1, #9
bx r3
nop
_0202A95C: .word SavArray_get
thumb_func_end Sav2_Misc_get
thumb_func_start Sav2_Misc_const_get
Sav2_Misc_const_get: ; 0x0202A960
ldr r3, _0202A968 ; =SavArray_const_get
mov r1, #9
bx r3
nop
_0202A968: .word SavArray_const_get
thumb_func_end Sav2_Misc_const_get
thumb_func_start Sav2_FieldApricornTrees_get
Sav2_FieldApricornTrees_get: ; 0x0202A96C
ldr r3, _0202A974 ; =SavArray_get
mov r1, #9
bx r3
nop
_0202A974: .word SavArray_get
thumb_func_end Sav2_FieldApricornTrees_get
thumb_func_start sub_0202A978
sub_0202A978: ; 0x0202A978
push {r3, lr}
mov r1, #9
bl SavArray_get
mov r1, #2
lsl r1, r1, #8
add r0, r0, r1
pop {r3, pc}
thumb_func_end sub_0202A978
thumb_func_start sub_0202A988
sub_0202A988: ; 0x0202A988
push {r3, lr}
mov r1, #9
bl SavArray_get
mov r1, #0x23
lsl r1, r1, #4
add r0, r0, r1
pop {r3, pc}
thumb_func_end sub_0202A988
thumb_func_start Sav2_GetGymmickPtr
Sav2_GetGymmickPtr: ; 0x0202A998
push {r3, lr}
mov r1, #9
bl SavArray_get
mov r1, #0x93
lsl r1, r1, #2
add r0, r0, r1
pop {r3, pc}
thumb_func_end Sav2_GetGymmickPtr
thumb_func_start Sav2_Misc_RivalName_const_get
Sav2_Misc_RivalName_const_get: ; 0x0202A9A8
mov r1, #0x27
lsl r1, r1, #4
add r0, r0, r1
bx lr
thumb_func_end Sav2_Misc_RivalName_const_get
thumb_func_start Sav2_Misc_RivalName_set
Sav2_Misc_RivalName_set: ; 0x0202A9B0
add r2, r0, #0
add r0, r1, #0
mov r1, #0x27
lsl r1, r1, #4
add r1, r2, r1
ldr r3, _0202A9C0 ; =CopyStringToU16Array
mov r2, #8
bx r3
.balign 4, 0
_0202A9C0: .word CopyStringToU16Array
thumb_func_end Sav2_Misc_RivalName_set
thumb_func_start sub_0202A9C4
sub_0202A9C4: ; 0x0202A9C4
ldr r2, _0202A9D4 ; =0x0000029B
mov r1, #1
ldrb r3, [r0, r2]
bic r3, r1
mov r1, #1
orr r1, r3
strb r1, [r0, r2]
bx lr
.balign 4, 0
_0202A9D4: .word 0x0000029B
thumb_func_end sub_0202A9C4
thumb_func_start sub_0202A9D8
sub_0202A9D8: ; 0x0202A9D8
ldr r1, _0202A9E4 ; =0x0000029B
ldrb r0, [r0, r1]
lsl r0, r0, #0x1f
lsr r0, r0, #0x1f
bx lr
nop
_0202A9E4: .word 0x0000029B
thumb_func_end sub_0202A9D8
thumb_func_start sub_0202A9E8
sub_0202A9E8: ; 0x0202A9E8
push {r4, r5}
mov r4, #0xa6
lsl r4, r4, #2
strh r1, [r0, r4]
add r1, r4, #2
ldrb r1, [r0, r1]
mov r5, #0x7f
lsl r2, r2, #0x18
bic r1, r5
lsr r5, r2, #0x18
mov r2, #0x7f
and r2, r5
orr r2, r1
add r1, r4, #2
strb r2, [r0, r1]
ldrb r1, [r0, r1]
mov r2, #0x80
bic r1, r2
lsl r2, r3, #0x18
lsr r2, r2, #0x18
lsl r2, r2, #0x1f
lsr r2, r2, #0x18
orr r2, r1
add r1, r4, #2
strb r2, [r0, r1]
pop {r4, r5}
bx lr
.balign 4, 0
thumb_func_end sub_0202A9E8
thumb_func_start sub_0202AA20
sub_0202AA20: ; 0x0202AA20
push {r4, r5}
mov r4, #0xa6
lsl r4, r4, #2
ldrh r5, [r0, r4]
str r5, [r1]
add r1, r4, #2
ldrb r1, [r0, r1]
lsl r1, r1, #0x19
lsr r1, r1, #0x19
str r1, [r2]
add r1, r4, #2
ldrb r0, [r0, r1]
lsl r0, r0, #0x18
lsr r0, r0, #0x1f
str r0, [r3]
pop {r4, r5}
bx lr
.balign 4, 0
thumb_func_end sub_0202AA20
thumb_func_start sub_0202AA44
sub_0202AA44: ; 0x0202AA44
push {r4, r5, r6, r7}
add r4, r2, #0
cmp r1, #2
bls _0202AA52
mov r0, #0
pop {r4, r5, r6, r7}
bx lr
_0202AA52:
ldr r3, _0202AA94 ; =_020F677C + 1
lsl r1, r1, #1
ldrb r3, [r3, r1]
mov r2, #0
cmp r3, #0
ble _0202AA8E
ldr r5, _0202AA98 ; =_020F677C
ldrb r3, [r5, r1]
add r5, r5, r1
ldrb r1, [r5]
add r3, r0, r3
ldrb r6, [r5, #1]
add r0, r0, r1
mov r1, #0xa
lsl r1, r1, #6
add r5, r1, #0
_0202AA72:
ldrb r7, [r3, r5]
cmp r7, #0xff
beq _0202AA8E
add r7, r2, r0
ldrb r7, [r7, r1]
cmp r4, r7
bne _0202AA86
mov r0, #1
pop {r4, r5, r6, r7}
bx lr
_0202AA86:
add r2, r2, #1
add r3, r3, #1
cmp r2, r6
blt _0202AA72
_0202AA8E:
mov r0, #0
pop {r4, r5, r6, r7}
bx lr
.balign 4, 0
_0202AA94: .word _020F677C + 1
_0202AA98: .word _020F677C
thumb_func_end sub_0202AA44
thumb_func_start sub_0202AA9C
sub_0202AA9C: ; 0x0202AA9C
push {r4, r5}
cmp r1, #2
bhi _0202AAC8
lsl r4, r1, #1
ldr r1, _0202AACC ; =_020F677C + 1
mov r2, #0
ldrb r1, [r1, r4]
cmp r1, #0
ble _0202AAC8
ldr r3, _0202AAD0 ; =_020F677C
ldrb r1, [r3, r4]
add r4, r3, r4
mov r3, #0xff
add r5, r0, r1
mov r0, #0xa
lsl r0, r0, #6
_0202AABC:
strb r3, [r5, r0]
ldrb r1, [r4, #1]
add r2, r2, #1
add r5, r5, #1
cmp r2, r1
blt _0202AABC
_0202AAC8:
pop {r4, r5}
bx lr
.balign 4, 0
_0202AACC: .word _020F677C + 1
_0202AAD0: .word _020F677C
thumb_func_end sub_0202AA9C
thumb_func_start sub_0202AAD4
sub_0202AAD4: ; 0x0202AAD4
push {r4, r5}
mov r2, #0
cmp r1, #2
bls _0202AAE2
add r0, r2, #0
pop {r4, r5}
bx lr
_0202AAE2:
lsl r4, r1, #1
ldr r1, _0202AB10 ; =_020F677C
ldr r3, _0202AB14 ; =_020F677C + 1
ldrb r1, [r1, r4]
ldrb r3, [r3, r4]
add r3, r1, r3
sub r5, r3, #1
cmp r1, r5
bgt _0202AB08
mov r3, #0xa
lsl r3, r3, #6
_0202AAF8:
add r4, r0, r1
ldrb r4, [r4, r3]
cmp r4, #0xff
beq _0202AB02
add r2, r2, #1
_0202AB02:
add r1, r1, #1
cmp r1, r5
ble _0202AAF8
_0202AB08:
lsl r0, r2, #0x18
lsr r0, r0, #0x18
pop {r4, r5}
bx lr
.balign 4, 0
_0202AB10: .word _020F677C
_0202AB14: .word _020F677C + 1
thumb_func_end sub_0202AAD4
thumb_func_start sub_0202AB18
sub_0202AB18: ; 0x0202AB18
push {r4, r5, r6, r7, lr}

View File

@ -27268,10 +27268,10 @@
.public Pokedex_Enable
.public Pokedex_GetSeenFormeByIdx
.public Pokedex_GetSeenFormeNum
.public sub_0202A8A8
.public Sav2_BerryPotRTC_init
.public Sav2_FieldApricornTrees_get
.public sub_0202A978
.public sub_0202A988
.public Sav2_BerryPots_get
.public Sav2_BerryPotRTC_get
.public Sav2_GetGymmickPtr
.public sub_0202A9C4
.public sub_0202A9D8

View File

@ -2,6 +2,7 @@
#define POKEHEARTGOLD_CONSTANTS_GLOBAL_H
#include "constants/rgb.h"
#include "constants/charcode.h"
#define OT_NAME_LENGTH 7
#define POKEMON_NAME_LENGTH 10

View File

@ -15,6 +15,11 @@ typedef enum TimeOfDayWildParam {
TIMEOFDAY_WILD_NITE,
} TimeOfDayWildParam;
struct GF_RTC_DateTime {
RTCDate date;
RTCTime time;
};
BOOL IsNighttime(void);
void GF_RTC_CopyTime(RTCTime *time);
void GF_RTC_CopyDate(RTCDate *date);

View File

@ -46,4 +46,6 @@ struct Gymmick {
};
};
void SavGymmick_Clear(struct Gymmick *gymmick);
#endif //POKEHEARTGOLD_GYMMICK_H

View File

@ -12,7 +12,7 @@
#define SAVE_POKEDEX 6
#define SAVE_DAYCARE 7
#define SAVE_UNK_8 8
#define SAVE_UNK_9 9
#define SAVE_MISC 9
#define SAVE_UNK_10 10
#define SAVE_UNK_11 11
#define SAVE_DRESSUP_DATA 12

View File

@ -2,6 +2,9 @@
#define POKEHEARTGOLD_SAVE_MISC_DATA_H
#include "save.h"
#include "mail_message.h"
#include "gf_rtc.h"
#include "gymmick.h"
typedef struct APRICORN_TREE {
u8 unk_0;
@ -9,17 +12,40 @@ typedef struct APRICORN_TREE {
u16 unk_2;
} APRICORN_TREE;
typedef struct BERRY_POT {
u8 unk_0;
u8 unk_1;
u8 filler_2[10];
} BERRY_POT;
#define MAX_APRICORN_TREE 128
#define NUM_APRICORN_TREE 31
#define MAX_BERRY_POT 4
typedef struct SAVE_MISC_DATA {
APRICORN_TREE apricorn_trees[MAX_APRICORN_TREE];
u8 filler_0200[0x70];
BERRY_POT berry_pots[MAX_BERRY_POT];
struct GF_RTC_DateTime berry_datetime;
struct Gymmick gymmick;
u16 rivalName[OT_NAME_LENGTH + 1];
u8 filler_0280[0x60];
u8 unk_0280[8]; // 3 chunks of size (4, 2, 2)
u8 filler_0288[0x10];
u16 unk_0298;
u8 unk_029A_0:7;
u8 unk_029A_7:1;
u8 unk_029B_0:1;
u8 unk_029B_1:5;
u8 filer_029C[4];
MAIL_MESSAGE unk_02A0;
u32 unk_02A8[2][5];
u8 filler_02D0[8];
u32 unk_02D8;
u8 unk_02DC;
u8 dummy_02DD[3];
} SAVE_MISC_DATA;
const SAVE_MISC_DATA *Sav2_Misc_const_get(SAVEDATA *saveData);
const SAVE_MISC_DATA *Sav2_Misc_const_get(const SAVEDATA *saveData);
const u16 *Sav2_Misc_RivalName_const_get(const SAVE_MISC_DATA *misc);
#endif //POKEHEARTGOLD_SAVE_MISC_DATA_H

View File

@ -94,6 +94,7 @@ Static main
Object unk_020290B4.o
Object daycare.o
Object pokedex.o
Object save_misc.o
Object unk_0202A888.o
Object options.o
Object apricorn_tree_sys.o

150
src/save_misc.c Normal file
View File

@ -0,0 +1,150 @@
#include "save_misc_data.h"
#include "apricorn_tree.h"
#include "easy_chat.h"
#include "msgdata/msg/msg_0287.h"
void Sav2_BerryPots_init(BERRY_POT *berryPot) {
int i;
MI_CpuFill8(berryPot, 0, MAX_BERRY_POT * sizeof(BERRY_POT));
for (i = 0; i < MAX_BERRY_POT; i++) {
berryPot[i].unk_1 = 0;
berryPot[i].unk_0 = 0;
}
}
void Sav2_BerryPotRTC_init(struct GF_RTC_DateTime *dateTime) {
GF_RTC_CopyDateTime(&dateTime->date, &dateTime->time);
}
u32 Sav2_Misc_sizeof(void) {
return sizeof(SAVE_MISC_DATA);
}
void Sav2_Misc_init(SAVE_MISC_DATA *saveMiscData) {
int i;
MI_CpuClearFast(saveMiscData, sizeof(SAVE_MISC_DATA));
ApricornTrees_init(saveMiscData->apricorn_trees);
Sav2_BerryPots_init(saveMiscData->berry_pots);
Sav2_BerryPotRTC_init(&saveMiscData->berry_datetime);
SavGymmick_Clear(&saveMiscData->gymmick);
MI_CpuFill16(saveMiscData->rivalName, EOS, OT_NAME_LENGTH + 1);
MI_CpuFill8(saveMiscData->unk_0280, 0xFF, 8);
MailMsg_init_withBank(&saveMiscData->unk_02A0, MAILMSG_BANK_0295_GMM);
saveMiscData->unk_02A0.msg_no = msg_0295_00000;
saveMiscData->unk_02A0.fields[0] = GetECWordIndexByPair(NARC_msg_msg_0287_bin, msg_0287_regards);
saveMiscData->unk_02A0.fields[1] = EC_WORD_NULL;
for (i = 0; i < 5; i++) {
saveMiscData->unk_02A8[0][i] = -1;
saveMiscData->unk_02A8[1][i] = -1;
}
}
SAVE_MISC_DATA *Sav2_Misc_get(SAVEDATA *saveData) {
return SavArray_get(saveData, SAVE_MISC);
}
const SAVE_MISC_DATA *Sav2_Misc_const_get(const SAVEDATA *saveData) {
return SavArray_const_get(saveData, SAVE_MISC);
}
APRICORN_TREE *Sav2_FieldApricornTrees_get(SAVEDATA *saveData) {
SAVE_MISC_DATA *misc;
misc = SavArray_get(saveData, SAVE_MISC);
return misc->apricorn_trees;
}
BERRY_POT *Sav2_BerryPots_get(SAVEDATA *saveData) {
SAVE_MISC_DATA *misc;
misc = SavArray_get(saveData, SAVE_MISC);
return misc->berry_pots;
}
struct GF_RTC_DateTime *Sav2_BerryPotRTC_get(SAVEDATA *saveData) {
SAVE_MISC_DATA *misc;
misc = SavArray_get(saveData, SAVE_MISC);
return &misc->berry_datetime;
}
struct Gymmick *Sav2_GetGymmickPtr(SAVEDATA *saveData) {
SAVE_MISC_DATA *misc;
misc = SavArray_get(saveData, SAVE_MISC);
return &misc->gymmick;
}
const u16 *Sav2_Misc_RivalName_const_get(const SAVE_MISC_DATA *saveMiscData) {
return saveMiscData->rivalName;
}
void Sav2_Misc_RivalName_set(SAVE_MISC_DATA *saveMiscData, const STRING *name) {
CopyStringToU16Array(name, saveMiscData->rivalName, OT_NAME_LENGTH + 1);
}
void sub_0202A9C4(SAVE_MISC_DATA *saveMiscData) {
saveMiscData->unk_029B_0 = TRUE;
}
BOOL sub_0202A9D8(SAVE_MISC_DATA *saveMiscData) {
return saveMiscData->unk_029B_0;
}
void sub_0202A9E8(SAVE_MISC_DATA *saveMiscData, int a1, int a2, int a3) {
saveMiscData->unk_0298 = a1;
saveMiscData->unk_029A_0 = a2;
saveMiscData->unk_029A_7 = a3;
}
void sub_0202AA20(SAVE_MISC_DATA *saveMiscData, int *a1, int *a2, int *a3) {
*a1 = saveMiscData->unk_0298;
*a2 = saveMiscData->unk_029A_0;
*a3 = saveMiscData->unk_029A_7;
}
const u8 _020F677C[3][2] = {
{0, 4},
{4, 2},
{6, 2},
};
BOOL sub_0202AA44(SAVE_MISC_DATA *saveMiscData, int a1, int a2) {
int i;
if (a1 > NELEMS(_020F677C) - 1) {
return FALSE;
}
for (i = 0; i < _020F677C[a1][1]; i++) {
if (saveMiscData->unk_0280[_020F677C[a1][0] + i] == 0xFF) {
break;
}
if (saveMiscData->unk_0280[_020F677C[a1][0] + i] == a2) {
return TRUE;
}
}
return FALSE;
}
void sub_0202AA9C(SAVE_MISC_DATA *saveMiscData, int a1) {
int i;
if (a1 > NELEMS(_020F677C) - 1) {
return;
}
for (i = 0; i < _020F677C[a1][1]; i++) {
saveMiscData->unk_0280[_020F677C[a1][0] + i] = 0xFF;
}
}
u8 sub_0202AAD4(SAVE_MISC_DATA *saveMiscData, int a1) {
int n = 0;
int i, min, max;
if (a1 > NELEMS(_020F677C) - 1) {
return 0;
}
min = _020F677C[a1][0];
max = _020F677C[a1][0] + _020F677C[a1][1] - 1;
for (i = min; i <= max; i++) {
if (saveMiscData->unk_0280[i] != 0xFF) {
n++;
}
}
return n;
}