From e4a84faabf3f4e2f005e55a88babce7e8ae49c58 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 6 Jan 2018 10:49:52 -0500 Subject: through unref_sub_8095C60 --- asm/pokemon_storage_system.s | 241 ----------------------------------- include/decoration.h | 5 - include/pokemon.h | 8 +- ld_script.txt | 3 +- src/field/choose_party.c | 3 +- src/field/field_effect.c | 1 + src/pokemon/pokemon_storage_system.c | 88 +++++++++++++ 7 files changed, 97 insertions(+), 252 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 69c6d9e4f..211481692 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,247 +5,6 @@ .text - thumb_func_start sub_8095ADC -sub_8095ADC: @ 8095ADC - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - movs r4, 0 - movs r5, 0 - lsls r1, r0, 2 - adds r1, r0 - lsls r0, r1, 4 - subs r0, r1 - lsls r6, r0, 5 -_08095AF0: - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 4 - ldr r1, _08095B20 @ =gPokemonStorage + 0x4 - adds r0, r1 - adds r0, r6, r0 - movs r1, 0xB - bl GetBoxMonData - cmp r0, 0 - beq _08095B0C - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 -_08095B0C: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x1D - bls _08095AF0 - lsls r0, r5, 24 - lsrs r0, 24 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08095B20: .4byte gPokemonStorage + 0x4 - thumb_func_end sub_8095ADC - - thumb_func_start sub_8095B24 -sub_8095B24: @ 8095B24 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - movs r4, 0 - lsls r1, r0, 2 - adds r1, r0 - lsls r0, r1, 4 - subs r0, r1 - lsls r5, r0, 5 -_08095B36: - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 4 - ldr r1, _08095B54 @ =gPokemonStorage + 0x4 - adds r0, r1 - adds r0, r5, r0 - movs r1, 0xB - bl GetBoxMonData - cmp r0, 0 - bne _08095B58 - lsls r0, r4, 16 - asrs r0, 16 - b _08095B66 - .align 2, 0 -_08095B54: .4byte gPokemonStorage + 0x4 -_08095B58: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x1D - bls _08095B36 - movs r0, 0x1 - negs r0, r0 -_08095B66: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8095B24 - - thumb_func_start GetNumValidDaycarePartyMons -GetNumValidDaycarePartyMons: @ 8095B6C - push {r4-r6,lr} - movs r5, 0 - movs r6, 0 -_08095B72: - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _08095BB0 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _08095B9A - adds r0, r4, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - bne _08095B9A - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 -_08095B9A: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x5 - bls _08095B72 - lsls r0, r6, 24 - lsrs r0, 24 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08095BB0: .4byte gPlayerParty - thumb_func_end GetNumValidDaycarePartyMons - - thumb_func_start CountAlivePartyMonsExceptOne -CountAlivePartyMonsExceptOne: @ 8095BB4 - push {r4-r7,lr} - lsls r0, 24 - movs r5, 0 - movs r6, 0 - lsrs r7, r0, 24 -_08095BBE: - cmp r5, r7 - beq _08095BF6 - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _08095C0C @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _08095BF6 - adds r0, r4, 0 - movs r1, 0x2D - bl GetMonData - cmp r0, 0 - bne _08095BF6 - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - beq _08095BF6 - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 -_08095BF6: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x5 - bls _08095BBE - lsls r0, r6, 24 - lsrs r0, 24 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08095C0C: .4byte gPlayerParty - thumb_func_end CountAlivePartyMonsExceptOne - - thumb_func_start CountAlivePartyMonsExceptSelectedOne -CountAlivePartyMonsExceptSelectedOne: @ 8095C10 - push {lr} - ldr r0, _08095C24 @ =gSpecialVar_0x8004 - ldrb r0, [r0] - bl CountAlivePartyMonsExceptOne - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_08095C24: .4byte gSpecialVar_0x8004 - thumb_func_end CountAlivePartyMonsExceptSelectedOne - - thumb_func_start StorageSystemGetPartySize -StorageSystemGetPartySize: @ 8095C28 - push {r4,r5,lr} - movs r4, 0 - movs r5, 0 -_08095C2E: - movs r0, 0x64 - muls r0, r4 - ldr r1, _08095C5C @ =gPlayerParty - adds r0, r1 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _08095C46 - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 -_08095C46: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x5 - bls _08095C2E - lsls r0, r5, 24 - lsrs r0, 24 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_08095C5C: .4byte gPlayerParty - thumb_func_end StorageSystemGetPartySize - - thumb_func_start unref_sub_8095C60 -unref_sub_8095C60: @ 8095C60 - push {r4,r5,lr} - adds r5, r0, 0 - lsls r4, r2, 16 - lsrs r4, 16 - bl StringCopy - adds r1, r0, 0 - adds r5, r4 - cmp r1, r5 - bcs _08095C7E - movs r0, 0 -_08095C76: - strb r0, [r1] - adds r1, 0x1 - cmp r1, r5 - bcc _08095C76 -_08095C7E: - movs r0, 0xFF - strb r0, [r1] - adds r0, r1, 0 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end unref_sub_8095C60 - thumb_func_start sub_8095C8C sub_8095C8C: @ 8095C8C push {r4-r7,lr} diff --git a/include/decoration.h b/include/decoration.h index 972e82faf..3d619a598 100644 --- a/include/decoration.h +++ b/include/decoration.h @@ -127,10 +127,6 @@ extern u8 gUnknown_020388F5; extern u8 gUnknown_020388F6; extern u8 gUnknown_020388D6[16]; extern u8 gUnknown_020388E6[12]; -extern u16 gSpecialVar_0x8004; -extern u16 gSpecialVar_0x8005; -extern u16 gSpecialVar_0x8006; -extern u16 gSpecialVar_0x8007; extern u16 gUnknown_020391A4; extern u16 gUnknown_020391A6; extern u8 gUnknown_020391A8; @@ -161,7 +157,6 @@ extern const struct YesNoFuncTable gUnknown_083ECAA0; extern u8 sub_8134194(u8); // src/decoration_inventory extern bool8 sub_81341D4(void); // src/decoration_inventory extern void sub_8134104(u8); // src/decoration_inventory -extern bool8 sub_807D770(void); extern void sub_8109DAC(u8); // src/trader extern void ReshowPlayerPC(u8); // src/player_pc void Task_SecretBasePC_Decoration(u8); diff --git a/include/pokemon.h b/include/pokemon.h index a1c30f1f3..89599d994 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -418,10 +418,10 @@ struct BattleMove struct PokemonStorage { - /*0x00*/ u8 currentBox; - /*0x01*/ struct BoxPokemon boxes[14][30]; - u8 boxNames[14][9]; - u8 unkArray[14]; + /*0x0000*/ u8 currentBox; + /*0x0004*/ struct BoxPokemon boxes[14][30]; + /*0x8344*/ u8 boxNames[14][9]; + /*0x83c2*/ u8 unkArray[14]; }; struct SpindaSpot diff --git a/ld_script.txt b/ld_script.txt index 5bfc8b171..d0256f397 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -128,8 +128,9 @@ SECTIONS { src/engine/save_menu_util.o(.text); src/battle/battle_party_menu.o(.text); asm/unk_text_8095904.o(.text); - asm/pokemon_storage_system.o(.text); src/pokemon/pokemon_storage_system.o(.text); + asm/pokemon_storage_system.o(.text); + src/pokemon/pokemon_storage_system.o(.text.8098898); asm/pokemon_storage_system.o(.text_8098A38); src/pokemon/pokemon_icon.o(.text); src/pokemon/pokemon_summary_screen.o(.text); diff --git a/src/field/choose_party.c b/src/field/choose_party.c index d278eda4a..52763b911 100644 --- a/src/field/choose_party.c +++ b/src/field/choose_party.c @@ -1,5 +1,5 @@ #include "global.h" -#include "decoration.h" +#include "event_data.h" #include "field_fadetransition.h" #include "main.h" #include "menu.h" @@ -7,6 +7,7 @@ #include "palette.h" #include "party_menu.h" #include "pokemon_menu.h" +#include "field_weather.h" #include "pokemon.h" #include "pokemon_summary_screen.h" #include "overworld.h" diff --git a/src/field/field_effect.c b/src/field/field_effect.c index 1e2aaa4ed..1fe238901 100644 --- a/src/field/field_effect.c +++ b/src/field/field_effect.c @@ -25,6 +25,7 @@ #include "field_map_obj.h" #include "util.h" #include "field_effect_helpers.h" +#include "pokemon_storage_system.h" #define subsprite_table(ptr) {.subsprites = ptr, .subspriteCount = (sizeof ptr) / (sizeof(struct Subsprite))} diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index 4a68b846a..2ea7161cf 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -2,6 +2,7 @@ #include "pokemon_storage_system.h" #include "menu.h" #include "string_util.h" +#include "event_data.h" #include "ewram.h" struct StorageAction { @@ -13,6 +14,93 @@ extern const struct StorageAction gUnknown_083B6DF4[]; EWRAM_DATA struct PokemonStorage gPokemonStorage = {0}; +u8 sub_8095ADC(u8 boxId) +{ + u16 i; + u16 count; + + for (i = 0, count = 0; i < 30; i++) + { + if (GetBoxMonData(gPokemonStorage.boxes[boxId] + i, MON_DATA_SPECIES) != 0) + count++; + } + return count; +} + +s16 sub_8095B24(u8 boxId) +{ + u16 i; + + for (i = 0; i < 30; i++) + { + if (GetBoxMonData(gPokemonStorage.boxes[boxId] + i, MON_DATA_SPECIES) == 0) + return i; + } + return -1; +} + +u8 GetNumValidDaycarePartyMons(void) +{ + u16 i; + u16 count; + + for (i = 0, count = 0; i < PARTY_SIZE; i++) + { + struct Pokemon *pokemon = gPlayerParty + i; + if (GetMonData(pokemon, MON_DATA_SPECIES) != 0 && !GetMonData(pokemon, MON_DATA_IS_EGG)) + count++; + } + return count; +} + +u8 CountAlivePartyMonsExceptOne(u8 toSkip) +{ + u16 i; + u16 count; + + for (i = 0, count = 0; i < PARTY_SIZE; i++) + { + if (i != toSkip) + { + struct Pokemon *pokemon = gPlayerParty + i; + if (GetMonData(pokemon, MON_DATA_SPECIES) != 0 && !GetMonData(pokemon, MON_DATA_IS_EGG) && GetMonData(pokemon, MON_DATA_HP) != 0) + count++; + } + } + return count; +} + +u8 CountAlivePartyMonsExceptSelectedOne(void) +{ + return CountAlivePartyMonsExceptOne(gSpecialVar_0x8004); +} + +u8 StorageSystemGetPartySize(void) +{ + u16 i; + u16 count; + + for (i = 0, count = 0; i < PARTY_SIZE; i++) + { + if (GetMonData(gPlayerParty + i, MON_DATA_SPECIES) != 0) + count++; + } + return count; +} + +u8 *unref_sub_8095C60(u8 *dest, const u8 *src, u16 pad) +{ + u8 *_dest = StringCopy(dest, src); + while (_dest < dest + pad) + { + *_dest++ = CHAR_SPACE; + } + *_dest = EOS; + return _dest; +} + +asm(".section .text.8098898"); + void sub_8098898(u8 index) { u8 *ptr; -- cgit v1.2.3 From 6ce6e18fd50951ec784f5534f0bcb929aadd24d6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 6 Jan 2018 11:05:39 -0500 Subject: sub_8095C8C --- asm/pokemon_storage_system.s | 67 ------------------------------------ src/pokemon/pokemon_storage_system.c | 15 ++++++++ 2 files changed, 15 insertions(+), 67 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 211481692..91f4911ce 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,73 +5,6 @@ .text - thumb_func_start sub_8095C8C -sub_8095C8C: @ 8095C8C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - adds r6, r0, 0 - adds r7, r3, 0 - ldr r5, [sp, 0x1C] - ldr r4, [sp, 0x20] - ldr r0, [sp, 0x24] - mov r9, r0 - ldr r0, [sp, 0x28] - ldr r3, [sp, 0x2C] - lsls r1, 16 - lsrs r1, 16 - lsls r2, 16 - lsls r5, 16 - lsrs r5, 16 - lsls r4, 16 - lsrs r4, 16 - lsls r0, 16 - lsrs r0, 16 - mov r8, r0 - lsls r3, 16 - lsrs r3, 16 - mov r0, r9 - lsls r0, 17 - mov r9, r0 - lsrs r2, 11 - adds r2, r1 - lsls r2, 1 - adds r6, r2 - adds r0, r4, 0 - muls r0, r3 - adds r0, r5 - lsls r0, 1 - adds r7, r0 - movs r4, 0 - cmp r4, r8 - bcs _08095CFC - mov r0, r9 - lsrs r0, 1 - mov r9, r0 - lsls r5, r3, 1 -_08095CE2: - adds r0, r7, 0 - adds r1, r6, 0 - mov r3, r9 - lsrs r2, r3, 16 - bl CpuSet - adds r6, 0x40 - adds r7, r5 - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, r8 - bcc _08095CE2 -_08095CFC: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8095C8C - thumb_func_start unref_sub_8095D08 unref_sub_8095D08: @ 8095D08 push {r4-r7,lr} diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index 2ea7161cf..3c029b0aa 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -99,6 +99,21 @@ u8 *unref_sub_8095C60(u8 *dest, const u8 *src, u16 pad) return _dest; } +void sub_8095C8C(u16 *dest, u16 dest_left, u16 dest_top, u16 *src, u16 src_left, u16 src_top, u16 dest_width, u16 dest_height, u16 src_width) +{ + u16 i; + + dest_width *= 2; + dest += dest_top * 0x20 + dest_left; + src += src_top * src_width + src_left; + for (i = 0; i < dest_height; i++) + { + CpuCopy16(src, dest, dest_width); + dest += 0x20; + src += src_width; + } +} + asm(".section .text.8098898"); void sub_8098898(u8 index) { -- cgit v1.2.3 From 4db981200c1d011c370a45d123c31b397b7d62cc Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 6 Jan 2018 11:54:46 -0500 Subject: nonmatching unref_sub_8095D08 --- asm/pokemon_storage_system.s | 103 -------------------------- include/gba/macro.h | 2 +- src/pokemon/pokemon_storage_system.c | 138 ++++++++++++++++++++++++++++++++++- 3 files changed, 138 insertions(+), 105 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 91f4911ce..76fac44bc 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,109 +5,6 @@ .text - thumb_func_start unref_sub_8095D08 -unref_sub_8095D08: @ 8095D08 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x8 - adds r4, r0, 0 - ldr r0, [sp, 0x28] - lsls r1, 16 - lsrs r1, 16 - lsls r2, 16 - lsls r0, 16 - lsrs r0, 16 - mov r10, r0 - lsrs r2, 11 - adds r2, r1 - lsls r2, 1 - adds r4, r2 - lsls r3, 17 - lsrs r0, r3, 16 - str r0, [sp, 0x4] - movs r0, 0 - cmp r0, r10 - bcs _08095DB2 - movs r6, 0x80 - lsls r6, 5 - mov r5, sp - ldr r7, _08095D74 @ =0x040000d4 - lsrs r3, 17 - mov r9, r3 - mov r1, r9 - movs r2, 0x81 - lsls r2, 24 - orrs r1, r2 - mov r9, r1 -_08095D4E: - adds r3, r4, 0 - ldr r2, [sp, 0x4] - movs r1, 0x40 - adds r1, r4 - mov r8, r1 - adds r0, 0x1 - mov r12, r0 - cmp r2, r6 - bhi _08095D78 - movs r0, 0 - strh r0, [r5] - mov r2, sp - str r2, [r7] - str r4, [r7, 0x4] - mov r0, r9 - str r0, [r7, 0x8] - ldr r0, [r7, 0x8] - b _08095DA6 - .align 2, 0 -_08095D74: .4byte 0x040000d4 -_08095D78: - movs r4, 0 - strh r4, [r5] - ldr r1, _08095DC4 @ =0x040000d4 - mov r0, sp - str r0, [r1] - str r3, [r1, 0x4] - ldr r0, _08095DC8 @ =0x81000800 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r3, r6 - subs r2, r6 - cmp r2, r6 - bhi _08095D78 - strh r4, [r5] - mov r0, sp - str r0, [r1] - str r3, [r1, 0x4] - lsrs r0, r2, 1 - movs r2, 0x81 - lsls r2, 24 - orrs r0, r2 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] -_08095DA6: - mov r4, r8 - mov r1, r12 - lsls r0, r1, 16 - lsrs r0, 16 - cmp r0, r10 - bcc _08095D4E -_08095DB2: - add sp, 0x8 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08095DC4: .4byte 0x040000d4 -_08095DC8: .4byte 0x81000800 - thumb_func_end unref_sub_8095D08 - thumb_func_start StorageSystemGetNextMonIndex StorageSystemGetNextMonIndex: @ 8095DCC push {r4-r7,lr} diff --git a/include/gba/macro.h b/include/gba/macro.h index d9e6739b3..540e08375 100644 --- a/include/gba/macro.h +++ b/include/gba/macro.h @@ -105,7 +105,7 @@ #define DmaClearLarge(dmaNum, dest, size, block, bit) \ { \ - const void *_dest = dest; \ + void *_dest = dest; \ u32 _size = size; \ while (1) \ { \ diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index 3c029b0aa..5cb61f365 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -99,7 +99,7 @@ u8 *unref_sub_8095C60(u8 *dest, const u8 *src, u16 pad) return _dest; } -void sub_8095C8C(u16 *dest, u16 dest_left, u16 dest_top, u16 *src, u16 src_left, u16 src_top, u16 dest_width, u16 dest_height, u16 src_width) +void sub_8095C8C(u16 *dest, u16 dest_left, u16 dest_top, const u16 *src, u16 src_left, u16 src_top, u16 dest_width, u16 dest_height, u16 src_width) { u16 i; @@ -114,6 +114,142 @@ void sub_8095C8C(u16 *dest, u16 dest_left, u16 dest_top, u16 *src, u16 src_left, } } +#ifdef NONMATCHING +void unref_sub_8095D08(u16 *dest, u16 dest_left, u16 dest_top, u16 width, u16 height) +{ + u16 i; + + dest += dest_top * 0x20 + dest_left; + width *= 2; + for (i = 0; i < height; dest += 0x20, i++) + { + void *_dest = dest; + size_t _size = width; + if (_size <= 0x1000) + { + DmaFill16(3, 0, _dest, _size); + } + else + { + while (1) + { + DmaFill16(3, 0, _dest, 0x1000); + _dest += 0x1000; + _size -= 0x1000; + if (_size <= 0x1000) + { + DmaFill16(3, 0, _dest, _size); + break; + } + } + } + } +} +#else +__attribute__((naked)) void unref_sub_8095D08(u16 *dest, u16 dest_left, u16 dest_top, u16 width, u16 height) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x8\n" + "\tadds r4, r0, 0\n" + "\tldr r0, [sp, 0x28]\n" + "\tlsls r1, 16\n" + "\tlsrs r1, 16\n" + "\tlsls r2, 16\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tmov r10, r0\n" + "\tlsrs r2, 11\n" + "\tadds r2, r1\n" + "\tlsls r2, 1\n" + "\tadds r4, r2\n" + "\tlsls r3, 17\n" + "\tlsrs r0, r3, 16\n" + "\tstr r0, [sp, 0x4]\n" + "\tmovs r0, 0\n" + "\tcmp r0, r10\n" + "\tbcs _08095DB2\n" + "\tmovs r6, 0x80\n" + "\tlsls r6, 5\n" + "\tmov r5, sp\n" + "\tldr r7, _08095D74 @ =0x040000d4\n" + "\tlsrs r3, 17\n" + "\tmov r9, r3\n" + "\tmov r1, r9\n" + "\tmovs r2, 0x81\n" + "\tlsls r2, 24\n" + "\torrs r1, r2\n" + "\tmov r9, r1\n" + "_08095D4E:\n" + "\tadds r3, r4, 0\n" + "\tldr r2, [sp, 0x4]\n" + "\tmovs r1, 0x40\n" + "\tadds r1, r4\n" + "\tmov r8, r1\n" + "\tadds r0, 0x1\n" + "\tmov r12, r0\n" + "\tcmp r2, r6\n" + "\tbhi _08095D78\n" + "\tmovs r0, 0\n" + "\tstrh r0, [r5]\n" + "\tmov r2, sp\n" + "\tstr r2, [r7]\n" + "\tstr r4, [r7, 0x4]\n" + "\tmov r0, r9\n" + "\tstr r0, [r7, 0x8]\n" + "\tldr r0, [r7, 0x8]\n" + "\tb _08095DA6\n" + "\t.align 2, 0\n" + "_08095D74: .4byte 0x040000d4\n" + "_08095D78:\n" + "\tmovs r4, 0\n" + "\tstrh r4, [r5]\n" + "\tldr r1, _08095DC4 @ =0x040000d4\n" + "\tmov r0, sp\n" + "\tstr r0, [r1]\n" + "\tstr r3, [r1, 0x4]\n" + "\tldr r0, _08095DC8 @ =0x81000800\n" + "\tstr r0, [r1, 0x8]\n" + "\tldr r0, [r1, 0x8]\n" + "\tadds r3, r6\n" + "\tsubs r2, r6\n" + "\tcmp r2, r6\n" + "\tbhi _08095D78\n" + "\tstrh r4, [r5]\n" + "\tmov r0, sp\n" + "\tstr r0, [r1]\n" + "\tstr r3, [r1, 0x4]\n" + "\tlsrs r0, r2, 1\n" + "\tmovs r2, 0x81\n" + "\tlsls r2, 24\n" + "\torrs r0, r2\n" + "\tstr r0, [r1, 0x8]\n" + "\tldr r0, [r1, 0x8]\n" + "_08095DA6:\n" + "\tmov r4, r8\n" + "\tmov r1, r12\n" + "\tlsls r0, r1, 16\n" + "\tlsrs r0, 16\n" + "\tcmp r0, r10\n" + "\tbcc _08095D4E\n" + "_08095DB2:\n" + "\tadd sp, 0x8\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_08095DC4: .4byte 0x040000d4\n" + "_08095DC8: .4byte 0x81000800"); +} +#endif + asm(".section .text.8098898"); void sub_8098898(u8 index) { -- cgit v1.2.3 From a7e900e31b472385fda5fab48fc3c76212a0e0c2 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 6 Jan 2018 12:47:00 -0500 Subject: StorageSystemGetNextMonIndex --- asm/pokemon_storage_system.s | 116 ----------------------------------- src/pokemon/pokemon_storage_system.c | 31 ++++++++++ 2 files changed, 31 insertions(+), 116 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 76fac44bc..cf8091735 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,122 +5,6 @@ .text - thumb_func_start StorageSystemGetNextMonIndex -StorageSystemGetNextMonIndex: @ 8095DCC - push {r4-r7,lr} - mov r7, r8 - push {r7} - mov r8, r0 - lsls r1, 24 - lsrs r1, 24 - lsls r2, 24 - lsrs r7, r2, 24 - lsls r3, 24 - lsrs r0, r3, 24 - cmp r0, 0 - beq _08095DE8 - cmp r0, 0x2 - bne _08095DEC -_08095DE8: - movs r2, 0x1 - b _08095DEE -_08095DEC: - ldr r2, _08095E38 @ =0x0000ffff -_08095DEE: - subs r0, 0x2 - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bhi _08095E44 - lsls r0, r1, 24 - asrs r0, 24 - lsls r2, 16 - asrs r1, r2, 16 - adds r1, r0 - lsls r0, r1, 16 - asrs r1, r0, 16 - adds r6, r2, 0 - cmp r1, 0 - blt _08095E90 - cmp r1, r7 - bgt _08095E90 -_08095E10: - asrs r4, r0, 16 - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 4 - add r0, r8 - movs r1, 0xB - bl GetBoxMonData - cmp r0, 0 - bne _08095E3C - asrs r0, r6, 16 - adds r0, r4, r0 - lsls r0, 16 - asrs r2, r0, 16 - cmp r2, 0 - blt _08095E90 - cmp r2, r7 - ble _08095E10 - b _08095E90 - .align 2, 0 -_08095E38: .4byte 0x0000ffff -_08095E3C: - adds r0, r4, 0 - b _08095E94 -_08095E40: - adds r0, r5, 0 - b _08095E94 -_08095E44: - lsls r0, r1, 24 - asrs r0, 24 - lsls r2, 16 - asrs r1, r2, 16 - adds r1, r0 - lsls r0, r1, 16 - asrs r1, r0, 16 - adds r6, r2, 0 - cmp r1, 0 - blt _08095E90 - cmp r1, r7 - bgt _08095E90 -_08095E5C: - asrs r5, r0, 16 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 4 - mov r1, r8 - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0xB - bl GetBoxMonData - cmp r0, 0 - beq _08095E80 - adds r0, r4, 0 - movs r1, 0x2D - bl GetBoxMonData - cmp r0, 0 - beq _08095E40 -_08095E80: - asrs r0, r6, 16 - adds r0, r5, r0 - lsls r0, 16 - asrs r2, r0, 16 - cmp r2, 0 - blt _08095E90 - cmp r2, r7 - ble _08095E5C -_08095E90: - movs r0, 0x1 - negs r0, r0 -_08095E94: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end StorageSystemGetNextMonIndex - thumb_func_start StorageSystemClearMessageWindow StorageSystemClearMessageWindow: @ 8095EA0 push {lr} diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index 5cb61f365..745a27bf6 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -250,6 +250,37 @@ __attribute__((naked)) void unref_sub_8095D08(u16 *dest, u16 dest_left, u16 dest } #endif +s16 StorageSystemGetNextMonIndex(struct BoxPokemon *box, s8 startIdx, u8 stopIdx, u8 mode) +{ + s16 i; + s16 direction; + if (mode == 0 || mode == 2) + { + direction = 1; + } + else + { + direction = -1; + } + if (mode == 2 || mode == 3) + { + for (i = startIdx + direction; i >= 0 && i <= stopIdx; i += direction) + { + if (GetBoxMonData(box + i, MON_DATA_SPECIES) != 0) + return i; + } + } + else + { + for (i = startIdx + direction; i >= 0 && i <= stopIdx; i += direction) + { + if (GetBoxMonData(box + i, MON_DATA_SPECIES) != 0 && !GetBoxMonData(box + i, MON_DATA_IS_EGG)) + return i; + } + } + return -1; +} + asm(".section .text.8098898"); void sub_8098898(u8 index) { -- cgit v1.2.3 From d19de32aba198ac2e5691cab088b3d84cd390b39 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 6 Jan 2018 15:16:51 -0500 Subject: through Task_PokemonStorageSystem --- asm/pokemon_storage_system.s | 298 ----------------------------------- src/pokemon/pokemon_storage_system.c | 124 ++++++++++++++- 2 files changed, 123 insertions(+), 299 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index cf8091735..8fc6cfdb2 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,304 +5,6 @@ .text - thumb_func_start StorageSystemClearMessageWindow -StorageSystemClearMessageWindow: @ 8095EA0 - push {lr} - movs r0, 0x2 - movs r1, 0xF - movs r2, 0x1B - movs r3, 0x12 - bl MenuFillWindowRectWithBlankTile - pop {r0} - bx r0 - thumb_func_end StorageSystemClearMessageWindow - - thumb_func_start Task_PokemonStorageSystem -Task_PokemonStorageSystem: @ 8095EB4 - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - ldr r1, _08095ED8 @ =gTasks - adds r4, r0, r1 - movs r1, 0x8 - ldrsh r0, [r4, r1] - cmp r0, 0x4 - bls _08095ECE - b _080960F4 -_08095ECE: - lsls r0, 2 - ldr r1, _08095EDC @ =_08095EE0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08095ED8: .4byte gTasks -_08095EDC: .4byte _08095EE0 - .align 2, 0 -_08095EE0: - .4byte _08095EF4 - .4byte _08095F1C - .4byte _08095F30 - .4byte _08096042 - .4byte _080960DC -_08095EF4: - ldrb r0, [r4, 0xA] - bl StorageSystemCreatePrimaryMenu - bl MenuDisplayMessageBox - ldr r1, _08095F18 @ =gUnknown_083B600C - movs r2, 0xA - ldrsh r0, [r4, r2] - lsls r0, 3 - adds r1, 0x4 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x2 - movs r2, 0xF - bl MenuPrint - b _08095F28 - .align 2, 0 -_08095F18: .4byte gUnknown_083B600C -_08095F1C: - bl sub_807D770 - lsls r0, 24 - cmp r0, 0 - bne _08095F28 - b _080960F4 -_08095F28: - ldrh r0, [r4, 0x8] - adds r0, 0x1 - strh r0, [r4, 0x8] - b _080960F4 -_08095F30: - bl ProcessMenuInput - lsls r0, 24 - asrs r0, 24 - strh r0, [r4, 0xC] - movs r3, 0xC - ldrsh r1, [r4, r3] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _08095FC8 - cmp r1, r0 - bgt _08095F52 - subs r0, 0x1 - cmp r1, r0 - beq _08095F58 - b _08095FE8 -_08095F52: - cmp r1, 0x3 - beq _08095FC8 - b _08095FE8 -_08095F58: - ldrh r3, [r4, 0xA] - strh r3, [r4, 0xE] - ldr r2, _08095FC0 @ =gMain - ldrh r1, [r2, 0x2E] - movs r0, 0x40 - ands r0, r1 - cmp r0, 0 - beq _08095F76 - subs r0, r3, 0x1 - strh r0, [r4, 0xE] - lsls r0, 16 - cmp r0, 0 - bge _08095F76 - movs r0, 0x3 - strh r0, [r4, 0xE] -_08095F76: - ldrh r1, [r2, 0x2E] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _08095F92 - ldrh r0, [r4, 0xE] - adds r0, 0x1 - strh r0, [r4, 0xE] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3 - ble _08095F92 - movs r0, 0 - strh r0, [r4, 0xE] -_08095F92: - lsls r0, r3, 16 - asrs r0, 16 - ldrh r2, [r4, 0xE] - movs r3, 0xE - ldrsh r1, [r4, r3] - cmp r0, r1 - bne _08095FA2 - b _080960F4 -_08095FA2: - strh r2, [r4, 0xA] - bl StorageSystemClearMessageWindow - ldr r0, _08095FC4 @ =gUnknown_083B600C - movs r2, 0xA - ldrsh r1, [r4, r2] - lsls r1, 3 - adds r0, 0x4 - adds r1, r0 - ldr r0, [r1] - movs r1, 0x2 - movs r2, 0xF - bl MenuPrint - b _080960F4 - .align 2, 0 -_08095FC0: .4byte gMain -_08095FC4: .4byte gUnknown_083B600C -_08095FC8: - bl HandleDestroyMenuCursors - movs r0, 0 - movs r1, 0 - movs r2, 0xD - movs r3, 0x9 - bl MenuZeroFillWindowRect - bl ScriptContext2_Disable - bl EnableBothScriptContexts - adds r0, r5, 0 - bl DestroyTask - b _080960F4 -_08095FE8: - movs r3, 0xC - ldrsh r0, [r4, r3] - cmp r0, 0 - bne _08096008 - bl StorageSystemGetPartySize - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x6 - bne _08096008 - bl StorageSystemClearMessageWindow - ldr r0, _08096004 @ =gPCText_PartyFull2 - b _08096022 - .align 2, 0 -_08096004: .4byte gPCText_PartyFull2 -_08096008: - movs r1, 0xC - ldrsh r0, [r4, r1] - cmp r0, 0x1 - bne _08096034 - bl StorageSystemGetPartySize - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bne _08096034 - bl StorageSystemClearMessageWindow - ldr r0, _08096030 @ =gPCText_OnlyOne -_08096022: - movs r1, 0x2 - movs r2, 0xF - bl MenuPrint - movs r0, 0x3 - strh r0, [r4, 0x8] - b _080960F4 - .align 2, 0 -_08096030: .4byte gPCText_OnlyOne -_08096034: - movs r0, 0x1 - movs r1, 0 - bl fade_screen - movs r0, 0x4 - strh r0, [r4, 0x8] - b _080960F4 -_08096042: - ldr r0, _08096088 @ =gMain - ldrh r1, [r0, 0x2E] - movs r3, 0x3 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - bne _080960B8 - movs r0, 0x40 - ands r0, r1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0 - beq _08096090 - ldrh r0, [r4, 0xA] - subs r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - cmp r0, 0 - bge _0809606A - strh r3, [r4, 0xA] -_0809606A: - movs r0, 0x1 - negs r0, r0 - bl MoveMenuCursor - bl GetMenuCursorPos - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0xA] - bl StorageSystemClearMessageWindow - ldr r1, _0809608C @ =gUnknown_083B600C - movs r3, 0xA - ldrsh r0, [r4, r3] - b _080960C2 - .align 2, 0 -_08096088: .4byte gMain -_0809608C: .4byte gUnknown_083B600C -_08096090: - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _080960F4 - ldrh r0, [r4, 0xA] - adds r0, 0x1 - strh r0, [r4, 0xA] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3 - ble _080960A8 - strh r2, [r4, 0xA] -_080960A8: - movs r0, 0x1 - bl MoveMenuCursor - bl GetMenuCursorPos - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0xA] -_080960B8: - bl StorageSystemClearMessageWindow - ldr r1, _080960D8 @ =gUnknown_083B600C - movs r2, 0xA - ldrsh r0, [r4, r2] -_080960C2: - lsls r0, 3 - adds r1, 0x4 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x2 - movs r2, 0xF - bl MenuPrint - movs r0, 0x2 - strh r0, [r4, 0x8] - b _080960F4 - .align 2, 0 -_080960D8: .4byte gUnknown_083B600C -_080960DC: - ldr r0, _080960FC @ =gPaletteFade - ldrb r1, [r0, 0x7] - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - bne _080960F4 - ldrb r0, [r4, 0xC] - bl task_intro_29 - adds r0, r5, 0 - bl DestroyTask -_080960F4: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080960FC: .4byte gPaletteFade - thumb_func_end Task_PokemonStorageSystem - thumb_func_start ShowPokemonStorageSystem ShowPokemonStorageSystem: @ 8096100 push {lr} diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index 745a27bf6..a5a3bdcd8 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -1,17 +1,32 @@ #include "global.h" -#include "pokemon_storage_system.h" +#include "palette.h" +#include "field_weather.h" #include "menu.h" +#include "main.h" +#include "strings.h" #include "string_util.h" #include "event_data.h" #include "ewram.h" +#include "script.h" +#include "pokemon_storage_system.h" struct StorageAction { u8 *text; u8 format; }; +struct ReverseMenuAction { + u32 unk0; + u8 *text; +}; + +void StorageSystemCreatePrimaryMenu(u8 whichMenu); +void task_intro_29(u8 whichMenu); + extern const struct StorageAction gUnknown_083B6DF4[]; +extern const struct ReverseMenuAction gUnknown_083B600C[]; + EWRAM_DATA struct PokemonStorage gPokemonStorage = {0}; u8 sub_8095ADC(u8 boxId) @@ -281,6 +296,113 @@ s16 StorageSystemGetNextMonIndex(struct BoxPokemon *box, s8 startIdx, u8 stopIdx return -1; } +void StorageSystemClearMessageWindow(void) +{ + MenuFillWindowRectWithBlankTile(2, 15, 27, 18); +} + +void Task_PokemonStorageSystem(u8 taskId) +{ + struct Task *task = gTasks + taskId; + switch (task->data[0]) + { + case 0: + StorageSystemCreatePrimaryMenu(task->data[1]); + MenuDisplayMessageBox(); + MenuPrint(gUnknown_083B600C[task->data[1]].text, 2, 15); + task->data[0]++; + break; + case 1: + if (sub_807D770()) + { + task->data[0]++; + } + break; + case 2: + task->data[2] = ProcessMenuInput(); + switch(task->data[2]) + { + case -2: + task->data[3] = task->data[1]; + if (gMain.newKeys & DPAD_UP && --task->data[3] < 0) + task->data[3] = 3; + + if (gMain.newKeys & DPAD_DOWN && ++task->data[3] > 3) + task->data[3] = 0; + if (task->data[1] != task->data[3]) + { + task->data[1] = task->data[3]; + StorageSystemClearMessageWindow(); + MenuPrint(gUnknown_083B600C[task->data[1]].text, 2, 15); + } + break; + case -1: + case 3: + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(0, 0, 13, 9); + ScriptContext2_Disable(); + EnableBothScriptContexts(); + DestroyTask(taskId); + break; + default: + if (task->data[2] == 0 && StorageSystemGetPartySize() == PARTY_SIZE) + { + StorageSystemClearMessageWindow(); + MenuPrint(gPCText_PartyFull2, 2, 15); + task->data[0] = 3; + } + else if (task->data[2] == 1 && StorageSystemGetPartySize() == 1) + { + StorageSystemClearMessageWindow(); + MenuPrint(gPCText_OnlyOne, 2, 15); + task->data[0] = 3; + } + else + { + fade_screen(1, 0); + task->data[0] = 4; + } + break; + } + break; + case 3: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + StorageSystemClearMessageWindow(); + MenuPrint(gUnknown_083B600C[task->data[1]].text, 2, 15); + task->data[0] = 2; + } + else if (gMain.newKeys & DPAD_UP) + { + if (--task->data[1] < 0) + task->data[1] = 3; + MoveMenuCursor(-1); + task->data[1] = GetMenuCursorPos(); + StorageSystemClearMessageWindow(); + MenuPrint(gUnknown_083B600C[task->data[1]].text, 2, 15); + task->data[0] = 2; + } + else if (gMain.newKeys & DPAD_DOWN) + { + if (++task->data[1] > 3) + task->data[1] = 0; + MoveMenuCursor(1); + task->data[1] = GetMenuCursorPos(); + StorageSystemClearMessageWindow(); + MenuPrint(gUnknown_083B600C[task->data[1]].text, 2, 15); + task->data[0] = 2; + } + break; + case 4: + if (!gPaletteFade.active) + { + task_intro_29(task->data[2]); + DestroyTask(taskId); + } + break; + } +} + asm(".section .text.8098898"); void sub_8098898(u8 index) { -- cgit v1.2.3 From 666654ff6dcec5916a7eac8425a5ddaae3be1a0e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 6 Jan 2018 16:04:53 -0500 Subject: through ResetPokemonStorageSystem --- asm/pokemon_storage_system.s | 179 ----------------------------------- include/decoration.h | 1 - include/pokemon.h | 2 +- src/pokemon/pokemon_storage_system.c | 65 ++++++++++++- 4 files changed, 65 insertions(+), 182 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 8fc6cfdb2..0f7180cc2 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,185 +5,6 @@ .text - thumb_func_start ShowPokemonStorageSystem -ShowPokemonStorageSystem: @ 8096100 - push {lr} - ldr r0, _08096128 @ =Task_PokemonStorageSystem - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _0809612C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0 - strh r0, [r1, 0x8] - strh r0, [r1, 0xA] - bl ScriptContext2_Enable - pop {r0} - bx r0 - .align 2, 0 -_08096128: .4byte Task_PokemonStorageSystem -_0809612C: .4byte gTasks - thumb_func_end ShowPokemonStorageSystem - - thumb_func_start sub_8096130 -sub_8096130: @ 8096130 - push {lr} - ldr r0, _0809615C @ =Task_PokemonStorageSystem - movs r1, 0x50 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08096160 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - movs r0, 0 - strh r0, [r1, 0x8] - ldr r0, _08096164 @ =gUnknown_02038474 - ldrb r0, [r0] - strh r0, [r1, 0xA] - bl pal_fill_black - pop {r0} - bx r0 - .align 2, 0 -_0809615C: .4byte Task_PokemonStorageSystem -_08096160: .4byte gTasks -_08096164: .4byte gUnknown_02038474 - thumb_func_end sub_8096130 - - thumb_func_start StorageSystemCreatePrimaryMenu -StorageSystemCreatePrimaryMenu: @ 8096168 - push {r4,lr} - sub sp, 0x8 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0 - movs r1, 0 - movs r2, 0xD - movs r3, 0x9 - bl MenuDrawTextWindow - ldr r3, _080961A4 @ =gUnknown_083B600C - movs r0, 0x1 - movs r1, 0x1 - movs r2, 0x4 - bl PrintMenuItems - str r4, [sp] - movs r0, 0xC - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0x1 - movs r2, 0x1 - movs r3, 0x4 - bl InitMenu - add sp, 0x8 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080961A4: .4byte gUnknown_083B600C - thumb_func_end StorageSystemCreatePrimaryMenu - - thumb_func_start sub_80961A8 -sub_80961A8: @ 80961A8 - push {lr} - ldr r1, _080961C4 @ =gUnknown_02038474 - ldr r0, _080961C8 @ =gUnknown_083B6DB4 - ldr r0, [r0] - ldrb r0, [r0, 0x5] - strb r0, [r1] - ldr r1, _080961CC @ =gFieldCallback - ldr r0, _080961D0 @ =sub_8096130 - str r0, [r1] - ldr r0, _080961D4 @ =c2_exit_to_overworld_2_switch - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_080961C4: .4byte gUnknown_02038474 -_080961C8: .4byte gUnknown_083B6DB4 -_080961CC: .4byte gFieldCallback -_080961D0: .4byte sub_8096130 -_080961D4: .4byte c2_exit_to_overworld_2_switch - thumb_func_end sub_80961A8 - - thumb_func_start ResetPokemonStorageSystem -ResetPokemonStorageSystem: @ 80961D8 - push {r4-r7,lr} - ldr r1, _08096258 @ =gPokemonStorage - movs r0, 0 - strb r0, [r1] - movs r5, 0 - adds r7, r1, 0x4 -_080961E4: - movs r4, 0 - lsls r1, r5, 2 - adds r1, r5 - lsls r0, r1, 4 - subs r0, r1 - lsls r6, r0, 5 -_080961F0: - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 4 - adds r0, r7 - adds r0, r6, r0 - bl ZeroBoxMonData - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x1D - bls _080961F0 - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0xD - bls _080961E4 - movs r5, 0 -_08096214: - lsls r0, r5, 3 - adds r0, r5 - ldr r6, _0809625C @ =gPokemonStorage + 0x8344 - adds r0, r6 - ldr r1, _08096260 @ =gPCText_BOX - bl StringCopy - adds r4, r5, 0x1 - adds r1, r4, 0 - movs r2, 0 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - lsls r4, 16 - lsrs r5, r4, 16 - cmp r5, 0xD - bls _08096214 - movs r5, 0 - adds r3, r6, 0 - adds r3, 0x7E - movs r2, 0x3 -_0809623E: - adds r0, r5, r3 - adds r1, r5, 0 - ands r1, r2 - strb r1, [r0] - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0xD - bls _0809623E - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08096258: .4byte gPokemonStorage -_0809625C: .4byte gPokemonStorage + 0x8344 -_08096260: .4byte gPCText_BOX - thumb_func_end ResetPokemonStorageSystem - thumb_func_start sub_8096264 sub_8096264: @ 8096264 push {r4-r6,lr} diff --git a/include/decoration.h b/include/decoration.h index 3d619a598..4ac26998e 100644 --- a/include/decoration.h +++ b/include/decoration.h @@ -133,7 +133,6 @@ extern u8 gUnknown_020391A8; extern u8 gUnknown_020391A9; extern u8 gUnknown_020391AA; extern u8 gUnknown_02039234; -extern void (*gFieldCallback)(void); extern const struct YesNoFuncTable gUnknown_083EC96C[]; extern struct UnkStruct_020391B4 gUnknown_020391B4[16]; diff --git a/include/pokemon.h b/include/pokemon.h index 89599d994..7edd3395f 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -421,7 +421,7 @@ struct PokemonStorage /*0x0000*/ u8 currentBox; /*0x0004*/ struct BoxPokemon boxes[14][30]; /*0x8344*/ u8 boxNames[14][9]; - /*0x83c2*/ u8 unkArray[14]; + /*0x83c2*/ u8 wallpaper[14]; }; struct SpindaSpot diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index a5a3bdcd8..8f0753a2d 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -1,6 +1,8 @@ #include "global.h" #include "palette.h" #include "field_weather.h" +#include "overworld.h" +#include "field_fadetransition.h" #include "menu.h" #include "main.h" #include "strings.h" @@ -20,14 +22,21 @@ struct ReverseMenuAction { u8 *text; }; +struct PokemonStorageSystemData { + u8 filler_0000[5]; + u8 unk_0005; +}; + +const struct PokemonStorageSystemData *gUnknown_083B6DB4; + void StorageSystemCreatePrimaryMenu(u8 whichMenu); void task_intro_29(u8 whichMenu); extern const struct StorageAction gUnknown_083B6DF4[]; - extern const struct ReverseMenuAction gUnknown_083B600C[]; EWRAM_DATA struct PokemonStorage gPokemonStorage = {0}; +EWRAM_DATA u8 gUnknown_02038474; u8 sub_8095ADC(u8 boxId) { @@ -403,6 +412,60 @@ void Task_PokemonStorageSystem(u8 taskId) } } +void ShowPokemonStorageSystem(void) +{ + u8 taskId = CreateTask(Task_PokemonStorageSystem, 80); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + ScriptContext2_Enable(); +} + +void sub_8096130(void) +{ + u8 taskId = CreateTask(Task_PokemonStorageSystem, 80); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = gUnknown_02038474; + pal_fill_black(); +} + +void StorageSystemCreatePrimaryMenu(u8 a0) +{ + MenuDrawTextWindow(0, 0, 13, 9); + PrintMenuItems(1, 1, 4, (const struct MenuAction *)gUnknown_083B600C); + InitMenu(0, 1, 1, 4, a0, 12); +} + +void sub_80961A8(void) +{ + gUnknown_02038474 = gUnknown_083B6DB4->unk_0005; + gFieldCallback = sub_8096130; + SetMainCallback2(c2_exit_to_overworld_2_switch); +} + +void ResetPokemonStorageSystem(void) +{ + u16 boxId; + u16 boxMon; + + gPokemonStorage.currentBox = 0; + for (boxId = 0; boxId < 14; boxId++) + { + for (boxMon = 0; boxMon < 30; boxMon++) + { + ZeroBoxMonData(gPokemonStorage.boxes[boxId] + boxMon); + } + } + for (boxId = 0; boxId < 14; boxId++) + { + u8 *dest = StringCopy(gPokemonStorage.boxNames[boxId], gPCText_BOX); + ConvertIntToDecimalStringN(dest, boxId + 1, STR_CONV_MODE_LEFT_ALIGN, 2); + } + for (boxId = 0; boxId < 14; boxId++) + { + gPokemonStorage.wallpaper[boxId] = boxId & 0x03; + } +} + asm(".section .text.8098898"); void sub_8098898(u8 index) { -- cgit v1.2.3 From 92577647185e885298bfe3e4159f702730bdf310 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 6 Jan 2018 16:40:49 -0500 Subject: sub_8096264 --- asm/pokemon_storage_system.s | 81 ------------------------------ data/pokemon_storage_system.s | 55 -------------------- ld_script.txt | 1 + src/pokemon/pokemon_storage_system.c | 97 +++++++++++++++++++++++++++++++----- 4 files changed, 86 insertions(+), 148 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 0f7180cc2..d04e8cec7 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,87 +5,6 @@ .text - thumb_func_start sub_8096264 -sub_8096264: @ 8096264 - push {r4-r6,lr} - mov r6, r9 - mov r5, r8 - push {r5,r6} - sub sp, 0x20 - mov r8, r0 - adds r4, r1, 0 - adds r6, r2, 0 - mov r9, r3 - lsls r4, 16 - lsrs r4, 16 - lsls r6, 16 - lsrs r6, 16 - mov r0, r9 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - ldr r0, _080962F4 @ =gBoxSelectionPopupPalette - str r0, [sp, 0x18] - ldr r1, _080962F8 @ =0xffff0000 - add r5, sp, 0x18 - ldr r0, [r5, 0x4] - ands r0, r1 - orrs r0, r6 - str r0, [r5, 0x4] - mov r1, sp - ldr r0, _080962FC @ =gBoxSelectionPopupCenterTiles - str r0, [sp] - movs r0, 0x80 - lsls r0, 4 - strh r0, [r1, 0x4] - strh r4, [r1, 0x6] - ldr r0, _08096300 @ =gBoxSelectionPopupSidesTiles - str r0, [sp, 0x8] - movs r0, 0xC0 - lsls r0, 1 - strh r0, [r1, 0xC] - adds r0, r4, 0x1 - strh r0, [r1, 0xE] - add r0, sp, 0x10 - movs r1, 0 - movs r2, 0x8 - bl memset - adds r0, r5, 0 - bl LoadSpritePalette - mov r0, sp - bl LoadSpriteSheets - ldr r0, _08096304 @ =gUnknown_02038478 - mov r1, r8 - str r1, [r0] - movs r0, 0x90 - lsls r0, 2 - add r0, r8 - strh r4, [r0] - ldr r0, _08096308 @ =0x00000242 - add r0, r8 - strh r6, [r0] - ldr r0, _0809630C @ =0x0000023e - add r8, r0 - mov r0, r9 - mov r1, r8 - strb r0, [r1] - add sp, 0x20 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080962F4: .4byte gBoxSelectionPopupPalette -_080962F8: .4byte 0xffff0000 -_080962FC: .4byte gBoxSelectionPopupCenterTiles -_08096300: .4byte gBoxSelectionPopupSidesTiles -_08096304: .4byte gUnknown_02038478 -_08096308: .4byte 0x00000242 -_0809630C: .4byte 0x0000023e - thumb_func_end sub_8096264 - thumb_func_start sub_8096310 sub_8096310: @ 8096310 push {r4,r5,lr} diff --git a/data/pokemon_storage_system.s b/data/pokemon_storage_system.s index b765656f7..6bdb0edd0 100644 --- a/data/pokemon_storage_system.s +++ b/data/pokemon_storage_system.s @@ -3,61 +3,6 @@ .section .rodata - .align 2 -gUnknown_083B600C:: @ 83B600C - .4byte PCText_WithdrawPoke, PCText_MovePokeToParty - .4byte PCText_DepositPoke, PCText_StorePokeInBox - .4byte PCText_MovePoke, PCText_OrganizeBoxesParty - .4byte PCText_SeeYa, PCText_ReturnToPrevMenu - - .align 2 -gSpriteAnim_83B602C:: @ 83B602C - obj_image_anim_frame 0, 5 - obj_image_anim_end - - .align 2 -gSpriteAnim_83B6034:: @ 83B6034 - obj_image_anim_frame 4, 5 - obj_image_anim_end - - .align 2 -gSpriteAnim_83B603C:: @ 83B603C - obj_image_anim_frame 6, 5 - obj_image_anim_end - - .align 2 -gSpriteAnim_83B6044:: @ 83B6044 - obj_image_anim_frame 10, 5 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83B604C:: @ 83B604C - .4byte gSpriteAnim_83B602C - .4byte gSpriteAnim_83B6034 - .4byte gSpriteAnim_83B603C - .4byte gSpriteAnim_83B6044 - - .align 2 -gSpriteAffineAnim_83B605C:: @ 83B605C - obj_rot_scal_anim_frame 0xE0, 0xE0, 0, 0 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnimTable_83B606C:: @ 83B606C - .4byte gSpriteAffineAnim_83B605C - - .align 2 -gBoxSelectionPopupPalette:: @ 83B6070 - .incbin "graphics/pokemon_storage/box_selection_popup.gbapal" - - .align 2 -gBoxSelectionPopupCenterTiles:: @ 83B6090 - .incbin "graphics/pokemon_storage/box_selection_popup_center.4bpp" - - .align 2 -gBoxSelectionPopupSidesTiles:: @ 83B6890 - .incbin "graphics/pokemon_storage/box_selection_popup_sides.4bpp" - .align 2 gPokemonStorageScrollingBGPalette:: @ 83B6A10 .incbin "graphics/pokemon_storage/scrolling_bg.gbapal" diff --git a/ld_script.txt b/ld_script.txt index d0256f397..4ac9ea4ee 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -510,6 +510,7 @@ SECTIONS { src/pokemon/pokedex.o(.rodata); src/engine/trainer_card.o(.rodata); src/battle/battle_party_menu.o(.rodata); + src/pokemon/pokemon_storage_system.o(.rodata); data/pokemon_storage_system.o(.rodata); src/pokemon/pokemon_icon.o(.rodata); src/pokemon/pokemon_summary_screen.o(.rodata); diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index 8f0753a2d..bc43616a9 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -17,9 +17,9 @@ struct StorageAction { u8 format; }; -struct ReverseMenuAction { - u32 unk0; - u8 *text; +struct PSS_MenuStringPtrs { + const u8 *text; + const u8 *desc; }; struct PokemonStorageSystemData { @@ -27,16 +27,71 @@ struct PokemonStorageSystemData { u8 unk_0005; }; -const struct PokemonStorageSystemData *gUnknown_083B6DB4; +struct UnkPSSStruct_2002370 { + u8 filler_0000[0x23e]; + u8 unk_023e; + u16 unk_0240; + u16 unk_0242; +}; void StorageSystemCreatePrimaryMenu(u8 whichMenu); void task_intro_29(u8 whichMenu); +const struct PSS_MenuStringPtrs gUnknown_083B600C[] = { + {PCText_WithdrawPoke, PCText_MovePokeToParty}, + {PCText_DepositPoke, PCText_StorePokeInBox}, + {PCText_MovePoke, PCText_OrganizeBoxesParty}, + {PCText_SeeYa, PCText_ReturnToPrevMenu} +}; + +const union AnimCmd gSpriteAnim_83B602C[] = { + ANIMCMD_FRAME( 0, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_83B6034[] = { + ANIMCMD_FRAME( 4, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_83B603C[] = { + ANIMCMD_FRAME( 6, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_83B6044[] = { + ANIMCMD_FRAME(10, 5), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_83B604C[] = { + gSpriteAnim_83B602C, + gSpriteAnim_83B6034, + gSpriteAnim_83B603C, + gSpriteAnim_83B6044 +}; + +const union AffineAnimCmd gSpriteAffineAnim_83B605C[] = { + AFFINEANIMCMD_FRAME(0xe0, 0xe0, 0, 0), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83B606C[] = { + gSpriteAffineAnim_83B605C +}; + +const u16 gBoxSelectionPopupPalette[] = INCBIN_U16("graphics/pokemon_storage/box_selection_popup.gbapal"); + +const u8 gBoxSelectionPopupCenterTiles[] = INCBIN_U8("graphics/pokemon_storage/box_selection_popup_center.4bpp"); + +const u8 gBoxSelectionPopupSidesTiles[] = INCBIN_U8("graphics/pokemon_storage/box_selection_popup_sides.4bpp"); + extern const struct StorageAction gUnknown_083B6DF4[]; -extern const struct ReverseMenuAction gUnknown_083B600C[]; +extern const struct PokemonStorageSystemData *gUnknown_083B6DB4; EWRAM_DATA struct PokemonStorage gPokemonStorage = {0}; EWRAM_DATA u8 gUnknown_02038474; +EWRAM_DATA struct UnkPSSStruct_2002370 *gUnknown_02038478; u8 sub_8095ADC(u8 boxId) { @@ -318,7 +373,7 @@ void Task_PokemonStorageSystem(u8 taskId) case 0: StorageSystemCreatePrimaryMenu(task->data[1]); MenuDisplayMessageBox(); - MenuPrint(gUnknown_083B600C[task->data[1]].text, 2, 15); + MenuPrint(gUnknown_083B600C[task->data[1]].desc, 2, 15); task->data[0]++; break; case 1: @@ -342,7 +397,7 @@ void Task_PokemonStorageSystem(u8 taskId) { task->data[1] = task->data[3]; StorageSystemClearMessageWindow(); - MenuPrint(gUnknown_083B600C[task->data[1]].text, 2, 15); + MenuPrint(gUnknown_083B600C[task->data[1]].desc, 2, 15); } break; case -1: @@ -378,7 +433,7 @@ void Task_PokemonStorageSystem(u8 taskId) if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { StorageSystemClearMessageWindow(); - MenuPrint(gUnknown_083B600C[task->data[1]].text, 2, 15); + MenuPrint(gUnknown_083B600C[task->data[1]].desc, 2, 15); task->data[0] = 2; } else if (gMain.newKeys & DPAD_UP) @@ -388,7 +443,7 @@ void Task_PokemonStorageSystem(u8 taskId) MoveMenuCursor(-1); task->data[1] = GetMenuCursorPos(); StorageSystemClearMessageWindow(); - MenuPrint(gUnknown_083B600C[task->data[1]].text, 2, 15); + MenuPrint(gUnknown_083B600C[task->data[1]].desc, 2, 15); task->data[0] = 2; } else if (gMain.newKeys & DPAD_DOWN) @@ -398,7 +453,7 @@ void Task_PokemonStorageSystem(u8 taskId) MoveMenuCursor(1); task->data[1] = GetMenuCursorPos(); StorageSystemClearMessageWindow(); - MenuPrint(gUnknown_083B600C[task->data[1]].text, 2, 15); + MenuPrint(gUnknown_083B600C[task->data[1]].desc, 2, 15); task->data[0] = 2; } break; @@ -428,11 +483,11 @@ void sub_8096130(void) pal_fill_black(); } -void StorageSystemCreatePrimaryMenu(u8 a0) +void StorageSystemCreatePrimaryMenu(u8 whichMenu) { MenuDrawTextWindow(0, 0, 13, 9); PrintMenuItems(1, 1, 4, (const struct MenuAction *)gUnknown_083B600C); - InitMenu(0, 1, 1, 4, a0, 12); + InitMenu(0, 1, 1, 4, whichMenu, 12); } void sub_80961A8(void) @@ -466,6 +521,24 @@ void ResetPokemonStorageSystem(void) } } +void sub_8096264(struct UnkPSSStruct_2002370 *a0, u16 tileTag, u16 palTag, u8 a3) +{ + struct SpritePalette palette = { + gBoxSelectionPopupPalette, palTag + }; + struct SpriteSheet sheets[] = { + {gBoxSelectionPopupCenterTiles, 0x800, tileTag}, + {gBoxSelectionPopupSidesTiles, 0x180, tileTag + 1}, + {} + }; + LoadSpritePalette(&palette); + LoadSpriteSheets(sheets); + gUnknown_02038478 = a0; + a0->unk_0240 = tileTag; + a0->unk_0242 = palTag; + a0->unk_023e = a3; +} + asm(".section .text.8098898"); void sub_8098898(u8 index) { -- cgit v1.2.3 From aa023a5cb52c7b7a4cb2e23aadcd7db4bf0b3483 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 6 Jan 2018 22:21:05 -0500 Subject: through sub_80963D0 --- asm/pokemon_storage_system.s | 319 ----------------------------------- src/pokemon/pokemon_storage_system.c | 113 ++++++++++++- 2 files changed, 112 insertions(+), 320 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index d04e8cec7..ebbc84a5b 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,325 +5,6 @@ .text - thumb_func_start sub_8096310 -sub_8096310: @ 8096310 - push {r4,r5,lr} - ldr r4, _08096344 @ =gUnknown_02038478 - ldr r0, [r4] - ldr r1, _08096348 @ =0x00000242 - adds r0, r1 - ldrh r0, [r0] - bl FreeSpritePaletteByTag - ldr r0, [r4] - movs r5, 0x90 - lsls r5, 2 - adds r0, r5 - ldrh r0, [r0] - bl FreeSpriteTilesByTag - ldr r0, [r4] - adds r0, r5 - ldrh r0, [r0] - adds r0, 0x1 - lsls r0, 16 - lsrs r0, 16 - bl FreeSpriteTilesByTag - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08096344: .4byte gUnknown_02038478 -_08096348: .4byte 0x00000242 - thumb_func_end sub_8096310 - - thumb_func_start sub_809634C -sub_809634C: @ 809634C - push {lr} - lsls r0, 24 - lsrs r0, 24 - bl sub_80963D0 - pop {r0} - bx r0 - thumb_func_end sub_809634C - - thumb_func_start sub_809635C -sub_809635C: @ 809635C - push {lr} - bl sub_809658C - pop {r0} - bx r0 - thumb_func_end sub_809635C - - thumb_func_start sub_8096368 -sub_8096368: @ 8096368 - push {lr} - ldr r0, _08096380 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _08096384 - movs r0, 0x5 - bl PlaySE - movs r0, 0xC9 - b _080963CC - .align 2, 0 -_08096380: .4byte gMain -_08096384: - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _080963A4 - movs r0, 0x5 - bl PlaySE - ldr r0, _080963A0 @ =gUnknown_02038478 - ldr r0, [r0] - movs r1, 0x8F - lsls r1, 2 - adds r0, r1 - ldrb r0, [r0] - b _080963CC - .align 2, 0 -_080963A0: .4byte gUnknown_02038478 -_080963A4: - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _080963B8 - movs r0, 0x5 - bl PlaySE - bl sub_809662C - b _080963CA -_080963B8: - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _080963CA - movs r0, 0x5 - bl PlaySE - bl sub_80965F8 -_080963CA: - movs r0, 0xC8 -_080963CC: - pop {r1} - bx r1 - thumb_func_end sub_8096368 - - thumb_func_start sub_80963D0 -sub_80963D0: @ 80963D0 - push {r4-r6,lr} - sub sp, 0x3C - adds r5, r0, 0 - lsls r5, 24 - lsrs r5, 24 - movs r0, 0 - movs r1, 0 - str r0, [sp, 0x34] - str r1, [sp, 0x38] - movs r1, 0xC0 - lsls r1, 24 - ldr r0, [sp, 0x34] - orrs r0, r1 - str r0, [sp, 0x34] - ldr r1, _08096564 @ =0xffff0fff - add r4, sp, 0x34 - ldr r0, [r4, 0x4] - ands r0, r1 - movs r1, 0x80 - lsls r1, 5 - orrs r0, r1 - str r0, [r4, 0x4] - add r1, sp, 0x1C - movs r2, 0 - strh r2, [r1] - mov r0, sp - adds r0, 0x1E - strh r2, [r0] - str r4, [sp, 0x20] - ldr r0, _08096568 @ =gDummySpriteAnimTable - str r0, [sp, 0x24] - str r2, [sp, 0x28] - ldr r0, _0809656C @ =gDummySpriteAffineAnimTable - str r0, [sp, 0x2C] - ldr r0, _08096570 @ =SpriteCallbackDummy - str r0, [sp, 0x30] - add r0, sp, 0x4 - movs r2, 0x18 - bl memcpy - ldr r6, _08096574 @ =gUnknown_02038478 - ldr r0, [r6] - movs r1, 0x8F - lsls r1, 2 - adds r0, r1 - strb r5, [r0] - add r2, sp, 0x4 - ldr r1, [r6] - movs r5, 0x90 - lsls r5, 2 - adds r0, r1, r5 - ldrh r0, [r0] - strh r0, [r2] - ldr r3, _08096578 @ =0x00000242 - adds r1, r3 - ldrh r0, [r1] - strh r0, [r2, 0x2] - adds r0, r2, 0 - movs r1, 0xA0 - movs r2, 0x60 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - ldr r3, [r6] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0809657C @ =gSprites - adds r0, r1 - str r0, [r3] - ldrb r2, [r4, 0x1] - movs r1, 0x3F - adds r0, r1, 0 - ands r0, r2 - movs r2, 0x80 - orrs r0, r2 - strb r0, [r4, 0x1] - ldrb r0, [r4, 0x3] - ands r1, r0 - movs r0, 0x40 - orrs r1, r0 - strb r1, [r4, 0x3] - add r1, sp, 0x4 - adds r3, r5 - ldrh r0, [r3] - adds r0, 0x1 - strh r0, [r1] - ldr r0, _08096580 @ =gSpriteAnimTable_83B604C - str r0, [sp, 0xC] - movs r4, 0 -_08096488: - ldr r0, [r6] - ldr r1, _08096584 @ =0x0000023e - adds r0, r1 - ldrb r3, [r0] - add r0, sp, 0x4 - movs r1, 0x7C - movs r2, 0x50 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - ldr r2, [r6] - lsls r3, r4, 2 - adds r2, 0x4 - adds r2, r3 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0809657C @ =gSprites - adds r1, r0, r1 - str r1, [r2] - movs r5, 0 - movs r0, 0x2 - ands r0, r4 - cmp r0, 0 - beq _080964C2 - movs r0, 0xC4 - strh r0, [r1, 0x20] - movs r5, 0x2 -_080964C2: - movs r0, 0x1 - ands r0, r4 - cmp r0, 0 - beq _080964E6 - ldr r1, [r6] - adds r1, 0x4 - adds r1, r3 - ldr r2, [r1] - movs r0, 0x70 - strh r0, [r2, 0x22] - ldr r2, [r1] - ldrb r1, [r2, 0x3] - movs r0, 0x3F - ands r0, r1 - strb r0, [r2, 0x3] - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 -_080964E6: - ldr r0, [r6] - adds r0, 0x4 - adds r0, r3 - ldr r0, [r0] - lsls r1, r5, 24 - lsrs r1, 24 - bl StartSpriteAnim - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x3 - bls _08096488 - movs r4, 0 - ldr r5, _08096574 @ =gUnknown_02038478 -_08096504: - lsls r0, r4, 3 - adds r0, r4 - lsls r0, 19 - movs r3, 0xF8 - lsls r3, 15 - adds r0, r3 - lsrs r0, 16 - lsls r2, r4, 24 - lsrs r2, 24 - ldr r1, [r5] - ldr r3, _08096584 @ =0x0000023e - adds r1, r3 - ldrb r1, [r1] - str r1, [sp] - movs r1, 0x58 - movs r3, 0 - bl sub_809A9A0 - adds r2, r0, 0 - ldr r0, [r5] - lsls r1, r4, 2 - adds r0, 0x20 - adds r0, r1 - str r2, [r0] - cmp r2, 0 - beq _0809654C - movs r1, 0x1 - cmp r4, 0 - bne _08096544 - movs r3, 0x1 - negs r3, r3 - adds r1, r3, 0 -_08096544: - strh r1, [r2, 0x2E] - ldr r1, [r0] - ldr r0, _08096588 @ =sub_8096784 - str r0, [r1, 0x1C] -_0809654C: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x1 - bls _08096504 - bl sub_809665C - add sp, 0x3C - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08096564: .4byte 0xffff0fff -_08096568: .4byte gDummySpriteAnimTable -_0809656C: .4byte gDummySpriteAffineAnimTable -_08096570: .4byte SpriteCallbackDummy -_08096574: .4byte gUnknown_02038478 -_08096578: .4byte 0x00000242 -_0809657C: .4byte gSprites -_08096580: .4byte gSpriteAnimTable_83B604C -_08096584: .4byte 0x0000023e -_08096588: .4byte sub_8096784 - thumb_func_end sub_80963D0 - thumb_func_start sub_809658C sub_809658C: @ 809658C push {r4-r6,lr} diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index bc43616a9..37414f32b 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -1,5 +1,7 @@ #include "global.h" #include "palette.h" +#include "constants/songs.h" +#include "sound.h" #include "field_weather.h" #include "overworld.h" #include "field_fadetransition.h" @@ -28,7 +30,13 @@ struct PokemonStorageSystemData { }; struct UnkPSSStruct_2002370 { - u8 filler_0000[0x23e]; + struct Sprite *unk_0000; + struct Sprite *unk_0004[4]; + u32 unk_0014[3]; + struct Sprite *unk_0020[2]; + u8 filler_0028[0x214]; + u8 unk_023c; + u8 unk_023d; u8 unk_023e; u16 unk_0240; u16 unk_0242; @@ -36,6 +44,13 @@ struct UnkPSSStruct_2002370 { void StorageSystemCreatePrimaryMenu(u8 whichMenu); void task_intro_29(u8 whichMenu); +void sub_80963D0(u8 a0); +void sub_809658C(void); +void sub_80965F8(void); +void sub_809662C(void); +void sub_809665C(void); +void sub_8096784(struct Sprite *sprite); +struct Sprite *sub_809A9A0(u16 a0, u16 a1, u8 a2, u8 a3, u8 a4); const struct PSS_MenuStringPtrs gUnknown_083B600C[] = { {PCText_WithdrawPoke, PCText_MovePokeToParty}, @@ -539,6 +554,102 @@ void sub_8096264(struct UnkPSSStruct_2002370 *a0, u16 tileTag, u16 palTag, u8 a3 a0->unk_023e = a3; } +void sub_8096310(void) +{ + FreeSpritePaletteByTag(gUnknown_02038478->unk_0242); + FreeSpriteTilesByTag(gUnknown_02038478->unk_0240); + FreeSpriteTilesByTag(gUnknown_02038478->unk_0240 + 1); +} + +void sub_809634C(u8 a0) +{ + sub_80963D0(a0); +} + +void sub_809635C(void) +{ + sub_809658C(); +} + +u8 sub_8096368(void) +{ + if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + return 201; + } + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + return gUnknown_02038478->unk_023c; + } + if (gMain.newKeys & DPAD_LEFT) + { + PlaySE(SE_SELECT); + sub_809662C(); + } + else if (gMain.newKeys & DPAD_RIGHT) + { + PlaySE(SE_SELECT); + sub_80965F8(); + } + return 200; +} + +void sub_80963D0(u8 a0) +{ + u16 i; + u8 spriteId; + struct SpriteTemplate template; + struct OamData oamData = {}; + oamData.size = 3; + oamData.paletteNum = 1; + template = (struct SpriteTemplate){ + 0, 0, &oamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy + }; + + gUnknown_02038478->unk_023c = a0; + template.tileTag = gUnknown_02038478->unk_0240; + template.paletteTag = gUnknown_02038478->unk_0242; + + spriteId = CreateSprite(&template, 0xa0, 0x60, 0); + gUnknown_02038478->unk_0000 = gSprites + spriteId; + + oamData.shape = ST_OAM_V_RECTANGLE; + oamData.size = 1; + template.tileTag = gUnknown_02038478->unk_0240 + 1; + template.anims = gSpriteAnimTable_83B604C; + for (i = 0; i < 4; i++) + { + u16 r5; + spriteId = CreateSprite(&template, 0x7c, 0x50, gUnknown_02038478->unk_023e); + gUnknown_02038478->unk_0004[i] = gSprites + spriteId; + r5 = 0; + if (i & 2) + { + gUnknown_02038478->unk_0004[i]->pos1.x = 0xc4; + r5 = 2; + } + if (i & 1) + { + gUnknown_02038478->unk_0004[i]->pos1.y = 0x70; + gUnknown_02038478->unk_0004[i]->oam.size = 0; + r5++; + } + StartSpriteAnim(gUnknown_02038478->unk_0004[i], r5); + } + for (i = 0; i < 2; i++) + { + gUnknown_02038478->unk_0020[i] = sub_809A9A0(72 * i + 0x7c, 0x58, i, 0, gUnknown_02038478->unk_023e); + if (gUnknown_02038478->unk_0020[i]) + { + gUnknown_02038478->unk_0020[i]->data[0] = (i == 0 ? -1 : 1); + gUnknown_02038478->unk_0020[i]->callback = sub_8096784; + } + } + sub_809665C(); +} + asm(".section .text.8098898"); void sub_8098898(u8 index) { -- cgit v1.2.3 From 92fa7570b99d216f75becbd362a124a12cc1dcde Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 7 Jan 2018 18:44:14 -0500 Subject: through task_intro_29 --- asm/pokemon_storage_system.s | 309 +---------------------------------- include/ewram.h | 1 + src/pokemon/pokemon_storage_system.c | 125 ++++++++++++-- 3 files changed, 116 insertions(+), 319 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index ebbc84a5b..b4addb8e7 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,313 +5,6 @@ .text - thumb_func_start sub_809658C -sub_809658C: @ 809658C - push {r4-r6,lr} - ldr r4, _080965F4 @ =gUnknown_02038478 - ldr r0, [r4] - ldr r0, [r0] - cmp r0, 0 - beq _080965A2 - bl DestroySprite - ldr r1, [r4] - movs r0, 0 - str r0, [r1] -_080965A2: - movs r5, 0 - adds r6, r4, 0 -_080965A6: - ldr r0, [r6] - lsls r4, r5, 2 - adds r0, 0x4 - adds r0, r4 - ldr r0, [r0] - cmp r0, 0 - beq _080965C2 - bl DestroySprite - ldr r0, [r6] - adds r0, 0x4 - adds r0, r4 - movs r1, 0 - str r1, [r0] -_080965C2: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x3 - bls _080965A6 - movs r5, 0 -_080965CE: - ldr r0, _080965F4 @ =gUnknown_02038478 - ldr r0, [r0] - lsls r1, r5, 2 - adds r0, 0x20 - adds r0, r1 - ldr r0, [r0] - cmp r0, 0 - beq _080965E2 - bl DestroySprite -_080965E2: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x1 - bls _080965CE - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080965F4: .4byte gUnknown_02038478 - thumb_func_end sub_809658C - - thumb_func_start sub_80965F8 -sub_80965F8: @ 80965F8 - push {lr} - ldr r2, _08096628 @ =gUnknown_02038478 - ldr r1, [r2] - movs r0, 0x8F - lsls r0, 2 - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0xD - bls _0809661E - ldr r0, [r2] - movs r1, 0x8F - lsls r1, 2 - adds r0, r1 - movs r1, 0 - strb r1, [r0] -_0809661E: - bl sub_809665C - pop {r0} - bx r0 - .align 2, 0 -_08096628: .4byte gUnknown_02038478 - thumb_func_end sub_80965F8 - - thumb_func_start sub_809662C -sub_809662C: @ 809662C - push {lr} - ldr r0, _08096644 @ =gUnknown_02038478 - ldr r2, [r0] - movs r1, 0x8F - lsls r1, 2 - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _08096648 - subs r1, r0, 0x1 - b _0809664A - .align 2, 0 -_08096644: .4byte gUnknown_02038478 -_08096648: - movs r1, 0xD -_0809664A: - movs r3, 0x8F - lsls r3, 2 - adds r0, r2, r3 - strb r1, [r0] - bl sub_809665C - pop {r0} - bx r0 - thumb_func_end sub_809662C - - thumb_func_start sub_809665C -sub_809665C: @ 809665C - push {r4-r7,lr} - ldr r5, _080966B4 @ =gUnknown_02038478 - ldr r0, [r5] - movs r4, 0x8F - lsls r4, 2 - adds r0, r4 - ldrb r0, [r0] - bl sub_8095ADC - lsls r0, 24 - lsrs r7, r0, 24 - ldr r2, _080966B8 @ =gStringVar1 - movs r6, 0xFC - strb r6, [r2] - movs r0, 0x4 - strb r0, [r2, 0x1] - movs r0, 0xF - strb r0, [r2, 0x2] - movs r0, 0x1 - strb r0, [r2, 0x3] - movs r0, 0xE - strb r0, [r2, 0x4] - adds r2, 0x5 - ldr r0, [r5] - adds r0, r4 - ldrb r0, [r0] - lsls r1, r0, 3 - adds r1, r0 - ldr r0, _080966BC @ =gPokemonStorage + 0x8344 - adds r1, r0 - adds r0, r2, 0 - bl StringCopy - adds r2, r0, 0 - movs r0, 0xFE - strb r0, [r2] - strb r6, [r2, 0x1] - movs r0, 0x11 - strb r0, [r2, 0x2] - cmp r7, 0x9 - bhi _080966C0 - movs r0, 0x28 - b _080966C2 - .align 2, 0 -_080966B4: .4byte gUnknown_02038478 -_080966B8: .4byte gStringVar1 -_080966BC: .4byte gPokemonStorage + 0x8344 -_080966C0: - movs r0, 0x22 -_080966C2: - strb r0, [r2, 0x3] - adds r2, 0x4 - adds r0, r2, 0 - adds r1, r7, 0 - bl ConvertIntToDecimalString - adds r2, r0, 0 - movs r0, 0xBA - strb r0, [r2] - movs r0, 0xA4 - strb r0, [r2, 0x1] - movs r0, 0xA1 - strb r0, [r2, 0x2] - movs r0, 0xFF - strb r0, [r2, 0x3] - ldr r0, _080966F0 @ =gStringVar1 - movs r1, 0 - movs r2, 0x1 - bl sub_80966F4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080966F0: .4byte gStringVar1 - thumb_func_end sub_809665C - - thumb_func_start sub_80966F4 -sub_80966F4: @ 80966F4 - push {r4-r6,lr} - mov r6, r8 - push {r6} - sub sp, 0x4 - mov r8, r0 - adds r5, r1, 0 - adds r4, r2, 0 - lsls r5, 16 - lsrs r5, 16 - lsls r4, 16 - lsrs r4, 16 - ldr r0, _08096764 @ =gUnknown_02038478 - ldr r0, [r0] - movs r1, 0x90 - lsls r1, 2 - adds r0, r1 - ldrh r0, [r0] - bl GetSpriteTileStartByTag - adds r6, r0, 0 - lsls r6, 16 - lsrs r6, 11 - lsls r4, 8 - ldr r2, _08096768 @ =0x06010000 - adds r4, r2 - adds r6, r4 - lsls r5, 5 - adds r6, r5 - ldr r0, _0809676C @ =gUnknown_083B6DB8 - ldr r5, [r0] - mov r1, sp - ldr r2, _08096770 @ =0x00001111 - adds r0, r2, 0 - strh r0, [r1] - ldr r4, _08096774 @ =0x040000d4 - str r1, [r4] - str r5, [r4, 0x4] - ldr r0, _08096778 @ =0x81000200 - str r0, [r4, 0x8] - ldr r0, [r4, 0x8] - ldr r0, _0809677C @ =gWindowConfig_81E6D38 - adds r1, r5, 0 - mov r2, r8 - bl sub_8004E3C - str r5, [r4] - str r6, [r4, 0x4] - ldr r0, _08096780 @ =0x80000200 - str r0, [r4, 0x8] - ldr r0, [r4, 0x8] - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08096764: .4byte gUnknown_02038478 -_08096768: .4byte 0x06010000 -_0809676C: .4byte gUnknown_083B6DB8 -_08096770: .4byte 0x00001111 -_08096774: .4byte 0x040000d4 -_08096778: .4byte 0x81000200 -_0809677C: .4byte gWindowConfig_81E6D38 -_08096780: .4byte 0x80000200 - thumb_func_end sub_80966F4 - - thumb_func_start sub_8096784 -sub_8096784: @ 8096784 - push {lr} - adds r1, r0, 0 - ldrh r0, [r1, 0x30] - adds r0, 0x1 - movs r2, 0 - strh r0, [r1, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3 - ble _080967B4 - strh r2, [r1, 0x30] - ldrh r0, [r1, 0x2E] - ldrh r3, [r1, 0x24] - adds r0, r3 - strh r0, [r1, 0x24] - ldrh r0, [r1, 0x32] - adds r0, 0x1 - strh r0, [r1, 0x32] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x5 - ble _080967B4 - strh r2, [r1, 0x32] - strh r2, [r1, 0x24] -_080967B4: - pop {r0} - bx r0 - thumb_func_end sub_8096784 - - thumb_func_start task_intro_29 -task_intro_29: @ 80967B8 - push {lr} - lsls r0, 24 - lsrs r0, 24 - ldr r1, _080967D0 @ =gUnknown_0203847D - strb r0, [r1] - ldr r1, _080967D4 @ =gSharedMem - strb r0, [r1, 0x5] - ldr r0, _080967D8 @ =sub_8096884 - bl SetMainCallback2 - pop {r0} - bx r0 - .align 2, 0 -_080967D0: .4byte gUnknown_0203847D -_080967D4: .4byte gSharedMem -_080967D8: .4byte sub_8096884 - thumb_func_end task_intro_29 - thumb_func_start sub_80967DC sub_80967DC: @ 80967DC ldr r0, _08096800 @ =REG_BG0HOFS @@ -9960,7 +9653,7 @@ sub_809B62C: @ 809B62C lsls r0, 24 lsrs r6, r0, 24 adds r0, r6, 0 - bl sub_8095B24 + bl GetIndexOfFirstEmptySpaceInBoxN lsls r0, 16 lsrs r4, r0, 16 asrs r0, 16 diff --git a/include/ewram.h b/include/ewram.h index 5a350840a..9a281368f 100755 --- a/include/ewram.h +++ b/include/ewram.h @@ -28,6 +28,7 @@ extern u8 gSharedMem[]; #define ewram0_9(i) (u8 *)(ewram_addr + (i * 0x20)) #define ewram0_10 (*(struct UnknownPokenav0*)(gSharedMem + 0)) #define ewram0_11 (*(struct UnknownPokenav0_1*)(gSharedMem + 0)) +#define ePokemonStorageSystem (*(struct PokemonStorageSystemData *)(gSharedMem + 0)) #define ewram4 (*(struct UnknownStruct8 *)(gSharedMem + 0x4)) #define ewram520 ((struct UnknownStruct7 *)(gSharedMem + 0x00520)) #define ewram520_2 (u8 *)(ewram_addr + 0x520) diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index 37414f32b..30c0f2b67 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -35,7 +35,7 @@ struct UnkPSSStruct_2002370 { u32 unk_0014[3]; struct Sprite *unk_0020[2]; u8 filler_0028[0x214]; - u8 unk_023c; + u8 curBox; u8 unk_023d; u8 unk_023e; u16 unk_0240; @@ -43,13 +43,15 @@ struct UnkPSSStruct_2002370 { }; void StorageSystemCreatePrimaryMenu(u8 whichMenu); -void task_intro_29(u8 whichMenu); -void sub_80963D0(u8 a0); +void sub_80963D0(u8 curBox); void sub_809658C(void); void sub_80965F8(void); void sub_809662C(void); void sub_809665C(void); +void sub_80966F4(const u8 *sourceString, u16 x, u16 y); void sub_8096784(struct Sprite *sprite); +void task_intro_29(u8 whichMenu); +void sub_8096884(void); struct Sprite *sub_809A9A0(u16 a0, u16 a1, u8 a2, u8 a3, u8 a4); const struct PSS_MenuStringPtrs gUnknown_083B600C[] = { @@ -103,12 +105,15 @@ const u8 gBoxSelectionPopupSidesTiles[] = INCBIN_U8("graphics/pokemon_storage/bo extern const struct StorageAction gUnknown_083B6DF4[]; extern const struct PokemonStorageSystemData *gUnknown_083B6DB4; +extern u8 *const gUnknown_083B6DB8; EWRAM_DATA struct PokemonStorage gPokemonStorage = {0}; EWRAM_DATA u8 gUnknown_02038474; EWRAM_DATA struct UnkPSSStruct_2002370 *gUnknown_02038478; +EWRAM_DATA u8 gUnknown_0203847C; +EWRAM_DATA u8 gUnknown_0203847D; -u8 sub_8095ADC(u8 boxId) +static u8 CountPokemonInBoxN(u8 boxId) { u16 i; u16 count; @@ -121,7 +126,7 @@ u8 sub_8095ADC(u8 boxId) return count; } -s16 sub_8095B24(u8 boxId) +s16 GetIndexOfFirstEmptySpaceInBoxN(u8 boxId) { u16 i; @@ -561,9 +566,9 @@ void sub_8096310(void) FreeSpriteTilesByTag(gUnknown_02038478->unk_0240 + 1); } -void sub_809634C(u8 a0) +void sub_809634C(u8 curBox) { - sub_80963D0(a0); + sub_80963D0(curBox); } void sub_809635C(void) @@ -581,7 +586,7 @@ u8 sub_8096368(void) if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); - return gUnknown_02038478->unk_023c; + return gUnknown_02038478->curBox; } if (gMain.newKeys & DPAD_LEFT) { @@ -596,7 +601,7 @@ u8 sub_8096368(void) return 200; } -void sub_80963D0(u8 a0) +void sub_80963D0(u8 curBox) { u16 i; u8 spriteId; @@ -608,11 +613,11 @@ void sub_80963D0(u8 a0) 0, 0, &oamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy }; - gUnknown_02038478->unk_023c = a0; + gUnknown_02038478->curBox = curBox; template.tileTag = gUnknown_02038478->unk_0240; template.paletteTag = gUnknown_02038478->unk_0242; - spriteId = CreateSprite(&template, 0xa0, 0x60, 0); + spriteId = CreateSprite(&template, 0xA0, 0x60, 0); gUnknown_02038478->unk_0000 = gSprites + spriteId; oamData.shape = ST_OAM_V_RECTANGLE; @@ -650,6 +655,104 @@ void sub_80963D0(u8 a0) sub_809665C(); } +void sub_809658C(void) +{ + u16 i; + if (gUnknown_02038478->unk_0000) + { + DestroySprite(gUnknown_02038478->unk_0000); + gUnknown_02038478->unk_0000 = NULL; + } + for (i = 0; i < 4; i++) + { + if (gUnknown_02038478->unk_0004[i]) + { + DestroySprite(gUnknown_02038478->unk_0004[i]); + gUnknown_02038478->unk_0004[i] = NULL; + } + } + for (i = 0; i < 2; i++) + { + if (gUnknown_02038478->unk_0020[i]) + DestroySprite(gUnknown_02038478->unk_0020[i]); + } +} + +void sub_80965F8(void) +{ + if (++gUnknown_02038478->curBox > 13) + gUnknown_02038478->curBox = 0; + sub_809665C(); +} + +void sub_809662C(void) +{ + gUnknown_02038478->curBox = (gUnknown_02038478->curBox == 0 ? 13 : gUnknown_02038478->curBox - 1); + sub_809665C(); +} + +void sub_809665C(void) +{ + u8 nPokemonInBox = CountPokemonInBoxN(gUnknown_02038478->curBox); + u8 *stringVar = gStringVar1; + + stringVar[0] = EXT_CTRL_CODE_BEGIN; + stringVar[1] = 0x04; // EXT_CTRL_CODE_COLOR_HIGHLIGHT_SHADOW + stringVar[2] = 0x0F; // TEXT_COLOR_WHITE2 + stringVar[3] = 0x01; // TEXT_COLOR_DARK_GREY + stringVar[4] = 0x0E; // TEXT_COLOR_LIGHT_BLUE + stringVar += 5; + + stringVar = StringCopy(stringVar, gPokemonStorage.boxNames[gUnknown_02038478->curBox]); + + stringVar[0] = CHAR_NEWLINE; + stringVar[1] = EXT_CTRL_CODE_BEGIN; + stringVar[2] = 0x11; // EXT_CTRL_CODE_CLEAR + if (nPokemonInBox < 10) + stringVar[3] = 0x28; + else + stringVar[3] = 0x22; + stringVar += 4; + + stringVar = ConvertIntToDecimalString(stringVar, nPokemonInBox); + + stringVar[0] = CHAR_SLASH; + stringVar[1] = CHAR_0 + 3; + stringVar[2] = CHAR_0 + 0; + stringVar[3] = EOS; + sub_80966F4(gStringVar1, 0, 1); +} + +void sub_80966F4(const u8 *sourceString, u16 x, u16 y) +{ + u16 *vdest = (u16 *)(BG_CHAR_ADDR(4) + (GetSpriteTileStartByTag(gUnknown_02038478->unk_0240) * 32) + y * 256 + x * 32); + u8 *tileBuff = gUnknown_083B6DB8; + DmaFill16(3, 0x1111, tileBuff, 0x400); + sub_8004E3C(&gWindowConfig_81E6D38, tileBuff, sourceString); + DmaCopy16(3, tileBuff, vdest, 0x400); +} + +void sub_8096784(struct Sprite *sprite) +{ + if (++sprite->data[1] > 3) + { + sprite->data[1] = 0; + sprite->pos2.x += sprite->data[0]; + if (++sprite->data[2] > 5) + { + sprite->data[2] = 0; + sprite->pos2.x = 0; + } + } +} + +void task_intro_29(u8 whichMenu) +{ + gUnknown_0203847D = whichMenu; + ePokemonStorageSystem.unk_0005 = whichMenu; + SetMainCallback2(sub_8096884); +} + asm(".section .text.8098898"); void sub_8098898(u8 index) { -- cgit v1.2.3 From b9ad9b3ad547b200e66b293169acbbfe4f50f76d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 7 Jan 2018 19:20:15 -0500 Subject: through sub_8096874 --- asm/pokemon_storage_system.s | 88 ------------------------------------ include/main.h | 2 + include/sprite.h | 1 + src/engine/naming_screen.c | 2 - src/field/use_pokeblock.c | 1 - src/pokemon/pokemon_storage_system.c | 47 +++++++++++++++++++ src/pokenav_before.c | 5 +- 7 files changed, 51 insertions(+), 95 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index b4addb8e7..da5d00899 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,94 +5,6 @@ .text - thumb_func_start sub_80967DC -sub_80967DC: @ 80967DC - ldr r0, _08096800 @ =REG_BG0HOFS - movs r1, 0 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - subs r0, 0x2 - strh r1, [r0] - adds r0, 0x4 - strh r1, [r0] - adds r0, 0x2 - strh r1, [r0] - bx lr - .align 2, 0 -_08096800: .4byte REG_BG0HOFS - thumb_func_end sub_80967DC - - thumb_func_start sub_8096804 -sub_8096804: @ 8096804 - push {lr} - bl ResetPaletteFade - bl ResetSpriteData - bl FreeSpriteTileRanges - bl FreeAllSpritePalettes - bl ResetTasks - ldr r1, _0809683C @ =gReservedSpriteTileCount - movs r2, 0xA0 - lsls r2, 2 - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _08096840 @ =gSharedMem + 0x20 - adds r1, r0, 0 - adds r1, 0x8 - movs r2, 0x8 - bl sub_809CFDC - ldr r1, _08096844 @ =gKeyRepeatStartDelay - movs r0, 0x14 - strh r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_0809683C: .4byte gReservedSpriteTileCount -_08096840: .4byte gSharedMem + 0x20 -_08096844: .4byte gKeyRepeatStartDelay - thumb_func_end sub_8096804 - - thumb_func_start sub_8096848 -sub_8096848: @ 8096848 - push {lr} - bl sub_809B0D4 - ldr r2, _08096868 @ =gUnknown_0203847C - movs r1, 0 - ldr r0, _0809686C @ =gSharedMem - ldrb r0, [r0, 0x5] - cmp r0, 0x1 - bne _0809685C - movs r1, 0x1 -_0809685C: - strb r1, [r2] - ldr r1, _08096870 @ =gUnknown_0203847E - movs r0, 0 - strb r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_08096868: .4byte gUnknown_0203847C -_0809686C: .4byte gSharedMem -_08096870: .4byte gUnknown_0203847E - thumb_func_end sub_8096848 - - thumb_func_start sub_8096874 -sub_8096874: @ 8096874 - movs r1, 0x80 - lsls r1, 19 - movs r2, 0xFA - lsls r2, 5 - adds r0, r2, 0 - strh r0, [r1] - bx lr - thumb_func_end sub_8096874 - thumb_func_start sub_8096884 sub_8096884: @ 8096884 push {lr} diff --git a/include/main.h b/include/main.h index ff9bb89c7..78403225e 100644 --- a/include/main.h +++ b/include/main.h @@ -51,6 +51,8 @@ extern bool8 gLinkVSyncDisabled; extern const u8 gGameVersion; extern const u8 gGameLanguage; +extern u16 gKeyRepeatStartDelay; + void AgbMain(void); void SetMainCallback2(MainCallback callback); void InitKeys(void); diff --git a/include/sprite.h b/include/sprite.h index b72c09989..3ad418356 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -235,6 +235,7 @@ extern const union AffineAnimCmd *const gDummySpriteAffineAnimTable[]; extern s16 gSpriteCoordOffsetX; extern s16 gSpriteCoordOffsetY; extern u8 gReservedSpritePaletteCount; +extern u16 gReservedSpriteTileCount; extern u8 gOamLimit; diff --git a/src/engine/naming_screen.c b/src/engine/naming_screen.c index 440504d5a..6f34fd678 100644 --- a/src/engine/naming_screen.c +++ b/src/engine/naming_screen.c @@ -26,8 +26,6 @@ #define COLUMN_COUNT 10 #endif -extern u16 gKeyRepeatStartDelay; - extern u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality); const u8 gSpriteImage_83CE094[] = INCBIN_U8("graphics/naming_screen/pc_icon/0.4bpp"); diff --git a/src/field/use_pokeblock.c b/src/field/use_pokeblock.c index 7253ac901..354193c14 100644 --- a/src/field/use_pokeblock.c +++ b/src/field/use_pokeblock.c @@ -104,7 +104,6 @@ static EWRAM_DATA struct Pokeblock *gUnknown_0203930C = NULL; EWRAM_DATA u8 gPokeblockMonID = 0; EWRAM_DATA s16 gPokeblockGain = 0; -extern u16 gKeyRepeatStartDelay; extern u16 gSpecialVar_ItemId; // FIXME: remove after merge of #349 Pokeblock static void launch_c3_walk_stairs_and_run_once(void (*const)(void)); diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index 30c0f2b67..9e559354b 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -24,9 +24,17 @@ struct PSS_MenuStringPtrs { const u8 *desc; }; +struct UnkStruct_2000020 { + struct UnkStruct_2000020 *unk_00; + u8 unk_04; + u8 unk_05; +}; + struct PokemonStorageSystemData { u8 filler_0000[5]; u8 unk_0005; + u8 filler_0006[26]; + struct UnkStruct_2000020 unk_0020[100]; // refine size later }; struct UnkPSSStruct_2002370 { @@ -53,6 +61,8 @@ void sub_8096784(struct Sprite *sprite); void task_intro_29(u8 whichMenu); void sub_8096884(void); struct Sprite *sub_809A9A0(u16 a0, u16 a1, u8 a2, u8 a3, u8 a4); +void sub_809B0D4(void); +void sub_809CFDC(struct UnkStruct_2000020 *a0, struct UnkStruct_2000020 * a1, u8 a2); const struct PSS_MenuStringPtrs gUnknown_083B600C[] = { {PCText_WithdrawPoke, PCText_MovePokeToParty}, @@ -112,6 +122,7 @@ EWRAM_DATA u8 gUnknown_02038474; EWRAM_DATA struct UnkPSSStruct_2002370 *gUnknown_02038478; EWRAM_DATA u8 gUnknown_0203847C; EWRAM_DATA u8 gUnknown_0203847D; +EWRAM_DATA u8 gUnknown_0203847E; static u8 CountPokemonInBoxN(u8 boxId) { @@ -753,6 +764,42 @@ void task_intro_29(u8 whichMenu) SetMainCallback2(sub_8096884); } +void sub_80967DC(void) +{ + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG2VOFS = 0; + REG_BG2HOFS = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; +} + +void sub_8096804(void) +{ + ResetPaletteFade(); + ResetSpriteData(); + FreeSpriteTileRanges(); + FreeAllSpritePalettes(); + ResetTasks(); + gReservedSpriteTileCount = 0x280; + sub_809CFDC(ePokemonStorageSystem.unk_0020, ePokemonStorageSystem.unk_0020 + 1, 8); + gKeyRepeatStartDelay = 20; +} + +void sub_8096848(void) +{ + sub_809B0D4(); + gUnknown_0203847C = (ePokemonStorageSystem.unk_0005 == 1 ? 1 : 0); + gUnknown_0203847E = 0; +} + +void sub_8096874(void) +{ + REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON; +} + asm(".section .text.8098898"); void sub_8098898(u8 index) { diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 7693cba7d..53f17b211 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -294,9 +294,6 @@ extern void sub_80F5BF0(); extern void sub_80F6F64(); extern void sub_80F19FC(); -extern u16 gKeyRepeatStartDelay; - - void sub_80EBA5C() { switch (gMain.state) { default: @@ -378,7 +375,7 @@ void sub_80EBC10() { u16 i; u16 *var1; - gKeyRepeatStartDelay = 0x14; + gKeyRepeatStartDelay = 20; ewram0_10.playerPartyCount = CalculatePlayerPartyCount(); ewram0_10.var6ddc = 0; ewram0_10.var9344 = 0; -- cgit v1.2.3 From bfeaa80fcd9409645325c2f7ae94850f970fbb58 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 7 Jan 2018 19:47:59 -0500 Subject: through sub_8096884 --- asm/pokemon_storage_system.s | 119 ----------------------------------- include/mon_markings.h | 26 ++++++++ src/pokemon/mon_markings.c | 20 +----- src/pokemon/pokemon_storage_system.c | 74 +++++++++++++++++++++- 4 files changed, 100 insertions(+), 139 deletions(-) create mode 100644 include/mon_markings.h diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index da5d00899..071ac48e9 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,125 +5,6 @@ .text - thumb_func_start sub_8096884 -sub_8096884: @ 8096884 - push {lr} - ldr r0, _080968A0 @ =gMain - ldr r1, _080968A4 @ =0x0000043c - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0x9 - bls _08096894 - b _08096986 -_08096894: - lsls r0, 2 - ldr r1, _080968A8 @ =_080968AC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080968A0: .4byte gMain -_080968A4: .4byte 0x0000043c -_080968A8: .4byte _080968AC - .align 2, 0 -_080968AC: - .4byte _080968D4 - .4byte _080968E8 - .4byte _080968F4 - .4byte _08096904 - .4byte _0809690E - .4byte _08096918 - .4byte _0809691E - .4byte _08096924 - .4byte _0809692A - .4byte _08096964 -_080968D4: - movs r0, 0 - bl SetVBlankCallback - movs r1, 0x80 - lsls r1, 19 - movs r0, 0 - strh r0, [r1] - bl sub_8096804 - b _0809697A -_080968E8: - ldr r0, _080968F0 @ =gWindowConfig_81E6D00 - bl SetUpWindowConfig - b _0809697A - .align 2, 0 -_080968F0: .4byte gWindowConfig_81E6D00 -_080968F4: - ldr r0, _08096900 @ =gWindowConfig_81E6D00 - bl InitMenuWindow - bl MenuZeroFillScreen - b _0809697A - .align 2, 0 -_08096900: .4byte gWindowConfig_81E6D00 -_08096904: - bl sub_80967DC - bl sub_8096848 - b _0809697A -_0809690E: - bl sub_8098B48 - bl sub_809AA24 - b _0809697A -_08096918: - bl sub_8097DE0 - b _0809697A -_0809691E: - bl sub_8097E70 - b _0809697A -_08096924: - bl sub_8098400 - b _0809697A -_0809692A: - ldr r0, _08096950 @ =gPokemonStorage - ldrb r0, [r0] - bl sub_8099BF8 - ldr r2, _08096954 @ =gSharedMem - ldr r1, _08096958 @ =0x000012bc - adds r0, r2, r1 - movs r1, 0xA - strh r1, [r0] - ldr r1, _0809695C @ =0x000012be - adds r2, r1 - ldr r1, _08096960 @ =0x0000dacb - strh r1, [r2] - bl sub_80F727C - bl sub_80F7404 - b _0809697A - .align 2, 0 -_08096950: .4byte gPokemonStorage -_08096954: .4byte gSharedMem -_08096958: .4byte 0x000012bc -_0809695C: .4byte 0x000012be -_08096960: .4byte 0x0000dacb -_08096964: - bl sub_8096874 - ldr r0, _0809698C @ =sub_8096BF0 - bl sub_8096BE0 - ldr r0, _08096990 @ =sub_8096B38 - bl SetMainCallback2 - ldr r0, _08096994 @ =sub_8096AFC - bl SetVBlankCallback -_0809697A: - ldr r1, _08096998 @ =gMain - ldr r0, _0809699C @ =0x0000043c - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_08096986: - pop {r0} - bx r0 - .align 2, 0 -_0809698C: .4byte sub_8096BF0 -_08096990: .4byte sub_8096B38 -_08096994: .4byte sub_8096AFC -_08096998: .4byte gMain -_0809699C: .4byte 0x0000043c - thumb_func_end sub_8096884 - thumb_func_start sub_80969A0 sub_80969A0: @ 80969A0 push {r4,lr} diff --git a/include/mon_markings.h b/include/mon_markings.h new file mode 100644 index 000000000..a2b0ac821 --- /dev/null +++ b/include/mon_markings.h @@ -0,0 +1,26 @@ +#ifndef POKERUBY_MON_MARKINGS_H +#define POKERUBY_MON_MARKINGS_H + +struct PokemonMarkMenu +{ + /*0x0000*/ u16 baseTileTag; + /*0x0002*/ u16 basePaletteTag; + /*0x0004*/ u8 markings; // bit flags + /*0x0005*/ s8 cursorPos; + /*0x0006*/ bool8 markingsArray[4]; + /*0x000A*/ u8 cursorBaseY; + /*0x000B*/ bool8 spriteSheetLoadRequired; + /*0x000C*/ struct Sprite *menuWindowSprites[2]; // upper and lower halves of menu window + /*0x0014*/ struct Sprite *menuMarkingSprites[4]; + /*0x0024*/ struct Sprite *menuTextSprite; + /*0x0028*/ const u8 *frameTiles; + /*0x002C*/ const u16 *framePalette; + /*0x0030*/ u8 menuWindowSpriteTiles[0x1000]; + /*0x1030*/ u8 filler1030[0x80]; + /*0x10B0*/ u8 tileLoadState; +}; + +void sub_80F7404(void); +void sub_80F727C(struct PokemonMarkMenu *ptr); + +#endif //POKERUBY_MON_MARKINGS_H diff --git a/src/pokemon/mon_markings.c b/src/pokemon/mon_markings.c index b4144ea34..d27719c4a 100644 --- a/src/pokemon/mon_markings.c +++ b/src/pokemon/mon_markings.c @@ -5,6 +5,7 @@ #include "constants/songs.h" #include "sound.h" #include "sprite.h" +#include "mon_markings.h" #ifdef GERMAN #define MENU_TEXT_SPRITE_X_OFFSET 24 @@ -12,25 +13,6 @@ #define MENU_TEXT_SPRITE_X_OFFSET 32 #endif -struct PokemonMarkMenu -{ - /*0x0000*/ u16 baseTileTag; - /*0x0002*/ u16 basePaletteTag; - /*0x0004*/ u8 markings; // bit flags - /*0x0005*/ s8 cursorPos; - /*0x0006*/ bool8 markingsArray[4]; - /*0x000A*/ u8 cursorBaseY; - /*0x000B*/ bool8 spriteSheetLoadRequired; - /*0x000C*/ struct Sprite *menuWindowSprites[2]; // upper and lower halves of menu window - /*0x0014*/ struct Sprite *menuMarkingSprites[4]; - /*0x0024*/ struct Sprite *menuTextSprite; - /*0x0028*/ const u8 *frameTiles; - /*0x002C*/ const u16 *framePalette; - /*0x0030*/ u8 menuWindowSpriteTiles[0x1000]; - /*0x1030*/ u8 filler1030[0x80]; - /*0x10B0*/ u8 tileLoadState; -}; - extern u8 gPokenavConditionMenuMisc_Gfx[]; extern u16 gUnknown_08E966B8[]; diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index 9e559354b..91d56a4b9 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -3,6 +3,7 @@ #include "constants/songs.h" #include "sound.h" #include "field_weather.h" +#include "mon_markings.h" #include "overworld.h" #include "field_fadetransition.h" #include "menu.h" @@ -34,7 +35,9 @@ struct PokemonStorageSystemData { u8 filler_0000[5]; u8 unk_0005; u8 filler_0006[26]; - struct UnkStruct_2000020 unk_0020[100]; // refine size later + struct UnkStruct_2000020 unk_0020[595]; // refine size later + u8 filler_12b8[4]; + struct PokemonMarkMenu unk_12bc; }; struct UnkPSSStruct_2002370 { @@ -60,6 +63,16 @@ void sub_80966F4(const u8 *sourceString, u16 x, u16 y); void sub_8096784(struct Sprite *sprite); void task_intro_29(u8 whichMenu); void sub_8096884(void); +void sub_8096AFC(void); +void sub_8096B38(void); +void sub_8096BE0(void (*func)(void)); +void sub_8096BF0(void); +void sub_8097DE0(void); +void sub_8097E70(void); +void sub_8098400(void); +void sub_8099BF8(u8 a0); +void sub_8098B48(void); +void sub_809AA24(void); struct Sprite *sub_809A9A0(u16 a0, u16 a1, u8 a2, u8 a3, u8 a4); void sub_809B0D4(void); void sub_809CFDC(struct UnkStruct_2000020 *a0, struct UnkStruct_2000020 * a1, u8 a2); @@ -800,6 +813,65 @@ void sub_8096874(void) REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON; } +void sub_8096884(void) +{ + switch (gMain.state) + { + case 0: + SetVBlankCallback(NULL); + REG_DISPCNT = 0; + sub_8096804(); + gMain.state++; + break; + case 1: + SetUpWindowConfig(&gWindowConfig_81E6D00); + gMain.state++; + break; + case 2: + InitMenuWindow(&gWindowConfig_81E6D00); + MenuZeroFillScreen(); + gMain.state++; + break; + case 3: + sub_80967DC(); + sub_8096848(); + gMain.state++; + break; + case 4: + sub_8098B48(); + sub_809AA24(); + gMain.state++; + break; + case 5: + sub_8097DE0(); + gMain.state++; + break; + case 6: + sub_8097E70(); + gMain.state++; + break; + case 7: + sub_8098400(); + gMain.state++; + break; + case 8: + sub_8099BF8(gPokemonStorage.currentBox); + ePokemonStorageSystem.unk_12bc.baseTileTag = 0x000a; + ePokemonStorageSystem.unk_12bc.basePaletteTag = 0xdacb; + sub_80F727C(&ePokemonStorageSystem.unk_12bc); + sub_80F7404(); + gMain.state++; + break; + case 9: + sub_8096874(); + sub_8096BE0(sub_8096BF0); + SetMainCallback2(sub_8096B38); + SetVBlankCallback(sub_8096AFC); + gMain.state++; + break; + } +} + asm(".section .text.8098898"); void sub_8098898(u8 index) { -- cgit v1.2.3 From 0947fdf167bff7fe67e1344fea8b287fc59a6cd2 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 7 Jan 2018 21:27:40 -0500 Subject: sub_80969A0 --- asm/pokemon_storage_system.s | 150 ----------------------------------- src/pokemon/pokemon_storage_system.c | 97 ++++++++++++++++++++-- sym_ewram.txt | 54 ------------- 3 files changed, 90 insertions(+), 211 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 071ac48e9..47324f443 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,156 +5,6 @@ .text - thumb_func_start sub_80969A0 -sub_80969A0: @ 80969A0 - push {r4,lr} - sub sp, 0x4 - ldr r0, _080969BC @ =gMain - ldr r1, _080969C0 @ =0x0000043c - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0xA - bls _080969B2 - b _08096AE4 -_080969B2: - lsls r0, 2 - ldr r1, _080969C4 @ =_080969C8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080969BC: .4byte gMain -_080969C0: .4byte 0x0000043c -_080969C4: .4byte _080969C8 - .align 2, 0 -_080969C8: - .4byte _080969F4 - .4byte _08096A34 - .4byte _08096A40 - .4byte _08096A50 - .4byte _08096A56 - .4byte _08096A60 - .4byte _08096A66 - .4byte _08096A6C - .4byte _08096A72 - .4byte _08096AAC - .4byte _08096AC8 -_080969F4: - movs r0, 0 - bl SetVBlankCallback - movs r1, 0x80 - lsls r1, 19 - movs r0, 0 - strh r0, [r1] - ldr r1, _08096A28 @ =gSharedMem - ldr r0, _08096A2C @ =gUnknown_0203847D - ldrb r0, [r0] - strb r0, [r1, 0x5] - bl sub_8096804 - ldr r4, _08096A30 @ =gUnknown_0203847F - ldrb r0, [r4] - cmp r0, 0x1 - bne _08096A1A - bl sub_809BBC0 -_08096A1A: - ldrb r0, [r4] - cmp r0, 0 - bne _08096AD8 - bl sub_809BD14 - b _08096AD8 - .align 2, 0 -_08096A28: .4byte gSharedMem -_08096A2C: .4byte gUnknown_0203847D -_08096A30: .4byte gUnknown_0203847F -_08096A34: - ldr r0, _08096A3C @ =gWindowConfig_81E6D00 - bl SetUpWindowConfig - b _08096AD8 - .align 2, 0 -_08096A3C: .4byte gWindowConfig_81E6D00 -_08096A40: - ldr r0, _08096A4C @ =gWindowConfig_81E6D00 - bl InitMenuWindow - bl MenuZeroFillScreen - b _08096AD8 - .align 2, 0 -_08096A4C: .4byte gWindowConfig_81E6D00 -_08096A50: - bl sub_80967DC - b _08096AD8 -_08096A56: - bl sub_8098B48 - bl sub_809AA98 - b _08096AD8 -_08096A60: - bl sub_8097DE0 - b _08096AD8 -_08096A66: - bl sub_8097E70 - b _08096AD8 -_08096A6C: - bl sub_8098400 - b _08096AD8 -_08096A72: - ldr r0, _08096A98 @ =gPokemonStorage - ldrb r0, [r0] - bl sub_8099BF8 - ldr r2, _08096A9C @ =gSharedMem - ldr r1, _08096AA0 @ =0x000012bc - adds r0, r2, r1 - movs r1, 0xA - strh r1, [r0] - ldr r1, _08096AA4 @ =0x000012be - adds r2, r1 - ldr r1, _08096AA8 @ =0x0000dacb - strh r1, [r2] - bl sub_80F727C - bl sub_80F7404 - b _08096AD8 - .align 2, 0 -_08096A98: .4byte gPokemonStorage -_08096A9C: .4byte gSharedMem -_08096AA0: .4byte 0x000012bc -_08096AA4: .4byte 0x000012be -_08096AA8: .4byte 0x0000dacb -_08096AAC: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - ldr r0, _08096AC4 @ =sub_8096AFC - bl SetVBlankCallback - b _08096AD8 - .align 2, 0 -_08096AC4: .4byte sub_8096AFC -_08096AC8: - bl sub_8096874 - ldr r0, _08096AEC @ =sub_8096C68 - bl sub_8096BE0 - ldr r0, _08096AF0 @ =sub_8096B38 - bl SetMainCallback2 -_08096AD8: - ldr r1, _08096AF4 @ =gMain - ldr r0, _08096AF8 @ =0x0000043c - adds r1, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] -_08096AE4: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08096AEC: .4byte sub_8096C68 -_08096AF0: .4byte sub_8096B38 -_08096AF4: .4byte gMain -_08096AF8: .4byte 0x0000043c - thumb_func_end sub_80969A0 - thumb_func_start sub_8096AFC sub_8096AFC: @ 8096AFC push {lr} diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index 91d56a4b9..2b36f5d71 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -67,15 +67,19 @@ void sub_8096AFC(void); void sub_8096B38(void); void sub_8096BE0(void (*func)(void)); void sub_8096BF0(void); +void sub_8096C68(void); void sub_8097DE0(void); void sub_8097E70(void); void sub_8098400(void); void sub_8099BF8(u8 a0); void sub_8098B48(void); -void sub_809AA24(void); struct Sprite *sub_809A9A0(u16 a0, u16 a1, u8 a2, u8 a3, u8 a4); +void sub_809AA24(void); +void sub_809AA98(void); void sub_809B0D4(void); -void sub_809CFDC(struct UnkStruct_2000020 *a0, struct UnkStruct_2000020 * a1, u8 a2); +void sub_809BBC0(void); +void sub_809BD14(void); +void sub_809CFDC(struct UnkStruct_2000020 *a0, struct UnkStruct_2000020 *a1, u8 a2); const struct PSS_MenuStringPtrs gUnknown_083B600C[] = { {PCText_WithdrawPoke, PCText_MovePokeToParty}, @@ -131,11 +135,23 @@ extern const struct PokemonStorageSystemData *gUnknown_083B6DB4; extern u8 *const gUnknown_083B6DB8; EWRAM_DATA struct PokemonStorage gPokemonStorage = {0}; -EWRAM_DATA u8 gUnknown_02038474; -EWRAM_DATA struct UnkPSSStruct_2002370 *gUnknown_02038478; -EWRAM_DATA u8 gUnknown_0203847C; -EWRAM_DATA u8 gUnknown_0203847D; -EWRAM_DATA u8 gUnknown_0203847E; +EWRAM_DATA u8 gUnknown_02038470[3] = {}; +EWRAM_DATA u8 gUnknown_02038473 = 0; +EWRAM_DATA u8 gUnknown_02038474 = 0; +EWRAM_DATA struct UnkPSSStruct_2002370 *gUnknown_02038478 = NULL; +EWRAM_DATA u8 gUnknown_0203847C = 0; +EWRAM_DATA u8 gUnknown_0203847D = 0; +EWRAM_DATA u8 gUnknown_0203847E = 0; +EWRAM_DATA u8 gUnknown_0203847F = 0; +EWRAM_DATA struct Pokemon gUnknown_02038480 = {}; +EWRAM_DATA u8 gUnknown_020384E4 = 0; +EWRAM_DATA u8 gUnknown_020384E5 = 0; +EWRAM_DATA u8 gUnknown_020384E6 = 0; +EWRAM_DATA u8 gUnknown_020384E7 = 0; +EWRAM_DATA u8 gUnknown_020384E8 = 0; +EWRAM_DATA u8 gUnknown_020384E9 = 0; +EWRAM_DATA u16 gUnknown_020384EA = 0; +EWRAM_DATA u32 gUnknown_020384EC = 0; static u8 CountPokemonInBoxN(u8 boxId) { @@ -872,6 +888,73 @@ void sub_8096884(void) } } +void sub_80969A0(void) +{ + switch (gMain.state) + { + case 0: + SetVBlankCallback(NULL); + REG_DISPCNT = 0x0000; + ePokemonStorageSystem.unk_0005 = gUnknown_0203847D; + sub_8096804(); + if (gUnknown_0203847F == 1) + sub_809BBC0(); + if (gUnknown_0203847F == 0) + sub_809BD14(); + gMain.state++; + break; + case 1: + SetUpWindowConfig(&gWindowConfig_81E6D00); + gMain.state++; + break; + case 2: + InitMenuWindow(&gWindowConfig_81E6D00); + MenuZeroFillScreen(); + gMain.state++; + break; + case 3: + sub_80967DC(); + gMain.state++; + break; + case 4: + sub_8098B48(); + sub_809AA98(); + gMain.state++; + break; + case 5: + sub_8097DE0(); + gMain.state++; + break; + case 6: + sub_8097E70(); + gMain.state++; + break; + case 7: + sub_8098400(); + gMain.state++; + break; + case 8: + sub_8099BF8(gPokemonStorage.currentBox); + ePokemonStorageSystem.unk_12bc.baseTileTag = 0x000a; + ePokemonStorageSystem.unk_12bc.basePaletteTag = 0xdacb; + sub_80F727C(&ePokemonStorageSystem.unk_12bc); + sub_80F7404(); + gMain.state++; + break; + case 9: + BeginNormalPaletteFade(0xffffffff, 0, 16, 0, 0); + SetVBlankCallback(sub_8096AFC); + gMain.state++; + break; + case 10: + sub_8096874(); + sub_8096BE0(sub_8096C68); + SetMainCallback2(sub_8096B38); + gMain.state++; + break; + } +} + asm(".section .text.8098898"); void sub_8098898(u8 index) { diff --git a/sym_ewram.txt b/sym_ewram.txt index 6f7be47c1..de949bbe7 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -379,60 +379,6 @@ gUnknown_0202FFA4: @ 202FFA4 .include "src/engine/trainer_card.o" .include "src/pokemon/pokemon_storage_system.o" -@ still pokemon_storage_system - - .align 2 -gUnknown_02038470: @ 2038470 - .space 0x3 - -gUnknown_02038473: @ 2038473 - .space 0x1 - -gUnknown_02038474: @ 2038474 - .space 0x4 - -gUnknown_02038478: @ 2038478 - .space 0x4 - -gUnknown_0203847C: @ 203847C - .space 0x1 - -gUnknown_0203847D: @ 203847D - .space 0x1 - -gUnknown_0203847E: @ 203847E - .space 0x1 - -gUnknown_0203847F: @ 203847F - .space 0x1 - -gUnknown_02038480: @ 2038480 - .space 0x64 - -gUnknown_020384E4: @ 20384E4 - .space 0x1 - -gUnknown_020384E5: @ 20384E5 - .space 0x1 - -gUnknown_020384E6: @ 20384E6 - .space 0x1 - -gUnknown_020384E7: @ 20384E7 - .space 0x1 - -gUnknown_020384E8: @ 20384E8 - .space 0x1 - -gUnknown_020384E9: @ 20384E9 - .space 0x1 - -gUnknown_020384EA: @ 20384EA - .space 0x2 - -gUnknown_020384EC: @ 20384EC - .space 0x4 - @ pokemon_summary_screen gUnknown_020384F0: @ 20384F0 -- cgit v1.2.3 From ceebbe19918520c65ed9bdcd79d4ae5fbb669d88 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 7 Jan 2018 22:03:21 -0500 Subject: through sub_8096BE0 --- asm/pokemon_storage_system.s | 117 ----------------------------------- include/mon_markings.h | 2 +- src/pokemon/pokemon_storage_system.c | 74 +++++++++++++++++++--- 3 files changed, 66 insertions(+), 127 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 47324f443..4db9c1667 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,123 +5,6 @@ .text - thumb_func_start sub_8096AFC -sub_8096AFC: @ 8096AFC - push {lr} - ldr r2, _08096B2C @ =REG_BG2HOFS - ldr r1, _08096B30 @ =gSharedMem - ldr r3, _08096B34 @ =0x000008b4 - adds r0, r1, r3 - ldrh r0, [r0] - strh r0, [r2] - adds r2, 0x4 - ldrh r0, [r1, 0xA] - strh r0, [r2] - adds r2, 0x2 - ldrh r0, [r1, 0x8] - strh r0, [r2] - bl LoadOam - bl ProcessSpriteCopyRequests - bl sub_809CFF0 - bl TransferPlttBuffer - pop {r0} - bx r0 - .align 2, 0 -_08096B2C: .4byte REG_BG2HOFS -_08096B30: .4byte gSharedMem -_08096B34: .4byte 0x000008b4 - thumb_func_end sub_8096AFC - - thumb_func_start sub_8096B38 -sub_8096B38: @ 8096B38 - push {lr} - ldr r0, _08096B58 @ =gSharedMem - ldr r0, [r0] - bl _call_via_r0 - bl sub_8097E44 - bl sub_8098734 - bl AnimateSprites - bl BuildOamBuffer - pop {r0} - bx r0 - .align 2, 0 -_08096B58: .4byte gSharedMem - thumb_func_end sub_8096B38 - - thumb_func_start sub_8096B5C -sub_8096B5C: @ 8096B5C - push {r4,r5,lr} - sub sp, 0x8 - ldr r4, _08096B70 @ =gSharedMem - ldrb r0, [r4, 0x6] - cmp r0, 0 - beq _08096B74 - cmp r0, 0x1 - beq _08096BAC - b _08096BCC - .align 2, 0 -_08096B70: .4byte gSharedMem -_08096B74: - ldr r1, _08096B98 @ =0x00002690 - adds r0, r4, r1 - ldr r0, [r0] - ldr r2, _08096B9C @ =0x0000268d - adds r1, r4, r2 - ldrb r1, [r1] - ldr r3, _08096BA0 @ =0x0000268c - adds r2, r4, r3 - ldrb r2, [r2] - ldr r3, _08096BA4 @ =sub_80969A0 - ldr r5, _08096BA8 @ =0x0000268e - adds r4, r5 - ldrb r4, [r4] - str r4, [sp] - bl ShowPokemonSummaryScreen - b _08096BCC - .align 2, 0 -_08096B98: .4byte 0x00002690 -_08096B9C: .4byte 0x0000268d -_08096BA0: .4byte 0x0000268c -_08096BA4: .4byte sub_80969A0 -_08096BA8: .4byte 0x0000268e -_08096BAC: - ldr r0, _08096BD4 @ =gPokemonStorage - ldrb r2, [r0] - lsls r1, r2, 3 - adds r1, r2 - ldr r2, _08096BD8 @ =0x00008344 - adds r0, r2 - adds r1, r0 - movs r0, 0 - str r0, [sp] - ldr r0, _08096BDC @ =sub_80969A0 - str r0, [sp, 0x4] - movs r0, 0x1 - movs r2, 0 - movs r3, 0 - bl DoNamingScreen -_08096BCC: - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08096BD4: .4byte gPokemonStorage -_08096BD8: .4byte 0x00008344 -_08096BDC: .4byte sub_80969A0 - thumb_func_end sub_8096B5C - - thumb_func_start sub_8096BE0 -sub_8096BE0: @ 8096BE0 - ldr r1, _08096BEC @ =gSharedMem - str r0, [r1] - movs r0, 0 - strb r0, [r1, 0x4] - bx lr - .align 2, 0 -_08096BEC: .4byte gSharedMem - thumb_func_end sub_8096BE0 - thumb_func_start sub_8096BF0 sub_8096BF0: @ 8096BF0 push {r4,lr} diff --git a/include/mon_markings.h b/include/mon_markings.h index a2b0ac821..eae80861a 100644 --- a/include/mon_markings.h +++ b/include/mon_markings.h @@ -18,7 +18,7 @@ struct PokemonMarkMenu /*0x0030*/ u8 menuWindowSpriteTiles[0x1000]; /*0x1030*/ u8 filler1030[0x80]; /*0x10B0*/ u8 tileLoadState; -}; +}; // 10b4 void sub_80F7404(void); void sub_80F727C(struct PokemonMarkMenu *ptr); diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index 2b36f5d71..f09d9b302 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -13,6 +13,8 @@ #include "event_data.h" #include "ewram.h" #include "script.h" +#include "pokemon_summary_screen.h" +#include "naming_screen.h" #include "pokemon_storage_system.h" struct StorageAction { @@ -31,15 +33,6 @@ struct UnkStruct_2000020 { u8 unk_05; }; -struct PokemonStorageSystemData { - u8 filler_0000[5]; - u8 unk_0005; - u8 filler_0006[26]; - struct UnkStruct_2000020 unk_0020[595]; // refine size later - u8 filler_12b8[4]; - struct PokemonMarkMenu unk_12bc; -}; - struct UnkPSSStruct_2002370 { struct Sprite *unk_0000; struct Sprite *unk_0004[4]; @@ -51,6 +44,27 @@ struct UnkPSSStruct_2002370 { u8 unk_023e; u16 unk_0240; u16 unk_0242; +}; // 0244 + +struct PokemonStorageSystemData { + void (*unk_0000)(void); + u8 unk_0004; + u8 unk_0005; + u8 unk_0006; + u16 unk_0008; + u16 unk_000a; + u8 filler_000c[20]; + struct UnkStruct_2000020 unk_0020[274]; // refine size later + u8 filler_08b0[4]; + u16 unk_08b4; + u8 filler_08b6[0xa06]; + struct PokemonMarkMenu unk_12bc; + struct UnkPSSStruct_2002370 unk_2370; + u8 filler_25b4[0xd8]; + u8 unk_268c; + u8 unk_268d; + u8 unk_268e; + struct Pokemon *unk_2690; }; void StorageSystemCreatePrimaryMenu(u8 whichMenu); @@ -69,8 +83,10 @@ void sub_8096BE0(void (*func)(void)); void sub_8096BF0(void); void sub_8096C68(void); void sub_8097DE0(void); +void sub_8097E44(void); void sub_8097E70(void); void sub_8098400(void); +void sub_8098734(void); void sub_8099BF8(u8 a0); void sub_8098B48(void); struct Sprite *sub_809A9A0(u16 a0, u16 a1, u8 a2, u8 a3, u8 a4); @@ -80,6 +96,7 @@ void sub_809B0D4(void); void sub_809BBC0(void); void sub_809BD14(void); void sub_809CFDC(struct UnkStruct_2000020 *a0, struct UnkStruct_2000020 *a1, u8 a2); +void sub_809CFF0(void); const struct PSS_MenuStringPtrs gUnknown_083B600C[] = { {PCText_WithdrawPoke, PCText_MovePokeToParty}, @@ -955,6 +972,45 @@ void sub_80969A0(void) } } +void sub_8096AFC(void) +{ + REG_BG2HOFS = ePokemonStorageSystem.unk_08b4; + REG_BG3HOFS = ePokemonStorageSystem.unk_000a; + REG_BG3VOFS = ePokemonStorageSystem.unk_0008; + LoadOam(); + ProcessSpriteCopyRequests(); + sub_809CFF0(); + TransferPlttBuffer(); +} + +void sub_8096B38(void) +{ + ePokemonStorageSystem.unk_0000(); + sub_8097E44(); + sub_8098734(); + AnimateSprites(); + BuildOamBuffer(); +} + +void sub_8096B5C(void) +{ + switch (ePokemonStorageSystem.unk_0006) + { + case 0: + ShowPokemonSummaryScreen(ePokemonStorageSystem.unk_2690, ePokemonStorageSystem.unk_268d, ePokemonStorageSystem.unk_268c, sub_80969A0, ePokemonStorageSystem.unk_268e); + break; + case 1: + DoNamingScreen(1, gPokemonStorage.boxNames[gPokemonStorage.currentBox], 0, 0, 0, sub_80969A0); + break; + } +} + +void sub_8096BE0(void (*func)(void)) +{ + ePokemonStorageSystem.unk_0000 = func; + ePokemonStorageSystem.unk_0004 = 0; +} + asm(".section .text.8098898"); void sub_8098898(u8 index) { -- cgit v1.2.3 From 02fea36a2e43523c9e9401897ac2fdbeb37ed3d4 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 7 Jan 2018 22:25:16 -0500 Subject: through sub_8096C68 --- asm/pokemon_storage_system.s | 79 ------------------------------------ include/pc_screen_effect.h | 19 +++++++++ src/field/pc_screen_effect.c | 17 ++------ src/pokemon/pokemon_storage_system.c | 35 +++++++++++++++- src/scene/hall_of_fame.c | 4 +- 5 files changed, 58 insertions(+), 96 deletions(-) create mode 100644 include/pc_screen_effect.h diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 4db9c1667..49bb3995e 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,85 +5,6 @@ .text - thumb_func_start sub_8096BF0 -sub_8096BF0: @ 8096BF0 - push {r4,lr} - ldr r4, _08096C04 @ =gSharedMem - ldrb r0, [r4, 0x4] - cmp r0, 0x1 - beq _08096C16 - cmp r0, 0x1 - bgt _08096C08 - cmp r0, 0 - beq _08096C0E - b _08096C5C - .align 2, 0 -_08096C04: .4byte gSharedMem -_08096C08: - cmp r0, 0x2 - beq _08096C4C - b _08096C5C -_08096C0E: - movs r0, 0x1 - negs r0, r0 - movs r1, 0x10 - b _08096C38 -_08096C16: - movs r0, 0x2 - bl PlaySE - movs r1, 0 - movs r0, 0xE - strh r0, [r4, 0xC] - ldr r0, _08096C48 @ =0x0000dad0 - strh r0, [r4, 0xE] - strh r1, [r4, 0x10] - strh r1, [r4, 0x12] - adds r0, r4, 0 - adds r0, 0xC - bl sub_80C5CD4 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 -_08096C38: - movs r2, 0 - bl BlendPalettes - ldrb r0, [r4, 0x4] - adds r0, 0x1 - strb r0, [r4, 0x4] - b _08096C5C - .align 2, 0 -_08096C48: .4byte 0x0000dad0 -_08096C4C: - bl sub_80C5DCC - lsls r0, 24 - cmp r0, 0 - beq _08096C5C - ldr r0, _08096C64 @ =sub_8096C84 - bl sub_8096BE0 -_08096C5C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08096C64: .4byte sub_8096C84 - thumb_func_end sub_8096BF0 - - thumb_func_start sub_8096C68 -sub_8096C68: @ 8096C68 - push {lr} - bl UpdatePaletteFade - lsls r0, 24 - cmp r0, 0 - bne _08096C7A - ldr r0, _08096C80 @ =sub_8096C84 - bl sub_8096BE0 -_08096C7A: - pop {r0} - bx r0 - .align 2, 0 -_08096C80: .4byte sub_8096C84 - thumb_func_end sub_8096C68 - thumb_func_start sub_8096C84 sub_8096C84: @ 8096C84 push {r4,lr} diff --git a/include/pc_screen_effect.h b/include/pc_screen_effect.h new file mode 100644 index 000000000..a791fc66f --- /dev/null +++ b/include/pc_screen_effect.h @@ -0,0 +1,19 @@ +#ifndef POKERUBY_PC_SCREEN_EFFECT_H +#define POKERUBY_PC_SCREEN_EFFECT_H + +struct PCScreenEffectStruct +{ + /*0x00*/ u16 tileTag; + /*0x02*/ u16 paletteTag; + /*0x04*/ u16 unk04; + /*0x06*/ u16 unk06; + /*0x08*/ u16 unk08; + /*0x0A*/ u16 unk0A; + /*0x0C*/ s16 unk0C; + /*0x10*/ u32 selectedPalettes; +}; + +void sub_80C5CD4(struct PCScreenEffectStruct *unkStruct); +bool8 sub_80C5DCC(void); + +#endif //POKERUBY_PC_SCREEN_EFFECT_H diff --git a/src/field/pc_screen_effect.c b/src/field/pc_screen_effect.c index 364fca0aa..dda569ea4 100644 --- a/src/field/pc_screen_effect.c +++ b/src/field/pc_screen_effect.c @@ -2,18 +2,7 @@ #include "main.h" #include "palette.h" #include "sprite.h" - -struct UnkStruct -{ - /*0x00*/ u16 tileTag; - /*0x02*/ u16 paletteTag; - /*0x04*/ u16 unk04; - /*0x06*/ u16 unk06; - /*0x08*/ u16 unk08; - /*0x0A*/ u16 unk0A; - /*0x0C*/ s16 unk0C; - /*0x10*/ u32 selectedPalettes; -}; +#include "pc_screen_effect.h" void sub_80C603C(void); void sub_80C6078(void); @@ -30,7 +19,7 @@ extern const u16 gUnknownPal_083D18EC[16]; extern const u8 gUnknownGfx_083D190C[128]; -extern struct UnkStruct *gUnknown_020387EC; +extern struct PCScreenEffectStruct *gUnknown_020387EC; const struct SpriteSheet gUnknown_083D1898 = { gUnknownGfx_083D190C, sizeof(gUnknownGfx_083D190C), 0 }; @@ -58,7 +47,7 @@ const struct SpriteTemplate gSpriteTemplate_83D18C0 = sub_80C6130, }; -void sub_80C5CD4(struct UnkStruct *unkStruct) +void sub_80C5CD4(struct PCScreenEffectStruct *unkStruct) { u16 i; diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index f09d9b302..d6119476c 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -14,6 +14,7 @@ #include "ewram.h" #include "script.h" #include "pokemon_summary_screen.h" +#include "pc_screen_effect.h" #include "naming_screen.h" #include "pokemon_storage_system.h" @@ -53,7 +54,7 @@ struct PokemonStorageSystemData { u8 unk_0006; u16 unk_0008; u16 unk_000a; - u8 filler_000c[20]; + struct PCScreenEffectStruct unk_000c; struct UnkStruct_2000020 unk_0020[274]; // refine size later u8 filler_08b0[4]; u16 unk_08b4; @@ -82,6 +83,7 @@ void sub_8096B38(void); void sub_8096BE0(void (*func)(void)); void sub_8096BF0(void); void sub_8096C68(void); +void sub_8096C84(void); void sub_8097DE0(void); void sub_8097E44(void); void sub_8097E70(void); @@ -1011,6 +1013,37 @@ void sub_8096BE0(void (*func)(void)) ePokemonStorageSystem.unk_0004 = 0; } +void sub_8096BF0(void) +{ + switch (ePokemonStorageSystem.unk_0004) + { + case 0: + BlendPalettes(0xffffffff, 16, 0); + ePokemonStorageSystem.unk_0004++; + break; + case 1: + PlaySE(SE_PC_LOGON); + ePokemonStorageSystem.unk_000c.tileTag = 14; + ePokemonStorageSystem.unk_000c.paletteTag = 0xdad0; + ePokemonStorageSystem.unk_000c.unk04 = 0; + ePokemonStorageSystem.unk_000c.unk06 = 0; + sub_80C5CD4(&ePokemonStorageSystem.unk_000c); + BlendPalettes(0xffffffff, 0, 0); + ePokemonStorageSystem.unk_0004++; + break; + case 2: + if (sub_80C5DCC()) + sub_8096BE0(sub_8096C84); + break; + } +} + +void sub_8096C68(void) +{ + if (!UpdatePaletteFade()) + sub_8096BE0(sub_8096C84); +} + asm(".section .text.8098898"); void sub_8098898(u8 index) { diff --git a/src/scene/hall_of_fame.c b/src/scene/hall_of_fame.c index 1751ee99c..812c28137 100644 --- a/src/scene/hall_of_fame.c +++ b/src/scene/hall_of_fame.c @@ -17,6 +17,7 @@ #include "decompress.h" #include "random.h" #include "trig.h" +#include "pc_screen_effect.h" #include "ewram.h" static EWRAM_DATA u32 sUnknown_0203931C = 0; @@ -89,7 +90,6 @@ static bool8 sub_81438C4(void); // functions from different files void sub_81439D0(void); -void sub_80C5CD4(void*); // ? void sub_80C5E38(void*); // ? bool8 sub_80C5DCC(void); bool8 sub_80C5F98(void); @@ -811,7 +811,7 @@ void sub_81428CC(void) fameMons = eHallOfFameMons1; fameMons->mons[0] = sDummyFameMon; - sub_80C5CD4(fameMons); + sub_80C5CD4((struct PCScreenEffectStruct *)fameMons); gMain.state++; } break; -- cgit v1.2.3 From fd42bcc78ce229d13afc26af4c6d2dd0187b871d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 7 Jan 2018 23:46:05 -0500 Subject: sub_8096C84 --- asm/pokemon_storage_system.s | 964 +++++++++++------------------------ data/pokemon_storage_system.s | 2 +- src/pokemon/pokemon_storage_system.c | 220 +++++++- 3 files changed, 508 insertions(+), 678 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 49bb3995e..8dab0b2fd 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,374 +5,6 @@ .text - thumb_func_start sub_8096C84 -sub_8096C84: @ 8096C84 - push {r4,lr} - ldr r0, _08096C9C @ =gSharedMem - ldrb r0, [r0, 0x4] - cmp r0, 0x6 - bls _08096C90 - b _08096FBA -_08096C90: - lsls r0, 2 - ldr r1, _08096CA0 @ =_08096CA4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08096C9C: .4byte gSharedMem -_08096CA0: .4byte _08096CA4 - .align 2, 0 -_08096CA4: - .4byte _08096CC0 - .4byte _08096EE0 - .4byte _08096F1C - .4byte _08096F60 - .4byte _08096F80 - .4byte _08096F8A - .4byte _08096FA4 -_08096CC0: - bl sub_809CA40 - lsls r0, 24 - lsrs r0, 24 - subs r0, 0x1 - cmp r0, 0xF - bls _08096CD0 - b _08096FBA -_08096CD0: - lsls r0, 2 - ldr r1, _08096CDC @ =_08096CE0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08096CDC: .4byte _08096CE0 - .align 2, 0 -_08096CE0: - .4byte _08096D20 - .4byte _08096FBA - .4byte _08096FBA - .4byte _08096D94 - .4byte _08096D34 - .4byte _08096D5C - .4byte _08096DAC - .4byte _08096DC0 - .4byte _08096DD4 - .4byte _08096DFC - .4byte _08096E30 - .4byte _08096EB8 - .4byte _08096E70 - .4byte _08096E8C - .4byte _08096ECC - .4byte _08096DA0 -_08096D20: - movs r0, 0x5 - bl PlaySE - ldr r1, _08096D30 @ =gSharedMem - movs r0, 0x1 - strb r0, [r1, 0x4] - b _08096FBA - .align 2, 0 -_08096D30: .4byte gSharedMem -_08096D34: - ldr r4, _08096D48 @ =gSharedMem - ldrb r0, [r4, 0x5] - cmp r0, 0x2 - beq _08096D4C - movs r0, 0x10 - bl sub_8098898 - movs r0, 0x3 - strb r0, [r4, 0x4] - b _08096FBA - .align 2, 0 -_08096D48: .4byte gSharedMem -_08096D4C: - bl sub_809B0D4 - ldr r0, _08096D58 @ =sub_8096FC8 - bl sub_8096BE0 - b _08096FBA - .align 2, 0 -_08096D58: .4byte sub_8096FC8 -_08096D5C: - ldr r4, _08096D88 @ =gSharedMem - ldrb r0, [r4, 0x5] - cmp r0, 0x2 - beq _08096D66 - b _08096FBA -_08096D66: - bl sub_809BF20 - lsls r0, 24 - cmp r0, 0 - beq _08096D80 - ldr r1, _08096D8C @ =0x000011f2 - adds r0, r4, r1 - ldrh r0, [r0] - bl ItemIsMail - lsls r0, 24 - cmp r0, 0 - bne _08096E4C -_08096D80: - ldr r0, _08096D90 @ =sub_8097004 - bl sub_8096BE0 - b _08096FBA - .align 2, 0 -_08096D88: .4byte gSharedMem -_08096D8C: .4byte 0x000011f2 -_08096D90: .4byte sub_8097004 -_08096D94: - ldr r0, _08096D9C @ =sub_8097BA0 - bl sub_8096BE0 - b _08096FBA - .align 2, 0 -_08096D9C: .4byte sub_8097BA0 -_08096DA0: - ldr r0, _08096DA8 @ =sub_8097CC0 - bl sub_8096BE0 - b _08096FBA - .align 2, 0 -_08096DA8: .4byte sub_8097CC0 -_08096DAC: - movs r0, 0x5 - bl PlaySE - ldr r0, _08096DBC @ =sub_809789C - bl sub_8096BE0 - b _08096FBA - .align 2, 0 -_08096DBC: .4byte sub_809789C -_08096DC0: - movs r0, 0x5 - bl PlaySE - ldr r0, _08096DD0 @ =sub_8097078 - bl sub_8096BE0 - b _08096FBA - .align 2, 0 -_08096DD0: .4byte sub_8097078 -_08096DD4: - movs r0, 0x5 - bl PlaySE - ldr r4, _08096DF0 @ =gSharedMem - ldr r0, _08096DF4 @ =gPokemonStorage - ldrb r0, [r0] - adds r0, 0x1 - ldr r2, _08096DF8 @ =0x000008b2 - adds r1, r4, r2 - strh r0, [r1] - cmp r0, 0xD - ble _08096E18 - movs r0, 0 - b _08096E16 - .align 2, 0 -_08096DF0: .4byte gSharedMem -_08096DF4: .4byte gPokemonStorage -_08096DF8: .4byte 0x000008b2 -_08096DFC: - movs r0, 0x5 - bl PlaySE - ldr r4, _08096E24 @ =gSharedMem - ldr r0, _08096E28 @ =gPokemonStorage - ldrb r0, [r0] - subs r0, 0x1 - ldr r2, _08096E2C @ =0x000008b2 - adds r1, r4, r2 - strh r0, [r1] - cmp r0, 0 - bge _08096E18 - movs r0, 0xD -_08096E16: - strh r0, [r1] -_08096E18: - ldrb r0, [r1] - bl sub_8099C70 - movs r0, 0x2 - strb r0, [r4, 0x4] - b _08096FBA - .align 2, 0 -_08096E24: .4byte gSharedMem -_08096E28: .4byte gPokemonStorage -_08096E2C: .4byte 0x000008b2 -_08096E30: - bl sub_809BE80 - lsls r0, 24 - cmp r0, 0 - bne _08096E96 - ldr r4, _08096E54 @ =gSharedMem - ldr r1, _08096E58 @ =0x000011f2 - adds r0, r4, r1 - ldrh r0, [r0] - bl ItemIsMail - lsls r0, 24 - cmp r0, 0 - beq _08096E5C -_08096E4C: - movs r0, 0x5 - strb r0, [r4, 0x4] - b _08096FBA - .align 2, 0 -_08096E54: .4byte gSharedMem -_08096E58: .4byte 0x000011f2 -_08096E5C: - movs r0, 0x5 - bl PlaySE - ldr r0, _08096E6C @ =sub_809746C - bl sub_8096BE0 - b _08096FBA - .align 2, 0 -_08096E6C: .4byte sub_809746C -_08096E70: - bl sub_809BE80 - lsls r0, 24 - cmp r0, 0 - bne _08096E96 - movs r0, 0x5 - bl PlaySE - ldr r0, _08096E88 @ =sub_80972A8 - bl sub_8096BE0 - b _08096FBA - .align 2, 0 -_08096E88: .4byte sub_80972A8 -_08096E8C: - bl sub_809BEBC - lsls r0, 24 - cmp r0, 0 - bne _08096EA4 -_08096E96: - ldr r1, _08096EA0 @ =gSharedMem - movs r0, 0x4 - strb r0, [r1, 0x4] - b _08096FBA - .align 2, 0 -_08096EA0: .4byte gSharedMem -_08096EA4: - movs r0, 0x5 - bl PlaySE - ldr r0, _08096EB4 @ =c3_0808DC50 - bl sub_8096BE0 - b _08096FBA - .align 2, 0 -_08096EB4: .4byte c3_0808DC50 -_08096EB8: - movs r0, 0x5 - bl PlaySE - ldr r0, _08096EC8 @ =sub_8097390 - bl sub_8096BE0 - b _08096FBA - .align 2, 0 -_08096EC8: .4byte sub_8097390 -_08096ECC: - movs r0, 0x5 - bl PlaySE - ldr r0, _08096EDC @ =sub_80972FC - bl sub_8096BE0 - b _08096FBA - .align 2, 0 -_08096EDC: .4byte sub_80972FC -_08096EE0: - bl sub_809AC00 - lsls r0, 24 - cmp r0, 0 - bne _08096FBA - bl sub_809BF48 - lsls r0, 24 - cmp r0, 0 - beq _08096EFA - bl sub_80986E8 - b _08096EFE -_08096EFA: - bl sub_8098710 -_08096EFE: - ldr r4, _08096F14 @ =gSharedMem - ldr r2, _08096F18 @ =0x000011f6 - adds r0, r4, r2 - ldrb r0, [r0] - cmp r0, 0 - beq _08096F0E - bl BoxSetMosaic -_08096F0E: - movs r0, 0 - strb r0, [r4, 0x4] - b _08096FBA - .align 2, 0 -_08096F14: .4byte gSharedMem -_08096F18: .4byte 0x000011f6 -_08096F1C: - bl sub_8099D34 - lsls r0, 24 - cmp r0, 0 - bne _08096FBA - ldr r1, _08096F50 @ =gPokemonStorage - ldr r0, _08096F54 @ =gSharedMem - ldr r2, _08096F58 @ =0x000008b2 - adds r0, r2 - ldrh r0, [r0] - strb r0, [r1] - ldr r0, _08096F5C @ =gUnknown_0203847C - ldrb r0, [r0] - cmp r0, 0 - bne _08096F70 - bl sub_809BF20 - lsls r0, 24 - cmp r0, 0 - bne _08096F70 - bl sub_809B440 - bl BoxSetMosaic - b _08096F70 - .align 2, 0 -_08096F50: .4byte gPokemonStorage -_08096F54: .4byte gSharedMem -_08096F58: .4byte 0x000008b2 -_08096F5C: .4byte gUnknown_0203847C -_08096F60: - ldr r0, _08096F78 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0xF3 - ands r0, r1 - cmp r0, 0 - beq _08096FBA - bl sub_8098A5C -_08096F70: - ldr r1, _08096F7C @ =gSharedMem - movs r0, 0 - strb r0, [r1, 0x4] - b _08096FBA - .align 2, 0 -_08096F78: .4byte gMain -_08096F7C: .4byte gSharedMem -_08096F80: - movs r0, 0x20 - bl PlaySE - movs r0, 0xD - b _08096F92 -_08096F8A: - movs r0, 0x20 - bl PlaySE - movs r0, 0x16 -_08096F92: - bl sub_8098898 - ldr r1, _08096FA0 @ =gSharedMem - movs r0, 0x6 - strb r0, [r1, 0x4] - b _08096FBA - .align 2, 0 -_08096FA0: .4byte gSharedMem -_08096FA4: - ldr r0, _08096FC0 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0xF3 - ands r0, r1 - cmp r0, 0 - beq _08096FBA - bl sub_8098A5C - ldr r0, _08096FC4 @ =sub_8096C84 - bl sub_8096BE0 -_08096FBA: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08096FC0: .4byte gMain -_08096FC4: .4byte sub_8096C84 - thumb_func_end sub_8096C84 - thumb_func_start sub_8096FC8 sub_8096FC8: @ 8096FC8 push {r4,lr} @@ -397,7 +29,7 @@ _08096FE8: cmp r0, 0 bne _08096FF8 ldr r0, _08097000 @ =sub_8096C84 - bl sub_8096BE0 + bl SetPSSCallback _08096FF8: pop {r4} pop {r0} @@ -456,7 +88,7 @@ _0809704C: bl BoxSetMosaic _08097064: ldr r0, _08097074 @ =sub_8096C84 - bl sub_8096BE0 + bl SetPSSCallback _0809706A: pop {r4} pop {r0} @@ -532,7 +164,7 @@ _080970E8: _08097110: bl sub_8098A5C ldr r0, _0809711C @ =sub_8096C84 - bl sub_8096BE0 + bl SetPSSCallback b _0809729A .align 2, 0 _0809711C: .4byte sub_8096C84 @@ -545,7 +177,7 @@ _08097120: bl PlaySE bl sub_8098A5C ldr r0, _0809713C @ =sub_80972A8 - bl sub_8096BE0 + bl SetPSSCallback b _0809729A .align 2, 0 _0809713C: .4byte sub_80972A8 @@ -554,7 +186,7 @@ _08097140: bl PlaySE bl sub_8098A5C ldr r0, _08097154 @ =sub_80972FC - bl sub_8096BE0 + bl SetPSSCallback b _0809729A .align 2, 0 _08097154: .4byte sub_80972FC @@ -567,7 +199,7 @@ _08097158: bl PlaySE bl sub_8098A5C ldr r0, _08097174 @ =c3_0808DC50 - bl sub_8096BE0 + bl SetPSSCallback b _0809729A .align 2, 0 _08097174: .4byte c3_0808DC50 @@ -576,7 +208,7 @@ _08097178: bl PlaySE bl sub_8098A5C ldr r0, _0809718C @ =sub_8097390 - bl sub_8096BE0 + bl SetPSSCallback b _0809729A .align 2, 0 _0809718C: .4byte sub_8097390 @@ -597,7 +229,7 @@ _08097190: bl PlaySE bl sub_8098A5C ldr r0, _080971C8 @ =sub_809746C - bl sub_8096BE0 + bl SetPSSCallback b _0809729A .align 2, 0 _080971C0: .4byte gSharedMem @@ -646,7 +278,7 @@ _0809721C: movs r0, 0x5 bl PlaySE ldr r0, _0809722C @ =sub_8097594 - bl sub_8096BE0 + bl SetPSSCallback b _0809729A .align 2, 0 _0809722C: .4byte sub_8097594 @@ -654,7 +286,7 @@ _08097230: movs r0, 0x5 bl PlaySE ldr r0, _08097240 @ =sub_8097788 - bl sub_8096BE0 + bl SetPSSCallback b _0809729A .align 2, 0 _08097240: .4byte sub_8097788 @@ -662,7 +294,7 @@ _08097244: movs r0, 0x5 bl PlaySE ldr r0, _08097254 @ =sub_80977E4 - bl sub_8096BE0 + bl SetPSSCallback b _0809729A .align 2, 0 _08097254: .4byte sub_80977E4 @@ -697,7 +329,7 @@ _08097284: beq _0809729A bl sub_8098A5C ldr r0, _080972A4 @ =sub_8096C84 - bl sub_8096BE0 + bl SetPSSCallback _0809729A: pop {r4} pop {r0} @@ -736,14 +368,14 @@ _080972CA: cmp r0, 0 beq _080972EC ldr r0, _080972E8 @ =sub_8097858 - bl sub_8096BE0 + bl SetPSSCallback b _080972F2 .align 2, 0 _080972E4: .4byte gUnknown_0203847C _080972E8: .4byte sub_8097858 _080972EC: ldr r0, _080972F8 @ =sub_8096C84 - bl sub_8096BE0 + bl SetPSSCallback _080972F2: pop {r4} pop {r0} @@ -781,14 +413,14 @@ _0809731E: cmp r0, 0 beq _08097340 ldr r0, _0809733C @ =sub_8097858 - bl sub_8096BE0 + bl SetPSSCallback b _08097346 .align 2, 0 _08097338: .4byte gUnknown_0203847C _0809733C: .4byte sub_8097858 _08097340: ldr r0, _0809734C @ =sub_8096C84 - bl sub_8096BE0 + bl SetPSSCallback _08097346: pop {r4} pop {r0} @@ -823,7 +455,7 @@ _08097372: bne _08097386 bl BoxSetMosaic ldr r0, _0809738C @ =sub_8096C84 - bl sub_8096BE0 + bl SetPSSCallback _08097386: pop {r4} pop {r0} @@ -888,7 +520,7 @@ _080973FC: beq _08097462 bl sub_8098A5C ldr r0, _08097418 @ =sub_8096C84 - bl sub_8096BE0 + bl SetPSSCallback b _08097462 .align 2, 0 _08097414: .4byte gMain @@ -924,7 +556,7 @@ _0809744C: _08097458: .4byte gSharedMem _0809745C: ldr r0, _08097468 @ =sub_8097004 - bl sub_8096BE0 + bl SetPSSCallback _08097462: pop {r0} bx r0 @@ -1037,7 +669,7 @@ _08097548: bl sub_80987DC _0809755E: ldr r0, _08097568 @ =sub_8096C84 - bl sub_8096BE0 + bl SetPSSCallback b _08097584 .align 2, 0 _08097568: .4byte sub_8096C84 @@ -1212,7 +844,7 @@ _080976C8: b _08097744 _080976E0: ldr r0, _080976E8 @ =sub_8096C84 - bl sub_8096BE0 + bl SetPSSCallback b _0809777A .align 2, 0 _080976E8: .4byte sub_8096C84 @@ -1285,7 +917,7 @@ _08097764: beq _0809777A bl sub_8098A5C ldr r0, _08097784 @ =sub_8096C84 - bl sub_8096BE0 + bl SetPSSCallback _0809777A: pop {r4} pop {r0} @@ -1388,7 +1020,7 @@ _08097824: bl sub_809BDD8 bl sub_809801C ldr r0, _08097854 @ =sub_8096C84 - bl sub_8096BE0 + bl SetPSSCallback _0809784C: pop {r4} pop {r0} @@ -1423,7 +1055,7 @@ _0809787C: bne _08097890 bl sub_80987DC ldr r0, _08097898 @ =sub_8096C84 - bl sub_8096BE0 + bl SetPSSCallback _08097890: pop {r4} pop {r0} @@ -1486,7 +1118,7 @@ _08097914: bl sub_809A860 bl sub_8098A5C ldr r0, _08097928 @ =sub_8096C84 - bl sub_8096BE0 + bl SetPSSCallback b _08097968 .align 2, 0 _08097928: .4byte sub_8096C84 @@ -1494,7 +1126,7 @@ _0809792C: movs r0, 0x5 bl PlaySE ldr r0, _0809793C @ =sub_8097B44 - bl sub_8096BE0 + bl SetPSSCallback b _08097968 .align 2, 0 _0809793C: .4byte sub_8097B44 @@ -1503,7 +1135,7 @@ _08097940: bl PlaySE bl sub_8098A5C ldr r0, _08097954 @ =sub_8097974 - bl sub_8096BE0 + bl SetPSSCallback b _08097968 .align 2, 0 _08097954: .4byte sub_8097974 @@ -1512,7 +1144,7 @@ _08097958: bl PlaySE bl sub_8098A5C ldr r0, _08097970 @ =sub_8097A64 - bl sub_8096BE0 + bl SetPSSCallback _08097968: pop {r4} pop {r0} @@ -1561,7 +1193,7 @@ _080979A2: bl sub_809A860 bl sub_8098A5C ldr r0, _080979D0 @ =sub_8096C84 - bl sub_8096BE0 + bl SetPSSCallback b _08097A5A .align 2, 0 _080979CC: .4byte 0x00000d5e @@ -1626,7 +1258,7 @@ _08097A44: movs r0, 0x1 bl sub_809A860 ldr r0, _08097A60 @ =sub_8096C84 - bl sub_8096BE0 + bl SetPSSCallback _08097A5A: pop {r4,r5} pop {r0} @@ -1699,7 +1331,7 @@ _08097AE4: movs r0, 0x1 bl sub_809A860 ldr r0, _08097AFC @ =sub_8096C84 - bl sub_8096BE0 + bl SetPSSCallback b _08097B32 .align 2, 0 _08097AF4: .4byte 0x000008b2 @@ -1728,7 +1360,7 @@ _08097B18: ldrh r0, [r0] strb r0, [r1] ldr r0, _08097B40 @ =sub_8096C84 - bl sub_8096BE0 + bl SetPSSCallback _08097B32: pop {r4,r5} pop {r0} @@ -1867,7 +1499,7 @@ _08097C46: _08097C4A: bl sub_8098A5C ldr r0, _08097C58 @ =sub_8096C84 - bl sub_8096BE0 + bl SetPSSCallback b _08097CB0 .align 2, 0 _08097C58: .4byte sub_8096C84 @@ -2002,7 +1634,7 @@ _08097D66: _08097D6C: bl sub_8098A5C ldr r0, _08097D78 @ =sub_8096C84 - bl sub_8096BE0 + bl SetPSSCallback b _08097DD0 .align 2, 0 _08097D78: .4byte sub_8096C84 @@ -3514,7 +3146,7 @@ sub_8098B48: @ 8098B48 push {r4,r5,lr} bl sub_809D51C movs r2, 0 - ldr r1, _08098BD8 @ =gUnknown_083B6DB4 + ldr r1, _08098BD8 @ =gPokemonStorageSystemPtr ldr r0, [r1] ldr r4, _08098BDC @ =0x000010d0 adds r3, r0, r4 @@ -3530,7 +3162,7 @@ _08098B5C: cmp r2, 0x27 bls _08098B5C movs r2, 0 - ldr r0, _08098BD8 @ =gUnknown_083B6DB4 + ldr r0, _08098BD8 @ =gPokemonStorageSystemPtr ldr r0, [r0] movs r1, 0x89 lsls r1, 5 @@ -3546,7 +3178,7 @@ _08098B7A: cmp r2, 0x27 bls _08098B7A movs r2, 0 - ldr r0, _08098BD8 @ =gUnknown_083B6DB4 + ldr r0, _08098BD8 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r4, _08098BE0 @ =0x00001038 adds r3, r0, r4 @@ -3561,7 +3193,7 @@ _08098B96: cmp r2, 0x5 bls _08098B96 movs r2, 0 - ldr r0, _08098BD8 @ =gUnknown_083B6DB4 + ldr r0, _08098BD8 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r1, _08098BE4 @ =0x00001050 adds r3, r0, r1 @@ -3587,7 +3219,7 @@ _08098BB2: pop {r0} bx r0 .align 2, 0 -_08098BD8: .4byte gUnknown_083B6DB4 +_08098BD8: .4byte gPokemonStorageSystemPtr _08098BDC: .4byte 0x000010d0 _08098BE0: .4byte 0x00001038 _08098BE4: .4byte 0x00001050 @@ -3599,7 +3231,7 @@ _08098BEC: .4byte 0x00000d5c sub_8098BF0: @ 8098BF0 push {r4-r6,lr} sub sp, 0x8 - ldr r0, _08098C38 @ =gUnknown_083B6DB4 + ldr r0, _08098C38 @ =gPokemonStorageSystemPtr ldr r5, [r0] ldr r0, _08098C3C @ =0x000025b4 adds r4, r5, r0 @@ -3630,7 +3262,7 @@ sub_8098BF0: @ 8098BF0 pop {r0} bx r0 .align 2, 0 -_08098C38: .4byte gUnknown_083B6DB4 +_08098C38: .4byte gPokemonStorageSystemPtr _08098C3C: .4byte 0x000025b4 _08098C40: .4byte 0x00001034 _08098C44: .4byte sub_80999C4 @@ -3694,7 +3326,7 @@ _08098C70: adds r0, r4, 0 asrs r3, 16 bl sub_8099AFC - ldr r1, _08098CD0 @ =gUnknown_083B6DB4 + ldr r1, _08098CD0 @ =gPokemonStorageSystemPtr ldr r1, [r1] mov r3, r8 lsls r2, r3, 2 @@ -3705,10 +3337,10 @@ _08098C70: b _08098CE8 .align 2, 0 _08098CCC: .4byte gPokemonStorage + 0x4 -_08098CD0: .4byte gUnknown_083B6DB4 +_08098CD0: .4byte gPokemonStorageSystemPtr _08098CD4: .4byte 0x00001050 _08098CD8: - ldr r0, _08098D18 @ =gUnknown_083B6DB4 + ldr r0, _08098D18 @ =gPokemonStorageSystemPtr ldr r0, [r0] mov r2, r8 lsls r1, r2, 2 @@ -3741,7 +3373,7 @@ _08098CE8: pop {r0} bx r0 .align 2, 0 -_08098D18: .4byte gUnknown_083B6DB4 +_08098D18: .4byte gPokemonStorageSystemPtr _08098D1C: .4byte 0x00001050 thumb_func_end sub_8098C48 @@ -3817,7 +3449,7 @@ sub_8098D20: @ 8098D20 adds r2, r5, 0 adds r3, r4, 0 bl sub_8099AFC - ldr r1, _08098DD8 @ =gUnknown_083B6DB4 + ldr r1, _08098DD8 @ =gPokemonStorageSystemPtr ldr r1, [r1] ldr r2, _08098DDC @ =0x00001050 adds r1, r2 @@ -3833,7 +3465,7 @@ _08098DC4: bx r0 .align 2, 0 _08098DD4: .4byte gPokemonStorage + 0x4 -_08098DD8: .4byte gUnknown_083B6DB4 +_08098DD8: .4byte gPokemonStorageSystemPtr _08098DDC: .4byte 0x00001050 thumb_func_end sub_8098D20 @@ -3843,7 +3475,7 @@ sub_8098DE0: @ 8098DE0 lsls r0, 16 lsrs r4, r0, 16 movs r2, 0 - ldr r0, _08098E18 @ =gUnknown_083B6DB4 + ldr r0, _08098E18 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r1, _08098E1C @ =0x00001050 adds r3, r0, r1 @@ -3870,7 +3502,7 @@ _08098E08: pop {r0} bx r0 .align 2, 0 -_08098E18: .4byte gUnknown_083B6DB4 +_08098E18: .4byte gPokemonStorageSystemPtr _08098E1C: .4byte 0x00001050 _08098E20: .4byte sub_8098E68 thumb_func_end sub_8098DE0 @@ -3892,7 +3524,7 @@ sub_8098E24: @ 8098E24 strh r0, [r2, 0x20] b _08098E56 _08098E40: - ldr r0, _08098E5C @ =gUnknown_083B6DB4 + ldr r0, _08098E5C @ =gPokemonStorageSystemPtr ldr r1, [r0] ldr r3, _08098E60 @ =0x00001178 adds r1, r3 @@ -3907,7 +3539,7 @@ _08098E56: pop {r0} bx r0 .align 2, 0 -_08098E5C: .4byte gUnknown_083B6DB4 +_08098E5C: .4byte gPokemonStorageSystemPtr _08098E60: .4byte 0x00001178 _08098E64: .4byte SpriteCallbackDummy thumb_func_end sub_8098E24 @@ -3952,7 +3584,7 @@ sub_8098EA0: @ 8098EA0 lsls r0, 24 lsrs r5, r0, 24 movs r6, 0 - ldr r0, _08098ED8 @ =gUnknown_083B6DB4 + ldr r0, _08098ED8 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r1, _08098EDC @ =0x00001050 adds r7, r0, r1 @@ -3978,7 +3610,7 @@ _08098EC2: pop {r0} bx r0 .align 2, 0 -_08098ED8: .4byte gUnknown_083B6DB4 +_08098ED8: .4byte gPokemonStorageSystemPtr _08098EDC: .4byte 0x00001050 thumb_func_end sub_8098EA0 @@ -4023,7 +3655,7 @@ sub_8098EE0: @ 8098EE0 movs r0, 0 str r0, [sp, 0x14] mov r9, r0 - ldr r0, _08098FF8 @ =gUnknown_083B6DB4 + ldr r0, _08098FF8 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r2, _08098FFC @ =0x0000117d adds r2, r0 @@ -4124,7 +3756,7 @@ _08098FC8: pop {r1} bx r1 .align 2, 0 -_08098FF8: .4byte gUnknown_083B6DB4 +_08098FF8: .4byte gPokemonStorageSystemPtr _08098FFC: .4byte 0x0000117d _08099000: .4byte 0x00001050 _08099004: .4byte gPokemonStorage + 0x4 @@ -4136,7 +3768,7 @@ sub_809900C: @ 809900C push {r4-r6,lr} lsls r1, 24 lsrs r1, 24 - ldr r4, _08099058 @ =gUnknown_083B6DB4 + ldr r4, _08099058 @ =gPokemonStorageSystemPtr ldr r5, [r4] ldr r3, _0809905C @ =0x0000117c adds r2, r5, r3 @@ -4171,7 +3803,7 @@ sub_809900C: @ 809900C movs r0, 0 b _08099076 .align 2, 0 -_08099058: .4byte gUnknown_083B6DB4 +_08099058: .4byte gPokemonStorageSystemPtr _0809905C: .4byte 0x0000117c _08099060: .4byte 0x0000117d _08099064: .4byte 0x0000117b @@ -4211,7 +3843,7 @@ _080990A8: .4byte 0x00001176 thumb_func_start sub_80990AC sub_80990AC: @ 80990AC push {r4-r6,lr} - ldr r0, _080990D4 @ =gUnknown_083B6DB4 + ldr r0, _080990D4 @ =gPokemonStorageSystemPtr ldr r4, [r0] ldr r0, _080990D8 @ =0x00001172 adds r3, r4, r0 @@ -4232,7 +3864,7 @@ _080990C0: beq _080990E8 b _080991F0 .align 2, 0 -_080990D4: .4byte gUnknown_083B6DB4 +_080990D4: .4byte gPokemonStorageSystemPtr _080990D8: .4byte 0x00001172 _080990DC: .4byte 0x0000117c _080990E0: @@ -4318,7 +3950,7 @@ _08099178: cmp r0, 0 bne _080991B0 _08099182: - ldr r0, _080991A8 @ =gUnknown_083B6DB4 + ldr r0, _080991A8 @ =gPokemonStorageSystemPtr ldr r1, [r0] ldr r2, _080991AC @ =0x0000117c adds r1, r2 @@ -4332,10 +3964,10 @@ _08099198: .4byte 0x00001176 _0809919C: .4byte 0x0000117a _080991A0: .4byte 0x00001178 _080991A4: .4byte 0x0000117b -_080991A8: .4byte gUnknown_083B6DB4 +_080991A8: .4byte gPokemonStorageSystemPtr _080991AC: .4byte 0x0000117c _080991B0: - ldr r0, _080991D0 @ =gUnknown_083B6DB4 + ldr r0, _080991D0 @ =gPokemonStorageSystemPtr ldr r1, [r0] ldr r5, _080991D4 @ =0x0000117a adds r3, r1, r5 @@ -4351,7 +3983,7 @@ _080991B0: strb r2, [r1] b _080991F8 .align 2, 0 -_080991D0: .4byte gUnknown_083B6DB4 +_080991D0: .4byte gPokemonStorageSystemPtr _080991D4: .4byte 0x0000117a _080991D8: .4byte 0x0000117b _080991DC: .4byte 0x0000117c @@ -4404,7 +4036,7 @@ sub_8099200: @ 8099200 movs r2, 0x68 movs r3, 0x40 bl sub_8099AFC - ldr r1, _080992A4 @ =gUnknown_083B6DB4 + ldr r1, _080992A4 @ =gPokemonStorageSystemPtr ldr r1, [r1] ldr r2, _080992A8 @ =0x00001038 adds r1, r2 @@ -4443,7 +4075,7 @@ _08099246: adds r0, r5, 0 movs r2, 0x98 bl sub_8099AFC - ldr r1, _080992A4 @ =gUnknown_083B6DB4 + ldr r1, _080992A4 @ =gPokemonStorageSystemPtr ldr r1, [r1] lsls r2, r6, 2 ldr r3, _080992A8 @ =0x00001038 @@ -4456,10 +4088,10 @@ _08099246: b _080992BA .align 2, 0 _080992A0: .4byte gPlayerParty -_080992A4: .4byte gUnknown_083B6DB4 +_080992A4: .4byte gPokemonStorageSystemPtr _080992A8: .4byte 0x00001038 _080992AC: - ldr r0, _08099308 @ =gUnknown_083B6DB4 + ldr r0, _08099308 @ =gPokemonStorageSystemPtr ldr r0, [r0] lsls r1, r6, 2 ldr r2, _0809930C @ =0x00001038 @@ -4478,7 +4110,7 @@ _080992BA: movs r6, 0 cmp r6, r7 bcs _080992FA - ldr r0, _08099308 @ =gUnknown_083B6DB4 + ldr r0, _08099308 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r1, _0809930C @ =0x00001038 adds r3, r0, r1 @@ -4508,7 +4140,7 @@ _080992FA: pop {r0} bx r0 .align 2, 0 -_08099308: .4byte gUnknown_083B6DB4 +_08099308: .4byte gPokemonStorageSystemPtr _0809930C: .4byte 0x00001038 thumb_func_end sub_8099200 @@ -4517,7 +4149,7 @@ sub_8099310: @ 8099310 push {r4-r7,lr} mov r7, r8 push {r7} - ldr r0, _08099368 @ =gUnknown_083B6DB4 + ldr r0, _08099368 @ =gPokemonStorageSystemPtr ldr r2, [r0] ldr r0, _0809936C @ =0x00001171 adds r1, r2, r0 @@ -4561,21 +4193,21 @@ _08099354: pop {r0} bx r0 .align 2, 0 -_08099368: .4byte gUnknown_083B6DB4 +_08099368: .4byte gPokemonStorageSystemPtr _0809936C: .4byte 0x00001171 _08099370: .4byte 0x00001038 thumb_func_end sub_8099310 thumb_func_start sub_8099374 sub_8099374: @ 8099374 - ldr r0, _08099380 @ =gUnknown_083B6DB4 + ldr r0, _08099380 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r1, _08099384 @ =0x00001171 adds r0, r1 ldrb r0, [r0] bx lr .align 2, 0 -_08099380: .4byte gUnknown_083B6DB4 +_08099380: .4byte gPokemonStorageSystemPtr _08099384: .4byte 0x00001171 thumb_func_end sub_8099374 @@ -4689,7 +4321,7 @@ _08099446: strh r0, [r3, 0x22] ldr r0, _08099470 @ =SpriteCallbackDummy str r0, [r3, 0x1C] - ldr r0, _08099474 @ =gUnknown_083B6DB4 + ldr r0, _08099474 @ =gPokemonStorageSystemPtr ldr r2, [r0] movs r0, 0x30 ldrsh r1, [r3, r0] @@ -4709,7 +4341,7 @@ _08099468: bx r0 .align 2, 0 _08099470: .4byte SpriteCallbackDummy -_08099474: .4byte gUnknown_083B6DB4 +_08099474: .4byte gPokemonStorageSystemPtr _08099478: .4byte 0x00001038 _0809947C: .4byte 0x00001171 thumb_func_end sub_80993F4 @@ -4717,7 +4349,7 @@ _0809947C: .4byte 0x00001171 thumb_func_start sub_8099480 sub_8099480: @ 8099480 push {r4,lr} - ldr r0, _080994A0 @ =gUnknown_083B6DB4 + ldr r0, _080994A0 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r1, _080994A4 @ =0x00001034 adds r4, r0, r1 @@ -4732,7 +4364,7 @@ _08099498: pop {r0} bx r0 .align 2, 0 -_080994A0: .4byte gUnknown_083B6DB4 +_080994A0: .4byte gPokemonStorageSystemPtr _080994A4: .4byte 0x00001034 thumb_func_end sub_8099480 @@ -4740,7 +4372,7 @@ _080994A4: .4byte 0x00001034 sub_80994A8: @ 80994A8 push {r4-r6,lr} movs r3, 0 - ldr r1, _080994FC @ =gUnknown_083B6DB4 + ldr r1, _080994FC @ =gPokemonStorageSystemPtr ldr r1, [r1] ldr r2, _08099500 @ =0x00001038 adds r5, r1, r2 @@ -4782,7 +4414,7 @@ _080994BC: strb r1, [r0] b _0809950E .align 2, 0 -_080994FC: .4byte gUnknown_083B6DB4 +_080994FC: .4byte gPokemonStorageSystemPtr _08099500: .4byte 0x00001038 _08099504: adds r2, 0x3E @@ -4805,7 +4437,7 @@ _0809950E: sub_8099520: @ 8099520 push {r4,lr} lsls r0, 24 - ldr r1, _08099544 @ =gUnknown_083B6DB4 + ldr r1, _08099544 @ =gPokemonStorageSystemPtr ldr r1, [r1] lsrs r0, 22 ldr r2, _08099548 @ =0x00001038 @@ -4822,7 +4454,7 @@ _0809953E: pop {r0} bx r0 .align 2, 0 -_08099544: .4byte gUnknown_083B6DB4 +_08099544: .4byte gPokemonStorageSystemPtr _08099548: .4byte 0x00001038 thumb_func_end sub_8099520 @@ -4830,7 +4462,7 @@ _08099548: .4byte 0x00001038 sub_809954C: @ 809954C push {r4-r6,lr} movs r5, 0 - ldr r0, _0809957C @ =gUnknown_083B6DB4 + ldr r0, _0809957C @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r1, _08099580 @ =0x00001038 adds r6, r0, r1 @@ -4853,7 +4485,7 @@ _0809956A: pop {r0} bx r0 .align 2, 0 -_0809957C: .4byte gUnknown_083B6DB4 +_0809957C: .4byte gPokemonStorageSystemPtr _08099580: .4byte 0x00001038 thumb_func_end sub_809954C @@ -4867,7 +4499,7 @@ sub_8099584: @ 8099584 adds r5, r1, 0 cmp r4, 0 bne _080995B4 - ldr r3, _080995AC @ =gUnknown_083B6DB4 + ldr r3, _080995AC @ =gPokemonStorageSystemPtr ldr r0, [r3] ldr r5, _080995B0 @ =0x00001034 adds r2, r0, r5 @@ -4880,12 +4512,12 @@ sub_8099584: @ 8099584 str r4, [r0] b _080995D0 .align 2, 0 -_080995AC: .4byte gUnknown_083B6DB4 +_080995AC: .4byte gPokemonStorageSystemPtr _080995B0: .4byte 0x00001034 _080995B4: cmp r4, 0x1 bne _080995F4 - ldr r3, _080995FC @ =gUnknown_083B6DB4 + ldr r3, _080995FC @ =gPokemonStorageSystemPtr ldr r0, [r3] ldr r1, _08099600 @ =0x00001034 adds r2, r0, r1 @@ -4921,7 +4553,7 @@ _080995F4: pop {r0} bx r0 .align 2, 0 -_080995FC: .4byte gUnknown_083B6DB4 +_080995FC: .4byte gPokemonStorageSystemPtr _08099600: .4byte 0x00001034 _08099604: .4byte 0x00001050 _08099608: .4byte sub_80999C4 @@ -4936,7 +4568,7 @@ sub_809960C: @ 809960C lsrs r6, r1, 24 cmp r0, 0xE bne _08099654 - ldr r4, _08099648 @ =gUnknown_083B6DB4 + ldr r4, _08099648 @ =gPokemonStorageSystemPtr ldr r0, [r4] lsls r1, r6, 2 ldr r2, _0809964C @ =0x00001038 @@ -4959,11 +4591,11 @@ sub_809960C: @ 809960C strb r1, [r0] b _0809968A .align 2, 0 -_08099648: .4byte gUnknown_083B6DB4 +_08099648: .4byte gPokemonStorageSystemPtr _0809964C: .4byte 0x00001038 _08099650: .4byte 0x00001034 _08099654: - ldr r5, _080996A0 @ =gUnknown_083B6DB4 + ldr r5, _080996A0 @ =gPokemonStorageSystemPtr ldr r0, [r5] lsls r1, r6, 2 ldr r2, _080996A4 @ =0x00001050 @@ -5002,7 +4634,7 @@ _0809968A: pop {r0} bx r0 .align 2, 0 -_080996A0: .4byte gUnknown_083B6DB4 +_080996A0: .4byte gPokemonStorageSystemPtr _080996A4: .4byte 0x00001050 _080996A8: .4byte 0x00001034 _080996AC: .4byte SpriteCallbackDummy @@ -5017,7 +4649,7 @@ sub_80996B0: @ 80996B0 lsrs r4, r1, 24 cmp r0, 0xE bne _080996D8 - ldr r3, _080996CC @ =gUnknown_083B6DB4 + ldr r3, _080996CC @ =gPokemonStorageSystemPtr ldr r1, [r3] ldr r0, _080996D0 @ =0x000010c8 adds r2, r1, r0 @@ -5025,11 +4657,11 @@ sub_80996B0: @ 80996B0 ldr r4, _080996D4 @ =0x00001038 b _080996E4 .align 2, 0 -_080996CC: .4byte gUnknown_083B6DB4 +_080996CC: .4byte gPokemonStorageSystemPtr _080996D0: .4byte 0x000010c8 _080996D4: .4byte 0x00001038 _080996D8: - ldr r3, _08099704 @ =gUnknown_083B6DB4 + ldr r3, _08099704 @ =gPokemonStorageSystemPtr ldr r1, [r3] ldr r0, _08099708 @ =0x000010c8 adds r2, r1, r0 @@ -5053,7 +4685,7 @@ _080996E4: pop {r0} bx r0 .align 2, 0 -_08099704: .4byte gUnknown_083B6DB4 +_08099704: .4byte gPokemonStorageSystemPtr _08099708: .4byte 0x000010c8 _0809970C: .4byte 0x00001050 _08099710: .4byte 0x00001034 @@ -5064,7 +4696,7 @@ _08099718: .4byte 0x00001170 thumb_func_start sub_809971C sub_809971C: @ 809971C push {r4-r7,lr} - ldr r0, _08099730 @ =gUnknown_083B6DB4 + ldr r0, _08099730 @ =gPokemonStorageSystemPtr ldr r2, [r0] ldr r0, _08099734 @ =0x00001170 adds r7, r2, r0 @@ -5074,7 +4706,7 @@ sub_809971C: @ 809971C movs r0, 0 b _08099800 .align 2, 0 -_08099730: .4byte gUnknown_083B6DB4 +_08099730: .4byte gPokemonStorageSystemPtr _08099734: .4byte 0x00001170 _08099738: adds r0, 0x1 @@ -5214,7 +4846,7 @@ _08099836: beq _0809987C b _080998C0 _0809983C: - ldr r3, _0809984C @ =gUnknown_083B6DB4 + ldr r3, _0809984C @ =gPokemonStorageSystemPtr ldr r1, [r3] ldr r0, _08099850 @ =0x000010cc adds r2, r1, r0 @@ -5222,11 +4854,11 @@ _0809983C: ldr r4, _08099854 @ =0x00001038 b _08099864 .align 2, 0 -_0809984C: .4byte gUnknown_083B6DB4 +_0809984C: .4byte gPokemonStorageSystemPtr _08099850: .4byte 0x000010cc _08099854: .4byte 0x00001038 _08099858: - ldr r3, _08099870 @ =gUnknown_083B6DB4 + ldr r3, _08099870 @ =gPokemonStorageSystemPtr ldr r1, [r3] ldr r0, _08099874 @ =0x000010cc adds r2, r1, r0 @@ -5239,11 +4871,11 @@ _08099864: adds r0, r3, 0 b _0809988A .align 2, 0 -_08099870: .4byte gUnknown_083B6DB4 +_08099870: .4byte gPokemonStorageSystemPtr _08099874: .4byte 0x000010cc _08099878: .4byte 0x00001050 _0809987C: - ldr r0, _080998C8 @ =gUnknown_083B6DB4 + ldr r0, _080998C8 @ =gPokemonStorageSystemPtr ldr r1, [r0] ldr r3, _080998CC @ =0x000010cc adds r2, r1, r3 @@ -5281,7 +4913,7 @@ _080998C0: pop {r0} bx r0 .align 2, 0 -_080998C8: .4byte gUnknown_083B6DB4 +_080998C8: .4byte gPokemonStorageSystemPtr _080998CC: .4byte 0x000010cc _080998D0: .4byte 0x00001034 _080998D4: .4byte gSpriteAffineAnimTable_83B6F5C @@ -5290,7 +4922,7 @@ _080998D4: .4byte gSpriteAffineAnimTable_83B6F5C thumb_func_start sub_80998D8 sub_80998D8: @ 80998D8 push {lr} - ldr r0, _080998FC @ =gUnknown_083B6DB4 + ldr r0, _080998FC @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r1, _08099900 @ =0x000010cc adds r0, r1 @@ -5309,7 +4941,7 @@ _080998F8: movs r0, 0 b _0809991A .align 2, 0 -_080998FC: .4byte gUnknown_083B6DB4 +_080998FC: .4byte gPokemonStorageSystemPtr _08099900: .4byte 0x000010cc _08099904: adds r0, r1, 0 @@ -5332,7 +4964,7 @@ _0809991A: thumb_func_start sub_8099920 sub_8099920: @ 8099920 push {r4,lr} - ldr r0, _08099950 @ =gUnknown_083B6DB4 + ldr r0, _08099950 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r1, _08099954 @ =0x000010cc adds r4, r0, r1 @@ -5355,14 +4987,14 @@ _0809994A: pop {r0} bx r0 .align 2, 0 -_08099950: .4byte gUnknown_083B6DB4 +_08099950: .4byte gPokemonStorageSystemPtr _08099954: .4byte 0x000010cc thumb_func_end sub_8099920 thumb_func_start sub_8099958 sub_8099958: @ 8099958 push {lr} - ldr r0, _08099988 @ =gUnknown_083B6DB4 + ldr r0, _08099988 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r1, _0809998C @ =0x000010cc adds r3, r0, r1 @@ -5385,14 +5017,14 @@ _08099982: pop {r0} bx r0 .align 2, 0 -_08099988: .4byte gUnknown_083B6DB4 +_08099988: .4byte gPokemonStorageSystemPtr _0809998C: .4byte 0x000010cc thumb_func_end sub_8099958 thumb_func_start sub_8099990 sub_8099990: @ 8099990 push {lr} - ldr r0, _080999A4 @ =gUnknown_083B6DB4 + ldr r0, _080999A4 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r1, _080999A8 @ =0x000010cc adds r2, r0, r1 @@ -5402,7 +5034,7 @@ sub_8099990: @ 8099990 movs r0, 0 b _080999C0 .align 2, 0 -_080999A4: .4byte gUnknown_083B6DB4 +_080999A4: .4byte gPokemonStorageSystemPtr _080999A8: .4byte 0x000010cc _080999AC: ldr r0, [r0] @@ -5423,7 +5055,7 @@ _080999C0: thumb_func_start sub_80999C4 sub_80999C4: @ 80999C4 - ldr r1, _080999E4 @ =gUnknown_083B6DB4 + ldr r1, _080999E4 @ =gPokemonStorageSystemPtr ldr r1, [r1] movs r2, 0x8E lsls r2, 5 @@ -5439,7 +5071,7 @@ sub_80999C4: @ 80999C4 strh r1, [r0, 0x22] bx lr .align 2, 0 -_080999E4: .4byte gUnknown_083B6DB4 +_080999E4: .4byte gPokemonStorageSystemPtr thumb_func_end sub_80999C4 thumb_func_start sub_80999E8 @@ -5448,7 +5080,7 @@ sub_80999E8: @ 80999E8 lsls r0, 16 lsrs r3, r0, 16 movs r4, 0 - ldr r1, _08099A58 @ =gUnknown_083B6DB4 + ldr r1, _08099A58 @ =gPokemonStorageSystemPtr ldr r0, [r1] movs r2, 0x89 lsls r2, 5 @@ -5504,7 +5136,7 @@ _08099A4E: ldr r0, _08099A5C @ =0x0000ffff b _08099A94 .align 2, 0 -_08099A58: .4byte gUnknown_083B6DB4 +_08099A58: .4byte gPokemonStorageSystemPtr _08099A5C: .4byte 0x0000ffff _08099A60: ldr r1, [r2] @@ -5549,7 +5181,7 @@ sub_8099AAC: @ 8099AAC lsls r0, 16 lsrs r6, r0, 16 movs r3, 0 - ldr r0, _08099AE4 @ =gUnknown_083B6DB4 + ldr r0, _08099AE4 @ =gPokemonStorageSystemPtr ldr r0, [r0] movs r1, 0x89 lsls r1, 5 @@ -5574,7 +5206,7 @@ _08099AC6: strh r0, [r2] b _08099AF6 .align 2, 0 -_08099AE4: .4byte gUnknown_083B6DB4 +_08099AE4: .4byte gPokemonStorageSystemPtr _08099AE8: .4byte 0x0000ffff _08099AEC: adds r0, r3, 0x1 @@ -5718,7 +5350,7 @@ sub_8099BF8: @ 8099BF8 adds r4, r0, 0 lsls r4, 24 lsrs r4, 24 - ldr r0, _08099C50 @ =gUnknown_083B6DB4 + ldr r0, _08099C50 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r1, _08099C54 @ =0x000008ba adds r2, r0, r1 @@ -5753,7 +5385,7 @@ sub_8099BF8: @ 8099BF8 pop {r0} bx r0 .align 2, 0 -_08099C50: .4byte gUnknown_083B6DB4 +_08099C50: .4byte gPokemonStorageSystemPtr _08099C54: .4byte 0x000008ba _08099C58: .4byte 0x000008b4 _08099C5C: .4byte 0x040000d4 @@ -5775,7 +5407,7 @@ sub_8099C70: @ 8099C70 adds r0, r5, 0 adds r1, r4, 0 bl sub_8099EB0 - ldr r0, _08099D10 @ =gUnknown_083B6DB4 + ldr r0, _08099D10 @ =gPokemonStorageSystemPtr ldr r2, [r0] lsls r0, r4, 1 adds r0, r4 @@ -5843,7 +5475,7 @@ _08099CD6: pop {r0} bx r0 .align 2, 0 -_08099D10: .4byte gUnknown_083B6DB4 +_08099D10: .4byte gPokemonStorageSystemPtr _08099D14: .4byte 0x000008b6 _08099D18: .4byte 0x000008b8 _08099D1C: .4byte 0x000008bb @@ -5860,7 +5492,7 @@ sub_8099D34: @ 8099D34 bl sub_80990AC lsls r0, 24 lsrs r2, r0, 24 - ldr r0, _08099D78 @ =gUnknown_083B6DB4 + ldr r0, _08099D78 @ =gPokemonStorageSystemPtr ldr r1, [r0] ldr r0, _08099D7C @ =0x000008b8 adds r3, r1, r0 @@ -5889,7 +5521,7 @@ _08099D74: movs r0, 0x1 b _08099D8A .align 2, 0 -_08099D78: .4byte gUnknown_083B6DB4 +_08099D78: .4byte gPokemonStorageSystemPtr _08099D7C: .4byte 0x000008b8 _08099D80: .4byte 0x000008b4 _08099D84: .4byte 0x000001ff @@ -5952,7 +5584,7 @@ sub_8099DCC: @ 8099DCC adds r0, r1 movs r1, 0 strb r4, [r0] - ldr r0, _08099E00 @ =gUnknown_083B6DB4 + ldr r0, _08099E00 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r2, _08099E04 @ =0x00001032 adds r0, r2 @@ -5963,7 +5595,7 @@ sub_8099DCC: @ 8099DCC .align 2, 0 _08099DF8: .4byte gPokemonStorage _08099DFC: .4byte 0x000083c2 -_08099E00: .4byte gUnknown_083B6DB4 +_08099E00: .4byte gPokemonStorageSystemPtr _08099E04: .4byte 0x00001032 thumb_func_end sub_8099DCC @@ -5971,7 +5603,7 @@ _08099E04: .4byte 0x00001032 sub_8099E08: @ 8099E08 push {r4,r5,lr} sub sp, 0x4 - ldr r0, _08099E24 @ =gUnknown_083B6DB4 + ldr r0, _08099E24 @ =gPokemonStorageSystemPtr ldr r5, [r0] ldr r0, _08099E28 @ =0x00001032 adds r4, r5, r0 @@ -5984,7 +5616,7 @@ sub_8099E08: @ 8099E08 beq _08099E36 b _08099EA6 .align 2, 0 -_08099E24: .4byte gUnknown_083B6DB4 +_08099E24: .4byte gPokemonStorageSystemPtr _08099E28: .4byte 0x00001032 _08099E2C: cmp r0, 0x2 @@ -6061,7 +5693,7 @@ sub_8099EB0: @ 8099EB0 lsrs r7, r1, 24 cmp r1, 0 beq _08099ED8 - ldr r0, _08099F38 @ =gUnknown_083B6DB4 + ldr r0, _08099F38 @ =gPokemonStorageSystemPtr ldr r0, [r0] movs r2, 0 ldr r3, _08099F3C @ =0x000008ba @@ -6084,7 +5716,7 @@ _08099ED8: ldr r0, _08099F4C @ =gWallpaperTable adds r4, r0 ldr r0, [r4, 0xC] - ldr r1, _08099F38 @ =gUnknown_083B6DB4 + ldr r1, _08099F38 @ =gPokemonStorageSystemPtr ldr r5, [r1] ldr r2, _08099F3C @ =0x000008ba adds r6, r5, r2 @@ -6119,7 +5751,7 @@ _08099ED8: pop {r0} bx r0 .align 2, 0 -_08099F38: .4byte gUnknown_083B6DB4 +_08099F38: .4byte gPokemonStorageSystemPtr _08099F3C: .4byte 0x000008ba _08099F40: .4byte 0x0600d000 _08099F44: .4byte gPokemonStorage @@ -6150,7 +5782,7 @@ sub_8099F58: @ 8099F58 lsls r0, 28 lsrs r0, 16 str r0, [sp, 0x4] - ldr r0, _08099FB8 @ =gUnknown_083B6DB4 + ldr r0, _08099FB8 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r1, _08099FBC @ =0x000008b4 adds r0, r1 @@ -6179,7 +5811,7 @@ sub_8099F58: @ 8099F58 movs r7, 0 b _0809A020 .align 2, 0 -_08099FB8: .4byte gUnknown_083B6DB4 +_08099FB8: .4byte gPokemonStorageSystemPtr _08099FBC: .4byte 0x000008b4 _08099FC0: cmp r2, 0x1F @@ -6402,7 +6034,7 @@ _0809A13A: sub_809A14C: @ 809A14C push {r4-r6,lr} adds r2, r0, 0 - ldr r0, _0809A174 @ =gUnknown_083B6DB4 + ldr r0, _0809A174 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r1, _0809A178 @ =0x000008b4 adds r0, r1 @@ -6421,7 +6053,7 @@ sub_809A14C: @ 809A14C adds r0, r6 b _0809A184 .align 2, 0 -_0809A174: .4byte gUnknown_083B6DB4 +_0809A174: .4byte gPokemonStorageSystemPtr _0809A178: .4byte 0x000008b4 _0809A17C: lsls r0, 1 @@ -6537,7 +6169,7 @@ sub_809A23C: @ 809A23C lsls r0, 24 lsrs r0, 24 mov r8, r0 - ldr r0, _0809A384 @ =gUnknown_083B6DB4 + ldr r0, _0809A384 @ =gPokemonStorageSystemPtr ldr r5, [r0] ldr r1, _0809A388 @ =0x000008ca adds r7, r5, r1 @@ -6649,7 +6281,7 @@ _0809A328: adds r1, r0, 0 lsls r1, 24 lsrs r1, 24 - ldr r0, _0809A384 @ =gUnknown_083B6DB4 + ldr r0, _0809A384 @ =gPokemonStorageSystemPtr ldr r5, [r0] lsls r0, r4, 2 movs r3, 0xCF @@ -6683,7 +6315,7 @@ _0809A328: pop {r0} bx r0 .align 2, 0 -_0809A384: .4byte gUnknown_083B6DB4 +_0809A384: .4byte gPokemonStorageSystemPtr _0809A388: .4byte 0x000008ca _0809A38C: .4byte 0x00030200 _0809A390: .4byte 0x00000ccc @@ -6718,7 +6350,7 @@ sub_809A3D0: @ 809A3D0 lsls r1, 24 lsrs r1, 24 mov r10, r1 - ldr r3, _0809A43C @ =gUnknown_083B6DB4 + ldr r3, _0809A43C @ =gPokemonStorageSystemPtr ldr r5, [r3] ldr r1, _0809A440 @ =0x000008ca adds r0, r5, r1 @@ -6761,7 +6393,7 @@ _0809A41E: mov r8, r0 b _0809A478 .align 2, 0 -_0809A43C: .4byte gUnknown_083B6DB4 +_0809A43C: .4byte gPokemonStorageSystemPtr _0809A440: .4byte 0x000008ca _0809A444: .4byte 0x0000ffff _0809A448: .4byte 0x00030200 @@ -6847,7 +6479,7 @@ _0809A4DE: bl CreateSprite lsls r0, 24 lsrs r0, 24 - ldr r1, _0809A584 @ =gUnknown_083B6DB4 + ldr r1, _0809A584 @ =gPokemonStorageSystemPtr ldr r4, [r1] lsls r6, r7, 2 ldr r1, _0809A588 @ =0x00000cf8 @@ -6910,7 +6542,7 @@ _0809A574: .4byte 0x0000dac9 _0809A578: .4byte 0x000008ca _0809A57C: .4byte gPokemonStorage + 0x8344 _0809A580: .4byte gUnknown_083BB0A8 -_0809A584: .4byte gUnknown_083B6DB4 +_0809A584: .4byte gPokemonStorageSystemPtr _0809A588: .4byte 0x00000cf8 _0809A58C: .4byte gSprites _0809A590: .4byte sub_809A5E8 @@ -6920,7 +6552,7 @@ _0809A594: .4byte sub_809A61C thumb_func_start sub_809A598 sub_809A598: @ 809A598 push {lr} - ldr r0, _0809A5B0 @ =gUnknown_083B6DB4 + ldr r0, _0809A5B0 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r1, _0809A5B4 @ =0x00000cca adds r0, r1 @@ -6931,13 +6563,13 @@ sub_809A598: @ 809A598 bl FreeSpriteTilesByTag b _0809A5BE .align 2, 0 -_0809A5B0: .4byte gUnknown_083B6DB4 +_0809A5B0: .4byte gPokemonStorageSystemPtr _0809A5B4: .4byte 0x00000cca _0809A5B8: movs r0, 0x3 bl FreeSpriteTilesByTag _0809A5BE: - ldr r0, _0809A5E0 @ =gUnknown_083B6DB4 + ldr r0, _0809A5E0 @ =gPokemonStorageSystemPtr ldr r0, [r0] movs r3, 0xCF lsls r3, 4 @@ -6955,7 +6587,7 @@ _0809A5BE: pop {r0} bx r0 .align 2, 0 -_0809A5E0: .4byte gUnknown_083B6DB4 +_0809A5E0: .4byte gPokemonStorageSystemPtr _0809A5E4: .4byte 0x00000cf4 thumb_func_end sub_809A598 @@ -7034,7 +6666,7 @@ sub_809A654: @ 809A654 adds r1, r2 adds r0, r1 ldrb r1, [r0] - ldr r0, _0809A698 @ =gUnknown_083B6DB4 + ldr r0, _0809A698 @ =gPokemonStorageSystemPtr ldr r2, [r0] ldr r3, _0809A69C @ =0x00000cca adds r0, r2, r3 @@ -7056,7 +6688,7 @@ sub_809A654: @ 809A654 .align 2, 0 _0809A690: .4byte gPokemonStorage _0809A694: .4byte 0x000083c2 -_0809A698: .4byte gUnknown_083B6DB4 +_0809A698: .4byte gPokemonStorageSystemPtr _0809A69C: .4byte 0x00000cca _0809A6A0: .4byte gUnknown_083BB0A8 _0809A6A4: .4byte gPlttBufferUnfaded @@ -7132,7 +6764,7 @@ _0809A6EC: adds r0, r1, 0 _0809A72C: strh r0, [r4, 0x34] - ldr r0, _0809A770 @ =gUnknown_083B6DB4 + ldr r0, _0809A770 @ =gPokemonStorageSystemPtr ldr r0, [r0] lsls r1, r5, 2 movs r2, 0xD0 @@ -7161,7 +6793,7 @@ _0809A760: .4byte gUnknown_083BB288 _0809A764: .4byte gUnknown_083BB290 _0809A768: .4byte gSpriteTemplate_83BB2F0 _0809A76C: .4byte gSprites -_0809A770: .4byte gUnknown_083B6DB4 +_0809A770: .4byte gPokemonStorageSystemPtr thumb_func_end sub_809A6DC thumb_func_start sub_809A774 @@ -7170,7 +6802,7 @@ sub_809A774: @ 809A774 lsls r0, 24 lsrs r6, r0, 24 movs r2, 0 - ldr r7, _0809A7C4 @ =gUnknown_083B6DB4 + ldr r7, _0809A7C4 @ =gPokemonStorageSystemPtr ldr r0, [r7] movs r1, 0xD0 lsls r1, 4 @@ -7208,7 +6840,7 @@ _0809A78A: movs r2, 0x48 b _0809A7E8 .align 2, 0 -_0809A7C4: .4byte gUnknown_083B6DB4 +_0809A7C4: .4byte gPokemonStorageSystemPtr _0809A7C8: .4byte 0x00000d04 _0809A7CC: ldr r1, [r7] @@ -7252,7 +6884,7 @@ _0809A80C: .4byte 0x00000d04 sub_809A810: @ 809A810 push {r4-r6,lr} movs r3, 0 - ldr r0, _0809A85C @ =gUnknown_083B6DB4 + ldr r0, _0809A85C @ =gPokemonStorageSystemPtr ldr r0, [r0] movs r1, 0xD0 lsls r1, 4 @@ -7288,7 +6920,7 @@ _0809A824: pop {r0} bx r0 .align 2, 0 -_0809A85C: .4byte gUnknown_083B6DB4 +_0809A85C: .4byte gPokemonStorageSystemPtr thumb_func_end sub_809A810 thumb_func_start sub_809A860 @@ -7298,7 +6930,7 @@ sub_809A860: @ 809A860 cmp r0, 0 beq _0809A89C movs r2, 0 - ldr r0, _0809A898 @ =gUnknown_083B6DB4 + ldr r0, _0809A898 @ =gPokemonStorageSystemPtr ldr r0, [r0] movs r1, 0xD0 lsls r1, 4 @@ -7323,10 +6955,10 @@ _0809A878: bls _0809A878 b _0809A8BC .align 2, 0 -_0809A898: .4byte gUnknown_083B6DB4 +_0809A898: .4byte gPokemonStorageSystemPtr _0809A89C: movs r2, 0 - ldr r0, _0809A8C4 @ =gUnknown_083B6DB4 + ldr r0, _0809A8C4 @ =gPokemonStorageSystemPtr ldr r0, [r0] movs r3, 0xD0 lsls r3, 4 @@ -7347,7 +6979,7 @@ _0809A8BC: pop {r0} bx r0 .align 2, 0 -_0809A8C4: .4byte gUnknown_083B6DB4 +_0809A8C4: .4byte gPokemonStorageSystemPtr thumb_func_end sub_809A860 thumb_func_start sub_809A8C8 @@ -7405,7 +7037,7 @@ _0809A92C: strh r0, [r2, 0x2E] b _0809A994 _0809A932: - ldr r0, _0809A97C @ =gUnknown_083B6DB4 + ldr r0, _0809A97C @ =gPokemonStorageSystemPtr ldr r1, [r0] ldr r0, _0809A980 @ =0x000008b6 adds r1, r0 @@ -7444,10 +7076,10 @@ _0809A958: strh r0, [r2, 0x2E] b _0809A994 .align 2, 0 -_0809A97C: .4byte gUnknown_083B6DB4 +_0809A97C: .4byte gPokemonStorageSystemPtr _0809A980: .4byte 0x000008b6 _0809A984: - ldr r0, _0809A998 @ =gUnknown_083B6DB4 + ldr r0, _0809A998 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r1, _0809A99C @ =0x000008b6 adds r0, r1 @@ -7459,7 +7091,7 @@ _0809A994: pop {r0} bx r0 .align 2, 0 -_0809A998: .4byte gUnknown_083B6DB4 +_0809A998: .4byte gPokemonStorageSystemPtr _0809A99C: .4byte 0x000008b6 thumb_func_end sub_809A8C8 @@ -7533,7 +7165,7 @@ _0809AA1A: thumb_func_start sub_809AA24 sub_809AA24: @ 809AA24 push {lr} - ldr r0, _0809AA38 @ =gUnknown_083B6DB4 + ldr r0, _0809AA38 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldrb r1, [r0, 0x5] cmp r1, 0x1 @@ -7543,7 +7175,7 @@ sub_809AA24: @ 809AA24 strb r0, [r1] b _0809AA44 .align 2, 0 -_0809AA38: .4byte gUnknown_083B6DB4 +_0809AA38: .4byte gPokemonStorageSystemPtr _0809AA3C: .4byte gUnknown_020384E4 _0809AA40: ldr r0, _0809AA78 @ =gUnknown_020384E4 @@ -7562,7 +7194,7 @@ _0809AA44: strb r1, [r0] bl sub_809B0D4 bl sub_809CC04 - ldr r0, _0809AA90 @ =gUnknown_083B6DB4 + ldr r0, _0809AA90 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r1, _0809AA94 @ =0x000011e2 adds r0, r1 @@ -7578,7 +7210,7 @@ _0809AA80: .4byte gUnknown_020384E6 _0809AA84: .4byte gUnknown_020384E7 _0809AA88: .4byte gUnknown_020384E8 _0809AA8C: .4byte gUnknown_020384E9 -_0809AA90: .4byte gUnknown_083B6DB4 +_0809AA90: .4byte gPokemonStorageSystemPtr _0809AA94: .4byte 0x000011e2 thumb_func_end sub_809AA24 @@ -7587,7 +7219,7 @@ sub_809AA98: @ 809AA98 push {lr} bl sub_809CC04 bl sub_809C028 - ldr r0, _0809AAC0 @ =gUnknown_083B6DB4 + ldr r0, _0809AAC0 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r1, _0809AAC4 @ =0x000011e2 adds r0, r1 @@ -7602,7 +7234,7 @@ _0809AABA: pop {r0} bx r0 .align 2, 0 -_0809AAC0: .4byte gUnknown_083B6DB4 +_0809AAC0: .4byte gPokemonStorageSystemPtr _0809AAC4: .4byte 0x000011e2 _0809AAC8: .4byte gUnknown_020384E6 thumb_func_end sub_809AA98 @@ -7772,7 +7404,7 @@ _0809ABFA: thumb_func_start sub_809AC00 sub_809AC00: @ 809AC00 push {r4-r6,lr} - ldr r0, _0809AC14 @ =gUnknown_083B6DB4 + ldr r0, _0809AC14 @ =gPokemonStorageSystemPtr ldr r4, [r0] ldr r0, _0809AC18 @ =0x000011dc adds r1, r4, r0 @@ -7782,7 +7414,7 @@ sub_809AC00: @ 809AC00 movs r0, 0 b _0809AD2C .align 2, 0 -_0809AC14: .4byte gUnknown_083B6DB4 +_0809AC14: .4byte gPokemonStorageSystemPtr _0809AC18: .4byte 0x000011dc _0809AC1C: subs r0, 0x1 @@ -7947,7 +7579,7 @@ sub_809AD3C: @ 809AD3C mov r2, sp adds r3, r6, 0 bl sub_809AACC - ldr r0, _0809AD88 @ =gUnknown_083B6DB4 + ldr r0, _0809AD88 @ =gPokemonStorageSystemPtr ldr r1, [r0] movs r2, 0x8F lsls r2, 5 @@ -7970,7 +7602,7 @@ sub_809AD3C: @ 809AD3C pop {r0} bx r0 .align 2, 0 -_0809AD88: .4byte gUnknown_083B6DB4 +_0809AD88: .4byte gPokemonStorageSystemPtr _0809AD8C: .4byte 0x000011e1 _0809AD90: .4byte 0x000011da thumb_func_end sub_809AD3C @@ -7978,7 +7610,7 @@ _0809AD90: .4byte 0x000011da thumb_func_start sub_809AD94 sub_809AD94: @ 809AD94 push {r4-r7,lr} - ldr r0, _0809ADB0 @ =gUnknown_083B6DB4 + ldr r0, _0809ADB0 @ =gPokemonStorageSystemPtr ldr r2, [r0] ldr r3, _0809ADB4 @ =0x000011de adds r1, r2, r3 @@ -7991,7 +7623,7 @@ sub_809AD94: @ 809AD94 movs r0, 0xC b _0809ADC2 .align 2, 0 -_0809ADB0: .4byte gUnknown_083B6DB4 +_0809ADB0: .4byte gPokemonStorageSystemPtr _0809ADB4: .4byte 0x000011de _0809ADB8: .4byte 0x000011dc _0809ADBC: @@ -8181,7 +7813,7 @@ sub_809AF18: @ 809AF18 ldrb r0, [r0] cmp r0, 0 bne _0809AF46 - ldr r0, _0809AFA8 @ =gUnknown_083B6DB4 + ldr r0, _0809AFA8 @ =gPokemonStorageSystemPtr ldr r0, [r0] movs r1, 0x8E lsls r1, 5 @@ -8198,7 +7830,7 @@ _0809AF46: asrs r0, 24 cmp r0, 0x1 beq _0809AF70 - ldr r0, _0809AFA8 @ =gUnknown_083B6DB4 + ldr r0, _0809AFA8 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r2, _0809AFB0 @ =0x000011e2 adds r1, r0, r2 @@ -8218,7 +7850,7 @@ _0809AF70: blt _0809AF9E cmp r4, 0x3 bgt _0809AF9E - ldr r0, _0809AFA8 @ =gUnknown_083B6DB4 + ldr r0, _0809AFA8 @ =gPokemonStorageSystemPtr ldr r2, [r0] ldr r0, _0809AFB4 @ =0x000011c4 adds r2, r0 @@ -8241,7 +7873,7 @@ _0809AF9E: bx r0 .align 2, 0 _0809AFA4: .4byte gUnknown_020384E6 -_0809AFA8: .4byte gUnknown_083B6DB4 +_0809AFA8: .4byte gPokemonStorageSystemPtr _0809AFAC: .4byte gUnknown_020384E4 _0809AFB0: .4byte 0x000011e2 _0809AFB4: .4byte 0x000011c4 @@ -8251,7 +7883,7 @@ _0809AFB4: .4byte 0x000011c4 sub_809AFB8: @ 809AFB8 push {r4,r5,lr} ldr r5, _0809B000 @ =gUnknown_020384E4 - ldr r0, _0809B004 @ =gUnknown_083B6DB4 + ldr r0, _0809B004 @ =gPokemonStorageSystemPtr ldr r4, [r0] movs r1, 0x8F lsls r1, 5 @@ -8286,7 +7918,7 @@ _0809AFEA: b _0809B05E .align 2, 0 _0809B000: .4byte gUnknown_020384E4 -_0809B004: .4byte gUnknown_083B6DB4 +_0809B004: .4byte gPokemonStorageSystemPtr _0809B008: .4byte gUnknown_020384E5 _0809B00C: .4byte 0x000011e1 _0809B010: .4byte gUnknown_020384E6 @@ -8355,7 +7987,7 @@ _0809B07C: bls _0809B08A movs r3, 0x5 _0809B08A: - ldr r0, _0809B0B8 @ =gUnknown_083B6DB4 + ldr r0, _0809B0B8 @ =gPokemonStorageSystemPtr ldr r2, [r0] movs r1, 0x8E lsls r1, 5 @@ -8378,7 +8010,7 @@ _0809B0AA: pop {r0} bx r0 .align 2, 0 -_0809B0B8: .4byte gUnknown_083B6DB4 +_0809B0B8: .4byte gPokemonStorageSystemPtr _0809B0BC: .4byte 0x000011e3 thumb_func_end sub_809B068 @@ -8428,7 +8060,7 @@ _0809B0FC: .4byte gUnknown_020384EA thumb_func_start sub_809B100 sub_809B100: @ 809B100 lsls r0, 24 - ldr r1, _0809B120 @ =gUnknown_083B6DB4 + ldr r1, _0809B120 @ =gPokemonStorageSystemPtr ldr r1, [r1] ldr r2, _0809B124 @ =0x000012a4 adds r3, r1, r2 @@ -8443,7 +8075,7 @@ sub_809B100: @ 809B100 strb r0, [r1] bx lr .align 2, 0 -_0809B120: .4byte gUnknown_083B6DB4 +_0809B120: .4byte gPokemonStorageSystemPtr _0809B124: .4byte 0x000012a4 _0809B128: .4byte gUnknown_083BBBC8 _0809B12C: .4byte 0x000012a8 @@ -8452,7 +8084,7 @@ _0809B12C: .4byte 0x000012a8 thumb_func_start sub_809B130 sub_809B130: @ 809B130 push {lr} - ldr r0, _0809B148 @ =gUnknown_083B6DB4 + ldr r0, _0809B148 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r1, _0809B14C @ =0x000012a4 adds r0, r1 @@ -8463,14 +8095,14 @@ sub_809B130: @ 809B130 pop {r1} bx r1 .align 2, 0 -_0809B148: .4byte gUnknown_083B6DB4 +_0809B148: .4byte gPokemonStorageSystemPtr _0809B14C: .4byte 0x000012a4 thumb_func_end sub_809B130 thumb_func_start sub_809B150 sub_809B150: @ 809B150 push {r4,r5,lr} - ldr r0, _0809B16C @ =gUnknown_083B6DB4 + ldr r0, _0809B16C @ =gPokemonStorageSystemPtr ldr r5, [r0] ldr r0, _0809B170 @ =0x000012a8 adds r4, r5, r0 @@ -8483,7 +8115,7 @@ sub_809B150: @ 809B150 beq _0809B17E b _0809B1CE .align 2, 0 -_0809B16C: .4byte gUnknown_083B6DB4 +_0809B16C: .4byte gPokemonStorageSystemPtr _0809B170: .4byte 0x000012a8 _0809B174: cmp r0, 0x2 @@ -8542,7 +8174,7 @@ _0809B1D0: thumb_func_start sub_809B1D8 sub_809B1D8: @ 809B1D8 push {r4,r5,lr} - ldr r0, _0809B1F4 @ =gUnknown_083B6DB4 + ldr r0, _0809B1F4 @ =gPokemonStorageSystemPtr ldr r4, [r0] ldr r0, _0809B1F8 @ =0x000012a8 adds r5, r4, r0 @@ -8555,7 +8187,7 @@ sub_809B1D8: @ 809B1D8 beq _0809B202 b _0809B244 .align 2, 0 -_0809B1F4: .4byte gUnknown_083B6DB4 +_0809B1F4: .4byte gPokemonStorageSystemPtr _0809B1F8: .4byte 0x000012a8 _0809B1FC: cmp r0, 0x2 @@ -8604,7 +8236,7 @@ _0809B246: thumb_func_start sub_809B24C sub_809B24C: @ 809B24C push {r4,r5,lr} - ldr r0, _0809B268 @ =gUnknown_083B6DB4 + ldr r0, _0809B268 @ =gPokemonStorageSystemPtr ldr r4, [r0] ldr r0, _0809B26C @ =0x000012a8 adds r5, r4, r0 @@ -8617,7 +8249,7 @@ sub_809B24C: @ 809B24C beq _0809B276 b _0809B31C .align 2, 0 -_0809B268: .4byte gUnknown_083B6DB4 +_0809B268: .4byte gPokemonStorageSystemPtr _0809B26C: .4byte 0x000012a8 _0809B270: cmp r0, 0x2 @@ -8645,7 +8277,7 @@ _0809B298: adds r1, r4, r2 _0809B2A0: strb r0, [r1] - ldr r0, _0809B2D4 @ =gUnknown_083B6DB4 + ldr r0, _0809B2D4 @ =gPokemonStorageSystemPtr ldr r4, [r0] movs r1, 0x8E lsls r1, 5 @@ -8667,7 +8299,7 @@ _0809B2A0: b _0809B31C .align 2, 0 _0809B2D0: .4byte 0x000012a9 -_0809B2D4: .4byte gUnknown_083B6DB4 +_0809B2D4: .4byte gPokemonStorageSystemPtr _0809B2D8: .4byte gUnknown_020384E5 _0809B2DC: .4byte 0x000012a8 _0809B2E0: @@ -8708,7 +8340,7 @@ _0809B31E: thumb_func_start sub_809B324 sub_809B324: @ 809B324 push {lr} - ldr r0, _0809B348 @ =gUnknown_083B6DB4 + ldr r0, _0809B348 @ =gPokemonStorageSystemPtr ldr r0, [r0] movs r1, 0x8E lsls r1, 5 @@ -8726,7 +8358,7 @@ _0809B33E: strh r0, [r1, 0x26] b _0809B350 .align 2, 0 -_0809B348: .4byte gUnknown_083B6DB4 +_0809B348: .4byte gPokemonStorageSystemPtr _0809B34C: movs r0, 0 b _0809B352 @@ -8740,7 +8372,7 @@ _0809B352: thumb_func_start sub_809B358 sub_809B358: @ 809B358 push {lr} - ldr r0, _0809B378 @ =gUnknown_083B6DB4 + ldr r0, _0809B378 @ =gPokemonStorageSystemPtr ldr r0, [r0] movs r1, 0x8E lsls r1, 5 @@ -8756,7 +8388,7 @@ sub_809B358: @ 809B358 movs r0, 0x1 b _0809B37E .align 2, 0 -_0809B378: .4byte gUnknown_083B6DB4 +_0809B378: .4byte gPokemonStorageSystemPtr _0809B37C: movs r0, 0 _0809B37E: @@ -8873,7 +8505,7 @@ sub_809B44C: @ 809B44C lsrs r5, r1, 24 cmp r4, 0xE bne _0809B488 - ldr r0, _0809B478 @ =gUnknown_083B6DB4 + ldr r0, _0809B478 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r1, _0809B47C @ =0x000025b4 adds r0, r1 @@ -8888,7 +8520,7 @@ sub_809B44C: @ 809B44C bl memcpy b _0809B4AA .align 2, 0 -_0809B478: .4byte gUnknown_083B6DB4 +_0809B478: .4byte gPokemonStorageSystemPtr _0809B47C: .4byte 0x000025b4 _0809B480: .4byte gPlayerParty _0809B484: .4byte gUnknown_020384E5 @@ -8904,7 +8536,7 @@ _0809B488: ldr r2, _0809B4C0 @ =gPokemonStorage + 0x4 adds r1, r2 adds r0, r1 - ldr r1, _0809B4C4 @ =gUnknown_083B6DB4 + ldr r1, _0809B4C4 @ =gPokemonStorageSystemPtr ldr r1, [r1] ldr r2, _0809B4C8 @ =0x000025b4 adds r1, r2 @@ -8922,7 +8554,7 @@ _0809B4AA: bx r0 .align 2, 0 _0809B4C0: .4byte gPokemonStorage + 0x4 -_0809B4C4: .4byte gUnknown_083B6DB4 +_0809B4C4: .4byte gPokemonStorageSystemPtr _0809B4C8: .4byte 0x000025b4 _0809B4CC: .4byte gUnknown_020384E7 _0809B4D0: .4byte gUnknown_020384E8 @@ -8941,7 +8573,7 @@ diegohint2: @ 809B4D4 movs r0, 0x64 muls r0, r5 adds r0, r1 - ldr r1, _0809B500 @ =gUnknown_083B6DB4 + ldr r1, _0809B500 @ =gPokemonStorageSystemPtr ldr r1, [r1] ldr r2, _0809B504 @ =0x000025b4 adds r1, r2 @@ -8950,10 +8582,10 @@ diegohint2: @ 809B4D4 b _0809B536 .align 2, 0 _0809B4FC: .4byte gPlayerParty -_0809B500: .4byte gUnknown_083B6DB4 +_0809B500: .4byte gPokemonStorageSystemPtr _0809B504: .4byte 0x000025b4 _0809B508: - ldr r0, _0809B53C @ =gUnknown_083B6DB4 + ldr r0, _0809B53C @ =gPokemonStorageSystemPtr ldr r4, [r0] ldr r0, _0809B540 @ =0x000025b4 adds r4, r0 @@ -8979,7 +8611,7 @@ _0809B536: pop {r0} bx r0 .align 2, 0 -_0809B53C: .4byte gUnknown_083B6DB4 +_0809B53C: .4byte gPokemonStorageSystemPtr _0809B540: .4byte 0x000025b4 _0809B544: .4byte gPokemonStorage thumb_func_end diegohint2 @@ -9030,7 +8662,7 @@ diegohint1: @ 809B58C lsrs r6, r1, 24 cmp r5, 0xE bne _0809B5C0 - ldr r0, _0809B5B4 @ =gUnknown_083B6DB4 + ldr r0, _0809B5B4 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r1, _0809B5B8 @ =0x00002618 adds r0, r1 @@ -9042,7 +8674,7 @@ diegohint1: @ 809B58C bl memcpy b _0809B5E2 .align 2, 0 -_0809B5B4: .4byte gUnknown_083B6DB4 +_0809B5B4: .4byte gPokemonStorageSystemPtr _0809B5B8: .4byte 0x00002618 _0809B5BC: .4byte gPlayerParty _0809B5C0: @@ -9057,7 +8689,7 @@ _0809B5C0: ldr r2, _0809B614 @ =gPokemonStorage + 0x4 adds r1, r2 adds r0, r1 - ldr r1, _0809B618 @ =gUnknown_083B6DB4 + ldr r1, _0809B618 @ =gPokemonStorageSystemPtr ldr r1, [r1] ldr r2, _0809B61C @ =0x00002618 adds r1, r2 @@ -9066,7 +8698,7 @@ _0809B5E2: adds r0, r5, 0 adds r1, r6, 0 bl diegohint2 - ldr r0, _0809B618 @ =gUnknown_083B6DB4 + ldr r0, _0809B618 @ =gPokemonStorageSystemPtr ldr r1, [r0] ldr r0, _0809B620 @ =0x000025b4 adds r4, r1, r0 @@ -9087,7 +8719,7 @@ _0809B5E2: bx r0 .align 2, 0 _0809B614: .4byte gPokemonStorage + 0x4 -_0809B618: .4byte gUnknown_083B6DB4 +_0809B618: .4byte gPokemonStorageSystemPtr _0809B61C: .4byte 0x00002618 _0809B620: .4byte 0x000025b4 _0809B624: .4byte gUnknown_020384E7 @@ -9145,7 +8777,7 @@ _0809B686: lsrs r0, r4, 24 bl sub_8098D20 _0809B698: - ldr r0, _0809B6B8 @ =gUnknown_083B6DB4 + ldr r0, _0809B6B8 @ =gPokemonStorageSystemPtr ldr r0, [r0] movs r1, 0x8E lsls r1, 5 @@ -9160,13 +8792,13 @@ _0809B6AC: bx r1 .align 2, 0 _0809B6B4: .4byte gUnknown_020384E5 -_0809B6B8: .4byte gUnknown_083B6DB4 +_0809B6B8: .4byte gPokemonStorageSystemPtr thumb_func_end sub_809B62C thumb_func_start sub_809B6BC sub_809B6BC: @ 809B6BC push {lr} - ldr r0, _0809B6D8 @ =gUnknown_083B6DB4 + ldr r0, _0809B6D8 @ =gPokemonStorageSystemPtr ldr r0, [r0] movs r1, 0x8E lsls r1, 5 @@ -9178,7 +8810,7 @@ sub_809B6BC: @ 809B6BC pop {r0} bx r0 .align 2, 0 -_0809B6D8: .4byte gUnknown_083B6DB4 +_0809B6D8: .4byte gPokemonStorageSystemPtr thumb_func_end sub_809B6BC thumb_func_start sub_809B6DC @@ -9206,7 +8838,7 @@ _0809B700: ldrb r1, [r0] adds r0, r2, 0 bl sub_809981C - ldr r0, _0809B728 @ =gUnknown_083B6DB4 + ldr r0, _0809B728 @ =gPokemonStorageSystemPtr ldr r1, [r0] ldr r2, _0809B72C @ =0x000026e4 adds r0, r1, r2 @@ -9218,7 +8850,7 @@ _0809B700: .align 2, 0 _0809B720: .4byte gUnknown_020384E4 _0809B724: .4byte gUnknown_020384E5 -_0809B728: .4byte gUnknown_083B6DB4 +_0809B728: .4byte gPokemonStorageSystemPtr _0809B72C: .4byte 0x000026e4 _0809B730: .4byte 0x000011fa thumb_func_end sub_809B6DC @@ -9233,7 +8865,7 @@ sub_809B734: @ 809B734 movs r0, 0x1 b _0809B758 _0809B744: - ldr r0, _0809B75C @ =gUnknown_083B6DB4 + ldr r0, _0809B75C @ =gPokemonStorageSystemPtr ldr r0, [r0] movs r1, 0x8E lsls r1, 5 @@ -9246,7 +8878,7 @@ _0809B758: pop {r1} bx r1 .align 2, 0 -_0809B75C: .4byte gUnknown_083B6DB4 +_0809B75C: .4byte gPokemonStorageSystemPtr thumb_func_end sub_809B734 thumb_func_start sub_809B760 @@ -9297,7 +8929,7 @@ sub_809B7AC: @ 809B7AC ldrb r0, [r0] cmp r0, 0 beq _0809B7C8 - ldr r0, _0809B7D0 @ =gUnknown_083B6DB4 + ldr r0, _0809B7D0 @ =gPokemonStorageSystemPtr ldr r0, [r0] movs r1, 0x8E lsls r1, 5 @@ -9310,7 +8942,7 @@ _0809B7C8: bx r0 .align 2, 0 _0809B7CC: .4byte gUnknown_020384E6 -_0809B7D0: .4byte gUnknown_083B6DB4 +_0809B7D0: .4byte gPokemonStorageSystemPtr thumb_func_end sub_809B7AC thumb_func_start sub_809B7D4 @@ -9320,7 +8952,7 @@ sub_809B7D4: @ 809B7D4 ldrb r0, [r0] cmp r0, 0 beq _0809B81C - ldr r0, _0809B808 @ =gUnknown_083B6DB4 + ldr r0, _0809B808 @ =gPokemonStorageSystemPtr ldr r4, [r0] ldr r1, _0809B80C @ =0x00002618 adds r0, r4, r1 @@ -9340,7 +8972,7 @@ sub_809B7D4: @ 809B7D4 b _0809B8A6 .align 2, 0 _0809B804: .4byte gUnknown_020384E6 -_0809B808: .4byte gUnknown_083B6DB4 +_0809B808: .4byte gPokemonStorageSystemPtr _0809B80C: .4byte 0x00002618 _0809B810: .4byte 0x000025b4 _0809B814: .4byte 0x00002682 @@ -9352,7 +8984,7 @@ _0809B81C: asrs r0, 24 cmp r0, 0x1 bne _0809B864 - ldr r0, _0809B850 @ =gUnknown_083B6DB4 + ldr r0, _0809B850 @ =gPokemonStorageSystemPtr ldr r4, [r0] ldr r2, _0809B854 @ =0x00002618 adds r0, r4, r2 @@ -9371,7 +9003,7 @@ _0809B81C: b _0809B896 .align 2, 0 _0809B84C: .4byte gUnknown_020384E4 -_0809B850: .4byte gUnknown_083B6DB4 +_0809B850: .4byte gPokemonStorageSystemPtr _0809B854: .4byte 0x00002618 _0809B858: .4byte gPlayerParty _0809B85C: .4byte gUnknown_020384E5 @@ -9393,7 +9025,7 @@ _0809B864: adds r2, r5, 0x4 adds r1, r2 adds r0, r1 - ldr r1, _0809B904 @ =gUnknown_083B6DB4 + ldr r1, _0809B904 @ =gPokemonStorageSystemPtr ldr r4, [r1] ldr r2, _0809B908 @ =0x00002618 adds r1, r4, r2 @@ -9403,7 +9035,7 @@ _0809B864: adds r4, r1 _0809B896: strb r0, [r4] - ldr r0, _0809B904 @ =gUnknown_083B6DB4 + ldr r0, _0809B904 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r1, _0809B900 @ =gUnknown_020384E5 ldrb r1, [r1] @@ -9411,7 +9043,7 @@ _0809B896: adds r0, r2 strb r1, [r0] _0809B8A6: - ldr r0, _0809B904 @ =gUnknown_083B6DB4 + ldr r0, _0809B904 @ =gPokemonStorageSystemPtr ldr r6, [r0] ldr r0, _0809B914 @ =0x0000267e adds r4, r6, r0 @@ -9456,7 +9088,7 @@ _0809B8A6: .align 2, 0 _0809B8FC: .4byte gPokemonStorage _0809B900: .4byte gUnknown_020384E5 -_0809B904: .4byte gUnknown_083B6DB4 +_0809B904: .4byte gPokemonStorageSystemPtr _0809B908: .4byte 0x00002618 _0809B90C: .4byte 0x00002682 _0809B910: .4byte 0x00002683 @@ -9476,7 +9108,7 @@ _0809B934: adds r0, r6, r2 strb r1, [r0] _0809B940: - ldr r0, _0809B958 @ =gUnknown_083B6DB4 + ldr r0, _0809B958 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r1, _0809B95C @ =0x00002684 adds r0, r1 @@ -9487,7 +9119,7 @@ _0809B940: bx r0 .align 2, 0 _0809B954: .4byte 0x0000267d -_0809B958: .4byte gUnknown_083B6DB4 +_0809B958: .4byte gPokemonStorageSystemPtr _0809B95C: .4byte 0x00002684 thumb_func_end sub_809B7D4 @@ -9498,7 +9130,7 @@ sub_809B960: @ 809B960 mov r6, r9 mov r5, r8 push {r5-r7} - ldr r0, _0809B988 @ =gUnknown_083B6DB4 + ldr r0, _0809B988 @ =gPokemonStorageSystemPtr ldr r2, [r0] ldr r3, _0809B98C @ =0x0000267d adds r1, r2, r3 @@ -9513,7 +9145,7 @@ sub_809B960: @ 809B960 asrs r0, 24 b _0809BB5C .align 2, 0 -_0809B988: .4byte gUnknown_083B6DB4 +_0809B988: .4byte gPokemonStorageSystemPtr _0809B98C: .4byte 0x0000267d _0809B990: .4byte 0x0000267c _0809B994: @@ -9568,7 +9200,7 @@ _0809B9CC: _0809B9F0: movs r0, 0x2 ands r3, r0 - ldr r7, _0809BA3C @ =gUnknown_083B6DB4 + ldr r7, _0809BA3C @ =gPokemonStorageSystemPtr mov r12, r7 cmp r3, 0 beq _0809BA02 @@ -9600,7 +9232,7 @@ _0809BA2C: .4byte 0x00002683 _0809BA30: .4byte gPlayerParty _0809BA34: .4byte 0x00002686 _0809BA38: .4byte 0x0000267e -_0809BA3C: .4byte gUnknown_083B6DB4 +_0809BA3C: .4byte gPokemonStorageSystemPtr _0809BA40: .4byte 0x0000267f _0809BA44: .4byte 0x0000267d _0809BA48: .4byte 0x0000267c @@ -9708,7 +9340,7 @@ _0809BB00: strb r0, [r1] lsls r0, 24 asrs r0, 24 - ldr r7, _0809BB88 @ =gUnknown_083B6DB4 + ldr r7, _0809BB88 @ =gPokemonStorageSystemPtr mov r12, r7 cmp r0, 0x1D ble _0809BB32 @@ -9764,7 +9396,7 @@ _0809BB78: .4byte gPokemonStorage + 0x4 _0809BB7C: .4byte 0x00002686 _0809BB80: .4byte 0x00002682 _0809BB84: .4byte 0x0000267e -_0809BB88: .4byte gUnknown_083B6DB4 +_0809BB88: .4byte gPokemonStorageSystemPtr _0809BB8C: .4byte 0x0000267d thumb_func_end sub_809B960 @@ -9776,7 +9408,7 @@ sub_809BB90: @ 809BB90 cmp r0, 0 beq _0809BBAA ldr r0, _0809BBB4 @ =gUnknown_02038480 - ldr r1, _0809BBB8 @ =gUnknown_083B6DB4 + ldr r1, _0809BBB8 @ =gPokemonStorageSystemPtr ldr r1, [r1] ldr r2, _0809BBBC @ =0x000025b4 adds r1, r2 @@ -9788,7 +9420,7 @@ _0809BBAA: .align 2, 0 _0809BBB0: .4byte gUnknown_020384E6 _0809BBB4: .4byte gUnknown_02038480 -_0809BBB8: .4byte gUnknown_083B6DB4 +_0809BBB8: .4byte gPokemonStorageSystemPtr _0809BBBC: .4byte 0x000025b4 thumb_func_end sub_809BB90 @@ -9803,7 +9435,7 @@ sub_809BBC0: @ 809BBC0 ldrb r0, [r0] cmp r0, 0xE bne _0809BBF8 - ldr r0, _0809BBEC @ =gUnknown_083B6DB4 + ldr r0, _0809BBEC @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r1, _0809BBF0 @ =0x000025b4 adds r0, r1 @@ -9814,11 +9446,11 @@ sub_809BBC0: @ 809BBC0 .align 2, 0 _0809BBE4: .4byte gUnknown_020384E6 _0809BBE8: .4byte gUnknown_020384E7 -_0809BBEC: .4byte gUnknown_083B6DB4 +_0809BBEC: .4byte gPokemonStorageSystemPtr _0809BBF0: .4byte 0x000025b4 _0809BBF4: .4byte gUnknown_02038480 _0809BBF8: - ldr r0, _0809BC0C @ =gUnknown_083B6DB4 + ldr r0, _0809BC0C @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r1, _0809BC10 @ =0x000025b4 adds r0, r1 @@ -9829,7 +9461,7 @@ _0809BC08: pop {r0} bx r0 .align 2, 0 -_0809BC0C: .4byte gUnknown_083B6DB4 +_0809BC0C: .4byte gPokemonStorageSystemPtr _0809BC10: .4byte 0x000025b4 _0809BC14: .4byte gUnknown_02038480 thumb_func_end sub_809BBC0 @@ -9842,7 +9474,7 @@ sub_809BC18: @ 809BC18 cmp r5, 0 beq _0809BC64 bl sub_809BB90 - ldr r0, _0809BC4C @ =gUnknown_083B6DB4 + ldr r0, _0809BC4C @ =gPokemonStorageSystemPtr ldr r2, [r0] ldr r0, _0809BC50 @ =0x00002690 adds r1, r2, r0 @@ -9861,7 +9493,7 @@ sub_809BC18: @ 809BC18 b _0809BCF2 .align 2, 0 _0809BC48: .4byte gUnknown_020384E6 -_0809BC4C: .4byte gUnknown_083B6DB4 +_0809BC4C: .4byte gPokemonStorageSystemPtr _0809BC50: .4byte 0x00002690 _0809BC54: .4byte gUnknown_02038480 _0809BC58: .4byte 0x0000268d @@ -9874,7 +9506,7 @@ _0809BC64: asrs r0, 24 cmp r0, 0x1 bne _0809BCBC - ldr r0, _0809BCA0 @ =gUnknown_083B6DB4 + ldr r0, _0809BCA0 @ =gPokemonStorageSystemPtr ldr r4, [r0] ldr r2, _0809BCA4 @ =0x00002690 adds r1, r4, r2 @@ -9896,7 +9528,7 @@ _0809BC64: b _0809BCF2 .align 2, 0 _0809BC9C: .4byte gUnknown_020384E4 -_0809BCA0: .4byte gUnknown_083B6DB4 +_0809BCA0: .4byte gPokemonStorageSystemPtr _0809BCA4: .4byte 0x00002690 _0809BCA8: .4byte gPlayerParty _0809BCAC: .4byte gUnknown_020384E5 @@ -9904,7 +9536,7 @@ _0809BCB0: .4byte 0x0000268d _0809BCB4: .4byte 0x0000268c _0809BCB8: .4byte 0x0000268e _0809BCBC: - ldr r0, _0809BCF8 @ =gUnknown_083B6DB4 + ldr r0, _0809BCF8 @ =gPokemonStorageSystemPtr ldr r3, [r0] ldr r0, _0809BCFC @ =0x00002690 adds r4, r3, r0 @@ -9936,7 +9568,7 @@ _0809BCF2: pop {r0} bx r0 .align 2, 0 -_0809BCF8: .4byte gUnknown_083B6DB4 +_0809BCF8: .4byte gPokemonStorageSystemPtr _0809BCFC: .4byte 0x00002690 _0809BD00: .4byte gPokemonStorage _0809BD04: .4byte gUnknown_020384E5 @@ -10060,7 +9692,7 @@ sub_809BDD8: @ 809BDD8 lsrs r0, 24 mov r1, sp strb r0, [r1] - ldr r1, _0809BE04 @ =gUnknown_083B6DB4 + ldr r1, _0809BE04 @ =gPokemonStorageSystemPtr ldr r2, [r1] ldr r3, _0809BE08 @ =0x000011f7 adds r1, r2, r3 @@ -10076,7 +9708,7 @@ sub_809BDD8: @ 809BDD8 bl SetMonData b _0809BE68 .align 2, 0 -_0809BE04: .4byte gUnknown_083B6DB4 +_0809BE04: .4byte gPokemonStorageSystemPtr _0809BE08: .4byte 0x000011f7 _0809BE0C: .4byte gUnknown_020384E6 _0809BE10: .4byte 0x000025b4 @@ -10184,7 +9816,7 @@ sub_809BEBC: @ 809BEBC lsls r0, 24 cmp r0, 0 bne _0809BEFC - ldr r0, _0809BF0C @ =gUnknown_083B6DB4 + ldr r0, _0809BF0C @ =gPokemonStorageSystemPtr ldr r1, [r0] ldr r2, _0809BF10 @ =0x000011f9 adds r0, r1, r2 @@ -10204,7 +9836,7 @@ _0809BEFC: _0809BF00: .4byte gUnknown_020384E6 _0809BF04: .4byte gUnknown_020384E4 _0809BF08: .4byte gUnknown_020384E5 -_0809BF0C: .4byte gUnknown_083B6DB4 +_0809BF0C: .4byte gPokemonStorageSystemPtr _0809BF10: .4byte 0x000011f9 _0809BF14: .4byte 0x000025b4 _0809BF18: @@ -10271,7 +9903,7 @@ _0809BF70: .4byte gUnknown_020384E5 thumb_func_start sub_809BF74 sub_809BF74: @ 809BF74 push {r4,lr} - ldr r0, _0809BFA8 @ =gUnknown_083B6DB4 + ldr r0, _0809BFA8 @ =gPokemonStorageSystemPtr ldr r1, [r0] movs r2, 0 ldr r3, _0809BFAC @ =gUnknown_020384E6 @@ -10298,7 +9930,7 @@ _0809BF86: beq _0809BFEE b _0809C018 .align 2, 0 -_0809BFA8: .4byte gUnknown_083B6DB4 +_0809BFA8: .4byte gPokemonStorageSystemPtr _0809BFAC: .4byte gUnknown_020384E6 _0809BFB0: .4byte 0x000011f6 _0809BFB4: .4byte gUnknown_020384E4 @@ -10391,7 +10023,7 @@ sub_809C04C: @ 809C04C lsrs r1, 24 movs r0, 0 str r0, [sp] - ldr r0, _0809C0FC @ =gUnknown_083B6DB4 + ldr r0, _0809C0FC @ =gPokemonStorageSystemPtr ldr r6, [r0] ldr r2, _0809C100 @ =0x000011f2 adds r2, r6 @@ -10459,7 +10091,7 @@ _0809C08C: bl GetMonData b _0809C1B2 .align 2, 0 -_0809C0FC: .4byte gUnknown_083B6DB4 +_0809C0FC: .4byte gPokemonStorageSystemPtr _0809C100: .4byte 0x000011f2 _0809C104: .4byte 0x000011f0 _0809C108: .4byte 0x000011f9 @@ -10550,7 +10182,7 @@ _0809C1D4: ldrh r1, [r1] strh r1, [r0] _0809C1DE: - ldr r0, _0809C224 @ =gUnknown_083B6DB4 + ldr r0, _0809C224 @ =gPokemonStorageSystemPtr ldr r4, [r0] ldr r2, _0809C220 @ =0x000011f0 adds r0, r4, r2 @@ -10558,7 +10190,7 @@ _0809C1DE: cmp r1, 0 bne _0809C23C _0809C1EC: - ldr r0, _0809C224 @ =gUnknown_083B6DB4 + ldr r0, _0809C224 @ =gPokemonStorageSystemPtr ldr r1, [r0] ldr r0, _0809C228 @ =0x000011fa adds r2, r1, r0 @@ -10585,7 +10217,7 @@ _0809C1EC: b _0809C43E .align 2, 0 _0809C220: .4byte 0x000011f0 -_0809C224: .4byte gUnknown_083B6DB4 +_0809C224: .4byte gPokemonStorageSystemPtr _0809C228: .4byte 0x000011fa _0809C22C: .4byte 0x0000120f _0809C230: .4byte 0x00001234 @@ -10646,7 +10278,7 @@ _0809C2AC: movs r1, 0xFF str r1, [sp] _0809C2B0: - ldr r0, _0809C388 @ =gUnknown_083B6DB4 + ldr r0, _0809C388 @ =gPokemonStorageSystemPtr ldr r4, [r0] ldr r2, _0809C38C @ =0x0000120f adds r7, r4, r2 @@ -10751,7 +10383,7 @@ _0809C2B0: beq _0809C3D0 b _0809C3EA .align 2, 0 -_0809C388: .4byte gUnknown_083B6DB4 +_0809C388: .4byte gPokemonStorageSystemPtr _0809C38C: .4byte 0x0000120f _0809C390: .4byte 0x00001214 _0809C394: .4byte 0x000011fa @@ -10794,7 +10426,7 @@ _0809C3E6: _0809C3EA: movs r5, 0xFF strb r5, [r7] - ldr r0, _0809C450 @ =gUnknown_083B6DB4 + ldr r0, _0809C450 @ =gPokemonStorageSystemPtr ldr r2, [r0] ldr r1, _0809C454 @ =0x0000127a adds r7, r2, r1 @@ -10843,7 +10475,7 @@ _0809C43E: pop {r0} bx r0 .align 2, 0 -_0809C450: .4byte gUnknown_083B6DB4 +_0809C450: .4byte gPokemonStorageSystemPtr _0809C454: .4byte 0x0000127a _0809C458: .4byte 0x000011f2 _0809C45C: .4byte 0x0000127f @@ -10861,7 +10493,7 @@ sub_809C464: @ 809C464 mov r8, r0 ldr r2, _0809C4DC @ =gUnknown_020384E5 ldrb r4, [r2] - ldr r0, _0809C4E0 @ =gUnknown_083B6DB4 + ldr r0, _0809C4E0 @ =gPokemonStorageSystemPtr ldr r1, [r0] ldr r0, _0809C4E4 @ =0x000011de adds r7, r1, r0 @@ -10914,7 +10546,7 @@ _0809C4BE: .align 2, 0 _0809C4D8: .4byte gUnknown_020384E4 _0809C4DC: .4byte gUnknown_020384E5 -_0809C4E0: .4byte gUnknown_083B6DB4 +_0809C4E0: .4byte gPokemonStorageSystemPtr _0809C4E4: .4byte 0x000011de _0809C4E8: .4byte 0x000011df _0809C4EC: .4byte gMain @@ -11132,7 +10764,7 @@ sub_809C664: @ 809C664 mov r10, r0 ldr r7, _0809C6DC @ =gUnknown_020384E5 ldrb r4, [r7] - ldr r2, _0809C6E0 @ =gUnknown_083B6DB4 + ldr r2, _0809C6E0 @ =gPokemonStorageSystemPtr ldr r5, [r2] ldr r1, _0809C6E4 @ =0x000011df adds r0, r5, r1 @@ -11185,7 +10817,7 @@ _0809C6D0: .align 2, 0 _0809C6D8: .4byte gUnknown_020384E4 _0809C6DC: .4byte gUnknown_020384E5 -_0809C6E0: .4byte gUnknown_083B6DB4 +_0809C6E0: .4byte gPokemonStorageSystemPtr _0809C6E4: .4byte 0x000011df _0809C6E8: .4byte 0x000011de _0809C6EC: .4byte gMain @@ -11313,7 +10945,7 @@ _0809C7D0: ands r0, r1 cmp r0, 0 beq _0809C7F8 - ldr r0, _0809C7F0 @ =gUnknown_083B6DB4 + ldr r0, _0809C7F0 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldrb r0, [r0, 0x5] cmp r0, 0x1 @@ -11322,7 +10954,7 @@ _0809C7D0: b _0809C84C .align 2, 0 _0809C7EC: .4byte gMain -_0809C7F0: .4byte gUnknown_083B6DB4 +_0809C7F0: .4byte gPokemonStorageSystemPtr _0809C7F4: movs r3, 0x1 mov r9, r3 @@ -11386,7 +11018,7 @@ _0809C84C: thumb_func_start sub_809C85C sub_809C85C: @ 809C85C push {r4-r6,lr} - ldr r0, _0809C894 @ =gUnknown_083B6DB4 + ldr r0, _0809C894 @ =gPokemonStorageSystemPtr ldr r2, [r0] ldr r1, _0809C898 @ =0x000011df adds r0, r2, r1 @@ -11413,7 +11045,7 @@ sub_809C85C: @ 809C85C movs r5, 0x2 b _0809C922 .align 2, 0 -_0809C894: .4byte gUnknown_083B6DB4 +_0809C894: .4byte gPokemonStorageSystemPtr _0809C898: .4byte 0x000011df _0809C89C: .4byte 0x000011de _0809C8A0: .4byte 0x000011e3 @@ -11514,7 +11146,7 @@ sub_809C944: @ 809C944 mov r12, r0 ldr r7, _0809C98C @ =gUnknown_020384E5 ldrb r3, [r7] - ldr r0, _0809C990 @ =gUnknown_083B6DB4 + ldr r0, _0809C990 @ =gPokemonStorageSystemPtr ldr r1, [r0] ldr r0, _0809C994 @ =0x000011df adds r5, r1, r0 @@ -11544,7 +11176,7 @@ sub_809C944: @ 809C944 .align 2, 0 _0809C988: .4byte gUnknown_020384E4 _0809C98C: .4byte gUnknown_020384E5 -_0809C990: .4byte gUnknown_083B6DB4 +_0809C990: .4byte gPokemonStorageSystemPtr _0809C994: .4byte 0x000011df _0809C998: .4byte 0x000011de _0809C99C: .4byte gMain @@ -11706,7 +11338,7 @@ sub_809CAB0: @ 809CAB0 bl sub_809AB8C lsls r0, 16 lsrs r1, r0, 16 - ldr r0, _0809CAD4 @ =gUnknown_083B6DB4 + ldr r0, _0809CAD4 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldrb r0, [r0, 0x5] cmp r0, 0x1 @@ -11717,7 +11349,7 @@ sub_809CAB0: @ 809CAB0 beq _0809CAEA b _0809CB24 .align 2, 0 -_0809CAD4: .4byte gUnknown_083B6DB4 +_0809CAD4: .4byte gPokemonStorageSystemPtr _0809CAD8: cmp r0, 0x2 beq _0809CAF6 @@ -11762,7 +11394,7 @@ _0809CB24: _0809CB28: movs r0, 0x6 bl sub_809CDEC - ldr r0, _0809CB4C @ =gUnknown_083B6DB4 + ldr r0, _0809CB4C @ =gPokemonStorageSystemPtr ldr r0, [r0] ldrb r0, [r0, 0x5] cmp r0, 0x2 @@ -11777,7 +11409,7 @@ _0809CB28: bl sub_809CDEC b _0809CB5A .align 2, 0 -_0809CB4C: .4byte gUnknown_083B6DB4 +_0809CB4C: .4byte gPokemonStorageSystemPtr _0809CB50: .4byte gUnknown_020384E4 _0809CB54: movs r0, 0x1 @@ -11797,7 +11429,7 @@ _0809CB6E: thumb_func_start sub_809CB74 sub_809CB74: @ 809CB74 - ldr r1, _0809CB90 @ =gUnknown_083B6DB4 + ldr r1, _0809CB90 @ =gPokemonStorageSystemPtr ldr r1, [r1] movs r2, 0x8E lsls r2, 5 @@ -11811,7 +11443,7 @@ sub_809CB74: @ 809CB74 strh r1, [r0, 0x22] bx lr .align 2, 0 -_0809CB90: .4byte gUnknown_083B6DB4 +_0809CB90: .4byte gPokemonStorageSystemPtr thumb_func_end sub_809CB74 thumb_func_start unref_sub_809CB94 @@ -11893,7 +11525,7 @@ sub_809CC04: @ 809CC04 bl LoadSpritePalettes ldr r0, _0809CCB8 @ =0x0000dac6 bl IndexOfSpritePaletteTag - ldr r1, _0809CCBC @ =gUnknown_083B6DB4 + ldr r1, _0809CCBC @ =gPokemonStorageSystemPtr ldr r6, [r1] ldr r4, _0809CCC0 @ =0x000011e4 adds r7, r6, r4 @@ -11955,7 +11587,7 @@ sub_809CC04: @ 809CC04 _0809CCB0: .4byte gHandCursorSpriteSheets _0809CCB4: .4byte gHandCursorSpritePalettes _0809CCB8: .4byte 0x0000dac6 -_0809CCBC: .4byte gUnknown_083B6DB4 +_0809CCBC: .4byte gPokemonStorageSystemPtr _0809CCC0: .4byte 0x000011e4 _0809CCC4: .4byte 0x0000dad1 _0809CCC8: .4byte 0x000011e5 @@ -11995,7 +11627,7 @@ _0809CD08: lsrs r2, r0, 24 cmp r2, 0x40 beq _0809CD6C - ldr r0, _0809CD5C @ =gUnknown_083B6DB4 + ldr r0, _0809CD5C @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r1, _0809CD60 @ =0x000011c4 adds r4, r0, r1 @@ -12027,12 +11659,12 @@ _0809CD08: b _0809CD78 .align 2, 0 _0809CD58: .4byte gSpriteTemplate_83BBC88 -_0809CD5C: .4byte gUnknown_083B6DB4 +_0809CD5C: .4byte gPokemonStorageSystemPtr _0809CD60: .4byte 0x000011c4 _0809CD64: .4byte gSprites _0809CD68: .4byte gUnknown_020384E4 _0809CD6C: - ldr r0, _0809CD80 @ =gUnknown_083B6DB4 + ldr r0, _0809CD80 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r2, _0809CD84 @ =0x000011c4 adds r0, r2 @@ -12044,7 +11676,7 @@ _0809CD78: pop {r0} bx r0 .align 2, 0 -_0809CD80: .4byte gUnknown_083B6DB4 +_0809CD80: .4byte gPokemonStorageSystemPtr _0809CD84: .4byte 0x000011c4 thumb_func_end sub_809CC04 @@ -12059,7 +11691,7 @@ sub_809CD88: @ 809CD88 movs r1, 0x1 _0809CD96: strb r1, [r2] - ldr r0, _0809CDC4 @ =gUnknown_083B6DB4 + ldr r0, _0809CDC4 @ =gPokemonStorageSystemPtr ldr r0, [r0] movs r3, 0x8E lsls r3, 5 @@ -12080,13 +11712,13 @@ _0809CD96: bx r0 .align 2, 0 _0809CDC0: .4byte gUnknown_020384E9 -_0809CDC4: .4byte gUnknown_083B6DB4 +_0809CDC4: .4byte gPokemonStorageSystemPtr _0809CDC8: .4byte 0x000011e4 thumb_func_end sub_809CD88 thumb_func_start sub_809CDCC sub_809CDCC: @ 809CDCC - ldr r0, _0809CDE0 @ =gUnknown_083B6DB4 + ldr r0, _0809CDE0 @ =gPokemonStorageSystemPtr ldr r0, [r0] ldr r2, _0809CDE4 @ =0x000011b8 adds r1, r0, r2 @@ -12097,7 +11729,7 @@ sub_809CDCC: @ 809CDCC strb r2, [r0] bx lr .align 2, 0 -_0809CDE0: .4byte gUnknown_083B6DB4 +_0809CDE0: .4byte gPokemonStorageSystemPtr _0809CDE4: .4byte 0x000011b8 _0809CDE8: .4byte 0x000011b9 thumb_func_end sub_809CDCC @@ -12107,7 +11739,7 @@ sub_809CDEC: @ 809CDEC push {r4,r5,lr} lsls r0, 24 lsrs r3, r0, 24 - ldr r0, _0809CE3C @ =gUnknown_083B6DB4 + ldr r0, _0809CE3C @ =gPokemonStorageSystemPtr ldr r5, [r0] ldr r0, _0809CE40 @ =0x000011b8 adds r4, r5, r0 @@ -12146,7 +11778,7 @@ _0809CE36: pop {r0} bx r0 .align 2, 0 -_0809CE3C: .4byte gUnknown_083B6DB4 +_0809CE3C: .4byte gPokemonStorageSystemPtr _0809CE40: .4byte 0x000011b8 _0809CE44: .4byte gUnknown_083BBCA0 _0809CE48: .4byte 0x000011b9 @@ -12157,7 +11789,7 @@ sub_809CE4C: @ 809CE4C push {lr} lsls r0, 24 lsrs r2, r0, 24 - ldr r0, _0809CE70 @ =gUnknown_083B6DB4 + ldr r0, _0809CE70 @ =gPokemonStorageSystemPtr ldr r1, [r0] ldr r3, _0809CE74 @ =0x000011b8 adds r0, r1, r3 @@ -12172,7 +11804,7 @@ sub_809CE4C: @ 809CE4C ldrsb r0, [r1, r0] b _0809CE80 .align 2, 0 -_0809CE70: .4byte gUnknown_083B6DB4 +_0809CE70: .4byte gPokemonStorageSystemPtr _0809CE74: .4byte 0x000011b8 _0809CE78: .4byte 0x00001184 _0809CE7C: @@ -12191,7 +11823,7 @@ sub_809CE84: @ 809CE84 mov r4, r8 push {r4-r6} sub sp, 0x8 - ldr r0, _0809CF20 @ =gUnknown_083B6DB4 + ldr r0, _0809CF20 @ =gPokemonStorageSystemPtr ldr r4, [r0] ldr r0, _0809CF24 @ =0x000011b8 adds r0, r4 @@ -12261,7 +11893,7 @@ sub_809CE84: @ 809CE84 pop {r0} bx r0 .align 2, 0 -_0809CF20: .4byte gUnknown_083B6DB4 +_0809CF20: .4byte gPokemonStorageSystemPtr _0809CF24: .4byte 0x000011b8 _0809CF28: .4byte 0x000011bc _0809CF2C: .4byte 0x000011b9 @@ -12319,7 +11951,7 @@ _0809CF8E: cmp r5, r0 beq _0809CFB2 bl HandleDestroyMenuCursors - ldr r0, _0809CFD0 @ =gUnknown_083B6DB4 + ldr r0, _0809CFD0 @ =gPokemonStorageSystemPtr ldr r1, [r0] ldr r2, _0809CFD4 @ =0x000011ba adds r0, r1, r2 @@ -12333,7 +11965,7 @@ _0809CF8E: _0809CFB2: cmp r5, 0 blt _0809CFC4 - ldr r0, _0809CFD0 @ =gUnknown_083B6DB4 + ldr r0, _0809CFD0 @ =gPokemonStorageSystemPtr ldr r0, [r0] lsls r1, r5, 3 ldr r2, _0809CFD8 @ =0x00001184 @@ -12347,7 +11979,7 @@ _0809CFC4: pop {r1} bx r1 .align 2, 0 -_0809CFD0: .4byte gUnknown_083B6DB4 +_0809CFD0: .4byte gPokemonStorageSystemPtr _0809CFD4: .4byte 0x000011ba _0809CFD8: .4byte 0x00001184 thumb_func_end sub_809CF30 diff --git a/data/pokemon_storage_system.s b/data/pokemon_storage_system.s index 6bdb0edd0..b9b18e707 100644 --- a/data/pokemon_storage_system.s +++ b/data/pokemon_storage_system.s @@ -70,7 +70,7 @@ gUnknown_083B6D94:: @ 83B6D94 .incbin "graphics/pokemon_storage/83B6D94.gbapal" .align 2 -gUnknown_083B6DB4:: @ 83B6DB4 +gPokemonStorageSystemPtr:: @ 83B6DB4 .4byte gSharedMem .align 2 diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index d6119476c..b0a317cd9 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -5,6 +5,7 @@ #include "field_weather.h" #include "mon_markings.h" #include "overworld.h" +#include "mail_data.h" #include "field_fadetransition.h" #include "menu.h" #include "main.h" @@ -56,9 +57,14 @@ struct PokemonStorageSystemData { u16 unk_000a; struct PCScreenEffectStruct unk_000c; struct UnkStruct_2000020 unk_0020[274]; // refine size later - u8 filler_08b0[4]; + u8 filler_08b0[2]; + s16 unk_08b2; u16 unk_08b4; - u8 filler_08b6[0xa06]; + u8 filler_08b6[0x93c]; + u16 unk_11f2; + u8 filler_11f4[2]; + u8 unk_11f6; + u8 filler_11f7[0xc5]; struct PokemonMarkMenu unk_12bc; struct UnkPSSStruct_2002370 unk_2370; u8 filler_25b4[0xd8]; @@ -80,23 +86,48 @@ void task_intro_29(u8 whichMenu); void sub_8096884(void); void sub_8096AFC(void); void sub_8096B38(void); -void sub_8096BE0(void (*func)(void)); +void SetPSSCallback(void (*func)(void)); void sub_8096BF0(void); void sub_8096C68(void); void sub_8096C84(void); +void sub_8097004(void); +void sub_8097078(void); +void sub_80972A8(void); +void sub_80972FC(void); +void c3_0808DC50(void); +void sub_8097390(void); +void sub_809746C(void); +void sub_809789C(void); +void sub_8097BA0(void); +void sub_8097CC0(void); +void BoxSetMosaic(void); +void sub_80986E8(void); +void sub_8098710(void); +void sub_8098A5C(void); +void sub_809B440(void); +void sub_8096FC8(void); void sub_8097DE0(void); void sub_8097E44(void); void sub_8097E70(void); void sub_8098400(void); void sub_8098734(void); -void sub_8099BF8(u8 a0); +void sub_8098898(u8 index); void sub_8098B48(void); +void sub_8099BF8(u8 a0); +void sub_8099C70(u8 whichBox); +bool8 sub_8099D34(void); struct Sprite *sub_809A9A0(u16 a0, u16 a1, u8 a2, u8 a3, u8 a4); void sub_809AA24(void); void sub_809AA98(void); +bool8 sub_809AC00(void); void sub_809B0D4(void); void sub_809BBC0(void); void sub_809BD14(void); +bool8 sub_809BE80(void); +bool8 sub_809BEBC(void); +bool8 sub_809BF20(void); +bool8 sub_809BF48(void); +u8 sub_809CA40(void); void sub_809CFDC(struct UnkStruct_2000020 *a0, struct UnkStruct_2000020 *a1, u8 a2); void sub_809CFF0(void); @@ -150,7 +181,7 @@ const u8 gBoxSelectionPopupCenterTiles[] = INCBIN_U8("graphics/pokemon_storage/b const u8 gBoxSelectionPopupSidesTiles[] = INCBIN_U8("graphics/pokemon_storage/box_selection_popup_sides.4bpp"); extern const struct StorageAction gUnknown_083B6DF4[]; -extern const struct PokemonStorageSystemData *gUnknown_083B6DB4; +extern const struct PokemonStorageSystemData *gPokemonStorageSystemPtr; extern u8 *const gUnknown_083B6DB8; EWRAM_DATA struct PokemonStorage gPokemonStorage = {0}; @@ -571,7 +602,7 @@ void StorageSystemCreatePrimaryMenu(u8 whichMenu) void sub_80961A8(void) { - gUnknown_02038474 = gUnknown_083B6DB4->unk_0005; + gUnknown_02038474 = gPokemonStorageSystemPtr->unk_0005; gFieldCallback = sub_8096130; SetMainCallback2(c2_exit_to_overworld_2_switch); } @@ -899,7 +930,7 @@ void sub_8096884(void) break; case 9: sub_8096874(); - sub_8096BE0(sub_8096BF0); + SetPSSCallback(sub_8096BF0); SetMainCallback2(sub_8096B38); SetVBlankCallback(sub_8096AFC); gMain.state++; @@ -967,7 +998,7 @@ void sub_80969A0(void) break; case 10: sub_8096874(); - sub_8096BE0(sub_8096C68); + SetPSSCallback(sub_8096C68); SetMainCallback2(sub_8096B38); gMain.state++; break; @@ -1007,7 +1038,7 @@ void sub_8096B5C(void) } } -void sub_8096BE0(void (*func)(void)) +void SetPSSCallback(void (*func)(void)) { ePokemonStorageSystem.unk_0000 = func; ePokemonStorageSystem.unk_0004 = 0; @@ -1033,7 +1064,7 @@ void sub_8096BF0(void) break; case 2: if (sub_80C5DCC()) - sub_8096BE0(sub_8096C84); + SetPSSCallback(sub_8096C84); break; } } @@ -1041,7 +1072,174 @@ void sub_8096BF0(void) void sub_8096C68(void) { if (!UpdatePaletteFade()) - sub_8096BE0(sub_8096C84); + SetPSSCallback(sub_8096C84); +} + +void sub_8096C84(void) +{ + switch (ePokemonStorageSystem.unk_0004) + { + case 0: + switch (sub_809CA40()) + { + case 1: + PlaySE(SE_SELECT); + ePokemonStorageSystem.unk_0004 = 1; + break; + case 5: + if (ePokemonStorageSystem.unk_0005 != 2) + { + sub_8098898(16); + ePokemonStorageSystem.unk_0004 = 3; + } + else + { + sub_809B0D4(); + SetPSSCallback(sub_8096FC8); + } + break; + case 6: + if (ePokemonStorageSystem.unk_0005 == 2) + { + if (sub_809BF20() && ItemIsMail(ePokemonStorageSystem.unk_11f2)) + { + ePokemonStorageSystem.unk_0004 = 5; + } + else + { + SetPSSCallback(sub_8097004); + } + } + break; + case 4: + SetPSSCallback(sub_8097BA0); + break; + case 16: + SetPSSCallback(sub_8097CC0); + break; + case 7: + PlaySE(SE_SELECT); + SetPSSCallback(sub_809789C); + break; + case 8: + PlaySE(SE_SELECT); + SetPSSCallback(sub_8097078); + break; + case 9: + PlaySE(SE_SELECT); + ePokemonStorageSystem.unk_08b2 = gPokemonStorage.currentBox + 1; + if (ePokemonStorageSystem.unk_08b2 > 13) + ePokemonStorageSystem.unk_08b2 = 0; + sub_8099C70(ePokemonStorageSystem.unk_08b2); + ePokemonStorageSystem.unk_0004 = 2; + break; + case 10: + PlaySE(SE_SELECT); + ePokemonStorageSystem.unk_08b2 = gPokemonStorage.currentBox - 1; + if (ePokemonStorageSystem.unk_08b2 < 0) + ePokemonStorageSystem.unk_08b2 = 13; + sub_8099C70(ePokemonStorageSystem.unk_08b2); + ePokemonStorageSystem.unk_0004 = 2; + break; + case 11: + if (!sub_809BE80()) + { + if (ItemIsMail(ePokemonStorageSystem.unk_11f2)) + { + ePokemonStorageSystem.unk_0004 = 5; + } + else + { + PlaySE(SE_SELECT); + SetPSSCallback(sub_809746C); + } + } + else + { + ePokemonStorageSystem.unk_0004 = 4; + } + break; + case 13: + if (sub_809BE80()) + { + ePokemonStorageSystem.unk_0004 = 4; + } + else + { + PlaySE(SE_SELECT); + SetPSSCallback(sub_80972A8); + } + break; + case 14: + if (!sub_809BEBC()) + { + ePokemonStorageSystem.unk_0004 = 4; + } + else + { + PlaySE(SE_SELECT); + SetPSSCallback(c3_0808DC50); + } + break; + case 12: + PlaySE(SE_SELECT); + SetPSSCallback(sub_8097390); + break; + case 15: + PlaySE(SE_SELECT); + SetPSSCallback(sub_80972FC); + break; + } + break; + case 1: + if (!sub_809AC00()) + { + if (sub_809BF48()) + sub_80986E8(); + else + sub_8098710(); + if (ePokemonStorageSystem.unk_11f6) + BoxSetMosaic(); + ePokemonStorageSystem.unk_0004 = 0; + } + break; + case 2: + if (!sub_8099D34()) + { + gPokemonStorage.currentBox = ePokemonStorageSystem.unk_08b2; + if (!gUnknown_0203847C && !sub_809BF20()) + { + sub_809B440(); + BoxSetMosaic(); + } + ePokemonStorageSystem.unk_0004 = 0; + } + break; + case 3: + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + { + sub_8098A5C(); + ePokemonStorageSystem.unk_0004 = 0; + } + break; + case 4: + PlaySE(SE_HAZURE); + sub_8098898(13); + ePokemonStorageSystem.unk_0004 = 6; + break; + case 5: + PlaySE(SE_HAZURE); + sub_8098898(22); + ePokemonStorageSystem.unk_0004 = 6; + break; + case 6: + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + { + sub_8098A5C(); + SetPSSCallback(sub_8096C84); + } + break; + } } asm(".section .text.8098898"); -- cgit v1.2.3 From 56c2c7ef00396c53a8bc859141b46fa488bb42fa Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 8 Jan 2018 13:39:22 -0700 Subject: through sub_8097078 --- asm/pokemon_storage_system.s | 334 ----------------------------------- src/pokemon/pokemon_storage_system.c | 190 +++++++++++++++++++- 2 files changed, 183 insertions(+), 341 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 8dab0b2fd..46d6b8502 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,340 +5,6 @@ .text - thumb_func_start sub_8096FC8 -sub_8096FC8: @ 8096FC8 - push {r4,lr} - ldr r4, _08096FD8 @ =gSharedMem - ldrb r0, [r4, 0x4] - cmp r0, 0 - beq _08096FDC - cmp r0, 0x1 - beq _08096FE8 - b _08096FF8 - .align 2, 0 -_08096FD8: .4byte gSharedMem -_08096FDC: - bl sub_809880C - ldrb r0, [r4, 0x4] - adds r0, 0x1 - strb r0, [r4, 0x4] - b _08096FF8 -_08096FE8: - bl sub_8098830 - lsls r0, 24 - cmp r0, 0 - bne _08096FF8 - ldr r0, _08097000 @ =sub_8096C84 - bl SetPSSCallback -_08096FF8: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08097000: .4byte sub_8096C84 - thumb_func_end sub_8096FC8 - - thumb_func_start sub_8097004 -sub_8097004: @ 8097004 - push {r4,lr} - ldr r4, _08097018 @ =gSharedMem - ldrb r0, [r4, 0x4] - cmp r0, 0x1 - beq _0809702E - cmp r0, 0x1 - bgt _0809701C - cmp r0, 0 - beq _08097022 - b _0809706A - .align 2, 0 -_08097018: .4byte gSharedMem -_0809701C: - cmp r0, 0x2 - beq _0809704C - b _0809706A -_08097022: - movs r0, 0x5 - bl PlaySE - bl add_to_c3_somehow - b _08097044 -_0809702E: - bl sub_80985CC - lsls r0, 24 - cmp r0, 0 - bne _0809706A - bl sub_809B0F4 - lsls r0, 24 - lsrs r0, 24 - bl sub_809B0C0 -_08097044: - ldrb r0, [r4, 0x4] - adds r0, 0x1 - strb r0, [r4, 0x4] - b _0809706A -_0809704C: - bl sub_809AC00 - lsls r0, 24 - cmp r0, 0 - bne _0809706A - ldr r1, _08097070 @ =0x000011f6 - adds r0, r4, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _08097064 - bl BoxSetMosaic -_08097064: - ldr r0, _08097074 @ =sub_8096C84 - bl SetPSSCallback -_0809706A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08097070: .4byte 0x000011f6 -_08097074: .4byte sub_8096C84 - thumb_func_end sub_8097004 - - thumb_func_start sub_8097078 -sub_8097078: @ 8097078 - push {r4,lr} - ldr r0, _08097090 @ =gSharedMem - ldrb r0, [r0, 0x4] - cmp r0, 0x5 - bls _08097084 - b _0809729A -_08097084: - lsls r0, 2 - ldr r1, _08097094 @ =_08097098 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08097090: .4byte gSharedMem -_08097094: .4byte _08097098 - .align 2, 0 -_08097098: - .4byte _080970B0 - .4byte _080970C8 - .4byte _08097258 - .4byte _0809726C - .4byte _08097262 - .4byte _08097284 -_080970B0: - movs r0, 0x4 - bl sub_8098898 - bl sub_809CE84 - ldr r1, _080970C4 @ =gSharedMem - movs r0, 0x1 - strb r0, [r1, 0x4] - b _0809729A - .align 2, 0 -_080970C4: .4byte gSharedMem -_080970C8: - bl sub_809CF30 - adds r0, 0x1 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x9 - bls _080970D8 - b _0809729A -_080970D8: - lsls r0, 2 - ldr r1, _080970E4 @ =_080970E8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080970E4: .4byte _080970E8 - .align 2, 0 -_080970E8: - .4byte _08097110 - .4byte _08097110 - .4byte _08097190 - .4byte _08097178 - .4byte _08097120 - .4byte _08097158 - .4byte _08097140 - .4byte _08097230 - .4byte _080971CC - .4byte _08097244 -_08097110: - bl sub_8098A5C - ldr r0, _0809711C @ =sub_8096C84 - bl SetPSSCallback - b _0809729A - .align 2, 0 -_0809711C: .4byte sub_8096C84 -_08097120: - bl sub_809BE80 - lsls r0, 24 - cmp r0, 0 - bne _080971D6 - movs r0, 0x5 - bl PlaySE - bl sub_8098A5C - ldr r0, _0809713C @ =sub_80972A8 - bl SetPSSCallback - b _0809729A - .align 2, 0 -_0809713C: .4byte sub_80972A8 -_08097140: - movs r0, 0x5 - bl PlaySE - bl sub_8098A5C - ldr r0, _08097154 @ =sub_80972FC - bl SetPSSCallback - b _0809729A - .align 2, 0 -_08097154: .4byte sub_80972FC -_08097158: - bl sub_809BEBC - lsls r0, 24 - cmp r0, 0 - beq _080971D6 - movs r0, 0x5 - bl PlaySE - bl sub_8098A5C - ldr r0, _08097174 @ =c3_0808DC50 - bl SetPSSCallback - b _0809729A - .align 2, 0 -_08097174: .4byte c3_0808DC50 -_08097178: - movs r0, 0x5 - bl PlaySE - bl sub_8098A5C - ldr r0, _0809718C @ =sub_8097390 - bl SetPSSCallback - b _0809729A - .align 2, 0 -_0809718C: .4byte sub_8097390 -_08097190: - bl sub_809BE80 - lsls r0, 24 - cmp r0, 0 - bne _080971D6 - ldr r4, _080971C0 @ =gSharedMem - ldr r1, _080971C4 @ =0x000011f2 - adds r0, r4, r1 - ldrh r0, [r0] - bl ItemIsMail - lsls r0, 24 - cmp r0, 0 - bne _08097210 - movs r0, 0x5 - bl PlaySE - bl sub_8098A5C - ldr r0, _080971C8 @ =sub_809746C - bl SetPSSCallback - b _0809729A - .align 2, 0 -_080971C0: .4byte gSharedMem -_080971C4: .4byte 0x000011f2 -_080971C8: .4byte sub_809746C -_080971CC: - bl sub_809BE80 - lsls r0, 24 - cmp r0, 0 - beq _080971E4 -_080971D6: - ldr r1, _080971E0 @ =gSharedMem - movs r0, 0x2 - strb r0, [r1, 0x4] - b _0809729A - .align 2, 0 -_080971E0: .4byte gSharedMem -_080971E4: - ldr r4, _080971F8 @ =gSharedMem - ldr r1, _080971FC @ =0x000011f9 - adds r0, r4, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _08097200 - movs r0, 0x4 - strb r0, [r4, 0x4] - b _0809729A - .align 2, 0 -_080971F8: .4byte gSharedMem -_080971FC: .4byte 0x000011f9 -_08097200: - ldr r1, _08097218 @ =0x000011f2 - adds r0, r4, r1 - ldrh r0, [r0] - bl ItemIsMail - lsls r0, 24 - cmp r0, 0 - beq _0809721C -_08097210: - movs r0, 0x3 - strb r0, [r4, 0x4] - b _0809729A - .align 2, 0 -_08097218: .4byte 0x000011f2 -_0809721C: - movs r0, 0x5 - bl PlaySE - ldr r0, _0809722C @ =sub_8097594 - bl SetPSSCallback - b _0809729A - .align 2, 0 -_0809722C: .4byte sub_8097594 -_08097230: - movs r0, 0x5 - bl PlaySE - ldr r0, _08097240 @ =sub_8097788 - bl SetPSSCallback - b _0809729A - .align 2, 0 -_08097240: .4byte sub_8097788 -_08097244: - movs r0, 0x5 - bl PlaySE - ldr r0, _08097254 @ =sub_80977E4 - bl SetPSSCallback - b _0809729A - .align 2, 0 -_08097254: .4byte sub_80977E4 -_08097258: - movs r0, 0x20 - bl PlaySE - movs r0, 0xD - b _08097274 -_08097262: - movs r0, 0x20 - bl PlaySE - movs r0, 0x11 - b _08097274 -_0809726C: - movs r0, 0x20 - bl PlaySE - movs r0, 0x16 -_08097274: - bl sub_8098898 - ldr r1, _08097280 @ =gSharedMem - movs r0, 0x5 - strb r0, [r1, 0x4] - b _0809729A - .align 2, 0 -_08097280: .4byte gSharedMem -_08097284: - ldr r0, _080972A0 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0xF3 - ands r0, r1 - cmp r0, 0 - beq _0809729A - bl sub_8098A5C - ldr r0, _080972A4 @ =sub_8096C84 - bl SetPSSCallback -_0809729A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080972A0: .4byte gMain -_080972A4: .4byte sub_8096C84 - thumb_func_end sub_8097078 - thumb_func_start sub_80972A8 sub_80972A8: @ 80972A8 push {r4,lr} diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index b0a317cd9..feed68e50 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -64,7 +64,9 @@ struct PokemonStorageSystemData { u16 unk_11f2; u8 filler_11f4[2]; u8 unk_11f6; - u8 filler_11f7[0xc5]; + u8 filler_11f7[2]; + u8 unk_11f9; + u8 filler_11fa[0xc2]; struct PokemonMarkMenu unk_12bc; struct UnkPSSStruct_2002370 unk_2370; u8 filler_25b4[0xd8]; @@ -90,6 +92,7 @@ void SetPSSCallback(void (*func)(void)); void sub_8096BF0(void); void sub_8096C68(void); void sub_8096C84(void); +void sub_8096FC8(void); void sub_8097004(void); void sub_8097078(void); void sub_80972A8(void); @@ -97,21 +100,26 @@ void sub_80972FC(void); void c3_0808DC50(void); void sub_8097390(void); void sub_809746C(void); +void sub_8097594(void); +void sub_8097788(void); +void sub_80977E4(void); void sub_809789C(void); void sub_8097BA0(void); void sub_8097CC0(void); -void BoxSetMosaic(void); -void sub_80986E8(void); -void sub_8098710(void); -void sub_8098A5C(void); -void sub_809B440(void); -void sub_8096FC8(void); void sub_8097DE0(void); void sub_8097E44(void); void sub_8097E70(void); +void BoxSetMosaic(void); void sub_8098400(void); +void add_to_c3_somehow(void); +bool8 sub_80985CC(void); +void sub_80986E8(void); +void sub_8098710(void); void sub_8098734(void); +void sub_809880C(void); +bool8 sub_8098830(void); void sub_8098898(u8 index); +void sub_8098A5C(void); void sub_8098B48(void); void sub_8099BF8(u8 a0); void sub_8099C70(u8 whichBox); @@ -120,7 +128,10 @@ struct Sprite *sub_809A9A0(u16 a0, u16 a1, u8 a2, u8 a3, u8 a4); void sub_809AA24(void); void sub_809AA98(void); bool8 sub_809AC00(void); +void sub_809B0C0(u8 a0); void sub_809B0D4(void); +u8 sub_809B0F4(void); +void sub_809B440(void); void sub_809BBC0(void); void sub_809BD14(void); bool8 sub_809BE80(void); @@ -128,6 +139,8 @@ bool8 sub_809BEBC(void); bool8 sub_809BF20(void); bool8 sub_809BF48(void); u8 sub_809CA40(void); +void sub_809CE84(void); +s16 sub_809CF30(void); void sub_809CFDC(struct UnkStruct_2000020 *a0, struct UnkStruct_2000020 *a1, u8 a2); void sub_809CFF0(void); @@ -1242,6 +1255,169 @@ void sub_8096C84(void) } } +void sub_8096FC8(void) +{ + switch (ePokemonStorageSystem.unk_0004) + { + case 0: + sub_809880C(); + ePokemonStorageSystem.unk_0004++; + break; + case 1: + if (!sub_8098830()) + SetPSSCallback(sub_8096C84); + break; + } +} + +void sub_8097004(void) +{ + switch (ePokemonStorageSystem.unk_0004) + { + case 0: + PlaySE(SE_SELECT); + add_to_c3_somehow(); + ePokemonStorageSystem.unk_0004++; + break; + case 1: + if (!sub_80985CC()) + { + sub_809B0C0(sub_809B0F4()); + ePokemonStorageSystem.unk_0004++; + } + break; + case 2: + if (!sub_809AC00()) + { + if (ePokemonStorageSystem.unk_11f6) + BoxSetMosaic(); + SetPSSCallback(sub_8096C84); + } + break; + } +} + +void sub_8097078(void) +{ + switch (ePokemonStorageSystem.unk_0004) + { + case 0: + sub_8098898(4); + sub_809CE84(); + ePokemonStorageSystem.unk_0004 = 1; + break; + case 1: + switch (sub_809CF30()) + { + case -1: + case 0: + sub_8098A5C(); + SetPSSCallback(sub_8096C84); + break; + case 3: + if (sub_809BE80()) + { + ePokemonStorageSystem.unk_0004 = 2; + } + else + { + PlaySE(SE_SELECT); + sub_8098A5C(); + SetPSSCallback(sub_80972A8); + } + break; + case 5: + PlaySE(SE_SELECT); + sub_8098A5C(); + SetPSSCallback(sub_80972FC); + break; + case 4: + if (!sub_809BEBC()) + { + ePokemonStorageSystem.unk_0004 = 2; + } + else + { + PlaySE(SE_SELECT); + sub_8098A5C(); + SetPSSCallback(c3_0808DC50); + } + break; + case 2: + PlaySE(SE_SELECT); + sub_8098A5C(); + SetPSSCallback(sub_8097390); + break; + case 1: + if (sub_809BE80()) + { + ePokemonStorageSystem.unk_0004 = 2; + } + else if (ItemIsMail(ePokemonStorageSystem.unk_11f2)) + { + ePokemonStorageSystem.unk_0004 = 3; + } + else + { + PlaySE(SE_SELECT); + sub_8098A5C(); + SetPSSCallback(sub_809746C); + } + break; + case 7: + if (sub_809BE80()) + { + ePokemonStorageSystem.unk_0004 = 2; + } + else if (ePokemonStorageSystem.unk_11f9) + { + ePokemonStorageSystem.unk_0004 = 4; + } + else if (ItemIsMail(ePokemonStorageSystem.unk_11f2)) + { + ePokemonStorageSystem.unk_0004 = 3; + } + else + { + PlaySE(SE_SELECT); + SetPSSCallback(sub_8097594); + } + break; + case 6: + PlaySE(SE_SELECT); + SetPSSCallback(sub_8097788); + break; + case 8: + PlaySE(SE_SELECT); + SetPSSCallback(sub_80977E4); + break; + } + break; + case 2: + PlaySE(SE_HAZURE); + sub_8098898(13); + ePokemonStorageSystem.unk_0004 = 5; + break; + case 4: + PlaySE(SE_HAZURE); + sub_8098898(17); + ePokemonStorageSystem.unk_0004 = 5; + break; + case 3: + PlaySE(SE_HAZURE); + sub_8098898(22); + ePokemonStorageSystem.unk_0004 = 5; + break; + case 5: + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + { + sub_8098A5C(); + SetPSSCallback(sub_8096C84); + } + break; + } +} + asm(".section .text.8098898"); void sub_8098898(u8 index) { -- cgit v1.2.3 From 673d64c35b21ebb8f3c6fc8b547c7f736fa4f593 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 8 Jan 2018 13:53:24 -0700 Subject: through sub_8097390 --- asm/pokemon_storage_system.s | 225 ----------------------------------- src/pokemon/pokemon_storage_system.c | 114 ++++++++++++++++++ 2 files changed, 114 insertions(+), 225 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 46d6b8502..245a69131 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,231 +5,6 @@ .text - thumb_func_start sub_80972A8 -sub_80972A8: @ 80972A8 - push {r4,lr} - ldr r4, _080972B8 @ =gSharedMem - ldrb r0, [r4, 0x4] - cmp r0, 0 - beq _080972BC - cmp r0, 0x1 - beq _080972CA - b _080972F2 - .align 2, 0 -_080972B8: .4byte gSharedMem -_080972BC: - movs r0, 0 - bl sub_809B100 - ldrb r0, [r4, 0x4] - adds r0, 0x1 - strb r0, [r4, 0x4] - b _080972F2 -_080972CA: - bl sub_809B130 - lsls r0, 24 - cmp r0, 0 - bne _080972F2 - ldr r0, _080972E4 @ =gUnknown_0203847C - ldrb r0, [r0] - cmp r0, 0 - beq _080972EC - ldr r0, _080972E8 @ =sub_8097858 - bl SetPSSCallback - b _080972F2 - .align 2, 0 -_080972E4: .4byte gUnknown_0203847C -_080972E8: .4byte sub_8097858 -_080972EC: - ldr r0, _080972F8 @ =sub_8096C84 - bl SetPSSCallback -_080972F2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080972F8: .4byte sub_8096C84 - thumb_func_end sub_80972A8 - - thumb_func_start sub_80972FC -sub_80972FC: @ 80972FC - push {r4,lr} - ldr r4, _0809730C @ =gSharedMem - ldrb r0, [r4, 0x4] - cmp r0, 0 - beq _08097310 - cmp r0, 0x1 - beq _0809731E - b _08097346 - .align 2, 0 -_0809730C: .4byte gSharedMem -_08097310: - movs r0, 0x1 - bl sub_809B100 - ldrb r0, [r4, 0x4] - adds r0, 0x1 - strb r0, [r4, 0x4] - b _08097346 -_0809731E: - bl sub_809B130 - lsls r0, 24 - cmp r0, 0 - bne _08097346 - ldr r0, _08097338 @ =gUnknown_0203847C - ldrb r0, [r0] - cmp r0, 0 - beq _08097340 - ldr r0, _0809733C @ =sub_8097858 - bl SetPSSCallback - b _08097346 - .align 2, 0 -_08097338: .4byte gUnknown_0203847C -_0809733C: .4byte sub_8097858 -_08097340: - ldr r0, _0809734C @ =sub_8096C84 - bl SetPSSCallback -_08097346: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809734C: .4byte sub_8096C84 - thumb_func_end sub_80972FC - - thumb_func_start c3_0808DC50 -c3_0808DC50: @ 8097350 - push {r4,lr} - ldr r4, _08097360 @ =gSharedMem - ldrb r0, [r4, 0x4] - cmp r0, 0 - beq _08097364 - cmp r0, 0x1 - beq _08097372 - b _08097386 - .align 2, 0 -_08097360: .4byte gSharedMem -_08097364: - movs r0, 0x2 - bl sub_809B100 - ldrb r0, [r4, 0x4] - adds r0, 0x1 - strb r0, [r4, 0x4] - b _08097386 -_08097372: - bl sub_809B130 - lsls r0, 24 - cmp r0, 0 - bne _08097386 - bl BoxSetMosaic - ldr r0, _0809738C @ =sub_8096C84 - bl SetPSSCallback -_08097386: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809738C: .4byte sub_8096C84 - thumb_func_end c3_0808DC50 - - thumb_func_start sub_8097390 -sub_8097390: @ 8097390 - push {lr} - ldr r0, _080973A4 @ =gSharedMem - ldrb r0, [r0, 0x4] - cmp r0, 0x5 - bhi _08097462 - lsls r0, 2 - ldr r1, _080973A8 @ =_080973AC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080973A4: .4byte gSharedMem -_080973A8: .4byte _080973AC - .align 2, 0 -_080973AC: - .4byte _080973C4 - .4byte _080973FC - .4byte _0809741C - .4byte _0809742C - .4byte _0809743E - .4byte _0809745C -_080973C4: - bl CalculatePlayerPartyCount - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x6 - bne _080973E4 - movs r0, 0xE - bl sub_8098898 - ldr r1, _080973E0 @ =gSharedMem - movs r0, 0x1 - strb r0, [r1, 0x4] - b _08097462 - .align 2, 0 -_080973E0: .4byte gSharedMem -_080973E4: - bl sub_809B0E0 - movs r0, 0 - bl sub_809B100 - ldr r1, _080973F8 @ =gSharedMem - movs r0, 0x2 - strb r0, [r1, 0x4] - b _08097462 - .align 2, 0 -_080973F8: .4byte gSharedMem -_080973FC: - ldr r0, _08097414 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0xF3 - ands r0, r1 - cmp r0, 0 - beq _08097462 - bl sub_8098A5C - ldr r0, _08097418 @ =sub_8096C84 - bl SetPSSCallback - b _08097462 - .align 2, 0 -_08097414: .4byte gMain -_08097418: .4byte sub_8096C84 -_0809741C: - bl sub_809B130 - lsls r0, 24 - cmp r0, 0 - bne _08097462 - bl sub_809880C - b _0809744C -_0809742C: - bl sub_8098830 - lsls r0, 24 - cmp r0, 0 - bne _08097462 - movs r0, 0x1 - bl sub_809B100 - b _0809744C -_0809743E: - bl sub_809B130 - lsls r0, 24 - cmp r0, 0 - bne _08097462 - bl sub_80987DC -_0809744C: - ldr r1, _08097458 @ =gSharedMem - ldrb r0, [r1, 0x4] - adds r0, 0x1 - strb r0, [r1, 0x4] - b _08097462 - .align 2, 0 -_08097458: .4byte gSharedMem -_0809745C: - ldr r0, _08097468 @ =sub_8097004 - bl SetPSSCallback -_08097462: - pop {r0} - bx r0 - .align 2, 0 -_08097468: .4byte sub_8097004 - thumb_func_end sub_8097390 - thumb_func_start sub_809746C sub_809746C: @ 809746C push {r4,lr} diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index feed68e50..6f51b823e 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -103,6 +103,7 @@ void sub_809746C(void); void sub_8097594(void); void sub_8097788(void); void sub_80977E4(void); +void sub_8097858(void); void sub_809789C(void); void sub_8097BA0(void); void sub_8097CC0(void); @@ -116,10 +117,13 @@ bool8 sub_80985CC(void); void sub_80986E8(void); void sub_8098710(void); void sub_8098734(void); +void sub_80987DC(void); void sub_809880C(void); bool8 sub_8098830(void); void sub_8098898(u8 index); void sub_8098A5C(void); +void sub_809B100(u8 a0); +bool8 sub_809B130(void); void sub_8098B48(void); void sub_8099BF8(u8 a0); void sub_8099C70(u8 whichBox); @@ -130,6 +134,7 @@ void sub_809AA98(void); bool8 sub_809AC00(void); void sub_809B0C0(u8 a0); void sub_809B0D4(void); +void sub_809B0E0(void); u8 sub_809B0F4(void); void sub_809B440(void); void sub_809BBC0(void); @@ -1418,6 +1423,115 @@ void sub_8097078(void) } } +void sub_80972A8(void) +{ + switch (ePokemonStorageSystem.unk_0004) + { + case 0: + sub_809B100(0); + ePokemonStorageSystem.unk_0004++; + break; + case 1: + if (!sub_809B130()) + { + if (gUnknown_0203847C) + SetPSSCallback(sub_8097858); + else + SetPSSCallback(sub_8096C84); + } + break; + } +} + +void sub_80972FC(void) +{ + switch (ePokemonStorageSystem.unk_0004) + { + case 0: + sub_809B100(1); + ePokemonStorageSystem.unk_0004++; + break; + case 1: + if (!sub_809B130()) + { + if (gUnknown_0203847C) + SetPSSCallback(sub_8097858); + else + SetPSSCallback(sub_8096C84); + } + break; + } +} + +void c3_0808DC50(void) +{ + switch (ePokemonStorageSystem.unk_0004) + { + case 0: + sub_809B100(2); + ePokemonStorageSystem.unk_0004++; + break; + case 1: + if (!sub_809B130()) + { + BoxSetMosaic(); + SetPSSCallback(sub_8096C84); + } + break; + } +} + +void sub_8097390(void) +{ + switch (ePokemonStorageSystem.unk_0004) + { + case 0: + if (CalculatePlayerPartyCount() == 6) + { + sub_8098898(14); + ePokemonStorageSystem.unk_0004 = 1; + } + else + { + sub_809B0E0(); + sub_809B100(0); + ePokemonStorageSystem.unk_0004 = 2; + } + break; + case 1: + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + { + sub_8098A5C(); + SetPSSCallback(sub_8096C84); + } + break; + case 2: + if (!sub_809B130()) + { + sub_809880C(); + ePokemonStorageSystem.unk_0004++; + } + break; + case 3: + if (!sub_8098830()) + { + sub_809B100(1); + ePokemonStorageSystem.unk_0004++; + } + break; + case 4: + if (!sub_809B130()) + { + sub_80987DC(); + ePokemonStorageSystem.unk_0004++; + } + break; + case 5: + SetPSSCallback(sub_8097004); + break; + } +} + asm(".section .text.8098898"); void sub_8098898(u8 index) { -- cgit v1.2.3 From 78df16e7989be5142ed0d1fd01c4ece6483f0571 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 8 Jan 2018 14:57:26 -0700 Subject: Through sub_809746C; enums for PC storage actions --- asm/pokemon_storage_system.s | 153 +++-------------------------- data/pokemon_storage_system.s | 2 +- include/ewram.h | 4 - src/pokemon/pokemon_storage_system.c | 182 +++++++++++++++++++++++++++-------- 4 files changed, 156 insertions(+), 185 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 245a69131..2622e7d84 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,137 +5,6 @@ .text - thumb_func_start sub_809746C -sub_809746C: @ 809746C - push {r4,lr} - ldr r0, _08097484 @ =gSharedMem - ldrb r0, [r0, 0x4] - cmp r0, 0x4 - bls _08097478 - b _08097584 -_08097478: - lsls r0, 2 - ldr r1, _08097488 @ =_0809748C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08097484: .4byte gSharedMem -_08097488: .4byte _0809748C - .align 2, 0 -_0809748C: - .4byte _080974A0 - .4byte _080974D8 - .4byte _08097534 - .4byte _08097548 - .4byte _0809756C -_080974A0: - movs r0, 0x6 - bl sub_8098898 - ldr r4, _080974C8 @ =gSharedMem + 0x2370 - ldr r2, _080974CC @ =0x0000daca - adds r0, r4, 0 - movs r1, 0x7 - movs r3, 0x3 - bl sub_8096264 - ldr r0, _080974D0 @ =gUnknown_0203847E - ldrb r0, [r0] - bl sub_809634C - ldr r0, _080974D4 @ =0xffffdc90 - adds r4, r0 - ldrb r0, [r4, 0x4] - adds r0, 0x1 - strb r0, [r4, 0x4] - b _08097584 - .align 2, 0 -_080974C8: .4byte gSharedMem + 0x2370 -_080974CC: .4byte 0x0000daca -_080974D0: .4byte gUnknown_0203847E -_080974D4: .4byte 0xffffdc90 -_080974D8: - bl sub_8096368 - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xC8 - beq _08097584 - cmp r4, 0xC9 - bne _080974F6 - bl sub_8098A5C - bl sub_809635C - bl sub_8096310 - b _0809755E -_080974F6: - adds r0, r4, 0 - bl sub_809B62C - lsls r0, 24 - cmp r0, 0 - beq _08097518 - bl sub_8098A5C - bl sub_809635C - bl sub_8096310 - ldr r1, _08097514 @ =gSharedMem - movs r0, 0x2 - b _08097522 - .align 2, 0 -_08097514: .4byte gSharedMem -_08097518: - movs r0, 0x8 - bl sub_8098898 - ldr r1, _0809752C @ =gSharedMem - movs r0, 0x4 -_08097522: - strb r0, [r1, 0x4] - ldr r0, _08097530 @ =gUnknown_0203847E - strb r4, [r0] - b _08097584 - .align 2, 0 -_0809752C: .4byte gSharedMem -_08097530: .4byte gUnknown_0203847E -_08097534: - bl party_compaction - bl sub_8099310 - ldr r1, _08097544 @ =gSharedMem - ldrb r0, [r1, 0x4] - adds r0, 0x1 - b _08097582 - .align 2, 0 -_08097544: .4byte gSharedMem -_08097548: - bl sub_8099374 - lsls r0, 24 - cmp r0, 0 - bne _08097584 - bl sub_809B6BC - bl BoxSetMosaic - bl sub_80987DC -_0809755E: - ldr r0, _08097568 @ =sub_8096C84 - bl SetPSSCallback - b _08097584 - .align 2, 0 -_08097568: .4byte sub_8096C84 -_0809756C: - ldr r0, _0809758C @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _08097584 - movs r0, 0x6 - bl sub_8098898 - ldr r1, _08097590 @ =gSharedMem - movs r0, 0x1 -_08097582: - strb r0, [r1, 0x4] -_08097584: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809758C: .4byte gMain -_08097590: .4byte gSharedMem - thumb_func_end sub_809746C - thumb_func_start sub_8097594 sub_8097594: @ 8097594 push {r4,lr} @@ -171,7 +40,7 @@ _080975B4: .4byte _08097764 _080975EC: movs r0, 0x9 - bl sub_8098898 + bl PrintStorageActionText movs r0, 0x1 bl sub_8098A38 ldr r1, _0809761C @ =gSharedMem @@ -332,7 +201,7 @@ _08097732: beq _0809777A movs r0, 0x14 _08097740: - bl sub_8098898 + bl PrintStorageActionText _08097744: ldr r1, _08097754 @ =gSharedMem ldrb r0, [r1, 0x4] @@ -429,7 +298,7 @@ sub_80977E4: @ 80977E4 _080977F4: .4byte gSharedMem _080977F8: movs r0, 0xC - bl sub_8098898 + bl PrintStorageActionText ldr r0, _08097820 @ =0x000011f7 adds r2, r4, r0 ldrb r1, [r2] @@ -519,7 +388,7 @@ sub_809789C: @ 809789C _080978AC: .4byte gSharedMem _080978B0: movs r0, 0x1 - bl sub_8098898 + bl PrintStorageActionText bl sub_809CE84 ldrb r0, [r4, 0x4] adds r0, 0x1 @@ -617,7 +486,7 @@ _0809798C: _08097996: bl sub_8098A80 movs r0, 0x2 - bl sub_8098898 + bl PrintStorageActionText b _08097A3C _080979A2: bl sub_809CF30 @@ -655,7 +524,7 @@ _080979D4: lsrs r0, 24 bl sub_8098AA8 movs r0, 0x3 - bl sub_8098898 + bl PrintStorageActionText b _08097A3C _080979FC: bl sub_809CF30 @@ -730,7 +599,7 @@ _08097A7C: b _08097B32 _08097A86: movs r0, 0x5 - bl sub_8098898 + bl PrintStorageActionText ldr r1, _08097AA4 @ =0x00002370 adds r0, r5, r1 ldr r2, _08097AA8 @ =0x0000daca @@ -891,7 +760,7 @@ _08097BD4: movs r0, 0x20 bl PlaySE movs r0, 0xF - bl sub_8098898 + bl PrintStorageActionText ldr r1, _08097BF4 @ =gSharedMem movs r0, 0x1 strb r0, [r1, 0x4] @@ -902,7 +771,7 @@ _08097BF8: movs r0, 0x5 bl PlaySE movs r0, 0 - bl sub_8098898 + bl PrintStorageActionText movs r0, 0 bl sub_8098A38 ldr r1, _08097C14 @ =gSharedMem @@ -1025,7 +894,7 @@ _08097CF4: movs r0, 0x20 bl PlaySE movs r0, 0xF - bl sub_8098898 + bl PrintStorageActionText ldr r1, _08097D14 @ =gSharedMem movs r0, 0x1 strb r0, [r1, 0x4] @@ -1036,7 +905,7 @@ _08097D18: movs r0, 0x5 bl PlaySE movs r0, 0x12 - bl sub_8098898 + bl PrintStorageActionText movs r0, 0 bl sub_8098A38 ldr r1, _08097D34 @ =gSharedMem diff --git a/data/pokemon_storage_system.s b/data/pokemon_storage_system.s index b9b18e707..4340301ba 100644 --- a/data/pokemon_storage_system.s +++ b/data/pokemon_storage_system.s @@ -98,7 +98,7 @@ gSpriteTemplate_83B6DDC:: @ 83B6DDC spr_template 2, 56007, gOamData_83B6EAC, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy .align 2 -gUnknown_083B6DF4:: @ 83B6DF4 +gPCStorageActionTexts:: @ 83B6DF4 .4byte PCText_ExitBox, 0 .4byte PCText_WhatYouDo, 0 .4byte PCText_PickATheme, 0 diff --git a/include/ewram.h b/include/ewram.h index 19e05134f..d8ebd71ec 100755 --- a/include/ewram.h +++ b/include/ewram.h @@ -39,10 +39,6 @@ extern u8 gSharedMem[]; #define ewram01000 (*(struct Unk2001000 *)(gSharedMem + 0x1000)) #define ewramBerryPicTemp (gSharedMem + 0x1000) #define EWRAM_1000 (*(struct Struct2001000 *)(gSharedMem + 0x1000)) -#define gUnk20011fa (u8 *)(&gSharedMem[0x11FA]) -#define gUnk2002694 (u8 *)(&gSharedMem[0x2694]) -#define gUnk20026A6 (u8 *)(&gSharedMem[0x26A6]) -#define gUnk20026e4 (u8 *)(&gSharedMem[0x26E4]) #define ewram4000 (gSharedMem + 0x4000) #define gUnknown_02007000 (*(ewramStruct_02007000 *)(gSharedMem + 0x7000)) #define ARRAY_2007800 ((struct EasyChatPair *)(gSharedMem + 0x7800)) diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index 6f51b823e..916dc411a 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -19,6 +19,42 @@ #include "naming_screen.h" #include "pokemon_storage_system.h" +enum { + PC_TEXT_EXIT_BOX, + PC_TEXT_WHAT_YOU_DO, + PC_TEXT_PICK_A_THEME, + PC_TEXT_PICK_A_WALLPAPER, + PC_TEXT_IS_SELECTED, + PC_TEXT_JUMP_TO_WHICH_BOX, + PC_TEXT_DEPOSIT_IN_WHICH_BOX, + PC_TEXT_WAS_DEPOSITED, + PC_TEXT_BOX_IS_FULL, + PC_TEXT_RELEASE_POKE, + PC_TEXT_WAS_RELEASED, + PC_TEXT_BYE_BYE, + PC_TEXT_MARK_POKE, + PC_TEXT_LAST_POKE, + PC_TEXT_PARTY_FULL, + PC_TEXT_HOLDING_POKE, + PC_TEXT_WHICH_ONE_WILL_TAKE, + PC_TEXT_CANT_RELEASE_EGG, + PC_TEXT_CONTINUE_BOX, + PC_TEXT_CAME_BACK, + PC_TEXT_WORRIED, + PC_TEXT_SURPRISE, + PC_TEXT_PLEASE_REMOVE_MAIL +}; + +enum { + PC_TEXT_FMT_NORMAL, + PC_TEXT_FMT_MON_NAME, + PC_TEXT_FMT_UNK_02, + PC_TEXT_FMT_UNK_03, + PC_TEXT_FMT_MON_NAME_2, + PC_TEXT_FMT_UNK_05, + PC_TEXT_FMT_MON_NAME_AFTER_EXCL_MARK +}; + struct StorageAction { u8 *text; u8 format; @@ -66,7 +102,7 @@ struct PokemonStorageSystemData { u8 unk_11f6; u8 filler_11f7[2]; u8 unk_11f9; - u8 filler_11fa[0xc2]; + u8 unk_11fa[0xc2]; struct PokemonMarkMenu unk_12bc; struct UnkPSSStruct_2002370 unk_2370; u8 filler_25b4[0xd8]; @@ -74,6 +110,9 @@ struct PokemonStorageSystemData { u8 unk_268d; u8 unk_268e; struct Pokemon *unk_2690; + u8 unk_2694[18]; + u8 unk_26a6[62]; + u8 unk_26e4[80]; }; void StorageSystemCreatePrimaryMenu(u8 whichMenu); @@ -120,11 +159,13 @@ void sub_8098734(void); void sub_80987DC(void); void sub_809880C(void); bool8 sub_8098830(void); -void sub_8098898(u8 index); +void PrintStorageActionText(u8 index); void sub_8098A5C(void); void sub_809B100(u8 a0); bool8 sub_809B130(void); void sub_8098B48(void); +void sub_8099310(void); +bool8 sub_8099374(void); void sub_8099BF8(u8 a0); void sub_8099C70(u8 whichBox); bool8 sub_8099D34(void); @@ -137,6 +178,8 @@ void sub_809B0D4(void); void sub_809B0E0(void); u8 sub_809B0F4(void); void sub_809B440(void); +bool8 sub_809B62C(u8); +void sub_809B6BC(void); void sub_809BBC0(void); void sub_809BD14(void); bool8 sub_809BE80(void); @@ -198,7 +241,7 @@ const u8 gBoxSelectionPopupCenterTiles[] = INCBIN_U8("graphics/pokemon_storage/b const u8 gBoxSelectionPopupSidesTiles[] = INCBIN_U8("graphics/pokemon_storage/box_selection_popup_sides.4bpp"); -extern const struct StorageAction gUnknown_083B6DF4[]; +extern const struct StorageAction gPCStorageActionTexts[]; extern const struct PokemonStorageSystemData *gPokemonStorageSystemPtr; extern u8 *const gUnknown_083B6DB8; @@ -1107,7 +1150,7 @@ void sub_8096C84(void) case 5: if (ePokemonStorageSystem.unk_0005 != 2) { - sub_8098898(16); + PrintStorageActionText(PC_TEXT_WHICH_ONE_WILL_TAKE); ePokemonStorageSystem.unk_0004 = 3; } else @@ -1242,12 +1285,12 @@ void sub_8096C84(void) break; case 4: PlaySE(SE_HAZURE); - sub_8098898(13); + PrintStorageActionText(PC_TEXT_LAST_POKE); ePokemonStorageSystem.unk_0004 = 6; break; case 5: PlaySE(SE_HAZURE); - sub_8098898(22); + PrintStorageActionText(PC_TEXT_PLEASE_REMOVE_MAIL); ePokemonStorageSystem.unk_0004 = 6; break; case 6: @@ -1307,7 +1350,7 @@ void sub_8097078(void) switch (ePokemonStorageSystem.unk_0004) { case 0: - sub_8098898(4); + PrintStorageActionText(PC_TEXT_IS_SELECTED); sub_809CE84(); ePokemonStorageSystem.unk_0004 = 1; break; @@ -1400,17 +1443,17 @@ void sub_8097078(void) break; case 2: PlaySE(SE_HAZURE); - sub_8098898(13); + PrintStorageActionText(PC_TEXT_LAST_POKE); ePokemonStorageSystem.unk_0004 = 5; break; case 4: PlaySE(SE_HAZURE); - sub_8098898(17); + PrintStorageActionText(PC_TEXT_CANT_RELEASE_EGG); ePokemonStorageSystem.unk_0004 = 5; break; case 3: PlaySE(SE_HAZURE); - sub_8098898(22); + PrintStorageActionText(PC_TEXT_PLEASE_REMOVE_MAIL); ePokemonStorageSystem.unk_0004 = 5; break; case 5: @@ -1488,7 +1531,7 @@ void sub_8097390(void) case 0: if (CalculatePlayerPartyCount() == 6) { - sub_8098898(14); + PrintStorageActionText(PC_TEXT_PARTY_FULL); ePokemonStorageSystem.unk_0004 = 1; } else @@ -1532,83 +1575,146 @@ void sub_8097390(void) } } +void sub_809746C(void) +{ + u8 r4; + + switch (ePokemonStorageSystem.unk_0004) + { + case 0: + PrintStorageActionText(PC_TEXT_DEPOSIT_IN_WHICH_BOX); + sub_8096264(&ePokemonStorageSystem.unk_2370, 0x0007, 0xdaca, 3); + sub_809634C(gUnknown_0203847E); + ePokemonStorageSystem.unk_0004++; + break; + case 1: + r4 = sub_8096368(); + if (r4 == 200); + else if (r4 == 201) + { + sub_8098A5C(); + sub_809635C(); + sub_8096310(); + SetPSSCallback(sub_8096C84); + } + else + { + if (sub_809B62C(r4)) + { + sub_8098A5C(); + sub_809635C(); + sub_8096310(); + ePokemonStorageSystem.unk_0004 = 2; + } + else + { + PrintStorageActionText(PC_TEXT_BOX_IS_FULL); + ePokemonStorageSystem.unk_0004 = 4; + } + gUnknown_0203847E = r4; + } + break; + case 2: + party_compaction(); + sub_8099310(); + ePokemonStorageSystem.unk_0004++; + break; + case 3: + if (!sub_8099374()) + { + sub_809B6BC(); + BoxSetMosaic(); + sub_80987DC(); + SetPSSCallback(sub_8096C84); + } + break; + case 4: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + PrintStorageActionText(PC_TEXT_DEPOSIT_IN_WHICH_BOX); + ePokemonStorageSystem.unk_0004 = 1; + } + break; + } +} + asm(".section .text.8098898"); -void sub_8098898(u8 index) { +void PrintStorageActionText(u8 index) { u8 *ptr; MenuDrawTextWindow(10, 16, 29, 19); - switch (gUnknown_083B6DF4[index].format) + switch (gPCStorageActionTexts[index].format) { - case 2: - ptr = StringCopy(gUnk2002694, gUnknown_083B6DF4[index].text); - ptr = StringCopy(ptr, gUnk20011fa); + case PC_TEXT_FMT_UNK_02: + ptr = StringCopy(ePokemonStorageSystem.unk_2694, gPCStorageActionTexts[index].text); + ptr = StringCopy(ptr, ePokemonStorageSystem.unk_11fa); break; - case 5: - ptr = StringCopy(gUnk2002694, gUnknown_083B6DF4[index].text); - ptr = StringCopy(ptr, gUnk20026e4); + case PC_TEXT_FMT_UNK_05: + ptr = StringCopy(ePokemonStorageSystem.unk_2694, gPCStorageActionTexts[index].text); + ptr = StringCopy(ptr, ePokemonStorageSystem.unk_26e4); break; - case 1: + case PC_TEXT_FMT_MON_NAME: // {var} + " is selected." - ptr = StringCopy(gUnk2002694, gUnk20011fa); - ptr = StringCopy(ptr, gUnknown_083B6DF4[index].text); + ptr = StringCopy(ePokemonStorageSystem.unk_2694, ePokemonStorageSystem.unk_11fa); + ptr = StringCopy(ptr, gPCStorageActionTexts[index].text); break; - case 4: + case PC_TEXT_FMT_MON_NAME_2: // {var} + " was released." - ptr = StringCopy(gUnk2002694, gUnk20026e4); + ptr = StringCopy(ePokemonStorageSystem.unk_2694, ePokemonStorageSystem.unk_26e4); #if ENGLISH - ptr = StringCopy(ptr, gUnknown_083B6DF4[index].text); + ptr = StringCopy(ptr, gPCStorageActionTexts[index].text); #elif GERMAN - ptr = de_sub_8073174(gUnk2002694, gUnknown_083B6DF4[index].text); + ptr = de_sub_8073174(ePokemonStorageSystem.unk_2694, gPCStorageActionTexts[index].text); #endif break; - case 3: + case PC_TEXT_FMT_UNK_03: { u8 *stringLength; u8 *text; - text = gUnknown_083B6DF4[index].text; + text = gPCStorageActionTexts[index].text; stringLength = &text[StringLength(text)] + 1; - ptr = StringCopy(gUnk2002694, gUnknown_083B6DF4[index].text); - ptr = StringCopy(ptr, gUnk20011fa); + ptr = StringCopy(ePokemonStorageSystem.unk_2694, gPCStorageActionTexts[index].text); + ptr = StringCopy(ptr, ePokemonStorageSystem.unk_11fa); ptr = StringCopy(ptr, stringLength); } break; - case 6: + case PC_TEXT_FMT_MON_NAME_AFTER_EXCL_MARK: // "Bye-bye, ".substr(0, -1) + {var} + "Bye-bye, !".substr(-1, 1) { u8 *stringLength; u8 *text; - text = gUnknown_083B6DF4[index].text; + text = gPCStorageActionTexts[index].text; stringLength = &text[StringLength(text)] - 1; - ptr = StringCopy(gUnk2002694, gUnknown_083B6DF4[index].text); - ptr = StringCopy(ptr - 1, gUnk20026e4); + ptr = StringCopy(ePokemonStorageSystem.unk_2694, gPCStorageActionTexts[index].text); + ptr = StringCopy(ptr - 1, ePokemonStorageSystem.unk_26e4); ptr = StringCopy(ptr, stringLength); } break; - case 0: + case PC_TEXT_FMT_NORMAL: default: - ptr = StringCopy(gUnk2002694, gUnknown_083B6DF4[index].text); + ptr = StringCopy(ePokemonStorageSystem.unk_2694, gPCStorageActionTexts[index].text); break; } - while (ptr < gUnk20026A6) + while (ptr < ePokemonStorageSystem.unk_26a6) { ptr[0] = CHAR_SPACE; ptr++; } ptr[0] = EOS; - MenuPrint(gUnk2002694, 11, 17); + MenuPrint(ePokemonStorageSystem.unk_2694, 11, 17); } -- cgit v1.2.3 From 882bf5c3cf945927b3049eb8675bf1964d8706e8 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 8 Jan 2018 15:22:37 -0700 Subject: sub_8097594 --- asm/pokemon_storage_system.s | 232 ----------------------------------- src/pokemon/pokemon_storage_system.c | 144 +++++++++++++++++++++- 2 files changed, 142 insertions(+), 234 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 2622e7d84..8d31aedb4 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,238 +5,6 @@ .text - thumb_func_start sub_8097594 -sub_8097594: @ 8097594 - push {r4,lr} - ldr r0, _080975AC @ =gSharedMem - ldrb r0, [r0, 0x4] - cmp r0, 0xD - bls _080975A0 - b _0809777A -_080975A0: - lsls r0, 2 - ldr r1, _080975B0 @ =_080975B4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080975AC: .4byte gSharedMem -_080975B0: .4byte _080975B4 - .align 2, 0 -_080975B4: - .4byte _080975EC - .4byte _08097600 - .4byte _0809763A - .4byte _0809766E - .4byte _0809767A - .4byte _08097690 - .4byte _080976C8 - .4byte _080976E0 - .4byte _080976EC - .4byte _080976F0 - .4byte _08097704 - .4byte _08097720 - .4byte _08097732 - .4byte _08097764 -_080975EC: - movs r0, 0x9 - bl PrintStorageActionText - movs r0, 0x1 - bl sub_8098A38 - ldr r1, _0809761C @ =gSharedMem - ldrb r0, [r1, 0x4] - adds r0, 0x1 - strb r0, [r1, 0x4] -_08097600: - bl ProcessMenuInputNoWrap - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _0809762C - cmp r1, 0 - bgt _08097620 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _08097626 - b _0809777A - .align 2, 0 -_0809761C: .4byte gSharedMem -_08097620: - cmp r1, 0x1 - beq _08097626 - b _0809777A -_08097626: - bl sub_8098A5C - b _080976E0 -_0809762C: - bl sub_8098A5C - bl sub_809B7D4 - bl sub_809B6DC - b _08097744 -_0809763A: - bl sub_809B960 - bl sub_809B734 - lsls r0, 24 - cmp r0, 0 - beq _0809764A - b _0809777A -_0809764A: - ldr r4, _08097650 @ =gSharedMem - b _0809765A - .align 2, 0 -_08097650: .4byte gSharedMem -_08097654: - cmp r0, 0 - bne _0809765A - b _08097758 -_0809765A: - bl sub_809B960 - lsls r0, 24 - asrs r0, 24 - cmp r0, 0x1 - bne _08097654 - ldrb r0, [r4, 0x4] - adds r0, 0x1 - strb r0, [r4, 0x4] - b _0809777A -_0809766E: - bl sub_809B760 - bl sub_809801C - movs r0, 0xA - b _08097740 -_0809767A: - ldr r0, _0809768C @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - bne _08097688 - b _0809777A -_08097688: - movs r0, 0xB - b _08097740 - .align 2, 0 -_0809768C: .4byte gMain -_08097690: - ldr r0, _080976B4 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _0809777A - bl sub_8098A5C - ldr r0, _080976B8 @ =gUnknown_0203847C - ldrb r0, [r0] - cmp r0, 0 - beq _080976BC - bl party_compaction - bl sub_8099310 - b _08097744 - .align 2, 0 -_080976B4: .4byte gMain -_080976B8: .4byte gUnknown_0203847C -_080976BC: - ldr r1, _080976C4 @ =gSharedMem - movs r0, 0x7 - strb r0, [r1, 0x4] - b _0809777A - .align 2, 0 -_080976C4: .4byte gSharedMem -_080976C8: - bl sub_8099374 - lsls r0, 24 - cmp r0, 0 - bne _0809777A - bl sub_809B440 - bl BoxSetMosaic - bl sub_80987DC - b _08097744 -_080976E0: - ldr r0, _080976E8 @ =sub_8096C84 - bl SetPSSCallback - b _0809777A - .align 2, 0 -_080976E8: .4byte sub_8096C84 -_080976EC: - movs r0, 0xA - b _08097740 -_080976F0: - ldr r0, _08097700 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _0809777A - movs r0, 0x15 - b _08097740 - .align 2, 0 -_08097700: .4byte gMain -_08097704: - ldr r0, _0809771C @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _0809777A - bl sub_8098A5C - bl sub_8099958 - b _08097744 - .align 2, 0 -_0809771C: .4byte gMain -_08097720: - bl sub_8099990 - lsls r0, 24 - cmp r0, 0 - bne _0809777A - bl sub_809B7AC - movs r0, 0x13 - b _08097740 -_08097732: - ldr r0, _08097750 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _0809777A - movs r0, 0x14 -_08097740: - bl PrintStorageActionText -_08097744: - ldr r1, _08097754 @ =gSharedMem - ldrb r0, [r1, 0x4] - adds r0, 0x1 - strb r0, [r1, 0x4] - b _0809777A - .align 2, 0 -_08097750: .4byte gMain -_08097754: .4byte gSharedMem -_08097758: - ldr r1, _08097760 @ =gSharedMem - movs r0, 0x8 - strb r0, [r1, 0x4] - b _0809777A - .align 2, 0 -_08097760: .4byte gSharedMem -_08097764: - ldr r0, _08097780 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0 - beq _0809777A - bl sub_8098A5C - ldr r0, _08097784 @ =sub_8096C84 - bl SetPSSCallback -_0809777A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08097780: .4byte gMain -_08097784: .4byte sub_8096C84 - thumb_func_end sub_8097594 - thumb_func_start sub_8097788 sub_8097788: @ 8097788 push {r4,r5,lr} diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index 916dc411a..9e18dadb5 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -158,14 +158,16 @@ void sub_8098710(void); void sub_8098734(void); void sub_80987DC(void); void sub_809880C(void); +void sub_809801C(void); bool8 sub_8098830(void); void PrintStorageActionText(u8 index); +void sub_8098A38(u8); void sub_8098A5C(void); -void sub_809B100(u8 a0); -bool8 sub_809B130(void); void sub_8098B48(void); void sub_8099310(void); bool8 sub_8099374(void); +void sub_8099958(void); +bool8 sub_8099990(void); void sub_8099BF8(u8 a0); void sub_8099C70(u8 whichBox); bool8 sub_8099D34(void); @@ -177,9 +179,17 @@ void sub_809B0C0(u8 a0); void sub_809B0D4(void); void sub_809B0E0(void); u8 sub_809B0F4(void); +void sub_809B100(u8 a0); +bool8 sub_809B130(void); void sub_809B440(void); bool8 sub_809B62C(u8); void sub_809B6BC(void); +void sub_809B6DC(void); +bool8 sub_809B734(void); +void sub_809B760(void); +void sub_809B7AC(void); +void sub_809B7D4(void); +s8 sub_809B960(void); void sub_809BBC0(void); void sub_809BD14(void); bool8 sub_809BE80(void); @@ -1638,6 +1648,136 @@ void sub_809746C(void) } } +void sub_8097594(void) +{ + switch (ePokemonStorageSystem.unk_0004) + { + case 0: + PrintStorageActionText(PC_TEXT_RELEASE_POKE); + sub_8098A38(1); + ePokemonStorageSystem.unk_0004++; + // fallthrough + case 1: + switch (ProcessMenuInputNoWrap()) + { + case -1: + case 1: + sub_8098A5C(); + SetPSSCallback(sub_8096C84); + break; + case 0: + sub_8098A5C(); + sub_809B7D4(); + sub_809B6DC(); + ePokemonStorageSystem.unk_0004++; + break; + } + break; + case 2: + sub_809B960(); + if (!sub_809B734()) + { + while (1) + { + s8 r0 = sub_809B960(); + if (r0 == 1) + { + ePokemonStorageSystem.unk_0004++; + break; + } + if (r0 == 0) + { + ePokemonStorageSystem.unk_0004 = 8; + break; + } + } + } + break; + case 3: + sub_809B760(); + sub_809801C(); + PrintStorageActionText(PC_TEXT_WAS_RELEASED); + ePokemonStorageSystem.unk_0004++; + break; + case 4: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + PrintStorageActionText(PC_TEXT_BYE_BYE); + ePokemonStorageSystem.unk_0004++; + } + break; + case 5: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + sub_8098A5C(); + if (gUnknown_0203847C) + { + party_compaction(); + sub_8099310(); + ePokemonStorageSystem.unk_0004++; + } + else + { + ePokemonStorageSystem.unk_0004 = 7; + } + } + break; + case 6: + if (!sub_8099374()) + { + sub_809B440(); + BoxSetMosaic(); + sub_80987DC(); + ePokemonStorageSystem.unk_0004++; + } + break; + case 7: + SetPSSCallback(sub_8096C84); + break; + case 8: + PrintStorageActionText(PC_TEXT_WAS_RELEASED); + ePokemonStorageSystem.unk_0004++; + break; + case 9: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + PrintStorageActionText(PC_TEXT_SURPRISE); + ePokemonStorageSystem.unk_0004++; + } + break; + case 10: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + sub_8098A5C(); + sub_8099958(); + ePokemonStorageSystem.unk_0004++; + } + break; + case 11: + if (!sub_8099990()) + { + sub_809B7AC(); + PrintStorageActionText(PC_TEXT_CAME_BACK); + ePokemonStorageSystem.unk_0004++; + } + break; + case 12: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + PrintStorageActionText(PC_TEXT_WORRIED); + ePokemonStorageSystem.unk_0004++; + } + break; + case 13: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + sub_8098A5C(); + SetPSSCallback(sub_8096C84); + } + break; + } +} + asm(".section .text.8098898"); void PrintStorageActionText(u8 index) { -- cgit v1.2.3 From 660fa0c0f38a684eda6c117958447deacac88820 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 8 Jan 2018 15:37:05 -0700 Subject: through sub_8097858 --- asm/pokemon_storage_system.s | 137 ----------------------------------- include/mon_markings.h | 5 +- src/pokemon/pokemon_storage_system.c | 67 ++++++++++++++++- 3 files changed, 70 insertions(+), 139 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 8d31aedb4..311b3552a 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,143 +5,6 @@ .text - thumb_func_start sub_8097788 -sub_8097788: @ 8097788 - push {r4,r5,lr} - sub sp, 0x4 - ldr r5, _0809779C @ =gSharedMem - ldrb r4, [r5, 0x4] - cmp r4, 0 - beq _080977A0 - cmp r4, 0x1 - beq _080977BC - b _080977D4 - .align 2, 0 -_0809779C: .4byte gSharedMem -_080977A0: - bl sub_809BC18 - movs r0, 0x1 - negs r0, r0 - str r4, [sp] - movs r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldrb r0, [r5, 0x4] - adds r0, 0x1 - strb r0, [r5, 0x4] - b _080977D4 -_080977BC: - bl UpdatePaletteFade - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0 - bne _080977D4 - ldr r0, _080977DC @ =gUnknown_0203847F - strb r1, [r0] - strb r1, [r5, 0x6] - ldr r0, _080977E0 @ =sub_8096B5C - bl SetMainCallback2 -_080977D4: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080977DC: .4byte gUnknown_0203847F -_080977E0: .4byte sub_8096B5C - thumb_func_end sub_8097788 - - thumb_func_start sub_80977E4 -sub_80977E4: @ 80977E4 - push {r4,lr} - ldr r4, _080977F4 @ =gSharedMem - ldrb r0, [r4, 0x4] - cmp r0, 0 - beq _080977F8 - cmp r0, 0x1 - beq _08097824 - b _0809784C - .align 2, 0 -_080977F4: .4byte gSharedMem -_080977F8: - movs r0, 0xC - bl PrintStorageActionText - ldr r0, _08097820 @ =0x000011f7 - adds r2, r4, r0 - ldrb r1, [r2] - movs r3, 0x96 - lsls r3, 5 - adds r0, r4, r3 - strb r1, [r0] - ldrb r0, [r2] - movs r1, 0xB0 - movs r2, 0x10 - bl sub_80F7418 - ldrb r0, [r4, 0x4] - adds r0, 0x1 - strb r0, [r4, 0x4] - b _0809784C - .align 2, 0 -_08097820: .4byte 0x000011f7 -_08097824: - bl sub_80F7500 - lsls r0, 24 - cmp r0, 0 - bne _0809784C - bl sub_80F7470 - bl sub_8098A5C - movs r1, 0x96 - lsls r1, 5 - adds r0, r4, r1 - ldrb r0, [r0] - bl sub_809BDD8 - bl sub_809801C - ldr r0, _08097854 @ =sub_8096C84 - bl SetPSSCallback -_0809784C: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08097854: .4byte sub_8096C84 - thumb_func_end sub_80977E4 - - thumb_func_start sub_8097858 -sub_8097858: @ 8097858 - push {r4,lr} - ldr r4, _08097868 @ =gSharedMem - ldrb r0, [r4, 0x4] - cmp r0, 0 - beq _0809786C - cmp r0, 0x1 - beq _0809787C - b _08097890 - .align 2, 0 -_08097868: .4byte gSharedMem -_0809786C: - bl party_compaction - bl sub_8099310 - ldrb r0, [r4, 0x4] - adds r0, 0x1 - strb r0, [r4, 0x4] - b _08097890 -_0809787C: - bl sub_8099374 - lsls r0, 24 - cmp r0, 0 - bne _08097890 - bl sub_80987DC - ldr r0, _08097898 @ =sub_8096C84 - bl SetPSSCallback -_08097890: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08097898: .4byte sub_8096C84 - thumb_func_end sub_8097858 - thumb_func_start sub_809789C sub_809789C: @ 809789C push {r4,lr} diff --git a/include/mon_markings.h b/include/mon_markings.h index eae80861a..3b4aa333c 100644 --- a/include/mon_markings.h +++ b/include/mon_markings.h @@ -20,7 +20,10 @@ struct PokemonMarkMenu /*0x10B0*/ u8 tileLoadState; }; // 10b4 -void sub_80F7404(void); void sub_80F727C(struct PokemonMarkMenu *ptr); +void sub_80F7404(void); +void sub_80F7418(u8 markings, s16 x, s16 y); +void sub_80F7470(void); +bool8 sub_80F7500(void); #endif //POKERUBY_MON_MARKINGS_H diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index 9e18dadb5..8b0893c73 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -100,7 +100,8 @@ struct PokemonStorageSystemData { u16 unk_11f2; u8 filler_11f4[2]; u8 unk_11f6; - u8 filler_11f7[2]; + u8 unk_11f7; + u8 unk_11f8; u8 unk_11f9; u8 unk_11fa[0xc2]; struct PokemonMarkMenu unk_12bc; @@ -191,7 +192,9 @@ void sub_809B7AC(void); void sub_809B7D4(void); s8 sub_809B960(void); void sub_809BBC0(void); +void sub_809BC18(void); void sub_809BD14(void); +void sub_809BDD8(u8 markings); bool8 sub_809BE80(void); bool8 sub_809BEBC(void); bool8 sub_809BF20(void); @@ -1778,6 +1781,68 @@ void sub_8097594(void) } } +void sub_8097788(void) +{ + switch (ePokemonStorageSystem.unk_0004) + { + case 0: + sub_809BC18(); + BeginNormalPaletteFade(0xffffffff, 0, 0, 16, 0); + ePokemonStorageSystem.unk_0004++; + break; + case 1: + if (!UpdatePaletteFade()) + { + gUnknown_0203847F = 0; + ePokemonStorageSystem.unk_0006 = 0; + SetMainCallback2(sub_8096B5C); + } + break; + } +} + +void sub_80977E4(void) +{ + switch (ePokemonStorageSystem.unk_0004) + { + case 0: + PrintStorageActionText(PC_TEXT_MARK_POKE); + ePokemonStorageSystem.unk_12bc.markings = ePokemonStorageSystem.unk_11f7; + sub_80F7418(ePokemonStorageSystem.unk_11f7, 0xb0, 0x10); + ePokemonStorageSystem.unk_0004++; + break; + case 1: + if (!sub_80F7500()) + { + sub_80F7470(); + sub_8098A5C(); + sub_809BDD8(ePokemonStorageSystem.unk_12bc.markings); + sub_809801C(); + SetPSSCallback(sub_8096C84); + } + break; + } +} + +void sub_8097858(void) +{ + switch (ePokemonStorageSystem.unk_0004) + { + case 0: + party_compaction(); + sub_8099310(); + ePokemonStorageSystem.unk_0004++; + break; + case 1: + if (!sub_8099374()) + { + sub_80987DC(); + SetPSSCallback(sub_8096C84); + } + break; + } +} + asm(".section .text.8098898"); void PrintStorageActionText(u8 index) { -- cgit v1.2.3 From 2fe1da46d9dda22fbe2184a53f71d5e2b8f03aba Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 8 Jan 2018 21:33:51 -0500 Subject: through sub_8097974 --- asm/pokemon_storage_system.s | 203 ----------------------------------- src/pokemon/pokemon_storage_system.c | 108 ++++++++++++++++++- 2 files changed, 106 insertions(+), 205 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 311b3552a..c282ebecd 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,209 +5,6 @@ .text - thumb_func_start sub_809789C -sub_809789C: @ 809789C - push {r4,lr} - ldr r4, _080978AC @ =gSharedMem - ldrb r0, [r4, 0x4] - cmp r0, 0 - beq _080978B0 - cmp r0, 0x1 - beq _080978C2 - b _08097968 - .align 2, 0 -_080978AC: .4byte gSharedMem -_080978B0: - movs r0, 0x1 - bl PrintStorageActionText - bl sub_809CE84 - ldrb r0, [r4, 0x4] - adds r0, 0x1 - strb r0, [r4, 0x4] - b _08097968 -_080978C2: - bl sub_809CF30 - adds r0, 0x1 - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xC - bhi _08097968 - lsls r0, 2 - ldr r1, _080978DC @ =_080978E0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080978DC: .4byte _080978E0 - .align 2, 0 -_080978E0: - .4byte _08097914 - .4byte _08097914 - .4byte _08097968 - .4byte _08097968 - .4byte _08097968 - .4byte _08097968 - .4byte _08097968 - .4byte _08097968 - .4byte _08097968 - .4byte _08097968 - .4byte _08097958 - .4byte _08097940 - .4byte _0809792C -_08097914: - movs r0, 0x1 - bl sub_809A860 - bl sub_8098A5C - ldr r0, _08097928 @ =sub_8096C84 - bl SetPSSCallback - b _08097968 - .align 2, 0 -_08097928: .4byte sub_8096C84 -_0809792C: - movs r0, 0x5 - bl PlaySE - ldr r0, _0809793C @ =sub_8097B44 - bl SetPSSCallback - b _08097968 - .align 2, 0 -_0809793C: .4byte sub_8097B44 -_08097940: - movs r0, 0x5 - bl PlaySE - bl sub_8098A5C - ldr r0, _08097954 @ =sub_8097974 - bl SetPSSCallback - b _08097968 - .align 2, 0 -_08097954: .4byte sub_8097974 -_08097958: - movs r0, 0x5 - bl PlaySE - bl sub_8098A5C - ldr r0, _08097970 @ =sub_8097A64 - bl SetPSSCallback -_08097968: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08097970: .4byte sub_8097A64 - thumb_func_end sub_809789C - - thumb_func_start sub_8097974 -sub_8097974: @ 8097974 - push {r4,r5,lr} - ldr r5, _08097988 @ =gSharedMem - ldrb r0, [r5, 0x4] - cmp r0, 0x1 - beq _080979A2 - cmp r0, 0x1 - bgt _0809798C - cmp r0, 0 - beq _08097996 - b _08097A5A - .align 2, 0 -_08097988: .4byte gSharedMem -_0809798C: - cmp r0, 0x2 - beq _080979FC - cmp r0, 0x3 - beq _08097A44 - b _08097A5A -_08097996: - bl sub_8098A80 - movs r0, 0x2 - bl PrintStorageActionText - b _08097A3C -_080979A2: - bl sub_809CF30 - ldr r1, _080979CC @ =0x00000d5e - adds r4, r5, r1 - strh r0, [r4] - movs r1, 0 - ldrsh r0, [r4, r1] - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - bne _080979D4 - movs r0, 0x1 - bl sub_809A860 - bl sub_8098A5C - ldr r0, _080979D0 @ =sub_8096C84 - bl SetPSSCallback - b _08097A5A - .align 2, 0 -_080979CC: .4byte 0x00000d5e -_080979D0: .4byte sub_8096C84 -_080979D4: - cmp r0, r1 - blt _08097A5A - cmp r0, 0xF - bgt _08097A5A - cmp r0, 0xC - blt _08097A5A - movs r0, 0x5 - bl PlaySE - ldrh r0, [r4] - subs r0, 0xC - strh r0, [r4] - lsls r0, 24 - lsrs r0, 24 - bl sub_8098AA8 - movs r0, 0x3 - bl PrintStorageActionText - b _08097A3C -_080979FC: - bl sub_809CF30 - movs r1, 0xD6 - lsls r1, 4 - adds r4, r5, r1 - strh r0, [r4] - movs r0, 0 - ldrsh r1, [r4, r0] - movs r0, 0x2 - negs r0, r0 - cmp r1, r0 - beq _08097A5A - adds r0, 0x1 - cmp r1, r0 - bne _08097A24 - bl sub_8098A5C - movs r0, 0 - strb r0, [r5, 0x4] - b _08097A5A -_08097A24: - movs r0, 0x5 - bl PlaySE - bl sub_8098A5C - ldrh r0, [r4] - subs r0, 0x10 - strh r0, [r4] - lsls r0, 24 - lsrs r0, 24 - bl sub_8099DCC -_08097A3C: - ldrb r0, [r5, 0x4] - adds r0, 0x1 - strb r0, [r5, 0x4] - b _08097A5A -_08097A44: - bl sub_8099E08 - lsls r0, 24 - cmp r0, 0 - bne _08097A5A - movs r0, 0x1 - bl sub_809A860 - ldr r0, _08097A60 @ =sub_8096C84 - bl SetPSSCallback -_08097A5A: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08097A60: .4byte sub_8096C84 - thumb_func_end sub_8097974 - thumb_func_start sub_8097A64 sub_8097A64: @ 8097A64 push {r4,r5,lr} diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index 8b0893c73..0f2350df2 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -96,7 +96,10 @@ struct PokemonStorageSystemData { u8 filler_08b0[2]; s16 unk_08b2; u16 unk_08b4; - u8 filler_08b6[0x93c]; + u8 filler_08b6[0x4a8]; + s16 unk_0d5e; + s16 unk_0d60; + u8 filler_0d62[0x490]; u16 unk_11f2; u8 filler_11f4[2]; u8 unk_11f6; @@ -145,12 +148,16 @@ void sub_8097788(void); void sub_80977E4(void); void sub_8097858(void); void sub_809789C(void); +void sub_8097974(void); +void sub_8097A64(void); +void sub_8097B44(void); void sub_8097BA0(void); void sub_8097CC0(void); void sub_8097DE0(void); void sub_8097E44(void); void sub_8097E70(void); void BoxSetMosaic(void); +void sub_809801C(void); void sub_8098400(void); void add_to_c3_somehow(void); bool8 sub_80985CC(void); @@ -159,11 +166,12 @@ void sub_8098710(void); void sub_8098734(void); void sub_80987DC(void); void sub_809880C(void); -void sub_809801C(void); bool8 sub_8098830(void); void PrintStorageActionText(u8 index); void sub_8098A38(u8); void sub_8098A5C(void); +void sub_8098A80(void); +void sub_8098AA8(u8 a0); void sub_8098B48(void); void sub_8099310(void); bool8 sub_8099374(void); @@ -172,6 +180,9 @@ bool8 sub_8099990(void); void sub_8099BF8(u8 a0); void sub_8099C70(u8 whichBox); bool8 sub_8099D34(void); +void sub_8099DCC(u8 a0); +bool8 sub_8099E08(void); +void sub_809A860(u8 a0); struct Sprite *sub_809A9A0(u16 a0, u16 a1, u8 a2, u8 a3, u8 a4); void sub_809AA24(void); void sub_809AA98(void); @@ -1843,6 +1854,99 @@ void sub_8097858(void) } } +void sub_809789C(void) +{ + switch (ePokemonStorageSystem.unk_0004) + { + case 0: + PrintStorageActionText(PC_TEXT_WHAT_YOU_DO); + sub_809CE84(); + ePokemonStorageSystem.unk_0004++; + break; + case 1: + switch (sub_809CF30()) + { + case -1: + case 0: + sub_809A860(1); + sub_8098A5C(); + SetPSSCallback(sub_8096C84); + break; + case 11: + PlaySE(SE_SELECT); + SetPSSCallback(sub_8097B44); + break; + case 10: + PlaySE(SE_SELECT); + sub_8098A5C(); + SetPSSCallback(sub_8097974); + break; + case 9: + PlaySE(SE_SELECT); + sub_8098A5C(); + SetPSSCallback(sub_8097A64); + break; + } + break; + } +} + +void sub_8097974(void) +{ + switch (ePokemonStorageSystem.unk_0004) + { + case 0: + sub_8098A80(); + PrintStorageActionText(PC_TEXT_PICK_A_THEME); + ePokemonStorageSystem.unk_0004++; + break; + case 1: + ePokemonStorageSystem.unk_0d5e = sub_809CF30(); + switch (ePokemonStorageSystem.unk_0d5e) + { + case -1: + sub_809A860(1); + sub_8098A5C(); + SetPSSCallback(sub_8096C84); + break; + case 12 ... 15: + PlaySE(SE_SELECT); + ePokemonStorageSystem.unk_0d5e -= 12; + sub_8098AA8(ePokemonStorageSystem.unk_0d5e); + PrintStorageActionText(PC_TEXT_PICK_A_WALLPAPER); + ePokemonStorageSystem.unk_0004++; + break; + } + break; + case 2: + ePokemonStorageSystem.unk_0d60 = sub_809CF30(); + switch (ePokemonStorageSystem.unk_0d60) + { + case -1: + sub_8098A5C(); + ePokemonStorageSystem.unk_0004 = 0; + break; + case -2: + break; + default: + PlaySE(SE_SELECT); + sub_8098A5C(); + ePokemonStorageSystem.unk_0d60 -= 16; + sub_8099DCC(ePokemonStorageSystem.unk_0d60); + ePokemonStorageSystem.unk_0004++; + break; + } + break; + case 3: + if (!sub_8099E08()) + { + sub_809A860(1); + SetPSSCallback(sub_8096C84); + } + break; + } +} + asm(".section .text.8098898"); void PrintStorageActionText(u8 index) { -- cgit v1.2.3 From e2ff8b73c7e17777be8c4065a93e8727768bb914 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 8 Jan 2018 22:05:43 -0500 Subject: through sub_8097BA0; fix calls to pc_screen_effect from scene/hall_of_fame --- asm/pokemon_storage_system.s | 284 ----------------------------------- include/ewram.h | 1 + include/pc_screen_effect.h | 2 + src/pokemon/pokemon_storage_system.c | 130 +++++++++++++++- src/scene/hall_of_fame.c | 35 ++--- 5 files changed, 143 insertions(+), 309 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index c282ebecd..85e29b183 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,290 +5,6 @@ .text - thumb_func_start sub_8097A64 -sub_8097A64: @ 8097A64 - push {r4,r5,lr} - ldr r5, _08097A78 @ =gSharedMem - ldrb r0, [r5, 0x4] - cmp r0, 0x1 - beq _08097AB0 - cmp r0, 0x1 - bgt _08097A7C - cmp r0, 0 - beq _08097A86 - b _08097B32 - .align 2, 0 -_08097A78: .4byte gSharedMem -_08097A7C: - cmp r0, 0x2 - beq _08097B00 - cmp r0, 0x3 - beq _08097B18 - b _08097B32 -_08097A86: - movs r0, 0x5 - bl PrintStorageActionText - ldr r1, _08097AA4 @ =0x00002370 - adds r0, r5, r1 - ldr r2, _08097AA8 @ =0x0000daca - movs r1, 0x7 - movs r3, 0x3 - bl sub_8096264 - ldr r0, _08097AAC @ =gPokemonStorage - ldrb r0, [r0] - bl sub_809634C - b _08097B0A - .align 2, 0 -_08097AA4: .4byte 0x00002370 -_08097AA8: .4byte 0x0000daca -_08097AAC: .4byte gPokemonStorage -_08097AB0: - bl sub_8096368 - lsls r0, 24 - lsrs r0, 24 - ldr r2, _08097AF4 @ =0x000008b2 - adds r4, r5, r2 - strh r0, [r4] - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0xC8 - beq _08097B32 - bl sub_8098A5C - bl sub_809635C - bl sub_8096310 - movs r2, 0 - ldrsh r0, [r4, r2] - cmp r0, 0xC9 - beq _08097AE4 - adds r1, r0, 0 - ldr r0, _08097AF8 @ =gPokemonStorage - ldrb r0, [r0] - cmp r1, r0 - bne _08097B0A -_08097AE4: - movs r0, 0x1 - bl sub_809A860 - ldr r0, _08097AFC @ =sub_8096C84 - bl SetPSSCallback - b _08097B32 - .align 2, 0 -_08097AF4: .4byte 0x000008b2 -_08097AF8: .4byte gPokemonStorage -_08097AFC: .4byte sub_8096C84 -_08097B00: - ldr r1, _08097B14 @ =0x000008b2 - adds r0, r5, r1 - ldrb r0, [r0] - bl sub_8099C70 -_08097B0A: - ldrb r0, [r5, 0x4] - adds r0, 0x1 - strb r0, [r5, 0x4] - b _08097B32 - .align 2, 0 -_08097B14: .4byte 0x000008b2 -_08097B18: - bl sub_8099D34 - lsls r0, 24 - cmp r0, 0 - bne _08097B32 - ldr r1, _08097B38 @ =gPokemonStorage - ldr r2, _08097B3C @ =0x000008b2 - adds r0, r5, r2 - ldrh r0, [r0] - strb r0, [r1] - ldr r0, _08097B40 @ =sub_8096C84 - bl SetPSSCallback -_08097B32: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08097B38: .4byte gPokemonStorage -_08097B3C: .4byte 0x000008b2 -_08097B40: .4byte sub_8096C84 - thumb_func_end sub_8097A64 - - thumb_func_start sub_8097B44 -sub_8097B44: @ 8097B44 - push {r4,r5,lr} - sub sp, 0x4 - ldr r5, _08097B58 @ =gSharedMem - ldrb r4, [r5, 0x4] - cmp r4, 0 - beq _08097B5C - cmp r4, 0x1 - beq _08097B78 - b _08097B8E - .align 2, 0 -_08097B58: .4byte gSharedMem -_08097B5C: - bl sub_809BB90 - movs r0, 0x1 - negs r0, r0 - str r4, [sp] - movs r1, 0 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldrb r0, [r5, 0x4] - adds r0, 0x1 - strb r0, [r5, 0x4] - b _08097B8E -_08097B78: - bl UpdatePaletteFade - lsls r0, 24 - cmp r0, 0 - bne _08097B8E - ldr r0, _08097B98 @ =gUnknown_0203847F - strb r4, [r0] - strb r4, [r5, 0x6] - ldr r0, _08097B9C @ =sub_8096B5C - bl SetMainCallback2 -_08097B8E: - add sp, 0x4 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08097B98: .4byte gUnknown_0203847F -_08097B9C: .4byte sub_8096B5C - thumb_func_end sub_8097B44 - - thumb_func_start sub_8097BA0 -sub_8097BA0: @ 8097BA0 - push {r4,lr} - ldr r0, _08097BB8 @ =gSharedMem - ldrb r1, [r0, 0x4] - adds r4, r0, 0 - cmp r1, 0x4 - bls _08097BAE - b _08097CB0 -_08097BAE: - lsls r0, r1, 2 - ldr r1, _08097BBC @ =_08097BC0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08097BB8: .4byte gSharedMem -_08097BBC: .4byte _08097BC0 - .align 2, 0 -_08097BC0: - .4byte _08097BD4 - .4byte _08097C18 - .4byte _08097C2C - .4byte _08097C74 - .4byte _08097C98 -_08097BD4: - bl sub_809BF20 - lsls r0, 24 - cmp r0, 0 - beq _08097BF8 - movs r0, 0x20 - bl PlaySE - movs r0, 0xF - bl PrintStorageActionText - ldr r1, _08097BF4 @ =gSharedMem - movs r0, 0x1 - strb r0, [r1, 0x4] - b _08097CB0 - .align 2, 0 -_08097BF4: .4byte gSharedMem -_08097BF8: - movs r0, 0x5 - bl PlaySE - movs r0, 0 - bl PrintStorageActionText - movs r0, 0 - bl sub_8098A38 - ldr r1, _08097C14 @ =gSharedMem - movs r0, 0x2 - strb r0, [r1, 0x4] - b _08097CB0 - .align 2, 0 -_08097C14: .4byte gSharedMem -_08097C18: - ldr r0, _08097C28 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0xF3 - ands r0, r1 - cmp r0, 0 - beq _08097CB0 - b _08097C4A - .align 2, 0 -_08097C28: .4byte gMain -_08097C2C: - bl ProcessMenuInputNoWrap - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _08097C5C - cmp r1, 0 - bgt _08097C46 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _08097C4A - b _08097CB0 -_08097C46: - cmp r1, 0x1 - bne _08097CB0 -_08097C4A: - bl sub_8098A5C - ldr r0, _08097C58 @ =sub_8096C84 - bl SetPSSCallback - b _08097CB0 - .align 2, 0 -_08097C58: .4byte sub_8096C84 -_08097C5C: - movs r0, 0x3 - bl PlaySE - bl sub_8098A5C - ldr r1, _08097C70 @ =gSharedMem - ldrb r0, [r1, 0x4] - adds r0, 0x1 - strb r0, [r1, 0x4] - b _08097CB0 - .align 2, 0 -_08097C70: .4byte gSharedMem -_08097C74: - movs r1, 0 - movs r0, 0xE - strh r0, [r4, 0xC] - ldr r0, _08097C94 @ =0x0000dad0 - strh r0, [r4, 0xE] - movs r0, 0x14 - strh r0, [r4, 0x10] - strh r1, [r4, 0x12] - adds r0, r4, 0 - adds r0, 0xC - bl sub_80C5E38 - ldrb r0, [r4, 0x4] - adds r0, 0x1 - strb r0, [r4, 0x4] - b _08097CB0 - .align 2, 0 -_08097C94: .4byte 0x0000dad0 -_08097C98: - bl sub_80C5F98 - lsls r0, 24 - cmp r0, 0 - beq _08097CB0 - bl CalculatePlayerPartyCount - ldr r1, _08097CB8 @ =gPlayerPartyCount - strb r0, [r1] - ldr r0, _08097CBC @ =sub_80961A8 - bl SetMainCallback2 -_08097CB0: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08097CB8: .4byte gPlayerPartyCount -_08097CBC: .4byte sub_80961A8 - thumb_func_end sub_8097BA0 - thumb_func_start sub_8097CC0 sub_8097CC0: @ 8097CC0 push {r4,lr} diff --git a/include/ewram.h b/include/ewram.h index f24f089f6..3f627878f 100755 --- a/include/ewram.h +++ b/include/ewram.h @@ -241,6 +241,7 @@ extern u8 gSharedMem[]; #define ewram1C000 (*(struct Unk201C000 *)(gSharedMem + 0x1C000)) #define ewram1c000 (*(struct Unk201C000 *)(gSharedMem + 0x1C000)) // FIXME, names too similar #define eHallOfFameMons1 (struct HallofFameMons*)(&gSharedMem[0x1C000]) +#define eHOFPCScreenEffect (*(struct PCScreenEffectStruct *)(gSharedMem + 0x1c000)) #define EWRAM_1C800 (*(struct Unk201C800 *)(gSharedMem + 0x1C800)) #define ewram1D000 ((struct Pokemon *)(gSharedMem + 0x1D000)) #define ewram1D000_2 ((u16 *)(gSharedMem + 0x1D000)) diff --git a/include/pc_screen_effect.h b/include/pc_screen_effect.h index a791fc66f..36661bc3b 100644 --- a/include/pc_screen_effect.h +++ b/include/pc_screen_effect.h @@ -15,5 +15,7 @@ struct PCScreenEffectStruct void sub_80C5CD4(struct PCScreenEffectStruct *unkStruct); bool8 sub_80C5DCC(void); +void sub_80C5E38(struct PCScreenEffectStruct *unkStruct); +bool8 sub_80C5F98(void); #endif //POKERUBY_PC_SCREEN_EFFECT_H diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index 0f2350df2..daae82df6 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -177,6 +177,7 @@ void sub_8099310(void); bool8 sub_8099374(void); void sub_8099958(void); bool8 sub_8099990(void); +void sub_809BB90(void); void sub_8099BF8(u8 a0); void sub_8099C70(u8 whichBox); bool8 sub_8099D34(void); @@ -670,7 +671,7 @@ void ShowPokemonStorageSystem(void) ScriptContext2_Enable(); } -void sub_8096130(void) +void FieldCB_ReturnToOverworld(void) { u8 taskId = CreateTask(Task_PokemonStorageSystem, 80); gTasks[taskId].data[0] = 0; @@ -688,7 +689,7 @@ void StorageSystemCreatePrimaryMenu(u8 whichMenu) void sub_80961A8(void) { gUnknown_02038474 = gPokemonStorageSystemPtr->unk_0005; - gFieldCallback = sub_8096130; + gFieldCallback = FieldCB_ReturnToOverworld; SetMainCallback2(c2_exit_to_overworld_2_switch); } @@ -1947,6 +1948,131 @@ void sub_8097974(void) } } +void sub_8097A64(void) +{ + switch (ePokemonStorageSystem.unk_0004) + { + case 0: + PrintStorageActionText(PC_TEXT_JUMP_TO_WHICH_BOX); + sub_8096264(&ePokemonStorageSystem.unk_2370, 0x0007, 0xdaca, 3); + sub_809634C(gPokemonStorage.currentBox); + ePokemonStorageSystem.unk_0004++; + break; + case 1: + ePokemonStorageSystem.unk_08b2 = sub_8096368(); + switch (ePokemonStorageSystem.unk_08b2) + { + case 200: + break; + default: + sub_8098A5C(); + sub_809635C(); + sub_8096310(); + if (ePokemonStorageSystem.unk_08b2 == 201 || ePokemonStorageSystem.unk_08b2 == gPokemonStorage.currentBox) + { + sub_809A860(1); + SetPSSCallback(sub_8096C84); + } + else + { + ePokemonStorageSystem.unk_0004++; + } + break; + } + break; + case 2: + sub_8099C70(ePokemonStorageSystem.unk_08b2); + ePokemonStorageSystem.unk_0004++; + break; + case 3: + if (!sub_8099D34()) + { + gPokemonStorage.currentBox = ePokemonStorageSystem.unk_08b2; + SetPSSCallback(sub_8096C84); + } + break; + } +} + +void sub_8097B44(void) +{ + switch (ePokemonStorageSystem.unk_0004) + { + case 0: + sub_809BB90(); + BeginNormalPaletteFade(0xffffffff, 0, 0, 16, 0); + ePokemonStorageSystem.unk_0004++; + break; + case 1: + if (!UpdatePaletteFade()) + { + gUnknown_0203847F = 1; + ePokemonStorageSystem.unk_0006 = 1; + SetMainCallback2(sub_8096B5C); + } + break; + } +} + +void sub_8097BA0(void) +{ + switch (ePokemonStorageSystem.unk_0004) + { + case 0: + if (sub_809BF20()) + { + PlaySE(SE_HAZURE); + PrintStorageActionText(PC_TEXT_HOLDING_POKE); + ePokemonStorageSystem.unk_0004 = 1; + } + else + { + PlaySE(SE_SELECT); + PrintStorageActionText(PC_TEXT_EXIT_BOX); + sub_8098A38(0); + ePokemonStorageSystem.unk_0004 = 2; + } + break; + case 1: + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + { + sub_8098A5C(); + SetPSSCallback(sub_8096C84); + } + break; + case 2: + switch (ProcessMenuInputNoWrap()) + { + case 1: + case -1: + sub_8098A5C(); + SetPSSCallback(sub_8096C84); + break; + case 0: + PlaySE(SE_PC_OFF); + sub_8098A5C(); + ePokemonStorageSystem.unk_0004++; + break; + } + break; + case 3: + ePokemonStorageSystem.unk_000c.tileTag = 0x000e; + ePokemonStorageSystem.unk_000c.paletteTag = 0xdad0; + ePokemonStorageSystem.unk_000c.unk04 = 20; + ePokemonStorageSystem.unk_000c.unk06 = 0; + sub_80C5E38(&ePokemonStorageSystem.unk_000c); + ePokemonStorageSystem.unk_0004++; + break; + case 4: + if (sub_80C5F98()) + { + gPlayerPartyCount = CalculatePlayerPartyCount(); + SetMainCallback2(sub_80961A8); + } + break; + } +} + asm(".section .text.8098898"); void PrintStorageActionText(u8 index) { diff --git a/src/scene/hall_of_fame.c b/src/scene/hall_of_fame.c index 812c28137..ef5e6f873 100644 --- a/src/scene/hall_of_fame.c +++ b/src/scene/hall_of_fame.c @@ -90,11 +90,7 @@ static bool8 sub_81438C4(void); // functions from different files void sub_81439D0(void); -void sub_80C5E38(void*); // ? -bool8 sub_80C5DCC(void); -bool8 sub_80C5F98(void); void ReturnFromHallOfFamePC(void); -u16 SpeciesToPokedexNum(u16 species); void remove_some_task(void); // data and gfx @@ -130,9 +126,10 @@ static const s16 sHallOfFame_MonsHalfTeamPositions[3][4] = {-41, 214, 184, 64} }; -static const struct HallofFameMon sDummyFameMon = +static const struct PCScreenEffectStruct sDummyFameMon = { - 0x3EA03EA, 0, 0, 0, {0} + .tileTag = 0x3ea, + .paletteTag = 0x3ea }; static const u8 sUnused2[6] = {2, 1, 3, 6, 4, 5}; @@ -800,20 +797,15 @@ void sub_81428CC(void) } break; case 3: - { - struct HallofFameMons* fameMons; - - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BLDY = 0; - sub_81435B8(); + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + sub_81435B8(); - fameMons = eHallOfFameMons1; - fameMons->mons[0] = sDummyFameMon; + eHOFPCScreenEffect = sDummyFameMon; - sub_80C5CD4((struct PCScreenEffectStruct *)fameMons); - gMain.state++; - } + sub_80C5CD4(&eHOFPCScreenEffect); + gMain.state++; break; case 4: AnimateSprites(); @@ -1022,12 +1014,9 @@ static void sub_8142DF4(u8 taskID) static void sub_8142F78(u8 taskID) { - struct HallofFameMons* fameMons; - CpuSet(gPlttBufferFaded, gPlttBufferUnfaded, 0x200); - fameMons = eHallOfFameMons1; - fameMons->mons[0] = sDummyFameMon; - sub_80C5E38(fameMons); + eHOFPCScreenEffect = sDummyFameMon; + sub_80C5E38(&eHOFPCScreenEffect); gTasks[taskID].func = sub_8142FCC; } -- cgit v1.2.3 From ca2fbbad15daa12858d01eb87ab17a8d41eeffa5 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 8 Jan 2018 22:25:48 -0500 Subject: sDummyPCScreenEffect --> sPCScreenEffectTemplate --- src/scene/hall_of_fame.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/scene/hall_of_fame.c b/src/scene/hall_of_fame.c index ef5e6f873..4740c086d 100644 --- a/src/scene/hall_of_fame.c +++ b/src/scene/hall_of_fame.c @@ -126,8 +126,7 @@ static const s16 sHallOfFame_MonsHalfTeamPositions[3][4] = {-41, 214, 184, 64} }; -static const struct PCScreenEffectStruct sDummyFameMon = -{ +static const struct PCScreenEffectStruct sPCScreenEffectTemplate = { .tileTag = 0x3ea, .paletteTag = 0x3ea }; @@ -802,7 +801,7 @@ void sub_81428CC(void) REG_BLDY = 0; sub_81435B8(); - eHOFPCScreenEffect = sDummyFameMon; + eHOFPCScreenEffect = sPCScreenEffectTemplate; sub_80C5CD4(&eHOFPCScreenEffect); gMain.state++; @@ -1015,7 +1014,7 @@ static void sub_8142DF4(u8 taskID) static void sub_8142F78(u8 taskID) { CpuSet(gPlttBufferFaded, gPlttBufferUnfaded, 0x200); - eHOFPCScreenEffect = sDummyFameMon; + eHOFPCScreenEffect = sPCScreenEffectTemplate; sub_80C5E38(&eHOFPCScreenEffect); gTasks[taskID].func = sub_8142FCC; } -- cgit v1.2.3 From 7b7f11119ac386e51910b957f855eade7e40381b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 9 Jan 2018 00:15:28 -0500 Subject: through sub_8097DE0 --- asm/pokemon_storage_system.s | 177 ----------------------------------- data/pokemon_storage_system.s | 50 ---------- src/pokemon/pokemon_storage_system.c | 109 +++++++++++++++++++++ 3 files changed, 109 insertions(+), 227 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 85e29b183..6b4ccbc06 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,183 +5,6 @@ .text - thumb_func_start sub_8097CC0 -sub_8097CC0: @ 8097CC0 - push {r4,lr} - ldr r0, _08097CD8 @ =gSharedMem - ldrb r1, [r0, 0x4] - adds r4, r0, 0 - cmp r1, 0x4 - bls _08097CCE - b _08097DD0 -_08097CCE: - lsls r0, r1, 2 - ldr r1, _08097CDC @ =_08097CE0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_08097CD8: .4byte gSharedMem -_08097CDC: .4byte _08097CE0 - .align 2, 0 -_08097CE0: - .4byte _08097CF4 - .4byte _08097D38 - .4byte _08097D4C - .4byte _08097D94 - .4byte _08097DB8 -_08097CF4: - bl sub_809BF20 - lsls r0, 24 - cmp r0, 0 - beq _08097D18 - movs r0, 0x20 - bl PlaySE - movs r0, 0xF - bl PrintStorageActionText - ldr r1, _08097D14 @ =gSharedMem - movs r0, 0x1 - strb r0, [r1, 0x4] - b _08097DD0 - .align 2, 0 -_08097D14: .4byte gSharedMem -_08097D18: - movs r0, 0x5 - bl PlaySE - movs r0, 0x12 - bl PrintStorageActionText - movs r0, 0 - bl sub_8098A38 - ldr r1, _08097D34 @ =gSharedMem - movs r0, 0x2 - strb r0, [r1, 0x4] - b _08097DD0 - .align 2, 0 -_08097D34: .4byte gSharedMem -_08097D38: - ldr r0, _08097D48 @ =gMain - ldrh r1, [r0, 0x2E] - movs r0, 0xF3 - ands r0, r1 - cmp r0, 0 - beq _08097DD0 - b _08097D6C - .align 2, 0 -_08097D48: .4byte gMain -_08097D4C: - bl ProcessMenuInputNoWrap - lsls r0, 24 - asrs r1, r0, 24 - cmp r1, 0 - beq _08097D6C - cmp r1, 0 - bgt _08097D66 - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _08097D7C - b _08097DD0 -_08097D66: - cmp r1, 0x1 - beq _08097D7C - b _08097DD0 -_08097D6C: - bl sub_8098A5C - ldr r0, _08097D78 @ =sub_8096C84 - bl SetPSSCallback - b _08097DD0 - .align 2, 0 -_08097D78: .4byte sub_8096C84 -_08097D7C: - movs r0, 0x3 - bl PlaySE - bl sub_8098A5C - ldr r1, _08097D90 @ =gSharedMem - ldrb r0, [r1, 0x4] - adds r0, 0x1 - strb r0, [r1, 0x4] - b _08097DD0 - .align 2, 0 -_08097D90: .4byte gSharedMem -_08097D94: - movs r1, 0 - movs r0, 0xE - strh r0, [r4, 0xC] - ldr r0, _08097DB4 @ =0x0000dad0 - strh r0, [r4, 0xE] - movs r0, 0x14 - strh r0, [r4, 0x10] - strh r1, [r4, 0x12] - adds r0, r4, 0 - adds r0, 0xC - bl sub_80C5E38 - ldrb r0, [r4, 0x4] - adds r0, 0x1 - strb r0, [r4, 0x4] - b _08097DD0 - .align 2, 0 -_08097DB4: .4byte 0x0000dad0 -_08097DB8: - bl sub_80C5F98 - lsls r0, 24 - cmp r0, 0 - beq _08097DD0 - bl CalculatePlayerPartyCount - ldr r1, _08097DD8 @ =gPlayerPartyCount - strb r0, [r1] - ldr r0, _08097DDC @ =sub_80961A8 - bl SetMainCallback2 -_08097DD0: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08097DD8: .4byte gPlayerPartyCount -_08097DDC: .4byte sub_80961A8 - thumb_func_end sub_8097CC0 - - thumb_func_start sub_8097DE0 -sub_8097DE0: @ 8097DE0 - push {lr} - ldr r1, _08097E1C @ =gSharedMem - movs r0, 0 - strb r0, [r1, 0x7] - strh r0, [r1, 0x8] - strh r0, [r1, 0xA] - ldr r1, _08097E20 @ =REG_BG3CNT - ldr r2, _08097E24 @ =0x00001e0f - adds r0, r2, 0 - strh r0, [r1] - ldr r1, _08097E28 @ =gPokemonStorageScrollingBGTile - ldr r2, _08097E2C @ =0x0600e000 - ldr r0, _08097E30 @ =0x040000d4 - str r1, [r0] - str r2, [r0, 0x4] - ldr r1, _08097E34 @ =0x80000010 - str r1, [r0, 0x8] - ldr r0, [r0, 0x8] - ldr r0, _08097E38 @ =gPokemonStorageScrollingBGTilemap - ldr r1, _08097E3C @ =0x0600f000 - bl LZ77UnCompVram - ldr r0, _08097E40 @ =gPokemonStorageScrollingBGPalette - movs r1, 0xD0 - movs r2, 0x10 - bl LoadPalette - pop {r0} - bx r0 - .align 2, 0 -_08097E1C: .4byte gSharedMem -_08097E20: .4byte REG_BG3CNT -_08097E24: .4byte 0x00001e0f -_08097E28: .4byte gPokemonStorageScrollingBGTile -_08097E2C: .4byte 0x0600e000 -_08097E30: .4byte 0x040000d4 -_08097E34: .4byte 0x80000010 -_08097E38: .4byte gPokemonStorageScrollingBGTilemap -_08097E3C: .4byte 0x0600f000 -_08097E40: .4byte gPokemonStorageScrollingBGPalette - thumb_func_end sub_8097DE0 - thumb_func_start sub_8097E44 sub_8097E44: @ 8097E44 push {lr} diff --git a/data/pokemon_storage_system.s b/data/pokemon_storage_system.s index 4340301ba..4a59bb504 100644 --- a/data/pokemon_storage_system.s +++ b/data/pokemon_storage_system.s @@ -3,56 +3,6 @@ .section .rodata - .align 2 -gPokemonStorageScrollingBGPalette:: @ 83B6A10 - .incbin "graphics/pokemon_storage/scrolling_bg.gbapal" - - .align 2 -gPokemonStorageScrollingBGTile:: @ 83B6A30 - .incbin "graphics/pokemon_storage/scrolling_bg.4bpp" - - .align 2 -gPokemonStorageScrollingBGTilemap:: @ 83B6A50 - .incbin "graphics/pokemon_storage/scrolling_bg_map.bin.lz" - -@ unused tilemap? - .2byte 0x1281 - .2byte 0x1282 - .2byte 0x1283 - .2byte 0x1284 - .2byte 0x1285 - .2byte 0x1286 - .2byte 0x1287 - .2byte 0x1288 - .2byte 0x128C - .2byte 0x128D - .2byte 0x128E - .2byte 0x128F - .2byte 0x1290 - .2byte 0x1291 - .2byte 0x1292 - .2byte 0x1293 - .2byte 0x0281 - .2byte 0x0282 - .2byte 0x0283 - .2byte 0x0284 - .2byte 0x0285 - .2byte 0x0286 - .2byte 0x0287 - .2byte 0x0288 - .2byte 0x028C - .2byte 0x028D - .2byte 0x028E - .2byte 0x028F - .2byte 0x0290 - .2byte 0x0291 - .2byte 0x0292 - .2byte 0x0293 - .2byte 0x12AD - .2byte 0x12AE - .2byte 0x12A8 - .2byte 0x12A8 - .align 2 WaveformPalette: @ 83B6B94 .incbin "graphics/pokemon_storage/waveform.gbapal" diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index daae82df6..5fd43cfb8 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -89,6 +89,7 @@ struct PokemonStorageSystemData { u8 unk_0004; u8 unk_0005; u8 unk_0006; + u8 unk_0007; u16 unk_0008; u16 unk_000a; struct PCScreenEffectStruct unk_000c; @@ -266,6 +267,51 @@ const u8 gBoxSelectionPopupCenterTiles[] = INCBIN_U8("graphics/pokemon_storage/b const u8 gBoxSelectionPopupSidesTiles[] = INCBIN_U8("graphics/pokemon_storage/box_selection_popup_sides.4bpp"); +const u16 gPokemonStorageScrollingBGPalette[] = INCBIN_U16("graphics/pokemon_storage/scrolling_bg.gbapal"); + +const u16 gPokemonStorageScrollingBGTile[] = INCBIN_U16("graphics/pokemon_storage/scrolling_bg.4bpp"); + +const u8 gPokemonStorageScrollingBGTilemap[] = INCBIN_U8("graphics/pokemon_storage/scrolling_bg_map.bin.lz"); + +const u16 sUnknownTilemap[] = { + 0x1281, + 0x1282, + 0x1283, + 0x1284, + 0x1285, + 0x1286, + 0x1287, + 0x1288, + 0x128C, + 0x128D, + 0x128E, + 0x128F, + 0x1290, + 0x1291, + 0x1292, + 0x1293, + 0x0281, + 0x0282, + 0x0283, + 0x0284, + 0x0285, + 0x0286, + 0x0287, + 0x0288, + 0x028C, + 0x028D, + 0x028E, + 0x028F, + 0x0290, + 0x0291, + 0x0292, + 0x0293, + 0x12AD, + 0x12AE, + 0x12A8, + 0x12A8 +}; + extern const struct StorageAction gPCStorageActionTexts[]; extern const struct PokemonStorageSystemData *gPokemonStorageSystemPtr; extern u8 *const gUnknown_083B6DB8; @@ -2073,6 +2119,69 @@ void sub_8097BA0(void) } } +void sub_8097CC0(void) { + switch (ePokemonStorageSystem.unk_0004) { + case 0: + if (sub_809BF20()) { + PlaySE(SE_HAZURE); + PrintStorageActionText(PC_TEXT_HOLDING_POKE); + ePokemonStorageSystem.unk_0004 = 1; + } + else { + PlaySE(SE_SELECT); + PrintStorageActionText(PC_TEXT_CONTINUE_BOX); + sub_8098A38(0); + ePokemonStorageSystem.unk_0004 = 2; + } + break; + case 1: + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) { + sub_8098A5C(); + SetPSSCallback(sub_8096C84); + } + break; + case 2: + switch (ProcessMenuInputNoWrap()) { + case 0: + sub_8098A5C(); + SetPSSCallback(sub_8096C84); + break; + case -1: + case 1: + PlaySE(SE_PC_OFF); + sub_8098A5C(); + ePokemonStorageSystem.unk_0004++; + break; + } + break; + case 3: + ePokemonStorageSystem.unk_000c.tileTag = 0x000e; + ePokemonStorageSystem.unk_000c.paletteTag = 0xdad0; + ePokemonStorageSystem.unk_000c.unk04 = 20; + ePokemonStorageSystem.unk_000c.unk06 = 0; + sub_80C5E38(&ePokemonStorageSystem.unk_000c); + ePokemonStorageSystem.unk_0004++; + break; + case 4: + if (sub_80C5F98()) { + gPlayerPartyCount = CalculatePlayerPartyCount(); + SetMainCallback2(sub_80961A8); + } + break; + } +} + +void sub_8097DE0(void) +{ + ePokemonStorageSystem.unk_0007 = 0; + ePokemonStorageSystem.unk_0008 = 0; + ePokemonStorageSystem.unk_000a = 0; + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(3) | BGCNT_SCREENBASE(30); + DmaCopy16Defvars(3, gPokemonStorageScrollingBGTile, BG_SCREEN_ADDR(28), sizeof gPokemonStorageScrollingBGTile); + LZ77UnCompVram(gPokemonStorageScrollingBGTilemap, BG_SCREEN_ADDR(30)); + LoadPalette(gPokemonStorageScrollingBGPalette, 0xd0, 0x10); +} + asm(".section .text.8098898"); void PrintStorageActionText(u8 index) { -- cgit v1.2.3 From 6503d0fee3d9423640f563745692af35f7298c8b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 9 Jan 2018 10:09:55 -0500 Subject: through sub_8097E70; split PSS in 3 --- asm/pokemon_storage_system.s | 118 --- data/pokemon_storage_system.s | 70 -- include/graphics.h | 5 + include/pokemon_storage_system.h | 120 +++ include/text.h | 2 + ld_script.txt | 6 +- src/pokemon/pokemon_storage_system.c | 1553 ------------------------------- src/pokemon/pokemon_storage_system_2.c | 1566 ++++++++++++++++++++++++++++++++ src/pokemon/pokemon_storage_system_3.c | 16 + src/pokemon/pokemon_summary_screen.c | 29 +- src/pokenav_before.c | 1 - sym_ewram.txt | 5 +- 12 files changed, 1730 insertions(+), 1761 deletions(-) create mode 100644 src/pokemon/pokemon_storage_system_2.c create mode 100644 src/pokemon/pokemon_storage_system_3.c diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 6b4ccbc06..bd1007f5d 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,124 +5,6 @@ .text - thumb_func_start sub_8097E44 -sub_8097E44: @ 8097E44 - push {lr} - ldr r1, _08097E6C @ =gSharedMem - ldrb r0, [r1, 0x7] - adds r0, 0x1 - strb r0, [r1, 0x7] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1 - bls _08097E66 - movs r0, 0 - strb r0, [r1, 0x7] - ldrh r0, [r1, 0x8] - subs r0, 0x1 - strh r0, [r1, 0x8] - ldrh r0, [r1, 0xA] - adds r0, 0x1 - strh r0, [r1, 0xA] -_08097E66: - pop {r0} - bx r0 - .align 2, 0 -_08097E6C: .4byte gSharedMem - thumb_func_end sub_8097E44 - - thumb_func_start sub_8097E70 -sub_8097E70: @ 8097E70 - push {r4,lr} - sub sp, 0x10 - ldr r0, _08097F2C @ =gPSSMenuHeader_Gfx - ldr r1, _08097F30 @ =0x06005000 - bl LZ77UnCompVram - ldr r0, _08097F34 @ =gPSSMenuHeader_Tilemap - ldr r4, _08097F38 @ =gUnknown_02039760 - adds r1, r4, 0 - bl LZ77UnCompWram - ldr r0, _08097F3C @ =0x06007800 - movs r1, 0 - str r1, [sp] - str r1, [sp, 0x4] - movs r1, 0xA - str r1, [sp, 0x8] - movs r1, 0x14 - str r1, [sp, 0xC] - movs r1, 0 - movs r2, 0 - adds r3, r4, 0 - bl sub_809D034 - ldr r0, _08097F40 @ =gPSSMenu1_Pal - movs r1, 0x10 - movs r2, 0x20 - bl LoadPalette - ldr r0, _08097F44 @ =gPSSMenu2_Pal - movs r1, 0 - movs r2, 0x20 - bl LoadPalette - ldr r0, _08097F48 @ =gUnknown_083B6D74 - movs r1, 0xB0 - movs r2, 0x20 - bl LoadPalette - ldr r0, _08097F4C @ =gUnknown_083B6D94 - movs r1, 0xC0 - movs r2, 0x20 - bl LoadPalette - ldr r4, _08097F50 @ =gUnknownPalette_81E6692+0x2 - adds r0, r4, 0 - movs r1, 0xF1 - movs r2, 0x2 - bl LoadPalette - adds r0, r4, 0 - movs r1, 0xF2 - movs r2, 0x2 - bl LoadPalette - adds r0, r4, 0 - adds r0, 0x8 - movs r1, 0xF3 - movs r2, 0x2 - bl LoadPalette - adds r0, r4, 0 - adds r0, 0x16 - movs r1, 0xF4 - movs r2, 0x4 - bl LoadPalette - adds r0, r4, 0 - adds r0, 0x12 - movs r1, 0xF6 - movs r2, 0x4 - bl LoadPalette - adds r4, 0x2 - adds r0, r4, 0 - movs r1, 0xFF - movs r2, 0x2 - bl LoadPalette - ldr r0, _08097F54 @ =gWaveformSpritePalette - bl LoadSpritePalette - bl sub_80980D4 - bl sub_8097F58 - bl sub_8097FB8 - bl sub_809801C - add sp, 0x10 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08097F2C: .4byte gPSSMenuHeader_Gfx -_08097F30: .4byte 0x06005000 -_08097F34: .4byte gPSSMenuHeader_Tilemap -_08097F38: .4byte gUnknown_02039760 -_08097F3C: .4byte 0x06007800 -_08097F40: .4byte gPSSMenu1_Pal -_08097F44: .4byte gPSSMenu2_Pal -_08097F48: .4byte gUnknown_083B6D74 -_08097F4C: .4byte gUnknown_083B6D94 -_08097F50: .4byte gUnknownPalette_81E6692+0x2 -_08097F54: .4byte gWaveformSpritePalette - thumb_func_end sub_8097E70 - thumb_func_start sub_8097F58 sub_8097F58: @ 8097F58 push {r4,lr} diff --git a/data/pokemon_storage_system.s b/data/pokemon_storage_system.s index 4a59bb504..d21bc324f 100644 --- a/data/pokemon_storage_system.s +++ b/data/pokemon_storage_system.s @@ -3,76 +3,6 @@ .section .rodata - .align 2 -WaveformPalette: @ 83B6B94 - .incbin "graphics/pokemon_storage/waveform.gbapal" - - .align 2 -WaveformTiles: @ 83B6BB4 - .incbin "graphics/pokemon_storage/waveform.4bpp" - - .align 2 -gUnknown_083B6D74:: @ 83B6D74 - .incbin "graphics/pokemon_storage/83B6D74.gbapal" - - .align 2 -gUnknown_083B6D94:: @ 83B6D94 - .incbin "graphics/pokemon_storage/83B6D94.gbapal" - - .align 2 -gPokemonStorageSystemPtr:: @ 83B6DB4 - .4byte gSharedMem - - .align 2 -gUnknown_083B6DB8:: @ 83B6DB8 - .4byte gTileBuffer - - .align 2 -gWaveformSpritePalette:: @ 83B6DBC - obj_pal WaveformPalette, 56013 - - .align 2 -gWaveformSpriteSheet:: @ 83B6DC4 - obj_tiles WaveformTiles, 0x1C0, 5 - - .align 2 -gUnknown_083B6DCC:: @ 83B6DCC - obj_tiles gSharedMem + 0x2784, 0x800, 2 - - .align 2 -gUnknown_083B6DD4:: @ 83B6DD4 - obj_pal gSharedMem + 0x2704, 56007 - - .align 2 -gSpriteTemplate_83B6DDC:: @ 83B6DDC - spr_template 2, 56007, gOamData_83B6EAC, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - - .align 2 -gPCStorageActionTexts:: @ 83B6DF4 - .4byte PCText_ExitBox, 0 - .4byte PCText_WhatYouDo, 0 - .4byte PCText_PickATheme, 0 - .4byte PCText_PickAWallpaper, 0 - .4byte PCText_IsSelected, 1 - .4byte PCText_JumpToWhichBox, 0 - .4byte PCText_DepositInWhichBox, 0 - .4byte PCText_WasDeposited, 1 - .4byte PCText_BoxIsFull, 0 - .4byte PCText_ReleasePoke, 0 - .4byte PCText_WasReleased, 4 - .4byte PCText_ByeBye, 6 - .4byte PCText_MarkPoke, 0 - .4byte PCText_LastPoke, 0 - .4byte PCText_PartyFull, 0 - .4byte PCText_HoldingPoke, 0 - .4byte PCText_WhichOneWillTake, 0 - .4byte PCText_CantReleaseEgg, 0 - .4byte PCText_ContinueBox, 0 - .4byte PCText_CameBack, 1 - .4byte PCText_Worried, 0 - .4byte PCText_Surprise, 0 - .4byte PCText_PleaseRemoveMail, 0 - .align 2 gOamData_83B6EAC:: @ 83B6EAC .2byte 0x0000 diff --git a/include/graphics.h b/include/graphics.h index 00a210350..91ba45acd 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -2743,4 +2743,9 @@ extern const u16 gCableCar_Pal[]; extern const u16 gCableCarBG_Pal[]; extern const u8 gCableCarBG_Gfx[]; +extern const u8 gPSSMenuHeader_Gfx[]; +extern const u8 gPSSMenuHeader_Tilemap[]; +extern const u16 gPSSMenu1_Pal[]; +extern const u16 gPSSMenu2_Pal[]; + #endif // GUARD_GRAPHICS_H diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index 9fe3436ef..51ebda88f 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -1,8 +1,128 @@ #ifndef GUARD_POKEMON_STORAGE_SYSTEM_H #define GUARD_POKEMON_STORAGE_SYSTEM_H +#include "pc_screen_effect.h" +#include "mon_markings.h" + +enum { + PC_TEXT_EXIT_BOX, + PC_TEXT_WHAT_YOU_DO, + PC_TEXT_PICK_A_THEME, + PC_TEXT_PICK_A_WALLPAPER, + PC_TEXT_IS_SELECTED, + PC_TEXT_JUMP_TO_WHICH_BOX, + PC_TEXT_DEPOSIT_IN_WHICH_BOX, + PC_TEXT_WAS_DEPOSITED, + PC_TEXT_BOX_IS_FULL, + PC_TEXT_RELEASE_POKE, + PC_TEXT_WAS_RELEASED, + PC_TEXT_BYE_BYE, + PC_TEXT_MARK_POKE, + PC_TEXT_LAST_POKE, + PC_TEXT_PARTY_FULL, + PC_TEXT_HOLDING_POKE, + PC_TEXT_WHICH_ONE_WILL_TAKE, + PC_TEXT_CANT_RELEASE_EGG, + PC_TEXT_CONTINUE_BOX, + PC_TEXT_CAME_BACK, + PC_TEXT_WORRIED, + PC_TEXT_SURPRISE, + PC_TEXT_PLEASE_REMOVE_MAIL +}; + +enum { + PC_TEXT_FMT_NORMAL, + PC_TEXT_FMT_MON_NAME, + PC_TEXT_FMT_UNK_02, + PC_TEXT_FMT_UNK_03, + PC_TEXT_FMT_MON_NAME_2, + PC_TEXT_FMT_UNK_05, + PC_TEXT_FMT_MON_NAME_AFTER_EXCL_MARK +}; + +struct StorageAction { + const u8 *text; + u8 format; +}; + +struct PSS_MenuStringPtrs { + const u8 *text; + const u8 *desc; +}; + +struct UnkStruct_2000020 { + struct UnkStruct_2000020 *unk_00; + u8 unk_04; + u8 unk_05; +}; + +struct UnkPSSStruct_2002370 { + struct Sprite *unk_0000; + struct Sprite *unk_0004[4]; + u32 unk_0014[3]; + struct Sprite *unk_0020[2]; + u8 filler_0028[0x214]; + u8 curBox; + u8 unk_023d; + u8 unk_023e; + u16 unk_0240; + u16 unk_0242; +}; // 0244 + +struct PokemonStorageSystemData { + void (*unk_0000)(void); + u8 unk_0004; + u8 unk_0005; + u8 unk_0006; + u8 unk_0007; + u16 unk_0008; + u16 unk_000a; + struct PCScreenEffectStruct unk_000c; + struct UnkStruct_2000020 unk_0020[274]; // refine size later + u8 filler_08b0[2]; + s16 unk_08b2; + u16 unk_08b4; + u8 filler_08b6[0x4a8]; + s16 unk_0d5e; + s16 unk_0d60; + u8 filler_0d62[0x490]; + u16 unk_11f2; + u8 filler_11f4[2]; + u8 unk_11f6; + u8 unk_11f7; + u8 unk_11f8; + u8 unk_11f9; + u8 unk_11fa[0xc2]; + struct PokemonMarkMenu unk_12bc; + struct UnkPSSStruct_2002370 unk_2370; + u8 filler_25b4[0xd8]; + u8 unk_268c; + u8 unk_268d; + u8 unk_268e; + struct Pokemon *unk_2690; + u8 unk_2694[18]; + u8 unk_26a6[62]; + u8 unk_26e4[0x20]; + u16 unk_2704[0x40]; + u8 unk_2784[0x800]; +}; + +extern EWRAM_DATA u16 gUnknown_02039760[0x600]; + +extern struct PokemonStorageSystemData *const gPokemonStorageSystemPtr; +extern u8 *const gUnknown_083B6DB8; + +void sub_8096264(struct UnkPSSStruct_2002370 *a0, u16 tileTag, u16 palTag, u8 a3); +void sub_809634C(u8 curBox); +u8 sub_8096368(void); +void sub_809635C(void); +void sub_8096310(void); +void sub_80961A8(void); + +void task_intro_29(u8 whichMenu); void ResetPokemonStorageSystem(void); void BoxMonRestorePP(struct BoxPokemon *); void party_compaction(void); +struct Sprite *sub_809A9A0(u16 a0, u16 a1, u8 a2, u8 a3, u8 a4); #endif // GUARD_POKEMON_STORAGE_SYSTEM_H diff --git a/include/text.h b/include/text.h index ebc4ebe7e..281a0535a 100644 --- a/include/text.h +++ b/include/text.h @@ -253,4 +253,6 @@ void StripExtCtrlCodes(u8 *str); s32 StringCompareWithoutExtCtrlCodes(const u8 *str1, const u8 *str2); u8 sub_8004FD0(struct Window *win, u8 *dest, const u8 *src, u16 tileDataStartOffset, u8 left, u16 top, u8 width, u32 a8); +extern const u16 gUnknownPalette_81E6692[]; + #endif // GUARD_TEXT_H diff --git a/ld_script.txt b/ld_script.txt index 898c5ae88..2157e6da5 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -128,8 +128,10 @@ SECTIONS { src/battle/battle_party_menu.o(.text); asm/unk_text_8095904.o(.text); src/pokemon/pokemon_storage_system.o(.text); + src/pokemon/pokemon_storage_system_2.o(.text); asm/pokemon_storage_system.o(.text); - src/pokemon/pokemon_storage_system.o(.text.8098898); + src/pokemon/pokemon_storage_system_2.o(.text.8098898); + src/pokemon/pokemon_storage_system_3.o(.text); asm/pokemon_storage_system.o(.text_8098A38); src/pokemon/pokemon_icon.o(.text); src/pokemon/pokemon_summary_screen.o(.text); @@ -511,6 +513,8 @@ SECTIONS { src/engine/trainer_card.o(.rodata); src/battle/battle_party_menu.o(.rodata); src/pokemon/pokemon_storage_system.o(.rodata); + src/pokemon/pokemon_storage_system_2.o(.rodata); + src/pokemon/pokemon_storage_system_3.o(.rodata); data/pokemon_storage_system.o(.rodata); src/pokemon/pokemon_icon.o(.rodata); src/pokemon/pokemon_summary_screen.o(.rodata); diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index 5fd43cfb8..c91e45d7a 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -3,123 +3,16 @@ #include "constants/songs.h" #include "sound.h" #include "field_weather.h" -#include "mon_markings.h" #include "overworld.h" -#include "mail_data.h" #include "field_fadetransition.h" #include "menu.h" #include "main.h" #include "strings.h" #include "string_util.h" #include "event_data.h" -#include "ewram.h" #include "script.h" -#include "pokemon_summary_screen.h" -#include "pc_screen_effect.h" -#include "naming_screen.h" #include "pokemon_storage_system.h" -enum { - PC_TEXT_EXIT_BOX, - PC_TEXT_WHAT_YOU_DO, - PC_TEXT_PICK_A_THEME, - PC_TEXT_PICK_A_WALLPAPER, - PC_TEXT_IS_SELECTED, - PC_TEXT_JUMP_TO_WHICH_BOX, - PC_TEXT_DEPOSIT_IN_WHICH_BOX, - PC_TEXT_WAS_DEPOSITED, - PC_TEXT_BOX_IS_FULL, - PC_TEXT_RELEASE_POKE, - PC_TEXT_WAS_RELEASED, - PC_TEXT_BYE_BYE, - PC_TEXT_MARK_POKE, - PC_TEXT_LAST_POKE, - PC_TEXT_PARTY_FULL, - PC_TEXT_HOLDING_POKE, - PC_TEXT_WHICH_ONE_WILL_TAKE, - PC_TEXT_CANT_RELEASE_EGG, - PC_TEXT_CONTINUE_BOX, - PC_TEXT_CAME_BACK, - PC_TEXT_WORRIED, - PC_TEXT_SURPRISE, - PC_TEXT_PLEASE_REMOVE_MAIL -}; - -enum { - PC_TEXT_FMT_NORMAL, - PC_TEXT_FMT_MON_NAME, - PC_TEXT_FMT_UNK_02, - PC_TEXT_FMT_UNK_03, - PC_TEXT_FMT_MON_NAME_2, - PC_TEXT_FMT_UNK_05, - PC_TEXT_FMT_MON_NAME_AFTER_EXCL_MARK -}; - -struct StorageAction { - u8 *text; - u8 format; -}; - -struct PSS_MenuStringPtrs { - const u8 *text; - const u8 *desc; -}; - -struct UnkStruct_2000020 { - struct UnkStruct_2000020 *unk_00; - u8 unk_04; - u8 unk_05; -}; - -struct UnkPSSStruct_2002370 { - struct Sprite *unk_0000; - struct Sprite *unk_0004[4]; - u32 unk_0014[3]; - struct Sprite *unk_0020[2]; - u8 filler_0028[0x214]; - u8 curBox; - u8 unk_023d; - u8 unk_023e; - u16 unk_0240; - u16 unk_0242; -}; // 0244 - -struct PokemonStorageSystemData { - void (*unk_0000)(void); - u8 unk_0004; - u8 unk_0005; - u8 unk_0006; - u8 unk_0007; - u16 unk_0008; - u16 unk_000a; - struct PCScreenEffectStruct unk_000c; - struct UnkStruct_2000020 unk_0020[274]; // refine size later - u8 filler_08b0[2]; - s16 unk_08b2; - u16 unk_08b4; - u8 filler_08b6[0x4a8]; - s16 unk_0d5e; - s16 unk_0d60; - u8 filler_0d62[0x490]; - u16 unk_11f2; - u8 filler_11f4[2]; - u8 unk_11f6; - u8 unk_11f7; - u8 unk_11f8; - u8 unk_11f9; - u8 unk_11fa[0xc2]; - struct PokemonMarkMenu unk_12bc; - struct UnkPSSStruct_2002370 unk_2370; - u8 filler_25b4[0xd8]; - u8 unk_268c; - u8 unk_268d; - u8 unk_268e; - struct Pokemon *unk_2690; - u8 unk_2694[18]; - u8 unk_26a6[62]; - u8 unk_26e4[80]; -}; - void StorageSystemCreatePrimaryMenu(u8 whichMenu); void sub_80963D0(u8 curBox); void sub_809658C(void); @@ -128,95 +21,6 @@ void sub_809662C(void); void sub_809665C(void); void sub_80966F4(const u8 *sourceString, u16 x, u16 y); void sub_8096784(struct Sprite *sprite); -void task_intro_29(u8 whichMenu); -void sub_8096884(void); -void sub_8096AFC(void); -void sub_8096B38(void); -void SetPSSCallback(void (*func)(void)); -void sub_8096BF0(void); -void sub_8096C68(void); -void sub_8096C84(void); -void sub_8096FC8(void); -void sub_8097004(void); -void sub_8097078(void); -void sub_80972A8(void); -void sub_80972FC(void); -void c3_0808DC50(void); -void sub_8097390(void); -void sub_809746C(void); -void sub_8097594(void); -void sub_8097788(void); -void sub_80977E4(void); -void sub_8097858(void); -void sub_809789C(void); -void sub_8097974(void); -void sub_8097A64(void); -void sub_8097B44(void); -void sub_8097BA0(void); -void sub_8097CC0(void); -void sub_8097DE0(void); -void sub_8097E44(void); -void sub_8097E70(void); -void BoxSetMosaic(void); -void sub_809801C(void); -void sub_8098400(void); -void add_to_c3_somehow(void); -bool8 sub_80985CC(void); -void sub_80986E8(void); -void sub_8098710(void); -void sub_8098734(void); -void sub_80987DC(void); -void sub_809880C(void); -bool8 sub_8098830(void); -void PrintStorageActionText(u8 index); -void sub_8098A38(u8); -void sub_8098A5C(void); -void sub_8098A80(void); -void sub_8098AA8(u8 a0); -void sub_8098B48(void); -void sub_8099310(void); -bool8 sub_8099374(void); -void sub_8099958(void); -bool8 sub_8099990(void); -void sub_809BB90(void); -void sub_8099BF8(u8 a0); -void sub_8099C70(u8 whichBox); -bool8 sub_8099D34(void); -void sub_8099DCC(u8 a0); -bool8 sub_8099E08(void); -void sub_809A860(u8 a0); -struct Sprite *sub_809A9A0(u16 a0, u16 a1, u8 a2, u8 a3, u8 a4); -void sub_809AA24(void); -void sub_809AA98(void); -bool8 sub_809AC00(void); -void sub_809B0C0(u8 a0); -void sub_809B0D4(void); -void sub_809B0E0(void); -u8 sub_809B0F4(void); -void sub_809B100(u8 a0); -bool8 sub_809B130(void); -void sub_809B440(void); -bool8 sub_809B62C(u8); -void sub_809B6BC(void); -void sub_809B6DC(void); -bool8 sub_809B734(void); -void sub_809B760(void); -void sub_809B7AC(void); -void sub_809B7D4(void); -s8 sub_809B960(void); -void sub_809BBC0(void); -void sub_809BC18(void); -void sub_809BD14(void); -void sub_809BDD8(u8 markings); -bool8 sub_809BE80(void); -bool8 sub_809BEBC(void); -bool8 sub_809BF20(void); -bool8 sub_809BF48(void); -u8 sub_809CA40(void); -void sub_809CE84(void); -s16 sub_809CF30(void); -void sub_809CFDC(struct UnkStruct_2000020 *a0, struct UnkStruct_2000020 *a1, u8 a2); -void sub_809CFF0(void); const struct PSS_MenuStringPtrs gUnknown_083B600C[] = { {PCText_WithdrawPoke, PCText_MovePokeToParty}, @@ -267,73 +71,11 @@ const u8 gBoxSelectionPopupCenterTiles[] = INCBIN_U8("graphics/pokemon_storage/b const u8 gBoxSelectionPopupSidesTiles[] = INCBIN_U8("graphics/pokemon_storage/box_selection_popup_sides.4bpp"); -const u16 gPokemonStorageScrollingBGPalette[] = INCBIN_U16("graphics/pokemon_storage/scrolling_bg.gbapal"); - -const u16 gPokemonStorageScrollingBGTile[] = INCBIN_U16("graphics/pokemon_storage/scrolling_bg.4bpp"); - -const u8 gPokemonStorageScrollingBGTilemap[] = INCBIN_U8("graphics/pokemon_storage/scrolling_bg_map.bin.lz"); - -const u16 sUnknownTilemap[] = { - 0x1281, - 0x1282, - 0x1283, - 0x1284, - 0x1285, - 0x1286, - 0x1287, - 0x1288, - 0x128C, - 0x128D, - 0x128E, - 0x128F, - 0x1290, - 0x1291, - 0x1292, - 0x1293, - 0x0281, - 0x0282, - 0x0283, - 0x0284, - 0x0285, - 0x0286, - 0x0287, - 0x0288, - 0x028C, - 0x028D, - 0x028E, - 0x028F, - 0x0290, - 0x0291, - 0x0292, - 0x0293, - 0x12AD, - 0x12AE, - 0x12A8, - 0x12A8 -}; - -extern const struct StorageAction gPCStorageActionTexts[]; -extern const struct PokemonStorageSystemData *gPokemonStorageSystemPtr; -extern u8 *const gUnknown_083B6DB8; - EWRAM_DATA struct PokemonStorage gPokemonStorage = {0}; EWRAM_DATA u8 gUnknown_02038470[3] = {}; EWRAM_DATA u8 gUnknown_02038473 = 0; EWRAM_DATA u8 gUnknown_02038474 = 0; EWRAM_DATA struct UnkPSSStruct_2002370 *gUnknown_02038478 = NULL; -EWRAM_DATA u8 gUnknown_0203847C = 0; -EWRAM_DATA u8 gUnknown_0203847D = 0; -EWRAM_DATA u8 gUnknown_0203847E = 0; -EWRAM_DATA u8 gUnknown_0203847F = 0; -EWRAM_DATA struct Pokemon gUnknown_02038480 = {}; -EWRAM_DATA u8 gUnknown_020384E4 = 0; -EWRAM_DATA u8 gUnknown_020384E5 = 0; -EWRAM_DATA u8 gUnknown_020384E6 = 0; -EWRAM_DATA u8 gUnknown_020384E7 = 0; -EWRAM_DATA u8 gUnknown_020384E8 = 0; -EWRAM_DATA u8 gUnknown_020384E9 = 0; -EWRAM_DATA u16 gUnknown_020384EA = 0; -EWRAM_DATA u32 gUnknown_020384EC = 0; static u8 CountPokemonInBoxN(u8 boxId) { @@ -967,1298 +709,3 @@ void sub_8096784(struct Sprite *sprite) } } } - -void task_intro_29(u8 whichMenu) -{ - gUnknown_0203847D = whichMenu; - ePokemonStorageSystem.unk_0005 = whichMenu; - SetMainCallback2(sub_8096884); -} - -void sub_80967DC(void) -{ - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - REG_BG2VOFS = 0; - REG_BG2HOFS = 0; - REG_BG3HOFS = 0; - REG_BG3VOFS = 0; -} - -void sub_8096804(void) -{ - ResetPaletteFade(); - ResetSpriteData(); - FreeSpriteTileRanges(); - FreeAllSpritePalettes(); - ResetTasks(); - gReservedSpriteTileCount = 0x280; - sub_809CFDC(ePokemonStorageSystem.unk_0020, ePokemonStorageSystem.unk_0020 + 1, 8); - gKeyRepeatStartDelay = 20; -} - -void sub_8096848(void) -{ - sub_809B0D4(); - gUnknown_0203847C = (ePokemonStorageSystem.unk_0005 == 1 ? 1 : 0); - gUnknown_0203847E = 0; -} - -void sub_8096874(void) -{ - REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON; -} - -void sub_8096884(void) -{ - switch (gMain.state) - { - case 0: - SetVBlankCallback(NULL); - REG_DISPCNT = 0; - sub_8096804(); - gMain.state++; - break; - case 1: - SetUpWindowConfig(&gWindowConfig_81E6D00); - gMain.state++; - break; - case 2: - InitMenuWindow(&gWindowConfig_81E6D00); - MenuZeroFillScreen(); - gMain.state++; - break; - case 3: - sub_80967DC(); - sub_8096848(); - gMain.state++; - break; - case 4: - sub_8098B48(); - sub_809AA24(); - gMain.state++; - break; - case 5: - sub_8097DE0(); - gMain.state++; - break; - case 6: - sub_8097E70(); - gMain.state++; - break; - case 7: - sub_8098400(); - gMain.state++; - break; - case 8: - sub_8099BF8(gPokemonStorage.currentBox); - ePokemonStorageSystem.unk_12bc.baseTileTag = 0x000a; - ePokemonStorageSystem.unk_12bc.basePaletteTag = 0xdacb; - sub_80F727C(&ePokemonStorageSystem.unk_12bc); - sub_80F7404(); - gMain.state++; - break; - case 9: - sub_8096874(); - SetPSSCallback(sub_8096BF0); - SetMainCallback2(sub_8096B38); - SetVBlankCallback(sub_8096AFC); - gMain.state++; - break; - } -} - -void sub_80969A0(void) -{ - switch (gMain.state) - { - case 0: - SetVBlankCallback(NULL); - REG_DISPCNT = 0x0000; - ePokemonStorageSystem.unk_0005 = gUnknown_0203847D; - sub_8096804(); - if (gUnknown_0203847F == 1) - sub_809BBC0(); - if (gUnknown_0203847F == 0) - sub_809BD14(); - gMain.state++; - break; - case 1: - SetUpWindowConfig(&gWindowConfig_81E6D00); - gMain.state++; - break; - case 2: - InitMenuWindow(&gWindowConfig_81E6D00); - MenuZeroFillScreen(); - gMain.state++; - break; - case 3: - sub_80967DC(); - gMain.state++; - break; - case 4: - sub_8098B48(); - sub_809AA98(); - gMain.state++; - break; - case 5: - sub_8097DE0(); - gMain.state++; - break; - case 6: - sub_8097E70(); - gMain.state++; - break; - case 7: - sub_8098400(); - gMain.state++; - break; - case 8: - sub_8099BF8(gPokemonStorage.currentBox); - ePokemonStorageSystem.unk_12bc.baseTileTag = 0x000a; - ePokemonStorageSystem.unk_12bc.basePaletteTag = 0xdacb; - sub_80F727C(&ePokemonStorageSystem.unk_12bc); - sub_80F7404(); - gMain.state++; - break; - case 9: - BeginNormalPaletteFade(0xffffffff, 0, 16, 0, 0); - SetVBlankCallback(sub_8096AFC); - gMain.state++; - break; - case 10: - sub_8096874(); - SetPSSCallback(sub_8096C68); - SetMainCallback2(sub_8096B38); - gMain.state++; - break; - } -} - -void sub_8096AFC(void) -{ - REG_BG2HOFS = ePokemonStorageSystem.unk_08b4; - REG_BG3HOFS = ePokemonStorageSystem.unk_000a; - REG_BG3VOFS = ePokemonStorageSystem.unk_0008; - LoadOam(); - ProcessSpriteCopyRequests(); - sub_809CFF0(); - TransferPlttBuffer(); -} - -void sub_8096B38(void) -{ - ePokemonStorageSystem.unk_0000(); - sub_8097E44(); - sub_8098734(); - AnimateSprites(); - BuildOamBuffer(); -} - -void sub_8096B5C(void) -{ - switch (ePokemonStorageSystem.unk_0006) - { - case 0: - ShowPokemonSummaryScreen(ePokemonStorageSystem.unk_2690, ePokemonStorageSystem.unk_268d, ePokemonStorageSystem.unk_268c, sub_80969A0, ePokemonStorageSystem.unk_268e); - break; - case 1: - DoNamingScreen(1, gPokemonStorage.boxNames[gPokemonStorage.currentBox], 0, 0, 0, sub_80969A0); - break; - } -} - -void SetPSSCallback(void (*func)(void)) -{ - ePokemonStorageSystem.unk_0000 = func; - ePokemonStorageSystem.unk_0004 = 0; -} - -void sub_8096BF0(void) -{ - switch (ePokemonStorageSystem.unk_0004) - { - case 0: - BlendPalettes(0xffffffff, 16, 0); - ePokemonStorageSystem.unk_0004++; - break; - case 1: - PlaySE(SE_PC_LOGON); - ePokemonStorageSystem.unk_000c.tileTag = 14; - ePokemonStorageSystem.unk_000c.paletteTag = 0xdad0; - ePokemonStorageSystem.unk_000c.unk04 = 0; - ePokemonStorageSystem.unk_000c.unk06 = 0; - sub_80C5CD4(&ePokemonStorageSystem.unk_000c); - BlendPalettes(0xffffffff, 0, 0); - ePokemonStorageSystem.unk_0004++; - break; - case 2: - if (sub_80C5DCC()) - SetPSSCallback(sub_8096C84); - break; - } -} - -void sub_8096C68(void) -{ - if (!UpdatePaletteFade()) - SetPSSCallback(sub_8096C84); -} - -void sub_8096C84(void) -{ - switch (ePokemonStorageSystem.unk_0004) - { - case 0: - switch (sub_809CA40()) - { - case 1: - PlaySE(SE_SELECT); - ePokemonStorageSystem.unk_0004 = 1; - break; - case 5: - if (ePokemonStorageSystem.unk_0005 != 2) - { - PrintStorageActionText(PC_TEXT_WHICH_ONE_WILL_TAKE); - ePokemonStorageSystem.unk_0004 = 3; - } - else - { - sub_809B0D4(); - SetPSSCallback(sub_8096FC8); - } - break; - case 6: - if (ePokemonStorageSystem.unk_0005 == 2) - { - if (sub_809BF20() && ItemIsMail(ePokemonStorageSystem.unk_11f2)) - { - ePokemonStorageSystem.unk_0004 = 5; - } - else - { - SetPSSCallback(sub_8097004); - } - } - break; - case 4: - SetPSSCallback(sub_8097BA0); - break; - case 16: - SetPSSCallback(sub_8097CC0); - break; - case 7: - PlaySE(SE_SELECT); - SetPSSCallback(sub_809789C); - break; - case 8: - PlaySE(SE_SELECT); - SetPSSCallback(sub_8097078); - break; - case 9: - PlaySE(SE_SELECT); - ePokemonStorageSystem.unk_08b2 = gPokemonStorage.currentBox + 1; - if (ePokemonStorageSystem.unk_08b2 > 13) - ePokemonStorageSystem.unk_08b2 = 0; - sub_8099C70(ePokemonStorageSystem.unk_08b2); - ePokemonStorageSystem.unk_0004 = 2; - break; - case 10: - PlaySE(SE_SELECT); - ePokemonStorageSystem.unk_08b2 = gPokemonStorage.currentBox - 1; - if (ePokemonStorageSystem.unk_08b2 < 0) - ePokemonStorageSystem.unk_08b2 = 13; - sub_8099C70(ePokemonStorageSystem.unk_08b2); - ePokemonStorageSystem.unk_0004 = 2; - break; - case 11: - if (!sub_809BE80()) - { - if (ItemIsMail(ePokemonStorageSystem.unk_11f2)) - { - ePokemonStorageSystem.unk_0004 = 5; - } - else - { - PlaySE(SE_SELECT); - SetPSSCallback(sub_809746C); - } - } - else - { - ePokemonStorageSystem.unk_0004 = 4; - } - break; - case 13: - if (sub_809BE80()) - { - ePokemonStorageSystem.unk_0004 = 4; - } - else - { - PlaySE(SE_SELECT); - SetPSSCallback(sub_80972A8); - } - break; - case 14: - if (!sub_809BEBC()) - { - ePokemonStorageSystem.unk_0004 = 4; - } - else - { - PlaySE(SE_SELECT); - SetPSSCallback(c3_0808DC50); - } - break; - case 12: - PlaySE(SE_SELECT); - SetPSSCallback(sub_8097390); - break; - case 15: - PlaySE(SE_SELECT); - SetPSSCallback(sub_80972FC); - break; - } - break; - case 1: - if (!sub_809AC00()) - { - if (sub_809BF48()) - sub_80986E8(); - else - sub_8098710(); - if (ePokemonStorageSystem.unk_11f6) - BoxSetMosaic(); - ePokemonStorageSystem.unk_0004 = 0; - } - break; - case 2: - if (!sub_8099D34()) - { - gPokemonStorage.currentBox = ePokemonStorageSystem.unk_08b2; - if (!gUnknown_0203847C && !sub_809BF20()) - { - sub_809B440(); - BoxSetMosaic(); - } - ePokemonStorageSystem.unk_0004 = 0; - } - break; - case 3: - if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) - { - sub_8098A5C(); - ePokemonStorageSystem.unk_0004 = 0; - } - break; - case 4: - PlaySE(SE_HAZURE); - PrintStorageActionText(PC_TEXT_LAST_POKE); - ePokemonStorageSystem.unk_0004 = 6; - break; - case 5: - PlaySE(SE_HAZURE); - PrintStorageActionText(PC_TEXT_PLEASE_REMOVE_MAIL); - ePokemonStorageSystem.unk_0004 = 6; - break; - case 6: - if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) - { - sub_8098A5C(); - SetPSSCallback(sub_8096C84); - } - break; - } -} - -void sub_8096FC8(void) -{ - switch (ePokemonStorageSystem.unk_0004) - { - case 0: - sub_809880C(); - ePokemonStorageSystem.unk_0004++; - break; - case 1: - if (!sub_8098830()) - SetPSSCallback(sub_8096C84); - break; - } -} - -void sub_8097004(void) -{ - switch (ePokemonStorageSystem.unk_0004) - { - case 0: - PlaySE(SE_SELECT); - add_to_c3_somehow(); - ePokemonStorageSystem.unk_0004++; - break; - case 1: - if (!sub_80985CC()) - { - sub_809B0C0(sub_809B0F4()); - ePokemonStorageSystem.unk_0004++; - } - break; - case 2: - if (!sub_809AC00()) - { - if (ePokemonStorageSystem.unk_11f6) - BoxSetMosaic(); - SetPSSCallback(sub_8096C84); - } - break; - } -} - -void sub_8097078(void) -{ - switch (ePokemonStorageSystem.unk_0004) - { - case 0: - PrintStorageActionText(PC_TEXT_IS_SELECTED); - sub_809CE84(); - ePokemonStorageSystem.unk_0004 = 1; - break; - case 1: - switch (sub_809CF30()) - { - case -1: - case 0: - sub_8098A5C(); - SetPSSCallback(sub_8096C84); - break; - case 3: - if (sub_809BE80()) - { - ePokemonStorageSystem.unk_0004 = 2; - } - else - { - PlaySE(SE_SELECT); - sub_8098A5C(); - SetPSSCallback(sub_80972A8); - } - break; - case 5: - PlaySE(SE_SELECT); - sub_8098A5C(); - SetPSSCallback(sub_80972FC); - break; - case 4: - if (!sub_809BEBC()) - { - ePokemonStorageSystem.unk_0004 = 2; - } - else - { - PlaySE(SE_SELECT); - sub_8098A5C(); - SetPSSCallback(c3_0808DC50); - } - break; - case 2: - PlaySE(SE_SELECT); - sub_8098A5C(); - SetPSSCallback(sub_8097390); - break; - case 1: - if (sub_809BE80()) - { - ePokemonStorageSystem.unk_0004 = 2; - } - else if (ItemIsMail(ePokemonStorageSystem.unk_11f2)) - { - ePokemonStorageSystem.unk_0004 = 3; - } - else - { - PlaySE(SE_SELECT); - sub_8098A5C(); - SetPSSCallback(sub_809746C); - } - break; - case 7: - if (sub_809BE80()) - { - ePokemonStorageSystem.unk_0004 = 2; - } - else if (ePokemonStorageSystem.unk_11f9) - { - ePokemonStorageSystem.unk_0004 = 4; - } - else if (ItemIsMail(ePokemonStorageSystem.unk_11f2)) - { - ePokemonStorageSystem.unk_0004 = 3; - } - else - { - PlaySE(SE_SELECT); - SetPSSCallback(sub_8097594); - } - break; - case 6: - PlaySE(SE_SELECT); - SetPSSCallback(sub_8097788); - break; - case 8: - PlaySE(SE_SELECT); - SetPSSCallback(sub_80977E4); - break; - } - break; - case 2: - PlaySE(SE_HAZURE); - PrintStorageActionText(PC_TEXT_LAST_POKE); - ePokemonStorageSystem.unk_0004 = 5; - break; - case 4: - PlaySE(SE_HAZURE); - PrintStorageActionText(PC_TEXT_CANT_RELEASE_EGG); - ePokemonStorageSystem.unk_0004 = 5; - break; - case 3: - PlaySE(SE_HAZURE); - PrintStorageActionText(PC_TEXT_PLEASE_REMOVE_MAIL); - ePokemonStorageSystem.unk_0004 = 5; - break; - case 5: - if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) - { - sub_8098A5C(); - SetPSSCallback(sub_8096C84); - } - break; - } -} - -void sub_80972A8(void) -{ - switch (ePokemonStorageSystem.unk_0004) - { - case 0: - sub_809B100(0); - ePokemonStorageSystem.unk_0004++; - break; - case 1: - if (!sub_809B130()) - { - if (gUnknown_0203847C) - SetPSSCallback(sub_8097858); - else - SetPSSCallback(sub_8096C84); - } - break; - } -} - -void sub_80972FC(void) -{ - switch (ePokemonStorageSystem.unk_0004) - { - case 0: - sub_809B100(1); - ePokemonStorageSystem.unk_0004++; - break; - case 1: - if (!sub_809B130()) - { - if (gUnknown_0203847C) - SetPSSCallback(sub_8097858); - else - SetPSSCallback(sub_8096C84); - } - break; - } -} - -void c3_0808DC50(void) -{ - switch (ePokemonStorageSystem.unk_0004) - { - case 0: - sub_809B100(2); - ePokemonStorageSystem.unk_0004++; - break; - case 1: - if (!sub_809B130()) - { - BoxSetMosaic(); - SetPSSCallback(sub_8096C84); - } - break; - } -} - -void sub_8097390(void) -{ - switch (ePokemonStorageSystem.unk_0004) - { - case 0: - if (CalculatePlayerPartyCount() == 6) - { - PrintStorageActionText(PC_TEXT_PARTY_FULL); - ePokemonStorageSystem.unk_0004 = 1; - } - else - { - sub_809B0E0(); - sub_809B100(0); - ePokemonStorageSystem.unk_0004 = 2; - } - break; - case 1: - if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) - { - sub_8098A5C(); - SetPSSCallback(sub_8096C84); - } - break; - case 2: - if (!sub_809B130()) - { - sub_809880C(); - ePokemonStorageSystem.unk_0004++; - } - break; - case 3: - if (!sub_8098830()) - { - sub_809B100(1); - ePokemonStorageSystem.unk_0004++; - } - break; - case 4: - if (!sub_809B130()) - { - sub_80987DC(); - ePokemonStorageSystem.unk_0004++; - } - break; - case 5: - SetPSSCallback(sub_8097004); - break; - } -} - -void sub_809746C(void) -{ - u8 r4; - - switch (ePokemonStorageSystem.unk_0004) - { - case 0: - PrintStorageActionText(PC_TEXT_DEPOSIT_IN_WHICH_BOX); - sub_8096264(&ePokemonStorageSystem.unk_2370, 0x0007, 0xdaca, 3); - sub_809634C(gUnknown_0203847E); - ePokemonStorageSystem.unk_0004++; - break; - case 1: - r4 = sub_8096368(); - if (r4 == 200); - else if (r4 == 201) - { - sub_8098A5C(); - sub_809635C(); - sub_8096310(); - SetPSSCallback(sub_8096C84); - } - else - { - if (sub_809B62C(r4)) - { - sub_8098A5C(); - sub_809635C(); - sub_8096310(); - ePokemonStorageSystem.unk_0004 = 2; - } - else - { - PrintStorageActionText(PC_TEXT_BOX_IS_FULL); - ePokemonStorageSystem.unk_0004 = 4; - } - gUnknown_0203847E = r4; - } - break; - case 2: - party_compaction(); - sub_8099310(); - ePokemonStorageSystem.unk_0004++; - break; - case 3: - if (!sub_8099374()) - { - sub_809B6BC(); - BoxSetMosaic(); - sub_80987DC(); - SetPSSCallback(sub_8096C84); - } - break; - case 4: - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - { - PrintStorageActionText(PC_TEXT_DEPOSIT_IN_WHICH_BOX); - ePokemonStorageSystem.unk_0004 = 1; - } - break; - } -} - -void sub_8097594(void) -{ - switch (ePokemonStorageSystem.unk_0004) - { - case 0: - PrintStorageActionText(PC_TEXT_RELEASE_POKE); - sub_8098A38(1); - ePokemonStorageSystem.unk_0004++; - // fallthrough - case 1: - switch (ProcessMenuInputNoWrap()) - { - case -1: - case 1: - sub_8098A5C(); - SetPSSCallback(sub_8096C84); - break; - case 0: - sub_8098A5C(); - sub_809B7D4(); - sub_809B6DC(); - ePokemonStorageSystem.unk_0004++; - break; - } - break; - case 2: - sub_809B960(); - if (!sub_809B734()) - { - while (1) - { - s8 r0 = sub_809B960(); - if (r0 == 1) - { - ePokemonStorageSystem.unk_0004++; - break; - } - if (r0 == 0) - { - ePokemonStorageSystem.unk_0004 = 8; - break; - } - } - } - break; - case 3: - sub_809B760(); - sub_809801C(); - PrintStorageActionText(PC_TEXT_WAS_RELEASED); - ePokemonStorageSystem.unk_0004++; - break; - case 4: - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - { - PrintStorageActionText(PC_TEXT_BYE_BYE); - ePokemonStorageSystem.unk_0004++; - } - break; - case 5: - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - { - sub_8098A5C(); - if (gUnknown_0203847C) - { - party_compaction(); - sub_8099310(); - ePokemonStorageSystem.unk_0004++; - } - else - { - ePokemonStorageSystem.unk_0004 = 7; - } - } - break; - case 6: - if (!sub_8099374()) - { - sub_809B440(); - BoxSetMosaic(); - sub_80987DC(); - ePokemonStorageSystem.unk_0004++; - } - break; - case 7: - SetPSSCallback(sub_8096C84); - break; - case 8: - PrintStorageActionText(PC_TEXT_WAS_RELEASED); - ePokemonStorageSystem.unk_0004++; - break; - case 9: - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - { - PrintStorageActionText(PC_TEXT_SURPRISE); - ePokemonStorageSystem.unk_0004++; - } - break; - case 10: - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - { - sub_8098A5C(); - sub_8099958(); - ePokemonStorageSystem.unk_0004++; - } - break; - case 11: - if (!sub_8099990()) - { - sub_809B7AC(); - PrintStorageActionText(PC_TEXT_CAME_BACK); - ePokemonStorageSystem.unk_0004++; - } - break; - case 12: - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - { - PrintStorageActionText(PC_TEXT_WORRIED); - ePokemonStorageSystem.unk_0004++; - } - break; - case 13: - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - { - sub_8098A5C(); - SetPSSCallback(sub_8096C84); - } - break; - } -} - -void sub_8097788(void) -{ - switch (ePokemonStorageSystem.unk_0004) - { - case 0: - sub_809BC18(); - BeginNormalPaletteFade(0xffffffff, 0, 0, 16, 0); - ePokemonStorageSystem.unk_0004++; - break; - case 1: - if (!UpdatePaletteFade()) - { - gUnknown_0203847F = 0; - ePokemonStorageSystem.unk_0006 = 0; - SetMainCallback2(sub_8096B5C); - } - break; - } -} - -void sub_80977E4(void) -{ - switch (ePokemonStorageSystem.unk_0004) - { - case 0: - PrintStorageActionText(PC_TEXT_MARK_POKE); - ePokemonStorageSystem.unk_12bc.markings = ePokemonStorageSystem.unk_11f7; - sub_80F7418(ePokemonStorageSystem.unk_11f7, 0xb0, 0x10); - ePokemonStorageSystem.unk_0004++; - break; - case 1: - if (!sub_80F7500()) - { - sub_80F7470(); - sub_8098A5C(); - sub_809BDD8(ePokemonStorageSystem.unk_12bc.markings); - sub_809801C(); - SetPSSCallback(sub_8096C84); - } - break; - } -} - -void sub_8097858(void) -{ - switch (ePokemonStorageSystem.unk_0004) - { - case 0: - party_compaction(); - sub_8099310(); - ePokemonStorageSystem.unk_0004++; - break; - case 1: - if (!sub_8099374()) - { - sub_80987DC(); - SetPSSCallback(sub_8096C84); - } - break; - } -} - -void sub_809789C(void) -{ - switch (ePokemonStorageSystem.unk_0004) - { - case 0: - PrintStorageActionText(PC_TEXT_WHAT_YOU_DO); - sub_809CE84(); - ePokemonStorageSystem.unk_0004++; - break; - case 1: - switch (sub_809CF30()) - { - case -1: - case 0: - sub_809A860(1); - sub_8098A5C(); - SetPSSCallback(sub_8096C84); - break; - case 11: - PlaySE(SE_SELECT); - SetPSSCallback(sub_8097B44); - break; - case 10: - PlaySE(SE_SELECT); - sub_8098A5C(); - SetPSSCallback(sub_8097974); - break; - case 9: - PlaySE(SE_SELECT); - sub_8098A5C(); - SetPSSCallback(sub_8097A64); - break; - } - break; - } -} - -void sub_8097974(void) -{ - switch (ePokemonStorageSystem.unk_0004) - { - case 0: - sub_8098A80(); - PrintStorageActionText(PC_TEXT_PICK_A_THEME); - ePokemonStorageSystem.unk_0004++; - break; - case 1: - ePokemonStorageSystem.unk_0d5e = sub_809CF30(); - switch (ePokemonStorageSystem.unk_0d5e) - { - case -1: - sub_809A860(1); - sub_8098A5C(); - SetPSSCallback(sub_8096C84); - break; - case 12 ... 15: - PlaySE(SE_SELECT); - ePokemonStorageSystem.unk_0d5e -= 12; - sub_8098AA8(ePokemonStorageSystem.unk_0d5e); - PrintStorageActionText(PC_TEXT_PICK_A_WALLPAPER); - ePokemonStorageSystem.unk_0004++; - break; - } - break; - case 2: - ePokemonStorageSystem.unk_0d60 = sub_809CF30(); - switch (ePokemonStorageSystem.unk_0d60) - { - case -1: - sub_8098A5C(); - ePokemonStorageSystem.unk_0004 = 0; - break; - case -2: - break; - default: - PlaySE(SE_SELECT); - sub_8098A5C(); - ePokemonStorageSystem.unk_0d60 -= 16; - sub_8099DCC(ePokemonStorageSystem.unk_0d60); - ePokemonStorageSystem.unk_0004++; - break; - } - break; - case 3: - if (!sub_8099E08()) - { - sub_809A860(1); - SetPSSCallback(sub_8096C84); - } - break; - } -} - -void sub_8097A64(void) -{ - switch (ePokemonStorageSystem.unk_0004) - { - case 0: - PrintStorageActionText(PC_TEXT_JUMP_TO_WHICH_BOX); - sub_8096264(&ePokemonStorageSystem.unk_2370, 0x0007, 0xdaca, 3); - sub_809634C(gPokemonStorage.currentBox); - ePokemonStorageSystem.unk_0004++; - break; - case 1: - ePokemonStorageSystem.unk_08b2 = sub_8096368(); - switch (ePokemonStorageSystem.unk_08b2) - { - case 200: - break; - default: - sub_8098A5C(); - sub_809635C(); - sub_8096310(); - if (ePokemonStorageSystem.unk_08b2 == 201 || ePokemonStorageSystem.unk_08b2 == gPokemonStorage.currentBox) - { - sub_809A860(1); - SetPSSCallback(sub_8096C84); - } - else - { - ePokemonStorageSystem.unk_0004++; - } - break; - } - break; - case 2: - sub_8099C70(ePokemonStorageSystem.unk_08b2); - ePokemonStorageSystem.unk_0004++; - break; - case 3: - if (!sub_8099D34()) - { - gPokemonStorage.currentBox = ePokemonStorageSystem.unk_08b2; - SetPSSCallback(sub_8096C84); - } - break; - } -} - -void sub_8097B44(void) -{ - switch (ePokemonStorageSystem.unk_0004) - { - case 0: - sub_809BB90(); - BeginNormalPaletteFade(0xffffffff, 0, 0, 16, 0); - ePokemonStorageSystem.unk_0004++; - break; - case 1: - if (!UpdatePaletteFade()) - { - gUnknown_0203847F = 1; - ePokemonStorageSystem.unk_0006 = 1; - SetMainCallback2(sub_8096B5C); - } - break; - } -} - -void sub_8097BA0(void) -{ - switch (ePokemonStorageSystem.unk_0004) - { - case 0: - if (sub_809BF20()) - { - PlaySE(SE_HAZURE); - PrintStorageActionText(PC_TEXT_HOLDING_POKE); - ePokemonStorageSystem.unk_0004 = 1; - } - else - { - PlaySE(SE_SELECT); - PrintStorageActionText(PC_TEXT_EXIT_BOX); - sub_8098A38(0); - ePokemonStorageSystem.unk_0004 = 2; - } - break; - case 1: - if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) - { - sub_8098A5C(); - SetPSSCallback(sub_8096C84); - } - break; - case 2: - switch (ProcessMenuInputNoWrap()) - { - case 1: - case -1: - sub_8098A5C(); - SetPSSCallback(sub_8096C84); - break; - case 0: - PlaySE(SE_PC_OFF); - sub_8098A5C(); - ePokemonStorageSystem.unk_0004++; - break; - } - break; - case 3: - ePokemonStorageSystem.unk_000c.tileTag = 0x000e; - ePokemonStorageSystem.unk_000c.paletteTag = 0xdad0; - ePokemonStorageSystem.unk_000c.unk04 = 20; - ePokemonStorageSystem.unk_000c.unk06 = 0; - sub_80C5E38(&ePokemonStorageSystem.unk_000c); - ePokemonStorageSystem.unk_0004++; - break; - case 4: - if (sub_80C5F98()) - { - gPlayerPartyCount = CalculatePlayerPartyCount(); - SetMainCallback2(sub_80961A8); - } - break; - } -} - -void sub_8097CC0(void) { - switch (ePokemonStorageSystem.unk_0004) { - case 0: - if (sub_809BF20()) { - PlaySE(SE_HAZURE); - PrintStorageActionText(PC_TEXT_HOLDING_POKE); - ePokemonStorageSystem.unk_0004 = 1; - } - else { - PlaySE(SE_SELECT); - PrintStorageActionText(PC_TEXT_CONTINUE_BOX); - sub_8098A38(0); - ePokemonStorageSystem.unk_0004 = 2; - } - break; - case 1: - if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) { - sub_8098A5C(); - SetPSSCallback(sub_8096C84); - } - break; - case 2: - switch (ProcessMenuInputNoWrap()) { - case 0: - sub_8098A5C(); - SetPSSCallback(sub_8096C84); - break; - case -1: - case 1: - PlaySE(SE_PC_OFF); - sub_8098A5C(); - ePokemonStorageSystem.unk_0004++; - break; - } - break; - case 3: - ePokemonStorageSystem.unk_000c.tileTag = 0x000e; - ePokemonStorageSystem.unk_000c.paletteTag = 0xdad0; - ePokemonStorageSystem.unk_000c.unk04 = 20; - ePokemonStorageSystem.unk_000c.unk06 = 0; - sub_80C5E38(&ePokemonStorageSystem.unk_000c); - ePokemonStorageSystem.unk_0004++; - break; - case 4: - if (sub_80C5F98()) { - gPlayerPartyCount = CalculatePlayerPartyCount(); - SetMainCallback2(sub_80961A8); - } - break; - } -} - -void sub_8097DE0(void) -{ - ePokemonStorageSystem.unk_0007 = 0; - ePokemonStorageSystem.unk_0008 = 0; - ePokemonStorageSystem.unk_000a = 0; - REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(3) | BGCNT_SCREENBASE(30); - DmaCopy16Defvars(3, gPokemonStorageScrollingBGTile, BG_SCREEN_ADDR(28), sizeof gPokemonStorageScrollingBGTile); - LZ77UnCompVram(gPokemonStorageScrollingBGTilemap, BG_SCREEN_ADDR(30)); - LoadPalette(gPokemonStorageScrollingBGPalette, 0xd0, 0x10); -} - -asm(".section .text.8098898"); - -void PrintStorageActionText(u8 index) { - u8 *ptr; - - MenuDrawTextWindow(10, 16, 29, 19); - - switch (gPCStorageActionTexts[index].format) - { - - case PC_TEXT_FMT_UNK_02: - ptr = StringCopy(ePokemonStorageSystem.unk_2694, gPCStorageActionTexts[index].text); - ptr = StringCopy(ptr, ePokemonStorageSystem.unk_11fa); - break; - - case PC_TEXT_FMT_UNK_05: - ptr = StringCopy(ePokemonStorageSystem.unk_2694, gPCStorageActionTexts[index].text); - ptr = StringCopy(ptr, ePokemonStorageSystem.unk_26e4); - break; - - case PC_TEXT_FMT_MON_NAME: - // {var} + " is selected." - ptr = StringCopy(ePokemonStorageSystem.unk_2694, ePokemonStorageSystem.unk_11fa); - ptr = StringCopy(ptr, gPCStorageActionTexts[index].text); - break; - - case PC_TEXT_FMT_MON_NAME_2: - // {var} + " was released." - ptr = StringCopy(ePokemonStorageSystem.unk_2694, ePokemonStorageSystem.unk_26e4); -#if ENGLISH - ptr = StringCopy(ptr, gPCStorageActionTexts[index].text); -#elif GERMAN - ptr = de_sub_8073174(ePokemonStorageSystem.unk_2694, gPCStorageActionTexts[index].text); -#endif - break; - - case PC_TEXT_FMT_UNK_03: - { - u8 *stringLength; - u8 *text; - - text = gPCStorageActionTexts[index].text; - stringLength = &text[StringLength(text)] + 1; - - ptr = StringCopy(ePokemonStorageSystem.unk_2694, gPCStorageActionTexts[index].text); - ptr = StringCopy(ptr, ePokemonStorageSystem.unk_11fa); - ptr = StringCopy(ptr, stringLength); - } - break; - - case PC_TEXT_FMT_MON_NAME_AFTER_EXCL_MARK: - // "Bye-bye, ".substr(0, -1) + {var} + "Bye-bye, !".substr(-1, 1) - { - u8 *stringLength; - u8 *text; - - text = gPCStorageActionTexts[index].text; - stringLength = &text[StringLength(text)] - 1; - - ptr = StringCopy(ePokemonStorageSystem.unk_2694, gPCStorageActionTexts[index].text); - ptr = StringCopy(ptr - 1, ePokemonStorageSystem.unk_26e4); - ptr = StringCopy(ptr, stringLength); - } - break; - - case PC_TEXT_FMT_NORMAL: - default: - ptr = StringCopy(ePokemonStorageSystem.unk_2694, gPCStorageActionTexts[index].text); - break; - } - - while (ptr < ePokemonStorageSystem.unk_26a6) - { - ptr[0] = CHAR_SPACE; - ptr++; - } - - ptr[0] = EOS; - MenuPrint(ePokemonStorageSystem.unk_2694, 11, 17); -} diff --git a/src/pokemon/pokemon_storage_system_2.c b/src/pokemon/pokemon_storage_system_2.c new file mode 100644 index 000000000..5c72d02e9 --- /dev/null +++ b/src/pokemon/pokemon_storage_system_2.c @@ -0,0 +1,1566 @@ + +// Includes +#include "global.h" +#include "constants/songs.h" +#include "sound.h" +#include "ewram.h" +#include "task.h" +#include "main.h" +#include "palette.h" +#include "menu.h" +#include "graphics.h" +#include "strings.h" +#include "string_util.h" +#include "pokemon_summary_screen.h" +#include "mail_data.h" +#include "naming_screen.h" +#include "pokemon_storage_system.h" + +// Static type declarations + +// Static RAM declarations + +EWRAM_DATA u8 gUnknown_0203847C = 0; +EWRAM_DATA u8 gUnknown_0203847D = 0; +EWRAM_DATA u8 gUnknown_0203847E = 0; +EWRAM_DATA u8 gUnknown_0203847F = 0; +EWRAM_DATA struct Pokemon gUnknown_02038480 = {}; +EWRAM_DATA u8 gUnknown_020384E4 = 0; +EWRAM_DATA u8 gUnknown_020384E5 = 0; +EWRAM_DATA u8 gUnknown_020384E6 = 0; +EWRAM_DATA u8 gUnknown_020384E7 = 0; +EWRAM_DATA u8 gUnknown_020384E8 = 0; +EWRAM_DATA u8 gUnknown_020384E9 = 0; +EWRAM_DATA u16 gUnknown_020384EA = 0; +EWRAM_DATA u32 gUnknown_020384EC = 0; + +// Static ROM declarations + +void sub_8096884(void); +void sub_8096AFC(void); +void sub_8096B38(void); +void SetPSSCallback(void (*func)(void)); +void sub_8096BF0(void); +void sub_8096C68(void); +void sub_8096C84(void); +void sub_8096FC8(void); +void sub_8097004(void); +void sub_8097078(void); +void sub_80972A8(void); +void sub_80972FC(void); +void c3_0808DC50(void); +void sub_8097390(void); +void sub_809746C(void); +void sub_8097594(void); +void sub_8097788(void); +void sub_80977E4(void); +void sub_8097858(void); +void sub_809789C(void); +void sub_8097974(void); +void sub_8097A64(void); +void sub_8097B44(void); +void sub_8097BA0(void); +void sub_8097CC0(void); +void sub_8097DE0(void); +void sub_8097E44(void); +void sub_8097E70(void); +void sub_8097F58(void); +void sub_8097FB8(void); +void BoxSetMosaic(void); +void sub_809801C(void); +void sub_80980D4(void); +void sub_8098400(void); +void add_to_c3_somehow(void); +bool8 sub_80985CC(void); +void sub_80986E8(void); +void sub_8098710(void); +void sub_8098734(void); +void sub_80987DC(void); +void sub_809880C(void); +bool8 sub_8098830(void); +void PrintStorageActionText(u8 index); +void sub_8098A38(u8); +void sub_8098A5C(void); +void sub_8098A80(void); +void sub_8098AA8(u8 a0); +void sub_8098B48(void); +void sub_8099310(void); +bool8 sub_8099374(void); +void sub_8099958(void); +bool8 sub_8099990(void); +void sub_809BB90(void); +void sub_8099BF8(u8 a0); +void sub_8099C70(u8 whichBox); +bool8 sub_8099D34(void); +void sub_8099DCC(u8 a0); +bool8 sub_8099E08(void); +void sub_809A860(u8 a0); +void sub_809AA24(void); +void sub_809AA98(void); +bool8 sub_809AC00(void); +void sub_809B0C0(u8 a0); +void sub_809B0D4(void); +void sub_809B0E0(void); +u8 sub_809B0F4(void); +void sub_809B100(u8 a0); +bool8 sub_809B130(void); +void sub_809B440(void); +bool8 sub_809B62C(u8); +void sub_809B6BC(void); +void sub_809B6DC(void); +bool8 sub_809B734(void); +void sub_809B760(void); +void sub_809B7AC(void); +void sub_809B7D4(void); +s8 sub_809B960(void); +void sub_809BBC0(void); +void sub_809BC18(void); +void sub_809BD14(void); +void sub_809BDD8(u8 markings); +bool8 sub_809BE80(void); +bool8 sub_809BEBC(void); +bool8 sub_809BF20(void); +bool8 sub_809BF48(void); +u8 sub_809CA40(void); +void sub_809CE84(void); +s16 sub_809CF30(void); +void sub_809CFDC(struct UnkStruct_2000020 *a0, struct UnkStruct_2000020 *a1, u8 a2); +void sub_809CFF0(void); +void sub_809D034(void *dest, u16 dLeft, u16 dTop, const void *src, u16 sLeft, u16 sTop, u16 width, u16 height); + +// .rodata + +const u16 gPokemonStorageScrollingBGPalette[] = INCBIN_U16("graphics/pokemon_storage/scrolling_bg.gbapal"); + +const u16 gPokemonStorageScrollingBGTile[] = INCBIN_U16("graphics/pokemon_storage/scrolling_bg.4bpp"); + +const u8 gPokemonStorageScrollingBGTilemap[] = INCBIN_U8("graphics/pokemon_storage/scrolling_bg_map.bin.lz"); + +const u16 sUnknownTilemap[] = { + 0x1281, + 0x1282, + 0x1283, + 0x1284, + 0x1285, + 0x1286, + 0x1287, + 0x1288, + 0x128C, + 0x128D, + 0x128E, + 0x128F, + 0x1290, + 0x1291, + 0x1292, + 0x1293, + 0x0281, + 0x0282, + 0x0283, + 0x0284, + 0x0285, + 0x0286, + 0x0287, + 0x0288, + 0x028C, + 0x028D, + 0x028E, + 0x028F, + 0x0290, + 0x0291, + 0x0292, + 0x0293, + 0x12AD, + 0x12AE, + 0x12A8, + 0x12A8 +}; + +const u16 WaveformPalette[] = INCBIN_U16("graphics/pokemon_storage/waveform.gbapal"); + +const u8 WaveformTiles[] = INCBIN_U8("graphics/pokemon_storage/waveform.4bpp"); + +const u16 gUnknown_083B6D74[] = INCBIN_U16("graphics/pokemon_storage/83B6D74.gbapal"); + +const u16 gUnknown_083B6D94[] = INCBIN_U16("graphics/pokemon_storage/83B6D94.gbapal"); + +struct PokemonStorageSystemData *const gPokemonStorageSystemPtr = &ePokemonStorageSystem; + +u8 *const gUnknown_083B6DB8 = gTileBuffer; + +const struct SpritePalette gWaveformSpritePalette = { + WaveformPalette, 0xdacd +}; + +const struct SpriteSheet gWaveformSpriteSheet = { + WaveformTiles, 0x1c0, 0x0005 +}; + +const struct SpriteSheet gUnknown_083B6DCC = { + ePokemonStorageSystem.unk_2784, 0x800, 0x0002 +}; + +const struct SpritePalette gUnknown_083B6DD4 = { + ePokemonStorageSystem.unk_2704, 0xdac7 +}; + +const struct OamData gOamData_83B6EAC; + +const struct SpriteTemplate gSpriteTemplate_83B6DDC = { + 0x0002, 0xdac7, &gOamData_83B6EAC, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +const struct StorageAction gPCStorageActionTexts[] = { + {PCText_ExitBox, 0}, + {PCText_WhatYouDo, 0}, + {PCText_PickATheme, 0}, + {PCText_PickAWallpaper, 0}, + {PCText_IsSelected, 1}, + {PCText_JumpToWhichBox, 0}, + {PCText_DepositInWhichBox, 0}, + {PCText_WasDeposited, 1}, + {PCText_BoxIsFull, 0}, + {PCText_ReleasePoke, 0}, + {PCText_WasReleased, 4}, + {PCText_ByeBye, 6}, + {PCText_MarkPoke, 0}, + {PCText_LastPoke, 0}, + {PCText_PartyFull, 0}, + {PCText_HoldingPoke, 0}, + {PCText_WhichOneWillTake, 0}, + {PCText_CantReleaseEgg, 0}, + {PCText_ContinueBox, 0}, + {PCText_CameBack, 1}, + {PCText_Worried, 0}, + {PCText_Surprise, 0}, + {PCText_PleaseRemoveMail, 0} +}; + +// .text + + +void task_intro_29(u8 whichMenu) +{ + gUnknown_0203847D = whichMenu; + gPokemonStorageSystemPtr->unk_0005 = whichMenu; + SetMainCallback2(sub_8096884); +} + +void sub_80967DC(void) +{ + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + REG_BG2VOFS = 0; + REG_BG2HOFS = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; +} + +void sub_8096804(void) +{ + ResetPaletteFade(); + ResetSpriteData(); + FreeSpriteTileRanges(); + FreeAllSpritePalettes(); + ResetTasks(); + gReservedSpriteTileCount = 0x280; + sub_809CFDC(gPokemonStorageSystemPtr->unk_0020, gPokemonStorageSystemPtr->unk_0020 + 1, 8); + gKeyRepeatStartDelay = 20; +} + +void sub_8096848(void) +{ + sub_809B0D4(); + gUnknown_0203847C = (gPokemonStorageSystemPtr->unk_0005 == 1 ? 1 : 0); + gUnknown_0203847E = 0; +} + +void sub_8096874(void) +{ + REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON; +} + +void sub_8096884(void) +{ + switch (gMain.state) + { + case 0: + SetVBlankCallback(NULL); + REG_DISPCNT = 0; + sub_8096804(); + gMain.state++; + break; + case 1: + SetUpWindowConfig(&gWindowConfig_81E6D00); + gMain.state++; + break; + case 2: + InitMenuWindow(&gWindowConfig_81E6D00); + MenuZeroFillScreen(); + gMain.state++; + break; + case 3: + sub_80967DC(); + sub_8096848(); + gMain.state++; + break; + case 4: + sub_8098B48(); + sub_809AA24(); + gMain.state++; + break; + case 5: + sub_8097DE0(); + gMain.state++; + break; + case 6: + sub_8097E70(); + gMain.state++; + break; + case 7: + sub_8098400(); + gMain.state++; + break; + case 8: + sub_8099BF8(gPokemonStorage.currentBox); + gPokemonStorageSystemPtr->unk_12bc.baseTileTag = 0x000a; + gPokemonStorageSystemPtr->unk_12bc.basePaletteTag = 0xdacb; + sub_80F727C(&gPokemonStorageSystemPtr->unk_12bc); + sub_80F7404(); + gMain.state++; + break; + case 9: + sub_8096874(); + SetPSSCallback(sub_8096BF0); + SetMainCallback2(sub_8096B38); + SetVBlankCallback(sub_8096AFC); + gMain.state++; + break; + } +} + +void sub_80969A0(void) +{ + switch (gMain.state) + { + case 0: + SetVBlankCallback(NULL); + REG_DISPCNT = 0x0000; + gPokemonStorageSystemPtr->unk_0005 = gUnknown_0203847D; + sub_8096804(); + if (gUnknown_0203847F == 1) + sub_809BBC0(); + if (gUnknown_0203847F == 0) + sub_809BD14(); + gMain.state++; + break; + case 1: + SetUpWindowConfig(&gWindowConfig_81E6D00); + gMain.state++; + break; + case 2: + InitMenuWindow(&gWindowConfig_81E6D00); + MenuZeroFillScreen(); + gMain.state++; + break; + case 3: + sub_80967DC(); + gMain.state++; + break; + case 4: + sub_8098B48(); + sub_809AA98(); + gMain.state++; + break; + case 5: + sub_8097DE0(); + gMain.state++; + break; + case 6: + sub_8097E70(); + gMain.state++; + break; + case 7: + sub_8098400(); + gMain.state++; + break; + case 8: + sub_8099BF8(gPokemonStorage.currentBox); + gPokemonStorageSystemPtr->unk_12bc.baseTileTag = 0x000a; + gPokemonStorageSystemPtr->unk_12bc.basePaletteTag = 0xdacb; + sub_80F727C(&gPokemonStorageSystemPtr->unk_12bc); + sub_80F7404(); + gMain.state++; + break; + case 9: + BeginNormalPaletteFade(0xffffffff, 0, 16, 0, 0); + SetVBlankCallback(sub_8096AFC); + gMain.state++; + break; + case 10: + sub_8096874(); + SetPSSCallback(sub_8096C68); + SetMainCallback2(sub_8096B38); + gMain.state++; + break; + } +} + +void sub_8096AFC(void) +{ + REG_BG2HOFS = gPokemonStorageSystemPtr->unk_08b4; + REG_BG3HOFS = gPokemonStorageSystemPtr->unk_000a; + REG_BG3VOFS = gPokemonStorageSystemPtr->unk_0008; + LoadOam(); + ProcessSpriteCopyRequests(); + sub_809CFF0(); + TransferPlttBuffer(); +} + +void sub_8096B38(void) +{ + gPokemonStorageSystemPtr->unk_0000(); + sub_8097E44(); + sub_8098734(); + AnimateSprites(); + BuildOamBuffer(); +} + +void sub_8096B5C(void) +{ + switch (gPokemonStorageSystemPtr->unk_0006) + { + case 0: + ShowPokemonSummaryScreen(gPokemonStorageSystemPtr->unk_2690, gPokemonStorageSystemPtr->unk_268d, gPokemonStorageSystemPtr->unk_268c, sub_80969A0, gPokemonStorageSystemPtr->unk_268e); + break; + case 1: + DoNamingScreen(1, gPokemonStorage.boxNames[gPokemonStorage.currentBox], 0, 0, 0, sub_80969A0); + break; + } +} + +void SetPSSCallback(void (*func)(void)) +{ + gPokemonStorageSystemPtr->unk_0000 = func; + gPokemonStorageSystemPtr->unk_0004 = 0; +} + +void sub_8096BF0(void) +{ + switch (gPokemonStorageSystemPtr->unk_0004) + { + case 0: + BlendPalettes(0xffffffff, 16, 0); + gPokemonStorageSystemPtr->unk_0004++; + break; + case 1: + PlaySE(SE_PC_LOGON); + gPokemonStorageSystemPtr->unk_000c.tileTag = 14; + gPokemonStorageSystemPtr->unk_000c.paletteTag = 0xdad0; + gPokemonStorageSystemPtr->unk_000c.unk04 = 0; + gPokemonStorageSystemPtr->unk_000c.unk06 = 0; + sub_80C5CD4(&gPokemonStorageSystemPtr->unk_000c); + BlendPalettes(0xffffffff, 0, 0); + gPokemonStorageSystemPtr->unk_0004++; + break; + case 2: + if (sub_80C5DCC()) + SetPSSCallback(sub_8096C84); + break; + } +} + +void sub_8096C68(void) +{ + if (!UpdatePaletteFade()) + SetPSSCallback(sub_8096C84); +} + +void sub_8096C84(void) +{ + switch (gPokemonStorageSystemPtr->unk_0004) + { + case 0: + switch (sub_809CA40()) + { + case 1: + PlaySE(SE_SELECT); + gPokemonStorageSystemPtr->unk_0004 = 1; + break; + case 5: + if (gPokemonStorageSystemPtr->unk_0005 != 2) + { + PrintStorageActionText(PC_TEXT_WHICH_ONE_WILL_TAKE); + gPokemonStorageSystemPtr->unk_0004 = 3; + } + else + { + sub_809B0D4(); + SetPSSCallback(sub_8096FC8); + } + break; + case 6: + if (gPokemonStorageSystemPtr->unk_0005 == 2) + { + if (sub_809BF20() && ItemIsMail(gPokemonStorageSystemPtr->unk_11f2)) + { + gPokemonStorageSystemPtr->unk_0004 = 5; + } + else + { + SetPSSCallback(sub_8097004); + } + } + break; + case 4: + SetPSSCallback(sub_8097BA0); + break; + case 16: + SetPSSCallback(sub_8097CC0); + break; + case 7: + PlaySE(SE_SELECT); + SetPSSCallback(sub_809789C); + break; + case 8: + PlaySE(SE_SELECT); + SetPSSCallback(sub_8097078); + break; + case 9: + PlaySE(SE_SELECT); + gPokemonStorageSystemPtr->unk_08b2 = gPokemonStorage.currentBox + 1; + if (gPokemonStorageSystemPtr->unk_08b2 > 13) + gPokemonStorageSystemPtr->unk_08b2 = 0; + sub_8099C70(gPokemonStorageSystemPtr->unk_08b2); + gPokemonStorageSystemPtr->unk_0004 = 2; + break; + case 10: + PlaySE(SE_SELECT); + gPokemonStorageSystemPtr->unk_08b2 = gPokemonStorage.currentBox - 1; + if (gPokemonStorageSystemPtr->unk_08b2 < 0) + gPokemonStorageSystemPtr->unk_08b2 = 13; + sub_8099C70(gPokemonStorageSystemPtr->unk_08b2); + gPokemonStorageSystemPtr->unk_0004 = 2; + break; + case 11: + if (!sub_809BE80()) + { + if (ItemIsMail(gPokemonStorageSystemPtr->unk_11f2)) + { + gPokemonStorageSystemPtr->unk_0004 = 5; + } + else + { + PlaySE(SE_SELECT); + SetPSSCallback(sub_809746C); + } + } + else + { + gPokemonStorageSystemPtr->unk_0004 = 4; + } + break; + case 13: + if (sub_809BE80()) + { + gPokemonStorageSystemPtr->unk_0004 = 4; + } + else + { + PlaySE(SE_SELECT); + SetPSSCallback(sub_80972A8); + } + break; + case 14: + if (!sub_809BEBC()) + { + gPokemonStorageSystemPtr->unk_0004 = 4; + } + else + { + PlaySE(SE_SELECT); + SetPSSCallback(c3_0808DC50); + } + break; + case 12: + PlaySE(SE_SELECT); + SetPSSCallback(sub_8097390); + break; + case 15: + PlaySE(SE_SELECT); + SetPSSCallback(sub_80972FC); + break; + } + break; + case 1: + if (!sub_809AC00()) + { + if (sub_809BF48()) + sub_80986E8(); + else + sub_8098710(); + if (gPokemonStorageSystemPtr->unk_11f6) + BoxSetMosaic(); + gPokemonStorageSystemPtr->unk_0004 = 0; + } + break; + case 2: + if (!sub_8099D34()) + { + gPokemonStorage.currentBox = gPokemonStorageSystemPtr->unk_08b2; + if (!gUnknown_0203847C && !sub_809BF20()) + { + sub_809B440(); + BoxSetMosaic(); + } + gPokemonStorageSystemPtr->unk_0004 = 0; + } + break; + case 3: + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + { + sub_8098A5C(); + gPokemonStorageSystemPtr->unk_0004 = 0; + } + break; + case 4: + PlaySE(SE_HAZURE); + PrintStorageActionText(PC_TEXT_LAST_POKE); + gPokemonStorageSystemPtr->unk_0004 = 6; + break; + case 5: + PlaySE(SE_HAZURE); + PrintStorageActionText(PC_TEXT_PLEASE_REMOVE_MAIL); + gPokemonStorageSystemPtr->unk_0004 = 6; + break; + case 6: + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + { + sub_8098A5C(); + SetPSSCallback(sub_8096C84); + } + break; + } +} + +void sub_8096FC8(void) +{ + switch (gPokemonStorageSystemPtr->unk_0004) + { + case 0: + sub_809880C(); + gPokemonStorageSystemPtr->unk_0004++; + break; + case 1: + if (!sub_8098830()) + SetPSSCallback(sub_8096C84); + break; + } +} + +void sub_8097004(void) +{ + switch (gPokemonStorageSystemPtr->unk_0004) + { + case 0: + PlaySE(SE_SELECT); + add_to_c3_somehow(); + gPokemonStorageSystemPtr->unk_0004++; + break; + case 1: + if (!sub_80985CC()) + { + sub_809B0C0(sub_809B0F4()); + gPokemonStorageSystemPtr->unk_0004++; + } + break; + case 2: + if (!sub_809AC00()) + { + if (gPokemonStorageSystemPtr->unk_11f6) + BoxSetMosaic(); + SetPSSCallback(sub_8096C84); + } + break; + } +} + +void sub_8097078(void) +{ + switch (gPokemonStorageSystemPtr->unk_0004) + { + case 0: + PrintStorageActionText(PC_TEXT_IS_SELECTED); + sub_809CE84(); + gPokemonStorageSystemPtr->unk_0004 = 1; + break; + case 1: + switch (sub_809CF30()) + { + case -1: + case 0: + sub_8098A5C(); + SetPSSCallback(sub_8096C84); + break; + case 3: + if (sub_809BE80()) + { + gPokemonStorageSystemPtr->unk_0004 = 2; + } + else + { + PlaySE(SE_SELECT); + sub_8098A5C(); + SetPSSCallback(sub_80972A8); + } + break; + case 5: + PlaySE(SE_SELECT); + sub_8098A5C(); + SetPSSCallback(sub_80972FC); + break; + case 4: + if (!sub_809BEBC()) + { + gPokemonStorageSystemPtr->unk_0004 = 2; + } + else + { + PlaySE(SE_SELECT); + sub_8098A5C(); + SetPSSCallback(c3_0808DC50); + } + break; + case 2: + PlaySE(SE_SELECT); + sub_8098A5C(); + SetPSSCallback(sub_8097390); + break; + case 1: + if (sub_809BE80()) + { + gPokemonStorageSystemPtr->unk_0004 = 2; + } + else if (ItemIsMail(gPokemonStorageSystemPtr->unk_11f2)) + { + gPokemonStorageSystemPtr->unk_0004 = 3; + } + else + { + PlaySE(SE_SELECT); + sub_8098A5C(); + SetPSSCallback(sub_809746C); + } + break; + case 7: + if (sub_809BE80()) + { + gPokemonStorageSystemPtr->unk_0004 = 2; + } + else if (gPokemonStorageSystemPtr->unk_11f9) + { + gPokemonStorageSystemPtr->unk_0004 = 4; + } + else if (ItemIsMail(gPokemonStorageSystemPtr->unk_11f2)) + { + gPokemonStorageSystemPtr->unk_0004 = 3; + } + else + { + PlaySE(SE_SELECT); + SetPSSCallback(sub_8097594); + } + break; + case 6: + PlaySE(SE_SELECT); + SetPSSCallback(sub_8097788); + break; + case 8: + PlaySE(SE_SELECT); + SetPSSCallback(sub_80977E4); + break; + } + break; + case 2: + PlaySE(SE_HAZURE); + PrintStorageActionText(PC_TEXT_LAST_POKE); + gPokemonStorageSystemPtr->unk_0004 = 5; + break; + case 4: + PlaySE(SE_HAZURE); + PrintStorageActionText(PC_TEXT_CANT_RELEASE_EGG); + gPokemonStorageSystemPtr->unk_0004 = 5; + break; + case 3: + PlaySE(SE_HAZURE); + PrintStorageActionText(PC_TEXT_PLEASE_REMOVE_MAIL); + gPokemonStorageSystemPtr->unk_0004 = 5; + break; + case 5: + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + { + sub_8098A5C(); + SetPSSCallback(sub_8096C84); + } + break; + } +} + +void sub_80972A8(void) +{ + switch (gPokemonStorageSystemPtr->unk_0004) + { + case 0: + sub_809B100(0); + gPokemonStorageSystemPtr->unk_0004++; + break; + case 1: + if (!sub_809B130()) + { + if (gUnknown_0203847C) + SetPSSCallback(sub_8097858); + else + SetPSSCallback(sub_8096C84); + } + break; + } +} + +void sub_80972FC(void) +{ + switch (gPokemonStorageSystemPtr->unk_0004) + { + case 0: + sub_809B100(1); + gPokemonStorageSystemPtr->unk_0004++; + break; + case 1: + if (!sub_809B130()) + { + if (gUnknown_0203847C) + SetPSSCallback(sub_8097858); + else + SetPSSCallback(sub_8096C84); + } + break; + } +} + +void c3_0808DC50(void) +{ + switch (gPokemonStorageSystemPtr->unk_0004) + { + case 0: + sub_809B100(2); + gPokemonStorageSystemPtr->unk_0004++; + break; + case 1: + if (!sub_809B130()) + { + BoxSetMosaic(); + SetPSSCallback(sub_8096C84); + } + break; + } +} + +void sub_8097390(void) +{ + switch (gPokemonStorageSystemPtr->unk_0004) + { + case 0: + if (CalculatePlayerPartyCount() == 6) + { + PrintStorageActionText(PC_TEXT_PARTY_FULL); + gPokemonStorageSystemPtr->unk_0004 = 1; + } + else + { + sub_809B0E0(); + sub_809B100(0); + gPokemonStorageSystemPtr->unk_0004 = 2; + } + break; + case 1: + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + { + sub_8098A5C(); + SetPSSCallback(sub_8096C84); + } + break; + case 2: + if (!sub_809B130()) + { + sub_809880C(); + gPokemonStorageSystemPtr->unk_0004++; + } + break; + case 3: + if (!sub_8098830()) + { + sub_809B100(1); + gPokemonStorageSystemPtr->unk_0004++; + } + break; + case 4: + if (!sub_809B130()) + { + sub_80987DC(); + gPokemonStorageSystemPtr->unk_0004++; + } + break; + case 5: + SetPSSCallback(sub_8097004); + break; + } +} + +void sub_809746C(void) +{ + u8 r4; + + switch (gPokemonStorageSystemPtr->unk_0004) + { + case 0: + PrintStorageActionText(PC_TEXT_DEPOSIT_IN_WHICH_BOX); + sub_8096264(&gPokemonStorageSystemPtr->unk_2370, 0x0007, 0xdaca, 3); + sub_809634C(gUnknown_0203847E); + gPokemonStorageSystemPtr->unk_0004++; + break; + case 1: + r4 = sub_8096368(); + if (r4 == 200); + else if (r4 == 201) + { + sub_8098A5C(); + sub_809635C(); + sub_8096310(); + SetPSSCallback(sub_8096C84); + } + else + { + if (sub_809B62C(r4)) + { + sub_8098A5C(); + sub_809635C(); + sub_8096310(); + gPokemonStorageSystemPtr->unk_0004 = 2; + } + else + { + PrintStorageActionText(PC_TEXT_BOX_IS_FULL); + gPokemonStorageSystemPtr->unk_0004 = 4; + } + gUnknown_0203847E = r4; + } + break; + case 2: + party_compaction(); + sub_8099310(); + gPokemonStorageSystemPtr->unk_0004++; + break; + case 3: + if (!sub_8099374()) + { + sub_809B6BC(); + BoxSetMosaic(); + sub_80987DC(); + SetPSSCallback(sub_8096C84); + } + break; + case 4: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + PrintStorageActionText(PC_TEXT_DEPOSIT_IN_WHICH_BOX); + gPokemonStorageSystemPtr->unk_0004 = 1; + } + break; + } +} + +void sub_8097594(void) +{ + switch (gPokemonStorageSystemPtr->unk_0004) + { + case 0: + PrintStorageActionText(PC_TEXT_RELEASE_POKE); + sub_8098A38(1); + gPokemonStorageSystemPtr->unk_0004++; + // fallthrough + case 1: + switch (ProcessMenuInputNoWrap()) + { + case -1: + case 1: + sub_8098A5C(); + SetPSSCallback(sub_8096C84); + break; + case 0: + sub_8098A5C(); + sub_809B7D4(); + sub_809B6DC(); + gPokemonStorageSystemPtr->unk_0004++; + break; + } + break; + case 2: + sub_809B960(); + if (!sub_809B734()) + { + while (1) + { + s8 r0 = sub_809B960(); + if (r0 == 1) + { + gPokemonStorageSystemPtr->unk_0004++; + break; + } + if (r0 == 0) + { + gPokemonStorageSystemPtr->unk_0004 = 8; + break; + } + } + } + break; + case 3: + sub_809B760(); + sub_809801C(); + PrintStorageActionText(PC_TEXT_WAS_RELEASED); + gPokemonStorageSystemPtr->unk_0004++; + break; + case 4: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + PrintStorageActionText(PC_TEXT_BYE_BYE); + gPokemonStorageSystemPtr->unk_0004++; + } + break; + case 5: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + sub_8098A5C(); + if (gUnknown_0203847C) + { + party_compaction(); + sub_8099310(); + gPokemonStorageSystemPtr->unk_0004++; + } + else + { + gPokemonStorageSystemPtr->unk_0004 = 7; + } + } + break; + case 6: + if (!sub_8099374()) + { + sub_809B440(); + BoxSetMosaic(); + sub_80987DC(); + gPokemonStorageSystemPtr->unk_0004++; + } + break; + case 7: + SetPSSCallback(sub_8096C84); + break; + case 8: + PrintStorageActionText(PC_TEXT_WAS_RELEASED); + gPokemonStorageSystemPtr->unk_0004++; + break; + case 9: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + PrintStorageActionText(PC_TEXT_SURPRISE); + gPokemonStorageSystemPtr->unk_0004++; + } + break; + case 10: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + sub_8098A5C(); + sub_8099958(); + gPokemonStorageSystemPtr->unk_0004++; + } + break; + case 11: + if (!sub_8099990()) + { + sub_809B7AC(); + PrintStorageActionText(PC_TEXT_CAME_BACK); + gPokemonStorageSystemPtr->unk_0004++; + } + break; + case 12: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + PrintStorageActionText(PC_TEXT_WORRIED); + gPokemonStorageSystemPtr->unk_0004++; + } + break; + case 13: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + sub_8098A5C(); + SetPSSCallback(sub_8096C84); + } + break; + } +} + +void sub_8097788(void) +{ + switch (gPokemonStorageSystemPtr->unk_0004) + { + case 0: + sub_809BC18(); + BeginNormalPaletteFade(0xffffffff, 0, 0, 16, 0); + gPokemonStorageSystemPtr->unk_0004++; + break; + case 1: + if (!UpdatePaletteFade()) + { + gUnknown_0203847F = 0; + gPokemonStorageSystemPtr->unk_0006 = 0; + SetMainCallback2(sub_8096B5C); + } + break; + } +} + +void sub_80977E4(void) +{ + switch (gPokemonStorageSystemPtr->unk_0004) + { + case 0: + PrintStorageActionText(PC_TEXT_MARK_POKE); + gPokemonStorageSystemPtr->unk_12bc.markings = gPokemonStorageSystemPtr->unk_11f7; + sub_80F7418(gPokemonStorageSystemPtr->unk_11f7, 0xb0, 0x10); + gPokemonStorageSystemPtr->unk_0004++; + break; + case 1: + if (!sub_80F7500()) + { + sub_80F7470(); + sub_8098A5C(); + sub_809BDD8(gPokemonStorageSystemPtr->unk_12bc.markings); + sub_809801C(); + SetPSSCallback(sub_8096C84); + } + break; + } +} + +void sub_8097858(void) +{ + switch (gPokemonStorageSystemPtr->unk_0004) + { + case 0: + party_compaction(); + sub_8099310(); + gPokemonStorageSystemPtr->unk_0004++; + break; + case 1: + if (!sub_8099374()) + { + sub_80987DC(); + SetPSSCallback(sub_8096C84); + } + break; + } +} + +void sub_809789C(void) +{ + switch (gPokemonStorageSystemPtr->unk_0004) + { + case 0: + PrintStorageActionText(PC_TEXT_WHAT_YOU_DO); + sub_809CE84(); + gPokemonStorageSystemPtr->unk_0004++; + break; + case 1: + switch (sub_809CF30()) + { + case -1: + case 0: + sub_809A860(1); + sub_8098A5C(); + SetPSSCallback(sub_8096C84); + break; + case 11: + PlaySE(SE_SELECT); + SetPSSCallback(sub_8097B44); + break; + case 10: + PlaySE(SE_SELECT); + sub_8098A5C(); + SetPSSCallback(sub_8097974); + break; + case 9: + PlaySE(SE_SELECT); + sub_8098A5C(); + SetPSSCallback(sub_8097A64); + break; + } + break; + } +} + +void sub_8097974(void) +{ + switch (gPokemonStorageSystemPtr->unk_0004) + { + case 0: + sub_8098A80(); + PrintStorageActionText(PC_TEXT_PICK_A_THEME); + gPokemonStorageSystemPtr->unk_0004++; + break; + case 1: + gPokemonStorageSystemPtr->unk_0d5e = sub_809CF30(); + switch (gPokemonStorageSystemPtr->unk_0d5e) + { + case -1: + sub_809A860(1); + sub_8098A5C(); + SetPSSCallback(sub_8096C84); + break; + case 12 ... 15: + PlaySE(SE_SELECT); + gPokemonStorageSystemPtr->unk_0d5e -= 12; + sub_8098AA8(gPokemonStorageSystemPtr->unk_0d5e); + PrintStorageActionText(PC_TEXT_PICK_A_WALLPAPER); + gPokemonStorageSystemPtr->unk_0004++; + break; + } + break; + case 2: + gPokemonStorageSystemPtr->unk_0d60 = sub_809CF30(); + switch (gPokemonStorageSystemPtr->unk_0d60) + { + case -1: + sub_8098A5C(); + gPokemonStorageSystemPtr->unk_0004 = 0; + break; + case -2: + break; + default: + PlaySE(SE_SELECT); + sub_8098A5C(); + gPokemonStorageSystemPtr->unk_0d60 -= 16; + sub_8099DCC(gPokemonStorageSystemPtr->unk_0d60); + gPokemonStorageSystemPtr->unk_0004++; + break; + } + break; + case 3: + if (!sub_8099E08()) + { + sub_809A860(1); + SetPSSCallback(sub_8096C84); + } + break; + } +} + +void sub_8097A64(void) +{ + switch (gPokemonStorageSystemPtr->unk_0004) + { + case 0: + PrintStorageActionText(PC_TEXT_JUMP_TO_WHICH_BOX); + sub_8096264(&gPokemonStorageSystemPtr->unk_2370, 0x0007, 0xdaca, 3); + sub_809634C(gPokemonStorage.currentBox); + gPokemonStorageSystemPtr->unk_0004++; + break; + case 1: + gPokemonStorageSystemPtr->unk_08b2 = sub_8096368(); + switch (gPokemonStorageSystemPtr->unk_08b2) + { + case 200: + break; + default: + sub_8098A5C(); + sub_809635C(); + sub_8096310(); + if (gPokemonStorageSystemPtr->unk_08b2 == 201 || gPokemonStorageSystemPtr->unk_08b2 == gPokemonStorage.currentBox) + { + sub_809A860(1); + SetPSSCallback(sub_8096C84); + } + else + { + gPokemonStorageSystemPtr->unk_0004++; + } + break; + } + break; + case 2: + sub_8099C70(gPokemonStorageSystemPtr->unk_08b2); + gPokemonStorageSystemPtr->unk_0004++; + break; + case 3: + if (!sub_8099D34()) + { + gPokemonStorage.currentBox = gPokemonStorageSystemPtr->unk_08b2; + SetPSSCallback(sub_8096C84); + } + break; + } +} + +void sub_8097B44(void) +{ + switch (gPokemonStorageSystemPtr->unk_0004) + { + case 0: + sub_809BB90(); + BeginNormalPaletteFade(0xffffffff, 0, 0, 16, 0); + gPokemonStorageSystemPtr->unk_0004++; + break; + case 1: + if (!UpdatePaletteFade()) + { + gUnknown_0203847F = 1; + gPokemonStorageSystemPtr->unk_0006 = 1; + SetMainCallback2(sub_8096B5C); + } + break; + } +} + +void sub_8097BA0(void) +{ + switch (gPokemonStorageSystemPtr->unk_0004) + { + case 0: + if (sub_809BF20()) + { + PlaySE(SE_HAZURE); + PrintStorageActionText(PC_TEXT_HOLDING_POKE); + gPokemonStorageSystemPtr->unk_0004 = 1; + } + else + { + PlaySE(SE_SELECT); + PrintStorageActionText(PC_TEXT_EXIT_BOX); + sub_8098A38(0); + gPokemonStorageSystemPtr->unk_0004 = 2; + } + break; + case 1: + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) + { + sub_8098A5C(); + SetPSSCallback(sub_8096C84); + } + break; + case 2: + switch (ProcessMenuInputNoWrap()) + { + case 1: + case -1: + sub_8098A5C(); + SetPSSCallback(sub_8096C84); + break; + case 0: + PlaySE(SE_PC_OFF); + sub_8098A5C(); + gPokemonStorageSystemPtr->unk_0004++; + break; + } + break; + case 3: + gPokemonStorageSystemPtr->unk_000c.tileTag = 0x000e; + gPokemonStorageSystemPtr->unk_000c.paletteTag = 0xdad0; + gPokemonStorageSystemPtr->unk_000c.unk04 = 20; + gPokemonStorageSystemPtr->unk_000c.unk06 = 0; + sub_80C5E38(&gPokemonStorageSystemPtr->unk_000c); + gPokemonStorageSystemPtr->unk_0004++; + break; + case 4: + if (sub_80C5F98()) + { + gPlayerPartyCount = CalculatePlayerPartyCount(); + SetMainCallback2(sub_80961A8); + } + break; + } +} + +void sub_8097CC0(void) { + switch (gPokemonStorageSystemPtr->unk_0004) { + case 0: + if (sub_809BF20()) { + PlaySE(SE_HAZURE); + PrintStorageActionText(PC_TEXT_HOLDING_POKE); + gPokemonStorageSystemPtr->unk_0004 = 1; + } + else { + PlaySE(SE_SELECT); + PrintStorageActionText(PC_TEXT_CONTINUE_BOX); + sub_8098A38(0); + gPokemonStorageSystemPtr->unk_0004 = 2; + } + break; + case 1: + if (gMain.newKeys & (A_BUTTON | B_BUTTON | DPAD_ANY)) { + sub_8098A5C(); + SetPSSCallback(sub_8096C84); + } + break; + case 2: + switch (ProcessMenuInputNoWrap()) { + case 0: + sub_8098A5C(); + SetPSSCallback(sub_8096C84); + break; + case -1: + case 1: + PlaySE(SE_PC_OFF); + sub_8098A5C(); + gPokemonStorageSystemPtr->unk_0004++; + break; + } + break; + case 3: + gPokemonStorageSystemPtr->unk_000c.tileTag = 0x000e; + gPokemonStorageSystemPtr->unk_000c.paletteTag = 0xdad0; + gPokemonStorageSystemPtr->unk_000c.unk04 = 20; + gPokemonStorageSystemPtr->unk_000c.unk06 = 0; + sub_80C5E38(&gPokemonStorageSystemPtr->unk_000c); + gPokemonStorageSystemPtr->unk_0004++; + break; + case 4: + if (sub_80C5F98()) { + gPlayerPartyCount = CalculatePlayerPartyCount(); + SetMainCallback2(sub_80961A8); + } + break; + } +} + +void sub_8097DE0(void) +{ + gPokemonStorageSystemPtr->unk_0007 = 0; + gPokemonStorageSystemPtr->unk_0008 = 0; + gPokemonStorageSystemPtr->unk_000a = 0; + REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(3) | BGCNT_SCREENBASE(30); + DmaCopy16Defvars(3, gPokemonStorageScrollingBGTile, BG_SCREEN_ADDR(28), sizeof gPokemonStorageScrollingBGTile); + LZ77UnCompVram(gPokemonStorageScrollingBGTilemap, BG_SCREEN_ADDR(30)); + LoadPalette(gPokemonStorageScrollingBGPalette, 0xd0, 0x10); +} + +void sub_8097E44(void) +{ + if (++gPokemonStorageSystemPtr->unk_0007 >= 2) + { + gPokemonStorageSystemPtr->unk_0007 = 0; + gPokemonStorageSystemPtr->unk_0008--; + gPokemonStorageSystemPtr->unk_000a++; + } +} + +void sub_8097E70(void) +{ + LZ77UnCompVram(gPSSMenuHeader_Gfx, BG_SCREEN_ADDR(10)); + LZ77UnCompWram(gPSSMenuHeader_Tilemap, gUnknown_02039760); + sub_809D034(BG_SCREEN_ADDR(15), 0, 0, gUnknown_02039760, 0, 0, 10, 20); + LoadPalette(gPSSMenu1_Pal, 0x10, 0x20); + LoadPalette(gPSSMenu2_Pal, 0x00, 0x20); + LoadPalette(gUnknown_083B6D74, 0xB0, 0x20); + LoadPalette(gUnknown_083B6D94, 0xC0, 0x20); + LoadPalette(gUnknownPalette_81E6692 + 1, 0xF1, 0x02); + LoadPalette(gUnknownPalette_81E6692 + 1, 0xF2, 0x02); + LoadPalette(gUnknownPalette_81E6692 + 5, 0xF3, 0x02); + LoadPalette(gUnknownPalette_81E6692 + 12, 0xF4, 0x04); + LoadPalette(gUnknownPalette_81E6692 + 10, 0xF6, 0x04); + LoadPalette(gUnknownPalette_81E6692 + 2, 0xFF, 0x02); + LoadSpritePalette(&gWaveformSpritePalette); + sub_80980D4(); + sub_8097F58(); + sub_8097FB8(); + sub_809801C(); +} + +asm(".section .text.8098898"); + +void PrintStorageActionText(u8 index) { + u8 *ptr; + + MenuDrawTextWindow(10, 16, 29, 19); + + switch (gPCStorageActionTexts[index].format) + { + + case PC_TEXT_FMT_UNK_02: + ptr = StringCopy(gPokemonStorageSystemPtr->unk_2694, gPCStorageActionTexts[index].text); + ptr = StringCopy(ptr, gPokemonStorageSystemPtr->unk_11fa); + break; + + case PC_TEXT_FMT_UNK_05: + ptr = StringCopy(gPokemonStorageSystemPtr->unk_2694, gPCStorageActionTexts[index].text); + ptr = StringCopy(ptr, gPokemonStorageSystemPtr->unk_26e4); + break; + + case PC_TEXT_FMT_MON_NAME: + // {var} + " is selected." + ptr = StringCopy(gPokemonStorageSystemPtr->unk_2694, gPokemonStorageSystemPtr->unk_11fa); + ptr = StringCopy(ptr, gPCStorageActionTexts[index].text); + break; + + case PC_TEXT_FMT_MON_NAME_2: + // {var} + " was released." + ptr = StringCopy(gPokemonStorageSystemPtr->unk_2694, gPokemonStorageSystemPtr->unk_26e4); +#if ENGLISH + ptr = StringCopy(ptr, gPCStorageActionTexts[index].text); +#elif GERMAN + ptr = de_sub_8073174(gPokemonStorageSystemPtr->unk_2694, gPCStorageActionTexts[index].text); +#endif + break; + + case PC_TEXT_FMT_UNK_03: + { + const u8 *stringLength; + const u8 *text; + + text = gPCStorageActionTexts[index].text; + stringLength = &text[StringLength(text)] + 1; + + ptr = StringCopy(gPokemonStorageSystemPtr->unk_2694, gPCStorageActionTexts[index].text); + ptr = StringCopy(ptr, gPokemonStorageSystemPtr->unk_11fa); + ptr = StringCopy(ptr, stringLength); + } + break; + + case PC_TEXT_FMT_MON_NAME_AFTER_EXCL_MARK: + // "Bye-bye, ".substr(0, -1) + {var} + "Bye-bye, !".substr(-1, 1) + { + const u8 *stringLength; + const u8 *text; + + text = gPCStorageActionTexts[index].text; + stringLength = &text[StringLength(text)] - 1; + + ptr = StringCopy(gPokemonStorageSystemPtr->unk_2694, gPCStorageActionTexts[index].text); + ptr = StringCopy(ptr - 1, gPokemonStorageSystemPtr->unk_26e4); + ptr = StringCopy(ptr, stringLength); + } + break; + + case PC_TEXT_FMT_NORMAL: + default: + ptr = StringCopy(gPokemonStorageSystemPtr->unk_2694, gPCStorageActionTexts[index].text); + break; + } + + while (ptr < gPokemonStorageSystemPtr->unk_26a6) + { + ptr[0] = CHAR_SPACE; + ptr++; + } + + ptr[0] = EOS; + MenuPrint(gPokemonStorageSystemPtr->unk_2694, 11, 17); +} diff --git a/src/pokemon/pokemon_storage_system_3.c b/src/pokemon/pokemon_storage_system_3.c new file mode 100644 index 000000000..9e0052b89 --- /dev/null +++ b/src/pokemon/pokemon_storage_system_3.c @@ -0,0 +1,16 @@ + +// Includes +#include "global.h" +#include "pokemon_storage_system.h" + +// Static type declarations + +// Static RAM declarations + +EWRAM_DATA u16 gUnknown_02039760[0x600] = {}; + +// Static ROM declarations + +// .rodata + +// .text diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index 9563bc08f..fb8363569 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -146,7 +146,6 @@ extern const u8 gUnknown_08E74E88[]; extern const u8 gUnknown_08E73508[]; extern const u8 gStatusScreen_Gfx[]; extern const u8 gFontDefaultPalette[]; -extern const u8 gUnknownPalette_81E6692[]; extern const u8 gAbilityNames[][13]; extern const u8 * const gAbilityDescriptions[]; extern const u8 * const gContestEffectStrings[]; @@ -940,21 +939,21 @@ static bool8 LoadPokemonSummaryScreenGraphics(void) static void sub_809E044(void) { - LoadPalette(&gUnknownPalette_81E6692[28], 129, 2); - LoadPalette(&gUnknownPalette_81E6692[30], 136, 2); - LoadPalette(&gUnknownPalette_81E6692[28], 143, 2); - LoadPalette(&gUnknownPalette_81E6692[30], 137, 2); - LoadPalette(&gUnknownPalette_81E6692[12], 209, 4); - LoadPalette(&gUnknownPalette_81E6692[20], 211, 4); - LoadPalette(&gUnknownPalette_81E6692[28], 213, 4); - LoadPalette(&gUnknownPalette_81E6692[12], 215, 4); - LoadPalette(&gUnknownPalette_81E6692[8], 217, 4); - LoadPalette(&gUnknownPalette_81E6692[16], 219, 4); - LoadPalette(&gUnknownPalette_81E6692[4], 221, 2); - LoadPalette(&gUnknownPalette_81E6692[6], 222, 2); - LoadPalette(&gUnknownPalette_81E6692[2], 223, 2); + LoadPalette(gUnknownPalette_81E6692 + 14, 129, 2); + LoadPalette(gUnknownPalette_81E6692 + 15, 136, 2); + LoadPalette(gUnknownPalette_81E6692 + 14, 143, 2); + LoadPalette(gUnknownPalette_81E6692 + 15, 137, 2); + LoadPalette(gUnknownPalette_81E6692 + 6, 209, 4); + LoadPalette(gUnknownPalette_81E6692 + 10, 211, 4); + LoadPalette(gUnknownPalette_81E6692 + 14, 213, 4); + LoadPalette(gUnknownPalette_81E6692 + 6, 215, 4); + LoadPalette(gUnknownPalette_81E6692 + 4, 217, 4); + LoadPalette(gUnknownPalette_81E6692 + 8, 219, 4); + LoadPalette(gUnknownPalette_81E6692 + 2, 221, 2); + LoadPalette(gUnknownPalette_81E6692 + 3, 222, 2); + LoadPalette(gUnknownPalette_81E6692 + 1, 223, 2); LoadPalette(gFontDefaultPalette, 240, 32); - LoadPalette(&gUnknownPalette_81E6692[6], 249, 2); + LoadPalette(gUnknownPalette_81E6692 + 3, 249, 2); } static void SummaryScreenExit(u8 taskId) diff --git a/src/pokenav_before.c b/src/pokenav_before.c index 8a67390ad..ee5bdb1cb 100644 --- a/src/pokenav_before.c +++ b/src/pokenav_before.c @@ -102,7 +102,6 @@ extern const u16 gPokenavConditionSearch2_Pal[]; extern const u8 gUnknown_083E0334[]; extern const u16 gUnknown_083E02B4[]; extern const u8 gPokenavConditionSearch2_Gfx[]; -extern const u8 gUnknownPalette_81E6692[]; extern const u8 gUnknown_083E0254[]; extern const u8 gUnknown_08E9FEB4[]; extern const u8 gUnknown_083E01AC[]; diff --git a/sym_ewram.txt b/sym_ewram.txt index 62758ab78..ac9805f3e 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -378,6 +378,7 @@ gUnknown_0202FFA4: @ 202FFA4 .include "src/pokemon/pokedex.o" .include "src/engine/trainer_card.o" .include "src/pokemon/pokemon_storage_system.o" + .include "src/pokemon/pokemon_storage_system_2.o" @ pokemon_summary_screen @@ -560,7 +561,5 @@ gTileBuffer: @ 2039360 gUnknown_02039460: @ 2039460 .space 0x300 -gUnknown_02039760: @ 2039760 - .space 0xC00 - + .include "src/pokemon/pokemon_storage_system_3.o" .include "src/engine/menu_cursor.o" -- cgit v1.2.3 From 4facfe910285787778666eeee747b4c1c7201d98 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 9 Jan 2018 14:43:24 -0500 Subject: through sub_80980D4 (nonmatching) --- asm/pokemon_storage_system.s | 331 +-------------------------------- include/mon_markings.h | 1 + include/pokemon_storage_system.h | 17 +- src/pokemon/pokemon_storage_system_2.c | 321 +++++++++++++++++++++++++++----- 4 files changed, 292 insertions(+), 378 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index bd1007f5d..eaed44102 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,335 +5,6 @@ .text - thumb_func_start sub_8097F58 -sub_8097F58: @ 8097F58 - push {r4,lr} - ldr r1, _08097FA4 @ =0x0000dace - movs r0, 0xD - movs r2, 0 - bl sub_80F7940 - ldr r4, _08097FA8 @ =gSharedMem - ldr r1, _08097FAC @ =0x000012ac - adds r3, r4, r1 - str r0, [r3] - ldrb r2, [r0, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r2 - strb r1, [r0, 0x5] - ldr r0, [r3] - adds r0, 0x43 - movs r1, 0x1 - strb r1, [r0] - ldr r1, [r3] - movs r0, 0x28 - strh r0, [r1, 0x20] - ldr r1, [r3] - movs r0, 0x95 - strh r0, [r1, 0x22] - movs r0, 0xD - bl GetSpriteTileStartByTag - ldr r1, _08097FB0 @ =0x000012b8 - adds r4, r1 - lsls r0, 16 - lsrs r0, 11 - ldr r1, _08097FB4 @ =0x06010000 - adds r0, r1 - str r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08097FA4: .4byte 0x0000dace -_08097FA8: .4byte gSharedMem -_08097FAC: .4byte 0x000012ac -_08097FB0: .4byte 0x000012b8 -_08097FB4: .4byte 0x06010000 - thumb_func_end sub_8097F58 - - thumb_func_start sub_8097FB8 -sub_8097FB8: @ 8097FB8 - push {r4,r5,lr} - sub sp, 0x8 - ldr r0, _0809800C @ =gWaveformSpriteSheet - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp] - str r1, [sp, 0x4] - mov r0, sp - bl LoadSpriteSheet - movs r4, 0 - ldr r5, _08098010 @ =gSharedMem + 0x12B0 -_08097FD0: - lsls r1, r4, 6 - subs r1, r4 - adds r1, 0x8 - lsls r1, 16 - asrs r1, 16 - ldr r0, _08098014 @ =gSpriteTemplate_83B6EFC - movs r2, 0x9 - movs r3, 0x2 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - lsls r2, r4, 2 - adds r2, r5 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _08098018 @ =gSprites - adds r1, r0 - str r1, [r2] - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x1 - bls _08097FD0 - add sp, 0x8 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0809800C: .4byte gWaveformSpriteSheet -_08098010: .4byte gSharedMem + 0x12B0 -_08098014: .4byte gSpriteTemplate_83B6EFC -_08098018: .4byte gSprites - thumb_func_end sub_8097FB8 - - thumb_func_start sub_809801C -sub_809801C: @ 809801C - push {lr} - ldr r1, _0809803C @ =gSharedMem - ldr r2, _08098040 @ =0x000011f0 - adds r0, r1, r2 - ldrh r0, [r0] - subs r2, 0x4 - adds r1, r2 - ldr r1, [r1] - bl sub_80981F0 - bl sub_80982B4 - bl sub_8098350 - pop {r0} - bx r0 - .align 2, 0 -_0809803C: .4byte gSharedMem -_08098040: .4byte 0x000011f0 - thumb_func_end sub_809801C - - thumb_func_start BoxSetMosaic -BoxSetMosaic: @ 8098044 - push {lr} - bl sub_809801C - ldr r0, _08098084 @ =gSharedMem - movs r1, 0x9C - lsls r1, 6 - adds r3, r0, r1 - ldr r2, [r3] - cmp r2, 0 - beq _08098080 - ldrb r0, [r2, 0x1] - movs r1, 0x10 - orrs r0, r1 - strb r0, [r2, 0x1] - ldr r1, [r3] - movs r0, 0xA - strh r0, [r1, 0x2E] - ldr r1, [r3] - movs r0, 0x1 - strh r0, [r1, 0x30] - ldr r1, [r3] - ldr r0, _08098088 @ =sub_8098090 - str r0, [r1, 0x1C] - ldr r2, _0809808C @ =REG_MOSAIC - ldr r0, [r3] - ldrh r0, [r0, 0x2E] - lsls r1, r0, 12 - lsls r0, 8 - orrs r1, r0 - strh r1, [r2] -_08098080: - pop {r0} - bx r0 - .align 2, 0 -_08098084: .4byte gSharedMem -_08098088: .4byte sub_8098090 -_0809808C: .4byte REG_MOSAIC - thumb_func_end BoxSetMosaic - - thumb_func_start sub_8098090 -sub_8098090: @ 8098090 - push {lr} - adds r3, r0, 0 - ldrh r0, [r3, 0x2E] - ldrh r1, [r3, 0x30] - subs r0, r1 - strh r0, [r3, 0x2E] - lsls r0, 16 - cmp r0, 0 - bge _080980A6 - movs r0, 0 - strh r0, [r3, 0x2E] -_080980A6: - ldr r2, _080980CC @ =REG_MOSAIC - ldrh r0, [r3, 0x2E] - lsls r1, r0, 12 - lsls r0, 8 - orrs r1, r0 - strh r1, [r2] - movs r1, 0x2E - ldrsh r0, [r3, r1] - cmp r0, 0 - bne _080980C8 - ldrb r0, [r3, 0x1] - movs r1, 0x11 - negs r1, r1 - ands r1, r0 - strb r1, [r3, 0x1] - ldr r0, _080980D0 @ =SpriteCallbackDummy - str r0, [r3, 0x1C] -_080980C8: - pop {r0} - bx r0 - .align 2, 0 -_080980CC: .4byte REG_MOSAIC -_080980D0: .4byte SpriteCallbackDummy - thumb_func_end sub_8098090 - - thumb_func_start sub_80980D4 -sub_80980D4: @ 80980D4 - push {r4,r5,lr} - sub sp, 0x28 - ldr r0, _08098150 @ =gUnknown_083B6DCC - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp, 0x18] - str r1, [sp, 0x1C] - ldr r0, _08098154 @ =gUnknown_083B6DD4 - ldr r1, [r0, 0x4] - ldr r0, [r0] - str r0, [sp, 0x20] - str r1, [sp, 0x24] - mov r1, sp - ldr r0, _08098158 @ =gSpriteTemplate_83B6DDC - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - ldm r0!, {r2-r4} - stm r1!, {r2-r4} - movs r1, 0 - add r5, sp, 0x18 - ldr r4, _0809815C @ =gSharedMem + 0x2784 - movs r3, 0 - ldr r2, _08098160 @ =0x000007ff -_08098102: - adds r0, r1, r4 - strb r3, [r0] - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, r2 - bls _08098102 - movs r1, 0 - ldr r3, _08098164 @ =gSharedMem + 0x2704 - movs r2, 0 -_08098116: - lsls r0, r1, 1 - adds r0, r3 - strh r2, [r0] - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0xF - bls _08098116 - ldr r0, _08098168 @ =gSharedMem - movs r1, 0x9C - lsls r1, 6 - adds r0, r1 - movs r1, 0 - str r1, [r0] - adds r0, r5, 0 - bl LoadSpriteSheet - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0 - beq _080981C4 - add r0, sp, 0x20 - bl LoadSpritePalette - lsls r0, 24 - lsrs r4, r0, 24 - cmp r4, 0xFF - beq _080981C4 - b _080981B0 - .align 2, 0 -_08098150: .4byte gUnknown_083B6DCC -_08098154: .4byte gUnknown_083B6DD4 -_08098158: .4byte gSpriteTemplate_83B6DDC -_0809815C: .4byte gSharedMem + 0x2784 -_08098160: .4byte 0x000007ff -_08098164: .4byte gSharedMem + 0x2704 -_08098168: .4byte gSharedMem -_0809816C: - ldr r2, _0809819C @ =gSharedMem - movs r0, 0x9C - lsls r0, 6 - adds r3, r2, r0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _080981A0 @ =gSprites - adds r0, r1 - str r0, [r3] - lsls r0, r4, 4 - movs r1, 0x80 - lsls r1, 1 - adds r0, r1 - ldr r3, _080981A4 @ =0x000026fa - adds r1, r2, r3 - strh r0, [r1] - ldr r4, _080981A8 @ =0x000026fc - adds r2, r4 - lsls r0, r5, 5 - ldr r1, _080981AC @ =0x06010000 - adds r0, r1 - str r0, [r2] - b _080981C4 - .align 2, 0 -_0809819C: .4byte gSharedMem -_080981A0: .4byte gSprites -_080981A4: .4byte 0x000026fa -_080981A8: .4byte 0x000026fc -_080981AC: .4byte 0x06010000 -_080981B0: - mov r0, sp - movs r1, 0x28 - movs r2, 0x30 - movs r3, 0 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - bne _0809816C -_080981C4: - ldr r0, _080981E8 @ =gSharedMem - movs r2, 0x9C - lsls r2, 6 - adds r0, r2 - ldr r0, [r0] - cmp r0, 0 - bne _080981DE - movs r0, 0x2 - bl FreeSpriteTilesByTag - ldr r0, _080981EC @ =0x0000dac7 - bl FreeSpritePaletteByTag -_080981DE: - add sp, 0x28 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080981E8: .4byte gSharedMem -_080981EC: .4byte 0x0000dac7 - thumb_func_end sub_80980D4 - thumb_func_start sub_80981F0 sub_80981F0: @ 80981F0 push {r4-r7,lr} @@ -1291,6 +962,8 @@ _08098B32: bx r0 thumb_func_end sub_8098AA8 +// File boundary + thumb_func_start get_preferred_box get_preferred_box: @ 8098B3C ldr r0, _08098B44 @ =gPokemonStorage diff --git a/include/mon_markings.h b/include/mon_markings.h index 3b4aa333c..5b6abf356 100644 --- a/include/mon_markings.h +++ b/include/mon_markings.h @@ -25,5 +25,6 @@ void sub_80F7404(void); void sub_80F7418(u8 markings, s16 x, s16 y); void sub_80F7470(void); bool8 sub_80F7500(void); +struct Sprite *sub_80F7940(u16 tileTag, u16 paletteTag, const u16 *palette); #endif //POKERUBY_MON_MARKINGS_H diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index 51ebda88f..cbdec8999 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -85,14 +85,19 @@ struct PokemonStorageSystemData { u8 filler_08b6[0x4a8]; s16 unk_0d5e; s16 unk_0d60; - u8 filler_0d62[0x490]; + u8 filler_0d62[0x48a]; + u32 unk_11ec; + u16 unk_11f0; u16 unk_11f2; u8 filler_11f4[2]; u8 unk_11f6; u8 unk_11f7; u8 unk_11f8; u8 unk_11f9; - u8 unk_11fa[0xc2]; + u8 unk_11fa[0xb2]; + struct Sprite *unk_12ac; + struct Sprite *unk_12b0[2]; + u16 *unk_12b8; struct PokemonMarkMenu unk_12bc; struct UnkPSSStruct_2002370 unk_2370; u8 filler_25b4[0xd8]; @@ -102,8 +107,12 @@ struct PokemonStorageSystemData { struct Pokemon *unk_2690; u8 unk_2694[18]; u8 unk_26a6[62]; - u8 unk_26e4[0x20]; - u16 unk_2704[0x40]; + u8 unk_26e4[0x16]; + u16 unk_26fa; + u16 *unk_26fc; + struct Sprite *unk_2700; + u16 unk_2704[0x10]; + u8 filler_2724[0x60]; u8 unk_2784[0x800]; }; diff --git a/src/pokemon/pokemon_storage_system_2.c b/src/pokemon/pokemon_storage_system_2.c index 5c72d02e9..f8ae1c013 100644 --- a/src/pokemon/pokemon_storage_system_2.c +++ b/src/pokemon/pokemon_storage_system_2.c @@ -66,9 +66,13 @@ void sub_8097E44(void); void sub_8097E70(void); void sub_8097F58(void); void sub_8097FB8(void); -void BoxSetMosaic(void); void sub_809801C(void); +void BoxSetMosaic(void); +void sub_8098090(struct Sprite *sprite); void sub_80980D4(void); +void sub_80981F0(u16 species, u32 pid); +void sub_80982B4(void); +void sub_8098350(void); void sub_8098400(void); void add_to_c3_somehow(void); bool8 sub_80985CC(void); @@ -191,50 +195,6 @@ const struct SpritePalette gWaveformSpritePalette = { WaveformPalette, 0xdacd }; -const struct SpriteSheet gWaveformSpriteSheet = { - WaveformTiles, 0x1c0, 0x0005 -}; - -const struct SpriteSheet gUnknown_083B6DCC = { - ePokemonStorageSystem.unk_2784, 0x800, 0x0002 -}; - -const struct SpritePalette gUnknown_083B6DD4 = { - ePokemonStorageSystem.unk_2704, 0xdac7 -}; - -const struct OamData gOamData_83B6EAC; - -const struct SpriteTemplate gSpriteTemplate_83B6DDC = { - 0x0002, 0xdac7, &gOamData_83B6EAC, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy -}; - -const struct StorageAction gPCStorageActionTexts[] = { - {PCText_ExitBox, 0}, - {PCText_WhatYouDo, 0}, - {PCText_PickATheme, 0}, - {PCText_PickAWallpaper, 0}, - {PCText_IsSelected, 1}, - {PCText_JumpToWhichBox, 0}, - {PCText_DepositInWhichBox, 0}, - {PCText_WasDeposited, 1}, - {PCText_BoxIsFull, 0}, - {PCText_ReleasePoke, 0}, - {PCText_WasReleased, 4}, - {PCText_ByeBye, 6}, - {PCText_MarkPoke, 0}, - {PCText_LastPoke, 0}, - {PCText_PartyFull, 0}, - {PCText_HoldingPoke, 0}, - {PCText_WhichOneWillTake, 0}, - {PCText_CantReleaseEgg, 0}, - {PCText_ContinueBox, 0}, - {PCText_CameBack, 1}, - {PCText_Worried, 0}, - {PCText_Surprise, 0}, - {PCText_PleaseRemoveMail, 0} -}; - // .text @@ -1484,6 +1444,249 @@ void sub_8097E70(void) sub_809801C(); } +void sub_8097F58(void) +{ + gPokemonStorageSystemPtr->unk_12ac = sub_80F7940(0x000d, 0xdace, 0); + gPokemonStorageSystemPtr->unk_12ac->oam.priority = 0; + gPokemonStorageSystemPtr->unk_12ac->subpriority = 1; + gPokemonStorageSystemPtr->unk_12ac->pos1.x = 0x28; + gPokemonStorageSystemPtr->unk_12ac->pos1.y = 0x95; + gPokemonStorageSystemPtr->unk_12b8 = BG_CHAR_ADDR(4) + 32 * GetSpriteTileStartByTag(0x000d); +} + +const struct SpriteTemplate gSpriteTemplate_83B6EFC; + +void sub_8097FB8(void) +{ + u16 i; + struct SpriteSheet sheet = {WaveformTiles, 0x1c0, 0x0005}; + + LoadSpriteSheet(&sheet); + for (i = 0; i < 2; i++) + { + u8 spriteId = CreateSprite(&gSpriteTemplate_83B6EFC, i * 63 + 8, 9, 2); + gPokemonStorageSystemPtr->unk_12b0[i] = gSprites + spriteId; + } +} + +void sub_809801C(void) +{ + sub_80981F0(gPokemonStorageSystemPtr->unk_11f0, gPokemonStorageSystemPtr->unk_11ec); + sub_80982B4(); + sub_8098350(); +} + +void BoxSetMosaic(void) +{ + sub_809801C(); + if (gPokemonStorageSystemPtr->unk_2700) + { + gPokemonStorageSystemPtr->unk_2700->oam.mosaic = TRUE; + gPokemonStorageSystemPtr->unk_2700->data[0] = 10; + gPokemonStorageSystemPtr->unk_2700->data[1] = 1; + gPokemonStorageSystemPtr->unk_2700->callback = sub_8098090; + REG_MOSAIC = (gPokemonStorageSystemPtr->unk_2700->data[0] << 12) | (gPokemonStorageSystemPtr->unk_2700->data[0] << 8); + } +} + +void sub_8098090(struct Sprite *sprite) +{ + sprite->data[0] -= sprite->data[1]; + if (sprite->data[0] < 0) + sprite->data[0] = 0; + REG_MOSAIC = (sprite->data[0] << 12) | (sprite->data[0] << 8); + if (sprite->data[0] == 0) + { + sprite->oam.mosaic = FALSE; + sprite->callback = SpriteCallbackDummy; + } +} + +// sub_80980D4 + +const struct OamData gOamData_83B6EAC; + +#ifdef NONMATCHING +void sub_80980D4(void) +{ + u16 i; + u16 tileStart; + u8 palSlot; + u8 spriteId; + struct SpriteSheet sheet = {gPokemonStorageSystemPtr->unk_2784, 0x800, 0x0002}; + struct SpritePalette palette = {gPokemonStorageSystemPtr->unk_2704, 0xdac7}; + struct SpriteTemplate template = { + 0x0002, 0xdac7, &gOamData_83B6EAC, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy + }; + + for (i = 0; i < 0x800; i++) + gPokemonStorageSystemPtr->unk_2784[i] = 0; + for (i = 0; i < 0x10; i++) + gPokemonStorageSystemPtr->unk_2704[i] = 0; + + gPokemonStorageSystemPtr->unk_2700 = NULL; + if ((tileStart = LoadSpriteSheet(&sheet)) != 0 + && (palSlot = LoadSpritePalette(&palette)) != 0xff + && (spriteId = CreateSprite(&template, 0x28, 0x30, 0)) != MAX_SPRITES) + { + // FIXME this gets compiled as a separate block between the palSlot check and the spriteId check + gPokemonStorageSystemPtr->unk_2700 = gSprites + spriteId; + gPokemonStorageSystemPtr->unk_26fa = palSlot * 16 + 0x100; + gPokemonStorageSystemPtr->unk_26fc = BG_CHAR_ADDR(4) + tileStart * 32; + } + + if (gPokemonStorageSystemPtr->unk_2700 == NULL) + { + FreeSpriteTilesByTag(0x0002); + FreeSpritePaletteByTag(0xdac7); + } +} +#else + +const struct SpriteSheet gUnknown_083B6DCC = {ePokemonStorageSystem.unk_2784, 0x800, 0x0002}; +const struct SpritePalette gUnknown_083B6DD4 = {ePokemonStorageSystem.unk_2704, 0xdac7}; +const struct SpriteTemplate gSpriteTemplate_83B6DDC = { + 0x0002, 0xdac7, &gOamData_83B6EAC, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; + +__attribute__((naked)) void sub_80980D4(void) +{ + asm_unified("\tpush {r4,r5,lr}\n" + "\tsub sp, 0x28\n" + "\tldr r0, _08098150 @ =gUnknown_083B6DCC\n" + "\tldr r1, [r0, 0x4]\n" + "\tldr r0, [r0]\n" + "\tstr r0, [sp, 0x18]\n" + "\tstr r1, [sp, 0x1C]\n" + "\tldr r0, _08098154 @ =gUnknown_083B6DD4\n" + "\tldr r1, [r0, 0x4]\n" + "\tldr r0, [r0]\n" + "\tstr r0, [sp, 0x20]\n" + "\tstr r1, [sp, 0x24]\n" + "\tmov r1, sp\n" + "\tldr r0, _08098158 @ =gSpriteTemplate_83B6DDC\n" + "\tldm r0!, {r2-r4}\n" + "\tstm r1!, {r2-r4}\n" + "\tldm r0!, {r2-r4}\n" + "\tstm r1!, {r2-r4}\n" + "\tmovs r1, 0\n" + "\tadd r5, sp, 0x18\n" + "\tldr r4, _0809815C @ =gSharedMem + 0x2784\n" + "\tmovs r3, 0\n" + "\tldr r2, _08098160 @ =0x000007ff\n" + "_08098102:\n" + "\tadds r0, r1, r4\n" + "\tstrb r3, [r0]\n" + "\tadds r0, r1, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r1, r0, 16\n" + "\tcmp r1, r2\n" + "\tbls _08098102\n" + "\tmovs r1, 0\n" + "\tldr r3, _08098164 @ =gSharedMem + 0x2704\n" + "\tmovs r2, 0\n" + "_08098116:\n" + "\tlsls r0, r1, 1\n" + "\tadds r0, r3\n" + "\tstrh r2, [r0]\n" + "\tadds r0, r1, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r1, r0, 16\n" + "\tcmp r1, 0xF\n" + "\tbls _08098116\n" + "\tldr r0, _08098168 @ =gSharedMem\n" + "\tmovs r1, 0x9C\n" + "\tlsls r1, 6\n" + "\tadds r0, r1\n" + "\tmovs r1, 0\n" + "\tstr r1, [r0]\n" + "\tadds r0, r5, 0\n" + "\tbl LoadSpriteSheet\n" + "\tlsls r0, 16\n" + "\tlsrs r5, r0, 16\n" + "\tcmp r5, 0\n" + "\tbeq _080981C4\n" + "\tadd r0, sp, 0x20\n" + "\tbl LoadSpritePalette\n" + "\tlsls r0, 24\n" + "\tlsrs r4, r0, 24\n" + "\tcmp r4, 0xFF\n" + "\tbeq _080981C4\n" + "\tb _080981B0\n" + "\t.align 2, 0\n" + "_08098150: .4byte gUnknown_083B6DCC\n" + "_08098154: .4byte gUnknown_083B6DD4\n" + "_08098158: .4byte gSpriteTemplate_83B6DDC\n" + "_0809815C: .4byte gSharedMem + 0x2784\n" + "_08098160: .4byte 0x000007ff\n" + "_08098164: .4byte gSharedMem + 0x2704\n" + "_08098168: .4byte gSharedMem\n" + "_0809816C:\n" + "\tldr r2, _0809819C @ =gSharedMem\n" + "\tmovs r0, 0x9C\n" + "\tlsls r0, 6\n" + "\tadds r3, r2, r0\n" + "\tlsls r0, r1, 4\n" + "\tadds r0, r1\n" + "\tlsls r0, 2\n" + "\tldr r1, _080981A0 @ =gSprites\n" + "\tadds r0, r1\n" + "\tstr r0, [r3]\n" + "\tlsls r0, r4, 4\n" + "\tmovs r1, 0x80\n" + "\tlsls r1, 1\n" + "\tadds r0, r1\n" + "\tldr r3, _080981A4 @ =0x000026fa\n" + "\tadds r1, r2, r3\n" + "\tstrh r0, [r1]\n" + "\tldr r4, _080981A8 @ =0x000026fc\n" + "\tadds r2, r4\n" + "\tlsls r0, r5, 5\n" + "\tldr r1, _080981AC @ =0x06010000\n" + "\tadds r0, r1\n" + "\tstr r0, [r2]\n" + "\tb _080981C4\n" + "\t.align 2, 0\n" + "_0809819C: .4byte gSharedMem\n" + "_080981A0: .4byte gSprites\n" + "_080981A4: .4byte 0x000026fa\n" + "_080981A8: .4byte 0x000026fc\n" + "_080981AC: .4byte 0x06010000\n" + "_080981B0:\n" + "\tmov r0, sp\n" + "\tmovs r1, 0x28\n" + "\tmovs r2, 0x30\n" + "\tmovs r3, 0\n" + "\tbl CreateSprite\n" + "\tlsls r0, 24\n" + "\tlsrs r1, r0, 24\n" + "\tcmp r1, 0x40\n" + "\tbne _0809816C\n" + "_080981C4:\n" + "\tldr r0, _080981E8 @ =gSharedMem\n" + "\tmovs r2, 0x9C\n" + "\tlsls r2, 6\n" + "\tadds r0, r2\n" + "\tldr r0, [r0]\n" + "\tcmp r0, 0\n" + "\tbne _080981DE\n" + "\tmovs r0, 0x2\n" + "\tbl FreeSpriteTilesByTag\n" + "\tldr r0, _080981EC @ =0x0000dac7\n" + "\tbl FreeSpritePaletteByTag\n" + "_080981DE:\n" + "\tadd sp, 0x28\n" + "\tpop {r4,r5}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_080981E8: .4byte gSharedMem\n" + "_080981EC: .4byte 0x0000dac7"); +} +#endif + +extern const struct StorageAction gPCStorageActionTexts[]; + asm(".section .text.8098898"); void PrintStorageActionText(u8 index) { @@ -1564,3 +1767,31 @@ void PrintStorageActionText(u8 index) { ptr[0] = EOS; MenuPrint(gPokemonStorageSystemPtr->unk_2694, 11, 17); } + +// FIXME: move this back + +const struct StorageAction gPCStorageActionTexts[] = { + {PCText_ExitBox, 0}, + {PCText_WhatYouDo, 0}, + {PCText_PickATheme, 0}, + {PCText_PickAWallpaper, 0}, + {PCText_IsSelected, 1}, + {PCText_JumpToWhichBox, 0}, + {PCText_DepositInWhichBox, 0}, + {PCText_WasDeposited, 1}, + {PCText_BoxIsFull, 0}, + {PCText_ReleasePoke, 0}, + {PCText_WasReleased, 4}, + {PCText_ByeBye, 6}, + {PCText_MarkPoke, 0}, + {PCText_LastPoke, 0}, + {PCText_PartyFull, 0}, + {PCText_HoldingPoke, 0}, + {PCText_WhichOneWillTake, 0}, + {PCText_CantReleaseEgg, 0}, + {PCText_ContinueBox, 0}, + {PCText_CameBack, 1}, + {PCText_Worried, 0}, + {PCText_Surprise, 0}, + {PCText_PleaseRemoveMail, 0} +}; -- cgit v1.2.3 From ebae5167939d1a10a2a37324063bb4f70c43a4ea Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 9 Jan 2018 17:29:50 -0500 Subject: through sub_8098350 --- asm/pokemon_storage_system.s | 248 --------------------------------- include/mon_markings.h | 1 + include/pokemon_storage_system.h | 11 +- src/pokemon/pokemon_storage_system_2.c | 58 ++++++++ 4 files changed, 68 insertions(+), 250 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index eaed44102..a96857b35 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,254 +5,6 @@ .text - thumb_func_start sub_80981F0 -sub_80981F0: @ 80981F0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0xC - adds r7, r1, 0 - lsls r0, 16 - lsrs r4, r0, 16 - ldr r6, _08098274 @ =gSharedMem - movs r0, 0x9C - lsls r0, 6 - adds r0, r6 - mov r8, r0 - ldr r0, [r0] - cmp r0, 0 - beq _080982A6 - cmp r4, 0 - beq _0809829C - lsls r0, r4, 3 - ldr r1, _08098278 @ =gMonFrontPicTable - adds r0, r1 - ldr r2, _0809827C @ =gMonFrontPicCoords - lsls r1, r4, 2 - adds r1, r2 - ldrb r1, [r1] - ldr r2, _08098280 @ =0x00004784 - adds r3, r6, r2 - ldr r2, _08098284 @ =0x00002784 - adds r5, r6, r2 - str r5, [sp] - str r4, [sp, 0x4] - str r7, [sp, 0x8] - movs r2, 0x1 - bl HandleLoadSpecialPokePic - ldr r1, _08098288 @ =0x000011e8 - adds r0, r6, r1 - ldr r0, [r0] - ldr r2, _0809828C @ =0x00002704 - adds r4, r6, r2 - adds r1, r4, 0 - bl LZ77UnCompWram - ldr r1, _08098290 @ =0x000026fc - adds r0, r6, r1 - ldr r1, [r0] - ldr r2, _08098294 @ =0x04000200 - adds r0, r5, 0 - bl CpuSet - ldr r2, _08098298 @ =0x000026fa - adds r0, r6, r2 - ldrh r1, [r0] - adds r0, r4, 0 - movs r2, 0x20 - bl LoadPalette - mov r0, r8 - ldr r1, [r0] - adds r1, 0x3E - ldrb r2, [r1] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - b _080982A6 - .align 2, 0 -_08098274: .4byte gSharedMem -_08098278: .4byte gMonFrontPicTable -_0809827C: .4byte gMonFrontPicCoords -_08098280: .4byte 0x00004784 -_08098284: .4byte 0x00002784 -_08098288: .4byte 0x000011e8 -_0809828C: .4byte 0x00002704 -_08098290: .4byte 0x000026fc -_08098294: .4byte 0x04000200 -_08098298: .4byte 0x000026fa -_0809829C: - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] -_080982A6: - add sp, 0xC - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80981F0 - - thumb_func_start sub_80982B4 -sub_80982B4: @ 80982B4 - push {r4,lr} - ldr r4, _080982E4 @ =gSharedMem - ldr r1, _080982E8 @ =0x000011f0 - adds r0, r4, r1 - ldrh r0, [r0] - cmp r0, 0 - beq _080982F4 - ldr r2, _080982EC @ =0x000011f7 - adds r0, r4, r2 - ldrb r0, [r0] - adds r2, 0xC1 - adds r1, r4, r2 - ldr r1, [r1] - bl sub_80F7A10 - ldr r1, _080982F0 @ =0x000012ac - adds r0, r4, r1 - ldr r1, [r0] - adds r1, 0x3E - ldrb r2, [r1] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - b _08098302 - .align 2, 0 -_080982E4: .4byte gSharedMem -_080982E8: .4byte 0x000011f0 -_080982EC: .4byte 0x000011f7 -_080982F0: .4byte 0x000012ac -_080982F4: - ldr r2, _08098348 @ =0x000012ac - adds r0, r4, r2 - ldr r1, [r0] - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 -_08098302: - strb r0, [r1] - movs r0, 0 - movs r1, 0xB - movs r2, 0x9 - movs r3, 0x11 - bl MenuZeroFillWindowRect - ldr r4, _0809834C @ =gSharedMem + 0x127A - adds r0, r4, 0 - movs r1, 0x1 - movs r2, 0x10 - bl MenuPrint - adds r0, r4, 0 - subs r0, 0x6B - movs r1, 0x1 - movs r2, 0xB - bl MenuPrint - adds r0, r4, 0 - subs r0, 0x46 - movs r1, 0 - movs r2, 0xD - bl MenuPrint - subs r4, 0x21 - adds r0, r4, 0 - movs r1, 0x1 - movs r2, 0xF - bl MenuPrint - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08098348: .4byte 0x000012ac -_0809834C: .4byte gSharedMem + 0x127A - thumb_func_end sub_80982B4 - - thumb_func_start sub_8098350 -sub_8098350: @ 8098350 - push {r4,r5,lr} - sub sp, 0x10 - ldr r5, _080983A0 @ =gSharedMem - ldr r1, _080983A4 @ =0x000011f0 - adds r0, r5, r1 - ldrh r2, [r0] - cmp r2, 0 - beq _080983B4 - ldr r0, _080983A8 @ =0x06007800 - ldr r3, _080983AC @ =gUnknown_02039760 - movs r1, 0x1 - str r1, [sp] - movs r1, 0 - str r1, [sp, 0x4] - movs r1, 0x8 - str r1, [sp, 0x8] - movs r1, 0x2 - str r1, [sp, 0xC] - movs r1, 0x1 - movs r2, 0 - bl sub_809D034 - movs r4, 0 - ldr r0, _080983B0 @ =0x000012b0 - adds r5, r0 -_08098382: - lsls r0, r4, 2 - adds r0, r5 - ldr r0, [r0] - lsls r1, r4, 1 - adds r1, 0x1 - lsls r1, 24 - lsrs r1, 24 - bl StartSpriteAnimIfDifferent - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x1 - bls _08098382 - b _080983EC - .align 2, 0 -_080983A0: .4byte gSharedMem -_080983A4: .4byte 0x000011f0 -_080983A8: .4byte 0x06007800 -_080983AC: .4byte gUnknown_02039760 -_080983B0: .4byte 0x000012b0 -_080983B4: - ldr r0, _080983F4 @ =0x06007800 - ldr r3, _080983F8 @ =gUnknown_02039760 - movs r1, 0xA - str r1, [sp] - str r2, [sp, 0x4] - movs r1, 0x8 - str r1, [sp, 0x8] - movs r1, 0x2 - str r1, [sp, 0xC] - movs r1, 0x1 - movs r2, 0 - bl sub_809D034 - movs r4, 0 - ldr r1, _080983FC @ =0x000012b0 - adds r5, r1 -_080983D4: - lsls r0, r4, 2 - adds r0, r5 - ldr r0, [r0] - lsls r1, r4, 25 - lsrs r1, 24 - bl StartSpriteAnim - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x1 - bls _080983D4 -_080983EC: - add sp, 0x10 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080983F4: .4byte 0x06007800 -_080983F8: .4byte gUnknown_02039760 -_080983FC: .4byte 0x000012b0 - thumb_func_end sub_8098350 - thumb_func_start sub_8098400 sub_8098400: @ 8098400 push {r4,r5,lr} diff --git a/include/mon_markings.h b/include/mon_markings.h index 5b6abf356..d06264865 100644 --- a/include/mon_markings.h +++ b/include/mon_markings.h @@ -26,5 +26,6 @@ void sub_80F7418(u8 markings, s16 x, s16 y); void sub_80F7470(void); bool8 sub_80F7500(void); struct Sprite *sub_80F7940(u16 tileTag, u16 paletteTag, const u16 *palette); +void sub_80F7A10(u8 markings, void *dest); #endif //POKERUBY_MON_MARKINGS_H diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index cbdec8999..f91a5f08e 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -85,7 +85,8 @@ struct PokemonStorageSystemData { u8 filler_08b6[0x4a8]; s16 unk_0d5e; s16 unk_0d60; - u8 filler_0d62[0x48a]; + u8 filler_0d62[0x486]; + u8 *unk_11e8; u32 unk_11ec; u16 unk_11f0; u16 unk_11f2; @@ -94,7 +95,11 @@ struct PokemonStorageSystemData { u8 unk_11f7; u8 unk_11f8; u8 unk_11f9; - u8 unk_11fa[0xb2]; + u8 unk_11fa[0x15]; + u8 unk_120f[0x25]; + u8 unk_1234[0x25]; + u8 unk_1259[0x21]; + u8 unk_127a[0x32]; struct Sprite *unk_12ac; struct Sprite *unk_12b0[2]; u16 *unk_12b8; @@ -114,6 +119,8 @@ struct PokemonStorageSystemData { u16 unk_2704[0x10]; u8 filler_2724[0x60]; u8 unk_2784[0x800]; + u8 filler_2f84[0x1800]; + u8 unk_4784[0x800]; }; extern EWRAM_DATA u16 gUnknown_02039760[0x600]; diff --git a/src/pokemon/pokemon_storage_system_2.c b/src/pokemon/pokemon_storage_system_2.c index f8ae1c013..7f97d7681 100644 --- a/src/pokemon/pokemon_storage_system_2.c +++ b/src/pokemon/pokemon_storage_system_2.c @@ -1,7 +1,10 @@ // Includes #include "global.h" +#include "decompress.h" #include "constants/songs.h" +#include "constants/species.h" +#include "data2.h" #include "sound.h" #include "ewram.h" #include "task.h" @@ -1685,6 +1688,61 @@ __attribute__((naked)) void sub_80980D4(void) } #endif +void sub_80981F0(u16 species, u32 pid) +{ + if (gPokemonStorageSystemPtr->unk_2700) + { + if (species != SPECIES_NONE) + { + HandleLoadSpecialPokePic(gMonFrontPicTable + species, gMonFrontPicCoords[species].coords, 1, (intptr_t)gPokemonStorageSystemPtr->unk_4784, gPokemonStorageSystemPtr->unk_2784, species, pid); + LZ77UnCompWram(gPokemonStorageSystemPtr->unk_11e8, gPokemonStorageSystemPtr->unk_2704); + CpuCopy32(gPokemonStorageSystemPtr->unk_2784, gPokemonStorageSystemPtr->unk_26fc, 0x800); + LoadPalette(gPokemonStorageSystemPtr->unk_2704, gPokemonStorageSystemPtr->unk_26fa, 0x20); + gPokemonStorageSystemPtr->unk_2700->invisible = FALSE; + } + else + { + gPokemonStorageSystemPtr->unk_2700->invisible = TRUE; + } + } +} + +void sub_80982B4(void) +{ + if (gPokemonStorageSystemPtr->unk_11f0) + { + sub_80F7A10(gPokemonStorageSystemPtr->unk_11f7, gPokemonStorageSystemPtr->unk_12b8); + gPokemonStorageSystemPtr->unk_12ac->invisible = FALSE; + } + else + { + gPokemonStorageSystemPtr->unk_12ac->invisible = TRUE; + } + MenuZeroFillWindowRect(0, 11, 9, 17); + MenuPrint(gPokemonStorageSystemPtr->unk_127a, 1, 16); + MenuPrint(gPokemonStorageSystemPtr->unk_120f, 1, 11); + MenuPrint(gPokemonStorageSystemPtr->unk_1234, 0, 13); + MenuPrint(gPokemonStorageSystemPtr->unk_1259, 1, 15); +} + +void sub_8098350(void) +{ + u16 i; + + if (gPokemonStorageSystemPtr->unk_11f0) + { + sub_809D034(BG_SCREEN_ADDR(15), 1, 0, gUnknown_02039760, 1, 0, 8, 2); + for (i = 0; i < 2; i++) + StartSpriteAnimIfDifferent(gPokemonStorageSystemPtr->unk_12b0[i], i * 2 + 1); + } + else + { + sub_809D034(BG_SCREEN_ADDR(15), 1, 0, gUnknown_02039760, 10, 0, 8, 2); + for (i = 0; i < 2; i++) + StartSpriteAnim(gPokemonStorageSystemPtr->unk_12b0[i], i * 2); + } +} + extern const struct StorageAction gPCStorageActionTexts[]; asm(".section .text.8098898"); -- cgit v1.2.3 From 2eb10c6f2d16729dde12b0fd26cac3f45b85a557 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 9 Jan 2018 20:18:46 -0500 Subject: close swiss cheese in pokemon_storage_system_2.c --- asm/pokemon_storage_system.s | 589 --------------------------------- data/pokemon_storage_system.s | 57 ---- include/graphics.h | 4 + include/pokemon_storage_system.h | 12 +- ld_script.txt | 4 +- src/pokemon/pokemon_storage_system_2.c | 282 ++++++++++++++-- 6 files changed, 270 insertions(+), 678 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index a96857b35..bf3d49532 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,595 +5,6 @@ .text - thumb_func_start sub_8098400 -sub_8098400: @ 8098400 - push {r4,r5,lr} - sub sp, 0x14 - ldr r1, _0809847C @ =REG_BG1CNT - ldr r2, _08098480 @ =0x00000f01 - adds r0, r2, 0 - strh r0, [r1] - ldr r0, _08098484 @ =gPSSMenuMisc_Gfx - ldr r1, _08098488 @ =0x06006800 - bl LZ77UnCompVram - ldr r0, _0809848C @ =gPSSMenuMisc_Tilemap - ldr r5, _08098490 @ =gSharedMem + 0xA8 - adds r1, r5, 0 - bl LZ77UnCompWram - ldr r0, _08098494 @ =gPSSMenu3_Pal - movs r1, 0x20 - movs r2, 0x20 - bl LoadPalette - ldr r0, _08098498 @ =gPSSMenu4_Pal - movs r1, 0x30 - movs r2, 0x20 - bl LoadPalette - ldr r4, _0809849C @ =0x06007800 - add r1, sp, 0x10 - movs r0, 0 - strh r0, [r1] - ldr r0, _080984A0 @ =0x040000d4 - str r1, [r0] - str r4, [r0, 0x4] - ldr r1, _080984A4 @ =0x81000400 - str r1, [r0, 0x8] - ldr r0, [r0, 0x8] - bl sub_8098780 - ldr r0, _080984A8 @ =gUnknown_0203847C - ldrb r0, [r0] - cmp r0, 0 - beq _080984AC - movs r0, 0x1 - bl sub_8098690 - movs r0, 0x1 - bl sub_8099200 - movs r0, 0 - str r0, [sp] - str r0, [sp, 0x4] - movs r0, 0xC - str r0, [sp, 0x8] - movs r0, 0x16 - str r0, [sp, 0xC] - adds r0, r4, 0 - movs r1, 0xA - movs r2, 0 - adds r3, r5, 0 - bl sub_809D034 - b _080984CC - .align 2, 0 -_0809847C: .4byte REG_BG1CNT -_08098480: .4byte 0x00000f01 -_08098484: .4byte gPSSMenuMisc_Gfx -_08098488: .4byte 0x06006800 -_0809848C: .4byte gPSSMenuMisc_Tilemap -_08098490: .4byte gSharedMem + 0xA8 -_08098494: .4byte gPSSMenu3_Pal -_08098498: .4byte gPSSMenu4_Pal -_0809849C: .4byte 0x06007800 -_080984A0: .4byte 0x040000d4 -_080984A4: .4byte 0x81000400 -_080984A8: .4byte gUnknown_0203847C -_080984AC: - str r0, [sp] - movs r0, 0x14 - str r0, [sp, 0x4] - movs r0, 0xC - str r0, [sp, 0x8] - movs r0, 0x2 - str r0, [sp, 0xC] - adds r0, r4, 0 - movs r1, 0xA - movs r2, 0 - adds r3, r5, 0 - bl sub_809D034 - movs r0, 0x1 - bl sub_8098690 -_080984CC: - ldr r0, _080984E0 @ =gSharedMem - ldr r1, _080984E4 @ =0x000008af - adds r0, r1 - movs r1, 0 - strb r1, [r0] - add sp, 0x14 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080984E0: .4byte gSharedMem -_080984E4: .4byte 0x000008af - thumb_func_end sub_8098400 - - thumb_func_start sub_80984E8 -sub_80984E8: @ 80984E8 - push {lr} - ldr r1, _08098510 @ =gSharedMem - ldr r0, _08098514 @ =0x000008a8 - adds r2, r1, r0 - movs r3, 0 - movs r0, 0x14 - strh r0, [r2] - ldr r0, _08098518 @ =0x000008aa - adds r2, r1, r0 - movs r0, 0x2 - strh r0, [r2] - ldr r0, _0809851C @ =0x000008ad - adds r1, r0 - strb r3, [r1] - movs r0, 0 - bl sub_8099200 - pop {r0} - bx r0 - .align 2, 0 -_08098510: .4byte gSharedMem -_08098514: .4byte 0x000008a8 -_08098518: .4byte 0x000008aa -_0809851C: .4byte 0x000008ad - thumb_func_end sub_80984E8 - - thumb_func_start sub_8098520 -sub_8098520: @ 8098520 - push {r4,r5,lr} - sub sp, 0x10 - ldr r3, _08098578 @ =gSharedMem - ldr r0, _0809857C @ =0x000008ad - adds r5, r3, r0 - ldrb r0, [r5] - cmp r0, 0x14 - beq _08098592 - ldr r0, _08098580 @ =0x000008a8 - adds r1, r3, r0 - ldrh r0, [r1] - subs r0, 0x1 - movs r4, 0 - strh r0, [r1] - ldr r0, _08098584 @ =0x000008aa - adds r2, r3, r0 - ldrh r0, [r2] - adds r0, 0x1 - strh r0, [r2] - ldr r0, _08098588 @ =0x06007800 - adds r3, 0xA8 - str r4, [sp] - ldrh r1, [r1] - str r1, [sp, 0x4] - movs r1, 0xC - str r1, [sp, 0x8] - ldrh r1, [r2] - str r1, [sp, 0xC] - movs r1, 0xA - movs r2, 0 - bl sub_809D034 - movs r0, 0x8 - bl sub_80994A8 - ldrb r0, [r5] - adds r0, 0x1 - strb r0, [r5] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x14 - beq _0809858C - movs r0, 0x1 - b _08098594 - .align 2, 0 -_08098578: .4byte gSharedMem -_0809857C: .4byte 0x000008ad -_08098580: .4byte 0x000008a8 -_08098584: .4byte 0x000008aa -_08098588: .4byte 0x06007800 -_0809858C: - ldr r1, _0809859C @ =gUnknown_0203847C - movs r0, 0x1 - strb r0, [r1] -_08098592: - movs r0, 0 -_08098594: - add sp, 0x10 - pop {r4,r5} - pop {r1} - bx r1 - .align 2, 0 -_0809859C: .4byte gUnknown_0203847C - thumb_func_end sub_8098520 - - thumb_func_start add_to_c3_somehow -add_to_c3_somehow: @ 80985A0 - ldr r1, _080985BC @ =gSharedMem - ldr r0, _080985C0 @ =0x000008a8 - adds r2, r1, r0 - movs r3, 0 - movs r0, 0 - strh r0, [r2] - ldr r0, _080985C4 @ =0x000008aa - adds r2, r1, r0 - movs r0, 0x16 - strh r0, [r2] - ldr r0, _080985C8 @ =0x000008ad - adds r1, r0 - strb r3, [r1] - bx lr - .align 2, 0 -_080985BC: .4byte gSharedMem -_080985C0: .4byte 0x000008a8 -_080985C4: .4byte 0x000008aa -_080985C8: .4byte 0x000008ad - thumb_func_end add_to_c3_somehow - - thumb_func_start sub_80985CC -sub_80985CC: @ 80985CC - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x10 - ldr r3, _08098640 @ =gSharedMem - ldr r0, _08098644 @ =0x000008ad - adds r6, r3, r0 - ldrb r0, [r6] - cmp r0, 0x14 - beq _0809867A - ldr r2, _08098648 @ =0x000008a8 - adds r1, r3, r2 - ldrh r0, [r1] - adds r0, 0x1 - movs r2, 0 - mov r9, r2 - strh r0, [r1] - ldr r0, _0809864C @ =0x000008aa - adds r4, r3, r0 - ldrh r0, [r4] - subs r0, 0x1 - strh r0, [r4] - ldr r5, _08098650 @ =0x06007800 - adds r3, 0xA8 - mov r8, r3 - str r2, [sp] - ldrh r0, [r1] - str r0, [sp, 0x4] - movs r7, 0xC - str r7, [sp, 0x8] - ldrh r0, [r4] - str r0, [sp, 0xC] - adds r0, r5, 0 - movs r1, 0xA - bl sub_809D034 - ldrh r2, [r4] - movs r4, 0x1 - str r4, [sp] - adds r0, r5, 0 - movs r1, 0xA - movs r3, 0xC - bl sub_809D16C - movs r0, 0x8 - negs r0, r0 - bl sub_80994A8 - ldrb r0, [r6] - adds r0, 0x1 - strb r0, [r6] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x14 - beq _08098654 - movs r0, 0x1 - b _0809867C - .align 2, 0 -_08098640: .4byte gSharedMem -_08098644: .4byte 0x000008ad -_08098648: .4byte 0x000008a8 -_0809864C: .4byte 0x000008aa -_08098650: .4byte 0x06007800 -_08098654: - ldr r0, _0809868C @ =gUnknown_0203847C - movs r1, 0 - strb r1, [r0] - bl sub_809954C - bl party_compaction - str r7, [sp] - mov r2, r9 - str r2, [sp, 0x4] - str r4, [sp, 0x8] - movs r0, 0x2 - str r0, [sp, 0xC] - adds r0, r5, 0 - movs r1, 0x15 - movs r2, 0 - mov r3, r8 - bl sub_809D034 -_0809867A: - movs r0, 0 -_0809867C: - add sp, 0x10 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0809868C: .4byte gUnknown_0203847C - thumb_func_end sub_80985CC - - thumb_func_start sub_8098690 -sub_8098690: @ 8098690 - push {lr} - sub sp, 0x10 - lsls r0, 24 - cmp r0, 0 - beq _080986C0 - ldr r0, _080986B8 @ =0x06007800 - ldr r3, _080986BC @ =gSharedMem + 0xA8 - movs r1, 0xC - str r1, [sp] - movs r1, 0 - str r1, [sp, 0x4] - movs r1, 0x9 - str r1, [sp, 0x8] - movs r1, 0x2 - str r1, [sp, 0xC] - movs r1, 0x15 - movs r2, 0 - bl sub_809D034 - b _080986DA - .align 2, 0 -_080986B8: .4byte 0x06007800 -_080986BC: .4byte gSharedMem + 0xA8 -_080986C0: - ldr r0, _080986E0 @ =0x06007800 - ldr r3, _080986E4 @ =gSharedMem + 0xA8 - movs r1, 0xC - str r1, [sp] - movs r2, 0x2 - str r2, [sp, 0x4] - movs r1, 0x9 - str r1, [sp, 0x8] - str r2, [sp, 0xC] - movs r1, 0x15 - movs r2, 0 - bl sub_809D034 -_080986DA: - add sp, 0x10 - pop {r0} - bx r0 - .align 2, 0 -_080986E0: .4byte 0x06007800 -_080986E4: .4byte gSharedMem + 0xA8 - thumb_func_end sub_8098690 - - thumb_func_start sub_80986E8 -sub_80986E8: @ 80986E8 - ldr r1, _08098704 @ =gSharedMem - ldr r2, _08098708 @ =0x000008af - adds r0, r1, r2 - movs r3, 0x1 - strb r3, [r0] - movs r0, 0x8B - lsls r0, 4 - adds r2, r1, r0 - movs r0, 0x1E - strb r0, [r2] - ldr r2, _0809870C @ =0x000008b1 - adds r1, r2 - strb r3, [r1] - bx lr - .align 2, 0 -_08098704: .4byte gSharedMem -_08098708: .4byte 0x000008af -_0809870C: .4byte 0x000008b1 - thumb_func_end sub_80986E8 - - thumb_func_start sub_8098710 -sub_8098710: @ 8098710 - push {lr} - ldr r0, _0809872C @ =gSharedMem - ldr r2, _08098730 @ =0x000008af - adds r1, r0, r2 - ldrb r0, [r1] - cmp r0, 0 - beq _08098728 - movs r0, 0 - strb r0, [r1] - movs r0, 0x1 - bl sub_8098690 -_08098728: - pop {r0} - bx r0 - .align 2, 0 -_0809872C: .4byte gSharedMem -_08098730: .4byte 0x000008af - thumb_func_end sub_8098710 - - thumb_func_start sub_8098734 -sub_8098734: @ 8098734 - push {lr} - ldr r2, _08098774 @ =gSharedMem - ldr r1, _08098778 @ =0x000008af - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _08098770 - movs r0, 0x8B - lsls r0, 4 - adds r1, r2, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x1E - bls _08098770 - movs r0, 0 - strb r0, [r1] - movs r3, 0 - ldr r0, _0809877C @ =0x000008b1 - adds r1, r2, r0 - ldrb r0, [r1] - cmp r0, 0 - bne _08098768 - movs r3, 0x1 -_08098768: - strb r3, [r1] - ldrb r0, [r1] - bl sub_8098690 -_08098770: - pop {r0} - bx r0 - .align 2, 0 -_08098774: .4byte gSharedMem -_08098778: .4byte 0x000008af -_0809877C: .4byte 0x000008b1 - thumb_func_end sub_8098734 - - thumb_func_start sub_8098780 -sub_8098780: @ 8098780 - push {r4-r6,lr} - sub sp, 0x10 - movs r4, 0x1 - ldr r6, _080987D4 @ =gSharedMem + 0xA8 - movs r5, 0x80 - lsls r5, 9 -_0809878C: - movs r0, 0x64 - muls r0, r4 - ldr r1, _080987D8 @ =gPlayerParty - adds r0, r1 - movs r1, 0xB - bl GetMonData - cmp r0, 0 - beq _080987A0 - movs r0, 0x1 -_080987A0: - movs r1, 0x10 - cmp r0, 0 - beq _080987A8 - movs r1, 0xC -_080987A8: - lsrs r2, r5, 16 - str r1, [sp] - movs r0, 0x4 - str r0, [sp, 0x4] - str r0, [sp, 0x8] - movs r0, 0x3 - str r0, [sp, 0xC] - adds r0, r6, 0 - movs r1, 0x7 - adds r3, r6, 0 - bl sub_809D104 - movs r0, 0xC0 - lsls r0, 10 - adds r5, r0 - adds r4, 0x1 - cmp r4, 0x5 - ble _0809878C - add sp, 0x10 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080987D4: .4byte gSharedMem + 0xA8 -_080987D8: .4byte gPlayerParty - thumb_func_end sub_8098780 - - thumb_func_start sub_80987DC -sub_80987DC: @ 80987DC - push {lr} - sub sp, 0x10 - bl sub_8098780 - ldr r0, _08098804 @ =0x06007800 - ldr r3, _08098808 @ =gSharedMem + 0xA8 - movs r1, 0 - str r1, [sp] - str r1, [sp, 0x4] - movs r1, 0xC - str r1, [sp, 0x8] - movs r1, 0x16 - str r1, [sp, 0xC] - movs r1, 0xA - movs r2, 0 - bl sub_809D034 - add sp, 0x10 - pop {r0} - bx r0 - .align 2, 0 -_08098804: .4byte 0x06007800 -_08098808: .4byte gSharedMem + 0xA8 - thumb_func_end sub_80987DC - - thumb_func_start sub_809880C -sub_809880C: @ 809880C - push {lr} - ldr r0, _08098828 @ =gSharedMem - ldr r1, _0809882C @ =0x000008ae - adds r0, r1 - movs r1, 0 - strb r1, [r0] - movs r0, 0x6 - bl PlaySE - bl sub_80984E8 - pop {r0} - bx r0 - .align 2, 0 -_08098828: .4byte gSharedMem -_0809882C: .4byte 0x000008ae - thumb_func_end sub_809880C - - thumb_func_start sub_8098830 -sub_8098830: @ 8098830 - push {r4,r5,lr} - ldr r5, _08098848 @ =gSharedMem - ldr r0, _0809884C @ =0x000008ae - adds r4, r5, r0 - ldrb r0, [r4] - cmp r0, 0x1 - beq _08098866 - cmp r0, 0x1 - bgt _08098850 - cmp r0, 0 - beq _08098856 - b _08098890 - .align 2, 0 -_08098848: .4byte gSharedMem -_0809884C: .4byte 0x000008ae -_08098850: - cmp r0, 0x2 - beq _0809888C - b _08098890 -_08098856: - bl sub_8098520 - lsls r0, 24 - cmp r0, 0 - bne _08098890 - bl sub_809B068 - b _0809887E -_08098866: - bl sub_809AC00 - lsls r0, 24 - cmp r0, 0 - bne _08098890 - ldr r1, _08098888 @ =0x000011f6 - adds r0, r5, r1 - ldrb r0, [r0] - cmp r0, 0 - beq _0809887E - bl BoxSetMosaic -_0809887E: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _08098890 - .align 2, 0 -_08098888: .4byte 0x000011f6 -_0809888C: - movs r0, 0 - b _08098892 -_08098890: - movs r0, 0x1 -_08098892: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8098830 - -.section .text_8098A38 - thumb_func_start sub_8098A38 sub_8098A38: @ 8098A38 push {r4,lr} diff --git a/data/pokemon_storage_system.s b/data/pokemon_storage_system.s index d21bc324f..66cc84000 100644 --- a/data/pokemon_storage_system.s +++ b/data/pokemon_storage_system.s @@ -3,63 +3,6 @@ .section .rodata - .align 2 -gOamData_83B6EAC:: @ 83B6EAC - .2byte 0x0000 - .2byte 0xC000 - .2byte 0x0000 - - .align 2 -gOamData_83B6EB4:: @ 83B6EB4 - .2byte 0x4000 - .2byte 0x0000 - .2byte 0x0000 - - .align 2 -gSpriteAnim_83B6EBC:: @ 83B6EBC - obj_image_anim_frame 0, 5 - obj_image_anim_end - - .align 2 -gSpriteAnim_83B6EC4:: @ 83B6EC4 - obj_image_anim_frame 2, 8 - obj_image_anim_frame 4, 8 - obj_image_anim_frame 6, 8 - obj_image_anim_jump 0 - - .align 2 -gSpriteAnim_83B6ED4:: @ 83B6ED4 - obj_image_anim_frame 8, 5 - obj_image_anim_end - - .align 2 -gSpriteAnim_83B6EDC:: @ 83B6EDC - obj_image_anim_frame 10, 8 - obj_image_anim_frame 4, 8 - obj_image_anim_frame 12, 8 - obj_image_anim_jump 0 - - .align 2 -gSpriteAnimTable_83B6EEC:: @ 83B6EEC - .4byte gSpriteAnim_83B6EBC - .4byte gSpriteAnim_83B6EC4 - .4byte gSpriteAnim_83B6ED4 - .4byte gSpriteAnim_83B6EDC - - .align 2 -gSpriteTemplate_83B6EFC:: @ 83B6EFC - spr_template 5, 56013, gOamData_83B6EB4, gSpriteAnimTable_83B6EEC, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - - .align 2 -gSpriteTemplate_83B6F14:: @ 83B6F14 - spr_template 15, 56000, gOamData_83B6F2C, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - - .align 2 -gOamData_83B6F2C:: @ 83B6F2C - .2byte 0x0000 - .2byte 0x8000 - .2byte 0x0000 - .align 2 gSpriteAffineAnim_83B6F34:: @ 83B6F34 obj_rot_scal_anim_frame 0xFFFE, 0xFFFE, 0, 120 diff --git a/include/graphics.h b/include/graphics.h index 91ba45acd..a8ac2783d 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -2747,5 +2747,9 @@ extern const u8 gPSSMenuHeader_Gfx[]; extern const u8 gPSSMenuHeader_Tilemap[]; extern const u16 gPSSMenu1_Pal[]; extern const u16 gPSSMenu2_Pal[]; +extern const u8 gPSSMenuMisc_Gfx[]; +extern const u8 gPSSMenuMisc_Tilemap[]; +extern const u16 gPSSMenu3_Pal[]; +extern const u16 gPSSMenu4_Pal[]; #endif // GUARD_GRAPHICS_H diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index f91a5f08e..b82213bb2 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -78,8 +78,16 @@ struct PokemonStorageSystemData { u16 unk_0008; u16 unk_000a; struct PCScreenEffectStruct unk_000c; - struct UnkStruct_2000020 unk_0020[274]; // refine size later - u8 filler_08b0[2]; + struct UnkStruct_2000020 unk_0020[17]; // refine size later + u16 unk_00a8[0x400]; + u16 unk_08a8; + u16 unk_08aa; + u8 unk_08ac; + u8 unk_08ad; + u8 unk_08ae; + u8 unk_08af; + u8 unk_08b0; + bool8 unk_08b1; s16 unk_08b2; u16 unk_08b4; u8 filler_08b6[0x4a8]; diff --git a/ld_script.txt b/ld_script.txt index 2157e6da5..f81caa5bf 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -129,10 +129,8 @@ SECTIONS { asm/unk_text_8095904.o(.text); src/pokemon/pokemon_storage_system.o(.text); src/pokemon/pokemon_storage_system_2.o(.text); - asm/pokemon_storage_system.o(.text); - src/pokemon/pokemon_storage_system_2.o(.text.8098898); src/pokemon/pokemon_storage_system_3.o(.text); - asm/pokemon_storage_system.o(.text_8098A38); + asm/pokemon_storage_system.o(.text); src/pokemon/pokemon_icon.o(.text); src/pokemon/pokemon_summary_screen.o(.text); src/field/script_movement.o(.text); diff --git a/src/pokemon/pokemon_storage_system_2.c b/src/pokemon/pokemon_storage_system_2.c index 7f97d7681..ff6f1f587 100644 --- a/src/pokemon/pokemon_storage_system_2.c +++ b/src/pokemon/pokemon_storage_system_2.c @@ -78,6 +78,9 @@ void sub_80982B4(void); void sub_8098350(void); void sub_8098400(void); void add_to_c3_somehow(void); +void sub_8098780(void); +void sub_8098690(bool8 flag); +void sub_8099200(u8 a0); bool8 sub_80985CC(void); void sub_80986E8(void); void sub_8098710(void); @@ -93,6 +96,8 @@ void sub_8098AA8(u8 a0); void sub_8098B48(void); void sub_8099310(void); bool8 sub_8099374(void); +void sub_80994A8(s16 a0); +void sub_809954C(void); void sub_8099958(void); bool8 sub_8099990(void); void sub_809BB90(void); @@ -109,6 +114,7 @@ void sub_809B0C0(u8 a0); void sub_809B0D4(void); void sub_809B0E0(void); u8 sub_809B0F4(void); +void sub_809B068(void); void sub_809B100(u8 a0); bool8 sub_809B130(void); void sub_809B440(void); @@ -134,6 +140,8 @@ s16 sub_809CF30(void); void sub_809CFDC(struct UnkStruct_2000020 *a0, struct UnkStruct_2000020 *a1, u8 a2); void sub_809CFF0(void); void sub_809D034(void *dest, u16 dLeft, u16 dTop, const void *src, u16 sLeft, u16 sTop, u16 width, u16 height); +void sub_809D104(void *dest, u16 dLeft, u16 dTop, const void *src, u16 sLeft, u16 sTop, u16 width, u16 height); +void sub_809D16C(void *dest, u16 dLeft, u16 dTop, u16 width, u16 height); // .rodata @@ -1743,9 +1751,192 @@ void sub_8098350(void) } } -extern const struct StorageAction gPCStorageActionTexts[]; +void sub_8098400(void) +{ + REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_SCREENBASE(15); + LZ77UnCompVram(gPSSMenuMisc_Gfx, BG_SCREEN_ADDR(13)); + LZ77UnCompWram(gPSSMenuMisc_Tilemap, gPokemonStorageSystemPtr->unk_00a8); + LoadPalette(gPSSMenu3_Pal, 0x20, 0x20); + LoadPalette(gPSSMenu4_Pal, 0x30, 0x20); + DmaClear16(3, BG_SCREEN_ADDR(15), 0x800); + sub_8098780(); + if (gUnknown_0203847C) + { + sub_8098690(TRUE); + sub_8099200(1); + sub_809D034(BG_SCREEN_ADDR(15), 10, 0, gPokemonStorageSystemPtr->unk_00a8, 0, 0, 12, 22); + } + else + { + sub_809D034(BG_SCREEN_ADDR(15), 10, 0, gPokemonStorageSystemPtr->unk_00a8, 0, 20, 12, 2); + sub_8098690(TRUE); + } + gPokemonStorageSystemPtr->unk_08af = 0; +} + +void sub_80984E8(void) +{ + gPokemonStorageSystemPtr->unk_08a8 = 20; + gPokemonStorageSystemPtr->unk_08aa = 2; + gPokemonStorageSystemPtr->unk_08ad = 0; + sub_8099200(0); +} + +bool8 sub_8098520(void) +{ + if (gPokemonStorageSystemPtr->unk_08ad == 20) + return FALSE; + gPokemonStorageSystemPtr->unk_08a8--; + gPokemonStorageSystemPtr->unk_08aa++; + sub_809D034(BG_SCREEN_ADDR(15), 10, 0, gPokemonStorageSystemPtr->unk_00a8, 0, gPokemonStorageSystemPtr->unk_08a8, 12, gPokemonStorageSystemPtr->unk_08aa); + sub_80994A8(8); + if (++gPokemonStorageSystemPtr->unk_08ad == 20) + { + gUnknown_0203847C = 1; + return FALSE; + } + return TRUE; +} + +void add_to_c3_somehow(void) +{ + gPokemonStorageSystemPtr->unk_08a8 = 0; + gPokemonStorageSystemPtr->unk_08aa = 22; + gPokemonStorageSystemPtr->unk_08ad = 0; +} + +bool8 sub_80985CC(void) +{ + if (gPokemonStorageSystemPtr->unk_08ad == 20) + return FALSE; + gPokemonStorageSystemPtr->unk_08a8++; + gPokemonStorageSystemPtr->unk_08aa--; + sub_809D034(BG_SCREEN_ADDR(15), 10, 0, gPokemonStorageSystemPtr->unk_00a8, 0, gPokemonStorageSystemPtr->unk_08a8, 12, gPokemonStorageSystemPtr->unk_08aa); + sub_809D16C(BG_SCREEN_ADDR(15), 10, gPokemonStorageSystemPtr->unk_08aa, 12, 1); + sub_80994A8(-8); + if (++gPokemonStorageSystemPtr->unk_08ad == 20) + { + gUnknown_0203847C = 0; + sub_809954C(); + party_compaction(); + sub_809D034(BG_SCREEN_ADDR(15), 21, 0, gPokemonStorageSystemPtr->unk_00a8, 12, 0, 1, 2); + return FALSE; + } + return TRUE; +} + +void sub_8098690(bool8 flag) +{ + if (flag) + sub_809D034(BG_SCREEN_ADDR(15), 21, 0, gPokemonStorageSystemPtr->unk_00a8, 12, 0, 9, 2); + else + sub_809D034(BG_SCREEN_ADDR(15), 21, 0, gPokemonStorageSystemPtr->unk_00a8, 12, 2, 9, 2); +} + +void sub_80986E8(void) +{ + gPokemonStorageSystemPtr->unk_08af = 1; + gPokemonStorageSystemPtr->unk_08b0 = 30; + gPokemonStorageSystemPtr->unk_08b1 = 1; +} + +void sub_8098710(void) +{ + if (gPokemonStorageSystemPtr->unk_08af) + { + gPokemonStorageSystemPtr->unk_08af = 0; + sub_8098690(TRUE); + } +} + +void sub_8098734(void) +{ + if (gPokemonStorageSystemPtr->unk_08af && ++gPokemonStorageSystemPtr->unk_08b0 > 30) + { + gPokemonStorageSystemPtr->unk_08b0 = 0; + gPokemonStorageSystemPtr->unk_08b1 = gPokemonStorageSystemPtr->unk_08b1 ? FALSE : TRUE; + sub_8098690(gPokemonStorageSystemPtr->unk_08b1); + } +} + +void sub_8098780(void) +{ + int i; + + for (i = 1; i < PARTY_SIZE; i++) + { + u16 r1; + bool32 r0 = GetMonData(gPlayerParty + i, MON_DATA_SPECIES); + if (r0) + r0 = TRUE; + r1 = r0 ? 12 : 16; + sub_809D104(gPokemonStorageSystemPtr->unk_00a8, 7, (i - 1) * 3 + 1, gPokemonStorageSystemPtr->unk_00a8, r1, 4, 4, 3); + } +} + +void sub_80987DC(void) +{ + sub_8098780(); + sub_809D034(BG_SCREEN_ADDR(15), 10, 0, gPokemonStorageSystemPtr->unk_00a8, 0, 0, 12, 22); +} + +void sub_809880C(void) +{ + gPokemonStorageSystemPtr->unk_08ae = 0; + PlaySE(SE_WIN_OPEN); + sub_80984E8(); +} + +bool8 sub_8098830(void) +{ + switch (gPokemonStorageSystemPtr->unk_08ae) + { + case 0: + if (!sub_8098520()) + { + sub_809B068(); + gPokemonStorageSystemPtr->unk_08ae++; + } + break; + case 1: + if (!sub_809AC00()) + { + if (gPokemonStorageSystemPtr->unk_11f6) + BoxSetMosaic(); + gPokemonStorageSystemPtr->unk_08ae++; + } + break; + case 2: + return FALSE; + } + return TRUE; +} -asm(".section .text.8098898"); +const struct StorageAction gPCStorageActionTexts[] = { + {PCText_ExitBox, 0}, + {PCText_WhatYouDo, 0}, + {PCText_PickATheme, 0}, + {PCText_PickAWallpaper, 0}, + {PCText_IsSelected, 1}, + {PCText_JumpToWhichBox, 0}, + {PCText_DepositInWhichBox, 0}, + {PCText_WasDeposited, 1}, + {PCText_BoxIsFull, 0}, + {PCText_ReleasePoke, 0}, + {PCText_WasReleased, 4}, + {PCText_ByeBye, 6}, + {PCText_MarkPoke, 0}, + {PCText_LastPoke, 0}, + {PCText_PartyFull, 0}, + {PCText_HoldingPoke, 0}, + {PCText_WhichOneWillTake, 0}, + {PCText_CantReleaseEgg, 0}, + {PCText_ContinueBox, 0}, + {PCText_CameBack, 1}, + {PCText_Worried, 0}, + {PCText_Surprise, 0}, + {PCText_PleaseRemoveMail, 0} +}; void PrintStorageActionText(u8 index) { u8 *ptr; @@ -1826,30 +2017,67 @@ void PrintStorageActionText(u8 index) { MenuPrint(gPokemonStorageSystemPtr->unk_2694, 11, 17); } -// FIXME: move this back +const struct OamData gOamData_83B6EAC = { + .size = 3 +}; -const struct StorageAction gPCStorageActionTexts[] = { - {PCText_ExitBox, 0}, - {PCText_WhatYouDo, 0}, - {PCText_PickATheme, 0}, - {PCText_PickAWallpaper, 0}, - {PCText_IsSelected, 1}, - {PCText_JumpToWhichBox, 0}, - {PCText_DepositInWhichBox, 0}, - {PCText_WasDeposited, 1}, - {PCText_BoxIsFull, 0}, - {PCText_ReleasePoke, 0}, - {PCText_WasReleased, 4}, - {PCText_ByeBye, 6}, - {PCText_MarkPoke, 0}, - {PCText_LastPoke, 0}, - {PCText_PartyFull, 0}, - {PCText_HoldingPoke, 0}, - {PCText_WhichOneWillTake, 0}, - {PCText_CantReleaseEgg, 0}, - {PCText_ContinueBox, 0}, - {PCText_CameBack, 1}, - {PCText_Worried, 0}, - {PCText_Surprise, 0}, - {PCText_PleaseRemoveMail, 0} +const struct OamData gOamData_83B6EB4 = { + .shape = ST_OAM_H_RECTANGLE +}; + +const union AnimCmd gSpriteAnim_83B6EBC[] = { + ANIMCMD_FRAME(0, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_83B6EC4[] = { + ANIMCMD_FRAME(2, 8), + ANIMCMD_FRAME(4, 8), + ANIMCMD_FRAME(6, 8), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd gSpriteAnim_83B6ED4[] = { + ANIMCMD_FRAME(8, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_83B6EDC[] = { + ANIMCMD_FRAME(10, 8), + ANIMCMD_FRAME( 4, 8), + ANIMCMD_FRAME(12, 8), + ANIMCMD_JUMP(0) +}; + +const union AnimCmd *const gSpriteAnimTable_83B6EEC[] = { + gSpriteAnim_83B6EBC, + gSpriteAnim_83B6EC4, + gSpriteAnim_83B6ED4, + gSpriteAnim_83B6EDC +}; + +const struct SpriteTemplate gSpriteTemplate_83B6EFC = { + 0x0005, + 0xdacd, + &gOamData_83B6EB4, + gSpriteAnimTable_83B6EEC, + NULL, + gDummySpriteAffineAnimTable, + SpriteCallbackDummy +}; + +const struct OamData gOamData_83B6F2C; + +const struct SpriteTemplate gSpriteTemplate_83B6F14 = { + 0x000f, + 0xdac0, + &gOamData_83B6F2C, + gDummySpriteAnimTable, + NULL, + gDummySpriteAffineAnimTable, + SpriteCallbackDummy +}; + +const struct OamData gOamData_83B6F2C = { + .size = 2 }; -- cgit v1.2.3 From f361bbd3e63a0b342ddfbd4c4c8d9e5a7536d2cc Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 9 Jan 2018 20:30:32 -0500 Subject: finish pokemon_storage_system_2.c --- asm/pokemon_storage_system.s | 122 --------------------------------- include/pokemon.h | 2 +- include/pokemon_storage_system.h | 55 ++++++++++++++- src/pokemon/pokemon_storage_system_2.c | 107 +++++++++++++++-------------- 4 files changed, 110 insertions(+), 176 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index bf3d49532..a4cf34a2b 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,128 +5,6 @@ .text - thumb_func_start sub_8098A38 -sub_8098A38: @ 8098A38 - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0x17 - movs r1, 0xA - movs r2, 0 - bl DisplayYesNoMenu - lsls r4, 24 - asrs r4, 24 - adds r0, r4, 0 - bl MoveMenuCursor - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8098A38 - - thumb_func_start sub_8098A5C -sub_8098A5C: @ 8098A5C - push {lr} - bl HandleDestroyMenuCursors - movs r0, 0xA - movs r1, 0x10 - movs r2, 0x1D - movs r3, 0x13 - bl MenuZeroFillWindowRect - movs r0, 0x17 - movs r1, 0xA - movs r2, 0x1D - movs r3, 0xF - bl MenuZeroFillWindowRect - pop {r0} - bx r0 - thumb_func_end sub_8098A5C - - thumb_func_start sub_8098A80 -sub_8098A80: @ 8098A80 - push {lr} - bl sub_809CDCC - movs r0, 0xC - bl sub_809CDEC - movs r0, 0xD - bl sub_809CDEC - movs r0, 0xE - bl sub_809CDEC - movs r0, 0xF - bl sub_809CDEC - bl sub_809CE84 - pop {r0} - bx r0 - thumb_func_end sub_8098A80 - - thumb_func_start sub_8098AA8 -sub_8098AA8: @ 8098AA8 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - adds r5, r4, 0 - bl sub_809CDCC - cmp r4, 0x1 - beq _08098AE6 - cmp r4, 0x1 - bgt _08098AC2 - cmp r4, 0 - beq _08098ACC - b _08098B32 -_08098AC2: - cmp r5, 0x2 - beq _08098B00 - cmp r5, 0x3 - beq _08098B1A - b _08098B32 -_08098ACC: - movs r0, 0x10 - bl sub_809CDEC - movs r0, 0x11 - bl sub_809CDEC - movs r0, 0x12 - bl sub_809CDEC - movs r0, 0x13 - bl sub_809CDEC - b _08098B32 -_08098AE6: - movs r0, 0x14 - bl sub_809CDEC - movs r0, 0x15 - bl sub_809CDEC - movs r0, 0x16 - bl sub_809CDEC - movs r0, 0x17 - bl sub_809CDEC - b _08098B32 -_08098B00: - movs r0, 0x18 - bl sub_809CDEC - movs r0, 0x19 - bl sub_809CDEC - movs r0, 0x1A - bl sub_809CDEC - movs r0, 0x1B - bl sub_809CDEC - b _08098B32 -_08098B1A: - movs r0, 0x1C - bl sub_809CDEC - movs r0, 0x1D - bl sub_809CDEC - movs r0, 0x1E - bl sub_809CDEC - movs r0, 0x1F - bl sub_809CDEC -_08098B32: - bl sub_809CE84 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_8098AA8 - -// File boundary - thumb_func_start get_preferred_box get_preferred_box: @ 8098B3C ldr r0, _08098B44 @ =gPokemonStorage diff --git a/include/pokemon.h b/include/pokemon.h index fd1709320..af65599f8 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -627,6 +627,6 @@ void RandomlyGivePartyPokerus(struct Pokemon *party); void PartySpreadPokerus(struct Pokemon *party); struct Sprite *sub_80F7920(u16, u16, const u16 *); - +void BoxMonRestorePP(struct BoxPokemon *); #endif // GUARD_POKEMON_H diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index b82213bb2..ab2a14362 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -142,11 +142,60 @@ u8 sub_8096368(void); void sub_809635C(void); void sub_8096310(void); void sub_80961A8(void); - void task_intro_29(u8 whichMenu); void ResetPokemonStorageSystem(void); -void BoxMonRestorePP(struct BoxPokemon *); -void party_compaction(void); +void sub_8098B48(void); +void sub_8099310(void); +bool8 sub_8099374(void); +void sub_80994A8(s16 a0); +void sub_809954C(void); +void sub_8099958(void); +bool8 sub_8099990(void); struct Sprite *sub_809A9A0(u16 a0, u16 a1, u8 a2, u8 a3, u8 a4); +void sub_809BB90(void); +void sub_8099BF8(u8 a0); +void sub_8099C70(u8 whichBox); +bool8 sub_8099D34(void); +void sub_8099DCC(u8 a0); +bool8 sub_8099E08(void); +void sub_809A860(u8 a0); +void sub_809AA24(void); +void sub_809AA98(void); +bool8 sub_809AC00(void); +void sub_809B0C0(u8 a0); +void sub_809B0D4(void); +void sub_809B0E0(void); +u8 sub_809B0F4(void); +void sub_809B068(void); +void sub_809B100(u8 a0); +bool8 sub_809B130(void); +void sub_809B440(void); +bool8 sub_809B62C(u8); +void sub_809B6BC(void); +void sub_809B6DC(void); +bool8 sub_809B734(void); +void sub_809B760(void); +void sub_809B7AC(void); +void sub_809B7D4(void); +s8 sub_809B960(void); +void sub_809BBC0(void); +void sub_809BC18(void); +void sub_809BD14(void); +void party_compaction(void); +void sub_809BDD8(u8 markings); +bool8 sub_809BE80(void); +bool8 sub_809BEBC(void); +bool8 sub_809BF20(void); +bool8 sub_809BF48(void); +u8 sub_809CA40(void); +void sub_809CDCC(void); +void sub_809CDEC(u8 a0); +void sub_809CE84(void); +s16 sub_809CF30(void); +void sub_809CFDC(struct UnkStruct_2000020 *a0, struct UnkStruct_2000020 *a1, u8 a2); +void sub_809CFF0(void); +void sub_809D034(void *dest, u16 dLeft, u16 dTop, const void *src, u16 sLeft, u16 sTop, u16 width, u16 height); +void sub_809D104(void *dest, u16 dLeft, u16 dTop, const void *src, u16 sLeft, u16 sTop, u16 width, u16 height); +void sub_809D16C(void *dest, u16 dLeft, u16 dTop, u16 width, u16 height); #endif // GUARD_POKEMON_STORAGE_SYSTEM_H diff --git a/src/pokemon/pokemon_storage_system_2.c b/src/pokemon/pokemon_storage_system_2.c index ff6f1f587..474f16323 100644 --- a/src/pokemon/pokemon_storage_system_2.c +++ b/src/pokemon/pokemon_storage_system_2.c @@ -89,59 +89,10 @@ void sub_80987DC(void); void sub_809880C(void); bool8 sub_8098830(void); void PrintStorageActionText(u8 index); -void sub_8098A38(u8); +void sub_8098A38(s8); void sub_8098A5C(void); void sub_8098A80(void); void sub_8098AA8(u8 a0); -void sub_8098B48(void); -void sub_8099310(void); -bool8 sub_8099374(void); -void sub_80994A8(s16 a0); -void sub_809954C(void); -void sub_8099958(void); -bool8 sub_8099990(void); -void sub_809BB90(void); -void sub_8099BF8(u8 a0); -void sub_8099C70(u8 whichBox); -bool8 sub_8099D34(void); -void sub_8099DCC(u8 a0); -bool8 sub_8099E08(void); -void sub_809A860(u8 a0); -void sub_809AA24(void); -void sub_809AA98(void); -bool8 sub_809AC00(void); -void sub_809B0C0(u8 a0); -void sub_809B0D4(void); -void sub_809B0E0(void); -u8 sub_809B0F4(void); -void sub_809B068(void); -void sub_809B100(u8 a0); -bool8 sub_809B130(void); -void sub_809B440(void); -bool8 sub_809B62C(u8); -void sub_809B6BC(void); -void sub_809B6DC(void); -bool8 sub_809B734(void); -void sub_809B760(void); -void sub_809B7AC(void); -void sub_809B7D4(void); -s8 sub_809B960(void); -void sub_809BBC0(void); -void sub_809BC18(void); -void sub_809BD14(void); -void sub_809BDD8(u8 markings); -bool8 sub_809BE80(void); -bool8 sub_809BEBC(void); -bool8 sub_809BF20(void); -bool8 sub_809BF48(void); -u8 sub_809CA40(void); -void sub_809CE84(void); -s16 sub_809CF30(void); -void sub_809CFDC(struct UnkStruct_2000020 *a0, struct UnkStruct_2000020 *a1, u8 a2); -void sub_809CFF0(void); -void sub_809D034(void *dest, u16 dLeft, u16 dTop, const void *src, u16 sLeft, u16 sTop, u16 width, u16 height); -void sub_809D104(void *dest, u16 dLeft, u16 dTop, const void *src, u16 sLeft, u16 sTop, u16 width, u16 height); -void sub_809D16C(void *dest, u16 dLeft, u16 dTop, u16 width, u16 height); // .rodata @@ -2081,3 +2032,59 @@ const struct SpriteTemplate gSpriteTemplate_83B6F14 = { const struct OamData gOamData_83B6F2C = { .size = 2 }; + +void sub_8098A38(s8 a0) +{ + DisplayYesNoMenu(23, 10, 0); + MoveMenuCursor(a0); +} + +void sub_8098A5C(void) +{ + HandleDestroyMenuCursors(); + MenuZeroFillWindowRect(10, 16, 29, 19); + MenuZeroFillWindowRect(23, 10, 29, 15); +} + +void sub_8098A80(void) +{ + sub_809CDCC(); + sub_809CDEC(12); + sub_809CDEC(13); + sub_809CDEC(14); + sub_809CDEC(15); + sub_809CE84(); +} + +void sub_8098AA8(u8 a0) +{ + sub_809CDCC(); + switch (a0) + { + case 0: + sub_809CDEC(16); + sub_809CDEC(17); + sub_809CDEC(18); + sub_809CDEC(19); + break; + case 1: + sub_809CDEC(20); + sub_809CDEC(21); + sub_809CDEC(22); + sub_809CDEC(23); + break; + case 2: + sub_809CDEC(24); + sub_809CDEC(25); + sub_809CDEC(26); + sub_809CDEC(27); + break; + case 3: + sub_809CDEC(28); + sub_809CDEC(29); + sub_809CDEC(30); + sub_809CDEC(31); + break; + } + sub_809CE84(); +} -- cgit v1.2.3 From c4244f5bec27741c18a12611f245df5572b11d8b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 9 Jan 2018 21:18:42 -0500 Subject: through sub_8098BF0 --- asm/pokemon_storage_system.s | 142 ++------------------------------- include/pokemon_storage_system.h | 21 +++-- ld_script.txt | 2 + src/pokemon/pokemon_storage_system.c | 14 ++-- src/pokemon/pokemon_storage_system_2.c | 27 ------- src/pokemon/pokemon_storage_system_3.c | 52 +++++++++++- src/pokemon/pokemon_storage_system_4.c | 23 ++++++ src/pokemon/pokemon_storage_system_5.c | 16 ++++ sym_ewram.txt | 7 +- 9 files changed, 126 insertions(+), 178 deletions(-) create mode 100644 src/pokemon/pokemon_storage_system_4.c create mode 100644 src/pokemon/pokemon_storage_system_5.c diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index a4cf34a2b..7e6f34d53 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,142 +5,6 @@ .text - thumb_func_start get_preferred_box -get_preferred_box: @ 8098B3C - ldr r0, _08098B44 @ =gPokemonStorage - ldrb r0, [r0] - bx lr - .align 2, 0 -_08098B44: .4byte gPokemonStorage - thumb_func_end get_preferred_box - - thumb_func_start sub_8098B48 -sub_8098B48: @ 8098B48 - push {r4,r5,lr} - bl sub_809D51C - movs r2, 0 - ldr r1, _08098BD8 @ =gPokemonStorageSystemPtr - ldr r0, [r1] - ldr r4, _08098BDC @ =0x000010d0 - adds r3, r0, r4 - movs r4, 0 - adds r5, r1, 0 -_08098B5C: - lsls r0, r2, 1 - adds r0, r3, r0 - strh r4, [r0] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0x27 - bls _08098B5C - movs r2, 0 - ldr r0, _08098BD8 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - movs r1, 0x89 - lsls r1, 5 - adds r3, r0, r1 - movs r1, 0 -_08098B7A: - lsls r0, r2, 1 - adds r0, r3, r0 - strh r1, [r0] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0x27 - bls _08098B7A - movs r2, 0 - ldr r0, _08098BD8 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r4, _08098BE0 @ =0x00001038 - adds r3, r0, r4 - movs r1, 0 -_08098B96: - lsls r0, r2, 2 - adds r0, r3, r0 - str r1, [r0] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0x5 - bls _08098B96 - movs r2, 0 - ldr r0, _08098BD8 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r1, _08098BE4 @ =0x00001050 - adds r3, r0, r1 - movs r1, 0 -_08098BB2: - lsls r0, r2, 2 - adds r0, r3, r0 - str r1, [r0] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0x1D - bls _08098BB2 - ldr r0, [r5] - ldr r2, _08098BE8 @ =0x00001034 - adds r1, r0, r2 - movs r2, 0 - str r2, [r1] - ldr r4, _08098BEC @ =0x00000d5c - adds r0, r4 - strh r2, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08098BD8: .4byte gPokemonStorageSystemPtr -_08098BDC: .4byte 0x000010d0 -_08098BE0: .4byte 0x00001038 -_08098BE4: .4byte 0x00001050 -_08098BE8: .4byte 0x00001034 -_08098BEC: .4byte 0x00000d5c - thumb_func_end sub_8098B48 - - thumb_func_start sub_8098BF0 -sub_8098BF0: @ 8098BF0 - push {r4-r6,lr} - sub sp, 0x8 - ldr r0, _08098C38 @ =gPokemonStorageSystemPtr - ldr r5, [r0] - ldr r0, _08098C3C @ =0x000025b4 - adds r4, r5, r0 - adds r0, r4, 0 - movs r1, 0 - bl GetMonData - adds r6, r0, 0 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x1 - str r1, [sp] - movs r1, 0x7 - str r1, [sp, 0x4] - adds r1, r6, 0 - movs r2, 0 - movs r3, 0 - bl sub_8099AFC - ldr r1, _08098C40 @ =0x00001034 - adds r5, r1 - str r0, [r5] - ldr r1, _08098C44 @ =sub_80999C4 - str r1, [r0, 0x1C] - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_08098C38: .4byte gPokemonStorageSystemPtr -_08098C3C: .4byte 0x000025b4 -_08098C40: .4byte 0x00001034 -_08098C44: .4byte sub_80999C4 - thumb_func_end sub_8098BF0 - thumb_func_start sub_8098C48 sub_8098C48: @ 8098C48 push {r4-r7,lr} @@ -2216,6 +2080,8 @@ sub_8099BE0: @ 8099BE0 bx r0 thumb_func_end sub_8099BE0 +// file boundary? + thumb_func_start sub_8099BF8 sub_8099BF8: @ 8099BF8 push {r4,lr} @@ -6273,6 +6139,8 @@ _0809BB88: .4byte gPokemonStorageSystemPtr _0809BB8C: .4byte 0x0000267d thumb_func_end sub_809B960 +// file boundary at or before here + thumb_func_start sub_809BB90 sub_809BB90: @ 809BB90 push {lr} @@ -8589,6 +8457,8 @@ _0809CDC4: .4byte gPokemonStorageSystemPtr _0809CDC8: .4byte 0x000011e4 thumb_func_end sub_809CD88 +// file boundary here + thumb_func_start sub_809CDCC sub_809CDCC: @ 809CDCC ldr r0, _0809CDE0 @ =gPokemonStorageSystemPtr diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index ab2a14362..7f16b5d4f 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -90,10 +90,18 @@ struct PokemonStorageSystemData { bool8 unk_08b1; s16 unk_08b2; u16 unk_08b4; - u8 filler_08b6[0x4a8]; + u8 filler_08b6[0x4a6]; + u16 unk_0d5c; s16 unk_0d5e; s16 unk_0d60; - u8 filler_0d62[0x486]; + u8 filler_0d62[0x2d2]; + struct Sprite *unk_1034; + u32 unk_1038[6]; + u32 unk_1050[30]; + u8 filler_10c8[8]; + u16 unk_10d0[40]; + u16 unk_1120[40]; + u8 filler_1170[0x78]; u8 *unk_11e8; u32 unk_11ec; u16 unk_11f0; @@ -113,7 +121,8 @@ struct PokemonStorageSystemData { u16 *unk_12b8; struct PokemonMarkMenu unk_12bc; struct UnkPSSStruct_2002370 unk_2370; - u8 filler_25b4[0xd8]; + struct Pokemon unk_25b4; + u8 filler_2618[0x74]; u8 unk_268c; u8 unk_268d; u8 unk_268e; @@ -131,11 +140,12 @@ struct PokemonStorageSystemData { u8 unk_4784[0x800]; }; -extern EWRAM_DATA u16 gUnknown_02039760[0x600]; - +extern u16 gUnknown_02039760[0x600]; +extern struct UnkPSSStruct_2002370 *gUnknown_02038478; extern struct PokemonStorageSystemData *const gPokemonStorageSystemPtr; extern u8 *const gUnknown_083B6DB8; +u8 CountPokemonInBoxN(u8 boxId); void sub_8096264(struct UnkPSSStruct_2002370 *a0, u16 tileTag, u16 palTag, u8 a3); void sub_809634C(u8 curBox); u8 sub_8096368(void); @@ -145,6 +155,7 @@ void sub_80961A8(void); void task_intro_29(u8 whichMenu); void ResetPokemonStorageSystem(void); void sub_8098B48(void); +void sub_8099200(u8 a0); void sub_8099310(void); bool8 sub_8099374(void); void sub_80994A8(s16 a0); diff --git a/ld_script.txt b/ld_script.txt index f81caa5bf..76f3ce9f9 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -130,6 +130,8 @@ SECTIONS { src/pokemon/pokemon_storage_system.o(.text); src/pokemon/pokemon_storage_system_2.o(.text); src/pokemon/pokemon_storage_system_3.o(.text); + src/pokemon/pokemon_storage_system_4.o(.text); + src/pokemon/pokemon_storage_system_5.o(.text); asm/pokemon_storage_system.o(.text); src/pokemon/pokemon_icon.o(.text); src/pokemon/pokemon_summary_screen.o(.text); diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index c91e45d7a..aebd13498 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -22,6 +22,12 @@ void sub_809665C(void); void sub_80966F4(const u8 *sourceString, u16 x, u16 y); void sub_8096784(struct Sprite *sprite); +EWRAM_DATA struct PokemonStorage gPokemonStorage = {0}; +EWRAM_DATA u8 gUnknown_02038470[3] = {}; +EWRAM_DATA u8 gUnknown_02038473 = 0; +EWRAM_DATA u8 gUnknown_02038474 = 0; +EWRAM_DATA struct UnkPSSStruct_2002370 *gUnknown_02038478 = NULL; + const struct PSS_MenuStringPtrs gUnknown_083B600C[] = { {PCText_WithdrawPoke, PCText_MovePokeToParty}, {PCText_DepositPoke, PCText_StorePokeInBox}, @@ -71,13 +77,7 @@ const u8 gBoxSelectionPopupCenterTiles[] = INCBIN_U8("graphics/pokemon_storage/b const u8 gBoxSelectionPopupSidesTiles[] = INCBIN_U8("graphics/pokemon_storage/box_selection_popup_sides.4bpp"); -EWRAM_DATA struct PokemonStorage gPokemonStorage = {0}; -EWRAM_DATA u8 gUnknown_02038470[3] = {}; -EWRAM_DATA u8 gUnknown_02038473 = 0; -EWRAM_DATA u8 gUnknown_02038474 = 0; -EWRAM_DATA struct UnkPSSStruct_2002370 *gUnknown_02038478 = NULL; - -static u8 CountPokemonInBoxN(u8 boxId) +u8 CountPokemonInBoxN(u8 boxId) { u16 i; u16 count; diff --git a/src/pokemon/pokemon_storage_system_2.c b/src/pokemon/pokemon_storage_system_2.c index 474f16323..2947562d0 100644 --- a/src/pokemon/pokemon_storage_system_2.c +++ b/src/pokemon/pokemon_storage_system_2.c @@ -27,15 +27,6 @@ EWRAM_DATA u8 gUnknown_0203847C = 0; EWRAM_DATA u8 gUnknown_0203847D = 0; EWRAM_DATA u8 gUnknown_0203847E = 0; EWRAM_DATA u8 gUnknown_0203847F = 0; -EWRAM_DATA struct Pokemon gUnknown_02038480 = {}; -EWRAM_DATA u8 gUnknown_020384E4 = 0; -EWRAM_DATA u8 gUnknown_020384E5 = 0; -EWRAM_DATA u8 gUnknown_020384E6 = 0; -EWRAM_DATA u8 gUnknown_020384E7 = 0; -EWRAM_DATA u8 gUnknown_020384E8 = 0; -EWRAM_DATA u8 gUnknown_020384E9 = 0; -EWRAM_DATA u16 gUnknown_020384EA = 0; -EWRAM_DATA u32 gUnknown_020384EC = 0; // Static ROM declarations @@ -80,7 +71,6 @@ void sub_8098400(void); void add_to_c3_somehow(void); void sub_8098780(void); void sub_8098690(bool8 flag); -void sub_8099200(u8 a0); bool8 sub_80985CC(void); void sub_80986E8(void); void sub_8098710(void); @@ -159,7 +149,6 @@ const struct SpritePalette gWaveformSpritePalette = { // .text - void task_intro_29(u8 whichMenu) { gUnknown_0203847D = whichMenu; @@ -2017,22 +2006,6 @@ const struct SpriteTemplate gSpriteTemplate_83B6EFC = { SpriteCallbackDummy }; -const struct OamData gOamData_83B6F2C; - -const struct SpriteTemplate gSpriteTemplate_83B6F14 = { - 0x000f, - 0xdac0, - &gOamData_83B6F2C, - gDummySpriteAnimTable, - NULL, - gDummySpriteAffineAnimTable, - SpriteCallbackDummy -}; - -const struct OamData gOamData_83B6F2C = { - .size = 2 -}; - void sub_8098A38(s8 a0) { DisplayYesNoMenu(23, 10, 0); diff --git a/src/pokemon/pokemon_storage_system_3.c b/src/pokemon/pokemon_storage_system_3.c index 9e0052b89..eff542756 100644 --- a/src/pokemon/pokemon_storage_system_3.c +++ b/src/pokemon/pokemon_storage_system_3.c @@ -1,16 +1,64 @@ // Includes #include "global.h" +#include "sprite.h" +#include "pokemon_icon.h" #include "pokemon_storage_system.h" // Static type declarations // Static RAM declarations -EWRAM_DATA u16 gUnknown_02039760[0x600] = {}; - // Static ROM declarations +void sub_80999C4(struct Sprite *sprite); +struct Sprite *sub_8099AFC(u16 species, u32 personality, u16 a2, u16 a3, u8 a4, u8 a5); + // .rodata +const struct OamData gOamData_83B6F2C; + +const struct SpriteTemplate gSpriteTemplate_83B6F14 = { + 0x000f, + 0xdac0, + &gOamData_83B6F2C, + gDummySpriteAnimTable, + NULL, + gDummySpriteAffineAnimTable, + SpriteCallbackDummy +}; + +const struct OamData gOamData_83B6F2C = { + .size = 2 +}; + // .text + +u8 get_preferred_box(void) +{ + return gPokemonStorage.currentBox; +} + +void sub_8098B48(void) +{ + u16 i; + + sub_809D51C(); + for (i = 0; i < 40; i++) + gPokemonStorageSystemPtr->unk_10d0[i] = 0; + for (i = 0; i < 40; i++) + gPokemonStorageSystemPtr->unk_1120[i] = 0; + for (i = 0; i < 6; i++) + gPokemonStorageSystemPtr->unk_1038[i] = 0; + for (i = 0; i < 30; i++) + gPokemonStorageSystemPtr->unk_1050[i] = 0; + gPokemonStorageSystemPtr->unk_1034 = NULL; + gPokemonStorageSystemPtr->unk_0d5c = 0; +} + +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->callback = sub_80999C4; +} diff --git a/src/pokemon/pokemon_storage_system_4.c b/src/pokemon/pokemon_storage_system_4.c new file mode 100644 index 000000000..f7a008db2 --- /dev/null +++ b/src/pokemon/pokemon_storage_system_4.c @@ -0,0 +1,23 @@ + +// Includes +#include "global.h" +#include "pokemon_storage_system.h" + +// Static type declarations + +// Static RAM declarations + +EWRAM_DATA struct Pokemon gUnknown_02038480 = {}; +EWRAM_DATA u8 gUnknown_020384E4 = 0; +EWRAM_DATA u8 gUnknown_020384E5 = 0; +EWRAM_DATA u8 gUnknown_020384E6 = 0; +EWRAM_DATA u8 gUnknown_020384E7 = 0; +EWRAM_DATA u8 gUnknown_020384E8 = 0; +EWRAM_DATA u8 gUnknown_020384E9 = 0; +EWRAM_DATA u16 gUnknown_020384EA = 0; + +// Static ROM declarations + +// .rodata + +// .text diff --git a/src/pokemon/pokemon_storage_system_5.c b/src/pokemon/pokemon_storage_system_5.c new file mode 100644 index 000000000..f809439ff --- /dev/null +++ b/src/pokemon/pokemon_storage_system_5.c @@ -0,0 +1,16 @@ + +// Includes +#include "global.h" +#include "pokemon_storage_system.h" + +// Static type declarations + +// Static RAM declarations + +EWRAM_DATA u32 gUnknown_020384EC = 0; + +// Static ROM declarations + +// .rodata + +// .text diff --git a/sym_ewram.txt b/sym_ewram.txt index ac9805f3e..4b5de3e85 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -379,6 +379,9 @@ gUnknown_0202FFA4: @ 202FFA4 .include "src/engine/trainer_card.o" .include "src/pokemon/pokemon_storage_system.o" .include "src/pokemon/pokemon_storage_system_2.o" + .include "src/pokemon/pokemon_storage_system_3.o" + .include "src/pokemon/pokemon_storage_system_4.o" + .include "src/pokemon/pokemon_storage_system_5.o" @ pokemon_summary_screen @@ -561,5 +564,7 @@ gTileBuffer: @ 2039360 gUnknown_02039460: @ 2039460 .space 0x300 - .include "src/pokemon/pokemon_storage_system_3.o" +gUnknown_02039760: @ 2039760 + .space 0xc00 + .include "src/engine/menu_cursor.o" -- cgit v1.2.3 From 7cdd2b2a42a96135949e399d1fa3a00c5f56ae67 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 9 Jan 2018 22:08:11 -0500 Subject: through sub_8098E68 --- asm/pokemon_storage_system.s | 324 +-------------------------------- include/pokemon_storage_system.h | 10 +- src/pokemon/pokemon_storage_system_2.c | 4 +- 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; + } +} -- cgit v1.2.3 From 4ae149b93441ffce560f3b7018842bc4c5d39326 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 9 Jan 2018 22:52:37 -0500 Subject: through sub_8098EE0 --- asm/pokemon_storage_system.s | 185 --------------------------------- include/pokemon_storage_system.h | 4 +- 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; +} -- cgit v1.2.3 From cb28e3a679841c01191f19cb7e7f0da28f0bf160 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 9 Jan 2018 23:05:21 -0500 Subject: sub_809900C --- asm/pokemon_storage_system.s | 77 ---------------------------------- include/pokemon_storage_system.h | 9 +++- src/pokemon/pokemon_storage_system_3.c | 16 +++++++ 3 files changed, 23 insertions(+), 79 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 3f9795384..3c4a03ad5 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,83 +5,6 @@ .text - thumb_func_start sub_809900C -sub_809900C: @ 809900C - push {r4-r6,lr} - lsls r1, 24 - lsrs r1, 24 - ldr r4, _08099058 @ =gPokemonStorageSystemPtr - ldr r5, [r4] - ldr r3, _0809905C @ =0x0000117c - adds r2, r5, r3 - movs r3, 0 - strb r3, [r2] - ldr r6, _08099060 @ =0x0000117d - adds r2, r5, r6 - strb r0, [r2] - ldr r2, _08099064 @ =0x0000117b - adds r0, r5, r2 - strb r1, [r0] - subs r6, 0xB - adds r2, r5, r6 - movs r0, 0x20 - strh r0, [r2] - lsls r1, 24 - asrs r1, 24 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 1 - negs r0, r0 - adds r6, 0x4 - adds r2, r5, r6 - strh r0, [r2] - ldr r2, _08099068 @ =0x00001178 - adds r0, r5, r2 - strh r3, [r0] - cmp r1, 0 - ble _08099070 - ldr r3, _0809906C @ =0x0000117a - adds r1, r5, r3 - movs r0, 0 - b _08099076 - .align 2, 0 -_08099058: .4byte gPokemonStorageSystemPtr -_0809905C: .4byte 0x0000117c -_08099060: .4byte 0x0000117d -_08099064: .4byte 0x0000117b -_08099068: .4byte 0x00001178 -_0809906C: .4byte 0x0000117a -_08099070: - ldr r6, _080990A0 @ =0x0000117a - adds r1, r5, r6 - movs r0, 0x5 -_08099076: - strb r0, [r1] - ldr r2, [r4] - ldr r1, _080990A0 @ =0x0000117a - adds r0, r2, r1 - ldrb r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r0, 0x64 - ldr r3, _080990A4 @ =0x00001174 - adds r1, r2, r3 - strh r0, [r1] - ldr r6, _080990A8 @ =0x00001176 - adds r2, r6 - movs r1, 0 - ldrsh r0, [r2, r1] - bl sub_8098DE0 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080990A0: .4byte 0x0000117a -_080990A4: .4byte 0x00001174 -_080990A8: .4byte 0x00001176 - thumb_func_end sub_809900C - thumb_func_start sub_80990AC sub_80990AC: @ 80990AC push {r4-r6,lr} diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index 295084eea..0f20bfa16 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -101,9 +101,14 @@ struct PokemonStorageSystemData { u8 filler_10c8[8]; u16 unk_10d0[40]; u16 unk_1120[40]; - u8 filler_1170[8]; + u8 filler_1170[2]; + u16 unk_1172; + u16 unk_1174; + s16 unk_1176; u16 unk_1178; - u8 filler_117a[3]; + u8 unk_117a; + u8 unk_117b; + u8 unk_117c; u8 unk_117d; u8 filler_117e[0x6a]; u8 *unk_11e8; diff --git a/src/pokemon/pokemon_storage_system_3.c b/src/pokemon/pokemon_storage_system_3.c index 77d85de65..af050d324 100644 --- a/src/pokemon/pokemon_storage_system_3.c +++ b/src/pokemon/pokemon_storage_system_3.c @@ -193,3 +193,19 @@ u8 sub_8098EE0(u8 a0, u16 a1, s16 a2) } return count; } + +void sub_809900C(u8 a0, s8 a1) +{ + gPokemonStorageSystemPtr->unk_117c = 0; + gPokemonStorageSystemPtr->unk_117d = a0; + gPokemonStorageSystemPtr->unk_117b = a1; + gPokemonStorageSystemPtr->unk_1172 = 32; + gPokemonStorageSystemPtr->unk_1176 = -6 * a1; + gPokemonStorageSystemPtr->unk_1178 = 0; + if (a1 > 0) + gPokemonStorageSystemPtr->unk_117a = 0; + else + gPokemonStorageSystemPtr->unk_117a = 5; + gPokemonStorageSystemPtr->unk_1174 = 24 * gPokemonStorageSystemPtr->unk_117a + 0x64; + sub_8098DE0(gPokemonStorageSystemPtr->unk_1176); +} -- cgit v1.2.3 From e0726bf8d6af39f287c65ad22ce192988e8468bb Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 10 Jan 2018 20:20:16 -0500 Subject: through sub_8099374 --- asm/pokemon_storage_system.s | 371 --------------------------------- include/pokemon_storage_system.h | 13 +- src/pokemon/pokemon_storage_system_2.c | 4 +- src/pokemon/pokemon_storage_system_3.c | 101 +++++++++ 4 files changed, 110 insertions(+), 379 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 3c4a03ad5..a794269eb 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,377 +5,6 @@ .text - thumb_func_start sub_80990AC -sub_80990AC: @ 80990AC - push {r4-r6,lr} - ldr r0, _080990D4 @ =gPokemonStorageSystemPtr - ldr r4, [r0] - ldr r0, _080990D8 @ =0x00001172 - adds r3, r4, r0 - ldrh r0, [r3] - cmp r0, 0 - beq _080990C0 - subs r0, 0x1 - strh r0, [r3] -_080990C0: - ldr r1, _080990DC @ =0x0000117c - adds r6, r4, r1 - ldrb r0, [r6] - cmp r0, 0x1 - beq _08099138 - cmp r0, 0x1 - bgt _080990E0 - cmp r0, 0 - beq _080990E8 - b _080991F0 - .align 2, 0 -_080990D4: .4byte gPokemonStorageSystemPtr -_080990D8: .4byte 0x00001172 -_080990DC: .4byte 0x0000117c -_080990E0: - cmp r0, 0x2 - bne _080990E6 - b _080991E0 -_080990E6: - b _080991F0 -_080990E8: - ldr r2, _0809912C @ =0x00001174 - adds r5, r4, r2 - ldr r3, _08099130 @ =0x00001176 - adds r0, r4, r3 - ldrh r0, [r0] - ldrh r1, [r5] - adds r0, r1 - strh r0, [r5] - subs r0, 0x41 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xBA - bhi _08099104 - b _080991F8 -_08099104: - adds r2, 0x6 - adds r0, r4, r2 - ldrb r0, [r0] - bl sub_8098EA0 - ldr r3, _08099134 @ =0x0000117b - adds r0, r4, r3 - movs r1, 0 - ldrsb r1, [r0, r1] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - ldrh r1, [r5] - adds r0, r1 - strh r0, [r5] - ldrb r0, [r6] - adds r0, 0x1 - strb r0, [r6] - b _080991F8 - .align 2, 0 -_0809912C: .4byte 0x00001174 -_08099130: .4byte 0x00001176 -_08099134: .4byte 0x0000117b -_08099138: - ldr r2, _08099194 @ =0x00001174 - adds r1, r4, r2 - ldr r5, _08099198 @ =0x00001176 - adds r2, r4, r5 - ldrh r0, [r2] - ldrh r5, [r1] - adds r0, r5 - strh r0, [r1] - ldr r0, _0809919C @ =0x0000117a - adds r5, r4, r0 - ldrb r0, [r5] - ldrh r1, [r3] - movs r3, 0 - ldrsh r2, [r2, r3] - bl sub_8098EE0 - ldr r2, _080991A0 @ =0x00001178 - adds r1, r4, r2 - lsls r0, 24 - lsrs r0, 24 - ldrh r3, [r1] - adds r0, r3 - strh r0, [r1] - ldr r1, _080991A4 @ =0x0000117b - adds r0, r4, r1 - movs r1, 0 - ldrsb r1, [r0, r1] - cmp r1, 0 - ble _08099178 - ldrb r0, [r5] - cmp r0, 0x5 - beq _08099182 -_08099178: - cmp r1, 0 - bge _080991B0 - ldrb r0, [r5] - cmp r0, 0 - bne _080991B0 -_08099182: - ldr r0, _080991A8 @ =gPokemonStorageSystemPtr - ldr r1, [r0] - ldr r2, _080991AC @ =0x0000117c - adds r1, r2 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _080991F8 - .align 2, 0 -_08099194: .4byte 0x00001174 -_08099198: .4byte 0x00001176 -_0809919C: .4byte 0x0000117a -_080991A0: .4byte 0x00001178 -_080991A4: .4byte 0x0000117b -_080991A8: .4byte gPokemonStorageSystemPtr -_080991AC: .4byte 0x0000117c -_080991B0: - ldr r0, _080991D0 @ =gPokemonStorageSystemPtr - ldr r1, [r0] - ldr r5, _080991D4 @ =0x0000117a - adds r3, r1, r5 - ldr r2, _080991D8 @ =0x0000117b - adds r0, r1, r2 - ldrb r0, [r0] - ldrb r5, [r3] - adds r0, r5 - movs r2, 0 - strb r0, [r3] - ldr r0, _080991DC @ =0x0000117c - adds r1, r0 - strb r2, [r1] - b _080991F8 - .align 2, 0 -_080991D0: .4byte gPokemonStorageSystemPtr -_080991D4: .4byte 0x0000117a -_080991D8: .4byte 0x0000117b -_080991DC: .4byte 0x0000117c -_080991E0: - ldr r1, _080991F4 @ =0x00001178 - adds r0, r4, r1 - ldrh r0, [r0] - cmp r0, 0 - bne _080991F8 - ldrh r0, [r3] - adds r0, 0x1 - strh r0, [r3] -_080991F0: - movs r0, 0 - b _080991FA - .align 2, 0 -_080991F4: .4byte 0x00001178 -_080991F8: - movs r0, 0x1 -_080991FA: - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_80990AC - - thumb_func_start sub_8099200 -sub_8099200: @ 8099200 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x8 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r4, _080992A0 @ =gPlayerParty - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 - adds r0, r4, 0 - movs r1, 0 - bl GetMonData - adds r1, r0, 0 - movs r0, 0x1 - str r0, [sp] - movs r0, 0xB - str r0, [sp, 0x4] - adds r0, r5, 0 - movs r2, 0x68 - movs r3, 0x40 - bl PSS_SpawnMonIconSprite - ldr r1, _080992A4 @ =gPokemonStorageSystemPtr - ldr r1, [r1] - ldr r2, _080992A8 @ =0x00001038 - adds r1, r2 - str r0, [r1] - movs r7, 0x1 - movs r6, 0x1 -_08099246: - movs r0, 0x64 - adds r1, r6, 0 - muls r1, r0 - ldr r0, _080992A0 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0 - beq _080992AC - adds r0, r4, 0 - movs r1, 0 - bl GetMonData - adds r1, r0, 0 - subs r0, r6, 0x1 - lsls r3, r0, 1 - adds r3, r0 - lsls r3, 19 - movs r0, 0x80 - lsls r0, 13 - adds r3, r0 - asrs r3, 16 - movs r0, 0x1 - str r0, [sp] - movs r0, 0xB - str r0, [sp, 0x4] - adds r0, r5, 0 - movs r2, 0x98 - bl PSS_SpawnMonIconSprite - ldr r1, _080992A4 @ =gPokemonStorageSystemPtr - ldr r1, [r1] - lsls r2, r6, 2 - ldr r3, _080992A8 @ =0x00001038 - adds r1, r3 - adds r1, r2 - str r0, [r1] - adds r0, r7, 0x1 - lsls r0, 16 - lsrs r7, r0, 16 - b _080992BA - .align 2, 0 -_080992A0: .4byte gPlayerParty -_080992A4: .4byte gPokemonStorageSystemPtr -_080992A8: .4byte 0x00001038 -_080992AC: - ldr r0, _08099308 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - lsls r1, r6, 2 - ldr r2, _0809930C @ =0x00001038 - adds r0, r2 - adds r0, r1 - str r5, [r0] -_080992BA: - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, 0x5 - bls _08099246 - mov r3, r8 - cmp r3, 0 - bne _080992FA - movs r6, 0 - cmp r6, r7 - bcs _080992FA - ldr r0, _08099308 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r1, _0809930C @ =0x00001038 - adds r3, r0, r1 - movs r4, 0x4 -_080992DA: - lsls r1, r6, 2 - adds r1, r3, r1 - ldr r2, [r1] - ldrh r0, [r2, 0x22] - subs r0, 0xA0 - strh r0, [r2, 0x22] - ldr r1, [r1] - adds r1, 0x3E - ldrb r0, [r1] - orrs r0, r4 - strb r0, [r1] - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, r7 - bcc _080992DA -_080992FA: - add sp, 0x8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08099308: .4byte gPokemonStorageSystemPtr -_0809930C: .4byte 0x00001038 - thumb_func_end sub_8099200 - - thumb_func_start sub_8099310 -sub_8099310: @ 8099310 - push {r4-r7,lr} - mov r7, r8 - push {r7} - ldr r0, _08099368 @ =gPokemonStorageSystemPtr - ldr r2, [r0] - ldr r0, _0809936C @ =0x00001171 - adds r1, r2, r0 - movs r0, 0 - strb r0, [r1] - movs r5, 0 - movs r6, 0 - mov r8, r2 - ldr r7, _0809936C @ =0x00001171 - add r7, r8 -_0809932C: - lsls r1, r5, 2 - ldr r0, _08099370 @ =0x00001038 - add r0, r8 - adds r4, r0, r1 - ldr r0, [r4] - cmp r0, 0 - beq _08099354 - cmp r5, r6 - beq _0809934E - adds r1, r6, 0 - bl sub_8099388 - movs r0, 0 - str r0, [r4] - ldrb r0, [r7] - adds r0, 0x1 - strb r0, [r7] -_0809934E: - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 -_08099354: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x5 - bls _0809932C - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08099368: .4byte gPokemonStorageSystemPtr -_0809936C: .4byte 0x00001171 -_08099370: .4byte 0x00001038 - thumb_func_end sub_8099310 - - thumb_func_start sub_8099374 -sub_8099374: @ 8099374 - ldr r0, _08099380 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r1, _08099384 @ =0x00001171 - adds r0, r1 - ldrb r0, [r0] - bx lr - .align 2, 0 -_08099380: .4byte gPokemonStorageSystemPtr -_08099384: .4byte 0x00001171 - thumb_func_end sub_8099374 - thumb_func_start sub_8099388 sub_8099388: @ 8099388 push {r4,lr} diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index 0f20bfa16..6040e31be 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -96,18 +96,19 @@ struct PokemonStorageSystemData { s16 unk_0d60; u8 filler_0d62[0x2d2]; struct Sprite *unk_1034; - struct Sprite *unk_1038[6]; - struct Sprite *unk_1050[30]; + struct Sprite *unk_1038[6]; // party + struct Sprite *unk_1050[30]; // box u8 filler_10c8[8]; u16 unk_10d0[40]; u16 unk_1120[40]; - u8 filler_1170[2]; + u8 unk_1170; + u8 unk_1171; u16 unk_1172; - u16 unk_1174; + s16 unk_1174; s16 unk_1176; u16 unk_1178; u8 unk_117a; - u8 unk_117b; + s8 unk_117b; u8 unk_117c; u8 unk_117d; u8 filler_117e[0x6a]; @@ -164,7 +165,7 @@ void sub_80961A8(void); void task_intro_29(u8 whichMenu); void ResetPokemonStorageSystem(void); void ResetPSSMonIconSprites(void); -void sub_8099200(u8 a0); +void sub_8099200(bool8 a0); void sub_8099310(void); bool8 sub_8099374(void); void sub_80994A8(s16 a0); diff --git a/src/pokemon/pokemon_storage_system_2.c b/src/pokemon/pokemon_storage_system_2.c index dbb1cf992..a158b29a9 100644 --- a/src/pokemon/pokemon_storage_system_2.c +++ b/src/pokemon/pokemon_storage_system_2.c @@ -1703,7 +1703,7 @@ void sub_8098400(void) if (gUnknown_0203847C) { sub_8098690(TRUE); - sub_8099200(1); + sub_8099200(TRUE); sub_809D034(BG_SCREEN_ADDR(15), 10, 0, gPokemonStorageSystemPtr->unk_00a8, 0, 0, 12, 22); } else @@ -1719,7 +1719,7 @@ void sub_80984E8(void) gPokemonStorageSystemPtr->unk_08a8 = 20; gPokemonStorageSystemPtr->unk_08aa = 2; gPokemonStorageSystemPtr->unk_08ad = 0; - sub_8099200(0); + sub_8099200(FALSE); } bool8 sub_8098520(void) diff --git a/src/pokemon/pokemon_storage_system_3.c b/src/pokemon/pokemon_storage_system_3.c index af050d324..230e9445b 100644 --- a/src/pokemon/pokemon_storage_system_3.c +++ b/src/pokemon/pokemon_storage_system_3.c @@ -13,6 +13,7 @@ // Static ROM declarations void sub_8098E68(struct Sprite *sprite); +void sub_8099388(struct Sprite *sprite, u16 a0); 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); @@ -209,3 +210,103 @@ void sub_809900C(u8 a0, s8 a1) gPokemonStorageSystemPtr->unk_1174 = 24 * gPokemonStorageSystemPtr->unk_117a + 0x64; sub_8098DE0(gPokemonStorageSystemPtr->unk_1176); } + +bool8 sub_80990AC(void) +{ + if (gPokemonStorageSystemPtr->unk_1172) + gPokemonStorageSystemPtr->unk_1172--; + switch (gPokemonStorageSystemPtr->unk_117c) + { + case 0: + gPokemonStorageSystemPtr->unk_1174 += gPokemonStorageSystemPtr->unk_1176; + if (gPokemonStorageSystemPtr->unk_1174 < 0x41 || gPokemonStorageSystemPtr->unk_1174 > 0xfb) + { + sub_8098EA0(gPokemonStorageSystemPtr->unk_117a); + gPokemonStorageSystemPtr->unk_1174 += 24 * gPokemonStorageSystemPtr->unk_117b; + gPokemonStorageSystemPtr->unk_117c++; + } + break; + case 1: + gPokemonStorageSystemPtr->unk_1174 += gPokemonStorageSystemPtr->unk_1176; + gPokemonStorageSystemPtr->unk_1178 += sub_8098EE0(gPokemonStorageSystemPtr->unk_117a, gPokemonStorageSystemPtr->unk_1172, gPokemonStorageSystemPtr->unk_1176); + if ((gPokemonStorageSystemPtr->unk_117b > 0 && gPokemonStorageSystemPtr->unk_117a == 5) || (gPokemonStorageSystemPtr->unk_117b < 0 && gPokemonStorageSystemPtr->unk_117a == 0)) + { + gPokemonStorageSystemPtr->unk_117c++; + } + else + { + gPokemonStorageSystemPtr->unk_117a += gPokemonStorageSystemPtr->unk_117b; + gPokemonStorageSystemPtr->unk_117c = 0; + } + break; + case 2: + if (gPokemonStorageSystemPtr->unk_1178 == 0) + { + gPokemonStorageSystemPtr->unk_1172++; + return FALSE; + } + break; + default: + return FALSE; + } + return TRUE; +} + +void sub_8099200(bool8 a0) +{ + u16 count; + u16 i; + u16 species = GetMonData(gPlayerParty + 0, MON_DATA_SPECIES2); + u32 personality = GetMonData(gPlayerParty + 0, MON_DATA_PERSONALITY); + gPokemonStorageSystemPtr->unk_1038[0] = PSS_SpawnMonIconSprite(species, personality, 0x68, 0x40, 1, 11); + count = 1; + for (i = 1; i < PARTY_SIZE; i++) + { + species = GetMonData(gPlayerParty + i, MON_DATA_SPECIES2); + if (species != SPECIES_NONE) + { + personality = GetMonData(gPlayerParty + i, MON_DATA_PERSONALITY); + gPokemonStorageSystemPtr->unk_1038[i] = PSS_SpawnMonIconSprite(species, personality, 0x98, (i - 1) * 24 + 0x10, 1, 11); + count++; + } + else + { + gPokemonStorageSystemPtr->unk_1038[i] = NULL; + } + } + if (!a0) + { + for (i = 0; i < count; i++) + { + // this routine assumes party_compaction has been called + gPokemonStorageSystemPtr->unk_1038[i]->pos1.y -= 0xa0; + gPokemonStorageSystemPtr->unk_1038[i]->invisible = TRUE; + } + } +} + +void sub_8099310(void) +{ + u16 i; + u16 count; + + gPokemonStorageSystemPtr->unk_1171 = 0; + for (i = 0, count = 0; i < PARTY_SIZE; i++) + { + if (gPokemonStorageSystemPtr->unk_1038[i]) + { + if (i != count) + { + sub_8099388(gPokemonStorageSystemPtr->unk_1038[i], count); + gPokemonStorageSystemPtr->unk_1038[i] = NULL; + gPokemonStorageSystemPtr->unk_1171++; + } + count++; + } + } +} + +u8 sub_8099374(void) +{ + return gPokemonStorageSystemPtr->unk_1171; +} -- cgit v1.2.3 From e44c0f897d2d02f153d5adf139be3bac25e1ee93 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 10 Jan 2018 21:33:54 -0500 Subject: through sub_809960C --- asm/pokemon_storage_system.s | 429 --------------------------------- src/pokemon/pokemon_storage_system_3.c | 145 ++++++++++- 2 files changed, 144 insertions(+), 430 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index a794269eb..2f7caa703 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,435 +5,6 @@ .text - thumb_func_start sub_8099388 -sub_8099388: @ 8099388 - push {r4,lr} - adds r2, r0, 0 - lsls r1, 16 - lsrs r1, 16 - strh r1, [r2, 0x30] - cmp r1, 0 - bne _0809939C - movs r3, 0x68 - movs r4, 0x40 - b _080993AE -_0809939C: - movs r3, 0x98 - subs r1, 0x1 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 19 - movs r1, 0x80 - lsls r1, 13 - adds r0, r1 - lsrs r4, r0, 16 -_080993AE: - ldrh r0, [r2, 0x20] - lsls r0, 3 - strh r0, [r2, 0x32] - ldrh r0, [r2, 0x22] - lsls r0, 3 - strh r0, [r2, 0x34] - lsls r1, r3, 3 - movs r3, 0x32 - ldrsh r0, [r2, r3] - subs r0, r1, r0 - cmp r0, 0 - bge _080993C8 - adds r0, 0x7 -_080993C8: - asrs r0, 3 - strh r0, [r2, 0x36] - lsls r0, r4, 16 - asrs r0, 13 - movs r3, 0x34 - ldrsh r1, [r2, r3] - subs r0, r1 - cmp r0, 0 - bge _080993DC - adds r0, 0x7 -_080993DC: - asrs r0, 3 - strh r0, [r2, 0x38] - movs r0, 0x8 - strh r0, [r2, 0x3A] - ldr r0, _080993F0 @ =sub_80993F4 - str r0, [r2, 0x1C] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080993F0: .4byte sub_80993F4 - thumb_func_end sub_8099388 - - thumb_func_start sub_80993F4 -sub_80993F4: @ 80993F4 - push {r4,lr} - adds r3, r0, 0 - ldrh r2, [r3, 0x3A] - movs r1, 0x3A - ldrsh r0, [r3, r1] - cmp r0, 0 - beq _08099424 - ldrh r0, [r3, 0x36] - ldrh r4, [r3, 0x32] - adds r0, r4 - strh r0, [r3, 0x32] - ldrh r1, [r3, 0x38] - ldrh r4, [r3, 0x34] - adds r1, r4 - strh r1, [r3, 0x34] - lsls r0, 16 - asrs r0, 19 - strh r0, [r3, 0x20] - lsls r1, 16 - asrs r1, 19 - strh r1, [r3, 0x22] - subs r0, r2, 0x1 - strh r0, [r3, 0x3A] - b _08099468 -_08099424: - movs r1, 0x30 - ldrsh r0, [r3, r1] - cmp r0, 0 - bne _08099434 - movs r0, 0x68 - strh r0, [r3, 0x20] - movs r0, 0x40 - b _08099446 -_08099434: - movs r0, 0x98 - strh r0, [r3, 0x20] - movs r4, 0x30 - ldrsh r1, [r3, r4] - subs r1, 0x1 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r0, 0x10 -_08099446: - strh r0, [r3, 0x22] - ldr r0, _08099470 @ =SpriteCallbackDummy - str r0, [r3, 0x1C] - ldr r0, _08099474 @ =gPokemonStorageSystemPtr - ldr r2, [r0] - movs r0, 0x30 - ldrsh r1, [r3, r0] - lsls r1, 2 - ldr r4, _08099478 @ =0x00001038 - adds r0, r2, r4 - adds r0, r1 - str r3, [r0] - ldr r0, _0809947C @ =0x00001171 - adds r2, r0 - ldrb r0, [r2] - subs r0, 0x1 - strb r0, [r2] -_08099468: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08099470: .4byte SpriteCallbackDummy -_08099474: .4byte gPokemonStorageSystemPtr -_08099478: .4byte 0x00001038 -_0809947C: .4byte 0x00001171 - thumb_func_end sub_80993F4 - - thumb_func_start sub_8099480 -sub_8099480: @ 8099480 - push {r4,lr} - ldr r0, _080994A0 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r1, _080994A4 @ =0x00001034 - adds r4, r0, r1 - ldr r0, [r4] - cmp r0, 0 - beq _08099498 - bl sub_8099BE0 - movs r0, 0 - str r0, [r4] -_08099498: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080994A0: .4byte gPokemonStorageSystemPtr -_080994A4: .4byte 0x00001034 - thumb_func_end sub_8099480 - - thumb_func_start sub_80994A8 -sub_80994A8: @ 80994A8 - push {r4-r6,lr} - movs r3, 0 - ldr r1, _080994FC @ =gPokemonStorageSystemPtr - ldr r1, [r1] - ldr r2, _08099500 @ =0x00001038 - adds r5, r1, r2 - lsls r0, 16 - asrs r4, r0, 16 - movs r6, 0x5 - negs r6, r6 -_080994BC: - lsls r0, r3, 2 - adds r2, r5, r0 - ldr r1, [r2] - cmp r1, 0 - beq _0809950E - ldrh r0, [r1, 0x22] - adds r0, r4, r0 - strh r0, [r1, 0x22] - ldr r2, [r2] - ldrh r1, [r2, 0x26] - ldrh r0, [r2, 0x22] - adds r1, r0 - adds r0, r2, 0 - adds r0, 0x29 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - adds r0, r1 - lsls r0, 16 - movs r1, 0x80 - lsls r1, 13 - adds r0, r1 - lsrs r0, 16 - cmp r0, 0xC0 - bls _08099504 - adds r0, r2, 0 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 - strb r1, [r0] - b _0809950E - .align 2, 0 -_080994FC: .4byte gPokemonStorageSystemPtr -_08099500: .4byte 0x00001038 -_08099504: - adds r2, 0x3E - ldrb r1, [r2] - adds r0, r6, 0 - ands r0, r1 - strb r0, [r2] -_0809950E: - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0x5 - bls _080994BC - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_80994A8 - - thumb_func_start sub_8099520 -sub_8099520: @ 8099520 - push {r4,lr} - lsls r0, 24 - ldr r1, _08099544 @ =gPokemonStorageSystemPtr - ldr r1, [r1] - lsrs r0, 22 - ldr r2, _08099548 @ =0x00001038 - adds r1, r2 - adds r4, r1, r0 - ldr r0, [r4] - cmp r0, 0 - beq _0809953E - bl sub_8099BE0 - movs r0, 0 - str r0, [r4] -_0809953E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08099544: .4byte gPokemonStorageSystemPtr -_08099548: .4byte 0x00001038 - thumb_func_end sub_8099520 - - thumb_func_start sub_809954C -sub_809954C: @ 809954C - push {r4-r6,lr} - movs r5, 0 - ldr r0, _0809957C @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r1, _08099580 @ =0x00001038 - adds r6, r0, r1 -_08099558: - lsls r0, r5, 2 - adds r4, r6, r0 - ldr r0, [r4] - cmp r0, 0 - beq _0809956A - bl sub_8099BE0 - movs r0, 0 - str r0, [r4] -_0809956A: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x5 - bls _08099558 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0809957C: .4byte gPokemonStorageSystemPtr -_08099580: .4byte 0x00001038 - thumb_func_end sub_809954C - - thumb_func_start sub_8099584 -sub_8099584: @ 8099584 - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - lsrs r1, 24 - adds r5, r1, 0 - cmp r4, 0 - bne _080995B4 - ldr r3, _080995AC @ =gPokemonStorageSystemPtr - ldr r0, [r3] - ldr r5, _080995B0 @ =0x00001034 - adds r2, r0, r5 - lsls r1, 2 - adds r5, 0x4 - adds r0, r5 - adds r0, r1 - ldr r1, [r0] - str r1, [r2] - str r4, [r0] - b _080995D0 - .align 2, 0 -_080995AC: .4byte gPokemonStorageSystemPtr -_080995B0: .4byte 0x00001034 -_080995B4: - cmp r4, 0x1 - bne _080995F4 - ldr r3, _080995FC @ =gPokemonStorageSystemPtr - ldr r0, [r3] - ldr r1, _08099600 @ =0x00001034 - adds r2, r0, r1 - lsls r1, r5, 2 - ldr r4, _08099604 @ =0x00001050 - adds r0, r4 - adds r0, r1 - ldr r1, [r0] - str r1, [r2] - movs r1, 0 - str r1, [r0] -_080995D0: - ldr r2, [r3] - ldr r5, _08099600 @ =0x00001034 - adds r2, r5 - ldr r1, [r2] - ldr r0, _08099608 @ =sub_80999C4 - str r0, [r1, 0x1C] - ldr r3, [r2] - ldrb r1, [r3, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - movs r1, 0x4 - orrs r0, r1 - strb r0, [r3, 0x5] - ldr r0, [r2] - adds r0, 0x43 - movs r1, 0x7 - strb r1, [r0] -_080995F4: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080995FC: .4byte gPokemonStorageSystemPtr -_08099600: .4byte 0x00001034 -_08099604: .4byte 0x00001050 -_08099608: .4byte sub_80999C4 - thumb_func_end sub_8099584 - - thumb_func_start sub_809960C -sub_809960C: @ 809960C - push {r4-r6,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r6, r1, 24 - cmp r0, 0xE - bne _08099654 - ldr r4, _08099648 @ =gPokemonStorageSystemPtr - ldr r0, [r4] - lsls r1, r6, 2 - ldr r2, _0809964C @ =0x00001038 - adds r3, r0, r2 - adds r3, r1 - ldr r1, _08099650 @ =0x00001034 - adds r0, r1 - ldr r2, [r0] - str r2, [r3] - ldrb r1, [r2, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2, 0x5] - ldr r0, [r3] - adds r0, 0x43 - movs r1, 0xB - strb r1, [r0] - b _0809968A - .align 2, 0 -_08099648: .4byte gPokemonStorageSystemPtr -_0809964C: .4byte 0x00001038 -_08099650: .4byte 0x00001034 -_08099654: - ldr r5, _080996A0 @ =gPokemonStorageSystemPtr - ldr r0, [r5] - lsls r1, r6, 2 - ldr r2, _080996A4 @ =0x00001050 - adds r3, r0, r2 - adds r3, r1 - ldr r1, _080996A8 @ =0x00001034 - adds r0, r1 - ldr r2, [r0] - str r2, [r3] - ldrb r1, [r2, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - movs r1, 0x8 - orrs r0, r1 - strb r0, [r2, 0x5] - ldr r4, [r3] - adds r0, r6, 0 - movs r1, 0x6 - bl __umodsi3 - movs r1, 0x12 - subs r1, r0 - adds r4, 0x43 - strb r1, [r4] - adds r4, r5, 0 -_0809968A: - ldr r1, [r4] - ldr r2, _080996A8 @ =0x00001034 - adds r1, r2 - ldr r2, [r1] - ldr r0, _080996AC @ =SpriteCallbackDummy - str r0, [r2, 0x1C] - movs r0, 0 - str r0, [r1] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080996A0: .4byte gPokemonStorageSystemPtr -_080996A4: .4byte 0x00001050 -_080996A8: .4byte 0x00001034 -_080996AC: .4byte SpriteCallbackDummy - thumb_func_end sub_809960C - thumb_func_start sub_80996B0 sub_80996B0: @ 80996B0 push {r4,lr} diff --git a/src/pokemon/pokemon_storage_system_3.c b/src/pokemon/pokemon_storage_system_3.c index 230e9445b..28b9e2655 100644 --- a/src/pokemon/pokemon_storage_system_3.c +++ b/src/pokemon/pokemon_storage_system_3.c @@ -13,7 +13,8 @@ // Static ROM declarations void sub_8098E68(struct Sprite *sprite); -void sub_8099388(struct Sprite *sprite, u16 a0); +void sub_8099388(struct Sprite *sprite, u16 a1); +void sub_80993F4(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); @@ -310,3 +311,145 @@ u8 sub_8099374(void) { return gPokemonStorageSystemPtr->unk_1171; } + +void sub_8099388(struct Sprite *sprite, u16 a1) +{ + s16 r3; + s16 r4; + + sprite->data[1] = a1; + if (a1 == 0) + { + r3 = 0x68; + r4 = 0x40; + } + else + { + r3 = 0x98; + r4 = 24 * (a1 - 1) + 0x10; + } + sprite->data[2] = sprite->pos1.x << 3; + sprite->data[3] = sprite->pos1.y << 3; + sprite->data[4] = (r3 * 8 - sprite->data[2]) / 8; + sprite->data[5] = (r4 * 8 - sprite->data[3]) / 8; + sprite->data[6] = 8; + sprite->callback = sub_80993F4; +} + +void sub_80993F4(struct Sprite *sprite) +{ + if (sprite->data[6]) + { + sprite->data[2] += sprite->data[4]; + sprite->data[3] += sprite->data[5]; + sprite->pos1.x = sprite->data[2] >> 3; + sprite->pos1.y = sprite->data[3] >> 3; + sprite->data[6]--; + } + else + { + if (sprite->data[1] == 0) + { + sprite->pos1.x = 0x68; + sprite->pos1.y = 0x40; + } + else + { + sprite->pos1.x = 0x98; + sprite->pos1.y = (sprite->data[1] - 1) * 24 + 0x10; + } + sprite->callback = SpriteCallbackDummy; + gPokemonStorageSystemPtr->unk_1038[sprite->data[1]] = sprite; + gPokemonStorageSystemPtr->unk_1171--; + } +} + +void sub_8099480(void) +{ + if (gPokemonStorageSystemPtr->unk_1034) + { + sub_8099BE0(gPokemonStorageSystemPtr->unk_1034); + gPokemonStorageSystemPtr->unk_1034 = NULL; + } +} + +void sub_80994A8(s16 y) +{ + u16 i; + + for (i = 0; i < PARTY_SIZE; i++) + { + if (gPokemonStorageSystemPtr->unk_1038[i]) + { + s16 yy; + gPokemonStorageSystemPtr->unk_1038[i]->pos1.y += y; + yy = gPokemonStorageSystemPtr->unk_1038[i]->pos1.y + gPokemonStorageSystemPtr->unk_1038[i]->pos2.y + gPokemonStorageSystemPtr->unk_1038[i]->centerToCornerVecY; + if (yy < -0x10 || yy > 0xb0) + gPokemonStorageSystemPtr->unk_1038[i]->invisible = TRUE; + else + gPokemonStorageSystemPtr->unk_1038[i]->invisible = FALSE; + } + } +} + +void sub_8099520(u8 a0) +{ + if (gPokemonStorageSystemPtr->unk_1038[a0]) + { + sub_8099BE0(gPokemonStorageSystemPtr->unk_1038[a0]); + gPokemonStorageSystemPtr->unk_1038[a0] = NULL; + } +} + +void sub_809954C(void) +{ + u16 i; + + for (i = 0; i < PARTY_SIZE; i++) + { + if (gPokemonStorageSystemPtr->unk_1038[i]) + { + sub_8099BE0(gPokemonStorageSystemPtr->unk_1038[i]); + gPokemonStorageSystemPtr->unk_1038[i] = NULL; + } + } +} + +void sub_8099584(u8 a0, u8 a1) +{ + if (a0 == 0) + { + gPokemonStorageSystemPtr->unk_1034 = gPokemonStorageSystemPtr->unk_1038[a1]; + gPokemonStorageSystemPtr->unk_1038[a1] = NULL; + } + else if (a0 == 1) + { + gPokemonStorageSystemPtr->unk_1034 = gPokemonStorageSystemPtr->unk_1050[a1]; + gPokemonStorageSystemPtr->unk_1050[a1] = NULL; + } + else + { + return; + } + gPokemonStorageSystemPtr->unk_1034->callback = sub_80999C4; + gPokemonStorageSystemPtr->unk_1034->oam.priority = 1; + gPokemonStorageSystemPtr->unk_1034->subpriority = 7; +} + +void sub_809960C(u8 a0, u8 a1) +{ + if (a0 == 14) + { + gPokemonStorageSystemPtr->unk_1038[a1] = gPokemonStorageSystemPtr->unk_1034; + gPokemonStorageSystemPtr->unk_1038[a1]->oam.priority = 1; + gPokemonStorageSystemPtr->unk_1038[a1]->subpriority = 11; + } + else + { + gPokemonStorageSystemPtr->unk_1050[a1] = gPokemonStorageSystemPtr->unk_1034; + gPokemonStorageSystemPtr->unk_1050[a1]->oam.priority = 2; + gPokemonStorageSystemPtr->unk_1050[a1]->subpriority = 18 - (a1 % 6); + } + gPokemonStorageSystemPtr->unk_1034->callback = SpriteCallbackDummy; + gPokemonStorageSystemPtr->unk_1034 = NULL; +} -- cgit v1.2.3 From d6464c7c40f5ac1b9da557d5990e2b7e83997720 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 10 Jan 2018 21:53:25 -0500 Subject: through sub_809971C --- asm/pokemon_storage_system.s | 186 --------------------------------- include/pokemon_storage_system.h | 3 +- src/pokemon/pokemon_storage_system_3.c | 41 ++++++++ 3 files changed, 43 insertions(+), 187 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 2f7caa703..8767808fc 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,192 +5,6 @@ .text - thumb_func_start sub_80996B0 -sub_80996B0: @ 80996B0 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r4, r1, 24 - cmp r0, 0xE - bne _080996D8 - ldr r3, _080996CC @ =gPokemonStorageSystemPtr - ldr r1, [r3] - ldr r0, _080996D0 @ =0x000010c8 - adds r2, r1, r0 - lsls r0, r4, 2 - ldr r4, _080996D4 @ =0x00001038 - b _080996E4 - .align 2, 0 -_080996CC: .4byte gPokemonStorageSystemPtr -_080996D0: .4byte 0x000010c8 -_080996D4: .4byte 0x00001038 -_080996D8: - ldr r3, _08099704 @ =gPokemonStorageSystemPtr - ldr r1, [r3] - ldr r0, _08099708 @ =0x000010c8 - adds r2, r1, r0 - lsls r0, r4, 2 - ldr r4, _0809970C @ =0x00001050 -_080996E4: - adds r0, r4 - adds r1, r0 - str r1, [r2] - ldr r1, [r3] - ldr r2, _08099710 @ =0x00001034 - adds r0, r1, r2 - ldr r2, [r0] - ldr r0, _08099714 @ =SpriteCallbackDummy - str r0, [r2, 0x1C] - ldr r4, _08099718 @ =0x00001170 - adds r1, r4 - movs r0, 0 - strb r0, [r1] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08099704: .4byte gPokemonStorageSystemPtr -_08099708: .4byte 0x000010c8 -_0809970C: .4byte 0x00001050 -_08099710: .4byte 0x00001034 -_08099714: .4byte SpriteCallbackDummy -_08099718: .4byte 0x00001170 - thumb_func_end sub_80996B0 - - thumb_func_start sub_809971C -sub_809971C: @ 809971C - push {r4-r7,lr} - ldr r0, _08099730 @ =gPokemonStorageSystemPtr - ldr r2, [r0] - ldr r0, _08099734 @ =0x00001170 - adds r7, r2, r0 - ldrb r0, [r7] - cmp r0, 0x10 - bne _08099738 - movs r0, 0 - b _08099800 - .align 2, 0 -_08099730: .4byte gPokemonStorageSystemPtr -_08099734: .4byte 0x00001170 -_08099738: - adds r0, 0x1 - strb r0, [r7] - movs r1, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0809975E - ldr r1, _08099808 @ =0x000010c8 - adds r0, r2, r1 - ldr r0, [r0] - ldr r1, [r0] - ldrh r0, [r1, 0x22] - subs r0, 0x1 - strh r0, [r1, 0x22] - ldr r4, _0809980C @ =0x00001034 - adds r0, r2, r4 - ldr r1, [r0] - ldrh r0, [r1, 0x22] - adds r0, 0x1 - strh r0, [r1, 0x22] -_0809975E: - ldr r0, _08099808 @ =0x000010c8 - adds r5, r2, r0 - ldr r0, [r5] - ldr r1, [r0] - ldr r3, _08099810 @ =gSineTable - ldrb r0, [r7] - lsls r0, 4 - adds r0, r3 - movs r4, 0 - ldrsh r0, [r0, r4] - cmp r0, 0 - bge _08099778 - adds r0, 0xF -_08099778: - asrs r0, 4 - strh r0, [r1, 0x24] - ldr r0, _0809980C @ =0x00001034 - adds r6, r2, r0 - ldr r1, [r6] - ldrb r0, [r7] - lsls r0, 4 - adds r0, r3 - movs r2, 0 - ldrsh r0, [r0, r2] - cmp r0, 0 - bge _08099792 - adds r0, 0xF -_08099792: - asrs r0, 4 - negs r0, r0 - strh r0, [r1, 0x24] - ldrb r0, [r7] - cmp r0, 0x8 - bne _080997DE - ldr r4, [r6] - ldr r0, [r5] - ldr r0, [r0] - ldrb r0, [r0, 0x5] - movs r2, 0xC - ands r2, r0 - ldrb r3, [r4, 0x5] - movs r1, 0xD - negs r1, r1 - adds r0, r1, 0 - ands r0, r3 - orrs r0, r2 - strb r0, [r4, 0x5] - ldr r2, [r6] - ldr r0, [r5] - ldr r0, [r0] - adds r0, 0x43 - ldrb r0, [r0] - adds r2, 0x43 - strb r0, [r2] - ldr r0, [r5] - ldr r2, [r0] - ldrb r0, [r2, 0x5] - ands r1, r0 - movs r0, 0x4 - orrs r1, r0 - strb r1, [r2, 0x5] - ldr r0, [r5] - ldr r0, [r0] - adds r0, 0x43 - movs r1, 0x7 - strb r1, [r0] -_080997DE: - ldrb r0, [r7] - cmp r0, 0x10 - bne _080997FE - ldr r1, [r6] - ldr r0, [r5] - ldr r0, [r0] - str r0, [r6] - ldr r0, [r5] - str r1, [r0] - ldr r1, [r6] - ldr r0, _08099814 @ =sub_80999C4 - str r0, [r1, 0x1C] - ldr r0, [r5] - ldr r1, [r0] - ldr r0, _08099818 @ =SpriteCallbackDummy - str r0, [r1, 0x1C] -_080997FE: - movs r0, 0x1 -_08099800: - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_08099808: .4byte 0x000010c8 -_0809980C: .4byte 0x00001034 -_08099810: .4byte gSineTable -_08099814: .4byte sub_80999C4 -_08099818: .4byte SpriteCallbackDummy - thumb_func_end sub_809971C - thumb_func_start sub_809981C sub_809981C: @ 809981C push {r4,lr} diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index 6040e31be..38a81c2a9 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -98,7 +98,8 @@ struct PokemonStorageSystemData { struct Sprite *unk_1034; struct Sprite *unk_1038[6]; // party struct Sprite *unk_1050[30]; // box - u8 filler_10c8[8]; + struct Sprite **unk_10c8; + u8 filler_10cc[4]; u16 unk_10d0[40]; u16 unk_1120[40]; u8 unk_1170; diff --git a/src/pokemon/pokemon_storage_system_3.c b/src/pokemon/pokemon_storage_system_3.c index 28b9e2655..7f5c84b49 100644 --- a/src/pokemon/pokemon_storage_system_3.c +++ b/src/pokemon/pokemon_storage_system_3.c @@ -3,6 +3,7 @@ #include "global.h" #include "constants/species.h" #include "sprite.h" +#include "trig.h" #include "pokemon_icon.h" #include "pokemon_storage_system.h" @@ -453,3 +454,43 @@ void sub_809960C(u8 a0, u8 a1) gPokemonStorageSystemPtr->unk_1034->callback = SpriteCallbackDummy; gPokemonStorageSystemPtr->unk_1034 = NULL; } + +void sub_80996B0(u8 a0, u8 a1) +{ + if (a0 == 14) + gPokemonStorageSystemPtr->unk_10c8 = gPokemonStorageSystemPtr->unk_1038 + a1; + else + gPokemonStorageSystemPtr->unk_10c8 = gPokemonStorageSystemPtr->unk_1050 + a1; + gPokemonStorageSystemPtr->unk_1034->callback = SpriteCallbackDummy; + gPokemonStorageSystemPtr->unk_1170 = 0; +} + +bool8 sub_809971C(void) +{ + if (gPokemonStorageSystemPtr->unk_1170 == 16) + return FALSE; + gPokemonStorageSystemPtr->unk_1170++; + if (gPokemonStorageSystemPtr->unk_1170 & 1) + { + (*gPokemonStorageSystemPtr->unk_10c8)->pos1.y--; + gPokemonStorageSystemPtr->unk_1034->pos1.y++; + } + (*gPokemonStorageSystemPtr->unk_10c8)->pos2.x = gSineTable[gPokemonStorageSystemPtr->unk_1170 * 8] / 16; + gPokemonStorageSystemPtr->unk_1034->pos2.x = -(gSineTable[gPokemonStorageSystemPtr->unk_1170 * 8] / 16); + if (gPokemonStorageSystemPtr->unk_1170 == 8) + { + gPokemonStorageSystemPtr->unk_1034->oam.priority = (*gPokemonStorageSystemPtr->unk_10c8)->oam.priority; + gPokemonStorageSystemPtr->unk_1034->subpriority = (*gPokemonStorageSystemPtr->unk_10c8)->subpriority; + (*gPokemonStorageSystemPtr->unk_10c8)->oam.priority = 1; + (*gPokemonStorageSystemPtr->unk_10c8)->subpriority = 7; + } + if (gPokemonStorageSystemPtr->unk_1170 == 16) + { + struct Sprite *sprite = gPokemonStorageSystemPtr->unk_1034; + gPokemonStorageSystemPtr->unk_1034 = *(gPokemonStorageSystemPtr->unk_10c8); + (*gPokemonStorageSystemPtr->unk_10c8) = sprite; + gPokemonStorageSystemPtr->unk_1034->callback = sub_80999C4; + (*gPokemonStorageSystemPtr->unk_10c8)->callback = SpriteCallbackDummy; + } + return TRUE; +} -- cgit v1.2.3 From a1ccd03edd90601759a04f223c9558181a657728 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 10 Jan 2018 22:08:58 -0500 Subject: Refine struct at 02000028 --- include/pokemon_storage_system.h | 17 +++++++++++++---- src/pokemon/pokemon_storage_system_2.c | 2 +- src/pokemon/pokemon_storage_system_5.c | 2 +- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index 38a81c2a9..438af769b 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -50,8 +50,16 @@ struct PSS_MenuStringPtrs { const u8 *desc; }; +struct UnkStruct_2000028 { + void *unk_00; + void *unk_04; + u16 unk_08; + u16 unk_0a; + void (*unk_0c)(struct UnkStruct_2000028 *data); +}; + struct UnkStruct_2000020 { - struct UnkStruct_2000020 *unk_00; + struct UnkStruct_2000028 *unk_00; u8 unk_04; u8 unk_05; }; @@ -78,7 +86,8 @@ struct PokemonStorageSystemData { u16 unk_0008; u16 unk_000a; struct PCScreenEffectStruct unk_000c; - struct UnkStruct_2000020 unk_0020[17]; // refine size later + struct UnkStruct_2000020 unk_0020; + struct UnkStruct_2000028 unk_0028[8]; u16 unk_00a8[0x400]; u16 unk_08a8; u16 unk_08aa; @@ -99,7 +108,7 @@ struct PokemonStorageSystemData { struct Sprite *unk_1038[6]; // party struct Sprite *unk_1050[30]; // box struct Sprite **unk_10c8; - u8 filler_10cc[4]; + struct Sprite **unk_10cc; u16 unk_10d0[40]; u16 unk_1120[40]; u8 unk_1170; @@ -214,7 +223,7 @@ void sub_809CDCC(void); void sub_809CDEC(u8 a0); void sub_809CE84(void); s16 sub_809CF30(void); -void sub_809CFDC(struct UnkStruct_2000020 *a0, struct UnkStruct_2000020 *a1, u8 a2); +void sub_809CFDC(struct UnkStruct_2000020 *a0, struct UnkStruct_2000028 *a1, u8 a2); void sub_809CFF0(void); void sub_809D034(void *dest, u16 dLeft, u16 dTop, const void *src, u16 sLeft, u16 sTop, u16 width, u16 height); void sub_809D104(void *dest, u16 dLeft, u16 dTop, const void *src, u16 sLeft, u16 sTop, u16 width, u16 height); diff --git a/src/pokemon/pokemon_storage_system_2.c b/src/pokemon/pokemon_storage_system_2.c index a158b29a9..e5466ea70 100644 --- a/src/pokemon/pokemon_storage_system_2.c +++ b/src/pokemon/pokemon_storage_system_2.c @@ -176,7 +176,7 @@ void sub_8096804(void) FreeAllSpritePalettes(); ResetTasks(); gReservedSpriteTileCount = 0x280; - sub_809CFDC(gPokemonStorageSystemPtr->unk_0020, gPokemonStorageSystemPtr->unk_0020 + 1, 8); + sub_809CFDC(&gPokemonStorageSystemPtr->unk_0020, gPokemonStorageSystemPtr->unk_0028, 8); gKeyRepeatStartDelay = 20; } diff --git a/src/pokemon/pokemon_storage_system_5.c b/src/pokemon/pokemon_storage_system_5.c index f809439ff..b7c3d42f5 100644 --- a/src/pokemon/pokemon_storage_system_5.c +++ b/src/pokemon/pokemon_storage_system_5.c @@ -7,7 +7,7 @@ // Static RAM declarations -EWRAM_DATA u32 gUnknown_020384EC = 0; +EWRAM_DATA struct UnkStruct_2000020 *gUnknown_020384EC = NULL; // Static ROM declarations -- cgit v1.2.3 From 7a65953ccc2313db6de0ec061220b1a5f8751b36 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 12 Jan 2018 08:53:01 -0500 Subject: through sub_80999C4 --- asm/pokemon_storage_system.s | 248 --------------------------------- data/pokemon_storage_system.s | 16 --- include/pokemon_storage_system.h | 4 +- src/pokemon/pokemon_storage_system_3.c | 86 ++++++++++++ 4 files changed, 89 insertions(+), 265 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 8767808fc..0a3f44372 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,254 +5,6 @@ .text - thumb_func_start sub_809981C -sub_809981C: @ 809981C - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - adds r2, r0, 0 - lsls r1, 24 - lsrs r4, r1, 24 - cmp r0, 0x1 - beq _08099858 - cmp r0, 0x1 - bgt _08099836 - cmp r0, 0 - beq _0809983C - b _080998C0 -_08099836: - cmp r2, 0x2 - beq _0809987C - b _080998C0 -_0809983C: - ldr r3, _0809984C @ =gPokemonStorageSystemPtr - ldr r1, [r3] - ldr r0, _08099850 @ =0x000010cc - adds r2, r1, r0 - lsls r0, r4, 2 - ldr r4, _08099854 @ =0x00001038 - b _08099864 - .align 2, 0 -_0809984C: .4byte gPokemonStorageSystemPtr -_08099850: .4byte 0x000010cc -_08099854: .4byte 0x00001038 -_08099858: - ldr r3, _08099870 @ =gPokemonStorageSystemPtr - ldr r1, [r3] - ldr r0, _08099874 @ =0x000010cc - adds r2, r1, r0 - lsls r0, r4, 2 - ldr r4, _08099878 @ =0x00001050 -_08099864: - adds r0, r4 - adds r1, r0 - str r1, [r2] - adds r0, r3, 0 - b _0809988A - .align 2, 0 -_08099870: .4byte gPokemonStorageSystemPtr -_08099874: .4byte 0x000010cc -_08099878: .4byte 0x00001050 -_0809987C: - ldr r0, _080998C8 @ =gPokemonStorageSystemPtr - ldr r1, [r0] - ldr r3, _080998CC @ =0x000010cc - adds r2, r1, r3 - ldr r4, _080998D0 @ =0x00001034 - adds r1, r4 - str r1, [r2] -_0809988A: - ldr r0, [r0] - ldr r1, _080998CC @ =0x000010cc - adds r4, r0, r1 - ldr r0, [r4] - ldr r0, [r0] - cmp r0, 0 - beq _080998C0 - bl InitSpriteAffineAnim - ldr r0, [r4] - ldr r2, [r0] - ldrb r1, [r2, 0x1] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2, 0x1] - ldr r0, [r4] - ldr r1, [r0] - ldr r0, _080998D4 @ =gSpriteAffineAnimTable_83B6F5C - str r0, [r1, 0x10] - ldr r0, [r4] - ldr r0, [r0] - movs r1, 0 - bl StartSpriteAffineAnim -_080998C0: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080998C8: .4byte gPokemonStorageSystemPtr -_080998CC: .4byte 0x000010cc -_080998D0: .4byte 0x00001034 -_080998D4: .4byte gSpriteAffineAnimTable_83B6F5C - thumb_func_end sub_809981C - - thumb_func_start sub_80998D8 -sub_80998D8: @ 80998D8 - push {lr} - ldr r0, _080998FC @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r1, _08099900 @ =0x000010cc - adds r0, r1 - ldr r0, [r0] - ldr r1, [r0] - cmp r1, 0 - beq _080998F8 - adds r3, r1, 0 - adds r3, 0x3E - ldrb r2, [r3] - movs r0, 0x4 - ands r0, r2 - cmp r0, 0 - beq _08099904 -_080998F8: - movs r0, 0 - b _0809991A - .align 2, 0 -_080998FC: .4byte gPokemonStorageSystemPtr -_08099900: .4byte 0x000010cc -_08099904: - adds r0, r1, 0 - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _08099918 - movs r0, 0x4 - orrs r0, r2 - strb r0, [r3] -_08099918: - movs r0, 0x1 -_0809991A: - pop {r1} - bx r1 - thumb_func_end sub_80998D8 - - thumb_func_start sub_8099920 -sub_8099920: @ 8099920 - push {r4,lr} - ldr r0, _08099950 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r1, _08099954 @ =0x000010cc - adds r4, r0, r1 - ldr r0, [r4] - ldr r0, [r0] - cmp r0, 0 - beq _0809994A - ldrb r0, [r0, 0x3] - lsls r0, 26 - lsrs r0, 27 - bl FreeOamMatrix - ldr r0, [r4] - ldr r0, [r0] - bl sub_8099BE0 - ldr r1, [r4] - movs r0, 0 - str r0, [r1] -_0809994A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08099950: .4byte gPokemonStorageSystemPtr -_08099954: .4byte 0x000010cc - thumb_func_end sub_8099920 - - thumb_func_start sub_8099958 -sub_8099958: @ 8099958 - push {lr} - ldr r0, _08099988 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r1, _0809998C @ =0x000010cc - adds r3, r0, r1 - ldr r0, [r3] - ldr r0, [r0] - cmp r0, 0 - beq _08099982 - adds r2, r0, 0 - adds r2, 0x3E - ldrb r1, [r2] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - ldr r0, [r3] - ldr r0, [r0] - movs r1, 0x1 - bl StartSpriteAffineAnim -_08099982: - pop {r0} - bx r0 - .align 2, 0 -_08099988: .4byte gPokemonStorageSystemPtr -_0809998C: .4byte 0x000010cc - thumb_func_end sub_8099958 - - thumb_func_start sub_8099990 -sub_8099990: @ 8099990 - push {lr} - ldr r0, _080999A4 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r1, _080999A8 @ =0x000010cc - adds r2, r0, r1 - ldr r0, [r2] - cmp r0, 0 - bne _080999AC - movs r0, 0 - b _080999C0 - .align 2, 0 -_080999A4: .4byte gPokemonStorageSystemPtr -_080999A8: .4byte 0x000010cc -_080999AC: - ldr r0, [r0] - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _080999BE - movs r0, 0 - str r0, [r2] -_080999BE: - movs r0, 0x1 -_080999C0: - pop {r1} - bx r1 - thumb_func_end sub_8099990 - - thumb_func_start sub_80999C4 -sub_80999C4: @ 80999C4 - ldr r1, _080999E4 @ =gPokemonStorageSystemPtr - ldr r1, [r1] - movs r2, 0x8E - lsls r2, 5 - adds r1, r2 - ldr r2, [r1] - ldrh r2, [r2, 0x20] - strh r2, [r0, 0x20] - ldr r2, [r1] - ldrh r1, [r2, 0x26] - ldrh r2, [r2, 0x22] - adds r1, r2 - adds r1, 0x4 - strh r1, [r0, 0x22] - bx lr - .align 2, 0 -_080999E4: .4byte gPokemonStorageSystemPtr - thumb_func_end sub_80999C4 - thumb_func_start sub_80999E8 sub_80999E8: @ 80999E8 push {r4-r6,lr} diff --git a/data/pokemon_storage_system.s b/data/pokemon_storage_system.s index 66cc84000..b4da5c331 100644 --- a/data/pokemon_storage_system.s +++ b/data/pokemon_storage_system.s @@ -3,22 +3,6 @@ .section .rodata - .align 2 -gSpriteAffineAnim_83B6F34:: @ 83B6F34 - obj_rot_scal_anim_frame 0xFFFE, 0xFFFE, 0, 120 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnim_83B6F44:: @ 83B6F44 - obj_rot_scal_anim_frame 0x10, 0x10, 0, 0 - obj_rot_scal_anim_frame 0x10, 0x10, 0, 15 - obj_rot_scal_anim_end - - .align 2 -gSpriteAffineAnimTable_83B6F5C:: @ 83B6F5C - .4byte gSpriteAffineAnim_83B6F34 - .4byte gSpriteAffineAnim_83B6F44 - .align 2 gWallpaperPalettes_Forest: @ 83B6F64 .incbin "graphics/pokemon_storage/box_bg1.gbapal" diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index 438af769b..129202934 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -121,7 +121,9 @@ struct PokemonStorageSystemData { s8 unk_117b; u8 unk_117c; u8 unk_117d; - u8 filler_117e[0x6a]; + u8 filler_117e[0x42]; + struct Sprite *unk_11c0; + u8 filler_11c4[0x24]; 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 7f5c84b49..2af88e8cd 100644 --- a/src/pokemon/pokemon_storage_system_3.c +++ b/src/pokemon/pokemon_storage_system_3.c @@ -494,3 +494,89 @@ bool8 sub_809971C(void) } return TRUE; } + +const union AffineAnimCmd gSpriteAffineAnim_83B6F34[] = { + AFFINEANIMCMD_FRAME(-2, -2, 0, 120), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd gSpriteAffineAnim_83B6F44[] = { + AFFINEANIMCMD_FRAME(16, 16, 0, 0), + AFFINEANIMCMD_FRAME(16, 16, 0, 15), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83B6F5C[] = { + gSpriteAffineAnim_83B6F34, + gSpriteAffineAnim_83B6F44 +}; + +void sub_809981C(u8 mode, u8 idx) +{ + switch (mode) + { + case 0: + gPokemonStorageSystemPtr->unk_10cc = gPokemonStorageSystemPtr->unk_1038 + idx; + break; + case 1: + gPokemonStorageSystemPtr->unk_10cc = gPokemonStorageSystemPtr->unk_1050 + idx; + break; + case 2: + gPokemonStorageSystemPtr->unk_10cc = &gPokemonStorageSystemPtr->unk_1034; + break; + default: + return; + } + if (*gPokemonStorageSystemPtr->unk_10cc) + { + InitSpriteAffineAnim(*gPokemonStorageSystemPtr->unk_10cc); + (*gPokemonStorageSystemPtr->unk_10cc)->oam.affineMode = ST_OAM_AFFINE_NORMAL; + (*gPokemonStorageSystemPtr->unk_10cc)->affineAnims = gSpriteAffineAnimTable_83B6F5C; + StartSpriteAffineAnim(*gPokemonStorageSystemPtr->unk_10cc, 0); + } +} + +bool8 sub_80998D8(void) +{ + if (*gPokemonStorageSystemPtr->unk_10cc == NULL || (*gPokemonStorageSystemPtr->unk_10cc)->invisible) + return FALSE; + if ((*gPokemonStorageSystemPtr->unk_10cc)->affineAnimEnded) + { + (*gPokemonStorageSystemPtr->unk_10cc)->invisible = TRUE; + } + return TRUE; +} + +void sub_8099920(void) +{ + if (*gPokemonStorageSystemPtr->unk_10cc) + { + FreeOamMatrix((*gPokemonStorageSystemPtr->unk_10cc)->oam.matrixNum); + sub_8099BE0(*gPokemonStorageSystemPtr->unk_10cc); + *gPokemonStorageSystemPtr->unk_10cc = NULL; + } +} + +void sub_8099958(void) +{ + if (*gPokemonStorageSystemPtr->unk_10cc) + { + (*gPokemonStorageSystemPtr->unk_10cc)->invisible = FALSE; + StartSpriteAffineAnim(*gPokemonStorageSystemPtr->unk_10cc, 1); + } +} + +bool8 sub_8099990(void) +{ + if (gPokemonStorageSystemPtr->unk_10cc == NULL) + return FALSE; + if ((*gPokemonStorageSystemPtr->unk_10cc)->affineAnimEnded) + gPokemonStorageSystemPtr->unk_10cc = NULL; + return TRUE; +} + +void sub_80999C4(struct Sprite *sprite) +{ + sprite->pos1.x = gPokemonStorageSystemPtr->unk_11c0->pos1.x; + sprite->pos1.y = gPokemonStorageSystemPtr->unk_11c0->pos1.y + gPokemonStorageSystemPtr->unk_11c0->pos2.y + 4; +} -- cgit v1.2.3 From 12ec094b4b3641cf33fc1cf45634090e067c70b6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 12 Jan 2018 09:46:31 -0500 Subject: Remaining functions and data in pss3 --- asm/pokemon_storage_system.s | 269 --------------------------------- include/pokemon_icon.h | 4 + src/pokemon/pokemon_storage_system_3.c | 131 ++++++++++++---- 3 files changed, 106 insertions(+), 298 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 0a3f44372..ce1de0d2e 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,275 +5,6 @@ .text - thumb_func_start sub_80999E8 -sub_80999E8: @ 80999E8 - push {r4-r6,lr} - lsls r0, 16 - lsrs r3, r0, 16 - movs r4, 0 - ldr r1, _08099A58 @ =gPokemonStorageSystemPtr - ldr r0, [r1] - movs r2, 0x89 - lsls r2, 5 - adds r0, r2 - ldrh r0, [r0] - adds r2, r1, 0 - cmp r0, r3 - beq _08099A20 - adds r6, r2, 0 - movs r5, 0x89 - lsls r5, 5 -_08099A08: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x27 - bhi _08099A20 - ldr r0, [r6] - lsls r1, r4, 1 - adds r0, r5 - adds r0, r1 - ldrh r0, [r0] - cmp r0, r3 - bne _08099A08 -_08099A20: - cmp r4, 0x28 - bne _08099A60 - movs r4, 0 - ldr r0, [r2] - movs r5, 0x89 - lsls r5, 5 - adds r0, r5 - ldrh r0, [r0] - cmp r0, 0 - beq _08099A4E - adds r6, r2, 0 -_08099A36: - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x27 - bhi _08099A4E - ldr r0, [r6] - lsls r1, r4, 1 - adds r0, r5 - adds r0, r1 - ldrh r0, [r0] - cmp r0, 0 - bne _08099A36 -_08099A4E: - cmp r4, 0x28 - bne _08099A60 - ldr r0, _08099A5C @ =0x0000ffff - b _08099A94 - .align 2, 0 -_08099A58: .4byte gPokemonStorageSystemPtr -_08099A5C: .4byte 0x0000ffff -_08099A60: - ldr r1, [r2] - lsls r2, r4, 1 - movs r5, 0x89 - lsls r5, 5 - adds r0, r1, r5 - adds r0, r2 - strh r3, [r0] - ldr r0, _08099A9C @ =0x000010d0 - adds r1, r0 - adds r1, r2 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - lsls r4, 20 - lsrs r4, 16 - ldr r1, _08099AA0 @ =gMonIconTable - lsls r0, r3, 2 - adds r0, r1 - ldr r0, [r0] - lsls r1, r4, 5 - ldr r2, _08099AA4 @ =0x06010000 - adds r1, r2 - ldr r2, _08099AA8 @ =0x04000080 - bl CpuSet - adds r0, r4, 0 -_08099A94: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_08099A9C: .4byte 0x000010d0 -_08099AA0: .4byte gMonIconTable -_08099AA4: .4byte 0x06010000 -_08099AA8: .4byte 0x04000080 - thumb_func_end sub_80999E8 - - thumb_func_start sub_8099AAC -sub_8099AAC: @ 8099AAC - push {r4-r7,lr} - lsls r0, 16 - lsrs r6, r0, 16 - movs r3, 0 - ldr r0, _08099AE4 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - movs r1, 0x89 - lsls r1, 5 - adds r5, r0, r1 - subs r1, 0x50 - adds r4, r0, r1 - ldr r0, _08099AE8 @ =0x0000ffff - adds r7, r0, 0 -_08099AC6: - lsls r1, r3, 1 - adds r2, r5, r1 - ldrh r0, [r2] - cmp r0, r6 - bne _08099AEC - adds r1, r4, r1 - ldrh r0, [r1] - subs r0, 0x1 - strh r0, [r1] - ands r0, r7 - cmp r0, 0 - bne _08099AF6 - strh r0, [r2] - b _08099AF6 - .align 2, 0 -_08099AE4: .4byte gPokemonStorageSystemPtr -_08099AE8: .4byte 0x0000ffff -_08099AEC: - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0x27 - bls _08099AC6 -_08099AF6: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8099AAC - - thumb_func_start PSS_SpawnMonIconSprite -PSS_SpawnMonIconSprite: @ 8099AFC - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x1C - ldr r4, [sp, 0x3C] - ldr r5, [sp, 0x40] - lsls r0, 16 - lsrs r6, r0, 16 - lsls r2, 16 - lsrs r2, 16 - str r2, [sp, 0x18] - lsls r3, 16 - lsrs r3, 16 - mov r8, r3 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - lsrs r5, 24 - mov r9, r5 - mov r2, sp - ldr r0, _08099BAC @ =gSpriteTemplate_83B6F14 - ldm r0!, {r3,r5,r7} - stm r2!, {r3,r5,r7} - ldm r0!, {r3,r5,r7} - stm r2!, {r3,r5,r7} - adds r0, r6, 0 - bl mon_icon_convert_unown_species_id - mov r10, r0 - mov r6, r10 - mov r2, sp - ldr r1, _08099BB0 @ =gMonIconPaletteIndices - adds r1, r6, r1 - ldr r3, _08099BB4 @ =0x0000dac0 - adds r0, r3, 0 - ldrb r1, [r1] - adds r0, r1 - strh r0, [r2, 0x2] - adds r0, r6, 0 - bl sub_80999E8 - lsls r0, 16 - lsrs r0, 16 - adds r5, r0, 0 - ldr r0, _08099BB8 @ =0x0000ffff - cmp r5, r0 - beq _08099BCE - ldr r7, [sp, 0x18] - lsls r1, r7, 16 - asrs r1, 16 - mov r0, r8 - lsls r2, r0, 16 - asrs r2, 16 - mov r0, sp - mov r3, r9 - bl CreateSprite - lsls r0, 24 - lsrs r2, r0, 24 - cmp r2, 0x40 - beq _08099BC8 - ldr r1, _08099BBC @ =gSprites - lsls r0, r2, 4 - adds r0, r2 - lsls r0, 2 - adds r0, r1 - ldr r2, _08099BC0 @ =0x000003ff - ands r2, r5 - ldrh r3, [r0, 0x4] - ldr r1, _08099BC4 @ =0xfffffc00 - ands r1, r3 - orrs r1, r2 - strh r1, [r0, 0x4] - movs r1, 0x3 - ands r4, r1 - lsls r3, r4, 2 - ldrb r2, [r0, 0x5] - movs r1, 0xD - negs r1, r1 - ands r1, r2 - orrs r1, r3 - strb r1, [r0, 0x5] - mov r1, r10 - strh r1, [r0, 0x2E] - b _08099BD0 - .align 2, 0 -_08099BAC: .4byte gSpriteTemplate_83B6F14 -_08099BB0: .4byte gMonIconPaletteIndices -_08099BB4: .4byte 0x0000dac0 -_08099BB8: .4byte 0x0000ffff -_08099BBC: .4byte gSprites -_08099BC0: .4byte 0x000003ff -_08099BC4: .4byte 0xfffffc00 -_08099BC8: - adds r0, r6, 0 - bl sub_8099AAC -_08099BCE: - movs r0, 0 -_08099BD0: - add sp, 0x1C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end PSS_SpawnMonIconSprite - - thumb_func_start sub_8099BE0 -sub_8099BE0: @ 8099BE0 - push {r4,lr} - adds r4, r0, 0 - ldrh r0, [r4, 0x2E] - bl sub_8099AAC - adds r0, r4, 0 - bl DestroySprite - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_8099BE0 - // file boundary? thumb_func_start sub_8099BF8 diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h index 7e26c1c9b..a1a965d81 100644 --- a/include/pokemon_icon.h +++ b/include/pokemon_icon.h @@ -1,6 +1,9 @@ #ifndef GUARD_POKEMON_ICON_H #define GUARD_POKEMON_ICON_H +extern const u8 * const gMonIconTable[]; +extern const u8 gMonIconPaletteIndices[]; + u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality); u8 UpdateMonIconFrame(struct Sprite *sprite); u8 sub_809D3A4(u16 arg0, void (*)(struct Sprite *), int, u8 arg3, u32 arg4); @@ -12,5 +15,6 @@ void sub_809D580(u16); void sub_809D608(u16); void sub_809D62C(struct Sprite *sprite); void sub_809D824(struct Sprite *sprite, u8 animNum); +u16 mon_icon_convert_unown_species_id(u16 species, u32 personality); #endif // GUARD_POKEMON_ICON_H diff --git a/src/pokemon/pokemon_storage_system_3.c b/src/pokemon/pokemon_storage_system_3.c index 2af88e8cd..9d4b88b5d 100644 --- a/src/pokemon/pokemon_storage_system_3.c +++ b/src/pokemon/pokemon_storage_system_3.c @@ -24,20 +24,6 @@ void sub_8099BE0(struct Sprite *sprite); const struct OamData gOamData_83B6F2C; -const struct SpriteTemplate gSpriteTemplate_83B6F14 = { - 0x000f, - 0xdac0, - &gOamData_83B6F2C, - gDummySpriteAnimTable, - NULL, - gDummySpriteAffineAnimTable, - SpriteCallbackDummy -}; - -const struct OamData gOamData_83B6F2C = { - .size = 2 -}; - // .text u8 get_preferred_box(void) @@ -495,21 +481,7 @@ bool8 sub_809971C(void) return TRUE; } -const union AffineAnimCmd gSpriteAffineAnim_83B6F34[] = { - AFFINEANIMCMD_FRAME(-2, -2, 0, 120), - AFFINEANIMCMD_END -}; - -const union AffineAnimCmd gSpriteAffineAnim_83B6F44[] = { - AFFINEANIMCMD_FRAME(16, 16, 0, 0), - AFFINEANIMCMD_FRAME(16, 16, 0, 15), - AFFINEANIMCMD_END -}; - -const union AffineAnimCmd *const gSpriteAffineAnimTable_83B6F5C[] = { - gSpriteAffineAnim_83B6F34, - gSpriteAffineAnim_83B6F44 -}; +const union AffineAnimCmd *const gSpriteAffineAnimTable_83B6F5C[]; void sub_809981C(u8 mode, u8 idx) { @@ -580,3 +552,104 @@ void sub_80999C4(struct Sprite *sprite) sprite->pos1.x = gPokemonStorageSystemPtr->unk_11c0->pos1.x; sprite->pos1.y = gPokemonStorageSystemPtr->unk_11c0->pos1.y + gPokemonStorageSystemPtr->unk_11c0->pos2.y + 4; } + +u16 sub_80999E8(u16 a0) +{ + u16 i; + u16 retval; + + for (i = 0; i < 40; i++) + { + if (gPokemonStorageSystemPtr->unk_1120[i] == a0) + break; + } + if (i == 40) + { + for (i = 0; i < 40; i++) + { + if (gPokemonStorageSystemPtr->unk_1120[i] == 0) + break; + } + } + if (i != 40) + { + gPokemonStorageSystemPtr->unk_1120[i] = a0; + gPokemonStorageSystemPtr->unk_10d0[i]++; + retval = i * 16; + CpuCopy32(gMonIconTable[a0], BG_CHAR_ADDR(4) + 32 * retval, 0x200); + return retval; + } + return -1; +} + +void sub_8099AAC(u16 a0) +{ + u16 i; + + for (i = 0; i < 40; i++) + { + if (gPokemonStorageSystemPtr->unk_1120[i] == a0) + { + if (--gPokemonStorageSystemPtr->unk_10d0[i] == 0) + gPokemonStorageSystemPtr->unk_1120[i] = 0; + break; + } + } +} + +struct Sprite *PSS_SpawnMonIconSprite(u16 species, u32 personality, s16 x, s16 y, u8 priority, u8 subpriority) +{ + struct SpriteTemplate template = { + 0x000f, + 0xdac0, + &gOamData_83B6F2C, + gDummySpriteAnimTable, + NULL, + gDummySpriteAffineAnimTable, + SpriteCallbackDummy + }; + u16 tileNum; + u8 spriteId; + + species = mon_icon_convert_unown_species_id(species, personality); + template.paletteTag = 0xdac0 + gMonIconPaletteIndices[species]; + tileNum = sub_80999E8(species); + if (tileNum == 0xFFFF) + return NULL; + spriteId = CreateSprite(&template, x, y, subpriority); + if (spriteId == MAX_SPRITES) + { + sub_8099AAC(species); + return NULL; + } + gSprites[spriteId].oam.tileNum = tileNum; + gSprites[spriteId].oam.priority = priority; + gSprites[spriteId].data[0] = species; + return gSprites + spriteId; +} + +void sub_8099BE0(struct Sprite *sprite) +{ + sub_8099AAC(sprite->data[0]); + DestroySprite(sprite); +} + +const struct OamData gOamData_83B6F2C = { + .size = 2 +}; + +const union AffineAnimCmd gSpriteAffineAnim_83B6F34[] = { + AFFINEANIMCMD_FRAME(-2, -2, 0, 120), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd gSpriteAffineAnim_83B6F44[] = { + AFFINEANIMCMD_FRAME(16, 16, 0, 0), + AFFINEANIMCMD_FRAME(16, 16, 0, 15), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_83B6F5C[] = { + gSpriteAffineAnim_83B6F34, + gSpriteAffineAnim_83B6F44 +}; -- cgit v1.2.3 From 3b8f6133865af6ede3628f3df8dd71648b43b3bc Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 12 Jan 2018 09:57:20 -0500 Subject: some renaming in pss3 --- src/pokemon/pokemon_storage_system_2.c | 6 +-- src/pokemon/pokemon_storage_system_3.c | 78 +++++++++++++++++----------------- 2 files changed, 42 insertions(+), 42 deletions(-) diff --git a/src/pokemon/pokemon_storage_system_2.c b/src/pokemon/pokemon_storage_system_2.c index e5466ea70..f5eaa2166 100644 --- a/src/pokemon/pokemon_storage_system_2.c +++ b/src/pokemon/pokemon_storage_system_2.c @@ -872,7 +872,7 @@ void sub_809746C(void) gPokemonStorageSystemPtr->unk_0004++; break; case 3: - if (!sub_8099374()) + if (sub_8099374() == 0) { sub_809B6BC(); BoxSetMosaic(); @@ -965,7 +965,7 @@ void sub_8097594(void) } break; case 6: - if (!sub_8099374()) + if (sub_8099374() == 0) { sub_809B440(); BoxSetMosaic(); @@ -1073,7 +1073,7 @@ void sub_8097858(void) gPokemonStorageSystemPtr->unk_0004++; break; case 1: - if (!sub_8099374()) + if (sub_8099374() == 0) { sub_80987DC(); SetPSSCallback(sub_8096C84); diff --git a/src/pokemon/pokemon_storage_system_3.c b/src/pokemon/pokemon_storage_system_3.c index 9d4b88b5d..da26c6fc5 100644 --- a/src/pokemon/pokemon_storage_system_3.c +++ b/src/pokemon/pokemon_storage_system_3.c @@ -13,12 +13,12 @@ // Static ROM declarations -void sub_8098E68(struct Sprite *sprite); -void sub_8099388(struct Sprite *sprite, u16 a1); -void sub_80993F4(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); +static void sub_8098E68(struct Sprite *sprite); +static void sub_8099388(struct Sprite *sprite, u16 a1); +static void sub_80993F4(struct Sprite *sprite); +static void sub_80999C4(struct Sprite *sprite); +static struct Sprite *PSS_SpawnMonIconSprite(u16 species, u32 personality, s16 x, s16 y, u8 priority, u8 subpriority); +static void PSS_DestroyMonIconSprite(struct Sprite *sprite); // .rodata @@ -88,7 +88,7 @@ void sub_8098D20(u8 monId) } } -void sub_8098DE0(s16 a0) +static void sub_8098DE0(s16 a0) { u16 monId; for (monId = 0; monId < 30; monId++) @@ -102,7 +102,7 @@ void sub_8098DE0(s16 a0) } } -void sub_8098E24(struct Sprite *sprite) +static void sub_8098E24(struct Sprite *sprite) { if (sprite->data[1] != 0) { @@ -117,7 +117,7 @@ void sub_8098E24(struct Sprite *sprite) } } -void sub_8098E68(struct Sprite *sprite) +static void sub_8098E68(struct Sprite *sprite) { if (sprite->data[4] != 0) { @@ -132,7 +132,7 @@ void sub_8098E68(struct Sprite *sprite) } } -void sub_8098EA0(u8 col) +static void sub_8098EA0(u8 col) { u16 i; @@ -140,44 +140,44 @@ void sub_8098EA0(u8 col) { if (gPokemonStorageSystemPtr->unk_1050[col]) { - sub_8099BE0(gPokemonStorageSystemPtr->unk_1050[col]); + PSS_DestroyMonIconSprite(gPokemonStorageSystemPtr->unk_1050[col]); gPokemonStorageSystemPtr->unk_1050[col] = NULL; } col += 6; } } -u8 sub_8098EE0(u8 a0, u16 a1, s16 a2) +static u8 sub_8098EE0(u8 col, u16 a1, s16 a2) { u16 i; u16 x; u16 y; u8 count; u8 x1; - u16 sp1c; + u16 curX; y = 0x2c; - x = 24 * a0 + 0x64; - sp1c = x - (a1 + 1) * a2; - x1 = 18 - a0; + x = 24 * col + 0x64; + curX = x - (a1 + 1) * a2; + x1 = 18 - col; count = 0; for (i = 0; i < 5; i++) { - u16 species = GetBoxMonData(gPokemonStorage.boxes[gPokemonStorageSystemPtr->unk_117d] + a0, MON_DATA_SPECIES2); + u16 species = GetBoxMonData(gPokemonStorage.boxes[gPokemonStorageSystemPtr->unk_117d] + col, 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[col] = PSS_SpawnMonIconSprite(species, GetBoxMonData(gPokemonStorage.boxes[gPokemonStorageSystemPtr->unk_117d] + col, MON_DATA_PERSONALITY), curX, y, 2, x1); + if (gPokemonStorageSystemPtr->unk_1050[col]) { - 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; + gPokemonStorageSystemPtr->unk_1050[col]->data[1] = a1; + gPokemonStorageSystemPtr->unk_1050[col]->data[2] = a2; + gPokemonStorageSystemPtr->unk_1050[col]->data[3] = x; + gPokemonStorageSystemPtr->unk_1050[col]->callback = sub_8098E24; count++; } } - a0 += 6; + col += 6; y += 24; } return count; @@ -299,7 +299,7 @@ u8 sub_8099374(void) return gPokemonStorageSystemPtr->unk_1171; } -void sub_8099388(struct Sprite *sprite, u16 a1) +static void sub_8099388(struct Sprite *sprite, u16 a1) { s16 r3; s16 r4; @@ -323,7 +323,7 @@ void sub_8099388(struct Sprite *sprite, u16 a1) sprite->callback = sub_80993F4; } -void sub_80993F4(struct Sprite *sprite) +static void sub_80993F4(struct Sprite *sprite) { if (sprite->data[6]) { @@ -355,7 +355,7 @@ void sub_8099480(void) { if (gPokemonStorageSystemPtr->unk_1034) { - sub_8099BE0(gPokemonStorageSystemPtr->unk_1034); + PSS_DestroyMonIconSprite(gPokemonStorageSystemPtr->unk_1034); gPokemonStorageSystemPtr->unk_1034 = NULL; } } @@ -383,7 +383,7 @@ void sub_8099520(u8 a0) { if (gPokemonStorageSystemPtr->unk_1038[a0]) { - sub_8099BE0(gPokemonStorageSystemPtr->unk_1038[a0]); + PSS_DestroyMonIconSprite(gPokemonStorageSystemPtr->unk_1038[a0]); gPokemonStorageSystemPtr->unk_1038[a0] = NULL; } } @@ -396,7 +396,7 @@ void sub_809954C(void) { if (gPokemonStorageSystemPtr->unk_1038[i]) { - sub_8099BE0(gPokemonStorageSystemPtr->unk_1038[i]); + PSS_DestroyMonIconSprite(gPokemonStorageSystemPtr->unk_1038[i]); gPokemonStorageSystemPtr->unk_1038[i] = NULL; } } @@ -524,7 +524,7 @@ void sub_8099920(void) if (*gPokemonStorageSystemPtr->unk_10cc) { FreeOamMatrix((*gPokemonStorageSystemPtr->unk_10cc)->oam.matrixNum); - sub_8099BE0(*gPokemonStorageSystemPtr->unk_10cc); + PSS_DestroyMonIconSprite(*gPokemonStorageSystemPtr->unk_10cc); *gPokemonStorageSystemPtr->unk_10cc = NULL; } } @@ -547,13 +547,13 @@ bool8 sub_8099990(void) return TRUE; } -void sub_80999C4(struct Sprite *sprite) +static void sub_80999C4(struct Sprite *sprite) { sprite->pos1.x = gPokemonStorageSystemPtr->unk_11c0->pos1.x; sprite->pos1.y = gPokemonStorageSystemPtr->unk_11c0->pos1.y + gPokemonStorageSystemPtr->unk_11c0->pos2.y + 4; } -u16 sub_80999E8(u16 a0) +static u16 PSS_LoadSpeciesIconGfx(u16 a0) { u16 i; u16 retval; @@ -579,10 +579,10 @@ u16 sub_80999E8(u16 a0) CpuCopy32(gMonIconTable[a0], BG_CHAR_ADDR(4) + 32 * retval, 0x200); return retval; } - return -1; + return 0xFFFF; } -void sub_8099AAC(u16 a0) +static void PSS_ForgetSpeciesIcon(u16 a0) { u16 i; @@ -597,7 +597,7 @@ void sub_8099AAC(u16 a0) } } -struct Sprite *PSS_SpawnMonIconSprite(u16 species, u32 personality, s16 x, s16 y, u8 priority, u8 subpriority) +static struct Sprite *PSS_SpawnMonIconSprite(u16 species, u32 personality, s16 x, s16 y, u8 priority, u8 subpriority) { struct SpriteTemplate template = { 0x000f, @@ -613,13 +613,13 @@ struct Sprite *PSS_SpawnMonIconSprite(u16 species, u32 personality, s16 x, s16 y species = mon_icon_convert_unown_species_id(species, personality); template.paletteTag = 0xdac0 + gMonIconPaletteIndices[species]; - tileNum = sub_80999E8(species); + tileNum = PSS_LoadSpeciesIconGfx(species); if (tileNum == 0xFFFF) return NULL; spriteId = CreateSprite(&template, x, y, subpriority); if (spriteId == MAX_SPRITES) { - sub_8099AAC(species); + PSS_ForgetSpeciesIcon(species); return NULL; } gSprites[spriteId].oam.tileNum = tileNum; @@ -628,9 +628,9 @@ struct Sprite *PSS_SpawnMonIconSprite(u16 species, u32 personality, s16 x, s16 y return gSprites + spriteId; } -void sub_8099BE0(struct Sprite *sprite) +static void PSS_DestroyMonIconSprite(struct Sprite *sprite) { - sub_8099AAC(sprite->data[0]); + PSS_ForgetSpeciesIcon(sprite->data[0]); DestroySprite(sprite); } -- cgit v1.2.3 From f37add5cfb4bb369ec096d91f62915ee4f88a1d7 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 12 Jan 2018 12:13:35 -0500 Subject: through sub_8099D90 --- asm/pokemon_storage_system.s | 226 --------------------------------- include/pokemon_storage_system.h | 22 +++- ld_script.txt | 1 + src/pokemon/pokemon_storage_system_4.c | 71 +++++++++++ src/pokemon/pokemon_storage_system_6.c | 14 ++ 5 files changed, 106 insertions(+), 228 deletions(-) create mode 100644 src/pokemon/pokemon_storage_system_6.c diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 41987f841..e66901961 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,232 +5,6 @@ .text - thumb_func_start sub_8099BF8 -sub_8099BF8: @ 8099BF8 - push {r4,lr} - sub sp, 0x4 - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _08099C50 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r1, _08099C54 @ =0x000008ba - adds r2, r0, r1 - movs r1, 0 - strb r1, [r2] - ldr r2, _08099C58 @ =0x000008b4 - adds r0, r2 - strh r1, [r0] - str r1, [sp] - ldr r1, _08099C5C @ =0x040000d4 - mov r0, sp - str r0, [r1] - ldr r0, _08099C60 @ =0x0600d000 - str r0, [r1, 0x4] - ldr r0, _08099C64 @ =0x85000400 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r0, r4, 0 - movs r1, 0 - bl sub_8099EB0 - adds r0, r4, 0 - bl sub_809A23C - bl sub_809A6DC - adds r0, r4, 0 - bl SpawnBoxIconSprites - ldr r1, _08099C68 @ =REG_BG2CNT - ldr r2, _08099C6C @ =0x00005a0a - adds r0, r2, 0 - strh r0, [r1] - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08099C50: .4byte gPokemonStorageSystemPtr -_08099C54: .4byte 0x000008ba -_08099C58: .4byte 0x000008b4 -_08099C5C: .4byte 0x040000d4 -_08099C60: .4byte 0x0600d000 -_08099C64: .4byte 0x85000400 -_08099C68: .4byte REG_BG2CNT -_08099C6C: .4byte 0x00005a0a - thumb_func_end sub_8099BF8 - - thumb_func_start sub_8099C70 -sub_8099C70: @ 8099C70 - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - adds r5, r0, 0 - bl sub_8099D90 - lsls r0, 24 - asrs r4, r0, 24 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_8099EB0 - ldr r0, _08099D10 @ =gPokemonStorageSystemPtr - ldr r2, [r0] - lsls r0, r4, 1 - adds r0, r4 - lsls r0, 1 - ldr r3, _08099D14 @ =0x000008b6 - adds r1, r2, r3 - strh r0, [r1] - ldr r0, _08099D18 @ =0x000008b8 - adds r1, r2, r0 - movs r0, 0x20 - strh r0, [r1] - ldr r1, _08099D1C @ =0x000008bb - adds r0, r2, r1 - strb r5, [r0] - movs r1, 0 - cmp r4, 0 - bgt _08099CAE - movs r1, 0x5 -_08099CAE: - ldr r3, _08099D20 @ =0x000008bc - adds r0, r2, r3 - strh r1, [r0] - ldr r1, _08099D24 @ =0x000008be - adds r0, r2, r1 - strh r4, [r0] - movs r1, 0x38 - cmp r4, 0 - ble _08099CC6 - movs r3, 0x84 - lsls r3, 1 - adds r1, r3, 0 -_08099CC6: - movs r3, 0x8C - lsls r3, 4 - adds r0, r2, r3 - strh r1, [r0] - movs r1, 0 - cmp r4, 0 - bgt _08099CD6 - movs r1, 0x5 -_08099CD6: - ldr r3, _08099D28 @ =0x000008c2 - adds r0, r2, r3 - strh r1, [r0] - ldr r1, _08099D2C @ =0x000008c4 - adds r0, r2, r1 - strh r4, [r0] - adds r3, 0x4 - adds r1, r2, r3 - movs r0, 0 - strh r0, [r1] - ldr r0, _08099D30 @ =0x000008c8 - adds r1, r2, r0 - movs r0, 0x2 - strh r0, [r1] - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_809900C - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_809A3D0 - adds r0, r4, 0 - bl sub_809A774 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_08099D10: .4byte gPokemonStorageSystemPtr -_08099D14: .4byte 0x000008b6 -_08099D18: .4byte 0x000008b8 -_08099D1C: .4byte 0x000008bb -_08099D20: .4byte 0x000008bc -_08099D24: .4byte 0x000008be -_08099D28: .4byte 0x000008c2 -_08099D2C: .4byte 0x000008c4 -_08099D30: .4byte 0x000008c8 - thumb_func_end sub_8099C70 - - thumb_func_start sub_8099D34 -sub_8099D34: @ 8099D34 - push {r4,lr} - bl sub_80990AC - lsls r0, 24 - lsrs r2, r0, 24 - ldr r0, _08099D78 @ =gPokemonStorageSystemPtr - ldr r1, [r0] - ldr r0, _08099D7C @ =0x000008b8 - adds r3, r1, r0 - ldrh r0, [r3] - cmp r0, 0 - beq _08099D88 - ldr r4, _08099D80 @ =0x000008b4 - adds r2, r1, r4 - adds r4, 0x2 - adds r0, r1, r4 - ldrh r0, [r0] - ldrh r1, [r2] - adds r0, r1 - ldr r1, _08099D84 @ =0x000001ff - ands r0, r1 - strh r0, [r2] - ldrh r0, [r3] - subs r0, 0x1 - strh r0, [r3] - lsls r0, 16 - cmp r0, 0 - bne _08099D74 - bl sub_809A598 - bl sub_809A810 -_08099D74: - movs r0, 0x1 - b _08099D8A - .align 2, 0 -_08099D78: .4byte gPokemonStorageSystemPtr -_08099D7C: .4byte 0x000008b8 -_08099D80: .4byte 0x000008b4 -_08099D84: .4byte 0x000001ff -_08099D88: - adds r0, r2, 0 -_08099D8A: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8099D34 - - thumb_func_start sub_8099D90 -sub_8099D90: @ 8099D90 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - bl get_preferred_box - lsls r0, 24 - lsrs r1, r0, 24 - movs r2, 0 - cmp r1, r4 - beq _08099DBA -_08099DA4: - adds r0, r1, 0x1 - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0xD - bls _08099DB0 - movs r1, 0 -_08099DB0: - adds r0, r2, 0x1 - lsls r0, 24 - lsrs r2, r0, 24 - cmp r1, r4 - bne _08099DA4 -_08099DBA: - movs r0, 0x1 - negs r0, r0 - cmp r2, 0x6 - bhi _08099DC4 - movs r0, 0x1 -_08099DC4: - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_8099D90 - thumb_func_start sub_8099DCC sub_8099DCC: @ 8099DCC push {r4,lr} diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index 129202934..09b3be60f 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -99,11 +99,26 @@ struct PokemonStorageSystemData { bool8 unk_08b1; s16 unk_08b2; u16 unk_08b4; - u8 filler_08b6[0x4a6]; + u16 unk_08b6; + u16 unk_08b8; + u8 unk_08ba; + u8 unk_08bb; + u16 unk_08bc; + u16 unk_08be; + u16 unk_08c0; + u16 unk_08c2; + u16 unk_08c4; + u16 unk_08c6; + u16 unk_08c8; + u8 unk_08ca[0x400]; + u8 unk_0cca; + u16 unk_0ccc[0x20]; + u8 filler_0d0c[0x50]; u16 unk_0d5c; s16 unk_0d5e; s16 unk_0d60; - u8 filler_0d62[0x2d2]; + u8 unk_0d62[0x2d0]; + u8 unk_1032; struct Sprite *unk_1034; struct Sprite *unk_1038[6]; // party struct Sprite *unk_1050[30]; // box @@ -177,6 +192,9 @@ void sub_80961A8(void); void task_intro_29(u8 whichMenu); void ResetPokemonStorageSystem(void); void ResetPSSMonIconSprites(void); +void SpawnBoxIconSprites(u8 boxId); +u8 get_preferred_box(void); +bool8 sub_80990AC(void); void sub_8099200(bool8 a0); void sub_8099310(void); bool8 sub_8099374(void); diff --git a/ld_script.txt b/ld_script.txt index f14352a4e..e1d28736e 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -133,6 +133,7 @@ SECTIONS { src/pokemon/pokemon_storage_system_3.o(.text); src/pokemon/pokemon_storage_system_4.o(.text); src/pokemon/pokemon_storage_system_5.o(.text); + src/pokemon/pokemon_storage_system_6.o(.text); asm/pokemon_storage_system.o(.text); src/pokemon/pokemon_icon.o(.text); src/pokemon/pokemon_summary_screen.o(.text); diff --git a/src/pokemon/pokemon_storage_system_4.c b/src/pokemon/pokemon_storage_system_4.c index f7a008db2..697292d5c 100644 --- a/src/pokemon/pokemon_storage_system_4.c +++ b/src/pokemon/pokemon_storage_system_4.c @@ -18,6 +18,77 @@ EWRAM_DATA u16 gUnknown_020384EA = 0; // Static ROM declarations +void sub_809900C(u8 boxId, s8 a1); +s8 sub_8099D90(u8 boxId); +void sub_8099EB0(u8 boxId, s8 a1); +void sub_809A23C(u8 boxId); +void sub_809A3D0(u8 boxId, s8 a1); +void sub_809A598(void); +void sub_809A6DC(void); +void sub_809A774(s8 a0); +void sub_809A810(void); + // .rodata // .text + +void sub_8099BF8(u8 boxId) +{ + gPokemonStorageSystemPtr->unk_08ba = 0; + gPokemonStorageSystemPtr->unk_08b4 = 0; + DmaFill32(3, 0, BG_SCREEN_ADDR(26), 0x1000); + sub_8099EB0(boxId, 0); + sub_809A23C(boxId); + sub_809A6DC(); + SpawnBoxIconSprites(boxId); + REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(26) | BGCNT_TXT512x256; +} + +void sub_8099C70(u8 whichBox) +{ + s8 r4 = sub_8099D90(whichBox); + sub_8099EB0(whichBox, r4); + gPokemonStorageSystemPtr->unk_08b6 = r4 * 6; + gPokemonStorageSystemPtr->unk_08b8 = 0x20; + gPokemonStorageSystemPtr->unk_08bb = whichBox; + gPokemonStorageSystemPtr->unk_08bc = r4 > 0 ? 0 : 5; + gPokemonStorageSystemPtr->unk_08be = r4; + gPokemonStorageSystemPtr->unk_08c0 = r4 > 0 ? 0x108 : 0x38; + gPokemonStorageSystemPtr->unk_08c2 = r4 > 0 ? 0 : 5; + gPokemonStorageSystemPtr->unk_08c4 = r4; + gPokemonStorageSystemPtr->unk_08c6 = 0; + gPokemonStorageSystemPtr->unk_08c8 = 2; + sub_809900C(whichBox, r4); + sub_809A3D0(whichBox, r4); + sub_809A774(r4); +} + +bool8 sub_8099D34(void) +{ + bool8 retVal = sub_80990AC(); + if (gPokemonStorageSystemPtr->unk_08b8 != 0) + { + gPokemonStorageSystemPtr->unk_08b4 += gPokemonStorageSystemPtr->unk_08b6; + gPokemonStorageSystemPtr->unk_08b4 &= 0x1ff; + if (--gPokemonStorageSystemPtr->unk_08b8 == 0) + { + sub_809A598(); + sub_809A810(); + } + return TRUE; + } + return retVal; +} + +s8 sub_8099D90(u8 boxId) +{ + u8 curBox = get_preferred_box(); + u8 i; + + for (i = 0; curBox != boxId; i++) + { + if (++curBox >= 14) + curBox = 0; + } + return i <= 6 ? 1 : -1; +} diff --git a/src/pokemon/pokemon_storage_system_6.c b/src/pokemon/pokemon_storage_system_6.c new file mode 100644 index 000000000..a781c1ed2 --- /dev/null +++ b/src/pokemon/pokemon_storage_system_6.c @@ -0,0 +1,14 @@ + +// Includes +#include "global.h" +#include "pokemon_storage_system.h" + +// Static type declarations + +// Static RAM declarations + +// Static ROM declarations + +// .rodata + +// .text -- cgit v1.2.3 From 8c2c8ed3a9e377382a0ac645053e4b7b4ab41c4e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 12 Jan 2018 12:50:59 -0500 Subject: match unref_sub_8095D08 --- src/pokemon/pokemon_storage_system.c | 149 ++++++----------------------------- 1 file changed, 22 insertions(+), 127 deletions(-) diff --git a/src/pokemon/pokemon_storage_system.c b/src/pokemon/pokemon_storage_system.c index 80081c963..c02fdfb3a 100644 --- a/src/pokemon/pokemon_storage_system.c +++ b/src/pokemon/pokemon_storage_system.c @@ -177,7 +177,27 @@ void sub_8095C8C(u16 *dest, u16 dest_left, u16 dest_top, const u16 *src, u16 src } } -#ifdef NONMATCHING +#define MAX_DMA_BLOCK_SIZE 0x1000 +#define Dma3FillLarge_(value, dest, size, bit) \ +{ \ + void *_dest = dest; \ + u32 _size = size; \ + while (1) \ + { \ + if (_size <= MAX_DMA_BLOCK_SIZE) \ + { \ + DmaFill##bit(3, value, _dest, _size); \ + break; \ + } \ + DmaFill##bit(3, value, _dest, MAX_DMA_BLOCK_SIZE); \ + _dest += MAX_DMA_BLOCK_SIZE; \ + _size -= MAX_DMA_BLOCK_SIZE; \ + } \ +} + +#define Dma3FillLarge16_(value, dest, size) Dma3FillLarge_(value, dest, size, 16) +#define Dma3FillLarge32_(value, dest, size) Dma3FillLarge_(value, dest, size, 32) + void unref_sub_8095D08(u16 *dest, u16 dest_left, u16 dest_top, u16 width, u16 height) { u16 i; @@ -185,133 +205,8 @@ void unref_sub_8095D08(u16 *dest, u16 dest_left, u16 dest_top, u16 width, u16 he dest += dest_top * 0x20 + dest_left; width *= 2; for (i = 0; i < height; dest += 0x20, i++) - { - void *_dest = dest; - size_t _size = width; - if (_size <= 0x1000) - { - DmaFill16(3, 0, _dest, _size); - } - else - { - while (1) - { - DmaFill16(3, 0, _dest, 0x1000); - _dest += 0x1000; - _size -= 0x1000; - if (_size <= 0x1000) - { - DmaFill16(3, 0, _dest, _size); - break; - } - } - } - } -} -#else -__attribute__((naked)) void unref_sub_8095D08(u16 *dest, u16 dest_left, u16 dest_top, u16 width, u16 height) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0x8\n" - "\tadds r4, r0, 0\n" - "\tldr r0, [sp, 0x28]\n" - "\tlsls r1, 16\n" - "\tlsrs r1, 16\n" - "\tlsls r2, 16\n" - "\tlsls r0, 16\n" - "\tlsrs r0, 16\n" - "\tmov r10, r0\n" - "\tlsrs r2, 11\n" - "\tadds r2, r1\n" - "\tlsls r2, 1\n" - "\tadds r4, r2\n" - "\tlsls r3, 17\n" - "\tlsrs r0, r3, 16\n" - "\tstr r0, [sp, 0x4]\n" - "\tmovs r0, 0\n" - "\tcmp r0, r10\n" - "\tbcs _08095DB2\n" - "\tmovs r6, 0x80\n" - "\tlsls r6, 5\n" - "\tmov r5, sp\n" - "\tldr r7, _08095D74 @ =0x040000d4\n" - "\tlsrs r3, 17\n" - "\tmov r9, r3\n" - "\tmov r1, r9\n" - "\tmovs r2, 0x81\n" - "\tlsls r2, 24\n" - "\torrs r1, r2\n" - "\tmov r9, r1\n" - "_08095D4E:\n" - "\tadds r3, r4, 0\n" - "\tldr r2, [sp, 0x4]\n" - "\tmovs r1, 0x40\n" - "\tadds r1, r4\n" - "\tmov r8, r1\n" - "\tadds r0, 0x1\n" - "\tmov r12, r0\n" - "\tcmp r2, r6\n" - "\tbhi _08095D78\n" - "\tmovs r0, 0\n" - "\tstrh r0, [r5]\n" - "\tmov r2, sp\n" - "\tstr r2, [r7]\n" - "\tstr r4, [r7, 0x4]\n" - "\tmov r0, r9\n" - "\tstr r0, [r7, 0x8]\n" - "\tldr r0, [r7, 0x8]\n" - "\tb _08095DA6\n" - "\t.align 2, 0\n" - "_08095D74: .4byte 0x040000d4\n" - "_08095D78:\n" - "\tmovs r4, 0\n" - "\tstrh r4, [r5]\n" - "\tldr r1, _08095DC4 @ =0x040000d4\n" - "\tmov r0, sp\n" - "\tstr r0, [r1]\n" - "\tstr r3, [r1, 0x4]\n" - "\tldr r0, _08095DC8 @ =0x81000800\n" - "\tstr r0, [r1, 0x8]\n" - "\tldr r0, [r1, 0x8]\n" - "\tadds r3, r6\n" - "\tsubs r2, r6\n" - "\tcmp r2, r6\n" - "\tbhi _08095D78\n" - "\tstrh r4, [r5]\n" - "\tmov r0, sp\n" - "\tstr r0, [r1]\n" - "\tstr r3, [r1, 0x4]\n" - "\tlsrs r0, r2, 1\n" - "\tmovs r2, 0x81\n" - "\tlsls r2, 24\n" - "\torrs r0, r2\n" - "\tstr r0, [r1, 0x8]\n" - "\tldr r0, [r1, 0x8]\n" - "_08095DA6:\n" - "\tmov r4, r8\n" - "\tmov r1, r12\n" - "\tlsls r0, r1, 16\n" - "\tlsrs r0, 16\n" - "\tcmp r0, r10\n" - "\tbcc _08095D4E\n" - "_08095DB2:\n" - "\tadd sp, 0x8\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r0}\n" - "\tbx r0\n" - "\t.align 2, 0\n" - "_08095DC4: .4byte 0x040000d4\n" - "_08095DC8: .4byte 0x81000800"); + Dma3FillLarge16_(0, dest, width); } -#endif s16 StorageSystemGetNextMonIndex(struct BoxPokemon *box, s8 startIdx, u8 stopIdx, u8 mode) { -- cgit v1.2.3 From aadd5c8ac07ef5967d8e2cf58fbdd04f79d5b82a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 12 Jan 2018 13:41:32 -0500 Subject: through sub_8099EB0 and relevant data --- asm/pokemon_storage_system.s | 192 ------------------ data/pokemon_storage_system.s | 346 --------------------------------- include/pokemon_storage_system.h | 7 +- ld_script.txt | 1 + src/pokemon/pokemon_storage_system_4.c | 233 +++++++++++++++++++++- 5 files changed, 237 insertions(+), 542 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index e66901961..55c7d448b 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,198 +5,6 @@ .text - thumb_func_start sub_8099DCC -sub_8099DCC: @ 8099DCC - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - bl get_preferred_box - lsls r0, 24 - lsrs r0, 24 - ldr r1, _08099DF8 @ =gPokemonStorage - ldr r2, _08099DFC @ =0x000083c2 - adds r1, r2 - adds r0, r1 - movs r1, 0 - strb r4, [r0] - ldr r0, _08099E00 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r2, _08099E04 @ =0x00001032 - adds r0, r2 - strb r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_08099DF8: .4byte gPokemonStorage -_08099DFC: .4byte 0x000083c2 -_08099E00: .4byte gPokemonStorageSystemPtr -_08099E04: .4byte 0x00001032 - thumb_func_end sub_8099DCC - - thumb_func_start sub_8099E08 -sub_8099E08: @ 8099E08 - push {r4,r5,lr} - sub sp, 0x4 - ldr r0, _08099E24 @ =gPokemonStorageSystemPtr - ldr r5, [r0] - ldr r0, _08099E28 @ =0x00001032 - adds r4, r5, r0 - ldrb r0, [r4] - cmp r0, 0x1 - beq _08099E54 - cmp r0, 0x1 - bgt _08099E2C - cmp r0, 0 - beq _08099E36 - b _08099EA6 - .align 2, 0 -_08099E24: .4byte gPokemonStorageSystemPtr -_08099E28: .4byte 0x00001032 -_08099E2C: - cmp r0, 0x2 - beq _08099E90 - cmp r0, 0x3 - beq _08099EA2 - b _08099EA6 -_08099E36: - ldr r1, _08099E4C @ =0x00000d08 - adds r0, r5, r1 - ldr r0, [r0] - ldr r1, _08099E50 @ =0x0000ffff - str r1, [sp] - movs r1, 0x1 - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - b _08099E9A - .align 2, 0 -_08099E4C: .4byte 0x00000d08 -_08099E50: .4byte 0x0000ffff -_08099E54: - bl UpdatePaletteFade - lsls r0, 24 - cmp r0, 0 - bne _08099EA6 - bl get_preferred_box - lsls r0, 24 - lsrs r0, 24 - movs r1, 0 - bl sub_8099EB0 - bl sub_809A654 - ldr r1, _08099E88 @ =0x00000d08 - adds r0, r5, r1 - ldr r0, [r0] - ldr r1, _08099E8C @ =0x0000ffff - str r1, [sp] - movs r1, 0x1 - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - b _08099E9A - .align 2, 0 -_08099E88: .4byte 0x00000d08 -_08099E8C: .4byte 0x0000ffff -_08099E90: - bl UpdatePaletteFade - lsls r0, 24 - cmp r0, 0 - bne _08099EA6 -_08099E9A: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _08099EA6 -_08099EA2: - movs r0, 0 - b _08099EA8 -_08099EA6: - movs r0, 0x1 -_08099EA8: - add sp, 0x4 - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_8099E08 - - thumb_func_start sub_8099EB0 -sub_8099EB0: @ 8099EB0 - push {r4-r7,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - lsrs r7, r1, 24 - cmp r1, 0 - beq _08099ED8 - ldr r0, _08099F38 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - movs r2, 0 - ldr r3, _08099F3C @ =0x000008ba - adds r1, r0, r3 - ldrb r0, [r1] - cmp r0, 0 - bne _08099ED0 - movs r2, 0x1 -_08099ED0: - strb r2, [r1] - ldr r0, _08099F40 @ =0x0600d000 - bl sub_809A14C -_08099ED8: - ldr r0, _08099F44 @ =gPokemonStorage - ldr r1, _08099F48 @ =0x000083c2 - adds r0, r1 - adds r0, r4, r0 - ldrb r4, [r0] - lsls r4, 4 - ldr r0, _08099F4C @ =gWallpaperTable - adds r4, r0 - ldr r0, [r4, 0xC] - ldr r1, _08099F38 @ =gPokemonStorageSystemPtr - ldr r5, [r1] - ldr r2, _08099F3C @ =0x000008ba - adds r6, r5, r2 - ldrb r2, [r6] - lsls r1, r2, 1 - adds r1, r2 - lsls r1, 20 - movs r3, 0x80 - lsls r3, 15 - adds r1, r3 - lsrs r1, 16 - movs r2, 0x60 - bl LoadPalette - ldr r0, [r4, 0x8] - ldr r1, _08099F50 @ =0x00000d62 - adds r5, r1 - adds r1, r5, 0 - bl LZ77UnCompWram - ldr r0, _08099F40 @ =0x0600d000 - lsls r2, r7, 24 - asrs r2, 24 - ldrb r3, [r6] - adds r1, r5, 0 - bl sub_8099F58 - ldr r0, [r4] - ldrb r1, [r6] - lsls r1, 13 - ldr r2, _08099F54 @ =0x06008000 - adds r1, r2 - bl LZ77UnCompVram - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_08099F38: .4byte gPokemonStorageSystemPtr -_08099F3C: .4byte 0x000008ba -_08099F40: .4byte 0x0600d000 -_08099F44: .4byte gPokemonStorage -_08099F48: .4byte 0x000083c2 -_08099F4C: .4byte gWallpaperTable -_08099F50: .4byte 0x00000d62 -_08099F54: .4byte 0x06008000 - thumb_func_end sub_8099EB0 - thumb_func_start sub_8099F58 sub_8099F58: @ 8099F58 push {r4-r7,lr} diff --git a/data/pokemon_storage_system.s b/data/pokemon_storage_system.s index 883630413..8d62633d3 100644 --- a/data/pokemon_storage_system.s +++ b/data/pokemon_storage_system.s @@ -3,352 +3,6 @@ .section .rodata - .align 2 -gWallpaperPalettes_Forest: @ 83B6F64 - .incbin "graphics/pokemon_storage/box_bg1.gbapal" - .incbin "graphics/pokemon_storage/forest_frame.gbapal" - .incbin "graphics/pokemon_storage/forest_bg.gbapal" - - .align 2 -gWallpaperTiles_Forest: @ 83B6FC4 - .incbin "graphics/pokemon_storage/forest.4bpp.lz" - - .align 2 -gWallpaperTilemap_Forest: @ 83B7394 - .incbin "graphics/pokemon_storage/forest.bin.lz" - - .align 2 -gWallpaperPalettes_City: @ 83B7470 - .incbin "graphics/pokemon_storage/box_bg1.gbapal" - .incbin "graphics/pokemon_storage/city_frame.gbapal" - .incbin "graphics/pokemon_storage/city_bg.gbapal" - - .align 2 -gWallpaperTiles_City: @ 83B74D0 - .incbin "graphics/pokemon_storage/city.4bpp.lz" - - .align 2 -gWallpaperTilemap_City: @ 83B76D8 - .incbin "graphics/pokemon_storage/city.bin.lz" - - .align 2 -gWallpaperPalettes_Desert: @ 83B7788 - .incbin "graphics/pokemon_storage/box_bg1.gbapal" - .incbin "graphics/pokemon_storage/desert_frame.gbapal" - .incbin "graphics/pokemon_storage/desert_bg.gbapal" - - .align 2 -gWallpaperTiles_Desert: @ 83B77E8 - .incbin "graphics/pokemon_storage/desert.4bpp.lz" - - .align 2 -gWallpaperTilemap_Desert: @ 83B7AD4 - .incbin "graphics/pokemon_storage/desert.bin.lz" - - .align 2 -gWallpaperPalettes_Savanna: @ 83B7BB8 - .incbin "graphics/pokemon_storage/box_bg1.gbapal" - .incbin "graphics/pokemon_storage/savanna_frame.gbapal" - .incbin "graphics/pokemon_storage/savanna_bg.gbapal" - - .align 2 -gWallpaperTiles_Savanna: @ 83B7C18 - .incbin "graphics/pokemon_storage/savanna.4bpp.lz" - - .align 2 -gWallpaperTilemap_Savanna: @ 83B7E38 - .incbin "graphics/pokemon_storage/savanna.bin.lz" - - .align 2 -gWallpaperPalettes_Crag: @ 83B7F04 - .incbin "graphics/pokemon_storage/box_bg1.gbapal" - .incbin "graphics/pokemon_storage/crag_frame.gbapal" - .incbin "graphics/pokemon_storage/crag_bg.gbapal" - - .align 2 -gWallpaperTiles_Crag: @ 83B7F64 - .incbin "graphics/pokemon_storage/crag.4bpp.lz" - - .align 2 -gWallpaperTilemap_Crag: @ 83B82B4 - .incbin "graphics/pokemon_storage/crag.bin.lz" - - .align 2 -gWallpaperPalettes_Volcano: @ 83B838C - .incbin "graphics/pokemon_storage/box_bg1.gbapal" - .incbin "graphics/pokemon_storage/volcano_frame.gbapal" - .incbin "graphics/pokemon_storage/volcano_bg.gbapal" - - .align 2 -gWallpaperTiles_Volcano: @ 83B83EC - .incbin "graphics/pokemon_storage/volcano.4bpp.lz" - - .space 4 - - .align 2 -gWallpaperTilemap_Volcano: @ 83B8720 - .incbin "graphics/pokemon_storage/volcano.bin.lz" - - .align 2 -gWallpaperPalettes_Snow: @ 83B87F8 - .incbin "graphics/pokemon_storage/box_bg1.gbapal" - .incbin "graphics/pokemon_storage/snow_frame.gbapal" - .incbin "graphics/pokemon_storage/snow_bg.gbapal" - - .align 2 -gWallpaperTiles_Snow: @ 83B8858 - .incbin "graphics/pokemon_storage/snow.4bpp.lz" - - .align 2 -gWallpaperTilemap_Snow: @ 83B8B10 - .incbin "graphics/pokemon_storage/snow.bin.lz" - - .align 2 -gWallpaperPalettes_Cave: @ 83B8BDC - .incbin "graphics/pokemon_storage/box_bg1.gbapal" - .incbin "graphics/pokemon_storage/cave_frame.gbapal" - .incbin "graphics/pokemon_storage/cave_bg.gbapal" - - .align 2 -gWallpaperTiles_Cave: @ 83B8C3C - .incbin "graphics/pokemon_storage/cave.4bpp.lz" - - .align 2 -gWallpaperTilemap_Cave: @ 83B8F80 - .incbin "graphics/pokemon_storage/cave.bin.lz" - - .align 2 -gWallpaperPalettes_Beach: @ 83B905C - .incbin "graphics/pokemon_storage/box_bg1.gbapal" - .incbin "graphics/pokemon_storage/beach_frame.gbapal" - .incbin "graphics/pokemon_storage/beach_bg.gbapal" - - .align 2 -gWallpaperTiles_Beach: @ 83B90BC - .incbin "graphics/pokemon_storage/beach.4bpp.lz" - - .align 2 -gWallpaperTilemap_Beach: @ 83B9440 - .incbin "graphics/pokemon_storage/beach.bin.lz" - - .align 2 -gWallpaperPalettes_Seafloor: @ 83B9528 - .incbin "graphics/pokemon_storage/box_bg1.gbapal" - .incbin "graphics/pokemon_storage/seafloor_frame.gbapal" - .incbin "graphics/pokemon_storage/seafloor_bg.gbapal" - - .align 2 -gWallpaperTiles_Seafloor: @ 83B9588 - .incbin "graphics/pokemon_storage/seafloor.4bpp.lz" - - .align 2 -gWallpaperTilemap_Seafloor: @ 83B983C - .incbin "graphics/pokemon_storage/seafloor.bin.lz" - - .align 2 -gWallpaperPalettes_River: @ 83B9918 - .incbin "graphics/pokemon_storage/box_bg1.gbapal" - .incbin "graphics/pokemon_storage/river_frame.gbapal" - .incbin "graphics/pokemon_storage/river_bg.gbapal" - - .align 2 -gWallpaperTiles_River: @ 83B9978 - .incbin "graphics/pokemon_storage/river.4bpp.lz" - - .align 2 -gWallpaperTilemap_River: @ 83B9C0C - .incbin "graphics/pokemon_storage/river.bin.lz" - - .align 2 -gWallpaperPalettes_Sky: @ 83B9CF8 - .incbin "graphics/pokemon_storage/box_bg1.gbapal" - .incbin "graphics/pokemon_storage/sky_frame.gbapal" - .incbin "graphics/pokemon_storage/sky_bg.gbapal" - - .align 2 -gWallpaperTiles_Sky: @ 83B9D58 - .incbin "graphics/pokemon_storage/sky.4bpp.lz" - - .align 2 -gWallpaperTilemap_Sky: @ 83B9FF0 - .incbin "graphics/pokemon_storage/sky.bin.lz" - - .align 2 -gWallpaperPalettes_Polkadot: @ 83BA0D0 - .incbin "graphics/pokemon_storage/box_bg2.gbapal" - .incbin "graphics/pokemon_storage/polkadot_frame.gbapal" - .incbin "graphics/pokemon_storage/polkadot_bg.gbapal" - - .align 2 -gWallpaperTiles_Polkadot: @ 83BA130 - .incbin "graphics/pokemon_storage/polkadot.4bpp.lz" - - .align 2 -gWallpaperTilemap_Polkadot: @ 83BA32C - .incbin "graphics/pokemon_storage/polkadot.bin.lz" - - .align 2 -gWallpaperPalettes_Pokecenter: @ 83BA3E4 - .incbin "graphics/pokemon_storage/box_bg2.gbapal" - .incbin "graphics/pokemon_storage/pokecenter_frame.gbapal" - .incbin "graphics/pokemon_storage/pokecenter_bg.gbapal" - - .align 2 -gWallpaperTiles_Pokecenter: @ 83BA444 - .incbin "graphics/pokemon_storage/pokecenter.4bpp.lz" - - .align 2 -gWallpaperTilemap_Pokecenter: @ 83BA7E8 - .incbin "graphics/pokemon_storage/pokecenter.bin.lz" - - .align 2 -gWallpaperPalettes_Machine: @ 83BA8FC - .incbin "graphics/pokemon_storage/box_bg3.gbapal" - .incbin "graphics/pokemon_storage/machine_frame.gbapal" - .incbin "graphics/pokemon_storage/machine_bg.gbapal" - - .align 2 -gWallpaperTiles_Machine: @ 83BA95C - .incbin "graphics/pokemon_storage/machine.4bpp.lz" - - .align 2 -gWallpaperTilemap_Machine: @ 83BAC4C - .incbin "graphics/pokemon_storage/machine.bin.lz" - - .align 2 -gWallpaperPalettes_Plain: @ 83BAD18 - .incbin "graphics/pokemon_storage/box_bg4.gbapal" - .incbin "graphics/pokemon_storage/plain_frame.gbapal" - .incbin "graphics/pokemon_storage/plain_bg.gbapal" - - .align 2 -gWallpaperTiles_Plain: @ 83BAD78 - .incbin "graphics/pokemon_storage/plain.4bpp.lz" - - .align 2 -gWallpaperTilemap_Plain: @ 83BAE74 - .incbin "graphics/pokemon_storage/plain.bin.lz" - -@ 12×18 tilemap - .incbin "graphics/unused/tilemap_3BAEF8.bin" - - .align 1 -gUnknown_083BB0A8:: @ 83BB0A8 - .2byte 0x1CE7, 0x7FFF - .2byte 0x1CE7, 0x7FFF - .2byte 0x1CE7, 0x7FFF - .2byte 0x1CE7, 0x7FFF - .2byte 0x1CE7, 0x7FFF - .2byte 0x1CE7, 0x7FFF - .2byte 0x1CE7, 0x7FFF - .2byte 0x1CE7, 0x7FFF - .2byte 0x1CE7, 0x7FFF - .2byte 0x1CE7, 0x7FFF - .2byte 0x1CE7, 0x7FFF - .2byte 0x1CE7, 0x7FFF - .2byte 0x1CE7, 0x7FFF - .2byte 0x1CE7, 0x7FFF - .2byte 0x1CE7, 0x7FFF - .2byte 0x1CE7, 0x7FFF - - .align 2 -gWallpaperTable:: @ 83BB0E8 - @ Forest - .4byte gWallpaperTiles_Forest - .4byte 0x3D0 - .4byte gWallpaperTilemap_Forest - .4byte gWallpaperPalettes_Forest - - @ City - .4byte gWallpaperTiles_City - .4byte 0x208 - .4byte gWallpaperTilemap_City - .4byte gWallpaperPalettes_City - - @ Desert - .4byte gWallpaperTiles_Desert - .4byte 0x2EC - .4byte gWallpaperTilemap_Desert - .4byte gWallpaperPalettes_Desert - - @ Savanna - .4byte gWallpaperTiles_Savanna - .4byte 0x220 - .4byte gWallpaperTilemap_Savanna - .4byte gWallpaperPalettes_Savanna - - @ Crag - .4byte gWallpaperTiles_Crag - .4byte 0x350 - .4byte gWallpaperTilemap_Crag - .4byte gWallpaperPalettes_Crag - - @ Volcano - .4byte gWallpaperTiles_Volcano - .4byte 0x334 - .4byte gWallpaperTilemap_Volcano - .4byte gWallpaperPalettes_Volcano - - @ Snow - .4byte gWallpaperTiles_Snow - .4byte 0x2B8 - .4byte gWallpaperTilemap_Snow - .4byte gWallpaperPalettes_Snow - - @ Cave - .4byte gWallpaperTiles_Cave - .4byte 0x344 - .4byte gWallpaperTilemap_Cave - .4byte gWallpaperPalettes_Cave - - @ Beach - .4byte gWallpaperTiles_Beach - .4byte 0x384 - .4byte gWallpaperTilemap_Beach - .4byte gWallpaperPalettes_Beach - - @ Seafloor - .4byte gWallpaperTiles_Seafloor - .4byte 0x2B4 - .4byte gWallpaperTilemap_Seafloor - .4byte gWallpaperPalettes_Seafloor - - @ River - .4byte gWallpaperTiles_River - .4byte 0x294 - .4byte gWallpaperTilemap_River - .4byte gWallpaperPalettes_River - - @ Sky - .4byte gWallpaperTiles_Sky - .4byte 0x298 - .4byte gWallpaperTilemap_Sky - .4byte gWallpaperPalettes_Sky - - @ Polkadot - .4byte gWallpaperTiles_Polkadot - .4byte 0x1FC - .4byte gWallpaperTilemap_Polkadot - .4byte gWallpaperPalettes_Polkadot - - @ Pokecenter - .4byte gWallpaperTiles_Pokecenter - .4byte 0x3A4 - .4byte gWallpaperTilemap_Pokecenter - .4byte gWallpaperPalettes_Pokecenter - - @ Machine - .4byte gWallpaperTiles_Machine - .4byte 0x2F0 - .4byte gWallpaperTilemap_Machine - .4byte gWallpaperPalettes_Machine - - @ Plain - .4byte gWallpaperTiles_Plain - .4byte 0xFC - .4byte gWallpaperTilemap_Plain - .4byte gWallpaperPalettes_Plain - PCPal_Arrow: .incbin "graphics/pokemon_storage/arrow.gbapal" PCGfx_Arrow: diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index 09b3be60f..cd4dceadf 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -101,7 +101,7 @@ struct PokemonStorageSystemData { u16 unk_08b4; u16 unk_08b6; u16 unk_08b8; - u8 unk_08ba; + bool8 unk_08ba; u8 unk_08bb; u16 unk_08bc; u16 unk_08be; @@ -112,12 +112,13 @@ struct PokemonStorageSystemData { u16 unk_08c8; u8 unk_08ca[0x400]; u8 unk_0cca; - u16 unk_0ccc[0x20]; + u16 unk_0ccc[0x1e]; + u32 unk_0d08; u8 filler_0d0c[0x50]; u16 unk_0d5c; s16 unk_0d5e; s16 unk_0d60; - u8 unk_0d62[0x2d0]; + u16 unk_0d62[360]; u8 unk_1032; struct Sprite *unk_1034; struct Sprite *unk_1038[6]; // party diff --git a/ld_script.txt b/ld_script.txt index e1d28736e..b0b5d4796 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -550,6 +550,7 @@ SECTIONS { src/pokemon/pokemon_storage_system.o(.rodata); src/pokemon/pokemon_storage_system_2.o(.rodata); src/pokemon/pokemon_storage_system_3.o(.rodata); + src/pokemon/pokemon_storage_system_4.o(.rodata); data/pokemon_storage_system.o(.rodata); src/pokemon/pokemon_icon.o(.rodata); src/pokemon/pokemon_summary_screen.o(.rodata); diff --git a/src/pokemon/pokemon_storage_system_4.c b/src/pokemon/pokemon_storage_system_4.c index 697292d5c..8982ce461 100644 --- a/src/pokemon/pokemon_storage_system_4.c +++ b/src/pokemon/pokemon_storage_system_4.c @@ -1,6 +1,7 @@ // Includes #include "global.h" +#include "palette.h" #include "pokemon_storage_system.h" // Static type declarations @@ -16,14 +17,24 @@ EWRAM_DATA u8 gUnknown_020384E8 = 0; EWRAM_DATA u8 gUnknown_020384E9 = 0; EWRAM_DATA u16 gUnknown_020384EA = 0; +struct WallpaperTable { + const u8 *tiles; + u32 size; + const u8 *tileMap; + const u16 *palettes; +}; + // Static ROM declarations void sub_809900C(u8 boxId, s8 a1); s8 sub_8099D90(u8 boxId); void sub_8099EB0(u8 boxId, s8 a1); +void sub_8099F58(u16 *vdest, const u16 *src, s8 a2, u8 a3); +void sub_809A14C(u16 *vdest); void sub_809A23C(u8 boxId); void sub_809A3D0(u8 boxId, s8 a1); void sub_809A598(void); +void sub_809A654(void); void sub_809A6DC(void); void sub_809A774(s8 a0); void sub_809A810(void); @@ -34,7 +45,7 @@ void sub_809A810(void); void sub_8099BF8(u8 boxId) { - gPokemonStorageSystemPtr->unk_08ba = 0; + gPokemonStorageSystemPtr->unk_08ba = FALSE; gPokemonStorageSystemPtr->unk_08b4 = 0; DmaFill32(3, 0, BG_SCREEN_ADDR(26), 0x1000); sub_8099EB0(boxId, 0); @@ -92,3 +103,223 @@ s8 sub_8099D90(u8 boxId) } return i <= 6 ? 1 : -1; } + +void sub_8099DCC(u8 wallpaperId) +{ + u8 curBox = get_preferred_box(); + gPokemonStorage.wallpaper[curBox] = wallpaperId; + gPokemonStorageSystemPtr->unk_1032 = 0; +} + +bool8 sub_8099E08(void) +{ + switch (gPokemonStorageSystemPtr->unk_1032) + { + case 0: + BeginNormalPaletteFade(gPokemonStorageSystemPtr->unk_0d08, 1, 0, 0x10, 0xffff); + gPokemonStorageSystemPtr->unk_1032++; + break; + case 1: + if (!UpdatePaletteFade()) + { + u8 curBox = get_preferred_box(); + sub_8099EB0(curBox, 0); + sub_809A654(); + BeginNormalPaletteFade(gPokemonStorageSystemPtr->unk_0d08, 1, 0x10, 0, 0xffff); + gPokemonStorageSystemPtr->unk_1032++; + } + break; + case 2: + if (!UpdatePaletteFade()) + gPokemonStorageSystemPtr->unk_1032++; + break; + case 3: + return FALSE; + } + return TRUE; +} + +const u16 gWallpaperPalettes_Forest[] = INCBIN_U16("graphics/pokemon_storage/box_bg1.gbapal"); +const u16 gWallpaperPalettes_Forest_2[] = INCBIN_U16("graphics/pokemon_storage/forest_frame.gbapal"); +const u16 gWallpaperPalettes_Forest_2_3[] = INCBIN_U16("graphics/pokemon_storage/forest_bg.gbapal"); + +const u8 gWallpaperTiles_Forest[] = INCBIN_U8("graphics/pokemon_storage/forest.4bpp.lz"); + +const u8 gWallpaperTilemap_Forest[] = INCBIN_U8("graphics/pokemon_storage/forest.bin.lz"); + +const u16 gWallpaperPalettes_City[] = INCBIN_U16("graphics/pokemon_storage/box_bg1.gbapal"); +const u16 gWallpaperPalettes_City_2[] = INCBIN_U16("graphics/pokemon_storage/city_frame.gbapal"); +const u16 gWallpaperPalettes_City_2_3[] = INCBIN_U16("graphics/pokemon_storage/city_bg.gbapal"); + +const u8 gWallpaperTiles_City[] = INCBIN_U8("graphics/pokemon_storage/city.4bpp.lz"); + +const u8 gWallpaperTilemap_City[] = INCBIN_U8("graphics/pokemon_storage/city.bin.lz"); + +const u16 gWallpaperPalettes_Desert[] = INCBIN_U16("graphics/pokemon_storage/box_bg1.gbapal"); +const u16 gWallpaperPalettes_Desert_2[] = INCBIN_U16("graphics/pokemon_storage/desert_frame.gbapal"); +const u16 gWallpaperPalettes_Desert_2_3[] = INCBIN_U16("graphics/pokemon_storage/desert_bg.gbapal"); + +const u8 gWallpaperTiles_Desert[] = INCBIN_U8("graphics/pokemon_storage/desert.4bpp.lz"); + +const u8 gWallpaperTilemap_Desert[] = INCBIN_U8("graphics/pokemon_storage/desert.bin.lz"); + +const u16 gWallpaperPalettes_Savanna[] = INCBIN_U16("graphics/pokemon_storage/box_bg1.gbapal"); +const u16 gWallpaperPalettes_Savanna_2[] = INCBIN_U16("graphics/pokemon_storage/savanna_frame.gbapal"); +const u16 gWallpaperPalettes_Savanna_2_3[] = INCBIN_U16("graphics/pokemon_storage/savanna_bg.gbapal"); + +const u8 gWallpaperTiles_Savanna[] = INCBIN_U8("graphics/pokemon_storage/savanna.4bpp.lz"); + +const u8 gWallpaperTilemap_Savanna[] = INCBIN_U8("graphics/pokemon_storage/savanna.bin.lz"); + +const u16 gWallpaperPalettes_Crag[] = INCBIN_U16("graphics/pokemon_storage/box_bg1.gbapal"); +const u16 gWallpaperPalettes_Crag_2[] = INCBIN_U16("graphics/pokemon_storage/crag_frame.gbapal"); +const u16 gWallpaperPalettes_Crag_2_3[] = INCBIN_U16("graphics/pokemon_storage/crag_bg.gbapal"); + +const u8 gWallpaperTiles_Crag[] = INCBIN_U8("graphics/pokemon_storage/crag.4bpp.lz"); + +const u8 gWallpaperTilemap_Crag[] = INCBIN_U8("graphics/pokemon_storage/crag.bin.lz"); + +const u16 gWallpaperPalettes_Volcano[] = INCBIN_U16("graphics/pokemon_storage/box_bg1.gbapal"); +const u16 gWallpaperPalettes_Volcano_2[] = INCBIN_U16("graphics/pokemon_storage/volcano_frame.gbapal"); +const u16 gWallpaperPalettes_Volcano_2_3[] = INCBIN_U16("graphics/pokemon_storage/volcano_bg.gbapal"); + +const u8 gWallpaperTiles_Volcano[] = INCBIN_U8("graphics/pokemon_storage/volcano.4bpp.lz"); +const u32 filler_83b871c = 0; // needed to match but otherwise garbage + +const u8 gWallpaperTilemap_Volcano[] = INCBIN_U8("graphics/pokemon_storage/volcano.bin.lz"); + +const u16 gWallpaperPalettes_Snow[] = INCBIN_U16("graphics/pokemon_storage/box_bg1.gbapal"); +const u16 gWallpaperPalettes_Snow_2[] = INCBIN_U16("graphics/pokemon_storage/snow_frame.gbapal"); +const u16 gWallpaperPalettes_Snow_2_3[] = INCBIN_U16("graphics/pokemon_storage/snow_bg.gbapal"); + +const u8 gWallpaperTiles_Snow[] = INCBIN_U8("graphics/pokemon_storage/snow.4bpp.lz"); + +const u8 gWallpaperTilemap_Snow[] = INCBIN_U8("graphics/pokemon_storage/snow.bin.lz"); + +const u16 gWallpaperPalettes_Cave[] = INCBIN_U16("graphics/pokemon_storage/box_bg1.gbapal"); +const u16 gWallpaperPalettes_Cave_2[] = INCBIN_U16("graphics/pokemon_storage/cave_frame.gbapal"); +const u16 gWallpaperPalettes_Cave_2_3[] = INCBIN_U16("graphics/pokemon_storage/cave_bg.gbapal"); + +const u8 gWallpaperTiles_Cave[] = INCBIN_U8("graphics/pokemon_storage/cave.4bpp.lz"); + +const u8 gWallpaperTilemap_Cave[] = INCBIN_U8("graphics/pokemon_storage/cave.bin.lz"); + +const u16 gWallpaperPalettes_Beach[] = INCBIN_U16("graphics/pokemon_storage/box_bg1.gbapal"); +const u16 gWallpaperPalettes_Beach_2[] = INCBIN_U16("graphics/pokemon_storage/beach_frame.gbapal"); +const u16 gWallpaperPalettes_Beach_2_3[] = INCBIN_U16("graphics/pokemon_storage/beach_bg.gbapal"); + +const u8 gWallpaperTiles_Beach[] = INCBIN_U8("graphics/pokemon_storage/beach.4bpp.lz"); + +const u8 gWallpaperTilemap_Beach[] = INCBIN_U8("graphics/pokemon_storage/beach.bin.lz"); + +const u16 gWallpaperPalettes_Seafloor[] = INCBIN_U16("graphics/pokemon_storage/box_bg1.gbapal"); +const u16 gWallpaperPalettes_Seafloor_2[] = INCBIN_U16("graphics/pokemon_storage/seafloor_frame.gbapal"); +const u16 gWallpaperPalettes_Seafloor_2_3[] = INCBIN_U16("graphics/pokemon_storage/seafloor_bg.gbapal"); + +const u8 gWallpaperTiles_Seafloor[] = INCBIN_U8("graphics/pokemon_storage/seafloor.4bpp.lz"); + +const u8 gWallpaperTilemap_Seafloor[] = INCBIN_U8("graphics/pokemon_storage/seafloor.bin.lz"); + +const u16 gWallpaperPalettes_River[] = INCBIN_U16("graphics/pokemon_storage/box_bg1.gbapal"); +const u16 gWallpaperPalettes_River_2[] = INCBIN_U16("graphics/pokemon_storage/river_frame.gbapal"); +const u16 gWallpaperPalettes_River_2_3[] = INCBIN_U16("graphics/pokemon_storage/river_bg.gbapal"); + +const u8 gWallpaperTiles_River[] = INCBIN_U8("graphics/pokemon_storage/river.4bpp.lz"); + +const u8 gWallpaperTilemap_River[] = INCBIN_U8("graphics/pokemon_storage/river.bin.lz"); + +const u16 gWallpaperPalettes_Sky[] = INCBIN_U16("graphics/pokemon_storage/box_bg1.gbapal"); +const u16 gWallpaperPalettes_Sky_2[] = INCBIN_U16("graphics/pokemon_storage/sky_frame.gbapal"); +const u16 gWallpaperPalettes_Sky_2_3[] = INCBIN_U16("graphics/pokemon_storage/sky_bg.gbapal"); + +const u8 gWallpaperTiles_Sky[] = INCBIN_U8("graphics/pokemon_storage/sky.4bpp.lz"); + +const u8 gWallpaperTilemap_Sky[] = INCBIN_U8("graphics/pokemon_storage/sky.bin.lz"); + +const u16 gWallpaperPalettes_Polkadot[] = INCBIN_U16("graphics/pokemon_storage/box_bg2.gbapal"); +const u16 gWallpaperPalettes_Polkadot_2[] = INCBIN_U16("graphics/pokemon_storage/polkadot_frame.gbapal"); +const u16 gWallpaperPalettes_Polkadot_2_3[] = INCBIN_U16("graphics/pokemon_storage/polkadot_bg.gbapal"); + +const u8 gWallpaperTiles_Polkadot[] = INCBIN_U8("graphics/pokemon_storage/polkadot.4bpp.lz"); + +const u8 gWallpaperTilemap_Polkadot[] = INCBIN_U8("graphics/pokemon_storage/polkadot.bin.lz"); + +const u16 gWallpaperPalettes_Pokecenter[] = INCBIN_U16("graphics/pokemon_storage/box_bg2.gbapal"); +const u16 gWallpaperPalettes_Pokecenter_2[] = INCBIN_U16("graphics/pokemon_storage/pokecenter_frame.gbapal"); +const u16 gWallpaperPalettes_Pokecenter_2_3[] = INCBIN_U16("graphics/pokemon_storage/pokecenter_bg.gbapal"); + +const u8 gWallpaperTiles_Pokecenter[] = INCBIN_U8("graphics/pokemon_storage/pokecenter.4bpp.lz"); + +const u8 gWallpaperTilemap_Pokecenter[] = INCBIN_U8("graphics/pokemon_storage/pokecenter.bin.lz"); + +const u16 gWallpaperPalettes_Machine[] = INCBIN_U16("graphics/pokemon_storage/box_bg3.gbapal"); +const u16 gWallpaperPalettes_Machine_2[] = INCBIN_U16("graphics/pokemon_storage/machine_frame.gbapal"); +const u16 gWallpaperPalettes_Machine_2_3[] = INCBIN_U16("graphics/pokemon_storage/machine_bg.gbapal"); + +const u8 gWallpaperTiles_Machine[] = INCBIN_U8("graphics/pokemon_storage/machine.4bpp.lz"); + +const u8 gWallpaperTilemap_Machine[] = INCBIN_U8("graphics/pokemon_storage/machine.bin.lz"); + +const u16 gWallpaperPalettes_Plain[] = INCBIN_U16("graphics/pokemon_storage/box_bg4.gbapal"); +const u16 gWallpaperPalettes_Plain_2[] = INCBIN_U16("graphics/pokemon_storage/plain_frame.gbapal"); +const u16 gWallpaperPalettes_Plain_2_3[] = INCBIN_U16("graphics/pokemon_storage/plain_bg.gbapal"); + +const u8 gWallpaperTiles_Plain[] = INCBIN_U8("graphics/pokemon_storage/plain.4bpp.lz"); + +const u8 gWallpaperTilemap_Plain[] = INCBIN_U8("graphics/pokemon_storage/plain.bin.lz"); + +const u16 gUnknown_083BAEF8[] = INCBIN_U16("graphics/unused/tilemap_3BAEF8.bin"); + +const u16 gUnknown_083BB0A8[][2] = { + {0x1CE7, 0x7FFF}, + {0x1CE7, 0x7FFF}, + {0x1CE7, 0x7FFF}, + {0x1CE7, 0x7FFF}, + {0x1CE7, 0x7FFF}, + {0x1CE7, 0x7FFF}, + {0x1CE7, 0x7FFF}, + {0x1CE7, 0x7FFF}, + {0x1CE7, 0x7FFF}, + {0x1CE7, 0x7FFF}, + {0x1CE7, 0x7FFF}, + {0x1CE7, 0x7FFF}, + {0x1CE7, 0x7FFF}, + {0x1CE7, 0x7FFF}, + {0x1CE7, 0x7FFF}, + {0x1CE7, 0x7FFF} +}; + +const struct WallpaperTable gWallpaperTable[] = { + {gWallpaperTiles_Forest, 0x3D0, gWallpaperTilemap_Forest, gWallpaperPalettes_Forest}, // Forest + {gWallpaperTiles_City, 0x208, gWallpaperTilemap_City, gWallpaperPalettes_City}, // City + {gWallpaperTiles_Desert, 0x2EC, gWallpaperTilemap_Desert, gWallpaperPalettes_Desert}, // Desert + {gWallpaperTiles_Savanna, 0x220, gWallpaperTilemap_Savanna, gWallpaperPalettes_Savanna}, // Savanna + {gWallpaperTiles_Crag, 0x350, gWallpaperTilemap_Crag, gWallpaperPalettes_Crag}, // Crag + {gWallpaperTiles_Volcano, 0x334, gWallpaperTilemap_Volcano, gWallpaperPalettes_Volcano}, // Volcano + {gWallpaperTiles_Snow, 0x2B8, gWallpaperTilemap_Snow, gWallpaperPalettes_Snow}, // Snow + {gWallpaperTiles_Cave, 0x344, gWallpaperTilemap_Cave, gWallpaperPalettes_Cave}, // Cave + {gWallpaperTiles_Beach, 0x384, gWallpaperTilemap_Beach, gWallpaperPalettes_Beach}, // Beach + {gWallpaperTiles_Seafloor, 0x2B4, gWallpaperTilemap_Seafloor, gWallpaperPalettes_Seafloor}, // Seafloor + {gWallpaperTiles_River, 0x294, gWallpaperTilemap_River, gWallpaperPalettes_River}, // River + {gWallpaperTiles_Sky, 0x298, gWallpaperTilemap_Sky, gWallpaperPalettes_Sky}, // Sky + {gWallpaperTiles_Polkadot, 0x1FC, gWallpaperTilemap_Polkadot, gWallpaperPalettes_Polkadot}, // Polkadot + {gWallpaperTiles_Pokecenter, 0x3A4, gWallpaperTilemap_Pokecenter, gWallpaperPalettes_Pokecenter}, // Pokecenter + {gWallpaperTiles_Machine, 0x2F0, gWallpaperTilemap_Machine, gWallpaperPalettes_Machine}, // Machine + {gWallpaperTiles_Plain, 0xFC, gWallpaperTilemap_Plain, gWallpaperPalettes_Plain} // Plain +}; + +void sub_8099EB0(u8 boxId, s8 a1) +{ + const struct WallpaperTable *wallpaperTable; + + if (a1) + { + gPokemonStorageSystemPtr->unk_08ba = gPokemonStorageSystemPtr->unk_08ba ? FALSE : TRUE; + sub_809A14C(BG_SCREEN_ADDR(26)); + } + wallpaperTable = gWallpaperTable +gPokemonStorage.wallpaper[boxId]; + LoadPalette(wallpaperTable->palettes, gPokemonStorageSystemPtr->unk_08ba * 0x30 + 0x40, 0x60); + LZ77UnCompWram(wallpaperTable->tileMap, gPokemonStorageSystemPtr->unk_0d62); + sub_8099F58(BG_SCREEN_ADDR(26), gPokemonStorageSystemPtr->unk_0d62, a1, gPokemonStorageSystemPtr->unk_08ba); + LZ77UnCompVram(wallpaperTable->tiles, BG_CHAR_ADDR(2) + (gPokemonStorageSystemPtr->unk_08ba << 13)); +} -- cgit v1.2.3 From e9c74d2472bc322b9d60f1b7033268efbd0bd159 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 13 Jan 2018 13:02:57 -0500 Subject: nonmatching sub_8099F58 --- asm/pokemon_storage_system.s | 269 ------------------------- src/pokemon/pokemon_storage_system_4.c | 350 +++++++++++++++++++++++++++++++++ 2 files changed, 350 insertions(+), 269 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 55c7d448b..bf7e7a809 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,275 +5,6 @@ .text - thumb_func_start sub_8099F58 -sub_8099F58: @ 8099F58 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x20 - mov r9, r0 - adds r5, r1, 0 - lsls r2, 24 - lsls r3, 24 - lsrs r3, 24 - lsls r0, r3, 8 - str r0, [sp] - lsls r0, r3, 1 - adds r0, r3 - adds r0, 0x4 - lsls r0, 28 - lsrs r0, 16 - str r0, [sp, 0x4] - ldr r0, _08099FB8 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r1, _08099FBC @ =0x000008b4 - adds r0, r1 - ldrh r1, [r0] - lsrs r1, 3 - adds r1, 0xA - lsrs r0, r2, 24 - mov r8, r0 - asrs r2, 24 - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 3 - adds r1, r0 - movs r0, 0x3F - ands r1, r0 - str r1, [sp, 0x8] - adds r2, r1, 0 - cmp r2, 0xC - bgt _08099FC0 - movs r6, 0x14 - movs r3, 0 - lsls r0, r2, 1 - adds r0, 0x80 - mov r1, r9 - adds r4, r1, r0 - movs r7, 0 - b _0809A020 - .align 2, 0 -_08099FB8: .4byte gPokemonStorageSystemPtr -_08099FBC: .4byte 0x000008b4 -_08099FC0: - cmp r2, 0x1F - bgt _08099FE6 - movs r0, 0x20 - subs r0, r2 - lsls r0, 16 - movs r1, 0x14 - lsrs r6, r0, 16 - asrs r0, 16 - subs r1, r0 - lsls r1, 16 - lsrs r3, r1, 16 - lsls r0, r2, 1 - adds r0, 0x80 - mov r2, r9 - adds r4, r2, r0 - movs r7, 0x88 - lsls r7, 4 - add r7, r9 - b _0809A020 -_08099FE6: - cmp r2, 0x2C - bgt _08099FFE - movs r6, 0x14 - movs r3, 0 - lsls r0, r2, 1 - movs r1, 0x84 - lsls r1, 4 - adds r0, r1 - mov r2, r9 - adds r4, r2, r0 - movs r7, 0 - b _0809A020 -_08099FFE: - movs r0, 0x40 - subs r0, r2 - lsls r0, 16 - movs r1, 0x14 - lsrs r6, r0, 16 - asrs r0, 16 - subs r1, r0 - lsls r1, 16 - lsrs r3, r1, 16 - lsls r0, r2, 1 - movs r1, 0x84 - lsls r1, 4 - adds r0, r1 - mov r2, r9 - adds r4, r2, r0 - mov r7, r9 - adds r7, 0x80 -_0809A020: - movs r1, 0 - mov r0, r8 - lsls r0, 24 - str r0, [sp, 0x14] - lsls r0, r6, 16 - asrs r0, 16 - mov r8, r0 - lsls r3, 16 - str r3, [sp, 0xC] - asrs r2, r3, 16 - str r2, [sp, 0x10] -_0809A036: - movs r3, 0 - adds r0, r4, 0 - adds r0, 0x40 - str r0, [sp, 0x18] - adds r2, r7, 0 - adds r2, 0x40 - str r2, [sp, 0x1C] - adds r1, 0x1 - mov r10, r1 - cmp r3, r8 - bge _0809A07A - ldr r0, _0809A0D4 @ =0x00000fff - mov r12, r0 - movs r6, 0xF0 - lsls r6, 8 -_0809A054: - ldrh r2, [r5] - mov r0, r12 - ands r0, r2 - ldr r1, [sp] - adds r0, r1, r0 - adds r1, r6, 0 - ands r1, r2 - ldr r2, [sp, 0x4] - adds r1, r2, r1 - orrs r1, r0 - lsls r0, r3, 1 - adds r0, r4 - strh r1, [r0] - adds r5, 0x2 - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, r8 - blt _0809A054 -_0809A07A: - movs r3, 0 - ldr r0, [sp, 0x10] - cmp r3, r0 - bge _0809A0B4 - ldr r1, _0809A0D4 @ =0x00000fff - mov r12, r1 - movs r6, 0xF0 - lsls r6, 8 - ldr r2, [sp, 0xC] - asrs r4, r2, 16 -_0809A08E: - ldrh r2, [r5] - mov r0, r12 - ands r0, r2 - ldr r1, [sp] - adds r0, r1, r0 - adds r1, r6, 0 - ands r1, r2 - ldr r2, [sp, 0x4] - adds r1, r2, r1 - orrs r1, r0 - lsls r0, r3, 1 - adds r0, r7 - strh r1, [r0] - adds r5, 0x2 - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, r4 - blt _0809A08E -_0809A0B4: - ldr r4, [sp, 0x18] - ldr r7, [sp, 0x1C] - mov r1, r10 - lsls r0, r1, 16 - lsrs r1, r0, 16 - cmp r1, 0x11 - bls _0809A036 - ldr r0, [sp, 0x14] - asrs r2, r0, 24 - cmp r2, 0 - beq _0809A13A - cmp r2, 0 - ble _0809A0D8 - ldr r1, [sp, 0x8] - adds r1, 0x14 - b _0809A0DC - .align 2, 0 -_0809A0D4: .4byte 0x00000fff -_0809A0D8: - ldr r1, [sp, 0x8] - subs r1, 0x4 -_0809A0DC: - movs r0, 0x3F - ands r1, r0 - adds r4, r1, 0 - adds r0, r4, 0 - cmp r0, 0x1F - bgt _0809A0EE - lsls r0, 1 - adds r0, 0x80 - b _0809A0F6 -_0809A0EE: - lsls r0, 1 - movs r2, 0x84 - lsls r2, 4 - adds r0, r2 -_0809A0F6: - mov r1, r9 - adds r2, r1, r0 - movs r3, 0 - movs r6, 0 -_0809A0FE: - movs r1, 0 - adds r5, r3, 0x1 - lsls r3, r4, 16 -_0809A104: - strh r6, [r2] - adds r2, 0x40 - adds r0, r1, 0x1 - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0x11 - bls _0809A104 - asrs r0, r3, 16 - adds r4, r0, 0x1 - movs r0, 0x3F - ands r4, r0 - adds r0, r4, 0 - cmp r0, 0x1F - bgt _0809A126 - lsls r0, 1 - adds r0, 0x80 - b _0809A12E -_0809A126: - lsls r0, 1 - movs r2, 0x84 - lsls r2, 4 - adds r0, r2 -_0809A12E: - mov r1, r9 - adds r2, r1, r0 - lsls r0, r5, 16 - lsrs r3, r0, 16 - cmp r3, 0x3 - bls _0809A0FE -_0809A13A: - add sp, 0x20 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_8099F58 - thumb_func_start sub_809A14C sub_809A14C: @ 809A14C push {r4-r6,lr} diff --git a/src/pokemon/pokemon_storage_system_4.c b/src/pokemon/pokemon_storage_system_4.c index 8982ce461..9f19814a5 100644 --- a/src/pokemon/pokemon_storage_system_4.c +++ b/src/pokemon/pokemon_storage_system_4.c @@ -323,3 +323,353 @@ void sub_8099EB0(u8 boxId, s8 a1) sub_8099F58(BG_SCREEN_ADDR(26), gPokemonStorageSystemPtr->unk_0d62, a1, gPokemonStorageSystemPtr->unk_08ba); LZ77UnCompVram(wallpaperTable->tiles, BG_CHAR_ADDR(2) + (gPokemonStorageSystemPtr->unk_08ba << 13)); } + +#ifdef NONMATCHING +void sub_8099F58(u16 *vdest, const u16 *src, s8 a2, u8 a3) +{ + s16 r6; + s16 r3; + u16 sp0 = a3 << 8; + u16 sp4 = (a3 * 3 + 4) << 12; + u16 *r4; + u16 *r7; + u16 i; + u16 j; + s16 sp8 = ((gPokemonStorageSystemPtr->unk_08b4 >> 3) + 10 + a2 * 24) & 0x3f; + if (sp8 < 13) + { + r6 = 20; + r3 = 0; + r4 = vdest + sp8 + 0x40; + r7 = NULL; + } + else if (sp8 < 32) + { + r6 = 32 - sp8; + r3 = 20 - r6; + r4 = vdest + sp8 + 0x40; + r7 = vdest + 0x440; + } + else if (sp8 < 45) + { + r6 = 20; + r3 = 0; + r4 = vdest + sp8 + 0x420; + r7 = NULL; + } + else + { + r6 = 64 - sp8; + r3 = 20 - r6; + r4 = vdest + sp8 + 0x420; + r7 = vdest + 0x40; + } + for (i = 0; i < 18; i++) + { + for (j = 0; j < r6; j++) + { + u16 tile = ((*src & 0xfff) + sp0) | ((*src & 0xf000) + sp4); + r4[j] = tile; + src++; + } + for (j = 0; j < r3; j++) + { + u16 tile = ((*src & 0xfff) + sp0) | ((*src & 0xf000) + sp4); + r7[j] = tile; + src++; + } + r4 += 0x20; + r7 += 0x20; + } + if (a2) + { + s16 r4_2; + u16 *r2; + if (a2 > 0) + r4_2 = (sp8 + 20) & 0x3f; + else + r4_2 = (sp8 - 4) & 0x3f; + r2 = r4_2 < 0x20 ? vdest + r4_2 + 0x40 : vdest + r4_2 + 0x420; + for (i = 0; i < 4; i++) + { + for (j = 0; j < 18; j++) + { + *r2 = 0; + r2 += 0x20; + } + r4_2++; + r4_2 &= 0x3f; + r2 = r4_2 < 0x20 ? vdest + r4_2 + 0x40 : vdest + r4_2 + 0x420; + } + } +} +#else +__attribute__((naked)) void sub_8099F58(u16 *vdest, const u16 *src, s8 a2, u8 a3) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x20\n" + "\tmov r9, r0\n" + "\tadds r5, r1, 0\n" + "\tlsls r2, 24\n" + "\tlsls r3, 24\n" + "\tlsrs r3, 24\n" + "\tlsls r0, r3, 8\n" + "\tstr r0, [sp]\n" + "\tlsls r0, r3, 1\n" + "\tadds r0, r3\n" + "\tadds r0, 0x4\n" + "\tlsls r0, 28\n" + "\tlsrs r0, 16\n" + "\tstr r0, [sp, 0x4]\n" + "\tldr r0, _08099FB8 @ =gPokemonStorageSystemPtr\n" + "\tldr r0, [r0]\n" + "\tldr r1, _08099FBC @ =0x000008b4\n" + "\tadds r0, r1\n" + "\tldrh r1, [r0]\n" + "\tlsrs r1, 3\n" + "\tadds r1, 0xA\n" + "\tlsrs r0, r2, 24\n" + "\tmov r8, r0\n" + "\tasrs r2, 24\n" + "\tlsls r0, r2, 1\n" + "\tadds r0, r2\n" + "\tlsls r0, 3\n" + "\tadds r1, r0\n" + "\tmovs r0, 0x3F\n" + "\tands r1, r0\n" + "\tstr r1, [sp, 0x8]\n" + "\tadds r2, r1, 0\n" + "\tcmp r2, 0xC\n" + "\tbgt _08099FC0\n" + "\tmovs r6, 0x14\n" + "\tmovs r3, 0\n" + "\tlsls r0, r2, 1\n" + "\tadds r0, 0x80\n" + "\tmov r1, r9\n" + "\tadds r4, r1, r0\n" + "\tmovs r7, 0\n" + "\tb _0809A020\n" + "\t.align 2, 0\n" + "_08099FB8: .4byte gPokemonStorageSystemPtr\n" + "_08099FBC: .4byte 0x000008b4\n" + "_08099FC0:\n" + "\tcmp r2, 0x1F\n" + "\tbgt _08099FE6\n" + "\tmovs r0, 0x20\n" + "\tsubs r0, r2\n" + "\tlsls r0, 16\n" + "\tmovs r1, 0x14\n" + "\tlsrs r6, r0, 16\n" + "\tasrs r0, 16\n" + "\tsubs r1, r0\n" + "\tlsls r1, 16\n" + "\tlsrs r3, r1, 16\n" + "\tlsls r0, r2, 1\n" + "\tadds r0, 0x80\n" + "\tmov r2, r9\n" + "\tadds r4, r2, r0\n" + "\tmovs r7, 0x88\n" + "\tlsls r7, 4\n" + "\tadd r7, r9\n" + "\tb _0809A020\n" + "_08099FE6:\n" + "\tcmp r2, 0x2C\n" + "\tbgt _08099FFE\n" + "\tmovs r6, 0x14\n" + "\tmovs r3, 0\n" + "\tlsls r0, r2, 1\n" + "\tmovs r1, 0x84\n" + "\tlsls r1, 4\n" + "\tadds r0, r1\n" + "\tmov r2, r9\n" + "\tadds r4, r2, r0\n" + "\tmovs r7, 0\n" + "\tb _0809A020\n" + "_08099FFE:\n" + "\tmovs r0, 0x40\n" + "\tsubs r0, r2\n" + "\tlsls r0, 16\n" + "\tmovs r1, 0x14\n" + "\tlsrs r6, r0, 16\n" + "\tasrs r0, 16\n" + "\tsubs r1, r0\n" + "\tlsls r1, 16\n" + "\tlsrs r3, r1, 16\n" + "\tlsls r0, r2, 1\n" + "\tmovs r1, 0x84\n" + "\tlsls r1, 4\n" + "\tadds r0, r1\n" + "\tmov r2, r9\n" + "\tadds r4, r2, r0\n" + "\tmov r7, r9\n" + "\tadds r7, 0x80\n" + "_0809A020:\n" + "\tmovs r1, 0\n" + "\tmov r0, r8\n" + "\tlsls r0, 24\n" + "\tstr r0, [sp, 0x14]\n" + "\tlsls r0, r6, 16\n" + "\tasrs r0, 16\n" + "\tmov r8, r0\n" + "\tlsls r3, 16\n" + "\tstr r3, [sp, 0xC]\n" + "\tasrs r2, r3, 16\n" + "\tstr r2, [sp, 0x10]\n" + "_0809A036:\n" + "\tmovs r3, 0\n" + "\tadds r0, r4, 0\n" + "\tadds r0, 0x40\n" + "\tstr r0, [sp, 0x18]\n" + "\tadds r2, r7, 0\n" + "\tadds r2, 0x40\n" + "\tstr r2, [sp, 0x1C]\n" + "\tadds r1, 0x1\n" + "\tmov r10, r1\n" + "\tcmp r3, r8\n" + "\tbge _0809A07A\n" + "\tldr r0, _0809A0D4 @ =0x00000fff\n" + "\tmov r12, r0\n" + "\tmovs r6, 0xF0\n" + "\tlsls r6, 8\n" + "_0809A054:\n" + "\tldrh r2, [r5]\n" + "\tmov r0, r12\n" + "\tands r0, r2\n" + "\tldr r1, [sp]\n" + "\tadds r0, r1, r0\n" + "\tadds r1, r6, 0\n" + "\tands r1, r2\n" + "\tldr r2, [sp, 0x4]\n" + "\tadds r1, r2, r1\n" + "\torrs r1, r0\n" + "\tlsls r0, r3, 1\n" + "\tadds r0, r4\n" + "\tstrh r1, [r0]\n" + "\tadds r5, 0x2\n" + "\tadds r0, r3, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r3, r0, 16\n" + "\tcmp r3, r8\n" + "\tblt _0809A054\n" + "_0809A07A:\n" + "\tmovs r3, 0\n" + "\tldr r0, [sp, 0x10]\n" + "\tcmp r3, r0\n" + "\tbge _0809A0B4\n" + "\tldr r1, _0809A0D4 @ =0x00000fff\n" + "\tmov r12, r1\n" + "\tmovs r6, 0xF0\n" + "\tlsls r6, 8\n" + "\tldr r2, [sp, 0xC]\n" + "\tasrs r4, r2, 16\n" + "_0809A08E:\n" + "\tldrh r2, [r5]\n" + "\tmov r0, r12\n" + "\tands r0, r2\n" + "\tldr r1, [sp]\n" + "\tadds r0, r1, r0\n" + "\tadds r1, r6, 0\n" + "\tands r1, r2\n" + "\tldr r2, [sp, 0x4]\n" + "\tadds r1, r2, r1\n" + "\torrs r1, r0\n" + "\tlsls r0, r3, 1\n" + "\tadds r0, r7\n" + "\tstrh r1, [r0]\n" + "\tadds r5, 0x2\n" + "\tadds r0, r3, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r3, r0, 16\n" + "\tcmp r3, r4\n" + "\tblt _0809A08E\n" + "_0809A0B4:\n" + "\tldr r4, [sp, 0x18]\n" + "\tldr r7, [sp, 0x1C]\n" + "\tmov r1, r10\n" + "\tlsls r0, r1, 16\n" + "\tlsrs r1, r0, 16\n" + "\tcmp r1, 0x11\n" + "\tbls _0809A036\n" + "\tldr r0, [sp, 0x14]\n" + "\tasrs r2, r0, 24\n" + "\tcmp r2, 0\n" + "\tbeq _0809A13A\n" + "\tcmp r2, 0\n" + "\tble _0809A0D8\n" + "\tldr r1, [sp, 0x8]\n" + "\tadds r1, 0x14\n" + "\tb _0809A0DC\n" + "\t.align 2, 0\n" + "_0809A0D4: .4byte 0x00000fff\n" + "_0809A0D8:\n" + "\tldr r1, [sp, 0x8]\n" + "\tsubs r1, 0x4\n" + "_0809A0DC:\n" + "\tmovs r0, 0x3F\n" + "\tands r1, r0\n" + "\tadds r4, r1, 0\n" + "\tadds r0, r4, 0\n" + "\tcmp r0, 0x1F\n" + "\tbgt _0809A0EE\n" + "\tlsls r0, 1\n" + "\tadds r0, 0x80\n" + "\tb _0809A0F6\n" + "_0809A0EE:\n" + "\tlsls r0, 1\n" + "\tmovs r2, 0x84\n" + "\tlsls r2, 4\n" + "\tadds r0, r2\n" + "_0809A0F6:\n" + "\tmov r1, r9\n" + "\tadds r2, r1, r0\n" + "\tmovs r3, 0\n" + "\tmovs r6, 0\n" + "_0809A0FE:\n" + "\tmovs r1, 0\n" + "\tadds r5, r3, 0x1\n" + "\tlsls r3, r4, 16\n" + "_0809A104:\n" + "\tstrh r6, [r2]\n" + "\tadds r2, 0x40\n" + "\tadds r0, r1, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r1, r0, 16\n" + "\tcmp r1, 0x11\n" + "\tbls _0809A104\n" + "\tasrs r0, r3, 16\n" + "\tadds r4, r0, 0x1\n" + "\tmovs r0, 0x3F\n" + "\tands r4, r0\n" + "\tadds r0, r4, 0\n" + "\tcmp r0, 0x1F\n" + "\tbgt _0809A126\n" + "\tlsls r0, 1\n" + "\tadds r0, 0x80\n" + "\tb _0809A12E\n" + "_0809A126:\n" + "\tlsls r0, 1\n" + "\tmovs r2, 0x84\n" + "\tlsls r2, 4\n" + "\tadds r0, r2\n" + "_0809A12E:\n" + "\tmov r1, r9\n" + "\tadds r2, r1, r0\n" + "\tlsls r0, r5, 16\n" + "\tlsrs r3, r0, 16\n" + "\tcmp r3, 0x3\n" + "\tbls _0809A0FE\n" + "_0809A13A:\n" + "\tadd sp, 0x20\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0"); +} +#endif -- cgit v1.2.3 From a5721ffd736f30d424da8aede5c52071365f3850 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 13 Jan 2018 16:40:15 -0500 Subject: nonmatching sub_809A14C --- asm/pokemon_storage_system.s | 64 -------------------------- src/pokemon/pokemon_storage_system_4.c | 84 ++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+), 64 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index bf7e7a809..79783e4ed 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,70 +5,6 @@ .text - thumb_func_start sub_809A14C -sub_809A14C: @ 809A14C - push {r4-r6,lr} - adds r2, r0, 0 - ldr r0, _0809A174 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r1, _0809A178 @ =0x000008b4 - adds r0, r1 - ldrh r0, [r0] - lsrs r0, 3 - adds r3, r0, 0 - adds r3, 0x1E - movs r0, 0x3F - ands r3, r0 - adds r0, r3, 0 - cmp r0, 0x1F - bgt _0809A17C - lsls r0, 1 - movs r6, 0x98 - lsls r6, 3 - adds r0, r6 - b _0809A184 - .align 2, 0 -_0809A174: .4byte gPokemonStorageSystemPtr -_0809A178: .4byte 0x000008b4 -_0809A17C: - lsls r0, 1 - movs r1, 0xC8 - lsls r1, 4 - adds r0, r1 -_0809A184: - adds r2, r0 - movs r0, 0 - movs r5, 0 - movs r4, 0x3F -_0809A18C: - strh r5, [r2] - adds r2, 0x2 - adds r3, 0x1 - ands r3, r4 - adds r1, r3, 0 - cmp r1, 0 - bne _0809A19E - ldr r6, _0809A1B8 @ =0xfffff7c0 - adds r2, r6 -_0809A19E: - cmp r1, 0x20 - bne _0809A1A8 - movs r1, 0xF8 - lsls r1, 3 - adds r2, r1 -_0809A1A8: - adds r0, 0x1 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x2B - bls _0809A18C - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0809A1B8: .4byte 0xfffff7c0 - thumb_func_end sub_809A14C - thumb_func_start sub_809A1BC sub_809A1BC: @ 809A1BC push {r4-r6,lr} diff --git a/src/pokemon/pokemon_storage_system_4.c b/src/pokemon/pokemon_storage_system_4.c index 9f19814a5..1ccaa01f1 100644 --- a/src/pokemon/pokemon_storage_system_4.c +++ b/src/pokemon/pokemon_storage_system_4.c @@ -673,3 +673,87 @@ __attribute__((naked)) void sub_8099F58(u16 *vdest, const u16 *src, s8 a2, u8 a3 "\tbx r0"); } #endif + +#ifdef NONMATCHING +void sub_809A14C(u16 *vdest) +{ + u16 *r2; + u16 i; + int r3 = ((gPokemonStorageSystemPtr->unk_08b4 >> 3) + 30) & 0x3f; + r2 = vdest + (r3 < 0x20 ? r3 + 0x260 : r3 + 0x640); + for (i = 0; i < 0x2b; i++) + { + *r2++ = 0; + r3++; + r3 &= 0x3f; + if (r3 == 0) + r2 -= 0x420; + if (r3 == 0x20) + r2 += 0x3e0; + } +} +#else +__attribute__((naked)) void sub_809A14C(u16 *vdest) +{ + asm_unified("\tpush {r4-r6,lr}\n" + "\tadds r2, r0, 0\n" + "\tldr r0, _0809A174 @ =gPokemonStorageSystemPtr\n" + "\tldr r0, [r0]\n" + "\tldr r1, _0809A178 @ =0x000008b4\n" + "\tadds r0, r1\n" + "\tldrh r0, [r0]\n" + "\tlsrs r0, 3\n" + "\tadds r3, r0, 0\n" + "\tadds r3, 0x1E\n" + "\tmovs r0, 0x3F\n" + "\tands r3, r0\n" + "\tadds r0, r3, 0\n" + "\tcmp r0, 0x1F\n" + "\tbgt _0809A17C\n" + "\tlsls r0, 1\n" + "\tmovs r6, 0x98\n" + "\tlsls r6, 3\n" + "\tadds r0, r6\n" + "\tb _0809A184\n" + "\t.align 2, 0\n" + "_0809A174: .4byte gPokemonStorageSystemPtr\n" + "_0809A178: .4byte 0x000008b4\n" + "_0809A17C:\n" + "\tlsls r0, 1\n" + "\tmovs r1, 0xC8\n" + "\tlsls r1, 4\n" + "\tadds r0, r1\n" + "_0809A184:\n" + "\tadds r2, r0\n" + "\tmovs r0, 0\n" + "\tmovs r5, 0\n" + "\tmovs r4, 0x3F\n" + "_0809A18C:\n" + "\tstrh r5, [r2]\n" + "\tadds r2, 0x2\n" + "\tadds r3, 0x1\n" + "\tands r3, r4\n" + "\tadds r1, r3, 0\n" + "\tcmp r1, 0\n" + "\tbne _0809A19E\n" + "\tldr r6, _0809A1B8 @ =0xfffff7c0\n" + "\tadds r2, r6\n" + "_0809A19E:\n" + "\tcmp r1, 0x20\n" + "\tbne _0809A1A8\n" + "\tmovs r1, 0xF8\n" + "\tlsls r1, 3\n" + "\tadds r2, r1\n" + "_0809A1A8:\n" + "\tadds r0, 0x1\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tcmp r0, 0x2B\n" + "\tbls _0809A18C\n" + "\tpop {r4-r6}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0809A1B8: .4byte 0xfffff7c0"); +} +#endif -- cgit v1.2.3 From daa0a98ee0129be1797274de318a35df30d39020 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 13 Jan 2018 20:07:32 -0500 Subject: through sub_809A23C --- asm/pokemon_storage_system.s | 242 --------------------------------- data/pokemon_storage_system.s | 38 ------ include/pokemon_storage_system.h | 6 +- src/pokemon/pokemon_storage_system_4.c | 90 ++++++++++++ 4 files changed, 95 insertions(+), 281 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 79783e4ed..81e0729a1 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,248 +5,6 @@ .text - thumb_func_start sub_809A1BC -sub_809A1BC: @ 809A1BC - push {r4-r6,lr} - sub sp, 0x8 - adds r3, r0, 0 - adds r2, r1, 0 - ldr r0, _0809A228 @ =gUnknown_083B6DB8 - ldr r5, [r0] - mov r1, sp - movs r0, 0 - strh r0, [r1] - ldr r4, _0809A22C @ =0x040000d4 - str r1, [r4] - str r5, [r4, 0x4] - movs r6, 0x80 - lsls r6, 1 - ldr r0, _0809A230 @ =0x81000100 - str r0, [r4, 0x8] - ldr r0, [r4, 0x8] - ldr r0, _0809A234 @ =gWindowTemplate_81E6D38 - adds r1, r5, 0 - str r3, [sp, 0x4] - bl Text_InitWindow8004E3C - str r5, [r4] - ldr r3, [sp, 0x4] - str r3, [r4, 0x4] - ldr r1, _0809A238 @ =0x80000040 - str r1, [r4, 0x8] - ldr r0, [r4, 0x8] - adds r0, r5, r6 - str r0, [r4] - adds r0, r3, 0 - adds r0, 0x80 - str r0, [r4, 0x4] - str r1, [r4, 0x8] - ldr r0, [r4, 0x8] - adds r0, r5, 0 - adds r0, 0x80 - str r0, [r4] - adds r6, r3, r6 - str r6, [r4, 0x4] - str r1, [r4, 0x8] - ldr r0, [r4, 0x8] - movs r0, 0xC0 - lsls r0, 1 - adds r5, r0 - str r5, [r4] - adds r3, r0 - str r3, [r4, 0x4] - str r1, [r4, 0x8] - ldr r0, [r4, 0x8] - add sp, 0x8 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0809A228: .4byte gUnknown_083B6DB8 -_0809A22C: .4byte 0x040000d4 -_0809A230: .4byte 0x81000100 -_0809A234: .4byte gWindowTemplate_81E6D38 -_0809A238: .4byte 0x80000040 - thumb_func_end sub_809A1BC - - thumb_func_start sub_809A23C -sub_809A23C: @ 809A23C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x24 - mov r8, r0 - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - ldr r0, _0809A384 @ =gPokemonStorageSystemPtr - ldr r5, [r0] - ldr r1, _0809A388 @ =0x000008ca - adds r7, r5, r1 - str r7, [sp, 0x18] - mov r2, sp - adds r2, 0x18 - str r2, [sp, 0x20] - ldr r0, _0809A38C @ =0x00030200 - str r0, [r2, 0x4] - mov r1, sp - ldr r3, _0809A390 @ =0x00000ccc - adds r0, r5, r3 - str r0, [sp] - ldr r4, _0809A394 @ =0x0000dac8 - strh r4, [r1, 0x4] - str r0, [sp, 0x8] - ldr r6, _0809A398 @ =0xffffdac9 - strh r6, [r1, 0xC] - add r0, sp, 0x10 - movs r1, 0 - movs r2, 0x8 - bl memset - ldr r0, _0809A39C @ =gPokemonStorage - mov r9, r0 - ldr r0, _0809A3A0 @ =0x000083c2 - add r0, r9 - add r0, r8 - ldrb r1, [r0] - ldr r2, _0809A3A4 @ =gUnknown_083BB0A8 - lsls r1, 2 - adds r0, r1, r2 - ldrh r3, [r0] - ldr r6, _0809A3A8 @ =0x00000ce8 - adds r0, r5, r6 - strh r3, [r0] - adds r2, 0x2 - adds r1, r2 - ldrh r1, [r1] - ldr r2, _0809A3AC @ =0x00000cea - adds r0, r5, r2 - strh r1, [r0] - mov r0, sp - bl LoadSpritePalettes - ldr r3, _0809A3B0 @ =0x00000d08 - adds r6, r5, r3 - movs r0, 0xFC - lsls r0, 2 - str r0, [r6] - adds r0, r4, 0 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - movs r2, 0x87 - lsls r2, 1 - mov r10, r2 - add r1, r10 - ldr r3, _0809A3B4 @ =0x00000cec - adds r2, r5, r3 - strh r1, [r2] - movs r4, 0x80 - lsls r4, 9 - adds r1, r4, 0 - lsls r1, r0 - ldr r0, [r6] - orrs r0, r1 - str r0, [r6] - ldr r0, _0809A3B8 @ =0x0000dac9 - bl IndexOfSpritePaletteTag - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 4 - add r1, r10 - ldr r2, _0809A3BC @ =0x00000cee - adds r5, r2 - strh r1, [r5] - lsls r4, r0 - ldr r0, [r6] - orrs r0, r4 - str r0, [r6] - mov r3, r8 - lsls r4, r3, 3 - add r4, r8 - ldr r6, _0809A3C0 @ =0x00008344 - add r9, r6 - add r4, r9 - adds r0, r7, 0 - adds r1, r4, 0 - bl sub_809A1BC - ldr r0, [sp, 0x20] - bl LoadSpriteSheet - adds r0, r4, 0 - bl sub_8072CA4 - lsls r0, 24 - lsrs r0, 24 - bl sub_809A6D0 - movs r4, 0 - lsls r0, 16 - asrs r6, r0, 16 -_0809A328: - lsls r1, r4, 5 - adds r1, r6, r1 - lsls r1, 16 - asrs r1, 16 - ldr r0, _0809A3C4 @ =gSpriteTemplate_83BB2B8 - movs r2, 0x1C - movs r3, 0x17 - bl CreateSprite - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - ldr r0, _0809A384 @ =gPokemonStorageSystemPtr - ldr r5, [r0] - lsls r0, r4, 2 - movs r3, 0xCF - lsls r3, 4 - adds r2, r5, r3 - adds r2, r0 - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0809A3C8 @ =gSprites - adds r0, r1 - str r0, [r2] - lsls r1, r4, 24 - lsrs r1, 24 - bl StartSpriteAnim - adds r0, r4, 0x1 - lsls r0, 16 - lsrs r4, r0, 16 - cmp r4, 0x1 - bls _0809A328 - ldr r6, _0809A3CC @ =0x00000cca - adds r1, r5, r6 - movs r0, 0 - strb r0, [r1] - add sp, 0x24 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0809A384: .4byte gPokemonStorageSystemPtr -_0809A388: .4byte 0x000008ca -_0809A38C: .4byte 0x00030200 -_0809A390: .4byte 0x00000ccc -_0809A394: .4byte 0x0000dac8 -_0809A398: .4byte 0xffffdac9 -_0809A39C: .4byte gPokemonStorage -_0809A3A0: .4byte 0x000083c2 -_0809A3A4: .4byte gUnknown_083BB0A8 -_0809A3A8: .4byte 0x00000ce8 -_0809A3AC: .4byte 0x00000cea -_0809A3B0: .4byte 0x00000d08 -_0809A3B4: .4byte 0x00000cec -_0809A3B8: .4byte 0x0000dac9 -_0809A3BC: .4byte 0x00000cee -_0809A3C0: .4byte 0x00008344 -_0809A3C4: .4byte gSpriteTemplate_83BB2B8 -_0809A3C8: .4byte gSprites -_0809A3CC: .4byte 0x00000cca - thumb_func_end sub_809A23C - thumb_func_start sub_809A3D0 sub_809A3D0: @ 809A3D0 push {r4-r7,lr} diff --git a/data/pokemon_storage_system.s b/data/pokemon_storage_system.s index 8d62633d3..aa9767dfa 100644 --- a/data/pokemon_storage_system.s +++ b/data/pokemon_storage_system.s @@ -3,44 +3,6 @@ .section .rodata -PCPal_Arrow: - .incbin "graphics/pokemon_storage/arrow.gbapal" -PCGfx_Arrow: - .incbin "graphics/pokemon_storage/arrow.4bpp" - - .align 2 -gUnknown_083BB288:: @ 83BB288 - obj_tiles PCGfx_Arrow, 128, 0x0006 - - .align 2 -gUnknown_083BB290:: @ 83BB290 - obj_pal PCPal_Arrow, 0xDACF - - .align 2 -gOamData_83BB298:: @ 83BB298 - .2byte 0x4000 - .2byte 0x8000 - .2byte 0x0800 - - .align 2 -gSpriteAnim_83BB2A0:: @ 83BB2A0 - obj_image_anim_frame 0, 5 - obj_image_anim_end - - .align 2 -gSpriteAnim_83BB2A8:: @ 83BB2A8 - obj_image_anim_frame 8, 5 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83BB2B0:: @ 83BB2B0 - .4byte gSpriteAnim_83BB2A0 - .4byte gSpriteAnim_83BB2A8 - - .align 2 -gSpriteTemplate_83BB2B8:: @ 83BB2B8 - spr_template 3, 56008, gOamData_83BB298, gSpriteAnimTable_83BB2B0, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy - .align 2 gOamData_83BB2D0:: @ 83BB2D0 .2byte 0x8000 diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index cd4dceadf..62014e62c 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -112,7 +112,11 @@ struct PokemonStorageSystemData { u16 unk_08c8; u8 unk_08ca[0x400]; u8 unk_0cca; - u16 unk_0ccc[0x1e]; + u16 unk_0ccc[0x10]; + u16 unk_0cec; + u16 unk_0cee; + struct Sprite *unk_0cf0[2]; + u8 filler_0cf8[16]; u32 unk_0d08; u8 filler_0d0c[0x50]; u16 unk_0d5c; diff --git a/src/pokemon/pokemon_storage_system_4.c b/src/pokemon/pokemon_storage_system_4.c index 1ccaa01f1..836a3433f 100644 --- a/src/pokemon/pokemon_storage_system_4.c +++ b/src/pokemon/pokemon_storage_system_4.c @@ -2,6 +2,8 @@ // Includes #include "global.h" #include "palette.h" +#include "text.h" +#include "menu.h" #include "pokemon_storage_system.h" // Static type declarations @@ -35,6 +37,7 @@ void sub_809A23C(u8 boxId); void sub_809A3D0(u8 boxId, s8 a1); void sub_809A598(void); void sub_809A654(void); +s16 sub_809A6D0(u8 width); void sub_809A6DC(void); void sub_809A774(s8 a0); void sub_809A810(void); @@ -757,3 +760,90 @@ __attribute__((naked)) void sub_809A14C(u16 *vdest) "_0809A1B8: .4byte 0xfffff7c0"); } #endif + +void sub_809A1BC(const u8 *a0, const u8 *text) +{ + u8 *r5 = gUnknown_083B6DB8; + DmaClear16(3, r5, 0x200); + Text_InitWindow8004E3C(&gWindowTemplate_81E6D38, r5, text); + DmaCopy16(3, r5 + 0x000, a0 + 0x000, 0x80); + DmaCopy16(3, r5 + 0x100, a0 + 0x080, 0x80); + DmaCopy16(3, r5 + 0x080, a0 + 0x100, 0x80); + DmaCopy16(3, r5 + 0x180, a0 + 0x180, 0x80); +} + +const struct SpriteTemplate gSpriteTemplate_83BB2B8; + +void sub_809A23C(u8 boxId) +{ + u8 tagIdx; + s16 r6; + u16 i; + + struct SpriteSheet spriteSheet = {gPokemonStorageSystemPtr->unk_08ca, 0x200, 3}; + struct SpritePalette palettes[] = { + {gPokemonStorageSystemPtr->unk_0ccc, 0xdac8}, + {gPokemonStorageSystemPtr->unk_0ccc, 0xdac9}, + {} + }; + + u16 wallpaper = gPokemonStorage.wallpaper[boxId]; + gPokemonStorageSystemPtr->unk_0ccc[14] = gUnknown_083BB0A8[wallpaper][0]; + gPokemonStorageSystemPtr->unk_0ccc[15] = gUnknown_083BB0A8[wallpaper][1]; + LoadSpritePalettes(palettes); + gPokemonStorageSystemPtr->unk_0d08 = 0x3f0; + tagIdx = IndexOfSpritePaletteTag(0xdac8); + gPokemonStorageSystemPtr->unk_0cec = 0x10e + 16 * tagIdx; + gPokemonStorageSystemPtr->unk_0d08 |= 0x10000 << tagIdx; + tagIdx = IndexOfSpritePaletteTag(0xdac9); + gPokemonStorageSystemPtr->unk_0cee = 0x10e + 16 * tagIdx; + gPokemonStorageSystemPtr->unk_0d08 |= 0x10000 << tagIdx; + sub_809A1BC(gPokemonStorageSystemPtr->unk_08ca, gPokemonStorage.boxNames[boxId]); + LoadSpriteSheet(&spriteSheet); + r6 = sub_809A6D0(sub_8072CA4(gPokemonStorage.boxNames[boxId])); + for (i = 0; i < 2; i++) + { + u8 spriteId = CreateSprite(&gSpriteTemplate_83BB2B8, r6 + i * 32, 0x1c, 23); + gPokemonStorageSystemPtr->unk_0cf0[i] = gSprites + spriteId; + StartSpriteAnim(gPokemonStorageSystemPtr->unk_0cf0[i], i); + } + gPokemonStorageSystemPtr->unk_0cca = 0; +} + + +const u16 PCPal_Arrow[] = INCBIN_U16("graphics/pokemon_storage/arrow.gbapal"); +const u8 PCGfx_Arrow[] = INCBIN_U8("graphics/pokemon_storage/arrow.4bpp"); + +const struct SpriteSheet gUnknown_083BB288 = {PCGfx_Arrow, 0x80, 6}; +const struct SpritePalette gUnknown_083BB290 = {PCPal_Arrow, 0xdacf}; + +const struct OamData gOamData_83BB298 = { + .shape = ST_OAM_H_RECTANGLE, + .size = 2, + .priority = 2 +}; + +const union AnimCmd gSpriteAnim_83BB2A0[] = { + ANIMCMD_FRAME(0, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_83BB2A8[] = { + ANIMCMD_FRAME(8, 5), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_83BB2B0[] = { + gSpriteAnim_83BB2A0, + gSpriteAnim_83BB2A8 +}; + +const struct SpriteTemplate gSpriteTemplate_83BB2B8 = { + 3, + 0xdac8, + &gOamData_83BB298, + gSpriteAnimTable_83BB2B0, + NULL, + gDummySpriteAffineAnimTable, + SpriteCallbackDummy +}; -- cgit v1.2.3 From e8daaa0f3ef2d97f7afe378494f33037f5bc8ee9 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 14 Jan 2018 18:21:22 -0500 Subject: sub_809A3D0 --- asm/pokemon_storage_system.s | 213 --------------------------------- include/pokemon_storage_system.h | 3 +- src/pokemon/pokemon_storage_system_4.c | 44 +++++++ 3 files changed, 46 insertions(+), 214 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 81e0729a1..57cacbff3 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,219 +5,6 @@ .text - thumb_func_start sub_809A3D0 -sub_809A3D0: @ 809A3D0 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x2C - lsls r0, 24 - lsrs r0, 24 - str r0, [sp, 0x28] - lsls r1, 24 - lsrs r1, 24 - mov r10, r1 - ldr r3, _0809A43C @ =gPokemonStorageSystemPtr - ldr r5, [r3] - ldr r1, _0809A440 @ =0x000008ca - adds r0, r5, r1 - str r0, [sp, 0x18] - add r2, sp, 0x18 - ldr r4, _0809A444 @ =0x0000ffff - mov r9, r4 - movs r6, 0xC0 - lsls r6, 10 - mov r8, r6 - ldr r0, _0809A448 @ =0x00030200 - str r0, [r2, 0x4] - mov r1, sp - ldr r0, _0809A44C @ =gSpriteTemplate_83BB2B8 - ldm r0!, {r4,r6,r7} - stm r1!, {r4,r6,r7} - ldm r0!, {r4,r6,r7} - stm r1!, {r4,r6,r7} - movs r1, 0 - ldr r7, _0809A450 @ =0x00000cca - adds r4, r5, r7 - ldrb r0, [r4] - adds r6, r2, 0 - cmp r0, 0 - bne _0809A41E - movs r1, 0x1 -_0809A41E: - strb r1, [r4] - cmp r1, 0 - bne _0809A458 - ldr r0, [r6, 0x4] - mov r1, r9 - ands r0, r1 - mov r4, r8 - orrs r0, r4 - str r0, [r6, 0x4] - ldr r7, _0809A454 @ =0x00000cec - adds r0, r5, r7 - ldrh r0, [r0] - mov r8, r0 - b _0809A478 - .align 2, 0 -_0809A43C: .4byte gPokemonStorageSystemPtr -_0809A440: .4byte 0x000008ca -_0809A444: .4byte 0x0000ffff -_0809A448: .4byte 0x00030200 -_0809A44C: .4byte gSpriteTemplate_83BB2B8 -_0809A450: .4byte 0x00000cca -_0809A454: .4byte 0x00000cec -_0809A458: - ldr r0, [r6, 0x4] - mov r1, r9 - ands r0, r1 - movs r1, 0x80 - lsls r1, 11 - orrs r0, r1 - str r0, [r6, 0x4] - ldr r4, _0809A570 @ =0x00000cec - adds r0, r5, r4 - ldrh r0, [r0] - mov r8, r0 - mov r1, sp - movs r0, 0x4 - strh r0, [r1] - ldr r0, _0809A574 @ =0x0000dac9 - strh r0, [r1, 0x2] -_0809A478: - ldr r0, [r3] - ldr r7, _0809A578 @ =0x000008ca - adds r0, r7 - ldr r1, [sp, 0x28] - lsls r5, r1, 3 - adds r5, r1 - ldr r4, _0809A57C @ =gPokemonStorage + 0x8344 - adds r5, r4 - adds r1, r5, 0 - bl sub_809A1BC - adds r0, r6, 0 - bl LoadSpriteSheet - adds r4, 0x7E - ldr r3, [sp, 0x28] - adds r4, r3, r4 - ldrb r0, [r4] - lsls r0, 2 - ldr r1, _0809A580 @ =gUnknown_083BB0A8 - adds r0, r1 - mov r1, r8 - movs r2, 0x4 - bl LoadPalette - adds r0, r5, 0 - bl sub_8072CA4 - lsls r0, 24 - lsrs r0, 24 - bl sub_809A6D0 - lsls r0, 16 - mov r4, r10 - lsls r2, r4, 24 - asrs r2, 24 - lsls r1, r2, 1 - adds r1, r2 - lsls r1, 6 - lsrs r6, r0, 16 - str r6, [sp, 0x20] - asrs r0, 16 - adds r0, r1 - lsls r0, 16 - lsrs r0, 16 - str r0, [sp, 0x24] - movs r7, 0 - negs r2, r2 - mov r9, r2 - movs r0, 0x1 - mov r10, r0 -_0809A4DE: - lsls r1, r7, 5 - mov r8, r1 - ldr r3, [sp, 0x24] - lsls r1, r3, 16 - asrs r1, 16 - add r1, r8 - lsls r1, 16 - asrs r1, 16 - mov r0, sp - movs r2, 0x1C - movs r3, 0x17 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0809A584 @ =gPokemonStorageSystemPtr - ldr r4, [r1] - lsls r6, r7, 2 - ldr r1, _0809A588 @ =0x00000cf8 - adds r2, r4, r1 - adds r2, r6 - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - ldr r0, _0809A58C @ =gSprites - adds r1, r0 - str r1, [r2] - mov r3, r9 - lsls r5, r3, 1 - add r5, r9 - lsls r5, 1 - strh r5, [r1, 0x2E] - ldr r1, [r2] - ldr r3, [sp, 0x20] - lsls r0, r3, 16 - asrs r0, 16 - add r0, r8 - strh r0, [r1, 0x30] - ldr r0, [r2] - mov r1, r10 - strh r1, [r0, 0x32] - ldr r0, [r2] - ldr r1, _0809A590 @ =sub_809A5E8 - str r1, [r0, 0x1C] - lsls r1, r7, 24 - lsrs r1, 24 - bl StartSpriteAnim - movs r3, 0xCF - lsls r3, 4 - adds r4, r3 - adds r4, r6 - ldr r0, [r4] - strh r5, [r0, 0x2E] - ldr r0, [r4] - mov r6, r10 - strh r6, [r0, 0x30] - ldr r1, [r4] - ldr r0, _0809A594 @ =sub_809A61C - str r0, [r1, 0x1C] - adds r0, r7, 0x1 - lsls r0, 16 - lsrs r7, r0, 16 - cmp r7, 0x1 - bls _0809A4DE - add sp, 0x2C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0809A570: .4byte 0x00000cec -_0809A574: .4byte 0x0000dac9 -_0809A578: .4byte 0x000008ca -_0809A57C: .4byte gPokemonStorage + 0x8344 -_0809A580: .4byte gUnknown_083BB0A8 -_0809A584: .4byte gPokemonStorageSystemPtr -_0809A588: .4byte 0x00000cf8 -_0809A58C: .4byte gSprites -_0809A590: .4byte sub_809A5E8 -_0809A594: .4byte sub_809A61C - thumb_func_end sub_809A3D0 - thumb_func_start sub_809A598 sub_809A598: @ 809A598 push {lr} diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index 62014e62c..85ffeaefe 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -116,7 +116,8 @@ struct PokemonStorageSystemData { u16 unk_0cec; u16 unk_0cee; struct Sprite *unk_0cf0[2]; - u8 filler_0cf8[16]; + struct Sprite *unk_0cf8[2]; + u8 filler_0cd0[8]; u32 unk_0d08; u8 filler_0d0c[0x50]; u16 unk_0d5c; diff --git a/src/pokemon/pokemon_storage_system_4.c b/src/pokemon/pokemon_storage_system_4.c index 836a3433f..b0378a254 100644 --- a/src/pokemon/pokemon_storage_system_4.c +++ b/src/pokemon/pokemon_storage_system_4.c @@ -36,11 +36,14 @@ void sub_809A14C(u16 *vdest); void sub_809A23C(u8 boxId); void sub_809A3D0(u8 boxId, s8 a1); void sub_809A598(void); +void sub_809A5E8(struct Sprite *sprite); +void sub_809A61C(struct Sprite *sprite); void sub_809A654(void); s16 sub_809A6D0(u8 width); void sub_809A6DC(void); void sub_809A774(s8 a0); void sub_809A810(void); +void sub_809A8C8(struct Sprite *sprite); // .rodata @@ -810,6 +813,47 @@ void sub_809A23C(u8 boxId) gPokemonStorageSystemPtr->unk_0cca = 0; } +void sub_809A3D0(u8 boxId, s8 a1) +{ + u16 r8; + s16 x; + s16 x2; + u16 i; + struct SpriteSheet spriteSheet = {gPokemonStorageSystemPtr->unk_08ca, 0x200, 3}; + struct SpriteTemplate template = gSpriteTemplate_83BB2B8; + + gPokemonStorageSystemPtr->unk_0cca = gPokemonStorageSystemPtr->unk_0cca ? FALSE : TRUE; + if (gPokemonStorageSystemPtr->unk_0cca == 0) + { + spriteSheet.tag = 3; + r8 = gPokemonStorageSystemPtr->unk_0cec; + } + else + { + spriteSheet.tag = 4; + r8 = gPokemonStorageSystemPtr->unk_0cec; + template.tileTag = 4; + template.paletteTag = 0xdac9; + } + sub_809A1BC(gPokemonStorageSystemPtr->unk_08ca, gPokemonStorage.boxNames[boxId]); + LoadSpriteSheet(&spriteSheet); + LoadPalette(gUnknown_083BB0A8[gPokemonStorage.wallpaper[boxId]], r8, 0x04); + x = sub_809A6D0(sub_8072CA4(gPokemonStorage.boxNames[boxId])); + x2 = x + a1 * 192; + for (i = 0; i < 2; i++) + { + u8 spriteId = CreateSprite(&template, i * 32 + x2, 0x1c, 23); + gPokemonStorageSystemPtr->unk_0cf8[i] = gSprites + spriteId; + gPokemonStorageSystemPtr->unk_0cf8[i]->data[0] = (-a1) * 6; + gPokemonStorageSystemPtr->unk_0cf8[i]->data[1] = i * 32 + x; + gPokemonStorageSystemPtr->unk_0cf8[i]->data[2] = 1; + gPokemonStorageSystemPtr->unk_0cf8[i]->callback = sub_809A5E8; + StartSpriteAnim(gPokemonStorageSystemPtr->unk_0cf8[i], i); + gPokemonStorageSystemPtr->unk_0cf0[i]->data[0] = (-a1) * 6; + gPokemonStorageSystemPtr->unk_0cf0[i]->data[1] = 1; + gPokemonStorageSystemPtr->unk_0cf0[i]->callback = sub_809A61C; + } +} const u16 PCPal_Arrow[] = INCBIN_U16("graphics/pokemon_storage/arrow.gbapal"); const u8 PCGfx_Arrow[] = INCBIN_U8("graphics/pokemon_storage/arrow.4bpp"); -- cgit v1.2.3 From f33a73ed931885507b1a5f199044d85255078bc2 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 14 Jan 2018 18:37:27 -0500 Subject: through sub_809A6D0 --- asm/pokemon_storage_system.s | 174 --------------------------------- src/pokemon/pokemon_storage_system_4.c | 46 +++++++++ 2 files changed, 46 insertions(+), 174 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 57cacbff3..dafd8ce71 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,180 +5,6 @@ .text - thumb_func_start sub_809A598 -sub_809A598: @ 809A598 - push {lr} - ldr r0, _0809A5B0 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r1, _0809A5B4 @ =0x00000cca - adds r0, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _0809A5B8 - movs r0, 0x4 - bl FreeSpriteTilesByTag - b _0809A5BE - .align 2, 0 -_0809A5B0: .4byte gPokemonStorageSystemPtr -_0809A5B4: .4byte 0x00000cca -_0809A5B8: - movs r0, 0x3 - bl FreeSpriteTilesByTag -_0809A5BE: - ldr r0, _0809A5E0 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - movs r3, 0xCF - lsls r3, 4 - adds r2, r0, r3 - adds r3, 0x8 - adds r1, r0, r3 - ldr r1, [r1] - str r1, [r2] - ldr r2, _0809A5E4 @ =0x00000cf4 - adds r1, r0, r2 - adds r3, 0x4 - adds r0, r3 - ldr r0, [r0] - str r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_0809A5E0: .4byte gPokemonStorageSystemPtr -_0809A5E4: .4byte 0x00000cf4 - thumb_func_end sub_809A598 - - thumb_func_start sub_809A5E8 -sub_809A5E8: @ 809A5E8 - push {lr} - adds r2, r0, 0 - ldrh r1, [r2, 0x32] - movs r3, 0x32 - ldrsh r0, [r2, r3] - cmp r0, 0 - beq _0809A5FC - subs r0, r1, 0x1 - strh r0, [r2, 0x32] - b _0809A614 -_0809A5FC: - ldrh r0, [r2, 0x2E] - ldrh r1, [r2, 0x20] - adds r0, r1 - strh r0, [r2, 0x20] - lsls r0, 16 - asrs r0, 16 - movs r3, 0x30 - ldrsh r1, [r2, r3] - cmp r0, r1 - bne _0809A614 - ldr r0, _0809A618 @ =SpriteCallbackDummy - str r0, [r2, 0x1C] -_0809A614: - pop {r0} - bx r0 - .align 2, 0 -_0809A618: .4byte SpriteCallbackDummy - thumb_func_end sub_809A5E8 - - thumb_func_start sub_809A61C -sub_809A61C: @ 809A61C - push {lr} - adds r2, r0, 0 - ldrh r1, [r2, 0x30] - movs r3, 0x30 - ldrsh r0, [r2, r3] - cmp r0, 0 - beq _0809A630 - subs r0, r1, 0x1 - strh r0, [r2, 0x30] - b _0809A64E -_0809A630: - ldrh r0, [r2, 0x2E] - ldrh r1, [r2, 0x20] - adds r0, r1 - strh r0, [r2, 0x20] - ldrh r1, [r2, 0x24] - adds r0, r1 - strh r0, [r2, 0x32] - subs r0, 0x40 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xC0 - bls _0809A64E - adds r0, r2, 0 - bl DestroySprite -_0809A64E: - pop {r0} - bx r0 - thumb_func_end sub_809A61C - - thumb_func_start sub_809A654 -sub_809A654: @ 809A654 - push {lr} - bl get_preferred_box - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0809A690 @ =gPokemonStorage - ldr r2, _0809A694 @ =0x000083c2 - adds r1, r2 - adds r0, r1 - ldrb r1, [r0] - ldr r0, _0809A698 @ =gPokemonStorageSystemPtr - ldr r2, [r0] - ldr r3, _0809A69C @ =0x00000cca - adds r0, r2, r3 - ldrb r0, [r0] - cmp r0, 0 - bne _0809A6A8 - lsls r0, r1, 2 - ldr r1, _0809A6A0 @ =gUnknown_083BB0A8 - adds r0, r1 - adds r3, 0x22 - adds r1, r2, r3 - ldrh r1, [r1] - lsls r1, 1 - ldr r2, _0809A6A4 @ =gPlttBufferUnfaded - adds r1, r2 - movs r2, 0x2 - bl CpuSet - b _0809A6C0 - .align 2, 0 -_0809A690: .4byte gPokemonStorage -_0809A694: .4byte 0x000083c2 -_0809A698: .4byte gPokemonStorageSystemPtr -_0809A69C: .4byte 0x00000cca -_0809A6A0: .4byte gUnknown_083BB0A8 -_0809A6A4: .4byte gPlttBufferUnfaded -_0809A6A8: - lsls r0, r1, 2 - ldr r1, _0809A6C4 @ =gUnknown_083BB0A8 - adds r0, r1 - ldr r3, _0809A6C8 @ =0x00000cee - adds r1, r2, r3 - ldrh r1, [r1] - lsls r1, 1 - ldr r2, _0809A6CC @ =gPlttBufferUnfaded - adds r1, r2 - movs r2, 0x2 - bl CpuSet -_0809A6C0: - pop {r0} - bx r0 - .align 2, 0 -_0809A6C4: .4byte gUnknown_083BB0A8 -_0809A6C8: .4byte 0x00000cee -_0809A6CC: .4byte gPlttBufferUnfaded - thumb_func_end sub_809A654 - - thumb_func_start sub_809A6D0 -sub_809A6D0: @ 809A6D0 - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 25 - movs r0, 0xB0 - subs r0, r1 - bx lr - thumb_func_end sub_809A6D0 - thumb_func_start sub_809A6DC sub_809A6DC: @ 809A6DC push {r4,r5,lr} diff --git a/src/pokemon/pokemon_storage_system_4.c b/src/pokemon/pokemon_storage_system_4.c index b0378a254..b48b20d5c 100644 --- a/src/pokemon/pokemon_storage_system_4.c +++ b/src/pokemon/pokemon_storage_system_4.c @@ -891,3 +891,49 @@ const struct SpriteTemplate gSpriteTemplate_83BB2B8 = { gDummySpriteAffineAnimTable, SpriteCallbackDummy }; + +void sub_809A598(void) +{ + if (gPokemonStorageSystemPtr->unk_0cca == 0) + FreeSpriteTilesByTag(4); + else + FreeSpriteTilesByTag(3); + gPokemonStorageSystemPtr->unk_0cf0[0] = gPokemonStorageSystemPtr->unk_0cf8[0]; + gPokemonStorageSystemPtr->unk_0cf0[1] = gPokemonStorageSystemPtr->unk_0cf8[1]; +} + +void sub_809A5E8(struct Sprite *sprite) +{ + if (sprite->data[2]) + sprite->data[2]--; + else if ((sprite->pos1.x += sprite->data[0]) == sprite->data[1]) + sprite->callback = SpriteCallbackDummy; +} + +void sub_809A61C(struct Sprite *sprite) +{ + if (sprite->data[1]) + sprite->data[1]--; + else + { + sprite->pos1.x += sprite->data[0]; + sprite->data[2] = sprite->pos1.x + sprite->pos2.x; + if (sprite->data[2] < 0x40 || sprite->data[2] > 0x100) + DestroySprite(sprite); + } +} + +void sub_809A654(void) +{ + u8 boxId = get_preferred_box(); + u8 wallpaperId = gPokemonStorage.wallpaper[boxId]; + if (gPokemonStorageSystemPtr->unk_0cca == 0) + CpuCopy16(gUnknown_083BB0A8[wallpaperId], gPlttBufferUnfaded + gPokemonStorageSystemPtr->unk_0cec, 4); + else + CpuCopy16(gUnknown_083BB0A8[wallpaperId], gPlttBufferUnfaded + gPokemonStorageSystemPtr->unk_0cee, 4); +} + +s16 sub_809A6D0(u8 width) +{ + return 0xb0 - width / 2; +} -- cgit v1.2.3 From 5fcd1184d8a189887e44559edb12417717afca5b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 14 Jan 2018 19:10:31 -0500 Subject: through sub_809A860 --- asm/pokemon_storage_system.s | 259 ---------------------- data/pokemon_storage_system.s | 25 --- include/pokemon_storage_system.h | 4 +- src/pokemon/pokemon_storage_system_2.c | 8 +- src/pokemon/pokemon_storage_system_4.c | 384 +++++++++++++++++++++------------ 5 files changed, 255 insertions(+), 425 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index dafd8ce71..136d528f8 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,265 +5,6 @@ .text - thumb_func_start sub_809A6DC -sub_809A6DC: @ 809A6DC - push {r4,r5,lr} - ldr r0, _0809A760 @ =gUnknown_083BB288 - bl LoadSpriteSheet - ldr r0, _0809A764 @ =gUnknown_083BB290 - bl LoadSpritePalette - movs r5, 0 -_0809A6EC: - lsls r1, r5, 4 - adds r1, r5 - lsls r1, 19 - movs r0, 0xB8 - lsls r0, 15 - adds r1, r0 - asrs r1, 16 - ldr r0, _0809A768 @ =gSpriteTemplate_83BB2F0 - movs r2, 0x1C - movs r3, 0x15 - bl CreateSprite - lsls r0, 24 - lsrs r1, r0, 24 - cmp r1, 0x40 - beq _0809A73E - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0809A76C @ =gSprites - adds r4, r0, r1 - lsls r1, r5, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl StartSpriteAnim - movs r0, 0x1 - cmp r5, 0 - bne _0809A72C - movs r1, 0x1 - negs r1, r1 - adds r0, r1, 0 -_0809A72C: - strh r0, [r4, 0x34] - ldr r0, _0809A770 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - lsls r1, r5, 2 - movs r2, 0xD0 - lsls r2, 4 - adds r0, r2 - adds r0, r1 - str r4, [r0] -_0809A73E: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x1 - bls _0809A6EC - bl sub_809BF2C - lsls r0, 24 - cmp r0, 0 - beq _0809A758 - movs r0, 0x1 - bl sub_809A860 -_0809A758: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0809A760: .4byte gUnknown_083BB288 -_0809A764: .4byte gUnknown_083BB290 -_0809A768: .4byte gSpriteTemplate_83BB2F0 -_0809A76C: .4byte gSprites -_0809A770: .4byte gPokemonStorageSystemPtr - thumb_func_end sub_809A6DC - - thumb_func_start sub_809A774 -sub_809A774: @ 809A774 - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - movs r2, 0 - ldr r7, _0809A7C4 @ =gPokemonStorageSystemPtr - ldr r0, [r7] - movs r1, 0xD0 - lsls r1, 4 - adds r3, r0, r1 - movs r5, 0 - movs r4, 0x2 -_0809A78A: - lsls r1, r2, 2 - adds r1, r3, r1 - ldr r0, [r1] - strh r5, [r0, 0x24] - ldr r0, [r1] - strh r4, [r0, 0x2E] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0x1 - bls _0809A78A - lsls r0, r6, 24 - cmp r0, 0 - bge _0809A7CC - ldr r1, [r7] - movs r2, 0xD0 - lsls r2, 4 - adds r3, r1, r2 - ldr r2, [r3] - movs r0, 0x1D - strh r0, [r2, 0x30] - ldr r0, _0809A7C8 @ =0x00000d04 - adds r1, r0 - ldr r2, [r1] - movs r0, 0x5 - strh r0, [r2, 0x30] - ldr r0, [r3] - movs r2, 0x48 - b _0809A7E8 - .align 2, 0 -_0809A7C4: .4byte gPokemonStorageSystemPtr -_0809A7C8: .4byte 0x00000d04 -_0809A7CC: - ldr r1, [r7] - movs r2, 0xD0 - lsls r2, 4 - adds r3, r1, r2 - ldr r2, [r3] - movs r0, 0x5 - strh r0, [r2, 0x30] - ldr r0, _0809A80C @ =0x00000d04 - adds r1, r0 - ldr r2, [r1] - movs r0, 0x1D - strh r0, [r2, 0x30] - ldr r0, [r3] - movs r2, 0xF8 -_0809A7E8: - strh r2, [r0, 0x32] - ldr r0, [r1] - strh r2, [r0, 0x32] - ldr r1, [r7] - movs r2, 0xD0 - lsls r2, 4 - adds r0, r1, r2 - ldr r2, [r0] - movs r0, 0 - strh r0, [r2, 0x3C] - ldr r0, _0809A80C @ =0x00000d04 - adds r1, r0 - ldr r1, [r1] - movs r0, 0x1 - strh r0, [r1, 0x3C] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0809A80C: .4byte 0x00000d04 - thumb_func_end sub_809A774 - - thumb_func_start sub_809A810 -sub_809A810: @ 809A810 - push {r4-r6,lr} - movs r3, 0 - ldr r0, _0809A85C @ =gPokemonStorageSystemPtr - ldr r0, [r0] - movs r1, 0xD0 - lsls r1, 4 - adds r4, r0, r1 - movs r5, 0 - movs r6, 0x5 - negs r6, r6 -_0809A824: - lsls r1, r3, 2 - adds r1, r4, r1 - ldr r2, [r1] - lsls r0, r3, 4 - adds r0, r3 - lsls r0, 3 - adds r0, 0x5C - strh r0, [r2, 0x20] - ldr r0, [r1] - strh r5, [r0, 0x24] - ldr r1, [r1] - adds r1, 0x3E - ldrb r2, [r1] - adds r0, r6, 0 - ands r0, r2 - strb r0, [r1] - adds r0, r3, 0x1 - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0x1 - bls _0809A824 - movs r0, 0x1 - bl sub_809A860 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0809A85C: .4byte gPokemonStorageSystemPtr - thumb_func_end sub_809A810 - - thumb_func_start sub_809A860 -sub_809A860: @ 809A860 - push {r4,r5,lr} - lsls r0, 24 - cmp r0, 0 - beq _0809A89C - movs r2, 0 - ldr r0, _0809A898 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - movs r1, 0xD0 - lsls r1, 4 - adds r4, r0, r1 - movs r3, 0 - movs r5, 0x1 -_0809A878: - lsls r1, r2, 2 - adds r1, r4, r1 - ldr r0, [r1] - strh r5, [r0, 0x2E] - ldr r0, [r1] - strh r3, [r0, 0x30] - ldr r0, [r1] - strh r3, [r0, 0x32] - ldr r0, [r1] - strh r3, [r0, 0x36] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0x1 - bls _0809A878 - b _0809A8BC - .align 2, 0 -_0809A898: .4byte gPokemonStorageSystemPtr -_0809A89C: - movs r2, 0 - ldr r0, _0809A8C4 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - movs r3, 0xD0 - lsls r3, 4 - adds r1, r0, r3 - movs r3, 0 -_0809A8AA: - lsls r0, r2, 2 - adds r0, r1, r0 - ldr r0, [r0] - strh r3, [r0, 0x2E] - adds r0, r2, 0x1 - lsls r0, 16 - lsrs r2, r0, 16 - cmp r2, 0x1 - bls _0809A8AA -_0809A8BC: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0809A8C4: .4byte gPokemonStorageSystemPtr - thumb_func_end sub_809A860 - thumb_func_start sub_809A8C8 sub_809A8C8: @ 809A8C8 push {lr} diff --git a/data/pokemon_storage_system.s b/data/pokemon_storage_system.s index aa9767dfa..2af123090 100644 --- a/data/pokemon_storage_system.s +++ b/data/pokemon_storage_system.s @@ -3,31 +3,6 @@ .section .rodata - .align 2 -gOamData_83BB2D0:: @ 83BB2D0 - .2byte 0x8000 - .2byte 0x0000 - .2byte 0x0800 - - .align 2 -gSpriteAnim_83BB2D8:: @ 83BB2D8 - obj_image_anim_frame 0, 5 - obj_image_anim_end - - .align 2 -gSpriteAnim_83BB2E0:: @ 83BB2E0 - obj_image_anim_frame 2, 5 - obj_image_anim_end - - .align 2 -gSpriteAnimTable_83BB2E8:: @ 83BB2E8 - .4byte gSpriteAnim_83BB2D8 - .4byte gSpriteAnim_83BB2E0 - - .align 2 -gSpriteTemplate_83BB2F0:: @ 83BB2F0 - spr_template 6, 56015, gOamData_83BB2D0, gSpriteAnimTable_83BB2E8, NULL, gDummySpriteAffineAnimTable, sub_809A8C8 - .align 2 HandCursorPalette: @ 83BB308 .incbin "graphics/pokemon_storage/hand_cursor_pal.bin" diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index 85ffeaefe..0131ce18b 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -117,7 +117,7 @@ struct PokemonStorageSystemData { u16 unk_0cee; struct Sprite *unk_0cf0[2]; struct Sprite *unk_0cf8[2]; - u8 filler_0cd0[8]; + struct Sprite *unk_0d00[2]; u32 unk_0d08; u8 filler_0d0c[0x50]; u16 unk_0d5c; @@ -215,7 +215,7 @@ void sub_8099C70(u8 whichBox); bool8 sub_8099D34(void); void sub_8099DCC(u8 a0); bool8 sub_8099E08(void); -void sub_809A860(u8 a0); +void sub_809A860(bool8 a0); void sub_809AA24(void); void sub_809AA98(void); bool8 sub_809AC00(void); diff --git a/src/pokemon/pokemon_storage_system_2.c b/src/pokemon/pokemon_storage_system_2.c index 290fa120a..4657ed158 100644 --- a/src/pokemon/pokemon_storage_system_2.c +++ b/src/pokemon/pokemon_storage_system_2.c @@ -1096,7 +1096,7 @@ void sub_809789C(void) { case -1: case 0: - sub_809A860(1); + sub_809A860(TRUE); sub_8098A5C(); SetPSSCallback(sub_8096C84); break; @@ -1133,7 +1133,7 @@ void sub_8097974(void) switch (gPokemonStorageSystemPtr->unk_0d5e) { case -1: - sub_809A860(1); + sub_809A860(TRUE); sub_8098A5C(); SetPSSCallback(sub_8096C84); break; @@ -1168,7 +1168,7 @@ void sub_8097974(void) case 3: if (!sub_8099E08()) { - sub_809A860(1); + sub_809A860(TRUE); SetPSSCallback(sub_8096C84); } break; @@ -1197,7 +1197,7 @@ void sub_8097A64(void) sub_8096310(); if (gPokemonStorageSystemPtr->unk_08b2 == 201 || gPokemonStorageSystemPtr->unk_08b2 == gPokemonStorage.currentBox) { - sub_809A860(1); + sub_809A860(TRUE); SetPSSCallback(sub_8096C84); } else diff --git a/src/pokemon/pokemon_storage_system_4.c b/src/pokemon/pokemon_storage_system_4.c index b48b20d5c..b40cc916c 100644 --- a/src/pokemon/pokemon_storage_system_4.c +++ b/src/pokemon/pokemon_storage_system_4.c @@ -44,107 +44,10 @@ void sub_809A6DC(void); void sub_809A774(s8 a0); void sub_809A810(void); void sub_809A8C8(struct Sprite *sprite); +bool8 sub_809BF2C(void); // .rodata -// .text - -void sub_8099BF8(u8 boxId) -{ - gPokemonStorageSystemPtr->unk_08ba = FALSE; - gPokemonStorageSystemPtr->unk_08b4 = 0; - DmaFill32(3, 0, BG_SCREEN_ADDR(26), 0x1000); - sub_8099EB0(boxId, 0); - sub_809A23C(boxId); - sub_809A6DC(); - SpawnBoxIconSprites(boxId); - REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(26) | BGCNT_TXT512x256; -} - -void sub_8099C70(u8 whichBox) -{ - s8 r4 = sub_8099D90(whichBox); - sub_8099EB0(whichBox, r4); - gPokemonStorageSystemPtr->unk_08b6 = r4 * 6; - gPokemonStorageSystemPtr->unk_08b8 = 0x20; - gPokemonStorageSystemPtr->unk_08bb = whichBox; - gPokemonStorageSystemPtr->unk_08bc = r4 > 0 ? 0 : 5; - gPokemonStorageSystemPtr->unk_08be = r4; - gPokemonStorageSystemPtr->unk_08c0 = r4 > 0 ? 0x108 : 0x38; - gPokemonStorageSystemPtr->unk_08c2 = r4 > 0 ? 0 : 5; - gPokemonStorageSystemPtr->unk_08c4 = r4; - gPokemonStorageSystemPtr->unk_08c6 = 0; - gPokemonStorageSystemPtr->unk_08c8 = 2; - sub_809900C(whichBox, r4); - sub_809A3D0(whichBox, r4); - sub_809A774(r4); -} - -bool8 sub_8099D34(void) -{ - bool8 retVal = sub_80990AC(); - if (gPokemonStorageSystemPtr->unk_08b8 != 0) - { - gPokemonStorageSystemPtr->unk_08b4 += gPokemonStorageSystemPtr->unk_08b6; - gPokemonStorageSystemPtr->unk_08b4 &= 0x1ff; - if (--gPokemonStorageSystemPtr->unk_08b8 == 0) - { - sub_809A598(); - sub_809A810(); - } - return TRUE; - } - return retVal; -} - -s8 sub_8099D90(u8 boxId) -{ - u8 curBox = get_preferred_box(); - u8 i; - - for (i = 0; curBox != boxId; i++) - { - if (++curBox >= 14) - curBox = 0; - } - return i <= 6 ? 1 : -1; -} - -void sub_8099DCC(u8 wallpaperId) -{ - u8 curBox = get_preferred_box(); - gPokemonStorage.wallpaper[curBox] = wallpaperId; - gPokemonStorageSystemPtr->unk_1032 = 0; -} - -bool8 sub_8099E08(void) -{ - switch (gPokemonStorageSystemPtr->unk_1032) - { - case 0: - BeginNormalPaletteFade(gPokemonStorageSystemPtr->unk_0d08, 1, 0, 0x10, 0xffff); - gPokemonStorageSystemPtr->unk_1032++; - break; - case 1: - if (!UpdatePaletteFade()) - { - u8 curBox = get_preferred_box(); - sub_8099EB0(curBox, 0); - sub_809A654(); - BeginNormalPaletteFade(gPokemonStorageSystemPtr->unk_0d08, 1, 0x10, 0, 0xffff); - gPokemonStorageSystemPtr->unk_1032++; - } - break; - case 2: - if (!UpdatePaletteFade()) - gPokemonStorageSystemPtr->unk_1032++; - break; - case 3: - return FALSE; - } - return TRUE; -} - const u16 gWallpaperPalettes_Forest[] = INCBIN_U16("graphics/pokemon_storage/box_bg1.gbapal"); const u16 gWallpaperPalettes_Forest_2[] = INCBIN_U16("graphics/pokemon_storage/forest_frame.gbapal"); const u16 gWallpaperPalettes_Forest_2_3[] = INCBIN_U16("graphics/pokemon_storage/forest_bg.gbapal"); @@ -314,6 +217,171 @@ const struct WallpaperTable gWallpaperTable[] = { {gWallpaperTiles_Plain, 0xFC, gWallpaperTilemap_Plain, gWallpaperPalettes_Plain} // Plain }; +const u16 PCPal_Arrow[] = INCBIN_U16("graphics/pokemon_storage/arrow.gbapal"); +const u8 PCGfx_Arrow[] = INCBIN_U8("graphics/pokemon_storage/arrow.4bpp"); + +const struct SpriteSheet gUnknown_083BB288 = {PCGfx_Arrow, 0x80, 6}; +const struct SpritePalette gUnknown_083BB290 = {PCPal_Arrow, 0xdacf}; + +const struct OamData gOamData_83BB298 = { + .shape = ST_OAM_H_RECTANGLE, + .size = 2, + .priority = 2 +}; + +const union AnimCmd gSpriteAnim_83BB2A0[] = { + ANIMCMD_FRAME(0, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_83BB2A8[] = { + ANIMCMD_FRAME(8, 5), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_83BB2B0[] = { + gSpriteAnim_83BB2A0, + gSpriteAnim_83BB2A8 +}; + +const struct SpriteTemplate gSpriteTemplate_83BB2B8 = { + 3, + 0xdac8, + &gOamData_83BB298, + gSpriteAnimTable_83BB2B0, + NULL, + gDummySpriteAffineAnimTable, + SpriteCallbackDummy +}; + +const struct OamData gOamData_83BB2D0 = { + .shape = ST_OAM_V_RECTANGLE, + .priority = 2 +}; + +const union AnimCmd gSpriteAnim_83BB2D8[] = { + ANIMCMD_FRAME(0, 5), + ANIMCMD_END +}; + +const union AnimCmd gSpriteAnim_83BB2E0[] = { + ANIMCMD_FRAME(2, 5), + ANIMCMD_END +}; + +const union AnimCmd *const gSpriteAnimTable_83BB2E8[] = { + gSpriteAnim_83BB2D8, + gSpriteAnim_83BB2E0 +}; + +const struct SpriteTemplate gSpriteTemplate_83BB2F0 = { + 6, + 0xdacf, + &gOamData_83BB2D0, + gSpriteAnimTable_83BB2E8, + NULL, + gDummySpriteAffineAnimTable, + sub_809A8C8 +}; + +// .text + +void sub_8099BF8(u8 boxId) +{ + gPokemonStorageSystemPtr->unk_08ba = FALSE; + gPokemonStorageSystemPtr->unk_08b4 = 0; + DmaFill32(3, 0, BG_SCREEN_ADDR(26), 0x1000); + sub_8099EB0(boxId, 0); + sub_809A23C(boxId); + sub_809A6DC(); + SpawnBoxIconSprites(boxId); + REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(26) | BGCNT_TXT512x256; +} + +void sub_8099C70(u8 whichBox) +{ + s8 r4 = sub_8099D90(whichBox); + sub_8099EB0(whichBox, r4); + gPokemonStorageSystemPtr->unk_08b6 = r4 * 6; + gPokemonStorageSystemPtr->unk_08b8 = 0x20; + gPokemonStorageSystemPtr->unk_08bb = whichBox; + gPokemonStorageSystemPtr->unk_08bc = r4 > 0 ? 0 : 5; + gPokemonStorageSystemPtr->unk_08be = r4; + gPokemonStorageSystemPtr->unk_08c0 = r4 > 0 ? 0x108 : 0x38; + gPokemonStorageSystemPtr->unk_08c2 = r4 > 0 ? 0 : 5; + gPokemonStorageSystemPtr->unk_08c4 = r4; + gPokemonStorageSystemPtr->unk_08c6 = 0; + gPokemonStorageSystemPtr->unk_08c8 = 2; + sub_809900C(whichBox, r4); + sub_809A3D0(whichBox, r4); + sub_809A774(r4); +} + +bool8 sub_8099D34(void) +{ + bool8 retVal = sub_80990AC(); + if (gPokemonStorageSystemPtr->unk_08b8 != 0) + { + gPokemonStorageSystemPtr->unk_08b4 += gPokemonStorageSystemPtr->unk_08b6; + gPokemonStorageSystemPtr->unk_08b4 &= 0x1ff; + if (--gPokemonStorageSystemPtr->unk_08b8 == 0) + { + sub_809A598(); + sub_809A810(); + } + return TRUE; + } + return retVal; +} + +s8 sub_8099D90(u8 boxId) +{ + u8 curBox = get_preferred_box(); + u8 i; + + for (i = 0; curBox != boxId; i++) + { + if (++curBox >= 14) + curBox = 0; + } + return i <= 6 ? 1 : -1; +} + +void sub_8099DCC(u8 wallpaperId) +{ + u8 curBox = get_preferred_box(); + gPokemonStorage.wallpaper[curBox] = wallpaperId; + gPokemonStorageSystemPtr->unk_1032 = 0; +} + +bool8 sub_8099E08(void) +{ + switch (gPokemonStorageSystemPtr->unk_1032) + { + case 0: + BeginNormalPaletteFade(gPokemonStorageSystemPtr->unk_0d08, 1, 0, 0x10, 0xffff); + gPokemonStorageSystemPtr->unk_1032++; + break; + case 1: + if (!UpdatePaletteFade()) + { + u8 curBox = get_preferred_box(); + sub_8099EB0(curBox, 0); + sub_809A654(); + BeginNormalPaletteFade(gPokemonStorageSystemPtr->unk_0d08, 1, 0x10, 0, 0xffff); + gPokemonStorageSystemPtr->unk_1032++; + } + break; + case 2: + if (!UpdatePaletteFade()) + gPokemonStorageSystemPtr->unk_1032++; + break; + case 3: + return FALSE; + } + return TRUE; +} + void sub_8099EB0(u8 boxId, s8 a1) { const struct WallpaperTable *wallpaperTable; @@ -855,43 +923,6 @@ void sub_809A3D0(u8 boxId, s8 a1) } } -const u16 PCPal_Arrow[] = INCBIN_U16("graphics/pokemon_storage/arrow.gbapal"); -const u8 PCGfx_Arrow[] = INCBIN_U8("graphics/pokemon_storage/arrow.4bpp"); - -const struct SpriteSheet gUnknown_083BB288 = {PCGfx_Arrow, 0x80, 6}; -const struct SpritePalette gUnknown_083BB290 = {PCPal_Arrow, 0xdacf}; - -const struct OamData gOamData_83BB298 = { - .shape = ST_OAM_H_RECTANGLE, - .size = 2, - .priority = 2 -}; - -const union AnimCmd gSpriteAnim_83BB2A0[] = { - ANIMCMD_FRAME(0, 5), - ANIMCMD_END -}; - -const union AnimCmd gSpriteAnim_83BB2A8[] = { - ANIMCMD_FRAME(8, 5), - ANIMCMD_END -}; - -const union AnimCmd *const gSpriteAnimTable_83BB2B0[] = { - gSpriteAnim_83BB2A0, - gSpriteAnim_83BB2A8 -}; - -const struct SpriteTemplate gSpriteTemplate_83BB2B8 = { - 3, - 0xdac8, - &gOamData_83BB298, - gSpriteAnimTable_83BB2B0, - NULL, - gDummySpriteAffineAnimTable, - SpriteCallbackDummy -}; - void sub_809A598(void) { if (gPokemonStorageSystemPtr->unk_0cca == 0) @@ -937,3 +968,86 @@ s16 sub_809A6D0(u8 width) { return 0xb0 - width / 2; } + +void sub_809A6DC(void) +{ + u16 i; + + LoadSpriteSheet(&gUnknown_083BB288); + LoadSpritePalette(&gUnknown_083BB290); + for (i = 0; i < 2; i++) + { + u8 spriteId = CreateSprite(&gSpriteTemplate_83BB2F0, 0x5c + i * 0x88, 0x1c, 21); + if (spriteId != MAX_SPRITES) + { + struct Sprite *sprite = gSprites + spriteId; + StartSpriteAnim(sprite, i); + sprite->data[3] = (i == 0) ? -1 : 1; + gPokemonStorageSystemPtr->unk_0d00[i] = sprite; + } + } + if (sub_809BF2C()) + sub_809A860(TRUE); +} + +void sub_809A774(s8 a0) +{ + u16 i; + + for (i = 0; i < 2; i++) + { + gPokemonStorageSystemPtr->unk_0d00[i]->pos2.x = 0; + gPokemonStorageSystemPtr->unk_0d00[i]->data[0] = 2; + } + if (a0 < 0) + { + gPokemonStorageSystemPtr->unk_0d00[0]->data[1] = 29; + gPokemonStorageSystemPtr->unk_0d00[1]->data[1] = 5; + gPokemonStorageSystemPtr->unk_0d00[0]->data[2] = 0x48; + gPokemonStorageSystemPtr->unk_0d00[1]->data[2] = 0x48; + } + else + { + gPokemonStorageSystemPtr->unk_0d00[0]->data[1] = 5; + gPokemonStorageSystemPtr->unk_0d00[1]->data[1] = 29; + gPokemonStorageSystemPtr->unk_0d00[0]->data[2] = 0xF8; + gPokemonStorageSystemPtr->unk_0d00[1]->data[2] = 0xF8; + } + gPokemonStorageSystemPtr->unk_0d00[0]->data[7] = 0; + gPokemonStorageSystemPtr->unk_0d00[1]->data[7] = 1; +} + +void sub_809A810(void) +{ + u16 i; + + for (i = 0; i < 2; i++) + { + gPokemonStorageSystemPtr->unk_0d00[i]->pos1.x = 0x88 * i + 0x5c; + gPokemonStorageSystemPtr->unk_0d00[i]->pos2.x = 0; + gPokemonStorageSystemPtr->unk_0d00[i]->invisible = FALSE; + } + sub_809A860(TRUE); +} + +void sub_809A860(bool8 a0) +{ + u16 i; + if (a0) + { + for (i = 0; i < 2; i++) + { + gPokemonStorageSystemPtr->unk_0d00[i]->data[0] = 1; + gPokemonStorageSystemPtr->unk_0d00[i]->data[1] = 0; + gPokemonStorageSystemPtr->unk_0d00[i]->data[2] = 0; + gPokemonStorageSystemPtr->unk_0d00[i]->data[4] = 0; + } + } + else + { + for (i = 0; i < 2; i++) + { + gPokemonStorageSystemPtr->unk_0d00[i]->data[0] = 0; + } + } +} -- cgit v1.2.3 From d8091a8fadb1089cbc090772bbb2fbcbab633357 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 14 Jan 2018 21:01:43 -0500 Subject: through sub_809AA98 --- asm/pokemon_storage_system.s | 257 --------------------------------- include/pokemon_storage_system.h | 7 +- src/pokemon/pokemon_storage_system_4.c | 94 +++++++++++- 3 files changed, 92 insertions(+), 266 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 136d528f8..220266cd8 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,263 +5,6 @@ .text - thumb_func_start sub_809A8C8 -sub_809A8C8: @ 809A8C8 - push {lr} - adds r2, r0, 0 - movs r1, 0x2E - ldrsh r0, [r2, r1] - cmp r0, 0x4 - bhi _0809A994 - lsls r0, 2 - ldr r1, _0809A8E0 @ =_0809A8E4 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0809A8E0: .4byte _0809A8E4 - .align 2, 0 -_0809A8E4: - .4byte _0809A8F8 - .4byte _0809A8FE - .4byte _0809A92C - .4byte _0809A932 - .4byte _0809A984 -_0809A8F8: - movs r0, 0 - strh r0, [r2, 0x24] - b _0809A994 -_0809A8FE: - ldrh r0, [r2, 0x30] - adds r0, 0x1 - movs r1, 0 - strh r0, [r2, 0x30] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x3 - ble _0809A994 - strh r1, [r2, 0x30] - ldrh r0, [r2, 0x34] - ldrh r3, [r2, 0x24] - adds r0, r3 - strh r0, [r2, 0x24] - ldrh r0, [r2, 0x32] - adds r0, 0x1 - strh r0, [r2, 0x32] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0x5 - ble _0809A994 - strh r1, [r2, 0x32] - strh r1, [r2, 0x24] - b _0809A994 -_0809A92C: - movs r0, 0x3 - strh r0, [r2, 0x2E] - b _0809A994 -_0809A932: - ldr r0, _0809A97C @ =gPokemonStorageSystemPtr - ldr r1, [r0] - ldr r0, _0809A980 @ =0x000008b6 - adds r1, r0 - ldrh r0, [r2, 0x20] - ldrh r1, [r1] - subs r0, r1 - strh r0, [r2, 0x20] - subs r0, 0x49 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0xAE - bls _0809A958 - adds r3, r2, 0 - adds r3, 0x3E - ldrb r0, [r3] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r3] -_0809A958: - ldrh r0, [r2, 0x30] - subs r0, 0x1 - strh r0, [r2, 0x30] - lsls r0, 16 - cmp r0, 0 - bne _0809A994 - ldrh r0, [r2, 0x32] - strh r0, [r2, 0x20] - adds r3, r2, 0 - adds r3, 0x3E - ldrb r1, [r3] - movs r0, 0x5 - negs r0, r0 - ands r0, r1 - strb r0, [r3] - movs r0, 0x4 - strh r0, [r2, 0x2E] - b _0809A994 - .align 2, 0 -_0809A97C: .4byte gPokemonStorageSystemPtr -_0809A980: .4byte 0x000008b6 -_0809A984: - ldr r0, _0809A998 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r1, _0809A99C @ =0x000008b6 - adds r0, r1 - ldrh r1, [r2, 0x20] - ldrh r0, [r0] - subs r1, r0 - strh r1, [r2, 0x20] -_0809A994: - pop {r0} - bx r0 - .align 2, 0 -_0809A998: .4byte gPokemonStorageSystemPtr -_0809A99C: .4byte 0x000008b6 - thumb_func_end sub_809A8C8 - - thumb_func_start sub_809A9A0 -sub_809A9A0: @ 809A9A0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - adds r5, r0, 0 - adds r6, r1, 0 - ldr r4, [sp, 0x18] - lsls r2, 24 - lsrs r7, r2, 24 - lsls r3, 24 - lsrs r3, 24 - mov r8, r3 - lsls r4, 24 - lsrs r4, 24 - ldr r0, _0809AA0C @ =gSpriteTemplate_83BB2F0 - lsls r5, 16 - asrs r5, 16 - lsls r6, 16 - asrs r6, 16 - adds r1, r5, 0 - adds r2, r6, 0 - adds r3, r4, 0 - bl CreateSprite - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x40 - beq _0809AA18 - movs r1, 0x1 - ands r1, r7 - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r5, _0809AA10 @ =gSprites - adds r6, r4, r5 - adds r0, r6, 0 - bl StartSpriteAnim - movs r0, 0x3 - mov r1, r8 - ands r1, r0 - lsls r1, 2 - ldrb r2, [r6, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r2 - orrs r0, r1 - strb r0, [r6, 0x5] - adds r5, 0x1C - adds r4, r5 - ldr r0, _0809AA14 @ =SpriteCallbackDummy - str r0, [r4] - adds r0, r6, 0 - b _0809AA1A - .align 2, 0 -_0809AA0C: .4byte gSpriteTemplate_83BB2F0 -_0809AA10: .4byte gSprites -_0809AA14: .4byte SpriteCallbackDummy -_0809AA18: - movs r0, 0 -_0809AA1A: - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_809A9A0 - - thumb_func_start sub_809AA24 -sub_809AA24: @ 809AA24 - push {lr} - ldr r0, _0809AA38 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldrb r1, [r0, 0x5] - cmp r1, 0x1 - beq _0809AA40 - ldr r1, _0809AA3C @ =gUnknown_020384E4 - movs r0, 0 - strb r0, [r1] - b _0809AA44 - .align 2, 0 -_0809AA38: .4byte gPokemonStorageSystemPtr -_0809AA3C: .4byte gUnknown_020384E4 -_0809AA40: - ldr r0, _0809AA78 @ =gUnknown_020384E4 - strb r1, [r0] -_0809AA44: - ldr r0, _0809AA7C @ =gUnknown_020384E5 - movs r1, 0 - strb r1, [r0] - ldr r0, _0809AA80 @ =gUnknown_020384E6 - strb r1, [r0] - ldr r0, _0809AA84 @ =gUnknown_020384E7 - strb r1, [r0] - ldr r0, _0809AA88 @ =gUnknown_020384E8 - strb r1, [r0] - ldr r0, _0809AA8C @ =gUnknown_020384E9 - strb r1, [r0] - bl sub_809B0D4 - bl sub_809CC04 - ldr r0, _0809AA90 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r1, _0809AA94 @ =0x000011e2 - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - bl sub_809BF74 - pop {r0} - bx r0 - .align 2, 0 -_0809AA78: .4byte gUnknown_020384E4 -_0809AA7C: .4byte gUnknown_020384E5 -_0809AA80: .4byte gUnknown_020384E6 -_0809AA84: .4byte gUnknown_020384E7 -_0809AA88: .4byte gUnknown_020384E8 -_0809AA8C: .4byte gUnknown_020384E9 -_0809AA90: .4byte gPokemonStorageSystemPtr -_0809AA94: .4byte 0x000011e2 - thumb_func_end sub_809AA24 - - thumb_func_start sub_809AA98 -sub_809AA98: @ 809AA98 - push {lr} - bl sub_809CC04 - bl sub_809C028 - ldr r0, _0809AAC0 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r1, _0809AAC4 @ =0x000011e2 - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - ldr r0, _0809AAC8 @ =gUnknown_020384E6 - ldrb r0, [r0] - cmp r0, 0 - beq _0809AABA - bl sub_8098BF0 -_0809AABA: - pop {r0} - bx r0 - .align 2, 0 -_0809AAC0: .4byte gPokemonStorageSystemPtr -_0809AAC4: .4byte 0x000011e2 -_0809AAC8: .4byte gUnknown_020384E6 - thumb_func_end sub_809AA98 - thumb_func_start sub_809AACC sub_809AACC: @ 809AACC push {r4-r6,lr} diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index 0131ce18b..1afed5d1b 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -144,7 +144,9 @@ struct PokemonStorageSystemData { u8 unk_117d; u8 filler_117e[0x42]; struct Sprite *unk_11c0; - u8 filler_11c4[0x24]; + u8 filler_11c4[0x1e]; + u8 unk_11e2; + u8 filler_11e3[5]; u8 *unk_11e8; u32 unk_11ec; u16 unk_11f0; @@ -200,6 +202,7 @@ void ResetPokemonStorageSystem(void); void ResetPSSMonIconSprites(void); void SpawnBoxIconSprites(u8 boxId); u8 get_preferred_box(void); +void sub_8098BF0(void); bool8 sub_80990AC(void); void sub_8099200(bool8 a0); void sub_8099310(void); @@ -208,7 +211,7 @@ void sub_80994A8(s16 a0); void sub_809954C(void); void sub_8099958(void); bool8 sub_8099990(void); -struct Sprite *sub_809A9A0(u16 a0, u16 a1, u8 a2, u8 a3, u8 a4); +struct Sprite *sub_809A9A0(u16 x, u16 y, u8 animId, u8 priority, u8 subpriority); void sub_809BB90(void); void sub_8099BF8(u8 a0); void sub_8099C70(u8 whichBox); diff --git a/src/pokemon/pokemon_storage_system_4.c b/src/pokemon/pokemon_storage_system_4.c index b40cc916c..63d94b5a1 100644 --- a/src/pokemon/pokemon_storage_system_4.c +++ b/src/pokemon/pokemon_storage_system_4.c @@ -8,6 +8,13 @@ // Static type declarations +struct WallpaperTable { + const u8 *tiles; + u32 size; + const u8 *tileMap; + const u16 *palettes; +}; + // Static RAM declarations EWRAM_DATA struct Pokemon gUnknown_02038480 = {}; @@ -19,13 +26,6 @@ EWRAM_DATA u8 gUnknown_020384E8 = 0; EWRAM_DATA u8 gUnknown_020384E9 = 0; EWRAM_DATA u16 gUnknown_020384EA = 0; -struct WallpaperTable { - const u8 *tiles; - u32 size; - const u8 *tileMap; - const u16 *palettes; -}; - // Static ROM declarations void sub_809900C(u8 boxId, s8 a1); @@ -45,6 +45,9 @@ void sub_809A774(s8 a0); void sub_809A810(void); void sub_809A8C8(struct Sprite *sprite); bool8 sub_809BF2C(void); +void sub_809BF74(void); +void sub_809C028(void); +void sub_809CC04(void); // .rodata @@ -1051,3 +1054,80 @@ void sub_809A860(bool8 a0) } } } + +void sub_809A8C8(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->pos2.x = 0; + break; + case 1: + if (++sprite->data[1] > 3) + { + sprite->data[1] = 0; + sprite->pos2.x += sprite->data[3]; + if (++sprite->data[2] > 5) + { + sprite->data[2] = 0; + sprite->pos2.x = 0; + } + } + break; + case 2: + sprite->data[0] = 3; + break; + case 3: + sprite->pos1.x -= gPokemonStorageSystemPtr->unk_08b6; + if (sprite->pos1.x < 0x49 || sprite->pos1.x > 0xf7) + sprite->invisible = TRUE; + if (--sprite->data[1] == 0) + { + sprite->pos1.x = sprite->data[2]; + sprite->invisible = FALSE; + sprite->data[0] = 4; + } + break; + case 4: + sprite->pos1.x -= gPokemonStorageSystemPtr->unk_08b6; + break; + } +} + +struct Sprite *sub_809A9A0(u16 x, u16 y, u8 animId, u8 priority, u8 subpriority) +{ + u8 spriteId = CreateSprite(&gSpriteTemplate_83BB2F0, x, y, subpriority); + if (spriteId == MAX_SPRITES) + return NULL; + animId %= 2; + StartSpriteAnim(gSprites + spriteId, animId); + gSprites[spriteId].oam.priority = priority; + gSprites[spriteId].callback = SpriteCallbackDummy; + return gSprites + spriteId; +} + +void sub_809AA24(void) +{ + if (gPokemonStorageSystemPtr->unk_0005 != 1) + gUnknown_020384E4 = 0; + else + gUnknown_020384E4 = 1; + gUnknown_020384E5 = 0; + gUnknown_020384E6 = 0; + gUnknown_020384E7 = 0; + gUnknown_020384E8 = 0; + gUnknown_020384E9 = 0; + sub_809B0D4(); + sub_809CC04(); + gPokemonStorageSystemPtr->unk_11e2 = 1; + sub_809BF74(); +} + +void sub_809AA98(void) +{ + sub_809CC04(); + sub_809C028(); + gPokemonStorageSystemPtr->unk_11e2 = 1; + if (gUnknown_020384E6) + sub_8098BF0(); +} -- cgit v1.2.3 From 1288b752480e5d301c9ea9cff6d1efc737d6c5cc Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 14 Jan 2018 21:25:25 -0500 Subject: through sub_809AB8C --- asm/pokemon_storage_system.s | 162 --------------------------------- src/pokemon/pokemon_storage_system_4.c | 58 +++++++++++- 2 files changed, 56 insertions(+), 164 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 220266cd8..b98fe24ec 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,168 +5,6 @@ .text - thumb_func_start sub_809AACC -sub_809AACC: @ 809AACC - push {r4-r6,lr} - adds r4, r2, 0 - adds r6, r3, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - cmp r0, 0x4 - bhi _0809AB84 - lsls r0, 2 - ldr r1, _0809AAE8 @ =_0809AAEC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0809AAE8: .4byte _0809AAEC - .align 2, 0 -_0809AAEC: - .4byte _0809AB00 - .4byte _0809AB2E - .4byte _0809AB56 - .4byte _0809AB5E - .4byte _0809AB7C -_0809AB00: - adds r0, r5, 0 - movs r1, 0x6 - bl __umodsi3 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 3 - adds r1, 0x64 - strh r1, [r4] - adds r0, r5, 0 - movs r1, 0x6 - bl __udivsi3 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 3 - adds r1, 0x20 - strh r1, [r6] - b _0809AB84 -_0809AB2E: - cmp r5, 0 - bne _0809AB3A - movs r0, 0x68 - strh r0, [r4] - movs r0, 0x34 - b _0809AB82 -_0809AB3A: - cmp r5, 0x6 - bne _0809AB46 - movs r0, 0x98 - strh r0, [r4] - movs r0, 0x84 - b _0809AB82 -_0809AB46: - movs r0, 0x98 - strh r0, [r4] - subs r1, r5, 0x1 - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 3 - adds r0, 0x4 - b _0809AB82 -_0809AB56: - movs r0, 0xA2 - strh r0, [r4] - movs r0, 0xC - b _0809AB82 -_0809AB5E: - ldr r0, _0809AB78 @ =gUnknown_020384E6 - ldrb r0, [r0] - movs r1, 0xE - cmp r0, 0 - beq _0809AB6A - movs r1, 0x8 -_0809AB6A: - strh r1, [r6] - movs r0, 0x58 - muls r0, r5 - adds r0, 0x78 - strh r0, [r4] - b _0809AB84 - .align 2, 0 -_0809AB78: .4byte gUnknown_020384E6 -_0809AB7C: - movs r0, 0xA0 - strh r0, [r4] - movs r0, 0x60 -_0809AB82: - strh r0, [r6] -_0809AB84: - pop {r4-r6} - pop {r0} - bx r0 - thumb_func_end sub_809AACC - - thumb_func_start sub_809AB8C -sub_809AB8C: @ 809AB8C - push {lr} - ldr r0, _0809ABB4 @ =gUnknown_020384E4 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0 - beq _0809ABC0 - cmp r0, 0x1 - bne _0809ABF8 - ldr r0, _0809ABB8 @ =gUnknown_020384E5 - movs r1, 0 - ldrsb r1, [r0, r1] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0809ABBC @ =gPlayerParty - adds r0, r1 - movs r1, 0xB - bl GetMonData - b _0809ABEA - .align 2, 0 -_0809ABB4: .4byte gUnknown_020384E4 -_0809ABB8: .4byte gUnknown_020384E5 -_0809ABBC: .4byte gPlayerParty -_0809ABC0: - bl get_preferred_box - 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, _0809ABF0 @ =gUnknown_020384E5 - movs r2, 0 - ldrsb r2, [r1, r2] - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 4 - ldr r2, _0809ABF4 @ =gPokemonStorage + 0x4 - adds r1, r2 - adds r0, r1 - movs r1, 0xB - bl GetBoxMonData -_0809ABEA: - lsls r0, 16 - lsrs r0, 16 - b _0809ABFA - .align 2, 0 -_0809ABF0: .4byte gUnknown_020384E5 -_0809ABF4: .4byte gPokemonStorage + 0x4 -_0809ABF8: - movs r0, 0 -_0809ABFA: - pop {r1} - bx r1 - thumb_func_end sub_809AB8C - thumb_func_start sub_809AC00 sub_809AC00: @ 809AC00 push {r4-r6,lr} diff --git a/src/pokemon/pokemon_storage_system_4.c b/src/pokemon/pokemon_storage_system_4.c index 63d94b5a1..6d44b8ae8 100644 --- a/src/pokemon/pokemon_storage_system_4.c +++ b/src/pokemon/pokemon_storage_system_4.c @@ -1,6 +1,7 @@ // Includes #include "global.h" +#include "constants/species.h" #include "palette.h" #include "text.h" #include "menu.h" @@ -18,8 +19,8 @@ struct WallpaperTable { // Static RAM declarations EWRAM_DATA struct Pokemon gUnknown_02038480 = {}; -EWRAM_DATA u8 gUnknown_020384E4 = 0; -EWRAM_DATA u8 gUnknown_020384E5 = 0; +EWRAM_DATA s8 gUnknown_020384E4 = 0; +EWRAM_DATA s8 gUnknown_020384E5 = 0; EWRAM_DATA u8 gUnknown_020384E6 = 0; EWRAM_DATA u8 gUnknown_020384E7 = 0; EWRAM_DATA u8 gUnknown_020384E8 = 0; @@ -1131,3 +1132,56 @@ void sub_809AA98(void) if (gUnknown_020384E6) sub_8098BF0(); } + +void sub_809AACC(u8 a0, u8 a1, u16 *a2, u16 *a3) +{ + switch (a0) + { + case 0: + *a2 = (a1 % 6) * 24 + 100; + *a3 = (a1 / 6) * 24 + 32; + break; + case 1: + if (a1 == 0) + { + *a2 = 0x68; + *a3 = 0x34; + } + else if (a1 == 6) + { + *a2 = 0x98; + *a3 = 0x84; + } + else + { + *a2 = 0x98; + *a3 = (a1 - 1) * 24 + 4; + } + break; + case 2: + *a2 = 0xa2; + *a3 = 0x0c; + break; + case 3: + *a3 = gUnknown_020384E6 ? 8 : 14; + *a2 = a1 * 0x58 + 0x78; + break; + case 4: + *a2 = 0xa0; + *a3 = 0x60; + break; + } +} + +u16 sub_809AB8C(void) +{ + switch (gUnknown_020384E4) + { + case 1: + return GetMonData(gPlayerParty + gUnknown_020384E5, MON_DATA_SPECIES); + case 0: + return GetBoxMonData(gPokemonStorage.boxes[get_preferred_box()] + gUnknown_020384E5, MON_DATA_SPECIES); + default: + return SPECIES_NONE; + } +} -- cgit v1.2.3 From 68528382d5d8a17c5d6d65f1566a9ba7c807e14a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 15 Jan 2018 15:10:56 -0500 Subject: through sub_809AF18 --- asm/pokemon_storage_system.s | 478 --------------------------------- include/pokemon_storage_system.h | 16 +- src/pokemon/pokemon_storage_system_4.c | 121 +++++++++ 3 files changed, 135 insertions(+), 480 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index b98fe24ec..835a87f5f 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,484 +5,6 @@ .text - thumb_func_start sub_809AC00 -sub_809AC00: @ 809AC00 - push {r4-r6,lr} - ldr r0, _0809AC14 @ =gPokemonStorageSystemPtr - ldr r4, [r0] - ldr r0, _0809AC18 @ =0x000011dc - adds r1, r4, r0 - ldrh r0, [r1] - cmp r0, 0 - bne _0809AC1C - movs r0, 0 - b _0809AD2C - .align 2, 0 -_0809AC14: .4byte gPokemonStorageSystemPtr -_0809AC18: .4byte 0x000011dc -_0809AC1C: - subs r0, 0x1 - strh r0, [r1] - lsls r0, 16 - cmp r0, 0 - beq _0809AD0C - ldr r1, _0809ACF4 @ =0x000011c8 - adds r3, r4, r1 - ldr r2, _0809ACF8 @ =0x000011d0 - adds r1, r4, r2 - ldr r0, [r3] - ldr r1, [r1] - adds r0, r1 - str r0, [r3] - ldr r6, _0809ACFC @ =0x000011cc - adds r2, r4, r6 - ldr r0, _0809AD00 @ =0x000011d4 - adds r1, r4, r0 - ldr r0, [r2] - ldr r1, [r1] - adds r0, r1 - str r0, [r2] - movs r1, 0x8E - lsls r1, 5 - adds r5, r4, r1 - ldr r1, [r5] - ldr r0, [r3] - asrs r0, 8 - strh r0, [r1, 0x20] - ldr r1, [r5] - ldr r0, [r2] - asrs r0, 8 - strh r0, [r1, 0x22] - ldr r1, [r5] - ldrh r2, [r1, 0x20] - movs r3, 0x20 - ldrsh r0, [r1, r3] - movs r3, 0x80 - lsls r3, 1 - cmp r0, r3 - ble _0809AC78 - ldr r6, _0809AD04 @ =0xffffff00 - adds r0, r2, r6 - lsls r0, 16 - asrs r0, 16 - adds r0, 0x40 - strh r0, [r1, 0x20] -_0809AC78: - ldr r1, [r5] - ldrh r2, [r1, 0x20] - movs r6, 0x20 - ldrsh r0, [r1, r6] - cmp r0, 0x3F - bgt _0809AC90 - movs r0, 0x40 - subs r0, r2 - lsls r0, 16 - asrs r0, 16 - subs r0, r3, r0 - strh r0, [r1, 0x20] -_0809AC90: - ldr r1, [r5] - ldrh r2, [r1, 0x22] - movs r3, 0x22 - ldrsh r0, [r1, r3] - cmp r0, 0xB0 - ble _0809ACA8 - adds r0, r2, 0 - subs r0, 0xB0 - lsls r0, 16 - asrs r0, 16 - subs r0, 0x10 - strh r0, [r1, 0x22] -_0809ACA8: - ldr r2, [r5] - ldrh r3, [r2, 0x22] - movs r6, 0x22 - ldrsh r0, [r2, r6] - movs r1, 0x10 - negs r1, r1 - cmp r0, r1 - bge _0809ACC4 - subs r0, r1, r3 - movs r1, 0xB0 - lsls r0, 16 - asrs r0, 16 - subs r1, r0 - strh r1, [r2, 0x22] -_0809ACC4: - ldr r0, _0809AD08 @ =0x000011e3 - adds r1, r4, r0 - ldrb r0, [r1] - cmp r0, 0 - beq _0809AD2A - subs r0, 0x1 - strb r0, [r1] - lsls r0, 24 - cmp r0, 0 - bne _0809AD2A - ldr r2, [r5] - adds r2, 0x3F - ldrb r3, [r2] - lsrs r1, r3, 1 - movs r0, 0x1 - eors r1, r0 - ands r1, r0 - lsls r1, 1 - movs r0, 0x3 - negs r0, r0 - ands r0, r3 - orrs r0, r1 - strb r0, [r2] - b _0809AD2A - .align 2, 0 -_0809ACF4: .4byte 0x000011c8 -_0809ACF8: .4byte 0x000011d0 -_0809ACFC: .4byte 0x000011cc -_0809AD00: .4byte 0x000011d4 -_0809AD04: .4byte 0xffffff00 -_0809AD08: .4byte 0x000011e3 -_0809AD0C: - movs r1, 0x8E - lsls r1, 5 - adds r2, r4, r1 - ldr r1, [r2] - ldr r3, _0809AD34 @ =0x000011d8 - adds r0, r4, r3 - ldrh r0, [r0] - strh r0, [r1, 0x20] - ldr r1, [r2] - ldr r6, _0809AD38 @ =0x000011da - adds r0, r4, r6 - ldrh r0, [r0] - strh r0, [r1, 0x22] - bl sub_809AFB8 -_0809AD2A: - movs r0, 0x1 -_0809AD2C: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0809AD34: .4byte 0x000011d8 -_0809AD38: .4byte 0x000011da - thumb_func_end sub_809AC00 - - thumb_func_start sub_809AD3C -sub_809AD3C: @ 809AD3C - push {r4-r6,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r5, r1, 0 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - lsrs r5, 24 - mov r6, sp - adds r6, 0x2 - adds r0, r4, 0 - adds r1, r5, 0 - mov r2, sp - adds r3, r6, 0 - bl sub_809AACC - ldr r0, _0809AD88 @ =gPokemonStorageSystemPtr - ldr r1, [r0] - movs r2, 0x8F - lsls r2, 5 - adds r0, r1, r2 - strb r4, [r0] - ldr r3, _0809AD8C @ =0x000011e1 - adds r0, r1, r3 - strb r5, [r0] - mov r0, sp - ldrh r2, [r0] - subs r3, 0x9 - adds r0, r1, r3 - strh r2, [r0] - ldrh r0, [r6] - ldr r2, _0809AD90 @ =0x000011da - adds r1, r2 - strh r0, [r1] - add sp, 0x4 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0809AD88: .4byte gPokemonStorageSystemPtr -_0809AD8C: .4byte 0x000011e1 -_0809AD90: .4byte 0x000011da - thumb_func_end sub_809AD3C - - thumb_func_start sub_809AD94 -sub_809AD94: @ 809AD94 - push {r4-r7,lr} - ldr r0, _0809ADB0 @ =gPokemonStorageSystemPtr - ldr r2, [r0] - ldr r3, _0809ADB4 @ =0x000011de - adds r1, r2, r3 - ldrh r1, [r1] - adds r4, r0, 0 - cmp r1, 0 - beq _0809ADBC - ldr r0, _0809ADB8 @ =0x000011dc - adds r1, r2, r0 - movs r0, 0xC - b _0809ADC2 - .align 2, 0 -_0809ADB0: .4byte gPokemonStorageSystemPtr -_0809ADB4: .4byte 0x000011de -_0809ADB8: .4byte 0x000011dc -_0809ADBC: - ldr r3, _0809AE04 @ =0x000011dc - adds r1, r2, r3 - movs r0, 0x6 -_0809ADC2: - strh r0, [r1] - ldr r2, [r4] - ldr r0, _0809AE08 @ =0x000011e3 - adds r1, r2, r0 - ldrb r0, [r1] - cmp r0, 0 - beq _0809ADDA - ldr r3, _0809AE04 @ =0x000011dc - adds r0, r2, r3 - ldrh r0, [r0] - lsrs r0, 1 - strb r0, [r1] -_0809ADDA: - ldr r1, _0809AE0C @ =0x000011de - adds r0, r2, r1 - movs r1, 0 - ldrsb r1, [r0, r1] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _0809AE14 - cmp r1, 0x1 - beq _0809AE30 - ldr r3, _0809AE10 @ =0x000011da - adds r0, r2, r3 - movs r3, 0 - ldrsh r1, [r0, r3] - movs r3, 0x8E - lsls r3, 5 - adds r0, r2, r3 - ldr r0, [r0] - movs r2, 0x22 - ldrsh r0, [r0, r2] - b _0809AE46 - .align 2, 0 -_0809AE04: .4byte 0x000011dc -_0809AE08: .4byte 0x000011e3 -_0809AE0C: .4byte 0x000011de -_0809AE10: .4byte 0x000011da -_0809AE14: - ldr r3, _0809AE2C @ =0x000011da - adds r0, r2, r3 - movs r3, 0 - ldrsh r1, [r0, r3] - movs r3, 0x8E - lsls r3, 5 - adds r0, r2, r3 - ldr r0, [r0] - movs r2, 0x22 - ldrsh r0, [r0, r2] - adds r0, 0xC0 - b _0809AE46 - .align 2, 0 -_0809AE2C: .4byte 0x000011da -_0809AE30: - ldr r3, _0809AE74 @ =0x000011da - adds r0, r2, r3 - movs r3, 0 - ldrsh r1, [r0, r3] - movs r3, 0x8E - lsls r3, 5 - adds r0, r2, r3 - ldr r0, [r0] - movs r2, 0x22 - ldrsh r0, [r0, r2] - subs r0, 0xC0 -_0809AE46: - subs r7, r1, r0 - ldr r2, [r4] - ldr r3, _0809AE78 @ =0x000011df - adds r0, r2, r3 - movs r1, 0 - ldrsb r1, [r0, r1] - movs r0, 0x1 - negs r0, r0 - cmp r1, r0 - beq _0809AE80 - cmp r1, 0x1 - beq _0809AE9C - ldr r1, _0809AE7C @ =0x000011d8 - adds r0, r2, r1 - movs r3, 0 - ldrsh r1, [r0, r3] - movs r3, 0x8E - lsls r3, 5 - adds r0, r2, r3 - ldr r0, [r0] - movs r2, 0x20 - ldrsh r0, [r0, r2] - b _0809AEB2 - .align 2, 0 -_0809AE74: .4byte 0x000011da -_0809AE78: .4byte 0x000011df -_0809AE7C: .4byte 0x000011d8 -_0809AE80: - ldr r3, _0809AE98 @ =0x000011d8 - adds r0, r2, r3 - movs r3, 0 - ldrsh r1, [r0, r3] - movs r3, 0x8E - lsls r3, 5 - adds r0, r2, r3 - ldr r0, [r0] - movs r2, 0x20 - ldrsh r0, [r0, r2] - adds r0, 0xC0 - b _0809AEB2 - .align 2, 0 -_0809AE98: .4byte 0x000011d8 -_0809AE9C: - ldr r3, _0809AF00 @ =0x000011d8 - adds r0, r2, r3 - movs r3, 0 - ldrsh r1, [r0, r3] - movs r3, 0x8E - lsls r3, 5 - adds r0, r2, r3 - ldr r0, [r0] - movs r2, 0x20 - ldrsh r0, [r0, r2] - subs r0, 0xC0 -_0809AEB2: - subs r0, r1, r0 - lsls r7, 8 - lsls r0, 8 - ldr r4, [r4] - ldr r3, _0809AF04 @ =0x000011d0 - adds r6, r4, r3 - ldr r1, _0809AF08 @ =0x000011dc - adds r5, r4, r1 - ldrh r1, [r5] - bl __divsi3 - str r0, [r6] - ldr r2, _0809AF0C @ =0x000011d4 - adds r6, r4, r2 - ldrh r1, [r5] - adds r0, r7, 0 - bl __divsi3 - str r0, [r6] - ldr r3, _0809AF10 @ =0x000011c8 - adds r2, r4, r3 - movs r0, 0x8E - lsls r0, 5 - adds r1, r4, r0 - ldr r0, [r1] - movs r3, 0x20 - ldrsh r0, [r0, r3] - lsls r0, 8 - str r0, [r2] - ldr r0, _0809AF14 @ =0x000011cc - adds r4, r0 - ldr r0, [r1] - movs r1, 0x22 - ldrsh r0, [r0, r1] - lsls r0, 8 - str r0, [r4] - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0809AF00: .4byte 0x000011d8 -_0809AF04: .4byte 0x000011d0 -_0809AF08: .4byte 0x000011dc -_0809AF0C: .4byte 0x000011d4 -_0809AF10: .4byte 0x000011c8 -_0809AF14: .4byte 0x000011cc - thumb_func_end sub_809AD94 - - thumb_func_start sub_809AF18 -sub_809AF18: @ 809AF18 - push {r4,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - lsrs r1, 24 - adds r0, r4, 0 - bl sub_809AD3C - bl sub_809AD94 - ldr r0, _0809AFA4 @ =gUnknown_020384E6 - ldrb r0, [r0] - cmp r0, 0 - bne _0809AF46 - ldr r0, _0809AFA8 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - movs r1, 0x8E - lsls r1, 5 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x1 - bl StartSpriteAnim -_0809AF46: - cmp r4, 0x1 - bne _0809AF70 - ldr r0, _0809AFAC @ =gUnknown_020384E4 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0x1 - beq _0809AF70 - ldr r0, _0809AFA8 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r2, _0809AFB0 @ =0x000011e2 - adds r1, r0, r2 - strb r4, [r1] - ldr r1, _0809AFB4 @ =0x000011c4 - adds r0, r1 - ldr r1, [r0] - adds r1, 0x3E - ldrb r0, [r1] - movs r2, 0x4 - orrs r0, r2 - strb r0, [r1] -_0809AF70: - cmp r4, 0 - beq _0809AF9E - cmp r4, 0 - blt _0809AF9E - cmp r4, 0x3 - bgt _0809AF9E - ldr r0, _0809AFA8 @ =gPokemonStorageSystemPtr - ldr r2, [r0] - ldr r0, _0809AFB4 @ =0x000011c4 - adds r2, r0 - ldr r1, [r2] - adds r1, 0x3E - ldrb r0, [r1] - movs r3, 0x4 - orrs r0, r3 - strb r0, [r1] - ldr r2, [r2] - ldrb r1, [r2, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - orrs r0, r3 - strb r0, [r2, 0x5] -_0809AF9E: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809AFA4: .4byte gUnknown_020384E6 -_0809AFA8: .4byte gPokemonStorageSystemPtr -_0809AFAC: .4byte gUnknown_020384E4 -_0809AFB0: .4byte 0x000011e2 -_0809AFB4: .4byte 0x000011c4 - thumb_func_end sub_809AF18 - thumb_func_start sub_809AFB8 sub_809AFB8: @ 809AFB8 push {r4,r5,lr} diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index 1afed5d1b..e911664de 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -144,9 +144,21 @@ struct PokemonStorageSystemData { u8 unk_117d; u8 filler_117e[0x42]; struct Sprite *unk_11c0; - u8 filler_11c4[0x1e]; + struct Sprite *unk_11c4; + s32 unk_11c8; + s32 unk_11cc; + s32 unk_11d0; + s32 unk_11d4; + s16 unk_11d8; + s16 unk_11da; + u16 unk_11dc; + s8 unk_11de; + s8 unk_11df; + u8 unk_11e0; + u8 unk_11e1; u8 unk_11e2; - u8 filler_11e3[5]; + u8 unk_11e3; + u8 filler_11e4[4]; u8 *unk_11e8; u32 unk_11ec; u16 unk_11f0; diff --git a/src/pokemon/pokemon_storage_system_4.c b/src/pokemon/pokemon_storage_system_4.c index 6d44b8ae8..06c2eeff5 100644 --- a/src/pokemon/pokemon_storage_system_4.c +++ b/src/pokemon/pokemon_storage_system_4.c @@ -44,6 +44,7 @@ s16 sub_809A6D0(u8 width); void sub_809A6DC(void); void sub_809A774(s8 a0); void sub_809A810(void); +void sub_809AFB8(void); void sub_809A8C8(struct Sprite *sprite); bool8 sub_809BF2C(void); void sub_809BF74(void); @@ -1185,3 +1186,123 @@ u16 sub_809AB8C(void) return SPECIES_NONE; } } + +bool8 sub_809AC00(void) +{ + s16 tmp; + if (gPokemonStorageSystemPtr->unk_11dc == 0) + return FALSE; + if (--gPokemonStorageSystemPtr->unk_11dc) + { + gPokemonStorageSystemPtr->unk_11c8 += gPokemonStorageSystemPtr->unk_11d0; + gPokemonStorageSystemPtr->unk_11cc += gPokemonStorageSystemPtr->unk_11d4; + gPokemonStorageSystemPtr->unk_11c0->pos1.x = gPokemonStorageSystemPtr->unk_11c8 >> 8; + gPokemonStorageSystemPtr->unk_11c0->pos1.y = gPokemonStorageSystemPtr->unk_11cc >> 8; + if (gPokemonStorageSystemPtr->unk_11c0->pos1.x > 0x100) + { + tmp = gPokemonStorageSystemPtr->unk_11c0->pos1.x - 0x100; + gPokemonStorageSystemPtr->unk_11c0->pos1.x = tmp + 0x40; + } + if (gPokemonStorageSystemPtr->unk_11c0->pos1.x < 0x40) + { + tmp = 0x40 - gPokemonStorageSystemPtr->unk_11c0->pos1.x; + gPokemonStorageSystemPtr->unk_11c0->pos1.x = 0x100 - tmp; + } + if (gPokemonStorageSystemPtr->unk_11c0->pos1.y > 0xb0) + { + tmp = gPokemonStorageSystemPtr->unk_11c0->pos1.y - 0xb0; + gPokemonStorageSystemPtr->unk_11c0->pos1.y = tmp - 0x10; + } + if (gPokemonStorageSystemPtr->unk_11c0->pos1.y < -0x10) + { + tmp = -0x10 - gPokemonStorageSystemPtr->unk_11c0->pos1.y; + gPokemonStorageSystemPtr->unk_11c0->pos1.y = 0xb0 - tmp; + } + if (gPokemonStorageSystemPtr->unk_11e3 && --gPokemonStorageSystemPtr->unk_11e3 == 0) + gPokemonStorageSystemPtr->unk_11c0->vFlip = gPokemonStorageSystemPtr->unk_11c0->vFlip ? FALSE : TRUE; + } + else + { + gPokemonStorageSystemPtr->unk_11c0->pos1.x = gPokemonStorageSystemPtr->unk_11d8; + gPokemonStorageSystemPtr->unk_11c0->pos1.y = gPokemonStorageSystemPtr->unk_11da; + sub_809AFB8(); + } + return TRUE; +} + +void sub_809AD3C(u8 a0, u8 a1) +{ + u16 x; + u16 y; + + sub_809AACC(a0, a1, &x, &y); + gPokemonStorageSystemPtr->unk_11e0 = a0; + gPokemonStorageSystemPtr->unk_11e1 = a1; + gPokemonStorageSystemPtr->unk_11d8 = x; + gPokemonStorageSystemPtr->unk_11da = y; +} + +void sub_809AD94(void) +{ + int r7; + int r0; + + if (gPokemonStorageSystemPtr->unk_11de || gPokemonStorageSystemPtr->unk_11df) + gPokemonStorageSystemPtr->unk_11dc = 12; + else + gPokemonStorageSystemPtr->unk_11dc = 6; + if (gPokemonStorageSystemPtr->unk_11e3) + gPokemonStorageSystemPtr->unk_11e3 = gPokemonStorageSystemPtr->unk_11dc >> 1; + switch (gPokemonStorageSystemPtr->unk_11de) + { + default: + r7 = gPokemonStorageSystemPtr->unk_11da - gPokemonStorageSystemPtr->unk_11c0->pos1.y; + break; + case -1: + r7 = gPokemonStorageSystemPtr->unk_11da - 0xc0 - gPokemonStorageSystemPtr->unk_11c0->pos1.y; + break; + case 1: + r7 = gPokemonStorageSystemPtr->unk_11da + 0xc0 - gPokemonStorageSystemPtr->unk_11c0->pos1.y; + break; + } + switch (gPokemonStorageSystemPtr->unk_11df) + { + default: + r0 = gPokemonStorageSystemPtr->unk_11d8 - gPokemonStorageSystemPtr->unk_11c0->pos1.x; + break; + case -1: + r0 = gPokemonStorageSystemPtr->unk_11d8 - 0xc0 - gPokemonStorageSystemPtr->unk_11c0->pos1.x; + break; + case 1: + r0 = gPokemonStorageSystemPtr->unk_11d8 + 0xc0 - gPokemonStorageSystemPtr->unk_11c0->pos1.x; + break; + } + r7 <<= 8; + r0 <<= 8; + gPokemonStorageSystemPtr->unk_11d0 = r0 / gPokemonStorageSystemPtr->unk_11dc; + gPokemonStorageSystemPtr->unk_11d4 = r7 / gPokemonStorageSystemPtr->unk_11dc; + gPokemonStorageSystemPtr->unk_11c8 = gPokemonStorageSystemPtr->unk_11c0->pos1.x << 8; + gPokemonStorageSystemPtr->unk_11cc = gPokemonStorageSystemPtr->unk_11c0->pos1.y << 8; +} + +void sub_809AF18(u8 a0, u8 a1) +{ + sub_809AD3C(a0, a1); + sub_809AD94(); + if (gUnknown_020384E6 == 0) + StartSpriteAnim(gPokemonStorageSystemPtr->unk_11c0, 1); + if (a0 == 1 && gUnknown_020384E4 != 1) + { + gPokemonStorageSystemPtr->unk_11e2 = a0; + gPokemonStorageSystemPtr->unk_11c4->invisible = TRUE; + } + switch (a0) + { + case 0: + break; + case 1 ... 3: + gPokemonStorageSystemPtr->unk_11c4->invisible = TRUE; + gPokemonStorageSystemPtr->unk_11c4->oam.priority = 1; + break; + } +} -- cgit v1.2.3 From 650f85e7db8ea123256d661a7db59c9325115130 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 15 Jan 2018 15:46:17 -0500 Subject: through sub_809B130 --- asm/pokemon_storage_system.s | 222 --------------------------------- data/pokemon_storage_system.s | 22 ---- include/pokemon_storage_system.h | 4 +- ld_script.txt | 2 +- src/pokemon/pokemon_storage_system_4.c | 85 ++++++++++++- src/pokemon/pokemon_storage_system_6.c | 14 --- 6 files changed, 88 insertions(+), 261 deletions(-) delete mode 100644 src/pokemon/pokemon_storage_system_6.c diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 835a87f5f..5a1853361 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,226 +5,6 @@ .text - thumb_func_start sub_809AFB8 -sub_809AFB8: @ 809AFB8 - push {r4,r5,lr} - ldr r5, _0809B000 @ =gUnknown_020384E4 - ldr r0, _0809B004 @ =gPokemonStorageSystemPtr - ldr r4, [r0] - movs r1, 0x8F - lsls r1, 5 - adds r0, r4, r1 - ldrb r0, [r0] - strb r0, [r5] - ldr r1, _0809B008 @ =gUnknown_020384E5 - ldr r2, _0809B00C @ =0x000011e1 - adds r0, r4, r2 - ldrb r0, [r0] - strb r0, [r1] - ldr r0, _0809B010 @ =gUnknown_020384E6 - ldrb r0, [r0] - cmp r0, 0 - bne _0809AFEA - movs r1, 0x8E - lsls r1, 5 - adds r0, r4, r1 - ldr r0, [r0] - movs r1, 0 - bl StartSpriteAnim -_0809AFEA: - bl sub_809BF74 - movs r0, 0 - ldrsb r0, [r5, r0] - cmp r0, 0x1 - beq _0809B020 - cmp r0, 0x1 - bgt _0809B014 - cmp r0, 0 - beq _0809B034 - b _0809B05E - .align 2, 0 -_0809B000: .4byte gUnknown_020384E4 -_0809B004: .4byte gPokemonStorageSystemPtr -_0809B008: .4byte gUnknown_020384E5 -_0809B00C: .4byte 0x000011e1 -_0809B010: .4byte gUnknown_020384E6 -_0809B014: - cmp r0, 0x2 - bne _0809B05E - movs r0, 0x1 - bl sub_809A860 - b _0809B05E -_0809B020: - ldr r2, _0809B030 @ =0x000011c4 - adds r0, r4, r2 - ldr r0, [r0] - adds r0, 0x43 - movs r1, 0xC - strb r1, [r0] - b _0809B05E - .align 2, 0 -_0809B030: .4byte 0x000011c4 -_0809B034: - ldr r0, _0809B064 @ =0x000011c4 - adds r2, r4, r0 - ldr r3, [r2] - ldrb r1, [r3, 0x5] - movs r0, 0xD - negs r0, r0 - ands r0, r1 - movs r1, 0x8 - orrs r0, r1 - strb r0, [r3, 0x5] - ldr r0, [r2] - adds r0, 0x43 - movs r1, 0x14 - strb r1, [r0] - ldr r1, [r2] - adds r1, 0x3E - ldrb r2, [r1] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - strb r0, [r1] -_0809B05E: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0809B064: .4byte 0x000011c4 - thumb_func_end sub_809AFB8 - - thumb_func_start sub_809B068 -sub_809B068: @ 809B068 - push {lr} - ldr r0, _0809B078 @ =gUnknown_020384E6 - ldrb r0, [r0] - cmp r0, 0 - bne _0809B07C - movs r3, 0 - b _0809B08A - .align 2, 0 -_0809B078: .4byte gUnknown_020384E6 -_0809B07C: - bl CalculatePlayerPartyCount - lsls r0, 24 - lsrs r3, r0, 24 - cmp r3, 0x5 - bls _0809B08A - movs r3, 0x5 -_0809B08A: - ldr r0, _0809B0B8 @ =gPokemonStorageSystemPtr - ldr r2, [r0] - movs r1, 0x8E - lsls r1, 5 - adds r0, r2, r1 - ldr r0, [r0] - adds r0, 0x3F - ldrb r1, [r0] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0809B0AA - ldr r0, _0809B0BC @ =0x000011e3 - adds r1, r2, r0 - movs r0, 0x1 - strb r0, [r1] -_0809B0AA: - movs r0, 0x1 - adds r1, r3, 0 - bl sub_809AF18 - pop {r0} - bx r0 - .align 2, 0 -_0809B0B8: .4byte gPokemonStorageSystemPtr -_0809B0BC: .4byte 0x000011e3 - thumb_func_end sub_809B068 - - thumb_func_start sub_809B0C0 -sub_809B0C0: @ 809B0C0 - push {lr} - adds r1, r0, 0 - lsls r1, 24 - lsrs r1, 24 - movs r0, 0 - bl sub_809AF18 - pop {r0} - bx r0 - thumb_func_end sub_809B0C0 - - thumb_func_start sub_809B0D4 -sub_809B0D4: @ 809B0D4 - ldr r1, _0809B0DC @ =gUnknown_020384EA - movs r0, 0 - strb r0, [r1] - bx lr - .align 2, 0 -_0809B0DC: .4byte gUnknown_020384EA - thumb_func_end sub_809B0D4 - - thumb_func_start sub_809B0E0 -sub_809B0E0: @ 809B0E0 - ldr r0, _0809B0EC @ =gUnknown_020384EA - ldr r1, _0809B0F0 @ =gUnknown_020384E5 - ldrb r1, [r1] - strb r1, [r0] - bx lr - .align 2, 0 -_0809B0EC: .4byte gUnknown_020384EA -_0809B0F0: .4byte gUnknown_020384E5 - thumb_func_end sub_809B0E0 - - thumb_func_start sub_809B0F4 -sub_809B0F4: @ 809B0F4 - ldr r0, _0809B0FC @ =gUnknown_020384EA - ldrb r0, [r0] - bx lr - .align 2, 0 -_0809B0FC: .4byte gUnknown_020384EA - thumb_func_end sub_809B0F4 - - thumb_func_start sub_809B100 -sub_809B100: @ 809B100 - lsls r0, 24 - ldr r1, _0809B120 @ =gPokemonStorageSystemPtr - ldr r1, [r1] - ldr r2, _0809B124 @ =0x000012a4 - adds r3, r1, r2 - ldr r2, _0809B128 @ =gUnknown_083BBBC8 - lsrs r0, 22 - adds r0, r2 - ldr r0, [r0] - str r0, [r3] - ldr r0, _0809B12C @ =0x000012a8 - adds r1, r0 - movs r0, 0 - strb r0, [r1] - bx lr - .align 2, 0 -_0809B120: .4byte gPokemonStorageSystemPtr -_0809B124: .4byte 0x000012a4 -_0809B128: .4byte gUnknown_083BBBC8 -_0809B12C: .4byte 0x000012a8 - thumb_func_end sub_809B100 - - thumb_func_start sub_809B130 -sub_809B130: @ 809B130 - push {lr} - ldr r0, _0809B148 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r1, _0809B14C @ =0x000012a4 - adds r0, r1 - ldr r0, [r0] - bl _call_via_r0 - lsls r0, 24 - lsrs r0, 24 - pop {r1} - bx r1 - .align 2, 0 -_0809B148: .4byte gPokemonStorageSystemPtr -_0809B14C: .4byte 0x000012a4 - thumb_func_end sub_809B130 - thumb_func_start sub_809B150 sub_809B150: @ 809B150 push {r4,r5,lr} @@ -1526,8 +1306,6 @@ _0809BB88: .4byte gPokemonStorageSystemPtr _0809BB8C: .4byte 0x0000267d thumb_func_end sub_809B960 -// file boundary at or before here - thumb_func_start sub_809BB90 sub_809BB90: @ 809BB90 push {lr} diff --git a/data/pokemon_storage_system.s b/data/pokemon_storage_system.s index 2af123090..4c988286d 100644 --- a/data/pokemon_storage_system.s +++ b/data/pokemon_storage_system.s @@ -3,28 +3,6 @@ .section .rodata - .align 2 -HandCursorPalette: @ 83BB308 - .incbin "graphics/pokemon_storage/hand_cursor_pal.bin" - - .align 2 -HandCursorAltPalette: @ 83BB328 - .incbin "graphics/pokemon_storage/hand_cursor_alt_pal.bin" - - .align 2 -HandCursorTiles: @ 83BB348 - .incbin "graphics/pokemon_storage/hand_cursor.4bpp" - - .align 2 -HandCursorShadowTiles: @ 83BBB48 - .incbin "graphics/pokemon_storage/hand_cursor_shadow.4bpp" - - .align 2 -gUnknown_083BBBC8:: @ 83BBBC8 - .4byte sub_809B150 - .4byte sub_809B1D8 - .4byte sub_809B24C - .align 2 gUnknown_083BBBD4:: @ 83BBBD4 .4byte sub_809C464, 0 diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index e911664de..3191b841c 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -172,7 +172,9 @@ struct PokemonStorageSystemData { u8 unk_120f[0x25]; u8 unk_1234[0x25]; u8 unk_1259[0x21]; - u8 unk_127a[0x32]; + u8 unk_127a[0x2a]; + bool8 (*unk_12a4)(void); + u8 unk_12a8; struct Sprite *unk_12ac; struct Sprite *unk_12b0[2]; u16 *unk_12b8; diff --git a/ld_script.txt b/ld_script.txt index 9bdc64fdb..d925d5c14 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -133,7 +133,6 @@ SECTIONS { src/pokemon/pokemon_storage_system_3.o(.text); src/pokemon/pokemon_storage_system_4.o(.text); src/pokemon/pokemon_storage_system_5.o(.text); - src/pokemon/pokemon_storage_system_6.o(.text); asm/pokemon_storage_system.o(.text); src/pokemon/pokemon_icon.o(.text); src/pokemon/pokemon_summary_screen.o(.text); @@ -555,6 +554,7 @@ SECTIONS { src/pokemon/pokemon_storage_system_2.o(.rodata); src/pokemon/pokemon_storage_system_3.o(.rodata); src/pokemon/pokemon_storage_system_4.o(.rodata); + src/pokemon/pokemon_storage_system_5.o(.rodata); data/pokemon_storage_system.o(.rodata); src/pokemon/pokemon_icon.o(.rodata); src/pokemon/pokemon_summary_screen.o(.rodata); diff --git a/src/pokemon/pokemon_storage_system_4.c b/src/pokemon/pokemon_storage_system_4.c index 06c2eeff5..2f2091259 100644 --- a/src/pokemon/pokemon_storage_system_4.c +++ b/src/pokemon/pokemon_storage_system_4.c @@ -25,7 +25,7 @@ EWRAM_DATA u8 gUnknown_020384E6 = 0; EWRAM_DATA u8 gUnknown_020384E7 = 0; EWRAM_DATA u8 gUnknown_020384E8 = 0; EWRAM_DATA u8 gUnknown_020384E9 = 0; -EWRAM_DATA u16 gUnknown_020384EA = 0; +EWRAM_DATA u8 gUnknown_020384EA = 0; // Static ROM declarations @@ -46,6 +46,9 @@ void sub_809A774(s8 a0); void sub_809A810(void); void sub_809AFB8(void); void sub_809A8C8(struct Sprite *sprite); +bool8 sub_809B150(void); +bool8 sub_809B1D8(void); +bool8 sub_809B24C(void); bool8 sub_809BF2C(void); void sub_809BF74(void); void sub_809C028(void); @@ -289,6 +292,16 @@ const struct SpriteTemplate gSpriteTemplate_83BB2F0 = { sub_809A8C8 }; +const u16 HandCursorPalette[] = INCBIN_U16("graphics/pokemon_storage/hand_cursor_pal.bin"); +const u16 HandCursorAltPalette[] = INCBIN_U16("graphics/pokemon_storage/hand_cursor_alt_pal.bin"); +const u8 HandCursorTiles[] = INCBIN_U8("graphics/pokemon_storage/hand_cursor.4bpp"); +const u8 HandCursorShadowTiles[] = INCBIN_U8("graphics/pokemon_storage/hand_cursor_shadow.4bpp"); + +bool8 (*const gUnknown_083BBBC8[])(void) = { + sub_809B150, + sub_809B1D8, + sub_809B24C +}; // .text void sub_8099BF8(u8 boxId) @@ -1306,3 +1319,73 @@ void sub_809AF18(u8 a0, u8 a1) break; } } + +void sub_809AFB8(void) +{ + gUnknown_020384E4 = gPokemonStorageSystemPtr->unk_11e0; + gUnknown_020384E5 = gPokemonStorageSystemPtr->unk_11e1; + if (gUnknown_020384E6 == 0) + StartSpriteAnim(gPokemonStorageSystemPtr->unk_11c0, 0); + sub_809BF74(); + switch (gUnknown_020384E4) + { + case 2: + sub_809A860(TRUE); + break; + case 1: + gPokemonStorageSystemPtr->unk_11c4->subpriority = 12; + break; + case 0: + gPokemonStorageSystemPtr->unk_11c4->oam.priority = 2; + gPokemonStorageSystemPtr->unk_11c4->subpriority = 20; + gPokemonStorageSystemPtr->unk_11c4->invisible = FALSE; + break; + } +} + +void sub_809B068(void) +{ + u8 partyCount; + if (gUnknown_020384E6 == 0) + partyCount = 0; + else + { + partyCount = CalculatePlayerPartyCount(); + if (partyCount > PARTY_SIZE - 1) + partyCount = PARTY_SIZE - 1; + } + if (gPokemonStorageSystemPtr->unk_11c0->vFlip) + gPokemonStorageSystemPtr->unk_11e3 = 1; + sub_809AF18(1, partyCount); +} + +void sub_809B0C0(u8 a0) +{ + sub_809AF18(0, a0); +} + +void sub_809B0D4(void) +{ + gUnknown_020384EA = 0; +} + +void sub_809B0E0(void) +{ + gUnknown_020384EA = gUnknown_020384E5; +} + +u8 sub_809B0F4(void) +{ + return gUnknown_020384EA; +} + +void sub_809B100(u8 a0) +{ + gPokemonStorageSystemPtr->unk_12a4 = gUnknown_083BBBC8[a0]; + gPokemonStorageSystemPtr->unk_12a8 = 0; +} + +bool8 sub_809B130(void) +{ + return gPokemonStorageSystemPtr->unk_12a4(); +} diff --git a/src/pokemon/pokemon_storage_system_6.c b/src/pokemon/pokemon_storage_system_6.c deleted file mode 100644 index a781c1ed2..000000000 --- a/src/pokemon/pokemon_storage_system_6.c +++ /dev/null @@ -1,14 +0,0 @@ - -// Includes -#include "global.h" -#include "pokemon_storage_system.h" - -// Static type declarations - -// Static RAM declarations - -// Static ROM declarations - -// .rodata - -// .text -- cgit v1.2.3 From 66fe535e7f5f0466c15f5f82dd1c2823fc6110cf Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 15 Jan 2018 16:16:25 -0500 Subject: through sub_809B24C --- asm/pokemon_storage_system.s | 238 --------------------------------- include/pokemon_storage_system.h | 5 +- src/pokemon/pokemon_storage_system_4.c | 92 +++++++++++++ 3 files changed, 96 insertions(+), 239 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 5a1853361..d408dc7ea 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,244 +5,6 @@ .text - thumb_func_start sub_809B150 -sub_809B150: @ 809B150 - push {r4,r5,lr} - ldr r0, _0809B16C @ =gPokemonStorageSystemPtr - ldr r5, [r0] - ldr r0, _0809B170 @ =0x000012a8 - adds r4, r5, r0 - ldrb r0, [r4] - cmp r0, 0x1 - beq _0809B1A0 - cmp r0, 0x1 - bgt _0809B174 - cmp r0, 0 - beq _0809B17E - b _0809B1CE - .align 2, 0 -_0809B16C: .4byte gPokemonStorageSystemPtr -_0809B170: .4byte 0x000012a8 -_0809B174: - cmp r0, 0x2 - beq _0809B1BE - cmp r0, 0x3 - beq _0809B186 - b _0809B1CE -_0809B17E: - ldr r0, _0809B18C @ =gUnknown_020384E6 - ldrb r0, [r0] - cmp r0, 0 - beq _0809B190 -_0809B186: - movs r0, 0 - b _0809B1D0 - .align 2, 0 -_0809B18C: .4byte gUnknown_020384E6 -_0809B190: - movs r1, 0x8E - lsls r1, 5 - adds r0, r5, r1 - ldr r0, [r0] - movs r1, 0x2 - bl StartSpriteAnim - b _0809B1C8 -_0809B1A0: - bl sub_809B324 - lsls r0, 24 - cmp r0, 0 - bne _0809B1CE - movs r1, 0x8E - lsls r1, 5 - adds r0, r5, r1 - ldr r0, [r0] - movs r1, 0x3 - bl StartSpriteAnim - bl sub_809B384 - b _0809B1C8 -_0809B1BE: - bl sub_809B358 - lsls r0, 24 - cmp r0, 0 - bne _0809B1CE -_0809B1C8: - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] -_0809B1CE: - movs r0, 0x1 -_0809B1D0: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_809B150 - - thumb_func_start sub_809B1D8 -sub_809B1D8: @ 809B1D8 - push {r4,r5,lr} - ldr r0, _0809B1F4 @ =gPokemonStorageSystemPtr - ldr r4, [r0] - ldr r0, _0809B1F8 @ =0x000012a8 - adds r5, r4, r0 - ldrb r0, [r5] - cmp r0, 0x1 - beq _0809B220 - cmp r0, 0x1 - bgt _0809B1FC - cmp r0, 0 - beq _0809B202 - b _0809B244 - .align 2, 0 -_0809B1F4: .4byte gPokemonStorageSystemPtr -_0809B1F8: .4byte 0x000012a8 -_0809B1FC: - cmp r0, 0x2 - beq _0809B240 - b _0809B244 -_0809B202: - bl sub_809B324 - lsls r0, 24 - cmp r0, 0 - bne _0809B244 - movs r1, 0x8E - lsls r1, 5 - adds r0, r4, r1 - ldr r0, [r0] - movs r1, 0x2 - bl StartSpriteAnim - bl sub_809B3E0 - b _0809B238 -_0809B220: - bl sub_809B358 - lsls r0, 24 - cmp r0, 0 - bne _0809B244 - movs r1, 0x8E - lsls r1, 5 - adds r0, r4, r1 - ldr r0, [r0] - movs r1, 0 - bl StartSpriteAnim -_0809B238: - ldrb r0, [r5] - adds r0, 0x1 - strb r0, [r5] - b _0809B244 -_0809B240: - movs r0, 0 - b _0809B246 -_0809B244: - movs r0, 0x1 -_0809B246: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_809B1D8 - - thumb_func_start sub_809B24C -sub_809B24C: @ 809B24C - push {r4,r5,lr} - ldr r0, _0809B268 @ =gPokemonStorageSystemPtr - ldr r4, [r0] - ldr r0, _0809B26C @ =0x000012a8 - adds r5, r4, r0 - ldrb r0, [r5] - cmp r0, 0x1 - beq _0809B2E0 - cmp r0, 0x1 - bgt _0809B270 - cmp r0, 0 - beq _0809B276 - b _0809B31C - .align 2, 0 -_0809B268: .4byte gPokemonStorageSystemPtr -_0809B26C: .4byte 0x000012a8 -_0809B270: - cmp r0, 0x2 - beq _0809B318 - b _0809B31C -_0809B276: - ldr r0, _0809B290 @ =gUnknown_020384E4 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0 - beq _0809B298 - cmp r0, 0x1 - bne _0809B318 - ldr r2, _0809B294 @ =0x000012a9 - adds r1, r4, r2 - movs r0, 0xE - b _0809B2A0 - .align 2, 0 -_0809B290: .4byte gUnknown_020384E4 -_0809B294: .4byte 0x000012a9 -_0809B298: - bl get_preferred_box - ldr r2, _0809B2D0 @ =0x000012a9 - adds r1, r4, r2 -_0809B2A0: - strb r0, [r1] - ldr r0, _0809B2D4 @ =gPokemonStorageSystemPtr - ldr r4, [r0] - movs r1, 0x8E - lsls r1, 5 - adds r0, r4, r1 - ldr r0, [r0] - movs r1, 0x2 - bl StartSpriteAnim - ldr r2, _0809B2D0 @ =0x000012a9 - adds r0, r4, r2 - ldrb r0, [r0] - ldr r1, _0809B2D8 @ =gUnknown_020384E5 - ldrb r1, [r1] - bl sub_80996B0 - ldr r0, _0809B2DC @ =0x000012a8 - adds r4, r0 - ldrb r0, [r4] - adds r0, 0x1 - strb r0, [r4] - b _0809B31C - .align 2, 0 -_0809B2D0: .4byte 0x000012a9 -_0809B2D4: .4byte gPokemonStorageSystemPtr -_0809B2D8: .4byte gUnknown_020384E5 -_0809B2DC: .4byte 0x000012a8 -_0809B2E0: - bl sub_809971C - lsls r0, 24 - cmp r0, 0 - bne _0809B31C - movs r1, 0x8E - lsls r1, 5 - adds r0, r4, r1 - ldr r0, [r0] - movs r1, 0x3 - bl StartSpriteAnim - ldr r2, _0809B310 @ =0x000012a9 - adds r0, r4, r2 - ldrb r0, [r0] - ldr r1, _0809B314 @ =gUnknown_020384E5 - ldrb r1, [r1] - bl diegohint1 - ldrb r0, [r5] - adds r0, 0x1 - strb r0, [r5] - b _0809B31C - .align 2, 0 -_0809B310: .4byte 0x000012a9 -_0809B314: .4byte gUnknown_020384E5 -_0809B318: - movs r0, 0 - b _0809B31E -_0809B31C: - movs r0, 0x1 -_0809B31E: - pop {r4,r5} - pop {r1} - bx r1 - thumb_func_end sub_809B24C - thumb_func_start sub_809B324 sub_809B324: @ 809B324 push {lr} diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index 3191b841c..a2b5964d4 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -175,6 +175,7 @@ struct PokemonStorageSystemData { u8 unk_127a[0x2a]; bool8 (*unk_12a4)(void); u8 unk_12a8; + u8 unk_12a9; struct Sprite *unk_12ac; struct Sprite *unk_12b0[2]; u16 *unk_12b8; @@ -223,10 +224,11 @@ void sub_8099310(void); bool8 sub_8099374(void); void sub_80994A8(s16 a0); void sub_809954C(void); +void sub_80996B0(u8 a0, u8 a1); +bool8 sub_809971C(void); void sub_8099958(void); bool8 sub_8099990(void); struct Sprite *sub_809A9A0(u16 x, u16 y, u8 animId, u8 priority, u8 subpriority); -void sub_809BB90(void); void sub_8099BF8(u8 a0); void sub_8099C70(u8 whichBox); bool8 sub_8099D34(void); @@ -252,6 +254,7 @@ void sub_809B760(void); void sub_809B7AC(void); void sub_809B7D4(void); s8 sub_809B960(void); +void sub_809BB90(void); void sub_809BBC0(void); void sub_809BC18(void); void sub_809BD14(void); diff --git a/src/pokemon/pokemon_storage_system_4.c b/src/pokemon/pokemon_storage_system_4.c index 2f2091259..9e4865910 100644 --- a/src/pokemon/pokemon_storage_system_4.c +++ b/src/pokemon/pokemon_storage_system_4.c @@ -49,6 +49,11 @@ void sub_809A8C8(struct Sprite *sprite); bool8 sub_809B150(void); bool8 sub_809B1D8(void); bool8 sub_809B24C(void); +bool8 sub_809B324(void); +bool8 sub_809B358(void); +void sub_809B384(void); +void sub_809B3E0(void); +void diegohint1(u8 a0, u8 a1); bool8 sub_809BF2C(void); void sub_809BF74(void); void sub_809C028(void); @@ -1389,3 +1394,90 @@ bool8 sub_809B130(void) { return gPokemonStorageSystemPtr->unk_12a4(); } + +bool8 sub_809B150(void) +{ + switch (gPokemonStorageSystemPtr->unk_12a8) + { + case 0: + if (gUnknown_020384E6) + return FALSE; + StartSpriteAnim(gPokemonStorageSystemPtr->unk_11c0, 2); + gPokemonStorageSystemPtr->unk_12a8++; + break; + case 1: + if (!sub_809B324()) + { + StartSpriteAnim(gPokemonStorageSystemPtr->unk_11c0, 3); + sub_809B384(); + gPokemonStorageSystemPtr->unk_12a8++; + } + break; + case 2: + if (!sub_809B358()) + gPokemonStorageSystemPtr->unk_12a8++; + break; + case 3: + return FALSE; + } + return TRUE; +} + +bool8 sub_809B1D8(void) +{ + switch (gPokemonStorageSystemPtr->unk_12a8) + { + case 0: + if (!sub_809B324()) + { + StartSpriteAnim(gPokemonStorageSystemPtr->unk_11c0, 2); + sub_809B3E0(); + gPokemonStorageSystemPtr->unk_12a8++; + } + break; + case 1: + if (!sub_809B358()) + { + StartSpriteAnim(gPokemonStorageSystemPtr->unk_11c0, 0); + gPokemonStorageSystemPtr->unk_12a8++; + } + break; + case 2: + return FALSE; + } + return TRUE; +} + +bool8 sub_809B24C(void) +{ + switch (gPokemonStorageSystemPtr->unk_12a8) + { + case 0: + switch (gUnknown_020384E4) + { + case 1: + gPokemonStorageSystemPtr->unk_12a9 = 14; + break; + case 0: + gPokemonStorageSystemPtr->unk_12a9 = get_preferred_box(); + break; + default: + return FALSE; + } + StartSpriteAnim(gPokemonStorageSystemPtr->unk_11c0, 2); + sub_80996B0(gPokemonStorageSystemPtr->unk_12a9, gUnknown_020384E5); + gPokemonStorageSystemPtr->unk_12a8++; + break; + case 1: + if (!sub_809971C()) + { + StartSpriteAnim(gPokemonStorageSystemPtr->unk_11c0, 3); + diegohint1(gPokemonStorageSystemPtr->unk_12a9, gUnknown_020384E5); + gPokemonStorageSystemPtr->unk_12a8++; + } + break; + case 2: + return FALSE; + } + return TRUE; +} -- cgit v1.2.3 From e3238abc63ac7e939ccdc58e555a9dcdc66f3525 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 15 Jan 2018 16:54:02 -0500 Subject: through sub_809B44C --- asm/pokemon_storage_system.s | 223 --------------------------------- include/pokemon_storage_system.h | 2 + src/pokemon/pokemon_storage_system_4.c | 86 +++++++++++++ 3 files changed, 88 insertions(+), 223 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index d408dc7ea..9b37cbe69 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,229 +5,6 @@ .text - thumb_func_start sub_809B324 -sub_809B324: @ 809B324 - push {lr} - ldr r0, _0809B348 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - movs r1, 0x8E - lsls r1, 5 - adds r0, r1 - ldr r1, [r0] - movs r2, 0x26 - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _0809B33E - cmp r0, 0x8 - beq _0809B34C -_0809B33E: - ldrh r0, [r1, 0x26] - adds r0, 0x1 - strh r0, [r1, 0x26] - b _0809B350 - .align 2, 0 -_0809B348: .4byte gPokemonStorageSystemPtr -_0809B34C: - movs r0, 0 - b _0809B352 -_0809B350: - movs r0, 0x1 -_0809B352: - pop {r1} - bx r1 - thumb_func_end sub_809B324 - - thumb_func_start sub_809B358 -sub_809B358: @ 809B358 - push {lr} - ldr r0, _0809B378 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - movs r1, 0x8E - lsls r1, 5 - adds r0, r1 - ldr r1, [r0] - movs r2, 0x26 - ldrsh r0, [r1, r2] - cmp r0, 0 - beq _0809B37C - ldrh r0, [r1, 0x26] - subs r0, 0x1 - strh r0, [r1, 0x26] - movs r0, 0x1 - b _0809B37E - .align 2, 0 -_0809B378: .4byte gPokemonStorageSystemPtr -_0809B37C: - movs r0, 0 -_0809B37E: - pop {r1} - bx r1 - thumb_func_end sub_809B358 - - thumb_func_start sub_809B384 -sub_809B384: @ 809B384 - push {r4,lr} - ldr r0, _0809B3AC @ =gUnknown_020384E4 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0 - beq _0809B3B4 - cmp r0, 0x1 - bne _0809B3D2 - ldr r4, _0809B3B0 @ =gUnknown_020384E5 - ldrb r1, [r4] - movs r0, 0xE - bl sub_809B44C - ldrb r1, [r4] - movs r0, 0 - bl sub_8099584 - b _0809B3CC - .align 2, 0 -_0809B3AC: .4byte gUnknown_020384E4 -_0809B3B0: .4byte gUnknown_020384E5 -_0809B3B4: - bl get_preferred_box - lsls r0, 24 - lsrs r0, 24 - ldr r4, _0809B3D8 @ =gUnknown_020384E5 - ldrb r1, [r4] - bl sub_809B44C - ldrb r1, [r4] - movs r0, 0x1 - bl sub_8099584 -_0809B3CC: - ldr r1, _0809B3DC @ =gUnknown_020384E6 - movs r0, 0x1 - strb r0, [r1] -_0809B3D2: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809B3D8: .4byte gUnknown_020384E5 -_0809B3DC: .4byte gUnknown_020384E6 - thumb_func_end sub_809B384 - - thumb_func_start sub_809B3E0 -sub_809B3E0: @ 809B3E0 - push {r4,r5,lr} - ldr r0, _0809B408 @ =gUnknown_020384E4 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0 - beq _0809B410 - cmp r0, 0x1 - bne _0809B432 - ldr r4, _0809B40C @ =gUnknown_020384E5 - ldrb r1, [r4] - movs r0, 0xE - bl diegohint2 - ldrb r1, [r4] - movs r0, 0xE - bl sub_809960C - b _0809B42C - .align 2, 0 -_0809B408: .4byte gUnknown_020384E4 -_0809B40C: .4byte gUnknown_020384E5 -_0809B410: - bl get_preferred_box - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r5, _0809B438 @ =gUnknown_020384E5 - ldrb r1, [r5] - adds r0, r4, 0 - bl diegohint2 - ldrb r1, [r5] - adds r0, r4, 0 - bl sub_809960C -_0809B42C: - ldr r1, _0809B43C @ =gUnknown_020384E6 - movs r0, 0 - strb r0, [r1] -_0809B432: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0809B438: .4byte gUnknown_020384E5 -_0809B43C: .4byte gUnknown_020384E6 - thumb_func_end sub_809B3E0 - - thumb_func_start sub_809B440 -sub_809B440: @ 809B440 - push {lr} - bl sub_809BF74 - pop {r0} - bx r0 - thumb_func_end sub_809B440 - - thumb_func_start sub_809B44C -sub_809B44C: @ 809B44C - push {r4,r5,lr} - lsls r0, 24 - lsrs r4, r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - cmp r4, 0xE - bne _0809B488 - ldr r0, _0809B478 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r1, _0809B47C @ =0x000025b4 - adds r0, r1 - ldr r3, _0809B480 @ =gPlayerParty - ldr r1, _0809B484 @ =gUnknown_020384E5 - movs r2, 0 - ldrsb r2, [r1, r2] - movs r1, 0x64 - muls r1, r2 - adds r1, r3 - movs r2, 0x64 - bl memcpy - b _0809B4AA - .align 2, 0 -_0809B478: .4byte gPokemonStorageSystemPtr -_0809B47C: .4byte 0x000025b4 -_0809B480: .4byte gPlayerParty -_0809B484: .4byte gUnknown_020384E5 -_0809B488: - lsls r1, r4, 2 - adds r1, r4 - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 5 - lsls r1, r5, 2 - adds r1, r5 - lsls r1, 4 - ldr r2, _0809B4C0 @ =gPokemonStorage + 0x4 - adds r1, r2 - adds r0, r1 - ldr r1, _0809B4C4 @ =gPokemonStorageSystemPtr - ldr r1, [r1] - ldr r2, _0809B4C8 @ =0x000025b4 - adds r1, r2 - bl sub_803B4B4 -_0809B4AA: - adds r0, r4, 0 - adds r1, r5, 0 - bl sub_809B548 - ldr r0, _0809B4CC @ =gUnknown_020384E7 - strb r4, [r0] - ldr r0, _0809B4D0 @ =gUnknown_020384E8 - strb r5, [r0] - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0809B4C0: .4byte gPokemonStorage + 0x4 -_0809B4C4: .4byte gPokemonStorageSystemPtr -_0809B4C8: .4byte 0x000025b4 -_0809B4CC: .4byte gUnknown_020384E7 -_0809B4D0: .4byte gUnknown_020384E8 - thumb_func_end sub_809B44C - thumb_func_start diegohint2 diegohint2: @ 809B4D4 push {r4-r6,lr} diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index a2b5964d4..eefea4ec8 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -224,6 +224,8 @@ void sub_8099310(void); bool8 sub_8099374(void); void sub_80994A8(s16 a0); void sub_809954C(void); +void sub_8099584(u8 a0, u8 a1); +void sub_809960C(u8 a0, u8 a1); void sub_80996B0(u8 a0, u8 a1); bool8 sub_809971C(void); void sub_8099958(void); diff --git a/src/pokemon/pokemon_storage_system_4.c b/src/pokemon/pokemon_storage_system_4.c index 9e4865910..1127927bf 100644 --- a/src/pokemon/pokemon_storage_system_4.c +++ b/src/pokemon/pokemon_storage_system_4.c @@ -53,6 +53,9 @@ bool8 sub_809B324(void); bool8 sub_809B358(void); void sub_809B384(void); void sub_809B3E0(void); +void sub_809B44C(u8 a0, u8 a1); +void diegohint2(u8 a0, u8 a1); +void sub_809B548(u8 a0, u8 a1); void diegohint1(u8 a0, u8 a1); bool8 sub_809BF2C(void); void sub_809BF74(void); @@ -1481,3 +1484,86 @@ bool8 sub_809B24C(void) } return TRUE; } + +bool8 sub_809B324(void) +{ + switch (gPokemonStorageSystemPtr->unk_11c0->pos2.y) + { + default: + gPokemonStorageSystemPtr->unk_11c0->pos2.y++; + break; + case 0: + gPokemonStorageSystemPtr->unk_11c0->pos2.y++; + break; + case 8: + return FALSE; + } + return TRUE; +} + +bool8 sub_809B358(void) +{ + switch (gPokemonStorageSystemPtr->unk_11c0->pos2.y) + { + case 0: + return FALSE; + default: + gPokemonStorageSystemPtr->unk_11c0->pos2.y--; + break; + } + return TRUE; +} + +void sub_809B384(void) +{ + switch (gUnknown_020384E4) + { + case 1: + sub_809B44C(14, gUnknown_020384E5); + sub_8099584(0, gUnknown_020384E5); + break; + case 0: + sub_809B44C(get_preferred_box(), gUnknown_020384E5); + sub_8099584(1, gUnknown_020384E5); + break; + default: + return; + } + gUnknown_020384E6 = 1; +} + +void sub_809B3E0(void) +{ + u8 boxId; + switch (gUnknown_020384E4) + { + case 1: + diegohint2(14, gUnknown_020384E5); + sub_809960C(14, gUnknown_020384E5); + break; + case 0: + boxId = get_preferred_box(); + diegohint2(boxId, gUnknown_020384E5); + sub_809960C(boxId, gUnknown_020384E5); + break; + default: + return; + } + gUnknown_020384E6 = 0; +} + +void sub_809B440(void) +{ + sub_809BF74(); +} + +void sub_809B44C(u8 a0, u8 a1) +{ + if (a0 == 14) + gPokemonStorageSystemPtr->unk_25b4 = gPlayerParty[gUnknown_020384E5]; + else + sub_803B4B4(gPokemonStorage.boxes[a0], &gPokemonStorageSystemPtr->unk_25b4); + sub_809B548(a0, a1); + gUnknown_020384E7 = a0; + gUnknown_020384E8 = a1; +} -- cgit v1.2.3 From 08a108f432325d6501f3c6473a6d43265af0d5b7 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 15 Jan 2018 17:14:39 -0500 Subject: through diegohint1 --- asm/pokemon_storage_system.s | 168 +-------------------------------- include/pokemon.h | 2 +- include/pokemon_storage_system.h | 3 +- src/field/daycare.c | 2 +- src/pokemon/pokemon_1.c | 2 +- src/pokemon/pokemon_storage_system_4.c | 37 +++++++- src/pokemon/pokemon_summary_screen.c | 2 +- 7 files changed, 43 insertions(+), 173 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 9b37cbe69..e47abfda0 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,172 +5,6 @@ .text - thumb_func_start diegohint2 -diegohint2: @ 809B4D4 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r1, 24 - lsrs r5, r1, 24 - cmp r6, 0xE - bne _0809B508 - ldr r1, _0809B4FC @ =gPlayerParty - movs r0, 0x64 - muls r0, r5 - adds r0, r1 - ldr r1, _0809B500 @ =gPokemonStorageSystemPtr - ldr r1, [r1] - ldr r2, _0809B504 @ =0x000025b4 - adds r1, r2 - movs r2, 0x64 - bl memcpy - b _0809B536 - .align 2, 0 -_0809B4FC: .4byte gPlayerParty -_0809B500: .4byte gPokemonStorageSystemPtr -_0809B504: .4byte 0x000025b4 -_0809B508: - ldr r0, _0809B53C @ =gPokemonStorageSystemPtr - ldr r4, [r0] - ldr r0, _0809B540 @ =0x000025b4 - adds r4, r0 - adds r0, r4, 0 - bl BoxMonRestorePP - ldr r3, _0809B544 @ =gPokemonStorage - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 4 - lsls r2, r6, 2 - adds r2, r6 - lsls r1, r2, 4 - subs r1, r2 - lsls r1, 5 - adds r0, r1 - adds r0, r3 - adds r0, 0x4 - adds r1, r4, 0 - movs r2, 0x50 - bl memcpy -_0809B536: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0809B53C: .4byte gPokemonStorageSystemPtr -_0809B540: .4byte 0x000025b4 -_0809B544: .4byte gPokemonStorage - thumb_func_end diegohint2 - - thumb_func_start sub_809B548 -sub_809B548: @ 809B548 - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, 24 - lsrs r2, r1, 24 - cmp r0, 0xE - bne _0809B568 - movs r0, 0x64 - muls r0, r2 - ldr r1, _0809B564 @ =gPlayerParty - adds r0, r1 - bl ZeroMonData - b _0809B582 - .align 2, 0 -_0809B564: .4byte gPlayerParty -_0809B568: - lsls r1, r0, 2 - adds r1, r0 - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 5 - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 4 - ldr r2, _0809B588 @ =gPokemonStorage + 0x4 - adds r1, r2 - adds r0, r1 - bl ZeroBoxMonData -_0809B582: - pop {r0} - bx r0 - .align 2, 0 -_0809B588: .4byte gPokemonStorage + 0x4 - thumb_func_end sub_809B548 - - thumb_func_start diegohint1 -diegohint1: @ 809B58C - push {r4-r6,lr} - lsls r0, 24 - lsrs r5, r0, 24 - lsls r1, 24 - lsrs r6, r1, 24 - cmp r5, 0xE - bne _0809B5C0 - ldr r0, _0809B5B4 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r1, _0809B5B8 @ =0x00002618 - adds r0, r1 - ldr r2, _0809B5BC @ =gPlayerParty - movs r1, 0x64 - muls r1, r6 - adds r1, r2 - movs r2, 0x64 - bl memcpy - b _0809B5E2 - .align 2, 0 -_0809B5B4: .4byte gPokemonStorageSystemPtr -_0809B5B8: .4byte 0x00002618 -_0809B5BC: .4byte gPlayerParty -_0809B5C0: - lsls r1, r5, 2 - adds r1, r5 - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 5 - lsls r1, r6, 2 - adds r1, r6 - lsls r1, 4 - ldr r2, _0809B614 @ =gPokemonStorage + 0x4 - adds r1, r2 - adds r0, r1 - ldr r1, _0809B618 @ =gPokemonStorageSystemPtr - ldr r1, [r1] - ldr r2, _0809B61C @ =0x00002618 - adds r1, r2 - bl sub_803B4B4 -_0809B5E2: - adds r0, r5, 0 - adds r1, r6, 0 - bl diegohint2 - ldr r0, _0809B618 @ =gPokemonStorageSystemPtr - ldr r1, [r0] - ldr r0, _0809B620 @ =0x000025b4 - adds r4, r1, r0 - ldr r2, _0809B61C @ =0x00002618 - adds r1, r2 - adds r0, r4, 0 - movs r2, 0x64 - bl memcpy - adds r0, r4, 0 - movs r1, 0 - bl sub_809C04C - ldr r0, _0809B624 @ =gUnknown_020384E7 - strb r5, [r0] - ldr r0, _0809B628 @ =gUnknown_020384E8 - strb r6, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0809B614: .4byte gPokemonStorage + 0x4 -_0809B618: .4byte gPokemonStorageSystemPtr -_0809B61C: .4byte 0x00002618 -_0809B620: .4byte 0x000025b4 -_0809B624: .4byte gUnknown_020384E7 -_0809B628: .4byte gUnknown_020384E8 - thumb_func_end diegohint1 - thumb_func_start sub_809B62C sub_809B62C: @ 809B62C push {r4-r6,lr} @@ -474,7 +308,7 @@ _0809B864: ldr r4, [r1] ldr r2, _0809B908 @ =0x00002618 adds r1, r4, r2 - bl sub_803B4B4 + bl ExpandBoxMon ldrb r0, [r5] ldr r1, _0809B90C @ =0x00002682 adds r4, r1 diff --git a/include/pokemon.h b/include/pokemon.h index 8624270f1..47d6bcfc7 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -522,7 +522,7 @@ void sub_803ADE8(struct Pokemon *mon, struct UnknownPokemonStruct *src); void sub_803AF78(struct Pokemon *mon, struct UnknownPokemonStruct *dest); u16 CalculateBoxMonChecksum(struct BoxPokemon *boxMon); void CalculateMonStats(struct Pokemon *mon); -void sub_803B4B4(const struct BoxPokemon *src, struct Pokemon *dest); +void ExpandBoxMon(const struct BoxPokemon *src, struct Pokemon *dest); u8 GetLevelFromMonExp(struct Pokemon *mon); u8 GetLevelFromBoxMonExp(struct BoxPokemon *boxMon); u16 GiveMoveToMon(struct Pokemon *mon, u16 move); diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index eefea4ec8..7960213ae 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -182,7 +182,8 @@ struct PokemonStorageSystemData { struct PokemonMarkMenu unk_12bc; struct UnkPSSStruct_2002370 unk_2370; struct Pokemon unk_25b4; - u8 filler_2618[0x74]; + struct Pokemon unk_2618; + u8 filler_267c[0x10]; u8 unk_268c; u8 unk_268d; u8 unk_268e; diff --git a/src/field/daycare.c b/src/field/daycare.c index 36dd7ec03..2f0c7281e 100644 --- a/src/field/daycare.c +++ b/src/field/daycare.c @@ -205,7 +205,7 @@ static u16 TakeSelectedPokemonFromDaycare(struct DayCare * daycare, u8 slot) GetBoxMonNick(&daycare->mons[slot], gStringVar1); species = GetBoxMonData(&daycare->mons[slot], MON_DATA_SPECIES); - sub_803B4B4(&daycare->mons[slot], &pokemon); + ExpandBoxMon(&daycare->mons[slot], &pokemon); if (GetMonData(&pokemon, MON_DATA_LEVEL) != MAX_LEVEL) { diff --git a/src/pokemon/pokemon_1.c b/src/pokemon/pokemon_1.c index 0242e7444..06a088046 100644 --- a/src/pokemon/pokemon_1.c +++ b/src/pokemon/pokemon_1.c @@ -524,7 +524,7 @@ void CalculateMonStats(struct Pokemon *mon) SetMonData(mon, MON_DATA_HP, ¤tHP); } -void sub_803B4B4(const struct BoxPokemon *src, struct Pokemon *dest) +void ExpandBoxMon(const struct BoxPokemon *src, struct Pokemon *dest) { u32 value = 0; dest->box = *src; diff --git a/src/pokemon/pokemon_storage_system_4.c b/src/pokemon/pokemon_storage_system_4.c index 1127927bf..73d71fa0e 100644 --- a/src/pokemon/pokemon_storage_system_4.c +++ b/src/pokemon/pokemon_storage_system_4.c @@ -60,6 +60,7 @@ void diegohint1(u8 a0, u8 a1); bool8 sub_809BF2C(void); void sub_809BF74(void); void sub_809C028(void); +void sub_809C04C(struct Pokemon *pokemon, u8 a1); void sub_809CC04(void); // .rodata @@ -1562,8 +1563,42 @@ void sub_809B44C(u8 a0, u8 a1) if (a0 == 14) gPokemonStorageSystemPtr->unk_25b4 = gPlayerParty[gUnknown_020384E5]; else - sub_803B4B4(gPokemonStorage.boxes[a0], &gPokemonStorageSystemPtr->unk_25b4); + ExpandBoxMon(gPokemonStorage.boxes[a0] + a1, &gPokemonStorageSystemPtr->unk_25b4); sub_809B548(a0, a1); gUnknown_020384E7 = a0; gUnknown_020384E8 = a1; } + +void diegohint2(u8 a0, u8 a1) +{ + if (a0 == 14) + { + gPlayerParty[a1] = gPokemonStorageSystemPtr->unk_25b4; + } + else + { + BoxMonRestorePP(&gPokemonStorageSystemPtr->unk_25b4.box); + gPokemonStorage.boxes[a0][a1] = gPokemonStorageSystemPtr->unk_25b4.box; + } +} + +void sub_809B548(u8 a0, u8 a1) +{ + if (a0 == 14) + ZeroMonData(gPlayerParty + a1); + else + ZeroBoxMonData(gPokemonStorage.boxes[a0] + a1); +} + +void diegohint1(u8 a0, u8 a1) +{ + if (a0 == 14) + gPokemonStorageSystemPtr->unk_2618 = gPlayerParty[a1]; + else + ExpandBoxMon(gPokemonStorage.boxes[a0] + a1, &gPokemonStorageSystemPtr->unk_2618); + diegohint2(a0, a1); + gPokemonStorageSystemPtr->unk_25b4 = gPokemonStorageSystemPtr->unk_2618; + sub_809C04C(&gPokemonStorageSystemPtr->unk_25b4, 0); + gUnknown_020384E7 = a0; + gUnknown_020384E8 = a1; +} diff --git a/src/pokemon/pokemon_summary_screen.c b/src/pokemon/pokemon_summary_screen.c index ce83ad070..dce65898c 100644 --- a/src/pokemon/pokemon_summary_screen.c +++ b/src/pokemon/pokemon_summary_screen.c @@ -2253,7 +2253,7 @@ static void sub_809F678(struct Pokemon *mon) else { struct BoxPokemon *mons = pssData.monList.boxMons; - sub_803B4B4(&mons[pssData.monIndex], mon); + ExpandBoxMon(&mons[pssData.monIndex], mon); } } -- cgit v1.2.3 From 7b45766d0765d42d7326a7f6cdb21a54d386117e Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 15 Jan 2018 19:32:02 -0500 Subject: through sub_809B7D4 --- asm/pokemon_storage_system.s | 397 --------------------------------- include/pokemon_storage_system.h | 18 +- src/pokemon/pokemon_2.c | 3 +- src/pokemon/pokemon_storage_system_4.c | 119 ++++++++++ 4 files changed, 138 insertions(+), 399 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index e47abfda0..7fa65b32a 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,403 +5,6 @@ .text - thumb_func_start sub_809B62C -sub_809B62C: @ 809B62C - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - adds r0, r6, 0 - bl GetIndexOfFirstEmptySpaceInBoxN - lsls r0, 16 - lsrs r4, r0, 16 - asrs r0, 16 - movs r1, 0x1 - negs r1, r1 - cmp r0, r1 - bne _0809B64A - movs r0, 0 - b _0809B6AC -_0809B64A: - ldr r5, _0809B668 @ =gUnknown_020384E6 - ldrb r0, [r5] - cmp r0, 0 - beq _0809B66C - lsls r4, 24 - lsrs r1, r4, 24 - adds r0, r6, 0 - bl diegohint2 - bl sub_8099480 - movs r0, 0 - strb r0, [r5] - b _0809B686 - .align 2, 0 -_0809B668: .4byte gUnknown_020384E6 -_0809B66C: - ldr r5, _0809B6B4 @ =gUnknown_020384E5 - ldrb r1, [r5] - movs r0, 0xE - bl sub_809B44C - lsls r4, 24 - lsrs r1, r4, 24 - adds r0, r6, 0 - bl diegohint2 - ldrb r0, [r5] - bl sub_8099520 -_0809B686: - bl get_preferred_box - lsls r0, 24 - lsrs r0, 24 - cmp r6, r0 - bne _0809B698 - lsrs r0, r4, 24 - bl sub_8098D20 -_0809B698: - ldr r0, _0809B6B8 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - movs r1, 0x8E - lsls r1, 5 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x1 - bl StartSpriteAnim - movs r0, 0x1 -_0809B6AC: - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0809B6B4: .4byte gUnknown_020384E5 -_0809B6B8: .4byte gPokemonStorageSystemPtr - thumb_func_end sub_809B62C - - thumb_func_start sub_809B6BC -sub_809B6BC: @ 809B6BC - push {lr} - ldr r0, _0809B6D8 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - movs r1, 0x8E - lsls r1, 5 - adds r0, r1 - ldr r0, [r0] - movs r1, 0 - bl StartSpriteAnim - bl sub_809BF74 - pop {r0} - bx r0 - .align 2, 0 -_0809B6D8: .4byte gPokemonStorageSystemPtr - thumb_func_end sub_809B6BC - - thumb_func_start sub_809B6DC -sub_809B6DC: @ 809B6DC - push {lr} - ldr r0, _0809B6EC @ =gUnknown_020384E6 - ldrb r0, [r0] - cmp r0, 0 - beq _0809B6F0 - movs r2, 0x2 - b _0809B700 - .align 2, 0 -_0809B6EC: .4byte gUnknown_020384E6 -_0809B6F0: - ldr r0, _0809B720 @ =gUnknown_020384E4 - movs r1, 0 - ldrsb r1, [r0, r1] - movs r2, 0x1 - eors r1, r2 - negs r0, r1 - orrs r0, r1 - lsrs r2, r0, 31 -_0809B700: - ldr r0, _0809B724 @ =gUnknown_020384E5 - ldrb r1, [r0] - adds r0, r2, 0 - bl sub_809981C - ldr r0, _0809B728 @ =gPokemonStorageSystemPtr - ldr r1, [r0] - ldr r2, _0809B72C @ =0x000026e4 - adds r0, r1, r2 - ldr r2, _0809B730 @ =0x000011fa - adds r1, r2 - bl StringCopy - pop {r0} - bx r0 - .align 2, 0 -_0809B720: .4byte gUnknown_020384E4 -_0809B724: .4byte gUnknown_020384E5 -_0809B728: .4byte gPokemonStorageSystemPtr -_0809B72C: .4byte 0x000026e4 -_0809B730: .4byte 0x000011fa - thumb_func_end sub_809B6DC - - thumb_func_start sub_809B734 -sub_809B734: @ 809B734 - push {lr} - bl sub_80998D8 - lsls r0, 24 - cmp r0, 0 - beq _0809B744 - movs r0, 0x1 - b _0809B758 -_0809B744: - ldr r0, _0809B75C @ =gPokemonStorageSystemPtr - ldr r0, [r0] - movs r1, 0x8E - lsls r1, 5 - adds r0, r1 - ldr r0, [r0] - movs r1, 0 - bl StartSpriteAnim - movs r0, 0 -_0809B758: - pop {r1} - bx r1 - .align 2, 0 -_0809B75C: .4byte gPokemonStorageSystemPtr - thumb_func_end sub_809B734 - - thumb_func_start sub_809B760 -sub_809B760: @ 809B760 - push {lr} - bl sub_8099920 - ldr r1, _0809B774 @ =gUnknown_020384E6 - ldrb r0, [r1] - cmp r0, 0 - beq _0809B778 - movs r0, 0 - strb r0, [r1] - b _0809B79E - .align 2, 0 -_0809B774: .4byte gUnknown_020384E6 -_0809B778: - ldr r0, _0809B788 @ =gUnknown_020384E4 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0x1 - bne _0809B78C - movs r2, 0xE - b _0809B794 - .align 2, 0 -_0809B788: .4byte gUnknown_020384E4 -_0809B78C: - bl get_preferred_box - lsls r0, 24 - lsrs r2, r0, 24 -_0809B794: - ldr r0, _0809B7A8 @ =gUnknown_020384E5 - ldrb r1, [r0] - adds r0, r2, 0 - bl sub_809B548 -_0809B79E: - bl sub_809BF74 - pop {r0} - bx r0 - .align 2, 0 -_0809B7A8: .4byte gUnknown_020384E5 - thumb_func_end sub_809B760 - - thumb_func_start sub_809B7AC -sub_809B7AC: @ 809B7AC - push {lr} - ldr r0, _0809B7CC @ =gUnknown_020384E6 - ldrb r0, [r0] - cmp r0, 0 - beq _0809B7C8 - ldr r0, _0809B7D0 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - movs r1, 0x8E - lsls r1, 5 - adds r0, r1 - ldr r0, [r0] - movs r1, 0x3 - bl StartSpriteAnim -_0809B7C8: - pop {r0} - bx r0 - .align 2, 0 -_0809B7CC: .4byte gUnknown_020384E6 -_0809B7D0: .4byte gPokemonStorageSystemPtr - thumb_func_end sub_809B7AC - - thumb_func_start sub_809B7D4 -sub_809B7D4: @ 809B7D4 - push {r4-r6,lr} - ldr r0, _0809B804 @ =gUnknown_020384E6 - ldrb r0, [r0] - cmp r0, 0 - beq _0809B81C - ldr r0, _0809B808 @ =gPokemonStorageSystemPtr - ldr r4, [r0] - ldr r1, _0809B80C @ =0x00002618 - adds r0, r4, r1 - ldr r2, _0809B810 @ =0x000025b4 - adds r1, r4, r2 - movs r2, 0x64 - bl memcpy - ldr r0, _0809B814 @ =0x00002682 - adds r1, r4, r0 - movs r0, 0xFF - strb r0, [r1] - ldr r1, _0809B818 @ =0x00002683 - adds r4, r1 - movs r0, 0x1 - negs r0, r0 - strb r0, [r4] - b _0809B8A6 - .align 2, 0 -_0809B804: .4byte gUnknown_020384E6 -_0809B808: .4byte gPokemonStorageSystemPtr -_0809B80C: .4byte 0x00002618 -_0809B810: .4byte 0x000025b4 -_0809B814: .4byte 0x00002682 -_0809B818: .4byte 0x00002683 -_0809B81C: - ldr r0, _0809B84C @ =gUnknown_020384E4 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0x1 - bne _0809B864 - ldr r0, _0809B850 @ =gPokemonStorageSystemPtr - ldr r4, [r0] - ldr r2, _0809B854 @ =0x00002618 - adds r0, r4, r2 - ldr r3, _0809B858 @ =gPlayerParty - ldr r1, _0809B85C @ =gUnknown_020384E5 - movs r2, 0 - ldrsb r2, [r1, r2] - movs r1, 0x64 - muls r1, r2 - adds r1, r3 - movs r2, 0x64 - bl memcpy - ldr r0, _0809B860 @ =0x00002682 - adds r4, r0 - movs r0, 0xE - b _0809B896 - .align 2, 0 -_0809B84C: .4byte gUnknown_020384E4 -_0809B850: .4byte gPokemonStorageSystemPtr -_0809B854: .4byte 0x00002618 -_0809B858: .4byte gPlayerParty -_0809B85C: .4byte gUnknown_020384E5 -_0809B860: .4byte 0x00002682 -_0809B864: - ldr r5, _0809B8FC @ =gPokemonStorage - ldrb r0, [r5] - lsls r1, r0, 2 - adds r1, r0 - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 5 - ldr r1, _0809B900 @ =gUnknown_020384E5 - movs r2, 0 - ldrsb r2, [r1, r2] - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 4 - adds r2, r5, 0x4 - adds r1, r2 - adds r0, r1 - ldr r1, _0809B904 @ =gPokemonStorageSystemPtr - ldr r4, [r1] - ldr r2, _0809B908 @ =0x00002618 - adds r1, r4, r2 - bl ExpandBoxMon - ldrb r0, [r5] - ldr r1, _0809B90C @ =0x00002682 - adds r4, r1 -_0809B896: - strb r0, [r4] - ldr r0, _0809B904 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r1, _0809B900 @ =gUnknown_020384E5 - ldrb r1, [r1] - ldr r2, _0809B910 @ =0x00002683 - adds r0, r2 - strb r1, [r0] -_0809B8A6: - ldr r0, _0809B904 @ =gPokemonStorageSystemPtr - ldr r6, [r0] - ldr r0, _0809B914 @ =0x0000267e - adds r4, r6, r0 - movs r0, 0 - strb r0, [r4] - ldr r1, _0809B918 @ =0x0000267f - adds r5, r6, r1 - strb r0, [r5] - ldr r0, _0809B91C @ =0x00002686 - adds r2, r6, r0 - movs r0, 0x39 - strh r0, [r2] - ldr r0, _0809B920 @ =0x00002688 - adds r1, r6, r0 - ldr r0, _0809B924 @ =0x00000123 - strh r0, [r1] - ldr r0, _0809B928 @ =0x0000268a - adds r1, r6, r0 - ldr r0, _0809B92C @ =0x00000163 - strh r0, [r1] - ldr r1, _0809B908 @ =0x00002618 - adds r0, r6, r1 - movs r1, 0x50 - bl GetMonData - lsls r0, 16 - lsrs r1, r0, 16 - movs r2, 0x1 - ands r1, r2 - strb r1, [r4] - lsrs r0, 17 - movs r1, 0x1 - ands r0, r1 - strb r0, [r5] - ldrh r0, [r4] - cmp r0, 0 - beq _0809B934 - ldr r2, _0809B930 @ =0x0000267d - adds r1, r6, r2 - movs r0, 0 - strb r0, [r1] - b _0809B940 - .align 2, 0 -_0809B8FC: .4byte gPokemonStorage -_0809B900: .4byte gUnknown_020384E5 -_0809B904: .4byte gPokemonStorageSystemPtr -_0809B908: .4byte 0x00002618 -_0809B90C: .4byte 0x00002682 -_0809B910: .4byte 0x00002683 -_0809B914: .4byte 0x0000267e -_0809B918: .4byte 0x0000267f -_0809B91C: .4byte 0x00002686 -_0809B920: .4byte 0x00002688 -_0809B924: .4byte 0x00000123 -_0809B928: .4byte 0x0000268a -_0809B92C: .4byte 0x00000163 -_0809B930: .4byte 0x0000267d -_0809B934: - ldr r2, _0809B954 @ =0x0000267d - adds r0, r6, r2 - strb r1, [r0] - subs r2, 0x1 - adds r0, r6, r2 - strb r1, [r0] -_0809B940: - ldr r0, _0809B958 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r1, _0809B95C @ =0x00002684 - adds r0, r1 - movs r1, 0 - strh r1, [r0] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0809B954: .4byte 0x0000267d -_0809B958: .4byte gPokemonStorageSystemPtr -_0809B95C: .4byte 0x00002684 - thumb_func_end sub_809B7D4 - thumb_func_start sub_809B960 sub_809B960: @ 809B960 push {r4-r7,lr} diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index 7960213ae..b0aa8cb47 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -183,7 +183,16 @@ struct PokemonStorageSystemData { struct UnkPSSStruct_2002370 unk_2370; struct Pokemon unk_25b4; struct Pokemon unk_2618; - u8 filler_267c[0x10]; + s8 unk_267c; + u8 unk_267d; + u8 unk_267e; + u8 unk_267f; + u8 unk_2680; + u8 unk_2681; + s8 unk_2682; + s8 unk_2683; + u16 unk_2684; + u16 unk_2686[3]; u8 unk_268c; u8 unk_268d; u8 unk_268e; @@ -206,6 +215,7 @@ extern struct UnkPSSStruct_2002370 *gUnknown_02038478; extern struct PokemonStorageSystemData *const gPokemonStorageSystemPtr; extern u8 *const gUnknown_083B6DB8; +s16 GetIndexOfFirstEmptySpaceInBoxN(u8 boxId); u8 CountPokemonInBoxN(u8 boxId); void sub_8096264(struct UnkPSSStruct_2002370 *a0, u16 tileTag, u16 palTag, u8 a3); void sub_809634C(u8 curBox); @@ -219,16 +229,22 @@ void ResetPSSMonIconSprites(void); void SpawnBoxIconSprites(u8 boxId); u8 get_preferred_box(void); void sub_8098BF0(void); +void sub_8098D20(u8 monId); bool8 sub_80990AC(void); void sub_8099200(bool8 a0); void sub_8099310(void); bool8 sub_8099374(void); +void sub_8099480(void); void sub_80994A8(s16 a0); +void sub_8099520(u8 a0); void sub_809954C(void); void sub_8099584(u8 a0, u8 a1); void sub_809960C(u8 a0, u8 a1); void sub_80996B0(u8 a0, u8 a1); bool8 sub_809971C(void); +void sub_809981C(u8 mode, u8 idx); +bool8 sub_80998D8(void); +void sub_8099920(void); void sub_8099958(void); bool8 sub_8099990(void); struct Sprite *sub_809A9A0(u16 x, u16 y, u8 animId, u8 priority, u8 subpriority); diff --git a/src/pokemon/pokemon_2.c b/src/pokemon/pokemon_2.c index b941ed2ab..7fd1aa7b2 100644 --- a/src/pokemon/pokemon_2.c +++ b/src/pokemon/pokemon_2.c @@ -1,5 +1,6 @@ #include "global.h" #include "constants/hold_effects.h" +#include "constants/moves.h" #include "battle.h" #include "battle_util.h" #include "data2.h" @@ -569,7 +570,7 @@ u32 GetBoxMonData(struct BoxPokemon *boxMon, s32 field, u8 *data) u16 *moves = (u16 *)data; s32 i = 0; - while (moves[i] != 355) + while (moves[i] != NUM_MOVES) { u16 move = moves[i]; if (substruct1->moves[0] == move diff --git a/src/pokemon/pokemon_storage_system_4.c b/src/pokemon/pokemon_storage_system_4.c index 73d71fa0e..a0a6fa145 100644 --- a/src/pokemon/pokemon_storage_system_4.c +++ b/src/pokemon/pokemon_storage_system_4.c @@ -1,8 +1,10 @@ // Includes #include "global.h" +#include "constants/moves.h" #include "constants/species.h" #include "palette.h" +#include "string_util.h" #include "text.h" #include "menu.h" #include "pokemon_storage_system.h" @@ -1602,3 +1604,120 @@ void diegohint1(u8 a0, u8 a1) gUnknown_020384E7 = a0; gUnknown_020384E8 = a1; } + +bool8 sub_809B62C(u8 boxId) +{ + s16 monIdx = GetIndexOfFirstEmptySpaceInBoxN(boxId); + if (monIdx == -1) + return FALSE; + if (gUnknown_020384E6) + { + diegohint2(boxId, monIdx); + sub_8099480(); + gUnknown_020384E6 = 0; + } + else + { + sub_809B44C(14, gUnknown_020384E5); + diegohint2(boxId, monIdx); + sub_8099520(gUnknown_020384E5); + } + if (boxId == get_preferred_box()) + sub_8098D20(monIdx); + StartSpriteAnim(gPokemonStorageSystemPtr->unk_11c0, 1); + return TRUE; +} + +void sub_809B6BC(void) +{ + StartSpriteAnim(gPokemonStorageSystemPtr->unk_11c0, 0); + sub_809BF74(); +} + +void sub_809B6DC(void) +{ + u8 mode; + + if (gUnknown_020384E6) + mode = 2; + else if (gUnknown_020384E4 == 1) + mode = 0; + else + mode = 1; + sub_809981C(mode, gUnknown_020384E5); + StringCopy(gPokemonStorageSystemPtr->unk_26e4, gPokemonStorageSystemPtr->unk_11fa); +} + +bool8 sub_809B734(void) +{ + if (!sub_80998D8()) + { + StartSpriteAnim(gPokemonStorageSystemPtr->unk_11c0, 0); + return FALSE; + } + return TRUE; +} + +void sub_809B760(void) +{ + sub_8099920(); + if (gUnknown_020384E6) + gUnknown_020384E6 = 0; + else + { + u8 boxId; + if (gUnknown_020384E4 == 1) + boxId = 14; + else + boxId = get_preferred_box(); + sub_809B548(boxId, gUnknown_020384E5); + } + sub_809BF74(); +} + +void sub_809B7AC(void) +{ + if (gUnknown_020384E6) + StartSpriteAnim(gPokemonStorageSystemPtr->unk_11c0, 3); +} + +void sub_809B7D4(void) +{ + u16 knownMoves; + if (gUnknown_020384E6) + { + gPokemonStorageSystemPtr->unk_2618 = gPokemonStorageSystemPtr->unk_25b4; + gPokemonStorageSystemPtr->unk_2682 = -1; + gPokemonStorageSystemPtr->unk_2683 = -1; + } + else + { + if (gUnknown_020384E4 == 1) + { + gPokemonStorageSystemPtr->unk_2618 = gPlayerParty[gUnknown_020384E5]; + gPokemonStorageSystemPtr->unk_2682 = 14; + } + else + { + ExpandBoxMon(gPokemonStorage.boxes[gPokemonStorage.currentBox] + gUnknown_020384E5, &gPokemonStorageSystemPtr->unk_2618); + gPokemonStorageSystemPtr->unk_2682 = gPokemonStorage.currentBox; + } + gPokemonStorageSystemPtr->unk_2683 = gUnknown_020384E5; + } + gPokemonStorageSystemPtr->unk_267e = 0; + gPokemonStorageSystemPtr->unk_267f = 0; + gPokemonStorageSystemPtr->unk_2686[0] = MOVE_SURF; + gPokemonStorageSystemPtr->unk_2686[1] = MOVE_DIVE; + gPokemonStorageSystemPtr->unk_2686[2] = NUM_MOVES; + knownMoves = GetMonData(&gPokemonStorageSystemPtr->unk_2618, MON_DATA_KNOWN_MOVES, gPokemonStorageSystemPtr->unk_2686); + gPokemonStorageSystemPtr->unk_267e = knownMoves & 1; + gPokemonStorageSystemPtr->unk_267f = (knownMoves >> 1) & 1; + if (gPokemonStorageSystemPtr->unk_267e || gPokemonStorageSystemPtr->unk_267f) + gPokemonStorageSystemPtr->unk_267d = 0; + else + { + gPokemonStorageSystemPtr->unk_267d = 1; + gPokemonStorageSystemPtr->unk_267c = 1; + } + gPokemonStorageSystemPtr->unk_2684 = 0; +} -- cgit v1.2.3 From 7a2eef97c35e4672bd17bfca86a6ea19d22a3eba Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 15 Jan 2018 20:34:56 -0500 Subject: sub_809B960 --- asm/pokemon_storage_system.s | 277 --------------------------------- include/pokemon_storage_system.h | 6 +- src/pokemon/pokemon_storage_system_4.c | 65 ++++++++ 3 files changed, 68 insertions(+), 280 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 7fa65b32a..d8305b190 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,283 +5,6 @@ .text - thumb_func_start sub_809B960 -sub_809B960: @ 809B960 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r0, _0809B988 @ =gPokemonStorageSystemPtr - ldr r2, [r0] - ldr r3, _0809B98C @ =0x0000267d - adds r1, r2, r3 - ldrb r1, [r1] - mov r12, r0 - cmp r1, 0 - beq _0809B994 - ldr r7, _0809B990 @ =0x0000267c - adds r0, r2, r7 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - b _0809BB5C - .align 2, 0 -_0809B988: .4byte gPokemonStorageSystemPtr -_0809B98C: .4byte 0x0000267d -_0809B990: .4byte 0x0000267c -_0809B994: - ldr r1, _0809B9A4 @ =0x00002684 - adds r0, r2, r1 - ldrh r0, [r0] - cmp r0, 0 - beq _0809B9A8 - cmp r0, 0x1 - beq _0809BA84 - b _0809BB58 - .align 2, 0 -_0809B9A4: .4byte 0x00002684 -_0809B9A8: - movs r5, 0 - movs r6, 0 -_0809B9AC: - mov r2, r12 - ldr r4, [r2] - ldr r3, _0809BA28 @ =0x00002682 - adds r0, r4, r3 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0xE - bne _0809B9CC - ldr r7, _0809BA2C @ =0x00002683 - adds r0, r4, r7 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, r5 - beq _0809BA02 -_0809B9CC: - movs r0, 0x64 - muls r0, r5 - ldr r1, _0809BA30 @ =gPlayerParty - adds r0, r1 - ldr r1, _0809BA34 @ =0x00002686 - adds r2, r4, r1 - movs r1, 0x50 - bl GetMonData - lsls r0, 16 - lsrs r3, r0, 16 - movs r0, 0x1 - ands r0, r3 - cmp r0, 0 - beq _0809B9F0 - ldr r2, _0809BA38 @ =0x0000267e - adds r0, r4, r2 - strb r6, [r0] -_0809B9F0: - movs r0, 0x2 - ands r3, r0 - ldr r7, _0809BA3C @ =gPokemonStorageSystemPtr - mov r12, r7 - cmp r3, 0 - beq _0809BA02 - ldr r1, _0809BA40 @ =0x0000267f - adds r0, r4, r1 - strb r6, [r0] -_0809BA02: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x5 - bls _0809B9AC - mov r3, r12 - ldr r2, [r3] - ldr r7, _0809BA38 @ =0x0000267e - adds r0, r2, r7 - ldrh r0, [r0] - cmp r0, 0 - bne _0809BA4C - ldr r1, _0809BA44 @ =0x0000267d - adds r0, r2, r1 - movs r1, 0x1 - strb r1, [r0] - ldr r3, _0809BA48 @ =0x0000267c - b _0809BB54 - .align 2, 0 -_0809BA28: .4byte 0x00002682 -_0809BA2C: .4byte 0x00002683 -_0809BA30: .4byte gPlayerParty -_0809BA34: .4byte 0x00002686 -_0809BA38: .4byte 0x0000267e -_0809BA3C: .4byte gPokemonStorageSystemPtr -_0809BA40: .4byte 0x0000267f -_0809BA44: .4byte 0x0000267d -_0809BA48: .4byte 0x0000267c -_0809BA4C: - movs r7, 0x9A - lsls r7, 6 - adds r0, r2, r7 - movs r1, 0 - strb r1, [r0] - ldr r3, _0809BA68 @ =0x00002681 - adds r0, r2, r3 - strb r1, [r0] - adds r7, 0x4 - adds r1, r2, r7 - ldrh r0, [r1] - adds r0, 0x1 - strh r0, [r1] - b _0809BB58 - .align 2, 0 -_0809BA68: .4byte 0x00002681 -_0809BA6C: - ldr r1, _0809BA7C @ =0x0000267d - adds r0, r2, r1 - movs r1, 0x1 - strb r1, [r0] - ldr r7, _0809BA80 @ =0x0000267c - adds r0, r2, r7 - strb r3, [r0] - b _0809BB3C - .align 2, 0 -_0809BA7C: .4byte 0x0000267d -_0809BA80: .4byte 0x0000267c -_0809BA84: - movs r5, 0 - mov r9, r12 - adds r4, r2, 0 - movs r0, 0x9A - lsls r0, 6 - adds r6, r4, r0 - ldr r1, _0809BB6C @ =0x0000267f - adds r1, r4 - mov r8, r1 - ldr r2, _0809BB70 @ =0x0000ffff - mov r10, r2 -_0809BA9A: - movs r0, 0 - ldrsb r0, [r6, r0] - lsls r1, r0, 2 - adds r1, r0 - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 5 - ldr r3, _0809BB74 @ =0x00002681 - adds r1, r4, r3 - movs r2, 0 - ldrsb r2, [r1, r2] - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 4 - ldr r2, _0809BB78 @ =gPokemonStorage + 0x4 - adds r1, r2 - adds r0, r1 - movs r1, 0x50 - ldr r7, _0809BB7C @ =0x00002686 - adds r2, r4, r7 - bl GetBoxMonData - lsls r0, 16 - lsrs r3, r0, 16 - cmp r3, 0 - beq _0809BB00 - ldr r1, _0809BB80 @ =0x00002682 - adds r0, r4, r1 - ldrh r0, [r0] - ldrh r2, [r6] - mov r1, r10 - ands r1, r0 - mov r0, r10 - ands r0, r2 - cmp r1, r0 - beq _0809BB00 - movs r0, 0x1 - ands r0, r3 - cmp r0, 0 - beq _0809BAF2 - ldr r2, _0809BB84 @ =0x0000267e - adds r1, r4, r2 - movs r0, 0 - strb r0, [r1] -_0809BAF2: - movs r0, 0x2 - ands r3, r0 - cmp r3, 0 - beq _0809BB00 - movs r0, 0 - mov r3, r8 - strb r0, [r3] -_0809BB00: - mov r7, r9 - ldr r2, [r7] - ldr r0, _0809BB74 @ =0x00002681 - adds r1, r2, r0 - ldrb r0, [r1] - adds r0, 0x1 - movs r3, 0 - strb r0, [r1] - lsls r0, 24 - asrs r0, 24 - ldr r7, _0809BB88 @ =gPokemonStorageSystemPtr - mov r12, r7 - cmp r0, 0x1D - ble _0809BB32 - strb r3, [r1] - movs r0, 0x9A - lsls r0, 6 - adds r1, r2, r0 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0xD - bgt _0809BA6C -_0809BB32: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x4 - bls _0809BA9A -_0809BB3C: - mov r1, r12 - ldr r2, [r1] - ldr r3, _0809BB84 @ =0x0000267e - adds r0, r2, r3 - ldrh r0, [r0] - cmp r0, 0 - bne _0809BB58 - ldr r7, _0809BB8C @ =0x0000267d - adds r0, r2, r7 - movs r1, 0x1 - strb r1, [r0] - subs r3, 0x2 -_0809BB54: - adds r0, r2, r3 - strb r1, [r0] -_0809BB58: - movs r0, 0x1 - negs r0, r0 -_0809BB5C: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0809BB6C: .4byte 0x0000267f -_0809BB70: .4byte 0x0000ffff -_0809BB74: .4byte 0x00002681 -_0809BB78: .4byte gPokemonStorage + 0x4 -_0809BB7C: .4byte 0x00002686 -_0809BB80: .4byte 0x00002682 -_0809BB84: .4byte 0x0000267e -_0809BB88: .4byte gPokemonStorageSystemPtr -_0809BB8C: .4byte 0x0000267d - thumb_func_end sub_809B960 - thumb_func_start sub_809BB90 sub_809BB90: @ 809BB90 push {lr} diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index b0aa8cb47..8e50cc8d0 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -183,12 +183,12 @@ struct PokemonStorageSystemData { struct UnkPSSStruct_2002370 unk_2370; struct Pokemon unk_25b4; struct Pokemon unk_2618; - s8 unk_267c; + u8 unk_267c; u8 unk_267d; u8 unk_267e; u8 unk_267f; - u8 unk_2680; - u8 unk_2681; + s8 unk_2680; + s8 unk_2681; s8 unk_2682; s8 unk_2683; u16 unk_2684; diff --git a/src/pokemon/pokemon_storage_system_4.c b/src/pokemon/pokemon_storage_system_4.c index a0a6fa145..2469d42b1 100644 --- a/src/pokemon/pokemon_storage_system_4.c +++ b/src/pokemon/pokemon_storage_system_4.c @@ -1721,3 +1721,68 @@ void sub_809B7D4(void) } gPokemonStorageSystemPtr->unk_2684 = 0; } + +s8 sub_809B960(void) +{ + u16 i; + u16 knownMoves; + + if (gPokemonStorageSystemPtr->unk_267d) + return gPokemonStorageSystemPtr->unk_267c; + switch (gPokemonStorageSystemPtr->unk_2684) + { + case 0: + for (i = 0; i < PARTY_SIZE; i++) + { + if (gPokemonStorageSystemPtr->unk_2682 != 14 || gPokemonStorageSystemPtr->unk_2683 != i) + { + knownMoves = GetMonData(gPlayerParty + i, MON_DATA_KNOWN_MOVES, gPokemonStorageSystemPtr->unk_2686); + if (knownMoves & 1) + gPokemonStorageSystemPtr->unk_267e = 0; + if (knownMoves & 2) + gPokemonStorageSystemPtr->unk_267f = 0; + } + } + if (gPokemonStorageSystemPtr->unk_267e == 0 && gPokemonStorageSystemPtr->unk_267f == 0) + { + gPokemonStorageSystemPtr->unk_267d = 1; + gPokemonStorageSystemPtr->unk_267c = 1; + } + else + { + gPokemonStorageSystemPtr->unk_2680 = 0; + gPokemonStorageSystemPtr->unk_2681 = 0; + gPokemonStorageSystemPtr->unk_2684++; + } + break; + case 1: + for (i = 0; i < 5; i++) + { + knownMoves = GetBoxMonData(gPokemonStorage.boxes[gPokemonStorageSystemPtr->unk_2680] + gPokemonStorageSystemPtr->unk_2681, MON_DATA_KNOWN_MOVES, gPokemonStorageSystemPtr->unk_2686); + if (knownMoves && (gPokemonStorageSystemPtr->unk_2682 != gPokemonStorageSystemPtr->unk_2680 || gPokemonStorageSystemPtr->unk_2683 != gPokemonStorageSystemPtr->unk_2681)) + { + if (knownMoves & 1) + gPokemonStorageSystemPtr->unk_267e = 0; + if (knownMoves & 2) + gPokemonStorageSystemPtr->unk_267f = 0; + } + if (++gPokemonStorageSystemPtr->unk_2681 >= 30) + { + gPokemonStorageSystemPtr->unk_2681 = 0; + if (++gPokemonStorageSystemPtr->unk_2680 >= 14) + { + gPokemonStorageSystemPtr->unk_267d = 1; + gPokemonStorageSystemPtr->unk_267c = 0; + break; + } + } + } + if (gPokemonStorageSystemPtr->unk_267e == 0 && gPokemonStorageSystemPtr->unk_267f == 0) + { + gPokemonStorageSystemPtr->unk_267d = 1; + gPokemonStorageSystemPtr->unk_267c = 1; + } + break; + } + return -1; +} -- cgit v1.2.3 From 102515325993caef0d57082cd7d8db69335b665b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 15 Jan 2018 21:11:01 -0500 Subject: through party_compaction --- asm/pokemon_storage_system.s | 284 --------------------------------- include/pokemon_storage_system.h | 8 +- src/pokemon/pokemon_storage_system_2.c | 2 +- src/pokemon/pokemon_storage_system_4.c | 75 +++++++++ 4 files changed, 82 insertions(+), 287 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index d8305b190..dc3c9a339 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,290 +5,6 @@ .text - thumb_func_start sub_809BB90 -sub_809BB90: @ 809BB90 - push {lr} - ldr r0, _0809BBB0 @ =gUnknown_020384E6 - ldrb r0, [r0] - cmp r0, 0 - beq _0809BBAA - ldr r0, _0809BBB4 @ =gUnknown_02038480 - ldr r1, _0809BBB8 @ =gPokemonStorageSystemPtr - ldr r1, [r1] - ldr r2, _0809BBBC @ =0x000025b4 - adds r1, r2 - movs r2, 0x64 - bl memcpy -_0809BBAA: - pop {r0} - bx r0 - .align 2, 0 -_0809BBB0: .4byte gUnknown_020384E6 -_0809BBB4: .4byte gUnknown_02038480 -_0809BBB8: .4byte gPokemonStorageSystemPtr -_0809BBBC: .4byte 0x000025b4 - thumb_func_end sub_809BB90 - - thumb_func_start sub_809BBC0 -sub_809BBC0: @ 809BBC0 - push {lr} - ldr r0, _0809BBE4 @ =gUnknown_020384E6 - ldrb r0, [r0] - cmp r0, 0 - beq _0809BC08 - ldr r0, _0809BBE8 @ =gUnknown_020384E7 - ldrb r0, [r0] - cmp r0, 0xE - bne _0809BBF8 - ldr r0, _0809BBEC @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r1, _0809BBF0 @ =0x000025b4 - adds r0, r1 - ldr r1, _0809BBF4 @ =gUnknown_02038480 - movs r2, 0x64 - bl memcpy - b _0809BC08 - .align 2, 0 -_0809BBE4: .4byte gUnknown_020384E6 -_0809BBE8: .4byte gUnknown_020384E7 -_0809BBEC: .4byte gPokemonStorageSystemPtr -_0809BBF0: .4byte 0x000025b4 -_0809BBF4: .4byte gUnknown_02038480 -_0809BBF8: - ldr r0, _0809BC0C @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldr r1, _0809BC10 @ =0x000025b4 - adds r0, r1 - ldr r1, _0809BC14 @ =gUnknown_02038480 - movs r2, 0x50 - bl memcpy -_0809BC08: - pop {r0} - bx r0 - .align 2, 0 -_0809BC0C: .4byte gPokemonStorageSystemPtr -_0809BC10: .4byte 0x000025b4 -_0809BC14: .4byte gUnknown_02038480 - thumb_func_end sub_809BBC0 - - thumb_func_start sub_809BC18 -sub_809BC18: @ 809BC18 - push {r4,r5,lr} - ldr r0, _0809BC48 @ =gUnknown_020384E6 - ldrb r5, [r0] - cmp r5, 0 - beq _0809BC64 - bl sub_809BB90 - ldr r0, _0809BC4C @ =gPokemonStorageSystemPtr - ldr r2, [r0] - ldr r0, _0809BC50 @ =0x00002690 - adds r1, r2, r0 - ldr r0, _0809BC54 @ =gUnknown_02038480 - str r0, [r1] - ldr r1, _0809BC58 @ =0x0000268d - adds r0, r2, r1 - movs r1, 0 - strb r1, [r0] - ldr r3, _0809BC5C @ =0x0000268c - adds r0, r2, r3 - strb r1, [r0] - ldr r0, _0809BC60 @ =0x0000268e - adds r2, r0 - strb r1, [r2] - b _0809BCF2 - .align 2, 0 -_0809BC48: .4byte gUnknown_020384E6 -_0809BC4C: .4byte gPokemonStorageSystemPtr -_0809BC50: .4byte 0x00002690 -_0809BC54: .4byte gUnknown_02038480 -_0809BC58: .4byte 0x0000268d -_0809BC5C: .4byte 0x0000268c -_0809BC60: .4byte 0x0000268e -_0809BC64: - ldr r0, _0809BC9C @ =gUnknown_020384E4 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0x1 - bne _0809BCBC - ldr r0, _0809BCA0 @ =gPokemonStorageSystemPtr - ldr r4, [r0] - ldr r2, _0809BCA4 @ =0x00002690 - adds r1, r4, r2 - ldr r0, _0809BCA8 @ =gPlayerParty - str r0, [r1] - ldr r0, _0809BCAC @ =gUnknown_020384E5 - ldrb r1, [r0] - ldr r3, _0809BCB0 @ =0x0000268d - adds r0, r4, r3 - strb r1, [r0] - bl StorageSystemGetPartySize - subs r0, 0x1 - ldr r2, _0809BCB4 @ =0x0000268c - adds r1, r4, r2 - strb r0, [r1] - ldr r3, _0809BCB8 @ =0x0000268e - adds r4, r3 - strb r5, [r4] - b _0809BCF2 - .align 2, 0 -_0809BC9C: .4byte gUnknown_020384E4 -_0809BCA0: .4byte gPokemonStorageSystemPtr -_0809BCA4: .4byte 0x00002690 -_0809BCA8: .4byte gPlayerParty -_0809BCAC: .4byte gUnknown_020384E5 -_0809BCB0: .4byte 0x0000268d -_0809BCB4: .4byte 0x0000268c -_0809BCB8: .4byte 0x0000268e -_0809BCBC: - ldr r0, _0809BCF8 @ =gPokemonStorageSystemPtr - ldr r3, [r0] - ldr r0, _0809BCFC @ =0x00002690 - adds r4, r3, r0 - ldr r2, _0809BD00 @ =gPokemonStorage - ldrb r0, [r2] - lsls r1, r0, 2 - adds r1, r0 - lsls r0, r1, 4 - subs r0, r1 - lsls r0, 5 - adds r2, 0x4 - adds r0, r2 - str r0, [r4] - ldr r0, _0809BD04 @ =gUnknown_020384E5 - ldrb r1, [r0] - ldr r2, _0809BD08 @ =0x0000268d - adds r0, r3, r2 - strb r1, [r0] - ldr r0, _0809BD0C @ =0x0000268c - adds r1, r3, r0 - movs r0, 0x1D - strb r0, [r1] - ldr r1, _0809BD10 @ =0x0000268e - adds r3, r1 - movs r0, 0x5 - strb r0, [r3] -_0809BCF2: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0809BCF8: .4byte gPokemonStorageSystemPtr -_0809BCFC: .4byte 0x00002690 -_0809BD00: .4byte gPokemonStorage -_0809BD04: .4byte gUnknown_020384E5 -_0809BD08: .4byte 0x0000268d -_0809BD0C: .4byte 0x0000268c -_0809BD10: .4byte 0x0000268e - thumb_func_end sub_809BC18 - - thumb_func_start sub_809BD14 -sub_809BD14: @ 809BD14 - push {lr} - ldr r0, _0809BD24 @ =gUnknown_020384E6 - ldrb r0, [r0] - cmp r0, 0 - beq _0809BD28 - bl sub_809BBC0 - b _0809BD30 - .align 2, 0 -_0809BD24: .4byte gUnknown_020384E6 -_0809BD28: - ldr r0, _0809BD34 @ =gUnknown_020384E5 - ldr r1, _0809BD38 @ =gSharedMem + 0x18000 - ldrb r1, [r1, 0x9] - strb r1, [r0] -_0809BD30: - pop {r0} - bx r0 - .align 2, 0 -_0809BD34: .4byte gUnknown_020384E5 -_0809BD38: .4byte gSharedMem + 0x18000 - thumb_func_end sub_809BD14 - - thumb_func_start party_compaction -party_compaction: @ 809BD3C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r7, _0809BD88 @ =0x0000ffff - movs r6, 0 - movs r5, 0 - movs r0, 0x64 - mov r9, r0 - ldr r1, _0809BD8C @ =gPlayerParty - mov r8, r1 - subs r0, 0x65 - mov r10, r0 -_0809BD58: - mov r0, r9 - muls r0, r6 - mov r1, r8 - adds r4, r0, r1 - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - lsls r0, 16 - cmp r0, 0 - beq _0809BD90 - cmp r6, r5 - beq _0809BD80 - mov r0, r9 - muls r0, r5 - add r0, r8 - adds r1, r4, 0 - movs r2, 0x64 - bl memcpy -_0809BD80: - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - b _0809BD9A - .align 2, 0 -_0809BD88: .4byte 0x0000ffff -_0809BD8C: .4byte gPlayerParty -_0809BD90: - lsls r0, r7, 16 - asrs r0, 16 - cmp r0, r10 - bne _0809BD9A - adds r7, r6, 0 -_0809BD9A: - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - cmp r6, 0x5 - bls _0809BD58 - lsls r7, 16 - cmp r5, 0x5 - bhi _0809BDC2 - movs r6, 0x64 - ldr r4, _0809BDD4 @ =gPlayerParty -_0809BDAE: - adds r0, r5, 0 - muls r0, r6 - adds r0, r4 - bl ZeroMonData - adds r0, r5, 0x1 - lsls r0, 16 - lsrs r5, r0, 16 - cmp r5, 0x5 - bls _0809BDAE -_0809BDC2: - asrs r0, r7, 16 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0809BDD4: .4byte gPlayerParty - thumb_func_end party_compaction - thumb_func_start sub_809BDD8 sub_809BDD8: @ 809BDD8 push {r4,lr} diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index 8e50cc8d0..f8d288ff0 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -196,7 +196,10 @@ struct PokemonStorageSystemData { u8 unk_268c; u8 unk_268d; u8 unk_268e; - struct Pokemon *unk_2690; + union { + struct Pokemon *pokemon; + struct BoxPokemon *box; + } unk_2690; u8 unk_2694[18]; u8 unk_26a6[62]; u8 unk_26e4[0x16]; @@ -215,6 +218,7 @@ extern struct UnkPSSStruct_2002370 *gUnknown_02038478; extern struct PokemonStorageSystemData *const gPokemonStorageSystemPtr; extern u8 *const gUnknown_083B6DB8; +u8 StorageSystemGetPartySize(void); s16 GetIndexOfFirstEmptySpaceInBoxN(u8 boxId); u8 CountPokemonInBoxN(u8 boxId); void sub_8096264(struct UnkPSSStruct_2002370 *a0, u16 tileTag, u16 palTag, u8 a3); @@ -277,7 +281,7 @@ void sub_809BB90(void); void sub_809BBC0(void); void sub_809BC18(void); void sub_809BD14(void); -void party_compaction(void); +s16 party_compaction(void); void sub_809BDD8(u8 markings); bool8 sub_809BE80(void); bool8 sub_809BEBC(void); diff --git a/src/pokemon/pokemon_storage_system_2.c b/src/pokemon/pokemon_storage_system_2.c index 4657ed158..512bde5db 100644 --- a/src/pokemon/pokemon_storage_system_2.c +++ b/src/pokemon/pokemon_storage_system_2.c @@ -343,7 +343,7 @@ void sub_8096B5C(void) switch (gPokemonStorageSystemPtr->unk_0006) { case 0: - ShowPokemonSummaryScreen(gPokemonStorageSystemPtr->unk_2690, gPokemonStorageSystemPtr->unk_268d, gPokemonStorageSystemPtr->unk_268c, sub_80969A0, gPokemonStorageSystemPtr->unk_268e); + ShowPokemonSummaryScreen(gPokemonStorageSystemPtr->unk_2690.pokemon, gPokemonStorageSystemPtr->unk_268d, gPokemonStorageSystemPtr->unk_268c, sub_80969A0, gPokemonStorageSystemPtr->unk_268e); break; case 1: DoNamingScreen(1, gPokemonStorage.boxNames[gPokemonStorage.currentBox], 0, 0, 0, sub_80969A0); diff --git a/src/pokemon/pokemon_storage_system_4.c b/src/pokemon/pokemon_storage_system_4.c index 2469d42b1..40de7d634 100644 --- a/src/pokemon/pokemon_storage_system_4.c +++ b/src/pokemon/pokemon_storage_system_4.c @@ -1,12 +1,14 @@ // Includes #include "global.h" +#include "ewram.h" #include "constants/moves.h" #include "constants/species.h" #include "palette.h" #include "string_util.h" #include "text.h" #include "menu.h" +#include "pokemon_summary_screen.h" #include "pokemon_storage_system.h" // Static type declarations @@ -1786,3 +1788,76 @@ s8 sub_809B960(void) } return -1; } + +void sub_809BB90(void) +{ + if (gUnknown_020384E6) + gUnknown_02038480 = gPokemonStorageSystemPtr->unk_25b4; +} + +void sub_809BBC0(void) +{ + if (gUnknown_020384E6) + { + if (gUnknown_020384E7 == 14) + gPokemonStorageSystemPtr->unk_25b4 = gUnknown_02038480; + else + gPokemonStorageSystemPtr->unk_25b4.box = gUnknown_02038480.box; + } +} + +void sub_809BC18(void) +{ + if (gUnknown_020384E6) + { + sub_809BB90(); + gPokemonStorageSystemPtr->unk_2690.pokemon = &gUnknown_02038480; + gPokemonStorageSystemPtr->unk_268d = 0; + gPokemonStorageSystemPtr->unk_268c = 0; + gPokemonStorageSystemPtr->unk_268e = 0; + } + else if (gUnknown_020384E4 == 1) + { + gPokemonStorageSystemPtr->unk_2690.pokemon = gPlayerParty; + gPokemonStorageSystemPtr->unk_268d = gUnknown_020384E5; + gPokemonStorageSystemPtr->unk_268c = StorageSystemGetPartySize() - 1; + gPokemonStorageSystemPtr->unk_268e = 0; + } + else + { + gPokemonStorageSystemPtr->unk_2690.box = gPokemonStorage.boxes[gPokemonStorage.currentBox]; + gPokemonStorageSystemPtr->unk_268d = gUnknown_020384E5; + gPokemonStorageSystemPtr->unk_268c = 30 - 1; + gPokemonStorageSystemPtr->unk_268e = 5; + } +} + +void sub_809BD14(void) +{ + if (gUnknown_020384E6) + sub_809BBC0(); + else + gUnknown_020384E5 = pssData.monIndex; +} + +s16 party_compaction(void) +{ + s16 retVal = -1; + u16 i; + u16 last; + + for (i = 0, last = 0; i < PARTY_SIZE; i++) + { + if ((u16)GetMonData(gPlayerParty + i, MON_DATA_SPECIES) != SPECIES_NONE) + { + if (i != last) + gPlayerParty[last] = gPlayerParty[i]; + last++; + } + else if (retVal == -1) + retVal = i; + } + for (; last < PARTY_SIZE; last++) + ZeroMonData(gPlayerParty + last); + return retVal; +} -- cgit v1.2.3 From 40d8fee1d0badb81120cad7a5aabfd8f5b0031d8 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 15 Jan 2018 21:59:56 -0500 Subject: through sub_809BF48 --- asm/pokemon_storage_system.s | 216 --------------------------------- include/pokemon_storage_system.h | 1 + src/pokemon/pokemon_storage_system_4.c | 68 +++++++++-- 3 files changed, 60 insertions(+), 225 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index dc3c9a339..e2090bee9 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,222 +5,6 @@ .text - thumb_func_start sub_809BDD8 -sub_809BDD8: @ 809BDD8 - push {r4,lr} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - mov r1, sp - strb r0, [r1] - ldr r1, _0809BE04 @ =gPokemonStorageSystemPtr - ldr r2, [r1] - ldr r3, _0809BE08 @ =0x000011f7 - adds r1, r2, r3 - strb r0, [r1] - ldr r0, _0809BE0C @ =gUnknown_020384E6 - ldrb r0, [r0] - cmp r0, 0 - beq _0809BE14 - ldr r1, _0809BE10 @ =0x000025b4 - adds r0, r2, r1 - movs r1, 0x8 - mov r2, sp - bl SetMonData - b _0809BE68 - .align 2, 0 -_0809BE04: .4byte gPokemonStorageSystemPtr -_0809BE08: .4byte 0x000011f7 -_0809BE0C: .4byte gUnknown_020384E6 -_0809BE10: .4byte 0x000025b4 -_0809BE14: - ldr r4, _0809BE70 @ =gUnknown_020384E4 - movs r0, 0 - ldrsb r0, [r4, r0] - cmp r0, 0x1 - bne _0809BE34 - ldr r0, _0809BE74 @ =gUnknown_020384E5 - movs r1, 0 - ldrsb r1, [r0, r1] - movs r0, 0x64 - muls r0, r1 - ldr r1, _0809BE78 @ =gPlayerParty - adds r0, r1 - movs r1, 0x8 - mov r2, sp - bl SetMonData -_0809BE34: - movs r0, 0 - ldrsb r0, [r4, r0] - cmp r0, 0 - bne _0809BE68 - bl get_preferred_box - 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, _0809BE74 @ =gUnknown_020384E5 - movs r2, 0 - ldrsb r2, [r1, r2] - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 4 - ldr r2, _0809BE7C @ =gPokemonStorage + 0x4 - adds r1, r2 - adds r0, r1 - movs r1, 0x8 - mov r2, sp - bl SetBoxMonData -_0809BE68: - add sp, 0x4 - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809BE70: .4byte gUnknown_020384E4 -_0809BE74: .4byte gUnknown_020384E5 -_0809BE78: .4byte gPlayerParty -_0809BE7C: .4byte gPokemonStorage + 0x4 - thumb_func_end sub_809BDD8 - - thumb_func_start sub_809BE80 -sub_809BE80: @ 809BE80 - push {lr} - ldr r0, _0809BEA8 @ =gUnknown_020384E4 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0x1 - bne _0809BEB4 - ldr r0, _0809BEAC @ =gUnknown_020384E6 - ldrb r0, [r0] - cmp r0, 0 - bne _0809BEB4 - ldr r0, _0809BEB0 @ =gUnknown_020384E5 - ldrb r0, [r0] - bl CountAlivePartyMonsExceptOne - lsls r0, 24 - cmp r0, 0 - bne _0809BEB4 - movs r0, 0x1 - b _0809BEB6 - .align 2, 0 -_0809BEA8: .4byte gUnknown_020384E4 -_0809BEAC: .4byte gUnknown_020384E6 -_0809BEB0: .4byte gUnknown_020384E5 -_0809BEB4: - movs r0, 0 -_0809BEB6: - pop {r1} - bx r1 - thumb_func_end sub_809BE80 - - thumb_func_start sub_809BEBC -sub_809BEBC: @ 809BEBC - push {lr} - ldr r0, _0809BF00 @ =gUnknown_020384E6 - ldrb r0, [r0] - cmp r0, 0 - beq _0809BF18 - ldr r0, _0809BF04 @ =gUnknown_020384E4 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0x1 - bne _0809BEFC - ldr r0, _0809BF08 @ =gUnknown_020384E5 - ldrb r0, [r0] - bl CountAlivePartyMonsExceptOne - lsls r0, 24 - cmp r0, 0 - bne _0809BEFC - ldr r0, _0809BF0C @ =gPokemonStorageSystemPtr - ldr r1, [r0] - ldr r2, _0809BF10 @ =0x000011f9 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, 0 - bne _0809BF18 - ldr r2, _0809BF14 @ =0x000025b4 - adds r0, r1, r2 - movs r1, 0x39 - bl GetMonData - cmp r0, 0 - beq _0809BF18 -_0809BEFC: - movs r0, 0x1 - b _0809BF1A - .align 2, 0 -_0809BF00: .4byte gUnknown_020384E6 -_0809BF04: .4byte gUnknown_020384E4 -_0809BF08: .4byte gUnknown_020384E5 -_0809BF0C: .4byte gPokemonStorageSystemPtr -_0809BF10: .4byte 0x000011f9 -_0809BF14: .4byte 0x000025b4 -_0809BF18: - movs r0, 0 -_0809BF1A: - pop {r1} - bx r1 - thumb_func_end sub_809BEBC - - thumb_func_start sub_809BF20 -sub_809BF20: @ 809BF20 - ldr r0, _0809BF28 @ =gUnknown_020384E6 - ldrb r0, [r0] - bx lr - .align 2, 0 -_0809BF28: .4byte gUnknown_020384E6 - thumb_func_end sub_809BF20 - - thumb_func_start sub_809BF2C -sub_809BF2C: @ 809BF2C - push {lr} - movs r1, 0 - ldr r0, _0809BF44 @ =gUnknown_020384E4 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0x2 - bne _0809BF3E - movs r1, 0x1 -_0809BF3E: - adds r0, r1, 0 - pop {r1} - bx r1 - .align 2, 0 -_0809BF44: .4byte gUnknown_020384E4 - thumb_func_end sub_809BF2C - - thumb_func_start sub_809BF48 -sub_809BF48: @ 809BF48 - push {lr} - movs r1, 0 - ldr r0, _0809BF6C @ =gUnknown_020384E4 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0x3 - bne _0809BF66 - ldr r0, _0809BF70 @ =gUnknown_020384E5 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0x1 - bne _0809BF66 - movs r1, 0x1 -_0809BF66: - adds r0, r1, 0 - pop {r1} - bx r1 - .align 2, 0 -_0809BF6C: .4byte gUnknown_020384E4 -_0809BF70: .4byte gUnknown_020384E5 - thumb_func_end sub_809BF48 - thumb_func_start sub_809BF74 sub_809BF74: @ 809BF74 push {r4,lr} diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index f8d288ff0..8dd51259c 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -220,6 +220,7 @@ extern u8 *const gUnknown_083B6DB8; u8 StorageSystemGetPartySize(void); s16 GetIndexOfFirstEmptySpaceInBoxN(u8 boxId); +u8 CountAlivePartyMonsExceptOne(u8 toSkip); u8 CountPokemonInBoxN(u8 boxId); void sub_8096264(struct UnkPSSStruct_2002370 *a0, u16 tileTag, u16 palTag, u8 a3); void sub_809634C(u8 curBox); diff --git a/src/pokemon/pokemon_storage_system_4.c b/src/pokemon/pokemon_storage_system_4.c index 40de7d634..96e237d4f 100644 --- a/src/pokemon/pokemon_storage_system_4.c +++ b/src/pokemon/pokemon_storage_system_4.c @@ -25,7 +25,7 @@ struct WallpaperTable { EWRAM_DATA struct Pokemon gUnknown_02038480 = {}; EWRAM_DATA s8 gUnknown_020384E4 = 0; EWRAM_DATA s8 gUnknown_020384E5 = 0; -EWRAM_DATA u8 gUnknown_020384E6 = 0; +EWRAM_DATA bool8 gUnknown_020384E6 = FALSE; EWRAM_DATA u8 gUnknown_020384E7 = 0; EWRAM_DATA u8 gUnknown_020384E8 = 0; EWRAM_DATA u8 gUnknown_020384E9 = 0; @@ -1141,7 +1141,7 @@ void sub_809AA24(void) else gUnknown_020384E4 = 1; gUnknown_020384E5 = 0; - gUnknown_020384E6 = 0; + gUnknown_020384E6 = FALSE; gUnknown_020384E7 = 0; gUnknown_020384E8 = 0; gUnknown_020384E9 = 0; @@ -1315,7 +1315,7 @@ void sub_809AF18(u8 a0, u8 a1) { sub_809AD3C(a0, a1); sub_809AD94(); - if (gUnknown_020384E6 == 0) + if (!gUnknown_020384E6) StartSpriteAnim(gPokemonStorageSystemPtr->unk_11c0, 1); if (a0 == 1 && gUnknown_020384E4 != 1) { @@ -1337,7 +1337,7 @@ void sub_809AFB8(void) { gUnknown_020384E4 = gPokemonStorageSystemPtr->unk_11e0; gUnknown_020384E5 = gPokemonStorageSystemPtr->unk_11e1; - if (gUnknown_020384E6 == 0) + if (!gUnknown_020384E6) StartSpriteAnim(gPokemonStorageSystemPtr->unk_11c0, 0); sub_809BF74(); switch (gUnknown_020384E4) @@ -1359,7 +1359,7 @@ void sub_809AFB8(void) void sub_809B068(void) { u8 partyCount; - if (gUnknown_020384E6 == 0) + if (!gUnknown_020384E6) partyCount = 0; else { @@ -1534,7 +1534,7 @@ void sub_809B384(void) default: return; } - gUnknown_020384E6 = 1; + gUnknown_020384E6 = TRUE; } void sub_809B3E0(void) @@ -1554,7 +1554,7 @@ void sub_809B3E0(void) default: return; } - gUnknown_020384E6 = 0; + gUnknown_020384E6 = FALSE; } void sub_809B440(void) @@ -1616,7 +1616,7 @@ bool8 sub_809B62C(u8 boxId) { diegohint2(boxId, monIdx); sub_8099480(); - gUnknown_020384E6 = 0; + gUnknown_020384E6 = FALSE; } else { @@ -1664,7 +1664,7 @@ void sub_809B760(void) { sub_8099920(); if (gUnknown_020384E6) - gUnknown_020384E6 = 0; + gUnknown_020384E6 = FALSE; else { u8 boxId; @@ -1861,3 +1861,53 @@ s16 party_compaction(void) ZeroMonData(gPlayerParty + last); return retVal; } + +void sub_809BDD8(u8 markings) +{ + gPokemonStorageSystemPtr->unk_11f7 = markings; + if (gUnknown_020384E6) + SetMonData(&gPokemonStorageSystemPtr->unk_25b4, MON_DATA_MARKINGS, &markings); + else + { + if (gUnknown_020384E4 == 1) + SetMonData(gPlayerParty + gUnknown_020384E5, MON_DATA_MARKINGS, &markings); + if (gUnknown_020384E4 == 0) + SetBoxMonData(gPokemonStorage.boxes[get_preferred_box()] + gUnknown_020384E5, MON_DATA_MARKINGS, &markings); + } +} + +bool8 sub_809BE80(void) +{ + if (gUnknown_020384E4 == 1 && !gUnknown_020384E6 && CountAlivePartyMonsExceptOne(gUnknown_020384E5) == 0) + return TRUE; + return FALSE; +} + +bool8 sub_809BEBC(void) +{ + if (gUnknown_020384E6) + { + if (gUnknown_020384E4 == 1 && CountAlivePartyMonsExceptOne(gUnknown_020384E5) == 0) + { + if (gPokemonStorageSystemPtr->unk_11f9 || GetMonData(&gPokemonStorageSystemPtr->unk_25b4, MON_DATA_HP) == 0) + return FALSE; + } + return TRUE; + } + return FALSE; +} + +bool8 sub_809BF20(void) +{ + return gUnknown_020384E6; +} + +bool8 sub_809BF2C(void) +{ + return gUnknown_020384E4 == 2 ? TRUE : FALSE; +} + +bool8 sub_809BF48(void) +{ + return (gUnknown_020384E4 == 3 && gUnknown_020384E5 == 1) ? TRUE : FALSE; +} -- cgit v1.2.3 From 470c09225f4c058831c2226195af413204f5f03c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 15 Jan 2018 22:08:46 -0500 Subject: through sub_809C028 --- asm/pokemon_storage_system.s | 110 --------------------------------- src/pokemon/pokemon_storage_system_4.c | 37 ++++++++++- 2 files changed, 35 insertions(+), 112 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index e2090bee9..854190e40 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,116 +5,6 @@ .text - thumb_func_start sub_809BF74 -sub_809BF74: @ 809BF74 - push {r4,lr} - ldr r0, _0809BFA8 @ =gPokemonStorageSystemPtr - ldr r1, [r0] - movs r2, 0 - ldr r3, _0809BFAC @ =gUnknown_020384E6 - ldrb r0, [r3] - cmp r0, 0 - bne _0809BF86 - movs r2, 0x1 -_0809BF86: - ldr r4, _0809BFB0 @ =0x000011f6 - adds r0, r1, r4 - strb r2, [r0] - ldrb r0, [r3] - cmp r0, 0 - bne _0809C018 - ldr r0, _0809BFB4 @ =gUnknown_020384E4 - ldrb r0, [r0] - lsls r0, 24 - asrs r0, 24 - cmp r0, 0x1 - beq _0809BFBE - cmp r0, 0x1 - bgt _0809BFB8 - cmp r0, 0 - beq _0809BFEE - b _0809C018 - .align 2, 0 -_0809BFA8: .4byte gPokemonStorageSystemPtr -_0809BFAC: .4byte gUnknown_020384E6 -_0809BFB0: .4byte 0x000011f6 -_0809BFB4: .4byte gUnknown_020384E4 -_0809BFB8: - cmp r0, 0x3 - bgt _0809C018 - b _0809BFE4 -_0809BFBE: - ldr r1, _0809BFDC @ =gUnknown_020384E5 - movs r0, 0 - ldrsb r0, [r1, r0] - cmp r0, 0x5 - bgt _0809BFE4 - adds r1, r0, 0 - movs r0, 0x64 - muls r0, r1 - ldr r1, _0809BFE0 @ =gPlayerParty - adds r0, r1 - movs r1, 0 - bl sub_809C04C - b _0809C018 - .align 2, 0 -_0809BFDC: .4byte gUnknown_020384E5 -_0809BFE0: .4byte gPlayerParty -_0809BFE4: - movs r0, 0 - movs r1, 0x2 - bl sub_809C04C - b _0809C018 -_0809BFEE: - bl get_preferred_box - 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, _0809C020 @ =gUnknown_020384E5 - movs r2, 0 - ldrsb r2, [r1, r2] - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 4 - ldr r2, _0809C024 @ =gPokemonStorage + 0x4 - adds r1, r2 - adds r0, r1 - movs r1, 0x1 - bl sub_809C04C -_0809C018: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0809C020: .4byte gUnknown_020384E5 -_0809C024: .4byte gPokemonStorage + 0x4 - thumb_func_end sub_809BF74 - - thumb_func_start sub_809C028 -sub_809C028: @ 809C028 - push {lr} - ldr r0, _0809C03C @ =gUnknown_020384E6 - ldrb r0, [r0] - cmp r0, 0 - beq _0809C044 - ldr r0, _0809C040 @ =gUnknown_02038480 - movs r1, 0 - bl sub_809C04C - b _0809C048 - .align 2, 0 -_0809C03C: .4byte gUnknown_020384E6 -_0809C040: .4byte gUnknown_02038480 -_0809C044: - bl sub_809BF74 -_0809C048: - pop {r0} - bx r0 - thumb_func_end sub_809C028 - thumb_func_start sub_809C04C sub_809C04C: @ 809C04C push {r4-r7,lr} diff --git a/src/pokemon/pokemon_storage_system_4.c b/src/pokemon/pokemon_storage_system_4.c index 96e237d4f..ada4b43bd 100644 --- a/src/pokemon/pokemon_storage_system_4.c +++ b/src/pokemon/pokemon_storage_system_4.c @@ -64,7 +64,7 @@ void diegohint1(u8 a0, u8 a1); bool8 sub_809BF2C(void); void sub_809BF74(void); void sub_809C028(void); -void sub_809C04C(struct Pokemon *pokemon, u8 a1); +void sub_809C04C(struct BoxPokemon *pokemon, u8 a1); void sub_809CC04(void); // .rodata @@ -1602,7 +1602,7 @@ void diegohint1(u8 a0, u8 a1) ExpandBoxMon(gPokemonStorage.boxes[a0] + a1, &gPokemonStorageSystemPtr->unk_2618); diegohint2(a0, a1); gPokemonStorageSystemPtr->unk_25b4 = gPokemonStorageSystemPtr->unk_2618; - sub_809C04C(&gPokemonStorageSystemPtr->unk_25b4, 0); + sub_809C04C(&gPokemonStorageSystemPtr->unk_25b4.box, 0); gUnknown_020384E7 = a0; gUnknown_020384E8 = a1; } @@ -1911,3 +1911,36 @@ bool8 sub_809BF48(void) { return (gUnknown_020384E4 == 3 && gUnknown_020384E5 == 1) ? TRUE : FALSE; } + +void sub_809BF74(void) +{ + gPokemonStorageSystemPtr->unk_11f6 = gUnknown_020384E6 ? 0 : 1; + if (!gUnknown_020384E6) + { + switch (gUnknown_020384E4) + { + case 1: + if (gUnknown_020384E5 < PARTY_SIZE) + { + sub_809C04C(&gPlayerParty[gUnknown_020384E5].box, 0); + break; + } + // fallthrough + case 2: + case 3: + sub_809C04C(NULL, 2); + break; + case 0: + sub_809C04C(gPokemonStorage.boxes[get_preferred_box()] + gUnknown_020384E5, 1); + break; + } + } +} + +void sub_809C028(void) +{ + if (gUnknown_020384E6) + sub_809C04C(&gUnknown_02038480.box, 0); + else + sub_809BF74(); +} -- cgit v1.2.3 From c4bae7a571f5aea6785e108089e904f9dad67701 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 15 Jan 2018 22:45:08 -0500 Subject: sub_809C04C --- asm/pokemon_storage_system.s | 472 --------------------------------- include/pokemon_storage_system.h | 2 +- src/pokemon/pokemon_storage_system_4.c | 163 +++++++++++- 3 files changed, 161 insertions(+), 476 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 854190e40..eb4a9650e 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,478 +5,6 @@ .text - thumb_func_start sub_809C04C -sub_809C04C: @ 809C04C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x4 - adds r7, r0, 0 - lsls r1, 24 - lsrs r1, 24 - movs r0, 0 - str r0, [sp] - ldr r0, _0809C0FC @ =gPokemonStorageSystemPtr - ldr r6, [r0] - ldr r2, _0809C100 @ =0x000011f2 - adds r2, r6 - mov r8, r2 - mov r0, sp - ldrh r0, [r0] - strh r0, [r2] - cmp r1, 0 - bne _0809C120 - adds r0, r7, 0 - movs r1, 0x41 - bl GetMonData - ldr r2, _0809C104 @ =0x000011f0 - adds r1, r6, r2 - strh r0, [r1] - lsls r0, 16 - cmp r0, 0 - bne _0809C08C - b _0809C1EC -_0809C08C: - adds r0, r7, 0 - movs r1, 0x2D - bl GetMonData - ldr r2, _0809C108 @ =0x000011f9 - adds r1, r6, r2 - strb r0, [r1] - ldr r0, _0809C10C @ =0x000011fa - adds r4, r6, r0 - adds r0, r7, 0 - movs r1, 0x2 - adds r2, r4, 0 - bl GetMonData - adds r0, r4, 0 - bl StringGetEnd10 - adds r0, r7, 0 - movs r1, 0x38 - bl GetMonData - ldr r2, _0809C110 @ =0x000011f8 - adds r1, r6, r2 - strb r0, [r1] - adds r0, r7, 0 - movs r1, 0x8 - bl GetMonData - ldr r2, _0809C114 @ =0x000011f7 - adds r1, r6, r2 - strb r0, [r1] - adds r0, r7, 0 - movs r1, 0 - bl GetMonData - ldr r2, _0809C118 @ =0x000011ec - adds r1, r6, r2 - str r0, [r1] - adds r0, r7, 0 - bl GetMonSpritePal - ldr r2, _0809C11C @ =0x000011e8 - adds r1, r6, r2 - str r0, [r1] - adds r0, r7, 0 - bl GetMonGender - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] - adds r0, r7, 0 - movs r1, 0xC - bl GetMonData - b _0809C1B2 - .align 2, 0 -_0809C0FC: .4byte gPokemonStorageSystemPtr -_0809C100: .4byte 0x000011f2 -_0809C104: .4byte 0x000011f0 -_0809C108: .4byte 0x000011f9 -_0809C10C: .4byte 0x000011fa -_0809C110: .4byte 0x000011f8 -_0809C114: .4byte 0x000011f7 -_0809C118: .4byte 0x000011ec -_0809C11C: .4byte 0x000011e8 -_0809C120: - cmp r1, 0x1 - bne _0809C1D4 - adds r0, r7, 0 - movs r1, 0x41 - bl GetBoxMonData - ldr r2, _0809C1B8 @ =0x000011f0 - adds r5, r6, r2 - strh r0, [r5] - lsls r0, 16 - cmp r0, 0 - beq _0809C1EC - adds r0, r7, 0 - movs r1, 0x1 - bl GetBoxMonData - mov r9, r0 - adds r0, r7, 0 - movs r1, 0x2D - bl GetBoxMonData - ldr r2, _0809C1BC @ =0x000011f9 - adds r1, r6, r2 - strb r0, [r1] - ldr r0, _0809C1C0 @ =0x000011fa - adds r4, r6, r0 - adds r0, r7, 0 - movs r1, 0x2 - adds r2, r4, 0 - bl GetBoxMonData - adds r0, r4, 0 - bl StringGetEnd10 - adds r0, r7, 0 - bl GetLevelFromBoxMonExp - ldr r2, _0809C1C4 @ =0x000011f8 - adds r1, r6, r2 - strb r0, [r1] - adds r0, r7, 0 - movs r1, 0x8 - bl GetBoxMonData - ldr r2, _0809C1C8 @ =0x000011f7 - adds r1, r6, r2 - strb r0, [r1] - adds r0, r7, 0 - movs r1, 0 - bl GetBoxMonData - adds r2, r0, 0 - ldr r0, _0809C1CC @ =0x000011ec - adds r4, r6, r0 - str r2, [r4] - ldrh r0, [r5] - mov r1, r9 - bl GetMonSpritePalFromOtIdPersonality - ldr r2, _0809C1D0 @ =0x000011e8 - adds r1, r6, r2 - str r0, [r1] - ldrh r0, [r5] - ldr r1, [r4] - bl GetGenderFromSpeciesAndPersonality - lsls r0, 24 - lsrs r0, 24 - str r0, [sp] - adds r0, r7, 0 - movs r1, 0xC - bl GetBoxMonData -_0809C1B2: - mov r1, r8 - strh r0, [r1] - b _0809C1DE - .align 2, 0 -_0809C1B8: .4byte 0x000011f0 -_0809C1BC: .4byte 0x000011f9 -_0809C1C0: .4byte 0x000011fa -_0809C1C4: .4byte 0x000011f8 -_0809C1C8: .4byte 0x000011f7 -_0809C1CC: .4byte 0x000011ec -_0809C1D0: .4byte 0x000011e8 -_0809C1D4: - ldr r2, _0809C220 @ =0x000011f0 - adds r0, r6, r2 - mov r1, sp - ldrh r1, [r1] - strh r1, [r0] -_0809C1DE: - ldr r0, _0809C224 @ =gPokemonStorageSystemPtr - ldr r4, [r0] - ldr r2, _0809C220 @ =0x000011f0 - adds r0, r4, r2 - ldrh r1, [r0] - cmp r1, 0 - bne _0809C23C -_0809C1EC: - ldr r0, _0809C224 @ =gPokemonStorageSystemPtr - ldr r1, [r0] - ldr r0, _0809C228 @ =0x000011fa - adds r2, r1, r0 - movs r0, 0xFF - strb r0, [r2] - ldr r0, _0809C22C @ =0x0000120f - adds r2, r1, r0 - movs r0, 0x1 - negs r0, r0 - strb r0, [r2] - ldr r0, _0809C230 @ =0x00001234 - adds r2, r1, r0 - movs r0, 0x1 - negs r0, r0 - strb r0, [r2] - ldr r0, _0809C234 @ =0x00001259 - adds r2, r1, r0 - movs r0, 0x1 - negs r0, r0 - strb r0, [r2] - ldr r2, _0809C238 @ =0x0000127a - adds r1, r2 - strb r0, [r1] - b _0809C43E - .align 2, 0 -_0809C220: .4byte 0x000011f0 -_0809C224: .4byte gPokemonStorageSystemPtr -_0809C228: .4byte 0x000011fa -_0809C22C: .4byte 0x0000120f -_0809C230: .4byte 0x00001234 -_0809C234: .4byte 0x00001259 -_0809C238: .4byte 0x0000127a -_0809C23C: - ldr r2, _0809C28C @ =0x000011f9 - adds r0, r4, r2 - ldrb r0, [r0] - cmp r0, 0 - beq _0809C2A4 - ldr r0, _0809C290 @ =0x0000120f - adds r7, r4, r0 - movs r0, 0xFC - strb r0, [r7] - movs r0, 0x4 - strb r0, [r7, 0x1] - movs r0, 0xF - strb r0, [r7, 0x2] - movs r0, 0 - strb r0, [r7, 0x3] - movs r0, 0x1 - strb r0, [r7, 0x4] - ldr r1, _0809C294 @ =0x00001214 - adds r7, r4, r1 - adds r2, 0x1 - adds r1, r4, r2 - adds r0, r7, 0 - bl StringCopy - ldr r0, _0809C298 @ =0x00001234 - adds r1, r4, r0 - movs r0, 0xFF - strb r0, [r1] - ldr r2, _0809C29C @ =0x00001259 - adds r1, r4, r2 - movs r0, 0x1 - negs r0, r0 - strb r0, [r1] - ldr r0, _0809C2A0 @ =0x0000127a - adds r1, r4, r0 - movs r0, 0x1 - negs r0, r0 - strb r0, [r1] - b _0809C43E - .align 2, 0 -_0809C28C: .4byte 0x000011f9 -_0809C290: .4byte 0x0000120f -_0809C294: .4byte 0x00001214 -_0809C298: .4byte 0x00001234 -_0809C29C: .4byte 0x00001259 -_0809C2A0: .4byte 0x0000127a -_0809C2A4: - cmp r1, 0x20 - beq _0809C2AC - cmp r1, 0x1D - bne _0809C2B0 -_0809C2AC: - movs r1, 0xFF - str r1, [sp] -_0809C2B0: - ldr r0, _0809C388 @ =gPokemonStorageSystemPtr - ldr r4, [r0] - ldr r2, _0809C38C @ =0x0000120f - adds r7, r4, r2 - movs r0, 0xFC - mov r9, r0 - strb r0, [r7] - movs r1, 0x4 - mov r8, r1 - strb r1, [r7, 0x1] - movs r2, 0xF - strb r2, [r7, 0x2] - movs r0, 0 - strb r0, [r7, 0x3] - movs r6, 0x1 - strb r6, [r7, 0x4] - ldr r1, _0809C390 @ =0x00001214 - adds r7, r4, r1 - ldr r2, _0809C394 @ =0x000011fa - adds r1, r4, r2 - adds r0, r7, 0 - bl StringCopy - ldr r0, _0809C398 @ =0x00001234 - adds r7, r4, r0 - mov r1, r9 - strb r1, [r7] - mov r2, r8 - strb r2, [r7, 0x1] - movs r0, 0xF - strb r0, [r7, 0x2] - movs r1, 0 - strb r1, [r7, 0x3] - strb r6, [r7, 0x4] - mov r2, r9 - strb r2, [r7, 0x5] - movs r0, 0x13 - mov r10, r0 - strb r0, [r7, 0x6] - movs r1, 0x7 - strb r1, [r7, 0x7] - movs r0, 0xBA - strb r0, [r7, 0x8] - ldr r2, _0809C39C @ =0x0000123d - adds r7, r4, r2 - ldr r1, _0809C3A0 @ =0x000011f0 - adds r0, r4, r1 - ldrh r1, [r0] - movs r0, 0xB - muls r1, r0 - ldr r0, _0809C3A4 @ =gSpeciesNames - adds r1, r0 - adds r0, r7, 0 - bl StringCopy - adds r7, r0, 0 - mov r2, r9 - strb r2, [r7] - mov r0, r10 - strb r0, [r7, 0x1] - movs r0, 0x50 - strb r0, [r7, 0x2] - movs r0, 0xFF - strb r0, [r7, 0x3] - ldr r1, _0809C3A8 @ =0x00001259 - adds r7, r4, r1 - strb r2, [r7] - mov r2, r8 - strb r2, [r7, 0x1] - movs r0, 0xF - strb r0, [r7, 0x2] - movs r1, 0 - strb r1, [r7, 0x3] - strb r6, [r7, 0x4] - mov r2, r9 - strb r2, [r7, 0x5] - mov r0, r10 - strb r0, [r7, 0x6] - movs r6, 0x8 - strb r6, [r7, 0x7] - ldr r1, _0809C3AC @ =0x00001261 - adds r7, r4, r1 - movs r0, 0x34 - strb r0, [r7] - ldr r2, _0809C3B0 @ =0x00001262 - adds r7, r4, r2 - ldr r0, _0809C3B4 @ =0x000011f8 - adds r4, r0 - ldrb r1, [r4] - adds r0, r7, 0 - movs r2, 0x22 - movs r3, 0x1 - bl sub_8072C14 - adds r7, r0, 0 - mov r1, r9 - strb r1, [r7] - movs r0, 0x11 - strb r0, [r7, 0x1] - strb r6, [r7, 0x2] - adds r7, 0x3 - ldr r2, [sp] - cmp r2, 0 - beq _0809C3B8 - cmp r2, 0xFE - beq _0809C3D0 - b _0809C3EA - .align 2, 0 -_0809C388: .4byte gPokemonStorageSystemPtr -_0809C38C: .4byte 0x0000120f -_0809C390: .4byte 0x00001214 -_0809C394: .4byte 0x000011fa -_0809C398: .4byte 0x00001234 -_0809C39C: .4byte 0x0000123d -_0809C3A0: .4byte 0x000011f0 -_0809C3A4: .4byte gSpeciesNames -_0809C3A8: .4byte 0x00001259 -_0809C3AC: .4byte 0x00001261 -_0809C3B0: .4byte 0x00001262 -_0809C3B4: .4byte 0x000011f8 -_0809C3B8: - mov r0, r9 - strb r0, [r7] - mov r1, r8 - strb r1, [r7, 0x1] - strb r1, [r7, 0x2] - mov r2, sp - ldrb r2, [r2] - strb r2, [r7, 0x3] - movs r0, 0x5 - strb r0, [r7, 0x4] - movs r0, 0xB5 - b _0809C3E6 -_0809C3D0: - mov r0, r9 - strb r0, [r7] - mov r1, r8 - strb r1, [r7, 0x1] - movs r0, 0x6 - strb r0, [r7, 0x2] - movs r2, 0 - strb r2, [r7, 0x3] - movs r0, 0x7 - strb r0, [r7, 0x4] - movs r0, 0xB6 -_0809C3E6: - strb r0, [r7, 0x5] - adds r7, 0x6 -_0809C3EA: - movs r5, 0xFF - strb r5, [r7] - ldr r0, _0809C450 @ =gPokemonStorageSystemPtr - ldr r2, [r0] - ldr r1, _0809C454 @ =0x0000127a - adds r7, r2, r1 - ldr r0, _0809C458 @ =0x000011f2 - adds r3, r2, r0 - ldrh r0, [r3] - cmp r0, 0 - beq _0809C43C - movs r4, 0xFC - strb r4, [r7] - movs r1, 0x4 - strb r1, [r7, 0x1] - movs r0, 0xF - strb r0, [r7, 0x2] - movs r0, 0 - strb r0, [r7, 0x3] - movs r0, 0x1 - strb r0, [r7, 0x4] - ldr r0, _0809C45C @ =0x0000127f - adds r7, r2, r0 - strb r4, [r7] - movs r0, 0x6 - strb r0, [r7, 0x1] - strb r1, [r7, 0x2] - ldr r1, _0809C460 @ =0x00001282 - adds r7, r2, r1 - ldrh r0, [r3] - bl ItemId_GetItem - adds r1, r0, 0 - adds r0, r7, 0 - bl StringCopy - adds r7, r0, 0 - strb r4, [r7] - movs r0, 0x7 - strb r0, [r7, 0x1] - adds r7, 0x2 -_0809C43C: - strb r5, [r7] -_0809C43E: - add sp, 0x4 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0809C450: .4byte gPokemonStorageSystemPtr -_0809C454: .4byte 0x0000127a -_0809C458: .4byte 0x000011f2 -_0809C45C: .4byte 0x0000127f -_0809C460: .4byte 0x00001282 - thumb_func_end sub_809C04C - thumb_func_start sub_809C464 sub_809C464: @ 809C464 push {r4-r7,lr} diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h index 8dd51259c..5319b7a2d 100644 --- a/include/pokemon_storage_system.h +++ b/include/pokemon_storage_system.h @@ -159,7 +159,7 @@ struct PokemonStorageSystemData { u8 unk_11e2; u8 unk_11e3; u8 filler_11e4[4]; - u8 *unk_11e8; + const u8 *unk_11e8; u32 unk_11ec; u16 unk_11f0; u16 unk_11f2; diff --git a/src/pokemon/pokemon_storage_system_4.c b/src/pokemon/pokemon_storage_system_4.c index ada4b43bd..eb5a6cb0b 100644 --- a/src/pokemon/pokemon_storage_system_4.c +++ b/src/pokemon/pokemon_storage_system_4.c @@ -2,12 +2,14 @@ // Includes #include "global.h" #include "ewram.h" +#include "data2.h" #include "constants/moves.h" #include "constants/species.h" #include "palette.h" #include "string_util.h" #include "text.h" #include "menu.h" +#include "item.h" #include "pokemon_summary_screen.h" #include "pokemon_storage_system.h" @@ -64,7 +66,7 @@ void diegohint1(u8 a0, u8 a1); bool8 sub_809BF2C(void); void sub_809BF74(void); void sub_809C028(void); -void sub_809C04C(struct BoxPokemon *pokemon, u8 a1); +void sub_809C04C(void *pokemon, u8 a1); void sub_809CC04(void); // .rodata @@ -1602,7 +1604,7 @@ void diegohint1(u8 a0, u8 a1) ExpandBoxMon(gPokemonStorage.boxes[a0] + a1, &gPokemonStorageSystemPtr->unk_2618); diegohint2(a0, a1); gPokemonStorageSystemPtr->unk_25b4 = gPokemonStorageSystemPtr->unk_2618; - sub_809C04C(&gPokemonStorageSystemPtr->unk_25b4.box, 0); + sub_809C04C(&gPokemonStorageSystemPtr->unk_25b4, 0); gUnknown_020384E7 = a0; gUnknown_020384E8 = a1; } @@ -1922,7 +1924,7 @@ void sub_809BF74(void) case 1: if (gUnknown_020384E5 < PARTY_SIZE) { - sub_809C04C(&gPlayerParty[gUnknown_020384E5].box, 0); + sub_809C04C(gPlayerParty + gUnknown_020384E5, 0); break; } // fallthrough @@ -1944,3 +1946,158 @@ void sub_809C028(void) else sub_809BF74(); } + +void sub_809C04C(void *pokemon, u8 a1) +{ + u8 *buf; + u16 gender = MON_MALE; + gPokemonStorageSystemPtr->unk_11f2 = 0; + if (a1 == 0) + { + struct Pokemon *pkmn = (struct Pokemon *)pokemon; + gPokemonStorageSystemPtr->unk_11f0 = GetMonData(pokemon, MON_DATA_SPECIES2); + if (gPokemonStorageSystemPtr->unk_11f0 != SPECIES_NONE) + { + gPokemonStorageSystemPtr->unk_11f9 = GetMonData(pkmn, MON_DATA_IS_EGG); + GetMonData(pkmn, MON_DATA_NICKNAME, gPokemonStorageSystemPtr->unk_11fa); + StringGetEnd10(gPokemonStorageSystemPtr->unk_11fa); + gPokemonStorageSystemPtr->unk_11f8 = GetMonData(pkmn, MON_DATA_LEVEL); + gPokemonStorageSystemPtr->unk_11f7 = GetMonData(pkmn, MON_DATA_MARKINGS); + gPokemonStorageSystemPtr->unk_11ec = GetMonData(pkmn, MON_DATA_PERSONALITY); + gPokemonStorageSystemPtr->unk_11e8 = GetMonSpritePal(pkmn); + gender = GetMonGender(pkmn); + gPokemonStorageSystemPtr->unk_11f2 = GetMonData(pkmn, MON_DATA_HELD_ITEM); + } + } + else if (a1 == 1) + { + struct BoxPokemon *boxmon = (struct BoxPokemon *)pokemon; + gPokemonStorageSystemPtr->unk_11f0 = GetBoxMonData(pokemon, MON_DATA_SPECIES2); + if (gPokemonStorageSystemPtr->unk_11f0 != SPECIES_NONE) + { + u32 otId = GetBoxMonData(boxmon, MON_DATA_OT_ID); + gPokemonStorageSystemPtr->unk_11f9 = GetBoxMonData(boxmon, MON_DATA_IS_EGG); + GetBoxMonData(boxmon, MON_DATA_NICKNAME, gPokemonStorageSystemPtr->unk_11fa); + StringGetEnd10(gPokemonStorageSystemPtr->unk_11fa); + gPokemonStorageSystemPtr->unk_11f8 = GetLevelFromBoxMonExp(boxmon); + gPokemonStorageSystemPtr->unk_11f7 = GetBoxMonData(boxmon, MON_DATA_MARKINGS); + gPokemonStorageSystemPtr->unk_11ec = GetBoxMonData(boxmon, MON_DATA_PERSONALITY); + gPokemonStorageSystemPtr->unk_11e8 = GetMonSpritePalFromOtIdPersonality(gPokemonStorageSystemPtr->unk_11f0, otId, gPokemonStorageSystemPtr->unk_11ec); + gender = GetGenderFromSpeciesAndPersonality(gPokemonStorageSystemPtr->unk_11f0, gPokemonStorageSystemPtr->unk_11ec); + gPokemonStorageSystemPtr->unk_11f2 = GetBoxMonData(boxmon, MON_DATA_HELD_ITEM); + } + } + else + { + gPokemonStorageSystemPtr->unk_11f0 = SPECIES_NONE; + } + if (gPokemonStorageSystemPtr->unk_11f0 == SPECIES_NONE) + { + gPokemonStorageSystemPtr->unk_11fa[0] = EOS; + gPokemonStorageSystemPtr->unk_120f[0] = EOS; + gPokemonStorageSystemPtr->unk_1234[0] = EOS; + gPokemonStorageSystemPtr->unk_1259[0] = EOS; + gPokemonStorageSystemPtr->unk_127a[0] = EOS; + } + else if (gPokemonStorageSystemPtr->unk_11f9) + { + buf = gPokemonStorageSystemPtr->unk_120f; + buf[0] = EXT_CTRL_CODE_BEGIN; + buf[1] = 0x04; // COLOR_HIGHLIGHT_SHADOW + buf[2] = 0x0F; // WHITE2 + buf[3] = 0x00; // TRANSPARENT + buf[4] = 0x01; // DARK_GREY + buf = gPokemonStorageSystemPtr->unk_120f + 5; + buf = StringCopy(buf, gPokemonStorageSystemPtr->unk_11fa); + gPokemonStorageSystemPtr->unk_1234[0] = EOS; + gPokemonStorageSystemPtr->unk_1259[0] = EOS; + gPokemonStorageSystemPtr->unk_127a[0] = EOS; + } + else + { + if (gPokemonStorageSystemPtr->unk_11f0 == SPECIES_NIDORAN_M || gPokemonStorageSystemPtr->unk_11f0 == SPECIES_NIDORAN_F) + gender = MON_GENDERLESS; + buf = gPokemonStorageSystemPtr->unk_120f; + buf[0] = EXT_CTRL_CODE_BEGIN; + buf[1] = 0x04; // COLOR_HIGHLIGHT_SHADOW + buf[2] = 0x0F; // WHITE2 + buf[3] = 0x00; // TRANSPARENT + buf[4] = 0x01; // DARK_GREY + buf = gPokemonStorageSystemPtr->unk_120f + 5; + buf = StringCopy(buf, gPokemonStorageSystemPtr->unk_11fa); + buf = gPokemonStorageSystemPtr->unk_1234; + buf[0] = EXT_CTRL_CODE_BEGIN; + buf[1] = 0x04; // COLOR_HIGHLIGHT_SHADOW + buf[2] = 0x0F; // WHITE2 + buf[3] = 0x00; // TRANSPARENT + buf[4] = 0x01; // DARK_GREY + buf[5] = EXT_CTRL_CODE_BEGIN; + buf[6] = 0x13; // CLEAR_TO + buf[7] = 7; + buf[8] = CHAR_SLASH; + buf = gPokemonStorageSystemPtr->unk_1234 + 9; + buf = StringCopy(buf, gSpeciesNames[gPokemonStorageSystemPtr->unk_11f0]); + buf[0] = EXT_CTRL_CODE_BEGIN; + buf[1] = 0x13; // CLEAR_TO + buf[2] = 0x50; + buf[3] = EOS; + buf = gPokemonStorageSystemPtr->unk_1259; + buf[0] = EXT_CTRL_CODE_BEGIN; + buf[1] = 0x04; // COLOR_HIGHLIGHT_SHADOW + buf[2] = 0x0F; // WHITE2 + buf[3] = 0x00; // TRANSPARENT + buf[4] = 0x01; // DARK_GREY + buf[5] = EXT_CTRL_CODE_BEGIN; + buf[6] = 0x13; // CLEAR_TO + buf[7] = 8; + buf = gPokemonStorageSystemPtr->unk_1259 + 8; + buf[0] = 0x34; // LV + buf = gPokemonStorageSystemPtr->unk_1259 + 9; + buf = sub_8072C14(buf, gPokemonStorageSystemPtr->unk_11f8, 0x22, STR_CONV_MODE_RIGHT_ALIGN); + buf[0] = EXT_CTRL_CODE_BEGIN; + buf[1] = 0x11; // CLEAR + buf[2] = 8; + buf += 3; + switch (gender) + { + case MON_MALE: + buf[0] = EXT_CTRL_CODE_BEGIN; + buf[1] = 0x04; // COLOR_HIGHLIGHT_SHADOW + buf[2] = 0x04; // BLUE + buf[3] = 0x00; // TRANSPARENT + buf[4] = 0x05; // YELLOW + buf[5] = CHAR_MALE; + buf += 6; + break; + case MON_FEMALE: + buf[0] = EXT_CTRL_CODE_BEGIN; + buf[1] = 0x04; // COLOR_HIGHLIGHT_SHADOW + buf[2] = 0x06; // CYAN + buf[3] = 0x00; // TRANSPARENT + buf[4] = 0x07; // MAGENTA + buf[5] = CHAR_FEMALE; + buf += 6; + break; + } + buf[0] = EOS; + buf = gPokemonStorageSystemPtr->unk_127a; + if (gPokemonStorageSystemPtr->unk_11f2) + { + buf[0] = EXT_CTRL_CODE_BEGIN; + buf[1] = 0x04; // COLOR_HIGHLIGHT_SHADOW + buf[2] = 0x0F; // WHITE2 + buf[3] = 0x00; // TRANSPARENT + buf[4] = 0x01; // DARK_GREY + buf = gPokemonStorageSystemPtr->unk_127a + 5; + buf[0] = EXT_CTRL_CODE_BEGIN; + buf[1] = 0x06; // size + buf[2] = 0x04; + buf = gPokemonStorageSystemPtr->unk_127a + 8; + buf = StringCopy(buf, ItemId_GetItem(gPokemonStorageSystemPtr->unk_11f2)->name); + buf[0] = EXT_CTRL_CODE_BEGIN; + buf[1] = 0x07; // UNKNOWN_7; + buf += 2; + } + buf[0] = EOS; + } +} -- cgit v1.2.3 From 5ffd006acfe8ad12e88fa53a93a55b6f59e77779 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 21 Jan 2018 19:33:08 -0500 Subject: nonmatching sub_809C464 --- asm/pokemon_storage_system.s | 270 ----------------------- src/pokemon/pokemon_storage_system_4.c | 378 +++++++++++++++++++++++++++++++++ 2 files changed, 378 insertions(+), 270 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index eb4a9650e..8724f5608 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,276 +5,6 @@ .text - thumb_func_start sub_809C464 -sub_809C464: @ 809C464 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - ldr r0, _0809C4D8 @ =gUnknown_020384E4 - ldrb r0, [r0] - mov r8, r0 - ldr r2, _0809C4DC @ =gUnknown_020384E5 - ldrb r4, [r2] - ldr r0, _0809C4E0 @ =gPokemonStorageSystemPtr - ldr r1, [r0] - ldr r0, _0809C4E4 @ =0x000011de - adds r7, r1, r0 - movs r0, 0 - strb r0, [r7] - ldr r3, _0809C4E8 @ =0x000011df - adds r5, r1, r3 - strb r0, [r5] - adds r3, 0x4 - adds r6, r1, r3 - strb r0, [r6] - ldr r0, _0809C4EC @ =gMain - mov r12, r0 - ldrh r1, [r0, 0x30] - movs r0, 0x40 - ands r0, r1 - adds r3, r2, 0 - cmp r0, 0 - beq _0809C4A0 - b _0809C62A -_0809C4A0: - movs r0, 0x80 - ands r0, r1 - cmp r0, 0 - beq _0809C4F0 - movs r1, 0x1 - mov r9, r1 - lsls r0, r4, 24 - movs r3, 0xC0 - lsls r3, 19 - adds r0, r3 - lsrs r4, r0, 24 - asrs r0, 24 - cmp r0, 0x1D - bgt _0809C4BE - b _0809C648 -_0809C4BE: - movs r1, 0x3 - mov r8, r1 - subs r0, 0x1E - lsls r0, 24 - asrs r0, 24 - bl __divsi3 - lsls r0, 24 - lsrs r4, r0, 24 - mov r3, r9 - strb r3, [r7] - strb r3, [r6] - b _0809C648 - .align 2, 0 -_0809C4D8: .4byte gUnknown_020384E4 -_0809C4DC: .4byte gUnknown_020384E5 -_0809C4E0: .4byte gPokemonStorageSystemPtr -_0809C4E4: .4byte 0x000011de -_0809C4E8: .4byte 0x000011df -_0809C4EC: .4byte gMain -_0809C4F0: - movs r0, 0x20 - ands r0, r1 - cmp r0, 0 - beq _0809C524 - movs r0, 0x1 - mov r9, r0 - movs r0, 0 - ldrsb r0, [r3, r0] - movs r1, 0x6 - bl __modsi3 - lsls r0, 24 - cmp r0, 0 - beq _0809C514 - lsls r0, r4, 24 - movs r1, 0xFF - lsls r1, 24 - b _0809C63C -_0809C514: - movs r0, 0xFF - strb r0, [r5] - lsls r0, r4, 24 - movs r3, 0xA0 - lsls r3, 19 - adds r0, r3 - lsrs r4, r0, 24 - b _0809C648 -_0809C524: - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0809C554 - movs r0, 0x1 - mov r9, r0 - movs r0, 0 - ldrsb r0, [r3, r0] - adds r0, 0x1 - movs r1, 0x6 - bl __modsi3 - cmp r0, 0 - beq _0809C548 - lsls r0, r4, 24 - movs r1, 0x80 - lsls r1, 17 - b _0809C63C -_0809C548: - mov r3, r9 - strb r3, [r5] - lsls r0, r4, 24 - movs r1, 0xFB - lsls r1, 24 - b _0809C63C -_0809C554: - mov r3, r12 - ldrh r1, [r3, 0x2E] - movs r0, 0x8 - ands r0, r1 - cmp r0, 0 - beq _0809C56A - movs r0, 0x1 - mov r9, r0 - movs r1, 0x2 - mov r8, r1 - b _0809C646 -_0809C56A: - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0809C5D4 - bl sub_809CAB0 - lsls r0, 24 - cmp r0, 0 - beq _0809C5D4 - ldr r0, _0809C588 @ =gUnknown_020384E9 - ldrb r0, [r0] - cmp r0, 0 - bne _0809C58C - movs r0, 0x8 - b _0809C658 - .align 2, 0 -_0809C588: .4byte gUnknown_020384E9 -_0809C58C: - movs r0, 0 - bl sub_809CE4C - subs r0, 0x1 - lsls r0, 24 - asrs r0, 24 - cmp r0, 0x4 - bhi _0809C5D4 - lsls r0, 2 - ldr r1, _0809C5A8 @ =_0809C5AC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0809C5A8: .4byte _0809C5AC - .align 2, 0 -_0809C5AC: - .4byte _0809C5C0 - .4byte _0809C5C4 - .4byte _0809C5C8 - .4byte _0809C5CC - .4byte _0809C5D0 -_0809C5C0: - movs r0, 0xB - b _0809C658 -_0809C5C4: - movs r0, 0xC - b _0809C658 -_0809C5C8: - movs r0, 0xD - b _0809C658 -_0809C5CC: - movs r0, 0xE - b _0809C658 -_0809C5D0: - movs r0, 0xF - b _0809C658 -_0809C5D4: - ldr r2, _0809C5E4 @ =gMain - ldrh r1, [r2, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0809C5E8 - movs r0, 0x10 - b _0809C658 - .align 2, 0 -_0809C5E4: .4byte gMain -_0809C5E8: - ldr r0, _0809C600 @ =gSaveBlock2 - ldrb r0, [r0, 0x13] - cmp r0, 0x1 - bne _0809C612 - ldrh r1, [r2, 0x2C] - movs r0, 0x80 - lsls r0, 2 - ands r0, r1 - cmp r0, 0 - beq _0809C604 - movs r0, 0xA - b _0809C658 - .align 2, 0 -_0809C600: .4byte gSaveBlock2 -_0809C604: - movs r0, 0x80 - lsls r0, 1 - ands r0, r1 - cmp r0, 0 - beq _0809C612 - movs r0, 0x9 - b _0809C658 -_0809C612: - ldrh r1, [r2, 0x2E] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0809C624 - bl sub_809CD88 - movs r0, 0 - b _0809C658 -_0809C624: - movs r3, 0 - mov r9, r3 - b _0809C656 -_0809C62A: - movs r0, 0x1 - mov r9, r0 - movs r0, 0 - ldrsb r0, [r2, r0] - cmp r0, 0x5 - ble _0809C642 - lsls r0, r4, 24 - movs r1, 0xFA - lsls r1, 24 -_0809C63C: - adds r0, r1 - lsrs r4, r0, 24 - b _0809C648 -_0809C642: - movs r3, 0x2 - mov r8, r3 -_0809C646: - movs r4, 0 -_0809C648: - mov r0, r9 - cmp r0, 0 - beq _0809C656 - mov r0, r8 - adds r1, r4, 0 - bl sub_809AF18 -_0809C656: - mov r0, r9 -_0809C658: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_809C464 - thumb_func_start sub_809C664 sub_809C664: @ 809C664 push {r4-r7,lr} diff --git a/src/pokemon/pokemon_storage_system_4.c b/src/pokemon/pokemon_storage_system_4.c index eb5a6cb0b..c02ca878d 100644 --- a/src/pokemon/pokemon_storage_system_4.c +++ b/src/pokemon/pokemon_storage_system_4.c @@ -67,7 +67,10 @@ bool8 sub_809BF2C(void); void sub_809BF74(void); void sub_809C028(void); void sub_809C04C(void *pokemon, u8 a1); +bool8 sub_809CAB0(void); void sub_809CC04(void); +void sub_809CD88(void); +s8 sub_809CE4C(u8 a0); // .rodata @@ -2101,3 +2104,378 @@ void sub_809C04C(void *pokemon, u8 a1) buf[0] = EOS; } } + +#ifdef NONMATCHING +u8 sub_809C464(void) +{ + u8 r9; + s8 r8 = gUnknown_020384E4; + s8 r4 = gUnknown_020384E5; + gPokemonStorageSystemPtr->unk_11de = 0; + gPokemonStorageSystemPtr->unk_11df = 0; + gPokemonStorageSystemPtr->unk_11e3 = 0; + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + r9 = 1; + if (gUnknown_020384E5 >= 6) + { + r4 -= 6; + } + else + { + r8 = 2; + r4 = 0; + } + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + r9 = 1; + r4 += 6; + if (r4 >= 30) + { + r8 = 3; + r4 -= 30; + r4 /= 3; + gPokemonStorageSystemPtr->unk_11de = 1; + gPokemonStorageSystemPtr->unk_11e3 = 1; + } + } + else if (gMain.newAndRepeatedKeys & DPAD_LEFT) + { + r9 = 1; + if (gUnknown_020384E5 % 6) + r4--; + else + { + gPokemonStorageSystemPtr->unk_11df = -1; + r4 += 5; + } + } + else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + { + r9 = 1; + if ((gUnknown_020384E5 + 1) % 6) + r4++; + else + { + gPokemonStorageSystemPtr->unk_11df = 1; + r4 -= 5; + } + } + else if (gMain.newKeys & START_BUTTON) + { + r9 = 1; + r8 = 2; + r4 = 0; + } + else + { + if ((gMain.newKeys & A_BUTTON) && sub_809CAB0()) + { + if (gUnknown_020384E9 == 0) + return 8; + switch (sub_809CE4C(0)) + { + case 1: + return 11; + case 2: + return 12; + case 3: + return 13; + case 4: + return 14; + case 5: + return 15; + } + } + if (gMain.newKeys & B_BUTTON) + return 16; + if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR) + { + if (gMain.heldKeys & L_BUTTON) + return 10; + if (gMain.heldKeys & R_BUTTON) + return 9; + } + if (gMain.newKeys & SELECT_BUTTON) + { + sub_809CD88(); + return 0; + } + r9 = 0; + } + if (r9) + sub_809AF18(r8, r4); + return r9; +} +#else +__attribute__((naked)) u8 sub_809C464(void) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r9\n" + "\tmov r6, r8\n" + "\tpush {r6,r7}\n" + "\tldr r0, _0809C4D8 @ =gUnknown_020384E4\n" + "\tldrb r0, [r0]\n" + "\tmov r8, r0\n" + "\tldr r2, _0809C4DC @ =gUnknown_020384E5\n" + "\tldrb r4, [r2]\n" + "\tldr r0, _0809C4E0 @ =gPokemonStorageSystemPtr\n" + "\tldr r1, [r0]\n" + "\tldr r0, _0809C4E4 @ =0x000011de\n" + "\tadds r7, r1, r0\n" + "\tmovs r0, 0\n" + "\tstrb r0, [r7]\n" + "\tldr r3, _0809C4E8 @ =0x000011df\n" + "\tadds r5, r1, r3\n" + "\tstrb r0, [r5]\n" + "\tadds r3, 0x4\n" + "\tadds r6, r1, r3\n" + "\tstrb r0, [r6]\n" + "\tldr r0, _0809C4EC @ =gMain\n" + "\tmov r12, r0\n" + "\tldrh r1, [r0, 0x30]\n" + "\tmovs r0, 0x40\n" + "\tands r0, r1\n" + "\tadds r3, r2, 0\n" + "\tcmp r0, 0\n" + "\tbeq _0809C4A0\n" + "\tb _0809C62A\n" + "_0809C4A0:\n" + "\tmovs r0, 0x80\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _0809C4F0\n" + "\tmovs r1, 0x1\n" + "\tmov r9, r1\n" + "\tlsls r0, r4, 24\n" + "\tmovs r3, 0xC0\n" + "\tlsls r3, 19\n" + "\tadds r0, r3\n" + "\tlsrs r4, r0, 24\n" + "\tasrs r0, 24\n" + "\tcmp r0, 0x1D\n" + "\tbgt _0809C4BE\n" + "\tb _0809C648\n" + "_0809C4BE:\n" + "\tmovs r1, 0x3\n" + "\tmov r8, r1\n" + "\tsubs r0, 0x1E\n" + "\tlsls r0, 24\n" + "\tasrs r0, 24\n" + "\tbl __divsi3\n" + "\tlsls r0, 24\n" + "\tlsrs r4, r0, 24\n" + "\tmov r3, r9\n" + "\tstrb r3, [r7]\n" + "\tstrb r3, [r6]\n" + "\tb _0809C648\n" + "\t.align 2, 0\n" + "_0809C4D8: .4byte gUnknown_020384E4\n" + "_0809C4DC: .4byte gUnknown_020384E5\n" + "_0809C4E0: .4byte gPokemonStorageSystemPtr\n" + "_0809C4E4: .4byte 0x000011de\n" + "_0809C4E8: .4byte 0x000011df\n" + "_0809C4EC: .4byte gMain\n" + "_0809C4F0:\n" + "\tmovs r0, 0x20\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _0809C524\n" + "\tmovs r0, 0x1\n" + "\tmov r9, r0\n" + "\tmovs r0, 0\n" + "\tldrsb r0, [r3, r0]\n" + "\tmovs r1, 0x6\n" + "\tbl __modsi3\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _0809C514\n" + "\tlsls r0, r4, 24\n" + "\tmovs r1, 0xFF\n" + "\tlsls r1, 24\n" + "\tb _0809C63C\n" + "_0809C514:\n" + "\tmovs r0, 0xFF\n" + "\tstrb r0, [r5]\n" + "\tlsls r0, r4, 24\n" + "\tmovs r3, 0xA0\n" + "\tlsls r3, 19\n" + "\tadds r0, r3\n" + "\tlsrs r4, r0, 24\n" + "\tb _0809C648\n" + "_0809C524:\n" + "\tmovs r0, 0x10\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _0809C554\n" + "\tmovs r0, 0x1\n" + "\tmov r9, r0\n" + "\tmovs r0, 0\n" + "\tldrsb r0, [r3, r0]\n" + "\tadds r0, 0x1\n" + "\tmovs r1, 0x6\n" + "\tbl __modsi3\n" + "\tcmp r0, 0\n" + "\tbeq _0809C548\n" + "\tlsls r0, r4, 24\n" + "\tmovs r1, 0x80\n" + "\tlsls r1, 17\n" + "\tb _0809C63C\n" + "_0809C548:\n" + "\tmov r3, r9\n" + "\tstrb r3, [r5]\n" + "\tlsls r0, r4, 24\n" + "\tmovs r1, 0xFB\n" + "\tlsls r1, 24\n" + "\tb _0809C63C\n" + "_0809C554:\n" + "\tmov r3, r12\n" + "\tldrh r1, [r3, 0x2E]\n" + "\tmovs r0, 0x8\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _0809C56A\n" + "\tmovs r0, 0x1\n" + "\tmov r9, r0\n" + "\tmovs r1, 0x2\n" + "\tmov r8, r1\n" + "\tb _0809C646\n" + "_0809C56A:\n" + "\tmovs r0, 0x1\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _0809C5D4\n" + "\tbl sub_809CAB0\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _0809C5D4\n" + "\tldr r0, _0809C588 @ =gUnknown_020384E9\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0\n" + "\tbne _0809C58C\n" + "\tmovs r0, 0x8\n" + "\tb _0809C658\n" + "\t.align 2, 0\n" + "_0809C588: .4byte gUnknown_020384E9\n" + "_0809C58C:\n" + "\tmovs r0, 0\n" + "\tbl sub_809CE4C\n" + "\tsubs r0, 0x1\n" + "\tlsls r0, 24\n" + "\tasrs r0, 24\n" + "\tcmp r0, 0x4\n" + "\tbhi _0809C5D4\n" + "\tlsls r0, 2\n" + "\tldr r1, _0809C5A8 @ =_0809C5AC\n" + "\tadds r0, r1\n" + "\tldr r0, [r0]\n" + "\tmov pc, r0\n" + "\t.align 2, 0\n" + "_0809C5A8: .4byte _0809C5AC\n" + "\t.align 2, 0\n" + "_0809C5AC:\n" + "\t.4byte _0809C5C0\n" + "\t.4byte _0809C5C4\n" + "\t.4byte _0809C5C8\n" + "\t.4byte _0809C5CC\n" + "\t.4byte _0809C5D0\n" + "_0809C5C0:\n" + "\tmovs r0, 0xB\n" + "\tb _0809C658\n" + "_0809C5C4:\n" + "\tmovs r0, 0xC\n" + "\tb _0809C658\n" + "_0809C5C8:\n" + "\tmovs r0, 0xD\n" + "\tb _0809C658\n" + "_0809C5CC:\n" + "\tmovs r0, 0xE\n" + "\tb _0809C658\n" + "_0809C5D0:\n" + "\tmovs r0, 0xF\n" + "\tb _0809C658\n" + "_0809C5D4:\n" + "\tldr r2, _0809C5E4 @ =gMain\n" + "\tldrh r1, [r2, 0x2E]\n" + "\tmovs r0, 0x2\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _0809C5E8\n" + "\tmovs r0, 0x10\n" + "\tb _0809C658\n" + "\t.align 2, 0\n" + "_0809C5E4: .4byte gMain\n" + "_0809C5E8:\n" + "\tldr r0, _0809C600 @ =gSaveBlock2\n" + "\tldrb r0, [r0, 0x13]\n" + "\tcmp r0, 0x1\n" + "\tbne _0809C612\n" + "\tldrh r1, [r2, 0x2C]\n" + "\tmovs r0, 0x80\n" + "\tlsls r0, 2\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _0809C604\n" + "\tmovs r0, 0xA\n" + "\tb _0809C658\n" + "\t.align 2, 0\n" + "_0809C600: .4byte gSaveBlock2\n" + "_0809C604:\n" + "\tmovs r0, 0x80\n" + "\tlsls r0, 1\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _0809C612\n" + "\tmovs r0, 0x9\n" + "\tb _0809C658\n" + "_0809C612:\n" + "\tldrh r1, [r2, 0x2E]\n" + "\tmovs r0, 0x4\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _0809C624\n" + "\tbl sub_809CD88\n" + "\tmovs r0, 0\n" + "\tb _0809C658\n" + "_0809C624:\n" + "\tmovs r3, 0\n" + "\tmov r9, r3\n" + "\tb _0809C656\n" + "_0809C62A:\n" + "\tmovs r0, 0x1\n" + "\tmov r9, r0\n" + "\tmovs r0, 0\n" + "\tldrsb r0, [r2, r0]\n" + "\tcmp r0, 0x5\n" + "\tble _0809C642\n" + "\tlsls r0, r4, 24\n" + "\tmovs r1, 0xFA\n" + "\tlsls r1, 24\n" + "_0809C63C:\n" + "\tadds r0, r1\n" + "\tlsrs r4, r0, 24\n" + "\tb _0809C648\n" + "_0809C642:\n" + "\tmovs r3, 0x2\n" + "\tmov r8, r3\n" + "_0809C646:\n" + "\tmovs r4, 0\n" + "_0809C648:\n" + "\tmov r0, r9\n" + "\tcmp r0, 0\n" + "\tbeq _0809C656\n" + "\tmov r0, r8\n" + "\tadds r1, r4, 0\n" + "\tbl sub_809AF18\n" + "_0809C656:\n" + "\tmov r0, r9\n" + "_0809C658:\n" + "\tpop {r3,r4}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tpop {r4-r7}\n" + "\tpop {r1}\n" + "\tbx r1"); +} +#endif -- cgit v1.2.3 From 9cfd6fed81b77b4f3aca8ad7b4c2641672cc234b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 21 Jan 2018 21:04:43 -0500 Subject: Create stub files to hold ewram symbols --- src/field/pokedex_area_screen.c | 20 ++++++++++++++++++++ src/field/pokenav.c | 16 ++++++++++++++++ sym_common.txt | 17 ++++++++++++----- sym_ewram.txt | 34 ++-------------------------------- 4 files changed, 50 insertions(+), 37 deletions(-) create mode 100644 src/field/pokedex_area_screen.c create mode 100644 src/field/pokenav.c diff --git a/src/field/pokedex_area_screen.c b/src/field/pokedex_area_screen.c new file mode 100644 index 000000000..67ca276c4 --- /dev/null +++ b/src/field/pokedex_area_screen.c @@ -0,0 +1,20 @@ + +// Includes +#include "global.h" + +// Static type declarations + +// Static RAM declarations + +EWRAM_DATA u16 gUnknown_02039260 = 0; +EWRAM_DATA u16 gUnknown_02039262 = 0; +EWRAM_DATA u16 gUnknown_02039264 = 0; +EWRAM_DATA u16 gUnknown_02039266 = 0; +EWRAM_DATA u16 gUnknown_02039268 = 0; +EWRAM_DATA u16 gUnknown_0203926A = 0; + +// Static ROM declarations + +// .rodata + +// .text diff --git a/src/field/pokenav.c b/src/field/pokenav.c new file mode 100644 index 000000000..f57a98df6 --- /dev/null +++ b/src/field/pokenav.c @@ -0,0 +1,16 @@ + +// Includes +#include "global.h" + +// Static type declarations + +// Static RAM declarations + +EWRAM_DATA u8 gUnknown_020388B0[4] = {}; +EWRAM_DATA u16 gUnknown_020388B4 = 0; + +// Static ROM declarations + +// .rodata + +// .text diff --git a/sym_common.txt b/sym_common.txt index 64e87c046..7e5551025 100644 --- a/sym_common.txt +++ b/sym_common.txt @@ -139,7 +139,7 @@ SYMBOL(gEggHatchData, 4) // load_save.c SYMBOL(gFlashMemoryPresent, 4) -// ??? +// trade.c SYMBOL(gUnknown_03004824, 4) SYMBOL(gUnknown_03004828, 4) . += 0x4; @@ -204,15 +204,20 @@ SYMBOL(gUnknown_03005CE4, 4) SYMBOL(gUnknown_03005CE8, 4) SYMBOL(gUnknown_03005CEC, 4) -// ??? +// pokemon_summary_screen.o SYMBOL(gUnknown_03005CF0, 4) + // huh? . = ALIGN(16); + +// item_menu.c gFieldItemUseCallback = .; . += 0x10; gBagPocketScrollStates = .; . += 0x14; SYMBOL(gCurrentBagPocketItemSlots, 4) + +// contest.c SYMBOL(gUnknown_03005D28, 4) // record_mixing.c @@ -226,8 +231,10 @@ SYMBOL(gSoundTestCryNum, 4) SYMBOL(gUnknown_03005D38, 4) . += 0x64; // huge gap? -// ??? +// mauville_man.c SYMBOL(gUnknown_03005DA0, 0x48) + +// cute_sketch.c SYMBOL(gUnknown_03005DE8, 4) SYMBOL(gUnknown_03005DEC, 4) SYMBOL(gUnknown_03005DF0, 4) @@ -249,7 +256,7 @@ SYMBOL(gUnknown_03005E90, 4) // evolution_scene.c SYMBOL(gCB2_AfterEvolution, 4) -// ??? +// pokedex_cry_screen.c SYMBOL(gUnknown_03005E98, 4) // save.c @@ -268,7 +275,7 @@ SYMBOL(gGameContinueCallback, 4) SYMBOL(gIntroFrameCounter, 4) SYMBOL(gMultibootProgramStruct, 44) -// ??? +// battle_anim_813F0F4.c SYMBOL(gUnknown_03005F0C, 4) SYMBOL(gUnknown_03005F10, 4) gUnknown_03005F14 = .; diff --git a/sym_ewram.txt b/sym_ewram.txt index 2a2a2cc11..24b01b594 100644 --- a/sym_ewram.txt +++ b/sym_ewram.txt @@ -346,16 +346,7 @@ gBattleMonForms = .; /* 2024E84 */ . = ALIGN(4); src/field/rotating_gate.o(ewram_data); . = ALIGN(4); src/field/safari_zone.o(ewram_data); . = ALIGN(4); src/easy_chat_2.o(ewram_data); - -/* pokenav */ - - . = ALIGN(4); -gUnknown_020388B0 = .; /* 20388B0 */ - . += 0x4; - -gUnknown_020388B4 = .; /* 20388B4 */ - . += 0x4; - +. = ALIGN(4); src/field/pokenav.o(ewram_data); . = ALIGN(4); src/pokemon/mon_markings.o(ewram_data); . = ALIGN(4); src/field/mauville_man.o(ewram_data); . = ALIGN(4); src/field/menu_helpers.o(ewram_data); @@ -365,28 +356,7 @@ gUnknown_020388B4 = .; /* 20388B4 */ . = ALIGN(4); src/rom6.o(ewram_data); . = ALIGN(4); src/field/pokeblock.o(ewram_data); . = ALIGN(4); src/field/field_specials.o(ewram_data); - -/* pokedex_area_screen */ - - . = ALIGN(4); -gUnknown_02039260 = .; /* 2039260 */ - . += 0x2; - -gUnknown_02039262 = .; /* 2039262 */ - . += 0x2; - -gUnknown_02039264 = .; /* 2039264 */ - . += 0x2; - -gUnknown_02039266 = .; /* 2039266 */ - . += 0x2; - -gUnknown_02039268 = .; /* 2039268 */ - . += 0x2; - -gUnknown_0203926A = .; /* 203926A */ - . += 0x2; - +. = ALIGN(4); src/field/pokedex_area_screen.o(ewram_data); . = ALIGN(4); src/battle/battle_message.o(ewram_data); . = ALIGN(4); src/field/choose_party.o(ewram_data); . = ALIGN(4); src/scene/cable_car.o(ewram_data); -- cgit v1.2.3 From cc1767cbc116d26d954d50c6e7642138f012540c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 21 Jan 2018 21:49:43 -0500 Subject: nonmatching sub_809C664 --- asm/pokemon_storage_system.s | 265 +----------------------- src/pokemon/pokemon_storage_system_4.c | 363 +++++++++++++++++++++++++++++++++ 2 files changed, 365 insertions(+), 263 deletions(-) diff --git a/asm/pokemon_storage_system.s b/asm/pokemon_storage_system.s index 8724f5608..ad3f371f5 100644 --- a/asm/pokemon_storage_system.s +++ b/asm/pokemon_storage_system.s @@ -5,270 +5,8 @@ .text - thumb_func_start sub_809C664 -sub_809C664: @ 809C664 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - ldr r0, _0809C6D8 @ =gUnknown_020384E4 - ldrb r0, [r0] - mov r10, r0 - ldr r7, _0809C6DC @ =gUnknown_020384E5 - ldrb r4, [r7] - ldr r2, _0809C6E0 @ =gPokemonStorageSystemPtr - ldr r5, [r2] - ldr r1, _0809C6E4 @ =0x000011df - adds r0, r5, r1 - movs r1, 0 - strb r1, [r0] - ldr r3, _0809C6E8 @ =0x000011de - adds r0, r5, r3 - strb r1, [r0] - adds r3, 0x5 - adds r0, r5, r3 - strb r1, [r0] - mov r9, r1 - mov r8, r1 - ldr r1, _0809C6EC @ =gMain - ldrh r3, [r1, 0x30] - movs r0, 0x40 - ands r0, r3 - adds r6, r7, 0 - mov r12, r2 - adds r2, r1, 0 - cmp r0, 0 - beq _0809C6A8 - b _0809C81C -_0809C6A8: - movs r0, 0x80 - ands r0, r3 - cmp r0, 0 - beq _0809C6F0 - lsls r0, r4, 24 - movs r1, 0x80 - lsls r1, 17 - adds r0, r1 - lsrs r4, r0, 24 - asrs r0, 24 - cmp r0, 0x6 - ble _0809C6C2 - movs r4, 0 -_0809C6C2: - lsls r0, r4, 24 - asrs r0, 24 - movs r1, 0 - ldrsb r1, [r6, r1] - cmp r0, r1 - bne _0809C6D0 - b _0809C83C -_0809C6D0: - movs r2, 0x1 - mov r8, r2 - b _0809C842 - .align 2, 0 -_0809C6D8: .4byte gUnknown_020384E4 -_0809C6DC: .4byte gUnknown_020384E5 -_0809C6E0: .4byte gPokemonStorageSystemPtr -_0809C6E4: .4byte 0x000011df -_0809C6E8: .4byte 0x000011de -_0809C6EC: .4byte gMain -_0809C6F0: - movs r0, 0x20 - ands r0, r3 - cmp r0, 0 - beq _0809C714 - ldrb r1, [r6] - movs r0, 0 - ldrsb r0, [r6, r0] - cmp r0, 0 - beq _0809C714 - movs r3, 0x1 - mov r8, r3 - ldr r2, _0809C710 @ =0x000011e2 - adds r0, r5, r2 - strb r1, [r0] - movs r4, 0 - b _0809C83C - .align 2, 0 -_0809C710: .4byte 0x000011e2 -_0809C714: - ldrh r1, [r2, 0x30] - movs r0, 0x10 - ands r0, r1 - cmp r0, 0 - beq _0809C748 - movs r0, 0 - ldrsb r0, [r6, r0] - cmp r0, 0 - bne _0809C73C - movs r3, 0x1 - mov r8, r3 - mov r1, r12 - ldr r0, [r1] - ldr r2, _0809C738 @ =0x000011e2 - adds r0, r2 - ldrb r4, [r0] - b _0809C83C - .align 2, 0 -_0809C738: .4byte 0x000011e2 -_0809C73C: - movs r3, 0x6 - mov r8, r3 - movs r0, 0 - mov r10, r0 - movs r4, 0 - b _0809C83C -_0809C748: - ldrh r1, [r2, 0x2E] - movs r0, 0x1 - ands r0, r1 - cmp r0, 0 - beq _0809C7D0 - movs r0, 0 - ldrsb r0, [r6, r0] - cmp r0, 0x6 - bne _0809C76E - mov r1, r12 - ldr r0, [r1] - ldrb r0, [r0, 0x5] - cmp r0, 0x1 - bne _0809C768 - movs r0, 0x4 - b _0809C84C -_0809C768: - movs r2, 0x1 - mov r9, r2 - b _0809C7D0 -_0809C76E: - bl sub_809CAB0 - lsls r0, 24 - cmp r0, 0 - beq _0809C7D0 - ldr r0, _0809C784 @ =gUnknown_020384E9 - ldrb r0, [r0] - cmp r0, 0 - bne _0809C788 - movs r0, 0x8 - b _0809C84C - .align 2, 0 -_0809C784: .4byte gUnknown_020384E9 -_0809C788: - movs r0, 0 - bl sub_809CE4C - subs r0, 0x1 - lsls r0, 24 - asrs r0, 24 - cmp r0, 0x4 - bhi _0809C7D0 - lsls r0, 2 - ldr r1, _0809C7A4 @ =_0809C7A8 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0809C7A4: .4byte _0809C7A8 - .align 2, 0 -_0809C7A8: - .4byte _0809C7BC - .4byte _0809C7C0 - .4byte _0809C7C4 - .4byte _0809C7C8 - .4byte _0809C7CC -_0809C7BC: - movs r0, 0xB - b _0809C84C -_0809C7C0: - movs r0, 0xC - b _0809C84C -_0809C7C4: - movs r0, 0xD - b _0809C84C -_0809C7C8: - movs r0, 0xE - b _0809C84C -_0809C7CC: - movs r0, 0xF - b _0809C84C -_0809C7D0: - ldr r2, _0809C7EC @ =gMain - ldrh r1, [r2, 0x2E] - movs r0, 0x2 - ands r0, r1 - cmp r0, 0 - beq _0809C7F8 - ldr r0, _0809C7F0 @ =gPokemonStorageSystemPtr - ldr r0, [r0] - ldrb r0, [r0, 0x5] - cmp r0, 0x1 - bne _0809C7F4 - movs r0, 0x10 - b _0809C84C - .align 2, 0 -_0809C7EC: .4byte gMain -_0809C7F0: .4byte gPokemonStorageSystemPtr -_0809C7F4: - movs r3, 0x1 - mov r9, r3 -_0809C7F8: - mov r0, r9 - cmp r0, 0 - beq _0809C80A - movs r1, 0x6 - mov r8, r1 - movs r2, 0 - mov r10, r2 - movs r4, 0 - b _0809C83C -_0809C80A: - ldrh r1, [r2, 0x2E] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - beq _0809C83C - bl sub_809CD88 - movs r0, 0 - b _0809C84C -_0809C81C: - lsls r0, r4, 24 - movs r3, 0xFF - lsls r3, 24 - adds r0, r3 - lsrs r4, r0, 24 - cmp r0, 0 - bge _0809C82C - movs r4, 0x6 -_0809C82C: - lsls r0, r4, 24 - asrs r0, 24 - movs r1, 0 - ldrsb r1, [r7, r1] - cmp r0, r1 - beq _0809C83C - movs r0, 0x1 - mov r8, r0 -_0809C83C: - mov r1, r8 - cmp r1, 0 - beq _0809C84A -_0809C842: - mov r0, r10 - adds r1, r4, 0 - bl sub_809AF18 -_0809C84A: - mov r0, r8 -_0809C84C: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_809C664 - thumb_func_start sub_809C85C +@ u8 sub_809C85C(void) sub_809C85C: @ 809C85C push {r4-r6,lr} ldr r0, _0809C894 @ =gPokemonStorageSystemPtr @@ -392,6 +130,7 @@ _0809C93E: thumb_func_end sub_809C85C thumb_func_start sub_809C944 +@ u8 sub_809C944(void) sub_809C944: @ 809C944 push {r4-r7,lr} ldr r0, _0809C988 @ =gUnknown_020384E4 diff --git a/src/pokemon/pokemon_storage_system_4.c b/src/pokemon/pokemon_storage_system_4.c index c02ca878d..1cc9f7e3b 100644 --- a/src/pokemon/pokemon_storage_system_4.c +++ b/src/pokemon/pokemon_storage_system_4.c @@ -2479,3 +2479,366 @@ __attribute__((naked)) u8 sub_809C464(void) "\tbx r1"); } #endif + +#ifdef NONMATCHING +u8 sub_809C664(void) +{ + s8 r10 = gUnknown_020384E4; + s8 r4 = gUnknown_020384E5; + u8 r8; + u8 r9; + + gPokemonStorageSystemPtr->unk_11df = 0; + gPokemonStorageSystemPtr->unk_11de = 0; + gPokemonStorageSystemPtr->unk_11e3 = 0; + r9 = FALSE; + r8 = 0; + if (gMain.newAndRepeatedKeys & DPAD_UP) + { + if (--r4 < 0) + r4 = 6; + if (r4 != gUnknown_020384E5) + r8 = 1; + } + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + if (++r4 > 6) + r4 = 0; + if (r4 != gUnknown_020384E5) + r8 = 1; + } + else if ((gMain.newAndRepeatedKeys & DPAD_LEFT) && gUnknown_020384E5) + { + r8 = 1; + gPokemonStorageSystemPtr->unk_11e2 = gUnknown_020384E5; + r4 = 0; + } + else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + { + if (gUnknown_020384E5 == 0) + { + r8 = 1; + r4 = gPokemonStorageSystemPtr->unk_11e2; + } + else + { + r8 = 6; + r10 = 0; + r4 = 0; + } + } + else + { + if (gMain.newKeys & A_BUTTON) + { + if (gUnknown_020384E5 == 6) + { + if (gPokemonStorageSystemPtr->unk_0005 == 1) + return 4; + r9 = TRUE; + } + else if (sub_809CAB0()) + { + if (gUnknown_020384E9 == 0) + return 8; + switch (sub_809CE4C(0)) + { + case 1: + return 11; + case 2: + return 12; + case 3: + return 13; + case 4: + return 14; + case 5: + return 15; + } + } + } + if (gMain.newKeys & B_BUTTON) + { + if (gPokemonStorageSystemPtr->unk_0005 == 1) + return 16; + r9 = TRUE; + } + if (!r9) + { + r8 = 6; + r10 = 0; + r4 = 0; + } + else if (gMain.newKeys & SELECT_BUTTON) + { + sub_809CD88(); + return 0; + } + } + if (r8) + sub_809AF18(r10, r4); + return r8; +} +#else +__attribute__((naked)) u8 sub_809C664(void) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tldr r0, _0809C6D8 @ =gUnknown_020384E4\n" + "\tldrb r0, [r0]\n" + "\tmov r10, r0\n" + "\tldr r7, _0809C6DC @ =gUnknown_020384E5\n" + "\tldrb r4, [r7]\n" + "\tldr r2, _0809C6E0 @ =gPokemonStorageSystemPtr\n" + "\tldr r5, [r2]\n" + "\tldr r1, _0809C6E4 @ =0x000011df\n" + "\tadds r0, r5, r1\n" + "\tmovs r1, 0\n" + "\tstrb r1, [r0]\n" + "\tldr r3, _0809C6E8 @ =0x000011de\n" + "\tadds r0, r5, r3\n" + "\tstrb r1, [r0]\n" + "\tadds r3, 0x5\n" + "\tadds r0, r5, r3\n" + "\tstrb r1, [r0]\n" + "\tmov r9, r1\n" + "\tmov r8, r1\n" + "\tldr r1, _0809C6EC @ =gMain\n" + "\tldrh r3, [r1, 0x30]\n" + "\tmovs r0, 0x40\n" + "\tands r0, r3\n" + "\tadds r6, r7, 0\n" + "\tmov r12, r2\n" + "\tadds r2, r1, 0\n" + "\tcmp r0, 0\n" + "\tbeq _0809C6A8\n" + "\tb _0809C81C\n" + "_0809C6A8:\n" + "\tmovs r0, 0x80\n" + "\tands r0, r3\n" + "\tcmp r0, 0\n" + "\tbeq _0809C6F0\n" + "\tlsls r0, r4, 24\n" + "\tmovs r1, 0x80\n" + "\tlsls r1, 17\n" + "\tadds r0, r1\n" + "\tlsrs r4, r0, 24\n" + "\tasrs r0, 24\n" + "\tcmp r0, 0x6\n" + "\tble _0809C6C2\n" + "\tmovs r4, 0\n" + "_0809C6C2:\n" + "\tlsls r0, r4, 24\n" + "\tasrs r0, 24\n" + "\tmovs r1, 0\n" + "\tldrsb r1, [r6, r1]\n" + "\tcmp r0, r1\n" + "\tbne _0809C6D0\n" + "\tb _0809C83C\n" + "_0809C6D0:\n" + "\tmovs r2, 0x1\n" + "\tmov r8, r2\n" + "\tb _0809C842\n" + "\t.align 2, 0\n" + "_0809C6D8: .4byte gUnknown_020384E4\n" + "_0809C6DC: .4byte gUnknown_020384E5\n" + "_0809C6E0: .4byte gPokemonStorageSystemPtr\n" + "_0809C6E4: .4byte 0x000011df\n" + "_0809C6E8: .4byte 0x000011de\n" + "_0809C6EC: .4byte gMain\n" + "_0809C6F0:\n" + "\tmovs r0, 0x20\n" + "\tands r0, r3\n" + "\tcmp r0, 0\n" + "\tbeq _0809C714\n" + "\tldrb r1, [r6]\n" + "\tmovs r0, 0\n" + "\tldrsb r0, [r6, r0]\n" + "\tcmp r0, 0\n" + "\tbeq _0809C714\n" + "\tmovs r3, 0x1\n" + "\tmov r8, r3\n" + "\tldr r2, _0809C710 @ =0x000011e2\n" + "\tadds r0, r5, r2\n" + "\tstrb r1, [r0]\n" + "\tmovs r4, 0\n" + "\tb _0809C83C\n" + "\t.align 2, 0\n" + "_0809C710: .4byte 0x000011e2\n" + "_0809C714:\n" + "\tldrh r1, [r2, 0x30]\n" + "\tmovs r0, 0x10\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _0809C748\n" + "\tmovs r0, 0\n" + "\tldrsb r0, [r6, r0]\n" + "\tcmp r0, 0\n" + "\tbne _0809C73C\n" + "\tmovs r3, 0x1\n" + "\tmov r8, r3\n" + "\tmov r1, r12\n" + "\tldr r0, [r1]\n" + "\tldr r2, _0809C738 @ =0x000011e2\n" + "\tadds r0, r2\n" + "\tldrb r4, [r0]\n" + "\tb _0809C83C\n" + "\t.align 2, 0\n" + "_0809C738: .4byte 0x000011e2\n" + "_0809C73C:\n" + "\tmovs r3, 0x6\n" + "\tmov r8, r3\n" + "\tmovs r0, 0\n" + "\tmov r10, r0\n" + "\tmovs r4, 0\n" + "\tb _0809C83C\n" + "_0809C748:\n" + "\tldrh r1, [r2, 0x2E]\n" + "\tmovs r0, 0x1\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _0809C7D0\n" + "\tmovs r0, 0\n" + "\tldrsb r0, [r6, r0]\n" + "\tcmp r0, 0x6\n" + "\tbne _0809C76E\n" + "\tmov r1, r12\n" + "\tldr r0, [r1]\n" + "\tldrb r0, [r0, 0x5]\n" + "\tcmp r0, 0x1\n" + "\tbne _0809C768\n" + "\tmovs r0, 0x4\n" + "\tb _0809C84C\n" + "_0809C768:\n" + "\tmovs r2, 0x1\n" + "\tmov r9, r2\n" + "\tb _0809C7D0\n" + "_0809C76E:\n" + "\tbl sub_809CAB0\n" + "\tlsls r0, 24\n" + "\tcmp r0, 0\n" + "\tbeq _0809C7D0\n" + "\tldr r0, _0809C784 @ =gUnknown_020384E9\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0\n" + "\tbne _0809C788\n" + "\tmovs r0, 0x8\n" + "\tb _0809C84C\n" + "\t.align 2, 0\n" + "_0809C784: .4byte gUnknown_020384E9\n" + "_0809C788:\n" + "\tmovs r0, 0\n" + "\tbl sub_809CE4C\n" + "\tsubs r0, 0x1\n" + "\tlsls r0, 24\n" + "\tasrs r0, 24\n" + "\tcmp r0, 0x4\n" + "\tbhi _0809C7D0\n" + "\tlsls r0, 2\n" + "\tldr r1, _0809C7A4 @ =_0809C7A8\n" + "\tadds r0, r1\n" + "\tldr r0, [r0]\n" + "\tmov pc, r0\n" + "\t.align 2, 0\n" + "_0809C7A4: .4byte _0809C7A8\n" + "\t.align 2, 0\n" + "_0809C7A8:\n" + "\t.4byte _0809C7BC\n" + "\t.4byte _0809C7C0\n" + "\t.4byte _0809C7C4\n" + "\t.4byte _0809C7C8\n" + "\t.4byte _0809C7CC\n" + "_0809C7BC:\n" + "\tmovs r0, 0xB\n" + "\tb _0809C84C\n" + "_0809C7C0:\n" + "\tmovs r0, 0xC\n" + "\tb _0809C84C\n" + "_0809C7C4:\n" + "\tmovs r0, 0xD\n" + "\tb _0809C84C\n" + "_0809C7C8:\n" + "\tmovs r0, 0xE\n" + "\tb _0809C84C\n" + "_0809C7CC:\n" + "\tmovs r0, 0xF\n" + "\tb _0809C84C\n" + "_0809C7D0:\n" + "\tldr r2, _0809C7EC @ =gMain\n" + "\tldrh r1, [r2, 0x2E]\n" + "\tmovs r0, 0x2\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _0809C7F8\n" + "\tldr r0, _0809C7F0 @ =gPokemonStorageSystemPtr\n" + "\tldr r0, [r0]\n" + "\tldrb r0, [r0, 0x5]\n" + "\tcmp r0, 0x1\n" + "\tbne _0809C7F4\n" + "\tmovs r0, 0x10\n" + "\tb _0809C84C\n" + "\t.align 2, 0\n" + "_0809C7EC: .4byte gMain\n" + "_0809C7F0: .4byte gPokemonStorageSystemPtr\n" + "_0809C7F4:\n" + "\tmovs r3, 0x1\n" + "\tmov r9, r3\n" + "_0809C7F8:\n" + "\tmov r0, r9\n" + "\tcmp r0, 0\n" + "\tbeq _0809C80A\n" + "\tmovs r1, 0x6\n" + "\tmov r8, r1\n" + "\tmovs r2, 0\n" + "\tmov r10, r2\n" + "\tmovs r4, 0\n" + "\tb _0809C83C\n" + "_0809C80A:\n" + "\tldrh r1, [r2, 0x2E]\n" + "\tmovs r0, 0x4\n" + "\tands r0, r1\n" + "\tcmp r0, 0\n" + "\tbeq _0809C83C\n" + "\tbl sub_809CD88\n" + "\tmovs r0, 0\n" + "\tb _0809C84C\n" + "_0809C81C:\n" + "\tlsls r0, r4, 24\n" + "\tmovs r3, 0xFF\n" + "\tlsls r3, 24\n" + "\tadds r0, r3\n" + "\tlsrs r4, r0, 24\n" + "\tcmp r0, 0\n" + "\tbge _0809C82C\n" + "\tmovs r4, 0x6\n" + "_0809C82C:\n" + "\tlsls r0, r4, 24\n" + "\tasrs r0, 24\n" + "\tmovs r1, 0\n" + "\tldrsb r1, [r7, r1]\n" + "\tcmp r0, r1\n" + "\tbeq _0809C83C\n" + "\tmovs r0, 0x1\n" + "\tmov r8, r0\n" + "_0809C83C:\n" + "\tmov r1, r8\n" + "\tcmp r1, 0\n" + "\tbeq _0809C84A\n" + "_0809C842:\n" + "\tmov r0, r10\n" + "\tadds r1, r4, 0\n" + "\tbl sub_809AF18\n" + "_0809C84A:\n" + "\tmov r0, r8\n" + "_0809C84C:\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r1}\n" + "\tbx r1"); +} +#endif -- cgit v1.2.3 From 58928acf41b3ed7fc9f7de12db2aad27de744203 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Tue, 30 Jan 2018 20:13:43 -0800 Subject: Use standard naming convention for pc_screen_effect.h guard --- include/pc_screen_effect.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/include/pc_screen_effect.h b/include/pc_screen_effect.h index 36661bc3b..d3f6d22de 100644 --- a/include/pc_screen_effect.h +++ b/include/pc_screen_effect.h @@ -1,5 +1,5 @@ -#ifndef POKERUBY_PC_SCREEN_EFFECT_H -#define POKERUBY_PC_SCREEN_EFFECT_H +#ifndef GUARD_PC_SCREEN_EFFECT_H +#define GUARD_PC_SCREEN_EFFECT_H struct PCScreenEffectStruct { @@ -18,4 +18,4 @@ bool8 sub_80C5DCC(void); void sub_80C5E38(struct PCScreenEffectStruct *unkStruct); bool8 sub_80C5F98(void); -#endif //POKERUBY_PC_SCREEN_EFFECT_H +#endif //GUARD_PC_SCREEN_EFFECT_H -- cgit v1.2.3