summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/pokemon_storage_system.s81
-rw-r--r--data/pokemon_storage_system.s55
-rw-r--r--ld_script.txt1
-rw-r--r--src/pokemon/pokemon_storage_system.c97
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
@@ -4,61 +4,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) {