More pokemon related decomp (#48)

* add struct names

* decompile SaveRecruitedPokemon

* decompile ReadRecruitedPokemon

* decomp anotha one

* some renaming

* another save function

* more backup functions

* sub_808E400

* only one function left in pokemon_2.s

* decomp one more function

* merge 2 structs
This commit is contained in:
Dennis
2021-08-01 21:09:13 +02:00
committed by GitHub
parent 645c45431b
commit 26e5708818
24 changed files with 858 additions and 1491 deletions

View File

@@ -57,7 +57,7 @@ _0803D164:
mov r8, r2
mov r0, sp
adds r1, r7, 0
bl sub_809486C
bl xxx_init_struct_8094924_save_809486C
movs r4, 0
cmp r4, r5
bge _0803D188
@@ -66,7 +66,7 @@ _0803D178:
adds r1, r6, r4
mov r0, sp
movs r2, 0x5
bl sub_809488C
bl SaveIntegerBits
adds r4, 0x1
cmp r4, r5
blt _0803D178
@@ -103,7 +103,7 @@ sub_803D1A8:
_0803D1BC:
asrs r2, 3
mov r0, sp
bl sub_809485C
bl xxx_init_struct_8094924_restore_809485C
movs r4, 0
cmp r4, r5
bge _0803D1DC
@@ -112,7 +112,7 @@ _0803D1CC:
adds r1, r6, r4
mov r0, sp
movs r2, 0x5
bl sub_8094924
bl RestoreIntegerBits
adds r4, 0x1
cmp r4, r5
blt _0803D1CC
@@ -213,7 +213,7 @@ _0803D26C:
adds r1, 0x1
adds r0, r4, 0
movs r2, 0x21
bl sub_809485C
bl xxx_init_struct_8094924_restore_809485C
adds r0, r4, 0
mov r1, r9
bl sub_8095774
@@ -262,7 +262,7 @@ _0803D2E2:
bge _0803D2E2
adds r0, r4, 0
movs r2, 0x21
bl sub_809486C
bl xxx_init_struct_8094924_save_809486C
adds r0, r4, 0
adds r1, r6, 0
bl sub_8095824
@@ -388,7 +388,7 @@ _0803D3C0:
adds r1, 0x1
adds r0, r4, 0
movs r2, 0xC
bl sub_809485C
bl xxx_init_struct_8094924_restore_809485C
adds r0, r4, 0
mov r1, r9
bl sub_80971EC
@@ -437,7 +437,7 @@ _0803D436:
bge _0803D436
adds r0, r4, 0
movs r2, 0xC
bl sub_809486C
bl xxx_init_struct_8094924_save_809486C
adds r0, r4, 0
adds r1, r6, 0
bl sub_8097270

View File

@@ -33850,7 +33850,7 @@ _08068922:
mov r9, r0
adds r0, r2, r0
mov r1, r10
bl xxx_pokemonstruct_index_to_unk_808DE30
bl xxx_pokemonstruct_index_to_pokemon2_808DE30
ldr r0, _08068A68
ldr r0, [r0]
ldr r1, _08068A6C
@@ -34079,7 +34079,7 @@ _08068B08:
adds r0, r4, 0
adds r1, r6, 0
ldr r2, _08068B74
bl xxx_pokemonstruct_to_unk_808DE50
bl xxx_pokemonstruct_to_pokemon2_808DE50
ldrh r0, [r4]
movs r1, 0x1
movs r2, 0
@@ -34293,7 +34293,7 @@ _08068CDC:
movs r3, 0xA
ldrsh r0, [r4, r3]
adds r1, r4, 0
bl xxx_unk_to_pokemonstruct_index_808DF2C
bl xxx_pokemon2_to_pokemonstruct_index_808DF2C
b _08068CFE
_08068CE8:
ldr r0, [sp, 0x220]
@@ -34401,7 +34401,7 @@ _08068D6A:
adds r0, r1
str r0, [r4]
adds r1, r5, 0
bl xxx_unk_to_pokemonstruct_808DF44
bl xxx_pokemon2_to_pokemonstruct_808DF44
ldr r2, [r4]
ldrh r0, [r2]
movs r3, 0x80
@@ -34997,7 +34997,7 @@ _08069228:
movs r2, 0xA
ldrsh r0, [r4, r2]
adds r1, r4, 0
bl xxx_unk_to_pokemonstruct_index_808DF2C
bl xxx_pokemon2_to_pokemonstruct_index_808DF2C
_0806926E:
bl sub_8044210
lsls r0, 24
@@ -35196,7 +35196,7 @@ _080693CC:
movs r2, 0xA
ldrsh r0, [r4, r2]
adds r1, r4, 0
bl xxx_unk_to_pokemonstruct_index_808DF2C
bl xxx_pokemon2_to_pokemonstruct_index_808DF2C
_0806940E:
bl sub_8044210
lsls r0, 24

View File

@@ -60,25 +60,25 @@ _080902EE:
bx r1
thumb_func_end sub_80902C8
thumb_func_start sub_80902F4
sub_80902F4:
thumb_func_start xxx_save_poke_sub_4_80902F4
xxx_save_poke_sub_4_80902F4:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
movs r2, 0x7
bl sub_809488C
bl SaveIntegerBits
adds r4, 0x1
adds r0, r5, 0
adds r1, r4, 0
movs r2, 0x7
bl sub_809488C
bl SaveIntegerBits
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_80902F4
thumb_func_end xxx_save_poke_sub_4_80902F4
thumb_func_start sub_8090314
sub_8090314:
thumb_func_start xxx_restore_poke_sub_4_8090314
xxx_restore_poke_sub_4_8090314:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
@@ -87,16 +87,16 @@ sub_8090314:
strb r0, [r4, 0x1]
adds r0, r5, 0
movs r2, 0x7
bl sub_8094924
bl RestoreIntegerBits
adds r4, 0x1
adds r0, r5, 0
adds r1, r4, 0
movs r2, 0x7
bl sub_8094924
bl RestoreIntegerBits
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_8090314
thumb_func_end xxx_restore_poke_sub_4_8090314
thumb_func_start sub_809033C
sub_809033C:

View File

@@ -3534,16 +3534,16 @@ sub_80940B8:
adds r4, r0, 0
adds r5, r1, 0
movs r2, 0x4
bl sub_809488C
bl SaveIntegerBits
adds r1, r5, 0x2
adds r0, r4, 0
movs r2, 0x9
bl sub_809488C
bl SaveIntegerBits
adds r5, 0x4
adds r0, r4, 0
adds r1, r5, 0
movs r2, 0x7
bl sub_809488C
bl SaveIntegerBits
pop {r4,r5}
pop {r0}
bx r0
@@ -3555,23 +3555,23 @@ sub_80940E0:
adds r4, r0, 0
adds r5, r1, 0
movs r2, 0x4
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0x2
adds r0, r4, 0
movs r2, 0x9
bl sub_8094924
bl RestoreIntegerBits
adds r5, 0x4
adds r0, r4, 0
adds r1, r5, 0
movs r2, 0x7
bl sub_8094924
bl RestoreIntegerBits
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_80940E0
thumb_func_start sub_8094108
sub_8094108:
thumb_func_start xxx_save_poke_sub_2c_8094108
xxx_save_poke_sub_2c_8094108:
push {r4-r6,lr}
adds r6, r0, 0
adds r4, r1, 0
@@ -3587,10 +3587,10 @@ _08094110:
pop {r4-r6}
pop {r0}
bx r0
thumb_func_end sub_8094108
thumb_func_end xxx_save_poke_sub_2c_8094108
thumb_func_start sub_8094128
sub_8094128:
thumb_func_start xxx_restore_poke_sub_2c_8094128
xxx_restore_poke_sub_2c_8094128:
push {r4-r6,lr}
adds r6, r0, 0
adds r4, r1, 0
@@ -3606,7 +3606,7 @@ _08094130:
pop {r4-r6}
pop {r0}
bx r0
thumb_func_end sub_8094128
thumb_func_end xxx_restore_poke_sub_2c_8094128
thumb_func_start sub_8094148
sub_8094148:
@@ -3614,24 +3614,24 @@ sub_8094148:
adds r5, r0, 0
adds r4, r1, 0
movs r2, 0x4
bl sub_809488C
bl SaveIntegerBits
adds r1, r4, 0x1
adds r0, r5, 0
movs r2, 0x1
bl sub_809488C
bl SaveIntegerBits
adds r1, r4, 0x2
adds r0, r5, 0
movs r2, 0x9
bl sub_809488C
bl SaveIntegerBits
adds r1, r4, 0x4
adds r0, r5, 0
movs r2, 0x7
bl sub_809488C
bl SaveIntegerBits
adds r4, 0x5
adds r0, r5, 0
adds r1, r4, 0
movs r2, 0x7
bl sub_809488C
bl SaveIntegerBits
pop {r4,r5}
pop {r0}
bx r0
@@ -3656,7 +3656,7 @@ _0809418E:
adds r1, 0x20
adds r0, r6, 0
movs r2, 0x8
bl sub_809488C
bl SaveIntegerBits
pop {r4-r7}
pop {r0}
bx r0
@@ -3674,24 +3674,24 @@ sub_80941B0:
adds r0, r5, 0
adds r1, r4, 0
movs r2, 0x4
bl sub_8094924
bl RestoreIntegerBits
adds r1, r4, 0x1
adds r0, r5, 0
movs r2, 0x1
bl sub_8094924
bl RestoreIntegerBits
adds r1, r4, 0x2
adds r0, r5, 0
movs r2, 0x9
bl sub_8094924
bl RestoreIntegerBits
adds r1, r4, 0x4
adds r0, r5, 0
movs r2, 0x7
bl sub_8094924
bl RestoreIntegerBits
adds r4, 0x5
adds r0, r5, 0
adds r1, r4, 0
movs r2, 0x7
bl sub_8094924
bl RestoreIntegerBits
pop {r4,r5}
pop {r0}
bx r0
@@ -3718,7 +3718,7 @@ _08094206:
strb r0, [r1]
adds r0, r6, 0
movs r2, 0x8
bl sub_8094924
bl RestoreIntegerBits
pop {r4-r7}
pop {r0}
bx r0
@@ -4068,12 +4068,12 @@ sub_809447C:
adds r5, r0, 0
adds r4, r1, 0
movs r2, 0x10
bl sub_8094924
bl RestoreIntegerBits
adds r4, 0x2
adds r0, r5, 0
adds r1, r4, 0
movs r2, 0x10
bl sub_8094924
bl RestoreIntegerBits
pop {r4,r5}
pop {r0}
bx r0
@@ -4085,12 +4085,12 @@ sub_809449C:
adds r5, r0, 0
adds r4, r1, 0
movs r2, 0x10
bl sub_809488C
bl SaveIntegerBits
adds r4, 0x2
adds r0, r5, 0
adds r1, r4, 0
movs r2, 0x10
bl sub_809488C
bl SaveIntegerBits
pop {r4,r5}
pop {r0}
bx r0

View File

@@ -476,7 +476,7 @@ sub_80954CC:
adds r2, r1, 0
mov r0, sp
adds r1, r3, 0
bl sub_809485C
bl xxx_init_struct_8094924_restore_809485C
ldr r6, _08095618
movs r5, 0
movs r4, 0x1F
@@ -493,7 +493,7 @@ _080954E2:
ldr r1, [r4]
mov r0, sp
movs r2, 0x20
bl sub_8094924
bl RestoreIntegerBits
ldr r5, [r4]
adds r4, r5, 0x4
adds r0, r4, 0
@@ -503,95 +503,95 @@ _080954E2:
mov r0, sp
adds r1, r4, 0
movs r2, 0x2
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0x6
mov r0, sp
movs r2, 0x1
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0x7
mov r0, sp
movs r2, 0x7
bl sub_8094924
bl RestoreIntegerBits
adds r4, 0x4
mov r0, sp
adds r1, r4, 0
bl sub_8090314
bl xxx_restore_poke_sub_4_8090314
adds r1, r5, 0
adds r1, 0xC
mov r0, sp
movs r2, 0x9
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0
adds r1, 0x10
mov r0, sp
bl sub_808F410
bl xxx_restore_poke_sub_c_808F410
adds r1, r5, 0
adds r1, 0x14
mov r0, sp
bl sub_808F410
bl xxx_restore_poke_sub_c_808F410
adds r1, r5, 0
adds r1, 0x18
mov r0, sp
movs r2, 0xA
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0
adds r1, 0x1A
mov r0, sp
movs r2, 0xA
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0
adds r1, 0x1C
mov r0, sp
movs r2, 0x8
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0
adds r1, 0x1D
mov r0, sp
movs r2, 0x8
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0
adds r1, 0x1E
mov r0, sp
movs r2, 0x8
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0
adds r1, 0x1F
mov r0, sp
movs r2, 0x8
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0
adds r1, 0x20
mov r0, sp
movs r2, 0x18
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0
adds r1, 0x24
mov r0, sp
movs r2, 0x18
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0
adds r1, 0x28
mov r0, sp
movs r2, 0x4
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0
adds r1, 0x2C
mov r0, sp
bl sub_8091DC0
bl RestoreHeldItem
adds r1, r5, 0
adds r1, 0x30
mov r0, sp
bl sub_8094128
bl xxx_restore_poke_sub_2c_8094128
adds r1, r5, 0
adds r1, 0x50
mov r0, sp
movs r2, 0x50
bl sub_8094924
bl RestoreIntegerBits
ldr r4, _08095620
ldr r1, [r4]
mov r0, sp
movs r2, 0x20
bl sub_8094924
bl RestoreIntegerBits
adds r6, r4, 0
movs r5, 0x4
movs r4, 0x1F
@@ -600,7 +600,7 @@ _080955F4:
adds r1, r5
mov r0, sp
movs r2, 0x20
bl sub_8094924
bl RestoreIntegerBits
adds r5, 0x4
subs r4, 0x1
cmp r4, 0
@@ -626,7 +626,7 @@ sub_8095624:
adds r2, r1, 0
mov r0, sp
adds r1, r3, 0
bl sub_809486C
bl xxx_init_struct_8094924_save_809486C
ldr r6, _08095768
movs r5, 0
movs r4, 0x1F
@@ -643,101 +643,101 @@ _0809563A:
ldr r1, [r4]
mov r0, sp
movs r2, 0x20
bl sub_809488C
bl SaveIntegerBits
ldr r5, [r4]
adds r4, r5, 0x4
mov r0, sp
adds r1, r4, 0
movs r2, 0x2
bl sub_809488C
bl SaveIntegerBits
adds r1, r5, 0x6
mov r0, sp
movs r2, 0x1
bl sub_809488C
bl SaveIntegerBits
adds r1, r5, 0x7
mov r0, sp
movs r2, 0x7
bl sub_809488C
bl SaveIntegerBits
adds r4, 0x4
mov r0, sp
adds r1, r4, 0
bl sub_80902F4
bl xxx_save_poke_sub_4_80902F4
adds r1, r5, 0
adds r1, 0xC
mov r0, sp
movs r2, 0x9
bl sub_809488C
bl SaveIntegerBits
adds r1, r5, 0
adds r1, 0x10
mov r0, sp
bl sub_808F41C
bl xxx_save_poke_sub_c_808F41C
adds r1, r5, 0
adds r1, 0x14
mov r0, sp
bl sub_808F41C
bl xxx_save_poke_sub_c_808F41C
adds r1, r5, 0
adds r1, 0x18
mov r0, sp
movs r2, 0xA
bl sub_809488C
bl SaveIntegerBits
adds r1, r5, 0
adds r1, 0x1A
mov r0, sp
movs r2, 0xA
bl sub_809488C
bl SaveIntegerBits
adds r1, r5, 0
adds r1, 0x1C
mov r0, sp
movs r2, 0x8
bl sub_809488C
bl SaveIntegerBits
adds r1, r5, 0
adds r1, 0x1D
mov r0, sp
movs r2, 0x8
bl sub_809488C
bl SaveIntegerBits
adds r1, r5, 0
adds r1, 0x1E
mov r0, sp
movs r2, 0x8
bl sub_809488C
bl SaveIntegerBits
adds r1, r5, 0
adds r1, 0x1F
mov r0, sp
movs r2, 0x8
bl sub_809488C
bl SaveIntegerBits
adds r1, r5, 0
adds r1, 0x20
mov r0, sp
movs r2, 0x18
bl sub_809488C
bl SaveIntegerBits
adds r1, r5, 0
adds r1, 0x24
mov r0, sp
movs r2, 0x18
bl sub_809488C
bl SaveIntegerBits
adds r1, r5, 0
adds r1, 0x28
mov r0, sp
movs r2, 0x4
bl sub_809488C
bl SaveIntegerBits
adds r1, r5, 0
adds r1, 0x2C
mov r0, sp
bl sub_8091DE0
bl SaveHeldItem
adds r1, r5, 0
adds r1, 0x30
mov r0, sp
bl sub_8094108
bl xxx_save_poke_sub_2c_8094108
adds r1, r5, 0
adds r1, 0x50
mov r0, sp
movs r2, 0x50
bl sub_809488C
bl SaveIntegerBits
ldr r4, _08095770
ldr r1, [r4]
mov r0, sp
movs r2, 0x20
bl sub_809488C
bl SaveIntegerBits
adds r6, r4, 0
movs r5, 0x4
movs r4, 0x1F
@@ -746,7 +746,7 @@ _08095742:
adds r1, r5
mov r0, sp
movs r2, 0x20
bl sub_809488C
bl SaveIntegerBits
adds r5, 0x4
subs r4, 0x1
cmp r4, 0
@@ -771,64 +771,64 @@ sub_8095774:
adds r4, r0, 0
adds r5, r1, 0
movs r2, 0x4
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0x4
adds r0, r4, 0
bl sub_8090314
bl xxx_restore_poke_sub_4_8090314
adds r1, r5, 0
adds r1, 0x8
adds r0, r4, 0
movs r2, 0x18
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0
adds r1, 0xC
adds r0, r4, 0
movs r2, 0x9
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0
adds r1, 0x10
adds r0, r4, 0
movs r2, 0x20
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0
adds r1, 0x14
adds r0, r4, 0
movs r2, 0x50
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0
adds r1, 0x20
adds r0, r4, 0
movs r2, 0x8
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0
adds r1, 0x21
adds r0, r4, 0
movs r2, 0x8
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0
adds r1, 0x22
adds r0, r4, 0
movs r2, 0x8
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0
adds r1, 0x24
adds r0, r4, 0
movs r2, 0x20
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0
adds r1, 0x28
adds r0, r4, 0
movs r2, 0x20
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0
adds r1, 0x2C
adds r0, r4, 0
movs r2, 0x8
bl sub_8094924
bl RestoreIntegerBits
adds r0, r4, 0
mov r1, sp
movs r2, 0x1
bl sub_8094924
bl RestoreIntegerBits
mov r0, sp
ldrb r1, [r0]
movs r0, 0x1
@@ -858,60 +858,60 @@ sub_8095824:
adds r0, r5, 0
adds r1, r4, 0
movs r2, 0x4
bl sub_809488C
bl SaveIntegerBits
adds r1, r4, 0x4
adds r0, r5, 0
bl sub_80902F4
bl xxx_save_poke_sub_4_80902F4
adds r1, r4, 0
adds r1, 0x8
adds r0, r5, 0
movs r2, 0x18
bl sub_809488C
bl SaveIntegerBits
adds r1, r4, 0
adds r1, 0xC
adds r0, r5, 0
movs r2, 0x9
bl sub_809488C
bl SaveIntegerBits
adds r1, r4, 0
adds r1, 0x10
adds r0, r5, 0
movs r2, 0x20
bl sub_809488C
bl SaveIntegerBits
adds r1, r4, 0
adds r1, 0x14
adds r0, r5, 0
movs r2, 0x50
bl sub_809488C
bl SaveIntegerBits
adds r1, r4, 0
adds r1, 0x20
adds r0, r5, 0
movs r2, 0x8
bl sub_809488C
bl SaveIntegerBits
adds r1, r4, 0
adds r1, 0x21
adds r0, r5, 0
movs r2, 0x8
bl sub_809488C
bl SaveIntegerBits
adds r1, r4, 0
adds r1, 0x22
adds r0, r5, 0
movs r2, 0x8
bl sub_809488C
bl SaveIntegerBits
adds r1, r4, 0
adds r1, 0x24
adds r0, r5, 0
movs r2, 0x20
bl sub_809488C
bl SaveIntegerBits
adds r1, r4, 0
adds r1, 0x28
adds r0, r5, 0
movs r2, 0x20
bl sub_809488C
bl SaveIntegerBits
adds r1, r4, 0
adds r1, 0x2C
adds r0, r5, 0
movs r2, 0x8
bl sub_809488C
bl SaveIntegerBits
adds r0, r4, 0
adds r0, 0x2D
ldrb r0, [r0]
@@ -922,7 +922,7 @@ sub_8095824:
_080958D2:
adds r0, r5, 0
movs r2, 0x1
bl sub_809488C
bl SaveIntegerBits
add sp, 0x4
pop {r4-r6}
pop {r0}

View File

@@ -2870,7 +2870,7 @@ sub_8096FA0:
adds r2, r1, 0
mov r0, sp
adds r1, r3, 0
bl sub_809485C
bl xxx_init_struct_8094924_restore_809485C
add r7, sp, 0x10
ldr r6, _08097020
movs r5, 0
@@ -2915,7 +2915,7 @@ _08097000:
mov r0, sp
adds r1, r7, 0
movs r2, 0x1
bl sub_8094924
bl RestoreIntegerBits
ldr r1, [sp, 0x10]
ands r1, r6
cmp r1, 0
@@ -2943,7 +2943,7 @@ _08097030:
mov r0, sp
adds r1, r7, 0
movs r2, 0x1
bl sub_8094924
bl RestoreIntegerBits
ldr r1, [sp, 0x10]
movs r2, 0x1
ands r1, r2
@@ -2974,7 +2974,7 @@ _08097068:
movs r2, 0xA0
lsls r2, 1
mov r0, sp
bl sub_8094924
bl RestoreIntegerBits
ldr r1, [r4]
movs r2, 0xDC
lsls r2, 1
@@ -2982,7 +2982,7 @@ _08097068:
movs r2, 0xF0
lsls r2, 2
mov r0, sp
bl sub_8094924
bl RestoreIntegerBits
adds r6, r4, 0
movs r5, 0x8C
lsls r5, 2
@@ -2993,17 +2993,17 @@ _08097096:
adds r1, 0x8
mov r0, sp
movs r2, 0x20
bl sub_8094924
bl RestoreIntegerBits
ldr r1, [r6]
adds r1, r5
adds r1, 0x4
mov r0, sp
movs r2, 0x18
bl sub_8094924
bl RestoreIntegerBits
ldr r1, [r6]
adds r1, r5
mov r0, sp
bl sub_8090314
bl xxx_restore_poke_sub_4_8090314
adds r5, 0xC
subs r4, 0x1
cmp r4, 0
@@ -3027,7 +3027,7 @@ sub_80970D8:
adds r2, r1, 0
mov r0, sp
adds r1, r3, 0
bl sub_809486C
bl xxx_init_struct_8094924_save_809486C
add r7, sp, 0x10
ldr r6, _080971E8
movs r5, 0
@@ -3083,7 +3083,7 @@ _0809714A:
mov r0, sp
adds r1, r7, 0
movs r2, 0x1
bl sub_809488C
bl SaveIntegerBits
adds r4, 0x1
cmp r4, 0x37
ble _08097134
@@ -3102,7 +3102,7 @@ _08097170:
mov r0, sp
adds r1, r7, 0
movs r2, 0x1
bl sub_809488C
bl SaveIntegerBits
ldr r4, _080971E8
ldr r1, [r4]
movs r0, 0xC8
@@ -3111,7 +3111,7 @@ _08097170:
movs r2, 0xA0
lsls r2, 1
mov r0, sp
bl sub_809488C
bl SaveIntegerBits
ldr r1, [r4]
movs r0, 0xDC
lsls r0, 1
@@ -3119,7 +3119,7 @@ _08097170:
movs r2, 0xF0
lsls r2, 2
mov r0, sp
bl sub_809488C
bl SaveIntegerBits
adds r6, r4, 0
movs r5, 0x8C
lsls r5, 2
@@ -3130,17 +3130,17 @@ _080971AA:
adds r1, 0x8
mov r0, sp
movs r2, 0x20
bl sub_809488C
bl SaveIntegerBits
ldr r1, [r6]
adds r1, r5
adds r1, 0x4
mov r0, sp
movs r2, 0x18
bl sub_809488C
bl SaveIntegerBits
ldr r1, [r6]
adds r1, r5
mov r0, sp
bl sub_80902F4
bl xxx_save_poke_sub_4_80902F4
adds r5, 0xC
subs r4, 0x1
cmp r4, 0
@@ -3162,53 +3162,53 @@ sub_80971EC:
adds r4, r0, 0
adds r5, r1, 0
movs r2, 0x4
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0x1
adds r0, r4, 0
movs r2, 0x3
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0x2
adds r0, r4, 0
movs r2, 0x4
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0
adds r1, 0xC
adds r0, r4, 0
movs r2, 0x9
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0
adds r1, 0xE
adds r0, r4, 0
movs r2, 0x9
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0
adds r1, 0x10
adds r0, r4, 0
movs r2, 0x8
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0
adds r1, 0x11
adds r0, r4, 0
movs r2, 0x4
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0
adds r1, 0x12
adds r0, r4, 0
movs r2, 0x8
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0
adds r1, 0x13
adds r0, r4, 0
movs r2, 0x6
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0
adds r1, 0x8
adds r0, r4, 0
movs r2, 0x18
bl sub_8094924
bl RestoreIntegerBits
adds r1, r5, 0x4
adds r0, r4, 0
bl sub_8090314
bl xxx_restore_poke_sub_4_8090314
pop {r4,r5}
pop {r0}
bx r0
@@ -3220,53 +3220,53 @@ sub_8097270:
adds r4, r0, 0
adds r5, r1, 0
movs r2, 0x4
bl sub_809488C
bl SaveIntegerBits
adds r1, r5, 0x1
adds r0, r4, 0
movs r2, 0x3
bl sub_809488C
bl SaveIntegerBits
adds r1, r5, 0x2
adds r0, r4, 0
movs r2, 0x4
bl sub_809488C
bl SaveIntegerBits
adds r1, r5, 0
adds r1, 0xC
adds r0, r4, 0
movs r2, 0x9
bl sub_809488C
bl SaveIntegerBits
adds r1, r5, 0
adds r1, 0xE
adds r0, r4, 0
movs r2, 0x9
bl sub_809488C
bl SaveIntegerBits
adds r1, r5, 0
adds r1, 0x10
adds r0, r4, 0
movs r2, 0x8
bl sub_809488C
bl SaveIntegerBits
adds r1, r5, 0
adds r1, 0x11
adds r0, r4, 0
movs r2, 0x4
bl sub_809488C
bl SaveIntegerBits
adds r1, r5, 0
adds r1, 0x12
adds r0, r4, 0
movs r2, 0x8
bl sub_809488C
bl SaveIntegerBits
adds r1, r5, 0
adds r1, 0x13
adds r0, r4, 0
movs r2, 0x6
bl sub_809488C
bl SaveIntegerBits
adds r1, r5, 0
adds r1, 0x8
adds r0, r4, 0
movs r2, 0x18
bl sub_809488C
bl SaveIntegerBits
adds r1, r5, 0x4
adds r0, r4, 0
bl sub_80902F4
bl xxx_save_poke_sub_4_80902F4
pop {r4,r5}
pop {r0}
bx r0

View File

@@ -463,63 +463,63 @@ sub_8097C18:
adds r1, 0x4
adds r0, r5, 0
movs r2, 0x11
bl sub_809488C
bl SaveIntegerBits
ldr r1, [r4]
adds r1, 0x8
adds r0, r5, 0
movs r2, 0x11
bl sub_809488C
bl SaveIntegerBits
ldr r1, [r4]
adds r1, 0xC
adds r0, r5, 0
movs r2, 0x11
bl sub_809488C
bl SaveIntegerBits
ldr r1, [r4]
adds r0, r5, 0
movs r2, 0x20
bl sub_809488C
bl SaveIntegerBits
ldr r1, [r4]
adds r1, 0x14
adds r0, r5, 0
movs r2, 0xE
bl sub_809488C
bl SaveIntegerBits
ldr r1, [r4]
adds r1, 0x16
adds r0, r5, 0
movs r2, 0xE
bl sub_809488C
bl SaveIntegerBits
ldr r1, [r4]
adds r1, 0x18
adds r0, r5, 0
movs r2, 0x9
bl sub_809488C
bl SaveIntegerBits
ldr r1, [r4]
adds r1, 0xC0
adds r0, r5, 0
movs r2, 0x11
bl sub_809488C
bl SaveIntegerBits
ldr r1, [r4]
adds r1, 0x1C
movs r6, 0xE0
lsls r6, 1
adds r0, r5, 0
adds r2, r6, 0
bl sub_809488C
bl SaveIntegerBits
ldr r1, [r4]
adds r1, 0x54
adds r0, r5, 0
adds r2, r6, 0
bl sub_809488C
bl SaveIntegerBits
ldr r1, [r4]
adds r1, 0x8C
movs r2, 0xD0
lsls r2, 1
adds r0, r5, 0
bl sub_809488C
bl SaveIntegerBits
ldr r1, [r4]
adds r1, 0x10
adds r0, r5, 0
bl sub_80902F4
bl xxx_save_poke_sub_4_80902F4
pop {r4-r6}
pop {r0}
bx r0
@@ -535,63 +535,63 @@ sub_8097CC0:
ldr r1, [r4]
adds r1, 0x4
movs r2, 0x11
bl sub_8094924
bl RestoreIntegerBits
ldr r1, [r4]
adds r1, 0x8
adds r0, r5, 0
movs r2, 0x11
bl sub_8094924
bl RestoreIntegerBits
ldr r1, [r4]
adds r1, 0xC
adds r0, r5, 0
movs r2, 0x11
bl sub_8094924
bl RestoreIntegerBits
ldr r1, [r4]
adds r0, r5, 0
movs r2, 0x20
bl sub_8094924
bl RestoreIntegerBits
ldr r1, [r4]
adds r1, 0x14
adds r0, r5, 0
movs r2, 0xE
bl sub_8094924
bl RestoreIntegerBits
ldr r1, [r4]
adds r1, 0x16
adds r0, r5, 0
movs r2, 0xE
bl sub_8094924
bl RestoreIntegerBits
ldr r1, [r4]
adds r1, 0x18
adds r0, r5, 0
movs r2, 0x9
bl sub_8094924
bl RestoreIntegerBits
ldr r1, [r4]
adds r1, 0xC0
adds r0, r5, 0
movs r2, 0x11
bl sub_8094924
bl RestoreIntegerBits
ldr r1, [r4]
adds r1, 0x1C
movs r6, 0xE0
lsls r6, 1
adds r0, r5, 0
adds r2, r6, 0
bl sub_8094924
bl RestoreIntegerBits
ldr r1, [r4]
adds r1, 0x54
adds r0, r5, 0
adds r2, r6, 0
bl sub_8094924
bl RestoreIntegerBits
ldr r1, [r4]
adds r1, 0x8C
movs r2, 0xD0
lsls r2, 1
adds r0, r5, 0
bl sub_8094924
bl RestoreIntegerBits
ldr r1, [r4]
adds r1, 0x10
adds r0, r5, 0
bl sub_8090314
bl xxx_restore_poke_sub_4_8090314
pop {r4-r6}
pop {r0}
bx r0
@@ -607,7 +607,7 @@ sub_8097D60:
adds r2, r1, 0
mov r0, sp
adds r1, r3, 0
bl sub_809486C
bl xxx_init_struct_8094924_save_809486C
mov r0, sp
bl WriteGameOptions
mov r0, sp
@@ -632,7 +632,7 @@ sub_8097D98:
adds r2, r1, 0
mov r0, sp
adds r1, r3, 0
bl sub_809485C
bl xxx_init_struct_8094924_restore_809485C
mov r0, sp
bl ReadGameOptions
mov r0, sp

View File

@@ -1182,138 +1182,5 @@ _0808D6CE:
.align 2, 0
_0808D6E4: .4byte gRecruitedPokemonRef
thumb_func_end sub_808D6A4
thumb_func_start sub_808D6E8
sub_808D6E8:
push {r4-r7,lr}
mov r7, r8
push {r7}
movs r7, 0
movs r5, 0
movs r4, 0
ldr r0, _0808D740
mov r8, r0
movs r6, 0x1
_0808D6FA:
movs r0, 0x58
adds r1, r4, 0
muls r1, r0
mov r2, r8
ldr r0, [r2]
adds r2, r0, r1
ldrh r1, [r2]
adds r0, r6, 0
ands r0, r1
cmp r0, 0
beq _0808D728
lsrs r0, r1, 1
ands r0, r6
cmp r0, 0
beq _0808D728
movs r1, 0x8
ldrsh r0, [r2, r1]
bl GetPokemonSize
lsls r0, 24
lsrs r0, 24
adds r5, r0
adds r7, 0x1
_0808D728:
adds r4, 0x1
movs r0, 0xCE
lsls r0, 1
cmp r4, r0
ble _0808D6FA
cmp r5, 0x5
bgt _0808D744
cmp r7, 0x3
bgt _0808D744
movs r0, 0x1
b _0808D746
.align 2, 0
_0808D740: .4byte gRecruitedPokemonRef
_0808D744:
movs r0, 0
_0808D746:
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_808D6E8
thumb_func_start sub_808D750
sub_808D750:
push {r4-r7,lr}
mov r7, r9
mov r6, r8
push {r6,r7}
lsls r0, 16
asrs r0, 16
mov r8, r0
movs r6, 0
movs r5, 0
movs r4, 0
ldr r0, _0808D7C8
mov r9, r0
movs r7, 0x1
_0808D76A:
movs r0, 0x58
adds r1, r4, 0
muls r1, r0
mov r2, r9
ldr r0, [r2]
adds r1, r0, r1
ldrh r2, [r1]
adds r0, r7, 0
ands r0, r2
cmp r0, 0
beq _0808D798
lsrs r0, r2, 1
ands r0, r7
cmp r0, 0
beq _0808D798
movs r2, 0x8
ldrsh r0, [r1, r2]
bl GetPokemonSize
lsls r0, 24
lsrs r0, 24
adds r5, r0
adds r6, 0x1
_0808D798:
adds r4, 0x1
movs r0, 0xCE
lsls r0, 1
cmp r4, r0
ble _0808D76A
cmp r6, 0x3
bgt _0808D7CC
ldr r2, _0808D7C8
movs r0, 0x58
mov r1, r8
muls r1, r0
ldr r0, [r2]
adds r1, r0, r1
movs r2, 0x8
ldrsh r0, [r1, r2]
bl GetPokemonSize
lsls r0, 24
lsrs r0, 24
adds r5, r0
cmp r5, 0x6
bgt _0808D7CC
movs r0, 0x1
b _0808D7CE
.align 2, 0
_0808D7C8: .4byte gRecruitedPokemonRef
_0808D7CC:
movs r0, 0
_0808D7CE:
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end sub_808D750
.align 2,0

View File

@@ -3,181 +3,7 @@
.syntax unified
.text
thumb_func_start sub_808E400
sub_808E400:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x8
lsls r0, 16
asrs r0, 16
mov r9, r0
lsls r2, 24
lsrs r2, 24
str r2, [sp]
lsls r3, 24
lsrs r3, 24
str r3, [sp, 0x4]
movs r0, 0
mov r10, r0
movs r7, 0x1
adds r6, r1, 0
_0808E426:
lsls r0, r7, 16
asrs r5, r0, 16
mov r8, r5
adds r0, r5, 0
bl GetPokemonEvolveFrom
lsls r0, 16
asrs r0, 16
cmp r9, r0
bne _0808E46C
ldr r0, [sp]
cmp r0, 0
bne _0808E456
mov r0, r9
bl GetPokemonSize
adds r4, r0, 0
adds r0, r5, 0
bl GetPokemonSize
lsls r4, 24
lsls r0, 24
cmp r4, r0
bne _0808E46C
_0808E456:
ldr r0, [sp, 0x4]
cmp r0, 0
bne _0808E462
ldr r0, _0808E488
cmp r5, r0
beq _0808E46C
_0808E462:
mov r0, r8
strh r0, [r6]
adds r6, 0x2
movs r0, 0x1
add r10, r0
_0808E46C:
adds r7, 0x1
ldr r0, _0808E48C
cmp r7, r0
ble _0808E426
mov r0, r10
add sp, 0x8
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_0808E488: .4byte 0x0000013d
_0808E48C: .4byte 0x000001a7
thumb_func_end sub_808E400
thumb_func_start sub_808E490
sub_808E490:
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x20
mov r8, r0
lsls r1, 16
asrs r1, 16
ldr r3, _0808E4F8
mov r0, sp
movs r2, 0x1
bl sub_808E0AC
adds r7, r0, 0
cmp r7, 0
bne _0808E4B8
movs r7, 0x1
mov r1, sp
movs r0, 0xCC
lsls r0, 1
strh r0, [r1]
_0808E4B8:
movs r4, 0
cmp r4, r7
bge _0808E4D8
mov r6, sp
mov r5, r8
adds r4, r7, 0
_0808E4C4:
ldrh r1, [r6]
adds r0, r5, 0
bl sub_8092AD4
adds r6, 0x2
adds r5, 0x8
subs r4, 0x1
cmp r4, 0
bne _0808E4C4
adds r4, r7, 0
_0808E4D8:
cmp r4, 0x3
bgt _0808E4EC
movs r1, 0
lsls r0, r4, 3
add r0, r8
_0808E4E2:
strb r1, [r0]
adds r0, 0x8
adds r4, 0x1
cmp r4, 0x3
ble _0808E4E2
_0808E4EC:
add sp, 0x20
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0808E4F8: .4byte 0x000003e7
thumb_func_end sub_808E490
thumb_func_start sub_808E4FC
sub_808E4FC:
push {lr}
sub sp, 0x10
ldr r1, _0808E518
lsls r0, 2
adds r0, r1
ldr r0, [r0]
mov r1, sp
bl sub_8097DF0
ldr r0, [sp]
ldr r0, [r0]
add sp, 0x10
pop {r1}
bx r1
.align 2, 0
_0808E518: .4byte gFormattedStatusNames
thumb_func_end sub_808E4FC
thumb_func_start sub_808E51C
sub_808E51C:
push {lr}
sub sp, 0x10
ldr r1, _0808E538
lsls r0, 2
adds r0, r1
ldr r0, [r0]
mov r1, sp
bl sub_8097DF0
ldr r0, [sp]
ldr r0, [r0, 0x4]
add sp, 0x10
pop {r1}
bx r1
.align 2, 0
_0808E538: .4byte gFormattedStatusNames
thumb_func_end sub_808E51C
.text
thumb_func_start sub_808E53C
sub_808E53C:

View File

@@ -3,838 +3,7 @@
.syntax unified
.text
thumb_func_start SaveRecruitedPokemon
SaveRecruitedPokemon:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x24
adds r3, r0, 0
adds r2, r1, 0
add r4, sp, 0xC
adds r0, r4, 0
adds r1, r3, 0
bl sub_809486C
mov r10, r4
mov r0, sp
adds r0, 0x1E
str r0, [sp, 0x20]
add r1, sp, 0x1C
mov r8, r1
ldr r0, _0808EDF0
adds r2, r0, 0
mov r1, sp
movs r5, 0x5
_0808EDA6:
ldrh r0, [r1]
orrs r0, r2
strh r0, [r1]
adds r1, 0x2
subs r5, 0x1
cmp r5, 0
bge _0808EDA6
movs r0, 0x1
negs r0, r0
ldr r1, [sp, 0x20]
strh r0, [r1]
movs r5, 0
mov r4, sp
_0808EDC0:
ldr r2, _0808EDF4
movs r0, 0x58
adds r1, r5, 0
muls r1, r0
ldr r0, [r2]
adds r1, r0, r1
ldrh r2, [r1]
movs r0, 0x1
ands r0, r2
cmp r0, 0
beq _0808EDF8
movs r0, 0x2
ands r0, r2
cmp r0, 0
beq _0808EDE2
strh r5, [r4]
adds r4, 0x2
_0808EDE2:
ldrb r0, [r1, 0x2]
cmp r0, 0
beq _0808EDFA
ldr r0, [sp, 0x20]
strh r5, [r0]
b _0808EDFA
.align 2, 0
_0808EDF0: .4byte 0x0000ffff
_0808EDF4: .4byte gRecruitedPokemonRef
_0808EDF8:
strb r0, [r1, 0x3]
_0808EDFA:
mov r0, r10
bl sub_808EFA0
adds r5, 0x1
movs r0, 0xCE
lsls r0, 1
cmp r5, r0
ble _0808EDC0
ldr r1, _0808EE34
mov r9, r1
mov r4, r10
ldr r7, _0808EE38
movs r6, 0
movs r5, 0x3
_0808EE16:
mov r1, r9
ldr r0, [r1]
adds r0, r6, r0
ldr r1, _0808EE38
adds r0, r1
ldrb r0, [r0]
movs r1, 0x1
ands r1, r0
cmp r1, 0
beq _0808EE3C
movs r0, 0xFF
mov r1, r8
strb r0, [r1]
b _0808EE40
.align 2, 0
_0808EE34: .4byte gRecruitedPokemonRef
_0808EE38: .4byte 0x00008f88
_0808EE3C:
mov r0, r8
strb r1, [r0]
_0808EE40:
adds r0, r4, 0
mov r1, r8
movs r2, 0x1
bl sub_809488C
mov r0, r9
ldr r1, [r0]
adds r1, r7
adds r0, r4, 0
bl sub_808EFA0
adds r7, 0x58
adds r6, 0x58
subs r5, 0x1
cmp r5, 0
bge _0808EE16
mov r4, sp
movs r5, 0x5
_0808EE64:
mov r0, r10
adds r1, r4, 0
movs r2, 0x10
bl sub_809488C
adds r4, 0x2
subs r5, 0x1
cmp r5, 0
bge _0808EE64
mov r0, r10
ldr r1, [sp, 0x20]
movs r2, 0x10
bl sub_809488C
mov r0, r10
bl nullsub_102
mov r1, r10
ldr r0, [r1, 0x8]
add sp, 0x24
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r1}
bx r1
thumb_func_end SaveRecruitedPokemon
thumb_func_start ReadRecruitedPokemon
ReadRecruitedPokemon:
push {r4-r7,lr}
mov r7, r8
push {r7}
sub sp, 0x14
adds r3, r0, 0
adds r2, r1, 0
mov r0, sp
adds r1, r3, 0
bl sub_809485C
movs r5, 0
add r7, sp, 0x10
movs r0, 0x12
add r0, sp
mov r8, r0
ldr r6, _0808EF10
movs r4, 0
_0808EEBE:
ldr r1, [r6]
adds r1, r4
mov r0, sp
bl sub_808F068
adds r4, 0x58
adds r5, 0x1
movs r0, 0xCE
lsls r0, 1
cmp r5, r0
ble _0808EEBE
movs r5, 0
adds r6, r7, 0
ldr r7, _0808EF10
_0808EEDA:
mov r0, sp
adds r1, r6, 0
movs r2, 0x1
bl sub_8094924
movs r0, 0x58
adds r4, r5, 0
muls r4, r0
ldr r1, _0808EF14
adds r0, r4, r1
ldr r1, [r7]
adds r1, r0
mov r0, sp
bl sub_808F068
ldrb r0, [r6]
movs r1, 0x1
ands r1, r0
cmp r1, 0
beq _0808EF18
ldr r0, [r7]
adds r0, r4
ldr r2, _0808EF14
adds r0, r2
movs r1, 0x3
b _0808EF20
.align 2, 0
_0808EF10: .4byte gRecruitedPokemonRef
_0808EF14: .4byte 0x00008f88
_0808EF18:
ldr r0, [r7]
adds r0, r4
ldr r3, _0808EF98
adds r0, r3
_0808EF20:
strh r1, [r0]
adds r5, 0x1
cmp r5, 0x3
ble _0808EEDA
mov r4, r8
movs r6, 0xCE
lsls r6, 1
movs r5, 0x5
_0808EF30:
mov r0, sp
adds r1, r4, 0
movs r2, 0x10
bl sub_8094924
ldrh r0, [r4]
cmp r0, r6
bhi _0808EF56
ldr r0, _0808EF9C
ldr r2, [r0]
movs r0, 0
ldrsh r1, [r4, r0]
movs r0, 0x58
muls r0, r1
adds r2, r0
ldrh r1, [r2]
movs r0, 0x2
orrs r0, r1
strh r0, [r2]
_0808EF56:
subs r5, 0x1
cmp r5, 0
bge _0808EF30
mov r0, sp
mov r1, r8
movs r2, 0x10
bl sub_8094924
mov r2, r8
ldrh r1, [r2]
movs r0, 0xCE
lsls r0, 1
cmp r1, r0
bhi _0808EF84
ldr r0, _0808EF9C
ldr r1, [r0]
movs r3, 0
ldrsh r2, [r2, r3]
movs r0, 0x58
muls r0, r2
adds r1, r0
movs r0, 0x1
strb r0, [r1, 0x2]
_0808EF84:
mov r0, sp
bl nullsub_102
ldr r0, [sp, 0x8]
add sp, 0x14
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_0808EF98: .4byte 0x00008f88
_0808EF9C: .4byte gRecruitedPokemonRef
thumb_func_end ReadRecruitedPokemon
thumb_func_start sub_808EFA0
sub_808EFA0:
push {r4,r5,lr}
adds r4, r0, 0
adds r5, r1, 0
adds r1, r5, 0x3
movs r2, 0x7
bl sub_809488C
adds r1, r5, 0
adds r1, 0x8
adds r0, r4, 0
movs r2, 0x9
bl sub_809488C
adds r1, r5, 0x4
adds r0, r4, 0
bl sub_80902F4
adds r1, r5, 0
adds r1, 0xC
adds r0, r4, 0
bl sub_808F41C
adds r1, r5, 0
adds r1, 0x10
adds r0, r4, 0
bl sub_808F41C
adds r1, r5, 0
adds r1, 0x14
adds r0, r4, 0
movs r2, 0xA
bl sub_809488C
adds r1, r5, 0
adds r1, 0x16
adds r0, r4, 0
movs r2, 0xA
bl sub_809488C
adds r1, r5, 0
adds r1, 0x18
adds r0, r4, 0
movs r2, 0x8
bl sub_809488C
adds r1, r5, 0
adds r1, 0x19
adds r0, r4, 0
movs r2, 0x8
bl sub_809488C
adds r1, r5, 0
adds r1, 0x1A
adds r0, r4, 0
movs r2, 0x8
bl sub_809488C
adds r1, r5, 0
adds r1, 0x1B
adds r0, r4, 0
movs r2, 0x8
bl sub_809488C
adds r1, r5, 0
adds r1, 0x1C
adds r0, r4, 0
movs r2, 0x18
bl sub_809488C
adds r1, r5, 0
adds r1, 0x20
adds r0, r4, 0
movs r2, 0x18
bl sub_809488C
adds r1, r5, 0
adds r1, 0x24
adds r0, r4, 0
movs r2, 0x4
bl sub_809488C
adds r1, r5, 0
adds r1, 0x28
adds r0, r4, 0
bl sub_8091DE0
adds r1, r5, 0
adds r1, 0x2C
adds r0, r4, 0
bl sub_8094108
adds r1, r5, 0
adds r1, 0x4C
adds r0, r4, 0
movs r2, 0x50
bl sub_809488C
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_808EFA0
thumb_func_start sub_808F068
sub_808F068:
push {r4-r6,lr}
adds r5, r0, 0
adds r4, r1, 0
adds r0, r4, 0
movs r1, 0
movs r2, 0x58
bl memset
movs r6, 0
movs r0, 0
strh r0, [r4]
strb r6, [r4, 0x2]
adds r1, r4, 0x3
adds r0, r5, 0
movs r2, 0x7
bl sub_8094924
ldrb r0, [r4, 0x3]
cmp r0, 0
beq _0808F098
ldrh r0, [r4]
movs r1, 0x1
orrs r0, r1
strh r0, [r4]
_0808F098:
adds r1, r4, 0
adds r1, 0x8
adds r0, r5, 0
movs r2, 0x9
bl sub_8094924
adds r1, r4, 0x4
adds r0, r5, 0
bl sub_8090314
adds r1, r4, 0
adds r1, 0xC
adds r0, r5, 0
bl sub_808F410
adds r1, r4, 0
adds r1, 0x10
adds r0, r5, 0
bl sub_808F410
adds r1, r4, 0
adds r1, 0x14
adds r0, r5, 0
movs r2, 0xA
bl sub_8094924
adds r1, r4, 0
adds r1, 0x16
adds r0, r5, 0
movs r2, 0xA
bl sub_8094924
adds r1, r4, 0
adds r1, 0x18
adds r0, r5, 0
movs r2, 0x8
bl sub_8094924
adds r1, r4, 0
adds r1, 0x19
adds r0, r5, 0
movs r2, 0x8
bl sub_8094924
adds r1, r4, 0
adds r1, 0x1A
adds r0, r5, 0
movs r2, 0x8
bl sub_8094924
adds r1, r4, 0
adds r1, 0x1B
adds r0, r5, 0
movs r2, 0x8
bl sub_8094924
adds r1, r4, 0
adds r1, 0x1C
adds r0, r5, 0
movs r2, 0x18
bl sub_8094924
adds r1, r4, 0
adds r1, 0x20
adds r0, r5, 0
movs r2, 0x18
bl sub_8094924
adds r1, r4, 0
adds r1, 0x24
adds r0, r5, 0
movs r2, 0x4
bl sub_8094924
adds r1, r4, 0
adds r1, 0x28
adds r0, r5, 0
bl sub_8091DC0
adds r1, r4, 0
adds r1, 0x2C
adds r0, r5, 0
bl sub_8094128
adds r1, r4, 0
adds r1, 0x4C
adds r0, r5, 0
movs r2, 0x50
bl sub_8094924
pop {r4-r6}
pop {r0}
bx r0
thumb_func_end sub_808F068
thumb_func_start sub_808F154
sub_808F154:
push {r4-r7,lr}
sub sp, 0x14
adds r3, r0, 0
adds r2, r1, 0
mov r0, sp
adds r1, r3, 0
bl sub_809486C
add r2, sp, 0x10
movs r0, 0xFF
strb r0, [r2]
mov r1, sp
adds r1, 0x11
movs r0, 0
strb r0, [r1]
movs r5, 0
adds r6, r2, 0
adds r7, r1, 0
_0808F178:
ldr r1, _0808F2A8
movs r0, 0x64
muls r0, r5
ldr r2, _0808F2AC
adds r0, r2
ldr r1, [r1]
adds r4, r1, r0
mov r0, sp
adds r1, r4, 0
movs r2, 0x2
bl sub_809488C
ldrb r0, [r4, 0x2]
adds r1, r7, 0
cmp r0, 0
beq _0808F19A
adds r1, r6, 0
_0808F19A:
mov r0, sp
movs r2, 0x1
bl sub_809488C
adds r1, r4, 0x3
mov r0, sp
movs r2, 0x7
bl sub_809488C
adds r1, r4, 0x4
mov r0, sp
bl sub_80902F4
adds r1, r4, 0
adds r1, 0x8
mov r0, sp
movs r2, 0xA
bl sub_809488C
adds r1, r4, 0
adds r1, 0xA
mov r0, sp
movs r2, 0x10
bl sub_809488C
adds r1, r4, 0
adds r1, 0xC
mov r0, sp
movs r2, 0x10
bl sub_809488C
adds r1, r4, 0
adds r1, 0xE
mov r0, sp
movs r2, 0x9
bl sub_809488C
adds r1, r4, 0
adds r1, 0x10
mov r0, sp
movs r2, 0xA
bl sub_809488C
adds r1, r4, 0
adds r1, 0x12
mov r0, sp
movs r2, 0xA
bl sub_809488C
adds r1, r4, 0
adds r1, 0x14
mov r0, sp
movs r2, 0x8
bl sub_809488C
adds r1, r4, 0
adds r1, 0x15
mov r0, sp
movs r2, 0x8
bl sub_809488C
adds r1, r4, 0
adds r1, 0x16
mov r0, sp
movs r2, 0x8
bl sub_809488C
adds r1, r4, 0
adds r1, 0x17
mov r0, sp
movs r2, 0x8
bl sub_809488C
adds r1, r4, 0
adds r1, 0x18
mov r0, sp
movs r2, 0x18
bl sub_809488C
adds r1, r4, 0
adds r1, 0x1C
mov r0, sp
bl sub_8094184
adds r1, r4, 0
adds r1, 0x40
mov r0, sp
bl sub_8091E28
adds r1, r4, 0
adds r1, 0x44
mov r0, sp
bl sub_809449C
adds r1, r4, 0
adds r1, 0x48
mov r0, sp
bl sub_809449C
adds r1, r4, 0
adds r1, 0x4C
mov r0, sp
movs r2, 0x18
bl sub_809488C
adds r1, r4, 0
adds r1, 0x50
mov r0, sp
movs r2, 0x4
bl sub_809488C
adds r1, r4, 0
adds r1, 0x54
mov r0, sp
bl sub_808F448
adds r1, r4, 0
adds r1, 0x58
mov r0, sp
movs r2, 0x50
bl sub_809488C
adds r5, 0x1
cmp r5, 0x3
bgt _0808F296
b _0808F178
_0808F296:
mov r0, sp
bl nullsub_102
ldr r0, [sp, 0x8]
add sp, 0x14
pop {r4-r7}
pop {r1}
bx r1
.align 2, 0
_0808F2A8: .4byte gRecruitedPokemonRef
_0808F2AC: .4byte 0x00008df8
thumb_func_end sub_808F154
thumb_func_start sub_808F2B0
sub_808F2B0:
push {r4-r6,lr}
sub sp, 0x14
adds r3, r0, 0
adds r2, r1, 0
mov r0, sp
adds r1, r3, 0
bl sub_809485C
movs r5, 0
add r6, sp, 0x10
_0808F2C4:
ldr r1, _0808F300
movs r0, 0x64
muls r0, r5
ldr r2, _0808F304
adds r0, r2
ldr r1, [r1]
adds r4, r1, r0
adds r0, r4, 0
movs r1, 0
movs r2, 0x64
bl memset
mov r0, sp
adds r1, r4, 0
movs r2, 0x2
bl sub_8094924
mov r0, sp
adds r1, r6, 0
movs r2, 0x1
bl sub_8094924
ldrb r0, [r6]
movs r2, 0x1
adds r1, r2, 0
ands r1, r0
cmp r1, 0
beq _0808F308
strb r2, [r4, 0x2]
b _0808F30A
.align 2, 0
_0808F300: .4byte gRecruitedPokemonRef
_0808F304: .4byte 0x00008df8
_0808F308:
strb r1, [r4, 0x2]
_0808F30A:
adds r1, r4, 0x3
mov r0, sp
movs r2, 0x7
bl sub_8094924
adds r1, r4, 0x4
mov r0, sp
bl sub_8090314
adds r1, r4, 0
adds r1, 0x8
mov r0, sp
movs r2, 0xA
bl sub_8094924
adds r1, r4, 0
adds r1, 0xA
mov r0, sp
movs r2, 0x10
bl sub_8094924
adds r1, r4, 0
adds r1, 0xC
mov r0, sp
movs r2, 0x10
bl sub_8094924
adds r1, r4, 0
adds r1, 0xE
mov r0, sp
movs r2, 0x9
bl sub_8094924
adds r1, r4, 0
adds r1, 0x10
mov r0, sp
movs r2, 0xA
bl sub_8094924
adds r1, r4, 0
adds r1, 0x12
mov r0, sp
movs r2, 0xA
bl sub_8094924
adds r1, r4, 0
adds r1, 0x14
mov r0, sp
movs r2, 0x8
bl sub_8094924
adds r1, r4, 0
adds r1, 0x15
mov r0, sp
movs r2, 0x8
bl sub_8094924
adds r1, r4, 0
adds r1, 0x16
mov r0, sp
movs r2, 0x8
bl sub_8094924
adds r1, r4, 0
adds r1, 0x17
mov r0, sp
movs r2, 0x8
bl sub_8094924
adds r1, r4, 0
adds r1, 0x18
mov r0, sp
movs r2, 0x18
bl sub_8094924
adds r1, r4, 0
adds r1, 0x1C
mov r0, sp
bl sub_80941FC
adds r1, r4, 0
adds r1, 0x40
mov r0, sp
bl sub_8091E00
adds r1, r4, 0
adds r1, 0x44
mov r0, sp
bl sub_809447C
adds r1, r4, 0
adds r1, 0x48
mov r0, sp
bl sub_809447C
adds r1, r4, 0
adds r1, 0x4C
mov r0, sp
movs r2, 0x18
bl sub_8094924
adds r1, r4, 0
adds r1, 0x50
mov r0, sp
movs r2, 0x4
bl sub_8094924
adds r1, r4, 0
adds r1, 0x54
mov r0, sp
bl sub_808F428
adds r1, r4, 0
adds r1, 0x58
mov r0, sp
movs r2, 0x50
bl sub_8094924
adds r5, 0x1
cmp r5, 0x3
bgt _0808F3FE
b _0808F2C4
_0808F3FE:
mov r0, sp
bl nullsub_102
ldr r0, [sp, 0x8]
add sp, 0x14
pop {r4-r6}
pop {r1}
bx r1
thumb_func_end sub_808F2B0
thumb_func_start sub_808F410
sub_808F410:
push {lr}
movs r2, 0x7
bl sub_8094924
pop {r0}
bx r0
thumb_func_end sub_808F410
thumb_func_start sub_808F41C
sub_808F41C:
push {lr}
movs r2, 0x7
bl sub_809488C
pop {r0}
bx r0
thumb_func_end sub_808F41C
thumb_func_start sub_808F428
sub_808F428:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
movs r2, 0xA
bl sub_8094924
adds r4, 0x2
adds r0, r5, 0
adds r1, r4, 0
movs r2, 0x5
bl sub_8094924
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_808F428
thumb_func_start sub_808F448
sub_808F448:
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
movs r2, 0xA
bl sub_809488C
adds r4, 0x2
adds r0, r5, 0
adds r1, r4, 0
movs r2, 0x5
bl sub_809488C
pop {r4,r5}
pop {r0}
bx r0
thumb_func_end sub_808F448
.text
thumb_func_start sub_808F468
sub_808F468:

