summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDizzyEggg <jajkodizzy@wp.pl>2017-08-20 21:32:41 +0200
committerDizzyEggg <jajkodizzy@wp.pl>2017-08-20 21:32:41 +0200
commit169714a6d4f2fcaef2f55baf6954620f8b9655e7 (patch)
tree30d3d14b9be910e412919a0d12f7c1c298874f7e
parentf84d0541314b043fa3ef4e2b9a56809f278787f9 (diff)
mugshots done, moved some data to C
-rw-r--r--asm/battle_transition.s369
-rw-r--r--data/battle_transition.s78
-rw-r--r--include/battle_transition.h8
-rw-r--r--include/field_effect.h2
-rw-r--r--ld_script.txt1
-rw-r--r--src/battle_transition.c283
-rw-r--r--src/field_effect.c10
-rw-r--r--src/main_menu.c4
8 files changed, 242 insertions, 513 deletions
diff --git a/asm/battle_transition.s b/asm/battle_transition.s
index ab4e54964..cc3c98062 100644
--- a/asm/battle_transition.s
+++ b/asm/battle_transition.s
@@ -7,371 +7,6 @@
.text
-
- thumb_func_start sub_811C7B0
-sub_811C7B0: @ 811C7B0
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x4
- adds r4, r0, 0
- ldr r0, _0811C8EC @ =gUnknown_083FD850
- movs r2, 0x26
- ldrsh r1, [r4, r2]
- mov r8, r1
- add r0, r8
- ldrb r0, [r0]
- ldr r2, _0811C8F0 @ =gUnknown_083FD86A
- lsls r1, 2
- mov r8, r1
- adds r1, r2
- ldrh r1, [r1]
- subs r1, 0x20
- lsls r1, 16
- asrs r1, 16
- adds r2, 0x2
- add r2, r8
- ldrh r2, [r2]
- adds r2, 0x2A
- lsls r2, 16
- asrs r2, 16
- ldr r5, _0811C8F4 @ =0x0200c03c
- str r5, [sp]
- movs r3, 0
- bl CreateTrainerSprite_BirchSpeech
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x22]
- ldr r0, _0811C8F8 @ =gSaveBlock2
- ldrb r0, [r0, 0x8]
- movs r1, 0x88
- lsls r1, 1
- str r5, [sp]
- movs r2, 0x6A
- movs r3, 0
- bl CreateTrainerSprite_BirchSpeech
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x24]
- movs r3, 0x22
- ldrsh r0, [r4, r3]
- lsls r5, r0, 4
- adds r5, r0
- lsls r5, 2
- ldr r1, _0811C8FC @ =gSprites
- adds r5, r1
- movs r2, 0x24
- ldrsh r0, [r4, r2]
- lsls r6, r0, 4
- adds r6, r0
- lsls r6, 2
- adds r6, r1
- ldr r0, _0811C900 @ =sub_811C90C
- str r0, [r5, 0x1C]
- str r0, [r6, 0x1C]
- ldrb r0, [r5, 0x1]
- movs r1, 0x3
- orrs r0, r1
- strb r0, [r5, 0x1]
- ldrb r0, [r6, 0x1]
- orrs r0, r1
- strb r0, [r6, 0x1]
- bl AllocOamMatrix
- lsls r0, 24
- lsrs r0, 24
- movs r3, 0x1F
- mov r9, r3
- mov r4, r9
- ands r0, r4
- lsls r0, 1
- ldrb r2, [r5, 0x3]
- movs r4, 0x3F
- negs r4, r4
- adds r1, r4, 0
- ands r1, r2
- orrs r1, r0
- strb r1, [r5, 0x3]
- bl AllocOamMatrix
- lsls r0, 24
- lsrs r0, 24
- mov r1, r9
- ands r0, r1
- lsls r0, 1
- ldrb r1, [r6, 0x3]
- ands r4, r1
- orrs r4, r0
- strb r4, [r6, 0x3]
- ldrb r2, [r5, 0x1]
- movs r1, 0x3F
- adds r0, r1, 0
- ands r0, r2
- movs r2, 0x40
- orrs r0, r2
- strb r0, [r5, 0x1]
- ldrb r0, [r6, 0x1]
- ands r1, r0
- orrs r1, r2
- strb r1, [r6, 0x1]
- ldrb r0, [r5, 0x3]
- movs r1, 0xC0
- orrs r0, r1
- strb r0, [r5, 0x3]
- ldrb r0, [r6, 0x3]
- orrs r0, r1
- strb r0, [r6, 0x3]
- adds r0, r5, 0
- movs r1, 0x1
- movs r2, 0x3
- movs r3, 0x3
- bl CalcCenterToCornerVec
- adds r0, r6, 0
- movs r1, 0x1
- movs r2, 0x3
- movs r3, 0x3
- bl CalcCenterToCornerVec
- ldrb r0, [r5, 0x3]
- lsls r0, 26
- lsrs r0, 27
- ldr r2, _0811C904 @ =gUnknown_083FD856
- mov r3, r8
- adds r1, r3, r2
- movs r4, 0
- ldrsh r1, [r1, r4]
- adds r2, 0x2
- add r8, r2
- mov r3, r8
- movs r4, 0
- ldrsh r2, [r3, r4]
- movs r3, 0
- bl SetOamMatrixRotationScaling
- ldrb r0, [r6, 0x3]
- lsls r0, 26
- lsrs r0, 27
- ldr r1, _0811C908 @ =0xfffffe00
- movs r2, 0x80
- lsls r2, 2
- movs r3, 0
- bl SetOamMatrixRotationScaling
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0811C8EC: .4byte gUnknown_083FD850
-_0811C8F0: .4byte gUnknown_083FD86A
-_0811C8F4: .4byte 0x0200c03c
-_0811C8F8: .4byte gSaveBlock2
-_0811C8FC: .4byte gSprites
-_0811C900: .4byte sub_811C90C
-_0811C904: .4byte gUnknown_083FD856
-_0811C908: .4byte 0xfffffe00
- thumb_func_end sub_811C7B0
-
- thumb_func_start sub_811C90C
-sub_811C90C: @ 811C90C
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r5, _0811C930 @ =gUnknown_083FD880
-_0811C912:
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- lsls r0, 2
- adds r0, r5
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
- lsls r0, 24
- cmp r0, 0
- bne _0811C912
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811C930: .4byte gUnknown_083FD880
- thumb_func_end sub_811C90C
-
- thumb_func_start sub_811C934
-sub_811C934: @ 811C934
- movs r0, 0
- bx lr
- thumb_func_end sub_811C934
-
- thumb_func_start sub_811C938
-sub_811C938: @ 811C938
- push {r4,r5,lr}
- sub sp, 0x8
- adds r5, r0, 0
- ldr r1, _0811C97C @ =gUnknown_083FD89C
- mov r0, sp
- movs r2, 0x4
- bl memcpy
- add r4, sp, 0x4
- ldr r1, _0811C980 @ =gUnknown_083FD8A0
- adds r0, r4, 0
- movs r2, 0x4
- bl memcpy
- ldrh r0, [r5, 0x2E]
- adds r0, 0x1
- strh r0, [r5, 0x2E]
- movs r1, 0x3C
- ldrsh r0, [r5, r1]
- lsls r0, 1
- add r0, sp
- ldrh r0, [r0]
- strh r0, [r5, 0x30]
- movs r1, 0x3C
- ldrsh r0, [r5, r1]
- lsls r0, 1
- adds r4, r0
- ldrh r0, [r4]
- strh r0, [r5, 0x32]
- movs r0, 0x1
- add sp, 0x8
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0811C97C: .4byte gUnknown_083FD89C
-_0811C980: .4byte gUnknown_083FD8A0
- thumb_func_end sub_811C938
-
- thumb_func_start sub_811C984
-sub_811C984: @ 811C984
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0x30]
- ldrh r3, [r1, 0x20]
- adds r2, r0, r3
- strh r2, [r1, 0x20]
- movs r3, 0x3C
- ldrsh r0, [r1, r3]
- cmp r0, 0
- beq _0811C9A2
- lsls r0, r2, 16
- asrs r0, 16
- cmp r0, 0x84
- bgt _0811C9B0
- b _0811C9AA
-_0811C9A2:
- lsls r0, r2, 16
- asrs r0, 16
- cmp r0, 0x67
- ble _0811C9B0
-_0811C9AA:
- ldrh r0, [r1, 0x2E]
- adds r0, 0x1
- strh r0, [r1, 0x2E]
-_0811C9B0:
- movs r0, 0
- pop {r1}
- bx r1
- thumb_func_end sub_811C984
-
- thumb_func_start sub_811C9B8
-sub_811C9B8: @ 811C9B8
- push {lr}
- adds r2, r0, 0
- ldrh r3, [r2, 0x32]
- ldrh r0, [r2, 0x30]
- adds r1, r3, r0
- strh r1, [r2, 0x30]
- ldrh r0, [r2, 0x20]
- adds r0, r1
- strh r0, [r2, 0x20]
- lsls r1, 16
- cmp r1, 0
- bne _0811C9DE
- ldrh r0, [r2, 0x2E]
- adds r0, 0x1
- strh r0, [r2, 0x2E]
- negs r0, r3
- strh r0, [r2, 0x32]
- movs r0, 0x1
- strh r0, [r2, 0x3A]
-_0811C9DE:
- movs r0, 0
- pop {r1}
- bx r1
- thumb_func_end sub_811C9B8
-
- thumb_func_start sub_811C9E4
-sub_811C9E4: @ 811C9E4
- push {lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x32]
- ldrh r1, [r2, 0x30]
- adds r0, r1
- strh r0, [r2, 0x30]
- ldrh r1, [r2, 0x20]
- adds r1, r0
- strh r1, [r2, 0x20]
- adds r1, 0x1F
- lsls r1, 16
- movs r0, 0x97
- lsls r0, 17
- cmp r1, r0
- bls _0811CA08
- ldrh r0, [r2, 0x2E]
- adds r0, 0x1
- strh r0, [r2, 0x2E]
-_0811CA08:
- movs r0, 0
- pop {r1}
- bx r1
- thumb_func_end sub_811C9E4
-
- thumb_func_start sub_811CA10
-sub_811CA10: @ 811CA10
- ldr r3, _0811CA24 @ =gSprites
- lsls r0, 16
- asrs r0, 16
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r3
- strh r1, [r2, 0x3C]
- bx lr
- .align 2, 0
-_0811CA24: .4byte gSprites
- thumb_func_end sub_811CA10
-
- thumb_func_start sub_811CA28
-sub_811CA28: @ 811CA28
- ldr r2, _0811CA40 @ =gSprites
- lsls r0, 16
- asrs r0, 16
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrh r0, [r1, 0x2E]
- adds r0, 0x1
- strh r0, [r1, 0x2E]
- bx lr
- .align 2, 0
-_0811CA40: .4byte gSprites
- thumb_func_end sub_811CA28
-
- thumb_func_start sub_811CA44
-sub_811CA44: @ 811CA44
- ldr r2, _0811CA58 @ =gSprites
- lsls r0, 16
- asrs r0, 16
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- movs r2, 0x3A
- ldrsh r0, [r1, r2]
- bx lr
- .align 2, 0
-_0811CA58: .4byte gSprites
- thumb_func_end sub_811CA44
-
thumb_func_start Phase2Task_Transition8
Phase2Task_Transition8: @ 811CA5C
push {r4,r5,lr}
@@ -1938,7 +1573,7 @@ _0811D64E:
thumb_func_start sub_811D658
sub_811D658: @ 811D658
push {lr}
- ldr r0, _0811D674 @ =gUnknown_083FD708
+ ldr r0, _0811D674 @ =sTransitionStructPtr
ldr r0, [r0]
movs r1, 0
movs r2, 0x3C
@@ -1949,7 +1584,7 @@ sub_811D658: @ 811D658
pop {r0}
bx r0
.align 2, 0
-_0811D674: .4byte gUnknown_083FD708
+_0811D674: .4byte sTransitionStructPtr
_0811D678: .4byte 0x0200c014
thumb_func_end sub_811D658
diff --git a/data/battle_transition.s b/data/battle_transition.s
index 94b242ed3..ae69888d1 100644
--- a/data/battle_transition.s
+++ b/data/battle_transition.s
@@ -3,79 +3,7 @@
.section .rodata
- .align 2
-gUnknown_083FBB88:: @ 83FBB88
- .incbin "graphics/battle_transitions/big_pokeball.4bpp"
-
- .align 2
-gUnknown_083FC108:: @ 83FC108
- .incbin "graphics/battle_transitions/pokeball_trail.4bpp"
-
- .align 2
-gSpriteImage_83FC148:: @ 83FC148
- .incbin "graphics/battle_transitions/pokeball.4bpp"
-
- .align 2
-gUnknown_083FC348:: @ 83FC348
- .incbin "graphics/battle_transitions/elite_four_bg.4bpp"
-
- .align 2
-gSpriteImage_83FC528:: @ 83FC528
- .incbin "graphics/battle_transitions/unused_brendan.4bpp"
-
- .align 2
-gSpriteImage_83FCD28:: @ 83FCD28
- .incbin "graphics/battle_transitions/unused_lass.4bpp"
-
- .align 2
-gUnknown_083FD528:: @ 83FD528
- .incbin "graphics/battle_transitions/shrinking_box.4bpp"
-
- .align 2
-gUnknown_083FD708:: @ 83FD708
- .4byte 0x0200c000
- .align 2
-sPhase1_Tasks:: @ 83FD70C
- .4byte Phase1Task_TransitionAll
- .4byte Phase1Task_TransitionAll
- .4byte Phase1Task_TransitionAll
- .4byte Phase1Task_TransitionAll
- .4byte Phase1Task_TransitionAll
- .4byte Phase1Task_TransitionAll
- .4byte Phase1Task_TransitionAll
- .4byte Phase1Task_TransitionAll
- .4byte Phase1Task_TransitionAll
- .4byte Phase1Task_TransitionAll
- .4byte Phase1Task_TransitionAll
- .4byte Phase1Task_TransitionAll
- .4byte Phase1Task_TransitionAll
- .4byte Phase1Task_TransitionAll
- .4byte Phase1Task_TransitionAll
- .4byte Phase1Task_TransitionAll
- .4byte Phase1Task_TransitionAll
-
- .align 2
-sPhase2_Tasks:: @ 83FD750
- .4byte Phase2Task_Transition0
- .4byte Phase2Task_Transition1
- .4byte Phase2Task_Transition2
- .4byte Phase2Task_Transition3
- .4byte Phase2Task_Transition4
- .4byte Phase2Task_Transition5
- .4byte Phase2Task_Transition6
- .4byte Phase2Task_Transition7
- .4byte Phase2Task_Transition8
- .4byte Phase2Task_Transition9
- .4byte Phase2Task_Transition10
- .4byte Phase2Task_Transition11
- .4byte Phase2Task_Transition_Sydney
- .4byte Phase2Task_Transition_Phoebe
- .4byte Phase2Task_Transition_Glacia
- .4byte Phase2Task_Transition_Drake
- .4byte Phase2Task_Transition_Steven
-
- .align 2
sMainTransitionPhases:: @ 83FD794
.4byte Transition_Phase1
.4byte Transition_WaitForPhase1
@@ -165,7 +93,7 @@ sPhase2_Mugshot_Transition_Funcs:: @ 83FD828
.4byte Phase2_Mugshot_Func9
.4byte Phase2_Mugshot_Func10
-gUnknown_083FD850:: @ 83FD850
+sMugshotsTrainerPicIDsTable:: @ 83FD850
.byte TRAINER_PIC_SIDNEY
.byte TRAINER_PIC_PHOEBE
.byte TRAINER_PIC_GLACIA
@@ -173,7 +101,7 @@ gUnknown_083FD850:: @ 83FD850
.byte TRAINER_PIC_STEVEN
.align 1
-gUnknown_083FD856:: @ 83FD856
+sMugshotsOpponentRotationScales:: @ 83FD856
.2byte 0x200, 0x200
.2byte 0x200, 0x200
.2byte 0x1B0, 0x1B0
@@ -181,7 +109,7 @@ gUnknown_083FD856:: @ 83FD856
.2byte 0x188, 0x188
.align 1
-gUnknown_083FD86A:: @ 83FD86A
+sMugshotsOpponentCoords:: @ 83FD86A
.2byte 0, 0
.2byte 0, 0
.2byte -4, 4
diff --git a/include/battle_transition.h b/include/battle_transition.h
index a709a2f7b..597e9724d 100644
--- a/include/battle_transition.h
+++ b/include/battle_transition.h
@@ -5,6 +5,8 @@ void sub_811AABC(u8);
void sub_811AAD8(u8);
bool8 IsBattleTransitionDone(void);
+#define TRANSITIONS_NO 17
+
enum // TRANSITION_MUGSHOT
{
MUGSHOT_SYDNEY,
@@ -17,8 +19,8 @@ enum // TRANSITION_MUGSHOT
#define B_TRANSITION_WILD 8
#define B_TRANSITION_SYDNEY 12
#define B_TRANSITION_PHOEBE 13
-#define B_TRANSITION_GLACIA 13
-#define B_TRANSITION_DRAKE 14
-#define B_TRANSITION_STEVEN 15
+#define B_TRANSITION_GLACIA 14
+#define B_TRANSITION_DRAKE 15
+#define B_TRANSITION_STEVEN 16
#endif // GUARD_BATTLE_TRANSITION_H
diff --git a/include/field_effect.h b/include/field_effect.h
index ea02c4131..f43b15afb 100644
--- a/include/field_effect.h
+++ b/include/field_effect.h
@@ -244,7 +244,7 @@ void sub_808948C(struct Task *);
void sub_80894C4(struct Task *);
void fishE(struct Task *);
-u8 CreateTrainerSprite_BirchSpeech(u8 gender, s16 x, s16 y, u8 subpriority, u8 *buffer);
+u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer);
void LoadTrainerGfx_TrainerCard(u8 gender, u16 palOffset, u8 *dest);
u8 CreateBirchSprite(s16 x, s16 y, u8 subpriority);
u8 CreateMonSprite_PicBox(u16, s16, s16, u8);
diff --git a/ld_script.txt b/ld_script.txt
index cdc88ac2b..80b882108 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -444,6 +444,7 @@ SECTIONS {
data/roulette.o(.rodata);
data/pokedex_cry_screen.o(.rodata);
data/landmark.o(.rodata);
+ src/battle_transition.o(.rodata);
data/battle_transition.o(.rodata);
data/battle_811DA74.o(.rodata);
data/battle_message.o(.rodata);
diff --git a/src/battle_transition.c b/src/battle_transition.c
index 5cb9de1bb..8d87f12f6 100644
--- a/src/battle_transition.c
+++ b/src/battle_transition.c
@@ -14,25 +14,8 @@
void sub_807DE10(void);
void dp12_8087EA4(void);
-typedef bool8 (*TransitionState)(struct Task* task);
-
-extern const TransitionState sMainTransitionPhases[];
-extern const TransitionState sPhase2_Transition0_Funcs[];
-extern const TransitionState sPhase2_Transition1_Funcs[];
-extern const TransitionState sPhase2_Transition2_Funcs[];
-extern const TransitionState sPhase2_Transition3_Funcs[];
-extern const TransitionState sPhase2_Transition4_Funcs[];
-extern const TransitionState sPhase2_Transition5_Funcs[];
-extern const TransitionState sPhase2_Transition6_Funcs[];
-extern const TransitionState sPhase2_Transition7_Funcs[];
-extern const TransitionState sPhase2_Mugshot_Transition_Funcs[];
-
-extern const TaskFunc sPhase1_Tasks[];
-extern const TaskFunc sPhase2_Tasks[];
-
extern u8 ewram[];
extern s16 gUnknown_03005560[];
-
extern u16 gUnknown_03004DE0[][0x3C0];
struct TransitionData
@@ -73,6 +56,25 @@ void sub_811D4C8(s16 a0, s16 a1, s16 a2, s16 a3, s16 a4);
bool8 sub_811D52C(void);
void sub_811D658(void);
+static void Phase1Task_TransitionAll(u8 taskID);
+static void Phase2Task_Transition0(u8 taskID);
+static void Phase2Task_Transition1(u8 taskID);
+static void Phase2Task_Transition2(u8 taskID);
+static void Phase2Task_Transition3(u8 taskID);
+static void Phase2Task_Transition4(u8 taskID);
+static void Phase2Task_Transition5(u8 taskID);
+static void Phase2Task_Transition6(u8 taskID);
+static void Phase2Task_Transition7(u8 taskID);
+ void Phase2Task_Transition8(u8 taskID);
+ void Phase2Task_Transition9(u8 taskID);
+ void Phase2Task_Transition10(u8 taskID);
+ void Phase2Task_Transition11(u8 taskID);
+static void Phase2Task_Transition_Sydney(u8 taskID);
+static void Phase2Task_Transition_Phoebe(u8 taskID);
+static void Phase2Task_Transition_Glacia(u8 taskID);
+static void Phase2Task_Transition_Drake(u8 taskID);
+static void Phase2Task_Transition_Steven(u8 taskID);
+
static void VBlankCB_Phase2_Transition1(void);
static void HBlankCB_Phase2_Transition1(void);
@@ -101,11 +103,77 @@ void sub_811D6D4(void);
void sub_811D8FC(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5, s16 a6);
bool8 sub_811D978(s16* a0, bool8 a1, bool8 a2);
static void Phase2Task_MugShotTransition(u8 taskID);
-void sub_811C7B0(struct Task* task);
+static void Mugshots_CreateOpponentPlayerSprites(struct Task* task);
+static void sub_811CA10(s16 spriteID, s16 value);
+static void sub_811CA28(s16 spriteID);
+static s16 sub_811CA44(s16 spriteID);
-void sub_811CA10(s16 spriteID, s16 value);
-void sub_811CA28(s16 spriteID);
-s16 sub_811CA44(s16 spriteID);
+// const data
+typedef bool8 (*TransitionState)(struct Task* task);
+typedef bool8 (*TransitionSpriteCallback)(struct Sprite* sprite);
+
+extern const TransitionState sMainTransitionPhases[];
+extern const TransitionState sPhase2_Transition0_Funcs[];
+extern const TransitionState sPhase2_Transition1_Funcs[];
+extern const TransitionState sPhase2_Transition2_Funcs[];
+extern const TransitionState sPhase2_Transition3_Funcs[];
+extern const TransitionState sPhase2_Transition4_Funcs[];
+extern const TransitionState sPhase2_Transition5_Funcs[];
+extern const TransitionState sPhase2_Transition6_Funcs[];
+extern const TransitionState sPhase2_Transition7_Funcs[];
+extern const TransitionState sPhase2_Mugshot_Transition_Funcs[];
+extern const u16 gFieldEffectObjectPalette10[];
+extern const u16 gUnknown_083FDB44[];
+extern const s16 gUnknown_083FD7E4[2];
+extern const s16 gUnknown_083FD7F2[2];
+extern const s16 gUnknown_083FD7E8[5];
+extern const struct SpriteTemplate gSpriteTemplate_83FD98C;
+extern const u16 gUnknown_083FDFF4[];
+extern const u8 * const sOpponentMugshotsPals[];
+extern const u8 * const sPlayerMugshotsPals[2];
+extern const u8 sMugshotsTrainerPicIDsTable[];
+extern const s16 sMugshotsOpponentCoords[][2];
+extern const s16 sMugshotsOpponentRotationScales[][2];
+extern const TransitionSpriteCallback gUnknown_083FD880[];
+extern const s16 gUnknown_083FD89C[2];
+extern const s16 gUnknown_083FD8A0[2];
+
+static const u32 gUnknown_083FBB88[] = INCBIN_U32("graphics/battle_transitions/big_pokeball.4bpp");
+static const u32 gUnknown_083FC108[] = INCBIN_U32("graphics/battle_transitions/pokeball_trail.4bpp");
+const u32 gSpriteImage_83FC148[] = INCBIN_U32("graphics/battle_transitions/pokeball.4bpp");
+static const u32 gUnknown_083FC348[] = INCBIN_U32("graphics/battle_transitions/elite_four_bg.4bpp");
+const u32 gSpriteImage_83FC528[] = INCBIN_U32("graphics/battle_transitions/unused_brendan.4bpp");
+const u32 gSpriteImage_83FCD28[] = INCBIN_U32("graphics/battle_transitions/unused_lass.4bpp");
+const u32 gUnknown_083FD528[] = INCBIN_U32("graphics/battle_transitions/shrinking_box.4bpp");
+struct TransitionData * const sTransitionStructPtr = &TRANSITION_STRUCT;
+
+static const TaskFunc sPhase1_Tasks[TRANSITIONS_NO] =
+{
+ [0 ... TRANSITIONS_NO - 1] = &Phase1Task_TransitionAll
+};
+
+static const TaskFunc sPhase2_Tasks[TRANSITIONS_NO] =
+{
+ &Phase2Task_Transition0, // 0
+ &Phase2Task_Transition1, // 1
+ &Phase2Task_Transition2, // 2
+ &Phase2Task_Transition3, // 3
+ &Phase2Task_Transition4, // 4
+ &Phase2Task_Transition5, // 5
+ &Phase2Task_Transition6, // 6
+ &Phase2Task_Transition7, // 7
+ &Phase2Task_Transition8, // 8
+ &Phase2Task_Transition9, // 9
+ &Phase2Task_Transition10, // 10
+ &Phase2Task_Transition11, // 11
+ &Phase2Task_Transition_Sydney, // 12
+ &Phase2Task_Transition_Phoebe, // 13
+ &Phase2Task_Transition_Glacia, // 14
+ &Phase2Task_Transition_Drake, // 15
+ &Phase2Task_Transition_Steven, // 16
+};
+
+void sub_811C90C(struct Sprite* sprite);
void sub_811AABC(u8 transitionID)
{
@@ -188,7 +256,7 @@ bool8 Transition_WaitForPhase2(struct Task* task)
return 0;
}
-void Phase1Task_TransitionAll(u8 taskID)
+static void Phase1Task_TransitionAll(u8 taskID)
{
if (gTasks[taskID].tState == 0)
{
@@ -199,7 +267,7 @@ void Phase1Task_TransitionAll(u8 taskID)
DestroyTask(taskID);
}
-void Phase2Task_Transition0(u8 taskID)
+static void Phase2Task_Transition0(u8 taskID)
{
while (sPhase2_Transition0_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
}
@@ -240,7 +308,7 @@ bool8 Phase2_Transition0_Func3(struct Task* task)
return 0;
}
-void Phase2Task_Transition1(u8 taskID)
+static void Phase2Task_Transition1(u8 taskID)
{
while (sPhase2_Transition1_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
}
@@ -300,7 +368,7 @@ static void HBlankCB_Phase2_Transition1(void)
REG_BG3HOFS = var;
}
-void Phase2Task_Transition2(u8 taskID)
+static void Phase2Task_Transition2(u8 taskID)
{
while (sPhase2_Transition2_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
}
@@ -367,14 +435,11 @@ static void HBlankCB_Phase2_Transition2(void)
REG_BG3VOFS = var;
}
-void Phase2Task_Transition3(u8 taskID)
+static void Phase2Task_Transition3(u8 taskID)
{
while (sPhase2_Transition3_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
}
-extern const u8 gUnknown_083FBB88[];
-extern const u16 gFieldEffectObjectPalette10[];
-
bool8 Phase2_Transition3_Func1(struct Task* task)
{
u16 i;
@@ -410,8 +475,6 @@ bool8 Phase2_Transition3_Func1(struct Task* task)
return 0;
}
-extern const u16 gUnknown_083FDB44[];
-
bool8 Phase2_Transition3_Func2(struct Task* task)
{
s16 i, j;
@@ -546,13 +609,11 @@ void VBlankCB1_Phase2_Transition3(void)
DmaSet(0, gUnknown_03005560, &REG_WIN0H, 0xA2400001);
}
-void Phase2Task_Transition4(u8 taskID)
+static void Phase2Task_Transition4(u8 taskID)
{
while (sPhase2_Transition4_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
}
-extern const u8 gUnknown_083FC108[];
-
bool8 Phase2_Transition4_Func1(struct Task* task)
{
u16 *dst1, *dst2;
@@ -566,10 +627,6 @@ bool8 Phase2_Transition4_Func1(struct Task* task)
return 0;
}
-extern const s16 gUnknown_083FD7E4[2];
-extern const s16 gUnknown_083FD7F2[2];
-extern const s16 gUnknown_083FD7E8[5];
-
bool8 Phase2_Transition4_Func2(struct Task* task)
{
s16 i;
@@ -603,8 +660,6 @@ bool8 Phase2_Transition4_Func3(struct Task* task)
return 0;
}
-extern const struct SpriteTemplate gSpriteTemplate_83FD98C;
-
bool8 FldEff_Pokeball(void)
{
u8 spriteID = CreateSpriteAtEnd(&gSpriteTemplate_83FD98C, gUnknown_0202FF84[0], gUnknown_0202FF84[1], 0);
@@ -659,7 +714,7 @@ void sub_811B720(struct Sprite* sprite)
}
}
-void Phase2Task_Transition5(u8 taskID)
+static void Phase2Task_Transition5(u8 taskID)
{
while (sPhase2_Transition5_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
}
@@ -931,7 +986,7 @@ static void HBlankCB_Phase2_Transition6(void)
REG_BG3VOFS = var;
}
-void Phase2Task_Transition7(u8 taskID)
+static void Phase2Task_Transition7(u8 taskID)
{
while (sPhase2_Transition7_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
}
@@ -1009,33 +1064,35 @@ static void VBlankCB_Phase2_Transition7(void)
DmaSet(0, gUnknown_03004DE0[1], &REG_WIN0H, 0xA2400001);
}
-#define tMugshotID data[15]
+#define tMugshotOpponentID data[13]
+#define tMugshotPlayerID data[14]
+#define tMugshotID data[15]
-void Phase2Task_Transition_Sydney(u8 taskID)
+static void Phase2Task_Transition_Sydney(u8 taskID)
{
gTasks[taskID].tMugshotID = MUGSHOT_SYDNEY;
Phase2Task_MugShotTransition(taskID);
}
-void Phase2Task_Transition_Phoebe(u8 taskID)
+static void Phase2Task_Transition_Phoebe(u8 taskID)
{
gTasks[taskID].tMugshotID = MUGSHOT_PHOEBE;
Phase2Task_MugShotTransition(taskID);
}
-void Phase2Task_Transition_Glacia(u8 taskID)
+static void Phase2Task_Transition_Glacia(u8 taskID)
{
gTasks[taskID].tMugshotID = MUGSHOT_GLACIA;
Phase2Task_MugShotTransition(taskID);
}
-void Phase2Task_Transition_Drake(u8 taskID)
+static void Phase2Task_Transition_Drake(u8 taskID)
{
gTasks[taskID].tMugshotID = MUGSHOT_DRAKE;
Phase2Task_MugShotTransition(taskID);
}
-void Phase2Task_Transition_Steven(u8 taskID)
+static void Phase2Task_Transition_Steven(u8 taskID)
{
gTasks[taskID].tMugshotID = MUGSHOT_STEVEN;
Phase2Task_MugShotTransition(taskID);
@@ -1052,7 +1109,7 @@ bool8 Phase2_Mugshot_Func1(struct Task* task)
sub_811D658();
dp12_8087EA4();
- sub_811C7B0(task);
+ Mugshots_CreateOpponentPlayerSprites(task);
task->data[1] = 0;
task->data[2] = 1;
@@ -1072,11 +1129,6 @@ bool8 Phase2_Mugshot_Func1(struct Task* task)
return 0;
}
-extern const u8 gUnknown_083FC348[];
-extern const u16 gUnknown_083FDFF4[];
-extern const u8 * const sOpponentMugshotsPals[];
-extern const u8 * const sPlayerMugshotsPals[2];
-
bool8 Phase2_Mugshot_Func2(struct Task* task)
{
s16 i, j;
@@ -1171,9 +1223,9 @@ bool8 Phase2_Mugshot_Func4(struct Task* task)
TRANSITION_STRUCT.field_18 -= 8;
TRANSITION_STRUCT.field_1A += 8;
- sub_811CA10(task->data[13], 0);
- sub_811CA10(task->data[14], 1);
- sub_811CA28(task->data[13]);
+ sub_811CA10(task->tMugshotOpponentID, 0);
+ sub_811CA10(task->tMugshotPlayerID, 1);
+ sub_811CA28(task->tMugshotOpponentID);
PlaySE(SE_BT_START);
@@ -1185,10 +1237,10 @@ bool8 Phase2_Mugshot_Func5(struct Task* task)
{
TRANSITION_STRUCT.field_18 -= 8;
TRANSITION_STRUCT.field_1A += 8;
- if (sub_811CA44(task->data[13]))
+ if (sub_811CA44(task->tMugshotOpponentID))
{
task->tState++;
- sub_811CA28(task->data[14]);
+ sub_811CA28(task->tMugshotPlayerID);
}
return 0;
}
@@ -1197,7 +1249,7 @@ bool8 Phase2_Mugshot_Func6(struct Task* task)
{
TRANSITION_STRUCT.field_18 -= 8;
TRANSITION_STRUCT.field_1A += 8;
- if (sub_811CA44(task->data[14]))
+ if (sub_811CA44(task->tMugshotPlayerID))
{
TRANSITION_STRUCT.field_0 = 0;
SetVBlankCallback(NULL);
@@ -1318,3 +1370,114 @@ static void HBlankCB_Phase2_Mugshots(void)
else
REG_BG0HOFS = TRANSITION_STRUCT.field_1A;
}
+
+static void Mugshots_CreateOpponentPlayerSprites(struct Task* task)
+{
+ struct Sprite *opponentSprite, *playerSprite;
+
+ s16 mugshotID = task->tMugshotID;
+ task->tMugshotOpponentID = CreateTrainerSprite(sMugshotsTrainerPicIDsTable[mugshotID],
+ sMugshotsOpponentCoords[mugshotID][0] - 32,
+ sMugshotsOpponentCoords[mugshotID][1] + 42,
+ 0, &ewram[0xC03C]);
+ task->tMugshotPlayerID = CreateTrainerSprite(gSaveBlock2.playerGender, 272, 106, 0, &ewram[0xC03C]);
+
+ opponentSprite = &gSprites[task->tMugshotOpponentID];
+ playerSprite = &gSprites[task->tMugshotPlayerID];
+
+ opponentSprite->callback = sub_811C90C;
+ playerSprite->callback = sub_811C90C;
+
+ opponentSprite->oam.affineMode = 3;
+ playerSprite->oam.affineMode = 3;
+
+ opponentSprite->oam.matrixNum = AllocOamMatrix();
+ playerSprite->oam.matrixNum = AllocOamMatrix();
+
+ opponentSprite->oam.shape = 1;
+ playerSprite->oam.shape = 1;
+
+ opponentSprite->oam.size = 3;
+ playerSprite->oam.size = 3;
+
+ CalcCenterToCornerVec(opponentSprite, 1, 3, 3);
+ CalcCenterToCornerVec(playerSprite, 1, 3, 3);
+
+ SetOamMatrixRotationScaling(opponentSprite->oam.matrixNum, sMugshotsOpponentRotationScales[mugshotID][0], sMugshotsOpponentRotationScales[mugshotID][1], 0);
+ SetOamMatrixRotationScaling(playerSprite->oam.matrixNum, -512, 0x200, 0);
+}
+
+void sub_811C90C(struct Sprite* sprite)
+{
+ while (gUnknown_083FD880[sprite->data0](sprite));
+}
+
+bool8 sub_811C934(struct Sprite* sprite)
+{
+ return 0;
+}
+
+bool8 sub_811C938(struct Sprite* sprite)
+{
+ s16 arr0[2];
+ s16 arr1[2];
+
+ memcpy(arr0, gUnknown_083FD89C, sizeof(gUnknown_083FD89C));
+ memcpy(arr1, gUnknown_083FD8A0, sizeof(gUnknown_083FD8A0));
+
+ sprite->data0++;
+ sprite->data1 = arr0[sprite->data7];
+ sprite->data2 = arr1[sprite->data7];
+ return 1;
+}
+
+bool8 sub_811C984(struct Sprite* sprite)
+{
+ sprite->pos1.x += sprite->data1;
+ if (sprite->data7 && sprite->pos1.x < 133)
+ sprite->data0++;
+ else if (!sprite->data7 && sprite->pos1.x > 103)
+ sprite->data0++;
+ return 0;
+}
+
+bool8 sub_811C9B8(struct Sprite* sprite)
+{
+ sprite->data1 += sprite->data2;
+ sprite->pos1.x += sprite->data1;
+ if (sprite->data1 == 0)
+ {
+ sprite->data0++;
+ sprite->data2 = -sprite->data2;
+ sprite->data6 = 1;
+ }
+ return 0;
+}
+
+bool8 sub_811C9E4(struct Sprite* sprite)
+{
+ sprite->data1 += sprite->data2;
+ sprite->pos1.x += sprite->data1;
+ if (sprite->pos1.x < -31 || sprite->pos1.x > 271)
+ sprite->data0++;
+ return 0;
+}
+
+static void sub_811CA10(s16 spriteID, s16 value)
+{
+ gSprites[spriteID].data7 = value;
+}
+
+static void sub_811CA28(s16 spriteID)
+{
+ gSprites[spriteID].data0++;
+}
+
+static s16 sub_811CA44(s16 spriteID)
+{
+ return gSprites[spriteID].data6;
+}
+
+#undef tMugshotOpponentID
+#undef tMugshotPlayerID
+#undef tMugshotID
diff --git a/src/field_effect.c b/src/field_effect.c
index 3632d7053..cffed2614 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -618,13 +618,13 @@ bool8 FieldEffectActiveListContains(u8 id)
return FALSE;
}
-u8 CreateTrainerSprite_BirchSpeech(u8 gender, s16 x, s16 y, u8 subpriority, u8 *buffer)
+u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer)
{
struct SpriteTemplate spriteTemplate;
- LoadCompressedObjectPaletteOverrideBuffer(&gTrainerFrontPicPaletteTable[gender], buffer);
- LoadCompressedObjectPicOverrideBuffer(&gTrainerFrontPicTable[gender], buffer);
- spriteTemplate.tileTag = gTrainerFrontPicTable[gender].tag;
- spriteTemplate.paletteTag = gTrainerFrontPicPaletteTable[gender].tag;
+ LoadCompressedObjectPaletteOverrideBuffer(&gTrainerFrontPicPaletteTable[trainerSpriteID], buffer);
+ LoadCompressedObjectPicOverrideBuffer(&gTrainerFrontPicTable[trainerSpriteID], buffer);
+ spriteTemplate.tileTag = gTrainerFrontPicTable[trainerSpriteID].tag;
+ spriteTemplate.paletteTag = gTrainerFrontPicPaletteTable[trainerSpriteID].tag;
spriteTemplate.oam = &gOamData_839F0F4;
spriteTemplate.anims = gDummySpriteAnimTable;
spriteTemplate.images = NULL;
diff --git a/src/main_menu.c b/src/main_menu.c
index 09fd06d9e..3b616065b 100644
--- a/src/main_menu.c
+++ b/src/main_menu.c
@@ -1421,14 +1421,14 @@ void AddBirchSpeechObjects(u8 taskId)
gTasks[taskId].data[TD_AZURILL_SPRITE_ID] = spriteId;
//Create Brendan sprite
- spriteId = CreateTrainerSprite_BirchSpeech(0, 120, 60, 0, unk_2000000);
+ spriteId = CreateTrainerSprite(0, 120, 60, 0, unk_2000000);
gSprites[spriteId].callback = nullsub_34;
gSprites[spriteId].invisible = 1;
gSprites[spriteId].oam.priority = 0;
gTasks[taskId].data[TD_BRENDAN_SPRITE_ID] = spriteId;
//Create May sprite
- spriteId = CreateTrainerSprite_BirchSpeech(1, 120, 60, 0, unk_2000000 + 0x800);
+ spriteId = CreateTrainerSprite(1, 120, 60, 0, unk_2000000 + 0x800);
gSprites[spriteId].callback = nullsub_34;
gSprites[spriteId].invisible = 1;
gSprites[spriteId].oam.priority = 0;