mirror of
https://github.com/Ninjdai1/pokeemerald.git
synced 2024-12-26 03:34:15 +01:00
Decompile contest_painting.c (#447)
This commit is contained in:
parent
d10ffe6dba
commit
1ca3656d74
File diff suppressed because it is too large
Load Diff
@ -1,106 +0,0 @@
|
|||||||
@ the third big chunk of data
|
|
||||||
|
|
||||||
.include "asm/macros.inc"
|
|
||||||
.include "constants/constants.inc"
|
|
||||||
|
|
||||||
.section .rodata
|
|
||||||
|
|
||||||
.align 2
|
|
||||||
gUnknown_085A989C:: @ 85A989C
|
|
||||||
.incbin "graphics/picture_frame/bg.gbapal"
|
|
||||||
|
|
||||||
.align 2
|
|
||||||
gUnknown_085A9A9C:: @ 85A9A9C
|
|
||||||
.incbin "graphics/picture_frame/frame0.4bpp.rl"
|
|
||||||
|
|
||||||
.align 2
|
|
||||||
gUnknown_085AAB20:: @ 85AAB20
|
|
||||||
.incbin "graphics/picture_frame/frame1.4bpp.rl"
|
|
||||||
|
|
||||||
.align 2
|
|
||||||
gUnknown_085AB750:: @ 85AB750
|
|
||||||
.incbin "graphics/picture_frame/frame2.4bpp.rl"
|
|
||||||
|
|
||||||
.align 2
|
|
||||||
gUnknown_085AC288:: @ 85AC288
|
|
||||||
.incbin "graphics/picture_frame/frame3.4bpp.rl"
|
|
||||||
|
|
||||||
.align 2
|
|
||||||
gUnknown_085AD240:: @ 85AD240
|
|
||||||
.incbin "graphics/picture_frame/frame4.4bpp.rl"
|
|
||||||
|
|
||||||
.align 2
|
|
||||||
gUnknown_085AE370:: @ 85AE370
|
|
||||||
.incbin "graphics/picture_frame/frame5.4bpp.rl"
|
|
||||||
|
|
||||||
.align 2
|
|
||||||
gUnknown_085AE974:: @ 85AE974
|
|
||||||
.incbin "graphics/picture_frame/frame0_map.bin.rl"
|
|
||||||
|
|
||||||
.align 2
|
|
||||||
gUnknown_085AEE80:: @ 85AEE80
|
|
||||||
.incbin "graphics/picture_frame/frame1_map.bin.rl"
|
|
||||||
|
|
||||||
.align 2
|
|
||||||
gUnknown_085AF38C:: @ 85AF38C
|
|
||||||
.incbin "graphics/picture_frame/frame2_map.bin.rl"
|
|
||||||
|
|
||||||
.align 2
|
|
||||||
gUnknown_085AF898:: @ 85AF898
|
|
||||||
.incbin "graphics/picture_frame/frame3_map.bin.rl"
|
|
||||||
|
|
||||||
.align 2
|
|
||||||
gUnknown_085AFDA4:: @ 85AFDA4
|
|
||||||
.incbin "graphics/picture_frame/frame4_map.bin.rl"
|
|
||||||
|
|
||||||
.align 2
|
|
||||||
gUnknown_085B02B0:: @ 85B02B0
|
|
||||||
.incbin "graphics/picture_frame/frame5_map.bin.rl"
|
|
||||||
|
|
||||||
.align 2
|
|
||||||
gUnknown_085B07C0:: @ 85B07C0
|
|
||||||
.4byte gContestCoolness
|
|
||||||
.4byte gContestBeauty
|
|
||||||
.4byte gContestCuteness
|
|
||||||
.4byte gContestSmartness
|
|
||||||
.4byte gContestToughness
|
|
||||||
|
|
||||||
.align 2
|
|
||||||
gContestRankTextPointers:: @ 85B07D4
|
|
||||||
.4byte gContestRankNormal
|
|
||||||
.4byte gContestRankSuper
|
|
||||||
.4byte gContestRankHyper
|
|
||||||
.4byte gContestRankMaster
|
|
||||||
.4byte gContestLink
|
|
||||||
|
|
||||||
.align 2
|
|
||||||
gUnknown_085B07E8:: @ 85B07E8
|
|
||||||
.4byte 0x000010a5
|
|
||||||
|
|
||||||
.align 2
|
|
||||||
gUnknown_085B07EC:: @ 85B07EC
|
|
||||||
window_template 0x01, 0x02, 0x0e, 0x1a, 0x04, 0x0f, 0x0001
|
|
||||||
|
|
||||||
.align 2
|
|
||||||
gContestPaintingDescriptionPointers:: @ 85B07F4
|
|
||||||
.4byte gContestPaintingCool1
|
|
||||||
.4byte gContestPaintingCool2
|
|
||||||
.4byte gContestPaintingCool3
|
|
||||||
.4byte gContestPaintingBeauty1
|
|
||||||
.4byte gContestPaintingBeauty2
|
|
||||||
.4byte gContestPaintingBeauty3
|
|
||||||
.4byte gContestPaintingCute1
|
|
||||||
.4byte gContestPaintingCute2
|
|
||||||
.4byte gContestPaintingCute3
|
|
||||||
.4byte gContestPaintingSmart1
|
|
||||||
.4byte gContestPaintingSmart2
|
|
||||||
.4byte gContestPaintingSmart3
|
|
||||||
.4byte gContestPaintingTough1
|
|
||||||
.4byte gContestPaintingTough2
|
|
||||||
.4byte gContestPaintingTough3
|
|
||||||
|
|
||||||
gUnknown_085B0830:: @ 85B0830
|
|
||||||
.4byte 0xc0003000, 0x00000000
|
|
||||||
|
|
||||||
gUnknown_085B0838:: @ 85B0838
|
|
||||||
.2byte 0x0000, 0x0000
|
|
@ -231,6 +231,7 @@ extern u8 gContestPlayerMonIndex;
|
|||||||
extern s16 gUnknown_02039F08[4];
|
extern s16 gUnknown_02039F08[4];
|
||||||
extern s16 gContestMonConditions[4];
|
extern s16 gContestMonConditions[4];
|
||||||
extern u8 gIsLinkContest;
|
extern u8 gIsLinkContest;
|
||||||
|
extern struct ContestWinner gUnknown_02039F3C;
|
||||||
|
|
||||||
struct Shared18000
|
struct Shared18000
|
||||||
{
|
{
|
||||||
|
@ -1,7 +1,16 @@
|
|||||||
#ifndef GUARD_CONTESTPAINTING_H
|
#ifndef GUARD_CONTESTPAINTING_H
|
||||||
#define GUARD_CONTESTPAINTING_H
|
#define GUARD_CONTESTPAINTING_H
|
||||||
|
|
||||||
void sub_812FDA8(u32);
|
enum
|
||||||
void sub_812FDEC(void);
|
{
|
||||||
|
CONTESTRESULT_COOL = 9,
|
||||||
|
CONTESTRESULT_BEAUTY = 13,
|
||||||
|
CONTESTRESULT_CUTE = 2,
|
||||||
|
CONTESTRESULT_SMART = 36,
|
||||||
|
CONTESTRESULT_TOUGH = 6,
|
||||||
|
};
|
||||||
|
|
||||||
|
void sub_812FDA8(int);
|
||||||
|
void CB2_ContestPainting(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
28
include/contest_painting_effects.h
Executable file
28
include/contest_painting_effects.h
Executable file
@ -0,0 +1,28 @@
|
|||||||
|
#ifndef GUARD_CONTEST_PAINTING_EFFECTS_H
|
||||||
|
#define GUARD_CONTEST_PAINTING_EFFECTS_H
|
||||||
|
|
||||||
|
struct Unk030061A0
|
||||||
|
{
|
||||||
|
u8 var_0;
|
||||||
|
u8 pad1[3];
|
||||||
|
u16 (*var_4)[][32];
|
||||||
|
u16 *var_8;
|
||||||
|
u8 pad0C[4];
|
||||||
|
u32 var_10;
|
||||||
|
u16 var_14;
|
||||||
|
u16 var_16;
|
||||||
|
u8 var_18;
|
||||||
|
u8 var_19;
|
||||||
|
u8 var_1A;
|
||||||
|
u8 var_1B;
|
||||||
|
u8 var_1C;
|
||||||
|
u8 var_1D;
|
||||||
|
u8 var_1E;
|
||||||
|
u8 var_1F;
|
||||||
|
};
|
||||||
|
|
||||||
|
void sub_8124F2C(struct Unk030061A0 *);
|
||||||
|
void sub_81261A4(struct Unk030061A0 *);
|
||||||
|
void sub_8126058(struct Unk030061A0 *);
|
||||||
|
|
||||||
|
#endif
|
@ -1226,6 +1226,7 @@ extern const u8 gText_SpaceAndSpace[];
|
|||||||
extern const u8 gText_CommaSpace[];
|
extern const u8 gText_CommaSpace[];
|
||||||
extern const u8 gText_NewLine[];
|
extern const u8 gText_NewLine[];
|
||||||
extern const u8 gText_ScrollTextUp[];
|
extern const u8 gText_ScrollTextUp[];
|
||||||
|
extern const u8 gText_Space[];
|
||||||
extern const u8 gText_Space2[];
|
extern const u8 gText_Space2[];
|
||||||
extern const u8 gText_Are[];
|
extern const u8 gText_Are[];
|
||||||
extern const u8 gText_Are2[];
|
extern const u8 gText_Are2[];
|
||||||
|
@ -186,11 +186,10 @@ SECTIONS {
|
|||||||
src/dewford_trend.o(.text);
|
src/dewford_trend.o(.text);
|
||||||
src/heal_location.o(.text);
|
src/heal_location.o(.text);
|
||||||
src/region_map.o(.text);
|
src/region_map.o(.text);
|
||||||
asm/cute_sketch.o(.text);
|
asm/contest_painting_effects.o(.text);
|
||||||
src/decoration.o(.text);
|
src/decoration.o(.text);
|
||||||
src/slot_machine.o(.text);
|
src/slot_machine.o(.text);
|
||||||
src/contest_painting.o(.text);
|
src/contest_painting.o(.text);
|
||||||
asm/contest_painting.o(.text);
|
|
||||||
src/battle_ai_script_commands.o(.text);
|
src/battle_ai_script_commands.o(.text);
|
||||||
src/trader.o(.text);
|
src/trader.o(.text);
|
||||||
src/starter_choose.o(.text);
|
src/starter_choose.o(.text);
|
||||||
@ -511,11 +510,11 @@ SECTIONS {
|
|||||||
src/menu_helpers.o(.rodata);
|
src/menu_helpers.o(.rodata);
|
||||||
src/heal_location.o(.rodata);
|
src/heal_location.o(.rodata);
|
||||||
src/region_map.o(.rodata);
|
src/region_map.o(.rodata);
|
||||||
data/cute_sketch.o(.rodata);
|
data/contest_painting_effects.o(.rodata);
|
||||||
src/decoration.o(.rodata);
|
src/decoration.o(.rodata);
|
||||||
src/slot_machine.o(.rodata);
|
src/slot_machine.o(.rodata);
|
||||||
data/slot_machine.o(.rodata);
|
data/slot_machine.o(.rodata);
|
||||||
data/contest_painting.o(.rodata);
|
src/contest_painting.o(.rodata);
|
||||||
src/battle_ai_script_commands.o(.rodata);
|
src/battle_ai_script_commands.o(.rodata);
|
||||||
src/trader.o(.rodata);
|
src/trader.o(.rodata);
|
||||||
src/starter_choose.o(.rodata);
|
src/starter_choose.o(.rodata);
|
||||||
|
@ -79,9 +79,9 @@ static void sub_817330C(struct Sprite *);
|
|||||||
|
|
||||||
struct BallCaptureSuccessStarData
|
struct BallCaptureSuccessStarData
|
||||||
{
|
{
|
||||||
s8 xOffset;
|
s8 xOffset;
|
||||||
s8 yOffset;
|
s8 yOffset;
|
||||||
s8 unk2;
|
s8 unk2;
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct BallCaptureSuccessStarData sBallCaptureSuccessStarData[] =
|
static const struct BallCaptureSuccessStarData sBallCaptureSuccessStarData[] =
|
||||||
@ -478,7 +478,7 @@ static void sub_8170660(u8 taskId)
|
|||||||
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
|
SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR);
|
||||||
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
|
SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR);
|
||||||
if (!IsContest())
|
if (!IsContest())
|
||||||
SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
|
SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0);
|
||||||
|
|
||||||
SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON);
|
SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON);
|
||||||
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
||||||
@ -522,9 +522,9 @@ static void sub_8170834(u8 *paletteId1, u8 *paletteId2, u8 battler)
|
|||||||
|
|
||||||
void sub_8170920(u8 taskId)
|
void sub_8170920(u8 taskId)
|
||||||
{
|
{
|
||||||
u8 paletteId1, paletteId2;
|
u8 paletteId1, paletteId2;
|
||||||
sub_8170834(&paletteId1, &paletteId2, gBattleAnimAttacker);
|
sub_8170834(&paletteId1, &paletteId2, gBattleAnimAttacker);
|
||||||
DestroyAnimVisualTask(taskId);
|
DestroyAnimVisualTask(taskId);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sub_817094C(u8 battler)
|
static void sub_817094C(u8 battler)
|
||||||
@ -548,8 +548,8 @@ static void sub_817094C(u8 battler)
|
|||||||
|
|
||||||
void sub_81709EC(u8 taskId)
|
void sub_81709EC(u8 taskId)
|
||||||
{
|
{
|
||||||
sub_817094C(gBattleAnimAttacker);
|
sub_817094C(gBattleAnimAttacker);
|
||||||
DestroyAnimVisualTask(taskId);
|
DestroyAnimVisualTask(taskId);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sub_8170A0C(u8 taskId)
|
void sub_8170A0C(u8 taskId)
|
||||||
@ -1162,13 +1162,13 @@ static void sub_81717F8(struct Sprite *sprite)
|
|||||||
sprite->data[4]++;
|
sprite->data[4]++;
|
||||||
if (sprite->data[4] == 40)
|
if (sprite->data[4] == 40)
|
||||||
{
|
{
|
||||||
PlaySE(SE_RG_GETTING);
|
PlaySE(SE_RG_GETTING);
|
||||||
BlendPalettes(0x10000 << sprite->oam.paletteNum, 6, RGB(0, 0, 0));
|
BlendPalettes(0x10000 << sprite->oam.paletteNum, 6, RGB(0, 0, 0));
|
||||||
sub_81719EC(sprite);
|
sub_81719EC(sprite);
|
||||||
}
|
}
|
||||||
else if (sprite->data[4] == 60)
|
else if (sprite->data[4] == 60)
|
||||||
{
|
{
|
||||||
BeginNormalPaletteFade(0x10000 << sprite->oam.paletteNum, 2, 6, 0, RGB(0, 0, 0));
|
BeginNormalPaletteFade(0x10000 << sprite->oam.paletteNum, 2, 6, 0, RGB(0, 0, 0));
|
||||||
}
|
}
|
||||||
else if (sprite->data[4] == 95)
|
else if (sprite->data[4] == 95)
|
||||||
{
|
{
|
||||||
@ -1243,41 +1243,41 @@ static void sub_81719C0(struct Sprite *sprite)
|
|||||||
|
|
||||||
static void sub_81719EC(struct Sprite *sprite)
|
static void sub_81719EC(struct Sprite *sprite)
|
||||||
{
|
{
|
||||||
u32 i;
|
u32 i;
|
||||||
u8 subpriority;
|
u8 subpriority;
|
||||||
|
|
||||||
if (sprite->subpriority)
|
if (sprite->subpriority)
|
||||||
{
|
{
|
||||||
subpriority = sprite->subpriority - 1;
|
subpriority = sprite->subpriority - 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
subpriority = 0;
|
subpriority = 0;
|
||||||
sprite->subpriority = 1;
|
sprite->subpriority = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
sub_8171D60(4);
|
sub_8171D60(4);
|
||||||
for (i = 0; i < 3; i++)
|
for (i = 0; i < 3; i++)
|
||||||
{
|
{
|
||||||
u8 spriteId = CreateSprite(&gUnknown_085E51F0[4], sprite->pos1.x, sprite->pos1.y, subpriority);
|
u8 spriteId = CreateSprite(&gUnknown_085E51F0[4], sprite->pos1.x, sprite->pos1.y, subpriority);
|
||||||
if (spriteId != MAX_SPRITES)
|
if (spriteId != MAX_SPRITES)
|
||||||
{
|
{
|
||||||
gSprites[spriteId].data[0] = 24;
|
gSprites[spriteId].data[0] = 24;
|
||||||
gSprites[spriteId].data[2] = sprite->pos1.x + sBallCaptureSuccessStarData[i].xOffset;
|
gSprites[spriteId].data[2] = sprite->pos1.x + sBallCaptureSuccessStarData[i].xOffset;
|
||||||
gSprites[spriteId].data[4] = sprite->pos1.y + sBallCaptureSuccessStarData[i].yOffset;
|
gSprites[spriteId].data[4] = sprite->pos1.y + sBallCaptureSuccessStarData[i].yOffset;
|
||||||
gSprites[spriteId].data[5] = sBallCaptureSuccessStarData[i].unk2;
|
gSprites[spriteId].data[5] = sBallCaptureSuccessStarData[i].unk2;
|
||||||
InitAnimArcTranslation(&gSprites[spriteId]);
|
InitAnimArcTranslation(&gSprites[spriteId]);
|
||||||
gSprites[spriteId].callback = sub_8171AAC;
|
gSprites[spriteId].callback = sub_8171AAC;
|
||||||
StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[4]);
|
StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[4]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sub_8171AAC(struct Sprite *sprite)
|
static void sub_8171AAC(struct Sprite *sprite)
|
||||||
{
|
{
|
||||||
sprite->invisible = !sprite->invisible;
|
sprite->invisible = !sprite->invisible;
|
||||||
if (TranslateAnimArc(sprite))
|
if (TranslateAnimArc(sprite))
|
||||||
DestroySprite(sprite);
|
DestroySprite(sprite);
|
||||||
}
|
}
|
||||||
|
|
||||||
// fakematching. I think the return type of ItemIdToBallId()
|
// fakematching. I think the return type of ItemIdToBallId()
|
||||||
|
@ -1,8 +1,709 @@
|
|||||||
#include "global.h"
|
#include "global.h"
|
||||||
|
#include "alloc.h"
|
||||||
|
#include "battle.h"
|
||||||
|
#include "bg.h"
|
||||||
|
#include "contest.h"
|
||||||
|
#include "contest_painting.h"
|
||||||
|
#include "contest_painting_effects.h"
|
||||||
|
#include "battle_gfx_sfx_util.h"
|
||||||
|
#include "decompress.h"
|
||||||
|
#include "gpu_regs.h"
|
||||||
|
#include "international_string_util.h"
|
||||||
|
#include "main.h"
|
||||||
|
#include "lilycove_lady.h"
|
||||||
|
#include "palette.h"
|
||||||
|
#include "random.h"
|
||||||
|
#include "scanline_effect.h"
|
||||||
|
#include "string_util.h"
|
||||||
|
#include "strings.h"
|
||||||
|
#include "text.h"
|
||||||
|
#include "window.h"
|
||||||
|
#include "constants/rgb.h"
|
||||||
|
|
||||||
|
extern u8 gUnknown_02039F5C;
|
||||||
|
extern u8 gUnknown_02039F5D;
|
||||||
|
|
||||||
|
extern u16 (*gUnknown_03006190)[][32];
|
||||||
|
extern struct ContestWinner *gUnknown_030061C0;
|
||||||
|
extern u16 *gContestPaintingMonPalette;
|
||||||
|
extern struct Unk030061A0 gUnknown_030061A0;
|
||||||
|
|
||||||
// IWRAM bss
|
// IWRAM bss
|
||||||
IWRAM_DATA u8 gUnknown_030011F0;
|
IWRAM_DATA u8 gContestPaintingState;
|
||||||
IWRAM_DATA u16 gUnknown_030011F2;
|
IWRAM_DATA u16 gContestPaintingMosaicVal;
|
||||||
IWRAM_DATA u16 gUnknown_030011F4;
|
IWRAM_DATA u16 gContestPaintingFadeCounter;
|
||||||
IWRAM_DATA u8 gUnknown_030011F6;
|
IWRAM_DATA bool8 gUnknown_030011F6;
|
||||||
IWRAM_DATA u8 gUnknown_030011F7;
|
IWRAM_DATA u8 gContestPaintingWindowId;
|
||||||
|
|
||||||
|
static void ShowContestPainting(void);
|
||||||
|
static void HoldContestPainting(void);
|
||||||
|
static void InitContestPaintingWindow(void);
|
||||||
|
static void InitContestPaintingBg(void);
|
||||||
|
static void InitContestPaintingVars(bool8);
|
||||||
|
static void sub_8130884(u8, u8);
|
||||||
|
static void PrintContestPaintingCaption(u8, u8);
|
||||||
|
static void VBlankCB_ContestPainting(void);
|
||||||
|
static void sub_8130380(u8 *spritePixels, u16 *palette, u16 (*destColorBuffer)[64][64]);
|
||||||
|
|
||||||
|
extern const u8 gUnknown_0827EA0C[];
|
||||||
|
extern const struct CompressedSpriteSheet gMonFrontPicTable[];
|
||||||
|
extern const struct CompressedSpriteSheet gMonBackPicTable[];
|
||||||
|
extern const u8 gContestCoolness[];
|
||||||
|
extern const u8 gContestBeauty[];
|
||||||
|
extern const u8 gContestCuteness[];
|
||||||
|
extern const u8 gContestSmartness[];
|
||||||
|
extern const u8 gContestToughness[];
|
||||||
|
extern const u8 gContestRankNormal[];
|
||||||
|
extern const u8 gContestRankSuper[];
|
||||||
|
extern const u8 gContestRankHyper[];
|
||||||
|
extern const u8 gContestRankMaster[];
|
||||||
|
extern const u8 gContestLink[];
|
||||||
|
extern const u8 gContestPaintingCool1[];
|
||||||
|
extern const u8 gContestPaintingCool2[];
|
||||||
|
extern const u8 gContestPaintingCool3[];
|
||||||
|
extern const u8 gContestPaintingBeauty1[];
|
||||||
|
extern const u8 gContestPaintingBeauty2[];
|
||||||
|
extern const u8 gContestPaintingBeauty3[];
|
||||||
|
extern const u8 gContestPaintingCute1[];
|
||||||
|
extern const u8 gContestPaintingCute2[];
|
||||||
|
extern const u8 gContestPaintingCute3[];
|
||||||
|
extern const u8 gContestPaintingSmart1[];
|
||||||
|
extern const u8 gContestPaintingSmart2[];
|
||||||
|
extern const u8 gContestPaintingSmart3[];
|
||||||
|
extern const u8 gContestPaintingTough1[];
|
||||||
|
extern const u8 gContestPaintingTough2[];
|
||||||
|
extern const u8 gContestPaintingTough3[];
|
||||||
|
|
||||||
|
const u16 gPictureFramePalettes[] = INCBIN_U16("graphics/picture_frame/bg.gbapal");
|
||||||
|
const u8 gPictureFrameTiles_0[] = INCBIN_U8("graphics/picture_frame/frame0.4bpp.rl");
|
||||||
|
const u8 gPictureFrameTiles_1[] = INCBIN_U8("graphics/picture_frame/frame1.4bpp.rl");
|
||||||
|
const u8 gPictureFrameTiles_2[] = INCBIN_U8("graphics/picture_frame/frame2.4bpp.rl");
|
||||||
|
const u8 gPictureFrameTiles_3[] = INCBIN_U8("graphics/picture_frame/frame3.4bpp.rl");
|
||||||
|
const u8 gPictureFrameTiles_4[] = INCBIN_U8("graphics/picture_frame/frame4.4bpp.rl");
|
||||||
|
const u8 gPictureFrameTiles_5[] = INCBIN_U8("graphics/picture_frame/frame5.4bpp.rl");
|
||||||
|
const u8 gPictureFrameTilemap_0[] = INCBIN_U8("graphics/picture_frame/frame0_map.bin.rl");
|
||||||
|
const u8 gPictureFrameTilemap_1[] = INCBIN_U8("graphics/picture_frame/frame1_map.bin.rl");
|
||||||
|
const u8 gPictureFrameTilemap_2[] = INCBIN_U8("graphics/picture_frame/frame2_map.bin.rl");
|
||||||
|
const u8 gPictureFrameTilemap_3[] = INCBIN_U8("graphics/picture_frame/frame3_map.bin.rl");
|
||||||
|
const u8 gPictureFrameTilemap_4[] = INCBIN_U8("graphics/picture_frame/frame4_map.bin.rl");
|
||||||
|
const u8 gPictureFrameTilemap_5[] = INCBIN_U8("graphics/picture_frame/frame5_map.bin.rl");
|
||||||
|
|
||||||
|
const u8 *const gUnknown_085B07C0[] =
|
||||||
|
{
|
||||||
|
gContestCoolness,
|
||||||
|
gContestBeauty,
|
||||||
|
gContestCuteness,
|
||||||
|
gContestSmartness,
|
||||||
|
gContestToughness,
|
||||||
|
};
|
||||||
|
|
||||||
|
const u8 *const gContestRankTextPointers[] =
|
||||||
|
{
|
||||||
|
gContestRankNormal,
|
||||||
|
gContestRankSuper,
|
||||||
|
gContestRankHyper,
|
||||||
|
gContestRankMaster,
|
||||||
|
gContestLink,
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct BgTemplate gUnknown_085B07E8[] =
|
||||||
|
{
|
||||||
|
{
|
||||||
|
.bg = 1,
|
||||||
|
.charBaseIndex = 1,
|
||||||
|
.mapBaseIndex = 10,
|
||||||
|
.screenSize = 0,
|
||||||
|
.paletteMode = 0,
|
||||||
|
.priority = 1,
|
||||||
|
.baseTile = 0,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct WindowTemplate gUnknown_085B07EC =
|
||||||
|
{
|
||||||
|
.bg = 1,
|
||||||
|
.tilemapLeft = 2,
|
||||||
|
.tilemapTop = 14,
|
||||||
|
.width = 26,
|
||||||
|
.height = 4,
|
||||||
|
.paletteNum = 15,
|
||||||
|
.baseBlock = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
const u8 *const gContestPaintingDescriptionPointers[] =
|
||||||
|
{
|
||||||
|
gContestPaintingCool1,
|
||||||
|
gContestPaintingCool2,
|
||||||
|
gContestPaintingCool3,
|
||||||
|
gContestPaintingBeauty1,
|
||||||
|
gContestPaintingBeauty2,
|
||||||
|
gContestPaintingBeauty3,
|
||||||
|
gContestPaintingCute1,
|
||||||
|
gContestPaintingCute2,
|
||||||
|
gContestPaintingCute3,
|
||||||
|
gContestPaintingSmart1,
|
||||||
|
gContestPaintingSmart2,
|
||||||
|
gContestPaintingSmart3,
|
||||||
|
gContestPaintingTough1,
|
||||||
|
gContestPaintingTough2,
|
||||||
|
gContestPaintingTough3,
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct OamData gUnknown_085B0830 =
|
||||||
|
{
|
||||||
|
.y = 0,
|
||||||
|
.affineMode = ST_OAM_AFFINE_OFF,
|
||||||
|
.objMode = ST_OAM_OBJ_NORMAL,
|
||||||
|
.mosaic = 1,
|
||||||
|
.bpp = ST_OAM_8BPP,
|
||||||
|
.shape = ST_OAM_SQUARE,
|
||||||
|
.x = 0,
|
||||||
|
.matrixNum = 0,
|
||||||
|
.size = 3,
|
||||||
|
.tileNum = 0,
|
||||||
|
.priority = 0,
|
||||||
|
.paletteNum = 0,
|
||||||
|
.affineParam = 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
const u16 gUnknown_085B0838[] = {RGB(0, 0, 0), RGB(0, 0, 0)};
|
||||||
|
|
||||||
|
void sub_812FDA8(int contestWinner)
|
||||||
|
{
|
||||||
|
// probably fakematching
|
||||||
|
u8 *ptr1 = &gUnknown_02039F5D;
|
||||||
|
u8 *ptr2 = &gUnknown_02039F5C;
|
||||||
|
gUnknown_02039F3C = gSaveBlock1Ptr->contestWinners[contestWinner - 1];
|
||||||
|
*ptr1 = contestWinner - 1;
|
||||||
|
*ptr2 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CB2_ContestPainting(void)
|
||||||
|
{
|
||||||
|
ShowContestPainting();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void CB2_HoldContestPainting(void)
|
||||||
|
{
|
||||||
|
HoldContestPainting();
|
||||||
|
RunTextPrinters();
|
||||||
|
UpdatePaletteFade();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void CB2_QuitContestPainting(void)
|
||||||
|
{
|
||||||
|
SetMainCallback2(gMain.savedCallback);
|
||||||
|
FREE_AND_SET_NULL(gContestPaintingMonPalette);
|
||||||
|
FREE_AND_SET_NULL(gUnknown_03006190);
|
||||||
|
RemoveWindow(gContestPaintingWindowId);
|
||||||
|
Free(GetBgTilemapBuffer(1));
|
||||||
|
FreeMonSpritesGfx();
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ShowContestPainting(void)
|
||||||
|
{
|
||||||
|
switch (gMain.state)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
ScanlineEffect_Stop();
|
||||||
|
SetVBlankCallback(NULL);
|
||||||
|
AllocateMonSpritesGfx();
|
||||||
|
gUnknown_030061C0 = &gUnknown_02039F3C;
|
||||||
|
InitContestPaintingVars(1);
|
||||||
|
InitContestPaintingBg();
|
||||||
|
gMain.state++;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
ResetPaletteFade();
|
||||||
|
DmaFillLarge32(3, 0, (void *)BG_VRAM, 0x18000, 0x1000);
|
||||||
|
ResetSpriteData();
|
||||||
|
gMain.state++;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
SeedRng(gMain.vblankCounter1);
|
||||||
|
InitKeys();
|
||||||
|
InitContestPaintingWindow();
|
||||||
|
gMain.state++;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
sub_8130884(gUnknown_02039F5D, gUnknown_02039F5C);
|
||||||
|
gMain.state++;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
PrintContestPaintingCaption(gUnknown_02039F5D, gUnknown_02039F5C);
|
||||||
|
LoadPalette(gUnknown_085B0838, 0, 1 * 2);
|
||||||
|
DmaClear32(3, PLTT, PLTT_SIZE);
|
||||||
|
BeginFastPaletteFade(2);
|
||||||
|
SetVBlankCallback(VBlankCB_ContestPainting);
|
||||||
|
gContestPaintingState = 0;
|
||||||
|
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON);
|
||||||
|
SetMainCallback2(CB2_HoldContestPainting);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void HoldContestPainting(void)
|
||||||
|
{
|
||||||
|
switch (gContestPaintingState)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
if (!gPaletteFade.active)
|
||||||
|
gContestPaintingState = 1;
|
||||||
|
if (gUnknown_030011F6 && gContestPaintingFadeCounter)
|
||||||
|
gContestPaintingFadeCounter--;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))
|
||||||
|
{
|
||||||
|
u8 two = 2; //needed to make the asm match
|
||||||
|
gContestPaintingState = two;
|
||||||
|
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB(0, 0, 0));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gUnknown_030011F6)
|
||||||
|
gContestPaintingFadeCounter = 0;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
if (!gPaletteFade.active)
|
||||||
|
SetMainCallback2(CB2_QuitContestPainting);
|
||||||
|
if (gUnknown_030011F6 && gContestPaintingFadeCounter < 30)
|
||||||
|
gContestPaintingFadeCounter++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void InitContestPaintingWindow(void)
|
||||||
|
{
|
||||||
|
ResetBgsAndClearDma3BusyFlags(0);
|
||||||
|
InitBgsFromTemplates(0, gUnknown_085B07E8, ARRAY_COUNT(gUnknown_085B07E8));
|
||||||
|
ChangeBgX(1, 0, 0);
|
||||||
|
ChangeBgY(1, 0, 0);
|
||||||
|
SetBgTilemapBuffer(1, AllocZeroed(BG_SCREEN_SIZE));
|
||||||
|
gContestPaintingWindowId = AddWindow(&gUnknown_085B07EC);
|
||||||
|
DeactivateAllTextPrinters();
|
||||||
|
FillWindowPixelBuffer(gContestPaintingWindowId, 0);
|
||||||
|
PutWindowTilemap(gContestPaintingWindowId);
|
||||||
|
CopyWindowToVram(gContestPaintingWindowId, 3);
|
||||||
|
ShowBg(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void PrintContestPaintingCaption(u8 contestType, u8 arg1)
|
||||||
|
{
|
||||||
|
int x;
|
||||||
|
u8 category;
|
||||||
|
|
||||||
|
if (arg1 == TRUE)
|
||||||
|
return;
|
||||||
|
|
||||||
|
category = gUnknown_030061C0->contestCategory;
|
||||||
|
if (contestType < 8)
|
||||||
|
{
|
||||||
|
sub_818E868(gStringVar1, category);
|
||||||
|
StringAppend(gStringVar1, gText_Space);
|
||||||
|
StringAppend(gStringVar1, gContestRankTextPointers[gUnknown_030061C0->contestRank]);
|
||||||
|
StringCopy(gStringVar2, gUnknown_030061C0->trainerName);
|
||||||
|
sub_81DB5AC(gStringVar2);
|
||||||
|
StringCopy(gStringVar3, gUnknown_030061C0->monName);
|
||||||
|
StringExpandPlaceholders(gStringVar4, gUnknown_0827EA0C);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
StringCopy(gStringVar1, gUnknown_030061C0->monName);
|
||||||
|
StringExpandPlaceholders(gStringVar4, gContestPaintingDescriptionPointers[category]);
|
||||||
|
}
|
||||||
|
|
||||||
|
x = GetStringCenterAlignXOffset(1, gStringVar4, 208);
|
||||||
|
AddTextPrinterParameterized(gContestPaintingWindowId, 1, gStringVar4, x, 1, 0, 0);
|
||||||
|
CopyBgTilemapBufferToVram(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void InitContestPaintingBg(void)
|
||||||
|
{
|
||||||
|
SetGpuReg(REG_OFFSET_DISPCNT, 0);
|
||||||
|
REG_IE |= INTR_FLAG_VBLANK;
|
||||||
|
SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(12) | BGCNT_MOSAIC | BGCNT_16COLOR | BGCNT_TXT256x256);
|
||||||
|
SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(10) | BGCNT_MOSAIC | BGCNT_16COLOR | BGCNT_TXT256x256);
|
||||||
|
SetGpuReg(REG_OFFSET_BLDCNT, 0);
|
||||||
|
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
|
||||||
|
SetGpuReg(REG_OFFSET_BLDY, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void InitContestPaintingVars(bool8 arg0)
|
||||||
|
{
|
||||||
|
if (arg0 == FALSE)
|
||||||
|
{
|
||||||
|
gUnknown_030011F6 = FALSE;
|
||||||
|
gContestPaintingMosaicVal = 0;
|
||||||
|
gContestPaintingFadeCounter = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gUnknown_030011F6 = TRUE;
|
||||||
|
gContestPaintingMosaicVal = 15;
|
||||||
|
gContestPaintingFadeCounter = 30;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void UpdateContestPaitingMosaicEffect(void)
|
||||||
|
{
|
||||||
|
if (!gUnknown_030011F6)
|
||||||
|
{
|
||||||
|
SetGpuReg(REG_OFFSET_MOSAIC, 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(10) | BGCNT_MOSAIC | BGCNT_16COLOR | BGCNT_TXT256x256);
|
||||||
|
gContestPaintingMosaicVal = gContestPaintingFadeCounter / 2;
|
||||||
|
SetGpuReg(REG_OFFSET_MOSAIC, (gContestPaintingMosaicVal << 12) | (gContestPaintingMosaicVal << 8) | (gContestPaintingMosaicVal << 4) | (gContestPaintingMosaicVal << 0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void VBlankCB_ContestPainting(void)
|
||||||
|
{
|
||||||
|
UpdateContestPaitingMosaicEffect();
|
||||||
|
LoadOam();
|
||||||
|
ProcessSpriteCopyRequests();
|
||||||
|
TransferPlttBuffer();
|
||||||
|
}
|
||||||
|
|
||||||
|
void sub_81302E8(u16 species, u8 arg1)
|
||||||
|
{
|
||||||
|
const void *pal = GetFrontSpritePalFromSpeciesAndPersonality(species, gUnknown_030061C0->trainerId, gUnknown_030061C0->personality);
|
||||||
|
LZDecompressVram(pal, gContestPaintingMonPalette);
|
||||||
|
if (!arg1)
|
||||||
|
{
|
||||||
|
HandleLoadSpecialPokePic_DontHandleDeoxys(
|
||||||
|
&gMonFrontPicTable[species],
|
||||||
|
gMonSpritesGfxPtr->sprites[1],
|
||||||
|
species,
|
||||||
|
gUnknown_030061C0->personality);
|
||||||
|
sub_8130380(gMonSpritesGfxPtr->sprites[1], gContestPaintingMonPalette, (void *)gUnknown_03006190);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
HandleLoadSpecialPokePic_DontHandleDeoxys(
|
||||||
|
&gMonBackPicTable[species],
|
||||||
|
gMonSpritesGfxPtr->sprites[0],
|
||||||
|
species,
|
||||||
|
gUnknown_030061C0->personality);
|
||||||
|
sub_8130380(gMonSpritesGfxPtr->sprites[0], gContestPaintingMonPalette, (void *)gUnknown_03006190);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef NONMATCHING
|
||||||
|
// functionally equivalent.
|
||||||
|
static void sub_8130380(u8 *spritePixels, u16 *palette, u16 (*destColorBuffer)[64][64])
|
||||||
|
{
|
||||||
|
u16 tileY, tileX, pixelY, pixelX;
|
||||||
|
u8 colorIndex;
|
||||||
|
|
||||||
|
for (tileY = 0; tileY < 8; tileY++)
|
||||||
|
{
|
||||||
|
for (tileX = 0; tileX < 8; tileX++)
|
||||||
|
{
|
||||||
|
for (pixelY = 0; pixelY < 8; pixelY++)
|
||||||
|
{
|
||||||
|
for (pixelX = 0; pixelX < 8; pixelX++)
|
||||||
|
{
|
||||||
|
int offset = 32 * (8 * tileY + tileX) + (pixelY * 4 + pixelX / 2);
|
||||||
|
colorIndex = spritePixels[offset];
|
||||||
|
if (pixelX & 1)
|
||||||
|
colorIndex >>= 4;
|
||||||
|
else
|
||||||
|
colorIndex &= 0xF;
|
||||||
|
|
||||||
|
if (colorIndex == 0) // transparent pixel
|
||||||
|
(*destColorBuffer)[8 * tileY + pixelY][tileX * 8 + pixelX] = 0x8000;
|
||||||
|
else
|
||||||
|
(*destColorBuffer)[8 * tileY + pixelY][tileX * 8 + pixelX] = palette[colorIndex];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
NAKED
|
||||||
|
static void sub_8130380(u8 *spritePixels, u16 *palette, u16 (*destColorBuffer)[64][64])
|
||||||
|
{
|
||||||
|
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, 0xC\n\
|
||||||
|
mov r10, r0\n\
|
||||||
|
mov r9, r1\n\
|
||||||
|
str r2, [sp]\n\
|
||||||
|
movs r0, 0\n\
|
||||||
|
_08130394:\n\
|
||||||
|
movs r3, 0\n\
|
||||||
|
adds r1, r0, 0x1\n\
|
||||||
|
str r1, [sp, 0x4]\n\
|
||||||
|
lsls r0, 3\n\
|
||||||
|
str r0, [sp, 0x8]\n\
|
||||||
|
_0813039E:\n\
|
||||||
|
movs r1, 0\n\
|
||||||
|
adds r2, r3, 0x1\n\
|
||||||
|
mov r8, r2\n\
|
||||||
|
ldr r7, [sp, 0x8]\n\
|
||||||
|
adds r0, r7, r3\n\
|
||||||
|
lsls r0, 5\n\
|
||||||
|
mov r12, r0\n\
|
||||||
|
lsls r4, r3, 3\n\
|
||||||
|
_081303AE:\n\
|
||||||
|
movs r3, 0\n\
|
||||||
|
lsls r0, r1, 2\n\
|
||||||
|
adds r6, r1, 0x1\n\
|
||||||
|
mov r2, r12\n\
|
||||||
|
adds r5, r2, r0\n\
|
||||||
|
ldr r7, [sp, 0x8]\n\
|
||||||
|
adds r0, r7, r1\n\
|
||||||
|
lsls r0, 7\n\
|
||||||
|
ldr r1, [sp]\n\
|
||||||
|
adds r2, r0, r1\n\
|
||||||
|
_081303C2:\n\
|
||||||
|
lsrs r0, r3, 1\n\
|
||||||
|
adds r0, r5, r0\n\
|
||||||
|
add r0, r10\n\
|
||||||
|
ldrb r1, [r0]\n\
|
||||||
|
movs r0, 0x1\n\
|
||||||
|
ands r0, r3\n\
|
||||||
|
cmp r0, 0\n\
|
||||||
|
beq _081303D6\n\
|
||||||
|
lsrs r1, 4\n\
|
||||||
|
b _081303DA\n\
|
||||||
|
_081303D6:\n\
|
||||||
|
movs r0, 0xF\n\
|
||||||
|
ands r1, r0\n\
|
||||||
|
_081303DA:\n\
|
||||||
|
cmp r1, 0\n\
|
||||||
|
bne _081303EC\n\
|
||||||
|
adds r0, r4, r3\n\
|
||||||
|
lsls r0, 1\n\
|
||||||
|
adds r0, r2\n\
|
||||||
|
movs r7, 0x80\n\
|
||||||
|
lsls r7, 8\n\
|
||||||
|
adds r1, r7, 0\n\
|
||||||
|
b _081303F8\n\
|
||||||
|
_081303EC:\n\
|
||||||
|
adds r0, r4, r3\n\
|
||||||
|
lsls r0, 1\n\
|
||||||
|
adds r0, r2\n\
|
||||||
|
lsls r1, 1\n\
|
||||||
|
add r1, r9\n\
|
||||||
|
ldrh r1, [r1]\n\
|
||||||
|
_081303F8:\n\
|
||||||
|
strh r1, [r0]\n\
|
||||||
|
adds r0, r3, 0x1\n\
|
||||||
|
lsls r0, 16\n\
|
||||||
|
lsrs r3, r0, 16\n\
|
||||||
|
cmp r3, 0x7\n\
|
||||||
|
bls _081303C2\n\
|
||||||
|
lsls r0, r6, 16\n\
|
||||||
|
lsrs r1, r0, 16\n\
|
||||||
|
cmp r1, 0x7\n\
|
||||||
|
bls _081303AE\n\
|
||||||
|
mov r1, r8\n\
|
||||||
|
lsls r0, r1, 16\n\
|
||||||
|
lsrs r3, r0, 16\n\
|
||||||
|
cmp r3, 0x7\n\
|
||||||
|
bls _0813039E\n\
|
||||||
|
ldr r2, [sp, 0x4]\n\
|
||||||
|
lsls r0, r2, 16\n\
|
||||||
|
lsrs r0, 16\n\
|
||||||
|
cmp r0, 0x7\n\
|
||||||
|
bls _08130394\n\
|
||||||
|
add sp, 0xC\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");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void sub_8130430(u8 arg0, u8 arg1)
|
||||||
|
{
|
||||||
|
u8 x, y;
|
||||||
|
|
||||||
|
LoadPalette(gPictureFramePalettes, 0, 0x100);
|
||||||
|
if (arg1 == 1)
|
||||||
|
{
|
||||||
|
switch (gUnknown_030061C0->contestCategory / 3)
|
||||||
|
{
|
||||||
|
case CONTEST_CATEGORY_COOL:
|
||||||
|
RLUnCompVram(gPictureFrameTiles_0, (void *)VRAM);
|
||||||
|
RLUnCompWram(gPictureFrameTilemap_0, gUnknown_03006190);
|
||||||
|
break;
|
||||||
|
case CONTEST_CATEGORY_BEAUTY:
|
||||||
|
RLUnCompVram(gPictureFrameTiles_1, (void *)VRAM);
|
||||||
|
RLUnCompWram(gPictureFrameTilemap_1, gUnknown_03006190);
|
||||||
|
break;
|
||||||
|
case CONTEST_CATEGORY_CUTE:
|
||||||
|
RLUnCompVram(gPictureFrameTiles_2, (void *)VRAM);
|
||||||
|
RLUnCompWram(gPictureFrameTilemap_2, gUnknown_03006190);
|
||||||
|
break;
|
||||||
|
case CONTEST_CATEGORY_SMART:
|
||||||
|
RLUnCompVram(gPictureFrameTiles_3, (void *)VRAM);
|
||||||
|
RLUnCompWram(gPictureFrameTilemap_3, gUnknown_03006190);
|
||||||
|
break;
|
||||||
|
case CONTEST_CATEGORY_TOUGH:
|
||||||
|
RLUnCompVram(gPictureFrameTiles_4, (void *)VRAM);
|
||||||
|
RLUnCompWram(gPictureFrameTilemap_4, gUnknown_03006190);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define VRAM_PICTURE_DATA(x, y) (((u16 *)(VRAM + 0x6000))[(y) * 32 + (x)])
|
||||||
|
|
||||||
|
// Set the background
|
||||||
|
for (y = 0; y < 20; y++)
|
||||||
|
{
|
||||||
|
for (x = 0; x < 32; x++)
|
||||||
|
VRAM_PICTURE_DATA(x, y) = 0x1015;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Copy the image frame
|
||||||
|
for (y = 0; y < 10; y++)
|
||||||
|
{
|
||||||
|
for (x = 0; x < 18; x++)
|
||||||
|
VRAM_PICTURE_DATA(x + 6, y + 2) = (*gUnknown_03006190)[y + 2][x + 6];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Re-set the entire top row to the first top frame part
|
||||||
|
for (x = 0; x < 16; x++)
|
||||||
|
VRAM_PICTURE_DATA(x + 7, 2) = (*gUnknown_03006190)[2][7];
|
||||||
|
|
||||||
|
#undef VRAM_PICTURE_DATA
|
||||||
|
}
|
||||||
|
else if (arg0 < 8)
|
||||||
|
{
|
||||||
|
RLUnCompVram(gPictureFrameTiles_5, (void *)VRAM);
|
||||||
|
RLUnCompVram(gPictureFrameTilemap_5, (void *)(VRAM + 0x6000));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
switch (gUnknown_030061C0->contestCategory / 3)
|
||||||
|
{
|
||||||
|
case CONTEST_CATEGORY_COOL:
|
||||||
|
RLUnCompVram(gPictureFrameTiles_0, (void *)VRAM);
|
||||||
|
RLUnCompVram(gPictureFrameTilemap_0, (void *)(VRAM + 0x6000));
|
||||||
|
break;
|
||||||
|
case CONTEST_CATEGORY_BEAUTY:
|
||||||
|
RLUnCompVram(gPictureFrameTiles_1, (void *)VRAM);
|
||||||
|
RLUnCompVram(gPictureFrameTilemap_1, (void *)(VRAM + 0x6000));
|
||||||
|
break;
|
||||||
|
case CONTEST_CATEGORY_CUTE:
|
||||||
|
RLUnCompVram(gPictureFrameTiles_2, (void *)VRAM);
|
||||||
|
RLUnCompVram(gPictureFrameTilemap_2, (void *)(VRAM + 0x6000));
|
||||||
|
break;
|
||||||
|
case CONTEST_CATEGORY_SMART:
|
||||||
|
RLUnCompVram(gPictureFrameTiles_3, (void *)VRAM);
|
||||||
|
RLUnCompVram(gPictureFrameTilemap_3, (void *)(VRAM + 0x6000));
|
||||||
|
break;
|
||||||
|
case CONTEST_CATEGORY_TOUGH:
|
||||||
|
RLUnCompVram(gPictureFrameTiles_4, (void *)VRAM);
|
||||||
|
RLUnCompVram(gPictureFrameTilemap_4, (void *)(VRAM + 0x6000));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void sub_8130688(u8 arg0)
|
||||||
|
{
|
||||||
|
//Some hacks just to get the asm to match
|
||||||
|
#ifndef NONMATCHING
|
||||||
|
asm(""::"r"(arg0));
|
||||||
|
#endif
|
||||||
|
|
||||||
|
gMain.oamBuffer[0] = gUnknown_085B0830;
|
||||||
|
gMain.oamBuffer[0].tileNum = 0;
|
||||||
|
|
||||||
|
#ifndef NONMATCHING
|
||||||
|
if (arg0) arg0 = gMain.oamBuffer[0].tileNum;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
gMain.oamBuffer[0].x = 88;
|
||||||
|
gMain.oamBuffer[0].y = 24;
|
||||||
|
}
|
||||||
|
|
||||||
|
static u8 sub_81306CC(u8 arg0)
|
||||||
|
{
|
||||||
|
u8 contestCategory;
|
||||||
|
|
||||||
|
if (arg0 < 8)
|
||||||
|
contestCategory = gUnknown_030061C0->contestCategory;
|
||||||
|
else
|
||||||
|
contestCategory = gUnknown_030061C0->contestCategory / 3;
|
||||||
|
|
||||||
|
switch (contestCategory)
|
||||||
|
{
|
||||||
|
case CONTEST_CATEGORY_COOL:
|
||||||
|
return CONTESTRESULT_COOL;
|
||||||
|
case CONTEST_CATEGORY_BEAUTY:
|
||||||
|
return CONTESTRESULT_BEAUTY;
|
||||||
|
case CONTEST_CATEGORY_CUTE:
|
||||||
|
return CONTESTRESULT_CUTE;
|
||||||
|
case CONTEST_CATEGORY_SMART:
|
||||||
|
return CONTESTRESULT_SMART;
|
||||||
|
case CONTEST_CATEGORY_TOUGH:
|
||||||
|
return CONTESTRESULT_TOUGH;
|
||||||
|
}
|
||||||
|
|
||||||
|
return contestCategory;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void sub_8130738(void)
|
||||||
|
{
|
||||||
|
gContestPaintingMonPalette = AllocZeroed(0x200);
|
||||||
|
gUnknown_03006190 = AllocZeroed(0x2000);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void sub_8130760(u8 contestResult)
|
||||||
|
{
|
||||||
|
gUnknown_030061A0.var_4 = gUnknown_03006190;
|
||||||
|
gUnknown_030061A0.var_8 = gContestPaintingMonPalette;
|
||||||
|
gUnknown_030061A0.var_18 = 0;
|
||||||
|
gUnknown_030061A0.var_1F = gUnknown_030061C0->personality % 256;
|
||||||
|
gUnknown_030061A0.var_19 = 0;
|
||||||
|
gUnknown_030061A0.var_1A = 0;
|
||||||
|
gUnknown_030061A0.var_1B = 64;
|
||||||
|
gUnknown_030061A0.var_1C = 64;
|
||||||
|
gUnknown_030061A0.var_1D = 64;
|
||||||
|
gUnknown_030061A0.var_1E = 64;
|
||||||
|
|
||||||
|
switch (contestResult)
|
||||||
|
{
|
||||||
|
case CONTESTRESULT_SMART:
|
||||||
|
case CONTESTRESULT_TOUGH:
|
||||||
|
gUnknown_030061A0.var_14 = 3;
|
||||||
|
break;
|
||||||
|
case CONTESTRESULT_COOL:
|
||||||
|
case CONTESTRESULT_BEAUTY:
|
||||||
|
case CONTESTRESULT_CUTE:
|
||||||
|
default:
|
||||||
|
gUnknown_030061A0.var_14 = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
gUnknown_030061A0.var_16 = 2;
|
||||||
|
gUnknown_030061A0.var_0 = contestResult;
|
||||||
|
gUnknown_030061A0.var_10 = 0x6010000;
|
||||||
|
|
||||||
|
sub_8124F2C(&gUnknown_030061A0);
|
||||||
|
sub_81261A4(&gUnknown_030061A0);
|
||||||
|
sub_8126058(&gUnknown_030061A0);
|
||||||
|
|
||||||
|
LoadPalette(gContestPaintingMonPalette, 0x100, 0x200);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void sub_8130884(u8 arg0, u8 arg1)
|
||||||
|
{
|
||||||
|
sub_8130738();
|
||||||
|
sub_81302E8(gUnknown_030061C0->species, 0);
|
||||||
|
sub_8130760(sub_81306CC(arg0));
|
||||||
|
sub_8130688(arg0);
|
||||||
|
sub_8130430(arg0, arg1);
|
||||||
|
}
|
||||||
|
@ -220,7 +220,7 @@ static void ShowContestWinnerCleanup(void)
|
|||||||
|
|
||||||
void ShowContestWinner(void)
|
void ShowContestWinner(void)
|
||||||
{
|
{
|
||||||
SetMainCallback2(sub_812FDEC);
|
SetMainCallback2(CB2_ContestPainting);
|
||||||
gMain.savedCallback = ShowContestWinnerCleanup;
|
gMain.savedCallback = ShowContestWinnerCleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ gUnknown_030061A0: @ 30061A0
|
|||||||
gUnknown_030061C0: @ 30061C0
|
gUnknown_030061C0: @ 30061C0
|
||||||
.space 0x4
|
.space 0x4
|
||||||
|
|
||||||
gUnknown_030061C4: @ 30061C4
|
gContestPaintingMonPalette: @ 30061C4
|
||||||
.space 0xC
|
.space 0xC
|
||||||
|
|
||||||
.include "field_specials.o"
|
.include "field_specials.o"
|
||||||
|
Loading…
Reference in New Issue
Block a user