summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_transition.s266
-rw-r--r--data/battle_transition.s14
-rw-r--r--src/battle_transition.c90
3 files changed, 110 insertions, 260 deletions
diff --git a/asm/battle_transition.s b/asm/battle_transition.s
index 207b4013f..1fc26d5e7 100644
--- a/asm/battle_transition.s
+++ b/asm/battle_transition.s
@@ -7,245 +7,9 @@
.text
- thumb_func_start VBlankCB_Phase2_Transition2
-VBlankCB_Phase2_Transition2: @ 811B08C
- push {lr}
- bl VBlankCB_BattleTransition
- ldr r0, _0811B0B4 @ =0x0200c000
- ldrb r0, [r0]
- cmp r0, 0
- beq _0811B0AE
- ldr r1, _0811B0B8 @ =0x040000d4
- ldr r0, _0811B0BC @ =gUnknown_03004DE0
- str r0, [r1]
- movs r2, 0xF0
- lsls r2, 3
- adds r0, r2
- str r0, [r1, 0x4]
- ldr r0, _0811B0C0 @ =0x800000a0
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
-_0811B0AE:
- pop {r0}
- bx r0
- .align 2, 0
-_0811B0B4: .4byte 0x0200c000
-_0811B0B8: .4byte 0x040000d4
-_0811B0BC: .4byte gUnknown_03004DE0
-_0811B0C0: .4byte 0x800000a0
- thumb_func_end VBlankCB_Phase2_Transition2
-
- thumb_func_start HBlankCB_Phase2_Transition2
-HBlankCB_Phase2_Transition2: @ 811B0C4
- ldr r1, _0811B0E4 @ =gUnknown_03004DE0
- ldr r0, _0811B0E8 @ =REG_VCOUNT
- ldrh r0, [r0]
- lsls r0, 1
- movs r2, 0xF0
- lsls r2, 3
- adds r1, r2
- adds r0, r1
- ldrh r1, [r0]
- ldr r0, _0811B0EC @ =REG_BG1VOFS
- strh r1, [r0]
- adds r0, 0x4
- strh r1, [r0]
- adds r0, 0x4
- strh r1, [r0]
- bx lr
- .align 2, 0
-_0811B0E4: .4byte gUnknown_03004DE0
-_0811B0E8: .4byte REG_VCOUNT
-_0811B0EC: .4byte REG_BG1VOFS
- thumb_func_end HBlankCB_Phase2_Transition2
-
- thumb_func_start Phase2Task_Transition3
-Phase2Task_Transition3: @ 811B0F0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0811B120 @ =gUnknown_083FD7C0
- ldr r2, _0811B124 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_0811B102:
- movs r1, 0x8
- 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 _0811B102
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811B120: .4byte gUnknown_083FD7C0
-_0811B124: .4byte gTasks
- thumb_func_end Phase2Task_Transition3
-
- thumb_func_start sub_811B128
-sub_811B128: @ 811B128
- push {r4-r6,lr}
- sub sp, 0xC
- adds r4, r0, 0
- bl sub_811D658
- bl dp12_8087EA4
- movs r2, 0
- movs r3, 0x10
- strh r3, [r4, 0xA]
- strh r2, [r4, 0xC]
- strh r2, [r4, 0x10]
- movs r0, 0x80
- lsls r0, 7
- strh r0, [r4, 0x12]
- ldr r1, _0811B1BC @ =0x0200c000
- movs r0, 0x3F
- strh r0, [r1, 0x2]
- strh r2, [r1, 0x4]
- movs r0, 0xF0
- strh r0, [r1, 0x6]
- movs r0, 0xA0
- strh r0, [r1, 0x8]
- ldr r0, _0811B1C0 @ =0x00003f41
- strh r0, [r1, 0xE]
- lsls r3, 8
- strh r3, [r1, 0x10]
- movs r1, 0
- add r5, sp, 0x4
- add r6, sp, 0x8
- ldr r3, _0811B1C4 @ =gUnknown_03005560
- movs r2, 0xF0
-_0811B168:
- lsls r0, r1, 1
- adds r0, r3
- strh r2, [r0]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0x9F
- bls _0811B168
- ldr r0, _0811B1C8 @ =sub_811B520
- bl SetVBlankCallback
- adds r0, r5, 0
- adds r1, r6, 0
- bl sub_811D6A8
- mov r1, sp
- movs r0, 0
- strh r0, [r1]
- ldr r1, [sp, 0x4]
- ldr r2, _0811B1CC @ =0x01000400
- mov r0, sp
- bl CpuSet
- ldr r0, _0811B1D0 @ =gUnknown_083FBB88
- ldr r1, [sp, 0x8]
- movs r2, 0xB0
- lsls r2, 2
- bl CpuSet
- ldr r0, _0811B1D4 @ =gFieldEffectObjectPalette10
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0
- add sp, 0xC
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0811B1BC: .4byte 0x0200c000
-_0811B1C0: .4byte 0x00003f41
-_0811B1C4: .4byte gUnknown_03005560
-_0811B1C8: .4byte sub_811B520
-_0811B1CC: .4byte 0x01000400
-_0811B1D0: .4byte gUnknown_083FBB88
-_0811B1D4: .4byte gFieldEffectObjectPalette10
- thumb_func_end sub_811B128
-
- thumb_func_start sub_811B1D8
-sub_811B1D8: @ 811B1D8
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x10
- adds r7, r0, 0
- ldr r5, _0811B260 @ =gUnknown_083FDB44
- add r1, sp, 0xC
- add r0, sp, 0x8
- bl sub_811D6A8
- movs r1, 0
- ldr r0, [sp, 0x8]
- mov r9, r0
- ldr r6, _0811B264 @ =gUnknown_03004DE0
- mov r8, r6
- movs r0, 0xF0
- lsls r0, 8
- mov r12, r0
-_0811B1FE:
- movs r0, 0
- lsls r3, r1, 16
- asrs r4, r3, 11
-_0811B204:
- lsls r2, r0, 16
- asrs r2, 16
- adds r1, r4, r2
- lsls r1, 1
- add r1, r9
- ldrh r0, [r5]
- mov r6, r12
- orrs r0, r6
- strh r0, [r1]
- adds r2, 0x1
- lsls r2, 16
- adds r5, 0x2
- lsrs r0, r2, 16
- asrs r2, 16
- cmp r2, 0x1D
- ble _0811B204
- movs r1, 0x80
- lsls r1, 9
- adds r0, r3, r1
- lsrs r1, r0, 16
- asrs r0, 16
- cmp r0, 0x13
- ble _0811B1FE
- movs r6, 0x10
- ldrsh r2, [r7, r6]
- movs r1, 0x12
- ldrsh r0, [r7, r1]
- str r0, [sp]
- movs r0, 0xA0
- str r0, [sp, 0x4]
- mov r0, r8
- movs r1, 0
- movs r3, 0x84
- bl sub_811D6E8
- ldrh r0, [r7, 0x8]
- adds r0, 0x1
- strh r0, [r7, 0x8]
- movs r0, 0x1
- add sp, 0x10
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0811B260: .4byte gUnknown_083FDB44
-_0811B264: .4byte gUnknown_03004DE0
- thumb_func_end sub_811B1D8
- thumb_func_start sub_811B268
-sub_811B268: @ 811B268
+ thumb_func_start Phase2_Transition3_Func3
+Phase2_Transition3_Func3: @ 811B268
push {r4,lr}
sub sp, 0x8
adds r2, r0, 0
@@ -316,10 +80,10 @@ _0811B2AE:
_0811B2E8: .4byte 0x0200c000
_0811B2EC: .4byte 0xffffff00
_0811B2F0: .4byte gUnknown_03004DE0
- thumb_func_end sub_811B268
+ thumb_func_end Phase2_Transition3_Func3
- thumb_func_start sub_811B2F4
-sub_811B2F4: @ 811B2F4
+ thumb_func_start Phase2_Transition3_Func4
+Phase2_Transition3_Func4: @ 811B2F4
push {r4,r5,lr}
sub sp, 0x8
adds r3, r0, 0
@@ -389,10 +153,10 @@ _0811B338:
_0811B374: .4byte 0x0200c000
_0811B378: .4byte 0xffffff00
_0811B37C: .4byte gUnknown_03004DE0
- thumb_func_end sub_811B2F4
+ thumb_func_end Phase2_Transition3_Func4
- thumb_func_start sub_811B380
-sub_811B380: @ 811B380
+ thumb_func_start Phase2_Transition3_Func5
+Phase2_Transition3_Func5: @ 811B380
push {r4-r7,lr}
sub sp, 0x8
adds r4, r0, 0
@@ -445,10 +209,10 @@ _0811B3CE:
_0811B3E0: .4byte 0x0200c000
_0811B3E4: .4byte 0xffffff00
_0811B3E8: .4byte gUnknown_03004DE0
- thumb_func_end sub_811B380
+ thumb_func_end Phase2_Transition3_Func5
- thumb_func_start sub_811B3EC
-sub_811B3EC: @ 811B3EC
+ thumb_func_start Phase2_Transition3_Func6
+Phase2_Transition3_Func6: @ 811B3EC
push {r4,lr}
adds r4, r0, 0
ldr r0, _0811B488 @ =0x0200c000
@@ -535,7 +299,7 @@ _0811B498: .4byte 0x0000c5ff
_0811B49C: .4byte 0x00007fff
_0811B4A0: .4byte Phase2Task_Transition3
_0811B4A4: .4byte sub_811B54C
- thumb_func_end sub_811B3EC
+ thumb_func_end Phase2_Transition3_Func6
thumb_func_start sub_811B4A8
sub_811B4A8: @ 811B4A8
@@ -594,8 +358,8 @@ _0811B518: .4byte 0x800000a0
_0811B51C: .4byte REG_WININ
thumb_func_end sub_811B4A8
- thumb_func_start sub_811B520
-sub_811B520: @ 811B520
+ thumb_func_start VBlankCB_Phase2_Transition3
+VBlankCB_Phase2_Transition3: @ 811B520
push {lr}
bl sub_811B4A8
ldr r1, _0811B53C @ =0x040000b0
@@ -613,7 +377,7 @@ _0811B53C: .4byte 0x040000b0
_0811B540: .4byte gUnknown_03005560
_0811B544: .4byte REG_BG0HOFS
_0811B548: .4byte 0xa2400001
- thumb_func_end sub_811B520
+ thumb_func_end VBlankCB_Phase2_Transition3
thumb_func_start sub_811B54C
sub_811B54C: @ 811B54C
diff --git a/data/battle_transition.s b/data/battle_transition.s
index 11d3bfe37..975de2997 100644
--- a/data/battle_transition.s
+++ b/data/battle_transition.s
@@ -99,13 +99,13 @@ sPhase2_Transition2_Funcs:: @ 83FD7B8
.4byte Phase2_Transition2_Func2
.align 2
-gUnknown_083FD7C0:: @ 83FD7C0
- .4byte sub_811B128
- .4byte sub_811B1D8
- .4byte sub_811B268
- .4byte sub_811B2F4
- .4byte sub_811B380
- .4byte sub_811B3EC
+sPhase2_Transition3_Funcs:: @ 83FD7C0
+ .4byte Phase2_Transition3_Func1
+ .4byte Phase2_Transition3_Func2
+ .4byte Phase2_Transition3_Func3
+ .4byte Phase2_Transition3_Func4
+ .4byte Phase2_Transition3_Func5
+ .4byte Phase2_Transition3_Func6
.align 2
gUnknown_083FD7D8:: @ 83FD7D8
diff --git a/src/battle_transition.c b/src/battle_transition.c
index 47adccf21..ed6bdf387 100644
--- a/src/battle_transition.c
+++ b/src/battle_transition.c
@@ -14,6 +14,7 @@ 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 TaskFunc sPhase1_Tasks[];
extern const TaskFunc sPhase2_Tasks[];
@@ -49,12 +50,16 @@ static void Task_BattleTransitionMain(u8 taskID);
void sub_811D4C8(s16 a0, s16 a1, s16 a2, s16 a3, s16 a4);
bool8 sub_811D52C(void);
void sub_811D658(void);
+
static void VBlankCB_Phase2_Transition1(void);
static void HBlankCB_Phase2_Transition1(void);
-void VBlankCB_Phase2_Transition2(void);
-void HBlankCB_Phase2_Transition2(void);
+static void VBlankCB_Phase2_Transition2(void);
+static void HBlankCB_Phase2_Transition2(void);
+void VBlankCB_Phase2_Transition3(void);
+
void VBlankCB_BattleTransition(void);
void sub_811D6E8(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5);
+void sub_811D6A8(u16** a0, u16** a1);
void sub_811AABC(u8 transitionID)
{
@@ -300,3 +305,84 @@ bool8 Phase2_Transition2_Func2(struct Task* task)
TRANSITION_STRUCT.field_0++;
return 0;
}
+
+static void VBlankCB_Phase2_Transition2(void)
+{
+ VBlankCB_BattleTransition();
+ if (TRANSITION_STRUCT.field_0)
+ DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320);
+}
+
+static void HBlankCB_Phase2_Transition2(void)
+{
+ u16 var = gUnknown_03004DE0[1][REG_VCOUNT];
+ REG_BG1VOFS = var;
+ REG_BG2VOFS = var;
+ REG_BG3VOFS = var;
+}
+
+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;
+ u16 *dst1, *dst2;
+
+ sub_811D658();
+ dp12_8087EA4();
+
+ task->data[1] = 16;
+ task->data[2] = 0;
+ task->data[4] = 0;
+ task->data[5] = 0x4000;
+ TRANSITION_STRUCT.field_2 = 63;
+ TRANSITION_STRUCT.field_4 = 0;
+ TRANSITION_STRUCT.field_6 = 240;
+ TRANSITION_STRUCT.field_8 = 160;
+ TRANSITION_STRUCT.field_E = 0x3F41;
+ TRANSITION_STRUCT.field_10 = task->data[1] * 256; // 16 * 256 = 0x1000
+
+ for (i = 0; i < 160; i++)
+ {
+ gUnknown_03005560[i] = 240;
+ }
+
+ SetVBlankCallback(VBlankCB_Phase2_Transition3);
+
+ sub_811D6A8(&dst1, & dst2);
+ CpuFill16(0, dst1, 0x800);
+ CpuSet(gUnknown_083FBB88, dst2, 0x2C0);
+ LoadPalette(gFieldEffectObjectPalette10, 240, 32);
+
+ task->tState++;
+ return 0;
+}
+
+extern const u16 gUnknown_083FDB44[];
+
+bool8 Phase2_Transition3_Func2(struct Task* task)
+{
+ s16 i, j;
+ u16 *dst1, *dst2;
+ const u16* var;
+
+ var = gUnknown_083FDB44;
+ sub_811D6A8(&dst1, &dst2);
+ for (i = 0; i < 20; i++)
+ {
+ for (j = 0; j < 30; j++, var++)
+ {
+ dst1[i * 32 + j] = *var | 0xF000;
+ }
+ }
+ sub_811D6E8(gUnknown_03004DE0[0], 0, task->data[4], 132, task->data[5], 160);
+
+ task->tState++;
+ return 1;
+}