View File

@@ -11,11 +11,11 @@ struct unkStruct_8094924
u32 unkC;
};
void sub_809486C(struct unkStruct_8094924 *r0, u8 *r1, s32 size);
void xxx_init_struct_8094924_save_809486C(struct unkStruct_8094924 *r0, u8 *r1, s32 size);
void nullsub_102(struct unkStruct_8094924 *r0);
void sub_809488C(struct unkStruct_8094924 *r0, u8 *r1, s32 size);
void sub_809485C(struct unkStruct_8094924 *r0, u8 *r1, s32 size);
void SaveIntegerBits(struct unkStruct_8094924 *r0, void *r1, s32 size);
void xxx_init_struct_8094924_restore_809485C(struct unkStruct_8094924 *r0, u8 *r1, s32 size);
void sub_80948E4(struct unkStruct_8094924 *r0, u8 *r1, s32 size);
void sub_8094924(struct unkStruct_8094924 *r0, u8 *r1, s32 size);
void RestoreIntegerBits(struct unkStruct_8094924 *r0, void *r1, s32 size);
#endif

View File

@@ -364,11 +364,11 @@ void sub_8091BB4(u8);
void sub_8090F58(void*, u8 *, struct ItemSlot *, struct unkStruct_8090F58*);
void SlotToHeldItem(struct HeldItem *held,struct ItemSlot *slot);
// some sort of weird memcpy's?
// not sure what the second argument should be typed as
void sub_8091DC0(struct unkStruct_8094924 *r0, u8*);
void sub_8091DE0(struct unkStruct_8094924 *a1, u8 *a2);
void sub_8091E00(struct unkStruct_8094924 *a1, u8 *a2);
void sub_8091E28(struct unkStruct_8094924 *a1, u8 *a2);
void RestoreHeldItem(struct unkStruct_8094924*, struct HeldItem*);
void SaveHeldItem(struct unkStruct_8094924*, struct HeldItem*);
void RestoreItemSlot(struct unkStruct_8094924 *a1, struct ItemSlot *a2);
void SaveItemSlot(struct unkStruct_8094924 *a1, struct ItemSlot *a2);
s32 RestoreTeamInventory(u8 *unk0, u32 size);
s32 SaveTeamInventory(u8 *unk0, u32 size);
#endif

