summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_dome_cards.s192
-rw-r--r--src/battle_dome_cards.c68
2 files changed, 67 insertions, 193 deletions
diff --git a/asm/battle_dome_cards.s b/asm/battle_dome_cards.s
index 73948ea94..4de32086c 100644
--- a/asm/battle_dome_cards.s
+++ b/asm/battle_dome_cards.s
@@ -5,198 +5,6 @@
.text
-
- thumb_func_start oamt_spawn_poke_or_trainer_picture
-oamt_spawn_poke_or_trainer_picture: @ 818D1EC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x30
- str r1, [sp, 0xC]
- str r2, [sp, 0x10]
- ldr r1, [sp, 0x50]
- ldr r2, [sp, 0x54]
- ldr r4, [sp, 0x58]
- ldr r5, [sp, 0x5C]
- ldr r6, [sp, 0x60]
- ldr r7, [sp, 0x64]
- mov r8, r7
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0x8]
- lsls r3, 24
- lsrs r3, 24
- str r3, [sp, 0x14]
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp, 0x18]
- lsls r2, 16
- lsrs r2, 16
- str r2, [sp, 0x1C]
- lsls r4, 24
- lsrs r4, 24
- str r4, [sp, 0x20]
- lsls r5, 16
- lsrs r5, 16
- mov r10, r5
- lsls r6, 24
- lsrs r6, 24
- mov r9, r6
- mov r0, r8
- lsls r0, 24
- lsrs r5, r0, 24
- movs r4, 0
- ldr r1, =gUnknown_0203CD04
- ldrb r0, [r1, 0xB]
- cmp r0, 0
- beq _0818D25C
-_0818D244:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x7
- bhi _0818D25C
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0xB]
- cmp r0, 0
- bne _0818D244
-_0818D25C:
- cmp r4, 0x8
- beq _0818D280
- movs r0, 0x80
- lsls r0, 6
- bl Alloc
- adds r7, r0, 0
- cmp r7, 0
- beq _0818D280
- movs r0, 0x20
- bl Alloc
- mov r8, r0
- cmp r0, 0
- bne _0818D28C
- adds r0, r7, 0
- bl Free
-_0818D280:
- ldr r0, =0x0000ffff
- b _0818D356
- .pool
-_0818D28C:
- mov r1, r9
- str r1, [sp]
- str r5, [sp, 0x4]
- ldr r0, [sp, 0x8]
- ldr r1, [sp, 0x10]
- ldr r2, [sp, 0x14]
- adds r3, r7, 0
- bl load_pokemon_image_TODO
- lsls r0, 16
- cmp r0, 0
- bne _0818D280
- lsls r2, r4, 1
- str r2, [sp, 0x2C]
- ldr r5, =gUnknown_0203CCEC
- ldr r0, =gUnknown_0860B064
- mov r12, r0
- ldr r1, [sp, 0x18]
- lsls r1, 16
- str r1, [sp, 0x24]
- ldr r2, [sp, 0x1C]
- lsls r2, 16
- str r2, [sp, 0x28]
- movs r3, 0x80
- lsls r3, 4
- mov r0, r8
- adds r1, r7, 0
- adds r6, r3, 0
- movs r2, 0x3
-_0818D2C6:
- str r1, [r0]
- strh r3, [r0, 0x4]
- adds r0, 0x8
- adds r1, r6
- subs r2, 0x1
- cmp r2, 0
- bge _0818D2C6
- ldr r0, =0x0000ffff
- strh r0, [r5]
- mov r0, r12
- str r0, [r5, 0x4]
- mov r0, r9
- bl uns_builder_assign_animtable1
- mov r1, r8
- str r1, [r5, 0xC]
- ldr r0, =gDummySpriteAffineAnimTable
- str r0, [r5, 0x10]
- ldr r0, =nullsub_122
- str r0, [r5, 0x14]
- mov r2, r10
- str r2, [sp]
- mov r0, r9
- str r0, [sp, 0x4]
- ldr r0, [sp, 0x8]
- ldr r1, [sp, 0xC]
- ldr r2, [sp, 0x10]
- ldr r3, [sp, 0x20]
- bl sub_818D0C4
- ldr r2, [sp, 0x24]
- asrs r1, r2, 16
- ldr r0, [sp, 0x28]
- asrs r2, r0, 16
- adds r0, r5, 0
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r2, r0, 24
- adds r6, r2, 0
- ldr r0, =0x0000ffff
- cmp r10, r0
- bne _0818D336
- ldr r0, =gSprites
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldr r2, [sp, 0x20]
- lsls r3, r2, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
-_0818D336:
- ldr r1, =gUnknown_0203CD04
- ldr r2, [sp, 0x2C]
- adds r0, r2, r4
- lsls r0, 2
- adds r2, r0, r1
- str r7, [r2]
- adds r1, 0x4
- adds r0, r1
- mov r7, r8
- str r7, [r0]
- mov r0, r10
- strh r0, [r2, 0x8]
- strb r6, [r2, 0xA]
- movs r0, 0x1
- strb r0, [r2, 0xB]
- adds r0, r6, 0
-_0818D356:
- add sp, 0x30
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end oamt_spawn_poke_or_trainer_picture
-
thumb_func_start sub_818D384
sub_818D384: @ 818D384
push {r4-r7,lr}
diff --git a/src/battle_dome_cards.c b/src/battle_dome_cards.c
index e92773a1b..764e3dfe4 100644
--- a/src/battle_dome_cards.c
+++ b/src/battle_dome_cards.c
@@ -2,6 +2,7 @@
// Includes
#include "global.h"
#include "sprite.h"
+#include "malloc.h"
#include "species.h"
#include "palette.h"
#include "decompress.h"
@@ -13,11 +14,16 @@ extern const struct CompressedSpriteSheet gTrainerBackPicTable[];
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern const union AnimCmd *const gUnknown_082FF70C[];
extern const union AnimCmd *const *const gUnknown_0830536C[];
+extern const struct OamData gUnknown_0860B064;
// Static type declarations
struct BattleDomeCard {
- u8 unk_00[12];
+ u8 *frames;
+ const struct SpriteFrameImage *images;
+ u16 paletteTag;
+ u8 spriteId;
+ u8 active;
};
// Static RAM declarations
@@ -148,3 +154,63 @@ void uns_builder_assign_animtable1(bool8 isTrainer)
gUnknown_0203CCEC.anims = gUnknown_0830536C[0];
}
}
+
+u16 oamt_spawn_poke_or_trainer_picture(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag, bool8 isTrainer, bool8 ignoreDeoxys)
+{
+ u8 i;
+ u8 *framePics;
+ struct SpriteFrameImage *images;
+ int j;
+ u8 spriteId;
+
+ for (i = 0; i < 8; i ++)
+ {
+ if (!gUnknown_0203CD04[i].active)
+ {
+ break;
+ }
+ }
+ if (i == 8)
+ {
+ return 0xFFFF;
+ }
+ framePics = Alloc(4 * 0x800);
+ if (!framePics)
+ {
+ return 0xFFFF;
+ }
+ images = Alloc(4 * sizeof(struct SpriteFrameImage));
+ if (!images)
+ {
+ Free(framePics);
+ return 0xFFFF;
+ }
+ if (load_pokemon_image_TODO(species, personality, isFrontPic, framePics, isTrainer, ignoreDeoxys))
+ {
+ // debug trap?
+ return 0xFFFF;
+ }
+ for (j = 0; j < 4; j ++)
+ {
+ images[j].data = framePics + 0x800 * j;
+ images[j].size = 0x800;
+ }
+ gUnknown_0203CCEC.tileTag = 0xFFFF;
+ gUnknown_0203CCEC.oam = &gUnknown_0860B064;
+ uns_builder_assign_animtable1(isTrainer);
+ gUnknown_0203CCEC.images = images;
+ gUnknown_0203CCEC.affineAnims = gDummySpriteAffineAnimTable;
+ gUnknown_0203CCEC.callback = nullsub_122;
+ sub_818D0C4(species, otId, personality, paletteSlot, paletteTag, isTrainer);
+ spriteId = CreateSprite(&gUnknown_0203CCEC, x, y, 0);
+ if (paletteTag == 0xFFFF)
+ {
+ gSprites[spriteId].oam.paletteNum = paletteSlot;
+ }
+ gUnknown_0203CD04[i].frames = framePics;
+ gUnknown_0203CD04[i].images = images;
+ gUnknown_0203CD04[i].paletteTag = paletteTag;
+ gUnknown_0203CD04[i].spriteId = spriteId;
+ gUnknown_0203CD04[i].active = TRUE;
+ return spriteId;
+}