summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2018-01-12 09:46:31 -0500
committerPikalaxALT <pikalaxalt@gmail.com>2018-01-12 09:46:31 -0500
commit12ec094b4b3641cf33fc1cf45634090e067c70b6 (patch)
tree201e775c3e141e4a76945352d3b193577bd2c239
parent7a65953ccc2313db6de0ec061220b1a5f8751b36 (diff)
Remaining functions and data in pss3
-rw-r--r--asm/pokemon_storage_system.s269
-rw-r--r--include/pokemon_icon.h4
-rw-r--r--src/pokemon/pokemon_storage_system_3.c131
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
+};