diff options
-rw-r--r-- | asm/battle_transition.s | 48 | ||||
-rw-r--r-- | data/battle_transition.s | 15 | ||||
-rw-r--r-- | src/battle_transition.c | 52 |
3 files changed, 60 insertions, 55 deletions
diff --git a/asm/battle_transition.s b/asm/battle_transition.s index cc3c98062..fbed395e5 100644 --- a/asm/battle_transition.s +++ b/asm/battle_transition.s @@ -7,38 +7,8 @@ .text - thumb_func_start Phase2Task_Transition8 -Phase2Task_Transition8: @ 811CA5C - push {r4,r5,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r5, _0811CA8C @ =gUnknown_083FD8A4 - ldr r2, _0811CA90 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 -_0811CA6E: - 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 _0811CA6E - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0811CA8C: .4byte gUnknown_083FD8A4 -_0811CA90: .4byte gTasks - thumb_func_end Phase2Task_Transition8 - - thumb_func_start sub_811CA94 -sub_811CA94: @ 811CA94 + thumb_func_start Phase2_Transition8_Func1 +Phase2_Transition8_Func1: @ 811CA94 push {r4-r6,lr} adds r4, r0, 0 bl sub_811D658 @@ -101,10 +71,10 @@ _0811CB10: .4byte 0x04000200 _0811CB14: .4byte REG_DISPSTAT _0811CB18: .4byte sub_811CC28 _0811CB1C: .4byte sub_811CCB0 - thumb_func_end sub_811CA94 + thumb_func_end Phase2_Transition8_Func1 - thumb_func_start sub_811CB20 -sub_811CB20: @ 811CB20 + thumb_func_start Phase2_Transition8_Func2 +Phase2_Transition8_Func2: @ 811CB20 push {r4-r7,lr} mov r7, r8 push {r7} @@ -208,10 +178,10 @@ _0811CBCE: pop {r4-r7} pop {r1} bx r1 - thumb_func_end sub_811CB20 + thumb_func_end Phase2_Transition8_Func2 - thumb_func_start sub_811CBE8 -sub_811CBE8: @ 811CBE8 + thumb_func_start Phase2_Transition8_Func3 +Phase2_Transition8_Func3: @ 811CBE8 push {lr} ldr r1, _0811CC18 @ =0x040000b0 ldrh r2, [r1, 0xA] @@ -237,7 +207,7 @@ _0811CC18: .4byte 0x040000b0 _0811CC1C: .4byte 0x0000c5ff _0811CC20: .4byte 0x00007fff _0811CC24: .4byte Phase2Task_Transition8 - thumb_func_end sub_811CBE8 + thumb_func_end Phase2_Transition8_Func3 thumb_func_start sub_811CC28 sub_811CC28: @ 811CC28 diff --git a/data/battle_transition.s b/data/battle_transition.s index ae69888d1..95f5c4737 100644 --- a/data/battle_transition.s +++ b/data/battle_transition.s @@ -4,13 +4,6 @@ .section .rodata -sMainTransitionPhases:: @ 83FD794 - .4byte Transition_Phase1 - .4byte Transition_WaitForPhase1 - .4byte Transition_Phase2 - .4byte Transition_WaitForPhase2 - - .align 2 sPhase2_Transition0_Funcs:: @ 83FD7A4 .4byte Phase2_Transition0_Func1 .4byte Phase2_Transition0_Func2 @@ -135,10 +128,10 @@ gUnknown_083FD8A0:: @ 83FD8A0 .2byte -1, 1 .align 2 -gUnknown_083FD8A4:: @ 83FD8A4 - .4byte sub_811CA94 - .4byte sub_811CB20 - .4byte sub_811CBE8 +sPhase2_Transition8_Funcs:: @ 83FD8A4 + .4byte Phase2_Transition8_Func1 + .4byte Phase2_Transition8_Func2 + .4byte Phase2_Transition8_Func3 .align 2 gUnknown_083FD8B0:: @ 83FD8B0 diff --git a/src/battle_transition.c b/src/battle_transition.c index 8d87f12f6..9ef012bb2 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -74,6 +74,10 @@ 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 bool8 Transition_Phase1(struct Task* task); +static bool8 Transition_WaitForPhase1(struct Task* task); +static bool8 Transition_Phase2(struct Task* task); +static bool8 Transition_WaitForPhase2(struct Task* task); static void VBlankCB_Phase2_Transition1(void); static void HBlankCB_Phase2_Transition1(void); @@ -112,7 +116,6 @@ static s16 sub_811CA44(s16 spriteID); 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[]; @@ -121,6 +124,7 @@ 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_Transition8_Funcs[]; extern const TransitionState sPhase2_Mugshot_Transition_Funcs[]; extern const u16 gFieldEffectObjectPalette10[]; extern const u16 gUnknown_083FDB44[]; @@ -173,6 +177,14 @@ static const TaskFunc sPhase2_Tasks[TRANSITIONS_NO] = &Phase2Task_Transition_Steven, // 16 }; +static const TransitionState sMainTransitionPhases[] = +{ + &Transition_Phase1, + &Transition_WaitForPhase1, + &Transition_Phase2, + &Transition_WaitForPhase2 +}; + void sub_811C90C(struct Sprite* sprite); void sub_811AABC(u8 transitionID) @@ -213,7 +225,7 @@ static void Task_BattleTransitionMain(u8 taskID) while (sMainTransitionPhases[gTasks[taskID].tState](&gTasks[taskID])); } -bool8 Transition_Phase1(struct Task* task) +static bool8 Transition_Phase1(struct Task* task) { sub_807DE10(); CpuSet(gPlttBufferFaded, gPlttBufferUnfaded, 0x4000100); @@ -230,7 +242,7 @@ bool8 Transition_Phase1(struct Task* task) } } -bool8 Transition_WaitForPhase1(struct Task* task) +static bool8 Transition_WaitForPhase1(struct Task* task) { if (FindTaskIdByFunc(sPhase1_Tasks[task->tTransitionID]) == 0xFF) { @@ -241,14 +253,14 @@ bool8 Transition_WaitForPhase1(struct Task* task) return 0; } -bool8 Transition_Phase2(struct Task* task) +static bool8 Transition_Phase2(struct Task* task) { CreateTask(sPhase2_Tasks[task->tTransitionID], 0); task->tState++; return 0; } -bool8 Transition_WaitForPhase2(struct Task* task) +static bool8 Transition_WaitForPhase2(struct Task* task) { task->tTransitionDone = 0; if (FindTaskIdByFunc(sPhase2_Tasks[task->tTransitionID]) == 0xFF) @@ -1481,3 +1493,33 @@ static s16 sub_811CA44(s16 spriteID) #undef tMugshotOpponentID #undef tMugshotPlayerID #undef tMugshotID + +void Phase2Task_Transition8(u8 taskID) +{ + while (sPhase2_Transition8_Funcs[gTasks[taskID].tState](&gTasks[taskID])); +} + +bool8 Phase2_Transition7_Func1(struct Task* task) +{ + u8 i; + + sub_811D658(); + dp12_8087EA4(); + + task->data[2] = 256; + task->data[3] = 256; + TRANSITION_STRUCT.WININ = 63; + TRANSITION_STRUCT.WINOUT = 0; + TRANSITION_STRUCT.WIN0V = 160; + + for (i = 0; i < 160; i++) + { + gUnknown_03004DE0[1][i] = TRANSITION_STRUCT.field_14; + gUnknown_03004DE0[1][160 + i] = 0xF0; + } + + SetVBlankCallback(VBlankCB_Phase2_Transition7); + + task->tState++; + return 1; +} |