View File

@@ -60,11 +60,44 @@ struct PokemonStruct
/* 0x4C */ u8 name[0xA];
};
struct unkStruct_808E6F4
{
s16 unk0;
u8 unk2;
};
struct EvolveStage
{
s16 speciesNum;
u8 unkHasNextStage;
};
struct PokemonStruct2
{
// size 0x64
u16 unk0;
u8 fill[0x62];
// size 0x68
u16 unk0; // corresponds to unk0 inPokemonStruct
u8 unk2; // unk2
u8 unkHasNextStage; // unk3
struct unkPokeSubStruct_4 unk4; // unk4
u16 IQ; // IQ (other offset)
u16 unkA;
u16 unkC;
s16 speciesNum; // speciesNum (other offset)
u16 unk10; // pokeHP
u16 unk12; // pokeHP
struct Offense offense; // offense (other offset)
u32 unk18; // unk1C
struct unkPokeSubStruct_2C unk1C[4]; // unk2C
u8 fill3c[4];
/* 40 */ struct ItemSlot itemSlot; // heldItem
u32 unk44; // some struct
u32 unk48; // some struct (same type as 44)
u32 unk4C; // unk20
u8 unk50; // unk24
u8 fill51[3];
struct unkStruct_808E6F4 unk54;
u8 name[10]; // name (other offset)
};
struct unkStruct_203B45C
@@ -76,8 +109,8 @@ struct unkStruct_203B45C
struct EvolveStruct1
{
/* 0x34 */ u16 evolve_from;
/* 0x36 */ u16 evolve_type;
/* 0x34 */ s16 evolve_from;
/* 0x36 */ s16 evolve_type;
};
struct EvolveNeeds
@@ -131,48 +164,17 @@ struct gPokemon
};
struct unkStruct_808E6F4
{
s16 unk0;
u8 unk2;
};
struct EvolveStage
{
s16 speciesNum;
u8 unkHasNextStage;
};
struct unkStruct_808DE50
{
u16 unk0; // corresponds to unk0 inPokemonStruct
u8 unk2; // unk2
u8 unkHasNextStage; // unk3
struct unkPokeSubStruct_4 unk4; // unk4
u16 IQ; // IQ (other offset)
u16 unkA;
u16 unkC;
s16 speciesNum; // speciesNum (other offset)
u16 unk10; // pokeHP
u16 unk12; // pokeHP
struct Offense offense; // offense (other offset)
u32 unk18; // unk1C
struct unkPokeSubStruct_2C unk1C[4]; // unk2C
u8 fill3c[4];
/* 40 */ struct ItemSlot itemSlot; // heldItem
u32 unk44; // some struct
u32 unk48; // some struct (same type as 44)
u32 unk4C; // unk20
u8 unk50; // unk24
u8 fill51[3];
struct unkStruct_808E6F4 unk54;
u8 name[10]; // name (other offset)
};
// https://www.pokecommunity.com/showthread.php?t=407371
struct LevelData
{
// only size is known
u32 unk0[3];
s32 expRequired;
u8 gainHP;
u8 gainUnused;
u8 gainAtt;
u8 gainSPAtt;
u8 gainDef;
u8 gainSPDef;
u16 fillA;
};
struct unkStruct_808E218_arg
@@ -230,6 +232,9 @@ struct OpenedFile *GetDialogueSpriteDataPtr(s16 index);
s32 GetUnownIndex(s16 index);
void sub_808E6F4(struct unkStruct_808E6F4* a1);
s32 GetEvolutionSequence(struct PokemonStruct* pokemon, struct EvolveStage* a2);
void xxx_pokemonstruct_to_unk_808DE50(struct unkStruct_808DE50* r0, struct PokemonStruct *r1, s32 r2);
void xxx_pokemonstruct_to_pokemon2_808DE50(struct PokemonStruct2* r0, struct PokemonStruct *r1, s32 r2);
void SavePokemonStruct(struct unkStruct_8094924* a1, struct PokemonStruct* pokemon);
void RestorePokemonStruct(struct unkStruct_8094924*, struct PokemonStruct*);
#endif // GUARD_POKEMON_H

