2018-05-02 01:47:11 +02:00
|
|
|
#include "global.h"
|
|
|
|
#include "gpu_regs.h"
|
|
|
|
#include "bg.h"
|
|
|
|
#include "malloc.h"
|
|
|
|
#include "constants/items.h"
|
2018-08-11 19:04:28 +02:00
|
|
|
#include "constants/event_objects.h"
|
2018-05-02 01:47:11 +02:00
|
|
|
#include "constants/moves.h"
|
|
|
|
#include "constants/songs.h"
|
|
|
|
#include "constants/species.h"
|
2018-05-09 01:00:23 +02:00
|
|
|
#include "constants/flags.h"
|
2018-05-02 01:47:11 +02:00
|
|
|
#include "battle.h"
|
|
|
|
#include "battle_anim.h"
|
|
|
|
#include "contest.h"
|
|
|
|
#include "data2.h"
|
|
|
|
#include "decompress.h"
|
|
|
|
#include "graphics.h"
|
|
|
|
#include "link.h"
|
|
|
|
#include "m4a.h"
|
|
|
|
#include "main.h"
|
|
|
|
#include "menu.h"
|
|
|
|
#include "overworld.h"
|
|
|
|
#include "palette.h"
|
|
|
|
#include "random.h"
|
|
|
|
#include "script.h"
|
|
|
|
#include "sound.h"
|
|
|
|
#include "sprite.h"
|
|
|
|
#include "string_util.h"
|
|
|
|
#include "task.h"
|
|
|
|
#include "text.h"
|
|
|
|
#include "tv.h"
|
|
|
|
#include "scanline_effect.h"
|
|
|
|
#include "util.h"
|
2018-05-02 14:43:27 +02:00
|
|
|
#include "contest_link_80F57C4.h"
|
2018-05-03 01:59:00 +02:00
|
|
|
#include "dma3.h"
|
2018-05-03 14:51:52 +02:00
|
|
|
#include "battle_message.h"
|
|
|
|
#include "event_scripts.h"
|
2018-05-09 01:00:23 +02:00
|
|
|
#include "event_data.h"
|
2018-05-03 14:51:52 +02:00
|
|
|
#include "strings.h"
|
|
|
|
#include "contest_effect.h"
|
2018-05-05 00:59:59 +02:00
|
|
|
#include "contest_link_80FC4F4.h"
|
2018-05-10 23:54:30 +02:00
|
|
|
#include "script_pokemon_util_80F87D8.h"
|
2018-05-11 00:16:58 +02:00
|
|
|
#include "international_string_util.h"
|
2018-05-11 01:28:52 +02:00
|
|
|
#include "data2.h"
|
2018-08-12 12:08:51 +02:00
|
|
|
#include "constants/rgb.h"
|
2018-05-02 03:27:24 +02:00
|
|
|
|
2018-05-08 02:49:23 +02:00
|
|
|
extern void (*gFieldCallback)(void);
|
|
|
|
|
2018-05-02 01:47:11 +02:00
|
|
|
void sub_80D782C(void);
|
2018-05-02 14:43:27 +02:00
|
|
|
void sub_80D7C7C(u8 taskId);
|
|
|
|
void sub_80D7CB4(u8 taskId);
|
|
|
|
void sub_80D7DAC(u8 taskId);
|
|
|
|
void sub_80D7DC8(u8 taskId);
|
|
|
|
void sub_80D7DE8(u8 taskId);
|
2018-05-03 01:59:00 +02:00
|
|
|
bool8 sub_80D7E44(u8 *);
|
2018-05-02 14:43:27 +02:00
|
|
|
void sub_80D80C8(u8 taskId);
|
2018-05-03 01:59:00 +02:00
|
|
|
void sub_80D8108(u8 taskId);
|
2018-05-03 14:51:52 +02:00
|
|
|
void vblank_cb_battle(void);
|
2018-05-02 14:43:27 +02:00
|
|
|
void sub_80D823C(void);
|
2018-05-03 14:51:52 +02:00
|
|
|
void sub_80D833C(u8 taskId);
|
2018-05-04 04:29:53 +02:00
|
|
|
void sub_80D8424(u8 taskId);
|
|
|
|
void sub_80D8610(u8 taskId);
|
|
|
|
void sub_80D8490(u8 taskId);
|
2018-05-04 03:01:22 +02:00
|
|
|
void sub_80D880C(s8);
|
|
|
|
void sub_80D883C(s8);
|
2018-05-04 04:29:53 +02:00
|
|
|
void sub_80D8894(u8 taskId);
|
|
|
|
void sub_80D892C(u8 taskId);
|
|
|
|
void sub_80D895C(u8 taskId);
|
|
|
|
void sub_80D8A04(u8 taskId);
|
|
|
|
void sub_80D8A50(u8 taskId);
|
|
|
|
void sub_80D8A88(u8 taskId);
|
|
|
|
void sub_80D8B38(u8 taskId);
|
2018-05-08 01:46:48 +02:00
|
|
|
void sub_80DA110(u8);
|
|
|
|
void sub_80DA134(struct Sprite *);
|
|
|
|
void sub_80DA164(struct Sprite *);
|
|
|
|
void sub_80DA198(u8);
|
|
|
|
void sub_80DA25C(u8);
|
|
|
|
void sub_80DA28C(u8);
|
|
|
|
void sub_80DA31C(u8);
|
|
|
|
void sub_80DA348(u8);
|
|
|
|
void sub_80DA38C(u8);
|
|
|
|
void sub_80DA3CC(u8);
|
|
|
|
void sub_80DA464(u8);
|
|
|
|
void sub_80DA49C(u8);
|
|
|
|
void sub_80DA4CC(u8);
|
|
|
|
void sub_80DA51C(u8);
|
2018-05-08 02:49:23 +02:00
|
|
|
void sub_80DA5B4(u8);
|
|
|
|
void sub_80DA5E8(u8);
|
|
|
|
void sub_80DA6B4(u8);
|
|
|
|
void sub_80DA700(u8);
|
|
|
|
void sub_80DA740(u8);
|
|
|
|
void sub_80DA7A0(u8);
|
|
|
|
void sub_80DA7EC(u8);
|
|
|
|
void sub_80DA830(u8);
|
|
|
|
void sub_80DA874(void);
|
2018-05-04 04:29:53 +02:00
|
|
|
bool8 sub_80DA8A4(void);
|
2018-05-11 00:16:58 +02:00
|
|
|
void sub_80DAF04(u8);
|
|
|
|
void sub_80DAF1C(u8 a0, u8 a1);
|
|
|
|
void sub_80DAF88(u8);
|
|
|
|
void sub_80DAFA0(u8, u8);
|
2018-05-03 01:59:00 +02:00
|
|
|
u8 sub_80DB0C4(void);
|
|
|
|
u8 sub_80DB120(void);
|
2018-05-11 01:28:52 +02:00
|
|
|
u8 sub_80DB174(u16, u32, u32, u32);
|
2018-05-03 01:59:00 +02:00
|
|
|
void sub_80DB2BC(void);
|
2018-05-11 14:44:21 +02:00
|
|
|
void prints_contest_move_description(u16);
|
|
|
|
u16 sub_80DE84C(u16);
|
2018-05-03 14:51:52 +02:00
|
|
|
void sub_80DB89C(void);
|
2018-05-04 04:29:53 +02:00
|
|
|
u16 sub_80DB8B8(u8);
|
|
|
|
void sub_80DB918(void);
|
2018-08-15 11:43:57 +02:00
|
|
|
bool8 Contest_IsMonsTurnDisabled(u8);
|
2018-05-02 14:43:27 +02:00
|
|
|
void sub_80DBF68(void);
|
2018-05-03 01:59:00 +02:00
|
|
|
void sub_80DBF90(void);
|
|
|
|
void sub_80DC2BC(void);
|
2018-05-03 14:51:52 +02:00
|
|
|
void sub_80DC490(bool8);
|
2018-05-03 01:59:00 +02:00
|
|
|
void sub_80DC4F0(void);
|
|
|
|
void sub_80DC594(void);
|
|
|
|
void sub_80DC5E8(void);
|
|
|
|
void sub_80DC7EC(void);
|
2018-05-03 14:51:52 +02:00
|
|
|
void sub_80DCD48(void);
|
2018-05-02 01:47:11 +02:00
|
|
|
void sub_80DCE58(u8);
|
2018-05-03 01:59:00 +02:00
|
|
|
void sub_80DD04C(void);
|
2018-05-02 14:43:27 +02:00
|
|
|
void sub_80DD590(void);
|
2018-05-03 14:51:52 +02:00
|
|
|
void sub_80DDB0C(void);
|
2018-05-04 04:29:53 +02:00
|
|
|
void sub_80DDBE8(void);
|
2018-05-03 14:51:52 +02:00
|
|
|
bool8 sub_80DE1E8(u8);
|
2018-05-02 03:27:24 +02:00
|
|
|
void sub_80DE224(void);
|
2018-05-03 14:51:52 +02:00
|
|
|
void sub_80DE350(void);
|
2018-05-11 00:16:58 +02:00
|
|
|
void sub_80DE424(u8);
|
2018-05-04 04:29:53 +02:00
|
|
|
void sub_80DE69C(u8);
|
2018-05-03 01:59:00 +02:00
|
|
|
void sub_80DEA20(void);
|
2018-05-11 16:51:38 +02:00
|
|
|
void Contest_PrintTextToBg0WindowAt(u32, u8 *, s32, u8, u8);
|
|
|
|
void Contest_StartTextPrinter(const u8 *, u8);
|
|
|
|
void ContestBG_FillBoxWithIncrementingTile(u8, u16, u8, u8, u8, u8, u8, u8);
|
|
|
|
bool32 Contest_RunTextPrinters(void);
|
|
|
|
void Contest_SetBgCopyFlags(u32);
|
2018-05-04 04:29:53 +02:00
|
|
|
void sub_80FC9F8(u8);
|
2018-05-04 03:01:22 +02:00
|
|
|
bool8 AreMovesContestCombo(u16, u16);
|
2018-05-08 02:49:23 +02:00
|
|
|
void sub_80DBD18(void);
|
|
|
|
void sub_80DF250(void);
|
|
|
|
void sub_80DF4F8(void);
|
2018-05-05 00:59:59 +02:00
|
|
|
void sub_80DD080(u8);
|
|
|
|
void sub_80DF080(u8);
|
|
|
|
void sub_80DF750(void);
|
|
|
|
void sub_80DE9DC(u8);
|
|
|
|
void sub_80DCBE8(u8, u8);
|
|
|
|
u8 sub_80DC9EC(u8);
|
|
|
|
u16 sub_80DE834(u16);
|
|
|
|
void sub_80DE864(u8);
|
|
|
|
void sub_80DEAA8(u16);
|
|
|
|
void sub_80DE9B0(u8);
|
|
|
|
void sub_80DC674(u8);
|
|
|
|
void sub_80DE12C(void);
|
|
|
|
void sub_80DD45C(u8, u8);
|
|
|
|
void sub_80DD720(u8);
|
|
|
|
void sub_80DE008(bool8);
|
|
|
|
void sub_80DC028(s16, s16, u8);
|
|
|
|
bool8 sub_80DB5B8(u8, u8);
|
|
|
|
bool8 sub_80DB798(u8);
|
|
|
|
void sub_80DB884(void);
|
|
|
|
void sub_80DC9B4(u8);
|
|
|
|
void sub_80DDED0(s8, s8);
|
|
|
|
void sub_80DDCDC(s8);
|
|
|
|
void sub_80DDE0C(void);
|
|
|
|
void sub_80DD940(void);
|
2018-05-08 01:46:48 +02:00
|
|
|
void sub_80DB944(void);
|
|
|
|
void sub_80DBA18(void);
|
|
|
|
void sub_80DC3AC(void);
|
|
|
|
bool8 sub_80DC3C4(void);
|
2018-05-09 01:00:23 +02:00
|
|
|
void sub_80DF9D4(u8 *);
|
|
|
|
void sub_80DF9E0(u8 *, s32);
|
2018-05-11 16:51:38 +02:00
|
|
|
void ContestBG_FillBoxWithTile(u8, u16, u8, u8, u8, u8, u8);
|
|
|
|
void Contest_PrintTextToBg0WindowStd(u8, const u8 *);
|
2018-05-05 00:59:59 +02:00
|
|
|
|
2018-05-02 01:47:11 +02:00
|
|
|
EWRAM_DATA struct ContestPokemon gContestMons[4] = {0};
|
2018-05-11 01:28:52 +02:00
|
|
|
EWRAM_DATA s16 gContestMonConditions[4] = {0};
|
2018-05-02 01:47:11 +02:00
|
|
|
EWRAM_DATA s16 gUnknown_02039F08[4] = {0};
|
|
|
|
EWRAM_DATA s16 gUnknown_02039F10[4] = {0};
|
|
|
|
EWRAM_DATA s16 gUnknown_02039F18[4] = {0};
|
|
|
|
EWRAM_DATA u8 gContestFinalStandings[4] = {0};
|
|
|
|
EWRAM_DATA u8 gUnknown_02039F24 = 0;
|
|
|
|
EWRAM_DATA u8 gContestPlayerMonIndex = 0;
|
|
|
|
EWRAM_DATA u8 gUnknown_02039F26[4] = {0};
|
2018-05-02 14:43:27 +02:00
|
|
|
EWRAM_DATA u8 gIsLinkContest = 0;
|
|
|
|
// Bit 0: Is a link contest
|
|
|
|
// Bit 1: Link contest uses wireless adapter
|
2018-05-02 01:47:11 +02:00
|
|
|
EWRAM_DATA u8 gUnknown_02039F2B = 0;
|
|
|
|
EWRAM_DATA u16 gSpecialVar_ContestCategory = 0;
|
|
|
|
EWRAM_DATA u16 gSpecialVar_ContestRank = 0;
|
2018-05-02 03:27:24 +02:00
|
|
|
EWRAM_DATA u8 gUnknown_02039F30 = 0;
|
|
|
|
EWRAM_DATA u8 gUnknown_02039F31 = 0;
|
|
|
|
EWRAM_DATA struct ContestResources * gContestResources = NULL;
|
2018-05-03 01:59:00 +02:00
|
|
|
EWRAM_DATA u8 sContestBgCopyFlags = 0;
|
2018-05-02 14:43:27 +02:00
|
|
|
EWRAM_DATA struct ContestWinner gUnknown_02039F3C = {0};
|
|
|
|
|
|
|
|
u32 gContestRngValue;
|
2018-05-02 01:47:11 +02:00
|
|
|
|
|
|
|
extern u16 gBattle_BG0_X;
|
|
|
|
extern u16 gBattle_BG0_Y;
|
|
|
|
extern u16 gBattle_BG1_X;
|
2018-05-03 01:59:00 +02:00
|
|
|
extern s16 gBattle_BG1_Y;
|
2018-05-02 01:47:11 +02:00
|
|
|
extern u16 gBattle_BG2_X;
|
|
|
|
extern u16 gBattle_BG2_Y;
|
|
|
|
extern u16 gBattle_BG3_X;
|
|
|
|
extern u16 gBattle_BG3_Y;
|
|
|
|
extern u16 gBattle_WIN0H;
|
|
|
|
extern u16 gBattle_WIN0V;
|
|
|
|
extern u16 gBattle_WIN1H;
|
|
|
|
extern u16 gBattle_WIN1V;
|
|
|
|
|
|
|
|
extern const u8 gContestMiscGfx[];
|
|
|
|
extern const u8 gContestAudienceGfx[];
|
|
|
|
extern const u8 gUnknown_08C16FA8[];
|
|
|
|
extern const u8 gUnknown_08C16E90[];
|
2018-05-03 01:59:00 +02:00
|
|
|
extern const u8 gUnknown_08C17170[];
|
|
|
|
extern const u16 gUnknown_08587C30[];
|
2018-05-02 01:47:11 +02:00
|
|
|
extern const struct BgTemplate gUnknown_08587F34[4];
|
|
|
|
extern const struct WindowTemplate gUnknown_08587F44[];
|
2018-05-08 01:46:48 +02:00
|
|
|
extern const u8 *const gUnknown_08587D90[];
|
2018-05-05 00:59:59 +02:00
|
|
|
extern const u8 *const gUnknown_08587F08[];
|
|
|
|
extern const u8 *const gUnknown_08587F1C[];
|
|
|
|
extern const u8 gText_0827D55A[];
|
|
|
|
extern const u8 gText_0827E793[];
|
|
|
|
extern const u8 gText_0827E32E[];
|
|
|
|
extern const u8 gText_0827E35B[];
|
|
|
|
extern const u8 gText_0827E38D[];
|
|
|
|
extern const u8 gText_0827E2FE[];
|
|
|
|
extern const u8 gText_0827E6E3[];
|
|
|
|
extern const u8 gText_0827E73C[];
|
|
|
|
extern const u8 gText_0827E717[];
|
|
|
|
extern const u8 gText_0827E76A[];
|
|
|
|
extern const u8 gText_0827E7EA[];
|
|
|
|
extern const u8 gText_0827E817[];
|
|
|
|
extern const u8 gText_0827E58A[];
|
|
|
|
extern const u8 gText_0827D56F[];
|
2018-05-08 02:49:23 +02:00
|
|
|
extern const u8 gText_0827D597[];
|
2018-05-09 01:00:23 +02:00
|
|
|
extern const struct ContestPokemon gContestOpponents[96];
|
|
|
|
extern const u8 gUnknown_085898A4[96];
|
2018-05-11 01:28:52 +02:00
|
|
|
extern const struct CompressedSpriteSheet gUnknown_08587C00;
|
|
|
|
extern const u8 gContest2Pal[];
|
|
|
|
extern const struct SpriteTemplate gSpriteTemplate_8587BE8;
|
|
|
|
extern const struct CompressedSpriteSheet gUnknown_08587C08;
|
|
|
|
extern const struct CompressedSpritePalette gUnknown_08587C10;
|
|
|
|
extern const struct SpriteTemplate gSpriteTemplate_8587C18;
|
|
|
|
extern const union AffineAnimCmd *const gUnknown_082FF6C0[];
|
|
|
|
extern const union AffineAnimCmd *const gUnknown_082FF694[];
|
2018-05-11 14:44:21 +02:00
|
|
|
extern const u8 *const gContestEffectDescriptionPointers[];
|
2018-05-05 00:59:59 +02:00
|
|
|
|
2018-05-02 01:47:11 +02:00
|
|
|
void TaskDummy1(u8 taskId)
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
void ResetLinkContestBoolean(void)
|
|
|
|
{
|
2018-05-02 14:43:27 +02:00
|
|
|
gIsLinkContest = 0;
|
2018-05-02 01:47:11 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80D7678(void)
|
|
|
|
{
|
|
|
|
u16 savedIme;
|
|
|
|
|
|
|
|
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP);
|
|
|
|
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
|
|
|
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
|
|
|
|
SetGpuReg(REG_OFFSET_BLDY, 0);
|
2018-08-12 12:08:51 +02:00
|
|
|
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG0 | WININ_WIN1_BG1 | WININ_WIN1_BG2 | WININ_WIN1_BG3 | WININ_WIN1_OBJ | WININ_WIN1_CLR);
|
|
|
|
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG0 | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG0 | WINOUT_WINOBJ_BG1 | WINOUT_WINOBJ_BG2 | WINOUT_WINOBJ_BG3 | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
|
2018-05-02 01:47:11 +02:00
|
|
|
SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON);
|
|
|
|
|
|
|
|
gBattle_BG0_X = 0;
|
|
|
|
gBattle_BG0_Y = 0;
|
|
|
|
gBattle_BG1_X = 0;
|
|
|
|
gBattle_BG1_Y = 0;
|
|
|
|
gBattle_BG2_X = 0;
|
|
|
|
gBattle_BG2_Y = 0;
|
|
|
|
gBattle_BG3_X = 0;
|
|
|
|
gBattle_BG3_Y = 0;
|
|
|
|
gBattle_WIN0H = 0;
|
|
|
|
gBattle_WIN0V = 0;
|
|
|
|
gBattle_WIN1H = 0;
|
|
|
|
gBattle_WIN1V = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void LoadContestBgAfterMoveAnim(void)
|
|
|
|
{
|
|
|
|
s32 i;
|
|
|
|
|
|
|
|
LZDecompressVram(gContestMiscGfx, (void *)VRAM);
|
|
|
|
LZDecompressVram(gContestAudienceGfx, (void *)(VRAM + 0x2000));
|
|
|
|
CopyToBgTilemapBuffer(3, gUnknown_08C16FA8, 0, 0);
|
|
|
|
CopyBgTilemapBufferToVram(3);
|
|
|
|
LoadCompressedPalette(gUnknown_08C16E90, 0, 0x200);
|
|
|
|
sub_80D782C();
|
|
|
|
for (i = 0; i < 4; i++)
|
|
|
|
{
|
|
|
|
u32 var = 5 + i;
|
|
|
|
|
|
|
|
LoadPalette(shared18000.unk18004[var], 16 * (5 + gUnknown_02039F26[i]), 16 * sizeof(u16));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80D779C(void)
|
|
|
|
{
|
|
|
|
s32 i;
|
|
|
|
|
|
|
|
ResetBgsAndClearDma3BusyFlags(0);
|
|
|
|
InitBgsFromTemplates(0, gUnknown_08587F34, ARRAY_COUNT(gUnknown_08587F34));
|
|
|
|
SetBgAttribute(3, BG_CTRL_ATTR_PRIORITY, 1);
|
|
|
|
for (i = 0; i < 4; i++)
|
|
|
|
{
|
|
|
|
SetBgTilemapBuffer(i, gContestResources->field_24[i]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80D77E4(void)
|
|
|
|
{
|
|
|
|
InitWindows(gUnknown_08587F44);
|
|
|
|
DeactivateAllTextPrinters();
|
|
|
|
if (gIsLinkContest & 1)
|
|
|
|
{
|
|
|
|
gTextFlags.flag_0 = FALSE;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gTextFlags.flag_0 = TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80D782C(void)
|
|
|
|
{
|
|
|
|
s32 i;
|
|
|
|
|
|
|
|
LoadPalette(gUnknown_08587C30, 0xf0, 0x20);
|
2018-08-12 12:08:51 +02:00
|
|
|
FillPalette(RGB_BLACK, 0, 2);
|
2018-05-02 01:47:11 +02:00
|
|
|
for (i = 10; i < 14; i++)
|
|
|
|
LoadPalette(gPlttBufferUnfaded + 241, 240 + i, 2);
|
2018-08-12 12:08:51 +02:00
|
|
|
FillPalette(RGB(31, 17, 31), 0xF3, 2);
|
2018-05-02 01:47:11 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80D787C(void)
|
|
|
|
{
|
|
|
|
s32 i;
|
|
|
|
|
|
|
|
*gContestResources->field_0 = (struct Contest){};
|
|
|
|
for (i = 0; i < 4; i++)
|
|
|
|
{
|
|
|
|
gContestResources->field_0->unk19206[i] = 0xFF;
|
|
|
|
}
|
|
|
|
for (i = 0; i < 4; i++)
|
|
|
|
{
|
|
|
|
gContestResources->field_4[i] = (struct ContestantStatus){};
|
|
|
|
}
|
|
|
|
for (i = 0; i < 4; i++)
|
|
|
|
{
|
|
|
|
gContestResources->field_4[i].unkB_0 = 0;
|
|
|
|
gContestResources->field_4[i].effectStringId = CONTEST_STRING_NONE;
|
|
|
|
gContestResources->field_4[i].effectStringId2 = CONTEST_STRING_NONE;
|
|
|
|
}
|
|
|
|
*gContestResources->field_8 = (struct UnknownContestStruct7){};
|
|
|
|
*gContestResources->field_C = (struct ContestAIInfo){};
|
|
|
|
*gContestResources->field_10 = (struct UnknownContestStruct5){};
|
|
|
|
memset(gContestResources->field_14, 0, 4 * sizeof(struct UnknownContestStruct4));
|
|
|
|
if (!(gIsLinkContest & 1))
|
|
|
|
sub_80DCE58(0);
|
|
|
|
for (i = 0; i < 4; i++)
|
|
|
|
{
|
|
|
|
gContestResources->field_4[i].nextTurnOrder = 0xFF;
|
|
|
|
gContestResources->field_0->unk19218[i] = gUnknown_02039F26[i];
|
|
|
|
}
|
|
|
|
sub_80DD590();
|
|
|
|
*gContestResources->field_1c = (struct ContestResourcesField1C){};
|
|
|
|
}
|
2018-05-02 03:27:24 +02:00
|
|
|
|
|
|
|
void sub_80D7988(void)
|
|
|
|
{
|
|
|
|
gContestResources = AllocZeroed(sizeof(struct ContestResources));
|
|
|
|
gContestResources->field_0 = AllocZeroed(sizeof(struct Contest));
|
|
|
|
gContestResources->field_4 = AllocZeroed(sizeof(struct ContestantStatus) * 4);
|
|
|
|
gContestResources->field_8 = AllocZeroed(sizeof(struct UnknownContestStruct7));
|
|
|
|
gContestResources->field_C = AllocZeroed(sizeof(struct ContestAIInfo));
|
|
|
|
gContestResources->field_10 = AllocZeroed(sizeof(struct UnknownContestStruct5) * 4);
|
|
|
|
gContestResources->field_14 = AllocZeroed(sizeof(struct UnknownContestStruct4) * 4);
|
|
|
|
gContestResources->field_18 = AllocZeroed(sizeof(struct ContestStruct_field_18));
|
|
|
|
gContestResources->field_1c = AllocZeroed(sizeof(struct ContestResourcesField1C));
|
|
|
|
gContestResources->field_20 = AllocZeroed(sizeof(struct ContestResourcesField20));
|
|
|
|
gContestResources->field_24[0] = AllocZeroed(0x1000);
|
|
|
|
gContestResources->field_24[1] = AllocZeroed(0x1000);
|
|
|
|
gContestResources->field_24[2] = AllocZeroed(0x1000);
|
|
|
|
gContestResources->field_24[3] = AllocZeroed(0x1000);
|
|
|
|
gContestResources->field_34 = AllocZeroed(0x800);
|
|
|
|
gContestResources->field_38 = AllocZeroed(0x800);
|
|
|
|
gContestResources->field_3c = AllocZeroed(0x2000);
|
|
|
|
gUnknown_0202305C = gContestResources->field_3c;
|
|
|
|
gUnknown_02023060 = gContestResources->field_24[1];
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80D7A5C(void)
|
|
|
|
{
|
2018-08-12 12:08:51 +02:00
|
|
|
FREE_AND_SET_NULL(gContestResources->field_0);
|
|
|
|
FREE_AND_SET_NULL(gContestResources->field_4);
|
|
|
|
FREE_AND_SET_NULL(gContestResources->field_8);
|
|
|
|
FREE_AND_SET_NULL(gContestResources->field_C);
|
|
|
|
FREE_AND_SET_NULL(gContestResources->field_10);
|
|
|
|
FREE_AND_SET_NULL(gContestResources->field_14);
|
|
|
|
FREE_AND_SET_NULL(gContestResources->field_18);
|
|
|
|
FREE_AND_SET_NULL(gContestResources->field_1c);
|
|
|
|
FREE_AND_SET_NULL(gContestResources->field_20);
|
|
|
|
FREE_AND_SET_NULL(gContestResources->field_24[0]);
|
|
|
|
FREE_AND_SET_NULL(gContestResources->field_24[1]);
|
|
|
|
FREE_AND_SET_NULL(gContestResources->field_24[2]);
|
|
|
|
FREE_AND_SET_NULL(gContestResources->field_24[3]);
|
|
|
|
FREE_AND_SET_NULL(gContestResources->field_34);
|
|
|
|
FREE_AND_SET_NULL(gContestResources->field_38);
|
|
|
|
FREE_AND_SET_NULL(gContestResources->field_3c);
|
|
|
|
FREE_AND_SET_NULL(gContestResources);
|
2018-05-02 03:27:24 +02:00
|
|
|
gUnknown_0202305C = NULL;
|
|
|
|
gUnknown_02023060 = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80D7B24(void)
|
|
|
|
{
|
|
|
|
switch (gMain.state)
|
|
|
|
{
|
|
|
|
case 0:
|
2018-05-03 01:59:00 +02:00
|
|
|
sContestBgCopyFlags = 0;
|
2018-05-02 03:27:24 +02:00
|
|
|
sub_80D7988();
|
|
|
|
AllocateMonSpritesGfx();
|
2018-08-12 12:08:51 +02:00
|
|
|
FREE_AND_SET_NULL(gMonSpritesGfxPtr->firstDecompressed);
|
2018-05-02 03:27:24 +02:00
|
|
|
gMonSpritesGfxPtr->firstDecompressed = AllocZeroed(0x4000);
|
|
|
|
SetVBlankCallback(NULL);
|
|
|
|
sub_80D779C();
|
|
|
|
sub_80D77E4();
|
|
|
|
sub_80D7678();
|
|
|
|
ScanlineEffect_Clear();
|
|
|
|
ResetPaletteFade();
|
|
|
|
gPaletteFade.bufferTransferDisabled = TRUE;
|
|
|
|
ResetSpriteData();
|
|
|
|
ResetTasks();
|
|
|
|
FreeAllSpritePalettes();
|
|
|
|
gReservedSpritePaletteCount = 4;
|
|
|
|
//shared18000.unk18000 = 0;
|
|
|
|
gHeap[0x1a000] = 0;
|
|
|
|
ClearBattleMonForms();
|
|
|
|
sub_80D787C();
|
|
|
|
gMain.state++;
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
gMain.state++;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
if (sub_80D7E44(&gContestResources->field_0->unk1925D))
|
|
|
|
{
|
|
|
|
gContestResources->field_0->unk1925D = 0;
|
|
|
|
gMain.state++;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
sub_80DE224();
|
|
|
|
gBattle_BG1_X = 0;
|
|
|
|
gBattle_BG1_Y = 0;
|
|
|
|
BeginFastPaletteFade(2);
|
|
|
|
gPaletteFade.bufferTransferDisabled = FALSE;
|
|
|
|
SetVBlankCallback(vblank_cb_battle);
|
|
|
|
gContestResources->field_0->mainTaskId = CreateTask(sub_80D7C7C, 10);
|
|
|
|
SetMainCallback2(sub_80D823C);
|
|
|
|
if (gIsLinkContest & 2)
|
|
|
|
{
|
|
|
|
sub_800E0E8();
|
|
|
|
CreateWirelessStatusIndicatorSprite(8, 8);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-05-02 14:43:27 +02:00
|
|
|
void sub_80D7C7C(u8 taskId)
|
|
|
|
{
|
|
|
|
if (!gPaletteFade.active)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[0] = 0;
|
|
|
|
gTasks[taskId].func = sub_80D7CB4;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80D7CB4(u8 taskId)
|
|
|
|
{
|
|
|
|
if (gIsLinkContest & 1)
|
|
|
|
{
|
|
|
|
if (gIsLinkContest & 2)
|
|
|
|
{
|
|
|
|
switch (gTasks[taskId].data[0])
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
sub_80DBF68();
|
|
|
|
gTasks[taskId].data[0]++;
|
|
|
|
// fallthrough
|
|
|
|
case 1:
|
|
|
|
if (sub_800A520())
|
|
|
|
{
|
|
|
|
sub_800ADF8();
|
|
|
|
gTasks[taskId].data[0]++;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 2:
|
|
|
|
if (sub_800A520() != TRUE)
|
|
|
|
return;
|
|
|
|
gTasks[taskId].data[0]++;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!gPaletteFade.active)
|
|
|
|
{
|
|
|
|
gPaletteFade.bufferTransferDisabled = FALSE;
|
|
|
|
if (!(gIsLinkContest & 2))
|
|
|
|
sub_80DBF68();
|
|
|
|
CreateTask(sub_80D7DAC, 0);
|
|
|
|
gTasks[taskId].data[0] = 0;
|
|
|
|
gTasks[taskId].func = TaskDummy1;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gTasks[taskId].func = sub_80D80C8;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80D7DAC(u8 taskId)
|
|
|
|
{
|
|
|
|
SetTaskFuncWithFollowupFunc(taskId, sub_80FC998, sub_80D7DC8);
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80D7DC8(u8 taskId)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[0] = 1;
|
|
|
|
gTasks[taskId].func = sub_80D7DE8;
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80D7DE8(u8 taskId)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[0]--;
|
|
|
|
if (gTasks[taskId].data[0] <= 0)
|
|
|
|
{
|
|
|
|
GetMultiplayerId(); // unused return value
|
|
|
|
DestroyTask(taskId);
|
|
|
|
gTasks[gContestResources->field_0->mainTaskId].func = sub_80D80C8;
|
|
|
|
gRngValue = gContestRngValue;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-05-03 01:59:00 +02:00
|
|
|
u8 sub_80D7E44(u8 *a)
|
|
|
|
{
|
|
|
|
u16 sp0[16];
|
|
|
|
u16 sp20[16];
|
|
|
|
|
|
|
|
switch (*a)
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
gPaletteFade.bufferTransferDisabled = TRUE;
|
|
|
|
RequestDma3Fill(0, (void *)VRAM, 0x8000, 1);
|
|
|
|
RequestDma3Fill(0, (void *)VRAM + 0x8000, 0x8000, 1);
|
|
|
|
RequestDma3Fill(0, (void *)VRAM + 0x10000, 0x8000, 1);
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
LZDecompressVram(gContestMiscGfx, (void *)VRAM);
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
LZDecompressVram(gContestAudienceGfx, (void *)(VRAM + 0x2000));
|
|
|
|
DmaCopyLarge32(3, (void *)(VRAM + 0x2000), shared15800, 0x2000, 0x1000);
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
CopyToBgTilemapBuffer(3, gUnknown_08C16FA8, 0, 0);
|
|
|
|
CopyBgTilemapBufferToVram(3);
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
CopyToBgTilemapBuffer(2, gUnknown_08C17170, 0, 0);
|
|
|
|
CopyBgTilemapBufferToVram(2);
|
|
|
|
DmaCopy32Defvars(3, gContestResources->field_24[2], shared18000.unk18A04, 0x800);
|
|
|
|
break;
|
|
|
|
case 5:
|
|
|
|
LoadCompressedPalette(gUnknown_08C16E90, 0, 0x200);
|
|
|
|
CpuCopy32(gPlttBufferUnfaded + 128, sp0, 16 * sizeof(u16));
|
|
|
|
CpuCopy32(gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, sp20, 16 * sizeof(u16));
|
|
|
|
CpuCopy32(sp20, gPlttBufferUnfaded + 128, 16 * sizeof(u16));
|
|
|
|
CpuCopy32(sp0, gPlttBufferUnfaded + (5 + gContestPlayerMonIndex) * 16, 16 * sizeof(u16));
|
|
|
|
DmaCopy32Defvars(3, gPlttBufferUnfaded, shared18000.unk18004, 0x200);
|
|
|
|
sub_80D782C();
|
|
|
|
break;
|
|
|
|
case 6:
|
|
|
|
sub_80DD04C();
|
|
|
|
sub_80DBF90();
|
|
|
|
sub_80DB2BC();
|
|
|
|
gContestResources->field_0->unk19216 = sub_80DB120();
|
|
|
|
sub_80DC2BC();
|
|
|
|
sub_80DC4F0();
|
|
|
|
sub_80DC594();
|
|
|
|
sub_80DC5E8();
|
|
|
|
sub_80DC7EC();
|
|
|
|
gBattlerPositions[0] = 0;
|
|
|
|
gBattlerPositions[1] = 1;
|
|
|
|
gBattlerPositions[2] = 3;
|
|
|
|
gBattlerPositions[3] = 2;
|
|
|
|
gBattleTypeFlags = 0;
|
|
|
|
gBattlerAttacker = 2;
|
|
|
|
gBattlerTarget = 3;
|
|
|
|
gBattlerSpriteIds[gBattlerAttacker] = sub_80DB0C4();
|
|
|
|
sub_80DEA20();
|
|
|
|
CopyBgTilemapBufferToVram(3);
|
|
|
|
CopyBgTilemapBufferToVram(2);
|
|
|
|
CopyBgTilemapBufferToVram(1);
|
|
|
|
ShowBg(3);
|
|
|
|
ShowBg(2);
|
|
|
|
ShowBg(0);
|
|
|
|
ShowBg(1);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
*a = 0;
|
|
|
|
return 1;
|
|
|
|
}
|
|
|
|
|
|
|
|
(*a)++;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80D80C8(u8 taskId)
|
|
|
|
{
|
|
|
|
gPaletteFade.bufferTransferDisabled = FALSE;
|
|
|
|
if (!gPaletteFade.active)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[0] = 0;
|
|
|
|
gTasks[taskId].data[1] = 0;
|
|
|
|
gTasks[taskId].func = sub_80D8108;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void sub_80D8108(u8 taskId)
|
|
|
|
{
|
|
|
|
switch (gTasks[taskId].data[0])
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
if (gTasks[taskId].data[1]++ <= 60)
|
|
|
|
break;
|
|
|
|
gTasks[taskId].data[1] = 0;
|
|
|
|
PlaySE12WithPanning(SE_C_MAKU_U, 0);
|
|
|
|
gTasks[taskId].data[0]++;
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
if ((gBattle_BG1_Y += 7) <= 160)
|
|
|
|
break;
|
|
|
|
gTasks[taskId].data[0]++;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
sub_80DE350();
|
|
|
|
gTasks[taskId].data[0]++;
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
{
|
|
|
|
u16 bg0Cnt = GetGpuReg(REG_OFFSET_BG0CNT);
|
|
|
|
u16 bg2Cnt = GetGpuReg(REG_OFFSET_BG2CNT);
|
|
|
|
((struct BgCnt *)&bg0Cnt)->priority = 0;
|
|
|
|
((struct BgCnt *)&bg2Cnt)->priority = 0;
|
|
|
|
SetGpuReg(REG_OFFSET_BG0CNT, bg0Cnt);
|
|
|
|
SetGpuReg(REG_OFFSET_BG2CNT, bg2Cnt);
|
|
|
|
sub_80DDB0C();
|
|
|
|
gTasks[taskId].data[0]++;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case 4:
|
|
|
|
default:
|
|
|
|
if (gContestResources->field_0->unk1920A_6)
|
|
|
|
break;
|
|
|
|
gTasks[taskId].data[0] = 0;
|
|
|
|
gTasks[taskId].data[1] = 0;
|
|
|
|
gTasks[taskId].func = sub_80D833C;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80D823C(void)
|
|
|
|
{
|
|
|
|
s32 i;
|
|
|
|
|
|
|
|
AnimateSprites();
|
|
|
|
RunTasks();
|
|
|
|
BuildOamBuffer();
|
|
|
|
UpdatePaletteFade();
|
|
|
|
|
|
|
|
for (i = 0; i < 4; i++)
|
|
|
|
{
|
|
|
|
if ((sContestBgCopyFlags >> i) & 1)
|
|
|
|
CopyBgTilemapBufferToVram(i);
|
|
|
|
}
|
|
|
|
sContestBgCopyFlags = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void vblank_cb_battle(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);
|
|
|
|
SetGpuReg(REG_OFFSET_BG2HOFS, gBattle_BG2_X);
|
|
|
|
SetGpuReg(REG_OFFSET_BG2VOFS, gBattle_BG2_Y);
|
|
|
|
SetGpuReg(REG_OFFSET_BG3HOFS, gBattle_BG3_X);
|
|
|
|
SetGpuReg(REG_OFFSET_BG3VOFS, gBattle_BG3_Y);
|
|
|
|
SetGpuReg(REG_OFFSET_WIN0H, gBattle_WIN0H);
|
|
|
|
SetGpuReg(REG_OFFSET_WIN0V, gBattle_WIN0V);
|
|
|
|
SetGpuReg(REG_OFFSET_WIN1H, gBattle_WIN1H);
|
|
|
|
SetGpuReg(REG_OFFSET_WIN1V, gBattle_WIN1V);
|
|
|
|
TransferPlttBuffer();
|
|
|
|
LoadOam();
|
|
|
|
ProcessSpriteCopyRequests();
|
|
|
|
ScanlineEffect_InitHBlankDmaTransfer();
|
|
|
|
}
|
2018-05-03 14:51:52 +02:00
|
|
|
|
|
|
|
void sub_80D833C(u8 taskId)
|
|
|
|
{
|
|
|
|
if (gTasks[taskId].data[0] == 0)
|
|
|
|
{
|
|
|
|
gBattle_BG0_Y = 0;
|
|
|
|
gBattle_BG2_Y = 0;
|
|
|
|
sub_80DCD48();
|
|
|
|
DmaCopy32Defvars(3, gPlttBufferUnfaded, shared18000.unk18204, 0x400);
|
|
|
|
ConvertIntToDecimalStringN(gStringVar1, gContestResources->field_0->turnNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1);
|
2018-08-15 11:43:57 +02:00
|
|
|
if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex))
|
2018-05-03 14:51:52 +02:00
|
|
|
StringCopy(gDisplayedStringBattle, gText_0827D507);
|
|
|
|
else
|
|
|
|
StringCopy(gDisplayedStringBattle, gText_0827D531);
|
|
|
|
sub_80DB89C();
|
|
|
|
StringExpandPlaceholders(gStringVar4, gDisplayedStringBattle);
|
2018-05-11 16:51:38 +02:00
|
|
|
Contest_StartTextPrinter(gStringVar4, 1);
|
2018-05-03 14:51:52 +02:00
|
|
|
gTasks[taskId].data[0]++;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2018-05-11 16:51:38 +02:00
|
|
|
if (!Contest_RunTextPrinters())
|
2018-05-03 14:51:52 +02:00
|
|
|
{
|
|
|
|
gTasks[taskId].data[0] = 0;
|
|
|
|
gTasks[taskId].func = sub_80D8424;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80D8424(u8 taskId)
|
|
|
|
{
|
|
|
|
if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys == B_BUTTON))
|
|
|
|
{
|
|
|
|
PlaySE(SE_SELECT);
|
2018-08-15 11:43:57 +02:00
|
|
|
if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex))
|
2018-05-03 14:51:52 +02:00
|
|
|
{
|
|
|
|
sub_80DC490(TRUE);
|
|
|
|
gTasks[taskId].func = sub_80D8490;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gTasks[taskId].func = sub_80D8894;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80D8490(u8 taskId)
|
|
|
|
{
|
|
|
|
u8 i;
|
|
|
|
u8 sp8[32];
|
|
|
|
|
|
|
|
gBattle_BG0_Y = 0xA0;
|
|
|
|
gBattle_BG2_Y = 0xA0;
|
|
|
|
|
|
|
|
for (i = 0; i < 4; i++)
|
|
|
|
{
|
|
|
|
u16 move = gContestMons[gContestPlayerMonIndex].moves[i];
|
|
|
|
u8 *r5 = sp8;
|
|
|
|
|
|
|
|
if (gContestResources->field_4[gContestPlayerMonIndex].prevMove != MOVE_NONE
|
|
|
|
&& sub_80DE1E8(gContestPlayerMonIndex)
|
|
|
|
&& AreMovesContestCombo(gContestResources->field_4[gContestPlayerMonIndex].prevMove, move) != 0
|
|
|
|
&& gContestResources->field_4[gContestPlayerMonIndex].hasJudgesAttention)
|
|
|
|
{
|
|
|
|
r5 = StringCopy(sp8, gText_ColorLightShadowDarkGrey);
|
|
|
|
}
|
|
|
|
else if (move != 0
|
|
|
|
&& gContestResources->field_4[gContestPlayerMonIndex].prevMove == move
|
|
|
|
&& gContestMoves[move].effect != CONTEST_EFFECT_REPETITION_NOT_BORING)
|
|
|
|
{
|
|
|
|
// Gray the text because it is a repeated move
|
|
|
|
r5 = StringCopy(sp8, gText_ColorBlue);
|
|
|
|
}
|
|
|
|
r5 = StringCopy(r5, gMoveNames[move]);
|
|
|
|
|
|
|
|
FillWindowPixelBuffer(i + 5, 0);
|
2018-05-11 16:51:38 +02:00
|
|
|
Contest_PrintTextToBg0WindowAt(i + 5, sp8, 5, 1, 7);
|
2018-05-03 14:51:52 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
sub_80D880C(gContestResources->field_0->playerMoveChoice);
|
|
|
|
prints_contest_move_description(gContestMons[gContestPlayerMonIndex].moves[gContestResources->field_0->playerMoveChoice]);
|
|
|
|
gTasks[taskId].func = sub_80D8610;
|
|
|
|
}
|
2018-05-04 03:01:22 +02:00
|
|
|
|
|
|
|
void sub_80D8610(u8 taskId)
|
|
|
|
{
|
|
|
|
u8 numMoves = 0;
|
|
|
|
s32 i;
|
|
|
|
|
|
|
|
for (i = 0; i < 4; i++)
|
|
|
|
{
|
|
|
|
if (gContestMons[gContestPlayerMonIndex].moves[i] != MOVE_NONE)
|
|
|
|
numMoves++;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (gMain.newKeys & A_BUTTON)
|
|
|
|
{
|
|
|
|
PlaySE(SE_SELECT);
|
|
|
|
gTasks[taskId].func = sub_80D8894;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
switch (gMain.newAndRepeatedKeys)
|
|
|
|
{
|
|
|
|
case B_BUTTON:
|
|
|
|
PlaySE(SE_SELECT);
|
|
|
|
sub_80DC490(FALSE);
|
|
|
|
ConvertIntToDecimalStringN(gStringVar1, gContestResources->field_0->turnNumber + 1, STR_CONV_MODE_LEFT_ALIGN, 1);
|
2018-08-15 11:43:57 +02:00
|
|
|
if (!Contest_IsMonsTurnDisabled(gContestPlayerMonIndex))
|
2018-05-04 03:01:22 +02:00
|
|
|
StringCopy(gDisplayedStringBattle, gText_0827D507);
|
|
|
|
else
|
|
|
|
StringCopy(gDisplayedStringBattle, gText_0827D531);
|
|
|
|
sub_80DB89C();
|
|
|
|
StringExpandPlaceholders(gStringVar4, gDisplayedStringBattle);
|
2018-05-11 16:51:38 +02:00
|
|
|
Contest_StartTextPrinter(gStringVar4, 0);
|
2018-05-04 03:01:22 +02:00
|
|
|
gBattle_BG0_Y = 0;
|
|
|
|
gBattle_BG2_Y = 0;
|
|
|
|
gTasks[taskId].func = sub_80D8424;
|
|
|
|
break;
|
|
|
|
case DPAD_LEFT:
|
|
|
|
case DPAD_RIGHT:
|
|
|
|
break;
|
|
|
|
case DPAD_UP:
|
|
|
|
sub_80D883C(gContestResources->field_0->playerMoveChoice);
|
|
|
|
if (gContestResources->field_0->playerMoveChoice == 0)
|
|
|
|
gContestResources->field_0->playerMoveChoice = numMoves - 1;
|
|
|
|
else
|
|
|
|
gContestResources->field_0->playerMoveChoice--;
|
|
|
|
sub_80D880C(gContestResources->field_0->playerMoveChoice);
|
|
|
|
prints_contest_move_description(gContestMons[gContestPlayerMonIndex].moves[gContestResources->field_0->playerMoveChoice]);
|
|
|
|
if (numMoves > 1)
|
|
|
|
PlaySE(SE_SELECT);
|
|
|
|
break;
|
|
|
|
case DPAD_DOWN:
|
|
|
|
sub_80D883C(gContestResources->field_0->playerMoveChoice);
|
|
|
|
if (gContestResources->field_0->playerMoveChoice == numMoves - 1)
|
|
|
|
gContestResources->field_0->playerMoveChoice = 0;
|
|
|
|
else
|
|
|
|
gContestResources->field_0->playerMoveChoice++;
|
|
|
|
sub_80D880C(gContestResources->field_0->playerMoveChoice);
|
|
|
|
prints_contest_move_description(gContestMons[gContestPlayerMonIndex].moves[gContestResources->field_0->playerMoveChoice]);
|
|
|
|
if (numMoves > 1)
|
|
|
|
PlaySE(SE_SELECT);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80D880C(s8 a0)
|
|
|
|
{
|
2018-05-11 16:51:38 +02:00
|
|
|
ContestBG_FillBoxWithIncrementingTile(2, 55, 0, 31 + a0 * 2, 2, 2, 17, 1);
|
2018-05-04 03:01:22 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80D883C(s8 a0)
|
|
|
|
{
|
2018-05-11 16:51:38 +02:00
|
|
|
ContestBG_FillBoxWithIncrementingTile(2, 11, 0, 31 + a0 * 2, 2, 1, 17, 1);
|
|
|
|
ContestBG_FillBoxWithIncrementingTile(2, 11, 0, 32 + a0 * 2, 2, 1, 17, 1);
|
2018-05-04 03:01:22 +02:00
|
|
|
}
|
2018-05-04 04:29:53 +02:00
|
|
|
|
|
|
|
void sub_80D8894(u8 taskId)
|
|
|
|
{
|
|
|
|
if (gIsLinkContest & 1)
|
|
|
|
{
|
|
|
|
u16 var = sub_80DB8B8(gContestPlayerMonIndex);
|
|
|
|
u8 taskId2;
|
|
|
|
|
|
|
|
gContestResources->field_4[gContestPlayerMonIndex].currMove = var;
|
|
|
|
taskId2 = CreateTask(sub_80FC9F8, 0);
|
|
|
|
SetTaskFuncWithFollowupFunc(taskId2, sub_80FC9F8, sub_80D892C);
|
|
|
|
gTasks[taskId].func = TaskDummy1;
|
|
|
|
sub_80DBF68();
|
|
|
|
sub_80DC490(FALSE);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sub_80DB918();
|
|
|
|
gTasks[taskId].func = sub_80D895C;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80D892C(u8 taskId)
|
|
|
|
{
|
|
|
|
DestroyTask(taskId);
|
|
|
|
gTasks[gContestResources->field_0->mainTaskId].func = sub_80D895C;
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80D895C(u8 taskId)
|
|
|
|
{
|
|
|
|
s32 i;
|
|
|
|
|
|
|
|
sub_80DB89C();
|
|
|
|
gBattle_BG0_Y = 0;
|
|
|
|
gBattle_BG2_Y = 0;
|
|
|
|
sub_80DC490(FALSE);
|
|
|
|
|
|
|
|
for (i = 0; i < 4; i++)
|
|
|
|
{
|
|
|
|
FillWindowPixelBuffer(5 + i, 0);
|
|
|
|
PutWindowTilemap(5 + i);
|
|
|
|
CopyWindowToVram(5 + i, 2);
|
|
|
|
}
|
2018-05-11 16:51:38 +02:00
|
|
|
Contest_SetBgCopyFlags(0);
|
2018-05-04 04:29:53 +02:00
|
|
|
|
|
|
|
DmaCopy32Defvars(3, gPlttBufferFaded, shared18000.unk18604, 0x400);
|
|
|
|
LoadPalette(shared18000.unk18204, 0, 0x400);
|
|
|
|
gTasks[taskId].data[0] = 0;
|
|
|
|
gTasks[taskId].data[1] = 0;
|
|
|
|
gTasks[taskId].func = sub_80D8A04;
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80D8A04(u8 taskId)
|
|
|
|
{
|
|
|
|
if (++gTasks[taskId].data[0] > 2)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[0] = 0;
|
|
|
|
if (++gTasks[taskId].data[1] == 2)
|
|
|
|
{
|
|
|
|
sub_80DDBE8();
|
|
|
|
sub_80DE69C(1);
|
|
|
|
gTasks[taskId].func = sub_80D8A50;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80D8A50(u8 taskId)
|
|
|
|
{
|
|
|
|
if (!gContestResources->field_0->unk1920A_6 && !gContestResources->field_0->unk1920B_1)
|
|
|
|
gTasks[taskId].func = sub_80D8A88;
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80D8A88(u8 taskId)
|
|
|
|
{
|
|
|
|
if (++gTasks[taskId].data[0] > 19)
|
|
|
|
{
|
|
|
|
gContestResources->field_0->unk19214 = 0;
|
|
|
|
gContestResources->field_0->unk1921C = gRngValue;
|
|
|
|
if ((gIsLinkContest & 1) && sub_80DA8A4())
|
|
|
|
{
|
|
|
|
s32 i;
|
|
|
|
|
|
|
|
for (i = 0; i + gUnknown_02039F30 < 4; i++)
|
|
|
|
{
|
|
|
|
gContestResources->field_4[gUnknown_02039F30 + i].currMove = sub_80DB8B8(gUnknown_02039F30 + i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
gTasks[taskId].data[0] = 0;
|
|
|
|
gTasks[taskId].func = sub_80D8B38;
|
|
|
|
}
|
|
|
|
}
|
2018-05-05 00:59:59 +02:00
|
|
|
|
|
|
|
void sub_80D8B38(u8 taskId)
|
|
|
|
{
|
|
|
|
u8 spriteId;
|
|
|
|
s32 i;
|
|
|
|
u8 r6 = gContestResources->field_0->unk19215;
|
|
|
|
s8 r3;
|
|
|
|
|
|
|
|
switch (gTasks[taskId].data[0])
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
sub_80DCD48();
|
|
|
|
for (i = 0; gContestResources->field_0->unk19214 != gContestResources->field_8->turnOrder[i]; i++)
|
|
|
|
;
|
|
|
|
gContestResources->field_0->unk19215 = i;
|
|
|
|
r6 = gContestResources->field_0->unk19215;
|
|
|
|
if (gIsLinkContest & 1)
|
|
|
|
{
|
|
|
|
u8 taskId2;
|
|
|
|
|
|
|
|
gContestResources->field_0->unk1920B_2 = 1;
|
|
|
|
if (sub_80DA8A4())
|
|
|
|
sub_80DD080(gContestResources->field_0->unk19215);
|
|
|
|
taskId2 = CreateTask(sub_80FCC88, 0);
|
|
|
|
SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, sub_80DA110);
|
|
|
|
sub_80DBF68();
|
|
|
|
gTasks[taskId].data[0] = 1;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sub_80DD080(gContestResources->field_0->unk19215);
|
|
|
|
gTasks[taskId].data[0] = 2;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 1:
|
|
|
|
if (!gContestResources->field_0->unk1920B_2)
|
|
|
|
gTasks[taskId].data[0] = 2;
|
|
|
|
return;
|
|
|
|
case 2:
|
|
|
|
sub_80DF080(r6);
|
|
|
|
sub_80DF750();
|
|
|
|
if (gContestResources->field_4[r6].numTurnsSkipped != 0
|
|
|
|
|| gContestResources->field_4[r6].noMoreTurns)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[0] = 31;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sub_80DB89C();
|
|
|
|
gTasks[taskId].data[10] = 0;
|
|
|
|
gTasks[taskId].data[0] = 3;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 3:
|
|
|
|
for (i = 0; i < 4; i++)
|
|
|
|
gBattleMonForms[i] = 0;
|
|
|
|
memset(gContestResources->field_18, 0, sizeof(*gContestResources->field_18));
|
|
|
|
sub_80DE9DC(gContestResources->field_0->unk19215);
|
|
|
|
spriteId = sub_80DB174(
|
|
|
|
gContestMons[gContestResources->field_0->unk19215].species,
|
|
|
|
gContestMons[gContestResources->field_0->unk19215].otId,
|
|
|
|
gContestMons[gContestResources->field_0->unk19215].personality,
|
|
|
|
gContestResources->field_0->unk19215);
|
|
|
|
gSprites[spriteId].pos2.x = 120;
|
|
|
|
gSprites[spriteId].callback = sub_80DA134;
|
|
|
|
gTasks[taskId].data[2] = spriteId;
|
|
|
|
gBattlerSpriteIds[gBattlerAttacker] = spriteId;
|
|
|
|
sub_80DCBE8(sub_80DC9EC(gContestResources->field_0->unk19215), FALSE);
|
|
|
|
gTasks[taskId].data[0] = 4;
|
|
|
|
return;
|
|
|
|
case 4:
|
|
|
|
spriteId = gTasks[taskId].data[2];
|
|
|
|
if (gSprites[spriteId].callback == SpriteCallbackDummy)
|
|
|
|
{
|
|
|
|
if (!gContestResources->field_14[r6].unk2_1)
|
|
|
|
gTasks[taskId].data[0] = 5;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 5:
|
|
|
|
if (gContestResources->field_4[r6].nervous)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[0] = 33;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sub_80DB89C();
|
|
|
|
StringCopy(gStringVar1, gContestMons[r6].nickname);
|
2018-08-11 19:04:28 +02:00
|
|
|
if (gContestResources->field_4[r6].currMove < MOVES_COUNT)
|
2018-05-05 00:59:59 +02:00
|
|
|
StringCopy(gStringVar2, gMoveNames[gContestResources->field_4[r6].currMove]);
|
|
|
|
else
|
|
|
|
StringCopy(gStringVar2, gUnknown_08587F1C[gContestResources->field_4[r6].moveCategory]);
|
|
|
|
StringExpandPlaceholders(gStringVar4, gText_0827D55A);
|
2018-05-11 16:51:38 +02:00
|
|
|
Contest_StartTextPrinter(gStringVar4, 1);
|
2018-05-05 00:59:59 +02:00
|
|
|
gTasks[taskId].data[0] = 6;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 6:
|
2018-05-11 16:51:38 +02:00
|
|
|
if (!Contest_RunTextPrinters())
|
2018-05-05 00:59:59 +02:00
|
|
|
{
|
|
|
|
gContestResources->field_0->unk1925E = 0;
|
|
|
|
gTasks[taskId].data[0] = 7;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 7:
|
|
|
|
{
|
|
|
|
u16 move = sub_80DE834(gContestResources->field_4[gContestResources->field_0->unk19215].currMove);
|
|
|
|
|
|
|
|
sub_80DE864(gContestResources->field_0->unk19215);
|
|
|
|
sub_80DE9DC(gContestResources->field_0->unk19215);
|
|
|
|
sub_80DEAA8(move);
|
|
|
|
DoMoveAnim(move);
|
|
|
|
gTasks[taskId].data[0] = 8;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 8:
|
|
|
|
gAnimScriptCallback();
|
|
|
|
if (!gAnimScriptActive)
|
|
|
|
{
|
|
|
|
sub_80DE9B0(r6);
|
|
|
|
if (gContestResources->field_0->unk1925E != 0)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[10] = 0;
|
|
|
|
gTasks[taskId].data[0] = 9;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (!gContestResources->field_4[r6].hasJudgesAttention)
|
|
|
|
sub_80DC674(r6);
|
|
|
|
sub_80DE12C();
|
|
|
|
gTasks[taskId].data[0] = 23;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 9:
|
|
|
|
if (gTasks[taskId].data[10]++ > 30)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[10] = 0;
|
|
|
|
gTasks[taskId].data[0] = 7;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 23:
|
|
|
|
gTasks[taskId].data[1] = 0;
|
|
|
|
if (gContestResources->field_4[r6].effectStringId != CONTEST_STRING_NONE)
|
|
|
|
{
|
|
|
|
sub_80DD45C(r6, gContestResources->field_4[r6].effectStringId);
|
|
|
|
gContestResources->field_4[r6].effectStringId = CONTEST_STRING_NONE;
|
|
|
|
gTasks[taskId].data[0] = 24;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (gContestResources->field_4[r6].effectStringId2 != CONTEST_STRING_NONE)
|
|
|
|
{
|
|
|
|
for (i = 0; i < 4; i++)
|
|
|
|
{
|
|
|
|
if (i != r6 && gContestResources->field_4[i].effectStringId != CONTEST_STRING_NONE)
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
if (i == 4)
|
|
|
|
{
|
|
|
|
sub_80DD45C(r6, gContestResources->field_4[r6].effectStringId2);
|
|
|
|
gContestResources->field_4[r6].effectStringId2 = CONTEST_STRING_NONE;
|
|
|
|
gTasks[taskId].data[0] = 24;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[0] = 48;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[0] = 48;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 24:
|
2018-05-11 16:51:38 +02:00
|
|
|
if (!Contest_RunTextPrinters())
|
2018-05-05 00:59:59 +02:00
|
|
|
gTasks[taskId].data[0] = 23;
|
|
|
|
return;
|
|
|
|
case 48:
|
|
|
|
if (gContestResources->field_4[r6].turnOrderModAction == 1)
|
|
|
|
{
|
|
|
|
sub_80DD720(5);
|
|
|
|
}
|
|
|
|
else if (gContestResources->field_4[r6].turnOrderModAction == 2)
|
|
|
|
{
|
|
|
|
sub_80DD720(6);
|
|
|
|
}
|
|
|
|
else if (gContestResources->field_4[r6].turnOrderModAction == 3)
|
|
|
|
{
|
|
|
|
sub_80DD720(7);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[0] = 47;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
gTasks[taskId].data[0] = 49;
|
|
|
|
return;
|
|
|
|
case 49:
|
|
|
|
if (!gContestResources->field_0->unk1920A_4)
|
|
|
|
gTasks[taskId].data[0] = 47;
|
|
|
|
return;
|
|
|
|
case 47:
|
|
|
|
sub_80DE008(TRUE);
|
|
|
|
gTasks[taskId].data[0] = 12;
|
|
|
|
return;
|
|
|
|
case 12:
|
|
|
|
sub_80DC028(0, gContestResources->field_4[r6].appeal2, r6);
|
|
|
|
gTasks[taskId].data[0] = 13;
|
|
|
|
return;
|
|
|
|
case 13:
|
|
|
|
if (!gContestResources->field_14[gContestResources->field_0->unk19215].unk2_2)
|
|
|
|
gTasks[taskId].data[0] = 35;
|
|
|
|
return;
|
|
|
|
case 35:
|
|
|
|
if (gContestResources->field_4[r6].conditionMod == 1)
|
|
|
|
sub_80DD720(8);
|
|
|
|
gTasks[taskId].data[0] = 36;
|
|
|
|
return;
|
|
|
|
case 36:
|
|
|
|
if (!gContestResources->field_0->unk1920A_4)
|
|
|
|
gTasks[taskId].data[0] = 37;
|
|
|
|
return;
|
|
|
|
case 37:
|
|
|
|
if (sub_80DB5B8(r6, 1))
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[10] = 0;
|
|
|
|
gTasks[taskId].data[0] = 38;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[0] = 50;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 38:
|
|
|
|
if (++gTasks[taskId].data[10] > 20)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[10] = 0;
|
|
|
|
gTasks[taskId].data[0] = 50;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 50:
|
|
|
|
if (sub_80DB798(r6))
|
|
|
|
PlaySE(SE_C_PASI);
|
|
|
|
gTasks[taskId].data[0] = 25;
|
|
|
|
return;
|
|
|
|
case 25:
|
|
|
|
gTasks[taskId].data[1] = 0;
|
|
|
|
gTasks[taskId].data[0] = 26;
|
|
|
|
return;
|
|
|
|
case 26:
|
|
|
|
{
|
|
|
|
s32 r2 = 0;
|
|
|
|
|
|
|
|
r3 = 0;
|
|
|
|
for (i = gTasks[taskId].data[1]; i < 4; i++)
|
|
|
|
{
|
|
|
|
r3 = 0;
|
|
|
|
for (r2 = 0; r2 < 4; r2++)
|
|
|
|
{
|
|
|
|
if (r2 != r6 && gUnknown_02039F26[r2] == i
|
|
|
|
&& gContestResources->field_4[r2].effectStringId != CONTEST_STRING_NONE)
|
|
|
|
{
|
|
|
|
r3 = 1;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (r3 != 0)
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
if (r3)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[1] = gUnknown_02039F26[r2];
|
|
|
|
sub_80DD45C(r2, gContestResources->field_4[r2].effectStringId);
|
|
|
|
gContestResources->field_4[r2].effectStringId = CONTEST_STRING_NONE;
|
|
|
|
gTasks[taskId].data[0] = 27;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[1] = 0;
|
|
|
|
gTasks[taskId].data[10] = 0;
|
|
|
|
gTasks[taskId].data[0] = 51;
|
|
|
|
sub_80DB884();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 27:
|
2018-05-11 16:51:38 +02:00
|
|
|
if (!Contest_RunTextPrinters())
|
2018-05-05 00:59:59 +02:00
|
|
|
gTasks[taskId].data[0] = 28;
|
|
|
|
return;
|
|
|
|
case 28:
|
|
|
|
for (i = 0; gTasks[taskId].data[1] != gUnknown_02039F26[i]; i++)
|
|
|
|
;
|
|
|
|
sub_80DC028(gContestResources->field_4[i].appeal2 + gContestResources->field_4[i].jam, -gContestResources->field_4[i].jam, i);
|
|
|
|
gTasks[taskId].data[0] = 29;
|
|
|
|
return;
|
|
|
|
case 29:
|
|
|
|
for (i = 0; gTasks[taskId].data[1] != gUnknown_02039F26[i]; i++)
|
|
|
|
;
|
|
|
|
if (!gContestResources->field_14[i].unk2_2)
|
|
|
|
gTasks[taskId].data[0] = 39;
|
|
|
|
return;
|
|
|
|
case 39:
|
|
|
|
for (i = 0; gTasks[taskId].data[1] != gUnknown_02039F26[i]; i++)
|
|
|
|
;
|
|
|
|
if (sub_80DB5B8(i, 1))
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[10] = 0;
|
|
|
|
gTasks[taskId].data[0] = 40;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[0] = 30;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 40:
|
|
|
|
if (++gTasks[taskId].data[10] > 20)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[10] = 0;
|
|
|
|
gTasks[taskId].data[0] = 30;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 30:
|
|
|
|
for (i = 0; i < 4; i++)
|
|
|
|
{
|
|
|
|
if (gUnknown_02039F26[i] == gTasks[taskId].data[1])
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
if (sub_80DB798(i))
|
|
|
|
PlaySE(SE_C_PASI);
|
|
|
|
else
|
|
|
|
PlaySE(SE_C_SYU);
|
|
|
|
if (gContestResources->field_4[i].judgesAttentionWasRemoved)
|
|
|
|
{
|
|
|
|
sub_80DC674(i);
|
|
|
|
gContestResources->field_4[i].judgesAttentionWasRemoved = 0;
|
|
|
|
}
|
|
|
|
gTasks[taskId].data[1]++;
|
|
|
|
gTasks[taskId].data[0] = 26;
|
|
|
|
return;
|
|
|
|
case 51:
|
|
|
|
if (gTasks[taskId].data[10]++ > 9)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[10] = 0;
|
|
|
|
if (gContestResources->field_4[r6].numTurnsSkipped != 0
|
|
|
|
|| gContestResources->field_4[r6].turnSkipped)
|
|
|
|
{
|
|
|
|
sub_80DB89C();
|
|
|
|
StringCopy(gStringVar1, gContestMons[r6].nickname);
|
|
|
|
StringExpandPlaceholders(gStringVar4, gText_0827E793);
|
2018-05-11 16:51:38 +02:00
|
|
|
Contest_StartTextPrinter(gStringVar4, 1);
|
2018-05-05 00:59:59 +02:00
|
|
|
}
|
|
|
|
gTasks[taskId].data[0] = 52;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 52:
|
2018-05-11 16:51:38 +02:00
|
|
|
if (!Contest_RunTextPrinters())
|
2018-05-05 00:59:59 +02:00
|
|
|
{
|
|
|
|
if (!gContestResources->field_4[r6].unk15_6)
|
|
|
|
gTasks[taskId].data[0] = 17;
|
|
|
|
else
|
|
|
|
gTasks[taskId].data[0] = 14;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 14:
|
|
|
|
r3 = gContestResources->field_4[r6].unk16;
|
|
|
|
if (gContestResources->field_4[r6].unk16 != 0)
|
|
|
|
{
|
|
|
|
sub_80DB89C();
|
|
|
|
if (r3 == 1)
|
2018-05-11 16:51:38 +02:00
|
|
|
Contest_StartTextPrinter(gText_0827E32E, 1);
|
2018-05-05 00:59:59 +02:00
|
|
|
else if (r3 == 2)
|
2018-05-11 16:51:38 +02:00
|
|
|
Contest_StartTextPrinter(gText_0827E35B, 1);
|
2018-05-05 00:59:59 +02:00
|
|
|
else
|
2018-05-11 16:51:38 +02:00
|
|
|
Contest_StartTextPrinter(gText_0827E38D, 1);
|
2018-05-05 00:59:59 +02:00
|
|
|
sub_80DD720(3);
|
|
|
|
gTasks[taskId].data[10] = 0;
|
|
|
|
gTasks[taskId].data[0] = 45;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sub_80DB89C();
|
|
|
|
StringCopy(gStringVar1, gContestMons[r6].nickname);
|
|
|
|
StringExpandPlaceholders(gStringVar4, gText_0827E2FE);
|
2018-05-11 16:51:38 +02:00
|
|
|
Contest_StartTextPrinter(gStringVar4, 1);
|
2018-05-05 00:59:59 +02:00
|
|
|
sub_80DD720(2);
|
|
|
|
gTasks[taskId].data[10] = 0;
|
|
|
|
gTasks[taskId].data[0] = 45;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 45:
|
|
|
|
if (!gContestResources->field_0->unk1920A_4)
|
|
|
|
{
|
|
|
|
sub_80DC9B4(gContestResources->field_0->unk19215);
|
|
|
|
gTasks[taskId].data[0] = 15;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 15:
|
2018-05-11 16:51:38 +02:00
|
|
|
if (!Contest_RunTextPrinters())
|
2018-05-05 00:59:59 +02:00
|
|
|
{
|
|
|
|
if (++gTasks[taskId].data[10] > 50)
|
|
|
|
{
|
|
|
|
if (!gContestResources->field_4[r6].hasJudgesAttention)
|
|
|
|
{
|
|
|
|
sub_80DC028(
|
|
|
|
gContestResources->field_4[r6].appeal2,
|
|
|
|
gContestResources->field_4[r6].unk17,
|
|
|
|
r6);
|
|
|
|
gContestResources->field_4[r6].appeal2 += gContestResources->field_4[r6].unk17;
|
|
|
|
}
|
|
|
|
gTasks[taskId].data[0] = 16;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 16:
|
|
|
|
if (!gContestResources->field_14[r6].unk2_2)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[10] = 0;
|
|
|
|
gTasks[taskId].data[0] = 17;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 17:
|
|
|
|
if (gContestResources->field_4[r6].disappointedRepeat)
|
|
|
|
{
|
|
|
|
sub_80DB89C();
|
|
|
|
StringCopy(gStringVar1, gContestMons[r6].nickname);
|
|
|
|
StringExpandPlaceholders(gStringVar4, gText_0827E6E3);
|
2018-05-11 16:51:38 +02:00
|
|
|
Contest_StartTextPrinter(gStringVar4, 1);
|
2018-05-05 00:59:59 +02:00
|
|
|
gTasks[taskId].data[10] = 0;
|
|
|
|
sub_80DD720(0);
|
|
|
|
gTasks[taskId].data[0] = 46;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[0] = 41;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 46:
|
|
|
|
if (!gContestResources->field_0->unk1920A_4)
|
|
|
|
gTasks[taskId].data[0] = 19;
|
|
|
|
return;
|
|
|
|
case 19:
|
2018-05-11 16:51:38 +02:00
|
|
|
if (!Contest_RunTextPrinters())
|
2018-05-05 00:59:59 +02:00
|
|
|
{
|
|
|
|
sub_80DC028(gContestResources->field_4[r6].appeal2, -gContestResources->field_4[r6].unk18, r6);
|
|
|
|
gContestResources->field_4[r6].appeal2 -= gContestResources->field_4[r6].unk18;
|
|
|
|
gTasks[taskId].data[0] = 18;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 18:
|
|
|
|
sub_80DCD48();
|
|
|
|
if (!gContestResources->field_14[r6].unk2_2)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[10] = 0;
|
|
|
|
sub_80DB89C();
|
|
|
|
gTasks[taskId].data[0] = 41;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 41:
|
|
|
|
if (gContestResources->field_10->excitementFrozen && r6 != gContestResources->field_10->excitementFreezer)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[0] = 57;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
r3 = gContestResources->field_10->bits_0;
|
|
|
|
if (gContestResources->field_4[r6].overrideCategoryExcitementMod)
|
|
|
|
{
|
|
|
|
r3 = 1;
|
|
|
|
StringCopy(gStringVar3, gMoveNames[gContestResources->field_4[r6].currMove]);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
StringCopy(gStringVar3, gUnknown_08587F08[gContestMoves[gContestResources->field_4[r6].currMove].contestCategory]);
|
|
|
|
}
|
|
|
|
if (r3 > 0)
|
|
|
|
{
|
|
|
|
if (gContestResources->field_4[r6].disappointedRepeat)
|
|
|
|
r3 = 0;
|
|
|
|
}
|
|
|
|
sub_80DB89C();
|
|
|
|
StringCopy(gStringVar1, gContestMons[r6].nickname);
|
|
|
|
gContestResources->field_0->applauseLevel += r3;
|
|
|
|
if (gContestResources->field_0->applauseLevel < 0)
|
|
|
|
gContestResources->field_0->applauseLevel = 0;
|
|
|
|
if (r3 == 0)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[0] = 55;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (r3 < 0)
|
|
|
|
StringExpandPlaceholders(gStringVar4, gText_0827E73C);
|
|
|
|
else if (r3 > 0 && gContestResources->field_0->applauseLevel <= 4)
|
|
|
|
StringExpandPlaceholders(gStringVar4, gText_0827E717);
|
|
|
|
else
|
|
|
|
StringExpandPlaceholders(gStringVar4, gText_0827E76A);
|
2018-05-11 16:51:38 +02:00
|
|
|
Contest_StartTextPrinter(gStringVar4, 1);
|
2018-05-05 00:59:59 +02:00
|
|
|
gTasks[taskId].data[10] = 0;
|
|
|
|
gTasks[taskId].data[11] = 0;
|
|
|
|
if (r3 < 0)
|
|
|
|
gTasks[taskId].data[0] = 53;
|
|
|
|
else
|
|
|
|
gTasks[taskId].data[0] = 54;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 53:
|
|
|
|
switch (gTasks[taskId].data[10])
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
sub_80DDED0(-1, 1);
|
|
|
|
PlayFanfare(MUS_ME_ZANNEN);
|
|
|
|
gTasks[taskId].data[10]++;
|
|
|
|
break;
|
|
|
|
case 1:
|
2018-05-11 16:51:38 +02:00
|
|
|
if (!gContestResources->field_0->unk1920B_0 && !Contest_RunTextPrinters())
|
2018-05-05 00:59:59 +02:00
|
|
|
{
|
|
|
|
sub_80DDCDC(-1);
|
|
|
|
gTasks[taskId].data[10]++;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
if (!gContestResources->field_0->unk1920A_5)
|
|
|
|
{
|
|
|
|
if (gTasks[taskId].data[11]++ > 29)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[11] = 0;
|
|
|
|
sub_80DDED0(-1, -1);
|
|
|
|
gTasks[taskId].data[10]++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
if (!gPaletteFade.active)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[10] = 0;
|
|
|
|
gTasks[taskId].data[11] = 0;
|
|
|
|
gTasks[taskId].data[0] = 43;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 54:
|
|
|
|
switch (gTasks[taskId].data[10])
|
|
|
|
{
|
|
|
|
case 0:
|
2018-05-11 16:51:38 +02:00
|
|
|
if (!Contest_RunTextPrinters())
|
2018-05-05 00:59:59 +02:00
|
|
|
{
|
|
|
|
sub_80DDED0(1, 1);
|
|
|
|
gTasks[taskId].data[10]++;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
if (!gContestResources->field_0->unk1920B_0)
|
|
|
|
{
|
|
|
|
sub_80DDE0C();
|
|
|
|
PlaySE(SE_W227B);
|
|
|
|
sub_80DDCDC(1);
|
|
|
|
gTasks[taskId].data[10]++;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
if (!gContestResources->field_0->unk1920A_5)
|
|
|
|
{
|
|
|
|
if (gTasks[taskId].data[11]++ > 29)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[11] = 0;
|
|
|
|
sub_80DC028(gContestResources->field_4[r6].appeal2, gContestResources->field_10->unk2, r6);
|
|
|
|
gContestResources->field_4[r6].appeal2 += gContestResources->field_10->unk2;
|
|
|
|
gTasks[taskId].data[10]++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
if (!gContestResources->field_14[r6].unk2_2)
|
|
|
|
{
|
|
|
|
if (!gContestResources->field_0->unk1920A_7)
|
|
|
|
{
|
|
|
|
sub_80DDED0(1, -1);
|
|
|
|
gTasks[taskId].data[10]++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
if (!gPaletteFade.active)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[10] = 0;
|
|
|
|
gTasks[taskId].data[11] = 0;
|
|
|
|
gTasks[taskId].data[0] = 43;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 43:
|
|
|
|
if (!gContestResources->field_14[r6].unk2_2)
|
|
|
|
{
|
|
|
|
sub_80DB89C();
|
|
|
|
gTasks[taskId].data[0] = 55;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 57:
|
|
|
|
sub_80DB89C();
|
|
|
|
StringCopy(gStringVar3, gContestMons[gContestResources->field_10->excitementFreezer].nickname);
|
|
|
|
StringCopy(gStringVar1, gContestMons[r6].nickname);
|
|
|
|
StringCopy(gStringVar2, gMoveNames[gContestResources->field_4[r6].currMove]);
|
|
|
|
StringExpandPlaceholders(gStringVar4, gText_0827E7EA);
|
2018-05-11 16:51:38 +02:00
|
|
|
Contest_StartTextPrinter(gStringVar4, 1);
|
2018-05-05 00:59:59 +02:00
|
|
|
gTasks[taskId].data[0] = 58;
|
|
|
|
return;
|
|
|
|
case 58:
|
2018-05-11 16:51:38 +02:00
|
|
|
if (!Contest_RunTextPrinters())
|
2018-05-05 00:59:59 +02:00
|
|
|
{
|
|
|
|
sub_80DB89C();
|
|
|
|
StringExpandPlaceholders(gStringVar4, gText_0827E817);
|
2018-05-11 16:51:38 +02:00
|
|
|
Contest_StartTextPrinter(gStringVar4, 1);
|
2018-05-05 00:59:59 +02:00
|
|
|
gTasks[taskId].data[0] = 59;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 59:
|
2018-05-11 16:51:38 +02:00
|
|
|
if (!Contest_RunTextPrinters())
|
2018-05-05 00:59:59 +02:00
|
|
|
{
|
|
|
|
sub_80DB89C();
|
|
|
|
gTasks[taskId].data[0] = 55;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 33:
|
|
|
|
if (gContestResources->field_4[r6].hasJudgesAttention)
|
|
|
|
gContestResources->field_4[r6].hasJudgesAttention = 0;
|
|
|
|
sub_80DC9B4(r6);
|
|
|
|
StringCopy(gStringVar1, gContestMons[r6].nickname);
|
|
|
|
StringCopy(gStringVar2, gMoveNames[gContestResources->field_4[r6].currMove]);
|
|
|
|
StringExpandPlaceholders(gStringVar4, gText_0827E58A);
|
2018-05-11 16:51:38 +02:00
|
|
|
Contest_StartTextPrinter(gStringVar4, 1);
|
2018-05-05 00:59:59 +02:00
|
|
|
gTasks[taskId].data[0] = 34;
|
|
|
|
return;
|
|
|
|
case 34:
|
2018-05-11 16:51:38 +02:00
|
|
|
if (!Contest_RunTextPrinters())
|
2018-05-05 00:59:59 +02:00
|
|
|
gTasks[taskId].data[0] = 55;
|
|
|
|
return;
|
|
|
|
case 55:
|
|
|
|
sub_80DDBE8();
|
|
|
|
gTasks[taskId].data[0] = 56;
|
|
|
|
return;
|
|
|
|
case 56:
|
|
|
|
if (!gContestResources->field_0->unk1920A_6)
|
|
|
|
{
|
|
|
|
if (gContestResources->field_0->applauseLevel > 4)
|
|
|
|
{
|
|
|
|
gContestResources->field_0->applauseLevel = 0;
|
|
|
|
sub_80DD940();
|
|
|
|
}
|
|
|
|
gTasks[taskId].data[0] = 10;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 10:
|
|
|
|
spriteId = gTasks[taskId].data[2];
|
|
|
|
gSprites[spriteId].callback = sub_80DA164;
|
|
|
|
gTasks[taskId].data[0] = 11;
|
|
|
|
return;
|
|
|
|
case 11:
|
|
|
|
spriteId = gTasks[taskId].data[2];
|
|
|
|
if (gSprites[spriteId].invisible)
|
|
|
|
{
|
|
|
|
FreeSpriteOamMatrix(&gSprites[spriteId]);
|
|
|
|
DestroySprite(&gSprites[spriteId]);
|
|
|
|
gTasks[taskId].data[0] = 20;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 20:
|
|
|
|
gTasks[taskId].data[10] = 0;
|
|
|
|
gTasks[taskId].data[0] = 21;
|
|
|
|
return;
|
|
|
|
case 31:
|
|
|
|
sub_80DB89C();
|
|
|
|
StringCopy(gStringVar1, gContestMons[r6].nickname);
|
|
|
|
StringExpandPlaceholders(gStringVar4, gText_0827D56F);
|
2018-05-11 16:51:38 +02:00
|
|
|
Contest_StartTextPrinter(gStringVar4, 1);
|
2018-05-05 00:59:59 +02:00
|
|
|
gTasks[taskId].data[0] = 32;
|
|
|
|
return;
|
|
|
|
case 32:
|
2018-05-11 16:51:38 +02:00
|
|
|
if (!Contest_RunTextPrinters())
|
2018-05-05 00:59:59 +02:00
|
|
|
gTasks[taskId].data[0] = 21;
|
|
|
|
return;
|
|
|
|
case 21:
|
|
|
|
if (++gTasks[taskId].data[10] > 29)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[10] = 0;
|
|
|
|
gTasks[taskId].data[0] = 22;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
case 22:
|
|
|
|
if (++gContestResources->field_0->unk19214 == 4)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[0] = 0;
|
|
|
|
gTasks[taskId].data[1] = 0;
|
|
|
|
gTasks[taskId].data[2] = 0;
|
|
|
|
gTasks[taskId].func = sub_80DA198;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[0] = 0;
|
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
2018-05-08 01:46:48 +02:00
|
|
|
|
|
|
|
void sub_80DA110(u8 taskId)
|
|
|
|
{
|
|
|
|
sContest.unk1920B_2 = 0;
|
|
|
|
DestroyTask(taskId);
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DA134(struct Sprite *sprite)
|
|
|
|
{
|
|
|
|
if (sprite->pos2.x != 0)
|
|
|
|
{
|
|
|
|
sprite->pos2.x -= 2;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (++sprite->data[0] == 31)
|
|
|
|
{
|
|
|
|
sprite->data[0] = 0;
|
|
|
|
sprite->callback = SpriteCallbackDummy;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DA164(struct Sprite *sprite)
|
|
|
|
{
|
|
|
|
sprite->pos2.x -= 6;
|
|
|
|
if (sprite->pos1.x + sprite->pos2.x < -32)
|
|
|
|
{
|
|
|
|
sprite->callback = SpriteCallbackDummy;
|
|
|
|
sprite->invisible = TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DA198(u8 taskId)
|
|
|
|
{
|
|
|
|
switch (gTasks[taskId].data[0])
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
if (gIsLinkContest & 1)
|
|
|
|
{
|
|
|
|
u8 taskId2;
|
|
|
|
|
|
|
|
sContest.unk1920B_2 = 1;
|
|
|
|
if (sub_80DA8A4())
|
|
|
|
{
|
|
|
|
sub_80DB944();
|
|
|
|
sub_80DBA18();
|
|
|
|
}
|
|
|
|
taskId2 = CreateTask(sub_80FCC88, 0);
|
|
|
|
SetTaskFuncWithFollowupFunc(taskId2, sub_80FCC88, sub_80DA110);
|
|
|
|
sub_80DBF68();
|
|
|
|
gTasks[taskId].data[0] = 1;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sub_80DB944();
|
|
|
|
sub_80DBA18();
|
|
|
|
gTasks[taskId].data[0] = 2;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
if (!sContest.unk1920B_2)
|
|
|
|
gTasks[taskId].data[0] = 2;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
gTasks[taskId].data[0] = 0;
|
|
|
|
gTasks[taskId].func = sub_80DA25C;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DA25C(u8 taskId)
|
|
|
|
{
|
|
|
|
sub_80DE008(FALSE);
|
|
|
|
gTasks[taskId].data[0] = 0;
|
|
|
|
gTasks[taskId].data[1] = 0;
|
|
|
|
gTasks[taskId].func = sub_80DA28C;
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DA28C(u8 taskId)
|
|
|
|
{
|
|
|
|
switch (gTasks[taskId].data[0])
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
if (++gTasks[taskId].data[1] > 20)
|
|
|
|
{
|
|
|
|
sub_80DE69C(2);
|
|
|
|
gTasks[taskId].data[1] = 0;
|
|
|
|
gTasks[taskId].data[0]++;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
if (!sContest.unk1920B_1)
|
|
|
|
{
|
|
|
|
if (++gTasks[taskId].data[1] > 20)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[1] = 0;
|
|
|
|
gTasks[taskId].data[0]++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
sub_80DC3AC();
|
|
|
|
gTasks[taskId].data[0] = 0;
|
|
|
|
gTasks[taskId].data[1] = 0;
|
|
|
|
gTasks[taskId].func = sub_80DA31C;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DA31C(u8 taskId)
|
|
|
|
{
|
|
|
|
if (sub_80DC3C4())
|
|
|
|
gTasks[taskId].func = sub_80DA348;
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DA348(u8 taskId)
|
|
|
|
{
|
|
|
|
DmaCopy32Defvars(3, shared18000.unk18204, gPlttBufferUnfaded, 0x400);
|
|
|
|
gTasks[taskId].data[0] = 0;
|
|
|
|
gTasks[taskId].data[1] = 2;
|
|
|
|
gTasks[taskId].func = sub_80DA38C;
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DA38C(u8 taskId)
|
|
|
|
{
|
|
|
|
if (++gTasks[taskId].data[0] > 2)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[0] = 0;
|
|
|
|
if (--gTasks[taskId].data[1] == 0)
|
|
|
|
gTasks[taskId].func = sub_80DA3CC;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DA3CC(u8 taskId)
|
|
|
|
{
|
|
|
|
if (gTasks[taskId].data[0] == 0)
|
|
|
|
{
|
|
|
|
u8 r4 = sContestantStatus[gContestPlayerMonIndex].attentionLevel;
|
|
|
|
|
|
|
|
sub_80DB89C();
|
|
|
|
StringCopy(gStringVar1, gContestMons[gContestPlayerMonIndex].nickname);
|
|
|
|
StringExpandPlaceholders(gStringVar4, gUnknown_08587D90[r4]);
|
2018-05-11 16:51:38 +02:00
|
|
|
Contest_StartTextPrinter(gStringVar4, 1);
|
2018-05-08 01:46:48 +02:00
|
|
|
gTasks[taskId].data[0]++;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2018-05-11 16:51:38 +02:00
|
|
|
if (!Contest_RunTextPrinters())
|
2018-05-08 01:46:48 +02:00
|
|
|
{
|
|
|
|
gTasks[taskId].data[0] = 0;
|
|
|
|
gTasks[taskId].func = sub_80DA464;
|
|
|
|
sub_80DCD48();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DA464(u8 taskId)
|
|
|
|
{
|
|
|
|
if (gTasks[taskId].data[0]++ > 29)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[0] = 0;
|
|
|
|
sub_80DC3AC();
|
|
|
|
gTasks[taskId].func = sub_80DA49C;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DA49C(u8 taskId)
|
|
|
|
{
|
|
|
|
if (sub_80DC3C4())
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[0] = 0;
|
|
|
|
gTasks[taskId].func = sub_80DA4CC;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DA4CC(u8 taskId)
|
|
|
|
{
|
|
|
|
sub_80DE224();
|
|
|
|
gTasks[taskId].func = sub_80DE424;
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DA4F4(u8 taskId)
|
|
|
|
{
|
|
|
|
sub_80DE350();
|
|
|
|
gTasks[taskId].func = sub_80DA51C;
|
|
|
|
}
|
2018-05-08 02:49:23 +02:00
|
|
|
|
|
|
|
void sub_80DA51C(u8 taskId)
|
|
|
|
{
|
|
|
|
vu16 sp0 = GetGpuReg(REG_OFFSET_BG0CNT);
|
|
|
|
vu16 sp2 = GetGpuReg(REG_OFFSET_BG2CNT);
|
|
|
|
((vBgCnt *)&sp0)->priority = 0;
|
|
|
|
((vBgCnt *)&sp2)->priority = 0;
|
|
|
|
SetGpuReg(REG_OFFSET_BG0CNT, sp0);
|
|
|
|
SetGpuReg(REG_OFFSET_BG2CNT, sp2);
|
|
|
|
sContest.turnNumber++;
|
|
|
|
if (sContest.turnNumber == 5)
|
|
|
|
{
|
|
|
|
gTasks[taskId].func = sub_80DA5E8;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sub_80DDB0C();
|
|
|
|
gTasks[taskId].func = sub_80DA5B4;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DA5B4(u8 taskId)
|
|
|
|
{
|
|
|
|
if (!sContest.unk1920A_6)
|
|
|
|
gTasks[taskId].func = sub_80D833C;
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DA5E8(u8 taskId)
|
|
|
|
{
|
|
|
|
s32 i;
|
|
|
|
|
|
|
|
gBattle_BG0_Y = 0;
|
|
|
|
gBattle_BG2_Y = 0;
|
|
|
|
for (i = 0; i < 4; i++)
|
|
|
|
gUnknown_02039F10[i] = sContestantStatus[i].unk4;
|
|
|
|
sub_80DBD18();
|
|
|
|
sub_80DB89C();
|
|
|
|
if (!(gIsLinkContest & 1))
|
|
|
|
BravoTrainerPokemonProfile_BeforeInterview1(sContestantStatus[gContestPlayerMonIndex].prevMove);
|
|
|
|
else
|
|
|
|
{
|
|
|
|
sub_80DF250();
|
|
|
|
sub_80DF4F8();
|
|
|
|
sub_80DF750();
|
|
|
|
}
|
|
|
|
gContestRngValue = gRngValue;
|
|
|
|
StringExpandPlaceholders(gStringVar4, gText_0827D597);
|
2018-05-11 16:51:38 +02:00
|
|
|
Contest_StartTextPrinter(gStringVar4, 1);
|
2018-05-08 02:49:23 +02:00
|
|
|
gTasks[taskId].data[2] = 0;
|
|
|
|
gTasks[taskId].func = sub_80DA6B4;
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DA6B4(u8 taskId)
|
|
|
|
{
|
2018-05-11 16:51:38 +02:00
|
|
|
if (!Contest_RunTextPrinters())
|
2018-05-08 02:49:23 +02:00
|
|
|
{
|
|
|
|
sub_80DE224();
|
|
|
|
gBattle_BG1_X = 0;
|
|
|
|
gBattle_BG1_Y = 160;
|
|
|
|
PlaySE12WithPanning(SE_C_MAKU_D, 0);
|
|
|
|
gTasks[taskId].data[0] = 0;
|
|
|
|
gTasks[taskId].func = sub_80DA700;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DA700(u8 taskId)
|
|
|
|
{
|
|
|
|
gBattle_BG1_Y -= 7;
|
|
|
|
if (gBattle_BG1_Y < 0)
|
|
|
|
gBattle_BG1_Y = 0;
|
|
|
|
if (*(u16 *)&gBattle_BG1_Y == 0) // Why cast?
|
|
|
|
{
|
|
|
|
gTasks[taskId].func = sub_80DA740;
|
|
|
|
gTasks[taskId].data[0] = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DA740(u8 taskId)
|
|
|
|
{
|
|
|
|
if (gTasks[taskId].data[0]++ >= 50)
|
|
|
|
{
|
|
|
|
gTasks[taskId].data[0] = 0;
|
|
|
|
if (gIsLinkContest & 1)
|
|
|
|
{
|
|
|
|
gTasks[taskId].func = sub_80DA7A0;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
|
|
|
|
gTasks[taskId].func = sub_80DA830;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DA7A0(u8 taskId)
|
|
|
|
{
|
|
|
|
u8 taskId2 = CreateTask(sub_80FCACC, 0);
|
|
|
|
|
|
|
|
SetTaskFuncWithFollowupFunc(taskId2, sub_80FCACC, sub_80DA7EC);
|
|
|
|
gTasks[taskId].func = TaskDummy1;
|
|
|
|
sub_80DBF68();
|
|
|
|
sub_80DC490(FALSE);
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DA7EC(u8 taskId)
|
|
|
|
{
|
|
|
|
DestroyTask(taskId);
|
|
|
|
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
|
|
|
|
gTasks[sContest.mainTaskId].func = sub_80DA830;
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DA830(u8 taskId)
|
|
|
|
{
|
|
|
|
if (!gPaletteFade.active)
|
|
|
|
{
|
|
|
|
DestroyTask(taskId);
|
|
|
|
gFieldCallback = sub_80DA874;
|
|
|
|
FreeAllWindowBuffers();
|
|
|
|
sub_80D7A5C();
|
|
|
|
FreeMonSpritesGfx();
|
|
|
|
SetMainCallback2(CB2_ReturnToField);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DA874(void)
|
|
|
|
{
|
|
|
|
ScriptContext2_Disable();
|
|
|
|
EnableBothScriptContexts();
|
|
|
|
}
|
2018-05-09 01:00:23 +02:00
|
|
|
|
|
|
|
void sub_80DA884(void)
|
|
|
|
{
|
|
|
|
if (!(gIsLinkContest & 1))
|
|
|
|
gContestPlayerMonIndex = 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 sub_80DA8A4(void)
|
|
|
|
{
|
|
|
|
if (gContestPlayerMonIndex == gUnknown_02039F2B)
|
|
|
|
return TRUE;
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void sub_80DA8C8(u8 partyIndex)
|
|
|
|
{
|
|
|
|
u8 name[20];
|
|
|
|
u16 heldItem;
|
|
|
|
s16 cool;
|
|
|
|
s16 beauty;
|
|
|
|
s16 cute;
|
|
|
|
s16 smart;
|
|
|
|
s16 tough;
|
|
|
|
|
|
|
|
StringCopy(name, gSaveBlock2Ptr->playerName);
|
|
|
|
if (gIsLinkContest & 1)
|
|
|
|
{
|
|
|
|
sub_80DF9D4(name);
|
|
|
|
}
|
|
|
|
memcpy(gContestMons[gContestPlayerMonIndex].trainerName, name, 8);
|
|
|
|
if (gSaveBlock2Ptr->playerGender == MALE)
|
2018-08-11 19:04:28 +02:00
|
|
|
gContestMons[gContestPlayerMonIndex].trainerGfxId = EVENT_OBJ_GFX_LINK_BRENDAN;
|
2018-05-09 01:00:23 +02:00
|
|
|
else
|
2018-08-11 19:04:28 +02:00
|
|
|
gContestMons[gContestPlayerMonIndex].trainerGfxId = EVENT_OBJ_GFX_LINK_MAY;
|
2018-05-09 01:00:23 +02:00
|
|
|
gContestMons[gContestPlayerMonIndex].flags = 0;
|
|
|
|
gContestMons[gContestPlayerMonIndex].unk2C[0] = 0;
|
|
|
|
gContestMons[gContestPlayerMonIndex].species = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SPECIES);
|
|
|
|
GetMonData(&gPlayerParty[partyIndex], MON_DATA_NICKNAME, name);
|
|
|
|
StringGetEnd10(name);
|
|
|
|
if (gIsLinkContest & 1)
|
|
|
|
{
|
|
|
|
sub_80DF9E0(name, GetMonData(&gPlayerParty[partyIndex], MON_DATA_LANGUAGE));
|
|
|
|
}
|
2018-08-11 19:04:28 +02:00
|
|
|
memcpy(gContestMons[gContestPlayerMonIndex].nickname, name, POKEMON_NAME_LENGTH + 1);
|
2018-05-09 01:00:23 +02:00
|
|
|
StringCopy(gContestMons[gContestPlayerMonIndex].nickname, name);
|
|
|
|
gContestMons[gContestPlayerMonIndex].cool = GetMonData(&gPlayerParty[partyIndex], MON_DATA_COOL);
|
|
|
|
gContestMons[gContestPlayerMonIndex].beauty = GetMonData(&gPlayerParty[partyIndex], MON_DATA_BEAUTY);
|
|
|
|
gContestMons[gContestPlayerMonIndex].cute = GetMonData(&gPlayerParty[partyIndex], MON_DATA_CUTE);
|
|
|
|
gContestMons[gContestPlayerMonIndex].smart = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SMART);
|
|
|
|
gContestMons[gContestPlayerMonIndex].tough = GetMonData(&gPlayerParty[partyIndex], MON_DATA_TOUGH);
|
|
|
|
gContestMons[gContestPlayerMonIndex].sheen = GetMonData(&gPlayerParty[partyIndex], MON_DATA_SHEEN);
|
|
|
|
gContestMons[gContestPlayerMonIndex].moves[0] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE1);
|
|
|
|
gContestMons[gContestPlayerMonIndex].moves[1] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE2);
|
|
|
|
gContestMons[gContestPlayerMonIndex].moves[2] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE3);
|
|
|
|
gContestMons[gContestPlayerMonIndex].moves[3] = GetMonData(&gPlayerParty[partyIndex], MON_DATA_MOVE4);
|
|
|
|
gContestMons[gContestPlayerMonIndex].personality = GetMonData(&gPlayerParty[partyIndex], MON_DATA_PERSONALITY);
|
|
|
|
gContestMons[gContestPlayerMonIndex].otId = GetMonData(&gPlayerParty[partyIndex], MON_DATA_OT_ID);
|
|
|
|
|
|
|
|
heldItem = GetMonData(&gPlayerParty[partyIndex], MON_DATA_HELD_ITEM);
|
|
|
|
cool = gContestMons[gContestPlayerMonIndex].cool;
|
|
|
|
beauty = gContestMons[gContestPlayerMonIndex].beauty;
|
|
|
|
cute = gContestMons[gContestPlayerMonIndex].cute;
|
|
|
|
smart = gContestMons[gContestPlayerMonIndex].smart;
|
|
|
|
tough = gContestMons[gContestPlayerMonIndex].tough;
|
|
|
|
if (heldItem == ITEM_RED_SCARF)
|
|
|
|
cool += 20;
|
|
|
|
else if (heldItem == ITEM_BLUE_SCARF)
|
|
|
|
beauty += 20;
|
|
|
|
else if (heldItem == ITEM_PINK_SCARF)
|
|
|
|
cute += 20;
|
|
|
|
else if (heldItem == ITEM_GREEN_SCARF)
|
|
|
|
smart += 20;
|
|
|
|
else if (heldItem == ITEM_YELLOW_SCARF)
|
|
|
|
tough += 20;
|
|
|
|
if (cool > 255)
|
|
|
|
cool = 255;
|
|
|
|
if (beauty > 255)
|
|
|
|
beauty = 255;
|
|
|
|
if (cute > 255)
|
|
|
|
cute = 255;
|
|
|
|
if (smart > 255)
|
|
|
|
smart = 255;
|
|
|
|
if (tough > 255)
|
|
|
|
tough = 255;
|
|
|
|
gContestMons[gContestPlayerMonIndex].cool = cool;
|
|
|
|
gContestMons[gContestPlayerMonIndex].beauty = beauty;
|
|
|
|
gContestMons[gContestPlayerMonIndex].cute = cute;
|
|
|
|
gContestMons[gContestPlayerMonIndex].smart = smart;
|
|
|
|
gContestMons[gContestPlayerMonIndex].tough = tough;
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DAB8C(u8 contestType, u8 rank)
|
|
|
|
{
|
|
|
|
s32 i;
|
|
|
|
u8 opponentsCount = 0;
|
|
|
|
u8 opponents[100];
|
|
|
|
bool8 r7 = FALSE;
|
|
|
|
const u8 * r3;
|
|
|
|
|
|
|
|
sub_80DA884();
|
|
|
|
|
|
|
|
if (FlagGet(FLAG_SYS_GAME_CLEAR) && !(gIsLinkContest & 1))
|
|
|
|
r7 = TRUE;
|
|
|
|
|
|
|
|
// Find all suitable opponents
|
|
|
|
r3 = gUnknown_085898A4;
|
|
|
|
for (i = 0; i < ARRAY_COUNT(gContestOpponents); i++)
|
|
|
|
{
|
|
|
|
if (rank == gContestOpponents[i].whichRank)
|
|
|
|
{
|
|
|
|
if (r7 == TRUE)
|
|
|
|
{
|
|
|
|
if (r3[i] == 1)
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (r3[i] == 2)
|
|
|
|
continue;
|
|
|
|
}
|
2018-05-10 23:54:30 +02:00
|
|
|
if (contestType == CONTEST_CATEGORY_COOL && gContestOpponents[i].aiPool_Cool)
|
2018-05-09 01:00:23 +02:00
|
|
|
opponents[opponentsCount++] = i;
|
2018-05-10 23:54:30 +02:00
|
|
|
else if (contestType == CONTEST_CATEGORY_BEAUTY && gContestOpponents[i].aiPool_Beauty)
|
2018-05-09 01:00:23 +02:00
|
|
|
opponents[opponentsCount++] = i;
|
2018-05-10 23:54:30 +02:00
|
|
|
else if (contestType == CONTEST_CATEGORY_CUTE && gContestOpponents[i].aiPool_Cute)
|
2018-05-09 01:00:23 +02:00
|
|
|
opponents[opponentsCount++] = i;
|
2018-05-10 23:54:30 +02:00
|
|
|
else if (contestType == CONTEST_CATEGORY_SMART && gContestOpponents[i].aiPool_Smart)
|
2018-05-09 01:00:23 +02:00
|
|
|
opponents[opponentsCount++] = i;
|
2018-05-10 23:54:30 +02:00
|
|
|
else if (contestType == CONTEST_CATEGORY_TOUGH && gContestOpponents[i].aiPool_Tough)
|
2018-05-09 01:00:23 +02:00
|
|
|
opponents[opponentsCount++] = i;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
opponents[opponentsCount] = 0xFF;
|
|
|
|
|
|
|
|
// Choose three random opponents from the list
|
|
|
|
for (i = 0; i < 3; i++)
|
|
|
|
{
|
|
|
|
u16 rnd = Random() % opponentsCount;
|
|
|
|
s32 j;
|
|
|
|
|
|
|
|
gContestMons[i] = gContestOpponents[opponents[rnd]];
|
|
|
|
for (j = rnd; opponents[j] != 0xFF; j++)
|
|
|
|
opponents[j] = opponents[j + 1];
|
|
|
|
opponentsCount--;
|
|
|
|
}
|
|
|
|
|
|
|
|
sub_80DA8C8(gUnknown_02039F24);
|
|
|
|
}
|
2018-05-10 23:54:30 +02:00
|
|
|
|
|
|
|
#ifdef NONMATCHING
|
|
|
|
void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame)
|
|
|
|
{
|
|
|
|
s32 i;
|
|
|
|
u8 opponentsCount = 0;
|
|
|
|
u8 opponents[100];
|
|
|
|
const u8 * r6;
|
|
|
|
|
|
|
|
if (gUnknown_02039F30 == 4)
|
|
|
|
return;
|
|
|
|
|
|
|
|
r6 = gUnknown_085898A4;
|
|
|
|
for (i = 0; i < ARRAY_COUNT(gContestOpponents); i++)
|
|
|
|
{
|
|
|
|
if (rank != gContestOpponents[i].whichRank)
|
|
|
|
continue;
|
|
|
|
if (isPostgame == TRUE)
|
|
|
|
{
|
|
|
|
if (r6[i] == 1)
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
if (r6[i] == 2)
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
if (contestType == CONTEST_CATEGORY_COOL && gContestOpponents[i].aiPool_Cool)
|
|
|
|
opponents[opponentsCount++] = i;
|
|
|
|
else if (contestType == CONTEST_CATEGORY_BEAUTY && gContestOpponents[i].aiPool_Beauty)
|
|
|
|
opponents[opponentsCount++] = i;
|
|
|
|
else if (contestType == CONTEST_CATEGORY_CUTE && gContestOpponents[i].aiPool_Cute)
|
|
|
|
opponents[opponentsCount++] = i;
|
|
|
|
else if (contestType == CONTEST_CATEGORY_SMART && gContestOpponents[i].aiPool_Smart)
|
|
|
|
opponents[opponentsCount++] = i;
|
|
|
|
else if (contestType == CONTEST_CATEGORY_TOUGH && gContestOpponents[i].aiPool_Tough)
|
|
|
|
opponents[opponentsCount++] = i;
|
|
|
|
}
|
|
|
|
opponents[opponentsCount] = 0xFF;
|
|
|
|
for (i = 0; i < 4 - gUnknown_02039F30; i++)
|
|
|
|
{
|
|
|
|
u16 rnd = sub_80F903C() % opponentsCount;
|
|
|
|
s32 j;
|
|
|
|
|
|
|
|
gContestMons[gUnknown_02039F30 + i] = gContestOpponents[opponents[rnd]];
|
|
|
|
sub_80DF9D4(gContestMons[gUnknown_02039F30 + i].trainerName);
|
|
|
|
sub_80DF9E0(gContestMons[gUnknown_02039F30 + i].nickname, GAME_LANGUAGE);
|
|
|
|
for (j = rnd; opponents[j] != 0xFF; j++)
|
|
|
|
opponents[j] = opponents[j + 1];
|
|
|
|
opponentsCount--;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#else
|
|
|
|
NAKED void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame)
|
|
|
|
{
|
|
|
|
asm_unified("\tpush {r4-r7,lr}\n"
|
|
|
|
"\tmov r7, r9\n"
|
|
|
|
"\tmov r6, r8\n"
|
|
|
|
"\tpush {r6,r7}\n"
|
|
|
|
"\tsub sp, 0x64\n"
|
|
|
|
"\tmov r8, r2\n"
|
|
|
|
"\tlsls r0, 24\n"
|
|
|
|
"\tlsrs r4, r0, 24\n"
|
|
|
|
"\tlsls r1, 24\n"
|
|
|
|
"\tlsrs r2, r1, 24\n"
|
|
|
|
"\tmovs r7, 0\n"
|
|
|
|
"\tldr r0, =gUnknown_02039F30\n"
|
|
|
|
"\tldrb r1, [r0]\n"
|
|
|
|
"\tmov r9, r0\n"
|
|
|
|
"\tcmp r1, 0x4\n"
|
|
|
|
"\tbne _080DACDE\n"
|
|
|
|
"\tb _080DADF6\n"
|
|
|
|
"_080DACDE:\n"
|
|
|
|
"\tmovs r5, 0\n"
|
|
|
|
"\tldr r3, =gContestOpponents\n"
|
|
|
|
"\tldr r6, =gUnknown_085898A4\n"
|
|
|
|
"_080DACE4:\n"
|
|
|
|
"\tldrb r0, [r3, 0x1C]\n"
|
|
|
|
"\tlsls r0, 30\n"
|
|
|
|
"\tlsrs r0, 30\n"
|
|
|
|
"\tcmp r2, r0\n"
|
|
|
|
"\tbne _080DAD56\n"
|
|
|
|
"\tmov r0, r8\n"
|
|
|
|
"\tcmp r0, 0x1\n"
|
|
|
|
"\tbne _080DAD08\n"
|
|
|
|
"\tldrb r0, [r6]\n"
|
|
|
|
"\tcmp r0, 0x1\n"
|
|
|
|
"\tbeq _080DAD56\n"
|
|
|
|
"\tb _080DAD0E\n"
|
|
|
|
"\t.pool\n"
|
|
|
|
"_080DAD08:\n"
|
|
|
|
"\tldrb r0, [r6]\n"
|
|
|
|
"\tcmp r0, 0x2\n"
|
|
|
|
"\tbeq _080DAD56\n"
|
|
|
|
"_080DAD0E:\n"
|
|
|
|
"\tcmp r4, 0\n"
|
|
|
|
"\tbne _080DAD1A\n"
|
|
|
|
"\tldrb r0, [r3, 0x1C]\n"
|
|
|
|
"\tlsls r0, 29\n"
|
|
|
|
"\tcmp r0, 0\n"
|
|
|
|
"\tblt _080DAD4A\n"
|
|
|
|
"_080DAD1A:\n"
|
|
|
|
"\tcmp r4, 0x1\n"
|
|
|
|
"\tbne _080DAD26\n"
|
|
|
|
"\tldrb r0, [r3, 0x1C]\n"
|
|
|
|
"\tlsls r0, 28\n"
|
|
|
|
"\tcmp r0, 0\n"
|
|
|
|
"\tblt _080DAD4A\n"
|
|
|
|
"_080DAD26:\n"
|
|
|
|
"\tcmp r4, 0x2\n"
|
|
|
|
"\tbne _080DAD32\n"
|
|
|
|
"\tldrb r0, [r3, 0x1C]\n"
|
|
|
|
"\tlsls r0, 27\n"
|
|
|
|
"\tcmp r0, 0\n"
|
|
|
|
"\tblt _080DAD4A\n"
|
|
|
|
"_080DAD32:\n"
|
|
|
|
"\tcmp r4, 0x3\n"
|
|
|
|
"\tbne _080DAD3E\n"
|
|
|
|
"\tldrb r0, [r3, 0x1C]\n"
|
|
|
|
"\tlsls r0, 26\n"
|
|
|
|
"\tcmp r0, 0\n"
|
|
|
|
"\tblt _080DAD4A\n"
|
|
|
|
"_080DAD3E:\n"
|
|
|
|
"\tcmp r4, 0x4\n"
|
|
|
|
"\tbne _080DAD56\n"
|
|
|
|
"\tldrb r0, [r3, 0x1C]\n"
|
|
|
|
"\tlsls r0, 25\n"
|
|
|
|
"\tcmp r0, 0\n"
|
|
|
|
"\tbge _080DAD56\n"
|
|
|
|
"_080DAD4A:\n"
|
|
|
|
"\tadds r0, r7, 0\n"
|
|
|
|
"\tadds r1, r0, 0x1\n"
|
|
|
|
"\tlsls r1, 24\n"
|
|
|
|
"\tlsrs r7, r1, 24\n"
|
|
|
|
"\tadd r0, sp\n"
|
|
|
|
"\tstrb r5, [r0]\n"
|
|
|
|
"_080DAD56:\n"
|
|
|
|
"\tadds r3, 0x40\n"
|
|
|
|
"\tadds r6, 0x1\n"
|
|
|
|
"\tadds r5, 0x1\n"
|
|
|
|
"\tcmp r5, 0x5F\n"
|
|
|
|
"\tbls _080DACE4\n"
|
|
|
|
"\tmov r3, sp\n"
|
|
|
|
"\tadds r1, r3, r7\n"
|
|
|
|
"\tmovs r0, 0xFF\n"
|
|
|
|
"\tstrb r0, [r1]\n"
|
|
|
|
"\tmovs r5, 0\n"
|
|
|
|
"\tmov r0, r9\n"
|
|
|
|
"\tldrb r1, [r0]\n"
|
|
|
|
"\tmovs r0, 0x4\n"
|
|
|
|
"\tsubs r0, r1\n"
|
|
|
|
"\tcmp r5, r0\n"
|
|
|
|
"\tbge _080DADF6\n"
|
|
|
|
"\tldr r3, =gContestMons\n"
|
|
|
|
"\tmov r8, r3\n"
|
|
|
|
"\tmov r6, r9\n"
|
|
|
|
"\tmovs r0, 0x2\n"
|
|
|
|
"\tadd r0, r8\n"
|
|
|
|
"\tmov r9, r0\n"
|
|
|
|
"_080DAD82:\n"
|
|
|
|
"\tbl sub_80F903C\n"
|
|
|
|
"\tlsls r0, 16\n"
|
|
|
|
"\tlsrs r0, 16\n"
|
|
|
|
"\tadds r1, r7, 0\n"
|
|
|
|
"\tbl __modsi3\n"
|
|
|
|
"\tadds r1, r0, 0\n"
|
|
|
|
"\tlsls r1, 16\n"
|
|
|
|
"\tlsrs r1, 16\n"
|
|
|
|
"\tldrb r0, [r6]\n"
|
|
|
|
"\tadds r0, r5\n"
|
|
|
|
"\tlsls r0, 6\n"
|
|
|
|
"\tadd r0, r8\n"
|
|
|
|
"\tldr r2, =gContestOpponents\n"
|
|
|
|
"\tmov r3, sp\n"
|
|
|
|
"\tadds r4, r3, r1\n"
|
|
|
|
"\tldrb r1, [r4]\n"
|
|
|
|
"\tlsls r1, 6\n"
|
|
|
|
"\tadds r1, r2\n"
|
|
|
|
"\tmovs r2, 0x40\n"
|
|
|
|
"\tbl memcpy\n"
|
|
|
|
"\tldrb r0, [r6]\n"
|
|
|
|
"\tadds r0, r5\n"
|
|
|
|
"\tlsls r0, 6\n"
|
|
|
|
"\tmov r1, r8\n"
|
|
|
|
"\tadds r1, 0xD\n"
|
|
|
|
"\tadds r0, r1\n"
|
|
|
|
"\tbl sub_80DF9D4\n"
|
|
|
|
"\tldrb r0, [r6]\n"
|
|
|
|
"\tadds r0, r5\n"
|
|
|
|
"\tlsls r0, 6\n"
|
|
|
|
"\tadd r0, r9\n"
|
|
|
|
"\tmovs r1, 0x2\n"
|
|
|
|
"\tbl sub_80DF9E0\n"
|
|
|
|
"\tldrb r0, [r4]\n"
|
|
|
|
"\tadds r3, r5, 0x1\n"
|
|
|
|
"\tsubs r1, r7, 0x1\n"
|
|
|
|
"\tcmp r0, 0xFF\n"
|
|
|
|
"\tbeq _080DADE6\n"
|
|
|
|
"\tadds r2, r4, 0\n"
|
|
|
|
"_080DADDA:\n"
|
|
|
|
"\tldrb r0, [r2, 0x1]\n"
|
|
|
|
"\tstrb r0, [r2]\n"
|
|
|
|
"\tadds r2, 0x1\n"
|
|
|
|
"\tldrb r0, [r2]\n"
|
|
|
|
"\tcmp r0, 0xFF\n"
|
|
|
|
"\tbne _080DADDA\n"
|
|
|
|
"_080DADE6:\n"
|
|
|
|
"\tlsls r0, r1, 24\n"
|
|
|
|
"\tlsrs r7, r0, 24\n"
|
|
|
|
"\tadds r5, r3, 0\n"
|
|
|
|
"\tldrb r1, [r6]\n"
|
|
|
|
"\tmovs r0, 0x4\n"
|
|
|
|
"\tsubs r0, r1\n"
|
|
|
|
"\tcmp r5, r0\n"
|
|
|
|
"\tblt _080DAD82\n"
|
|
|
|
"_080DADF6:\n"
|
|
|
|
"\tadd sp, 0x64\n"
|
|
|
|
"\tpop {r3,r4}\n"
|
|
|
|
"\tmov r8, r3\n"
|
|
|
|
"\tmov r9, r4\n"
|
|
|
|
"\tpop {r4-r7}\n"
|
|
|
|
"\tpop {r0}\n"
|
|
|
|
"\tbx r0\n"
|
|
|
|
"\t.pool");
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
// GetContestAvailability?
|
|
|
|
u8 sub_80DAE0C(struct Pokemon *pkmn)
|
|
|
|
{
|
|
|
|
u8 ribbon;
|
|
|
|
u8 retVal;
|
|
|
|
|
|
|
|
if (GetMonData(pkmn, MON_DATA_IS_EGG))
|
|
|
|
return 3;
|
|
|
|
if (GetMonData(pkmn, MON_DATA_HP) == 0)
|
|
|
|
return 4;
|
|
|
|
switch (gSpecialVar_ContestCategory)
|
|
|
|
{
|
|
|
|
case CONTEST_CATEGORY_COOL:
|
|
|
|
ribbon = GetMonData(pkmn, MON_DATA_COOL_RIBBON);
|
|
|
|
break;
|
|
|
|
case CONTEST_CATEGORY_BEAUTY:
|
|
|
|
ribbon = GetMonData(pkmn, MON_DATA_BEAUTY_RIBBON);
|
|
|
|
break;
|
|
|
|
case CONTEST_CATEGORY_CUTE:
|
|
|
|
ribbon = GetMonData(pkmn, MON_DATA_CUTE_RIBBON);
|
|
|
|
break;
|
|
|
|
case CONTEST_CATEGORY_SMART:
|
|
|
|
ribbon = GetMonData(pkmn, MON_DATA_SMART_RIBBON);
|
|
|
|
break;
|
|
|
|
case CONTEST_CATEGORY_TOUGH:
|
|
|
|
ribbon = GetMonData(pkmn, MON_DATA_TOUGH_RIBBON);
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Couldn't get this to match any other way.
|
|
|
|
// Returns 2, 1, or 0 respectively if ribbon's rank is above, equal, or below
|
|
|
|
// the current contest rank.
|
|
|
|
if (ribbon > gSpecialVar_ContestRank)
|
|
|
|
retVal = 2;
|
|
|
|
else if (ribbon >= gSpecialVar_ContestRank)
|
|
|
|
retVal = 1;
|
|
|
|
else
|
|
|
|
retVal = 0;
|
|
|
|
return retVal;
|
|
|
|
}
|
2018-05-11 00:16:58 +02:00
|
|
|
|
|
|
|
void sub_80DAEA4(void)
|
|
|
|
{
|
|
|
|
s32 i;
|
|
|
|
|
|
|
|
for (i = 0; i < 4; i++)
|
|
|
|
{
|
|
|
|
FillWindowPixelBuffer(gUnknown_02039F26[i], 0);
|
|
|
|
sub_80DAF04(i);
|
|
|
|
sub_80DAF88(i);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
u8 * sub_80DAED4(const u8 * src, u8 color)
|
|
|
|
{
|
|
|
|
u8 * ptr = StringCopy(gDisplayedStringBattle, gText_ColorTransparent);
|
|
|
|
ptr[-1] = color;
|
|
|
|
ptr = StringCopy(ptr, src);
|
|
|
|
|
|
|
|
return ptr;
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DAF04(u8 a0)
|
|
|
|
{
|
|
|
|
sub_80DAF1C(a0, a0 + 10);
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DAF1C(u8 a0, u8 a1)
|
|
|
|
{
|
|
|
|
u8 buffer[32];
|
|
|
|
s32 offset;
|
|
|
|
|
|
|
|
StringCopy(buffer, gText_Slash);
|
|
|
|
StringAppend(buffer, gContestMons[a0].trainerName);
|
|
|
|
sub_80DAED4(buffer, a1);
|
|
|
|
offset = GetStringRightAlignXOffset(7, gDisplayedStringBattle, 0x60);
|
|
|
|
if (offset > 55)
|
|
|
|
offset = 55;
|
2018-05-11 16:51:38 +02:00
|
|
|
Contest_PrintTextToBg0WindowAt(gUnknown_02039F26[a0], gDisplayedStringBattle, offset, 1, 7);
|
2018-05-11 00:16:58 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DAF88(u8 a0)
|
|
|
|
{
|
|
|
|
sub_80DAFA0(a0, a0 + 10);
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DAFA0(u8 a0, u8 a1)
|
|
|
|
{
|
|
|
|
sub_80DAED4(gContestMons[a0].nickname, a1);
|
2018-05-11 16:51:38 +02:00
|
|
|
Contest_PrintTextToBg0WindowAt(gUnknown_02039F26[a0], gDisplayedStringBattle, 5, 1, 7);
|
2018-05-11 00:16:58 +02:00
|
|
|
}
|
2018-05-11 01:28:52 +02:00
|
|
|
|
|
|
|
u16 sub_80DAFE0(u8 who, u8 contestCategory)
|
|
|
|
{
|
|
|
|
u8 statMain;
|
|
|
|
u8 statSub1;
|
|
|
|
u8 statSub2;
|
|
|
|
|
|
|
|
switch (contestCategory)
|
|
|
|
{
|
|
|
|
case CONTEST_CATEGORY_COOL:
|
|
|
|
statMain = gContestMons[who].cool;
|
|
|
|
statSub1 = gContestMons[who].tough;
|
|
|
|
statSub2 = gContestMons[who].beauty;
|
|
|
|
break;
|
|
|
|
case CONTEST_CATEGORY_BEAUTY:
|
|
|
|
statMain = gContestMons[who].beauty;
|
|
|
|
statSub1 = gContestMons[who].cool;
|
|
|
|
statSub2 = gContestMons[who].cute;
|
|
|
|
break;
|
|
|
|
case CONTEST_CATEGORY_CUTE:
|
|
|
|
statMain = gContestMons[who].cute;
|
|
|
|
statSub1 = gContestMons[who].beauty;
|
|
|
|
statSub2 = gContestMons[who].smart;
|
|
|
|
break;
|
|
|
|
case CONTEST_CATEGORY_SMART:
|
|
|
|
statMain = gContestMons[who].smart;
|
|
|
|
statSub1 = gContestMons[who].cute;
|
|
|
|
statSub2 = gContestMons[who].tough;
|
|
|
|
break;
|
|
|
|
case CONTEST_CATEGORY_TOUGH:
|
|
|
|
default:
|
|
|
|
statMain = gContestMons[who].tough;
|
|
|
|
statSub1 = gContestMons[who].smart;
|
|
|
|
statSub2 = gContestMons[who].cool;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return statMain + (statSub1 + statSub2 + gContestMons[who].sheen) / 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DB09C(u8 a0)
|
|
|
|
{
|
|
|
|
s32 i;
|
|
|
|
|
|
|
|
for (i = 0; i < 4; i++)
|
|
|
|
gContestMonConditions[i] = sub_80DAFE0(i, a0);
|
|
|
|
}
|
|
|
|
|
|
|
|
u8 sub_80DB0C4(void)
|
|
|
|
{
|
|
|
|
u8 spriteId;
|
|
|
|
|
|
|
|
LoadCompressedObjectPic(&gUnknown_08587C00);
|
|
|
|
LoadCompressedPalette(gContest2Pal, 0x110, 32);
|
|
|
|
spriteId = CreateSprite(&gSpriteTemplate_8587BE8, 112, 36, 30);
|
|
|
|
gSprites[spriteId].oam.paletteNum = 1;
|
|
|
|
gSprites[spriteId].callback = SpriteCallbackDummy;
|
|
|
|
return spriteId;
|
|
|
|
}
|
|
|
|
|
|
|
|
u8 sub_80DB120(void)
|
|
|
|
{
|
|
|
|
u8 spriteId;
|
|
|
|
|
|
|
|
LoadCompressedObjectPic(&gUnknown_08587C08);
|
|
|
|
LoadCompressedObjectPalette(&gUnknown_08587C10);
|
|
|
|
spriteId = CreateSprite(&gSpriteTemplate_8587C18, 96, 10, 29);
|
|
|
|
gSprites[spriteId].invisible = TRUE;
|
|
|
|
gSprites[spriteId].data[0] = gSprites[spriteId].oam.tileNum;
|
|
|
|
return spriteId;
|
|
|
|
}
|
|
|
|
|
|
|
|
u8 sub_80DB174(u16 species, u32 otId, u32 personality, u32 index)
|
|
|
|
{
|
|
|
|
u8 spriteId;
|
|
|
|
species = sub_80DE84C(species);
|
|
|
|
|
|
|
|
if (index == gContestPlayerMonIndex)
|
|
|
|
HandleLoadSpecialPokePic_2(gMonBackPicTable + species, gMonSpritesGfxPtr->sprites[0], species, personality);
|
|
|
|
else
|
|
|
|
HandleLoadSpecialPokePic_DontHandleDeoxys(gMonBackPicTable + species, gMonSpritesGfxPtr->sprites[0], species, personality);
|
|
|
|
|
|
|
|
LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, otId, personality), 0x120, 0x20);
|
2018-08-11 19:04:28 +02:00
|
|
|
SetMultiuseSpriteTemplateToPokemon(species, 0);
|
2018-05-11 01:28:52 +02:00
|
|
|
|
2018-10-06 23:04:53 +02:00
|
|
|
spriteId = CreateSprite(&gMultiuseSpriteTemplate, 0x70, GetBattlerSpriteFinal_Y(2, species, FALSE), 30);
|
2018-05-11 01:28:52 +02:00
|
|
|
gSprites[spriteId].oam.paletteNum = 2;
|
|
|
|
gSprites[spriteId].oam.priority = 2;
|
|
|
|
gSprites[spriteId].subpriority = sub_80A82E4(2);
|
|
|
|
gSprites[spriteId].callback = SpriteCallbackDummy;
|
|
|
|
gSprites[spriteId].data[0] = gSprites[spriteId].oam.paletteNum;
|
|
|
|
gSprites[spriteId].data[2] = species;
|
|
|
|
if (IsSpeciesNotUnown(species))
|
|
|
|
gSprites[spriteId].affineAnims = gUnknown_082FF6C0;
|
|
|
|
else
|
|
|
|
gSprites[spriteId].affineAnims = gUnknown_082FF694;
|
|
|
|
StartSpriteAffineAnim(gSprites + spriteId, 0);
|
|
|
|
|
|
|
|
return spriteId;
|
|
|
|
}
|
2018-05-11 14:44:21 +02:00
|
|
|
|
|
|
|
bool8 IsSpeciesNotUnown(u16 species)
|
|
|
|
{
|
|
|
|
if (species == SPECIES_UNOWN)
|
|
|
|
return FALSE;
|
|
|
|
else
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DB2BC(void)
|
|
|
|
{
|
|
|
|
CpuCopy16(gContestResources->field_24[0], gContestResources->field_24[0] + 0x500, 0x280);
|
|
|
|
CpuCopy16(gContestResources->field_24[2], gContestResources->field_24[2] + 0x500, 0x280);
|
|
|
|
}
|
|
|
|
|
|
|
|
u16 sub_80DB2EC(u16 a0, u8 a1)
|
|
|
|
{
|
|
|
|
u16 var;
|
|
|
|
|
|
|
|
switch (gContestEffects[gContestMoves[a0].effect].effectType)
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
case 1:
|
|
|
|
case 8:
|
|
|
|
var = 0x9082;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
case 3:
|
|
|
|
var = 0x9088;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
var = 0x9086;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
var += 0x9000 + (a1 << 12);
|
|
|
|
return var;
|
|
|
|
}
|
|
|
|
|
|
|
|
void prints_contest_move_description(u16 a)
|
|
|
|
{
|
|
|
|
u8 category;
|
|
|
|
u16 categoryTile;
|
|
|
|
u8 numHearts;
|
|
|
|
|
|
|
|
category = gContestMoves[a].contestCategory;
|
|
|
|
if (category == CONTEST_CATEGORY_COOL)
|
|
|
|
categoryTile = 0x4040;
|
|
|
|
else if (category == CONTEST_CATEGORY_BEAUTY)
|
|
|
|
categoryTile = 0x4045;
|
|
|
|
else if (category == CONTEST_CATEGORY_CUTE)
|
|
|
|
categoryTile = 0x404A;
|
|
|
|
else if (category == CONTEST_CATEGORY_SMART)
|
|
|
|
categoryTile = 0x406A;
|
|
|
|
else
|
|
|
|
categoryTile = 0x408A;
|
|
|
|
|
2018-05-11 16:51:38 +02:00
|
|
|
ContestBG_FillBoxWithIncrementingTile(0, categoryTile, 0x0b, 0x1f, 0x05, 0x01, 0x11, 0x01);
|
|
|
|
ContestBG_FillBoxWithIncrementingTile(0, categoryTile + 0x10, 0x0b, 0x20, 0x05, 0x01, 0x11, 0x01);
|
2018-05-11 14:44:21 +02:00
|
|
|
|
|
|
|
if (gContestEffects[gContestMoves[a].effect].appeal == 0xFF)
|
|
|
|
numHearts = 0;
|
|
|
|
else
|
|
|
|
numHearts = gContestEffects[gContestMoves[a].effect].appeal / 10;
|
|
|
|
if (numHearts > 8)
|
|
|
|
numHearts = 8;
|
2018-05-11 16:51:38 +02:00
|
|
|
ContestBG_FillBoxWithTile(0, 0x5035, 0x15, 0x1f, 0x08, 0x01, 0x11);
|
|
|
|
ContestBG_FillBoxWithTile(0, 0x5012, 0x15, 0x1f, numHearts, 0x01, 0x11);
|
2018-05-11 14:44:21 +02:00
|
|
|
|
|
|
|
if (gContestEffects[gContestMoves[a].effect].jam == 0xFF)
|
|
|
|
numHearts = 0;
|
|
|
|
else
|
|
|
|
numHearts = gContestEffects[gContestMoves[a].effect].jam / 10;
|
|
|
|
if (numHearts > 8)
|
|
|
|
numHearts = 8;
|
2018-05-11 16:51:38 +02:00
|
|
|
ContestBG_FillBoxWithTile(0, 0x5036, 0x15, 0x20, 0x08, 0x01, 0x11);
|
|
|
|
ContestBG_FillBoxWithTile(0, 0x5014, 0x15, 0x20, numHearts, 0x01, 0x11);
|
2018-05-11 14:44:21 +02:00
|
|
|
|
|
|
|
FillWindowPixelBuffer(10, 0);
|
2018-05-11 16:51:38 +02:00
|
|
|
Contest_PrintTextToBg0WindowStd(10, gContestEffectDescriptionPointers[gContestMoves[a].effect]);
|
|
|
|
Contest_PrintTextToBg0WindowStd(9, gText_Slash);
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DB4E0(u16 move, u8 b)
|
|
|
|
{
|
|
|
|
u8 r7 = gUnknown_02039F26[b] * 5 + 2;
|
|
|
|
|
2018-08-15 11:43:57 +02:00
|
|
|
if (!Contest_IsMonsTurnDisabled(b) && move != MOVE_NONE)
|
2018-05-11 16:51:38 +02:00
|
|
|
{
|
|
|
|
u16 tile = sub_80DB2EC(move, b);
|
|
|
|
|
|
|
|
ContestBG_FillBoxWithIncrementingTile(0, tile, 20, r7, 2, 1, 17, 1);
|
|
|
|
ContestBG_FillBoxWithIncrementingTile(0, tile + 16, 20, r7 + 1, 2, 1, 17, 1);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
ContestBG_FillBoxWithTile(0, 0, 20, r7, 2, 2, 17);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DB584(void)
|
|
|
|
{
|
|
|
|
s32 i;
|
|
|
|
|
|
|
|
for (i = 0; i < 4; i++)
|
|
|
|
sub_80DB4E0(gContestResources->field_4[i].currMove, i);
|
|
|
|
}
|
|
|
|
|
|
|
|
u16 sub_80DB5B0(void)
|
|
|
|
{
|
|
|
|
return 0x2034;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 sub_80DB5B8(u8 contestantIdx, bool8 resetMod)
|
|
|
|
{
|
|
|
|
u8 r6;
|
|
|
|
s32 r4;
|
|
|
|
|
|
|
|
if (sContestantStatus[contestantIdx].conditionMod == 0)
|
|
|
|
return FALSE;
|
|
|
|
r6 = gUnknown_02039F26[contestantIdx] * 5 + 2;
|
|
|
|
r4 = sContestantStatus[contestantIdx].condition / 10;
|
|
|
|
if (sContestantStatus[contestantIdx].conditionMod == 1)
|
|
|
|
{
|
|
|
|
ContestBG_FillBoxWithTile(0, sub_80DB5B0(), 19, r6, 1, r4, 17);
|
|
|
|
if (resetMod)
|
|
|
|
{
|
|
|
|
PlaySE(SE_EXPMAX);
|
|
|
|
sContestantStatus[contestantIdx].conditionMod = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
ContestBG_FillBoxWithTile(0, 0, 19, r6 + r4, 1, 3 - r4, 17);
|
|
|
|
if (resetMod)
|
|
|
|
{
|
|
|
|
PlaySE(SE_FU_ZAKU2);
|
|
|
|
sContestantStatus[contestantIdx].conditionMod = 0;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
void sub_80DB69C(void)
|
|
|
|
{
|
|
|
|
s32 i;
|
|
|
|
s32 r6;
|
|
|
|
|
|
|
|
for (i = 0; i < 4; i++)
|
|
|
|
{
|
|
|
|
u8 r4 = gUnknown_02039F26[i] * 5 + 2;
|
|
|
|
u16 r5 = sub_80DB5B0();
|
|
|
|
|
|
|
|
r6 = sContestantStatus[i].condition / 10;
|
|
|
|
ContestBG_FillBoxWithTile(0, r5, 19, r4, 1, r6, 17);
|
|
|
|
ContestBG_FillBoxWithTile(0, 0, 19, r4 + r6, 1, 3 - r6, 17);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
u16 sub_80DB748(u8 status)
|
|
|
|
{
|
|
|
|
u16 var = 0;
|
|
|
|
|
|
|
|
switch (status)
|
|
|
|
{
|
|
|
|
case 0:
|
|
|
|
var = 0x80;
|
|
|
|
break;
|
|
|
|
case 1:
|
|
|
|
var = 0x84;
|
|
|
|
break;
|
|
|
|
case 2:
|
|
|
|
var = 0x86;
|
|
|
|
break;
|
|
|
|
case 3:
|
|
|
|
var = 0x88;
|
|
|
|
break;
|
|
|
|
case 4:
|
|
|
|
var = 0x82;
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
var += 0x9000;
|
|
|
|
return var;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool8 sub_80DB798(u8 a)
|
|
|
|
{
|
|
|
|
bool8 r9 = TRUE;
|
|
|
|
u16 r8 = 0;
|
|
|
|
u8 r7 = gUnknown_02039F26[a] * 5 + 2;
|
|
|
|
|
|
|
|
if (sContestantStatus[a].resistant != 0 || sContestantStatus[a].immune != 0 || sContestantStatus[a].jamSafetyCount != 0 || sContestantStatus[a].jamReduction != 0)
|
|
|
|
r8 = sub_80DB748(0);
|
|
|
|
else if (sContestantStatus[a].nervous)
|
|
|
|
r8 = sub_80DB748(1);
|
|
|
|
else if (sContestantStatus[a].numTurnsSkipped != 0 || sContestantStatus[a].noMoreTurns)
|
|
|
|
r8 = sub_80DB748(2);
|
|
|
|
else
|
|
|
|
r9 = FALSE;
|
|
|
|
if (r9)
|
|
|
|
{
|
|
|
|
ContestBG_FillBoxWithIncrementingTile(0, r8, 20, r7, 2, 1, 17, 1);
|
|
|
|
ContestBG_FillBoxWithIncrementingTile(0, r8 + 16, 20, r7 + 1, 2, 1, 17, 1);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
ContestBG_FillBoxWithTile(0, 0, 20, r7, 2, 2, 17);
|
|
|
|
}
|
|
|
|
return r9;
|
2018-05-11 14:44:21 +02:00
|
|
|
}
|