summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/pokemon_storage_system.s257
-rw-r--r--include/pokemon_storage_system.h7
-rw-r--r--src/pokemon/pokemon_storage_system_4.c94
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();
+}