pokeplatinum/src/screen_fade_funcs.c
2026-03-03 08:10:30 -08:00

3203 lines
80 KiB
C

#include "screen_fade_funcs.h"
#include <nitro.h>
#include <string.h>
#include "constants/graphics.h"
#include "enums.h"
#include "hardware_window.h"
#include "heap.h"
#include "screen_fade.h"
#include "sys_task.h"
#include "sys_task_manager.h"
typedef struct {
int unk_00;
int unk_04;
int unk_08;
int unk_0C;
int unk_10;
int unk_14;
enum DSScreen screen;
} UnkStruct_02010318;
typedef struct {
int unk_00;
int unk_04;
int unk_08;
int unk_0C;
} UnkStruct_020101B0;
typedef struct {
u8 unk_00;
u8 unk_01;
u8 unk_02;
u8 unk_03;
} UnkStruct_0200FD8C;
typedef struct {
UnkStruct_020101B0 unk_00;
UnkStruct_020101B0 unk_10;
UnkStruct_020101B0 unk_20;
enum DSScreen screen;
int unk_34;
int unk_38;
int unk_3C;
int unk_40;
int unk_44;
HardwareWindowSettings *unk_48;
} UnkStruct_02010EA4;
typedef struct {
UnkStruct_0200FD8C unk_00;
UnkStruct_0200FD8C unk_04;
u8 unk_08;
u8 unk_09;
u8 unk_0A;
u8 unk_0B;
} UnkStruct_0200F980;
typedef struct {
UnkStruct_02010EA4 unk_00;
UnkStruct_02010EA4 unk_4C;
} UnkStruct_02010D94;
typedef struct {
short unk_00[2][192];
short unk_300[2][192];
int unk_600;
} UnkStruct_02010FC0;
typedef struct {
UnkStruct_02010FC0 *unk_00;
int unk_04;
enum DSScreen screen;
} UnkStruct_02010588;
typedef struct {
UnkStruct_02010588 unk_00;
int unk_0C;
int unk_10;
int unk_14;
int unk_18;
int unk_1C;
int unk_20;
int unk_24;
enum HeapID heapID;
int unk_2C;
HardwareWindowSettings *unk_30;
ScreenFadeHBlanks *unk_34;
} UnkStruct_0201109C;
typedef struct {
s16 unk_00;
s16 unk_02;
s16 unk_04;
s16 unk_06;
u8 unk_08;
u8 unk_09;
u8 unk_0A;
u8 unk_0B;
} UnkStruct_0200FB7C;
typedef struct {
UnkStruct_02010588 unk_00;
int unk_0C;
int unk_10;
int unk_14;
int unk_18;
int unk_1C;
int unk_20;
HardwareWindowSettings *unk_24;
ScreenFadeHBlanks *unk_28;
enum HeapID heapID;
} UnkStruct_02011360;
typedef struct {
u16 unk_00;
u16 unk_02;
u8 unk_04;
u8 unk_05;
u8 unk_06;
u8 unk_07;
} UnkStruct_0200FC2C;
typedef struct {
UnkStruct_02010588 unk_00;
int unk_0C;
int unk_10;
int unk_14;
int unk_18;
int unk_1C;
int unk_20;
int unk_24;
HardwareWindowSettings *unk_28;
ScreenFadeHBlanks *unk_2C;
enum HeapID heapID;
} UnkStruct_02011568;
typedef struct {
u16 unk_00;
u16 unk_02;
u8 unk_04;
u8 unk_05;
u8 unk_06;
u8 unk_07;
} UnkStruct_0200FD34;
typedef struct {
UnkStruct_020101B0 unk_00;
UnkStruct_020101B0 unk_10;
UnkStruct_020101B0 unk_20;
} UnkStruct_0201184C_sub1;
typedef struct {
UnkStruct_02010588 unk_00;
UnkStruct_0201184C_sub1 *unk_0C;
int unk_10;
int unk_14;
int unk_18;
int unk_1C;
int unk_20;
HardwareWindowSettings *unk_24;
ScreenFadeHBlanks *unk_28;
enum HeapID heapID;
} UnkStruct_0201184C;
typedef struct {
const UnkStruct_0200FD8C *unk_00;
const UnkStruct_0200FD8C *unk_04;
u16 unk_08;
u16 unk_0A;
u8 unk_0C;
u8 unk_0D;
u16 unk_0E;
} UnkStruct_02011738;
typedef struct {
int unk_00;
int unk_04;
int unk_08;
} UnkStruct_02011C7C;
typedef struct {
UnkStruct_02010588 unk_00;
UnkStruct_02011C7C unk_0C;
int unk_18;
int unk_1C;
int unk_20;
int unk_24;
int unk_28;
enum HeapID heapID;
HardwareWindowSettings *unk_30;
ScreenFadeHBlanks *unk_34;
} UnkStruct_02011AFC;
typedef struct {
u16 unk_00;
u16 unk_02;
u8 unk_04;
u8 unk_05;
u16 unk_06;
} UnkStruct_0200FEA4;
typedef struct {
int unk_00;
int unk_04;
int unk_08;
} UnkStruct_02011F2C;
typedef struct {
UnkStruct_02010588 unk_00;
UnkStruct_02011F2C unk_0C;
int unk_18;
int unk_1C;
int unk_20;
int unk_24;
int unk_28;
enum HeapID heapID;
HardwareWindowSettings *unk_30;
ScreenFadeHBlanks *unk_34;
} UnkStruct_02011E04;
typedef struct {
u16 unk_00;
u16 unk_02;
u8 unk_04;
u8 unk_05;
u16 unk_06;
} UnkStruct_0200FF30;
typedef struct {
u8 unk_00[192];
u8 unk_C0[192];
int unk_180;
} UnkStruct_02012174;
typedef struct {
UnkStruct_02012174 unk_00[2];
u8 unk_308;
u8 screen;
} UnkStruct_0201076C;
typedef struct {
u8 unk_00;
u8 unk_01;
u16 unk_02;
} UnkStruct_0200F898;
typedef struct {
UnkStruct_0201076C unk_00;
const UnkStruct_0200F898 *unk_30C;
int unk_310;
int unk_314;
int unk_318;
int unk_31C;
int unk_320;
int unk_324;
enum HeapID heapID;
HardwareWindowSettings *unk_32C;
ScreenFadeHBlanks *unk_330;
} UnkStruct_020120D4;
typedef struct {
const UnkStruct_0200F898 *unk_00;
u16 unk_04;
u16 unk_06;
} UnkStruct_0200FE6C;
typedef struct {
UnkStruct_0200F980 unk_00;
UnkStruct_0200FE6C unk_0C;
fx32 unk_14;
} UnkStruct_0201006C;
typedef struct {
UnkStruct_02010EA4 unk_00;
UnkStruct_020120D4 unk_4C;
UnkStruct_0201006C *unk_380;
u8 unk_384;
u8 unk_385;
u8 unk_386;
u8 unk_387;
} UnkStruct_02012290;
static fx32 sub_020100E0(int param0);
static int sub_020100FC(int param0, int param1);
static void sub_02010124(int param0, int *param1, int param2, int param3);
static int sub_02010178(int param0, int param1);
static int sub_02010190(int param0, int param1, int param2);
static int sub_020101A0(int param0, int param1);
static void sub_020101B0(UnkStruct_020101B0 *param0, UnkStruct_020101B0 *param1);
static void sub_020101D4(UnkStruct_020101B0 *param0, UnkStruct_020101B0 *param1, UnkStruct_020101B0 *param2, const UnkStruct_0200FD8C *param3, const UnkStruct_0200FD8C *param4, int param5);
static void sub_02010658(int param0, HardwareWindowSettings *param1, enum DSScreen screen);
static void sub_0201035C(void *param0);
static void sub_020105EC(UnkStruct_02010588 *param0);
static void sub_020105F4(UnkStruct_02010588 *param0);
static UnkStruct_02010FC0 *sub_02010604(UnkStruct_02010588 *param0, int param1);
static void sub_02010624(SysTask *param0, void *param1);
static void sub_0201076C(UnkStruct_0201076C *param0);
static void sub_02010784(ScreenFadeHBlanks *param0, UnkStruct_0201076C *param1, u32 heapID);
static void sub_0201079C(ScreenFadeHBlanks *param0, UnkStruct_0201076C *param1, u32 param2);
static void sub_020107AC(SysTask *param0, void *param1);
static void sub_020107D8(void *param0);
static void sub_02010238(ScreenFade *param0, int param1);
static BOOL sub_020102D8(ScreenFade *param0);
static BOOL sub_02010318(UnkStruct_02010318 *param0);
static void sub_02010CF4(ScreenFade *param0, const UnkStruct_0200F980 *param1);
static BOOL sub_02010D44(ScreenFade *param0);
static void sub_02010D94(ScreenFade *param0, const UnkStruct_0200F980 *param1, const UnkStruct_0200F980 *param2);
static BOOL sub_02010DEC(ScreenFade *param0);
static void sub_02010E48(UnkStruct_02010EA4 *param0, const UnkStruct_0200F980 *param1, int param2, int param3, enum DSScreen screen, HardwareWindowSettings *param5);
static BOOL sub_02010EA4(UnkStruct_02010EA4 *param0);
static void sub_02010F2C(ScreenFade *param0, const UnkStruct_0200FB7C *param1);
static BOOL sub_02010F64(ScreenFade *param0);
static void sub_02010FC0(UnkStruct_0201109C *param0, const UnkStruct_0200FB7C *param1, int param2, int param3, enum DSScreen screen, HardwareWindowSettings *param5, ScreenFadeHBlanks *param6, enum HeapID heapID);
static BOOL sub_0201109C(UnkStruct_0201109C *param0);
static void sub_02011180(UnkStruct_0201109C *param0);
static void sub_02011204(ScreenFade *param0, const UnkStruct_0200FC2C *param1);
static BOOL sub_0201123C(ScreenFade *param0);
static void sub_02011298(UnkStruct_02011360 *param0, const UnkStruct_0200FC2C *param1, int param2, int param3, enum DSScreen screen, HardwareWindowSettings *param5, ScreenFadeHBlanks *param6, enum HeapID heapID);
static BOOL sub_02011360(UnkStruct_02011360 *param0);
static void sub_020113B0(UnkStruct_02011360 *param0);
static void sub_02011408(ScreenFade *param0, const UnkStruct_0200FD34 *param1);
static BOOL sub_02011440(ScreenFade *param0);
static void sub_02011494(UnkStruct_02011568 *param0, const UnkStruct_0200FD34 *param1, int param2, int param3, enum DSScreen screen, HardwareWindowSettings *param5, ScreenFadeHBlanks *param6, enum HeapID heapID);
static BOOL sub_02011568(UnkStruct_02011568 *param0);
static void sub_020115B8(UnkStruct_02011568 *param0);
static void sub_020116A0(ScreenFade *param0, const UnkStruct_02011738 *param1);
static BOOL sub_020116D8(ScreenFade *param0);
static BOOL sub_0201184C(UnkStruct_0201184C *param0);
static void sub_02011738(UnkStruct_0201184C *param0, const UnkStruct_02011738 *param1, int param2, int param3, enum DSScreen screen, HardwareWindowSettings *param5, ScreenFadeHBlanks *param6, enum HeapID heapID);
static void sub_0201189C(UnkStruct_0201184C *param0);
static void sub_020118AC(UnkStruct_0201184C *param0);
static void sub_02011938(UnkStruct_0201184C *param0);
static void sub_020118E0(UnkStruct_02010588 *param0, UnkStruct_020101B0 *param1);
static void sub_02011960(ScreenFade *param0, UnkStruct_0200FEA4 *param1);
static BOOL sub_020119A0(ScreenFade *param0);
static void sub_02011A00(UnkStruct_02011AFC *param0, UnkStruct_0200FEA4 *param1, int param2, int param3, enum DSScreen screen, HardwareWindowSettings *param5, ScreenFadeHBlanks *param6, enum HeapID heapID);
static BOOL sub_02011AFC(UnkStruct_02011AFC *param0);
static void sub_02011B54(UnkStruct_02011AFC *param0);
static void sub_02011B58(UnkStruct_02011AFC *param0);
static void sub_02011C7C(UnkStruct_02011C7C *param0, int param1, int param2);
static void sub_02011C94(ScreenFade *param0, UnkStruct_0200FF30 *param1);
static BOOL sub_02011CD4(ScreenFade *param0);
static void sub_02011D34(UnkStruct_02011E04 *param0, UnkStruct_0200FF30 *param1, int param2, int param3, enum DSScreen screen, HardwareWindowSettings *param5, ScreenFadeHBlanks *param6, enum HeapID heapID);
static BOOL sub_02011E04(UnkStruct_02011E04 *param0);
static void sub_02011E5C(UnkStruct_02011E04 *param0);
static void sub_02011E60(UnkStruct_02011E04 *param0);
static void sub_02011F2C(UnkStruct_02011F2C *param0, int param1, int param2);
static void sub_02011F44(ScreenFade *param0, UnkStruct_0200FE6C *param1);
static BOOL sub_02011F88(ScreenFade *param0);
static void sub_02011FE8(UnkStruct_020120D4 *param0, UnkStruct_0200FE6C *param1, int param2, int param3, enum DSScreen screen, HardwareWindowSettings *param5, ScreenFadeHBlanks *param6, enum HeapID heapID);
static BOOL sub_020120D4(UnkStruct_020120D4 *param0);
static void sub_02012134(UnkStruct_020120D4 *param0);
static void sub_02012138(UnkStruct_020120D4 *param0);
static void sub_02012174(const UnkStruct_0200F898 *param0, UnkStruct_02012174 *param1, int param2, int param3);
static void sub_020121C4(ScreenFade *param0, UnkStruct_0201006C *param1);
static BOOL sub_02012228(ScreenFade *param0);
static void sub_02012290(UnkStruct_02012290 *param0, UnkStruct_0201006C *param1, int param2, int param3, enum DSScreen screen, HardwareWindowSettings *param5, ScreenFadeHBlanks *param6, int param7);
static BOOL sub_02012310(UnkStruct_02012290 *param0, ScreenFade *param1);
static void sub_02012384(UnkStruct_02012290 *param0, UnkStruct_0201006C *param1, int param2, int param3, enum DSScreen screen, HardwareWindowSettings *param5, ScreenFadeHBlanks *param6, enum HeapID heapID);
static BOOL sub_020123F4(UnkStruct_02012290 *param0, ScreenFade *param1);
BOOL sub_0200F85C(ScreenFade *param0)
{
if (param0->state == 0) {
param0->direction = FADE_OUT;
param0->method = FADE_BY_BRIGHTNESS;
sub_02010238(param0, 1);
return 0;
}
return sub_020102D8(param0);
}
BOOL sub_0200F878(ScreenFade *param0)
{
if (param0->state == 0) {
param0->direction = FADE_IN;
param0->method = FADE_BY_BRIGHTNESS;
sub_02010238(param0, 0);
return 0;
}
return sub_020102D8(param0);
}
BOOL sub_0200F898(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200F898 v0 = {
0, 192, 1
};
static UnkStruct_0200FE6C v1 = {
NULL, 1, 1
};
v1.unk_00 = &v0;
SetScreenBackgroundColor(param0->color);
sub_02011F44(param0, &v1);
param0->direction = FADE_OUT;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02011F88(param0);
}
BOOL sub_0200F8D4(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200F898 v0 = {
0, 192, 0
};
static UnkStruct_0200FE6C v1 = {
NULL, 1, 0
};
v1.unk_00 = &v0;
SetScreenBackgroundColor(param0->color);
sub_02011F44(param0, &v1);
param0->direction = FADE_IN;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02011F88(param0);
}
BOOL sub_0200F90C(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200F898 v0 = {
192,
0,
1
};
static UnkStruct_0200FE6C v1 = {
NULL,
1,
1
};
v1.unk_00 = &v0;
SetScreenBackgroundColor(param0->color);
sub_02011F44(param0, &v1);
param0->direction = FADE_OUT;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02011F88(param0);
}
BOOL sub_0200F948(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200F898 v0 = {
192,
0,
0
};
static UnkStruct_0200FE6C v1 = {
NULL,
1,
0
};
v1.unk_00 = &v0;
SetScreenBackgroundColor(param0->color);
sub_02011F44(param0, &v1);
param0->direction = FADE_IN;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02011F88(param0);
}
BOOL sub_0200F980(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200F980 v0 = {
{ 0, 0, 255, 192 },
{ 0, 0, 0, 192 },
0,
GX_BLEND_ALL,
GX_BLEND_PLANEMASK_BD,
1
};
SetScreenBackgroundColor(param0->color);
sub_02010CF4(param0, &v0);
param0->direction = FADE_OUT;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02010D44(param0);
}
BOOL sub_0200F9AC(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200F980 v0 = {
{ 0, 0, 0, 192 },
{ 0, 0, 255, 192 },
0,
GX_BLEND_ALL,
GX_BLEND_PLANEMASK_BD,
0
};
SetScreenBackgroundColor(param0->color);
sub_02010CF4(param0, &v0);
param0->direction = FADE_IN;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02010D44(param0);
}
BOOL sub_0200F9D8(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200F898 v0[2] = {
{ 0, 96, 1 },
{ 192, 96, 1 }
};
static UnkStruct_0200FE6C v1 = {
NULL,
2,
1
};
v1.unk_00 = v0;
SetScreenBackgroundColor(param0->color);
sub_02011F44(param0, &v1);
param0->direction = FADE_OUT;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02011F88(param0);
}
BOOL sub_0200FA14(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200F898 v0[2] = {
{ 96, 0, 0 },
{ 96, 192, 0 }
};
static UnkStruct_0200FE6C v1 = {
NULL,
2,
0
};
v1.unk_00 = v0;
SetScreenBackgroundColor(param0->color);
sub_02011F44(param0, &v1);
param0->direction = FADE_IN;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02011F88(param0);
}
BOOL sub_0200FA4C(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200F898 v0[2] = {
{ 96, 0, 1 },
{ 96, 192, 1 }
};
static UnkStruct_0200FE6C v1 = {
NULL,
2,
1
};
v1.unk_00 = v0;
SetScreenBackgroundColor(param0->color);
sub_02011F44(param0, &v1);
param0->direction = FADE_OUT;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02011F88(param0);
}
BOOL sub_0200FA88(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200F898 v0[2] = {
{ 0, 96, 0 },
{ 192, 96, 0 }
};
static UnkStruct_0200FE6C v1 = {
NULL,
2,
0
};
v1.unk_00 = v0;
SetScreenBackgroundColor(param0->color);
sub_02011F44(param0, &v1);
param0->direction = FADE_IN;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02011F88(param0);
}
BOOL sub_0200FAC0(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200F980 v0 = {
{ 0, 0, 255, 192 },
{ 128, 0, 128, 192 },
0,
GX_BLEND_ALL,
GX_BLEND_PLANEMASK_BD,
1
};
SetScreenBackgroundColor(param0->color);
sub_02010CF4(param0, &v0);
param0->direction = FADE_OUT;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02010D44(param0);
}
BOOL sub_0200FAEC(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200F980 v0 = {
{ 128, 0, 128, 192 },
{ 0, 0, 255, 192 },
0,
GX_BLEND_ALL,
GX_BLEND_PLANEMASK_BD,
0
};
SetScreenBackgroundColor(param0->color);
sub_02010CF4(param0, &v0);
param0->direction = FADE_IN;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02010D44(param0);
}
BOOL sub_0200FB18(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200F980 v0 = {
{ 128, 0, 128, 192 },
{ 0, 0, 128, 192 },
0,
GX_BLEND_PLANEMASK_BD,
GX_BLEND_ALL,
1
};
static const UnkStruct_0200F980 v1 = {
{ 128, 0, 128, 192 },
{ 128, 0, 255, 192 },
1,
GX_BLEND_PLANEMASK_BD,
GX_BLEND_ALL,
1
};
SetScreenBackgroundColor(param0->color);
sub_02010D94(param0, &v0, &v1);
param0->direction = FADE_OUT;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02010DEC(param0);
}
BOOL sub_0200FB4C(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200F980 v0 = {
{ 0, 0, 128, 192 },
{ 128, 0, 128, 192 },
0,
GX_BLEND_PLANEMASK_BD,
GX_BLEND_ALL,
0
};
static const UnkStruct_0200F980 v1 = {
{ 128, 0, 255, 192 },
{ 128, 0, 128, 192 },
1,
GX_BLEND_PLANEMASK_BD,
GX_BLEND_ALL,
0
};
SetScreenBackgroundColor(param0->color);
sub_02010D94(param0, &v0, &v1);
param0->direction = FADE_IN;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02010DEC(param0);
}
BOOL sub_0200FB7C(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200FB7C v0 = {
256,
0,
128,
96,
0,
GX_BLEND_ALL,
GX_BLEND_PLANEMASK_BD,
1
};
SetScreenBackgroundColor(param0->color);
sub_02010F2C(param0, &v0);
param0->direction = FADE_OUT;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02010F64(param0);
}
BOOL sub_0200FBA8(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200FB7C v0 = {
0,
256,
128,
96,
0,
GX_BLEND_ALL,
GX_BLEND_PLANEMASK_BD,
0
};
SetScreenBackgroundColor(param0->color);
sub_02010F2C(param0, &v0);
param0->direction = FADE_IN;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02010F64(param0);
}
BOOL sub_0200FBD4(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200FB7C v0 = {
512,
0,
128,
288,
0,
GX_BLEND_ALL,
GX_BLEND_PLANEMASK_BD,
1
};
SetScreenBackgroundColor(param0->color);
sub_02010F2C(param0, &v0);
param0->direction = FADE_OUT;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02010F64(param0);
}
BOOL sub_0200FC00(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200FB7C v0 = {
0,
512,
128,
288,
0,
GX_BLEND_ALL,
GX_BLEND_PLANEMASK_BD,
0
};
SetScreenBackgroundColor(param0->color);
sub_02010F2C(param0, &v0);
param0->direction = FADE_IN;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02010F64(param0);
}
BOOL sub_0200FC2C(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200FC2C v0 = {
((0xffff * 90) / 360),
0,
0,
GX_BLEND_ALL,
GX_BLEND_PLANEMASK_BD,
1
};
SetScreenBackgroundColor(param0->color);
sub_02011204(param0, &v0);
param0->direction = FADE_OUT;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_0201123C(param0);
}
BOOL sub_0200FC58(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200FC2C v0 = {
0,
((0xffff * 90) / 360),
0,
GX_BLEND_ALL,
GX_BLEND_PLANEMASK_BD,
0
};
SetScreenBackgroundColor(param0->color);
sub_02011204(param0, &v0);
param0->direction = FADE_IN;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_0201123C(param0);
}
BOOL sub_0200FC84(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200F980 v0 = {
{ 0, 0, 255, 192 }, { 128, 96, 128, 96 }, 0, GX_BLEND_ALL, GX_BLEND_PLANEMASK_BD, 1
};
SetScreenBackgroundColor(param0->color);
sub_02010CF4(param0, &v0);
param0->direction = FADE_OUT;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02010D44(param0);
}
BOOL sub_0200FCB0(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200F980 v0 = {
{ 128, 96, 128, 96 }, { 0, 0, 255, 192 }, 0, GX_BLEND_ALL, GX_BLEND_PLANEMASK_BD, 0
};
SetScreenBackgroundColor(param0->color);
sub_02010CF4(param0, &v0);
param0->direction = FADE_IN;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02010D44(param0);
}
BOOL sub_0200FCDC(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200F980 v0 = {
{ 128, 96, 128, 96 }, { 0, 0, 255, 192 }, 0, GX_BLEND_PLANEMASK_BD, GX_BLEND_ALL, 1
};
SetScreenBackgroundColor(param0->color);
sub_02010CF4(param0, &v0);
param0->direction = FADE_OUT;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02010D44(param0);
}
BOOL sub_0200FD08(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200F980 v0 = {
{ 0, 0, 255, 192 }, { 128, 96, 128, 96 }, 0, GX_BLEND_PLANEMASK_BD, GX_BLEND_ALL, 0
};
SetScreenBackgroundColor(param0->color);
sub_02010CF4(param0, &v0);
param0->direction = FADE_IN;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02010D44(param0);
}
BOOL sub_0200FD34(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200FD34 v0 = {
((0xffff * 90) / 360),
((0xffff * 0) / 360),
0,
GX_BLEND_ALL,
GX_BLEND_PLANEMASK_BD,
1
};
SetScreenBackgroundColor(param0->color);
sub_02011408(param0, &v0);
param0->direction = FADE_OUT;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02011440(param0);
}
BOOL sub_0200FD60(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200FD34 v0 = {
((0xffff * 0) / 360),
((0xffff * 90) / 360),
0,
GX_BLEND_ALL,
GX_BLEND_PLANEMASK_BD,
0
};
SetScreenBackgroundColor(param0->color);
sub_02011408(param0, &v0);
param0->direction = FADE_IN;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02011440(param0);
}
BOOL sub_0200FD8C(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200FD8C v0[] = {
{ 0, 0, 255, 48 },
{ 0, 47, 255, 96 },
{ 0, 96, 255, 144 },
{ 0, 144, 255, 192 }
};
static const UnkStruct_0200FD8C v1[] = {
{ 0, 0, 0, 48 },
{ 255, 47, 255, 96 },
{ 0, 96, 0, 144 },
{ 255, 144, 255, 192 }
};
UnkStruct_02011738 v2;
v2.unk_00 = v0;
v2.unk_04 = v1;
v2.unk_08 = 4;
v2.unk_0A = 0;
v2.unk_0C = GX_BLEND_ALL;
v2.unk_0D = GX_BLEND_PLANEMASK_BD;
v2.unk_0E = 1;
SetScreenBackgroundColor(param0->color);
sub_020116A0(param0, &v2);
param0->direction = FADE_OUT;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_020116D8(param0);
}
BOOL sub_0200FDE0(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200FD8C v0[] = {
{ 255, 0, 255, 48 }, { 0, 47, 0, 96 }, { 255, 96, 255, 144 }, { 0, 144, 0, 192 }
};
static const UnkStruct_0200FD8C v1[] = {
{ 0, 0, 255, 48 }, { 0, 47, 255, 96 }, { 0, 96, 255, 144 }, { 0, 144, 255, 192 }
};
UnkStruct_02011738 v2;
v2.unk_00 = v0;
v2.unk_04 = v1;
v2.unk_08 = 4;
v2.unk_0A = 0;
v2.unk_0C = GX_BLEND_ALL;
v2.unk_0D = GX_BLEND_PLANEMASK_BD;
v2.unk_0E = 0;
SetScreenBackgroundColor(param0->color);
sub_020116A0(param0, &v2);
param0->direction = FADE_IN;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_020116D8(param0);
}
BOOL sub_0200FE30(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200F898 v0[3] = {
{ 0, 64, 1 },
{ 64, 128, 1 },
{ 128, 192, 1 },
};
static UnkStruct_0200FE6C v1 = {
NULL, 3, 1
};
v1.unk_00 = v0;
SetScreenBackgroundColor(param0->color);
sub_02011F44(param0, &v1);
param0->direction = FADE_OUT;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02011F88(param0);
}
BOOL sub_0200FE6C(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200F898 v0[3] = {
{ 64, 0, 0 },
{ 128, 64, 0 },
{ 192, 128, 0 },
};
static UnkStruct_0200FE6C v1 = {
NULL, 3, 0
};
v1.unk_00 = v0;
SetScreenBackgroundColor(param0->color);
sub_02011F44(param0, &v1);
param0->direction = FADE_IN;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02011F88(param0);
}
BOOL sub_0200FEA4(ScreenFade *param0)
{
if (param0->state == 0) {
UnkStruct_0200FEA4 v0 = {
((0 * 0xffff) / 360), ((179 * 0xffff) / 360), GX_BLEND_PLANEMASK_BD, GX_BLEND_ALL, 1
};
SetScreenBackgroundColor(param0->color);
sub_02011960(param0, &v0);
param0->direction = FADE_OUT;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_020119A0(param0);
}
BOOL sub_0200FEEC(ScreenFade *param0)
{
if (param0->state == 0) {
UnkStruct_0200FEA4 v0 = {
((0 * 0xffff) / 360), ((179 * 0xffff) / 360), GX_BLEND_ALL, GX_BLEND_PLANEMASK_BD, 0
};
SetScreenBackgroundColor(param0->color);
sub_02011960(param0, &v0);
param0->direction = FADE_IN;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_020119A0(param0);
}
BOOL sub_0200FF30(ScreenFade *param0)
{
if (param0->state == 0) {
UnkStruct_0200FF30 v0 = {
((0 * 0xffff) / 360), ((45 * 0xffff) / 360), GX_BLEND_ALL, GX_BLEND_PLANEMASK_BD, 1
};
SetScreenBackgroundColor(param0->color);
sub_02011C94(param0, &v0);
param0->direction = FADE_OUT;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02011CD4(param0);
}
BOOL sub_0200FF78(ScreenFade *param0)
{
if (param0->state == 0) {
UnkStruct_0200FF30 v0 = {
((0 * 0xffff) / 360), ((45 * 0xffff) / 360), GX_BLEND_PLANEMASK_BD, GX_BLEND_ALL, 0
};
SetScreenBackgroundColor(param0->color);
sub_02011C94(param0, &v0);
param0->direction = FADE_IN;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02011CD4(param0);
}
BOOL sub_0200FFBC(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200FB7C v0 = {
512, 0, 128, -80, 0, GX_BLEND_ALL, GX_BLEND_PLANEMASK_BD, 1
};
SetScreenBackgroundColor(param0->color);
sub_02010F2C(param0, &v0);
param0->direction = FADE_OUT;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02010F64(param0);
}
BOOL sub_0200FFE8(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200FB7C v0 = {
0, 512, 128, -80, 0, GX_BLEND_ALL, GX_BLEND_PLANEMASK_BD, 0
};
SetScreenBackgroundColor(param0->color);
sub_02010F2C(param0, &v0);
param0->direction = FADE_IN;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02010F64(param0);
}
BOOL sub_02010014(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200F980 v0 = {
{ 0, 0, 0, 192 }, { 0, 0, 255, 192 }, 0, GX_BLEND_PLANEMASK_BD, GX_BLEND_ALL, 1
};
SetScreenBackgroundColor(param0->color);
sub_02010CF4(param0, &v0);
param0->direction = FADE_OUT;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02010D44(param0);
}
BOOL sub_02010040(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200F980 v0 = {
{ 0, 0, 255, 192 }, { 0, 0, 0, 192 }, 0, GX_BLEND_PLANEMASK_BD, GX_BLEND_ALL, 0
};
SetScreenBackgroundColor(param0->color);
sub_02010CF4(param0, &v0);
param0->direction = FADE_IN;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02010D44(param0);
}
BOOL sub_0201006C(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200F898 v0[2] = {
{ 0, 94, 1 },
{ 192, 98, 1 },
};
static UnkStruct_0201006C v1 = {
{
{ 0, 94, 255, 98 },
{ 128, 96, 128, 96 },
0,
GX_BLEND_ALL,
GX_BLEND_PLANEMASK_BD,
1,
},
{
NULL,
2,
1,
},
FX32_CONST(0.70f),
};
v1.unk_0C.unk_00 = v0;
SetScreenBackgroundColor(param0->color);
sub_020121C4(param0, &v1);
param0->direction = FADE_OUT;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02012228(param0);
}
BOOL sub_020100A8(ScreenFade *param0)
{
if (param0->state == 0) {
static const UnkStruct_0200F898 v0[2] = {
{ 94, 0, 0 },
{ 98, 192, 0 },
};
static UnkStruct_0201006C v1 = {
{
{ 128, 96, 128, 96 },
{ 0, 94, 255, 98 },
0,
GX_BLEND_ALL,
GX_BLEND_PLANEMASK_BD,
0,
},
{
NULL,
2,
0,
},
FX32_CONST(0.70f),
};
v1.unk_0C.unk_00 = v0;
SetScreenBackgroundColor(param0->color);
sub_020121C4(param0, &v1);
param0->direction = FADE_IN;
param0->method = FADE_BY_WINDOW;
return 0;
}
return sub_02012228(param0);
}
static fx32 sub_020100E0(int param0)
{
return FX_Div(FX_SinIdx(param0), FX_CosIdx(param0));
}
static int sub_020100FC(int param0, int param1)
{
fx32 v0;
fx32 v1;
v0 = sub_020100E0(param0);
v1 = FX_Mul(v0, param1 << FX32_SHIFT);
v1 >>= FX32_SHIFT;
return v1;
}
static void sub_02010124(int param0, int *param1, int param2, int param3)
{
int v0;
fx32 v1;
fx32 v2, v3;
int v4, v5;
v1 = sub_020100E0(param0);
for (v0 = param3; v0 < param2; v0++) {
v3 = v0 << FX32_SHIFT;
v2 = FX_Mul(v1, v3);
v2 >>= FX32_SHIFT;
*(param1 + v0) = v2;
}
}
static int sub_02010178(int param0, int param1)
{
fx32 v0;
fx32 v1;
int v2;
v0 = sub_020100E0(param0);
v1 = (param1 / 2) << FX32_SHIFT;
v2 = FX_Div(v1, v0);
return v2;
}
static int sub_02010190(int param0, int param1, int param2)
{
int v0 = param1 - param0;
v0 *= 128;
v0 /= param2;
return v0;
}
static int sub_020101A0(int param0, int param1)
{
int v0 = param0 + param1;
if (v0 < 0) {
v0 = 0;
}
if (v0 > 255) {
v0 = 255;
}
return v0;
}
static void sub_020101B0(UnkStruct_020101B0 *param0, UnkStruct_020101B0 *param1)
{
param0->unk_00 += param1->unk_00;
param0->unk_04 += param1->unk_04;
param0->unk_08 += param1->unk_08;
param0->unk_0C += param1->unk_0C;
}
static void sub_020101D4(UnkStruct_020101B0 *param0, UnkStruct_020101B0 *param1, UnkStruct_020101B0 *param2, const UnkStruct_0200FD8C *param3, const UnkStruct_0200FD8C *param4, int param5)
{
param0->unk_00 = param3->unk_00 * 128;
param0->unk_04 = param3->unk_01 * 128;
param0->unk_08 = param3->unk_02 * 128;
param0->unk_0C = param3->unk_03 * 128;
param1->unk_00 = param4->unk_00;
param1->unk_04 = param4->unk_01;
param1->unk_08 = param4->unk_02;
param1->unk_0C = param4->unk_03;
param2->unk_00 = sub_02010190(param3->unk_00, param4->unk_00, param5);
param2->unk_04 = sub_02010190(param3->unk_01, param4->unk_01, param5);
param2->unk_08 = sub_02010190(param3->unk_02, param4->unk_02, param5);
param2->unk_0C = sub_02010190(param3->unk_03, param4->unk_03, param5);
}
static void sub_02010238(ScreenFade *param0, int param1)
{
int v0, v1;
UnkStruct_02010318 *v2;
param0->data = Heap_Alloc(param0->heapID, sizeof(UnkStruct_02010318));
memset(param0->data, 0, sizeof(UnkStruct_02010318));
v2 = param0->data;
if (param1 == 0) {
if (param0->color == 0x7fff) {
v0 = 16;
v1 = 0;
} else if (param0->color == 0x0) {
v0 = -16;
v1 = 0;
} else {
v0 = -16;
v1 = 0;
GF_ASSERT(0);
}
} else {
if (param0->color == 0x7fff) {
v0 = 0;
v1 = 16;
} else if (param0->color == 0x0) {
v0 = 0;
v1 = -16;
} else {
v0 = 0;
v1 = -16;
GF_ASSERT(0);
}
}
SetScreenMasterBrightness(param0->screen, v0);
v2->unk_00 = param0->steps;
v2->unk_04 = param0->framesPerStep;
v2->unk_08 = 0;
v2->unk_0C = v0 * 128;
v2->unk_10 = v1 * 128;
v2->unk_14 = sub_02010190(v0, v1, param0->steps);
v2->screen = param0->screen;
param0->state++;
}
static BOOL sub_020102D8(ScreenFade *param0)
{
UnkStruct_02010318 *v0 = param0->data;
BOOL v1;
BOOL v2 = 0;
switch (param0->state) {
case 1:
v1 = sub_02010318(v0);
if (v1 == 1) {
param0->state++;
}
break;
case 2:
Heap_Free(param0->data);
param0->data = NULL;
param0->state++;
v2 = 1;
break;
case 3:
v2 = 1;
break;
default:
break;
}
return v2;
}
static BOOL sub_02010318(UnkStruct_02010318 *param0)
{
BOOL v0 = 0;
param0->unk_08++;
if (param0->unk_08 >= param0->unk_04) {
param0->unk_08 = 0;
if ((param0->unk_00 - 1) > 0) {
param0->unk_00--;
param0->unk_0C += param0->unk_14;
} else {
param0->unk_0C = param0->unk_10;
v0 = 1;
}
SetScreenMasterBrightness(param0->screen, param0->unk_0C / 128);
}
return v0;
}
static inline void inline_0201035C_sub(int param0, int param1, int param2, int param3, int param4, enum DSScreen screen)
{
if (param4 == 0) {
if (screen == DS_SCREEN_MAIN) {
if (GX_IsHBlank()) {
G2_SetWnd0Position(param0, param1, param2, param3);
}
} else {
if (GX_IsHBlank()) {
G2S_SetWnd0Position(param0, param1, param2, param3);
}
}
} else {
if (screen == DS_SCREEN_MAIN) {
if (GX_IsHBlank()) {
G2_SetWnd1Position(param0, param1, param2, param3);
}
} else {
if (GX_IsHBlank()) {
G2S_SetWnd1Position(param0, param1, param2, param3);
}
}
}
}
static inline void inline_0201035C(UnkStruct_02010588 *param0, int param1, int param2)
{
UnkStruct_02010FC0 *v0 = sub_02010604(param0, param2);
inline_0201035C_sub(v0->unk_00[0][param1], 0, v0->unk_00[1][param1], 192, v0->unk_600, param0->screen);
}
static void sub_0201035C(void *param0)
{
UnkStruct_02010588 *v0 = (UnkStruct_02010588 *)param0;
int v1;
int v2;
GF_ASSERT(param0);
v1 = GX_GetVCount();
if (v1 < 192) {
v1++;
if (v1 > 191) {
v1 -= 192;
}
if (v0->unk_04 == 1) {
inline_0201035C(v0, v1, 0);
} else {
inline_0201035C(v0, v1, 0);
inline_0201035C(v0, v1, 1);
}
}
}
static void sub_02010588(UnkStruct_02010588 *param0, int param1, enum DSScreen screen, enum HeapID heapID)
{
switch (param1) {
case 0:
case 1:
param0->unk_00 = Heap_Alloc(heapID, sizeof(UnkStruct_02010FC0));
param0->unk_04 = 1;
param0->screen = screen;
param0->unk_00->unk_600 = param1;
break;
case 2: {
int v0;
param0->unk_00 = Heap_Alloc(heapID, sizeof(UnkStruct_02010FC0) * 2);
param0->unk_04 = 2;
param0->screen = screen;
for (v0 = 0; v0 < 2; v0++) {
param0->unk_00[v0].unk_600 = v0;
}
} break;
default:
break;
}
}
static void sub_020105EC(UnkStruct_02010588 *param0)
{
sub_020105F4(param0);
}
static void sub_020105F4(UnkStruct_02010588 *param0)
{
Heap_Free(param0->unk_00);
param0->unk_00 = NULL;
}
static UnkStruct_02010FC0 *sub_02010604(UnkStruct_02010588 *param0, int param1)
{
GF_ASSERT(param0->unk_04 > param1);
return param0->unk_00 + param1;
}
static void sub_02010624(SysTask *param0, void *param1)
{
UnkStruct_02010588 *v0 = (UnkStruct_02010588 *)param1;
UnkStruct_02010FC0 *v1;
int v2;
for (v2 = 0; v2 < v0->unk_04; v2++) {
v1 = sub_02010604(v0, v2);
memcpy(v1->unk_00, v1->unk_300, sizeof(short) * 2 * 192);
}
SysTask_Done(param0);
}
static void sub_02010658(int param0, HardwareWindowSettings *param1, enum DSScreen screen)
{
if (param0 == 0) {
RequestVisibleHardwareWindows(param1, GX_WNDMASK_NONE, screen);
} else {
RequestVisibleHardwareWindows(param1, GX_WNDMASK_W0, screen);
RequestHardwareWindowMaskInsidePlane(param1, GX_BLEND_ALL, 0, 0, screen);
RequestHardwareWindowDimensions(param1, 0, 0, 0, 0, 0, screen);
RequestHardwareWindowMaskOutsidePlane(param1, GX_BLEND_PLANEMASK_BD, 0, screen);
}
}
static void sub_020106A8(HardwareWindowSettings *param0, int param1, int param2, int param3, enum DSScreen screen, int param5, int param6, int param7, int param8, int param9)
{
if (param9 == 0) {
SetHardwareWindowMaskInsidePlane(param1, 0, param3, screen);
SetHardwareWindowMaskOutsidePlane(param2, 0, screen);
SetHardwareWindowDimensions(param5, param6, param7, param8, param3, screen);
} else {
RequestHardwareWindowMaskInsidePlane(param0, param1, 0, param3, screen);
RequestHardwareWindowMaskOutsidePlane(param0, param2, 0, screen);
RequestHardwareWindowDimensions(param0, param5, param6, param7, param8, param3, screen);
}
}
static void sub_02010710(HardwareWindowSettings *param0, int param1, enum DSScreen screen, int param3)
{
if (param3 == 0) {
SetVisibleHardwareWindows(param1, screen);
} else {
RequestVisibleHardwareWindows(param0, param1, screen);
}
}
static void sub_02010728(UnkStruct_0201076C *param0, enum DSScreen screen, int param2, int param3, int param4)
{
memset(param0, 0, sizeof(UnkStruct_0201076C));
if (param2 == 1) {
param0->unk_00[0].unk_180 = param3;
param0->unk_308 = param2;
param0->screen = screen;
} else {
param0->unk_00[0].unk_180 = param3;
param0->unk_00[1].unk_180 = param4;
param0->unk_308 = param2;
param0->screen = screen;
}
}
static void sub_0201076C(UnkStruct_0201076C *param0)
{
SysTask_ExecuteAfterVBlank(sub_020107AC, param0, 1023);
}
static void sub_02010784(ScreenFadeHBlanks *param0, UnkStruct_0201076C *param1, u32 heapID)
{
RequestEnableScreenHBlank(param0, param1, sub_020107D8, param1->screen, heapID);
}
static void sub_0201079C(ScreenFadeHBlanks *param0, UnkStruct_0201076C *param1, u32 heapID)
{
RequestDisableScreenHBlank(param0, param1->screen, heapID);
}
static void sub_020107AC(SysTask *param0, void *param1)
{
UnkStruct_0201076C *v0 = param1;
int v1;
for (v1 = 0; v1 < 2; v1++) {
memcpy(v0->unk_00[v1].unk_C0, v0->unk_00[v1].unk_00, sizeof(u8) * 192);
}
SysTask_Done(param0);
}
static inline void inline_020107D8_sub(int param0, BOOL param1, enum DSScreen screen)
{
if (screen == DS_SCREEN_MAIN) {
if (GX_IsHBlank()) {
G2_SetWndOutsidePlane(param0, param1);
}
} else {
if (GX_IsHBlank()) {
G2S_SetWndOutsidePlane(param0, param1);
}
}
}
static inline void inline_020107D8_sub_1(int param0, BOOL param1, int param4, enum DSScreen screen)
{
if (param4 == 0) {
if (screen == DS_SCREEN_MAIN) {
if (GX_IsHBlank()) {
G2_SetWnd0InsidePlane(param0, param1);
}
} else {
if (GX_IsHBlank()) {
G2S_SetWnd0InsidePlane(param0, param1);
}
}
} else {
if (screen == DS_SCREEN_MAIN) {
if (GX_IsHBlank()) {
G2_SetWnd1InsidePlane(param0, param1);
}
} else {
if (GX_IsHBlank()) {
G2S_SetWnd1InsidePlane(param0, param1);
}
}
}
}
static inline void inline_020107D8(UnkStruct_0201076C *param0, int param1, int param2)
{
UnkStruct_02012174 *v0 = &param0->unk_00[param2];
if (v0->unk_C0[param1] == 0) {
inline_020107D8_sub(GX_BLEND_ALL, 1, param0->screen);
inline_020107D8_sub_1(GX_BLEND_PLANEMASK_BD, 1, v0->unk_180, param0->screen);
} else {
inline_020107D8_sub(GX_BLEND_PLANEMASK_BD, 1, param0->screen);
inline_020107D8_sub_1(GX_BLEND_ALL, 1, v0->unk_180, param0->screen);
}
}
static void sub_020107D8(void *param0)
{
UnkStruct_0201076C *v0 = (UnkStruct_0201076C *)param0;
int v1;
int v2;
GF_ASSERT(param0);
v1 = GX_GetVCount();
if (v1 < 192) {
v1++;
if (v1 > 191) {
v1 -= 192;
}
if (v0->unk_308 == 1) {
inline_020107D8(v0, v1, 0);
} else {
inline_020107D8(v0, v1, 0);
inline_020107D8(v0, v1, 1);
}
}
}
static void sub_02010CF4(ScreenFade *param0, const UnkStruct_0200F980 *param1)
{
UnkStruct_02010EA4 *v0;
param0->data = Heap_Alloc(param0->heapID, sizeof(UnkStruct_02010EA4));
v0 = (UnkStruct_02010EA4 *)param0->data;
sub_02010E48(v0, param1, param0->steps, param0->framesPerStep, param0->screen, param0->hwSettings);
if (param1->unk_08 == 0) {
sub_02010710(param0->hwSettings, GX_WNDMASK_W0, v0->screen, v0->unk_44);
} else {
sub_02010710(param0->hwSettings, GX_WNDMASK_W1, v0->screen, v0->unk_44);
}
param0->state++;
}
static BOOL sub_02010D44(ScreenFade *param0)
{
UnkStruct_02010EA4 *v0;
BOOL v1;
BOOL v2 = 0;
v0 = (UnkStruct_02010EA4 *)param0->data;
switch (param0->state) {
case 1:
v1 = sub_02010EA4(v0);
if (v1 == 1) {
sub_02010658(v0->unk_44, param0->hwSettings, param0->screen);
param0->state++;
}
break;
case 2:
Heap_Free(param0->data);
param0->data = NULL;
param0->state++;
v2 = 1;
break;
case 3:
v2 = 1;
break;
default:
break;
}
return v2;
}
static void sub_02010D94(ScreenFade *param0, const UnkStruct_0200F980 *param1, const UnkStruct_0200F980 *param2)
{
UnkStruct_02010D94 *v0;
param0->data = Heap_Alloc(param0->heapID, sizeof(UnkStruct_02010D94));
v0 = (UnkStruct_02010D94 *)param0->data;
sub_02010E48(&v0->unk_00, param1, param0->steps, param0->framesPerStep, param0->screen, param0->hwSettings);
sub_02010E48(&v0->unk_4C, param2, param0->steps, param0->framesPerStep, param0->screen, param0->hwSettings);
sub_02010710(param0->hwSettings, GX_WNDMASK_W0 | GX_WNDMASK_W1, param0->screen, v0->unk_00.unk_44);
param0->state++;
}
static BOOL sub_02010DEC(ScreenFade *param0)
{
UnkStruct_02010D94 *v0;
BOOL v1;
BOOL v2 = 0;
v0 = (UnkStruct_02010D94 *)param0->data;
switch (param0->state) {
case 1:
v1 = sub_02010EA4(&v0->unk_00);
v1 += sub_02010EA4(&v0->unk_4C);
if (v1 == 2) {
sub_02010658(v0->unk_00.unk_44, param0->hwSettings, param0->screen);
param0->state++;
}
break;
case 2:
Heap_Free(param0->data);
param0->data = NULL;
param0->state++;
v2 = 1;
break;
case 3:
v2 = 1;
break;
}
return v2;
}
static void sub_02010E48(UnkStruct_02010EA4 *param0, const UnkStruct_0200F980 *param1, int param2, int param3, enum DSScreen screen, HardwareWindowSettings *param5)
{
sub_020101D4(&param0->unk_00, &param0->unk_20, &param0->unk_10, &param1->unk_00, &param1->unk_04, param2);
param0->screen = screen;
param0->unk_34 = param1->unk_08;
param0->unk_38 = param2;
param0->unk_3C = param3;
param0->unk_40 = 0;
param0->unk_48 = param5;
param0->unk_44 = param1->unk_0B;
sub_020106A8(param5, param1->unk_09, param1->unk_0A, param1->unk_08, screen, param1->unk_00.unk_00, param1->unk_00.unk_01, param1->unk_00.unk_02, param1->unk_00.unk_03, param0->unk_44);
}
static BOOL sub_02010EA4(UnkStruct_02010EA4 *param0)
{
param0->unk_40++;
if (param0->unk_40 >= param0->unk_3C) {
param0->unk_40 = 0;
if ((param0->unk_38 - 1) > 0) {
param0->unk_38--;
sub_020101B0(&param0->unk_00, &param0->unk_10);
} else {
RequestHardwareWindowDimensions(param0->unk_48, param0->unk_20.unk_00, param0->unk_20.unk_04, param0->unk_20.unk_08, param0->unk_20.unk_0C, param0->unk_34, param0->screen);
return 1;
}
RequestHardwareWindowDimensions(param0->unk_48, param0->unk_00.unk_00 / 128, param0->unk_00.unk_04 / 128, param0->unk_00.unk_08 / 128, param0->unk_00.unk_0C / 128, param0->unk_34, param0->screen);
}
return 0;
}
static void sub_02010F2C(ScreenFade *param0, const UnkStruct_0200FB7C *param1)
{
UnkStruct_0201109C *v0;
param0->data = Heap_Alloc(param0->heapID, sizeof(UnkStruct_0201109C));
v0 = (UnkStruct_0201109C *)param0->data;
sub_02010FC0(v0, param1, param0->steps, param0->framesPerStep, param0->screen, param0->hwSettings, param0->hblanks, param0->heapID);
param0->state++;
}
static BOOL sub_02010F64(ScreenFade *param0)
{
UnkStruct_0201109C *v0;
BOOL v1;
BOOL v2 = 0;
v0 = (UnkStruct_0201109C *)param0->data;
switch (param0->state) {
case 1:
v1 = sub_0201109C(v0);
if (v1 == 1) {
sub_02010658(v0->unk_2C, v0->unk_30, param0->screen);
param0->state++;
}
break;
case 2:
sub_020105EC(&v0->unk_00);
Heap_Free(param0->data);
param0->data = NULL;
param0->state++;
v2 = 1;
break;
case 3:
v2 = 1;
break;
default:
GF_ASSERT(0);
break;
}
return v2;
}
static void sub_02010FC0(UnkStruct_0201109C *param0, const UnkStruct_0200FB7C *param1, int param2, int param3, enum DSScreen screen, HardwareWindowSettings *param5, ScreenFadeHBlanks *param6, enum HeapID heapID)
{
int v0;
UnkStruct_02010FC0 *v1;
v0 = sub_02010190(param1->unk_00, param1->unk_02, param2);
sub_02010588(&param0->unk_00, param1->unk_08, screen, heapID);
param0->unk_0C = param1->unk_00 * 128;
param0->unk_10 = param1->unk_04;
param0->unk_14 = param1->unk_06;
param0->unk_18 = v0;
param0->unk_1C = param2;
param0->unk_20 = param3;
param0->unk_24 = 0;
param0->unk_30 = param5;
param0->unk_34 = param6;
param0->heapID = heapID;
param0->unk_2C = param1->unk_0B;
sub_02011180(param0);
SysTask_ExecuteAfterVBlank(sub_02010624, &param0->unk_00, 1023);
v1 = sub_02010604(&param0->unk_00, 0);
sub_020106A8(param5, param1->unk_09, param1->unk_0A, param1->unk_08, screen, v1->unk_300[0][0], 0, v1->unk_300[1][0], 192, param0->unk_2C);
if (param1->unk_08 == 0) {
sub_02010710(param5, GX_WNDMASK_W0, screen, param0->unk_2C);
} else {
sub_02010710(param5, GX_WNDMASK_W1, screen, param0->unk_2C);
}
RequestEnableScreenHBlank(param0->unk_34, &param0->unk_00, sub_0201035C, screen, heapID);
}
static BOOL sub_0201109C(UnkStruct_0201109C *param0)
{
param0->unk_24++;
if (param0->unk_24 >= param0->unk_20) {
param0->unk_24 = 0;
if ((param0->unk_1C - 1) > 0) {
param0->unk_1C--;
param0->unk_0C += param0->unk_18;
sub_02011180(param0);
SysTask_ExecuteAfterVBlank(sub_02010624, &param0->unk_00, 1023);
} else {
RequestDisableScreenHBlank(param0->unk_34, param0->unk_00.screen, param0->heapID);
return 1;
}
}
return 0;
}
static void sub_020110EC(int param0, int param1, int param2, int param3, int *param4, int *param5)
{
fx32 v0;
fx32 v1;
fx32 v2;
v0 = param0 / 128;
v1 = param3 - param2;
if (v1 < 0) {
v1 = -v1;
}
if (v1 >= v0) {
*param4 = 0;
*param5 = 0;
} else {
v1 <<= FX32_SHIFT;
v0 <<= FX32_SHIFT;
v2 = FX_Sqrt(FX_Mul(v0, v0) - FX_Mul(v1, v1));
v2 >>= FX32_SHIFT;
*param4 = param1 - v2;
if (*param4 < 0) {
*param4 = 0;
}
*param5 = *param4 + (v2 * 2);
if (*param5 > 255) {
*param5 = 255;
}
}
}
static void sub_02011180(UnkStruct_0201109C *param0)
{
UnkStruct_02010588 *v0 = &param0->unk_00;
int v1;
int v2;
int v3;
int v4;
UnkStruct_02010FC0 *v5 = sub_02010604(v0, 0);
for (v1 = 0; v1 < 192; v1++) {
if (v1 <= param0->unk_14) {
sub_020110EC(param0->unk_0C, param0->unk_10, param0->unk_14, v1, &v2, &v3);
} else {
if (v1 <= (param0->unk_14 * 2)) {
v2 = v5->unk_300[0][(param0->unk_14 * 2) - v1];
v3 = v5->unk_300[1][(param0->unk_14 * 2) - v1];
} else {
sub_020110EC(param0->unk_0C, param0->unk_10, param0->unk_14, v1, &v2, &v3);
}
}
v5->unk_300[0][v1] = v2;
v5->unk_300[1][v1] = v3;
}
}
static void sub_02011204(ScreenFade *param0, const UnkStruct_0200FC2C *param1)
{
UnkStruct_02011360 *v0;
param0->data = Heap_Alloc(param0->heapID, sizeof(UnkStruct_02011360));
v0 = (UnkStruct_02011360 *)param0->data;
sub_02011298(v0, param1, param0->steps, param0->framesPerStep, param0->screen, param0->hwSettings, param0->hblanks, param0->heapID);
param0->state++;
}
static BOOL sub_0201123C(ScreenFade *param0)
{
UnkStruct_02011360 *v0;
BOOL v1;
BOOL v2 = 0;
v0 = (UnkStruct_02011360 *)param0->data;
switch (param0->state) {
case 1:
v1 = sub_02011360(v0);
if (v1 == 1) {
sub_02010658(v0->unk_20, v0->unk_24, param0->screen);
param0->state++;
}
break;
case 2:
sub_020105EC(&v0->unk_00);
Heap_Free(param0->data);
param0->data = NULL;
param0->state++;
v2 = 1;
break;
case 3:
v2 = 1;
break;
default:
GF_ASSERT(0);
break;
}
return v2;
}
static void sub_02011298(UnkStruct_02011360 *param0, const UnkStruct_0200FC2C *param1, int param2, int param3, enum DSScreen screen, HardwareWindowSettings *param5, ScreenFadeHBlanks *param6, enum HeapID heapID)
{
UnkStruct_02010FC0 *v0;
param0->unk_10 = sub_02010190(param1->unk_00, param1->unk_02, param2);
sub_02010588(&param0->unk_00, param1->unk_04, screen, heapID);
param0->unk_0C = param1->unk_00 * 128;
param0->unk_14 = param2;
param0->unk_18 = param3;
param0->unk_1C = 0;
param0->unk_24 = param5;
param0->unk_28 = param6;
param0->heapID = heapID;
param0->unk_20 = param1->unk_07;
sub_020113B0(param0);
SysTask_ExecuteAfterVBlank(sub_02010624, &param0->unk_00, 1023);
v0 = sub_02010604(&param0->unk_00, 0);
sub_020106A8(param5, param1->unk_05, param1->unk_06, param1->unk_04, screen, v0->unk_300[0][0], 0, v0->unk_300[1][0], 192, param0->unk_20);
if (param1->unk_04 == 0) {
sub_02010710(param5, GX_WNDMASK_W0, screen, param0->unk_20);
} else {
sub_02010710(param5, GX_WNDMASK_W1, screen, param0->unk_20);
}
RequestEnableScreenHBlank(param0->unk_28, &param0->unk_00, sub_0201035C, screen, heapID);
}
static BOOL sub_02011360(UnkStruct_02011360 *param0)
{
param0->unk_1C++;
if (param0->unk_1C >= param0->unk_18) {
param0->unk_1C = 0;
if ((param0->unk_14 - 1) > 0) {
param0->unk_14--;
param0->unk_0C += param0->unk_10;
sub_020113B0(param0);
SysTask_ExecuteAfterVBlank(sub_02010624, &param0->unk_00, 1023);
} else {
RequestDisableScreenHBlank(param0->unk_28, param0->unk_00.screen, param0->heapID);
return 1;
}
}
return 0;
}
static void sub_020113B0(UnkStruct_02011360 *param0)
{
int v0;
int v1, v2;
int v3[192];
UnkStruct_02010FC0 *v4 = sub_02010604(&param0->unk_00, 0);
sub_02010124(param0->unk_0C / 128, v3, 192, 0);
for (v0 = 0; v0 < 192; v0++) {
v4->unk_300[0][v0] = sub_020101A0(128, -v3[v0]);
v4->unk_300[1][v0] = sub_020101A0(128, v3[v0]);
}
}
static void sub_02011408(ScreenFade *param0, const UnkStruct_0200FD34 *param1)
{
UnkStruct_02011568 *v0;
param0->data = Heap_Alloc(param0->heapID, sizeof(UnkStruct_02011568));
v0 = (UnkStruct_02011568 *)param0->data;
sub_02011494(v0, param1, param0->steps, param0->framesPerStep, param0->screen, param0->hwSettings, param0->hblanks, param0->heapID);
param0->state++;
}
static BOOL sub_02011440(ScreenFade *param0)
{
UnkStruct_02011568 *v0;
BOOL v1;
BOOL v2 = 0;
v0 = (UnkStruct_02011568 *)param0->data;
switch (param0->state) {
case 1:
v1 = sub_02011568(v0);
if (v1 == 1) {
sub_02010658(v0->unk_24, v0->unk_28, param0->screen);
param0->state++;
}
break;
case 2:
sub_020105EC(&v0->unk_00);
Heap_Free(param0->data);
param0->data = NULL;
param0->state++;
v2 = 1;
break;
case 3:
v2 = 1;
break;
}
return v2;
}
static void sub_02011494(UnkStruct_02011568 *param0, const UnkStruct_0200FD34 *param1, int param2, int param3, enum DSScreen screen, HardwareWindowSettings *param5, ScreenFadeHBlanks *param6, enum HeapID heapID)
{
int v0;
UnkStruct_02010FC0 *v1;
v0 = (param1->unk_02 - param1->unk_00);
v0 /= param2;
sub_02010588(&param0->unk_00, param1->unk_04, screen, heapID);
param0->unk_0C = 128 * FX32_ONE;
param0->unk_10 = param1->unk_00;
param0->unk_14 = v0;
param0->unk_18 = param2;
param0->unk_1C = param3;
param0->unk_20 = 0;
param0->unk_28 = param5;
param0->unk_2C = param6;
param0->heapID = heapID;
param0->unk_24 = param1->unk_07;
sub_020115B8(param0);
SysTask_ExecuteAfterVBlank(sub_02010624, &param0->unk_00, 1023);
v1 = sub_02010604(&param0->unk_00, 0);
sub_020106A8(param5, param1->unk_05, param1->unk_06, param1->unk_04, screen, v1->unk_300[0][96], 0, v1->unk_300[1][96], 192, param0->unk_24);
if (param1->unk_04 == 0) {
sub_02010710(param5, GX_WNDMASK_W0, screen, param0->unk_24);
} else {
sub_02010710(param5, GX_WNDMASK_W1, screen, param0->unk_24);
}
RequestEnableScreenHBlank(param0->unk_2C, &param0->unk_00, sub_0201035C, screen, heapID);
}
static BOOL sub_02011568(UnkStruct_02011568 *param0)
{
param0->unk_20++;
if (param0->unk_20 >= param0->unk_1C) {
param0->unk_20 = 0;
if ((param0->unk_18 - 1) > 0) {
param0->unk_18--;
param0->unk_10 += param0->unk_14;
sub_020115B8(param0);
SysTask_ExecuteAfterVBlank(sub_02010624, &param0->unk_00, 1023);
} else {
RequestDisableScreenHBlank(param0->unk_2C, param0->unk_00.screen, param0->heapID);
return 1;
}
}
return 0;
}
static void sub_020115B8(UnkStruct_02011568 *param0)
{
int v0;
int v1;
int v2;
int v3[192];
int v4;
int v5;
int v6;
int v7, v8;
UnkStruct_02010FC0 *v9 = sub_02010604(&param0->unk_00, 0);
v5 = FX_Mul(FX_SinIdx(param0->unk_10), param0->unk_0C);
v5 >>= FX32_SHIFT;
v2 = v5 * 2;
v2 = v2 / 21;
v2 += 1;
v2 = 180 - (v2 * 2);
v2 = ((0xffff * (v2)) / 360);
v2 /= 2;
v1 = sub_02010178(v2, 256);
v1 >>= FX32_SHIFT;
GF_ASSERT(v1 < 192);
sub_02010124(v2, v3, v1, 0);
for (v0 = 0; v0 < 96; v0++) {
v4 = v1 - (v0 + 1);
v6 = v5;
if (v4 > 0) {
if (v3[v4] > v6) {
v6 = v3[v4];
}
}
v7 = sub_020101A0(128, -v6);
v8 = sub_020101A0(128, v6);
v9->unk_300[0][v0] = v7;
v9->unk_300[1][v0] = v8;
v9->unk_300[0][191 - v0] = v7;
v9->unk_300[1][191 - v0] = v8;
}
}
static void sub_020116A0(ScreenFade *param0, const UnkStruct_02011738 *param1)
{
UnkStruct_0201184C *v0;
param0->data = Heap_Alloc(param0->heapID, sizeof(UnkStruct_0201184C));
v0 = (UnkStruct_0201184C *)param0->data;
sub_02011738(v0, param1, param0->steps, param0->framesPerStep, param0->screen, param0->hwSettings, param0->hblanks, param0->heapID);
param0->state++;
}
static BOOL sub_020116D8(ScreenFade *param0)
{
UnkStruct_0201184C *v0;
BOOL v1;
BOOL v2 = 0;
v0 = (UnkStruct_0201184C *)param0->data;
switch (param0->state) {
case 1:
v1 = sub_0201184C(v0);
if (v1 == 1) {
sub_02010658(v0->unk_20, v0->unk_24, param0->screen);
param0->state++;
}
break;
case 2:
sub_0201189C(v0);
sub_020105EC(&v0->unk_00);
Heap_Free(param0->data);
param0->data = NULL;
param0->state++;
v2 = 1;
break;
case 3:
v2 = 1;
break;
default:
GF_ASSERT(0);
break;
}
return v2;
}
static void sub_02011738(UnkStruct_0201184C *param0, const UnkStruct_02011738 *param1, int param2, int param3, enum DSScreen screen, HardwareWindowSettings *param5, ScreenFadeHBlanks *param6, enum HeapID heapID)
{
int v0;
UnkStruct_02010FC0 *v1;
param0->unk_0C = Heap_Alloc(heapID, sizeof(UnkStruct_0201184C_sub1) * param1->unk_08);
GF_ASSERT(param0->unk_0C != NULL);
param0->unk_10 = param1->unk_08;
for (v0 = 0; v0 < param1->unk_08; v0++) {
sub_020101D4(&param0->unk_0C[v0].unk_00, &param0->unk_0C[v0].unk_20, &param0->unk_0C[v0].unk_10, (param1->unk_00 + v0), (param1->unk_04 + v0), param2);
}
sub_02010588(&param0->unk_00, param1->unk_0A, screen, heapID);
param0->unk_14 = param2;
param0->unk_18 = param3;
param0->unk_1C = 0;
param0->unk_24 = param5;
param0->unk_28 = param6;
param0->heapID = heapID;
param0->unk_20 = param1->unk_0E;
sub_020118AC(param0);
SysTask_ExecuteAfterVBlank(sub_02010624, &param0->unk_00, 1023);
v1 = sub_02010604(&param0->unk_00, 0);
sub_020106A8(param5, param1->unk_0C, param1->unk_0D, param1->unk_0A, screen, v1->unk_300[0][0], 0, v1->unk_300[1][0], 192, param0->unk_20);
if (param1->unk_0A == 0) {
sub_02010710(param0->unk_24, GX_WNDMASK_W0, screen, param0->unk_20);
} else {
sub_02010710(param0->unk_24, GX_WNDMASK_W1, screen, param0->unk_20);
}
RequestEnableScreenHBlank(param0->unk_28, &param0->unk_00, sub_0201035C, screen, heapID);
}
static BOOL sub_0201184C(UnkStruct_0201184C *param0)
{
param0->unk_1C++;
if (param0->unk_1C >= param0->unk_18) {
param0->unk_1C = 0;
if ((param0->unk_14 - 1) > 0) {
param0->unk_14--;
sub_02011938(param0);
sub_020118AC(param0);
SysTask_ExecuteAfterVBlank(sub_02010624, &param0->unk_00, 1023);
} else {
RequestDisableScreenHBlank(param0->unk_28, param0->unk_00.screen, param0->heapID);
return 1;
}
}
return 0;
}
static void sub_0201189C(UnkStruct_0201184C *param0)
{
Heap_Free(param0->unk_0C);
param0->unk_0C = NULL;
}
static void sub_020118AC(UnkStruct_0201184C *param0)
{
int v0;
UnkStruct_02010FC0 *v1 = sub_02010604(&param0->unk_00, 0);
memset(v1->unk_300, 0, 768);
for (v0 = (param0->unk_10 - 1); v0 >= 0; v0--) {
sub_020118E0(&param0->unk_00, &param0->unk_0C[v0].unk_00);
}
}
static void sub_020118E0(UnkStruct_02010588 *param0, UnkStruct_020101B0 *param1)
{
int v0;
UnkStruct_02010FC0 *v1;
UnkStruct_020101B0 v2;
v1 = sub_02010604(param0, 0);
v2.unk_00 = param1->unk_00 / 128;
v2.unk_04 = param1->unk_04 / 128;
v2.unk_08 = param1->unk_08 / 128;
v2.unk_0C = param1->unk_0C / 128;
for (v0 = v2.unk_04; v0 < v2.unk_0C; v0++) {
v1->unk_300[0][v0] = v2.unk_00;
v1->unk_300[1][v0] = v2.unk_08;
}
}
static void sub_02011938(UnkStruct_0201184C *param0)
{
int v0;
for (v0 = 0; v0 < param0->unk_10; v0++) {
sub_020101B0(&param0->unk_0C[v0].unk_00, &param0->unk_0C[v0].unk_10);
}
}
static void sub_02011960(ScreenFade *param0, UnkStruct_0200FEA4 *param1)
{
UnkStruct_02011AFC *v0;
param0->data = Heap_Alloc(param0->heapID, sizeof(UnkStruct_02011AFC));
memset(param0->data, 0, sizeof(UnkStruct_02011AFC));
v0 = param0->data;
sub_02011A00(v0, param1, param0->steps, param0->framesPerStep, param0->screen, param0->hwSettings, param0->hblanks, param0->heapID);
param0->state++;
}
static BOOL sub_020119A0(ScreenFade *param0)
{
UnkStruct_02011AFC *v0;
BOOL v1;
BOOL v2 = 0;
v0 = (UnkStruct_02011AFC *)param0->data;
switch (param0->state) {
case 1:
v1 = sub_02011AFC(v0);
if (v1 == 1) {
sub_02010658(v0->unk_28, v0->unk_30, param0->screen);
param0->state++;
}
break;
case 2:
sub_02011B54(v0);
sub_020105EC(&v0->unk_00);
Heap_Free(param0->data);
param0->data = NULL;
param0->state++;
v2 = 1;
break;
case 3:
v2 = 1;
break;
default:
GF_ASSERT(0);
break;
}
return v2;
}
static void sub_02011A00(UnkStruct_02011AFC *param0, UnkStruct_0200FEA4 *param1, int param2, int param3, enum DSScreen screen, HardwareWindowSettings *param5, ScreenFadeHBlanks *param6, enum HeapID heapID)
{
UnkStruct_02010FC0 *v0;
UnkStruct_02010FC0 *v1;
param0->unk_0C.unk_00 = 0;
param0->unk_0C.unk_04 = param1->unk_00;
param0->unk_0C.unk_08 = param1->unk_02 - param1->unk_00;
sub_02010588(&param0->unk_00, 2, screen, heapID);
param0->unk_18 = param2;
param0->unk_1C = 0;
param0->unk_20 = param3;
param0->unk_24 = 0;
param0->unk_30 = param5;
param0->unk_34 = param6;
param0->heapID = heapID;
param0->unk_28 = param1->unk_06;
sub_02011C7C(&param0->unk_0C, param0->unk_1C, param0->unk_18);
sub_02011B58(param0);
SysTask_ExecuteAfterVBlank(sub_02010624, &param0->unk_00, 1023);
v0 = sub_02010604(&param0->unk_00, 0);
v1 = sub_02010604(&param0->unk_00, 1);
sub_020106A8(param5, param1->unk_04, param1->unk_05, 0, screen, v0->unk_300[0][0], 0, v0->unk_300[1][0], 192, param0->unk_28);
sub_020106A8(param5, param1->unk_04, param1->unk_05, 1, screen, v1->unk_300[0][0], 0, v1->unk_300[1][0], 192, param0->unk_28);
sub_02010710(param5, GX_WNDMASK_W0 | GX_WNDMASK_W1, screen, param0->unk_28);
RequestEnableScreenHBlank(param0->unk_34, &param0->unk_00, sub_0201035C, screen, heapID);
}
static BOOL sub_02011AFC(UnkStruct_02011AFC *param0)
{
param0->unk_24++;
if (param0->unk_24 >= param0->unk_20) {
param0->unk_24 = 0;
if ((param0->unk_1C + 1) <= param0->unk_18) {
param0->unk_1C++;
sub_02011C7C(&param0->unk_0C, param0->unk_1C, param0->unk_18);
sub_02011B58(param0);
SysTask_ExecuteAfterVBlank(sub_02010624, &param0->unk_00, 1023);
} else {
RequestDisableScreenHBlank(param0->unk_34, param0->unk_00.screen, param0->heapID);
return 1;
}
}
return 0;
}
static void sub_02011B54(UnkStruct_02011AFC *param0)
{
return;
}
static void sub_02011B58(UnkStruct_02011AFC *param0)
{
UnkStruct_02010FC0 *v0;
UnkStruct_02010FC0 *v1;
u16 v2;
int v3, v4;
int v5;
v2 = param0->unk_0C.unk_00 % ((90 * 0xffff) / 360);
v0 = sub_02010604(&param0->unk_00, 0);
v1 = sub_02010604(&param0->unk_00, 1);
for (v5 = 0; v5 < 96; v5++) {
if (param0->unk_0C.unk_00 < ((90 * 0xffff) / 360)) {
v3 = 128;
v4 = sub_020100FC(v2, (96 - v5));
if (v4 > 127) {
v4 = 127;
}
v0->unk_300[0][191 - v5] = v3 - v4;
v0->unk_300[1][191 - v5] = v3;
v1->unk_300[0][v5] = v3;
v1->unk_300[1][v5] = v3 + v4;
} else {
v0->unk_300[0][191 - v5] = 0;
v0->unk_300[1][191 - v5] = 128;
v1->unk_300[0][v5] = 128;
v1->unk_300[1][v5] = 255;
}
}
for (v5 = 96; v5 < 192; v5++) {
if (param0->unk_0C.unk_00 < ((90 * 0xffff) / 360)) {
v0->unk_300[0][191 - v5] = 128;
v0->unk_300[1][191 - v5] = 128;
v1->unk_300[0][v5] = 128;
v1->unk_300[1][v5] = 128;
} else {
v3 = sub_020100FC(((90 * 0xffff) / 360) - v2, (v5 - 96));
if (v3 > 127) {
v3 = 127;
}
v0->unk_300[0][191 - v5] = 0;
v0->unk_300[1][191 - v5] = 128 - v3;
v1->unk_300[0][v5] = 128 + v3;
v1->unk_300[1][v5] = 255;
}
}
}
static void sub_02011C7C(UnkStruct_02011C7C *param0, int param1, int param2)
{
int v0 = param0->unk_08 * param1;
v0 = v0 / param2;
param0->unk_00 = v0 + param0->unk_04;
}
static void sub_02011C94(ScreenFade *param0, UnkStruct_0200FF30 *param1)
{
UnkStruct_02011E04 *v0;
param0->data = Heap_Alloc(param0->heapID, sizeof(UnkStruct_02011E04));
memset(param0->data, 0, sizeof(UnkStruct_02011E04));
v0 = param0->data;
sub_02011D34(v0, param1, param0->steps, param0->framesPerStep, param0->screen, param0->hwSettings, param0->hblanks, param0->heapID);
param0->state++;
}
static BOOL sub_02011CD4(ScreenFade *param0)
{
UnkStruct_02011E04 *v0;
BOOL v1;
BOOL v2 = 0;
v0 = (UnkStruct_02011E04 *)param0->data;
switch (param0->state) {
case 1:
v1 = sub_02011E04(v0);
if (v1 == 1) {
sub_02010658(v0->unk_28, v0->unk_30, param0->screen);
param0->state++;
}
break;
case 2:
sub_02011E5C(v0);
sub_020105EC(&v0->unk_00);
Heap_Free(param0->data);
param0->data = NULL;
param0->state++;
v2 = 1;
break;
case 3:
v2 = 1;
break;
default:
GF_ASSERT(0);
break;
}
return v2;
}
static void sub_02011D34(UnkStruct_02011E04 *param0, UnkStruct_0200FF30 *param1, int param2, int param3, enum DSScreen screen, HardwareWindowSettings *param5, ScreenFadeHBlanks *param6, enum HeapID heapID)
{
UnkStruct_02010FC0 *v0;
UnkStruct_02010FC0 *v1;
param0->unk_0C.unk_00 = param1->unk_00;
param0->unk_0C.unk_04 = param1->unk_00;
param0->unk_0C.unk_08 = param1->unk_02 - param1->unk_00;
sub_02010588(&param0->unk_00, 2, screen, heapID);
param0->unk_18 = param2;
param0->unk_1C = 0;
param0->unk_20 = param3;
param0->unk_24 = 0;
param0->unk_30 = param5;
param0->unk_34 = param6;
param0->heapID = heapID;
param0->unk_28 = param1->unk_06;
sub_02011E60(param0);
SysTask_ExecuteAfterVBlank(sub_02010624, &param0->unk_00, 1023);
v0 = sub_02010604(&param0->unk_00, 0);
v1 = sub_02010604(&param0->unk_00, 1);
sub_020106A8(param5, param1->unk_04, param1->unk_05, 0, screen, 0, 0, 255, 192, param0->unk_28);
sub_020106A8(param5, param1->unk_04, param1->unk_05, 1, screen, 0, 0, 255, 192, param0->unk_28);
sub_02010710(param5, GX_WNDMASK_W0 | GX_WNDMASK_W1, screen, param0->unk_28);
RequestEnableScreenHBlank(param0->unk_34, &param0->unk_00, sub_0201035C, screen, heapID);
}
static BOOL sub_02011E04(UnkStruct_02011E04 *param0)
{
param0->unk_24++;
if (param0->unk_24 >= param0->unk_20) {
param0->unk_24 = 0;
if ((param0->unk_1C + 1) <= param0->unk_18) {
param0->unk_1C++;
sub_02011F2C(&param0->unk_0C, param0->unk_1C, param0->unk_18);
sub_02011E60(param0);
SysTask_ExecuteAfterVBlank(sub_02010624, &param0->unk_00, 1023);
} else {
RequestDisableScreenHBlank(param0->unk_34, param0->unk_00.screen, param0->heapID);
return 1;
}
}
return 0;
}
static void sub_02011E5C(UnkStruct_02011E04 *param0)
{
return;
}
static void sub_02011E60(UnkStruct_02011E04 *param0)
{
UnkStruct_02010FC0 *v0;
UnkStruct_02010FC0 *v1;
u16 v2;
int v3, v4;
int v5;
v2 = param0->unk_0C.unk_00;
v0 = sub_02010604(&param0->unk_00, 0);
v1 = sub_02010604(&param0->unk_00, 1);
for (v5 = 0; v5 < 96; v5++) {
v3 = sub_020100FC(v2, (96 - v5));
v4 = sub_020100FC(((90 * 0xffff) / 360) - v2, (96 - v5));
if (v3 > 127) {
v3 = 127;
}
if (v4 > 127) {
v4 = 127;
}
v0->unk_300[0][v5] = 128 - v4;
v0->unk_300[1][v5] = 128 - v3;
v0->unk_300[0][191 - v5] = 128 - v4;
v0->unk_300[1][191 - v5] = 128 - v3;
v1->unk_300[0][v5] = 128 + v3;
v1->unk_300[1][v5] = 128 + v4;
v1->unk_300[0][191 - v5] = 128 + v3;
v1->unk_300[1][191 - v5] = 128 + v4;
}
}
static void sub_02011F2C(UnkStruct_02011F2C *param0, int param1, int param2)
{
int v0 = param0->unk_08 * param1;
v0 = v0 / param2;
param0->unk_00 = v0 + param0->unk_04;
}
static void sub_02011F44(ScreenFade *param0, UnkStruct_0200FE6C *param1)
{
UnkStruct_020120D4 *v0;
param0->data = Heap_Alloc(param0->heapID, sizeof(UnkStruct_020120D4));
memset(param0->data, 0, sizeof(UnkStruct_020120D4));
v0 = param0->data;
sub_02011FE8(v0, param1, param0->steps, param0->framesPerStep, param0->screen, param0->hwSettings, param0->hblanks, param0->heapID);
param0->state++;
}
static BOOL sub_02011F88(ScreenFade *param0)
{
UnkStruct_020120D4 *v0;
BOOL v1;
BOOL v2 = 0;
v0 = (UnkStruct_020120D4 *)param0->data;
switch (param0->state) {
case 1:
v1 = sub_020120D4(v0);
if (v1 == 1) {
sub_02010658(v0->unk_324, v0->unk_32C, param0->screen);
param0->state++;
}
break;
case 2:
sub_02012134(v0);
Heap_Free(param0->data);
param0->data = NULL;
param0->state++;
v2 = 1;
break;
case 3:
v2 = 1;
break;
default:
GF_ASSERT(0);
break;
}
return v2;
}
static void sub_02011FE8(UnkStruct_020120D4 *param0, UnkStruct_0200FE6C *param1, int param2, int param3, enum DSScreen screen, HardwareWindowSettings *param5, ScreenFadeHBlanks *param6, enum HeapID heapID)
{
sub_02010728(&param0->unk_00, screen, 1, 0, 0);
if (param1->unk_06 == 0) {
memset(param0->unk_00.unk_00[0].unk_00, 1, sizeof(u8) * 192);
memset(param0->unk_00.unk_00[0].unk_C0, 1, sizeof(u8) * 192);
} else {
memset(param0->unk_00.unk_00[0].unk_00, 0, sizeof(u8) * 192);
memset(param0->unk_00.unk_00[0].unk_C0, 0, sizeof(u8) * 192);
}
param0->unk_30C = param1->unk_00;
param0->unk_310 = param1->unk_04;
param0->unk_324 = param1->unk_06;
param0->heapID = heapID;
param0->unk_314 = param2;
param0->unk_318 = 0;
param0->unk_31C = param3;
param0->unk_320 = 0;
param0->unk_32C = param5;
param0->unk_330 = param6;
sub_02010784(param6, &param0->unk_00, heapID);
if (param1->unk_06 == 1) {
sub_020106A8(param5, GX_BLEND_PLANEMASK_BD, GX_BLEND_ALL, 0, screen, 0, 0, 0, 0, param1->unk_06);
} else {
sub_020106A8(param5, GX_BLEND_ALL, GX_BLEND_PLANEMASK_BD, 0, screen, 0, 0, 0, 0, param1->unk_06);
}
sub_02010710(param5, GX_WNDMASK_W0, screen, param0->unk_324);
}
static BOOL sub_020120D4(UnkStruct_020120D4 *param0)
{
param0->unk_320++;
if (param0->unk_320 >= param0->unk_31C) {
param0->unk_320 = 0;
if ((param0->unk_318 + 1) <= param0->unk_314) {
param0->unk_318++;
sub_02012138(param0);
sub_0201076C(&param0->unk_00);
} else {
sub_0201079C(param0->unk_330, &param0->unk_00, param0->heapID);
return 1;
}
}
return 0;
}
static void sub_02012134(UnkStruct_020120D4 *param0)
{
return;
}
static void sub_02012138(UnkStruct_020120D4 *param0)
{
int v0;
UnkStruct_02012174 *v1;
const UnkStruct_0200F898 *v2;
v1 = &param0->unk_00.unk_00[0];
for (v0 = 0; v0 < param0->unk_310; v0++) {
v2 = &param0->unk_30C[v0];
sub_02012174(v2, v1, param0->unk_318, param0->unk_314);
}
}
static void sub_02012174(const UnkStruct_0200F898 *param0, UnkStruct_02012174 *param1, int param2, int param3)
{
int v0;
int v1;
int v2;
int v3;
int v4;
int v5;
v1 = (param0->unk_01 - param0->unk_00) * param2;
v2 = v1 / param3;
v2 += param0->unk_00;
if (param0->unk_00 <= param0->unk_01) {
v3 = param0->unk_00;
v4 = param0->unk_01;
v5 = param0->unk_02;
} else {
v3 = param0->unk_01;
v4 = param0->unk_00;
if (param0->unk_02 == 0) {
v5 = 1;
} else {
v5 = 0;
}
}
for (v0 = v3; v0 < v4; v0++) {
if (v0 == v2) {
if (v5 == 0) {
v5 = 1;
} else {
v5 = 0;
}
}
param1->unk_00[v0] = v5;
}
}
static void sub_020121C4(ScreenFade *param0, UnkStruct_0201006C *param1)
{
UnkStruct_02012290 *v0;
param0->data = Heap_Alloc(param0->heapID, sizeof(UnkStruct_02012290));
memset(param0->data, 0, sizeof(UnkStruct_02012290));
v0 = param0->data;
if (param1->unk_00.unk_0B == 0) {
sub_02012290(v0, param1, param0->steps, param0->framesPerStep, param0->screen, param0->hwSettings, param0->hblanks, param0->heapID);
} else {
sub_02012384(v0, param1, param0->steps, param0->framesPerStep, param0->screen, param0->hwSettings, param0->hblanks, param0->heapID);
}
param0->state++;
}
static BOOL sub_02012228(ScreenFade *param0)
{
UnkStruct_02012290 *v0;
BOOL v1;
BOOL v2 = 0;
v0 = (UnkStruct_02012290 *)param0->data;
switch (param0->state) {
case 1:
if (v0->unk_386 == 0) {
v1 = sub_02012310(v0, param0);
} else {
v1 = sub_020123F4(v0, param0);
}
if (v1 == 1) {
sub_02010658(param0->direction, param0->hwSettings, param0->screen);
param0->state++;
}
break;
case 2:
Heap_Free(param0->data);
param0->data = NULL;
param0->state++;
v2 = 1;
break;
case 3:
v2 = 1;
break;
default:
GF_ASSERT(0);
break;
}
return v2;
}
static void sub_02012290(UnkStruct_02012290 *param0, UnkStruct_0201006C *param1, int param2, int param3, enum DSScreen screen, HardwareWindowSettings *param5, ScreenFadeHBlanks *param6, int param7)
{
int v0 = FX_Mul(param2 * FX32_ONE, param1->unk_14) >> FX32_SHIFT;
param0->unk_384 = param2 - v0;
param0->unk_380 = param1;
param0->unk_386 = param1->unk_00.unk_0B;
sub_02010E48(&param0->unk_00, &param1->unk_00, v0, param3, screen, param5);
if (param1->unk_00.unk_08 == 0) {
sub_02010710(param5, GX_WNDMASK_W0, screen, param1->unk_00.unk_0B);
} else {
sub_02010710(param5, GX_WNDMASK_W1, screen, param1->unk_00.unk_0B);
}
param0->unk_385 = 0;
}
static BOOL sub_02012310(UnkStruct_02012290 *param0, ScreenFade *param1)
{
BOOL v0;
BOOL v1 = 0;
switch (param0->unk_385) {
case 0:
v0 = sub_02010EA4(&param0->unk_00);
if (v0 == 1) {
param0->unk_385++;
sub_02011FE8(&param0->unk_4C, &param0->unk_380->unk_0C, param0->unk_384, param1->framesPerStep, param1->screen, param1->hwSettings, param1->hblanks, param1->heapID);
}
break;
case 1:
v0 = sub_020120D4(&param0->unk_4C);
if (v0 == 1) {
v1 = 1;
param0->unk_385++;
}
break;
case 2:
v1 = 1;
break;
}
return v1;
}
static void sub_02012384(UnkStruct_02012290 *param0, UnkStruct_0201006C *param1, int param2, int param3, enum DSScreen screen, HardwareWindowSettings *param5, ScreenFadeHBlanks *param6, enum HeapID heapID)
{
int v0;
param0->unk_384 = FX_Mul(param2 * FX32_ONE, param1->unk_14) >> FX32_SHIFT;
v0 = param2 - param0->unk_384;
param0->unk_380 = param1;
param0->unk_386 = param1->unk_00.unk_0B;
sub_02011FE8(&param0->unk_4C, &param0->unk_380->unk_0C, v0, param3, screen, param5, param6, heapID);
param0->unk_385 = 0;
}
static BOOL sub_020123F4(UnkStruct_02012290 *param0, ScreenFade *param1)
{
BOOL v0;
BOOL v1 = 0;
switch (param0->unk_385) {
case 0:
v0 = sub_020120D4(&param0->unk_4C);
if (v0 == 1) {
param0->unk_385++;
sub_02010E48(&param0->unk_00, &param0->unk_380->unk_00, param0->unk_384, param1->framesPerStep, param1->screen, param1->hwSettings);
if (param0->unk_380->unk_00.unk_08 == 0) {
sub_02010710(param1->hwSettings, GX_WNDMASK_W0, param1->screen, param0->unk_380->unk_00.unk_0B);
} else {
sub_02010710(param1->hwSettings, GX_WNDMASK_W1, param1->screen, param0->unk_380->unk_00.unk_0B);
}
}
break;
case 1:
v0 = sub_02010EA4(&param0->unk_00);
if (v0 == 1) {
v1 = 1;
param0->unk_385++;
}
break;
case 2:
v1 = 1;
break;
}
return v1;
}