diff options
-rw-r--r-- | asm/pokemon_storage_system.s | 185 | ||||
-rw-r--r-- | include/pokemon_storage_system.h | 4 | ||||
-rw-r--r-- | src/pokemon/pokemon_storage_system_3.c | 52 |
3 files changed, 55 insertions, 186 deletions
diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 90b8caa5c..3f9795384 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,191 +5,6 @@ .text - thumb_func_start sub_8098EA0 -sub_8098EA0: @ 8098EA0 - push {r4-r7,lr} - lsls r0, 24 - lsrs r5, r0, 24 - movs r6, 0 - ldr r0, _08098ED8 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r1, _08098EDC @ =0x00001050 - adds r7, r0, r1 -_08098EB0: - lsls r0, r5, 2 - adds r4, r7, r0 - ldr r0, [r4] - cmp r0, 0 - beq _08098EC2 - bl sub_8099BE0 - movs r0, 0 - str r0, [r4] -_08098EC2: - adds r0, r5, 0x6 - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, 0x4 - bls _08098EB0 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08098ED8: .4byte gPokemonStorageSystemPtr -_08098EDC: .4byte 0x00001050 - thumb_func_end sub_8098EA0 - - thumb_func_start sub_8098EE0 -sub_8098EE0: @ 8098EE0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x24 - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 16 - lsrs r1, 16 - str r1, [sp, 0x8] - lsls r2, 16 - movs r0, 0x2C - str r0, [sp, 0x10] - lsls r0, r6, 1 - adds r0, r6 - lsls r0, 19 - movs r1, 0xC8 - lsls r1, 15 - adds r0, r1 - lsrs r0, 16 - mov r10, r0 - ldr r0, [sp, 0x8] - adds r0, 0x1 - lsrs r3, r2, 16 - str r3, [sp, 0xC] - asrs r2, 16 - adds r1, r0, 0 - muls r1, r2 - mov r4, r10 - subs r1, r4, r1 - movs r0, 0x12 - subs r0, r6 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x18] - movs r0, 0 - str r0, [sp, 0x14] - mov r9, r0 - ldr r0, _08098FF8 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r2, _08098FFC @ =0x0000117d - adds r2, r0 - mov r8, r2 - ldr r3, _08099000 @ =0x00001050 - adds r3, r0, r3 - str r3, [sp, 0x20] - lsls r1, 16 - str r1, [sp, 0x1C] -_08098F42: - mov r4, r8 - ldrb r0, [r4] - lsls r1, r0, 2 - adds r1, r0 - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 5 - lsls r7, r6, 2 - adds r1, r7, r6 - lsls r1, 4 - ldr r2, _08099004 @ =gPokemonStorage + 0x4 - adds r4, r1, r2 - adds r0, r4 - movs r1, 0x41 - bl GetBoxMonData - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0 - beq _08098FC8 - mov r1, r8 - ldrb r0, [r1] - lsls r1, r0, 2 - adds r1, r0 - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 5 - adds r0, r4 - movs r1, 0 - bl GetBoxMonData - adds r1, r0, 0 - ldr r2, [sp, 0x10] - lsls r3, r2, 16 - asrs r3, 16 - movs r0, 0x2 - str r0, [sp] - ldr r4, [sp, 0x18] - str r4, [sp, 0x4] - adds r0, r5, 0 - ldr r4, [sp, 0x1C] - asrs r2, r4, 16 - bl PSS_SpawnMonIconSprite - ldr r2, [sp, 0x20] - adds r1, r2, r7 - str r0, [r1] - cmp r0, 0 - beq _08098FC8 - mov r3, sp - ldrh r3, [r3, 0x8] - strh r3, [r0, 0x30] - ldr r0, [r1] - mov r4, sp - ldrh r4, [r4, 0xC] - strh r4, [r0, 0x32] - ldr r0, [r1] - mov r2, r10 - strh r2, [r0, 0x34] - ldr r1, [r1] - ldr r0, _08099008 @ =sub_8098E24 - str r0, [r1, 0x1C] - ldr r0, [sp, 0x14] - adds r0, 0x1 - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x14] -_08098FC8: - adds r0, r6, 0x6 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r0, [sp, 0x10] - adds r0, 0x18 - lsls r0, 16 - lsrs r0, 16 - str r0, [sp, 0x10] - mov r0, r9 - adds r0, 0x1 - lsls r0, 16 - lsrs r0, 16 - mov r9, r0 - cmp r0, 0x4 - bls _08098F42 - ldr r0, [sp, 0x14] - add sp, 0x24 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08098FF8: .4byte gPokemonStorageSystemPtr -_08098FFC: .4byte 0x0000117d -_08099000: .4byte 0x00001050 -_08099004: .4byte gPokemonStorage + 0x4 -_08099008: .4byte sub_8098E24 - thumb_func_end sub_8098EE0 - thumb_func_start sub_809900C sub_809900C: @ 809900C push {r4-r6,lr} diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index 26c1b140d..295084eea 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -103,7 +103,9 @@ struct PokemonStorageSystemData { u16 unk_1120[40]; u8 filler_1170[8]; u16 unk_1178; - u8 filler_117a[0x6e]; + u8 filler_117a[3]; + u8 unk_117d; + u8 filler_117e[0x6a]; u8 *unk_11e8; u32 unk_11ec; u16 unk_11f0; diff --git a/src/pokemon/pokemon_storage_system_3.c b/src/pokemon/pokemon_storage_system_3.c index e1ccd107f..77d85de65 100644 --- a/src/pokemon/pokemon_storage_system_3.c +++ b/src/pokemon/pokemon_storage_system_3.c @@ -15,6 +15,7 @@ void sub_8098E68(struct Sprite *sprite); void sub_80999C4(struct Sprite *sprite); struct Sprite *PSS_SpawnMonIconSprite(u16 species, u32 personality, s16 a2, s16 a3, u8 a4, u8 a5); +void sub_8099BE0(struct Sprite *sprite); // .rodata @@ -141,3 +142,54 @@ void sub_8098E68(struct Sprite *sprite) sprite->callback = SpriteCallbackDummy; } } + +void sub_8098EA0(u8 col) +{ + u16 i; + + for (i = 0; i < 5; i++) + { + if (gPokemonStorageSystemPtr->unk_1050[col]) + { + sub_8099BE0(gPokemonStorageSystemPtr->unk_1050[col]); + gPokemonStorageSystemPtr->unk_1050[col] = NULL; + } + col += 6; + } +} + +u8 sub_8098EE0(u8 a0, u16 a1, s16 a2) +{ + u16 i; + u16 x; + u16 y; + u8 count; + u8 x1; + u16 sp1c; + + y = 0x2c; + x = 24 * a0 + 0x64; + sp1c = x - (a1 + 1) * a2; + x1 = 18 - a0; + count = 0; + + for (i = 0; i < 5; i++) + { + u16 species = GetBoxMonData(gPokemonStorage.boxes[gPokemonStorageSystemPtr->unk_117d] + a0, MON_DATA_SPECIES2); + if (species != SPECIES_NONE) + { + gPokemonStorageSystemPtr->unk_1050[a0] = PSS_SpawnMonIconSprite(species, GetBoxMonData(gPokemonStorage.boxes[gPokemonStorageSystemPtr->unk_117d] + a0, MON_DATA_PERSONALITY), sp1c, y, 2, x1); + if (gPokemonStorageSystemPtr->unk_1050[a0]) + { + gPokemonStorageSystemPtr->unk_1050[a0]->data[1] = a1; + gPokemonStorageSystemPtr->unk_1050[a0]->data[2] = a2; + gPokemonStorageSystemPtr->unk_1050[a0]->data[3] = x; + gPokemonStorageSystemPtr->unk_1050[a0]->callback = sub_8098E24; + count++; + } + } + a0 += 6; + y += 24; + } + return count; +} |