summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeth Barberee <seth.barberee@gmail.com>2022-03-06 14:41:40 -0600
committerSeth Barberee <seth.barberee@gmail.com>2022-03-11 10:14:32 -0800
commitaa939e0955ec683efb5dd963430eace695a26af9 (patch)
tree34639fb9579dc71c33e5a209ecfa8c60c01230ac
parenta5c90b097045a50df6ecb7cc37ce50f3fc9f142f (diff)
All saving functions decomped
- poke_sub_4 was determined to be Dungeon Index/Floor - Clean up code that references these functions
-rw-r--r--asm/code_8097670.s471
-rw-r--r--asm/code_8097DD0.s213
-rw-r--r--include/pokemon.h4
-rwxr-xr-xld_script.txt2
-rw-r--r--src/adventure_log.c4
-rw-r--r--src/code_80972F4.c4
-rw-r--r--src/code_8097670.c59
-rw-r--r--src/code_8097DD0.c90
-rw-r--r--src/friend_area_action_menu_1.c6
-rw-r--r--src/friend_list_menu.c6
-rw-r--r--src/save.c4
11 files changed, 363 insertions, 500 deletions
diff --git a/asm/code_8097670.s b/asm/code_8097670.s
index c4d68ec..d6d224f 100644
--- a/asm/code_8097670.s
+++ b/asm/code_8097670.s
@@ -5,76 +5,6 @@
.text
- thumb_func_start sub_80978C8
-sub_80978C8:
- push {lr}
- lsls r0, 16
- asrs r0, 16
- bl GetBaseSpeciesNoUnown
- lsls r0, 16
- asrs r3, r0, 16
- ldr r0, _080978FC
- ldr r2, [r0]
- adds r0, r3, 0
- cmp r3, 0
- bge _080978E2
- adds r0, 0x1F
-_080978E2:
- asrs r0, 5
- lsls r1, r0, 2
- adds r2, 0x54
- adds r2, r1
- lsls r0, 5
- subs r0, r3, r0
- movs r1, 0x1
- lsls r1, r0
- ldr r0, [r2]
- orrs r0, r1
- str r0, [r2]
- pop {r0}
- bx r0
- .align 2, 0
-_080978FC: .4byte gUnknown_203B494
- thumb_func_end sub_80978C8
-
- thumb_func_start sub_8097900
-sub_8097900:
- push {lr}
- lsls r0, 16
- asrs r0, 16
- bl GetBaseSpeciesNoUnown
- lsls r0, 16
- asrs r3, r0, 16
- ldr r0, _08097938
- ldr r2, [r0]
- adds r0, r3, 0
- cmp r3, 0
- bge _0809791A
- adds r0, 0x1F
-_0809791A:
- asrs r0, 5
- lsls r1, r0, 2
- adds r2, 0x1C
- adds r2, r1
- lsls r0, 5
- subs r0, r3, r0
- movs r1, 0x1
- lsls r1, r0
- ldr r0, [r2]
- ands r0, r1
- cmp r0, 0
- bne _0809793C
- movs r0, 0
- b _0809793E
- .align 2, 0
-_08097938: .4byte gUnknown_203B494
-_0809793C:
- movs r0, 0x1
-_0809793E:
- pop {r1}
- bx r1
- thumb_func_end sub_8097900
-
thumb_func_start sub_8097944
sub_8097944:
push {r4-r7,lr}
@@ -453,405 +383,4 @@ _08097C10: .4byte 0x00000163
_08097C14: .4byte gUnknown_203B494
thumb_func_end sub_8097944
- thumb_func_start sub_8097C18
-sub_8097C18:
- push {r4-r6,lr}
- adds r5, r0, 0
- bl sub_8097944
- ldr r4, _08097CBC
- ldr r1, [r4]
- adds r1, 0x4
- adds r0, r5, 0
- movs r2, 0x11
- bl SaveIntegerBits
- ldr r1, [r4]
- adds r1, 0x8
- adds r0, r5, 0
- movs r2, 0x11
- bl SaveIntegerBits
- ldr r1, [r4]
- adds r1, 0xC
- adds r0, r5, 0
- movs r2, 0x11
- bl SaveIntegerBits
- ldr r1, [r4]
- adds r0, r5, 0
- movs r2, 0x20
- bl SaveIntegerBits
- ldr r1, [r4]
- adds r1, 0x14
- adds r0, r5, 0
- movs r2, 0xE
- bl SaveIntegerBits
- ldr r1, [r4]
- adds r1, 0x16
- adds r0, r5, 0
- movs r2, 0xE
- bl SaveIntegerBits
- ldr r1, [r4]
- adds r1, 0x18
- adds r0, r5, 0
- movs r2, 0x9
- bl SaveIntegerBits
- ldr r1, [r4]
- adds r1, 0xC0
- adds r0, r5, 0
- movs r2, 0x11
- bl SaveIntegerBits
- ldr r1, [r4]
- adds r1, 0x1C
- movs r6, 0xE0
- lsls r6, 1
- adds r0, r5, 0
- adds r2, r6, 0
- bl SaveIntegerBits
- ldr r1, [r4]
- adds r1, 0x54
- adds r0, r5, 0
- adds r2, r6, 0
- bl SaveIntegerBits
- ldr r1, [r4]
- adds r1, 0x8C
- movs r2, 0xD0
- lsls r2, 1
- adds r0, r5, 0
- bl SaveIntegerBits
- ldr r1, [r4]
- adds r1, 0x10
- adds r0, r5, 0
- bl xxx_save_poke_sub_4_80902F4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08097CBC: .4byte gUnknown_203B494
- thumb_func_end sub_8097C18
-
- thumb_func_start sub_8097CC0
-sub_8097CC0:
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r4, _08097D5C
- ldr r1, [r4]
- adds r1, 0x4
- movs r2, 0x11
- bl RestoreIntegerBits
- ldr r1, [r4]
- adds r1, 0x8
- adds r0, r5, 0
- movs r2, 0x11
- bl RestoreIntegerBits
- ldr r1, [r4]
- adds r1, 0xC
- adds r0, r5, 0
- movs r2, 0x11
- bl RestoreIntegerBits
- ldr r1, [r4]
- adds r0, r5, 0
- movs r2, 0x20
- bl RestoreIntegerBits
- ldr r1, [r4]
- adds r1, 0x14
- adds r0, r5, 0
- movs r2, 0xE
- bl RestoreIntegerBits
- ldr r1, [r4]
- adds r1, 0x16
- adds r0, r5, 0
- movs r2, 0xE
- bl RestoreIntegerBits
- ldr r1, [r4]
- adds r1, 0x18
- adds r0, r5, 0
- movs r2, 0x9
- bl RestoreIntegerBits
- ldr r1, [r4]
- adds r1, 0xC0
- adds r0, r5, 0
- movs r2, 0x11
- bl RestoreIntegerBits
- ldr r1, [r4]
- adds r1, 0x1C
- movs r6, 0xE0
- lsls r6, 1
- adds r0, r5, 0
- adds r2, r6, 0
- bl RestoreIntegerBits
- ldr r1, [r4]
- adds r1, 0x54
- adds r0, r5, 0
- adds r2, r6, 0
- bl RestoreIntegerBits
- ldr r1, [r4]
- adds r1, 0x8C
- movs r2, 0xD0
- lsls r2, 1
- adds r0, r5, 0
- bl RestoreIntegerBits
- ldr r1, [r4]
- adds r1, 0x10
- adds r0, r5, 0
- bl xxx_restore_poke_sub_4_8090314
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08097D5C: .4byte gUnknown_203B494
- thumb_func_end sub_8097CC0
-
- thumb_func_start sub_8097D60
-sub_8097D60:
- push {lr}
- sub sp, 0x10
- adds r3, r0, 0
- adds r2, r1, 0
- mov r0, sp
- adds r1, r3, 0
- bl xxx_init_struct_8094924_save_809486C
- mov r0, sp
- bl WriteGameOptions
- mov r0, sp
- bl WritePlayTime
- mov r0, sp
- bl sub_8097C18
- mov r0, sp
- bl WriteExclusivePokemon
- mov r0, sp
- bl nullsub_102
- ldr r0, [sp, 0x8]
- add sp, 0x10
- pop {r1}
- bx r1
- thumb_func_end sub_8097D60
-
- thumb_func_start sub_8097D98
-sub_8097D98:
- push {lr}
- sub sp, 0x10
- adds r3, r0, 0
- adds r2, r1, 0
- mov r0, sp
- adds r1, r3, 0
- bl xxx_init_struct_8094924_restore_809485C
- mov r0, sp
- bl ReadGameOptions
- mov r0, sp
- bl ReadPlayTime
- mov r0, sp
- bl sub_8097CC0
- mov r0, sp
- bl ReadExclusivePokemon
- mov r0, sp
- bl nullsub_102
- ldr r0, [sp, 0x8]
- add sp, 0x10
- pop {r1}
- bx r1
- thumb_func_end sub_8097D98
-
- thumb_func_start sub_8097DD0
-sub_8097DD0:
- push {lr}
- adds r2, r0, 0
- adds r3, r1, 0
- ldr r1, [r2]
- ldr r0, [r3]
- cmp r1, r0
- bne _08097DEA
- ldr r1, [r2, 0x4]
- ldr r0, [r3, 0x4]
- cmp r1, r0
- bne _08097DEA
- movs r0, 0x1
- b _08097DEC
-_08097DEA:
- movs r0, 0
-_08097DEC:
- pop {r1}
- bx r1
- thumb_func_end sub_8097DD0
-
- thumb_func_start sub_8097DF0
-sub_8097DF0:
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x1F8
- mov r8, r0
- str r1, [sp, 0x1F0]
- movs r0, 0
- mov r9, r0
- movs r7, 0
- ldr r1, _08097E3C
- ldr r0, [r1]
- cmp r0, 0
- beq _08097E6E
-_08097E0E:
- movs r4, 0
- lsls r5, r7, 3
- lsls r1, r7, 2
- mov r10, r1
- adds r6, r7, 0x1
- ldr r2, _08097E3C
- adds r3, r5, r2
- add r1, sp, 0x18C
-_08097E1E:
- ldr r0, [r3]
- adds r0, r4
- ldrb r2, [r0]
- cmp r2, 0x23
- bne _08097E40
- ldrb r0, [r0, 0x1]
- cmp r0, 0x72
- bne _08097E40
- strb r2, [r1]
- adds r1, 0x1
- strb r0, [r1]
- adds r1, 0x1
- movs r0, 0
- strb r0, [r1]
- b _08097E50
- .align 2, 0
-_08097E3C: .4byte gStatusDescriptions
-_08097E40:
- ldr r0, [r3]
- adds r0, r4
- ldrb r0, [r0]
- strb r0, [r1]
- adds r1, 0x1
- adds r4, 0x1
- cmp r4, 0x63
- ble _08097E1E
-_08097E50:
- add r0, sp, 0x18C
- bl strlen
- mov r1, sp
- add r1, r10
- str r0, [r1]
- adds r7, r6, 0
- cmp r6, 0x62
- bgt _08097E6E
- lsls r0, r6, 3
- ldr r1, _08097EB4
- adds r0, r1
- ldr r0, [r0]
- cmp r0, 0
- bne _08097E0E
-_08097E6E:
- mov r2, r8
- ldrb r0, [r2]
- cmp r0, 0
- beq _08097F2C
- ldr r3, _08097EB4
-_08097E78:
- cmp r0, 0x23
- bne _08097F08
- movs r7, 0
- adds r1, r3, 0
- ldr r0, [r1]
- cmp r0, 0
- beq _08097F20
- mov r2, r9
- lsls r0, r2, 2
- ldr r2, [sp, 0x1F0]
- adds r0, r2
- mov r10, r0
-_08097E90:
- lsls r4, r7, 3
- adds r0, r4, r1
- ldr r0, [r0]
- lsls r1, r7, 2
- add r1, sp
- ldr r2, [r1]
- mov r1, r8
- str r3, [sp, 0x1F4]
- bl sub_800B2D4
- lsls r0, 24
- adds r5, r4, 0
- adds r6, r7, 0x1
- ldr r3, [sp, 0x1F4]
- cmp r0, 0
- bne _08097EF0
- movs r4, 0
- b _08097EBA
- .align 2, 0
-_08097EB4: .4byte gStatusDescriptions
-_08097EB8:
- adds r4, 0x1
-_08097EBA:
- cmp r4, r9
- bge _08097ED6
- adds r0, r5, r3
- lsls r1, r4, 2
- ldr r2, [sp, 0x1F0]
- adds r1, r2
- ldr r1, [r1]
- str r3, [sp, 0x1F4]
- bl sub_8097DD0
- lsls r0, 24
- ldr r3, [sp, 0x1F4]
- cmp r0, 0
- beq _08097EB8
-_08097ED6:
- cmp r4, r9
- bne _08097EF0
- mov r0, r9
- cmp r0, 0x3
- bgt _08097EF0
- adds r0, r5, r3
- mov r1, r10
- adds r1, 0x4
- mov r10, r1
- subs r1, 0x4
- stm r1!, {r0}
- movs r2, 0x1
- add r9, r2
-_08097EF0:
- adds r7, r6, 0
- cmp r6, 0x62
- bgt _08097F20
- ldr r1, _08097F04
- lsls r0, r6, 3
- adds r0, r1
- ldr r0, [r0]
- cmp r0, 0
- bne _08097E90
- b _08097F20
- .align 2, 0
-_08097F04: .4byte gStatusDescriptions
-_08097F08:
- mov r0, r8
- ldrb r1, [r0]
- adds r0, r1, 0
- adds r0, 0x7F
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bls _08097F1C
- cmp r1, 0x87
- bne _08097F20
-_08097F1C:
- movs r1, 0x1
- add r8, r1
-_08097F20:
- movs r2, 0x1
- add r8, r2
- mov r1, r8
- ldrb r0, [r1]
- cmp r0, 0
- bne _08097E78
-_08097F2C:
- mov r0, r9
- add sp, 0x1F8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8097DF0
-
.align 2,0
diff --git a/asm/code_8097DD0.s b/asm/code_8097DD0.s
new file mode 100644
index 0000000..36f15d9
--- /dev/null
+++ b/asm/code_8097DD0.s
@@ -0,0 +1,213 @@
+ #include "asm/constants/gba_constants.inc"
+ #include "asm/macros.inc"
+
+ .syntax unified
+
+ .text
+
+ thumb_func_start sub_8097DD0
+sub_8097DD0:
+ push {lr}
+ adds r2, r0, 0
+ adds r3, r1, 0
+ ldr r1, [r2]
+ ldr r0, [r3]
+ cmp r1, r0
+ bne _08097DEA
+ ldr r1, [r2, 0x4]
+ ldr r0, [r3, 0x4]
+ cmp r1, r0
+ bne _08097DEA
+ movs r0, 0x1
+ b _08097DEC
+_08097DEA:
+ movs r0, 0
+_08097DEC:
+ pop {r1}
+ bx r1
+ thumb_func_end sub_8097DD0
+
+ thumb_func_start sub_8097DF0
+sub_8097DF0:
+ push {r4-r7,lr}
+ mov r7, r10
+ mov r6, r9
+ mov r5, r8
+ push {r5-r7}
+ sub sp, 0x1F8
+ mov r8, r0
+ str r1, [sp, 0x1F0]
+ movs r0, 0
+ mov r9, r0
+ movs r7, 0
+ ldr r1, _08097E3C
+ ldr r0, [r1]
+ cmp r0, 0
+ beq _08097E6E
+_08097E0E:
+ movs r4, 0
+ lsls r5, r7, 3
+ lsls r1, r7, 2
+ mov r10, r1
+ adds r6, r7, 0x1
+ ldr r2, _08097E3C
+ adds r3, r5, r2
+ add r1, sp, 0x18C
+_08097E1E:
+ ldr r0, [r3]
+ adds r0, r4
+ ldrb r2, [r0]
+ cmp r2, 0x23
+ bne _08097E40
+ ldrb r0, [r0, 0x1]
+ cmp r0, 0x72
+ bne _08097E40
+ strb r2, [r1]
+ adds r1, 0x1
+ strb r0, [r1]
+ adds r1, 0x1
+ movs r0, 0
+ strb r0, [r1]
+ b _08097E50
+ .align 2, 0
+_08097E3C: .4byte gStatusDescriptions
+_08097E40:
+ ldr r0, [r3]
+ adds r0, r4
+ ldrb r0, [r0]
+ strb r0, [r1]
+ adds r1, 0x1
+ adds r4, 0x1
+ cmp r4, 0x63
+ ble _08097E1E
+_08097E50:
+ add r0, sp, 0x18C
+ bl strlen
+ mov r1, sp
+ add r1, r10
+ str r0, [r1]
+ adds r7, r6, 0
+ cmp r6, 0x62
+ bgt _08097E6E
+ lsls r0, r6, 3
+ ldr r1, _08097EB4
+ adds r0, r1
+ ldr r0, [r0]
+ cmp r0, 0
+ bne _08097E0E
+_08097E6E:
+ mov r2, r8
+ ldrb r0, [r2]
+ cmp r0, 0
+ beq _08097F2C
+ ldr r3, _08097EB4
+_08097E78:
+ cmp r0, 0x23
+ bne _08097F08
+ movs r7, 0
+ adds r1, r3, 0
+ ldr r0, [r1]
+ cmp r0, 0
+ beq _08097F20
+ mov r2, r9
+ lsls r0, r2, 2
+ ldr r2, [sp, 0x1F0]
+ adds r0, r2
+ mov r10, r0
+_08097E90:
+ lsls r4, r7, 3
+ adds r0, r4, r1
+ ldr r0, [r0]
+ lsls r1, r7, 2
+ add r1, sp
+ ldr r2, [r1]
+ mov r1, r8
+ str r3, [sp, 0x1F4]
+ bl sub_800B2D4
+ lsls r0, 24
+ adds r5, r4, 0
+ adds r6, r7, 0x1
+ ldr r3, [sp, 0x1F4]
+ cmp r0, 0
+ bne _08097EF0
+ movs r4, 0
+ b _08097EBA
+ .align 2, 0
+_08097EB4: .4byte gStatusDescriptions
+_08097EB8:
+ adds r4, 0x1
+_08097EBA:
+ cmp r4, r9
+ bge _08097ED6
+ adds r0, r5, r3
+ lsls r1, r4, 2
+ ldr r2, [sp, 0x1F0]
+ adds r1, r2
+ ldr r1, [r1]
+ str r3, [sp, 0x1F4]
+ bl sub_8097DD0
+ lsls r0, 24
+ ldr r3, [sp, 0x1F4]
+ cmp r0, 0
+ beq _08097EB8
+_08097ED6:
+ cmp r4, r9
+ bne _08097EF0
+ mov r0, r9
+ cmp r0, 0x3
+ bgt _08097EF0
+ adds r0, r5, r3
+ mov r1, r10
+ adds r1, 0x4
+ mov r10, r1
+ subs r1, 0x4
+ stm r1!, {r0}
+ movs r2, 0x1
+ add r9, r2
+_08097EF0:
+ adds r7, r6, 0
+ cmp r6, 0x62
+ bgt _08097F20
+ ldr r1, _08097F04
+ lsls r0, r6, 3
+ adds r0, r1
+ ldr r0, [r0]
+ cmp r0, 0
+ bne _08097E90
+ b _08097F20
+ .align 2, 0
+_08097F04: .4byte gStatusDescriptions
+_08097F08:
+ mov r0, r8
+ ldrb r1, [r0]
+ adds r0, r1, 0
+ adds r0, 0x7F
+ lsls r0, 24
+ lsrs r0, 24
+ cmp r0, 0x3
+ bls _08097F1C
+ cmp r1, 0x87
+ bne _08097F20
+_08097F1C:
+ movs r1, 0x1
+ add r8, r1
+_08097F20:
+ movs r2, 0x1
+ add r8, r2
+ mov r1, r8
+ ldrb r0, [r1]
+ cmp r0, 0
+ bne _08097E78
+_08097F2C:
+ mov r0, r9
+ add sp, 0x1F8
+ pop {r3-r5}
+ mov r8, r3
+ mov r9, r4
+ mov r10, r5
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_8097DF0
+
+ .align 2,0
diff --git a/include/pokemon.h b/include/pokemon.h
index d72f88e..af6c103 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -20,8 +20,8 @@ struct Offense {
};
struct unkPokeSubStruct_4 {
- u8 unk4;
- u8 unk5;
+ u8 dungeonIndex;
+ u8 dungeonFloor;
u16 fill6;
};
diff --git a/ld_script.txt b/ld_script.txt
index 335f5f0..b9db591 100755
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -309,6 +309,8 @@ SECTIONS {
src/code_809747C_1.o(.text);
src/code_8097670.o(.text);
asm/code_8097670.o(.text);
+ src/code_8097DD0.o(.text);
+ asm/code_8097DD0.o(.text);
src/code_8097F40.o(.text);
src/exclusive_pokemon.o(.text);
asm/exclusive_pokemon.o(.text);
diff --git a/src/adventure_log.c b/src/adventure_log.c
index cb20682..9480361 100644
--- a/src/adventure_log.c
+++ b/src/adventure_log.c
@@ -54,7 +54,7 @@ extern bool8 sub_8013938(void *);
extern void sub_8013660(void *);
extern void PlayMenuSoundEffect(u32);
extern u32 GetKeyPress(void *);
-extern u8 sub_8097710(u8);
+extern bool8 sub_8097710(u8);
extern s16 sub_80978B8();
extern s16 sub_8097880();
@@ -225,7 +225,7 @@ void DisplayAdventureLog(void)
do {
uVar6 = gAdventureLog->currPage * gAdventureLog->unk1C + counter;
temp = uVar6; // Having another var in middle gets close (does a u8 cast)
- if(sub_8097710(temp) != 0){
+ if(sub_8097710(temp)){
switch(temp) {
case 0xc:
gUnknown_202DE30 = sub_80978B8();
diff --git a/src/code_80972F4.c b/src/code_80972F4.c
index 7e87832..c0fa1a3 100644
--- a/src/code_80972F4.c
+++ b/src/code_80972F4.c
@@ -61,8 +61,8 @@ bool8 sub_8096F50(struct WonderMail *r0)
for(index = 0; index < 0x10; index++)
{
temp = &gUnknown_203B490->unk230[index];
- if(temp->unk0.unk4 == r0->dungeon)
- if(temp->unk0.unk5 == r0->floor)
+ if(temp->unk0.dungeonIndex == r0->dungeon)
+ if(temp->unk0.dungeonFloor == r0->floor)
if(temp->unk4 == r0->unk8)
if(temp->unk8 == temp2)
return TRUE;
diff --git a/src/code_8097670.c b/src/code_8097670.c
index 75a788a..a918ac9 100644
--- a/src/code_8097670.c
+++ b/src/code_8097670.c
@@ -1,10 +1,5 @@
#include "global.h"
-
-struct unkDungeonStruct
-{
- u8 index;
- u8 floor;
-};
+#include "pokemon.h"
struct unkStruct_203B494
{
@@ -13,12 +8,12 @@ struct unkStruct_203B494
s32 numAdventures;
s32 unk8;
s32 unkC;
- struct unkDungeonStruct dungeonLocation;
+ struct unkPokeSubStruct_4 dungeonLocation;
s16 unk14;
s16 unk16;
s16 unk18;
u32 unk1C[0xE];
- u8 fill54[0x8C - 0x54];
+ u32 unk54[0xE];
u32 unk8C[0xD];
s32 unkC0;
};
@@ -26,6 +21,7 @@ struct unkStruct_203B494
extern struct unkStruct_203B494 *gUnknown_203B494;
extern struct unkStruct_203B494 gUnknown_2039778;
extern const u8 *gAdventureLogText[];
+s16 GetBaseSpeciesNoUnown(s16 index);
void sub_8097670(void)
{
@@ -37,13 +33,13 @@ struct unkStruct_203B494 *sub_8097680(void)
return &gUnknown_2039778;
}
-void SetDungeonLocationInfo(struct unkDungeonStruct *r0)
+void SetDungeonLocationInfo(struct unkPokeSubStruct_4 *r0)
{
- gUnknown_203B494->dungeonLocation.index = r0->index;
- gUnknown_203B494->dungeonLocation.floor = r0->floor;
+ gUnknown_203B494->dungeonLocation.dungeonIndex = r0->dungeonIndex;
+ gUnknown_203B494->dungeonLocation.dungeonFloor = r0->dungeonFloor;
}
-struct unkDungeonStruct *GetDungeonLocationInfo(void)
+struct unkPokeSubStruct_4 *GetDungeonLocationInfo(void)
{
return &gUnknown_203B494->dungeonLocation;
}
@@ -76,12 +72,12 @@ void sub_80976F8(u8 r0)
gUnknown_203B494->unk0 |= (1 << r0);
}
-u8 sub_8097710(u8 r0)
+bool8 sub_8097710(u8 r0)
{
if(gUnknown_203B494->unk0 & (1 << r0))
- return 1;
+ return TRUE;
else
- return 0;
+ return FALSE;
}
const u8 *GetAdventureLogLine(u8 index)
@@ -187,3 +183,36 @@ s16 sub_80978B8(void)
{
return gUnknown_203B494->unkC0;
}
+
+void sub_80978C8(s16 pokeIndex)
+{
+ s32 iVar2;
+ struct unkStruct_203B494 *preload;
+ s32 baseSpecies;
+
+ baseSpecies = GetBaseSpeciesNoUnown(pokeIndex);
+ preload = gUnknown_203B494;
+ iVar2 = baseSpecies;
+ if (baseSpecies < 0) {
+ iVar2 = baseSpecies + 0x1f;
+ }
+ preload->unk54[iVar2 >> 5] |= 1 << (baseSpecies + (iVar2 >> 5) * -0x20);
+}
+
+bool8 sub_8097900(s16 pokeIndex)
+{
+ s32 iVar2;
+ struct unkStruct_203B494 *preload;
+ s32 baseSpecies;
+
+ baseSpecies = GetBaseSpeciesNoUnown(pokeIndex);
+ preload = gUnknown_203B494;
+ iVar2 = baseSpecies;
+ if (baseSpecies < 0) {
+ iVar2 = baseSpecies + 0x1f;
+ }
+ if(preload->unk1C[iVar2 >> 5] & (1 << (baseSpecies + (iVar2 >> 5) * -0x20)))
+ return TRUE;
+ else
+ return FALSE;
+}
diff --git a/src/code_8097DD0.c b/src/code_8097DD0.c
new file mode 100644
index 0000000..e5d4966
--- /dev/null
+++ b/src/code_8097DD0.c
@@ -0,0 +1,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 unkPokeSubStruct_4 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 xxx_save_poke_sub_4_80902F4(struct unkStruct_8094924*, struct unkPokeSubStruct_4*);
+extern void xxx_restore_poke_sub_4_8090314(struct unkStruct_8094924*, struct unkPokeSubStruct_4*);
+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);
+ xxx_save_poke_sub_4_80902F4(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);
+ xxx_restore_poke_sub_4_8090314(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;
+}
diff --git a/src/friend_area_action_menu_1.c b/src/friend_area_action_menu_1.c
index 1abd973..3f1bb5f 100644
--- a/src/friend_area_action_menu_1.c
+++ b/src/friend_area_action_menu_1.c
@@ -79,7 +79,7 @@ void sub_8027A5C(void)
}
static inline bool8 sub_8027A78_sub(void) {
- if (gUnknown_203B2BC->unk18->unk4.unk4 == 0x44 || gUnknown_203B2BC->unk18->unk4.unk4 == 0x45)
+ if (gUnknown_203B2BC->unk18->unk4.dungeonIndex == 0x44 || gUnknown_203B2BC->unk18->unk4.dungeonIndex == 0x45)
return TRUE;
else
return FALSE;
@@ -270,7 +270,7 @@ u32 sub_8027D9C(struct PokemonStruct *r0)
if(r0->unk2 == 0)
{
var1 = 0;
- if(r0->unk4.unk4 == 0x41)
+ if(r0->unk4.dungeonIndex == 0x41)
var1 = 1;
if(var1 != 0)
{
@@ -291,7 +291,7 @@ u32 sub_8027DCC(struct PokemonStruct *r0)
if(r0->unk2 == 0)
{
var1 = 0;
- if(r0->unk4.unk4 == 0x41)
+ if(r0->unk4.dungeonIndex == 0x41)
var1 = 1;
if(var1 != 0)
{
diff --git a/src/friend_list_menu.c b/src/friend_list_menu.c
index 9310665..142aeca 100644
--- a/src/friend_list_menu.c
+++ b/src/friend_list_menu.c
@@ -113,7 +113,7 @@ void sub_8026A94(void)
static inline bool8 sub_8026AB0_sub(void) {
- if (gUnknown_203B2B8->unk18->unk4.unk4 == 0x44 || gUnknown_203B2B8->unk18->unk4.unk4 == 0x45)
+ if (gUnknown_203B2B8->unk18->unk4.dungeonIndex == 0x44 || gUnknown_203B2B8->unk18->unk4.dungeonIndex == 0x45)
return TRUE;
else
return FALSE;
@@ -344,7 +344,7 @@ u32 sub_8026E88(struct PokemonStruct *r0)
u8 iVar3;
if(r0->unk2 == 0)
{
- iVar3 = (r0->unk4.unk4 == 0x41);
+ iVar3 = (r0->unk4.dungeonIndex == 0x41);
if(iVar3 != 0)
if(sub_80023E4(0x8) == 0)
return 0;
@@ -361,7 +361,7 @@ u32 sub_8026EB8(struct PokemonStruct *r0)
if(sub_808D3F8() != r0)
if(r0->unk2 == 0)
{
- iVar3 = (r0->unk4.unk4 == 0x41);
+ iVar3 = (r0->unk4.dungeonIndex == 0x41);
if(iVar3 != 0)
{
if(sub_80023E4(0x8) != 0)
diff --git a/src/save.c b/src/save.c
index 835c111..72a6496 100644
--- a/src/save.c
+++ b/src/save.c
@@ -171,7 +171,7 @@ extern void sub_800135C(void);
extern u32 GetGameOptions(void);
extern void InitializeGameOptions(u8 r0);
extern u8 *sub_80950F8(void);
-extern void sub_80958E4(u8 *a, u32 b);
+extern void sub_80958E4(u32 *a, u32 b);
extern u32 sub_80958F8(void);
extern void sub_8095900(void);
extern void sub_80972F4(void);
@@ -529,7 +529,7 @@ u32 sub_80121E0(u32 r0)
string = sub_8011C4C();
strncpy(r4->unk4, string, ARRAY_COUNT(r4->unk4));
- sub_80958E4((u8 *)r4 + 32, 0);
+ sub_80958E4(&r4->unk20, 0);
temp3 = WriteSaveSector(&temp, (u8 *)r4, sizeof(struct unk_struct));
MemoryFree(r4);
return temp3;