summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/battle/anim/draw.c28
-rw-r--r--src/battle/battle_2.c22
-rw-r--r--src/battle/battle_transition.c148
-rw-r--r--src/contest.c2
-rw-r--r--src/debug/matsuda_debug_menu.c2
-rw-r--r--src/easy_chat_1.c6
-rw-r--r--src/easy_chat_2.c2
-rw-r--r--src/engine/trainer_card.c28
-rw-r--r--src/field/field_screen_effect.c18
-rw-r--r--src/field/overworld.c6
-rw-r--r--src/field/use_pokeblock.c4
-rw-r--r--src/pokenav_before.c2
-rw-r--r--src/scanline_effect.c170
-rw-r--r--src/scene/evolution_scene.c4
-rw-r--r--src/scene/title_screen.c4
15 files changed, 234 insertions, 212 deletions
diff --git a/src/battle/anim/draw.c b/src/battle/anim/draw.c
index ac1ae08cb..fc74e3f46 100755
--- a/src/battle/anim/draw.c
+++ b/src/battle/anim/draw.c
@@ -21,7 +21,8 @@ static void sub_80D0E8C(struct Sprite* sprite);
void sub_80D0C88(u8 taskId)
{
struct Task* task = &gTasks[taskId];
- struct UnknownTaskStruct sp;
+ struct ScanlineEffectParams params;
+
s16 i;
task->data[0] = sub_8077FC0(gAnimBankTarget) + 32;
task->data[1] = 4;
@@ -30,30 +31,31 @@ void sub_80D0C88(u8 taskId)
task->data[4] = 0;
task->data[5] = 0;
task->data[15] = sub_807A100(gAnimBankTarget, 0);
+
if (GetBankIdentity_permutated(gAnimBankTarget) == 1)
{
task->data[6] = gBattle_BG1_X;
- sp.dest = (u16 *)REG_ADDR_BG1HOFS;
+ params.dmaDest = (u16 *)REG_ADDR_BG1HOFS;
}
else
{
task->data[6] = gBattle_BG2_X;
- sp.dest = (u16 *)REG_ADDR_BG2HOFS;
+ params.dmaDest = (u16 *)REG_ADDR_BG2HOFS;
}
for (i = task->data[0] - 0x40; i <= task->data[0];i++)
{
if (i >= 0)
{
- gUnknown_03004DE0[0][i] = task->data[6] + 0xF0;
- gUnknown_03004DE0[1][i] = task->data[6] + 0xF0;
+ gScanlineEffectRegBuffers[0][i] = task->data[6] + 0xF0;
+ gScanlineEffectRegBuffers[1][i] = task->data[6] + 0xF0;
}
}
- sp.control = 0xa2600001;
- sp.unk8 = 1;
- sp.unk9 = 0;
- sub_80895F8(sp);
+ params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
+ params.unk8 = 1;
+ params.unk9 = 0;
+ ScanlineEffect_SetParams(params);
task->func = sub_80D0D68;
}
@@ -91,8 +93,8 @@ void sub_80D0D68(u8 taskId)
if (task->data[5] >= 0)
{
- gUnknown_03004DE0[0][task->data[5]] = task->data[6];
- gUnknown_03004DE0[1][task->data[5]] = task->data[6];
+ gScanlineEffectRegBuffers[0][task->data[5]] = task->data[6];
+ gScanlineEffectRegBuffers[1][task->data[5]] = task->data[6];
}
if (++task->data[3] >= task->data[15])
@@ -178,7 +180,7 @@ _080D0DE0:\n\
ldrsh r0, [r3, r1]\n\
cmp r0, 0\n\
blt _080D0E04\n\
- ldr r2, _080D0E28 @ =gUnknown_03004DE0\n\
+ ldr r2, _080D0E28 @ =gScanlineEffectRegBuffers\n\
lsls r0, 1\n\
adds r0, r2\n\
ldrh r1, [r3, 0x14]\n\
@@ -212,7 +214,7 @@ _080D0E22:\n\
pop {r0}\n\
bx r0\n\
.align 2, 0\n\
-_080D0E28: .4byte gUnknown_03004DE0\n\
+_080D0E28: .4byte gScanlineEffectRegBuffers\n\
_080D0E2C: .4byte gScanlineEffect\n\
.syntax divided\n");
}
diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c
index da6c9a2b4..f4fff742c 100644
--- a/src/battle/battle_2.c
+++ b/src/battle/battle_2.c
@@ -223,17 +223,17 @@ void InitBattle(void)
for (i = 0; i < 80; i++)
{
- gUnknown_03004DE0[0][i] = 0xF0;
- gUnknown_03004DE0[1][i] = 0xF0;
+ gScanlineEffectRegBuffers[0][i] = 0xF0;
+ gScanlineEffectRegBuffers[1][i] = 0xF0;
}
for (i = 80; i < 160; i++)
{
asm(""::"r"(i)); // Needed to stop the compiler from optimizing out the loop counter
- gUnknown_03004DE0[0][i] = 0xFF10;
- gUnknown_03004DE0[1][i] = 0xFF10;
+ gScanlineEffectRegBuffers[0][i] = 0xFF10;
+ gScanlineEffectRegBuffers[1][i] = 0xFF10;
}
- //sub_80895F8(gUnknown_081F9674.unk0, gUnknown_081F9674.unk4, gUnknown_081F9674.unk8);
- sub_80895F8(gUnknown_081F9674);
+ //ScanlineEffect_SetParams(gUnknown_081F9674.unk0, gUnknown_081F9674.unk4, gUnknown_081F9674.unk8);
+ ScanlineEffect_SetParams(gUnknown_081F9674);
Text_LoadWindowTemplate(&gWindowTemplate_81E6C58);
ResetPaletteFade();
gBattle_BG0_X = 0;
@@ -1073,7 +1073,7 @@ void sub_800FCFC(void)
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
- ScanlineEffect_TransferDma();
+ ScanlineEffect_InitHBlankDmaTransfer();
}
void nullsub_36(struct Sprite *sprite)
@@ -1201,14 +1201,14 @@ void c2_8011A1C(void)
for (i = 0; i < 80; i++)
{
- gUnknown_03004DE0[0][i] = 0xF0;
- gUnknown_03004DE0[1][i] = 0xF0;
+ gScanlineEffectRegBuffers[0][i] = 0xF0;
+ gScanlineEffectRegBuffers[1][i] = 0xF0;
}
for (i = 80; i < 160; i++)
{
asm(""::"r"(i)); // Needed to stop the compiler from optimizing out the loop counter
- gUnknown_03004DE0[0][i] = 0xFF10;
- gUnknown_03004DE0[1][i] = 0xFF10;
+ gScanlineEffectRegBuffers[0][i] = 0xFF10;
+ gScanlineEffectRegBuffers[1][i] = 0xFF10;
}
Text_LoadWindowTemplate(&gWindowTemplate_81E6C58);
ResetPaletteFade();
diff --git a/src/battle/battle_transition.c b/src/battle/battle_transition.c
index 48ef86fa2..843203a1e 100644
--- a/src/battle/battle_transition.c
+++ b/src/battle/battle_transition.c
@@ -18,8 +18,6 @@
void sub_807DE10(void);
void dp12_8087EA4(void);
-extern u16 gUnknown_03005560[];
-
extern const struct OamData gFieldOamData_32x32;
struct TransitionData
@@ -674,7 +672,7 @@ static bool8 Phase2_Transition_Swirl_Func1(struct Task* task)
sub_811D658();
dp12_8087EA4();
BeginNormalPaletteFade(-1, 4, 0, 0x10, 0);
- sub_811D6E8(gUnknown_03005560, TRANSITION_STRUCT.field_14, 0, 2, 0, 160);
+ sub_811D6E8(gScanlineEffectRegBuffers[1], TRANSITION_STRUCT.field_14, 0, 2, 0, 160);
SetVBlankCallback(VBlankCB_Phase2_Transition_Swirl);
SetHBlankCallback(HBlankCB_Phase2_Transition_Swirl);
@@ -695,7 +693,7 @@ static bool8 Phase2_Transition_Swirl_Func2(struct Task* task)
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);
+ sub_811D6E8(gScanlineEffectRegBuffers[0], TRANSITION_STRUCT.field_14, task->data[1], 2, task->data[2], 160);
if (!gPaletteFade.active)
{
@@ -711,12 +709,12 @@ static void VBlankCB_Phase2_Transition_Swirl(void)
{
VBlankCB_BattleTransition();
if (TRANSITION_STRUCT.VBlank_DMA)
- DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320);
+ DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320);
}
static void HBlankCB_Phase2_Transition_Swirl(void)
{
- u16 var = gUnknown_03004DE0[1][REG_VCOUNT];
+ u16 var = gScanlineEffectRegBuffers[1][REG_VCOUNT];
REG_BG1HOFS = var;
REG_BG2HOFS = var;
REG_BG3HOFS = var;
@@ -735,7 +733,7 @@ static bool8 Phase2_Transition_Shuffle_Func1(struct Task* task)
dp12_8087EA4();
BeginNormalPaletteFade(-1, 4, 0, 0x10, 0);
- memset(gUnknown_03005560, TRANSITION_STRUCT.field_16, 0x140);
+ memset(gScanlineEffectRegBuffers[1], TRANSITION_STRUCT.field_16, 0x140);
SetVBlankCallback(VBlankCB_Phase2_Transition_Shuffle);
SetHBlankCallback(HBlankCB_Phase2_Transition_Shuffle);
@@ -764,7 +762,7 @@ static bool8 Phase2_Transition_Shuffle_Func2(struct Task* task)
for (i = 0; i < 160; i++, r4 += 4224)
{
u16 var = r4 / 256;
- gUnknown_03004DE0[0][i] = TRANSITION_STRUCT.field_16 + Sin(var, r3);
+ gScanlineEffectRegBuffers[0][i] = TRANSITION_STRUCT.field_16 + Sin(var, r3);
}
if (!gPaletteFade.active)
@@ -778,12 +776,12 @@ static void VBlankCB_Phase2_Transition_Shuffle(void)
{
VBlankCB_BattleTransition();
if (TRANSITION_STRUCT.VBlank_DMA)
- DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320);
+ DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320);
}
static void HBlankCB_Phase2_Transition_Shuffle(void)
{
- u16 var = gUnknown_03004DE0[1][REG_VCOUNT];
+ u16 var = gScanlineEffectRegBuffers[1][REG_VCOUNT];
REG_BG1VOFS = var;
REG_BG2VOFS = var;
REG_BG3VOFS = var;
@@ -815,7 +813,7 @@ static bool8 Phase2_Transition_BigPokeball_Func1(struct Task* task)
for (i = 0; i < 160; i++)
{
- gUnknown_03005560[i] = 240;
+ gScanlineEffectRegBuffers[1][i] = 240;
}
SetVBlankCallback(VBlankCB0_Phase2_Transition_BigPokeball);
@@ -844,7 +842,7 @@ static bool8 Phase2_Transition_BigPokeball_Func2(struct Task* task)
dst1[i * 32 + j] = *BigPokeballMap | 0xF000;
}
}
- sub_811D6E8(gUnknown_03004DE0[0], 0, task->data[4], 132, task->data[5], 160);
+ sub_811D6E8(gScanlineEffectRegBuffers[0], 0, task->data[4], 132, task->data[5], 160);
task->tState++;
return TRUE;
@@ -864,7 +862,7 @@ static bool8 Phase2_Transition_BigPokeball_Func3(struct Task* task)
task->data[4] += 8;
task->data[5] -= 256;
- sub_811D6E8(gUnknown_03004DE0[0], 0, task->data[4], 132, task->data[5] >> 8, 160);
+ sub_811D6E8(gScanlineEffectRegBuffers[0], 0, task->data[4], 132, task->data[5] >> 8, 160);
TRANSITION_STRUCT.VBlank_DMA++;
return FALSE;
@@ -884,7 +882,7 @@ static bool8 Phase2_Transition_BigPokeball_Func4(struct Task* task)
task->data[4] += 8;
task->data[5] -= 256;
- sub_811D6E8(gUnknown_03004DE0[0], 0, task->data[4], 132, task->data[5] >> 8, 160);
+ sub_811D6E8(gScanlineEffectRegBuffers[0], 0, task->data[4], 132, task->data[5] >> 8, 160);
TRANSITION_STRUCT.VBlank_DMA++;
return FALSE;
@@ -896,7 +894,7 @@ static bool8 Phase2_Transition_BigPokeball_Func5(struct Task* task)
task->data[4] += 8;
task->data[5] -= 256;
- sub_811D6E8(gUnknown_03004DE0[0], 0, task->data[4], 132, task->data[5] >> 8, 160);
+ sub_811D6E8(gScanlineEffectRegBuffers[0], 0, task->data[4], 132, task->data[5] >> 8, 160);
if (task->data[5] <= 0)
{
@@ -921,7 +919,7 @@ static bool8 Phase2_Transition_BigPokeball_Func6(struct Task* task)
if (task->data[1] < 0)
task->data[1] = 0;
}
- sub_811D764(gUnknown_03004DE0[0], 120, 80, task->data[1]);
+ sub_811D764(gScanlineEffectRegBuffers[0], 120, 80, task->data[1]);
if (task->data[1] == 0)
{
DmaStop(0);
@@ -943,7 +941,7 @@ static void Transition_BigPokeball_Vblank(void)
DmaStop(0);
VBlankCB_BattleTransition();
if (TRANSITION_STRUCT.VBlank_DMA)
- DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320);
+ DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320);
REG_WININ = TRANSITION_STRUCT.WININ;
REG_WINOUT = TRANSITION_STRUCT.WINOUT;
REG_WIN0V = TRANSITION_STRUCT.WIN0V;
@@ -954,13 +952,13 @@ static void Transition_BigPokeball_Vblank(void)
static void VBlankCB0_Phase2_Transition_BigPokeball(void)
{
Transition_BigPokeball_Vblank();
- DmaSet(0, gUnknown_03005560, &REG_BG0HOFS, 0xA2400001);
+ DmaSet(0, gScanlineEffectRegBuffers[1], &REG_BG0HOFS, 0xA2400001);
}
static void VBlankCB1_Phase2_Transition_BigPokeball(void)
{
Transition_BigPokeball_Vblank();
- DmaSet(0, gUnknown_03005560, &REG_WIN0H, 0xA2400001);
+ DmaSet(0, gScanlineEffectRegBuffers[1], &REG_WIN0H, 0xA2400001);
}
static void Phase2Task_Transition_PokeballsTrail(u8 taskID)
@@ -1087,7 +1085,7 @@ static bool8 Phase2_Transition_Clockwise_BlackFade_Func1(struct Task* task)
for (i = 0; i < 160; i++)
{
- gUnknown_03005560[i] = 0xF3F4;
+ gScanlineEffectRegBuffers[1][i] = 0xF3F4;
}
SetVBlankCallback(VBlankCB_Phase2_Transition_Clockwise_BlackFade);
@@ -1104,7 +1102,7 @@ static bool8 Phase2_Transition_Clockwise_BlackFade_Func2(struct Task* task)
sub_811D8FC(TRANSITION_STRUCT.data, 120, 80, TRANSITION_STRUCT.data[4], -1, 1, 1);
do
{
- gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] = (TRANSITION_STRUCT.data[2] + 1) | 0x7800;
+ gScanlineEffectRegBuffers[0][TRANSITION_STRUCT.data[3]] = (TRANSITION_STRUCT.data[2] + 1) | 0x7800;
} while (!sub_811D978(TRANSITION_STRUCT.data, 1, 1));
TRANSITION_STRUCT.data[4] += 16;
@@ -1132,7 +1130,7 @@ static bool8 Phase2_Transition_Clockwise_BlackFade_Func3(struct Task* task)
r1 = 120, r3 = TRANSITION_STRUCT.data[2] + 1;
if (TRANSITION_STRUCT.data[5] >= 80)
r1 = TRANSITION_STRUCT.data[2], r3 = 240;
- gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] = (r3) | (r1 << 8);
+ gScanlineEffectRegBuffers[0][TRANSITION_STRUCT.data[3]] = (r3) | (r1 << 8);
if (var != 0)
break;
var = sub_811D978(TRANSITION_STRUCT.data, 1, 1);
@@ -1148,7 +1146,7 @@ static bool8 Phase2_Transition_Clockwise_BlackFade_Func3(struct Task* task)
{
while (TRANSITION_STRUCT.data[3] < TRANSITION_STRUCT.data[5])
{
- gUnknown_03004DE0[0][++TRANSITION_STRUCT.data[3]] = (r3) | (r1 << 8);
+ gScanlineEffectRegBuffers[0][++TRANSITION_STRUCT.data[3]] = (r3) | (r1 << 8);
}
}
@@ -1163,7 +1161,7 @@ static bool8 Phase2_Transition_Clockwise_BlackFade_Func4(struct Task* task)
sub_811D8FC(TRANSITION_STRUCT.data, 120, 80, TRANSITION_STRUCT.data[4], 160, 1, 1);
do
{
- gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] = (TRANSITION_STRUCT.data[2] << 8) | 0xF0;
+ gScanlineEffectRegBuffers[0][TRANSITION_STRUCT.data[3]] = (TRANSITION_STRUCT.data[2] << 8) | 0xF0;
} while (!sub_811D978(TRANSITION_STRUCT.data, 1, 1));
TRANSITION_STRUCT.data[4] -= 16;
@@ -1188,10 +1186,10 @@ static bool8 Phase2_Transition_Clockwise_BlackFade_Func5(struct Task* task)
while (1)
{
- r1 = gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] & 0xFF, r2 = TRANSITION_STRUCT.data[2];
+ r1 = gScanlineEffectRegBuffers[0][TRANSITION_STRUCT.data[3]] & 0xFF, r2 = TRANSITION_STRUCT.data[2];
if (TRANSITION_STRUCT.data[5] <= 80)
r2 = 120, r1 = TRANSITION_STRUCT.data[2];
- gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] = (r1) | (r2 << 8);
+ gScanlineEffectRegBuffers[0][TRANSITION_STRUCT.data[3]] = (r1) | (r2 << 8);
r3 = 0;
if (var != 0)
break;
@@ -1208,7 +1206,7 @@ static bool8 Phase2_Transition_Clockwise_BlackFade_Func5(struct Task* task)
{
while (TRANSITION_STRUCT.data[3] > TRANSITION_STRUCT.data[5])
{
- gUnknown_03004DE0[0][--TRANSITION_STRUCT.data[3]] = (r1) | (r2 << 8);
+ gScanlineEffectRegBuffers[0][--TRANSITION_STRUCT.data[3]] = (r1) | (r2 << 8);
}
}
@@ -1228,7 +1226,7 @@ static bool8 Phase2_Transition_Clockwise_BlackFade_Func6(struct Task* task)
r2 = 120, r3 = TRANSITION_STRUCT.data[2];
if (TRANSITION_STRUCT.data[2] >= 120)
r2 = 0, r3 = 240;
- gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] = (r3) | (r2 << 8);
+ gScanlineEffectRegBuffers[0][TRANSITION_STRUCT.data[3]] = (r3) | (r2 << 8);
} while (!sub_811D978(TRANSITION_STRUCT.data, 1, 1));
@@ -1253,12 +1251,12 @@ static void VBlankCB_Phase2_Transition_Clockwise_BlackFade(void)
DmaStop(0);
VBlankCB_BattleTransition();
if (TRANSITION_STRUCT.VBlank_DMA != 0)
- DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320);
+ DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320);
REG_WININ = TRANSITION_STRUCT.WININ;
REG_WINOUT = TRANSITION_STRUCT.WINOUT;
REG_WIN0V = TRANSITION_STRUCT.WIN0V;
- REG_WIN0H = gUnknown_03004DE0[1][0];
- DmaSet(0, gUnknown_03004DE0[1], &REG_WIN0H, 0xA2400001);
+ REG_WIN0H = gScanlineEffectRegBuffers[1][0];
+ DmaSet(0, gScanlineEffectRegBuffers[1], &REG_WIN0H, 0xA2400001);
}
static void Phase2Task_Transition_Ripple(u8 taskID)
@@ -1275,7 +1273,7 @@ static bool8 Phase2_Transition_Ripple_Func1(struct Task* task)
for (i = 0; i < 160; i++)
{
- gUnknown_03005560[i] = TRANSITION_STRUCT.field_16;
+ gScanlineEffectRegBuffers[1][i] = TRANSITION_STRUCT.field_16;
}
SetVBlankCallback(VBlankCB_Phase2_Transition_Ripple);
@@ -1308,7 +1306,7 @@ static bool8 Phase2_Transition_Ripple_Func2(struct Task* task)
// todo: fix the asm
s16 var = r4 >> 8;
asm("");
- gUnknown_03004DE0[0][i] = TRANSITION_STRUCT.field_16 + Sin(var, r3);
+ gScanlineEffectRegBuffers[0][i] = TRANSITION_STRUCT.field_16 + Sin(var, r3);
asm("");
}
@@ -1329,12 +1327,12 @@ static void VBlankCB_Phase2_Transition_Ripple(void)
{
VBlankCB_BattleTransition();
if (TRANSITION_STRUCT.VBlank_DMA)
- DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320);
+ DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320);
}
static void HBlankCB_Phase2_Transition_Ripple(void)
{
- u16 var = gUnknown_03004DE0[1][REG_VCOUNT];
+ u16 var = gScanlineEffectRegBuffers[1][REG_VCOUNT];
REG_BG1VOFS = var;
REG_BG2VOFS = var;
REG_BG3VOFS = var;
@@ -1359,7 +1357,7 @@ static bool8 Phase2_Transition_Wave_Func1(struct Task* task)
for (i = 0; i < 160; i++)
{
- gUnknown_03004DE0[1][i] = 242;
+ gScanlineEffectRegBuffers[1][i] = 242;
}
SetVBlankCallback(VBlankCB_Phase2_Transition_Wave);
@@ -1375,7 +1373,7 @@ static bool8 Phase2_Transition_Wave_Func2(struct Task* task)
bool8 nextFunc;
TRANSITION_STRUCT.VBlank_DMA = 0;
- toStore = gUnknown_03004DE0[0];
+ toStore = gScanlineEffectRegBuffers[0];
r5 = task->data[2];
task->data[2] += 16;
task->data[1] += 8;
@@ -1411,11 +1409,11 @@ static void VBlankCB_Phase2_Transition_Wave(void)
DmaStop(0);
VBlankCB_BattleTransition();
if (TRANSITION_STRUCT.VBlank_DMA != 0)
- DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320);
+ DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320);
REG_WININ = TRANSITION_STRUCT.WININ;
REG_WINOUT = TRANSITION_STRUCT.WINOUT;
REG_WIN0V = TRANSITION_STRUCT.WIN0V;
- DmaSet(0, gUnknown_03004DE0[1], &REG_WIN0H, 0xA2400001);
+ DmaSet(0, gScanlineEffectRegBuffers[1], &REG_WIN0H, 0xA2400001);
}
#define tMugshotOpponentID data[13]
@@ -1474,7 +1472,7 @@ static bool8 Phase2_Mugshot_Func1(struct Task* task)
for (i = 0; i < 160; i++)
{
- gUnknown_03004DE0[1][i] = 0xF0F1;
+ gScanlineEffectRegBuffers[1][i] = 0xF0F1;
}
SetVBlankCallback(VBlankCB0_Phase2_Mugshots);
@@ -1519,7 +1517,7 @@ static bool8 Phase2_Mugshot_Func3(struct Task* task)
TRANSITION_STRUCT.VBlank_DMA = 0;
- toStore = gUnknown_03004DE0[0];
+ toStore = gScanlineEffectRegBuffers[0];
r5 = task->data[1];
task->data[1] += 0x10;
@@ -1565,7 +1563,7 @@ static bool8 Phase2_Mugshot_Func4(struct Task* task)
TRANSITION_STRUCT.VBlank_DMA = 0;
- for (i = 0, toStore = gUnknown_03004DE0[0]; i < 160; i++, toStore++)
+ for (i = 0, toStore = gScanlineEffectRegBuffers[0]; i < 160; i++, toStore++)
{
*toStore = 0xF0;
}
@@ -1608,8 +1606,8 @@ static bool8 Phase2_Mugshot_Func6(struct Task* task)
TRANSITION_STRUCT.VBlank_DMA = 0;
SetVBlankCallback(NULL);
DmaStop(0);
- memset(gUnknown_03004DE0[0], 0, 0x140);
- memset(gUnknown_03004DE0[1], 0, 0x140);
+ memset(gScanlineEffectRegBuffers[0], 0, 0x140);
+ memset(gScanlineEffectRegBuffers[1], 0, 0x140);
REG_WIN0H = 0xF0;
REG_BLDY = 0;
task->tState++;
@@ -1642,15 +1640,15 @@ static bool8 Phase2_Mugshot_Func7(struct Task* task)
{
s16 index1 = 0x50 - i;
s16 index2 = 0x50 + i;
- if (gUnknown_03004DE0[0][index1] <= 15)
+ if (gScanlineEffectRegBuffers[0][index1] <= 15)
{
r6 = TRUE;
- gUnknown_03004DE0[0][index1]++;
+ gScanlineEffectRegBuffers[0][index1]++;
}
- if (gUnknown_03004DE0[0][index2] <= 15)
+ if (gScanlineEffectRegBuffers[0][index2] <= 15)
{
r6 = TRUE;
- gUnknown_03004DE0[0][index2]++;
+ gScanlineEffectRegBuffers[0][index2]++;
}
}
}
@@ -1678,7 +1676,7 @@ static bool8 Phase2_Mugshot_Func9(struct Task* task)
TRANSITION_STRUCT.VBlank_DMA = 0;
task->data[3]++;
- memset(gUnknown_03004DE0[0], task->data[3], 0x140);
+ memset(gScanlineEffectRegBuffers[0], task->data[3], 0x140);
if (task->data[3] > 15)
task->tState++;
@@ -1699,12 +1697,12 @@ static void VBlankCB0_Phase2_Mugshots(void)
DmaStop(0);
VBlankCB_BattleTransition();
if (TRANSITION_STRUCT.VBlank_DMA != 0)
- DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320);
+ DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320);
REG_BG0VOFS = TRANSITION_STRUCT.field_1C;
REG_WININ = TRANSITION_STRUCT.WININ;
REG_WINOUT = TRANSITION_STRUCT.WINOUT;
REG_WIN0V = TRANSITION_STRUCT.WIN0V;
- DmaSet(0, gUnknown_03004DE0[1], &REG_WIN0H, 0xA2400001);
+ DmaSet(0, gScanlineEffectRegBuffers[1], &REG_WIN0H, 0xA2400001);
}
static void VBlankCB1_Phase2_Mugshots(void)
@@ -1712,9 +1710,9 @@ static void VBlankCB1_Phase2_Mugshots(void)
DmaStop(0);
VBlankCB_BattleTransition();
if (TRANSITION_STRUCT.VBlank_DMA != 0)
- DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320);
+ DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320);
REG_BLDCNT = TRANSITION_STRUCT.BLDCNT;
- DmaSet(0, gUnknown_03004DE0[1], &REG_BLDY, 0xA2400001);
+ DmaSet(0, gScanlineEffectRegBuffers[1], &REG_BLDY, 0xA2400001);
}
static void HBlankCB_Phase2_Mugshots(void)
@@ -1856,8 +1854,8 @@ static bool8 Phase2_Transition_Slice_Func1(struct Task* task)
for (i = 0; i < 160; i++)
{
- gUnknown_03004DE0[1][i] = TRANSITION_STRUCT.field_14;
- gUnknown_03004DE0[1][160 + i] = 0xF0;
+ gScanlineEffectRegBuffers[1][i] = TRANSITION_STRUCT.field_14;
+ gScanlineEffectRegBuffers[1][160 + i] = 0xF0;
}
REG_IE |= INTR_FLAG_HBLANK;
@@ -1886,8 +1884,8 @@ static bool8 Phase2_Transition_Slice_Func2(struct Task* task)
for (i = 0; i < 160; i++)
{
- u16* storeLoc1 = &gUnknown_03004DE0[0][i];
- u16* storeLoc2 = &gUnknown_03004DE0[0][i + 160];
+ u16* storeLoc1 = &gScanlineEffectRegBuffers[0][i];
+ u16* storeLoc2 = &gScanlineEffectRegBuffers[0][i + 160];
if (1 & i)
{
*storeLoc1 = TRANSITION_STRUCT.field_14 + task->data[1];
@@ -1923,13 +1921,13 @@ static void VBlankCB_Phase2_Transition_Slice(void)
REG_WINOUT = TRANSITION_STRUCT.WINOUT;
REG_WIN0V = TRANSITION_STRUCT.WIN0V;
if (TRANSITION_STRUCT.VBlank_DMA)
- DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 640);
- DmaSet(0, &gUnknown_03004DE0[1][160], &REG_WIN0H, 0xA2400001);
+ DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 640);
+ DmaSet(0, &gScanlineEffectRegBuffers[1][160], &REG_WIN0H, 0xA2400001);
}
static void HBlankCB_Phase2_Transition_Slice(void)
{
- u16 var = gUnknown_03004DE0[1][REG_VCOUNT];
+ u16 var = gScanlineEffectRegBuffers[1][REG_VCOUNT];
REG_BG1HOFS = var;
REG_BG2HOFS = var;
REG_BG3HOFS = var;
@@ -1955,8 +1953,8 @@ static bool8 Phase2_Transition_WhiteFade_Func1(struct Task* task)
for (i = 0; i < 160; i++)
{
- gUnknown_03004DE0[1][i] = 0;
- gUnknown_03004DE0[1][i + 160] = 0xF0;
+ gScanlineEffectRegBuffers[1][i] = 0;
+ gScanlineEffectRegBuffers[1][i + 160] = 0xF0;
}
REG_IE |= INTR_FLAG_HBLANK;
@@ -2038,8 +2036,8 @@ static void VBlankCB0_Phase2_Transition_WhiteFade(void)
REG_WINOUT = TRANSITION_STRUCT.WINOUT;
REG_WIN0V = TRANSITION_STRUCT.field_6;
if (TRANSITION_STRUCT.VBlank_DMA)
- DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 640);
- DmaSet(0, &gUnknown_03004DE0[1][160], &REG_WIN0H, 0xA2400001);
+ DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 640);
+ DmaSet(0, &gScanlineEffectRegBuffers[1][160], &REG_WIN0H, 0xA2400001);
}
static void VBlankCB1_Phase2_Transition_WhiteFade(void)
@@ -2055,7 +2053,7 @@ static void VBlankCB1_Phase2_Transition_WhiteFade(void)
static void HBlankCB_Phase2_Transition_WhiteFade(void)
{
- REG_BLDY = gUnknown_03004DE0[1][REG_VCOUNT];
+ REG_BLDY = gScanlineEffectRegBuffers[1][REG_VCOUNT];
}
static void sub_811CFD0(struct Sprite* sprite)
@@ -2069,8 +2067,8 @@ static void sub_811CFD0(struct Sprite* sprite)
else
{
u16 i;
- u16* ptr1 = &gUnknown_03004DE0[0][sprite->pos1.y];
- u16* ptr2 = &gUnknown_03004DE0[0][sprite->pos1.y + 160];
+ u16* ptr1 = &gScanlineEffectRegBuffers[0][sprite->pos1.y];
+ u16* ptr2 = &gScanlineEffectRegBuffers[0][sprite->pos1.y + 160];
for (i = 0; i < 20; i++)
{
ptr1[i] = sprite->data[0] >> 8;
@@ -2168,10 +2166,10 @@ static bool8 Phase2_Transition_Shards_Func1(struct Task* task)
for (i = 0; i < 160; i++)
{
- gUnknown_03004DE0[0][i] = 0xF0;
+ gScanlineEffectRegBuffers[0][i] = 0xF0;
}
- CpuSet(gUnknown_03004DE0[0], gUnknown_03004DE0[1], 0xA0);
+ CpuSet(gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 0xA0);
SetVBlankCallback(VBlankCB_Phase2_Transition_Shards);
task->tState++;
@@ -2200,8 +2198,8 @@ static bool8 Phase2_Transition_Shards_Func3(struct Task* task)
for (i = 0, nextFunc = FALSE; i < 16; i++)
{
- s16 r3 = gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] >> 8;
- s16 r4 = gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] & 0xFF;
+ s16 r3 = gScanlineEffectRegBuffers[0][TRANSITION_STRUCT.data[3]] >> 8;
+ s16 r4 = gScanlineEffectRegBuffers[0][TRANSITION_STRUCT.data[3]] & 0xFF;
if (task->data[2] == 0)
{
if (r3 < TRANSITION_STRUCT.data[2])
@@ -2216,7 +2214,7 @@ static bool8 Phase2_Transition_Shards_Func3(struct Task* task)
if (r4 <= r3)
r4 = r3;
}
- gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] = (r4) | (r3 << 8);
+ gScanlineEffectRegBuffers[0][TRANSITION_STRUCT.data[3]] = (r4) | (r3 << 8);
if (nextFunc)
{
task->tState++;
@@ -2263,12 +2261,12 @@ static void VBlankCB_Phase2_Transition_Shards(void)
DmaStop(0);
VBlankCB_BattleTransition();
if (TRANSITION_STRUCT.VBlank_DMA)
- DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320);
+ DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320);
REG_WININ = TRANSITION_STRUCT.WININ;
REG_WINOUT = TRANSITION_STRUCT.WINOUT;
REG_WIN0V = TRANSITION_STRUCT.WIN0V;
- REG_WIN0H = gUnknown_03004DE0[1][0];
- DmaSet(0, gUnknown_03004DE0[1], &REG_WIN0H, 0xA2400001);
+ REG_WIN0H = gScanlineEffectRegBuffers[1][0];
+ DmaSet(0, gScanlineEffectRegBuffers[1], &REG_WIN0H, 0xA2400001);
}
static void CreatePhase1Task(s16 a0, s16 a1, s16 a2, s16 a3, s16 a4)
diff --git a/src/contest.c b/src/contest.c
index e39ce3daa..e41838cb1 100644
--- a/src/contest.c
+++ b/src/contest.c
@@ -635,7 +635,7 @@ void ContestVBlankCallback(void)
TransferPlttBuffer();
LoadOam();
ProcessSpriteCopyRequests();
- ScanlineEffect_TransferDma();
+ ScanlineEffect_InitHBlankDmaTransfer();
}
void sub_80ABB70(u8 taskId)
diff --git a/src/debug/matsuda_debug_menu.c b/src/debug/matsuda_debug_menu.c
index 85a8800e7..7c250b584 100644
--- a/src/debug/matsuda_debug_menu.c
+++ b/src/debug/matsuda_debug_menu.c
@@ -516,7 +516,7 @@ static void sub_80AA090(void)
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
- ScanlineEffect_TransferDma();
+ ScanlineEffect_InitHBlankDmaTransfer();
}
static void sub_80AA10C(void)
diff --git a/src/easy_chat_1.c b/src/easy_chat_1.c
index 7ca647b93..3bed951d6 100644
--- a/src/easy_chat_1.c
+++ b/src/easy_chat_1.c
@@ -43,7 +43,7 @@ const u16 gBerryMasterWifePhrases[][2] =
// const pointer to gEasyChatStruct-> easy_chat might be two separate files.
struct Shared1000 *const gEasyChatStruct = (struct Shared1000 *)(gSharedMem + 0x1000);
-const struct UnknownTaskStruct gUnknown_083DB698 =
+const struct ScanlineEffectParams gUnknown_083DB698 =
{
&REG_BG3VOFS,
((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1,
@@ -300,7 +300,7 @@ void sub_80E62F8(void)
dp12_8087EA4();
ScanlineEffect_Stop();
sub_80EAD08();
- sub_80895F8(gUnknown_083DB698);
+ ScanlineEffect_SetParams(gUnknown_083DB698);
FreeSpriteTileRanges();
FreeAllSpritePalettes();
break;
@@ -655,7 +655,7 @@ void sub_80E6A6C(void)
ProcessSpriteCopyRequests();
sub_80EAC5C();
TransferPlttBuffer();
- ScanlineEffect_TransferDma();
+ ScanlineEffect_InitHBlankDmaTransfer();
}
void sub_80E6A88(void)
diff --git a/src/easy_chat_2.c b/src/easy_chat_2.c
index 0f12b978d..e7b65bef0 100644
--- a/src/easy_chat_2.c
+++ b/src/easy_chat_2.c
@@ -2053,7 +2053,7 @@ void sub_80EAD08(void)
u16 r2;
u16 i;
- r4 = gUnknown_03004DE0[gScanlineEffect.srcBank];
+ r4 = gScanlineEffectRegBuffers[gScanlineEffect.srcBank];
r4 += 88;
r2 = (gEasyChatStruct->unk1BA - 88) & 0xFF;
diff --git a/src/engine/trainer_card.c b/src/engine/trainer_card.c
index f1b115610..be22b24c4 100644
--- a/src/engine/trainer_card.c
+++ b/src/engine/trainer_card.c
@@ -256,7 +256,7 @@ static void sub_8093254(void)
ewram0_2.var_5 ^= 1;
}
if (ewram0_2.var_4)
- DmaCopy16(3, &gUnknown_03004DE0[0], &gUnknown_03004DE0[1], 0x140);
+ DmaCopy16(3, &gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 0x140);
}
static void sub_80932AC(Callback callBack)
@@ -732,7 +732,7 @@ bool8 sub_8093AA0(struct Task *task)
ewram0_2.var_4 = FALSE;
dp12_8087EA4();
for (i = 0; i < 0xA0; i++)
- gUnknown_03004DE0[1][i] = -4;
+ gScanlineEffectRegBuffers[1][i] = -4;
SetHBlankCallback(sub_8093D7C);
ewram0_2.var_4 = TRUE;
task->data[0]++;
@@ -768,7 +768,7 @@ bool8 sub_8093AF0(struct Task *task)
for (i = 0; i < r7; i++)
{
- gUnknown_03004DE0.filler0[i] = -4 - (u32)i;
+ gScanlineEffectRegBuffers.filler0[i] = -4 - (u32)i;
}
//_08093B74
for (; i < r9; i++)
@@ -776,10 +776,10 @@ bool8 sub_8093AF0(struct Task *task)
u16 var = r6 >> 16;
r6 += r5;
r5 -= sp0;
- gUnknown_03004DE0.filler0[i] = -4 + var;
+ gScanlineEffectRegBuffers.filler0[i] = -4 + var;
}
for (; i < 160; i++)
- gUnknown_03004DE0.filler0[i] = -4 + (u16)(r10 >> 16);
+ gScanlineEffectRegBuffers.filler0[i] = -4 + (u16)(r10 >> 16);
ewram0_2.var_4 = 1;
if (task->data[1] > 0x4A)
task->data[0]++;
@@ -840,7 +840,7 @@ _08093B18:\n\
movs r3, 0\n\
cmp r3, r7\n\
bcs _08093B74\n\
- ldr r2, _08093C04 @ =gUnknown_03004DE0\n\
+ ldr r2, _08093C04 @ =gScanlineEffectRegBuffers\n\
mov r12, r2\n\
ldr r0, _08093C08 @ =0x0000fffc\n\
adds r4, r0, 0\n\
@@ -866,7 +866,7 @@ _08093B74:\n\
lsrs r7, r4, 16\n\
cmp r2, r0\n\
bge _08093BAE\n\
- ldr r0, _08093C04 @ =gUnknown_03004DE0\n\
+ ldr r0, _08093C04 @ =gScanlineEffectRegBuffers\n\
mov r9, r0\n\
ldr r4, _08093C08 @ =0x0000fffc\n\
mov r12, r4\n\
@@ -894,7 +894,7 @@ _08093BAE:\n\
asrs r0, 16\n\
cmp r0, 0x9F\n\
bgt _08093BD4\n\
- ldr r4, _08093C04 @ =gUnknown_03004DE0\n\
+ ldr r4, _08093C04 @ =gScanlineEffectRegBuffers\n\
ldr r0, _08093C08 @ =0x0000fffc\n\
adds r2, r1, r0\n\
_08093BBE:\n\
@@ -934,7 +934,7 @@ _08093BEA:\n\
.align 2, 0\n\
_08093BFC: .4byte gSharedMem\n\
_08093C00: .4byte 0xffff0000\n\
-_08093C04: .4byte gUnknown_03004DE0\n\
+_08093C04: .4byte gScanlineEffectRegBuffers\n\
_08093C08: .4byte 0x0000fffc\n\
.syntax divided\n");
}
@@ -1000,7 +1000,7 @@ _08093C5C:\n\
movs r3, 0\n\
cmp r3, r7\n\
bcs _08093CB8\n\
- ldr r2, _08093D48 @ =gUnknown_03004DE0\n\
+ ldr r2, _08093D48 @ =gScanlineEffectRegBuffers\n\
mov r12, r2\n\
ldr r0, _08093D4C @ =0x0000fffc\n\
adds r4, r0, 0\n\
@@ -1026,7 +1026,7 @@ _08093CB8:\n\
lsrs r7, r4, 16\n\
cmp r2, r0\n\
bge _08093CF2\n\
- ldr r0, _08093D48 @ =gUnknown_03004DE0\n\
+ ldr r0, _08093D48 @ =gScanlineEffectRegBuffers\n\
mov r9, r0\n\
ldr r3, _08093D4C @ =0x0000fffc\n\
mov r12, r3\n\
@@ -1054,7 +1054,7 @@ _08093CF2:\n\
asrs r0, 16\n\
cmp r0, 0x9F\n\
bgt _08093D18\n\
- ldr r4, _08093D48 @ =gUnknown_03004DE0\n\
+ ldr r4, _08093D48 @ =gScanlineEffectRegBuffers\n\
ldr r0, _08093D4C @ =0x0000fffc\n\
adds r2, r1, r0\n\
_08093D02:\n\
@@ -1094,7 +1094,7 @@ _08093D2E:\n\
.align 2, 0\n\
_08093D40: .4byte gSharedMem\n\
_08093D44: .4byte 0xffff0000\n\
-_08093D48: .4byte gUnknown_03004DE0\n\
+_08093D48: .4byte gScanlineEffectRegBuffers\n\
_08093D4C: .4byte 0x0000fffc\n\
.syntax divided\n");
}
@@ -1113,7 +1113,7 @@ bool8 sub_8093D50(struct Task *task)
void sub_8093D7C(void)
{
- u16 bgVOffset = gUnknown_03004DE0[1][REG_VCOUNT & 0xFF];
+ u16 bgVOffset = gScanlineEffectRegBuffers[1][REG_VCOUNT & 0xFF];
REG_BG0VOFS = bgVOffset;
REG_BG1VOFS = bgVOffset;
diff --git a/src/field/field_screen_effect.c b/src/field/field_screen_effect.c
index b5141e7ea..bc70e1a63 100644
--- a/src/field/field_screen_effect.c
+++ b/src/field/field_screen_effect.c
@@ -13,7 +13,7 @@ const static u16 gUnknown_0839ACDC[] = { 0xC8, 0x48, 0x38, 0x28, 0x18, 0x0 };
const s32 gMaxFlashLevel = 4;
-const static struct UnknownTaskStruct gUnknown_0839ACEC =
+const static struct ScanlineEffectParams gUnknown_0839ACEC =
{
(void *)REG_ADDR_WIN0H,
((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1,
@@ -64,11 +64,11 @@ static void sub_8081424(u8 taskId)
switch (data[0])
{
case 0:
- sub_8081398(&gUnknown_03004DE0[gScanlineEffect.srcBank][0], data[1], data[2], data[3]);
+ sub_8081398(&gScanlineEffectRegBuffers[gScanlineEffect.srcBank][0], data[1], data[2], data[3]);
data[0] = 1;
break;
case 1:
- sub_8081398(&gUnknown_03004DE0[gScanlineEffect.srcBank][0], data[1], data[2], data[3]);
+ sub_8081398(&gScanlineEffectRegBuffers[gScanlineEffect.srcBank][0], data[1], data[2], data[3]);
data[0] = 0;
data[3] += data[5];
if (data[3] > data[4])
@@ -140,8 +140,8 @@ void sub_80815E0(u8 a1)
{
if (a1)
{
- sub_8081398(&gUnknown_03004DE0[0][0], 120, 80, gUnknown_0839ACDC[a1]);
- CpuFastSet(&gUnknown_03004DE0[0], &gUnknown_03004DE0[1], 480);
+ sub_8081398(&gScanlineEffectRegBuffers[0][0], 120, 80, gUnknown_0839ACDC[a1]);
+ CpuFastSet(&gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 480);
}
}
@@ -208,10 +208,10 @@ static void sub_80816A8(u8 taskId)
REG_BLDALPHA = 1804;
REG_WININ = 63;
REG_WINOUT = 30;
- sub_8081398(&gUnknown_03004DE0[0][0], data[2], data[3], 1);
- CpuFastSet(&gUnknown_03004DE0[0], &gUnknown_03004DE0[1], 480);
- //sub_80895F8(gUnknown_0839ACEC[0], gUnknown_0839ACEC[1], gUnknown_0839ACEC[2]);
- sub_80895F8(gUnknown_0839ACEC);
+ sub_8081398(&gScanlineEffectRegBuffers[0][0], data[2], data[3], 1);
+ CpuFastSet(&gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 480);
+ //ScanlineEffect_SetParams(gUnknown_0839ACEC[0], gUnknown_0839ACEC[1], gUnknown_0839ACEC[2]);
+ ScanlineEffect_SetParams(gUnknown_0839ACEC);
data[0] = 1;
break;
case 1:
diff --git a/src/field/overworld.c b/src/field/overworld.c
index e90fc6396..2590852af 100644
--- a/src/field/overworld.c
+++ b/src/field/overworld.c
@@ -142,7 +142,7 @@ const struct UCoords32 gUnknown_0821664C[] =
{ 1, -1},
};
-const struct UnknownTaskStruct gUnknown_08216694 =
+const struct ScanlineEffectParams gUnknown_08216694 =
{
(void *)REG_ADDR_WIN0H,
((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1,
@@ -1410,7 +1410,7 @@ void VBlankCB_Field(void)
{
LoadOam();
ProcessSpriteCopyRequests();
- ScanlineEffect_TransferDma();
+ ScanlineEffect_InitHBlankDmaTransfer();
sub_8057A58();
TransferPlttBuffer();
sub_8072E74();
@@ -1422,7 +1422,7 @@ void sub_8054814(void)
if (val)
{
sub_80815E0(val);
- sub_80895F8(gUnknown_08216694);
+ ScanlineEffect_SetParams(gUnknown_08216694);
}
}
diff --git a/src/field/use_pokeblock.c b/src/field/use_pokeblock.c
index 4af7be386..42020c49a 100644
--- a/src/field/use_pokeblock.c
+++ b/src/field/use_pokeblock.c
@@ -117,7 +117,7 @@ static void sub_81365A0(void);
static void sub_81365C8(void);
static void sub_8136638(void);
static void sub_81368A4(void);
-void ScanlineEffect_TransferDma(void);
+void ScanlineEffect_InitHBlankDmaTransfer(void);
static void sub_8136B44(void);
static u8 sub_81370E4(u8);
static void sub_8136BB8(void);
@@ -194,7 +194,7 @@ static void sub_8136264(void)
ProcessSpriteCopyRequests();
TransferPlttBuffer();
sub_80F5CDC(6);
- ScanlineEffect_TransferDma();
+ ScanlineEffect_InitHBlankDmaTransfer();
}
static void launch_c3_walk_stairs_and_run_once(void (*const func)(void))
diff --git a/src/pokenav_before.c b/src/pokenav_before.c
index 7439fc077..b31be2ce1 100644
--- a/src/pokenav_before.c
+++ b/src/pokenav_before.c
@@ -436,7 +436,7 @@ void sub_80EBD4C()
ProcessSpriteCopyRequests();
TransferPlttBuffer();
sub_80F5BF0();
- ScanlineEffect_TransferDma();
+ ScanlineEffect_InitHBlankDmaTransfer();
}
void sub_80EBD68()
diff --git a/src/scanline_effect.c b/src/scanline_effect.c
index e9cf0d02a..0fa5b024d 100644
--- a/src/scanline_effect.c
+++ b/src/scanline_effect.c
@@ -4,27 +4,26 @@
#include "trig.h"
#include "scanline_effect.h"
-// Control value to ransfer a single 16-bit value at HBlank
-#define HBLANK_DMA_CONTROL_16BIT (((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1)
+static void CopyValue16Bit(void);
+static void CopyValue32Bit(void);
-static void sub_80896F4(void);
-static void sub_8089714(void);
-
-extern u16 gUnknown_030041B0;
-extern u16 gBattle_BG1_Y;
-extern u16 gUnknown_030041B8;
-extern u16 gBattle_BG2_Y;
-extern u16 gBattle_BG2_X;
extern u16 gBattle_BG0_Y;
extern u16 gBattle_BG0_X;
extern u16 gBattle_BG1_X;
+extern u16 gBattle_BG1_Y;
+extern u16 gBattle_BG2_X;
+extern u16 gBattle_BG2_Y;
+extern u16 gUnknown_030041B0;
+extern u16 gUnknown_030041B8;
-extern u8 gUnknown_0202FFA4;
+EWRAM_DATA static u8 gUnknown_0202FFA4 = 0;
-extern struct ScanlineEffect gScanlineEffect;
+struct ScanlineEffect gScanlineEffect;
-// Is this a struct?
-extern u16 gUnknown_03004DE0[][0x3C0];
+// Per-scanline register values.
+// This is double buffered so that it can be safely written to at any time
+// without overwriting the buffer that the DMA is currently reading
+u16 gScanlineEffectRegBuffers[2][0x3C0];
void ScanlineEffect_Stop(void)
{
@@ -39,11 +38,11 @@ void ScanlineEffect_Stop(void)
void dp12_8087EA4(void)
{
- CpuFill16(0, gUnknown_03004DE0, 0x780 * 2);
- gScanlineEffect.src[0] = 0;
- gScanlineEffect.src[1] = 0;
- gScanlineEffect.dest = 0;
- gScanlineEffect.unkC = 0;
+ CpuFill16(0, gScanlineEffectRegBuffers, sizeof(gScanlineEffectRegBuffers));
+ gScanlineEffect.src[0] = NULL;
+ gScanlineEffect.src[1] = NULL;
+ gScanlineEffect.dmaDest = NULL;
+ gScanlineEffect.dmaControl = 0;
gScanlineEffect.srcBank = 0;
gScanlineEffect.unk15 = 0;
gScanlineEffect.unk16 = 0;
@@ -51,31 +50,35 @@ void dp12_8087EA4(void)
gScanlineEffect.taskId = 0xFF;
}
-void sub_80895F8(struct UnknownTaskStruct unk)
+void ScanlineEffect_SetParams(struct ScanlineEffectParams params)
{
- if (unk.control == HBLANK_DMA_CONTROL_16BIT) // 16 bit
+ if (params.dmaControl == SCANLINE_EFFECT_DMACNT_16BIT) // 16-bit
{
- gScanlineEffect.src[0] = &gUnknown_03004DE0[0][1];
- gScanlineEffect.src[1] = &gUnknown_03004DE0[1][1];
- gScanlineEffect.unk10 = sub_80896F4;
+ // Set the DMA src to the value for the second scanline because the
+ // first DMA transfer occurs in HBlank *after* the first scanline is drawn
+ gScanlineEffect.src[0] = (u16 *)gScanlineEffectRegBuffers[0] + 1;
+ gScanlineEffect.src[1] = (u16 *)gScanlineEffectRegBuffers[1] + 1;
+ gScanlineEffect.setFirstScanlineReg = CopyValue16Bit;
}
else // assume 32-bit
{
- gScanlineEffect.src[0] = &gUnknown_03004DE0[0][2];
- gScanlineEffect.src[1] = &gUnknown_03004DE0[1][2];
- gScanlineEffect.unk10 = sub_8089714;
+ // Set the DMA src to the value for the second scanline because the
+ // first DMA transfer occurs in HBlank *after* the first scanline is drawn
+ gScanlineEffect.src[0] = (u32 *)gScanlineEffectRegBuffers[0] + 1;
+ gScanlineEffect.src[1] = (u32 *)gScanlineEffectRegBuffers[1] + 1;
+ gScanlineEffect.setFirstScanlineReg = CopyValue32Bit;
}
- gScanlineEffect.unkC = unk.control;
- gScanlineEffect.dest = unk.dest;
- gScanlineEffect.unk15 = unk.unk8;
- gScanlineEffect.unk16 = unk.unk9;
- gScanlineEffect.unk17 = unk.unk9;
+ gScanlineEffect.dmaControl = params.dmaControl;
+ gScanlineEffect.dmaDest = params.dmaDest;
+ gScanlineEffect.unk15 = params.unk8;
+ gScanlineEffect.unk16 = params.unk9;
+ gScanlineEffect.unk17 = params.unk9;
}
-void ScanlineEffect_TransferDma(void)
+void ScanlineEffect_InitHBlankDmaTransfer(void)
{
- if (gScanlineEffect.unk15)
+ if (gScanlineEffect.unk15 != 0)
{
if (gScanlineEffect.unk15 == 3)
{
@@ -86,28 +89,44 @@ void ScanlineEffect_TransferDma(void)
else
{
DmaStop(0);
- DmaSet(0, gScanlineEffect.src[gScanlineEffect.srcBank], gScanlineEffect.dest, gScanlineEffect.unkC);
- gScanlineEffect.unk10();
+ // Set DMA to copy to dest register on each HBlank for the next frame.
+ // The HBlank DMA transfers do not occurr during VBlank, so the transfer
+ // will begin on the HBlank after the first scanline
+ DmaSet(0, gScanlineEffect.src[gScanlineEffect.srcBank], gScanlineEffect.dmaDest, gScanlineEffect.dmaControl);
+ // Manually set the reg for the first scanline
+ gScanlineEffect.setFirstScanlineReg();
+ // Swap current buffer
gScanlineEffect.srcBank ^= 1;
}
}
}
-static void sub_80896F4(void)
+// These two functions are used to copy the register for the first scanline,
+// depending whether it is a 16-bit register or a 32-bit register.
+
+static void CopyValue16Bit(void)
{
- u16 *dest = (u16 *)gScanlineEffect.dest;
- u16 *src = (u16 *)&gUnknown_03004DE0[gScanlineEffect.srcBank];
+ u16 *dest = (u16 *)gScanlineEffect.dmaDest;
+ u16 *src = (u16 *)&gScanlineEffectRegBuffers[gScanlineEffect.srcBank];
+
*dest = *src;
}
-static void sub_8089714(void)
+static void CopyValue32Bit(void)
{
- u32 *dest = (u32 *)gScanlineEffect.dest;
- u32 *src = (u32 *)&gUnknown_03004DE0[gScanlineEffect.srcBank];
+ u32 *dest = (u32 *)gScanlineEffect.dmaDest;
+ u32 *src = (u32 *)&gScanlineEffectRegBuffers[gScanlineEffect.srcBank];
+
*dest = *src;
}
-static void task00_for_dp12(u8 taskId)
+#define tStartLine data[0]
+#define tEndLine data[1]
+#define framesUntilMove data[4]
+#define tDelayInterval data[5]
+#define tRegOffset data[6]
+
+static void TaskFunc_UpdateWavePerFrame(u8 taskId)
{
int value = 0;
@@ -120,7 +139,7 @@ static void task00_for_dp12(u8 taskId)
{
if (gTasks[taskId].data[7])
{
- switch (gTasks[taskId].data[6])
+ switch (gTasks[taskId].tRegOffset)
{
case 0x0:
value = gBattle_BG0_X;
@@ -148,15 +167,16 @@ static void task00_for_dp12(u8 taskId)
break;
}
}
- if (gTasks[taskId].data[4])
+ if (gTasks[taskId].framesUntilMove != 0)
{
int i;
int offset;
- gTasks[taskId].data[4]--;
+
+ gTasks[taskId].framesUntilMove--;
offset = gTasks[taskId].data[3] + 320;
- for (i = gTasks[taskId].data[0]; i < gTasks[taskId].data[1]; i++)
+ for (i = gTasks[taskId].tStartLine; i < gTasks[taskId].tEndLine; i++)
{
- gUnknown_03004DE0[gScanlineEffect.srcBank][i] = gUnknown_03004DE0[0][offset] + value;
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBank][i] = gScanlineEffectRegBuffers[0][offset] + value;
offset++;
}
}
@@ -164,18 +184,17 @@ static void task00_for_dp12(u8 taskId)
{
int i;
int offset;
- gTasks[taskId].data[4] = gTasks[taskId].data[5];
+
+ gTasks[taskId].framesUntilMove = gTasks[taskId].tDelayInterval;
offset = gTasks[taskId].data[3] + 320;
- for (i = gTasks[taskId].data[0]; i < gTasks[taskId].data[1]; i++)
+ for (i = gTasks[taskId].tStartLine; i < gTasks[taskId].tEndLine; i++)
{
- gUnknown_03004DE0[gScanlineEffect.srcBank][i] = gUnknown_03004DE0[0][offset] + value;
+ gScanlineEffectRegBuffers[gScanlineEffect.srcBank][i] = gScanlineEffectRegBuffers[0][offset] + value;
offset++;
}
gTasks[taskId].data[3]++;
if (gTasks[taskId].data[3] == gTasks[taskId].data[2])
- {
gTasks[taskId].data[3] = 0;
- }
}
}
}
@@ -193,44 +212,47 @@ static void GenerateWave(u16 *buffer, u8 frequency, u8 amplitude, u8 unused)
}
}
-u8 ScanlineEffect_InitWave(u8 a1, u8 a2, u8 frequency, u8 amplitude, u8 a5, u8 a6, u8 a7)
+// Initializes a background "wave" effect that affects scanlines startLine (inclusive) to endLine (exclusive).
+// 'frequency' and 'amplitude' control the frequency and amplitude of the wave.
+// 'delayInterval' controls how fast the wave travels up the screen. The wave will shift upwards one scanline every 'delayInterval'+1 frames.
+// 'regOffset' is the offset of the video register to modify.
+u8 ScanlineEffect_InitWave(u8 startLine, u8 endLine, u8 frequency, u8 amplitude, u8 delayInterval, u8 regOffset, bool8 a7)
{
int i;
int offset;
- struct UnknownTaskStruct unk;
+ struct ScanlineEffectParams params;
u8 taskId;
dp12_8087EA4();
- unk.dest = (void *)(REG_ADDR_BG0HOFS + a6);
- unk.control = HBLANK_DMA_CONTROL_16BIT;
- unk.unk8 = 1;
- unk.unk9 = 0;
-
- sub_80895F8(unk);
+ params.dmaDest = (void *)(REG_ADDR_BG0HOFS + regOffset);
+ params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT;
+ params.unk8 = 1;
+ params.unk9 = 0;
+ ScanlineEffect_SetParams(params);
- taskId = CreateTask(task00_for_dp12, 0);
+ taskId = CreateTask(TaskFunc_UpdateWavePerFrame, 0);
- gTasks[taskId].data[0] = a1;
- gTasks[taskId].data[1] = a2;
- gTasks[taskId].data[2] = 256 / frequency;
- gTasks[taskId].data[3] = 0;
- gTasks[taskId].data[4] = a5;
- gTasks[taskId].data[5] = a5;
- gTasks[taskId].data[6] = a6;
- gTasks[taskId].data[7] = a7;
+ gTasks[taskId].tStartLine = startLine;
+ gTasks[taskId].tEndLine = endLine;
+ gTasks[taskId].data[2] = 256 / frequency;
+ gTasks[taskId].data[3] = 0;
+ gTasks[taskId].framesUntilMove = delayInterval;
+ gTasks[taskId].tDelayInterval = delayInterval;
+ gTasks[taskId].tRegOffset = regOffset;
+ gTasks[taskId].data[7] = a7;
gScanlineEffect.taskId = taskId;
gUnknown_0202FFA4 = 0;
- GenerateWave(&gUnknown_03004DE0[0][320], frequency, amplitude, a2 - a1);
+ GenerateWave(&gScanlineEffectRegBuffers[0][320], frequency, amplitude, endLine - startLine);
offset = 320;
- for (i = a1; i < a2; i++)
+ for (i = startLine; i < endLine; i++)
{
- gUnknown_03004DE0[0][i] = gUnknown_03004DE0[0][offset];
- gUnknown_03004DE0[1][i] = gUnknown_03004DE0[0][offset];
+ gScanlineEffectRegBuffers[0][i] = gScanlineEffectRegBuffers[0][offset];
+ gScanlineEffectRegBuffers[1][i] = gScanlineEffectRegBuffers[0][offset];
offset++;
}
diff --git a/src/scene/evolution_scene.c b/src/scene/evolution_scene.c
index 54af6013f..aeea3e292 100644
--- a/src/scene/evolution_scene.c
+++ b/src/scene/evolution_scene.c
@@ -3934,7 +3934,7 @@ static void VBlankCB_EvolutionScene(void)
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
- ScanlineEffect_TransferDma();
+ ScanlineEffect_InitHBlankDmaTransfer();
}
static void VBlankCB_TradeEvolutionScene(void)
@@ -3950,7 +3950,7 @@ static void VBlankCB_TradeEvolutionScene(void)
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
- ScanlineEffect_TransferDma();
+ ScanlineEffect_InitHBlankDmaTransfer();
}
static void sub_81150D8(void)
diff --git a/src/scene/title_screen.c b/src/scene/title_screen.c
index ca4194800..2de3554fe 100644
--- a/src/scene/title_screen.c
+++ b/src/scene/title_screen.c
@@ -598,7 +598,7 @@ static void StartPokemonLogoShine(bool8 flashBackground)
static void VBlankCB(void)
{
- ScanlineEffect_TransferDma();
+ ScanlineEffect_InitHBlankDmaTransfer();
LoadOam();
ProcessSpriteCopyRequests();
TransferPlttBuffer();
@@ -711,7 +711,7 @@ void CB2_InitTitleScreen(void)
if (!UpdatePaletteFade())
{
StartPokemonLogoShine(FALSE);
- ScanlineEffect_InitWave(0, 0xA0, 4, 4, 0, 4, 1);
+ ScanlineEffect_InitWave(0, DISPLAY_HEIGHT, 4, 4, 0, 4, 1);
SetMainCallback2(MainCB2);
}
break;