diff options
author | Dennis <dhilhorst2000@gmail.com> | 2021-08-01 21:09:13 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-01 12:09:13 -0700 |
commit | 26e5708818765e2abaab29b6ffdfa8f01a5600b7 (patch) | |
tree | 28fe7891cad7a46da5e88f0293e2a9f855e14203 | |
parent | 645c45431b0e091234699c3706ff90d1654cfb57 (diff) |
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
-rw-r--r-- | asm/code_803D110.s | 16 | ||||
-rw-r--r-- | asm/code_8057824.s | 12 | ||||
-rw-r--r-- | asm/code_8090208.s | 20 | ||||
-rw-r--r-- | asm/code_8092334.s | 56 | ||||
-rw-r--r-- | asm/code_8095014.s | 144 | ||||
-rw-r--r-- | asm/code_80958E8.s | 76 | ||||
-rw-r--r-- | asm/code_8097670.s | 52 | ||||
-rw-r--r-- | asm/pokemon.s | 135 | ||||
-rw-r--r-- | asm/pokemon_2.s | 176 | ||||
-rw-r--r-- | asm/pokemon_3.s | 833 | ||||
-rw-r--r-- | include/code_8092334.h | 8 | ||||
-rw-r--r-- | include/item.h | 12 | ||||
-rw-r--r-- | include/pokemon.h | 97 | ||||
-rw-r--r-- | src/code_8092334.c | 8 | ||||
-rw-r--r-- | src/exclusive_pokemon_1.c | 24 | ||||
-rw-r--r-- | src/friend_area_1.c | 8 | ||||
-rw-r--r-- | src/game_options.c | 40 | ||||
-rw-r--r-- | src/items.c | 61 | ||||
-rw-r--r-- | src/play_time.c | 16 | ||||
-rw-r--r-- | src/pokemon.c | 61 | ||||
-rw-r--r-- | src/pokemon_3.c | 273 | ||||
-rw-r--r-- | src/pokemon_mid.c | 186 | ||||
-rw-r--r-- | src/rescue_team_info.c | 17 | ||||
-rw-r--r-- | src/save.c | 18 |
24 files changed, 858 insertions, 1491 deletions
diff --git a/asm/code_803D110.s b/asm/code_803D110.s index 6111ed1..1eb867c 100644 --- a/asm/code_803D110.s +++ b/asm/code_803D110.s @@ -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 diff --git a/asm/code_8057824.s b/asm/code_8057824.s index b715023..413eeb2 100644 --- a/asm/code_8057824.s +++ b/asm/code_8057824.s @@ -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 diff --git a/asm/code_8090208.s b/asm/code_8090208.s index 19e7efa..05fb931 100644 --- a/asm/code_8090208.s +++ b/asm/code_8090208.s @@ -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: diff --git a/asm/code_8092334.s b/asm/code_8092334.s index 2b93365..9b71d63 100644 --- a/asm/code_8092334.s +++ b/asm/code_8092334.s @@ -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 diff --git a/asm/code_8095014.s b/asm/code_8095014.s index 3c4419b..f6919cb 100644 --- a/asm/code_8095014.s +++ b/asm/code_8095014.s @@ -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} diff --git a/asm/code_80958E8.s b/asm/code_80958E8.s index 89a0109..9928fb0 100644 --- a/asm/code_80958E8.s +++ b/asm/code_80958E8.s @@ -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 diff --git a/asm/code_8097670.s b/asm/code_8097670.s index d84260c..0039819 100644 --- a/asm/code_8097670.s +++ b/asm/code_8097670.s @@ -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 diff --git a/asm/pokemon.s b/asm/pokemon.s index 5fc8e9e..d5c7f42 100644 --- a/asm/pokemon.s +++ b/asm/pokemon.s @@ -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 diff --git a/asm/pokemon_2.s b/asm/pokemon_2.s index cf8c39d..dec099a 100644 --- a/asm/pokemon_2.s +++ b/asm/pokemon_2.s @@ -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: diff --git a/asm/pokemon_3.s b/asm/pokemon_3.s index f0308d7..ccf5979 100644 --- a/asm/pokemon_3.s +++ b/asm/pokemon_3.s @@ -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: diff --git a/include/code_8092334.h b/include/code_8092334.h index 6f7fcae..0548659 100644 --- a/include/code_8092334.h +++ b/include/code_8092334.h @@ -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
\ No newline at end of file diff --git a/include/item.h b/include/item.h index 421eb89..84f9de2 100644 --- a/include/item.h +++ b/include/item.h @@ -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 diff --git a/include/pokemon.h b/include/pokemon.h index 9e3a667..874aa93 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -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 diff --git a/src/code_8092334.c b/src/code_8092334.c index d03f888..16d2424 100644 --- a/src/code_8092334.c +++ b/src/code_8092334.c @@ -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; diff --git a/src/exclusive_pokemon_1.c b/src/exclusive_pokemon_1.c index 37b4dfe..48b5ec5 100644 --- a/src/exclusive_pokemon_1.c +++ b/src/exclusive_pokemon_1.c @@ -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 diff --git a/src/friend_area_1.c b/src/friend_area_1.c index ff1da5d..c7dee3f 100644 --- a/src/friend_area_1.c +++ b/src/friend_area_1.c @@ -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; diff --git a/src/game_options.c b/src/game_options.c index c5a92df..cfb95b7 100644 --- a/src/game_options.c +++ b/src/game_options.c @@ -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(); diff --git a/src/items.c b/src/items.c index 337e622..3ced8fe 100644 --- a/src/items.c +++ b/src/items.c @@ -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; diff --git a/src/play_time.c b/src/play_time.c index 8b2e567..97a9754 100644 --- a/src/play_time.c +++ b/src/play_time.c @@ -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); } diff --git a/src/pokemon.c b/src/pokemon.c index a9ca120..1b9003b 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -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; +// } +// } +// } +// } diff --git a/src/pokemon_3.c b/src/pokemon_3.c index 72005ed..b4cb938 100644 --- a/src/pokemon_3.c +++ b/src/pokemon_3.c @@ -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); +}
\ No newline at end of file diff --git a/src/pokemon_mid.c b/src/pokemon_mid.c index 56d49fe..d4a3bee 100644 --- a/src/pokemon_mid.c +++ b/src/pokemon_mid.c @@ -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 -}
\ No newline at end of file +} + + +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; +} diff --git a/src/rescue_team_info.c b/src/rescue_team_info.c index 61c0184..ccae32c 100644 --- a/src/rescue_team_info.c +++ b/src/rescue_team_info.c @@ -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; @@ -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; |