summaryrefslogtreecommitdiff
path: root/src/code_8097DD0.c
blob: abbb02e35181552010de5fb99d7e1f5954c4689e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include "global.h"
#include "code_8092334.h"
#include "pokemon.h"

struct unkStruct_203B494
{
    // size: 0xC8?
    u32 unk0; // 32 bit bitfield, I think
    s32 numAdventures;
    s32 unk8;
    s32 unkC;
    struct DungeonLocation dungeonLocation;
    s16 unk14;
    s16 unk16;
    s16 unk18;
    u32 unk1C[0xE];
    u32 unk54[0xE];
    u32 unk8C[0xD];
    s32 unkC0;
};

extern struct unkStruct_203B494 *gUnknown_203B494;

extern void SaveDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*);
extern void RestoreDungeonLocation(struct unkStruct_8094924*, struct DungeonLocation*);
void ReadExclusivePokemon(struct unkStruct_8094924 *r0);
void ReadGameOptions(struct unkStruct_8094924 *param_1);
void ReadPlayTime(struct unkStruct_8094924 *r0);
void WriteExclusivePokemon(struct unkStruct_8094924 *r0);
void WriteGameOptions(struct unkStruct_8094924 *param_1);
void WritePlayTime(struct unkStruct_8094924 *r0);

extern void sub_8097944(void);

void sub_8097C18(struct unkStruct_8094924 *r0)
{
    sub_8097944();
    SaveIntegerBits(r0, &gUnknown_203B494->numAdventures, 0x11);
    SaveIntegerBits(r0, &gUnknown_203B494->unk8, 0x11);
    SaveIntegerBits(r0, &gUnknown_203B494->unkC, 0x11);
    SaveIntegerBits(r0, &gUnknown_203B494->unk0, 0x20);
    SaveIntegerBits(r0, &gUnknown_203B494->unk14, 0xE);
    SaveIntegerBits(r0, &gUnknown_203B494->unk16, 0xE);
    SaveIntegerBits(r0, &gUnknown_203B494->unk18, 0x9);
    SaveIntegerBits(r0, &gUnknown_203B494->unkC0, 0x11);
    SaveIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1);
    SaveIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1);
    SaveIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1);
    SaveDungeonLocation(r0, &gUnknown_203B494->dungeonLocation);
}

void sub_8097CC0(struct unkStruct_8094924 *r0)
{
    RestoreIntegerBits(r0, &gUnknown_203B494->numAdventures, 0x11);
    RestoreIntegerBits(r0, &gUnknown_203B494->unk8, 0x11);
    RestoreIntegerBits(r0, &gUnknown_203B494->unkC, 0x11);
    RestoreIntegerBits(r0, &gUnknown_203B494->unk0, 0x20);
    RestoreIntegerBits(r0, &gUnknown_203B494->unk14, 0xE);
    RestoreIntegerBits(r0, &gUnknown_203B494->unk16, 0xE);
    RestoreIntegerBits(r0, &gUnknown_203B494->unk18, 0x9);
    RestoreIntegerBits(r0, &gUnknown_203B494->unkC0, 0x11);
    RestoreIntegerBits(r0, gUnknown_203B494->unk1C, 0xE0 << 1);
    RestoreIntegerBits(r0, gUnknown_203B494->unk54, 0xE0 << 1);
    RestoreIntegerBits(r0, gUnknown_203B494->unk8C, 0xD0 << 1);
    RestoreDungeonLocation(r0, &gUnknown_203B494->dungeonLocation);
}

u32 sub_8097D60(u8 *r0, u32 size)
{
    struct unkStruct_8094924 backup;
    xxx_init_struct_8094924_save_809486C(&backup, r0, size);
    WriteGameOptions(&backup);
    WritePlayTime(&backup);
    sub_8097C18(&backup);
    WriteExclusivePokemon(&backup);
    nullsub_102(&backup);
    return backup.unk8;
}

u32 sub_8097D98(u8 *r0, u32 size)
{
    struct unkStruct_8094924 backup;
    xxx_init_struct_8094924_restore_809485C(&backup, r0, size);
    ReadGameOptions(&backup);
    ReadPlayTime(&backup);
    sub_8097CC0(&backup);
    ReadExclusivePokemon(&backup);
    nullsub_102(&backup);
    return backup.unk8;
}