mirror of
https://github.com/pret/pokeruby.git
synced 2026-09-09 19:46:35 -05:00
start decompiling battle transition
This commit is contained in:
@@ -2082,7 +2082,7 @@ sub_8135534: @ 8135534
|
||||
push {r4,lr}
|
||||
lsls r0, 24
|
||||
lsrs r4, r0, 24
|
||||
bl sub_811AAE8
|
||||
bl IsBattleTransitionDone
|
||||
lsls r0, 24
|
||||
lsrs r0, 24
|
||||
cmp r0, 0x1
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -36,67 +36,67 @@ gUnknown_083FD708:: @ 83FD708
|
||||
.4byte 0x0200c000
|
||||
|
||||
.align 2
|
||||
gUnknown_083FD70C:: @ 83FD70C
|
||||
.4byte sub_811AC64
|
||||
.4byte sub_811AC64
|
||||
.4byte sub_811AC64
|
||||
.4byte sub_811AC64
|
||||
.4byte sub_811AC64
|
||||
.4byte sub_811AC64
|
||||
.4byte sub_811AC64
|
||||
.4byte sub_811AC64
|
||||
.4byte sub_811AC64
|
||||
.4byte sub_811AC64
|
||||
.4byte sub_811AC64
|
||||
.4byte sub_811AC64
|
||||
.4byte sub_811AC64
|
||||
.4byte sub_811AC64
|
||||
.4byte sub_811AC64
|
||||
.4byte sub_811AC64
|
||||
.4byte sub_811AC64
|
||||
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
|
||||
gBattleTransitionFuncs:: @ 83FD750
|
||||
.4byte sub_811ACB4
|
||||
.4byte sub_811ADAC
|
||||
.4byte sub_811AF44
|
||||
.4byte sub_811B0F0
|
||||
.4byte sub_811B578
|
||||
.4byte sub_811B7E8
|
||||
.4byte sub_811BCBC
|
||||
.4byte sub_811BEA0
|
||||
.4byte sub_811CA5C
|
||||
.4byte sub_811CCDC
|
||||
.4byte sub_811D0B8
|
||||
.4byte sub_811D1C8
|
||||
.4byte sub_811C08C
|
||||
.4byte sub_811C0AC
|
||||
.4byte sub_811C0CC
|
||||
.4byte sub_811C0EC
|
||||
.4byte sub_811C10C
|
||||
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_Transition12
|
||||
.4byte Phase2Task_Transition13
|
||||
.4byte Phase2Task_Transition14
|
||||
.4byte Phase2Task_Transition15
|
||||
.4byte Phase2Task_Transition16
|
||||
|
||||
.align 2
|
||||
gUnknown_083FD794:: @ 83FD794
|
||||
.4byte sub_811AB88
|
||||
.4byte sub_811ABD8
|
||||
.4byte sub_811AC0C
|
||||
.4byte sub_811AC34
|
||||
sMainTransitionPhases:: @ 83FD794
|
||||
.4byte Transition_Phase1
|
||||
.4byte Transition_WaitForPhase1
|
||||
.4byte Transition_Phase2
|
||||
.4byte Transition_WaitForPhase2
|
||||
|
||||
.align 2
|
||||
gUnknown_083FD7A4:: @ 83FD7A4
|
||||
.4byte sub_811ACEC
|
||||
.4byte sub_811AD1C
|
||||
.4byte sub_811AD80
|
||||
sPhase2_Transition0_Funcs:: @ 83FD7A4
|
||||
.4byte Phase2_Transition0_Func1
|
||||
.4byte Phase2_Transition0_Func2
|
||||
.4byte Phase2_Transition0_Func3
|
||||
|
||||
.align 2
|
||||
gUnknown_083FD7B0:: @ 83FD7B0
|
||||
.4byte sub_811ADE4
|
||||
.4byte sub_811AE70
|
||||
sPhase2_Transition1_Funcs:: @ 83FD7B0
|
||||
.4byte Phase2_Transition1_Func1
|
||||
.4byte Phase2_Transition1_Func2
|
||||
|
||||
.align 2
|
||||
gUnknown_083FD7B8:: @ 83FD7B8
|
||||
.4byte sub_811AF7C
|
||||
.4byte sub_811B000
|
||||
sPhase2_Transition2_Funcs:: @ 83FD7B8
|
||||
.4byte Phase2_Transition2_Func1
|
||||
.4byte Phase2_Transition2_Func2
|
||||
|
||||
.align 2
|
||||
gUnknown_083FD7C0:: @ 83FD7C0
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
|
||||
void sub_811AABC(u8);
|
||||
void sub_811AAD8(u8);
|
||||
u8 sub_811AAE8(void);
|
||||
bool8 IsBattleTransitionDone(void);
|
||||
|
||||
#define B_TRANSITION_WILD 8
|
||||
|
||||
#endif // GUARD_BATTLE_TRANSITION_H
|
||||
|
||||
@@ -120,7 +120,7 @@ bool32 is_c1_link_related_active(void);
|
||||
// c1_overworld_normal
|
||||
// c1_overworld
|
||||
// c2_overworld_basic
|
||||
// sub_8054398
|
||||
void sub_8054398(void);
|
||||
void c2_overworld(void);
|
||||
// set_callback1
|
||||
// sub_80543DC
|
||||
|
||||
@@ -227,6 +227,7 @@ SECTIONS {
|
||||
src/coins.o(.text);
|
||||
src/landmark.o(.text);
|
||||
src/fldeff_strength.o(.text);
|
||||
src/battle_transition.o(.text);
|
||||
asm/battle_transition.o(.text);
|
||||
src/battle_811DA74.o(.text);
|
||||
asm/battle_message.o(.text);
|
||||
|
||||
@@ -438,7 +438,7 @@ void task01_battle_start(u8 taskId)
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (sub_811AAE8() == TRUE)
|
||||
if (IsBattleTransitionDone() == TRUE)
|
||||
{
|
||||
SetMainCallback2(sub_800E7C4);
|
||||
prev_quest_postbuffer_cursor_backup_reset();
|
||||
@@ -827,7 +827,7 @@ void CB2_StartFirstBattle(void)
|
||||
UpdatePaletteFade();
|
||||
RunTasks();
|
||||
|
||||
if (sub_811AAE8() == TRUE)
|
||||
if (IsBattleTransitionDone() == TRUE)
|
||||
{
|
||||
gBattleTypeFlags = BATTLE_TYPE_FIRST_BATTLE;
|
||||
gMain.savedCallback = HandleFirstBattleEnd;
|
||||
|
||||
302
src/battle_transition.c
Normal file
302
src/battle_transition.c
Normal file
@@ -0,0 +1,302 @@
|
||||
#include "global.h"
|
||||
#include "main.h"
|
||||
#include "rom4.h"
|
||||
#include "task.h"
|
||||
#include "palette.h"
|
||||
#include "trig.h"
|
||||
|
||||
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 TaskFunc sPhase1_Tasks[];
|
||||
extern const TaskFunc sPhase2_Tasks[];
|
||||
|
||||
extern u8 ewram[];
|
||||
extern s16 gUnknown_03005560[];
|
||||
|
||||
extern u16 gUnknown_03004DE0[][0x3C0];
|
||||
|
||||
struct TransitionData
|
||||
{
|
||||
vs8 field_0; // now that's interesting
|
||||
s8 field_1;
|
||||
s16 field_2;
|
||||
s16 field_4;
|
||||
s16 field_6;
|
||||
s16 field_8;
|
||||
s16 field_A;
|
||||
s16 field_C;
|
||||
s16 field_E;
|
||||
s16 field_10;
|
||||
s16 field_12;
|
||||
s16 field_14;
|
||||
s16 field_16;
|
||||
s16 field_18;
|
||||
};
|
||||
|
||||
#define TRANSITION_STRUCT (*(struct TransitionData *) (&ewram[0xC000]))
|
||||
|
||||
// this file's functions
|
||||
static void LaunchBattleTransitionTask(u8 transitionID);
|
||||
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);
|
||||
void VBlankCB_BattleTransition(void);
|
||||
void sub_811D6E8(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5);
|
||||
|
||||
void sub_811AABC(u8 transitionID)
|
||||
{
|
||||
gMain.callback2 = sub_8054398;
|
||||
LaunchBattleTransitionTask(transitionID);
|
||||
}
|
||||
|
||||
void sub_811AAD8(u8 transitionID)
|
||||
{
|
||||
LaunchBattleTransitionTask(transitionID);
|
||||
}
|
||||
|
||||
#define tState data[0]
|
||||
#define tTransitionID data[1]
|
||||
#define tTransitionDone data[15]
|
||||
|
||||
bool8 IsBattleTransitionDone(void)
|
||||
{
|
||||
u8 taskID = FindTaskIdByFunc(Task_BattleTransitionMain);
|
||||
if (gTasks[taskID].tTransitionDone)
|
||||
{
|
||||
DestroyTask(taskID);
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void LaunchBattleTransitionTask(u8 transitionID)
|
||||
{
|
||||
u8 taskID = CreateTask(Task_BattleTransitionMain, 2);
|
||||
gTasks[taskID].tTransitionID = transitionID;
|
||||
}
|
||||
|
||||
static void Task_BattleTransitionMain(u8 taskID)
|
||||
{
|
||||
while (sMainTransitionPhases[gTasks[taskID].tState](&gTasks[taskID]));
|
||||
}
|
||||
|
||||
bool8 Transition_Phase1(struct Task* task)
|
||||
{
|
||||
sub_807DE10();
|
||||
CpuSet(gPlttBufferFaded, gPlttBufferUnfaded, 0x4000100);
|
||||
if (sPhase1_Tasks[task->tTransitionID] != NULL)
|
||||
{
|
||||
CreateTask(sPhase1_Tasks[task->tTransitionID], 4);
|
||||
task->tState++;
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
task->tState = 2;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
bool8 Transition_WaitForPhase1(struct Task* task)
|
||||
{
|
||||
if (FindTaskIdByFunc(sPhase1_Tasks[task->tTransitionID]) == 0xFF)
|
||||
{
|
||||
task->tState++;
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool8 Transition_Phase2(struct Task* task)
|
||||
{
|
||||
CreateTask(sPhase2_Tasks[task->tTransitionID], 0);
|
||||
task->tState++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool8 Transition_WaitForPhase2(struct Task* task)
|
||||
{
|
||||
task->tTransitionDone = 0;
|
||||
if (FindTaskIdByFunc(sPhase2_Tasks[task->tTransitionID]) == 0xFF)
|
||||
task->tTransitionDone = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Phase1Task_TransitionAll(u8 taskID)
|
||||
{
|
||||
if (gTasks[taskID].tState == 0)
|
||||
{
|
||||
gTasks[taskID].tState++;
|
||||
sub_811D4C8(0, 0, 3, 2, 2);
|
||||
}
|
||||
else if (sub_811D52C())
|
||||
DestroyTask(taskID);
|
||||
}
|
||||
|
||||
void Phase2Task_Transition0(u8 taskID)
|
||||
{
|
||||
while (sPhase2_Transition0_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
|
||||
}
|
||||
|
||||
bool8 Phase2_Transition0_Func1(struct Task* task)
|
||||
{
|
||||
REG_MOSAIC = 0;
|
||||
REG_BG1CNT |= 0x40;
|
||||
REG_BG2CNT |= 0x40;
|
||||
REG_BG3CNT |= 0x40;
|
||||
task->tState++;
|
||||
return 1;
|
||||
}
|
||||
|
||||
bool8 Phase2_Transition0_Func2(struct Task* task)
|
||||
{
|
||||
if (task->data[1] != 0)
|
||||
task->data[1]--;
|
||||
else
|
||||
{
|
||||
task->data[1] = 4;
|
||||
if (++task->data[2] == 10)
|
||||
BeginNormalPaletteFade(-1, -1, 0, 0x10, 0);
|
||||
REG_MOSAIC = (task->data[2] & 15) * 17;
|
||||
if (task->data[2] > 14)
|
||||
task->tState++;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool8 Phase2_Transition0_Func3(struct Task* task)
|
||||
{
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
u8 taskID = FindTaskIdByFunc(Phase2Task_Transition0);
|
||||
DestroyTask(taskID);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Phase2Task_Transition1(u8 taskID)
|
||||
{
|
||||
while (sPhase2_Transition1_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
|
||||
}
|
||||
|
||||
bool8 Phase2_Transition1_Func1(struct Task* task)
|
||||
{
|
||||
u16 savedIME;
|
||||
|
||||
sub_811D658();
|
||||
dp12_8087EA4();
|
||||
BeginNormalPaletteFade(-1, 4, 0, 0x10, 0);
|
||||
sub_811D6E8(gUnknown_03005560, TRANSITION_STRUCT.field_14, 0, 2, 0, 160);
|
||||
|
||||
SetVBlankCallback(VBlankCB_Phase2_Transition1);
|
||||
SetHBlankCallback(HBlankCB_Phase2_Transition1);
|
||||
|
||||
savedIME = REG_IME;
|
||||
REG_IME = 0;
|
||||
REG_IE |= 3;
|
||||
REG_IME = savedIME;
|
||||
REG_DISPSTAT |= 0x18;
|
||||
|
||||
task->tState++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool8 Phase2_Transition1_Func2(struct Task* task)
|
||||
{
|
||||
TRANSITION_STRUCT.field_0 = 0;
|
||||
task->data[1] += 4;
|
||||
task->data[2] += 8;
|
||||
|
||||
sub_811D6E8(gUnknown_03004DE0[0], TRANSITION_STRUCT.field_14, task->data[1], 2, task->data[2], 160);
|
||||
|
||||
if (!gPaletteFade.active)
|
||||
{
|
||||
u8 taskID = FindTaskIdByFunc(Phase2Task_Transition1);
|
||||
DestroyTask(taskID);
|
||||
}
|
||||
|
||||
TRANSITION_STRUCT.field_0++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void VBlankCB_Phase2_Transition1(void)
|
||||
{
|
||||
VBlankCB_BattleTransition();
|
||||
if (TRANSITION_STRUCT.field_0)
|
||||
DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320);
|
||||
}
|
||||
|
||||
static void HBlankCB_Phase2_Transition1(void)
|
||||
{
|
||||
u16 var = gUnknown_03004DE0[1][REG_VCOUNT];
|
||||
REG_BG1HOFS = var;
|
||||
REG_BG2HOFS = var;
|
||||
REG_BG3HOFS = var;
|
||||
}
|
||||
|
||||
void Phase2Task_Transition2(u8 taskID)
|
||||
{
|
||||
while (sPhase2_Transition2_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
|
||||
}
|
||||
|
||||
bool8 Phase2_Transition2_Func1(struct Task* task)
|
||||
{
|
||||
u16 savedIME;
|
||||
|
||||
sub_811D658();
|
||||
dp12_8087EA4();
|
||||
|
||||
BeginNormalPaletteFade(-1, 4, 0, 0x10, 0);
|
||||
memset(gUnknown_03005560, TRANSITION_STRUCT.field_16, 0x140);
|
||||
|
||||
SetVBlankCallback(VBlankCB_Phase2_Transition2);
|
||||
SetHBlankCallback(HBlankCB_Phase2_Transition2);
|
||||
|
||||
savedIME = REG_IME;
|
||||
REG_IME = 0;
|
||||
REG_IE |= 3;
|
||||
REG_IME = savedIME;
|
||||
REG_DISPSTAT |= 0x18;
|
||||
|
||||
task->tState++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool8 Phase2_Transition2_Func2(struct Task* task)
|
||||
{
|
||||
u8 i;
|
||||
u16 r3, r4;
|
||||
|
||||
TRANSITION_STRUCT.field_0 = 0;
|
||||
r4 = task->data[1];
|
||||
r3 = task->data[2] >> 8;
|
||||
task->data[1] += 4224;
|
||||
task->data[2] += 384;
|
||||
|
||||
for (i = 0; i < 160; i++, r4 += 4224)
|
||||
{
|
||||
u16 var = r4 / 256;
|
||||
gUnknown_03004DE0[0][i] = Sin(var, r3) + TRANSITION_STRUCT.field_16;
|
||||
}
|
||||
|
||||
if (!gPaletteFade.active)
|
||||
DestroyTask(FindTaskIdByFunc(Phase2Task_Transition2));
|
||||
|
||||
TRANSITION_STRUCT.field_0++;
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user