View File

@@ -19,7 +19,7 @@ s16 sub_8094828(u16 r0, u8 itemIndex)
}
}
void sub_809485C(struct unkStruct_8094924 *r0, u8 *r1, s32 size)
void xxx_init_struct_8094924_restore_809485C(struct unkStruct_8094924 *r0, u8 *r1, s32 size)
{
r0->unk0 = r1;
r0->unk8 = 0;
@@ -27,7 +27,7 @@ void sub_809485C(struct unkStruct_8094924 *r0, u8 *r1, s32 size)
r0->unk4 = &r1[size];
}
void sub_809486C(struct unkStruct_8094924 *r0, u8 *r1, s32 size)
void xxx_init_struct_8094924_save_809486C(struct unkStruct_8094924 *r0, u8 *r1, s32 size)
{
r0->unk0 = r1;
r0->unk8 = 0;
@@ -41,7 +41,7 @@ void nullsub_102(struct unkStruct_8094924 *r0)
}
void sub_809488C(struct unkStruct_8094924 *r0, u8 *r1, s32 size)
void SaveIntegerBits(struct unkStruct_8094924 *r0, void *r1, s32 size)
{
s32 r5;
u8 *r6;
@@ -115,7 +115,7 @@ void sub_80948E4(struct unkStruct_8094924 *r0, u8 *r1, s32 size)
"\tbx r0");
}
void sub_8094924(struct unkStruct_8094924 *r0, u8 *r1, s32 size)
void RestoreIntegerBits(struct unkStruct_8094924 *r0, void *r1, s32 size)
{
s32 r6;
u8 *r2;

View File

@@ -4,7 +4,7 @@
extern struct ExclusivePokemonData *gUnknown_203B498;
extern struct ExclusivePokemon gExclusivePokemon[NUM_EXCLUSIVE_POKEMON];
void sub_8094924(u32 *, u8 *, u32);
void RestoreIntegerBits(u32 *, void *, u32);
void sub_80980B4(s16);
void sub_8097FA8(u8);
void sub_8098170(s32);
@@ -13,7 +13,7 @@ void sub_8097FF8(void);
u8 sub_8098100(u8);
u8 sub_8098134(s16);
u8 sub_80981A0(s32);
void sub_809488C(u32 *, u8 *, s32);
void SaveIntegerBits(u32 *, void *, s32);
bool8 IsExclusivePokemonUnlocked(s16 pokeID)
{
@@ -59,21 +59,21 @@ void WriteExclusivePokemon(u32 *r0)
zero = 0;
sub_809488C(r0, (u8 *)gUnknown_203B498, 1);
SaveIntegerBits(r0, (u8 *)gUnknown_203B498, 1);
for(iVar2 = 0; iVar2 < 424; iVar2++)
{
stack_0 = sub_8098134(iVar2);
sub_809488C(r0, &stack_0, 1);
SaveIntegerBits(r0, &stack_0, 1);
}
for(iVar2 = 0; iVar2 < 64; iVar2++)
{
stack_1 = sub_8098100(iVar2);
sub_809488C(r0, &stack_1, 1);
SaveIntegerBits(r0, &stack_1, 1);
}
for(iVar2 = 0; iVar2 < 31; iVar2++)
{
stack_2 = sub_80981A0(iVar2);
sub_809488C(r0, &stack_2, 1);
SaveIntegerBits(r0, &stack_2, 1);
}
for(iVar2 = 0; iVar2 < NUM_EXCLUSIVE_POKEMON; iVar2++)
{
@@ -81,7 +81,7 @@ void WriteExclusivePokemon(u32 *r0)
puVar2 = &neg_1;
else
puVar2 = &zero;
sub_809488C(r0, puVar2, 1);
SaveIntegerBits(r0, puVar2, 1);
}
}
@@ -94,28 +94,28 @@ void ReadExclusivePokemon(u32 *r0)
u8 stack_3;
memset(gUnknown_203B498, 0, sizeof(struct ExclusivePokemonData));
sub_8094924(r0, (u8 *)gUnknown_203B498, 1);
RestoreIntegerBits(r0, gUnknown_203B498, 1);
for(iVar2 = 0; iVar2 < 424; iVar2++)
{
sub_8094924(r0, &stack_0, 1);
RestoreIntegerBits(r0, &stack_0, 1);
if(stack_0)
sub_80980B4(iVar2);
}
for(iVar2 = 0; iVar2 < 64; iVar2++)
{
sub_8094924(r0, &stack_1, 1);
RestoreIntegerBits(r0, &stack_1, 1);
if(stack_1)
sub_8097FA8(iVar2);
}
for(iVar2 = 0; iVar2 < 31; iVar2++)
{
sub_8094924(r0, &stack_2, 1);
RestoreIntegerBits(r0, &stack_2, 1);
if(stack_2)
sub_8098170(iVar2);
}
for(iVar2 = 0; iVar2 < NUM_EXCLUSIVE_POKEMON; iVar2++)
{
sub_8094924(r0, &stack_3, 1);
RestoreIntegerBits(r0, &stack_3, 1);
do; while(0); // do/while needed for matching - jiang

View File

@@ -10,14 +10,14 @@ u32 SaveFriendAreas(u8 *r0, u32 size)
u32 temp;
s32 counter;
sub_809486C(&unk, r0, size);
xxx_init_struct_8094924_save_809486C(&unk, r0, size);
for(counter = 0; counter < NUM_FRIEND_AREAS; counter++)
{
if(gFriendAreas[counter] != 0)
temp = -1;
else
temp = 0;
sub_809488C(&unk, (u8*)&temp, 1);
SaveIntegerBits(&unk, (u8*)&temp, 1);
}
nullsub_102(&unk);
return unk.unk8;
@@ -29,10 +29,10 @@ u32 ReadSavedFriendAreas(u8 *r0, s32 size)
u32 temp;
s32 counter;
sub_809485C(&unk, r0, size);
xxx_init_struct_8094924_restore_809485C(&unk, r0, size);
for(counter = 0; counter < NUM_FRIEND_AREAS; counter++)
{
sub_8094924(&unk, (u8*)&temp, 1);
RestoreIntegerBits(&unk, &temp, 1);
// It's setting whether we have the friend area or not
if(temp & 1)
gFriendAreas[counter] = 1;

View File

@@ -76,7 +76,7 @@ void WriteGameOptions(struct unkStruct_8094924 *param_1)
neg_1 = -1;
zero = 0;
sub_809488C(param_1, &gUnknown_203B46C->unk8, 2);
SaveIntegerBits(param_1, &gUnknown_203B46C->unk8, 2);
if(gUnknown_203B46C->unk9 != 0)
{
@@ -86,7 +86,7 @@ void WriteGameOptions(struct unkStruct_8094924 *param_1)
{
puVar2 = &zero;
}
sub_809488C(param_1, puVar2, 1);
SaveIntegerBits(param_1, puVar2, 1);
if(gUnknown_203B46C->unkA != 0)
{
@@ -96,7 +96,7 @@ void WriteGameOptions(struct unkStruct_8094924 *param_1)
{
puVar2 = &zero;
}
sub_809488C(param_1, puVar2, 1);
SaveIntegerBits(param_1, puVar2, 1);
if(gUnknown_203B46C->playerGender != 0)
{
@@ -106,7 +106,7 @@ void WriteGameOptions(struct unkStruct_8094924 *param_1)
{
puVar2 = &zero;
}
sub_809488C(param_1, puVar2, 1);
SaveIntegerBits(param_1, puVar2, 1);
if(gUnknown_203B46C->unk0 != 0)
{
@@ -116,7 +116,7 @@ void WriteGameOptions(struct unkStruct_8094924 *param_1)
{
puVar2 = &zero;
}
sub_809488C(param_1, puVar2, 1);
SaveIntegerBits(param_1, puVar2, 1);
if(gUnknown_203B46C->unk1 != 0)
{
@@ -126,7 +126,7 @@ void WriteGameOptions(struct unkStruct_8094924 *param_1)
{
puVar2 = &zero;
}
sub_809488C(param_1, puVar2, 1);
SaveIntegerBits(param_1, puVar2, 1);
if(gUnknown_203B46C->unk2 != 0)
{
@@ -136,7 +136,7 @@ void WriteGameOptions(struct unkStruct_8094924 *param_1)
{
puVar2 = &zero;
}
sub_809488C(param_1, puVar2, 1);
SaveIntegerBits(param_1, puVar2, 1);
if(gUnknown_203B46C->unk3 != 0)
{
@@ -146,43 +146,43 @@ void WriteGameOptions(struct unkStruct_8094924 *param_1)
{
puVar2 = &zero;
}
sub_809488C(param_1, puVar2, 1);
SaveIntegerBits(param_1, puVar2, 1);
sub_809488C(param_1, &gUnknown_203B46C->unk4, 3);
sub_809488C(param_1, &gUnknown_203B46C->unkC, 2);
SaveIntegerBits(param_1, &gUnknown_203B46C->unk4, 3);
SaveIntegerBits(param_1, &gUnknown_203B46C->unkC, 2);
}
void ReadGameOptions(struct unkStruct_8094924 *param_1)
{
u8 byteArray[4];
sub_8094924(param_1, byteArray, 2);
RestoreIntegerBits(param_1, byteArray, 2);
gUnknown_203B46C->unk8 = byteArray[0] & 3;
sub_8094924(param_1, byteArray, 1);
RestoreIntegerBits(param_1, byteArray, 1);
gUnknown_203B46C->unk9 = byteArray[0] & 1;
sub_8094924(param_1, byteArray, 1);
RestoreIntegerBits(param_1, byteArray, 1);
gUnknown_203B46C->unkA = byteArray[0] & 1;
sub_8094924(param_1, byteArray, 1);
RestoreIntegerBits(param_1, byteArray, 1);
gUnknown_203B46C->playerGender = byteArray[0] & 1;
sub_8094924(param_1, byteArray, 1);
RestoreIntegerBits(param_1, byteArray, 1);
gUnknown_203B46C->unk0 = byteArray[0] & 1;
sub_8094924(param_1, byteArray, 1);
RestoreIntegerBits(param_1, byteArray, 1);
gUnknown_203B46C->unk1 = byteArray[0] & 1;
sub_8094924(param_1, byteArray, 1);
RestoreIntegerBits(param_1, byteArray, 1);
gUnknown_203B46C->unk2 = byteArray[0] & 1;
sub_8094924(param_1, byteArray, 1);
RestoreIntegerBits(param_1, byteArray, 1);
gUnknown_203B46C->unk3 = byteArray[0] & 1;
sub_8094924(param_1, byteArray, 3);
RestoreIntegerBits(param_1, byteArray, 3);
gUnknown_203B46C->unk4 = byteArray[0] & 7;
sub_8094924(param_1, byteArray, 2);
RestoreIntegerBits(param_1, byteArray, 2);
gUnknown_203B46C->unkC = byteArray[0] & 3;
sub_8094C14();

View File

@@ -1160,78 +1160,78 @@ bool8 xxx_insert_unk250_8091C1C(u8 itemIndex) {
return TRUE;
}
s32 sub_8091C68(u8* unk0, u32 size)
s32 SaveTeamInventory(u8* unk0, u32 size)
{
struct unkStruct_8094924 unk;
s32 i;
sub_809486C(&unk, unk0, size);
xxx_init_struct_8094924_save_809486C(&unk, unk0, size);
for (i = 0; i < INVENTORY_SIZE; i++) {
sub_8091E28(&unk, (u8*)&gTeamInventory_203B460->teamItems[i]);
SaveItemSlot(&unk, &gTeamInventory_203B460->teamItems[i]);
}
for (i = 0; i < NUMBER_OF_ITEM_IDS; i++) {
sub_809488C(&unk, (u8*)&gTeamInventory_203B460->teamStorage[i], 10);
SaveIntegerBits(&unk, &gTeamInventory_203B460->teamStorage[i], 10);
}
for (i = 0; i < 8; i++) {
sub_8091DE0(&unk, (u8*)&gTeamInventory_203B460->unk230[i]);
SaveHeldItem(&unk, &gTeamInventory_203B460->unk230[i]);
}
for (i = 0; i < 4; i++) {
sub_8091DE0(&unk, (u8*)&gTeamInventory_203B460->unk250[i]);
SaveHeldItem(&unk, &gTeamInventory_203B460->unk250[i]);
}
sub_809488C(&unk, (u8*)&gTeamInventory_203B460->teamMoney, 24);
sub_809488C(&unk, (u8*)&gTeamInventory_203B460->teamSavings, 24);
SaveIntegerBits(&unk, &gTeamInventory_203B460->teamMoney, 24);
SaveIntegerBits(&unk, &gTeamInventory_203B460->teamSavings, 24);
nullsub_102(&unk);
return unk.unk8;
}
s32 sub_8091D14(u8 *unk0, u32 size)
s32 RestoreTeamInventory(u8 *unk0, u32 size)
{
struct unkStruct_8094924 unk;
s32 i;
sub_809485C(&unk, unk0, size);
xxx_init_struct_8094924_restore_809485C(&unk, unk0, size);
for (i = 0; i < 20; i++) {
sub_8091E00(&unk, (u8*)&gTeamInventory_203B460->teamItems[i]);
RestoreItemSlot(&unk, &gTeamInventory_203B460->teamItems[i]);
}
for (i = 0; i < 240; i++) {
sub_8094924(&unk, (u8*)&gTeamInventory_203B460->teamStorage[i], 10);
RestoreIntegerBits(&unk, &gTeamInventory_203B460->teamStorage[i], 10);
}
for (i = 0; i < 8; i++) {
sub_8091DC0(&unk, (u8*)&gTeamInventory_203B460->unk230[i]);
RestoreHeldItem(&unk, &gTeamInventory_203B460->unk230[i]);
}
for (i = 0; i < 4; i++) {
sub_8091DC0(&unk, (u8*)&gTeamInventory_203B460->unk250[i]);
RestoreHeldItem(&unk, &gTeamInventory_203B460->unk250[i]);
}
sub_8094924(&unk, (u8*)&gTeamInventory_203B460->teamMoney, 24);
sub_8094924(&unk, (u8*)&gTeamInventory_203B460->teamSavings, 24);
RestoreIntegerBits(&unk, &gTeamInventory_203B460->teamMoney, 24);
RestoreIntegerBits(&unk, &gTeamInventory_203B460->teamSavings, 24);
nullsub_102(&unk);
return unk.unk8;
}
void sub_8091DC0(struct unkStruct_8094924 *a1, u8 *a2)
void RestoreHeldItem(struct unkStruct_8094924 *a1, struct HeldItem *item)
{
sub_8094924(a1, a2, 8);
sub_8094924(a1, a2 + 1, 7);
RestoreIntegerBits(a1, &item->itemIndex, 8);
RestoreIntegerBits(a1, &item->numItems, 7);
}
void sub_8091DE0(struct unkStruct_8094924 *a1, u8 *a2)
void SaveHeldItem(struct unkStruct_8094924 *a1, struct HeldItem *item)
{
sub_809488C(a1, a2, 8);
sub_809488C(a1, a2 + 1, 7);
SaveIntegerBits(a1, &item->itemIndex, 8);
SaveIntegerBits(a1, &item->numItems, 7);
}
void sub_8091E00(struct unkStruct_8094924 *a1, u8 *a2)
void RestoreItemSlot(struct unkStruct_8094924 *a1, struct ItemSlot *slot)
{
sub_8094924(a1, a2, 8);
sub_8094924(a1, a2 + 1, 7);
sub_8094924(a1, a2 + 2, 8);
RestoreIntegerBits(a1, &slot->unk0, 8);
RestoreIntegerBits(a1, &slot->numItems, 7);
RestoreIntegerBits(a1, &slot->itemIndex, 8);
}
void sub_8091E28(struct unkStruct_8094924 *a1, u8 *a2)
void SaveItemSlot(struct unkStruct_8094924 *a1, struct ItemSlot *slot)
{
sub_809488C(a1, a2, 8);
sub_809488C(a1, a2 + 1, 7);
sub_809488C(a1, a2 + 2, 8);
SaveIntegerBits(a1, &slot->unk0, 8);
SaveIntegerBits(a1, &slot->numItems, 7);
SaveIntegerBits(a1, &slot->itemIndex, 8);
}
u32 sub_8091E50(u8 index)
@@ -1465,6 +1465,7 @@ s32 sub_8091E94(s32 a1, s32 a2, s32 a3)
"\tbx r1\n");
#endif
}
void ClearAllItems_8091FB4() {
s32 i;

View File

@@ -77,16 +77,16 @@ void DeconstructPlayTime(struct PlayTimeStruct *r0, u32 *outHours, u32 *outMinut
void WritePlayTime(struct unkStruct_8094924 *r0)
{
sub_809488C(r0, (&(gPlayTimeRef->frames)), 6);
sub_809488C(r0, (&(gPlayTimeRef->seconds)), 6);
sub_809488C(r0, (&(gPlayTimeRef->minutes)), 6);
sub_809488C(r0, (u8 *)(&(gPlayTimeRef->hours)), 14);
SaveIntegerBits(r0, &gPlayTimeRef->frames, 6);
SaveIntegerBits(r0, &gPlayTimeRef->seconds, 6);
SaveIntegerBits(r0, &gPlayTimeRef->minutes, 6);
SaveIntegerBits(r0, &gPlayTimeRef->hours, 14);
}
void ReadPlayTime(struct unkStruct_8094924 *r0)
{
sub_8094924(r0, (&(gPlayTimeRef->frames)), 6);
sub_8094924(r0, (&(gPlayTimeRef->seconds)), 6);
sub_8094924(r0, (&(gPlayTimeRef->minutes)), 6);
sub_8094924(r0, (u8*)(&(gPlayTimeRef->hours)), 14);
RestoreIntegerBits(r0, &gPlayTimeRef->frames, 6);
RestoreIntegerBits(r0, &gPlayTimeRef->seconds, 6);
RestoreIntegerBits(r0, &gPlayTimeRef->minutes, 6);
RestoreIntegerBits(r0, &gPlayTimeRef->hours, 14);
}

View File

@@ -45,3 +45,64 @@ void InitializeRecruitedPokemon(void)
gRecruitedPokemonRef->team[iVar3].unk0 = 0;
}
}
// void sub_808CE74(s32 _species, u8 a2, u8* a3)
// {
// struct PokemonStruct pokemon;
// u8 name_buffer[20];
// u8 friend_area;
// s32 i;
// register s16 species asm("r7") = (s16)_species;
// s32 cond = a2 << 24;
// pokemon.unk0 = 3;
// if (cond) {
// pokemon.unk2 = 1;
// pokemon.unk4.unk4 = 64;
// }
// else {
// pokemon.unk2 = 1;
// pokemon.unk4.unk4 = 65;
// }
// pokemon.unkHasNextStage = 1;
// pokemon.pokeHP = GetBaseHP(species);
// pokemon.offense.att[0] = GetPokemonAttSpatt(species, 0);
// pokemon.offense.att[1] = GetPokemonAttSpatt(species, 1);
// pokemon.offense.def[0] = GetPokemonDefSpdef(species, 0);
// pokemon.offense.def[1] = GetPokemonDefSpdef(species, 1);
// pokemon.IQ = 1;
// pokemon.unkC[0].unk0 = 0;
// pokemon.unkC[1].unk0 = 0;
// sub_808EC94((u8*)&pokemon.unk20, 0);
// pokemon.speciesNum = species;
// pokemon.heldItem.itemIndex = 0;
// pokemon.heldItem.numItems = 0;
// pokemon.unk1C = 0;
// pokemon.unk24 = 0;
// pokemon.unk4.unk5 = 0;
// sub_808E490(pokemon.unk2C, species);
// // mostly incorrect below this:
// if (!a3) {
// CopySpeciesNametoBuffer(name_buffer, species);
// BoundedCopyStringtoBuffer(pokemon.name, name_buffer, 10);
// }
// else {
// s32 j;
// for (j = 0; j < 10; j++) {
// pokemon.name[j] = a3[j];
// }
// }
// friend_area = gMonsterParameters[species].friend_area;
// for (i = 0; i < 413; i++) {
// if (!((u8)gRecruitedPokemonRef->pokemon[i].unk0 & 1)) {
// u8 species_friend_area = sub_80923D4(i);
// if (species_friend_area == friend_area) {
// gRecruitedPokemonRef->pokemon[i] = pokemon;
// gFriendAreas[species_friend_area] = 1;
// sub_80980B4(species);
// break;
// }
// }
// }
// }

View File

@@ -48,6 +48,20 @@ extern bool8 sub_808ECD0(u8 *, u32);
extern void sub_808EC30(u8 *, u32);
extern void AddSprite(u16 *, u32, u32, u32);
extern void xxx_save_poke_sub_4_80902F4(struct unkStruct_8094924*, struct unkPokeSubStruct_4*);
extern void xxx_save_poke_sub_c_808F41C(struct unkStruct_8094924*, struct unkPokeSubStruct_C*);
extern void xxx_save_poke_sub_2c_8094108(struct unkStruct_8094924*, struct unkPokeSubStruct_2C*);
void xxx_restore_poke_sub_4_8090314(struct unkStruct_8094924*, struct unkPokeSubStruct_4*);
void xxx_restore_poke_sub_c_808F410(struct unkStruct_8094924*, struct unkPokeSubStruct_C*);
void xxx_restore_poke_sub_2c_8094128(struct unkStruct_8094924*, struct unkPokeSubStruct_2C*);
extern void sub_8094184(struct unkStruct_8094924*, void*);
extern void sub_809449C(struct unkStruct_8094924*, void*);
extern void sub_808F448(struct unkStruct_8094924*, struct unkStruct_808E6F4*);
extern void sub_80941FC(struct unkStruct_8094924*, void*);
extern void sub_809447C(struct unkStruct_8094924*, void*);
extern void sub_808F428(struct unkStruct_8094924*, struct unkStruct_808E6F4*);
bool8 sub_808E668(s16 a1, s16* a2, s16* a3)
{
@@ -94,7 +108,7 @@ bool8 HasRecruitedMon(s16 species_) {
s32 i = 0;
struct PokemonStruct *pokemon = gRecruitedPokemonRef->pokemon;
for (i = 0; i < 413; i++) {
for (i = 0; i < NUM_SPECIES; i++) {
if (((u8)pokemon->unk0 & 1)) {
if(pokemon->speciesNum == species)
return TRUE;
@@ -641,3 +655,260 @@ void sub_808ED00() {
}
}
s32 SaveRecruitedPokemon(u8 *a1, s32 a2)
{
u16 buffer[6];
struct unkStruct_8094924 backup;
u8 data_u8;
s16 data_s16;
s32 count;
s32 i;
xxx_init_struct_8094924_save_809486C(&backup, a1, a2);
for (i = 0; i < 6; i++) {
buffer[i] = -1;
}
data_s16 = 1;
data_s16 = -data_s16;
count = 0;
for (i = 0; i < NUM_SPECIES; i++) {
#ifdef NONMATCHING
struct PokemonStruct* pokemon = &gRecruitedPokemonRef->pokemon[i];
#else
struct PokemonStruct* pokemon;
register struct unkStruct_203B45C** recruited asm("r2") = &gRecruitedPokemonRef;
pokemon = &(*recruited)->pokemon[i];
#endif
if (pokemon->unk0 & 1) {
if (pokemon->unk0 & 2) {
buffer[count++] = i;
}
if (pokemon->unk2) {
data_s16 = i;
}
}
else {
pokemon->unkHasNextStage = 0;
}
SavePokemonStruct(&backup, pokemon);
}
for (i = 0; i < 4; i++) {
if ((u8)i[gRecruitedPokemonRef->team].unk0 & 1) {
data_u8 = 0xff;
}
else {
data_u8 = 0;
}
SaveIntegerBits(&backup, &data_u8, 1);
SavePokemonStruct(&backup, &gRecruitedPokemonRef->team[i]);
}
for (i = 0; i < 6; i++) {
SaveIntegerBits(&backup, (u8*)&buffer[i], 16);
}
SaveIntegerBits(&backup, (u8*)&data_s16, 16);
nullsub_102(&backup);
return backup.unk8;
}
s32 RestoreRecruitedPokemon(u8 *a1, s32 a2)
{
struct unkStruct_8094924 backup;
u8 data_u8; // same as saverecruitedpokemon
s16 data_s16; // same as saverecruitedpokemon
s32 i;
xxx_init_struct_8094924_restore_809485C(&backup, a1, a2);
for (i = 0; i < NUM_SPECIES; i++) {
RestorePokemonStruct(&backup, &gRecruitedPokemonRef->pokemon[i]);
}
for (i = 0; i < 4; i++) {
RestoreIntegerBits(&backup, &data_u8, 1);
RestorePokemonStruct(&backup, &gRecruitedPokemonRef->team[i]);
if (data_u8 & 1) {
gRecruitedPokemonRef->team[i].unk0 = 3;
}
else {
gRecruitedPokemonRef->team[i].unk0 = 0;
}
}
for (i = 0; i < 6; i++) {
RestoreIntegerBits(&backup, &data_s16, 16);
if ((u16)data_s16 < NUM_SPECIES) {
gRecruitedPokemonRef->pokemon[data_s16].unk0 |= 2;
}
}
RestoreIntegerBits(&backup, &data_s16, 16);
if ((u16)data_s16 < NUM_SPECIES) {
gRecruitedPokemonRef->pokemon[data_s16].unk2 = 1;
}
nullsub_102(&backup);
return backup.unk8;
}
void SavePokemonStruct(struct unkStruct_8094924* a1, struct PokemonStruct* pokemon)
{
SaveIntegerBits(a1, &pokemon->unkHasNextStage, 7);
SaveIntegerBits(a1, &pokemon->speciesNum, 9);
xxx_save_poke_sub_4_80902F4(a1, &pokemon->unk4);
xxx_save_poke_sub_c_808F41C(a1, &pokemon->unkC[0]);
xxx_save_poke_sub_c_808F41C(a1, &pokemon->unkC[1]);
SaveIntegerBits(a1, &pokemon->IQ, 10);
SaveIntegerBits(a1, &pokemon->pokeHP, 10);
SaveIntegerBits(a1, &pokemon->offense.att[0], 8);
SaveIntegerBits(a1, &pokemon->offense.att[1], 8);
SaveIntegerBits(a1, &pokemon->offense.def[0], 8);
SaveIntegerBits(a1, &pokemon->offense.def[1], 8);
SaveIntegerBits(a1, &pokemon->unk1C, 24);
SaveIntegerBits(a1, &pokemon->unk20, 24);
SaveIntegerBits(a1, &pokemon->unk24, 4);
SaveHeldItem(a1, &pokemon->heldItem);
xxx_save_poke_sub_2c_8094108(a1, pokemon->unk2C);
SaveIntegerBits(a1, pokemon->name, 80);
}
void RestorePokemonStruct(struct unkStruct_8094924* a1, struct PokemonStruct* pokemon)
{
memset(pokemon, 0, sizeof(struct PokemonStruct));
pokemon->unk0 = 0;
pokemon->unk2 = 0;
RestoreIntegerBits(a1, &pokemon->unkHasNextStage, 7);
if (pokemon->unkHasNextStage) {
pokemon->unk0 |= 1;
}
RestoreIntegerBits(a1, &pokemon->speciesNum, 9);
xxx_restore_poke_sub_4_8090314(a1, &pokemon->unk4);
xxx_restore_poke_sub_c_808F410(a1, &pokemon->unkC[0]);
xxx_restore_poke_sub_c_808F410(a1, &pokemon->unkC[1]);
RestoreIntegerBits(a1, &pokemon->IQ, 10);
RestoreIntegerBits(a1, &pokemon->pokeHP, 10);
RestoreIntegerBits(a1, &pokemon->offense.att[0], 8);
RestoreIntegerBits(a1, &pokemon->offense.att[1], 8);
RestoreIntegerBits(a1, &pokemon->offense.def[0], 8);
RestoreIntegerBits(a1, &pokemon->offense.def[1], 8);
RestoreIntegerBits(a1, &pokemon->unk1C, 24);
RestoreIntegerBits(a1, &pokemon->unk20, 24);
RestoreIntegerBits(a1, &pokemon->unk24, 4);
RestoreHeldItem(a1, &pokemon->heldItem);
xxx_restore_poke_sub_2c_8094128(a1, pokemon->unk2C);
RestoreIntegerBits(a1, pokemon->name, 80);
}
s32 SavePokemonStruct2(u8* a1, s32 size)
{
struct unkStruct_8094924 backup;
s32 i;
u8 data_u8_neg1;
u8 data_u8_zero;
xxx_init_struct_8094924_save_809486C(&backup, a1, size);
data_u8_neg1 = -1;
data_u8_zero = 0;
for (i = 0; i < 4; i++) {
struct PokemonStruct2* pokemon2 = &gRecruitedPokemonRef->pokemon2[i];
SaveIntegerBits(&backup, &pokemon2->unk0, 2);
SaveIntegerBits(&backup, pokemon2->unk2 ? &data_u8_neg1 : &data_u8_zero, 1);
SaveIntegerBits(&backup, &pokemon2->unkHasNextStage, 7);
xxx_save_poke_sub_4_80902F4(&backup, &pokemon2->unk4);
SaveIntegerBits(&backup, &pokemon2->IQ, 10);
SaveIntegerBits(&backup, &pokemon2->unkA, 16);
SaveIntegerBits(&backup, &pokemon2->unkC, 16);
SaveIntegerBits(&backup, &pokemon2->speciesNum, 9);
SaveIntegerBits(&backup, &pokemon2->unk10, 10);
SaveIntegerBits(&backup, &pokemon2->unk12, 10);
SaveIntegerBits(&backup, &pokemon2->offense.att[0], 8);
SaveIntegerBits(&backup, &pokemon2->offense.att[1], 8);
SaveIntegerBits(&backup, &pokemon2->offense.def[0], 8);
SaveIntegerBits(&backup, &pokemon2->offense.def[1], 8);
SaveIntegerBits(&backup, &pokemon2->unk18, 24);
sub_8094184(&backup, &pokemon2->unk1C);
SaveItemSlot(&backup, &pokemon2->itemSlot);
sub_809449C(&backup, &pokemon2->unk44);
sub_809449C(&backup, &pokemon2->unk48);
SaveIntegerBits(&backup, &pokemon2->unk4C, 24);
SaveIntegerBits(&backup, &pokemon2->unk50, 4);
sub_808F448(&backup, &pokemon2->unk54);
SaveIntegerBits(&backup, &pokemon2->name, 80);
}
nullsub_102(&backup);
return backup.unk8;
}
s32 RestorePokemonStruct2(u8* a1, s32 size)
{
struct unkStruct_8094924 backup;
s32 i;
xxx_init_struct_8094924_restore_809485C(&backup, a1, size);
for (i = 0; i < 4; i++) {
struct PokemonStruct2* pokemon2 = &gRecruitedPokemonRef->pokemon2[i];
u8 unk2;
memset(pokemon2, 0, sizeof(struct PokemonStruct2));
RestoreIntegerBits(&backup, &pokemon2->unk0, 2);
RestoreIntegerBits(&backup, &unk2, 1);
if (unk2 & 1) {
pokemon2->unk2 = TRUE;
}
else {
pokemon2->unk2 = FALSE;
}
RestoreIntegerBits(&backup, &pokemon2->unkHasNextStage, 7);
xxx_restore_poke_sub_4_8090314(&backup, &pokemon2->unk4);
RestoreIntegerBits(&backup, &pokemon2->IQ, 10);
RestoreIntegerBits(&backup, &pokemon2->unkA, 16);
RestoreIntegerBits(&backup, &pokemon2->unkC, 16);
RestoreIntegerBits(&backup, &pokemon2->speciesNum, 9);
RestoreIntegerBits(&backup, &pokemon2->unk10, 10);
RestoreIntegerBits(&backup, &pokemon2->unk12, 10);
RestoreIntegerBits(&backup, &pokemon2->offense.att[0], 8);
RestoreIntegerBits(&backup, &pokemon2->offense.att[1], 8);
RestoreIntegerBits(&backup, &pokemon2->offense.def[0], 8);
RestoreIntegerBits(&backup, &pokemon2->offense.def[1], 8);
RestoreIntegerBits(&backup, &pokemon2->unk18, 24);
sub_80941FC(&backup, &pokemon2->unk1C);
RestoreItemSlot(&backup, &pokemon2->itemSlot);
sub_809447C(&backup, &pokemon2->unk44);
sub_809447C(&backup, &pokemon2->unk48);
RestoreIntegerBits(&backup, &pokemon2->unk4C, 24);
RestoreIntegerBits(&backup, &pokemon2->unk50, 4);
sub_808F428(&backup, &pokemon2->unk54);
RestoreIntegerBits(&backup, &pokemon2->name, 80);
}
nullsub_102(&backup);
return backup.unk8;
}
void xxx_restore_poke_sub_c_808F410(struct unkStruct_8094924* a1, struct unkPokeSubStruct_C* unkC)
{
RestoreIntegerBits(a1, &unkC->unk0, 7);
}
void xxx_save_poke_sub_c_808F41C(struct unkStruct_8094924* a1, struct unkPokeSubStruct_C* unkC)
{
SaveIntegerBits(a1, &unkC->unk0, 7);
}
void sub_808F428(struct unkStruct_8094924* a1, struct unkStruct_808E6F4* a2)
{
RestoreIntegerBits(a1, &a2->unk0, 10);
RestoreIntegerBits(a1, &a2->unk2, 5);
}
void sub_808F448(struct unkStruct_8094924* a1, struct unkStruct_808E6F4* a2)
{
SaveIntegerBits(a1, &a2->unk0, 10);
SaveIntegerBits(a1, &a2->unk2, 5);
}

View File

@@ -2,6 +2,7 @@
#include "pokemon.h"
#include "item.h"
#include "file_system.h"
#include "subStruct_203B240.h"
extern struct gPokemon *gMonsterParameters;
extern const char gUnknown_8107600[];
@@ -16,6 +17,7 @@ extern s16 gUnknown_810ACB8; // 0x14d
extern s16 gUnknown_810ACBA; // 0x14d
extern s16 gUnknown_810ACBC; // 0x14d
extern s16 gUnknown_810ACBE; // 0x14d
extern char* gFormattedStatusNames[];
// wram data:
extern u16 gLevelCurrentPokeId;
@@ -30,10 +32,12 @@ extern u32 ReturnIntFromChar(u8 r0);
extern void CopyStringtoBuffer(char *r0, char *r1);
extern void sub_8093F50(void*, void*);
extern void sub_80943A0(void*, s32);
extern void xxx_unk_to_pokemonstruct_808DF44(struct PokemonStruct*, struct unkStruct_808DE50*);
extern void xxx_pokemon2_to_pokemonstruct_808DF44(struct PokemonStruct*, struct PokemonStruct2*);
extern u8* sub_8092B18(s16);
extern u8* sub_808E07C(u8* a1, u16* a2);
extern u8* sub_8092B54(s32);
extern void sub_8092AD4(struct unkPokeSubStruct_2C*, u16);
extern u32 sub_8097DF0(char *, struct subStruct_203B240 **);
struct unkStruct_8107654 {
s16 unk0;
@@ -48,6 +52,103 @@ extern struct FileArchive gMonsterFileArchive;
extern const char gUnknown_8107684[];
extern struct unkStruct_203B45C *gRecruitedPokemonRef;
bool8 sub_808D6E8()
{
s32 i;
s32 count = 0;
s32 size_count = 0;
for (i = 0; i < NUM_SPECIES; i++) {
struct PokemonStruct* pokemon = &gRecruitedPokemonRef->pokemon[i];
if ((1 & pokemon->unk0) && ((pokemon->unk0 >> 1) % 2)) {
size_count += GetPokemonSize(pokemon->speciesNum);
count++;
}
}
if ((size_count < 6) && (count < 4)) {
return 1;
}
return 0;
}
// this one is surprisingly frustrating
NAKED
bool8 sub_808D750(s16 index_) {
asm_unified(
"\tpush {r4-r7,lr}\n"
"\tmov r7, r9\n"
"\tmov r6, r8\n"
"\tpush {r6,r7}\n"
"\tlsls r0, 16\n"
"\tasrs r0, 16\n"
"\tmov r8, r0\n"
"\tmovs r6, 0\n"
"\tmovs r5, 0\n"
"\tmovs r4, 0\n"
"\tldr r0, _0808D7C8\n"
"\tmov r9, r0\n"
"\tmovs r7, 0x1\n"
"_0808D76A:\n"
"\tmovs r0, 0x58\n"
"\tadds r1, r4, 0\n"
"\tmuls r1, r0\n"
"\tmov r2, r9\n"
"\tldr r0, [r2]\n"
"\tadds r1, r0, r1\n"
"\tldrh r2, [r1]\n"
"\tadds r0, r7, 0\n"
"\tands r0, r2\n"
"\tcmp r0, 0\n"
"\tbeq _0808D798\n"
"\tlsrs r0, r2, 1\n"
"\tands r0, r7\n"
"\tcmp r0, 0\n"
"\tbeq _0808D798\n"
"\tmovs r2, 0x8\n"
"\tldrsh r0, [r1, r2]\n"
"\tbl GetPokemonSize\n"
"\tlsls r0, 24\n"
"\tlsrs r0, 24\n"
"\tadds r5, r0\n"
"\tadds r6, 0x1\n"
"_0808D798:\n"
"\tadds r4, 0x1\n"
"\tmovs r0, 0xCE\n"
"\tlsls r0, 1\n"
"\tcmp r4, r0\n"
"\tble _0808D76A\n"
"\tcmp r6, 0x3\n"
"\tbgt _0808D7CC\n"
"\tldr r2, _0808D7C8\n"
"\tmovs r0, 0x58\n"
"\tmov r1, r8\n"
"\tmuls r1, r0\n"
"\tldr r0, [r2]\n"
"\tadds r1, r0, r1\n"
"\tmovs r2, 0x8\n"
"\tldrsh r0, [r1, r2]\n"
"\tbl GetPokemonSize\n"
"\tlsls r0, 24\n"
"\tlsrs r0, 24\n"
"\tadds r5, r0\n"
"\tcmp r5, 0x6\n"
"\tbgt _0808D7CC\n"
"\tmovs r0, 0x1\n"
"\tb _0808D7CE\n"
"\t.align 2, 0\n"
"_0808D7C8: .4byte gRecruitedPokemonRef\n"
"_0808D7CC:\n"
"\tmovs r0, 0\n"
"_0808D7CE:\n"
"\tpop {r3,r4}\n"
"\tmov r8, r3\n"
"\tmov r9, r4\n"
"\tpop {r4-r7}\n"
"\tpop {r1}\n"
"\tbx r1\n"
);
}
// bool8 sub_808D750(s16 index_) {
// s32 i;
// register s32 index asm("r8") = index_;
@@ -410,12 +511,12 @@ bool8 IsPokemonDialogueSpriteAvail(s16 index, s32 r1)
return (gMonsterParameters[index].dialogue_sprites >> r1) & 1;
}
void xxx_pokemonstruct_index_to_unk_808DE30(void* r0, u32 r1)
void xxx_pokemonstruct_index_to_pokemon2_808DE30(void* r0, u32 r1)
{
xxx_pokemonstruct_to_unk_808DE50(r0, &gRecruitedPokemonRef->pokemon[r1], r1);
xxx_pokemonstruct_to_pokemon2_808DE50(r0, &gRecruitedPokemonRef->pokemon[r1], r1);
}
void xxx_pokemonstruct_to_unk_808DE50(struct unkStruct_808DE50 * a1, struct PokemonStruct *pokemon, s32 a3)
void xxx_pokemonstruct_to_pokemon2_808DE50(struct PokemonStruct2 * a1, struct PokemonStruct *pokemon, s32 a3)
{
s32 i;
struct HeldItem* held;
@@ -465,15 +566,15 @@ void xxx_pokemonstruct_to_unk_808DE50(struct unkStruct_808DE50 * a1, struct Poke
a1->unk48 = somestruct2_80943A0;
}
void xxx_unk_to_pokemonstruct_index_808DF2C(s32 a1, struct unkStruct_808DE50* a2)
void xxx_pokemon2_to_pokemonstruct_index_808DF2C(s32 a1, struct PokemonStruct2* a2)
{
xxx_unk_to_pokemonstruct_808DF44(&a1[gRecruitedPokemonRef->pokemon], a2);
xxx_pokemon2_to_pokemonstruct_808DF44(&a1[gRecruitedPokemonRef->pokemon], a2);
}
extern void sub_8093FA8(struct unkPokeSubStruct_2C*, struct unkPokeSubStruct_2C*);
void xxx_unk_to_pokemonstruct_808DF44(struct PokemonStruct* pokemon, struct unkStruct_808DE50* a2)
void xxx_pokemon2_to_pokemonstruct_808DF44(struct PokemonStruct* pokemon, struct PokemonStruct2* a2)
{
s32 i;
@@ -507,7 +608,7 @@ void xxx_unk_to_pokemonstruct_808DF44(struct PokemonStruct* pokemon, struct unkS
}
}
void sub_808DFDC(s32 a1, struct unkStruct_808DE50* a2)
void sub_808DFDC(s32 a1, struct PokemonStruct2* a2)
{
// transfer item from unk to pokemon at index
struct PokemonStruct* pokemon = &gRecruitedPokemonRef->pokemon[a1];
@@ -770,4 +871,71 @@ s32 GetEvolutionSequence(struct PokemonStruct* pokemon, struct EvolveStage* a2)
}
return count;
#endif
}
}
s32 sub_808E400(s32 _species, s16* _a2, s32 _a3, s32 _a4)
{
// this is horrible
s32 i;
register s32 species asm("r9") = (s16)_species;
s32 a3 = (u8)_a3;
s32 a4 = (u8)_a4;
s32 count = 0;
register s16* a2 asm("r6");
i = 1;
a2 = _a2;
for (i = 1; i <= SPECIES_RAYQUAZA_CUTSCENE; i++) {
register s32 current asm("r8") = (s16)i;
if (species != GetPokemonEvolveFrom(i)) {
continue;
}
if (!a3 && (GetPokemonSize(species) != GetPokemonSize(i))) {
continue;
}
if (!a4 && ((s16)i == SPECIES_SHEDINJA)) {
continue;
}
*a2++ = current;
count++;
}
return count;
}
void sub_808E490(struct unkPokeSubStruct_2C* a1, s16 species)
{
u16 buffer[0x10];
s32 i;
s32 count = sub_808E0AC(buffer, species, 1, 999);
if (count == 0) {
count = 1;
buffer[0] = 408;
}
i = 0;
if (i < count) {
while (i < count) {
sub_8092AD4(&a1[i], buffer[i]);
i++;
}
i = count;
}
while (i < 4) {
a1[i].unk0 = 0;
i++;
}
}
char* sub_808E4FC(s32 a1)
{
struct subStruct_203B240 *result[4];
sub_8097DF0(gFormattedStatusNames[a1], result);
return result[0]->unk0;
}
char* sub_808E51C(s32 a1)
{
struct subStruct_203B240 *result[4];
sub_8097DF0(gFormattedStatusNames[a1], result);
return result[0]->unk4;
}

View File

@@ -18,6 +18,7 @@ bool32 sub_8092040(u8 param_1)
{
s32 index;
// NUMBER_OF_ITEM_IDS == 0xf0
if (param_1 >= 0xF0)
return TRUE;
else {
@@ -138,9 +139,9 @@ u32 SaveRescueTeamInfo(u8 *param_1, u32 size)
neg1 = -1;
zero = 0;
sub_809486C(&auStack36, param_1, size);
sub_809488C(&auStack36, gRescueTeamInfoRef->teamName, 0x58);
sub_809488C(&auStack36, (u8 *)&gRescueTeamInfoRef->teamRankPts, 0x20);
xxx_init_struct_8094924_save_809486C(&auStack36, param_1, size);
SaveIntegerBits(&auStack36, gRescueTeamInfoRef->teamName, 0x58);
SaveIntegerBits(&auStack36, (u8 *)&gRescueTeamInfoRef->teamRankPts, 0x20);
gRescueTeamInfoRef->unk10 = sub_80023E4(0);
if (gRescueTeamInfoRef->unk10 != 0)
@@ -151,7 +152,7 @@ u32 SaveRescueTeamInfo(u8 *param_1, u32 size)
{
puVar2 = &zero;
}
sub_809488C(&auStack36,puVar2,1);
SaveIntegerBits(&auStack36,puVar2,1);
nullsub_102(&auStack36);
return auStack36.unk8;
}
@@ -161,10 +162,10 @@ u32 ReadRescueTeamInfo(u8 *param_1, u32 size)
struct unkStruct_8094924 auStack32;
u8 byteArray[4];
sub_809485C(&auStack32, param_1, size);
sub_8094924(&auStack32, gRescueTeamInfoRef->teamName, 0x58);
sub_8094924(&auStack32, (u8 *)&gRescueTeamInfoRef->teamRankPts, 0x20);
sub_8094924(&auStack32, byteArray, 1);
xxx_init_struct_8094924_restore_809485C(&auStack32, param_1, size);
RestoreIntegerBits(&auStack32, gRescueTeamInfoRef->teamName, 0x58);
RestoreIntegerBits(&auStack32, &gRescueTeamInfoRef->teamRankPts, 0x20);
RestoreIntegerBits(&auStack32, byteArray, 1);
gRescueTeamInfoRef->unk10 = byteArray[0] & 1;
nullsub_102(&auStack32);
return auStack32.unk8;

View File

@@ -152,11 +152,9 @@ extern void sub_8014114();
extern void sub_80141B4(const char *r0, u32 r1, u8 *r2, u16 r3);
extern u32 sub_80144A4(u32 *a);
extern u32 SaveRecruitedPokemon(u8 *, u32);
extern u32 ReadRecruitedPokemon(void* a, s32 b);
extern u32 sub_808F154(u8 *, u32);
extern u32 sub_808F2B0(void* a, s32 b);
extern u32 sub_8091C68(u8 *, u32);
extern u32 sub_8091D14(void* a, s32 b);
extern u32 RestoreRecruitedPokemon(void* a, s32 b);
extern u32 SavePokemonStruct2(u8 *, u32);
extern u32 RestorePokemonStruct2(void* a, s32 b);
extern u32 sub_80921C4(u8 *, u32);
extern u8 *sub_8095100(void);
extern u32 *sub_8095108(void);
@@ -365,17 +363,17 @@ u32 ReadSaveFromPak(u32 *a)
}
if (!r7)
{
r1 = ReadRecruitedPokemon(r4, 0x4650);
r1 = RestoreRecruitedPokemon(r4, 0x4650);
if (r1 != r5->savedRecruitedPokemon) {
r7 = 3;
}
r4 += 0x4650;
r1 = sub_808F2B0(r4, 0x258);
r1 = RestorePokemonStruct2(r4, 0x258);
if (r1 != r5->unk428) {
r7 = 3;
}
r4 += 0x258;
r1 = sub_8091D14(r4, 0x1D8);
r1 = RestoreTeamInventory(r4, 0x1D8);
if (r1 != r5->unk430) {
r7 = 3;
}
@@ -488,9 +486,9 @@ u32 WriteSavetoPak(s32 *param_1,u32 param_2)
iVar1->savedRecruitedPokemon = SaveRecruitedPokemon(array_ptr,0x4650);
array_ptr += 0x4650;
iVar1->unk428 = sub_808F154(array_ptr,0x258);
iVar1->unk428 = SavePokemonStruct2(array_ptr,0x258);
array_ptr += 0x258;
iVar1->unk430 = sub_8091C68(array_ptr,0x1D8);
iVar1->unk430 = SaveTeamInventory(array_ptr,0x1D8);
array_ptr += 0x1D8;
iVar1->savedRescueTeamInfo = SaveRescueTeamInfo(array_ptr,0x10);
array_ptr += 0x10;