summaryrefslogtreecommitdiff
path: root/src/field_screen_effect.c
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2018-06-16 18:31:23 -0500
committerMarcus Huderle <huderlem@gmail.com>2018-06-19 18:52:24 -0500
commitad0bb29c4b5802a526722ab15a63396c437dc943 (patch)
treebfda08573471b17151fc4c3cc38ba5d3498b25d6 /src/field_screen_effect.c
parent544b5b61d42e355ef44c65dc84e53d5f73d7c0e1 (diff)
Label various overworld-related things
Diffstat (limited to 'src/field_screen_effect.c')
-rw-r--r--src/field_screen_effect.c115
1 files changed, 63 insertions, 52 deletions
diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c
index b314699c5..13bc1bd63 100644
--- a/src/field_screen_effect.c
+++ b/src/field_screen_effect.c
@@ -9,71 +9,78 @@
#include "text.h"
#include "scanline_effect.h"
-const static u16 gUnknown_0839ACDC[] = { 0xC8, 0x48, 0x38, 0x28, 0x18, 0x0 };
+const static u16 sFlashLevelPixelRadii[] = { 200, 72, 56, 40, 24, 0 };
const s32 gMaxFlashLevel = 4;
-const static struct ScanlineEffectParams gUnknown_0839ACEC =
+const static struct ScanlineEffectParams sFlashEffectParams =
{
(void *)REG_ADDR_WIN0H,
((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1,
1
};
-static void sub_808136C(u16 *dest, u32 a2, s32 a3, s32 a4)
+static void SetFlashScanlineffectWindowBoundary(u16 *dest, u32 y, s32 left, s32 right)
{
- if (a2 <= 0xA0)
+ if (y <= 160)
{
- if (a3 < 0)
- a3 = 0;
- if (a3 > 255)
- a3 = 255;
- if (a4 < 0)
- a4 = 0;
- if (a4 > 255)
- a4 = 255;
- dest[a2] = (a3 << 8) | a4;
+ if (left < 0)
+ left = 0;
+ if (left > 255)
+ left = 255;
+ if (right < 0)
+ right = 0;
+ if (right > 255)
+ right = 255;
+ dest[y] = (left << 8) | right;
}
}
-static void sub_8081398(u16 *dest, s32 a2, s32 a3, s32 a4)
+static void SetFlashScanlineEffectWindowBoundaries(u16 *dest, s32 centerX, s32 centerY, s32 radius)
{
- s32 v1 = a4;
- s32 v2 = a4;
+ s32 r = radius;
+ s32 v2 = radius;
s32 v3 = 0;
- while (v1 >= v3)
+ while (r >= v3)
{
- sub_808136C(dest, a3 - v3, a2 - v1, a2 + v1);
- sub_808136C(dest, a3 + v3, a2 - v1, a2 + v1);
- sub_808136C(dest, a3 - v1, a2 - v3, a2 + v3);
- sub_808136C(dest, a3 + v1, a2 - v3, a2 + v3);
+ SetFlashScanlineffectWindowBoundary(dest, centerY - v3, centerX - r, centerX + r);
+ SetFlashScanlineffectWindowBoundary(dest, centerY + v3, centerX - r, centerX + r);
+ SetFlashScanlineffectWindowBoundary(dest, centerY - r, centerX - v3, centerX + v3);
+ SetFlashScanlineffectWindowBoundary(dest, centerY + r, centerX - v3, centerX + v3);
v2 -= (v3 * 2) - 1;
v3++;
if (v2 < 0)
{
- v2 += 2 * (v1 - 1);
- v1--;
+ v2 += 2 * (r - 1);
+ r--;
}
}
}
-static void sub_8081424(u8 taskId)
+#define tFlashCenterX data[1]
+#define tFlashCenterY data[2]
+#define tCurFlashRadius data[3]
+#define tDestFlashRadius data[4]
+#define tFlashRadiusDelta data[5]
+#define tClearScanlineEffect data[6]
+
+static void UpdateFlashLevelEffect(u8 taskId)
{
s16 *data = gTasks[taskId].data;
switch (data[0])
{
case 0:
- sub_8081398(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], data[1], data[2], data[3]);
+ SetFlashScanlineEffectWindowBoundaries(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], tFlashCenterX, tFlashCenterY, tCurFlashRadius);
data[0] = 1;
break;
case 1:
- sub_8081398(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], data[1], data[2], data[3]);
+ SetFlashScanlineEffectWindowBoundaries(gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], tFlashCenterX, tFlashCenterY, tCurFlashRadius);
data[0] = 0;
- data[3] += data[5];
- if (data[3] > data[4])
+ tCurFlashRadius += tFlashRadiusDelta;
+ if (tCurFlashRadius > tDestFlashRadius)
{
- if (data[6] == 1)
+ if (tClearScanlineEffect == 1)
{
ScanlineEffect_Stop();
data[0] = 2;
@@ -93,7 +100,7 @@ static void sub_8081424(u8 taskId)
static void sub_80814E8(u8 taskId)
{
- if (!FuncIsActiveTask(sub_8081424))
+ if (!FuncIsActiveTask(UpdateFlashLevelEffect))
{
EnableBothScriptContexts();
DestroyTask(taskId);
@@ -106,41 +113,46 @@ static void sub_8081510(void)
CreateTask(sub_80814E8, 80);
}
-static u8 sub_8081534(s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, u8 a6)
+static u8 sub_8081534(s32 centerX, s32 centerY, s32 initialFlashRadius, s32 destFlashRadius, s32 clearScanlineEffect, u8 delta)
{
- u8 taskId = CreateTask(sub_8081424, 80);
+ u8 taskId = CreateTask(UpdateFlashLevelEffect, 80);
s16 *data = gTasks[taskId].data;
- data[3] = a3;
- data[4] = a4;
- data[1] = a1;
- data[2] = a2;
- data[6] = a5;
+ tCurFlashRadius = initialFlashRadius;
+ tDestFlashRadius = destFlashRadius;
+ tFlashCenterX = centerX;
+ tFlashCenterY = centerY;
+ tClearScanlineEffect = clearScanlineEffect;
- if (a3 < a4)
- data[5] = a6;
+ if (initialFlashRadius < destFlashRadius)
+ tFlashRadiusDelta = delta;
else
- data[5] = -a6;
+ tFlashRadiusDelta = -delta;
return taskId;
}
-void sub_8081594(u8 a1)
+#undef tCurFlashRadius
+#undef tDestFlashRadius
+#undef tFlashRadiusDelta
+#undef tClearScanlineEffect
+
+void sub_8081594(u8 flashLevel)
{
- u8 flashLevel = Overworld_GetFlashLevel();
+ u8 curFlashLevel = Overworld_GetFlashLevel();
u8 value = 0;
- if (!a1)
+ if (!flashLevel)
value = 1;
- sub_8081534(120, 80, gUnknown_0839ACDC[flashLevel], gUnknown_0839ACDC[a1], value, 1);
+ sub_8081534(120, 80, sFlashLevelPixelRadii[curFlashLevel], sFlashLevelPixelRadii[flashLevel], value, 1);
sub_8081510();
ScriptContext2_Enable();
}
-void sub_80815E0(u8 a1)
+void WriteFlashScanlineEffectBuffer(u8 flashLevel)
{
- if (a1)
+ if (flashLevel)
{
- sub_8081398(&gScanlineEffectRegBuffers[0][0], 120, 80, gUnknown_0839ACDC[a1]);
+ SetFlashScanlineEffectWindowBoundaries(&gScanlineEffectRegBuffers[0][0], 120, 80, sFlashLevelPixelRadii[flashLevel]);
CpuFastSet(&gScanlineEffectRegBuffers[0], &gScanlineEffectRegBuffers[1], 480);
}
}
@@ -208,10 +220,9 @@ static void sub_80816A8(u8 taskId)
REG_BLDALPHA = 1804;
REG_WININ = 63;
REG_WINOUT = 30;
- sub_8081398(&gScanlineEffectRegBuffers[0][0], data[2], data[3], 1);
+ SetFlashScanlineEffectWindowBoundaries(&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);
+ ScanlineEffect_SetParams(sFlashEffectParams);
data[0] = 1;
break;
case 1:
@@ -221,7 +232,7 @@ static void sub_80816A8(u8 taskId)
data[0] = 2;
break;
case 2:
- if (!FuncIsActiveTask(sub_8081424))
+ if (!FuncIsActiveTask(UpdateFlashLevelEffect))
{
EnableBothScriptContexts();
data[0] = 3;
@@ -323,7 +334,7 @@ void sub_8081924(void)
static void task50_0807F0C8(u8 taskId)
{
- if (sub_8054034() == TRUE)
+ if (BGMusicStopped() == TRUE)
{
DestroyTask(taskId);
EnableBothScriptContexts();