diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2018-01-09 22:08:11 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2018-01-09 22:08:11 -0500 |
commit | 7cdd2b2a42a96135949e399d1fa3a00c5f56ae67 (patch) | |
tree | 26b1cf46bcf39aaa50e38bb941d57f2118ed1fa7 | |
parent | c4244f5bec27741c18a12611f245df5572b11d8b (diff) |
through sub_8098E68
-rw-r--r-- | asm/pokemon_storage_system.s | 324 | ||||
-rw-r--r-- | include/pokemon_storage_system.h | 10 | ||||
-rw-r--r-- | src/pokemon/pokemon_storage_system_2.c | 4 | ||||
-rw-r--r-- | src/pokemon/pokemon_storage_system_3.c | 89 |
4 files changed, 99 insertions, 328 deletions
diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 7e6f34d53..90b8caa5c 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,316 +5,6 @@ .text - thumb_func_start sub_8098C48 -sub_8098C48: @ 8098C48 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x8 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 5 - ldr r1, _08098CCC @ =gPokemonStorage + 0x4 - adds r6, r0, r1 - movs r0, 0 - mov r8, r0 - movs r7, 0 -_08098C6A: - movs r5, 0 - adds r1, r7, 0x1 - mov r9, r1 -_08098C70: - adds r0, r6, 0 - movs r1, 0x41 - bl GetBoxMonData - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0 - beq _08098CD8 - adds r0, r6, 0 - movs r1, 0 - bl GetBoxMonData - adds r1, r0, 0 - lsls r2, r5, 1 - adds r2, r5 - lsls r2, 19 - movs r3, 0xC8 - lsls r3, 15 - adds r2, r3 - asrs r2, 16 - lsls r3, r7, 1 - adds r3, r7 - lsls r3, 19 - movs r0, 0xB0 - lsls r0, 14 - adds r3, r0 - movs r0, 0x2 - str r0, [sp] - movs r0, 0x12 - subs r0, r5 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x4] - adds r0, r4, 0 - asrs r3, 16 - bl sub_8099AFC - ldr r1, _08098CD0 @ =gPokemonStorageSystemPtr - ldr r1, [r1] - mov r3, r8 - lsls r2, r3, 2 - ldr r3, _08098CD4 @ =0x00001050 - adds r1, r3 - adds r1, r2 - str r0, [r1] - b _08098CE8 - .align 2, 0 -_08098CCC: .4byte gPokemonStorage + 0x4 -_08098CD0: .4byte gPokemonStorageSystemPtr -_08098CD4: .4byte 0x00001050 -_08098CD8: - ldr r0, _08098D18 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - mov r2, r8 - lsls r1, r2, 2 - ldr r3, _08098D1C @ =0x00001050 - adds r0, r3 - adds r0, r1 - str r4, [r0] -_08098CE8: - adds r6, 0x50 - mov r0, r8 - adds r0, 0x1 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x5 - bls _08098C70 - mov r1, r9 - lsls r0, r1, 16 - lsrs r7, r0, 16 - cmp r7, 0x4 - bls _08098C6A - add sp, 0x8 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08098D18: .4byte gPokemonStorageSystemPtr -_08098D1C: .4byte 0x00001050 - thumb_func_end sub_8098C48 - - thumb_func_start sub_8098D20 -sub_8098D20: @ 8098D20 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x8 - lsls r0, 24 - lsrs r4, r0, 24 - bl get_preferred_box - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 2 - adds r1, r0 - lsls r2, r1, 4 - subs r2, r1 - lsls r2, 5 - lsls r0, r4, 2 - mov r9, r0 - adds r0, r4 - lsls r0, 4 - ldr r1, _08098DD4 @ =gPokemonStorage + 0x4 - adds r0, r1 - adds r7, r2, r0 - adds r0, r7, 0 - movs r1, 0x41 - bl GetBoxMonData - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - cmp r0, 0 - beq _08098DC4 - adds r0, r4, 0 - movs r1, 0x6 - bl __umodsi3 - adds r6, r0, 0 - lsls r0, r6, 24 - lsrs r0, 24 - lsls r5, r0, 1 - adds r5, r0 - lsls r5, 19 - movs r1, 0xC8 - lsls r1, 15 - adds r5, r1 - lsrs r5, 16 - adds r0, r4, 0 - movs r1, 0x6 - bl __udivsi3 - lsls r0, 24 - lsrs r0, 24 - lsls r4, r0, 1 - adds r4, r0 - lsls r4, 19 - movs r2, 0xB0 - lsls r2, 14 - adds r4, r2 - lsrs r4, 16 - adds r0, r7, 0 - movs r1, 0 - bl GetBoxMonData - adds r1, r0, 0 - movs r0, 0x2 - str r0, [sp] - movs r0, 0x12 - subs r0, r6 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x4] - mov r0, r8 - adds r2, r5, 0 - adds r3, r4, 0 - bl sub_8099AFC - ldr r1, _08098DD8 @ =gPokemonStorageSystemPtr - ldr r1, [r1] - ldr r2, _08098DDC @ =0x00001050 - adds r1, r2 - add r1, r9 - str r0, [r1] -_08098DC4: - add sp, 0x8 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08098DD4: .4byte gPokemonStorage + 0x4 -_08098DD8: .4byte gPokemonStorageSystemPtr -_08098DDC: .4byte 0x00001050 - thumb_func_end sub_8098D20 - - thumb_func_start sub_8098DE0 -sub_8098DE0: @ 8098DE0 - push {r4-r6,lr} - lsls r0, 16 - lsrs r4, r0, 16 - movs r2, 0 - ldr r0, _08098E18 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r1, _08098E1C @ =0x00001050 - adds r3, r0, r1 - movs r6, 0x1 - ldr r5, _08098E20 @ =sub_8098E68 -_08098DF4: - lsls r0, r2, 2 - adds r1, r3, r0 - ldr r0, [r1] - cmp r0, 0 - beq _08098E08 - strh r4, [r0, 0x32] - ldr r0, [r1] - strh r6, [r0, 0x36] - ldr r0, [r1] - str r5, [r0, 0x1C] -_08098E08: - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0x1D - bls _08098DF4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08098E18: .4byte gPokemonStorageSystemPtr -_08098E1C: .4byte 0x00001050 -_08098E20: .4byte sub_8098E68 - thumb_func_end sub_8098DE0 - - thumb_func_start sub_8098E24 -sub_8098E24: @ 8098E24 - push {lr} - adds r2, r0, 0 - ldrh r1, [r2, 0x30] - movs r3, 0x30 - ldrsh r0, [r2, r3] - cmp r0, 0 - beq _08098E40 - subs r0, r1, 0x1 - strh r0, [r2, 0x30] - ldrh r0, [r2, 0x32] - ldrh r1, [r2, 0x20] - adds r0, r1 - strh r0, [r2, 0x20] - b _08098E56 -_08098E40: - ldr r0, _08098E5C @ =gPokemonStorageSystemPtr - ldr r1, [r0] - ldr r3, _08098E60 @ =0x00001178 - adds r1, r3 - ldrh r0, [r1] - subs r0, 0x1 - strh r0, [r1] - ldrh r0, [r2, 0x34] - strh r0, [r2, 0x20] - ldr r0, _08098E64 @ =SpriteCallbackDummy - str r0, [r2, 0x1C] -_08098E56: - pop {r0} - bx r0 - .align 2, 0 -_08098E5C: .4byte gPokemonStorageSystemPtr -_08098E60: .4byte 0x00001178 -_08098E64: .4byte SpriteCallbackDummy - thumb_func_end sub_8098E24 - - thumb_func_start sub_8098E68 -sub_8098E68: @ 8098E68 - push {lr} - adds r2, r0, 0 - ldrh r1, [r2, 0x36] - movs r3, 0x36 - ldrsh r0, [r2, r3] - cmp r0, 0 - beq _08098E7C - subs r0, r1, 0x1 - strh r0, [r2, 0x36] - b _08098E98 -_08098E7C: - ldrh r0, [r2, 0x32] - ldrh r1, [r2, 0x20] - adds r0, r1 - strh r0, [r2, 0x20] - ldrh r1, [r2, 0x24] - adds r0, r1 - strh r0, [r2, 0x38] - subs r0, 0x45 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xB6 - bls _08098E98 - ldr r0, _08098E9C @ =SpriteCallbackDummy - str r0, [r2, 0x1C] -_08098E98: - pop {r0} - bx r0 - .align 2, 0 -_08098E9C: .4byte SpriteCallbackDummy - thumb_func_end sub_8098E68 - thumb_func_start sub_8098EA0 sub_8098EA0: @ 8098EA0 push {r4-r7,lr} @@ -443,7 +133,7 @@ _08098F42: adds r0, r5, 0 ldr r4, [sp, 0x1C] asrs r2, r4, 16 - bl sub_8099AFC + bl PSS_SpawnMonIconSprite ldr r2, [sp, 0x20] adds r1, r2, r7 str r0, [r1] @@ -772,7 +462,7 @@ sub_8099200: @ 8099200 adds r0, r5, 0 movs r2, 0x68 movs r3, 0x40 - bl sub_8099AFC + bl PSS_SpawnMonIconSprite ldr r1, _080992A4 @ =gPokemonStorageSystemPtr ldr r1, [r1] ldr r2, _080992A8 @ =0x00001038 @@ -811,7 +501,7 @@ _08099246: str r0, [sp, 0x4] adds r0, r5, 0 movs r2, 0x98 - bl sub_8099AFC + bl PSS_SpawnMonIconSprite ldr r1, _080992A4 @ =gPokemonStorageSystemPtr ldr r1, [r1] lsls r2, r6, 2 @@ -1957,8 +1647,8 @@ _08099AF6: bx r0 thumb_func_end sub_8099AAC - thumb_func_start sub_8099AFC -sub_8099AFC: @ 8099AFC + thumb_func_start PSS_SpawnMonIconSprite +PSS_SpawnMonIconSprite: @ 8099AFC push {r4-r7,lr} mov r7, r10 mov r6, r9 @@ -2065,7 +1755,7 @@ _08099BD0: pop {r4-r7} pop {r1} bx r1 - thumb_func_end sub_8099AFC + thumb_func_end PSS_SpawnMonIconSprite thumb_func_start sub_8099BE0 sub_8099BE0: @ 8099BE0 @@ -2114,7 +1804,7 @@ sub_8099BF8: @ 8099BF8 bl sub_809A23C bl sub_809A6DC adds r0, r4, 0 - bl sub_8098C48 + bl SpawnBoxIconSprites ldr r1, _08099C68 @ =REG_BG2CNT ldr r2, _08099C6C @ =0x00005a0a adds r0, r2, 0 diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index 7f16b5d4f..26c1b140d 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -96,12 +96,14 @@ struct PokemonStorageSystemData { s16 unk_0d60; u8 filler_0d62[0x2d2]; struct Sprite *unk_1034; - u32 unk_1038[6]; - u32 unk_1050[30]; + struct Sprite *unk_1038[6]; + struct Sprite *unk_1050[30]; u8 filler_10c8[8]; u16 unk_10d0[40]; u16 unk_1120[40]; - u8 filler_1170[0x78]; + u8 filler_1170[8]; + u16 unk_1178; + u8 filler_117a[0x6e]; u8 *unk_11e8; u32 unk_11ec; u16 unk_11f0; @@ -154,7 +156,7 @@ void sub_8096310(void); void sub_80961A8(void); void task_intro_29(u8 whichMenu); void ResetPokemonStorageSystem(void); -void sub_8098B48(void); +void ResetPSSMonIconSprites(void); void sub_8099200(u8 a0); void sub_8099310(void); bool8 sub_8099374(void); diff --git a/src/pokemon/pokemon_storage_system_2.c b/src/pokemon/pokemon_storage_system_2.c index 2947562d0..dbb1cf992 100644 --- a/src/pokemon/pokemon_storage_system_2.c +++ b/src/pokemon/pokemon_storage_system_2.c @@ -217,7 +217,7 @@ void sub_8096884(void) gMain.state++; break; case 4: - sub_8098B48(); + ResetPSSMonIconSprites(); sub_809AA24(); gMain.state++; break; @@ -280,7 +280,7 @@ void sub_80969A0(void) gMain.state++; break; case 4: - sub_8098B48(); + ResetPSSMonIconSprites(); sub_809AA98(); gMain.state++; break; diff --git a/src/pokemon/pokemon_storage_system_3.c b/src/pokemon/pokemon_storage_system_3.c index eff542756..e1ccd107f 100644 --- a/src/pokemon/pokemon_storage_system_3.c +++ b/src/pokemon/pokemon_storage_system_3.c @@ -1,6 +1,7 @@ // Includes #include "global.h" +#include "constants/species.h" #include "sprite.h" #include "pokemon_icon.h" #include "pokemon_storage_system.h" @@ -11,8 +12,9 @@ // Static ROM declarations +void sub_8098E68(struct Sprite *sprite); void sub_80999C4(struct Sprite *sprite); -struct Sprite *sub_8099AFC(u16 species, u32 personality, u16 a2, u16 a3, u8 a4, u8 a5); +struct Sprite *PSS_SpawnMonIconSprite(u16 species, u32 personality, s16 a2, s16 a3, u8 a4, u8 a5); // .rodata @@ -39,7 +41,7 @@ u8 get_preferred_box(void) return gPokemonStorage.currentBox; } -void sub_8098B48(void) +void ResetPSSMonIconSprites(void) { u16 i; @@ -49,9 +51,9 @@ void sub_8098B48(void) for (i = 0; i < 40; i++) gPokemonStorageSystemPtr->unk_1120[i] = 0; for (i = 0; i < 6; i++) - gPokemonStorageSystemPtr->unk_1038[i] = 0; + gPokemonStorageSystemPtr->unk_1038[i] = NULL; for (i = 0; i < 30; i++) - gPokemonStorageSystemPtr->unk_1050[i] = 0; + gPokemonStorageSystemPtr->unk_1050[i] = NULL; gPokemonStorageSystemPtr->unk_1034 = NULL; gPokemonStorageSystemPtr->unk_0d5c = 0; } @@ -59,6 +61,83 @@ void sub_8098B48(void) void sub_8098BF0(void) { u32 personality = GetMonData(&gPokemonStorageSystemPtr->unk_25b4, MON_DATA_PERSONALITY); - gPokemonStorageSystemPtr->unk_1034 = sub_8099AFC(GetMonData(&gPokemonStorageSystemPtr->unk_25b4, MON_DATA_SPECIES2), personality, 0, 0, 1, 7); + gPokemonStorageSystemPtr->unk_1034 = PSS_SpawnMonIconSprite(GetMonData(&gPokemonStorageSystemPtr->unk_25b4, MON_DATA_SPECIES2), personality, 0, 0, 1, 7); gPokemonStorageSystemPtr->unk_1034->callback = sub_80999C4; } + +void SpawnBoxIconSprites(u8 boxId) +{ + struct BoxPokemon *box = gPokemonStorage.boxes[boxId]; + u16 i; + u16 k = 0; + for (i = 0; i < 5; i++) + { + u16 j; + for (j = 0; j < 6; j++) + { + u16 species = GetBoxMonData(box, MON_DATA_SPECIES2); + if (species != SPECIES_NONE) + gPokemonStorageSystemPtr->unk_1050[k] = PSS_SpawnMonIconSprite(species, GetBoxMonData(box, MON_DATA_PERSONALITY), 24 * j + 0x64, 24 * i + 0x2c, 2, 18 - j); + else + gPokemonStorageSystemPtr->unk_1050[k] = NULL; + box++; + k++; + } + } +} + +void sub_8098D20(u8 monId) +{ + struct BoxPokemon *mon = gPokemonStorage.boxes[get_preferred_box()] + monId; + u16 species = GetBoxMonData(mon, MON_DATA_SPECIES2); + if (species != SPECIES_NONE) + { + s16 x = 24 * (monId % 6) + 0x64; + s16 y = 24 * (monId / 6) + 0x2c; + gPokemonStorageSystemPtr->unk_1050[monId] = PSS_SpawnMonIconSprite(species, GetBoxMonData(mon, MON_DATA_PERSONALITY), x, y, 2, 18 - (monId % 6)); + } +} + +void sub_8098DE0(s16 a0) +{ + u16 monId; + for (monId = 0; monId < 30; monId++) + { + if (gPokemonStorageSystemPtr->unk_1050[monId]) + { + gPokemonStorageSystemPtr->unk_1050[monId]->data[2] = a0; + gPokemonStorageSystemPtr->unk_1050[monId]->data[4] = 1; + gPokemonStorageSystemPtr->unk_1050[monId]->callback = sub_8098E68; + } + } +} + +void sub_8098E24(struct Sprite *sprite) +{ + if (sprite->data[1] != 0) + { + sprite->data[1]--; + sprite->pos1.x += sprite->data[2]; + } + else + { + gPokemonStorageSystemPtr->unk_1178--; + sprite->pos1.x = sprite->data[3]; + sprite->callback = SpriteCallbackDummy; + } +} + +void sub_8098E68(struct Sprite *sprite) +{ + if (sprite->data[4] != 0) + { + sprite->data[4]--; + } + else + { + sprite->pos1.x += sprite->data[2]; + sprite->data[5] = sprite->pos1.x + sprite->pos2.x; + if (sprite->data[5] < 0x45 || sprite->data[5] > 0xfb) + sprite->callback = SpriteCallbackDummy; + } +} |