pokeplatinum/src/overlay012/ov12_0222AC70.c
2025-03-09 19:24:44 -04:00

2142 lines
63 KiB
C

#include "overlay012/ov12_0222AC70.h"
#include <nitro.h>
#include <string.h>
#include "overlay012/ov12_0221FC20.h"
#include "overlay012/ov12_02225864.h"
#include "overlay012/ov12_02235254.h"
#include "overlay012/struct_ov12_0221FCDC_decl.h"
#include "overlay012/struct_ov12_02225D50.h"
#include "overlay012/struct_ov12_02225F6C.h"
#include "overlay012/struct_ov12_02226454.h"
#include "overlay012/struct_ov12_022267D4_decl.h"
#include "overlay012/struct_ov12_0222C7E0_sub1.h"
#include "overlay012/struct_ov12_02235350.h"
#include "overlay012/struct_ov12_0223595C.h"
#include "overlay012/struct_ov12_02235998.h"
#include "bg_window.h"
#include "heap.h"
#include "palette.h"
#include "pltt_transfer.h"
#include "pokemon_sprite.h"
#include "sprite.h"
#include "sprite_system.h"
#include "sys_task_manager.h"
typedef struct {
u8 unk_00;
u8 unk_01[3];
u8 unk_04;
u8 unk_05;
u8 unk_06;
UnkStruct_ov12_0221FCDC *unk_08;
SpriteSystem *unk_0C;
SpriteManager *unk_10;
ManagedSprite *unk_14[3];
UnkStruct_ov12_02225F6C unk_20;
} UnkStruct_ov12_0222AC70;
typedef struct {
u8 unk_00;
u8 unk_01;
s16 unk_02;
int unk_04;
u8 unk_08;
UnkStruct_ov12_0221FCDC *unk_0C;
PokemonSprite *unk_10;
UnkStruct_ov12_02225F6C unk_14;
UnkStruct_ov12_02225F6C unk_38;
} UnkStruct_ov12_0222AFA0;
typedef struct {
u8 unk_00;
u8 unk_01;
s16 unk_02;
int unk_04;
UnkStruct_ov12_0221FCDC *unk_08;
PokemonSprite *unk_0C;
UnkStruct_ov12_02225F6C unk_10;
UnkStruct_ov12_02225F6C unk_34;
} UnkStruct_ov12_0222B220;
typedef struct {
u8 unk_00;
u8 unk_01;
u16 unk_02;
u8 unk_04;
u8 unk_05;
u16 unk_06;
s16 unk_08;
s16 unk_0A;
UnkStruct_ov12_0221FCDC *unk_0C;
PokemonSprite *unk_10;
SpriteManager *unk_14;
ManagedSprite *unk_18[4];
UnkStruct_ov12_02225F6C unk_28[4];
} UnkStruct_ov12_0222B4C8;
typedef struct {
u8 unk_00;
u8 unk_01;
u8 unk_02;
UnkStruct_ov12_0221FCDC *unk_04;
PokemonSprite *unk_08;
UnkStruct_ov12_02225F6C unk_0C;
} UnkStruct_ov12_0222B914;
typedef struct {
u8 unk_00;
u8 unk_01;
s16 unk_02;
s16 unk_04;
UnkStruct_ov12_0221FCDC *unk_08;
PokemonSprite *unk_0C;
UnkStruct_ov12_02225F6C unk_10;
} UnkStruct_ov12_0222BA18;
typedef struct {
u8 unk_00;
u8 unk_01;
s16 unk_02;
s16 unk_04;
s16 unk_06;
UnkStruct_ov12_0221FCDC *unk_08;
PokemonSprite *unk_0C;
UnkStruct_ov12_02225F6C unk_10;
} UnkStruct_ov12_0222BB30;
typedef struct {
u8 unk_00;
u8 unk_01;
PaletteData *unk_04;
UnkStruct_ov12_0221FCDC *unk_08;
UnkStruct_ov12_022267D4 *unk_0C;
PokemonSprite *unk_10;
} UnkStruct_ov12_0222BD48;
typedef struct {
u8 unk_00;
u8 unk_01;
u8 unk_02;
s16 unk_04;
s16 unk_06;
UnkStruct_ov12_0221FCDC *unk_08;
PokemonSprite *unk_0C;
UnkStruct_ov12_02225F6C unk_10;
UnkStruct_ov12_02225F6C unk_34;
} UnkStruct_ov12_0222BE80;
typedef struct {
u8 unk_00;
u8 unk_01;
UnkStruct_ov12_0221FCDC *unk_04;
SpriteManager *unk_08;
ManagedSprite *unk_0C;
ManagedSprite *unk_10;
} UnkStruct_ov12_0222BFF4;
typedef struct {
u8 unk_00;
u8 unk_01;
ManagedSprite *unk_04;
UnkStruct_ov12_02225F6C unk_08;
} UnkStruct_ov12_0222C1A4_sub1;
typedef struct {
u8 unk_00;
u8 unk_01;
s16 unk_02;
int unk_04;
s8 unk_08;
PokemonSprite *unk_0C;
UnkStruct_ov12_0221FCDC *unk_10;
SpriteManager *unk_14;
UnkStruct_ov12_0222C1A4_sub1 unk_18[3];
} UnkStruct_ov12_0222C1A4;
typedef struct {
u8 unk_00;
u8 unk_01;
u8 unk_02;
u8 unk_03;
int unk_04;
BgConfig *unk_08;
UnkStruct_ov12_0221FCDC *unk_0C;
SpriteManager *unk_10;
UnkStruct_ov12_02235998 unk_14[4];
UnkStruct_ov12_02235998 unk_64[4];
UnkStruct_ov12_02225F6C unk_B4;
} UnkStruct_ov12_0222C4A8;
typedef struct {
u8 unk_00;
u8 unk_01;
u8 unk_02;
u8 unk_03;
UnkStruct_ov12_02235350 unk_04;
BgConfig *unk_08;
UnkStruct_ov12_0221FCDC *unk_0C;
SpriteManager *unk_10;
PokemonSprite *unk_14;
ManagedSprite *unk_18;
UnkStruct_ov12_02225F6C unk_1C;
UnkStruct_ov12_02225F6C unk_40;
UnkStruct_ov12_02226454 unk_64;
} UnkStruct_ov12_0222C678;
typedef struct {
UnkStruct_ov12_0223595C unk_00;
UnkStruct_ov12_0222C7E0_sub1 unk_1C;
PokemonSprite *unk_28[2];
s16 unk_30;
s16 unk_32;
s16 unk_34;
s16 unk_36;
UnkStruct_ov12_02225F6C unk_38;
UnkStruct_ov12_02225D50 unk_5C;
} UnkStruct_ov12_0222C7E0;
typedef struct {
UnkStruct_ov12_0223595C unk_00;
UnkStruct_ov12_0222C7E0_sub1 unk_1C;
UnkStruct_ov12_02235350 unk_28[4];
PokemonSprite *unk_38[4];
int unk_48;
UnkStruct_ov12_02225F6C unk_4C;
} UnkStruct_ov12_0222C994;
typedef struct {
UnkStruct_ov12_0223595C unk_00;
UnkStruct_ov12_0222C7E0_sub1 unk_1C;
UnkStruct_ov12_02235350 unk_28[2];
PokemonSprite *unk_30[2];
ManagedSprite *unk_38[2];
UnkStruct_ov12_02225F6C unk_40[2];
} UnkStruct_ov12_0222CACC;
typedef struct {
int unk_00;
int unk_04;
int unk_08;
UnkStruct_ov12_02235350 unk_0C;
UnkStruct_ov12_0223595C unk_10;
UnkStruct_ov12_0222C7E0_sub1 unk_2C;
ManagedSprite *unk_38;
UnkStruct_ov12_02235998 unk_3C[4];
UnkStruct_ov12_02225F6C unk_8C[2];
UnkStruct_ov12_02225D50 unk_D4;
} UnkStruct_ov12_0222CBFC;
typedef struct {
int unk_00;
int unk_04;
int unk_08;
u8 unk_0C;
u8 unk_0D;
u8 unk_0E;
u8 unk_0F;
u8 unk_10;
u8 unk_11;
s16 unk_12;
UnkStruct_ov12_02235350 unk_14;
UnkStruct_ov12_0223595C unk_18;
UnkStruct_ov12_0222C7E0_sub1 unk_34;
ManagedSprite *unk_40;
ManagedSprite *unk_44[2];
UnkStruct_ov12_02235998 unk_4C[4];
UnkStruct_ov12_02225F6C unk_9C;
UnkStruct_ov12_02225D50 unk_C0;
} UnkStruct_ov12_0222CDF0;
typedef struct {
ManagedSprite *unk_00;
UnkStruct_ov12_02225F6C unk_04[2];
} UnkStruct_ov12_0222D128_sub1;
typedef struct {
u8 unk_00;
u8 unk_01;
int unk_04;
int unk_08;
u8 unk_0C;
UnkStruct_ov12_0221FCDC *unk_10;
SpriteSystem *unk_14;
SpriteManager *unk_18;
PokemonSprite *unk_1C;
s16 unk_20;
int unk_24;
u16 unk_28;
fx32 unk_2C;
UnkStruct_ov12_0222D128_sub1 unk_30[2];
s16 unk_C8;
s16 unk_CA;
UnkStruct_ov12_02225F6C unk_CC;
} UnkStruct_ov12_0222D128;
static const u8 Unk_ov12_0223A09E[][2] = {
{ 0x8, 0x2 },
{ 0xD, 0x1 },
{ 0x12, 0x3 }
};
static void ov12_0222AC70(SysTask *param0, void *param1)
{
int v0;
UnkStruct_ov12_0222AC70 *v1 = (UnkStruct_ov12_0222AC70 *)param1;
switch (v1->unk_00) {
case 0:
v1->unk_04++;
for (v0 = 0; v0 < ov12_02220280(v1->unk_08, 0); v0++) {
{
s16 v2, v3;
ManagedSprite_GetPositionXY(v1->unk_14[v0], &v2, &v3);
}
if (v1->unk_04 >= Unk_ov12_0223A09E[v0][0]) {
v1->unk_01[v0]++;
if (v1->unk_01[v0] >= Unk_ov12_0223A09E[v0][1]) {
v1->unk_01[v0] = 0;
if (ManagedSprite_GetDrawFlag(v1->unk_14[v0]) == 1) {
ManagedSprite_SetDrawFlag(v1->unk_14[v0], 0);
} else {
ManagedSprite_SetDrawFlag(v1->unk_14[v0], 1);
}
}
} else {
ManagedSprite_SetDrawFlag(v1->unk_14[v0], 0);
}
}
if (v1->unk_04 >= 45) {
for (v0 = 0; v0 < ov12_02220280(v1->unk_08, 0); v0++) {
ManagedSprite_SetDrawFlag(v1->unk_14[v0], 1);
}
v1->unk_04 = 0;
v1->unk_00++;
}
break;
case 1:
ov12_02225EF0(&v1->unk_20, 100, 60, 100, 100, 100, 10);
v1->unk_00++;
break;
case 2:
if (ov12_02225F6C(&v1->unk_20) == 1) {
for (v0 = 0; v0 < ov12_02220280(v1->unk_08, 0); v0++) {
f32 v4, v5;
ov12_02225FA4(&v1->unk_20, &v4, &v5);
ManagedSprite_SetAffineScale(v1->unk_14[v0], v4, v5);
}
} else {
if (++v1->unk_04 >= 45) {
v1->unk_00++;
}
}
break;
case 3:
if (v1->unk_05 > 0) {
v1->unk_05--;
}
if (v1->unk_06 < 15) {
v1->unk_06++;
}
if ((v1->unk_05 == 0) && (v1->unk_06 == 15)) {
v1->unk_00++;
}
G2_ChangeBlendAlpha(v1->unk_05, v1->unk_06);
break;
default:
for (v0 = 0; v0 < ov12_02220280(v1->unk_08, 0); v0++) {
Sprite_DeleteAndFreeResources(v1->unk_14[v0]);
}
ov12_02220220(v1->unk_08, param0);
Heap_FreeToHeap(v1);
return;
}
for (v0 = 0; v0 < ov12_02220280(v1->unk_08, 0); v0++) {
Sprite_TickFrame(v1->unk_14[v0]->sprite);
}
SpriteSystem_DrawSprites(v1->unk_10);
}
void ov12_0222AE68(UnkStruct_ov12_0221FCDC *param0, SpriteSystem *param1, SpriteManager *param2, ManagedSprite *param3)
{
int v0;
UnkStruct_ov12_0222AC70 *v1;
SpriteTemplate v2;
v1 = Heap_AllocFromHeap(ov12_0221FDE4(param0), sizeof(UnkStruct_ov12_0222AC70));
GF_ASSERT(v1 != NULL);
v1->unk_04 = 0;
v1->unk_00 = 0;
v1->unk_0C = param1;
v1->unk_10 = param2;
v1->unk_08 = param0;
v2 = ov12_0222329C(param0);
ov12_02235780(v1->unk_08, 0xffffffff, 0xffffffff);
v1->unk_05 = 15;
v1->unk_06 = 0;
G2_ChangeBlendAlpha(v1->unk_05, v1->unk_06);
v1->unk_14[0] = param3;
{
UnkStruct_ov12_02235350 v3;
int v4 = ov12_0223525C(param0, ov12_02220248(param0));
if (v4 == 0x3) {
ov12_02235350(0, ov12_0221FDD4(param0), &v3);
} else {
ov12_02235350(1, ov12_0221FDD4(param0), &v3);
}
for (v0 = 1; v0 < ov12_02220280(v1->unk_08, 0); v0++) {
v1->unk_14[v0] = SpriteSystem_NewSprite(v1->unk_0C, v1->unk_10, &v2);
ManagedSprite_SetPositionXY(v1->unk_14[v0], v3.unk_00, v3.unk_02);
}
ManagedSprite_SetPositionXY(v1->unk_14[0], v3.unk_00, v3.unk_02);
}
for (v0 = 0; v0 < ov12_02220280(v1->unk_08, 0); v0++) {
v1->unk_01[v0] = 0;
ManagedSprite_SetAffineOverwriteMode(v1->unk_14[v0], AFFINE_OVERWRITE_MODE_DOUBLE);
ManagedSprite_OffsetPositionXY(v1->unk_14[v0], 0, 32 - (v0 * 4));
ManagedSprite_SetExplicitOamMode(v1->unk_14[v0], GX_OAM_MODE_XLU);
}
ov12_022201CC(param0, ov12_0222AC70, v1, 0x1000);
}
static void ov12_0222AFA0(SysTask *param0, void *param1)
{
UnkStruct_ov12_0222AFA0 *v0 = (UnkStruct_ov12_0222AFA0 *)param1;
switch (v0->unk_00) {
case 0:
if (ov12_02225EB8(&v0->unk_14) == 1) {
ov12_02226138(&v0->unk_38);
sub_02007DEC(v0->unk_10, 12, v0->unk_14.unk_00);
sub_02007DEC(v0->unk_10, 13, v0->unk_14.unk_02);
sub_02008274(v0->unk_10, 0, v0->unk_38.unk_00);
{
s16 v1 = ov12_02225FD4(v0->unk_02, v0->unk_04, v0->unk_14.unk_04[4]);
sub_02007DEC(v0->unk_10, 1, v0->unk_02 + v1);
}
} else {
v0->unk_00++;
}
break;
case 1:
sub_020086FC(v0->unk_10, 0, 10, 0, 0x1F);
v0->unk_00++;
break;
case 2:
if (sub_020087B4(v0->unk_10) == 0) {
sub_020086FC(v0->unk_10, 10, 0, 0, 0x1F);
v0->unk_00++;
}
break;
case 3:
if (sub_020087B4(v0->unk_10) == 0) {
v0->unk_08++;
if (v0->unk_08 >= 3) {
ov12_02225E68(&v0->unk_14, ov12_02220280(v0->unk_0C, 0), 100, ov12_02220280(v0->unk_0C, 1), ov12_02220280(v0->unk_0C, 3));
v0->unk_00++;
} else {
v0->unk_00 = 1;
}
}
break;
case 4:
if (ov12_02225EB8(&v0->unk_14) == 1) {
sub_02007DEC(v0->unk_10, 12, v0->unk_14.unk_00);
sub_02007DEC(v0->unk_10, 13, v0->unk_14.unk_02);
{
s16 v2 = ov12_02225FD4(v0->unk_02, v0->unk_04, v0->unk_14.unk_04[4]);
sub_02007DEC(v0->unk_10, 1, v0->unk_02 + v2);
}
} else {
v0->unk_00++;
}
break;
case 5:
if (ov12_02225EB8(&v0->unk_14) == 1) {
sub_02007DEC(v0->unk_10, 12, v0->unk_14.unk_00);
sub_02007DEC(v0->unk_10, 13, v0->unk_14.unk_02);
{
s16 v3 = ov12_02225FD4(v0->unk_02, v0->unk_04, v0->unk_14.unk_04[4]);
sub_02007DEC(v0->unk_10, 1, v0->unk_02 + v3);
}
} else {
sub_02007DEC(v0->unk_10, 12, 0x100);
sub_02007DEC(v0->unk_10, 13, 0x100);
sub_02007DEC(v0->unk_10, 1, v0->unk_02);
v0->unk_00++;
}
break;
default:
ov12_02220220(v0->unk_0C, param0);
Heap_FreeToHeap(v0);
break;
}
}
void ov12_0222B194(UnkStruct_ov12_0221FCDC *param0)
{
UnkStruct_ov12_0222AFA0 *v0 = Heap_AllocFromHeap(ov12_0221FDE4(param0), sizeof(UnkStruct_ov12_0222AFA0));
v0->unk_08 = 0;
v0->unk_00 = 0;
v0->unk_0C = param0;
v0->unk_10 = ov12_022232FC(v0->unk_0C, ov12_02220240(v0->unk_0C));
v0->unk_02 = sub_020080C0(v0->unk_10, 1);
v0->unk_04 = ov12_02223354(v0->unk_0C, ov12_02220240(v0->unk_0C));
ov12_02225E68(&v0->unk_14, 100, 100, ov12_02220280(param0, 0), ov12_02220280(param0, 2));
ov12_02226108(&v0->unk_38, 2, 0, 0, 10);
ov12_022201E8(v0->unk_0C, ov12_0222AFA0, v0);
}
static void ov12_0222B220(SysTask *param0, void *param1)
{
UnkStruct_ov12_0222B220 *v0 = (UnkStruct_ov12_0222B220 *)param1;
switch (v0->unk_00) {
case 0:
if (ov12_02225F6C(&v0->unk_10) == 1) {
sub_02007DEC(v0->unk_0C, 12, v0->unk_10.unk_00);
sub_02007DEC(v0->unk_0C, 13, v0->unk_10.unk_02);
{
s16 v1 = ov12_02225FD4(v0->unk_02, v0->unk_04, v0->unk_10.unk_04[4]);
sub_02007DEC(v0->unk_0C, 1, v0->unk_02 + v1);
}
} else {
ov12_02225EF0(&v0->unk_10, 150, 50, 50, 150, 100, 10);
v0->unk_00++;
}
break;
case 1:
if (ov12_02225F6C(&v0->unk_10) == 1) {
sub_02007DEC(v0->unk_0C, 12, v0->unk_10.unk_00);
sub_02007DEC(v0->unk_0C, 13, v0->unk_10.unk_02);
{
s16 v2 = ov12_02225FD4(v0->unk_02, v0->unk_04, v0->unk_10.unk_04[4]);
sub_02007DEC(v0->unk_0C, 1, v0->unk_02 + v2);
}
} else {
ov12_02225EF0(&v0->unk_10, 50, 100, 150, 100, 100, 5);
v0->unk_00++;
}
break;
case 2:
if (ov12_02225F6C(&v0->unk_10) == 1) {
sub_02007DEC(v0->unk_0C, 12, v0->unk_10.unk_00);
sub_02007DEC(v0->unk_0C, 13, v0->unk_10.unk_02);
{
s16 v3 = ov12_02225FD4(v0->unk_02, v0->unk_04, v0->unk_10.unk_04[4]);
sub_02007DEC(v0->unk_0C, 1, v0->unk_02 + v3);
}
} else {
ov12_02225EF0(&v0->unk_10, 100, 150, 100, 150, 100, 5);
v0->unk_00++;
}
break;
case 3:
if (ov12_02225F6C(&v0->unk_10) == 1) {
sub_02007DEC(v0->unk_0C, 12, v0->unk_10.unk_00);
sub_02007DEC(v0->unk_0C, 13, v0->unk_10.unk_02);
{
s16 v4 = ov12_02225FD4(v0->unk_02, v0->unk_04, v0->unk_10.unk_04[4]);
sub_02007DEC(v0->unk_0C, 1, v0->unk_02 + v4);
}
} else {
ov12_02225EF0(&v0->unk_10, 150, 100, 150, 100, 100, 5);
v0->unk_00++;
}
break;
case 4:
if (ov12_02225F6C(&v0->unk_10) == 1) {
sub_02007DEC(v0->unk_0C, 12, v0->unk_10.unk_00);
sub_02007DEC(v0->unk_0C, 13, v0->unk_10.unk_02);
{
s16 v5 = ov12_02225FD4(v0->unk_02, v0->unk_04, v0->unk_10.unk_04[4]);
sub_02007DEC(v0->unk_0C, 1, v0->unk_02 + v5);
}
} else {
sub_02007DEC(v0->unk_0C, 12, 0x100);
sub_02007DEC(v0->unk_0C, 13, 0x100);
sub_02007DEC(v0->unk_0C, 1, v0->unk_02);
v0->unk_00++;
}
break;
default:
ov12_02220220(v0->unk_08, param0);
Heap_FreeToHeap(v0);
break;
}
}
void ov12_0222B45C(UnkStruct_ov12_0221FCDC *param0)
{
UnkStruct_ov12_0222B220 *v0 = Heap_AllocFromHeap(ov12_0221FDE4(param0), sizeof(UnkStruct_ov12_0222B220));
v0->unk_00 = 0;
v0->unk_08 = param0;
v0->unk_0C = ov12_022232FC(v0->unk_08, ov12_02220240(v0->unk_08));
v0->unk_02 = sub_020080C0(v0->unk_0C, 1);
v0->unk_04 = ov12_02223354(v0->unk_08, ov12_02220240(v0->unk_08));
ov12_02225EF0(&v0->unk_10, 100, 150, 100, 50, 100, 10);
ov12_022201E8(v0->unk_08, ov12_0222B220, v0);
}
static const s16 Unk_ov12_0223A0FE[][3] = {
{ 0x0, 0x20, 0x7 },
{ 0x0, 0x20, 0xA },
{ 0x20, 0x0, 0x7 },
{ 0x20, 0x0, 0xA }
};
static void ov12_0222B4C8(SysTask *param0, void *param1)
{
int v0;
u8 v1;
UnkStruct_ov12_0222B4C8 *v2 = (UnkStruct_ov12_0222B4C8 *)param1;
switch (v2->unk_01) {
case 0: {
int v3 = (v2->unk_00 % 2) * 2;
int v4 = (v2->unk_00 + 1) / 2;
ov12_02225BC8(&v2->unk_28[0], v2->unk_08 + Unk_ov12_0223A0FE[v3][0], v2->unk_08 + Unk_ov12_0223A0FE[v3][1], v2->unk_0A, v2->unk_0A, Unk_ov12_0223A0FE[v3][2] - v4);
ov12_02225BC8(&v2->unk_28[1], v2->unk_08 - Unk_ov12_0223A0FE[v3][0], v2->unk_08 - Unk_ov12_0223A0FE[v3][1], v2->unk_0A, v2->unk_0A, Unk_ov12_0223A0FE[v3][2] - v4);
ov12_02225BC8(&v2->unk_28[2], v2->unk_08 + Unk_ov12_0223A0FE[v3 + 1][0], v2->unk_08 + Unk_ov12_0223A0FE[v3 + 1][1], v2->unk_0A, v2->unk_0A, Unk_ov12_0223A0FE[v3 + 1][2] - v4);
ov12_02225BC8(&v2->unk_28[3], v2->unk_08 - Unk_ov12_0223A0FE[v3 + 1][0], v2->unk_08 - Unk_ov12_0223A0FE[v3 + 1][1], v2->unk_0A, v2->unk_0A, Unk_ov12_0223A0FE[v3 + 1][2] - v4);
}
v2->unk_00++;
v2->unk_01++;
case 1:
v1 = 0;
for (v0 = 0; v0 < 4; v0++) {
if (ov12_02225C14(&v2->unk_28[v0]) == 0) {
v1++;
} else {
ManagedSprite_SetPositionXY(v2->unk_18[v0], v2->unk_28[v0].unk_00, v2->unk_28[v0].unk_02);
}
ManagedSprite_TickFrame(v2->unk_18[v0]);
}
if (v1 == 4) {
if (v2->unk_00 == 9) {
v2->unk_01++;
} else {
v2->unk_01 = 0;
}
}
break;
case 2:
if (v2->unk_04 > 0) {
v2->unk_04--;
}
if (v2->unk_05 < 15) {
v2->unk_05++;
}
if ((v2->unk_04 == 0) && (v2->unk_05 == 15)) {
v2->unk_01++;
}
G2_ChangeBlendAlpha(v2->unk_04, v2->unk_05);
break;
default:
ov12_02220220(v2->unk_0C, param0);
Heap_FreeToHeap(v2);
return;
}
SpriteSystem_DrawSprites(v2->unk_14);
}
void ov12_0222B68C(UnkStruct_ov12_0221FCDC *param0)
{
UnkStruct_ov12_0222B4C8 *v0 = Heap_AllocFromHeap(ov12_0221FDE4(param0), sizeof(UnkStruct_ov12_0222B4C8));
v0->unk_01 = 0;
v0->unk_00 = 0;
v0->unk_0C = param0;
v0->unk_10 = ov12_022232FC(v0->unk_0C, ov12_02220240(v0->unk_0C));
v0->unk_08 = sub_020080C0(v0->unk_10, 0);
v0->unk_0A = sub_020080C0(v0->unk_10, 1);
v0->unk_0A -= sub_020080C0(v0->unk_10, 41);
v0->unk_14 = ov12_022202EC(v0->unk_0C);
v0->unk_04 = 8;
v0->unk_05 = 6;
ov12_02235780(v0->unk_0C, 0xffffffff, 0xffffffff);
G2_ChangeBlendAlpha(v0->unk_04, v0->unk_05);
{
int v1;
u16 v2;
int v3 = ov12_02223334(v0->unk_0C, ov12_02220240(v0->unk_0C));
int v4 = ov12_0222339C(v0->unk_0C);
int v5 = ov12_02223344(v0->unk_0C, ov12_02220240(v0->unk_0C));
for (v1 = 0; v1 < 4; v1++) {
v0->unk_18[v1] = ov12_022202C0(v0->unk_0C, v1);
ManagedSprite_SetExplicitOamMode(v0->unk_18[v1], GX_OAM_MODE_XLU);
}
if (ov12_0223525C(v0->unk_0C, ov12_02220240(v0->unk_0C)) == 0x3) {
ManagedSprite_SetPriority(v0->unk_18[0], 10);
ManagedSprite_SetPriority(v0->unk_18[1], 10);
ManagedSprite_SetPriority(v0->unk_18[2], 20);
ManagedSprite_SetPriority(v0->unk_18[3], 20);
ManagedSprite_SetExplicitPriority(v0->unk_18[0], v4);
ManagedSprite_SetExplicitPriority(v0->unk_18[1], v4);
ManagedSprite_SetExplicitPriority(v0->unk_18[2], v4);
ManagedSprite_SetExplicitPriority(v0->unk_18[3], v4);
v2 = PlttTransfer_GetPlttOffset(Sprite_GetPaletteProxy(v0->unk_18[0]->sprite), NNS_G2D_VRAM_TYPE_2DMAIN);
PaletteData_LoadBufferFromFileStartWithTint(ov12_0222332C(v0->unk_0C), v5, v3, ov12_0221FDE4(param0), 2, 0x20, v2 * 16, 128, 128, 128);
v2 = PlttTransfer_GetPlttOffset(Sprite_GetPaletteProxy(v0->unk_18[2]->sprite), NNS_G2D_VRAM_TYPE_2DMAIN);
PaletteData_LoadBufferFromFileStartWithTint(ov12_0222332C(v0->unk_0C), v5, v3, ov12_0221FDE4(param0), 2, 0x20, v2 * 16, 196, 196, 196);
} else {
ManagedSprite_SetPriority(v0->unk_18[0], 20);
ManagedSprite_SetPriority(v0->unk_18[1], 20);
ManagedSprite_SetPriority(v0->unk_18[2], 10);
ManagedSprite_SetPriority(v0->unk_18[3], 10);
ManagedSprite_SetExplicitPriority(v0->unk_18[0], v4 + 1);
ManagedSprite_SetExplicitPriority(v0->unk_18[1], v4 + 1);
ManagedSprite_SetExplicitPriority(v0->unk_18[2], v4 + 1);
ManagedSprite_SetExplicitPriority(v0->unk_18[3], v4 + 1);
ManagedSprite_SetExplicitPriority(v0->unk_18[0], v4);
ManagedSprite_SetExplicitPriority(v0->unk_18[1], v4);
ManagedSprite_SetExplicitPriority(v0->unk_18[2], v4);
ManagedSprite_SetExplicitPriority(v0->unk_18[3], v4);
v2 = PlttTransfer_GetPlttOffset(Sprite_GetPaletteProxy(v0->unk_18[0]->sprite), NNS_G2D_VRAM_TYPE_2DMAIN);
PaletteData_LoadBufferFromFileStartWithTint(ov12_0222332C(v0->unk_0C), v5, v3, ov12_0221FDE4(param0), 2, 0x20, v2 * 16, 196, 196, 196);
v2 = PlttTransfer_GetPlttOffset(Sprite_GetPaletteProxy(v0->unk_18[2]->sprite), NNS_G2D_VRAM_TYPE_2DMAIN);
PaletteData_LoadBufferFromFileStartWithTint(ov12_0222332C(v0->unk_0C), v5, v3, ov12_0221FDE4(param0), 2, 0x20, v2 * 16, 128, 128, 128);
}
}
ov12_022201E8(v0->unk_0C, ov12_0222B4C8, v0);
}
static const u8 Unk_ov12_0223A098[][3] = {
{ 0x64, 0x73, 0x6 },
{ 0x73, 0x64, 0x6 }
};
static void ov12_0222B914(SysTask *param0, void *param1)
{
UnkStruct_ov12_0222B914 *v0 = (UnkStruct_ov12_0222B914 *)param1;
switch (v0->unk_00) {
case 0:
ov12_02225E68(&v0->unk_0C, Unk_ov12_0223A098[v0->unk_02][0], 100, Unk_ov12_0223A098[v0->unk_02][1], Unk_ov12_0223A098[v0->unk_02][2]);
if (v0->unk_02 == 0) {
sub_020086FC(v0->unk_08, 0, 6, 0, 0x7FFF);
} else {
sub_020086FC(v0->unk_08, 6, 0, 0, 0x7FFF);
}
v0->unk_02 ^= 1;
v0->unk_01++;
v0->unk_00++;
break;
case 1:
if ((ov12_02225EB8(&v0->unk_0C) == 0) && (sub_020087B4(v0->unk_08) == 0)) {
if (v0->unk_01 < 4) {
v0->unk_00--;
} else {
v0->unk_00++;
}
}
sub_02007DEC(v0->unk_08, 12, v0->unk_0C.unk_00);
sub_02007DEC(v0->unk_08, 13, v0->unk_0C.unk_02);
break;
default:
ov12_02220220(v0->unk_04, param0);
Heap_FreeToHeap(v0);
break;
}
}
void ov12_0222B9E0(UnkStruct_ov12_0221FCDC *param0)
{
UnkStruct_ov12_0222B914 *v0 = ov12_02235E50((param0), sizeof(UnkStruct_ov12_0222B914));
v0->unk_00 = 0;
v0->unk_02 = 0;
v0->unk_01 = 0;
v0->unk_04 = param0;
v0->unk_08 = ov12_022232FC(v0->unk_04, ov12_02220240(v0->unk_04));
ov12_022201E8(v0->unk_04, ov12_0222B914, v0);
}
static const u8 Unk_ov12_0223A0DF[][5] = {
{ 0x64, 0x96, 0x64, 0x32, 0x8 },
{ 0x96, 0x32, 0x32, 0x96, 0x8 },
{ 0x32, 0x64, 0x96, 0x64, 0x8 }
};
static void ov12_0222BA18(SysTask *param0, void *param1)
{
UnkStruct_ov12_0222BA18 *v0 = (UnkStruct_ov12_0222BA18 *)param1;
switch (v0->unk_00) {
case 0:
ov12_02225EF0(&v0->unk_10, Unk_ov12_0223A0DF[v0->unk_01][0], Unk_ov12_0223A0DF[v0->unk_01][1], Unk_ov12_0223A0DF[v0->unk_01][2], Unk_ov12_0223A0DF[v0->unk_01][3], 100, Unk_ov12_0223A0DF[v0->unk_01][4]);
v0->unk_01++;
v0->unk_00++;
break;
case 1:
if (ov12_02225F6C(&v0->unk_10) == 0) {
if (v0->unk_01 < 3) {
v0->unk_00--;
} else {
v0->unk_00++;
}
}
sub_02007DEC(v0->unk_0C, 12, v0->unk_10.unk_00);
sub_02007DEC(v0->unk_0C, 13, v0->unk_10.unk_02);
{
s16 v1 = ov12_02225FD4(v0->unk_02, v0->unk_04, v0->unk_10.unk_04[4]);
sub_02007DEC(v0->unk_0C, 1, v0->unk_02 + v1);
}
break;
default:
ov12_02220220(v0->unk_08, param0);
Heap_FreeToHeap(v0);
break;
}
}
void ov12_0222BAE4(UnkStruct_ov12_0221FCDC *param0)
{
UnkStruct_ov12_0222BA18 *v0 = ov12_02235E50((param0), sizeof(UnkStruct_ov12_0222BA18));
v0->unk_00 = 0;
v0->unk_01 = 0;
v0->unk_08 = param0;
v0->unk_0C = ov12_022232FC(v0->unk_08, ov12_02220240(v0->unk_08));
v0->unk_02 = sub_020080C0(v0->unk_0C, 1);
v0->unk_04 = ov12_02223354(v0->unk_08, ov12_02220240(v0->unk_08));
ov12_022201E8(v0->unk_08, ov12_0222BA18, v0);
}
static const u8 Unk_ov12_0223A0B7[][5] = {
{ 0x64, 0xA, 0x64, 0xB4, 0xA },
{ 0xA, 0xA, 0xB4, 0x0, 0x5 }
};
static void ov12_0222BB30(SysTask *param0, void *param1)
{
UnkStruct_ov12_0222BB30 *v0 = (UnkStruct_ov12_0222BB30 *)param1;
switch (v0->unk_00) {
case 0:
ov12_02225EF0(&v0->unk_10, Unk_ov12_0223A0B7[v0->unk_01][0], Unk_ov12_0223A0B7[v0->unk_01][1], Unk_ov12_0223A0B7[v0->unk_01][2], Unk_ov12_0223A0B7[v0->unk_01][3], 100, Unk_ov12_0223A0B7[v0->unk_01][4]);
v0->unk_01++;
v0->unk_00++;
break;
case 1:
if (ov12_02225F6C(&v0->unk_10) == 0) {
v0->unk_00++;
}
sub_02007DEC(v0->unk_0C, 12, v0->unk_10.unk_00);
sub_02007DEC(v0->unk_0C, 13, v0->unk_10.unk_02);
ov12_02226024(v0->unk_0C, v0->unk_02, v0->unk_06, v0->unk_10.unk_04[4], 0);
break;
case 2:
ov12_02225BC8(&v0->unk_10, 0, 0, sub_020080C0(v0->unk_0C, 1), 0, 5);
v0->unk_00++;
break;
case 3:
if (ov12_02225C14(&v0->unk_10) == 0) {
v0->unk_00++;
}
sub_02007DEC(v0->unk_0C, 1, v0->unk_10.unk_02);
break;
case 4:
ov12_02225EF0(&v0->unk_10, Unk_ov12_0223A0B7[v0->unk_01][0], Unk_ov12_0223A0B7[v0->unk_01][1], Unk_ov12_0223A0B7[v0->unk_01][2], Unk_ov12_0223A0B7[v0->unk_01][3], 100, Unk_ov12_0223A0B7[v0->unk_01][4]);
v0->unk_02 = sub_020080C0(v0->unk_0C, 1);
v0->unk_00++;
break;
case 5:
if (ov12_02225F6C(&v0->unk_10) == 0) {
v0->unk_00++;
}
sub_02007DEC(v0->unk_0C, 12, v0->unk_10.unk_00);
sub_02007DEC(v0->unk_0C, 13, v0->unk_10.unk_02);
ov12_02226024(v0->unk_0C, v0->unk_02, v0->unk_06, v0->unk_10.unk_04[4], 1);
break;
default:
sub_02007DEC(v0->unk_0C, 1, v0->unk_04);
sub_02007DEC(v0->unk_0C, 6, 1);
sub_02007DEC(v0->unk_0C, 12, 0x100);
sub_02007DEC(v0->unk_0C, 13, 0x100);
ov12_02220220(v0->unk_08, param0);
Heap_FreeToHeap(v0);
break;
}
}
void ov12_0222BCF4(UnkStruct_ov12_0221FCDC *param0)
{
UnkStruct_ov12_0222BB30 *v0 = ov12_02235E50((param0), sizeof(UnkStruct_ov12_0222BB30));
v0->unk_00 = 0;
v0->unk_01 = 0;
v0->unk_08 = param0;
v0->unk_0C = ov12_022232FC(v0->unk_08, ov12_02220240(v0->unk_08));
v0->unk_02 = sub_020080C0(v0->unk_0C, 1);
v0->unk_04 = v0->unk_02;
v0->unk_06 = ov12_02223354(v0->unk_08, ov12_02220240(v0->unk_08));
ov12_022201E8(v0->unk_08, ov12_0222BB30, v0);
}
static void ov12_0222BD48(SysTask *param0, void *param1)
{
UnkStruct_ov12_0222BD48 *v0 = (UnkStruct_ov12_0222BD48 *)param1;
switch (v0->unk_00) {
case 0:
PaletteData_StartFade(v0->unk_04, 0x1, ov12_02222354(v0->unk_08), -2, 0, 16, 0x7FFF);
sub_020086FC(v0->unk_10, 0, 16, 0, 0x0);
v0->unk_00++;
break;
case 1:
if ((PaletteData_GetSelectedBuffersMask(v0->unk_04) == 0) && (sub_020087B4(v0->unk_10) == 0)) {
v0->unk_00++;
}
break;
case 2:
if ((++v0->unk_01) > 5) {
v0->unk_00++;
}
break;
case 3:
PaletteData_StartFade(v0->unk_04, 0x1, ov12_02222354(v0->unk_08), -2, 16, 0, 0x7FFF);
sub_020086FC(v0->unk_10, 16, 0, 0, 0x0);
v0->unk_00++;
break;
case 4:
if ((PaletteData_GetSelectedBuffersMask(v0->unk_04) == 0) && (sub_020087B4(v0->unk_10) == 0)) {
v0->unk_00++;
}
break;
default:
ov12_02220220(v0->unk_08, param0);
Heap_FreeToHeap(v0);
break;
}
}
void ov12_0222BE48(UnkStruct_ov12_0221FCDC *param0)
{
UnkStruct_ov12_0222BD48 *v0 = ov12_02235E50((param0), sizeof(UnkStruct_ov12_0222BD48));
v0->unk_08 = param0;
v0->unk_04 = ov12_0222332C(v0->unk_08);
v0->unk_10 = ov12_022232FC(v0->unk_08, ov12_02220240(v0->unk_08));
ov12_022201E8(v0->unk_08, ov12_0222BD48, v0);
}
static const u8 Unk_ov12_0223A0C1[][5] = {
{ 0x64, 0x78, 0x64, 0x50, 0x5 },
{ 0x78, 0x64, 0x50, 0x78, 0x5 },
{ 0x64, 0x64, 0x78, 0x64, 0x5 }
};
static const u8 Unk_ov12_0223A0A4[][3] = {
{ 0x0, 0x10, 0x5 },
{ 0x10, 0x0, 0x5 },
{ 0x0, 0x0, 0x5 }
};
static void ov12_0222BE80(SysTask *param0, void *param1)
{
UnkStruct_ov12_0222BE80 *v0 = (UnkStruct_ov12_0222BE80 *)param1;
switch (v0->unk_00) {
case 0:
ov12_02225EF0(&v0->unk_10, Unk_ov12_0223A0C1[v0->unk_01][0], Unk_ov12_0223A0C1[v0->unk_01][1], Unk_ov12_0223A0C1[v0->unk_01][2], Unk_ov12_0223A0C1[v0->unk_01][3], 100, Unk_ov12_0223A0C1[v0->unk_01][4]);
ov12_02225BC8(&v0->unk_34, 0, 0, v0->unk_04 + Unk_ov12_0223A0A4[v0->unk_01][0], v0->unk_04 + Unk_ov12_0223A0A4[v0->unk_01][1], Unk_ov12_0223A0A4[v0->unk_01][2]);
v0->unk_01++;
v0->unk_00++;
break;
case 1: {
int v1 = 0;
if (ov12_02225F6C(&v0->unk_10) == 0) {
v1++;
}
if (ov12_02225C14(&v0->unk_34) == 0) {
v1++;
}
if (v1 >= 2) {
if (v0->unk_01 >= 3) {
v0->unk_02++;
v0->unk_01 = 0;
if (v0->unk_02 >= 3) {
v0->unk_00++;
}
} else {
v0->unk_00 = 0;
}
}
sub_02007DEC(v0->unk_0C, 12, v0->unk_10.unk_00);
sub_02007DEC(v0->unk_0C, 13, v0->unk_10.unk_02);
ov12_02226024(v0->unk_0C, v0->unk_34.unk_02, v0->unk_06, v0->unk_10.unk_04[4], 0);
} break;
default:
ov12_02220220(v0->unk_08, param0);
Heap_FreeToHeap(v0);
break;
}
}
void ov12_0222BFA8(UnkStruct_ov12_0221FCDC *param0)
{
UnkStruct_ov12_0222BE80 *v0 = ov12_02235E50((param0), sizeof(UnkStruct_ov12_0222BE80));
v0->unk_00 = 0;
v0->unk_01 = 0;
v0->unk_08 = param0;
v0->unk_0C = ov12_022232FC(v0->unk_08, ov12_02220240(v0->unk_08));
v0->unk_04 = sub_020080C0(v0->unk_0C, 1);
v0->unk_06 = ov12_02223354(v0->unk_08, ov12_02220240(v0->unk_08));
ov12_022201E8(v0->unk_08, ov12_0222BE80, v0);
}
static void ov12_0222BFF4(SysTask *param0, void *param1)
{
UnkStruct_ov12_0222BFF4 *v0 = (UnkStruct_ov12_0222BFF4 *)param1;
switch (v0->unk_00) {
case 0:
if ((++v0->unk_01) >= 10) {
v0->unk_01 = 0;
v0->unk_00++;
}
break;
case 1:
ManagedSprite_SetDrawFlag(v0->unk_0C, 1);
ManagedSprite_SetDrawFlag(v0->unk_10, 1);
ManagedSprite_SetExplicitOamMode(v0->unk_10, GX_OAM_MODE_OBJWND);
v0->unk_00++;
break;
case 2:
if ((++v0->unk_01) >= 10) {
G2_SetWndOutsidePlane((GX_WND_PLANEMASK_BG0 | GX_WND_PLANEMASK_BG1 | GX_WND_PLANEMASK_BG2 | GX_WND_PLANEMASK_BG3 | GX_WND_PLANEMASK_OBJ), 0);
G2_SetWndOBJInsidePlane((GX_WND_PLANEMASK_BG0 | GX_WND_PLANEMASK_BG1 | GX_WND_PLANEMASK_BG2 | GX_WND_PLANEMASK_BG3 | GX_WND_PLANEMASK_OBJ), 0);
ManagedSprite_SetDrawFlag(v0->unk_0C, 0);
ManagedSprite_SetDrawFlag(v0->unk_10, 0);
v0->unk_01 = 0;
v0->unk_00++;
}
break;
default:
GX_SetVisibleWnd(GX_WNDMASK_NONE);
ov12_02220220(v0->unk_04, param0);
Heap_FreeToHeap(v0);
return;
}
ManagedSprite_TickFrame(v0->unk_0C);
ManagedSprite_TickFrame(v0->unk_10);
SpriteSystem_DrawSprites(v0->unk_08);
}
void ov12_0222C0C0(UnkStruct_ov12_0221FCDC *param0)
{
UnkStruct_ov12_0222BFF4 *v0 = ov12_02235E50((param0), sizeof(UnkStruct_ov12_0222BFF4));
v0->unk_04 = param0;
v0->unk_08 = ov12_022202EC(v0->unk_04);
v0->unk_0C = ov12_022202C0(v0->unk_04, 0);
v0->unk_10 = ov12_022202C0(v0->unk_04, 1);
GX_SetVisibleWnd(GX_WNDMASK_OW);
G2_SetWndOutsidePlane((GX_WND_PLANEMASK_BG0 | GX_WND_PLANEMASK_BG1 | GX_WND_PLANEMASK_BG2 | GX_WND_PLANEMASK_BG3 | GX_WND_PLANEMASK_OBJ), 0);
G2_SetWndOBJInsidePlane(GX_WND_PLANEMASK_BG1 | GX_WND_PLANEMASK_OBJ, 0);
{
int v1;
int v2 = ov12_02223334(v0->unk_04, ov12_02220240(v0->unk_04));
int v3 = ov12_02223344(v0->unk_04, ov12_02220240(v0->unk_04));
v1 = PlttTransfer_GetPlttOffset(Sprite_GetPaletteProxy(v0->unk_0C->sprite), NNS_G2D_VRAM_TYPE_2DMAIN);
PaletteData_LoadBufferFromFileStartWithTint(ov12_0222332C(v0->unk_04), v3, v2, ov12_0221FDE4(param0), 2, 0x20, v1 * 16, 256, 256, 256);
}
ManagedSprite_SetDrawFlag(v0->unk_0C, 0);
ManagedSprite_SetDrawFlag(v0->unk_10, 0);
ov12_022201E8(v0->unk_04, ov12_0222BFF4, v0);
}
static const u8 Unk_ov12_0223A094[] = {
0x2,
0x7,
0xD,
0x12
};
static void ov12_0222C1A4(SysTask *param0, void *param1)
{
int v0;
int v1;
UnkStruct_ov12_0222C1A4 *v2 = (UnkStruct_ov12_0222C1A4 *)param1;
switch (v2->unk_00) {
case 0:
sub_02007DEC(v2->unk_0C, 14, 1);
v2->unk_00++;
break;
case 1:
v1 = 0;
for (v0 = 0; v0 < 3; v0++) {
switch (v2->unk_18[v0].unk_00) {
case 0:
if ((++v2->unk_18[v0].unk_01) >= Unk_ov12_0223A094[v0]) {
ov12_02225EF0(&v2->unk_18[v0].unk_08, 100, 5, 100, 5, 100, 5);
v2->unk_18[v0].unk_00++;
}
break;
case 1:
if (ov12_02225F6C(&v2->unk_18[v0].unk_08) == 0) {
v2->unk_18[v0].unk_00++;
} else {
f32 v3, v4;
ov12_02225FA4(&v2->unk_18[v0].unk_08, &v3, &v4);
ManagedSprite_SetAffineScale(v2->unk_18[v0].unk_04, v3 * v2->unk_08, v4);
ov12_0222605C(v2->unk_18[v0].unk_04, v2->unk_02, v2->unk_04, v2->unk_18[v0].unk_08.unk_04[4], 0);
}
break;
default:
v1++;
break;
}
ManagedSprite_TickFrame(v2->unk_18[v0].unk_04);
}
if (v1 >= 3) {
v2->unk_01++;
if (v2->unk_01 < 3) {
for (v0 = 0; v0 < 3; v0++) {
{
s16 v5;
s16 v6;
ManagedSprite_GetPositionXY(v2->unk_18[v0].unk_04, &v5, &v6);
ManagedSprite_SetPositionXY(v2->unk_18[v0].unk_04, v5, v2->unk_02);
ManagedSprite_SetAffineScale(v2->unk_18[v0].unk_04, 1.0f * v2->unk_08, 1.0f);
}
v2->unk_18[v0].unk_00 = 0;
v2->unk_18[v0].unk_01 = 0;
}
v2->unk_00--;
} else {
v2->unk_00++;
}
}
break;
case 2:
for (v0 = 0; v0 < 3; v0++) {
ManagedSprite_SetExplicitOamMode(v2->unk_18[v0].unk_04, GX_OAM_MODE_NORMAL);
ov12_02225EF0(&v2->unk_18[v0].unk_08, 5, 100, 5, 100, 100, 5);
}
v2->unk_00++;
break;
case 3:
v1 = 0;
for (v0 = 0; v0 < 3; v0++) {
if (ov12_02225F6C(&v2->unk_18[v0].unk_08) == 0) {
v1++;
} else {
f32 v7, v8;
ov12_02225FA4(&v2->unk_18[v0].unk_08, &v7, &v8);
ManagedSprite_SetAffineScale(v2->unk_18[v0].unk_04, v7 * v2->unk_08, v8);
ov12_0222605C(v2->unk_18[v0].unk_04, v2->unk_02, v2->unk_04, v2->unk_18[v0].unk_08.unk_04[4], 0);
}
}
if (v1 >= 3) {
v2->unk_00++;
}
break;
default:
sub_02007DEC(v2->unk_0C, 14, 0);
ov12_02220220(v2->unk_10, param0);
Heap_FreeToHeap(v2);
return;
}
SpriteSystem_DrawSprites(v2->unk_14);
}
void ov12_0222C3C0(UnkStruct_ov12_0221FCDC *param0)
{
UnkStruct_ov12_0222C1A4 *v0 = ov12_02235E50((param0), sizeof(UnkStruct_ov12_0222C1A4));
v0->unk_00 = 0;
v0->unk_01 = 0;
v0->unk_10 = param0;
v0->unk_14 = ov12_022202EC(v0->unk_10);
v0->unk_0C = ov12_022232FC(v0->unk_10, ov12_02220240(v0->unk_10));
v0->unk_02 = sub_020080C0(v0->unk_0C, 1);
v0->unk_02 -= sub_020080C0(v0->unk_0C, 41);
v0->unk_04 = ov12_02223354(v0->unk_10, ov12_02220240(v0->unk_10));
ov12_02235780(v0->unk_10, 0xffffffff, 0xffffffff);
G2_ChangeBlendAlpha(12, 6);
{
int v1;
for (v1 = 0; v1 < 3; v1++) {
v0->unk_18[v1].unk_00 = 0;
v0->unk_18[v1].unk_01 = 0;
v0->unk_18[v1].unk_04 = ov12_022202C0(v0->unk_10, v1);
ManagedSprite_SetAffineOverwriteMode(v0->unk_18[v1].unk_04, AFFINE_OVERWRITE_MODE_DOUBLE);
ManagedSprite_SetExplicitOamMode(v0->unk_18[v1].unk_04, GX_OAM_MODE_XLU);
ManagedSprite_SetPriority(v0->unk_18[v1].unk_04, v1 + 1);
}
}
if (ov12_022234A8(param0, 0) == 1) {
v0->unk_08 = -1;
} else {
v0->unk_08 = +1;
}
{
int v2;
for (v2 = 0; v2 < 3; v2++) {
ManagedSprite_SetAffineScale(v0->unk_18[v2].unk_04, 1.0f * v0->unk_08, 1.0f);
}
}
ov12_022201E8(v0->unk_10, ov12_0222C1A4, v0);
}
static const s16 Unk_ov12_0223A0EE[] = {
0xC,
0xA,
0x8,
0x6,
0x4,
0x2,
0x1,
0x0
};
static void ov12_0222C4A8(SysTask *param0, void *param1)
{
int v0;
UnkStruct_ov12_0222C4A8 *v1 = (UnkStruct_ov12_0222C4A8 *)param1;
switch (v1->unk_00) {
case 0:
PaletteData_StartFade(ov12_0222332C(v1->unk_0C), 0x1, ov12_02222354(v1->unk_0C), 1, 0, 10, 0x0);
v1->unk_00++;
break;
case 1:
if (PaletteData_GetSelectedBuffersMask(ov12_0222332C(v1->unk_0C)) != 0) {
break;
}
v1->unk_00++;
case 2:
ov12_02226108(&v1->unk_B4, Unk_ov12_0223A0EE[v1->unk_01], 0, 0, 5);
if (v1->unk_02 == 0) {
PaletteData_BlendMulti(ov12_0222332C(v1->unk_0C), 0, 0xFF, 10, 0x0);
} else {
PaletteData_BlendMulti(ov12_0222332C(v1->unk_0C), 0, 0xFF, 10, 0x7FFF);
}
v1->unk_03 = 3;
v1->unk_02 ^= 1;
v1->unk_01++;
v1->unk_00++;
case 3:
if (ov12_02226138(&v1->unk_B4) == 0) {
if (v1->unk_01 >= (NELEMS(Unk_ov12_0223A0EE))) {
v1->unk_00++;
} else {
v1->unk_00--;
}
}
if (v1->unk_03 > 0) {
v1->unk_03--;
if (v1->unk_03 == 0) {
PaletteData_BlendMulti(ov12_0222332C(v1->unk_0C), 0, 0xFF, 0, 0);
}
}
for (v0 = 0; v0 < 4; v0++) {
if (v1->unk_14[v0].unk_08 == NULL) {
continue;
}
sub_02007DEC(v1->unk_14[v0].unk_08, 0, v1->unk_14[v0].unk_00.unk_00 + v1->unk_B4.unk_00);
}
Bg_SetOffset(v1->unk_08, 3, 0, v1->unk_B4.unk_00);
break;
default:
ov12_02220220(v1->unk_0C, param0);
Heap_FreeToHeap(v1);
break;
}
}
void ov12_0222C5FC(UnkStruct_ov12_0221FCDC *param0)
{
int v0;
UnkStruct_ov12_0222C4A8 *v1 = ov12_02235E50((param0), sizeof(UnkStruct_ov12_0222C4A8));
v1->unk_00 = 0;
v1->unk_01 = 0;
v1->unk_0C = param0;
v1->unk_10 = ov12_022202EC(v1->unk_0C);
v1->unk_08 = ov12_02220278(v1->unk_0C);
{
int v2;
int v3;
if (ov12_02223364(v1->unk_0C) == 1) {
v2 = 0x40;
v3 = (0x2 | 0x4 | 0x8 | 0x10);
} else {
v2 = (0x2 | 0x8);
v3 = (0x2 | 0x4);
}
ov12_02235998(param0, v2, &(v1->unk_14[0]), &v1->unk_04);
}
for (v0 = 0; v0 < v1->unk_04; v0++) {
v1->unk_14[v0].unk_00.unk_00 = sub_020080C0(v1->unk_14[v0].unk_08, 0);
v1->unk_14[v0].unk_00.unk_02 = sub_020080C0(v1->unk_14[v0].unk_08, 1);
}
ov12_022201E8(v1->unk_0C, ov12_0222C4A8, v1);
}
static void ov12_0222C678(SysTask *param0, void *param1)
{
UnkStruct_ov12_0222C678 *v0 = (UnkStruct_ov12_0222C678 *)param1;
switch (v0->unk_00) {
case 0:
if (ov12_02225C14(&v0->unk_40) == 0) {
v0->unk_00++;
}
ov12_02226138(&v0->unk_1C);
ov12_02226454(&v0->unk_64);
ManagedSprite_SetPositionXY(v0->unk_18, v0->unk_40.unk_00, v0->unk_40.unk_02);
ManagedSprite_TickFrame(v0->unk_18);
SpriteSystem_DrawSprites(v0->unk_10);
break;
default:
ov12_02220220(v0->unk_0C, param0);
Heap_FreeToHeap(v0);
break;
}
}
void ov12_0222C6D4(UnkStruct_ov12_0221FCDC *param0)
{
UnkStruct_ov12_0222C678 *v0;
int v1;
v0 = ov12_02235E50((param0), sizeof(UnkStruct_ov12_0222C678));
v0->unk_00 = 0;
v0->unk_01 = 0;
v0->unk_0C = param0;
v0->unk_10 = ov12_022202EC(v0->unk_0C);
v0->unk_08 = ov12_02220278(v0->unk_0C);
v0->unk_18 = ov12_022202C0(v0->unk_0C, 0);
if (ov12_02220280(param0, 0) == 0) {
v1 = ov12_02220248(v0->unk_0C);
} else {
v1 = ov12_02220240(v0->unk_0C);
}
v0->unk_14 = ov12_022232FC(v0->unk_0C, v1);
ov12_02235918(v0->unk_14, &v0->unk_04);
v0->unk_04.unk_02 -= sub_020080C0(v0->unk_14, 41);
{
int v2 = ov12_02225964(v0->unk_0C, v1);
int v3 = ov12_0222598C(v0->unk_0C, v1);
ov12_02225BC8(&v0->unk_40, v0->unk_04.unk_00, v0->unk_04.unk_00 + (-20 * v2), v0->unk_04.unk_02, v0->unk_04.unk_02 + ((+20) * v3), 20);
}
ov12_022357BC(v0->unk_0C, (1 << ov12_022233EC(param0, 2)) | GX_BLEND_PLANEMASK_BD | (1 << ov12_022233EC(param0, 1)) | GX_WND_PLANEMASK_BG0, 0xffffffff, 0xffffffff);
ov12_02226424(&v0->unk_64, 31, 0, 0, 31, (20 - 5));
ManagedSprite_SetExplicitOamMode(v0->unk_18, GX_OAM_MODE_XLU);
ov12_022201E8(v0->unk_0C, ov12_0222C678, v0);
}
static const int Unk_ov12_0223A118[][2] = {
{ ((20 * 0xffff) / 360), 0x3 },
{ ((15 * 0xffff) / 360), 0x3 },
{ ((10 * 0xffff) / 360), 0x2 },
{ ((5 * 0xffff) / 360), 0x2 },
{ ((0 * 0xffff) / 360), 0x1 }
};
static void ov12_0222C7E0(SysTask *param0, void *param1)
{
UnkStruct_ov12_0222C7E0 *v0 = (UnkStruct_ov12_0222C7E0 *)param1;
switch (v0->unk_00.unk_00) {
case 0: {
int v1;
int v2;
if (v0->unk_00.unk_01 == 0) {
v1 = -Unk_ov12_0223A118[v0->unk_00.unk_02][0];
v2 = +Unk_ov12_0223A118[v0->unk_00.unk_02][0];
} else {
v1 = +Unk_ov12_0223A118[v0->unk_00.unk_02][0];
v2 = -Unk_ov12_0223A118[v0->unk_00.unk_02][0];
}
ov12_02225D50(&v0->unk_5C, v1, v2, Unk_ov12_0223A118[v0->unk_00.unk_02][1]);
if (v0->unk_00.unk_01 == 1) {
v0->unk_00.unk_02++;
}
v0->unk_00.unk_01 ^= 1;
}
v0->unk_00.unk_00++;
case 1:
if (ov12_02225DA0(&v0->unk_5C) == 1) {
sub_02007DEC(v0->unk_28[0], 9, (u16)v0->unk_5C.unk_00);
} else {
if (v0->unk_00.unk_02 >= 5) {
v0->unk_00.unk_00++;
} else {
v0->unk_00.unk_00--;
}
}
break;
default:
sub_02007DEC(v0->unk_28[0], 9, 0);
ov12_02220220(v0->unk_00.unk_04, param0);
Heap_FreeToHeap(v0);
break;
}
}
static void ov12_0222C884(SysTask *param0, void *param1)
{
UnkStruct_ov12_0222C7E0 *v0 = (UnkStruct_ov12_0222C7E0 *)param1;
switch (v0->unk_00.unk_00) {
case 0:
ov12_02226108(&v0->unk_38, v0->unk_1C.unk_00, v0->unk_1C.unk_02, v0->unk_1C.unk_04, v0->unk_1C.unk_06);
v0->unk_00.unk_00++;
break;
case 1: {
UnkStruct_ov12_02235350 v1;
ov12_02235918(v0->unk_28[1], &v1);
if (ov12_0222619C(&v0->unk_38, v1.unk_00, v1.unk_02, v0->unk_28[1]) == 0) {
v0->unk_00.unk_00++;
}
} break;
default:
ov12_02220220(v0->unk_00.unk_04, param0);
Heap_FreeToHeap(v0);
break;
}
}
void ov12_0222C8F8(UnkStruct_ov12_0221FCDC *param0)
{
UnkStruct_ov12_0222C7E0 *v0;
int v1 = 0;
v0 = ov12_02235E50((param0), sizeof(UnkStruct_ov12_0222C7E0));
ov12_0223595C(param0, &v0->unk_00);
v0->unk_28[0] = ov12_022232FC(v0->unk_00.unk_04, ov12_02220240(v0->unk_00.unk_04));
v0->unk_28[1] = ov12_022232FC(v0->unk_00.unk_04, ov12_02220248(v0->unk_00.unk_04));
sub_02007DEC(v0->unk_28[0], 11, 100);
v1 = ov12_02220280(param0, 0);
v0->unk_1C.unk_00 = ov12_02220280(param0, 1);
v0->unk_1C.unk_02 = ov12_02220280(param0, 2);
v0->unk_1C.unk_04 = ov12_02220280(param0, 3);
v0->unk_1C.unk_06 = ov12_02220280(param0, 4);
v0->unk_1C.unk_08 = ov12_02220280(param0, 5);
if (v1 == 0) {
ov12_022201E8(v0->unk_00.unk_04, ov12_0222C7E0, v0);
} else {
ov12_022201E8(v0->unk_00.unk_04, ov12_0222C884, v0);
}
}
static void ov12_0222C994(SysTask *param0, void *param1)
{
int v0;
UnkStruct_ov12_0222C994 *v1 = (UnkStruct_ov12_0222C994 *)param1;
switch (v1->unk_00.unk_00) {
case 0:
ov12_02226108(&v1->unk_4C, 2 + v1->unk_48, v1->unk_48, 0, 10);
v1->unk_00.unk_00++;
break;
case 1:
if (ov12_02226138(&v1->unk_4C) == 0) {
v1->unk_00.unk_00++;
} else {
for (v0 = 0; v0 < 4; v0++) {
if (v1->unk_38[v0] == NULL) {
continue;
}
sub_02007DEC(v1->unk_38[v0], 0, v1->unk_28[v0].unk_00 + v1->unk_4C.unk_00);
}
Bg_SetOffset(v1->unk_00.unk_14, 3, 0, v1->unk_4C.unk_00);
Bg_SetOffset(v1->unk_00.unk_14, 3, 3, v1->unk_4C.unk_02);
}
break;
default:
ov12_02220220(v1->unk_00.unk_04, param0);
Heap_FreeToHeap(v1);
break;
}
}
void ov12_0222CA2C(UnkStruct_ov12_0221FCDC *param0)
{
UnkStruct_ov12_0222C994 *v0 = ov12_02235E50((param0), sizeof(UnkStruct_ov12_0222C994));
int v1;
ov12_0223595C(param0, &v0->unk_00);
{
int v2 = ov12_02220540(v0->unk_00.unk_04, 1);
switch (v2) {
case 150:
v0->unk_48 = 6;
break;
case 110:
v0->unk_48 = 5;
break;
case 90:
v0->unk_48 = 4;
break;
case 70:
v0->unk_48 = 3;
break;
case 50:
v0->unk_48 = 2;
break;
case 30:
v0->unk_48 = 1;
break;
default:
v0->unk_48 = 0;
break;
}
}
for (v1 = 0; v1 < 4; v1++) {
v0->unk_38[v1] = ov12_022232FC(v0->unk_00.unk_04, v1);
if (v0->unk_38[v1] == NULL) {
continue;
}
ov12_02235918(v0->unk_38[v1], &v0->unk_28[v1]);
}
ov12_022201E8(v0->unk_00.unk_04, ov12_0222C994, v0);
}
static void ov12_0222CACC(SysTask *param0, void *param1)
{
int v0;
UnkStruct_ov12_0222CACC *v1 = (UnkStruct_ov12_0222CACC *)param1;
switch (v1->unk_00.unk_00) {
case 0:
ov12_02226108(&v1->unk_40[0], 20, 0, 0, 10);
ov12_02226108(&v1->unk_40[1], 2, 0, 0, 10);
v1->unk_00.unk_00++;
break;
case 1:
if (ov12_02226138(&v1->unk_40[0]) == 0) {
v1->unk_00.unk_00++;
} else {
ManagedSprite_SetPositionXY(v1->unk_38[0], +v1->unk_28[1].unk_00 + v1->unk_40[0].unk_00, v1->unk_28[1].unk_02 + v1->unk_40[0].unk_02);
ManagedSprite_SetPositionXY(v1->unk_38[1], -v1->unk_28[1].unk_00 + v1->unk_40[0].unk_00, v1->unk_28[1].unk_02 + v1->unk_40[0].unk_02);
ManagedSprite_TickFrame(v1->unk_38[0]);
ManagedSprite_TickFrame(v1->unk_38[1]);
}
SpriteSystem_DrawSprites(v1->unk_00.unk_0C);
break;
default:
ov12_02220220(v1->unk_00.unk_04, param0);
Heap_FreeToHeap(v1);
break;
}
}
void ov12_0222CB90(UnkStruct_ov12_0221FCDC *param0)
{
UnkStruct_ov12_0222CACC *v0 = ov12_02235E50((param0), sizeof(UnkStruct_ov12_0222CACC));
int v1;
ov12_0223595C(param0, &v0->unk_00);
v0->unk_38[0] = ov12_022202C0(v0->unk_00.unk_04, 0);
v0->unk_38[1] = ov12_022202C0(v0->unk_00.unk_04, 1);
v0->unk_30[0] = ov12_022232FC(v0->unk_00.unk_04, ov12_02220240(v0->unk_00.unk_04));
v0->unk_30[1] = ov12_022232FC(v0->unk_00.unk_04, ov12_02220248(v0->unk_00.unk_04));
ov12_02235918(v0->unk_30[0], &v0->unk_28[0]);
ov12_02235918(v0->unk_30[1], &v0->unk_28[1]);
ov12_022201E8(v0->unk_00.unk_04, ov12_0222CACC, v0);
}
static void ov12_0222CBFC(SysTask *param0, void *param1)
{
int v0;
UnkStruct_ov12_0222CBFC *v1 = (UnkStruct_ov12_0222CBFC *)param1;
if (ov12_02225D2C(&v1->unk_8C[0], &v1->unk_8C[1], v1->unk_38) == 0) {
Sprite_DeleteAndFreeResources(v1->unk_38);
ov12_02220220(v1->unk_10.unk_04, param0);
ov12_02235E80(v1);
(v1) = NULL;
return;
}
if (ov12_02225DA0(&v1->unk_D4) == 1) {
ManagedSprite_SetAffineZRotation(v1->unk_38, v1->unk_D4.unk_00);
}
ManagedSprite_TickFrame(v1->unk_38);
SpriteSystem_DrawSprites(v1->unk_10.unk_10);
}
void ov12_0222CC54(UnkStruct_ov12_0221FCDC *param0, SpriteSystem *param1, SpriteManager *param2, ManagedSprite *param3)
{
int v0;
int v1;
UnkStruct_ov12_0222CBFC *v2 = ov12_02235E50((param0), sizeof(UnkStruct_ov12_0222CBFC));
ov12_0223595C(param0, &v2->unk_10);
v2->unk_0C.unk_00 = ov12_02220280(param0, 0);
v2->unk_0C.unk_02 = ov12_02220280(param0, 1);
v2->unk_04 = ov12_02220280(param0, 2);
v2->unk_08 = ov12_02220280(param0, 3);
v1 = ov12_02225964(param0, ov12_02220240(param0));
v2->unk_38 = param3;
ManagedSprite_SetAffineOverwriteMode(v2->unk_38, AFFINE_OVERWRITE_MODE_DOUBLE);
v2->unk_3C[0].unk_08 = ov12_022232FC(param0, ov12_02220240(param0));
v2->unk_3C[1].unk_08 = ov12_022232FC(param0, ov12_02220248(param0));
ov12_02235918(v2->unk_3C[0].unk_08, &v2->unk_3C[0].unk_04);
ov12_02235918(v2->unk_3C[1].unk_08, &v2->unk_3C[1].unk_04);
ov12_02225C98(&v2->unk_8C[0], &v2->unk_8C[1], v2->unk_3C[0].unk_04.unk_00, v2->unk_3C[1].unk_04.unk_00 + (v2->unk_0C.unk_00 * v1), v2->unk_3C[0].unk_04.unk_02, v2->unk_3C[1].unk_04.unk_02 + (v2->unk_0C.unk_02 * v1), v2->unk_04, v2->unk_08 * FX32_ONE);
if ((ov12_022232B8(param0, ov12_02220240(param0)) == 4) && (ov12_022232B8(param0, ov12_02220248(param0)) == 2)) {
v1 *= -1;
}
if ((ov12_022232B8(param0, ov12_02220240(param0)) == 5) && (ov12_022232B8(param0, ov12_02220248(param0)) == 3)) {
v1 *= -1;
}
if (v1 > 0) {
ov12_02225D50(&v2->unk_D4, ((20 * 0xffff) / 360) * v1, ((130 * 0xffff) / 360) * v1, 10);
} else {
ov12_02225D50(&v2->unk_D4, ((90 * 0xffff) / 360) * v1, ((130 * 0xffff) / 360) * v1, 10);
}
ManagedSprite_SetAffineZRotation(v2->unk_38, v2->unk_D4.unk_00);
ov12_02225D2C(&v2->unk_8C[0], &v2->unk_8C[1], v2->unk_38);
ManagedSprite_TickFrame(v2->unk_38);
ov12_022201E8(v2->unk_10.unk_04, ov12_0222CBFC, v2);
}
static void ov12_0222CDF0(SysTask *param0, void *param1)
{
UnkStruct_ov12_0222CDF0 *v0 = (UnkStruct_ov12_0222CDF0 *)param1;
switch (v0->unk_18.unk_00) {
case 0:
ov12_02225EF0(&v0->unk_9C, 100 * v0->unk_12, 60 * v0->unk_12, 5, 150, 100, 12);
v0->unk_18.unk_00++;
break;
case 1:
if (ov12_02225F6C(&v0->unk_9C) == 0) {
ov12_02225EF0(&v0->unk_9C, 60 * v0->unk_12, 150 * v0->unk_12, 150, 10, 100, 12);
v0->unk_18.unk_00++;
} else {
f32 v1, v2;
s16 v3;
ov12_02225FA4(&v0->unk_9C, &v1, &v2);
ManagedSprite_SetAffineScale(v0->unk_40, v1, v2);
v3 = ov12_02225FD4(v0->unk_14.unk_02, 16, v0->unk_9C.unk_04[4]);
ManagedSprite_SetPositionXY(v0->unk_40, v0->unk_14.unk_00, v0->unk_14.unk_02 + v3);
if (v0->unk_0C < v0->unk_10) {
v0->unk_0C++;
}
if (v0->unk_0D > v0->unk_11) {
v0->unk_0D--;
}
G2_ChangeBlendAlpha(v0->unk_0C, v0->unk_0D);
}
break;
case 2:
if (++v0->unk_04 >= 4) {
v0->unk_18.unk_00++;
}
break;
case 3:
if (ov12_02225F6C(&v0->unk_9C) == 0) {
v0->unk_18.unk_00++;
} else {
f32 v4, v5;
s16 v6;
ov12_02225FA4(&v0->unk_9C, &v4, &v5);
ManagedSprite_SetAffineScale(v0->unk_40, v4, v5);
v6 = ov12_02225FD4(v0->unk_14.unk_02, 16, v0->unk_9C.unk_04[4]);
ManagedSprite_SetPositionXY(v0->unk_40, v0->unk_14.unk_00, v0->unk_14.unk_02 + v6);
if (v0->unk_0C > v0->unk_0E) {
v0->unk_0C--;
}
if (v0->unk_0D < v0->unk_0F) {
v0->unk_0D++;
}
G2_ChangeBlendAlpha(v0->unk_0C, v0->unk_0D);
}
break;
default:
Sprite_DeleteAndFreeResources(v0->unk_44[0]);
Sprite_DeleteAndFreeResources(v0->unk_44[1]);
ov12_02220220(v0->unk_18.unk_04, param0);
ov12_02235E80(v0);
(v0) = NULL;
return;
}
ManagedSprite_TickFrame(v0->unk_40);
SpriteSystem_DrawSprites(v0->unk_18.unk_10);
}
void ov12_0222CFA0(UnkStruct_ov12_0221FCDC *param0)
{
UnkStruct_ov12_0222CDF0 *v0 = ov12_02235E50((param0), sizeof(UnkStruct_ov12_0222CDF0));
ov12_0223595C(param0, &v0->unk_18);
v0->unk_44[0] = ov12_02220298(param0, 0);
v0->unk_44[1] = ov12_02220298(param0, 1);
ov12_02235780(v0->unk_18.unk_04, 0xffffffff, 0xffffffff);
if (ov12_02220280(param0, 0) == 0) {
v0->unk_0C = 0;
v0->unk_0D = 31;
v0->unk_0E = 0;
v0->unk_0F = 31;
v0->unk_10 = 31;
v0->unk_11 = 4;
} else {
v0->unk_0C = 0;
v0->unk_0D = 31;
v0->unk_0E = 0;
v0->unk_0F = 31;
v0->unk_10 = 31;
v0->unk_11 = 4;
}
if (ov12_0221FDD4(param0) == 1) {
v0->unk_40 = v0->unk_44[0];
ManagedSprite_SetDrawFlag(v0->unk_44[1], 0);
ManagedSprite_SetAnim(v0->unk_40, 0);
v0->unk_14.unk_00 = 255 - 76;
v0->unk_14.unk_02 = 120;
ManagedSprite_SetExplicitPriority(v0->unk_40, ov12_0222339C(param0) + 1);
v0->unk_12 = -1;
} else {
if (ov12_0223525C(param0, ov12_02220240(param0)) == 0x4) {
v0->unk_40 = v0->unk_44[1];
ManagedSprite_SetDrawFlag(v0->unk_44[0], 0);
ManagedSprite_SetAnim(v0->unk_40, 1);
v0->unk_14.unk_00 = 144;
v0->unk_14.unk_02 = 64;
} else {
v0->unk_40 = v0->unk_44[0];
ManagedSprite_SetDrawFlag(v0->unk_44[1], 0);
ManagedSprite_SetAnim(v0->unk_40, 0);
v0->unk_14.unk_00 = 76;
v0->unk_14.unk_02 = 120;
ManagedSprite_SetExplicitPriority(v0->unk_40, ov12_0222339C(param0) + 1);
}
v0->unk_12 = +1;
}
ManagedSprite_SetPositionXY(v0->unk_40, v0->unk_14.unk_00, v0->unk_14.unk_02);
ManagedSprite_SetAffineOverwriteMode(v0->unk_40, AFFINE_OVERWRITE_MODE_DOUBLE);
ManagedSprite_SetExplicitOamMode(v0->unk_40, GX_OAM_MODE_XLU);
{
f32 v1, v2;
s16 v3;
ov12_02225EF0(&v0->unk_9C, 100 * v0->unk_12, 100 * v0->unk_12, 100, 5, 100, 1);
ov12_02225F6C(&v0->unk_9C);
ov12_02225FA4(&v0->unk_9C, &v1, &v2);
ManagedSprite_SetAffineScale(v0->unk_40, v1, v2);
v3 = ov12_02225FD4(v0->unk_14.unk_02, 16, v0->unk_9C.unk_04[4]);
ManagedSprite_SetPositionXY(v0->unk_40, v0->unk_14.unk_00, v0->unk_14.unk_02 + v3);
}
ov12_022201E8(v0->unk_18.unk_04, ov12_0222CDF0, v0);
}
static const u8 Unk_ov12_0223A0D0[][5] = {
{ 0x64, 0x64, 0x64, 0x46, 0x8 },
{ 0x64, 0x64, 0x46, 0x78, 0x3 },
{ 0x64, 0x64, 0x78, 0x64, 0x3 }
};
static void ov12_0222D128(SysTask *param0, void *param1)
{
int v0;
UnkStruct_ov12_0222D128 *v1 = (UnkStruct_ov12_0222D128 *)param1;
switch (v1->unk_00) {
case 0:
ov12_02225EF0(&v1->unk_CC, Unk_ov12_0223A0D0[v1->unk_0C][0], Unk_ov12_0223A0D0[v1->unk_0C][1], Unk_ov12_0223A0D0[v1->unk_0C][2], Unk_ov12_0223A0D0[v1->unk_0C][3], 100, Unk_ov12_0223A0D0[v1->unk_0C][4]);
v1->unk_0C++;
v1->unk_00++;
break;
case 1:
if (ov12_02225F6C(&v1->unk_CC) == 1) {
sub_02007DEC(v1->unk_1C, 12, v1->unk_CC.unk_00);
sub_02007DEC(v1->unk_1C, 13, v1->unk_CC.unk_02);
{
s16 v2 = ov12_02225FD4(v1->unk_20, v1->unk_24, v1->unk_CC.unk_04[4]);
sub_02007DEC(v1->unk_1C, 1, v1->unk_20 + v2);
}
} else {
if (v1->unk_0C >= 3) {
v1->unk_00++;
} else {
v1->unk_00--;
}
}
break;
case 2:
if ((++v1->unk_01) >= 1) {
v1->unk_01 = 0;
v1->unk_0C = 0;
v1->unk_00++;
}
break;
case 3: {
s16 v3, v4;
ManagedSprite_GetPositionXY(v1->unk_30[0].unk_00, &v3, &v4);
if (v4 <= ((40 - 16 + 20 + 10) + 50)) {
ManagedSprite_OffsetPositionXY(v1->unk_30[0].unk_00, 0, 2);
ManagedSprite_OffsetPositionXY(v1->unk_30[1].unk_00, 0, 2);
} else {
v1->unk_00++;
}
} break;
case 4: {
s16 v5, v6;
ManagedSprite_GetPositionXY(v1->unk_30[0].unk_00, &v5, &v6);
if (v6 <= ((40 - 16 + 20 + 10) + 50)) {
ManagedSprite_OffsetPositionXY(v1->unk_30[0].unk_00, 0, 2);
ManagedSprite_OffsetPositionXY(v1->unk_30[1].unk_00, 0, 2);
} else {
G2_ChangeBlendAlpha(16, 0);
v1->unk_00++;
}
}
v1->unk_01++;
ov12_022267A8(&v1->unk_04, 16, +16);
ov12_022267A8(&v1->unk_08, 0, -16);
G2_ChangeBlendAlpha(v1->unk_04, v1->unk_08);
if (v1->unk_01 == 10) {
ManagedSprite_OffsetPositionXY(v1->unk_30[0].unk_00, 0, 16);
}
if (v1->unk_01 == 12) {
ManagedSprite_OffsetPositionXY(v1->unk_30[1].unk_00, 0, 16);
}
break;
case 5:
if ((++v1->unk_01) < 1) {
break;
}
v1->unk_01 = 0;
{
s16 v7, v8, v9, v10;
ManagedSprite_GetPositionXY(v1->unk_30[0].unk_00, &v7, &v8);
ManagedSprite_GetPositionXY(v1->unk_30[1].unk_00, &v9, &v10);
ov12_02226728(v7, v8, v9, v10, &v1->unk_C8, &v1->unk_CA);
ov12_02226744(v7, v8, v1->unk_C8, v1->unk_CA, &v1->unk_2C);
ov12_0222676C(v7, v8, v1->unk_C8, v1->unk_CA, &v1->unk_28);
v1->unk_2C = (40 * FX32_ONE);
}
v1->unk_00++;
break;
case 6: {
s16 v11, v12, v13, v14;
s8 v15[][2] = {
{ +1, -1 },
{ -1, +1 },
{ +1, -1 },
{ +1, -1 },
{ +1, -1 },
};
ManagedSprite_GetPositionXY(v1->unk_30[0].unk_00, &v11, &v12);
ManagedSprite_GetPositionXY(v1->unk_30[1].unk_00, &v13, &v14);
ov12_02225C98(&v1->unk_30[0].unk_04[0], &v1->unk_30[0].unk_04[1], v11, v13, v12, v14, 10, v1->unk_2C * v15[v1->unk_0C][0]);
ov12_02225C98(&v1->unk_30[1].unk_04[0], &v1->unk_30[1].unk_04[1], v13, v11, v14, v12, 10, v1->unk_2C * v15[v1->unk_0C][1]);
}
v1->unk_0C++;
v1->unk_00++;
break;
case 7: {
u8 v16 = 0;
if (ov12_02225D2C(&v1->unk_30[0].unk_04[0], &v1->unk_30[0].unk_04[1], v1->unk_30[0].unk_00) == 0) {
v16++;
}
if (ov12_02225D2C(&v1->unk_30[1].unk_04[0], &v1->unk_30[1].unk_04[1], v1->unk_30[1].unk_00) == 0) {
v16++;
}
if (v16 == 2) {
if (v1->unk_0C == 5) {
v1->unk_00++;
} else {
v1->unk_00--;
}
}
} break;
case 8: {
int v17 = 0;
if (ov12_022267A8(&v1->unk_04, 0, -2) == 1) {
v17++;
}
if (ov12_022267A8(&v1->unk_08, 16, +2) == 1) {
v17++;
}
G2_ChangeBlendAlpha(v1->unk_04, v1->unk_08);
if (v17 == 2) {
v1->unk_00++;
}
} break;
default:
for (v0 = 0; v0 < ov12_02220280(v1->unk_10, 0); v0++) {
Sprite_DeleteAndFreeResources(v1->unk_30[v0].unk_00);
}
ov12_02220220(v1->unk_10, param0);
Heap_FreeToHeap(v1);
return;
}
{
s16 v18, v19;
for (v0 = 0; v0 < ov12_02220280(v1->unk_10, 0); v0++) {
ManagedSprite_GetPositionXY(v1->unk_30[v0].unk_00, &v18, &v19);
if (v19 < 80) {
ManagedSprite_SetExplicitPriority(v1->unk_30[v0].unk_00, ov12_0222339C(v1->unk_10));
} else {
if (v18 > 128) {
ManagedSprite_SetExplicitPriority(v1->unk_30[v0].unk_00, ov12_0222339C(v1->unk_10));
} else {
ManagedSprite_SetExplicitPriority(v1->unk_30[v0].unk_00, ov12_0222339C(v1->unk_10) + 1);
}
}
}
}
if (v1->unk_00 < 4) {
return;
}
for (v0 = 0; v0 < ov12_02220280(v1->unk_10, 0); v0++) {
ManagedSprite_TickFrame(v1->unk_30[v0].unk_00);
}
SpriteSystem_DrawSprites(v1->unk_18);
}
void ov12_0222D56C(UnkStruct_ov12_0221FCDC *param0, SpriteSystem *param1, SpriteManager *param2, ManagedSprite *param3)
{
int v0;
UnkStruct_ov12_0222D128 *v1;
SpriteTemplate v2;
v1 = ov12_02235E50((param0), sizeof(UnkStruct_ov12_0222D128));
v1->unk_00 = 0;
v1->unk_01 = 0;
v1->unk_10 = param0;
v1->unk_18 = param2;
v1->unk_14 = param1;
v1->unk_04 = 0;
v1->unk_08 = 16;
v1->unk_1C = ov12_022232FC(v1->unk_10, ov12_02220240(v1->unk_10));
v1->unk_20 = sub_020080C0(v1->unk_1C, 1);
v1->unk_24 = ov12_02223354(v1->unk_10, ov12_02220240(v1->unk_10));
ov12_022357BC(v1->unk_10, (1 << ov12_022233EC(param0, 2)) | (1 << ov12_022233EC(param0, 1)) | GX_WND_PLANEMASK_BG0, 0xffffffff, 0xffffffff);
G2_ChangeBlendAlpha(v1->unk_04, v1->unk_08);
v2 = ov12_0222329C(param0);
v1->unk_30[0].unk_00 = param3;
{
for (v0 = 1; v0 < ov12_02220280(v1->unk_10, 0); v0++) {
v1->unk_30[v0].unk_00 = SpriteSystem_NewSprite(v1->unk_14, v1->unk_18, &v2);
}
}
for (v0 = 0; v0 < ov12_02220280(v1->unk_10, 0); v0++) {
ManagedSprite_SetExplicitOamMode(v1->unk_30[v0].unk_00, GX_OAM_MODE_XLU);
ManagedSprite_SetExplicitPriority(v1->unk_30[v0].unk_00, ov12_0222339C(v1->unk_10) + 1);
}
if (ov12_0221FDD4(param0) == 1) {
ManagedSprite_SetPositionXY(v1->unk_30[0].unk_00, 180 - 20, (40 - 16 + 20 + 10));
ManagedSprite_SetPositionXY(v1->unk_30[1].unk_00, 100 - 20, (25 - 16 + 20 + 10));
} else {
ManagedSprite_SetPositionXY(v1->unk_30[0].unk_00, 100, (40 - 16 + 20 + 10));
ManagedSprite_SetPositionXY(v1->unk_30[1].unk_00, 180, (25 - 16 + 20 + 10));
}
ov12_022201E8(v1->unk_10, ov12_0222D128, v1);
}