summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/pokemon_special_anim.s223
-rw-r--r--data/pokemon_special_anim.s4
-rw-r--r--include/pokemon_special_anim_internal.h51
-rw-r--r--src/pokemon_special_anim.c156
-rw-r--r--sym_ewram.txt12
5 files changed, 164 insertions, 282 deletions
diff --git a/asm/pokemon_special_anim.s b/asm/pokemon_special_anim.s
index 676222f30..6eed303ea 100644
--- a/asm/pokemon_special_anim.s
+++ b/asm/pokemon_special_anim.s
@@ -5,229 +5,6 @@
.text
- thumb_func_start sub_811D018
-sub_811D018: @ 811D018
- push {r4,lr}
- lsls r0, 16
- lsrs r3, r0, 16
- movs r2, 0
- ldr r4, _0811D044 @ =gUnknown_8459634
-_0811D022:
- adds r1, r4, 0
- ldrh r0, [r1]
- cmp r0, r3
- beq _0811D04C
- adds r4, r1, 0x4
- adds r2, 0x1
- cmp r2, 0x1
- bls _0811D022
- ldr r1, _0811D048 @ =0xfffffedf
- adds r0, r3, r1
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x39
- bls _0811D050
- movs r0, 0
- b _0811D052
- .align 2, 0
-_0811D044: .4byte gUnknown_8459634
-_0811D048: .4byte 0xfffffedf
-_0811D04C:
- ldrh r0, [r4, 0x2]
- b _0811D052
-_0811D050:
- movs r0, 0x4
-_0811D052:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_811D018
-
- thumb_func_start sub_811D058
-sub_811D058: @ 811D058
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- adds r1, r0, 0
- cmp r0, 0x64
- bhi _0811D068
- movs r0, 0
- b _0811D07A
-_0811D068:
- cmp r0, 0x96
- bhi _0811D070
- movs r0, 0x1
- b _0811D07A
-_0811D070:
- cmp r1, 0xC8
- bls _0811D078
- movs r0, 0x3
- b _0811D07A
-_0811D078:
- movs r0, 0x2
-_0811D07A:
- pop {r1}
- bx r1
- thumb_func_end sub_811D058
-
- thumb_func_start sub_811D080
-sub_811D080: @ 811D080
- push {lr}
- ldr r0, _0811D090 @ =gUnknown_203B094
- ldrb r0, [r0]
- movs r1, 0
- bl GetWordTaskArg
- pop {r1}
- bx r1
- .align 2, 0
-_0811D090: .4byte gUnknown_203B094
- thumb_func_end sub_811D080
-
- thumb_func_start sub_811D094
-sub_811D094: @ 811D094
- push {lr}
- bl sub_811D080
- ldr r1, _0811D0A4 @ =gUnknown_203B098
- str r0, [r1]
- adds r0, 0x8
- pop {r1}
- bx r1
- .align 2, 0
-_0811D0A4: .4byte gUnknown_203B098
- thumb_func_end sub_811D094
-
- thumb_func_start sub_811D0A8
-sub_811D0A8: @ 811D0A8
- push {lr}
- bl sub_811D080
- adds r0, 0xA8
- pop {r1}
- bx r1
- thumb_func_end sub_811D0A8
-
- thumb_func_start sub_811D0B4
-sub_811D0B4: @ 811D0B4
- push {lr}
- bl sub_811D080
- adds r0, 0x96
- ldrh r0, [r0]
- pop {r1}
- bx r1
- thumb_func_end sub_811D0B4
-
- thumb_func_start sub_811D0C4
-sub_811D0C4: @ 811D0C4
- push {lr}
- bl sub_811D080
- adds r0, 0x77
- pop {r1}
- bx r1
- thumb_func_end sub_811D0C4
-
- thumb_func_start sub_811D0D0
-sub_811D0D0: @ 811D0D0
- push {lr}
- bl sub_811D080
- adds r0, 0x84
- pop {r1}
- bx r1
- thumb_func_end sub_811D0D0
-
- thumb_func_start sub_811D0DC
-sub_811D0DC: @ 811D0DC
- push {r4,lr}
- adds r4, r0, 0
- bl sub_811D080
- adds r1, r0, 0
- adds r1, 0x6C
- adds r0, r4, 0
- bl StringCopy
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_811D0DC
-
- thumb_func_start sub_811D0F4
-sub_811D0F4: @ 811D0F4
- push {lr}
- bl sub_811D080
- adds r0, 0x6C
- pop {r1}
- bx r1
- thumb_func_end sub_811D0F4
-
- thumb_func_start sub_811D100
-sub_811D100: @ 811D100
- push {lr}
- bl sub_811D080
- adds r0, 0x98
- ldrb r0, [r0]
- pop {r1}
- bx r1
- thumb_func_end sub_811D100
-
- thumb_func_start sub_811D110
-sub_811D110: @ 811D110
- push {lr}
- bl sub_811D080
- adds r0, 0x94
- ldrh r0, [r0]
- pop {r1}
- bx r1
- thumb_func_end sub_811D110
-
- thumb_func_start sub_811D120
-sub_811D120: @ 811D120
- push {lr}
- bl sub_811D080
- adds r0, 0xA0
- ldr r0, [r0]
- pop {r1}
- bx r1
- thumb_func_end sub_811D120
-
- thumb_func_start BufferMonStatsToTaskData
-BufferMonStatsToTaskData: @ 811D130
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- movs r1, 0x3A
- bl GetMonData
- strh r0, [r5]
- adds r0, r4, 0
- movs r1, 0x3B
- bl GetMonData
- strh r0, [r5, 0x2]
- adds r0, r4, 0
- movs r1, 0x3C
- bl GetMonData
- strh r0, [r5, 0x4]
- adds r0, r4, 0
- movs r1, 0x3D
- bl GetMonData
- strh r0, [r5, 0x6]
- adds r0, r4, 0
- movs r1, 0x3E
- bl GetMonData
- strh r0, [r5, 0x8]
- adds r0, r4, 0
- movs r1, 0x3F
- bl GetMonData
- strh r0, [r5, 0xA]
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end BufferMonStatsToTaskData
-
- thumb_func_start sub_811D178
-sub_811D178: @ 811D178
- ldr r0, _0811D180 @ =gUnknown_203B090
- ldr r0, [r0]
- bx lr
- .align 2, 0
-_0811D180: .4byte gUnknown_203B090
- thumb_func_end sub_811D178
-
thumb_func_start sub_811D184
sub_811D184: @ 811D184
push {r4,r5,lr}
diff --git a/data/pokemon_special_anim.s b/data/pokemon_special_anim.s
index 1c479d0c0..b18f01ef9 100644
--- a/data/pokemon_special_anim.s
+++ b/data/pokemon_special_anim.s
@@ -6,10 +6,6 @@
.section .rodata
.align 2
-gUnknown_8459634:: @ 8459634 data16 2x2
- .2byte 0x0044, 0x0000
- .2byte 0x000d, 0x0001
-
gUnknown_845963C:: @ 845963C gbapal
.incbin "graphics/pokemon_special_anim/unk_845963C.gbapal"
diff --git a/include/pokemon_special_anim_internal.h b/include/pokemon_special_anim_internal.h
new file mode 100644
index 000000000..276168aa6
--- /dev/null
+++ b/include/pokemon_special_anim_internal.h
@@ -0,0 +1,51 @@
+#ifndef GUARD_POKEMON_SPECIAL_ANIM_INTERNAL_H
+#define GUARD_POKEMON_SPECIAL_ANIM_INTERNAL_H
+
+#include "pokemon_special_anim.h"
+
+struct PokemonSpecialAnim
+{
+ /*0x0000*/ u8 filler_0000[0x4];
+ /*0x0004*/ MainCallback savedCallback;
+ /*0x0008*/ struct Pokemon pokemon;
+ /*0x006c*/ u8 nickname[POKEMON_NAME_LENGTH + 1];
+ /*0x0077*/ u8 nameOfMoveForgotten[13];
+ /*0x0084*/ u8 nameOfMoveToTeach[13];
+ /*0x0091*/ bool8 cancelDisabled;
+ /*0x0092*/ u16 state;
+ /*0x0094*/ u16 species;
+ /*0x0096*/ u16 itemId;
+ /*0x0098*/ u16 animType;
+ /*0x009a*/ u16 slotId;
+ /*0x009c*/ u16 closeness;
+ /*0x009e*/ u16 field_009e;
+ /*0x00a0*/ u32 personality;
+ /*0x00a4*/ u32 field_00a4;
+ /*0x00a8*/ u8 field_00a8[0x2834];
+}; // size=0x28dc
+
+void sub_811D184(u8 *buffer, u16 animType);
+bool8 sub_811D280(void);
+void sub_811D29C(void);
+void sub_811D2A8(void);
+void sub_811D2D0(void);
+void sub_811D2EC(u8 a0);
+void sub_811D4D4(void);
+bool8 sub_811D4EC(void);
+void sub_811D4FC(void);
+bool8 sub_811D530(void);
+void sub_811D5A0(void);
+void sub_811D5B0(void);
+bool8 sub_811D5C0(void);
+void sub_811D6EC(void);
+bool8 sub_811D6FC(void);
+bool8 sub_811D754(void);
+void sub_811D830(u8 a0);
+void sub_811D948(u8 closeness);
+bool8 sub_811D9A8(void);
+void sub_811DC54(u16 itemId, u8 closeness, u8 a2);
+void sub_811DCF0(u16 itemId);
+bool8 sub_811DD90(void);
+void sub_811E040(void);
+
+#endif //GUARD_POKEMON_SPECIAL_ANIM_INTERNAL_H
diff --git a/src/pokemon_special_anim.c b/src/pokemon_special_anim.c
index 542e0ffb3..46d1251df 100644
--- a/src/pokemon_special_anim.c
+++ b/src/pokemon_special_anim.c
@@ -2,36 +2,18 @@
#include "gflib.h"
#include "data.h"
#include "party_menu.h"
+#include "pokemon_special_anim_internal.h"
#include "item_use.h"
#include "task.h"
#include "constants/songs.h"
+#include "constants/items.h"
// Functions related to the special anims Pokemon
// make when using an item on them in the field.
-struct PokemonSpecialAnim
-{
- /*0x0000*/ u8 filler_0000[0x4];
- /*0x0004*/ MainCallback savedCallback;
- /*0x0008*/ struct Pokemon pokemon;
- /*0x006c*/ u8 nickname[POKEMON_NAME_LENGTH + 1];
- /*0x0077*/ u8 nameOfMoveForgotten[13];
- /*0x0084*/ u8 nameOfMoveToTeach[13];
- /*0x0091*/ bool8 cancelDisabled;
- /*0x0092*/ u16 state;
- /*0x0094*/ u16 species;
- /*0x0096*/ u16 itemId;
- /*0x0098*/ u16 animType;
- /*0x009a*/ u16 slotId;
- /*0x009c*/ u16 closeness;
- /*0x009e*/ u16 field_009e;
- /*0x00a0*/ u32 personality;
- /*0x00a4*/ u32 field_00a4;
- /*0x00a8*/ u8 field_00a8[0x2834];
-}; // size=0x28dc
-
EWRAM_DATA bool32 gUnknown_203B090 = FALSE;
EWRAM_DATA u8 gUnknown_203B094 = 0;
+EWRAM_DATA struct PokemonSpecialAnim * gUnknown_203B098 = NULL;
struct PokemonSpecialAnim * sub_811C5D4(u8 slotId, u16 itemId, MainCallback callback);
void sub_811C748(struct PokemonSpecialAnim * ptr);
@@ -45,29 +27,6 @@ void sub_811CE4C(u8 taskId);
void sub_811CF88(u8 taskId);
u8 sub_811D058(u16 friendship);
u16 sub_811D018(u16 itemId);
-void sub_811D184(u8 *buffer, u16 animType);
-bool8 sub_811D280(void);
-void sub_811D29C(void);
-void sub_811D2A8(void);
-void sub_811D2D0(void);
-void sub_811D2EC(u8 a0);
-void sub_811D4D4(void);
-bool8 sub_811D4EC(void);
-void sub_811D4FC(void);
-bool8 sub_811D530(void);
-void sub_811D5A0(void);
-void sub_811D5B0(void);
-bool8 sub_811D5C0(void);
-void sub_811D6EC(void);
-bool8 sub_811D6FC(void);
-bool8 sub_811D754(void);
-void sub_811D830(u8 a0);
-void sub_811D948(u8 closeness);
-bool8 sub_811D9A8(void);
-void sub_811DC54(u16 itemId, u8 closeness, u8 a2);
-void sub_811DCF0(u16 itemId);
-bool8 sub_811DD90(void);
-void sub_811E040(void);
void sub_811C540(u8 slotId, u16 itemId, MainCallback callback)
{
@@ -638,3 +597,112 @@ void sub_811CF88(u8 taskId)
break;
}
}
+
+const struct {
+ u16 itemId;
+ u16 animType;
+} gUnknown_8459634[2] = {
+ {ITEM_RARE_CANDY, 0},
+ {ITEM_POTION, 1}
+};
+
+u16 sub_811D018(u16 itemId)
+{
+ int i;
+
+ for (i = 0; i < NELEMS(gUnknown_8459634); i++)
+ {
+ if (gUnknown_8459634[i].itemId == itemId)
+ return gUnknown_8459634[i].animType;
+ }
+
+ if (itemId >= ITEM_TM01 && itemId <= ITEM_HM08)
+ {
+ return 4;
+ }
+
+ return 0;
+}
+
+u8 sub_811D058(u16 friendship)
+{
+ if (friendship <= 100)
+ return 0;
+ else if (friendship <= 150)
+ return 1;
+ else if (friendship <= 200)
+ return 2;
+ else
+ return 3;
+}
+
+struct PokemonSpecialAnim * sub_811D080(void)
+{
+ return (void *)GetWordTaskArg(gUnknown_203B094, 0);
+}
+
+struct Pokemon * sub_811D094(void)
+{
+ gUnknown_203B098 = sub_811D080();
+ return &gUnknown_203B098->pokemon;
+}
+
+u8 *sub_811D0A8(void)
+{
+ return sub_811D080()->field_00a8;
+}
+
+u16 sub_811D0B4(void)
+{
+ return sub_811D080()->itemId;
+}
+
+u8 *sub_811D0C4(void)
+{
+ return sub_811D080()->nameOfMoveForgotten;
+}
+
+u8 *sub_811D0D0(void)
+{
+ return sub_811D080()->nameOfMoveToTeach;
+}
+
+u8 *sub_811D0DC(u8 *dest)
+{
+ return StringCopy(dest, sub_811D080()->nickname);
+}
+
+u8 *sub_811D0F4(void)
+{
+ return sub_811D080()->nickname;
+}
+
+u8 sub_811D100(void)
+{
+ return sub_811D080()->animType;
+}
+
+u16 sub_811D110(void)
+{
+ return sub_811D080()->species;
+}
+
+u32 sub_811D120(void)
+{
+ return sub_811D080()->personality;
+}
+
+void BufferMonStatsToTaskData(struct Pokemon * pokemon, u16 *data)
+{
+ data[0] = GetMonData(pokemon, MON_DATA_MAX_HP);
+ data[1] = GetMonData(pokemon, MON_DATA_ATK);
+ data[2] = GetMonData(pokemon, MON_DATA_DEF);
+ data[3] = GetMonData(pokemon, MON_DATA_SPEED);
+ data[4] = GetMonData(pokemon, MON_DATA_SPATK);
+ data[5] = GetMonData(pokemon, MON_DATA_SPDEF);
+}
+
+bool32 sub_811D178(void)
+{
+ return gUnknown_203B090;
+}
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 3da5bb78f..085b26c32 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -261,18 +261,8 @@ gPlayerAvatar: @ 2037078
.include "src/rfu_union_tool.o"
.align 2
.include "src/union_room_battle.o"
-
.align 2
- @ .include "src/pokemon_special_anim.o"
-gUnknown_203B090: @ 203B090
- .space 0x4
-
-gUnknown_203B094: @ 203B094
- .space 0x4
-
-gUnknown_203B098: @ 203B098
- .space 0x4
-
+ .include "src/pokemon_special_anim.o"
.align 2
.include "src/party_menu.o"
.align 2