pokeplatinum/src/battle/ov16_0226871C.c
2025-11-01 13:13:02 -07:00

4636 lines
127 KiB
C

#include "battle/ov16_0226871C.h"
#include <nitro.h>
#include <string.h>
#include "constants/moves.h"
#include "generated/moves.h"
#include "generated/pokemon_types.h"
#include "struct_decls/battle_system.h"
#include "struct_decls/font_oam.h"
#include "struct_decls/struct_02012744_decl.h"
#include "struct_decls/struct_02012B20_decl.h"
#include "struct_defs/struct_020127E8.h"
#include "battle/battle_display.h"
#include "battle/move_display_info.h"
#include "battle/ov16_0223DF00.h"
#include "battle/ov16_0226DB7C.h"
#include "battle/ov16_0226DE44.h"
#include "battle/struct_ov16_02260C00.h"
#include "battle/struct_ov16_02260F14.h"
#include "battle/struct_ov16_022623F0.h"
#include "battle/struct_ov16_02269668.h"
#include "battle/struct_ov16_0226C378.h"
#include "battle/struct_ov16_0226DC24_decl.h"
#include "battle/struct_ov16_0226DEEC_decl.h"
#include "overlay011/move_palettes.h"
#include "assert.h"
#include "bg_window.h"
#include "char_transfer.h"
#include "enums.h"
#include "font.h"
#include "graphics.h"
#include "heap.h"
#include "inlines.h"
#include "math_util.h"
#include "message.h"
#include "message_util.h"
#include "move_table.h"
#include "narc.h"
#include "palette.h"
#include "pokemon.h"
#include "pokemon_icon.h"
#include "render_text.h"
#include "render_window.h"
#include "sound_playback.h"
#include "sprite.h"
#include "sprite_system.h"
#include "strbuf.h"
#include "string_template.h"
#include "sys_task.h"
#include "sys_task_manager.h"
#include "system.h"
#include "text.h"
#include "touch_screen.h"
#include "type_icon.h"
#include "unk_02012744.h"
#include "unk_0208C098.h"
typedef struct {
UnkStruct_ov16_02268A14 *unk_00;
SysTask *unk_04;
s16 unk_08;
s16 unk_0A;
s16 unk_0C;
s16 unk_0E;
s16 unk_10;
u8 unk_12;
u8 unk_13;
} UnkStruct_ov16_0226B988;
typedef struct {
s16 unk_00;
s16 unk_02;
} UnkStruct_ov16_02270294;
typedef struct {
u8 unk_00;
u8 unk_01;
u8 unk_02;
u8 unk_03;
} UnkStruct_ov16_022702F4;
typedef struct {
u16 unk_00;
u16 unk_02;
u16 unk_04;
u16 unk_06;
u16 unk_08;
u16 unk_0A;
} UnkStruct_ov16_0226A3F4;
typedef struct {
SysTask *unk_00;
u8 *unk_04;
void *unk_08;
u8 *unk_0C;
UnkStruct_ov16_0226A3F4 unk_10;
u16 unk_1C;
} UnkStruct_ov16_02268A14_sub3_sub1;
typedef struct {
s16 unk_00;
s16 unk_02;
union {
struct {
u8 unk_00;
} unk_04_val1;
struct {
int unk_00;
} unk_04_val2;
struct {
const s16 *unk_00;
const UnkStruct_ov16_022702F4 *unk_04;
int unk_08;
u8 unk_0C;
u8 unk_0D;
u8 unk_0E;
u8 unk_0F;
u8 unk_10;
UnkStruct_ov16_02270294 unk_11;
} unk_04_val3;
struct {
UnkStruct_ov16_02268A14_sub3_sub1 *unk_00[4];
UnkStruct_ov16_02268A14_sub3_sub1 *unk_10;
NNSG2dCharacterData *unk_14;
void *unk_18;
int unk_1C;
} unk_04_val4;
s16 unk_04_val5[2];
};
} UnkStruct_ov16_02268A14_sub3;
typedef struct {
int unk_00;
s16 unk_04;
s16 unk_06;
u8 unk_08;
u8 unk_09;
} UnkStruct_ov16_02268A14_sub4;
typedef struct {
const UnkStruct_ov16_022702F4 *unk_00;
u8 unk_04;
s8 unk_05;
} UnkStruct_ov16_02268A14_sub1;
typedef struct {
FontOAM *unk_00;
CharTransferAllocation unk_04;
u16 unk_10;
} UnkStruct_ov16_0226A98C;
typedef struct {
s16 unk_00;
u8 unk_02;
u8 unk_03;
u8 unk_04;
u8 unk_05;
u8 unk_06;
u8 unk_07;
u8 unk_08;
} UnkStruct_ov16_02268FCC;
typedef struct {
u8 unk_00;
s8 unk_01;
s8 unk_02;
u8 unk_03;
} UnkStruct_ov16_0226CB10;
typedef union {
UnkStruct_ov16_02269668 val1;
UnkStruct_ov16_02260C00 val2;
UnkStruct_ov16_02260F14 val3;
UnkStruct_ov16_022623F0 val4;
} UnkStruct_ov16_02268A14_sub2;
typedef struct {
Window unk_00;
u16 unk_10;
u16 unk_12;
} UnkStruct_ov16_0226AEA0;
typedef struct {
MoveDisplayInfo unk_00;
u16 *moveIcons[4];
UnkStruct_ov16_0226AEA0 unk_28[4];
UnkStruct_ov16_0226AEA0 unk_78[4];
UnkStruct_ov16_0226AEA0 unk_C8[4];
} UnkStruct_ov16_0226ABD4;
typedef struct UnkStruct_ov16_02268A14_t {
BattleSystem *battleSys;
u8 *unk_04;
SysTask *unk_08;
SysTask *unk_0C;
SysTask *unk_10;
UnkStruct_ov16_02268A14_sub1 unk_14;
UnkStruct_ov16_02268A14_sub2 unk_1A;
u16 *unk_3C[7];
u16 *unk_58;
u16 *unk_5C;
u16 *unk_60;
SysTask *unk_64;
UnkStruct_ov16_0226ABD4 unk_68[4];
UnkStruct_02012744 *unk_4C8;
UnkStruct_ov16_0226A98C unk_4CC[13];
UnkStruct_02012B20 *unk_5B8;
ManagedSprite *unk_5BC[6];
ManagedSprite *unk_5D4[6];
ManagedSprite *moveSelectSprites[4];
ManagedSprite *unk_5FC[4];
ManagedSprite *unk_60C[4];
SysTask *unk_61C[4];
UnkStruct_ov16_02268FCC unk_62C[6];
SysTask *unk_664;
u8 unk_668;
u8 unk_669;
u8 unk_66A;
s8 unk_66B;
u8 unk_66C;
u8 unk_66D;
u8 unk_66E;
u8 unk_66F;
u8 unk_670;
s16 unk_672;
u8 unk_674;
s16 unk_676;
SysTask *unk_678;
UnkStruct_ov16_02268A14_sub3 unk_67C;
UnkStruct_ov16_02268A14_sub4 unk_6A0;
s32 unk_6AC;
s32 unk_6B0;
s32 unk_6B4;
UnkStruct_ov16_0226DC24 *unk_6B8;
UnkStruct_ov16_0226CB10 unk_6BC;
u8 unk_6C0;
u8 unk_6C1;
struct {
UnkStruct_ov16_0226DEEC *unk_00;
u8 unk_04;
u8 unk_05;
u8 unk_06;
} unk_6C4;
} UnkStruct_ov16_02268A14_t;
typedef struct {
u16 unk_00;
u16 unk_02;
union {
struct {
u16 unk_04_val1_unk_00;
u16 unk_04_val1_unk_02;
u16 unk_04_val1_unk_04;
u16 unk_04_val1_unk_06;
};
u16 unk_04_val2[4];
};
union {
struct {
u16 unk_0C_val1_unk_00;
u16 unk_0C_val1_unk_02;
u16 unk_0C_val1_unk_04;
u16 unk_0C_val1_unk_06;
};
u16 unk_0C_val2[4];
};
const TouchScreenRect *unk_14;
const int *unk_18;
const u8 *unk_1C;
int (*unk_20)(UnkStruct_ov16_02268A14 *param0, int param1);
void (*unk_24)(UnkStruct_ov16_02268A14 *param0, int param1);
void (*unk_28)(UnkStruct_ov16_02268A14 *param0, int param1, int param2);
int (*unk_2C)(UnkStruct_ov16_02268A14 *param0, int param1, int param2);
} UnkStruct_ov16_02270670;
static void *ov16_0226871C(void);
static void ov16_02269654(UnkStruct_ov16_02268A14 *param0, int param1, int param2);
static void ov16_02269668(UnkStruct_ov16_02268A14 *param0, int param1, int param2);
static void ov16_022698A8(UnkStruct_ov16_02268A14 *param0, int param1, int param2);
static void ov16_022698BC(UnkStruct_ov16_02268A14 *param0, int param1, int param2);
static void ov16_02269924(UnkStruct_ov16_02268A14 *param0, int param1, int param2);
static void ov16_02269938(UnkStruct_ov16_02268A14 *param0, int param1, int param2);
static void ov16_02269E94(UnkStruct_ov16_02268A14 *param0, int param1, int param2);
static int ov16_0226A318(UnkStruct_ov16_02268A14 *param0, int param1, int param2);
static int ov16_0226A3F4(UnkStruct_ov16_02268A14 *param0, int param1, int param2);
static void ov16_022699AC(UnkStruct_ov16_02268A14 *param0, int param1, int param2);
static void DrawMoveTypeIcons(UnkStruct_ov16_02268A14 *param0);
static void ov16_0226AFF4(UnkStruct_ov16_02268A14 *param0);
static void ov16_0226B028(UnkStruct_ov16_02268A14 *param0);
static void ov16_0226B2BC(SysTaskFunc param0, UnkStruct_ov16_02268A14 *param1);
static void ov16_0226B2F0(UnkStruct_ov16_02268A14 *param0);
static int ov16_0226A4A4(UnkStruct_ov16_02268A14 *param0, int param1, int param2);
static int ov16_0226A634(UnkStruct_ov16_02268A14 *param0, int param1, int param2);
static int ov16_0226A528(UnkStruct_ov16_02268A14 *param0, int param1, int param2);
static void ov16_02269C7C(UnkStruct_ov16_02268A14 *param0, int param1, int param2);
static void ov16_02269D14(UnkStruct_ov16_02268A14 *param0, int param1, int param2);
static void ov16_02269DB0(UnkStruct_ov16_02268A14 *param0, int param1, int param2);
static void ov16_02269F68(UnkStruct_ov16_02268A14 *param0, int param1, int param2);
static void ov16_0226A04C(UnkStruct_ov16_02268A14 *param0, int param1, int param2);
static void ov16_0226A12C(UnkStruct_ov16_02268A14 *param0, int param1, int param2);
static void LoadMoveSelectPlttSlot(UnkStruct_ov16_02268A14 *param0, enum PokemonType moveType, int moveSlot);
static void ov16_0226B088(UnkStruct_ov16_02268A14 *param0, int param1);
static void ov16_0226B0DC(UnkStruct_ov16_02268A14 *param0, int param1);
static int ov16_0226A934(u8 param0);
static void ov16_02268F00(UnkStruct_ov16_02268A14 *param0);
void ov16_02269168(UnkStruct_ov16_02268A14 *param0, u8 param1[], u8 param2[]);
void ov16_022691BC(UnkStruct_ov16_02268A14 *param0);
void ov16_02269218(UnkStruct_ov16_02268A14 *param0);
static void ov16_0226BC50(SysTask *param0, void *param1);
static void ov16_0226B198(void);
static void ov16_0226BCBC(SysTask *param0, void *param1);
static void ov16_0226B1C4(UnkStruct_ov16_02268A14 *param0, int param1, int param2);
static void ov16_0226B1E8(UnkStruct_ov16_02268A14 *param0);
static void ov16_0226B390(SysTask *param0, void *param1);
static void ov16_0226B4E0(SysTask *param0, void *param1);
static void ov16_0226B780(SysTask *param0, void *param1);
static void ov16_0226B264(UnkStruct_ov16_02268A14 *param0, int param1, u8 *param2, int param3);
static void ov16_0226B20C(UnkStruct_ov16_02268A14 *param0, u8 *param1, int param2);
static void ov16_0226B318(UnkStruct_ov16_02268A14 *param0, int param1);
void ov16_0226947C(UnkStruct_ov16_02268A14 *param0, int param1, int param2);
static void ov16_022694A8(SysTask *param0, void *param1);
static void ov16_0226B314(UnkStruct_ov16_02268A14 *param0, int param1);
static void ov16_0226A98C(UnkStruct_ov16_02268A14 *param0, UnkStruct_ov16_0226A98C *param1, const Strbuf *param2, enum Font param3, TextColor param4, int param5, int param6, int param7, int param8, int param9, UnkStruct_ov16_0226AEA0 *param10);
static void ov16_0226AAC0(UnkStruct_ov16_02268A14 *param0);
static void ov16_0226A698(UnkStruct_ov16_02268A14 *param0);
static void ov16_0226A718(UnkStruct_ov16_02268A14 *param0);
static void ov16_0226A768(UnkStruct_ov16_02268A14 *param0);
static ManagedSprite *ov16_0226A7A4(UnkStruct_ov16_02268A14 *param0, Pokemon *param1, int param2, int param3, int param4, int param5);
static void ov16_0226A928(SysTask *param0, void *param1);
static void ov16_0226B988(SysTask *param0, void *param1);
static void ov16_0226BA88(SysTask *param0, void *param1);
static void ov16_0226BB94(void *param0);
static TextColor ov16_0226B924(int param0, int param1);
void ov16_0226BCCC(UnkStruct_ov16_02268A14 *param0, int param1);
BOOL ov16_0226BCD0(UnkStruct_ov16_02268A14 *param0);
static void ov16_0226BCE4(SysTask *param0, void *param1);
static void ov16_02268FCC(SysTask *param0, void *param1);
static int ov16_0226BE48(UnkStruct_ov16_02268A14 *param0);
static int ov16_0226BEC0(UnkStruct_ov16_02268A14 *param0, int param1);
static int ov16_0226C1F8(UnkStruct_ov16_02268A14 *param0, int param1);
static int ov16_0226C3C8(UnkStruct_ov16_02268A14 *param0, int param1);
static int ov16_0226CA14(UnkStruct_ov16_02268A14 *param0, int param1);
static u32 ov16_0226CB10(UnkStruct_ov16_0226CB10 *param0, int param1, int param2, const u8 *param3);
static void ov16_0226C0A0(UnkStruct_ov16_02268A14 *param0, int param1);
static void ov16_0226C378(UnkStruct_ov16_02268A14 *param0, int param1);
static void ov16_0226C9B8(UnkStruct_ov16_02268A14 *param0, int param1);
static void ov16_0226B31C(UnkStruct_ov16_02268A14 *param0, const s16 *param1, const UnkStruct_ov16_022702F4 *param2, int param3, int param4);
static UnkStruct_ov16_0226ABD4 *ov16_0226ABD4(UnkStruct_ov16_02268A14 *param0, int param1);
static void ov16_0226ABE8(UnkStruct_ov16_02268A14 *param0);
static void ov16_0226A95C(const Strbuf *param0, int param1, int *param2, int *param3);
static void ov16_0226AEA0(UnkStruct_ov16_02268A14 *param0, const Strbuf *param1, enum Font param2, UnkStruct_ov16_0226AEA0 *param3, TextColor param4);
static void ov16_0226AAF8(UnkStruct_ov16_02268A14 *param0);
static int ov16_0226C100(UnkStruct_ov16_02268A14 *param0, int param1);
static void ov16_0226BD74(SysTask *param0, void *param1);
static int ov16_0226CD18(UnkStruct_ov16_02268A14 *param0);
static int ov16_0226CD84(UnkStruct_ov16_02268A14 *param0);
static int ov16_0226CDDC(UnkStruct_ov16_02268A14 *param0);
static int ov16_0226CE34(UnkStruct_ov16_02268A14 *param0);
static void inline_ov16_0226B314(SysTaskFunc param0, UnkStruct_ov16_02268A14 *param1);
static void inline_ov16_0226B318_1(SysTask *param0, void *param1);
static void inline_ov16_0226B318_1_sub(UnkStruct_ov16_02268A14 *param0);
static void inline_ov16_0226B314_1(SysTask *param0, void *param1);
__attribute__((aligned(4))) static const u16 Unk_ov16_02270264[] = {
0x31,
0x2A,
0x2F,
0x2B,
0x2C,
0x30,
0x2D
};
__attribute__((aligned(4))) static const u16 Unk_ov16_022702B4[][2] = {
{ 0x20, 0x3E },
{ 0xA0, 0x3E },
{ 0x20, 0x7E },
{ 0xA0, 0x7E }
};
__attribute__((aligned(4))) static const u16 Unk_ov16_02270284[][2] = {
{ 0x3B, 0x3E },
{ 0xBB, 0x3E },
{ 0x3B, 0x7E },
{ 0xBB, 0x7E }
};
__attribute__((aligned(4))) static const u16 Unk_ov16_022702D4[][2] = {
{ 0x4C, 0x3E },
{ 0xCC, 0x3E },
{ 0x4C, 0x7E },
{ 0xCC, 0x7E }
};
__attribute__((aligned(4))) static const u16 Unk_ov16_02270328[][2] = {
{ 0x3C, 0x74 },
{ 0xC4, 0x20 },
{ 0xC4, 0x74 },
{ 0x3C, 0x20 },
{ 0x80, 0xB2 }
};
__attribute__((aligned(4))) static const u16 Unk_ov16_02270304[][2] = {
{ 0x3C, 0x74 },
{ 0xC4, 0x38 },
{ 0xC4, 0x74 },
{ 0x3C, 0x38 }
};
static const BgTemplate Unk_ov16_02270540[] = {
{
.x = 0x0,
.y = 0x0,
.bufferSize = 0x800,
.baseTile = 0x0,
.screenSize = BG_SCREEN_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x6000,
.charBase = GX_BG_CHARBASE_0x00000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 0x0,
.areaOver = 0x0,
.mosaic = FALSE,
},
{
.x = 0x0,
.y = 0x0,
.bufferSize = 0x800,
.baseTile = 0x0,
.screenSize = BG_SCREEN_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x6800,
.charBase = GX_BG_CHARBASE_0x00000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 0x0,
.areaOver = 0x0,
.mosaic = FALSE,
},
{
.x = 0x0,
.y = 0x0,
.bufferSize = 0x800,
.baseTile = 0x0,
.screenSize = BG_SCREEN_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x7000,
.charBase = GX_BG_CHARBASE_0x00000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 0x0,
.areaOver = 0x0,
.mosaic = FALSE,
},
{
.x = 0x0,
.y = 0x0,
.bufferSize = 0x800,
.baseTile = 0x0,
.screenSize = BG_SCREEN_SIZE_256x256,
.colorMode = GX_BG_COLORMODE_16,
.screenBase = GX_BG_SCRBASE_0x7800,
.charBase = GX_BG_CHARBASE_0x00000,
.bgExtPltt = GX_BG_EXTPLTT_01,
.priority = 0x0,
.areaOver = 0x0,
.mosaic = FALSE,
}
};
static const TouchScreenRect Unk_ov16_02270350[] = {
{ 0x18, 0x90, 0x0, 0xFF },
{ 0x90, 0xC0, 0x0, 0x50 },
{ 0x90, 0xC0, 0xB0, 0xFF },
{ 0x98, 0xC0, 0x58, 0xA8 },
{ 0xFF, 0x0, 0x0, 0x0 }
};
static const int Unk_ov16_022702A4[NELEMS(Unk_ov16_02270350) - 1] = {
0x1,
0x2,
0x3,
0x4
};
__attribute__((aligned(4))) static const u8 Unk_ov16_02270A08[NELEMS(Unk_ov16_02270350) - 1] = {
0x1,
0x2,
0x3,
0x4
};
__attribute__((aligned(4))) static const u8 Unk_ov16_022701EC[2][3] = {
{ 0x0, 0x0, 0x0 },
{ 0x1, 0x3, 0x2 }
};
static const TouchScreenRect Unk_ov16_02270214[] = {
{ 0x18, 0x90, 0x0, 0xFF },
{ 0xFF, 0x0, 0x0, 0x0 }
};
static const TouchScreenRect Unk_ov16_02270258[] = {
{ 0x28, 0x80, 0x18, 0xE8 },
{ 0x98, 0xC0, 0x58, 0xA8 },
{ 0xFF, 0x0, 0x0, 0x0 }
};
static const int Unk_ov16_022702E4[NELEMS(Unk_ov16_02270350) - 1] = {
0x1,
0x4
};
__attribute__((aligned(4))) static const u8 Unk_ov16_02270A04[NELEMS(Unk_ov16_02270350) - 1] = {
0x1,
0x4
};
__attribute__((aligned(4))) static const u8 Unk_ov16_022701CC[2][1] = {
{ 0x0 },
{ 0x1 }
};
static const TouchScreenRect Unk_ov16_0227038C[] = {
{ 0x98, 0xC0, 0x8, 0xF8 },
{ 0x18, 0x50, 0x0, 0x80 },
{ 0x18, 0x50, 0x80, 0xFF },
{ 0x58, 0x90, 0x0, 0x80 },
{ 0x58, 0x90, 0x80, 0xFF },
{ 0xFF, 0x0, 0x0, 0x0 }
};
static const int Unk_ov16_02270364[NELEMS(Unk_ov16_0227038C) - 1] = {
0xFF,
0x1,
0x2,
0x3,
0x4
};
__attribute__((aligned(4))) static const u8 Unk_ov16_02270A14[NELEMS(Unk_ov16_0227038C) - 1] = {
0x4,
0x8,
0x9,
0xA,
0xB
};
__attribute__((aligned(4))) static const u8 Unk_ov16_022701E4[3][2] = {
{ 0x1, 0x2 },
{ 0x3, 0x4 },
{ 0x0, 0x0 }
};
static const TouchScreenRect Unk_ov16_0227024C[] = {
{ 0x28, 0x60, 0x8, 0xF8 },
{ 0x70, 0xA8, 0x8, 0xF8 },
{ 0xFF, 0x0, 0x0, 0x0 }
};
static const int Unk_ov16_02270224[NELEMS(Unk_ov16_0227024C) - 1] = {
0x1,
0xFF
};
__attribute__((aligned(4))) static const u8 Unk_ov16_02270A00[NELEMS(Unk_ov16_0227024C) - 1] = {
0x1,
0x4
};
__attribute__((aligned(4))) static const u8 Unk_ov16_022701C8[2][1] = {
{ 0x0 },
{ 0x1 }
};
static const TouchScreenRect Unk_ov16_022703BC[] = {
{ 0x58, 0x90, 0x0, 0x78 },
{ 0x8, 0x50, 0x88, 0xFF },
{ 0x58, 0x90, 0x88, 0xFF },
{ 0x8, 0x50, 0x0, 0x78 },
{ 0x98, 0xC0, 0x8, 0xF8 },
{ 0xFF, 0x0, 0x0, 0x0 }
};
static const int Unk_ov16_02270314[NELEMS(Unk_ov16_022703BC) - 1] = {
0x1,
0x2,
0x3,
0x4,
0xFF
};
__attribute__((aligned(4))) static const u8 Unk_ov16_02270A0C[NELEMS(Unk_ov16_022703BC) - 1] = {
0x6,
0xC,
0xD,
0x5,
0x4
};
__attribute__((aligned(4))) static const u8 Unk_ov16_022701DC[3][2] = {
{ 0x3, 0x1 },
{ 0x0, 0x2 },
{ 0x4, 0x4 }
};
static const TouchScreenRect Unk_ov16_02270204[] = {
{ 0x98, 0xC0, 0x0, 0xFF },
{ 0xFF, 0x0, 0x0, 0x0 }
};
static const int Unk_ov16_022701D8[NELEMS(Unk_ov16_02270204) - 1] = {
0x1
};
__attribute__((aligned(4))) static const u8 Unk_ov16_022701C4[NELEMS(Unk_ov16_02270204) - 1] = {
0x4
};
static const UnkStruct_ov16_02270670 Unk_ov16_02270670[] = {
{
0x1C,
0xF2,
{ 0xFFFF, 0xFFFF, 0x0, 0xFFFF },
{ 0x2, 0x1, 0x3, 0x0 },
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
},
{
0x1C,
0xF2,
{ 0x1, 0x2, 0x0, 0xFFFF },
{ 0x2, 0x3, 0x3, 0x0 },
Unk_ov16_02270350,
Unk_ov16_022702A4,
Unk_ov16_02270A08,
ov16_0226BEC0,
ov16_0226C0A0,
ov16_02269654,
ov16_0226A318,
},
{
0x1C,
0xF2,
{ 0x1, 0x2, 0x0, 0xFFFF },
{ 0x2, 0x3, 0x3, 0x0 },
Unk_ov16_02270350,
Unk_ov16_022702A4,
Unk_ov16_02270A08,
ov16_0226BEC0,
ov16_0226C0A0,
ov16_02269654,
ov16_0226A318,
},
{
0x1C,
0xF2,
{ 0x1, 0x2, 0x0, 0xFFFF },
{ 0x2, 0x3, 0x3, 0x0 },
Unk_ov16_02270350,
Unk_ov16_022702A4,
Unk_ov16_02270A08,
ov16_0226BEC0,
ov16_0226C0A0,
ov16_02269668,
ov16_0226A318,
},
{
0x1C,
0xF2,
{ 0x1, 0x2, 0x0, 0xFFFF },
{ 0x2, 0x3, 0x3, 0x0 },
Unk_ov16_02270350,
Unk_ov16_022702A4,
Unk_ov16_02270A08,
ov16_0226BEC0,
ov16_0226C0A0,
ov16_02269668,
ov16_0226A318,
},
{
0x1C,
0xF2,
{ 0x1, 0x2, 0x0, 0xFFFF },
{ 0x2, 0x3, 0x3, 0x0 },
Unk_ov16_02270214,
Unk_ov16_022702A4,
Unk_ov16_02270A08,
ov16_0226BEC0,
ov16_0226C0A0,
ov16_022698A8,
ov16_0226A318,
},
{
0x1C,
0xF2,
{ 0x1, 0x2, 0x0, 0xFFFF },
{ 0x2, 0x3, 0x3, 0x0 },
Unk_ov16_02270214,
Unk_ov16_022702A4,
Unk_ov16_02270A08,
ov16_0226BEC0,
ov16_0226C0A0,
ov16_022698BC,
ov16_0226A318,
},
{
0x1C,
0xF2,
{ 0x1, 0xFFFF, 0x0, 0xFFFF },
{ 0x2, 0x1, 0x3, 0x0 },
Unk_ov16_02270350,
Unk_ov16_022702A4,
Unk_ov16_02270A08,
ov16_0226BEC0,
ov16_0226C0A0,
ov16_02269654,
ov16_0226A318,
},
{
0x1C,
0xF2,
{ 0x1, 0xFFFF, 0x0, 0xFFFF },
{ 0x2, 0x1, 0x3, 0x0 },
Unk_ov16_02270350,
Unk_ov16_022702A4,
Unk_ov16_02270A08,
ov16_0226BEC0,
ov16_0226C0A0,
ov16_02269668,
ov16_0226A318,
},
{
0x1C,
0xF2,
{ 0x1, 0xFFFF, 0x0, 0xFFFF },
{ 0x2, 0x3, 0x3, 0x0 },
Unk_ov16_02270258,
Unk_ov16_022702E4,
Unk_ov16_02270A04,
ov16_0226C100,
NULL,
ov16_02269924,
ov16_0226A318,
},
{
0x1C,
0xF2,
{ 0x1, 0xFFFF, 0x0, 0xFFFF },
{ 0x2, 0x3, 0x3, 0x0 },
Unk_ov16_02270258,
Unk_ov16_022702E4,
Unk_ov16_02270A04,
ov16_0226C100,
NULL,
ov16_02269938,
ov16_0226A318,
},
{
0x1C,
0xF2,
{ 0x3, 0xFFFF, 0x0, 0xFFFF },
{ 0x2, 0x1, 0x3, 0x0 },
Unk_ov16_0227038C,
Unk_ov16_02270364,
Unk_ov16_02270A14,
ov16_0226C1F8,
ov16_0226C378,
ov16_022699AC,
ov16_0226A3F4,
},
{
0x1C,
0xF2,
{ 0x4, 0x5, 0x0, 0xFFFF },
{ 0x2, 0x1, 0x3, 0x0 },
Unk_ov16_022703BC,
Unk_ov16_02270314,
Unk_ov16_02270A0C,
ov16_0226C3C8,
ov16_0226C9B8,
ov16_0226A12C,
ov16_0226A528,
},
{
0x1C,
0xF2,
{ 0x6, 0xFFFF, 0x0, 0xFFFF },
{ 0x2, 0x1, 0x3, 0x0 },
Unk_ov16_0227024C,
Unk_ov16_02270224,
Unk_ov16_02270A00,
ov16_0226CA14,
NULL,
ov16_02269C7C,
ov16_0226A4A4,
},
{
0x1C,
0xF2,
{ 0x6, 0xFFFF, 0x0, 0xFFFF },
{ 0x2, 0x1, 0x3, 0x0 },
Unk_ov16_0227024C,
Unk_ov16_02270224,
Unk_ov16_02270A00,
ov16_0226CA14,
NULL,
ov16_02269D14,
ov16_0226A4A4,
},
{
0x1C,
0xF2,
{ 0x6, 0xFFFF, 0x0, 0xFFFF },
{ 0x2, 0x1, 0x3, 0x0 },
Unk_ov16_0227024C,
Unk_ov16_02270224,
Unk_ov16_02270A00,
ov16_0226CA14,
NULL,
ov16_02269DB0,
ov16_0226A4A4,
},
{
0x1C,
0xF2,
{ 0x6, 0xFFFF, 0x0, 0xFFFF },
{ 0x2, 0x1, 0x3, 0x0 },
Unk_ov16_0227024C,
Unk_ov16_02270224,
Unk_ov16_02270A00,
ov16_0226CA14,
NULL,
ov16_02269F68,
ov16_0226A4A4,
},
{
0x1C,
0xF2,
{ 0x6, 0xFFFF, 0x0, 0xFFFF },
{ 0x2, 0x1, 0x3, 0x0 },
Unk_ov16_0227024C,
Unk_ov16_02270224,
Unk_ov16_02270A00,
ov16_0226CA14,
NULL,
ov16_0226A04C,
ov16_0226A4A4,
},
{
0x1C,
0xF2,
{ 0x6, 0x4, 0x0, 0xFFFF },
{ 0x2, 0x3, 0x3, 0x0 },
Unk_ov16_02270204,
Unk_ov16_022701D8,
Unk_ov16_022701C4,
NULL,
NULL,
ov16_02269E94,
ov16_0226A634,
},
};
static const SpriteTemplate Unk_ov16_02270414 = {
0xC,
0xD,
0x0,
0x0,
0xA,
0x0,
NNS_G2D_VRAM_TYPE_2DSUB,
{ 0x4E37, 0x4E37, 0x4E2F, 0x4E2F, 0xFFFFFFFF, 0xFFFFFFFF },
0x1,
0x0,
};
static const SpriteTemplate Unk_ov16_02270448 = {
0xF6,
0x9,
0x0,
0x0,
0xB,
0x1,
NNS_G2D_VRAM_TYPE_2DSUB,
{ 0x4E38, 0x4E37, 0x4E30, 0x4E30, 0xFFFFFFFF, 0xFFFFFFFF },
0x1,
0x0,
};
static const SpriteTemplate Unk_ov16_0227047C = {
0x0,
0x0,
0x0,
0x0,
0x64,
0x0,
NNS_G2D_VRAM_TYPE_2DSUB,
{ 0x4E39, 0x4E34, 0x4E31, 0x4E31, 0xFFFFFFFF, 0xFFFFFFFF },
0x1,
0x0,
};
static const SpriteTemplate Unk_ov16_022704B0 = {
0x0,
0x0,
0x0,
0x0,
0x64,
0x0,
NNS_G2D_VRAM_TYPE_2DSUB,
{ 0x4E45, 0x4E36, 0x4E35, 0x4E35, 0xFFFFFFFF, 0xFFFFFFFF },
0x1,
0x0,
};
__attribute__((aligned(4))) static const s16 Unk_ov16_022703A4[][3] = {
{ 0x0, 0xC0, 0x180 },
{ 0x0, 0xC0, 0x180 },
{ 0x0, 0xC0, 0x180 },
{ 0x0, 0xC0, 0x180 },
};
__attribute__((aligned(4))) static const UnkStruct_ov16_022702F4 Unk_ov16_022702F4[] = {
{ 0x4, 0xF, 0x2, 0x1D },
{ 0x11, 0x17, 0x0, 0x9 },
{ 0x11, 0x17, 0x16, 0x1F },
{ 0x12, 0x17, 0xB, 0x14 },
};
__attribute__((aligned(4))) static const s16 Unk_ov16_022703F4[][3] = {
{ 0x0, 0xC0, 0x180 },
{ 0x0, 0xC0, 0x180 },
{ 0x0, 0xC0, 0x180 },
{ 0x0, 0xC0, 0x180 },
{ 0x0, 0xC0, 0x180 },
};
__attribute__((aligned(4))) static const UnkStruct_ov16_022702F4 Unk_ov16_02270378[] = {
{ 0x2, 0x9, 0x0, 0xF },
{ 0x2, 0x9, 0x10, 0x1F },
{ 0xA, 0x11, 0x0, 0xF },
{ 0xA, 0x11, 0x10, 0x1F },
{ 0x12, 0x17, 0x1, 0x1E },
};
__attribute__((aligned(4))) static const s16 Unk_ov16_0227022C[] = {
0x22F,
0x22C,
0x229,
0x226,
};
__attribute__((aligned(4))) static const UnkStruct_ov16_022702F4 Unk_ov16_02270274[] = {
{ 0x3, 0x9, 0x0, 0xF },
{ 0x3, 0x9, 0x10, 0x1F },
{ 0xB, 0x11, 0x0, 0xF },
{ 0xB, 0x11, 0x10, 0x1F },
};
__attribute__((aligned(4))) static const s16 Unk_ov16_022703D4[][3] = {
{ 0x0, 0xC0, 0x180 },
{ 0x0, 0xC0, 0x180 },
{ 0x0, 0xC0, 0x180 },
{ 0x0, 0xC0, 0x180 },
{ 0x0, 0xC0, 0x180 },
};
__attribute__((aligned(4))) static const UnkStruct_ov16_022702F4 Unk_ov16_0227033C[] = {
{ 0xA, 0x11, 0x0, 0xE },
{ 0x0, 0x9, 0x11, 0x1F },
{ 0xA, 0x11, 0x11, 0x1F },
{ 0x0, 0x9, 0x0, 0xE },
{ 0x12, 0x17, 0x1, 0x1E },
};
__attribute__((aligned(4))) static const s16 Unk_ov16_022701FC[] = {
0x238,
0x235,
0x232,
0x23B,
};
__attribute__((aligned(4))) static const UnkStruct_ov16_022702F4 Unk_ov16_022702C4[] = {
{ 0xB, 0x11, 0x0, 0xE },
{ 0x1, 0x9, 0x11, 0x1F },
{ 0xB, 0x11, 0x11, 0x1F },
{ 0x1, 0x9, 0x0, 0xE },
};
__attribute__((aligned(4))) static const s16 Unk_ov16_02270240[][3] = {
{ 0x0, 0x5, 0xA },
{ 0x0, 0xC0, 0x180 },
};
__attribute__((aligned(4))) static const UnkStruct_ov16_022702F4 Unk_ov16_0227021C[] = {
{ 0xD, 0x14, 0x0, 0x1F },
{ 0x4, 0xB, 0x0, 0x1F },
};
__attribute__((aligned(4))) static const s16 Unk_ov16_022701F4[3] = {
0x0,
0xC0,
0x180
};
__attribute__((aligned(4))) static const UnkStruct_ov16_022702F4 Unk_ov16_022701D0[] = {
{ 0x12, 0x17, 0x0, 0x1F }
};
static const UnkStruct_ov16_02270294 Unk_ov16_02270294[] = {
{ 0x80, 0x4C },
{ 0x28, 0xA4 },
{ 0xD8, 0xA4 },
{ 0x80, 0xA8 }
};
__attribute__((aligned(4))) static const int Unk_ov16_022705B0[][4] = {
{ 0x1, 0x1, 0x1, 0x1 },
{ 0x0, 0x1, 0x0, 0x1 },
{ 0x0, 0x1, 0x1, 0x1 },
{ 0x1, 0x1, 0x1, 0x1 },
{ 0x1, 0x0, 0x0, 0x0 },
{ 0x1, 0x0, 0x1, 0x0 },
{ 0x0, 0x0, 0x1, 0x0 },
{ 0x1, 0x1, 0x0, 0x1 },
{ 0x0, 0x1, 0x1, 0x1 },
{ 0x1, 0x1, 0x0, 0x1 },
{ 0x1, 0x0, 0x1, 0x0 },
{ 0x0, 0x1, 0x0, 0x1 },
};
static const struct {
u16 unk_00;
u16 unk_02;
} Unk_ov16_022704E4[] = {
{ 0xF3, 0x10B },
{ 0xF4, 0x10C },
{ 0xF5, 0x10D },
{ 0xF6, 0x10E },
{ 0xF7, 0x10F },
{ 0xF8, 0x110 },
{ 0xF9, 0x111 },
{ 0xFA, 0x112 },
{ 0xFB, 0x113 },
{ 0xFC, 0x114 },
{ 0xFD, 0x115 },
{ 0xFE, 0x116 },
{ 0xFF, 0x117 },
{ 0x100, 0x118 },
{ 0x101, 0x119 },
{ 0x102, 0x11A },
{ 0x103, 0x11B },
{ 0x11C, 0x11D },
{ 0xFFFF, 0xFFFF },
{ 0xFFFF, 0xFFFF },
{ 0xFFFF, 0xFFFF },
{ 0xFFFF, 0xFFFF },
{ 0xFFFF, 0xFFFF },
};
static void *ov16_0226871C(void)
{
UnkStruct_ov16_02268A14 *v0 = Heap_Alloc(HEAP_ID_BATTLE, sizeof(UnkStruct_ov16_02268A14));
MI_CpuClear8(v0, sizeof(UnkStruct_ov16_02268A14));
v0->unk_66B = -1;
return v0;
}
void ov16_02268744(BgConfig *param0)
{
int i;
for (i = 0; i < NELEMS(Unk_ov16_02270540); i++) {
Bg_InitFromTemplate(param0, BG_LAYER_SUB_0 + i, &Unk_ov16_02270540[i], 0);
Bg_FillTilemap(param0, 4 + i, 0x6000 / 0x20 - 1);
Bg_SetOffset(param0, BG_LAYER_SUB_0 + i, 0, 0);
Bg_SetOffset(param0, BG_LAYER_SUB_0 + i, 3, 0);
}
}
void ov16_022687A0(BgConfig *param0)
{
int i;
for (i = 0; i < NELEMS(Unk_ov16_02270540); i++) {
Bg_ToggleLayer(BG_LAYER_SUB_0 + i, 0);
Bg_FreeTilemapBuffer(param0, BG_LAYER_SUB_0 + i);
}
}
void *ov16_022687C8(NARC *param0, NARC *param1, BattleSystem *battleSys, int param3, u8 *param4)
{
UnkStruct_ov16_02268A14 *v0;
PaletteData *v1;
int v2;
v0 = ov16_0226871C();
v0->battleSys = battleSys;
v0->unk_66D = param3;
v0->unk_04 = param4;
if (v0->unk_04 != NULL) {
v0->unk_6C0 = *param4;
} else {
(void)0;
}
v1 = BattleSystem_PaletteSys(battleSys);
v2 = BattleSystem_Background(battleSys);
if (v2 >= NELEMS(Unk_ov16_022704E4)) {
v2 = 0;
GF_ASSERT(0);
}
v0->unk_4C8 = sub_02012744(13, HEAP_ID_BATTLE);
v0->unk_678 = SysTask_Start(ov16_0226BCE4, v0, 1310);
{
NNSG2dScreenData *v3;
void *v4;
int i;
int v6;
for (i = 0; i < 7; i++) {
v0->unk_3C[i] = Heap_Alloc(HEAP_ID_BATTLE, 0x800);
if ((BattleSystem_BattleType(battleSys) & BATTLE_TYPE_FRONTIER) && (Unk_ov16_02270264[i] == 49)) {
v6 = 170;
} else {
v6 = Unk_ov16_02270264[i];
}
v4 = Graphics_GetScrnData(NARC_INDEX_BATTLE__GRAPHIC__PL_BATT_BG, v6, 1, &v3, 5);
MI_CpuCopy32(v3->rawData, v0->unk_3C[i], 0x800);
Heap_Free(v4);
}
}
{
u16 *v7;
int v8;
v8 = (BattleSystem_BattleType(battleSys) & BATTLE_TYPE_FRONTIER) ? 340 : 242;
v0->unk_58 = Heap_Alloc(HEAP_ID_BATTLE, 0x200);
PaletteData_LoadBufferFromFileStart(v1, 7, v8, 5, 1, 0, 0);
if (Unk_ov16_022704E4[v2].unk_00 != 0xffff) {
PaletteData_LoadBufferFromFileStart(v1, 7, Unk_ov16_022704E4[v2].unk_00, 5, 1, 0x20, 0);
}
v7 = PaletteData_GetUnfadedBuffer(v1, 1);
MI_CpuCopy16(v7, v0->unk_58, 0x200);
}
{
int i;
for (i = 0; i < 4; i++) {
MI_CpuFill8(&v0->unk_68[i].unk_00, 0xff, sizeof(MoveDisplayInfo));
}
}
{
int i, j;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
v0->unk_68[i].moveIcons[j] = Heap_Alloc(HEAP_ID_BATTLE, sub_0208C098(6));
}
}
}
{
NNSG2dPaletteData *v13;
void *v14;
int v15;
v0->unk_5C = Heap_Alloc(HEAP_ID_BATTLE, 0x40);
v0->unk_60 = Heap_Alloc(HEAP_ID_BATTLE, 0x40);
MI_CpuCopy16(v0->unk_58, v0->unk_5C, 0x20);
MI_CpuCopy16(&v0->unk_58[7 * 16], &v0->unk_5C[16 * 1], 0x20);
if (BattleSystem_BattleType(battleSys) & BATTLE_TYPE_FRONTIER) {
v15 = 341;
} else if (Unk_ov16_022704E4[v2].unk_02 != 0xffff) {
v15 = Unk_ov16_022704E4[v2].unk_02;
} else {
v15 = 267;
}
v14 = Graphics_GetPlttData(NARC_INDEX_BATTLE__GRAPHIC__PL_BATT_BG, v15, &v13, HEAP_ID_BATTLE);
if (BattleSystem_BattleType(battleSys) & BATTLE_TYPE_FRONTIER) {
MI_CpuCopy16(v13->pRawData, v0->unk_60, 0x40);
} else {
MI_CpuCopy16(v13->pRawData, v0->unk_60, 0x20);
}
Heap_Free(v14);
RenderControlFlags_ZeroSpeedUpBattle();
RenderControlFlags_ZeroWaitBattle();
v0->unk_64 = SysTask_Start(ov16_0226BD74, v0, 55000);
}
return v0;
}
void ov16_02268A14(UnkStruct_ov16_02268A14 *param0)
{
int i;
if (param0->unk_04 != NULL) {
*param0->unk_04 = param0->unk_6C0;
}
ov16_0226B1E8(param0);
ov16_02268F00(param0);
ov16_02268B8C(param0);
sub_020127BC(param0->unk_4C8);
SysTask_Done(param0->unk_678);
for (i = 0; i < 7; i++) {
Heap_Free(param0->unk_3C[i]);
}
Heap_Free(param0->unk_58);
ov16_0226ABE8(param0);
Heap_Free(param0->unk_5C);
Heap_Free(param0->unk_60);
SysTask_Done(param0->unk_64);
Heap_Free(param0);
}
void ov16_02268A88(UnkStruct_ov16_02268A14 *param0)
{
BgConfig *v0;
SpriteSystem *spriteSys;
SpriteManager *spriteMan;
PaletteData *v3;
int i;
spriteSys = BattleSystem_GetSpriteSystem(param0->battleSys);
spriteMan = BattleSystem_GetSpriteManager(param0->battleSys);
v0 = BattleSystem_BGL(param0->battleSys);
v3 = BattleSystem_PaletteSys(param0->battleSys);
{
int v5;
if (BattleSystem_BattleType(param0->battleSys) & BATTLE_TYPE_FRONTIER) {
v5 = 169;
} else {
v5 = 28;
}
Graphics_LoadTilesToBgLayer(NARC_INDEX_BATTLE__GRAPHIC__PL_BATT_BG, v5, v0, 4, 0, 0x6000, 1, HEAP_ID_BATTLE);
}
TypeIcon_LoadAnim(spriteSys, spriteMan, 20017, 20017);
TypeIcon_LoadPltt(BattleSystem_PaletteSys(param0->battleSys), PLTTBUF_SUB_OBJ, spriteSys, spriteMan, NNS_G2D_VRAM_TYPE_2DSUB, 20020);
for (i = 0; i < LEARNED_MOVES_MAX; i++) {
TypeIcon_LoadChar(spriteSys, spriteMan, NNS_G2D_VRAM_TYPE_2DSUB, TYPE_NORMAL, 20025 + i);
}
if (BattleSystem_BattleType(param0->battleSys) & BATTLE_TYPE_CATCH_TUTORIAL) {
ov16_0226DE44(spriteSys, spriteMan, 5, v3, 20412, 20036, 20406, 20395);
param0->unk_6C4.unk_00 = ov16_0226DEEC(spriteSys, spriteMan, HEAP_ID_BATTLE, 20412, 20036, 20406, 20395, 10, 0);
}
}
void ov16_02268B8C(UnkStruct_ov16_02268A14 *param0)
{
int i;
SpriteSystem *v1 = BattleSystem_GetSpriteSystem(param0->battleSys);
SpriteManager *v2 = BattleSystem_GetSpriteManager(param0->battleSys);
for (i = 0; i < 4; i++) {
TypeIcon_UnloadChar(v2, 20025 + i);
}
TypeIcon_UnloadPlttSrc(v2, 20020);
TypeIcon_UnloadAnim(v2, 20017, 20017);
if (BattleSystem_BattleType(param0->battleSys) & BATTLE_TYPE_CATCH_TUTORIAL) {
ov16_0226DF68(param0->unk_6C4.unk_00);
ov16_0226DEC4(v2, 20412, 20036, 20406, 20395);
}
}
void ov16_02268C04(NARC *param0, NARC *param1, UnkStruct_ov16_02268A14 *param2, int param3, int param4, void *param5)
{
const UnkStruct_ov16_02270670 *v0, *v1;
int i;
BgConfig *v3;
SpriteSystem *v4;
SpriteManager *v5;
if (param5 != NULL) {
MI_CpuCopy8(param5, &param2->unk_1A, sizeof(UnkStruct_ov16_02268A14_sub2));
}
param2->unk_66E = 0;
v3 = BattleSystem_BGL(param2->battleSys);
v4 = BattleSystem_GetSpriteSystem(param2->battleSys);
v5 = BattleSystem_GetSpriteManager(param2->battleSys);
if (param2->unk_66B == -1) {
param4 = 1;
v1 = NULL;
} else {
v1 = &Unk_ov16_02270670[param2->unk_66B];
}
v0 = &Unk_ov16_02270670[param3];
if (0) {
int v6;
if (BattleSystem_BattleType(param2->battleSys) & BATTLE_TYPE_FRONTIER) {
v6 = 169;
} else {
v6 = v0->unk_00;
}
Graphics_LoadTilesToBgLayerFromOpenNARC(param0, v6, v3, 4, 0, 0x6000 - (32 * 12 * 0x20), 1, HEAP_ID_BATTLE);
if (param2->unk_66D == 0) {
Graphics_LoadTilesToBgLayerFromOpenNARC(param0, 37, v3, 4, (0x6000 - (32 * 12 * 0x20)) / 0x20, 32 * 12 * 0x20, 1, HEAP_ID_BATTLE);
} else {
Graphics_LoadTilesToBgLayerFromOpenNARC(param0, 38, v3, 4, (0x6000 - (32 * 12 * 0x20)) / 0x20, 32 * 12 * 0x20, 1, HEAP_ID_BATTLE);
}
}
if (1) {
PaletteData_LoadBuffer(BattleSystem_PaletteSys(param2->battleSys), param2->unk_58, 1, 0, 0x200);
}
for (i = 0; i < 4; i++) {
if ((v0->unk_04_val2[i] != 0xffff) && ((param4 == 1) || (v0->unk_04_val2[i] != v1->unk_04_val2[i]))) {
Bg_LoadTilemapBuffer(v3, 4 + i, param2->unk_3C[v0->unk_04_val2[i]], 0x800);
Bg_ScheduleTilemapTransfer(v3, 4 + i);
}
}
SpriteSystem_LoadPaletteBufferFromOpenNarc(BattleSystem_PaletteSys(param2->battleSys), 3, v4, v5, param1, 72, 0, 7, NNS_G2D_VRAM_TYPE_2DSUB, 20023);
param2->unk_66B = param3;
G2S_SetBlendAlpha(GX_BLEND_PLANEMASK_BG1, GX_BLEND_BGALL, 8, 12);
ov16_0226B1E8(param2);
if (v0->unk_28 != NULL) {
v0->unk_28(param2, param3, param4);
}
SysTask_ExecuteAfterVBlank(ov16_0226BC50, param2, 10);
}
void ov16_02268D40(NARC *param0, UnkStruct_ov16_02268A14 *param1)
{
int i;
SpriteSystem *v1;
SpriteManager *v2;
GF_ASSERT(param1->unk_5BC[0] == NULL && param1->unk_5D4[0] == NULL);
v1 = BattleSystem_GetSpriteSystem(param1->battleSys);
v2 = BattleSystem_GetSpriteManager(param1->battleSys);
SpriteSystem_LoadCharResObjFromOpenNarc(v1, v2, param0, 208, TRUE, NNS_G2D_VRAM_TYPE_2DSUB, 20023);
SpriteSystem_LoadCellResObjFromOpenNarc(v1, v2, param0, 207, TRUE, 20015);
SpriteSystem_LoadAnimResObjFromOpenNarc(v1, v2, param0, 209, TRUE, 20015);
SpriteSystem_LoadCharResObjFromOpenNarc(v1, v2, param0, 205, TRUE, NNS_G2D_VRAM_TYPE_2DSUB, 20024);
SpriteSystem_LoadCellResObjFromOpenNarc(v1, v2, param0, 204, TRUE, 20016);
SpriteSystem_LoadAnimResObjFromOpenNarc(v1, v2, param0, 206, TRUE, 20016);
for (i = 0; i < 6; i++) {
param1->unk_5BC[i] = SpriteSystem_NewSprite(v1, v2, &Unk_ov16_02270414);
Sprite_SetPositionXYWithSubscreenOffset(param1->unk_5BC[i]->sprite, 12 + 19 * i, 13, (192 + 80) << FX32_SHIFT);
ManagedSprite_SetAffineOverwriteMode(param1->unk_5BC[i], AFFINE_OVERWRITE_MODE_NORMAL);
param1->unk_5D4[i] = SpriteSystem_NewSprite(v1, v2, &Unk_ov16_02270448);
Sprite_SetPositionXYWithSubscreenOffset(param1->unk_5D4[i]->sprite, 246 + -12 * i, 9, (192 + 80) << FX32_SHIFT);
}
ov16_02269218(param1);
GF_ASSERT(param1->unk_08 == NULL);
param1->unk_08 = SysTask_Start(ov16_02268FCC, param1, 1300);
{
PaletteData *v3;
v3 = BattleSystem_PaletteSys(param1->battleSys);
ov16_0226DB7C(v1, v2, v3, 5, 20411, 20035, 20405, 20394);
param1->unk_6B8 = ov16_0226DC24(v1, v2, HEAP_ID_BATTLE, 20411, 20035, 20405, 20394, 5, 0);
}
}
static void ov16_02268F00(UnkStruct_ov16_02268A14 *param0)
{
int i;
SpriteSystem *v1;
SpriteManager *v2;
GF_ASSERT(param0->unk_5BC[0] != NULL && param0->unk_5D4[0] != NULL);
v1 = BattleSystem_GetSpriteSystem(param0->battleSys);
v2 = BattleSystem_GetSpriteManager(param0->battleSys);
SpriteManager_UnloadCharObjById(v2, 20023);
SpriteManager_UnloadCellObjById(v2, 20015);
SpriteManager_UnloadAnimObjById(v2, 20015);
SpriteManager_UnloadCharObjById(v2, 20024);
SpriteManager_UnloadCellObjById(v2, 20016);
SpriteManager_UnloadAnimObjById(v2, 20016);
SpriteManager_UnloadPlttObjById(v2, 20023);
for (i = 0; i < 6; i++) {
Sprite_DeleteAndFreeResources(param0->unk_5BC[i]);
param0->unk_5BC[i] = NULL;
Sprite_DeleteAndFreeResources(param0->unk_5D4[i]);
param0->unk_5D4[i] = NULL;
}
SysTask_Done(param0->unk_08);
param0->unk_08 = NULL;
ov16_0226DBFC(v2, 20411, 20035, 20405, 20394);
ov16_0226DCA8(param0->unk_6B8);
}
static void ov16_02268FCC(SysTask *param0, void *param1)
{
UnkStruct_ov16_02268A14 *v0 = param1;
int i;
UnkStruct_ov16_02268FCC *v2;
for (i = 0; i < 6; i++) {
v2 = &v0->unk_62C[i];
switch (v2->unk_03) {
case 0:
default:
if (Sprite_GetDrawFlag2(v0->unk_5BC[i]->sprite) == 0) {
break;
}
if (v2->unk_02 >= 87) {
v2->unk_04 = 0;
v2->unk_05 = 10;
} else {
break;
}
v2->unk_05 += LCRNG_Next() % 8;
v2->unk_07 = 2;
v2->unk_03++;
break;
case 1:
if (v2->unk_05 > 0) {
v2->unk_05--;
break;
}
v2->unk_03++;
break;
case 2:
case 4:
ManagedSprite_OffsetAffineZRotation(v0->unk_5BC[i], 0x800);
v2->unk_00 += 0x180;
ManagedSprite_SetPositionXYWithSubscreenOffset(v0->unk_5BC[i], 12 + 19 * i + v2->unk_00 / 0x100, 13, (192 + 80) << FX32_SHIFT);
v2->unk_06++;
if (v2->unk_06 >= v2->unk_07) {
v2->unk_06 = 0;
if (v2->unk_03 == 2) {
v2->unk_03++;
} else {
ManagedSprite_SetAffineZRotation(v0->unk_5BC[i], 0);
ManagedSprite_SetPositionXYWithSubscreenOffset(v0->unk_5BC[i], 12 + 19 * i, 13, (192 + 80) << FX32_SHIFT);
v2->unk_00 = 0;
if (v2->unk_08 < 1) {
v2->unk_08++;
if (v2->unk_07 > 1) {
v2->unk_07--;
}
v2->unk_03 = 2;
} else {
v2->unk_08 = 0;
v2->unk_03 = 0;
}
}
}
break;
case 3:
ManagedSprite_OffsetAffineZRotation(v0->unk_5BC[i], -0x800);
v2->unk_00 -= 0x180;
ManagedSprite_SetPositionXYWithSubscreenOffset(v0->unk_5BC[i], 12 + 19 * i + v2->unk_00 / 0x100, 13, (192 + 80) << FX32_SHIFT);
v2->unk_06++;
if (v2->unk_06 >= v2->unk_07 * 2) {
v2->unk_06 = 0;
v2->unk_03++;
}
break;
}
}
}
void ov16_0226914C(UnkStruct_ov16_02268A14 *param0, const u8 *param1)
{
int i;
for (i = 0; i < 6; i++) {
param0->unk_62C[i].unk_02 = param1[i];
}
}
void ov16_02269168(UnkStruct_ov16_02268A14 *param0, u8 param1[], u8 param2[])
{
int i, v1;
for (i = 0; i < 6; i++) {
v1 = ov16_0226A934(param1[i]);
Sprite_SetAnim(param0->unk_5BC[i]->sprite, v1);
Sprite_TickFrame(param0->unk_5BC[i]->sprite);
v1 = ov16_0226A934(param2[i]);
Sprite_SetAnim(param0->unk_5D4[i]->sprite, v1);
Sprite_TickFrame(param0->unk_5D4[i]->sprite);
}
}
void ov16_022691BC(UnkStruct_ov16_02268A14 *param0)
{
int i;
GF_ASSERT(param0->unk_5BC[0] != NULL && param0->unk_5D4[0] != NULL);
for (i = 0; i < 6; i++) {
Sprite_SetDrawFlag2(param0->unk_5BC[i]->sprite, 1);
}
if (BattleSystem_BattleType(param0->battleSys) & BATTLE_TYPE_TRAINER) {
for (i = 0; i < 6; i++) {
Sprite_SetDrawFlag2(param0->unk_5D4[i]->sprite, 1);
}
}
}
void ov16_02269218(UnkStruct_ov16_02268A14 *param0)
{
int i;
GF_ASSERT(param0->unk_5BC[0] != NULL && param0->unk_5D4[0] != NULL);
for (i = 0; i < 6; i++) {
Sprite_SetDrawFlag2(param0->unk_5BC[i]->sprite, 0);
Sprite_SetDrawFlag2(param0->unk_5D4[i]->sprite, 0);
}
}
int ov16_0226925C(UnkStruct_ov16_02268A14 *param0)
{
int v0, v1, v2, v3;
const UnkStruct_ov16_02270670 *v4;
int v5 = 0;
GF_ASSERT(param0->unk_66B != -1);
v4 = &Unk_ov16_02270670[param0->unk_66B];
if ((v4->unk_14 == NULL) || (param0->unk_66E == 1)) {
return 0xffffffff;
}
GF_ASSERT(v4->unk_18 != NULL);
if (BattleSystem_BattleType(param0->battleSys) & BATTLE_TYPE_CATCH_TUTORIAL) {
v1 = ov16_0226CD18(param0);
} else {
v1 = TouchScreen_CheckRectanglePressed(v4->unk_14);
if (v1 == 0xffffffff) {
v1 = ov16_0226BE48(param0);
v5++;
}
}
if (v1 == 0xffffffff) {
v0 = 0xffffffff;
v3 = 0xff;
} else {
v0 = v4->unk_18[v1];
v3 = v4->unk_1C[v1];
}
if (v4->unk_2C != NULL) {
v0 = v4->unk_2C(param0, v0, v3);
if (v0 != 0xffffffff) {
if (v4->unk_24 != NULL) {
v4->unk_24(param0, v1);
}
MI_CpuClear8(&param0->unk_6BC, sizeof(UnkStruct_ov16_0226CB10));
ov16_0226DDE8(param0->unk_6B8);
if (v5 > 0) {
param0->unk_6C0 = 1;
} else {
param0->unk_6C0 = 0;
}
}
}
return v0;
}
BOOL ov16_02269348(UnkStruct_ov16_02268A14 *param0)
{
if ((param0->unk_0C == NULL) && (param0->unk_10 == NULL) && (ov16_0226BCD0(param0) == 1)) {
return 1;
}
return 0;
}
int ov16_02269368(int param0, int param1)
{
switch (param0) {
case 0x0:
return (param1 == 4) ? 9 : 8;
case 0x1:
case 0x2:
case 0x10:
return (param1 == 4) ? 6 : 4;
case 0x4:
case 0x80:
return 1;
case 0x8:
return (param1 == 4) ? 7 : 2;
case 0x100:
return (param1 == 4) ? 4 : 6;
case 0x40:
return 3;
case 0x200:
return 10;
case 0x20:
return 5;
case 0x400:
return 11;
default:
GF_ASSERT(0);
return 0;
}
}
void ov16_0226940C(UnkStruct_ov16_02268A14 *param0)
{
int v0;
GXS_SetVisibleWnd(GX_WNDMASK_W0);
G2S_SetWndOutsidePlane(GX_WND_PLANEMASK_BG0 | GX_WND_PLANEMASK_BG1 | GX_WND_PLANEMASK_BG2 | GX_WND_PLANEMASK_BG3 | GX_WND_PLANEMASK_OBJ, 1);
G2S_SetWnd0InsidePlane(GX_WND_PLANEMASK_BG0 | GX_WND_PLANEMASK_BG1 | GX_WND_PLANEMASK_BG3 | GX_WND_PLANEMASK_OBJ, 1);
v0 = 255 - (param0->unk_6AC / 0x100);
if (v0 < 0) {
v0 = 0;
}
G2S_SetWnd0Position(v0, 0, 255, 192);
}
void ov16_0226947C(UnkStruct_ov16_02268A14 *param0, int param1, int param2)
{
if (param0->unk_6AC == param2 * 0x100) {
return;
}
param0->unk_6B0 = param1;
param0->unk_6B4 = param2 << 8;
SysTask_Start(ov16_022694A8, param0, 1200);
}
static void ov16_022694A8(SysTask *param0, void *param1)
{
UnkStruct_ov16_02268A14 *v0 = param1;
int v1 = 0;
BgConfig *v2 = BattleSystem_BGL(v0->battleSys);
v0->unk_6AC += v0->unk_6B0;
if (((v0->unk_6B0 <= 0) && (v0->unk_6AC <= v0->unk_6B4)) || ((v0->unk_6B0 > 0) && (v0->unk_6AC >= v0->unk_6B4))) {
v0->unk_6AC = v0->unk_6B4;
v1 = 1;
}
Bg_SetOffset(v2, BG_LAYER_SUB_2, 0, v0->unk_6AC / 0x100);
ov16_0226940C(v0);
if (v1 == 1) {
Bg_FillTilemap(v2, 7, 0x6000 / 0x20 - 1);
Bg_ToggleLayer(BG_LAYER_SUB_3, 0);
Bg_SetPriority(BG_LAYER_SUB_3, 0);
GXS_SetVisibleWnd(GX_WNDMASK_NONE);
SysTask_Done(param0);
return;
}
}
static void ov16_02269550(UnkStruct_ov16_02268A14 *param0, int param1)
{
BOOL v0;
UnkStruct_ov16_0226B988 *v1;
param0->unk_66E = 1;
G2S_SetWndOutsidePlane(GX_WND_PLANEMASK_BG0 | GX_WND_PLANEMASK_BG1 | GX_WND_PLANEMASK_BG2 | GX_WND_PLANEMASK_BG3, 1);
G2S_SetWnd0InsidePlane(GX_WND_PLANEMASK_BG2 | GX_WND_PLANEMASK_BG3, 1);
G2S_SetWnd1InsidePlane(GX_WND_PLANEMASK_BG2 | GX_WND_PLANEMASK_BG3, 1);
G2S_SetWnd0Position(0, 0, 255, 18 * 8);
G2S_SetWnd1Position(0, 18 * 8, 255, 192);
GXS_SetVisibleWnd(GX_WNDMASK_W0 | GX_WNDMASK_W1);
v1 = Heap_Alloc(HEAP_ID_BATTLE, sizeof(UnkStruct_ov16_0226B988));
MI_CpuClear8(v1, sizeof(UnkStruct_ov16_0226B988));
v1->unk_00 = param0;
v1->unk_12 = param1;
v1->unk_08 = -(255 * 100);
v1->unk_0A = (40 * 100);
v1->unk_0C = ((255 * 100) - v1->unk_08) / 100;
v1->unk_0E = ((40 * 100) - v1->unk_0A) / 100;
Sound_PlayEffect(SEQ_SE_DP_SLIDEIN);
SysTask_Start(ov16_0226B988, v1, 1210);
v0 = SetHBlankCallback(ov16_0226BB94, v1);
GF_ASSERT(v0 == 1);
v1->unk_04 = SysTask_ExecuteOnVBlank(ov16_0226BA88, v1, 10);
}
static void ov16_02269654(UnkStruct_ov16_02268A14 *param0, int param1, int param2)
{
int v0 = param0->unk_1A.val1.unk_00;
ov16_02269668(param0, param1, param2);
ov16_02269550(param0, v0);
}
static void ov16_02269668(UnkStruct_ov16_02268A14 *param0, int param1, int param2)
{
Strbuf *v0, *v1, *v2, *v3;
MessageLoader *v4;
int v5;
UnkStruct_ov16_02269668 *v6 = &param0->unk_1A.val1;
v5 = v6->unk_00;
param0->unk_6C1 = v6->unk_08;
v4 = BattleSystem_MessageLoader(param0->battleSys);
param0->unk_66A = v5;
if (BattleSystem_BattleType(param0->battleSys) & BATTLE_TYPE_SAFARI) {
v0 = MessageLoader_GetNewStrbuf(v4, 931);
v1 = MessageLoader_GetNewStrbuf(v4, 932);
v2 = MessageLoader_GetNewStrbuf(v4, 933);
} else if (BattleSystem_BattleType(param0->battleSys) & BATTLE_TYPE_PAL_PARK) {
v0 = MessageLoader_GetNewStrbuf(v4, 1223);
v1 = MessageLoader_GetNewStrbuf(v4, 932);
v2 = MessageLoader_GetNewStrbuf(v4, 933);
} else {
v0 = MessageLoader_GetNewStrbuf(v4, 924);
v1 = MessageLoader_GetNewStrbuf(v4, 925);
v2 = MessageLoader_GetNewStrbuf(v4, 926);
}
if (param0->unk_6C1 == 1) {
v3 = MessageLoader_GetNewStrbuf(v4, 928);
param0->unk_66F = 1;
} else {
v3 = MessageLoader_GetNewStrbuf(v4, 927);
param0->unk_66F = 0;
}
ov16_0226A98C(param0, &param0->unk_4CC[0], v0, FONT_SUBSCREEN, TEXT_COLOR(1, 2, 3), 2, 20023, 128, 84, 1, NULL);
ov16_0226A98C(param0, &param0->unk_4CC[1], v1, FONT_SUBSCREEN, TEXT_COLOR(4, 5, 6), 2, 20023, 40, 170, 1, NULL);
ov16_0226A98C(param0, &param0->unk_4CC[2], v2, FONT_SUBSCREEN, TEXT_COLOR(7, 8, 9), 2, 20023, 216, 170, 1, NULL);
ov16_0226A98C(param0, &param0->unk_4CC[3], v3, FONT_SUBSCREEN, TEXT_COLOR(10, 11, 12), 2, 20023, 128, 178, 1, NULL);
Strbuf_Free(v0);
Strbuf_Free(v1);
Strbuf_Free(v2);
Strbuf_Free(v3);
if ((BattleSystem_BattleType(param0->battleSys) & (BATTLE_TYPE_SAFARI | BATTLE_TYPE_PAL_PARK)) == 0) {
Pokemon *v7;
ManagedSprite *v8;
int v9, v10;
v7 = BattleSystem_PartyPokemon(param0->battleSys, v6->unk_01, v6->unk_02);
ov16_0226A698(param0);
v8 = ov16_0226A7A4(param0, v7, v5, v6->unk_04, v6->unk_06, v6->unk_03);
FontOAM_GetXY(param0->unk_4CC[0].unk_00, &v9, &v10);
if (v5 == 4) {
v9 += param0->unk_4CC[0].unk_10 + 32 / 2;
} else {
v9 -= 32 / 2;
}
ManagedSprite_SetPositionXYWithSubscreenOffset(v8, v9, v10 - (((192 + 80) << FX32_SHIFT) >> FX32_SHIFT), (192 + 80) << FX32_SHIFT);
}
}
static void ov16_022698A8(UnkStruct_ov16_02268A14 *param0, int param1, int param2)
{
int v0 = param0->unk_1A.val1.unk_00;
ov16_022698BC(param0, param1, param2);
ov16_02269550(param0, v0);
}
static void ov16_022698BC(UnkStruct_ov16_02268A14 *param0, int param1, int param2)
{
int v0 = param0->unk_1A.val1.unk_00;
ov16_02269668(param0, param1, param2);
{
BgConfig *v1;
v1 = BattleSystem_BGL(param0->battleSys);
Bg_FillTilemapRect(v1, 4, 0x6000 / 0x20 - 1, 0, 0x10, 32, 8, 17);
Bg_ScheduleTilemapTransfer(v1, 5);
}
sub_020129D0(param0->unk_4CC[1].unk_00, 0);
sub_020129D0(param0->unk_4CC[2].unk_00, 0);
sub_020129D0(param0->unk_4CC[3].unk_00, 0);
}
static void ov16_02269924(UnkStruct_ov16_02268A14 *param0, int param1, int param2)
{
int v0 = param0->unk_1A.val1.unk_00;
ov16_02269938(param0, param1, param2);
ov16_02269550(param0, v0);
}
static void ov16_02269938(UnkStruct_ov16_02268A14 *param0, int param1, int param2)
{
int v0 = param0->unk_1A.val1.unk_00;
ov16_02269668(param0, param1, param2);
{
BgConfig *v1;
v1 = BattleSystem_BGL(param0->battleSys);
Bg_FillTilemapRect(v1, 4, 0x6000 / 0x20 - 1, 0, 0x10, 10, 8, 17);
Bg_FillTilemapRect(v1, 4, 0x6000 / 0x20 - 1, 0x16, 0x10, 10, 8, 17);
Bg_ScheduleTilemapTransfer(v1, 5);
}
sub_020129D0(param0->unk_4CC[1].unk_00, 0);
sub_020129D0(param0->unk_4CC[2].unk_00, 0);
}
static void ov16_022699AC(UnkStruct_ov16_02268A14 *param0, int param1, int param2)
{
UnkStruct_ov16_02260C00 *v0;
int i;
MessageLoader *messageLoader;
UnkStruct_ov16_0226ABD4 *v3;
TextColor textColor;
v0 = &param0->unk_1A.val2;
GF_ASSERT(v0 != NULL);
param0->unk_66A = v0->unk_10;
messageLoader = BattleSystem_MessageLoader(param0->battleSys);
v3 = ov16_0226ABD4(param0, v0->unk_10);
DrawMoveTypeIcons(param0);
{
ov16_0226A98C(param0, &param0->unk_4CC[0], NULL, FONT_SUBSCREEN, TEXT_COLOR(7, 8, 9), 3, 20023, 64, 46, 1, &v3->unk_28[0]);
ov16_0226A98C(param0, &param0->unk_4CC[1], NULL, FONT_SUBSCREEN, TEXT_COLOR(7, 8, 9), 3, 20023, 192, 46, 1, &v3->unk_28[1]);
ov16_0226A98C(param0, &param0->unk_4CC[2], NULL, FONT_SUBSCREEN, TEXT_COLOR(7, 8, 9), 3, 20023, 64, 110, 1, &v3->unk_28[2]);
ov16_0226A98C(param0, &param0->unk_4CC[3], NULL, FONT_SUBSCREEN, TEXT_COLOR(7, 8, 9), 3, 20023, 192, 110, 1, &v3->unk_28[3]);
}
{
for (i = 0; i < LEARNED_MOVES_MAX; i++) {
textColor = ov16_0226B924(v0->unk_08[i], v0->unk_0C[i]);
ov16_0226A98C(param0, &param0->unk_4CC[9 + i], NULL, FONT_SYSTEM, textColor, 4, 20023, Unk_ov16_022702D4[i][0], Unk_ov16_022702D4[i][1], 0, &v3->unk_78[i]);
ov16_0226A98C(param0, &param0->unk_4CC[5 + i], NULL, FONT_SYSTEM, textColor, 4, 20023, Unk_ov16_02270284[i][0], Unk_ov16_02270284[i][1], 0, &v3->unk_C8[i]);
}
}
{
Strbuf *v5;
v5 = MessageLoader_GetNewStrbuf(messageLoader, 929);
ov16_0226A98C(param0, &param0->unk_4CC[4], v5, FONT_SUBSCREEN, TEXT_COLOR(10, 11, 12), 2, 20023, 128, 178, 1, NULL);
Strbuf_Free(v5);
}
{
int moveType;
for (i = 0; i < LEARNED_MOVES_MAX; i++) {
if (v0->moveIDs[i] != 0) {
moveType = MoveTable_LoadParam(v0->moveIDs[i], MOVEATTRIBUTE_TYPE);
LoadMoveSelectPlttSlot(param0, moveType, i);
} else {
ov16_0226B088(param0, i);
break;
}
}
}
{
BgConfig *v7;
v7 = BattleSystem_BGL(param0->battleSys);
if (v0->moveIDs[0] == 0) {
sub_020129D0(param0->unk_4CC[0].unk_00, 0);
sub_020129D0(param0->unk_4CC[5].unk_00, 0);
sub_020129D0(param0->unk_4CC[9].unk_00, 0);
}
if (v0->moveIDs[1] == 0) {
sub_020129D0(param0->unk_4CC[1].unk_00, 0);
sub_020129D0(param0->unk_4CC[6].unk_00, 0);
sub_020129D0(param0->unk_4CC[10].unk_00, 0);
}
if (v0->moveIDs[2] == 0) {
sub_020129D0(param0->unk_4CC[2].unk_00, 0);
sub_020129D0(param0->unk_4CC[7].unk_00, 0);
sub_020129D0(param0->unk_4CC[11].unk_00, 0);
}
if (v0->moveIDs[3] == 0) {
sub_020129D0(param0->unk_4CC[3].unk_00, 0);
sub_020129D0(param0->unk_4CC[8].unk_00, 0);
sub_020129D0(param0->unk_4CC[12].unk_00, 0);
}
}
}
static void ov16_02269C7C(UnkStruct_ov16_02268A14 *param0, int param1, int param2)
{
MessageLoader *v0;
Strbuf *v1, *v2;
v0 = BattleSystem_MessageLoader(param0->battleSys);
v1 = MessageLoader_GetNewStrbuf(v0, 940);
v2 = MessageLoader_GetNewStrbuf(v0, 941);
ov16_0226A98C(param0, &param0->unk_4CC[0], v1, FONT_SUBSCREEN, TEXT_COLOR(1, 2, 3), 2, 20023, 128, 68, 1, NULL);
ov16_0226A98C(param0, &param0->unk_4CC[1], v2, FONT_SUBSCREEN, TEXT_COLOR(10, 11, 12), 2, 20023, 128, 140, 1, NULL);
Strbuf_Free(v1);
Strbuf_Free(v2);
}
static void ov16_02269D14(UnkStruct_ov16_02268A14 *param0, int param1, int param2)
{
MessageLoader *v0;
Strbuf *v1, *v2;
v0 = BattleSystem_MessageLoader(param0->battleSys);
v1 = MessageLoader_GetNewStrbuf(v0, 1181);
v2 = MessageLoader_GetNewStrbuf(v0, 1182);
ov16_0226A98C(param0, &param0->unk_4CC[0], v1, FONT_SUBSCREEN, TEXT_COLOR(1, 2, 3), 2, 20023, 128, 68, 1, NULL);
ov16_0226A98C(param0, &param0->unk_4CC[1], v2, FONT_SUBSCREEN, TEXT_COLOR(10, 11, 12), 2, 20023, 128, 140, 1, NULL);
Strbuf_Free(v1);
Strbuf_Free(v2);
}
static void ov16_02269DB0(UnkStruct_ov16_02268A14 *param0, int param1, int param2)
{
MessageLoader *v0;
Strbuf *v1, *v2, *v3, *v4;
StringTemplate *v5;
UnkStruct_ov16_022623F0 *v6 = &param0->unk_1A.val4;
v0 = BattleSystem_MessageLoader(param0->battleSys);
v5 = BattleSystem_StringTemplate(param0->battleSys);
v1 = MessageLoader_GetNewStrbuf(v0, 1186);
v2 = MessageLoader_GetNewStrbuf(v0, 1187);
v3 = Strbuf_Init(100, HEAP_ID_BATTLE);
v4 = Strbuf_Init(100, HEAP_ID_BATTLE);
StringTemplate_SetMoveName(v5, 0, v6->unk_00);
StringTemplate_Format(v5, v3, v1);
StringTemplate_Format(v5, v4, v2);
ov16_0226A98C(param0, &param0->unk_4CC[0], v3, FONT_SUBSCREEN, TEXT_COLOR(1, 2, 3), 2, 20023, 128, 68, 1, NULL);
ov16_0226A98C(param0, &param0->unk_4CC[1], v4, FONT_SUBSCREEN, TEXT_COLOR(10, 11, 12), 2, 20023, 128, 140, 1, NULL);
Strbuf_Free(v1);
Strbuf_Free(v2);
Strbuf_Free(v3);
Strbuf_Free(v4);
}
static void ov16_02269E94(UnkStruct_ov16_02268A14 *param0, int param1, int param2)
{
MessageLoader *v0;
Strbuf *v1;
G2S_SetBlendAlpha(GX_BLEND_PLANEMASK_BG1, GX_BLEND_BGALL, 31, 0);
v0 = BattleSystem_MessageLoader(param0->battleSys);
v1 = MessageLoader_GetNewStrbuf(v0, 1260);
{
BgConfig *v2;
NNSG2dScreenData *v3;
void *v4;
v4 = Graphics_GetScrnData(NARC_INDEX_BATTLE__GRAPHIC__PL_BATT_BG, 46, 1, &v3, 5);
MI_CpuCopy32(v3->rawData, param0->unk_3C[6], 0x800);
Heap_Free(v4);
v2 = BattleSystem_BGL(param0->battleSys);
Bg_LoadTilemapBuffer(v2, 4, param0->unk_3C[6], 0x800);
Bg_ScheduleTilemapTransfer(v2, 4);
}
{
BgConfig *v5 = BattleSystem_BGL(param0->battleSys);
MI_CpuClear32(param0->unk_3C[4], 0x800);
Bg_LoadTilemapBuffer(v5, 5, param0->unk_3C[4], 0x800);
Bg_ScheduleTilemapTransfer(v5, 5);
}
ov16_0226A98C(param0, &param0->unk_4CC[0], v1, FONT_SUBSCREEN, TEXT_COLOR(1, 2, 3), 2, 20023, 128, 178, 1, NULL);
Strbuf_Free(v1);
}
static void ov16_02269F68(UnkStruct_ov16_02268A14 *param0, int param1, int param2)
{
MessageLoader *v0;
Strbuf *v1, *v2, *v3, *v4;
StringTemplate *v5;
UnkStruct_ov16_022623F0 *v6 = &param0->unk_1A.val4;
v0 = BattleSystem_MessageLoader(param0->battleSys);
v5 = BattleSystem_StringTemplate(param0->battleSys);
v1 = MessageLoader_GetNewStrbuf(v0, 1217);
v2 = MessageLoader_GetNewStrbuf(v0, 1218);
v3 = Strbuf_Init(100, HEAP_ID_BATTLE);
v4 = Strbuf_Init(100, HEAP_ID_BATTLE);
StringTemplate_SetMoveName(v5, 0, v6->unk_00);
StringTemplate_Format(v5, v3, v1);
StringTemplate_Format(v5, v4, v2);
ov16_0226A98C(param0, &param0->unk_4CC[0], v3, FONT_SUBSCREEN, TEXT_COLOR(1, 2, 3), 2, 20023, 128, 68, 1, NULL);
ov16_0226A98C(param0, &param0->unk_4CC[1], v4, FONT_SUBSCREEN, TEXT_COLOR(10, 11, 12), 2, 20023, 128, 140, 1, NULL);
Strbuf_Free(v1);
Strbuf_Free(v2);
Strbuf_Free(v3);
Strbuf_Free(v4);
}
static void ov16_0226A04C(UnkStruct_ov16_02268A14 *param0, int param1, int param2)
{
MessageLoader *v0;
Strbuf *v1, *v2, *v3, *v4;
StringTemplate *v5;
UnkStruct_ov16_022623F0 *v6 = &param0->unk_1A.val4;
v0 = BattleSystem_MessageLoader(param0->battleSys);
v5 = BattleSystem_StringTemplate(param0->battleSys);
v1 = MessageLoader_GetNewStrbuf(v0, 1215);
v2 = MessageLoader_GetNewStrbuf(v0, 1216);
v3 = Strbuf_Init(100, HEAP_ID_BATTLE);
v4 = Strbuf_Init(100, HEAP_ID_BATTLE);
StringTemplate_SetMoveName(v5, 0, v6->unk_00);
StringTemplate_Format(v5, v3, v1);
StringTemplate_Format(v5, v4, v2);
ov16_0226A98C(param0, &param0->unk_4CC[0], v3, FONT_SUBSCREEN, TEXT_COLOR(1, 2, 3), 2, 20023, 128, 68, 1, NULL);
ov16_0226A98C(param0, &param0->unk_4CC[1], v4, FONT_SUBSCREEN, TEXT_COLOR(10, 11, 12), 2, 20023, 128, 140, 1, NULL);
Strbuf_Free(v1);
Strbuf_Free(v2);
Strbuf_Free(v3);
Strbuf_Free(v4);
}
static void ov16_0226A12C(UnkStruct_ov16_02268A14 *param0, int param1, int param2)
{
UnkStruct_ov16_02260F14 *v0;
int i;
MessageLoader *v2;
u8 v3[4];
Strbuf *v4, *v5;
Pokemon *v6;
BoxPokemon *v7;
StringTemplate *v8;
TextColor v9;
u8 v10[6];
u8 v11[6];
int v12;
v0 = &param0->unk_1A.val3;
param0->unk_66C = v0->unk_21;
param0->unk_66A = v0->unk_20;
v2 = BattleSystem_MessageLoader(param0->battleSys);
v8 = BattleSystem_StringTemplate(param0->battleSys);
ov16_0226B20C(param0, v3, 0);
ov16_0226A698(param0);
ov16_0226AAF8(param0);
ov16_0223F87C(param0->battleSys, v10);
ov16_0223F858(param0->battleSys, v11);
v4 = Strbuf_Init(12 + 2 + (5 * 2), HEAP_ID_BATTLE);
for (i = 0; i < 4; i++) {
v12 = v11[2 + i];
if ((v0->unk_00[v12].unk_01_2 == 1) && (v3[i] == 1)) {
if (v0->unk_00[v12].unk_01_0 == 0) {
v5 = MessageLoader_GetNewStrbuf(v2, 962);
} else if (v0->unk_00[v12].unk_01_0 == 1) {
v5 = MessageLoader_GetNewStrbuf(v2, 963);
} else {
v5 = MessageLoader_GetNewStrbuf(v2, 964);
}
v6 = BattleSystem_PartyPokemon(param0->battleSys, v12, v0->unk_00[v12].unk_00);
v7 = Pokemon_GetBoxPokemon(v6);
StringTemplate_SetNickname(v8, 0, v7);
StringTemplate_Format(v8, v4, v5);
if (i & 1) {
v9 = TEXT_COLOR(1, 2, 3);
} else {
v9 = TEXT_COLOR(4, 5, 6);
}
ov16_0226A98C(param0, &param0->unk_4CC[0 + i], v4, FONT_SUBSCREEN, v9, 6, 20023, Unk_ov16_02270328[i][0], Unk_ov16_02270328[i][1], 1, NULL);
Strbuf_Free(v5);
{
switch (i) {
case 1:
ov16_0226A7A4(param0, v6, 3, v0->unk_00[v12].unk_04, v0->unk_00[v12].unk_06, v0->unk_00[v12].unk_02);
break;
case 3:
ov16_0226A7A4(param0, v6, 5, v0->unk_00[v12].unk_04, v0->unk_00[v12].unk_06, v0->unk_00[v12].unk_02);
break;
}
}
} else {
if (v3[i] == 0) {
ov16_0226B0DC(param0, i);
}
}
}
Strbuf_Free(v4);
{
Strbuf *v13;
v13 = MessageLoader_GetNewStrbuf(v2, 930);
ov16_0226A98C(param0, &param0->unk_4CC[4], v13, FONT_SUBSCREEN, TEXT_COLOR(10, 11, 12), 2, 20023, Unk_ov16_02270328[4][0], Unk_ov16_02270328[4][1], 1, NULL);
Strbuf_Free(v13);
}
}
static int ov16_0226A318(UnkStruct_ov16_02268A14 *param0, int param1, int param2)
{
int v0, v1, v2;
v2 = 0xff;
switch (param1) {
case 0xffffffff:
default:
return param1;
case 1:
v0 = 0;
v1 = 0;
switch (param0->unk_66A) {
case 0:
v2 = param0->unk_66A;
break;
case 2:
case 4:
v2 = param0->unk_66A - 2;
break;
}
break;
case 2:
v0 = 1;
v1 = 1;
break;
case 3:
v0 = 2;
v1 = 1;
break;
case 4:
v0 = 3;
v1 = 1;
break;
}
ov16_0226B318(param0, param2);
ov16_0226B2BC(ov16_0226B390, param0);
param0->unk_67C.unk_04_val3.unk_00 = Unk_ov16_022703A4[param1 - 1];
param0->unk_67C.unk_04_val3.unk_04 = &Unk_ov16_022702F4[param1 - 1];
param0->unk_67C.unk_04_val3.unk_0C = 1;
param0->unk_67C.unk_04_val3.unk_08 = param1;
param0->unk_67C.unk_04_val3.unk_0D = v0;
param0->unk_67C.unk_04_val3.unk_0E = v2;
param0->unk_67C.unk_04_val3.unk_0F = v1;
param0->unk_67C.unk_04_val3.unk_11 = Unk_ov16_02270294[param1 - 1];
param0->unk_67C.unk_04_val3.unk_10 = 1;
return param1;
}
static int ov16_0226A3F4(UnkStruct_ov16_02268A14 *param0, int param1, int param2)
{
UnkStruct_ov16_02260C00 *v0;
u32 v1[2];
u32 v2;
const UnkStruct_ov16_0226A3F4 *v3[2];
const s16 *v4;
const UnkStruct_ov16_022702F4 *v5;
if (param1 == 0xffffffff) {
return param1;
}
v0 = &param0->unk_1A.val2;
if ((param1 >= 1) && (param1 <= 4)) {
if (v0->moveIDs[param1 - 1] == 0) {
return 0xffffffff;
}
}
v2 = param1 - 1;
switch (param1) {
case 0xffffffff:
default:
return 0xffffffff;
case 1:
case 2:
case 3:
case 4:
v4 = Unk_ov16_022703F4[param1 - 1];
v5 = &Unk_ov16_02270378[param1 - 1];
break;
case 0xff:
v4 = Unk_ov16_022703F4[NELEMS(Unk_ov16_022703F4) - 1];
v5 = &Unk_ov16_02270378[NELEMS(Unk_ov16_022703F4) - 1];
break;
}
ov16_0226B318(param0, param2);
ov16_0226B2BC(ov16_0226B4E0, param0);
param0->unk_67C.unk_04_val3.unk_00 = v4;
param0->unk_67C.unk_04_val3.unk_04 = v5;
param0->unk_67C.unk_04_val3.unk_0C = 3;
param0->unk_67C.unk_04_val3.unk_08 = param1;
param0->unk_67C.unk_04_val3.unk_10 = 1;
return param1;
}
static int ov16_0226A4A4(UnkStruct_ov16_02268A14 *param0, int param1, int param2)
{
int v0;
switch (param1) {
case 0xffffffff:
default:
return param1;
case 1:
v0 = 0;
break;
case 0xff:
v0 = 1;
break;
}
ov16_0226B318(param0, param2);
ov16_0226B2BC(ov16_0226B390, param0);
if (param1 == 1) {
param0->unk_67C.unk_04_val3.unk_00 = Unk_ov16_02270240[1];
param0->unk_67C.unk_04_val3.unk_04 = &Unk_ov16_0227021C[1];
} else {
param0->unk_67C.unk_04_val3.unk_00 = Unk_ov16_02270240[0];
param0->unk_67C.unk_04_val3.unk_04 = &Unk_ov16_0227021C[0];
}
param0->unk_67C.unk_04_val3.unk_0C = 6;
param0->unk_67C.unk_04_val3.unk_08 = param1;
param0->unk_67C.unk_04_val3.unk_0D = v0;
param0->unk_67C.unk_04_val3.unk_0F = 3;
param0->unk_67C.unk_04_val3.unk_10 = 1;
return param1;
}
static int ov16_0226A528(UnkStruct_ov16_02268A14 *param0, int param1, int param2)
{
UnkStruct_ov16_02260F14 *v0;
u8 v1[4];
v0 = &param0->unk_1A.val3;
ov16_0226B20C(param0, v1, 1);
switch (param1) {
case 0xffffffff:
default:
return param1;
case 1:
if (v1[2 - 2] == 0) {
return 0xffffffff;
}
break;
case 2:
if (v1[3 - 2] == 0) {
return 0xffffffff;
}
break;
case 3:
if (v1[4 - 2] == 0) {
return 0xffffffff;
}
break;
case 4:
if (v1[5 - 2] == 0) {
return 0xffffffff;
}
break;
case 0xff:
ov16_0226B318(param0, NELEMS(Unk_ov16_02270A0C) - 1);
ov16_0226B2BC(ov16_0226B390, param0);
param0->unk_67C.unk_04_val3.unk_00 = Unk_ov16_022703D4[NELEMS(Unk_ov16_022703D4) - 1];
param0->unk_67C.unk_04_val3.unk_04 = &Unk_ov16_0227033C[NELEMS(Unk_ov16_0227033C) - 1];
param0->unk_67C.unk_04_val3.unk_0C = 4;
param0->unk_67C.unk_04_val3.unk_08 = param1;
param0->unk_67C.unk_04_val3.unk_0D = 4;
param0->unk_67C.unk_04_val3.unk_0F = 3;
param0->unk_67C.unk_04_val3.unk_10 = 1;
return param1;
}
{
BgConfig *v2;
v2 = BattleSystem_BGL(param0->battleSys);
Bg_FillTilemap(v2, 5, 0x6000 / 0x20 - 1);
Bg_ScheduleTilemapTransfer(v2, 5);
}
ov16_0226B314(param0, param1);
ov16_0226B2BC(ov16_0226B780, param0);
param0->unk_67C.unk_04_val4.unk_1C = param1;
return param1;
}
static int ov16_0226A634(UnkStruct_ov16_02268A14 *param0, int param1, int param2)
{
switch (param1) {
case 0xffffffff:
default:
return param1;
case 1:
break;
}
ov16_0226B318(param0, param2);
ov16_0226B2BC(ov16_0226B390, param0);
param0->unk_67C.unk_04_val3.unk_00 = Unk_ov16_022701F4;
param0->unk_67C.unk_04_val3.unk_04 = &Unk_ov16_022701D0[0];
param0->unk_67C.unk_04_val3.unk_0C = 6;
param0->unk_67C.unk_04_val3.unk_08 = param1;
param0->unk_67C.unk_04_val3.unk_0D = 0;
param0->unk_67C.unk_04_val3.unk_0F = 3;
param0->unk_67C.unk_04_val3.unk_10 = 0;
return param1;
}
static void ov16_0226A698(UnkStruct_ov16_02268A14 *param0)
{
SpriteSystem *v0;
SpriteManager *v1;
int v2, v3, v4;
PaletteData *v5;
v0 = BattleSystem_GetSpriteSystem(param0->battleSys);
v1 = BattleSystem_GetSpriteManager(param0->battleSys);
v5 = BattleSystem_PaletteSys(param0->battleSys);
SpriteSystem_LoadPaletteBuffer(v5, 3, v0, v1, 19, PokeIconPalettesFileIndex(), 0, 3, NNS_G2D_VRAM_TYPE_2DSUB, 20022);
SpriteSystem_LoadCellResObj(v0, v1, 19, PokeIcon32KCellsFileIndex(), 0, 20021);
SpriteSystem_LoadAnimResObj(v0, v1, 19, PokeIcon32KAnimationFileIndex(), 0, 20021);
}
static void ov16_0226A718(UnkStruct_ov16_02268A14 *param0)
{
SpriteManager *v0 = BattleSystem_GetSpriteManager(param0->battleSys);
SpriteManager_UnloadCharObjById(v0, 20036);
SpriteManager_UnloadCharObjById(v0, 20037);
SpriteManager_UnloadCharObjById(v0, 20038);
SpriteManager_UnloadCellObjById(v0, 20021);
SpriteManager_UnloadAnimObjById(v0, 20021);
SpriteManager_UnloadPlttObjById(v0, 20022);
}
static void ov16_0226A768(UnkStruct_ov16_02268A14 *param0)
{
int i;
for (i = 0; i < 4; i++) {
if (param0->unk_60C[i] != NULL) {
Sprite_DeleteAndFreeResources(param0->unk_60C[i]);
param0->unk_60C[i] = NULL;
}
if (param0->unk_61C[i] != NULL) {
SysTask_Done(param0->unk_61C[i]);
param0->unk_61C[i] = NULL;
}
}
}
static ManagedSprite *ov16_0226A7A4(UnkStruct_ov16_02268A14 *param0, Pokemon *param1, int param2, int param3, int param4, int param5)
{
SpriteSystem *v0;
SpriteManager *v1;
u32 v2;
SpriteTemplate v3;
ManagedSprite *v4;
int v5;
if (param2 >= 2) {
v5 = param2 - 2;
} else {
v5 = param2;
}
GF_ASSERT(param0->unk_60C[v5] == NULL);
GF_ASSERT(param0->unk_61C[v5] == NULL);
switch (param2) {
case 0:
case 2:
case 4:
v2 = 20036;
break;
case 3:
v2 = 20037;
break;
case 5:
v2 = 20038;
break;
default:
GF_ASSERT(0);
return NULL;
}
v0 = BattleSystem_GetSpriteSystem(param0->battleSys);
v1 = BattleSystem_GetSpriteManager(param0->battleSys);
SpriteSystem_LoadCharResObj(v0, v1, NARC_INDEX_POKETOOL__ICONGRA__PL_POKE_ICON, Pokemon_IconSpriteIndex(param1), 0, NNS_G2D_VRAM_TYPE_2DSUB, v2);
v3 = Unk_ov16_022704B0;
v3.resources[0] = v2;
v3.x = Unk_ov16_02270304[v5][0];
v3.y = Unk_ov16_02270304[v5][1];
v4 = SpriteSystem_NewSprite(v0, v1, &v3);
ManagedSprite_SetPositionXYWithSubscreenOffset(v4, v3.x, v3.y, (192 + 80) << FX32_SHIFT);
Sprite_SetExplicitPaletteOffsetAutoAdjust(v4->sprite, Pokemon_IconPaletteIndex(param1));
{
int v6 = 0;
if ((param3 == 0) || (param5 == 2)) {
v6 = 0;
} else if (param5 == 3) {
v6 = 5;
} else {
switch (HealthBar_Color(param3, param4, 8 * 6)) {
case 4:
v6 = 1;
break;
case 3:
v6 = 2;
break;
case 2:
v6 = 3;
break;
case 1:
v6 = 4;
break;
}
ManagedSprite_SetAnim(v4, v6);
}
}
ManagedSprite_TickFrame(v4);
param0->unk_60C[v5] = v4;
param0->unk_61C[v5] = SysTask_Start(ov16_0226A928, v4, 1300);
return v4;
}
static void ov16_0226A928(SysTask *param0, void *param1)
{
ManagedSprite *v0 = param1;
ManagedSprite_TickFrame(v0);
}
static int ov16_0226A934(u8 param0)
{
int v0;
switch (param0) {
case 0:
default:
v0 = 0;
break;
case 1:
v0 = 1;
break;
case 2:
v0 = 3;
break;
case 3:
v0 = 2;
break;
}
return v0;
}
static void ov16_0226A95C(const Strbuf *param0, int param1, int *param2, int *param3)
{
int v0 = Font_CalcStrbufWidth(param1, param0, 0);
int v1 = v0 / 8;
if (FX_ModS32(v0, 8) != 0) {
v1++;
}
*param2 = v0;
*param3 = v1;
}
static void ov16_0226A98C(UnkStruct_ov16_02268A14 *param0, UnkStruct_ov16_0226A98C *param1, const Strbuf *param2, enum Font param3, TextColor param4, int param5, int param6, int param7, int param8, int param9, UnkStruct_ov16_0226AEA0 *param10)
{
UnkStruct_020127E8 v0;
Window v1;
CharTransferAllocation v2;
int v3;
FontOAM *v4;
BgConfig *v5;
SpriteManager *v6;
int v7, v8;
GF_ASSERT(param1->unk_00 == NULL);
v6 = BattleSystem_GetSpriteManager(param0->battleSys);
v5 = BattleSystem_BGL(param0->battleSys);
if (param10 == NULL) {
ov16_0226A95C(param2, param3, &v7, &v8);
} else {
v7 = param10->unk_12;
v8 = param10->unk_10;
}
if (param10 == NULL) {
Window_Init(&v1);
Window_AddToTopLeftCorner(v5, &v1, v8, 16 / 8, 0, 0);
Text_AddPrinterWithParamsColorAndSpacing(&v1, param3, param2, 0, 0, TEXT_SPEED_NO_TRANSFER, param4, 0, 0, NULL);
} else {
v1 = param10->unk_00;
}
v3 = sub_02012898(&v1, NNS_G2D_VRAM_TYPE_2DSUB, HEAP_ID_BATTLE);
CharTransfer_AllocRange(v3, 1, NNS_G2D_VRAM_TYPE_2DSUB, &v2);
if (param9 == 1) {
param7 -= v7 / 2;
}
param8 += (((192 + 80) << FX32_SHIFT) >> FX32_SHIFT) - 8;
v0.unk_00 = param0->unk_4C8;
v0.unk_04 = &v1;
v0.unk_08 = SpriteManager_GetSpriteList(v6);
v0.unk_0C = SpriteManager_FindPlttResourceProxy(v6, param6);
v0.unk_10 = NULL;
v0.unk_14 = v2.offset;
v0.unk_18 = param7;
v0.unk_1C = param8;
v0.unk_20 = 0;
v0.unk_24 = 100;
v0.unk_28 = NNS_G2D_VRAM_TYPE_2DSUB;
v0.heapID = HEAP_ID_BATTLE;
v4 = sub_020127E8(&v0);
sub_02012AC0(v4, param5);
FontOAM_SetXY(v4, param7, param8);
if (param10 == NULL) {
Window_Remove(&v1);
}
param1->unk_00 = v4;
param1->unk_04 = v2;
param1->unk_10 = v7;
}
static void ov16_0226AAC0(UnkStruct_ov16_02268A14 *param0)
{
int i;
for (i = 0; i < 13; i++) {
if (param0->unk_4CC[i].unk_00 != NULL) {
sub_02012870(param0->unk_4CC[i].unk_00);
CharTransfer_ClearRange(&param0->unk_4CC[i].unk_04);
param0->unk_4CC[i].unk_00 = NULL;
}
}
}
static void ov16_0226AAF8(UnkStruct_ov16_02268A14 *param0)
{
u8 v0[4], v1[4];
int j, i;
u16 *v4, *v5;
BgConfig *v6 = BattleSystem_BGL(param0->battleSys);
v4 = Bg_GetTilemapBuffer(v6, 5);
ov16_0226B20C(param0, v0, 0);
if (v0[0] == 1) {
ov16_0226B264(param0, 1, v1, 0);
if (v1[3 - 1] == 1) {
for (i = 12; i <= 16; i++) {
v5 = &v4[i * 32];
for (j = 0xf; j <= 0x10; j++) {
v5[j] = 0x2a4;
}
}
}
if (v1[4 - 1] == 1) {
for (i = 10; i <= 10; i++) {
v5 = &v4[i * 32];
for (j = 2; j <= 12; j++) {
v5[j] = 0x2a4;
}
}
}
}
if (v0[1] == 1) {
ov16_0226B264(param0, 2, v1, 0);
if (v1[3 - 1] == 1) {
for (i = 10; i <= 10; i++) {
v5 = &v4[i * 32];
for (j = 0x13; j <= 0x1d; j++) {
v5[j] = 0x2a4;
}
}
}
if (v1[4 - 1] == 1) {
for (i = 3; i <= 7; i++) {
v5 = &v4[i * 32];
for (j = 0xf; j <= 0x10; j++) {
v5[j] = 0x2a4;
}
}
}
}
}
static UnkStruct_ov16_0226ABD4 *ov16_0226ABD4(UnkStruct_ov16_02268A14 *param0, int param1)
{
if (param1 >= 2) {
param1 -= 2;
}
return &param0->unk_68[param1];
}
static void ov16_0226ABE8(UnkStruct_ov16_02268A14 *param0)
{
int j, i;
for (i = 0; i < 4; i++) {
for (j = 0; j < 4; j++) {
Heap_Free(param0->unk_68[i].moveIcons[j]);
if (param0->unk_68[i].unk_28[j].unk_00.pixels != NULL) {
Window_Remove(&param0->unk_68[i].unk_28[j].unk_00);
}
if (param0->unk_68[i].unk_78[j].unk_00.pixels != NULL) {
Window_Remove(&param0->unk_68[i].unk_78[j].unk_00);
}
if (param0->unk_68[i].unk_C8[j].unk_00.pixels != NULL) {
Window_Remove(&param0->unk_68[i].unk_C8[j].unk_00);
}
}
}
}
void ov16_0226AC98(UnkStruct_ov16_02268A14 *param0, int param1, const MoveDisplayInfo *param2)
{
UnkStruct_ov16_0226ABD4 *v0;
void *v1;
NNSG2dCharacterData *v2;
int i, v3, v5;
Strbuf *v6;
Strbuf *v7;
Strbuf *v8;
Strbuf *v9;
StringTemplate *v10;
TextColor v11;
MessageLoader *v12 = BattleSystem_MessageLoader(param0->battleSys);
v0 = ov16_0226ABD4(param0, param1);
v3 = sub_0208C098(6);
v9 = MessageLoader_GetNewStrbuf(v12, 938);
v10 = BattleSystem_StringTemplate(param0->battleSys);
v7 = Strbuf_Init((2 + 2 + 1 + 2) * 2 + 2, HEAP_ID_BATTLE);
v8 = MessageLoader_GetNewStrbuf(v12, 937);
for (i = 0; i < LEARNED_MOVES_MAX; i++) {
if ((param2->move[i] != v0->unk_00.move[i]) && (param2->move[i] != 0)) {
v5 = MoveTable_LoadParam(param2->move[i], MOVEATTRIBUTE_TYPE);
v1 = Graphics_GetCharData(TypeIcon_GetNARC(), TypeIcon_GetChar(v5), 1, &v2, HEAP_ID_BATTLE);
MI_CpuCopy32(v2->pRawData, v0->moveIcons[i], v3);
Heap_Free(v1);
}
if ((v0->unk_28[i].unk_00.pixels == NULL) || ((param2->move[i] != v0->unk_00.move[i]) && (param2->move[i] != 0))) {
v6 = MessageUtil_MoveName(param2->move[i], HEAP_ID_BATTLE);
ov16_0226AEA0(param0, v6, FONT_SUBSCREEN, &v0->unk_28[i], TEXT_COLOR(7, 8, 9));
Strbuf_Free(v6);
}
if ((v0->unk_78[i].unk_00.pixels == NULL) || (v0->unk_C8[i].unk_00.pixels == NULL) || (param2->move[i] != 0) || (param2->move[i] != v0->unk_00.move[i]) || (param2->curPP[i] != v0->unk_00.curPP[i]) || (param2->maxPP[i] != v0->unk_00.maxPP[i])) {
StringTemplate_SetNumber(v10, 0, param2->curPP[i], 2, 1, 0);
StringTemplate_SetNumber(v10, 1, param2->maxPP[i], 2, 1, 0);
StringTemplate_Format(v10, v7, v8);
v11 = ov16_0226B924(param2->curPP[i], param2->maxPP[i]);
if ((v0->unk_78[i].unk_00.pixels == NULL) || (param2->move[i] != v0->unk_00.move[i]) || (param2->curPP[i] != v0->unk_00.curPP[i])) {
ov16_0226AEA0(param0, v7, FONT_SYSTEM, &v0->unk_78[i], v11);
}
if ((v0->unk_C8[i].unk_00.pixels == NULL) || (param2->move[i] != v0->unk_00.move[i]) || (param2->curPP[i] != v0->unk_00.curPP[i])) {
ov16_0226AEA0(param0, v9, FONT_SYSTEM, &v0->unk_C8[i], v11);
}
}
}
Strbuf_Free(v9);
Strbuf_Free(v8);
Strbuf_Free(v7);
v0->unk_00 = *param2;
}
static void ov16_0226AEA0(UnkStruct_ov16_02268A14 *param0, const Strbuf *param1, enum Font param2, UnkStruct_ov16_0226AEA0 *param3, TextColor param4)
{
int v0, v1;
ov16_0226A95C(param1, param2, &v0, &v1);
param3->unk_12 = v0;
param3->unk_10 = v1;
if (param3->unk_00.pixels != NULL) {
Window_Remove(&param3->unk_00);
}
Window_Init(&param3->unk_00);
Window_AddToTopLeftCorner(BattleSystem_BGL(param0->battleSys), &param3->unk_00, v1, 16 / 8, 0, 0);
Text_AddPrinterWithParamsColorAndSpacing(&param3->unk_00, param2, param1, 0, 0, TEXT_SPEED_NO_TRANSFER, param4, 0, 0, NULL);
}
static void DrawMoveTypeIcons(UnkStruct_ov16_02268A14 *param0)
{
int i;
SpriteSystem *spriteSys;
SpriteManager *spriteMan;
SpriteTemplate spriteTemplate;
UnkStruct_ov16_02260C00 *v4;
int moveType;
int v6;
UnkStruct_ov16_0226ABD4 *v7;
v4 = &param0->unk_1A.val2;
spriteSys = BattleSystem_GetSpriteSystem(param0->battleSys);
spriteMan = BattleSystem_GetSpriteManager(param0->battleSys);
v7 = ov16_0226ABD4(param0, param0->unk_66A);
spriteTemplate = Unk_ov16_0227047C;
for (i = 0; i < LEARNED_MOVES_MAX; i++) {
GF_ASSERT(param0->moveSelectSprites[i] == NULL);
if (v4->moveIDs[i] != 0) {
moveType = MoveTable_LoadParam(v4->moveIDs[i], MOVEATTRIBUTE_TYPE);
spriteTemplate.resources[0] = 20025 + i;
spriteTemplate.x = Unk_ov16_022702B4[i][0];
spriteTemplate.y = Unk_ov16_022702B4[i][1];
param0->moveSelectSprites[i] = TypeIcon_NewTypeIconSprite(spriteSys, spriteMan, moveType, &spriteTemplate);
ManagedSprite_SetPositionXYWithSubscreenOffset(param0->moveSelectSprites[i], spriteTemplate.x, spriteTemplate.y, (192 + 80) << FX32_SHIFT);
{
void *v8;
NNSG2dImageProxy *v9;
v8 = G2S_GetOBJCharPtr();
v9 = Sprite_GetImageProxy(param0->moveSelectSprites[i]->sprite);
MI_CpuCopy16(v7->moveIcons[i], (void *)((u32)v8 + v9->vramLocation.baseAddrOfVram[NNS_G2D_VRAM_TYPE_2DSUB]), sub_0208C098(6));
}
}
}
}
static void ov16_0226AFF4(UnkStruct_ov16_02268A14 *param0)
{
int i;
SpriteSystem *v1 = BattleSystem_GetSpriteSystem(param0->battleSys);
SpriteManager *v2 = BattleSystem_GetSpriteManager(param0->battleSys);
for (i = 0; i < 4; i++) {
if (param0->moveSelectSprites[i] != NULL) {
TypeIcon_DeleteSprite(param0->moveSelectSprites[i]);
param0->moveSelectSprites[i] = NULL;
}
}
}
static void ov16_0226B028(UnkStruct_ov16_02268A14 *param0)
{
int i;
SpriteSystem *v1 = BattleSystem_GetSpriteSystem(param0->battleSys);
SpriteManager *v2 = BattleSystem_GetSpriteManager(param0->battleSys);
for (i = 0; i < 4; i++) {
if (param0->unk_5FC[i] != NULL) {
CategoryIcon_DeleteSprite(param0->unk_5FC[i]);
CategoryIcon_UnloadChar(v2, 20029 + i);
param0->unk_5FC[i] = NULL;
}
}
}
static void LoadMoveSelectPlttSlot(UnkStruct_ov16_02268A14 *param0, enum PokemonType moveType, int moveSlot)
{
LoadMoveSelectPltt(BattleSystem_PaletteSys(param0->battleSys), moveType, 5, PLTTBUF_SUB_BG, PLTT_8 + moveSlot);
}
static void ov16_0226B088(UnkStruct_ov16_02268A14 *param0, int param1)
{
PaletteData *paletteSys;
int i;
paletteSys = BattleSystem_PaletteSys(param0->battleSys);
for (i = param1; i < 4; i++) {
ov16_0226B31C(param0, &Unk_ov16_0227022C[i], &Unk_ov16_02270274[i], 3, 0);
PaletteData_LoadBuffer(paletteSys, &param0->unk_58[0xe * 16], 1, (8 + i) * 16, 0x20);
}
}
static void ov16_0226B0DC(UnkStruct_ov16_02268A14 *param0, int param1)
{
PaletteData *v0;
int v1;
const u8 v2[] = { 6, 0xc, 0xd, 5 };
BgConfig *v3 = BattleSystem_BGL(param0->battleSys);
v0 = BattleSystem_PaletteSys(param0->battleSys);
ov16_0226B31C(param0, &Unk_ov16_022701FC[param1], &Unk_ov16_022702C4[param1], 4, 0);
PaletteData_LoadBuffer(v0, &param0->unk_58[0xe * 16], 1, v2[param1] * 16, 0x20);
Bg_ScheduleTilemapTransfer(v3, 4);
Bg_FillTilemapRect(v3, 5, 0x6000 / 0x20 - 1, Unk_ov16_022702C4[param1].unk_02, Unk_ov16_022702C4[param1].unk_00, Unk_ov16_022702C4[param1].unk_03 - Unk_ov16_022702C4[param1].unk_02 + 1, Unk_ov16_022702C4[param1].unk_01 - Unk_ov16_022702C4[param1].unk_00 + 1, 17);
Bg_ScheduleTilemapTransfer(v3, 5);
}
static void ov16_0226B198(void)
{
int i;
for (i = 0; i < 4; i++) {
if (4 + i != 6) {
Bg_ToggleLayer(BG_LAYER_SUB_0 + i, 0);
} else {
Bg_ToggleLayer(BG_LAYER_SUB_0 + i, 1);
}
}
}
static void ov16_0226B1C4(UnkStruct_ov16_02268A14 *param0, int param1, int param2)
{
if (param1 == 1) {
ov16_0226B1E8(param0);
}
if (param2 == 1) {
SysTask_ExecuteAfterVBlank(ov16_0226BCBC, param0, 10);
}
}
static void ov16_0226B1E8(UnkStruct_ov16_02268A14 *param0)
{
ov16_0226AFF4(param0);
ov16_0226B028(param0);
ov16_0226AAC0(param0);
ov16_0226A718(param0);
ov16_0226A768(param0);
}
static void ov16_0226B20C(UnkStruct_ov16_02268A14 *param0, u8 *param1, int param2)
{
UnkStruct_ov16_02260F14 *v0;
int i;
u8 v2[6];
int v3;
v0 = &param0->unk_1A.val3;
ov16_0223F858(param0->battleSys, v2);
for (i = 0; i < 4; i++) {
v3 = v2[2 + i];
if ((param2 == 1) && (v0->unk_00[v3].unk_01_2 == 0)) {
param1[i] = 0;
} else {
param1[i] = Unk_ov16_022705B0[param0->unk_66C][i];
}
}
}
static void ov16_0226B264(UnkStruct_ov16_02268A14 *param0, int param1, u8 *param2, int param3)
{
UnkStruct_ov16_02260F14 *v0;
int i;
v0 = &param0->unk_1A.val3;
switch (param0->unk_66C) {
case 0:
case 8:
case 9:
case 10:
case 11:
for (i = 0; i < 4; i++) {
if (i == param1 - 1) {
param2[i] = 1;
} else {
param2[i] = 0;
}
}
break;
default:
ov16_0226B20C(param0, param2, param3);
break;
}
}
static void ov16_0226B2BC(SysTaskFunc param0, UnkStruct_ov16_02268A14 *param1)
{
GF_ASSERT(param1->unk_0C == NULL);
MI_CpuClear8(&param1->unk_67C, sizeof(UnkStruct_ov16_02268A14_sub3));
param1->unk_0C = SysTask_Start(param0, param1, 1300);
}
static void ov16_0226B2F0(UnkStruct_ov16_02268A14 *param0)
{
if (param0->unk_0C != NULL) {
SysTask_Done(param0->unk_0C);
param0->unk_0C = NULL;
MI_CpuClear8(&param0->unk_67C, sizeof(UnkStruct_ov16_02268A14_sub3));
}
}
static void inline_ov16_0226B314(SysTaskFunc param0, UnkStruct_ov16_02268A14 *param1)
{
GF_ASSERT(param1->unk_10 == NULL);
MI_CpuClear8(&param1->unk_6A0, sizeof(UnkStruct_ov16_02268A14_sub4));
param1->unk_10 = SysTask_Start(param0, param1, 1320);
}
static void inline_ov16_0226B318_1_sub(UnkStruct_ov16_02268A14 *param0)
{
if (param0->unk_10 != NULL) {
SysTask_Done(param0->unk_10);
param0->unk_10 = NULL;
MI_CpuClear8(&param0->unk_6A0, sizeof(UnkStruct_ov16_02268A14_sub4));
}
}
static void ov16_0226B314(UnkStruct_ov16_02268A14 *param0, int param1)
{
return;
inline_ov16_0226B314(inline_ov16_0226B314_1, param0);
param0->unk_6A0.unk_00 = param1;
}
static void ov16_0226B318(UnkStruct_ov16_02268A14 *param0, int param1)
{
return;
if (param1 == 0xff) {
return;
}
inline_ov16_0226B314(inline_ov16_0226B318_1, param0);
param0->unk_6A0.unk_09 = param1;
}
static void inline_ov16_0226B318_1(SysTask *param0, void *param1)
{
UnkStruct_ov16_02268A14 *v0 = param1;
UnkStruct_ov16_02268A14_sub4 *v1;
BgConfig *v2;
PaletteData *v3;
int v4, v5;
v1 = &v0->unk_6A0;
v3 = BattleSystem_PaletteSys(v0->battleSys);
v5 = 0;
switch (v1->unk_08) {
case 0:
v1->unk_04 = (10 << 8);
v1->unk_06 = -((10 << 8) / 2);
v1->unk_04 -= v1->unk_06;
v1->unk_08++;
case 1:
v1->unk_04 += v1->unk_06;
if ((v1->unk_06 >= 0) && (v1->unk_04 >= (16 << 8))) {
v1->unk_04 = 16 << 8;
v5 = 1;
} else if ((v1->unk_06 < 0) && (v1->unk_04 <= 0)) {
v1->unk_04 = 0;
v5 = 1;
}
PaletteData_Blend(v3, 1, v1->unk_09 * 16, 16, (v1->unk_04 >> 8) / 2, 0x7fff);
PaletteData_Blend(v3, 1, v1->unk_09 * 16 + 1, 1, v1->unk_04 >> 8, 0x7b1a);
PaletteData_Blend(v3, 1, v1->unk_09 * 16 + 0xa, 1, v1->unk_04 >> 8, 0x4634);
if (v5 == 1) {
inline_ov16_0226B318_1_sub(v0);
return;
}
break;
}
}
static void inline_ov16_0226B314_1(SysTask *param0, void *param1)
{
UnkStruct_ov16_02268A14 *v0 = param1;
UnkStruct_ov16_02268A14_sub4 *v1;
BgConfig *v2;
PaletteData *v3;
int i, v5;
u8 v6[4];
v1 = &v0->unk_6A0;
v3 = BattleSystem_PaletteSys(v0->battleSys);
v5 = 0;
switch (v1->unk_08) {
case 0:
v1->unk_04 = (10 << 8);
v1->unk_06 = -((10 << 8) / 2);
v1->unk_04 -= v1->unk_06;
v1->unk_08++;
case 1:
v1->unk_04 += v1->unk_06;
if ((v1->unk_06 >= 0) && (v1->unk_04 >= (16 << 8))) {
v1->unk_04 = 16 << 8;
v5 = 1;
} else if ((v1->unk_06 < 0) && (v1->unk_04 <= 0)) {
v1->unk_04 = 0;
v5 = 1;
}
ov16_0226B264(v0, v1->unk_00, v6, 1);
for (i = 0; i < 4; i++) {
if (v6[i] == 1) {
PaletteData_Blend(v3, 1, Unk_ov16_02270A0C[i] * 16, 16, (v1->unk_04 >> 8) / 2, 0x7fff);
PaletteData_Blend(v3, 1, Unk_ov16_02270A0C[i] * 16 + 1, 1, v1->unk_04 >> 8, 0x7b1a);
PaletteData_Blend(v3, 1, Unk_ov16_02270A0C[i] * 16 + 0xa, 1, v1->unk_04 >> 8, 0x4634);
}
}
if (v5 == 1) {
inline_ov16_0226B318_1_sub(v0);
return;
}
break;
}
}
static void ov16_0226B31C(UnkStruct_ov16_02268A14 *param0, const s16 *param1, const UnkStruct_ov16_022702F4 *param2, int param3, int param4)
{
int j, i;
BgConfig *v2;
u16 *v3, *v4;
u16 *v5, *v6;
int v7;
v2 = BattleSystem_BGL(param0->battleSys);
v3 = Bg_GetTilemapBuffer(v2, 4);
v5 = param0->unk_3C[param3];
v7 = param1[param4];
for (i = param2->unk_00; i <= param2->unk_01; i++) {
v4 = &v3[i * 32];
v6 = &v5[i * 32];
for (j = param2->unk_02; j <= param2->unk_03; j++) {
v4[j] = v6[j] + v7;
}
}
Bg_ScheduleTilemapTransfer(v2, 4);
}
static void ov16_0226B390(SysTask *param0, void *param1)
{
UnkStruct_ov16_02268A14 *v0 = param1;
BgConfig *v1;
int v2, v3;
v1 = BattleSystem_BGL(v0->battleSys);
switch (v0->unk_67C.unk_00) {
case 0:
ov16_0226B31C(v0, v0->unk_67C.unk_04_val3.unk_00, v0->unk_67C.unk_04_val3.unk_04, v0->unk_67C.unk_04_val3.unk_0C, 2);
FontOAM_GetXY(v0->unk_4CC[v0->unk_67C.unk_04_val3.unk_0D].unk_00, &v2, &v3);
FontOAM_SetXY(v0->unk_4CC[v0->unk_67C.unk_04_val3.unk_0D].unk_00, v2, v3 + -2);
if ((v0->unk_67C.unk_04_val3.unk_0E != 0xff) && (v0->unk_60C[v0->unk_67C.unk_04_val3.unk_0E] != NULL)) {
ManagedSprite_OffsetPositionXY(v0->unk_60C[v0->unk_67C.unk_04_val3.unk_0E], 0, -2);
}
v0->unk_67C.unk_00++;
break;
case 1:
v0->unk_67C.unk_02++;
if (v0->unk_67C.unk_02 <= 0) {
break;
}
v0->unk_67C.unk_02 = 0;
v0->unk_67C.unk_00++;
case 2:
ov16_0226B31C(v0, v0->unk_67C.unk_04_val3.unk_00, v0->unk_67C.unk_04_val3.unk_04, v0->unk_67C.unk_04_val3.unk_0C, 1);
FontOAM_GetXY(v0->unk_4CC[v0->unk_67C.unk_04_val3.unk_0D].unk_00, &v2, &v3);
FontOAM_SetXY(v0->unk_4CC[v0->unk_67C.unk_04_val3.unk_0D].unk_00, v2, v3 + 1);
if ((v0->unk_67C.unk_04_val3.unk_0E != 0xff) && (v0->unk_60C[v0->unk_67C.unk_04_val3.unk_0E] != NULL)) {
ManagedSprite_OffsetPositionXY(v0->unk_60C[v0->unk_67C.unk_04_val3.unk_0E], 0, 1);
}
v0->unk_67C.unk_00++;
break;
default:
v0->unk_67C.unk_02++;
if (v0->unk_67C.unk_02 > 0) {
ov16_0226B1C4(v0, v0->unk_67C.unk_04_val3.unk_10, 0);
ov16_0226B2F0(v0);
return;
}
break;
}
}
static void ov16_0226B4E0(SysTask *param0, void *param1)
{
UnkStruct_ov16_02268A14 *v0 = param1;
BgConfig *v1;
int v2, v3;
int v4, v5, v6;
int v7, v8, v9;
UnkStruct_ov16_02260C00 *v10;
v1 = BattleSystem_BGL(v0->battleSys);
v10 = &v0->unk_1A.val2;
switch (v0->unk_67C.unk_04_val3.unk_08) {
case 1:
v4 = 0;
v5 = 9;
v6 = 5;
v7 = 0;
v8 = 0;
v9 = v10->moveIDs[0];
break;
case 2:
v4 = 1;
v5 = 10;
v6 = 6;
v7 = 1;
v8 = 1;
v9 = v10->moveIDs[1];
break;
case 3:
v4 = 2;
v5 = 11;
v6 = 7;
v7 = 2;
v8 = 2;
v9 = v10->moveIDs[2];
break;
case 4:
v4 = 3;
v5 = 12;
v6 = 8;
v7 = 3;
v8 = 3;
v9 = v10->moveIDs[3];
break;
case 0xff:
default:
v4 = 0;
v5 = 0;
v6 = 0;
v7 = 0;
v8 = 0;
v9 = 0;
break;
}
switch (v0->unk_67C.unk_00) {
case 0:
ov16_0226B31C(v0, v0->unk_67C.unk_04_val3.unk_00, v0->unk_67C.unk_04_val3.unk_04, v0->unk_67C.unk_04_val3.unk_0C, 2);
if (v0->unk_67C.unk_04_val3.unk_08 != 0xff) {
FontOAM_GetXY(v0->unk_4CC[v4].unk_00, &v2, &v3);
FontOAM_SetXY(v0->unk_4CC[v4].unk_00, v2, v3 + -2);
FontOAM_GetXY(v0->unk_4CC[v5].unk_00, &v2, &v3);
FontOAM_SetXY(v0->unk_4CC[v5].unk_00, v2, v3 + -2);
FontOAM_GetXY(v0->unk_4CC[v6].unk_00, &v2, &v3);
FontOAM_SetXY(v0->unk_4CC[v6].unk_00, v2, v3 + -2);
if (v9 != 0) {
Sprite_OffsetPositionXY(v0->moveSelectSprites[v7]->sprite, 0, -2);
if (v0->unk_5FC[v7] != NULL) {
Sprite_OffsetPositionXY(v0->unk_5FC[v7]->sprite, 0, -2);
}
}
} else {
FontOAM_GetXY(v0->unk_4CC[4].unk_00, &v2, &v3);
FontOAM_SetXY(v0->unk_4CC[4].unk_00, v2, v3 + -2);
}
v0->unk_67C.unk_00++;
break;
case 1:
v0->unk_67C.unk_02++;
if (v0->unk_67C.unk_02 <= 0) {
break;
}
v0->unk_67C.unk_02 = 0;
v0->unk_67C.unk_00++;
case 2:
ov16_0226B31C(v0, v0->unk_67C.unk_04_val3.unk_00, v0->unk_67C.unk_04_val3.unk_04, v0->unk_67C.unk_04_val3.unk_0C, 1);
if (v0->unk_67C.unk_04_val3.unk_08 != 0xff) {
FontOAM_GetXY(v0->unk_4CC[v4].unk_00, &v2, &v3);
FontOAM_SetXY(v0->unk_4CC[v4].unk_00, v2, v3 + 1);
FontOAM_GetXY(v0->unk_4CC[v5].unk_00, &v2, &v3);
FontOAM_SetXY(v0->unk_4CC[v5].unk_00, v2, v3 + 1);
FontOAM_GetXY(v0->unk_4CC[v6].unk_00, &v2, &v3);
FontOAM_SetXY(v0->unk_4CC[v6].unk_00, v2, v3 + 1);
if (v9 != 0) {
Sprite_OffsetPositionXY(v0->moveSelectSprites[v7]->sprite, 0, 1);
if (v0->unk_5FC[v7] != NULL) {
Sprite_OffsetPositionXY(v0->unk_5FC[v7]->sprite, 0, 1);
}
}
} else {
FontOAM_GetXY(v0->unk_4CC[4].unk_00, &v2, &v3);
FontOAM_SetXY(v0->unk_4CC[4].unk_00, v2, v3 + 1);
}
v0->unk_67C.unk_00++;
break;
default:
v0->unk_67C.unk_02++;
if (v0->unk_67C.unk_02 > 0) {
ov16_0226B1C4(v0, 1, 1);
ov16_0226B2F0(v0);
return;
}
break;
}
}
static void ov16_0226B780(SysTask *param0, void *param1)
{
UnkStruct_ov16_02268A14 *v0 = param1;
BgConfig *v1;
int i, v2, v3;
u8 v4[4];
v1 = BattleSystem_BGL(v0->battleSys);
switch (v0->unk_67C.unk_00) {
case 0:
ov16_0226B264(v0, v0->unk_67C.unk_04_val4.unk_1C, v4, 1);
for (i = 0; i < 4; i++) {
if (v4[i] == 1) {
ov16_0226B31C(v0, Unk_ov16_022703D4[i], &Unk_ov16_0227033C[i], 4, 2);
if (v0->unk_4CC[0 + i].unk_00 != NULL) {
FontOAM_GetXY(v0->unk_4CC[0 + i].unk_00, &v2, &v3);
FontOAM_SetXY(v0->unk_4CC[0 + i].unk_00, v2, v3 + -2);
}
if (v0->unk_60C[i] != NULL) {
ManagedSprite_OffsetPositionXY(v0->unk_60C[i], 0, -2);
}
}
}
v0->unk_67C.unk_00++;
break;
case 1:
v0->unk_67C.unk_02++;
if (v0->unk_67C.unk_02 <= 0) {
break;
}
v0->unk_67C.unk_02 = 0;
v0->unk_67C.unk_00++;
case 2:
ov16_0226B264(v0, v0->unk_67C.unk_04_val4.unk_1C, v4, 1);
for (i = 0; i < 4; i++) {
if (v4[i] == 1) {
ov16_0226B31C(v0, Unk_ov16_022703D4[i], &Unk_ov16_0227033C[i], 4, 1);
if (v0->unk_4CC[0 + i].unk_00 != NULL) {
FontOAM_GetXY(v0->unk_4CC[0 + i].unk_00, &v2, &v3);
FontOAM_SetXY(v0->unk_4CC[0 + i].unk_00, v2, v3 + 1);
}
if (v0->unk_60C[i] != NULL) {
ManagedSprite_OffsetPositionXY(v0->unk_60C[i], 0, 1);
}
}
}
v0->unk_67C.unk_00++;
break;
case 3:
v0->unk_67C.unk_02++;
if (v0->unk_67C.unk_02 > 0) {
v0->unk_67C.unk_02 = 0;
v0->unk_67C.unk_00++;
}
break;
default:
ov16_0226B1C4(v0, 1, 1);
ov16_0226B2F0(v0);
return;
}
}
static TextColor ov16_0226B924(int param0, int param1)
{
if (param0 == 0) {
return TEXT_COLOR(7, 8, 0);
}
if (param1 == param0) {
return TEXT_COLOR(1, 2, 0);
}
if (param1 <= 2) {
if (param0 == 1) {
return TEXT_COLOR(5, 6, 0);
}
} else if (param1 <= 7) {
switch (param0) {
case 1:
return TEXT_COLOR(5, 6, 0);
case 2:
return TEXT_COLOR(3, 4, 0);
}
} else {
if (param0 <= param1 / 4) {
return TEXT_COLOR(5, 6, 0);
}
if (param0 <= param1 / 2) {
return TEXT_COLOR(3, 4, 0);
}
}
return TEXT_COLOR(1, 2, 0);
}
static void ov16_0226B988(SysTask *param0, void *param1)
{
UnkStruct_ov16_0226B988 *v0 = param1;
BgConfig *v1 = BattleSystem_BGL(v0->unk_00->battleSys);
switch (v0->unk_13) {
case 0:
v0->unk_08 += ((255 * 100) / 4);
v0->unk_0A -= ((40 * 100) / 4);
v0->unk_0C = ((255 * 100) - v0->unk_08) / 100;
v0->unk_0E = -v0->unk_0A / 100;
if ((v0->unk_08 >= 0) || (v0->unk_0A <= 0)) {
v0->unk_08 = 0;
v0->unk_0A = (18 * 8);
v0->unk_0C = 0 / 100;
v0->unk_0E = 0 / 100;
v0->unk_13++;
}
break;
case 1:
v0->unk_00->unk_66E = 0;
SysTask_Done(v0->unk_04);
DisableHBlank();
GXS_SetVisibleWnd(GX_WNDMASK_NONE);
ov16_0226BCCC(v0->unk_00, 1);
v0->unk_13++;
break;
default:
if (ov16_0226BCD0(v0->unk_00) == 0) {
break;
}
Bg_SetOffset(v1, BG_LAYER_SUB_0, 0, 0);
Bg_SetOffset(v1, BG_LAYER_SUB_0, 3, 0);
Bg_SetOffset(v1, BG_LAYER_SUB_1, 0, 0);
Bg_SetOffset(v1, BG_LAYER_SUB_1, 3, 0);
BattleSystem_SetCommandSelectionFlags(v0->unk_00->battleSys, 1);
Heap_Free(param1);
SysTask_Done(param0);
return;
}
}
static void ov16_0226BA88(SysTask *param0, void *param1)
{
UnkStruct_ov16_0226B988 *v0 = param1;
BgConfig *v1;
s32 v2, v3, v4;
v1 = BattleSystem_BGL(v0->unk_00->battleSys);
if (v0->unk_12 == 4) {
v4 = 255 - v0->unk_0C;
if (v4 > 0) {
v4 = 0;
}
Bg_SetOffset(v1, BG_LAYER_SUB_0, 0, v4);
Bg_SetOffset(v1, BG_LAYER_SUB_1, 0, 255 - v0->unk_0C);
v2 = -v0->unk_08 / 100;
} else {
v4 = v0->unk_0C;
if (v4 < 0) {
v4 = 0;
}
Bg_SetOffset(v1, BG_LAYER_SUB_0, 0, v4);
Bg_SetOffset(v1, BG_LAYER_SUB_1, 0, v0->unk_0C);
v2 = 255 + v0->unk_08 / 100;
}
Bg_SetOffset(v1, BG_LAYER_SUB_0, 3, 0);
Bg_SetOffset(v1, BG_LAYER_SUB_1, 3, 0);
v3 = (18 * 8) + (v0->unk_0A) / 100;
if (v2 < 0) {
v2 = 0;
} else if (v2 > 255) {
v2 = 255;
}
if (v3 > 192) {
v3 = 192;
} else if (v3 < 0) {
v3 = 0;
}
if (v0->unk_12 == 4) {
G2S_SetWnd0Position(0, 0, v2, 18 * 8);
} else {
if (v2 == 0) {
v2 = 1;
}
G2S_SetWnd0Position(v2, 0, 0, 18 * 8);
}
G2S_SetWnd1Position(0, 18 * 8, 255, v3);
v0->unk_10 = v0->unk_0E;
}
static void ov16_0226BB94(void *param0)
{
UnkStruct_ov16_0226B988 *v0 = param0;
s32 v1, v2;
v1 = GX_GetVCount();
if (v1 == (18 * 8)) {
BgConfig *v3 = BattleSystem_BGL(v0->unk_00->battleSys);
Bg_SetOffset(v3, BG_LAYER_SUB_0, 0, 0);
Bg_SetOffset(v3, BG_LAYER_SUB_0, 3, v0->unk_10);
Bg_SetOffset(v3, BG_LAYER_SUB_1, 0, 0);
Bg_SetOffset(v3, BG_LAYER_SUB_1, 3, v0->unk_10);
} else if (v1 > 192) {
BgConfig *v4 = BattleSystem_BGL(v0->unk_00->battleSys);
if (v0->unk_12 == 4) {
v2 = 255 - v0->unk_0C;
if (v2 > 0) {
v2 = 0;
}
Bg_SetOffset(v4, BG_LAYER_SUB_0, 0, 255 - v0->unk_0C);
Bg_SetOffset(v4, BG_LAYER_SUB_1, 0, 255 - v0->unk_0C);
} else {
v2 = v0->unk_0C;
if (v2 < 0) {
v2 = 0;
}
Bg_SetOffset(v4, BG_LAYER_SUB_0, 0, v0->unk_0C);
Bg_SetOffset(v4, BG_LAYER_SUB_1, 0, v0->unk_0C);
}
Bg_SetOffset(v4, BG_LAYER_SUB_0, 3, 0);
Bg_SetOffset(v4, BG_LAYER_SUB_1, 3, 0);
}
}
static void ov16_0226BC50(SysTask *param0, void *param1)
{
UnkStruct_ov16_02268A14 *v0 = param1;
const UnkStruct_ov16_02270670 *v1;
int i;
v1 = &Unk_ov16_02270670[v0->unk_66B];
for (i = 0; i < 4; i++) {
if (v1->unk_04_val2[i] == 0xffff) {
Bg_ToggleLayer(BG_LAYER_SUB_0 + i, 0);
} else {
Bg_ToggleLayer(BG_LAYER_SUB_0 + i, 1);
}
}
for (i = 0; i < 4; i++) {
Bg_SetPriority(BG_LAYER_SUB_0 + i, v1->unk_0C_val2[i]);
}
SysTask_Done(param0);
}
static void ov16_0226BCBC(SysTask *param0, void *param1)
{
UnkStruct_ov16_02268A14 *v0 = param1;
ov16_0226B198();
SysTask_Done(param0);
}
void ov16_0226BCCC(UnkStruct_ov16_02268A14 *param0, int param1)
{
return;
}
BOOL ov16_0226BCD0(UnkStruct_ov16_02268A14 *param0)
{
if (param0->unk_664 == NULL) {
return 1;
}
return 0;
}
static void ov16_0226BCE4(SysTask *param0, void *param1)
{
UnkStruct_ov16_02268A14 *v0 = param1;
int v1;
u16 v2;
PaletteData *v3;
s16 v4;
v3 = BattleSystem_PaletteSys(v0->battleSys);
if (PaletteData_GetSelectedBuffersMask(v3) != 0) {
return;
}
{
PaletteData_Blend(v3, 1, 16 * 0 + 1, 1, v0->unk_676 >> 8, 0x7e37);
if (v0->unk_674 == 0) {
v0->unk_676 += 0x200;
} else {
v0->unk_676 -= 0x200;
}
if (v0->unk_676 >= (16 + 1) << 8) {
v0->unk_676 = (16 - 1) << 8;
v0->unk_674 = 1;
} else if (v0->unk_676 <= 0) {
v0->unk_676 = 1 << 8;
v0->unk_674 = 0;
}
}
}
static void ov16_0226BD74(SysTask *param0, void *param1)
{
UnkStruct_ov16_02268A14 *v0 = param1;
PaletteData *v1;
u16 *v2;
int v3;
int v4 = RenderControlFlags_GetSpeedUpBattle();
int v5 = RenderControlFlags_GetWaitBattle();
RenderControlFlags_ZeroSpeedUpBattle();
RenderControlFlags_ZeroWaitBattle();
v1 = BattleSystem_PaletteSys(v0->battleSys);
if (PaletteData_GetSelectedBuffersMask(v1) != 0) {
return;
}
v2 = PaletteData_GetFadedBuffer(v1, 1);
v3 = (16 - 8) * 2;
if (gSystem.touchHeld && ((v4 == 1) || (v5 == 1))) {
if (memcmp(&v2[8], &v0->unk_5C[8], v3) == 0) {
if (BattleSystem_BattleType(v0->battleSys) & BATTLE_TYPE_FRONTIER) {
MI_CpuCopy16(&v0->unk_60[0], &v2[0], 0x20);
MI_CpuCopy16(&v0->unk_60[16], &v2[7 * 16], 0x20);
} else {
MI_CpuCopy16(&v0->unk_60[8], &v2[8], v3);
}
}
} else {
if (memcmp(&v2[8], &v0->unk_60[8], v3) == 0) {
if (BattleSystem_BattleType(v0->battleSys) & BATTLE_TYPE_FRONTIER) {
MI_CpuCopy16(&v0->unk_5C[0], &v2[0], 0x20);
MI_CpuCopy16(&v0->unk_5C[16], &v2[7 * 16], 0x20);
} else {
MI_CpuCopy16(&v0->unk_5C[8], &v2[8], v3);
}
}
}
}
static int ov16_0226BE48(UnkStruct_ov16_02268A14 *param0)
{
UnkStruct_ov16_0226CB10 *v0;
const UnkStruct_ov16_02270670 *v1;
v0 = &param0->unk_6BC;
v1 = &Unk_ov16_02270670[param0->unk_66B];
if (v1->unk_20 == NULL) {
return 0xffffffff;
}
if (v0->unk_00 == 0) {
if ((param0->unk_6C0 == 1) || (gSystem.pressedKeys & (PAD_BUTTON_A | PAD_BUTTON_B | PAD_BUTTON_X | PAD_BUTTON_Y | PAD_KEY_RIGHT | PAD_KEY_LEFT | PAD_KEY_UP | PAD_KEY_DOWN))) {
if (param0->unk_6C0 == 0) {
Sound_PlayEffect(SEQ_SE_CONFIRM);
}
v0->unk_00 = 1;
param0->unk_6C0 = 0;
v1->unk_20(param0, 1);
}
return 0xffffffff;
}
return v1->unk_20(param0, 0);
}
static int ov16_0226BEC0(UnkStruct_ov16_02268A14 *param0, int param1)
{
UnkStruct_ov16_0226CB10 *v0;
u32 v1;
const UnkStruct_ov16_02270670 *v2;
int i, v4, v5;
UnkStruct_ov16_0226C378 *v6;
v0 = &param0->unk_6BC;
v2 = &Unk_ov16_02270670[param0->unk_66B];
v5 = BattleSystem_BattlerOfType(param0->battleSys, param0->unk_66A);
v6 = ov16_02263B0C(BattleSystem_BattlerData(param0->battleSys, v5));
if (param1 == 1) {
v0->unk_02 = v6->unk_00;
v0->unk_01 = v6->unk_01;
v4 = Unk_ov16_022701EC[v0->unk_01][v0->unk_02];
ov16_0226DD9C(param0->unk_6B8, v2->unk_14[v4].rect.left + 8, v2->unk_14[v4].rect.right - 8, v2->unk_14[v4].rect.top + 8, v2->unk_14[v4].rect.bottom - 8, (192 + 80) << FX32_SHIFT);
return 0xffffffff;
}
switch (param0->unk_66B) {
case 6:
case 5:
v1 = ov16_0226CB10(v0, 1, 1, Unk_ov16_022701EC[0]);
break;
default:
v4 = Unk_ov16_022701EC[v0->unk_01][v0->unk_02];
if ((v4 == 3) && (gSystem.pressedKeys & PAD_KEY_UP)) {
(void)0;
} else {
v1 = ov16_0226CB10(v0, 3, 2, Unk_ov16_022701EC[0]);
if ((v1 == 0) && (v4 == 0)) {
if (gSystem.pressedKeys & PAD_KEY_LEFT) {
v0->unk_02 = 0;
v0->unk_01 = 1;
Sound_PlayEffect(SEQ_SE_CONFIRM);
v1 = PAD_KEY_LEFT;
} else if (gSystem.pressedKeys & PAD_KEY_RIGHT) {
v0->unk_02 = 2;
v0->unk_01 = 1;
Sound_PlayEffect(SEQ_SE_CONFIRM);
v1 = PAD_KEY_RIGHT;
}
}
}
break;
}
switch (v1) {
case PAD_KEY_UP:
case PAD_KEY_DOWN:
case PAD_KEY_LEFT:
case PAD_KEY_RIGHT:
v4 = Unk_ov16_022701EC[v0->unk_01][v0->unk_02];
ov16_0226DD9C(param0->unk_6B8, v2->unk_14[v4].rect.left + 8, v2->unk_14[v4].rect.right - 8, v2->unk_14[v4].rect.top + 8, v2->unk_14[v4].rect.bottom - 8, (192 + 80) << FX32_SHIFT);
break;
case PAD_BUTTON_A:
return Unk_ov16_022701EC[v0->unk_01][v0->unk_02];
case PAD_BUTTON_B:
if (param0->unk_66F == 1) {
for (i = 0; i < v2->unk_14[i].rect.top != 0xff; i++) {
if (4 == v2->unk_18[i]) {
return i;
}
}
}
break;
}
return 0xffffffff;
}
static void ov16_0226C0A0(UnkStruct_ov16_02268A14 *param0, int param1)
{
UnkStruct_ov16_0226C378 *v0;
int v1, j, i;
v1 = BattleSystem_BattlerOfType(param0->battleSys, param0->unk_66A);
if ((param1 != 3) || (param0->unk_6C1 == 0)) {
v0 = ov16_02263B0C(BattleSystem_BattlerData(param0->battleSys, v1));
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++) {
if (param1 == Unk_ov16_022701EC[i][j]) {
v0->unk_00 = j;
v0->unk_01 = i;
return;
}
}
}
}
}
static int ov16_0226C100(UnkStruct_ov16_02268A14 *param0, int param1)
{
UnkStruct_ov16_0226CB10 *v0;
u32 v1;
const UnkStruct_ov16_02270670 *v2;
int v3, v4;
v0 = &param0->unk_6BC;
v2 = &Unk_ov16_02270670[param0->unk_66B];
if (param1 == 1) {
v0->unk_02 = 0;
v0->unk_01 = 0;
v4 = Unk_ov16_022701CC[v0->unk_01][v0->unk_02];
ov16_0226DD9C(param0->unk_6B8, v2->unk_14[v4].rect.left + 8, v2->unk_14[v4].rect.right - 8, v2->unk_14[v4].rect.top + 8, v2->unk_14[v4].rect.bottom - 8, (192 + 80) << FX32_SHIFT);
return 0xffffffff;
}
v1 = ov16_0226CB10(v0, 1, 2, Unk_ov16_022701CC[0]);
switch (v1) {
case PAD_KEY_UP:
case PAD_KEY_DOWN:
case PAD_KEY_LEFT:
case PAD_KEY_RIGHT:
v4 = Unk_ov16_022701CC[v0->unk_01][v0->unk_02];
ov16_0226DD9C(param0->unk_6B8, v2->unk_14[v4].rect.left + 8, v2->unk_14[v4].rect.right - 8, v2->unk_14[v4].rect.top + 8, v2->unk_14[v4].rect.bottom - 8, (192 + 80) << FX32_SHIFT);
break;
case PAD_BUTTON_A:
return Unk_ov16_022701CC[v0->unk_01][v0->unk_02];
case PAD_BUTTON_B:
break;
}
return 0xffffffff;
}
static int ov16_0226C1F8(UnkStruct_ov16_02268A14 *param0, int param1)
{
UnkStruct_ov16_0226CB10 *v0;
u32 v1;
const UnkStruct_ov16_02270670 *v2;
int v3, i;
u8 v5[3][2];
UnkStruct_ov16_02260C00 *v6;
UnkStruct_ov16_0226C378 *v7 = ov16_02263B0C(BattleSystem_BattlerData(param0->battleSys, BattleSystem_BattlerOfType(param0->battleSys, param0->unk_66A)));
v0 = &param0->unk_6BC;
v2 = &Unk_ov16_02270670[param0->unk_66B];
v6 = &param0->unk_1A.val2;
if (param1 == 1) {
v0->unk_02 = v7->unk_02;
v0->unk_01 = v7->unk_03;
v3 = Unk_ov16_022701E4[v0->unk_01][v0->unk_02];
if ((v3 != 0) && (v6->moveIDs[v3 - 1] == 0)) {
v7->unk_02 = 0;
v7->unk_03 = 0;
v0->unk_02 = 0;
v0->unk_01 = 0;
v3 = Unk_ov16_022701E4[v0->unk_01][v0->unk_02];
}
ov16_0226DD9C(param0->unk_6B8, v2->unk_14[v3].rect.left + 8, v2->unk_14[v3].rect.right - 8, v2->unk_14[v3].rect.top + 8, v2->unk_14[v3].rect.bottom - 8, (192 + 80) << FX32_SHIFT);
return 0xffffffff;
}
MI_CpuCopy8(Unk_ov16_022701E4, v5, 3 * 2);
v1 = ov16_0226CB10(v0, 2, 3, v5[0]);
switch (v1) {
case PAD_KEY_UP:
case PAD_KEY_DOWN:
case PAD_KEY_LEFT:
case PAD_KEY_RIGHT:
v3 = Unk_ov16_022701E4[v0->unk_01][v0->unk_02];
ov16_0226DD9C(param0->unk_6B8, v2->unk_14[v3].rect.left + 8, v2->unk_14[v3].rect.right - 8, v2->unk_14[v3].rect.top + 8, v2->unk_14[v3].rect.bottom - 8, (192 + 80) << FX32_SHIFT);
break;
case PAD_BUTTON_A:
return Unk_ov16_022701E4[v0->unk_01][v0->unk_02];
case PAD_BUTTON_B:
for (i = 0; i < v2->unk_14[i].rect.top != 0xff; i++) {
if (0xff == v2->unk_18[i]) {
return i;
}
}
break;
}
return 0xffffffff;
}
static void ov16_0226C378(UnkStruct_ov16_02268A14 *param0, int param1)
{
UnkStruct_ov16_0226C378 *v0;
int v1, j, i;
if (param1 == 0) {
return;
}
v1 = BattleSystem_BattlerOfType(param0->battleSys, param0->unk_66A);
v0 = ov16_02263B0C(BattleSystem_BattlerData(param0->battleSys, v1));
for (i = 0; i < 3; i++) {
for (j = 0; j < 2; j++) {
if (param1 == Unk_ov16_022701E4[i][j]) {
v0->unk_02 = j;
v0->unk_03 = i;
return;
}
}
}
}
static int ov16_0226C3C8(UnkStruct_ov16_02268A14 *param0, int param1)
{
UnkStruct_ov16_0226CB10 *v0;
u32 v1;
const UnkStruct_ov16_02270670 *v2;
int v3, v4;
int v5 = 0;
u8 v6[4], v7[4];
u8 v8[3][2];
int i, j, v11, v12;
int v13, v14, v15, v16, v17, v18;
int v19, v20, v21, v22;
int v23, v24, v25, v26;
int v27, v28;
int v29;
UnkStruct_ov16_0226C378 *v30 = ov16_02263B0C(BattleSystem_BattlerData(param0->battleSys, BattleSystem_BattlerOfType(param0->battleSys, param0->unk_66A)));
v0 = &param0->unk_6BC;
v2 = &Unk_ov16_02270670[param0->unk_66B];
MI_CpuCopy8(Unk_ov16_022701DC, v8, 3 * 2);
ov16_0226B20C(param0, v6, 1);
ov16_0226B20C(param0, v7, 0);
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++) {
if (v7[v8[i][j]] == 0) {
v8[i][j] = 0xff;
}
}
}
switch (param0->unk_66C) {
default:
case 0:
case 4:
case 6:
case 8:
case 9:
case 10:
case 11:
v11 = 2;
v12 = 3;
break;
case 1:
case 2:
case 3:
case 5:
case 7:
v5 = 1;
v11 = 1;
v12 = 2;
if ((v7[5 - 2] == 1) && (v7[3 - 2] == 1)) {
v21 = v2->unk_14[3].rect.left + 8;
v22 = v2->unk_14[1].rect.right - 8;
v19 = v2->unk_14[3].rect.top + 8;
v20 = v2->unk_14[3].rect.bottom - 8;
} else if ((v7[5 - 2] == 1) && (v7[3 - 2] == 0)) {
v21 = v2->unk_14[3].rect.left + 8;
v22 = v2->unk_14[3].rect.right - 8;
v19 = v2->unk_14[3].rect.top + 8;
v20 = v2->unk_14[3].rect.bottom - 8;
} else if ((v7[5 - 2] == 0) && (v7[3 - 2] == 1)) {
v21 = v2->unk_14[1].rect.left + 8;
v22 = v2->unk_14[1].rect.right - 8;
v19 = v2->unk_14[1].rect.top + 8;
v20 = v2->unk_14[1].rect.bottom - 8;
} else {
v21 = -1;
v22 = -1;
v19 = -1;
v20 = -1;
}
if ((v7[2 - 2] == 1) && (v7[4 - 2] == 1)) {
v25 = v2->unk_14[0].rect.left + 8;
v26 = v2->unk_14[2].rect.right - 8;
v23 = v2->unk_14[0].rect.top + 8;
v24 = v2->unk_14[0].rect.bottom - 8;
} else if ((v7[2 - 2] == 1) && (v7[4 - 2] == 0)) {
v25 = v2->unk_14[0].rect.left + 8;
v26 = v2->unk_14[0].rect.right - 8;
v23 = v2->unk_14[0].rect.top + 8;
v24 = v2->unk_14[0].rect.bottom - 8;
} else if ((v7[2 - 2] == 0) && (v7[4 - 2] == 1)) {
v25 = v2->unk_14[2].rect.left + 8;
v26 = v2->unk_14[2].rect.right - 8;
v23 = v2->unk_14[2].rect.top + 8;
v24 = v2->unk_14[2].rect.bottom - 8;
} else {
v25 = -1;
v26 = -1;
v23 = -1;
v24 = -1;
}
v17 = -1;
v18 = -1;
v27 = -1;
v28 = -1;
if (v21 == v25) {
v13 = v21;
} else if ((v21 != -1) && (v25 == -1)) {
v13 = v21;
} else if ((v21 == -1) && (v25 != -1)) {
v13 = v25;
} else {
v13 = v21;
v17 = v25;
v29 = 2;
}
if (v22 == v26) {
v14 = v22;
} else if ((v22 != -1) && (v26 == -1)) {
v14 = v22;
} else if ((v22 == -1) && (v26 != -1)) {
v14 = v26;
} else {
v14 = v22;
v17 = v26;
v29 = 3;
}
if ((v19 != -1) && (v23 == -1)) {
v15 = v19;
} else if ((v19 == -1) && (v23 != -1)) {
v15 = v23;
} else {
v15 = v19;
v18 = v20;
}
if ((v20 != -1) && (v24 == -1)) {
v16 = v20;
} else if ((v20 == -1) && (v24 != -1)) {
v16 = v24;
} else {
v16 = v24;
v18 = v24;
if (v29 == 2) {
v28 = v20;
} else {
v27 = v20;
}
}
break;
}
if (param1 == 1) {
if (v5 == 0) {
if (v30->unk_06 == param0->unk_66C) {
v0->unk_02 = v30->unk_04;
v0->unk_01 = v30->unk_05;
} else if (v6[5 - 2] == 1) {
v0->unk_02 = 0;
v0->unk_01 = 0;
} else if (v6[3 - 2] == 1) {
v0->unk_02 = 1;
v0->unk_01 = 0;
} else if (v6[2 - 2] == 1) {
v0->unk_02 = 0;
v0->unk_01 = 1;
} else {
v0->unk_02 = 1;
v0->unk_01 = 1;
}
v4 = Unk_ov16_022701DC[v0->unk_01][v0->unk_02];
ov16_0226DD9C(param0->unk_6B8, v2->unk_14[v4].rect.left + 8, v2->unk_14[v4].rect.right - 8, v2->unk_14[v4].rect.top + 8, v2->unk_14[v4].rect.bottom - 8, (192 + 80) << FX32_SHIFT);
} else {
v0->unk_02 = 0;
v0->unk_01 = 0;
if (((v28 == -1) && (v27 == -1)) || (v17 == -1)) {
ov16_0226DD9C(param0->unk_6B8, v13, v14, v15, v16, (192 + 80) << FX32_SHIFT);
} else if ((v28 != -1) && (v27 == -1)) {
ov16_0226DCCC(param0->unk_6B8, v13, v15, v14, v15, v13, v28, v14, v16, (192 + 80) << FX32_SHIFT);
} else {
ov16_0226DCCC(param0->unk_6B8, v13, v15, v14, v15, v13, v16, v14, v27, (192 + 80) << FX32_SHIFT);
}
if (v17 != -1) {
ov16_0226DDC0(param0->unk_6B8, v17, v18, v29, (192 + 80) << FX32_SHIFT);
}
}
return 0xffffffff;
}
if (v5 == 0) {
v1 = ov16_0226CB10(v0, v11, v12, v8[0]);
} else {
v1 = ov16_0226CB10(v0, v11, v12, NULL);
}
switch (v1) {
case PAD_KEY_UP:
case PAD_KEY_DOWN:
case PAD_KEY_LEFT:
case PAD_KEY_RIGHT:
if (v5 == 0) {
v4 = Unk_ov16_022701DC[v0->unk_01][v0->unk_02];
ov16_0226DD9C(param0->unk_6B8, v2->unk_14[v4].rect.left + 8, v2->unk_14[v4].rect.right - 8, v2->unk_14[v4].rect.top + 8, v2->unk_14[v4].rect.bottom - 8, (192 + 80) << FX32_SHIFT);
} else {
if (v0->unk_01 == 0) {
if (((v27 == -1) && (v28 == -1)) || (v17 == -1)) {
ov16_0226DD9C(param0->unk_6B8, v13, v14, v15, v16, (192 + 80) << FX32_SHIFT);
} else if ((v28 != -1) && (v27 == -1)) {
ov16_0226DCCC(param0->unk_6B8, v13, v15, v14, v15, v13, v28, v14, v16, (192 + 80) << FX32_SHIFT);
} else {
ov16_0226DCCC(param0->unk_6B8, v13, v15, v14, v15, v13, v16, v14, v27, (192 + 80) << FX32_SHIFT);
}
if (v17 != -1) {
ov16_0226DDC0(param0->unk_6B8, v17, v18, v29, (192 + 80) << FX32_SHIFT);
} else {
ov16_0226DE04(param0->unk_6B8);
}
} else {
ov16_0226DD9C(param0->unk_6B8, v2->unk_14[4].rect.left + 8, v2->unk_14[4].rect.right - 8, v2->unk_14[4].rect.top + 8, v2->unk_14[4].rect.bottom - 8, (192 + 80) << FX32_SHIFT);
ov16_0226DE04(param0->unk_6B8);
}
}
break;
case PAD_BUTTON_A:
if (v5 == 1) {
if (v0->unk_01 > 0) {
return 4;
} else {
for (v3 = 0; v3 < 4; v3++) {
if (v6[v3] == 1) {
return 0 + v3;
}
}
}
} else {
v4 = Unk_ov16_022701DC[v0->unk_01][v0->unk_02];
if ((v4 == 4) || (v6[v4 - 0] == 1)) {
return v4;
}
}
break;
case PAD_BUTTON_B:
return 4;
}
return 0xffffffff;
}
static void ov16_0226C9B8(UnkStruct_ov16_02268A14 *param0, int param1)
{
UnkStruct_ov16_0226C378 *v0;
int v1, j, i;
if (param1 == 4) {
return;
}
v1 = BattleSystem_BattlerOfType(param0->battleSys, param0->unk_66A);
v0 = ov16_02263B0C(BattleSystem_BattlerData(param0->battleSys, v1));
v0->unk_06 = param0->unk_66C;
for (i = 0; i < 3; i++) {
for (j = 0; j < 2; j++) {
if (param1 == Unk_ov16_022701DC[i][j]) {
v0->unk_04 = j;
v0->unk_05 = i;
return;
}
}
}
}
static int ov16_0226CA14(UnkStruct_ov16_02268A14 *param0, int param1)
{
UnkStruct_ov16_0226CB10 *v0;
u32 v1;
const UnkStruct_ov16_02270670 *v2;
int v3, v4;
v0 = &param0->unk_6BC;
v2 = &Unk_ov16_02270670[param0->unk_66B];
if (param1 == 1) {
v3 = Unk_ov16_022701C8[v0->unk_01][v0->unk_02];
ov16_0226DD9C(param0->unk_6B8, v2->unk_14[v3].rect.left + 8, v2->unk_14[v3].rect.right - 8, v2->unk_14[v3].rect.top + 8, v2->unk_14[v3].rect.bottom - 8, (192 + 80) << FX32_SHIFT);
return 0xffffffff;
}
v1 = ov16_0226CB10(v0, 1, 2, Unk_ov16_022701C8[0]);
switch (v1) {
case PAD_KEY_UP:
case PAD_KEY_DOWN:
case PAD_KEY_LEFT:
case PAD_KEY_RIGHT:
v3 = Unk_ov16_022701C8[v0->unk_01][v0->unk_02];
ov16_0226DD9C(param0->unk_6B8, v2->unk_14[v3].rect.left + 8, v2->unk_14[v3].rect.right - 8, v2->unk_14[v3].rect.top + 8, v2->unk_14[v3].rect.bottom - 8, (192 + 80) << FX32_SHIFT);
break;
case PAD_BUTTON_A:
v3 = Unk_ov16_022701C8[v0->unk_01][v0->unk_02];
return v3;
case PAD_BUTTON_B:
return 1;
}
return 0xffffffff;
}
static u32 ov16_0226CB10(UnkStruct_ov16_0226CB10 *param0, int param1, int param2, const u8 *param3)
{
int v0, v1;
u32 v2;
if (param0->unk_02 >= param1) {
param0->unk_02 = param1 - 1;
}
if (param0->unk_01 >= param2) {
param0->unk_01 = param2 - 1;
}
v1 = param0->unk_02;
v0 = param0->unk_01;
if (gSystem.pressedKeys & PAD_KEY_UP) {
param0->unk_01--;
if (param0->unk_01 < 0) {
param0->unk_01 = 0;
}
if (param3 != NULL) {
while (param3[param1 * param0->unk_01 + param0->unk_02] == 0xff) {
param0->unk_01--;
if (param0->unk_01 < 0) {
param0->unk_01 = v0;
break;
}
}
}
v2 = PAD_KEY_UP;
} else if (gSystem.pressedKeys & PAD_KEY_DOWN) {
param0->unk_01++;
if (param0->unk_01 >= param2) {
param0->unk_01 = param2 - 1;
}
if (param3 != NULL) {
while (param3[param1 * param0->unk_01 + param0->unk_02] == 0xff) {
param0->unk_01++;
if (param0->unk_01 >= param2) {
param0->unk_01 = v0;
break;
}
}
}
v2 = PAD_KEY_DOWN;
} else if (gSystem.pressedKeys & PAD_KEY_LEFT) {
param0->unk_02--;
if (param0->unk_02 < 0) {
param0->unk_02 = 0;
}
if (param3 != NULL) {
while (param3[param1 * param0->unk_01 + param0->unk_02] == 0xff) {
param0->unk_02--;
if (param0->unk_02 < 0) {
param0->unk_02 = v1;
break;
}
}
}
v2 = PAD_KEY_LEFT;
} else if (gSystem.pressedKeys & PAD_KEY_RIGHT) {
param0->unk_02++;
if (param0->unk_02 >= param1) {
param0->unk_02 = param1 - 1;
}
if (param3 != NULL) {
while (param3[param1 * param0->unk_01 + param0->unk_02] == 0xff) {
param0->unk_02++;
if (param0->unk_02 >= param1) {
param0->unk_02 = v1;
break;
}
}
}
v2 = PAD_KEY_RIGHT;
} else if (gSystem.pressedKeys & PAD_BUTTON_A) {
v2 = PAD_BUTTON_A;
} else if (gSystem.pressedKeys & PAD_BUTTON_B) {
v2 = PAD_BUTTON_B;
} else {
return 0;
}
if (param3 != NULL) {
int v3, v4;
v3 = param3[param1 * v0 + v1];
v4 = param3[param1 * param0->unk_01 + param0->unk_02];
if (v3 == v4) {
param0->unk_02 = v1;
param0->unk_01 = v0;
}
}
if ((param0->unk_02 != v1) || (param0->unk_01 != v0)) {
Sound_PlayEffect(SEQ_SE_CONFIRM);
} else {
if (v2 & PAD_KEY) {
return 0;
}
}
return v2;
}
int ov16_0226CD08(UnkStruct_ov16_02268A14 *param0)
{
return param0->unk_6C0;
}
void ov16_0226CD10(UnkStruct_ov16_02268A14 *param0, int param1)
{
param0->unk_6C0 = param1;
}
static int (*const Unk_ov16_0227020C[])(UnkStruct_ov16_02268A14 *) = {
ov16_0226CD84,
ov16_0226CDDC
};
static int ov16_0226CD18(UnkStruct_ov16_02268A14 *param0)
{
SpriteSystem *v0;
SpriteManager *v1;
PaletteData *v2;
int v3;
v0 = BattleSystem_GetSpriteSystem(param0->battleSys);
v1 = BattleSystem_GetSpriteManager(param0->battleSys);
v2 = BattleSystem_PaletteSys(param0->battleSys);
v3 = 0xffffffff;
if (ov16_0223F228(param0->battleSys) == 0) {
GF_ASSERT(param0->unk_6C4.unk_04 < NELEMS(Unk_ov16_0227020C));
v3 = Unk_ov16_0227020C[param0->unk_6C4.unk_04](param0);
} else {
v3 = ov16_0226CE34(param0);
}
if (v3 != 0xffffffff) {
param0->unk_6C4.unk_05 = 0;
param0->unk_6C4.unk_06 = 0;
param0->unk_6C4.unk_04++;
}
return v3;
}
static int ov16_0226CD84(UnkStruct_ov16_02268A14 *param0)
{
switch (param0->unk_6C4.unk_05) {
case 0:
ov16_0226DF80(param0->unk_6C4.unk_00, 128, 84 - 24, (192 + 80) << FX32_SHIFT);
ov16_0226DFD0(param0->unk_6C4.unk_00, 60);
param0->unk_6C4.unk_05++;
break;
default:
if (ov16_0226DFD4(param0->unk_6C4.unk_00) == 1) {
param0->unk_6C4.unk_05++;
return 0;
}
break;
}
return 0xffffffff;
}
static int ov16_0226CDDC(UnkStruct_ov16_02268A14 *param0)
{
switch (param0->unk_6C4.unk_05) {
case 0:
ov16_0226DF80(param0->unk_6C4.unk_00, 64, 46 - 24, (192 + 80) << FX32_SHIFT);
ov16_0226DFD0(param0->unk_6C4.unk_00, 60);
param0->unk_6C4.unk_05++;
break;
default:
if (ov16_0226DFD4(param0->unk_6C4.unk_00) == 1) {
param0->unk_6C4.unk_05++;
return 1;
}
break;
}
return 0xffffffff;
}
static int ov16_0226CE34(UnkStruct_ov16_02268A14 *param0)
{
switch (param0->unk_6C4.unk_05) {
case 0:
param0->unk_6C4.unk_06++;
if (param0->unk_6C4.unk_06 > 60) {
param0->unk_6C4.unk_06 = 0;
param0->unk_6C4.unk_05++;
}
break;
case 1:
ov16_0226DF80(param0->unk_6C4.unk_00, 40, 170 - 24, (192 + 80) << FX32_SHIFT);
ov16_0226DFD0(param0->unk_6C4.unk_00, 60);
param0->unk_6C4.unk_05++;
break;
default:
if (ov16_0226DFD4(param0->unk_6C4.unk_00) == 1) {
param0->unk_6C4.unk_05++;
return 1;
}
break;
}
return 0xffffffff;
}
void ov16_0226CEB0(UnkStruct_ov16_02268A14 *param0, int param1)
{
BgConfig *v0 = BattleSystem_BGL(param0->battleSys);
PaletteData *v1 = BattleSystem_PaletteSys(param0->battleSys);
GF_ASSERT(param0->unk_66B == 18);
LoadStandardWindowGraphics(v0, BG_LAYER_SUB_1, 0x20, 1, 0, HEAP_ID_BATTLE);
PaletteData_LoadBufferFromHardware(v1, 1, 1 * 16, 0x20);
{
int v2 = 0x20, v3 = 1;
int v4, v5, v6, v7;
v4 = 1;
v5 = 6;
v6 = 30;
v7 = 6;
Bg_FillTilemapRect(v0, 5, v2, v4, v5, 1, 1, v3);
Bg_FillTilemapRect(v0, 5, v2 + 1, v4 + 1, v5, v6 - 2, 1, v3);
Bg_FillTilemapRect(v0, 5, v2 + 2, v4 + v6 - 1, v5, 1, 1, v3);
Bg_FillTilemapRect(v0, 5, v2 + 3, v4, v5 + 1, 1, v7 - 2, v3);
Bg_FillTilemapRect(v0, 5, v2 + 5, v4 + v6 - 1, v5 + 1, 1, v7 - 2, v3);
Bg_FillTilemapRect(v0, 5, v2 + 6, v4, v5 + v7 - 1, 1, 1, v3);
Bg_FillTilemapRect(v0, 5, v2 + 7, v4 + 1, v5 + v7 - 1, v6 - 2, 1, v3);
Bg_FillTilemapRect(v0, 5, v2 + 8, v4 + v6 - 1, v5 + v7 - 1, 1, 1, v3);
Bg_FillTilemapRect(v0, 5, v2 + 4, v4 + 1, v5 + 1, v6 - 2, v7 - 2, v3);
Bg_ScheduleTilemapTransfer(v0, 5);
}
{
Strbuf *v8;
MessageLoader *v9 = BattleSystem_MessageLoader(param0->battleSys);
int i;
const u16 v11[][2] = {
{ 1261, 1262 },
{ 1263, 1264 },
{ 1265, 1266 },
};
for (i = 0; i < 2; i++) {
if (param0->unk_4CC[1 + i].unk_00 != NULL) {
GF_ASSERT(0);
return;
}
v8 = MessageLoader_GetNewStrbuf(v9, v11[param1][i]);
ov16_0226A98C(param0, &param0->unk_4CC[1 + i], v8, FONT_SYSTEM, TEXT_COLOR(1, 2, 0), 4, 20023, 1 * 8 + 8, 6 * 8 + 16 + 16 * i, 0, NULL);
Strbuf_Free(v8);
}
}
}
u8 ov16_0226D088(UnkStruct_ov16_02268A14 *param0)
{
return param0->unk_6C1;
}