From a54fa23b5f30b0c6cc24f211137b3f6c892b3cd5 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 15 Aug 2018 15:49:50 +0200 Subject: Begin battle frontier 1 --- src/battle_frontier_1.c | 1235 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1235 insertions(+) create mode 100644 src/battle_frontier_1.c (limited to 'src') diff --git a/src/battle_frontier_1.c b/src/battle_frontier_1.c new file mode 100644 index 000000000..b84e91973 --- /dev/null +++ b/src/battle_frontier_1.c @@ -0,0 +1,1235 @@ +#include "global.h" +#include "battle.h" +#include "battle_setup.h" +#include "battle_frontier_1.h" +#include "event_data.h" +#include "overworld.h" +#include "util.h" +#include "malloc.h" +#include "constants/species.h" + +struct Unknown_0203BC8C_Struct +{ + u16 field_0; + u8 field_2; + u8 field_3; + u8 field_4; + u8 field_5; + u8 field_6; + u8 field_7; + u8 field_8; + u8 field_9; + u8 field_A; + u8 field_B; + u8 field_C; + u8 field_D; + u8 field_E; +}; + +extern struct Unknown_0203BC8C_Struct *gUnknown_0203BC8C; + +extern void sub_81B8558(void); +extern u32 sub_81A39C4(void); +extern u16 sub_8162548(u8, u8); +extern u16 sub_8163524(u16); +extern u8 sub_8165C40(void); + +extern u8 gUnknown_0203CEF8[]; + +extern void (* const gUnknown_0860D090[])(void); +extern const u32 gUnknown_0860D0EC[][2]; +extern const u32 gUnknown_0860D0FC[][2]; + +// This file's functions. +u8 sub_8190168(u16); +void sub_818F720(u16 species, s32 level, s32 ivs, u8 evBits, u8 nature, s32 *stats); + +// code +void sub_818E9AC(void) +{ + gUnknown_0860D090[gSpecialVar_0x8004](); +} + +void sub_818E9CC(void) +{ + u32 lvlMode = gSaveBlock2Ptr->frontier.chosenLvl; + u32 id = VarGet(VAR_0x40CE); + + gSaveBlock2Ptr->frontier.field_CA8 = 0; + gSaveBlock2Ptr->frontier.field_CB2 = 0; + gSaveBlock2Ptr->frontier.field_CA9_a = 0; + gSaveBlock2Ptr->frontier.field_CA9_b = 0; + if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860D0EC[id][lvlMode])) + gSaveBlock2Ptr->frontier.field_D0C[id][lvlMode] = 0; + + saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); + gTrainerBattleOpponent_A = 0; +} + +void sub_818EA84(void) +{ + u32 lvlMode = gSaveBlock2Ptr->frontier.chosenLvl; + u32 id = VarGet(VAR_0x40CE); + + switch (gSpecialVar_0x8005) + { + case 0: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D0C[id][lvlMode]; + break; + case 1: + gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860D0EC[id][lvlMode]) != 0); + break; + case 2: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_0; + break; + case 3: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_1; + break; + case 4: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_2; + break; + case 5: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_3; + break; + case 6: + if (VarGet(VAR_0x40CE) == 1) + { + if (lvlMode) + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_5; + else + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_4; + } + else + { + if (lvlMode) + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_1; + else + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_0; + } + break; + case 7: + if (VarGet(VAR_0x40CE) == 1) + { + if (lvlMode) + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_7; + else + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_6; + } + else + { + if (lvlMode) + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_3; + else + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_2; + } + break; + case 8: + sub_81B8558(); + gUnknown_0203CEF8[0] = gSaveBlock2Ptr->frontier.field_CB0; + gUnknown_0203CEF8[1] = gSaveBlock2Ptr->frontier.field_CB0 >> 8; + break; + case 9: + gSpecialVar_Result = (gSaveBlock2Ptr->frontier.field_D0A * 2) - 3 + gSaveBlock2Ptr->frontier.field_D0B; + break; + } +} + +void sub_818ED28(void) +{ + u32 lvlMode = gSaveBlock2Ptr->frontier.chosenLvl; + u32 id = VarGet(VAR_0x40CE); + + switch (gSpecialVar_0x8005) + { + case 0: + gSaveBlock2Ptr->frontier.field_D0C[id][lvlMode] = gSpecialVar_0x8006; + break; + case 1: + if (gSpecialVar_0x8006) + gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_0860D0EC[id][lvlMode]; + else + gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_0860D0FC[id][lvlMode]; + break; + case 2: + gSaveBlock2Ptr->frontier.field_D08_0 = gSpecialVar_0x8006; + break; + case 3: + gSaveBlock2Ptr->frontier.field_D08_1 = gSpecialVar_0x8006; + break; + case 4: + gSaveBlock2Ptr->frontier.field_D08_2 = gSpecialVar_0x8006; + break; + case 5: + gSaveBlock2Ptr->frontier.field_D08_3 = gSpecialVar_0x8006; + break; + case 6: + if (VarGet(VAR_0x40CE) == 1) + { + if (lvlMode) + gSaveBlock2Ptr->frontier.field_D08_5 = gSpecialVar_0x8006; + else + gSaveBlock2Ptr->frontier.field_D08_4 = gSpecialVar_0x8006; + } + else + { + if (lvlMode) + gSaveBlock2Ptr->frontier.field_D08_1 = gSpecialVar_0x8006; + else + gSaveBlock2Ptr->frontier.field_D08_0 = gSpecialVar_0x8006; + } + break; + case 7: + if (VarGet(VAR_0x40CE) == 1) + { + if (lvlMode) + gSaveBlock2Ptr->frontier.field_D08_7 = gSpecialVar_0x8006; + else + gSaveBlock2Ptr->frontier.field_D08_6 = gSpecialVar_0x8006; + } + else + { + if (lvlMode) + gSaveBlock2Ptr->frontier.field_D08_3 = gSpecialVar_0x8006; + else + gSaveBlock2Ptr->frontier.field_D08_2 = gSpecialVar_0x8006; + } + break; + case 8: + gSaveBlock2Ptr->frontier.field_CB0 = T1_READ_16(gUnknown_0203CEF8); + break; + } +} + +#ifdef NONMATCHING +// Not even close, this function is insane. +void sub_818F02C(void) +{ + s32 i, j, k, l; + u32 array[16]; + u32 var_28; + u32 var_24; + s32 var_38; + s32 monTypesBits, monTypesCount; + u32 var_54 = 0; + u32 var_50 = 0; + u32 var_4C = 0; + u32 *var_40 = AllocZeroed(0x20); + u16 *var_44 = AllocZeroed(0x18); + u32 var_48; + + gSaveBlock2Ptr->frontier.field_D0A = gSaveBlock2Ptr->frontier.chosenLvl + 1; + gSaveBlock2Ptr->frontier.field_D0B = VarGet(VAR_0x40CE) + 1; + gSaveBlock2Ptr->frontier.field_D24[0].unk0 = 0x3FF; + gSaveBlock2Ptr->frontier.field_D24[0].unk1 = 0; + gSaveBlock2Ptr->frontier.field_D24[0].unk2 = 0; + gSaveBlock2Ptr->frontier.field_D24[0].unk3 = 0; + + for (i = 0; i < 3; i++) + { + gSaveBlock2Ptr->frontier.field_D64[i] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1], MON_DATA_SPECIES, NULL); + for (j = 0; j < 4; j++) + gSaveBlock2Ptr->frontier.field_EFC[i].moves[j] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1], MON_DATA_MOVE1 + j, NULL); + for (j = 0; j < 6; j++) + gSaveBlock2Ptr->frontier.field_EFC[i].evs[j] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1], MON_DATA_HP_EV + j, NULL); + + gSaveBlock2Ptr->frontier.field_EFC[i].nature = GetNature(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1]); + } + + var_28 = 4; + var_24 = 6; + for (l = j; l < 16; l++) + { + u16 val; + if (l > 5) + { + while (1) + { + val = sub_8162548(sub_81A39C4(), 0); + for (k = 1; k < l; k++) + { + if (gSaveBlock2Ptr->frontier.field_D24[k].unk0 == val) + break; + } + if (k != l) + { + gSaveBlock2Ptr->frontier.field_D24[var_28].unk0 = val; + break; + } + } + } + else + { + while (1) + { + val = sub_8162548(sub_81A39C4() + 1, 0); + for (k = 1; k < l; k++) + { + if (gSaveBlock2Ptr->frontier.field_D24[k].unk0 == val) + break; + } + if (k != l) + { + gSaveBlock2Ptr->frontier.field_D24[var_28].unk0 = val; + break; + } + } + } + + for (var_38 = 0; var_38 < 3; var_38++) + { + u16 val2; + do + { + val2 = sub_8163524(val); + for (i = 0; i < l; i++) + { + if (gSaveBlock2Ptr->frontier.field_D64[i] == val2) + break; + if (var_54 == gUnknown_0203BC8C[val2].field_0) + break; + if (var_50 == gUnknown_0203BC8C[val2].field_0) + break; + if (gUnknown_0203BC8C[gSaveBlock2Ptr->frontier.field_D64[i]].field_A == gUnknown_0203BC8C[val2].field_A) + break; + } + } while (i != var_38); + + gSaveBlock2Ptr->frontier.field_D64[var_24] = val2; + array[var_38] = gUnknown_0203BC8C[val2].field_0; + } + + gSaveBlock2Ptr->frontier.field_D24[var_28].unk1 = 0; + gSaveBlock2Ptr->frontier.field_D24[var_28].unk2 = 0; + gSaveBlock2Ptr->frontier.field_D24[var_28].unk3 = 0; + } + + for (i = 0; i < 3; i++) + { + struct Pokemon *mon = &gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1]; + var_44[0] += GetMonData(mon, MON_DATA_ATK, NULL); + var_44[0] += GetMonData(mon, MON_DATA_DEF, NULL); + var_44[0] += GetMonData(mon, MON_DATA_SPATK, NULL); + var_44[0] += GetMonData(mon, MON_DATA_SPDEF, NULL); + var_44[0] += GetMonData(mon, MON_DATA_SPEED, NULL); + var_44[0] += GetMonData(mon, MON_DATA_MAX_HP, NULL); + monTypesBits |= gBitTable[gBaseStats[GetMonData(mon, MON_DATA_SPECIES, NULL)].type1]; + monTypesBits |= gBitTable[gBaseStats[GetMonData(mon, MON_DATA_SPECIES, NULL)].type2]; + } + + for (monTypesCount = 0, i = 0; i < 31; i++) + { + if (monTypesBits & 1) + monTypesCount++; + monTypesBits >>= 1; + } + + var_48 = sub_8165C40(); + var_44[0] += (monTypesCount * var_48) / 20; + + for (i = 0; i < 16; i++) + { + u8 r8; + + var_44[i + 1] = 0; + r8 = sub_8190168(gSaveBlock2Ptr->frontier.field_D24[i].unk0); + for (j = 0; j < 3; j++) + { + sub_818F720(gSaveBlock2Ptr->frontier.field_D64[i]); + } + } + + Free(var_44); + Free(var_40); +} +#else +NAKED +void sub_818F02C(void) +{ + asm_unified("\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x3C\n\ + movs r0, 0\n\ + str r0, [sp, 0x8]\n\ + str r0, [sp, 0xC]\n\ + str r0, [sp, 0x10]\n\ + movs r0, 0x20\n\ + bl AllocZeroed\n\ + str r0, [sp, 0x18]\n\ + movs r0, 0x18\n\ + bl AllocZeroed\n\ + str r0, [sp, 0x1C]\n\ + ldr r4, =gSaveBlock2Ptr\n\ + ldr r1, [r4]\n\ + ldr r2, =0x00000ca9\n\ + adds r0, r1, r2\n\ + ldrb r0, [r0]\n\ + lsls r0, 30\n\ + lsrs r0, 30\n\ + adds r0, 0x1\n\ + ldr r3, =0x00000d0a\n\ + adds r1, r3\n\ + strb r0, [r1]\n\ + ldr r0, =0x000040ce\n\ + bl VarGet\n\ + ldr r1, [r4]\n\ + adds r0, 0x1\n\ + ldr r5, =0x00000d0b\n\ + adds r1, r5\n\ + strb r0, [r1]\n\ + ldr r2, [r4]\n\ + ldr r7, =0x00000d24\n\ + adds r3, r2, r7\n\ + ldrh r0, [r3]\n\ + ldr r5, =0x000003ff\n\ + adds r1, r5, 0\n\ + orrs r0, r1\n\ + strh r0, [r3]\n\ + ldr r3, =0x00000d25\n\ + adds r2, r3\n\ + ldrb r1, [r2]\n\ + movs r0, 0x5\n\ + negs r0, r0\n\ + ands r0, r1\n\ + strb r0, [r2]\n\ + ldr r1, [r4]\n\ + adds r1, r3\n\ + ldrb r2, [r1]\n\ + movs r0, 0x19\n\ + negs r0, r0\n\ + ands r0, r2\n\ + strb r0, [r1]\n\ + ldr r1, [r4]\n\ + adds r1, r3\n\ + ldrb r2, [r1]\n\ + movs r0, 0x1F\n\ + ands r0, r2\n\ + strb r0, [r1]\n\ + movs r7, 0\n\ + mov r10, r7\n\ + mov r8, r4\n\ + ldr r0, =gBattleScripting + 0x14\n\ + mov r9, r0\n\ + movs r4, 0\n\ +_0818F0BA:\n\ + mov r1, r8\n\ + ldr r0, [r1]\n\ + ldr r2, =0x00000caa\n\ + adds r0, r2\n\ + adds r0, r4\n\ + ldrh r0, [r0]\n\ + movs r3, 0x64\n\ + muls r0, r3\n\ + add r0, r9\n\ + movs r1, 0xB\n\ + movs r2, 0\n\ + bl GetMonData\n\ + mov r5, r8\n\ + ldr r1, [r5]\n\ + ldr r7, =0x00000d64\n\ + adds r1, r7\n\ + adds r1, r4\n\ + strh r0, [r1]\n\ + movs r5, 0\n\ + mov r0, r10\n\ + lsls r7, r0, 4\n\ + adds r6, r7, 0\n\ +_0818F0E8:\n\ + mov r1, r8\n\ + ldr r0, [r1]\n\ + ldr r2, =0x00000caa\n\ + adds r0, r2\n\ + adds r0, r4\n\ + ldrh r0, [r0]\n\ + movs r3, 0x64\n\ + muls r0, r3\n\ + add r0, r9\n\ + adds r1, r5, 0\n\ + adds r1, 0xD\n\ + movs r2, 0\n\ + bl GetMonData\n\ + mov r2, r8\n\ + ldr r1, [r2]\n\ + ldr r3, =0x00000efc\n\ + adds r1, r3\n\ + adds r1, r6\n\ + strh r0, [r1]\n\ + adds r6, 0x2\n\ + adds r5, 0x1\n\ + cmp r5, 0x3\n\ + ble _0818F0E8\n\ + movs r5, 0\n\ + ldr r6, =gSaveBlock2Ptr\n\ +_0818F11C:\n\ + ldr r0, [r6]\n\ + ldr r1, =0x00000caa\n\ + adds r0, r1\n\ + adds r0, r4\n\ + ldrh r0, [r0]\n\ + movs r2, 0x64\n\ + muls r0, r2\n\ + add r0, r9\n\ + adds r1, r5, 0\n\ + adds r1, 0x1A\n\ + movs r2, 0\n\ + bl GetMonData\n\ + ldr r1, [r6]\n\ + adds r2, r5, r7\n\ + ldr r3, =0x00000f04\n\ + adds r1, r3\n\ + adds r1, r2\n\ + strb r0, [r1]\n\ + adds r5, 0x1\n\ + cmp r5, 0x5\n\ + ble _0818F11C\n\ + mov r5, r8\n\ + ldr r0, [r5]\n\ + ldr r1, =0x00000caa\n\ + adds r0, r1\n\ + adds r0, r4\n\ + ldrh r0, [r0]\n\ + movs r2, 0x64\n\ + muls r0, r2\n\ + add r0, r9\n\ + bl GetNature\n\ + ldr r1, [r5]\n\ + adds r1, r7\n\ + ldr r3, =0x00000f0a\n\ + adds r1, r3\n\ + strb r0, [r1]\n\ + adds r4, 0x2\n\ + movs r5, 0x1\n\ + add r10, r5\n\ + mov r7, r10\n\ + cmp r7, 0x2\n\ + ble _0818F0BA\n\ + mov r10, r5\n\ + movs r0, 0x4\n\ + str r0, [sp, 0x34]\n\ + movs r1, 0x6\n\ + str r1, [sp, 0x38]\n\ +_0818F17E:\n\ + mov r2, r10\n\ + cmp r2, 0x5\n\ + ble _0818F22C\n\ +_0818F184:\n\ + bl sub_81A39C4\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + movs r1, 0\n\ + bl sub_8162548\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + movs r5, 0x1\n\ + cmp r5, r10\n\ + bge _0818F1CA\n\ + ldr r3, =gSaveBlock2Ptr\n\ + ldr r0, [r3]\n\ + ldr r7, =0x00000d28\n\ + adds r0, r7\n\ + ldrh r0, [r0]\n\ + lsls r0, 22\n\ + lsrs r0, 22\n\ + adds r2, r3, 0\n\ + cmp r0, r4\n\ + beq _0818F1CA\n\ + ldr r3, =0x00000d24\n\ +_0818F1B2:\n\ + adds r5, 0x1\n\ + cmp r5, r10\n\ + bge _0818F1CA\n\ + ldr r0, [r2]\n\ + lsls r1, r5, 2\n\ + adds r0, r1\n\ + adds r0, r3\n\ + ldrh r0, [r0]\n\ + lsls r0, 22\n\ + lsrs r0, 22\n\ + cmp r0, r4\n\ + bne _0818F1B2\n\ +_0818F1CA:\n\ + cmp r5, r10\n\ + bne _0818F184\n\ + ldr r0, =gSaveBlock2Ptr\n\ + ldr r3, [r0]\n\ + ldr r1, [sp, 0x34]\n\ + adds r3, r1\n\ + ldr r2, =0x00000d24\n\ + adds r3, r2\n\ + ldr r5, =0x000003ff\n\ + adds r0, r5, 0\n\ + adds r2, r4, 0\n\ + ands r2, r0\n\ + ldrh r0, [r3]\n\ + ldr r7, =0xfffffc00\n\ + adds r1, r7, 0\n\ + b _0818F292\n\ + .pool\n\ +_0818F22C:\n\ + bl sub_81A39C4\n\ + adds r0, 0x1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + movs r1, 0\n\ + bl sub_8162548\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + movs r5, 0x1\n\ + cmp r5, r10\n\ + bge _0818F274\n\ + ldr r1, =gSaveBlock2Ptr\n\ + ldr r0, [r1]\n\ + ldr r2, =0x00000d28\n\ + adds r0, r2\n\ + ldrh r0, [r0]\n\ + lsls r0, 22\n\ + lsrs r0, 22\n\ + adds r2, r1, 0\n\ + cmp r0, r4\n\ + beq _0818F274\n\ + ldr r3, =0x00000d24\n\ +_0818F25C:\n\ + adds r5, 0x1\n\ + cmp r5, r10\n\ + bge _0818F274\n\ + ldr r0, [r2]\n\ + lsls r1, r5, 2\n\ + adds r0, r1\n\ + adds r0, r3\n\ + ldrh r0, [r0]\n\ + lsls r0, 22\n\ + lsrs r0, 22\n\ + cmp r0, r4\n\ + bne _0818F25C\n\ +_0818F274:\n\ + cmp r5, r10\n\ + bne _0818F22C\n\ + ldr r5, =gSaveBlock2Ptr\n\ + ldr r3, [r5]\n\ + ldr r7, [sp, 0x34]\n\ + adds r3, r7\n\ + ldr r0, =0x00000d24\n\ + adds r3, r0\n\ + ldr r1, =0x000003ff\n\ + adds r0, r1, 0\n\ + adds r2, r4, 0\n\ + ands r2, r0\n\ + ldrh r0, [r3]\n\ + ldr r5, =0xfffffc00\n\ + adds r1, r5, 0\n\ +_0818F292:\n\ + ands r0, r1\n\ + orrs r0, r2\n\ + strh r0, [r3]\n\ + movs r5, 0\n\ + lsls r4, 16\n\ + str r4, [sp, 0x2C]\n\ + ldr r7, [sp, 0x38]\n\ + str r7, [sp, 0x20]\n\ +_0818F2A2:\n\ + lsls r0, r5, 1\n\ + mov r9, r0\n\ + adds r1, r5, 0x1\n\ + str r1, [sp, 0x24]\n\ + lsls r2, r5, 2\n\ + str r2, [sp, 0x28]\n\ +_0818F2AE:\n\ + ldr r3, [sp, 0x2C]\n\ + lsrs r0, r3, 16\n\ + bl sub_8163524\n\ + lsls r0, 16\n\ + lsrs r6, r0, 16\n\ + movs r7, 0\n\ + cmp r7, r5\n\ + bge _0818F300\n\ + ldr r0, =gSaveBlock2Ptr\n\ + ldr r0, [r0]\n\ + ldr r1, [sp, 0x8]\n\ + mov r8, r1\n\ + ldr r2, [sp, 0xC]\n\ + mov r12, r2\n\ + ldr r3, =0x00000d64\n\ + adds r0, r3\n\ + ldr r1, [sp, 0x20]\n\ + adds r4, r1, r0\n\ +_0818F2D4:\n\ + ldrh r3, [r4]\n\ + cmp r3, r6\n\ + beq _0818F300\n\ + ldr r2, =gUnknown_0203BC8C\n\ + ldr r1, [r2]\n\ + lsls r0, r6, 4\n\ + adds r2, r0, r1\n\ + ldrh r0, [r2]\n\ + cmp r8, r0\n\ + beq _0818F300\n\ + cmp r12, r0\n\ + beq _0818F300\n\ + lsls r0, r3, 4\n\ + adds r0, r1\n\ + ldrb r0, [r0, 0xA]\n\ + ldrb r2, [r2, 0xA]\n\ + cmp r0, r2\n\ + beq _0818F300\n\ + adds r4, 0x2\n\ + adds r7, 0x1\n\ + cmp r7, r5\n\ + blt _0818F2D4\n\ +_0818F300:\n\ + cmp r7, r5\n\ + bne _0818F2AE\n\ + ldr r3, =gSaveBlock2Ptr\n\ + ldr r0, [r3]\n\ + ldr r1, [sp, 0x38]\n\ + add r1, r9\n\ + ldr r5, =0x00000d64\n\ + adds r0, r5\n\ + adds r0, r1\n\ + strh r6, [r0]\n\ + ldr r2, [sp, 0x28]\n\ + add r2, sp\n\ + adds r2, 0x8\n\ + ldr r0, =gUnknown_0203BC8C\n\ + ldr r1, [r0]\n\ + lsls r0, r6, 4\n\ + adds r0, r1\n\ + ldrh r0, [r0]\n\ + str r0, [r2]\n\ + ldr r5, [sp, 0x24]\n\ + cmp r5, 0x2\n\ + ble _0818F2A2\n\ + ldr r2, [r3]\n\ + ldr r7, [sp, 0x34]\n\ + adds r2, r7\n\ + ldr r0, =0x00000d25\n\ + adds r2, r0\n\ + ldrb r0, [r2]\n\ + movs r3, 0x5\n\ + negs r3, r3\n\ + adds r1, r3, 0\n\ + ands r0, r1\n\ + strb r0, [r2]\n\ + ldr r5, =gSaveBlock2Ptr\n\ + ldr r2, [r5]\n\ + adds r2, r7\n\ + ldr r7, =0x00000d25\n\ + adds r2, r7\n\ + ldrb r0, [r2]\n\ + subs r3, 0x14\n\ + adds r1, r3, 0\n\ + ands r0, r1\n\ + strb r0, [r2]\n\ + ldr r1, [r5]\n\ + ldr r5, [sp, 0x34]\n\ + adds r1, r5\n\ + adds r1, r7\n\ + ldrb r2, [r1]\n\ + movs r0, 0x1F\n\ + ands r0, r2\n\ + strb r0, [r1]\n\ + adds r5, 0x4\n\ + str r5, [sp, 0x34]\n\ + ldr r7, [sp, 0x38]\n\ + adds r7, 0x6\n\ + str r7, [sp, 0x38]\n\ + movs r0, 0x1\n\ + add r10, r0\n\ + mov r1, r10\n\ + cmp r1, 0xF\n\ + bgt _0818F37C\n\ + b _0818F17E\n\ +_0818F37C:\n\ + movs r7, 0\n\ + ldr r2, [sp, 0x18]\n\ + strh r7, [r2]\n\ + movs r3, 0\n\ + mov r10, r3\n\ + ldr r6, =gBitTable\n\ + ldr r5, =gBaseStats\n\ +_0818F38A:\n\ + ldr r0, =gSaveBlock2Ptr\n\ + ldr r0, [r0]\n\ + mov r2, r10\n\ + lsls r1, r2, 1\n\ + ldr r3, =0x00000caa\n\ + adds r0, r3\n\ + adds r0, r1\n\ + ldrh r0, [r0]\n\ + subs r4, r0, 0x1\n\ + movs r0, 0x64\n\ + muls r4, r0\n\ + ldr r0, =gPlayerParty\n\ + adds r4, r0\n\ + adds r0, r4, 0\n\ + movs r1, 0x3B\n\ + movs r2, 0\n\ + bl GetMonData\n\ + ldr r2, [sp, 0x18]\n\ + ldrh r1, [r2]\n\ + adds r1, r0\n\ + strh r1, [r2]\n\ + adds r0, r4, 0\n\ + movs r1, 0x3C\n\ + movs r2, 0\n\ + bl GetMonData\n\ + ldr r3, [sp, 0x18]\n\ + ldrh r1, [r3]\n\ + adds r1, r0\n\ + strh r1, [r3]\n\ + adds r0, r4, 0\n\ + movs r1, 0x3E\n\ + movs r2, 0\n\ + bl GetMonData\n\ + ldr r2, [sp, 0x18]\n\ + ldrh r1, [r2]\n\ + adds r1, r0\n\ + strh r1, [r2]\n\ + adds r0, r4, 0\n\ + movs r1, 0x3F\n\ + movs r2, 0\n\ + bl GetMonData\n\ + ldr r3, [sp, 0x18]\n\ + ldrh r1, [r3]\n\ + adds r1, r0\n\ + strh r1, [r3]\n\ + adds r0, r4, 0\n\ + movs r1, 0x3D\n\ + movs r2, 0\n\ + bl GetMonData\n\ + ldr r2, [sp, 0x18]\n\ + ldrh r1, [r2]\n\ + adds r1, r0\n\ + strh r1, [r2]\n\ + adds r0, r4, 0\n\ + movs r1, 0x3A\n\ + movs r2, 0\n\ + bl GetMonData\n\ + ldr r3, [sp, 0x18]\n\ + ldrh r1, [r3]\n\ + adds r1, r0\n\ + strh r1, [r3]\n\ + adds r0, r4, 0\n\ + movs r1, 0xB\n\ + movs r2, 0\n\ + bl GetMonData\n\ + lsls r1, r0, 3\n\ + subs r1, r0\n\ + lsls r1, 2\n\ + adds r1, r5\n\ + ldrb r0, [r1, 0x6]\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldr r0, [r0]\n\ + orrs r7, r0\n\ + adds r0, r4, 0\n\ + movs r1, 0xB\n\ + movs r2, 0\n\ + bl GetMonData\n\ + lsls r1, r0, 3\n\ + subs r1, r0\n\ + lsls r1, 2\n\ + adds r1, r5\n\ + ldrb r0, [r1, 0x7]\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldr r0, [r0]\n\ + orrs r7, r0\n\ + movs r0, 0x1\n\ + add r10, r0\n\ + mov r1, r10\n\ + cmp r1, 0x2\n\ + ble _0818F38A\n\ + movs r4, 0\n\ + movs r1, 0x1\n\ + movs r5, 0x1F\n\ +_0818F458:\n\ + adds r0, r7, 0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0818F462\n\ + adds r4, 0x1\n\ +_0818F462:\n\ + asrs r7, 1\n\ + subs r5, 0x1\n\ + cmp r5, 0\n\ + bge _0818F458\n\ + bl sub_8165C40\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + str r0, [sp, 0x14]\n\ + adds r2, r0, 0\n\ + adds r0, r4, 0\n\ + muls r0, r2\n\ + movs r1, 0x14\n\ + bl __divsi3\n\ + ldr r3, [sp, 0x18]\n\ + ldrh r1, [r3]\n\ + adds r1, r0\n\ + strh r1, [r3]\n\ + movs r5, 0x1\n\ + mov r10, r5\n\ + adds r6, r3, 0\n\ + adds r6, 0x2\n\ + movs r7, 0x2\n\ + str r7, [sp, 0x30]\n\ +_0818F494:\n\ + movs r7, 0\n\ + strh r7, [r6]\n\ + ldr r1, =gSaveBlock2Ptr\n\ + ldr r0, [r1]\n\ + mov r2, r10\n\ + lsls r1, r2, 2\n\ + adds r0, r1\n\ + ldr r3, =0x00000d24\n\ + adds r0, r3\n\ + ldrh r0, [r0]\n\ + lsls r0, 22\n\ + lsrs r0, 22\n\ + bl sub_8190168\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + movs r5, 0\n\ + ldr r0, [sp, 0x30]\n\ + mov r9, r0\n\ +_0818F4BC:\n\ + ldr r1, =gSaveBlock2Ptr\n\ + ldr r0, [r1]\n\ + mov r4, r9\n\ + add r4, r10\n\ + adds r4, r5\n\ + lsls r4, 1\n\ + ldr r2, =0x00000d64\n\ + adds r0, r2\n\ + adds r0, r4\n\ + ldrh r1, [r0]\n\ + ldr r3, =gUnknown_0203BC8C\n\ + ldr r0, [r3]\n\ + lsls r1, 4\n\ + adds r1, r0\n\ + ldrh r0, [r1]\n\ + ldrb r3, [r1, 0xB]\n\ + ldrb r1, [r1, 0xC]\n\ + str r1, [sp]\n\ + ldr r1, [sp, 0x1C]\n\ + str r1, [sp, 0x4]\n\ + ldr r1, [sp, 0x14]\n\ + mov r2, r8\n\ + bl sub_818F720\n\ + ldr r2, [sp, 0x1C]\n\ + ldr r1, [r2, 0x4]\n\ + ldrh r0, [r6]\n\ + adds r0, r1\n\ + ldr r1, [r2, 0x8]\n\ + adds r0, r1\n\ + ldr r1, [r2, 0x10]\n\ + adds r0, r1\n\ + ldr r1, [r2, 0x14]\n\ + adds r0, r1\n\ + ldr r1, [r2, 0xC]\n\ + adds r0, r1\n\ + ldr r1, [r2]\n\ + adds r0, r1\n\ + strh r0, [r6]\n\ + ldr r3, =gSaveBlock2Ptr\n\ + ldr r0, [r3]\n\ + ldr r1, =0x00000d64\n\ + adds r0, r1\n\ + adds r0, r4\n\ + ldrh r0, [r0]\n\ + ldr r2, =gUnknown_0203BC8C\n\ + ldr r1, [r2]\n\ + lsls r0, 4\n\ + adds r0, r1\n\ + ldrh r0, [r0]\n\ + lsls r1, r0, 3\n\ + subs r1, r0\n\ + lsls r1, 2\n\ + ldr r3, =gBaseStats\n\ + adds r1, r3\n\ + ldrb r0, [r1, 0x6]\n\ + lsls r0, 2\n\ + ldr r2, =gBitTable\n\ + adds r0, r2\n\ + ldr r0, [r0]\n\ + orrs r7, r0\n\ + ldrb r0, [r1, 0x7]\n\ + lsls r0, 2\n\ + adds r0, r2\n\ + ldr r0, [r0]\n\ + orrs r7, r0\n\ + adds r5, 0x1\n\ + cmp r5, 0x2\n\ + ble _0818F4BC\n\ + movs r4, 0\n\ + movs r1, 0x1\n\ + movs r5, 0x1F\n\ +_0818F54C:\n\ + adds r0, r7, 0\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _0818F556\n\ + adds r4, 0x1\n\ +_0818F556:\n\ + asrs r7, 1\n\ + subs r5, 0x1\n\ + cmp r5, 0\n\ + bge _0818F54C\n\ + ldr r3, [sp, 0x14]\n\ + adds r0, r4, 0\n\ + muls r0, r3\n\ + movs r1, 0x14\n\ + bl __divsi3\n\ + ldrh r1, [r6]\n\ + adds r1, r0\n\ + strh r1, [r6]\n\ + adds r6, 0x2\n\ + ldr r5, [sp, 0x30]\n\ + adds r5, 0x2\n\ + str r5, [sp, 0x30]\n\ + movs r7, 0x1\n\ + add r10, r7\n\ + mov r0, r10\n\ + cmp r0, 0xF\n\ + ble _0818F494\n\ + movs r1, 0\n\ + mov r10, r1\n\ + ldr r2, =0x000003ff\n\ + mov r8, r2\n\ +_0818F58A:\n\ + mov r5, r10\n\ + adds r5, 0x1\n\ + adds r7, r5, 0\n\ + cmp r5, 0xF\n\ + bgt _0818F626\n\ + mov r3, r10\n\ + lsls r0, r3, 1\n\ + ldr r1, [sp, 0x18]\n\ + adds r6, r0, r1\n\ + lsls r0, r5, 1\n\ + adds r4, r0, r1\n\ +_0818F5A0:\n\ + ldrh r1, [r6]\n\ + ldrh r0, [r4]\n\ + cmp r1, r0\n\ + bcc _0818F5C2\n\ + cmp r1, r0\n\ + bne _0818F61E\n\ + ldr r0, =gSaveBlock2Ptr\n\ + ldr r1, [r0]\n\ + lsls r0, r5, 2\n\ + adds r0, r1, r0\n\ + ldr r2, =0x00000d24\n\ + adds r0, r2\n\ + ldrh r0, [r0]\n\ + lsls r2, r0, 22\n\ + lsrs r0, r2, 22\n\ + cmp r0, r8\n\ + bne _0818F602\n\ +_0818F5C2:\n\ + mov r0, r10\n\ + adds r1, r5, 0\n\ + ldr r2, [sp, 0x18]\n\ + bl sub_818F904\n\ + b _0818F600\n\ + .pool\n\ +_0818F600:\n\ + b _0818F61E\n\ +_0818F602:\n\ + mov r3, r10\n\ + lsls r0, r3, 2\n\ + adds r0, r1, r0\n\ + ldr r1, =0x00000d24\n\ + adds r0, r1\n\ + ldrh r0, [r0]\n\ + lsls r0, 22\n\ + cmp r0, r2\n\ + bls _0818F61E\n\ + mov r0, r10\n\ + adds r1, r5, 0\n\ + ldr r2, [sp, 0x18]\n\ + bl sub_818F904\n\ +_0818F61E:\n\ + adds r4, 0x2\n\ + adds r5, 0x1\n\ + cmp r5, 0xF\n\ + ble _0818F5A0\n\ +_0818F626:\n\ + mov r10, r7\n\ + mov r2, r10\n\ + cmp r2, 0xE\n\ + ble _0818F58A\n\ + bl sub_81A3610\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _0818F6EE\n\ + movs r3, 0\n\ + mov r10, r3\n\ + ldr r0, =gSaveBlock2Ptr\n\ + ldr r1, [r0]\n\ + ldr r4, =0x00000d24\n\ + adds r1, r4\n\ + ldrh r1, [r1]\n\ + lsls r1, 22\n\ + lsrs r1, 22\n\ + ldr r3, =0x000003ff\n\ + adds r2, r0, 0\n\ + ldr r6, =gUnknown_0860D3F1\n\ + cmp r1, r3\n\ + beq _0818F674\n\ + adds r5, r2, 0\n\ +_0818F656:\n\ + movs r7, 0x1\n\ + add r10, r7\n\ + mov r0, r10\n\ + cmp r0, 0xF\n\ + bgt _0818F674\n\ + ldr r0, [r5]\n\ + mov r7, r10\n\ + lsls r1, r7, 2\n\ + adds r0, r1\n\ + adds r0, r4\n\ + ldrh r0, [r0]\n\ + lsls r0, 22\n\ + lsrs r0, 22\n\ + cmp r0, r3\n\ + bne _0818F656\n\ +_0818F674:\n\ + mov r1, r10\n\ + lsls r0, r1, 1\n\ + adds r0, r6\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + beq _0818F6AC\n\ + movs r5, 0\n\ + ldr r2, [r2]\n\ + ldr r3, =0x00000d24\n\ + adds r2, r3\n\ + ldrh r1, [r2]\n\ + ldr r0, =0xfffffc00\n\ + ands r0, r1\n\ + ldr r7, =0x000003fe\n\ + adds r1, r7, 0\n\ + b _0818F6BE\n\ + .pool\n\ +_0818F6AC:\n\ + movs r5, 0x1\n\ + ldr r2, [r2]\n\ + ldr r0, =0x00000d28\n\ + adds r2, r0\n\ + ldrh r1, [r2]\n\ + ldr r0, =0xfffffc00\n\ + ands r0, r1\n\ + ldr r3, =0x000003fe\n\ + adds r1, r3, 0\n\ +_0818F6BE:\n\ + orrs r0, r1\n\ + strh r0, [r2]\n\ + movs r7, 0\n\ + mov r10, r7\n\ + lsls r0, r5, 1\n\ + adds r0, r5\n\ + lsls r4, r0, 1\n\ +_0818F6CC:\n\ + mov r1, r10\n\ + lsls r0, r1, 24\n\ + lsrs r0, 24\n\ + bl sub_81A4FF0\n\ + ldr r1, =gSaveBlock2Ptr\n\ + ldr r1, [r1]\n\ + ldr r2, =0x00000d64\n\ + adds r1, r2\n\ + adds r1, r4\n\ + strh r0, [r1]\n\ + adds r4, 0x2\n\ + movs r3, 0x1\n\ + add r10, r3\n\ + mov r5, r10\n\ + cmp r5, 0x2\n\ + ble _0818F6CC\n\ +_0818F6EE:\n\ + ldr r0, [sp, 0x18]\n\ + bl Free\n\ + ldr r0, [sp, 0x1C]\n\ + bl Free\n\ + add sp, 0x3C\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n\ +\n\ + "); +} +#endif // NONMATCHING + +#define CALC_STAT(base, statIndex) \ +{ \ + u8 baseStat = gBaseStats[species].base; \ + stats[statIndex] = (((2 * baseStat + ivs + evs[statIndex] / 4) * level) / 100) + 5; \ + stats[statIndex] = (u8) ModifyStatByNature(nature, stats[statIndex], statIndex); \ +} + +void sub_818F720(u16 species, s32 level, s32 ivs, u8 evBits, u8 nature, s32 *stats) +{ + s32 i, count; + u8 bits; + u16 resultingEvs; + s32 evs[6]; + + count = 0, bits = evBits; + for (i = 0; i < 6; bits >>= 1, i++) + { + if (bits & 1) + count++; + } + + resultingEvs = 510 / count; + for (i = 0; i < 6; bits <<= 1, i++) + { + evs[i] = 0; + if (evBits & bits) + evs[i] = resultingEvs; + } + + if (species == SPECIES_SHEDINJA) + { + stats[STAT_HP] = 1; + } + else + { + s32 n = 2 * gBaseStats[species].baseHP; + stats[STAT_HP] = (((n + ivs + evs[STAT_HP] / 4) * level) / 100) + level + 10; + } + + CALC_STAT(baseAttack, STAT_ATK); + CALC_STAT(baseDefense, STAT_DEF); + CALC_STAT(baseSpeed, STAT_SPEED); + CALC_STAT(baseSpAttack, STAT_SPATK); + CALC_STAT(baseSpDefense, STAT_SPDEF); +} + +#define SWAP_16(x, y) \ +{ \ + temp = x; \ + x = y; \ + y = temp; \ +} + +void sub_818F904(s32 id1, s32 id2, u16 *dst) +{ + s32 i; + u16 temp; + + SWAP_16(dst[id1], dst[id2]); + SWAP_16(gSaveBlock2Ptr->frontier.field_D24[id1].unk0, gSaveBlock2Ptr->frontier.field_D24[id2].unk0); + + for (i = 0; i < 3; i++) + SWAP_16(gSaveBlock2Ptr->frontier.field_D64[id1][i], gSaveBlock2Ptr->frontier.field_D64[id2][i]); +} -- cgit v1.2.3 From e2f5e7344593c980b1fbce0a67ab4d57ff76fcd7 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 15 Aug 2018 23:04:46 +0200 Subject: More battle dome --- src/battle_frontier_1.c | 440 +++++++++++++++++++++++++++++++++++++++++++----- src/battle_message.c | 2 +- 2 files changed, 395 insertions(+), 47 deletions(-) (limited to 'src') diff --git a/src/battle_frontier_1.c b/src/battle_frontier_1.c index b84e91973..3c97215e3 100644 --- a/src/battle_frontier_1.c +++ b/src/battle_frontier_1.c @@ -2,47 +2,56 @@ #include "battle.h" #include "battle_setup.h" #include "battle_frontier_1.h" +#include "battle_message.h" #include "event_data.h" #include "overworld.h" #include "util.h" #include "malloc.h" +#include "string_util.h" +#include "random.h" #include "constants/species.h" +#include "constants/moves.h" +#include "constants/trainers.h" +#include "constants/abilities.h" struct Unknown_0203BC8C_Struct { - u16 field_0; - u8 field_2; - u8 field_3; - u8 field_4; - u8 field_5; - u8 field_6; - u8 field_7; - u8 field_8; - u8 field_9; - u8 field_A; - u8 field_B; - u8 field_C; - u8 field_D; - u8 field_E; + u16 species; + u16 moves[4]; + u8 itemTableId; + u8 evSpread; + u8 nature; }; -extern struct Unknown_0203BC8C_Struct *gUnknown_0203BC8C; +extern struct Unknown_0203BC8C_Struct *gFacilityTrainerMons; extern void sub_81B8558(void); extern u32 sub_81A39C4(void); extern u16 sub_8162548(u8, u8); extern u16 sub_8163524(u16); -extern u8 sub_8165C40(void); +extern u8 GetFrontierEnemyMonLevel(void); +extern void sub_8195898(u8 *dst, u16 trainerId); +extern u16 sub_81A5060(u8, u8); extern u8 gUnknown_0203CEF8[]; +extern u32 gUnknown_0203CD70; +extern u32 gUnknown_0203CD74; extern void (* const gUnknown_0860D090[])(void); extern const u32 gUnknown_0860D0EC[][2]; extern const u32 gUnknown_0860D0FC[][2]; +extern const u16 gBattleFrontierHeldItems[]; // This file's functions. -u8 sub_8190168(u16); +u8 GetDomeTrainerMonIvs(u16 trainerId); void sub_818F720(u16 species, s32 level, s32 ivs, u8 evBits, u8 nature, s32 *stats); +void CreateDomeTrainerMons(u16 tournamentTrainerId); +u16 TrainerIdToTournamentId(u16 trainerId); +s32 sub_818FC78(u16 tournamentTrainerId); +s32 sub_818FCBC(u16 tournamentTrainerId, bool8 arg1); +s32 sub_818FDB8(u16 tournamentTrainerId, bool8 arg1); +s32 sub_818FFC0(s32 move, s32 species, s32 arg2); +s32 sub_818FEB4(s32 *arr, bool8 arg1); // code void sub_818E9AC(void) @@ -219,14 +228,14 @@ void sub_818F02C(void) gSaveBlock2Ptr->frontier.field_D0A = gSaveBlock2Ptr->frontier.chosenLvl + 1; gSaveBlock2Ptr->frontier.field_D0B = VarGet(VAR_0x40CE) + 1; - gSaveBlock2Ptr->frontier.field_D24[0].unk0 = 0x3FF; - gSaveBlock2Ptr->frontier.field_D24[0].unk1 = 0; - gSaveBlock2Ptr->frontier.field_D24[0].unk2 = 0; - gSaveBlock2Ptr->frontier.field_D24[0].unk3 = 0; + gSaveBlock2Ptr->frontier.domeTrainers[0].trainerId = 0x3FF; + gSaveBlock2Ptr->frontier.domeTrainers[0].unk1 = 0; + gSaveBlock2Ptr->frontier.domeTrainers[0].unk2 = 0; + gSaveBlock2Ptr->frontier.domeTrainers[0].unk3 = 0; for (i = 0; i < 3; i++) { - gSaveBlock2Ptr->frontier.field_D64[i] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1], MON_DATA_SPECIES, NULL); + gSaveBlock2Ptr->frontier.domeMonId[i] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1], MON_DATA_SPECIES, NULL); for (j = 0; j < 4; j++) gSaveBlock2Ptr->frontier.field_EFC[i].moves[j] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1], MON_DATA_MOVE1 + j, NULL); for (j = 0; j < 6; j++) @@ -247,12 +256,12 @@ void sub_818F02C(void) val = sub_8162548(sub_81A39C4(), 0); for (k = 1; k < l; k++) { - if (gSaveBlock2Ptr->frontier.field_D24[k].unk0 == val) + if (gSaveBlock2Ptr->frontier.domeTrainers[k].trainerId == val) break; } if (k != l) { - gSaveBlock2Ptr->frontier.field_D24[var_28].unk0 = val; + gSaveBlock2Ptr->frontier.domeTrainers[var_28].trainerId = val; break; } } @@ -264,12 +273,12 @@ void sub_818F02C(void) val = sub_8162548(sub_81A39C4() + 1, 0); for (k = 1; k < l; k++) { - if (gSaveBlock2Ptr->frontier.field_D24[k].unk0 == val) + if (gSaveBlock2Ptr->frontier.domeTrainers[k].trainerId == val) break; } if (k != l) { - gSaveBlock2Ptr->frontier.field_D24[var_28].unk0 = val; + gSaveBlock2Ptr->frontier.domeTrainers[var_28].trainerId = val; break; } } @@ -283,24 +292,24 @@ void sub_818F02C(void) val2 = sub_8163524(val); for (i = 0; i < l; i++) { - if (gSaveBlock2Ptr->frontier.field_D64[i] == val2) + if (gSaveBlock2Ptr->frontier.domeMonId[i] == val2) break; - if (var_54 == gUnknown_0203BC8C[val2].field_0) + if (var_54 == gFacilityTrainerMons[val2].field_0) break; - if (var_50 == gUnknown_0203BC8C[val2].field_0) + if (var_50 == gFacilityTrainerMons[val2].field_0) break; - if (gUnknown_0203BC8C[gSaveBlock2Ptr->frontier.field_D64[i]].field_A == gUnknown_0203BC8C[val2].field_A) + if (gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i]].field_A == gFacilityTrainerMons[val2].field_A) break; } } while (i != var_38); - gSaveBlock2Ptr->frontier.field_D64[var_24] = val2; - array[var_38] = gUnknown_0203BC8C[val2].field_0; + gSaveBlock2Ptr->frontier.domeMonId[var_24] = val2; + array[var_38] = gFacilityTrainerMons[val2].field_0; } - gSaveBlock2Ptr->frontier.field_D24[var_28].unk1 = 0; - gSaveBlock2Ptr->frontier.field_D24[var_28].unk2 = 0; - gSaveBlock2Ptr->frontier.field_D24[var_28].unk3 = 0; + gSaveBlock2Ptr->frontier.domeTrainers[var_28].unk1 = 0; + gSaveBlock2Ptr->frontier.domeTrainers[var_28].unk2 = 0; + gSaveBlock2Ptr->frontier.domeTrainers[var_28].unk3 = 0; } for (i = 0; i < 3; i++) @@ -323,7 +332,7 @@ void sub_818F02C(void) monTypesBits >>= 1; } - var_48 = sub_8165C40(); + var_48 = GetFrontierEnemyMonLevel(); var_44[0] += (monTypesCount * var_48) / 20; for (i = 0; i < 16; i++) @@ -331,10 +340,10 @@ void sub_818F02C(void) u8 r8; var_44[i + 1] = 0; - r8 = sub_8190168(gSaveBlock2Ptr->frontier.field_D24[i].unk0); + r8 = GetDomeTrainerMonIvs(gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); for (j = 0; j < 3; j++) { - sub_818F720(gSaveBlock2Ptr->frontier.field_D64[i]); + sub_818F720(gSaveBlock2Ptr->frontier.domeMonId[i]); } } @@ -659,7 +668,7 @@ _0818F2D4:\n\ ldrh r3, [r4]\n\ cmp r3, r6\n\ beq _0818F300\n\ - ldr r2, =gUnknown_0203BC8C\n\ + ldr r2, =gFacilityTrainerMons\n\ ldr r1, [r2]\n\ lsls r0, r6, 4\n\ adds r2, r0, r1\n\ @@ -692,7 +701,7 @@ _0818F300:\n\ ldr r2, [sp, 0x28]\n\ add r2, sp\n\ adds r2, 0x8\n\ - ldr r0, =gUnknown_0203BC8C\n\ + ldr r0, =gFacilityTrainerMons\n\ ldr r1, [r0]\n\ lsls r0, r6, 4\n\ adds r0, r1\n\ @@ -856,7 +865,7 @@ _0818F462:\n\ subs r5, 0x1\n\ cmp r5, 0\n\ bge _0818F458\n\ - bl sub_8165C40\n\ + bl GetFrontierEnemyMonLevel\n\ lsls r0, 24\n\ lsrs r0, 24\n\ str r0, [sp, 0x14]\n\ @@ -888,7 +897,7 @@ _0818F494:\n\ ldrh r0, [r0]\n\ lsls r0, 22\n\ lsrs r0, 22\n\ - bl sub_8190168\n\ + bl GetDomeTrainerMonIvs\n\ lsls r0, 24\n\ lsrs r0, 24\n\ mov r8, r0\n\ @@ -906,7 +915,7 @@ _0818F4BC:\n\ adds r0, r2\n\ adds r0, r4\n\ ldrh r1, [r0]\n\ - ldr r3, =gUnknown_0203BC8C\n\ + ldr r3, =gFacilityTrainerMons\n\ ldr r0, [r3]\n\ lsls r1, 4\n\ adds r1, r0\n\ @@ -940,7 +949,7 @@ _0818F4BC:\n\ adds r0, r1\n\ adds r0, r4\n\ ldrh r0, [r0]\n\ - ldr r2, =gUnknown_0203BC8C\n\ + ldr r2, =gFacilityTrainerMons\n\ ldr r1, [r2]\n\ lsls r0, 4\n\ adds r0, r1\n\ @@ -1228,8 +1237,347 @@ void sub_818F904(s32 id1, s32 id2, u16 *dst) u16 temp; SWAP_16(dst[id1], dst[id2]); - SWAP_16(gSaveBlock2Ptr->frontier.field_D24[id1].unk0, gSaveBlock2Ptr->frontier.field_D24[id2].unk0); + SWAP_16(gSaveBlock2Ptr->frontier.domeTrainers[id1].trainerId, gSaveBlock2Ptr->frontier.domeTrainers[id2].trainerId); for (i = 0; i < 3; i++) - SWAP_16(gSaveBlock2Ptr->frontier.field_D64[id1][i], gSaveBlock2Ptr->frontier.field_D64[id2][i]); + SWAP_16(gSaveBlock2Ptr->frontier.domeMonId[id1][i], gSaveBlock2Ptr->frontier.domeMonId[id2][i]); } + +void sub_818F9B0(void) +{ + StringCopy(gStringVar1, gRoundsStringTable[gSaveBlock2Ptr->frontier.field_CB2]); +} + +void sub_818F9E0(void) +{ + StringCopy(gStringVar1, gRoundsStringTable[gSaveBlock2Ptr->frontier.field_CB2]); + sub_8195898(gStringVar2, gTrainerBattleOpponent_A); +} + +void sub_818FA20(void) +{ + gUnknown_0203CD70 = 0; + gUnknown_0203CD74 = GetMonData(&gPlayerParty[0], MON_DATA_MAX_HP, NULL); + gUnknown_0203CD74 += GetMonData(&gPlayerParty[1], MON_DATA_MAX_HP, NULL); + CalculatePlayerPartyCount(); + CreateDomeTrainerMons(TrainerIdToTournamentId(gTrainerBattleOpponent_A)); +} + +void CreateDomeMon(u8 monPartyId, u16 tournamentTrainerId, u8 tournamentMonId, u32 otId) +{ + s32 i; + u8 happiness = 0xFF; + u8 fixedIv = GetDomeTrainerMonIvs(tournamentTrainerId); // UB: Should be using trainerId instead of tournamentTrainerId. As a result, all Pokemon have ivs of 3. + u8 level = GetFrontierEnemyMonLevel(); + CreateMonWithEVSpreadPersonalityOTID(&gEnemyParty[monPartyId], + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].species, + level, + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].nature, + fixedIv, + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].evSpread, otId); + + happiness = 0xFF; + for (i = 0; i < 4; i++) + { + SetMonMoveSlot(&gEnemyParty[monPartyId], + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].moves[i], i); + if (gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].moves[i] == MOVE_FRUSTRATION) + happiness = 0; + } + + SetMonData(&gEnemyParty[monPartyId], MON_DATA_FRIENDSHIP, &happiness); + SetMonData(&gEnemyParty[monPartyId], MON_DATA_HELD_ITEM, + &gBattleFrontierHeldItems[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].itemTableId]); +} + +void CreateDomeTrainerMons(u16 tournamentTrainerId) +{ + u8 monsCount = 0; + u32 otId = 0; + s32 i, bits; + + ZeroEnemyPartyMons(); + bits = sub_818FC78(tournamentTrainerId); + otId = Random32(); + if (Random() % 10 > 5) + { + for (i = 0; i < 3; i++) + { + if (bits & 1) + { + CreateDomeMon(monsCount, tournamentTrainerId, i, otId); + monsCount++; + } + bits >>= 1; + } + } + else + { + for (i = 2; i >= 0; i--) + { + if (bits & 4) + { + CreateDomeMon(monsCount, tournamentTrainerId, i, otId); + monsCount++; + } + bits <<= 1; + } + } +} + +s32 sub_818FC78(u16 tournamentTrainerId) +{ + s32 bits; + if (Random() & 1) + { + bits = sub_818FCBC(tournamentTrainerId, FALSE); + if (bits == 0) + bits = sub_818FDB8(tournamentTrainerId, TRUE); + } + else + { + bits = sub_818FDB8(tournamentTrainerId, FALSE); + if (bits == 0) + bits = sub_818FCBC(tournamentTrainerId, TRUE); + } + + return bits; +} + +s32 sub_818FCBC(u16 tournamentTrainerId, bool8 arg1) +{ + s32 i, moveId, playerMonId; + s32 array[3]; + + for (i = 0; i < 3; i++) + { + array[i] = 0; + for (moveId = 0; moveId < 4; moveId++) + { + for (playerMonId = 0; playerMonId < 3; playerMonId++) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN) + { + array[i] += sub_818FFC0(sub_81A5060(i, moveId), + GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 0); + } + else + { + array[i] += sub_818FFC0(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][i]].moves[moveId], + GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 0); + } + } + } + } + return sub_818FEB4(array, arg1); +} + +s32 sub_818FDB8(u16 tournamentTrainerId, bool8 arg1) +{ + s32 i, moveId, playerMonId; + s32 array[3]; + + for (i = 0; i < 3; i++) + { + array[i] = 0; + for (moveId = 0; moveId < 4; moveId++) + { + for (playerMonId = 0; playerMonId < 3; playerMonId++) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN) + { + array[i] += sub_818FFC0(sub_81A5060(i, moveId), + GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 1); + } + else + { + array[i] += sub_818FFC0(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][i]].moves[moveId], + GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 1); + } + } + } + } + return sub_818FEB4(array, arg1); +} + +s32 sub_818FEB4(s32 *arr, bool8 arg1) +{ + s32 i, j; + s32 bits = 0; + s32 array[3]; + + for (i = 0; i < 3; i++) + array[i] = i; + + if (arr[0] == arr[1] && arr[0] == arr[2]) + { + if (arg1) + { + i = 0; + while (i != 2) + { + u32 rand = Random() & 3; + if (rand != 3 && !(bits & gBitTable[rand])) + { + bits |= gBitTable[rand]; + i++; + } + } + } + } + else + { + for (i = 0; i < 2; i++) + { + for (j = i + 1; j < 3; j++) + { + s32 temp; + + if (arr[i] < arr[j]) + { + temp = arr[i]; + arr[i] = arr[j]; + arr[j] = temp; + + temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + + if (arr[i] == arr[j] && (Random() & 1)) + { + temp = arr[i]; + arr[i] = arr[j]; + arr[j] = temp; + + temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + } + } + + for (i = 0; i < 2; i++) + { + bits |= gBitTable[array[i]]; + } + } + + return bits; +} + +/* +s32 sub_818FFC0(s32 move, s32 species, s32 arg2) +{ + u8 type1, type2, ability, moveType; + s32 i = 0; + s32 typePower = 20; + + if (move == MOVE_NONE || move == 0xFFFF || gBattleMoves[move].power == 0) + return 0; + + type1 = gBaseStats[species].type1; + type2 = gBaseStats[species].type2; + ability = gBaseStats[species].ability1; + moveType = gBattleMoves[move].type; + + if (ability == ABILITY_LEVITATE && moveType == TYPE_GROUND) + { + if (arg2 == 1) + typePower = 8; + } + else + { + while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE) + { + if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT) + { + i += 3; + continue; + } + else if (TYPE_EFFECT_ATK_TYPE(i) == moveType) + { + // BUG: * 2 is not necessary and makes the condition always false if the ability is wonder guard. + if (TYPE_EFFECT_DEF_TYPE(i) == type1 && (ability != ABILITY_WONDER_GUARD || TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE * 2)) + typePower = (TYPE_EFFECT_MULTIPLIER(i) * typePower) / 10; + if (TYPE_EFFECT_DEF_TYPE(i) == type2 && type1 != type2 && (ability != ABILITY_WONDER_GUARD || TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE * 2)) + typePower = (TYPE_EFFECT_MULTIPLIER(i) * typePower) / 10; + } + i += 3; + } + } + + switch (arg2) + { + case 0: + switch (typePower) + { + case 10: + case 5: + case 0: + default: + typePower = 0; + break; + case 20: + typePower = 2; + break; + case 40: + typePower = 4; + break; + case 80: + typePower = 8; + break; + } + break; + case 1: + switch (typePower) + { + default: + case 20: + typePower = 0; + break; + case 5: + typePower = 4; + break; + case 0: + typePower = 8; + break; + case 10: + typePower = 2; + break; + case 40: + typePower = -2; + break; + case 80: + typePower = -4; + break; + } + break; + case 2: + switch (typePower) + { + case 0: + typePower = -16; + break; + case 5: + typePower = -8; + break; + case 10: + default: + typePower = 0; + break; + case 20: + typePower = 4; + break; + case 40: + typePower = 12; + break; + case 80: + typePower = 20; + break; + } + break; + } + + return typePower; +}*/ diff --git a/src/battle_message.c b/src/battle_message.c index 13502d6f2..78b9ac53b 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1248,7 +1248,7 @@ static const u8 sText_Round2[] = _("Round 2"); static const u8 sText_Semifinal[] = _("Semifinal"); static const u8 sText_Final[] = _("Final"); -const u8 * const gRoundsStringTable[] = +const u8 *const gRoundsStringTable[] = { sText_Round1, sText_Round2, -- cgit v1.2.3 From 7669a94f0d01c0a825d2ae48c12adef0be445d81 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 16 Aug 2018 22:46:02 +0200 Subject: this function is driving me insane --- src/battle_frontier_1.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/battle_frontier_1.c b/src/battle_frontier_1.c index 3c97215e3..04faad6cd 100644 --- a/src/battle_frontier_1.c +++ b/src/battle_frontier_1.c @@ -1466,10 +1466,9 @@ s32 sub_818FEB4(s32 *arr, bool8 arg1) return bits; } -/* s32 sub_818FFC0(s32 move, s32 species, s32 arg2) { - u8 type1, type2, ability, moveType; + s32 type1, type2, ability, moveType; s32 i = 0; s32 typePower = 20; @@ -1488,22 +1487,25 @@ s32 sub_818FFC0(s32 move, s32 species, s32 arg2) } else { - while (TYPE_EFFECT_ATK_TYPE(i) != TYPE_ENDTABLE) + while (gTypeEffectiveness[i + 0] != TYPE_ENDTABLE) { - if (TYPE_EFFECT_ATK_TYPE(i) == TYPE_FORESIGHT) + if (gTypeEffectiveness[i + 0] == TYPE_FORESIGHT) { i += 3; - continue; } - else if (TYPE_EFFECT_ATK_TYPE(i) == moveType) + else { - // BUG: * 2 is not necessary and makes the condition always false if the ability is wonder guard. - if (TYPE_EFFECT_DEF_TYPE(i) == type1 && (ability != ABILITY_WONDER_GUARD || TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE * 2)) - typePower = (TYPE_EFFECT_MULTIPLIER(i) * typePower) / 10; - if (TYPE_EFFECT_DEF_TYPE(i) == type2 && type1 != type2 && (ability != ABILITY_WONDER_GUARD || TYPE_EFFECT_MULTIPLIER(i) == TYPE_MUL_SUPER_EFFECTIVE * 2)) - typePower = (TYPE_EFFECT_MULTIPLIER(i) * typePower) / 10; + u8 val = gTypeEffectiveness[i + 0]; + if (val == moveType) + { + // BUG: * 2 is not necessary and makes the condition always false if the ability is wonder guard. + if (gTypeEffectiveness[i + 1] == type1 && (ability != ABILITY_WONDER_GUARD || gTypeEffectiveness[i + 2] == TYPE_MUL_SUPER_EFFECTIVE * 2)) + typePower = (gTypeEffectiveness[i + 2] * typePower) / 10; + if (gTypeEffectiveness[i + 1] == type2 && type1 != type2 && (ability != ABILITY_WONDER_GUARD || gTypeEffectiveness[i + 2] == TYPE_MUL_SUPER_EFFECTIVE * 2)) + typePower = (gTypeEffectiveness[i + 2] * typePower) / 10; + } + i += 3; } - i += 3; } } @@ -1580,4 +1582,4 @@ s32 sub_818FFC0(s32 move, s32 species, s32 arg2) } return typePower; -}*/ +} -- cgit v1.2.3 From 63cbc8f3ccb11b05c627717a2de82d3134d599d9 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 18 Aug 2018 00:54:18 +0200 Subject: battle dome - a couple more functions --- src/battle_frontier_1.c | 812 +++++++++++++++++++++++++++++++++++++++++++++++- src/egg_hatch.c | 2 +- src/evolution_scene.c | 2 +- src/fieldmap.c | 2 +- src/link.c | 2 +- src/menu.c | 2 +- src/pokedex.c | 12 +- 7 files changed, 812 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/battle_frontier_1.c b/src/battle_frontier_1.c index 04faad6cd..d217bfa60 100644 --- a/src/battle_frontier_1.c +++ b/src/battle_frontier_1.c @@ -9,6 +9,16 @@ #include "malloc.h" #include "string_util.h" #include "random.h" +#include "task.h" +#include "main.h" +#include "gpu_regs.h" +#include "text.h" +#include "bg.h" +#include "window.h" +#include "palette.h" +#include "decompress.h" +#include "menu.h" +#include "pokemon_icon.h" #include "constants/species.h" #include "constants/moves.h" #include "constants/trainers.h" @@ -23,6 +33,12 @@ struct Unknown_0203BC8C_Struct u8 nature; }; +struct Unknown_0203CD78_Struct +{ + u8 arr[16]; + u8 unk_11; +}; + extern struct Unknown_0203BC8C_Struct *gFacilityTrainerMons; extern void sub_81B8558(void); @@ -32,10 +48,22 @@ extern u16 sub_8163524(u16); extern u8 GetFrontierEnemyMonLevel(void); extern void sub_8195898(u8 *dst, u16 trainerId); extern u16 sub_81A5060(u8, u8); +extern void sub_8162614(u16, u8); +extern void sub_81A4C30(void); +extern u16 sub_818D8F0(u16); extern u8 gUnknown_0203CEF8[]; extern u32 gUnknown_0203CD70; extern u32 gUnknown_0203CD74; +extern u16 gBattle_BG0_X; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG1_X; +extern u16 gBattle_BG1_Y; +extern u16 gBattle_BG2_X; +extern u16 gBattle_BG2_Y; +extern u16 gBattle_BG3_X; +extern u16 gBattle_BG3_Y; +extern struct Unknown_0203CD78_Struct *gUnknown_0203CD78; extern void (* const gUnknown_0860D090[])(void); extern const u32 gUnknown_0860D0EC[][2]; @@ -52,6 +80,13 @@ s32 sub_818FCBC(u16 tournamentTrainerId, bool8 arg1); s32 sub_818FDB8(u16 tournamentTrainerId, bool8 arg1); s32 sub_818FFC0(s32 move, s32 species, s32 arg2); s32 sub_818FEB4(s32 *arr, bool8 arg1); +u16 sub_81902AC(void); +void sub_8190400(u8 taskId); +void sub_8190CD4(u8 taskId); +void sub_8194B54(void); +void sub_8194B70(void); +void sub_819314C(u8, u8); +void sub_81924E0(u8, u8); // code void sub_818E9AC(void) @@ -62,14 +97,14 @@ void sub_818E9AC(void) void sub_818E9CC(void) { u32 lvlMode = gSaveBlock2Ptr->frontier.chosenLvl; - u32 id = VarGet(VAR_0x40CE); + u32 battleMode = VarGet(VAR_0x40CE); gSaveBlock2Ptr->frontier.field_CA8 = 0; gSaveBlock2Ptr->frontier.field_CB2 = 0; gSaveBlock2Ptr->frontier.field_CA9_a = 0; gSaveBlock2Ptr->frontier.field_CA9_b = 0; - if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860D0EC[id][lvlMode])) - gSaveBlock2Ptr->frontier.field_D0C[id][lvlMode] = 0; + if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860D0EC[battleMode][lvlMode])) + gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode] = 0; saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); gTrainerBattleOpponent_A = 0; @@ -78,15 +113,15 @@ void sub_818E9CC(void) void sub_818EA84(void) { u32 lvlMode = gSaveBlock2Ptr->frontier.chosenLvl; - u32 id = VarGet(VAR_0x40CE); + u32 battleMode = VarGet(VAR_0x40CE); switch (gSpecialVar_0x8005) { case 0: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D0C[id][lvlMode]; + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode]; break; case 1: - gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860D0EC[id][lvlMode]) != 0); + gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860D0EC[battleMode][lvlMode]) != 0); break; case 2: gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_0; @@ -146,18 +181,18 @@ void sub_818EA84(void) void sub_818ED28(void) { u32 lvlMode = gSaveBlock2Ptr->frontier.chosenLvl; - u32 id = VarGet(VAR_0x40CE); + u32 battleMode = VarGet(VAR_0x40CE); switch (gSpecialVar_0x8005) { case 0: - gSaveBlock2Ptr->frontier.field_D0C[id][lvlMode] = gSpecialVar_0x8006; + gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode] = gSpecialVar_0x8006; break; case 1: if (gSpecialVar_0x8006) - gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_0860D0EC[id][lvlMode]; + gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_0860D0EC[battleMode][lvlMode]; else - gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_0860D0FC[id][lvlMode]; + gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_0860D0FC[battleMode][lvlMode]; break; case 2: gSaveBlock2Ptr->frontier.field_D08_0 = gSpecialVar_0x8006; @@ -1267,7 +1302,7 @@ void CreateDomeMon(u8 monPartyId, u16 tournamentTrainerId, u8 tournamentMonId, u { s32 i; u8 happiness = 0xFF; - u8 fixedIv = GetDomeTrainerMonIvs(tournamentTrainerId); // UB: Should be using trainerId instead of tournamentTrainerId. As a result, all Pokemon have ivs of 3. + u8 fixedIv = GetDomeTrainerMonIvs(tournamentTrainerId); // BUG: Should be using trainerId instead of tournamentTrainerId. As a result, all Pokemon have ivs of 3. u8 level = GetFrontierEnemyMonLevel(); CreateMonWithEVSpreadPersonalityOTID(&gEnemyParty[monPartyId], gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].species, @@ -1466,6 +1501,8 @@ s32 sub_818FEB4(s32 *arr, bool8 arg1) return bits; } +// Functionally equivalent, while loop is impossible to match. +#ifdef NONMATCHING s32 sub_818FFC0(s32 move, s32 species, s32 arg2) { s32 type1, type2, ability, moveType; @@ -1583,3 +1620,756 @@ s32 sub_818FFC0(s32 move, s32 species, s32 arg2) return typePower; } +#else +NAKED +s32 sub_818FFC0(s32 move, s32 species, s32 arg2) +{ + asm_unified("\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x8\n\ + adds r3, r0, 0\n\ + adds r4, r1, 0\n\ + str r2, [sp]\n\ + movs r6, 0\n\ + movs r2, 0x14\n\ + cmp r3, 0\n\ + beq _0818FFF0\n\ + ldr r0, =0x0000ffff\n\ + cmp r3, r0\n\ + beq _0818FFF0\n\ + ldr r0, =gBattleMoves\n\ + lsls r1, r3, 1\n\ + adds r1, r3\n\ + lsls r1, 2\n\ + adds r3, r1, r0\n\ + ldrb r0, [r3, 0x1]\n\ + cmp r0, 0\n\ + bne _0818FFFC\n\ +_0818FFF0:\n\ + movs r0, 0\n\ + b _08190156\n\ + .pool\n\ +_0818FFFC:\n\ + ldr r1, =gBaseStats\n\ + lsls r0, r4, 3\n\ + subs r0, r4\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r1, [r0, 0x6]\n\ + mov r10, r1\n\ + ldrb r1, [r0, 0x7]\n\ + mov r9, r1\n\ + ldrb r0, [r0, 0x16]\n\ + mov r8, r0\n\ + ldrb r3, [r3, 0x2]\n\ + str r3, [sp, 0x4]\n\ + cmp r0, 0x1A\n\ + bne _0819002C\n\ + cmp r3, 0x4\n\ + bne _0819002C\n\ + ldr r0, [sp]\n\ + cmp r0, 0x1\n\ + bne _081900AA\n\ + movs r2, 0x8\n\ + b _081900A4\n\ + .pool\n\ +_0819002C:\n\ + ldr r0, =gTypeEffectiveness\n\ + adds r1, r6, r0\n\ + ldrb r0, [r1]\n\ + ldr r7, =gTypeEffectiveness\n\ + cmp r0, 0xFF\n\ + beq _081900A4\n\ + adds r4, r1, 0\n\ +_0819003A:\n\ + ldrb r0, [r4]\n\ + cmp r0, 0xFE\n\ + beq _08190096\n\ + ldrb r0, [r4]\n\ + ldr r1, [sp, 0x4]\n\ + cmp r0, r1\n\ + bne _08190096\n\ + ldrb r0, [r4, 0x1]\n\ + adds r5, r6, 0x1\n\ + cmp r0, r10\n\ + bne _0819006C\n\ + adds r1, r6, 0x2\n\ + mov r0, r8\n\ + cmp r0, 0x19\n\ + bne _0819005E\n\ + ldrb r0, [r4, 0x2]\n\ + cmp r0, 0x28\n\ + bne _0819006C\n\ +_0819005E:\n\ + adds r0, r1, r7\n\ + ldrb r0, [r0]\n\ + muls r0, r2\n\ + movs r1, 0xA\n\ + bl __divsi3\n\ + adds r2, r0, 0\n\ +_0819006C:\n\ + adds r0, r5, r7\n\ + ldrb r0, [r0]\n\ + cmp r0, r9\n\ + bne _08190096\n\ + cmp r10, r9\n\ + beq _08190096\n\ + adds r1, r6, 0x2\n\ + mov r0, r8\n\ + cmp r0, 0x19\n\ + bne _08190088\n\ + adds r0, r1, r7\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x28\n\ + bne _08190096\n\ +_08190088:\n\ + adds r0, r1, r7\n\ + ldrb r0, [r0]\n\ + muls r0, r2\n\ + movs r1, 0xA\n\ + bl __divsi3\n\ + adds r2, r0, 0\n\ +_08190096:\n\ + adds r4, 0x3\n\ + adds r6, 0x3\n\ + ldr r1, =gTypeEffectiveness\n\ + adds r0, r6, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0xFF\n\ + bne _0819003A\n\ +_081900A4:\n\ + ldr r0, [sp]\n\ + cmp r0, 0x1\n\ + beq _081900E0\n\ +_081900AA:\n\ + ldr r1, [sp]\n\ + cmp r1, 0x1\n\ + bgt _081900BC\n\ + cmp r1, 0\n\ + beq _081900C4\n\ + b _08190154\n\ + .pool\n\ +_081900BC:\n\ + ldr r0, [sp]\n\ + cmp r0, 0x2\n\ + beq _08190114\n\ + b _08190154\n\ +_081900C4:\n\ + cmp r2, 0xA\n\ + beq _08190146\n\ + cmp r2, 0xA\n\ + ble _08190146\n\ + cmp r2, 0x28\n\ + beq _0819014A\n\ + cmp r2, 0x28\n\ + bgt _081900DA\n\ + cmp r2, 0x14\n\ + beq _08190104\n\ + b _08190146\n\ +_081900DA:\n\ + cmp r2, 0x50\n\ + bne _08190146\n\ + b _08190100\n\ +_081900E0:\n\ + cmp r2, 0xA\n\ + beq _08190104\n\ + cmp r2, 0xA\n\ + bgt _081900F2\n\ + cmp r2, 0\n\ + beq _08190100\n\ + cmp r2, 0x5\n\ + beq _0819014A\n\ + b _08190146\n\ +_081900F2:\n\ + cmp r2, 0x28\n\ + beq _08190108\n\ + cmp r2, 0x28\n\ + ble _08190146\n\ + cmp r2, 0x50\n\ + beq _0819010E\n\ + b _08190146\n\ +_08190100:\n\ + movs r2, 0x8\n\ + b _08190154\n\ +_08190104:\n\ + movs r2, 0x2\n\ + b _08190154\n\ +_08190108:\n\ + movs r2, 0x2\n\ + negs r2, r2\n\ + b _08190154\n\ +_0819010E:\n\ + movs r2, 0x4\n\ + negs r2, r2\n\ + b _08190154\n\ +_08190114:\n\ + cmp r2, 0xA\n\ + beq _08190146\n\ + cmp r2, 0xA\n\ + bgt _08190126\n\ + cmp r2, 0\n\ + beq _0819013A\n\ + cmp r2, 0x5\n\ + beq _08190140\n\ + b _08190146\n\ +_08190126:\n\ + cmp r2, 0x28\n\ + beq _0819014E\n\ + cmp r2, 0x28\n\ + bgt _08190134\n\ + cmp r2, 0x14\n\ + beq _0819014A\n\ + b _08190146\n\ +_08190134:\n\ + cmp r2, 0x50\n\ + beq _08190152\n\ + b _08190146\n\ +_0819013A:\n\ + movs r2, 0x10\n\ + negs r2, r2\n\ + b _08190154\n\ +_08190140:\n\ + movs r2, 0x8\n\ + negs r2, r2\n\ + b _08190154\n\ +_08190146:\n\ + movs r2, 0\n\ + b _08190154\n\ +_0819014A:\n\ + movs r2, 0x4\n\ + b _08190154\n\ +_0819014E:\n\ + movs r2, 0xC\n\ + b _08190154\n\ +_08190152:\n\ + movs r2, 0x14\n\ +_08190154:\n\ + adds r0, r2, 0\n\ +_08190156:\n\ + add sp, 0x8\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + "); +} +#endif // NONMATCHING + +u8 GetDomeTrainerMonIvs(u16 trainerId) +{ + u8 fixedIv; + if (trainerId <= 99) + fixedIv = 3; + else if (trainerId <= 119) + fixedIv = 6; + else if (trainerId <= 139) + fixedIv = 9; + else if (trainerId <= 159) + fixedIv = 12; + else if (trainerId <= 179) + fixedIv = 15; + else if (trainerId <= 199) + fixedIv = 18; + else if (trainerId <= 219) + fixedIv = 21; + else + fixedIv = 31; + + return fixedIv; +} + +extern const u8 gUnknown_0860D10C[][4]; +extern const u8 gUnknown_0860D14C[]; + +s32 sub_81901A0(s32 arg0, s32 trainerId) +{ + s32 i, j, val; + + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == trainerId) + break; + } + + if (arg0 != 0) + { + if (arg0 == 3) + val = gUnknown_0860D10C[i][arg0] + 8; + else + val = gUnknown_0860D10C[i][arg0] + 4; + + for (j = gUnknown_0860D10C[i][arg0]; j < val; j++) + { + if (gUnknown_0860D14C[j] != i && !gSaveBlock2Ptr->frontier.domeTrainers[gUnknown_0860D14C[j]].unk1) + break; + } + + if (j != val) + return gUnknown_0860D14C[j]; + else + return 0xFF; + } + else + { + if (!gSaveBlock2Ptr->frontier.domeTrainers[gUnknown_0860D10C[i][0]].unk1) + return gUnknown_0860D10C[i][0]; + else + return 0xFF; + } +} + +void sub_8190298(void) +{ + gTrainerBattleOpponent_A = sub_81902AC(); +} + +u16 sub_81902AC(void) +{ + return gSaveBlock2Ptr->frontier.domeTrainers[sub_81901A0(gSaveBlock2Ptr->frontier.field_CB2, 0x3FF)].trainerId; +} + +void sub_81902E4(void) +{ + sub_8162614(gTrainerBattleOpponent_A, 0); +} + +void sub_81902F8(void) +{ + gSaveBlock2Ptr->frontier.field_CA8 = gSpecialVar_0x8005; + VarSet(VAR_TEMP_0, 0); + gSaveBlock2Ptr->frontier.field_CA9_a = 1; + sub_81A4C30(); +} + +void sub_819033C(void) +{ + u8 lvlMode = gSaveBlock2Ptr->frontier.chosenLvl; + u8 battleMode = VarGet(VAR_0x40CE); + + if (gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode] < 999) + gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode]++; + if (gSaveBlock2Ptr->frontier.field_D1C[battleMode][lvlMode] < 999) + gSaveBlock2Ptr->frontier.field_D1C[battleMode][lvlMode]++; + + if (gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode] > gSaveBlock2Ptr->frontier.field_D14[battleMode][lvlMode]) + gSaveBlock2Ptr->frontier.field_D14[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode]; +} + +void sub_81903B8(void) +{ + u8 taskId = CreateTask(sub_8190400, 0); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = TrainerIdToTournamentId(sub_81902AC()); + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 0; + + SetMainCallback2(sub_8194B54); +} + +extern const struct BgTemplate gUnknown_0860CE84[4]; +extern const struct WindowTemplate gUnknown_0860CEB4[]; +extern const u8 gUnknown_08D83D50[]; +extern const u8 gUnknown_08D84970[]; +extern const u8 gUnknown_08D84F00[]; +extern const u8 gUnknown_08D85444[]; +extern const u8 gUnknown_08D85358[]; +extern const u8 gUnknown_08D85600[]; +extern const u8 gUnknown_08D854C8[]; +extern const struct CompressedSpriteSheet gUnknown_0860CF50; +extern const struct SpriteTemplate gUnknown_0860D068; +extern const struct SpriteTemplate gUnknown_0860D050; + +void sub_8190400(u8 taskId) +{ + s32 i; + s32 r5 = gTasks[taskId].data[1]; + s32 r9 = gTasks[taskId].data[2]; + s32 r7 = gTasks[taskId].data[3]; + + switch (gTasks[taskId].data[0]) + { + case 0: + SetHBlankCallback(NULL); + SetVBlankCallback(NULL); + EnableInterrupts(INTR_FLAG_VBLANK); + CpuFill32(0, (void *)VRAM, VRAM_SIZE); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_0860CE84, ARRAY_COUNT(gUnknown_0860CE84)); + InitWindows(gUnknown_0860CEB4); + DeactivateAllTextPrinters(); + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + gBattle_BG3_X = 0; + gBattle_BG3_Y = 0; + if (r9 == 2) + gBattle_BG2_X = 0, gBattle_BG2_Y = 0; + else + gBattle_BG2_X = 0, gBattle_BG2_Y = 160; + + gTasks[taskId].data[0]++; + break; + case 1: + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + SetGpuReg(REG_OFFSET_MOSAIC, 0); + SetGpuReg(REG_OFFSET_WIN0H, 0); + SetGpuReg(REG_OFFSET_WIN0V, 0); + SetGpuReg(REG_OFFSET_WIN1H, 0); + SetGpuReg(REG_OFFSET_WIN1V, 0); + SetGpuReg(REG_OFFSET_WININ, 0); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); + ResetPaletteFade(); + ResetSpriteData(); + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 4; + gTasks[taskId].data[0]++; + break; + case 2: + DecompressAndLoadBgGfxUsingHeap(2, gUnknown_08D83D50, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(2, gUnknown_08D84970, 0x2000, 0, 1); + DecompressAndLoadBgGfxUsingHeap(3, gUnknown_08D84F00, 0x800, 0, 1); + LoadCompressedObjectPic(&gUnknown_0860CF50); + LoadCompressedPalette(gUnknown_08D85358, 0, 0x200); + LoadCompressedPalette(gUnknown_08D85444, 0x100, 0x200); + LoadCompressedPalette(gUnknown_08D85600, 0xF0, 0x20); + if (r9 == 2) + LoadCompressedPalette(gUnknown_08D854C8, 0x50, 0x20); + CpuFill32(0, gPlttBufferFaded, 0x400); + ShowBg(0); + ShowBg(1); + ShowBg(2); + ShowBg(3); + gTasks[taskId].data[0]++; + break; + case 3: + SetVBlankCallback(sub_8194B70); + gUnknown_0203CD78 = AllocZeroed(sizeof(*gUnknown_0203CD78)); + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + gUnknown_0203CD78->arr[i] |= 0xFF; + LoadMonIconPalettes(); + i = CreateTask(sub_8190CD4, 0); + gTasks[i].data[0] = 0; + gTasks[i].data[2] = 0; + gTasks[i].data[3] = r9; + gTasks[i].data[4] = r7; + if (r9 == 2) + { + sub_819314C(0, r5); + gUnknown_0203CD78->arr[16] = 1; + } + else + { + sub_81924E0(0, r5); + } + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP); + if (r9 != 0) + { + r7 = CreateSprite(&gUnknown_0860D068, 120, 4, 0); + StartSpriteAnim(&gSprites[r7], 0); + gSprites[r7].data[0] = i; + + r7 = CreateSprite(&gUnknown_0860D068, 120, 156, 0); + StartSpriteAnim(&gSprites[r7], 1); + gSprites[r7].data[0] = i; + + r7 = CreateSprite(&gUnknown_0860D050, 6, 80, 0); + StartSpriteAnim(&gSprites[r7], 0); + gSprites[r7].data[0] = i; + gSprites[r7].data[1] = 0; + if (r9 == 1) + gSprites[r7].invisible = 1; + + r7 = CreateSprite(&gUnknown_0860D050, 234, 80, 0); + StartSpriteAnim(&gSprites[r7], 1); + gSprites[r7].data[0] = i; + gSprites[r7].data[1] = 1; + } + DestroyTask(taskId); + break; + } +} + +void sub_8190790(struct Sprite *sprite) +{ + sprite->pos1.y += 4; + if (sprite->data[0] != 0) + { + if (sprite->pos1.y >= -32) + sprite->invisible = 0; + if (++sprite->data[1] == 40) + sprite->callback = SpriteCallbackDummy; + } + else + { + if (sprite->pos1.y >= 192) + { + gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; + sub_818D8F0(sprite->data[3]); + } + } +} + +void sub_81907F8(struct Sprite *sprite) +{ + sprite->pos1.y -= 4; + if (sprite->data[0] != 0) + { + if (sprite->pos1.y <= 192) + sprite->invisible = 0; + if (++sprite->data[1] == 40) + sprite->callback = SpriteCallbackDummy; + } + else + { + if (sprite->pos1.y <= -32) + { + gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; + sub_818D8F0(sprite->data[3]); + } + } +} + +void sub_8190860(struct Sprite *sprite) +{ + sprite->pos1.x += 4; + if (sprite->data[0] != 0) + { + if (sprite->pos1.x >= -32) + sprite->invisible = 0; + if (++sprite->data[1] == 64) + sprite->callback = SpriteCallbackDummy; + } + else + { + if (sprite->pos1.x >= 272) + { + gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; + sub_818D8F0(sprite->data[3]); + } + } +} + +void sub_81908CC(struct Sprite *sprite) +{ + sprite->pos1.x -= 4; + if (sprite->data[0] != 0) + { + if (sprite->pos1.x <= 272) + sprite->invisible = 0; + if (++sprite->data[1] == 64) + sprite->callback = SpriteCallbackDummy; + } + else + { + if (sprite->pos1.x <= -32) + { + gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; + sub_818D8F0(sprite->data[3]); + } + } +} + +void sub_8190938(struct Sprite *sprite) +{ + if (!sprite->data[3]) + UpdateMonIconFrame(sprite); +} + +void sub_8190950(struct Sprite *sprite) +{ + if (!sprite->data[3]) + UpdateMonIconFrame(sprite); + sprite->pos1.y += 4; + if (sprite->data[0] != 0) + { + if (sprite->pos1.y >= -16) + sprite->invisible = 0; + if (++sprite->data[1] == 40) + sprite->callback = sub_8190938; + } + else + { + if (sprite->pos1.y >= 176) + { + gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; + sub_80D2EF8(sprite); + } + } +} + +void sub_81909CC(struct Sprite *sprite) +{ + if (!sprite->data[3]) + UpdateMonIconFrame(sprite); + sprite->pos1.y -= 4; + if (sprite->data[0] != 0) + { + if (sprite->pos1.y <= 176) + sprite->invisible = 0; + if (++sprite->data[1] == 40) + sprite->callback = sub_8190938; + } + else + { + if (sprite->pos1.y <= -16) + { + gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; + sub_80D2EF8(sprite); + } + } +} + +void sub_8190A48(struct Sprite *sprite) +{ + if (!sprite->data[3]) + UpdateMonIconFrame(sprite); + sprite->pos1.x += 4; + if (sprite->data[0] != 0) + { + if (sprite->pos1.x >= -16) + sprite->invisible = 0; + if (++sprite->data[1] == 64) + sprite->callback = sub_8190938; + } + else + { + if (sprite->pos1.x >= 256) + { + gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; + sub_80D2EF8(sprite); + } + } +} + +void sub_8190AC4(struct Sprite *sprite) +{ + if (!sprite->data[3]) + UpdateMonIconFrame(sprite); + sprite->pos1.x -= 4; + if (sprite->data[0] != 0) + { + if (sprite->pos1.x <= 256) + sprite->invisible = 0; + if (++sprite->data[1] == 64) + sprite->callback = sub_8190938; + } + else + { + if (sprite->pos1.x <= -16) + { + gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; + sub_80D2EF8(sprite); + } + } +} + +extern const u8 gUnknown_0860D080[]; + +void sub_8190B40(struct Sprite *sprite) +{ + s32 taskId1 = sprite->data[0]; + s32 arrId = gTasks[gTasks[taskId1].data[4]].data[1]; + s32 tournmanetTrainerId = gUnknown_0860D080[arrId]; + s32 r12 = gSaveBlock2Ptr->frontier.field_CB2; + + if (gTasks[taskId1].data[3] == 1) + { + if (sprite->data[1]) + { + if ((gSaveBlock2Ptr->frontier.domeTrainers[tournmanetTrainerId].unk1 + && gUnknown_0203CD78->arr[16] - 1 < gSaveBlock2Ptr->frontier.domeTrainers[tournmanetTrainerId].unk2)) + { + sprite->invisible = 0; + } + else if (!gSaveBlock2Ptr->frontier.domeTrainers[tournmanetTrainerId].unk1 + && gUnknown_0203CD78->arr[16] - 1 < r12) + { + sprite->invisible = 0; + } + else + { + if (gTasks[taskId1].data[0] == 2) + sprite->invisible = 1; + } + } + else + { + if (gUnknown_0203CD78->arr[16] != 0) + { + sprite->invisible = 0; + } + else + { + if (gTasks[taskId1].data[0] == 2) + sprite->invisible = 1; + } + } + } + else + { + if (sprite->data[1]) + { + if (gUnknown_0203CD78->arr[16] > 1) + { + if (gTasks[taskId1].data[0] == 2) + sprite->invisible = 1; + } + else + { + sprite->invisible = 0; + } + } + else + { + if (gUnknown_0203CD78->arr[16] != 0) + { + sprite->invisible = 0; + } + else + { + if (gTasks[taskId1].data[0] == 2) + sprite->invisible = 1; + } + } + } +} + +void sub_8190C6C(struct Sprite *sprite) +{ + s32 taskId1 = sprite->data[0]; + + if (gTasks[taskId1].data[3] == 1) + { + if (gUnknown_0203CD78->arr[16] != 0) + { + if (gTasks[taskId1].data[0] == 2) + sprite->invisible = 1; + } + else + { + sprite->invisible = 0; + } + } + else + { + if (gUnknown_0203CD78->arr[16] != 1) + { + if (gTasks[taskId1].data[0] == 2) + sprite->invisible = 1; + } + else + { + sprite->invisible = 0; + } + } +} diff --git a/src/egg_hatch.c b/src/egg_hatch.c index ab0cd92a2..1c626cc86 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -512,7 +512,7 @@ static void CB2_EggHatch_0(void) gMain.state++; break; case 2: - copy_decompressed_tile_data_to_vram_autofree(0, gBattleTextboxTiles, 0, 0, 0); + DecompressAndLoadBgGfxUsingHeap(0, gBattleTextboxTiles, 0, 0, 0); CopyToBgTilemapBuffer(0, gBattleTextboxTilemap, 0, 0); LoadCompressedPalette(gBattleTextboxPalette, 0, 0x20); gMain.state++; diff --git a/src/evolution_scene.c b/src/evolution_scene.c index 7960d6cba..ae15e79fe 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -1484,7 +1484,7 @@ static void InitMovingBackgroundTask(bool8 isLink) LoadPalette(sUnknown_085B51E4, 0xA0, 0x20); - copy_decompressed_tile_data_to_vram_autofree(1, sUnknown_085B4134, FALSE, 0, 0); + DecompressAndLoadBgGfxUsingHeap(1, sUnknown_085B4134, FALSE, 0, 0); CopyToBgTilemapBuffer(1, sUnknown_085B482C, 0, 0); CopyToBgTilemapBuffer(outerBgId, sUnknown_085B4D10, 0, 0); CopyBgTilemapBufferToVram(1); diff --git a/src/fieldmap.c b/src/fieldmap.c index f57c4b48f..8d1988686 100644 --- a/src/fieldmap.c +++ b/src/fieldmap.c @@ -951,7 +951,7 @@ void copy_tileset_patterns_to_vram2(struct Tileset const *tileset, u16 numTiles, if (!tileset->isCompressed) LoadBgTiles(2, tileset->tiles, numTiles * 32, offset); else - copy_decompressed_tile_data_to_vram_autofree(2, tileset->tiles, numTiles * 32, offset, 0); + DecompressAndLoadBgGfxUsingHeap(2, tileset->tiles, numTiles * 32, offset, 0); } } diff --git a/src/link.c b/src/link.c index b729f86eb..457e44a01 100644 --- a/src/link.c +++ b/src/link.c @@ -1679,7 +1679,7 @@ void CB2_LinkError(void) static void sub_800B080(void) { LoadBgTiles(0, g2BlankTilesGfx, 0x20, 0); - copy_decompressed_tile_data_to_vram_autofree(1, gWirelessLinkDisplayGfx, FALSE, 0, 0); + DecompressAndLoadBgGfxUsingHeap(1, gWirelessLinkDisplayGfx, FALSE, 0, 0); CopyToBgTilemapBuffer(1, gWirelessLinkDisplayTilemap, 0, 0); CopyBgTilemapBufferToVram(1); LoadPalette(gWirelessLinkDisplayPal, 0, 0x20); diff --git a/src/menu.c b/src/menu.c index eda9513ba..8a4b4fce5 100644 --- a/src/menu.c +++ b/src/menu.c @@ -1801,7 +1801,7 @@ void *decompress_and_copy_tile_data_to_vram(u8 bgId, const void *src, int size, return NULL; } -void copy_decompressed_tile_data_to_vram_autofree(u8 bgId, const void *src, int size, u16 offset, u8 mode) +void DecompressAndLoadBgGfxUsingHeap(u8 bgId, const void *src, int size, u16 offset, u8 mode) { int sizeOut; void *ptr = malloc_and_decompress(src, &sizeOut); diff --git a/src/pokedex.c b/src/pokedex.c index 0d73a9fe1..2a0033306 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -1377,7 +1377,7 @@ bool8 sub_80BC514(u8 a) SetBgTilemapBuffer(2, AllocZeroed(0x800)); SetBgTilemapBuffer(1, AllocZeroed(0x800)); SetBgTilemapBuffer(0, AllocZeroed(0x800)); - copy_decompressed_tile_data_to_vram_autofree(3, gPokedexMenu_Gfx, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, gPokedexMenu_Gfx, 0x2000, 0, 0); CopyToBgTilemapBuffer(1, gUnknown_08DC2C5C, 0, 0); CopyToBgTilemapBuffer(3, gUnknown_08DC2DAC, 0, 0); if (a == 0) @@ -2518,7 +2518,7 @@ void sub_80BEA24(u8 taskId) } break; case 1: - copy_decompressed_tile_data_to_vram_autofree(3, gPokedexMenu_Gfx, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, gPokedexMenu_Gfx, 0x2000, 0, 0); CopyToBgTilemapBuffer(3, gUnknown_08DC3080, 0, 0); FillWindowPixelBuffer(0, 0); PutWindowTilemap(0); @@ -2813,7 +2813,7 @@ void sub_80BF250(u8 taskId) } break; case 1: - copy_decompressed_tile_data_to_vram_autofree(3, &gPokedexMenu_Gfx, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, &gPokedexMenu_Gfx, 0x2000, 0, 0); CopyToBgTilemapBuffer(3, &gUnknown_08DC3198, 0, 0); FillWindowPixelBuffer(0, 0); PutWindowTilemap(0); @@ -3007,7 +3007,7 @@ void sub_80BF82C(u8 taskId) } break; case 1: - copy_decompressed_tile_data_to_vram_autofree(3, gPokedexMenu_Gfx, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, gPokedexMenu_Gfx, 0x2000, 0, 0); CopyToBgTilemapBuffer(3, gUnknown_08DC2E6C, 0, 0); FillWindowPixelBuffer(0, 0); PutWindowTilemap(0); @@ -3354,7 +3354,7 @@ void sub_80BFE38(u8 taskId) } break; case 1: - copy_decompressed_tile_data_to_vram_autofree(3, gPokedexMenu_Gfx, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, gPokedexMenu_Gfx, 0x2000, 0, 0); CopyToBgTilemapBuffer(3, gUnknown_08DC3080, 0, 0); FillWindowPixelBuffer(0, 0); PutWindowTilemap(0); @@ -4397,7 +4397,7 @@ void sub_80C12E0(u8 taskId) InitWindows(gUnknown_0856F008); DeactivateAllTextPrinters(); PutWindowTilemap(0); - copy_decompressed_tile_data_to_vram_autofree(3, gPokedexSearchMenu_Gfx, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(3, gPokedexSearchMenu_Gfx, 0x2000, 0, 0); if (!IsNationalPokedexEnabled()) CopyToBgTilemapBuffer(3, gPokedexSearch2_Tilemap, 0, 0); -- cgit v1.2.3 From f7fd5ce75c481ff1f019d661b4e817c6a8d1a34f Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 18 Aug 2018 18:23:40 +0200 Subject: Match one of the hardest battle dome functions --- src/battle_frontier_1.c | 1829 +++++++++++++++++++++++------------------------ 1 file changed, 889 insertions(+), 940 deletions(-) (limited to 'src') diff --git a/src/battle_frontier_1.c b/src/battle_frontier_1.c index d217bfa60..c977f7d76 100644 --- a/src/battle_frontier_1.c +++ b/src/battle_frontier_1.c @@ -36,21 +36,22 @@ struct Unknown_0203BC8C_Struct struct Unknown_0203CD78_Struct { u8 arr[16]; - u8 unk_11; + u8 unk_10; + u8 unk_11[3]; }; -extern struct Unknown_0203BC8C_Struct *gFacilityTrainerMons; - extern void sub_81B8558(void); extern u32 sub_81A39C4(void); extern u16 sub_8162548(u8, u8); -extern u16 sub_8163524(u16); +extern u16 RandomizeFacilityTrainerMonId(u16); extern u8 GetFrontierEnemyMonLevel(void); extern void sub_8195898(u8 *dst, u16 trainerId); extern u16 sub_81A5060(u8, u8); extern void sub_8162614(u16, u8); extern void sub_81A4C30(void); extern u16 sub_818D8F0(u16); +extern bool8 sub_81A3610(void); +extern u16 sub_81A4FF0(u8); extern u8 gUnknown_0203CEF8[]; extern u32 gUnknown_0203CD70; @@ -63,16 +64,37 @@ extern u16 gBattle_BG2_X; extern u16 gBattle_BG2_Y; extern u16 gBattle_BG3_X; extern u16 gBattle_BG3_Y; +extern struct Unknown_0203BC8C_Struct *gFacilityTrainerMons; extern struct Unknown_0203CD78_Struct *gUnknown_0203CD78; extern void (* const gUnknown_0860D090[])(void); extern const u32 gUnknown_0860D0EC[][2]; extern const u32 gUnknown_0860D0FC[][2]; extern const u16 gBattleFrontierHeldItems[]; +extern const u8 gUnknown_0860D10C[][4]; +extern const u8 gUnknown_0860D14C[]; +extern const struct BgTemplate gUnknown_0860CE84[4]; +extern const struct WindowTemplate gUnknown_0860CEB4[]; +extern const struct CompressedSpriteSheet gUnknown_0860CF50; +extern const struct SpriteTemplate gUnknown_0860D068; +extern const struct SpriteTemplate gUnknown_0860D050; +extern const u8 gUnknown_0860D080[]; +extern const u8 gUnknown_0860D15C[]; +extern const u8 gUnknown_0860D3F1[][2]; + +// gfx +extern const u8 gUnknown_08D83D50[]; +extern const u8 gUnknown_08D84970[]; +extern const u8 gUnknown_08D84F00[]; +extern const u8 gUnknown_08D85444[]; +extern const u8 gUnknown_08D85358[]; +extern const u8 gUnknown_08D85600[]; +extern const u8 gUnknown_08D854C8[]; // This file's functions. u8 GetDomeTrainerMonIvs(u16 trainerId); -void sub_818F720(u16 species, s32 level, s32 ivs, u8 evBits, u8 nature, s32 *stats); +void SwapDomeTrainers(s32 id1, s32 id2, u16 *statsArray); +void CalcDomeMonStats(u16 species, s32 level, s32 ivs, u8 evBits, u8 nature, s32 *stats); void CreateDomeTrainerMons(u16 tournamentTrainerId); u16 TrainerIdToTournamentId(u16 trainerId); s32 sub_818FC78(u16 tournamentTrainerId); @@ -83,10 +105,13 @@ s32 sub_818FEB4(s32 *arr, bool8 arg1); u16 sub_81902AC(void); void sub_8190400(u8 taskId); void sub_8190CD4(u8 taskId); +void sub_8194220(u8 taskId); void sub_8194B54(void); void sub_8194B70(void); void sub_819314C(u8, u8); void sub_81924E0(u8, u8); +u8 sub_819221C(u8 taskId); +s32 sub_8192F08(u8, u8*); // code void sub_818E9AC(void) @@ -244,33 +269,34 @@ void sub_818ED28(void) } } -#ifdef NONMATCHING -// Not even close, this function is insane. -void sub_818F02C(void) +void SetDomeTrainersAndMons(void) { - s32 i, j, k, l; - u32 array[16]; - u32 var_28; - u32 var_24; - s32 var_38; + s32 i, j, k; + s32 monLevel; + s32 species[3]; s32 monTypesBits, monTypesCount; - u32 var_54 = 0; - u32 var_50 = 0; - u32 var_4C = 0; - u32 *var_40 = AllocZeroed(0x20); - u16 *var_44 = AllocZeroed(0x18); - u32 var_48; + s32 trainerId; + s32 monTournamentId; + u16 *statSums; + s32 *statValues; + u8 ivs = 0; + + species[0] = 0; + species[1] = 0; + species[2] = 0; + statSums = AllocZeroed(sizeof(u16) * DOME_TOURNAMENT_TRAINERS_COUNT); + statValues = AllocZeroed(sizeof(s32) * 6); gSaveBlock2Ptr->frontier.field_D0A = gSaveBlock2Ptr->frontier.chosenLvl + 1; gSaveBlock2Ptr->frontier.field_D0B = VarGet(VAR_0x40CE) + 1; - gSaveBlock2Ptr->frontier.domeTrainers[0].trainerId = 0x3FF; + gSaveBlock2Ptr->frontier.domeTrainers[0].trainerId = TRAINER_PLAYER; gSaveBlock2Ptr->frontier.domeTrainers[0].unk1 = 0; gSaveBlock2Ptr->frontier.domeTrainers[0].unk2 = 0; gSaveBlock2Ptr->frontier.domeTrainers[0].unk3 = 0; for (i = 0; i < 3; i++) { - gSaveBlock2Ptr->frontier.domeMonId[i] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1], MON_DATA_SPECIES, NULL); + gSaveBlock2Ptr->frontier.domeMonId[0][i] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1], MON_DATA_SPECIES, NULL); for (j = 0; j < 4; j++) gSaveBlock2Ptr->frontier.field_EFC[i].moves[j] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1], MON_DATA_MOVE1 + j, NULL); for (j = 0; j < 6; j++) @@ -279,939 +305,165 @@ void sub_818F02C(void) gSaveBlock2Ptr->frontier.field_EFC[i].nature = GetNature(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1]); } - var_28 = 4; - var_24 = 6; - for (l = j; l < 16; l++) + for (i = 1; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) { - u16 val; - if (l > 5) + if (i > 5) { - while (1) + do { - val = sub_8162548(sub_81A39C4(), 0); - for (k = 1; k < l; k++) + trainerId = sub_8162548(sub_81A39C4(), 0); + for (j = 1; j < i; j++) { - if (gSaveBlock2Ptr->frontier.domeTrainers[k].trainerId == val) + if (gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId == trainerId) break; } - if (k != l) - { - gSaveBlock2Ptr->frontier.domeTrainers[var_28].trainerId = val; - break; - } - } + } while (j != i); + gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId = trainerId; } else { - while (1) + do { - val = sub_8162548(sub_81A39C4() + 1, 0); - for (k = 1; k < l; k++) + trainerId = sub_8162548(sub_81A39C4() + 1, 0); + for (j = 1; j < i; j++) { - if (gSaveBlock2Ptr->frontier.domeTrainers[k].trainerId == val) + if (gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId == trainerId) break; } - if (k != l) - { - gSaveBlock2Ptr->frontier.domeTrainers[var_28].trainerId = val; - break; - } - } + } while (j != i); + gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId = trainerId; } - for (var_38 = 0; var_38 < 3; var_38++) + for (j = 0; j < 3; j++) { - u16 val2; + // Make sure the mon is valid. do { - val2 = sub_8163524(val); - for (i = 0; i < l; i++) + monTournamentId = RandomizeFacilityTrainerMonId(trainerId); + for (k = 0; k < j; k++) { - if (gSaveBlock2Ptr->frontier.domeMonId[i] == val2) - break; - if (var_54 == gFacilityTrainerMons[val2].field_0) - break; - if (var_50 == gFacilityTrainerMons[val2].field_0) - break; - if (gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i]].field_A == gFacilityTrainerMons[val2].field_A) + s32 checkingMonId = gSaveBlock2Ptr->frontier.domeMonId[i][k]; + if (checkingMonId == monTournamentId + || species[0] == gFacilityTrainerMons[monTournamentId].species + || species[1] == gFacilityTrainerMons[monTournamentId].species + || gFacilityTrainerMons[checkingMonId].itemTableId == gFacilityTrainerMons[monTournamentId].itemTableId) break; } - } while (i != var_38); + } while (k != j); - gSaveBlock2Ptr->frontier.domeMonId[var_24] = val2; - array[var_38] = gFacilityTrainerMons[val2].field_0; + gSaveBlock2Ptr->frontier.domeMonId[i][j] = monTournamentId; + species[j] = gFacilityTrainerMons[monTournamentId].species; } - gSaveBlock2Ptr->frontier.domeTrainers[var_28].unk1 = 0; - gSaveBlock2Ptr->frontier.domeTrainers[var_28].unk2 = 0; - gSaveBlock2Ptr->frontier.domeTrainers[var_28].unk3 = 0; + gSaveBlock2Ptr->frontier.domeTrainers[i].unk1 = 0; + gSaveBlock2Ptr->frontier.domeTrainers[i].unk2 = 0; + gSaveBlock2Ptr->frontier.domeTrainers[i].unk3 = 0; } + monTypesBits = 0; + statSums[0] = 0; for (i = 0; i < 3; i++) { - struct Pokemon *mon = &gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1]; - var_44[0] += GetMonData(mon, MON_DATA_ATK, NULL); - var_44[0] += GetMonData(mon, MON_DATA_DEF, NULL); - var_44[0] += GetMonData(mon, MON_DATA_SPATK, NULL); - var_44[0] += GetMonData(mon, MON_DATA_SPDEF, NULL); - var_44[0] += GetMonData(mon, MON_DATA_SPEED, NULL); - var_44[0] += GetMonData(mon, MON_DATA_MAX_HP, NULL); - monTypesBits |= gBitTable[gBaseStats[GetMonData(mon, MON_DATA_SPECIES, NULL)].type1]; - monTypesBits |= gBitTable[gBaseStats[GetMonData(mon, MON_DATA_SPECIES, NULL)].type2]; + trainerId = gSaveBlock2Ptr->frontier.field_CAA[i] - 1; // Great variable choice, gamefreak. + statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_ATK, NULL); + statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_DEF, NULL); + statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPATK, NULL); + statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPDEF, NULL); + statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPEED, NULL); + statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_MAX_HP, NULL); + monTypesBits |= gBitTable[gBaseStats[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].type1]; + monTypesBits |= gBitTable[gBaseStats[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].type2]; } - for (monTypesCount = 0, i = 0; i < 31; i++) + for (monTypesCount = 0, j = 0; j < 32; j++) { if (monTypesBits & 1) monTypesCount++; monTypesBits >>= 1; } - var_48 = GetFrontierEnemyMonLevel(); - var_44[0] += (monTypesCount * var_48) / 20; + monLevel = GetFrontierEnemyMonLevel(); + statSums[0] += (monTypesCount * monLevel) / 20; - for (i = 0; i < 16; i++) + for (i = 1; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) { - u8 r8; - - var_44[i + 1] = 0; - r8 = GetDomeTrainerMonIvs(gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); + monTypesBits = 0; + statSums[i] = 0; + ivs = GetDomeTrainerMonIvs(gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); for (j = 0; j < 3; j++) { - sub_818F720(gSaveBlock2Ptr->frontier.domeMonId[i]); + CalcDomeMonStats(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species, + monLevel, ivs, + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].evSpread, + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].nature, + statValues); + + statSums[i] += statValues[STAT_ATK]; + statSums[i] += statValues[STAT_DEF]; + statSums[i] += statValues[STAT_SPATK]; + statSums[i] += statValues[STAT_SPDEF]; + statSums[i] += statValues[STAT_SPEED]; + statSums[i] += statValues[STAT_HP]; + monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species].type1]; + monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species].type2]; + } + + for (monTypesCount = 0, j = 0; j < 32; j++) + { + if (monTypesBits & 1) + monTypesCount++; + monTypesBits >>= 1; } + statSums[i] += (monTypesCount * monLevel) / 20; } - Free(var_44); - Free(var_40); -} -#else -NAKED -void sub_818F02C(void) -{ - asm_unified("\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x3C\n\ - movs r0, 0\n\ - str r0, [sp, 0x8]\n\ - str r0, [sp, 0xC]\n\ - str r0, [sp, 0x10]\n\ - movs r0, 0x20\n\ - bl AllocZeroed\n\ - str r0, [sp, 0x18]\n\ - movs r0, 0x18\n\ - bl AllocZeroed\n\ - str r0, [sp, 0x1C]\n\ - ldr r4, =gSaveBlock2Ptr\n\ - ldr r1, [r4]\n\ - ldr r2, =0x00000ca9\n\ - adds r0, r1, r2\n\ - ldrb r0, [r0]\n\ - lsls r0, 30\n\ - lsrs r0, 30\n\ - adds r0, 0x1\n\ - ldr r3, =0x00000d0a\n\ - adds r1, r3\n\ - strb r0, [r1]\n\ - ldr r0, =0x000040ce\n\ - bl VarGet\n\ - ldr r1, [r4]\n\ - adds r0, 0x1\n\ - ldr r5, =0x00000d0b\n\ - adds r1, r5\n\ - strb r0, [r1]\n\ - ldr r2, [r4]\n\ - ldr r7, =0x00000d24\n\ - adds r3, r2, r7\n\ - ldrh r0, [r3]\n\ - ldr r5, =0x000003ff\n\ - adds r1, r5, 0\n\ - orrs r0, r1\n\ - strh r0, [r3]\n\ - ldr r3, =0x00000d25\n\ - adds r2, r3\n\ - ldrb r1, [r2]\n\ - movs r0, 0x5\n\ - negs r0, r0\n\ - ands r0, r1\n\ - strb r0, [r2]\n\ - ldr r1, [r4]\n\ - adds r1, r3\n\ - ldrb r2, [r1]\n\ - movs r0, 0x19\n\ - negs r0, r0\n\ - ands r0, r2\n\ - strb r0, [r1]\n\ - ldr r1, [r4]\n\ - adds r1, r3\n\ - ldrb r2, [r1]\n\ - movs r0, 0x1F\n\ - ands r0, r2\n\ - strb r0, [r1]\n\ - movs r7, 0\n\ - mov r10, r7\n\ - mov r8, r4\n\ - ldr r0, =gBattleScripting + 0x14\n\ - mov r9, r0\n\ - movs r4, 0\n\ -_0818F0BA:\n\ - mov r1, r8\n\ - ldr r0, [r1]\n\ - ldr r2, =0x00000caa\n\ - adds r0, r2\n\ - adds r0, r4\n\ - ldrh r0, [r0]\n\ - movs r3, 0x64\n\ - muls r0, r3\n\ - add r0, r9\n\ - movs r1, 0xB\n\ - movs r2, 0\n\ - bl GetMonData\n\ - mov r5, r8\n\ - ldr r1, [r5]\n\ - ldr r7, =0x00000d64\n\ - adds r1, r7\n\ - adds r1, r4\n\ - strh r0, [r1]\n\ - movs r5, 0\n\ - mov r0, r10\n\ - lsls r7, r0, 4\n\ - adds r6, r7, 0\n\ -_0818F0E8:\n\ - mov r1, r8\n\ - ldr r0, [r1]\n\ - ldr r2, =0x00000caa\n\ - adds r0, r2\n\ - adds r0, r4\n\ - ldrh r0, [r0]\n\ - movs r3, 0x64\n\ - muls r0, r3\n\ - add r0, r9\n\ - adds r1, r5, 0\n\ - adds r1, 0xD\n\ - movs r2, 0\n\ - bl GetMonData\n\ - mov r2, r8\n\ - ldr r1, [r2]\n\ - ldr r3, =0x00000efc\n\ - adds r1, r3\n\ - adds r1, r6\n\ - strh r0, [r1]\n\ - adds r6, 0x2\n\ - adds r5, 0x1\n\ - cmp r5, 0x3\n\ - ble _0818F0E8\n\ - movs r5, 0\n\ - ldr r6, =gSaveBlock2Ptr\n\ -_0818F11C:\n\ - ldr r0, [r6]\n\ - ldr r1, =0x00000caa\n\ - adds r0, r1\n\ - adds r0, r4\n\ - ldrh r0, [r0]\n\ - movs r2, 0x64\n\ - muls r0, r2\n\ - add r0, r9\n\ - adds r1, r5, 0\n\ - adds r1, 0x1A\n\ - movs r2, 0\n\ - bl GetMonData\n\ - ldr r1, [r6]\n\ - adds r2, r5, r7\n\ - ldr r3, =0x00000f04\n\ - adds r1, r3\n\ - adds r1, r2\n\ - strb r0, [r1]\n\ - adds r5, 0x1\n\ - cmp r5, 0x5\n\ - ble _0818F11C\n\ - mov r5, r8\n\ - ldr r0, [r5]\n\ - ldr r1, =0x00000caa\n\ - adds r0, r1\n\ - adds r0, r4\n\ - ldrh r0, [r0]\n\ - movs r2, 0x64\n\ - muls r0, r2\n\ - add r0, r9\n\ - bl GetNature\n\ - ldr r1, [r5]\n\ - adds r1, r7\n\ - ldr r3, =0x00000f0a\n\ - adds r1, r3\n\ - strb r0, [r1]\n\ - adds r4, 0x2\n\ - movs r5, 0x1\n\ - add r10, r5\n\ - mov r7, r10\n\ - cmp r7, 0x2\n\ - ble _0818F0BA\n\ - mov r10, r5\n\ - movs r0, 0x4\n\ - str r0, [sp, 0x34]\n\ - movs r1, 0x6\n\ - str r1, [sp, 0x38]\n\ -_0818F17E:\n\ - mov r2, r10\n\ - cmp r2, 0x5\n\ - ble _0818F22C\n\ -_0818F184:\n\ - bl sub_81A39C4\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - movs r1, 0\n\ - bl sub_8162548\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - movs r5, 0x1\n\ - cmp r5, r10\n\ - bge _0818F1CA\n\ - ldr r3, =gSaveBlock2Ptr\n\ - ldr r0, [r3]\n\ - ldr r7, =0x00000d28\n\ - adds r0, r7\n\ - ldrh r0, [r0]\n\ - lsls r0, 22\n\ - lsrs r0, 22\n\ - adds r2, r3, 0\n\ - cmp r0, r4\n\ - beq _0818F1CA\n\ - ldr r3, =0x00000d24\n\ -_0818F1B2:\n\ - adds r5, 0x1\n\ - cmp r5, r10\n\ - bge _0818F1CA\n\ - ldr r0, [r2]\n\ - lsls r1, r5, 2\n\ - adds r0, r1\n\ - adds r0, r3\n\ - ldrh r0, [r0]\n\ - lsls r0, 22\n\ - lsrs r0, 22\n\ - cmp r0, r4\n\ - bne _0818F1B2\n\ -_0818F1CA:\n\ - cmp r5, r10\n\ - bne _0818F184\n\ - ldr r0, =gSaveBlock2Ptr\n\ - ldr r3, [r0]\n\ - ldr r1, [sp, 0x34]\n\ - adds r3, r1\n\ - ldr r2, =0x00000d24\n\ - adds r3, r2\n\ - ldr r5, =0x000003ff\n\ - adds r0, r5, 0\n\ - adds r2, r4, 0\n\ - ands r2, r0\n\ - ldrh r0, [r3]\n\ - ldr r7, =0xfffffc00\n\ - adds r1, r7, 0\n\ - b _0818F292\n\ - .pool\n\ -_0818F22C:\n\ - bl sub_81A39C4\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - movs r1, 0\n\ - bl sub_8162548\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - movs r5, 0x1\n\ - cmp r5, r10\n\ - bge _0818F274\n\ - ldr r1, =gSaveBlock2Ptr\n\ - ldr r0, [r1]\n\ - ldr r2, =0x00000d28\n\ - adds r0, r2\n\ - ldrh r0, [r0]\n\ - lsls r0, 22\n\ - lsrs r0, 22\n\ - adds r2, r1, 0\n\ - cmp r0, r4\n\ - beq _0818F274\n\ - ldr r3, =0x00000d24\n\ -_0818F25C:\n\ - adds r5, 0x1\n\ - cmp r5, r10\n\ - bge _0818F274\n\ - ldr r0, [r2]\n\ - lsls r1, r5, 2\n\ - adds r0, r1\n\ - adds r0, r3\n\ - ldrh r0, [r0]\n\ - lsls r0, 22\n\ - lsrs r0, 22\n\ - cmp r0, r4\n\ - bne _0818F25C\n\ -_0818F274:\n\ - cmp r5, r10\n\ - bne _0818F22C\n\ - ldr r5, =gSaveBlock2Ptr\n\ - ldr r3, [r5]\n\ - ldr r7, [sp, 0x34]\n\ - adds r3, r7\n\ - ldr r0, =0x00000d24\n\ - adds r3, r0\n\ - ldr r1, =0x000003ff\n\ - adds r0, r1, 0\n\ - adds r2, r4, 0\n\ - ands r2, r0\n\ - ldrh r0, [r3]\n\ - ldr r5, =0xfffffc00\n\ - adds r1, r5, 0\n\ -_0818F292:\n\ - ands r0, r1\n\ - orrs r0, r2\n\ - strh r0, [r3]\n\ - movs r5, 0\n\ - lsls r4, 16\n\ - str r4, [sp, 0x2C]\n\ - ldr r7, [sp, 0x38]\n\ - str r7, [sp, 0x20]\n\ -_0818F2A2:\n\ - lsls r0, r5, 1\n\ - mov r9, r0\n\ - adds r1, r5, 0x1\n\ - str r1, [sp, 0x24]\n\ - lsls r2, r5, 2\n\ - str r2, [sp, 0x28]\n\ -_0818F2AE:\n\ - ldr r3, [sp, 0x2C]\n\ - lsrs r0, r3, 16\n\ - bl sub_8163524\n\ - lsls r0, 16\n\ - lsrs r6, r0, 16\n\ - movs r7, 0\n\ - cmp r7, r5\n\ - bge _0818F300\n\ - ldr r0, =gSaveBlock2Ptr\n\ - ldr r0, [r0]\n\ - ldr r1, [sp, 0x8]\n\ - mov r8, r1\n\ - ldr r2, [sp, 0xC]\n\ - mov r12, r2\n\ - ldr r3, =0x00000d64\n\ - adds r0, r3\n\ - ldr r1, [sp, 0x20]\n\ - adds r4, r1, r0\n\ -_0818F2D4:\n\ - ldrh r3, [r4]\n\ - cmp r3, r6\n\ - beq _0818F300\n\ - ldr r2, =gFacilityTrainerMons\n\ - ldr r1, [r2]\n\ - lsls r0, r6, 4\n\ - adds r2, r0, r1\n\ - ldrh r0, [r2]\n\ - cmp r8, r0\n\ - beq _0818F300\n\ - cmp r12, r0\n\ - beq _0818F300\n\ - lsls r0, r3, 4\n\ - adds r0, r1\n\ - ldrb r0, [r0, 0xA]\n\ - ldrb r2, [r2, 0xA]\n\ - cmp r0, r2\n\ - beq _0818F300\n\ - adds r4, 0x2\n\ - adds r7, 0x1\n\ - cmp r7, r5\n\ - blt _0818F2D4\n\ -_0818F300:\n\ - cmp r7, r5\n\ - bne _0818F2AE\n\ - ldr r3, =gSaveBlock2Ptr\n\ - ldr r0, [r3]\n\ - ldr r1, [sp, 0x38]\n\ - add r1, r9\n\ - ldr r5, =0x00000d64\n\ - adds r0, r5\n\ - adds r0, r1\n\ - strh r6, [r0]\n\ - ldr r2, [sp, 0x28]\n\ - add r2, sp\n\ - adds r2, 0x8\n\ - ldr r0, =gFacilityTrainerMons\n\ - ldr r1, [r0]\n\ - lsls r0, r6, 4\n\ - adds r0, r1\n\ - ldrh r0, [r0]\n\ - str r0, [r2]\n\ - ldr r5, [sp, 0x24]\n\ - cmp r5, 0x2\n\ - ble _0818F2A2\n\ - ldr r2, [r3]\n\ - ldr r7, [sp, 0x34]\n\ - adds r2, r7\n\ - ldr r0, =0x00000d25\n\ - adds r2, r0\n\ - ldrb r0, [r2]\n\ - movs r3, 0x5\n\ - negs r3, r3\n\ - adds r1, r3, 0\n\ - ands r0, r1\n\ - strb r0, [r2]\n\ - ldr r5, =gSaveBlock2Ptr\n\ - ldr r2, [r5]\n\ - adds r2, r7\n\ - ldr r7, =0x00000d25\n\ - adds r2, r7\n\ - ldrb r0, [r2]\n\ - subs r3, 0x14\n\ - adds r1, r3, 0\n\ - ands r0, r1\n\ - strb r0, [r2]\n\ - ldr r1, [r5]\n\ - ldr r5, [sp, 0x34]\n\ - adds r1, r5\n\ - adds r1, r7\n\ - ldrb r2, [r1]\n\ - movs r0, 0x1F\n\ - ands r0, r2\n\ - strb r0, [r1]\n\ - adds r5, 0x4\n\ - str r5, [sp, 0x34]\n\ - ldr r7, [sp, 0x38]\n\ - adds r7, 0x6\n\ - str r7, [sp, 0x38]\n\ - movs r0, 0x1\n\ - add r10, r0\n\ - mov r1, r10\n\ - cmp r1, 0xF\n\ - bgt _0818F37C\n\ - b _0818F17E\n\ -_0818F37C:\n\ - movs r7, 0\n\ - ldr r2, [sp, 0x18]\n\ - strh r7, [r2]\n\ - movs r3, 0\n\ - mov r10, r3\n\ - ldr r6, =gBitTable\n\ - ldr r5, =gBaseStats\n\ -_0818F38A:\n\ - ldr r0, =gSaveBlock2Ptr\n\ - ldr r0, [r0]\n\ - mov r2, r10\n\ - lsls r1, r2, 1\n\ - ldr r3, =0x00000caa\n\ - adds r0, r3\n\ - adds r0, r1\n\ - ldrh r0, [r0]\n\ - subs r4, r0, 0x1\n\ - movs r0, 0x64\n\ - muls r4, r0\n\ - ldr r0, =gPlayerParty\n\ - adds r4, r0\n\ - adds r0, r4, 0\n\ - movs r1, 0x3B\n\ - movs r2, 0\n\ - bl GetMonData\n\ - ldr r2, [sp, 0x18]\n\ - ldrh r1, [r2]\n\ - adds r1, r0\n\ - strh r1, [r2]\n\ - adds r0, r4, 0\n\ - movs r1, 0x3C\n\ - movs r2, 0\n\ - bl GetMonData\n\ - ldr r3, [sp, 0x18]\n\ - ldrh r1, [r3]\n\ - adds r1, r0\n\ - strh r1, [r3]\n\ - adds r0, r4, 0\n\ - movs r1, 0x3E\n\ - movs r2, 0\n\ - bl GetMonData\n\ - ldr r2, [sp, 0x18]\n\ - ldrh r1, [r2]\n\ - adds r1, r0\n\ - strh r1, [r2]\n\ - adds r0, r4, 0\n\ - movs r1, 0x3F\n\ - movs r2, 0\n\ - bl GetMonData\n\ - ldr r3, [sp, 0x18]\n\ - ldrh r1, [r3]\n\ - adds r1, r0\n\ - strh r1, [r3]\n\ - adds r0, r4, 0\n\ - movs r1, 0x3D\n\ - movs r2, 0\n\ - bl GetMonData\n\ - ldr r2, [sp, 0x18]\n\ - ldrh r1, [r2]\n\ - adds r1, r0\n\ - strh r1, [r2]\n\ - adds r0, r4, 0\n\ - movs r1, 0x3A\n\ - movs r2, 0\n\ - bl GetMonData\n\ - ldr r3, [sp, 0x18]\n\ - ldrh r1, [r3]\n\ - adds r1, r0\n\ - strh r1, [r3]\n\ - adds r0, r4, 0\n\ - movs r1, 0xB\n\ - movs r2, 0\n\ - bl GetMonData\n\ - lsls r1, r0, 3\n\ - subs r1, r0\n\ - lsls r1, 2\n\ - adds r1, r5\n\ - ldrb r0, [r1, 0x6]\n\ - lsls r0, 2\n\ - adds r0, r6\n\ - ldr r0, [r0]\n\ - orrs r7, r0\n\ - adds r0, r4, 0\n\ - movs r1, 0xB\n\ - movs r2, 0\n\ - bl GetMonData\n\ - lsls r1, r0, 3\n\ - subs r1, r0\n\ - lsls r1, 2\n\ - adds r1, r5\n\ - ldrb r0, [r1, 0x7]\n\ - lsls r0, 2\n\ - adds r0, r6\n\ - ldr r0, [r0]\n\ - orrs r7, r0\n\ - movs r0, 0x1\n\ - add r10, r0\n\ - mov r1, r10\n\ - cmp r1, 0x2\n\ - ble _0818F38A\n\ - movs r4, 0\n\ - movs r1, 0x1\n\ - movs r5, 0x1F\n\ -_0818F458:\n\ - adds r0, r7, 0\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0818F462\n\ - adds r4, 0x1\n\ -_0818F462:\n\ - asrs r7, 1\n\ - subs r5, 0x1\n\ - cmp r5, 0\n\ - bge _0818F458\n\ - bl GetFrontierEnemyMonLevel\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - str r0, [sp, 0x14]\n\ - adds r2, r0, 0\n\ - adds r0, r4, 0\n\ - muls r0, r2\n\ - movs r1, 0x14\n\ - bl __divsi3\n\ - ldr r3, [sp, 0x18]\n\ - ldrh r1, [r3]\n\ - adds r1, r0\n\ - strh r1, [r3]\n\ - movs r5, 0x1\n\ - mov r10, r5\n\ - adds r6, r3, 0\n\ - adds r6, 0x2\n\ - movs r7, 0x2\n\ - str r7, [sp, 0x30]\n\ -_0818F494:\n\ - movs r7, 0\n\ - strh r7, [r6]\n\ - ldr r1, =gSaveBlock2Ptr\n\ - ldr r0, [r1]\n\ - mov r2, r10\n\ - lsls r1, r2, 2\n\ - adds r0, r1\n\ - ldr r3, =0x00000d24\n\ - adds r0, r3\n\ - ldrh r0, [r0]\n\ - lsls r0, 22\n\ - lsrs r0, 22\n\ - bl GetDomeTrainerMonIvs\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ - movs r5, 0\n\ - ldr r0, [sp, 0x30]\n\ - mov r9, r0\n\ -_0818F4BC:\n\ - ldr r1, =gSaveBlock2Ptr\n\ - ldr r0, [r1]\n\ - mov r4, r9\n\ - add r4, r10\n\ - adds r4, r5\n\ - lsls r4, 1\n\ - ldr r2, =0x00000d64\n\ - adds r0, r2\n\ - adds r0, r4\n\ - ldrh r1, [r0]\n\ - ldr r3, =gFacilityTrainerMons\n\ - ldr r0, [r3]\n\ - lsls r1, 4\n\ - adds r1, r0\n\ - ldrh r0, [r1]\n\ - ldrb r3, [r1, 0xB]\n\ - ldrb r1, [r1, 0xC]\n\ - str r1, [sp]\n\ - ldr r1, [sp, 0x1C]\n\ - str r1, [sp, 0x4]\n\ - ldr r1, [sp, 0x14]\n\ - mov r2, r8\n\ - bl sub_818F720\n\ - ldr r2, [sp, 0x1C]\n\ - ldr r1, [r2, 0x4]\n\ - ldrh r0, [r6]\n\ - adds r0, r1\n\ - ldr r1, [r2, 0x8]\n\ - adds r0, r1\n\ - ldr r1, [r2, 0x10]\n\ - adds r0, r1\n\ - ldr r1, [r2, 0x14]\n\ - adds r0, r1\n\ - ldr r1, [r2, 0xC]\n\ - adds r0, r1\n\ - ldr r1, [r2]\n\ - adds r0, r1\n\ - strh r0, [r6]\n\ - ldr r3, =gSaveBlock2Ptr\n\ - ldr r0, [r3]\n\ - ldr r1, =0x00000d64\n\ - adds r0, r1\n\ - adds r0, r4\n\ - ldrh r0, [r0]\n\ - ldr r2, =gFacilityTrainerMons\n\ - ldr r1, [r2]\n\ - lsls r0, 4\n\ - adds r0, r1\n\ - ldrh r0, [r0]\n\ - lsls r1, r0, 3\n\ - subs r1, r0\n\ - lsls r1, 2\n\ - ldr r3, =gBaseStats\n\ - adds r1, r3\n\ - ldrb r0, [r1, 0x6]\n\ - lsls r0, 2\n\ - ldr r2, =gBitTable\n\ - adds r0, r2\n\ - ldr r0, [r0]\n\ - orrs r7, r0\n\ - ldrb r0, [r1, 0x7]\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - ldr r0, [r0]\n\ - orrs r7, r0\n\ - adds r5, 0x1\n\ - cmp r5, 0x2\n\ - ble _0818F4BC\n\ - movs r4, 0\n\ - movs r1, 0x1\n\ - movs r5, 0x1F\n\ -_0818F54C:\n\ - adds r0, r7, 0\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0818F556\n\ - adds r4, 0x1\n\ -_0818F556:\n\ - asrs r7, 1\n\ - subs r5, 0x1\n\ - cmp r5, 0\n\ - bge _0818F54C\n\ - ldr r3, [sp, 0x14]\n\ - adds r0, r4, 0\n\ - muls r0, r3\n\ - movs r1, 0x14\n\ - bl __divsi3\n\ - ldrh r1, [r6]\n\ - adds r1, r0\n\ - strh r1, [r6]\n\ - adds r6, 0x2\n\ - ldr r5, [sp, 0x30]\n\ - adds r5, 0x2\n\ - str r5, [sp, 0x30]\n\ - movs r7, 0x1\n\ - add r10, r7\n\ - mov r0, r10\n\ - cmp r0, 0xF\n\ - ble _0818F494\n\ - movs r1, 0\n\ - mov r10, r1\n\ - ldr r2, =0x000003ff\n\ - mov r8, r2\n\ -_0818F58A:\n\ - mov r5, r10\n\ - adds r5, 0x1\n\ - adds r7, r5, 0\n\ - cmp r5, 0xF\n\ - bgt _0818F626\n\ - mov r3, r10\n\ - lsls r0, r3, 1\n\ - ldr r1, [sp, 0x18]\n\ - adds r6, r0, r1\n\ - lsls r0, r5, 1\n\ - adds r4, r0, r1\n\ -_0818F5A0:\n\ - ldrh r1, [r6]\n\ - ldrh r0, [r4]\n\ - cmp r1, r0\n\ - bcc _0818F5C2\n\ - cmp r1, r0\n\ - bne _0818F61E\n\ - ldr r0, =gSaveBlock2Ptr\n\ - ldr r1, [r0]\n\ - lsls r0, r5, 2\n\ - adds r0, r1, r0\n\ - ldr r2, =0x00000d24\n\ - adds r0, r2\n\ - ldrh r0, [r0]\n\ - lsls r2, r0, 22\n\ - lsrs r0, r2, 22\n\ - cmp r0, r8\n\ - bne _0818F602\n\ -_0818F5C2:\n\ - mov r0, r10\n\ - adds r1, r5, 0\n\ - ldr r2, [sp, 0x18]\n\ - bl sub_818F904\n\ - b _0818F600\n\ - .pool\n\ -_0818F600:\n\ - b _0818F61E\n\ -_0818F602:\n\ - mov r3, r10\n\ - lsls r0, r3, 2\n\ - adds r0, r1, r0\n\ - ldr r1, =0x00000d24\n\ - adds r0, r1\n\ - ldrh r0, [r0]\n\ - lsls r0, 22\n\ - cmp r0, r2\n\ - bls _0818F61E\n\ - mov r0, r10\n\ - adds r1, r5, 0\n\ - ldr r2, [sp, 0x18]\n\ - bl sub_818F904\n\ -_0818F61E:\n\ - adds r4, 0x2\n\ - adds r5, 0x1\n\ - cmp r5, 0xF\n\ - ble _0818F5A0\n\ -_0818F626:\n\ - mov r10, r7\n\ - mov r2, r10\n\ - cmp r2, 0xE\n\ - ble _0818F58A\n\ - bl sub_81A3610\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _0818F6EE\n\ - movs r3, 0\n\ - mov r10, r3\n\ - ldr r0, =gSaveBlock2Ptr\n\ - ldr r1, [r0]\n\ - ldr r4, =0x00000d24\n\ - adds r1, r4\n\ - ldrh r1, [r1]\n\ - lsls r1, 22\n\ - lsrs r1, 22\n\ - ldr r3, =0x000003ff\n\ - adds r2, r0, 0\n\ - ldr r6, =gUnknown_0860D3F1\n\ - cmp r1, r3\n\ - beq _0818F674\n\ - adds r5, r2, 0\n\ -_0818F656:\n\ - movs r7, 0x1\n\ - add r10, r7\n\ - mov r0, r10\n\ - cmp r0, 0xF\n\ - bgt _0818F674\n\ - ldr r0, [r5]\n\ - mov r7, r10\n\ - lsls r1, r7, 2\n\ - adds r0, r1\n\ - adds r0, r4\n\ - ldrh r0, [r0]\n\ - lsls r0, 22\n\ - lsrs r0, 22\n\ - cmp r0, r3\n\ - bne _0818F656\n\ -_0818F674:\n\ - mov r1, r10\n\ - lsls r0, r1, 1\n\ - adds r0, r6\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - beq _0818F6AC\n\ - movs r5, 0\n\ - ldr r2, [r2]\n\ - ldr r3, =0x00000d24\n\ - adds r2, r3\n\ - ldrh r1, [r2]\n\ - ldr r0, =0xfffffc00\n\ - ands r0, r1\n\ - ldr r7, =0x000003fe\n\ - adds r1, r7, 0\n\ - b _0818F6BE\n\ - .pool\n\ -_0818F6AC:\n\ - movs r5, 0x1\n\ - ldr r2, [r2]\n\ - ldr r0, =0x00000d28\n\ - adds r2, r0\n\ - ldrh r1, [r2]\n\ - ldr r0, =0xfffffc00\n\ - ands r0, r1\n\ - ldr r3, =0x000003fe\n\ - adds r1, r3, 0\n\ -_0818F6BE:\n\ - orrs r0, r1\n\ - strh r0, [r2]\n\ - movs r7, 0\n\ - mov r10, r7\n\ - lsls r0, r5, 1\n\ - adds r0, r5\n\ - lsls r4, r0, 1\n\ -_0818F6CC:\n\ - mov r1, r10\n\ - lsls r0, r1, 24\n\ - lsrs r0, 24\n\ - bl sub_81A4FF0\n\ - ldr r1, =gSaveBlock2Ptr\n\ - ldr r1, [r1]\n\ - ldr r2, =0x00000d64\n\ - adds r1, r2\n\ - adds r1, r4\n\ - strh r0, [r1]\n\ - adds r4, 0x2\n\ - movs r3, 0x1\n\ - add r10, r3\n\ - mov r5, r10\n\ - cmp r5, 0x2\n\ - ble _0818F6CC\n\ -_0818F6EE:\n\ - ldr r0, [sp, 0x18]\n\ - bl Free\n\ - ldr r0, [sp, 0x1C]\n\ - bl Free\n\ - add sp, 0x3C\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n\ -\n\ - "); + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT - 1; i++) + { + for (j = i + 1; j < DOME_TOURNAMENT_TRAINERS_COUNT; j++) + { + if (statSums[i] < statSums[j]) + { + SwapDomeTrainers(i, j, statSums); + } + else + { + if (statSums[i] == statSums[j]) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId == TRAINER_PLAYER) + SwapDomeTrainers(i, j, statSums); + else if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId > gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId) + SwapDomeTrainers(i, j, statSums); + } + } + } + } + + if (sub_81A3610()) + { + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == TRAINER_PLAYER) + break; + } + + if (gUnknown_0860D3F1[i][0] != 0) + { + j = 0; + gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId = TRAINER_FRONTIER_BRAIN; + } + else + { + j = 1; + gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId = TRAINER_FRONTIER_BRAIN; + } + + for (i = 0; i < 3; i++) + gSaveBlock2Ptr->frontier.domeMonId[j][i] = sub_81A4FF0(i); + } + + Free(statSums); + Free(statValues); } -#endif // NONMATCHING #define CALC_STAT(base, statIndex) \ { \ @@ -1220,7 +472,7 @@ _0818F6EE:\n\ stats[statIndex] = (u8) ModifyStatByNature(nature, stats[statIndex], statIndex); \ } -void sub_818F720(u16 species, s32 level, s32 ivs, u8 evBits, u8 nature, s32 *stats) +void CalcDomeMonStats(u16 species, s32 level, s32 ivs, u8 evBits, u8 nature, s32 *stats) { s32 i, count; u8 bits; @@ -1266,12 +518,12 @@ void sub_818F720(u16 species, s32 level, s32 ivs, u8 evBits, u8 nature, s32 *sta y = temp; \ } -void sub_818F904(s32 id1, s32 id2, u16 *dst) +void SwapDomeTrainers(s32 id1, s32 id2, u16 *statsArray) { s32 i; u16 temp; - SWAP_16(dst[id1], dst[id2]); + SWAP_16(statsArray[id1], statsArray[id2]); SWAP_16(gSaveBlock2Ptr->frontier.domeTrainers[id1].trainerId, gSaveBlock2Ptr->frontier.domeTrainers[id2].trainerId); for (i = 0; i < 3; i++) @@ -1885,9 +1137,6 @@ u8 GetDomeTrainerMonIvs(u16 trainerId) return fixedIv; } -extern const u8 gUnknown_0860D10C[][4]; -extern const u8 gUnknown_0860D14C[]; - s32 sub_81901A0(s32 arg0, s32 trainerId) { s32 i, j, val; @@ -1932,7 +1181,7 @@ void sub_8190298(void) u16 sub_81902AC(void) { - return gSaveBlock2Ptr->frontier.domeTrainers[sub_81901A0(gSaveBlock2Ptr->frontier.field_CB2, 0x3FF)].trainerId; + return gSaveBlock2Ptr->frontier.domeTrainers[sub_81901A0(gSaveBlock2Ptr->frontier.field_CB2, TRAINER_PLAYER)].trainerId; } void sub_81902E4(void) @@ -1973,19 +1222,6 @@ void sub_81903B8(void) SetMainCallback2(sub_8194B54); } -extern const struct BgTemplate gUnknown_0860CE84[4]; -extern const struct WindowTemplate gUnknown_0860CEB4[]; -extern const u8 gUnknown_08D83D50[]; -extern const u8 gUnknown_08D84970[]; -extern const u8 gUnknown_08D84F00[]; -extern const u8 gUnknown_08D85444[]; -extern const u8 gUnknown_08D85358[]; -extern const u8 gUnknown_08D85600[]; -extern const u8 gUnknown_08D854C8[]; -extern const struct CompressedSpriteSheet gUnknown_0860CF50; -extern const struct SpriteTemplate gUnknown_0860D068; -extern const struct SpriteTemplate gUnknown_0860D050; - void sub_8190400(u8 taskId) { s32 i; @@ -2065,7 +1301,7 @@ void sub_8190400(u8 taskId) if (r9 == 2) { sub_819314C(0, r5); - gUnknown_0203CD78->arr[16] = 1; + gUnknown_0203CD78->unk_10 = 1; } else { @@ -2273,8 +1509,6 @@ void sub_8190AC4(struct Sprite *sprite) } } -extern const u8 gUnknown_0860D080[]; - void sub_8190B40(struct Sprite *sprite) { s32 taskId1 = sprite->data[0]; @@ -2287,12 +1521,12 @@ void sub_8190B40(struct Sprite *sprite) if (sprite->data[1]) { if ((gSaveBlock2Ptr->frontier.domeTrainers[tournmanetTrainerId].unk1 - && gUnknown_0203CD78->arr[16] - 1 < gSaveBlock2Ptr->frontier.domeTrainers[tournmanetTrainerId].unk2)) + && gUnknown_0203CD78->unk_10 - 1 < gSaveBlock2Ptr->frontier.domeTrainers[tournmanetTrainerId].unk2)) { sprite->invisible = 0; } else if (!gSaveBlock2Ptr->frontier.domeTrainers[tournmanetTrainerId].unk1 - && gUnknown_0203CD78->arr[16] - 1 < r12) + && gUnknown_0203CD78->unk_10 - 1 < r12) { sprite->invisible = 0; } @@ -2304,7 +1538,7 @@ void sub_8190B40(struct Sprite *sprite) } else { - if (gUnknown_0203CD78->arr[16] != 0) + if (gUnknown_0203CD78->unk_10 != 0) { sprite->invisible = 0; } @@ -2319,7 +1553,7 @@ void sub_8190B40(struct Sprite *sprite) { if (sprite->data[1]) { - if (gUnknown_0203CD78->arr[16] > 1) + if (gUnknown_0203CD78->unk_10 > 1) { if (gTasks[taskId1].data[0] == 2) sprite->invisible = 1; @@ -2331,7 +1565,7 @@ void sub_8190B40(struct Sprite *sprite) } else { - if (gUnknown_0203CD78->arr[16] != 0) + if (gUnknown_0203CD78->unk_10 != 0) { sprite->invisible = 0; } @@ -2350,7 +1584,7 @@ void sub_8190C6C(struct Sprite *sprite) if (gTasks[taskId1].data[3] == 1) { - if (gUnknown_0203CD78->arr[16] != 0) + if (gUnknown_0203CD78->unk_10 != 0) { if (gTasks[taskId1].data[0] == 2) sprite->invisible = 1; @@ -2362,7 +1596,7 @@ void sub_8190C6C(struct Sprite *sprite) } else { - if (gUnknown_0203CD78->arr[16] != 1) + if (gUnknown_0203CD78->unk_10 != 1) { if (gTasks[taskId1].data[0] == 2) sprite->invisible = 1; @@ -2373,3 +1607,718 @@ void sub_8190C6C(struct Sprite *sprite) } } } + +void sub_8190CD4(u8 taskId) +{ + s32 i; + s32 var; + s32 r9 = gTasks[taskId].data[3]; + s32 taskId2 = gTasks[taskId].data[4]; + s32 arg, arg2; + + switch (gTasks[taskId].data[0]) + { + case 0: + if (!gPaletteFade.active) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); + gTasks[taskId].data[0] = 1; + } + break; + case 1: + if (!gPaletteFade.active) + gTasks[taskId].data[0] = 2; + break; + case 2: + i = sub_819221C(taskId); + switch (i) + { + case 9: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + gTasks[taskId].data[0] = 8; + break; + case 1 ... 8: + gTasks[taskId].data[5] = i; + if (gTasks[taskId].data[2] != 0) + var = 9; + else + var = 0; + + for (i = var; i < var + 9; i++) + { + CopyWindowToVram(i, 2); + FillWindowPixelBuffer(i, 0); + } + gTasks[taskId].data[0] = 3; + break; + case 0: + break; + } + break; + case 3: + i = gTasks[taskId].data[5]; + switch (i) + { + case 1: + case 5: + if (gTasks[taskId].data[2]) + { + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 160; + } + else + { + gBattle_BG0_X = 0; + gBattle_BG0_Y = 160; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + } + + if (i == 1) + { + if (gUnknown_0203CD78->unk_10 == 0) + { + gBattle_BG2_X = 0; + gBattle_BG2_Y = 320; + arg = gUnknown_0860D080[gTasks[taskId2].data[1]]; + sub_81924E0(gTasks[taskId].data[2] | 0x10, arg); + } + else + { + gBattle_BG2_X = 256; + gBattle_BG2_Y = 0; + arg = gUnknown_0860D080[gTasks[taskId2].data[1]]; + sub_81924E0(gTasks[taskId].data[2] | 0x10, arg); + gUnknown_0203CD78->unk_10 = 0; + } + } + else + { + if (gUnknown_0203CD78->unk_10 == 0) + { + arg2 = gTasks[taskId2].data[1] - 16; + sub_8192F08(arg2, gUnknown_0203CD78->unk_11); + gBattle_BG2_X = 0; + gBattle_BG2_Y = 320; + arg = gUnknown_0203CD78->unk_11[0]; + sub_81924E0(gTasks[taskId].data[2] | 0x10, arg); + } + else if (gUnknown_0203CD78->unk_10 == 2) + { + arg2 = gTasks[taskId2].data[1] - 16; + sub_8192F08(arg2, gUnknown_0203CD78->unk_11); + gBattle_BG2_X = 0; + gBattle_BG2_Y = 320; + arg = gUnknown_0203CD78->unk_11[1]; + sub_81924E0(gTasks[taskId].data[2] | 0x10, arg); + } + else + { + gBattle_BG2_X = 256; + gBattle_BG2_Y = 160; + arg2 = gTasks[taskId2].data[1] - 16; + sub_819314C(gTasks[taskId].data[2] | 0x10, arg2); + } + } + + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) + { + if (i < 2) + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + { + gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190790; + gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; + gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; + gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; + gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; + } + } + else + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + { + gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190950; + gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; + gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; + gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; + } + } + } + for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (i < 10) + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + { + gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190790; + gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; + gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; + gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; + gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; + } + } + else + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + { + gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190950; + gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; + gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; + gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; + } + } + } + + gTasks[taskId].data[0] = 4; + gTasks[taskId].data[5] = 0; + break; + case 2: + case 6: + if (gTasks[taskId].data[2]) + { + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 0; + gBattle_BG1_Y = -160; + } + else + { + gBattle_BG0_X = 0; + gBattle_BG0_Y = -160; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + } + + if (i == 2) + { + if (gUnknown_0203CD78->unk_10 == 0) + { + gBattle_BG2_X = 0; + gBattle_BG2_Y = 160; + arg = gUnknown_0860D080[gTasks[taskId2].data[1]]; + sub_81924E0(gTasks[taskId].data[2] | 4, arg); + } + else + { + gBattle_BG2_X = 0; + gBattle_BG2_Y = 0; + arg = gUnknown_0860D080[gTasks[taskId2].data[1]]; + sub_81924E0(gTasks[taskId].data[2] | 4, arg); + gUnknown_0203CD78->unk_10 = 0; + } + } + else + { + if (gUnknown_0203CD78->unk_10 == 0) + { + arg2 = gTasks[taskId2].data[1] - 16; + sub_8192F08(arg2, gUnknown_0203CD78->unk_11); + gBattle_BG2_X = 0; + gBattle_BG2_Y = 160; + arg = gUnknown_0203CD78->unk_11[0]; + sub_81924E0(gTasks[taskId].data[2] | 4, arg); + } + else if (gUnknown_0203CD78->unk_10 == 2) + { + arg2 = gTasks[taskId2].data[1] - 16; + sub_8192F08(arg2, gUnknown_0203CD78->unk_11); + gBattle_BG2_X = 0; + gBattle_BG2_Y = 160; + arg = gUnknown_0203CD78->unk_11[1]; + sub_81924E0(gTasks[taskId].data[2] | 4, arg); + } + else + { + gBattle_BG2_X = 256; + gBattle_BG2_Y = 0; + arg2 = gTasks[taskId2].data[1] - 16; + sub_819314C(gTasks[taskId].data[2] | 4, arg2); + } + } + + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) + { + if (i < 2) + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + { + gSprites[gUnknown_0203CD78->arr[i]].callback = sub_81907F8; + gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; + gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; + gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; + gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; + } + } + else + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + { + gSprites[gUnknown_0203CD78->arr[i]].callback = sub_81909CC; + gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; + gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; + gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; + } + } + } + for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (i < 10) + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + { + gSprites[gUnknown_0203CD78->arr[i]].callback = sub_81907F8; + gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; + gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; + gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; + gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; + } + } + else + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + { + gSprites[gUnknown_0203CD78->arr[i]].callback = sub_81909CC; + gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; + gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; + gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; + } + } + } + + gTasks[taskId].data[0] = 5; + gTasks[taskId].data[5] = 0; + break; + case 3: + if (gTasks[taskId].data[2]) + { + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 256; + gBattle_BG1_Y = 0; + } + else + { + gBattle_BG0_X = 256; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + } + + if (gUnknown_0203CD78->unk_10 == 0) + { + gBattle_BG2_X = 256; + gBattle_BG2_Y = 160; + arg = gUnknown_0860D080[gTasks[taskId2].data[1]]; + sub_81924E0(gTasks[taskId].data[2] | 8, arg); + } + else + { + gBattle_BG2_X = 256; + gBattle_BG2_Y = 0; + arg = gUnknown_0860D15C[(gTasks[taskId2].data[1] * 4) + (gUnknown_0203CD78->unk_10 - 1)]; + sub_819314C(gTasks[taskId].data[2] | 8, arg); + } + + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) + { + if (i < 2) + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + { + gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190860; + gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; + gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; + gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; + gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; + } + } + else + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + { + gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190A48; + gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; + gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; + gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; + } + } + } + for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (i < 10) + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + { + gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190860; + gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; + gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; + gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; + gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; + } + } + else + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + { + gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190A48; + gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; + gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; + gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; + } + } + } + + gTasks[taskId].data[0] = 6; + gTasks[taskId].data[5] = 0; + break; + case 7: + if (gTasks[taskId].data[2]) + { + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 256; + gBattle_BG1_Y = 0; + } + else + { + gBattle_BG0_X = 256; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + } + + if (gUnknown_0203CD78->unk_10 == 0) + { + gBattle_BG2_X = 256; + gBattle_BG2_Y = 160; + arg = gUnknown_0203CD78->unk_11[0]; + sub_81924E0(gTasks[taskId].data[2] | 8, arg); + } + else + { + gBattle_BG2_X = 0; + gBattle_BG2_Y = 160; + arg2 = gTasks[taskId2].data[1] - 16; + sub_819314C(gTasks[taskId].data[2] | 8, arg2); + } + + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) + { + if (i < 2) + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + { + gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190860; + gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; + gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; + gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; + gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; + } + } + else + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + { + gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190A48; + gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; + gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; + gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; + } + } + } + for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (i < 10) + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + { + gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190860; + gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; + gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; + gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; + gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; + } + } + else + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + { + gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190A48; + gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; + gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; + gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; + } + } + } + + gTasks[taskId].data[0] = 6; + gTasks[taskId].data[5] = 0; + break; + case 4: + if (gTasks[taskId].data[2]) + { + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattle_BG1_X = -256; + gBattle_BG1_Y = 0; + } + else + { + gBattle_BG0_X = -256; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + } + + if (gUnknown_0203CD78->unk_10 == 1) + { + gBattle_BG2_X = 0; + gBattle_BG2_Y = 160; + } + else + { + gBattle_BG2_X = 0; + gBattle_BG2_Y = 0; + } + arg = gUnknown_0860D15C[(gUnknown_0203CD78->unk_10 - 1) + (gTasks[taskId2].data[1] * 4)]; + sub_819314C(gTasks[taskId].data[2] | 2, arg); + + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) + { + if (i < 2) + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + { + gSprites[gUnknown_0203CD78->arr[i]].callback = sub_81908CC; + gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; + gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; + gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; + gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; + } + } + else + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + { + gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190AC4; + gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; + gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; + gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; + } + } + } + for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (i < 10) + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + { + gSprites[gUnknown_0203CD78->arr[i]].callback = sub_81908CC; + gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; + gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; + gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; + gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; + } + } + else + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + { + gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190AC4; + gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; + gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; + gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; + } + } + } + + gTasks[taskId].data[0] = 7; + gTasks[taskId].data[5] = 0; + break; + case 8: + if (gTasks[taskId].data[2]) + { + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattle_BG1_X = -256; + gBattle_BG1_Y = 0; + } + else + { + gBattle_BG0_X = -256; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + } + + if (gUnknown_0203CD78->unk_10 == 2) + { + gBattle_BG2_X = 256; + gBattle_BG2_Y = 160; + arg = gUnknown_0203CD78->unk_11[1]; + sub_81924E0(gTasks[taskId].data[2] | 2, arg); + } + else + { + gBattle_BG2_X = 0; + gBattle_BG2_Y = 160; + arg2 = gTasks[taskId2].data[1] - 16; + sub_819314C(gTasks[taskId].data[2] | 2, arg2); + } + + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) + { + if (i < 2) + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + { + gSprites[gUnknown_0203CD78->arr[i]].callback = sub_81908CC; + gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; + gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; + gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; + gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; + } + } + else + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + { + gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190AC4; + gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; + gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; + gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; + } + } + } + for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (i < 10) + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + { + gSprites[gUnknown_0203CD78->arr[i]].callback = sub_81908CC; + gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; + gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; + gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; + gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; + } + } + else + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + { + gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190AC4; + gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; + gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; + gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; + } + } + } + + gTasks[taskId].data[0] = 7; + gTasks[taskId].data[5] = 0; + break; + } + break; + case 4: + if (++gTasks[taskId].data[5] != 41) + { + gBattle_BG0_Y -= 4; + gBattle_BG1_Y -= 4; + gBattle_BG2_Y -= 4; + } + else + { + gTasks[taskId].data[0] = 2; + } + break; + case 5: + if (++gTasks[taskId].data[5] != 41) + { + gBattle_BG0_Y += 4; + gBattle_BG1_Y += 4; + gBattle_BG2_Y += 4; + } + else + { + gTasks[taskId].data[0] = 2; + } + break; + case 6: + if (++gTasks[taskId].data[5] != 65) + { + gBattle_BG0_X -= 4; + gBattle_BG1_X -= 4; + gBattle_BG2_X -= 4; + } + else + { + gTasks[taskId].data[0] = 2; + } + break; + case 7: + if (++gTasks[taskId].data[5] != 65) + { + gBattle_BG0_X += 4; + gBattle_BG1_X += 4; + gBattle_BG2_X += 4; + } + else + { + gTasks[taskId].data[0] = 2; + } + break; + case 8: + if (!gPaletteFade.active) + { + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) + { + if (i < 2) + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + sub_818D8F0(gUnknown_0203CD78->arr[i]); + } + else + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + sub_80D2EF8(&gSprites[gUnknown_0203CD78->arr[i]]); + } + } + for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (i < 10) + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + sub_818D8F0(gUnknown_0203CD78->arr[i]); + } + else + { + if (gUnknown_0203CD78->arr[i] != 0xFF) + sub_80D2EF8(&gSprites[gUnknown_0203CD78->arr[i]]); + } + } + + FreeMonIconPalettes(); + FREE_AND_SET_NULL(gUnknown_0203CD78); + FreeAllWindowBuffers(); + if (r9 == 0) + { + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + } + else + { + i = CreateTask(sub_8194220, 0); + gTasks[i].data[0] = 0; + gTasks[i].data[1] = 0; + gTasks[i].data[2] = 3; + gTasks[i].data[3] = gTasks[taskId].data[4]; + gTasks[i].data[4] = gTasks[taskId2].data[6]; + } + DestroyTask(taskId); + } + break; + } +} -- cgit v1.2.3 From e4649245bac064d700413e922b067ecb50133175 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 18 Aug 2018 19:52:25 +0200 Subject: this file is too much --- src/battle_frontier_1.c | 146 +++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 133 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/battle_frontier_1.c b/src/battle_frontier_1.c index c977f7d76..784ad3656 100644 --- a/src/battle_frontier_1.c +++ b/src/battle_frontier_1.c @@ -18,11 +18,19 @@ #include "palette.h" #include "decompress.h" #include "menu.h" +#include "sound.h" #include "pokemon_icon.h" #include "constants/species.h" #include "constants/moves.h" #include "constants/trainers.h" #include "constants/abilities.h" +#include "constants/songs.h" + +#define DOME_ROUND1 0 +#define DOME_ROUND2 1 +#define DOME_QUARTERFINAL 1 // Different name for the same round. +#define DOME_SEMIFINAL 2 +#define DOME_FINAL 3 struct Unknown_0203BC8C_Struct { @@ -80,6 +88,9 @@ extern const struct SpriteTemplate gUnknown_0860D068; extern const struct SpriteTemplate gUnknown_0860D050; extern const u8 gUnknown_0860D080[]; extern const u8 gUnknown_0860D15C[]; +extern const u8 gUnknown_0860D1A0[]; +extern const u8 gUnknown_0860D19C[]; +extern const u8 gUnknown_0860D1C0[]; extern const u8 gUnknown_0860D3F1[][2]; // gfx @@ -102,7 +113,7 @@ s32 sub_818FCBC(u16 tournamentTrainerId, bool8 arg1); s32 sub_818FDB8(u16 tournamentTrainerId, bool8 arg1); s32 sub_818FFC0(s32 move, s32 species, s32 arg2); s32 sub_818FEB4(s32 *arr, bool8 arg1); -u16 sub_81902AC(void); +u16 TrainerIdOfPlayerOpponent(void); void sub_8190400(u8 taskId); void sub_8190CD4(u8 taskId); void sub_8194220(u8 taskId); @@ -269,7 +280,7 @@ void sub_818ED28(void) } } -void SetDomeTrainersAndMons(void) +void InitDomeTrainers(void) { s32 i, j, k; s32 monLevel; @@ -1137,7 +1148,7 @@ u8 GetDomeTrainerMonIvs(u16 trainerId) return fixedIv; } -s32 sub_81901A0(s32 arg0, s32 trainerId) +s32 TournamentIdOfOpponent(s32 roundId, s32 trainerId) { s32 i, j, val; @@ -1147,14 +1158,14 @@ s32 sub_81901A0(s32 arg0, s32 trainerId) break; } - if (arg0 != 0) + if (roundId != DOME_ROUND1) { - if (arg0 == 3) - val = gUnknown_0860D10C[i][arg0] + 8; + if (roundId == DOME_FINAL) + val = gUnknown_0860D10C[i][roundId] + 8; else - val = gUnknown_0860D10C[i][arg0] + 4; + val = gUnknown_0860D10C[i][roundId] + 4; - for (j = gUnknown_0860D10C[i][arg0]; j < val; j++) + for (j = gUnknown_0860D10C[i][roundId]; j < val; j++) { if (gUnknown_0860D14C[j] != i && !gSaveBlock2Ptr->frontier.domeTrainers[gUnknown_0860D14C[j]].unk1) break; @@ -1176,12 +1187,12 @@ s32 sub_81901A0(s32 arg0, s32 trainerId) void sub_8190298(void) { - gTrainerBattleOpponent_A = sub_81902AC(); + gTrainerBattleOpponent_A = TrainerIdOfPlayerOpponent(); } -u16 sub_81902AC(void) +u16 TrainerIdOfPlayerOpponent(void) { - return gSaveBlock2Ptr->frontier.domeTrainers[sub_81901A0(gSaveBlock2Ptr->frontier.field_CB2, TRAINER_PLAYER)].trainerId; + return gSaveBlock2Ptr->frontier.domeTrainers[TournamentIdOfOpponent(gSaveBlock2Ptr->frontier.field_CB2, TRAINER_PLAYER)].trainerId; } void sub_81902E4(void) @@ -1211,11 +1222,11 @@ void sub_819033C(void) gSaveBlock2Ptr->frontier.field_D14[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode]; } -void sub_81903B8(void) +void ShowDomeOpponentInfo(void) { u8 taskId = CreateTask(sub_8190400, 0); gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = TrainerIdToTournamentId(sub_81902AC()); + gTasks[taskId].data[1] = TrainerIdToTournamentId(TrainerIdOfPlayerOpponent()); gTasks[taskId].data[2] = 0; gTasks[taskId].data[3] = 0; @@ -2322,3 +2333,112 @@ void sub_8190CD4(u8 taskId) break; } } + +u8 sub_819221C(u8 taskId) +{ + u8 retVal = 0; + s32 taskId2 = gTasks[taskId].data[4]; + s32 r5 = gTasks[taskId2].data[1]; + u8 r10 = gUnknown_0860D080[r5]; + u16 roundId = gSaveBlock2Ptr->frontier.field_CB2; + + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + retVal = 9; + + if (gTasks[taskId].data[3] != 0) + { + if (gTasks[taskId].data[3] == 1) + { + if (gMain.newKeys & DPAD_UP && gUnknown_0203CD78->unk_10 == 0) + { + if (r5 == 0) + r5 = 15; + else + r5--; + retVal = 1; + } + else if (gMain.newKeys & DPAD_DOWN && gUnknown_0203CD78->unk_10 != 0) + { + if (r5 == 15) + r5 = 0; + else + r5++; + retVal = 2; + } + else if (gMain.newKeys & DPAD_LEFT && gUnknown_0203CD78->unk_10 != 0) + { + gUnknown_0203CD78->unk_10--; + retVal = 3; + } + else if (gMain.newKeys & DPAD_RIGHT) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[r10].unk1 && gUnknown_0203CD78->unk_10 - 1 < gSaveBlock2Ptr->frontier.domeTrainers[r10].unk2) + { + gUnknown_0203CD78->unk_10++; + retVal = 4; + } + if (!gSaveBlock2Ptr->frontier.domeTrainers[r10].unk1 && gUnknown_0203CD78->unk_10 - 1 < roundId) + { + gUnknown_0203CD78->unk_10++; + retVal = 4; + } + } + + if (retVal == 9) + { + if (gUnknown_0203CD78->unk_10 != 0) + gTasks[taskId2].data[1] = gUnknown_0860D1A0[(r5 / 2) * 4 + (gUnknown_0203CD78->unk_10 - 1)]; + else + gTasks[taskId2].data[1] = r5; + } + } + else + { + if (gMain.newKeys & DPAD_UP && gUnknown_0203CD78->unk_10 == 1) + { + if (r5 == 16) + r5 = gUnknown_0860D19C[roundId]; + else + r5--; + retVal = 5; + } + else if (gMain.newKeys & DPAD_DOWN && gUnknown_0203CD78->unk_10 == 1) + { + if (r5 == gUnknown_0860D19C[roundId]) + r5 = 16; + else + r5++; + retVal = 6; + } + else if (gMain.newKeys & DPAD_LEFT && gUnknown_0203CD78->unk_10 != 0) + { + retVal = 7; + gUnknown_0203CD78->unk_10--; + } + else if (gMain.newKeys & DPAD_RIGHT && (gUnknown_0203CD78->unk_10 == 0 || gUnknown_0203CD78->unk_10 == 1)) + { + retVal = 8; + gUnknown_0203CD78->unk_10++; + } + + if (retVal == 9) + { + if (gUnknown_0203CD78->unk_10 == 0) + gTasks[taskId2].data[1] = gUnknown_0860D1C0[gUnknown_0203CD78->unk_11[0]]; + else if (gUnknown_0203CD78->unk_10 == 2) + gTasks[taskId2].data[1] = gUnknown_0860D1C0[gUnknown_0203CD78->unk_11[1]]; + else + gTasks[taskId2].data[1] = r5; + } + } + + if (retVal != 0 && retVal != 9) + { + PlaySE(SE_SELECT); + gTasks[taskId2].data[1] = r5; + gTasks[taskId].data[2] ^= 1; + } + } + + return retVal; +} -- cgit v1.2.3 From fb19a8fc59fcf67c6d4ddfd696e172bcacff27b7 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 19 Aug 2018 01:06:10 +0200 Subject: battle dome cards sensibly renamed --- src/battle_dome_cards.c | 433 ------------------------------------------ src/battle_frontier_1.c | 180 +++++++++--------- src/credits.c | 9 +- src/field_effect.c | 12 +- src/field_specials.c | 34 ++-- src/hall_of_fame.c | 28 +-- src/main_menu.c | 16 +- src/new_game.c | 4 +- src/overworld.c | 4 +- src/pokedex.c | 116 +++++------ src/pokemon.c | 4 +- src/record_mixing.c | 2 +- src/starter_choose.c | 15 +- src/trainer_pokemon_sprites.c | 413 ++++++++++++++++++++++++++++++++++++++++ 14 files changed, 620 insertions(+), 650 deletions(-) delete mode 100644 src/battle_dome_cards.c create mode 100644 src/trainer_pokemon_sprites.c (limited to 'src') diff --git a/src/battle_dome_cards.c b/src/battle_dome_cards.c deleted file mode 100644 index 5e659a2e8..000000000 --- a/src/battle_dome_cards.c +++ /dev/null @@ -1,433 +0,0 @@ - -// Includes -#include "global.h" -#include "sprite.h" -#include "window.h" -#include "malloc.h" -#include "constants/species.h" -#include "palette.h" -#include "decompress.h" -#include "battle_dome_cards.h" - -extern const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES]; -extern const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES]; -extern const struct CompressedSpriteSheet gTrainerFrontPicTable[]; -extern const struct CompressedSpriteSheet gTrainerBackPicTable[]; -extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[]; -extern const union AffineAnimCmd *const gUnknown_082FF618[]; -extern const union AffineAnimCmd *const gUnknown_082FF694[]; -extern const union AnimCmd *const gPlayerMonSpriteAnimsTable[]; -extern const union AnimCmd *const *const gMonAnimationsSpriteAnimsPtrTable[NUM_SPECIES]; -extern const union AnimCmd *const *const gUnknown_0830536C[]; -extern const u8 gFacilityClassToPicIndex[]; - -// Static type declarations - -struct BattleDomeCard -{ - u8 *frames; - struct SpriteFrameImage *images; - u16 paletteTag; - u8 spriteId; - u8 active; -}; - -// Static RAM declarations - -static EWRAM_DATA struct SpriteTemplate gUnknown_0203CCEC = {}; -static EWRAM_DATA struct BattleDomeCard gUnknown_0203CD04[8] = {}; - -// Static ROM declarations - -// .rodata - -static const struct BattleDomeCard gUnknown_0860B058 = {}; -static const struct OamData gUnknown_0860B064 = -{ - .size = 3 -}; -static const struct OamData gUnknown_0860B06C = -{ - .affineMode = 1, .size = 3 -}; - -// .text - -static void nullsub_122(struct Sprite *sprite) -{ - -} - -bool16 dp13_810BB8C(void) -{ - int i; - - for (i = 0; i < 8; i ++) - { - gUnknown_0203CD04[i] = gUnknown_0860B058; - } - return FALSE; -} - -static bool16 load_pokemon_image_TODO(u16 species, u32 personality, bool8 isFrontPic, u8 *dest, bool8 isTrainer, bool8 ignoreDeoxys) -{ - if (!isTrainer) - { - if (isFrontPic) - { - if (!ignoreDeoxys) - { - LoadSpecialPokePic(&gMonFrontPicTable[species], dest, species, personality, isFrontPic); - } - else - { - LoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], dest, species, personality, isFrontPic); - } - } - else - { - if (!ignoreDeoxys) - { - LoadSpecialPokePic(&gMonBackPicTable[species], dest, species, personality, isFrontPic); - } - else - { - LoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species], dest, species, personality, isFrontPic); - } - } - } - else - { - if (isFrontPic) - { - DecompressPicFromTable(&gTrainerFrontPicTable[species], dest, species); - } - else - { - DecompressPicFromTable(&gTrainerBackPicTable[species], dest, species); - } - } - return FALSE; -} - -static bool16 sub_818D09C(u16 species, u32 personality, bool8 isFrontPic, u8 *dest, bool8 isTrainer) -{ - return load_pokemon_image_TODO(species, personality, isFrontPic, dest, isTrainer, FALSE); -} - -static void sub_818D0C4(u16 species, u32 otId, u32 personality, u8 paletteSlot, u16 paletteTag, bool8 isTrainer) -{ - if (!isTrainer) - { - if (paletteTag == 0xFFFF) - { - gUnknown_0203CCEC.paletteTag |= 0xFFFF; - LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality), 0x100 + paletteSlot * 0x10, 0x20); - } - else - { - gUnknown_0203CCEC.paletteTag = paletteTag; - LoadCompressedObjectPalette(GetMonSpritePalStructFromOtIdPersonality(species, otId, personality)); - } - } - else - { - if (paletteTag == 0xFFFF) - { - gUnknown_0203CCEC.paletteTag |= 0xFFFF; - LoadCompressedPalette(gTrainerFrontPicPaletteTable[species].data, 0x100 + paletteSlot * 0x10, 0x20); - } - else - { - gUnknown_0203CCEC.paletteTag = paletteTag; - LoadCompressedObjectPalette(&gTrainerFrontPicPaletteTable[species]); - } - } -} - -static void sub_818D180(u16 species, u32 otId, u32 personality, u8 paletteSlot, bool8 isTrainer) -{ - if (!isTrainer) - { - LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality), paletteSlot * 0x10, 0x20); - } - else - { - LoadCompressedPalette(gTrainerFrontPicPaletteTable[species].data, paletteSlot * 0x10, 0x20); - } -} - -static void uns_builder_assign_animtable1(bool8 isTrainer) -{ - if (!isTrainer) - { - gUnknown_0203CCEC.anims = gPlayerMonSpriteAnimsTable; - } - else - { - gUnknown_0203CCEC.anims = gUnknown_0830536C[0]; - } -} - -static u16 oamt_spawn_poke_or_trainer_picture(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag, bool8 isTrainer, bool8 ignoreDeoxys) -{ - u8 i; - u8 *framePics; - struct SpriteFrameImage *images; - int j; - u8 spriteId; - - for (i = 0; i < 8; i ++) - { - if (!gUnknown_0203CD04[i].active) - { - break; - } - } - if (i == 8) - { - return 0xFFFF; - } - framePics = Alloc(4 * 0x800); - if (!framePics) - { - return 0xFFFF; - } - images = Alloc(4 * sizeof(struct SpriteFrameImage)); - if (!images) - { - Free(framePics); - return 0xFFFF; - } - if (load_pokemon_image_TODO(species, personality, isFrontPic, framePics, isTrainer, ignoreDeoxys)) - { - // debug trap? - return 0xFFFF; - } - for (j = 0; j < 4; j ++) - { - images[j].data = framePics + 0x800 * j; - images[j].size = 0x800; - } - gUnknown_0203CCEC.tileTag = 0xFFFF; - gUnknown_0203CCEC.oam = &gUnknown_0860B064; - uns_builder_assign_animtable1(isTrainer); - gUnknown_0203CCEC.images = images; - gUnknown_0203CCEC.affineAnims = gDummySpriteAffineAnimTable; - gUnknown_0203CCEC.callback = nullsub_122; - sub_818D0C4(species, otId, personality, paletteSlot, paletteTag, isTrainer); - spriteId = CreateSprite(&gUnknown_0203CCEC, x, y, 0); - if (paletteTag == 0xFFFF) - { - gSprites[spriteId].oam.paletteNum = paletteSlot; - } - gUnknown_0203CD04[i].frames = framePics; - gUnknown_0203CD04[i].images = images; - gUnknown_0203CD04[i].paletteTag = paletteTag; - gUnknown_0203CD04[i].spriteId = spriteId; - gUnknown_0203CD04[i].active = TRUE; - return spriteId; -} - -static u16 sub_818D384(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag, bool8 isTrainer) -{ - return oamt_spawn_poke_or_trainer_picture(species, otId, personality, isFrontPic, x, y, paletteSlot, paletteTag, isTrainer, FALSE); -} - -u16 sub_818D3E4(u16 species, u32 otId, u32 personality, u8 flags, s16 x, s16 y, u8 paletteSlot, u16 paletteTag) -{ - u8 *framePics; - struct SpriteFrameImage *images; - int j; - u8 i; - u8 spriteId; - u8 flags2; - - for (i = 0; i < 8; i ++) - { - if (!gUnknown_0203CD04[i].active) - { - break; - } - } - if (i == 8) - { - return 0xFFFF; - } - framePics = Alloc(4 * 0x800); - if (!framePics) - { - return 0xFFFF; - } - if (flags & 0x80) - { - flags &= 0x7F; - flags2 = 3; - } - else - { - flags2 = flags; - } - images = Alloc(4 * sizeof(struct SpriteFrameImage)); - if (!images) - { - Free(framePics); - return 0xFFFF; - } - if (load_pokemon_image_TODO(species, personality, flags, framePics, FALSE, FALSE)) - { - // debug trap? - return 0xFFFF; - } - for (j = 0; j < 4; j ++) - { - images[j].data = framePics + 0x800 * j; - images[j].size = 0x800; - } - gUnknown_0203CCEC.tileTag = 0xFFFF; - gUnknown_0203CCEC.anims = gMonAnimationsSpriteAnimsPtrTable[species]; - gUnknown_0203CCEC.images = images; - if (flags2 == 0x01) - { - gUnknown_0203CCEC.affineAnims = gUnknown_082FF694; - gUnknown_0203CCEC.oam = &gUnknown_0860B06C; - } - else if (flags2 == 0x00) - { - gUnknown_0203CCEC.affineAnims = gUnknown_082FF618; - gUnknown_0203CCEC.oam = &gUnknown_0860B06C; - } - else - { - gUnknown_0203CCEC.oam = &gUnknown_0860B064; - gUnknown_0203CCEC.affineAnims = gDummySpriteAffineAnimTable; - } - gUnknown_0203CCEC.callback = nullsub_122; - sub_818D0C4(species, otId, personality, paletteSlot, paletteTag, FALSE); - spriteId = CreateSprite(&gUnknown_0203CCEC, x, y, 0); - if (paletteTag == 0xFFFF) - { - gSprites[spriteId].oam.paletteNum = paletteSlot; - } - gUnknown_0203CD04[i].frames = framePics; - gUnknown_0203CD04[i].images = images; - gUnknown_0203CD04[i].paletteTag = paletteTag; - gUnknown_0203CD04[i].spriteId = spriteId; - gUnknown_0203CD04[i].active = TRUE; - return spriteId; -} - -static u16 sub_818D5B0(u16 spriteId) -{ - u8 i; - u8 *framePics; - struct SpriteFrameImage *images; - - for (i = 0; i < 8; i ++) - { - if (gUnknown_0203CD04[i].spriteId == spriteId) - { - break; - } - } - if (i == 8) - { - return 0xFFFF; - } - framePics = gUnknown_0203CD04[i].frames; - images = gUnknown_0203CD04[i].images; - if (gUnknown_0203CD04[i].paletteTag != 0xFFFF) - { - FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[spriteId].oam.paletteNum)); - } - DestroySprite(&gSprites[spriteId]); - Free(framePics); - Free(images); - gUnknown_0203CD04[i] = gUnknown_0860B058; - return 0; -} - -static u16 sub_818D65C(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u8 paletteSlot, u8 windowId, bool8 isTrainer) -{ - if (sub_818D09C(species, personality, isFrontPic, (u8 *)GetWindowAttribute(windowId, WINDOW_TILE_DATA), FALSE)) - { - return 0xFFFF; - } - sub_818D180(species, otId, personality, paletteSlot, isTrainer); - return 0; -} - -static u16 sub_818D6CC(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId, bool8 isTrainer) -{ - u8 *framePics; - - framePics = Alloc(4 * 0x800); - if (framePics && !sub_818D09C(species, personality, isFrontPic, framePics, isTrainer)) - { - BlitBitmapRectToWindow(windowId, framePics, 0, 0, 0x40, 0x40, destX, destY, 0x40, 0x40); - sub_818D180(species, otId, personality, paletteSlot, isTrainer); - Free(framePics); - return 0; - } - return 0xFFFF; -} - -static u16 sub_818D778(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag, bool8 ignoreDeoxys) -{ - return oamt_spawn_poke_or_trainer_picture(species, otId, personality, isFrontPic, x, y, paletteSlot, paletteTag, FALSE, ignoreDeoxys); -} - -u16 sub_818D7D8(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag) -{ - return sub_818D778(species, otId, personality, isFrontPic, x, y, paletteSlot, paletteTag, FALSE); -} - -u16 sub_818D820(u16 spriteId) -{ - return sub_818D5B0(spriteId); -} - -u16 sub_818D834(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u8 paletteSlot, u8 windowId) -{ - return sub_818D65C(species, otId, personality, isFrontPic, paletteSlot, windowId, FALSE); -} - -u16 sub_818D864(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId) -{ - return sub_818D6CC(species, otId, personality, isFrontPic, destX, destY, paletteSlot, windowId, FALSE); -} - -u16 sub_818D8AC(u16 species, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag) -{ - return sub_818D384(species, 0, 0, isFrontPic, x, y, paletteSlot, paletteTag, TRUE); -} - -u16 sub_818D8F0(u16 spriteId) -{ - return sub_818D5B0(spriteId); -} - -u16 sub_818D904(u16 species, bool8 isFrontPic, u8 paletteSlot, u8 windowId) -{ - return sub_818D65C(species, 0, 0, isFrontPic, paletteSlot, windowId, TRUE); -} - -u16 sub_818D938(u16 species, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId) -{ - return sub_818D6CC(species, 0, 0, isFrontPic, destX, destY, paletteSlot, windowId, TRUE); -} - -u8 sub_818D97C(u8 a0, u8 a1) -{ - if (a1 == 1) - { - switch (a0) - { - default: - return gFacilityClassToPicIndex[0x3F]; - case 0: - return gFacilityClassToPicIndex[0x3C]; - } - } - return a0; -} diff --git a/src/battle_frontier_1.c b/src/battle_frontier_1.c index 784ad3656..a1d8b2c31 100644 --- a/src/battle_frontier_1.c +++ b/src/battle_frontier_1.c @@ -20,6 +20,7 @@ #include "menu.h" #include "sound.h" #include "pokemon_icon.h" +#include "trainer_pokemon_sprites.h" #include "constants/species.h" #include "constants/moves.h" #include "constants/trainers.h" @@ -57,7 +58,6 @@ extern void sub_8195898(u8 *dst, u16 trainerId); extern u16 sub_81A5060(u8, u8); extern void sub_8162614(u16, u8); extern void sub_81A4C30(void); -extern u16 sub_818D8F0(u16); extern bool8 sub_81A3610(void); extern u16 sub_81A4FF0(u8); @@ -1361,7 +1361,7 @@ void sub_8190790(struct Sprite *sprite) if (sprite->pos1.y >= 192) { gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; - sub_818D8F0(sprite->data[3]); + FreeAndDestroyTrainerPicSprite(sprite->data[3]); } } } @@ -1381,7 +1381,7 @@ void sub_81907F8(struct Sprite *sprite) if (sprite->pos1.y <= -32) { gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; - sub_818D8F0(sprite->data[3]); + FreeAndDestroyTrainerPicSprite(sprite->data[3]); } } } @@ -1401,7 +1401,7 @@ void sub_8190860(struct Sprite *sprite) if (sprite->pos1.x >= 272) { gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; - sub_818D8F0(sprite->data[3]); + FreeAndDestroyTrainerPicSprite(sprite->data[3]); } } } @@ -1421,7 +1421,7 @@ void sub_81908CC(struct Sprite *sprite) if (sprite->pos1.x <= -32) { gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; - sub_818D8F0(sprite->data[3]); + FreeAndDestroyTrainerPicSprite(sprite->data[3]); } } } @@ -2290,7 +2290,7 @@ void sub_8190CD4(u8 taskId) if (i < 2) { if (gUnknown_0203CD78->arr[i] != 0xFF) - sub_818D8F0(gUnknown_0203CD78->arr[i]); + FreeAndDestroyTrainerPicSprite(gUnknown_0203CD78->arr[i]); } else { @@ -2303,7 +2303,7 @@ void sub_8190CD4(u8 taskId) if (i < 10) { if (gUnknown_0203CD78->arr[i] != 0xFF) - sub_818D8F0(gUnknown_0203CD78->arr[i]); + FreeAndDestroyTrainerPicSprite(gUnknown_0203CD78->arr[i]); } else { @@ -2345,100 +2345,108 @@ u8 sub_819221C(u8 taskId) if (gMain.newKeys & (A_BUTTON | B_BUTTON)) retVal = 9; - if (gTasks[taskId].data[3] != 0) + if (gTasks[taskId].data[3] == 0) + return retVal; + + if (gTasks[taskId].data[3] == 1) { - if (gTasks[taskId].data[3] == 1) + if (gMain.newKeys & DPAD_UP && gUnknown_0203CD78->unk_10 == 0) { - if (gMain.newKeys & DPAD_UP && gUnknown_0203CD78->unk_10 == 0) - { - if (r5 == 0) - r5 = 15; - else - r5--; - retVal = 1; - } - else if (gMain.newKeys & DPAD_DOWN && gUnknown_0203CD78->unk_10 != 0) - { - if (r5 == 15) - r5 = 0; - else - r5++; - retVal = 2; - } - else if (gMain.newKeys & DPAD_LEFT && gUnknown_0203CD78->unk_10 != 0) - { - gUnknown_0203CD78->unk_10--; - retVal = 3; - } - else if (gMain.newKeys & DPAD_RIGHT) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[r10].unk1 && gUnknown_0203CD78->unk_10 - 1 < gSaveBlock2Ptr->frontier.domeTrainers[r10].unk2) - { - gUnknown_0203CD78->unk_10++; - retVal = 4; - } - if (!gSaveBlock2Ptr->frontier.domeTrainers[r10].unk1 && gUnknown_0203CD78->unk_10 - 1 < roundId) - { - gUnknown_0203CD78->unk_10++; - retVal = 4; - } - } - - if (retVal == 9) - { - if (gUnknown_0203CD78->unk_10 != 0) - gTasks[taskId2].data[1] = gUnknown_0860D1A0[(r5 / 2) * 4 + (gUnknown_0203CD78->unk_10 - 1)]; - else - gTasks[taskId2].data[1] = r5; - } + if (r5 == 0) + r5 = 15; + else + r5--; + retVal = 1; } - else + else if (gMain.newKeys & DPAD_DOWN && gUnknown_0203CD78->unk_10 == 0) { - if (gMain.newKeys & DPAD_UP && gUnknown_0203CD78->unk_10 == 1) - { - if (r5 == 16) - r5 = gUnknown_0860D19C[roundId]; - else - r5--; - retVal = 5; - } - else if (gMain.newKeys & DPAD_DOWN && gUnknown_0203CD78->unk_10 == 1) - { - if (r5 == gUnknown_0860D19C[roundId]) - r5 = 16; - else - r5++; - retVal = 6; - } - else if (gMain.newKeys & DPAD_LEFT && gUnknown_0203CD78->unk_10 != 0) + if (r5 == 15) + r5 = 0; + else + r5++; + retVal = 2; + } + else if (gMain.newKeys & DPAD_LEFT && gUnknown_0203CD78->unk_10 != 0) + { + gUnknown_0203CD78->unk_10--; + retVal = 3; + } + else if (gMain.newKeys & DPAD_RIGHT) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[r10].unk1 && gUnknown_0203CD78->unk_10 - 1 < gSaveBlock2Ptr->frontier.domeTrainers[r10].unk2) { - retVal = 7; - gUnknown_0203CD78->unk_10--; + gUnknown_0203CD78->unk_10++; + retVal = 4; } - else if (gMain.newKeys & DPAD_RIGHT && (gUnknown_0203CD78->unk_10 == 0 || gUnknown_0203CD78->unk_10 == 1)) + if (!gSaveBlock2Ptr->frontier.domeTrainers[r10].unk1 && gUnknown_0203CD78->unk_10 - 1 < roundId) { - retVal = 8; gUnknown_0203CD78->unk_10++; + retVal = 4; } + } - if (retVal == 9) - { - if (gUnknown_0203CD78->unk_10 == 0) - gTasks[taskId2].data[1] = gUnknown_0860D1C0[gUnknown_0203CD78->unk_11[0]]; - else if (gUnknown_0203CD78->unk_10 == 2) - gTasks[taskId2].data[1] = gUnknown_0860D1C0[gUnknown_0203CD78->unk_11[1]]; - else - gTasks[taskId2].data[1] = r5; - } + if (retVal == 9) + { + if (gUnknown_0203CD78->unk_10 != 0) + gTasks[taskId2].data[1] = gUnknown_0860D1A0[(r5 / 2) * 4 + (gUnknown_0203CD78->unk_10 - 1)]; + else + gTasks[taskId2].data[1] = r5; + } + } + else + { + if (gMain.newKeys & DPAD_UP && gUnknown_0203CD78->unk_10 == 1) + { + if (r5 == 16) + r5 = gUnknown_0860D19C[roundId]; + else + r5--; + retVal = 5; + } + else if (gMain.newKeys & DPAD_DOWN && gUnknown_0203CD78->unk_10 == 1) + { + if (r5 == gUnknown_0860D19C[roundId]) + r5 = 16; + else + r5++; + retVal = 6; + } + else if (gMain.newKeys & DPAD_LEFT && gUnknown_0203CD78->unk_10 != 0) + { + retVal = 7; + gUnknown_0203CD78->unk_10--; + } + else if (gMain.newKeys & DPAD_RIGHT && (gUnknown_0203CD78->unk_10 == 0 || gUnknown_0203CD78->unk_10 == 1)) + { + retVal = 8; + gUnknown_0203CD78->unk_10++; } - if (retVal != 0 && retVal != 9) + if (retVal == 9) { - PlaySE(SE_SELECT); - gTasks[taskId2].data[1] = r5; - gTasks[taskId].data[2] ^= 1; + if (gUnknown_0203CD78->unk_10 == 0) + gTasks[taskId2].data[1] = gUnknown_0860D1C0[gUnknown_0203CD78->unk_11[0]]; + else if (gUnknown_0203CD78->unk_10 == 2) + gTasks[taskId2].data[1] = gUnknown_0860D1C0[gUnknown_0203CD78->unk_11[1]]; + else + gTasks[taskId2].data[1] = r5; } } + if (retVal != 0 && retVal != 9) + { + PlaySE(SE_SELECT); + gTasks[taskId2].data[1] = r5; + gTasks[taskId].data[2] ^= 1; + } + + return retVal; } + +/* +void sub_81924E0(u8 arg0, u8 arg1) +{ + +} +*/ diff --git a/src/credits.c b/src/credits.c index a88e4b549..c054958ce 100644 --- a/src/credits.c +++ b/src/credits.c @@ -12,7 +12,7 @@ #include "gpu_regs.h" #include "m4a.h" #include "constants/rgb.h" -#include "battle_dome_cards.h" +#include "trainer_pokemon_sprites.h" #include "starter_choose.h" #include "decompress.h" #include "intro_credits_graphics.h" @@ -1197,7 +1197,6 @@ void sub_8175620(void) u8 taskIdA; s16 taskIdC; u8 taskIdB; - u16 savedIme; sub_8175CE4(); SetVBlankCallback(NULL); @@ -1333,7 +1332,7 @@ static void sub_81758E4(u8 taskIdA) u16 *temp; ResetSpriteData(); - dp13_810BB8C(); + ResetAllPicSprites(); FreeAllSpritePalettes(); gReservedSpritePaletteCount = 8; LZ77UnCompVram(&gBirchHelpGfx, (void *)VRAM); @@ -2164,7 +2163,7 @@ static void sub_8177050(struct Sprite *sprite) { if (gUnknown_0203BD28) { - sub_818D820(sprite->data[6]); + FreeAndDestroyMonPicSprite(sprite->data[6]); return; } @@ -2242,7 +2241,7 @@ static void sub_8177050(struct Sprite *sprite) case 10: SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); - sub_818D820(sprite->data[6]); + FreeAndDestroyMonPicSprite(sprite->data[6]); break; } } diff --git a/src/field_effect.c b/src/field_effect.c index f047c78a3..13de58aa4 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -1,8 +1,6 @@ - -// Includes #include "global.h" #include "field_effect.h" -#include "battle_dome_cards.h" +#include "trainer_pokemon_sprites.h" #include "decompress.h" #include "field_camera.h" #include "field_effect_helpers.h" @@ -557,7 +555,7 @@ u8 AddNewGameBirchObject(s16 x, s16 y, u8 subpriority) #ifdef NONMATCHING u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y) { - u16 spriteId = sub_818D7D8(species, 0, 0x8000, 1, x, y, 0, gMonPaletteTable[species].tag); + u16 spriteId = CreateMonPicSprite_HandleDeoxys(species, 0, 0x8000, 1, x, y, 0, gMonPaletteTable[species].tag); PreservePaletteInWeather(IndexOfSpritePaletteTag(gMonPaletteTable[species].tag) + 0x10); if (spriteId == 0xFFFF) return 0x40; @@ -590,7 +588,7 @@ u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y) movs r1, 0\n\ adds r2, r3, 0\n\ movs r3, 0x1\n\ - bl sub_818D7D8\n\ + bl CreateMonPicSprite_HandleDeoxys\n\ lsls r0, 16\n\ lsrs r5, r0, 16\n\ ldrh r0, [r4, 0x4]\n\ @@ -619,7 +617,7 @@ _080B5FDE:\n\ u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subpriority) { const struct CompressedSpritePalette *spritePalette = GetMonSpritePalStructFromOtIdPersonality(species, d, g); - u16 spriteId = sub_818D7D8(species, d, g, 1, x, y, 0, spritePalette->tag); + u16 spriteId = CreateMonPicSprite_HandleDeoxys(species, d, g, 1, x, y, 0, spritePalette->tag); PreservePaletteInWeather(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10); if (spriteId == 0xFFFF) return 0x40; @@ -634,7 +632,7 @@ void FreeResourcesAndDestroySprite(struct Sprite *sprite, u8 spriteId) { FreeOamMatrix(sprite->oam.matrixNum); } - sub_818D820(spriteId); + FreeAndDestroyMonPicSprite(spriteId); } #ifdef NONMATCHING diff --git a/src/field_specials.c b/src/field_specials.c index 897bcc8d7..e20ccf618 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -1645,7 +1645,7 @@ bool8 sub_81398C0(void) StringCopy(gStringVar2, gMoveNames[ItemIdToBattleMoveId(gSpecialVar_0x8004)]); return TRUE; } - + return FALSE; } @@ -1799,7 +1799,7 @@ void ShakeScreenInElevator(void) if (floorDelta > 8) floorDelta = 8; - + data[5] = gUnknown_085B2C18[floorDelta]; SetCameraPanningCallback(NULL); @@ -1830,16 +1830,16 @@ static void sub_8139AF4(u8 taskId) void sub_8139B60(void) { int xPos; - + gUnknown_0203AB5E = AddWindow(&gUnknown_085B2BAC); SetStandardWindowBorderStyle(gUnknown_0203AB5E, 0); - + xPos = GetStringCenterAlignXOffset(1, gText_ElevatorNowOn, 64); PrintTextOnWindow(gUnknown_0203AB5E, 1, gText_ElevatorNowOn, xPos, 1, TEXT_SPEED_FF, NULL); - + xPos = GetStringCenterAlignXOffset(1, gElevatorFloorsTable[gSpecialVar_0x8005], 64); PrintTextOnWindow(gUnknown_0203AB5E, 1, gElevatorFloorsTable[gSpecialVar_0x8005], xPos, 17, TEXT_SPEED_FF, NULL); - + PutWindowTilemap(gUnknown_0203AB5E); CopyWindowToVram(gUnknown_0203AB5E, 3); } @@ -2167,13 +2167,13 @@ void sub_8139F20(void) } break; case 4: - if (gSaveBlock2Ptr->frontier.field_D0C[0] >= gSaveBlock2Ptr->frontier.field_D0C[1]) + if (gSaveBlock2Ptr->frontier.field_D0C[0][0] >= gSaveBlock2Ptr->frontier.field_D0C[0][1]) { - unk = gSaveBlock2Ptr->frontier.field_D0C[0]; + unk = gSaveBlock2Ptr->frontier.field_D0C[0][0]; } else { - unk = gSaveBlock2Ptr->frontier.field_D0C[1]; + unk = gSaveBlock2Ptr->frontier.field_D0C[0][1]; } break; case 5: @@ -2662,8 +2662,8 @@ static void sub_813A2DC(u8 taskId) } task->data[4] = convert_pixel_width_to_tile_width(unk1); - - if (task->data[2] + task->data[4] > 0x1D) + + if (task->data[2] + task->data[4] > 0x1D) { int unk2 = 0x1D - task->data[4]; if (unk2 < 0) @@ -3363,7 +3363,7 @@ void sub_813ADD4(void) struct Task *task = &gTasks[taskId]; ListMenuGetScrollAndRow(task->data[14], &scrollOffset, &selectedRow); SetStandardWindowBorderStyle(task->data[13], 0); - + for (i = 0; i < 6; i++) { sub_8199F74(task->data[13], 1, gUnknown_085B2CF0[gSpecialVar_0x8004][scrollOffset + i], 10, i * 16, TEXT_SPEED_FF, NULL, 0, 0); @@ -3381,7 +3381,7 @@ void sub_813AEB4(void) u16 temp1 = 0; u16 temp2 = 0; gSpecialVar_0x8005 = 0; - + temp1 = VarGet(VAR_TEMP_E); temp2 = VarGet(VAR_TEMP_D); @@ -3509,7 +3509,7 @@ static void sub_813B0B4(u8 a0) u8 eventObjectId; LoadPalette(&gUnknown_085B3280[a0], 0x1A0, 8); TryGetEventObjectIdByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &eventObjectId); - + if (a0 == 0) { PlaySE(SE_W109); @@ -3656,7 +3656,7 @@ bool32 sub_813B374(void) u16 var = VarGet(VAR_0x4037); GetMapName(gStringVar1, gUnknown_085B3400[var - 1], 0); - + if (var < 9) { return FALSE; @@ -3697,7 +3697,7 @@ bool32 sub_813B3B0(void) break; } } - + if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(UNDERWATER3)) { switch (gSaveBlock1Ptr->location.mapNum) @@ -4159,7 +4159,7 @@ static u16 sub_813BC00(void) } } } - + if (((gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] >> gUnknown_085B347C[retVal]) & 1)) { gSaveBlock1Ptr->vars[VAR_FANCLUB_UNKNOWN_1 - VARS_START] ^= 1 << gUnknown_085B347C[retVal]; diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index f5c4ba491..33c85d448 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -5,6 +5,7 @@ #include "sprite.h" #include "pokemon.h" #include "text.h" +#include "text_window.h" #include "malloc.h" #include "gpu_regs.h" #include "main.h" @@ -26,6 +27,7 @@ #include "event_data.h" #include "overworld.h" #include "menu.h" +#include "trainer_pokemon_sprites.h" struct HallofFameMon { @@ -81,18 +83,10 @@ extern const u8 gText_MainMenuTime[]; extern const u8 gContestConfetti_Gfx[]; extern const u8 gContestConfetti_Pal[]; -extern void NewMenuHelpers_DrawDialogueFrame(u8, u8); extern void sub_8175620(void); extern u8 TrySavingData(u8); -extern u8 sub_818D3E4(u16 species, u32 trainerId, u32 personality, u8 flags, s16 x, s16 y, u8, u16); extern void sub_8197434(u8, u8); extern u16 sub_818D97C(u8 playerGender, u8); -extern u16 sub_818D8AC(u16, u8, s16, s16, u8, u16); -extern const void* stdpal_get(u8); -extern void LoadWindowGfx(u8, u8, u16, u8); -extern u16 sub_818D820(u16); -extern u16 sub_818D8F0(u16); -extern u16 sub_818D7D8(u16 species, u32 trainerId, u32 personality, u8 arg3, s16 sp0, s16 sp1, u8 sp2, u16 sp3); extern void sub_8198204(u8 *dst, const u8 *src, u8, u8, u8); extern bool8 sub_80F9C30(void); extern void sub_8198314(void); @@ -102,8 +96,6 @@ extern void sub_80F9BF4(u16, u16, u8); extern void sub_81980F0(u8, u8, u8, u8, u16); extern void sub_80F9BCC(u16, u16, u8); extern bool8 sub_80F9C1C(void); -extern u16 SpeciesToPokedexNum(u16 species); -extern void dp13_810BB8C(void); extern void sub_81971D0(void); extern void sub_8197200(void); extern void sub_8152254(void); @@ -611,7 +603,7 @@ static void Task_Hof_DisplayMon(u8 taskId) if (currMon->species == SPECIES_EGG) field6 += 10; - spriteId = sub_818D3E4(currMon->species, currMon->tid, currMon->personality, 1, xPos, yPos, currMonId, 0xFFFF); + spriteId = CreatePicSprite2(currMon->species, currMon->tid, currMon->personality, 1, xPos, yPos, currMonId, 0xFFFF); gSprites[spriteId].tDestinationX = field4; gSprites[spriteId].tDestinationY = field6; gSprites[spriteId].data[0] = 0; @@ -723,7 +715,7 @@ static void sub_8173EE4(u8 taskId) ShowBg(0); ShowBg(1); ShowBg(3); - gTasks[taskId].tPlayerSpriteID = sub_818D8AC(sub_818D97C(gSaveBlock2Ptr->playerGender, 1), 1, 120, 72, 6, 0xFFFF); + gTasks[taskId].tPlayerSpriteID = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId_Debug(gSaveBlock2Ptr->playerGender, TRUE), 1, 120, 72, 6, 0xFFFF); AddWindow(&sHof_WindowTemplate); LoadWindowGfx(1, gSaveBlock2Ptr->optionsWindowFrameType, 0x21D, 0xD0); LoadPalette(stdpal_get(1), 0xE0, 0x20); @@ -780,11 +772,11 @@ static void Task_Hof_HandleExit(u8 taskId) if (spriteId != 0xFF) { FreeOamMatrix(gSprites[spriteId].oam.matrixNum); - sub_818D820(spriteId); + FreeAndDestroyMonPicSprite(spriteId); } } - sub_818D8F0(gTasks[taskId].tPlayerSpriteID); + FreeAndDestroyTrainerPicSprite(gTasks[taskId].tPlayerSpriteID); HideBg(0); HideBg(1); HideBg(3); @@ -956,7 +948,7 @@ static void Task_HofPC_DrawSpritesPrintText(u8 taskId) if (currMon->species == SPECIES_EGG) posY += 10; - spriteId = sub_818D7D8(currMon->species, currMon->tid, currMon->personality, 1, posX, posY, i, 0xFFFF); + spriteId = CreateMonPicSprite_HandleDeoxys(currMon->species, currMon->tid, currMon->personality, 1, posX, posY, i, 0xFFFF); gSprites[spriteId].oam.priority = 1; gTasks[taskId].tMonSpriteId(i) = spriteId; } @@ -1026,7 +1018,7 @@ static void Task_HofPC_HandleInput(u8 taskId) u8 spriteId = gTasks[taskId].tMonSpriteId(i); if (spriteId != 0xFF) { - sub_818D820(spriteId); + FreeAndDestroyMonPicSprite(spriteId); gTasks[taskId].tMonSpriteId(i) = 0xFF; } } @@ -1087,7 +1079,7 @@ static void Task_HofPC_HandleExit(u8 taskId) u16 spriteId = gTasks[taskId].tMonSpriteId(i); if (spriteId != 0xFF) { - sub_818D820(spriteId); + FreeAndDestroyMonPicSprite(spriteId); gTasks[taskId].tMonSpriteId(i) = 0xFF; } } @@ -1305,7 +1297,7 @@ static void sub_8174F70(void) ResetTasks(); ResetSpriteData(); reset_temp_tile_data_buffers(); - dp13_810BB8C(); + ResetAllPicSprites(); FreeAllSpritePalettes(); gReservedSpritePaletteCount = 8; LoadCompressedObjectPic(&sHallOfFame_ConfettiSpriteSheet); diff --git a/src/main_menu.c b/src/main_menu.c index 052035e34..e28faf986 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -1,7 +1,5 @@ - -// Includes #include "global.h" -#include "battle_dome_cards.h" +#include "trainer_pokemon_sprites.h" #include "bg.h" #include "constants/flags.h" #include "constants/rgb.h" @@ -1018,7 +1016,7 @@ void task_new_game_prof_birch_speech_1(u8 taskId) ScanlineEffect_Stop(); ResetSpriteData(); FreeAllSpritePalettes(); - dp13_810BB8C(); + ResetAllPicSprites(); AddBirchSpeechObjects(taskId); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); gTasks[taskId].data[4] = 0; @@ -1336,7 +1334,7 @@ void task_new_game_prof_birch_speech_17(u8 taskId) if (!gPaletteFade.active) { FreeAllWindowBuffers(); - sub_818D820(gTasks[taskId].data[9]); + FreeAndDestroyMonPicSprite(gTasks[taskId].data[9]); set_default_player_name(Random() % 20); DestroyTask(taskId); DoNamingScreen(0, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, new_game_prof_birch_speech_part2_start); @@ -1515,8 +1513,8 @@ void task_new_game_prof_birch_speech_part2_12(u8 taskId) if (!gPaletteFade.active) { FreeAllWindowBuffers(); - sub_818D820(gTasks[taskId].data[9]); - dp13_810BB8C(); + FreeAndDestroyMonPicSprite(gTasks[taskId].data[9]); + ResetAllPicSprites(); SetMainCallback2(CB2_NewGame); DestroyTask(taskId); } @@ -1558,7 +1556,7 @@ void new_game_prof_birch_speech_part2_start(void) ScanlineEffect_Stop(); ResetSpriteData(); FreeAllSpritePalettes(); - dp13_810BB8C(); + ResetAllPicSprites(); AddBirchSpeechObjects(taskId); if (gSaveBlock2Ptr->playerGender != MALE) { @@ -1613,7 +1611,7 @@ void sub_80318D8(struct Sprite *sprite) u8 sub_80318F4(u8 a, u8 b) { - return sub_818D3E4(SPECIES_LOTAD, 8, 0, 1, a, b, 14, -1); + return CreatePicSprite2(SPECIES_LOTAD, 8, 0, 1, a, b, 14, -1); } void AddBirchSpeechObjects(u8 taskId) diff --git a/src/new_game.c b/src/new_game.c index 8b8436d10..da5e91229 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -23,6 +23,8 @@ #include "overworld.h" #include "mail.h" #include "battle_records.h" +#include "item.h" +#include "pokedex.h" extern u8 gDifferentSaveFile; extern u16 gSaveFileStatus; @@ -33,13 +35,11 @@ extern u16 GetGeneratedTrainerIdLower(void); extern void ClearContestWinnerPicsInContestHall(void); extern void sub_80BB358(void); extern void ResetBagScrollPositions(void); -extern void ResetPokedex(void); extern void ResetGabbyAndTy(void); extern void ResetSecretBases(void); extern void ResetLinkContestBoolean(void); extern void sub_8052DA8(void); extern void ResetPokemonStorageSystem(void); -extern void ClearBag(void); extern void NewGameInitPCItems(void); extern void ClearDecorationInventories(void); extern void ResetFanClub(void); diff --git a/src/overworld.c b/src/overworld.c index d85af9e4d..1cf830cf7 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -151,7 +151,7 @@ extern void TransferTilesetAnimsBuffer(void); extern bool32 sub_81D5F48(void); extern u8 GetCurrentTrainerHillMapId(void); extern bool8 warp0_in_pokecenter(void); -extern void dp13_810BB8C(void); +extern void ResetAllPicSprites(void); extern void FieldEffectActiveListClear(void); extern void SetUpFieldTasks(void); extern void sub_81BE6B8(void); @@ -2149,7 +2149,7 @@ static void sub_8086988(u32 a1) ResetSpriteData(); ResetPaletteFade(); ScanlineEffect_Clear(); - dp13_810BB8C(); + ResetAllPicSprites(); ResetCameraUpdateInfo(); InstallCameraPanAheadCallback(); if (!a1) diff --git a/src/pokedex.c b/src/pokedex.c index 2a0033306..2cb3c153f 100644 --- a/src/pokedex.c +++ b/src/pokedex.c @@ -11,7 +11,7 @@ #include "main.h" #include "sound.h" #include "task.h" -#include "battle_dome_cards.h" +#include "trainer_pokemon_sprites.h" #include "scanline_effect.h" #include "malloc.h" #include "gpu_regs.h" @@ -821,7 +821,7 @@ const u8 sText_TenDashes[] = _("----------"); void ResetPokedex(void) { u16 i; - + gUnknown_02039B50 = 0; gUnknown_02039B52 = 64; gUnknown_030060B0 = 0; @@ -910,7 +910,7 @@ void sub_80BB534(void) { u8 *addr; u32 size; - + switch (gMain.state) { case 0: @@ -929,7 +929,7 @@ void sub_80BB534(void) ResetPaletteFade(); FreeAllSpritePalettes(); gReservedSpritePaletteCount = 8; - dp13_810BB8C(); + ResetAllPicSprites(); gMain.state++; break; case 2: @@ -984,7 +984,7 @@ void sub_80BB78C(u8 taskId) void sub_80BB7D4(u8 taskId) { SetGpuReg(REG_OFFSET_BG0VOFS, gUnknown_02039B4C->menuY); - + if (gUnknown_02039B4C->menuY) { gUnknown_02039B4C->menuY -= 8; @@ -1467,7 +1467,7 @@ void sub_80BC844(u8 a) void sub_80BC890(void) { void* tilemapBuffer; - + FreeAllWindowBuffers(); tilemapBuffer = GetBgTilemapBuffer(0); if (tilemapBuffer) @@ -1487,7 +1487,7 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode) { u16 vars[3]; //I have no idea why three regular variables are stored in an array, but whatever. s16 i; - + gUnknown_02039B4C->pokemonListCount = 0; switch (dexMode) @@ -1633,7 +1633,7 @@ void sub_80BC8D4(u8 dexMode, u8 sortMode) void sub_80BCE2C(u8 windowId, u8 fontId, const u8* str, u8 left, u8 top) { u8 color[3]; - + color[0] = 0; color[1] = 15; color[2] = 3; @@ -1731,7 +1731,7 @@ void sub_80BD154(u16 a, u8 left, u8 top, u16 unused) { u8 text[6]; u16 r6; - + memcpy(text, gUnknown_0855D2B8, 6); r6 = gUnknown_02039B4C->unk0[a].dexNum; if (gUnknown_02039B4C->dexMode == DEX_MODE_HOENN) @@ -1753,7 +1753,7 @@ void sub_80BD1F4(u16 a, u8 x, u8 y, u16 unused) u8 sub_80BD23C(u16 num, u8 left, u8 top) { const u8* str; - + num = NationalPokedexNumToSpecies(num); if (num) str = gSpeciesNames[num]; @@ -1773,7 +1773,7 @@ void sub_80BD2B4(u16 a, u16 b) u8 i; u16 unk; u8 spriteId; - + gPaletteFade.bufferTransferDisabled = TRUE; for (i = 0; i < 4; i++) @@ -1803,13 +1803,13 @@ void sub_80BD2B4(u16 a, u16 b) gSprites[spriteId].callback = sub_80BE4E0; gSprites[spriteId].data[5] = 32; } - + sub_80BCE84(0, a, b); SetGpuReg(REG_OFFSET_BG2VOFS, gUnknown_02039B4C->unk62D); gUnknown_02039B4C->unk630 = 0; gUnknown_02039B4C->unk632 = 0; - + gPaletteFade.bufferTransferDisabled = FALSE; } @@ -1897,7 +1897,7 @@ u16 sub_80BD69C(u16 a, u16 b) u8 i; u16 r6; u8 r10 = 0; - + if ((gMain.heldKeys & DPAD_UP) && (a > 0)) { r10 = 1; @@ -1917,7 +1917,7 @@ u16 sub_80BD69C(u16 a, u16 b) else if ((gMain.newKeys & DPAD_LEFT) && (a > 0)) { r6 = a; - + for (i = 0; i < 7; i++) a = sub_80C0E0C(1, a, 0, gUnknown_02039B4C->pokemonListCount - 1); gUnknown_02039B4C->unk62C += 16 * (a - r6); @@ -1935,13 +1935,13 @@ u16 sub_80BD69C(u16 a, u16 b) sub_80BD2B4(a, 0xE); PlaySE(SE_Z_PAGE); } - + if (r10 == 0) { gUnknown_02039B4C->unk638 = 0; return a; } - + r5 = gUnknown_0855D28C[gUnknown_02039B4C->unk638 / 4]; r3 = gUnknown_0855D291[gUnknown_02039B4C->unk638 / 4]; gUnknown_02039B4C->unk62E = r3; @@ -2030,7 +2030,7 @@ u8 sub_80BDA40(void) { if (gUnknown_02039B4C->unk61E[i] != 0xFFFF) { - sub_818D820(gUnknown_02039B4C->unk61E[i]); + FreeAndDestroyMonPicSprite(gUnknown_02039B4C->unk61E[i]); gUnknown_02039B4C->unk61E[i] |= 0xFFFF; } } @@ -2109,7 +2109,7 @@ void sub_80BDB7C(u8 a) if (a == 0) { u32 _a; - + if (!IsNationalPokedexEnabled()) { CreateSprite(&gUnknown_0855D1F4, 32, 40, 1); @@ -2160,22 +2160,22 @@ void sub_80BDB7C(u8 a) else { u16 r6; - + CreateSprite(&gUnknown_0855D1F4, 32, 40, 1); spriteId = CreateSprite(&gUnknown_0855D1F4, 32, 76, 1); StartSpriteAnim(&gSprites[spriteId], 1); CreateSprite(&gUnknown_0855D20C, 17, 45, 1); - + spriteId = CreateSprite(&gUnknown_0855D20C, 17, 55, 1); StartSpriteAnim(&gSprites[spriteId], 1); CreateSprite(&gUnknown_0855D20C, 17, 81, 1); - + spriteId = CreateSprite(&gUnknown_0855D20C, 17, 91, 1); StartSpriteAnim(&gSprites[spriteId], 1); - + r6 = GetHoennPokedexCount(0); _a = 0; @@ -2197,9 +2197,9 @@ void sub_80BDB7C(u8 a) spriteId = CreateSprite(&gUnknown_0855D23C, 56, 45, 1); r5 = (r6 % 100) % 10; StartSpriteAnim(&gSprites[spriteId], r5); - + _a = 0; - + spriteId = CreateSprite(&gUnknown_0855D23C, 40, 55, 1); r5 = gUnknown_02039B4C->unk61A / 100; StartSpriteAnim(&gSprites[spriteId], r5); @@ -2207,21 +2207,21 @@ void sub_80BDB7C(u8 a) _a = 1; else gSprites[spriteId].invisible = TRUE; - + spriteId = CreateSprite(&gUnknown_0855D23C, 48, 55, 1); r5 = (gUnknown_02039B4C->unk61A % 100) / 10; if (r5 != 0 || _a != 0) StartSpriteAnim(&gSprites[spriteId], r5); else gSprites[spriteId].invisible = TRUE; - + spriteId = CreateSprite(&gUnknown_0855D23C, 56, 55, 1); r5 = (gUnknown_02039B4C->unk61A % 100) % 10; StartSpriteAnim(&gSprites[spriteId], r5); - + r6 = GetHoennPokedexCount(1); _a = 0; - + spriteId = CreateSprite(&gUnknown_0855D23C, 40, 81, 1); r5 = r6 / 100; StartSpriteAnim(&gSprites[spriteId], r5); @@ -2229,20 +2229,20 @@ void sub_80BDB7C(u8 a) _a = 1; else gSprites[spriteId].invisible = TRUE; - + spriteId = CreateSprite(&gUnknown_0855D23C, 48, 81, 1); r5 = (r6 % 100) / 10; if (r5 != 0 || _a != 0) StartSpriteAnim(&gSprites[spriteId], r5); else gSprites[spriteId].invisible = TRUE; - + spriteId = CreateSprite(&gUnknown_0855D23C, 56, 81, 1); r5 = (r6 % 100) % 10; StartSpriteAnim(&gSprites[spriteId], r5); - + _a = 0; - + spriteId = CreateSprite(&gUnknown_0855D23C, 40, 91, 1); r5 = gUnknown_02039B4C->unk61C / 100; StartSpriteAnim(&gSprites[spriteId], r5); @@ -2250,14 +2250,14 @@ void sub_80BDB7C(u8 a) _a = 1; else gSprites[spriteId].invisible = TRUE; - + spriteId = CreateSprite(&gUnknown_0855D23C, 48, 91, 1); r5 = (gUnknown_02039B4C->unk61C % 100) / 10; if (r5 != 0 || _a != 0) StartSpriteAnim(&gSprites[spriteId], r5); else gSprites[spriteId].invisible = TRUE; - + spriteId = CreateSprite(&gUnknown_0855D23C, 56, 91, 1); r5 = (gUnknown_02039B4C->unk61C % 100) % 10; StartSpriteAnim(&gSprites[spriteId], r5); @@ -2313,7 +2313,7 @@ void sub_80BE4E0(struct Sprite *sprite) if (gUnknown_02039B4C->unk64A != 0 && gUnknown_02039B4C->unk64A != 3) { - sub_818D820(gUnknown_02039B4C->unk61E[data1]); + FreeAndDestroyMonPicSprite(gUnknown_02039B4C->unk61E[data1]); gUnknown_02039B4C->unk61E[data1] = 0xFFFF; } else @@ -2339,7 +2339,7 @@ void sub_80BE4E0(struct Sprite *sprite) if ((sprite->data[5] <= -64 || sprite->data[5] >= 64) && sprite->data[0] != 0) { - sub_818D820(gUnknown_02039B4C->unk61E[data1]); + FreeAndDestroyMonPicSprite(gUnknown_02039B4C->unk61E[data1]); gUnknown_02039B4C->unk61E[data1] = 0xFFFF; } } @@ -2449,14 +2449,14 @@ void sub_80BE8DC(const u8* str, u8 left, u8 top) color[0] = 0; color[1] = 15; color[2] = 3; - + AddTextPrinterParameterized2(0, 1, left, top, 0, 0, color, -1, str); } u8 sub_80BE91C(struct PokedexListItem* item, u8 b) { u8 taskId; - + gUnknown_02039B54 = item; taskId = CreateTask(sub_80BEA24, 0); gTasks[taskId].data[0] = 0; @@ -2473,7 +2473,7 @@ u8 sub_80BE91C(struct PokedexListItem* item, u8 b) SetBgTilemapBuffer(0, AllocZeroed(0x800)); InitWindows(gUnknown_0856E640); DeactivateAllTextPrinters(); - + return taskId; } @@ -2703,7 +2703,7 @@ void sub_80BEFD0(u8 taskId) { if (!gPaletteFade.active) { - sub_818D820(gTasks[taskId].data[4]); + FreeAndDestroyMonPicSprite(gTasks[taskId].data[4]); switch (gUnknown_02039B4C->unk64E) { case 1: @@ -2724,7 +2724,7 @@ void sub_80BF038(u8 taskId) { if (!gPaletteFade.active) { - sub_818D820(gTasks[taskId].data[4]); + FreeAndDestroyMonPicSprite(gTasks[taskId].data[4]); gTasks[taskId].func = sub_80BEA24; } } @@ -2733,7 +2733,7 @@ void sub_80BF070(u8 taskId) { if (!gPaletteFade.active) { - sub_818D820(gTasks[taskId].data[4]); + FreeAndDestroyMonPicSprite(gTasks[taskId].data[4]); sub_80BEDB0(); DestroyTask(taskId); } @@ -2960,7 +2960,7 @@ void sub_80BF790(u8 taskId) if (!gPaletteFade.active) { sub_8145914(); - sub_818D820(gTasks[taskId].data[4]); + FreeAndDestroyMonPicSprite(gTasks[taskId].data[4]); switch (gUnknown_02039B4C->unk64E) { default: @@ -3109,8 +3109,8 @@ void sub_80BFC78(u8 taskId) { if (!gPaletteFade.active) { - sub_818D820(gTasks[taskId].data[4]); - sub_818D8F0(gTasks[taskId].data[5]); + FreeAndDestroyMonPicSprite(gTasks[taskId].data[4]); + FreeAndDestroyTrainerPicSprite(gTasks[taskId].data[5]); switch (gUnknown_02039B4C->unk64E) { default: @@ -3334,7 +3334,7 @@ void sub_80BFE38(u8 taskId) { u8 spriteId; u16 dexNum = gTasks[taskId].data[1]; - + switch (gTasks[taskId].data[0]) { case 0: @@ -3440,7 +3440,7 @@ void blockset_load_palette_to_gpu(u8 taskId) buffer = GetBgTilemapBuffer(3); if (buffer) Free(buffer); - + species = NationalPokedexNumToSpecies(gTasks[taskId].data[1]); otId = ((u16)gTasks[taskId].data[13] << 16) | (u16)gTasks[taskId].data[12]; personality = ((u16)gTasks[taskId].data[15] << 16) | (u16)gTasks[taskId].data[14]; @@ -3472,7 +3472,7 @@ void sub_80C020C(u32 num, u32 value, u32 c, u32 d) const u8 *text; const u8 *text2; const u8 *text3; - + if (d) sub_80BE8DC(gText_PokedexRegistration, GetStringCenterAlignXOffset(1, gText_PokedexRegistration, 0xF0), 0); if (value == 0) @@ -4064,7 +4064,7 @@ void sub_80C0A88(u8 windowId, const u8 *str, u8 left, u8 top) color[0] = 0; color[1] = 15; color[2] = 3; - + AddTextPrinterParameterized2(windowId, 1, left, top, 0, 0, color, -1, str); } @@ -4107,7 +4107,7 @@ void sub_80C0BF0(u8 windowId, const u8* str, u8 left, u8 top) u8 str2[11]; u8 i; u8 count; - + for (i = 0; i < 11; i++) str2[i] = CHAR_SPACE; for (count = 0; str[count] != CHAR_SPACE && count < 11; count++) @@ -4232,12 +4232,12 @@ u32 sub_80C0E68(u16 a) u16 sub_80C0E9C(u16 num, s16 x, s16 y, u16 paletteSlot) { num = NationalPokedexNumToSpecies(num); - return sub_818D7D8(num, 8, sub_80C0E68(num), TRUE, x, y, paletteSlot, 0xFFFF); + return CreateMonPicSprite_HandleDeoxys(num, 8, sub_80C0E68(num), TRUE, x, y, paletteSlot, 0xFFFF); } u16 sub_80C0EF8(u16 species, s16 x, s16 y, s8 paletteSlot) { - return sub_818D8AC(species, TRUE, x, y, paletteSlot, 0xFFFF); + return CreateTrainerPicSprite(species, TRUE, x, y, paletteSlot, 0xFFFF); } int sub_80C0F30(u8 dexMode, u8 sortMode, u8 abcGroup, u8 bodyColor, u8 type1, u8 type2) @@ -4364,7 +4364,7 @@ u8 sub_80C1258(void) void sub_80C1270(const u8 *str, u32 left, u32 top) { u8 color[3]; - + color[0] = 0; color[1] = 15; color[2] = 2; @@ -4398,7 +4398,7 @@ void sub_80C12E0(u8 taskId) DeactivateAllTextPrinters(); PutWindowTilemap(0); DecompressAndLoadBgGfxUsingHeap(3, gPokedexSearchMenu_Gfx, 0x2000, 0, 0); - + if (!IsNationalPokedexEnabled()) CopyToBgTilemapBuffer(3, gPokedexSearch2_Tilemap, 0, 0); else @@ -4450,7 +4450,7 @@ void sub_80C12E0(u8 taskId) void sub_80C152C(void) { void* tilemapBuffer; - + FreeAllWindowBuffers(); tilemapBuffer = GetBgTilemapBuffer(0); if (tilemapBuffer) @@ -4992,12 +4992,12 @@ void sub_80C2064(u8 a, u8 b) void sub_80C20F8(u8 taskId) { u16 var; - + sub_80C12B0(0x28, 0x10, 0x60, 0x50); var = gTasks[taskId].data[6] + gTasks[taskId].data[7]; sub_80C1270(gUnknown_0856EE5C[var].text2, 0x2D, 0x11); - + var = gTasks[taskId].data[8] + gTasks[taskId].data[9]; sub_80C1270(gUnknown_0856EEB4[var].text2, 0x2D, 0x21); diff --git a/src/pokemon.c b/src/pokemon.c index 7c010cd39..7dedc917f 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5874,9 +5874,9 @@ u16 FacilityClassToPicIndex(u16 facilityClass) u16 PlayerGenderToFrontTrainerPicId(u8 playerGender) { if (playerGender != MALE) - return FacilityClassToPicIndex(FACILITY_CLASS_PKMN_TRAINER_BRENDAN); - else return FacilityClassToPicIndex(FACILITY_CLASS_PKMN_TRAINER_MAY); + else + return FacilityClassToPicIndex(FACILITY_CLASS_PKMN_TRAINER_BRENDAN); } void HandleSetPokedexFlag(u16 nationalNum, u8 caseId, u32 personality) diff --git a/src/record_mixing.c b/src/record_mixing.c index 8b21e214f..8e85fed18 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -1635,7 +1635,7 @@ void sub_80E8260(struct UnkRecordMixingStruct2 *dst) dst->field_0[0][i].field_4 = gSaveBlock2Ptr->frontier.field_CF0[i]; dst->field_0[1][i].field_4 = gSaveBlock2Ptr->frontier.field_CF4[i]; dst->field_0[2][i].field_4 = gSaveBlock2Ptr->frontier.field_CF8[i]; - dst->field_0[3][i].field_4 = gSaveBlock2Ptr->frontier.field_D14[i]; + dst->field_0[3][i].field_4 = gSaveBlock2Ptr->frontier.field_D14[0][i]; dst->field_0[4][i].field_4 = gSaveBlock2Ptr->frontier.field_DD0[i]; dst->field_0[5][i].field_4 = gSaveBlock2Ptr->frontier.field_DDE[i]; dst->field_0[6][i].field_4 = gSaveBlock2Ptr->frontier.field_DEA[i]; diff --git a/src/starter_choose.c b/src/starter_choose.c index 36e2b121a..c1e7eea40 100644 --- a/src/starter_choose.c +++ b/src/starter_choose.c @@ -20,6 +20,7 @@ #include "international_string_util.h" #include "trig.h" #include "scanline_effect.h" +#include "trainer_pokemon_sprites.h" #define STARTER_MON_COUNT 3 @@ -48,12 +49,6 @@ extern const u8 gStarterChoose_LabelCoords[][2]; extern const u8 gUnknown_085B1E0C[]; extern const u8 gUnknown_085B1E28[][2]; -extern void clear_scheduled_bg_copies_to_vram(void); -extern void dp13_810BB8C(void); -extern void do_scheduled_bg_tilemap_copies_to_vram(void); -extern u16 sub_818D820(u16); -extern u8 sub_818D3E4(u16 species, u32 trainerId, u32 personality, u8 flags, s16 x, s16 y, u8, u16); - // this file's functions static void MainCallback2_StarterChoose(void); static void sub_8134604(void); @@ -132,7 +127,7 @@ void CB2_ChooseStarter(void) ResetSpriteData(); ResetPaletteFade(); FreeAllSpritePalettes(); - dp13_810BB8C(); + ResetAllPicSprites(); LoadPalette(GetOverworldTextboxPalettePtr(), 0xE0, 0x20); LoadPalette(gBirchBagGrassPal, 0, 0x40); @@ -263,7 +258,7 @@ static void Task_StarterChoose5(u8 taskId) case 0: // YES // Return the starter choice and exit. gSpecialVar_Result = gTasks[taskId].tStarterSelection; - dp13_810BB8C(); + ResetAllPicSprites(); SetMainCallback2(gMain.savedCallback); break; case 1: // NO @@ -271,7 +266,7 @@ static void Task_StarterChoose5(u8 taskId) PlaySE(SE_SELECT); spriteId = gTasks[taskId].tPkmnSpriteId; FreeOamMatrix(gSprites[spriteId].oam.matrixNum); - sub_818D820(spriteId); + FreeAndDestroyMonPicSprite(spriteId); spriteId = gTasks[taskId].tCircleSpriteId; FreeOamMatrix(gSprites[spriteId].oam.matrixNum); @@ -349,7 +344,7 @@ static u8 CreatePokemonFrontSprite(u16 species, u8 x, u8 y) { u8 spriteId; - spriteId = sub_818D3E4(species, 8, 0, 1, x, y, 0xE, 0xFFFF); + spriteId = CreatePicSprite2(species, 8, 0, 1, x, y, 0xE, 0xFFFF); gSprites[spriteId].oam.priority = 0; return spriteId; } diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c new file mode 100644 index 000000000..085e66214 --- /dev/null +++ b/src/trainer_pokemon_sprites.c @@ -0,0 +1,413 @@ +#include "global.h" +#include "sprite.h" +#include "window.h" +#include "malloc.h" +#include "constants/species.h" +#include "palette.h" +#include "decompress.h" +#include "trainer_pokemon_sprites.h" +#include "data2.h" +#include "pokemon.h" +#include "constants/trainers.h" + +extern const struct CompressedSpriteSheet gMonFrontPicTable[NUM_SPECIES]; +extern const struct CompressedSpriteSheet gMonBackPicTable[NUM_SPECIES]; +extern const struct CompressedSpriteSheet gTrainerFrontPicTable[]; +extern const struct CompressedSpriteSheet gTrainerBackPicTable[]; +extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[]; +extern const union AffineAnimCmd *const gUnknown_082FF618[]; +extern const union AffineAnimCmd *const gUnknown_082FF694[]; +extern const union AnimCmd *const gPlayerMonSpriteAnimsTable[]; +extern const union AnimCmd *const *const gMonAnimationsSpriteAnimsPtrTable[NUM_SPECIES]; +extern const union AnimCmd *const *const gUnknown_0830536C[]; + +// Static type declarations + +struct PicData +{ + u8 *frames; + struct SpriteFrameImage *images; + u16 paletteTag; + u8 spriteId; + u8 active; +}; + +// Static RAM declarations +#define PICS_COUNT 8 + +static EWRAM_DATA struct SpriteTemplate sCreatingSpriteTemplate = {}; +static EWRAM_DATA struct PicData sSpritePics[PICS_COUNT] = {}; + +// Static ROM declarations + +// .rodata + +static const struct PicData sDummyPicData = {}; +static const struct OamData gUnknown_0860B064 = +{ + .size = 3 +}; +static const struct OamData gUnknown_0860B06C = +{ + .affineMode = 1, .size = 3 +}; + +// .text + +static void DummyPicSpriteCallback(struct Sprite *sprite) +{ + +} + +bool16 ResetAllPicSprites(void) +{ + int i; + + for (i = 0; i < PICS_COUNT; i ++) + sSpritePics[i] = sDummyPicData; + + return FALSE; +} + +static bool16 DecompressPic(u16 species, u32 personality, bool8 isFrontPic, u8 *dest, bool8 isTrainer, bool8 ignoreDeoxys) +{ + if (!isTrainer) + { + if (isFrontPic) + { + if (!ignoreDeoxys) + LoadSpecialPokePic(&gMonFrontPicTable[species], dest, species, personality, isFrontPic); + else + LoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], dest, species, personality, isFrontPic); + } + else + { + if (!ignoreDeoxys) + LoadSpecialPokePic(&gMonBackPicTable[species], dest, species, personality, isFrontPic); + else + LoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species], dest, species, personality, isFrontPic); + } + } + else + { + if (isFrontPic) + DecompressPicFromTable(&gTrainerFrontPicTable[species], dest, species); + else + DecompressPicFromTable(&gTrainerBackPicTable[species], dest, species); + } + return FALSE; +} + +static bool16 DecompressPic_HandleDeoxys(u16 species, u32 personality, bool8 isFrontPic, u8 *dest, bool8 isTrainer) +{ + return DecompressPic(species, personality, isFrontPic, dest, isTrainer, FALSE); +} + +static void LoadPicPaletteByTagOrSlot(u16 species, u32 otId, u32 personality, u8 paletteSlot, u16 paletteTag, bool8 isTrainer) +{ + if (!isTrainer) + { + if (paletteTag == 0xFFFF) + { + sCreatingSpriteTemplate.paletteTag |= 0xFFFF; + LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality), 0x100 + paletteSlot * 0x10, 0x20); + } + else + { + sCreatingSpriteTemplate.paletteTag = paletteTag; + LoadCompressedObjectPalette(GetMonSpritePalStructFromOtIdPersonality(species, otId, personality)); + } + } + else + { + if (paletteTag == 0xFFFF) + { + sCreatingSpriteTemplate.paletteTag |= 0xFFFF; + LoadCompressedPalette(gTrainerFrontPicPaletteTable[species].data, 0x100 + paletteSlot * 0x10, 0x20); + } + else + { + sCreatingSpriteTemplate.paletteTag = paletteTag; + LoadCompressedObjectPalette(&gTrainerFrontPicPaletteTable[species]); + } + } +} + +static void LoadPicPaletteBySlot(u16 species, u32 otId, u32 personality, u8 paletteSlot, bool8 isTrainer) +{ + if (!isTrainer) + LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality), paletteSlot * 0x10, 0x20); + else + LoadCompressedPalette(gTrainerFrontPicPaletteTable[species].data, paletteSlot * 0x10, 0x20); +} + +static void AssignSpriteAnimsTable(bool8 isTrainer) +{ + if (!isTrainer) + sCreatingSpriteTemplate.anims = gPlayerMonSpriteAnimsTable; + else + sCreatingSpriteTemplate.anims = gUnknown_0830536C[0]; +} + +static u16 CreatePicSprite(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag, bool8 isTrainer, bool8 ignoreDeoxys) +{ + u8 i; + u8 *framePics; + struct SpriteFrameImage *images; + int j; + u8 spriteId; + + for (i = 0; i < PICS_COUNT; i ++) + { + if (!sSpritePics[i].active) + { + break; + } + } + if (i == PICS_COUNT) + { + return 0xFFFF; + } + framePics = Alloc(4 * 0x800); + if (!framePics) + { + return 0xFFFF; + } + images = Alloc(4 * sizeof(struct SpriteFrameImage)); + if (!images) + { + Free(framePics); + return 0xFFFF; + } + if (DecompressPic(species, personality, isFrontPic, framePics, isTrainer, ignoreDeoxys)) + { + // debug trap? + return 0xFFFF; + } + for (j = 0; j < 4; j ++) + { + images[j].data = framePics + 0x800 * j; + images[j].size = 0x800; + } + sCreatingSpriteTemplate.tileTag = 0xFFFF; + sCreatingSpriteTemplate.oam = &gUnknown_0860B064; + AssignSpriteAnimsTable(isTrainer); + sCreatingSpriteTemplate.images = images; + sCreatingSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable; + sCreatingSpriteTemplate.callback = DummyPicSpriteCallback; + LoadPicPaletteByTagOrSlot(species, otId, personality, paletteSlot, paletteTag, isTrainer); + spriteId = CreateSprite(&sCreatingSpriteTemplate, x, y, 0); + if (paletteTag == 0xFFFF) + { + gSprites[spriteId].oam.paletteNum = paletteSlot; + } + sSpritePics[i].frames = framePics; + sSpritePics[i].images = images; + sSpritePics[i].paletteTag = paletteTag; + sSpritePics[i].spriteId = spriteId; + sSpritePics[i].active = TRUE; + return spriteId; +} + +static u16 CreatePicSprite_HandleDeoxys(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag, bool8 isTrainer) +{ + return CreatePicSprite(species, otId, personality, isFrontPic, x, y, paletteSlot, paletteTag, isTrainer, FALSE); +} + +u16 CreatePicSprite2(u16 species, u32 otId, u32 personality, u8 flags, s16 x, s16 y, u8 paletteSlot, u16 paletteTag) +{ + u8 *framePics; + struct SpriteFrameImage *images; + int j; + u8 i; + u8 spriteId; + u8 flags2; + + for (i = 0; i < PICS_COUNT; i ++) + { + if (!sSpritePics[i].active) + { + break; + } + } + if (i == PICS_COUNT) + { + return 0xFFFF; + } + framePics = Alloc(4 * 0x800); + if (!framePics) + { + return 0xFFFF; + } + if (flags & 0x80) + { + flags &= 0x7F; + flags2 = 3; + } + else + { + flags2 = flags; + } + images = Alloc(4 * sizeof(struct SpriteFrameImage)); + if (!images) + { + Free(framePics); + return 0xFFFF; + } + if (DecompressPic(species, personality, flags, framePics, FALSE, FALSE)) + { + // debug trap? + return 0xFFFF; + } + for (j = 0; j < 4; j ++) + { + images[j].data = framePics + 0x800 * j; + images[j].size = 0x800; + } + sCreatingSpriteTemplate.tileTag = 0xFFFF; + sCreatingSpriteTemplate.anims = gMonAnimationsSpriteAnimsPtrTable[species]; + sCreatingSpriteTemplate.images = images; + if (flags2 == 0x01) + { + sCreatingSpriteTemplate.affineAnims = gUnknown_082FF694; + sCreatingSpriteTemplate.oam = &gUnknown_0860B06C; + } + else if (flags2 == 0x00) + { + sCreatingSpriteTemplate.affineAnims = gUnknown_082FF618; + sCreatingSpriteTemplate.oam = &gUnknown_0860B06C; + } + else + { + sCreatingSpriteTemplate.oam = &gUnknown_0860B064; + sCreatingSpriteTemplate.affineAnims = gDummySpriteAffineAnimTable; + } + sCreatingSpriteTemplate.callback = DummyPicSpriteCallback; + LoadPicPaletteByTagOrSlot(species, otId, personality, paletteSlot, paletteTag, FALSE); + spriteId = CreateSprite(&sCreatingSpriteTemplate, x, y, 0); + if (paletteTag == 0xFFFF) + { + gSprites[spriteId].oam.paletteNum = paletteSlot; + } + sSpritePics[i].frames = framePics; + sSpritePics[i].images = images; + sSpritePics[i].paletteTag = paletteTag; + sSpritePics[i].spriteId = spriteId; + sSpritePics[i].active = TRUE; + return spriteId; +} + +static u16 FreeAndDestroyPicSpriteInternal(u16 spriteId) +{ + u8 i; + u8 *framePics; + struct SpriteFrameImage *images; + + for (i = 0; i < PICS_COUNT; i ++) + { + if (sSpritePics[i].spriteId == spriteId) + { + break; + } + } + if (i == PICS_COUNT) + { + return 0xFFFF; + } + framePics = sSpritePics[i].frames; + images = sSpritePics[i].images; + if (sSpritePics[i].paletteTag != 0xFFFF) + { + FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[spriteId].oam.paletteNum)); + } + DestroySprite(&gSprites[spriteId]); + Free(framePics); + Free(images); + sSpritePics[i] = sDummyPicData; + return 0; +} + +static u16 sub_818D65C(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u8 paletteSlot, u8 windowId, bool8 isTrainer) +{ + if (DecompressPic_HandleDeoxys(species, personality, isFrontPic, (u8 *)GetWindowAttribute(windowId, WINDOW_TILE_DATA), FALSE)) + { + return 0xFFFF; + } + LoadPicPaletteBySlot(species, otId, personality, paletteSlot, isTrainer); + return 0; +} + +static u16 sub_818D6CC(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId, bool8 isTrainer) +{ + u8 *framePics; + + framePics = Alloc(4 * 0x800); + if (framePics && !DecompressPic_HandleDeoxys(species, personality, isFrontPic, framePics, isTrainer)) + { + BlitBitmapRectToWindow(windowId, framePics, 0, 0, 0x40, 0x40, destX, destY, 0x40, 0x40); + LoadPicPaletteBySlot(species, otId, personality, paletteSlot, isTrainer); + Free(framePics); + return 0; + } + return 0xFFFF; +} + +static u16 CreateMonPicSprite(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag, bool8 ignoreDeoxys) +{ + return CreatePicSprite(species, otId, personality, isFrontPic, x, y, paletteSlot, paletteTag, FALSE, ignoreDeoxys); +} + +u16 CreateMonPicSprite_HandleDeoxys(u16 species, u32 otId, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag) +{ + return CreateMonPicSprite(species, otId, personality, isFrontPic, x, y, paletteSlot, paletteTag, FALSE); +} + +u16 FreeAndDestroyMonPicSprite(u16 spriteId) +{ + return FreeAndDestroyPicSpriteInternal(spriteId); +} + +u16 sub_818D834(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u8 paletteSlot, u8 windowId) +{ + return sub_818D65C(species, otId, personality, isFrontPic, paletteSlot, windowId, FALSE); +} + +u16 sub_818D864(u16 species, u32 otId, u32 personality, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId) +{ + return sub_818D6CC(species, otId, personality, isFrontPic, destX, destY, paletteSlot, windowId, FALSE); +} + +u16 CreateTrainerPicSprite(u16 species, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag) +{ + return CreatePicSprite_HandleDeoxys(species, 0, 0, isFrontPic, x, y, paletteSlot, paletteTag, TRUE); +} + +u16 FreeAndDestroyTrainerPicSprite(u16 spriteId) +{ + return FreeAndDestroyPicSpriteInternal(spriteId); +} + +u16 sub_818D904(u16 species, bool8 isFrontPic, u8 paletteSlot, u8 windowId) +{ + return sub_818D65C(species, 0, 0, isFrontPic, paletteSlot, windowId, TRUE); +} + +u16 sub_818D938(u16 species, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId) +{ + return sub_818D6CC(species, 0, 0, isFrontPic, destX, destY, paletteSlot, windowId, TRUE); +} + +u16 PlayerGenderToFrontTrainerPicId_Debug(u8 gender, bool8 getClass) +{ + if (getClass == TRUE) + { + switch (gender) + { + default: + return gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_MAY]; + case MALE: + return gFacilityClassToPicIndex[FACILITY_CLASS_PKMN_TRAINER_BRENDAN]; + } + } + return gender; +} -- cgit v1.2.3 From 239c56496b2bc88f485b6305ddce44155735410b Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 19 Aug 2018 17:13:05 +0200 Subject: This is impossible --- src/battle_frontier_1.c | 388 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 382 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/battle_frontier_1.c b/src/battle_frontier_1.c index a1d8b2c31..692f942fc 100644 --- a/src/battle_frontier_1.c +++ b/src/battle_frontier_1.c @@ -20,6 +20,8 @@ #include "menu.h" #include "sound.h" #include "pokemon_icon.h" +#include "data2.h" +#include "international_string_util.h" #include "trainer_pokemon_sprites.h" #include "constants/species.h" #include "constants/moves.h" @@ -54,12 +56,16 @@ extern u32 sub_81A39C4(void); extern u16 sub_8162548(u8, u8); extern u16 RandomizeFacilityTrainerMonId(u16); extern u8 GetFrontierEnemyMonLevel(void); -extern void sub_8195898(u8 *dst, u16 trainerId); +extern void CopyDomeOpponentName(u8 *dst, u16 trainerId); extern u16 sub_81A5060(u8, u8); +extern u8 sub_81A50F0(u8, u8); +extern u8 sub_81A50B0(u8); extern void sub_8162614(u16, u8); extern void sub_81A4C30(void); extern bool8 sub_81A3610(void); extern u16 sub_81A4FF0(u8); +extern u8 GetFrontierTrainerFrontSpriteId(u16); +extern u8 GetFrontierOpponentClass(u16); extern u8 gUnknown_0203CEF8[]; extern u32 gUnknown_0203CD70; @@ -90,8 +96,17 @@ extern const u8 gUnknown_0860D080[]; extern const u8 gUnknown_0860D15C[]; extern const u8 gUnknown_0860D1A0[]; extern const u8 gUnknown_0860D19C[]; +extern const u8 gUnknown_0860D349[]; extern const u8 gUnknown_0860D1C0[]; +extern const u8 gUnknown_0860D343[]; +extern const u8 gUnknown_0860D340[]; +extern const u8 gUnknown_0860D346[]; +extern const u8 gUnknown_0860B358[][16]; +extern const u8 gUnknown_0860C988[31][16]; extern const u8 gUnknown_0860D3F1[][2]; +extern const u8 *const gBattleDomePotentialPointers[]; +extern const u8 *const gBattleDomeOpponentStylePointers[]; +extern const u8 *const gBattleDomeOpponentStatsPointers[]; // gfx extern const u8 gUnknown_08D83D50[]; @@ -102,6 +117,9 @@ extern const u8 gUnknown_08D85358[]; extern const u8 gUnknown_08D85600[]; extern const u8 gUnknown_08D854C8[]; +// text +extern const u8 gTrainerClassNames[][0xD]; + // This file's functions. u8 GetDomeTrainerMonIvs(u16 trainerId); void SwapDomeTrainers(s32 id1, s32 id2, u16 *statsArray); @@ -120,9 +138,13 @@ void sub_8194220(u8 taskId); void sub_8194B54(void); void sub_8194B70(void); void sub_819314C(u8, u8); -void sub_81924E0(u8, u8); +void sub_81924E0(u8, u8 trainerTournamentId); u8 sub_819221C(u8 taskId); s32 sub_8192F08(u8, u8*); +u8 GetDomeBrainTrainerPicId(void); +u8 GetDomeBrainTrainerClass(void); +void CopyDomeBrainTrainerName(u8 *dst); +void CopyDomeOpponentName(u8 *dst, u16 trainerId); // code void sub_818E9AC(void) @@ -549,7 +571,7 @@ void sub_818F9B0(void) void sub_818F9E0(void) { StringCopy(gStringVar1, gRoundsStringTable[gSaveBlock2Ptr->frontier.field_CB2]); - sub_8195898(gStringVar2, gTrainerBattleOpponent_A); + CopyDomeOpponentName(gStringVar2, gTrainerBattleOpponent_A); } void sub_818FA20(void) @@ -2444,9 +2466,363 @@ u8 sub_819221C(u8 taskId) return retVal; } -/* -void sub_81924E0(u8 arg0, u8 arg1) +void sub_81924E0(u8 arg0, u8 trainerTournamentId) { + s32 i, j, k; + s16 *allocatedArray; + struct TextSubPrinter textPrinter; + s32 trainerId; + s32 windowId; + s32 x, y; + u8 palSlot; + u8 nature; + + j = 0; + windowId = 0; + x = 0; + y = 0; + palSlot = 0; + allocatedArray = AllocZeroed(sizeof(s16) * 18); + trainerId = gSaveBlock2Ptr->frontier.domeTrainers[trainerTournamentId].trainerId; + + if (arg0 & 1) + j = 8, windowId = 9, palSlot = 2; + if (arg0 & 2) + x = 256; + if (arg0 & 4) + y = 160; + if (arg0 & 8) + x = -256; + if (arg0 & 0x10) + y = -160; + + if (trainerId == TRAINER_PLAYER) + gUnknown_0203CD78->arr[j] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF); + else if (trainerId == TRAINER_FRONTIER_BRAIN) + gUnknown_0203CD78->arr[j] = CreateTrainerPicSprite(GetDomeBrainTrainerPicId(), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF); + else + gUnknown_0203CD78->arr[j] = CreateTrainerPicSprite(GetFrontierTrainerFrontSpriteId(trainerId), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF); + + if (arg0 & 0x1E) + gSprites[gUnknown_0203CD78->arr[j]].invisible = 1; + + for (i = 0; i < 3; i++) + { + if (trainerId == TRAINER_PLAYER) + gUnknown_0203CD78->arr[i + 2 + j] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i], + sub_8190938, + x | gUnknown_0860D340[i], + y + gUnknown_0860D343[i], + 0, 0, TRUE); + else if (trainerId == TRAINER_FRONTIER_BRAIN) + gUnknown_0203CD78->arr[i + 2 + j] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i], + sub_8190938, + x | gUnknown_0860D340[i], + y + gUnknown_0860D343[i], + 0, 0, TRUE); + else + gUnknown_0203CD78->arr[i + 2 + j] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].species, + sub_8190938, + x | gUnknown_0860D340[i], + y + gUnknown_0860D343[i], + 0, 0, TRUE); + gSprites[gUnknown_0203CD78->arr[i + 2 + j]].oam.priority = 0; + if (arg0 & 0x1E) + gSprites[gUnknown_0203CD78->arr[i + 2 + j]].invisible = 1; + } + textPrinter.fontId = 2; + textPrinter.x = 0; + textPrinter.y = 0; + textPrinter.currentX = 0; + textPrinter.currentY = 0; + textPrinter.letterSpacing = 2; + textPrinter.lineSpacing = 0; + textPrinter.fontColor_l = 0; + textPrinter.fgColor = 14; + textPrinter.bgColor = 0; + textPrinter.shadowColor = 13; + + i = 0; + if (trainerId == TRAINER_PLAYER) + j = gFacilityClassToTrainerClass[FACILITY_CLASS_PKMN_TRAINER_BRENDAN]; + else if (trainerId == TRAINER_FRONTIER_BRAIN) + j = GetDomeBrainTrainerClass(); + else + j = GetFrontierOpponentClass(trainerId); + + for (;gTrainerClassNames[j][i] != EOS; i++) + gStringVar1[i] = gTrainerClassNames[j][i]; + gStringVar1[i] = CHAR_SPACE; + gStringVar1[i + 1] = EOS; + + if (trainerId == TRAINER_PLAYER) + { + StringAppend(gStringVar1, gSaveBlock2Ptr->playerName); + } + else if (trainerId == TRAINER_FRONTIER_BRAIN) + { + CopyDomeBrainTrainerName(gStringVar2); + StringAppend(gStringVar1, gStringVar2); + } + else + { + CopyDomeOpponentName(gStringVar2, trainerId); + StringAppend(gStringVar1, gStringVar2); + } + + textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, gStringVar1, 0xD0, textPrinter.letterSpacing); + textPrinter.current_text_offset = gStringVar1; + textPrinter.windowId = windowId; + PutWindowTilemap(windowId); + CopyWindowToVram(windowId, 3); + AddTextPrinter(&textPrinter, 0, NULL); + textPrinter.letterSpacing = 0; + + for (i = 0; i < 3; i++) + { + textPrinter.currentY = gUnknown_0860D346[i]; + if (trainerId == TRAINER_PLAYER) + textPrinter.current_text_offset = gSpeciesNames[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]]; + else if (trainerId == TRAINER_FRONTIER_BRAIN) + textPrinter.current_text_offset = gSpeciesNames[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]]; + else + textPrinter.current_text_offset = gSpeciesNames[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].species]; + + textPrinter.windowId = windowId + i + 1; + if (i == 1) + textPrinter.currentX = 7; + else + textPrinter.currentX = 0; + + j = i + 1; + PutWindowTilemap(windowId + j); + CopyWindowToVram(windowId + j, 3); + AddTextPrinter(&textPrinter, 0, NULL); + } + + PutWindowTilemap(windowId + 4); + CopyWindowToVram(windowId + 4, 3); + if (trainerId == TRAINER_FRONTIER_BRAIN) + textPrinter.current_text_offset = gBattleDomePotentialPointers[16]; + else + textPrinter.current_text_offset = gBattleDomePotentialPointers[trainerTournamentId]; + + textPrinter.fontId = 1; + textPrinter.windowId = windowId + 4; + textPrinter.currentX = 0; + textPrinter.y = 4; + textPrinter.currentY = 4; + AddTextPrinter(&textPrinter, 0, NULL); + + for (i = 0; i < 3; i++) + { + for (j = 0; j < 4; j++) + { + for (k = 0; k < DOME_TOURNAMENT_TRAINERS_COUNT; k++) + { + if (trainerId == TRAINER_FRONTIER_BRAIN) + allocatedArray[k] += gUnknown_0860B358[sub_81A5060(i, j)][k]; + else if (trainerId == TRAINER_PLAYER) + allocatedArray[k] += gUnknown_0860B358[gSaveBlock2Ptr->frontier.field_EFC[i].moves[j]][k]; + else + allocatedArray[k] += gUnknown_0860B358[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].moves[j]][k]; + } + } + } + + for (i = 0; i < ARRAY_COUNT(gUnknown_0860C988); i++) + { + s32 r4 = 0; + + for (k = 0, j = 0; j < DOME_TOURNAMENT_TRAINERS_COUNT; j++) + { + if (gUnknown_0860C988[i][j] != 0) + { + r4++; + if (allocatedArray[j] != 0 && allocatedArray[j] >= gUnknown_0860C988[i][j]) + k++; + } + } + if (r4 == k) + break; + } + + textPrinter.current_text_offset = gBattleDomeOpponentStylePointers[i]; + textPrinter.y = 20; + textPrinter.currentY = 20; + AddTextPrinter(&textPrinter, 0, NULL); + + for (i = 0; i < 18; i++) + allocatedArray[i] = 0; + + if (trainerId == TRAINER_FRONTIER_BRAIN || trainerId == TRAINER_PLAYER) + { + for (i = 0; i < 3; i++) + { + for (j = 0; j < 6; j++) + { + if (trainerId == TRAINER_FRONTIER_BRAIN) + allocatedArray[j] = sub_81A50F0(i, j); + else + allocatedArray[j] = gSaveBlock2Ptr->frontier.field_EFC[i].evs[j]; + } + allocatedArray[6] += allocatedArray[0]; + for (j = 0; j < 5; j++) + { + if (trainerId == TRAINER_FRONTIER_BRAIN) + nature = sub_81A50B0(i); + else + nature = gSaveBlock2Ptr->frontier.field_EFC[i].nature; + + if (gNatureStatTable[nature][j] > 0) + { + allocatedArray[j + 7] += (allocatedArray[j + 1] * 110) / 100; + } + else if (gNatureStatTable[nature][j] < 0) + { + allocatedArray[j + 7] += (allocatedArray[j + 1] * 90) / 100; + allocatedArray[j + 13]++; + } + else + { + allocatedArray[j + 7] += allocatedArray[j + 1]; + } + } + } + for (j = 0, i = 0; i < 6; i++) + j += allocatedArray[6 + i]; + for (i = 0; i < 6; i++) + allocatedArray[i] = (allocatedArray[6 + i] * 100) / j; + } + else + { + for (i = 0; i < 3; i++) + { + s32 evBits = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].evSpread; + for (k = 0, j = 0; j < 6; j++) + { + allocatedArray[j] = 0; + if (evBits & 1) + k++; + evBits >>= 1; + } + k = 510 / k; + evBits = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].evSpread; + for (j = 0; j < 6; j++) + { + if (evBits & 1) + allocatedArray[j] = k; + evBits >>= 1; + } + + allocatedArray[6] += allocatedArray[0]; + for (j = 0; j < 5; j++) + { + nature = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].nature; + if (gNatureStatTable[nature][j] > 0) + { + allocatedArray[j + 7] += (allocatedArray[j + 1] * 110) / 100; + } + else if (gNatureStatTable[nature][j] < 0) + { + allocatedArray[j + 7] += (allocatedArray[j + 1] * 90) / 100; + allocatedArray[j + 13]++; + } + else + { + allocatedArray[j + 7] += allocatedArray[j + 1]; + } + } + } + for (j = 0, i = 0; i < 6; i++) + j += allocatedArray[i + 6]; + for (i = 0; i < 6; i++) + allocatedArray[i] = (allocatedArray[6 + i] * 100) / j; + } + + for (i = 0, j = 0, k = 0; k < 6; k++) + { + if (allocatedArray[k] > 29) + { + if (i == 2) + { + if (allocatedArray[6] < allocatedArray[k]) + { + s16 var_24 = allocatedArray[7]; + if (allocatedArray[7] < allocatedArray[k]) + { + if (allocatedArray[6] < allocatedArray[7]) + { + allocatedArray[6] = var_24; + allocatedArray[7] = k; + } + else + { + allocatedArray[7] = k; + } + } + else + { + allocatedArray[6] = var_24; + allocatedArray[7] = k; + } + } + else + { + if (allocatedArray[7] < allocatedArray[k]) + allocatedArray[7] = k; + } + } + else + { + allocatedArray[i + 7] = k; + i++; + } + } + if (allocatedArray[k] == 0) + { + if (j == 2) + { + if (allocatedArray[k + 12] >= 2 + || ((allocatedArray[k + 12] == 1 && (allocatedArray[12 + allocatedArray[8]] != 0 || allocatedArray[12 + allocatedArray[9]] == 0)) + ) + ) + { + allocatedArray[8] = allocatedArray[9]; + allocatedArray[9] = k; + } + else if (allocatedArray[k + 12] == 1 && allocatedArray[12 + allocatedArray[8]] == 0) + { + allocatedArray[8] = allocatedArray[9]; + allocatedArray[9] = k; + } + else if (allocatedArray[k + 12] == 1 && allocatedArray[12 + allocatedArray[9]] == 0) + { + allocatedArray[9] = k; + } + } + else + { + allocatedArray[j + 8] = k; + j++; + } + } + } + + if (i == 2) + i = gUnknown_0860D349[allocatedArray[6]] + (allocatedArray[7] - (allocatedArray[6] + 1)); + else if (i == 1) + i = allocatedArray[6] + 15; + else if (j == 2) + i = gUnknown_0860D349[allocatedArray[8]] + (allocatedArray[9] - (allocatedArray[8] + 1)) + 21; + else if (j == 1) + i = allocatedArray[8] + 36; + else + i = 42; + textPrinter.current_text_offset = gBattleDomeOpponentStatsPointers[i]; + textPrinter.y = 36; + textPrinter.currentY = 36; + AddTextPrinter(&textPrinter, 0, NULL); + Free(allocatedArray); } -*/ -- cgit v1.2.3 From 4a0f7398ece5d07e432c555ed75106554db8f97c Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 19 Aug 2018 20:21:37 +0200 Subject: Cant believe Ive matched this --- src/battle_frontier_1.c | 146 ++++++++++++++++++++++++------------------------ 1 file changed, 73 insertions(+), 73 deletions(-) (limited to 'src') diff --git a/src/battle_frontier_1.c b/src/battle_frontier_1.c index 692f942fc..f65a25a16 100644 --- a/src/battle_frontier_1.c +++ b/src/battle_frontier_1.c @@ -138,7 +138,7 @@ void sub_8194220(u8 taskId); void sub_8194B54(void); void sub_8194B70(void); void sub_819314C(u8, u8); -void sub_81924E0(u8, u8 trainerTournamentId); +static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId); u8 sub_819221C(u8 taskId); s32 sub_8192F08(u8, u8*); u8 GetDomeBrainTrainerPicId(void); @@ -1338,7 +1338,7 @@ void sub_8190400(u8 taskId) } else { - sub_81924E0(0, r5); + DisplayTrainerInfoOnCard(0, r5); } SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP); if (r9 != 0) @@ -1647,7 +1647,7 @@ void sub_8190CD4(u8 taskId) s32 var; s32 r9 = gTasks[taskId].data[3]; s32 taskId2 = gTasks[taskId].data[4]; - s32 arg, arg2; + s32 trainerTournamentId, arg2; switch (gTasks[taskId].data[0]) { @@ -1715,15 +1715,15 @@ void sub_8190CD4(u8 taskId) { gBattle_BG2_X = 0; gBattle_BG2_Y = 320; - arg = gUnknown_0860D080[gTasks[taskId2].data[1]]; - sub_81924E0(gTasks[taskId].data[2] | 0x10, arg); + trainerTournamentId = gUnknown_0860D080[gTasks[taskId2].data[1]]; + DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 0x10, trainerTournamentId); } else { gBattle_BG2_X = 256; gBattle_BG2_Y = 0; - arg = gUnknown_0860D080[gTasks[taskId2].data[1]]; - sub_81924E0(gTasks[taskId].data[2] | 0x10, arg); + trainerTournamentId = gUnknown_0860D080[gTasks[taskId2].data[1]]; + DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 0x10, trainerTournamentId); gUnknown_0203CD78->unk_10 = 0; } } @@ -1735,8 +1735,8 @@ void sub_8190CD4(u8 taskId) sub_8192F08(arg2, gUnknown_0203CD78->unk_11); gBattle_BG2_X = 0; gBattle_BG2_Y = 320; - arg = gUnknown_0203CD78->unk_11[0]; - sub_81924E0(gTasks[taskId].data[2] | 0x10, arg); + trainerTournamentId = gUnknown_0203CD78->unk_11[0]; + DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 0x10, trainerTournamentId); } else if (gUnknown_0203CD78->unk_10 == 2) { @@ -1744,8 +1744,8 @@ void sub_8190CD4(u8 taskId) sub_8192F08(arg2, gUnknown_0203CD78->unk_11); gBattle_BG2_X = 0; gBattle_BG2_Y = 320; - arg = gUnknown_0203CD78->unk_11[1]; - sub_81924E0(gTasks[taskId].data[2] | 0x10, arg); + trainerTournamentId = gUnknown_0203CD78->unk_11[1]; + DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 0x10, trainerTournamentId); } else { @@ -1831,15 +1831,15 @@ void sub_8190CD4(u8 taskId) { gBattle_BG2_X = 0; gBattle_BG2_Y = 160; - arg = gUnknown_0860D080[gTasks[taskId2].data[1]]; - sub_81924E0(gTasks[taskId].data[2] | 4, arg); + trainerTournamentId = gUnknown_0860D080[gTasks[taskId2].data[1]]; + DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 4, trainerTournamentId); } else { gBattle_BG2_X = 0; gBattle_BG2_Y = 0; - arg = gUnknown_0860D080[gTasks[taskId2].data[1]]; - sub_81924E0(gTasks[taskId].data[2] | 4, arg); + trainerTournamentId = gUnknown_0860D080[gTasks[taskId2].data[1]]; + DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 4, trainerTournamentId); gUnknown_0203CD78->unk_10 = 0; } } @@ -1851,8 +1851,8 @@ void sub_8190CD4(u8 taskId) sub_8192F08(arg2, gUnknown_0203CD78->unk_11); gBattle_BG2_X = 0; gBattle_BG2_Y = 160; - arg = gUnknown_0203CD78->unk_11[0]; - sub_81924E0(gTasks[taskId].data[2] | 4, arg); + trainerTournamentId = gUnknown_0203CD78->unk_11[0]; + DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 4, trainerTournamentId); } else if (gUnknown_0203CD78->unk_10 == 2) { @@ -1860,8 +1860,8 @@ void sub_8190CD4(u8 taskId) sub_8192F08(arg2, gUnknown_0203CD78->unk_11); gBattle_BG2_X = 0; gBattle_BG2_Y = 160; - arg = gUnknown_0203CD78->unk_11[1]; - sub_81924E0(gTasks[taskId].data[2] | 4, arg); + trainerTournamentId = gUnknown_0203CD78->unk_11[1]; + DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 4, trainerTournamentId); } else { @@ -1944,15 +1944,15 @@ void sub_8190CD4(u8 taskId) { gBattle_BG2_X = 256; gBattle_BG2_Y = 160; - arg = gUnknown_0860D080[gTasks[taskId2].data[1]]; - sub_81924E0(gTasks[taskId].data[2] | 8, arg); + trainerTournamentId = gUnknown_0860D080[gTasks[taskId2].data[1]]; + DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 8, trainerTournamentId); } else { gBattle_BG2_X = 256; gBattle_BG2_Y = 0; - arg = gUnknown_0860D15C[(gTasks[taskId2].data[1] * 4) + (gUnknown_0203CD78->unk_10 - 1)]; - sub_819314C(gTasks[taskId].data[2] | 8, arg); + trainerTournamentId = gUnknown_0860D15C[(gTasks[taskId2].data[1] * 4) + (gUnknown_0203CD78->unk_10 - 1)]; + sub_819314C(gTasks[taskId].data[2] | 8, trainerTournamentId); } for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) @@ -2027,8 +2027,8 @@ void sub_8190CD4(u8 taskId) { gBattle_BG2_X = 256; gBattle_BG2_Y = 160; - arg = gUnknown_0203CD78->unk_11[0]; - sub_81924E0(gTasks[taskId].data[2] | 8, arg); + trainerTournamentId = gUnknown_0203CD78->unk_11[0]; + DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 8, trainerTournamentId); } else { @@ -2116,8 +2116,8 @@ void sub_8190CD4(u8 taskId) gBattle_BG2_X = 0; gBattle_BG2_Y = 0; } - arg = gUnknown_0860D15C[(gUnknown_0203CD78->unk_10 - 1) + (gTasks[taskId2].data[1] * 4)]; - sub_819314C(gTasks[taskId].data[2] | 2, arg); + trainerTournamentId = gUnknown_0860D15C[(gUnknown_0203CD78->unk_10 - 1) + (gTasks[taskId2].data[1] * 4)]; + sub_819314C(gTasks[taskId].data[2] | 2, trainerTournamentId); for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) { @@ -2191,8 +2191,8 @@ void sub_8190CD4(u8 taskId) { gBattle_BG2_X = 256; gBattle_BG2_Y = 160; - arg = gUnknown_0203CD78->unk_11[1]; - sub_81924E0(gTasks[taskId].data[2] | 2, arg); + trainerTournamentId = gUnknown_0203CD78->unk_11[1]; + DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 2, trainerTournamentId); } else { @@ -2462,79 +2462,81 @@ u8 sub_819221C(u8 taskId) gTasks[taskId].data[2] ^= 1; } - return retVal; } -void sub_81924E0(u8 arg0, u8 trainerTournamentId) +static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) { - s32 i, j, k; - s16 *allocatedArray; struct TextSubPrinter textPrinter; - s32 trainerId; - s32 windowId; - s32 x, y; - u8 palSlot; - u8 nature; - - j = 0; - windowId = 0; - x = 0; - y = 0; - palSlot = 0; - allocatedArray = AllocZeroed(sizeof(s16) * 18); + s32 i, j, k; + s32 trainerId = 0; + u8 nature = 0; + s32 arrId = 0; + s32 windowId = 0; + s32 x = 0, y = 0; + u8 palSlot = 0; + s16 *allocatedArray = AllocZeroed(sizeof(s16) * 18); trainerId = gSaveBlock2Ptr->frontier.domeTrainers[trainerTournamentId].trainerId; - if (arg0 & 1) - j = 8, windowId = 9, palSlot = 2; - if (arg0 & 2) + if (flags & 1) + arrId = 8, windowId = 9, palSlot = 2; + if (flags & 2) x = 256; - if (arg0 & 4) + if (flags & 4) y = 160; - if (arg0 & 8) + if (flags & 8) x = -256; - if (arg0 & 0x10) + if (flags & 0x10) y = -160; if (trainerId == TRAINER_PLAYER) - gUnknown_0203CD78->arr[j] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF); + gUnknown_0203CD78->arr[arrId] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF); else if (trainerId == TRAINER_FRONTIER_BRAIN) - gUnknown_0203CD78->arr[j] = CreateTrainerPicSprite(GetDomeBrainTrainerPicId(), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF); + gUnknown_0203CD78->arr[arrId] = CreateTrainerPicSprite(GetDomeBrainTrainerPicId(), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF); else - gUnknown_0203CD78->arr[j] = CreateTrainerPicSprite(GetFrontierTrainerFrontSpriteId(trainerId), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF); + gUnknown_0203CD78->arr[arrId] = CreateTrainerPicSprite(GetFrontierTrainerFrontSpriteId(trainerId), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF); - if (arg0 & 0x1E) - gSprites[gUnknown_0203CD78->arr[j]].invisible = 1; + if (flags & 0x1E) + gSprites[gUnknown_0203CD78->arr[arrId]].invisible = 1; for (i = 0; i < 3; i++) { if (trainerId == TRAINER_PLAYER) - gUnknown_0203CD78->arr[i + 2 + j] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i], + { + gUnknown_0203CD78->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i], sub_8190938, x | gUnknown_0860D340[i], y + gUnknown_0860D343[i], 0, 0, TRUE); + gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].oam.priority = 0; + } else if (trainerId == TRAINER_FRONTIER_BRAIN) - gUnknown_0203CD78->arr[i + 2 + j] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i], + { + gUnknown_0203CD78->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i], sub_8190938, x | gUnknown_0860D340[i], y + gUnknown_0860D343[i], 0, 0, TRUE); + gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].oam.priority = 0; + } else - gUnknown_0203CD78->arr[i + 2 + j] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].species, + { + gUnknown_0203CD78->arr[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].species, sub_8190938, x | gUnknown_0860D340[i], y + gUnknown_0860D343[i], 0, 0, TRUE); - gSprites[gUnknown_0203CD78->arr[i + 2 + j]].oam.priority = 0; - if (arg0 & 0x1E) - gSprites[gUnknown_0203CD78->arr[i + 2 + j]].invisible = 1; + gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].oam.priority = 0; + } + + if (flags & 0x1E) + gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].invisible = 1; } textPrinter.fontId = 2; textPrinter.x = 0; textPrinter.y = 0; - textPrinter.currentX = 0; - textPrinter.currentY = 0; + textPrinter.currentX = textPrinter.x; + textPrinter.currentY = textPrinter.y; textPrinter.letterSpacing = 2; textPrinter.lineSpacing = 0; textPrinter.fontColor_l = 0; @@ -2588,15 +2590,14 @@ void sub_81924E0(u8 arg0, u8 trainerTournamentId) else textPrinter.current_text_offset = gSpeciesNames[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].species]; - textPrinter.windowId = windowId + i + 1; + textPrinter.windowId = 1 + i + windowId; if (i == 1) textPrinter.currentX = 7; else textPrinter.currentX = 0; - j = i + 1; - PutWindowTilemap(windowId + j); - CopyWindowToVram(windowId + j, 3); + PutWindowTilemap(1 + i + windowId); + CopyWindowToVram(1 + i + windowId, 3); AddTextPrinter(&textPrinter, 0, NULL); } @@ -2748,12 +2749,11 @@ void sub_81924E0(u8 arg0, u8 trainerTournamentId) { if (allocatedArray[6] < allocatedArray[k]) { - s16 var_24 = allocatedArray[7]; if (allocatedArray[7] < allocatedArray[k]) { if (allocatedArray[6] < allocatedArray[7]) { - allocatedArray[6] = var_24; + allocatedArray[6] = allocatedArray[7]; allocatedArray[7] = k; } else @@ -2763,7 +2763,7 @@ void sub_81924E0(u8 arg0, u8 trainerTournamentId) } else { - allocatedArray[6] = var_24; + allocatedArray[6] = allocatedArray[7]; allocatedArray[7] = k; } } @@ -2775,7 +2775,7 @@ void sub_81924E0(u8 arg0, u8 trainerTournamentId) } else { - allocatedArray[i + 7] = k; + allocatedArray[i + 6] = k; i++; } } @@ -2784,7 +2784,7 @@ void sub_81924E0(u8 arg0, u8 trainerTournamentId) if (j == 2) { if (allocatedArray[k + 12] >= 2 - || ((allocatedArray[k + 12] == 1 && (allocatedArray[12 + allocatedArray[8]] != 0 || allocatedArray[12 + allocatedArray[9]] == 0)) + || ((allocatedArray[k + 12] == 1 && allocatedArray[12 + allocatedArray[8]] == 0 && allocatedArray[12 + allocatedArray[9]] == 0) ) ) { -- cgit v1.2.3 From 5da12f2b21e5e9018fc151b2765587cb84109cfb Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 19 Aug 2018 22:26:07 +0200 Subject: battle dome - more work --- src/battle_frontier_1.c | 432 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 428 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/battle_frontier_1.c b/src/battle_frontier_1.c index f65a25a16..0c718ed74 100644 --- a/src/battle_frontier_1.c +++ b/src/battle_frontier_1.c @@ -101,9 +101,10 @@ extern const u8 gUnknown_0860D1C0[]; extern const u8 gUnknown_0860D343[]; extern const u8 gUnknown_0860D340[]; extern const u8 gUnknown_0860D346[]; -extern const u8 gUnknown_0860B358[][16]; extern const u8 gUnknown_0860C988[31][16]; extern const u8 gUnknown_0860D3F1[][2]; +extern const u8 gUnknown_0860D3C4[][3]; +extern const u8 gUnknown_0860D3B4[]; extern const u8 *const gBattleDomePotentialPointers[]; extern const u8 *const gBattleDomeOpponentStylePointers[]; extern const u8 *const gBattleDomeOpponentStatsPointers[]; @@ -146,6 +147,367 @@ u8 GetDomeBrainTrainerClass(void); void CopyDomeBrainTrainerName(u8 *dst); void CopyDomeOpponentName(u8 *dst, u16 trainerId); +// const rom data +ALIGNED(4) +static const u8 sMovePoints[MOVES_COUNT][DOME_TOURNAMENT_TRAINERS_COUNT] = +{ + [MOVE_NONE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_POUND] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_KARATE_CHOP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_DOUBLE_SLAP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_COMET_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_MEGA_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_PAY_DAY] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_FIRE_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_ICE_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_THUNDER_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_SCRATCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_VICE_GRIP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_GUILLOTINE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0}, + [MOVE_RAZOR_WIND] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_SWORDS_DANCE] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, + [MOVE_CUT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_GUST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_WING_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_WHIRLWIND] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_FLY] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_BIND] = {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_SLAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_VINE_WHIP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_STOMP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_DOUBLE_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_MEGA_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0}, + [MOVE_JUMP_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_ROLLING_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_SAND_ATTACK] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_HEADBUTT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_HORN_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_FURY_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_HORN_DRILL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0}, + [MOVE_TACKLE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_BODY_SLAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_WRAP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_TAKE_DOWN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_THRASH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_DOUBLE_EDGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_TAIL_WHIP] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_POISON_STING] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_TWINEEDLE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_PIN_MISSILE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_LEER] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_BITE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_GROWL] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_ROAR] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_SING] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SUPERSONIC] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SONIC_BOOM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_DISABLE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_ACID] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_EMBER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_FLAMETHROWER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, + [MOVE_MIST] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_WATER_GUN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_HYDRO_PUMP] = {1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0}, + [MOVE_SURF] = {1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0}, + [MOVE_ICE_BEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, + [MOVE_BLIZZARD] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1}, + [MOVE_PSYBEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_BUBBLE_BEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_AURORA_BEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_HYPER_BEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0}, + [MOVE_PECK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_DRILL_PECK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_SUBMISSION] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_LOW_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_COUNTER] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0}, + [MOVE_SEISMIC_TOSS] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_STRENGTH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_ABSORB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_MEGA_DRAIN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_LEECH_SEED] = {1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_GROWTH] = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_RAZOR_LEAF] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SOLAR_BEAM] = {1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0}, + [MOVE_POISON_POWDER] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_STUN_SPORE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SLEEP_POWDER] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_PETAL_DANCE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_STRING_SHOT] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_DRAGON_RAGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_FIRE_SPIN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_THUNDER_SHOCK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_THUNDERBOLT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, + [MOVE_THUNDER_WAVE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_THUNDER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1}, + [MOVE_ROCK_THROW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_EARTHQUAKE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0}, + [MOVE_FISSURE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0}, + [MOVE_DIG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_TOXIC] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_CONFUSION] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_PSYCHIC] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, + [MOVE_HYPNOSIS] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_MEDITATE] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_AGILITY] = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_QUICK_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_RAGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_TELEPORT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_NIGHT_SHADE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_MIMIC] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_SCREECH] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_DOUBLE_TEAM] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_RECOVER] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_HARDEN] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_MINIMIZE] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SMOKESCREEN] = {0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_CONFUSE_RAY] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_WITHDRAW] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_DEFENSE_CURL] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_BARRIER] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_LIGHT_SCREEN] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_HAZE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_REFLECT] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_FOCUS_ENERGY] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_BIDE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_METRONOME] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, + [MOVE_MIRROR_MOVE] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, + [MOVE_SELF_DESTRUCT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0}, + [MOVE_EGG_BOMB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0}, + [MOVE_LICK] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_SMOG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_SLUDGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_BONE_CLUB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_FIRE_BLAST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1}, + [MOVE_WATERFALL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_CLAMP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_SWIFT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SKULL_BASH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0}, + [MOVE_SPIKE_CANNON] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_CONSTRICT] = {0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_AMNESIA] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_KINESIS] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SOFT_BOILED] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_HI_JUMP_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_GLARE] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_DREAM_EATER] = {1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0}, + [MOVE_POISON_GAS] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_BARRAGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_LEECH_LIFE] = {0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_LOVELY_KISS] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SKY_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1}, + [MOVE_TRANSFORM] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_BUBBLE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_DIZZY_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_SPORE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_FLASH] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_PSYWAVE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SPLASH] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_ACID_ARMOR] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_CRABHAMMER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, + [MOVE_EXPLOSION] = {0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0}, + [MOVE_FURY_SWIPES] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_BONEMERANG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_REST] = {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_ROCK_SLIDE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_HYPER_FANG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_SHARPEN] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_CONVERSION] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_TRI_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_SUPER_FANG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SLASH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_SUBSTITUTE] = {0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_STRUGGLE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0}, + [MOVE_SKETCH] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0}, + [MOVE_TRIPLE_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_THIEF] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_SPIDER_WEB] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_MIND_READER] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0}, + [MOVE_NIGHTMARE] = {1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_FLAME_WHEEL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_SNORE] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_CURSE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_FLAIL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_CONVERSION_2] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_AEROBLAST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0}, + [MOVE_COTTON_SPORE] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_REVERSAL] = {1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_SPITE] = {0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_POWDER_SNOW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_PROTECT] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0}, + [MOVE_MACH_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_SCARY_FACE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_FAINT_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SWEET_KISS] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_BELLY_DRUM] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SLUDGE_BOMB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1}, + [MOVE_MUD_SLAP] = {0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_OCTAZOOKA] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_SPIKES] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_ZAP_CANNON] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1}, + [MOVE_FORESIGHT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_DESTINY_BOND] = {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, + [MOVE_PERISH_SONG] = {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, + [MOVE_ICY_WIND] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_DETECT] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0}, + [MOVE_BONE_RUSH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_LOCK_ON] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0}, + [MOVE_OUTRAGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1}, + [MOVE_SANDSTORM] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_GIGA_DRAIN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0}, + [MOVE_ENDURE] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_CHARM] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_ROLLOUT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_FALSE_SWIPE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_SWAGGER] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_MILK_DRINK] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SPARK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_FURY_CUTTER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_STEEL_WING] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_MEAN_LOOK] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0}, + [MOVE_ATTRACT] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_SLEEP_TALK] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, + [MOVE_HEAL_BELL] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, + [MOVE_RETURN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_PRESENT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0}, + [MOVE_FRUSTRATION] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_SAFEGUARD] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_PAIN_SPLIT] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_SACRED_FIRE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1}, + [MOVE_MAGNITUDE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_DYNAMIC_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1}, + [MOVE_MEGAHORN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, + [MOVE_DRAGON_BREATH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_BATON_PASS] = {1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_ENCORE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0}, + [MOVE_PURSUIT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_RAPID_SPIN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_SWEET_SCENT] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_IRON_TAIL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1}, + [MOVE_METAL_CLAW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_VITAL_THROW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_MORNING_SUN] = {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, + [MOVE_SYNTHESIS] = {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, + [MOVE_MOONLIGHT] = {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, + [MOVE_HIDDEN_POWER] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_CROSS_CHOP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0}, + [MOVE_TWISTER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_RAIN_DANCE] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, + [MOVE_SUNNY_DAY] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, + [MOVE_CRUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_MIRROR_COAT] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_PSYCH_UP] = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_EXTREME_SPEED] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0}, + [MOVE_ANCIENT_POWER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1}, + [MOVE_SHADOW_BALL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_FUTURE_SIGHT] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_ROCK_SMASH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_WHIRLPOOL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_BEAT_UP] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_FAKE_OUT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_UPROAR] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_STOCKPILE] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SPIT_UP] = {1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0}, + [MOVE_SWALLOW] = {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_HEAT_WAVE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1}, + [MOVE_HAIL] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_TORMENT] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_FLATTER] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_WILL_O_WISP] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_MEMENTO] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_FACADE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_FOCUS_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0}, + [MOVE_SMELLING_SALT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_FOLLOW_ME] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_NATURE_POWER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_CHARGE] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_TAUNT] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_HELPING_HAND] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_TRICK] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_ROLE_PLAY] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_WISH] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_ASSIST] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0}, + [MOVE_INGRAIN] = {1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_SUPERPOWER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0}, + [MOVE_MAGIC_COAT] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0}, + [MOVE_RECYCLE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_REVENGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0}, + [MOVE_BRICK_BREAK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_YAWN] = {1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_KNOCK_OFF] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_ENDEAVOR] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0}, + [MOVE_ERUPTION] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0}, + [MOVE_SKILL_SWAP] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_IMPRISON] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0}, + [MOVE_REFRESH] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_GRUDGE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0}, + [MOVE_SNATCH] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0}, + [MOVE_SECRET_POWER] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_DIVE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_ARM_THRUST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_CAMOUFLAGE] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_TAIL_GLOW] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_LUSTER_PURGE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1}, + [MOVE_MIST_BALL] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1}, + [MOVE_FEATHER_DANCE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_TEETER_DANCE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_BLAZE_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_MUD_SPORT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_ICE_BALL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_NEEDLE_ARM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_SLACK_OFF] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_HYPER_VOICE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0}, + [MOVE_POISON_FANG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_CRUSH_CLAW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_BLAST_BURN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0}, + [MOVE_HYDRO_CANNON] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0}, + [MOVE_METEOR_MASH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1}, + [MOVE_ASTONISH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_WEATHER_BALL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_AROMATHERAPY] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, + [MOVE_FAKE_TEARS] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_AIR_CUTTER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_OVERHEAT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1}, + [MOVE_ODOR_SLEUTH] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_ROCK_TOMB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_SILVER_WIND] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1}, + [MOVE_METAL_SOUND] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_GRASS_WHISTLE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_TICKLE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_COSMIC_POWER] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_WATER_SPOUT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0}, + [MOVE_SIGNAL_BEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_SHADOW_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_EXTRASENSORY] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_SKY_UPPERCUT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SAND_TOMB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_SHEER_COLD] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0}, + [MOVE_MUDDY_WATER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1}, + [MOVE_BULLET_SEED] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_AERIAL_ACE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_ICICLE_SPEAR] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_IRON_DEFENSE] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_BLOCK] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0}, + [MOVE_HOWL] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_DRAGON_CLAW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_FRENZY_PLANT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0}, + [MOVE_BULK_UP] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_BOUNCE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1}, + [MOVE_MUD_SHOT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_POISON_TAIL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_COVET] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_VOLT_TACKLE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0}, + [MOVE_MAGICAL_LEAF] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_WATER_SPORT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_CALM_MIND] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_LEAF_BLADE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_DRAGON_DANCE] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_ROCK_BLAST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SHOCK_WAVE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_WATER_PULSE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_DOOM_DESIRE] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0}, + [MOVE_PSYCHO_BOOST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1}, +}; + // code void sub_818E9AC(void) { @@ -2622,11 +2984,11 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) for (k = 0; k < DOME_TOURNAMENT_TRAINERS_COUNT; k++) { if (trainerId == TRAINER_FRONTIER_BRAIN) - allocatedArray[k] += gUnknown_0860B358[sub_81A5060(i, j)][k]; + allocatedArray[k] += sMovePoints[sub_81A5060(i, j)][k]; else if (trainerId == TRAINER_PLAYER) - allocatedArray[k] += gUnknown_0860B358[gSaveBlock2Ptr->frontier.field_EFC[i].moves[j]][k]; + allocatedArray[k] += sMovePoints[gSaveBlock2Ptr->frontier.field_EFC[i].moves[j]][k]; else - allocatedArray[k] += gUnknown_0860B358[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].moves[j]][k]; + allocatedArray[k] += sMovePoints[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].moves[j]][k]; } } } @@ -2826,3 +3188,65 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) AddTextPrinter(&textPrinter, 0, NULL); Free(allocatedArray); } + +s32 sub_8192F08(u8 arg0, u8 *arg1) +{ + s32 i; + u8 tournamentId; + s32 retVal = 0; + s32 count = 0; + + for (i = gUnknown_0860D3C4[arg0][0]; i < gUnknown_0860D3C4[arg0][0] + gUnknown_0860D3C4[arg0][1]; i++) + { + tournamentId = gUnknown_0860D3B4[i]; + if (!gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].unk1) + { + arg1[count] = tournamentId; + if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId == TRAINER_PLAYER) + StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); + else if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId == TRAINER_FRONTIER_BRAIN) + CopyDomeBrainTrainerName(gStringVar1); + else + CopyDomeOpponentName(gStringVar1, gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId); + count++; + } + } + + if (count == 2) + return 0; + + for (i = gUnknown_0860D3C4[arg0][0]; i < gUnknown_0860D3C4[arg0][0] + gUnknown_0860D3C4[arg0][1]; i++) + { + tournamentId = gUnknown_0860D3B4[i]; + if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].unk1 + && gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].unk2 >= gUnknown_0860D3C4[arg0][2]) + { + arg1[count] = tournamentId; + count++; + if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].unk2 == gUnknown_0860D3C4[arg0][2]) + { + StringCopy(gStringVar2, gMoveNames[gSaveBlock2Ptr->frontier.field_EC0[tournamentId]]); + retVal = gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].unk3 * 2; + if (gSaveBlock2Ptr->frontier.field_EC0[tournamentId] == 0 && gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].unk3 == 0) + retVal = 4; + } + else + { + if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId == TRAINER_PLAYER) + StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); + else if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId == TRAINER_FRONTIER_BRAIN) + CopyDomeBrainTrainerName(gStringVar1); + else + CopyDomeOpponentName(gStringVar1, gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId); + } + } + + if (count == 2) + break; + } + + if (arg0 == 14) + return retVal + 2; + else + return retVal + 1; +} -- cgit v1.2.3 From a12b69eae1d24168e0135b42c766b3b5d64d7007 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 20 Aug 2018 22:56:05 +0200 Subject: DisplayMatchInfoOnCard decompiled --- src/battle_frontier_1.c | 372 ++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 297 insertions(+), 75 deletions(-) (limited to 'src') diff --git a/src/battle_frontier_1.c b/src/battle_frontier_1.c index 0c718ed74..ccead0845 100644 --- a/src/battle_frontier_1.c +++ b/src/battle_frontier_1.c @@ -105,9 +105,15 @@ extern const u8 gUnknown_0860C988[31][16]; extern const u8 gUnknown_0860D3F1[][2]; extern const u8 gUnknown_0860D3C4[][3]; extern const u8 gUnknown_0860D3B4[]; +extern const u8 gUnknown_0860D3A8[]; +extern const u8 gUnknown_0860D3AB[]; +extern const u8 gUnknown_0860D3AE[]; +extern const u8 gUnknown_0860D3B1[]; extern const u8 *const gBattleDomePotentialPointers[]; extern const u8 *const gBattleDomeOpponentStylePointers[]; extern const u8 *const gBattleDomeOpponentStatsPointers[]; +extern const u8 *const gBattleDomeWinStringsPointers[]; +extern const u8 *const gBattleDomeMatchNumberPointers[]; // gfx extern const u8 gUnknown_08D83D50[]; @@ -127,7 +133,7 @@ void SwapDomeTrainers(s32 id1, s32 id2, u16 *statsArray); void CalcDomeMonStats(u16 species, s32 level, s32 ivs, u8 evBits, u8 nature, s32 *stats); void CreateDomeTrainerMons(u16 tournamentTrainerId); u16 TrainerIdToTournamentId(u16 trainerId); -s32 sub_818FC78(u16 tournamentTrainerId); +s32 GetTrainerMonCountInBits(u16 tournamentTrainerId); s32 sub_818FCBC(u16 tournamentTrainerId, bool8 arg1); s32 sub_818FDB8(u16 tournamentTrainerId, bool8 arg1); s32 sub_818FFC0(s32 move, s32 species, s32 arg2); @@ -138,7 +144,7 @@ void sub_8190CD4(u8 taskId); void sub_8194220(u8 taskId); void sub_8194B54(void); void sub_8194B70(void); -void sub_819314C(u8, u8); +static void DrawMatchInfoOnCard(u8 flags, u8 matchNo); static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId); u8 sub_819221C(u8 taskId); s32 sub_8192F08(u8, u8*); @@ -979,7 +985,7 @@ void CreateDomeTrainerMons(u16 tournamentTrainerId) s32 i, bits; ZeroEnemyPartyMons(); - bits = sub_818FC78(tournamentTrainerId); + bits = GetTrainerMonCountInBits(tournamentTrainerId); otId = Random32(); if (Random() % 10 > 5) { @@ -1007,7 +1013,7 @@ void CreateDomeTrainerMons(u16 tournamentTrainerId) } } -s32 sub_818FC78(u16 tournamentTrainerId) +s32 GetTrainerMonCountInBits(u16 tournamentTrainerId) { s32 bits; if (Random() & 1) @@ -1695,7 +1701,7 @@ void sub_8190400(u8 taskId) gTasks[i].data[4] = r7; if (r9 == 2) { - sub_819314C(0, r5); + DrawMatchInfoOnCard(0, r5); gUnknown_0203CD78->unk_10 = 1; } else @@ -1730,7 +1736,11 @@ void sub_8190400(u8 taskId) } } -void sub_8190790(struct Sprite *sprite) +// Note: Card scrolling up means the current card goes down and another one appears from top. +// The same is true for scrolling left. +// That means that the sprite needs to move with the moving card in the opposite scrolling direction. + +static void SpriteCb_TrainerIconCardScrollUp(struct Sprite *sprite) { sprite->pos1.y += 4; if (sprite->data[0] != 0) @@ -1750,7 +1760,7 @@ void sub_8190790(struct Sprite *sprite) } } -void sub_81907F8(struct Sprite *sprite) +static void SpriteCb_TrainerIconCardScrollDown(struct Sprite *sprite) { sprite->pos1.y -= 4; if (sprite->data[0] != 0) @@ -1770,7 +1780,7 @@ void sub_81907F8(struct Sprite *sprite) } } -void sub_8190860(struct Sprite *sprite) +static void SpriteCb_TrainerIconCardScrollLeft(struct Sprite *sprite) { sprite->pos1.x += 4; if (sprite->data[0] != 0) @@ -1790,7 +1800,7 @@ void sub_8190860(struct Sprite *sprite) } } -void sub_81908CC(struct Sprite *sprite) +static void SpriteCb_TrainerIconCardScrollRight(struct Sprite *sprite) { sprite->pos1.x -= 4; if (sprite->data[0] != 0) @@ -1810,15 +1820,17 @@ void sub_81908CC(struct Sprite *sprite) } } -void sub_8190938(struct Sprite *sprite) +#define sMonIconStill data[3] + +static void SpriteCb_MonIcon(struct Sprite *sprite) { - if (!sprite->data[3]) + if (!sprite->sMonIconStill) UpdateMonIconFrame(sprite); } -void sub_8190950(struct Sprite *sprite) +static void SpriteCb_MonIconCardScrollUp(struct Sprite *sprite) { - if (!sprite->data[3]) + if (!sprite->sMonIconStill) UpdateMonIconFrame(sprite); sprite->pos1.y += 4; if (sprite->data[0] != 0) @@ -1826,7 +1838,7 @@ void sub_8190950(struct Sprite *sprite) if (sprite->pos1.y >= -16) sprite->invisible = 0; if (++sprite->data[1] == 40) - sprite->callback = sub_8190938; + sprite->callback = SpriteCb_MonIcon; } else { @@ -1838,9 +1850,9 @@ void sub_8190950(struct Sprite *sprite) } } -void sub_81909CC(struct Sprite *sprite) +static void SpriteCb_MonIconCardScrollDown(struct Sprite *sprite) { - if (!sprite->data[3]) + if (!sprite->sMonIconStill) UpdateMonIconFrame(sprite); sprite->pos1.y -= 4; if (sprite->data[0] != 0) @@ -1848,7 +1860,7 @@ void sub_81909CC(struct Sprite *sprite) if (sprite->pos1.y <= 176) sprite->invisible = 0; if (++sprite->data[1] == 40) - sprite->callback = sub_8190938; + sprite->callback = SpriteCb_MonIcon; } else { @@ -1860,9 +1872,9 @@ void sub_81909CC(struct Sprite *sprite) } } -void sub_8190A48(struct Sprite *sprite) +static void SpriteCb_MonIconCardScrollLeft(struct Sprite *sprite) { - if (!sprite->data[3]) + if (!sprite->sMonIconStill) UpdateMonIconFrame(sprite); sprite->pos1.x += 4; if (sprite->data[0] != 0) @@ -1870,7 +1882,7 @@ void sub_8190A48(struct Sprite *sprite) if (sprite->pos1.x >= -16) sprite->invisible = 0; if (++sprite->data[1] == 64) - sprite->callback = sub_8190938; + sprite->callback = SpriteCb_MonIcon; } else { @@ -1882,9 +1894,9 @@ void sub_8190A48(struct Sprite *sprite) } } -void sub_8190AC4(struct Sprite *sprite) +static void SpriteCb_MonIconCardScrollRight(struct Sprite *sprite) { - if (!sprite->data[3]) + if (!sprite->sMonIconStill) UpdateMonIconFrame(sprite); sprite->pos1.x -= 4; if (sprite->data[0] != 0) @@ -1892,7 +1904,7 @@ void sub_8190AC4(struct Sprite *sprite) if (sprite->pos1.x <= 256) sprite->invisible = 0; if (++sprite->data[1] == 64) - sprite->callback = sub_8190938; + sprite->callback = SpriteCb_MonIcon; } else { @@ -2006,10 +2018,11 @@ void sub_8190C6C(struct Sprite *sprite) void sub_8190CD4(u8 taskId) { s32 i; - s32 var; + s32 windowId = 0; s32 r9 = gTasks[taskId].data[3]; s32 taskId2 = gTasks[taskId].data[4]; - s32 trainerTournamentId, arg2; + s32 trainerTournamentId = 0; + s32 matchNo = 0; switch (gTasks[taskId].data[0]) { @@ -2035,11 +2048,11 @@ void sub_8190CD4(u8 taskId) case 1 ... 8: gTasks[taskId].data[5] = i; if (gTasks[taskId].data[2] != 0) - var = 9; + windowId = 9; else - var = 0; + windowId = 0; - for (i = var; i < var + 9; i++) + for (i = windowId; i < windowId + 9; i++) { CopyWindowToVram(i, 2); FillWindowPixelBuffer(i, 0); @@ -2093,8 +2106,8 @@ void sub_8190CD4(u8 taskId) { if (gUnknown_0203CD78->unk_10 == 0) { - arg2 = gTasks[taskId2].data[1] - 16; - sub_8192F08(arg2, gUnknown_0203CD78->unk_11); + matchNo = gTasks[taskId2].data[1] - 16; + sub_8192F08(matchNo, gUnknown_0203CD78->unk_11); gBattle_BG2_X = 0; gBattle_BG2_Y = 320; trainerTournamentId = gUnknown_0203CD78->unk_11[0]; @@ -2102,8 +2115,8 @@ void sub_8190CD4(u8 taskId) } else if (gUnknown_0203CD78->unk_10 == 2) { - arg2 = gTasks[taskId2].data[1] - 16; - sub_8192F08(arg2, gUnknown_0203CD78->unk_11); + matchNo = gTasks[taskId2].data[1] - 16; + sub_8192F08(matchNo, gUnknown_0203CD78->unk_11); gBattle_BG2_X = 0; gBattle_BG2_Y = 320; trainerTournamentId = gUnknown_0203CD78->unk_11[1]; @@ -2113,8 +2126,8 @@ void sub_8190CD4(u8 taskId) { gBattle_BG2_X = 256; gBattle_BG2_Y = 160; - arg2 = gTasks[taskId2].data[1] - 16; - sub_819314C(gTasks[taskId].data[2] | 0x10, arg2); + matchNo = gTasks[taskId2].data[1] - 16; + DrawMatchInfoOnCard(gTasks[taskId].data[2] | 0x10, matchNo); } } @@ -2124,7 +2137,7 @@ void sub_8190CD4(u8 taskId) { if (gUnknown_0203CD78->arr[i] != 0xFF) { - gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190790; + gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollUp; gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; @@ -2135,7 +2148,7 @@ void sub_8190CD4(u8 taskId) { if (gUnknown_0203CD78->arr[i] != 0xFF) { - gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190950; + gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollUp; gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; @@ -2148,7 +2161,7 @@ void sub_8190CD4(u8 taskId) { if (gUnknown_0203CD78->arr[i] != 0xFF) { - gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190790; + gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollUp; gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; @@ -2159,7 +2172,7 @@ void sub_8190CD4(u8 taskId) { if (gUnknown_0203CD78->arr[i] != 0xFF) { - gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190950; + gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollUp; gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; @@ -2209,8 +2222,8 @@ void sub_8190CD4(u8 taskId) { if (gUnknown_0203CD78->unk_10 == 0) { - arg2 = gTasks[taskId2].data[1] - 16; - sub_8192F08(arg2, gUnknown_0203CD78->unk_11); + matchNo = gTasks[taskId2].data[1] - 16; + sub_8192F08(matchNo, gUnknown_0203CD78->unk_11); gBattle_BG2_X = 0; gBattle_BG2_Y = 160; trainerTournamentId = gUnknown_0203CD78->unk_11[0]; @@ -2218,8 +2231,8 @@ void sub_8190CD4(u8 taskId) } else if (gUnknown_0203CD78->unk_10 == 2) { - arg2 = gTasks[taskId2].data[1] - 16; - sub_8192F08(arg2, gUnknown_0203CD78->unk_11); + matchNo = gTasks[taskId2].data[1] - 16; + sub_8192F08(matchNo, gUnknown_0203CD78->unk_11); gBattle_BG2_X = 0; gBattle_BG2_Y = 160; trainerTournamentId = gUnknown_0203CD78->unk_11[1]; @@ -2229,8 +2242,8 @@ void sub_8190CD4(u8 taskId) { gBattle_BG2_X = 256; gBattle_BG2_Y = 0; - arg2 = gTasks[taskId2].data[1] - 16; - sub_819314C(gTasks[taskId].data[2] | 4, arg2); + matchNo = gTasks[taskId2].data[1] - 16; + DrawMatchInfoOnCard(gTasks[taskId].data[2] | 4, matchNo); } } @@ -2240,7 +2253,7 @@ void sub_8190CD4(u8 taskId) { if (gUnknown_0203CD78->arr[i] != 0xFF) { - gSprites[gUnknown_0203CD78->arr[i]].callback = sub_81907F8; + gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollDown; gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; @@ -2251,7 +2264,7 @@ void sub_8190CD4(u8 taskId) { if (gUnknown_0203CD78->arr[i] != 0xFF) { - gSprites[gUnknown_0203CD78->arr[i]].callback = sub_81909CC; + gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollDown; gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; @@ -2264,7 +2277,7 @@ void sub_8190CD4(u8 taskId) { if (gUnknown_0203CD78->arr[i] != 0xFF) { - gSprites[gUnknown_0203CD78->arr[i]].callback = sub_81907F8; + gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollDown; gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; @@ -2275,7 +2288,7 @@ void sub_8190CD4(u8 taskId) { if (gUnknown_0203CD78->arr[i] != 0xFF) { - gSprites[gUnknown_0203CD78->arr[i]].callback = sub_81909CC; + gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollDown; gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; @@ -2313,8 +2326,8 @@ void sub_8190CD4(u8 taskId) { gBattle_BG2_X = 256; gBattle_BG2_Y = 0; - trainerTournamentId = gUnknown_0860D15C[(gTasks[taskId2].data[1] * 4) + (gUnknown_0203CD78->unk_10 - 1)]; - sub_819314C(gTasks[taskId].data[2] | 8, trainerTournamentId); + matchNo = gUnknown_0860D15C[(gTasks[taskId2].data[1] * 4) + (gUnknown_0203CD78->unk_10 - 1)]; + DrawMatchInfoOnCard(gTasks[taskId].data[2] | 8, matchNo); } for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) @@ -2323,7 +2336,7 @@ void sub_8190CD4(u8 taskId) { if (gUnknown_0203CD78->arr[i] != 0xFF) { - gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190860; + gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollLeft; gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; @@ -2334,7 +2347,7 @@ void sub_8190CD4(u8 taskId) { if (gUnknown_0203CD78->arr[i] != 0xFF) { - gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190A48; + gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollLeft; gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; @@ -2347,7 +2360,7 @@ void sub_8190CD4(u8 taskId) { if (gUnknown_0203CD78->arr[i] != 0xFF) { - gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190860; + gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollLeft; gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; @@ -2358,7 +2371,7 @@ void sub_8190CD4(u8 taskId) { if (gUnknown_0203CD78->arr[i] != 0xFF) { - gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190A48; + gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollLeft; gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; @@ -2396,8 +2409,8 @@ void sub_8190CD4(u8 taskId) { gBattle_BG2_X = 0; gBattle_BG2_Y = 160; - arg2 = gTasks[taskId2].data[1] - 16; - sub_819314C(gTasks[taskId].data[2] | 8, arg2); + matchNo = gTasks[taskId2].data[1] - 16; + DrawMatchInfoOnCard(gTasks[taskId].data[2] | 8, matchNo); } for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) @@ -2406,7 +2419,7 @@ void sub_8190CD4(u8 taskId) { if (gUnknown_0203CD78->arr[i] != 0xFF) { - gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190860; + gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollLeft; gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; @@ -2417,7 +2430,7 @@ void sub_8190CD4(u8 taskId) { if (gUnknown_0203CD78->arr[i] != 0xFF) { - gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190A48; + gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollLeft; gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; @@ -2430,7 +2443,7 @@ void sub_8190CD4(u8 taskId) { if (gUnknown_0203CD78->arr[i] != 0xFF) { - gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190860; + gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollLeft; gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; @@ -2441,7 +2454,7 @@ void sub_8190CD4(u8 taskId) { if (gUnknown_0203CD78->arr[i] != 0xFF) { - gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190A48; + gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollLeft; gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; @@ -2478,8 +2491,8 @@ void sub_8190CD4(u8 taskId) gBattle_BG2_X = 0; gBattle_BG2_Y = 0; } - trainerTournamentId = gUnknown_0860D15C[(gUnknown_0203CD78->unk_10 - 1) + (gTasks[taskId2].data[1] * 4)]; - sub_819314C(gTasks[taskId].data[2] | 2, trainerTournamentId); + matchNo = gUnknown_0860D15C[(gUnknown_0203CD78->unk_10 - 1) + (gTasks[taskId2].data[1] * 4)]; + DrawMatchInfoOnCard(gTasks[taskId].data[2] | 2, matchNo); for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) { @@ -2487,7 +2500,7 @@ void sub_8190CD4(u8 taskId) { if (gUnknown_0203CD78->arr[i] != 0xFF) { - gSprites[gUnknown_0203CD78->arr[i]].callback = sub_81908CC; + gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollRight; gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; @@ -2498,7 +2511,7 @@ void sub_8190CD4(u8 taskId) { if (gUnknown_0203CD78->arr[i] != 0xFF) { - gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190AC4; + gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollRight; gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; @@ -2511,7 +2524,7 @@ void sub_8190CD4(u8 taskId) { if (gUnknown_0203CD78->arr[i] != 0xFF) { - gSprites[gUnknown_0203CD78->arr[i]].callback = sub_81908CC; + gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollRight; gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; @@ -2522,7 +2535,7 @@ void sub_8190CD4(u8 taskId) { if (gUnknown_0203CD78->arr[i] != 0xFF) { - gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190AC4; + gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollRight; gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; @@ -2560,8 +2573,8 @@ void sub_8190CD4(u8 taskId) { gBattle_BG2_X = 0; gBattle_BG2_Y = 160; - arg2 = gTasks[taskId2].data[1] - 16; - sub_819314C(gTasks[taskId].data[2] | 2, arg2); + matchNo = gTasks[taskId2].data[1] - 16; + DrawMatchInfoOnCard(gTasks[taskId].data[2] | 2, matchNo); } for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) @@ -2570,7 +2583,7 @@ void sub_8190CD4(u8 taskId) { if (gUnknown_0203CD78->arr[i] != 0xFF) { - gSprites[gUnknown_0203CD78->arr[i]].callback = sub_81908CC; + gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollRight; gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; @@ -2581,7 +2594,7 @@ void sub_8190CD4(u8 taskId) { if (gUnknown_0203CD78->arr[i] != 0xFF) { - gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190AC4; + gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollRight; gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; @@ -2594,7 +2607,7 @@ void sub_8190CD4(u8 taskId) { if (gUnknown_0203CD78->arr[i] != 0xFF) { - gSprites[gUnknown_0203CD78->arr[i]].callback = sub_81908CC; + gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollRight; gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; @@ -2605,7 +2618,7 @@ void sub_8190CD4(u8 taskId) { if (gUnknown_0203CD78->arr[i] != 0xFF) { - gSprites[gUnknown_0203CD78->arr[i]].callback = sub_8190AC4; + gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollRight; gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; @@ -2866,7 +2879,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) if (trainerId == TRAINER_PLAYER) { gUnknown_0203CD78->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i], - sub_8190938, + SpriteCb_MonIcon, x | gUnknown_0860D340[i], y + gUnknown_0860D343[i], 0, 0, TRUE); @@ -2875,7 +2888,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) else if (trainerId == TRAINER_FRONTIER_BRAIN) { gUnknown_0203CD78->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i], - sub_8190938, + SpriteCb_MonIcon, x | gUnknown_0860D340[i], y + gUnknown_0860D343[i], 0, 0, TRUE); @@ -2884,7 +2897,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) else { gUnknown_0203CD78->arr[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].species, - sub_8190938, + SpriteCb_MonIcon, x | gUnknown_0860D340[i], y + gUnknown_0860D343[i], 0, 0, TRUE); @@ -3250,3 +3263,212 @@ s32 sub_8192F08(u8 arg0, u8 *arg1) else return retVal + 1; } + +static void DrawMatchInfoOnCard(u8 flags, u8 matchNo) +{ + struct TextSubPrinter textPrinter; + s32 tournamentIds[2]; + s32 trainerIds[2]; + bool32 lost[2]; + s32 i; + s32 winStringId = 0; + s32 arrId = 0; + s32 windowId = 0; + s32 x = 0, y = 0; + u8 palSlot = 0; + + if (flags & 1) + arrId = 8, windowId = 9, palSlot = 2; + if (flags & 2) + x = 256; + if (flags & 4) + y = 160; + if (flags & 8) + x = -256; + if (flags & 0x10) + y = -160; + + // Copy trainers information to handy arrays. + winStringId = sub_8192F08(matchNo, gUnknown_0203CD78->unk_11); + for (i = 0; i < 2; i++) + { + tournamentIds[i] = gUnknown_0203CD78->unk_11[i]; + trainerIds[i] = gSaveBlock2Ptr->frontier.domeTrainers[tournamentIds[i]].trainerId; + if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentIds[i]].unk2 <= gUnknown_0860D3C4[matchNo][2] + && gSaveBlock2Ptr->frontier.domeTrainers[tournamentIds[i]].unk1) + lost[i] = TRUE; + else + lost[i] = FALSE; + } + + // Draw first trainer sprite. + if (trainerIds[0] == TRAINER_PLAYER) + gUnknown_0203CD78->arr[arrId] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), TRUE, x + 48, y + 88, palSlot + 12, 0xFFFF); + else if (trainerIds[0] == TRAINER_FRONTIER_BRAIN) + gUnknown_0203CD78->arr[arrId] = CreateTrainerPicSprite(GetDomeBrainTrainerPicId(), TRUE, x + 48, y + 88, palSlot + 12, 0xFFFF); + else + gUnknown_0203CD78->arr[arrId] = CreateTrainerPicSprite(GetFrontierTrainerFrontSpriteId(trainerIds[0]), TRUE, x + 48, y + 88, palSlot + 12, 0xFFFF); + + if (flags & 0x1E) + gSprites[gUnknown_0203CD78->arr[arrId]].invisible = 1; + if (lost[0]) + gSprites[gUnknown_0203CD78->arr[arrId]].oam.paletteNum = 3; + + // Draw second trainer sprite. + if (trainerIds[1] == TRAINER_PLAYER) + gUnknown_0203CD78->arr[1 + arrId] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), TRUE, x + 192, y + 88, palSlot + 13, 0xFFFF); + else if (trainerIds[1] == TRAINER_FRONTIER_BRAIN) + gUnknown_0203CD78->arr[1 + arrId] = CreateTrainerPicSprite(GetDomeBrainTrainerPicId(), TRUE, x + 192, y + 88, palSlot + 13, 0xFFFF); + else + gUnknown_0203CD78->arr[1 + arrId] = CreateTrainerPicSprite(GetFrontierTrainerFrontSpriteId(trainerIds[1]), TRUE, x + 192, y + 88, palSlot + 13, 0xFFFF); + + if (flags & 0x1E) + gSprites[gUnknown_0203CD78->arr[1 + arrId]].invisible = 1; + if (lost[1]) + gSprites[gUnknown_0203CD78->arr[1 + arrId]].oam.paletteNum = 3; + + // Draw first trainer's pokemon icons. + for (i = 0; i < 3; i++) + { + if (trainerIds[0] == TRAINER_PLAYER) + { + gUnknown_0203CD78->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[0]][i], + SpriteCb_MonIcon, + x | gUnknown_0860D3A8[i], + y + gUnknown_0860D3AB[i], + 0, 0, TRUE); + gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].oam.priority = 0; + } + else if (trainerIds[0] == TRAINER_FRONTIER_BRAIN) + { + gUnknown_0203CD78->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[0]][i], + SpriteCb_MonIcon, + x | gUnknown_0860D3A8[i], + y + gUnknown_0860D3AB[i], + 0, 0, TRUE); + gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].oam.priority = 0; + } + else + { + gUnknown_0203CD78->arr[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[0]][i]].species, + SpriteCb_MonIcon, + x | gUnknown_0860D3A8[i], + y + gUnknown_0860D3AB[i], + 0, 0, TRUE); + gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].oam.priority = 0; + } + + if (flags & 0x1E) + gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].invisible = 1; + if (lost[0]) + { + gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].oam.paletteNum = 3; + gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].sMonIconStill = TRUE; + } + } + + // Draw second trainer's pokemon icons. + for (i = 0; i < 3; i++) + { + if (trainerIds[1] == TRAINER_PLAYER) + { + gUnknown_0203CD78->arr[5 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[1]][i], + SpriteCb_MonIcon, + x | gUnknown_0860D3AE[i], + y + gUnknown_0860D3B1[i], + 0, 0, TRUE); + gSprites[gUnknown_0203CD78->arr[5 + i + arrId]].oam.priority = 0; + } + else if (trainerIds[1] == TRAINER_FRONTIER_BRAIN) + { + gUnknown_0203CD78->arr[5 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[1]][i], + SpriteCb_MonIcon, + x | gUnknown_0860D3AE[i], + y + gUnknown_0860D3B1[i], + 0, 0, TRUE); + gSprites[gUnknown_0203CD78->arr[5 + i + arrId]].oam.priority = 0; + } + else + { + gUnknown_0203CD78->arr[5 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[1]][i]].species, + SpriteCb_MonIcon, + x | gUnknown_0860D3AE[i], + y + gUnknown_0860D3B1[i], + 0, 0, TRUE); + gSprites[gUnknown_0203CD78->arr[5 + i + arrId]].oam.priority = 0; + } + + if (flags & 0x1E) + gSprites[gUnknown_0203CD78->arr[5 + i + arrId]].invisible = 1; + if (lost[1]) + { + gSprites[gUnknown_0203CD78->arr[5 + i + arrId]].oam.paletteNum = 3; + gSprites[gUnknown_0203CD78->arr[5 + i + arrId]].sMonIconStill = TRUE; + } + } + + // Print the win string (or 'Let the battle begin!' one). + textPrinter.x = 0; + textPrinter.y = 2; + textPrinter.currentX = textPrinter.x; + textPrinter.currentY = textPrinter.y; + textPrinter.letterSpacing = 0; + textPrinter.lineSpacing = 0; + textPrinter.fontColor_l = 0; + textPrinter.fgColor = 14; + textPrinter.bgColor = 0; + textPrinter.shadowColor = 13; + StringExpandPlaceholders(gStringVar4, gBattleDomeWinStringsPointers[winStringId]); + textPrinter.current_text_offset = gStringVar4; + textPrinter.windowId = windowId + 8; + textPrinter.fontId = 1; + PutWindowTilemap(windowId + 8); + CopyWindowToVram(windowId + 8, 3); + textPrinter.currentX = 0; + textPrinter.currentY = textPrinter.y = 0; + AddTextPrinter(&textPrinter, 0, NULL); + + // Print first trainer's name. + if (trainerIds[0] == TRAINER_PLAYER) + StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); + else if (trainerIds[0] == TRAINER_FRONTIER_BRAIN) + CopyDomeBrainTrainerName(gStringVar1); + else + CopyDomeOpponentName(gStringVar1, trainerIds[0]); + + textPrinter.fontId = 2; + textPrinter.letterSpacing = 2; + textPrinter.current_text_offset = gStringVar1; + textPrinter.windowId = windowId + 6; + textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.current_text_offset, 0x40, textPrinter.letterSpacing); + textPrinter.currentY = textPrinter.y = 2; + PutWindowTilemap(windowId + 6); + CopyWindowToVram(windowId + 6, 3); + AddTextPrinter(&textPrinter, 0, NULL); + + // Print second trainer's name. + if (trainerIds[1] == TRAINER_PLAYER) + StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); + else if (trainerIds[1] == TRAINER_FRONTIER_BRAIN) + CopyDomeBrainTrainerName(gStringVar1); + else + CopyDomeOpponentName(gStringVar1, trainerIds[1]); + + textPrinter.current_text_offset = gStringVar1; + textPrinter.windowId = windowId + 7; + textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.current_text_offset, 0x40, textPrinter.letterSpacing); + textPrinter.currentY = textPrinter.y = 2; + PutWindowTilemap(windowId + 7); + CopyWindowToVram(windowId + 7, 3); + AddTextPrinter(&textPrinter, 0, NULL); + + // Print match number. + textPrinter.letterSpacing = 0; + textPrinter.current_text_offset = gBattleDomeMatchNumberPointers[matchNo]; + textPrinter.windowId = windowId + 5; + textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.current_text_offset, 0xA0, textPrinter.letterSpacing); + textPrinter.currentY = textPrinter.y = 2; + PutWindowTilemap(windowId + 5); + CopyWindowToVram(windowId + 5, 3); + AddTextPrinter(&textPrinter, 0, NULL); +} -- cgit v1.2.3 From dea1de3fed1e47323dd148fa62225712fc0d52b2 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 21 Aug 2018 23:36:59 +0200 Subject: More battle dome --- src/battle_frontier_1.c | 186 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 177 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/battle_frontier_1.c b/src/battle_frontier_1.c index ccead0845..db6f99c8c 100644 --- a/src/battle_frontier_1.c +++ b/src/battle_frontier_1.c @@ -23,6 +23,7 @@ #include "data2.h" #include "international_string_util.h" #include "trainer_pokemon_sprites.h" +#include "scanline_effect.h" #include "constants/species.h" #include "constants/moves.h" #include "constants/trainers.h" @@ -80,6 +81,7 @@ extern u16 gBattle_BG3_X; extern u16 gBattle_BG3_Y; extern struct Unknown_0203BC8C_Struct *gFacilityTrainerMons; extern struct Unknown_0203CD78_Struct *gUnknown_0203CD78; +extern void *gUnknown_0203CD7C; extern void (* const gUnknown_0860D090[])(void); extern const u32 gUnknown_0860D0EC[][2]; @@ -109,6 +111,8 @@ extern const u8 gUnknown_0860D3A8[]; extern const u8 gUnknown_0860D3AB[]; extern const u8 gUnknown_0860D3AE[]; extern const u8 gUnknown_0860D3B1[]; +extern const u8 gUnknown_0860D080[]; +extern const u8 gUnknown_0860CBF1[][5][4]; extern const u8 *const gBattleDomePotentialPointers[]; extern const u8 *const gBattleDomeOpponentStylePointers[]; extern const u8 *const gBattleDomeOpponentStatsPointers[]; @@ -144,7 +148,7 @@ void sub_8190CD4(u8 taskId); void sub_8194220(u8 taskId); void sub_8194B54(void); void sub_8194B70(void); -static void DrawMatchInfoOnCard(u8 flags, u8 matchNo); +static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo); static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId); u8 sub_819221C(u8 taskId); s32 sub_8192F08(u8, u8*); @@ -152,6 +156,8 @@ u8 GetDomeBrainTrainerPicId(void); u8 GetDomeBrainTrainerClass(void); void CopyDomeBrainTrainerName(u8 *dst); void CopyDomeOpponentName(u8 *dst, u16 trainerId); +void sub_8194D48(void); +u8 sub_8193BDC(u8 taskId); // const rom data ALIGNED(4) @@ -1701,7 +1707,7 @@ void sub_8190400(u8 taskId) gTasks[i].data[4] = r7; if (r9 == 2) { - DrawMatchInfoOnCard(0, r5); + DisplayMatchInfoOnCard(0, r5); gUnknown_0203CD78->unk_10 = 1; } else @@ -2127,7 +2133,7 @@ void sub_8190CD4(u8 taskId) gBattle_BG2_X = 256; gBattle_BG2_Y = 160; matchNo = gTasks[taskId2].data[1] - 16; - DrawMatchInfoOnCard(gTasks[taskId].data[2] | 0x10, matchNo); + DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 0x10, matchNo); } } @@ -2243,7 +2249,7 @@ void sub_8190CD4(u8 taskId) gBattle_BG2_X = 256; gBattle_BG2_Y = 0; matchNo = gTasks[taskId2].data[1] - 16; - DrawMatchInfoOnCard(gTasks[taskId].data[2] | 4, matchNo); + DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 4, matchNo); } } @@ -2327,7 +2333,7 @@ void sub_8190CD4(u8 taskId) gBattle_BG2_X = 256; gBattle_BG2_Y = 0; matchNo = gUnknown_0860D15C[(gTasks[taskId2].data[1] * 4) + (gUnknown_0203CD78->unk_10 - 1)]; - DrawMatchInfoOnCard(gTasks[taskId].data[2] | 8, matchNo); + DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 8, matchNo); } for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) @@ -2410,7 +2416,7 @@ void sub_8190CD4(u8 taskId) gBattle_BG2_X = 0; gBattle_BG2_Y = 160; matchNo = gTasks[taskId2].data[1] - 16; - DrawMatchInfoOnCard(gTasks[taskId].data[2] | 8, matchNo); + DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 8, matchNo); } for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) @@ -2492,7 +2498,7 @@ void sub_8190CD4(u8 taskId) gBattle_BG2_Y = 0; } matchNo = gUnknown_0860D15C[(gUnknown_0203CD78->unk_10 - 1) + (gTasks[taskId2].data[1] * 4)]; - DrawMatchInfoOnCard(gTasks[taskId].data[2] | 2, matchNo); + DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 2, matchNo); for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) { @@ -2574,7 +2580,7 @@ void sub_8190CD4(u8 taskId) gBattle_BG2_X = 0; gBattle_BG2_Y = 160; matchNo = gTasks[taskId2].data[1] - 16; - DrawMatchInfoOnCard(gTasks[taskId].data[2] | 2, matchNo); + DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 2, matchNo); } for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) @@ -3264,7 +3270,7 @@ s32 sub_8192F08(u8 arg0, u8 *arg1) return retVal + 1; } -static void DrawMatchInfoOnCard(u8 flags, u8 matchNo) +static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) { struct TextSubPrinter textPrinter; s32 tournamentIds[2]; @@ -3472,3 +3478,165 @@ static void DrawMatchInfoOnCard(u8 flags, u8 matchNo) CopyWindowToVram(windowId + 5, 3); AddTextPrinter(&textPrinter, 0, NULL); } + +void sub_81938A4(void) +{ + u8 taskId = CreateTask(sub_8194220, 0); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 2; + gTasks[taskId].data[4] = 0; + SetMainCallback2(sub_8194B54); +} + +void sub_81938E0(void) +{ + u8 taskId; + + sub_8194D48(); + gSaveBlock2Ptr->frontier.chosenLvl = gSaveBlock2Ptr->frontier.field_D0A - 1; + gSaveBlock2Ptr->frontier.field_CB2 = 3; + taskId = CreateTask(sub_8194220, 0); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 2; + gTasks[taskId].data[4] = 1; + SetMainCallback2(sub_8194B54); +} + +void sub_819395C(u8 taskId) +{ + u8 newTaskId = 0; + s32 spriteId = gTasks[taskId].data[1]; + + switch (gTasks[taskId].data[0]) + { + case 0: + if (!gPaletteFade.active) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); + gTasks[taskId].data[0] = 1; + StartSpriteAnim(&gSprites[spriteId], 1); + } + break; + case 1: + if (!gPaletteFade.active) + gTasks[taskId].data[0] = 2; + break; + case 2: + switch (sub_8193BDC(taskId)) + { + case 0: + default: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + gTasks[taskId].data[0] = 7; + break; + case 1: + break; + case 2: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + gTasks[taskId].data[0] = 3; + break; + case 3: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + gTasks[taskId].data[0] = 5; + break; + } + break; + case 3: + if (!gPaletteFade.active) + { + FreeAllWindowBuffers(); + ScanlineEffect_Stop(); + FREE_AND_SET_NULL(gUnknown_0203CD7C); + newTaskId = CreateTask(sub_8190400, 0); + gTasks[newTaskId].data[0] = 0; + gTasks[newTaskId].data[1] = gUnknown_0860D080[spriteId]; + gTasks[newTaskId].data[2] = 1; + gTasks[newTaskId].data[3] = taskId; + + gTasks[taskId].data[0] = 4; + gUnknown_0203CD78->unk_10 = 0; + } + break; + case 4: + break; + case 5: + if (!gPaletteFade.active) + { + FreeAllWindowBuffers(); + ScanlineEffect_Stop(); + FREE_AND_SET_NULL(gUnknown_0203CD7C); + newTaskId = CreateTask(sub_8190400, 0); + gTasks[newTaskId].data[0] = 0; + gTasks[newTaskId].data[1] = spriteId - 16; + gTasks[newTaskId].data[2] = 2; + gTasks[newTaskId].data[3] = taskId; + + gTasks[taskId].data[0] = 6; + } + break; + case 6: + break; + case 7: + if (!gPaletteFade.active) + { + FreeAllWindowBuffers(); + ScanlineEffect_Stop(); + FREE_AND_SET_NULL(gUnknown_0203CD7C); + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + DestroyTask(gTasks[taskId].data[7]); + DestroyTask(taskId); + } + break; + } +} + +u8 sub_8193BDC(u8 taskId) +{ + u8 retVal = 1; + s32 arrId = 4; + s32 spriteId = gTasks[taskId].data[1]; + s32 roundId = gSaveBlock2Ptr->frontier.field_CB2; + + if (gMain.newKeys == B_BUTTON || (gMain.newKeys & A_BUTTON && spriteId == 31)) + { + PlaySE(SE_SELECT); + retVal = 0; + } + else if (gMain.newKeys & A_BUTTON) + { + if (spriteId < 16) + { + PlaySE(SE_SELECT); + retVal = 2; + } + else + { + PlaySE(SE_SELECT); + retVal = 3; + } + } + else + { + if (gMain.newKeys == DPAD_UP && gUnknown_0860CBF1[spriteId][roundId][0] != 0xFF) + arrId = 0; + else if (gMain.newKeys == DPAD_DOWN && gUnknown_0860CBF1[spriteId][roundId][1] != 0xFF) + arrId = 1; + else if (gMain.newKeys == DPAD_LEFT && gUnknown_0860CBF1[spriteId][roundId][2] != 0xFF) + arrId = 2; + else if (gMain.newKeys == DPAD_RIGHT && gUnknown_0860CBF1[spriteId][roundId][3] != 0xFF) + arrId = 3; + } + + if (arrId != 4) + { + PlaySE(SE_SELECT); + StartSpriteAnim(&gSprites[spriteId], 0); + spriteId = gUnknown_0860CBF1[spriteId][roundId][arrId]; + StartSpriteAnim(&gSprites[spriteId], 1); + gTasks[taskId].data[1] = spriteId; + } + + return retVal; +} -- cgit v1.2.3 From 91349324c619309ca605a04115d0c9b7d78cbb26 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 25 Aug 2018 11:55:16 +0200 Subject: up to CB2_BattleDome --- src/battle_frontier_1.c | 526 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 509 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/battle_frontier_1.c b/src/battle_frontier_1.c index db6f99c8c..332446d75 100644 --- a/src/battle_frontier_1.c +++ b/src/battle_frontier_1.c @@ -35,6 +35,7 @@ #define DOME_QUARTERFINAL 1 // Different name for the same round. #define DOME_SEMIFINAL 2 #define DOME_FINAL 3 +#define DOME_ROUNDS_COUNT 4 struct Unknown_0203BC8C_Struct { @@ -57,8 +58,8 @@ extern u32 sub_81A39C4(void); extern u16 sub_8162548(u8, u8); extern u16 RandomizeFacilityTrainerMonId(u16); extern u8 GetFrontierEnemyMonLevel(void); -extern void CopyDomeOpponentName(u8 *dst, u16 trainerId); -extern u16 sub_81A5060(u8, u8); +extern void CopyDomeTrainerName(u8 *dst, u16 trainerId); +extern u16 sub_81A5060(u8 monId, u8 moveSlotId); extern u8 sub_81A50F0(u8, u8); extern u8 sub_81A50B0(u8); extern void sub_8162614(u16, u8); @@ -81,7 +82,7 @@ extern u16 gBattle_BG3_X; extern u16 gBattle_BG3_Y; extern struct Unknown_0203BC8C_Struct *gFacilityTrainerMons; extern struct Unknown_0203CD78_Struct *gUnknown_0203CD78; -extern void *gUnknown_0203CD7C; +extern u8 *gUnknown_0203CD7C; extern void (* const gUnknown_0860D090[])(void); extern const u32 gUnknown_0860D0EC[][2]; @@ -91,7 +92,7 @@ extern const u8 gUnknown_0860D10C[][4]; extern const u8 gUnknown_0860D14C[]; extern const struct BgTemplate gUnknown_0860CE84[4]; extern const struct WindowTemplate gUnknown_0860CEB4[]; -extern const struct CompressedSpriteSheet gUnknown_0860CF50; +extern const struct CompressedSpriteSheet gUnknown_0860CF50[]; extern const struct SpriteTemplate gUnknown_0860D068; extern const struct SpriteTemplate gUnknown_0860D050; extern const u8 gUnknown_0860D080[]; @@ -112,6 +113,7 @@ extern const u8 gUnknown_0860D3AB[]; extern const u8 gUnknown_0860D3AE[]; extern const u8 gUnknown_0860D3B1[]; extern const u8 gUnknown_0860D080[]; +extern const u8 gUnknown_08D83900[]; extern const u8 gUnknown_0860CBF1[][5][4]; extern const u8 *const gBattleDomePotentialPointers[]; extern const u8 *const gBattleDomeOpponentStylePointers[]; @@ -127,6 +129,10 @@ extern const u8 gUnknown_08D85444[]; extern const u8 gUnknown_08D85358[]; extern const u8 gUnknown_08D85600[]; extern const u8 gUnknown_08D854C8[]; +extern const u8 gUnknown_08D82F10[]; +extern const u8 gUnknown_08D834FC[]; +extern const u8 gUnknown_08D83B2C[]; +extern const u8 gUnknown_08D83C3C[]; // text extern const u8 gTrainerClassNames[][0xD]; @@ -136,7 +142,7 @@ u8 GetDomeTrainerMonIvs(u16 trainerId); void SwapDomeTrainers(s32 id1, s32 id2, u16 *statsArray); void CalcDomeMonStats(u16 species, s32 level, s32 ivs, u8 evBits, u8 nature, s32 *stats); void CreateDomeTrainerMons(u16 tournamentTrainerId); -u16 TrainerIdToTournamentId(u16 trainerId); +s32 TrainerIdToTournamentId(u16 trainerId); s32 GetTrainerMonCountInBits(u16 tournamentTrainerId); s32 sub_818FCBC(u16 tournamentTrainerId, bool8 arg1); s32 sub_818FDB8(u16 tournamentTrainerId, bool8 arg1); @@ -146,7 +152,8 @@ u16 TrainerIdOfPlayerOpponent(void); void sub_8190400(u8 taskId); void sub_8190CD4(u8 taskId); void sub_8194220(u8 taskId); -void sub_8194B54(void); +void sub_8194950(u8 taskId); +static void CB2_BattleDome(void); void sub_8194B70(void); static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo); static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId); @@ -155,9 +162,14 @@ s32 sub_8192F08(u8, u8*); u8 GetDomeBrainTrainerPicId(void); u8 GetDomeBrainTrainerClass(void); void CopyDomeBrainTrainerName(u8 *dst); -void CopyDomeOpponentName(u8 *dst, u16 trainerId); +void CopyDomeTrainerName(u8 *dst, u16 trainerId); void sub_8194D48(void); +void sub_8194BEC(void); +void sub_8194CE4(void); u8 sub_8193BDC(u8 taskId); +void sub_8195438(u8 roundId); +u8 sub_81953E8(u8 tournamentId, u8); +void sub_81948EC(u8, u8); // const rom data ALIGNED(4) @@ -945,7 +957,7 @@ void sub_818F9B0(void) void sub_818F9E0(void) { StringCopy(gStringVar1, gRoundsStringTable[gSaveBlock2Ptr->frontier.field_CB2]); - CopyDomeOpponentName(gStringVar2, gTrainerBattleOpponent_A); + CopyDomeTrainerName(gStringVar2, gTrainerBattleOpponent_A); } void sub_818FA20(void) @@ -1626,7 +1638,7 @@ void ShowDomeOpponentInfo(void) gTasks[taskId].data[2] = 0; gTasks[taskId].data[3] = 0; - SetMainCallback2(sub_8194B54); + SetMainCallback2(CB2_BattleDome); } void sub_8190400(u8 taskId) @@ -1681,7 +1693,7 @@ void sub_8190400(u8 taskId) DecompressAndLoadBgGfxUsingHeap(2, gUnknown_08D83D50, 0x2000, 0, 0); DecompressAndLoadBgGfxUsingHeap(2, gUnknown_08D84970, 0x2000, 0, 1); DecompressAndLoadBgGfxUsingHeap(3, gUnknown_08D84F00, 0x800, 0, 1); - LoadCompressedObjectPic(&gUnknown_0860CF50); + LoadCompressedObjectPic(gUnknown_0860CF50); LoadCompressedPalette(gUnknown_08D85358, 0, 0x200); LoadCompressedPalette(gUnknown_08D85444, 0x100, 0x200); LoadCompressedPalette(gUnknown_08D85600, 0xF0, 0x20); @@ -2949,7 +2961,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) } else { - CopyDomeOpponentName(gStringVar2, trainerId); + CopyDomeTrainerName(gStringVar2, trainerId); StringAppend(gStringVar1, gStringVar2); } @@ -3226,7 +3238,7 @@ s32 sub_8192F08(u8 arg0, u8 *arg1) else if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId == TRAINER_FRONTIER_BRAIN) CopyDomeBrainTrainerName(gStringVar1); else - CopyDomeOpponentName(gStringVar1, gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId); + CopyDomeTrainerName(gStringVar1, gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId); count++; } } @@ -3256,7 +3268,7 @@ s32 sub_8192F08(u8 arg0, u8 *arg1) else if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId == TRAINER_FRONTIER_BRAIN) CopyDomeBrainTrainerName(gStringVar1); else - CopyDomeOpponentName(gStringVar1, gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId); + CopyDomeTrainerName(gStringVar1, gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId); } } @@ -3440,7 +3452,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) else if (trainerIds[0] == TRAINER_FRONTIER_BRAIN) CopyDomeBrainTrainerName(gStringVar1); else - CopyDomeOpponentName(gStringVar1, trainerIds[0]); + CopyDomeTrainerName(gStringVar1, trainerIds[0]); textPrinter.fontId = 2; textPrinter.letterSpacing = 2; @@ -3458,7 +3470,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) else if (trainerIds[1] == TRAINER_FRONTIER_BRAIN) CopyDomeBrainTrainerName(gStringVar1); else - CopyDomeOpponentName(gStringVar1, trainerIds[1]); + CopyDomeTrainerName(gStringVar1, trainerIds[1]); textPrinter.current_text_offset = gStringVar1; textPrinter.windowId = windowId + 7; @@ -3486,7 +3498,7 @@ void sub_81938A4(void) gTasks[taskId].data[1] = 0; gTasks[taskId].data[2] = 2; gTasks[taskId].data[4] = 0; - SetMainCallback2(sub_8194B54); + SetMainCallback2(CB2_BattleDome); } void sub_81938E0(void) @@ -3501,7 +3513,7 @@ void sub_81938E0(void) gTasks[taskId].data[1] = 0; gTasks[taskId].data[2] = 2; gTasks[taskId].data[4] = 1; - SetMainCallback2(sub_8194B54); + SetMainCallback2(CB2_BattleDome); } void sub_819395C(u8 taskId) @@ -3640,3 +3652,483 @@ u8 sub_8193BDC(u8 taskId) return retVal; } + +void sub_8193D40(void) +{ + u8 taskId = CreateTask(sub_8194220, 0); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 1; + gTasks[taskId].data[2] = 2; + gTasks[taskId].data[4] = 0; + SetMainCallback2(CB2_BattleDome); +} + +void sub_8193D7C(void) +{ + s32 i; + + if (gSpecialVar_0x8005 == 1) + { + gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(gTrainerBattleOpponent_A)].unk1 = 1; + gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(gTrainerBattleOpponent_A)].unk2 = gSaveBlock2Ptr->frontier.field_CB2; + gSaveBlock2Ptr->frontier.field_EC0[TrainerIdToTournamentId(gTrainerBattleOpponent_A)] = gBattleResults.lastUsedMovePlayer; + if (gSaveBlock2Ptr->frontier.field_CB2 < DOME_FINAL) + sub_8195438(gSaveBlock2Ptr->frontier.field_CB2); + } + else + { + gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(TRAINER_PLAYER)].unk1 = 1; + gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(TRAINER_PLAYER)].unk2 = gSaveBlock2Ptr->frontier.field_CB2; + gSaveBlock2Ptr->frontier.field_EC0[TrainerIdToTournamentId(TRAINER_PLAYER)] = gBattleResults.lastUsedMoveOpponent; + if (gBattleOutcome == B_OUTCOME_FORFEITED || gSpecialVar_0x8005 == 9) + gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(TRAINER_PLAYER)].unk3 = 1; + for (i = gSaveBlock2Ptr->frontier.field_CB2; i < DOME_ROUNDS_COUNT; i++) + sub_8195438(i); + } +} + +u16 GetWinningMove(s32 winnerTournamentId, s32 loserTournamentId, u8 roundId) +{ + s32 i, j, k; + s32 moveScores[4 * 3]; + u16 moveIds[4 * 3]; + u16 bestScore = 0; + u16 bestId = 0; + s32 movePower = 0; + GetFrontierEnemyMonLevel(); // Unused return variable. + + // Calc move points of all 4 moves for all 3 pokemon hitting all 3 target mons. + for (i = 0; i < 3; i++) + { + for (j = 0; j < 4; j++) + { + moveScores[i * 4 + j] = 0; + if (gSaveBlock2Ptr->frontier.domeTrainers[winnerTournamentId].trainerId == TRAINER_FRONTIER_BRAIN) + moveIds[i * 4 + j] = sub_81A5060(i, j); + else + moveIds[i * 4 + j] = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[winnerTournamentId][i]].moves[j]; + + movePower = gBattleMoves[moveIds[i * 4 + j]].power; + if (movePower == 0) + movePower = 40; + else if (movePower == 1) + movePower = 60; + else if (moveIds[i * 4 + j] == MOVE_SELF_DESTRUCT || moveIds[i * 4 + j] == MOVE_EXPLOSION) + movePower /= 2; + + for (k = 0; k < 3; k++) + { + u32 var = 0; + u32 targetSpecies = 0; + u32 targetAbility = 0; + do + { + var = Random32(); + } while (gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[loserTournamentId][k]].nature != GetNatureFromPersonality(var)); + + targetSpecies = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[loserTournamentId][k]].species; + if (var & 1) + targetAbility = gBaseStats[targetSpecies].ability2; + else + targetAbility = gBaseStats[targetSpecies].ability1; + + var = AI_TypeCalc(moveIds[i * 4 + j], targetSpecies, targetAbility); + if (var & MOVE_RESULT_NOT_VERY_EFFECTIVE && var & MOVE_RESULT_SUPER_EFFECTIVE) + moveScores[i * 4 + j] += movePower; + else if (var & MOVE_RESULT_NO_EFFECT) + moveScores[i * 4 + j] += 0; + else if (var & MOVE_RESULT_SUPER_EFFECTIVE) + moveScores[i * 4 + j] += movePower * 2; + else if (var & MOVE_RESULT_NOT_VERY_EFFECTIVE) + moveScores[i * 4 + j] += movePower / 2; + else + moveScores[i * 4 + j] += movePower; + } + + if (bestScore < moveScores[i * 4 + j]) + { + bestId = i * 4 + j; + bestScore = moveScores[i * 4 + j]; + } + else if (bestScore == moveScores[i * 4 + j]) + { + if (moveIds[bestId] < moveIds[i * 4 + j]) // Why not use (Random() & 1) instead of promoting moves with a higher id? + bestId = i * 4 + j; + } + } + } + + j = bestId; + goto LABEL; + while (j != 0) + { + for (j = 0, k = 0; k < 4 * 3; k++) + { + if (bestScore < moveScores[k]) + { + j = k; + bestScore = moveScores[k]; + } + else if (bestScore == moveScores[k] && moveIds[j] < moveIds[k]) + { + j = k; + } + } + if (i == roundId - 1) + break; + LABEL: + { + for (i = 0; i < roundId - 1; i++) + { + if (gSaveBlock2Ptr->frontier.field_EC0[sub_81953E8(winnerTournamentId, i)] == moveIds[j]) + break; + } + if (i == roundId - 1) + break; + + moveScores[j] = 0; + bestScore = 0; + j = 0; + for (k = 0; k < 4 * 3; k++) + j += moveScores[k]; + } + } + + if (moveScores[j] == 0) + j = bestId; + + return moveIds[j]; +} + +extern const struct BgTemplate gUnknown_0860CE74[4]; +extern const struct WindowTemplate gUnknown_0860CE94[]; +extern const u8 gUnknown_0860D411[][2]; +extern const struct SpriteTemplate gUnknown_0860CFA8; +extern const struct SpriteTemplate gUnknown_0860D008; +extern const struct SpriteTemplate gUnknown_0860CFD8; +extern const struct ScanlineEffectParams gUnknown_0860CF44; + +void sub_8194220(u8 taskId) +{ + s32 i; + struct TextSubPrinter textPrinter; + s32 r10 = gTasks[taskId].data[1]; + s32 r4 = gTasks[taskId].data[2]; + + switch (gTasks[taskId].data[0]) + { + case 0: + SetHBlankCallback(NULL); + SetVBlankCallback(NULL); + EnableInterrupts(INTR_FLAG_HBLANK | INTR_FLAG_VBLANK); + CpuFill32(0, (void *)VRAM, VRAM_SIZE); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_0860CE74, ARRAY_COUNT(gUnknown_0860CE74)); + InitWindows(gUnknown_0860CE94); + DeactivateAllTextPrinters(); + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0xB00, 0); + gTasks[taskId].data[0]++; + break; + case 1: + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + SetGpuReg(REG_OFFSET_MOSAIC, 0); + SetGpuReg(REG_OFFSET_WIN0H, 0x5860); + SetGpuReg(REG_OFFSET_WIN0V, 0x9F); + SetGpuReg(REG_OFFSET_WIN1H, 0x9098); + SetGpuReg(REG_OFFSET_WIN1V, 0x9F); + SetGpuReg(REG_OFFSET_WININ, 0); + SetGpuReg(REG_OFFSET_WINOUT, 0x3F); + ResetPaletteFade(); + ResetSpriteData(); + FreeAllSpritePalettes(); + gTasks[taskId].data[0]++; + break; + case 2: + gUnknown_0203CD7C = AllocZeroed(0x800); + LZDecompressWram(gUnknown_08D83900, gUnknown_0203CD7C); + SetBgTilemapBuffer(1, gUnknown_0203CD7C); + CopyBgTilemapBufferToVram(1); + DecompressAndLoadBgGfxUsingHeap(1, gUnknown_08D82F10, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(2, gUnknown_08D834FC, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(2, gUnknown_08D83B2C, 0x2000, 0, 1); + DecompressAndLoadBgGfxUsingHeap(3, gUnknown_08D83C3C, 0x2000, 0, 1); + LoadCompressedPalette(gUnknown_08D85358, 0, 0x200); + LoadCompressedPalette(gUnknown_08D85444, 0x100, 0x200); + LoadCompressedPalette(gUnknown_08D85600, 0xF0, 0x20); + CpuFill32(0, gPlttBufferFaded, 0x400); + ShowBg(0); + ShowBg(1); + ShowBg(2); + ShowBg(3); + gTasks[taskId].data[0]++; + break; + case 3: + LoadCompressedObjectPic(gUnknown_0860CF50); + if (r10 == 0) + { + for (i = 0; i < (unsigned) 31; i++) + CreateSprite(&gUnknown_0860CFA8, gUnknown_0860D411[i][0], gUnknown_0860D411[i][1], 0); + if (gTasks[taskId].data[4]) + CreateSprite(&gUnknown_0860D008, 218, 12, 0); + else + CreateSprite(&gUnknown_0860CFD8, 218, 12, 0); + } + + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJ_1D_MAP); + gTasks[taskId].data[0]++; + break; + case 4: + textPrinter.fontId = 2; + textPrinter.current_text_offset = gText_BattleTourney; + textPrinter.windowId = 2; + textPrinter.x = 0; + textPrinter.y = 0; + textPrinter.letterSpacing = 2; + textPrinter.lineSpacing = 0; + textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.current_text_offset, 0x70, textPrinter.letterSpacing); + textPrinter.currentY = 1; + textPrinter.fontColor_l = 0; + textPrinter.fgColor = 14; + textPrinter.bgColor = 0; + textPrinter.shadowColor = 13; + AddTextPrinter(&textPrinter, 0, NULL); + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + s32 var, var2; + + CopyDomeTrainerName(gDisplayedStringBattle, gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); + if (r10 == 1) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[i].unk1) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[i].unk2 != 0) + { + var2 = gSaveBlock2Ptr->frontier.domeTrainers[i].unk2 - 1; + sub_81948EC(i, var2); + } + } + else if (gSaveBlock2Ptr->frontier.field_CB2 != DOME_ROUND2) + { + sub_81948EC(i, gSaveBlock2Ptr->frontier.field_CB2 - 2); + } + } + else if (r10 == 0) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[i].unk1) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[i].unk2 != 0) + { + var2 = gSaveBlock2Ptr->frontier.domeTrainers[i].unk2 - 1; + sub_81948EC(i, var2); + } + } + else if (gSaveBlock2Ptr->frontier.field_CB2 != DOME_ROUND1) + { + if (gTasks[taskId].data[4]) + var2 = gSaveBlock2Ptr->frontier.field_CB2; + else + var2 = gSaveBlock2Ptr->frontier.field_CB2 - 1; + sub_81948EC(i, var2); + } + } + + if (gTasks[taskId].data[4]) + var = gSaveBlock2Ptr->frontier.field_CB2; + else + var = gSaveBlock2Ptr->frontier.field_CB2 - 1; + + if ( ((r10 == 1 && gSaveBlock2Ptr->frontier.domeTrainers[i].unk2 < gSaveBlock2Ptr->frontier.field_CB2 - 1) + || (r10 == 0 && gSaveBlock2Ptr->frontier.domeTrainers[i].unk2 <= var)) + && gSaveBlock2Ptr->frontier.domeTrainers[i].unk1) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == TRAINER_PLAYER) + { + textPrinter.fgColor = 3; + textPrinter.shadowColor = 4; + } + else + { + textPrinter.fgColor = 11; + textPrinter.shadowColor = 13; + } + } + else + { + if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == TRAINER_PLAYER) + { + textPrinter.fgColor = 3; + textPrinter.shadowColor = 4; + } + else + { + textPrinter.fgColor = 14; + textPrinter.shadowColor = 13; + } + } + + if (gUnknown_0860D3F1[i][0] == 0) + textPrinter.currentX = GetStringWidthDifference(textPrinter.fontId, gDisplayedStringBattle, 0x3D, textPrinter.letterSpacing); + else + textPrinter.currentX = 3; + textPrinter.current_text_offset = gDisplayedStringBattle; + textPrinter.windowId = gUnknown_0860D3F1[i][0]; + textPrinter.currentY = gUnknown_0860D3F1[i][1]; + AddTextPrinter(&textPrinter, 0, NULL); + } + gTasks[taskId].data[0]++; + break; + case 5: + PutWindowTilemap(0); + PutWindowTilemap(1); + PutWindowTilemap(2); + CopyWindowToVram(0, 3); + CopyWindowToVram(1, 3); + CopyWindowToVram(2, 3); + SetHBlankCallback(sub_8194BEC); + SetVBlankCallback(sub_8194CE4); + if (r4 == 2) + { + if (r10 == 0) + { + i = CreateTask(sub_819395C, 0); + gTasks[i].data[0] = r10; + gTasks[i].data[1] = r10; + gTasks[i].data[6] = gTasks[taskId].data[4]; + } + else + { + i = CreateTask(sub_8194950, 0); + gTasks[i].data[0] = 0; + } + } + else + { + i = gTasks[taskId].data[3]; + gTasks[i].data[0] = 0; + } + ScanlineEffect_Clear(); + for (i = 0; i < 91; i++) + { + gScanlineEffectRegBuffers[0][i] = 0x1F0A; + gScanlineEffectRegBuffers[1][i] = 0x1F0A; + } + for (i = 91; i < 160; i++) + { + asm(""::"r"(i)); + gScanlineEffectRegBuffers[0][i] = 0x1F09; + gScanlineEffectRegBuffers[1][i] = 0x1F09; + } + ScanlineEffect_SetParams(gUnknown_0860CF44); + DestroyTask(taskId); + break; + } +} + +struct UnkStruct_860DD10 +{ + u8 x; + u8 y; + u16 src; +}; + +extern struct UnkStruct_860DD10 *gUnknown_0860DD10[][4]; +extern const u8 gUnknown_0860DE10[][4]; + +void sub_81948EC(u8 tournamentId, u8 arg1) +{ + s32 i; + struct UnkStruct_860DD10 *structPtr = gUnknown_0860DD10[tournamentId][arg1]; + + for (i = 0; i < gUnknown_0860DE10[tournamentId][arg1]; i++) + CopyToBgTilemapBufferRect_ChangePalette(1, &structPtr[i].src, structPtr[i].x, structPtr[i].y, 1, 1, 0x11); + + CopyBgTilemapBufferToVram(1); +} + +void sub_8194950(u8 taskId) +{ + s32 i; + struct TextSubPrinter textPrinter; + + switch (gTasks[taskId].data[0]) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); + gTasks[taskId].data[0] = 1; + break; + case 1: + if (!gPaletteFade.active) + { + gTasks[taskId].data[0] = 2; + gTasks[taskId].data[3] = 64; + textPrinter.fontId = 2; + textPrinter.x = 0; + textPrinter.y = 0; + textPrinter.letterSpacing = 2; + textPrinter.lineSpacing = 0; + textPrinter.fontColor_l = 0; + textPrinter.fgColor = 11; + textPrinter.bgColor = 0; + textPrinter.shadowColor = 13; + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + CopyDomeTrainerName(gDisplayedStringBattle, gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); + if (gSaveBlock2Ptr->frontier.domeTrainers[i].unk2 == gSaveBlock2Ptr->frontier.field_CB2 - 1 + && gSaveBlock2Ptr->frontier.domeTrainers[i].unk1) + { + if (gUnknown_0860D3F1[i][0] == 0) + textPrinter.currentX = GetStringWidthDifference(textPrinter.fontId, gDisplayedStringBattle, 0x3D, textPrinter.letterSpacing); + else + textPrinter.currentX = 3; + + textPrinter.current_text_offset = gDisplayedStringBattle; + textPrinter.windowId = gUnknown_0860D3F1[i][0]; + textPrinter.currentY = gUnknown_0860D3F1[i][1]; + AddTextPrinter(&textPrinter, 0, NULL); + } + if (!gSaveBlock2Ptr->frontier.domeTrainers[i].unk1) + { + s32 var = gSaveBlock2Ptr->frontier.field_CB2 - 1; + sub_81948EC(i, var); + } + } + } + break; + case 2: + if (--gTasks[taskId].data[3] == 0) + gTasks[taskId].data[0] = 3; + break; + case 3: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + gTasks[taskId].data[0] = 4; + } + break; + case 4: + if (!gPaletteFade.active) + { + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + DestroyTask(taskId); + } + break; + } +} + +static void CB2_BattleDome(void) +{ + AnimateSprites(); + BuildOamBuffer(); + RunTextPrinters(); + UpdatePaletteFade(); + RunTasks(); +} -- cgit v1.2.3 From 62a645abafdd17b737562b4ab6b40739d13722c2 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 25 Aug 2018 18:46:15 +0200 Subject: Up To CopyDomeTrainerName --- src/battle_frontier_1.c | 581 ++++++++++++++++++++++++++++++++++++++++++++---- src/battle_tent.c | 4 +- 2 files changed, 537 insertions(+), 48 deletions(-) (limited to 'src') diff --git a/src/battle_frontier_1.c b/src/battle_frontier_1.c index 332446d75..1ac84962f 100644 --- a/src/battle_frontier_1.c +++ b/src/battle_frontier_1.c @@ -2,6 +2,7 @@ #include "battle.h" #include "battle_setup.h" #include "battle_frontier_1.h" +#include "battle_tower.h" #include "battle_message.h" #include "event_data.h" #include "overworld.h" @@ -37,7 +38,7 @@ #define DOME_FINAL 3 #define DOME_ROUNDS_COUNT 4 -struct Unknown_0203BC8C_Struct +struct FacilityMon { u16 species; u16 moves[4]; @@ -68,6 +69,7 @@ extern bool8 sub_81A3610(void); extern u16 sub_81A4FF0(u8); extern u8 GetFrontierTrainerFrontSpriteId(u16); extern u8 GetFrontierOpponentClass(u16); +extern void sub_80F94E8(void); extern u8 gUnknown_0203CEF8[]; extern u32 gUnknown_0203CD70; @@ -80,7 +82,7 @@ extern u16 gBattle_BG2_X; extern u16 gBattle_BG2_Y; extern u16 gBattle_BG3_X; extern u16 gBattle_BG3_Y; -extern struct Unknown_0203BC8C_Struct *gFacilityTrainerMons; +extern const struct FacilityMon *gFacilityTrainerMons; extern struct Unknown_0203CD78_Struct *gUnknown_0203CD78; extern u8 *gUnknown_0203CD7C; @@ -97,7 +99,7 @@ extern const struct SpriteTemplate gUnknown_0860D068; extern const struct SpriteTemplate gUnknown_0860D050; extern const u8 gUnknown_0860D080[]; extern const u8 gUnknown_0860D15C[]; -extern const u8 gUnknown_0860D1A0[]; +extern const u8 gUnknown_0860D1A0[][4]; extern const u8 gUnknown_0860D19C[]; extern const u8 gUnknown_0860D349[]; extern const u8 gUnknown_0860D1C0[]; @@ -120,6 +122,8 @@ extern const u8 *const gBattleDomeOpponentStylePointers[]; extern const u8 *const gBattleDomeOpponentStatsPointers[]; extern const u8 *const gBattleDomeWinStringsPointers[]; extern const u8 *const gBattleDomeMatchNumberPointers[]; +extern const struct FacilityMon gBattleFrontierMons[]; +extern const struct BattleFrontierTrainer gBattleFrontierTrainers[]; // gfx extern const u8 gUnknown_08D83D50[]; @@ -142,7 +146,7 @@ u8 GetDomeTrainerMonIvs(u16 trainerId); void SwapDomeTrainers(s32 id1, s32 id2, u16 *statsArray); void CalcDomeMonStats(u16 species, s32 level, s32 ivs, u8 evBits, u8 nature, s32 *stats); void CreateDomeTrainerMons(u16 tournamentTrainerId); -s32 TrainerIdToTournamentId(u16 trainerId); +static s32 TrainerIdToTournamentId(u16 trainerId); s32 GetTrainerMonCountInBits(u16 tournamentTrainerId); s32 sub_818FCBC(u16 tournamentTrainerId, bool8 arg1); s32 sub_818FDB8(u16 tournamentTrainerId, bool8 arg1); @@ -154,7 +158,7 @@ void sub_8190CD4(u8 taskId); void sub_8194220(u8 taskId); void sub_8194950(u8 taskId); static void CB2_BattleDome(void); -void sub_8194B70(void); +static void VblankCb0_BattleDome(void); static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo); static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId); u8 sub_819221C(u8 taskId); @@ -165,9 +169,9 @@ void CopyDomeBrainTrainerName(u8 *dst); void CopyDomeTrainerName(u8 *dst, u16 trainerId); void sub_8194D48(void); void sub_8194BEC(void); -void sub_8194CE4(void); +static void VblankCb1_BattleDome(void); u8 sub_8193BDC(u8 taskId); -void sub_8195438(u8 roundId); +void DecideRoundWinners(u8 roundId); u8 sub_81953E8(u8 tournamentId, u8); void sub_81948EC(u8, u8); @@ -709,8 +713,8 @@ void InitDomeTrainers(void) gSaveBlock2Ptr->frontier.field_D0A = gSaveBlock2Ptr->frontier.chosenLvl + 1; gSaveBlock2Ptr->frontier.field_D0B = VarGet(VAR_0x40CE) + 1; gSaveBlock2Ptr->frontier.domeTrainers[0].trainerId = TRAINER_PLAYER; - gSaveBlock2Ptr->frontier.domeTrainers[0].unk1 = 0; - gSaveBlock2Ptr->frontier.domeTrainers[0].unk2 = 0; + gSaveBlock2Ptr->frontier.domeTrainers[0].isEliminated = 0; + gSaveBlock2Ptr->frontier.domeTrainers[0].eliminatedAt = 0; gSaveBlock2Ptr->frontier.domeTrainers[0].unk3 = 0; for (i = 0; i < 3; i++) @@ -774,8 +778,8 @@ void InitDomeTrainers(void) species[j] = gFacilityTrainerMons[monTournamentId].species; } - gSaveBlock2Ptr->frontier.domeTrainers[i].unk1 = 0; - gSaveBlock2Ptr->frontier.domeTrainers[i].unk2 = 0; + gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated = 0; + gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt = 0; gSaveBlock2Ptr->frontier.domeTrainers[i].unk3 = 0; } @@ -1575,7 +1579,7 @@ s32 TournamentIdOfOpponent(s32 roundId, s32 trainerId) for (j = gUnknown_0860D10C[i][roundId]; j < val; j++) { - if (gUnknown_0860D14C[j] != i && !gSaveBlock2Ptr->frontier.domeTrainers[gUnknown_0860D14C[j]].unk1) + if (gUnknown_0860D14C[j] != i && !gSaveBlock2Ptr->frontier.domeTrainers[gUnknown_0860D14C[j]].isEliminated) break; } @@ -1586,8 +1590,8 @@ s32 TournamentIdOfOpponent(s32 roundId, s32 trainerId) } else { - if (!gSaveBlock2Ptr->frontier.domeTrainers[gUnknown_0860D10C[i][0]].unk1) - return gUnknown_0860D10C[i][0]; + if (!gSaveBlock2Ptr->frontier.domeTrainers[gUnknown_0860D10C[i][roundId]].isEliminated) + return gUnknown_0860D10C[i][roundId]; else return 0xFF; } @@ -1707,7 +1711,7 @@ void sub_8190400(u8 taskId) gTasks[taskId].data[0]++; break; case 3: - SetVBlankCallback(sub_8194B70); + SetVBlankCallback(VblankCb0_BattleDome); gUnknown_0203CD78 = AllocZeroed(sizeof(*gUnknown_0203CD78)); for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) gUnknown_0203CD78->arr[i] |= 0xFF; @@ -1945,12 +1949,12 @@ void sub_8190B40(struct Sprite *sprite) { if (sprite->data[1]) { - if ((gSaveBlock2Ptr->frontier.domeTrainers[tournmanetTrainerId].unk1 - && gUnknown_0203CD78->unk_10 - 1 < gSaveBlock2Ptr->frontier.domeTrainers[tournmanetTrainerId].unk2)) + if ((gSaveBlock2Ptr->frontier.domeTrainers[tournmanetTrainerId].isEliminated + && gUnknown_0203CD78->unk_10 - 1 < gSaveBlock2Ptr->frontier.domeTrainers[tournmanetTrainerId].eliminatedAt)) { sprite->invisible = 0; } - else if (!gSaveBlock2Ptr->frontier.domeTrainers[tournmanetTrainerId].unk1 + else if (!gSaveBlock2Ptr->frontier.domeTrainers[tournmanetTrainerId].isEliminated && gUnknown_0203CD78->unk_10 - 1 < r12) { sprite->invisible = 0; @@ -2788,12 +2792,12 @@ u8 sub_819221C(u8 taskId) } else if (gMain.newKeys & DPAD_RIGHT) { - if (gSaveBlock2Ptr->frontier.domeTrainers[r10].unk1 && gUnknown_0203CD78->unk_10 - 1 < gSaveBlock2Ptr->frontier.domeTrainers[r10].unk2) + if (gSaveBlock2Ptr->frontier.domeTrainers[r10].isEliminated && gUnknown_0203CD78->unk_10 - 1 < gSaveBlock2Ptr->frontier.domeTrainers[r10].eliminatedAt) { gUnknown_0203CD78->unk_10++; retVal = 4; } - if (!gSaveBlock2Ptr->frontier.domeTrainers[r10].unk1 && gUnknown_0203CD78->unk_10 - 1 < roundId) + if (!gSaveBlock2Ptr->frontier.domeTrainers[r10].isEliminated && gUnknown_0203CD78->unk_10 - 1 < roundId) { gUnknown_0203CD78->unk_10++; retVal = 4; @@ -2803,7 +2807,7 @@ u8 sub_819221C(u8 taskId) if (retVal == 9) { if (gUnknown_0203CD78->unk_10 != 0) - gTasks[taskId2].data[1] = gUnknown_0860D1A0[(r5 / 2) * 4 + (gUnknown_0203CD78->unk_10 - 1)]; + gTasks[taskId2].data[1] = gUnknown_0860D1A0[r5 / 2][gUnknown_0203CD78->unk_10 - 1]; else gTasks[taskId2].data[1] = r5; } @@ -3230,7 +3234,7 @@ s32 sub_8192F08(u8 arg0, u8 *arg1) for (i = gUnknown_0860D3C4[arg0][0]; i < gUnknown_0860D3C4[arg0][0] + gUnknown_0860D3C4[arg0][1]; i++) { tournamentId = gUnknown_0860D3B4[i]; - if (!gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].unk1) + if (!gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].isEliminated) { arg1[count] = tournamentId; if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId == TRAINER_PLAYER) @@ -3249,12 +3253,12 @@ s32 sub_8192F08(u8 arg0, u8 *arg1) for (i = gUnknown_0860D3C4[arg0][0]; i < gUnknown_0860D3C4[arg0][0] + gUnknown_0860D3C4[arg0][1]; i++) { tournamentId = gUnknown_0860D3B4[i]; - if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].unk1 - && gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].unk2 >= gUnknown_0860D3C4[arg0][2]) + if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].isEliminated + && gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].eliminatedAt >= gUnknown_0860D3C4[arg0][2]) { arg1[count] = tournamentId; count++; - if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].unk2 == gUnknown_0860D3C4[arg0][2]) + if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].eliminatedAt == gUnknown_0860D3C4[arg0][2]) { StringCopy(gStringVar2, gMoveNames[gSaveBlock2Ptr->frontier.field_EC0[tournamentId]]); retVal = gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].unk3 * 2; @@ -3312,8 +3316,8 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) { tournamentIds[i] = gUnknown_0203CD78->unk_11[i]; trainerIds[i] = gSaveBlock2Ptr->frontier.domeTrainers[tournamentIds[i]].trainerId; - if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentIds[i]].unk2 <= gUnknown_0860D3C4[matchNo][2] - && gSaveBlock2Ptr->frontier.domeTrainers[tournamentIds[i]].unk1) + if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentIds[i]].eliminatedAt <= gUnknown_0860D3C4[matchNo][2] + && gSaveBlock2Ptr->frontier.domeTrainers[tournamentIds[i]].isEliminated) lost[i] = TRUE; else lost[i] = FALSE; @@ -3669,21 +3673,21 @@ void sub_8193D7C(void) if (gSpecialVar_0x8005 == 1) { - gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(gTrainerBattleOpponent_A)].unk1 = 1; - gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(gTrainerBattleOpponent_A)].unk2 = gSaveBlock2Ptr->frontier.field_CB2; + gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(gTrainerBattleOpponent_A)].isEliminated = 1; + gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(gTrainerBattleOpponent_A)].eliminatedAt = gSaveBlock2Ptr->frontier.field_CB2; gSaveBlock2Ptr->frontier.field_EC0[TrainerIdToTournamentId(gTrainerBattleOpponent_A)] = gBattleResults.lastUsedMovePlayer; if (gSaveBlock2Ptr->frontier.field_CB2 < DOME_FINAL) - sub_8195438(gSaveBlock2Ptr->frontier.field_CB2); + DecideRoundWinners(gSaveBlock2Ptr->frontier.field_CB2); } else { - gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(TRAINER_PLAYER)].unk1 = 1; - gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(TRAINER_PLAYER)].unk2 = gSaveBlock2Ptr->frontier.field_CB2; + gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(TRAINER_PLAYER)].isEliminated = 1; + gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(TRAINER_PLAYER)].eliminatedAt = gSaveBlock2Ptr->frontier.field_CB2; gSaveBlock2Ptr->frontier.field_EC0[TrainerIdToTournamentId(TRAINER_PLAYER)] = gBattleResults.lastUsedMoveOpponent; if (gBattleOutcome == B_OUTCOME_FORFEITED || gSpecialVar_0x8005 == 9) gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(TRAINER_PLAYER)].unk3 = 1; for (i = gSaveBlock2Ptr->frontier.field_CB2; i < DOME_ROUNDS_COUNT; i++) - sub_8195438(i); + DecideRoundWinners(i); } } @@ -3908,11 +3912,11 @@ void sub_8194220(u8 taskId) CopyDomeTrainerName(gDisplayedStringBattle, gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); if (r10 == 1) { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].unk1) + if (gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated) { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].unk2 != 0) + if (gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt != 0) { - var2 = gSaveBlock2Ptr->frontier.domeTrainers[i].unk2 - 1; + var2 = gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt - 1; sub_81948EC(i, var2); } } @@ -3923,11 +3927,11 @@ void sub_8194220(u8 taskId) } else if (r10 == 0) { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].unk1) + if (gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated) { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].unk2 != 0) + if (gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt != 0) { - var2 = gSaveBlock2Ptr->frontier.domeTrainers[i].unk2 - 1; + var2 = gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt - 1; sub_81948EC(i, var2); } } @@ -3946,9 +3950,9 @@ void sub_8194220(u8 taskId) else var = gSaveBlock2Ptr->frontier.field_CB2 - 1; - if ( ((r10 == 1 && gSaveBlock2Ptr->frontier.domeTrainers[i].unk2 < gSaveBlock2Ptr->frontier.field_CB2 - 1) - || (r10 == 0 && gSaveBlock2Ptr->frontier.domeTrainers[i].unk2 <= var)) - && gSaveBlock2Ptr->frontier.domeTrainers[i].unk1) + if ( ((r10 == 1 && gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt < gSaveBlock2Ptr->frontier.field_CB2 - 1) + || (r10 == 0 && gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt <= var)) + && gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated) { if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == TRAINER_PLAYER) { @@ -3994,7 +3998,7 @@ void sub_8194220(u8 taskId) CopyWindowToVram(1, 3); CopyWindowToVram(2, 3); SetHBlankCallback(sub_8194BEC); - SetVBlankCallback(sub_8194CE4); + SetVBlankCallback(VblankCb1_BattleDome); if (r4 == 2) { if (r10 == 0) @@ -4082,8 +4086,8 @@ void sub_8194950(u8 taskId) for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) { CopyDomeTrainerName(gDisplayedStringBattle, gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); - if (gSaveBlock2Ptr->frontier.domeTrainers[i].unk2 == gSaveBlock2Ptr->frontier.field_CB2 - 1 - && gSaveBlock2Ptr->frontier.domeTrainers[i].unk1) + if (gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt == gSaveBlock2Ptr->frontier.field_CB2 - 1 + && gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated) { if (gUnknown_0860D3F1[i][0] == 0) textPrinter.currentX = GetStringWidthDifference(textPrinter.fontId, gDisplayedStringBattle, 0x3D, textPrinter.letterSpacing); @@ -4095,7 +4099,7 @@ void sub_8194950(u8 taskId) textPrinter.currentY = gUnknown_0860D3F1[i][1]; AddTextPrinter(&textPrinter, 0, NULL); } - if (!gSaveBlock2Ptr->frontier.domeTrainers[i].unk1) + if (!gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated) { s32 var = gSaveBlock2Ptr->frontier.field_CB2 - 1; sub_81948EC(i, var); @@ -4132,3 +4136,488 @@ static void CB2_BattleDome(void) UpdatePaletteFade(); RunTasks(); } + +static void VblankCb0_BattleDome(void) +{ + ChangeBgX(3, 0x80, 1); + ChangeBgY(3, 0x80, 2); + SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_X); + SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_Y); + SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); + SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); + SetGpuReg(REG_OFFSET_BG2HOFS, gBattle_BG2_X); + SetGpuReg(REG_OFFSET_BG2VOFS, gBattle_BG2_Y); + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +#define SET_WIN0H_WIN1H(win0H, win1H) \ +{ \ + *(vu32*)(REG_ADDR_WIN0H) = ((win0H << 16) | (win1H)); \ +} + +void sub_8194BEC(void) +{ + register u32 vCount asm("r0") = REG_VCOUNT; + register u32 vCount_ asm("r1") = vCount; + if (vCount > 41) + { + if (vCount < 50) + { + REG_WININ = 0x3B3B; + SET_WIN0H_WIN1H(0x989B, 0x5558); + return; + } + else if (vCount > 57) + { + if (vCount < 75) + { + REG_WININ = 0x3B3B; + SET_WIN0H_WIN1H(0x9098, 0x5860); + return; + } + else if (vCount < 82) + { + REG_WININ = 0x3B3B; + SET_WIN0H_WIN1H(0x989B, 0x5558); + return; + } + else if (vCount > 94) + { + if (vCount < 103) + { + REG_WININ = 0x3737; + SET_WIN0H_WIN1H(0x989B, 0x5558); + return; + } + else if (vCount < 119) + { + REG_WININ = 0x3737; + SET_WIN0H_WIN1H(0x9098, 0x5860); + return; + } + else if (vCount > 126) + { + if (vCount_ < 135) + { + REG_WININ = 0x3737; + SET_WIN0H_WIN1H(0x989B, 0x5558); + return; + } + } + } + } + } + + REG_WININ = 0x3F3F; + SET_WIN0H_WIN1H(0, 0); +} + +static void VblankCb1_BattleDome(void) +{ + SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_X); + SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_Y); + SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); + SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); + ChangeBgY(2, 0x80, 2); + ChangeBgY(3, 0x80, 1); + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + ScanlineEffect_InitHBlankDmaTransfer(); +} + +void sub_8194D48(void) +{ + gFacilityTrainerMons = gBattleFrontierMons; + gFacilityTrainers = gBattleFrontierTrainers; +} + +void sub_8194D68(void) +{ + s32 i, moveSlot; + + for (i = 0; i < 2; i++) + { + s32 playerMonId = gSaveBlock2Ptr->frontier.field_CAA[gUnknown_0203CEF8[i] - 1] - 1; + s32 count; + + for (moveSlot = 0; moveSlot < 4; moveSlot++) + { + count = 0; + while (count < 4) + { + if (GetMonData(&gSaveBlock1Ptr->playerParty[playerMonId], MON_DATA_MOVE1 + count, NULL) == GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + moveSlot, NULL)) + break; + count++; + } + if (count == 4) + SetMonMoveSlot(&gPlayerParty[i], MOVE_SKETCH, moveSlot); + } + + gSaveBlock1Ptr->playerParty[playerMonId] = gPlayerParty[i]; + } +} + +void sub_8194E44(void) +{ + s32 i; + + for (i = 0; i < 2; i++) + { + s32 playerMonId = gSaveBlock2Ptr->frontier.field_CAA[gUnknown_0203CEF8[i] - 1] - 1; + u16 item = GetMonData(&gSaveBlock1Ptr->playerParty[playerMonId], MON_DATA_HELD_ITEM, NULL); + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &item); + } +} + +void sub_8194EB4(void) +{ + sub_80F94E8(); +} + +void sub_8194EC0(void) +{ + if (TrainerIdToTournamentId(gTrainerBattleOpponent_A) > TrainerIdToTournamentId(TRAINER_PLAYER)) + gSpecialVar_Result = 1; + else + gSpecialVar_Result = 2; +} + +void sub_8194EF8(void) +{ + s32 i; + + sub_8194D48(); + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (!gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated) + break; + } + CopyDomeTrainerName(gStringVar1, gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); +} + +void sub_8194F58(void) +{ + s32 i, j, k; + s32 monLevel; + s32 species[3]; + s32 monTypesBits; + s32 trainerId; + s32 monTournamentId; + u8 lvlMode; + u16 *statSums; + s32 *statValues; + u8 ivs = 0; + + species[0] = 0; + species[1] = 0; + species[2] = 0; + if ((gSaveBlock2Ptr->frontier.field_D0A != -gSaveBlock2Ptr->frontier.field_D0B) && gSaveBlock2Ptr->frontier.field_CA8 != 1) + return; + + statSums = AllocZeroed(sizeof(u16) * DOME_TOURNAMENT_TRAINERS_COUNT); + statValues = AllocZeroed(sizeof(s32) * 6); + lvlMode = gSaveBlock2Ptr->frontier.chosenLvl; + gSaveBlock2Ptr->frontier.chosenLvl = 0; + // This one, I'd like to call a 'C fakematching'. + { + u8 one; + gSaveBlock2Ptr->frontier.field_D0A = (one = 1); + gSaveBlock2Ptr->frontier.field_D0B = one; + } + + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + do + { + if (i < 5) + trainerId = Random() % 10; + else if (i < 15) + trainerId = Random() % 20 + 10; + else + trainerId = Random() % 10 + 30; + + for (j = 0; j < i; j++) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId == trainerId) + break; + } + } while (j != i); + + gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId = trainerId; + for (j = 0; j < 3; j++) + { + // Make sure the mon is valid. + do + { + monTournamentId = RandomizeFacilityTrainerMonId(trainerId); + for (k = 0; k < j; k++) + { + s32 checkingMonId = gSaveBlock2Ptr->frontier.domeMonId[i][k]; + if (checkingMonId == monTournamentId + || species[0] == gFacilityTrainerMons[monTournamentId].species + || species[1] == gFacilityTrainerMons[monTournamentId].species + || gFacilityTrainerMons[checkingMonId].itemTableId == gFacilityTrainerMons[monTournamentId].itemTableId) + break; + } + } while (k != j); + + gSaveBlock2Ptr->frontier.domeMonId[i][j] = monTournamentId; + species[j] = gFacilityTrainerMons[monTournamentId].species; + } + gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated = 0; + gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt = 0; + gSaveBlock2Ptr->frontier.domeTrainers[i].unk3 = 0; + } + + monLevel = 50; + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + monTypesBits = 0; + statSums[i] = 0; + ivs = GetDomeTrainerMonIvs(gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); + for (j = 0; j < 3; j++) + { + CalcDomeMonStats(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species, + monLevel, ivs, + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].evSpread, + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].nature, + statValues); + + statSums[i] += statValues[STAT_ATK]; + statSums[i] += statValues[STAT_DEF]; + statSums[i] += statValues[STAT_SPATK]; + statSums[i] += statValues[STAT_SPDEF]; + statSums[i] += statValues[STAT_SPEED]; + statSums[i] += statValues[STAT_HP]; + monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species].type1]; + monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species].type2]; + } + + // Because GF hates temporary vars, trainerId acts like monTypesCount here. + for (trainerId = 0, j = 0; j < 32; j++) + { + if (monTypesBits & 1) + trainerId++; + monTypesBits >>= 1; + } + statSums[i] += (trainerId * monLevel) / 20; + } + + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT - 1; i++) + { + for (j = i + 1; j < DOME_TOURNAMENT_TRAINERS_COUNT; j++) + { + if (statSums[i] < statSums[j]) + { + SwapDomeTrainers(i, j, statSums); + } + else if (statSums[i] == statSums[j]) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId > gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId) + SwapDomeTrainers(i, j, statSums); + } + } + } + + Free(statSums); + Free(statValues); + + for (i = 0; i < 4; i++) + DecideRoundWinners(i); + + gSaveBlock2Ptr->frontier.chosenLvl = lvlMode; +} + +static s32 TrainerIdToTournamentId(u16 trainerId) +{ + s32 i; + + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == trainerId) + break; + } + + return i; +} + +// The same as the above one, but has global scope. +s32 TrainerIdToDomeTournamentId(u16 trainerId) +{ + s32 i; + + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == trainerId) + break; + } + + return i; +} + +u8 sub_81953E8(u8 tournamentId, u8 arg1) +{ + u8 arr[2]; + sub_8192F08(gUnknown_0860D1A0[gUnknown_0860D1C0[tournamentId] / 2][arg1] - 16, arr); + if (tournamentId == arr[0]) + return arr[1]; + else + return arr[0]; +} + +void DecideRoundWinners(u8 roundId) +{ + s32 i; + s32 moveSlot, monId1, monId2; + s32 tournamentId1, tournamentId2; + s32 species; + s32 points1 = 0, points2 = 0; + + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated || gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == TRAINER_PLAYER) + continue; + + tournamentId1 = i; + tournamentId2 = TournamentIdOfOpponent(roundId, gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].trainerId); + // Frontier Brain always wins, check tournamentId1. + if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].trainerId == TRAINER_FRONTIER_BRAIN && tournamentId2 != 0xFF) + { + gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].isEliminated = 1; + gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].eliminatedAt = roundId; + gSaveBlock2Ptr->frontier.field_EC0[tournamentId2] = GetWinningMove(tournamentId1, tournamentId2, roundId); + } + // Frontier Brain always wins, check tournamentId2. + else if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].trainerId == TRAINER_FRONTIER_BRAIN && tournamentId1 != 0xFF) + { + gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].isEliminated = 1; + gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].eliminatedAt = roundId; + gSaveBlock2Ptr->frontier.field_EC0[tournamentId1] = GetWinningMove(tournamentId2, tournamentId1, roundId); + } + // Decide which one of two trainers wins! + else if (tournamentId2 != 0xFF) + { + // BUG: points1 and points2 are not cleared at the beginning of the loop resulting in not fair results. + + // Calculate points for both trainers. + for (monId1 = 0; monId1 < 3; monId1++) + { + for (moveSlot = 0; moveSlot < 4; moveSlot++) + { + for (monId2 = 0; monId2 < 3; monId2++) + { + points1 += sub_818FFC0(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId1][monId1]].moves[moveSlot], + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId2][monId2]].species, 2); + } + } + species = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId1][monId1]].species; + points1 += ( gBaseStats[species].baseHP + + gBaseStats[species].baseAttack + + gBaseStats[species].baseDefense + + gBaseStats[species].baseSpeed + + gBaseStats[species].baseSpAttack + + gBaseStats[species].baseSpDefense) / 10; + } + // Random part of the formula. + points1 += (Random() & 0x1F); + // Favor trainers with higher id; + points1 += tournamentId1; + + for (monId1 = 0; monId1 < 3; monId1++) + { + for (moveSlot = 0; moveSlot < 4; moveSlot++) + { + for (monId2 = 0; monId2 < 3; monId2++) + { + points2 += sub_818FFC0(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId2][monId1]].moves[moveSlot], + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId1][monId2]].species, 2); + } + } + species = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId2][monId1]].species; + points2 += ( gBaseStats[species].baseHP + + gBaseStats[species].baseAttack + + gBaseStats[species].baseDefense + + gBaseStats[species].baseSpeed + + gBaseStats[species].baseSpAttack + + gBaseStats[species].baseSpDefense) / 10; + } + // Random part of the formula. + points2 += (Random() & 0x1F); + // Favor trainers with higher id; + points2 += tournamentId2; + + if (points1 > points2) + { + gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].isEliminated = 1; + gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].eliminatedAt = roundId; + gSaveBlock2Ptr->frontier.field_EC0[tournamentId2] = GetWinningMove(tournamentId1, tournamentId2, roundId); + } + else if (points1 < points2) + { + gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].isEliminated = 1; + gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].eliminatedAt = roundId; + gSaveBlock2Ptr->frontier.field_EC0[tournamentId1] = GetWinningMove(tournamentId2, tournamentId1, roundId); + } + // Points are the same, so we favor the one with the higher id. + else if (tournamentId1 > tournamentId2) + { + gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].isEliminated = 1; + gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].eliminatedAt = roundId; + gSaveBlock2Ptr->frontier.field_EC0[tournamentId2] = GetWinningMove(tournamentId1, tournamentId2, roundId); + } + else + { + gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].isEliminated = 1; + gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].eliminatedAt = roundId; + gSaveBlock2Ptr->frontier.field_EC0[tournamentId1] = GetWinningMove(tournamentId2, tournamentId1, roundId); + } + } + } +} + +void CopyDomeTrainerName(u8 *dst, u16 trainerId) +{ + s32 i = 0; + GetFrontierEnemyMonLevel(); // Unused return value. + + if (trainerId == TRAINER_FRONTIER_BRAIN) + { + CopyDomeBrainTrainerName(dst); + } + else + { + if (trainerId == TRAINER_PLAYER) + { + for (i = 0; i < OT_NAME_LENGTH; i++) + dst[i] = gSaveBlock2Ptr->playerName[i]; + } + else if (trainerId < 300) + { + for (i = 0; i < 7; i++) + dst[i] = gFacilityTrainers[trainerId].trainerName[i]; + } + dst[i] = EOS; + } +} + +u8 GetDomeBrainTrainerPicId(void) +{ + return gTrainers[TRAINER_TUCKER].trainerPic; +} + +u8 GetDomeBrainTrainerClass(void) +{ + return gTrainers[TRAINER_TUCKER].trainerClass; +} + +void CopyDomeBrainTrainerName(u8 *dst) +{ + s32 i; + + for (i = 0; i < 7; i++) + dst[i] = gTrainers[TRAINER_TUCKER].trainerName[i]; + dst[i] = EOS; +} diff --git a/src/battle_tent.c b/src/battle_tent.c index 68d7c5e83..dbea37fb7 100644 --- a/src/battle_tent.c +++ b/src/battle_tent.c @@ -11,7 +11,7 @@ #include "constants/items.h" #include "constants/region_map_sections.h" -// this file's functions +// This file's functions. void sub_81B99D4(void); void sub_81B9A28(void); void sub_81B9A44(void); @@ -115,7 +115,7 @@ void sub_81B9A60(void) void sub_81B9A90(void) { if (gTrainerBattleOpponent_A < 300) - ConvertBattleFrontierTrainerSpeechToString(gUnknown_0203BC88[gTrainerBattleOpponent_A].speechBefore); + ConvertBattleFrontierTrainerSpeechToString(gFacilityTrainers[gTrainerBattleOpponent_A].speechBefore); } void sub_81B9ABC(void) -- cgit v1.2.3 From edcf04b665a9fa13d086dd486c4fe7b1649a7bbf Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 25 Aug 2018 19:59:47 +0200 Subject: Document battle dome. --- src/battle_controller_player.c | 2 +- src/battle_dome.c | 4622 +++++++++++++++++++++++++++++++++++++++ src/battle_frontier_1.c | 4623 ---------------------------------------- src/battle_setup.c | 5 +- src/bg.c | 2 +- src/field_specials.c | 17 +- src/item.c | 16 +- src/pokemon.c | 5 +- src/recorded_battle.c | 6 +- src/rom_8011DC0.c | 5 +- 10 files changed, 4653 insertions(+), 4650 deletions(-) create mode 100644 src/battle_dome.c delete mode 100644 src/battle_frontier_1.c (limited to 'src') diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index 6ab19e368..ffe8936a0 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -31,13 +31,13 @@ #include "item_use.h" #include "recorded_battle.h" #include "party_menu.h" +#include "battle_dome.h" extern u8 gUnknown_0203CEE8; extern u8 gUnknown_0203CEE9; extern u8 gUnknown_0203CF00[]; extern u16 gBattle_BG0_X; extern u16 gBattle_BG0_Y; -extern s32 gUnknown_0203CD70; extern struct UnusedControllerStruct gUnknown_02022D0C; extern struct MusicPlayerInfo gMPlayInfo_BGM; extern struct SpriteTemplate gMultiuseSpriteTemplate; diff --git a/src/battle_dome.c b/src/battle_dome.c new file mode 100644 index 000000000..058d253ab --- /dev/null +++ b/src/battle_dome.c @@ -0,0 +1,4622 @@ +#include "global.h" +#include "battle_dome.h" +#include "battle.h" +#include "battle_setup.h" +#include "battle_tower.h" +#include "battle_message.h" +#include "event_data.h" +#include "overworld.h" +#include "util.h" +#include "malloc.h" +#include "string_util.h" +#include "random.h" +#include "task.h" +#include "main.h" +#include "gpu_regs.h" +#include "text.h" +#include "bg.h" +#include "window.h" +#include "palette.h" +#include "decompress.h" +#include "menu.h" +#include "sound.h" +#include "pokemon_icon.h" +#include "data2.h" +#include "international_string_util.h" +#include "trainer_pokemon_sprites.h" +#include "scanline_effect.h" +#include "constants/species.h" +#include "constants/moves.h" +#include "constants/trainers.h" +#include "constants/abilities.h" +#include "constants/songs.h" +#include "constants/battle_frontier.h" + +#define DOME_ROUND1 0 +#define DOME_ROUND2 1 +#define DOME_QUARTERFINAL 1 // Different name for the same round. +#define DOME_SEMIFINAL 2 +#define DOME_FINAL 3 +#define DOME_ROUNDS_COUNT 4 + +struct FacilityMon +{ + u16 species; + u16 moves[4]; + u8 itemTableId; + u8 evSpread; + u8 nature; +}; + +struct BattleDomeStruct +{ + u8 arr[DOME_TOURNAMENT_TRAINERS_COUNT]; + u8 unk_10; + u8 unk_11[3]; +}; + +struct UnkStruct_860DD10 +{ + u8 x; + u8 y; + u16 src; +}; + +extern void sub_81B8558(void); +extern u32 sub_81A39C4(void); +extern u16 sub_8162548(u8, u8); +extern u16 RandomizeFacilityTrainerMonId(u16); +extern u8 GetFrontierEnemyMonLevel(void); +extern u16 sub_81A5060(u8 monId, u8 moveSlotId); +extern u8 sub_81A50F0(u8, u8); +extern u8 sub_81A50B0(u8); +extern void sub_8162614(u16, u8); +extern void sub_81A4C30(void); +extern bool8 sub_81A3610(void); +extern u16 sub_81A4FF0(u8); +extern u8 GetFrontierTrainerFrontSpriteId(u16); +extern u8 GetFrontierOpponentClass(u16); +extern void sub_80F94E8(void); + +extern u8 gUnknown_0203CEF8[]; +extern u16 gBattle_BG0_X; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG1_X; +extern u16 gBattle_BG1_Y; +extern u16 gBattle_BG2_X; +extern u16 gBattle_BG2_Y; +extern u16 gBattle_BG3_X; +extern u16 gBattle_BG3_Y; +extern const struct FacilityMon *gFacilityTrainerMons; + +extern void (* const gUnknown_0860D090[])(void); +extern const u32 gUnknown_0860D0EC[][2]; +extern const u32 gUnknown_0860D0FC[][2]; +extern const u16 gBattleFrontierHeldItems[]; +extern const u8 gUnknown_0860D10C[][4]; +extern const u8 gUnknown_0860D14C[]; +extern const struct BgTemplate gUnknown_0860CE84[4]; +extern const struct WindowTemplate gUnknown_0860CEB4[]; +extern const struct CompressedSpriteSheet gUnknown_0860CF50[]; +extern const struct SpriteTemplate gUnknown_0860D068; +extern const struct SpriteTemplate gUnknown_0860D050; +extern const u8 gUnknown_0860D080[]; +extern const u8 gUnknown_0860D15C[]; +extern const u8 gUnknown_0860D1A0[][4]; +extern const u8 gUnknown_0860D19C[]; +extern const u8 gUnknown_0860D349[]; +extern const u8 gUnknown_0860D1C0[]; +extern const u8 gUnknown_0860D343[]; +extern const u8 gUnknown_0860D340[]; +extern const u8 gUnknown_0860D346[]; +extern const u8 gUnknown_0860C988[31][16]; +extern const u8 gUnknown_0860D3F1[][2]; +extern const u8 gUnknown_0860D3C4[][3]; +extern const u8 gUnknown_0860D3B4[]; +extern const u8 gUnknown_0860D3A8[]; +extern const u8 gUnknown_0860D3AB[]; +extern const u8 gUnknown_0860D3AE[]; +extern const u8 gUnknown_0860D3B1[]; +extern const u8 gUnknown_0860D080[]; +extern const u8 gUnknown_08D83900[]; +extern const u8 gUnknown_0860CBF1[][5][4]; +extern const u8 *const gBattleDomePotentialPointers[]; +extern const u8 *const gBattleDomeOpponentStylePointers[]; +extern const u8 *const gBattleDomeOpponentStatsPointers[]; +extern const u8 *const gBattleDomeWinStringsPointers[]; +extern const u8 *const gBattleDomeMatchNumberPointers[]; +extern const struct FacilityMon gBattleFrontierMons[]; +extern const struct BattleFrontierTrainer gBattleFrontierTrainers[]; +extern const struct BgTemplate gUnknown_0860CE74[4]; +extern const struct WindowTemplate gUnknown_0860CE94[]; +extern const u8 gUnknown_0860D411[][2]; +extern const struct SpriteTemplate gUnknown_0860CFA8; +extern const struct SpriteTemplate gUnknown_0860D008; +extern const struct SpriteTemplate gUnknown_0860CFD8; +extern const struct ScanlineEffectParams gUnknown_0860CF44; +extern const struct UnkStruct_860DD10 *gUnknown_0860DD10[][4]; +extern const u8 gUnknown_0860DE10[][4]; + +// gfx +extern const u8 gUnknown_08D83D50[]; +extern const u8 gUnknown_08D84970[]; +extern const u8 gUnknown_08D84F00[]; +extern const u8 gUnknown_08D85444[]; +extern const u8 gUnknown_08D85358[]; +extern const u8 gUnknown_08D85600[]; +extern const u8 gUnknown_08D854C8[]; +extern const u8 gUnknown_08D82F10[]; +extern const u8 gUnknown_08D834FC[]; +extern const u8 gUnknown_08D83B2C[]; +extern const u8 gUnknown_08D83C3C[]; + +// text +extern const u8 gTrainerClassNames[][0xD]; + +// This file's functions. +static u8 GetDomeTrainerMonIvs(u16 trainerId); +static void SwapDomeTrainers(s32 id1, s32 id2, u16 *statsArray); +static void CalcDomeMonStats(u16 species, s32 level, s32 ivs, u8 evBits, u8 nature, s32 *stats); +static void CreateDomeTrainerMons(u16 tournamentTrainerId); +static s32 sub_818FCBC(u16 tournamentTrainerId, bool8 arg1); +static s32 sub_818FDB8(u16 tournamentTrainerId, bool8 arg1); +static s32 sub_818FFC0(s32 move, s32 species, s32 arg2); +static s32 sub_818FEB4(s32 *arr, bool8 arg1); +static void sub_8190400(u8 taskId); +static void sub_8190CD4(u8 taskId); +static u8 sub_819221C(u8 taskId); +void sub_8194D48(void); +static s32 TrainerIdToTournamentId(u16 trainerId); +static u16 TrainerIdOfPlayerOpponent(void); +static void sub_8194220(u8 taskId); +static void sub_8194950(u8 taskId); +static void CB2_BattleDome(void); +static void VblankCb0_BattleDome(void); +static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo); +static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId); +static s32 sub_8192F08(u8, u8*); +static u8 GetDomeBrainTrainerPicId(void); +static u8 GetDomeBrainTrainerClass(void); +static void CopyDomeBrainTrainerName(u8 *dst); +static void CopyDomeTrainerName(u8 *dst, u16 trainerId); +static void HblankCb_BattleDome(void); +static void VblankCb1_BattleDome(void); +static u8 sub_8193BDC(u8 taskId); +static void DecideRoundWinners(u8 roundId); +static u8 sub_81953E8(u8 tournamentId, u8); +static void sub_81948EC(u8, u8); + +// EWRAM variables. +EWRAM_DATA u32 gUnknown_0203CD70 = 0; +static EWRAM_DATA u32 gUnknown_0203CD74 = 0; +static EWRAM_DATA struct BattleDomeStruct *sBattleDomeStruct = {0}; +static EWRAM_DATA u8 *sTilemapBuffer = NULL; + +// Const rom data. +ALIGNED(4) +static const u8 sMovePointsForDomeTrainers[MOVES_COUNT][DOME_TOURNAMENT_TRAINERS_COUNT] = +{ + [MOVE_NONE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_POUND] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_KARATE_CHOP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_DOUBLE_SLAP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_COMET_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_MEGA_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_PAY_DAY] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_FIRE_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_ICE_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_THUNDER_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_SCRATCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_VICE_GRIP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_GUILLOTINE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0}, + [MOVE_RAZOR_WIND] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_SWORDS_DANCE] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, + [MOVE_CUT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_GUST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_WING_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_WHIRLWIND] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_FLY] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_BIND] = {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_SLAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_VINE_WHIP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_STOMP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_DOUBLE_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_MEGA_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0}, + [MOVE_JUMP_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_ROLLING_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_SAND_ATTACK] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_HEADBUTT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_HORN_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_FURY_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_HORN_DRILL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0}, + [MOVE_TACKLE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_BODY_SLAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_WRAP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_TAKE_DOWN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_THRASH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_DOUBLE_EDGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_TAIL_WHIP] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_POISON_STING] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_TWINEEDLE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_PIN_MISSILE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_LEER] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_BITE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_GROWL] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_ROAR] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_SING] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SUPERSONIC] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SONIC_BOOM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_DISABLE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_ACID] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_EMBER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_FLAMETHROWER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, + [MOVE_MIST] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_WATER_GUN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_HYDRO_PUMP] = {1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0}, + [MOVE_SURF] = {1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0}, + [MOVE_ICE_BEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, + [MOVE_BLIZZARD] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1}, + [MOVE_PSYBEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_BUBBLE_BEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_AURORA_BEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_HYPER_BEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0}, + [MOVE_PECK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_DRILL_PECK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_SUBMISSION] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_LOW_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_COUNTER] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0}, + [MOVE_SEISMIC_TOSS] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_STRENGTH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_ABSORB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_MEGA_DRAIN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_LEECH_SEED] = {1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_GROWTH] = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_RAZOR_LEAF] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SOLAR_BEAM] = {1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0}, + [MOVE_POISON_POWDER] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_STUN_SPORE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SLEEP_POWDER] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_PETAL_DANCE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_STRING_SHOT] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_DRAGON_RAGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_FIRE_SPIN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_THUNDER_SHOCK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_THUNDERBOLT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, + [MOVE_THUNDER_WAVE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_THUNDER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1}, + [MOVE_ROCK_THROW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_EARTHQUAKE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0}, + [MOVE_FISSURE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0}, + [MOVE_DIG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_TOXIC] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_CONFUSION] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_PSYCHIC] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, + [MOVE_HYPNOSIS] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_MEDITATE] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_AGILITY] = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_QUICK_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_RAGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_TELEPORT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_NIGHT_SHADE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_MIMIC] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_SCREECH] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_DOUBLE_TEAM] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_RECOVER] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_HARDEN] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_MINIMIZE] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SMOKESCREEN] = {0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_CONFUSE_RAY] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_WITHDRAW] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_DEFENSE_CURL] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_BARRIER] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_LIGHT_SCREEN] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_HAZE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_REFLECT] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_FOCUS_ENERGY] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_BIDE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_METRONOME] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, + [MOVE_MIRROR_MOVE] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, + [MOVE_SELF_DESTRUCT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0}, + [MOVE_EGG_BOMB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0}, + [MOVE_LICK] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_SMOG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_SLUDGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_BONE_CLUB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_FIRE_BLAST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1}, + [MOVE_WATERFALL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_CLAMP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_SWIFT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SKULL_BASH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0}, + [MOVE_SPIKE_CANNON] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_CONSTRICT] = {0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_AMNESIA] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_KINESIS] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SOFT_BOILED] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_HI_JUMP_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_GLARE] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_DREAM_EATER] = {1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0}, + [MOVE_POISON_GAS] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_BARRAGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_LEECH_LIFE] = {0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_LOVELY_KISS] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SKY_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1}, + [MOVE_TRANSFORM] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_BUBBLE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_DIZZY_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_SPORE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_FLASH] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_PSYWAVE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SPLASH] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_ACID_ARMOR] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_CRABHAMMER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, + [MOVE_EXPLOSION] = {0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0}, + [MOVE_FURY_SWIPES] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_BONEMERANG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_REST] = {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_ROCK_SLIDE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_HYPER_FANG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_SHARPEN] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_CONVERSION] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_TRI_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_SUPER_FANG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SLASH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_SUBSTITUTE] = {0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_STRUGGLE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0}, + [MOVE_SKETCH] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0}, + [MOVE_TRIPLE_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_THIEF] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_SPIDER_WEB] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_MIND_READER] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0}, + [MOVE_NIGHTMARE] = {1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_FLAME_WHEEL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_SNORE] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_CURSE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_FLAIL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_CONVERSION_2] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_AEROBLAST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0}, + [MOVE_COTTON_SPORE] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_REVERSAL] = {1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_SPITE] = {0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_POWDER_SNOW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_PROTECT] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0}, + [MOVE_MACH_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_SCARY_FACE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_FAINT_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SWEET_KISS] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_BELLY_DRUM] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SLUDGE_BOMB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1}, + [MOVE_MUD_SLAP] = {0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_OCTAZOOKA] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_SPIKES] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_ZAP_CANNON] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1}, + [MOVE_FORESIGHT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_DESTINY_BOND] = {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, + [MOVE_PERISH_SONG] = {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, + [MOVE_ICY_WIND] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_DETECT] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0}, + [MOVE_BONE_RUSH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_LOCK_ON] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0}, + [MOVE_OUTRAGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1}, + [MOVE_SANDSTORM] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_GIGA_DRAIN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0}, + [MOVE_ENDURE] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_CHARM] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_ROLLOUT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_FALSE_SWIPE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_SWAGGER] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_MILK_DRINK] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SPARK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_FURY_CUTTER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_STEEL_WING] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_MEAN_LOOK] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0}, + [MOVE_ATTRACT] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_SLEEP_TALK] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, + [MOVE_HEAL_BELL] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, + [MOVE_RETURN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_PRESENT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0}, + [MOVE_FRUSTRATION] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_SAFEGUARD] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_PAIN_SPLIT] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_SACRED_FIRE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1}, + [MOVE_MAGNITUDE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_DYNAMIC_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1}, + [MOVE_MEGAHORN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, + [MOVE_DRAGON_BREATH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_BATON_PASS] = {1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_ENCORE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0}, + [MOVE_PURSUIT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_RAPID_SPIN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_SWEET_SCENT] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_IRON_TAIL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1}, + [MOVE_METAL_CLAW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_VITAL_THROW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_MORNING_SUN] = {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, + [MOVE_SYNTHESIS] = {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, + [MOVE_MOONLIGHT] = {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, + [MOVE_HIDDEN_POWER] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_CROSS_CHOP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0}, + [MOVE_TWISTER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_RAIN_DANCE] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, + [MOVE_SUNNY_DAY] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, + [MOVE_CRUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_MIRROR_COAT] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_PSYCH_UP] = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_EXTREME_SPEED] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0}, + [MOVE_ANCIENT_POWER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1}, + [MOVE_SHADOW_BALL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_FUTURE_SIGHT] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_ROCK_SMASH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_WHIRLPOOL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_BEAT_UP] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_FAKE_OUT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_UPROAR] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_STOCKPILE] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SPIT_UP] = {1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0}, + [MOVE_SWALLOW] = {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_HEAT_WAVE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1}, + [MOVE_HAIL] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_TORMENT] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_FLATTER] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_WILL_O_WISP] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_MEMENTO] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_FACADE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_FOCUS_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0}, + [MOVE_SMELLING_SALT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_FOLLOW_ME] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_NATURE_POWER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_CHARGE] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_TAUNT] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_HELPING_HAND] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_TRICK] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_ROLE_PLAY] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_WISH] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_ASSIST] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0}, + [MOVE_INGRAIN] = {1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_SUPERPOWER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0}, + [MOVE_MAGIC_COAT] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0}, + [MOVE_RECYCLE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_REVENGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0}, + [MOVE_BRICK_BREAK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_YAWN] = {1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_KNOCK_OFF] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_ENDEAVOR] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0}, + [MOVE_ERUPTION] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0}, + [MOVE_SKILL_SWAP] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_IMPRISON] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0}, + [MOVE_REFRESH] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_GRUDGE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0}, + [MOVE_SNATCH] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0}, + [MOVE_SECRET_POWER] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_DIVE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_ARM_THRUST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_CAMOUFLAGE] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_TAIL_GLOW] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_LUSTER_PURGE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1}, + [MOVE_MIST_BALL] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1}, + [MOVE_FEATHER_DANCE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_TEETER_DANCE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_BLAZE_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_MUD_SPORT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_ICE_BALL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_NEEDLE_ARM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_SLACK_OFF] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_HYPER_VOICE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0}, + [MOVE_POISON_FANG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_CRUSH_CLAW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_BLAST_BURN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0}, + [MOVE_HYDRO_CANNON] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0}, + [MOVE_METEOR_MASH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1}, + [MOVE_ASTONISH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_WEATHER_BALL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_AROMATHERAPY] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, + [MOVE_FAKE_TEARS] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_AIR_CUTTER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_OVERHEAT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1}, + [MOVE_ODOR_SLEUTH] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_ROCK_TOMB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_SILVER_WIND] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1}, + [MOVE_METAL_SOUND] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_GRASS_WHISTLE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_TICKLE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_COSMIC_POWER] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_WATER_SPOUT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0}, + [MOVE_SIGNAL_BEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_SHADOW_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_EXTRASENSORY] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_SKY_UPPERCUT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SAND_TOMB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_SHEER_COLD] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0}, + [MOVE_MUDDY_WATER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1}, + [MOVE_BULLET_SEED] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_AERIAL_ACE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_ICICLE_SPEAR] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_IRON_DEFENSE] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_BLOCK] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0}, + [MOVE_HOWL] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_DRAGON_CLAW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_FRENZY_PLANT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0}, + [MOVE_BULK_UP] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_BOUNCE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1}, + [MOVE_MUD_SHOT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, + [MOVE_POISON_TAIL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_COVET] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_VOLT_TACKLE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0}, + [MOVE_MAGICAL_LEAF] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_WATER_SPORT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_CALM_MIND] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_LEAF_BLADE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, + [MOVE_DRAGON_DANCE] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_ROCK_BLAST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_SHOCK_WAVE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, + [MOVE_WATER_PULSE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, + [MOVE_DOOM_DESIRE] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0}, + [MOVE_PSYCHO_BOOST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1}, +}; + +// code +void CallBattleDomeFunction(void) +{ + gUnknown_0860D090[gSpecialVar_0x8004](); +} + +void sub_818E9CC(void) +{ + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + + gSaveBlock2Ptr->frontier.field_CA8 = 0; + gSaveBlock2Ptr->frontier.field_CB2 = 0; + gSaveBlock2Ptr->frontier.field_CA9_a = 0; + gSaveBlock2Ptr->frontier.field_CA9_b = 0; + if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860D0EC[battleMode][lvlMode])) + gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode] = 0; + + saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); + gTrainerBattleOpponent_A = 0; +} + +void sub_818EA84(void) +{ + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + + switch (gSpecialVar_0x8005) + { + case 0: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode]; + break; + case 1: + gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860D0EC[battleMode][lvlMode]) != 0); + break; + case 2: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_0; + break; + case 3: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_1; + break; + case 4: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_2; + break; + case 5: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_3; + break; + case 6: + if (VarGet(VAR_FRONTIER_BATTLE_MODE) == FRONTIER_MODE_DOUBLES) + { + if (lvlMode) + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_5; + else + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_4; + } + else + { + if (lvlMode) + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_1; + else + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_0; + } + break; + case 7: + if (VarGet(VAR_FRONTIER_BATTLE_MODE) == FRONTIER_MODE_DOUBLES) + { + if (lvlMode) + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_7; + else + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_6; + } + else + { + if (lvlMode) + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_3; + else + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_2; + } + break; + case 8: + sub_81B8558(); + gUnknown_0203CEF8[0] = gSaveBlock2Ptr->frontier.field_CB0; + gUnknown_0203CEF8[1] = gSaveBlock2Ptr->frontier.field_CB0 >> 8; + break; + case 9: + gSpecialVar_Result = (gSaveBlock2Ptr->frontier.field_D0A * 2) - 3 + gSaveBlock2Ptr->frontier.field_D0B; + break; + } +} + +void sub_818ED28(void) +{ + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + + switch (gSpecialVar_0x8005) + { + case 0: + gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode] = gSpecialVar_0x8006; + break; + case 1: + if (gSpecialVar_0x8006) + gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_0860D0EC[battleMode][lvlMode]; + else + gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_0860D0FC[battleMode][lvlMode]; + break; + case 2: + gSaveBlock2Ptr->frontier.field_D08_0 = gSpecialVar_0x8006; + break; + case 3: + gSaveBlock2Ptr->frontier.field_D08_1 = gSpecialVar_0x8006; + break; + case 4: + gSaveBlock2Ptr->frontier.field_D08_2 = gSpecialVar_0x8006; + break; + case 5: + gSaveBlock2Ptr->frontier.field_D08_3 = gSpecialVar_0x8006; + break; + case 6: + if (VarGet(VAR_FRONTIER_BATTLE_MODE) == FRONTIER_MODE_DOUBLES) + { + if (lvlMode) + gSaveBlock2Ptr->frontier.field_D08_5 = gSpecialVar_0x8006; + else + gSaveBlock2Ptr->frontier.field_D08_4 = gSpecialVar_0x8006; + } + else + { + if (lvlMode) + gSaveBlock2Ptr->frontier.field_D08_1 = gSpecialVar_0x8006; + else + gSaveBlock2Ptr->frontier.field_D08_0 = gSpecialVar_0x8006; + } + break; + case 7: + if (VarGet(VAR_FRONTIER_BATTLE_MODE) == FRONTIER_MODE_DOUBLES) + { + if (lvlMode) + gSaveBlock2Ptr->frontier.field_D08_7 = gSpecialVar_0x8006; + else + gSaveBlock2Ptr->frontier.field_D08_6 = gSpecialVar_0x8006; + } + else + { + if (lvlMode) + gSaveBlock2Ptr->frontier.field_D08_3 = gSpecialVar_0x8006; + else + gSaveBlock2Ptr->frontier.field_D08_2 = gSpecialVar_0x8006; + } + break; + case 8: + gSaveBlock2Ptr->frontier.field_CB0 = T1_READ_16(gUnknown_0203CEF8); + break; + } +} + +void InitDomeTrainers(void) +{ + s32 i, j, k; + s32 monLevel; + s32 species[3]; + s32 monTypesBits, monTypesCount; + s32 trainerId; + s32 monTournamentId; + u16 *statSums; + s32 *statValues; + u8 ivs = 0; + + species[0] = 0; + species[1] = 0; + species[2] = 0; + statSums = AllocZeroed(sizeof(u16) * DOME_TOURNAMENT_TRAINERS_COUNT); + statValues = AllocZeroed(sizeof(s32) * 6); + + gSaveBlock2Ptr->frontier.field_D0A = gSaveBlock2Ptr->frontier.lvlMode + 1; + gSaveBlock2Ptr->frontier.field_D0B = VarGet(VAR_FRONTIER_BATTLE_MODE) + 1; + gSaveBlock2Ptr->frontier.domeTrainers[0].trainerId = TRAINER_PLAYER; + gSaveBlock2Ptr->frontier.domeTrainers[0].isEliminated = 0; + gSaveBlock2Ptr->frontier.domeTrainers[0].eliminatedAt = 0; + gSaveBlock2Ptr->frontier.domeTrainers[0].unk3 = 0; + + for (i = 0; i < 3; i++) + { + gSaveBlock2Ptr->frontier.domeMonId[0][i] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1], MON_DATA_SPECIES, NULL); + for (j = 0; j < 4; j++) + gSaveBlock2Ptr->frontier.field_EFC[i].moves[j] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1], MON_DATA_MOVE1 + j, NULL); + for (j = 0; j < 6; j++) + gSaveBlock2Ptr->frontier.field_EFC[i].evs[j] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1], MON_DATA_HP_EV + j, NULL); + + gSaveBlock2Ptr->frontier.field_EFC[i].nature = GetNature(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1]); + } + + for (i = 1; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (i > 5) + { + do + { + trainerId = sub_8162548(sub_81A39C4(), 0); + for (j = 1; j < i; j++) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId == trainerId) + break; + } + } while (j != i); + gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId = trainerId; + } + else + { + do + { + trainerId = sub_8162548(sub_81A39C4() + 1, 0); + for (j = 1; j < i; j++) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId == trainerId) + break; + } + } while (j != i); + gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId = trainerId; + } + + for (j = 0; j < 3; j++) + { + // Make sure the mon is valid. + do + { + monTournamentId = RandomizeFacilityTrainerMonId(trainerId); + for (k = 0; k < j; k++) + { + s32 checkingMonId = gSaveBlock2Ptr->frontier.domeMonId[i][k]; + if (checkingMonId == monTournamentId + || species[0] == gFacilityTrainerMons[monTournamentId].species + || species[1] == gFacilityTrainerMons[monTournamentId].species + || gFacilityTrainerMons[checkingMonId].itemTableId == gFacilityTrainerMons[monTournamentId].itemTableId) + break; + } + } while (k != j); + + gSaveBlock2Ptr->frontier.domeMonId[i][j] = monTournamentId; + species[j] = gFacilityTrainerMons[monTournamentId].species; + } + + gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated = 0; + gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt = 0; + gSaveBlock2Ptr->frontier.domeTrainers[i].unk3 = 0; + } + + monTypesBits = 0; + statSums[0] = 0; + for (i = 0; i < 3; i++) + { + trainerId = gSaveBlock2Ptr->frontier.field_CAA[i] - 1; // Great variable choice, gamefreak. + statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_ATK, NULL); + statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_DEF, NULL); + statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPATK, NULL); + statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPDEF, NULL); + statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPEED, NULL); + statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_MAX_HP, NULL); + monTypesBits |= gBitTable[gBaseStats[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].type1]; + monTypesBits |= gBitTable[gBaseStats[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].type2]; + } + + for (monTypesCount = 0, j = 0; j < 32; j++) + { + if (monTypesBits & 1) + monTypesCount++; + monTypesBits >>= 1; + } + + monLevel = GetFrontierEnemyMonLevel(); + statSums[0] += (monTypesCount * monLevel) / 20; + + for (i = 1; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + monTypesBits = 0; + statSums[i] = 0; + ivs = GetDomeTrainerMonIvs(gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); + for (j = 0; j < 3; j++) + { + CalcDomeMonStats(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species, + monLevel, ivs, + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].evSpread, + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].nature, + statValues); + + statSums[i] += statValues[STAT_ATK]; + statSums[i] += statValues[STAT_DEF]; + statSums[i] += statValues[STAT_SPATK]; + statSums[i] += statValues[STAT_SPDEF]; + statSums[i] += statValues[STAT_SPEED]; + statSums[i] += statValues[STAT_HP]; + monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species].type1]; + monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species].type2]; + } + + for (monTypesCount = 0, j = 0; j < 32; j++) + { + if (monTypesBits & 1) + monTypesCount++; + monTypesBits >>= 1; + } + statSums[i] += (monTypesCount * monLevel) / 20; + } + + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT - 1; i++) + { + for (j = i + 1; j < DOME_TOURNAMENT_TRAINERS_COUNT; j++) + { + if (statSums[i] < statSums[j]) + { + SwapDomeTrainers(i, j, statSums); + } + else + { + if (statSums[i] == statSums[j]) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId == TRAINER_PLAYER) + SwapDomeTrainers(i, j, statSums); + else if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId > gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId) + SwapDomeTrainers(i, j, statSums); + } + } + } + } + + if (sub_81A3610()) + { + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == TRAINER_PLAYER) + break; + } + + if (gUnknown_0860D3F1[i][0] != 0) + { + j = 0; + gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId = TRAINER_FRONTIER_BRAIN; + } + else + { + j = 1; + gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId = TRAINER_FRONTIER_BRAIN; + } + + for (i = 0; i < 3; i++) + gSaveBlock2Ptr->frontier.domeMonId[j][i] = sub_81A4FF0(i); + } + + Free(statSums); + Free(statValues); +} + +#define CALC_STAT(base, statIndex) \ +{ \ + u8 baseStat = gBaseStats[species].base; \ + stats[statIndex] = (((2 * baseStat + ivs + evs[statIndex] / 4) * level) / 100) + 5; \ + stats[statIndex] = (u8) ModifyStatByNature(nature, stats[statIndex], statIndex); \ +} + +static void CalcDomeMonStats(u16 species, s32 level, s32 ivs, u8 evBits, u8 nature, s32 *stats) +{ + s32 i, count; + u8 bits; + u16 resultingEvs; + s32 evs[6]; + + count = 0, bits = evBits; + for (i = 0; i < 6; bits >>= 1, i++) + { + if (bits & 1) + count++; + } + + resultingEvs = 510 / count; + for (i = 0; i < 6; bits <<= 1, i++) + { + evs[i] = 0; + if (evBits & bits) + evs[i] = resultingEvs; + } + + if (species == SPECIES_SHEDINJA) + { + stats[STAT_HP] = 1; + } + else + { + s32 n = 2 * gBaseStats[species].baseHP; + stats[STAT_HP] = (((n + ivs + evs[STAT_HP] / 4) * level) / 100) + level + 10; + } + + CALC_STAT(baseAttack, STAT_ATK); + CALC_STAT(baseDefense, STAT_DEF); + CALC_STAT(baseSpeed, STAT_SPEED); + CALC_STAT(baseSpAttack, STAT_SPATK); + CALC_STAT(baseSpDefense, STAT_SPDEF); +} + +#define SWAP_16(x, y) \ +{ \ + temp = x; \ + x = y; \ + y = temp; \ +} + +static void SwapDomeTrainers(s32 id1, s32 id2, u16 *statsArray) +{ + s32 i; + u16 temp; + + SWAP_16(statsArray[id1], statsArray[id2]); + SWAP_16(gSaveBlock2Ptr->frontier.domeTrainers[id1].trainerId, gSaveBlock2Ptr->frontier.domeTrainers[id2].trainerId); + + for (i = 0; i < 3; i++) + SWAP_16(gSaveBlock2Ptr->frontier.domeMonId[id1][i], gSaveBlock2Ptr->frontier.domeMonId[id2][i]); +} + +void sub_818F9B0(void) +{ + StringCopy(gStringVar1, gRoundsStringTable[gSaveBlock2Ptr->frontier.field_CB2]); +} + +void sub_818F9E0(void) +{ + StringCopy(gStringVar1, gRoundsStringTable[gSaveBlock2Ptr->frontier.field_CB2]); + CopyDomeTrainerName(gStringVar2, gTrainerBattleOpponent_A); +} + +void sub_818FA20(void) +{ + gUnknown_0203CD70 = 0; + gUnknown_0203CD74 = GetMonData(&gPlayerParty[0], MON_DATA_MAX_HP, NULL); + gUnknown_0203CD74 += GetMonData(&gPlayerParty[1], MON_DATA_MAX_HP, NULL); + CalculatePlayerPartyCount(); + CreateDomeTrainerMons(TrainerIdToTournamentId(gTrainerBattleOpponent_A)); +} + +static void CreateDomeMon(u8 monPartyId, u16 tournamentTrainerId, u8 tournamentMonId, u32 otId) +{ + s32 i; + u8 happiness = 0xFF; + u8 fixedIv = GetDomeTrainerMonIvs(tournamentTrainerId); // BUG: Should be using trainerId instead of tournamentTrainerId. As a result, all Pokemon have ivs of 3. + u8 level = GetFrontierEnemyMonLevel(); + CreateMonWithEVSpreadPersonalityOTID(&gEnemyParty[monPartyId], + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].species, + level, + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].nature, + fixedIv, + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].evSpread, otId); + + happiness = 0xFF; + for (i = 0; i < 4; i++) + { + SetMonMoveSlot(&gEnemyParty[monPartyId], + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].moves[i], i); + if (gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].moves[i] == MOVE_FRUSTRATION) + happiness = 0; + } + + SetMonData(&gEnemyParty[monPartyId], MON_DATA_FRIENDSHIP, &happiness); + SetMonData(&gEnemyParty[monPartyId], MON_DATA_HELD_ITEM, + &gBattleFrontierHeldItems[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].itemTableId]); +} + +static void CreateDomeTrainerMons(u16 tournamentTrainerId) +{ + u8 monsCount = 0; + u32 otId = 0; + s32 i, bits; + + ZeroEnemyPartyMons(); + bits = GetTrainerMonCountInBits(tournamentTrainerId); + otId = Random32(); + if (Random() % 10 > 5) + { + for (i = 0; i < 3; i++) + { + if (bits & 1) + { + CreateDomeMon(monsCount, tournamentTrainerId, i, otId); + monsCount++; + } + bits >>= 1; + } + } + else + { + for (i = 2; i >= 0; i--) + { + if (bits & 4) + { + CreateDomeMon(monsCount, tournamentTrainerId, i, otId); + monsCount++; + } + bits <<= 1; + } + } +} + +s32 GetTrainerMonCountInBits(u16 tournamentTrainerId) +{ + s32 bits; + if (Random() & 1) + { + bits = sub_818FCBC(tournamentTrainerId, FALSE); + if (bits == 0) + bits = sub_818FDB8(tournamentTrainerId, TRUE); + } + else + { + bits = sub_818FDB8(tournamentTrainerId, FALSE); + if (bits == 0) + bits = sub_818FCBC(tournamentTrainerId, TRUE); + } + + return bits; +} + +static s32 sub_818FCBC(u16 tournamentTrainerId, bool8 arg1) +{ + s32 i, moveId, playerMonId; + s32 array[3]; + + for (i = 0; i < 3; i++) + { + array[i] = 0; + for (moveId = 0; moveId < 4; moveId++) + { + for (playerMonId = 0; playerMonId < 3; playerMonId++) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN) + { + array[i] += sub_818FFC0(sub_81A5060(i, moveId), + GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 0); + } + else + { + array[i] += sub_818FFC0(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][i]].moves[moveId], + GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 0); + } + } + } + } + return sub_818FEB4(array, arg1); +} + +static s32 sub_818FDB8(u16 tournamentTrainerId, bool8 arg1) +{ + s32 i, moveId, playerMonId; + s32 array[3]; + + for (i = 0; i < 3; i++) + { + array[i] = 0; + for (moveId = 0; moveId < 4; moveId++) + { + for (playerMonId = 0; playerMonId < 3; playerMonId++) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN) + { + array[i] += sub_818FFC0(sub_81A5060(i, moveId), + GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 1); + } + else + { + array[i] += sub_818FFC0(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][i]].moves[moveId], + GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 1); + } + } + } + } + return sub_818FEB4(array, arg1); +} + +static s32 sub_818FEB4(s32 *arr, bool8 arg1) +{ + s32 i, j; + s32 bits = 0; + s32 array[3]; + + for (i = 0; i < 3; i++) + array[i] = i; + + if (arr[0] == arr[1] && arr[0] == arr[2]) + { + if (arg1) + { + i = 0; + while (i != 2) + { + u32 rand = Random() & 3; + if (rand != 3 && !(bits & gBitTable[rand])) + { + bits |= gBitTable[rand]; + i++; + } + } + } + } + else + { + for (i = 0; i < 2; i++) + { + for (j = i + 1; j < 3; j++) + { + s32 temp; + + if (arr[i] < arr[j]) + { + temp = arr[i]; + arr[i] = arr[j]; + arr[j] = temp; + + temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + + if (arr[i] == arr[j] && (Random() & 1)) + { + temp = arr[i]; + arr[i] = arr[j]; + arr[j] = temp; + + temp = array[i]; + array[i] = array[j]; + array[j] = temp; + } + } + } + + for (i = 0; i < 2; i++) + { + bits |= gBitTable[array[i]]; + } + } + + return bits; +} + +// Functionally equivalent, while loop is impossible to match. +#ifdef NONMATCHING +static s32 sub_818FFC0(s32 move, s32 species, s32 arg2) +{ + s32 type1, type2, ability, moveType; + s32 i = 0; + s32 typePower = 20; + + if (move == MOVE_NONE || move == 0xFFFF || gBattleMoves[move].power == 0) + return 0; + + type1 = gBaseStats[species].type1; + type2 = gBaseStats[species].type2; + ability = gBaseStats[species].ability1; + moveType = gBattleMoves[move].type; + + if (ability == ABILITY_LEVITATE && moveType == TYPE_GROUND) + { + if (arg2 == 1) + typePower = 8; + } + else + { + while (gTypeEffectiveness[i + 0] != TYPE_ENDTABLE) + { + if (gTypeEffectiveness[i + 0] == TYPE_FORESIGHT) + { + i += 3; + } + else + { + u8 val = gTypeEffectiveness[i + 0]; + if (val == moveType) + { + // BUG: * 2 is not necessary and makes the condition always false if the ability is wonder guard. + if (gTypeEffectiveness[i + 1] == type1 && (ability != ABILITY_WONDER_GUARD || gTypeEffectiveness[i + 2] == TYPE_MUL_SUPER_EFFECTIVE * 2)) + typePower = (gTypeEffectiveness[i + 2] * typePower) / 10; + if (gTypeEffectiveness[i + 1] == type2 && type1 != type2 && (ability != ABILITY_WONDER_GUARD || gTypeEffectiveness[i + 2] == TYPE_MUL_SUPER_EFFECTIVE * 2)) + typePower = (gTypeEffectiveness[i + 2] * typePower) / 10; + } + i += 3; + } + } + } + + switch (arg2) + { + case 0: + switch (typePower) + { + case 10: + case 5: + case 0: + default: + typePower = 0; + break; + case 20: + typePower = 2; + break; + case 40: + typePower = 4; + break; + case 80: + typePower = 8; + break; + } + break; + case 1: + switch (typePower) + { + default: + case 20: + typePower = 0; + break; + case 5: + typePower = 4; + break; + case 0: + typePower = 8; + break; + case 10: + typePower = 2; + break; + case 40: + typePower = -2; + break; + case 80: + typePower = -4; + break; + } + break; + case 2: + switch (typePower) + { + case 0: + typePower = -16; + break; + case 5: + typePower = -8; + break; + case 10: + default: + typePower = 0; + break; + case 20: + typePower = 4; + break; + case 40: + typePower = 12; + break; + case 80: + typePower = 20; + break; + } + break; + } + + return typePower; +} +#else +NAKED +static s32 sub_818FFC0(s32 move, s32 species, s32 arg2) +{ + asm_unified("\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x8\n\ + adds r3, r0, 0\n\ + adds r4, r1, 0\n\ + str r2, [sp]\n\ + movs r6, 0\n\ + movs r2, 0x14\n\ + cmp r3, 0\n\ + beq _0818FFF0\n\ + ldr r0, =0x0000ffff\n\ + cmp r3, r0\n\ + beq _0818FFF0\n\ + ldr r0, =gBattleMoves\n\ + lsls r1, r3, 1\n\ + adds r1, r3\n\ + lsls r1, 2\n\ + adds r3, r1, r0\n\ + ldrb r0, [r3, 0x1]\n\ + cmp r0, 0\n\ + bne _0818FFFC\n\ +_0818FFF0:\n\ + movs r0, 0\n\ + b _08190156\n\ + .pool\n\ +_0818FFFC:\n\ + ldr r1, =gBaseStats\n\ + lsls r0, r4, 3\n\ + subs r0, r4\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrb r1, [r0, 0x6]\n\ + mov r10, r1\n\ + ldrb r1, [r0, 0x7]\n\ + mov r9, r1\n\ + ldrb r0, [r0, 0x16]\n\ + mov r8, r0\n\ + ldrb r3, [r3, 0x2]\n\ + str r3, [sp, 0x4]\n\ + cmp r0, 0x1A\n\ + bne _0819002C\n\ + cmp r3, 0x4\n\ + bne _0819002C\n\ + ldr r0, [sp]\n\ + cmp r0, 0x1\n\ + bne _081900AA\n\ + movs r2, 0x8\n\ + b _081900A4\n\ + .pool\n\ +_0819002C:\n\ + ldr r0, =gTypeEffectiveness\n\ + adds r1, r6, r0\n\ + ldrb r0, [r1]\n\ + ldr r7, =gTypeEffectiveness\n\ + cmp r0, 0xFF\n\ + beq _081900A4\n\ + adds r4, r1, 0\n\ +_0819003A:\n\ + ldrb r0, [r4]\n\ + cmp r0, 0xFE\n\ + beq _08190096\n\ + ldrb r0, [r4]\n\ + ldr r1, [sp, 0x4]\n\ + cmp r0, r1\n\ + bne _08190096\n\ + ldrb r0, [r4, 0x1]\n\ + adds r5, r6, 0x1\n\ + cmp r0, r10\n\ + bne _0819006C\n\ + adds r1, r6, 0x2\n\ + mov r0, r8\n\ + cmp r0, 0x19\n\ + bne _0819005E\n\ + ldrb r0, [r4, 0x2]\n\ + cmp r0, 0x28\n\ + bne _0819006C\n\ +_0819005E:\n\ + adds r0, r1, r7\n\ + ldrb r0, [r0]\n\ + muls r0, r2\n\ + movs r1, 0xA\n\ + bl __divsi3\n\ + adds r2, r0, 0\n\ +_0819006C:\n\ + adds r0, r5, r7\n\ + ldrb r0, [r0]\n\ + cmp r0, r9\n\ + bne _08190096\n\ + cmp r10, r9\n\ + beq _08190096\n\ + adds r1, r6, 0x2\n\ + mov r0, r8\n\ + cmp r0, 0x19\n\ + bne _08190088\n\ + adds r0, r1, r7\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x28\n\ + bne _08190096\n\ +_08190088:\n\ + adds r0, r1, r7\n\ + ldrb r0, [r0]\n\ + muls r0, r2\n\ + movs r1, 0xA\n\ + bl __divsi3\n\ + adds r2, r0, 0\n\ +_08190096:\n\ + adds r4, 0x3\n\ + adds r6, 0x3\n\ + ldr r1, =gTypeEffectiveness\n\ + adds r0, r6, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0xFF\n\ + bne _0819003A\n\ +_081900A4:\n\ + ldr r0, [sp]\n\ + cmp r0, 0x1\n\ + beq _081900E0\n\ +_081900AA:\n\ + ldr r1, [sp]\n\ + cmp r1, 0x1\n\ + bgt _081900BC\n\ + cmp r1, 0\n\ + beq _081900C4\n\ + b _08190154\n\ + .pool\n\ +_081900BC:\n\ + ldr r0, [sp]\n\ + cmp r0, 0x2\n\ + beq _08190114\n\ + b _08190154\n\ +_081900C4:\n\ + cmp r2, 0xA\n\ + beq _08190146\n\ + cmp r2, 0xA\n\ + ble _08190146\n\ + cmp r2, 0x28\n\ + beq _0819014A\n\ + cmp r2, 0x28\n\ + bgt _081900DA\n\ + cmp r2, 0x14\n\ + beq _08190104\n\ + b _08190146\n\ +_081900DA:\n\ + cmp r2, 0x50\n\ + bne _08190146\n\ + b _08190100\n\ +_081900E0:\n\ + cmp r2, 0xA\n\ + beq _08190104\n\ + cmp r2, 0xA\n\ + bgt _081900F2\n\ + cmp r2, 0\n\ + beq _08190100\n\ + cmp r2, 0x5\n\ + beq _0819014A\n\ + b _08190146\n\ +_081900F2:\n\ + cmp r2, 0x28\n\ + beq _08190108\n\ + cmp r2, 0x28\n\ + ble _08190146\n\ + cmp r2, 0x50\n\ + beq _0819010E\n\ + b _08190146\n\ +_08190100:\n\ + movs r2, 0x8\n\ + b _08190154\n\ +_08190104:\n\ + movs r2, 0x2\n\ + b _08190154\n\ +_08190108:\n\ + movs r2, 0x2\n\ + negs r2, r2\n\ + b _08190154\n\ +_0819010E:\n\ + movs r2, 0x4\n\ + negs r2, r2\n\ + b _08190154\n\ +_08190114:\n\ + cmp r2, 0xA\n\ + beq _08190146\n\ + cmp r2, 0xA\n\ + bgt _08190126\n\ + cmp r2, 0\n\ + beq _0819013A\n\ + cmp r2, 0x5\n\ + beq _08190140\n\ + b _08190146\n\ +_08190126:\n\ + cmp r2, 0x28\n\ + beq _0819014E\n\ + cmp r2, 0x28\n\ + bgt _08190134\n\ + cmp r2, 0x14\n\ + beq _0819014A\n\ + b _08190146\n\ +_08190134:\n\ + cmp r2, 0x50\n\ + beq _08190152\n\ + b _08190146\n\ +_0819013A:\n\ + movs r2, 0x10\n\ + negs r2, r2\n\ + b _08190154\n\ +_08190140:\n\ + movs r2, 0x8\n\ + negs r2, r2\n\ + b _08190154\n\ +_08190146:\n\ + movs r2, 0\n\ + b _08190154\n\ +_0819014A:\n\ + movs r2, 0x4\n\ + b _08190154\n\ +_0819014E:\n\ + movs r2, 0xC\n\ + b _08190154\n\ +_08190152:\n\ + movs r2, 0x14\n\ +_08190154:\n\ + adds r0, r2, 0\n\ +_08190156:\n\ + add sp, 0x8\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + "); +} +#endif // NONMATCHING + +static u8 GetDomeTrainerMonIvs(u16 trainerId) +{ + u8 fixedIv; + if (trainerId <= 99) + fixedIv = 3; + else if (trainerId <= 119) + fixedIv = 6; + else if (trainerId <= 139) + fixedIv = 9; + else if (trainerId <= 159) + fixedIv = 12; + else if (trainerId <= 179) + fixedIv = 15; + else if (trainerId <= 199) + fixedIv = 18; + else if (trainerId <= 219) + fixedIv = 21; + else + fixedIv = 31; + + return fixedIv; +} + +static s32 TournamentIdOfOpponent(s32 roundId, s32 trainerId) +{ + s32 i, j, val; + + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == trainerId) + break; + } + + if (roundId != DOME_ROUND1) + { + if (roundId == DOME_FINAL) + val = gUnknown_0860D10C[i][roundId] + 8; + else + val = gUnknown_0860D10C[i][roundId] + 4; + + for (j = gUnknown_0860D10C[i][roundId]; j < val; j++) + { + if (gUnknown_0860D14C[j] != i && !gSaveBlock2Ptr->frontier.domeTrainers[gUnknown_0860D14C[j]].isEliminated) + break; + } + + if (j != val) + return gUnknown_0860D14C[j]; + else + return 0xFF; + } + else + { + if (!gSaveBlock2Ptr->frontier.domeTrainers[gUnknown_0860D10C[i][roundId]].isEliminated) + return gUnknown_0860D10C[i][roundId]; + else + return 0xFF; + } +} + +void sub_8190298(void) +{ + gTrainerBattleOpponent_A = TrainerIdOfPlayerOpponent(); +} + +static u16 TrainerIdOfPlayerOpponent(void) +{ + return gSaveBlock2Ptr->frontier.domeTrainers[TournamentIdOfOpponent(gSaveBlock2Ptr->frontier.field_CB2, TRAINER_PLAYER)].trainerId; +} + +void sub_81902E4(void) +{ + sub_8162614(gTrainerBattleOpponent_A, 0); +} + +void sub_81902F8(void) +{ + gSaveBlock2Ptr->frontier.field_CA8 = gSpecialVar_0x8005; + VarSet(VAR_TEMP_0, 0); + gSaveBlock2Ptr->frontier.field_CA9_a = 1; + sub_81A4C30(); +} + +void sub_819033C(void) +{ + u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + + if (gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode] < 999) + gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode]++; + if (gSaveBlock2Ptr->frontier.field_D1C[battleMode][lvlMode] < 999) + gSaveBlock2Ptr->frontier.field_D1C[battleMode][lvlMode]++; + + if (gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode] > gSaveBlock2Ptr->frontier.field_D14[battleMode][lvlMode]) + gSaveBlock2Ptr->frontier.field_D14[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode]; +} + +void ShowDomeOpponentInfo(void) +{ + u8 taskId = CreateTask(sub_8190400, 0); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = TrainerIdToTournamentId(TrainerIdOfPlayerOpponent()); + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 0; + + SetMainCallback2(CB2_BattleDome); +} + +static void sub_8190400(u8 taskId) +{ + s32 i; + s32 r5 = gTasks[taskId].data[1]; + s32 r9 = gTasks[taskId].data[2]; + s32 r7 = gTasks[taskId].data[3]; + + switch (gTasks[taskId].data[0]) + { + case 0: + SetHBlankCallback(NULL); + SetVBlankCallback(NULL); + EnableInterrupts(INTR_FLAG_VBLANK); + CpuFill32(0, (void *)VRAM, VRAM_SIZE); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_0860CE84, ARRAY_COUNT(gUnknown_0860CE84)); + InitWindows(gUnknown_0860CEB4); + DeactivateAllTextPrinters(); + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + gBattle_BG3_X = 0; + gBattle_BG3_Y = 0; + if (r9 == 2) + gBattle_BG2_X = 0, gBattle_BG2_Y = 0; + else + gBattle_BG2_X = 0, gBattle_BG2_Y = 160; + + gTasks[taskId].data[0]++; + break; + case 1: + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + SetGpuReg(REG_OFFSET_MOSAIC, 0); + SetGpuReg(REG_OFFSET_WIN0H, 0); + SetGpuReg(REG_OFFSET_WIN0V, 0); + SetGpuReg(REG_OFFSET_WIN1H, 0); + SetGpuReg(REG_OFFSET_WIN1V, 0); + SetGpuReg(REG_OFFSET_WININ, 0); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); + ResetPaletteFade(); + ResetSpriteData(); + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 4; + gTasks[taskId].data[0]++; + break; + case 2: + DecompressAndLoadBgGfxUsingHeap(2, gUnknown_08D83D50, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(2, gUnknown_08D84970, 0x2000, 0, 1); + DecompressAndLoadBgGfxUsingHeap(3, gUnknown_08D84F00, 0x800, 0, 1); + LoadCompressedObjectPic(gUnknown_0860CF50); + LoadCompressedPalette(gUnknown_08D85358, 0, 0x200); + LoadCompressedPalette(gUnknown_08D85444, 0x100, 0x200); + LoadCompressedPalette(gUnknown_08D85600, 0xF0, 0x20); + if (r9 == 2) + LoadCompressedPalette(gUnknown_08D854C8, 0x50, 0x20); + CpuFill32(0, gPlttBufferFaded, 0x400); + ShowBg(0); + ShowBg(1); + ShowBg(2); + ShowBg(3); + gTasks[taskId].data[0]++; + break; + case 3: + SetVBlankCallback(VblankCb0_BattleDome); + sBattleDomeStruct = AllocZeroed(sizeof(*sBattleDomeStruct)); + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + sBattleDomeStruct->arr[i] |= 0xFF; + LoadMonIconPalettes(); + i = CreateTask(sub_8190CD4, 0); + gTasks[i].data[0] = 0; + gTasks[i].data[2] = 0; + gTasks[i].data[3] = r9; + gTasks[i].data[4] = r7; + if (r9 == 2) + { + DisplayMatchInfoOnCard(0, r5); + sBattleDomeStruct->unk_10 = 1; + } + else + { + DisplayTrainerInfoOnCard(0, r5); + } + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP); + if (r9 != 0) + { + r7 = CreateSprite(&gUnknown_0860D068, 120, 4, 0); + StartSpriteAnim(&gSprites[r7], 0); + gSprites[r7].data[0] = i; + + r7 = CreateSprite(&gUnknown_0860D068, 120, 156, 0); + StartSpriteAnim(&gSprites[r7], 1); + gSprites[r7].data[0] = i; + + r7 = CreateSprite(&gUnknown_0860D050, 6, 80, 0); + StartSpriteAnim(&gSprites[r7], 0); + gSprites[r7].data[0] = i; + gSprites[r7].data[1] = 0; + if (r9 == 1) + gSprites[r7].invisible = 1; + + r7 = CreateSprite(&gUnknown_0860D050, 234, 80, 0); + StartSpriteAnim(&gSprites[r7], 1); + gSprites[r7].data[0] = i; + gSprites[r7].data[1] = 1; + } + DestroyTask(taskId); + break; + } +} + +// Note: Card scrolling up means the current card goes down and another one appears from top. +// The same is true for scrolling left. +// That means that the sprite needs to move with the moving card in the opposite scrolling direction. + +static void SpriteCb_TrainerIconCardScrollUp(struct Sprite *sprite) +{ + sprite->pos1.y += 4; + if (sprite->data[0] != 0) + { + if (sprite->pos1.y >= -32) + sprite->invisible = 0; + if (++sprite->data[1] == 40) + sprite->callback = SpriteCallbackDummy; + } + else + { + if (sprite->pos1.y >= 192) + { + sBattleDomeStruct->arr[sprite->data[2]] = 0xFF; + FreeAndDestroyTrainerPicSprite(sprite->data[3]); + } + } +} + +static void SpriteCb_TrainerIconCardScrollDown(struct Sprite *sprite) +{ + sprite->pos1.y -= 4; + if (sprite->data[0] != 0) + { + if (sprite->pos1.y <= 192) + sprite->invisible = 0; + if (++sprite->data[1] == 40) + sprite->callback = SpriteCallbackDummy; + } + else + { + if (sprite->pos1.y <= -32) + { + sBattleDomeStruct->arr[sprite->data[2]] = 0xFF; + FreeAndDestroyTrainerPicSprite(sprite->data[3]); + } + } +} + +static void SpriteCb_TrainerIconCardScrollLeft(struct Sprite *sprite) +{ + sprite->pos1.x += 4; + if (sprite->data[0] != 0) + { + if (sprite->pos1.x >= -32) + sprite->invisible = 0; + if (++sprite->data[1] == 64) + sprite->callback = SpriteCallbackDummy; + } + else + { + if (sprite->pos1.x >= 272) + { + sBattleDomeStruct->arr[sprite->data[2]] = 0xFF; + FreeAndDestroyTrainerPicSprite(sprite->data[3]); + } + } +} + +static void SpriteCb_TrainerIconCardScrollRight(struct Sprite *sprite) +{ + sprite->pos1.x -= 4; + if (sprite->data[0] != 0) + { + if (sprite->pos1.x <= 272) + sprite->invisible = 0; + if (++sprite->data[1] == 64) + sprite->callback = SpriteCallbackDummy; + } + else + { + if (sprite->pos1.x <= -32) + { + sBattleDomeStruct->arr[sprite->data[2]] = 0xFF; + FreeAndDestroyTrainerPicSprite(sprite->data[3]); + } + } +} + +#define sMonIconStill data[3] + +static void SpriteCb_MonIcon(struct Sprite *sprite) +{ + if (!sprite->sMonIconStill) + UpdateMonIconFrame(sprite); +} + +static void SpriteCb_MonIconCardScrollUp(struct Sprite *sprite) +{ + if (!sprite->sMonIconStill) + UpdateMonIconFrame(sprite); + sprite->pos1.y += 4; + if (sprite->data[0] != 0) + { + if (sprite->pos1.y >= -16) + sprite->invisible = 0; + if (++sprite->data[1] == 40) + sprite->callback = SpriteCb_MonIcon; + } + else + { + if (sprite->pos1.y >= 176) + { + sBattleDomeStruct->arr[sprite->data[2]] = 0xFF; + sub_80D2EF8(sprite); + } + } +} + +static void SpriteCb_MonIconCardScrollDown(struct Sprite *sprite) +{ + if (!sprite->sMonIconStill) + UpdateMonIconFrame(sprite); + sprite->pos1.y -= 4; + if (sprite->data[0] != 0) + { + if (sprite->pos1.y <= 176) + sprite->invisible = 0; + if (++sprite->data[1] == 40) + sprite->callback = SpriteCb_MonIcon; + } + else + { + if (sprite->pos1.y <= -16) + { + sBattleDomeStruct->arr[sprite->data[2]] = 0xFF; + sub_80D2EF8(sprite); + } + } +} + +static void SpriteCb_MonIconCardScrollLeft(struct Sprite *sprite) +{ + if (!sprite->sMonIconStill) + UpdateMonIconFrame(sprite); + sprite->pos1.x += 4; + if (sprite->data[0] != 0) + { + if (sprite->pos1.x >= -16) + sprite->invisible = 0; + if (++sprite->data[1] == 64) + sprite->callback = SpriteCb_MonIcon; + } + else + { + if (sprite->pos1.x >= 256) + { + sBattleDomeStruct->arr[sprite->data[2]] = 0xFF; + sub_80D2EF8(sprite); + } + } +} + +static void SpriteCb_MonIconCardScrollRight(struct Sprite *sprite) +{ + if (!sprite->sMonIconStill) + UpdateMonIconFrame(sprite); + sprite->pos1.x -= 4; + if (sprite->data[0] != 0) + { + if (sprite->pos1.x <= 256) + sprite->invisible = 0; + if (++sprite->data[1] == 64) + sprite->callback = SpriteCb_MonIcon; + } + else + { + if (sprite->pos1.x <= -16) + { + sBattleDomeStruct->arr[sprite->data[2]] = 0xFF; + sub_80D2EF8(sprite); + } + } +} + +void sub_8190B40(struct Sprite *sprite) +{ + s32 taskId1 = sprite->data[0]; + s32 arrId = gTasks[gTasks[taskId1].data[4]].data[1]; + s32 tournmanetTrainerId = gUnknown_0860D080[arrId]; + s32 r12 = gSaveBlock2Ptr->frontier.field_CB2; + + if (gTasks[taskId1].data[3] == 1) + { + if (sprite->data[1]) + { + if ((gSaveBlock2Ptr->frontier.domeTrainers[tournmanetTrainerId].isEliminated + && sBattleDomeStruct->unk_10 - 1 < gSaveBlock2Ptr->frontier.domeTrainers[tournmanetTrainerId].eliminatedAt)) + { + sprite->invisible = 0; + } + else if (!gSaveBlock2Ptr->frontier.domeTrainers[tournmanetTrainerId].isEliminated + && sBattleDomeStruct->unk_10 - 1 < r12) + { + sprite->invisible = 0; + } + else + { + if (gTasks[taskId1].data[0] == 2) + sprite->invisible = 1; + } + } + else + { + if (sBattleDomeStruct->unk_10 != 0) + { + sprite->invisible = 0; + } + else + { + if (gTasks[taskId1].data[0] == 2) + sprite->invisible = 1; + } + } + } + else + { + if (sprite->data[1]) + { + if (sBattleDomeStruct->unk_10 > 1) + { + if (gTasks[taskId1].data[0] == 2) + sprite->invisible = 1; + } + else + { + sprite->invisible = 0; + } + } + else + { + if (sBattleDomeStruct->unk_10 != 0) + { + sprite->invisible = 0; + } + else + { + if (gTasks[taskId1].data[0] == 2) + sprite->invisible = 1; + } + } + } +} + +void sub_8190C6C(struct Sprite *sprite) +{ + s32 taskId1 = sprite->data[0]; + + if (gTasks[taskId1].data[3] == 1) + { + if (sBattleDomeStruct->unk_10 != 0) + { + if (gTasks[taskId1].data[0] == 2) + sprite->invisible = 1; + } + else + { + sprite->invisible = 0; + } + } + else + { + if (sBattleDomeStruct->unk_10 != 1) + { + if (gTasks[taskId1].data[0] == 2) + sprite->invisible = 1; + } + else + { + sprite->invisible = 0; + } + } +} + +static void sub_8190CD4(u8 taskId) +{ + s32 i; + s32 windowId = 0; + s32 r9 = gTasks[taskId].data[3]; + s32 taskId2 = gTasks[taskId].data[4]; + s32 trainerTournamentId = 0; + s32 matchNo = 0; + + switch (gTasks[taskId].data[0]) + { + case 0: + if (!gPaletteFade.active) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); + gTasks[taskId].data[0] = 1; + } + break; + case 1: + if (!gPaletteFade.active) + gTasks[taskId].data[0] = 2; + break; + case 2: + i = sub_819221C(taskId); + switch (i) + { + case 9: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + gTasks[taskId].data[0] = 8; + break; + case 1 ... 8: + gTasks[taskId].data[5] = i; + if (gTasks[taskId].data[2] != 0) + windowId = 9; + else + windowId = 0; + + for (i = windowId; i < windowId + 9; i++) + { + CopyWindowToVram(i, 2); + FillWindowPixelBuffer(i, 0); + } + gTasks[taskId].data[0] = 3; + break; + case 0: + break; + } + break; + case 3: + i = gTasks[taskId].data[5]; + switch (i) + { + case 1: + case 5: + if (gTasks[taskId].data[2]) + { + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 160; + } + else + { + gBattle_BG0_X = 0; + gBattle_BG0_Y = 160; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + } + + if (i == 1) + { + if (sBattleDomeStruct->unk_10 == 0) + { + gBattle_BG2_X = 0; + gBattle_BG2_Y = 320; + trainerTournamentId = gUnknown_0860D080[gTasks[taskId2].data[1]]; + DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 0x10, trainerTournamentId); + } + else + { + gBattle_BG2_X = 256; + gBattle_BG2_Y = 0; + trainerTournamentId = gUnknown_0860D080[gTasks[taskId2].data[1]]; + DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 0x10, trainerTournamentId); + sBattleDomeStruct->unk_10 = 0; + } + } + else + { + if (sBattleDomeStruct->unk_10 == 0) + { + matchNo = gTasks[taskId2].data[1] - 16; + sub_8192F08(matchNo, sBattleDomeStruct->unk_11); + gBattle_BG2_X = 0; + gBattle_BG2_Y = 320; + trainerTournamentId = sBattleDomeStruct->unk_11[0]; + DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 0x10, trainerTournamentId); + } + else if (sBattleDomeStruct->unk_10 == 2) + { + matchNo = gTasks[taskId2].data[1] - 16; + sub_8192F08(matchNo, sBattleDomeStruct->unk_11); + gBattle_BG2_X = 0; + gBattle_BG2_Y = 320; + trainerTournamentId = sBattleDomeStruct->unk_11[1]; + DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 0x10, trainerTournamentId); + } + else + { + gBattle_BG2_X = 256; + gBattle_BG2_Y = 160; + matchNo = gTasks[taskId2].data[1] - 16; + DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 0x10, matchNo); + } + } + + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) + { + if (i < 2) + { + if (sBattleDomeStruct->arr[i] != 0xFF) + { + gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_TrainerIconCardScrollUp; + gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; + gSprites[sBattleDomeStruct->arr[i]].data[1] = 0; + gSprites[sBattleDomeStruct->arr[i]].data[2] = i; + gSprites[sBattleDomeStruct->arr[i]].data[3] = sBattleDomeStruct->arr[i]; + } + } + else + { + if (sBattleDomeStruct->arr[i] != 0xFF) + { + gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_MonIconCardScrollUp; + gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; + gSprites[sBattleDomeStruct->arr[i]].data[1] = 0; + gSprites[sBattleDomeStruct->arr[i]].data[2] = i; + } + } + } + for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (i < 10) + { + if (sBattleDomeStruct->arr[i] != 0xFF) + { + gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_TrainerIconCardScrollUp; + gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2]; + gSprites[sBattleDomeStruct->arr[i]].data[1] = 0; + gSprites[sBattleDomeStruct->arr[i]].data[2] = i; + gSprites[sBattleDomeStruct->arr[i]].data[3] = sBattleDomeStruct->arr[i]; + } + } + else + { + if (sBattleDomeStruct->arr[i] != 0xFF) + { + gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_MonIconCardScrollUp; + gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2]; + gSprites[sBattleDomeStruct->arr[i]].data[1] = 0; + gSprites[sBattleDomeStruct->arr[i]].data[2] = i; + } + } + } + + gTasks[taskId].data[0] = 4; + gTasks[taskId].data[5] = 0; + break; + case 2: + case 6: + if (gTasks[taskId].data[2]) + { + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 0; + gBattle_BG1_Y = -160; + } + else + { + gBattle_BG0_X = 0; + gBattle_BG0_Y = -160; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + } + + if (i == 2) + { + if (sBattleDomeStruct->unk_10 == 0) + { + gBattle_BG2_X = 0; + gBattle_BG2_Y = 160; + trainerTournamentId = gUnknown_0860D080[gTasks[taskId2].data[1]]; + DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 4, trainerTournamentId); + } + else + { + gBattle_BG2_X = 0; + gBattle_BG2_Y = 0; + trainerTournamentId = gUnknown_0860D080[gTasks[taskId2].data[1]]; + DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 4, trainerTournamentId); + sBattleDomeStruct->unk_10 = 0; + } + } + else + { + if (sBattleDomeStruct->unk_10 == 0) + { + matchNo = gTasks[taskId2].data[1] - 16; + sub_8192F08(matchNo, sBattleDomeStruct->unk_11); + gBattle_BG2_X = 0; + gBattle_BG2_Y = 160; + trainerTournamentId = sBattleDomeStruct->unk_11[0]; + DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 4, trainerTournamentId); + } + else if (sBattleDomeStruct->unk_10 == 2) + { + matchNo = gTasks[taskId2].data[1] - 16; + sub_8192F08(matchNo, sBattleDomeStruct->unk_11); + gBattle_BG2_X = 0; + gBattle_BG2_Y = 160; + trainerTournamentId = sBattleDomeStruct->unk_11[1]; + DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 4, trainerTournamentId); + } + else + { + gBattle_BG2_X = 256; + gBattle_BG2_Y = 0; + matchNo = gTasks[taskId2].data[1] - 16; + DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 4, matchNo); + } + } + + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) + { + if (i < 2) + { + if (sBattleDomeStruct->arr[i] != 0xFF) + { + gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_TrainerIconCardScrollDown; + gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; + gSprites[sBattleDomeStruct->arr[i]].data[1] = 0; + gSprites[sBattleDomeStruct->arr[i]].data[2] = i; + gSprites[sBattleDomeStruct->arr[i]].data[3] = sBattleDomeStruct->arr[i]; + } + } + else + { + if (sBattleDomeStruct->arr[i] != 0xFF) + { + gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_MonIconCardScrollDown; + gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; + gSprites[sBattleDomeStruct->arr[i]].data[1] = 0; + gSprites[sBattleDomeStruct->arr[i]].data[2] = i; + } + } + } + for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (i < 10) + { + if (sBattleDomeStruct->arr[i] != 0xFF) + { + gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_TrainerIconCardScrollDown; + gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2]; + gSprites[sBattleDomeStruct->arr[i]].data[1] = 0; + gSprites[sBattleDomeStruct->arr[i]].data[2] = i; + gSprites[sBattleDomeStruct->arr[i]].data[3] = sBattleDomeStruct->arr[i]; + } + } + else + { + if (sBattleDomeStruct->arr[i] != 0xFF) + { + gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_MonIconCardScrollDown; + gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2]; + gSprites[sBattleDomeStruct->arr[i]].data[1] = 0; + gSprites[sBattleDomeStruct->arr[i]].data[2] = i; + } + } + } + + gTasks[taskId].data[0] = 5; + gTasks[taskId].data[5] = 0; + break; + case 3: + if (gTasks[taskId].data[2]) + { + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 256; + gBattle_BG1_Y = 0; + } + else + { + gBattle_BG0_X = 256; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + } + + if (sBattleDomeStruct->unk_10 == 0) + { + gBattle_BG2_X = 256; + gBattle_BG2_Y = 160; + trainerTournamentId = gUnknown_0860D080[gTasks[taskId2].data[1]]; + DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 8, trainerTournamentId); + } + else + { + gBattle_BG2_X = 256; + gBattle_BG2_Y = 0; + matchNo = gUnknown_0860D15C[(gTasks[taskId2].data[1] * 4) + (sBattleDomeStruct->unk_10 - 1)]; + DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 8, matchNo); + } + + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) + { + if (i < 2) + { + if (sBattleDomeStruct->arr[i] != 0xFF) + { + gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_TrainerIconCardScrollLeft; + gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; + gSprites[sBattleDomeStruct->arr[i]].data[1] = 0; + gSprites[sBattleDomeStruct->arr[i]].data[2] = i; + gSprites[sBattleDomeStruct->arr[i]].data[3] = sBattleDomeStruct->arr[i]; + } + } + else + { + if (sBattleDomeStruct->arr[i] != 0xFF) + { + gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_MonIconCardScrollLeft; + gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; + gSprites[sBattleDomeStruct->arr[i]].data[1] = 0; + gSprites[sBattleDomeStruct->arr[i]].data[2] = i; + } + } + } + for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (i < 10) + { + if (sBattleDomeStruct->arr[i] != 0xFF) + { + gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_TrainerIconCardScrollLeft; + gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2]; + gSprites[sBattleDomeStruct->arr[i]].data[1] = 0; + gSprites[sBattleDomeStruct->arr[i]].data[2] = i; + gSprites[sBattleDomeStruct->arr[i]].data[3] = sBattleDomeStruct->arr[i]; + } + } + else + { + if (sBattleDomeStruct->arr[i] != 0xFF) + { + gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_MonIconCardScrollLeft; + gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2]; + gSprites[sBattleDomeStruct->arr[i]].data[1] = 0; + gSprites[sBattleDomeStruct->arr[i]].data[2] = i; + } + } + } + + gTasks[taskId].data[0] = 6; + gTasks[taskId].data[5] = 0; + break; + case 7: + if (gTasks[taskId].data[2]) + { + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 256; + gBattle_BG1_Y = 0; + } + else + { + gBattle_BG0_X = 256; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + } + + if (sBattleDomeStruct->unk_10 == 0) + { + gBattle_BG2_X = 256; + gBattle_BG2_Y = 160; + trainerTournamentId = sBattleDomeStruct->unk_11[0]; + DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 8, trainerTournamentId); + } + else + { + gBattle_BG2_X = 0; + gBattle_BG2_Y = 160; + matchNo = gTasks[taskId2].data[1] - 16; + DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 8, matchNo); + } + + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) + { + if (i < 2) + { + if (sBattleDomeStruct->arr[i] != 0xFF) + { + gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_TrainerIconCardScrollLeft; + gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; + gSprites[sBattleDomeStruct->arr[i]].data[1] = 0; + gSprites[sBattleDomeStruct->arr[i]].data[2] = i; + gSprites[sBattleDomeStruct->arr[i]].data[3] = sBattleDomeStruct->arr[i]; + } + } + else + { + if (sBattleDomeStruct->arr[i] != 0xFF) + { + gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_MonIconCardScrollLeft; + gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; + gSprites[sBattleDomeStruct->arr[i]].data[1] = 0; + gSprites[sBattleDomeStruct->arr[i]].data[2] = i; + } + } + } + for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (i < 10) + { + if (sBattleDomeStruct->arr[i] != 0xFF) + { + gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_TrainerIconCardScrollLeft; + gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2]; + gSprites[sBattleDomeStruct->arr[i]].data[1] = 0; + gSprites[sBattleDomeStruct->arr[i]].data[2] = i; + gSprites[sBattleDomeStruct->arr[i]].data[3] = sBattleDomeStruct->arr[i]; + } + } + else + { + if (sBattleDomeStruct->arr[i] != 0xFF) + { + gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_MonIconCardScrollLeft; + gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2]; + gSprites[sBattleDomeStruct->arr[i]].data[1] = 0; + gSprites[sBattleDomeStruct->arr[i]].data[2] = i; + } + } + } + + gTasks[taskId].data[0] = 6; + gTasks[taskId].data[5] = 0; + break; + case 4: + if (gTasks[taskId].data[2]) + { + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattle_BG1_X = -256; + gBattle_BG1_Y = 0; + } + else + { + gBattle_BG0_X = -256; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + } + + if (sBattleDomeStruct->unk_10 == 1) + { + gBattle_BG2_X = 0; + gBattle_BG2_Y = 160; + } + else + { + gBattle_BG2_X = 0; + gBattle_BG2_Y = 0; + } + matchNo = gUnknown_0860D15C[(sBattleDomeStruct->unk_10 - 1) + (gTasks[taskId2].data[1] * 4)]; + DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 2, matchNo); + + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) + { + if (i < 2) + { + if (sBattleDomeStruct->arr[i] != 0xFF) + { + gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_TrainerIconCardScrollRight; + gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; + gSprites[sBattleDomeStruct->arr[i]].data[1] = 0; + gSprites[sBattleDomeStruct->arr[i]].data[2] = i; + gSprites[sBattleDomeStruct->arr[i]].data[3] = sBattleDomeStruct->arr[i]; + } + } + else + { + if (sBattleDomeStruct->arr[i] != 0xFF) + { + gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_MonIconCardScrollRight; + gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; + gSprites[sBattleDomeStruct->arr[i]].data[1] = 0; + gSprites[sBattleDomeStruct->arr[i]].data[2] = i; + } + } + } + for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (i < 10) + { + if (sBattleDomeStruct->arr[i] != 0xFF) + { + gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_TrainerIconCardScrollRight; + gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2]; + gSprites[sBattleDomeStruct->arr[i]].data[1] = 0; + gSprites[sBattleDomeStruct->arr[i]].data[2] = i; + gSprites[sBattleDomeStruct->arr[i]].data[3] = sBattleDomeStruct->arr[i]; + } + } + else + { + if (sBattleDomeStruct->arr[i] != 0xFF) + { + gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_MonIconCardScrollRight; + gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2]; + gSprites[sBattleDomeStruct->arr[i]].data[1] = 0; + gSprites[sBattleDomeStruct->arr[i]].data[2] = i; + } + } + } + + gTasks[taskId].data[0] = 7; + gTasks[taskId].data[5] = 0; + break; + case 8: + if (gTasks[taskId].data[2]) + { + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattle_BG1_X = -256; + gBattle_BG1_Y = 0; + } + else + { + gBattle_BG0_X = -256; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + } + + if (sBattleDomeStruct->unk_10 == 2) + { + gBattle_BG2_X = 256; + gBattle_BG2_Y = 160; + trainerTournamentId = sBattleDomeStruct->unk_11[1]; + DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 2, trainerTournamentId); + } + else + { + gBattle_BG2_X = 0; + gBattle_BG2_Y = 160; + matchNo = gTasks[taskId2].data[1] - 16; + DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 2, matchNo); + } + + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) + { + if (i < 2) + { + if (sBattleDomeStruct->arr[i] != 0xFF) + { + gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_TrainerIconCardScrollRight; + gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; + gSprites[sBattleDomeStruct->arr[i]].data[1] = 0; + gSprites[sBattleDomeStruct->arr[i]].data[2] = i; + gSprites[sBattleDomeStruct->arr[i]].data[3] = sBattleDomeStruct->arr[i]; + } + } + else + { + if (sBattleDomeStruct->arr[i] != 0xFF) + { + gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_MonIconCardScrollRight; + gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; + gSprites[sBattleDomeStruct->arr[i]].data[1] = 0; + gSprites[sBattleDomeStruct->arr[i]].data[2] = i; + } + } + } + for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (i < 10) + { + if (sBattleDomeStruct->arr[i] != 0xFF) + { + gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_TrainerIconCardScrollRight; + gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2]; + gSprites[sBattleDomeStruct->arr[i]].data[1] = 0; + gSprites[sBattleDomeStruct->arr[i]].data[2] = i; + gSprites[sBattleDomeStruct->arr[i]].data[3] = sBattleDomeStruct->arr[i]; + } + } + else + { + if (sBattleDomeStruct->arr[i] != 0xFF) + { + gSprites[sBattleDomeStruct->arr[i]].callback = SpriteCb_MonIconCardScrollRight; + gSprites[sBattleDomeStruct->arr[i]].data[0] = gTasks[taskId].data[2]; + gSprites[sBattleDomeStruct->arr[i]].data[1] = 0; + gSprites[sBattleDomeStruct->arr[i]].data[2] = i; + } + } + } + + gTasks[taskId].data[0] = 7; + gTasks[taskId].data[5] = 0; + break; + } + break; + case 4: + if (++gTasks[taskId].data[5] != 41) + { + gBattle_BG0_Y -= 4; + gBattle_BG1_Y -= 4; + gBattle_BG2_Y -= 4; + } + else + { + gTasks[taskId].data[0] = 2; + } + break; + case 5: + if (++gTasks[taskId].data[5] != 41) + { + gBattle_BG0_Y += 4; + gBattle_BG1_Y += 4; + gBattle_BG2_Y += 4; + } + else + { + gTasks[taskId].data[0] = 2; + } + break; + case 6: + if (++gTasks[taskId].data[5] != 65) + { + gBattle_BG0_X -= 4; + gBattle_BG1_X -= 4; + gBattle_BG2_X -= 4; + } + else + { + gTasks[taskId].data[0] = 2; + } + break; + case 7: + if (++gTasks[taskId].data[5] != 65) + { + gBattle_BG0_X += 4; + gBattle_BG1_X += 4; + gBattle_BG2_X += 4; + } + else + { + gTasks[taskId].data[0] = 2; + } + break; + case 8: + if (!gPaletteFade.active) + { + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) + { + if (i < 2) + { + if (sBattleDomeStruct->arr[i] != 0xFF) + FreeAndDestroyTrainerPicSprite(sBattleDomeStruct->arr[i]); + } + else + { + if (sBattleDomeStruct->arr[i] != 0xFF) + sub_80D2EF8(&gSprites[sBattleDomeStruct->arr[i]]); + } + } + for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (i < 10) + { + if (sBattleDomeStruct->arr[i] != 0xFF) + FreeAndDestroyTrainerPicSprite(sBattleDomeStruct->arr[i]); + } + else + { + if (sBattleDomeStruct->arr[i] != 0xFF) + sub_80D2EF8(&gSprites[sBattleDomeStruct->arr[i]]); + } + } + + FreeMonIconPalettes(); + FREE_AND_SET_NULL(sBattleDomeStruct); + FreeAllWindowBuffers(); + if (r9 == 0) + { + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + } + else + { + i = CreateTask(sub_8194220, 0); + gTasks[i].data[0] = 0; + gTasks[i].data[1] = 0; + gTasks[i].data[2] = 3; + gTasks[i].data[3] = gTasks[taskId].data[4]; + gTasks[i].data[4] = gTasks[taskId2].data[6]; + } + DestroyTask(taskId); + } + break; + } +} + +static u8 sub_819221C(u8 taskId) +{ + u8 retVal = 0; + s32 taskId2 = gTasks[taskId].data[4]; + s32 r5 = gTasks[taskId2].data[1]; + u8 r10 = gUnknown_0860D080[r5]; + u16 roundId = gSaveBlock2Ptr->frontier.field_CB2; + + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + retVal = 9; + + if (gTasks[taskId].data[3] == 0) + return retVal; + + if (gTasks[taskId].data[3] == 1) + { + if (gMain.newKeys & DPAD_UP && sBattleDomeStruct->unk_10 == 0) + { + if (r5 == 0) + r5 = 15; + else + r5--; + retVal = 1; + } + else if (gMain.newKeys & DPAD_DOWN && sBattleDomeStruct->unk_10 == 0) + { + if (r5 == 15) + r5 = 0; + else + r5++; + retVal = 2; + } + else if (gMain.newKeys & DPAD_LEFT && sBattleDomeStruct->unk_10 != 0) + { + sBattleDomeStruct->unk_10--; + retVal = 3; + } + else if (gMain.newKeys & DPAD_RIGHT) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[r10].isEliminated && sBattleDomeStruct->unk_10 - 1 < gSaveBlock2Ptr->frontier.domeTrainers[r10].eliminatedAt) + { + sBattleDomeStruct->unk_10++; + retVal = 4; + } + if (!gSaveBlock2Ptr->frontier.domeTrainers[r10].isEliminated && sBattleDomeStruct->unk_10 - 1 < roundId) + { + sBattleDomeStruct->unk_10++; + retVal = 4; + } + } + + if (retVal == 9) + { + if (sBattleDomeStruct->unk_10 != 0) + gTasks[taskId2].data[1] = gUnknown_0860D1A0[r5 / 2][sBattleDomeStruct->unk_10 - 1]; + else + gTasks[taskId2].data[1] = r5; + } + } + else + { + if (gMain.newKeys & DPAD_UP && sBattleDomeStruct->unk_10 == 1) + { + if (r5 == 16) + r5 = gUnknown_0860D19C[roundId]; + else + r5--; + retVal = 5; + } + else if (gMain.newKeys & DPAD_DOWN && sBattleDomeStruct->unk_10 == 1) + { + if (r5 == gUnknown_0860D19C[roundId]) + r5 = 16; + else + r5++; + retVal = 6; + } + else if (gMain.newKeys & DPAD_LEFT && sBattleDomeStruct->unk_10 != 0) + { + retVal = 7; + sBattleDomeStruct->unk_10--; + } + else if (gMain.newKeys & DPAD_RIGHT && (sBattleDomeStruct->unk_10 == 0 || sBattleDomeStruct->unk_10 == 1)) + { + retVal = 8; + sBattleDomeStruct->unk_10++; + } + + if (retVal == 9) + { + if (sBattleDomeStruct->unk_10 == 0) + gTasks[taskId2].data[1] = gUnknown_0860D1C0[sBattleDomeStruct->unk_11[0]]; + else if (sBattleDomeStruct->unk_10 == 2) + gTasks[taskId2].data[1] = gUnknown_0860D1C0[sBattleDomeStruct->unk_11[1]]; + else + gTasks[taskId2].data[1] = r5; + } + } + + if (retVal != 0 && retVal != 9) + { + PlaySE(SE_SELECT); + gTasks[taskId2].data[1] = r5; + gTasks[taskId].data[2] ^= 1; + } + + return retVal; +} + +static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) +{ + struct TextSubPrinter textPrinter; + s32 i, j, k; + s32 trainerId = 0; + u8 nature = 0; + s32 arrId = 0; + s32 windowId = 0; + s32 x = 0, y = 0; + u8 palSlot = 0; + s16 *allocatedArray = AllocZeroed(sizeof(s16) * 18); + trainerId = gSaveBlock2Ptr->frontier.domeTrainers[trainerTournamentId].trainerId; + + if (flags & 1) + arrId = 8, windowId = 9, palSlot = 2; + if (flags & 2) + x = 256; + if (flags & 4) + y = 160; + if (flags & 8) + x = -256; + if (flags & 0x10) + y = -160; + + if (trainerId == TRAINER_PLAYER) + sBattleDomeStruct->arr[arrId] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF); + else if (trainerId == TRAINER_FRONTIER_BRAIN) + sBattleDomeStruct->arr[arrId] = CreateTrainerPicSprite(GetDomeBrainTrainerPicId(), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF); + else + sBattleDomeStruct->arr[arrId] = CreateTrainerPicSprite(GetFrontierTrainerFrontSpriteId(trainerId), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF); + + if (flags & 0x1E) + gSprites[sBattleDomeStruct->arr[arrId]].invisible = 1; + + for (i = 0; i < 3; i++) + { + if (trainerId == TRAINER_PLAYER) + { + sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i], + SpriteCb_MonIcon, + x | gUnknown_0860D340[i], + y + gUnknown_0860D343[i], + 0, 0, TRUE); + gSprites[sBattleDomeStruct->arr[2 + i + arrId]].oam.priority = 0; + } + else if (trainerId == TRAINER_FRONTIER_BRAIN) + { + sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i], + SpriteCb_MonIcon, + x | gUnknown_0860D340[i], + y + gUnknown_0860D343[i], + 0, 0, TRUE); + gSprites[sBattleDomeStruct->arr[2 + i + arrId]].oam.priority = 0; + } + else + { + sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].species, + SpriteCb_MonIcon, + x | gUnknown_0860D340[i], + y + gUnknown_0860D343[i], + 0, 0, TRUE); + gSprites[sBattleDomeStruct->arr[2 + i + arrId]].oam.priority = 0; + } + + if (flags & 0x1E) + gSprites[sBattleDomeStruct->arr[2 + i + arrId]].invisible = 1; + } + textPrinter.fontId = 2; + textPrinter.x = 0; + textPrinter.y = 0; + textPrinter.currentX = textPrinter.x; + textPrinter.currentY = textPrinter.y; + textPrinter.letterSpacing = 2; + textPrinter.lineSpacing = 0; + textPrinter.fontColor_l = 0; + textPrinter.fgColor = 14; + textPrinter.bgColor = 0; + textPrinter.shadowColor = 13; + + i = 0; + if (trainerId == TRAINER_PLAYER) + j = gFacilityClassToTrainerClass[FACILITY_CLASS_PKMN_TRAINER_BRENDAN]; + else if (trainerId == TRAINER_FRONTIER_BRAIN) + j = GetDomeBrainTrainerClass(); + else + j = GetFrontierOpponentClass(trainerId); + + for (;gTrainerClassNames[j][i] != EOS; i++) + gStringVar1[i] = gTrainerClassNames[j][i]; + gStringVar1[i] = CHAR_SPACE; + gStringVar1[i + 1] = EOS; + + if (trainerId == TRAINER_PLAYER) + { + StringAppend(gStringVar1, gSaveBlock2Ptr->playerName); + } + else if (trainerId == TRAINER_FRONTIER_BRAIN) + { + CopyDomeBrainTrainerName(gStringVar2); + StringAppend(gStringVar1, gStringVar2); + } + else + { + CopyDomeTrainerName(gStringVar2, trainerId); + StringAppend(gStringVar1, gStringVar2); + } + + textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, gStringVar1, 0xD0, textPrinter.letterSpacing); + textPrinter.current_text_offset = gStringVar1; + textPrinter.windowId = windowId; + PutWindowTilemap(windowId); + CopyWindowToVram(windowId, 3); + AddTextPrinter(&textPrinter, 0, NULL); + textPrinter.letterSpacing = 0; + + for (i = 0; i < 3; i++) + { + textPrinter.currentY = gUnknown_0860D346[i]; + if (trainerId == TRAINER_PLAYER) + textPrinter.current_text_offset = gSpeciesNames[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]]; + else if (trainerId == TRAINER_FRONTIER_BRAIN) + textPrinter.current_text_offset = gSpeciesNames[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]]; + else + textPrinter.current_text_offset = gSpeciesNames[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].species]; + + textPrinter.windowId = 1 + i + windowId; + if (i == 1) + textPrinter.currentX = 7; + else + textPrinter.currentX = 0; + + PutWindowTilemap(1 + i + windowId); + CopyWindowToVram(1 + i + windowId, 3); + AddTextPrinter(&textPrinter, 0, NULL); + } + + PutWindowTilemap(windowId + 4); + CopyWindowToVram(windowId + 4, 3); + if (trainerId == TRAINER_FRONTIER_BRAIN) + textPrinter.current_text_offset = gBattleDomePotentialPointers[16]; + else + textPrinter.current_text_offset = gBattleDomePotentialPointers[trainerTournamentId]; + + textPrinter.fontId = 1; + textPrinter.windowId = windowId + 4; + textPrinter.currentX = 0; + textPrinter.y = 4; + textPrinter.currentY = 4; + AddTextPrinter(&textPrinter, 0, NULL); + + for (i = 0; i < 3; i++) + { + for (j = 0; j < 4; j++) + { + for (k = 0; k < DOME_TOURNAMENT_TRAINERS_COUNT; k++) + { + if (trainerId == TRAINER_FRONTIER_BRAIN) + allocatedArray[k] += sMovePointsForDomeTrainers[sub_81A5060(i, j)][k]; + else if (trainerId == TRAINER_PLAYER) + allocatedArray[k] += sMovePointsForDomeTrainers[gSaveBlock2Ptr->frontier.field_EFC[i].moves[j]][k]; + else + allocatedArray[k] += sMovePointsForDomeTrainers[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].moves[j]][k]; + } + } + } + + for (i = 0; i < ARRAY_COUNT(gUnknown_0860C988); i++) + { + s32 r4 = 0; + + for (k = 0, j = 0; j < DOME_TOURNAMENT_TRAINERS_COUNT; j++) + { + if (gUnknown_0860C988[i][j] != 0) + { + r4++; + if (allocatedArray[j] != 0 && allocatedArray[j] >= gUnknown_0860C988[i][j]) + k++; + } + } + if (r4 == k) + break; + } + + textPrinter.current_text_offset = gBattleDomeOpponentStylePointers[i]; + textPrinter.y = 20; + textPrinter.currentY = 20; + AddTextPrinter(&textPrinter, 0, NULL); + + for (i = 0; i < 18; i++) + allocatedArray[i] = 0; + + if (trainerId == TRAINER_FRONTIER_BRAIN || trainerId == TRAINER_PLAYER) + { + for (i = 0; i < 3; i++) + { + for (j = 0; j < 6; j++) + { + if (trainerId == TRAINER_FRONTIER_BRAIN) + allocatedArray[j] = sub_81A50F0(i, j); + else + allocatedArray[j] = gSaveBlock2Ptr->frontier.field_EFC[i].evs[j]; + } + allocatedArray[6] += allocatedArray[0]; + for (j = 0; j < 5; j++) + { + if (trainerId == TRAINER_FRONTIER_BRAIN) + nature = sub_81A50B0(i); + else + nature = gSaveBlock2Ptr->frontier.field_EFC[i].nature; + + if (gNatureStatTable[nature][j] > 0) + { + allocatedArray[j + 7] += (allocatedArray[j + 1] * 110) / 100; + } + else if (gNatureStatTable[nature][j] < 0) + { + allocatedArray[j + 7] += (allocatedArray[j + 1] * 90) / 100; + allocatedArray[j + 13]++; + } + else + { + allocatedArray[j + 7] += allocatedArray[j + 1]; + } + } + } + for (j = 0, i = 0; i < 6; i++) + j += allocatedArray[6 + i]; + for (i = 0; i < 6; i++) + allocatedArray[i] = (allocatedArray[6 + i] * 100) / j; + } + else + { + for (i = 0; i < 3; i++) + { + s32 evBits = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].evSpread; + for (k = 0, j = 0; j < 6; j++) + { + allocatedArray[j] = 0; + if (evBits & 1) + k++; + evBits >>= 1; + } + k = 510 / k; + evBits = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].evSpread; + for (j = 0; j < 6; j++) + { + if (evBits & 1) + allocatedArray[j] = k; + evBits >>= 1; + } + + allocatedArray[6] += allocatedArray[0]; + for (j = 0; j < 5; j++) + { + nature = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].nature; + if (gNatureStatTable[nature][j] > 0) + { + allocatedArray[j + 7] += (allocatedArray[j + 1] * 110) / 100; + } + else if (gNatureStatTable[nature][j] < 0) + { + allocatedArray[j + 7] += (allocatedArray[j + 1] * 90) / 100; + allocatedArray[j + 13]++; + } + else + { + allocatedArray[j + 7] += allocatedArray[j + 1]; + } + } + } + for (j = 0, i = 0; i < 6; i++) + j += allocatedArray[i + 6]; + for (i = 0; i < 6; i++) + allocatedArray[i] = (allocatedArray[6 + i] * 100) / j; + } + + for (i = 0, j = 0, k = 0; k < 6; k++) + { + if (allocatedArray[k] > 29) + { + if (i == 2) + { + if (allocatedArray[6] < allocatedArray[k]) + { + if (allocatedArray[7] < allocatedArray[k]) + { + if (allocatedArray[6] < allocatedArray[7]) + { + allocatedArray[6] = allocatedArray[7]; + allocatedArray[7] = k; + } + else + { + allocatedArray[7] = k; + } + } + else + { + allocatedArray[6] = allocatedArray[7]; + allocatedArray[7] = k; + } + } + else + { + if (allocatedArray[7] < allocatedArray[k]) + allocatedArray[7] = k; + } + } + else + { + allocatedArray[i + 6] = k; + i++; + } + } + if (allocatedArray[k] == 0) + { + if (j == 2) + { + if (allocatedArray[k + 12] >= 2 + || ((allocatedArray[k + 12] == 1 && allocatedArray[12 + allocatedArray[8]] == 0 && allocatedArray[12 + allocatedArray[9]] == 0) + ) + ) + { + allocatedArray[8] = allocatedArray[9]; + allocatedArray[9] = k; + } + else if (allocatedArray[k + 12] == 1 && allocatedArray[12 + allocatedArray[8]] == 0) + { + allocatedArray[8] = allocatedArray[9]; + allocatedArray[9] = k; + } + else if (allocatedArray[k + 12] == 1 && allocatedArray[12 + allocatedArray[9]] == 0) + { + allocatedArray[9] = k; + } + } + else + { + allocatedArray[j + 8] = k; + j++; + } + } + } + + if (i == 2) + i = gUnknown_0860D349[allocatedArray[6]] + (allocatedArray[7] - (allocatedArray[6] + 1)); + else if (i == 1) + i = allocatedArray[6] + 15; + else if (j == 2) + i = gUnknown_0860D349[allocatedArray[8]] + (allocatedArray[9] - (allocatedArray[8] + 1)) + 21; + else if (j == 1) + i = allocatedArray[8] + 36; + else + i = 42; + + textPrinter.current_text_offset = gBattleDomeOpponentStatsPointers[i]; + textPrinter.y = 36; + textPrinter.currentY = 36; + AddTextPrinter(&textPrinter, 0, NULL); + Free(allocatedArray); +} + +static s32 sub_8192F08(u8 arg0, u8 *arg1) +{ + s32 i; + u8 tournamentId; + s32 retVal = 0; + s32 count = 0; + + for (i = gUnknown_0860D3C4[arg0][0]; i < gUnknown_0860D3C4[arg0][0] + gUnknown_0860D3C4[arg0][1]; i++) + { + tournamentId = gUnknown_0860D3B4[i]; + if (!gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].isEliminated) + { + arg1[count] = tournamentId; + if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId == TRAINER_PLAYER) + StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); + else if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId == TRAINER_FRONTIER_BRAIN) + CopyDomeBrainTrainerName(gStringVar1); + else + CopyDomeTrainerName(gStringVar1, gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId); + count++; + } + } + + if (count == 2) + return 0; + + for (i = gUnknown_0860D3C4[arg0][0]; i < gUnknown_0860D3C4[arg0][0] + gUnknown_0860D3C4[arg0][1]; i++) + { + tournamentId = gUnknown_0860D3B4[i]; + if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].isEliminated + && gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].eliminatedAt >= gUnknown_0860D3C4[arg0][2]) + { + arg1[count] = tournamentId; + count++; + if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].eliminatedAt == gUnknown_0860D3C4[arg0][2]) + { + StringCopy(gStringVar2, gMoveNames[gSaveBlock2Ptr->frontier.field_EC0[tournamentId]]); + retVal = gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].unk3 * 2; + if (gSaveBlock2Ptr->frontier.field_EC0[tournamentId] == 0 && gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].unk3 == 0) + retVal = 4; + } + else + { + if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId == TRAINER_PLAYER) + StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); + else if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId == TRAINER_FRONTIER_BRAIN) + CopyDomeBrainTrainerName(gStringVar1); + else + CopyDomeTrainerName(gStringVar1, gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId); + } + } + + if (count == 2) + break; + } + + if (arg0 == 14) + return retVal + 2; + else + return retVal + 1; +} + +static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) +{ + struct TextSubPrinter textPrinter; + s32 tournamentIds[2]; + s32 trainerIds[2]; + bool32 lost[2]; + s32 i; + s32 winStringId = 0; + s32 arrId = 0; + s32 windowId = 0; + s32 x = 0, y = 0; + u8 palSlot = 0; + + if (flags & 1) + arrId = 8, windowId = 9, palSlot = 2; + if (flags & 2) + x = 256; + if (flags & 4) + y = 160; + if (flags & 8) + x = -256; + if (flags & 0x10) + y = -160; + + // Copy trainers information to handy arrays. + winStringId = sub_8192F08(matchNo, sBattleDomeStruct->unk_11); + for (i = 0; i < 2; i++) + { + tournamentIds[i] = sBattleDomeStruct->unk_11[i]; + trainerIds[i] = gSaveBlock2Ptr->frontier.domeTrainers[tournamentIds[i]].trainerId; + if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentIds[i]].eliminatedAt <= gUnknown_0860D3C4[matchNo][2] + && gSaveBlock2Ptr->frontier.domeTrainers[tournamentIds[i]].isEliminated) + lost[i] = TRUE; + else + lost[i] = FALSE; + } + + // Draw first trainer sprite. + if (trainerIds[0] == TRAINER_PLAYER) + sBattleDomeStruct->arr[arrId] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), TRUE, x + 48, y + 88, palSlot + 12, 0xFFFF); + else if (trainerIds[0] == TRAINER_FRONTIER_BRAIN) + sBattleDomeStruct->arr[arrId] = CreateTrainerPicSprite(GetDomeBrainTrainerPicId(), TRUE, x + 48, y + 88, palSlot + 12, 0xFFFF); + else + sBattleDomeStruct->arr[arrId] = CreateTrainerPicSprite(GetFrontierTrainerFrontSpriteId(trainerIds[0]), TRUE, x + 48, y + 88, palSlot + 12, 0xFFFF); + + if (flags & 0x1E) + gSprites[sBattleDomeStruct->arr[arrId]].invisible = 1; + if (lost[0]) + gSprites[sBattleDomeStruct->arr[arrId]].oam.paletteNum = 3; + + // Draw second trainer sprite. + if (trainerIds[1] == TRAINER_PLAYER) + sBattleDomeStruct->arr[1 + arrId] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), TRUE, x + 192, y + 88, palSlot + 13, 0xFFFF); + else if (trainerIds[1] == TRAINER_FRONTIER_BRAIN) + sBattleDomeStruct->arr[1 + arrId] = CreateTrainerPicSprite(GetDomeBrainTrainerPicId(), TRUE, x + 192, y + 88, palSlot + 13, 0xFFFF); + else + sBattleDomeStruct->arr[1 + arrId] = CreateTrainerPicSprite(GetFrontierTrainerFrontSpriteId(trainerIds[1]), TRUE, x + 192, y + 88, palSlot + 13, 0xFFFF); + + if (flags & 0x1E) + gSprites[sBattleDomeStruct->arr[1 + arrId]].invisible = 1; + if (lost[1]) + gSprites[sBattleDomeStruct->arr[1 + arrId]].oam.paletteNum = 3; + + // Draw first trainer's pokemon icons. + for (i = 0; i < 3; i++) + { + if (trainerIds[0] == TRAINER_PLAYER) + { + sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[0]][i], + SpriteCb_MonIcon, + x | gUnknown_0860D3A8[i], + y + gUnknown_0860D3AB[i], + 0, 0, TRUE); + gSprites[sBattleDomeStruct->arr[2 + i + arrId]].oam.priority = 0; + } + else if (trainerIds[0] == TRAINER_FRONTIER_BRAIN) + { + sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[0]][i], + SpriteCb_MonIcon, + x | gUnknown_0860D3A8[i], + y + gUnknown_0860D3AB[i], + 0, 0, TRUE); + gSprites[sBattleDomeStruct->arr[2 + i + arrId]].oam.priority = 0; + } + else + { + sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[0]][i]].species, + SpriteCb_MonIcon, + x | gUnknown_0860D3A8[i], + y + gUnknown_0860D3AB[i], + 0, 0, TRUE); + gSprites[sBattleDomeStruct->arr[2 + i + arrId]].oam.priority = 0; + } + + if (flags & 0x1E) + gSprites[sBattleDomeStruct->arr[2 + i + arrId]].invisible = 1; + if (lost[0]) + { + gSprites[sBattleDomeStruct->arr[2 + i + arrId]].oam.paletteNum = 3; + gSprites[sBattleDomeStruct->arr[2 + i + arrId]].sMonIconStill = TRUE; + } + } + + // Draw second trainer's pokemon icons. + for (i = 0; i < 3; i++) + { + if (trainerIds[1] == TRAINER_PLAYER) + { + sBattleDomeStruct->arr[5 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[1]][i], + SpriteCb_MonIcon, + x | gUnknown_0860D3AE[i], + y + gUnknown_0860D3B1[i], + 0, 0, TRUE); + gSprites[sBattleDomeStruct->arr[5 + i + arrId]].oam.priority = 0; + } + else if (trainerIds[1] == TRAINER_FRONTIER_BRAIN) + { + sBattleDomeStruct->arr[5 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[1]][i], + SpriteCb_MonIcon, + x | gUnknown_0860D3AE[i], + y + gUnknown_0860D3B1[i], + 0, 0, TRUE); + gSprites[sBattleDomeStruct->arr[5 + i + arrId]].oam.priority = 0; + } + else + { + sBattleDomeStruct->arr[5 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[1]][i]].species, + SpriteCb_MonIcon, + x | gUnknown_0860D3AE[i], + y + gUnknown_0860D3B1[i], + 0, 0, TRUE); + gSprites[sBattleDomeStruct->arr[5 + i + arrId]].oam.priority = 0; + } + + if (flags & 0x1E) + gSprites[sBattleDomeStruct->arr[5 + i + arrId]].invisible = 1; + if (lost[1]) + { + gSprites[sBattleDomeStruct->arr[5 + i + arrId]].oam.paletteNum = 3; + gSprites[sBattleDomeStruct->arr[5 + i + arrId]].sMonIconStill = TRUE; + } + } + + // Print the win string (or 'Let the battle begin!' one). + textPrinter.x = 0; + textPrinter.y = 2; + textPrinter.currentX = textPrinter.x; + textPrinter.currentY = textPrinter.y; + textPrinter.letterSpacing = 0; + textPrinter.lineSpacing = 0; + textPrinter.fontColor_l = 0; + textPrinter.fgColor = 14; + textPrinter.bgColor = 0; + textPrinter.shadowColor = 13; + StringExpandPlaceholders(gStringVar4, gBattleDomeWinStringsPointers[winStringId]); + textPrinter.current_text_offset = gStringVar4; + textPrinter.windowId = windowId + 8; + textPrinter.fontId = 1; + PutWindowTilemap(windowId + 8); + CopyWindowToVram(windowId + 8, 3); + textPrinter.currentX = 0; + textPrinter.currentY = textPrinter.y = 0; + AddTextPrinter(&textPrinter, 0, NULL); + + // Print first trainer's name. + if (trainerIds[0] == TRAINER_PLAYER) + StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); + else if (trainerIds[0] == TRAINER_FRONTIER_BRAIN) + CopyDomeBrainTrainerName(gStringVar1); + else + CopyDomeTrainerName(gStringVar1, trainerIds[0]); + + textPrinter.fontId = 2; + textPrinter.letterSpacing = 2; + textPrinter.current_text_offset = gStringVar1; + textPrinter.windowId = windowId + 6; + textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.current_text_offset, 0x40, textPrinter.letterSpacing); + textPrinter.currentY = textPrinter.y = 2; + PutWindowTilemap(windowId + 6); + CopyWindowToVram(windowId + 6, 3); + AddTextPrinter(&textPrinter, 0, NULL); + + // Print second trainer's name. + if (trainerIds[1] == TRAINER_PLAYER) + StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); + else if (trainerIds[1] == TRAINER_FRONTIER_BRAIN) + CopyDomeBrainTrainerName(gStringVar1); + else + CopyDomeTrainerName(gStringVar1, trainerIds[1]); + + textPrinter.current_text_offset = gStringVar1; + textPrinter.windowId = windowId + 7; + textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.current_text_offset, 0x40, textPrinter.letterSpacing); + textPrinter.currentY = textPrinter.y = 2; + PutWindowTilemap(windowId + 7); + CopyWindowToVram(windowId + 7, 3); + AddTextPrinter(&textPrinter, 0, NULL); + + // Print match number. + textPrinter.letterSpacing = 0; + textPrinter.current_text_offset = gBattleDomeMatchNumberPointers[matchNo]; + textPrinter.windowId = windowId + 5; + textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.current_text_offset, 0xA0, textPrinter.letterSpacing); + textPrinter.currentY = textPrinter.y = 2; + PutWindowTilemap(windowId + 5); + CopyWindowToVram(windowId + 5, 3); + AddTextPrinter(&textPrinter, 0, NULL); +} + +void sub_81938A4(void) +{ + u8 taskId = CreateTask(sub_8194220, 0); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 2; + gTasks[taskId].data[4] = 0; + SetMainCallback2(CB2_BattleDome); +} + +void sub_81938E0(void) +{ + u8 taskId; + + sub_8194D48(); + gSaveBlock2Ptr->frontier.lvlMode = gSaveBlock2Ptr->frontier.field_D0A - 1; + gSaveBlock2Ptr->frontier.field_CB2 = 3; + taskId = CreateTask(sub_8194220, 0); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 2; + gTasks[taskId].data[4] = 1; + SetMainCallback2(CB2_BattleDome); +} + +void sub_819395C(u8 taskId) +{ + u8 newTaskId = 0; + s32 spriteId = gTasks[taskId].data[1]; + + switch (gTasks[taskId].data[0]) + { + case 0: + if (!gPaletteFade.active) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); + gTasks[taskId].data[0] = 1; + StartSpriteAnim(&gSprites[spriteId], 1); + } + break; + case 1: + if (!gPaletteFade.active) + gTasks[taskId].data[0] = 2; + break; + case 2: + switch (sub_8193BDC(taskId)) + { + case 0: + default: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + gTasks[taskId].data[0] = 7; + break; + case 1: + break; + case 2: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + gTasks[taskId].data[0] = 3; + break; + case 3: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + gTasks[taskId].data[0] = 5; + break; + } + break; + case 3: + if (!gPaletteFade.active) + { + FreeAllWindowBuffers(); + ScanlineEffect_Stop(); + FREE_AND_SET_NULL(sTilemapBuffer); + newTaskId = CreateTask(sub_8190400, 0); + gTasks[newTaskId].data[0] = 0; + gTasks[newTaskId].data[1] = gUnknown_0860D080[spriteId]; + gTasks[newTaskId].data[2] = 1; + gTasks[newTaskId].data[3] = taskId; + + gTasks[taskId].data[0] = 4; + sBattleDomeStruct->unk_10 = 0; + } + break; + case 4: + break; + case 5: + if (!gPaletteFade.active) + { + FreeAllWindowBuffers(); + ScanlineEffect_Stop(); + FREE_AND_SET_NULL(sTilemapBuffer); + newTaskId = CreateTask(sub_8190400, 0); + gTasks[newTaskId].data[0] = 0; + gTasks[newTaskId].data[1] = spriteId - 16; + gTasks[newTaskId].data[2] = 2; + gTasks[newTaskId].data[3] = taskId; + + gTasks[taskId].data[0] = 6; + } + break; + case 6: + break; + case 7: + if (!gPaletteFade.active) + { + FreeAllWindowBuffers(); + ScanlineEffect_Stop(); + FREE_AND_SET_NULL(sTilemapBuffer); + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + DestroyTask(gTasks[taskId].data[7]); + DestroyTask(taskId); + } + break; + } +} + +static u8 sub_8193BDC(u8 taskId) +{ + u8 retVal = 1; + s32 arrId = 4; + s32 spriteId = gTasks[taskId].data[1]; + s32 roundId = gSaveBlock2Ptr->frontier.field_CB2; + + if (gMain.newKeys == B_BUTTON || (gMain.newKeys & A_BUTTON && spriteId == 31)) + { + PlaySE(SE_SELECT); + retVal = 0; + } + else if (gMain.newKeys & A_BUTTON) + { + if (spriteId < 16) + { + PlaySE(SE_SELECT); + retVal = 2; + } + else + { + PlaySE(SE_SELECT); + retVal = 3; + } + } + else + { + if (gMain.newKeys == DPAD_UP && gUnknown_0860CBF1[spriteId][roundId][0] != 0xFF) + arrId = 0; + else if (gMain.newKeys == DPAD_DOWN && gUnknown_0860CBF1[spriteId][roundId][1] != 0xFF) + arrId = 1; + else if (gMain.newKeys == DPAD_LEFT && gUnknown_0860CBF1[spriteId][roundId][2] != 0xFF) + arrId = 2; + else if (gMain.newKeys == DPAD_RIGHT && gUnknown_0860CBF1[spriteId][roundId][3] != 0xFF) + arrId = 3; + } + + if (arrId != 4) + { + PlaySE(SE_SELECT); + StartSpriteAnim(&gSprites[spriteId], 0); + spriteId = gUnknown_0860CBF1[spriteId][roundId][arrId]; + StartSpriteAnim(&gSprites[spriteId], 1); + gTasks[taskId].data[1] = spriteId; + } + + return retVal; +} + +void sub_8193D40(void) +{ + u8 taskId = CreateTask(sub_8194220, 0); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 1; + gTasks[taskId].data[2] = 2; + gTasks[taskId].data[4] = 0; + SetMainCallback2(CB2_BattleDome); +} + +void sub_8193D7C(void) +{ + s32 i; + + if (gSpecialVar_0x8005 == 1) + { + gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(gTrainerBattleOpponent_A)].isEliminated = 1; + gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(gTrainerBattleOpponent_A)].eliminatedAt = gSaveBlock2Ptr->frontier.field_CB2; + gSaveBlock2Ptr->frontier.field_EC0[TrainerIdToTournamentId(gTrainerBattleOpponent_A)] = gBattleResults.lastUsedMovePlayer; + if (gSaveBlock2Ptr->frontier.field_CB2 < DOME_FINAL) + DecideRoundWinners(gSaveBlock2Ptr->frontier.field_CB2); + } + else + { + gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(TRAINER_PLAYER)].isEliminated = 1; + gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(TRAINER_PLAYER)].eliminatedAt = gSaveBlock2Ptr->frontier.field_CB2; + gSaveBlock2Ptr->frontier.field_EC0[TrainerIdToTournamentId(TRAINER_PLAYER)] = gBattleResults.lastUsedMoveOpponent; + if (gBattleOutcome == B_OUTCOME_FORFEITED || gSpecialVar_0x8005 == 9) + gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(TRAINER_PLAYER)].unk3 = 1; + for (i = gSaveBlock2Ptr->frontier.field_CB2; i < DOME_ROUNDS_COUNT; i++) + DecideRoundWinners(i); + } +} + +static u16 GetWinningMove(s32 winnerTournamentId, s32 loserTournamentId, u8 roundId) +{ + s32 i, j, k; + s32 moveScores[4 * 3]; + u16 moveIds[4 * 3]; + u16 bestScore = 0; + u16 bestId = 0; + s32 movePower = 0; + GetFrontierEnemyMonLevel(); // Unused return variable. + + // Calc move points of all 4 moves for all 3 pokemon hitting all 3 target mons. + for (i = 0; i < 3; i++) + { + for (j = 0; j < 4; j++) + { + moveScores[i * 4 + j] = 0; + if (gSaveBlock2Ptr->frontier.domeTrainers[winnerTournamentId].trainerId == TRAINER_FRONTIER_BRAIN) + moveIds[i * 4 + j] = sub_81A5060(i, j); + else + moveIds[i * 4 + j] = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[winnerTournamentId][i]].moves[j]; + + movePower = gBattleMoves[moveIds[i * 4 + j]].power; + if (movePower == 0) + movePower = 40; + else if (movePower == 1) + movePower = 60; + else if (moveIds[i * 4 + j] == MOVE_SELF_DESTRUCT || moveIds[i * 4 + j] == MOVE_EXPLOSION) + movePower /= 2; + + for (k = 0; k < 3; k++) + { + u32 var = 0; + u32 targetSpecies = 0; + u32 targetAbility = 0; + do + { + var = Random32(); + } while (gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[loserTournamentId][k]].nature != GetNatureFromPersonality(var)); + + targetSpecies = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[loserTournamentId][k]].species; + if (var & 1) + targetAbility = gBaseStats[targetSpecies].ability2; + else + targetAbility = gBaseStats[targetSpecies].ability1; + + var = AI_TypeCalc(moveIds[i * 4 + j], targetSpecies, targetAbility); + if (var & MOVE_RESULT_NOT_VERY_EFFECTIVE && var & MOVE_RESULT_SUPER_EFFECTIVE) + moveScores[i * 4 + j] += movePower; + else if (var & MOVE_RESULT_NO_EFFECT) + moveScores[i * 4 + j] += 0; + else if (var & MOVE_RESULT_SUPER_EFFECTIVE) + moveScores[i * 4 + j] += movePower * 2; + else if (var & MOVE_RESULT_NOT_VERY_EFFECTIVE) + moveScores[i * 4 + j] += movePower / 2; + else + moveScores[i * 4 + j] += movePower; + } + + if (bestScore < moveScores[i * 4 + j]) + { + bestId = i * 4 + j; + bestScore = moveScores[i * 4 + j]; + } + else if (bestScore == moveScores[i * 4 + j]) + { + if (moveIds[bestId] < moveIds[i * 4 + j]) // Why not use (Random() & 1) instead of promoting moves with a higher id? + bestId = i * 4 + j; + } + } + } + + j = bestId; + goto LABEL; + while (j != 0) + { + for (j = 0, k = 0; k < 4 * 3; k++) + { + if (bestScore < moveScores[k]) + { + j = k; + bestScore = moveScores[k]; + } + else if (bestScore == moveScores[k] && moveIds[j] < moveIds[k]) + { + j = k; + } + } + if (i == roundId - 1) + break; + LABEL: + { + for (i = 0; i < roundId - 1; i++) + { + if (gSaveBlock2Ptr->frontier.field_EC0[sub_81953E8(winnerTournamentId, i)] == moveIds[j]) + break; + } + if (i == roundId - 1) + break; + + moveScores[j] = 0; + bestScore = 0; + j = 0; + for (k = 0; k < 4 * 3; k++) + j += moveScores[k]; + } + } + + if (moveScores[j] == 0) + j = bestId; + + return moveIds[j]; +} + +static void sub_8194220(u8 taskId) +{ + s32 i; + struct TextSubPrinter textPrinter; + s32 r10 = gTasks[taskId].data[1]; + s32 r4 = gTasks[taskId].data[2]; + + switch (gTasks[taskId].data[0]) + { + case 0: + SetHBlankCallback(NULL); + SetVBlankCallback(NULL); + EnableInterrupts(INTR_FLAG_HBLANK | INTR_FLAG_VBLANK); + CpuFill32(0, (void *)VRAM, VRAM_SIZE); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_0860CE74, ARRAY_COUNT(gUnknown_0860CE74)); + InitWindows(gUnknown_0860CE94); + DeactivateAllTextPrinters(); + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0xB00, 0); + gTasks[taskId].data[0]++; + break; + case 1: + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + SetGpuReg(REG_OFFSET_MOSAIC, 0); + SetGpuReg(REG_OFFSET_WIN0H, 0x5860); + SetGpuReg(REG_OFFSET_WIN0V, 0x9F); + SetGpuReg(REG_OFFSET_WIN1H, 0x9098); + SetGpuReg(REG_OFFSET_WIN1V, 0x9F); + SetGpuReg(REG_OFFSET_WININ, 0); + SetGpuReg(REG_OFFSET_WINOUT, 0x3F); + ResetPaletteFade(); + ResetSpriteData(); + FreeAllSpritePalettes(); + gTasks[taskId].data[0]++; + break; + case 2: + sTilemapBuffer = AllocZeroed(0x800); + LZDecompressWram(gUnknown_08D83900, sTilemapBuffer); + SetBgTilemapBuffer(1, sTilemapBuffer); + CopyBgTilemapBufferToVram(1); + DecompressAndLoadBgGfxUsingHeap(1, gUnknown_08D82F10, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(2, gUnknown_08D834FC, 0x2000, 0, 0); + DecompressAndLoadBgGfxUsingHeap(2, gUnknown_08D83B2C, 0x2000, 0, 1); + DecompressAndLoadBgGfxUsingHeap(3, gUnknown_08D83C3C, 0x2000, 0, 1); + LoadCompressedPalette(gUnknown_08D85358, 0, 0x200); + LoadCompressedPalette(gUnknown_08D85444, 0x100, 0x200); + LoadCompressedPalette(gUnknown_08D85600, 0xF0, 0x20); + CpuFill32(0, gPlttBufferFaded, 0x400); + ShowBg(0); + ShowBg(1); + ShowBg(2); + ShowBg(3); + gTasks[taskId].data[0]++; + break; + case 3: + LoadCompressedObjectPic(gUnknown_0860CF50); + if (r10 == 0) + { + for (i = 0; i < (unsigned) 31; i++) + CreateSprite(&gUnknown_0860CFA8, gUnknown_0860D411[i][0], gUnknown_0860D411[i][1], 0); + if (gTasks[taskId].data[4]) + CreateSprite(&gUnknown_0860D008, 218, 12, 0); + else + CreateSprite(&gUnknown_0860CFD8, 218, 12, 0); + } + + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJ_1D_MAP); + gTasks[taskId].data[0]++; + break; + case 4: + textPrinter.fontId = 2; + textPrinter.current_text_offset = gText_BattleTourney; + textPrinter.windowId = 2; + textPrinter.x = 0; + textPrinter.y = 0; + textPrinter.letterSpacing = 2; + textPrinter.lineSpacing = 0; + textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.current_text_offset, 0x70, textPrinter.letterSpacing); + textPrinter.currentY = 1; + textPrinter.fontColor_l = 0; + textPrinter.fgColor = 14; + textPrinter.bgColor = 0; + textPrinter.shadowColor = 13; + AddTextPrinter(&textPrinter, 0, NULL); + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + s32 var, var2; + + CopyDomeTrainerName(gDisplayedStringBattle, gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); + if (r10 == 1) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt != 0) + { + var2 = gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt - 1; + sub_81948EC(i, var2); + } + } + else if (gSaveBlock2Ptr->frontier.field_CB2 != DOME_ROUND2) + { + sub_81948EC(i, gSaveBlock2Ptr->frontier.field_CB2 - 2); + } + } + else if (r10 == 0) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt != 0) + { + var2 = gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt - 1; + sub_81948EC(i, var2); + } + } + else if (gSaveBlock2Ptr->frontier.field_CB2 != DOME_ROUND1) + { + if (gTasks[taskId].data[4]) + var2 = gSaveBlock2Ptr->frontier.field_CB2; + else + var2 = gSaveBlock2Ptr->frontier.field_CB2 - 1; + sub_81948EC(i, var2); + } + } + + if (gTasks[taskId].data[4]) + var = gSaveBlock2Ptr->frontier.field_CB2; + else + var = gSaveBlock2Ptr->frontier.field_CB2 - 1; + + if ( ((r10 == 1 && gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt < gSaveBlock2Ptr->frontier.field_CB2 - 1) + || (r10 == 0 && gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt <= var)) + && gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == TRAINER_PLAYER) + { + textPrinter.fgColor = 3; + textPrinter.shadowColor = 4; + } + else + { + textPrinter.fgColor = 11; + textPrinter.shadowColor = 13; + } + } + else + { + if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == TRAINER_PLAYER) + { + textPrinter.fgColor = 3; + textPrinter.shadowColor = 4; + } + else + { + textPrinter.fgColor = 14; + textPrinter.shadowColor = 13; + } + } + + if (gUnknown_0860D3F1[i][0] == 0) + textPrinter.currentX = GetStringWidthDifference(textPrinter.fontId, gDisplayedStringBattle, 0x3D, textPrinter.letterSpacing); + else + textPrinter.currentX = 3; + textPrinter.current_text_offset = gDisplayedStringBattle; + textPrinter.windowId = gUnknown_0860D3F1[i][0]; + textPrinter.currentY = gUnknown_0860D3F1[i][1]; + AddTextPrinter(&textPrinter, 0, NULL); + } + gTasks[taskId].data[0]++; + break; + case 5: + PutWindowTilemap(0); + PutWindowTilemap(1); + PutWindowTilemap(2); + CopyWindowToVram(0, 3); + CopyWindowToVram(1, 3); + CopyWindowToVram(2, 3); + SetHBlankCallback(HblankCb_BattleDome); + SetVBlankCallback(VblankCb1_BattleDome); + if (r4 == 2) + { + if (r10 == 0) + { + i = CreateTask(sub_819395C, 0); + gTasks[i].data[0] = r10; + gTasks[i].data[1] = r10; + gTasks[i].data[6] = gTasks[taskId].data[4]; + } + else + { + i = CreateTask(sub_8194950, 0); + gTasks[i].data[0] = 0; + } + } + else + { + i = gTasks[taskId].data[3]; + gTasks[i].data[0] = 0; + } + ScanlineEffect_Clear(); + for (i = 0; i < 91; i++) + { + gScanlineEffectRegBuffers[0][i] = 0x1F0A; + gScanlineEffectRegBuffers[1][i] = 0x1F0A; + } + for (i = 91; i < 160; i++) + { + asm(""::"r"(i)); + gScanlineEffectRegBuffers[0][i] = 0x1F09; + gScanlineEffectRegBuffers[1][i] = 0x1F09; + } + ScanlineEffect_SetParams(gUnknown_0860CF44); + DestroyTask(taskId); + break; + } +} + +static void sub_81948EC(u8 tournamentId, u8 arg1) +{ + s32 i; + const struct UnkStruct_860DD10 *structPtr = gUnknown_0860DD10[tournamentId][arg1]; + + for (i = 0; i < gUnknown_0860DE10[tournamentId][arg1]; i++) + CopyToBgTilemapBufferRect_ChangePalette(1, &structPtr[i].src, structPtr[i].x, structPtr[i].y, 1, 1, 0x11); + + CopyBgTilemapBufferToVram(1); +} + +static void sub_8194950(u8 taskId) +{ + s32 i; + struct TextSubPrinter textPrinter; + + switch (gTasks[taskId].data[0]) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); + gTasks[taskId].data[0] = 1; + break; + case 1: + if (!gPaletteFade.active) + { + gTasks[taskId].data[0] = 2; + gTasks[taskId].data[3] = 64; + textPrinter.fontId = 2; + textPrinter.x = 0; + textPrinter.y = 0; + textPrinter.letterSpacing = 2; + textPrinter.lineSpacing = 0; + textPrinter.fontColor_l = 0; + textPrinter.fgColor = 11; + textPrinter.bgColor = 0; + textPrinter.shadowColor = 13; + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + CopyDomeTrainerName(gDisplayedStringBattle, gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); + if (gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt == gSaveBlock2Ptr->frontier.field_CB2 - 1 + && gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated) + { + if (gUnknown_0860D3F1[i][0] == 0) + textPrinter.currentX = GetStringWidthDifference(textPrinter.fontId, gDisplayedStringBattle, 0x3D, textPrinter.letterSpacing); + else + textPrinter.currentX = 3; + + textPrinter.current_text_offset = gDisplayedStringBattle; + textPrinter.windowId = gUnknown_0860D3F1[i][0]; + textPrinter.currentY = gUnknown_0860D3F1[i][1]; + AddTextPrinter(&textPrinter, 0, NULL); + } + if (!gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated) + { + s32 var = gSaveBlock2Ptr->frontier.field_CB2 - 1; + sub_81948EC(i, var); + } + } + } + break; + case 2: + if (--gTasks[taskId].data[3] == 0) + gTasks[taskId].data[0] = 3; + break; + case 3: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + gTasks[taskId].data[0] = 4; + } + break; + case 4: + if (!gPaletteFade.active) + { + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); + DestroyTask(taskId); + } + break; + } +} + +static void CB2_BattleDome(void) +{ + AnimateSprites(); + BuildOamBuffer(); + RunTextPrinters(); + UpdatePaletteFade(); + RunTasks(); +} + +static void VblankCb0_BattleDome(void) +{ + ChangeBgX(3, 0x80, 1); + ChangeBgY(3, 0x80, 2); + SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_X); + SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_Y); + SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); + SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); + SetGpuReg(REG_OFFSET_BG2HOFS, gBattle_BG2_X); + SetGpuReg(REG_OFFSET_BG2VOFS, gBattle_BG2_Y); + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +#define SET_WIN0H_WIN1H(win0H, win1H) \ +{ \ + *(vu32*)(REG_ADDR_WIN0H) = ((win0H << 16) | (win1H)); \ +} + +static void HblankCb_BattleDome(void) +{ + register u32 vCount asm("r0") = REG_VCOUNT; + register u32 vCount_ asm("r1") = vCount; + if (vCount > 41) + { + if (vCount < 50) + { + REG_WININ = 0x3B3B; + SET_WIN0H_WIN1H(0x989B, 0x5558); + return; + } + else if (vCount > 57) + { + if (vCount < 75) + { + REG_WININ = 0x3B3B; + SET_WIN0H_WIN1H(0x9098, 0x5860); + return; + } + else if (vCount < 82) + { + REG_WININ = 0x3B3B; + SET_WIN0H_WIN1H(0x989B, 0x5558); + return; + } + else if (vCount > 94) + { + if (vCount < 103) + { + REG_WININ = 0x3737; + SET_WIN0H_WIN1H(0x989B, 0x5558); + return; + } + else if (vCount < 119) + { + REG_WININ = 0x3737; + SET_WIN0H_WIN1H(0x9098, 0x5860); + return; + } + else if (vCount > 126) + { + if (vCount_ < 135) + { + REG_WININ = 0x3737; + SET_WIN0H_WIN1H(0x989B, 0x5558); + return; + } + } + } + } + } + + REG_WININ = 0x3F3F; + SET_WIN0H_WIN1H(0, 0); +} + +static void VblankCb1_BattleDome(void) +{ + SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_X); + SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_Y); + SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); + SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); + ChangeBgY(2, 0x80, 2); + ChangeBgY(3, 0x80, 1); + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + ScanlineEffect_InitHBlankDmaTransfer(); +} + +void sub_8194D48(void) +{ + gFacilityTrainerMons = gBattleFrontierMons; + gFacilityTrainers = gBattleFrontierTrainers; +} + +void sub_8194D68(void) +{ + s32 i, moveSlot; + + for (i = 0; i < 2; i++) + { + s32 playerMonId = gSaveBlock2Ptr->frontier.field_CAA[gUnknown_0203CEF8[i] - 1] - 1; + s32 count; + + for (moveSlot = 0; moveSlot < 4; moveSlot++) + { + count = 0; + while (count < 4) + { + if (GetMonData(&gSaveBlock1Ptr->playerParty[playerMonId], MON_DATA_MOVE1 + count, NULL) == GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + moveSlot, NULL)) + break; + count++; + } + if (count == 4) + SetMonMoveSlot(&gPlayerParty[i], MOVE_SKETCH, moveSlot); + } + + gSaveBlock1Ptr->playerParty[playerMonId] = gPlayerParty[i]; + } +} + +void sub_8194E44(void) +{ + s32 i; + + for (i = 0; i < 2; i++) + { + s32 playerMonId = gSaveBlock2Ptr->frontier.field_CAA[gUnknown_0203CEF8[i] - 1] - 1; + u16 item = GetMonData(&gSaveBlock1Ptr->playerParty[playerMonId], MON_DATA_HELD_ITEM, NULL); + SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &item); + } +} + +void sub_8194EB4(void) +{ + sub_80F94E8(); +} + +void sub_8194EC0(void) +{ + if (TrainerIdToTournamentId(gTrainerBattleOpponent_A) > TrainerIdToTournamentId(TRAINER_PLAYER)) + gSpecialVar_Result = 1; + else + gSpecialVar_Result = 2; +} + +void sub_8194EF8(void) +{ + s32 i; + + sub_8194D48(); + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (!gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated) + break; + } + CopyDomeTrainerName(gStringVar1, gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); +} + +void sub_8194F58(void) +{ + s32 i, j, k; + s32 monLevel; + s32 species[3]; + s32 monTypesBits; + s32 trainerId; + s32 monTournamentId; + u8 lvlMode; + u16 *statSums; + s32 *statValues; + u8 ivs = 0; + + species[0] = 0; + species[1] = 0; + species[2] = 0; + if ((gSaveBlock2Ptr->frontier.field_D0A != -gSaveBlock2Ptr->frontier.field_D0B) && gSaveBlock2Ptr->frontier.field_CA8 != 1) + return; + + statSums = AllocZeroed(sizeof(u16) * DOME_TOURNAMENT_TRAINERS_COUNT); + statValues = AllocZeroed(sizeof(s32) * 6); + lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + gSaveBlock2Ptr->frontier.lvlMode = 0; + // This one, I'd like to call a 'C fakematching'. + { + u8 one; + gSaveBlock2Ptr->frontier.field_D0A = (one = 1); + gSaveBlock2Ptr->frontier.field_D0B = one; + } + + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + do + { + if (i < 5) + trainerId = Random() % 10; + else if (i < 15) + trainerId = Random() % 20 + 10; + else + trainerId = Random() % 10 + 30; + + for (j = 0; j < i; j++) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId == trainerId) + break; + } + } while (j != i); + + gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId = trainerId; + for (j = 0; j < 3; j++) + { + // Make sure the mon is valid. + do + { + monTournamentId = RandomizeFacilityTrainerMonId(trainerId); + for (k = 0; k < j; k++) + { + s32 checkingMonId = gSaveBlock2Ptr->frontier.domeMonId[i][k]; + if (checkingMonId == monTournamentId + || species[0] == gFacilityTrainerMons[monTournamentId].species + || species[1] == gFacilityTrainerMons[monTournamentId].species + || gFacilityTrainerMons[checkingMonId].itemTableId == gFacilityTrainerMons[monTournamentId].itemTableId) + break; + } + } while (k != j); + + gSaveBlock2Ptr->frontier.domeMonId[i][j] = monTournamentId; + species[j] = gFacilityTrainerMons[monTournamentId].species; + } + gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated = 0; + gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt = 0; + gSaveBlock2Ptr->frontier.domeTrainers[i].unk3 = 0; + } + + monLevel = 50; + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + monTypesBits = 0; + statSums[i] = 0; + ivs = GetDomeTrainerMonIvs(gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); + for (j = 0; j < 3; j++) + { + CalcDomeMonStats(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species, + monLevel, ivs, + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].evSpread, + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].nature, + statValues); + + statSums[i] += statValues[STAT_ATK]; + statSums[i] += statValues[STAT_DEF]; + statSums[i] += statValues[STAT_SPATK]; + statSums[i] += statValues[STAT_SPDEF]; + statSums[i] += statValues[STAT_SPEED]; + statSums[i] += statValues[STAT_HP]; + monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species].type1]; + monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species].type2]; + } + + // Because GF hates temporary vars, trainerId acts like monTypesCount here. + for (trainerId = 0, j = 0; j < 32; j++) + { + if (monTypesBits & 1) + trainerId++; + monTypesBits >>= 1; + } + statSums[i] += (trainerId * monLevel) / 20; + } + + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT - 1; i++) + { + for (j = i + 1; j < DOME_TOURNAMENT_TRAINERS_COUNT; j++) + { + if (statSums[i] < statSums[j]) + { + SwapDomeTrainers(i, j, statSums); + } + else if (statSums[i] == statSums[j]) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId > gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId) + SwapDomeTrainers(i, j, statSums); + } + } + } + + Free(statSums); + Free(statValues); + + for (i = 0; i < 4; i++) + DecideRoundWinners(i); + + gSaveBlock2Ptr->frontier.lvlMode = lvlMode; +} + +static s32 TrainerIdToTournamentId(u16 trainerId) +{ + s32 i; + + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == trainerId) + break; + } + + return i; +} + +// The same as the above one, but has global scope. +s32 TrainerIdToDomeTournamentId(u16 trainerId) +{ + s32 i; + + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == trainerId) + break; + } + + return i; +} + +static u8 sub_81953E8(u8 tournamentId, u8 arg1) +{ + u8 arr[2]; + sub_8192F08(gUnknown_0860D1A0[gUnknown_0860D1C0[tournamentId] / 2][arg1] - 16, arr); + if (tournamentId == arr[0]) + return arr[1]; + else + return arr[0]; +} + +static void DecideRoundWinners(u8 roundId) +{ + s32 i; + s32 moveSlot, monId1, monId2; + s32 tournamentId1, tournamentId2; + s32 species; + s32 points1 = 0, points2 = 0; + + for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) + { + if (gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated || gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == TRAINER_PLAYER) + continue; + + tournamentId1 = i; + tournamentId2 = TournamentIdOfOpponent(roundId, gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].trainerId); + // Frontier Brain always wins, check tournamentId1. + if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].trainerId == TRAINER_FRONTIER_BRAIN && tournamentId2 != 0xFF) + { + gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].isEliminated = 1; + gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].eliminatedAt = roundId; + gSaveBlock2Ptr->frontier.field_EC0[tournamentId2] = GetWinningMove(tournamentId1, tournamentId2, roundId); + } + // Frontier Brain always wins, check tournamentId2. + else if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].trainerId == TRAINER_FRONTIER_BRAIN && tournamentId1 != 0xFF) + { + gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].isEliminated = 1; + gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].eliminatedAt = roundId; + gSaveBlock2Ptr->frontier.field_EC0[tournamentId1] = GetWinningMove(tournamentId2, tournamentId1, roundId); + } + // Decide which one of two trainers wins! + else if (tournamentId2 != 0xFF) + { + // BUG: points1 and points2 are not cleared at the beginning of the loop resulting in not fair results. + + // Calculate points for both trainers. + for (monId1 = 0; monId1 < 3; monId1++) + { + for (moveSlot = 0; moveSlot < 4; moveSlot++) + { + for (monId2 = 0; monId2 < 3; monId2++) + { + points1 += sub_818FFC0(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId1][monId1]].moves[moveSlot], + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId2][monId2]].species, 2); + } + } + species = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId1][monId1]].species; + points1 += ( gBaseStats[species].baseHP + + gBaseStats[species].baseAttack + + gBaseStats[species].baseDefense + + gBaseStats[species].baseSpeed + + gBaseStats[species].baseSpAttack + + gBaseStats[species].baseSpDefense) / 10; + } + // Random part of the formula. + points1 += (Random() & 0x1F); + // Favor trainers with higher id; + points1 += tournamentId1; + + for (monId1 = 0; monId1 < 3; monId1++) + { + for (moveSlot = 0; moveSlot < 4; moveSlot++) + { + for (monId2 = 0; monId2 < 3; monId2++) + { + points2 += sub_818FFC0(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId2][monId1]].moves[moveSlot], + gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId1][monId2]].species, 2); + } + } + species = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId2][monId1]].species; + points2 += ( gBaseStats[species].baseHP + + gBaseStats[species].baseAttack + + gBaseStats[species].baseDefense + + gBaseStats[species].baseSpeed + + gBaseStats[species].baseSpAttack + + gBaseStats[species].baseSpDefense) / 10; + } + // Random part of the formula. + points2 += (Random() & 0x1F); + // Favor trainers with higher id; + points2 += tournamentId2; + + if (points1 > points2) + { + gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].isEliminated = 1; + gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].eliminatedAt = roundId; + gSaveBlock2Ptr->frontier.field_EC0[tournamentId2] = GetWinningMove(tournamentId1, tournamentId2, roundId); + } + else if (points1 < points2) + { + gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].isEliminated = 1; + gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].eliminatedAt = roundId; + gSaveBlock2Ptr->frontier.field_EC0[tournamentId1] = GetWinningMove(tournamentId2, tournamentId1, roundId); + } + // Points are the same, so we favor the one with the higher id. + else if (tournamentId1 > tournamentId2) + { + gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].isEliminated = 1; + gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].eliminatedAt = roundId; + gSaveBlock2Ptr->frontier.field_EC0[tournamentId2] = GetWinningMove(tournamentId1, tournamentId2, roundId); + } + else + { + gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].isEliminated = 1; + gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].eliminatedAt = roundId; + gSaveBlock2Ptr->frontier.field_EC0[tournamentId1] = GetWinningMove(tournamentId2, tournamentId1, roundId); + } + } + } +} + +static void CopyDomeTrainerName(u8 *dst, u16 trainerId) +{ + s32 i = 0; + GetFrontierEnemyMonLevel(); // Unused return value. + + if (trainerId == TRAINER_FRONTIER_BRAIN) + { + CopyDomeBrainTrainerName(dst); + } + else + { + if (trainerId == TRAINER_PLAYER) + { + for (i = 0; i < OT_NAME_LENGTH; i++) + dst[i] = gSaveBlock2Ptr->playerName[i]; + } + else if (trainerId < 300) + { + for (i = 0; i < 7; i++) + dst[i] = gFacilityTrainers[trainerId].trainerName[i]; + } + dst[i] = EOS; + } +} + +static u8 GetDomeBrainTrainerPicId(void) +{ + return gTrainers[TRAINER_TUCKER].trainerPic; +} + +static u8 GetDomeBrainTrainerClass(void) +{ + return gTrainers[TRAINER_TUCKER].trainerClass; +} + +static void CopyDomeBrainTrainerName(u8 *dst) +{ + s32 i; + + for (i = 0; i < 7; i++) + dst[i] = gTrainers[TRAINER_TUCKER].trainerName[i]; + dst[i] = EOS; +} diff --git a/src/battle_frontier_1.c b/src/battle_frontier_1.c deleted file mode 100644 index 1ac84962f..000000000 --- a/src/battle_frontier_1.c +++ /dev/null @@ -1,4623 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "battle_setup.h" -#include "battle_frontier_1.h" -#include "battle_tower.h" -#include "battle_message.h" -#include "event_data.h" -#include "overworld.h" -#include "util.h" -#include "malloc.h" -#include "string_util.h" -#include "random.h" -#include "task.h" -#include "main.h" -#include "gpu_regs.h" -#include "text.h" -#include "bg.h" -#include "window.h" -#include "palette.h" -#include "decompress.h" -#include "menu.h" -#include "sound.h" -#include "pokemon_icon.h" -#include "data2.h" -#include "international_string_util.h" -#include "trainer_pokemon_sprites.h" -#include "scanline_effect.h" -#include "constants/species.h" -#include "constants/moves.h" -#include "constants/trainers.h" -#include "constants/abilities.h" -#include "constants/songs.h" - -#define DOME_ROUND1 0 -#define DOME_ROUND2 1 -#define DOME_QUARTERFINAL 1 // Different name for the same round. -#define DOME_SEMIFINAL 2 -#define DOME_FINAL 3 -#define DOME_ROUNDS_COUNT 4 - -struct FacilityMon -{ - u16 species; - u16 moves[4]; - u8 itemTableId; - u8 evSpread; - u8 nature; -}; - -struct Unknown_0203CD78_Struct -{ - u8 arr[16]; - u8 unk_10; - u8 unk_11[3]; -}; - -extern void sub_81B8558(void); -extern u32 sub_81A39C4(void); -extern u16 sub_8162548(u8, u8); -extern u16 RandomizeFacilityTrainerMonId(u16); -extern u8 GetFrontierEnemyMonLevel(void); -extern void CopyDomeTrainerName(u8 *dst, u16 trainerId); -extern u16 sub_81A5060(u8 monId, u8 moveSlotId); -extern u8 sub_81A50F0(u8, u8); -extern u8 sub_81A50B0(u8); -extern void sub_8162614(u16, u8); -extern void sub_81A4C30(void); -extern bool8 sub_81A3610(void); -extern u16 sub_81A4FF0(u8); -extern u8 GetFrontierTrainerFrontSpriteId(u16); -extern u8 GetFrontierOpponentClass(u16); -extern void sub_80F94E8(void); - -extern u8 gUnknown_0203CEF8[]; -extern u32 gUnknown_0203CD70; -extern u32 gUnknown_0203CD74; -extern u16 gBattle_BG0_X; -extern u16 gBattle_BG0_Y; -extern u16 gBattle_BG1_X; -extern u16 gBattle_BG1_Y; -extern u16 gBattle_BG2_X; -extern u16 gBattle_BG2_Y; -extern u16 gBattle_BG3_X; -extern u16 gBattle_BG3_Y; -extern const struct FacilityMon *gFacilityTrainerMons; -extern struct Unknown_0203CD78_Struct *gUnknown_0203CD78; -extern u8 *gUnknown_0203CD7C; - -extern void (* const gUnknown_0860D090[])(void); -extern const u32 gUnknown_0860D0EC[][2]; -extern const u32 gUnknown_0860D0FC[][2]; -extern const u16 gBattleFrontierHeldItems[]; -extern const u8 gUnknown_0860D10C[][4]; -extern const u8 gUnknown_0860D14C[]; -extern const struct BgTemplate gUnknown_0860CE84[4]; -extern const struct WindowTemplate gUnknown_0860CEB4[]; -extern const struct CompressedSpriteSheet gUnknown_0860CF50[]; -extern const struct SpriteTemplate gUnknown_0860D068; -extern const struct SpriteTemplate gUnknown_0860D050; -extern const u8 gUnknown_0860D080[]; -extern const u8 gUnknown_0860D15C[]; -extern const u8 gUnknown_0860D1A0[][4]; -extern const u8 gUnknown_0860D19C[]; -extern const u8 gUnknown_0860D349[]; -extern const u8 gUnknown_0860D1C0[]; -extern const u8 gUnknown_0860D343[]; -extern const u8 gUnknown_0860D340[]; -extern const u8 gUnknown_0860D346[]; -extern const u8 gUnknown_0860C988[31][16]; -extern const u8 gUnknown_0860D3F1[][2]; -extern const u8 gUnknown_0860D3C4[][3]; -extern const u8 gUnknown_0860D3B4[]; -extern const u8 gUnknown_0860D3A8[]; -extern const u8 gUnknown_0860D3AB[]; -extern const u8 gUnknown_0860D3AE[]; -extern const u8 gUnknown_0860D3B1[]; -extern const u8 gUnknown_0860D080[]; -extern const u8 gUnknown_08D83900[]; -extern const u8 gUnknown_0860CBF1[][5][4]; -extern const u8 *const gBattleDomePotentialPointers[]; -extern const u8 *const gBattleDomeOpponentStylePointers[]; -extern const u8 *const gBattleDomeOpponentStatsPointers[]; -extern const u8 *const gBattleDomeWinStringsPointers[]; -extern const u8 *const gBattleDomeMatchNumberPointers[]; -extern const struct FacilityMon gBattleFrontierMons[]; -extern const struct BattleFrontierTrainer gBattleFrontierTrainers[]; - -// gfx -extern const u8 gUnknown_08D83D50[]; -extern const u8 gUnknown_08D84970[]; -extern const u8 gUnknown_08D84F00[]; -extern const u8 gUnknown_08D85444[]; -extern const u8 gUnknown_08D85358[]; -extern const u8 gUnknown_08D85600[]; -extern const u8 gUnknown_08D854C8[]; -extern const u8 gUnknown_08D82F10[]; -extern const u8 gUnknown_08D834FC[]; -extern const u8 gUnknown_08D83B2C[]; -extern const u8 gUnknown_08D83C3C[]; - -// text -extern const u8 gTrainerClassNames[][0xD]; - -// This file's functions. -u8 GetDomeTrainerMonIvs(u16 trainerId); -void SwapDomeTrainers(s32 id1, s32 id2, u16 *statsArray); -void CalcDomeMonStats(u16 species, s32 level, s32 ivs, u8 evBits, u8 nature, s32 *stats); -void CreateDomeTrainerMons(u16 tournamentTrainerId); -static s32 TrainerIdToTournamentId(u16 trainerId); -s32 GetTrainerMonCountInBits(u16 tournamentTrainerId); -s32 sub_818FCBC(u16 tournamentTrainerId, bool8 arg1); -s32 sub_818FDB8(u16 tournamentTrainerId, bool8 arg1); -s32 sub_818FFC0(s32 move, s32 species, s32 arg2); -s32 sub_818FEB4(s32 *arr, bool8 arg1); -u16 TrainerIdOfPlayerOpponent(void); -void sub_8190400(u8 taskId); -void sub_8190CD4(u8 taskId); -void sub_8194220(u8 taskId); -void sub_8194950(u8 taskId); -static void CB2_BattleDome(void); -static void VblankCb0_BattleDome(void); -static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo); -static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId); -u8 sub_819221C(u8 taskId); -s32 sub_8192F08(u8, u8*); -u8 GetDomeBrainTrainerPicId(void); -u8 GetDomeBrainTrainerClass(void); -void CopyDomeBrainTrainerName(u8 *dst); -void CopyDomeTrainerName(u8 *dst, u16 trainerId); -void sub_8194D48(void); -void sub_8194BEC(void); -static void VblankCb1_BattleDome(void); -u8 sub_8193BDC(u8 taskId); -void DecideRoundWinners(u8 roundId); -u8 sub_81953E8(u8 tournamentId, u8); -void sub_81948EC(u8, u8); - -// const rom data -ALIGNED(4) -static const u8 sMovePoints[MOVES_COUNT][DOME_TOURNAMENT_TRAINERS_COUNT] = -{ - [MOVE_NONE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_POUND] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_KARATE_CHOP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_DOUBLE_SLAP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_COMET_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_MEGA_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_PAY_DAY] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_FIRE_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_ICE_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_THUNDER_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_SCRATCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_VICE_GRIP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_GUILLOTINE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0}, - [MOVE_RAZOR_WIND] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_SWORDS_DANCE] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, - [MOVE_CUT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_GUST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_WING_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_WHIRLWIND] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_FLY] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_BIND] = {0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_SLAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_VINE_WHIP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_STOMP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_DOUBLE_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_MEGA_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0}, - [MOVE_JUMP_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_ROLLING_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_SAND_ATTACK] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_HEADBUTT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_HORN_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_FURY_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_HORN_DRILL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0}, - [MOVE_TACKLE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_BODY_SLAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_WRAP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_TAKE_DOWN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_THRASH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_DOUBLE_EDGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_TAIL_WHIP] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_POISON_STING] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_TWINEEDLE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_PIN_MISSILE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_LEER] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_BITE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_GROWL] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_ROAR] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_SING] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SUPERSONIC] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SONIC_BOOM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_DISABLE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_ACID] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_EMBER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_FLAMETHROWER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, - [MOVE_MIST] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_WATER_GUN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_HYDRO_PUMP] = {1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0}, - [MOVE_SURF] = {1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0}, - [MOVE_ICE_BEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, - [MOVE_BLIZZARD] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1}, - [MOVE_PSYBEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_BUBBLE_BEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_AURORA_BEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_HYPER_BEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0}, - [MOVE_PECK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_DRILL_PECK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_SUBMISSION] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_LOW_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_COUNTER] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0}, - [MOVE_SEISMIC_TOSS] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_STRENGTH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_ABSORB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_MEGA_DRAIN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_LEECH_SEED] = {1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_GROWTH] = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_RAZOR_LEAF] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SOLAR_BEAM] = {1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0}, - [MOVE_POISON_POWDER] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_STUN_SPORE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SLEEP_POWDER] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_PETAL_DANCE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_STRING_SHOT] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_DRAGON_RAGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_FIRE_SPIN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_THUNDER_SHOCK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_THUNDERBOLT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, - [MOVE_THUNDER_WAVE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_THUNDER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1}, - [MOVE_ROCK_THROW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_EARTHQUAKE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0}, - [MOVE_FISSURE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0}, - [MOVE_DIG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_TOXIC] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_CONFUSION] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_PSYCHIC] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1}, - [MOVE_HYPNOSIS] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_MEDITATE] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_AGILITY] = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_QUICK_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_RAGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_TELEPORT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_NIGHT_SHADE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_MIMIC] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_SCREECH] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_DOUBLE_TEAM] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_RECOVER] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_HARDEN] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_MINIMIZE] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SMOKESCREEN] = {0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_CONFUSE_RAY] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_WITHDRAW] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_DEFENSE_CURL] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_BARRIER] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_LIGHT_SCREEN] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_HAZE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_REFLECT] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_FOCUS_ENERGY] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_BIDE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_METRONOME] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, - [MOVE_MIRROR_MOVE] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, - [MOVE_SELF_DESTRUCT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0}, - [MOVE_EGG_BOMB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0}, - [MOVE_LICK] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_SMOG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_SLUDGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_BONE_CLUB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_FIRE_BLAST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1}, - [MOVE_WATERFALL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_CLAMP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_SWIFT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SKULL_BASH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0}, - [MOVE_SPIKE_CANNON] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_CONSTRICT] = {0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_AMNESIA] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_KINESIS] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SOFT_BOILED] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_HI_JUMP_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_GLARE] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_DREAM_EATER] = {1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0}, - [MOVE_POISON_GAS] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_BARRAGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_LEECH_LIFE] = {0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_LOVELY_KISS] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SKY_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1}, - [MOVE_TRANSFORM] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_BUBBLE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_DIZZY_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_SPORE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_FLASH] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_PSYWAVE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SPLASH] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_ACID_ARMOR] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_CRABHAMMER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, - [MOVE_EXPLOSION] = {0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0}, - [MOVE_FURY_SWIPES] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_BONEMERANG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_REST] = {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_ROCK_SLIDE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_HYPER_FANG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_SHARPEN] = {0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_CONVERSION] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_TRI_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_SUPER_FANG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SLASH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_SUBSTITUTE] = {0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_STRUGGLE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0}, - [MOVE_SKETCH] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0}, - [MOVE_TRIPLE_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_THIEF] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_SPIDER_WEB] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_MIND_READER] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0}, - [MOVE_NIGHTMARE] = {1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_FLAME_WHEEL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_SNORE] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_CURSE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_FLAIL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_CONVERSION_2] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_AEROBLAST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0}, - [MOVE_COTTON_SPORE] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_REVERSAL] = {1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_SPITE] = {0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_POWDER_SNOW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_PROTECT] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0}, - [MOVE_MACH_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_SCARY_FACE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_FAINT_ATTACK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SWEET_KISS] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_BELLY_DRUM] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SLUDGE_BOMB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1}, - [MOVE_MUD_SLAP] = {0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_OCTAZOOKA] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_SPIKES] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_ZAP_CANNON] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1}, - [MOVE_FORESIGHT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_DESTINY_BOND] = {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, - [MOVE_PERISH_SONG] = {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, - [MOVE_ICY_WIND] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_DETECT] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0}, - [MOVE_BONE_RUSH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_LOCK_ON] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0}, - [MOVE_OUTRAGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1}, - [MOVE_SANDSTORM] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_GIGA_DRAIN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0}, - [MOVE_ENDURE] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_CHARM] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_ROLLOUT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_FALSE_SWIPE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_SWAGGER] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_MILK_DRINK] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SPARK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_FURY_CUTTER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_STEEL_WING] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_MEAN_LOOK] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0}, - [MOVE_ATTRACT] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_SLEEP_TALK] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, - [MOVE_HEAL_BELL] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, - [MOVE_RETURN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_PRESENT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0}, - [MOVE_FRUSTRATION] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_SAFEGUARD] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_PAIN_SPLIT] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_SACRED_FIRE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1}, - [MOVE_MAGNITUDE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_DYNAMIC_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1}, - [MOVE_MEGAHORN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0}, - [MOVE_DRAGON_BREATH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_BATON_PASS] = {1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_ENCORE] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0}, - [MOVE_PURSUIT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_RAPID_SPIN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_SWEET_SCENT] = {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_IRON_TAIL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1}, - [MOVE_METAL_CLAW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_VITAL_THROW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_MORNING_SUN] = {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, - [MOVE_SYNTHESIS] = {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, - [MOVE_MOONLIGHT] = {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, - [MOVE_HIDDEN_POWER] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_CROSS_CHOP] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0}, - [MOVE_TWISTER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_RAIN_DANCE] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, - [MOVE_SUNNY_DAY] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, - [MOVE_CRUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_MIRROR_COAT] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_PSYCH_UP] = {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_EXTREME_SPEED] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0}, - [MOVE_ANCIENT_POWER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1}, - [MOVE_SHADOW_BALL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_FUTURE_SIGHT] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_ROCK_SMASH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_WHIRLPOOL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_BEAT_UP] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_FAKE_OUT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_UPROAR] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_STOCKPILE] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SPIT_UP] = {1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0}, - [MOVE_SWALLOW] = {1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_HEAT_WAVE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1}, - [MOVE_HAIL] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_TORMENT] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_FLATTER] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_WILL_O_WISP] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_MEMENTO] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_FACADE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_FOCUS_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0}, - [MOVE_SMELLING_SALT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_FOLLOW_ME] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_NATURE_POWER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_CHARGE] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_TAUNT] = {0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_HELPING_HAND] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_TRICK] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_ROLE_PLAY] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_WISH] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_ASSIST] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0}, - [MOVE_INGRAIN] = {1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_SUPERPOWER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0}, - [MOVE_MAGIC_COAT] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0}, - [MOVE_RECYCLE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_REVENGE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0}, - [MOVE_BRICK_BREAK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_YAWN] = {1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_KNOCK_OFF] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_ENDEAVOR] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0}, - [MOVE_ERUPTION] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0}, - [MOVE_SKILL_SWAP] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_IMPRISON] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0}, - [MOVE_REFRESH] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_GRUDGE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0}, - [MOVE_SNATCH] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0}, - [MOVE_SECRET_POWER] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_DIVE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_ARM_THRUST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_CAMOUFLAGE] = {0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_TAIL_GLOW] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_LUSTER_PURGE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1}, - [MOVE_MIST_BALL] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1}, - [MOVE_FEATHER_DANCE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_TEETER_DANCE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_BLAZE_KICK] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_MUD_SPORT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_ICE_BALL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_NEEDLE_ARM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_SLACK_OFF] = {0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_HYPER_VOICE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0}, - [MOVE_POISON_FANG] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_CRUSH_CLAW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_BLAST_BURN] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0}, - [MOVE_HYDRO_CANNON] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0}, - [MOVE_METEOR_MASH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1}, - [MOVE_ASTONISH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_WEATHER_BALL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_AROMATHERAPY] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}, - [MOVE_FAKE_TEARS] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_AIR_CUTTER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_OVERHEAT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1}, - [MOVE_ODOR_SLEUTH] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_ROCK_TOMB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_SILVER_WIND] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1}, - [MOVE_METAL_SOUND] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_GRASS_WHISTLE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_TICKLE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_COSMIC_POWER] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_WATER_SPOUT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0}, - [MOVE_SIGNAL_BEAM] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_SHADOW_PUNCH] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_EXTRASENSORY] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_SKY_UPPERCUT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SAND_TOMB] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_SHEER_COLD] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0}, - [MOVE_MUDDY_WATER] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1}, - [MOVE_BULLET_SEED] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_AERIAL_ACE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_ICICLE_SPEAR] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_IRON_DEFENSE] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_BLOCK] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0}, - [MOVE_HOWL] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_DRAGON_CLAW] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_FRENZY_PLANT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0}, - [MOVE_BULK_UP] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_BOUNCE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1}, - [MOVE_MUD_SHOT] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1}, - [MOVE_POISON_TAIL] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_COVET] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_VOLT_TACKLE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0}, - [MOVE_MAGICAL_LEAF] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_WATER_SPORT] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_CALM_MIND] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_LEAF_BLADE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0}, - [MOVE_DRAGON_DANCE] = {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_ROCK_BLAST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_SHOCK_WAVE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0}, - [MOVE_WATER_PULSE] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1}, - [MOVE_DOOM_DESIRE] = {0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0}, - [MOVE_PSYCHO_BOOST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1}, -}; - -// code -void sub_818E9AC(void) -{ - gUnknown_0860D090[gSpecialVar_0x8004](); -} - -void sub_818E9CC(void) -{ - u32 lvlMode = gSaveBlock2Ptr->frontier.chosenLvl; - u32 battleMode = VarGet(VAR_0x40CE); - - gSaveBlock2Ptr->frontier.field_CA8 = 0; - gSaveBlock2Ptr->frontier.field_CB2 = 0; - gSaveBlock2Ptr->frontier.field_CA9_a = 0; - gSaveBlock2Ptr->frontier.field_CA9_b = 0; - if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860D0EC[battleMode][lvlMode])) - gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode] = 0; - - saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); - gTrainerBattleOpponent_A = 0; -} - -void sub_818EA84(void) -{ - u32 lvlMode = gSaveBlock2Ptr->frontier.chosenLvl; - u32 battleMode = VarGet(VAR_0x40CE); - - switch (gSpecialVar_0x8005) - { - case 0: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode]; - break; - case 1: - gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860D0EC[battleMode][lvlMode]) != 0); - break; - case 2: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_0; - break; - case 3: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_1; - break; - case 4: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_2; - break; - case 5: - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_3; - break; - case 6: - if (VarGet(VAR_0x40CE) == 1) - { - if (lvlMode) - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_5; - else - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_4; - } - else - { - if (lvlMode) - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_1; - else - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_0; - } - break; - case 7: - if (VarGet(VAR_0x40CE) == 1) - { - if (lvlMode) - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_7; - else - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_6; - } - else - { - if (lvlMode) - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_3; - else - gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_D08_2; - } - break; - case 8: - sub_81B8558(); - gUnknown_0203CEF8[0] = gSaveBlock2Ptr->frontier.field_CB0; - gUnknown_0203CEF8[1] = gSaveBlock2Ptr->frontier.field_CB0 >> 8; - break; - case 9: - gSpecialVar_Result = (gSaveBlock2Ptr->frontier.field_D0A * 2) - 3 + gSaveBlock2Ptr->frontier.field_D0B; - break; - } -} - -void sub_818ED28(void) -{ - u32 lvlMode = gSaveBlock2Ptr->frontier.chosenLvl; - u32 battleMode = VarGet(VAR_0x40CE); - - switch (gSpecialVar_0x8005) - { - case 0: - gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode] = gSpecialVar_0x8006; - break; - case 1: - if (gSpecialVar_0x8006) - gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_0860D0EC[battleMode][lvlMode]; - else - gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_0860D0FC[battleMode][lvlMode]; - break; - case 2: - gSaveBlock2Ptr->frontier.field_D08_0 = gSpecialVar_0x8006; - break; - case 3: - gSaveBlock2Ptr->frontier.field_D08_1 = gSpecialVar_0x8006; - break; - case 4: - gSaveBlock2Ptr->frontier.field_D08_2 = gSpecialVar_0x8006; - break; - case 5: - gSaveBlock2Ptr->frontier.field_D08_3 = gSpecialVar_0x8006; - break; - case 6: - if (VarGet(VAR_0x40CE) == 1) - { - if (lvlMode) - gSaveBlock2Ptr->frontier.field_D08_5 = gSpecialVar_0x8006; - else - gSaveBlock2Ptr->frontier.field_D08_4 = gSpecialVar_0x8006; - } - else - { - if (lvlMode) - gSaveBlock2Ptr->frontier.field_D08_1 = gSpecialVar_0x8006; - else - gSaveBlock2Ptr->frontier.field_D08_0 = gSpecialVar_0x8006; - } - break; - case 7: - if (VarGet(VAR_0x40CE) == 1) - { - if (lvlMode) - gSaveBlock2Ptr->frontier.field_D08_7 = gSpecialVar_0x8006; - else - gSaveBlock2Ptr->frontier.field_D08_6 = gSpecialVar_0x8006; - } - else - { - if (lvlMode) - gSaveBlock2Ptr->frontier.field_D08_3 = gSpecialVar_0x8006; - else - gSaveBlock2Ptr->frontier.field_D08_2 = gSpecialVar_0x8006; - } - break; - case 8: - gSaveBlock2Ptr->frontier.field_CB0 = T1_READ_16(gUnknown_0203CEF8); - break; - } -} - -void InitDomeTrainers(void) -{ - s32 i, j, k; - s32 monLevel; - s32 species[3]; - s32 monTypesBits, monTypesCount; - s32 trainerId; - s32 monTournamentId; - u16 *statSums; - s32 *statValues; - u8 ivs = 0; - - species[0] = 0; - species[1] = 0; - species[2] = 0; - statSums = AllocZeroed(sizeof(u16) * DOME_TOURNAMENT_TRAINERS_COUNT); - statValues = AllocZeroed(sizeof(s32) * 6); - - gSaveBlock2Ptr->frontier.field_D0A = gSaveBlock2Ptr->frontier.chosenLvl + 1; - gSaveBlock2Ptr->frontier.field_D0B = VarGet(VAR_0x40CE) + 1; - gSaveBlock2Ptr->frontier.domeTrainers[0].trainerId = TRAINER_PLAYER; - gSaveBlock2Ptr->frontier.domeTrainers[0].isEliminated = 0; - gSaveBlock2Ptr->frontier.domeTrainers[0].eliminatedAt = 0; - gSaveBlock2Ptr->frontier.domeTrainers[0].unk3 = 0; - - for (i = 0; i < 3; i++) - { - gSaveBlock2Ptr->frontier.domeMonId[0][i] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1], MON_DATA_SPECIES, NULL); - for (j = 0; j < 4; j++) - gSaveBlock2Ptr->frontier.field_EFC[i].moves[j] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1], MON_DATA_MOVE1 + j, NULL); - for (j = 0; j < 6; j++) - gSaveBlock2Ptr->frontier.field_EFC[i].evs[j] = GetMonData(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1], MON_DATA_HP_EV + j, NULL); - - gSaveBlock2Ptr->frontier.field_EFC[i].nature = GetNature(&gPlayerParty[gSaveBlock2Ptr->frontier.field_CAA[i] - 1]); - } - - for (i = 1; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (i > 5) - { - do - { - trainerId = sub_8162548(sub_81A39C4(), 0); - for (j = 1; j < i; j++) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId == trainerId) - break; - } - } while (j != i); - gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId = trainerId; - } - else - { - do - { - trainerId = sub_8162548(sub_81A39C4() + 1, 0); - for (j = 1; j < i; j++) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId == trainerId) - break; - } - } while (j != i); - gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId = trainerId; - } - - for (j = 0; j < 3; j++) - { - // Make sure the mon is valid. - do - { - monTournamentId = RandomizeFacilityTrainerMonId(trainerId); - for (k = 0; k < j; k++) - { - s32 checkingMonId = gSaveBlock2Ptr->frontier.domeMonId[i][k]; - if (checkingMonId == monTournamentId - || species[0] == gFacilityTrainerMons[monTournamentId].species - || species[1] == gFacilityTrainerMons[monTournamentId].species - || gFacilityTrainerMons[checkingMonId].itemTableId == gFacilityTrainerMons[monTournamentId].itemTableId) - break; - } - } while (k != j); - - gSaveBlock2Ptr->frontier.domeMonId[i][j] = monTournamentId; - species[j] = gFacilityTrainerMons[monTournamentId].species; - } - - gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated = 0; - gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt = 0; - gSaveBlock2Ptr->frontier.domeTrainers[i].unk3 = 0; - } - - monTypesBits = 0; - statSums[0] = 0; - for (i = 0; i < 3; i++) - { - trainerId = gSaveBlock2Ptr->frontier.field_CAA[i] - 1; // Great variable choice, gamefreak. - statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_ATK, NULL); - statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_DEF, NULL); - statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPATK, NULL); - statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPDEF, NULL); - statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_SPEED, NULL); - statSums[0] += GetMonData(&gPlayerParty[trainerId], MON_DATA_MAX_HP, NULL); - monTypesBits |= gBitTable[gBaseStats[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].type1]; - monTypesBits |= gBitTable[gBaseStats[GetMonData(&gPlayerParty[trainerId], MON_DATA_SPECIES, NULL)].type2]; - } - - for (monTypesCount = 0, j = 0; j < 32; j++) - { - if (monTypesBits & 1) - monTypesCount++; - monTypesBits >>= 1; - } - - monLevel = GetFrontierEnemyMonLevel(); - statSums[0] += (monTypesCount * monLevel) / 20; - - for (i = 1; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - monTypesBits = 0; - statSums[i] = 0; - ivs = GetDomeTrainerMonIvs(gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); - for (j = 0; j < 3; j++) - { - CalcDomeMonStats(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species, - monLevel, ivs, - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].evSpread, - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].nature, - statValues); - - statSums[i] += statValues[STAT_ATK]; - statSums[i] += statValues[STAT_DEF]; - statSums[i] += statValues[STAT_SPATK]; - statSums[i] += statValues[STAT_SPDEF]; - statSums[i] += statValues[STAT_SPEED]; - statSums[i] += statValues[STAT_HP]; - monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species].type1]; - monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species].type2]; - } - - for (monTypesCount = 0, j = 0; j < 32; j++) - { - if (monTypesBits & 1) - monTypesCount++; - monTypesBits >>= 1; - } - statSums[i] += (monTypesCount * monLevel) / 20; - } - - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT - 1; i++) - { - for (j = i + 1; j < DOME_TOURNAMENT_TRAINERS_COUNT; j++) - { - if (statSums[i] < statSums[j]) - { - SwapDomeTrainers(i, j, statSums); - } - else - { - if (statSums[i] == statSums[j]) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId == TRAINER_PLAYER) - SwapDomeTrainers(i, j, statSums); - else if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId > gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId) - SwapDomeTrainers(i, j, statSums); - } - } - } - } - - if (sub_81A3610()) - { - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == TRAINER_PLAYER) - break; - } - - if (gUnknown_0860D3F1[i][0] != 0) - { - j = 0; - gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId = TRAINER_FRONTIER_BRAIN; - } - else - { - j = 1; - gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId = TRAINER_FRONTIER_BRAIN; - } - - for (i = 0; i < 3; i++) - gSaveBlock2Ptr->frontier.domeMonId[j][i] = sub_81A4FF0(i); - } - - Free(statSums); - Free(statValues); -} - -#define CALC_STAT(base, statIndex) \ -{ \ - u8 baseStat = gBaseStats[species].base; \ - stats[statIndex] = (((2 * baseStat + ivs + evs[statIndex] / 4) * level) / 100) + 5; \ - stats[statIndex] = (u8) ModifyStatByNature(nature, stats[statIndex], statIndex); \ -} - -void CalcDomeMonStats(u16 species, s32 level, s32 ivs, u8 evBits, u8 nature, s32 *stats) -{ - s32 i, count; - u8 bits; - u16 resultingEvs; - s32 evs[6]; - - count = 0, bits = evBits; - for (i = 0; i < 6; bits >>= 1, i++) - { - if (bits & 1) - count++; - } - - resultingEvs = 510 / count; - for (i = 0; i < 6; bits <<= 1, i++) - { - evs[i] = 0; - if (evBits & bits) - evs[i] = resultingEvs; - } - - if (species == SPECIES_SHEDINJA) - { - stats[STAT_HP] = 1; - } - else - { - s32 n = 2 * gBaseStats[species].baseHP; - stats[STAT_HP] = (((n + ivs + evs[STAT_HP] / 4) * level) / 100) + level + 10; - } - - CALC_STAT(baseAttack, STAT_ATK); - CALC_STAT(baseDefense, STAT_DEF); - CALC_STAT(baseSpeed, STAT_SPEED); - CALC_STAT(baseSpAttack, STAT_SPATK); - CALC_STAT(baseSpDefense, STAT_SPDEF); -} - -#define SWAP_16(x, y) \ -{ \ - temp = x; \ - x = y; \ - y = temp; \ -} - -void SwapDomeTrainers(s32 id1, s32 id2, u16 *statsArray) -{ - s32 i; - u16 temp; - - SWAP_16(statsArray[id1], statsArray[id2]); - SWAP_16(gSaveBlock2Ptr->frontier.domeTrainers[id1].trainerId, gSaveBlock2Ptr->frontier.domeTrainers[id2].trainerId); - - for (i = 0; i < 3; i++) - SWAP_16(gSaveBlock2Ptr->frontier.domeMonId[id1][i], gSaveBlock2Ptr->frontier.domeMonId[id2][i]); -} - -void sub_818F9B0(void) -{ - StringCopy(gStringVar1, gRoundsStringTable[gSaveBlock2Ptr->frontier.field_CB2]); -} - -void sub_818F9E0(void) -{ - StringCopy(gStringVar1, gRoundsStringTable[gSaveBlock2Ptr->frontier.field_CB2]); - CopyDomeTrainerName(gStringVar2, gTrainerBattleOpponent_A); -} - -void sub_818FA20(void) -{ - gUnknown_0203CD70 = 0; - gUnknown_0203CD74 = GetMonData(&gPlayerParty[0], MON_DATA_MAX_HP, NULL); - gUnknown_0203CD74 += GetMonData(&gPlayerParty[1], MON_DATA_MAX_HP, NULL); - CalculatePlayerPartyCount(); - CreateDomeTrainerMons(TrainerIdToTournamentId(gTrainerBattleOpponent_A)); -} - -void CreateDomeMon(u8 monPartyId, u16 tournamentTrainerId, u8 tournamentMonId, u32 otId) -{ - s32 i; - u8 happiness = 0xFF; - u8 fixedIv = GetDomeTrainerMonIvs(tournamentTrainerId); // BUG: Should be using trainerId instead of tournamentTrainerId. As a result, all Pokemon have ivs of 3. - u8 level = GetFrontierEnemyMonLevel(); - CreateMonWithEVSpreadPersonalityOTID(&gEnemyParty[monPartyId], - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].species, - level, - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].nature, - fixedIv, - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].evSpread, otId); - - happiness = 0xFF; - for (i = 0; i < 4; i++) - { - SetMonMoveSlot(&gEnemyParty[monPartyId], - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].moves[i], i); - if (gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].moves[i] == MOVE_FRUSTRATION) - happiness = 0; - } - - SetMonData(&gEnemyParty[monPartyId], MON_DATA_FRIENDSHIP, &happiness); - SetMonData(&gEnemyParty[monPartyId], MON_DATA_HELD_ITEM, - &gBattleFrontierHeldItems[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].itemTableId]); -} - -void CreateDomeTrainerMons(u16 tournamentTrainerId) -{ - u8 monsCount = 0; - u32 otId = 0; - s32 i, bits; - - ZeroEnemyPartyMons(); - bits = GetTrainerMonCountInBits(tournamentTrainerId); - otId = Random32(); - if (Random() % 10 > 5) - { - for (i = 0; i < 3; i++) - { - if (bits & 1) - { - CreateDomeMon(monsCount, tournamentTrainerId, i, otId); - monsCount++; - } - bits >>= 1; - } - } - else - { - for (i = 2; i >= 0; i--) - { - if (bits & 4) - { - CreateDomeMon(monsCount, tournamentTrainerId, i, otId); - monsCount++; - } - bits <<= 1; - } - } -} - -s32 GetTrainerMonCountInBits(u16 tournamentTrainerId) -{ - s32 bits; - if (Random() & 1) - { - bits = sub_818FCBC(tournamentTrainerId, FALSE); - if (bits == 0) - bits = sub_818FDB8(tournamentTrainerId, TRUE); - } - else - { - bits = sub_818FDB8(tournamentTrainerId, FALSE); - if (bits == 0) - bits = sub_818FCBC(tournamentTrainerId, TRUE); - } - - return bits; -} - -s32 sub_818FCBC(u16 tournamentTrainerId, bool8 arg1) -{ - s32 i, moveId, playerMonId; - s32 array[3]; - - for (i = 0; i < 3; i++) - { - array[i] = 0; - for (moveId = 0; moveId < 4; moveId++) - { - for (playerMonId = 0; playerMonId < 3; playerMonId++) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN) - { - array[i] += sub_818FFC0(sub_81A5060(i, moveId), - GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 0); - } - else - { - array[i] += sub_818FFC0(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][i]].moves[moveId], - GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 0); - } - } - } - } - return sub_818FEB4(array, arg1); -} - -s32 sub_818FDB8(u16 tournamentTrainerId, bool8 arg1) -{ - s32 i, moveId, playerMonId; - s32 array[3]; - - for (i = 0; i < 3; i++) - { - array[i] = 0; - for (moveId = 0; moveId < 4; moveId++) - { - for (playerMonId = 0; playerMonId < 3; playerMonId++) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN) - { - array[i] += sub_818FFC0(sub_81A5060(i, moveId), - GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 1); - } - else - { - array[i] += sub_818FFC0(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][i]].moves[moveId], - GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 1); - } - } - } - } - return sub_818FEB4(array, arg1); -} - -s32 sub_818FEB4(s32 *arr, bool8 arg1) -{ - s32 i, j; - s32 bits = 0; - s32 array[3]; - - for (i = 0; i < 3; i++) - array[i] = i; - - if (arr[0] == arr[1] && arr[0] == arr[2]) - { - if (arg1) - { - i = 0; - while (i != 2) - { - u32 rand = Random() & 3; - if (rand != 3 && !(bits & gBitTable[rand])) - { - bits |= gBitTable[rand]; - i++; - } - } - } - } - else - { - for (i = 0; i < 2; i++) - { - for (j = i + 1; j < 3; j++) - { - s32 temp; - - if (arr[i] < arr[j]) - { - temp = arr[i]; - arr[i] = arr[j]; - arr[j] = temp; - - temp = array[i]; - array[i] = array[j]; - array[j] = temp; - } - - if (arr[i] == arr[j] && (Random() & 1)) - { - temp = arr[i]; - arr[i] = arr[j]; - arr[j] = temp; - - temp = array[i]; - array[i] = array[j]; - array[j] = temp; - } - } - } - - for (i = 0; i < 2; i++) - { - bits |= gBitTable[array[i]]; - } - } - - return bits; -} - -// Functionally equivalent, while loop is impossible to match. -#ifdef NONMATCHING -s32 sub_818FFC0(s32 move, s32 species, s32 arg2) -{ - s32 type1, type2, ability, moveType; - s32 i = 0; - s32 typePower = 20; - - if (move == MOVE_NONE || move == 0xFFFF || gBattleMoves[move].power == 0) - return 0; - - type1 = gBaseStats[species].type1; - type2 = gBaseStats[species].type2; - ability = gBaseStats[species].ability1; - moveType = gBattleMoves[move].type; - - if (ability == ABILITY_LEVITATE && moveType == TYPE_GROUND) - { - if (arg2 == 1) - typePower = 8; - } - else - { - while (gTypeEffectiveness[i + 0] != TYPE_ENDTABLE) - { - if (gTypeEffectiveness[i + 0] == TYPE_FORESIGHT) - { - i += 3; - } - else - { - u8 val = gTypeEffectiveness[i + 0]; - if (val == moveType) - { - // BUG: * 2 is not necessary and makes the condition always false if the ability is wonder guard. - if (gTypeEffectiveness[i + 1] == type1 && (ability != ABILITY_WONDER_GUARD || gTypeEffectiveness[i + 2] == TYPE_MUL_SUPER_EFFECTIVE * 2)) - typePower = (gTypeEffectiveness[i + 2] * typePower) / 10; - if (gTypeEffectiveness[i + 1] == type2 && type1 != type2 && (ability != ABILITY_WONDER_GUARD || gTypeEffectiveness[i + 2] == TYPE_MUL_SUPER_EFFECTIVE * 2)) - typePower = (gTypeEffectiveness[i + 2] * typePower) / 10; - } - i += 3; - } - } - } - - switch (arg2) - { - case 0: - switch (typePower) - { - case 10: - case 5: - case 0: - default: - typePower = 0; - break; - case 20: - typePower = 2; - break; - case 40: - typePower = 4; - break; - case 80: - typePower = 8; - break; - } - break; - case 1: - switch (typePower) - { - default: - case 20: - typePower = 0; - break; - case 5: - typePower = 4; - break; - case 0: - typePower = 8; - break; - case 10: - typePower = 2; - break; - case 40: - typePower = -2; - break; - case 80: - typePower = -4; - break; - } - break; - case 2: - switch (typePower) - { - case 0: - typePower = -16; - break; - case 5: - typePower = -8; - break; - case 10: - default: - typePower = 0; - break; - case 20: - typePower = 4; - break; - case 40: - typePower = 12; - break; - case 80: - typePower = 20; - break; - } - break; - } - - return typePower; -} -#else -NAKED -s32 sub_818FFC0(s32 move, s32 species, s32 arg2) -{ - asm_unified("\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x8\n\ - adds r3, r0, 0\n\ - adds r4, r1, 0\n\ - str r2, [sp]\n\ - movs r6, 0\n\ - movs r2, 0x14\n\ - cmp r3, 0\n\ - beq _0818FFF0\n\ - ldr r0, =0x0000ffff\n\ - cmp r3, r0\n\ - beq _0818FFF0\n\ - ldr r0, =gBattleMoves\n\ - lsls r1, r3, 1\n\ - adds r1, r3\n\ - lsls r1, 2\n\ - adds r3, r1, r0\n\ - ldrb r0, [r3, 0x1]\n\ - cmp r0, 0\n\ - bne _0818FFFC\n\ -_0818FFF0:\n\ - movs r0, 0\n\ - b _08190156\n\ - .pool\n\ -_0818FFFC:\n\ - ldr r1, =gBaseStats\n\ - lsls r0, r4, 3\n\ - subs r0, r4\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldrb r1, [r0, 0x6]\n\ - mov r10, r1\n\ - ldrb r1, [r0, 0x7]\n\ - mov r9, r1\n\ - ldrb r0, [r0, 0x16]\n\ - mov r8, r0\n\ - ldrb r3, [r3, 0x2]\n\ - str r3, [sp, 0x4]\n\ - cmp r0, 0x1A\n\ - bne _0819002C\n\ - cmp r3, 0x4\n\ - bne _0819002C\n\ - ldr r0, [sp]\n\ - cmp r0, 0x1\n\ - bne _081900AA\n\ - movs r2, 0x8\n\ - b _081900A4\n\ - .pool\n\ -_0819002C:\n\ - ldr r0, =gTypeEffectiveness\n\ - adds r1, r6, r0\n\ - ldrb r0, [r1]\n\ - ldr r7, =gTypeEffectiveness\n\ - cmp r0, 0xFF\n\ - beq _081900A4\n\ - adds r4, r1, 0\n\ -_0819003A:\n\ - ldrb r0, [r4]\n\ - cmp r0, 0xFE\n\ - beq _08190096\n\ - ldrb r0, [r4]\n\ - ldr r1, [sp, 0x4]\n\ - cmp r0, r1\n\ - bne _08190096\n\ - ldrb r0, [r4, 0x1]\n\ - adds r5, r6, 0x1\n\ - cmp r0, r10\n\ - bne _0819006C\n\ - adds r1, r6, 0x2\n\ - mov r0, r8\n\ - cmp r0, 0x19\n\ - bne _0819005E\n\ - ldrb r0, [r4, 0x2]\n\ - cmp r0, 0x28\n\ - bne _0819006C\n\ -_0819005E:\n\ - adds r0, r1, r7\n\ - ldrb r0, [r0]\n\ - muls r0, r2\n\ - movs r1, 0xA\n\ - bl __divsi3\n\ - adds r2, r0, 0\n\ -_0819006C:\n\ - adds r0, r5, r7\n\ - ldrb r0, [r0]\n\ - cmp r0, r9\n\ - bne _08190096\n\ - cmp r10, r9\n\ - beq _08190096\n\ - adds r1, r6, 0x2\n\ - mov r0, r8\n\ - cmp r0, 0x19\n\ - bne _08190088\n\ - adds r0, r1, r7\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x28\n\ - bne _08190096\n\ -_08190088:\n\ - adds r0, r1, r7\n\ - ldrb r0, [r0]\n\ - muls r0, r2\n\ - movs r1, 0xA\n\ - bl __divsi3\n\ - adds r2, r0, 0\n\ -_08190096:\n\ - adds r4, 0x3\n\ - adds r6, 0x3\n\ - ldr r1, =gTypeEffectiveness\n\ - adds r0, r6, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, 0xFF\n\ - bne _0819003A\n\ -_081900A4:\n\ - ldr r0, [sp]\n\ - cmp r0, 0x1\n\ - beq _081900E0\n\ -_081900AA:\n\ - ldr r1, [sp]\n\ - cmp r1, 0x1\n\ - bgt _081900BC\n\ - cmp r1, 0\n\ - beq _081900C4\n\ - b _08190154\n\ - .pool\n\ -_081900BC:\n\ - ldr r0, [sp]\n\ - cmp r0, 0x2\n\ - beq _08190114\n\ - b _08190154\n\ -_081900C4:\n\ - cmp r2, 0xA\n\ - beq _08190146\n\ - cmp r2, 0xA\n\ - ble _08190146\n\ - cmp r2, 0x28\n\ - beq _0819014A\n\ - cmp r2, 0x28\n\ - bgt _081900DA\n\ - cmp r2, 0x14\n\ - beq _08190104\n\ - b _08190146\n\ -_081900DA:\n\ - cmp r2, 0x50\n\ - bne _08190146\n\ - b _08190100\n\ -_081900E0:\n\ - cmp r2, 0xA\n\ - beq _08190104\n\ - cmp r2, 0xA\n\ - bgt _081900F2\n\ - cmp r2, 0\n\ - beq _08190100\n\ - cmp r2, 0x5\n\ - beq _0819014A\n\ - b _08190146\n\ -_081900F2:\n\ - cmp r2, 0x28\n\ - beq _08190108\n\ - cmp r2, 0x28\n\ - ble _08190146\n\ - cmp r2, 0x50\n\ - beq _0819010E\n\ - b _08190146\n\ -_08190100:\n\ - movs r2, 0x8\n\ - b _08190154\n\ -_08190104:\n\ - movs r2, 0x2\n\ - b _08190154\n\ -_08190108:\n\ - movs r2, 0x2\n\ - negs r2, r2\n\ - b _08190154\n\ -_0819010E:\n\ - movs r2, 0x4\n\ - negs r2, r2\n\ - b _08190154\n\ -_08190114:\n\ - cmp r2, 0xA\n\ - beq _08190146\n\ - cmp r2, 0xA\n\ - bgt _08190126\n\ - cmp r2, 0\n\ - beq _0819013A\n\ - cmp r2, 0x5\n\ - beq _08190140\n\ - b _08190146\n\ -_08190126:\n\ - cmp r2, 0x28\n\ - beq _0819014E\n\ - cmp r2, 0x28\n\ - bgt _08190134\n\ - cmp r2, 0x14\n\ - beq _0819014A\n\ - b _08190146\n\ -_08190134:\n\ - cmp r2, 0x50\n\ - beq _08190152\n\ - b _08190146\n\ -_0819013A:\n\ - movs r2, 0x10\n\ - negs r2, r2\n\ - b _08190154\n\ -_08190140:\n\ - movs r2, 0x8\n\ - negs r2, r2\n\ - b _08190154\n\ -_08190146:\n\ - movs r2, 0\n\ - b _08190154\n\ -_0819014A:\n\ - movs r2, 0x4\n\ - b _08190154\n\ -_0819014E:\n\ - movs r2, 0xC\n\ - b _08190154\n\ -_08190152:\n\ - movs r2, 0x14\n\ -_08190154:\n\ - adds r0, r2, 0\n\ -_08190156:\n\ - add sp, 0x8\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ - "); -} -#endif // NONMATCHING - -u8 GetDomeTrainerMonIvs(u16 trainerId) -{ - u8 fixedIv; - if (trainerId <= 99) - fixedIv = 3; - else if (trainerId <= 119) - fixedIv = 6; - else if (trainerId <= 139) - fixedIv = 9; - else if (trainerId <= 159) - fixedIv = 12; - else if (trainerId <= 179) - fixedIv = 15; - else if (trainerId <= 199) - fixedIv = 18; - else if (trainerId <= 219) - fixedIv = 21; - else - fixedIv = 31; - - return fixedIv; -} - -s32 TournamentIdOfOpponent(s32 roundId, s32 trainerId) -{ - s32 i, j, val; - - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == trainerId) - break; - } - - if (roundId != DOME_ROUND1) - { - if (roundId == DOME_FINAL) - val = gUnknown_0860D10C[i][roundId] + 8; - else - val = gUnknown_0860D10C[i][roundId] + 4; - - for (j = gUnknown_0860D10C[i][roundId]; j < val; j++) - { - if (gUnknown_0860D14C[j] != i && !gSaveBlock2Ptr->frontier.domeTrainers[gUnknown_0860D14C[j]].isEliminated) - break; - } - - if (j != val) - return gUnknown_0860D14C[j]; - else - return 0xFF; - } - else - { - if (!gSaveBlock2Ptr->frontier.domeTrainers[gUnknown_0860D10C[i][roundId]].isEliminated) - return gUnknown_0860D10C[i][roundId]; - else - return 0xFF; - } -} - -void sub_8190298(void) -{ - gTrainerBattleOpponent_A = TrainerIdOfPlayerOpponent(); -} - -u16 TrainerIdOfPlayerOpponent(void) -{ - return gSaveBlock2Ptr->frontier.domeTrainers[TournamentIdOfOpponent(gSaveBlock2Ptr->frontier.field_CB2, TRAINER_PLAYER)].trainerId; -} - -void sub_81902E4(void) -{ - sub_8162614(gTrainerBattleOpponent_A, 0); -} - -void sub_81902F8(void) -{ - gSaveBlock2Ptr->frontier.field_CA8 = gSpecialVar_0x8005; - VarSet(VAR_TEMP_0, 0); - gSaveBlock2Ptr->frontier.field_CA9_a = 1; - sub_81A4C30(); -} - -void sub_819033C(void) -{ - u8 lvlMode = gSaveBlock2Ptr->frontier.chosenLvl; - u8 battleMode = VarGet(VAR_0x40CE); - - if (gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode] < 999) - gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode]++; - if (gSaveBlock2Ptr->frontier.field_D1C[battleMode][lvlMode] < 999) - gSaveBlock2Ptr->frontier.field_D1C[battleMode][lvlMode]++; - - if (gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode] > gSaveBlock2Ptr->frontier.field_D14[battleMode][lvlMode]) - gSaveBlock2Ptr->frontier.field_D14[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode]; -} - -void ShowDomeOpponentInfo(void) -{ - u8 taskId = CreateTask(sub_8190400, 0); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = TrainerIdToTournamentId(TrainerIdOfPlayerOpponent()); - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 0; - - SetMainCallback2(CB2_BattleDome); -} - -void sub_8190400(u8 taskId) -{ - s32 i; - s32 r5 = gTasks[taskId].data[1]; - s32 r9 = gTasks[taskId].data[2]; - s32 r7 = gTasks[taskId].data[3]; - - switch (gTasks[taskId].data[0]) - { - case 0: - SetHBlankCallback(NULL); - SetVBlankCallback(NULL); - EnableInterrupts(INTR_FLAG_VBLANK); - CpuFill32(0, (void *)VRAM, VRAM_SIZE); - ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_0860CE84, ARRAY_COUNT(gUnknown_0860CE84)); - InitWindows(gUnknown_0860CEB4); - DeactivateAllTextPrinters(); - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - gBattle_BG1_X = 0; - gBattle_BG1_Y = 0; - gBattle_BG3_X = 0; - gBattle_BG3_Y = 0; - if (r9 == 2) - gBattle_BG2_X = 0, gBattle_BG2_Y = 0; - else - gBattle_BG2_X = 0, gBattle_BG2_Y = 160; - - gTasks[taskId].data[0]++; - break; - case 1: - SetGpuReg(REG_OFFSET_BLDCNT, 0); - SetGpuReg(REG_OFFSET_BLDALPHA, 0); - SetGpuReg(REG_OFFSET_BLDY, 0); - SetGpuReg(REG_OFFSET_MOSAIC, 0); - SetGpuReg(REG_OFFSET_WIN0H, 0); - SetGpuReg(REG_OFFSET_WIN0V, 0); - SetGpuReg(REG_OFFSET_WIN1H, 0); - SetGpuReg(REG_OFFSET_WIN1V, 0); - SetGpuReg(REG_OFFSET_WININ, 0); - SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); - ResetPaletteFade(); - ResetSpriteData(); - FreeAllSpritePalettes(); - gReservedSpritePaletteCount = 4; - gTasks[taskId].data[0]++; - break; - case 2: - DecompressAndLoadBgGfxUsingHeap(2, gUnknown_08D83D50, 0x2000, 0, 0); - DecompressAndLoadBgGfxUsingHeap(2, gUnknown_08D84970, 0x2000, 0, 1); - DecompressAndLoadBgGfxUsingHeap(3, gUnknown_08D84F00, 0x800, 0, 1); - LoadCompressedObjectPic(gUnknown_0860CF50); - LoadCompressedPalette(gUnknown_08D85358, 0, 0x200); - LoadCompressedPalette(gUnknown_08D85444, 0x100, 0x200); - LoadCompressedPalette(gUnknown_08D85600, 0xF0, 0x20); - if (r9 == 2) - LoadCompressedPalette(gUnknown_08D854C8, 0x50, 0x20); - CpuFill32(0, gPlttBufferFaded, 0x400); - ShowBg(0); - ShowBg(1); - ShowBg(2); - ShowBg(3); - gTasks[taskId].data[0]++; - break; - case 3: - SetVBlankCallback(VblankCb0_BattleDome); - gUnknown_0203CD78 = AllocZeroed(sizeof(*gUnknown_0203CD78)); - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - gUnknown_0203CD78->arr[i] |= 0xFF; - LoadMonIconPalettes(); - i = CreateTask(sub_8190CD4, 0); - gTasks[i].data[0] = 0; - gTasks[i].data[2] = 0; - gTasks[i].data[3] = r9; - gTasks[i].data[4] = r7; - if (r9 == 2) - { - DisplayMatchInfoOnCard(0, r5); - gUnknown_0203CD78->unk_10 = 1; - } - else - { - DisplayTrainerInfoOnCard(0, r5); - } - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP); - if (r9 != 0) - { - r7 = CreateSprite(&gUnknown_0860D068, 120, 4, 0); - StartSpriteAnim(&gSprites[r7], 0); - gSprites[r7].data[0] = i; - - r7 = CreateSprite(&gUnknown_0860D068, 120, 156, 0); - StartSpriteAnim(&gSprites[r7], 1); - gSprites[r7].data[0] = i; - - r7 = CreateSprite(&gUnknown_0860D050, 6, 80, 0); - StartSpriteAnim(&gSprites[r7], 0); - gSprites[r7].data[0] = i; - gSprites[r7].data[1] = 0; - if (r9 == 1) - gSprites[r7].invisible = 1; - - r7 = CreateSprite(&gUnknown_0860D050, 234, 80, 0); - StartSpriteAnim(&gSprites[r7], 1); - gSprites[r7].data[0] = i; - gSprites[r7].data[1] = 1; - } - DestroyTask(taskId); - break; - } -} - -// Note: Card scrolling up means the current card goes down and another one appears from top. -// The same is true for scrolling left. -// That means that the sprite needs to move with the moving card in the opposite scrolling direction. - -static void SpriteCb_TrainerIconCardScrollUp(struct Sprite *sprite) -{ - sprite->pos1.y += 4; - if (sprite->data[0] != 0) - { - if (sprite->pos1.y >= -32) - sprite->invisible = 0; - if (++sprite->data[1] == 40) - sprite->callback = SpriteCallbackDummy; - } - else - { - if (sprite->pos1.y >= 192) - { - gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; - FreeAndDestroyTrainerPicSprite(sprite->data[3]); - } - } -} - -static void SpriteCb_TrainerIconCardScrollDown(struct Sprite *sprite) -{ - sprite->pos1.y -= 4; - if (sprite->data[0] != 0) - { - if (sprite->pos1.y <= 192) - sprite->invisible = 0; - if (++sprite->data[1] == 40) - sprite->callback = SpriteCallbackDummy; - } - else - { - if (sprite->pos1.y <= -32) - { - gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; - FreeAndDestroyTrainerPicSprite(sprite->data[3]); - } - } -} - -static void SpriteCb_TrainerIconCardScrollLeft(struct Sprite *sprite) -{ - sprite->pos1.x += 4; - if (sprite->data[0] != 0) - { - if (sprite->pos1.x >= -32) - sprite->invisible = 0; - if (++sprite->data[1] == 64) - sprite->callback = SpriteCallbackDummy; - } - else - { - if (sprite->pos1.x >= 272) - { - gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; - FreeAndDestroyTrainerPicSprite(sprite->data[3]); - } - } -} - -static void SpriteCb_TrainerIconCardScrollRight(struct Sprite *sprite) -{ - sprite->pos1.x -= 4; - if (sprite->data[0] != 0) - { - if (sprite->pos1.x <= 272) - sprite->invisible = 0; - if (++sprite->data[1] == 64) - sprite->callback = SpriteCallbackDummy; - } - else - { - if (sprite->pos1.x <= -32) - { - gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; - FreeAndDestroyTrainerPicSprite(sprite->data[3]); - } - } -} - -#define sMonIconStill data[3] - -static void SpriteCb_MonIcon(struct Sprite *sprite) -{ - if (!sprite->sMonIconStill) - UpdateMonIconFrame(sprite); -} - -static void SpriteCb_MonIconCardScrollUp(struct Sprite *sprite) -{ - if (!sprite->sMonIconStill) - UpdateMonIconFrame(sprite); - sprite->pos1.y += 4; - if (sprite->data[0] != 0) - { - if (sprite->pos1.y >= -16) - sprite->invisible = 0; - if (++sprite->data[1] == 40) - sprite->callback = SpriteCb_MonIcon; - } - else - { - if (sprite->pos1.y >= 176) - { - gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; - sub_80D2EF8(sprite); - } - } -} - -static void SpriteCb_MonIconCardScrollDown(struct Sprite *sprite) -{ - if (!sprite->sMonIconStill) - UpdateMonIconFrame(sprite); - sprite->pos1.y -= 4; - if (sprite->data[0] != 0) - { - if (sprite->pos1.y <= 176) - sprite->invisible = 0; - if (++sprite->data[1] == 40) - sprite->callback = SpriteCb_MonIcon; - } - else - { - if (sprite->pos1.y <= -16) - { - gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; - sub_80D2EF8(sprite); - } - } -} - -static void SpriteCb_MonIconCardScrollLeft(struct Sprite *sprite) -{ - if (!sprite->sMonIconStill) - UpdateMonIconFrame(sprite); - sprite->pos1.x += 4; - if (sprite->data[0] != 0) - { - if (sprite->pos1.x >= -16) - sprite->invisible = 0; - if (++sprite->data[1] == 64) - sprite->callback = SpriteCb_MonIcon; - } - else - { - if (sprite->pos1.x >= 256) - { - gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; - sub_80D2EF8(sprite); - } - } -} - -static void SpriteCb_MonIconCardScrollRight(struct Sprite *sprite) -{ - if (!sprite->sMonIconStill) - UpdateMonIconFrame(sprite); - sprite->pos1.x -= 4; - if (sprite->data[0] != 0) - { - if (sprite->pos1.x <= 256) - sprite->invisible = 0; - if (++sprite->data[1] == 64) - sprite->callback = SpriteCb_MonIcon; - } - else - { - if (sprite->pos1.x <= -16) - { - gUnknown_0203CD78->arr[sprite->data[2]] = 0xFF; - sub_80D2EF8(sprite); - } - } -} - -void sub_8190B40(struct Sprite *sprite) -{ - s32 taskId1 = sprite->data[0]; - s32 arrId = gTasks[gTasks[taskId1].data[4]].data[1]; - s32 tournmanetTrainerId = gUnknown_0860D080[arrId]; - s32 r12 = gSaveBlock2Ptr->frontier.field_CB2; - - if (gTasks[taskId1].data[3] == 1) - { - if (sprite->data[1]) - { - if ((gSaveBlock2Ptr->frontier.domeTrainers[tournmanetTrainerId].isEliminated - && gUnknown_0203CD78->unk_10 - 1 < gSaveBlock2Ptr->frontier.domeTrainers[tournmanetTrainerId].eliminatedAt)) - { - sprite->invisible = 0; - } - else if (!gSaveBlock2Ptr->frontier.domeTrainers[tournmanetTrainerId].isEliminated - && gUnknown_0203CD78->unk_10 - 1 < r12) - { - sprite->invisible = 0; - } - else - { - if (gTasks[taskId1].data[0] == 2) - sprite->invisible = 1; - } - } - else - { - if (gUnknown_0203CD78->unk_10 != 0) - { - sprite->invisible = 0; - } - else - { - if (gTasks[taskId1].data[0] == 2) - sprite->invisible = 1; - } - } - } - else - { - if (sprite->data[1]) - { - if (gUnknown_0203CD78->unk_10 > 1) - { - if (gTasks[taskId1].data[0] == 2) - sprite->invisible = 1; - } - else - { - sprite->invisible = 0; - } - } - else - { - if (gUnknown_0203CD78->unk_10 != 0) - { - sprite->invisible = 0; - } - else - { - if (gTasks[taskId1].data[0] == 2) - sprite->invisible = 1; - } - } - } -} - -void sub_8190C6C(struct Sprite *sprite) -{ - s32 taskId1 = sprite->data[0]; - - if (gTasks[taskId1].data[3] == 1) - { - if (gUnknown_0203CD78->unk_10 != 0) - { - if (gTasks[taskId1].data[0] == 2) - sprite->invisible = 1; - } - else - { - sprite->invisible = 0; - } - } - else - { - if (gUnknown_0203CD78->unk_10 != 1) - { - if (gTasks[taskId1].data[0] == 2) - sprite->invisible = 1; - } - else - { - sprite->invisible = 0; - } - } -} - -void sub_8190CD4(u8 taskId) -{ - s32 i; - s32 windowId = 0; - s32 r9 = gTasks[taskId].data[3]; - s32 taskId2 = gTasks[taskId].data[4]; - s32 trainerTournamentId = 0; - s32 matchNo = 0; - - switch (gTasks[taskId].data[0]) - { - case 0: - if (!gPaletteFade.active) - { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); - gTasks[taskId].data[0] = 1; - } - break; - case 1: - if (!gPaletteFade.active) - gTasks[taskId].data[0] = 2; - break; - case 2: - i = sub_819221C(taskId); - switch (i) - { - case 9: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); - gTasks[taskId].data[0] = 8; - break; - case 1 ... 8: - gTasks[taskId].data[5] = i; - if (gTasks[taskId].data[2] != 0) - windowId = 9; - else - windowId = 0; - - for (i = windowId; i < windowId + 9; i++) - { - CopyWindowToVram(i, 2); - FillWindowPixelBuffer(i, 0); - } - gTasks[taskId].data[0] = 3; - break; - case 0: - break; - } - break; - case 3: - i = gTasks[taskId].data[5]; - switch (i) - { - case 1: - case 5: - if (gTasks[taskId].data[2]) - { - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - gBattle_BG1_X = 0; - gBattle_BG1_Y = 160; - } - else - { - gBattle_BG0_X = 0; - gBattle_BG0_Y = 160; - gBattle_BG1_X = 0; - gBattle_BG1_Y = 0; - } - - if (i == 1) - { - if (gUnknown_0203CD78->unk_10 == 0) - { - gBattle_BG2_X = 0; - gBattle_BG2_Y = 320; - trainerTournamentId = gUnknown_0860D080[gTasks[taskId2].data[1]]; - DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 0x10, trainerTournamentId); - } - else - { - gBattle_BG2_X = 256; - gBattle_BG2_Y = 0; - trainerTournamentId = gUnknown_0860D080[gTasks[taskId2].data[1]]; - DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 0x10, trainerTournamentId); - gUnknown_0203CD78->unk_10 = 0; - } - } - else - { - if (gUnknown_0203CD78->unk_10 == 0) - { - matchNo = gTasks[taskId2].data[1] - 16; - sub_8192F08(matchNo, gUnknown_0203CD78->unk_11); - gBattle_BG2_X = 0; - gBattle_BG2_Y = 320; - trainerTournamentId = gUnknown_0203CD78->unk_11[0]; - DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 0x10, trainerTournamentId); - } - else if (gUnknown_0203CD78->unk_10 == 2) - { - matchNo = gTasks[taskId2].data[1] - 16; - sub_8192F08(matchNo, gUnknown_0203CD78->unk_11); - gBattle_BG2_X = 0; - gBattle_BG2_Y = 320; - trainerTournamentId = gUnknown_0203CD78->unk_11[1]; - DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 0x10, trainerTournamentId); - } - else - { - gBattle_BG2_X = 256; - gBattle_BG2_Y = 160; - matchNo = gTasks[taskId2].data[1] - 16; - DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 0x10, matchNo); - } - } - - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) - { - if (i < 2) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollUp; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; - } - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollUp; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - } - } - } - for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (i < 10) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollUp; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; - } - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollUp; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - } - } - } - - gTasks[taskId].data[0] = 4; - gTasks[taskId].data[5] = 0; - break; - case 2: - case 6: - if (gTasks[taskId].data[2]) - { - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - gBattle_BG1_X = 0; - gBattle_BG1_Y = -160; - } - else - { - gBattle_BG0_X = 0; - gBattle_BG0_Y = -160; - gBattle_BG1_X = 0; - gBattle_BG1_Y = 0; - } - - if (i == 2) - { - if (gUnknown_0203CD78->unk_10 == 0) - { - gBattle_BG2_X = 0; - gBattle_BG2_Y = 160; - trainerTournamentId = gUnknown_0860D080[gTasks[taskId2].data[1]]; - DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 4, trainerTournamentId); - } - else - { - gBattle_BG2_X = 0; - gBattle_BG2_Y = 0; - trainerTournamentId = gUnknown_0860D080[gTasks[taskId2].data[1]]; - DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 4, trainerTournamentId); - gUnknown_0203CD78->unk_10 = 0; - } - } - else - { - if (gUnknown_0203CD78->unk_10 == 0) - { - matchNo = gTasks[taskId2].data[1] - 16; - sub_8192F08(matchNo, gUnknown_0203CD78->unk_11); - gBattle_BG2_X = 0; - gBattle_BG2_Y = 160; - trainerTournamentId = gUnknown_0203CD78->unk_11[0]; - DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 4, trainerTournamentId); - } - else if (gUnknown_0203CD78->unk_10 == 2) - { - matchNo = gTasks[taskId2].data[1] - 16; - sub_8192F08(matchNo, gUnknown_0203CD78->unk_11); - gBattle_BG2_X = 0; - gBattle_BG2_Y = 160; - trainerTournamentId = gUnknown_0203CD78->unk_11[1]; - DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 4, trainerTournamentId); - } - else - { - gBattle_BG2_X = 256; - gBattle_BG2_Y = 0; - matchNo = gTasks[taskId2].data[1] - 16; - DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 4, matchNo); - } - } - - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) - { - if (i < 2) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollDown; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; - } - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollDown; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - } - } - } - for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (i < 10) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollDown; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; - } - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollDown; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - } - } - } - - gTasks[taskId].data[0] = 5; - gTasks[taskId].data[5] = 0; - break; - case 3: - if (gTasks[taskId].data[2]) - { - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - gBattle_BG1_X = 256; - gBattle_BG1_Y = 0; - } - else - { - gBattle_BG0_X = 256; - gBattle_BG0_Y = 0; - gBattle_BG1_X = 0; - gBattle_BG1_Y = 0; - } - - if (gUnknown_0203CD78->unk_10 == 0) - { - gBattle_BG2_X = 256; - gBattle_BG2_Y = 160; - trainerTournamentId = gUnknown_0860D080[gTasks[taskId2].data[1]]; - DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 8, trainerTournamentId); - } - else - { - gBattle_BG2_X = 256; - gBattle_BG2_Y = 0; - matchNo = gUnknown_0860D15C[(gTasks[taskId2].data[1] * 4) + (gUnknown_0203CD78->unk_10 - 1)]; - DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 8, matchNo); - } - - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) - { - if (i < 2) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollLeft; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; - } - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollLeft; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - } - } - } - for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (i < 10) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollLeft; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; - } - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollLeft; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - } - } - } - - gTasks[taskId].data[0] = 6; - gTasks[taskId].data[5] = 0; - break; - case 7: - if (gTasks[taskId].data[2]) - { - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - gBattle_BG1_X = 256; - gBattle_BG1_Y = 0; - } - else - { - gBattle_BG0_X = 256; - gBattle_BG0_Y = 0; - gBattle_BG1_X = 0; - gBattle_BG1_Y = 0; - } - - if (gUnknown_0203CD78->unk_10 == 0) - { - gBattle_BG2_X = 256; - gBattle_BG2_Y = 160; - trainerTournamentId = gUnknown_0203CD78->unk_11[0]; - DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 8, trainerTournamentId); - } - else - { - gBattle_BG2_X = 0; - gBattle_BG2_Y = 160; - matchNo = gTasks[taskId2].data[1] - 16; - DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 8, matchNo); - } - - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) - { - if (i < 2) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollLeft; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; - } - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollLeft; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - } - } - } - for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (i < 10) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollLeft; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; - } - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollLeft; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - } - } - } - - gTasks[taskId].data[0] = 6; - gTasks[taskId].data[5] = 0; - break; - case 4: - if (gTasks[taskId].data[2]) - { - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - gBattle_BG1_X = -256; - gBattle_BG1_Y = 0; - } - else - { - gBattle_BG0_X = -256; - gBattle_BG0_Y = 0; - gBattle_BG1_X = 0; - gBattle_BG1_Y = 0; - } - - if (gUnknown_0203CD78->unk_10 == 1) - { - gBattle_BG2_X = 0; - gBattle_BG2_Y = 160; - } - else - { - gBattle_BG2_X = 0; - gBattle_BG2_Y = 0; - } - matchNo = gUnknown_0860D15C[(gUnknown_0203CD78->unk_10 - 1) + (gTasks[taskId2].data[1] * 4)]; - DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 2, matchNo); - - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) - { - if (i < 2) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollRight; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; - } - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollRight; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - } - } - } - for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (i < 10) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollRight; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; - } - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollRight; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - } - } - } - - gTasks[taskId].data[0] = 7; - gTasks[taskId].data[5] = 0; - break; - case 8: - if (gTasks[taskId].data[2]) - { - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - gBattle_BG1_X = -256; - gBattle_BG1_Y = 0; - } - else - { - gBattle_BG0_X = -256; - gBattle_BG0_Y = 0; - gBattle_BG1_X = 0; - gBattle_BG1_Y = 0; - } - - if (gUnknown_0203CD78->unk_10 == 2) - { - gBattle_BG2_X = 256; - gBattle_BG2_Y = 160; - trainerTournamentId = gUnknown_0203CD78->unk_11[1]; - DisplayTrainerInfoOnCard(gTasks[taskId].data[2] | 2, trainerTournamentId); - } - else - { - gBattle_BG2_X = 0; - gBattle_BG2_Y = 160; - matchNo = gTasks[taskId2].data[1] - 16; - DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 2, matchNo); - } - - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) - { - if (i < 2) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollRight; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; - } - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollRight; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2] ^ 1; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - } - } - } - for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (i < 10) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_TrainerIconCardScrollRight; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - gSprites[gUnknown_0203CD78->arr[i]].data[3] = gUnknown_0203CD78->arr[i]; - } - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - { - gSprites[gUnknown_0203CD78->arr[i]].callback = SpriteCb_MonIconCardScrollRight; - gSprites[gUnknown_0203CD78->arr[i]].data[0] = gTasks[taskId].data[2]; - gSprites[gUnknown_0203CD78->arr[i]].data[1] = 0; - gSprites[gUnknown_0203CD78->arr[i]].data[2] = i; - } - } - } - - gTasks[taskId].data[0] = 7; - gTasks[taskId].data[5] = 0; - break; - } - break; - case 4: - if (++gTasks[taskId].data[5] != 41) - { - gBattle_BG0_Y -= 4; - gBattle_BG1_Y -= 4; - gBattle_BG2_Y -= 4; - } - else - { - gTasks[taskId].data[0] = 2; - } - break; - case 5: - if (++gTasks[taskId].data[5] != 41) - { - gBattle_BG0_Y += 4; - gBattle_BG1_Y += 4; - gBattle_BG2_Y += 4; - } - else - { - gTasks[taskId].data[0] = 2; - } - break; - case 6: - if (++gTasks[taskId].data[5] != 65) - { - gBattle_BG0_X -= 4; - gBattle_BG1_X -= 4; - gBattle_BG2_X -= 4; - } - else - { - gTasks[taskId].data[0] = 2; - } - break; - case 7: - if (++gTasks[taskId].data[5] != 65) - { - gBattle_BG0_X += 4; - gBattle_BG1_X += 4; - gBattle_BG2_X += 4; - } - else - { - gTasks[taskId].data[0] = 2; - } - break; - case 8: - if (!gPaletteFade.active) - { - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) - { - if (i < 2) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - FreeAndDestroyTrainerPicSprite(gUnknown_0203CD78->arr[i]); - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - sub_80D2EF8(&gSprites[gUnknown_0203CD78->arr[i]]); - } - } - for (i = DOME_TOURNAMENT_TRAINERS_COUNT / 2; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (i < 10) - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - FreeAndDestroyTrainerPicSprite(gUnknown_0203CD78->arr[i]); - } - else - { - if (gUnknown_0203CD78->arr[i] != 0xFF) - sub_80D2EF8(&gSprites[gUnknown_0203CD78->arr[i]]); - } - } - - FreeMonIconPalettes(); - FREE_AND_SET_NULL(gUnknown_0203CD78); - FreeAllWindowBuffers(); - if (r9 == 0) - { - SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); - } - else - { - i = CreateTask(sub_8194220, 0); - gTasks[i].data[0] = 0; - gTasks[i].data[1] = 0; - gTasks[i].data[2] = 3; - gTasks[i].data[3] = gTasks[taskId].data[4]; - gTasks[i].data[4] = gTasks[taskId2].data[6]; - } - DestroyTask(taskId); - } - break; - } -} - -u8 sub_819221C(u8 taskId) -{ - u8 retVal = 0; - s32 taskId2 = gTasks[taskId].data[4]; - s32 r5 = gTasks[taskId2].data[1]; - u8 r10 = gUnknown_0860D080[r5]; - u16 roundId = gSaveBlock2Ptr->frontier.field_CB2; - - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - retVal = 9; - - if (gTasks[taskId].data[3] == 0) - return retVal; - - if (gTasks[taskId].data[3] == 1) - { - if (gMain.newKeys & DPAD_UP && gUnknown_0203CD78->unk_10 == 0) - { - if (r5 == 0) - r5 = 15; - else - r5--; - retVal = 1; - } - else if (gMain.newKeys & DPAD_DOWN && gUnknown_0203CD78->unk_10 == 0) - { - if (r5 == 15) - r5 = 0; - else - r5++; - retVal = 2; - } - else if (gMain.newKeys & DPAD_LEFT && gUnknown_0203CD78->unk_10 != 0) - { - gUnknown_0203CD78->unk_10--; - retVal = 3; - } - else if (gMain.newKeys & DPAD_RIGHT) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[r10].isEliminated && gUnknown_0203CD78->unk_10 - 1 < gSaveBlock2Ptr->frontier.domeTrainers[r10].eliminatedAt) - { - gUnknown_0203CD78->unk_10++; - retVal = 4; - } - if (!gSaveBlock2Ptr->frontier.domeTrainers[r10].isEliminated && gUnknown_0203CD78->unk_10 - 1 < roundId) - { - gUnknown_0203CD78->unk_10++; - retVal = 4; - } - } - - if (retVal == 9) - { - if (gUnknown_0203CD78->unk_10 != 0) - gTasks[taskId2].data[1] = gUnknown_0860D1A0[r5 / 2][gUnknown_0203CD78->unk_10 - 1]; - else - gTasks[taskId2].data[1] = r5; - } - } - else - { - if (gMain.newKeys & DPAD_UP && gUnknown_0203CD78->unk_10 == 1) - { - if (r5 == 16) - r5 = gUnknown_0860D19C[roundId]; - else - r5--; - retVal = 5; - } - else if (gMain.newKeys & DPAD_DOWN && gUnknown_0203CD78->unk_10 == 1) - { - if (r5 == gUnknown_0860D19C[roundId]) - r5 = 16; - else - r5++; - retVal = 6; - } - else if (gMain.newKeys & DPAD_LEFT && gUnknown_0203CD78->unk_10 != 0) - { - retVal = 7; - gUnknown_0203CD78->unk_10--; - } - else if (gMain.newKeys & DPAD_RIGHT && (gUnknown_0203CD78->unk_10 == 0 || gUnknown_0203CD78->unk_10 == 1)) - { - retVal = 8; - gUnknown_0203CD78->unk_10++; - } - - if (retVal == 9) - { - if (gUnknown_0203CD78->unk_10 == 0) - gTasks[taskId2].data[1] = gUnknown_0860D1C0[gUnknown_0203CD78->unk_11[0]]; - else if (gUnknown_0203CD78->unk_10 == 2) - gTasks[taskId2].data[1] = gUnknown_0860D1C0[gUnknown_0203CD78->unk_11[1]]; - else - gTasks[taskId2].data[1] = r5; - } - } - - if (retVal != 0 && retVal != 9) - { - PlaySE(SE_SELECT); - gTasks[taskId2].data[1] = r5; - gTasks[taskId].data[2] ^= 1; - } - - return retVal; -} - -static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) -{ - struct TextSubPrinter textPrinter; - s32 i, j, k; - s32 trainerId = 0; - u8 nature = 0; - s32 arrId = 0; - s32 windowId = 0; - s32 x = 0, y = 0; - u8 palSlot = 0; - s16 *allocatedArray = AllocZeroed(sizeof(s16) * 18); - trainerId = gSaveBlock2Ptr->frontier.domeTrainers[trainerTournamentId].trainerId; - - if (flags & 1) - arrId = 8, windowId = 9, palSlot = 2; - if (flags & 2) - x = 256; - if (flags & 4) - y = 160; - if (flags & 8) - x = -256; - if (flags & 0x10) - y = -160; - - if (trainerId == TRAINER_PLAYER) - gUnknown_0203CD78->arr[arrId] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF); - else if (trainerId == TRAINER_FRONTIER_BRAIN) - gUnknown_0203CD78->arr[arrId] = CreateTrainerPicSprite(GetDomeBrainTrainerPicId(), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF); - else - gUnknown_0203CD78->arr[arrId] = CreateTrainerPicSprite(GetFrontierTrainerFrontSpriteId(trainerId), TRUE, x + 48, y + 64, palSlot + 12, 0xFFFF); - - if (flags & 0x1E) - gSprites[gUnknown_0203CD78->arr[arrId]].invisible = 1; - - for (i = 0; i < 3; i++) - { - if (trainerId == TRAINER_PLAYER) - { - gUnknown_0203CD78->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i], - SpriteCb_MonIcon, - x | gUnknown_0860D340[i], - y + gUnknown_0860D343[i], - 0, 0, TRUE); - gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].oam.priority = 0; - } - else if (trainerId == TRAINER_FRONTIER_BRAIN) - { - gUnknown_0203CD78->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i], - SpriteCb_MonIcon, - x | gUnknown_0860D340[i], - y + gUnknown_0860D343[i], - 0, 0, TRUE); - gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].oam.priority = 0; - } - else - { - gUnknown_0203CD78->arr[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].species, - SpriteCb_MonIcon, - x | gUnknown_0860D340[i], - y + gUnknown_0860D343[i], - 0, 0, TRUE); - gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].oam.priority = 0; - } - - if (flags & 0x1E) - gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].invisible = 1; - } - textPrinter.fontId = 2; - textPrinter.x = 0; - textPrinter.y = 0; - textPrinter.currentX = textPrinter.x; - textPrinter.currentY = textPrinter.y; - textPrinter.letterSpacing = 2; - textPrinter.lineSpacing = 0; - textPrinter.fontColor_l = 0; - textPrinter.fgColor = 14; - textPrinter.bgColor = 0; - textPrinter.shadowColor = 13; - - i = 0; - if (trainerId == TRAINER_PLAYER) - j = gFacilityClassToTrainerClass[FACILITY_CLASS_PKMN_TRAINER_BRENDAN]; - else if (trainerId == TRAINER_FRONTIER_BRAIN) - j = GetDomeBrainTrainerClass(); - else - j = GetFrontierOpponentClass(trainerId); - - for (;gTrainerClassNames[j][i] != EOS; i++) - gStringVar1[i] = gTrainerClassNames[j][i]; - gStringVar1[i] = CHAR_SPACE; - gStringVar1[i + 1] = EOS; - - if (trainerId == TRAINER_PLAYER) - { - StringAppend(gStringVar1, gSaveBlock2Ptr->playerName); - } - else if (trainerId == TRAINER_FRONTIER_BRAIN) - { - CopyDomeBrainTrainerName(gStringVar2); - StringAppend(gStringVar1, gStringVar2); - } - else - { - CopyDomeTrainerName(gStringVar2, trainerId); - StringAppend(gStringVar1, gStringVar2); - } - - textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, gStringVar1, 0xD0, textPrinter.letterSpacing); - textPrinter.current_text_offset = gStringVar1; - textPrinter.windowId = windowId; - PutWindowTilemap(windowId); - CopyWindowToVram(windowId, 3); - AddTextPrinter(&textPrinter, 0, NULL); - textPrinter.letterSpacing = 0; - - for (i = 0; i < 3; i++) - { - textPrinter.currentY = gUnknown_0860D346[i]; - if (trainerId == TRAINER_PLAYER) - textPrinter.current_text_offset = gSpeciesNames[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]]; - else if (trainerId == TRAINER_FRONTIER_BRAIN) - textPrinter.current_text_offset = gSpeciesNames[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]]; - else - textPrinter.current_text_offset = gSpeciesNames[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].species]; - - textPrinter.windowId = 1 + i + windowId; - if (i == 1) - textPrinter.currentX = 7; - else - textPrinter.currentX = 0; - - PutWindowTilemap(1 + i + windowId); - CopyWindowToVram(1 + i + windowId, 3); - AddTextPrinter(&textPrinter, 0, NULL); - } - - PutWindowTilemap(windowId + 4); - CopyWindowToVram(windowId + 4, 3); - if (trainerId == TRAINER_FRONTIER_BRAIN) - textPrinter.current_text_offset = gBattleDomePotentialPointers[16]; - else - textPrinter.current_text_offset = gBattleDomePotentialPointers[trainerTournamentId]; - - textPrinter.fontId = 1; - textPrinter.windowId = windowId + 4; - textPrinter.currentX = 0; - textPrinter.y = 4; - textPrinter.currentY = 4; - AddTextPrinter(&textPrinter, 0, NULL); - - for (i = 0; i < 3; i++) - { - for (j = 0; j < 4; j++) - { - for (k = 0; k < DOME_TOURNAMENT_TRAINERS_COUNT; k++) - { - if (trainerId == TRAINER_FRONTIER_BRAIN) - allocatedArray[k] += sMovePoints[sub_81A5060(i, j)][k]; - else if (trainerId == TRAINER_PLAYER) - allocatedArray[k] += sMovePoints[gSaveBlock2Ptr->frontier.field_EFC[i].moves[j]][k]; - else - allocatedArray[k] += sMovePoints[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].moves[j]][k]; - } - } - } - - for (i = 0; i < ARRAY_COUNT(gUnknown_0860C988); i++) - { - s32 r4 = 0; - - for (k = 0, j = 0; j < DOME_TOURNAMENT_TRAINERS_COUNT; j++) - { - if (gUnknown_0860C988[i][j] != 0) - { - r4++; - if (allocatedArray[j] != 0 && allocatedArray[j] >= gUnknown_0860C988[i][j]) - k++; - } - } - if (r4 == k) - break; - } - - textPrinter.current_text_offset = gBattleDomeOpponentStylePointers[i]; - textPrinter.y = 20; - textPrinter.currentY = 20; - AddTextPrinter(&textPrinter, 0, NULL); - - for (i = 0; i < 18; i++) - allocatedArray[i] = 0; - - if (trainerId == TRAINER_FRONTIER_BRAIN || trainerId == TRAINER_PLAYER) - { - for (i = 0; i < 3; i++) - { - for (j = 0; j < 6; j++) - { - if (trainerId == TRAINER_FRONTIER_BRAIN) - allocatedArray[j] = sub_81A50F0(i, j); - else - allocatedArray[j] = gSaveBlock2Ptr->frontier.field_EFC[i].evs[j]; - } - allocatedArray[6] += allocatedArray[0]; - for (j = 0; j < 5; j++) - { - if (trainerId == TRAINER_FRONTIER_BRAIN) - nature = sub_81A50B0(i); - else - nature = gSaveBlock2Ptr->frontier.field_EFC[i].nature; - - if (gNatureStatTable[nature][j] > 0) - { - allocatedArray[j + 7] += (allocatedArray[j + 1] * 110) / 100; - } - else if (gNatureStatTable[nature][j] < 0) - { - allocatedArray[j + 7] += (allocatedArray[j + 1] * 90) / 100; - allocatedArray[j + 13]++; - } - else - { - allocatedArray[j + 7] += allocatedArray[j + 1]; - } - } - } - for (j = 0, i = 0; i < 6; i++) - j += allocatedArray[6 + i]; - for (i = 0; i < 6; i++) - allocatedArray[i] = (allocatedArray[6 + i] * 100) / j; - } - else - { - for (i = 0; i < 3; i++) - { - s32 evBits = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].evSpread; - for (k = 0, j = 0; j < 6; j++) - { - allocatedArray[j] = 0; - if (evBits & 1) - k++; - evBits >>= 1; - } - k = 510 / k; - evBits = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].evSpread; - for (j = 0; j < 6; j++) - { - if (evBits & 1) - allocatedArray[j] = k; - evBits >>= 1; - } - - allocatedArray[6] += allocatedArray[0]; - for (j = 0; j < 5; j++) - { - nature = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].nature; - if (gNatureStatTable[nature][j] > 0) - { - allocatedArray[j + 7] += (allocatedArray[j + 1] * 110) / 100; - } - else if (gNatureStatTable[nature][j] < 0) - { - allocatedArray[j + 7] += (allocatedArray[j + 1] * 90) / 100; - allocatedArray[j + 13]++; - } - else - { - allocatedArray[j + 7] += allocatedArray[j + 1]; - } - } - } - for (j = 0, i = 0; i < 6; i++) - j += allocatedArray[i + 6]; - for (i = 0; i < 6; i++) - allocatedArray[i] = (allocatedArray[6 + i] * 100) / j; - } - - for (i = 0, j = 0, k = 0; k < 6; k++) - { - if (allocatedArray[k] > 29) - { - if (i == 2) - { - if (allocatedArray[6] < allocatedArray[k]) - { - if (allocatedArray[7] < allocatedArray[k]) - { - if (allocatedArray[6] < allocatedArray[7]) - { - allocatedArray[6] = allocatedArray[7]; - allocatedArray[7] = k; - } - else - { - allocatedArray[7] = k; - } - } - else - { - allocatedArray[6] = allocatedArray[7]; - allocatedArray[7] = k; - } - } - else - { - if (allocatedArray[7] < allocatedArray[k]) - allocatedArray[7] = k; - } - } - else - { - allocatedArray[i + 6] = k; - i++; - } - } - if (allocatedArray[k] == 0) - { - if (j == 2) - { - if (allocatedArray[k + 12] >= 2 - || ((allocatedArray[k + 12] == 1 && allocatedArray[12 + allocatedArray[8]] == 0 && allocatedArray[12 + allocatedArray[9]] == 0) - ) - ) - { - allocatedArray[8] = allocatedArray[9]; - allocatedArray[9] = k; - } - else if (allocatedArray[k + 12] == 1 && allocatedArray[12 + allocatedArray[8]] == 0) - { - allocatedArray[8] = allocatedArray[9]; - allocatedArray[9] = k; - } - else if (allocatedArray[k + 12] == 1 && allocatedArray[12 + allocatedArray[9]] == 0) - { - allocatedArray[9] = k; - } - } - else - { - allocatedArray[j + 8] = k; - j++; - } - } - } - - if (i == 2) - i = gUnknown_0860D349[allocatedArray[6]] + (allocatedArray[7] - (allocatedArray[6] + 1)); - else if (i == 1) - i = allocatedArray[6] + 15; - else if (j == 2) - i = gUnknown_0860D349[allocatedArray[8]] + (allocatedArray[9] - (allocatedArray[8] + 1)) + 21; - else if (j == 1) - i = allocatedArray[8] + 36; - else - i = 42; - - textPrinter.current_text_offset = gBattleDomeOpponentStatsPointers[i]; - textPrinter.y = 36; - textPrinter.currentY = 36; - AddTextPrinter(&textPrinter, 0, NULL); - Free(allocatedArray); -} - -s32 sub_8192F08(u8 arg0, u8 *arg1) -{ - s32 i; - u8 tournamentId; - s32 retVal = 0; - s32 count = 0; - - for (i = gUnknown_0860D3C4[arg0][0]; i < gUnknown_0860D3C4[arg0][0] + gUnknown_0860D3C4[arg0][1]; i++) - { - tournamentId = gUnknown_0860D3B4[i]; - if (!gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].isEliminated) - { - arg1[count] = tournamentId; - if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId == TRAINER_PLAYER) - StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); - else if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId == TRAINER_FRONTIER_BRAIN) - CopyDomeBrainTrainerName(gStringVar1); - else - CopyDomeTrainerName(gStringVar1, gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId); - count++; - } - } - - if (count == 2) - return 0; - - for (i = gUnknown_0860D3C4[arg0][0]; i < gUnknown_0860D3C4[arg0][0] + gUnknown_0860D3C4[arg0][1]; i++) - { - tournamentId = gUnknown_0860D3B4[i]; - if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].isEliminated - && gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].eliminatedAt >= gUnknown_0860D3C4[arg0][2]) - { - arg1[count] = tournamentId; - count++; - if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].eliminatedAt == gUnknown_0860D3C4[arg0][2]) - { - StringCopy(gStringVar2, gMoveNames[gSaveBlock2Ptr->frontier.field_EC0[tournamentId]]); - retVal = gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].unk3 * 2; - if (gSaveBlock2Ptr->frontier.field_EC0[tournamentId] == 0 && gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].unk3 == 0) - retVal = 4; - } - else - { - if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId == TRAINER_PLAYER) - StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); - else if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId == TRAINER_FRONTIER_BRAIN) - CopyDomeBrainTrainerName(gStringVar1); - else - CopyDomeTrainerName(gStringVar1, gSaveBlock2Ptr->frontier.domeTrainers[tournamentId].trainerId); - } - } - - if (count == 2) - break; - } - - if (arg0 == 14) - return retVal + 2; - else - return retVal + 1; -} - -static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) -{ - struct TextSubPrinter textPrinter; - s32 tournamentIds[2]; - s32 trainerIds[2]; - bool32 lost[2]; - s32 i; - s32 winStringId = 0; - s32 arrId = 0; - s32 windowId = 0; - s32 x = 0, y = 0; - u8 palSlot = 0; - - if (flags & 1) - arrId = 8, windowId = 9, palSlot = 2; - if (flags & 2) - x = 256; - if (flags & 4) - y = 160; - if (flags & 8) - x = -256; - if (flags & 0x10) - y = -160; - - // Copy trainers information to handy arrays. - winStringId = sub_8192F08(matchNo, gUnknown_0203CD78->unk_11); - for (i = 0; i < 2; i++) - { - tournamentIds[i] = gUnknown_0203CD78->unk_11[i]; - trainerIds[i] = gSaveBlock2Ptr->frontier.domeTrainers[tournamentIds[i]].trainerId; - if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentIds[i]].eliminatedAt <= gUnknown_0860D3C4[matchNo][2] - && gSaveBlock2Ptr->frontier.domeTrainers[tournamentIds[i]].isEliminated) - lost[i] = TRUE; - else - lost[i] = FALSE; - } - - // Draw first trainer sprite. - if (trainerIds[0] == TRAINER_PLAYER) - gUnknown_0203CD78->arr[arrId] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), TRUE, x + 48, y + 88, palSlot + 12, 0xFFFF); - else if (trainerIds[0] == TRAINER_FRONTIER_BRAIN) - gUnknown_0203CD78->arr[arrId] = CreateTrainerPicSprite(GetDomeBrainTrainerPicId(), TRUE, x + 48, y + 88, palSlot + 12, 0xFFFF); - else - gUnknown_0203CD78->arr[arrId] = CreateTrainerPicSprite(GetFrontierTrainerFrontSpriteId(trainerIds[0]), TRUE, x + 48, y + 88, palSlot + 12, 0xFFFF); - - if (flags & 0x1E) - gSprites[gUnknown_0203CD78->arr[arrId]].invisible = 1; - if (lost[0]) - gSprites[gUnknown_0203CD78->arr[arrId]].oam.paletteNum = 3; - - // Draw second trainer sprite. - if (trainerIds[1] == TRAINER_PLAYER) - gUnknown_0203CD78->arr[1 + arrId] = CreateTrainerPicSprite(PlayerGenderToFrontTrainerPicId(gSaveBlock2Ptr->playerGender), TRUE, x + 192, y + 88, palSlot + 13, 0xFFFF); - else if (trainerIds[1] == TRAINER_FRONTIER_BRAIN) - gUnknown_0203CD78->arr[1 + arrId] = CreateTrainerPicSprite(GetDomeBrainTrainerPicId(), TRUE, x + 192, y + 88, palSlot + 13, 0xFFFF); - else - gUnknown_0203CD78->arr[1 + arrId] = CreateTrainerPicSprite(GetFrontierTrainerFrontSpriteId(trainerIds[1]), TRUE, x + 192, y + 88, palSlot + 13, 0xFFFF); - - if (flags & 0x1E) - gSprites[gUnknown_0203CD78->arr[1 + arrId]].invisible = 1; - if (lost[1]) - gSprites[gUnknown_0203CD78->arr[1 + arrId]].oam.paletteNum = 3; - - // Draw first trainer's pokemon icons. - for (i = 0; i < 3; i++) - { - if (trainerIds[0] == TRAINER_PLAYER) - { - gUnknown_0203CD78->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[0]][i], - SpriteCb_MonIcon, - x | gUnknown_0860D3A8[i], - y + gUnknown_0860D3AB[i], - 0, 0, TRUE); - gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].oam.priority = 0; - } - else if (trainerIds[0] == TRAINER_FRONTIER_BRAIN) - { - gUnknown_0203CD78->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[0]][i], - SpriteCb_MonIcon, - x | gUnknown_0860D3A8[i], - y + gUnknown_0860D3AB[i], - 0, 0, TRUE); - gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].oam.priority = 0; - } - else - { - gUnknown_0203CD78->arr[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[0]][i]].species, - SpriteCb_MonIcon, - x | gUnknown_0860D3A8[i], - y + gUnknown_0860D3AB[i], - 0, 0, TRUE); - gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].oam.priority = 0; - } - - if (flags & 0x1E) - gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].invisible = 1; - if (lost[0]) - { - gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].oam.paletteNum = 3; - gSprites[gUnknown_0203CD78->arr[2 + i + arrId]].sMonIconStill = TRUE; - } - } - - // Draw second trainer's pokemon icons. - for (i = 0; i < 3; i++) - { - if (trainerIds[1] == TRAINER_PLAYER) - { - gUnknown_0203CD78->arr[5 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[1]][i], - SpriteCb_MonIcon, - x | gUnknown_0860D3AE[i], - y + gUnknown_0860D3B1[i], - 0, 0, TRUE); - gSprites[gUnknown_0203CD78->arr[5 + i + arrId]].oam.priority = 0; - } - else if (trainerIds[1] == TRAINER_FRONTIER_BRAIN) - { - gUnknown_0203CD78->arr[5 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[1]][i], - SpriteCb_MonIcon, - x | gUnknown_0860D3AE[i], - y + gUnknown_0860D3B1[i], - 0, 0, TRUE); - gSprites[gUnknown_0203CD78->arr[5 + i + arrId]].oam.priority = 0; - } - else - { - gUnknown_0203CD78->arr[5 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[1]][i]].species, - SpriteCb_MonIcon, - x | gUnknown_0860D3AE[i], - y + gUnknown_0860D3B1[i], - 0, 0, TRUE); - gSprites[gUnknown_0203CD78->arr[5 + i + arrId]].oam.priority = 0; - } - - if (flags & 0x1E) - gSprites[gUnknown_0203CD78->arr[5 + i + arrId]].invisible = 1; - if (lost[1]) - { - gSprites[gUnknown_0203CD78->arr[5 + i + arrId]].oam.paletteNum = 3; - gSprites[gUnknown_0203CD78->arr[5 + i + arrId]].sMonIconStill = TRUE; - } - } - - // Print the win string (or 'Let the battle begin!' one). - textPrinter.x = 0; - textPrinter.y = 2; - textPrinter.currentX = textPrinter.x; - textPrinter.currentY = textPrinter.y; - textPrinter.letterSpacing = 0; - textPrinter.lineSpacing = 0; - textPrinter.fontColor_l = 0; - textPrinter.fgColor = 14; - textPrinter.bgColor = 0; - textPrinter.shadowColor = 13; - StringExpandPlaceholders(gStringVar4, gBattleDomeWinStringsPointers[winStringId]); - textPrinter.current_text_offset = gStringVar4; - textPrinter.windowId = windowId + 8; - textPrinter.fontId = 1; - PutWindowTilemap(windowId + 8); - CopyWindowToVram(windowId + 8, 3); - textPrinter.currentX = 0; - textPrinter.currentY = textPrinter.y = 0; - AddTextPrinter(&textPrinter, 0, NULL); - - // Print first trainer's name. - if (trainerIds[0] == TRAINER_PLAYER) - StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); - else if (trainerIds[0] == TRAINER_FRONTIER_BRAIN) - CopyDomeBrainTrainerName(gStringVar1); - else - CopyDomeTrainerName(gStringVar1, trainerIds[0]); - - textPrinter.fontId = 2; - textPrinter.letterSpacing = 2; - textPrinter.current_text_offset = gStringVar1; - textPrinter.windowId = windowId + 6; - textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.current_text_offset, 0x40, textPrinter.letterSpacing); - textPrinter.currentY = textPrinter.y = 2; - PutWindowTilemap(windowId + 6); - CopyWindowToVram(windowId + 6, 3); - AddTextPrinter(&textPrinter, 0, NULL); - - // Print second trainer's name. - if (trainerIds[1] == TRAINER_PLAYER) - StringCopy(gStringVar1, gSaveBlock2Ptr->playerName); - else if (trainerIds[1] == TRAINER_FRONTIER_BRAIN) - CopyDomeBrainTrainerName(gStringVar1); - else - CopyDomeTrainerName(gStringVar1, trainerIds[1]); - - textPrinter.current_text_offset = gStringVar1; - textPrinter.windowId = windowId + 7; - textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.current_text_offset, 0x40, textPrinter.letterSpacing); - textPrinter.currentY = textPrinter.y = 2; - PutWindowTilemap(windowId + 7); - CopyWindowToVram(windowId + 7, 3); - AddTextPrinter(&textPrinter, 0, NULL); - - // Print match number. - textPrinter.letterSpacing = 0; - textPrinter.current_text_offset = gBattleDomeMatchNumberPointers[matchNo]; - textPrinter.windowId = windowId + 5; - textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.current_text_offset, 0xA0, textPrinter.letterSpacing); - textPrinter.currentY = textPrinter.y = 2; - PutWindowTilemap(windowId + 5); - CopyWindowToVram(windowId + 5, 3); - AddTextPrinter(&textPrinter, 0, NULL); -} - -void sub_81938A4(void) -{ - u8 taskId = CreateTask(sub_8194220, 0); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 2; - gTasks[taskId].data[4] = 0; - SetMainCallback2(CB2_BattleDome); -} - -void sub_81938E0(void) -{ - u8 taskId; - - sub_8194D48(); - gSaveBlock2Ptr->frontier.chosenLvl = gSaveBlock2Ptr->frontier.field_D0A - 1; - gSaveBlock2Ptr->frontier.field_CB2 = 3; - taskId = CreateTask(sub_8194220, 0); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 2; - gTasks[taskId].data[4] = 1; - SetMainCallback2(CB2_BattleDome); -} - -void sub_819395C(u8 taskId) -{ - u8 newTaskId = 0; - s32 spriteId = gTasks[taskId].data[1]; - - switch (gTasks[taskId].data[0]) - { - case 0: - if (!gPaletteFade.active) - { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); - gTasks[taskId].data[0] = 1; - StartSpriteAnim(&gSprites[spriteId], 1); - } - break; - case 1: - if (!gPaletteFade.active) - gTasks[taskId].data[0] = 2; - break; - case 2: - switch (sub_8193BDC(taskId)) - { - case 0: - default: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); - gTasks[taskId].data[0] = 7; - break; - case 1: - break; - case 2: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); - gTasks[taskId].data[0] = 3; - break; - case 3: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); - gTasks[taskId].data[0] = 5; - break; - } - break; - case 3: - if (!gPaletteFade.active) - { - FreeAllWindowBuffers(); - ScanlineEffect_Stop(); - FREE_AND_SET_NULL(gUnknown_0203CD7C); - newTaskId = CreateTask(sub_8190400, 0); - gTasks[newTaskId].data[0] = 0; - gTasks[newTaskId].data[1] = gUnknown_0860D080[spriteId]; - gTasks[newTaskId].data[2] = 1; - gTasks[newTaskId].data[3] = taskId; - - gTasks[taskId].data[0] = 4; - gUnknown_0203CD78->unk_10 = 0; - } - break; - case 4: - break; - case 5: - if (!gPaletteFade.active) - { - FreeAllWindowBuffers(); - ScanlineEffect_Stop(); - FREE_AND_SET_NULL(gUnknown_0203CD7C); - newTaskId = CreateTask(sub_8190400, 0); - gTasks[newTaskId].data[0] = 0; - gTasks[newTaskId].data[1] = spriteId - 16; - gTasks[newTaskId].data[2] = 2; - gTasks[newTaskId].data[3] = taskId; - - gTasks[taskId].data[0] = 6; - } - break; - case 6: - break; - case 7: - if (!gPaletteFade.active) - { - FreeAllWindowBuffers(); - ScanlineEffect_Stop(); - FREE_AND_SET_NULL(gUnknown_0203CD7C); - SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); - DestroyTask(gTasks[taskId].data[7]); - DestroyTask(taskId); - } - break; - } -} - -u8 sub_8193BDC(u8 taskId) -{ - u8 retVal = 1; - s32 arrId = 4; - s32 spriteId = gTasks[taskId].data[1]; - s32 roundId = gSaveBlock2Ptr->frontier.field_CB2; - - if (gMain.newKeys == B_BUTTON || (gMain.newKeys & A_BUTTON && spriteId == 31)) - { - PlaySE(SE_SELECT); - retVal = 0; - } - else if (gMain.newKeys & A_BUTTON) - { - if (spriteId < 16) - { - PlaySE(SE_SELECT); - retVal = 2; - } - else - { - PlaySE(SE_SELECT); - retVal = 3; - } - } - else - { - if (gMain.newKeys == DPAD_UP && gUnknown_0860CBF1[spriteId][roundId][0] != 0xFF) - arrId = 0; - else if (gMain.newKeys == DPAD_DOWN && gUnknown_0860CBF1[spriteId][roundId][1] != 0xFF) - arrId = 1; - else if (gMain.newKeys == DPAD_LEFT && gUnknown_0860CBF1[spriteId][roundId][2] != 0xFF) - arrId = 2; - else if (gMain.newKeys == DPAD_RIGHT && gUnknown_0860CBF1[spriteId][roundId][3] != 0xFF) - arrId = 3; - } - - if (arrId != 4) - { - PlaySE(SE_SELECT); - StartSpriteAnim(&gSprites[spriteId], 0); - spriteId = gUnknown_0860CBF1[spriteId][roundId][arrId]; - StartSpriteAnim(&gSprites[spriteId], 1); - gTasks[taskId].data[1] = spriteId; - } - - return retVal; -} - -void sub_8193D40(void) -{ - u8 taskId = CreateTask(sub_8194220, 0); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 1; - gTasks[taskId].data[2] = 2; - gTasks[taskId].data[4] = 0; - SetMainCallback2(CB2_BattleDome); -} - -void sub_8193D7C(void) -{ - s32 i; - - if (gSpecialVar_0x8005 == 1) - { - gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(gTrainerBattleOpponent_A)].isEliminated = 1; - gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(gTrainerBattleOpponent_A)].eliminatedAt = gSaveBlock2Ptr->frontier.field_CB2; - gSaveBlock2Ptr->frontier.field_EC0[TrainerIdToTournamentId(gTrainerBattleOpponent_A)] = gBattleResults.lastUsedMovePlayer; - if (gSaveBlock2Ptr->frontier.field_CB2 < DOME_FINAL) - DecideRoundWinners(gSaveBlock2Ptr->frontier.field_CB2); - } - else - { - gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(TRAINER_PLAYER)].isEliminated = 1; - gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(TRAINER_PLAYER)].eliminatedAt = gSaveBlock2Ptr->frontier.field_CB2; - gSaveBlock2Ptr->frontier.field_EC0[TrainerIdToTournamentId(TRAINER_PLAYER)] = gBattleResults.lastUsedMoveOpponent; - if (gBattleOutcome == B_OUTCOME_FORFEITED || gSpecialVar_0x8005 == 9) - gSaveBlock2Ptr->frontier.domeTrainers[TrainerIdToTournamentId(TRAINER_PLAYER)].unk3 = 1; - for (i = gSaveBlock2Ptr->frontier.field_CB2; i < DOME_ROUNDS_COUNT; i++) - DecideRoundWinners(i); - } -} - -u16 GetWinningMove(s32 winnerTournamentId, s32 loserTournamentId, u8 roundId) -{ - s32 i, j, k; - s32 moveScores[4 * 3]; - u16 moveIds[4 * 3]; - u16 bestScore = 0; - u16 bestId = 0; - s32 movePower = 0; - GetFrontierEnemyMonLevel(); // Unused return variable. - - // Calc move points of all 4 moves for all 3 pokemon hitting all 3 target mons. - for (i = 0; i < 3; i++) - { - for (j = 0; j < 4; j++) - { - moveScores[i * 4 + j] = 0; - if (gSaveBlock2Ptr->frontier.domeTrainers[winnerTournamentId].trainerId == TRAINER_FRONTIER_BRAIN) - moveIds[i * 4 + j] = sub_81A5060(i, j); - else - moveIds[i * 4 + j] = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[winnerTournamentId][i]].moves[j]; - - movePower = gBattleMoves[moveIds[i * 4 + j]].power; - if (movePower == 0) - movePower = 40; - else if (movePower == 1) - movePower = 60; - else if (moveIds[i * 4 + j] == MOVE_SELF_DESTRUCT || moveIds[i * 4 + j] == MOVE_EXPLOSION) - movePower /= 2; - - for (k = 0; k < 3; k++) - { - u32 var = 0; - u32 targetSpecies = 0; - u32 targetAbility = 0; - do - { - var = Random32(); - } while (gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[loserTournamentId][k]].nature != GetNatureFromPersonality(var)); - - targetSpecies = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[loserTournamentId][k]].species; - if (var & 1) - targetAbility = gBaseStats[targetSpecies].ability2; - else - targetAbility = gBaseStats[targetSpecies].ability1; - - var = AI_TypeCalc(moveIds[i * 4 + j], targetSpecies, targetAbility); - if (var & MOVE_RESULT_NOT_VERY_EFFECTIVE && var & MOVE_RESULT_SUPER_EFFECTIVE) - moveScores[i * 4 + j] += movePower; - else if (var & MOVE_RESULT_NO_EFFECT) - moveScores[i * 4 + j] += 0; - else if (var & MOVE_RESULT_SUPER_EFFECTIVE) - moveScores[i * 4 + j] += movePower * 2; - else if (var & MOVE_RESULT_NOT_VERY_EFFECTIVE) - moveScores[i * 4 + j] += movePower / 2; - else - moveScores[i * 4 + j] += movePower; - } - - if (bestScore < moveScores[i * 4 + j]) - { - bestId = i * 4 + j; - bestScore = moveScores[i * 4 + j]; - } - else if (bestScore == moveScores[i * 4 + j]) - { - if (moveIds[bestId] < moveIds[i * 4 + j]) // Why not use (Random() & 1) instead of promoting moves with a higher id? - bestId = i * 4 + j; - } - } - } - - j = bestId; - goto LABEL; - while (j != 0) - { - for (j = 0, k = 0; k < 4 * 3; k++) - { - if (bestScore < moveScores[k]) - { - j = k; - bestScore = moveScores[k]; - } - else if (bestScore == moveScores[k] && moveIds[j] < moveIds[k]) - { - j = k; - } - } - if (i == roundId - 1) - break; - LABEL: - { - for (i = 0; i < roundId - 1; i++) - { - if (gSaveBlock2Ptr->frontier.field_EC0[sub_81953E8(winnerTournamentId, i)] == moveIds[j]) - break; - } - if (i == roundId - 1) - break; - - moveScores[j] = 0; - bestScore = 0; - j = 0; - for (k = 0; k < 4 * 3; k++) - j += moveScores[k]; - } - } - - if (moveScores[j] == 0) - j = bestId; - - return moveIds[j]; -} - -extern const struct BgTemplate gUnknown_0860CE74[4]; -extern const struct WindowTemplate gUnknown_0860CE94[]; -extern const u8 gUnknown_0860D411[][2]; -extern const struct SpriteTemplate gUnknown_0860CFA8; -extern const struct SpriteTemplate gUnknown_0860D008; -extern const struct SpriteTemplate gUnknown_0860CFD8; -extern const struct ScanlineEffectParams gUnknown_0860CF44; - -void sub_8194220(u8 taskId) -{ - s32 i; - struct TextSubPrinter textPrinter; - s32 r10 = gTasks[taskId].data[1]; - s32 r4 = gTasks[taskId].data[2]; - - switch (gTasks[taskId].data[0]) - { - case 0: - SetHBlankCallback(NULL); - SetVBlankCallback(NULL); - EnableInterrupts(INTR_FLAG_HBLANK | INTR_FLAG_VBLANK); - CpuFill32(0, (void *)VRAM, VRAM_SIZE); - ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_0860CE74, ARRAY_COUNT(gUnknown_0860CE74)); - InitWindows(gUnknown_0860CE94); - DeactivateAllTextPrinters(); - gBattle_BG0_X = 0; - gBattle_BG0_Y = 0; - gBattle_BG1_X = 0; - gBattle_BG1_Y = 0; - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 0xB00, 0); - gTasks[taskId].data[0]++; - break; - case 1: - SetGpuReg(REG_OFFSET_BLDCNT, 0); - SetGpuReg(REG_OFFSET_BLDALPHA, 0); - SetGpuReg(REG_OFFSET_BLDY, 0); - SetGpuReg(REG_OFFSET_MOSAIC, 0); - SetGpuReg(REG_OFFSET_WIN0H, 0x5860); - SetGpuReg(REG_OFFSET_WIN0V, 0x9F); - SetGpuReg(REG_OFFSET_WIN1H, 0x9098); - SetGpuReg(REG_OFFSET_WIN1V, 0x9F); - SetGpuReg(REG_OFFSET_WININ, 0); - SetGpuReg(REG_OFFSET_WINOUT, 0x3F); - ResetPaletteFade(); - ResetSpriteData(); - FreeAllSpritePalettes(); - gTasks[taskId].data[0]++; - break; - case 2: - gUnknown_0203CD7C = AllocZeroed(0x800); - LZDecompressWram(gUnknown_08D83900, gUnknown_0203CD7C); - SetBgTilemapBuffer(1, gUnknown_0203CD7C); - CopyBgTilemapBufferToVram(1); - DecompressAndLoadBgGfxUsingHeap(1, gUnknown_08D82F10, 0x2000, 0, 0); - DecompressAndLoadBgGfxUsingHeap(2, gUnknown_08D834FC, 0x2000, 0, 0); - DecompressAndLoadBgGfxUsingHeap(2, gUnknown_08D83B2C, 0x2000, 0, 1); - DecompressAndLoadBgGfxUsingHeap(3, gUnknown_08D83C3C, 0x2000, 0, 1); - LoadCompressedPalette(gUnknown_08D85358, 0, 0x200); - LoadCompressedPalette(gUnknown_08D85444, 0x100, 0x200); - LoadCompressedPalette(gUnknown_08D85600, 0xF0, 0x20); - CpuFill32(0, gPlttBufferFaded, 0x400); - ShowBg(0); - ShowBg(1); - ShowBg(2); - ShowBg(3); - gTasks[taskId].data[0]++; - break; - case 3: - LoadCompressedObjectPic(gUnknown_0860CF50); - if (r10 == 0) - { - for (i = 0; i < (unsigned) 31; i++) - CreateSprite(&gUnknown_0860CFA8, gUnknown_0860D411[i][0], gUnknown_0860D411[i][1], 0); - if (gTasks[taskId].data[4]) - CreateSprite(&gUnknown_0860D008, 218, 12, 0); - else - CreateSprite(&gUnknown_0860CFD8, 218, 12, 0); - } - - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJ_1D_MAP); - gTasks[taskId].data[0]++; - break; - case 4: - textPrinter.fontId = 2; - textPrinter.current_text_offset = gText_BattleTourney; - textPrinter.windowId = 2; - textPrinter.x = 0; - textPrinter.y = 0; - textPrinter.letterSpacing = 2; - textPrinter.lineSpacing = 0; - textPrinter.currentX = GetStringCenterAlignXOffsetWithLetterSpacing(textPrinter.fontId, textPrinter.current_text_offset, 0x70, textPrinter.letterSpacing); - textPrinter.currentY = 1; - textPrinter.fontColor_l = 0; - textPrinter.fgColor = 14; - textPrinter.bgColor = 0; - textPrinter.shadowColor = 13; - AddTextPrinter(&textPrinter, 0, NULL); - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - s32 var, var2; - - CopyDomeTrainerName(gDisplayedStringBattle, gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); - if (r10 == 1) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt != 0) - { - var2 = gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt - 1; - sub_81948EC(i, var2); - } - } - else if (gSaveBlock2Ptr->frontier.field_CB2 != DOME_ROUND2) - { - sub_81948EC(i, gSaveBlock2Ptr->frontier.field_CB2 - 2); - } - } - else if (r10 == 0) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt != 0) - { - var2 = gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt - 1; - sub_81948EC(i, var2); - } - } - else if (gSaveBlock2Ptr->frontier.field_CB2 != DOME_ROUND1) - { - if (gTasks[taskId].data[4]) - var2 = gSaveBlock2Ptr->frontier.field_CB2; - else - var2 = gSaveBlock2Ptr->frontier.field_CB2 - 1; - sub_81948EC(i, var2); - } - } - - if (gTasks[taskId].data[4]) - var = gSaveBlock2Ptr->frontier.field_CB2; - else - var = gSaveBlock2Ptr->frontier.field_CB2 - 1; - - if ( ((r10 == 1 && gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt < gSaveBlock2Ptr->frontier.field_CB2 - 1) - || (r10 == 0 && gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt <= var)) - && gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == TRAINER_PLAYER) - { - textPrinter.fgColor = 3; - textPrinter.shadowColor = 4; - } - else - { - textPrinter.fgColor = 11; - textPrinter.shadowColor = 13; - } - } - else - { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == TRAINER_PLAYER) - { - textPrinter.fgColor = 3; - textPrinter.shadowColor = 4; - } - else - { - textPrinter.fgColor = 14; - textPrinter.shadowColor = 13; - } - } - - if (gUnknown_0860D3F1[i][0] == 0) - textPrinter.currentX = GetStringWidthDifference(textPrinter.fontId, gDisplayedStringBattle, 0x3D, textPrinter.letterSpacing); - else - textPrinter.currentX = 3; - textPrinter.current_text_offset = gDisplayedStringBattle; - textPrinter.windowId = gUnknown_0860D3F1[i][0]; - textPrinter.currentY = gUnknown_0860D3F1[i][1]; - AddTextPrinter(&textPrinter, 0, NULL); - } - gTasks[taskId].data[0]++; - break; - case 5: - PutWindowTilemap(0); - PutWindowTilemap(1); - PutWindowTilemap(2); - CopyWindowToVram(0, 3); - CopyWindowToVram(1, 3); - CopyWindowToVram(2, 3); - SetHBlankCallback(sub_8194BEC); - SetVBlankCallback(VblankCb1_BattleDome); - if (r4 == 2) - { - if (r10 == 0) - { - i = CreateTask(sub_819395C, 0); - gTasks[i].data[0] = r10; - gTasks[i].data[1] = r10; - gTasks[i].data[6] = gTasks[taskId].data[4]; - } - else - { - i = CreateTask(sub_8194950, 0); - gTasks[i].data[0] = 0; - } - } - else - { - i = gTasks[taskId].data[3]; - gTasks[i].data[0] = 0; - } - ScanlineEffect_Clear(); - for (i = 0; i < 91; i++) - { - gScanlineEffectRegBuffers[0][i] = 0x1F0A; - gScanlineEffectRegBuffers[1][i] = 0x1F0A; - } - for (i = 91; i < 160; i++) - { - asm(""::"r"(i)); - gScanlineEffectRegBuffers[0][i] = 0x1F09; - gScanlineEffectRegBuffers[1][i] = 0x1F09; - } - ScanlineEffect_SetParams(gUnknown_0860CF44); - DestroyTask(taskId); - break; - } -} - -struct UnkStruct_860DD10 -{ - u8 x; - u8 y; - u16 src; -}; - -extern struct UnkStruct_860DD10 *gUnknown_0860DD10[][4]; -extern const u8 gUnknown_0860DE10[][4]; - -void sub_81948EC(u8 tournamentId, u8 arg1) -{ - s32 i; - struct UnkStruct_860DD10 *structPtr = gUnknown_0860DD10[tournamentId][arg1]; - - for (i = 0; i < gUnknown_0860DE10[tournamentId][arg1]; i++) - CopyToBgTilemapBufferRect_ChangePalette(1, &structPtr[i].src, structPtr[i].x, structPtr[i].y, 1, 1, 0x11); - - CopyBgTilemapBufferToVram(1); -} - -void sub_8194950(u8 taskId) -{ - s32 i; - struct TextSubPrinter textPrinter; - - switch (gTasks[taskId].data[0]) - { - case 0: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); - gTasks[taskId].data[0] = 1; - break; - case 1: - if (!gPaletteFade.active) - { - gTasks[taskId].data[0] = 2; - gTasks[taskId].data[3] = 64; - textPrinter.fontId = 2; - textPrinter.x = 0; - textPrinter.y = 0; - textPrinter.letterSpacing = 2; - textPrinter.lineSpacing = 0; - textPrinter.fontColor_l = 0; - textPrinter.fgColor = 11; - textPrinter.bgColor = 0; - textPrinter.shadowColor = 13; - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - CopyDomeTrainerName(gDisplayedStringBattle, gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); - if (gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt == gSaveBlock2Ptr->frontier.field_CB2 - 1 - && gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated) - { - if (gUnknown_0860D3F1[i][0] == 0) - textPrinter.currentX = GetStringWidthDifference(textPrinter.fontId, gDisplayedStringBattle, 0x3D, textPrinter.letterSpacing); - else - textPrinter.currentX = 3; - - textPrinter.current_text_offset = gDisplayedStringBattle; - textPrinter.windowId = gUnknown_0860D3F1[i][0]; - textPrinter.currentY = gUnknown_0860D3F1[i][1]; - AddTextPrinter(&textPrinter, 0, NULL); - } - if (!gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated) - { - s32 var = gSaveBlock2Ptr->frontier.field_CB2 - 1; - sub_81948EC(i, var); - } - } - } - break; - case 2: - if (--gTasks[taskId].data[3] == 0) - gTasks[taskId].data[0] = 3; - break; - case 3: - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); - gTasks[taskId].data[0] = 4; - } - break; - case 4: - if (!gPaletteFade.active) - { - SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); - DestroyTask(taskId); - } - break; - } -} - -static void CB2_BattleDome(void) -{ - AnimateSprites(); - BuildOamBuffer(); - RunTextPrinters(); - UpdatePaletteFade(); - RunTasks(); -} - -static void VblankCb0_BattleDome(void) -{ - ChangeBgX(3, 0x80, 1); - ChangeBgY(3, 0x80, 2); - SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_X); - SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_Y); - SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); - SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); - SetGpuReg(REG_OFFSET_BG2HOFS, gBattle_BG2_X); - SetGpuReg(REG_OFFSET_BG2VOFS, gBattle_BG2_Y); - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -#define SET_WIN0H_WIN1H(win0H, win1H) \ -{ \ - *(vu32*)(REG_ADDR_WIN0H) = ((win0H << 16) | (win1H)); \ -} - -void sub_8194BEC(void) -{ - register u32 vCount asm("r0") = REG_VCOUNT; - register u32 vCount_ asm("r1") = vCount; - if (vCount > 41) - { - if (vCount < 50) - { - REG_WININ = 0x3B3B; - SET_WIN0H_WIN1H(0x989B, 0x5558); - return; - } - else if (vCount > 57) - { - if (vCount < 75) - { - REG_WININ = 0x3B3B; - SET_WIN0H_WIN1H(0x9098, 0x5860); - return; - } - else if (vCount < 82) - { - REG_WININ = 0x3B3B; - SET_WIN0H_WIN1H(0x989B, 0x5558); - return; - } - else if (vCount > 94) - { - if (vCount < 103) - { - REG_WININ = 0x3737; - SET_WIN0H_WIN1H(0x989B, 0x5558); - return; - } - else if (vCount < 119) - { - REG_WININ = 0x3737; - SET_WIN0H_WIN1H(0x9098, 0x5860); - return; - } - else if (vCount > 126) - { - if (vCount_ < 135) - { - REG_WININ = 0x3737; - SET_WIN0H_WIN1H(0x989B, 0x5558); - return; - } - } - } - } - } - - REG_WININ = 0x3F3F; - SET_WIN0H_WIN1H(0, 0); -} - -static void VblankCb1_BattleDome(void) -{ - SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_X); - SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_Y); - SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); - SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); - ChangeBgY(2, 0x80, 2); - ChangeBgY(3, 0x80, 1); - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); - ScanlineEffect_InitHBlankDmaTransfer(); -} - -void sub_8194D48(void) -{ - gFacilityTrainerMons = gBattleFrontierMons; - gFacilityTrainers = gBattleFrontierTrainers; -} - -void sub_8194D68(void) -{ - s32 i, moveSlot; - - for (i = 0; i < 2; i++) - { - s32 playerMonId = gSaveBlock2Ptr->frontier.field_CAA[gUnknown_0203CEF8[i] - 1] - 1; - s32 count; - - for (moveSlot = 0; moveSlot < 4; moveSlot++) - { - count = 0; - while (count < 4) - { - if (GetMonData(&gSaveBlock1Ptr->playerParty[playerMonId], MON_DATA_MOVE1 + count, NULL) == GetMonData(&gPlayerParty[i], MON_DATA_MOVE1 + moveSlot, NULL)) - break; - count++; - } - if (count == 4) - SetMonMoveSlot(&gPlayerParty[i], MOVE_SKETCH, moveSlot); - } - - gSaveBlock1Ptr->playerParty[playerMonId] = gPlayerParty[i]; - } -} - -void sub_8194E44(void) -{ - s32 i; - - for (i = 0; i < 2; i++) - { - s32 playerMonId = gSaveBlock2Ptr->frontier.field_CAA[gUnknown_0203CEF8[i] - 1] - 1; - u16 item = GetMonData(&gSaveBlock1Ptr->playerParty[playerMonId], MON_DATA_HELD_ITEM, NULL); - SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &item); - } -} - -void sub_8194EB4(void) -{ - sub_80F94E8(); -} - -void sub_8194EC0(void) -{ - if (TrainerIdToTournamentId(gTrainerBattleOpponent_A) > TrainerIdToTournamentId(TRAINER_PLAYER)) - gSpecialVar_Result = 1; - else - gSpecialVar_Result = 2; -} - -void sub_8194EF8(void) -{ - s32 i; - - sub_8194D48(); - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (!gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated) - break; - } - CopyDomeTrainerName(gStringVar1, gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); -} - -void sub_8194F58(void) -{ - s32 i, j, k; - s32 monLevel; - s32 species[3]; - s32 monTypesBits; - s32 trainerId; - s32 monTournamentId; - u8 lvlMode; - u16 *statSums; - s32 *statValues; - u8 ivs = 0; - - species[0] = 0; - species[1] = 0; - species[2] = 0; - if ((gSaveBlock2Ptr->frontier.field_D0A != -gSaveBlock2Ptr->frontier.field_D0B) && gSaveBlock2Ptr->frontier.field_CA8 != 1) - return; - - statSums = AllocZeroed(sizeof(u16) * DOME_TOURNAMENT_TRAINERS_COUNT); - statValues = AllocZeroed(sizeof(s32) * 6); - lvlMode = gSaveBlock2Ptr->frontier.chosenLvl; - gSaveBlock2Ptr->frontier.chosenLvl = 0; - // This one, I'd like to call a 'C fakematching'. - { - u8 one; - gSaveBlock2Ptr->frontier.field_D0A = (one = 1); - gSaveBlock2Ptr->frontier.field_D0B = one; - } - - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - do - { - if (i < 5) - trainerId = Random() % 10; - else if (i < 15) - trainerId = Random() % 20 + 10; - else - trainerId = Random() % 10 + 30; - - for (j = 0; j < i; j++) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId == trainerId) - break; - } - } while (j != i); - - gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId = trainerId; - for (j = 0; j < 3; j++) - { - // Make sure the mon is valid. - do - { - monTournamentId = RandomizeFacilityTrainerMonId(trainerId); - for (k = 0; k < j; k++) - { - s32 checkingMonId = gSaveBlock2Ptr->frontier.domeMonId[i][k]; - if (checkingMonId == monTournamentId - || species[0] == gFacilityTrainerMons[monTournamentId].species - || species[1] == gFacilityTrainerMons[monTournamentId].species - || gFacilityTrainerMons[checkingMonId].itemTableId == gFacilityTrainerMons[monTournamentId].itemTableId) - break; - } - } while (k != j); - - gSaveBlock2Ptr->frontier.domeMonId[i][j] = monTournamentId; - species[j] = gFacilityTrainerMons[monTournamentId].species; - } - gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated = 0; - gSaveBlock2Ptr->frontier.domeTrainers[i].eliminatedAt = 0; - gSaveBlock2Ptr->frontier.domeTrainers[i].unk3 = 0; - } - - monLevel = 50; - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - monTypesBits = 0; - statSums[i] = 0; - ivs = GetDomeTrainerMonIvs(gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); - for (j = 0; j < 3; j++) - { - CalcDomeMonStats(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species, - monLevel, ivs, - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].evSpread, - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].nature, - statValues); - - statSums[i] += statValues[STAT_ATK]; - statSums[i] += statValues[STAT_DEF]; - statSums[i] += statValues[STAT_SPATK]; - statSums[i] += statValues[STAT_SPDEF]; - statSums[i] += statValues[STAT_SPEED]; - statSums[i] += statValues[STAT_HP]; - monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species].type1]; - monTypesBits |= gBitTable[gBaseStats[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[i][j]].species].type2]; - } - - // Because GF hates temporary vars, trainerId acts like monTypesCount here. - for (trainerId = 0, j = 0; j < 32; j++) - { - if (monTypesBits & 1) - trainerId++; - monTypesBits >>= 1; - } - statSums[i] += (trainerId * monLevel) / 20; - } - - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT - 1; i++) - { - for (j = i + 1; j < DOME_TOURNAMENT_TRAINERS_COUNT; j++) - { - if (statSums[i] < statSums[j]) - { - SwapDomeTrainers(i, j, statSums); - } - else if (statSums[i] == statSums[j]) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId > gSaveBlock2Ptr->frontier.domeTrainers[j].trainerId) - SwapDomeTrainers(i, j, statSums); - } - } - } - - Free(statSums); - Free(statValues); - - for (i = 0; i < 4; i++) - DecideRoundWinners(i); - - gSaveBlock2Ptr->frontier.chosenLvl = lvlMode; -} - -static s32 TrainerIdToTournamentId(u16 trainerId) -{ - s32 i; - - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == trainerId) - break; - } - - return i; -} - -// The same as the above one, but has global scope. -s32 TrainerIdToDomeTournamentId(u16 trainerId) -{ - s32 i; - - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == trainerId) - break; - } - - return i; -} - -u8 sub_81953E8(u8 tournamentId, u8 arg1) -{ - u8 arr[2]; - sub_8192F08(gUnknown_0860D1A0[gUnknown_0860D1C0[tournamentId] / 2][arg1] - 16, arr); - if (tournamentId == arr[0]) - return arr[1]; - else - return arr[0]; -} - -void DecideRoundWinners(u8 roundId) -{ - s32 i; - s32 moveSlot, monId1, monId2; - s32 tournamentId1, tournamentId2; - s32 species; - s32 points1 = 0, points2 = 0; - - for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) - { - if (gSaveBlock2Ptr->frontier.domeTrainers[i].isEliminated || gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId == TRAINER_PLAYER) - continue; - - tournamentId1 = i; - tournamentId2 = TournamentIdOfOpponent(roundId, gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].trainerId); - // Frontier Brain always wins, check tournamentId1. - if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].trainerId == TRAINER_FRONTIER_BRAIN && tournamentId2 != 0xFF) - { - gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].isEliminated = 1; - gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].eliminatedAt = roundId; - gSaveBlock2Ptr->frontier.field_EC0[tournamentId2] = GetWinningMove(tournamentId1, tournamentId2, roundId); - } - // Frontier Brain always wins, check tournamentId2. - else if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].trainerId == TRAINER_FRONTIER_BRAIN && tournamentId1 != 0xFF) - { - gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].isEliminated = 1; - gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].eliminatedAt = roundId; - gSaveBlock2Ptr->frontier.field_EC0[tournamentId1] = GetWinningMove(tournamentId2, tournamentId1, roundId); - } - // Decide which one of two trainers wins! - else if (tournamentId2 != 0xFF) - { - // BUG: points1 and points2 are not cleared at the beginning of the loop resulting in not fair results. - - // Calculate points for both trainers. - for (monId1 = 0; monId1 < 3; monId1++) - { - for (moveSlot = 0; moveSlot < 4; moveSlot++) - { - for (monId2 = 0; monId2 < 3; monId2++) - { - points1 += sub_818FFC0(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId1][monId1]].moves[moveSlot], - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId2][monId2]].species, 2); - } - } - species = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId1][monId1]].species; - points1 += ( gBaseStats[species].baseHP - + gBaseStats[species].baseAttack - + gBaseStats[species].baseDefense - + gBaseStats[species].baseSpeed - + gBaseStats[species].baseSpAttack - + gBaseStats[species].baseSpDefense) / 10; - } - // Random part of the formula. - points1 += (Random() & 0x1F); - // Favor trainers with higher id; - points1 += tournamentId1; - - for (monId1 = 0; monId1 < 3; monId1++) - { - for (moveSlot = 0; moveSlot < 4; moveSlot++) - { - for (monId2 = 0; monId2 < 3; monId2++) - { - points2 += sub_818FFC0(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId2][monId1]].moves[moveSlot], - gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId1][monId2]].species, 2); - } - } - species = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId2][monId1]].species; - points2 += ( gBaseStats[species].baseHP - + gBaseStats[species].baseAttack - + gBaseStats[species].baseDefense - + gBaseStats[species].baseSpeed - + gBaseStats[species].baseSpAttack - + gBaseStats[species].baseSpDefense) / 10; - } - // Random part of the formula. - points2 += (Random() & 0x1F); - // Favor trainers with higher id; - points2 += tournamentId2; - - if (points1 > points2) - { - gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].isEliminated = 1; - gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].eliminatedAt = roundId; - gSaveBlock2Ptr->frontier.field_EC0[tournamentId2] = GetWinningMove(tournamentId1, tournamentId2, roundId); - } - else if (points1 < points2) - { - gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].isEliminated = 1; - gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].eliminatedAt = roundId; - gSaveBlock2Ptr->frontier.field_EC0[tournamentId1] = GetWinningMove(tournamentId2, tournamentId1, roundId); - } - // Points are the same, so we favor the one with the higher id. - else if (tournamentId1 > tournamentId2) - { - gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].isEliminated = 1; - gSaveBlock2Ptr->frontier.domeTrainers[tournamentId2].eliminatedAt = roundId; - gSaveBlock2Ptr->frontier.field_EC0[tournamentId2] = GetWinningMove(tournamentId1, tournamentId2, roundId); - } - else - { - gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].isEliminated = 1; - gSaveBlock2Ptr->frontier.domeTrainers[tournamentId1].eliminatedAt = roundId; - gSaveBlock2Ptr->frontier.field_EC0[tournamentId1] = GetWinningMove(tournamentId2, tournamentId1, roundId); - } - } - } -} - -void CopyDomeTrainerName(u8 *dst, u16 trainerId) -{ - s32 i = 0; - GetFrontierEnemyMonLevel(); // Unused return value. - - if (trainerId == TRAINER_FRONTIER_BRAIN) - { - CopyDomeBrainTrainerName(dst); - } - else - { - if (trainerId == TRAINER_PLAYER) - { - for (i = 0; i < OT_NAME_LENGTH; i++) - dst[i] = gSaveBlock2Ptr->playerName[i]; - } - else if (trainerId < 300) - { - for (i = 0; i < 7; i++) - dst[i] = gFacilityTrainers[trainerId].trainerName[i]; - } - dst[i] = EOS; - } -} - -u8 GetDomeBrainTrainerPicId(void) -{ - return gTrainers[TRAINER_TUCKER].trainerPic; -} - -u8 GetDomeBrainTrainerClass(void) -{ - return gTrainers[TRAINER_TUCKER].trainerClass; -} - -void CopyDomeBrainTrainerName(u8 *dst) -{ - s32 i; - - for (i = 0; i < 7; i++) - dst[i] = gTrainers[TRAINER_TUCKER].trainerName[i]; - dst[i] = EOS; -} diff --git a/src/battle_setup.c b/src/battle_setup.c index 2955a33fc..17ab20ccd 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -33,6 +33,7 @@ #include "field_weather.h" #include "gym_leader_rematch.h" #include "constants/map_types.h" +#include "constants/battle_frontier.h" enum { @@ -863,7 +864,7 @@ u8 sub_80B100C(s32 arg0) return sUnknown_0854FEA7[Random() % ARRAY_COUNT(sUnknown_0854FEA7)]; } - if (VarGet(VAR_0x40CE) != 3) + if (VarGet(VAR_FRONTIER_BATTLE_MODE) != FRONTIER_MODE_LINK_MULTIS) return sUnknown_0854FE98[Random() % ARRAY_COUNT(sUnknown_0854FE98)]; } else @@ -880,7 +881,7 @@ u8 sub_80B100C(s32 arg0) return sUnknown_0854FEA7[Random() % ARRAY_COUNT(sUnknown_0854FEA7)]; } - if (VarGet(VAR_0x40CE) != 3) + if (VarGet(VAR_FRONTIER_BATTLE_MODE) != FRONTIER_MODE_LINK_MULTIS) return sUnknown_0854FE98[Random() % ARRAY_COUNT(sUnknown_0854FE98)]; } diff --git a/src/bg.c b/src/bg.c index 2f4cdc856..7c55410b1 100644 --- a/src/bg.c +++ b/src/bg.c @@ -1001,7 +1001,7 @@ void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 wi } } -void CopyToBgTilemapBufferRect_ChangePalette(u8 bg, void *src, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette) +void CopyToBgTilemapBufferRect_ChangePalette(u8 bg, const void *src, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette) { CopyRectToBgTilemapBufferRect(bg, src, 0, 0, rectWidth, rectHeight, destX, destY, rectWidth, rectHeight, palette, 0, 0); } diff --git a/src/field_specials.c b/src/field_specials.c index e20ccf618..f5728c3a4 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -52,6 +52,7 @@ #include "constants/species.h" #include "constants/moves.h" #include "constants/vars.h" +#include "constants/battle_frontier.h" EWRAM_DATA bool8 gBikeCyclingChallenge = FALSE; EWRAM_DATA u8 gBikeCollisions = 0; @@ -1667,7 +1668,7 @@ bool8 InMultiBattleRoom(void) { if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(BATTLE_FRONTIER_BATTLE_TOWER_MULTI_BATTLE_ROOM) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(BATTLE_FRONTIER_BATTLE_TOWER_MULTI_BATTLE_ROOM) && - VarGet(VAR_0x40CE) == 2) + VarGet(VAR_FRONTIER_BATTLE_MODE) == FRONTIER_MODE_MULTIS) return TRUE; return FALSE; } @@ -2240,10 +2241,10 @@ void sub_813A080(void) }; u8 i; - u16 var = VarGet(VAR_0x40CE); - u8 chosenLevel = gSaveBlock2Ptr->frontier.chosenLvl; + u16 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; - if (var == 2 && !FlagGet(FLAG_0x152)) + if (battleMode == 2 && !FlagGet(FLAG_0x152)) { gSpecialVar_0x8005 = 5; gSpecialVar_0x8006 = 4; @@ -2252,7 +2253,7 @@ void sub_813A080(void) for (i = 0; i < 9; i++) { - if (gUnknown_085B2CDC[i] > gSaveBlock2Ptr->frontier.field_CE0[var][chosenLevel]) + if (gUnknown_085B2CDC[i] > gSaveBlock2Ptr->frontier.field_CE0[battleMode][lvlMode]) { gSpecialVar_0x8005 = 4; gSpecialVar_0x8006 = i + 5; @@ -3036,13 +3037,13 @@ void sub_813A878(u8 a0) { static const u16 gUnknown_085B3104[] = {0x0000, 0x0001, 0x0002, 0x0100, 0x0101, 0x0400, 0x0401, 0x0200, 0x0201, 0x0300, 0x0500, 0x0600}; - u16 var1 = VarGet(VAR_0x40CE); + u16 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); u16 var2 = VarGet(VAR_FRONTIER_GAMBLER_SET_FACILITY_F); - u16 var3 = VarGet(VAR_FRONTIER_FACILITY); + u16 frontierFacilityId = VarGet(VAR_FRONTIER_FACILITY); if (VarGet(VAR_FRONTIER_GAMBLER_PLACED_BET_F) == 1) { - if (gUnknown_085B3104[var2] == (var3 << 8) + var1) + if (gUnknown_085B3104[var2] == (frontierFacilityId << 8) + battleMode) { if (a0 != 0) { diff --git a/src/item.c b/src/item.c index c94f29910..22894bbff 100644 --- a/src/item.c +++ b/src/item.c @@ -845,8 +845,8 @@ u16 CountTotalItemQuantityInBag(u16 itemId) static bool8 CheckPyramidBagHasItem(u16 itemId, u16 count) { u8 i; - u16 *items = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.chosenLvl]; - u8 *quantities = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.chosenLvl]; + u16 *items = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode]; + u8 *quantities = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode]; for (i = 0; i < PYRAMID_BAG_ITEMS_COUNT; i++) { @@ -867,8 +867,8 @@ static bool8 CheckPyramidBagHasItem(u16 itemId, u16 count) static bool8 CheckPyramidBagHasSpace(u16 itemId, u16 count) { u8 i; - u16 *items = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.chosenLvl]; - u8 *quantities = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.chosenLvl]; + u16 *items = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode]; + u8 *quantities = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode]; for (i = 0; i < PYRAMID_BAG_ITEMS_COUNT; i++) { @@ -890,8 +890,8 @@ bool8 AddPyramidBagItem(u16 itemId, u16 count) { u16 i; - u16 *items = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.chosenLvl]; - u8 *quantities = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.chosenLvl]; + u16 *items = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode]; + u8 *quantities = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode]; u16 *newItems = Alloc(PYRAMID_BAG_ITEMS_COUNT * sizeof(u16)); u8 *newQuantities = Alloc(PYRAMID_BAG_ITEMS_COUNT * sizeof(u8)); @@ -963,8 +963,8 @@ bool8 RemovePyramidBagItem(u16 itemId, u16 count) { u16 i; - u16 *items = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.chosenLvl]; - u8 *quantities = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.chosenLvl]; + u16 *items = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode]; + u8 *quantities = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode]; i = gUnknown_0203CF30[3] + gUnknown_0203CF30[4]; if (items[i] == itemId && quantities[i] >= count) diff --git a/src/pokemon.c b/src/pokemon.c index 7dedc917f..5157853c1 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -13,6 +13,7 @@ #include "constants/hold_effects.h" #include "constants/battle_move_effects.h" #include "constants/songs.h" +#include "constants/battle_frontier.h" #include "string_util.h" #include "text.h" #include "link.h" @@ -1575,8 +1576,8 @@ void sub_8068338(struct Pokemon *mon, struct UnknownPokemonStruct *src, bool8 lv u8 language; u8 value; - if (gSaveBlock2Ptr->frontier.chosenLvl != 0) - level = BattleFrontierGetOpponentLvl(gSaveBlock2Ptr->frontier.chosenLvl); + if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50) + level = BattleFrontierGetOpponentLvl(gSaveBlock2Ptr->frontier.lvlMode); else if (lvl50) level = 50; else diff --git a/src/recorded_battle.c b/src/recorded_battle.c index 45b07ca7a..e19f3047f 100644 --- a/src/recorded_battle.c +++ b/src/recorded_battle.c @@ -1293,7 +1293,7 @@ static bool32 AllocTryCopyRecordedBattleSaveData(struct RecordedBattleSave *dst) static void CB2_RecordedBattleEnd(void) { - gSaveBlock2Ptr->frontier.chosenLvl = sUnknown_0203C7AD; + gSaveBlock2Ptr->frontier.lvlMode = sUnknown_0203C7AD; gBattleOutcome = 0; gBattleTypeFlags = 0; gTrainerBattleOpponent_A = 0; @@ -1353,7 +1353,7 @@ static void SetRecordedBattleVarsFromSave(struct RecordedBattleSave *src) gTrainerBattleOpponent_B = src->opponentB; gPartnerTrainerId = src->partnerId; gUnknown_0203C7B4 = src->field_4FA; - sUnknown_0203C7AD = gSaveBlock2Ptr->frontier.chosenLvl; + sUnknown_0203C7AD = gSaveBlock2Ptr->frontier.lvlMode; sFrontierFacility = src->field_4FD; sUnknown_0203C7AF = src->field_4FE; sBattleStyle = src->battleStyle; @@ -1375,7 +1375,7 @@ static void SetRecordedBattleVarsFromSave(struct RecordedBattleSave *src) sUnknown_0203CCDC[i] = src->field_50E[i]; } - gSaveBlock2Ptr->frontier.chosenLvl = src->field_4FC; + gSaveBlock2Ptr->frontier.lvlMode = src->field_4FC; for (i = 0; i < MAX_BATTLERS_COUNT; i++) { diff --git a/src/rom_8011DC0.c b/src/rom_8011DC0.c index 55e3fe32b..993dc0f4f 100644 --- a/src/rom_8011DC0.c +++ b/src/rom_8011DC0.c @@ -18,6 +18,7 @@ #include "constants/maps.h" #include "constants/species.h" #include "constants/rgb.h" +#include "constants/battle_frontier.h" #include "trade.h" #include "trainer_card.h" #include "overworld.h" @@ -468,7 +469,7 @@ void sub_8012780(u8 taskId) switch (data->state) { case 0: - if (gSpecialVar_0x8004 == 20 && gSaveBlock2Ptr->frontier.chosenLvl == 1) + if (gSpecialVar_0x8004 == 20 && gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_OPEN) gSpecialVar_0x8004++; gUnknown_02022C2C = gUnknown_082F00C4[gSpecialVar_0x8004]; gUnknown_02022C2D = gUnknown_082F00C4[gSpecialVar_0x8004] >> 8; @@ -1050,7 +1051,7 @@ void sub_80134E8(u8 taskId) switch (data->state) { case 0: - if (gSpecialVar_0x8004 == 20 && gSaveBlock2Ptr->frontier.chosenLvl == 1) + if (gSpecialVar_0x8004 == 20 && gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_OPEN) gSpecialVar_0x8004++; gUnknown_02022C2C = gUnknown_082F0530[gSpecialVar_0x8004]; sub_8010F84(gUnknown_02022C2C, 0, 0); -- cgit v1.2.3 From 0d8c5b613eda48e48d25615e710c34388072858c Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 25 Aug 2018 20:14:10 +0200 Subject: make battle dome compile --- src/field_message_box.c | 10 ++++++---- src/match_call.c | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/field_message_box.c b/src/field_message_box.c index 8ca291e33..7ed87e837 100755 --- a/src/field_message_box.c +++ b/src/field_message_box.c @@ -4,7 +4,9 @@ #include "string_util.h" #include "task.h" #include "text.h" -#include "battle_frontier_1.h" + +extern bool32 sub_8196094(void); +extern void sub_8196080(u8*); EWRAM_DATA u8 gUnknown_020375BC = 0; @@ -23,7 +25,7 @@ void sub_8098128(void) void sub_8098154(u8 taskId) { struct Task *task = &gTasks[taskId]; - + switch (task->data[0]) { case 0: @@ -61,12 +63,12 @@ bool8 ShowFieldMessage(u8 *str) return FALSE; textbox_fdecode_auto_and_task_add(str, 1); gUnknown_020375BC = 2; - return TRUE; + return TRUE; } void sub_8098214(u8 taskId) { - if (sub_8196094() == 0) + if (!sub_8196094()) { gUnknown_020375BC = 0; DestroyTask(taskId); diff --git a/src/match_call.c b/src/match_call.c index 99eb6d65a..2879881bf 100644 --- a/src/match_call.c +++ b/src/match_call.c @@ -5,9 +5,9 @@ #include "event_data.h" #include "string_util.h" #include "battle.h" -#include "battle_frontier_1.h" #include "gym_leader_rematch.h" +extern void sub_8197080(u8 *dest); extern const u8 gTrainerClassNames[][13]; // Static type declarations -- cgit v1.2.3 From 2b7c138cbe165cdfa0ad8f7044efc439d9888cd2 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 25 Aug 2018 21:04:12 +0200 Subject: Some labels --- src/battle_controller_opponent.c | 18 +++++++++--------- src/battle_main.c | 4 ++-- src/battle_script_commands.c | 4 ++-- 3 files changed, 13 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 1eaa9da18..6148587f8 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -1606,22 +1606,22 @@ static void OpponentHandleChoosePokemon(void) { s32 chosenMonId; - if (*(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) == 6) + if (*(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) == PARTY_SIZE) { chosenMonId = GetMostSuitableMonToSwitchInto(); - if (chosenMonId == 6) + if (chosenMonId == PARTY_SIZE) { - s32 bank1, bank2, firstId, lastId; + s32 battler1, battler2, firstId, lastId; if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) { - bank2 = bank1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + battler2 = battler1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); } else { - bank1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - bank2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); + battler1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + battler2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); } if (gBattleTypeFlags & (BATTLE_TYPE_TWO_OPPONENTS | BATTLE_TYPE_x800000)) @@ -1639,8 +1639,8 @@ static void OpponentHandleChoosePokemon(void) for (chosenMonId = firstId; chosenMonId < lastId; chosenMonId++) { if (GetMonData(&gEnemyParty[chosenMonId], MON_DATA_HP) != 0 - && chosenMonId != gBattlerPartyIndexes[bank1] - && chosenMonId != gBattlerPartyIndexes[bank2]) + && chosenMonId != gBattlerPartyIndexes[battler1] + && chosenMonId != gBattlerPartyIndexes[battler2]) { break; } @@ -1650,7 +1650,7 @@ static void OpponentHandleChoosePokemon(void) else { chosenMonId = *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler); - *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = 6; + *(gBattleStruct->AI_monToSwitchIntoId + gActiveBattler) = PARTY_SIZE; } diff --git a/src/battle_main.c b/src/battle_main.c index 86937f85f..9f9511c38 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -3929,7 +3929,7 @@ static void TryDoEventsBeforeFirstTurn(void) if (gBattleTypeFlags & BATTLE_TYPE_ARENA) { StopCryAndClearCrySongs(); - BattleScriptExecute(BattleScript_82DB8BE); + BattleScriptExecute(BattleScript_ArenaTurnBeginning); } } @@ -4019,7 +4019,7 @@ void BattleTurnPassed(void) if (gBattleTypeFlags & BATTLE_TYPE_PALACE) BattleScriptExecute(BattleScript_82DB881); else if (gBattleTypeFlags & BATTLE_TYPE_ARENA && gBattleStruct->field_DA == 0) - BattleScriptExecute(BattleScript_82DB8BE); + BattleScriptExecute(BattleScript_ArenaTurnBeginning); } u8 IsRunningFromBattleImpossible(void) diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index b13727a12..12a66df80 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6750,10 +6750,10 @@ static void atk76_various(void) } } break; - case 21: + case VARIOUS_VOLUME_DOWN: m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x55); break; - case 22: + case VARIOUS_VOLUME_UP: m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x100); break; case 23: -- cgit v1.2.3 From 69c20f18ac2ce196205c84b463b361403f23ccdd Mon Sep 17 00:00:00 2001 From: Slawter666 <38655737+Slawter666@users.noreply.github.com> Date: Sun, 26 Aug 2018 13:40:36 +0100 Subject: Convert battle dome data to C --- src/battle_dome.c | 1901 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 1858 insertions(+), 43 deletions(-) (limited to 'src') diff --git a/src/battle_dome.c b/src/battle_dome.c index 058d253ab..6d9584ea5 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -89,53 +89,11 @@ extern u16 gBattle_BG3_X; extern u16 gBattle_BG3_Y; extern const struct FacilityMon *gFacilityTrainerMons; -extern void (* const gUnknown_0860D090[])(void); -extern const u32 gUnknown_0860D0EC[][2]; -extern const u32 gUnknown_0860D0FC[][2]; extern const u16 gBattleFrontierHeldItems[]; -extern const u8 gUnknown_0860D10C[][4]; -extern const u8 gUnknown_0860D14C[]; -extern const struct BgTemplate gUnknown_0860CE84[4]; -extern const struct WindowTemplate gUnknown_0860CEB4[]; -extern const struct CompressedSpriteSheet gUnknown_0860CF50[]; -extern const struct SpriteTemplate gUnknown_0860D068; -extern const struct SpriteTemplate gUnknown_0860D050; -extern const u8 gUnknown_0860D080[]; -extern const u8 gUnknown_0860D15C[]; -extern const u8 gUnknown_0860D1A0[][4]; -extern const u8 gUnknown_0860D19C[]; -extern const u8 gUnknown_0860D349[]; -extern const u8 gUnknown_0860D1C0[]; -extern const u8 gUnknown_0860D343[]; -extern const u8 gUnknown_0860D340[]; -extern const u8 gUnknown_0860D346[]; -extern const u8 gUnknown_0860C988[31][16]; -extern const u8 gUnknown_0860D3F1[][2]; -extern const u8 gUnknown_0860D3C4[][3]; -extern const u8 gUnknown_0860D3B4[]; -extern const u8 gUnknown_0860D3A8[]; -extern const u8 gUnknown_0860D3AB[]; -extern const u8 gUnknown_0860D3AE[]; -extern const u8 gUnknown_0860D3B1[]; -extern const u8 gUnknown_0860D080[]; extern const u8 gUnknown_08D83900[]; -extern const u8 gUnknown_0860CBF1[][5][4]; -extern const u8 *const gBattleDomePotentialPointers[]; -extern const u8 *const gBattleDomeOpponentStylePointers[]; -extern const u8 *const gBattleDomeOpponentStatsPointers[]; -extern const u8 *const gBattleDomeWinStringsPointers[]; -extern const u8 *const gBattleDomeMatchNumberPointers[]; extern const struct FacilityMon gBattleFrontierMons[]; extern const struct BattleFrontierTrainer gBattleFrontierTrainers[]; -extern const struct BgTemplate gUnknown_0860CE74[4]; -extern const struct WindowTemplate gUnknown_0860CE94[]; -extern const u8 gUnknown_0860D411[][2]; extern const struct SpriteTemplate gUnknown_0860CFA8; -extern const struct SpriteTemplate gUnknown_0860D008; -extern const struct SpriteTemplate gUnknown_0860CFD8; -extern const struct ScanlineEffectParams gUnknown_0860CF44; -extern const struct UnkStruct_860DD10 *gUnknown_0860DD10[][4]; -extern const u8 gUnknown_0860DE10[][4]; // gfx extern const u8 gUnknown_08D83D50[]; @@ -149,10 +107,126 @@ extern const u8 gUnknown_08D82F10[]; extern const u8 gUnknown_08D834FC[]; extern const u8 gUnknown_08D83B2C[]; extern const u8 gUnknown_08D83C3C[]; +extern const u8 gBattleFrontierGfx_DomeOptions[]; // text extern const u8 gTrainerClassNames[][0xD]; +extern const u8 gBattleDomeOpponentPotential1[]; +extern const u8 gBattleDomeOpponentPotential2[]; +extern const u8 gBattleDomeOpponentPotential3[]; +extern const u8 gBattleDomeOpponentPotential4[]; +extern const u8 gBattleDomeOpponentPotential5[]; +extern const u8 gBattleDomeOpponentPotential6[]; +extern const u8 gBattleDomeOpponentPotential7[]; +extern const u8 gBattleDomeOpponentPotential8[]; +extern const u8 gBattleDomeOpponentPotential9[]; +extern const u8 gBattleDomeOpponentPotential10[]; +extern const u8 gBattleDomeOpponentPotential11[]; +extern const u8 gBattleDomeOpponentPotential12[]; +extern const u8 gBattleDomeOpponentPotential13[]; +extern const u8 gBattleDomeOpponentPotential14[]; +extern const u8 gBattleDomeOpponentPotential15[]; +extern const u8 gBattleDomeOpponentPotential16[]; +extern const u8 gBattleDomeOpponentPotential17[]; +extern const u8 gBattleDomeOpponentStyle1[]; +extern const u8 gBattleDomeOpponentStyle2[]; +extern const u8 gBattleDomeOpponentStyle3[]; +extern const u8 gBattleDomeOpponentStyle4[]; +extern const u8 gBattleDomeOpponentStyle5[]; +extern const u8 gBattleDomeOpponentStyle6[]; +extern const u8 gBattleDomeOpponentStyle7[]; +extern const u8 gBattleDomeOpponentStyle8[]; +extern const u8 gBattleDomeOpponentStyle9[]; +extern const u8 gBattleDomeOpponentStyle10[]; +extern const u8 gBattleDomeOpponentStyle11[]; +extern const u8 gBattleDomeOpponentStyle12[]; +extern const u8 gBattleDomeOpponentStyle13[]; +extern const u8 gBattleDomeOpponentStyle14[]; +extern const u8 gBattleDomeOpponentStyle15[]; +extern const u8 gBattleDomeOpponentStyle16[]; +extern const u8 gBattleDomeOpponentStyle17[]; +extern const u8 gBattleDomeOpponentStyle18[]; +extern const u8 gBattleDomeOpponentStyle19[]; +extern const u8 gBattleDomeOpponentStyle20[]; +extern const u8 gBattleDomeOpponentStyle21[]; +extern const u8 gBattleDomeOpponentStyle22[]; +extern const u8 gBattleDomeOpponentStyle23[]; +extern const u8 gBattleDomeOpponentStyle24[]; +extern const u8 gBattleDomeOpponentStyle25[]; +extern const u8 gBattleDomeOpponentStyle26[]; +extern const u8 gBattleDomeOpponentStyle27[]; +extern const u8 gBattleDomeOpponentStyle28[]; +extern const u8 gBattleDomeOpponentStyleUnused1[]; +extern const u8 gBattleDomeOpponentStyleUnused2[]; +extern const u8 gBattleDomeOpponentStyleUnused3[]; +extern const u8 gBattleDomeOpponentStyleUnused4[]; +extern const u8 gBattleDomeOpponentStats1[]; +extern const u8 gBattleDomeOpponentStats2[]; +extern const u8 gBattleDomeOpponentStats3[]; +extern const u8 gBattleDomeOpponentStats4[]; +extern const u8 gBattleDomeOpponentStats5[]; +extern const u8 gBattleDomeOpponentStats6[]; +extern const u8 gBattleDomeOpponentStats7[]; +extern const u8 gBattleDomeOpponentStats8[]; +extern const u8 gBattleDomeOpponentStats9[]; +extern const u8 gBattleDomeOpponentStats10[]; +extern const u8 gBattleDomeOpponentStats11[]; +extern const u8 gBattleDomeOpponentStats12[]; +extern const u8 gBattleDomeOpponentStats13[]; +extern const u8 gBattleDomeOpponentStats14[]; +extern const u8 gBattleDomeOpponentStats15[]; +extern const u8 gBattleDomeOpponentStats16[]; +extern const u8 gBattleDomeOpponentStats17[]; +extern const u8 gBattleDomeOpponentStats18[]; +extern const u8 gBattleDomeOpponentStats19[]; +extern const u8 gBattleDomeOpponentStats20[]; +extern const u8 gBattleDomeOpponentStats21[]; +extern const u8 gBattleDomeOpponentStats22[]; +extern const u8 gBattleDomeOpponentStats23[]; +extern const u8 gBattleDomeOpponentStats24[]; +extern const u8 gBattleDomeOpponentStats25[]; +extern const u8 gBattleDomeOpponentStats26[]; +extern const u8 gBattleDomeOpponentStats27[]; +extern const u8 gBattleDomeOpponentStats28[]; +extern const u8 gBattleDomeOpponentStats29[]; +extern const u8 gBattleDomeOpponentStats30[]; +extern const u8 gBattleDomeOpponentStats31[]; +extern const u8 gBattleDomeOpponentStats32[]; +extern const u8 gBattleDomeOpponentStats33[]; +extern const u8 gBattleDomeOpponentStats34[]; +extern const u8 gBattleDomeOpponentStats35[]; +extern const u8 gBattleDomeOpponentStats36[]; +extern const u8 gBattleDomeOpponentStats37[]; +extern const u8 gBattleDomeOpponentStats38[]; +extern const u8 gBattleDomeOpponentStats39[]; +extern const u8 gBattleDomeOpponentStats40[]; +extern const u8 gBattleDomeOpponentStats41[]; +extern const u8 gBattleDomeOpponentStats42[]; +extern const u8 gBattleDomeOpponentStats43[]; +extern const u8 gBattleDomeMatchNumber1[]; +extern const u8 gBattleDomeMatchNumber2[]; +extern const u8 gBattleDomeMatchNumber3[]; +extern const u8 gBattleDomeMatchNumber4[]; +extern const u8 gBattleDomeMatchNumber5[]; +extern const u8 gBattleDomeMatchNumber6[]; +extern const u8 gBattleDomeMatchNumber7[]; +extern const u8 gBattleDomeMatchNumber8[]; +extern const u8 gBattleDomeMatchNumber9[]; +extern const u8 gBattleDomeMatchNumber10[]; +extern const u8 gBattleDomeMatchNumber11[]; +extern const u8 gBattleDomeMatchNumber12[]; +extern const u8 gBattleDomeMatchNumber13[]; +extern const u8 gBattleDomeMatchNumber14[]; +extern const u8 gBattleDomeMatchNumber15[]; +extern const u8 gBattleDomeWinStrings1[]; +extern const u8 gBattleDomeWinStrings2[]; +extern const u8 gBattleDomeWinStrings3[]; +extern const u8 gBattleDomeWinStrings4[]; +extern const u8 gBattleDomeWinStrings5[]; +extern const u8 gBattleDomeWinStrings6[]; +extern const u8 gBattleDomeWinStrings7[]; + // This file's functions. static u8 GetDomeTrainerMonIvs(u16 trainerId); static void SwapDomeTrainers(s32 id1, s32 id2, u16 *statsArray); @@ -186,6 +260,32 @@ static void DecideRoundWinners(u8 roundId); static u8 sub_81953E8(u8 tournamentId, u8); static void sub_81948EC(u8, u8); +void sub_8190B40(struct Sprite *sprite); +void sub_8190C6C(struct Sprite *sprite); + +void sub_818E9CC(void); +void sub_818EA84(void); +void sub_818ED28(void); +void sub_818F9B0(void); +void sub_818F9E0(void); +void sub_818FA20(void); +void ShowDomeOpponentInfo(void); +void sub_81938A4(void); +void sub_81938E0(void); +void sub_8190298(void); +void sub_81902E4(void); +void sub_8193D40(void); +void sub_8193D7C(void); +void sub_81902F8(void); +void sub_819033C(void); +void sub_8194D68(void); +void sub_8194E44(void); +void sub_8194EB4(void); +void sub_8194EC0(void); +void sub_8194EF8(void); +void sub_8194F58(void); +void InitDomeTrainers(void); + // EWRAM variables. EWRAM_DATA u32 gUnknown_0203CD70 = 0; static EWRAM_DATA u32 gUnknown_0203CD74 = 0; @@ -193,7 +293,7 @@ static EWRAM_DATA struct BattleDomeStruct *sBattleDomeStruct = {0}; static EWRAM_DATA u8 *sTilemapBuffer = NULL; // Const rom data. -ALIGNED(4) + static const u8 sMovePointsForDomeTrainers[MOVES_COUNT][DOME_TOURNAMENT_TRAINERS_COUNT] = { [MOVE_NONE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, @@ -553,6 +653,1721 @@ static const u8 sMovePointsForDomeTrainers[MOVES_COUNT][DOME_TOURNAMENT_TRAINERS [MOVE_PSYCHO_BOOST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1}, }; +static const u8 gUnknown_0860C988[31][16] = +{ + {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0}, + {1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0}, + {3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0}, + {0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0}, + {0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 3, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0}, + {2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 4, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, + {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, +}; +static const u8 sUnusedArray[] = +{ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 3, 0, 0, 0, + 0, 0, 3, 0, 0, 0, 0, 0, 3, 2, 0, 0, 0, 0, 0, 2, + 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, + 0, 2, 253, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 253, 0, + 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 253, 254, 0, 0, 0, 0, + 0, 254, 0, 0, 0, 0, 0, 254, 0, 0, 0, 0, 0, 254, 0, 0, + 0, 0, 0, 254, 0, 0, 0, 0, 0, +}; + +static const u8 gUnknown_0860CBF1[][5][4]= +{ + {{0x07, 0x01, 0x08, 0x10}, {0x07, 0x01, 0x08, 0x10}, {0x07, 0x01, 0x08, 0x10}, {0x07, 0x01, 0x08, 0x10}, {0x07, 0x01, 0x08, 0x10}}, + {{0x00, 0x02, 0x09, 0x10}, {0x00, 0x02, 0x09, 0x10}, {0x00, 0x02, 0x09, 0x10}, {0x00, 0x02, 0x09, 0x10}, {0x00, 0x02, 0x09, 0x10}}, + {{0x01, 0x03, 0x0a, 0x11}, {0x01, 0x03, 0x0a, 0x11}, {0x01, 0x03, 0x0a, 0x11}, {0x01, 0x03, 0x0a, 0x11}, {0x01, 0x03, 0x0a, 0x11}}, + {{0x02, 0x04, 0x0b, 0x11}, {0x02, 0x04, 0x0b, 0x11}, {0x02, 0x04, 0x0b, 0x11}, {0x02, 0x04, 0x0b, 0x11}, {0x02, 0x04, 0x0b, 0x11}}, + {{0x03, 0x05, 0x0c, 0x12}, {0x03, 0x05, 0x0c, 0x12}, {0x03, 0x05, 0x0c, 0x12}, {0x03, 0x05, 0x0c, 0x12}, {0x03, 0x05, 0x0c, 0x12}}, + {{0x04, 0x06, 0x0d, 0x12}, {0x04, 0x06, 0x0d, 0x12}, {0x04, 0x06, 0x0d, 0x12}, {0x04, 0x06, 0x0d, 0x12}, {0x04, 0x06, 0x0d, 0x12}}, + {{0x05, 0x07, 0x0e, 0x13}, {0x05, 0x07, 0x0e, 0x13}, {0x05, 0x07, 0x0e, 0x13}, {0x05, 0x07, 0x0e, 0x13}, {0x05, 0x07, 0x0e, 0x13}}, + {{0x06, 0x00, 0x0f, 0x13}, {0x06, 0x00, 0x0f, 0x13}, {0x06, 0x00, 0x0f, 0x13}, {0x06, 0x00, 0x0f, 0x13}, {0x06, 0x00, 0x0f, 0x13}}, + {{0x1f, 0x09, 0x14, 0x1f}, {0x1f, 0x09, 0x14, 0x1f}, {0x1f, 0x09, 0x14, 0x1f}, {0x1f, 0x09, 0x14, 0x1f}, {0x1f, 0x09, 0x14, 0x1f}}, + {{0x08, 0x0a, 0x14, 0x01}, {0x08, 0x0a, 0x14, 0x01}, {0x08, 0x0a, 0x14, 0x01}, {0x08, 0x0a, 0x14, 0x01}, {0x08, 0x0a, 0x14, 0x01}}, + {{0x09, 0x0b, 0x15, 0x02}, {0x09, 0x0b, 0x15, 0x02}, {0x09, 0x0b, 0x15, 0x02}, {0x09, 0x0b, 0x15, 0x02}, {0x09, 0x0b, 0x15, 0x02}}, + {{0x0a, 0x0c, 0x15, 0x03}, {0x0a, 0x0c, 0x15, 0x03}, {0x0a, 0x0c, 0x15, 0x03}, {0x0a, 0x0c, 0x15, 0x03}, {0x0a, 0x0c, 0x15, 0x03}}, + {{0x0b, 0x0d, 0x16, 0x04}, {0x0b, 0x0d, 0x16, 0x04}, {0x0b, 0x0d, 0x16, 0x04}, {0x0b, 0x0d, 0x16, 0x04}, {0x0b, 0x0d, 0x16, 0x04}}, + {{0x0c, 0x0e, 0x16, 0x05}, {0x0c, 0x0e, 0x16, 0x05}, {0x0c, 0x0e, 0x16, 0x05}, {0x0c, 0x0e, 0x16, 0x05}, {0x0c, 0x0e, 0x16, 0x05}}, + {{0x0d, 0x0f, 0x17, 0x06}, {0x0d, 0x0f, 0x17, 0x06}, {0x0d, 0x0f, 0x17, 0x06}, {0x0d, 0x0f, 0x17, 0x06}, {0x0d, 0x0f, 0x17, 0x06}}, + {{0x0e, 0x1f, 0x17, 0x07}, {0x0e, 0x1f, 0x17, 0x07}, {0x0e, 0x1f, 0x17, 0x07}, {0x0e, 0x1f, 0x17, 0x07}, {0x0e, 0x1f, 0x17, 0x07}}, + {{0x13, 0x11, 0x00, 0x14}, {0x13, 0x11, 0x00, 0x18}, {0x13, 0x11, 0x00, 0x18}, {0x13, 0x11, 0x00, 0x18}, {0x13, 0x11, 0x00, 0x18}}, + {{0x10, 0x12, 0x02, 0x15}, {0x10, 0x12, 0x02, 0x18}, {0x10, 0x12, 0x02, 0x18}, {0x10, 0x12, 0x02, 0x18}, {0x10, 0x12, 0x02, 0x18}}, + {{0x11, 0x13, 0x04, 0x16}, {0x11, 0x13, 0x04, 0x19}, {0x11, 0x13, 0x04, 0x19}, {0x11, 0x13, 0x04, 0x19}, {0x11, 0x13, 0x04, 0x19}}, + {{0x12, 0x10, 0x06, 0x17}, {0x12, 0x10, 0x06, 0x19}, {0x12, 0x10, 0x06, 0x19}, {0x12, 0x10, 0x06, 0x19}, {0x12, 0x10, 0x06, 0x19}}, + {{0x17, 0x15, 0x10, 0x08}, {0x17, 0x15, 0x1a, 0x08}, {0x17, 0x15, 0x1a, 0x08}, {0x17, 0x15, 0x1a, 0x08}, {0x17, 0x15, 0x1a, 0x08}}, + {{0x14, 0x16, 0x11, 0x0a}, {0x14, 0x16, 0x1a, 0x0a}, {0x14, 0x16, 0x1a, 0x0a}, {0x14, 0x16, 0x1a, 0x0a}, {0x14, 0x16, 0x1a, 0x0a}}, + {{0x15, 0x17, 0x12, 0x0c}, {0x15, 0x17, 0x1b, 0x0c}, {0x15, 0x17, 0x1b, 0x0c}, {0x15, 0x17, 0x1b, 0x0c}, {0x15, 0x17, 0x1b, 0x0c}}, + {{0x16, 0x14, 0x13, 0x0e}, {0x16, 0x14, 0x1b, 0x0e}, {0x16, 0x14, 0x1b, 0x0e}, {0x16, 0x14, 0x1b, 0x0e}, {0x16, 0x14, 0x1b, 0x0e}}, + {{0xff, 0xff, 0xff, 0xff}, {0x19, 0x19, 0x10, 0x1a}, {0x19, 0x19, 0x10, 0x1c}, {0x19, 0x19, 0x10, 0x1c}, {0x19, 0x19, 0x10, 0x1c}}, + {{0xff, 0xff, 0xff, 0xff}, {0x18, 0x18, 0x12, 0x1b}, {0x18, 0x18, 0x12, 0x1c}, {0x18, 0x18, 0x12, 0x1c}, {0x18, 0x18, 0x12, 0x1c}}, + {{0xff, 0xff, 0xff, 0xff}, {0x1b, 0x1b, 0x18, 0x14}, {0x1b, 0x1b, 0x1d, 0x14}, {0x1b, 0x1b, 0x1d, 0x14}, {0x1b, 0x1b, 0x1d, 0x14}}, + {{0xff, 0xff, 0xff, 0xff}, {0x1a, 0x1a, 0x19, 0x16}, {0x1a, 0x1a, 0x1d, 0x16}, {0x1a, 0x1a, 0x1d, 0x16}, {0x1a, 0x1a, 0x1d, 0x16}}, + {{0xff, 0xff, 0xff, 0xff}, {0xff, 0xff, 0xff, 0xff}, {0xff, 0xff, 0x18, 0x1d}, {0xff, 0xff, 0x18, 0x1e}, {0xff, 0xff, 0x18, 0x1e}}, + {{0xff, 0xff, 0xff, 0xff}, {0xff, 0xff, 0xff, 0xff}, {0xff, 0xff, 0x1c, 0x1a}, {0xff, 0xff, 0x1e, 0x1a}, {0xff, 0xff, 0x1e, 0x1a}}, + {{0xff, 0xff, 0xff, 0xff}, {0xff, 0xff, 0xff, 0xff}, {0xff, 0xff, 0xff, 0xff}, {0xff, 0xff, 0x1c, 0x1d}, {0xff, 0xff, 0x1c, 0x1d}}, + {{0x0f, 0x08, 0x08, 0x00}, {0x0f, 0x08, 0x08, 0x00}, {0x0f, 0x08, 0x08, 0x00}, {0x0f, 0x08, 0x08, 0x00}, {0x0f, 0x08, 0x08, 0x00}}, +}; +static const u8 gUnused_0860CBF1[] = {0x00, 0x00, 0x00}; + +static const struct BgTemplate gUnknown_0860CE74[4] = +{ + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 28, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 29, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, + { + .bg = 3, + .charBaseIndex = 2, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, +}; + +static const struct BgTemplate gUnknown_0860CE84[4] = +{ + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 20, + .screenSize = 3, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 1, + .charBaseIndex = 1, + .mapBaseIndex = 24, + .screenSize = 3, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 28, + .screenSize = 3, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 3, + .charBaseIndex = 2, + .mapBaseIndex = 7, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, +}; + +static const struct WindowTemplate gUnknown_0860CE94[] = +{ + { + .priority = 0, + .tilemapLeft = 0, + .tilemapTop = 3, + .width = 8, + .height = 16, + .paletteNum = 15, + .baseBlock = 16, + }, + { + .priority = 0, + .tilemapLeft = 22, + .tilemapTop = 3, + .width = 8, + .height = 16, + .paletteNum = 15, + .baseBlock = 144, + }, + { + .priority = 0, + .tilemapLeft = 8, + .tilemapTop = 1, + .width = 14, + .height = 2, + .paletteNum = 15, + .baseBlock = 272, + }, + DUMMY_WIN_TEMPLATE, +}; + +static const struct WindowTemplate gUnknown_0860CEB4[] = +{ + { + .priority = 0, + .tilemapLeft = 2, + .tilemapTop = 2, + .width = 26, + .height = 2, + .paletteNum = 15, + .baseBlock = 1, + }, + { + .priority = 0, + .tilemapLeft = 16, + .tilemapTop = 5, + .width = 8, + .height = 2, + .paletteNum = 15, + .baseBlock = 53, + }, + { + .priority = 0, + .tilemapLeft = 19, + .tilemapTop = 7, + .width = 9, + .height = 3, + .paletteNum = 15, + .baseBlock = 69, + }, + { + .priority = 0, + .tilemapLeft = 16, + .tilemapTop = 10, + .width = 8, + .height = 2, + .paletteNum = 15, + .baseBlock = 96, + }, + { + .priority = 0, + .tilemapLeft = 2, + .tilemapTop = 12, + .width = 26, + .height = 7, + .paletteNum = 15, + .baseBlock = 112, + }, + { + .priority = 0, + .tilemapLeft = 5, + .tilemapTop = 2, + .width = 23, + .height = 2, + .paletteNum = 15, + .baseBlock = 294, + }, + { + .priority = 0, + .tilemapLeft = 2, + .tilemapTop = 5, + .width = 8, + .height = 2, + .paletteNum = 15, + .baseBlock = 340, + }, + { + .priority = 0, + .tilemapLeft = 20, + .tilemapTop = 5, + .width = 8, + .height = 2, + .paletteNum = 15, + .baseBlock = 356, + }, + { + .priority = 0, + .tilemapLeft = 2, + .tilemapTop = 16, + .width = 26, + .height = 2, + .paletteNum = 15, + .baseBlock = 372, + }, + { + .priority = 1, + .tilemapLeft = 2, + .tilemapTop = 2, + .width = 26, + .height = 2, + .paletteNum = 15, + .baseBlock = 1, + }, + { + .priority = 1, + .tilemapLeft = 16, + .tilemapTop = 5, + .width = 8, + .height = 2, + .paletteNum = 15, + .baseBlock = 53, + }, + { + .priority = 1, + .tilemapLeft = 19, + .tilemapTop = 7, + .width = 9, + .height = 3, + .paletteNum = 15, + .baseBlock = 69, + }, + { + .priority = 1, + .tilemapLeft = 16, + .tilemapTop = 10, + .width = 8, + .height = 2, + .paletteNum = 15, + .baseBlock = 96, + }, + { + .priority = 1, + .tilemapLeft = 2, + .tilemapTop = 12, + .width = 26, + .height = 7, + .paletteNum = 15, + .baseBlock = 112, + }, + { + .priority = 1, + .tilemapLeft = 5, + .tilemapTop = 2, + .width = 23, + .height = 2, + .paletteNum = 15, + .baseBlock = 294, + }, + { + .priority = 1, + .tilemapLeft = 2, + .tilemapTop = 5, + .width = 8, + .height = 2, + .paletteNum = 15, + .baseBlock = 340, + }, + { + .priority = 1, + .tilemapLeft = 20, + .tilemapTop = 5, + .width = 8, + .height = 2, + .paletteNum = 15, + .baseBlock = 356, + }, + { + .priority = 1, + .tilemapLeft = 2, + .tilemapTop = 16, + .width = 26, + .height = 2, + .paletteNum = 15, + .baseBlock = 372, + }, +}; + +static const struct ScanlineEffectParams gUnknown_0860CF44 = +{ + .dmaDest = (void *)REG_ADDR_BG3CNT, + .dmaControl = 0xa2600001, + .initState = 1, +}; + +static const struct CompressedSpriteSheet gUnknown_0860CF50[] = +{ + gBattleFrontierGfx_DomeOptions, 0x0600, 0x0000, + NULL +}; + +static const struct CompressedSpritePalette gUnknown_0860CF60[] = +{ + gUnknown_08D85444, 0x0000, + NULL +}; + +static const struct OamData gUnknown_0860CF70 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; + +static const struct OamData gUnknown_0860CF78 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 0, + .paletteNum = 1, + .affineParam = 0, +}; + +static const struct OamData gUnknown_0860CF80 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + .affineParam = 0, +}; + +static const struct OamData gUnknown_0860CF88 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 2, + .affineParam = 0, +}; + +static const union AnimCmd gUnknown_0860CF90[] = +{ + ANIMCMD_FRAME(20, 1), + ANIMCMD_END, +}; +static const union AnimCmd gUnknown_0860CF98[] = +{ + ANIMCMD_FRAME(24, 1), + ANIMCMD_END, +}; + +static const union AnimCmd * const gUnknown_0860CFA0[] = +{ + gUnknown_0860CF90, + gUnknown_0860CF98, +}; + +static const struct SpriteTemplate gUnknown_0860CFA8 = {0x0000, 0xffff, &gUnknown_0860CF70, gUnknown_0860CFA0, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy}; + +static const union AnimCmd gUnknown_0860CFC0[] = +{ + ANIMCMD_FRAME(8, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_0860CFC8[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +static const union AnimCmd * const gUnknown_0860CFD0[] = +{ + gUnknown_0860CFC0, + gUnknown_0860CFC8, +}; + +static const struct SpriteTemplate gUnknown_0860CFD8 = {0x0000, 0xffff, &gUnknown_0860CF78, gUnknown_0860CFD0, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy}; + +static const union AnimCmd gUnknown_0860CFF0[] = +{ + ANIMCMD_FRAME(40, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_0860CFF8[] = +{ + ANIMCMD_FRAME(32, 1), + ANIMCMD_END, + }; + +static const union AnimCmd * const gUnknown_0860D000[] = +{ + gUnknown_0860CFF0, + gUnknown_0860CFF8, +}; + +static const struct SpriteTemplate gUnknown_0860D008 = {0x0000, 0xffff, &gUnknown_0860CF78, gUnknown_0860D000, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy}; + +static const union AnimCmd gUnknown_0860D020[] = +{ + ANIMCMD_FRAME(18, 1), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_0860D028[] = +{ + ANIMCMD_FRAME(18, 129, .vFlip = TRUE), + ANIMCMD_END, + }; + +static const union AnimCmd gUnknown_0860D030[] = +{ + ANIMCMD_FRAME(16, 65, .hFlip = TRUE), + ANIMCMD_END, +}; + +static const union AnimCmd gUnknown_0860D038[] = +{ + ANIMCMD_FRAME(16, 1), + ANIMCMD_END, +}; + +static const union AnimCmd * const gUnknown_0860D040[] = +{ + gUnknown_0860D020, + gUnknown_0860D028, +}; + +static const union AnimCmd * const gUnknown_0860D048[] = +{ + gUnknown_0860D030, + gUnknown_0860D038, +}; + +static const struct SpriteTemplate gUnknown_0860D050 = {0x0000, 0xffff, &gUnknown_0860CF88, gUnknown_0860D048, NULL, gDummySpriteAffineAnimTable, sub_8190B40}; +static const struct SpriteTemplate gUnknown_0860D068 = {0x0000, 0xffff, &gUnknown_0860CF80, gUnknown_0860D040, NULL, gDummySpriteAffineAnimTable, sub_8190C6C}; + +static const u8 gUnknown_0860D080[] = {0x00, 0x08, 0x0c, 0x04, 0x07, 0x0f, 0x0b, 0x03, 0x02, 0x0a, 0x0e, 0x06, 0x05, 0x0d, 0x09, 0x01}; + +static void (* const gUnknown_0860D090[])(void) = +{ + sub_818E9CC, + sub_818EA84, + sub_818ED28, + sub_818F9B0, + sub_818F9E0, + sub_818FA20, + ShowDomeOpponentInfo, + sub_81938A4, + sub_81938E0, + sub_8190298, + sub_81902E4, + sub_8193D40, + sub_8193D7C, + sub_81902F8, + sub_819033C, + sub_8194D48, + sub_8194D68, + sub_8194E44, + sub_8194EB4, + sub_8194EC0, + sub_8194EF8, + sub_8194F58, + InitDomeTrainers, +}; + +static const u32 gUnknown_0860D0EC[][2] = +{ + {0x00000004, 0x00000008}, + {0x00100000, 0x00200000}, +}; + +static const u32 gUnknown_0860D0FC[][2] = +{ + {0xfffffffb, 0xfffffff7}, + {0xffefffff, 0xffdfffff}, +}; + +static const u8 gUnknown_0860D10C[][4] = +{ + {0x08, 0x00, 0x04, 0x08}, + {0x09, 0x0c, 0x08, 0x00}, + {0x0a, 0x08, 0x0c, 0x00}, + {0x0b, 0x04, 0x00, 0x08}, + {0x0c, 0x00, 0x04, 0x08}, + {0x0d, 0x0c, 0x08, 0x00}, + {0x0e, 0x08, 0x0c, 0x00}, + {0x0f, 0x04, 0x00, 0x08}, + {0x00, 0x00, 0x04, 0x08}, + {0x01, 0x0c, 0x08, 0x00}, + {0x02, 0x08, 0x0c, 0x00}, + {0x03, 0x04, 0x00, 0x08}, + {0x04, 0x00, 0x04, 0x08}, + {0x05, 0x0c, 0x08, 0x00}, + {0x06, 0x08, 0x0c, 0x00}, + {0x07, 0x04, 0x00, 0x08}, +}; + +static const u8 gUnknown_0860D14C[] = {0x00, 0x08, 0x04, 0x0c, 0x07, 0x0f, 0x03, 0x0b, 0x02, 0x0a, 0x06, 0x0e, 0x05, 0x0d, 0x01, 0x09}; + +static const u8 gUnknown_0860D15C[] = +{ + 0x00, 0x08, 0x0c, 0x0e, 0x00, 0x08, 0x0c, 0x0e, + 0x01, 0x08, 0x0c, 0x0e, 0x01, 0x08, 0x0c, 0x0e, + 0x02, 0x09, 0x0c, 0x0e, 0x02, 0x09, 0x0c, 0x0e, + 0x03, 0x09, 0x0c, 0x0e, 0x03, 0x09, 0x0c, 0x0e, + 0x04, 0x0a, 0x0d, 0x0e, 0x04, 0x0a, 0x0d, 0x0e, + 0x05, 0x0a, 0x0d, 0x0e, 0x05, 0x0a, 0x0d, 0x0e, + 0x06, 0x0b, 0x0d, 0x0e, 0x06, 0x0b, 0x0d, 0x0e, + 0x07, 0x0b, 0x0d, 0x0e, 0x07, 0x0b, 0x0d, 0x0e, +}; + +static const u8 gUnknown_0860D19C[] = {0x17, 0x1b, 0x1d, 0x1e}; + +static const u8 gUnknown_0860D1A0[][4] = +{ + {0x10, 0x18, 0x1c, 0x1e}, + {0x11, 0x18, 0x1c, 0x1e}, + {0x12, 0x19, 0x1c, 0x1e}, + {0x13, 0x19, 0x1c, 0x1e}, + {0x14, 0x1a, 0x1d, 0x1e}, + {0x15, 0x1a, 0x1d, 0x1e}, + {0x16, 0x1b, 0x1d, 0x1e}, + {0x17, 0x1b, 0x1d, 0x1e}, +}; + +static const u8 gUnknown_0860D1C0[] = {0x00, 0x0f, 0x08, 0x07, 0x03, 0x0c, 0x0b, 0x04, 0x01, 0x0e, 0x09, 0x06, 0x02, 0x0d, 0x0a, 0x05}; + +static const u8 *const gBattleDomePotentialPointers[] = +{ + gBattleDomeOpponentPotential1, + gBattleDomeOpponentPotential2, + gBattleDomeOpponentPotential3, + gBattleDomeOpponentPotential4, + gBattleDomeOpponentPotential5, + gBattleDomeOpponentPotential6, + gBattleDomeOpponentPotential7, + gBattleDomeOpponentPotential8, + gBattleDomeOpponentPotential9, + gBattleDomeOpponentPotential10, + gBattleDomeOpponentPotential11, + gBattleDomeOpponentPotential12, + gBattleDomeOpponentPotential13, + gBattleDomeOpponentPotential14, + gBattleDomeOpponentPotential15, + gBattleDomeOpponentPotential16, + gBattleDomeOpponentPotential17, +}; + +static const u8 *const gBattleDomeOpponentStylePointers[] = +{ + gBattleDomeOpponentStyle1, + gBattleDomeOpponentStyle2, + gBattleDomeOpponentStyle3, + gBattleDomeOpponentStyle4, + gBattleDomeOpponentStyle5, + gBattleDomeOpponentStyle6, + gBattleDomeOpponentStyle7, + gBattleDomeOpponentStyle8, + gBattleDomeOpponentStyle9, + gBattleDomeOpponentStyle10, + gBattleDomeOpponentStyle11, + gBattleDomeOpponentStyle12, + gBattleDomeOpponentStyle13, + gBattleDomeOpponentStyle14, + gBattleDomeOpponentStyle15, + gBattleDomeOpponentStyle16, + gBattleDomeOpponentStyle17, + gBattleDomeOpponentStyle18, + gBattleDomeOpponentStyle19, + gBattleDomeOpponentStyle20, + gBattleDomeOpponentStyle21, + gBattleDomeOpponentStyle22, + gBattleDomeOpponentStyle23, + gBattleDomeOpponentStyle24, + gBattleDomeOpponentStyle25, + gBattleDomeOpponentStyle26, + gBattleDomeOpponentStyle27, + gBattleDomeOpponentStyle28, + gBattleDomeOpponentStyleUnused1, + gBattleDomeOpponentStyleUnused2, + gBattleDomeOpponentStyleUnused3, + gBattleDomeOpponentStyleUnused4, +}; + +static const u8 *const gBattleDomeOpponentStatsPointers[] = +{ + gBattleDomeOpponentStats1, + gBattleDomeOpponentStats2, + gBattleDomeOpponentStats3, + gBattleDomeOpponentStats4, + gBattleDomeOpponentStats5, + gBattleDomeOpponentStats6, + gBattleDomeOpponentStats7, + gBattleDomeOpponentStats8, + gBattleDomeOpponentStats9, + gBattleDomeOpponentStats10, + gBattleDomeOpponentStats11, + gBattleDomeOpponentStats12, + gBattleDomeOpponentStats13, + gBattleDomeOpponentStats14, + gBattleDomeOpponentStats15, + gBattleDomeOpponentStats16, + gBattleDomeOpponentStats17, + gBattleDomeOpponentStats18, + gBattleDomeOpponentStats19, + gBattleDomeOpponentStats20, + gBattleDomeOpponentStats21, + gBattleDomeOpponentStats22, + gBattleDomeOpponentStats23, + gBattleDomeOpponentStats24, + gBattleDomeOpponentStats25, + gBattleDomeOpponentStats26, + gBattleDomeOpponentStats27, + gBattleDomeOpponentStats28, + gBattleDomeOpponentStats29, + gBattleDomeOpponentStats30, + gBattleDomeOpponentStats31, + gBattleDomeOpponentStats32, + gBattleDomeOpponentStats33, + gBattleDomeOpponentStats34, + gBattleDomeOpponentStats35, + gBattleDomeOpponentStats36, + gBattleDomeOpponentStats37, + gBattleDomeOpponentStats38, + gBattleDomeOpponentStats39, + gBattleDomeOpponentStats40, + gBattleDomeOpponentStats41, + gBattleDomeOpponentStats42, + gBattleDomeOpponentStats43, +}; + +static const u8 gUnknown_0860D340[] = {0x68, 0x88, 0x68}; +static const u8 gUnknown_0860D343[] = {0x26, 0x3e, 0x4e}; +static const u8 gUnknown_0860D346[] = {0x00, 0x04, 0x00}; + +static const u8 gUnknown_0860D349[] = {0x00, 0x05, 0x09, 0x0c, 0x0e, 0x00, 0x00}; + +static const u8 *const gBattleDomeMatchNumberPointers[] = +{ + gBattleDomeMatchNumber1, + gBattleDomeMatchNumber2, + gBattleDomeMatchNumber3, + gBattleDomeMatchNumber4, + gBattleDomeMatchNumber5, + gBattleDomeMatchNumber6, + gBattleDomeMatchNumber7, + gBattleDomeMatchNumber8, + gBattleDomeMatchNumber9, + gBattleDomeMatchNumber10, + gBattleDomeMatchNumber11, + gBattleDomeMatchNumber12, + gBattleDomeMatchNumber13, + gBattleDomeMatchNumber14, + gBattleDomeMatchNumber15, +}; + +static const u8 *const gBattleDomeWinStringsPointers[] = +{ + gBattleDomeWinStrings1, + gBattleDomeWinStrings2, + gBattleDomeWinStrings3, + gBattleDomeWinStrings4, + gBattleDomeWinStrings5, + gBattleDomeWinStrings6, + gBattleDomeWinStrings7, +}; + +static const u8 gUnknown_0860D3A8[] = {0x60, 0x60, 0x60}; +static const u8 gUnknown_0860D3AB[] = {0x38, 0x50, 0x68}; +static const u8 gUnknown_0860D3AE[] = {0x90, 0x90, 0x90}; +static const u8 gUnknown_0860D3B1[] = {0x38, 0x50, 0x68}; + +static const u8 gUnknown_0860D3B4[] = {0x00, 0x08, 0x0c, 0x04, 0x07, 0x0f, 0x0b, 0x03, 0x02, 0x0a, 0x0e, 0x06, 0x05, 0x0d, 0x09, 0x01}; + +static const u8 gUnknown_0860D3C4[][3] = +{ + {0x00, 0x02, 0x00}, + {0x02, 0x02, 0x00}, + {0x04, 0x02, 0x00}, + {0x06, 0x02, 0x00}, + {0x08, 0x02, 0x00}, + {0x0a, 0x02, 0x00}, + {0x0c, 0x02, 0x00}, + {0x0e, 0x02, 0x00}, + {0x00, 0x04, 0x01}, + {0x04, 0x04, 0x01}, + {0x08, 0x04, 0x01}, + {0x0c, 0x04, 0x01}, + {0x00, 0x08, 0x02}, + {0x08, 0x08, 0x02}, + {0x00, 0x10, 0x03}, +}; + +static const u8 gUnknown_0860D3F1[][2] = +{ + {0x00, 0x00}, + {0x01, 0x70}, + {0x01, 0x00}, + {0x00, 0x70}, + {0x00, 0x30}, + {0x01, 0x40}, + {0x01, 0x30}, + {0x00, 0x40}, + {0x00, 0x10}, + {0x01, 0x60}, + {0x01, 0x10}, + {0x00, 0x60}, + {0x00, 0x20}, + {0x01, 0x50}, + {0x01, 0x20}, + {0x00, 0x50}, +}; + +static const u8 gUnknown_0860D411[][2] = +{ + {0x44, 0x21}, + {0x44, 0x31}, + {0x44, 0x41}, + {0x44, 0x51}, + {0x44, 0x61}, + {0x44, 0x71}, + {0x44, 0x81}, + {0x44, 0x91}, + {0xac, 0x21}, + {0xac, 0x31}, + {0xac, 0x41}, + {0xac, 0x51}, + {0xac, 0x61}, + {0xac, 0x71}, + {0xac, 0x81}, + {0xac, 0x91}, + {0x57, 0x29}, + {0x57, 0x49}, + {0x57, 0x69}, + {0x57, 0x89}, + {0x99, 0x29}, + {0x99, 0x49}, + {0x99, 0x69}, + {0x99, 0x89}, + {0x5f, 0x39}, + {0x5f, 0x79}, + {0x91, 0x39}, + {0x91, 0x79}, + {0x67, 0x59}, + {0x89, 0x59}, + {0x78, 0x59}, +}; +const u8 sExtraByte = 0x00; + +static const struct UnkStruct_860DD10 gUnknown_0860d450[] = +{ + {.src = 0x6021, .y = 0x04, .x = 0x09}, + {.src = 0x6023, .y = 0x04, .x = 0x0a}, + {.src = 0x6047, .y = 0x05, .x = 0x0a}, + {.src = 0x6043, .y = 0x05, .x = 0x0b}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d460[] = +{ + {.src = 0x6021, .y = 0x04, .x = 0x09}, + {.src = 0x6023, .y = 0x04, .x = 0x0a}, + {.src = 0x6047, .y = 0x05, .x = 0x0a}, + {.src = 0x6023, .y = 0x05, .x = 0x0b}, + {.src = 0x6027, .y = 0x06, .x = 0x0b}, + {.src = 0x6047, .y = 0x07, .x = 0x0b}, + {.src = 0x6043, .y = 0x07, .x = 0x0c}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d47c[] = +{ + {.src = 0x6021, .y = 0x04, .x = 0x09}, + {.src = 0x6023, .y = 0x04, .x = 0x0a}, + {.src = 0x6047, .y = 0x05, .x = 0x0a}, + {.src = 0x6023, .y = 0x05, .x = 0x0b}, + {.src = 0x6027, .y = 0x06, .x = 0x0b}, + {.src = 0x6047, .y = 0x07, .x = 0x0b}, + {.src = 0x6023, .y = 0x07, .x = 0x0c}, + {.src = 0x6027, .y = 0x08, .x = 0x0c}, + {.src = 0x6027, .y = 0x09, .x = 0x0c}, + {.src = 0x6027, .y = 0x0a, .x = 0x0c}, + {.src = 0x603b, .y = 0x0b, .x = 0x0c}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d4a8[] = +{ + {.src = 0x6021, .y = 0x04, .x = 0x09}, + {.src = 0x6023, .y = 0x04, .x = 0x0a}, + {.src = 0x6047, .y = 0x05, .x = 0x0a}, + {.src = 0x6023, .y = 0x05, .x = 0x0b}, + {.src = 0x6027, .y = 0x06, .x = 0x0b}, + {.src = 0x6047, .y = 0x07, .x = 0x0b}, + {.src = 0x6023, .y = 0x07, .x = 0x0c}, + {.src = 0x6027, .y = 0x08, .x = 0x0c}, + {.src = 0x6027, .y = 0x09, .x = 0x0c}, + {.src = 0x6027, .y = 0x0a, .x = 0x0c}, + {.src = 0x603b, .y = 0x0b, .x = 0x0c}, + {.src = 0x602c, .y = 0x0b, .x = 0x0d}, + {.src = 0x602d, .y = 0x0b, .x = 0x0e}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d4dc[] = +{ + {.src = 0x6021, .y = 0x06, .x = 0x09}, + {.src = 0x6021, .y = 0x06, .x = 0x0a}, + {.src = 0x6027, .y = 0x05, .x = 0x0a}, + {.src = 0x6043, .y = 0x05, .x = 0x0b}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d4ec[] = +{ + {.src = 0x6021, .y = 0x06, .x = 0x09}, + {.src = 0x6021, .y = 0x06, .x = 0x0a}, + {.src = 0x6027, .y = 0x05, .x = 0x0a}, + {.src = 0x6023, .y = 0x05, .x = 0x0b}, + {.src = 0x6027, .y = 0x06, .x = 0x0b}, + {.src = 0x6047, .y = 0x07, .x = 0x0b}, + {.src = 0x6043, .y = 0x07, .x = 0x0c}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d508[] = +{ + {.src = 0x6021, .y = 0x06, .x = 0x09}, + {.src = 0x6021, .y = 0x06, .x = 0x0a}, + {.src = 0x6027, .y = 0x05, .x = 0x0a}, + {.src = 0x6023, .y = 0x05, .x = 0x0b}, + {.src = 0x6027, .y = 0x06, .x = 0x0b}, + {.src = 0x6047, .y = 0x07, .x = 0x0b}, + {.src = 0x6023, .y = 0x07, .x = 0x0c}, + {.src = 0x6027, .y = 0x08, .x = 0x0c}, + {.src = 0x6027, .y = 0x09, .x = 0x0c}, + {.src = 0x6027, .y = 0x0a, .x = 0x0c}, + {.src = 0x603b, .y = 0x0b, .x = 0x0c}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d534[] = +{ + {.src = 0x6021, .y = 0x06, .x = 0x09}, + {.src = 0x6021, .y = 0x06, .x = 0x0a}, + {.src = 0x6027, .y = 0x05, .x = 0x0a}, + {.src = 0x6023, .y = 0x05, .x = 0x0b}, + {.src = 0x6027, .y = 0x06, .x = 0x0b}, + {.src = 0x6047, .y = 0x07, .x = 0x0b}, + {.src = 0x6023, .y = 0x07, .x = 0x0c}, + {.src = 0x6027, .y = 0x08, .x = 0x0c}, + {.src = 0x6027, .y = 0x09, .x = 0x0c}, + {.src = 0x6027, .y = 0x0a, .x = 0x0c}, + {.src = 0x603b, .y = 0x0b, .x = 0x0c}, + {.src = 0x602c, .y = 0x0b, .x = 0x0d}, + {.src = 0x602d, .y = 0x0b, .x = 0x0e}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d568[] = +{ + {.src = 0x6021, .y = 0x08, .x = 0x09}, + {.src = 0x6023, .y = 0x08, .x = 0x0a}, + {.src = 0x6047, .y = 0x09, .x = 0x0a}, + {.src = 0x6021, .y = 0x09, .x = 0x0b}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d578[] = +{ + {.src = 0x6021, .y = 0x08, .x = 0x09}, + {.src = 0x6023, .y = 0x08, .x = 0x0a}, + {.src = 0x6047, .y = 0x09, .x = 0x0a}, + {.src = 0x6021, .y = 0x09, .x = 0x0b}, + {.src = 0x6027, .y = 0x08, .x = 0x0b}, + {.src = 0x6027, .y = 0x07, .x = 0x0b}, + {.src = 0x6043, .y = 0x07, .x = 0x0c}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d594[] = +{ + {.src = 0x6021, .y = 0x08, .x = 0x09}, + {.src = 0x6023, .y = 0x08, .x = 0x0a}, + {.src = 0x6047, .y = 0x09, .x = 0x0a}, + {.src = 0x6021, .y = 0x09, .x = 0x0b}, + {.src = 0x6027, .y = 0x08, .x = 0x0b}, + {.src = 0x6027, .y = 0x07, .x = 0x0b}, + {.src = 0x6023, .y = 0x07, .x = 0x0c}, + {.src = 0x6027, .y = 0x08, .x = 0x0c}, + {.src = 0x6027, .y = 0x09, .x = 0x0c}, + {.src = 0x6027, .y = 0x0a, .x = 0x0c}, + {.src = 0x603b, .y = 0x0b, .x = 0x0c}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d5c0[] = +{ + {.src = 0x6021, .y = 0x08, .x = 0x09}, + {.src = 0x6023, .y = 0x08, .x = 0x0a}, + {.src = 0x6047, .y = 0x09, .x = 0x0a}, + {.src = 0x6021, .y = 0x09, .x = 0x0b}, + {.src = 0x6027, .y = 0x08, .x = 0x0b}, + {.src = 0x6027, .y = 0x07, .x = 0x0b}, + {.src = 0x6023, .y = 0x07, .x = 0x0c}, + {.src = 0x6027, .y = 0x08, .x = 0x0c}, + {.src = 0x6027, .y = 0x09, .x = 0x0c}, + {.src = 0x6027, .y = 0x0a, .x = 0x0c}, + {.src = 0x603b, .y = 0x0b, .x = 0x0c}, + {.src = 0x602c, .y = 0x0b, .x = 0x0d}, + {.src = 0x602d, .y = 0x0b, .x = 0x0e}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d5f4[] = +{ + {.src = 0x6021, .y = 0x0a, .x = 0x09}, + {.src = 0x6021, .y = 0x0a, .x = 0x0a}, + {.src = 0x6027, .y = 0x09, .x = 0x0a}, + {.src = 0x6021, .y = 0x09, .x = 0x0b}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d604[] = +{ + {.src = 0x6021, .y = 0x0a, .x = 0x09}, + {.src = 0x6021, .y = 0x0a, .x = 0x0a}, + {.src = 0x6027, .y = 0x09, .x = 0x0a}, + {.src = 0x6021, .y = 0x09, .x = 0x0b}, + {.src = 0x6027, .y = 0x08, .x = 0x0b}, + {.src = 0x6027, .y = 0x07, .x = 0x0b}, + {.src = 0x6043, .y = 0x07, .x = 0x0c}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d620[] = +{ + {.src = 0x6021, .y = 0x0a, .x = 0x09}, + {.src = 0x6021, .y = 0x0a, .x = 0x0a}, + {.src = 0x6027, .y = 0x09, .x = 0x0a}, + {.src = 0x6021, .y = 0x09, .x = 0x0b}, + {.src = 0x6027, .y = 0x08, .x = 0x0b}, + {.src = 0x6027, .y = 0x07, .x = 0x0b}, + {.src = 0x6023, .y = 0x07, .x = 0x0c}, + {.src = 0x6027, .y = 0x08, .x = 0x0c}, + {.src = 0x6027, .y = 0x09, .x = 0x0c}, + {.src = 0x6027, .y = 0x0a, .x = 0x0c}, + {.src = 0x603b, .y = 0x0b, .x = 0x0c}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d64c[] = +{ + {.src = 0x6021, .y = 0x0a, .x = 0x09}, + {.src = 0x6021, .y = 0x0a, .x = 0x0a}, + {.src = 0x6027, .y = 0x09, .x = 0x0a}, + {.src = 0x6021, .y = 0x09, .x = 0x0b}, + {.src = 0x6027, .y = 0x08, .x = 0x0b}, + {.src = 0x6027, .y = 0x07, .x = 0x0b}, + {.src = 0x6023, .y = 0x07, .x = 0x0c}, + {.src = 0x6027, .y = 0x08, .x = 0x0c}, + {.src = 0x6027, .y = 0x09, .x = 0x0c}, + {.src = 0x6027, .y = 0x0a, .x = 0x0c}, + {.src = 0x603b, .y = 0x0b, .x = 0x0c}, + {.src = 0x602c, .y = 0x0b, .x = 0x0d}, + {.src = 0x602d, .y = 0x0b, .x = 0x0e}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d680[] = +{ + {.src = 0x6021, .y = 0x0c, .x = 0x09}, + {.src = 0x6023, .y = 0x0c, .x = 0x0a}, + {.src = 0x6047, .y = 0x0d, .x = 0x0a}, + {.src = 0x6043, .y = 0x0d, .x = 0x0b}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d690[] = +{ + {.src = 0x6021, .y = 0x0c, .x = 0x09}, + {.src = 0x6023, .y = 0x0c, .x = 0x0a}, + {.src = 0x6047, .y = 0x0d, .x = 0x0a}, + {.src = 0x6023, .y = 0x0d, .x = 0x0b}, + {.src = 0x6027, .y = 0x0e, .x = 0x0b}, + {.src = 0x6047, .y = 0x0f, .x = 0x0b}, + {.src = 0x6021, .y = 0x0f, .x = 0x0c}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d6ac[] = +{ + {.src = 0x6021, .y = 0x0c, .x = 0x09}, + {.src = 0x6023, .y = 0x0c, .x = 0x0a}, + {.src = 0x6047, .y = 0x0d, .x = 0x0a}, + {.src = 0x6023, .y = 0x0d, .x = 0x0b}, + {.src = 0x6027, .y = 0x0e, .x = 0x0b}, + {.src = 0x6047, .y = 0x0f, .x = 0x0b}, + {.src = 0x6021, .y = 0x0f, .x = 0x0c}, + {.src = 0x6033, .y = 0x0e, .x = 0x0c}, + {.src = 0x6032, .y = 0x0d, .x = 0x0c}, + {.src = 0x6031, .y = 0x0c, .x = 0x0c}, + {.src = 0x6030, .y = 0x0b, .x = 0x0c}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d6d8[] = +{ + {.src = 0x6021, .y = 0x0c, .x = 0x09}, + {.src = 0x6023, .y = 0x0c, .x = 0x0a}, + {.src = 0x6047, .y = 0x0d, .x = 0x0a}, + {.src = 0x6023, .y = 0x0d, .x = 0x0b}, + {.src = 0x6027, .y = 0x0e, .x = 0x0b}, + {.src = 0x6047, .y = 0x0f, .x = 0x0b}, + {.src = 0x6021, .y = 0x0f, .x = 0x0c}, + {.src = 0x6033, .y = 0x0e, .x = 0x0c}, + {.src = 0x6032, .y = 0x0d, .x = 0x0c}, + {.src = 0x6031, .y = 0x0c, .x = 0x0c}, + {.src = 0x6030, .y = 0x0b, .x = 0x0c}, + {.src = 0x602c, .y = 0x0b, .x = 0x0d}, + {.src = 0x602d, .y = 0x0b, .x = 0x0e}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d70c[] = +{ + {.src = 0x6021, .y = 0x0e, .x = 0x09}, + {.src = 0x6021, .y = 0x0e, .x = 0x0a}, + {.src = 0x6027, .y = 0x0d, .x = 0x0a}, + {.src = 0x6043, .y = 0x0d, .x = 0x0b}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d71c[] = +{ + {.src = 0x6021, .y = 0x0e, .x = 0x09}, + {.src = 0x6021, .y = 0x0e, .x = 0x0a}, + {.src = 0x6027, .y = 0x0d, .x = 0x0a}, + {.src = 0x6023, .y = 0x0d, .x = 0x0b}, + {.src = 0x6027, .y = 0x0e, .x = 0x0b}, + {.src = 0x6047, .y = 0x0f, .x = 0x0b}, + {.src = 0x6021, .y = 0x0f, .x = 0x0c}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d738[] = +{ + {.src = 0x6021, .y = 0x0e, .x = 0x09}, + {.src = 0x6021, .y = 0x0e, .x = 0x0a}, + {.src = 0x6027, .y = 0x0d, .x = 0x0a}, + {.src = 0x6023, .y = 0x0d, .x = 0x0b}, + {.src = 0x6027, .y = 0x0e, .x = 0x0b}, + {.src = 0x6047, .y = 0x0f, .x = 0x0b}, + {.src = 0x6021, .y = 0x0f, .x = 0x0c}, + {.src = 0x6033, .y = 0x0e, .x = 0x0c}, + {.src = 0x6032, .y = 0x0d, .x = 0x0c}, + {.src = 0x6031, .y = 0x0c, .x = 0x0c}, + {.src = 0x6030, .y = 0x0b, .x = 0x0c}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d764[] = +{ + {.src = 0x6021, .y = 0x0e, .x = 0x09}, + {.src = 0x6021, .y = 0x0e, .x = 0x0a}, + {.src = 0x6027, .y = 0x0d, .x = 0x0a}, + {.src = 0x6023, .y = 0x0d, .x = 0x0b}, + {.src = 0x6027, .y = 0x0e, .x = 0x0b}, + {.src = 0x6047, .y = 0x0f, .x = 0x0b}, + {.src = 0x6021, .y = 0x0f, .x = 0x0c}, + {.src = 0x6033, .y = 0x0e, .x = 0x0c}, + {.src = 0x6032, .y = 0x0d, .x = 0x0c}, + {.src = 0x6031, .y = 0x0c, .x = 0x0c}, + {.src = 0x6030, .y = 0x0b, .x = 0x0c}, + {.src = 0x602c, .y = 0x0b, .x = 0x0d}, + {.src = 0x602d, .y = 0x0b, .x = 0x0e}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d798[] = +{ + {.src = 0x6021, .y = 0x10, .x = 0x09}, + {.src = 0x6023, .y = 0x10, .x = 0x0a}, + {.src = 0x6047, .y = 0x11, .x = 0x0a}, + {.src = 0x6021, .y = 0x11, .x = 0x0b}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d7a8[] = +{ + {.src = 0x6021, .y = 0x10, .x = 0x09}, + {.src = 0x6023, .y = 0x10, .x = 0x0a}, + {.src = 0x6047, .y = 0x11, .x = 0x0a}, + {.src = 0x6021, .y = 0x11, .x = 0x0b}, + {.src = 0x6027, .y = 0x10, .x = 0x0b}, + {.src = 0x6027, .y = 0x0f, .x = 0x0b}, + {.src = 0x6021, .y = 0x0f, .x = 0x0c}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d7c4[] = +{ + {.src = 0x6021, .y = 0x10, .x = 0x09}, + {.src = 0x6023, .y = 0x10, .x = 0x0a}, + {.src = 0x6047, .y = 0x11, .x = 0x0a}, + {.src = 0x6021, .y = 0x11, .x = 0x0b}, + {.src = 0x6027, .y = 0x10, .x = 0x0b}, + {.src = 0x6027, .y = 0x0f, .x = 0x0b}, + {.src = 0x6021, .y = 0x0f, .x = 0x0c}, + {.src = 0x6033, .y = 0x0e, .x = 0x0c}, + {.src = 0x6032, .y = 0x0d, .x = 0x0c}, + {.src = 0x6031, .y = 0x0c, .x = 0x0c}, + {.src = 0x6030, .y = 0x0b, .x = 0x0c}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d7f0[] = +{ + {.src = 0x6021, .y = 0x10, .x = 0x09}, + {.src = 0x6023, .y = 0x10, .x = 0x0a}, + {.src = 0x6047, .y = 0x11, .x = 0x0a}, + {.src = 0x6021, .y = 0x11, .x = 0x0b}, + {.src = 0x6027, .y = 0x10, .x = 0x0b}, + {.src = 0x6027, .y = 0x0f, .x = 0x0b}, + {.src = 0x6021, .y = 0x0f, .x = 0x0c}, + {.src = 0x6033, .y = 0x0e, .x = 0x0c}, + {.src = 0x6032, .y = 0x0d, .x = 0x0c}, + {.src = 0x6031, .y = 0x0c, .x = 0x0c}, + {.src = 0x6030, .y = 0x0b, .x = 0x0c}, + {.src = 0x602c, .y = 0x0b, .x = 0x0d}, + {.src = 0x602d, .y = 0x0b, .x = 0x0e}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d824[] = +{ + {.src = 0x602b, .y = 0x12, .x = 0x09}, + {.src = 0x602b, .y = 0x12, .x = 0x0a}, + {.src = 0x6027, .y = 0x11, .x = 0x0a}, + {.src = 0x6021, .y = 0x11, .x = 0x0b}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d834[] = +{ + {.src = 0x602b, .y = 0x12, .x = 0x09}, + {.src = 0x602b, .y = 0x12, .x = 0x0a}, + {.src = 0x6027, .y = 0x11, .x = 0x0a}, + {.src = 0x6021, .y = 0x11, .x = 0x0b}, + {.src = 0x6027, .y = 0x10, .x = 0x0b}, + {.src = 0x6027, .y = 0x0f, .x = 0x0b}, + {.src = 0x6021, .y = 0x0f, .x = 0x0c}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d850[] = +{ + {.src = 0x602b, .y = 0x12, .x = 0x09}, + {.src = 0x602b, .y = 0x12, .x = 0x0a}, + {.src = 0x6027, .y = 0x11, .x = 0x0a}, + {.src = 0x6021, .y = 0x11, .x = 0x0b}, + {.src = 0x6027, .y = 0x10, .x = 0x0b}, + {.src = 0x6027, .y = 0x0f, .x = 0x0b}, + {.src = 0x6021, .y = 0x0f, .x = 0x0c}, + {.src = 0x6033, .y = 0x0e, .x = 0x0c}, + {.src = 0x6032, .y = 0x0d, .x = 0x0c}, + {.src = 0x6031, .y = 0x0c, .x = 0x0c}, + {.src = 0x6030, .y = 0x0b, .x = 0x0c}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d87c[] = +{ + {.src = 0x602b, .y = 0x12, .x = 0x09}, + {.src = 0x602b, .y = 0x12, .x = 0x0a}, + {.src = 0x6027, .y = 0x11, .x = 0x0a}, + {.src = 0x6021, .y = 0x11, .x = 0x0b}, + {.src = 0x6027, .y = 0x10, .x = 0x0b}, + {.src = 0x6027, .y = 0x0f, .x = 0x0b}, + {.src = 0x6021, .y = 0x0f, .x = 0x0c}, + {.src = 0x6033, .y = 0x0e, .x = 0x0c}, + {.src = 0x6032, .y = 0x0d, .x = 0x0c}, + {.src = 0x6031, .y = 0x0c, .x = 0x0c}, + {.src = 0x6030, .y = 0x0b, .x = 0x0c}, + {.src = 0x602c, .y = 0x0b, .x = 0x0d}, + {.src = 0x602d, .y = 0x0b, .x = 0x0e}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d8b0[] = +{ + {.src = 0x6021, .y = 0x04, .x = 0x14}, + {.src = 0x6025, .y = 0x04, .x = 0x13}, + {.src = 0x6049, .y = 0x05, .x = 0x13}, + {.src = 0x6045, .y = 0x05, .x = 0x12}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d8c0[] = +{ + {.src = 0x6021, .y = 0x04, .x = 0x14}, + {.src = 0x6025, .y = 0x04, .x = 0x13}, + {.src = 0x6049, .y = 0x05, .x = 0x13}, + {.src = 0x6025, .y = 0x05, .x = 0x12}, + {.src = 0x6029, .y = 0x06, .x = 0x12}, + {.src = 0x6049, .y = 0x07, .x = 0x12}, + {.src = 0x6045, .y = 0x07, .x = 0x11}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d8dc[] = +{ + {.src = 0x6021, .y = 0x04, .x = 0x14}, + {.src = 0x6025, .y = 0x04, .x = 0x13}, + {.src = 0x6049, .y = 0x05, .x = 0x13}, + {.src = 0x6025, .y = 0x05, .x = 0x12}, + {.src = 0x6029, .y = 0x06, .x = 0x12}, + {.src = 0x6049, .y = 0x07, .x = 0x12}, + {.src = 0x6025, .y = 0x07, .x = 0x11}, + {.src = 0x6029, .y = 0x08, .x = 0x11}, + {.src = 0x6029, .y = 0x09, .x = 0x11}, + {.src = 0x6029, .y = 0x0a, .x = 0x11}, + {.src = 0x603c, .y = 0x0b, .x = 0x11}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d908[] = +{ + {.src = 0x6021, .y = 0x04, .x = 0x14}, + {.src = 0x6025, .y = 0x04, .x = 0x13}, + {.src = 0x6049, .y = 0x05, .x = 0x13}, + {.src = 0x6025, .y = 0x05, .x = 0x12}, + {.src = 0x6029, .y = 0x06, .x = 0x12}, + {.src = 0x6049, .y = 0x07, .x = 0x12}, + {.src = 0x6025, .y = 0x07, .x = 0x11}, + {.src = 0x6029, .y = 0x08, .x = 0x11}, + {.src = 0x6029, .y = 0x09, .x = 0x11}, + {.src = 0x6029, .y = 0x0a, .x = 0x11}, + {.src = 0x603c, .y = 0x0b, .x = 0x11}, + {.src = 0x602f, .y = 0x0b, .x = 0x10}, + {.src = 0x602e, .y = 0x0b, .x = 0x0f}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d93c[] = +{ + {.src = 0x6021, .y = 0x06, .x = 0x14}, + {.src = 0x6021, .y = 0x06, .x = 0x13}, + {.src = 0x6029, .y = 0x05, .x = 0x13}, + {.src = 0x6045, .y = 0x05, .x = 0x12}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d94c[] = +{ + {.src = 0x6021, .y = 0x06, .x = 0x14}, + {.src = 0x6021, .y = 0x06, .x = 0x13}, + {.src = 0x6029, .y = 0x05, .x = 0x13}, + {.src = 0x6025, .y = 0x05, .x = 0x12}, + {.src = 0x6029, .y = 0x06, .x = 0x12}, + {.src = 0x6049, .y = 0x07, .x = 0x12}, + {.src = 0x6045, .y = 0x07, .x = 0x11}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d968[] = +{ + {.src = 0x6021, .y = 0x06, .x = 0x14}, + {.src = 0x6021, .y = 0x06, .x = 0x13}, + {.src = 0x6029, .y = 0x05, .x = 0x13}, + {.src = 0x6025, .y = 0x05, .x = 0x12}, + {.src = 0x6029, .y = 0x06, .x = 0x12}, + {.src = 0x6049, .y = 0x07, .x = 0x12}, + {.src = 0x6025, .y = 0x07, .x = 0x11}, + {.src = 0x6029, .y = 0x08, .x = 0x11}, + {.src = 0x6029, .y = 0x09, .x = 0x11}, + {.src = 0x6029, .y = 0x0a, .x = 0x11}, + {.src = 0x603c, .y = 0x0b, .x = 0x11}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d994[] = +{ + {.src = 0x6021, .y = 0x06, .x = 0x14}, + {.src = 0x6021, .y = 0x06, .x = 0x13}, + {.src = 0x6029, .y = 0x05, .x = 0x13}, + {.src = 0x6025, .y = 0x05, .x = 0x12}, + {.src = 0x6029, .y = 0x06, .x = 0x12}, + {.src = 0x6049, .y = 0x07, .x = 0x12}, + {.src = 0x6025, .y = 0x07, .x = 0x11}, + {.src = 0x6029, .y = 0x08, .x = 0x11}, + {.src = 0x6029, .y = 0x09, .x = 0x11}, + {.src = 0x6029, .y = 0x0a, .x = 0x11}, + {.src = 0x603c, .y = 0x0b, .x = 0x11}, + {.src = 0x602f, .y = 0x0b, .x = 0x10}, + {.src = 0x602e, .y = 0x0b, .x = 0x0f}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d9c8[] = +{ + {.src = 0x6021, .y = 0x08, .x = 0x14}, + {.src = 0x6025, .y = 0x08, .x = 0x13}, + {.src = 0x6049, .y = 0x09, .x = 0x13}, + {.src = 0x6021, .y = 0x09, .x = 0x12}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d9d8[] = +{ + {.src = 0x6021, .y = 0x08, .x = 0x14}, + {.src = 0x6025, .y = 0x08, .x = 0x13}, + {.src = 0x6049, .y = 0x09, .x = 0x13}, + {.src = 0x6021, .y = 0x09, .x = 0x12}, + {.src = 0x6029, .y = 0x08, .x = 0x12}, + {.src = 0x6029, .y = 0x07, .x = 0x12}, + {.src = 0x6045, .y = 0x07, .x = 0x11}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860d9f4[] = +{ + {.src = 0x6021, .y = 0x08, .x = 0x14}, + {.src = 0x6025, .y = 0x08, .x = 0x13}, + {.src = 0x6049, .y = 0x09, .x = 0x13}, + {.src = 0x6021, .y = 0x09, .x = 0x12}, + {.src = 0x6029, .y = 0x08, .x = 0x12}, + {.src = 0x6029, .y = 0x07, .x = 0x12}, + {.src = 0x6025, .y = 0x07, .x = 0x11}, + {.src = 0x6029, .y = 0x08, .x = 0x11}, + {.src = 0x6029, .y = 0x09, .x = 0x11}, + {.src = 0x6029, .y = 0x0a, .x = 0x11}, + {.src = 0x603c, .y = 0x0b, .x = 0x11}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860da20[] = +{ + {.src = 0x6021, .y = 0x08, .x = 0x14}, + {.src = 0x6025, .y = 0x08, .x = 0x13}, + {.src = 0x6049, .y = 0x09, .x = 0x13}, + {.src = 0x6021, .y = 0x09, .x = 0x12}, + {.src = 0x6029, .y = 0x08, .x = 0x12}, + {.src = 0x6029, .y = 0x07, .x = 0x12}, + {.src = 0x6025, .y = 0x07, .x = 0x11}, + {.src = 0x6029, .y = 0x08, .x = 0x11}, + {.src = 0x6029, .y = 0x09, .x = 0x11}, + {.src = 0x6029, .y = 0x0a, .x = 0x11}, + {.src = 0x603c, .y = 0x0b, .x = 0x11}, + {.src = 0x602f, .y = 0x0b, .x = 0x10}, + {.src = 0x602e, .y = 0x0b, .x = 0x0f}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860da54[] = +{ + {.src = 0x6021, .y = 0x0a, .x = 0x14}, + {.src = 0x6021, .y = 0x0a, .x = 0x13}, + {.src = 0x6029, .y = 0x09, .x = 0x13}, + {.src = 0x6021, .y = 0x09, .x = 0x12}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860da64[] = +{ + {.src = 0x6021, .y = 0x0a, .x = 0x14}, + {.src = 0x6021, .y = 0x0a, .x = 0x13}, + {.src = 0x6029, .y = 0x09, .x = 0x13}, + {.src = 0x6021, .y = 0x09, .x = 0x12}, + {.src = 0x6029, .y = 0x08, .x = 0x12}, + {.src = 0x6029, .y = 0x07, .x = 0x12}, + {.src = 0x6045, .y = 0x07, .x = 0x11}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860da80[] = +{ + {.src = 0x6021, .y = 0x0a, .x = 0x14}, + {.src = 0x6021, .y = 0x0a, .x = 0x13}, + {.src = 0x6029, .y = 0x09, .x = 0x13}, + {.src = 0x6021, .y = 0x09, .x = 0x12}, + {.src = 0x6029, .y = 0x08, .x = 0x12}, + {.src = 0x6029, .y = 0x07, .x = 0x12}, + {.src = 0x6025, .y = 0x07, .x = 0x11}, + {.src = 0x6029, .y = 0x08, .x = 0x11}, + {.src = 0x6029, .y = 0x09, .x = 0x11}, + {.src = 0x6029, .y = 0x0a, .x = 0x11}, + {.src = 0x603c, .y = 0x0b, .x = 0x11}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860daac[] = +{ + {.src = 0x6021, .y = 0x0a, .x = 0x14}, + {.src = 0x6021, .y = 0x0a, .x = 0x13}, + {.src = 0x6029, .y = 0x09, .x = 0x13}, + {.src = 0x6021, .y = 0x09, .x = 0x12}, + {.src = 0x6029, .y = 0x08, .x = 0x12}, + {.src = 0x6029, .y = 0x07, .x = 0x12}, + {.src = 0x6025, .y = 0x07, .x = 0x11}, + {.src = 0x6029, .y = 0x08, .x = 0x11}, + {.src = 0x6029, .y = 0x09, .x = 0x11}, + {.src = 0x6029, .y = 0x0a, .x = 0x11}, + {.src = 0x603c, .y = 0x0b, .x = 0x11}, + {.src = 0x602f, .y = 0x0b, .x = 0x10}, + {.src = 0x602e, .y = 0x0b, .x = 0x0f}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860dae0[] = +{ + {.src = 0x6021, .y = 0x0c, .x = 0x14}, + {.src = 0x6025, .y = 0x0c, .x = 0x13}, + {.src = 0x6049, .y = 0x0d, .x = 0x13}, + {.src = 0x6045, .y = 0x0d, .x = 0x12}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860daf0[] = +{ + {.src = 0x6021, .y = 0x0c, .x = 0x14}, + {.src = 0x6025, .y = 0x0c, .x = 0x13}, + {.src = 0x6049, .y = 0x0d, .x = 0x13}, + {.src = 0x6025, .y = 0x0d, .x = 0x12}, + {.src = 0x6029, .y = 0x0e, .x = 0x12}, + {.src = 0x6049, .y = 0x0f, .x = 0x12}, + {.src = 0x6021, .y = 0x0f, .x = 0x11}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860db0c[] = +{ + {.src = 0x6021, .y = 0x0c, .x = 0x14}, + {.src = 0x6025, .y = 0x0c, .x = 0x13}, + {.src = 0x6049, .y = 0x0d, .x = 0x13}, + {.src = 0x6025, .y = 0x0d, .x = 0x12}, + {.src = 0x6029, .y = 0x0e, .x = 0x12}, + {.src = 0x6049, .y = 0x0f, .x = 0x12}, + {.src = 0x6021, .y = 0x0f, .x = 0x11}, + {.src = 0x6038, .y = 0x0e, .x = 0x11}, + {.src = 0x6037, .y = 0x0d, .x = 0x11}, + {.src = 0x6036, .y = 0x0c, .x = 0x11}, + {.src = 0x6035, .y = 0x0b, .x = 0x11}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860db38[] = +{ + {.src = 0x6021, .y = 0x0c, .x = 0x14}, + {.src = 0x6025, .y = 0x0c, .x = 0x13}, + {.src = 0x6049, .y = 0x0d, .x = 0x13}, + {.src = 0x6025, .y = 0x0d, .x = 0x12}, + {.src = 0x6029, .y = 0x0e, .x = 0x12}, + {.src = 0x6049, .y = 0x0f, .x = 0x12}, + {.src = 0x6021, .y = 0x0f, .x = 0x11}, + {.src = 0x6038, .y = 0x0e, .x = 0x11}, + {.src = 0x6037, .y = 0x0d, .x = 0x11}, + {.src = 0x6036, .y = 0x0c, .x = 0x11}, + {.src = 0x6035, .y = 0x0b, .x = 0x11}, + {.src = 0x602f, .y = 0x0b, .x = 0x10}, + {.src = 0x602e, .y = 0x0b, .x = 0x0f}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860db6c[] = +{ + {.src = 0x6021, .y = 0x0e, .x = 0x14}, + {.src = 0x6021, .y = 0x0e, .x = 0x13}, + {.src = 0x6029, .y = 0x0d, .x = 0x13}, + {.src = 0x6045, .y = 0x0d, .x = 0x12}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860db7c[] = +{ + {.src = 0x6021, .y = 0x0e, .x = 0x14}, + {.src = 0x6021, .y = 0x0e, .x = 0x13}, + {.src = 0x6029, .y = 0x0d, .x = 0x13}, + {.src = 0x6025, .y = 0x0d, .x = 0x12}, + {.src = 0x6029, .y = 0x0e, .x = 0x12}, + {.src = 0x6049, .y = 0x0f, .x = 0x12}, + {.src = 0x6021, .y = 0x0f, .x = 0x11}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860db98[] = +{ + {.src = 0x6021, .y = 0x0e, .x = 0x14}, + {.src = 0x6021, .y = 0x0e, .x = 0x13}, + {.src = 0x6029, .y = 0x0d, .x = 0x13}, + {.src = 0x6025, .y = 0x0d, .x = 0x12}, + {.src = 0x6029, .y = 0x0e, .x = 0x12}, + {.src = 0x6049, .y = 0x0f, .x = 0x12}, + {.src = 0x6021, .y = 0x0f, .x = 0x11}, + {.src = 0x6038, .y = 0x0e, .x = 0x11}, + {.src = 0x6037, .y = 0x0d, .x = 0x11}, + {.src = 0x6036, .y = 0x0c, .x = 0x11}, + {.src = 0x6035, .y = 0x0b, .x = 0x11}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860dbc4[] = +{ + {.src = 0x6021, .y = 0x0e, .x = 0x14}, + {.src = 0x6021, .y = 0x0e, .x = 0x13}, + {.src = 0x6029, .y = 0x0d, .x = 0x13}, + {.src = 0x6025, .y = 0x0d, .x = 0x12}, + {.src = 0x6029, .y = 0x0e, .x = 0x12}, + {.src = 0x6049, .y = 0x0f, .x = 0x12}, + {.src = 0x6021, .y = 0x0f, .x = 0x11}, + {.src = 0x6038, .y = 0x0e, .x = 0x11}, + {.src = 0x6037, .y = 0x0d, .x = 0x11}, + {.src = 0x6036, .y = 0x0c, .x = 0x11}, + {.src = 0x6035, .y = 0x0b, .x = 0x11}, + {.src = 0x602f, .y = 0x0b, .x = 0x10}, + {.src = 0x602e, .y = 0x0b, .x = 0x0f}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860dbf8[] = +{ + {.src = 0x6021, .y = 0x10, .x = 0x14}, + {.src = 0x6025, .y = 0x10, .x = 0x13}, + {.src = 0x6049, .y = 0x11, .x = 0x13}, + {.src = 0x6021, .y = 0x11, .x = 0x12}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860dc08[] = +{ + {.src = 0x6021, .y = 0x10, .x = 0x14}, + {.src = 0x6025, .y = 0x10, .x = 0x13}, + {.src = 0x6049, .y = 0x11, .x = 0x13}, + {.src = 0x6021, .y = 0x11, .x = 0x12}, + {.src = 0x6029, .y = 0x10, .x = 0x12}, + {.src = 0x6029, .y = 0x0f, .x = 0x12}, + {.src = 0x6021, .y = 0x0f, .x = 0x11}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860dc24[] = +{ + {.src = 0x6021, .y = 0x10, .x = 0x14}, + {.src = 0x6025, .y = 0x10, .x = 0x13}, + {.src = 0x6049, .y = 0x11, .x = 0x13}, + {.src = 0x6021, .y = 0x11, .x = 0x12}, + {.src = 0x6029, .y = 0x10, .x = 0x12}, + {.src = 0x6029, .y = 0x0f, .x = 0x12}, + {.src = 0x6021, .y = 0x0f, .x = 0x11}, + {.src = 0x6038, .y = 0x0e, .x = 0x11}, + {.src = 0x6037, .y = 0x0d, .x = 0x11}, + {.src = 0x6036, .y = 0x0c, .x = 0x11}, + {.src = 0x6035, .y = 0x0b, .x = 0x11}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860dc50[] = +{ + {.src = 0x6021, .y = 0x10, .x = 0x14}, + {.src = 0x6025, .y = 0x10, .x = 0x13}, + {.src = 0x6049, .y = 0x11, .x = 0x13}, + {.src = 0x6021, .y = 0x11, .x = 0x12}, + {.src = 0x6029, .y = 0x10, .x = 0x12}, + {.src = 0x6029, .y = 0x0f, .x = 0x12}, + {.src = 0x6021, .y = 0x0f, .x = 0x11}, + {.src = 0x6038, .y = 0x0e, .x = 0x11}, + {.src = 0x6037, .y = 0x0d, .x = 0x11}, + {.src = 0x6036, .y = 0x0c, .x = 0x11}, + {.src = 0x6035, .y = 0x0b, .x = 0x11}, + {.src = 0x602f, .y = 0x0b, .x = 0x10}, + {.src = 0x602e, .y = 0x0b, .x = 0x0f}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860dc84[] = +{ + {.src = 0x602b, .y = 0x12, .x = 0x14}, + {.src = 0x602b, .y = 0x12, .x = 0x13}, + {.src = 0x6029, .y = 0x11, .x = 0x13}, + {.src = 0x6021, .y = 0x11, .x = 0x12}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860dc94[] = +{ + {.src = 0x602b, .y = 0x12, .x = 0x14}, + {.src = 0x602b, .y = 0x12, .x = 0x13}, + {.src = 0x6029, .y = 0x11, .x = 0x13}, + {.src = 0x6021, .y = 0x11, .x = 0x12}, + {.src = 0x6029, .y = 0x10, .x = 0x12}, + {.src = 0x6029, .y = 0x0f, .x = 0x12}, + {.src = 0x6021, .y = 0x0f, .x = 0x11}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860dcb0[] = +{ + {.src = 0x602b, .y = 0x12, .x = 0x14}, + {.src = 0x602b, .y = 0x12, .x = 0x13}, + {.src = 0x6029, .y = 0x11, .x = 0x13}, + {.src = 0x6021, .y = 0x11, .x = 0x12}, + {.src = 0x6029, .y = 0x10, .x = 0x12}, + {.src = 0x6029, .y = 0x0f, .x = 0x12}, + {.src = 0x6021, .y = 0x0f, .x = 0x11}, + {.src = 0x6038, .y = 0x0e, .x = 0x11}, + {.src = 0x6037, .y = 0x0d, .x = 0x11}, + {.src = 0x6036, .y = 0x0c, .x = 0x11}, + {.src = 0x6035, .y = 0x0b, .x = 0x11}, +}; + +static const struct UnkStruct_860DD10 gUnknown_0860dcdc[] = +{ + {.src = 0x602b, .y = 0x12, .x = 0x14}, + {.src = 0x602b, .y = 0x12, .x = 0x13}, + {.src = 0x6029, .y = 0x11, .x = 0x13}, + {.src = 0x6021, .y = 0x11, .x = 0x12}, + {.src = 0x6029, .y = 0x10, .x = 0x12}, + {.src = 0x6029, .y = 0x0f, .x = 0x12}, + {.src = 0x6021, .y = 0x0f, .x = 0x11}, + {.src = 0x6038, .y = 0x0e, .x = 0x11}, + {.src = 0x6037, .y = 0x0d, .x = 0x11}, + {.src = 0x6036, .y = 0x0c, .x = 0x11}, + {.src = 0x6035, .y = 0x0b, .x = 0x11}, + {.src = 0x602f, .y = 0x0b, .x = 0x10}, + {.src = 0x602e, .y = 0x0b, .x = 0x0f}, +}; + +static const struct UnkStruct_860DD10 * const gUnknown_0860DD10[][4] = +{ + {gUnknown_0860d450, gUnknown_0860d460, gUnknown_0860d47c, gUnknown_0860d4a8}, + {gUnknown_0860dc84, gUnknown_0860dc94, gUnknown_0860dcb0, gUnknown_0860dcdc}, + {gUnknown_0860d8b0, gUnknown_0860d8c0, gUnknown_0860d8dc, gUnknown_0860d908}, + {gUnknown_0860d824, gUnknown_0860d834, gUnknown_0860d850, gUnknown_0860d87c}, + {gUnknown_0860d5f4, gUnknown_0860d604, gUnknown_0860d620, gUnknown_0860d64c}, + {gUnknown_0860dae0, gUnknown_0860daf0, gUnknown_0860db0c, gUnknown_0860db38}, + {gUnknown_0860da54, gUnknown_0860da64, gUnknown_0860da80, gUnknown_0860daac}, + {gUnknown_0860d680, gUnknown_0860d690, gUnknown_0860d6ac, gUnknown_0860d6d8}, + {gUnknown_0860d4dc, gUnknown_0860d4ec, gUnknown_0860d508, gUnknown_0860d534}, + {gUnknown_0860dbf8, gUnknown_0860dc08, gUnknown_0860dc24, gUnknown_0860dc50}, + {gUnknown_0860d93c, gUnknown_0860d94c, gUnknown_0860d968, gUnknown_0860d994}, + {gUnknown_0860d798, gUnknown_0860d7a8, gUnknown_0860d7c4, gUnknown_0860d7f0}, + {gUnknown_0860d568, gUnknown_0860d578, gUnknown_0860d594, gUnknown_0860d5c0}, + {gUnknown_0860db6c, gUnknown_0860db7c, gUnknown_0860db98, gUnknown_0860dbc4}, + {gUnknown_0860d9c8, gUnknown_0860d9d8, gUnknown_0860d9f4, gUnknown_0860da20}, + {gUnknown_0860d70c, gUnknown_0860d71c, gUnknown_0860d738, gUnknown_0860d764}, +}; + +static const u8 gUnknown_0860DE10[][4] = +{ + {0x04, 0x07, 0x0b, 0x0d}, + {0x04, 0x07, 0x0b, 0x0d}, + {0x04, 0x07, 0x0b, 0x0d}, + {0x04, 0x07, 0x0b, 0x0d}, + {0x04, 0x07, 0x0b, 0x0d}, + {0x04, 0x07, 0x0b, 0x0d}, + {0x04, 0x07, 0x0b, 0x0d}, + {0x04, 0x07, 0x0b, 0x0d}, + {0x04, 0x07, 0x0b, 0x0d}, + {0x04, 0x07, 0x0b, 0x0d}, + {0x04, 0x07, 0x0b, 0x0d}, + {0x04, 0x07, 0x0b, 0x0d}, + {0x04, 0x07, 0x0b, 0x0d}, + {0x04, 0x07, 0x0b, 0x0d}, + {0x04, 0x07, 0x0b, 0x0d}, + {0x04, 0x07, 0x0b, 0x0d}, +}; + // code void CallBattleDomeFunction(void) { -- cgit v1.2.3 From 78cad0dee52e69ab7cca6b8ddc793820697ba01f Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 26 Aug 2018 15:27:06 +0200 Subject: try battle tent and fail --- src/battle_dome.c | 20 ++------ src/battle_frontier_1.c | 118 ++++++++++++++++++++++++++++++++++++++++++++++++ src/battle_tent.c | 83 +++++++++++++++++++++++++++++++--- src/field_specials.c | 6 +-- src/pokemon.c | 9 ++-- src/unk_text_util_2.c | 1 + 6 files changed, 208 insertions(+), 29 deletions(-) create mode 100644 src/battle_frontier_1.c (limited to 'src') diff --git a/src/battle_dome.c b/src/battle_dome.c index 058d253ab..c54b14ccc 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -39,15 +39,6 @@ #define DOME_FINAL 3 #define DOME_ROUNDS_COUNT 4 -struct FacilityMon -{ - u16 species; - u16 moves[4]; - u8 itemTableId; - u8 evSpread; - u8 nature; -}; - struct BattleDomeStruct { u8 arr[DOME_TOURNAMENT_TRAINERS_COUNT]; @@ -66,7 +57,7 @@ extern void sub_81B8558(void); extern u32 sub_81A39C4(void); extern u16 sub_8162548(u8, u8); extern u16 RandomizeFacilityTrainerMonId(u16); -extern u8 GetFrontierEnemyMonLevel(void); +extern u8 GetFacilityEnemyMonLevel(void); extern u16 sub_81A5060(u8 monId, u8 moveSlotId); extern u8 sub_81A50F0(u8, u8); extern u8 sub_81A50B0(u8); @@ -87,7 +78,6 @@ extern u16 gBattle_BG2_X; extern u16 gBattle_BG2_Y; extern u16 gBattle_BG3_X; extern u16 gBattle_BG3_Y; -extern const struct FacilityMon *gFacilityTrainerMons; extern void (* const gUnknown_0860D090[])(void); extern const u32 gUnknown_0860D0EC[][2]; @@ -822,7 +812,7 @@ void InitDomeTrainers(void) monTypesBits >>= 1; } - monLevel = GetFrontierEnemyMonLevel(); + monLevel = GetFacilityEnemyMonLevel(); statSums[0] += (monTypesCount * monLevel) / 20; for (i = 1; i < DOME_TOURNAMENT_TRAINERS_COUNT; i++) @@ -995,7 +985,7 @@ static void CreateDomeMon(u8 monPartyId, u16 tournamentTrainerId, u8 tournamentM s32 i; u8 happiness = 0xFF; u8 fixedIv = GetDomeTrainerMonIvs(tournamentTrainerId); // BUG: Should be using trainerId instead of tournamentTrainerId. As a result, all Pokemon have ivs of 3. - u8 level = GetFrontierEnemyMonLevel(); + u8 level = GetFacilityEnemyMonLevel(); CreateMonWithEVSpreadPersonalityOTID(&gEnemyParty[monPartyId], gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][tournamentMonId]].species, level, @@ -3716,7 +3706,7 @@ static u16 GetWinningMove(s32 winnerTournamentId, s32 loserTournamentId, u8 roun u16 bestScore = 0; u16 bestId = 0; s32 movePower = 0; - GetFrontierEnemyMonLevel(); // Unused return variable. + GetFacilityEnemyMonLevel(); // Unused return variable. // Calc move points of all 4 moves for all 3 pokemon hitting all 3 target mons. for (i = 0; i < 3; i++) @@ -4580,7 +4570,7 @@ static void DecideRoundWinners(u8 roundId) static void CopyDomeTrainerName(u8 *dst, u16 trainerId) { s32 i = 0; - GetFrontierEnemyMonLevel(); // Unused return value. + GetFacilityEnemyMonLevel(); // Unused return value. if (trainerId == TRAINER_FRONTIER_BRAIN) { diff --git a/src/battle_frontier_1.c b/src/battle_frontier_1.c new file mode 100644 index 000000000..ee8a42954 --- /dev/null +++ b/src/battle_frontier_1.c @@ -0,0 +1,118 @@ +#include "global.h" +#include "event_data.h" +#include "battle_setup.h" +#include "overworld.h" +#include "random.h" +#include "battle_tower.h" + +extern void sub_8162614(u16, u8); + +extern void (* const gUnknown_0860DE50[])(void); +extern const u32 gUnknown_0860DE98[][2]; +extern const u32 gUnknown_0860DEA8[][2]; + +// code +void sub_8195960(void) +{ + gUnknown_0860DE50[gSpecialVar_0x8004](); +} + +void sub_8195980(void) +{ + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + + gSaveBlock2Ptr->frontier.field_CA8 = 0; + gSaveBlock2Ptr->frontier.field_CB2 = 0; + gSaveBlock2Ptr->frontier.field_CA9_a = 0; + gSaveBlock2Ptr->frontier.field_CA9_b = 0; + if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860DE98[battleMode][lvlMode])) + gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode] = 0; + + saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); + gTrainerBattleOpponent_A = 0; +} + +void sub_8195A38(void) +{ + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + + switch (gSpecialVar_0x8005) + { + case 0: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_DC4[1]; + break; + case 1: + gSpecialVar_Result = gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode]; + break; + case 2: + gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_0860DE98[battleMode][lvlMode]) != 0); + break; + } +} + +void sub_8195AE4(void) +{ + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + + switch (gSpecialVar_0x8005) + { + case 0: + gSaveBlock2Ptr->frontier.field_DC4[1] = gSpecialVar_0x8006; + break; + case 1: + gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode] = gSpecialVar_0x8006; + break; + case 2: + if (gSpecialVar_0x8006) + gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_0860DE98[battleMode][lvlMode]; + else + gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_0860DEA8[battleMode][lvlMode]; + break; + } +} + +void sub_8195BB0(void) +{ + u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + + if (gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode] < 50) + gSpecialVar_Result = Random() % 3; + else if (gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode] < 99) + gSpecialVar_Result = 3; + else + gSpecialVar_Result = 4; +} + +void sub_8195C20(void) +{ + gTrainerBattleOpponent_A = 5 *(Random() % 255) / 64u; + sub_8162614(gTrainerBattleOpponent_A, 0); +} + +void sub_8195C50(void) +{ + if (gTrainerBattleOpponent_A < 300) + ConvertBattleFrontierTrainerSpeechToString(gFacilityTrainers[gTrainerBattleOpponent_A].speechBefore); +} + +/* +void sub_8195C7C(void) +{ + u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + + if (gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode] < 9999) + { + u16 wat = 0; + gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode]++; + if (lvlMode < gSaveBlock2Ptr->frontier.field_DD0[battleMode][lvlMode]) + wat = 1; + if (gSaveBlock2Ptr->frontier.field_DC8[battleMode][wat] != 0) + gSaveBlock2Ptr->frontier.field_DD0[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.field_DC8[battleMode][lvlMode]; + } +} +*/ diff --git a/src/battle_tent.c b/src/battle_tent.c index dbea37fb7..f39bf8837 100644 --- a/src/battle_tent.c +++ b/src/battle_tent.c @@ -11,6 +11,10 @@ #include "constants/items.h" #include "constants/region_map_sections.h" +extern const struct BattleFrontierTrainer gSlateportBattleTentTrainers[]; +extern const struct FacilityMon gSlateportBattleTentMons[]; +extern const u16 gBattleFrontierHeldItems[]; + // This file's functions. void sub_81B99D4(void); void sub_81B9A28(void); @@ -51,7 +55,7 @@ void (*const gUnknown_086160B4[])(void) = sub_81B9B28 }; -const u16 gUnknown_086160D4[] = {ITEM_NEST_BALL, ITEM_NONE}; +static const u16 sVerdanturfTentRewards[] = {ITEM_NEST_BALL}; void (*const gUnknown_086160D8[])(void) = { @@ -64,7 +68,7 @@ void (*const gUnknown_086160D8[])(void) = sub_81B9CF0 }; -const u16 gUnknown_086160F4[] = {ITEM_HYPER_POTION, ITEM_NONE}; +static const u16 sFallarborTentRewards[] = {ITEM_HYPER_POTION}; void (*const gUnknown_086160F8[])(void) = { @@ -80,7 +84,7 @@ void (*const gUnknown_086160F8[])(void) = sub_81B9EC0 }; -const u16 gUnknown_08616120[] = {ITEM_FULL_HEAL, ITEM_NONE}; +static const u16 sSlateportTentRewards[] = {ITEM_FULL_HEAL}; // code void sub_81B99B4(void) @@ -128,7 +132,7 @@ void sub_81B9ABC(void) void sub_81B9B00(void) { - gSaveBlock2Ptr->frontier.field_E6A = gUnknown_086160D4[Random() % 1]; + gSaveBlock2Ptr->frontier.field_E6A = sVerdanturfTentRewards[Random() % ARRAY_COUNT(sVerdanturfTentRewards)]; } void sub_81B9B28(void) @@ -178,7 +182,7 @@ void sub_81B9C2C(void) void sub_81B9C70(void) { - gSaveBlock2Ptr->frontier.field_E6C = gUnknown_086160F4[Random() % 1]; + gSaveBlock2Ptr->frontier.field_E6C = sFallarborTentRewards[Random() % ARRAY_COUNT(sFallarborTentRewards)]; } void sub_81B9C98(void) @@ -233,7 +237,7 @@ void sub_81B9DB4(void) void sub_81B9DF8(void) { - gSaveBlock2Ptr->frontier.field_E6E = gUnknown_08616120[Random() % 1]; + gSaveBlock2Ptr->frontier.field_E6E = sSlateportTentRewards[Random() % ARRAY_COUNT(sSlateportTentRewards)]; } void sub_81B9E20(void) @@ -266,3 +270,70 @@ bool8 sub_81B9E94(void) return (gMapHeader.regionMapSectionId == MAPSEC_SLATEPORT_CITY && ((gMapHeader.mapLayoutId == 385) | (gMapHeader.mapLayoutId == 386))); } + +// This function was written very...oddly. +/* +void sub_81B9EC0(void) +{ + s32 i, j; + u16 currMonId, currSpecies; + u16 species[PARTY_SIZE]; + u16 monIds[PARTY_SIZE]; + u16 heldItems[PARTY_SIZE]; + s32 var; + + gFacilityTrainers = gSlateportBattleTentTrainers; + for (i = 0; i < PARTY_SIZE; i++) + { + species[i] = 0; + monIds[i] = 0; + heldItems[i] = 0; + } + gFacilityTrainerMons = gSlateportBattleTentMons; + + currSpecies = 0; + i = 0; + while (i != PARTY_SIZE) + { + // Cannot have two pokemon of the same species. + currMonId = Random() % 70; + j = 0; + var = 0 + i; + while (j < var && monIds[j] != currMonId) + { + if (species[j] == gFacilityTrainerMons[currMonId].species) + { + if (currSpecies == 0) + currSpecies = gFacilityTrainerMons[currMonId].species; + else + break; + } + j++; + } + if (j != var) + continue; + + // Cannot have two same held items. + for (j = 0; j < var; j++) + { + if (heldItems[j] == 0) + continue; + if (heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[currMonId].itemTableId]) + { + if (gFacilityTrainerMons[currMonId].species == currSpecies) + currSpecies = 0; + else + break; + } + } + if (j != var) + continue; + + gSaveBlock2Ptr->frontier.field_E70[var].monId = currMonId; + species[var] = gFacilityTrainerMons[currMonId].species; + heldItems[var] = gBattleFrontierHeldItems[gFacilityTrainerMons[currMonId].itemTableId]; + monIds[var] = currMonId; + i++; + } +} +*/ diff --git a/src/field_specials.c b/src/field_specials.c index f5728c3a4..84852e6b5 100644 --- a/src/field_specials.c +++ b/src/field_specials.c @@ -2188,13 +2188,13 @@ void sub_8139F20(void) } break; case 6: - if (gSaveBlock2Ptr->frontier.field_DC8[0] >= gSaveBlock2Ptr->frontier.field_DC8[1]) + if (gSaveBlock2Ptr->frontier.field_DC8[0][0] >= gSaveBlock2Ptr->frontier.field_DC8[0][1]) { - unk = gSaveBlock2Ptr->frontier.field_DC8[0]; + unk = gSaveBlock2Ptr->frontier.field_DC8[0][0]; } else { - unk = gSaveBlock2Ptr->frontier.field_DC8[1]; + unk = gSaveBlock2Ptr->frontier.field_DC8[0][1]; } break; case 7: diff --git a/src/pokemon.c b/src/pokemon.c index eafb0c2cd..9022f69ea 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -81,8 +81,7 @@ extern void set_unknown_box_id(u8); extern void sub_803FA70(u8 battlerId); extern u8 sav1_map_get_name(void); extern const u8 *sub_81A1650(u8, u8 language); -extern u8 BattleFrontierGetOpponentLvl(u8); -extern u16 FacilityClassToPicIndex(u16); +extern u8 GetFrontierEnemyMonLevel(u8); extern bool8 InBattlePyramid(void); extern bool8 InBattlePike(void); extern bool8 sub_806F104(void); @@ -956,7 +955,7 @@ const u16 gHoennToNationalOrder[] = // Assigns Hoenn Dex Pokémon (Using Nationa NATIONAL_DEX_BLAZIKEN, // HOENN_DEX_BLAZIKEN NATIONAL_DEX_MUDKIP, // HOENN_DEX_MUDKIP NATIONAL_DEX_MARSHTOMP, // HOENN_DEX_MARSHTOMP - NATIONAL_DEX_SWAMPERT, // HOENN_DEX_SWAMPERT + NATIONAL_DEX_SWAMPERT, // HOENN_DEX_SWAMPERT NATIONAL_DEX_POOCHYENA, // HOENN_DEX_POOCHYENA NATIONAL_DEX_MIGHTYENA, // HOENN_DEX_MIGHTYENA NATIONAL_DEX_ZIGZAGOON, // HOENN_DEX_ZIGZAGOON @@ -2821,7 +2820,7 @@ void sub_8068338(struct Pokemon *mon, struct UnknownPokemonStruct *src, bool8 lv u8 value; if (gSaveBlock2Ptr->frontier.lvlMode != FRONTIER_LVL_50) - level = BattleFrontierGetOpponentLvl(gSaveBlock2Ptr->frontier.lvlMode); + level = GetFrontierEnemyMonLevel(gSaveBlock2Ptr->frontier.lvlMode); else if (lvl50) level = 50; else @@ -2885,7 +2884,7 @@ void sub_8068528(struct Pokemon *mon, const struct UnknownPokemonStruct2 *src, u CreateMon(mon, src->mons[monId].species, - BattleFrontierGetOpponentLvl(src->field_0_1 - 1), + GetFrontierEnemyMonLevel(src->field_0_1 - 1), 0x1F, TRUE, personality, diff --git a/src/unk_text_util_2.c b/src/unk_text_util_2.c index ca8246128..4821ed776 100644 --- a/src/unk_text_util_2.c +++ b/src/unk_text_util_2.c @@ -4,6 +4,7 @@ #include "text.h" #include "sound.h" +ALIGNED(4) static const u8 sUnknown_08616124[] = {1, 2, 4}; static const u16 sFont6BrailleGlyphs[] = INCBIN_U16("data/graphics/fonts/font6.fwjpnfont"); -- cgit v1.2.3 From df3af2d9e1d224516615d79e28c9020c98f6bbaa Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 26 Aug 2018 15:51:14 +0200 Subject: Clean up battle dome code a bit --- src/battle_dome.c | 225 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 116 insertions(+), 109 deletions(-) (limited to 'src') diff --git a/src/battle_dome.c b/src/battle_dome.c index 0087bd728..104c9fe9b 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -80,7 +80,6 @@ extern u16 gBattle_BG3_X; extern u16 gBattle_BG3_Y; extern const u16 gBattleFrontierHeldItems[]; -extern const u8 gUnknown_08D83900[]; extern const struct FacilityMon gBattleFrontierMons[]; extern const struct BattleFrontierTrainer gBattleFrontierTrainers[]; extern const struct SpriteTemplate gUnknown_0860CFA8; @@ -97,6 +96,7 @@ extern const u8 gUnknown_08D82F10[]; extern const u8 gUnknown_08D834FC[]; extern const u8 gUnknown_08D83B2C[]; extern const u8 gUnknown_08D83C3C[]; +extern const u8 gUnknown_08D83900[]; extern const u8 gBattleFrontierGfx_DomeOptions[]; // text @@ -229,7 +229,7 @@ static s32 sub_818FEB4(s32 *arr, bool8 arg1); static void sub_8190400(u8 taskId); static void sub_8190CD4(u8 taskId); static u8 sub_819221C(u8 taskId); -void sub_8194D48(void); +static void sub_8194D48(void); static s32 TrainerIdToTournamentId(u16 trainerId); static u16 TrainerIdOfPlayerOpponent(void); static void sub_8194220(u8 taskId); @@ -249,32 +249,30 @@ static u8 sub_8193BDC(u8 taskId); static void DecideRoundWinners(u8 roundId); static u8 sub_81953E8(u8 tournamentId, u8); static void sub_81948EC(u8, u8); - -void sub_8190B40(struct Sprite *sprite); -void sub_8190C6C(struct Sprite *sprite); - -void sub_818E9CC(void); -void sub_818EA84(void); -void sub_818ED28(void); -void sub_818F9B0(void); -void sub_818F9E0(void); -void sub_818FA20(void); -void ShowDomeOpponentInfo(void); -void sub_81938A4(void); -void sub_81938E0(void); -void sub_8190298(void); -void sub_81902E4(void); -void sub_8193D40(void); -void sub_8193D7C(void); -void sub_81902F8(void); -void sub_819033C(void); -void sub_8194D68(void); -void sub_8194E44(void); -void sub_8194EB4(void); -void sub_8194EC0(void); -void sub_8194EF8(void); -void sub_8194F58(void); -void InitDomeTrainers(void); +static void sub_8190B40(struct Sprite *sprite); +static void sub_8190C6C(struct Sprite *sprite); +static void sub_818E9CC(void); +static void sub_818EA84(void); +static void sub_818ED28(void); +static void sub_818F9B0(void); +static void sub_818F9E0(void); +static void sub_818FA20(void); +static void ShowDomeOpponentInfo(void); +static void sub_81938A4(void); +static void sub_81938E0(void); +static void sub_8190298(void); +static void sub_81902E4(void); +static void sub_8193D40(void); +static void sub_8193D7C(void); +static void sub_81902F8(void); +static void sub_819033C(void); +static void sub_8194D68(void); +static void sub_8194E44(void); +static void sub_8194EB4(void); +static void sub_8194EC0(void); +static void sub_8194EF8(void); +static void sub_8194F58(void); +static void InitDomeTrainers(void); // EWRAM variables. EWRAM_DATA u32 gUnknown_0203CD70 = 0; @@ -283,7 +281,6 @@ static EWRAM_DATA struct BattleDomeStruct *sBattleDomeStruct = {0}; static EWRAM_DATA u8 *sTilemapBuffer = NULL; // Const rom data. - static const u8 sMovePointsForDomeTrainers[MOVES_COUNT][DOME_TOURNAMENT_TRAINERS_COUNT] = { [MOVE_NONE] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, @@ -643,7 +640,7 @@ static const u8 sMovePointsForDomeTrainers[MOVES_COUNT][DOME_TOURNAMENT_TRAINERS [MOVE_PSYCHO_BOOST] = {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1}, }; -static const u8 gUnknown_0860C988[31][16] = +static const u8 gUnknown_0860C988[][DOME_TOURNAMENT_TRAINERS_COUNT] = { {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 2, 0, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0}, @@ -724,7 +721,6 @@ static const u8 gUnknown_0860CBF1[][5][4]= {{0xff, 0xff, 0xff, 0xff}, {0xff, 0xff, 0xff, 0xff}, {0xff, 0xff, 0xff, 0xff}, {0xff, 0xff, 0x1c, 0x1d}, {0xff, 0xff, 0x1c, 0x1d}}, {{0x0f, 0x08, 0x08, 0x00}, {0x0f, 0x08, 0x08, 0x00}, {0x0f, 0x08, 0x08, 0x00}, {0x0f, 0x08, 0x08, 0x00}, {0x0f, 0x08, 0x08, 0x00}}, }; -static const u8 gUnused_0860CBF1[] = {0x00, 0x00, 0x00}; static const struct BgTemplate gUnknown_0860CE74[4] = { @@ -806,7 +802,7 @@ static const struct BgTemplate gUnknown_0860CE84[4] = }, }; -static const struct WindowTemplate gUnknown_0860CE94[] = +static const struct WindowTemplate gUnknown_0860CE94[] = { { .priority = 0, @@ -838,7 +834,7 @@ static const struct WindowTemplate gUnknown_0860CE94[] = DUMMY_WIN_TEMPLATE, }; -static const struct WindowTemplate gUnknown_0860CEB4[] = +static const struct WindowTemplate gUnknown_0860CEB4[] = { { .priority = 0, @@ -1002,9 +998,10 @@ static const struct WindowTemplate gUnknown_0860CEB4[] = .paletteNum = 15, .baseBlock = 372, }, + // UB: No DUMMY_WIN_TEMPLATE at the array's end. }; -static const struct ScanlineEffectParams gUnknown_0860CF44 = +static const struct ScanlineEffectParams gUnknown_0860CF44 = { .dmaDest = (void *)REG_ADDR_BG3CNT, .dmaControl = 0xa2600001, @@ -1013,14 +1010,14 @@ static const struct ScanlineEffectParams gUnknown_0860CF44 = static const struct CompressedSpriteSheet gUnknown_0860CF50[] = { - gBattleFrontierGfx_DomeOptions, 0x0600, 0x0000, - NULL + {gBattleFrontierGfx_DomeOptions, 0x0600, 0x0000}, + {}, }; static const struct CompressedSpritePalette gUnknown_0860CF60[] = { - gUnknown_08D85444, 0x0000, - NULL + {gUnknown_08D85444, 0x0000}, + {}, }; static const struct OamData gUnknown_0860CF70 = @@ -1040,7 +1037,7 @@ static const struct OamData gUnknown_0860CF70 = .affineParam = 0, }; -static const struct OamData gUnknown_0860CF78 = +static const struct OamData gUnknown_0860CF78 = { .y = 0, .affineMode = 0, @@ -1112,7 +1109,7 @@ static const struct SpriteTemplate gUnknown_0860CFA8 = {0x0000, 0xffff, &gUnknow static const union AnimCmd gUnknown_0860CFC0[] = { - ANIMCMD_FRAME(8, 1), + ANIMCMD_FRAME(8, 1), ANIMCMD_END, }; @@ -1161,7 +1158,7 @@ static const union AnimCmd gUnknown_0860D028[] = ANIMCMD_FRAME(18, 129, .vFlip = TRUE), ANIMCMD_END, }; - + static const union AnimCmd gUnknown_0860D030[] = { ANIMCMD_FRAME(16, 65, .hFlip = TRUE), @@ -1189,7 +1186,10 @@ static const union AnimCmd * const gUnknown_0860D048[] = static const struct SpriteTemplate gUnknown_0860D050 = {0x0000, 0xffff, &gUnknown_0860CF88, gUnknown_0860D048, NULL, gDummySpriteAffineAnimTable, sub_8190B40}; static const struct SpriteTemplate gUnknown_0860D068 = {0x0000, 0xffff, &gUnknown_0860CF80, gUnknown_0860D040, NULL, gDummySpriteAffineAnimTable, sub_8190C6C}; -static const u8 gUnknown_0860D080[] = {0x00, 0x08, 0x0c, 0x04, 0x07, 0x0f, 0x0b, 0x03, 0x02, 0x0a, 0x0e, 0x06, 0x05, 0x0d, 0x09, 0x01}; +static const u8 gUnknown_0860D080[DOME_TOURNAMENT_TRAINERS_COUNT] = +{ + 0x00, 0x08, 0x0c, 0x04, 0x07, 0x0f, 0x0b, 0x03, 0x02, 0x0a, 0x0e, 0x06, 0x05, 0x0d, 0x09, 0x01 +}; static void (* const gUnknown_0860D090[])(void) = { @@ -1230,7 +1230,7 @@ static const u32 gUnknown_0860D0FC[][2] = {0xffefffff, 0xffdfffff}, }; -static const u8 gUnknown_0860D10C[][4] = +static const u8 gUnknown_0860D10C[DOME_TOURNAMENT_TRAINERS_COUNT][DOME_ROUNDS_COUNT] = { {0x08, 0x00, 0x04, 0x08}, {0x09, 0x0c, 0x08, 0x00}, @@ -1252,16 +1252,24 @@ static const u8 gUnknown_0860D10C[][4] = static const u8 gUnknown_0860D14C[] = {0x00, 0x08, 0x04, 0x0c, 0x07, 0x0f, 0x03, 0x0b, 0x02, 0x0a, 0x06, 0x0e, 0x05, 0x0d, 0x01, 0x09}; -static const u8 gUnknown_0860D15C[] = -{ - 0x00, 0x08, 0x0c, 0x0e, 0x00, 0x08, 0x0c, 0x0e, - 0x01, 0x08, 0x0c, 0x0e, 0x01, 0x08, 0x0c, 0x0e, - 0x02, 0x09, 0x0c, 0x0e, 0x02, 0x09, 0x0c, 0x0e, - 0x03, 0x09, 0x0c, 0x0e, 0x03, 0x09, 0x0c, 0x0e, - 0x04, 0x0a, 0x0d, 0x0e, 0x04, 0x0a, 0x0d, 0x0e, - 0x05, 0x0a, 0x0d, 0x0e, 0x05, 0x0a, 0x0d, 0x0e, - 0x06, 0x0b, 0x0d, 0x0e, 0x06, 0x0b, 0x0d, 0x0e, - 0x07, 0x0b, 0x0d, 0x0e, 0x07, 0x0b, 0x0d, 0x0e, +static const u8 gUnknown_0860D15C[][4] = +{ + {0x00, 0x08, 0x0c, 0x0e}, + {0x00, 0x08, 0x0c, 0x0e}, + {0x01, 0x08, 0x0c, 0x0e}, + {0x01, 0x08, 0x0c, 0x0e}, + {0x02, 0x09, 0x0c, 0x0e}, + {0x02, 0x09, 0x0c, 0x0e}, + {0x03, 0x09, 0x0c, 0x0e}, + {0x03, 0x09, 0x0c, 0x0e}, + {0x04, 0x0a, 0x0d, 0x0e}, + {0x04, 0x0a, 0x0d, 0x0e}, + {0x05, 0x0a, 0x0d, 0x0e}, + {0x05, 0x0a, 0x0d, 0x0e}, + {0x06, 0x0b, 0x0d, 0x0e}, + {0x06, 0x0b, 0x0d, 0x0e}, + {0x07, 0x0b, 0x0d, 0x0e}, + {0x07, 0x0b, 0x0d, 0x0e}, }; static const u8 gUnknown_0860D19C[] = {0x17, 0x1b, 0x1d, 0x1e}; @@ -1384,8 +1392,8 @@ static const u8 *const gBattleDomeOpponentStatsPointers[] = gBattleDomeOpponentStats43, }; -static const u8 gUnknown_0860D340[] = {0x68, 0x88, 0x68}; -static const u8 gUnknown_0860D343[] = {0x26, 0x3e, 0x4e}; +static const u8 sInfoTrainerMonX[] = {0x68, 0x88, 0x68}; +static const u8 sInfoTrainerMonY[] = {0x26, 0x3e, 0x4e}; static const u8 gUnknown_0860D346[] = {0x00, 0x04, 0x00}; static const u8 gUnknown_0860D349[] = {0x00, 0x05, 0x09, 0x0c, 0x0e, 0x00, 0x00}; @@ -1420,10 +1428,10 @@ static const u8 *const gBattleDomeWinStringsPointers[] = gBattleDomeWinStrings7, }; -static const u8 gUnknown_0860D3A8[] = {0x60, 0x60, 0x60}; -static const u8 gUnknown_0860D3AB[] = {0x38, 0x50, 0x68}; -static const u8 gUnknown_0860D3AE[] = {0x90, 0x90, 0x90}; -static const u8 gUnknown_0860D3B1[] = {0x38, 0x50, 0x68}; +static const u8 sFirstTrainerMonX[] = {0x60, 0x60, 0x60}; +static const u8 sFirstTrainerMonY[] = {0x38, 0x50, 0x68}; +static const u8 sSecondTrainerMonX[] = {0x90, 0x90, 0x90}; +static const u8 sSecondTrainerMonY[] = {0x38, 0x50, 0x68}; static const u8 gUnknown_0860D3B4[] = {0x00, 0x08, 0x0c, 0x04, 0x07, 0x0f, 0x0b, 0x03, 0x02, 0x0a, 0x0e, 0x06, 0x05, 0x0d, 0x09, 0x01}; @@ -1446,7 +1454,7 @@ static const u8 gUnknown_0860D3C4[][3] = {0x00, 0x10, 0x03}, }; -static const u8 gUnknown_0860D3F1[][2] = +static const u8 gUnknown_0860D3F1[][2] = { {0x00, 0x00}, {0x01, 0x70}, @@ -1500,7 +1508,6 @@ static const u8 gUnknown_0860D411[][2] = {0x89, 0x59}, {0x78, 0x59}, }; -const u8 sExtraByte = 0x00; static const struct UnkStruct_860DD10 gUnknown_0860d450[] = { @@ -2318,7 +2325,7 @@ static const struct UnkStruct_860DD10 gUnknown_0860dcdc[] = {.src = 0x602e, .y = 0x0b, .x = 0x0f}, }; -static const struct UnkStruct_860DD10 * const gUnknown_0860DD10[][4] = +static const struct UnkStruct_860DD10 * const gUnknown_0860DD10[DOME_TOURNAMENT_TRAINERS_COUNT][4] = { {gUnknown_0860d450, gUnknown_0860d460, gUnknown_0860d47c, gUnknown_0860d4a8}, {gUnknown_0860dc84, gUnknown_0860dc94, gUnknown_0860dcb0, gUnknown_0860dcdc}, @@ -2338,7 +2345,7 @@ static const struct UnkStruct_860DD10 * const gUnknown_0860DD10[][4] = {gUnknown_0860d70c, gUnknown_0860d71c, gUnknown_0860d738, gUnknown_0860d764}, }; -static const u8 gUnknown_0860DE10[][4] = +static const u8 gUnknown_0860DE10[DOME_TOURNAMENT_TRAINERS_COUNT][4] = { {0x04, 0x07, 0x0b, 0x0d}, {0x04, 0x07, 0x0b, 0x0d}, @@ -2364,7 +2371,7 @@ void CallBattleDomeFunction(void) gUnknown_0860D090[gSpecialVar_0x8004](); } -void sub_818E9CC(void) +static void sub_818E9CC(void) { u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); @@ -2380,7 +2387,7 @@ void sub_818E9CC(void) gTrainerBattleOpponent_A = 0; } -void sub_818EA84(void) +static void sub_818EA84(void) { u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); @@ -2448,7 +2455,7 @@ void sub_818EA84(void) } } -void sub_818ED28(void) +static void sub_818ED28(void) { u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); @@ -2514,7 +2521,7 @@ void sub_818ED28(void) } } -void InitDomeTrainers(void) +static void InitDomeTrainers(void) { s32 i, j, k; s32 monLevel; @@ -2775,18 +2782,18 @@ static void SwapDomeTrainers(s32 id1, s32 id2, u16 *statsArray) SWAP_16(gSaveBlock2Ptr->frontier.domeMonId[id1][i], gSaveBlock2Ptr->frontier.domeMonId[id2][i]); } -void sub_818F9B0(void) +static void sub_818F9B0(void) { StringCopy(gStringVar1, gRoundsStringTable[gSaveBlock2Ptr->frontier.field_CB2]); } -void sub_818F9E0(void) +static void sub_818F9E0(void) { StringCopy(gStringVar1, gRoundsStringTable[gSaveBlock2Ptr->frontier.field_CB2]); CopyDomeTrainerName(gStringVar2, gTrainerBattleOpponent_A); } -void sub_818FA20(void) +static void sub_818FA20(void) { gUnknown_0203CD70 = 0; gUnknown_0203CD74 = GetMonData(&gPlayerParty[0], MON_DATA_MAX_HP, NULL); @@ -3419,7 +3426,7 @@ static s32 TournamentIdOfOpponent(s32 roundId, s32 trainerId) } } -void sub_8190298(void) +static void sub_8190298(void) { gTrainerBattleOpponent_A = TrainerIdOfPlayerOpponent(); } @@ -3429,12 +3436,12 @@ static u16 TrainerIdOfPlayerOpponent(void) return gSaveBlock2Ptr->frontier.domeTrainers[TournamentIdOfOpponent(gSaveBlock2Ptr->frontier.field_CB2, TRAINER_PLAYER)].trainerId; } -void sub_81902E4(void) +static void sub_81902E4(void) { sub_8162614(gTrainerBattleOpponent_A, 0); } -void sub_81902F8(void) +static void sub_81902F8(void) { gSaveBlock2Ptr->frontier.field_CA8 = gSpecialVar_0x8005; VarSet(VAR_TEMP_0, 0); @@ -3442,7 +3449,7 @@ void sub_81902F8(void) sub_81A4C30(); } -void sub_819033C(void) +static void sub_819033C(void) { u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); @@ -3456,7 +3463,7 @@ void sub_819033C(void) gSaveBlock2Ptr->frontier.field_D14[battleMode][lvlMode] = gSaveBlock2Ptr->frontier.field_D0C[battleMode][lvlMode]; } -void ShowDomeOpponentInfo(void) +static void ShowDomeOpponentInfo(void) { u8 taskId = CreateTask(sub_8190400, 0); gTasks[taskId].data[0] = 0; @@ -3760,7 +3767,7 @@ static void SpriteCb_MonIconCardScrollRight(struct Sprite *sprite) } } -void sub_8190B40(struct Sprite *sprite) +static void sub_8190B40(struct Sprite *sprite) { s32 taskId1 = sprite->data[0]; s32 arrId = gTasks[gTasks[taskId1].data[4]].data[1]; @@ -3829,7 +3836,7 @@ void sub_8190B40(struct Sprite *sprite) } } -void sub_8190C6C(struct Sprite *sprite) +static void sub_8190C6C(struct Sprite *sprite) { s32 taskId1 = sprite->data[0]; @@ -4170,7 +4177,7 @@ static void sub_8190CD4(u8 taskId) { gBattle_BG2_X = 256; gBattle_BG2_Y = 0; - matchNo = gUnknown_0860D15C[(gTasks[taskId2].data[1] * 4) + (sBattleDomeStruct->unk_10 - 1)]; + matchNo = gUnknown_0860D15C[gTasks[taskId2].data[1]][sBattleDomeStruct->unk_10 - 1]; DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 8, matchNo); } @@ -4335,7 +4342,7 @@ static void sub_8190CD4(u8 taskId) gBattle_BG2_X = 0; gBattle_BG2_Y = 0; } - matchNo = gUnknown_0860D15C[(sBattleDomeStruct->unk_10 - 1) + (gTasks[taskId2].data[1] * 4)]; + matchNo = gUnknown_0860D15C[gTasks[taskId2].data[1]][sBattleDomeStruct->unk_10 - 1]; DisplayMatchInfoOnCard(gTasks[taskId].data[2] | 2, matchNo); for (i = 0; i < DOME_TOURNAMENT_TRAINERS_COUNT / 2; i++) @@ -4724,8 +4731,8 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) { sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i], SpriteCb_MonIcon, - x | gUnknown_0860D340[i], - y + gUnknown_0860D343[i], + x | sInfoTrainerMonX[i], + y + sInfoTrainerMonY[i], 0, 0, TRUE); gSprites[sBattleDomeStruct->arr[2 + i + arrId]].oam.priority = 0; } @@ -4733,8 +4740,8 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) { sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i], SpriteCb_MonIcon, - x | gUnknown_0860D340[i], - y + gUnknown_0860D343[i], + x | sInfoTrainerMonX[i], + y + sInfoTrainerMonY[i], 0, 0, TRUE); gSprites[sBattleDomeStruct->arr[2 + i + arrId]].oam.priority = 0; } @@ -4742,8 +4749,8 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) { sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].species, SpriteCb_MonIcon, - x | gUnknown_0860D340[i], - y + gUnknown_0860D343[i], + x | sInfoTrainerMonX[i], + y + sInfoTrainerMonY[i], 0, 0, TRUE); gSprites[sBattleDomeStruct->arr[2 + i + arrId]].oam.priority = 0; } @@ -5178,8 +5185,8 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) { sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[0]][i], SpriteCb_MonIcon, - x | gUnknown_0860D3A8[i], - y + gUnknown_0860D3AB[i], + x | sFirstTrainerMonX[i], + y + sFirstTrainerMonY[i], 0, 0, TRUE); gSprites[sBattleDomeStruct->arr[2 + i + arrId]].oam.priority = 0; } @@ -5187,8 +5194,8 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) { sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[0]][i], SpriteCb_MonIcon, - x | gUnknown_0860D3A8[i], - y + gUnknown_0860D3AB[i], + x | sFirstTrainerMonX[i], + y + sFirstTrainerMonY[i], 0, 0, TRUE); gSprites[sBattleDomeStruct->arr[2 + i + arrId]].oam.priority = 0; } @@ -5196,8 +5203,8 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) { sBattleDomeStruct->arr[2 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[0]][i]].species, SpriteCb_MonIcon, - x | gUnknown_0860D3A8[i], - y + gUnknown_0860D3AB[i], + x | sFirstTrainerMonX[i], + y + sFirstTrainerMonY[i], 0, 0, TRUE); gSprites[sBattleDomeStruct->arr[2 + i + arrId]].oam.priority = 0; } @@ -5218,8 +5225,8 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) { sBattleDomeStruct->arr[5 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[1]][i], SpriteCb_MonIcon, - x | gUnknown_0860D3AE[i], - y + gUnknown_0860D3B1[i], + x | sSecondTrainerMonX[i], + y + sSecondTrainerMonY[i], 0, 0, TRUE); gSprites[sBattleDomeStruct->arr[5 + i + arrId]].oam.priority = 0; } @@ -5227,8 +5234,8 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) { sBattleDomeStruct->arr[5 + i + arrId] = CreateMonIcon(gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[1]][i], SpriteCb_MonIcon, - x | gUnknown_0860D3AE[i], - y + gUnknown_0860D3B1[i], + x | sSecondTrainerMonX[i], + y + sSecondTrainerMonY[i], 0, 0, TRUE); gSprites[sBattleDomeStruct->arr[5 + i + arrId]].oam.priority = 0; } @@ -5236,8 +5243,8 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) { sBattleDomeStruct->arr[5 + i + arrId] = CreateMonIcon(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentIds[1]][i]].species, SpriteCb_MonIcon, - x | gUnknown_0860D3AE[i], - y + gUnknown_0860D3B1[i], + x | sSecondTrainerMonX[i], + y + sSecondTrainerMonY[i], 0, 0, TRUE); gSprites[sBattleDomeStruct->arr[5 + i + arrId]].oam.priority = 0; } @@ -5317,7 +5324,7 @@ static void DisplayMatchInfoOnCard(u8 flags, u8 matchNo) AddTextPrinter(&textPrinter, 0, NULL); } -void sub_81938A4(void) +static void sub_81938A4(void) { u8 taskId = CreateTask(sub_8194220, 0); gTasks[taskId].data[0] = 0; @@ -5327,7 +5334,7 @@ void sub_81938A4(void) SetMainCallback2(CB2_BattleDome); } -void sub_81938E0(void) +static void sub_81938E0(void) { u8 taskId; @@ -5342,7 +5349,7 @@ void sub_81938E0(void) SetMainCallback2(CB2_BattleDome); } -void sub_819395C(u8 taskId) +static void sub_819395C(u8 taskId) { u8 newTaskId = 0; s32 spriteId = gTasks[taskId].data[1]; @@ -5479,7 +5486,7 @@ static u8 sub_8193BDC(u8 taskId) return retVal; } -void sub_8193D40(void) +static void sub_8193D40(void) { u8 taskId = CreateTask(sub_8194220, 0); gTasks[taskId].data[0] = 0; @@ -5489,7 +5496,7 @@ void sub_8193D40(void) SetMainCallback2(CB2_BattleDome); } -void sub_8193D7C(void) +static void sub_8193D7C(void) { s32 i; @@ -6032,13 +6039,13 @@ static void VblankCb1_BattleDome(void) ScanlineEffect_InitHBlankDmaTransfer(); } -void sub_8194D48(void) +static void sub_8194D48(void) { gFacilityTrainerMons = gBattleFrontierMons; gFacilityTrainers = gBattleFrontierTrainers; } -void sub_8194D68(void) +static void sub_8194D68(void) { s32 i, moveSlot; @@ -6064,7 +6071,7 @@ void sub_8194D68(void) } } -void sub_8194E44(void) +static void sub_8194E44(void) { s32 i; @@ -6076,12 +6083,12 @@ void sub_8194E44(void) } } -void sub_8194EB4(void) +static void sub_8194EB4(void) { sub_80F94E8(); } -void sub_8194EC0(void) +static void sub_8194EC0(void) { if (TrainerIdToTournamentId(gTrainerBattleOpponent_A) > TrainerIdToTournamentId(TRAINER_PLAYER)) gSpecialVar_Result = 1; @@ -6089,7 +6096,7 @@ void sub_8194EC0(void) gSpecialVar_Result = 2; } -void sub_8194EF8(void) +static void sub_8194EF8(void) { s32 i; @@ -6102,7 +6109,7 @@ void sub_8194EF8(void) CopyDomeTrainerName(gStringVar1, gSaveBlock2Ptr->frontier.domeTrainers[i].trainerId); } -void sub_8194F58(void) +static void sub_8194F58(void) { s32 i, j, k; s32 monLevel; -- cgit v1.2.3 From a8a2444f93db792f9d88f500e16d825a6db63437 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 26 Aug 2018 15:58:44 +0200 Subject: make battle dome compikle --- src/record_mixing.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/record_mixing.c b/src/record_mixing.c index 8e85fed18..552c32d38 100644 --- a/src/record_mixing.c +++ b/src/record_mixing.c @@ -1636,7 +1636,7 @@ void sub_80E8260(struct UnkRecordMixingStruct2 *dst) dst->field_0[1][i].field_4 = gSaveBlock2Ptr->frontier.field_CF4[i]; dst->field_0[2][i].field_4 = gSaveBlock2Ptr->frontier.field_CF8[i]; dst->field_0[3][i].field_4 = gSaveBlock2Ptr->frontier.field_D14[0][i]; - dst->field_0[4][i].field_4 = gSaveBlock2Ptr->frontier.field_DD0[i]; + dst->field_0[4][i].field_4 = gSaveBlock2Ptr->frontier.field_DD0[0][i]; dst->field_0[5][i].field_4 = gSaveBlock2Ptr->frontier.field_DDE[i]; dst->field_0[6][i].field_4 = gSaveBlock2Ptr->frontier.field_DEA[i]; dst->field_0[7][i].field_4 = gSaveBlock2Ptr->frontier.field_E08[i]; -- cgit v1.2.3 From ca07412686c769bc1072c751053217a7f30da03f Mon Sep 17 00:00:00 2001 From: Slawter666 <38655737+Slawter666@users.noreply.github.com> Date: Sun, 26 Aug 2018 15:45:08 +0100 Subject: Format SpriteTemplate --- src/battle_dome.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 51 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/battle_dome.c b/src/battle_dome.c index 104c9fe9b..41f7d7a95 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -1105,7 +1105,16 @@ static const union AnimCmd * const gUnknown_0860CFA0[] = gUnknown_0860CF98, }; -static const struct SpriteTemplate gUnknown_0860CFA8 = {0x0000, 0xffff, &gUnknown_0860CF70, gUnknown_0860CFA0, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy}; +static const struct SpriteTemplate gUnknown_0860CFA8 = +{ + .tileTag = 0x0000, + .paletteTag = 0xffff, + .oam = &gUnknown_0860CF70, + .anims = gUnknown_0860CFA0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; static const union AnimCmd gUnknown_0860CFC0[] = { @@ -1125,7 +1134,16 @@ static const union AnimCmd * const gUnknown_0860CFD0[] = gUnknown_0860CFC8, }; -static const struct SpriteTemplate gUnknown_0860CFD8 = {0x0000, 0xffff, &gUnknown_0860CF78, gUnknown_0860CFD0, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy}; +static const struct SpriteTemplate gUnknown_0860CFD8 = +{ + .tileTag = 0x0000, + .paletteTag = 0xffff, + .oam = &gUnknown_0860CF78, + .anims = gUnknown_0860CFD0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; static const union AnimCmd gUnknown_0860CFF0[] = { @@ -1145,7 +1163,16 @@ static const union AnimCmd * const gUnknown_0860D000[] = gUnknown_0860CFF8, }; -static const struct SpriteTemplate gUnknown_0860D008 = {0x0000, 0xffff, &gUnknown_0860CF78, gUnknown_0860D000, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy}; +static const struct SpriteTemplate gUnknown_0860D008 = +{ + .tileTag = 0x0000, + .paletteTag = 0xffff, + .oam = &gUnknown_0860CF78, + .anims = gUnknown_0860D000, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; static const union AnimCmd gUnknown_0860D020[] = { @@ -1183,8 +1210,27 @@ static const union AnimCmd * const gUnknown_0860D048[] = gUnknown_0860D038, }; -static const struct SpriteTemplate gUnknown_0860D050 = {0x0000, 0xffff, &gUnknown_0860CF88, gUnknown_0860D048, NULL, gDummySpriteAffineAnimTable, sub_8190B40}; -static const struct SpriteTemplate gUnknown_0860D068 = {0x0000, 0xffff, &gUnknown_0860CF80, gUnknown_0860D040, NULL, gDummySpriteAffineAnimTable, sub_8190C6C}; +static const struct SpriteTemplate gUnknown_0860D050 = +{ + .tileTag = 0x0000, + .paletteTag = 0xffff, + .oam = &gUnknown_0860CF88, + .anims = gUnknown_0860D048, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8190B40 +}; + +static const struct SpriteTemplate gUnknown_0860D068 = +{ + .tileTag = 0x0000, + .paletteTag = 0xffff, + .oam = &gUnknown_0860CF80, + .anims = gUnknown_0860D040, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8190C6C +}; static const u8 gUnknown_0860D080[DOME_TOURNAMENT_TRAINERS_COUNT] = { -- cgit v1.2.3 From ddd4733de341824df578bb3bc5a2c232f41ccb14 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 26 Aug 2018 17:54:58 +0200 Subject: rename battle pyramid to battle pyramid bag --- src/battle_pyramid.c | 248 ----------------------------------------------- src/battle_pyramid_bag.c | 248 +++++++++++++++++++++++++++++++++++++++++++++++ src/battle_tower.c | 85 ++++++++++++++++ 3 files changed, 333 insertions(+), 248 deletions(-) delete mode 100644 src/battle_pyramid.c create mode 100644 src/battle_pyramid_bag.c create mode 100644 src/battle_tower.c (limited to 'src') diff --git a/src/battle_pyramid.c b/src/battle_pyramid.c deleted file mode 100644 index f9cc48a9a..000000000 --- a/src/battle_pyramid.c +++ /dev/null @@ -1,248 +0,0 @@ -#include "global.h" -#include "main.h" -#include "battle_controllers.h" -#include "bg.h" -#include "field_effect.h" -#include "field_weather.h" -#include "gpu_regs.h" -#include "malloc.h" -#include "menu.h" -#include "menu_helpers.h" -#include "overworld.h" -#include "palette.h" -#include "party_menu.h" -#include "scanline_effect.h" -#include "script.h" -#include "task.h" -#include "constants/rgb.h" - -EWRAM_DATA struct -{ - u32 unk0; - u8 filler4[0x804 - 0x4]; - u8 unk804[11]; - u8 unk80F[5]; - u8 unk814; - u8 filler815; - s8 unk816; - u8 filler817[0x984 - 0x817]; - u16 unk984; - u8 filler986[0x98C - 0x986]; -} *gUnknown_0203CF2C = NULL; -EWRAM_DATA struct -{ - void (*callback)(void); - u8 unk4; - u16 unk6; - u16 unk8; -} gUnknown_0203CF30 = {0}; - -extern const struct BgTemplate gUnknown_0861F2B4[3]; - -void sub_81C4F98(u8 a0, void (*callback)(void)); -void sub_81C4F44(u8 taskId); -void sub_81C504C(void); -bool8 sub_81C5078(void); -void sub_81C51DC(void); -bool8 sub_81C5238(void); -void sub_81C5314(void); -void sub_81C5674(void); -void sub_81C56F8(void); -void sub_81C5924(void); -void sub_81C59BC(void); -void sub_81C5A20(void); -void sub_81C6BD8(void); -void sub_81C6EF4(void); -void sub_81C700C(void); - -void sub_81C4EEC(void) -{ - gUnknown_0203CF30.unk6 = 0; - gUnknown_0203CF30.unk8 = 0; -} - -void sub_81C4EFC(void) -{ - sub_81C4F98(0, CB2_ReturnToFieldWithOpenMenu); -} - -void sub_81C4F10(void) -{ - sub_81C4F98(1, SetCB2ToReshowScreenAfterMenu2); -} - -void sub_81C4F24(void) -{ - ScriptContext2_Enable(); - FadeScreen(1, 0); - CreateTask(sub_81C4F44, 10); -} - -void sub_81C4F44(u8 taskId) -{ - if (!gPaletteFade.active) - { - overworld_free_bg_tilemaps(); - gFieldCallback2 = hm_add_c3_without_phase_2; - sub_81C4F98(3, CB2_ReturnToField); - DestroyTask(taskId); - } -} - -void sub_81C4F84(void) -{ - sub_81C4F98(4, gUnknown_0203CF30.callback); -} - -void sub_81C4F98(u8 a0, void (*callback)(void)) -{ - gUnknown_0203CF2C = AllocZeroed(sizeof(*gUnknown_0203CF2C)); - - if (a0 != 4) - { - gUnknown_0203CF30.unk4 = a0; - } - - if (callback != NULL) - { - gUnknown_0203CF30.callback = callback; - } - - gUnknown_0203CF2C->unk0 = 0; - gUnknown_0203CF2C->unk814 = -1; - gUnknown_0203CF2C->unk816 = -1; - - memset(gUnknown_0203CF2C->unk804, 0xFF, sizeof(gUnknown_0203CF2C->unk804)); - memset(gUnknown_0203CF2C->unk80F, 0xFF, sizeof(gUnknown_0203CF2C->unk80F)); - - SetMainCallback2(sub_81C504C); -} - -void sub_81C501C(void) -{ - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - do_scheduled_bg_tilemap_copies_to_vram(); - UpdatePaletteFade(); -} - -void sub_81C5038(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -void sub_81C504C(void) -{ - while (sub_81221EC() != TRUE && sub_81C5078() != TRUE && sub_81221AC() != TRUE); -} - -bool8 sub_81C5078(void) -{ - switch (gMain.state) - { - case 0: - SetVBlankHBlankCallbacksToNull(); - clear_scheduled_bg_copies_to_vram(); - gMain.state++; - break; - case 1: - ScanlineEffect_Stop(); - gMain.state++; - break; - case 2: - FreeAllSpritePalettes(); - gMain.state++; - break; - case 3: - ResetPaletteFade(); - gPaletteFade.bufferTransferDisabled = TRUE; - gMain.state++; - break; - case 4: - ResetSpriteData(); - gMain.state++; - break; - case 5: - if (!sub_81221AC()) - { - ResetTasks(); - } - gMain.state++; - break; - case 6: - sub_81C51DC(); - gUnknown_0203CF2C->unk984 = 0; - gMain.state++; - break; - case 7: - if (sub_81C5238()) - { - gMain.state++; - } - break; - case 8: - sub_81C6BD8(); - gMain.state++; - break; - case 9: - sub_81C5924(); - sub_81C59BC(); - sub_81C5A20(); - gMain.state++; - break; - case 10: - sub_81C5314(); - gMain.state++; - break; - case 11: - sub_81C56F8(); - gMain.state++; - break; - case 12: - sub_81C6EF4(); - gMain.state++; - break; - case 13: - sub_81C5674(); - gMain.state++; - break; - case 14: - sub_81C700C(); - gMain.state++; - break; - case 15: - BlendPalettes(0xFFFFFFFF, 0x10, 0); - gMain.state++; - break; - case 16: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); - gPaletteFade.bufferTransferDisabled = FALSE; - gMain.state++; - break; - default: - SetVBlankCallback(sub_81C5038); - SetMainCallback2(sub_81C501C); - return TRUE; - } - return FALSE; -} - -void sub_81C51DC(void) -{ - ResetVramOamAndBgCntRegs(); - ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_0861F2B4, ARRAY_COUNT(gUnknown_0861F2B4)); - SetBgTilemapBuffer(2, gUnknown_0203CF2C->filler4); - ResetAllBgsCoordinates(); - schedule_bg_copy_tilemap_to_vram(2); - SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | - DISPCNT_OBJ_1D_MAP | - DISPCNT_OBJ_ON); - ShowBg(0); - ShowBg(1); - ShowBg(2); - SetGpuReg(REG_OFFSET_BLDCNT, 0); -} diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c new file mode 100644 index 000000000..f9cc48a9a --- /dev/null +++ b/src/battle_pyramid_bag.c @@ -0,0 +1,248 @@ +#include "global.h" +#include "main.h" +#include "battle_controllers.h" +#include "bg.h" +#include "field_effect.h" +#include "field_weather.h" +#include "gpu_regs.h" +#include "malloc.h" +#include "menu.h" +#include "menu_helpers.h" +#include "overworld.h" +#include "palette.h" +#include "party_menu.h" +#include "scanline_effect.h" +#include "script.h" +#include "task.h" +#include "constants/rgb.h" + +EWRAM_DATA struct +{ + u32 unk0; + u8 filler4[0x804 - 0x4]; + u8 unk804[11]; + u8 unk80F[5]; + u8 unk814; + u8 filler815; + s8 unk816; + u8 filler817[0x984 - 0x817]; + u16 unk984; + u8 filler986[0x98C - 0x986]; +} *gUnknown_0203CF2C = NULL; +EWRAM_DATA struct +{ + void (*callback)(void); + u8 unk4; + u16 unk6; + u16 unk8; +} gUnknown_0203CF30 = {0}; + +extern const struct BgTemplate gUnknown_0861F2B4[3]; + +void sub_81C4F98(u8 a0, void (*callback)(void)); +void sub_81C4F44(u8 taskId); +void sub_81C504C(void); +bool8 sub_81C5078(void); +void sub_81C51DC(void); +bool8 sub_81C5238(void); +void sub_81C5314(void); +void sub_81C5674(void); +void sub_81C56F8(void); +void sub_81C5924(void); +void sub_81C59BC(void); +void sub_81C5A20(void); +void sub_81C6BD8(void); +void sub_81C6EF4(void); +void sub_81C700C(void); + +void sub_81C4EEC(void) +{ + gUnknown_0203CF30.unk6 = 0; + gUnknown_0203CF30.unk8 = 0; +} + +void sub_81C4EFC(void) +{ + sub_81C4F98(0, CB2_ReturnToFieldWithOpenMenu); +} + +void sub_81C4F10(void) +{ + sub_81C4F98(1, SetCB2ToReshowScreenAfterMenu2); +} + +void sub_81C4F24(void) +{ + ScriptContext2_Enable(); + FadeScreen(1, 0); + CreateTask(sub_81C4F44, 10); +} + +void sub_81C4F44(u8 taskId) +{ + if (!gPaletteFade.active) + { + overworld_free_bg_tilemaps(); + gFieldCallback2 = hm_add_c3_without_phase_2; + sub_81C4F98(3, CB2_ReturnToField); + DestroyTask(taskId); + } +} + +void sub_81C4F84(void) +{ + sub_81C4F98(4, gUnknown_0203CF30.callback); +} + +void sub_81C4F98(u8 a0, void (*callback)(void)) +{ + gUnknown_0203CF2C = AllocZeroed(sizeof(*gUnknown_0203CF2C)); + + if (a0 != 4) + { + gUnknown_0203CF30.unk4 = a0; + } + + if (callback != NULL) + { + gUnknown_0203CF30.callback = callback; + } + + gUnknown_0203CF2C->unk0 = 0; + gUnknown_0203CF2C->unk814 = -1; + gUnknown_0203CF2C->unk816 = -1; + + memset(gUnknown_0203CF2C->unk804, 0xFF, sizeof(gUnknown_0203CF2C->unk804)); + memset(gUnknown_0203CF2C->unk80F, 0xFF, sizeof(gUnknown_0203CF2C->unk80F)); + + SetMainCallback2(sub_81C504C); +} + +void sub_81C501C(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + do_scheduled_bg_tilemap_copies_to_vram(); + UpdatePaletteFade(); +} + +void sub_81C5038(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_81C504C(void) +{ + while (sub_81221EC() != TRUE && sub_81C5078() != TRUE && sub_81221AC() != TRUE); +} + +bool8 sub_81C5078(void) +{ + switch (gMain.state) + { + case 0: + SetVBlankHBlankCallbacksToNull(); + clear_scheduled_bg_copies_to_vram(); + gMain.state++; + break; + case 1: + ScanlineEffect_Stop(); + gMain.state++; + break; + case 2: + FreeAllSpritePalettes(); + gMain.state++; + break; + case 3: + ResetPaletteFade(); + gPaletteFade.bufferTransferDisabled = TRUE; + gMain.state++; + break; + case 4: + ResetSpriteData(); + gMain.state++; + break; + case 5: + if (!sub_81221AC()) + { + ResetTasks(); + } + gMain.state++; + break; + case 6: + sub_81C51DC(); + gUnknown_0203CF2C->unk984 = 0; + gMain.state++; + break; + case 7: + if (sub_81C5238()) + { + gMain.state++; + } + break; + case 8: + sub_81C6BD8(); + gMain.state++; + break; + case 9: + sub_81C5924(); + sub_81C59BC(); + sub_81C5A20(); + gMain.state++; + break; + case 10: + sub_81C5314(); + gMain.state++; + break; + case 11: + sub_81C56F8(); + gMain.state++; + break; + case 12: + sub_81C6EF4(); + gMain.state++; + break; + case 13: + sub_81C5674(); + gMain.state++; + break; + case 14: + sub_81C700C(); + gMain.state++; + break; + case 15: + BlendPalettes(0xFFFFFFFF, 0x10, 0); + gMain.state++; + break; + case 16: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); + gPaletteFade.bufferTransferDisabled = FALSE; + gMain.state++; + break; + default: + SetVBlankCallback(sub_81C5038); + SetMainCallback2(sub_81C501C); + return TRUE; + } + return FALSE; +} + +void sub_81C51DC(void) +{ + ResetVramOamAndBgCntRegs(); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_0861F2B4, ARRAY_COUNT(gUnknown_0861F2B4)); + SetBgTilemapBuffer(2, gUnknown_0203CF2C->filler4); + ResetAllBgsCoordinates(); + schedule_bg_copy_tilemap_to_vram(2); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | + DISPCNT_OBJ_1D_MAP | + DISPCNT_OBJ_ON); + ShowBg(0); + ShowBg(1); + ShowBg(2); + SetGpuReg(REG_OFFSET_BLDCNT, 0); +} diff --git a/src/battle_tower.c b/src/battle_tower.c new file mode 100644 index 000000000..e70d4af91 --- /dev/null +++ b/src/battle_tower.c @@ -0,0 +1,85 @@ +#include "global.h" +#include "event_data.h" +#include "battle_setup.h" +#include "overworld.h" +#include "random.h" +#include "battle_tower.h" + +extern void sub_81A3ACC(void); + +extern const u32 gUnknown_085DF9AC[][2]; +extern const u32 gUnknown_085DF9CC[][2]; +extern void (* const gUnknown_085DF96C[])(void); + +// This file's functions. +void sub_8164ED8(void); +u16 sub_8164FCC(u8, u8); + +// code +void sub_8161F74(void) +{ + gUnknown_085DF96C[gSpecialVar_0x8004](); +} + +void sub_8161F94(void) +{ + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + + gSaveBlock2Ptr->frontier.field_CA8 = 1; + gSaveBlock2Ptr->frontier.field_CB2 = 0; + gSaveBlock2Ptr->frontier.field_CA9_a = 0; + gSaveBlock2Ptr->frontier.field_CA9_b = 0; + sub_81A3ACC(); + if (!(gSaveBlock2Ptr->frontier.field_CDC & gUnknown_085DF9AC[battleMode][lvlMode])) + gSaveBlock2Ptr->frontier.field_CE0[battleMode][lvlMode] = 0; + + sub_8164ED8(); + saved_warp2_set(0, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1); + gTrainerBattleOpponent_A = 0; +} + +void sub_8162054(void) +{ + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + + switch (gSpecialVar_0x8005) + { + case 0: + break; + case 1: + gSpecialVar_Result = sub_8164FCC(lvlMode, battleMode); + break; + case 2: + gSpecialVar_Result = ((gSaveBlock2Ptr->frontier.field_CDC & gUnknown_085DF9AC[battleMode][lvlMode]) != 0); + break; + case 3: + gSaveBlock2Ptr->frontier.field_D07 = gSaveBlock2Ptr->frontier.lvlMode; + break; + } +} + +void sub_81620F4(void) +{ + u32 lvlMode = gSaveBlock2Ptr->frontier.lvlMode; + u32 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE); + + switch (gSpecialVar_0x8005) + { + case 0: + break; + case 1: + gSaveBlock2Ptr->frontier.field_CE0[battleMode][lvlMode] = gSpecialVar_0x8006; + break; + case 2: + if (gSpecialVar_0x8006) + gSaveBlock2Ptr->frontier.field_CDC |= gUnknown_085DF9AC[battleMode][lvlMode]; + else + gSaveBlock2Ptr->frontier.field_CDC &= gUnknown_085DF9CC[battleMode][lvlMode]; + break; + case 3: + gSaveBlock2Ptr->frontier.field_D07 = gSaveBlock2Ptr->frontier.lvlMode; + break; + } +} -- cgit v1.2.3 From d65ebcd3dd08dd2e5bdd53fd9acf69aa15689c21 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 26 Aug 2018 21:41:47 +0200 Subject: Label a dome functiion --- src/battle_dome.c | 99 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 53 insertions(+), 46 deletions(-) (limited to 'src') diff --git a/src/battle_dome.c b/src/battle_dome.c index 41f7d7a95..4505ce8b0 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -224,7 +224,7 @@ static void CalcDomeMonStats(u16 species, s32 level, s32 ivs, u8 evBits, u8 natu static void CreateDomeTrainerMons(u16 tournamentTrainerId); static s32 sub_818FCBC(u16 tournamentTrainerId, bool8 arg1); static s32 sub_818FDB8(u16 tournamentTrainerId, bool8 arg1); -static s32 sub_818FFC0(s32 move, s32 species, s32 arg2); +static s32 GetTypeEffectivenessPoints(s32 move, s32 species, s32 arg2); static s32 sub_818FEB4(s32 *arr, bool8 arg1); static void sub_8190400(u8 taskId); static void sub_8190CD4(u8 taskId); @@ -1276,24 +1276,24 @@ static const u32 gUnknown_0860D0FC[][2] = {0xffefffff, 0xffdfffff}, }; -static const u8 gUnknown_0860D10C[DOME_TOURNAMENT_TRAINERS_COUNT][DOME_ROUNDS_COUNT] = -{ - {0x08, 0x00, 0x04, 0x08}, - {0x09, 0x0c, 0x08, 0x00}, - {0x0a, 0x08, 0x0c, 0x00}, - {0x0b, 0x04, 0x00, 0x08}, - {0x0c, 0x00, 0x04, 0x08}, - {0x0d, 0x0c, 0x08, 0x00}, - {0x0e, 0x08, 0x0c, 0x00}, - {0x0f, 0x04, 0x00, 0x08}, - {0x00, 0x00, 0x04, 0x08}, - {0x01, 0x0c, 0x08, 0x00}, - {0x02, 0x08, 0x0c, 0x00}, - {0x03, 0x04, 0x00, 0x08}, - {0x04, 0x00, 0x04, 0x08}, - {0x05, 0x0c, 0x08, 0x00}, - {0x06, 0x08, 0x0c, 0x00}, - {0x07, 0x04, 0x00, 0x08}, +static const u8 sIdToOpponentId[DOME_TOURNAMENT_TRAINERS_COUNT][DOME_ROUNDS_COUNT] = +{ + [0] = {8, 0, 4, 8}, + [1] = {9, 12, 8, 0}, + [2] = {10, 8, 12, 0}, + [3] = {11, 4, 0, 8}, + [4] = {12, 0, 4, 8}, + [5] = {13, 12, 8, 0}, + [6] = {14, 8, 12, 0}, + [7] = {15, 4, 0, 8}, + [8] = {0, 0, 4, 8}, + [9] = {1, 12, 8, 0}, + [10] = {2, 8, 12, 0}, + [11] = {3, 4, 0, 8}, + [12] = {4, 0, 4, 8}, + [13] = {5, 12, 8, 0}, + [14] = {6, 8, 12, 0}, + [15] = {7, 4, 0, 8}, }; static const u8 gUnknown_0860D14C[] = {0x00, 0x08, 0x04, 0x0c, 0x07, 0x0f, 0x03, 0x0b, 0x02, 0x0a, 0x06, 0x0e, 0x05, 0x0d, 0x01, 0x09}; @@ -2943,12 +2943,12 @@ static s32 sub_818FCBC(u16 tournamentTrainerId, bool8 arg1) { if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN) { - array[i] += sub_818FFC0(sub_81A5060(i, moveId), + array[i] += GetTypeEffectivenessPoints(sub_81A5060(i, moveId), GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 0); } else { - array[i] += sub_818FFC0(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][i]].moves[moveId], + array[i] += GetTypeEffectivenessPoints(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][i]].moves[moveId], GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 0); } } @@ -2971,12 +2971,12 @@ static s32 sub_818FDB8(u16 tournamentTrainerId, bool8 arg1) { if (gSaveBlock2Ptr->frontier.domeTrainers[tournamentTrainerId].trainerId == TRAINER_FRONTIER_BRAIN) { - array[i] += sub_818FFC0(sub_81A5060(i, moveId), + array[i] += GetTypeEffectivenessPoints(sub_81A5060(i, moveId), GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 1); } else { - array[i] += sub_818FFC0(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][i]].moves[moveId], + array[i] += GetTypeEffectivenessPoints(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentTrainerId][i]].moves[moveId], GetMonData(&gPlayerParty[playerMonId], MON_DATA_SPECIES, NULL), 1); } } @@ -3051,23 +3051,30 @@ static s32 sub_818FEB4(s32 *arr, bool8 arg1) return bits; } +#define TYPE_x0 0 +#define TYPE_x0_25 5 +#define TYPE_x0_50 10 +#define TYPE_x1 20 +#define TYPE_x2 40 +#define TYPE_x4 80 + // Functionally equivalent, while loop is impossible to match. #ifdef NONMATCHING -static s32 sub_818FFC0(s32 move, s32 species, s32 arg2) +static s32 GetTypeEffectivenessPoints(s32 move, s32 targetSpecies, s32 arg2) { - s32 type1, type2, ability, moveType; + s32 defType1, defType2, defAbility, moveType; s32 i = 0; - s32 typePower = 20; + s32 typePower = TYPE_x1; if (move == MOVE_NONE || move == 0xFFFF || gBattleMoves[move].power == 0) return 0; - type1 = gBaseStats[species].type1; - type2 = gBaseStats[species].type2; - ability = gBaseStats[species].ability1; + defType1 = gBaseStats[targetSpecies].type1; + defType2 = gBaseStats[targetSpecies].type2; + defAbility = gBaseStats[targetSpecies].ability1; moveType = gBattleMoves[move].type; - if (ability == ABILITY_LEVITATE && moveType == TYPE_GROUND) + if (defAbility == ABILITY_LEVITATE && moveType == TYPE_GROUND) { if (arg2 == 1) typePower = 8; @@ -3086,9 +3093,9 @@ static s32 sub_818FFC0(s32 move, s32 species, s32 arg2) if (val == moveType) { // BUG: * 2 is not necessary and makes the condition always false if the ability is wonder guard. - if (gTypeEffectiveness[i + 1] == type1 && (ability != ABILITY_WONDER_GUARD || gTypeEffectiveness[i + 2] == TYPE_MUL_SUPER_EFFECTIVE * 2)) + if (gTypeEffectiveness[i + 1] == defType1 && (defAbility != ABILITY_WONDER_GUARD || gTypeEffectiveness[i + 2] == TYPE_MUL_SUPER_EFFECTIVE * 2)) typePower = (gTypeEffectiveness[i + 2] * typePower) / 10; - if (gTypeEffectiveness[i + 1] == type2 && type1 != type2 && (ability != ABILITY_WONDER_GUARD || gTypeEffectiveness[i + 2] == TYPE_MUL_SUPER_EFFECTIVE * 2)) + if (gTypeEffectiveness[i + 1] == defType2 && defType1 != defType2 && (defAbility != ABILITY_WONDER_GUARD || gTypeEffectiveness[i + 2] == TYPE_MUL_SUPER_EFFECTIVE * 2)) typePower = (gTypeEffectiveness[i + 2] * typePower) / 10; } i += 3; @@ -3145,23 +3152,23 @@ static s32 sub_818FFC0(s32 move, s32 species, s32 arg2) case 2: switch (typePower) { - case 0: + case TYPE_x0: typePower = -16; break; - case 5: + case TYPE_x0_25: typePower = -8; break; - case 10: + case TYPE_x0_50: default: typePower = 0; break; - case 20: + case TYPE_x1: typePower = 4; break; - case 40: + case TYPE_x2: typePower = 12; break; - case 80: + case TYPE_x4: typePower = 20; break; } @@ -3172,7 +3179,7 @@ static s32 sub_818FFC0(s32 move, s32 species, s32 arg2) } #else NAKED -static s32 sub_818FFC0(s32 move, s32 species, s32 arg2) +static s32 GetTypeEffectivenessPoints(s32 move, s32 species, s32 arg2) { asm_unified("\n\ push {r4-r7,lr}\n\ @@ -3448,11 +3455,11 @@ static s32 TournamentIdOfOpponent(s32 roundId, s32 trainerId) if (roundId != DOME_ROUND1) { if (roundId == DOME_FINAL) - val = gUnknown_0860D10C[i][roundId] + 8; + val = sIdToOpponentId[i][roundId] + 8; else - val = gUnknown_0860D10C[i][roundId] + 4; + val = sIdToOpponentId[i][roundId] + 4; - for (j = gUnknown_0860D10C[i][roundId]; j < val; j++) + for (j = sIdToOpponentId[i][roundId]; j < val; j++) { if (gUnknown_0860D14C[j] != i && !gSaveBlock2Ptr->frontier.domeTrainers[gUnknown_0860D14C[j]].isEliminated) break; @@ -3465,8 +3472,8 @@ static s32 TournamentIdOfOpponent(s32 roundId, s32 trainerId) } else { - if (!gSaveBlock2Ptr->frontier.domeTrainers[gUnknown_0860D10C[i][roundId]].isEliminated) - return gUnknown_0860D10C[i][roundId]; + if (!gSaveBlock2Ptr->frontier.domeTrainers[sIdToOpponentId[i][roundId]].isEliminated) + return sIdToOpponentId[i][roundId]; else return 0xFF; } @@ -6366,7 +6373,7 @@ static void DecideRoundWinners(u8 roundId) { for (monId2 = 0; monId2 < 3; monId2++) { - points1 += sub_818FFC0(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId1][monId1]].moves[moveSlot], + points1 += GetTypeEffectivenessPoints(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId1][monId1]].moves[moveSlot], gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId2][monId2]].species, 2); } } @@ -6389,7 +6396,7 @@ static void DecideRoundWinners(u8 roundId) { for (monId2 = 0; monId2 < 3; monId2++) { - points2 += sub_818FFC0(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId2][monId1]].moves[moveSlot], + points2 += GetTypeEffectivenessPoints(gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId2][monId1]].moves[moveSlot], gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[tournamentId1][monId2]].species, 2); } } -- cgit v1.2.3 From e30c2251ce72df8ed66f119370714531c50951ae Mon Sep 17 00:00:00 2001 From: Slawter666 <38655737+Slawter666@users.noreply.github.com> Date: Mon, 27 Aug 2018 00:26:54 +0100 Subject: Convert more of data2b --- src/data/pokemon_graphics/back_pic_coordinates.h | 443 ++++ src/data/pokemon_graphics/front_pic_coordinates.h | 443 ++++ src/data/pokemon_graphics/still_front_pic_table.h | 446 ++++ src/data/pokemon_graphics/unknown_anims.h | 2347 +++++++++++++++++++++ src/data/trainer_graphics/back_pic_tables.h | 18 +- src/data/trainer_graphics/front_pic_tables.h | 188 +- src/data2b.c | 6 + 7 files changed, 3788 insertions(+), 103 deletions(-) create mode 100644 src/data/pokemon_graphics/back_pic_coordinates.h create mode 100644 src/data/pokemon_graphics/front_pic_coordinates.h create mode 100644 src/data/pokemon_graphics/still_front_pic_table.h create mode 100644 src/data/pokemon_graphics/unknown_anims.h (limited to 'src') diff --git a/src/data/pokemon_graphics/back_pic_coordinates.h b/src/data/pokemon_graphics/back_pic_coordinates.h new file mode 100644 index 000000000..f54b409e4 --- /dev/null +++ b/src/data/pokemon_graphics/back_pic_coordinates.h @@ -0,0 +1,443 @@ +const struct MonCoords gUnknown_083021D8[] = +{ + {0x88, 0x00}, // SPECIES_NONE + {0x64, 0x10}, // SPECIES_BULBASAUR + {0x66, 0x09}, // SPECIES_IVYSAUR + {0x87, 0x07}, // SPECIES_VENUSAUR + {0x65, 0x0e}, // SPECIES_CHARMANDER + {0x66, 0x09}, // SPECIES_CHARMELEON + {0x87, 0x04}, // SPECIES_CHARIZARD + {0x65, 0x0e}, // SPECIES_SQUIRTLE + {0x76, 0x0a}, // SPECIES_WARTORTLE + {0x86, 0x08}, // SPECIES_BLASTOISE + {0x55, 0x0f}, // SPECIES_CATERPIE + {0x65, 0x0c}, // SPECIES_METAPOD + {0x87, 0x06}, // SPECIES_BUTTERFREE + {0x56, 0x0b}, // SPECIES_WEEDLE + {0x46, 0x0a}, // SPECIES_KAKUNA + {0x86, 0x09}, // SPECIES_BEEDRILL + {0x66, 0x08}, // SPECIES_PIDGEY + {0x85, 0x0c}, // SPECIES_PIDGEOTTO + {0x78, 0x02}, // SPECIES_PIDGEOT + {0x65, 0x0d}, // SPECIES_RATTATA + {0x75, 0x0d}, // SPECIES_RATICATE + {0x65, 0x0c}, // SPECIES_SPEAROW + {0x87, 0x05}, // SPECIES_FEAROW + {0x66, 0x09}, // SPECIES_EKANS + {0x77, 0x04}, // SPECIES_ARBOK + {0x77, 0x07}, // SPECIES_PIKACHU + {0x66, 0x08}, // SPECIES_RAICHU + {0x65, 0x0d}, // SPECIES_SANDSHREW + {0x86, 0x09}, // SPECIES_SANDSLASH + {0x55, 0x0c}, // SPECIES_NIDORAN_F + {0x86, 0x0a}, // SPECIES_NIDORINA + {0x77, 0x06}, // SPECIES_NIDOQUEEN + {0x56, 0x08}, // SPECIES_NIDORAN_M + {0x86, 0x09}, // SPECIES_NIDORINO + {0x88, 0x03}, // SPECIES_NIDOKING + {0x65, 0x0d}, // SPECIES_CLEFAIRY + {0x76, 0x0a}, // SPECIES_CLEFABLE + {0x76, 0x09}, // SPECIES_VULPIX + {0x77, 0x05}, // SPECIES_NINETALES + {0x65, 0x0d}, // SPECIES_JIGGLYPUFF + {0x66, 0x08}, // SPECIES_WIGGLYTUFF + {0x76, 0x0b}, // SPECIES_ZUBAT + {0x87, 0x06}, // SPECIES_GOLBAT + {0x56, 0x0b}, // SPECIES_ODDISH + {0x66, 0x0a}, // SPECIES_GLOOM + {0x87, 0x07}, // SPECIES_VILEPLUME + {0x63, 0x14}, // SPECIES_PARAS + {0x87, 0x07}, // SPECIES_VENONAT + {0x77, 0x06}, // SPECIES_VENOMOTH + {0x77, 0x04}, // SPECIES_DIGLETT + {0x54, 0x10}, // SPECIES_DUGTRIO + {0x66, 0x0b}, // SPECIES_MEOWTH + {0x65, 0x0c}, // SPECIES_PERSIAN + {0x87, 0x07}, // SPECIES_PSYDUCK + {0x67, 0x07}, // SPECIES_GOLDUCK + {0x77, 0x05}, // SPECIES_MANKEY + {0x76, 0x0b}, // SPECIES_PRIMEAPE + {0x77, 0x07}, // SPECIES_GROWLITHE + {0x66, 0x08}, // SPECIES_ARCANINE + {0x87, 0x06}, // SPECIES_POLIWAG + {0x74, 0x10}, // SPECIES_POLIWHIRL + {0x65, 0x0c}, // SPECIES_POLIWRATH + {0x86, 0x0b}, // SPECIES_ABRA + {0x66, 0x0b}, // SPECIES_KADABRA + {0x76, 0x08}, // SPECIES_ALAKAZAM + {0x67, 0x05}, // SPECIES_MACHOP + {0x65, 0x0c}, // SPECIES_MACHOKE + {0x76, 0x09}, // SPECIES_MACHAMP + {0x67, 0x04}, // SPECIES_BELLSPROUT + {0x66, 0x0a}, // SPECIES_WEEPINBELL + {0x66, 0x09}, // SPECIES_VICTREEBEL + {0x87, 0x06}, // SPECIES_TENTACOOL + {0x56, 0x0a}, // SPECIES_TENTACRUEL + {0x86, 0x0b}, // SPECIES_GEODUDE + {0x66, 0x0b}, // SPECIES_GRAVELER + {0x75, 0x0c}, // SPECIES_GOLEM + {0x84, 0x10}, // SPECIES_PONYTA + {0x66, 0x09}, // SPECIES_RAPIDASH + {0x87, 0x05}, // SPECIES_SLOWPOKE + {0x85, 0x0e}, // SPECIES_SLOWBRO + {0x86, 0x0a}, // SPECIES_MAGNEMITE + {0x43, 0x14}, // SPECIES_MAGNETON + {0x66, 0x0a}, // SPECIES_FARFETCHD + {0x66, 0x0a}, // SPECIES_DODUO + {0x66, 0x08}, // SPECIES_DODRIO + {0x88, 0x01}, // SPECIES_SEEL + {0x66, 0x0a}, // SPECIES_DEWGONG + {0x77, 0x05}, // SPECIES_GRIMER + {0x75, 0x0c}, // SPECIES_MUK + {0x87, 0x05}, // SPECIES_SHELLDER + {0x76, 0x0b}, // SPECIES_CLOYSTER + {0x87, 0x06}, // SPECIES_GASTLY + {0x85, 0x0e}, // SPECIES_HAUNTER + {0x76, 0x08}, // SPECIES_GENGAR + {0x76, 0x09}, // SPECIES_ONIX + {0x78, 0x00}, // SPECIES_DROWZEE + {0x65, 0x0d}, // SPECIES_HYPNO + {0x66, 0x09}, // SPECIES_KRABBY + {0x66, 0x0a}, // SPECIES_KINGLER + {0x77, 0x04}, // SPECIES_VOLTORB + {0x55, 0x0e}, // SPECIES_ELECTRODE + {0x65, 0x0d}, // SPECIES_EXEGGCUTE + {0x65, 0x0d}, // SPECIES_EXEGGUTOR + {0x87, 0x04}, // SPECIES_CUBONE + {0x66, 0x0a}, // SPECIES_MAROWAK + {0x66, 0x08}, // SPECIES_HITMONLEE + {0x65, 0x0c}, // SPECIES_HITMONCHAN + {0x65, 0x0c}, // SPECIES_LICKITUNG + {0x65, 0x0e}, // SPECIES_KOFFING + {0x66, 0x09}, // SPECIES_WEEZING + {0x77, 0x06}, // SPECIES_RHYHORN + {0x85, 0x0c}, // SPECIES_RHYDON + {0x88, 0x03}, // SPECIES_CHANSEY + {0x86, 0x0b}, // SPECIES_TANGELA + {0x85, 0x0e}, // SPECIES_KANGASKHAN + {0x77, 0x05}, // SPECIES_HORSEA + {0x66, 0x09}, // SPECIES_SEADRA + {0x66, 0x08}, // SPECIES_GOLDEEN + {0x66, 0x08}, // SPECIES_SEAKING + {0x76, 0x0b}, // SPECIES_STARYU + {0x65, 0x0d}, // SPECIES_STARMIE + {0x85, 0x0e}, // SPECIES_MR_MIME + {0x85, 0x0d}, // SPECIES_SCYTHER + {0x77, 0x07}, // SPECIES_JYNX + {0x86, 0x0a}, // SPECIES_ELECTABUZZ + {0x66, 0x08}, // SPECIES_MAGMAR + {0x66, 0x08}, // SPECIES_PINSIR + {0x66, 0x09}, // SPECIES_TAUROS + {0x85, 0x0d}, // SPECIES_MAGIKARP + {0x76, 0x09}, // SPECIES_GYARADOS + {0x78, 0x00}, // SPECIES_LAPRAS + {0x77, 0x04}, // SPECIES_DITTO + {0x54, 0x11}, // SPECIES_EEVEE + {0x66, 0x0a}, // SPECIES_VAPOREON + {0x66, 0x0a}, // SPECIES_JOLTEON + {0x87, 0x06}, // SPECIES_FLAREON + {0x67, 0x05}, // SPECIES_PORYGON + {0x65, 0x0d}, // SPECIES_OMANYTE + {0x66, 0x0a}, // SPECIES_OMASTAR + {0x66, 0x08}, // SPECIES_KABUTO + {0x65, 0x0d}, // SPECIES_KABUTOPS + {0x77, 0x05}, // SPECIES_AERODACTYL + {0x86, 0x08}, // SPECIES_SNORLAX + {0x86, 0x0b}, // SPECIES_ARTICUNO + {0x65, 0x0c}, // SPECIES_ZAPDOS + {0x76, 0x0b}, // SPECIES_MOLTRES + {0x87, 0x04}, // SPECIES_DRATINI + {0x66, 0x09}, // SPECIES_DRAGONAIR + {0x78, 0x00}, // SPECIES_DRAGONITE + {0x87, 0x06}, // SPECIES_MEWTWO + {0x78, 0x01}, // SPECIES_MEW + {0x66, 0x08}, // SPECIES_CHIKORITA + {0x56, 0x0a}, // SPECIES_BAYLEEF + {0x66, 0x08}, // SPECIES_MEGANIUM + {0x78, 0x00}, // SPECIES_CYNDAQUIL + {0x76, 0x09}, // SPECIES_QUILAVA + {0x87, 0x04}, // SPECIES_TYPHLOSION + {0x87, 0x04}, // SPECIES_TOTODILE + {0x66, 0x0b}, // SPECIES_CROCONAW + {0x67, 0x07}, // SPECIES_FERALIGATR + {0x88, 0x01}, // SPECIES_SENTRET + {0x67, 0x05}, // SPECIES_FURRET + {0x66, 0x08}, // SPECIES_HOOTHOOT + {0x66, 0x08}, // SPECIES_NOCTOWL + {0x68, 0x03}, // SPECIES_LEDYBA + {0x76, 0x0b}, // SPECIES_LEDIAN + {0x77, 0x07}, // SPECIES_SPINARAK + {0x73, 0x15}, // SPECIES_ARIADOS + {0x86, 0x0b}, // SPECIES_CROBAT + {0x87, 0x05}, // SPECIES_CHINCHOU + {0x86, 0x08}, // SPECIES_LANTURN + {0x86, 0x08}, // SPECIES_PICHU + {0x66, 0x0b}, // SPECIES_CLEFFA + {0x65, 0x0f}, // SPECIES_IGGLYBUFF + {0x66, 0x0b}, // SPECIES_TOGEPI + {0x54, 0x10}, // SPECIES_TOGETIC + {0x66, 0x08}, // SPECIES_NATU + {0x54, 0x11}, // SPECIES_XATU + {0x76, 0x08}, // SPECIES_MAREEP + {0x66, 0x09}, // SPECIES_FLAAFFY + {0x66, 0x09}, // SPECIES_AMPHAROS + {0x88, 0x01}, // SPECIES_BELLOSSOM + {0x66, 0x0b}, // SPECIES_MARILL + {0x75, 0x0c}, // SPECIES_AZUMARILL + {0x86, 0x08}, // SPECIES_SUDOWOODO + {0x66, 0x08}, // SPECIES_POLITOED + {0x66, 0x09}, // SPECIES_HOPPIP + {0x66, 0x0b}, // SPECIES_SKIPLOOM + {0x65, 0x0d}, // SPECIES_JUMPLUFF + {0x87, 0x04}, // SPECIES_AIPOM + {0x66, 0x09}, // SPECIES_SUNKERN + {0x56, 0x0a}, // SPECIES_SUNFLORA + {0x66, 0x08}, // SPECIES_YANMA + {0x77, 0x04}, // SPECIES_WOOPER + {0x85, 0x0f}, // SPECIES_QUAGSIRE + {0x76, 0x08}, // SPECIES_ESPEON + {0x76, 0x0b}, // SPECIES_UMBREON + {0x87, 0x04}, // SPECIES_MURKROW + {0x66, 0x09}, // SPECIES_SLOWKING + {0x66, 0x08}, // SPECIES_MISDREAVUS + {0x66, 0x0a}, // SPECIES_UNOWN + {0x36, 0x08}, // SPECIES_WOBBUFFET + {0x75, 0x0c}, // SPECIES_GIRAFARIG + {0x87, 0x05}, // SPECIES_PINECO + {0x65, 0x0f}, // SPECIES_FORRETRESS + {0x84, 0x10}, // SPECIES_DUNSPARCE + {0x85, 0x0f}, // SPECIES_GLIGAR + {0x87, 0x05}, // SPECIES_STEELIX + {0x88, 0x00}, // SPECIES_SNUBBULL + {0x76, 0x0a}, // SPECIES_GRANBULL + {0x87, 0x05}, // SPECIES_QWILFISH + {0x77, 0x07}, // SPECIES_SCIZOR + {0x77, 0x04}, // SPECIES_SHUCKLE + {0x56, 0x0b}, // SPECIES_HERACROSS + {0x77, 0x04}, // SPECIES_SNEASEL + {0x66, 0x08}, // SPECIES_TEDDIURSA + {0x66, 0x08}, // SPECIES_URSARING + {0x88, 0x03}, // SPECIES_SLUGMA + {0x66, 0x08}, // SPECIES_MAGCARGO + {0x76, 0x09}, // SPECIES_SWINUB + {0x63, 0x15}, // SPECIES_PILOSWINE + {0x75, 0x0d}, // SPECIES_CORSOLA + {0x65, 0x0c}, // SPECIES_REMORAID + {0x75, 0x0d}, // SPECIES_OCTILLERY + {0x66, 0x0a}, // SPECIES_DELIBIRD + {0x67, 0x06}, // SPECIES_MANTINE + {0x87, 0x07}, // SPECIES_SKARMORY + {0x87, 0x04}, // SPECIES_HOUNDOUR + {0x55, 0x0c}, // SPECIES_HOUNDOOM + {0x87, 0x07}, // SPECIES_KINGDRA + {0x87, 0x06}, // SPECIES_PHANPY + {0x65, 0x0e}, // SPECIES_DONPHAN + {0x85, 0x0d}, // SPECIES_PORYGON2 + {0x76, 0x0a}, // SPECIES_STANTLER + {0x78, 0x03}, // SPECIES_SMEARGLE + {0x76, 0x0a}, // SPECIES_TYROGUE + {0x66, 0x08}, // SPECIES_HITMONTOP + {0x87, 0x05}, // SPECIES_SMOOCHUM + {0x56, 0x09}, // SPECIES_ELEKID + {0x66, 0x08}, // SPECIES_MAGBY + {0x66, 0x0b}, // SPECIES_MILTANK + {0x87, 0x07}, // SPECIES_BLISSEY + {0x85, 0x0d}, // SPECIES_RAIKOU + {0x86, 0x0a}, // SPECIES_ENTEI + {0x87, 0x06}, // SPECIES_SUICUNE + {0x88, 0x03}, // SPECIES_LARVITAR + {0x66, 0x08}, // SPECIES_PUPITAR + {0x67, 0x05}, // SPECIES_TYRANITAR + {0x88, 0x00}, // SPECIES_LUGIA + {0x88, 0x01}, // SPECIES_HO_OH + {0x88, 0x01}, // SPECIES_CELEBI + {0x66, 0x08}, // SPECIES_OLD_UNOWN_B + {0x88, 0x02}, // SPECIES_OLD_UNOWN_C + {0x88, 0x02}, // SPECIES_OLD_UNOWN_D + {0x88, 0x02}, // SPECIES_OLD_UNOWN_E + {0x88, 0x02}, // SPECIES_OLD_UNOWN_F + {0x88, 0x02}, // SPECIES_OLD_UNOWN_G + {0x88, 0x02}, // SPECIES_OLD_UNOWN_H + {0x88, 0x02}, // SPECIES_OLD_UNOWN_I + {0x88, 0x02}, // SPECIES_OLD_UNOWN_J + {0x88, 0x02}, // SPECIES_OLD_UNOWN_K + {0x88, 0x02}, // SPECIES_OLD_UNOWN_L + {0x88, 0x02}, // SPECIES_OLD_UNOWN_M + {0x88, 0x02}, // SPECIES_OLD_UNOWN_N + {0x88, 0x02}, // SPECIES_OLD_UNOWN_O + {0x88, 0x02}, // SPECIES_OLD_UNOWN_P + {0x88, 0x02}, // SPECIES_OLD_UNOWN_Q + {0x88, 0x02}, // SPECIES_OLD_UNOWN_R + {0x88, 0x02}, // SPECIES_OLD_UNOWN_S + {0x88, 0x02}, // SPECIES_OLD_UNOWN_T + {0x88, 0x02}, // SPECIES_OLD_UNOWN_U + {0x88, 0x02}, // SPECIES_OLD_UNOWN_V + {0x88, 0x02}, // SPECIES_OLD_UNOWN_W + {0x88, 0x02}, // SPECIES_OLD_UNOWN_X + {0x88, 0x02}, // SPECIES_OLD_UNOWN_Y + {0x88, 0x02}, // SPECIES_OLD_UNOWN_Z + {0x88, 0x02}, // SPECIES_TREECKO + {0x87, 0x06}, // SPECIES_GROVYLE + {0x86, 0x08}, // SPECIES_SCEPTILE + {0x88, 0x01}, // SPECIES_TORCHIC + {0x67, 0x05}, // SPECIES_COMBUSKEN + {0x88, 0x00}, // SPECIES_BLAZIKEN + {0x88, 0x00}, // SPECIES_MUDKIP + {0x77, 0x05}, // SPECIES_MARSHTOMP + {0x87, 0x04}, // SPECIES_SWAMPERT + {0x87, 0x05}, // SPECIES_POOCHYENA + {0x76, 0x09}, // SPECIES_MIGHTYENA + {0x87, 0x04}, // SPECIES_ZIGZAGOON + {0x76, 0x0b}, // SPECIES_LINOONE + {0x85, 0x0f}, // SPECIES_WURMPLE + {0x76, 0x0b}, // SPECIES_SILCOON + {0x83, 0x15}, // SPECIES_BEAUTIFLY + {0x88, 0x00}, // SPECIES_CASCOON + {0x73, 0x14}, // SPECIES_DUSTOX + {0x83, 0x14}, // SPECIES_LOTAD + {0x75, 0x0f}, // SPECIES_LOMBRE + {0x86, 0x08}, // SPECIES_LUDICOLO + {0x86, 0x0a}, // SPECIES_SEEDOT + {0x86, 0x09}, // SPECIES_NUZLEAF + {0x76, 0x0a}, // SPECIES_SHIFTRY + {0x86, 0x08}, // SPECIES_NINCADA + {0x83, 0x14}, // SPECIES_NINJASK + {0x86, 0x08}, // SPECIES_SHEDINJA + {0x77, 0x06}, // SPECIES_TAILLOW + {0x64, 0x11}, // SPECIES_SWELLOW + {0x86, 0x08}, // SPECIES_SHROOMISH + {0x85, 0x0d}, // SPECIES_BRELOOM + {0x87, 0x04}, // SPECIES_SPINDA + {0x77, 0x04}, // SPECIES_WINGULL + {0x85, 0x0e}, // SPECIES_PELIPPER + {0x87, 0x06}, // SPECIES_SURSKIT + {0x86, 0x0b}, // SPECIES_MASQUERAIN + {0x88, 0x00}, // SPECIES_WAILMER + {0x83, 0x15}, // SPECIES_WAILORD + {0x83, 0x16}, // SPECIES_SKITTY + {0x86, 0x0a}, // SPECIES_DELCATTY + {0x86, 0x08}, // SPECIES_KECLEON + {0x87, 0x06}, // SPECIES_BALTOY + {0x86, 0x08}, // SPECIES_CLAYDOL + {0x87, 0x07}, // SPECIES_NOSEPASS + {0x85, 0x0c}, // SPECIES_TORKOAL + {0x86, 0x0a}, // SPECIES_SABLEYE + {0x76, 0x08}, // SPECIES_BARBOACH + {0x66, 0x0a}, // SPECIES_WHISCASH + {0x86, 0x0a}, // SPECIES_LUVDISC + {0x46, 0x0a}, // SPECIES_CORPHISH + {0x77, 0x07}, // SPECIES_CRAWDAUNT + {0x87, 0x05}, // SPECIES_FEEBAS + {0x67, 0x07}, // SPECIES_MILOTIC + {0x68, 0x02}, // SPECIES_CARVANHA + {0x87, 0x07}, // SPECIES_SHARPEDO + {0x88, 0x02}, // SPECIES_TRAPINCH + {0x75, 0x0e}, // SPECIES_VIBRAVA + {0x74, 0x11}, // SPECIES_FLYGON + {0x88, 0x02}, // SPECIES_MAKUHITA + {0x76, 0x0b}, // SPECIES_HARIYAMA + {0x87, 0x07}, // SPECIES_ELECTRIKE + {0x84, 0x10}, // SPECIES_MANECTRIC + {0x87, 0x04}, // SPECIES_NUMEL + {0x86, 0x0b}, // SPECIES_CAMERUPT + {0x84, 0x13}, // SPECIES_SPHEAL + {0x64, 0x12}, // SPECIES_SEALEO + {0x86, 0x0a}, // SPECIES_WALREIN + {0x87, 0x06}, // SPECIES_CACNEA + {0x85, 0x0f}, // SPECIES_CACTURNE + {0x87, 0x07}, // SPECIES_SNORUNT + {0x76, 0x0a}, // SPECIES_GLALIE + {0x85, 0x0c}, // SPECIES_LUNATONE + {0x87, 0x05}, // SPECIES_SOLROCK + {0x87, 0x05}, // SPECIES_AZURILL + {0x86, 0x0a}, // SPECIES_SPOINK + {0x56, 0x0b}, // SPECIES_GRUMPIG + {0x87, 0x04}, // SPECIES_PLUSLE + {0x76, 0x08}, // SPECIES_MINUN + {0x76, 0x08}, // SPECIES_MAWILE + {0x87, 0x04}, // SPECIES_MEDITITE + {0x76, 0x0b}, // SPECIES_MEDICHAM + {0x68, 0x03}, // SPECIES_SWABLU + {0x86, 0x09}, // SPECIES_ALTARIA + {0x87, 0x06}, // SPECIES_WYNAUT + {0x77, 0x07}, // SPECIES_DUSKULL + {0x66, 0x0b}, // SPECIES_DUSCLOPS + {0x86, 0x08}, // SPECIES_ROSELIA + {0x86, 0x08}, // SPECIES_SLAKOTH + {0x85, 0x0f}, // SPECIES_VIGOROTH + {0x86, 0x0a}, // SPECIES_SLAKING + {0x86, 0x08}, // SPECIES_GULPIN + {0x66, 0x0b}, // SPECIES_SWALOT + {0x77, 0x06}, // SPECIES_TROPIUS + {0x87, 0x07}, // SPECIES_WHISMUR + {0x85, 0x0d}, // SPECIES_LOUDRED + {0x86, 0x09}, // SPECIES_EXPLOUD + {0x88, 0x03}, // SPECIES_CLAMPERL + {0x85, 0x0d}, // SPECIES_HUNTAIL + {0x68, 0x02}, // SPECIES_GOREBYSS + {0x77, 0x05}, // SPECIES_ABSOL + {0x78, 0x03}, // SPECIES_SHUPPET + {0x77, 0x06}, // SPECIES_BANETTE + {0x65, 0x0c}, // SPECIES_SEVIPER + {0x88, 0x03}, // SPECIES_ZANGOOSE + {0x88, 0x01}, // SPECIES_RELICANTH + {0x86, 0x0a}, // SPECIES_ARON + {0x54, 0x11}, // SPECIES_LAIRON + {0x84, 0x11}, // SPECIES_AGGRON + {0x87, 0x07}, // SPECIES_CASTFORM + {0x45, 0x0d}, // SPECIES_VOLBEAT + {0x76, 0x08}, // SPECIES_ILLUMISE + {0x67, 0x06}, // SPECIES_LILEEP + {0x86, 0x09}, // SPECIES_CRADILY + {0x77, 0x04}, // SPECIES_ANORITH + {0x83, 0x17}, // SPECIES_ARMALDO + {0x77, 0x05}, // SPECIES_RALTS + {0x45, 0x0d}, // SPECIES_KIRLIA + {0x57, 0x06}, // SPECIES_GARDEVOIR + {0x77, 0x04}, // SPECIES_BAGON + {0x66, 0x08}, // SPECIES_SHELGON + {0x85, 0x0d}, // SPECIES_SALAMENCE + {0x77, 0x06}, // SPECIES_BELDUM + {0x66, 0x0a}, // SPECIES_METANG + {0x84, 0x10}, // SPECIES_METAGROSS + {0x83, 0x14}, // SPECIES_REGIROCK + {0x86, 0x0a}, // SPECIES_REGICE + {0x85, 0x0e}, // SPECIES_REGISTEEL + {0x85, 0x0e}, // SPECIES_KYOGRE + {0x84, 0x13}, // SPECIES_GROUDON + {0x87, 0x07}, // SPECIES_RAYQUAZA + {0x78, 0x00}, // SPECIES_LATIAS + {0x88, 0x02}, // SPECIES_LATIOS + {0x88, 0x03}, // SPECIES_JIRACHI + {0x87, 0x05}, // SPECIES_DEOXYS + {0x86, 0x09}, // SPECIES_CHIMECHO + {0x47, 0x07}, // SPECIES_EGG + {0x36, 0x0a}, // SPECIES_UNOWN_B + {0x56, 0x09}, // SPECIES_UNOWN_C + {0x67, 0x06}, // SPECIES_UNOWN_D + {0x56, 0x08}, // SPECIES_UNOWN_E + {0x56, 0x0a}, // SPECIES_UNOWN_F + {0x66, 0x0a}, // SPECIES_UNOWN_G + {0x57, 0x05}, // SPECIES_UNOWN_H + {0x66, 0x08}, // SPECIES_UNOWN_I + {0x37, 0x07}, // SPECIES_UNOWN_J + {0x46, 0x09}, // SPECIES_UNOWN_K + {0x57, 0x07}, // SPECIES_UNOWN_L + {0x46, 0x0a}, // SPECIES_UNOWN_M + {0x65, 0x0d}, // SPECIES_UNOWN_N + {0x65, 0x0d}, // SPECIES_UNOWN_O + {0x66, 0x08}, // SPECIES_UNOWN_P + {0x46, 0x0a}, // SPECIES_UNOWN_Q + {0x55, 0x0f}, // SPECIES_UNOWN_R + {0x45, 0x0c}, // SPECIES_UNOWN_S + {0x57, 0x04}, // SPECIES_UNOWN_T + {0x45, 0x0d}, // SPECIES_UNOWN_U + {0x65, 0x0d}, // SPECIES_UNOWN_V + {0x56, 0x0b}, // SPECIES_UNOWN_W + {0x55, 0x0d}, // SPECIES_UNOWN_X + {0x55, 0x0f}, // SPECIES_UNOWN_Y + {0x46, 0x0a}, // SPECIES_UNOWN_Z + {0x46, 0x0a}, // SPECIES_UNOWN_EMARK + {0x37, 0x06}, // SPECIES_UNOWN_QMARK + {0x47, 0x06}, +}; diff --git a/src/data/pokemon_graphics/front_pic_coordinates.h b/src/data/pokemon_graphics/front_pic_coordinates.h new file mode 100644 index 000000000..fde423570 --- /dev/null +++ b/src/data/pokemon_graphics/front_pic_coordinates.h @@ -0,0 +1,443 @@ +const struct MonCoords gMonFrontPicCoords[] = +{ + {0x88, 0x00}, // SPECIES_NONE + {0x45, 0x0e}, // SPECIES_BULBASAUR + {0x56, 0x0a}, // SPECIES_IVYSAUR + {0x88, 0x03}, // SPECIES_VENUSAUR + {0x55, 0x0c}, // SPECIES_CHARMANDER + {0x66, 0x09}, // SPECIES_CHARMELEON + {0x88, 0x01}, // SPECIES_CHARIZARD + {0x65, 0x0d}, // SPECIES_SQUIRTLE + {0x66, 0x08}, // SPECIES_WARTORTLE + {0x88, 0x00}, // SPECIES_BLASTOISE + {0x45, 0x10}, // SPECIES_CATERPIE + {0x54, 0x14}, // SPECIES_METAPOD + {0x76, 0x09}, // SPECIES_BUTTERFREE + {0x54, 0x12}, // SPECIES_WEEDLE + {0x45, 0x0e}, // SPECIES_KAKUNA + {0x86, 0x09}, // SPECIES_BEEDRILL + {0x65, 0x0d}, // SPECIES_PIDGEY + {0x67, 0x0b}, // SPECIES_PIDGEOTTO + {0x88, 0x01}, // SPECIES_PIDGEOT + {0x44, 0x10}, // SPECIES_RATTATA + {0x66, 0x0b}, // SPECIES_RATICATE + {0x45, 0x0f}, // SPECIES_SPEAROW + {0x78, 0x00}, // SPECIES_FEAROW + {0x65, 0x0c}, // SPECIES_EKANS + {0x88, 0x02}, // SPECIES_ARBOK + {0x67, 0x09}, // SPECIES_PIKACHU + {0x67, 0x04}, // SPECIES_RAICHU + {0x55, 0x0e}, // SPECIES_SANDSHREW + {0x76, 0x09}, // SPECIES_SANDSLASH + {0x45, 0x0f}, // SPECIES_NIDORAN_F + {0x66, 0x0b}, // SPECIES_NIDORINA + {0x78, 0x03}, // SPECIES_NIDOQUEEN + {0x55, 0x0c}, // SPECIES_NIDORAN_M + {0x66, 0x09}, // SPECIES_NIDORINO + {0x78, 0x02}, // SPECIES_NIDOKING + {0x55, 0x10}, // SPECIES_CLEFAIRY + {0x66, 0x08}, // SPECIES_CLEFABLE + {0x65, 0x0c}, // SPECIES_VULPIX + {0x88, 0x03}, // SPECIES_NINETALES + {0x45, 0x10}, // SPECIES_JIGGLYPUFF + {0x67, 0x08}, // SPECIES_WIGGLYTUFF + {0x67, 0x06}, // SPECIES_ZUBAT + {0x88, 0x03}, // SPECIES_GOLBAT + {0x45, 0x0f}, // SPECIES_ODDISH + {0x66, 0x0a}, // SPECIES_GLOOM + {0x77, 0x06}, // SPECIES_VILEPLUME + {0x55, 0x0f}, // SPECIES_PARAS + {0x86, 0x08}, // SPECIES_VENONAT + {0x66, 0x08}, // SPECIES_VENOMOTH + {0x88, 0x02}, // SPECIES_DIGLETT + {0x54, 0x12}, // SPECIES_DUGTRIO + {0x75, 0x0d}, // SPECIES_MEOWTH + {0x55, 0x0c}, // SPECIES_PERSIAN + {0x77, 0x07}, // SPECIES_PSYDUCK + {0x56, 0x09}, // SPECIES_GOLDUCK + {0x78, 0x02}, // SPECIES_MANKEY + {0x65, 0x0e}, // SPECIES_PRIMEAPE + {0x77, 0x07}, // SPECIES_GROWLITHE + {0x66, 0x0b}, // SPECIES_ARCANINE + {0x88, 0x02}, // SPECIES_POLIWAG + {0x74, 0x13}, // SPECIES_POLIWHIRL + {0x76, 0x0a}, // SPECIES_POLIWRATH + {0x76, 0x08}, // SPECIES_ABRA + {0x66, 0x0b}, // SPECIES_KADABRA + {0x77, 0x05}, // SPECIES_ALAKAZAM + {0x87, 0x04}, // SPECIES_MACHOP + {0x56, 0x0b}, // SPECIES_MACHOKE + {0x67, 0x06}, // SPECIES_MACHAMP + {0x88, 0x01}, // SPECIES_BELLSPROUT + {0x65, 0x0f}, // SPECIES_WEEPINBELL + {0x66, 0x0b}, // SPECIES_VICTREEBEL + {0x77, 0x05}, // SPECIES_TENTACOOL + {0x46, 0x09}, // SPECIES_TENTACRUEL + {0x87, 0x04}, // SPECIES_GEODUDE + {0x54, 0x12}, // SPECIES_GRAVELER + {0x87, 0x04}, // SPECIES_GOLEM + {0x77, 0x05}, // SPECIES_PONYTA + {0x66, 0x08}, // SPECIES_RAPIDASH + {0x88, 0x01}, // SPECIES_SLOWPOKE + {0x66, 0x0b}, // SPECIES_SLOWBRO + {0x86, 0x08}, // SPECIES_MAGNEMITE + {0x43, 0x15}, // SPECIES_MAGNETON + {0x76, 0x08}, // SPECIES_FARFETCHD + {0x66, 0x09}, // SPECIES_DODUO + {0x57, 0x05}, // SPECIES_DODRIO + {0x88, 0x00}, // SPECIES_SEEL + {0x76, 0x0a}, // SPECIES_DEWGONG + {0x87, 0x07}, // SPECIES_GRIMER + {0x65, 0x0c}, // SPECIES_MUK + {0x87, 0x04}, // SPECIES_SHELLDER + {0x55, 0x10}, // SPECIES_CLOYSTER + {0x87, 0x05}, // SPECIES_GASTLY + {0x77, 0x06}, // SPECIES_HAUNTER + {0x77, 0x05}, // SPECIES_GENGAR + {0x77, 0x05}, // SPECIES_ONIX + {0x78, 0x02}, // SPECIES_DROWZEE + {0x77, 0x07}, // SPECIES_HYPNO + {0x77, 0x04}, // SPECIES_KRABBY + {0x65, 0x0d}, // SPECIES_KINGLER + {0x88, 0x03}, // SPECIES_VOLTORB + {0x44, 0x13}, // SPECIES_ELECTRODE + {0x55, 0x0e}, // SPECIES_EXEGGCUTE + {0x87, 0x07}, // SPECIES_EXEGGUTOR + {0x88, 0x00}, // SPECIES_CUBONE + {0x55, 0x0f}, // SPECIES_MAROWAK + {0x76, 0x0b}, // SPECIES_HITMONLEE + {0x87, 0x04}, // SPECIES_HITMONCHAN + {0x67, 0x04}, // SPECIES_LICKITUNG + {0x86, 0x08}, // SPECIES_KOFFING + {0x66, 0x08}, // SPECIES_WEEZING + {0x88, 0x02}, // SPECIES_RHYHORN + {0x76, 0x09}, // SPECIES_RHYDON + {0x88, 0x02}, // SPECIES_CHANSEY + {0x76, 0x09}, // SPECIES_TANGELA + {0x67, 0x07}, // SPECIES_KANGASKHAN + {0x88, 0x00}, // SPECIES_HORSEA + {0x45, 0x0f}, // SPECIES_SEADRA + {0x67, 0x07}, // SPECIES_GOLDEEN + {0x66, 0x0a}, // SPECIES_SEAKING + {0x77, 0x04}, // SPECIES_STARYU + {0x66, 0x0a}, // SPECIES_STARMIE + {0x77, 0x06}, // SPECIES_MR_MIME + {0x66, 0x08}, // SPECIES_SCYTHER + {0x88, 0x00}, // SPECIES_JYNX + {0x77, 0x04}, // SPECIES_ELECTABUZZ + {0x78, 0x02}, // SPECIES_MAGMAR + {0x77, 0x04}, // SPECIES_PINSIR + {0x77, 0x04}, // SPECIES_TAUROS + {0x78, 0x00}, // SPECIES_MAGIKARP + {0x67, 0x06}, // SPECIES_GYARADOS + {0x88, 0x08}, // SPECIES_LAPRAS + {0x85, 0x0d}, // SPECIES_DITTO + {0x54, 0x11}, // SPECIES_EEVEE + {0x56, 0x09}, // SPECIES_VAPOREON + {0x67, 0x06}, // SPECIES_JOLTEON + {0x76, 0x09}, // SPECIES_FLAREON + {0x66, 0x0a}, // SPECIES_PORYGON + {0x55, 0x0d}, // SPECIES_OMANYTE + {0x45, 0x0f}, // SPECIES_OMASTAR + {0x67, 0x07}, // SPECIES_KABUTO + {0x54, 0x11}, // SPECIES_KABUTOPS + {0x88, 0x03}, // SPECIES_AERODACTYL + {0x88, 0x01}, // SPECIES_SNORLAX + {0x87, 0x05}, // SPECIES_ARTICUNO + {0x88, 0x03}, // SPECIES_ZAPDOS + {0x87, 0x04}, // SPECIES_MOLTRES + {0x88, 0x00}, // SPECIES_DRATINI + {0x75, 0x0e}, // SPECIES_DRAGONAIR + {0x87, 0x06}, // SPECIES_DRAGONITE + {0x88, 0x00}, // SPECIES_MEWTWO + {0x88, 0x00}, // SPECIES_MEW + {0x55, 0x0d}, // SPECIES_CHIKORITA + {0x75, 0x0d}, // SPECIES_BAYLEEF + {0x77, 0x04}, // SPECIES_MEGANIUM + {0x88, 0x00}, // SPECIES_CYNDAQUIL + {0x55, 0x0e}, // SPECIES_QUILAVA + {0x76, 0x08}, // SPECIES_TYPHLOSION + {0x78, 0x00}, // SPECIES_TOTODILE + {0x55, 0x0f}, // SPECIES_CROCONAW + {0x67, 0x06}, // SPECIES_FERALIGATR + {0x88, 0x00}, // SPECIES_SENTRET + {0x47, 0x04}, // SPECIES_FURRET + {0x67, 0x07}, // SPECIES_HOOTHOOT + {0x55, 0x0d}, // SPECIES_NOCTOWL + {0x58, 0x03}, // SPECIES_LEDYBA + {0x56, 0x0c}, // SPECIES_LEDIAN + {0x67, 0x04}, // SPECIES_SPINARAK + {0x54, 0x13}, // SPECIES_ARIADOS + {0x87, 0x05}, // SPECIES_CROBAT + {0x88, 0x00}, // SPECIES_CHINCHOU + {0x75, 0x10}, // SPECIES_LANTURN + {0x87, 0x0b}, // SPECIES_PICHU + {0x45, 0x0c}, // SPECIES_CLEFFA + {0x44, 0x14}, // SPECIES_IGGLYBUFF + {0x44, 0x12}, // SPECIES_TOGEPI + {0x34, 0x14}, // SPECIES_TOGETIC + {0x46, 0x09}, // SPECIES_NATU + {0x44, 0x14}, // SPECIES_XATU + {0x47, 0x07}, // SPECIES_MAREEP + {0x55, 0x10}, // SPECIES_FLAAFFY + {0x56, 0x0a}, // SPECIES_AMPHAROS + {0x77, 0x05}, // SPECIES_BELLOSSOM + {0x45, 0x0e}, // SPECIES_MARILL + {0x65, 0x0e}, // SPECIES_AZUMARILL + {0x76, 0x09}, // SPECIES_SUDOWOODO + {0x67, 0x06}, // SPECIES_POLITOED + {0x67, 0x06}, // SPECIES_HOPPIP + {0x66, 0x0a}, // SPECIES_SKIPLOOM + {0x55, 0x0f}, // SPECIES_JUMPLUFF + {0x77, 0x07}, // SPECIES_AIPOM + {0x58, 0x03}, // SPECIES_SUNKERN + {0x44, 0x10}, // SPECIES_SUNFLORA + {0x56, 0x08}, // SPECIES_YANMA + {0x86, 0x0a}, // SPECIES_WOOPER + {0x54, 0x10}, // SPECIES_QUAGSIRE + {0x77, 0x07}, // SPECIES_ESPEON + {0x66, 0x08}, // SPECIES_UMBREON + {0x67, 0x08}, // SPECIES_MURKROW + {0x66, 0x0b}, // SPECIES_SLOWKING + {0x58, 0x01}, // SPECIES_MISDREAVUS + {0x55, 0x0c}, // SPECIES_UNOWN + {0x35, 0x0f}, // SPECIES_WOBBUFFET + {0x77, 0x06}, // SPECIES_GIRAFARIG + {0x88, 0x03}, // SPECIES_PINECO + {0x56, 0x0a}, // SPECIES_FORRETRESS + {0x76, 0x09}, // SPECIES_DUNSPARCE + {0x74, 0x11}, // SPECIES_GLIGAR + {0x78, 0x03}, // SPECIES_STEELIX + {0x88, 0x00}, // SPECIES_SNUBBULL + {0x55, 0x0d}, // SPECIES_GRANBULL + {0x57, 0x06}, // SPECIES_QWILFISH + {0x56, 0x0a}, // SPECIES_SCIZOR + {0x88, 0x00}, // SPECIES_SHUCKLE + {0x66, 0x09}, // SPECIES_HERACROSS + {0x88, 0x03}, // SPECIES_SNEASEL + {0x67, 0x05}, // SPECIES_TEDDIURSA + {0x45, 0x0d}, // SPECIES_URSARING + {0x78, 0x01}, // SPECIES_SLUGMA + {0x45, 0x0d}, // SPECIES_MAGCARGO + {0x57, 0x0d}, // SPECIES_SWINUB + {0x43, 0x14}, // SPECIES_PILOSWINE + {0x66, 0x08}, // SPECIES_CORSOLA + {0x65, 0x0c}, // SPECIES_REMORAID + {0x55, 0x0e}, // SPECIES_OCTILLERY + {0x66, 0x0a}, // SPECIES_DELIBIRD + {0x56, 0x08}, // SPECIES_MANTINE + {0x88, 0x01}, // SPECIES_SKARMORY + {0x88, 0x00}, // SPECIES_HOUNDOUR + {0x56, 0x0b}, // SPECIES_HOUNDOOM + {0x77, 0x05}, // SPECIES_KINGDRA + {0x78, 0x04}, // SPECIES_PHANPY + {0x54, 0x10}, // SPECIES_DONPHAN + {0x86, 0x08}, // SPECIES_PORYGON2 + {0x55, 0x0f}, // SPECIES_STANTLER + {0x88, 0x00}, // SPECIES_SMEARGLE + {0x77, 0x06}, // SPECIES_TYROGUE + {0x46, 0x09}, // SPECIES_HITMONTOP + {0x67, 0x05}, // SPECIES_SMOOCHUM + {0x35, 0x0f}, // SPECIES_ELEKID + {0x76, 0x0a}, // SPECIES_MAGBY + {0x45, 0x0d}, // SPECIES_MILTANK + {0x77, 0x04}, // SPECIES_BLISSEY + {0x77, 0x06}, // SPECIES_RAIKOU + {0x88, 0x00}, // SPECIES_ENTEI + {0x88, 0x00}, // SPECIES_SUICUNE + {0x88, 0x00}, // SPECIES_LARVITAR + {0x46, 0x09}, // SPECIES_PUPITAR + {0x56, 0x09}, // SPECIES_TYRANITAR + {0x88, 0x00}, // SPECIES_LUGIA + {0x88, 0x00}, // SPECIES_HO_OH + {0x88, 0x00}, // SPECIES_CELEBI + {0x55, 0x0e}, // SPECIES_OLD_UNOWN_B + {0x87, 0x04}, // SPECIES_OLD_UNOWN_C + {0x87, 0x04}, // SPECIES_OLD_UNOWN_D + {0x87, 0x04}, // SPECIES_OLD_UNOWN_E + {0x87, 0x04}, // SPECIES_OLD_UNOWN_F + {0x87, 0x04}, // SPECIES_OLD_UNOWN_G + {0x87, 0x04}, // SPECIES_OLD_UNOWN_H + {0x87, 0x04}, // SPECIES_OLD_UNOWN_I + {0x87, 0x04}, // SPECIES_OLD_UNOWN_J + {0x87, 0x04}, // SPECIES_OLD_UNOWN_K + {0x87, 0x04}, // SPECIES_OLD_UNOWN_L + {0x87, 0x04}, // SPECIES_OLD_UNOWN_M + {0x87, 0x04}, // SPECIES_OLD_UNOWN_N + {0x87, 0x04}, // SPECIES_OLD_UNOWN_O + {0x87, 0x04}, // SPECIES_OLD_UNOWN_P + {0x87, 0x04}, // SPECIES_OLD_UNOWN_Q + {0x87, 0x04}, // SPECIES_OLD_UNOWN_R + {0x87, 0x04}, // SPECIES_OLD_UNOWN_S + {0x87, 0x04}, // SPECIES_OLD_UNOWN_T + {0x87, 0x04}, // SPECIES_OLD_UNOWN_U + {0x87, 0x04}, // SPECIES_OLD_UNOWN_V + {0x87, 0x04}, // SPECIES_OLD_UNOWN_W + {0x87, 0x04}, // SPECIES_OLD_UNOWN_X + {0x87, 0x04}, // SPECIES_OLD_UNOWN_Y + {0x87, 0x04}, // SPECIES_OLD_UNOWN_Z + {0x87, 0x04}, // SPECIES_TREECKO + {0x66, 0x08}, // SPECIES_GROVYLE + {0x87, 0x04}, // SPECIES_SCEPTILE + {0x88, 0x00}, // SPECIES_TORCHIC + {0x56, 0x08}, // SPECIES_COMBUSKEN + {0x88, 0x01}, // SPECIES_BLAZIKEN + {0x88, 0x00}, // SPECIES_MUDKIP + {0x56, 0x0c}, // SPECIES_MARSHTOMP + {0x67, 0x06}, // SPECIES_SWAMPERT + {0x88, 0x00}, // SPECIES_POOCHYENA + {0x55, 0x0c}, // SPECIES_MIGHTYENA + {0x87, 0x04}, // SPECIES_ZIGZAGOON + {0x85, 0x0f}, // SPECIES_LINOONE + {0x78, 0x03}, // SPECIES_WURMPLE + {0x45, 0x0e}, // SPECIES_SILCOON + {0x75, 0x11}, // SPECIES_BEAUTIFLY + {0x86, 0x09}, // SPECIES_CASCOON + {0x74, 0x10}, // SPECIES_DUSTOX + {0x86, 0x0f}, // SPECIES_LOTAD + {0x65, 0x0e}, // SPECIES_LOMBRE + {0x66, 0x09}, // SPECIES_LUDICOLO + {0x88, 0x00}, // SPECIES_SEEDOT + {0x46, 0x10}, // SPECIES_NUZLEAF + {0x56, 0x08}, // SPECIES_SHIFTRY + {0x88, 0x02}, // SPECIES_NINCADA + {0x74, 0x12}, // SPECIES_NINJASK + {0x86, 0x0a}, // SPECIES_SHEDINJA + {0x66, 0x0a}, // SPECIES_TAILLOW + {0x64, 0x10}, // SPECIES_SWELLOW + {0x87, 0x06}, // SPECIES_SHROOMISH + {0x54, 0x10}, // SPECIES_BRELOOM + {0x77, 0x04}, // SPECIES_SPINDA + {0x68, 0x08}, // SPECIES_WINGULL + {0x84, 0x18}, // SPECIES_PELIPPER + {0x77, 0x04}, // SPECIES_SURSKIT + {0x65, 0x0f}, // SPECIES_MASQUERAIN + {0x88, 0x01}, // SPECIES_WAILMER + {0x75, 0x0f}, // SPECIES_WAILORD + {0x87, 0x0a}, // SPECIES_SKITTY + {0x66, 0x0b}, // SPECIES_DELCATTY + {0x66, 0x08}, // SPECIES_KECLEON + {0x67, 0x07}, // SPECIES_BALTOY + {0x55, 0x10}, // SPECIES_CLAYDOL + {0x78, 0x06}, // SPECIES_NOSEPASS + {0x56, 0x0c}, // SPECIES_TORKOAL + {0x88, 0x02}, // SPECIES_SABLEYE + {0x66, 0x09}, // SPECIES_BARBOACH + {0x46, 0x0b}, // SPECIES_WHISCASH + {0x76, 0x09}, // SPECIES_LUVDISC + {0x46, 0x18}, // SPECIES_CORPHISH + {0x66, 0x0c}, // SPECIES_CRAWDAUNT + {0x88, 0x01}, // SPECIES_FEEBAS + {0x46, 0x0d}, // SPECIES_MILOTIC + {0x88, 0x00}, // SPECIES_CARVANHA + {0x67, 0x06}, // SPECIES_SHARPEDO + {0x78, 0x03}, // SPECIES_TRAPINCH + {0x54, 0x10}, // SPECIES_VIBRAVA + {0x86, 0x0c}, // SPECIES_FLYGON + {0x88, 0x01}, // SPECIES_MAKUHITA + {0x65, 0x0c}, // SPECIES_HARIYAMA + {0x88, 0x01}, // SPECIES_ELECTRIKE + {0x64, 0x12}, // SPECIES_MANECTRIC + {0x67, 0x04}, // SPECIES_NUMEL + {0x65, 0x0f}, // SPECIES_CAMERUPT + {0x87, 0x09}, // SPECIES_SPHEAL + {0x65, 0x10}, // SPECIES_SEALEO + {0x86, 0x0a}, // SPECIES_WALREIN + {0x88, 0x01}, // SPECIES_CACNEA + {0x74, 0x10}, // SPECIES_CACTURNE + {0x88, 0x00}, // SPECIES_SNORUNT + {0x56, 0x0b}, // SPECIES_GLALIE + {0x76, 0x0a}, // SPECIES_LUNATONE + {0x66, 0x09}, // SPECIES_SOLROCK + {0x88, 0x01}, // SPECIES_AZURILL + {0x55, 0x0f}, // SPECIES_SPOINK + {0x46, 0x09}, // SPECIES_GRUMPIG + {0x77, 0x05}, // SPECIES_PLUSLE + {0x56, 0x0e}, // SPECIES_MINUN + {0x66, 0x0c}, // SPECIES_MAWILE + {0x76, 0x08}, // SPECIES_MEDITITE + {0x65, 0x0c}, // SPECIES_MEDICHAM + {0x68, 0x01}, // SPECIES_SWABLU + {0x76, 0x11}, // SPECIES_ALTARIA + {0x88, 0x02}, // SPECIES_WYNAUT + {0x55, 0x0c}, // SPECIES_DUSKULL + {0x66, 0x0a}, // SPECIES_DUSCLOPS + {0x77, 0x05}, // SPECIES_ROSELIA + {0x76, 0x08}, // SPECIES_SLAKOTH + {0x74, 0x12}, // SPECIES_VIGOROTH + {0x78, 0x00}, // SPECIES_SLAKING + {0x86, 0x08}, // SPECIES_GULPIN + {0x55, 0x12}, // SPECIES_SWALOT + {0x66, 0x08}, // SPECIES_TROPIUS + {0x88, 0x00}, // SPECIES_WHISMUR + {0x55, 0x0e}, // SPECIES_LOUDRED + {0x78, 0x03}, // SPECIES_EXPLOUD + {0x88, 0x01}, // SPECIES_CLAMPERL + {0x55, 0x0e}, // SPECIES_HUNTAIL + {0x78, 0x03}, // SPECIES_GOREBYSS + {0x86, 0x0b}, // SPECIES_ABSOL + {0x68, 0x00}, // SPECIES_SHUPPET + {0x56, 0x0e}, // SPECIES_BANETTE + {0x55, 0x0c}, // SPECIES_SEVIPER + {0x77, 0x08}, // SPECIES_ZANGOOSE + {0x87, 0x05}, // SPECIES_RELICANTH + {0x77, 0x0b}, // SPECIES_ARON + {0x43, 0x14}, // SPECIES_LAIRON + {0x75, 0x0d}, // SPECIES_AGGRON + {0x88, 0x00}, // SPECIES_CASTFORM + {0x34, 0x11}, // SPECIES_VOLBEAT + {0x66, 0x08}, // SPECIES_ILLUMISE + {0x56, 0x08}, // SPECIES_LILEEP + {0x67, 0x07}, // SPECIES_CRADILY + {0x78, 0x00}, // SPECIES_ANORITH + {0x66, 0x08}, // SPECIES_ARMALDO + {0x88, 0x00}, // SPECIES_RALTS + {0x35, 0x0f}, // SPECIES_KIRLIA + {0x47, 0x06}, // SPECIES_GARDEVOIR + {0x78, 0x01}, // SPECIES_BAGON + {0x56, 0x0b}, // SPECIES_SHELGON + {0x66, 0x09}, // SPECIES_SALAMENCE + {0x87, 0x04}, // SPECIES_BELDUM + {0x55, 0x0f}, // SPECIES_METANG + {0x87, 0x07}, // SPECIES_METAGROSS + {0x87, 0x06}, // SPECIES_REGIROCK + {0x78, 0x04}, // SPECIES_REGICE + {0x88, 0x02}, // SPECIES_REGISTEEL + {0x88, 0x03}, // SPECIES_KYOGRE + {0x87, 0x04}, // SPECIES_GROUDON + {0x88, 0x01}, // SPECIES_RAYQUAZA + {0x88, 0x00}, // SPECIES_LATIAS + {0x88, 0x01}, // SPECIES_LATIOS + {0x88, 0x02}, // SPECIES_JIRACHI + {0x66, 0x0d}, // SPECIES_DEOXYS + {0x88, 0x01}, // SPECIES_CHIMECHO + {0x37, 0x06}, // SPECIES_EGG + {0x33, 0x14}, // SPECIES_UNOWN_B + {0x34, 0x10}, // SPECIES_UNOWN_C + {0x44, 0x10}, // SPECIES_UNOWN_D + {0x44, 0x10}, // SPECIES_UNOWN_E + {0x44, 0x11}, // SPECIES_UNOWN_F + {0x44, 0x11}, // SPECIES_UNOWN_G + {0x35, 0x0e}, // SPECIES_UNOWN_H + {0x44, 0x10}, // SPECIES_UNOWN_I + {0x34, 0x10}, // SPECIES_UNOWN_J + {0x34, 0x11}, // SPECIES_UNOWN_K + {0x44, 0x11}, // SPECIES_UNOWN_L + {0x34, 0x13}, // SPECIES_UNOWN_M + {0x44, 0x13}, // SPECIES_UNOWN_N + {0x43, 0x14}, // SPECIES_UNOWN_O + {0x44, 0x10}, // SPECIES_UNOWN_P + {0x34, 0x13}, // SPECIES_UNOWN_Q + {0x43, 0x15}, // SPECIES_UNOWN_R + {0x34, 0x13}, // SPECIES_UNOWN_S + {0x45, 0x0c}, // SPECIES_UNOWN_T + {0x34, 0x12}, // SPECIES_UNOWN_U + {0x44, 0x12}, // SPECIES_UNOWN_V + {0x44, 0x12}, // SPECIES_UNOWN_W + {0x44, 0x13}, // SPECIES_UNOWN_X + {0x33, 0x15}, // SPECIES_UNOWN_Y + {0x34, 0x11}, // SPECIES_UNOWN_Z + {0x34, 0x10}, // SPECIES_UNOWN_EMARK + {0x35, 0x0f}, // SPECIES_UNOWN_QMARK + {0x35, 0x0d}, +}; diff --git a/src/data/pokemon_graphics/still_front_pic_table.h b/src/data/pokemon_graphics/still_front_pic_table.h new file mode 100644 index 000000000..a345a3d43 --- /dev/null +++ b/src/data/pokemon_graphics/still_front_pic_table.h @@ -0,0 +1,446 @@ +const struct CompressedSpriteSheet gMonStillFrontPicTable[] = +{ //.data .size .tag + gMonStillFrontPic_CircledQuestionMark, 0x800, 0, + gMonStillFrontPic_Bulbasaur, 0x800, 1, + gMonStillFrontPic_Ivysaur, 0x800, 2, + gMonStillFrontPic_Venusaur, 0x800, 3, + gMonStillFrontPic_Charmander, 0x800, 4, + gMonStillFrontPic_Charmeleon, 0x800, 5, + gMonStillFrontPic_Charizard, 0x800, 6, + gMonStillFrontPic_Squirtle, 0x800, 7, + gMonStillFrontPic_Wartortle, 0x800, 8, + gMonStillFrontPic_Blastoise, 0x800, 9, + gMonStillFrontPic_Caterpie, 0x800, 10, + gMonStillFrontPic_Metapod, 0x800, 11, + gMonStillFrontPic_Butterfree, 0x800, 12, + gMonStillFrontPic_Weedle, 0x800, 13, + gMonStillFrontPic_Kakuna, 0x800, 14, + gMonStillFrontPic_Beedrill, 0x800, 15, + gMonStillFrontPic_Pidgey, 0x800, 16, + gMonStillFrontPic_Pidgeotto, 0x800, 17, + gMonStillFrontPic_Pidgeot, 0x800, 18, + gMonStillFrontPic_Rattata, 0x800, 19, + gMonStillFrontPic_Raticate, 0x800, 20, + gMonStillFrontPic_Spearow, 0x800, 21, + gMonStillFrontPic_Fearow, 0x800, 22, + gMonStillFrontPic_Ekans, 0x800, 23, + gMonStillFrontPic_Arbok, 0x800, 24, + gMonStillFrontPic_Pikachu, 0x800, 25, + gMonStillFrontPic_Raichu, 0x800, 26, + gMonStillFrontPic_Sandshrew, 0x800, 27, + gMonStillFrontPic_Sandslash, 0x800, 28, + gMonStillFrontPic_NidoranF, 0x800, 29, + gMonStillFrontPic_Nidorina, 0x800, 30, + gMonStillFrontPic_Nidoqueen, 0x800, 31, + gMonStillFrontPic_NidoranM, 0x800, 32, + gMonStillFrontPic_Nidorino, 0x800, 33, + gMonStillFrontPic_Nidoking, 0x800, 34, + gMonStillFrontPic_Clefairy, 0x800, 35, + gMonStillFrontPic_Clefable, 0x800, 36, + gMonStillFrontPic_Vulpix, 0x800, 37, + gMonStillFrontPic_Ninetales, 0x800, 38, + gMonStillFrontPic_Jigglypuff, 0x800, 39, + gMonStillFrontPic_Wigglytuff, 0x800, 40, + gMonStillFrontPic_Zubat, 0x800, 41, + gMonStillFrontPic_Golbat, 0x800, 42, + gMonStillFrontPic_Oddish, 0x800, 43, + gMonStillFrontPic_Gloom, 0x800, 44, + gMonStillFrontPic_Vileplume, 0x800, 45, + gMonStillFrontPic_Paras, 0x800, 46, + gMonStillFrontPic_Parasect, 0x800, 47, + gMonStillFrontPic_Venonat, 0x800, 48, + gMonStillFrontPic_Venomoth, 0x800, 49, + gMonStillFrontPic_Diglett, 0x800, 50, + gMonStillFrontPic_Dugtrio, 0x800, 51, + gMonStillFrontPic_Meowth, 0x800, 52, + gMonStillFrontPic_Persian, 0x800, 53, + gMonStillFrontPic_Psyduck, 0x800, 54, + gMonStillFrontPic_Golduck, 0x800, 55, + gMonStillFrontPic_Mankey, 0x800, 56, + gMonStillFrontPic_Primeape, 0x800, 57, + gMonStillFrontPic_Growlithe, 0x800, 58, + gMonStillFrontPic_Arcanine, 0x800, 59, + gMonStillFrontPic_Poliwag, 0x800, 60, + gMonStillFrontPic_Poliwhirl, 0x800, 61, + gMonStillFrontPic_Poliwrath, 0x800, 62, + gMonStillFrontPic_Abra, 0x800, 63, + gMonStillFrontPic_Kadabra, 0x800, 64, + gMonStillFrontPic_Alakazam, 0x800, 65, + gMonStillFrontPic_Machop, 0x800, 66, + gMonStillFrontPic_Machoke, 0x800, 67, + gMonStillFrontPic_Machamp, 0x800, 68, + gMonStillFrontPic_Bellsprout, 0x800, 69, + gMonStillFrontPic_Weepinbell, 0x800, 70, + gMonStillFrontPic_Victreebel, 0x800, 71, + gMonStillFrontPic_Tentacool, 0x800, 72, + gMonStillFrontPic_Tentacruel, 0x800, 73, + gMonStillFrontPic_Geodude, 0x800, 74, + gMonStillFrontPic_Graveler, 0x800, 75, + gMonStillFrontPic_Golem, 0x800, 76, + gMonStillFrontPic_Ponyta, 0x800, 77, + gMonStillFrontPic_Rapidash, 0x800, 78, + gMonStillFrontPic_Slowpoke, 0x800, 79, + gMonStillFrontPic_Slowbro, 0x800, 80, + gMonStillFrontPic_Magnemite, 0x800, 81, + gMonStillFrontPic_Magneton, 0x800, 82, + gMonStillFrontPic_Farfetchd, 0x800, 83, + gMonStillFrontPic_Doduo, 0x800, 84, + gMonStillFrontPic_Dodrio, 0x800, 85, + gMonStillFrontPic_Seel, 0x800, 86, + gMonStillFrontPic_Dewgong, 0x800, 87, + gMonStillFrontPic_Grimer, 0x800, 88, + gMonStillFrontPic_Muk, 0x800, 89, + gMonStillFrontPic_Shellder, 0x800, 90, + gMonStillFrontPic_Cloyster, 0x800, 91, + gMonStillFrontPic_Gastly, 0x800, 92, + gMonStillFrontPic_Haunter, 0x800, 93, + gMonStillFrontPic_Gengar, 0x800, 94, + gMonStillFrontPic_Onix, 0x800, 95, + gMonStillFrontPic_Drowzee, 0x800, 96, + gMonStillFrontPic_Hypno, 0x800, 97, + gMonStillFrontPic_Krabby, 0x800, 98, + gMonStillFrontPic_Kingler, 0x800, 99, + gMonStillFrontPic_Voltorb, 0x800, 100, + gMonStillFrontPic_Electrode, 0x800, 101, + gMonStillFrontPic_Exeggcute, 0x800, 102, + gMonStillFrontPic_Exeggutor, 0x800, 103, + gMonStillFrontPic_Cubone, 0x800, 104, + gMonStillFrontPic_Marowak, 0x800, 105, + gMonStillFrontPic_Hitmonlee, 0x800, 106, + gMonStillFrontPic_Hitmonchan, 0x800, 107, + gMonStillFrontPic_Lickitung, 0x800, 108, + gMonStillFrontPic_Koffing, 0x800, 109, + gMonStillFrontPic_Weezing, 0x800, 110, + gMonStillFrontPic_Rhyhorn, 0x800, 111, + gMonStillFrontPic_Rhydon, 0x800, 112, + gMonStillFrontPic_Chansey, 0x800, 113, + gMonStillFrontPic_Tangela, 0x800, 114, + gMonStillFrontPic_Kangaskhan, 0x800, 115, + gMonStillFrontPic_Horsea, 0x800, 116, + gMonStillFrontPic_Seadra, 0x800, 117, + gMonStillFrontPic_Goldeen, 0x800, 118, + gMonStillFrontPic_Seaking, 0x800, 119, + gMonStillFrontPic_Staryu, 0x800, 120, + gMonStillFrontPic_Starmie, 0x800, 121, + gMonStillFrontPic_Mrmime, 0x800, 122, + gMonStillFrontPic_Scyther, 0x800, 123, + gMonStillFrontPic_Jynx, 0x800, 124, + gMonStillFrontPic_Electabuzz, 0x800, 125, + gMonStillFrontPic_Magmar, 0x800, 126, + gMonStillFrontPic_Pinsir, 0x800, 127, + gMonStillFrontPic_Tauros, 0x800, 128, + gMonStillFrontPic_Magikarp, 0x800, 129, + gMonStillFrontPic_Gyarados, 0x800, 130, + gMonStillFrontPic_Lapras, 0x800, 131, + gMonStillFrontPic_Ditto, 0x800, 132, + gMonStillFrontPic_Eevee, 0x800, 133, + gMonStillFrontPic_Vaporeon, 0x800, 134, + gMonStillFrontPic_Jolteon, 0x800, 135, + gMonStillFrontPic_Flareon, 0x800, 136, + gMonStillFrontPic_Porygon, 0x800, 137, + gMonStillFrontPic_Omanyte, 0x800, 138, + gMonStillFrontPic_Omastar, 0x800, 139, + gMonStillFrontPic_Kabuto, 0x800, 140, + gMonStillFrontPic_Kabutops, 0x800, 141, + gMonStillFrontPic_Aerodactyl, 0x800, 142, + gMonStillFrontPic_Snorlax, 0x800, 143, + gMonStillFrontPic_Articuno, 0x800, 144, + gMonStillFrontPic_Zapdos, 0x800, 145, + gMonStillFrontPic_Moltres, 0x800, 146, + gMonStillFrontPic_Dratini, 0x800, 147, + gMonStillFrontPic_Dragonair, 0x800, 148, + gMonStillFrontPic_Dragonite, 0x800, 149, + gMonStillFrontPic_Mewtwo, 0x800, 150, + gMonStillFrontPic_Mew, 0x800, 151, +// Gen II + gMonStillFrontPic_Chikorita, 0x800, 152, + gMonStillFrontPic_Bayleef, 0x800, 153, + gMonStillFrontPic_Meganium, 0x800, 154, + gMonStillFrontPic_Cyndaquil, 0x800, 155, + gMonStillFrontPic_Quilava, 0x800, 156, + gMonStillFrontPic_Typhlosion, 0x800, 157, + gMonStillFrontPic_Totodile, 0x800, 158, + gMonStillFrontPic_Croconaw, 0x800, 159, + gMonStillFrontPic_Feraligatr, 0x800, 160, + gMonStillFrontPic_Sentret, 0x800, 161, + gMonStillFrontPic_Furret, 0x800, 162, + gMonStillFrontPic_Hoothoot, 0x800, 163, + gMonStillFrontPic_Noctowl, 0x800, 164, + gMonStillFrontPic_Ledyba, 0x800, 165, + gMonStillFrontPic_Ledian, 0x800, 166, + gMonStillFrontPic_Spinarak, 0x800, 167, + gMonStillFrontPic_Ariados, 0x800, 168, + gMonStillFrontPic_Crobat, 0x800, 169, + gMonStillFrontPic_Chinchou, 0x800, 170, + gMonStillFrontPic_Lanturn, 0x800, 171, + gMonStillFrontPic_Pichu, 0x800, 172, + gMonStillFrontPic_Cleffa, 0x800, 173, + gMonStillFrontPic_Igglybuff, 0x800, 174, + gMonStillFrontPic_Togepi, 0x800, 175, + gMonStillFrontPic_Togetic, 0x800, 176, + gMonStillFrontPic_Natu, 0x800, 177, + gMonStillFrontPic_Xatu, 0x800, 178, + gMonStillFrontPic_Mareep, 0x800, 179, + gMonStillFrontPic_Flaaffy, 0x800, 180, + gMonStillFrontPic_Ampharos, 0x800, 181, + gMonStillFrontPic_Bellossom, 0x800, 182, + gMonStillFrontPic_Marill, 0x800, 183, + gMonStillFrontPic_Azumarill, 0x800, 184, + gMonStillFrontPic_Sudowoodo, 0x800, 185, + gMonStillFrontPic_Politoed, 0x800, 186, + gMonStillFrontPic_Hoppip, 0x800, 187, + gMonStillFrontPic_Skiploom, 0x800, 188, + gMonStillFrontPic_Jumpluff, 0x800, 189, + gMonStillFrontPic_Aipom, 0x800, 190, + gMonStillFrontPic_Sunkern, 0x800, 191, + gMonStillFrontPic_Sunflora, 0x800, 192, + gMonStillFrontPic_Yanma, 0x800, 193, + gMonStillFrontPic_Wooper, 0x800, 194, + gMonStillFrontPic_Quagsire, 0x800, 195, + gMonStillFrontPic_Espeon, 0x800, 196, + gMonStillFrontPic_Umbreon, 0x800, 197, + gMonStillFrontPic_Murkrow, 0x800, 198, + gMonStillFrontPic_Slowking, 0x800, 199, + gMonStillFrontPic_Misdreavus, 0x800, 200, + gMonStillFrontPic_UnownA, 0x800, 201, + gMonStillFrontPic_Wobbuffet, 0x800, 202, + gMonStillFrontPic_Girafarig, 0x800, 203, + gMonStillFrontPic_Pineco, 0x800, 204, + gMonStillFrontPic_Forretress, 0x800, 205, + gMonStillFrontPic_Dunsparce, 0x800, 206, + gMonStillFrontPic_Gligar, 0x800, 207, + gMonStillFrontPic_Steelix, 0x800, 208, + gMonStillFrontPic_Snubbull, 0x800, 209, + gMonStillFrontPic_Granbull, 0x800, 210, + gMonStillFrontPic_Qwilfish, 0x800, 211, + gMonStillFrontPic_Scizor, 0x800, 212, + gMonStillFrontPic_Shuckle, 0x800, 213, + gMonStillFrontPic_Heracross, 0x800, 214, + gMonStillFrontPic_Sneasel, 0x800, 215, + gMonStillFrontPic_Teddiursa, 0x800, 216, + gMonStillFrontPic_Ursaring, 0x800, 217, + gMonStillFrontPic_Slugma, 0x800, 218, + gMonStillFrontPic_Magcargo, 0x800, 219, + gMonStillFrontPic_Swinub, 0x800, 220, + gMonStillFrontPic_Piloswine, 0x800, 221, + gMonStillFrontPic_Corsola, 0x800, 222, + gMonStillFrontPic_Remoraid, 0x800, 223, + gMonStillFrontPic_Octillery, 0x800, 224, + gMonStillFrontPic_Delibird, 0x800, 225, + gMonStillFrontPic_Mantine, 0x800, 226, + gMonStillFrontPic_Skarmory, 0x800, 227, + gMonStillFrontPic_Houndour, 0x800, 228, + gMonStillFrontPic_Houndoom, 0x800, 229, + gMonStillFrontPic_Kingdra, 0x800, 230, + gMonStillFrontPic_Phanpy, 0x800, 231, + gMonStillFrontPic_Donphan, 0x800, 232, + gMonStillFrontPic_Porygon2, 0x800, 233, + gMonStillFrontPic_Stantler, 0x800, 234, + gMonStillFrontPic_Smeargle, 0x800, 235, + gMonStillFrontPic_Tyrogue, 0x800, 236, + gMonStillFrontPic_Hitmontop, 0x800, 237, + gMonStillFrontPic_Smoochum, 0x800, 238, + gMonStillFrontPic_Elekid, 0x800, 239, + gMonStillFrontPic_Magby, 0x800, 240, + gMonStillFrontPic_Miltank, 0x800, 241, + gMonStillFrontPic_Blissey, 0x800, 242, + gMonStillFrontPic_Raikou, 0x800, 243, + gMonStillFrontPic_Entei, 0x800, 244, + gMonStillFrontPic_Suicune, 0x800, 245, + gMonStillFrontPic_Larvitar, 0x800, 246, + gMonStillFrontPic_Pupitar, 0x800, 247, + gMonStillFrontPic_Tyranitar, 0x800, 248, + gMonStillFrontPic_Lugia, 0x800, 249, + gMonStillFrontPic_HoOh, 0x800, 250, + gMonStillFrontPic_Celebi, 0x800, 251, +// Empty slots + gMonStillFrontPic_DoubleQuestionMark, 0x800, 252, + gMonStillFrontPic_DoubleQuestionMark, 0x800, 253, + gMonStillFrontPic_DoubleQuestionMark, 0x800, 254, + gMonStillFrontPic_DoubleQuestionMark, 0x800, 255, + gMonStillFrontPic_DoubleQuestionMark, 0x800, 256, + gMonStillFrontPic_DoubleQuestionMark, 0x800, 257, + gMonStillFrontPic_DoubleQuestionMark, 0x800, 258, + gMonStillFrontPic_DoubleQuestionMark, 0x800, 259, + gMonStillFrontPic_DoubleQuestionMark, 0x800, 260, + gMonStillFrontPic_DoubleQuestionMark, 0x800, 261, + gMonStillFrontPic_DoubleQuestionMark, 0x800, 262, + gMonStillFrontPic_DoubleQuestionMark, 0x800, 263, + gMonStillFrontPic_DoubleQuestionMark, 0x800, 264, + gMonStillFrontPic_DoubleQuestionMark, 0x800, 265, + gMonStillFrontPic_DoubleQuestionMark, 0x800, 266, + gMonStillFrontPic_DoubleQuestionMark, 0x800, 267, + gMonStillFrontPic_DoubleQuestionMark, 0x800, 268, + gMonStillFrontPic_DoubleQuestionMark, 0x800, 269, + gMonStillFrontPic_DoubleQuestionMark, 0x800, 270, + gMonStillFrontPic_DoubleQuestionMark, 0x800, 271, + gMonStillFrontPic_DoubleQuestionMark, 0x800, 272, + gMonStillFrontPic_DoubleQuestionMark, 0x800, 273, + gMonStillFrontPic_DoubleQuestionMark, 0x800, 274, + gMonStillFrontPic_DoubleQuestionMark, 0x800, 275, + gMonStillFrontPic_DoubleQuestionMark, 0x800, 276, +// Gen III + gMonStillFrontPic_Treecko, 0x800, 277, + gMonStillFrontPic_Grovyle, 0x800, 278, + gMonStillFrontPic_Sceptile, 0x800, 279, + gMonStillFrontPic_Torchic, 0x800, 280, + gMonStillFrontPic_Combusken, 0x800, 281, + gMonStillFrontPic_Blaziken, 0x800, 282, + gMonStillFrontPic_Mudkip, 0x800, 283, + gMonStillFrontPic_Marshtomp, 0x800, 284, + gMonStillFrontPic_Swampert, 0x800, 285, + gMonStillFrontPic_Poochyena, 0x800, 286, + gMonStillFrontPic_Mightyena, 0x800, 287, + gMonStillFrontPic_Zigzagoon, 0x800, 288, + gMonStillFrontPic_Linoone, 0x800, 289, + gMonStillFrontPic_Wurmple, 0x800, 290, + gMonStillFrontPic_Silcoon, 0x800, 291, + gMonStillFrontPic_Beautifly, 0x800, 292, + gMonStillFrontPic_Cascoon, 0x800, 293, + gMonStillFrontPic_Dustox, 0x800, 294, + gMonStillFrontPic_Lotad, 0x800, 295, + gMonStillFrontPic_Lombre, 0x800, 296, + gMonStillFrontPic_Ludicolo, 0x800, 297, + gMonStillFrontPic_Seedot, 0x800, 298, + gMonStillFrontPic_Nuzleaf, 0x800, 299, + gMonStillFrontPic_Shiftry, 0x800, 300, + gMonStillFrontPic_Nincada, 0x800, 301, + gMonStillFrontPic_Ninjask, 0x800, 302, + gMonStillFrontPic_Shedinja, 0x800, 303, + gMonStillFrontPic_Taillow, 0x800, 304, + gMonStillFrontPic_Swellow, 0x800, 305, + gMonStillFrontPic_Shroomish, 0x800, 306, + gMonStillFrontPic_Breloom, 0x800, 307, + gMonStillFrontPic_Spinda, 0x800, 308, + gMonStillFrontPic_Wingull, 0x800, 309, + gMonStillFrontPic_Pelipper, 0x800, 310, + gMonStillFrontPic_Surskit, 0x800, 311, + gMonStillFrontPic_Masquerain, 0x800, 312, + gMonStillFrontPic_Wailmer, 0x800, 313, + gMonStillFrontPic_Wailord, 0x800, 314, + gMonStillFrontPic_Skitty, 0x800, 315, + gMonStillFrontPic_Delcatty, 0x800, 316, + gMonStillFrontPic_Kecleon, 0x800, 317, + gMonStillFrontPic_Baltoy, 0x800, 318, + gMonStillFrontPic_Claydol, 0x800, 319, + gMonStillFrontPic_Nosepass, 0x800, 320, + gMonStillFrontPic_Torkoal, 0x800, 321, + gMonStillFrontPic_Sableye, 0x800, 322, + gMonStillFrontPic_Barboach, 0x800, 323, + gMonStillFrontPic_Whiscash, 0x800, 324, + gMonStillFrontPic_Luvdisc, 0x800, 325, + gMonStillFrontPic_Corphish, 0x800, 326, + gMonStillFrontPic_Crawdaunt, 0x800, 327, + gMonStillFrontPic_Feebas, 0x800, 328, + gMonStillFrontPic_Milotic, 0x800, 329, + gMonStillFrontPic_Carvanha, 0x800, 330, + gMonStillFrontPic_Sharpedo, 0x800, 331, + gMonStillFrontPic_Trapinch, 0x800, 332, + gMonStillFrontPic_Vibrava, 0x800, 333, + gMonStillFrontPic_Flygon, 0x800, 334, + gMonStillFrontPic_Makuhita, 0x800, 335, + gMonStillFrontPic_Hariyama, 0x800, 336, + gMonStillFrontPic_Electrike, 0x800, 337, + gMonStillFrontPic_Manectric, 0x800, 338, + gMonStillFrontPic_Numel, 0x800, 339, + gMonStillFrontPic_Camerupt, 0x800, 340, + gMonStillFrontPic_Spheal, 0x800, 341, + gMonStillFrontPic_Sealeo, 0x800, 342, + gMonStillFrontPic_Walrein, 0x800, 343, + gMonStillFrontPic_Cacnea, 0x800, 344, + gMonStillFrontPic_Cacturne, 0x800, 345, + gMonStillFrontPic_Snorunt, 0x800, 346, + gMonStillFrontPic_Glalie, 0x800, 347, + gMonStillFrontPic_Lunatone, 0x800, 348, + gMonStillFrontPic_Solrock, 0x800, 349, + gMonStillFrontPic_Azurill, 0x800, 350, + gMonStillFrontPic_Spoink, 0x800, 351, + gMonStillFrontPic_Grumpig, 0x800, 352, + gMonStillFrontPic_Plusle, 0x800, 353, + gMonStillFrontPic_Minun, 0x800, 354, + gMonStillFrontPic_Mawile, 0x800, 355, + gMonStillFrontPic_Meditite, 0x800, 356, + gMonStillFrontPic_Medicham, 0x800, 357, + gMonStillFrontPic_Swablu, 0x800, 358, + gMonStillFrontPic_Altaria, 0x800, 359, + gMonStillFrontPic_Wynaut, 0x800, 360, + gMonStillFrontPic_Duskull, 0x800, 361, + gMonStillFrontPic_Dusclops, 0x800, 362, + gMonStillFrontPic_Roselia, 0x800, 363, + gMonStillFrontPic_Slakoth, 0x800, 364, + gMonStillFrontPic_Vigoroth, 0x800, 365, + gMonStillFrontPic_Slaking, 0x800, 366, + gMonStillFrontPic_Gulpin, 0x800, 367, + gMonStillFrontPic_Swalot, 0x800, 368, + gMonStillFrontPic_Tropius, 0x800, 369, + gMonStillFrontPic_Whismur, 0x800, 370, + gMonStillFrontPic_Loudred, 0x800, 371, + gMonStillFrontPic_Exploud, 0x800, 372, + gMonStillFrontPic_Clamperl, 0x800, 373, + gMonStillFrontPic_Huntail, 0x800, 374, + gMonStillFrontPic_Gorebyss, 0x800, 375, + gMonStillFrontPic_Absol, 0x800, 376, + gMonStillFrontPic_Shuppet, 0x800, 377, + gMonStillFrontPic_Banette, 0x800, 378, + gMonStillFrontPic_Seviper, 0x800, 379, + gMonStillFrontPic_Zangoose, 0x800, 380, + gMonStillFrontPic_Relicanth, 0x800, 381, + gMonStillFrontPic_Aron, 0x800, 382, + gMonStillFrontPic_Lairon, 0x800, 383, + gMonStillFrontPic_Aggron, 0x800, 384, + gMonStillFrontPic_Castform, 0x800, 385, + gMonStillFrontPic_Volbeat, 0x800, 386, + gMonStillFrontPic_Illumise, 0x800, 387, + gMonStillFrontPic_Lileep, 0x800, 388, + gMonStillFrontPic_Cradily, 0x800, 389, + gMonStillFrontPic_Anorith, 0x800, 390, + gMonStillFrontPic_Armaldo, 0x800, 391, + gMonStillFrontPic_Ralts, 0x800, 392, + gMonStillFrontPic_Kirlia, 0x800, 393, + gMonStillFrontPic_Gardevoir, 0x800, 394, + gMonStillFrontPic_Bagon, 0x800, 395, + gMonStillFrontPic_Shelgon, 0x800, 396, + gMonStillFrontPic_Salamence, 0x800, 397, + gMonStillFrontPic_Beldum, 0x800, 398, + gMonStillFrontPic_Metang, 0x800, 399, + gMonStillFrontPic_Metagross, 0x800, 400, + gMonStillFrontPic_Regirock, 0x800, 401, + gMonStillFrontPic_Regice, 0x800, 402, + gMonStillFrontPic_Registeel, 0x800, 403, + gMonStillFrontPic_Kyogre, 0x800, 404, + gMonStillFrontPic_Groudon, 0x800, 405, + gMonStillFrontPic_Rayquaza, 0x800, 406, + gMonStillFrontPic_Latias, 0x800, 407, + gMonStillFrontPic_Latios, 0x800, 408, + gMonStillFrontPic_Jirachi, 0x800, 409, + gMonStillFrontPic_Deoxys, 0x800, 410, + gMonStillFrontPic_Chimecho, 0x800, 411, + gMonStillFrontPic_Egg, 0x800, 412, + gMonStillFrontPic_UnownB, 0x800, 413, + gMonStillFrontPic_UnownC, 0x800, 414, + gMonStillFrontPic_UnownD, 0x800, 415, + gMonStillFrontPic_UnownE, 0x800, 416, + gMonStillFrontPic_UnownF, 0x800, 417, + gMonStillFrontPic_UnownG, 0x800, 418, + gMonStillFrontPic_UnownH, 0x800, 419, + gMonStillFrontPic_UnownI, 0x800, 420, + gMonStillFrontPic_UnownJ, 0x800, 421, + gMonStillFrontPic_UnownK, 0x800, 422, + gMonStillFrontPic_UnownL, 0x800, 423, + gMonStillFrontPic_UnownM, 0x800, 424, + gMonStillFrontPic_UnownN, 0x800, 425, + gMonStillFrontPic_UnownO, 0x800, 426, + gMonStillFrontPic_UnownP, 0x800, 427, + gMonStillFrontPic_UnownQ, 0x800, 428, + gMonStillFrontPic_UnownR, 0x800, 429, + gMonStillFrontPic_UnownS, 0x800, 430, + gMonStillFrontPic_UnownT, 0x800, 431, + gMonStillFrontPic_UnownU, 0x800, 432, + gMonStillFrontPic_UnownV, 0x800, 433, + gMonStillFrontPic_UnownW, 0x800, 434, + gMonStillFrontPic_UnownX, 0x800, 435, + gMonStillFrontPic_UnownY, 0x800, 436, + gMonStillFrontPic_UnownZ, 0x800, 437, + gMonStillFrontPic_UnownExclamationMark, 0x800, 438, + gMonStillFrontPic_UnownQuestionMark, 0x800, 439, +}; diff --git a/src/data/pokemon_graphics/unknown_anims.h b/src/data/pokemon_graphics/unknown_anims.h new file mode 100644 index 000000000..a4ae43eb6 --- /dev/null +++ b/src/data/pokemon_graphics/unknown_anims.h @@ -0,0 +1,2347 @@ +const union AnimCmd gUnknown_082FF6EC[] = +{ + ANIMCMD_FRAME(0, 0), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF6F4[] = +{ + ANIMCMD_FRAME(1, 0), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF6FC[] = +{ + ANIMCMD_FRAME(2, 0), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF704[] = +{ + ANIMCMD_FRAME(3, 0), + ANIMCMD_END, +}; + +const union AnimCmd *const gPlayerMonSpriteAnimsTable[] = +{ + gUnknown_082FF6EC, + gUnknown_082FF6F4, + gUnknown_082FF6FC, + gUnknown_082FF704, +}; + +const union AnimCmd gUnknown_082FF71C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 25), + ANIMCMD_FRAME(0, 7), + ANIMCMD_FRAME(1, 7), + ANIMCMD_FRAME(0, 7), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF734[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(2, 8), + ANIMCMD_FRAME(0, 8), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF744[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(2, 10), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF750[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF758[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 5), + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(1, 5), + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(1, 5), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF774[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(2, 12), + ANIMCMD_FRAME(0, 14), + ANIMCMD_FRAME(2, 12), + ANIMCMD_FRAME(0, 14), + ANIMCMD_FRAME(2, 12), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF790[] = +{ + ANIMCMD_FRAME(0, 14), + ANIMCMD_FRAME(2, 12), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF79C[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(1, 10), + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(1, 10), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF7B0[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(2, 10), + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(2, 10), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF7C4[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF7CC[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF7D4[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF7DC[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF7E4[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF7EC[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF7F4[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF7FC[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF804[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF80C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF814[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF81C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF824[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF82C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF834[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF83C[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF844[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF84C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF854[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF85C[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF864[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF86C[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF874[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF87C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF884[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF88C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF894[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF89C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF8A4[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF8AC[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF8B4[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF8BC[] = +{ + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(8, 15), + ANIMCMD_FRAME(2, 22), + ANIMCMD_FRAME(8, 5), + ANIMCMD_FRAME(3, 8), + ANIMCMD_FRAME(4, 5), + ANIMCMD_FRAME(6, 5), + ANIMCMD_FRAME(4, 5), + ANIMCMD_FRAME(6, 5), + ANIMCMD_FRAME(4, 5), + ANIMCMD_FRAME(6, 5), + ANIMCMD_FRAME(4, 5), + ANIMCMD_FRAME(6, 5), + ANIMCMD_FRAME(5, 5), + ANIMCMD_FRAME(7, 5), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF8FC[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(8, 15), + ANIMCMD_FRAME(2, 15), + ANIMCMD_FRAME(8, 15), + ANIMCMD_FRAME(9, 15), + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(9, 10), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF91C[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(9, 10), + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(10, 20), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF930[] = +{ + ANIMCMD_FRAME(0, 15), + ANIMCMD_FRAME(11, 15), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF93C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF944[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF94C[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(1, 7), + ANIMCMD_FRAME(2, 7), + ANIMCMD_FRAME(3, 4), + ANIMCMD_FRAME(4, 4), + ANIMCMD_FRAME(3, 4), + ANIMCMD_FRAME(4, 4), + ANIMCMD_FRAME(3, 4), + ANIMCMD_FRAME(4, 4), + ANIMCMD_FRAME(3, 4), + ANIMCMD_FRAME(1, 6), + ANIMCMD_FRAME(5, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(5, 2), + ANIMCMD_FRAME(0, 2), + ANIMCMD_FRAME(5, 2), + ANIMCMD_FRAME(6, 2), + ANIMCMD_FRAME(5, 2), + ANIMCMD_FRAME(6, 2), + ANIMCMD_FRAME(6, 10), + ANIMCMD_FRAME(5, 4), + ANIMCMD_FRAME(0, 10), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FF9A8[] = +{ + ANIMCMD_FRAME(0, 12), + ANIMCMD_FRAME(7, 12), + ANIMCMD_FRAME(8, 12), + ANIMCMD_FRAME(0, 12), + ANIMCMD_FRAME(7, 12), + ANIMCMD_FRAME(8, 12), + ANIMCMD_FRAME(0, 12), + ANIMCMD_FRAME(7, 12), + ANIMCMD_FRAME(8, 12), + ANIMCMD_FRAME(0, 12), + ANIMCMD_FRAME(7, 12), + ANIMCMD_FRAME(8, 12), + ANIMCMD_FRAME(0, 12), + ANIMCMD_FRAME(7, 12), + ANIMCMD_FRAME(8, 12), + ANIMCMD_FRAME(9, 3), + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(9, 3), + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(7, 12), + ANIMCMD_FRAME(8, 12), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFA00[] = +{ + ANIMCMD_FRAME(0, 12), + ANIMCMD_FRAME(7, 12), + ANIMCMD_FRAME(8, 12), + ANIMCMD_FRAME(0, 12), + ANIMCMD_FRAME(7, 12), + ANIMCMD_FRAME(8, 12), + ANIMCMD_FRAME(0, 12), + ANIMCMD_FRAME(7, 12), + ANIMCMD_FRAME(8, 12), + ANIMCMD_FRAME(0, 12), + ANIMCMD_FRAME(7, 12), + ANIMCMD_FRAME(8, 12), + ANIMCMD_FRAME(0, 12), + ANIMCMD_FRAME(7, 12), + ANIMCMD_FRAME(8, 12), + ANIMCMD_FRAME(9, 3), + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(9, 3), + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(7, 12), + ANIMCMD_FRAME(8, 12), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFA58[] = +{ + ANIMCMD_FRAME(0,18), + ANIMCMD_FRAME(10, 18), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFA64[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFA6C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFA74[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFA7C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFA84[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFA8C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFA94[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFA9C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFAA4[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFAAC[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFAB4[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFABC[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFAC4[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFACC[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFAD4[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFADC[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFAE4[] = +{ + ANIMCMD_FRAME(0, 63), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFAEC[] = +{ + ANIMCMD_FRAME(0, 63), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFAF4[] = +{ + ANIMCMD_FRAME(0, 63), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFAFC[] = +{ + ANIMCMD_FRAME(0, 63), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFB04[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFB0C[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFB14[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFB1C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFB24[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFB2C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFB34[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFB3C[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFB44[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 18), + ANIMCMD_FRAME(0, 18), + ANIMCMD_FRAME(1, 18), + ANIMCMD_FRAME(0, 18), + ANIMCMD_FRAME(1, 18), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFB60[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(2, 18), + ANIMCMD_FRAME(0, 18), + ANIMCMD_FRAME(2, 18), + ANIMCMD_FRAME(0, 18), + ANIMCMD_FRAME(2, 18), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFB7C[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(2, 5), + ANIMCMD_FRAME(3, 6), + ANIMCMD_FRAME(1, 5), + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(2, 5), + ANIMCMD_FRAME(3, 5), + ANIMCMD_FRAME(1, 5), + ANIMCMD_FRAME(0, 5), + ANIMCMD_FRAME(1, 7), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(4, 4), + ANIMCMD_FRAME(0, 4), + ANIMCMD_FRAME(4, 4), + ANIMCMD_FRAME(0, 20), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFBBC[] = +{ + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(1, 6), + ANIMCMD_FRAME(2, 6), + ANIMCMD_FRAME(3, 6), + ANIMCMD_FRAME(1, 6), + ANIMCMD_FRAME(0, 6), + ANIMCMD_FRAME(1, 6), + ANIMCMD_FRAME(0, 30), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFBE0[] = +{ + ANIMCMD_FRAME(0, 12), + ANIMCMD_FRAME(5, 12), + ANIMCMD_FRAME(0, 12), + ANIMCMD_FRAME(6, 12), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFBF4[] = +{ + ANIMCMD_FRAME(7, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFBFC[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFC04[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFC0C[] = +{ + ANIMCMD_FRAME(0, 63), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFC14[] = +{ + ANIMCMD_FRAME(0, 63), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFC1C[] = +{ + ANIMCMD_FRAME(0, 63), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFC24[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFC2C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFC34[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFC3C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 10), + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(1, 10), + ANIMCMD_FRAME(0, 10), + ANIMCMD_FRAME(1, 10), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFC58[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(2, 8), + ANIMCMD_FRAME(0, 12), + ANIMCMD_FRAME(2, 8), + ANIMCMD_FRAME(0, 12), + ANIMCMD_FRAME(2, 8), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFC74[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFC7C[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFC84[] = +{ + ANIMCMD_FRAME(1, 9), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFC8C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFC94[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFC9C[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFCA4[] = +{ + ANIMCMD_FRAME(1, 10), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFCAC[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFCB4[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFCBC[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFCC4[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFCCC[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFCD4[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFCDC[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFCE4[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFCEC[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFCF4[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFCFC[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFD04[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFD0C[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFD14[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFD1C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFD24[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFD2C[] = +{ + ANIMCMD_FRAME(2, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFD34[] = +{ + ANIMCMD_FRAME(3, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFD3C[] = +{ + ANIMCMD_FRAME(0, 63), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFD44[] = +{ + ANIMCMD_FRAME(0, 63), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFD4C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFD54[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFD5C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFD64[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFD6C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFD74[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFD7C[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFD84[] = +{ + ANIMCMD_FRAME(1, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFD8C[] = +{ + ANIMCMD_FRAME(0, 20), + ANIMCMD_FRAME(1, 30), + ANIMCMD_FRAME(0, 20), + ANIMCMD_FRAME(1, 30), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFDA0[] = +{ + ANIMCMD_FRAME(0, 20), + ANIMCMD_FRAME(2, 20), + ANIMCMD_FRAME(0, 20), + ANIMCMD_FRAME(2, 20), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFDB4[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFDBC[] = +{ + ANIMCMD_FRAME(0, 10), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_082FFDC4[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_082FFDCC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFDD0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFDD4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFDD8[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFDDC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFDE0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFDE4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFDE8[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFDEC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFDF0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFDF4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFDF8[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFDFC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE00[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE04[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE08[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE0C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE10[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE14[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE18[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE1C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE20[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE24[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE28[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE2C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE30[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE34[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE38[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE3C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE40[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE44[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE48[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE4C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE50[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE54[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE58[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE5C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE60[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE64[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE68[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE6C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE70[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE74[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE78[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE7C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE80[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE84[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE88[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE8C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE90[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE94[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE98[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFE9C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFEA0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFEA4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFEA8[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFEAC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFEB0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFEB4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFEB8[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFEBC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFEC0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFEC4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFEC8[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFECC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFED0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFED4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFED8[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFEDC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFEE0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFEE4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFEE8[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFEEC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFEF0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFEF4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFEF8[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFEFC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF00[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF04[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF08[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF0C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF10[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF14[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF18[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF1C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF20[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF24[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF28[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF2C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF30[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF34[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF38[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF3C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF40[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF44[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF48[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF4C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF50[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF54[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF58[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF5C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF60[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF64[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF68[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF6C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF70[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF74[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF78[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF7C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF80[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF84[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF88[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF8C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF90[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF94[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF98[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFF9C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFFA0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFFA4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFFA8[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFFAC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFFB0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFFB4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFFB8[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFFBC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFFC0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFFC4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFFC8[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFFCC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFFD0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFFD4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFFD8[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFFDC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFFE0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFFE4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFFE8[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFFEC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFFF0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFFF4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFFF8[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_082FFFFC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300000[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300004[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300008[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830000C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300010[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300014[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300018[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830001C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300020[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300024[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300028[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830002C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300030[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300034[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300038[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830003C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300040[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300044[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300048[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830004C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300050[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300054[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300058[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830005C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300060[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300064[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300068[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830006C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300070[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300074[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300078[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830007C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300080[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300084[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300088[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830008C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300090[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300094[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300098[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830009C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083000A0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083000A4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083000A8[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083000AC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083000B0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083000B4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083000B8[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083000BC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083000C0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083000C4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083000C8[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083000CC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083000D0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083000D4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083000D8[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083000DC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083000E0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083000E4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083000E8[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083000EC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083000F0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083000F4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083000F8[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083000FC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300100[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300104[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300108[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830010C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300110[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300114[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300118[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830011C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300120[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300124[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300128[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830012C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300130[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300134[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300138[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830013C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300140[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300144[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300148[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830014C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300150[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300154[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300158[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830015C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300160[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300164[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300168[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830016C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300170[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300174[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300178[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830017C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300180[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300184[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300188[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830018C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300190[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300194[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300198[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830019C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083001A0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083001A4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083001A8[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083001AC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083001B0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083001B4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083001B8[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083001BC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083001C0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083001C4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083001C8[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083001CC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083001D0[] = {gAnimCmd_General_Frame0}; + +const union AnimCmd *const gUnknown_083001D4[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF71C, + gUnknown_082FF734, + gUnknown_082FF744, + gUnknown_082FF750, +}; + +const union AnimCmd *const gUnknown_083001E8[] = {gAnimCmd_General_Frame0}; + +const union AnimCmd *const gUnknown_083001EC[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF758, + gUnknown_082FF774, + gUnknown_082FF790, +}; + +const union AnimCmd *const gUnknown_083001FC[] = {gAnimCmd_General_Frame0}; + +const union AnimCmd *const gUnknown_08300200[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF79C, + gUnknown_082FF7B0, +}; + +const union AnimCmd *const gUnknown_0830020C[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF7C4, +}; + +const union AnimCmd *const gUnknown_08300214[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF7CC, +}; + +const union AnimCmd *const gUnknown_0830021C[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF7D4, +}; + +const union AnimCmd *const gUnknown_08300224[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF7DC, + gUnknown_082FF7E4, +}; + +const union AnimCmd *const gUnknown_08300230[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF7EC, + gUnknown_082FF7F4, +}; + +const union AnimCmd *const gUnknown_0830023C[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF7FC, + gUnknown_082FF804, +}; + +const union AnimCmd *const gUnknown_08300248[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF80C, + gUnknown_082FF814, +}; + +const union AnimCmd *const gUnknown_08300254[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF81C, + gUnknown_082FF824, +}; + +const union AnimCmd *const gUnknown_08300260[] = {gAnimCmd_General_Frame0}; + +const union AnimCmd *const gUnknown_08300264[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF82C, +}; + +const union AnimCmd *const gUnknown_0830026C[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF834, + gUnknown_082FF83C, +}; + +const union AnimCmd *const gUnknown_08300278[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF844, +}; + +const union AnimCmd *const gUnknown_08300280[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF84C, +}; + +const union AnimCmd *const gUnknown_08300288[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF854, + gUnknown_082FF85C, +}; + +const union AnimCmd *const gUnknown_08300294[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300298[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830029C[] = {gAnimCmd_General_Frame0}; + +const union AnimCmd *const gUnknown_083002A0[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF864, +}; + +const union AnimCmd *const gUnknown_083002A8[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF86C, +}; + +const union AnimCmd *const gUnknown_083002B0[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF874, +}; + +const union AnimCmd *const gUnknown_083002B8[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF87C, +}; + +const union AnimCmd *const gUnknown_083002C0[] = {gAnimCmd_General_Frame0}; + +const union AnimCmd *const gUnknown_083002C4[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF884, +}; + +const union AnimCmd *const gUnknown_083002CC[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF88C, + gUnknown_082FF894, +}; + +const union AnimCmd *const gUnknown_083002D8[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF89C, + gUnknown_082FF8A4, +}; + +const union AnimCmd *const gUnknown_083002E4[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF8AC, + gUnknown_082FF8B4, +}; + +const union AnimCmd *const gUnknown_083002F0[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF8BC, + gUnknown_082FF8FC, + gUnknown_082FF91C, + gUnknown_082FF930, +}; + +const union AnimCmd *const gUnknown_08300304[] = {gAnimCmd_General_Frame0}; + +const union AnimCmd *const gUnknown_08300308[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF93C, +}; + +const union AnimCmd *const gUnknown_08300310[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF944, +}; + +const union AnimCmd *const gUnknown_08300318[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FF94C, + gUnknown_082FF9A8, + gUnknown_082FFA00, + gUnknown_082FFA58, +}; + +const union AnimCmd *const gUnknown_0830032C[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFA64, +}; + +const union AnimCmd *const gUnknown_08300334[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFA6C, +}; + +const union AnimCmd *const gUnknown_0830033C[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFA74, +}; + +const union AnimCmd *const gUnknown_08300344[] = {gAnimCmd_General_Frame0}; + +const union AnimCmd *const gUnknown_08300348[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFA7C, + gUnknown_082FFA84, +}; + +const union AnimCmd *const gUnknown_08300354[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300358[] = {gAnimCmd_General_Frame0}; + +const union AnimCmd *const gUnknown_0830035C[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFA8C, + gUnknown_082FFA94, +}; + +const union AnimCmd *const gUnknown_08300368[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830036C[] = {gAnimCmd_General_Frame0}; + +const union AnimCmd *const gUnknown_08300370[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFA9C, + gUnknown_082FFAA4, +}; + +const union AnimCmd *const gUnknown_0830037C[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFAAC, + gUnknown_082FFAB4, +}; + +const union AnimCmd *const gUnknown_08300388[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFABC, + gUnknown_082FFAC4, +}; + +const union AnimCmd *const gUnknown_08300394[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFACC, + gUnknown_082FFAD4, +}; + +const union AnimCmd *const gUnknown_083003A0[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFADC, +}; + +const union AnimCmd *const gUnknown_083003A8[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFAE4, +}; + +const union AnimCmd *const gUnknown_083003B0[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFAEC, +}; + +const union AnimCmd *const gUnknown_083003B8[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFAF4, +}; + +const union AnimCmd *const gUnknown_083003C0[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFAFC, +}; + +const union AnimCmd *const gUnknown_083003C8[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFB04, + gUnknown_082FFB0C, +}; + +const union AnimCmd *const gUnknown_083003D4[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFB14, +}; + +const union AnimCmd *const gUnknown_083003DC[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFB1C, + gUnknown_082FFB24, +}; + +const union AnimCmd *const gUnknown_083003E8[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFB2C, +}; + +const union AnimCmd *const gUnknown_083003F0[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFB34, +}; + +const union AnimCmd *const gUnknown_083003F8[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFB3C, +}; + +const union AnimCmd *const gUnknown_08300400[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFB44, + gUnknown_082FFB60, +}; + +const union AnimCmd *const gUnknown_0830040C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300410[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300414[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300418[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830041C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300420[] = {gAnimCmd_General_Frame0}; + +const union AnimCmd *const gUnknown_08300424[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFB7C, + gUnknown_082FFBBC, + gUnknown_082FFBE0, + gUnknown_082FFBF4, +}; + +const union AnimCmd *const gUnknown_08300438[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFBFC, + gUnknown_082FFC04, +}; + +const union AnimCmd *const gUnknown_08300444[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFC0C, +}; + +const union AnimCmd *const gUnknown_0830044C[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFC14, +}; + +const union AnimCmd *const gUnknown_08300454[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFC1C, +}; + +const union AnimCmd *const gUnknown_0830045C[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFC24, +}; + +const union AnimCmd *const gUnknown_08300464[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFC2C, +}; + +const union AnimCmd *const gUnknown_0830046C[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFC34, +}; + +const union AnimCmd *const gUnknown_08300474[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFC3C, + gUnknown_082FFC58, +}; + +const union AnimCmd *const gUnknown_08300480[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFC74, +}; + +const union AnimCmd *const gUnknown_08300488[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFC7C, + gUnknown_082FFC84, +}; + +const union AnimCmd *const gUnknown_08300494[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFC8C, + gUnknown_082FFC94, +}; + +const union AnimCmd *const gUnknown_083004A0[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFC9C, + gUnknown_082FFCA4, +}; + +const union AnimCmd *const gUnknown_083004AC[] = {gAnimCmd_General_Frame0}; + +const union AnimCmd *const gUnknown_083004B0[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFCAC, +}; + +const union AnimCmd *const gUnknown_083004B8[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFCB4, +}; + +const union AnimCmd *const gUnknown_083004C0[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFCBC, +}; + +const union AnimCmd *const gUnknown_083004C8[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFCC4, +}; + +const union AnimCmd *const gUnknown_083004D0[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFCCC, +}; + +const union AnimCmd *const gUnknown_083004D8[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFCD4, +}; + +const union AnimCmd *const gUnknown_083004E0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083004E4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083004E8[] = {gAnimCmd_General_Frame0}; + +const union AnimCmd *const gUnknown_083004EC[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFCDC, +}; + +const union AnimCmd *const gUnknown_083004F4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083004F8[] = {gAnimCmd_General_Frame0}; + +const union AnimCmd *const gUnknown_083004FC[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFCE4, +}; + +const union AnimCmd *const gUnknown_08300504[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFCEC, + gUnknown_082FFCF4, +}; + +const union AnimCmd *const gUnknown_08300510[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFCFC, +}; + +const union AnimCmd *const gUnknown_08300518[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830051C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300520[] = {gAnimCmd_General_Frame0}; + +const union AnimCmd *const gUnknown_08300524[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFD04, +}; + +const union AnimCmd *const gUnknown_0830052C[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFD0C, +}; + +const union AnimCmd *const gUnknown_08300534[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFD14, +}; + +const union AnimCmd *const gUnknown_0830053C[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFD1C, + gUnknown_082FFD24, + gUnknown_082FFD2C, + gUnknown_082FFD34, +}; + +const union AnimCmd *const gUnknown_08300550[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFD3C, +}; + +const union AnimCmd *const gUnknown_08300558[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFD44, +}; + +const union AnimCmd *const gUnknown_08300560[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300564[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300568[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830056C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300570[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300574[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300578[] = {gAnimCmd_General_Frame0}; + +const union AnimCmd *const gUnknown_0830057C[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFD4C, + gUnknown_082FFD54, +}; + +const union AnimCmd *const gUnknown_08300588[] = {gAnimCmd_General_Frame0}; + +const union AnimCmd *const gUnknown_0830058C[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFD5C, + gUnknown_082FFD64, +}; + +const union AnimCmd *const gUnknown_08300598[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830059C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083005A0[] = {gAnimCmd_General_Frame0}; + +const union AnimCmd *const gUnknown_083005A4[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFD6C, +}; + +const union AnimCmd *const gUnknown_083005AC[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFD74, +}; + +const union AnimCmd *const gUnknown_083005B4[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFD7C, + gUnknown_082FFD84, +}; + +const union AnimCmd *const gUnknown_083005C0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083005C4[] = {gAnimCmd_General_Frame0}; + +const union AnimCmd *const gUnknown_083005C8[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFD8C, + gUnknown_082FFDA0, +}; + +const union AnimCmd *const gUnknown_083005D4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083005D8[] = {gAnimCmd_General_Frame0}; + +const union AnimCmd *const gUnknown_083005DC[] = +{ + gAnimCmd_General_Frame0, + gUnknown_082FFDC4, +}; + +const union AnimCmd *const gUnknown_083005E4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083005E8[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083005EC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083005F0[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083005F4[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083005F8[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_083005FC[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300600[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300604[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300608[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830060C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300610[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300614[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300618[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830061C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300620[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300624[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300628[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830062C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300630[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300634[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300638[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830063C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300640[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300644[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300648[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_0830064C[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300650[] = {gAnimCmd_General_Frame0}; +const union AnimCmd *const gUnknown_08300654[] = {gAnimCmd_General_Frame0}; + +const union AnimCmd *const *const gUnknownAnimationsSpriteAnimsPtrTable[] = +{ + gUnknown_082FFDCC, + gUnknown_082FFDD0, + gUnknown_082FFDD4, + gUnknown_082FFDD8, + gUnknown_082FFDDC, + gUnknown_082FFDE0, + gUnknown_082FFDE4, + gUnknown_082FFDE8, + gUnknown_082FFDEC, + gUnknown_082FFDF0, + gUnknown_082FFDF4, + gUnknown_082FFDF8, + gUnknown_082FFDFC, + gUnknown_082FFE00, + gUnknown_082FFE04, + gUnknown_082FFE08, + gUnknown_082FFE0C, + gUnknown_082FFE10, + gUnknown_082FFE14, + gUnknown_082FFE18, + gUnknown_082FFE1C, + gUnknown_082FFE20, + gUnknown_082FFE24, + gUnknown_082FFE28, + gUnknown_082FFE2C, + gUnknown_082FFE30, + gUnknown_082FFE34, + gUnknown_082FFE38, + gUnknown_082FFE3C, + gUnknown_082FFE40, + gUnknown_082FFE44, + gUnknown_082FFE48, + gUnknown_082FFE4C, + gUnknown_082FFE50, + gUnknown_082FFE54, + gUnknown_082FFE58, + gUnknown_082FFE5C, + gUnknown_082FFE60, + gUnknown_082FFE64, + gUnknown_082FFE68, + gUnknown_082FFE6C, + gUnknown_082FFE70, + gUnknown_082FFE74, + gUnknown_082FFE78, + gUnknown_082FFE7C, + gUnknown_082FFE80, + gUnknown_082FFE84, + gUnknown_082FFE88, + gUnknown_082FFE8C, + gUnknown_082FFE90, + gUnknown_082FFE94, + gUnknown_082FFE98, + gUnknown_082FFE9C, + gUnknown_082FFEA0, + gUnknown_082FFEA4, + gUnknown_082FFEA8, + gUnknown_082FFEAC, + gUnknown_082FFEB0, + gUnknown_082FFEB4, + gUnknown_082FFEB8, + gUnknown_082FFEBC, + gUnknown_082FFEC0, + gUnknown_082FFEC4, + gUnknown_082FFEC8, + gUnknown_082FFECC, + gUnknown_082FFED0, + gUnknown_082FFED4, + gUnknown_082FFED8, + gUnknown_082FFEDC, + gUnknown_082FFEE0, + gUnknown_082FFEE4, + gUnknown_082FFEE8, + gUnknown_082FFEEC, + gUnknown_082FFEF0, + gUnknown_082FFEF4, + gUnknown_082FFEF8, + gUnknown_082FFEFC, + gUnknown_082FFF00, + gUnknown_082FFF04, + gUnknown_082FFF08, + gUnknown_082FFF0C, + gUnknown_082FFF10, + gUnknown_082FFF14, + gUnknown_082FFF18, + gUnknown_082FFF1C, + gUnknown_082FFF20, + gUnknown_082FFF24, + gUnknown_082FFF28, + gUnknown_082FFF2C, + gUnknown_082FFF30, + gUnknown_082FFF34, + gUnknown_082FFF38, + gUnknown_082FFF3C, + gUnknown_082FFF40, + gUnknown_082FFF44, + gUnknown_082FFF48, + gUnknown_082FFF4C, + gUnknown_082FFF50, + gUnknown_082FFF54, + gUnknown_082FFF58, + gUnknown_082FFF5C, + gUnknown_082FFF60, + gUnknown_082FFF64, + gUnknown_082FFF68, + gUnknown_082FFF6C, + gUnknown_082FFF70, + gUnknown_082FFF74, + gUnknown_082FFF78, + gUnknown_082FFF7C, + gUnknown_082FFF80, + gUnknown_082FFF84, + gUnknown_082FFF88, + gUnknown_082FFF8C, + gUnknown_082FFF90, + gUnknown_082FFF94, + gUnknown_082FFF98, + gUnknown_082FFF9C, + gUnknown_082FFFA0, + gUnknown_082FFFA4, + gUnknown_082FFFA8, + gUnknown_082FFFAC, + gUnknown_082FFFB0, + gUnknown_082FFFB4, + gUnknown_082FFFB8, + gUnknown_082FFFBC, + gUnknown_082FFFC0, + gUnknown_082FFFC4, + gUnknown_082FFFC8, + gUnknown_082FFFCC, + gUnknown_082FFFD0, + gUnknown_082FFFD4, + gUnknown_082FFFD8, + gUnknown_082FFFDC, + gUnknown_082FFFE0, + gUnknown_082FFFE4, + gUnknown_082FFFE8, + gUnknown_082FFFEC, + gUnknown_082FFFF0, + gUnknown_082FFFF4, + gUnknown_082FFFF8, + gUnknown_082FFFFC, + gUnknown_08300000, + gUnknown_08300004, + gUnknown_08300008, + gUnknown_0830000C, + gUnknown_08300010, + gUnknown_08300014, + gUnknown_08300018, + gUnknown_0830001C, + gUnknown_08300020, + gUnknown_08300024, + gUnknown_08300028, + gUnknown_0830002C, + gUnknown_08300030, + gUnknown_08300034, + gUnknown_08300038, + gUnknown_0830003C, + gUnknown_08300040, + gUnknown_08300044, + gUnknown_08300048, + gUnknown_0830004C, + gUnknown_08300050, + gUnknown_08300054, + gUnknown_08300058, + gUnknown_0830005C, + gUnknown_08300060, + gUnknown_08300064, + gUnknown_08300068, + gUnknown_0830006C, + gUnknown_08300070, + gUnknown_08300074, + gUnknown_08300078, + gUnknown_0830007C, + gUnknown_08300080, + gUnknown_08300084, + gUnknown_08300088, + gUnknown_0830008C, + gUnknown_08300090, + gUnknown_08300094, + gUnknown_08300098, + gUnknown_0830009C, + gUnknown_083000A0, + gUnknown_083000A4, + gUnknown_083000A8, + gUnknown_083000AC, + gUnknown_083000B0, + gUnknown_083000B4, + gUnknown_083000B8, + gUnknown_083000BC, + gUnknown_083000C0, + gUnknown_083000C4, + gUnknown_083000C8, + gUnknown_083000CC, + gUnknown_083000D0, + gUnknown_083000D4, + gUnknown_083000D8, + gUnknown_083000DC, + gUnknown_083000E0, + gUnknown_083000E4, + gUnknown_083000E8, + gUnknown_083000EC, + gUnknown_083000F0, + gUnknown_083000F4, + gUnknown_083000F8, + gUnknown_083000FC, + gUnknown_08300100, + gUnknown_08300104, + gUnknown_08300108, + gUnknown_0830010C, + gUnknown_08300110, + gUnknown_08300114, + gUnknown_08300118, + gUnknown_0830011C, + gUnknown_08300120, + gUnknown_08300124, + gUnknown_08300128, + gUnknown_0830012C, + gUnknown_08300130, + gUnknown_08300134, + gUnknown_08300138, + gUnknown_0830013C, + gUnknown_08300140, + gUnknown_08300144, + gUnknown_08300148, + gUnknown_0830014C, + gUnknown_08300150, + gUnknown_08300154, + gUnknown_08300158, + gUnknown_0830015C, + gUnknown_08300160, + gUnknown_08300164, + gUnknown_08300168, + gUnknown_0830016C, + gUnknown_08300170, + gUnknown_08300174, + gUnknown_08300178, + gUnknown_0830017C, + gUnknown_08300180, + gUnknown_08300184, + gUnknown_08300188, + gUnknown_0830018C, + gUnknown_08300190, + gUnknown_08300194, + gUnknown_08300198, + gUnknown_0830019C, + gUnknown_083001A0, + gUnknown_083001A4, + gUnknown_083001A8, + gUnknown_083001AC, + gUnknown_083001B0, + gUnknown_083001B4, + gUnknown_083001B8, + gUnknown_083001BC, + gUnknown_083001BC, + gUnknown_083001BC, + gUnknown_083001BC, + gUnknown_083001BC, + gUnknown_083001BC, + gUnknown_083001BC, + gUnknown_083001BC, + gUnknown_083001BC, + gUnknown_083001BC, + gUnknown_083001BC, + gUnknown_083001BC, + gUnknown_083001BC, + gUnknown_083001BC, + gUnknown_083001BC, + gUnknown_083001BC, + gUnknown_083001BC, + gUnknown_083001BC, + gUnknown_083001BC, + gUnknown_083001BC, + gUnknown_083001BC, + gUnknown_083001BC, + gUnknown_083001BC, + gUnknown_083001BC, + gUnknown_083001BC, + gUnknown_083001C0, + gUnknown_083001C4, + gUnknown_083001C8, + gUnknown_083001CC, + gUnknown_083001D0, + gUnknown_083001D4, + gUnknown_083001E8, + gUnknown_083001EC, + gUnknown_083001FC, + gUnknown_08300200, + gUnknown_0830020C, + gUnknown_08300214, + gUnknown_0830021C, + gUnknown_08300224, + gUnknown_08300230, + gUnknown_0830023C, + gUnknown_08300248, + gUnknown_08300254, + gUnknown_08300260, + gUnknown_08300264, + gUnknown_0830026C, + gUnknown_08300278, + gUnknown_08300280, + gUnknown_08300288, + gUnknown_08300294, + gUnknown_08300298, + gUnknown_0830029C, + gUnknown_083002A0, + gUnknown_083002A8, + gUnknown_083002B0, + gUnknown_083002B8, + gUnknown_083002C0, + gUnknown_083002C4, + gUnknown_083002CC, + gUnknown_083002D8, + gUnknown_083002E4, + gUnknown_083002F0, + gUnknown_08300304, + gUnknown_08300308, + gUnknown_08300310, + gUnknown_08300318, + gUnknown_0830032C, + gUnknown_08300334, + gUnknown_0830033C, + gUnknown_08300344, + gUnknown_08300348, + gUnknown_08300354, + gUnknown_08300358, + gUnknown_0830035C, + gUnknown_08300368, + gUnknown_0830036C, + gUnknown_08300370, + gUnknown_0830037C, + gUnknown_08300388, + gUnknown_08300394, + gUnknown_083003A0, + gUnknown_083003A8, + gUnknown_083003B0, + gUnknown_083003B8, + gUnknown_083003C0, + gUnknown_083003C8, + gUnknown_083003D4, + gUnknown_083003DC, + gUnknown_083003E8, + gUnknown_083003F0, + gUnknown_083003F8, + gUnknown_08300400, + gUnknown_0830040C, + gUnknown_08300410, + gUnknown_08300414, + gUnknown_08300418, + gUnknown_0830041C, + gUnknown_08300420, + gUnknown_08300424, + gUnknown_08300438, + gUnknown_08300444, + gUnknown_0830044C, + gUnknown_08300454, + gUnknown_0830045C, + gUnknown_08300464, + gUnknown_0830046C, + gUnknown_08300474, + gUnknown_08300480, + gUnknown_08300488, + gUnknown_08300494, + gUnknown_083004A0, + gUnknown_083004AC, + gUnknown_083004B0, + gUnknown_083004B8, + gUnknown_083004C0, + gUnknown_083004C8, + gUnknown_083004D0, + gUnknown_083004D8, + gUnknown_083004E0, + gUnknown_083004E4, + gUnknown_083004E8, + gUnknown_083004EC, + gUnknown_083004F4, + gUnknown_083004F8, + gUnknown_083004FC, + gUnknown_08300504, + gUnknown_08300510, + gUnknown_08300518, + gUnknown_0830051C, + gUnknown_08300520, + gUnknown_08300524, + gUnknown_0830052C, + gUnknown_08300534, + gUnknown_0830053C, + gUnknown_08300550, + gUnknown_08300558, + gUnknown_08300560, + gUnknown_08300564, + gUnknown_08300568, + gUnknown_0830056C, + gUnknown_08300570, + gUnknown_08300574, + gUnknown_08300578, + gUnknown_0830057C, + gUnknown_08300588, + gUnknown_0830058C, + gUnknown_08300598, + gUnknown_0830059C, + gUnknown_083005A0, + gUnknown_083005A4, + gUnknown_083005AC, + gUnknown_083005B4, + gUnknown_083005C0, + gUnknown_083005C4, + gUnknown_083005C8, + gUnknown_083005D4, + gUnknown_083005D8, + gUnknown_083005DC, + gUnknown_083005E4, + gUnknown_083005E8, + gUnknown_083005EC, + gUnknown_083005EC, + gUnknown_083005F0, + gUnknown_083005F4, + gUnknown_083005F8, + gUnknown_083005FC, + gUnknown_08300600, + gUnknown_08300604, + gUnknown_08300608, + gUnknown_0830060C, + gUnknown_08300610, + gUnknown_08300614, + gUnknown_08300618, + gUnknown_0830061C, + gUnknown_08300620, + gUnknown_08300624, + gUnknown_08300628, + gUnknown_0830062C, + gUnknown_08300630, + gUnknown_08300634, + gUnknown_08300638, + gUnknown_0830063C, + gUnknown_08300640, + gUnknown_08300644, + gUnknown_08300648, + gUnknown_0830064C, + gUnknown_08300650, + gUnknown_08300654, +}; diff --git a/src/data/trainer_graphics/back_pic_tables.h b/src/data/trainer_graphics/back_pic_tables.h index ba7f73ebb..3e74902d8 100644 --- a/src/data/trainer_graphics/back_pic_tables.h +++ b/src/data/trainer_graphics/back_pic_tables.h @@ -1,13 +1,13 @@ -const u8 gTrainerBackPicCoords[] = +const struct MonCoords gTrainerBackPicCoords[] = { - 8, 4, 0, 0, - 8, 4, 0, 0, - 8, 5, 0, 0, - 8, 5, 0, 0, - 8, 4, 0, 0, - 8, 4, 0, 0, - 8, 4, 0, 0, - 8, 4, 0, 0, + {8, 4}, + {8, 4}, + {8, 5}, + {8, 5}, + {8, 4}, + {8, 4}, + {8, 4}, + {8, 4}, }; const struct CompressedSpriteSheet gTrainerBackPicTable[] = diff --git a/src/data/trainer_graphics/front_pic_tables.h b/src/data/trainer_graphics/front_pic_tables.h index 7c1e10683..db80c9d4f 100644 --- a/src/data/trainer_graphics/front_pic_tables.h +++ b/src/data/trainer_graphics/front_pic_tables.h @@ -1,98 +1,98 @@ -const u8 gTrainerFrontPicCoords[] = +const struct MonCoords gTrainerFrontPicCoords[] = { - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 2, 0, 0, - 8, 2, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 2, 0, 0, - 8, 1, 0, 0, - 8, 2, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 2, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 2, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, - 8, 1, 0, 0, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 2}, + {8, 2}, + {8, 1}, + {8, 1}, + {8, 2}, + {8, 1}, + {8, 2}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 2}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 2}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, + {8, 1}, }; const struct CompressedSpriteSheet gTrainerFrontPicTable[] = diff --git a/src/data2b.c b/src/data2b.c index e7ca473a9..46a158e09 100644 --- a/src/data2b.c +++ b/src/data2b.c @@ -1,9 +1,15 @@ #include "global.h" +#include "data2.h" #include "graphics.h" extern const union AnimCmd gAnimCmd_General_Frame0[]; extern const union AnimCmd AnimCmd_82FF540[]; +#include "data/pokemon_graphics/unknown_anims.h" +#include "data/pokemon_graphics/front_pic_coordinates.h" +#include "data/pokemon_graphics/still_front_pic_table.h" +#include "data/pokemon_graphics/back_pic_coordinates.h" + #include "data/pokemon_graphics/back_pic_table.h" #include "data/pokemon_graphics/palette_table.h" #include "data/pokemon_graphics/shiny_palette_table.h" -- cgit v1.2.3 From 3dea8fa2658cb1055fb835983e8a738cf543e232 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 29 Aug 2018 20:38:54 +0200 Subject: battle tent review changes --- src/battle_dome.c | 47 ++++++------ src/battle_tent.c | 225 +++++++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 231 insertions(+), 41 deletions(-) (limited to 'src') diff --git a/src/battle_dome.c b/src/battle_dome.c index 4505ce8b0..0183811cd 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -31,6 +31,7 @@ #include "constants/abilities.h" #include "constants/songs.h" #include "constants/battle_frontier.h" +#include "constants/rgb.h" #define DOME_ROUND1 0 #define DOME_ROUND2 1 @@ -2784,7 +2785,7 @@ static void CalcDomeMonStats(u16 species, s32 level, s32 ivs, u8 evBits, u8 natu count++; } - resultingEvs = 510 / count; + resultingEvs = MAX_TOTAL_EVS / count; for (i = 0; i < 6; bits <<= 1, i++) { evs[i] = 0; @@ -3933,7 +3934,7 @@ static void sub_8190CD4(u8 taskId) case 0: if (!gPaletteFade.active) { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); gTasks[taskId].data[0] = 1; } break; @@ -3946,7 +3947,7 @@ static void sub_8190CD4(u8 taskId) switch (i) { case 9: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); gTasks[taskId].data[0] = 8; break; case 1 ... 8: @@ -4986,7 +4987,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTournamentId) k++; evBits >>= 1; } - k = 510 / k; + k = MAX_TOTAL_EVS / k; evBits = gFacilityTrainerMons[gSaveBlock2Ptr->frontier.domeMonId[trainerTournamentId][i]].evSpread; for (j = 0; j < 6; j++) { @@ -5412,7 +5413,7 @@ static void sub_819395C(u8 taskId) case 0: if (!gPaletteFade.active) { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); gTasks[taskId].data[0] = 1; StartSpriteAnim(&gSprites[spriteId], 1); } @@ -5426,17 +5427,17 @@ static void sub_819395C(u8 taskId) { case 0: default: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); gTasks[taskId].data[0] = 7; break; case 1: break; case 2: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); gTasks[taskId].data[0] = 3; break; case 3: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); gTasks[taskId].data[0] = 5; break; } @@ -5930,7 +5931,7 @@ static void sub_8194950(u8 taskId) switch (gTasks[taskId].data[0]) { case 0: - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_BLACK); gTasks[taskId].data[0] = 1; break; case 1: @@ -5978,7 +5979,7 @@ static void sub_8194950(u8 taskId) case 3: if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); gTasks[taskId].data[0] = 4; } break; @@ -6029,44 +6030,44 @@ static void HblankCb_BattleDome(void) { if (vCount < 50) { - REG_WININ = 0x3B3B; - SET_WIN0H_WIN1H(0x989B, 0x5558); + REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG3 | WININ_WIN1_OBJ | WININ_WIN1_CLR; + SET_WIN0H_WIN1H(WINHV_COORDS(152, 155), WINHV_COORDS(85, 88)); return; } else if (vCount > 57) { if (vCount < 75) { - REG_WININ = 0x3B3B; - SET_WIN0H_WIN1H(0x9098, 0x5860); + REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG3 | WININ_WIN1_OBJ | WININ_WIN1_CLR; + SET_WIN0H_WIN1H(WINHV_COORDS(144, 152), WINHV_COORDS(88, 96)); return; } else if (vCount < 82) { - REG_WININ = 0x3B3B; - SET_WIN0H_WIN1H(0x989B, 0x5558); + REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG3 | WININ_WIN1_OBJ | WININ_WIN1_CLR; + SET_WIN0H_WIN1H(WINHV_COORDS(152, 155), WINHV_COORDS(85, 88)); return; } else if (vCount > 94) { if (vCount < 103) { - REG_WININ = 0x3737; - SET_WIN0H_WIN1H(0x989B, 0x5558); + REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG2 | WININ_WIN1_OBJ | WININ_WIN1_CLR; + SET_WIN0H_WIN1H(WINHV_COORDS(152, 155), WINHV_COORDS(85, 88)); return; } else if (vCount < 119) { - REG_WININ = 0x3737; - SET_WIN0H_WIN1H(0x9098, 0x5860); + REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG2 | WININ_WIN1_OBJ | WININ_WIN1_CLR; + SET_WIN0H_WIN1H(WINHV_COORDS(144, 152), WINHV_COORDS(88, 96)); return; } else if (vCount > 126) { if (vCount_ < 135) { - REG_WININ = 0x3737; - SET_WIN0H_WIN1H(0x989B, 0x5558); + REG_WININ = WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG2 | WININ_WIN1_OBJ | WININ_WIN1_CLR; + SET_WIN0H_WIN1H(WINHV_COORDS(152, 155), WINHV_COORDS(85, 88)); return; } } @@ -6074,7 +6075,7 @@ static void HblankCb_BattleDome(void) } } - REG_WININ = 0x3F3F; + REG_WININ = WININ_WIN0_BG_ALL | WININ_WIN0_CLR | WININ_WIN0_OBJ | WININ_WIN1_BG_ALL | WININ_WIN1_CLR | WININ_WIN1_OBJ; SET_WIN0H_WIN1H(0, 0); } diff --git a/src/battle_tent.c b/src/battle_tent.c index f39bf8837..516f3fc4d 100644 --- a/src/battle_tent.c +++ b/src/battle_tent.c @@ -272,15 +272,15 @@ bool8 sub_81B9E94(void) } // This function was written very...oddly. -/* +#ifdef NONMATCHING void sub_81B9EC0(void) { s32 i, j; - u16 currMonId, currSpecies; + u16 currMonId = 0, currSpecies = 0; u16 species[PARTY_SIZE]; u16 monIds[PARTY_SIZE]; u16 heldItems[PARTY_SIZE]; - s32 var; + s32 zero = 0; gFacilityTrainers = gSlateportBattleTentTrainers; for (i = 0; i < PARTY_SIZE; i++) @@ -290,17 +290,15 @@ void sub_81B9EC0(void) heldItems[i] = 0; } gFacilityTrainerMons = gSlateportBattleTentMons; - currSpecies = 0; - i = 0; - while (i != PARTY_SIZE) + for (i = 0; i != PARTY_SIZE;) { // Cannot have two pokemon of the same species. currMonId = Random() % 70; - j = 0; - var = 0 + i; - while (j < var && monIds[j] != currMonId) + for (j = zero; j < i + zero; j++) { + if (monIds[j] == currMonId) + break; if (species[j] == gFacilityTrainerMons[currMonId].species) { if (currSpecies == 0) @@ -308,13 +306,12 @@ void sub_81B9EC0(void) else break; } - j++; } - if (j != var) + if (j != i + zero) continue; // Cannot have two same held items. - for (j = 0; j < var; j++) + for (j = zero; j < i + zero; j++) { if (heldItems[j] == 0) continue; @@ -326,14 +323,206 @@ void sub_81B9EC0(void) break; } } - if (j != var) + if (j != i + zero) continue; - gSaveBlock2Ptr->frontier.field_E70[var].monId = currMonId; - species[var] = gFacilityTrainerMons[currMonId].species; - heldItems[var] = gBattleFrontierHeldItems[gFacilityTrainerMons[currMonId].itemTableId]; - monIds[var] = currMonId; + gSaveBlock2Ptr->frontier.field_E70[i].monId = currMonId; + species[i] = gFacilityTrainerMons[currMonId].species; + heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[currMonId].itemTableId]; + monIds[i] = currMonId; i++; } } -*/ +#else +NAKED +void sub_81B9EC0(void) +{ + asm_unified("\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x3C\n\ + ldr r1, =gFacilityTrainers\n\ + ldr r0, =gSlateportBattleTentTrainers\n\ + str r0, [r1]\n\ + add r0, sp, 0xC\n\ + mov r9, r0\n\ + mov r1, sp\n\ + adds r1, 0x18\n\ + str r1, [sp, 0x2C]\n\ + ldr r5, =gFacilityTrainerMons\n\ + ldr r4, =gSlateportBattleTentMons\n\ + movs r2, 0\n\ + adds r3, r1, 0\n\ + mov r1, r9\n\ + mov r0, sp\n\ + movs r6, 0x5\n\ + mov r8, r6\n\ +_081B9EEC:\n\ + strh r2, [r0]\n\ + strh r2, [r1]\n\ + strh r2, [r3]\n\ + adds r3, 0x2\n\ + adds r1, 0x2\n\ + adds r0, 0x2\n\ + movs r7, 0x1\n\ + negs r7, r7\n\ + add r8, r7\n\ + mov r6, r8\n\ + cmp r6, 0\n\ + bge _081B9EEC\n\ + str r4, [r5]\n\ + movs r7, 0\n\ + mov r10, r7\n\ + movs r0, 0\n\ + mov r8, r0\n\ + ldr r1, [sp, 0x2C]\n\ + str r1, [sp, 0x30]\n\ + mov r2, sp\n\ + str r2, [sp, 0x34]\n\ + lsls r6, r0, 1\n\ + str r6, [sp, 0x24]\n\ + add r6, r9\n\ + str r6, [sp, 0x28]\n\ +_081B9F1E:\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0x46\n\ + bl __umodsi3\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + movs r2, 0\n\ + mov r7, r8\n\ + adds r6, r2, r7\n\ + cmp r2, r6\n\ + bge _081B9F7C\n\ + ldr r1, [sp, 0x28]\n\ + ldrh r0, [r1]\n\ + cmp r0, r5\n\ + beq _081B9F7C\n\ + ldr r0, =gFacilityTrainerMons\n\ + ldr r1, [r0]\n\ + lsls r0, r5, 4\n\ + adds r4, r0, r1\n\ + ldrh r7, [r4]\n\ + mov r12, r7\n\ + lsls r3, r2, 1\n\ + ldr r1, [sp, 0x24]\n\ + add r1, sp\n\ + str r6, [sp, 0x38]\n\ +_081B9F56:\n\ + ldrh r0, [r1]\n\ + cmp r0, r12\n\ + bne _081B9F66\n\ + mov r0, r10\n\ + cmp r0, 0\n\ + bne _081B9F7C\n\ + ldrh r7, [r4]\n\ + mov r10, r7\n\ +_081B9F66:\n\ + adds r3, 0x2\n\ + adds r1, 0x2\n\ + adds r2, 0x1\n\ + ldr r0, [sp, 0x38]\n\ + cmp r2, r0\n\ + bge _081B9F7C\n\ + mov r7, r9\n\ + adds r0, r7, r3\n\ + ldrh r0, [r0]\n\ + cmp r0, r5\n\ + bne _081B9F56\n\ +_081B9F7C:\n\ + cmp r2, r6\n\ + bne _081BA01C\n\ + movs r2, 0\n\ + cmp r2, r6\n\ + bge _081B9FD4\n\ + ldr r0, =gBattleFrontierHeldItems\n\ + mov r12, r0\n\ + ldr r7, =gFacilityTrainerMons\n\ + ldr r1, [sp, 0x24]\n\ + ldr r0, [sp, 0x2C]\n\ + adds r4, r1, r0\n\ +_081B9F92:\n\ + ldrh r3, [r4]\n\ + cmp r3, 0\n\ + beq _081B9FCC\n\ + ldr r1, [r7]\n\ + lsls r0, r5, 4\n\ + adds r1, r0, r1\n\ + ldrb r0, [r1, 0xA]\n\ + lsls r0, 1\n\ + add r0, r12\n\ + ldrh r0, [r0]\n\ + cmp r3, r0\n\ + bne _081B9FCC\n\ + ldrh r0, [r1]\n\ + cmp r0, r10\n\ + bne _081B9FD4\n\ + movs r1, 0\n\ + mov r10, r1\n\ + b _081B9FD4\n\ + .pool\n\ +_081B9FCC:\n\ + adds r4, 0x2\n\ + adds r2, 0x1\n\ + cmp r2, r6\n\ + blt _081B9F92\n\ +_081B9FD4:\n\ + cmp r2, r6\n\ + bne _081BA01C\n\ + ldr r0, =gSaveBlock2Ptr\n\ + ldr r1, [r0]\n\ + mov r2, r8\n\ + lsls r3, r2, 1\n\ + adds r0, r3, r2\n\ + lsls r0, 2\n\ + adds r1, r0\n\ + movs r6, 0xE7\n\ + lsls r6, 4\n\ + adds r1, r6\n\ + strh r5, [r1]\n\ + ldr r0, =gFacilityTrainerMons\n\ + ldr r0, [r0]\n\ + lsls r1, r5, 4\n\ + adds r1, r0\n\ + ldrh r0, [r1]\n\ + ldr r7, [sp, 0x34]\n\ + strh r0, [r7]\n\ + ldr r2, =gBattleFrontierHeldItems\n\ + ldrb r0, [r1, 0xA]\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + ldrh r0, [r0]\n\ + ldr r1, [sp, 0x30]\n\ + strh r0, [r1]\n\ + add r3, r9\n\ + strh r5, [r3]\n\ + adds r1, 0x2\n\ + str r1, [sp, 0x30]\n\ + adds r2, r7, 0\n\ + adds r2, 0x2\n\ + str r2, [sp, 0x34]\n\ + movs r6, 0x1\n\ + add r8, r6\n\ +_081BA01C:\n\ + mov r7, r8\n\ + cmp r7, 0x6\n\ + beq _081BA024\n\ + b _081B9F1E\n\ +_081BA024:\n\ + add sp, 0x3C\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n\ + "); +} +#endif // NONMATCHING -- cgit v1.2.3 From bc9fe72c6e85b1930f137ed49c5d2b0c4e4b10de Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 30 Aug 2018 15:01:07 +0200 Subject: Do some pyramid bag --- src/battle_dome.c | 13 +- src/battle_main.c | 11 +- src/battle_pyramid_bag.c | 1043 +++++++++++++++++++++++++++++++++++++++++++++- src/item.c | 5 +- src/item_use.c | 40 +- 5 files changed, 1040 insertions(+), 72 deletions(-) (limited to 'src') diff --git a/src/battle_dome.c b/src/battle_dome.c index 0183811cd..9f400bc7a 100644 --- a/src/battle_dome.c +++ b/src/battle_dome.c @@ -2810,23 +2810,16 @@ static void CalcDomeMonStats(u16 species, s32 level, s32 ivs, u8 evBits, u8 natu CALC_STAT(baseSpDefense, STAT_SPDEF); } -#define SWAP_16(x, y) \ -{ \ - temp = x; \ - x = y; \ - y = temp; \ -} - static void SwapDomeTrainers(s32 id1, s32 id2, u16 *statsArray) { s32 i; u16 temp; - SWAP_16(statsArray[id1], statsArray[id2]); - SWAP_16(gSaveBlock2Ptr->frontier.domeTrainers[id1].trainerId, gSaveBlock2Ptr->frontier.domeTrainers[id2].trainerId); + SWAP(statsArray[id1], statsArray[id2], temp); + SWAP(gSaveBlock2Ptr->frontier.domeTrainers[id1].trainerId, gSaveBlock2Ptr->frontier.domeTrainers[id2].trainerId, temp); for (i = 0; i < 3; i++) - SWAP_16(gSaveBlock2Ptr->frontier.domeMonId[id1][i], gSaveBlock2Ptr->frontier.domeMonId[id2][i]); + SWAP(gSaveBlock2Ptr->frontier.domeMonId[id1][i], gSaveBlock2Ptr->frontier.domeMonId[id2][i], temp); } static void sub_818F9B0(void) diff --git a/src/battle_main.c b/src/battle_main.c index 9f9511c38..c31fb48d5 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4596,13 +4596,10 @@ static void sub_803CDF8(void) void SwapTurnOrder(u8 id1, u8 id2) { - u32 temp = gActionsByTurnOrder[id1]; - gActionsByTurnOrder[id1] = gActionsByTurnOrder[id2]; - gActionsByTurnOrder[id2] = temp; - - temp = gBattlerByTurnOrder[id1]; - gBattlerByTurnOrder[id1] = gBattlerByTurnOrder[id2]; - gBattlerByTurnOrder[id2] = temp; + u32 temp; + + SWAP(gActionsByTurnOrder[id1], gActionsByTurnOrder[id2], temp); + SWAP(gBattlerByTurnOrder[id1], gBattlerByTurnOrder[id2], temp); } u8 GetWhoStrikesFirst(u8 battler1, u8 battler2, bool8 ignoreChosenMoves) diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c index f9cc48a9a..721dfca98 100644 --- a/src/battle_pyramid_bag.c +++ b/src/battle_pyramid_bag.c @@ -7,6 +7,7 @@ #include "gpu_regs.h" #include "malloc.h" #include "menu.h" +#include "overworld.h" #include "menu_helpers.h" #include "overworld.h" #include "palette.h" @@ -14,21 +15,46 @@ #include "scanline_effect.h" #include "script.h" #include "task.h" +#include "decompress.h" +#include "graphics.h" +#include "string_util.h" +#include "list_menu.h" +#include "strings.h" +#include "item.h" +#include "sound.h" +#include "item_menu.h" +#include "mail.h" +#include "item_use.h" +#include "event_data.h" +#include "text_window.h" +#include "international_string_util.h" +#include "constants/items.h" #include "constants/rgb.h" +#include "constants/songs.h" EWRAM_DATA struct { - u32 unk0; - u8 filler4[0x804 - 0x4]; - u8 unk804[11]; - u8 unk80F[5]; + MainCallback callback2; + u8 tilemapBuffer[0x800]; + u8 itemsSpriteIds[PYRAMID_BAG_ITEMS_COUNT + 1]; + u8 windowIds[5]; u8 unk814; - u8 filler815; - s8 unk816; - u8 filler817[0x984 - 0x817]; - u16 unk984; + u8 unk815; + u8 unk816; + const u8 *menuActionIds; + u8 filler81C; + u8 filler81D; + u8 filler81E; + u8 filler81F; + u8 menuActionsCount; + u8 listMenuCount; + u8 listMenuMaxShown; + struct ListMenuItem bagListItems[PYRAMID_BAG_ITEMS_COUNT + 1]; + u8 itemStrings[PYRAMID_BAG_ITEMS_COUNT + 1][ITEM_NAME_LENGTH + 10]; + s16 unk984; u8 filler986[0x98C - 0x986]; } *gUnknown_0203CF2C = NULL; + EWRAM_DATA struct { void (*callback)(void); @@ -38,14 +64,44 @@ EWRAM_DATA struct } gUnknown_0203CF30 = {0}; extern const struct BgTemplate gUnknown_0861F2B4[3]; +extern const struct WindowTemplate gUnknown_0861F328[]; +extern const struct WindowTemplate gUnknown_0861F350[]; +extern const struct CompressedSpriteSheet gUnknown_0861F3CC; +extern const struct ListMenuTemplate gUnknown_0861F2C0; +extern const u8 gUnknown_0861F310[1]; +extern const u8 gUnknown_0861F308[4]; +extern const u8 gUnknown_0861F30E[2]; +extern const u8 gUnknown_0861F30C[2]; +extern const struct MenuAction gUnknown_0861F2D8[]; +extern const struct YesNoFuncTable gUnknown_0861F314; +extern const u16 gUnknown_0860F074[]; +extern const u8 gUnknown_0861F31C[][3]; +// This file's functions. void sub_81C4F98(u8 a0, void (*callback)(void)); void sub_81C4F44(u8 taskId); +void Task_HandlePyramidBagInput(u8 taskId); +void sub_81C5B4C(u8 taskId); +void sub_81C67CC(u8 taskId); +void sub_81C5D20(u8 taskId); +void sub_81C674C(u8 taskId); +void sub_81C5FE4(u8 taskId); +void sub_81C5F68(u8 taskId); +void sub_81C6714(u8 taskId); +void sub_81C66EC(u8 taskId); +void sub_81C629C(u8 taskId); +void sub_81C6350(u8 taskId); +void sub_81C64B4(u8 taskId); +void sub_81C65CC(u8 taskId); +void sub_81C66AC(u8 taskId); +void sub_81C6964(u8 taskId); +void sub_81C68B0(u8 taskId); +void sub_81C6A14(u8 taskId); void sub_81C504C(void); bool8 sub_81C5078(void); void sub_81C51DC(void); bool8 sub_81C5238(void); -void sub_81C5314(void); +void SetBagItemsListTemplate(void); void sub_81C5674(void); void sub_81C56F8(void); void sub_81C5924(void); @@ -54,7 +110,28 @@ void sub_81C5A20(void); void sub_81C6BD8(void); void sub_81C6EF4(void); void sub_81C700C(void); +void sub_81C6E98(void); +void sub_81C6F20(void); +void sub_81C6404(void); +void sub_81C6E1C(void); +void ShowItemImage(u16 itemId, u8 tagIdAdder); +void PyramidBag_CopyItemName(u8 *dst, u16 itemId); +void sub_81C6FF8(u8 arg0); +void PrintItemDescription(s32 listMenuId); +void sub_81C5AB8(u8 y, u8 arg1); +void PrintOnWindow_Font1(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId); +void PrintOnWindow_Font7(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId); +u8 sub_81C6D24(u8 windowArrayId); +void sub_81C6D6C(u8 windowArrayId); +void sub_81C5EAC(u8 windowId); +void sub_81C5F08(u8 windowId, u8 horizontalCount, u8 verticalCount); +bool8 sub_81C616C(s8 arg0); +void sub_81C6DAC(u8 taskId, const struct YesNoFuncTable *yesNoTable); +void sub_81C6CEC(u8 windowId); +void sub_81C704C(u8 arg0); +void sub_81C7028(u8 arg0); +// code void sub_81C4EEC(void) { gUnknown_0203CF30.unk6 = 0; @@ -99,22 +176,18 @@ void sub_81C4F98(u8 a0, void (*callback)(void)) gUnknown_0203CF2C = AllocZeroed(sizeof(*gUnknown_0203CF2C)); if (a0 != 4) - { gUnknown_0203CF30.unk4 = a0; - } if (callback != NULL) - { gUnknown_0203CF30.callback = callback; - } - gUnknown_0203CF2C->unk0 = 0; - gUnknown_0203CF2C->unk814 = -1; - gUnknown_0203CF2C->unk816 = -1; + gUnknown_0203CF2C->callback2 = NULL; + gUnknown_0203CF2C->unk814 = 0xFF; + gUnknown_0203CF2C->unk816 = 0xFF; + + memset(gUnknown_0203CF2C->itemsSpriteIds, 0xFF, sizeof(gUnknown_0203CF2C->itemsSpriteIds)); + memset(gUnknown_0203CF2C->windowIds, 0xFF, sizeof(gUnknown_0203CF2C->windowIds)); - memset(gUnknown_0203CF2C->unk804, 0xFF, sizeof(gUnknown_0203CF2C->unk804)); - memset(gUnknown_0203CF2C->unk80F, 0xFF, sizeof(gUnknown_0203CF2C->unk80F)); - SetMainCallback2(sub_81C504C); } @@ -194,7 +267,7 @@ bool8 sub_81C5078(void) gMain.state++; break; case 10: - sub_81C5314(); + SetBagItemsListTemplate(); gMain.state++; break; case 11: @@ -235,14 +308,940 @@ void sub_81C51DC(void) ResetVramOamAndBgCntRegs(); ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, gUnknown_0861F2B4, ARRAY_COUNT(gUnknown_0861F2B4)); - SetBgTilemapBuffer(2, gUnknown_0203CF2C->filler4); + SetBgTilemapBuffer(2, gUnknown_0203CF2C->tilemapBuffer); ResetAllBgsCoordinates(); schedule_bg_copy_tilemap_to_vram(2); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | - DISPCNT_OBJ_1D_MAP | + DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON); ShowBg(0); ShowBg(1); ShowBg(2); SetGpuReg(REG_OFFSET_BLDCNT, 0); } + +extern const u8 gUnknown_08D9AE04[]; +extern const u8 gUnknown_08D9AF44[]; + +bool8 sub_81C5238(void) +{ + switch (gUnknown_0203CF2C->unk984) + { + case 0: + reset_temp_tile_data_buffers(); + decompress_and_copy_tile_data_to_vram(2, gBagScreen_Gfx, 0, 0, 0); + gUnknown_0203CF2C->unk984++; + break; + case 1: + if (free_temp_tile_data_buffers_if_possible() != TRUE) + { + LZDecompressWram(gUnknown_08D9AE04, gUnknown_0203CF2C->tilemapBuffer); + gUnknown_0203CF2C->unk984++; + } + break; + case 2: + LoadCompressedPalette(gUnknown_08D9AF44, 0, 0x20); + gUnknown_0203CF2C->unk984++; + break; + case 3: + LoadCompressedObjectPic(&gUnknown_0861F3CC); + gUnknown_0203CF2C->unk984++; + break; + case 4: + sub_81C6E98(); + gUnknown_0203CF2C->unk984++; + break; + default: + LoadListMenuArrowsGfx(); + gUnknown_0203CF2C->unk984 = 0; + return TRUE; + } + + return FALSE; +} + +void SetBagItemsListTemplate(void) +{ + u16 i; + u16 *pyramidItems = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode]; + + for (i = 0; i < gUnknown_0203CF2C->listMenuCount - 1; i++) + { + PyramidBag_CopyItemName(gUnknown_0203CF2C->itemStrings[i], pyramidItems[i]); + gUnknown_0203CF2C->bagListItems[i].name = gUnknown_0203CF2C->itemStrings[i]; + gUnknown_0203CF2C->bagListItems[i].id = i; + } + StringCopy(gUnknown_0203CF2C->itemStrings[i], gText_CloseBag); + gUnknown_0203CF2C->bagListItems[i].name = gUnknown_0203CF2C->itemStrings[i]; + gUnknown_0203CF2C->bagListItems[i].id = LIST_B_PRESSED; + gMultiuseListMenuTemplate = gUnknown_0861F2C0; + gMultiuseListMenuTemplate.totalItems = gUnknown_0203CF2C->listMenuCount; + gMultiuseListMenuTemplate.items = gUnknown_0203CF2C->bagListItems; + gMultiuseListMenuTemplate.maxShowed = gUnknown_0203CF2C->listMenuMaxShown; +} + +void PyramidBag_CopyItemName(u8 *dst, u16 itemId) +{ + if (ItemId_GetPocket(itemId) == POCKET_BERRIES) + { + ConvertIntToDecimalStringN(gStringVar1, ITEM_TO_BERRY(itemId), STR_CONV_MODE_LEADING_ZEROS, 2); + CopyItemName(itemId, gStringVar2); + StringExpandPlaceholders(dst, gText_UnkF908Var1Clear7Var2); + } + else + { + CopyItemName(itemId, dst); + } +} + +void PyramidBagMoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list) +{ + if (onInit != TRUE) + { + PlaySE(SE_SELECT); + sub_81C6F20(); + } + if (gUnknown_0203CF2C->unk814 == 0xFF) + { + sub_81C6FF8(gUnknown_0203CF2C->unk815 ^ 1); + if (itemIndex != LIST_B_PRESSED) + ShowItemImage(gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode][itemIndex], gUnknown_0203CF2C->unk815); + else + ShowItemImage(0xFFFF, gUnknown_0203CF2C->unk815); + gUnknown_0203CF2C->unk815 ^= 1; + PrintItemDescription(itemIndex); + } +} + +void PrintItemQuantity(u8 windowId, s32 itemIndex, u8 y) +{ + s32 xAlign; + if (itemIndex == LIST_B_PRESSED) + return; + + if (gUnknown_0203CF2C->unk814 != 0xFF) + { + if (gUnknown_0203CF2C->unk814 == (u8)(itemIndex)) + sub_81C5AB8(y, 1); + else + sub_81C5AB8(y, 0xFF); + } + ConvertIntToDecimalStringN(gStringVar1, + gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode][itemIndex], + STR_CONV_MODE_RIGHT_ALIGN, + 2); + StringExpandPlaceholders(gStringVar4, gText_xVar1); + xAlign = GetStringRightAlignXOffset(7, gStringVar4, 0x77); + PrintOnWindow_Font7(windowId, gStringVar4, xAlign, y, 0, 0, TEXT_SPEED_FF, 0); +} + +void PrintItemDescription(s32 listMenuId) +{ + const u8 *desc; + if (listMenuId != LIST_B_PRESSED) + { + desc = ItemId_GetDescription(gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode][listMenuId]); + } + else + { + StringCopy(gStringVar1, gReturnToXStringsTable2[gUnknown_0203CF30.unk4]); + StringExpandPlaceholders(gStringVar4, gText_ReturnToVar1); + desc = gStringVar4; + } + FillWindowPixelBuffer(1, 0); + PrintOnWindow_Font1(1, desc, 3, 0, 0, 1, 0, 0); +} + +void sub_81C5674(void) +{ + if (gUnknown_0203CF2C->unk816 == 0xFF) + gUnknown_0203CF2C->unk816 = AddScrollIndicatorArrowPairParameterized(2, 172, 12, 148, gUnknown_0203CF2C->listMenuCount - gUnknown_0203CF2C->listMenuMaxShown, 0xB5E, 0xB5E, &gUnknown_0203CF30.unk8); +} + +void sub_81C56CC(void) +{ + if (gUnknown_0203CF2C->unk816 != 0xFF) + { + RemoveScrollIndicatorArrowPair(gUnknown_0203CF2C->unk816); + gUnknown_0203CF2C->unk816 = 0xFF; + } +} + +void sub_81C56F8(void) +{ + u8 taskId = CreateTask(Task_HandlePyramidBagInput, 0); + s16 *data = gTasks[taskId].data; + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_0203CF30.unk8, gUnknown_0203CF30.unk6); +} + +void SwapItems(u8 id1, u8 id2) +{ + u16 temp; + u16 *itemIds = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode]; + u8 *quantities = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode]; + + SWAP(itemIds[id1], itemIds[id2], temp); + SWAP(quantities[id1], quantities[id2], temp); +} + +void MovePyramidBagItemSlotInList(u8 from, u8 to) +{ + u16 *itemIds = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode]; + u8 *quantities = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode]; + + if (from != to) + { + s16 i; + u16 firstSlotItemId = itemIds[from]; + u8 firstSlotQuantity = quantities[from]; + + if (to > from) + { + to--; + for (i = from; i < to; i++) + { + itemIds[i] = itemIds[i + 1]; + quantities[i] = quantities[i + 1]; + } + } + else + { + for (i = from; i > to; i--) + { + itemIds[i] = itemIds[i - 1]; + quantities[i] = quantities[i - 1]; + } + } + itemIds[to] = firstSlotItemId; + quantities[to] = firstSlotQuantity; + } +} + +void CompactItems(void) +{ + u8 i, j; + u16 *itemIds = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode]; + u8 *quantities = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode]; + + for (i = 0; i < PYRAMID_BAG_ITEMS_COUNT; i++) + { + if (itemIds[i] == 0 || quantities[i] == 0) + { + itemIds[i] = 0; + quantities[i] = 0; + } + } + for (i = 0; i < PYRAMID_BAG_ITEMS_COUNT - 1; i++) + { + for (j = i + 1; j < PYRAMID_BAG_ITEMS_COUNT; j++) + { + if (itemIds[i] == 0 || quantities[i] == 0) + SwapItems(i, j); + } + } +} + +void sub_81C5924(void) +{ + u16 i; + u16 *itemIds = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode]; + + CompactItems(); + gUnknown_0203CF2C->listMenuCount = 0; + for (i = 0; i < PYRAMID_BAG_ITEMS_COUNT; i++) + { + if (itemIds[i] != 0) + gUnknown_0203CF2C->listMenuCount++; + } + gUnknown_0203CF2C->listMenuCount++; + if (gUnknown_0203CF2C->listMenuCount > 8) + gUnknown_0203CF2C->listMenuMaxShown = 8; + else + gUnknown_0203CF2C->listMenuMaxShown = gUnknown_0203CF2C->listMenuCount; +} + +void sub_81C59BC(void) +{ + if (gUnknown_0203CF30.unk8 != 0 && gUnknown_0203CF30.unk8 + gUnknown_0203CF2C->listMenuMaxShown > gUnknown_0203CF2C->listMenuCount) + gUnknown_0203CF30.unk8 = gUnknown_0203CF2C->listMenuCount - gUnknown_0203CF2C->listMenuMaxShown; + if (gUnknown_0203CF30.unk8 + gUnknown_0203CF30.unk6 >= gUnknown_0203CF2C->listMenuCount) + { + if (gUnknown_0203CF2C->listMenuCount == 0) + gUnknown_0203CF30.unk6 = 0; + else + gUnknown_0203CF30.unk6 = gUnknown_0203CF2C->listMenuCount - 1; + } +} + +void sub_81C5A20(void) +{ + u8 i; + + if (gUnknown_0203CF30.unk6 > 4) + { + for (i = 0; i <= gUnknown_0203CF30.unk6 - 4; i++) + { + if (gUnknown_0203CF30.unk8 + gUnknown_0203CF2C->listMenuMaxShown == gUnknown_0203CF2C->listMenuCount) + { + // daycare.c sends its regards. + break; + } + gUnknown_0203CF30.unk6--; + gUnknown_0203CF30.unk8++; + } + } +} + +void sub_81C5A98(u8 listMenuTaskId, u8 arg1) +{ + u8 y = ListMenuGetYCoordForPrintingArrowCursor(listMenuTaskId); + sub_81C5AB8(y, arg1); +} + +void sub_81C5AB8(u8 y, u8 arg1) +{ + if (arg1 == 0xFF) + FillWindowPixelRect(0, 0, 0, y, GetMenuCursorDimensionByFont(1, 0), GetMenuCursorDimensionByFont(1, 1)); + else + PrintOnWindow_Font1(0, gText_SelectorArrow2, 0, y, 0, 0, 0, arg1); +} + +void sub_81C5B14(u8 taskId) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK); + gTasks[taskId].func = sub_81C5B4C; +} + +void sub_81C5B4C(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (!gPaletteFade.active) + { + DestroyListMenuTask(data[0], &gUnknown_0203CF30.unk8, &gUnknown_0203CF30.unk6); + if (gUnknown_0203CF2C->callback2 != NULL) + SetMainCallback2(gUnknown_0203CF2C->callback2); + else + SetMainCallback2(gUnknown_0203CF30.callback); + sub_81C56CC(); + ResetSpriteData(); + FreeAllSpritePalettes(); + FreeAllWindowBuffers(); + Free(gUnknown_0203CF2C); + DestroyTask(taskId); + } +} + +void Task_HandlePyramidBagInput(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (sub_81221EC() != TRUE && !gPaletteFade.active) + { + if (gMain.newKeys & SELECT_BUTTON) + { + if (gUnknown_0203CF30.unk4 != 2) + { + ListMenuGetScrollAndRow(data[0], &gUnknown_0203CF30.unk8, &gUnknown_0203CF30.unk6); + if (gUnknown_0203CF30.unk8 + gUnknown_0203CF30.unk6 != gUnknown_0203CF2C->listMenuCount - 1) + { + PlaySE(SE_SELECT); + sub_81C67CC(taskId); + } + } + } + else + { + s32 listId = ListMenuHandleInputGetItemId(data[0]); + ListMenuGetScrollAndRow(data[0], &gUnknown_0203CF30.unk8, &gUnknown_0203CF30.unk6); + switch (listId) + { + case LIST_NOTHING_CHOSEN: + break; + case LIST_B_PRESSED: + PlaySE(SE_SELECT); + gSpecialVar_ItemId = 0; + sub_81C5B14(taskId); + break; + default: + PlaySE(SE_SELECT); + gSpecialVar_ItemId = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode][listId]; + data[1] = listId; + data[2] = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode][listId]; + if (gUnknown_0203CF30.unk4 == 2) + sub_81C674C(taskId); + else + sub_81C5D20(taskId); + break; + } + } + } +} + +void sub_81C5D20(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + sub_81C56CC(); + sub_81C5A98(data[0], 1); + switch (gUnknown_0203CF30.unk4) + { + default: + gUnknown_0203CF2C->menuActionIds = gUnknown_0861F308; + gUnknown_0203CF2C->menuActionsCount = ARRAY_COUNT(gUnknown_0861F308); + break; + case 1: + if (ItemId_GetBattleUsage(gSpecialVar_ItemId)) + { + gUnknown_0203CF2C->menuActionIds = gUnknown_0861F30E; + gUnknown_0203CF2C->menuActionsCount = ARRAY_COUNT(gUnknown_0861F30E); + } + else + { + gUnknown_0203CF2C->menuActionIds = gUnknown_0861F310; + gUnknown_0203CF2C->menuActionsCount = ARRAY_COUNT(gUnknown_0861F310); + } + break; + case 3: + gUnknown_0203CF2C->menuActionIds = gUnknown_0861F30C; + gUnknown_0203CF2C->menuActionsCount = ARRAY_COUNT(gUnknown_0861F30C); + break; + } + + CopyItemName(gSpecialVar_ItemId, gStringVar1); + StringExpandPlaceholders(gStringVar4, gText_Var1IsSelected); + FillWindowPixelBuffer(1, 0); + PrintOnWindow_Font1(1, gStringVar4, 3, 0, 0, 1, 0, 0); + if (gUnknown_0203CF2C->menuActionsCount == 1) + sub_81C5EAC(sub_81C6D24(0)); + else if (gUnknown_0203CF2C->menuActionsCount == 2) + sub_81C5EAC(sub_81C6D24(1)); + else + sub_81C5F08(sub_81C6D24(2), 2, 2); + + if (gUnknown_0203CF2C->menuActionsCount == 4) + gTasks[taskId].func = sub_81C5FE4; + else + gTasks[taskId].func = sub_81C5F68; +} + +void sub_81C5EAC(u8 windowId) +{ + AddItemMenuActionTextPrinters(windowId, 7, 8, 1, 0, 0x10, gUnknown_0203CF2C->menuActionsCount, gUnknown_0861F2D8, gUnknown_0203CF2C->menuActionIds); + InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, gUnknown_0203CF2C->menuActionsCount, 0); +} + +void sub_81C5F08(u8 windowId, u8 horizontalCount, u8 verticalCount) +{ + sub_8198DBC(windowId, 7, 8, 1, 0x38, horizontalCount, verticalCount, gUnknown_0861F2D8, gUnknown_0203CF2C->menuActionIds); + sub_8199944(windowId, 0x38, horizontalCount, verticalCount, 0); +} + +void sub_81C5F68(u8 taskId) +{ + if (sub_81221EC() != TRUE) + { + s32 id = Menu_ProcessInputNoWrapAround(); + switch (id) + { + case -2: + break; + case -1: + PlaySE(SE_SELECT); + gUnknown_0861F2D8[3].func.void_u8(taskId); + break; + default: + PlaySE(SE_SELECT); + if (gUnknown_0861F2D8[gUnknown_0203CF2C->menuActionIds[id]].func.void_u8 != NULL) + gUnknown_0861F2D8[gUnknown_0203CF2C->menuActionIds[id]].func.void_u8(taskId); + break; + } + } +} + +void sub_81C5FE4(u8 taskId) +{ + if (sub_81221EC() != TRUE) + { + s8 id = GetMenuCursorPos(); + if (gMain.newKeys & DPAD_UP) + { + if (id > 0 && sub_81C616C(id - 2)) + { + PlaySE(SE_SELECT); + sub_8199134(0, -1); + } + } + else if (gMain.newKeys & DPAD_DOWN) + { + if (id < gUnknown_0203CF2C->menuActionsCount - 2 && sub_81C616C(id + 2)) + { + PlaySE(SE_SELECT); + sub_8199134(0, 1); + } + } + else if (gMain.newKeys & DPAD_LEFT || GetLRKeysState() == 1) + { + if (id & 1 && sub_81C616C(id - 1)) + { + PlaySE(SE_SELECT); + sub_8199134(-1, 0); + } + } + else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysState() == 2) + { + if (!(id & 1) && sub_81C616C(id + 1)) + { + PlaySE(SE_SELECT); + sub_8199134(1, 0); + } + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (gUnknown_0861F2D8[gUnknown_0203CF2C->menuActionIds[id]].func.void_u8 != NULL) + gUnknown_0861F2D8[gUnknown_0203CF2C->menuActionIds[id]].func.void_u8(taskId); + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + gUnknown_0861F2D8[3].func.void_u8(taskId); + } + } +} + +bool8 sub_81C616C(s8 arg0) +{ + if (arg0 < 0) + return FALSE; + else if (arg0 > gUnknown_0203CF2C->menuActionsCount) + return FALSE; + else if (gUnknown_0203CF2C->menuActionIds[arg0] == 5) + return FALSE; + else + return TRUE; +} + +void sub_81C61A8(void) +{ + if (gUnknown_0203CF2C->menuActionsCount == 1) + sub_81C6D6C(0); + else if (gUnknown_0203CF2C->menuActionsCount == 2) + sub_81C6D6C(1); + else + sub_81C6D6C(2); +} + +void sub_81C61E0(u8 taskId) +{ + u8 pocketId = ItemId_GetPocket(gSpecialVar_ItemId); + + if (pocketId == POCKET_KEY_ITEMS + || pocketId == POCKET_POKE_BALLS + || pocketId == POCKET_TM_HM + || ItemIsMail(gSpecialVar_ItemId) == TRUE) + { + sub_81C61A8(); + DisplayItemMessageInBattlePyramid(taskId, gText_DadsAdvice, sub_81C6714); + } + else if (ItemId_GetFieldFunc(gSpecialVar_ItemId) != NULL) + { + sub_81C61A8(); + FillWindowPixelBuffer(1, 0); + schedule_bg_copy_tilemap_to_vram(0); + ItemId_GetFieldFunc(gSpecialVar_ItemId)(taskId); + } +} + +void sub_81C6258(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + sub_81C61A8(); + PrintItemDescription(data[1]); + schedule_bg_copy_tilemap_to_vram(0); + schedule_bg_copy_tilemap_to_vram(1); + sub_81C5A98(data[0], 0); + sub_81C629C(taskId); +} + +void sub_81C629C(u8 taskId) +{ + sub_81C5674(); + gTasks[taskId].func = Task_HandlePyramidBagInput; +} + +void sub_81C62C4(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + sub_81C61A8(); + data[8] = 1; + if (data[2] == 1) + { + sub_81C6350(taskId); + } + else + { + CopyItemName(gSpecialVar_ItemId, gStringVar1); + StringExpandPlaceholders(gStringVar4, gText_TossHowManyVar1s); + FillWindowPixelBuffer(1, 0); + PrintOnWindow_Font1(1, gStringVar4, 3, 0, 0, 1, 0, 0); + sub_81C6404(); + gTasks[taskId].func = sub_81C64B4; + } +} + +void sub_81C6350(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + CopyItemName(gSpecialVar_ItemId, gStringVar1); + ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 2); + StringExpandPlaceholders(gStringVar4, gText_ConfirmTossItems); + FillWindowPixelBuffer(1, 0); + PrintOnWindow_Font1(1, gStringVar4, 3, 0, 0, 1, 0, 0); + sub_81C6DAC(taskId, &gUnknown_0861F314); +} + +void sub_81C63D0(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + PrintItemDescription(data[1]); + sub_81C5A98(data[0], 0); + sub_81C629C(taskId); +} + +void sub_81C6404(void) +{ + s32 x; + + ConvertIntToDecimalStringN(gStringVar1, 1, STR_CONV_MODE_LEADING_ZEROS, 2); + StringExpandPlaceholders(gStringVar4, gText_xVar1); + sub_81C6CEC(3); + x = GetStringCenterAlignXOffset(1, gStringVar4, 0x28); + PrintTextOnWindow(3, 1, gStringVar4, x, 2, 0, NULL); +} + +void sub_81C645C(s16 value) +{ + s32 x; + + ConvertIntToDecimalStringN(gStringVar1, value, STR_CONV_MODE_LEADING_ZEROS, 2); + StringExpandPlaceholders(gStringVar4, gText_xVar1); + x = GetStringCenterAlignXOffset(1, gStringVar4, 0x28); + PrintTextOnWindow(3, 1, gStringVar4, x, 2, 0, NULL); +} + +void sub_81C64B4(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + if (AdjustQuantityAccordingToDPadInput(&data[8], data[2]) == TRUE) + { + sub_81C645C(data[8]); + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + sub_8198070(3, 0); + ClearWindowTilemap(3); + schedule_bg_copy_tilemap_to_vram(1); + sub_81C6350(taskId); + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sub_8198070(3, 0); + ClearWindowTilemap(3); + schedule_bg_copy_tilemap_to_vram(1); + sub_81C63D0(taskId); + } +} + +void sub_81C654C(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + CopyItemName(gSpecialVar_ItemId, gStringVar1); + ConvertIntToDecimalStringN(gStringVar2, data[8], STR_CONV_MODE_LEFT_ALIGN, 2); + StringExpandPlaceholders(gStringVar4, gText_ThrewAwayVar2Var1s); + FillWindowPixelBuffer(1, 0); + PrintOnWindow_Font1(1, gStringVar4, 3, 0, 0, 1, 0, 0); + gTasks[taskId].func = sub_81C65CC; +} + +void sub_81C65CC(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u16 *scrollOffset = &gUnknown_0203CF30.unk8; + u16 *selectedRow = &gUnknown_0203CF30.unk6; + + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + PlaySE(SE_SELECT); + RemovePyramidBagItem(gSpecialVar_ItemId, data[8]); + DestroyListMenuTask(data[0], scrollOffset, selectedRow); + sub_81C5924(); + sub_81C59BC(); + SetBagItemsListTemplate(); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollOffset, *selectedRow); + schedule_bg_copy_tilemap_to_vram(0); + sub_81C629C(taskId); + } +} + +void sub_81C6648(u8 taskId) +{ + sub_81C61A8(); + if (ItemIsMail(gSpecialVar_ItemId) == TRUE) + { + DisplayItemMessageInBattlePyramid(taskId, gText_CantWriteMail, sub_81C66EC); + } + else if (!ItemId_GetImportance(gSpecialVar_ItemId)) + { + gUnknown_0203CF2C->callback2 = sub_81B7F60; + sub_81C5B14(taskId); + } + else + { + sub_81C66AC(taskId); + } +} + +void sub_81C66AC(u8 taskId) +{ + CopyItemName(gSpecialVar_ItemId, gStringVar1); + StringExpandPlaceholders(gStringVar4, gText_Var1CantBeHeld); + DisplayItemMessageInBattlePyramid(taskId, gStringVar4, sub_81C66EC); +} + +void sub_81C66EC(u8 taskId) +{ + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + sub_81C6714(taskId); + } +} + +void sub_81C6714(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + sub_81C6E1C(); + PrintItemDescription(data[1]); + sub_81C5A98(data[0], 0); + sub_81C629C(taskId); +} + +void sub_81C674C(u8 taskId) +{ + if (!itemid_80BF6D8_mail_related(gSpecialVar_ItemId)) + DisplayItemMessageInBattlePyramid(taskId, gText_CantWriteMail, sub_81C66EC); + else if (!ItemId_GetImportance(gSpecialVar_ItemId)) + sub_81C5B14(taskId); + else + sub_81C66AC(taskId); +} + +void sub_81C679C(u8 taskId) +{ + if (ItemId_GetBattleFunc(gSpecialVar_ItemId) != NULL) + { + sub_81C61A8(); + ItemId_GetBattleFunc(gSpecialVar_ItemId)(taskId); + } +} + +void sub_81C67CC(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + data[1] = gUnknown_0203CF30.unk8 + gUnknown_0203CF30.unk6; + gUnknown_0203CF2C->unk814 = data[1]; + ListMenuSetUnkIndicatorsStructField(data[0], 0x10, 1); + CopyItemName(gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode][data[1]], gStringVar1); + StringExpandPlaceholders(gStringVar4, gText_MoveVar1Where); + FillWindowPixelBuffer(1, 0); + PrintOnWindow_Font1(1, gStringVar4, 3, 0, 0, 1, 0, 0); + sub_81C5A98(data[0], 1); + sub_81C704C(data[1]); + gTasks[taskId].func = sub_81C68B0; +} + +void sub_81C68B0(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + if (sub_81221EC() != TRUE) + { + if (gMain.newKeys & SELECT_BUTTON) + { + PlaySE(SE_SELECT); + ListMenuGetScrollAndRow(data[0], &gUnknown_0203CF30.unk8, &gUnknown_0203CF30.unk6); + sub_81C6964(taskId); + } + else + { + s32 id = ListMenuHandleInputGetItemId(data[0]); + ListMenuGetScrollAndRow(data[0], &gUnknown_0203CF30.unk8, &gUnknown_0203CF30.unk6); + sub_81C7028(0); + sub_81C704C(gUnknown_0203CF30.unk6); + switch (id) + { + case LIST_NOTHING_CHOSEN: + break; + case LIST_B_PRESSED: + PlaySE(SE_SELECT); + if (gMain.newKeys & A_BUTTON) + sub_81C6964(taskId); + else + sub_81C6A14(taskId); + break; + default: + PlaySE(SE_SELECT); + sub_81C6964(taskId); + break; + } + } + } +} + +void sub_81C6964(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u16 *scrollOffset = &gUnknown_0203CF30.unk8; + u16 *selectedRow = &gUnknown_0203CF30.unk6; + u16 var = *scrollOffset + *selectedRow; + + if (data[1] == var || data[1] == var - 1) + { + sub_81C6A14(taskId); + } + else + { + MovePyramidBagItemSlotInList(data[1], var); + gUnknown_0203CF2C->unk814 = 0xFF; + sub_81C7028(1); + DestroyListMenuTask(data[0], scrollOffset, selectedRow); + if (data[1] < var) + gUnknown_0203CF30.unk6--; + SetBagItemsListTemplate(); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollOffset, *selectedRow); + sub_81C629C(taskId); + } +} + +void sub_81C6A14(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + u16 *scrollOffset = &gUnknown_0203CF30.unk8; + u16 *selectedRow = &gUnknown_0203CF30.unk6; + + gUnknown_0203CF2C->unk814 = 0xFF; + sub_81C7028(1); + DestroyListMenuTask(data[0], scrollOffset, selectedRow); + if (data[1] < *scrollOffset + *selectedRow) + gUnknown_0203CF30.unk6--; + SetBagItemsListTemplate(); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollOffset, *selectedRow); + sub_81C629C(taskId); +} + +void sub_81C6A94(void) +{ + u8 i; + struct Pokemon *party = gPlayerParty; + u16 *newItems = Alloc(PYRAMID_BAG_ITEMS_COUNT * sizeof(u16)); + u8 *newQuantities = Alloc(PYRAMID_BAG_ITEMS_COUNT * sizeof(u8)); + u16 heldItem; + + memcpy(newItems, gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode], PYRAMID_BAG_ITEMS_COUNT * sizeof(u16)); + memcpy(newQuantities, gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode], PYRAMID_BAG_ITEMS_COUNT * sizeof(u8)); + for (i = 0; i < 3; i++) + { + heldItem = GetMonData(&party[i], MON_DATA_HELD_ITEM); + if (heldItem != 0 && !AddBagItem(heldItem, 1)) + { + memcpy(gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode], newItems, PYRAMID_BAG_ITEMS_COUNT * sizeof(u16)); + memcpy(gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode], newQuantities, PYRAMID_BAG_ITEMS_COUNT * sizeof(u8)); + Free(newItems); + Free(newQuantities); + gSpecialVar_Result = 1; + return; + } + } + + heldItem = 0; + for (i = 0; i < 3; i++) + { + SetMonData(&party[i], MON_DATA_HELD_ITEM, &heldItem); + } + gSpecialVar_Result = 0; + Free(newItems); + Free(newQuantities); +} + +void sub_81C6BD8(void) +{ + u8 i; + + InitWindows(gUnknown_0861F328); + DeactivateAllTextPrinters(); + LoadUserWindowBorderGfx(0, 0x1, 0xE0); + LoadMessageBoxGfx(0, 0xA, 0xD0); + LoadPalette(gUnknown_0860F074, 0xF0, 0x20); + + for (i = 0; i < 5; i++) + FillWindowPixelBuffer(i, 0); + + PutWindowTilemap(0); + PutWindowTilemap(1); + schedule_bg_copy_tilemap_to_vram(0); + schedule_bg_copy_tilemap_to_vram(1); +} + +void PrintOnWindow_Font1(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId) +{ + AddTextPrinterParameterized2(windowId, 1, x, y, letterSpacing, lineSpacing, gUnknown_0861F31C[colorTableId], speed, src); +} + +void PrintOnWindow_Font7(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId) +{ + AddTextPrinterParameterized2(windowId, 7, x, y, letterSpacing, lineSpacing, gUnknown_0861F31C[colorTableId], speed, src); +} + +void sub_81C6CEC(u8 windowId) +{ + SetWindowBorderStyle(windowId, 0, 1, 0xE); + schedule_bg_copy_tilemap_to_vram(1); +} + +u8 sub_81C6D08(u8 windowArrayId) +{ + return gUnknown_0203CF2C->windowIds[windowArrayId]; +} + +u8 sub_81C6D24(u8 windowArrayId) +{ + u8 *windowId = &gUnknown_0203CF2C->windowIds[windowArrayId]; + if (*windowId == 0xFF) + { + *windowId = AddWindow(&gUnknown_0861F350[windowArrayId]); + SetWindowBorderStyle(*windowId, FALSE, 1, 0xE); + schedule_bg_copy_tilemap_to_vram(1); + } + return *windowId; +} + +void sub_81C6D6C(u8 windowArrayId) +{ + u8 *windowId = &gUnknown_0203CF2C->windowIds[windowArrayId]; + if (*windowId != 0xFF) + { + sub_8198070(*windowId, FALSE); + ClearWindowTilemap(*windowId); + RemoveWindow(*windowId); + schedule_bg_copy_tilemap_to_vram(1); + *windowId = 0xFF; + } +} diff --git a/src/item.c b/src/item.c index 22894bbff..29c250989 100644 --- a/src/item.c +++ b/src/item.c @@ -752,9 +752,8 @@ u16 BagGetQuantityByPocketPosition(u8 pocketId, u16 pocketPos) static void SwapItemSlots(struct ItemSlot *a, struct ItemSlot *b) { - struct ItemSlot temp = *a; - *a = *b; - *b = temp; + struct ItemSlot temp; + SWAP(*a, *b, temp); } void CompactItemsInBagPocket(struct BagPocket *bagPocket) diff --git a/src/item_use.c b/src/item_use.c index 9031338dd..23c829391 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -29,44 +29,26 @@ #include "string_util.h" #include "task.h" #include "text.h" +#include "strings.h" +#include "pokeblock.h" +#include "menu.h" +#include "item_menu.h" -extern void(**gUnknown_0203CE54)(void); extern void(**gUnknown_0203CF2C)(void); extern void(*gUnknown_0203A0F4)(u8 taskId); extern void(*gUnknown_085920D8[])(void); extern void (*gUnknown_03006328)(u8, u16, TaskFunc); extern void unknown_ItemMenu_Confirm(u8 taskId); extern void sub_81C5B14(u8 taskId); -extern u8 gText_DadsAdvice[]; -extern u8 gText_CantDismountBike[]; -extern void sub_8197434(u8 a, u8 b); extern void ScriptUnfreezeEventObjects(void); extern void ItemUseOutOfBattle_TMHM(u8 a); extern void ItemUseOutOfBattle_EvolutionStone(u8 b); -extern void bag_menu_mail_related(void); -extern void OpenPokeblockCase(u8 a, void(*b)(void)); -extern void overworld_free_bg_tilemaps(void); -extern bool32 Overworld_IsBikingAllowed(void); extern bool8 IsPlayerFacingSurfableFishableWater(void); extern bool8 sub_81221AC(void); -extern u8 gText_ItemFinderNothing[]; -extern u8 gText_ItemFinderNearby[]; -extern u8 gText_ItemFinderOnTop[]; -extern u8 gText_CoinCase[]; -extern u8 gText_PowderQty[]; extern u8 gUnknown_085920E4[]; extern u8 Route102_EventScript_274482[]; extern u8 Route102_EventScript_2744C0[]; extern u8 BattleFrontier_OutsideEast_EventScript_242CFC[]; -extern u8 gText_BootedUpHM[]; -extern u8 gText_BootedUpTM[]; -extern u8 gText_TMHMContainedVar1[]; -extern u8 gText_PlayerUsedVar2[]; -extern u8 gText_RepelEffectsLingered[]; -extern u8 gText_UsedVar2WildLured[]; -extern u8 gText_UsedVar2WildRepelled[]; -extern u8 gText_BoxFull[]; -extern u8 gText_WontHaveEffect[]; extern int sub_80247BC(void); extern struct MapHeader* mapconnection_get_mapheader(struct MapConnection *connection); extern void SetUpItemUseCallback(u8 taskId); @@ -86,7 +68,6 @@ extern void sub_81C59BC(void); extern void sub_81AB9A8(u8); extern void sub_81ABA88(u8); extern void sub_80B7CC8(void); -extern void Overworld_ResetStateAfterDigEscRope(void); extern u8* sub_806CF78(u16); extern void sub_81B89F0(void); extern u8 GetItemEffectType(u16); @@ -115,8 +96,7 @@ void sub_80FE124(u8 taskId); void sub_80FE164(u8 taskId); void DisplayItemMessage(u8 taskId, u8 a, const u8* str, void(*callback)(u8 taskId)); -void DisplayItemMessageInBattlePyramid(u8 taskId, u8* str, void(*callback)(u8 taskId)); -void DisplayItemMessageOnField(u8 taskId, u8* str, void(*callback)(u8 taskId)); +void DisplayItemMessageOnField(u8 taskId, const u8* str, void(*callback)(u8 taskId)); void sub_81C6714(u8 taskId); void CleanUpAfterFailingToUseRegisteredKeyItemOnField(u8 taskId); void StartFishing(u8 a); @@ -137,7 +117,7 @@ void SetUpItemUseCallback(u8 taskId) type = ItemId_GetType(gSpecialVar_ItemId) - 1; if (!InBattlePyramid()) { - *gUnknown_0203CE54 = gUnknown_085920D8[type]; + gUnknown_0203CE54->unk0 = gUnknown_085920D8[type]; unknown_ItemMenu_Confirm(taskId); } else @@ -221,7 +201,7 @@ void sub_80FD254() void ItemUseOutOfBattle_Mail(u8 taskId) { - *gUnknown_0203CE54 = sub_80FD254; + gUnknown_0203CE54->unk0 = sub_80FD254; unknown_ItemMenu_Confirm(taskId); } @@ -617,7 +597,7 @@ void ItemUseOutOfBattle_PokeblockCase(u8 taskId) } else if (gTasks[taskId].data[3] != TRUE) { - *gUnknown_0203CE54 = sub_80FDBEC; + gUnknown_0203CE54->unk0 = sub_80FDBEC; unknown_ItemMenu_Confirm(taskId); } else @@ -679,7 +659,7 @@ void sub_80FDD10(u8 taskId) { gUnknown_0203A0F4 = sub_80FDD74; gFieldCallback = MapPostLoadHook_UseItem; - *gUnknown_0203CE54 = CB2_ReturnToField; + gUnknown_0203CE54->unk0 = CB2_ReturnToField; unknown_ItemMenu_Confirm(taskId); } else @@ -1002,7 +982,7 @@ void sub_80FE54C(u8 taskId) { if (!InBattlePyramid()) { - *gUnknown_0203CE54 = sub_81B89F0; + gUnknown_0203CE54->unk0 = sub_81B89F0; unknown_ItemMenu_Confirm(taskId); } else -- cgit v1.2.3 From 917b32ffbe15243207de849683f8933f56bdeb07 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 30 Aug 2018 20:10:57 +0200 Subject: Finish decompiling pyramid bag. --- src/battle_pyramid_bag.c | 791 +++++++++++++++++++++++++++++------------------ src/item.c | 3 +- src/item_use.c | 6 +- src/start_menu.c | 9 +- 4 files changed, 498 insertions(+), 311 deletions(-) (limited to 'src') diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c index 721dfca98..9cb35074b 100644 --- a/src/battle_pyramid_bag.c +++ b/src/battle_pyramid_bag.c @@ -1,4 +1,5 @@ #include "global.h" +#include "battle_pyramid_bag.h" #include "main.h" #include "battle_controllers.h" #include "bg.h" @@ -28,122 +29,202 @@ #include "event_data.h" #include "text_window.h" #include "international_string_util.h" +#include "item_icon.h" #include "constants/items.h" #include "constants/rgb.h" #include "constants/songs.h" -EWRAM_DATA struct -{ - MainCallback callback2; - u8 tilemapBuffer[0x800]; - u8 itemsSpriteIds[PYRAMID_BAG_ITEMS_COUNT + 1]; - u8 windowIds[5]; - u8 unk814; - u8 unk815; - u8 unk816; - const u8 *menuActionIds; - u8 filler81C; - u8 filler81D; - u8 filler81E; - u8 filler81F; - u8 menuActionsCount; - u8 listMenuCount; - u8 listMenuMaxShown; - struct ListMenuItem bagListItems[PYRAMID_BAG_ITEMS_COUNT + 1]; - u8 itemStrings[PYRAMID_BAG_ITEMS_COUNT + 1][ITEM_NAME_LENGTH + 10]; - s16 unk984; - u8 filler986[0x98C - 0x986]; -} *gUnknown_0203CF2C = NULL; - -EWRAM_DATA struct -{ - void (*callback)(void); - u8 unk4; - u16 unk6; - u16 unk8; -} gUnknown_0203CF30 = {0}; - -extern const struct BgTemplate gUnknown_0861F2B4[3]; -extern const struct WindowTemplate gUnknown_0861F328[]; -extern const struct WindowTemplate gUnknown_0861F350[]; -extern const struct CompressedSpriteSheet gUnknown_0861F3CC; -extern const struct ListMenuTemplate gUnknown_0861F2C0; -extern const u8 gUnknown_0861F310[1]; -extern const u8 gUnknown_0861F308[4]; -extern const u8 gUnknown_0861F30E[2]; -extern const u8 gUnknown_0861F30C[2]; -extern const struct MenuAction gUnknown_0861F2D8[]; -extern const struct YesNoFuncTable gUnknown_0861F314; +EWRAM_DATA struct PyramidBagResources *gPyramidBagResources = NULL; +EWRAM_DATA struct PyramidBagCursorData gPyramidBagCursorData = {0}; + +// gfx +extern const u8 gUnknown_08D9ADD0[]; +extern const u8 gUnknown_08D9AE04[]; +extern const u8 gUnknown_08D9AF44[]; extern const u16 gUnknown_0860F074[]; -extern const u8 gUnknown_0861F31C[][3]; // This file's functions. -void sub_81C4F98(u8 a0, void (*callback)(void)); -void sub_81C4F44(u8 taskId); -void Task_HandlePyramidBagInput(u8 taskId); -void sub_81C5B4C(u8 taskId); -void sub_81C67CC(u8 taskId); -void sub_81C5D20(u8 taskId); -void sub_81C674C(u8 taskId); -void sub_81C5FE4(u8 taskId); -void sub_81C5F68(u8 taskId); -void sub_81C6714(u8 taskId); -void sub_81C66EC(u8 taskId); -void sub_81C629C(u8 taskId); -void sub_81C6350(u8 taskId); -void sub_81C64B4(u8 taskId); -void sub_81C65CC(u8 taskId); -void sub_81C66AC(u8 taskId); -void sub_81C6964(u8 taskId); -void sub_81C68B0(u8 taskId); -void sub_81C6A14(u8 taskId); -void sub_81C504C(void); -bool8 sub_81C5078(void); -void sub_81C51DC(void); -bool8 sub_81C5238(void); -void SetBagItemsListTemplate(void); -void sub_81C5674(void); -void sub_81C56F8(void); -void sub_81C5924(void); -void sub_81C59BC(void); -void sub_81C5A20(void); -void sub_81C6BD8(void); -void sub_81C6EF4(void); -void sub_81C700C(void); -void sub_81C6E98(void); -void sub_81C6F20(void); -void sub_81C6404(void); -void sub_81C6E1C(void); -void ShowItemImage(u16 itemId, u8 tagIdAdder); -void PyramidBag_CopyItemName(u8 *dst, u16 itemId); -void sub_81C6FF8(u8 arg0); -void PrintItemDescription(s32 listMenuId); -void sub_81C5AB8(u8 y, u8 arg1); -void PrintOnWindow_Font1(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId); -void PrintOnWindow_Font7(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId); -u8 sub_81C6D24(u8 windowArrayId); -void sub_81C6D6C(u8 windowArrayId); -void sub_81C5EAC(u8 windowId); -void sub_81C5F08(u8 windowId, u8 horizontalCount, u8 verticalCount); -bool8 sub_81C616C(s8 arg0); -void sub_81C6DAC(u8 taskId, const struct YesNoFuncTable *yesNoTable); -void sub_81C6CEC(u8 windowId); -void sub_81C704C(u8 arg0); -void sub_81C7028(u8 arg0); +static void Task_HandlePyramidBagInput(u8 taskId); +static void sub_81C4F44(u8 taskId); +static void sub_81C5B4C(u8 taskId); +static void Task_BeginItemSwap(u8 taskId); +static void sub_81C5D20(u8 taskId); +static void sub_81C674C(u8 taskId); +static void HandleMenuActionInput(u8 taskId); +static void HandleFewMenuActionsInput(u8 taskId); +static void sub_81C66EC(u8 taskId); +static void SetTaskToMainPyramidBagInputHandler(u8 taskId); +static void sub_81C6350(u8 taskId); +static void sub_81C64B4(u8 taskId); +static void sub_81C65CC(u8 taskId); +static void sub_81C66AC(u8 taskId); +static void PerformItemSwap(u8 taskId); +static void Task_ItemSwapHandleInput(u8 taskId); +static void sub_81C6A14(u8 taskId); +static void SetBagItemsListTemplate(void); +static void sub_81C504C(void); +static void sub_81C51DC(void); +static void AddScrollArrow(void); +static void sub_81C56F8(void); +static void sub_81C5A20(void); +static void sub_81C6BD8(void); +static void sub_81C6EF4(void); +static void sub_81C700C(void); +static void sub_81C6E98(void); +static void sub_81C6F20(void); +static void sub_81C6404(void); +static void sub_81C6E1C(void); +static bool8 sub_81C5238(void); +static bool8 sub_81C5078(void); +static void ShowItemImage(u16 itemId, u8 itemSpriteArrayId); +static void PyramidBag_CopyItemName(u8 *dst, u16 itemId); +static void sub_81C6FF8(u8 arg0); +static void PrintItemDescription(s32 listMenuId); +static void sub_81C5AB8(u8 y, u8 arg1); +static void PrintOnWindow_Font1(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId); +static void PrintOnWindow_Font7(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId); +static u8 sub_81C6D24(u8 windowArrayId); +static void sub_81C6D6C(u8 windowArrayId); +static void sub_81C5EAC(u8 windowId); +static void sub_81C5F08(u8 windowId, u8 horizontalCount, u8 verticalCount); +static bool8 IsAValidMenuAction(s8 arg0); +static void sub_81C6DAC(u8 taskId, const struct YesNoFuncTable *yesNoTable); +static void sub_81C6CEC(u8 windowId); +static void sub_81C704C(u8 y); +static void sub_81C7028(bool8 invisible); +static void sub_81C6F68(struct Sprite *sprite); +static void BagAction_UseOnField(u8 taskId); +static void BagAction_Toss(u8 taskId); +static void BagAction_Give(u8 taskId); +static void BagAction_Cancel(u8 taskId); +static void BagAction_UseInBattle(u8 taskId); +static void PyramidBagMoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list); +static void PrintItemQuantity(u8 windowId, s32 itemIndex, u8 y); +static void TossItem(u8 taskId); +static void DontTossItem(u8 taskId); + +// Const rom data. +static const struct BgTemplate gUnknown_0861F2B4[] = +{ + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 1, + .charBaseIndex = 0, + .mapBaseIndex = 30, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 3, + .mapBaseIndex = 29, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, +}; + +static const struct ListMenuTemplate gUnknown_0861F2C0 = +{ + .items = NULL, + .moveCursorFunc = PyramidBagMoveCursorFunc, + .itemPrintFunc = PrintItemQuantity, + .totalItems = 0, + .maxShowed = 0, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 2, + .fillValue = 0, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 0, + .scrollMultiple = LIST_NO_MULTIPLE_SCROLL, + .fontId = 7, + .cursorKind = 0 +}; + +#define ACTION_USE_FIELD 0 +#define ACTION_TOSS 1 +#define ACTION_GIVE 2 +#define ACTION_CANCEL 3 +#define ACTION_USE_BATTLE 4 +#define ACTION_DUMMY 5 + +static const struct MenuAction sMenuActions[] = +{ + [ACTION_USE_FIELD] = { gMenuText_Use, BagAction_UseOnField }, + [ACTION_TOSS] = { gMenuText_Toss, BagAction_Toss }, + [ACTION_GIVE] = { gMenuText_Give, BagAction_Give }, + [ACTION_CANCEL] = { gText_Cancel2, BagAction_Cancel }, + [ACTION_USE_BATTLE] = { gMenuText_Use, BagAction_UseInBattle }, + [ACTION_DUMMY] = { gText_EmptyString2, NULL }, +}; + +static const u8 sFieldMenuActionIds[] = {ACTION_USE_FIELD, ACTION_GIVE, ACTION_TOSS, ACTION_CANCEL}; +static const u8 gUnknown_0861F30C[] = {ACTION_TOSS, ACTION_CANCEL}; +static const u8 sBattleMenuActionIds[] = {ACTION_USE_BATTLE, ACTION_CANCEL}; +static const u8 gUnknown_0861F310[] = {ACTION_CANCEL}; + +static const struct YesNoFuncTable sYesNoTossFuncions = +{ + TossItem, DontTossItem +}; + +static const u8 sColorTable[][3] = +{ + {0, 2, 3}, + {0, 3, 1}, + {1, 2, 3}, +}; + +static const struct WindowTemplate gUnknown_0861F328[] = +{ + {0x00, 0x0e, 0x02, 0x0f, 0x10, 0x0f, 0x001e}, + {0x00, 0x00, 0x0d, 0x0e, 0x06, 0x0f, 0x010e}, + {0x01, 0x02, 0x0f, 0x1b, 0x04, 0x0f, 0x0162}, + {0x01, 0x18, 0x11, 0x05, 0x02, 0x0f, 0x01ce}, + DUMMY_WIN_TEMPLATE, +}; + +static const struct WindowTemplate gUnknown_0861F350[] = +{ + {0x01, 0x16, 0x11, 0x07, 0x02, 0x0f, 0x01d8}, + {0x01, 0x16, 0x0f, 0x07, 0x04, 0x0f, 0x01d8}, + {0x01, 0x0f, 0x0f, 0x0e, 0x04, 0x0f, 0x01d8}, + {0x01, 0x0f, 0x0d, 0x0e, 0x06, 0x0f, 0x01d8}, + {0x01, 0x18, 0x0f, 0x05, 0x04, 0x0f, 0x01d8}, +}; + +extern const struct CompressedSpriteSheet gUnknown_0861F3CC; +extern const struct SpriteTemplate gUnknown_0861F3D4; // code void sub_81C4EEC(void) { - gUnknown_0203CF30.unk6 = 0; - gUnknown_0203CF30.unk8 = 0; + gPyramidBagCursorData.cursorPosition = 0; + gPyramidBagCursorData.scrollPosition = 0; } -void sub_81C4EFC(void) +void CB2_PyramidBagMenuFromStartMenu(void) { sub_81C4F98(0, CB2_ReturnToFieldWithOpenMenu); } -void sub_81C4F10(void) +static void sub_81C4F10(void) { sub_81C4F98(1, SetCB2ToReshowScreenAfterMenu2); } @@ -155,7 +236,7 @@ void sub_81C4F24(void) CreateTask(sub_81C4F44, 10); } -void sub_81C4F44(u8 taskId) +static void sub_81C4F44(u8 taskId) { if (!gPaletteFade.active) { @@ -168,30 +249,30 @@ void sub_81C4F44(u8 taskId) void sub_81C4F84(void) { - sub_81C4F98(4, gUnknown_0203CF30.callback); + sub_81C4F98(4, gPyramidBagCursorData.callback); } void sub_81C4F98(u8 a0, void (*callback)(void)) { - gUnknown_0203CF2C = AllocZeroed(sizeof(*gUnknown_0203CF2C)); + gPyramidBagResources = AllocZeroed(sizeof(*gPyramidBagResources)); if (a0 != 4) - gUnknown_0203CF30.unk4 = a0; + gPyramidBagCursorData.unk4 = a0; if (callback != NULL) - gUnknown_0203CF30.callback = callback; + gPyramidBagCursorData.callback = callback; - gUnknown_0203CF2C->callback2 = NULL; - gUnknown_0203CF2C->unk814 = 0xFF; - gUnknown_0203CF2C->unk816 = 0xFF; + gPyramidBagResources->callback2 = NULL; + gPyramidBagResources->unk814 = 0xFF; + gPyramidBagResources->scrollArrowSpriteId = 0xFF; - memset(gUnknown_0203CF2C->itemsSpriteIds, 0xFF, sizeof(gUnknown_0203CF2C->itemsSpriteIds)); - memset(gUnknown_0203CF2C->windowIds, 0xFF, sizeof(gUnknown_0203CF2C->windowIds)); + memset(gPyramidBagResources->itemsSpriteIds, 0xFF, sizeof(gPyramidBagResources->itemsSpriteIds)); + memset(gPyramidBagResources->windowIds, 0xFF, sizeof(gPyramidBagResources->windowIds)); SetMainCallback2(sub_81C504C); } -void sub_81C501C(void) +static void sub_81C501C(void) { RunTasks(); AnimateSprites(); @@ -200,19 +281,19 @@ void sub_81C501C(void) UpdatePaletteFade(); } -void sub_81C5038(void) +static void sub_81C5038(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -void sub_81C504C(void) +static void sub_81C504C(void) { while (sub_81221EC() != TRUE && sub_81C5078() != TRUE && sub_81221AC() != TRUE); } -bool8 sub_81C5078(void) +static bool8 sub_81C5078(void) { switch (gMain.state) { @@ -247,7 +328,7 @@ bool8 sub_81C5078(void) break; case 6: sub_81C51DC(); - gUnknown_0203CF2C->unk984 = 0; + gPyramidBagResources->state = 0; gMain.state++; break; case 7: @@ -279,7 +360,7 @@ bool8 sub_81C5078(void) gMain.state++; break; case 13: - sub_81C5674(); + AddScrollArrow(); gMain.state++; break; case 14: @@ -303,12 +384,12 @@ bool8 sub_81C5078(void) return FALSE; } -void sub_81C51DC(void) +static void sub_81C51DC(void) { ResetVramOamAndBgCntRegs(); ResetBgsAndClearDma3BusyFlags(0); InitBgsFromTemplates(0, gUnknown_0861F2B4, ARRAY_COUNT(gUnknown_0861F2B4)); - SetBgTilemapBuffer(2, gUnknown_0203CF2C->tilemapBuffer); + SetBgTilemapBuffer(2, gPyramidBagResources->tilemapBuffer); ResetAllBgsCoordinates(); schedule_bg_copy_tilemap_to_vram(2); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | @@ -320,67 +401,64 @@ void sub_81C51DC(void) SetGpuReg(REG_OFFSET_BLDCNT, 0); } -extern const u8 gUnknown_08D9AE04[]; -extern const u8 gUnknown_08D9AF44[]; - -bool8 sub_81C5238(void) +static bool8 sub_81C5238(void) { - switch (gUnknown_0203CF2C->unk984) + switch (gPyramidBagResources->state) { case 0: reset_temp_tile_data_buffers(); decompress_and_copy_tile_data_to_vram(2, gBagScreen_Gfx, 0, 0, 0); - gUnknown_0203CF2C->unk984++; + gPyramidBagResources->state++; break; case 1: if (free_temp_tile_data_buffers_if_possible() != TRUE) { - LZDecompressWram(gUnknown_08D9AE04, gUnknown_0203CF2C->tilemapBuffer); - gUnknown_0203CF2C->unk984++; + LZDecompressWram(gUnknown_08D9AE04, gPyramidBagResources->tilemapBuffer); + gPyramidBagResources->state++; } break; case 2: LoadCompressedPalette(gUnknown_08D9AF44, 0, 0x20); - gUnknown_0203CF2C->unk984++; + gPyramidBagResources->state++; break; case 3: LoadCompressedObjectPic(&gUnknown_0861F3CC); - gUnknown_0203CF2C->unk984++; + gPyramidBagResources->state++; break; case 4: sub_81C6E98(); - gUnknown_0203CF2C->unk984++; + gPyramidBagResources->state++; break; default: LoadListMenuArrowsGfx(); - gUnknown_0203CF2C->unk984 = 0; + gPyramidBagResources->state = 0; return TRUE; } return FALSE; } -void SetBagItemsListTemplate(void) +static void SetBagItemsListTemplate(void) { u16 i; u16 *pyramidItems = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode]; - for (i = 0; i < gUnknown_0203CF2C->listMenuCount - 1; i++) + for (i = 0; i < gPyramidBagResources->listMenuCount - 1; i++) { - PyramidBag_CopyItemName(gUnknown_0203CF2C->itemStrings[i], pyramidItems[i]); - gUnknown_0203CF2C->bagListItems[i].name = gUnknown_0203CF2C->itemStrings[i]; - gUnknown_0203CF2C->bagListItems[i].id = i; + PyramidBag_CopyItemName(gPyramidBagResources->itemStrings[i], pyramidItems[i]); + gPyramidBagResources->bagListItems[i].name = gPyramidBagResources->itemStrings[i]; + gPyramidBagResources->bagListItems[i].id = i; } - StringCopy(gUnknown_0203CF2C->itemStrings[i], gText_CloseBag); - gUnknown_0203CF2C->bagListItems[i].name = gUnknown_0203CF2C->itemStrings[i]; - gUnknown_0203CF2C->bagListItems[i].id = LIST_B_PRESSED; + StringCopy(gPyramidBagResources->itemStrings[i], gText_CloseBag); + gPyramidBagResources->bagListItems[i].name = gPyramidBagResources->itemStrings[i]; + gPyramidBagResources->bagListItems[i].id = LIST_B_PRESSED; gMultiuseListMenuTemplate = gUnknown_0861F2C0; - gMultiuseListMenuTemplate.totalItems = gUnknown_0203CF2C->listMenuCount; - gMultiuseListMenuTemplate.items = gUnknown_0203CF2C->bagListItems; - gMultiuseListMenuTemplate.maxShowed = gUnknown_0203CF2C->listMenuMaxShown; + gMultiuseListMenuTemplate.totalItems = gPyramidBagResources->listMenuCount; + gMultiuseListMenuTemplate.items = gPyramidBagResources->bagListItems; + gMultiuseListMenuTemplate.maxShowed = gPyramidBagResources->listMenuMaxShown; } -void PyramidBag_CopyItemName(u8 *dst, u16 itemId) +static void PyramidBag_CopyItemName(u8 *dst, u16 itemId) { if (ItemId_GetPocket(itemId) == POCKET_BERRIES) { @@ -394,34 +472,34 @@ void PyramidBag_CopyItemName(u8 *dst, u16 itemId) } } -void PyramidBagMoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list) +static void PyramidBagMoveCursorFunc(s32 itemIndex, bool8 onInit, struct ListMenu *list) { if (onInit != TRUE) { PlaySE(SE_SELECT); sub_81C6F20(); } - if (gUnknown_0203CF2C->unk814 == 0xFF) + if (gPyramidBagResources->unk814 == 0xFF) { - sub_81C6FF8(gUnknown_0203CF2C->unk815 ^ 1); + sub_81C6FF8(gPyramidBagResources->unk815 ^ 1); if (itemIndex != LIST_B_PRESSED) - ShowItemImage(gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode][itemIndex], gUnknown_0203CF2C->unk815); + ShowItemImage(gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode][itemIndex], gPyramidBagResources->unk815); else - ShowItemImage(0xFFFF, gUnknown_0203CF2C->unk815); - gUnknown_0203CF2C->unk815 ^= 1; + ShowItemImage(0xFFFF, gPyramidBagResources->unk815); + gPyramidBagResources->unk815 ^= 1; PrintItemDescription(itemIndex); } } -void PrintItemQuantity(u8 windowId, s32 itemIndex, u8 y) +static void PrintItemQuantity(u8 windowId, s32 itemIndex, u8 y) { s32 xAlign; if (itemIndex == LIST_B_PRESSED) return; - if (gUnknown_0203CF2C->unk814 != 0xFF) + if (gPyramidBagResources->unk814 != 0xFF) { - if (gUnknown_0203CF2C->unk814 == (u8)(itemIndex)) + if (gPyramidBagResources->unk814 == (u8)(itemIndex)) sub_81C5AB8(y, 1); else sub_81C5AB8(y, 0xFF); @@ -435,7 +513,7 @@ void PrintItemQuantity(u8 windowId, s32 itemIndex, u8 y) PrintOnWindow_Font7(windowId, gStringVar4, xAlign, y, 0, 0, TEXT_SPEED_FF, 0); } -void PrintItemDescription(s32 listMenuId) +static void PrintItemDescription(s32 listMenuId) { const u8 *desc; if (listMenuId != LIST_B_PRESSED) @@ -444,7 +522,7 @@ void PrintItemDescription(s32 listMenuId) } else { - StringCopy(gStringVar1, gReturnToXStringsTable2[gUnknown_0203CF30.unk4]); + StringCopy(gStringVar1, gReturnToXStringsTable2[gPyramidBagCursorData.unk4]); StringExpandPlaceholders(gStringVar4, gText_ReturnToVar1); desc = gStringVar4; } @@ -452,29 +530,29 @@ void PrintItemDescription(s32 listMenuId) PrintOnWindow_Font1(1, desc, 3, 0, 0, 1, 0, 0); } -void sub_81C5674(void) +static void AddScrollArrow(void) { - if (gUnknown_0203CF2C->unk816 == 0xFF) - gUnknown_0203CF2C->unk816 = AddScrollIndicatorArrowPairParameterized(2, 172, 12, 148, gUnknown_0203CF2C->listMenuCount - gUnknown_0203CF2C->listMenuMaxShown, 0xB5E, 0xB5E, &gUnknown_0203CF30.unk8); + if (gPyramidBagResources->scrollArrowSpriteId == 0xFF) + gPyramidBagResources->scrollArrowSpriteId = AddScrollIndicatorArrowPairParameterized(2, 172, 12, 148, gPyramidBagResources->listMenuCount - gPyramidBagResources->listMenuMaxShown, 0xB5E, 0xB5E, &gPyramidBagCursorData.scrollPosition); } -void sub_81C56CC(void) +static void RemoveScrollArrow(void) { - if (gUnknown_0203CF2C->unk816 != 0xFF) + if (gPyramidBagResources->scrollArrowSpriteId != 0xFF) { - RemoveScrollIndicatorArrowPair(gUnknown_0203CF2C->unk816); - gUnknown_0203CF2C->unk816 = 0xFF; + RemoveScrollIndicatorArrowPair(gPyramidBagResources->scrollArrowSpriteId); + gPyramidBagResources->scrollArrowSpriteId = 0xFF; } } -void sub_81C56F8(void) +static void sub_81C56F8(void) { u8 taskId = CreateTask(Task_HandlePyramidBagInput, 0); s16 *data = gTasks[taskId].data; - data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gUnknown_0203CF30.unk8, gUnknown_0203CF30.unk6); + data[0] = ListMenuInit(&gMultiuseListMenuTemplate, gPyramidBagCursorData.scrollPosition, gPyramidBagCursorData.cursorPosition); } -void SwapItems(u8 id1, u8 id2) +static void SwapItems(u8 id1, u8 id2) { u16 temp; u16 *itemIds = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode]; @@ -484,7 +562,7 @@ void SwapItems(u8 id1, u8 id2) SWAP(quantities[id1], quantities[id2], temp); } -void MovePyramidBagItemSlotInList(u8 from, u8 to) +static void MovePyramidBagItemSlotInList(u8 from, u8 to) { u16 *itemIds = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode]; u8 *quantities = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode]; @@ -517,7 +595,7 @@ void MovePyramidBagItemSlotInList(u8 from, u8 to) } } -void CompactItems(void) +static void CompactItems(void) { u8 i, j; u16 *itemIds = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode]; @@ -547,58 +625,58 @@ void sub_81C5924(void) u16 *itemIds = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode]; CompactItems(); - gUnknown_0203CF2C->listMenuCount = 0; + gPyramidBagResources->listMenuCount = 0; for (i = 0; i < PYRAMID_BAG_ITEMS_COUNT; i++) { if (itemIds[i] != 0) - gUnknown_0203CF2C->listMenuCount++; + gPyramidBagResources->listMenuCount++; } - gUnknown_0203CF2C->listMenuCount++; - if (gUnknown_0203CF2C->listMenuCount > 8) - gUnknown_0203CF2C->listMenuMaxShown = 8; + gPyramidBagResources->listMenuCount++; + if (gPyramidBagResources->listMenuCount > 8) + gPyramidBagResources->listMenuMaxShown = 8; else - gUnknown_0203CF2C->listMenuMaxShown = gUnknown_0203CF2C->listMenuCount; + gPyramidBagResources->listMenuMaxShown = gPyramidBagResources->listMenuCount; } void sub_81C59BC(void) { - if (gUnknown_0203CF30.unk8 != 0 && gUnknown_0203CF30.unk8 + gUnknown_0203CF2C->listMenuMaxShown > gUnknown_0203CF2C->listMenuCount) - gUnknown_0203CF30.unk8 = gUnknown_0203CF2C->listMenuCount - gUnknown_0203CF2C->listMenuMaxShown; - if (gUnknown_0203CF30.unk8 + gUnknown_0203CF30.unk6 >= gUnknown_0203CF2C->listMenuCount) + if (gPyramidBagCursorData.scrollPosition != 0 && gPyramidBagCursorData.scrollPosition + gPyramidBagResources->listMenuMaxShown > gPyramidBagResources->listMenuCount) + gPyramidBagCursorData.scrollPosition = gPyramidBagResources->listMenuCount - gPyramidBagResources->listMenuMaxShown; + if (gPyramidBagCursorData.scrollPosition + gPyramidBagCursorData.cursorPosition >= gPyramidBagResources->listMenuCount) { - if (gUnknown_0203CF2C->listMenuCount == 0) - gUnknown_0203CF30.unk6 = 0; + if (gPyramidBagResources->listMenuCount == 0) + gPyramidBagCursorData.cursorPosition = 0; else - gUnknown_0203CF30.unk6 = gUnknown_0203CF2C->listMenuCount - 1; + gPyramidBagCursorData.cursorPosition = gPyramidBagResources->listMenuCount - 1; } } -void sub_81C5A20(void) +static void sub_81C5A20(void) { u8 i; - if (gUnknown_0203CF30.unk6 > 4) + if (gPyramidBagCursorData.cursorPosition > 4) { - for (i = 0; i <= gUnknown_0203CF30.unk6 - 4; i++) + for (i = 0; i <= gPyramidBagCursorData.cursorPosition - 4; i++) { - if (gUnknown_0203CF30.unk8 + gUnknown_0203CF2C->listMenuMaxShown == gUnknown_0203CF2C->listMenuCount) + if (gPyramidBagCursorData.scrollPosition + gPyramidBagResources->listMenuMaxShown == gPyramidBagResources->listMenuCount) { // daycare.c sends its regards. break; } - gUnknown_0203CF30.unk6--; - gUnknown_0203CF30.unk8++; + gPyramidBagCursorData.cursorPosition--; + gPyramidBagCursorData.scrollPosition++; } } } -void sub_81C5A98(u8 listMenuTaskId, u8 arg1) +static void sub_81C5A98(u8 listMenuTaskId, u8 arg1) { u8 y = ListMenuGetYCoordForPrintingArrowCursor(listMenuTaskId); sub_81C5AB8(y, arg1); } -void sub_81C5AB8(u8 y, u8 arg1) +static void sub_81C5AB8(u8 y, u8 arg1) { if (arg1 == 0xFF) FillWindowPixelRect(0, 0, 0, y, GetMenuCursorDimensionByFont(1, 0), GetMenuCursorDimensionByFont(1, 1)); @@ -612,46 +690,46 @@ void sub_81C5B14(u8 taskId) gTasks[taskId].func = sub_81C5B4C; } -void sub_81C5B4C(u8 taskId) +static void sub_81C5B4C(u8 taskId) { s16 *data = gTasks[taskId].data; if (!gPaletteFade.active) { - DestroyListMenuTask(data[0], &gUnknown_0203CF30.unk8, &gUnknown_0203CF30.unk6); - if (gUnknown_0203CF2C->callback2 != NULL) - SetMainCallback2(gUnknown_0203CF2C->callback2); + DestroyListMenuTask(data[0], &gPyramidBagCursorData.scrollPosition, &gPyramidBagCursorData.cursorPosition); + if (gPyramidBagResources->callback2 != NULL) + SetMainCallback2(gPyramidBagResources->callback2); else - SetMainCallback2(gUnknown_0203CF30.callback); - sub_81C56CC(); + SetMainCallback2(gPyramidBagCursorData.callback); + RemoveScrollArrow(); ResetSpriteData(); FreeAllSpritePalettes(); FreeAllWindowBuffers(); - Free(gUnknown_0203CF2C); + Free(gPyramidBagResources); DestroyTask(taskId); } } -void Task_HandlePyramidBagInput(u8 taskId) +static void Task_HandlePyramidBagInput(u8 taskId) { s16 *data = gTasks[taskId].data; if (sub_81221EC() != TRUE && !gPaletteFade.active) { if (gMain.newKeys & SELECT_BUTTON) { - if (gUnknown_0203CF30.unk4 != 2) + if (gPyramidBagCursorData.unk4 != 2) { - ListMenuGetScrollAndRow(data[0], &gUnknown_0203CF30.unk8, &gUnknown_0203CF30.unk6); - if (gUnknown_0203CF30.unk8 + gUnknown_0203CF30.unk6 != gUnknown_0203CF2C->listMenuCount - 1) + ListMenuGetScrollAndRow(data[0], &gPyramidBagCursorData.scrollPosition, &gPyramidBagCursorData.cursorPosition); + if (gPyramidBagCursorData.scrollPosition + gPyramidBagCursorData.cursorPosition != gPyramidBagResources->listMenuCount - 1) { PlaySE(SE_SELECT); - sub_81C67CC(taskId); + Task_BeginItemSwap(taskId); } } } else { s32 listId = ListMenuHandleInputGetItemId(data[0]); - ListMenuGetScrollAndRow(data[0], &gUnknown_0203CF30.unk8, &gUnknown_0203CF30.unk6); + ListMenuGetScrollAndRow(data[0], &gPyramidBagCursorData.scrollPosition, &gPyramidBagCursorData.cursorPosition); switch (listId) { case LIST_NOTHING_CHOSEN: @@ -666,7 +744,7 @@ void Task_HandlePyramidBagInput(u8 taskId) gSpecialVar_ItemId = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode][listId]; data[1] = listId; data[2] = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode][listId]; - if (gUnknown_0203CF30.unk4 == 2) + if (gPyramidBagCursorData.unk4 == 2) sub_81C674C(taskId); else sub_81C5D20(taskId); @@ -676,33 +754,33 @@ void Task_HandlePyramidBagInput(u8 taskId) } } -void sub_81C5D20(u8 taskId) +static void sub_81C5D20(u8 taskId) { s16 *data = gTasks[taskId].data; - sub_81C56CC(); + RemoveScrollArrow(); sub_81C5A98(data[0], 1); - switch (gUnknown_0203CF30.unk4) + switch (gPyramidBagCursorData.unk4) { default: - gUnknown_0203CF2C->menuActionIds = gUnknown_0861F308; - gUnknown_0203CF2C->menuActionsCount = ARRAY_COUNT(gUnknown_0861F308); + gPyramidBagResources->menuActionIds = sFieldMenuActionIds; + gPyramidBagResources->menuActionsCount = ARRAY_COUNT(sFieldMenuActionIds); break; case 1: if (ItemId_GetBattleUsage(gSpecialVar_ItemId)) { - gUnknown_0203CF2C->menuActionIds = gUnknown_0861F30E; - gUnknown_0203CF2C->menuActionsCount = ARRAY_COUNT(gUnknown_0861F30E); + gPyramidBagResources->menuActionIds = sBattleMenuActionIds; + gPyramidBagResources->menuActionsCount = ARRAY_COUNT(sBattleMenuActionIds); } else { - gUnknown_0203CF2C->menuActionIds = gUnknown_0861F310; - gUnknown_0203CF2C->menuActionsCount = ARRAY_COUNT(gUnknown_0861F310); + gPyramidBagResources->menuActionIds = gUnknown_0861F310; + gPyramidBagResources->menuActionsCount = ARRAY_COUNT(gUnknown_0861F310); } break; case 3: - gUnknown_0203CF2C->menuActionIds = gUnknown_0861F30C; - gUnknown_0203CF2C->menuActionsCount = ARRAY_COUNT(gUnknown_0861F30C); + gPyramidBagResources->menuActionIds = gUnknown_0861F30C; + gPyramidBagResources->menuActionsCount = ARRAY_COUNT(gUnknown_0861F30C); break; } @@ -710,32 +788,32 @@ void sub_81C5D20(u8 taskId) StringExpandPlaceholders(gStringVar4, gText_Var1IsSelected); FillWindowPixelBuffer(1, 0); PrintOnWindow_Font1(1, gStringVar4, 3, 0, 0, 1, 0, 0); - if (gUnknown_0203CF2C->menuActionsCount == 1) + if (gPyramidBagResources->menuActionsCount == 1) sub_81C5EAC(sub_81C6D24(0)); - else if (gUnknown_0203CF2C->menuActionsCount == 2) + else if (gPyramidBagResources->menuActionsCount == 2) sub_81C5EAC(sub_81C6D24(1)); else sub_81C5F08(sub_81C6D24(2), 2, 2); - if (gUnknown_0203CF2C->menuActionsCount == 4) - gTasks[taskId].func = sub_81C5FE4; + if (gPyramidBagResources->menuActionsCount == 4) + gTasks[taskId].func = HandleMenuActionInput; else - gTasks[taskId].func = sub_81C5F68; + gTasks[taskId].func = HandleFewMenuActionsInput; } -void sub_81C5EAC(u8 windowId) +static void sub_81C5EAC(u8 windowId) { - AddItemMenuActionTextPrinters(windowId, 7, 8, 1, 0, 0x10, gUnknown_0203CF2C->menuActionsCount, gUnknown_0861F2D8, gUnknown_0203CF2C->menuActionIds); - InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, gUnknown_0203CF2C->menuActionsCount, 0); + AddItemMenuActionTextPrinters(windowId, 7, 8, 1, 0, 0x10, gPyramidBagResources->menuActionsCount, sMenuActions, gPyramidBagResources->menuActionIds); + InitMenuInUpperLeftCornerPlaySoundWhenAPressed(windowId, gPyramidBagResources->menuActionsCount, 0); } -void sub_81C5F08(u8 windowId, u8 horizontalCount, u8 verticalCount) +static void sub_81C5F08(u8 windowId, u8 horizontalCount, u8 verticalCount) { - sub_8198DBC(windowId, 7, 8, 1, 0x38, horizontalCount, verticalCount, gUnknown_0861F2D8, gUnknown_0203CF2C->menuActionIds); + sub_8198DBC(windowId, 7, 8, 1, 0x38, horizontalCount, verticalCount, sMenuActions, gPyramidBagResources->menuActionIds); sub_8199944(windowId, 0x38, horizontalCount, verticalCount, 0); } -void sub_81C5F68(u8 taskId) +static void HandleFewMenuActionsInput(u8 taskId) { if (sub_81221EC() != TRUE) { @@ -746,25 +824,25 @@ void sub_81C5F68(u8 taskId) break; case -1: PlaySE(SE_SELECT); - gUnknown_0861F2D8[3].func.void_u8(taskId); + sMenuActions[ACTION_CANCEL].func.void_u8(taskId); break; default: PlaySE(SE_SELECT); - if (gUnknown_0861F2D8[gUnknown_0203CF2C->menuActionIds[id]].func.void_u8 != NULL) - gUnknown_0861F2D8[gUnknown_0203CF2C->menuActionIds[id]].func.void_u8(taskId); + if (sMenuActions[gPyramidBagResources->menuActionIds[id]].func.void_u8 != NULL) + sMenuActions[gPyramidBagResources->menuActionIds[id]].func.void_u8(taskId); break; } } } -void sub_81C5FE4(u8 taskId) +static void HandleMenuActionInput(u8 taskId) { if (sub_81221EC() != TRUE) { s8 id = GetMenuCursorPos(); if (gMain.newKeys & DPAD_UP) { - if (id > 0 && sub_81C616C(id - 2)) + if (id > 0 && IsAValidMenuAction(id - 2)) { PlaySE(SE_SELECT); sub_8199134(0, -1); @@ -772,7 +850,7 @@ void sub_81C5FE4(u8 taskId) } else if (gMain.newKeys & DPAD_DOWN) { - if (id < gUnknown_0203CF2C->menuActionsCount - 2 && sub_81C616C(id + 2)) + if (id < gPyramidBagResources->menuActionsCount - 2 && IsAValidMenuAction(id + 2)) { PlaySE(SE_SELECT); sub_8199134(0, 1); @@ -780,7 +858,7 @@ void sub_81C5FE4(u8 taskId) } else if (gMain.newKeys & DPAD_LEFT || GetLRKeysState() == 1) { - if (id & 1 && sub_81C616C(id - 1)) + if (id & 1 && IsAValidMenuAction(id - 1)) { PlaySE(SE_SELECT); sub_8199134(-1, 0); @@ -788,7 +866,7 @@ void sub_81C5FE4(u8 taskId) } else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysState() == 2) { - if (!(id & 1) && sub_81C616C(id + 1)) + if (!(id & 1) && IsAValidMenuAction(id + 1)) { PlaySE(SE_SELECT); sub_8199134(1, 0); @@ -797,40 +875,40 @@ void sub_81C5FE4(u8 taskId) else if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); - if (gUnknown_0861F2D8[gUnknown_0203CF2C->menuActionIds[id]].func.void_u8 != NULL) - gUnknown_0861F2D8[gUnknown_0203CF2C->menuActionIds[id]].func.void_u8(taskId); + if (sMenuActions[gPyramidBagResources->menuActionIds[id]].func.void_u8 != NULL) + sMenuActions[gPyramidBagResources->menuActionIds[id]].func.void_u8(taskId); } else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); - gUnknown_0861F2D8[3].func.void_u8(taskId); + sMenuActions[ACTION_CANCEL].func.void_u8(taskId); } } } -bool8 sub_81C616C(s8 arg0) +static bool8 IsAValidMenuAction(s8 actionTableId) { - if (arg0 < 0) + if (actionTableId < 0) return FALSE; - else if (arg0 > gUnknown_0203CF2C->menuActionsCount) + else if (actionTableId > gPyramidBagResources->menuActionsCount) return FALSE; - else if (gUnknown_0203CF2C->menuActionIds[arg0] == 5) + else if (gPyramidBagResources->menuActionIds[actionTableId] == ACTION_DUMMY) return FALSE; else return TRUE; } -void sub_81C61A8(void) +static void sub_81C61A8(void) { - if (gUnknown_0203CF2C->menuActionsCount == 1) + if (gPyramidBagResources->menuActionsCount == 1) sub_81C6D6C(0); - else if (gUnknown_0203CF2C->menuActionsCount == 2) + else if (gPyramidBagResources->menuActionsCount == 2) sub_81C6D6C(1); else sub_81C6D6C(2); } -void sub_81C61E0(u8 taskId) +static void BagAction_UseOnField(u8 taskId) { u8 pocketId = ItemId_GetPocket(gSpecialVar_ItemId); @@ -851,7 +929,7 @@ void sub_81C61E0(u8 taskId) } } -void sub_81C6258(u8 taskId) +static void BagAction_Cancel(u8 taskId) { s16 *data = gTasks[taskId].data; @@ -860,16 +938,16 @@ void sub_81C6258(u8 taskId) schedule_bg_copy_tilemap_to_vram(0); schedule_bg_copy_tilemap_to_vram(1); sub_81C5A98(data[0], 0); - sub_81C629C(taskId); + SetTaskToMainPyramidBagInputHandler(taskId); } -void sub_81C629C(u8 taskId) +static void SetTaskToMainPyramidBagInputHandler(u8 taskId) { - sub_81C5674(); + AddScrollArrow(); gTasks[taskId].func = Task_HandlePyramidBagInput; } -void sub_81C62C4(u8 taskId) +static void BagAction_Toss(u8 taskId) { s16 *data = gTasks[taskId].data; @@ -890,7 +968,7 @@ void sub_81C62C4(u8 taskId) } } -void sub_81C6350(u8 taskId) +static void sub_81C6350(u8 taskId) { s16 *data = gTasks[taskId].data; @@ -899,19 +977,19 @@ void sub_81C6350(u8 taskId) StringExpandPlaceholders(gStringVar4, gText_ConfirmTossItems); FillWindowPixelBuffer(1, 0); PrintOnWindow_Font1(1, gStringVar4, 3, 0, 0, 1, 0, 0); - sub_81C6DAC(taskId, &gUnknown_0861F314); + sub_81C6DAC(taskId, &sYesNoTossFuncions); } -void sub_81C63D0(u8 taskId) +static void DontTossItem(u8 taskId) { s16 *data = gTasks[taskId].data; PrintItemDescription(data[1]); sub_81C5A98(data[0], 0); - sub_81C629C(taskId); + SetTaskToMainPyramidBagInputHandler(taskId); } -void sub_81C6404(void) +static void sub_81C6404(void) { s32 x; @@ -922,7 +1000,7 @@ void sub_81C6404(void) PrintTextOnWindow(3, 1, gStringVar4, x, 2, 0, NULL); } -void sub_81C645C(s16 value) +static void sub_81C645C(s16 value) { s32 x; @@ -932,7 +1010,7 @@ void sub_81C645C(s16 value) PrintTextOnWindow(3, 1, gStringVar4, x, 2, 0, NULL); } -void sub_81C64B4(u8 taskId) +static void sub_81C64B4(u8 taskId) { s16 *data = gTasks[taskId].data; @@ -954,11 +1032,11 @@ void sub_81C64B4(u8 taskId) sub_8198070(3, 0); ClearWindowTilemap(3); schedule_bg_copy_tilemap_to_vram(1); - sub_81C63D0(taskId); + DontTossItem(taskId); } } -void sub_81C654C(u8 taskId) +static void TossItem(u8 taskId) { s16 *data = gTasks[taskId].data; @@ -970,11 +1048,11 @@ void sub_81C654C(u8 taskId) gTasks[taskId].func = sub_81C65CC; } -void sub_81C65CC(u8 taskId) +static void sub_81C65CC(u8 taskId) { s16 *data = gTasks[taskId].data; - u16 *scrollOffset = &gUnknown_0203CF30.unk8; - u16 *selectedRow = &gUnknown_0203CF30.unk6; + u16 *scrollOffset = &gPyramidBagCursorData.scrollPosition; + u16 *selectedRow = &gPyramidBagCursorData.cursorPosition; if (gMain.newKeys & (A_BUTTON | B_BUTTON)) { @@ -986,11 +1064,11 @@ void sub_81C65CC(u8 taskId) SetBagItemsListTemplate(); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollOffset, *selectedRow); schedule_bg_copy_tilemap_to_vram(0); - sub_81C629C(taskId); + SetTaskToMainPyramidBagInputHandler(taskId); } } -void sub_81C6648(u8 taskId) +static void BagAction_Give(u8 taskId) { sub_81C61A8(); if (ItemIsMail(gSpecialVar_ItemId) == TRUE) @@ -999,7 +1077,7 @@ void sub_81C6648(u8 taskId) } else if (!ItemId_GetImportance(gSpecialVar_ItemId)) { - gUnknown_0203CF2C->callback2 = sub_81B7F60; + gPyramidBagResources->callback2 = sub_81B7F60; sub_81C5B14(taskId); } else @@ -1008,14 +1086,14 @@ void sub_81C6648(u8 taskId) } } -void sub_81C66AC(u8 taskId) +static void sub_81C66AC(u8 taskId) { CopyItemName(gSpecialVar_ItemId, gStringVar1); StringExpandPlaceholders(gStringVar4, gText_Var1CantBeHeld); DisplayItemMessageInBattlePyramid(taskId, gStringVar4, sub_81C66EC); } -void sub_81C66EC(u8 taskId) +static void sub_81C66EC(u8 taskId) { if (gMain.newKeys & A_BUTTON) { @@ -1031,10 +1109,10 @@ void sub_81C6714(u8 taskId) sub_81C6E1C(); PrintItemDescription(data[1]); sub_81C5A98(data[0], 0); - sub_81C629C(taskId); + SetTaskToMainPyramidBagInputHandler(taskId); } -void sub_81C674C(u8 taskId) +static void sub_81C674C(u8 taskId) { if (!itemid_80BF6D8_mail_related(gSpecialVar_ItemId)) DisplayItemMessageInBattlePyramid(taskId, gText_CantWriteMail, sub_81C66EC); @@ -1044,7 +1122,7 @@ void sub_81C674C(u8 taskId) sub_81C66AC(taskId); } -void sub_81C679C(u8 taskId) +static void BagAction_UseInBattle(u8 taskId) { if (ItemId_GetBattleFunc(gSpecialVar_ItemId) != NULL) { @@ -1053,12 +1131,12 @@ void sub_81C679C(u8 taskId) } } -void sub_81C67CC(u8 taskId) +static void Task_BeginItemSwap(u8 taskId) { s16 *data = gTasks[taskId].data; - data[1] = gUnknown_0203CF30.unk8 + gUnknown_0203CF30.unk6; - gUnknown_0203CF2C->unk814 = data[1]; + data[1] = gPyramidBagCursorData.scrollPosition + gPyramidBagCursorData.cursorPosition; + gPyramidBagResources->unk814 = data[1]; ListMenuSetUnkIndicatorsStructField(data[0], 0x10, 1); CopyItemName(gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode][data[1]], gStringVar1); StringExpandPlaceholders(gStringVar4, gText_MoveVar1Where); @@ -1066,10 +1144,10 @@ void sub_81C67CC(u8 taskId) PrintOnWindow_Font1(1, gStringVar4, 3, 0, 0, 1, 0, 0); sub_81C5A98(data[0], 1); sub_81C704C(data[1]); - gTasks[taskId].func = sub_81C68B0; + gTasks[taskId].func = Task_ItemSwapHandleInput; } -void sub_81C68B0(u8 taskId) +static void Task_ItemSwapHandleInput(u8 taskId) { s16 *data = gTasks[taskId].data; if (sub_81221EC() != TRUE) @@ -1077,15 +1155,15 @@ void sub_81C68B0(u8 taskId) if (gMain.newKeys & SELECT_BUTTON) { PlaySE(SE_SELECT); - ListMenuGetScrollAndRow(data[0], &gUnknown_0203CF30.unk8, &gUnknown_0203CF30.unk6); - sub_81C6964(taskId); + ListMenuGetScrollAndRow(data[0], &gPyramidBagCursorData.scrollPosition, &gPyramidBagCursorData.cursorPosition); + PerformItemSwap(taskId); } else { s32 id = ListMenuHandleInputGetItemId(data[0]); - ListMenuGetScrollAndRow(data[0], &gUnknown_0203CF30.unk8, &gUnknown_0203CF30.unk6); - sub_81C7028(0); - sub_81C704C(gUnknown_0203CF30.unk6); + ListMenuGetScrollAndRow(data[0], &gPyramidBagCursorData.scrollPosition, &gPyramidBagCursorData.cursorPosition); + sub_81C7028(FALSE); + sub_81C704C(gPyramidBagCursorData.cursorPosition); switch (id) { case LIST_NOTHING_CHOSEN: @@ -1093,24 +1171,24 @@ void sub_81C68B0(u8 taskId) case LIST_B_PRESSED: PlaySE(SE_SELECT); if (gMain.newKeys & A_BUTTON) - sub_81C6964(taskId); + PerformItemSwap(taskId); else sub_81C6A14(taskId); break; default: PlaySE(SE_SELECT); - sub_81C6964(taskId); + PerformItemSwap(taskId); break; } } } } -void sub_81C6964(u8 taskId) +static void PerformItemSwap(u8 taskId) { s16 *data = gTasks[taskId].data; - u16 *scrollOffset = &gUnknown_0203CF30.unk8; - u16 *selectedRow = &gUnknown_0203CF30.unk6; + u16 *scrollOffset = &gPyramidBagCursorData.scrollPosition; + u16 *selectedRow = &gPyramidBagCursorData.cursorPosition; u16 var = *scrollOffset + *selectedRow; if (data[1] == var || data[1] == var - 1) @@ -1120,31 +1198,31 @@ void sub_81C6964(u8 taskId) else { MovePyramidBagItemSlotInList(data[1], var); - gUnknown_0203CF2C->unk814 = 0xFF; - sub_81C7028(1); + gPyramidBagResources->unk814 = 0xFF; + sub_81C7028(TRUE); DestroyListMenuTask(data[0], scrollOffset, selectedRow); if (data[1] < var) - gUnknown_0203CF30.unk6--; + gPyramidBagCursorData.cursorPosition--; SetBagItemsListTemplate(); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollOffset, *selectedRow); - sub_81C629C(taskId); + SetTaskToMainPyramidBagInputHandler(taskId); } } -void sub_81C6A14(u8 taskId) +static void sub_81C6A14(u8 taskId) { s16 *data = gTasks[taskId].data; - u16 *scrollOffset = &gUnknown_0203CF30.unk8; - u16 *selectedRow = &gUnknown_0203CF30.unk6; + u16 *scrollOffset = &gPyramidBagCursorData.scrollPosition; + u16 *selectedRow = &gPyramidBagCursorData.cursorPosition; - gUnknown_0203CF2C->unk814 = 0xFF; - sub_81C7028(1); + gPyramidBagResources->unk814 = 0xFF; + sub_81C7028(TRUE); DestroyListMenuTask(data[0], scrollOffset, selectedRow); if (data[1] < *scrollOffset + *selectedRow) - gUnknown_0203CF30.unk6--; + gPyramidBagCursorData.cursorPosition--; SetBagItemsListTemplate(); data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollOffset, *selectedRow); - sub_81C629C(taskId); + SetTaskToMainPyramidBagInputHandler(taskId); } void sub_81C6A94(void) @@ -1181,7 +1259,7 @@ void sub_81C6A94(void) Free(newQuantities); } -void sub_81C6BD8(void) +static void sub_81C6BD8(void) { u8 i; @@ -1200,30 +1278,30 @@ void sub_81C6BD8(void) schedule_bg_copy_tilemap_to_vram(1); } -void PrintOnWindow_Font1(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId) +static void PrintOnWindow_Font1(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId) { - AddTextPrinterParameterized2(windowId, 1, x, y, letterSpacing, lineSpacing, gUnknown_0861F31C[colorTableId], speed, src); + AddTextPrinterParameterized2(windowId, 1, x, y, letterSpacing, lineSpacing, sColorTable[colorTableId], speed, src); } -void PrintOnWindow_Font7(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId) +static void PrintOnWindow_Font7(u8 windowId, const u8 *src, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, u8 speed, u8 colorTableId) { - AddTextPrinterParameterized2(windowId, 7, x, y, letterSpacing, lineSpacing, gUnknown_0861F31C[colorTableId], speed, src); + AddTextPrinterParameterized2(windowId, 7, x, y, letterSpacing, lineSpacing, sColorTable[colorTableId], speed, src); } -void sub_81C6CEC(u8 windowId) +static void sub_81C6CEC(u8 windowId) { SetWindowBorderStyle(windowId, 0, 1, 0xE); schedule_bg_copy_tilemap_to_vram(1); } -u8 sub_81C6D08(u8 windowArrayId) +static u8 sub_81C6D08(u8 windowArrayId) { - return gUnknown_0203CF2C->windowIds[windowArrayId]; + return gPyramidBagResources->windowIds[windowArrayId]; } -u8 sub_81C6D24(u8 windowArrayId) +static u8 sub_81C6D24(u8 windowArrayId) { - u8 *windowId = &gUnknown_0203CF2C->windowIds[windowArrayId]; + u8 *windowId = &gPyramidBagResources->windowIds[windowArrayId]; if (*windowId == 0xFF) { *windowId = AddWindow(&gUnknown_0861F350[windowArrayId]); @@ -1233,9 +1311,9 @@ u8 sub_81C6D24(u8 windowArrayId) return *windowId; } -void sub_81C6D6C(u8 windowArrayId) +static void sub_81C6D6C(u8 windowArrayId) { - u8 *windowId = &gUnknown_0203CF2C->windowIds[windowArrayId]; + u8 *windowId = &gPyramidBagResources->windowIds[windowArrayId]; if (*windowId != 0xFF) { sub_8198070(*windowId, FALSE); @@ -1245,3 +1323,112 @@ void sub_81C6D6C(u8 windowArrayId) *windowId = 0xFF; } } + +static void sub_81C6DAC(u8 taskId, const struct YesNoFuncTable *yesNoTable) +{ + CreateYesNoMenuWithCallbacks(taskId, &gUnknown_0861F350[4], 1, 0, 2, 1, 0xE, yesNoTable); +} + +void DisplayItemMessageInBattlePyramid(u8 taskId, const u8 *str, void (*callback)(u8 taskId)) +{ + FillWindowPixelBuffer(2, 0x11); + DisplayMessageAndContinueTask(taskId, 2, 0xA, 0xD, 1, GetPlayerTextSpeed(), str, callback); + schedule_bg_copy_tilemap_to_vram(1); +} + +static void sub_81C6E1C(void) +{ + sub_8197DF8(2, FALSE); + ClearWindowTilemap(2); + schedule_bg_copy_tilemap_to_vram(1); +} + +#define ITEM_IMAGE_TAG 0x1024 + +static void sub_81C6E38(u8 itemSpriteArrayId) +{ + u8 *spriteId = &gPyramidBagResources->itemsSpriteIds[itemSpriteArrayId]; + if (*spriteId != 0xFF) + { + FreeSpriteTilesByTag(ITEM_IMAGE_TAG + itemSpriteArrayId); + FreeSpritePaletteByTag(ITEM_IMAGE_TAG + itemSpriteArrayId); + FreeSpriteOamMatrix(&gSprites[*spriteId]); + DestroySprite(&gSprites[*spriteId]); + *spriteId = 0xFF; + } +} + +static void sub_81C6E98(void) +{ + struct SpritePalette spritePalette; + u16 *palPtr = Alloc(0x40); + + LZDecompressWram(gUnknown_08D9ADD0, palPtr); + spritePalette.data = palPtr + (gSaveBlock2Ptr->frontier.lvlMode * 16); + spritePalette.tag = ITEM_IMAGE_TAG; + LoadSpritePalette(&spritePalette); + Free(palPtr); +} + +static void sub_81C6EF4(void) +{ + u8 *spriteId = &gPyramidBagResources->itemsSpriteIds[0]; + *spriteId = CreateSprite(&gUnknown_0861F3D4, 0x44, 0x38, 0); +} + +static void sub_81C6F20(void) +{ + struct Sprite *sprite = &gSprites[gPyramidBagResources->itemsSpriteIds[0]]; + if (sprite->affineAnimEnded) + { + StartSpriteAffineAnim(sprite, 1); + sprite->callback = sub_81C6F68; + } +} + +static void sub_81C6F68(struct Sprite *sprite) +{ + if (sprite->affineAnimEnded) + { + StartSpriteAffineAnim(sprite, 0); + sprite->callback = SpriteCallbackDummy; + } +} + +static void ShowItemImage(u16 itemId, u8 itemSpriteArrayId) +{ + u8 itemSpriteId; + u8 *spriteId = &gPyramidBagResources->itemsSpriteIds[itemSpriteArrayId + 1]; + if (*spriteId == 0xFF) + { + FreeSpriteTilesByTag(ITEM_IMAGE_TAG + 1 + itemSpriteArrayId); + FreeSpritePaletteByTag(ITEM_IMAGE_TAG + 1 + itemSpriteArrayId); + itemSpriteId = AddItemIconSprite(ITEM_IMAGE_TAG + 1 + itemSpriteArrayId, ITEM_IMAGE_TAG + 1 + itemSpriteArrayId, itemId); + if (itemSpriteId != MAX_SPRITES) + { + *spriteId = itemSpriteId; + gSprites[itemSpriteId].pos2.x = 24; + gSprites[itemSpriteId].pos2.y = 88; + } + } +} + +static void sub_81C6FF8(u8 itemSpriteArrayId) +{ + sub_81C6E38(itemSpriteArrayId + 1); +} + +static void sub_81C700C(void) +{ + sub_8122344(&gPyramidBagResources->itemsSpriteIds[3], 8); +} + +static void sub_81C7028(bool8 invisible) +{ + sub_81223FC(&gPyramidBagResources->itemsSpriteIds[3], 8, invisible); +} + +static void sub_81C704C(u8 y) +{ + sub_8122448(&gPyramidBagResources->itemsSpriteIds[3], 8 | 0x80, 120, (y + 1) * 16); +} diff --git a/src/item.c b/src/item.c index 29c250989..3866d7316 100644 --- a/src/item.c +++ b/src/item.c @@ -10,6 +10,7 @@ #include "item_menu.h" #include "strings.h" #include "load_save.h" +#include "battle_pyramid_bag.h" extern bool8 InBattlePyramid(void); extern u16 gUnknown_0203CF30[]; @@ -965,7 +966,7 @@ bool8 RemovePyramidBagItem(u16 itemId, u16 count) u16 *items = gSaveBlock2Ptr->frontier.pyramidBag.itemId[gSaveBlock2Ptr->frontier.lvlMode]; u8 *quantities = gSaveBlock2Ptr->frontier.pyramidBag.quantity[gSaveBlock2Ptr->frontier.lvlMode]; - i = gUnknown_0203CF30[3] + gUnknown_0203CF30[4]; + i = gPyramidBagCursorData.cursorPosition + gPyramidBagCursorData.scrollPosition; if (items[i] == itemId && quantities[i] >= count) { quantities[i] -= count; diff --git a/src/item_use.c b/src/item_use.c index 23c829391..bf7c2a386 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -33,8 +33,8 @@ #include "pokeblock.h" #include "menu.h" #include "item_menu.h" +#include "battle_pyramid_bag.h" -extern void(**gUnknown_0203CF2C)(void); extern void(*gUnknown_0203A0F4)(u8 taskId); extern void(*gUnknown_085920D8[])(void); extern void (*gUnknown_03006328)(u8, u16, TaskFunc); @@ -122,7 +122,7 @@ void SetUpItemUseCallback(u8 taskId) } else { - *gUnknown_0203CF2C = gUnknown_085920D8[type]; + gPyramidBagResources->callback2 = gUnknown_085920D8[type]; sub_81C5B14(taskId); } } @@ -987,7 +987,7 @@ void sub_80FE54C(u8 taskId) } else { - *gUnknown_0203CF2C = sub_81B89F0; + gPyramidBagResources->callback2 = sub_81B89F0; sub_81C5B14(taskId); } } diff --git a/src/start_menu.c b/src/start_menu.c index 60271317a..4a58c146e 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -33,6 +33,7 @@ #include "international_string_util.h" #include "constants/songs.h" #include "field_player_avatar.h" +#include "battle_pyramid_bag.h" // Menu actions enum @@ -73,12 +74,11 @@ EWRAM_DATA static u8 sSaveDialogTimer = 0; EWRAM_DATA static bool8 sSavingComplete = FALSE; EWRAM_DATA static u8 sSaveInfoWindowId = 0; -// Extern variables +// Extern variables. extern u8 gDifferentSaveFile; -extern u16 gSaveFileStatus; extern u8 gUnknown_03005DB4; -// Extern functions in uncompiled files +// Extern functions in not decompiled files. extern void sub_80AF688(void); extern void var_800D_set_xB(void); extern void sub_808B864(void); @@ -89,7 +89,6 @@ extern void CB2_PokeNav(void); extern void sub_80C4DDC(void (*)(void)); extern void sub_80C51C4(void (*)(void)); extern void sub_80C4E74(u8, void (*)(void)); -extern void sub_81C4EFC(void); extern void ScriptUnfreezeEventObjects(void); extern void sub_81A9EC8(void); extern void save_serialize_map(void); @@ -781,7 +780,7 @@ static bool8 StartMenuBattlePyramidBagCallback(void) play_some_sound(); RemoveExtraStartMenuWindows(); overworld_free_bg_tilemaps(); - SetMainCallback2(sub_81C4EFC); // Display battle pyramid bag + SetMainCallback2(CB2_PyramidBagMenuFromStartMenu); return TRUE; } -- cgit v1.2.3 From 43b74032fa981a06e2e66fe5a2d4cf2edaad27c8 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 30 Aug 2018 20:25:57 +0200 Subject: Make pyramid bag compile. --- src/battle_controller_player.c | 4 +--- src/battle_controller_safari.c | 2 +- src/battle_controller_wally.c | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index ffe8936a0..7f038a0c3 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -28,7 +28,7 @@ #include "pokeball.h" #include "data2.h" #include "battle_setup.h" -#include "item_use.h" +#include "item_menu.h" #include "recorded_battle.h" #include "party_menu.h" #include "battle_dome.h" @@ -40,7 +40,6 @@ extern u16 gBattle_BG0_X; extern u16 gBattle_BG0_Y; extern struct UnusedControllerStruct gUnknown_02022D0C; extern struct MusicPlayerInfo gMPlayInfo_BGM; -extern struct SpriteTemplate gMultiuseSpriteTemplate; extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[]; extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[]; @@ -52,7 +51,6 @@ extern void sub_81851A8(u8 *); // this file's functions static void PlayerHandleGetMonData(void); -void PlayerHandleGetRawMonData(void); static void PlayerHandleSetMonData(void); static void PlayerHandleSetRawMonData(void); static void PlayerHandleLoadMonSprite(void); diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index bc97c01f9..aab804b41 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -21,7 +21,7 @@ #include "pokeball.h" #include "data2.h" #include "pokeblock.h" -#include "item_use.h" +#include "item_menu.h" extern u16 gBattle_BG0_X; extern u16 gBattle_BG0_Y; diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c index 960181fbc..4faf78681 100644 --- a/src/battle_controller_wally.c +++ b/src/battle_controller_wally.c @@ -29,7 +29,7 @@ #include "data2.h" #include "party_menu.h" #include "battle_setup.h" -#include "item_use.h" +#include "item_menu.h" extern u16 gBattle_BG0_X; extern u16 gBattle_BG0_Y; -- cgit v1.2.3 From 96f2b995dc67d1278bd65b3661426da95503cb5d Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 30 Aug 2018 21:28:03 +0200 Subject: Pyramid bag review changes --- src/battle_pyramid_bag.c | 12 ++++++------ src/item.c | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/battle_pyramid_bag.c b/src/battle_pyramid_bag.c index 9cb35074b..8a5ce7a99 100644 --- a/src/battle_pyramid_bag.c +++ b/src/battle_pyramid_bag.c @@ -87,7 +87,7 @@ static u8 sub_81C6D24(u8 windowArrayId); static void sub_81C6D6C(u8 windowArrayId); static void sub_81C5EAC(u8 windowId); static void sub_81C5F08(u8 windowId, u8 horizontalCount, u8 verticalCount); -static bool8 IsAValidMenuAction(s8 arg0); +static bool8 IsValidMenuAction(s8 arg0); static void sub_81C6DAC(u8 taskId, const struct YesNoFuncTable *yesNoTable); static void sub_81C6CEC(u8 windowId); static void sub_81C704C(u8 y); @@ -842,7 +842,7 @@ static void HandleMenuActionInput(u8 taskId) s8 id = GetMenuCursorPos(); if (gMain.newKeys & DPAD_UP) { - if (id > 0 && IsAValidMenuAction(id - 2)) + if (id > 0 && IsValidMenuAction(id - 2)) { PlaySE(SE_SELECT); sub_8199134(0, -1); @@ -850,7 +850,7 @@ static void HandleMenuActionInput(u8 taskId) } else if (gMain.newKeys & DPAD_DOWN) { - if (id < gPyramidBagResources->menuActionsCount - 2 && IsAValidMenuAction(id + 2)) + if (id < gPyramidBagResources->menuActionsCount - 2 && IsValidMenuAction(id + 2)) { PlaySE(SE_SELECT); sub_8199134(0, 1); @@ -858,7 +858,7 @@ static void HandleMenuActionInput(u8 taskId) } else if (gMain.newKeys & DPAD_LEFT || GetLRKeysState() == 1) { - if (id & 1 && IsAValidMenuAction(id - 1)) + if (id & 1 && IsValidMenuAction(id - 1)) { PlaySE(SE_SELECT); sub_8199134(-1, 0); @@ -866,7 +866,7 @@ static void HandleMenuActionInput(u8 taskId) } else if (gMain.newKeys & DPAD_RIGHT || GetLRKeysState() == 2) { - if (!(id & 1) && IsAValidMenuAction(id + 1)) + if (!(id & 1) && IsValidMenuAction(id + 1)) { PlaySE(SE_SELECT); sub_8199134(1, 0); @@ -886,7 +886,7 @@ static void HandleMenuActionInput(u8 taskId) } } -static bool8 IsAValidMenuAction(s8 actionTableId) +static bool8 IsValidMenuAction(s8 actionTableId) { if (actionTableId < 0) return FALSE; diff --git a/src/item.c b/src/item.c index 3866d7316..b4a2fd6f0 100644 --- a/src/item.c +++ b/src/item.c @@ -754,7 +754,7 @@ u16 BagGetQuantityByPocketPosition(u8 pocketId, u16 pocketPos) static void SwapItemSlots(struct ItemSlot *a, struct ItemSlot *b) { struct ItemSlot temp; - SWAP(*a, *b, temp); + SWAP(*a, *b, temp); } void CompactItemsInBagPocket(struct BagPocket *bagPocket) -- cgit v1.2.3