From b7cfa9d36537b8ae53012eb88d59f8b842fb35c4 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Fri, 8 Mar 2019 21:39:51 -0500 Subject: Move more contest constants into C --- src/contest.c | 337 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 322 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/contest.c b/src/contest.c index 114a1fb69..241d38e48 100644 --- a/src/contest.c +++ b/src/contest.c @@ -218,7 +218,6 @@ EWRAM_DATA u8 gUnknown_02039F5D = 0; // IWRAM common vars. u32 gContestRngValue; -extern const u16 gUnknown_08587C30[]; extern const struct BgTemplate gUnknown_08587F34[4]; extern const struct WindowTemplate gUnknown_08587F44[]; extern const u8 *const gUnknown_08587D90[]; @@ -250,25 +249,11 @@ extern const u8 gText_CDot[]; extern const u8 *const gUnknown_08587E10[]; extern const struct ContestPokemon gContestOpponents[96]; extern const u8 gUnknown_085898A4[96]; -extern const struct CompressedSpriteSheet gUnknown_08587C00; -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[]; extern const u8 *const gContestEffectDescriptionPointers[]; -extern const struct SpriteSheet gUnknown_08587A74; -extern const u8 gUnknown_08587A6C[]; extern const struct SpriteTemplate gSpriteTemplate_8587AD0; -extern const struct SpritePalette gUnknown_08587B08; -extern const struct CompressedSpriteSheet gUnknown_08587AE8[]; extern const struct SpriteTemplate gSpriteTemplate_8587B18[]; -extern const u8 gUnknown_08587A70[]; -extern const struct SubspriteTable gSubspriteTables_8587B80[]; -extern const struct CompressedSpriteSheet gUnknown_08587BB0; -extern const struct SpritePalette gUnknown_08587BB8; -extern const struct SpriteTemplate gSpriteTemplate_8587BC8; extern void (*const gContestEffectFuncs[])(void); extern const s8 gContestExcitementTable[][5]; extern const struct ContestWinner gUnknown_08587FA4[]; @@ -276,6 +261,328 @@ extern const struct CompressedSpriteSheet gUnknown_08589904[]; extern const struct SpritePalette gUnknown_08589924[]; extern const struct SpriteTemplate gSpriteTemplate_858998C[]; +static const u8 gUnknown_08587A6C[] = +{ + 0x24, 0x4C, 0x74, 0x9C +}; + +static const u8 gUnknown_08587A70[] = +{ + 0x24, 0x4C, 0x74, 0x9C +}; + +static const struct SpriteSheet gUnknown_08587A74 = +{ + .data = gTiles_8C19450, + .size = 0x20, + .tag = 0x4E20 +}; + +static const struct OamData gOamData_8587A7C = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AffineAnimCmd gSpriteAffineAnim_8587A84[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_8587A94[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_FRAME(0xFFF6, 0xFFF6, -20, 20), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd gSpriteAffineAnim_8587AAC[] = +{ + AFFINEANIMCMD_FRAME(0x38, 0x38, 0, 0), + AFFINEANIMCMD_FRAME(10, 10, 20, 20), + AFFINEANIMCMD_END +}; + +static const union AffineAnimCmd* const gSpriteAffineAnimTable_8587AC4[] = +{ + gSpriteAffineAnim_8587A84, + gSpriteAffineAnim_8587A94, + gSpriteAffineAnim_8587AAC +}; + +static const struct SpriteTemplate gSpriteTemplate_8587AD0 = +{ + .tileTag = 0x4E20, + .paletteTag = 0xABE0, + .oam = &gOamData_8587A7C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_8587AC4, + .callback = SpriteCallbackDummy +}; + +static const struct CompressedSpriteSheet gUnknown_08587AE8[] = +{ + { + .data = gContestNextTurnGfx, + .size = 0x100, + .tag = 0x4E22 + }, + { + .data = gContestNextTurnGfx, + .size = 0x100, + .tag = 0x4E23 + }, + { + .data = gContestNextTurnGfx, + .size = 0x100, + .tag = 0x4E24 + }, + { + .data = gContestNextTurnGfx, + .size = 0x100, + .tag = 0x4E25 + } +}; + +static const struct SpritePalette gUnknown_08587B08 = +{ + .data = gContestPal, + .tag = 0x4E22 +}; + +static const struct OamData gOamData_8587B10 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +static const struct SpriteTemplate gSpriteTemplate_8587B18[] = +{ + { + .tileTag = 0x4E22, + .paletteTag = 0x4E22, + .oam = &gOamData_8587B10, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 0x4E23, + .paletteTag = 0x4E22, + .oam = &gOamData_8587B10, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 0x4E24, + .paletteTag = 0x4E22, + .oam = &gOamData_8587B10, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 0x4E25, + .paletteTag = 0x4E22, + .oam = &gOamData_8587B10, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + } +}; + +const struct Subsprite gSubspriteTable_8587B78[] = +{ + { + .x = -28, + .y = -4, + SPRITE_SIZE_32x8, + .tileOffset = 0, + .priority = 0 + }, + { + .x = 4, + .y = -4, + SPRITE_SIZE_32x8, + .tileOffset = 4, + .priority = 0 + } +}; + +const struct SubspriteTable gSubspriteTables_8587B80[] = +{ + { + .subspriteCount = 2, + .subsprites = gSubspriteTable_8587B78 + } +}; + +const struct CompressedSpriteSheet gUnknown_08587B88 = +{ + .data = gUnknown_08C19168, + .size = 0x180, + .tag = 0xABE1 +}; + +const struct OamData gOamData_8587B90 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +const struct SpriteTemplate gSpriteTemplate_8587B98 = +{ + .tileTag = 0xABE1, + .paletteTag = 0xABE0, + .oam = &gOamData_8587B90, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +const struct CompressedSpriteSheet gUnknown_08587BB0 = +{ + .data = gContestApplauseGfx, + .size = 0x400, + .tag = 0xABE2 +}; + +const struct SpritePalette gUnknown_08587BB8 = +{ + .data = gContestPal, + .tag = 0xABE2 +}; + +const struct OamData gOamData_8587BC0 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +const struct SpriteTemplate gSpriteTemplate_8587BC8 = +{ + .tileTag = 0xABE2, + .paletteTag = 0xABE2, + .oam = &gOamData_8587BC0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +const struct OamData gOamData_8587BE0 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 3, + .paletteNum = 2, + .affineParam = 0 +}; + +const struct SpriteTemplate gSpriteTemplate_8587BE8 = +{ + .tileTag = 0x4E21, + .paletteTag = 0x4E21, + .oam = &gOamData_8587BE0, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +const struct CompressedSpriteSheet gUnknown_08587C00 = +{ + .data = gContestJudgeGfx, + .size = 0x800, + .tag = 0x4E21 +}; + +const struct CompressedSpriteSheet gUnknown_08587C08 = +{ + .data = gContestJudgeSymbolsGfx, + .size = 0x380, + .tag = 0xABE0 +}; + +const struct CompressedSpritePalette gUnknown_08587C10 = +{ + .data = gContest3Pal, + .tag = 0xABE0 +}; + +const struct SpriteTemplate gSpriteTemplate_8587C18 = +{ + .tileTag = 0xABE0, + .paletteTag = 0xABE0, + .oam = &gUnknown_0852490C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +const u16 gUnknown_08587C30[] = INCBIN_U16("graphics/unknown/unknown_587C30.gbapal"); + static void TaskDummy1(u8 taskId) { } -- cgit v1.2.3 From 88c37818800e1216dc7d40cfefa0a9ab5f249671 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Fri, 8 Mar 2019 22:33:40 -0500 Subject: Move text pointer tables into C --- src/contest.c | 6 +- src/data/contest_text_tables.h | 414 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 416 insertions(+), 4 deletions(-) create mode 100644 src/data/contest_text_tables.h (limited to 'src') diff --git a/src/contest.c b/src/contest.c index 241d38e48..afb1c94d7 100644 --- a/src/contest.c +++ b/src/contest.c @@ -220,9 +220,6 @@ u32 gContestRngValue; extern const struct BgTemplate gUnknown_08587F34[4]; extern const struct WindowTemplate gUnknown_08587F44[]; -extern const u8 *const gUnknown_08587D90[]; -extern const u8 *const gUnknown_08587F08[]; -extern const u8 *const gUnknown_08587F1C[]; extern const u8 *const gUnknown_0827E8DA[]; extern const u8 gText_0827D55A[]; extern const u8 gText_0827E793[]; @@ -251,7 +248,6 @@ extern const struct ContestPokemon gContestOpponents[96]; extern const u8 gUnknown_085898A4[96]; extern const union AffineAnimCmd *const gUnknown_082FF6C0[]; extern const union AffineAnimCmd *const gUnknown_082FF694[]; -extern const u8 *const gContestEffectDescriptionPointers[]; extern const struct SpriteTemplate gSpriteTemplate_8587AD0; extern const struct SpriteTemplate gSpriteTemplate_8587B18[]; extern void (*const gContestEffectFuncs[])(void); @@ -583,6 +579,8 @@ const struct SpriteTemplate gSpriteTemplate_8587C18 = const u16 gUnknown_08587C30[] = INCBIN_U16("graphics/unknown/unknown_587C30.gbapal"); +#include "data/contest_text_tables.h" + static void TaskDummy1(u8 taskId) { } diff --git a/src/data/contest_text_tables.h b/src/data/contest_text_tables.h new file mode 100644 index 000000000..fa32f33b5 --- /dev/null +++ b/src/data/contest_text_tables.h @@ -0,0 +1,414 @@ + +#include "global.h" + +extern const u8 gContestEffect00hDescription[]; +extern const u8 gContestEffect01hDescription[]; +extern const u8 gContestEffect02hDescription[]; +extern const u8 gContestEffect03hDescription[]; +extern const u8 gContestEffect04hDescription[]; +extern const u8 gContestEffect05hDescription[]; +extern const u8 gContestEffect06hDescription[]; +extern const u8 gContestEffect07hDescription[]; +extern const u8 gContestEffect08hDescription[]; +extern const u8 gContestEffect09hDescription[]; +extern const u8 gContestEffect0AhDescription[]; +extern const u8 gContestEffect0BhDescription[]; +extern const u8 gContestEffect0ChDescription[]; +extern const u8 gContestEffect0DhDescription[]; +extern const u8 gContestEffect0EhDescription[]; +extern const u8 gContestEffect0FhDescription[]; +extern const u8 gContestEffect10hDescription[]; +extern const u8 gContestEffect11hDescription[]; +extern const u8 gContestEffect12hDescription[]; +extern const u8 gContestEffect13hDescription[]; +extern const u8 gContestEffect14hDescription[]; +extern const u8 gContestEffect15hDescription[]; +extern const u8 gContestEffect16hDescription[]; +extern const u8 gContestEffect17hDescription[]; +extern const u8 gContestEffect18hDescription[]; +extern const u8 gContestEffect19hDescription[]; +extern const u8 gContestEffect1AhDescription[]; +extern const u8 gContestEffect1BhDescription[]; +extern const u8 gContestEffect1ChDescription[]; +extern const u8 gContestEffect1DhDescription[]; +extern const u8 gContestEffect1EhDescription[]; +extern const u8 gContestEffect1FhDescription[]; +extern const u8 gContestEffect20hDescription[]; +extern const u8 gContestEffect21hDescription[]; +extern const u8 gContestEffect22hDescription[]; +extern const u8 gContestEffect23hDescription[]; +extern const u8 gContestEffect24hDescription[]; +extern const u8 gContestEffect25hDescription[]; +extern const u8 gContestEffect26hDescription[]; +extern const u8 gContestEffect27hDescription[]; +extern const u8 gContestEffect28hDescription[]; +extern const u8 gContestEffect29hDescription[]; +extern const u8 gContestEffect2AhDescription[]; +extern const u8 gContestEffect2BhDescription[]; +extern const u8 gContestEffect2ChDescription[]; +extern const u8 gContestEffect2DhDescription[]; +extern const u8 gContestEffect2EhDescription[]; +extern const u8 gContestEffect2FhDescription[]; + +extern const u8 gUnusedContestMoveName0[]; +extern const u8 gUnusedContestMoveName1[]; +extern const u8 gUnusedContestMoveName2[]; +extern const u8 gUnusedContestMoveName3[]; +extern const u8 gUnusedContestMoveName4[]; +extern const u8 gUnusedContestMoveName5[]; +extern const u8 gUnusedContestMoveName6[]; +extern const u8 gUnusedContestMoveName7[]; +extern const u8 gUnusedContestMoveName8[]; +extern const u8 gUnusedContestMoveName9[]; +extern const u8 gUnusedContestMoveName10[]; +extern const u8 gUnusedContestMoveName11[]; +extern const u8 gUnusedContestMoveName12[]; + +extern const u8 gContestMoveTypeCoolText[]; +extern const u8 gContestMoveTypeBeautyText[]; +extern const u8 gContestMoveTypeCuteText[]; +extern const u8 gContestMoveTypeSmartText[]; +extern const u8 gContestMoveTypeToughText[]; + +extern const u8 gText_0827D5C1[]; +extern const u8 gText_0827D5DC[]; +extern const u8 gText_0827D600[]; +extern const u8 gText_0827D612[]; +extern const u8 gText_0827D612[]; +extern const u8 gText_0827D62D[]; +extern const u8 gText_0827D654[]; +extern const u8 gText_0827D67E[]; +extern const u8 gText_0827D69C[]; +extern const u8 gText_0827D6BA[]; +extern const u8 gText_0827D6E5[]; +extern const u8 gText_0827D706[]; +extern const u8 gText_0827D71D[]; + +extern const u8 gText_0827D743[]; +extern const u8 gText_0827D764[]; +extern const u8 gText_0827D785[]; +extern const u8 gText_0827D7A5[]; +extern const u8 gText_0827D7C8[]; +extern const u8 gText_0827D7E8[]; +extern const u8 gText_0827D831[]; +extern const u8 gText_0827D855[]; +extern const u8 gText_0827D830[]; +extern const u8 gText_0827D872[]; +extern const u8 gText_0827D88F[]; +extern const u8 gText_0827D8B5[]; +extern const u8 gText_0827D8E4[]; +extern const u8 gText_0827D8FE[]; +extern const u8 gText_0827D926[]; +extern const u8 gText_0827D947[]; +extern const u8 gText_0827D961[]; +extern const u8 gText_0827D986[]; +extern const u8 gText_0827D9B1[]; +extern const u8 gText_0827D9D9[]; +extern const u8 gText_0827DA03[]; +extern const u8 gText_0827DA31[]; +extern const u8 gText_0827DA5B[]; +extern const u8 gText_0827DA85[]; +extern const u8 gText_0827DAB2[]; +extern const u8 gText_0827DADA[]; +extern const u8 gText_0827DB03[]; +extern const u8 gText_0827D830[]; +extern const u8 gText_0827D830[]; +extern const u8 gText_0827D830[]; +extern const u8 gText_0827DB1F[]; +extern const u8 gText_0827DB4E[]; + +extern const u8 gText_827DB75[]; +extern const u8 gText_827DBB0[]; +extern const u8 gText_827DBE0[]; +extern const u8 gText_827DC0F[]; +extern const u8 gText_827DC45[]; +extern const u8 gText_827DC7C[]; +extern const u8 gText_827DCB4[]; +extern const u8 gText_827DCE7[]; +extern const u8 gText_827DD12[]; +extern const u8 gText_827DD3D[]; +extern const u8 gText_827DD6F[]; +extern const u8 gText_827DD8E[]; +extern const u8 gText_827DDC7[]; +extern const u8 gText_827DDF2[]; +extern const u8 gText_827DE14[]; +extern const u8 gText_827DE44[]; +extern const u8 gText_827DE73[]; +extern const u8 gText_827DEA5[]; +extern const u8 gText_827DED9[]; +extern const u8 gText_827DF02[]; +extern const u8 gText_827DF3A[]; +extern const u8 gText_827DF63[]; +extern const u8 gText_827DF8C[]; +extern const u8 gText_827DFB8[]; +extern const u8 gText_827DFE2[]; +extern const u8 gText_827E00C[]; +extern const u8 gText_827E02F[]; +extern const u8 gText_827E05F[]; +extern const u8 gText_827E08B[]; +extern const u8 gText_827E0B5[]; +extern const u8 gText_827E0DD[]; +extern const u8 gText_827E107[]; +extern const u8 gText_827E143[]; +extern const u8 gText_827E17F[]; +extern const u8 gText_827E1BB[]; +extern const u8 gText_827E1F3[]; +extern const u8 gText_827E220[]; +extern const u8 gText_827E254[]; +extern const u8 gText_827E289[]; +extern const u8 gText_827E2C5[]; +extern const u8 gText_0827E2FE[]; +extern const u8 gText_0827E32E[]; +extern const u8 gText_0827E35B[]; +extern const u8 gText_0827E38D[]; +extern const u8 gText_0827E3C1[]; +extern const u8 gText_0827E3EB[]; +extern const u8 gText_0827E416[]; +extern const u8 gText_0827E448[]; +extern const u8 gText_0827E473[]; +extern const u8 gText_0827E4A6[]; +extern const u8 gText_0827E4D5[]; +extern const u8 gText_0827E504[]; +extern const u8 gText_0827E531[]; +extern const u8 gText_0827E55A[]; +extern const u8 gText_0827E5B2[]; +extern const u8 gText_0827E5D0[]; +extern const u8 gText_0827E606[]; +extern const u8 gText_0827E638[]; +extern const u8 gText_0827E658[]; +extern const u8 gText_0827E68B[]; +extern const u8 gText_0827E6C4[]; +extern const u8 gText_0827E7BA[]; + +extern const u8 gText_0827E85F[]; +extern const u8 gText_0827E868[]; +extern const u8 gText_0827E86F[]; +extern const u8 gText_0827E878[]; +extern const u8 gText_0827E882[]; + +extern const u8 gText_0827E894[]; +extern const u8 gText_0827E89E[]; +extern const u8 gText_0827E8AA[]; +extern const u8 gText_0827E8B4[]; +extern const u8 gText_0827E8BF[]; +extern const u8 gText_0827E8CA[]; + +const u8 *const gContestEffectDescriptionPointers[] = +{ + gContestEffect00hDescription, + gContestEffect01hDescription, + gContestEffect02hDescription, + gContestEffect03hDescription, + gContestEffect04hDescription, + gContestEffect05hDescription, + gContestEffect06hDescription, + gContestEffect07hDescription, + gContestEffect08hDescription, + gContestEffect09hDescription, + gContestEffect0AhDescription, + gContestEffect0BhDescription, + gContestEffect0ChDescription, + gContestEffect0DhDescription, + gContestEffect0EhDescription, + gContestEffect0FhDescription, + gContestEffect10hDescription, + gContestEffect11hDescription, + gContestEffect12hDescription, + gContestEffect13hDescription, + gContestEffect14hDescription, + gContestEffect15hDescription, + gContestEffect16hDescription, + gContestEffect17hDescription, + gContestEffect18hDescription, + gContestEffect19hDescription, + gContestEffect1AhDescription, + gContestEffect1BhDescription, + gContestEffect1ChDescription, + gContestEffect1DhDescription, + gContestEffect1EhDescription, + gContestEffect1FhDescription, + gContestEffect20hDescription, + gContestEffect21hDescription, + gContestEffect22hDescription, + gContestEffect23hDescription, + gContestEffect24hDescription, + gContestEffect25hDescription, + gContestEffect26hDescription, + gContestEffect27hDescription, + gContestEffect28hDescription, + gContestEffect29hDescription, + gContestEffect2AhDescription, + gContestEffect2BhDescription, + gContestEffect2ChDescription, + gContestEffect2DhDescription, + gContestEffect2EhDescription, + gContestEffect2FhDescription +}; + +// Unreferenced array of pointers to move names. +// All of the moves except Conversion are combo starters, so this may have +// been an early list of combo starters. +const u8 *const gUnknown_8587D10[] = +{ + gUnusedContestMoveName0, + gUnusedContestMoveName0, + gUnusedContestMoveName1, + gUnusedContestMoveName2, + gUnusedContestMoveName3, + gUnusedContestMoveName4, + gUnusedContestMoveName5, + gUnusedContestMoveName6, + gUnusedContestMoveName7, + gUnusedContestMoveName8, + gUnusedContestMoveName9, + gUnusedContestMoveName10, + gUnusedContestMoveName11, + gUnusedContestMoveName12 +}; + +const u8 *const gContestMoveTypeTextPointers[] = +{ + gContestMoveTypeCoolText, + gContestMoveTypeBeautyText, + gContestMoveTypeCuteText, + gContestMoveTypeSmartText, + gContestMoveTypeToughText +}; + +const u8 *const gUnknown_08587D5C[] = +{ + gText_0827D5C1, + gText_0827D5DC, + gText_0827D600, + gText_0827D612, + gText_0827D612, + gText_0827D62D, + gText_0827D654, + gText_0827D67E, + gText_0827D69C, + gText_0827D6BA, + gText_0827D6E5, + gText_0827D706, + gText_0827D71D +}; + +const u8 *const gUnknown_08587D90[] = +{ + gText_0827D743, + gText_0827D764, + gText_0827D785, + gText_0827D7A5, + gText_0827D7C8, + gText_0827D7E8, + gText_0827D831, + gText_0827D855, + gText_0827D830, + gText_0827D872, + gText_0827D88F, + gText_0827D8B5, + gText_0827D8E4, + gText_0827D8FE, + gText_0827D926, + gText_0827D947, + gText_0827D961, + gText_0827D986, + gText_0827D9B1, + gText_0827D9D9, + gText_0827DA03, + gText_0827DA31, + gText_0827DA5B, + gText_0827DA85, + gText_0827DAB2, + gText_0827DADA, + gText_0827DB03, + gText_0827D830, + gText_0827D830, + gText_0827D830, + gText_0827DB1F, + gText_0827DB4E +}; + +const u8 *const gUnknown_08587E10[] = +{ + gText_827DB75, + gText_827DBB0, + gText_827DBE0, + gText_827DC0F, + gText_827DC45, + gText_827DC7C, + gText_827DCB4, + gText_827DCE7, + gText_827DD12, + gText_827DD3D, + gText_827DD6F, + gText_827DD8E, + gText_827DDC7, + gText_827DDF2, + gText_827DE14, + gText_827DE44, + gText_827DE73, + gText_827DEA5, + gText_827DED9, + gText_827DF02, + gText_827DF3A, + gText_827DF63, + gText_827DF8C, + gText_827DFB8, + gText_827DFE2, + gText_827E00C, + gText_827E02F, + gText_827E05F, + gText_827E08B, + gText_827E0B5, + gText_827E0DD, + gText_827E107, + gText_827E143, + gText_827E17F, + gText_827E1BB, + gText_827E1F3, + gText_827E220, + gText_827E254, + gText_827E289, + gText_827E2C5, + gText_0827E2FE, + gText_0827E32E, + gText_0827E35B, + gText_0827E38D, + gText_0827E3C1, + gText_0827E3EB, + gText_0827E416, + gText_0827E448, + gText_0827E473, + gText_0827E4A6, + gText_0827E4D5, + gText_0827E504, + gText_0827E531, + gText_0827E55A, + gText_0827E5B2, + gText_0827E5D0, + gText_0827E606, + gText_0827E638, + gText_0827E658, + gText_0827E68B, + gText_0827E6C4, + gText_0827E7BA +}; + +const u8 *const gUnknown_08587F08[] = +{ + gText_0827E85F, + gText_0827E868, + gText_0827E86F, + gText_0827E878, + gText_0827E882 +}; + +const u8 *const gUnknown_08587F1C[] = +{ + gText_0827E894, + gText_0827E89E, + gText_0827E8AA, + gText_0827E8B4, + gText_0827E8BF, + gText_0827E8CA +}; \ No newline at end of file -- cgit v1.2.3 From 5b4b0a245be14b7485c3e2cc40e40c78eeaa7ce0 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Sat, 9 Mar 2019 00:00:10 -0500 Subject: Move contest winner list to C --- src/contest.c | 149 ++++++++++++++++++++++++++++++++++++++++++- src/data/contest_opponents.h | 80 +++++++++++++++++++++++ 2 files changed, 226 insertions(+), 3 deletions(-) create mode 100644 src/data/contest_opponents.h (limited to 'src') diff --git a/src/contest.c b/src/contest.c index afb1c94d7..09847f6b6 100644 --- a/src/contest.c +++ b/src/contest.c @@ -218,8 +218,6 @@ EWRAM_DATA u8 gUnknown_02039F5D = 0; // IWRAM common vars. u32 gContestRngValue; -extern const struct BgTemplate gUnknown_08587F34[4]; -extern const struct WindowTemplate gUnknown_08587F44[]; extern const u8 *const gUnknown_0827E8DA[]; extern const u8 gText_0827D55A[]; extern const u8 gText_0827E793[]; @@ -252,7 +250,6 @@ extern const struct SpriteTemplate gSpriteTemplate_8587AD0; extern const struct SpriteTemplate gSpriteTemplate_8587B18[]; extern void (*const gContestEffectFuncs[])(void); extern const s8 gContestExcitementTable[][5]; -extern const struct ContestWinner gUnknown_08587FA4[]; extern const struct CompressedSpriteSheet gUnknown_08589904[]; extern const struct SpritePalette gUnknown_08589924[]; extern const struct SpriteTemplate gSpriteTemplate_858998C[]; @@ -581,6 +578,152 @@ const u16 gUnknown_08587C30[] = INCBIN_U16("graphics/unknown/unknown_587C30.gbap #include "data/contest_text_tables.h" +const struct BgTemplate gUnknown_08587F34[] = +{ + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 0x18, + .screenSize = 2, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 1, + .charBaseIndex = 2, + .mapBaseIndex = 0x1E, + .screenSize = 2, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, + { + .bg = 2, + .charBaseIndex = 0, + .mapBaseIndex = 0x1C, + .screenSize = 2, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, + { + .bg = 3, + .charBaseIndex = 0, + .mapBaseIndex = 0x1A, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0 + } +}; + +const struct WindowTemplate gUnknown_08587F44[] = +{ + { + .bg = 0, + .tilemapLeft = 18, + .tilemapTop = 0, + .width = 12, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x200 + }, + { + .bg = 0, + .tilemapLeft = 18, + .tilemapTop = 5, + .width = 12, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x218 + }, + { + .bg = 0, + .tilemapLeft = 18, + .tilemapTop = 10, + .width = 12, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x230 + }, + { + .bg = 0, + .tilemapLeft = 18, + .tilemapTop = 15, + .width = 12, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x248 + }, + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 15, + .width = 17, + .height = 4, + .paletteNum = 0xF, + .baseBlock = 0x260 + }, + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 0x1F, + .width = 9, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x2A4 + }, + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 0x21, + .width = 9, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x2B6 + }, + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 0x23, + .width = 9, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x2C8 + }, + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 0x25, + .width = 9, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x2DA + }, + { + .bg = 0, + .tilemapLeft = 16, + .tilemapTop = 0x1F, + .width = 1, + .height = 2, + .paletteNum = 0xF, + .baseBlock = 0x2EC + }, + { + .bg = 0, + .tilemapLeft = 11, + .tilemapTop = 0x23, + .width = 18, + .height = 4, + .paletteNum = 0xF, + .baseBlock = 0x2EE + }, + DUMMY_WIN_TEMPLATE +}; + +#include "data/contest_opponents.h" + static void TaskDummy1(u8 taskId) { } diff --git a/src/data/contest_opponents.h b/src/data/contest_opponents.h new file mode 100644 index 000000000..580d7916e --- /dev/null +++ b/src/data/contest_opponents.h @@ -0,0 +1,80 @@ + +#include "global.h" +#include "contest.h" +#include "constants/species.h" + +const struct ContestWinner gUnknown_08587FA4[] = +{ + { + .personality = 0, + .trainerId = 0xFFFF, + .species = SPECIES_ELECTRIKE, + .contestCategory = CONTEST_CATEGORY_CUTE, + .monName = _("ELECTER"), + .trainerName = _("EZRA"), + .contestRank = CONTEST_RANK_NORMAL + }, + { + .personality = 0, + .trainerId = 0xFFFF, + .species = SPECIES_TROPIUS, + .contestCategory = CONTEST_CATEGORY_COOL, + .monName = _("TROPO"), + .trainerName = _("ALLAN"), + .contestRank = CONTEST_RANK_HYPER + }, + { + .personality = 0, + .trainerId = 0xFFFF, + .species = SPECIES_XATU, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .monName = _("TUXA"), + .trainerName = _("JULIET"), + .contestRank = CONTEST_RANK_NORMAL + }, + { + .personality = 0, + .trainerId = 0xFFFF, + .species = SPECIES_PLUSLE, + .contestCategory = CONTEST_CATEGORY_TOUGH, + .monName = _("PULSE"), + .trainerName = _("BAILY"), + .contestRank = CONTEST_RANK_MASTER + }, + { + .personality = 0, + .trainerId = 0xFFFF, + .species = SPECIES_SHUPPET, + .contestCategory = CONTEST_CATEGORY_SMART, + .monName = _("SHUPUP"), + .trainerName = _("MELANY"), + .contestRank = CONTEST_RANK_SUPER + }, + { + .personality = 0, + .trainerId = 0xFFFF, + .species = SPECIES_ZANGOOSE, + .contestCategory = CONTEST_CATEGORY_COOL, + .monName = _("GOOZAN"), + .trainerName = _("HANA"), + .contestRank = CONTEST_RANK_HYPER + }, + { + .personality = 0, + .trainerId = 0xFFFF, + .species = SPECIES_LOUDRED, + .contestCategory = CONTEST_CATEGORY_BEAUTY, + .monName = _("LOUDED"), + .trainerName = _("BRYANT"), + .contestRank = CONTEST_RANK_HYPER + }, + { + .personality = 0, + .trainerId = 0xFFFF, + .species = SPECIES_DELCATTY, + .contestCategory = CONTEST_CATEGORY_CUTE, + .monName = _("KITSY"), + .trainerName = _("OMAR"), + .contestRank = CONTEST_RANK_MASTER + } +}; \ No newline at end of file -- cgit v1.2.3 From 153499ed6f08b6546349ba1ec33ea9e18840f44b Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Sat, 9 Mar 2019 01:38:38 -0500 Subject: Clean up contest_opponents.inc --- src/data/contest_opponents.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/data/contest_opponents.h b/src/data/contest_opponents.h index 580d7916e..07d41d824 100644 --- a/src/data/contest_opponents.h +++ b/src/data/contest_opponents.h @@ -77,4 +77,10 @@ const struct ContestWinner gUnknown_08587FA4[] = .trainerName = _("OMAR"), .contestRank = CONTEST_RANK_MASTER } -}; \ No newline at end of file +}; +/* +const struct ContestPokemon gContestOpponents[] = +{ + +};*/ +extern const struct ContestPokemon gContestOpponents[96]; \ No newline at end of file -- cgit v1.2.3 From a32e8e7405dc66c29ae04bb85bf9b07cd3cb21a9 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Sat, 9 Mar 2019 20:56:36 -0500 Subject: Move gContestOpponents into C 2,400 LOC by hand. --- src/contest.c | 1 - src/data/contest_opponents.h | 2790 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 2786 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/contest.c b/src/contest.c index 09847f6b6..3ef8d4b06 100644 --- a/src/contest.c +++ b/src/contest.c @@ -242,7 +242,6 @@ extern const u8 gText_Contest_Fear[]; extern const u8 gText_BDot[]; extern const u8 gText_CDot[]; extern const u8 *const gUnknown_08587E10[]; -extern const struct ContestPokemon gContestOpponents[96]; extern const u8 gUnknown_085898A4[96]; extern const union AffineAnimCmd *const gUnknown_082FF6C0[]; extern const union AffineAnimCmd *const gUnknown_082FF694[]; diff --git a/src/data/contest_opponents.h b/src/data/contest_opponents.h index 07d41d824..8937e9914 100644 --- a/src/data/contest_opponents.h +++ b/src/data/contest_opponents.h @@ -78,9 +78,2791 @@ const struct ContestWinner gUnknown_08587FA4[] = .contestRank = CONTEST_RANK_MASTER } }; -/* + const struct ContestPokemon gContestOpponents[] = { - -};*/ -extern const struct ContestPokemon gContestOpponents[96]; \ No newline at end of file + { + .species = SPECIES_POOCHYENA, + .nickname = _("POOCHY"), + .trainerName = _("JIMMY"), + .trainerGfxId = 7, + .flags = 0xC000FFF, + .whichRank = 0, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_ROAR, + MOVE_BITE, + MOVE_TAKE_DOWN, + MOVE_HOWL + }, + .cool = 10, + .beauty = 4, + .cute = 10, + .smart = 3, + .tough = 4, + .sheen = 50, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_ILLUMISE, + .nickname = _("MUSILLE"), + .trainerName = _("EDITH"), + .trainerGfxId = 8, + .flags = 0x82000FFF, + .whichRank = 0, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_REST, + MOVE_FACADE, + MOVE_TACKLE, + MOVE_COVET + }, + .cool = 10, + .beauty = 10, + .cute = 6, + .smart = 1, + .tough = 2, + .sheen = 60, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_DUSTOX, + .nickname = _("DUSTER"), + .trainerName = _("EVAN"), + .trainerGfxId = 11, + .flags = 0x21000FFF, + .whichRank = 0, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_SILVER_WIND, + MOVE_MOONLIGHT, + MOVE_LIGHT_SCREEN, + MOVE_GUST + }, + .cool = 2, + .beauty = 10, + .cute = 10, + .smart = 12, + .tough = 4, + .sheen = 70, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_SEEDOT, + .nickname = _("DOTS"), + .trainerName = _("KELSEY"), + .trainerGfxId = 16, + .flags = 0x20800FFF, + .whichRank = 0, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_BIDE, + MOVE_SYNTHESIS, + MOVE_BULLET_SEED, + MOVE_GROWTH + }, + .cool = 3, + .beauty = 3, + .cute = 5, + .smart = 2, + .tough = 7, + .sheen = 80, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_TAILLOW, + .nickname = _("TATAY"), + .trainerName = _("MADISON"), + .trainerGfxId = 18, + .flags = 0x80400FFF, + .whichRank = 0, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_WING_ATTACK, + MOVE_AGILITY, + MOVE_AERIAL_ACE, + MOVE_GROWL + }, + .cool = 1, + .beauty = 3, + .cute = 3, + .smart = 5, + .tough = 4, + .sheen = 90, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_NINCADA, + .nickname = _("NINDA"), + .trainerName = _("RAYMOND"), + .trainerGfxId = 44, + .flags = 0x10200FFF, + .whichRank = 0, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_LEECH_LIFE, + MOVE_FALSE_SWIPE, + MOVE_FURY_SWIPES, + MOVE_MIND_READER + }, + .cool = 5, + .beauty = 2, + .cute = 10, + .smart = 7, + .tough = 8, + .sheen = 100, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_SHROOMISH, + .nickname = _("SMISH"), + .trainerName = _("GRANT"), + .trainerGfxId = 35, + .flags = 0x20100FFF, + .whichRank = 0, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_STUN_SPORE, + MOVE_LEECH_SEED, + MOVE_MEGA_DRAIN, + MOVE_ATTRACT + }, + .cool = 3, + .beauty = 3, + .cute = 10, + .smart = 2, + .tough = 2, + .sheen = 50, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_SPHEAL, + .nickname = _("SLEAL"), + .trainerName = _("PAIGE"), + .trainerGfxId = 26, + .flags = 0x8080FFF, + .whichRank = 0, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_AURORA_BEAM, + MOVE_WATER_GUN, + MOVE_GROWL, + MOVE_ROCK_TOMB + }, + .cool = 3, + .beauty = 5, + .cute = 1, + .smart = 10, + .tough = 10, + .sheen = 60, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_SLAKOTH, + .nickname = _("SLOKTH"), + .trainerName = _("ALEC"), + .trainerGfxId = 31, + .flags = 0x40040FFF, + .whichRank = 0, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_STRENGTH, + MOVE_COUNTER, + MOVE_YAWN, + MOVE_ENCORE + }, + .cool = 10, + .beauty = 4, + .cute = 4, + .smart = 5, + .tough = 18, + .sheen = 70, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_WHISMUR, + .nickname = _("WHIRIS"), + .trainerName = _("SYDNEY"), + .trainerGfxId = 47, + .flags = 0x80020FFF, + .whichRank = 0, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_ASTONISH, + MOVE_SCREECH, + MOVE_UPROAR, + MOVE_HYPER_VOICE + }, + .cool = 2, + .beauty = 2, + .cute = 7, + .smart = 2, + .tough = 7, + .sheen = 80, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_MAKUHITA, + .nickname = _("MAHITA"), + .trainerName = _("MORRIS"), + .trainerGfxId = 38, + .flags = 0x8010FFF, + .whichRank = 0, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_SEISMIC_TOSS, + MOVE_VITAL_THROW, + MOVE_TACKLE, + MOVE_REVERSAL + }, + .cool = 9, + .beauty = 1, + .cute = 1, + .smart = 8, + .tough = 1, + .sheen = 90, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_ARON, + .nickname = _("RONAR"), + .trainerName = _("MARIAH"), + .trainerGfxId = 10, + .flags = 0x8008FFF, + .whichRank = 0, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_METAL_CLAW, + MOVE_IRON_DEFENSE, + MOVE_HEADBUTT, + MOVE_TAKE_DOWN + }, + .cool = 5, + .beauty = 10, + .cute = 2, + .smart = 10, + .tough = 2, + .sheen = 100, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_CROBAT, + .nickname = _("BATRO"), + .trainerName = _("RUSSELL"), + .trainerGfxId = 33, + .flags = 0x90004FFF, + .whichRank = 0, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_HAZE, + MOVE_MEAN_LOOK, + MOVE_CONFUSE_RAY, + MOVE_LEECH_LIFE + }, + .cool = 4, + .beauty = 2, + .cute = 2, + .smart = 2, + .tough = 10, + .sheen = 50, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_GULPIN, + .nickname = _("GULIN"), + .trainerName = _("MELANIE"), + .trainerGfxId = 6, + .flags = 0x40002FFF, + .whichRank = 0, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_SLUDGE, + MOVE_AMNESIA, + MOVE_TOXIC, + MOVE_YAWN + }, + .cool = 1, + .beauty = 10, + .cute = 1, + .smart = 10, + .tough = 5, + .sheen = 60, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_MANECTRIC, + .nickname = _("RIKELEC"), + .trainerName = _("CHANCE"), + .trainerGfxId = 15, + .flags = 0x80001FFF, + .whichRank = 0, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_SPARK, + MOVE_THUNDER_WAVE, + MOVE_THUNDER, + MOVE_ROAR + }, + .cool = 20, + .beauty = 10, + .cute = 1, + .smart = 1, + .tough = 1, + .sheen = 70, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_BULBASAUR, + .nickname = _("BULBY"), + .trainerName = _("AGATHA"), + .trainerGfxId = 20, + .flags = 0xC000FFF, + .whichRank = 0, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_GROWL, + MOVE_LEECH_SEED, + MOVE_TACKLE, + MOVE_SWEET_SCENT + }, + .cool = 5, + .beauty = 3, + .cute = 10, + .smart = 10, + .tough = 4, + .sheen = 50, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_BUTTERFREE, + .nickname = _("FUTTERBE"), + .trainerName = _("BEAU"), + .trainerGfxId = 40, + .flags = 0x82000FFF, + .whichRank = 0, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_SUPERSONIC, + MOVE_WHIRLWIND, + MOVE_SILVER_WIND, + MOVE_SAFEGUARD + }, + .cool = 3, + .beauty = 10, + .cute = 2, + .smart = 10, + .tough = 4, + .sheen = 60, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_PIDGEOTTO, + .nickname = _("PIDEOT"), + .trainerName = _("KAY"), + .trainerGfxId = 34, + .flags = 0x21000FFF, + .whichRank = 0, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_MIRROR_MOVE, + MOVE_QUICK_ATTACK, + MOVE_AERIAL_ACE, + MOVE_FEATHER_DANCE + }, + .cool = 10, + .beauty = 8, + .cute = 4, + .smart = 2, + .tough = 3, + .sheen = 70, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_DIGLETT, + .nickname = _("DIGLE"), + .trainerName = _("CALE"), + .trainerGfxId = 55, + .flags = 0x20800FFF, + .whichRank = 0, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_DIG, + MOVE_EARTHQUAKE, + MOVE_FISSURE, + MOVE_MAGNITUDE + }, + .cool = 4, + .beauty = 2, + .cute = 3, + .smart = 5, + .tough = 10, + .sheen = 80, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_POLIWAG, + .nickname = _("WAGIL"), + .trainerName = _("CAITLIN"), + .trainerGfxId = 53, + .flags = 0x80400FFF, + .whichRank = 0, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_HYDRO_PUMP, + MOVE_RAIN_DANCE, + MOVE_BODY_SLAM, + MOVE_ICE_BEAM + }, + .cool = 2, + .beauty = 10, + .cute = 5, + .smart = 3, + .tough = 10, + .sheen = 90, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_TOTODILE, + .nickname = _("TOTDIL"), + .trainerName = _("COLBY"), + .trainerGfxId = 5, + .flags = 0x10200FFF, + .whichRank = 0, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_RAGE, + MOVE_SCREECH, + MOVE_SURF, + MOVE_BLIZZARD + }, + .cool = 6, + .beauty = 10, + .cute = 2, + .smart = 1, + .tough = 5, + .sheen = 100, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_LEDYBA, + .nickname = _("BALEDY"), + .trainerName = _("KYLIE"), + .trainerGfxId = 45, + .flags = 0x20100FFF, + .whichRank = 0, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_BATON_PASS, + MOVE_AGILITY, + MOVE_SWIFT, + MOVE_ATTRACT + }, + .cool = 8, + .beauty = 6, + .cute = 8, + .smart = 6, + .tough = 2, + .sheen = 90, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_DELIBIRD, + .nickname = _("BIRDLY"), + .trainerName = _("LIAM"), + .trainerGfxId = 66, + .flags = 0x8080FFF, + .whichRank = 0, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_PRESENT, + MOVE_FACADE, + MOVE_FOCUS_PUNCH, + MOVE_RETURN + }, + .cool = 4, + .beauty = 3, + .cute = 10, + .smart = 5, + .tough = 3, + .sheen = 80, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_LARVITAR, + .nickname = _("TARVITAR"), + .trainerName = _("MILO"), + .trainerGfxId = 39, + .flags = 0x40040FFF, + .whichRank = 0, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_THRASH, + MOVE_TORMENT, + MOVE_CRUNCH, + MOVE_DIG + }, + .cool = 8, + .beauty = 5, + .cute = 5, + .smart = 8, + .tough = 10, + .sheen = 70, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_ROSELIA, + .nickname = _("RELIA"), + .trainerName = _("KARINA"), + .trainerGfxId = 32, + .flags = 0x24000FFF, + .whichRank = 1, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_PETAL_DANCE, + MOVE_MAGICAL_LEAF, + MOVE_GRASS_WHISTLE, + MOVE_INGRAIN + }, + .cool = 50, + .beauty = 15, + .cute = 75, + .smart = 10, + .tough = 20, + .sheen = 100, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_DODRIO, + .nickname = _("DUODO"), + .trainerName = _("BOBBY"), + .trainerGfxId = 51, + .flags = 0x82000FFF, + .whichRank = 1, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_PECK, + MOVE_FURY_ATTACK, + MOVE_RETURN, + MOVE_GROWL + }, + .cool = 15, + .beauty = 21, + .cute = 15, + .smart = 85, + .tough = 35, + .sheen = 110, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_TRAPINCH, + .nickname = _("PINCHIN"), + .trainerName = _("CLAIRE"), + .trainerGfxId = 8, + .flags = 0x81000FFF, + .whichRank = 1, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_BITE, + MOVE_SAND_ATTACK, + MOVE_DIG, + MOVE_FAINT_ATTACK + }, + .cool = 75, + .beauty = 25, + .cute = 25, + .smart = 10, + .tough = 25, + .sheen = 120, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_CACNEA, + .nickname = _("NACAC"), + .trainerName = _("WILLIE"), + .trainerGfxId = 11, + .flags = 0x80800FFF, + .whichRank = 1, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_SPIKES, + MOVE_LEER, + MOVE_POISON_STING, + MOVE_SAND_ATTACK + }, + .cool = 10, + .beauty = 30, + .cute = 25, + .smart = 65, + .tough = 25, + .sheen = 130, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_SANDSLASH, + .nickname = _("SHRAND"), + .trainerName = _("CASSIDY"), + .trainerGfxId = 18, + .flags = 0x10400FFF, + .whichRank = 1, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_SLASH, + MOVE_DEFENSE_CURL, + MOVE_SWIFT, + MOVE_FURY_SWIPES + }, + .cool = 30, + .beauty = 90, + .cute = 30, + .smart = 10, + .tough = 100, + .sheen = 140, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_BALTOY, + .nickname = _("TOYBAL"), + .trainerName = _("MORGAN"), + .trainerGfxId = 44, + .flags = 0x8200FFF, + .whichRank = 1, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_SELF_DESTRUCT, + MOVE_ROCK_TOMB, + MOVE_PSYBEAM, + MOVE_CONFUSION + }, + .cool = 50, + .beauty = 40, + .cute = 10, + .smart = 35, + .tough = 35, + .sheen = 150, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_MEDICHAM, + .nickname = _("CHAMCHAM"), + .trainerName = _("SUMMER"), + .trainerGfxId = 26, + .flags = 0x10100FFF, + .whichRank = 1, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_REVERSAL, + MOVE_THUNDER_PUNCH, + MOVE_FIRE_PUNCH, + MOVE_ICE_PUNCH + }, + .cool = 40, + .beauty = 20, + .cute = 40, + .smart = 40, + .tough = 40, + .sheen = 100, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_SPINDA, + .nickname = _("SPININ"), + .trainerName = _("MILES"), + .trainerGfxId = 31, + .flags = 0x80080FFF, + .whichRank = 1, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_TEETER_DANCE, + MOVE_PSYCH_UP, + MOVE_HYPNOSIS, + MOVE_UPROAR + }, + .cool = 25, + .beauty = 75, + .cute = 25, + .smart = 10, + .tough = 25, + .sheen = 110, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_SWABLU, + .nickname = _("SWABY"), + .trainerName = _("AUDREY"), + .trainerGfxId = 47, + .flags = 0xA0040FFF, + .whichRank = 1, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_MIRROR_MOVE, + MOVE_PERISH_SONG, + MOVE_SAFEGUARD, + MOVE_MIST + }, + .cool = 30, + .beauty = 30, + .cute = 40, + .smart = 30, + .tough = 25, + .sheen = 120, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_SPOINK, + .nickname = _("POINKER"), + .trainerName = _("AVERY"), + .trainerGfxId = 38, + .flags = 0x80020FFF, + .whichRank = 1, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_SPLASH, + MOVE_CONFUSE_RAY, + MOVE_SNORE, + MOVE_REST + }, + .cool = 40, + .beauty = 10, + .cute = 30, + .smart = 40, + .tough = 30, + .sheen = 130, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_KECLEON, + .nickname = _("KECON"), + .trainerName = _("ARIANA"), + .trainerGfxId = 10, + .flags = 0x80010FFF, + .whichRank = 1, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_THIEF, + MOVE_SCREECH, + MOVE_ANCIENT_POWER, + MOVE_BIND + }, + .cool = 10, + .beauty = 10, + .cute = 40, + .smart = 75, + .tough = 35, + .sheen = 140, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_GOLDEEN, + .nickname = _("GOLDEN"), + .trainerName = _("ASHTON"), + .trainerGfxId = 33, + .flags = 0x80008FFF, + .whichRank = 1, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_HORN_ATTACK, + MOVE_FURY_ATTACK, + MOVE_HORN_DRILL, + MOVE_TAIL_WHIP + }, + .cool = 70, + .beauty = 30, + .cute = 5, + .smart = 30, + .tough = 25, + .sheen = 150, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_BARBOACH, + .nickname = _("BOBOACH"), + .trainerName = _("SANDRA"), + .trainerGfxId = 6, + .flags = 0x80004FFF, + .whichRank = 1, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_MUD_SPORT, + MOVE_WATER_SPORT, + MOVE_EARTHQUAKE, + MOVE_FUTURE_SIGHT + }, + .cool = 45, + .beauty = 45, + .cute = 60, + .smart = 25, + .tough = 15, + .sheen = 100, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_SKARMORY, + .nickname = _("CORPY"), + .trainerName = _("CARSON"), + .trainerGfxId = 35, + .flags = 0x8002FFF, + .whichRank = 1, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_SWIFT, + MOVE_DOUBLE_TEAM, + MOVE_AGILITY, + MOVE_CUT + }, + .cool = 40, + .beauty = 30, + .cute = 25, + .smart = 60, + .tough = 20, + .sheen = 110, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_LOTAD, + .nickname = _("TADO"), + .trainerName = _("KATRINA"), + .trainerGfxId = 16, + .flags = 0x8001FFF, + .whichRank = 1, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_ASTONISH, + MOVE_GROWL, + MOVE_RAIN_DANCE, + MOVE_WATER_PULSE + }, + .cool = 15, + .beauty = 15, + .cute = 30, + .smart = 15, + .tough = 75, + .sheen = 120, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_SLOWBRO, + .nickname = _("BROWLO"), + .trainerName = _("LUKE"), + .trainerGfxId = 17, + .flags = 0xC000FFF, + .whichRank = 1, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_YAWN, + MOVE_DISABLE, + MOVE_GROWL, + MOVE_CONFUSION + }, + .cool = 20, + .beauty = 40, + .cute = 40, + .smart = 30, + .tough = 20, + .sheen = 100, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_FARFETCHD, + .nickname = _("FETCHIN"), + .trainerName = _("RAUL"), + .trainerGfxId = 66, + .flags = 0x82000FFF, + .whichRank = 1, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_FACADE, + MOVE_FURY_CUTTER, + MOVE_FLY, + MOVE_RETURN + }, + .cool = 40, + .beauty = 10, + .cute = 40, + .smart = 20, + .tough = 20, + .sheen = 110, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_SEEL, + .nickname = _("SEELEY"), + .trainerName = _("JADA"), + .trainerGfxId = 20, + .flags = 0x21000FFF, + .whichRank = 1, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_ATTRACT, + MOVE_ICE_BEAM, + MOVE_SAFEGUARD, + MOVE_GROWL + }, + .cool = 10, + .beauty = 30, + .cute = 40, + .smart = 20, + .tough = 20, + .sheen = 120, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_DROWZEE, + .nickname = _("DROWZIN"), + .trainerName = _("ZEEK"), + .trainerGfxId = 37, + .flags = 0x20800FFF, + .whichRank = 1, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_DISABLE, + MOVE_FUTURE_SIGHT, + MOVE_HIDDEN_POWER, + MOVE_RETURN + }, + .cool = 10, + .beauty = 40, + .cute = 50, + .smart = 30, + .tough = 45, + .sheen = 130, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_HITMONCHAN, + .nickname = _("HITEMON"), + .trainerName = _("DIEGO"), + .trainerGfxId = 21, + .flags = 0x80400FFF, + .whichRank = 1, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_SKY_UPPERCUT, + MOVE_DETECT, + MOVE_REVENGE, + MOVE_MEGA_PUNCH + }, + .cool = 45, + .beauty = 20, + .cute = 10, + .smart = 20, + .tough = 45, + .sheen = 140, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_BLISSEY, + .nickname = _("BLISS"), + .trainerName = _("ALIYAH"), + .trainerGfxId = 85, + .flags = 0x10200FFF, + .whichRank = 1, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_SING, + MOVE_SOFT_BOILED, + MOVE_EGG_BOMB, + MOVE_DOUBLE_EDGE + }, + .cool = 20, + .beauty = 35, + .cute = 40, + .smart = 20, + .tough = 20, + .sheen = 150, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_ELEKID, + .nickname = _("KIDLEK"), + .trainerName = _("NATALIA"), + .trainerGfxId = 18, + .flags = 0x20100FFF, + .whichRank = 1, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_SHOCK_WAVE, + MOVE_QUICK_ATTACK, + MOVE_SCREECH, + MOVE_ATTRACT + }, + .cool = 40, + .beauty = 10, + .cute = 40, + .smart = 25, + .tough = 25, + .sheen = 140, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_SNUBBULL, + .nickname = _("SNUBBINS"), + .trainerName = _("DEVIN"), + .trainerGfxId = 48, + .flags = 0x8080FFF, + .whichRank = 1, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_SCARY_FACE, + MOVE_TAUNT, + MOVE_TAIL_WHIP, + MOVE_BITE + }, + .cool = 20, + .beauty = 20, + .cute = 20, + .smart = 20, + .tough = 20, + .sheen = 130, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_MISDREAVUS, + .nickname = _("DREAVIS"), + .trainerName = _("TYLOR"), + .trainerGfxId = 40, + .flags = 0x40040FFF, + .whichRank = 1, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_PERISH_SONG, + MOVE_MEAN_LOOK, + MOVE_CONFUSE_RAY, + MOVE_PAIN_SPLIT + }, + .cool = 10, + .beauty = 35, + .cute = 10, + .smart = 45, + .tough = 20, + .sheen = 120, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_LAIRON, + .nickname = _("LAIRN"), + .trainerName = _("RONNIE"), + .trainerGfxId = 55, + .flags = 0x84000FFF, + .whichRank = 2, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_METAL_SOUND, + MOVE_METAL_CLAW, + MOVE_HARDEN, + MOVE_TAKE_DOWN + }, + .cool = 30, + .beauty = 50, + .cute = 35, + .smart = 100, + .tough = 90, + .sheen = 200, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_SHIFTRY, + .nickname = _("SHIFTY"), + .trainerName = _("CLAUDIA"), + .trainerGfxId = 8, + .flags = 0x82000FFF, + .whichRank = 2, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_GROWTH, + MOVE_RAZOR_WIND, + MOVE_EXPLOSION, + MOVE_EXTRASENSORY + }, + .cool = 75, + .beauty = 75, + .cute = 65, + .smart = 35, + .tough = 70, + .sheen = 210, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_NINJASK, + .nickname = _("NINAS"), + .trainerName = _("ELIAS"), + .trainerGfxId = 11, + .flags = 0x81000FFF, + .whichRank = 2, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_SCREECH, + MOVE_FURY_SWIPES, + MOVE_SAND_ATTACK, + MOVE_BATON_PASS + }, + .cool = 30, + .beauty = 50, + .cute = 95, + .smart = 70, + .tough = 70, + .sheen = 220, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_SWELLOW, + .nickname = _("WELOW"), + .trainerName = _("JADE"), + .trainerGfxId = 18, + .flags = 0x80800FFF, + .whichRank = 2, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_AGILITY, + MOVE_AERIAL_ACE, + MOVE_WING_ATTACK, + MOVE_FLY + }, + .cool = 65, + .beauty = 85, + .cute = 35, + .smart = 75, + .tough = 40, + .sheen = 230, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_MIGHTYENA, + .nickname = _("YENA"), + .trainerName = _("FRANCIS"), + .trainerGfxId = 44, + .flags = 0x80400FFF, + .whichRank = 2, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_TAUNT, + MOVE_THIEF, + MOVE_ODOR_SLEUTH, + MOVE_TAKE_DOWN + }, + .cool = 40, + .beauty = 80, + .cute = 35, + .smart = 70, + .tough = 70, + .sheen = 240, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_BEAUTIFLY, + .nickname = _("TIFLY"), + .trainerName = _("ALISHA"), + .trainerGfxId = 26, + .flags = 0x80200FFF, + .whichRank = 2, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_MORNING_SUN, + MOVE_SILVER_WIND, + MOVE_STUN_SPORE, + MOVE_SECRET_POWER + }, + .cool = 40, + .beauty = 70, + .cute = 25, + .smart = 80, + .tough = 100, + .sheen = 250, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_SEAKING, + .nickname = _("KINGSEA"), + .trainerName = _("SAUL"), + .trainerGfxId = 31, + .flags = 0x80100FFF, + .whichRank = 2, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_FLAIL, + MOVE_SUPERSONIC, + MOVE_HORN_ATTACK, + MOVE_FURY_ATTACK + }, + .cool = 80, + .beauty = 60, + .cute = 30, + .smart = 70, + .tough = 90, + .sheen = 200, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_CASTFORM, + .nickname = _("CASTER"), + .trainerName = _("FELICIA"), + .trainerGfxId = 47, + .flags = 0x80080FFF, + .whichRank = 2, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_SUNNY_DAY, + MOVE_WEATHER_BALL, + MOVE_SANDSTORM, + MOVE_RETURN + }, + .cool = 70, + .beauty = 80, + .cute = 80, + .smart = 50, + .tough = 65, + .sheen = 210, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_MACHOKE, + .nickname = _("CHOKEM"), + .trainerName = _("EMILIO"), + .trainerGfxId = 38, + .flags = 0x80040FFF, + .whichRank = 2, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_SEISMIC_TOSS, + MOVE_FOCUS_ENERGY, + MOVE_KARATE_CHOP, + MOVE_SCARY_FACE + }, + .cool = 70, + .beauty = 85, + .cute = 25, + .smart = 60, + .tough = 50, + .sheen = 220, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_LOMBRE, + .nickname = _("LOMBE"), + .trainerName = _("KARLA"), + .trainerGfxId = 10, + .flags = 0x80020FFF, + .whichRank = 2, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_ATTRACT, + MOVE_FLASH, + MOVE_UPROAR, + MOVE_GROWL + }, + .cool = 40, + .beauty = 60, + .cute = 90, + .smart = 45, + .tough = 70, + .sheen = 230, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_SEVIPER, + .nickname = _("VIPES"), + .trainerName = _("DARRYL"), + .trainerGfxId = 33, + .flags = 0x80010FFF, + .whichRank = 2, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_POISON_FANG, + MOVE_GLARE, + MOVE_WRAP, + MOVE_SCREECH + }, + .cool = 35, + .beauty = 50, + .cute = 90, + .smart = 40, + .tough = 100, + .sheen = 240, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_WAILMER, + .nickname = _("MERAIL"), + .trainerName = _("SELENA"), + .trainerGfxId = 22, + .flags = 0x80008FFF, + .whichRank = 2, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_WATER_PULSE, + MOVE_REST, + MOVE_WATER_SPOUT, + MOVE_SPLASH + }, + .cool = 30, + .beauty = 100, + .cute = 100, + .smart = 50, + .tough = 30, + .sheen = 250, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_MAGIKARP, + .nickname = _("KARPAG"), + .trainerName = _("NOEL"), + .trainerGfxId = 35, + .flags = 0x80004FFF, + .whichRank = 2, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_TACKLE, + MOVE_SPLASH, + MOVE_FLAIL, + MOVE_TACKLE + }, + .cool = 30, + .beauty = 30, + .cute = 160, + .smart = 50, + .tough = 160, + .sheen = 255, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_LUNATONE, + .nickname = _("LUNONE"), + .trainerName = _("LACEY"), + .trainerGfxId = 16, + .flags = 0x80002FFF, + .whichRank = 2, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_EXPLOSION, + MOVE_FUTURE_SIGHT, + MOVE_PSYCHIC, + MOVE_CONFUSION + }, + .cool = 50, + .beauty = 70, + .cute = 60, + .smart = 70, + .tough = 50, + .sheen = 210, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_ABSOL, + .nickname = _("ABSO"), + .trainerName = _("CORBIN"), + .trainerGfxId = 39, + .flags = 0x80001FFF, + .whichRank = 2, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_PERISH_SONG, + MOVE_HAIL, + MOVE_HYPER_BEAM, + MOVE_SLASH + }, + .cool = 95, + .beauty = 80, + .cute = 85, + .smart = 35, + .tough = 35, + .sheen = 220, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_EXEGGUTOR, + .nickname = _("EGGSOR"), + .trainerName = _("GRACIE"), + .trainerGfxId = 32, + .flags = 0xC000FFF, + .whichRank = 2, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_STOMP, + MOVE_HYPNOSIS, + MOVE_EGG_BOMB, + MOVE_SKILL_SWAP + }, + .cool = 40, + .beauty = 50, + .cute = 60, + .smart = 100, + .tough = 80, + .sheen = 200, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_CUBONE, + .nickname = _("CUBIN"), + .trainerName = _("COLTIN"), + .trainerGfxId = 65, + .flags = 0x82000FFF, + .whichRank = 2, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_BONE_CLUB, + MOVE_BONEMERANG, + MOVE_BONE_RUSH, + MOVE_GROWL + }, + .cool = 40, + .beauty = 35, + .cute = 85, + .smart = 35, + .tough = 100, + .sheen = 210, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_HITMONLEE, + .nickname = _("HITMON"), + .trainerName = _("ELLIE"), + .trainerGfxId = 22, + .flags = 0x21000FFF, + .whichRank = 2, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_REVERSAL, + MOVE_REVENGE, + MOVE_FOCUS_ENERGY, + MOVE_MEGA_KICK + }, + .cool = 85, + .beauty = 30, + .cute = 25, + .smart = 50, + .tough = 100, + .sheen = 220, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_SQUIRTLE, + .nickname = _("SURTLE"), + .trainerName = _("MARCUS"), + .trainerGfxId = 49, + .flags = 0x20800FFF, + .whichRank = 2, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_TAIL_WHIP, + MOVE_BUBBLE, + MOVE_FOCUS_PUNCH, + MOVE_WITHDRAW + }, + .cool = 30, + .beauty = 35, + .cute = 100, + .smart = 40, + .tough = 95, + .sheen = 230, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_KANGASKHAN, + .nickname = _("KHANKAN"), + .trainerName = _("KIARA"), + .trainerGfxId = 14, + .flags = 0x80400FFF, + .whichRank = 2, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_MEGA_PUNCH, + MOVE_RAGE, + MOVE_FOCUS_PUNCH, + MOVE_TAIL_WHIP + }, + .cool = 100, + .beauty = 50, + .cute = 30, + .smart = 50, + .tough = 100, + .sheen = 240, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_PINECO, + .nickname = _("PINOC"), + .trainerName = _("BRYCE"), + .trainerGfxId = 36, + .flags = 0x10200FFF, + .whichRank = 2, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_EXPLOSION, + MOVE_SPIKES, + MOVE_LIGHT_SCREEN, + MOVE_GIGA_DRAIN + }, + .cool = 80, + .beauty = 80, + .cute = 80, + .smart = 80, + .tough = 80, + .sheen = 250, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_DUNSPARCE, + .nickname = _("DILTOT"), + .trainerName = _("JAMIE"), + .trainerGfxId = 34, + .flags = 0x20100FFF, + .whichRank = 2, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_SPITE, + MOVE_YAWN, + MOVE_DEFENSE_CURL, + MOVE_TAKE_DOWN + }, + .cool = 40, + .beauty = 35, + .cute = 100, + .smart = 40, + .tough = 110, + .sheen = 240, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_HOUNDOOM, + .nickname = _("DOOMOND"), + .trainerName = _("JORGE"), + .trainerGfxId = 48, + .flags = 0x8080FFF, + .whichRank = 2, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_ROAR, + MOVE_FLAMETHROWER, + MOVE_FAINT_ATTACK, + MOVE_SUNNY_DAY + }, + .cool = 100, + .beauty = 100, + .cute = 30, + .smart = 25, + .tough = 80, + .sheen = 230, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_MILTANK, + .nickname = _("MILKAN"), + .trainerName = _("DEVON"), + .trainerGfxId = 25, + .flags = 0x40040FFF, + .whichRank = 2, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_MILK_DRINK, + MOVE_HEAL_BELL, + MOVE_DEFENSE_CURL, + MOVE_BLIZZARD + }, + .cool = 50, + .beauty = 110, + .cute = 100, + .smart = 35, + .tough = 40, + .sheen = 220, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_GYARADOS, + .nickname = _("RADOS"), + .trainerName = _("JUSTINA"), + .trainerGfxId = 32, + .flags = 0x84000FFF, + .whichRank = 3, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_HYPER_BEAM, + MOVE_HYDRO_PUMP, + MOVE_RAIN_DANCE, + MOVE_BITE + }, + .cool = 160, + .beauty = 200, + .cute = 20, + .smart = 40, + .tough = 160, + .sheen = 255, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_LOUDRED, + .nickname = _("LOUDERD"), + .trainerName = _("RALPH"), + .trainerGfxId = 21, + .flags = 0x82000FFF, + .whichRank = 3, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_HYPER_VOICE, + MOVE_STOMP, + MOVE_ROAR, + MOVE_HOWL + }, + .cool = 170, + .beauty = 50, + .cute = 55, + .smart = 150, + .tough = 160, + .sheen = 255, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_SKITTY, + .nickname = _("SITTY"), + .trainerName = _("ROSA"), + .trainerGfxId = 8, + .flags = 0x81000FFF, + .whichRank = 3, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_ATTRACT, + MOVE_ASSIST, + MOVE_FAINT_ATTACK, + MOVE_TAIL_WHIP + }, + .cool = 40, + .beauty = 200, + .cute = 150, + .smart = 185, + .tough = 60, + .sheen = 255, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_SLAKING, + .nickname = _("SLING"), + .trainerName = _("KEATON"), + .trainerGfxId = 11, + .flags = 0x80800FFF, + .whichRank = 3, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_COVET, + MOVE_COUNTER, + MOVE_ENCORE, + MOVE_SLACK_OFF + }, + .cool = 85, + .beauty = 85, + .cute = 170, + .smart = 110, + .tough = 150, + .sheen = 255, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_ALTARIA, + .nickname = _("TARIA"), + .trainerName = _("MAYRA"), + .trainerGfxId = 18, + .flags = 0x80400FFF, + .whichRank = 3, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_DRAGON_DANCE, + MOVE_HYPER_BEAM, + MOVE_PERISH_SONG, + MOVE_SAFEGUARD + }, + .cool = 170, + .beauty = 150, + .cute = 30, + .smart = 30, + .tough = 90, + .sheen = 255, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_KIRLIA, + .nickname = _("LIRKI"), + .trainerName = _("LAMAR"), + .trainerGfxId = 15, + .flags = 0x80200FFF, + .whichRank = 3, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_SHOCK_WAVE, + MOVE_SHADOW_BALL, + MOVE_SKILL_SWAP, + MOVE_RETURN + }, + .cool = 230, + .beauty = 60, + .cute = 60, + .smart = 230, + .tough = 80, + .sheen = 255, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_BELLOSSOM, + .nickname = _("BLOSSOM"), + .trainerName = _("AUBREY"), + .trainerGfxId = 26, + .flags = 0x80100FFF, + .whichRank = 3, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_PETAL_DANCE, + MOVE_SWEET_SCENT, + MOVE_STUN_SPORE, + MOVE_FLASH + }, + .cool = 35, + .beauty = 200, + .cute = 150, + .smart = 130, + .tough = 40, + .sheen = 255, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_SABLEYE, + .nickname = _("EYESAB"), + .trainerName = _("NIGEL"), + .trainerGfxId = 31, + .flags = 0x80080FFF, + .whichRank = 3, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_MEAN_LOOK, + MOVE_FAINT_ATTACK, + MOVE_KNOCK_OFF, + MOVE_CONFUSE_RAY + }, + .cool = 25, + .beauty = 35, + .cute = 230, + .smart = 150, + .tough = 160, + .sheen = 255, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_NATU, + .nickname = _("UTAN"), + .trainerName = _("CAMILLE"), + .trainerGfxId = 47, + .flags = 0x80040FFF, + .whichRank = 3, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_NIGHT_SHADE, + MOVE_FUTURE_SIGHT, + MOVE_CONFUSE_RAY, + MOVE_PSYCHIC + }, + .cool = 35, + .beauty = 35, + .cute = 150, + .smart = 130, + .tough = 170, + .sheen = 255, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_SHARPEDO, + .nickname = _("PEDOS"), + .trainerName = _("DEON"), + .trainerGfxId = 38, + .flags = 0x80020FFF, + .whichRank = 3, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_AGILITY, + MOVE_SWAGGER, + MOVE_TAUNT, + MOVE_TAKE_DOWN + }, + .cool = 140, + .beauty = 70, + .cute = 140, + .smart = 75, + .tough = 100, + .sheen = 255, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_LUVDISC, + .nickname = _("LUVIS"), + .trainerName = _("JANELLE"), + .trainerGfxId = 10, + .flags = 0x80010FFF, + .whichRank = 3, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_SWEET_KISS, + MOVE_ATTRACT, + MOVE_TAKE_DOWN, + MOVE_CHARM + }, + .cool = 50, + .beauty = 100, + .cute = 220, + .smart = 40, + .tough = 190, + .sheen = 255, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_HERACROSS, + .nickname = _("HEROSS"), + .trainerName = _("HEATH"), + .trainerGfxId = 33, + .flags = 0x80008FFF, + .whichRank = 3, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_STRENGTH, + MOVE_ENDURE, + MOVE_REVERSAL, + MOVE_ROCK_TOMB + }, + .cool = 170, + .beauty = 70, + .cute = 110, + .smart = 240, + .tough = 140, + .sheen = 255, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_ELECTRODE, + .nickname = _("RODLECT"), + .trainerName = _("SASHA"), + .trainerGfxId = 6, + .flags = 0x80004FFF, + .whichRank = 3, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_EXPLOSION, + MOVE_LIGHT_SCREEN, + MOVE_SWIFT, + MOVE_FLASH + }, + .cool = 200, + .beauty = 200, + .cute = 30, + .smart = 35, + .tough = 50, + .sheen = 255, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_PICHU, + .nickname = _("CHUPY"), + .trainerName = _("FRANKIE"), + .trainerGfxId = 35, + .flags = 0x80002FFF, + .whichRank = 3, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_SWEET_KISS, + MOVE_ATTRACT, + MOVE_REST, + MOVE_TAIL_WHIP + }, + .cool = 25, + .beauty = 150, + .cute = 180, + .smart = 115, + .tough = 120, + .sheen = 255, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_WOBBUFFET, + .nickname = _("WOBET"), + .trainerName = _("HELEN"), + .trainerGfxId = 16, + .flags = 0x80001FFF, + .whichRank = 3, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_COUNTER, + MOVE_MIRROR_COAT, + MOVE_SAFEGUARD, + MOVE_DESTINY_BOND + }, + .cool = 60, + .beauty = 230, + .cute = 50, + .smart = 220, + .tough = 210, + .sheen = 255, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_GENGAR, + .nickname = _("GAREN"), + .trainerName = _("CAMILE"), + .trainerGfxId = 40, + .flags = 0xC000FFF, + .whichRank = 3, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_DESTINY_BOND, + MOVE_CONFUSE_RAY, + MOVE_LICK, + MOVE_SLUDGE_BOMB + }, + .cool = 200, + .beauty = 100, + .cute = 50, + .smart = 80, + .tough = 180, + .sheen = 255, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_PORYGON, + .nickname = _("GONPOR"), + .trainerName = _("MARTIN"), + .trainerGfxId = 46, + .flags = 0x82000FFF, + .whichRank = 3, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_CONVERSION_2, + MOVE_CONVERSION, + MOVE_RETURN, + MOVE_RECYCLE + }, + .cool = 130, + .beauty = 130, + .cute = 130, + .smart = 130, + .tough = 130, + .sheen = 255, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_DRAGONITE, + .nickname = _("DRITE"), + .trainerName = _("SERGIO"), + .trainerGfxId = 7, + .flags = 0x21000FFF, + .whichRank = 3, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_OUTRAGE, + MOVE_SLAM, + MOVE_TWISTER, + MOVE_EARTHQUAKE + }, + .cool = 150, + .beauty = 140, + .cute = 50, + .smart = 120, + .tough = 150, + .sheen = 255, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_MEOWTH, + .nickname = _("MEOWY"), + .trainerName = _("KAILEY"), + .trainerGfxId = 6, + .flags = 0x20800FFF, + .whichRank = 3, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_GROWL, + MOVE_TAUNT, + MOVE_PAY_DAY, + MOVE_BITE + }, + .cool = 125, + .beauty = 110, + .cute = 180, + .smart = 170, + .tough = 80, + .sheen = 255, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_JYNX, + .nickname = _("NYX"), + .trainerName = _("PERLA"), + .trainerGfxId = 45, + .flags = 0x80400FFF, + .whichRank = 3, + .aiPool_Cool = FALSE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = TRUE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_PERISH_SONG, + MOVE_MEAN_LOOK, + MOVE_LOVELY_KISS, + MOVE_FAKE_TEARS + }, + .cool = 100, + .beauty = 150, + .cute = 100, + .smart = 150, + .tough = 120, + .sheen = 255, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_TOGEPI, + .nickname = _("GEPITO"), + .trainerName = _("CLARA"), + .trainerGfxId = 20, + .flags = 0x10200FFF, + .whichRank = 3, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_GROWL, + MOVE_YAWN, + MOVE_ENCORE, + MOVE_FOLLOW_ME + }, + .cool = 80, + .beauty = 120, + .cute = 200, + .smart = 120, + .tough = 80, + .sheen = 255, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_ESPEON, + .nickname = _("SPEON"), + .trainerName = _("JAKOB"), + .trainerGfxId = 37, + .flags = 0x20100FFF, + .whichRank = 3, + .aiPool_Cool = TRUE, + .aiPool_Beauty = TRUE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = FALSE, + .moves = + { + MOVE_SWIFT, + MOVE_QUICK_ATTACK, + MOVE_MORNING_SUN, + MOVE_TAIL_WHIP + }, + .cool = 180, + .beauty = 150, + .cute = 100, + .smart = 80, + .tough = 150, + .sheen = 255, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_SLOWKING, + .nickname = _("SLOWGO"), + .trainerName = _("TREY"), + .trainerGfxId = 49, + .flags = 0x8080FFF, + .whichRank = 3, + .aiPool_Cool = FALSE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = TRUE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_FACADE, + MOVE_CURSE, + MOVE_YAWN, + MOVE_FOCUS_PUNCH + }, + .cool = 100, + .beauty = 80, + .cute = 200, + .smart = 110, + .tough = 170, + .sheen = 255, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + }, + { + .species = SPECIES_URSARING, + .nickname = _("URSING"), + .trainerName = _("LANE"), + .trainerGfxId = 44, + .flags = 0x40040FFF, + .whichRank = 3, + .aiPool_Cool = TRUE, + .aiPool_Beauty = FALSE, + .aiPool_Cute = FALSE, + .aiPool_Smart = FALSE, + .aiPool_Tough = TRUE, + .moves = + { + MOVE_THRASH, + MOVE_AERIAL_ACE, + MOVE_FAKE_TEARS, + MOVE_LEER + }, + .cool = 180, + .beauty = 140, + .cute = 30, + .smart = 80, + .tough = 190, + .sheen = 255, + .unk2C = {0}, + .personality = 0, + .otId = 0xFFFF + } +}; \ No newline at end of file -- cgit v1.2.3 From 0c935a8bd500535ba67fad4f25ea50199cfc1871 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Sat, 9 Mar 2019 22:54:17 -0500 Subject: Move the contest opponent filter to C --- src/contest.c | 7 +- src/data/contest_opponents.h | 390 ++++++++++++++++++++++++++++++++----------- 2 files changed, 297 insertions(+), 100 deletions(-) (limited to 'src') diff --git a/src/contest.c b/src/contest.c index 3ef8d4b06..bebe344b9 100644 --- a/src/contest.c +++ b/src/contest.c @@ -242,7 +242,6 @@ extern const u8 gText_Contest_Fear[]; extern const u8 gText_BDot[]; extern const u8 gText_CDot[]; extern const u8 *const gUnknown_08587E10[]; -extern const u8 gUnknown_085898A4[96]; extern const union AffineAnimCmd *const gUnknown_082FF6C0[]; extern const union AffineAnimCmd *const gUnknown_082FF694[]; extern const struct SpriteTemplate gSpriteTemplate_8587AD0; @@ -2565,7 +2564,7 @@ void sub_80DAB8C(u8 contestType, u8 rank) r7 = TRUE; // Find all suitable opponents - r3 = gUnknown_085898A4; + r3 = gPostgameContestOpponentFilter; for (i = 0; i < ARRAY_COUNT(gContestOpponents); i++) { if (rank == gContestOpponents[i].whichRank) @@ -2625,12 +2624,12 @@ void sub_80DACBC(u8 contestType, u8 rank, bool32 isPostgame) if (isPostgame == TRUE) { - if (gUnknown_085898A4[i] == 1) + if (gPostgameContestOpponentFilter[i] == CONTEST_FILTER_NO_POSTGAME) continue; } else { - if (gUnknown_085898A4[i] == 2) + if (gPostgameContestOpponentFilter[i] == CONTEST_FILTER_ONLY_POSTGAME) continue; } if ((contestType == CONTEST_CATEGORY_COOL && gContestOpponents[i].aiPool_Cool) diff --git a/src/data/contest_opponents.h b/src/data/contest_opponents.h index 8937e9914..2ebfd1dfd 100644 --- a/src/data/contest_opponents.h +++ b/src/data/contest_opponents.h @@ -3,6 +3,103 @@ #include "contest.h" #include "constants/species.h" +#define CONTEST_OPPONENT_JIMMY 0 +#define CONTEST_OPPONENT_EDITH 1 +#define CONTEST_OPPONENT_EVAN 2 +#define CONTEST_OPPONENT_KELSEY 3 +#define CONTEST_OPPONENT_MADISON 4 +#define CONTEST_OPPONENT_RAYMOND 5 +#define CONTEST_OPPONENT_GRANT 6 +#define CONTEST_OPPONENT_PAIGE 7 +#define CONTEST_OPPONENT_ALEC 8 +#define CONTEST_OPPONENT_SYDNEY 9 +#define CONTEST_OPPONENT_MORRIS 10 +#define CONTEST_OPPONENT_MARIAH 11 +#define CONTEST_OPPONENT_RUSSELL 12 +#define CONTEST_OPPONENT_MELANIE 13 +#define CONTEST_OPPONENT_CHANCE 14 +#define CONTEST_OPPONENT_AGATHA 15 +#define CONTEST_OPPONENT_BEAU 16 +#define CONTEST_OPPONENT_KAY 17 +#define CONTEST_OPPONENT_CALE 18 +#define CONTEST_OPPONENT_CAITLIN 19 +#define CONTEST_OPPONENT_COLBY 20 +#define CONTEST_OPPONENT_KYLIE 21 +#define CONTEST_OPPONENT_LIAM 22 +#define CONTEST_OPPONENT_MILO 23 +#define CONTEST_OPPONENT_KARINA 24 +#define CONTEST_OPPONENT_BOBBY 25 +#define CONTEST_OPPONENT_CLAIRE 26 +#define CONTEST_OPPONENT_WILLIE 27 +#define CONTEST_OPPONENT_CASSIDY 28 +#define CONTEST_OPPONENT_MORGAN 29 +#define CONTEST_OPPONENT_SUMMER 30 +#define CONTEST_OPPONENT_MILES 31 +#define CONTEST_OPPONENT_AUDREY 32 +#define CONTEST_OPPONENT_AVERY 33 +#define CONTEST_OPPONENT_ARIANA 34 +#define CONTEST_OPPONENT_ASHTON 35 +#define CONTEST_OPPONENT_SANDRA 36 +#define CONTEST_OPPONENT_CARSON 37 +#define CONTEST_OPPONENT_KATRINA 38 +#define CONTEST_OPPONENT_LUKE 39 +#define CONTEST_OPPONENT_RAUL 40 +#define CONTEST_OPPONENT_JADA 41 +#define CONTEST_OPPONENT_ZEEK 42 +#define CONTEST_OPPONENT_DIEGO 43 +#define CONTEST_OPPONENT_ALIYAH 44 +#define CONTEST_OPPONENT_NATALIA 45 +#define CONTEST_OPPONENT_DEVIN 46 +#define CONTEST_OPPONENT_TYLOR 47 +#define CONTEST_OPPONENT_RONNIE 48 +#define CONTEST_OPPONENT_CLAUDIA 49 +#define CONTEST_OPPONENT_ELIAS 50 +#define CONTEST_OPPONENT_JADE 51 +#define CONTEST_OPPONENT_FRANCIS 52 +#define CONTEST_OPPONENT_ALISHA 53 +#define CONTEST_OPPONENT_SAUL 54 +#define CONTEST_OPPONENT_FELICIA 55 +#define CONTEST_OPPONENT_EMILIO 56 +#define CONTEST_OPPONENT_KARLA 57 +#define CONTEST_OPPONENT_DARRYL 58 +#define CONTEST_OPPONENT_SELENA 59 +#define CONTEST_OPPONENT_NOEL 60 +#define CONTEST_OPPONENT_LACEY 61 +#define CONTEST_OPPONENT_CORBIN 62 +#define CONTEST_OPPONENT_GRACIE 63 +#define CONTEST_OPPONENT_COLTIN 64 +#define CONTEST_OPPONENT_ELLIE 65 +#define CONTEST_OPPONENT_MARCUS 66 +#define CONTEST_OPPONENT_KIARA 67 +#define CONTEST_OPPONENT_BRYCE 68 +#define CONTEST_OPPONENT_JAMIE 69 +#define CONTEST_OPPONENT_JORGE 70 +#define CONTEST_OPPONENT_DEVON 71 +#define CONTEST_OPPONENT_JUSTINA 72 +#define CONTEST_OPPONENT_RALPH 73 +#define CONTEST_OPPONENT_ROSA 74 +#define CONTEST_OPPONENT_KEATON 75 +#define CONTEST_OPPONENT_MAYRA 76 +#define CONTEST_OPPONENT_LAMAR 77 +#define CONTEST_OPPONENT_AUBREY 78 +#define CONTEST_OPPONENT_NIGEL 79 +#define CONTEST_OPPONENT_CAMILLE 80 +#define CONTEST_OPPONENT_DEON 81 +#define CONTEST_OPPONENT_JANELLE 82 +#define CONTEST_OPPONENT_HEATH 83 +#define CONTEST_OPPONENT_SASHA 84 +#define CONTEST_OPPONENT_FRANKIE 85 +#define CONTEST_OPPONENT_HELEN 86 +#define CONTEST_OPPONENT_CAMILE 87 +#define CONTEST_OPPONENT_MARTIN 88 +#define CONTEST_OPPONENT_SERGIO 89 +#define CONTEST_OPPONENT_KAILEY 90 +#define CONTEST_OPPONENT_PERLA 91 +#define CONTEST_OPPONENT_CLARA 92 +#define CONTEST_OPPONENT_JAKOB 93 +#define CONTEST_OPPONENT_TREY 94 +#define CONTEST_OPPONENT_LANE 95 + const struct ContestWinner gUnknown_08587FA4[] = { { @@ -81,7 +178,7 @@ const struct ContestWinner gUnknown_08587FA4[] = const struct ContestPokemon gContestOpponents[] = { - { + [CONTEST_OPPONENT_JIMMY] = { .species = SPECIES_POOCHYENA, .nickname = _("POOCHY"), .trainerName = _("JIMMY"), @@ -110,7 +207,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_EDITH] = { .species = SPECIES_ILLUMISE, .nickname = _("MUSILLE"), .trainerName = _("EDITH"), @@ -139,7 +236,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_EVAN] = { .species = SPECIES_DUSTOX, .nickname = _("DUSTER"), .trainerName = _("EVAN"), @@ -168,7 +265,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_KELSEY] = { .species = SPECIES_SEEDOT, .nickname = _("DOTS"), .trainerName = _("KELSEY"), @@ -197,7 +294,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_MADISON] = { .species = SPECIES_TAILLOW, .nickname = _("TATAY"), .trainerName = _("MADISON"), @@ -226,7 +323,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_RAYMOND] = { .species = SPECIES_NINCADA, .nickname = _("NINDA"), .trainerName = _("RAYMOND"), @@ -255,7 +352,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_GRANT] = { .species = SPECIES_SHROOMISH, .nickname = _("SMISH"), .trainerName = _("GRANT"), @@ -284,7 +381,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_PAIGE] = { .species = SPECIES_SPHEAL, .nickname = _("SLEAL"), .trainerName = _("PAIGE"), @@ -313,7 +410,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_ALEC] = { .species = SPECIES_SLAKOTH, .nickname = _("SLOKTH"), .trainerName = _("ALEC"), @@ -342,7 +439,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_SYDNEY] = { .species = SPECIES_WHISMUR, .nickname = _("WHIRIS"), .trainerName = _("SYDNEY"), @@ -371,7 +468,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_MORRIS] = { .species = SPECIES_MAKUHITA, .nickname = _("MAHITA"), .trainerName = _("MORRIS"), @@ -400,7 +497,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_MARIAH] = { .species = SPECIES_ARON, .nickname = _("RONAR"), .trainerName = _("MARIAH"), @@ -429,7 +526,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_RUSSELL] = { .species = SPECIES_CROBAT, .nickname = _("BATRO"), .trainerName = _("RUSSELL"), @@ -458,7 +555,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_MELANIE] = { .species = SPECIES_GULPIN, .nickname = _("GULIN"), .trainerName = _("MELANIE"), @@ -487,7 +584,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_CHANCE] = { .species = SPECIES_MANECTRIC, .nickname = _("RIKELEC"), .trainerName = _("CHANCE"), @@ -516,7 +613,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_AGATHA] = { .species = SPECIES_BULBASAUR, .nickname = _("BULBY"), .trainerName = _("AGATHA"), @@ -545,7 +642,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_BEAU] = { .species = SPECIES_BUTTERFREE, .nickname = _("FUTTERBE"), .trainerName = _("BEAU"), @@ -574,7 +671,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_KAY] = { .species = SPECIES_PIDGEOTTO, .nickname = _("PIDEOT"), .trainerName = _("KAY"), @@ -603,7 +700,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_CALE] = { .species = SPECIES_DIGLETT, .nickname = _("DIGLE"), .trainerName = _("CALE"), @@ -632,7 +729,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_CAITLIN] = { .species = SPECIES_POLIWAG, .nickname = _("WAGIL"), .trainerName = _("CAITLIN"), @@ -661,7 +758,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_COLBY] = { .species = SPECIES_TOTODILE, .nickname = _("TOTDIL"), .trainerName = _("COLBY"), @@ -690,7 +787,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_KYLIE] = { .species = SPECIES_LEDYBA, .nickname = _("BALEDY"), .trainerName = _("KYLIE"), @@ -719,7 +816,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_LIAM] = { .species = SPECIES_DELIBIRD, .nickname = _("BIRDLY"), .trainerName = _("LIAM"), @@ -748,7 +845,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_MILO] = { .species = SPECIES_LARVITAR, .nickname = _("TARVITAR"), .trainerName = _("MILO"), @@ -777,7 +874,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_KARINA] = { .species = SPECIES_ROSELIA, .nickname = _("RELIA"), .trainerName = _("KARINA"), @@ -806,7 +903,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_BOBBY] = { .species = SPECIES_DODRIO, .nickname = _("DUODO"), .trainerName = _("BOBBY"), @@ -835,7 +932,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_CLAIRE] = { .species = SPECIES_TRAPINCH, .nickname = _("PINCHIN"), .trainerName = _("CLAIRE"), @@ -864,7 +961,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_WILLIE] = { .species = SPECIES_CACNEA, .nickname = _("NACAC"), .trainerName = _("WILLIE"), @@ -893,7 +990,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_CASSIDY] = { .species = SPECIES_SANDSLASH, .nickname = _("SHRAND"), .trainerName = _("CASSIDY"), @@ -922,7 +1019,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_MORGAN] = { .species = SPECIES_BALTOY, .nickname = _("TOYBAL"), .trainerName = _("MORGAN"), @@ -951,7 +1048,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_SUMMER] = { .species = SPECIES_MEDICHAM, .nickname = _("CHAMCHAM"), .trainerName = _("SUMMER"), @@ -980,7 +1077,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_MILES] = { .species = SPECIES_SPINDA, .nickname = _("SPININ"), .trainerName = _("MILES"), @@ -1009,7 +1106,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_AUDREY] = { .species = SPECIES_SWABLU, .nickname = _("SWABY"), .trainerName = _("AUDREY"), @@ -1038,7 +1135,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_AVERY] = { .species = SPECIES_SPOINK, .nickname = _("POINKER"), .trainerName = _("AVERY"), @@ -1067,7 +1164,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_ARIANA] = { .species = SPECIES_KECLEON, .nickname = _("KECON"), .trainerName = _("ARIANA"), @@ -1096,7 +1193,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_ASHTON] = { .species = SPECIES_GOLDEEN, .nickname = _("GOLDEN"), .trainerName = _("ASHTON"), @@ -1125,7 +1222,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_SANDRA] = { .species = SPECIES_BARBOACH, .nickname = _("BOBOACH"), .trainerName = _("SANDRA"), @@ -1154,7 +1251,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_CARSON] = { .species = SPECIES_SKARMORY, .nickname = _("CORPY"), .trainerName = _("CARSON"), @@ -1183,7 +1280,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_KATRINA] = { .species = SPECIES_LOTAD, .nickname = _("TADO"), .trainerName = _("KATRINA"), @@ -1212,7 +1309,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_LUKE] = { .species = SPECIES_SLOWBRO, .nickname = _("BROWLO"), .trainerName = _("LUKE"), @@ -1241,7 +1338,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_RAUL] = { .species = SPECIES_FARFETCHD, .nickname = _("FETCHIN"), .trainerName = _("RAUL"), @@ -1270,7 +1367,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_JADA] = { .species = SPECIES_SEEL, .nickname = _("SEELEY"), .trainerName = _("JADA"), @@ -1299,7 +1396,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_ZEEK] = { .species = SPECIES_DROWZEE, .nickname = _("DROWZIN"), .trainerName = _("ZEEK"), @@ -1328,7 +1425,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_DIEGO] = { .species = SPECIES_HITMONCHAN, .nickname = _("HITEMON"), .trainerName = _("DIEGO"), @@ -1357,7 +1454,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_ALIYAH] = { .species = SPECIES_BLISSEY, .nickname = _("BLISS"), .trainerName = _("ALIYAH"), @@ -1386,7 +1483,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_NATALIA] = { .species = SPECIES_ELEKID, .nickname = _("KIDLEK"), .trainerName = _("NATALIA"), @@ -1415,7 +1512,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_DEVIN] = { .species = SPECIES_SNUBBULL, .nickname = _("SNUBBINS"), .trainerName = _("DEVIN"), @@ -1444,7 +1541,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_TYLOR] = { .species = SPECIES_MISDREAVUS, .nickname = _("DREAVIS"), .trainerName = _("TYLOR"), @@ -1473,7 +1570,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_RONNIE] = { .species = SPECIES_LAIRON, .nickname = _("LAIRN"), .trainerName = _("RONNIE"), @@ -1502,7 +1599,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_CLAUDIA] = { .species = SPECIES_SHIFTRY, .nickname = _("SHIFTY"), .trainerName = _("CLAUDIA"), @@ -1531,7 +1628,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_ELIAS] = { .species = SPECIES_NINJASK, .nickname = _("NINAS"), .trainerName = _("ELIAS"), @@ -1560,7 +1657,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_JADE] = { .species = SPECIES_SWELLOW, .nickname = _("WELOW"), .trainerName = _("JADE"), @@ -1589,7 +1686,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_FRANCIS] = { .species = SPECIES_MIGHTYENA, .nickname = _("YENA"), .trainerName = _("FRANCIS"), @@ -1618,7 +1715,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_ALISHA] = { .species = SPECIES_BEAUTIFLY, .nickname = _("TIFLY"), .trainerName = _("ALISHA"), @@ -1647,7 +1744,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_SAUL] = { .species = SPECIES_SEAKING, .nickname = _("KINGSEA"), .trainerName = _("SAUL"), @@ -1676,7 +1773,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_FELICIA] = { .species = SPECIES_CASTFORM, .nickname = _("CASTER"), .trainerName = _("FELICIA"), @@ -1705,7 +1802,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_EMILIO] = { .species = SPECIES_MACHOKE, .nickname = _("CHOKEM"), .trainerName = _("EMILIO"), @@ -1734,7 +1831,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_KARLA] = { .species = SPECIES_LOMBRE, .nickname = _("LOMBE"), .trainerName = _("KARLA"), @@ -1763,7 +1860,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_DARRYL] = { .species = SPECIES_SEVIPER, .nickname = _("VIPES"), .trainerName = _("DARRYL"), @@ -1792,7 +1889,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_SELENA] = { .species = SPECIES_WAILMER, .nickname = _("MERAIL"), .trainerName = _("SELENA"), @@ -1821,7 +1918,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_NOEL] = { .species = SPECIES_MAGIKARP, .nickname = _("KARPAG"), .trainerName = _("NOEL"), @@ -1850,7 +1947,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_LACEY] = { .species = SPECIES_LUNATONE, .nickname = _("LUNONE"), .trainerName = _("LACEY"), @@ -1879,7 +1976,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_CORBIN] = { .species = SPECIES_ABSOL, .nickname = _("ABSO"), .trainerName = _("CORBIN"), @@ -1908,7 +2005,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_GRACIE] = { .species = SPECIES_EXEGGUTOR, .nickname = _("EGGSOR"), .trainerName = _("GRACIE"), @@ -1937,7 +2034,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_COLTIN] = { .species = SPECIES_CUBONE, .nickname = _("CUBIN"), .trainerName = _("COLTIN"), @@ -1966,7 +2063,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_ELLIE] = { .species = SPECIES_HITMONLEE, .nickname = _("HITMON"), .trainerName = _("ELLIE"), @@ -1995,7 +2092,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_MARCUS] = { .species = SPECIES_SQUIRTLE, .nickname = _("SURTLE"), .trainerName = _("MARCUS"), @@ -2024,7 +2121,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_KIARA] = { .species = SPECIES_KANGASKHAN, .nickname = _("KHANKAN"), .trainerName = _("KIARA"), @@ -2053,7 +2150,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_BRYCE] = { .species = SPECIES_PINECO, .nickname = _("PINOC"), .trainerName = _("BRYCE"), @@ -2082,7 +2179,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_JAMIE] = { .species = SPECIES_DUNSPARCE, .nickname = _("DILTOT"), .trainerName = _("JAMIE"), @@ -2111,7 +2208,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_JORGE] = { .species = SPECIES_HOUNDOOM, .nickname = _("DOOMOND"), .trainerName = _("JORGE"), @@ -2140,7 +2237,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_DEVON] = { .species = SPECIES_MILTANK, .nickname = _("MILKAN"), .trainerName = _("DEVON"), @@ -2169,7 +2266,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_JUSTINA] = { .species = SPECIES_GYARADOS, .nickname = _("RADOS"), .trainerName = _("JUSTINA"), @@ -2198,7 +2295,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_RALPH] = { .species = SPECIES_LOUDRED, .nickname = _("LOUDERD"), .trainerName = _("RALPH"), @@ -2227,7 +2324,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_ROSA] = { .species = SPECIES_SKITTY, .nickname = _("SITTY"), .trainerName = _("ROSA"), @@ -2256,7 +2353,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_KEATON] = { .species = SPECIES_SLAKING, .nickname = _("SLING"), .trainerName = _("KEATON"), @@ -2285,7 +2382,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_MAYRA] = { .species = SPECIES_ALTARIA, .nickname = _("TARIA"), .trainerName = _("MAYRA"), @@ -2314,7 +2411,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_LAMAR] = { .species = SPECIES_KIRLIA, .nickname = _("LIRKI"), .trainerName = _("LAMAR"), @@ -2343,7 +2440,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_AUBREY] = { .species = SPECIES_BELLOSSOM, .nickname = _("BLOSSOM"), .trainerName = _("AUBREY"), @@ -2372,7 +2469,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_NIGEL] = { .species = SPECIES_SABLEYE, .nickname = _("EYESAB"), .trainerName = _("NIGEL"), @@ -2401,7 +2498,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_CAMILLE] = { .species = SPECIES_NATU, .nickname = _("UTAN"), .trainerName = _("CAMILLE"), @@ -2430,7 +2527,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_DEON] = { .species = SPECIES_SHARPEDO, .nickname = _("PEDOS"), .trainerName = _("DEON"), @@ -2459,7 +2556,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_JANELLE] = { .species = SPECIES_LUVDISC, .nickname = _("LUVIS"), .trainerName = _("JANELLE"), @@ -2488,7 +2585,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_HEATH] = { .species = SPECIES_HERACROSS, .nickname = _("HEROSS"), .trainerName = _("HEATH"), @@ -2517,7 +2614,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_SASHA] = { .species = SPECIES_ELECTRODE, .nickname = _("RODLECT"), .trainerName = _("SASHA"), @@ -2546,7 +2643,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_FRANKIE] = { .species = SPECIES_PICHU, .nickname = _("CHUPY"), .trainerName = _("FRANKIE"), @@ -2575,7 +2672,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_HELEN] = { .species = SPECIES_WOBBUFFET, .nickname = _("WOBET"), .trainerName = _("HELEN"), @@ -2604,7 +2701,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_CAMILE] = { .species = SPECIES_GENGAR, .nickname = _("GAREN"), .trainerName = _("CAMILE"), @@ -2633,7 +2730,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_MARTIN] = { .species = SPECIES_PORYGON, .nickname = _("GONPOR"), .trainerName = _("MARTIN"), @@ -2662,7 +2759,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_SERGIO] = { .species = SPECIES_DRAGONITE, .nickname = _("DRITE"), .trainerName = _("SERGIO"), @@ -2691,7 +2788,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_KAILEY] = { .species = SPECIES_MEOWTH, .nickname = _("MEOWY"), .trainerName = _("KAILEY"), @@ -2720,7 +2817,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_PERLA] = { .species = SPECIES_JYNX, .nickname = _("NYX"), .trainerName = _("PERLA"), @@ -2749,7 +2846,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_CLARA] = { .species = SPECIES_TOGEPI, .nickname = _("GEPITO"), .trainerName = _("CLARA"), @@ -2778,7 +2875,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_JAKOB] = { .species = SPECIES_ESPEON, .nickname = _("SPEON"), .trainerName = _("JAKOB"), @@ -2807,7 +2904,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_TREY] = { .species = SPECIES_SLOWKING, .nickname = _("SLOWGO"), .trainerName = _("TREY"), @@ -2836,7 +2933,7 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF }, - { + [CONTEST_OPPONENT_LANE] = { .species = SPECIES_URSARING, .nickname = _("URSING"), .trainerName = _("LANE"), @@ -2865,4 +2962,105 @@ const struct ContestPokemon gContestOpponents[] = .personality = 0, .otId = 0xFFFF } +}; + + +const u8 gPostgameContestOpponentFilter[] = +{ + [CONTEST_OPPONENT_JIMMY] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_EDITH] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_EVAN] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_KELSEY] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_MADISON] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_RAYMOND] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_GRANT] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_PAIGE] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_ALEC] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_SYDNEY] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_MORRIS] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_MARIAH] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_RUSSELL] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_MELANIE] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_CHANCE] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_AGATHA] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_BEAU] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_KAY] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_CALE] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_CAITLIN] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_COLBY] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_KYLIE] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_LIAM] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_MILO] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_KARINA] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_BOBBY] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_CLAIRE] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_WILLIE] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_CASSIDY] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_MORGAN] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_SUMMER] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_MILES] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_AUDREY] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_AVERY] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_ARIANA] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_ASHTON] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_SANDRA] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_CARSON] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_KATRINA] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_LUKE] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_RAUL] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_JADA] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_ZEEK] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_DIEGO] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_ALIYAH] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_NATALIA] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_DEVIN] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_TYLOR] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_RONNIE] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_CLAUDIA] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_ELIAS] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_JADE] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_FRANCIS] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_ALISHA] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_SAUL] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_FELICIA] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_EMILIO] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_KARLA] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_DARRYL] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_SELENA] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_NOEL] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_LACEY] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_CORBIN] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_GRACIE] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_COLTIN] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_ELLIE] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_MARCUS] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_KIARA] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_BRYCE] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_JAMIE] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_JORGE] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_DEVON] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_JUSTINA] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_RALPH] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_ROSA] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_KEATON] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_MAYRA] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_LAMAR] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_AUBREY] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_NIGEL] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_CAMILLE] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_DEON] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_JANELLE] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_HEATH] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_SASHA] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_FRANKIE] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_HELEN] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_CAMILE] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_MARTIN] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_SERGIO] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_KAILEY] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_PERLA] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_CLARA] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_JAKOB] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_TREY] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_LANE] = CONTEST_FILTER_ONLY_POSTGAME }; \ No newline at end of file -- cgit v1.2.3 From 13c2f91b11a9ae773fd22b045f37b85c6e1ed984 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Sat, 9 Mar 2019 23:51:39 -0500 Subject: Moved last contest data into C --- src/contest.c | 140 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 134 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/contest.c b/src/contest.c index bebe344b9..da3075e65 100644 --- a/src/contest.c +++ b/src/contest.c @@ -247,10 +247,6 @@ extern const union AffineAnimCmd *const gUnknown_082FF694[]; extern const struct SpriteTemplate gSpriteTemplate_8587AD0; extern const struct SpriteTemplate gSpriteTemplate_8587B18[]; extern void (*const gContestEffectFuncs[])(void); -extern const s8 gContestExcitementTable[][5]; -extern const struct CompressedSpriteSheet gUnknown_08589904[]; -extern const struct SpritePalette gUnknown_08589924[]; -extern const struct SpriteTemplate gSpriteTemplate_858998C[]; static const u8 gUnknown_08587A6C[] = { @@ -722,6 +718,138 @@ const struct WindowTemplate gUnknown_08587F44[] = #include "data/contest_opponents.h" +static const struct CompressedSpriteSheet sUnknown_08589904[] = +{ + { + .data = gBlankGfxCompressed, + .size = 0x1000, + .tag = 0x80E8 + }, + { + .data = gBlankGfxCompressed, + .size = 0x1000, + .tag = 0x80E9 + }, + { + .data = gBlankGfxCompressed, + .size = 0x1000, + .tag = 0x80EA + }, + { + .data = gBlankGfxCompressed, + .size = 0x1000, + .tag = 0x80EB + } +}; + +// Yup this is super dangerous but that's how it is here +static const struct SpritePalette sUnknown_08589924[] = +{ + { + .data = (u16*)(gHeap + 0x1A0A4), + .tag = 0x80E8 + }, + { + .data = (u16*)(gHeap + 0x1A0C4), + .tag = 0x80E9 + }, + { + .data = (u16*)(gHeap + 0x1A0E4), + .tag = 0x80EA + }, + { + .data = (u16*)(gHeap + 0x1A104), + .tag = 0x80EB + } +}; + +const struct OamData gOamData_8589944 = +{ + .y = 0, + .affineMode = 3, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0 +}; + +const union AffineAnimCmd gSpriteAffineAnim_858994C[] = +{ + AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd gSpriteAffineAnim_858995C[] = +{ + AFFINEANIMCMD_FRAME(3, 3, 0, 15), + AFFINEANIMCMD_FRAME(-3, -3, 0, 15), + AFFINEANIMCMD_FRAME(3, 3, 0, 15), + AFFINEANIMCMD_FRAME(-3, -3, 0, 15), + AFFINEANIMCMD_END +}; + +const union AffineAnimCmd *const gSpriteAffineAnimTable_8589984[] = +{ + gSpriteAffineAnim_858994C, + gSpriteAffineAnim_858995C +}; + +const struct SpriteTemplate gSpriteTemplate_858998C[] = +{ + { + .tileTag = 0x80E8, + .paletteTag = 0x80E8, + .oam = &gOamData_8589944, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_8589984, + .callback = SpriteCallbackDummy + }, + { + .tileTag = 0x80E9, + .paletteTag = 0x80E9, + .oam = &gOamData_8589944, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_8589984, + .callback = SpriteCallbackDummy + }, + { + .tileTag = 0x80EA, + .paletteTag = 0x80EA, + .oam = &gOamData_8589944, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_8589984, + .callback = SpriteCallbackDummy + }, + { + .tileTag = 0x80EB, + .paletteTag = 0x80EB, + .oam = &gOamData_8589944, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_8589984, + .callback = SpriteCallbackDummy + } +}; + +const s8 gContestExcitementTable[][5] = +{ + { 1, 0, -1, -1, 0}, + { 0, 1, 0, -1, -1}, + {-1, 0, 1, 0, -1}, + {-1, -1, 0, 1, 0}, + { 0, -1, -1, 0, 1} +}; + static void TaskDummy1(u8 taskId) { } @@ -3763,8 +3891,8 @@ static u8 sub_80DC9EC(u8 a) u8 spriteId1, spriteId2; u8 x = gUnknown_02039F26[a] * 40 + 32; - LoadCompressedSpriteSheet(&gUnknown_08589904[a]); - LoadSpritePalette(&gUnknown_08589924[a]); + LoadCompressedSpriteSheet(&sUnknown_08589904[a]); + LoadSpritePalette(&sUnknown_08589924[a]); spriteId1 = CreateSprite(&gSpriteTemplate_858998C[a], 184, x, 29); spriteId2 = CreateSprite(&gSpriteTemplate_858998C[a], 248, x, 29); gSprites[spriteId2].oam.tileNum += 64; -- cgit v1.2.3 From 7f70b629f569ce9a4c1b90cca3a3ce86ebd3e1c2 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Tue, 12 Mar 2019 05:35:15 -0400 Subject: Document sAreaGlowTilemapMapping I used a script to generate the format for the array, so I can easily change its formatting if needed. --- src/pokedex_area_screen.c | 223 ++++++++++++++++++++++++++++++++++------------ 1 file changed, 167 insertions(+), 56 deletions(-) (limited to 'src') diff --git a/src/pokedex_area_screen.c b/src/pokedex_area_screen.c index eeea3c210..d43c556c8 100755 --- a/src/pokedex_area_screen.c +++ b/src/pokedex_area_screen.c @@ -23,6 +23,19 @@ #include "constants/species.h" #include "constants/vars.h" +#define AREA_SCREEN_WIDTH 32 +#define AREA_SCREEN_HEIGHT 20 + +#define GLOW_TILE_FULL 0xFFFF +#define GLOW_TILE_LEFT (1 << 0) +#define GLOW_TILE_RIGHT (1 << 1) +#define GLOW_TILE_TOP (1 << 2) +#define GLOW_TILE_BOTTOM (1 << 3) +#define GLOW_TILE_BOTTOM_RIGHT (1 << 4) +#define GLOW_TILE_TOP_RIGHT (1 << 5) +#define GLOW_TILE_BOTTOM_LEFT (1 << 6) +#define GLOW_TILE_TOP_LEFT (1 << 7) + struct PokeDexAreaScreenMapIdentity { u8 mapGroup; @@ -100,23 +113,114 @@ static const u16 sLandmarkData[][2] = { {MAPSEC_NONE} }; +// Only some parts of this array are acutally used, because corner flags that overlap +// with edge flags are cancelled out before lookup. For example, GLOW_TILE_BOTTOM_RIGHT | GLOW_TILE_RIGHT +// will never be read. +// +// The rest of the bytes seem to be old data from before the cancellation was implemented. +// Most of them line up as you would expect ([BOTTOM_RIGHT | RIGHT] has the same value as [RIGHT]). +// +// Any unreachable entries are simply listed in order, without the fancy "[FLAGS] = 0xXX" notation. static const u8 sAreaGlowTilemapMapping[] = { - 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x11, 0x20, 0x02, 0x03, 0x27, 0x2d, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x12, 0x21, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x2a, 0x2e, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x13, 0x22, 0x02, 0x03, 0x27, 0x2d, 0x06, 0x07, 0x2a, 0x2e, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x14, 0x01, 0x23, 0x03, 0x26, 0x05, 0x2c, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x15, 0x20, 0x23, 0x03, 0x28, 0x2d, 0x2c, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x16, 0x21, 0x23, 0x03, 0x26, 0x05, 0x2c, 0x07, 0x2a, 0x2e, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x17, 0x22, 0x23, 0x03, 0x28, 0x2d, 0x2c, 0x07, 0x2a, 0x2e, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x18, 0x01, 0x24, 0x03, 0x04, 0x05, 0x06, 0x07, 0x29, 0x09, 0x2f, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x19, 0x20, 0x24, 0x03, 0x27, 0x2d, 0x06, 0x07, 0x29, 0x09, 0x2f, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x1a, 0x21, 0x24, 0x03, 0x04, 0x05, 0x06, 0x07, 0x2b, 0x2e, 0x2f, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x1b, 0x22, 0x24, 0x03, 0x27, 0x2d, 0x06, 0x07, 0x2b, 0x2e, 0x2f, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x1c, 0x01, 0x25, 0x03, 0x26, 0x05, 0x2c, 0x07, 0x29, 0x09, 0x2f, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x1d, 0x20, 0x25, 0x03, 0x28, 0x2d, 0x2c, 0x07, 0x29, 0x09, 0x2f, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x1e, 0x21, 0x25, 0x03, 0x26, 0x05, 0x2c, 0x07, 0x2b, 0x2e, 0x2f, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, - 0x1f, 0x22, 0x25, 0x03, 0x28, 0x2d, 0x2c, 0x07, 0x2b, 0x2e, 0x2f, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + [0] = 0x00, + [GLOW_TILE_LEFT] = 0x01, + [GLOW_TILE_RIGHT] = 0x02, + [GLOW_TILE_RIGHT | GLOW_TILE_LEFT] = 0x03, + [GLOW_TILE_TOP] = 0x04, + [GLOW_TILE_TOP | GLOW_TILE_LEFT] = 0x05, + [GLOW_TILE_TOP | GLOW_TILE_RIGHT] = 0x06, + [GLOW_TILE_TOP | GLOW_TILE_RIGHT | GLOW_TILE_LEFT] = 0x07, + [GLOW_TILE_BOTTOM] = 0x08, + [GLOW_TILE_BOTTOM | GLOW_TILE_LEFT] = 0x09, + [GLOW_TILE_BOTTOM | GLOW_TILE_RIGHT] = 0x0a, + [GLOW_TILE_BOTTOM | GLOW_TILE_RIGHT | GLOW_TILE_LEFT] = 0x0b, + [GLOW_TILE_BOTTOM | GLOW_TILE_TOP] = 0x0c, + [GLOW_TILE_BOTTOM | GLOW_TILE_TOP | GLOW_TILE_LEFT] = 0x0d, + [GLOW_TILE_BOTTOM | GLOW_TILE_TOP | GLOW_TILE_RIGHT] = 0x0e, + [GLOW_TILE_BOTTOM | GLOW_TILE_TOP | GLOW_TILE_RIGHT | GLOW_TILE_LEFT] = 0x0f, + [GLOW_TILE_BOTTOM_RIGHT] = 0x11, + [GLOW_TILE_BOTTOM_RIGHT | GLOW_TILE_LEFT] = 0x20, + 0x02, 0x03, + [GLOW_TILE_BOTTOM_RIGHT | GLOW_TILE_TOP] = 0x27, + [GLOW_TILE_BOTTOM_RIGHT | GLOW_TILE_TOP | GLOW_TILE_LEFT] = 0x2d, + 0x06, 0x07, 0x08, 0x09, 0x0a, + 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + [GLOW_TILE_TOP_RIGHT] = 0x12, + [GLOW_TILE_TOP_RIGHT | GLOW_TILE_LEFT] = 0x21, + 0x02, 0x03, 0x04, 0x05, 0x06, + 0x07, + [GLOW_TILE_TOP_RIGHT | GLOW_TILE_BOTTOM] = 0x2a, + [GLOW_TILE_TOP_RIGHT | GLOW_TILE_BOTTOM | GLOW_TILE_LEFT] = 0x2e, + 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, + 0x0f, + [GLOW_TILE_TOP_RIGHT | GLOW_TILE_BOTTOM_RIGHT] = 0x13, + [GLOW_TILE_TOP_RIGHT | GLOW_TILE_BOTTOM_RIGHT | GLOW_TILE_LEFT] = 0x22, + 0x02, 0x03, 0x27, 0x2d, 0x06, + 0x07, 0x2a, 0x2e, 0x0a, 0x0b, + 0x0c, 0x0d, 0x0e, 0x0f, + [GLOW_TILE_BOTTOM_LEFT] = 0x14, + 0x01, + [GLOW_TILE_BOTTOM_LEFT | GLOW_TILE_RIGHT] = 0x23, + 0x03, + [GLOW_TILE_BOTTOM_LEFT | GLOW_TILE_TOP] = 0x26, + 0x05, + [GLOW_TILE_BOTTOM_LEFT | GLOW_TILE_TOP | GLOW_TILE_RIGHT] = 0x2c, + 0x07, 0x08, 0x09, 0x0a, 0x0b, + 0x0c, 0x0d, 0x0e, 0x0f, + [GLOW_TILE_BOTTOM_LEFT | GLOW_TILE_BOTTOM_RIGHT] = 0x15, + 0x20, 0x23, 0x03, + [GLOW_TILE_BOTTOM_LEFT | GLOW_TILE_BOTTOM_RIGHT | GLOW_TILE_TOP] = 0x28, + 0x2d, 0x2c, 0x07, 0x08, 0x09, + 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, + 0x0f, + [GLOW_TILE_BOTTOM_LEFT | GLOW_TILE_TOP_RIGHT] = 0x16, + 0x21, 0x23, 0x03, 0x26, 0x05, + 0x2c, 0x07, 0x2a, 0x2e, 0x0a, + 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + [GLOW_TILE_BOTTOM_LEFT | GLOW_TILE_TOP_RIGHT | GLOW_TILE_BOTTOM_RIGHT] = 0x17, + 0x22, 0x23, 0x03, 0x28, 0x2d, + 0x2c, 0x07, 0x2a, 0x2e, 0x0a, + 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + [GLOW_TILE_TOP_LEFT] = 0x18, + 0x01, + [GLOW_TILE_TOP_LEFT | GLOW_TILE_RIGHT] = 0x24, + 0x03, 0x04, 0x05, 0x06, 0x07, + [GLOW_TILE_TOP_LEFT | GLOW_TILE_BOTTOM] = 0x29, + 0x09, + [GLOW_TILE_TOP_LEFT | GLOW_TILE_BOTTOM | GLOW_TILE_RIGHT] = 0x2f, + 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + [GLOW_TILE_TOP_LEFT | GLOW_TILE_BOTTOM_RIGHT] = 0x19, + 0x20, 0x24, 0x03, 0x27, 0x2d, + 0x06, 0x07, 0x29, 0x09, 0x2f, + 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + [GLOW_TILE_TOP_LEFT | GLOW_TILE_TOP_RIGHT] = 0x1a, + 0x21, 0x24, 0x03, 0x04, 0x05, + 0x06, 0x07, + [GLOW_TILE_TOP_LEFT | GLOW_TILE_TOP_RIGHT | GLOW_TILE_BOTTOM] = 0x2b, + 0x2e, 0x2f, 0x0b, 0x0c, 0x0d, + 0x0e, 0x0f, + [GLOW_TILE_TOP_LEFT | GLOW_TILE_TOP_RIGHT | GLOW_TILE_BOTTOM_RIGHT] = 0x1b, + 0x22, 0x24, 0x03, 0x27, 0x2d, + 0x06, 0x07, 0x2b, 0x2e, 0x2f, + 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + [GLOW_TILE_TOP_LEFT | GLOW_TILE_BOTTOM_LEFT] = 0x1c, + 0x01, + [GLOW_TILE_TOP_LEFT | GLOW_TILE_BOTTOM_LEFT | GLOW_TILE_RIGHT] = 0x25, + 0x03, 0x26, 0x05, 0x2c, 0x07, + 0x29, 0x09, 0x2f, 0x0b, 0x0c, + 0x0d, 0x0e, 0x0f, + [GLOW_TILE_TOP_LEFT | GLOW_TILE_BOTTOM_LEFT | GLOW_TILE_BOTTOM_RIGHT] = 0x1d, + 0x20, 0x25, 0x03, 0x28, 0x2d, + 0x2c, 0x07, 0x29, 0x09, 0x2f, + 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + [GLOW_TILE_TOP_LEFT | GLOW_TILE_BOTTOM_LEFT | GLOW_TILE_TOP_RIGHT] = 0x1e, + 0x21, 0x25, 0x03, 0x26, 0x05, + 0x2c, 0x07, 0x2b, 0x2e, 0x2f, + 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, + [GLOW_TILE_TOP_LEFT | GLOW_TILE_BOTTOM_LEFT | GLOW_TILE_TOP_RIGHT | GLOW_TILE_BOTTOM_RIGHT] = 0x1f, + 0x22, 0x25, 0x03, 0x28, 0x2d, + 0x2c, 0x07, 0x2b, 0x2e, 0x2f, + 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, }; static const struct UnkStruct_1C4D70 sUnknown_085B4018 = { @@ -237,11 +341,11 @@ static void FindMapsWithMon(u16 species) { switch (sFeebasData[i][1]) { - case MAP_GROUP(PETALBURG_CITY): + case MAP_AREA_OVERWORLD_MONS: SetAreaHasMon(sFeebasData[i][1], sFeebasData[i][2]); break; - case MAP_GROUP(METEOR_FALLS_1F_1R): - case MAP_GROUP(SAFARI_ZONE_NORTHWEST): + case MAP_AREA_SPECIAL_MONS_1: + case MAP_AREA_SPECIAL_MONS_2: SetSpecialMapHasMon(sFeebasData[i][1], sFeebasData[i][2]); break; } @@ -250,15 +354,15 @@ static void FindMapsWithMon(u16 species) for (i = 0; gWildMonHeaders[i].mapGroup != 0xFF; i++) { - if (MapHasMon(gWildMonHeaders + i, species)) + if (MapHasMon(&gWildMonHeaders[i], species)) { switch (gWildMonHeaders[i].mapGroup) { - case MAP_GROUP(PETALBURG_CITY): + case MAP_AREA_OVERWORLD_MONS: SetAreaHasMon(gWildMonHeaders[i].mapGroup, gWildMonHeaders[i].mapNum); break; - case MAP_GROUP(METEOR_FALLS_1F_1R): - case MAP_GROUP(SAFARI_ZONE_NORTHWEST): + case MAP_AREA_SPECIAL_MONS_1: + case MAP_AREA_SPECIAL_MONS_2: SetSpecialMapHasMon(gWildMonHeaders[i].mapGroup, gWildMonHeaders[i].mapNum); break; } @@ -372,18 +476,18 @@ static void BuildAreaGlowTilemap(void) u16 i, y, x, j; u16 val; - for (i = 0; i < 0x280; i++) + for (i = 0; i < ARRAY_COUNT(sPokedexAreaScreen->areaGlowTilemap); i++) sPokedexAreaScreen->areaGlowTilemap[i] = 0; for (i = 0; i < sPokedexAreaScreen->numOverworldAreas; i++) { j = 0; - for (y = 0; y < 20; y++) + for (y = 0; y < AREA_SCREEN_HEIGHT; y++) { - for (x = 0; x < 32; x++) + for (x = 0; x < AREA_SCREEN_WIDTH; x++) { if (GetRegionMapSectionIdAt(x, y) == sPokedexAreaScreen->overworldAreasWithMons[i].regionMapSectionId) - sPokedexAreaScreen->areaGlowTilemap[j] = 0xFFFF; + sPokedexAreaScreen->areaGlowTilemap[j] = GLOW_TILE_FULL; j++; } @@ -391,51 +495,58 @@ static void BuildAreaGlowTilemap(void) } j = 0; - for (y = 0; y < 20; y++) + for (y = 0; y < AREA_SCREEN_HEIGHT; y++) { - for (x = 0; x < 32; x++) + for (x = 0; x < AREA_SCREEN_WIDTH; x++) { - if (sPokedexAreaScreen->areaGlowTilemap[j] == 0xFFFF) + if (sPokedexAreaScreen->areaGlowTilemap[j] == GLOW_TILE_FULL) { - if (x != 0 && sPokedexAreaScreen->areaGlowTilemap[j - 1] != 0xFFFF) - sPokedexAreaScreen->areaGlowTilemap[j - 1] |= 0x02; - if (x != 31 && sPokedexAreaScreen->areaGlowTilemap[j + 1] != 0xFFFF) - sPokedexAreaScreen->areaGlowTilemap[j + 1] |= 0x01; - if (y != 0 && sPokedexAreaScreen->areaGlowTilemap[j - 32] != 0xFFFF) - sPokedexAreaScreen->areaGlowTilemap[j - 32] |= 0x08; - if (y != 19 && sPokedexAreaScreen->areaGlowTilemap[j + 32] != 0xFFFF) - sPokedexAreaScreen->areaGlowTilemap[j + 32] |= 0x04; - if (x != 0 && y != 0 && sPokedexAreaScreen->areaGlowTilemap[j - 33] != 0xFFFF) - sPokedexAreaScreen->areaGlowTilemap[j - 33] |= 0x10; - if (x != 31 && y != 0 && sPokedexAreaScreen->areaGlowTilemap[j - 31] != 0xFFFF) - sPokedexAreaScreen->areaGlowTilemap[j - 31] |= 0x40; - if (x != 0 && y != 19 && sPokedexAreaScreen->areaGlowTilemap[j + 31] != 0xFFFF) - sPokedexAreaScreen->areaGlowTilemap[j + 31] |= 0x20; - if (x != 31 && y != 19 && sPokedexAreaScreen->areaGlowTilemap[j + 33] != 0xFFFF) - sPokedexAreaScreen->areaGlowTilemap[j + 33] |= 0x80; + // The "tile != GLOW_TILE_FULL" check is pointless in all of these conditionals, + // since there's no harm in OR'ing 0xFFFF with anything else. + + // Edges + if (x != 0 && sPokedexAreaScreen->areaGlowTilemap[j - 1] != GLOW_TILE_FULL) + sPokedexAreaScreen->areaGlowTilemap[j - 1] |= GLOW_TILE_RIGHT; + if (x != AREA_SCREEN_WIDTH - 1 && sPokedexAreaScreen->areaGlowTilemap[j + 1] != GLOW_TILE_FULL) + sPokedexAreaScreen->areaGlowTilemap[j + 1] |= GLOW_TILE_LEFT; + if (y != 0 && sPokedexAreaScreen->areaGlowTilemap[j - AREA_SCREEN_WIDTH] != GLOW_TILE_FULL) + sPokedexAreaScreen->areaGlowTilemap[j - AREA_SCREEN_WIDTH] |= GLOW_TILE_BOTTOM; + if (y != AREA_SCREEN_HEIGHT - 1 && sPokedexAreaScreen->areaGlowTilemap[j + AREA_SCREEN_WIDTH] != GLOW_TILE_FULL) + sPokedexAreaScreen->areaGlowTilemap[j + AREA_SCREEN_WIDTH] |= GLOW_TILE_TOP; + + // Diagonals + if (x != 0 && y != 0 && sPokedexAreaScreen->areaGlowTilemap[j - AREA_SCREEN_WIDTH - 1] != GLOW_TILE_FULL) + sPokedexAreaScreen->areaGlowTilemap[j - AREA_SCREEN_WIDTH - 1] |= GLOW_TILE_BOTTOM_RIGHT; + if (x != AREA_SCREEN_WIDTH - 1 && y != 0 && sPokedexAreaScreen->areaGlowTilemap[j - AREA_SCREEN_WIDTH + 1] != GLOW_TILE_FULL) + sPokedexAreaScreen->areaGlowTilemap[j - AREA_SCREEN_WIDTH + 1] |= GLOW_TILE_BOTTOM_LEFT; + if (x != 0 && y != AREA_SCREEN_HEIGHT - 1 && sPokedexAreaScreen->areaGlowTilemap[j + AREA_SCREEN_WIDTH - 1] != GLOW_TILE_FULL) + sPokedexAreaScreen->areaGlowTilemap[j + AREA_SCREEN_WIDTH - 1] |= GLOW_TILE_TOP_RIGHT; + if (x != AREA_SCREEN_WIDTH - 1 && y != AREA_SCREEN_HEIGHT - 1 && sPokedexAreaScreen->areaGlowTilemap[j + AREA_SCREEN_WIDTH + 1] != GLOW_TILE_FULL) + sPokedexAreaScreen->areaGlowTilemap[j + AREA_SCREEN_WIDTH + 1] |= GLOW_TILE_TOP_LEFT; } j++; } } - for (i = 0; i < 0x280; i++) + for (i = 0; i < ARRAY_COUNT(sPokedexAreaScreen->areaGlowTilemap); i++) { - if (sPokedexAreaScreen->areaGlowTilemap[i] == 0xFFFF) + if (sPokedexAreaScreen->areaGlowTilemap[i] == GLOW_TILE_FULL) { sPokedexAreaScreen->areaGlowTilemap[i] = 0x10; sPokedexAreaScreen->areaGlowTilemap[i] |= 0xA000; } else if (sPokedexAreaScreen->areaGlowTilemap[i]) { - if (sPokedexAreaScreen->areaGlowTilemap[i] & 0x02) - sPokedexAreaScreen->areaGlowTilemap[i] &= 0xFFCF; - if (sPokedexAreaScreen->areaGlowTilemap[i] & 0x01) - sPokedexAreaScreen->areaGlowTilemap[i] &= 0xFF3F; - if (sPokedexAreaScreen->areaGlowTilemap[i] & 0x08) - sPokedexAreaScreen->areaGlowTilemap[i] &= 0xFFAF; - if (sPokedexAreaScreen->areaGlowTilemap[i] & 0x04) - sPokedexAreaScreen->areaGlowTilemap[i] &= 0xFF5F; + // Get rid of overlapping flags + if (sPokedexAreaScreen->areaGlowTilemap[i] & GLOW_TILE_RIGHT) + sPokedexAreaScreen->areaGlowTilemap[i] &= ~(GLOW_TILE_BOTTOM_RIGHT | GLOW_TILE_TOP_RIGHT); + if (sPokedexAreaScreen->areaGlowTilemap[i] & GLOW_TILE_LEFT) + sPokedexAreaScreen->areaGlowTilemap[i] &= ~(GLOW_TILE_BOTTOM_LEFT | GLOW_TILE_TOP_LEFT); + if (sPokedexAreaScreen->areaGlowTilemap[i] & GLOW_TILE_BOTTOM) + sPokedexAreaScreen->areaGlowTilemap[i] &= ~(GLOW_TILE_BOTTOM_LEFT | GLOW_TILE_BOTTOM_RIGHT); + if (sPokedexAreaScreen->areaGlowTilemap[i] & GLOW_TILE_TOP) + sPokedexAreaScreen->areaGlowTilemap[i] &= ~(GLOW_TILE_TOP_LEFT | GLOW_TILE_TOP_RIGHT); sPokedexAreaScreen->areaGlowTilemap[i] = sAreaGlowTilemapMapping[sPokedexAreaScreen->areaGlowTilemap[i]]; sPokedexAreaScreen->areaGlowTilemap[i] |= 0xA000; -- cgit v1.2.3 From 6566a49bebc877e742f8ee325dd659879afe63f3 Mon Sep 17 00:00:00 2001 From: Wyrserth Date: Sat, 23 Mar 2019 21:52:58 +0100 Subject: Use constants for naming screen's pages. --- src/naming_screen.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/naming_screen.c b/src/naming_screen.c index 75b7c8566..d37144122 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -449,7 +449,7 @@ static u8 sub_80E3274(void) static bool8 MainState_BeginFadeIn(void) { sub_80E4CF8(3, gUnknown_08DD4544); - gNamingScreenData->currentPage = 1; + gNamingScreenData->currentPage = PAGE_UPPER; sub_80E4CF8(2, gUnknown_08DD46E0); sub_80E4CF8(1, gUnknown_08DD4620); sub_80E4DE4(gNamingScreenData->windows[1], 0); @@ -1856,7 +1856,7 @@ static const struct NamingScreenTemplate playerNamingScreenTemplate = .maxChars = 7, .iconFunction = 1, .addGenderIcon = 0, - .initialPage = 1, + .initialPage = PAGE_UPPER, .unused = 35, .title = gText_YourName, }; @@ -1867,7 +1867,7 @@ static const struct NamingScreenTemplate pcBoxNamingTemplate = .maxChars = 8, .iconFunction = 2, .addGenderIcon = 0, - .initialPage = 1, + .initialPage = PAGE_UPPER, .unused = 19, .title = gText_BoxName, }; @@ -1878,7 +1878,7 @@ static const struct NamingScreenTemplate monNamingScreenTemplate = .maxChars = 10, .iconFunction = 3, .addGenderIcon = 1, - .initialPage = 1, + .initialPage = PAGE_UPPER, .unused = 35, .title = gText_PkmnsNickname, }; @@ -1889,7 +1889,7 @@ static const struct NamingScreenTemplate wandaWordsScreenTemplate = .maxChars = 15, .iconFunction = 4, .addGenderIcon = 0, - .initialPage = 1, + .initialPage = PAGE_UPPER, .unused = 11, .title = gText_TellHimTheWords, }; -- cgit v1.2.3 From af1baa89f1c7f657eb096df5bf2677527301b5c4 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Tue, 26 Mar 2019 19:03:46 -0500 Subject: Start decompiling union_room_chat.c --- src/link_rfu.c | 2 +- src/union_room.c | 2 +- src/union_room_chat.c | 1072 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 1074 insertions(+), 2 deletions(-) create mode 100755 src/union_room_chat.c (limited to 'src') diff --git a/src/link_rfu.c b/src/link_rfu.c index a557397f0..e4295dc39 100644 --- a/src/link_rfu.c +++ b/src/link_rfu.c @@ -4729,7 +4729,7 @@ bool32 sub_8011A80(void) return FALSE; } -u8 sub_8011A9C(void) +bool32 sub_8011A9C(void) { return gUnknown_03005000.unk_ce8; } diff --git a/src/union_room.c b/src/union_room.c index 99ae4b679..e0777cdb7 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -35,6 +35,7 @@ #include "field_screen_effect.h" #include "script_pokemon_util_80F87D8.h" #include "mevent.h" +#include "union_room_chat.h" struct UnkStruct_Shared { @@ -231,7 +232,6 @@ bool32 sub_8017678(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1); u32 sub_8018120(struct TradeUnkStruct *arg0, u8 multiplayerId); void sub_801807C(struct TradeUnkStruct *arg0); void sub_801AC54(void); -void sub_801DD98(void); void sub_802A9A8(u8 monId, MainCallback callback); void sub_802493C(u8 monId, MainCallback callback); void sub_8020C70(MainCallback callback); diff --git a/src/union_room_chat.c b/src/union_room_chat.c new file mode 100755 index 000000000..f7c8be9f1 --- /dev/null +++ b/src/union_room_chat.c @@ -0,0 +1,1072 @@ +#include "global.h" +#include "alloc.h" +#include "link.h" +#include "link_rfu.h" +#include "load_save.h" +#include "main.h" +#include "menu.h" +#include "overworld.h" +#include "palette.h" +#include "save.h" +#include "scanline_effect.h" +#include "sound.h" +#include "sprite.h" +#include "string_util.h" +#include "task.h" +#include "constants/rgb.h" +#include "constants/songs.h" + +struct UnionRoomChat +{ + u8 filler0[0x4]; + u16 unk4; + u16 unk6; + u8 filler8[0x2]; + u16 unkA; + u8 fillerC[0x1]; + u8 unkD; + u8 unkE; + u8 unkF; + u8 unk10; + u8 unk11; + u8 unk12; + u8 unk13; + u8 unk14; + u8 unk15; + u8 unk16; + u8 unk17; + u8 unk18; + u8 unk19; + u8 unk1A[0x9F]; + u8 unkB9[10][21]; + u8 filler18B[0x5]; + u8 unk190[0x28]; + u16 unk1B8; +}; + +static void sub_801DDD0(struct UnionRoomChat *); +static void c2_081284E0(void); +static void sub_801DF20(void); +static void sub_801DF38(void); +static void sub_801DF54(u8 taskId); +static void sub_801DFAC(void); +static void sub_801E030(void); +static void sub_801E120(void); +static void sub_801E240(void); +static void sub_801E460(void); +static void sub_801E5C4(void); +static void sub_801E668(void); +static void sub_801E764(void); +static void sub_801E838(void); +static void sub_801E978(void); +static void sub_801EBD4(u16); +static bool32 sub_801EBE4(void); +static void sub_801EC94(void); +static void sub_801ED68(void); +static void sub_801ED94(void); +static bool32 sub_801EDC4(void); +static void sub_801EDE0(void); +static void sub_801EE10(void); +static void sub_801EE2C(void); +static u8 *sub_801EE84(void); +u8 *sub_801EEA8(void); +static void sub_801EF1C(u8 *); +static void sub_801EF24(u8 *); +static void sub_801EF4C(u8 *); +static void sub_801EF7C(u8 *); +static void sub_801EFA8(u8 *); +static void sub_801EFD0(u8 *); +u8 *sub_801F114(void); +void sub_801F2B4(u8 taskId); +bool8 sub_801F4D0(void); +int sub_801F534(void); +void sub_801F544(void); +void sub_801F5B8(void); +void sub_801F5EC(u16, u8); +bool8 sub_801F644(u8); +s8 sub_801FF08(void); + +extern struct UnionRoomChat *gUnknown_02022C84; + +extern const u8 *const gUnknown_082F2BA8[][10]; +extern const u8 gUnknown_082F2AA8[]; + + +void sub_801DD98(void) +{ + gUnknown_02022C84 = Alloc(sizeof(*gUnknown_02022C84)); + sub_801DDD0(gUnknown_02022C84); + gKeyRepeatStartDelay = 20; + SetVBlankCallback(NULL); + SetMainCallback2(c2_081284E0); +} + +static void sub_801DDD0(struct UnionRoomChat *unionRoomChat) +{ + int i; + + unionRoomChat->unk4 = 0; + unionRoomChat->unk6 = 0; + unionRoomChat->unk10 = 0; + unionRoomChat->unk11 = 0; + unionRoomChat->unk12 = 0; + unionRoomChat->unk14 = 0; + unionRoomChat->unk15 = 0; + unionRoomChat->unk16 = 0; + unionRoomChat->unk1A[0] = EOS; + unionRoomChat->unkD = GetLinkPlayerCount(); + unionRoomChat->unk13 = GetMultiplayerId(); + unionRoomChat->unk17 = 0; + unionRoomChat->unk18 = 0; + sub_801EF1C(unionRoomChat->unk190); + for (i = 0; i < 10; i++) + StringCopy(unionRoomChat->unkB9[i], gSaveBlock1Ptr->unk3C88[i]); +} + +void sub_801DE30(void) +{ + DestroyTask(gUnknown_02022C84->unkE); + DestroyTask(gUnknown_02022C84->unkF); + Free(gUnknown_02022C84); +} + +static void c2_081284E0(void) +{ + switch (gMain.state) + { + case 0: + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + sub_801F4D0(); + gMain.state++; + break; + case 1: + sub_801F5B8(); + if (!sub_801F534()) + { + BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); + BeginNormalPaletteFade(0xFFFFFFFF, -1, 16, 0, RGB_BLACK); + SetVBlankCallback(sub_801DF20); + gMain.state++; + } + break; + case 2: + UpdatePaletteFade(); + if (!gPaletteFade.active) + { + SetMainCallback2(sub_801DF38); + gUnknown_02022C84->unkE = CreateTask(sub_801DF54, 8); + gUnknown_02022C84->unkF = CreateTask(sub_801F2B4, 7); + sub_800E0E8(); + CreateWirelessStatusIndicatorSprite(232, 150); + } + break; + } +} + +static void sub_801DF20(void) +{ + TransferPlttBuffer(); + LoadOam(); + ProcessSpriteCopyRequests(); + ScanlineEffect_InitHBlankDmaTransfer(); +} + +static void sub_801DF38(void) +{ + RunTasks(); + sub_801F5B8(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void (*const gUnknown_082F2A7C[])(void) = +{ + sub_801DFAC, + sub_801E030, + sub_801E120, + sub_801E240, + sub_801E764, + sub_801E838, + sub_801E460, + sub_801E5C4, + sub_801E668, + sub_801E978, +}; + +static void sub_801DF54(u8 taskId) +{ + switch (gUnknown_02022C84->unk17) + { + case 1: + sub_801EBD4(6); + gUnknown_02022C84->unk17 = 0; + break; + case 2: + sub_801EBD4(7); + gUnknown_02022C84->unk17 = 0; + break; + case 3: + sub_801EBD4(8); + gUnknown_02022C84->unk17 = 0; + break; + } + + gUnknown_082F2A7C[gUnknown_02022C84->unk4](); +} + +static void sub_801DFAC(void) +{ + switch (gUnknown_02022C84->unk6) + { + case 0: + sub_801EF24(gUnknown_02022C84->unk190); + gUnknown_02022C84->unk6++; + // fall through + case 1: + if (IsLinkTaskFinished() && !sub_8011A9C()) + { + if (SendBlock(0, gUnknown_02022C84->unk190, sizeof(gUnknown_02022C84->unk190))) + gUnknown_02022C84->unk6++; + } + break; + case 2: + if (IsLinkTaskFinished()) + sub_801EBD4(1); + break; + } +} + +static void sub_801E030(void) +{ + bool8 var0, var1; + + switch (gUnknown_02022C84->unk6) + { + case 0: + if (gMain.newKeys & START_BUTTON) + { + if (gUnknown_02022C84->unk15) + sub_801EBD4(4); + } + else if (gMain.newKeys & SELECT_BUTTON) + { + sub_801EBD4(2); + } + else if (gMain.newAndRepeatedKeys & B_BUTTON) + { + if (gUnknown_02022C84->unk15) + { + sub_801ED68(); + sub_801F5EC(8, 0); + gUnknown_02022C84->unk6 = 1; + } + else + { + sub_801EBD4(3); + } + } + else if (gMain.newKeys & A_BUTTON) + { + sub_801EC94(); + sub_801F5EC(8, 0); + sub_801F5EC(2, 1); + gUnknown_02022C84->unk6 = 1; + } + else if (gMain.newKeys & R_BUTTON) + { + if (gUnknown_02022C84->unk10 != 3) + { + sub_801ED94(); + sub_801F5EC(8, 0); + gUnknown_02022C84->unk6 = 1; + } + else + { + sub_801EBD4(5); + } + } + else if (sub_801EBE4()) + { + sub_801F5EC(1, 0); + gUnknown_02022C84->unk6 = 1; + } + break; + case 1: + var0 = sub_801F644(0); + var1 = sub_801F644(1); + if (!var0 && !var1) + gUnknown_02022C84->unk6 = 0; + break; + } +} + +static void sub_801E120(void) +{ + s16 input; + int var0; + + switch (gUnknown_02022C84->unk6) + { + case 0: + sub_801F5EC(3, 0); + gUnknown_02022C84->unk6++; + break; + case 1: + if (!sub_801F644(0)) + gUnknown_02022C84->unk6++; + break; + case 2: + input = Menu_ProcessInput(); + switch (input) + { + default: + sub_801F5EC(4, 0); + var0 = 1; + if (gUnknown_02022C84->unk10 == input || input > 3) + var0 = 0; + break; + case MENU_NOTHING_CHOSEN: + if (gMain.newKeys & SELECT_BUTTON) + { + PlaySE(SE_SELECT); + Menu_MoveCursor(1); + } + return; + case MENU_B_PRESSED: + sub_801F5EC(4, 0); + gUnknown_02022C84->unk6 = 3; + return; + } + + if (!var0) + { + gUnknown_02022C84->unk6 = 3; + return; + } + + gUnknown_02022C84->unk11 = 0; + gUnknown_02022C84->unk12 = 0; + sub_801F5EC(5, 1); + gUnknown_02022C84->unk10 = input; + gUnknown_02022C84->unk6 = 4; + break; + case 3: + if (!sub_801F644(0)) + sub_801EBD4(1); + break; + case 4: + if (!sub_801F644(0) && !sub_801F644(1)) + sub_801EBD4(1); + break; + } +} + +static void sub_801E240(void) +{ + s8 input; + + switch (gUnknown_02022C84->unk6) + { + case 0: + sub_801F5EC(6, 0); + gUnknown_02022C84->unk6 = 1; + break; + case 1: + if (!sub_801F644(0)) + gUnknown_02022C84->unk6 = 2; + break; + case 2: + input = sub_801FF08(); + switch (input) + { + case -1: + case 1: + sub_801F5EC(7, 0); + gUnknown_02022C84->unk6 = 3; + break; + case 0: + if (gUnknown_02022C84->unk13 == 0) + { + sub_801EFD0(gUnknown_02022C84->unk190); + sub_801F5EC(7, 0); + gUnknown_02022C84->unk6 = 9; + } + else + { + sub_801EF7C(gUnknown_02022C84->unk190); + gUnknown_02022C84->unk6 = 4; + } + break; + } + break; + case 3: + if (!sub_801F644(0)) + sub_801EBD4(1); + break; + case 9: + if (!sub_801F644(0)) + { + sub_801F5EC(20, 0); + gUnknown_02022C84->unk6 = 10; + } + break; + case 10: + if (!sub_801F644(0)) + gUnknown_02022C84->unk6 = 8; + break; + case 8: + input = sub_801FF08(); + switch (input) + { + case -1: + case 1: + sub_801F5EC(7, 0); + gUnknown_02022C84->unk6 = 3; + break; + case 0: + sub_80104B0(); + sub_801EFD0(gUnknown_02022C84->unk190); + gUnknown_02022C84->unk6 = 4; + gUnknown_02022C84->unk1B8 = 0; + break; + } + break; + case 4: + if (IsLinkTaskFinished() && !sub_8011A9C() && SendBlock(0, gUnknown_02022C84->unk190, sizeof(gUnknown_02022C84->unk190))) + { + if (!gUnknown_02022C84->unk13) + gUnknown_02022C84->unk6 = 6; + else + gUnknown_02022C84->unk6 = 5; + } + + if (!gReceivedRemoteLinkPlayers) + sub_801EBD4(9); + break; + case 5: + if (!gReceivedRemoteLinkPlayers) + { + sub_801EBD4(9); + } + else if (++gUnknown_02022C84->unk1B8 > 300) + { + gUnknown_02022C84->unk1B8 = 0; + gUnknown_02022C84->unk6 = 4; + } + break; + } +} + +static void sub_801E460(void) +{ + switch (gUnknown_02022C84->unk6) + { + case 0: + if (!FuncIsActiveTask(sub_801F2B4)) + { + sub_801F5EC(7, 0); + gUnknown_02022C84->unk6++; + } + break; + case 1: + if (!sub_801F644(0)) + { + sub_801F5EC(18, 0); + gUnknown_02022C84->unk6++; + } + break; + case 2: + if (!sub_801F644(0)) + { + sub_801EFA8(gUnknown_02022C84->unk190); + gUnknown_02022C84->unk6++; + } + break; + case 3: + if (IsLinkTaskFinished() && !sub_8011A9C() && SendBlock(0, gUnknown_02022C84->unk190, sizeof(gUnknown_02022C84->unk190))) + gUnknown_02022C84->unk6++; + break; + case 4: + if ((GetBlockReceivedStatus() & 1) && !sub_8011A9C()) + gUnknown_02022C84->unk6++; + break; + case 5: + if (IsLinkTaskFinished() && !sub_8011A9C()) + { + sub_800AC34(); + gUnknown_02022C84->unkA = 0; + gUnknown_02022C84->unk6++; + } + break; + case 6: + if (gUnknown_02022C84->unkA < 150) + gUnknown_02022C84->unkA++; + + if (!gReceivedRemoteLinkPlayers) + gUnknown_02022C84->unk6++; + break; + case 7: + if (gUnknown_02022C84->unkA >= 150) + sub_801EBD4(9); + else + gUnknown_02022C84->unkA++; + break; + } +} + +static void sub_801E5C4(void) +{ + switch (gUnknown_02022C84->unk6) + { + case 0: + if (!FuncIsActiveTask(sub_801F2B4)) + { + sub_801F5EC(7, 0); + gUnknown_02022C84->unk6++; + } + break; + case 1: + if (!sub_801F644(0) && IsLinkTaskFinished() && !sub_8011A9C()) + { + sub_800AC34(); + gUnknown_02022C84->unkA = 0; + gUnknown_02022C84->unk6++; + } + break; + case 2: + if (gUnknown_02022C84->unkA < 150) + gUnknown_02022C84->unkA++; + + if (!gReceivedRemoteLinkPlayers) + gUnknown_02022C84->unk6++; + break; + case 3: + if (gUnknown_02022C84->unkA >= 150) + sub_801EBD4(9); + else + gUnknown_02022C84->unkA++; + break; + } +} + +static void sub_801E668(void) +{ + switch (gUnknown_02022C84->unk6) + { + case 0: + if (!FuncIsActiveTask(sub_801F2B4)) + { + if (gUnknown_02022C84->unk13) + sub_801F5EC(7, 0); + + gUnknown_02022C84->unk6++; + } + break; + case 1: + if (!sub_801F644(0)) + { + if (gUnknown_02022C84->unk13) + sub_801F5EC(19, 0); + + gUnknown_02022C84->unk6++; + } + break; + case 2: + if (sub_801F644(0) != TRUE && IsLinkTaskFinished() && !sub_8011A9C()) + { + sub_800AC34(); + gUnknown_02022C84->unkA = 0; + gUnknown_02022C84->unk6++; + } + break; + case 3: + if (gUnknown_02022C84->unkA < 150) + gUnknown_02022C84->unkA++; + + if (!gReceivedRemoteLinkPlayers) + gUnknown_02022C84->unk6++; + break; + case 4: + if (gUnknown_02022C84->unkA >= 150) + sub_801EBD4(9); + else + gUnknown_02022C84->unkA++; + break; + } +} + +static void sub_801E764(void) +{ + switch (gUnknown_02022C84->unk6) + { + case 0: + if (!gReceivedRemoteLinkPlayers) + { + sub_801EBD4(1); + break; + } + + sub_801EF4C(gUnknown_02022C84->unk190); + gUnknown_02022C84->unk6++; + // fall through + case 1: + if (IsLinkTaskFinished() == TRUE && !sub_8011A9C() && SendBlock(0, gUnknown_02022C84->unk190, sizeof(gUnknown_02022C84->unk190))) + gUnknown_02022C84->unk6++; + break; + case 2: + sub_801EE10(); + sub_801F5EC(8, 0); + gUnknown_02022C84->unk6++; + break; + case 3: + if (!sub_801F644(0)) + gUnknown_02022C84->unk6++; + break; + case 4: + if (IsLinkTaskFinished()) + sub_801EBD4(1); + break; + } +} + +static void sub_801E838(void) +{ + switch (gUnknown_02022C84->unk6) + { + case 0: + if (sub_801EDC4()) + { + sub_801F5EC(9, 0); + gUnknown_02022C84->unk6 = 2; + } + else + { + sub_801F5EC(13, 0); + gUnknown_02022C84->unk6 = 5; + } + break; + case 1: + if (gMain.newKeys & A_BUTTON) + { + sub_801EDE0(); + sub_801F5EC(11, 0); + gUnknown_02022C84->unk6 = 3; + } + else if (gMain.newKeys & B_BUTTON) + { + sub_801F5EC(10, 0); + gUnknown_02022C84->unk6 = 4; + } + else if (sub_801EBE4()) + { + sub_801F5EC(1, 0); + gUnknown_02022C84->unk6 = 2; + } + break; + case 2: + if (!sub_801F644(0)) + gUnknown_02022C84->unk6 = 1; + break; + case 3: + if (!sub_801F644(0)) + { + sub_801F5EC(10, 0); + gUnknown_02022C84->unk6 = 4; + } + break; + case 4: + if (!sub_801F644(0)) + sub_801EBD4(1); + break; + case 5: + if (!sub_801F644(0)) + gUnknown_02022C84->unk6 = 6; + break; + case 6: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) + { + sub_801F5EC(7, 0); + gUnknown_02022C84->unk6 = 4; + } + break; + } +} + +static void sub_801E978(void) +{ + s8 input; + + switch (gUnknown_02022C84->unk6) + { + case 0: + if (!gUnknown_02022C84->unk18) + { + gUnknown_02022C84->unk6 = 12; + } + else + { + sub_801F5EC(7, 0); + gUnknown_02022C84->unk6 = 1; + } + break; + case 1: + if (!sub_801F644(0)) + { + sub_801F5EC(14, 0); + gUnknown_02022C84->unk6 = 2; + } + break; + case 2: + input = sub_801FF08(); + switch (input) + { + case -1: + case 1: + gUnknown_02022C84->unk6 = 12; + break; + case 0: + sub_801F5EC(7, 0); + gUnknown_02022C84->unk6 = 3; + break; + } + break; + case 3: + if (!sub_801F644(0)) + { + sub_801F5EC(15, 0); + gUnknown_02022C84->unk6 = 4; + } + break; + case 4: + if (!sub_801F644(0)) + gUnknown_02022C84->unk6 = 5; + break; + case 5: + input = sub_801FF08(); + switch (input) + { + case -1: + case 1: + gUnknown_02022C84->unk6 = 12; + break; + case 0: + sub_801F5EC(7, 0); + gUnknown_02022C84->unk6 = 6; + break; + } + break; + case 6: + if (!sub_801F644(0)) + { + sub_801F5EC(16, 0); + sub_801EE2C(); + gUnknown_02022C84->unk6 = 7; + } + break; + case 7: + if (!sub_801F644(0)) + { + SetContinueGameWarpStatusToDynamicWarp(); + TrySavingData(SAVE_NORMAL); + gUnknown_02022C84->unk6 = 8; + } + break; + case 8: + sub_801F5EC(17, 0); + gUnknown_02022C84->unk6 = 9; + break; + case 9: + if (!sub_801F644(0)) + { + PlaySE(SE_SAVE); + ClearContinueGameWarpStatus2(); + gUnknown_02022C84->unk6 = 10; + } + break; + case 10: + gUnknown_02022C84->unk19 = 0; + gUnknown_02022C84->unk6 = 11; + break; + case 11: + gUnknown_02022C84->unk19++; + if (gUnknown_02022C84->unk19 > 120) + gUnknown_02022C84->unk6 = 12; + break; + case 12: + BeginNormalPaletteFade(0xFFFFFFFF, -1, 0, 16, RGB_BLACK); + gUnknown_02022C84->unk6 = 13; + break; + case 13: + if (!gPaletteFade.active) + { + sub_801F544(); + sub_801DE30(); + SetMainCallback2(CB2_ReturnToField); + } + break; + } +} + +static void sub_801EBD4(u16 arg0) +{ + gUnknown_02022C84->unk4 = arg0; + gUnknown_02022C84->unk6 = 0; +} + +static const u8 sUnknown_082F2AA4[] = {9, 9, 9, 9}; + +static bool32 sub_801EBE4(void) +{ + if (!(gMain.newAndRepeatedKeys & DPAD_UP)) + { + if (gMain.newAndRepeatedKeys & DPAD_DOWN) + { + if (gUnknown_02022C84->unk12 < sUnknown_082F2AA4[gUnknown_02022C84->unk10]) + gUnknown_02022C84->unk12++; + else + gUnknown_02022C84->unk12 = 0; + + return TRUE; + } + + if (gUnknown_02022C84->unk10 != 3) + { + if (gMain.newAndRepeatedKeys & DPAD_LEFT) + { + if (gUnknown_02022C84->unk11) + gUnknown_02022C84->unk11--; + else + gUnknown_02022C84->unk11 = 4; + } + else if (gMain.newAndRepeatedKeys & DPAD_RIGHT) + { + if (gUnknown_02022C84->unk11 > 3) + gUnknown_02022C84->unk11 = 0; + else + gUnknown_02022C84->unk11++; + } + else + { + return FALSE; + } + + return TRUE; + } + + return FALSE; + } + else + { + if (gUnknown_02022C84->unk12) + gUnknown_02022C84->unk12--; + else + gUnknown_02022C84->unk12 = sUnknown_082F2AA4[gUnknown_02022C84->unk10]; + + return TRUE; + } +} + +static void sub_801EC94(void) +{ + int i; + const u8 *charsStr; + int strLength; + u8 *str; + u8 buffer[21]; + + if (gUnknown_02022C84->unk10 != 3) + { + charsStr = gUnknown_082F2BA8[gUnknown_02022C84->unk10][gUnknown_02022C84->unk12]; + for (i = 0; i < gUnknown_02022C84->unk11; i++) + { + if (*charsStr == CHAR_SPECIAL_F9) + charsStr++; + charsStr++; + } + + strLength = 1; + } + else + { + u8 *tempStr = StringCopy(buffer, gUnknown_02022C84->unkB9[gUnknown_02022C84->unk12]); + tempStr[0] = CHAR_SPACE; + tempStr[1] = EOS; + charsStr = buffer; + strLength = StringLength_Multibyte(buffer); + } + + gUnknown_02022C84->unk14 = gUnknown_02022C84->unk15; + if (!charsStr) + return; + + str = sub_801EE84(); + while (--strLength != -1 && gUnknown_02022C84->unk15 < 15) + { + if (*charsStr == CHAR_SPECIAL_F9) + { + *str = *charsStr; + charsStr++; + str++; + } + + *str = *charsStr; + charsStr++; + str++; + + gUnknown_02022C84->unk15++; + } + + *str = EOS; +} + +static void sub_801ED68(void) +{ + gUnknown_02022C84->unk14 = gUnknown_02022C84->unk15; + if (gUnknown_02022C84->unk15) + { + u8 *str = sub_801EEA8(); + *str = EOS; + gUnknown_02022C84->unk15--; + } +} + +static void sub_801ED94(void) +{ + u8 *str; + u8 character; + + gUnknown_02022C84->unk14 = gUnknown_02022C84->unk15 - 1; + str = sub_801EEA8(); + if (*str != CHAR_SPECIAL_F9) + { + character = gUnknown_082F2AA8[*str]; + if (character) + *str = character; + } +} + +static bool32 sub_801EDC4(void) +{ + if (gUnknown_02022C84->unk15) + return TRUE; + else + return FALSE; +} + +static void sub_801EDE0(void) +{ + u8 *src = sub_801F114(); + StringCopy(gUnknown_02022C84->unkB9[gUnknown_02022C84->unk12], src); + gUnknown_02022C84->unk18 = 1; +} + +static void sub_801EE10(void) +{ + gUnknown_02022C84->unk1A[0] = EOS; + gUnknown_02022C84->unk14 = 15; + gUnknown_02022C84->unk15 = 0; +} + +static void sub_801EE2C(void) +{ + int i; + for (i = 0; i < 10; i++) + StringCopy(gSaveBlock1Ptr->unk3C88[i], gUnknown_02022C84->unkB9[i]); +} + +u8 *sub_801EE6C(int arg0) +{ + return gUnknown_02022C84->unkB9[arg0]; +} + +static u8 *sub_801EE84(void) +{ + u8 *str = gUnknown_02022C84->unk1A; + while (*str != EOS) + str++; + + return str; +} + +u8 *sub_801EEA8(void) +{ + u8 *str = gUnknown_02022C84->unk1A; + u8 *str2 = str; + while (*str != EOS) + { + str2 = str; + if (*str == CHAR_SPECIAL_F9) + str++; + str++; + } + + return str2; +} + +u16 sub_801EED8(void) +{ + u8 *str; + u32 i, numChars, strLength; + + strLength = StringLength_Multibyte(gUnknown_02022C84->unk1A); + str = gUnknown_02022C84->unk1A; + numChars = 0; + if (strLength > 10) + { + strLength -= 10; + for (i = 0; i < strLength; i++) + { + if (*str == CHAR_SPECIAL_F9) + str++; + + str++; + numChars++; + } + } + + return numChars; +} + +static void sub_801EF1C(u8 *arg0) +{ + arg0[0] = CHAR_SPACE; +} + +static void sub_801EF24(u8 *arg0) +{ + arg0[0] = 2; + StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); + arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_02022C84->unk13; +} + +static void sub_801EF4C(u8 *arg0) +{ + arg0[0] = 1; + StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); + StringCopy(&arg0[1 + (PLAYER_NAME_LENGTH + 1)], gUnknown_02022C84->unk1A); +} + +static void sub_801EF7C(u8 *arg0) +{ + arg0[0] = 3; + StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); + arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_02022C84->unk13; + sub_8011A50(); +} + +static void sub_801EFA8(u8 *arg0) +{ + arg0[0] = 4; + StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); + arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_02022C84->unk13; +} + +static void sub_801EFD0(u8 *arg0) +{ + arg0[0] = 5; + StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); + arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_02022C84->unk13; +} -- cgit v1.2.3 From c6c0c9582f486f805c98ecfa51a803ed62a23918 Mon Sep 17 00:00:00 2001 From: scnorton Date: Tue, 26 Mar 2019 15:11:55 -0400 Subject: Port menews_jisan.c from FireRed --- src/mevent_news.c | 147 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 src/mevent_news.c (limited to 'src') diff --git a/src/mevent_news.c b/src/mevent_news.c new file mode 100644 index 000000000..f5a061c84 --- /dev/null +++ b/src/mevent_news.c @@ -0,0 +1,147 @@ +#include "global.h" +#include "mevent.h" +#include "random.h" +#include "event_data.h" +#include "mevent_news.h" + +static u32 sub_801DCAC(struct MysteryEventStruct *); +static void sub_801DD10(struct MysteryEventStruct *); +static u32 sub_801DD44(struct MysteryEventStruct *); +static void sub_801DCD8(struct MysteryEventStruct *); +static void sub_801DCCC(struct MysteryEventStruct *); + +void sub_801DB68(u32 a0) +{ + struct MysteryEventStruct *r5 = sub_801B044(); + + r5->unk_0_0 = a0; + switch (a0) + { + case 0: + break; + case 1: + case 2: + r5->unk_1 = (Random() % 15) + 16; + break; + case 3: + r5->unk_1 = (Random() % 15) + 1; + break; + } +} + +void sub_801DBC0(void) +{ + struct MysteryEventStruct *r5 = sub_801B044(); + + r5->unk_0_0 = 0; + r5->unk_0_2 = 0; + r5->unk_0_5 = 0; + r5->unk_1 = 0; + VarSet(VAR_0x402E, 0); +} + +void sub_801DBDC(void) +{ + u16 *r4 = GetVarPointer(VAR_0x402E); + struct MysteryEventStruct *r2 = sub_801B044(); + struct MysteryEventStruct r0 = *r2; + + if ((u8)r0.unk_0_5 > 4 && ++(*r4) > 0x1f3) + { + r2->unk_0_5 = 0; + *r4 = 0; + } +} + +u16 sub_801DC20(void) +{ + u16 *r6 = &gSpecialVar_Result; + struct MysteryEventStruct *r4 = sub_801B044(); + u16 r5; + + if (!IsMysteryEventEnabled() || !sub_801B0CC()) + return 0; + + r5 = sub_801DD44(r4); + + switch (r5) + { + case 0: + break; + case 1: + *r6 = sub_801DCAC(r4); + break; + case 2: + *r6 = sub_801DCAC(r4); + break; + case 3: + break; + case 4: + *r6 = sub_801DCAC(r4); + sub_801DCD8(r4); + break; + case 5: + *r6 = sub_801DCAC(r4); + sub_801DCCC(r4); + break; + case 6: + break; + } + + return r5; +} + +static u32 sub_801DCAC(struct MysteryEventStruct *a0) +{ + u32 r4; + + a0->unk_0_0 = 0; + r4 = a0->unk_1 + 0x84; + a0->unk_1 = 0; + sub_801DD10(a0); + return r4; +} + +static void sub_801DCCC(struct MysteryEventStruct *a0) +{ + a0->unk_0_2 = 0; +} + +static void sub_801DCD8(struct MysteryEventStruct *a0) +{ + a0->unk_0_2++; + if ((u8)a0->unk_0_2 > 4) + a0->unk_0_2 = 4; +} + +static void sub_801DD10(struct MysteryEventStruct *a0) +{ + a0->unk_0_5++; + if ((u8)a0->unk_0_5 > 5) + a0->unk_0_5 = 5; +} + +static u32 sub_801DD44(struct MysteryEventStruct *a0) +{ + struct MysteryEventStruct r0; + if ((u8)a0->unk_0_5 == 5) + return 6; + + r0 = *a0; + switch (r0.unk_0_0) + { + case 0: + return 3; + case 1: + return 1; + case 2: + return 2; + case 3: + if ((u8)r0.unk_0_2 < 3) + return 4; + return 5; + default: + AGB_ASSERT(0); + return 0; + } +} -- cgit v1.2.3 From 44f7d49c2e6ee4cb58567c2566e48b859a3e3082 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 27 Mar 2019 09:54:19 -0400 Subject: Finish sub_8016CA0 --- src/union_room.c | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/union_room.c b/src/union_room.c index 99ae4b679..b5c0bab80 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -46,7 +46,7 @@ struct UnkStruct_Shared struct UnkStruct_x1C { struct UnkStruct_Shared unk0; - u8 unk18; + u8 unk18:1; }; struct UnkStruct_x20 @@ -3468,33 +3468,40 @@ u8 sub_8016B00(void) return r7; } -/* void sub_8016CA0(u8 taskId) { s32 i, j; - struct UnkLinkRfuStruct_02022B14 sp0; - u8 text[10]; - struct UnkStruct_Main4 *ptr = (void*) gTasks[taskId].data; + struct UnkStruct_Shared sp0; + struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data; + bool8 r4; for (i = 0; i < 4; i++) { - j = sub_800DE7C(&sp0, text, i); - if (!sub_8013D88(sp0.unk_0a_0, gTasks[taskId].data[4])) - sp0 = gUnknown_082F045C.field_0; - if (sp0.unk_00.unk_00_0 == 1) - sp0 = gUnknown_082F045C.field_0; - - if (!j) + r4 = sub_800DE7C(&sp0.field_0, sp0.playerName, i); + if (!sub_8013D88(sp0.field_0.unk_0a_0, gTasks[taskId].data[4])) + { + sp0 = gUnknown_082F045C; + } + if (sp0.field_0.unk_00.unk_00_0 == 1) + { + sp0 = gUnknown_082F045C; + } + if (!r4) { for (j = 0; j < i; j++) { - if (sub_8017630()) + if (!sub_8017630(&ptr[1]->arr[j].unk0, &sp0)) + { + sp0 = gUnknown_082F045C; + } } + ptr[1]->arr[i].unk0 = sp0; + ptr[1]->arr[i].unk18 = sub_8017630(&ptr[1]->arr[i].unk0, &gUnknown_082F045C); } else { - + ptr[0]->arr[i].unk0 = sp0; + ptr[0]->arr[i].unk18 = sub_8017630(&ptr[0]->arr[i].unk0, &gUnknown_082F045C); } } } -*/ -- cgit v1.2.3 From 9a8b001ebf66a3c657512fb660b3c4768dabad1c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 27 Mar 2019 10:44:49 -0400 Subject: through sub_801704C --- src/union_room.c | 123 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 120 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/union_room.c b/src/union_room.c index b5c0bab80..817f6b237 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -241,7 +241,7 @@ void sub_8018784(u8 windowId); void sub_8018884(const u8 *src); bool32 mevent_0814257C(u8 *textState, const u8 *str); s8 sub_8018B08(u8 *textState, u8 *arg1, u8 arg2, const u8 *str); -bool32 sub_8016F1C(struct UnkStruct_x20 *arg0, s16 arg1); +bool32 sub_8016F1C(struct UnkLinkRfuStruct_02022B14 *arg0, s16 arg1); u8 sub_8016DF0(struct UnkStruct_Main4 *arg0, struct UnkStruct_Main4 *arg1, u32 arg2); void sub_8019F2C(void); void sub_8019E70(u8 *arg0, s32 arg1); @@ -274,7 +274,7 @@ void sub_8019F04(u8 *spriteIds); void sub_8019E3C(void); void sub_80173B0(void); s32 sub_8017D04(u32 type, u32 species); -void sub_8017020(const u8 *src); +bool32 sub_8017020(const u8 *src); void sub_8019BA8(void *); s32 sub_8017EA0(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *arg3); void sub_801697C(u8 taskId); @@ -2340,7 +2340,7 @@ void sub_80152F4(u8 taskId) { if (data->field_0->arr[0].field_1A_0 == 1 && !data->field_0->arr[0].unk.field_0.unk_0a_7) { - if (sub_8016F1C(&data->field_0->arr[0], data->field_12 + 7)) + if (sub_8016F1C(&data->field_0->arr[0].unk.field_0, data->field_12 + 7)) { data->field_F = 0; data->field_14 = 0; @@ -3505,3 +3505,120 @@ void sub_8016CA0(u8 taskId) } } } + +u8 sub_8016DF0(struct UnkStruct_Main4 * a0, struct UnkStruct_Main4 * a1, u32 a2) +{ + u8 taskId = CreateTask(sub_8016CA0, 0); + struct UnkStruct_Main4 ** data = (void *)gTasks[taskId].data; + data[0] = a0; + data[1] = a1; + gTasks[taskId].data[4] = a2; + return taskId; +} + +void sub_8016E24(u8 taskId) +{ + s32 i, j; + struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data; + + for (i = 0; i < 4; i++) + { + sub_800DE7C(&ptr[0]->arr[i].unk0.field_0, ptr[0]->arr[i].unk0.playerName, i); + if (!sub_8013D88(ptr[0]->arr[i].unk0.field_0.unk_0a_0, gTasks[taskId].data[2])) + { + ptr[0]->arr[i].unk0 = gUnknown_082F045C; + } + for (j = 0; j < i; j++) + { + if (!sub_8017630(&ptr[0]->arr[j].unk0, &ptr[0]->arr[i].unk0)) + { + ptr[0]->arr[i].unk0 = gUnknown_082F045C; + } + } + ptr[0]->arr[i].unk18 = sub_8017630(&ptr[0]->arr[i].unk0, &gUnknown_082F045C); + } +} + +bool32 sub_8016F1C(struct UnkLinkRfuStruct_02022B14 *arg0, s16 arg1) +{ + if (arg1 == 7) + { + if (!arg0->unk_00.unk_00_5) + { + return FALSE; + } + else + { + return TRUE; + } + } + else if (arg1 == 8) + { + if (!arg0->unk_00.unk_00_4) + { + return FALSE; + } + else + { + return TRUE; + } + } + else + { + return FALSE; + } +} + +void sub_8016F44(u8 taskId) +{ + s32 i; + struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data; + + for (i = 0; i < 4; i++) + { + if (sub_800DF34(&ptr[0]->arr[i].unk0.field_0, ptr[0]->arr[i].unk0.playerName, i)) + { + sub_8016F1C(&ptr[0]->arr[i].unk0.field_0, gTasks[taskId].data[2]); + } + ptr[0]->arr[i].unk18 = sub_8017630(&ptr[0]->arr[i].unk0, &gUnknown_082F045C); + } +} + +u8 sub_8016FC0(struct UnkStruct_Main4 * a0, u32 a1) +{ + u8 taskId = CreateTask(sub_8016E24, 0); + struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data; + ptr[0] = a0; + gTasks[taskId].data[2] = a1; + return taskId; +} + +u8 sub_8016FF0(struct UnkStruct_Main4 * a0, u32 a1) +{ + u8 taskId = CreateTask(sub_8016F44, 0); + struct UnkStruct_Main4 **ptr = (void*) gTasks[taskId].data; + ptr[0] = a0; + gTasks[taskId].data[2] = a1; + return taskId; +} + +bool32 sub_8017020(const u8 *src) +{ + sub_81973A4(); + DrawDialogueFrame(0, 1); + StringExpandPlaceholders(gStringVar4, src); + AddTextPrinterWithCustomSpeedForMessage(FALSE, 1); + return FALSE; +} + +bool32 sub_801704C(void) +{ + if (!RunTextPrintersAndIsPrinter0Active()) + { + return TRUE; + } + else + { + return FALSE; + } +} -- cgit v1.2.3 From 8e0773675c63cdc1b51f6fcc3db3ca367bf4654b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 27 Mar 2019 13:16:10 -0400 Subject: through sub_8017168 --- src/union_room.c | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) (limited to 'src') diff --git a/src/union_room.c b/src/union_room.c index 817f6b237..0eb419401 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -331,6 +331,7 @@ extern const u8 gUnknown_082EF298[]; extern const u8 gUnknown_082EF65C[]; extern const u8 gUnknown_082EF6E4[]; extern const u8 gUnknown_082EF718[]; +extern const u8 gUnknown_082EFD94[]; extern const u32 gUnknown_082F00C4[]; @@ -3622,3 +3623,73 @@ bool32 sub_801704C(void) return FALSE; } } + +bool8 PrintOnTextbox(u8 *textState, const u8 *str) +{ + switch (*textState) + { + case 0: + sub_81973A4(); + DrawDialogueFrame(0, 1); + StringExpandPlaceholders(gStringVar4, str); + AddTextPrinterForMessage_2(TRUE); + (*textState)++; + break; + case 1: + if (!RunTextPrintersAndIsPrinter0Active()) + { + *textState = 0; + return TRUE; + } + break; + } + return FALSE; +} + +s8 sub_80170B8(u8 *arg0, bool32 arg1) +{ + s8 r1; + + switch (*arg0) + { + case 0: + if (arg1) + { + return -3; + } + DisplayYesNoMenuDefaultYes(); + (*arg0)++; + break; + case 1: + if (arg1) + { + sub_8198C78(); + *arg0 = 0; + return -3; + } + r1 = Menu_ProcessInputNoWrapClearOnChoose(); + if (r1 == -1 || r1 == 0 || r1 == 1) + { + *arg0 = 0; + return r1; + } + break; + } + return -2; +} + +u8 sub_8017118(struct WindowTemplate * template) +{ + u8 windowId = AddWindow(template); + DrawStdWindowFrame(windowId, FALSE); + FillWindowPixelBuffer(windowId, 0xFF); + sub_80173E0(windowId, 1, gUnknown_082EFD94, 8, 1, 6); + CopyWindowToVram(windowId, 2); + PutWindowTilemap(windowId); + return windowId; +} + +void sub_8017168(u8 windowId) +{ + RemoveWindow(windowId); +} -- cgit v1.2.3 From 51d2131dc268ba760e0d5790d747213eb0a12b2b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 27 Mar 2019 16:57:34 -0400 Subject: through (nearly-matching) sub_80172A0 --- src/union_room.c | 243 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 242 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/union_room.c b/src/union_room.c index 0eb419401..90631dab4 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -34,6 +34,7 @@ #include "data2.h" #include "field_screen_effect.h" #include "script_pokemon_util_80F87D8.h" +#include "international_string_util.h" #include "mevent.h" struct UnkStruct_Shared @@ -264,6 +265,7 @@ void sub_801818C(bool32 arg0); void sub_801A3D0(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2); s32 sub_8017178(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate); s32 sub_80172A0(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate, struct UnkStruct_Main0 *arg6); +s32 sub_8017CB0(struct UnkStruct_Main0 * arg); bool32 sub_8018024(void); u32 sub_8017984(u32 arg0); void sub_8018220(u8 *unused, struct UnkStruct_URoom *arg1, bool8 arg2); @@ -346,6 +348,7 @@ extern const struct WindowTemplate gUnknown_082F017C; extern const struct WindowTemplate gUnknown_082F021C; extern const struct WindowTemplate gUnknown_082F025C; extern const struct WindowTemplate gUnknown_082F0294; +extern const struct WindowTemplate gUnknown_082F0344; extern const struct WindowTemplate gUnknown_082F034C; extern const struct ListMenuTemplate gUnknown_082F015C; @@ -3678,7 +3681,7 @@ s8 sub_80170B8(u8 *arg0, bool32 arg1) return -2; } -u8 sub_8017118(struct WindowTemplate * template) +u8 sub_8017118(const struct WindowTemplate * template) { u8 windowId = AddWindow(template); DrawStdWindowFrame(windowId, FALSE); @@ -3693,3 +3696,241 @@ void sub_8017168(u8 windowId) { RemoveWindow(windowId); } + +s32 sub_8017178(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate) +{ + s32 r1, r8; + struct WindowTemplate winTemplateCopy; + + switch (*arg0) + { + case 0: + winTemplateCopy = *winTemplate; + r1 = sub_81DB41C(menuTemplate); + if (winTemplateCopy.width > r1) + { + winTemplateCopy.width = r1; + } + if (winTemplateCopy.tilemapLeft + winTemplateCopy.width > 29) + { + winTemplateCopy.tilemapLeft = max(29 - winTemplateCopy.width, 0); + } + *arg1 = AddWindow(&winTemplateCopy); + DrawStdWindowFrame(*arg1, FALSE); + gMultiuseListMenuTemplate = *menuTemplate; + gMultiuseListMenuTemplate.windowId = *arg1; + *arg2 = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); + CopyWindowToVram(*arg1, TRUE); + (*arg0)++; + break; + case 1: + r8 = ListMenu_ProcessInput(*arg2); + if (({gMain.newKeys & A_BUTTON;})) + { + DestroyListMenuTask(*arg2, NULL, NULL); + ClearStdWindowAndFrame(*arg1, TRUE); + RemoveWindow(*arg1); + *arg0 = 0; + return r8; + } + else if (({gMain.newKeys & B_BUTTON;})) + { + DestroyListMenuTask(*arg2, NULL, NULL); + ClearStdWindowAndFrame(*arg1, TRUE); + RemoveWindow(*arg1); + *arg0 = 0; + return -2; + } + break; + } + + return -1; +} + +#ifdef NONMATCHING +s32 sub_80172A0(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate, struct UnkStruct_Main0 *arg6) +{ + s32 input; + s32 r4; + + switch (*arg0) + { + case 0: + *arg3 = sub_8017118(&gUnknown_082F0344); + *arg1 = AddWindow(winTemplate); + DrawStdWindowFrame(*arg1, FALSE); + gMultiuseListMenuTemplate = *menuTemplate; + gMultiuseListMenuTemplate.windowId = *arg1; + *arg2 = ListMenuInit(&gMultiuseListMenuTemplate, 0, 1); + (*arg0)++; + break; + case 1: + CopyWindowToVram(*arg1, TRUE); + (*arg0)++; + break; + case 2: + // Register swap r1 <---> r2 + input = ListMenu_ProcessInput(*arg2); + if (({gMain.newKeys & (A_BUTTON | B_BUTTON);})) + { + if (input == 8 || ({gMain.newKeys & B_BUTTON;})) + { + DestroyListMenuTask(*arg2, NULL, NULL); + RemoveWindow(*arg1); + sub_8017168(*arg3); + *arg0 = 0; + return -2; + } + else + { + r4 = sub_8017CB0(arg6); + if (r4 >= 0) + { + DestroyListMenuTask(*arg2, NULL, NULL); + RemoveWindow(*arg1); + sub_8017168(*arg3); + *arg0 = 0; + return r4; + } + else + { + PlaySE(SE_WALL_HIT); + } + } + } + break; + } + + return -1; +} +#else +NAKED +s32 sub_80172A0(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate, struct UnkStruct_Main0 *arg6) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tadds r5, r0, 0\n" + "\tadds r6, r1, 0\n" + "\tmov r10, r2\n" + "\tmov r9, r3\n" + "\tldrb r4, [r5]\n" + "\tcmp r4, 0x1\n" + "\tbeq _0801730C\n" + "\tcmp r4, 0x1\n" + "\tbgt _080172C2\n" + "\tcmp r4, 0\n" + "\tbeq _080172C8\n" + "\tb _0801739C\n" + "_080172C2:\n" + "\tcmp r4, 0x2\n" + "\tbeq _0801731C\n" + "\tb _0801739C\n" + "_080172C8:\n" + "\tldr r0, =gUnknown_082F0344\n" + "\tbl sub_8017118\n" + "\tmov r1, r9\n" + "\tstrb r0, [r1]\n" + "\tldr r0, [sp, 0x20]\n" + "\tbl AddWindow\n" + "\tstrb r0, [r6]\n" + "\tldrb r0, [r6]\n" + "\tmovs r1, 0\n" + "\tbl DrawStdWindowFrame\n" + "\tldr r0, =gMultiuseListMenuTemplate\n" + "\tadds r2, r0, 0\n" + "\tldr r1, [sp, 0x24]\n" + "\tldm r1!, {r3,r4,r7}\n" + "\tstm r2!, {r3,r4,r7}\n" + "\tldm r1!, {r3,r4,r7}\n" + "\tstm r2!, {r3,r4,r7}\n" + "\tldrb r1, [r6]\n" + "\tstrb r1, [r0, 0x10]\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0x1\n" + "\tbl ListMenuInit\n" + "\tmov r1, r10\n" + "\tstrb r0, [r1]\n" + "\tb _08017314\n" + "\t.pool\n" + "_0801730C:\n" + "\tldrb r0, [r6]\n" + "\tmovs r1, 0x1\n" + "\tbl CopyWindowToVram\n" + "_08017314:\n" + "\tldrb r0, [r5]\n" + "\tadds r0, 0x1\n" + "\tstrb r0, [r5]\n" + "\tb _0801739C\n" + "_0801731C:\n" + "\tmov r3, r10\n" + "\tldrb r0, [r3]\n" + "\tbl ListMenu_ProcessInput\n" + "\tadds r1, r0, 0\n" + "\tldr r0, =gMain\n" + "\tldrh r2, [r0, 0x2E]\n" + "\tmovs r0, 0x3\n" + "\tands r0, r2\n" + "\tcmp r0, 0\n" + "\tbeq _0801739C\n" + "\tcmp r1, 0x8\n" + "\tbeq _0801733E\n" + "\tands r4, r2\n" + "\tmov r8, r4\n" + "\tcmp r4, 0\n" + "\tbeq _08017368\n" + "_0801733E:\n" + "\tmov r4, r10\n" + "\tldrb r0, [r4]\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0\n" + "\tbl DestroyListMenuTask\n" + "\tldrb r0, [r6]\n" + "\tbl RemoveWindow\n" + "\tmov r7, r9\n" + "\tldrb r0, [r7]\n" + "\tbl sub_8017168\n" + "\tmovs r0, 0\n" + "\tstrb r0, [r5]\n" + "\tmovs r0, 0x2\n" + "\tnegs r0, r0\n" + "\tb _080173A0\n" + "\t.pool\n" + "_08017368:\n" + "\tldr r0, [sp, 0x28]\n" + "\tbl sub_8017CB0\n" + "\tadds r4, r0, 0\n" + "\tcmp r4, 0\n" + "\tblt _08017396\n" + "\tmov r1, r10\n" + "\tldrb r0, [r1]\n" + "\tmovs r1, 0\n" + "\tmovs r2, 0\n" + "\tbl DestroyListMenuTask\n" + "\tldrb r0, [r6]\n" + "\tbl RemoveWindow\n" + "\tmov r3, r9\n" + "\tldrb r0, [r3]\n" + "\tbl sub_8017168\n" + "\tmov r7, r8\n" + "\tstrb r7, [r5]\n" + "\tadds r0, r4, 0\n" + "\tb _080173A0\n" + "_08017396:\n" + "\tmovs r0, 0x7\n" + "\tbl PlaySE\n" + "_0801739C:\n" + "\tmovs r0, 0x1\n" + "\tnegs r0, r0\n" + "_080173A0:\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r1}\n" + "\tbx r1"); +} +#endif -- cgit v1.2.3 From aebc676913addd23a141b527b8d0b26fb5004189 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Wed, 27 Mar 2019 19:09:12 -0500 Subject: Decompile union_room_chat.c up to sub_801F5B8 --- src/new_game.c | 3 +- src/text.c | 2 +- src/union_room_chat.c | 385 +++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 381 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/new_game.c b/src/new_game.c index 97988497d..19f3461b4 100644 --- a/src/new_game.c +++ b/src/new_game.c @@ -43,9 +43,8 @@ #include "field_specials.h" #include "berry_powder.h" #include "mevent.h" +#include "union_room_chat.h" - -extern void copy_strings_to_sav1(void); extern void ResetPokeJumpResults(void); extern const u8 EventScript_ResetAllMapFlags[]; diff --git a/src/text.c b/src/text.c index be4bf2697..39912b17d 100644 --- a/src/text.c +++ b/src/text.c @@ -1601,7 +1601,7 @@ u16 RenderText(struct TextPrinter *textPrinter) textPrinter->printerTemplate.currentX = *textPrinter->printerTemplate.currentChar + textPrinter->printerTemplate.x; textPrinter->printerTemplate.currentChar++; return 2; - case 19: + case EXT_CTRL_CODE_CLEAR_TO: { widthHelper = *textPrinter->printerTemplate.currentChar; widthHelper += textPrinter->printerTemplate.x; diff --git a/src/union_room_chat.c b/src/union_room_chat.c index f7c8be9f1..cc482d929 100755 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -1,5 +1,7 @@ #include "global.h" #include "alloc.h" +#include "bg.h" +#include "dynamic_placeholder_text_util.h" #include "link.h" #include "link_rfu.h" #include "load_save.h" @@ -12,7 +14,9 @@ #include "sound.h" #include "sprite.h" #include "string_util.h" +#include "strings.h" #include "task.h" +#include "window.h" #include "constants/rgb.h" #include "constants/songs.h" @@ -37,13 +41,32 @@ struct UnionRoomChat u8 unk17; u8 unk18; u8 unk19; - u8 unk1A[0x9F]; + u8 unk1A[0x1F]; + u8 unk39[0x40]; + u8 unk79[0x40]; u8 unkB9[10][21]; u8 filler18B[0x5]; u8 unk190[0x28]; u16 unk1B8; }; +struct UnionRoomChat2_Unk0 +{ + int (* unk0)(u8 *); + u8 unk4; + u8 unk5; +}; + +struct UnionRoomChat2 +{ + struct UnionRoomChat2_Unk0 unk0[3]; + u16 unk18; + u16 unk1A; + u8 filler1C[0x2]; + u16 unk1E; + u8 filler20[0x2148]; +}; + static void sub_801DDD0(struct UnionRoomChat *); static void c2_081284E0(void); static void sub_801DF20(void); @@ -77,19 +100,28 @@ static void sub_801EF7C(u8 *); static void sub_801EFA8(u8 *); static void sub_801EFD0(u8 *); u8 *sub_801F114(void); -void sub_801F2B4(u8 taskId); -bool8 sub_801F4D0(void); -int sub_801F534(void); -void sub_801F544(void); -void sub_801F5B8(void); +static void sub_801F2B4(u8 taskId); +static bool8 sub_801F4D0(void); +static bool32 sub_801F534(void); +static void sub_801F544(void); +static void sub_801F5B8(void); void sub_801F5EC(u16, u8); bool8 sub_801F644(u8); s8 sub_801FF08(void); +bool32 sub_8020890(void); +void sub_8020770(void); +static void sub_801F574(struct UnionRoomChat2 *); +static void sub_801F580(void); +void sub_80208D0(void); +int sub_801FDD8(u8 *); extern struct UnionRoomChat *gUnknown_02022C84; +extern struct UnionRoomChat2 *gUnknown_02022C88; extern const u8 *const gUnknown_082F2BA8[][10]; extern const u8 gUnknown_082F2AA8[]; +extern const struct BgTemplate gUnknown_082F2C60[4]; +extern const struct WindowTemplate gUnknown_082F2C70[]; void sub_801DD98(void) @@ -1070,3 +1102,344 @@ static void sub_801EFD0(u8 *arg0) StringCopy(&arg0[1], gSaveBlock2Ptr->playerName); arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_02022C84->unk13; } + +bool32 sub_801EFF8(u8 *arg0, u8 *arg1) +{ + u8 *tempStr; + u8 var0 = *arg1; + u8 *str = arg1 + 1; + arg1 = str; + arg1 += 8; + + switch (var0) + { + case 2: + if (gUnknown_02022C84->unk13 != str[8]) + { + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, str); + DynamicPlaceholderTextUtil_ExpandPlaceholders(arg0, gText_F700JoinedChat); + return TRUE; + } + break; + case 1: + tempStr = StringCopy(arg0, str); + *(tempStr++) = EXT_CTRL_CODE_BEGIN; + *(tempStr++) = EXT_CTRL_CODE_CLEAR_TO; + *(tempStr++) = 42; + *(tempStr++) = CHAR_COLON; + StringCopy(tempStr, arg1); + return TRUE; + case 5: + StringCopy(gUnknown_02022C84->unk79, str); + // fall through + case 3: + if (gUnknown_02022C84->unk13 != *arg1) + { + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, str); + DynamicPlaceholderTextUtil_ExpandPlaceholders(arg0, gText_F700LeftChat); + return TRUE; + } + break; + } + + return FALSE; +} + +u8 sub_801F0B0(void) +{ + return gUnknown_02022C84->unk10; +} + +void sub_801F0BC(u8 *arg0, u8 *arg1) +{ + *arg0 = gUnknown_02022C84->unk11; + *arg1 = gUnknown_02022C84->unk12; +} + +u8 *sub_801F0D0(void) +{ + return gUnknown_02022C84->unk1A; +} + +int sub_801F0DC(void) +{ + u8 *str = sub_801F0D0(); + return StringLength_Multibyte(str); +} + +void sub_801F0EC(int *arg0, int *arg1) +{ + int diff = gUnknown_02022C84->unk15 - gUnknown_02022C84->unk14; + if (diff < 0) + { + diff *= -1; + *arg0 = gUnknown_02022C84->unk15; + } + else + { + *arg0 = gUnknown_02022C84->unk14; + } + + *arg1 = diff; +} + +u8 *sub_801F114(void) +{ + int i; + u16 numChars = sub_801EED8(); + u8 *str = gUnknown_02022C84->unk1A; + for (i = 0; i < numChars; i++) + { + if (*str == CHAR_SPECIAL_F9) + *str++; + + str++; + } + + return str; +} + +u16 sub_801F144(void) +{ + u16 count; + u32 i; + u16 numChars = sub_801EED8(); + u8 *str = gUnknown_02022C84->unk1A; + for (count = 0, i = 0; i < numChars; count++, i++) + { + if (*str == CHAR_SPECIAL_F9) + str++; + + str++; + } + + return count; +} + +u8 *sub_801F180(void) +{ + return gUnknown_02022C84->unk39; +} + +u8 sub_801F18C(void) +{ + return gUnknown_02022C84->unk16; +} + +int sub_801F198(void) +{ + return gUnknown_02022C84->unk15; +} + +int sub_801F1A4(void) +{ + u8 *str = sub_801EEA8(); + u32 character = *str; + if (character > 0xFF || gUnknown_082F2AA8[character] == character || gUnknown_082F2AA8[character] == 0) + return 3; + else + return 0; +} + +u8 *sub_801F1D0(void) +{ + return gUnknown_02022C84->unk79; +} + +void copy_strings_to_sav1(void) +{ + StringCopy(gSaveBlock1Ptr->unk3C88[0], gText_Hello); + StringCopy(gSaveBlock1Ptr->unk3C88[1], gText_Pokemon2); + StringCopy(gSaveBlock1Ptr->unk3C88[2], gText_Trade); + StringCopy(gSaveBlock1Ptr->unk3C88[3], gText_Battle); + StringCopy(gSaveBlock1Ptr->unk3C88[4], gText_Lets); + StringCopy(gSaveBlock1Ptr->unk3C88[5], gText_Ok); + StringCopy(gSaveBlock1Ptr->unk3C88[6], gText_Sorry); + StringCopy(gSaveBlock1Ptr->unk3C88[7], gText_YayUnkF9F9); + StringCopy(gSaveBlock1Ptr->unk3C88[8], gText_ThankYou); + StringCopy(gSaveBlock1Ptr->unk3C88[9], gText_ByeBye); +} + +static void sub_801F2B4(u8 taskId) +{ + u8 *buffer; + s16 *data = gTasks[taskId].data; + + switch (data[0]) + { + case 0: + if (!gReceivedRemoteLinkPlayers) + { + DestroyTask(taskId); + return; + } + + data[0] = 1; + // fall through + case 1: + data[4] = GetLinkPlayerCount(); + if (gUnknown_02022C84->unkD != data[4]) + { + data[0] = 2; + gUnknown_02022C84->unkD = data[4]; + return; + } + + data[3] = GetBlockReceivedStatus(); + if (!data[3] && sub_8011A9C()) + return; + + data[1] = 0; + data[0] = 3; + // fall through + case 3: + for (; data[1] < 5 && ((data[3] >> data[1]) & 1) == 0; data[1]++) + ; + + if (data[1] == 5) + { + data[0] = 1; + return; + } + + data[2] = data[1]; + ResetBlockReceivedFlag(data[2]); + buffer = (u8 *)gBlockRecvBuffer[data[1]]; + switch (buffer[0]) + { + default: + case 1: data[5] = 3; break; + case 2: data[5] = 3; break; + case 3: data[5] = 4; break; + case 4: data[5] = 5; break; + case 5: data[5] = 6; break; + } + + if (sub_801EFF8(gUnknown_02022C84->unk39, (u8 *)gBlockRecvBuffer[data[1]])) + { + gUnknown_02022C84->unk16 = data[1]; + sub_801F5EC(12, 2); + data[0] = 7; + } + else + { + data[0] = data[5]; + } + + data[1]++; + break; + case 7: + if (!sub_801F644(2)) + data[0] = data[5]; + break; + case 4: + if (!gUnknown_02022C84->unk13 && data[2]) + { + if (GetLinkPlayerCount() == 2) + { + sub_80104B0(); + gUnknown_02022C84->unk17 = 1; + DestroyTask(taskId); + return; + } + + sub_8011DE0(data[2]); + } + + data[0] = 3; + break; + case 5: + if (gUnknown_02022C84->unk13) + gUnknown_02022C84->unk17 = 2; + + DestroyTask(taskId); + break; + case 6: + gUnknown_02022C84->unk17 = 3; + DestroyTask(taskId); + break; + case 2: + if (!sub_8011A9C()) + { + if (!gUnknown_02022C84->unk13) + sub_80110B8(gUnknown_02022C84->unkD); + + data[0] = 1; + } + break; + } +} + +static bool8 sub_801F4D0(void) +{ + gUnknown_02022C88 = Alloc(sizeof(*gUnknown_02022C88)); + if (gUnknown_02022C88 && sub_8020890()) + { + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_082F2C60, ARRAY_COUNT(gUnknown_082F2C60)); + InitWindows(gUnknown_082F2C70); + reset_temp_tile_data_buffers(); + sub_8020770(); + sub_801F574(gUnknown_02022C88); + sub_801F580(); + sub_801F5EC(0, 0); + return TRUE; + } + else + { + return FALSE; + } +} + +static bool32 sub_801F534(void) +{ + return sub_801F644(0); +} + +static void sub_801F544(void) +{ + sub_80208D0(); + if (gUnknown_02022C88) + FREE_AND_SET_NULL(gUnknown_02022C88); + + FreeAllWindowBuffers(); + gScanlineEffect.state = 3; +} + +static void sub_801F574(struct UnionRoomChat2 *arg0) +{ + arg0->unk18 = 0xFF; + arg0->unk1E = 0xFF; + arg0->unk1A = 0; +} + +static void sub_801F580(void) +{ + int i; + + if (!gUnknown_02022C88) + return; + + for (i = 0; i < 3; i++) + { + gUnknown_02022C88->unk0[i].unk0 = sub_801FDD8; + gUnknown_02022C88->unk0[i].unk4 = 0; + gUnknown_02022C88->unk0[i].unk5 = 0; + } +} + +static void sub_801F5B8(void) +{ + int i; + + if (!gUnknown_02022C88) + return; + + for (i = 0; i < 3; i++) + { + gUnknown_02022C88->unk0[i].unk4 = + gUnknown_02022C88->unk0[i].unk0(&gUnknown_02022C88->unk0[i].unk5); + } +} -- cgit v1.2.3 From 7c45a7c443fc5fcc0cf254527049004e14724150 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 26 Mar 2019 23:41:05 -0400 Subject: port mevent_801BAAC from fire red --- src/mevent_801BAAC.c | 804 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 804 insertions(+) create mode 100644 src/mevent_801BAAC.c (limited to 'src') diff --git a/src/mevent_801BAAC.c b/src/mevent_801BAAC.c new file mode 100644 index 000000000..0514f8e54 --- /dev/null +++ b/src/mevent_801BAAC.c @@ -0,0 +1,804 @@ +#include "global.h" +#include "constants/species.h" +#include "bg.h" +#include "gpu_regs.h" +#include "palette.h" +#include "decompress.h" +#include "alloc.h" +#include "menu.h" +#include "pokemon_icon.h" +#include "union_room.h" +#include "list_menu.h" +#include "text_window.h" +#include "string_util.h" +#include "link_rfu.h" +#include "mevent.h" + +struct UnkStruct_8467FB8 +{ + u8 textPal1:4; + u8 textPal2:4; + u8 textPal3:4; + u8 textPal4:4; + const u32 * tiles; + const u32 * map; + const u16 * pal; +}; + +struct UnkStruct_203F3C8_02DC +{ + u8 unk_00; + u8 unk_01[41]; + u8 unk_42[4]; +}; + +struct UnkStruct_203F3C8 +{ + /*0000*/ struct MEventBuffer_32E0_Sub unk_0000; + /*014c*/ struct MEventBuffer_3430_Sub unk_014C; + /*0170*/ const struct UnkStruct_8467FB8 * unk_0170; + /*0174*/ u8 unk_0174; + /*0175*/ u8 unk_0175; + /*0176*/ u16 unk_0176[3]; + /*017C*/ u8 unk_017C; + /*017D*/ u8 unk_017D[7][2]; + /*018B*/ u8 unk_018B[41]; + /*01B4*/ u8 unk_01B4[41]; + /*01DD*/ u8 unk_01DD[7]; + /*01E4*/ u8 unk_01E4[4][41]; + /*0288*/ u8 unk_0288[41]; + /*02B1*/ u8 unk_02B1[41]; + /*02DC*/ struct UnkStruct_203F3C8_02DC unk_02DC[8]; + /*045C*/ u8 buffer_045C[0x1000]; +}; + +EWRAM_DATA struct UnkStruct_203F3C8 * gUnknown_02022C74 = NULL; + +void sub_801BEF8(void); +void sub_801C178(u8 whichWindow); +void sub_801C4C0(void); +void sub_801C61C(void); + +extern const struct OamData gUnknown_08524934; + +const u8 gUnknown_082F0E10[][3] = { + {0, 2, 3}, + {0, 1, 2} +}; +const u8 ALIGNED(4) gUnknown_082F0E18[3] = {7, 4, 7}; +const struct WindowTemplate gUnknown_082F0E1C[] = { + {0x01, 0x01, 0x01, 0x19, 0x04, 0x02, 0x029c}, + {0x01, 0x01, 0x06, 0x1c, 0x08, 0x02, 0x01bc}, + {0x01, 0x01, 0x0e, 0x1c, 0x05, 0x02, 0x0130} +}; + +const u16 gWonderCardBgPal1[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_1.gbapal"); +const u16 gWonderCardBgPal2[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_2.gbapal"); +const u16 gWonderCardBgPal3[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_3.gbapal"); +const u16 gWonderCardBgPal4[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_4.gbapal"); +const u16 gWonderCardBgPal5[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_5.gbapal"); +const u16 gWonderCardBgPal6[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_6.gbapal"); +const u16 gWonderCardBgPal7[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_7.gbapal"); +const u16 gWonderCardBgPal8[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_8.gbapal"); +const u32 gWonderCardBgGfx1[] = INCBIN_U32("graphics/wonder_transfers/wonder_card_1.4bpp.lz"); +const u32 gWonderCardBgTilemap1[] = INCBIN_U32("graphics/wonder_transfers/wonder_card_1.bin.lz"); +const u32 gWonderCardBgGfx2[] = INCBIN_U32("graphics/wonder_transfers/wonder_card_2.4bpp.lz"); +const u32 gWonderCardBgTilemap2[] = INCBIN_U32("graphics/wonder_transfers/wonder_card_2.bin.lz"); +const u32 gWonderCardBgGfx3[] = INCBIN_U32("graphics/wonder_transfers/wonder_card_3.4bpp.lz"); +const u32 gWonderCardBgTilemap3[] = INCBIN_U32("graphics/wonder_transfers/wonder_card_3.bin.lz"); +const u32 gWonderCardBgGfx7[] = INCBIN_U32("graphics/wonder_transfers/wonder_card_7.4bpp.lz"); +const u32 gWonderCardBgTilemap7[] = INCBIN_U32("graphics/wonder_transfers/wonder_card_7.bin.lz"); +const u32 gWonderCardBgGfx8[] = INCBIN_U32("graphics/wonder_transfers/wonder_card_8.4bpp.lz"); +const u32 gWonderCardBgTilemap8[] = INCBIN_U32("graphics/wonder_transfers/wonder_card_8.bin.lz"); +const u16 gWonderCardShadowPal1[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_shadow_1.gbapal"); +const u16 gWonderCardShadowPal2[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_shadow_2.gbapal"); +const u16 gWonderCardShadowPal3[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_shadow_3.gbapal"); +const u16 gWonderCardShadowPal4[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_shadow_4.gbapal"); +const u16 gWonderCardShadowPal5[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_shadow_5.gbapal"); +const u16 gWonderCardShadowPal6[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_shadow_6.gbapal"); +const u16 gWonderCardShadowPal7[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_shadow_7.gbapal"); +const u16 gWonderCardShadowPal8[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_shadow_8.gbapal"); +const u32 gWonderCardShadowGfx[] = INCBIN_U32("graphics/wonder_transfers/wonder_card_shadow.4bpp.lz"); + +const struct CompressedSpriteSheet gUnknown_082F1D00 = { + gWonderCardShadowGfx, 0x100, 0x8000 +}; +const struct SpritePalette gUnknown_082F1D08[] = { + {gWonderCardShadowPal1, 0x8000}, + {gWonderCardShadowPal2, 0x8000}, + {gWonderCardShadowPal3, 0x8000}, + {gWonderCardShadowPal4, 0x8000}, + {gWonderCardShadowPal5, 0x8000}, + {gWonderCardShadowPal6, 0x8000}, + {gWonderCardShadowPal7, 0x8000}, + {gWonderCardShadowPal8, 0x8000} +}; +const struct SpriteTemplate gUnknown_082F1D48 = { + 0x8000, 0x8000, &gUnknown_08524934, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy +}; +const struct UnkStruct_8467FB8 gUnknown_082F1D60[8] = { + {1, 0, 0, 0, gWonderCardBgGfx1, gWonderCardBgTilemap1, gWonderCardBgPal1}, + {1, 0, 0, 1, gWonderCardBgGfx2, gWonderCardBgTilemap2, gWonderCardBgPal2}, + {1, 0, 0, 2, gWonderCardBgGfx3, gWonderCardBgTilemap3, gWonderCardBgPal3}, + {1, 0, 0, 3, gWonderCardBgGfx3, gWonderCardBgTilemap3, gWonderCardBgPal4}, + {1, 0, 0, 4, gWonderCardBgGfx3, gWonderCardBgTilemap3, gWonderCardBgPal5}, + {1, 0, 0, 5, gWonderCardBgGfx3, gWonderCardBgTilemap3, gWonderCardBgPal6}, + {1, 0, 0, 6, gWonderCardBgGfx7, gWonderCardBgTilemap7, gWonderCardBgPal7}, + {1, 0, 0, 7, gWonderCardBgGfx8, gWonderCardBgTilemap8, gWonderCardBgPal8} +}; + +bool32 sub_801BAAC(struct MEventBuffer_32E0_Sub * r5, struct MEventBuffer_3430_Sub * r6) +{ + if (r5 == NULL || r6 == NULL) + return FALSE; + gUnknown_02022C74 = AllocZeroed(sizeof(struct UnkStruct_203F3C8)); + if (gUnknown_02022C74 == NULL) + return FALSE; + gUnknown_02022C74->unk_0000 = *r5; + gUnknown_02022C74->unk_014C = *r6; + if (gUnknown_02022C74->unk_0000.unk_08_2 >= ARRAY_COUNT(gUnknown_082F1D60)) + gUnknown_02022C74->unk_0000.unk_08_2 = 0; + if (gUnknown_02022C74->unk_0000.unk_08_0 >= ARRAY_COUNT(gUnknown_082F0E18)) + gUnknown_02022C74->unk_0000.unk_08_0 = 0; + if (gUnknown_02022C74->unk_0000.unk_09 > ARRAY_COUNT(gUnknown_02022C74->unk_017D)) + gUnknown_02022C74->unk_0000.unk_09 = 0; + gUnknown_02022C74->unk_0170 = &gUnknown_082F1D60[gUnknown_02022C74->unk_0000.unk_08_2]; + return TRUE; +} + +void sub_801BB48(void) +{ + if (gUnknown_02022C74 != NULL) + { + *gUnknown_02022C74 = (struct UnkStruct_203F3C8){}; + Free(gUnknown_02022C74); + gUnknown_02022C74 = NULL; + } +} + +s32 sub_801BB74(void) +{ + if (gUnknown_02022C74 == NULL) + return -1; + switch(gUnknown_02022C74->unk_0174) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + break; + case 1: + if (UpdatePaletteFade()) + return 0; + break; + case 2: + FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(2); + decompress_and_copy_tile_data_to_vram(2, gUnknown_02022C74->unk_0170->tiles, 0, 0x008, 0); + gUnknown_02022C74->unk_0176[0] = AddWindow(&gUnknown_082F0E1C[0]); + gUnknown_02022C74->unk_0176[1] = AddWindow(&gUnknown_082F0E1C[1]); + gUnknown_02022C74->unk_0176[2] = AddWindow(&gUnknown_082F0E1C[2]); + break; + case 3: + if (free_temp_tile_data_buffers_if_possible()) + return 0; + LoadPalette(stdpal_get(1), 0x20, 0x20); + gPaletteFade.bufferTransferDisabled = TRUE; + LoadPalette(gUnknown_02022C74->unk_0170->pal, 0x10, 0x20); + LZ77UnCompWram(gUnknown_02022C74->unk_0170->map, gUnknown_02022C74->buffer_045C); + CopyRectToBgTilemapBufferRect(2, gUnknown_02022C74->buffer_045C, 0, 0, 30, 20, 0, 0, 30, 20, 1, 0x008, 0); + CopyBgTilemapBufferToVram(2); + break; + case 4: + sub_801BEF8(); + break; + case 5: + sub_801C178(0); + sub_801C178(1); + sub_801C178(2); + CopyBgTilemapBufferToVram(1); + break; + case 6: + LoadMonIconPalettes(); + break; + case 7: + ShowBg(1); + ShowBg(2); + gPaletteFade.bufferTransferDisabled = FALSE; + sub_801C4C0(); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + UpdatePaletteFade(); + break; + default: + if (UpdatePaletteFade()) + return 0; + gUnknown_02022C74->unk_0174 = 0; + return 1; + } + ++gUnknown_02022C74->unk_0174; + return 0; +} + +s32 sub_801BDA4(bool32 flag) +{ + if (gUnknown_02022C74 == NULL) + return -1; + switch (gUnknown_02022C74->unk_0174) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + break; + case 1: + if (UpdatePaletteFade()) + return 0; + break; + case 2: + FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(2); + break; + case 3: + HideBg(1); + HideBg(2); + RemoveWindow(gUnknown_02022C74->unk_0176[2]); + RemoveWindow(gUnknown_02022C74->unk_0176[1]); + RemoveWindow(gUnknown_02022C74->unk_0176[0]); + break; + case 4: + sub_801C61C(); + FreeMonIconPalettes(); + break; + case 5: + sub_80186EC(gUnknown_02022C60, flag); + CopyBgTilemapBufferToVram(0); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + break; + default: + if (UpdatePaletteFade()) + return 0; + gUnknown_02022C74->unk_0174 = 0; + return 1; + } + ++gUnknown_02022C74->unk_0174; + return 0; +} + +void sub_801BEF8(void) +{ + u16 i = 0; + u16 r6; + u16 sp0[3] = {0, 0, 0}; + + memcpy(gUnknown_02022C74->unk_018B, gUnknown_02022C74->unk_0000.unk_0A, 40); + gUnknown_02022C74->unk_018B[40] = EOS; + memcpy(gUnknown_02022C74->unk_01B4, gUnknown_02022C74->unk_0000.unk_32, 40); + gUnknown_02022C74->unk_01B4[40] = EOS; + if (gUnknown_02022C74->unk_0000.unk_04 > 999999) + gUnknown_02022C74->unk_0000.unk_04 = 999999; + ConvertIntToDecimalStringN(gUnknown_02022C74->unk_01DD, gUnknown_02022C74->unk_0000.unk_04, STR_CONV_MODE_LEFT_ALIGN, 6); + for (i = 0; i < 4; i++) + { + memcpy(gUnknown_02022C74->unk_01E4[i], gUnknown_02022C74->unk_0000.unk_5A[i], 40); + gUnknown_02022C74->unk_01E4[i][40] = EOS; + } + memcpy(gUnknown_02022C74->unk_0288, gUnknown_02022C74->unk_0000.unk_FA, 40); + gUnknown_02022C74->unk_0288[40] = EOS; + switch (gUnknown_02022C74->unk_0000.unk_08_0) + { + case 0: + memcpy(gUnknown_02022C74->unk_02B1, gUnknown_02022C74->unk_0000.unk_122, 40); + gUnknown_02022C74->unk_02B1[40] = EOS; + break; + case 1: + gUnknown_02022C74->unk_02B1[00] = EOS; + break; + case 2: + gUnknown_02022C74->unk_02B1[00] = EOS; + sp0[0] = gUnknown_02022C74->unk_014C.unk_00 < 999 ? gUnknown_02022C74->unk_014C.unk_00 : 999; + sp0[1] = gUnknown_02022C74->unk_014C.unk_02 < 999 ? gUnknown_02022C74->unk_014C.unk_02 : 999; + sp0[2] = gUnknown_02022C74->unk_014C.unk_04 < 999 ? gUnknown_02022C74->unk_014C.unk_04 : 999; + for (i = 0; i < 8; i++) + { + memset(gUnknown_02022C74->unk_02DC[i].unk_42, EOS, 4); + memset(gUnknown_02022C74->unk_02DC[i].unk_01, EOS, 41); + } + for (i = 0, r6 = 0; i < 40; i++) + { + if (gUnknown_02022C74->unk_0000.unk_122[i] != 0xF7) + { + gUnknown_02022C74->unk_02DC[gUnknown_02022C74->unk_0175].unk_01[r6] = gUnknown_02022C74->unk_0000.unk_122[i]; + r6++; + } + else + { + u8 r3 = gUnknown_02022C74->unk_0000.unk_122[i + 1]; + if (r3 > 2) + { + i += 2; + } + else + { + ConvertIntToDecimalStringN(gUnknown_02022C74->unk_02DC[gUnknown_02022C74->unk_0175].unk_42, sp0[r3], STR_CONV_MODE_LEADING_ZEROS, 3); + gUnknown_02022C74->unk_02DC[gUnknown_02022C74->unk_0175].unk_00 = gUnknown_02022C74->unk_0000.unk_122[i + 2]; + gUnknown_02022C74->unk_0175++; + if (gUnknown_02022C74->unk_0175 > 7) + break; + r6 = 0; + i += 2; + } + } + } + } +} + +void sub_801C178(u8 whichWindow) +{ + s8 sp0C = 0; + s32 windowId = gUnknown_02022C74->unk_0176[whichWindow]; + PutWindowTilemap(windowId); + FillWindowPixelBuffer(windowId, 0); + switch (whichWindow) + { + case 0: + { + s32 x; + AddTextPrinterParameterized3(windowId, 3, 0, 1, gUnknown_082F0E10[gUnknown_02022C74->unk_0170->textPal1], 0, gUnknown_02022C74->unk_018B); + x = 160 - GetStringWidth(3, gUnknown_02022C74->unk_01B4, GetFontAttribute(3, 2)); + if (x < 0) + x = 0; + AddTextPrinterParameterized3(windowId, 3, x, 17, gUnknown_082F0E10[gUnknown_02022C74->unk_0170->textPal1], 0, gUnknown_02022C74->unk_01B4); + if (gUnknown_02022C74->unk_0000.unk_04 != 0) + { + AddTextPrinterParameterized3(windowId, 1, 166, 17, gUnknown_082F0E10[gUnknown_02022C74->unk_0170->textPal1], 0, gUnknown_02022C74->unk_01DD); + } + break; + } + case 1: + for (; sp0C < 4; sp0C++) + { + AddTextPrinterParameterized3(windowId, 3, 0, 16 * sp0C + 2, gUnknown_082F0E10[gUnknown_02022C74->unk_0170->textPal2], 0, gUnknown_02022C74->unk_01E4[sp0C]); + } + break; + case 2: + AddTextPrinterParameterized3(windowId, 3, 0, gUnknown_082F0E18[gUnknown_02022C74->unk_0000.unk_08_0], gUnknown_082F0E10[gUnknown_02022C74->unk_0170->textPal3], 0, gUnknown_02022C74->unk_0288); + if (gUnknown_02022C74->unk_0000.unk_08_0 != 2) + { + AddTextPrinterParameterized3(windowId, 3, 0, 16 + gUnknown_082F0E18[gUnknown_02022C74->unk_0000.unk_08_0], gUnknown_082F0E10[gUnknown_02022C74->unk_0170->textPal3], 0, gUnknown_02022C74->unk_02B1); + } + else + { + s32 x = 0; + s32 y = gUnknown_082F0E18[gUnknown_02022C74->unk_0000.unk_08_0] + 16; + s32 spacing = GetFontAttribute(3, 2); + for (; sp0C < gUnknown_02022C74->unk_0175; sp0C++) + { + AddTextPrinterParameterized3(windowId, 3, x, y, gUnknown_082F0E10[gUnknown_02022C74->unk_0170->textPal3], 0, gUnknown_02022C74->unk_02DC[sp0C].unk_01); + if (gUnknown_02022C74->unk_02DC[sp0C].unk_42[0] != EOS) + { + x += GetStringWidth(3, gUnknown_02022C74->unk_02DC[sp0C].unk_01, spacing); + AddTextPrinterParameterized3(windowId, 3, x, y, gUnknown_082F0E10[gUnknown_02022C74->unk_0170->textPal3], 0, gUnknown_02022C74->unk_02DC[sp0C].unk_42); + x += GetStringWidth(3, gUnknown_02022C74->unk_02DC[sp0C].unk_42, spacing) + gUnknown_02022C74->unk_02DC[sp0C].unk_00; + } + } + } + break; + } + CopyWindowToVram(windowId, 3); +} + +void sub_801C4C0(void) +{ + u8 r7 = 0; + gUnknown_02022C74->unk_017C = 0xFF; + if (gUnknown_02022C74->unk_014C.unk_06 != SPECIES_NONE) + { + gUnknown_02022C74->unk_017C = sub_80D2D78(sub_80D2E84(gUnknown_02022C74->unk_014C.unk_06), SpriteCallbackDummy, 0xDC, 0x14, 0, FALSE); + gSprites[gUnknown_02022C74->unk_017C].oam.priority = 2; + } + if (gUnknown_02022C74->unk_0000.unk_09 != 0 && gUnknown_02022C74->unk_0000.unk_08_0 == 1) + { + LoadCompressedSpriteSheetUsingHeap(&gUnknown_082F1D00); + LoadSpritePalette(&gUnknown_082F1D08[gUnknown_02022C74->unk_0170->textPal4]); + for (; r7 < gUnknown_02022C74->unk_0000.unk_09; r7++) + { + gUnknown_02022C74->unk_017D[r7][0] = 0xFF; + gUnknown_02022C74->unk_017D[r7][1] = 0xFF; + gUnknown_02022C74->unk_017D[r7][0] = CreateSprite(&gUnknown_082F1D48, 0xd8 - 32 * r7, 0x90, 8); + if (gUnknown_02022C74->unk_014C.unk_08[0][r7] != 0) + { + gUnknown_02022C74->unk_017D[r7][1] = sub_80D2D78(sub_80D2E84(gUnknown_02022C74->unk_014C.unk_08[0][r7]), SpriteCallbackDummy, 0xd8 - 32 * r7, 0x88, 0, 0); + } + } + } +} + +void sub_801C61C(void) +{ + u8 r6 = 0; + if (gUnknown_02022C74->unk_017C != 0xFF) + sub_80D2EF8(&gSprites[gUnknown_02022C74->unk_017C]); + if (gUnknown_02022C74->unk_0000.unk_09 != 0 && gUnknown_02022C74->unk_0000.unk_08_0 == 1) + { + for (; r6 < gUnknown_02022C74->unk_0000.unk_09; r6++) + { + if (gUnknown_02022C74->unk_017D[r6][0] != 0xFF) + { + DestroySprite(&gSprites[gUnknown_02022C74->unk_017D[r6][0]]); + } + if (gUnknown_02022C74->unk_017D[r6][1] != 0xFF) + { + sub_80D2EF8(&gSprites[gUnknown_02022C74->unk_017D[r6][1]]); + } + } + FreeSpriteTilesByTag(0x8000); + FreeSpritePaletteByTag(0x8000); + } +} + +struct UnkStruct_203F3CC +{ + /*0000*/ struct MEventBuffer_3120_Sub unk_0000; + /*01bc*/ const struct UnkStruct_8467FB8 * unk_01BC; + /*01c0*/ u8 unk_01C0_0:1; + u8 unk_01C0_1:7; + /*01c1*/ u8 unk_01C1; + /*01c2*/ u8 unk_01C2_0:1; + u8 unk_01C2_1:7; + /*01c3*/ u8 unk_01C3_0:1; + u8 unk_01C3_1:7; + /*01c4*/ u16 unk_01C4; + /*01c6*/ u16 unk_01C6; + /*01c8*/ u16 unk_01C8[2]; + /*01cc*/ u8 filler_01CC[2]; + /*01ce*/ u8 unk_01CE[41]; + /*01f7*/ u8 unk_01F7[10][41]; + /*0394*/ struct ScrollArrowsTemplate unk_0394; + /*03a4*/ u8 buffer_03A4[0x1000]; +}; + +EWRAM_DATA struct UnkStruct_203F3CC * gUnknown_02022C78 = NULL; + +void sub_801CDCC(void); +void sub_801CE7C(void); +void sub_801CFA4(void); + +const u8 gUnknown_082F1DE0[][3] = { + {0, 2, 3}, + {0, 1, 2} +}; +const struct WindowTemplate gUnknown_082F1DE8[] = { + {0, 1, 0, 28, 3, 2, 0x2AC}, + {2, 1, 3, 28, 20, 2, 0x07C} +}; +const struct ScrollArrowsTemplate gUnknown_082F1DF8 = { + 0x02, 0xe8, 0x18, 0x03, 0xe8, 0x98, + 0x0000, 0x0002, 0x1000, 0x1000, 0x0 +}; +const u16 gWonderNewsPal1[] = INCBIN_U16("graphics/wonder_transfers/wonder_news_1.gbapal"); +const u16 gWonderNewsPal7[] = INCBIN_U16("graphics/wonder_transfers/wonder_news_7.gbapal"); +const u16 gWonderNewsPal8[] = INCBIN_U16("graphics/wonder_transfers/wonder_news_8.gbapal"); +const u32 gWonderNewsGfx1[] = INCBIN_U32("graphics/wonder_transfers/wonder_news_1.4bpp.lz"); +const u32 gWonderNewsTilemap1[] = INCBIN_U32("graphics/wonder_transfers/wonder_news_1.bin.lz"); +const u32 gWonderNewsGfx2[] = INCBIN_U32("graphics/wonder_transfers/wonder_news_2.4bpp.lz"); +const u32 gWonderNewsTilemap2[] = INCBIN_U32("graphics/wonder_transfers/wonder_news_2.bin.lz"); +const u32 gWonderNewsGfx3[] = INCBIN_U32("graphics/wonder_transfers/wonder_news_3.4bpp.lz"); +const u32 gWonderNewsTilemap3[] = INCBIN_U32("graphics/wonder_transfers/wonder_news_3.bin.lz"); +const u32 gWonderNewsGfx7[] = INCBIN_U32("graphics/wonder_transfers/wonder_news_7.4bpp.lz"); +const u32 gWonderNewsTilemap7[] = INCBIN_U32("graphics/wonder_transfers/wonder_news_7.bin.lz"); +const u32 gWonderNewsGfx8[] = INCBIN_U32("graphics/wonder_transfers/wonder_news_8.4bpp.lz"); +const u32 gWonderNewsTilemap8[] = INCBIN_U32("graphics/wonder_transfers/wonder_news_8.bin.lz"); + +/* +const u16 gWonderNewsPal1[] = INCBIN_U16("data/graphics/mevent/pal_468060.gbapal"); +const u16 gWonderNewsPal7[] = INCBIN_U16("data/graphics/mevent/pal_468080.gbapal"); +const u16 gWonderNewsPal8[] = INCBIN_U16("data/graphics/mevent/pal_4680A0.gbapal"); +const u32 gWonderNewsGfx1[] = INCBIN_U32("data/graphics/mevent/gfx_4680C0.4bpp.lz"); +const u32 gWonderNewsTilemap1[] = INCBIN_U32("data/graphics/mevent/tilemap_468140.bin.lz"); +const u32 gWonderNewsGfx2[] = INCBIN_U32("data/graphics/mevent/gfx_46821C.4bpp.lz"); +const u32 gWonderNewsTilemap2[] = INCBIN_U32("data/graphics/mevent/tilemap_46824C.bin.lz"); +const u32 gWonderNewsGfx3[] = INCBIN_U32("data/graphics/mevent/gfx_46830C.4bpp.lz"); +const u32 gWonderNewsTilemap3[] = INCBIN_U32("data/graphics/mevent/tilemap_46837C.bin.lz"); +const u32 gWonderNewsGfx7[] = INCBIN_U32("data/graphics/mevent/gfx_468448.4bpp.lz"); +const u32 gWonderNewsTilemap7[] = INCBIN_U32("data/graphics/mevent/tilemap_4684D8.bin.lz"); +const u32 gWonderNewsGfx8[] = INCBIN_U32("data/graphics/mevent/gfx_4685B4.4bpp.lz"); +const u32 gWonderNewsTilemap8[] = INCBIN_U32("data/graphics/mevent/tilemap_468644.bin.lz"); +*/ + +const struct UnkStruct_8467FB8 gUnknown_082F24C8[] = { + {1, 0, 0, 0, gWonderNewsGfx1, gWonderNewsTilemap1, gWonderNewsPal1}, + {1, 0, 0, 0, gWonderNewsGfx2, gWonderNewsTilemap2, gWonderCardBgPal2}, + {1, 0, 0, 0, gWonderNewsGfx3, gWonderNewsTilemap3, gWonderCardBgPal3}, + {1, 0, 0, 0, gWonderNewsGfx3, gWonderNewsTilemap3, gWonderCardBgPal4}, + {1, 0, 0, 0, gWonderNewsGfx3, gWonderNewsTilemap3, gWonderCardBgPal5}, + {1, 0, 0, 0, gWonderNewsGfx3, gWonderNewsTilemap3, gWonderCardBgPal6}, + {1, 0, 0, 0, gWonderNewsGfx7, gWonderNewsTilemap7, gWonderNewsPal7}, + {1, 0, 0, 0, gWonderNewsGfx8, gWonderNewsTilemap8, gWonderNewsPal8} +}; + +bool32 sub_801C6C8(const struct MEventBuffer_3120_Sub * a0) +{ + if (a0 == NULL) + return FALSE; + gUnknown_02022C78 = AllocZeroed(sizeof(struct UnkStruct_203F3CC)); + if (gUnknown_02022C78 == NULL) + return FALSE; + gUnknown_02022C78->unk_0000 = *a0; + if (gUnknown_02022C78->unk_0000.unk_03 >= ARRAY_COUNT(gUnknown_082F24C8)) + gUnknown_02022C78->unk_0000.unk_03 = 0; + gUnknown_02022C78->unk_01BC = &gUnknown_082F24C8[gUnknown_02022C78->unk_0000.unk_03]; + gUnknown_02022C78->unk_01C1 = 0xFF; + return TRUE; +} + +void sub_801C72C(void) +{ + if (gUnknown_02022C78 != NULL) + { + *gUnknown_02022C78 = (struct UnkStruct_203F3CC){}; + Free(gUnknown_02022C78); + gUnknown_02022C78 = NULL; + } +} + +s32 sub_801C758(void) +{ + if (gUnknown_02022C78 == NULL) + return -1; + + switch (gUnknown_02022C78->unk_01C0_1) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + break; + case 1: + if (UpdatePaletteFade()) + return 0; + ChangeBgY(0, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgY(3, 0, 0); + SetGpuReg(REG_OFFSET_WIN0H, 0xF0); + SetGpuReg(REG_OFFSET_WIN0V, 0x1A98); + SetGpuReg(REG_OFFSET_WININ, 0x1F); + SetGpuReg(REG_OFFSET_WINOUT, 0x1B); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + break; + case 2: + FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(3, 0x000, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(2); + CopyBgTilemapBufferToVram(3); + decompress_and_copy_tile_data_to_vram(3, gUnknown_02022C78->unk_01BC->tiles, 0, 8, 0); + gUnknown_02022C78->unk_01C8[0] = AddWindow(&gUnknown_082F1DE8[0]); + gUnknown_02022C78->unk_01C8[1] = AddWindow(&gUnknown_082F1DE8[1]); + break; + case 3: + if (free_temp_tile_data_buffers_if_possible()) + return 0; + LoadPalette(stdpal_get(1), 0x20, 0x20); + gPaletteFade.bufferTransferDisabled = TRUE; + LoadPalette(gUnknown_02022C78->unk_01BC->pal, 0x10, 0x20); + LZ77UnCompWram(gUnknown_02022C78->unk_01BC->map, gUnknown_02022C78->buffer_03A4); + CopyRectToBgTilemapBufferRect(1, gUnknown_02022C78->buffer_03A4, 0, 0, 30, 3, 0, 0, 30, 3, 1, 8, 0); + CopyRectToBgTilemapBufferRect(3, gUnknown_02022C78->buffer_03A4, 0, 3, 30, 23, 0, 3, 30, 23, 1, 8, 0); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(3); + break; + case 4: + sub_801CDCC(); + break; + case 5: + sub_801CE7C(); + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(2); + break; + case 6: + ShowBg(1); + ShowBg(2); + ShowBg(3); + gPaletteFade.bufferTransferDisabled = FALSE; + gUnknown_02022C78->unk_01C1 = AddScrollIndicatorArrowPair(&gUnknown_02022C78->unk_0394, &gUnknown_02022C78->unk_01C6); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + UpdatePaletteFade(); + break; + default: + if (UpdatePaletteFade()) + return 0; + gUnknown_02022C78->unk_01C0_1 = 0; + return 1; + } + + ++gUnknown_02022C78->unk_01C0_1; + return 0; +} + +s32 sub_801CA50(bool32 flag) +{ + if (gUnknown_02022C78 == NULL) + return -1; + switch (gUnknown_02022C78->unk_01C0_1) + { + case 0: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + break; + case 1: + if (UpdatePaletteFade()) + return 0; + ChangeBgY(2, 0, 0); + SetGpuReg(REG_OFFSET_WIN0H, 0); + SetGpuReg(REG_OFFSET_WIN0V, 0); + SetGpuReg(REG_OFFSET_WININ, 0); + SetGpuReg(REG_OFFSET_WINOUT, 0); + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + break; + case 2: + FillBgTilemapBufferRect_Palette0(0, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(1, 0x000, 0, 0, 30, 20); + FillBgTilemapBufferRect_Palette0(2, 0x000, 0, 0, 30, 24); + FillBgTilemapBufferRect_Palette0(3, 0x000, 0, 0, 30, 24); + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(2); + CopyBgTilemapBufferToVram(3); + break; + case 3: + HideBg(1); + HideBg(2); + RemoveWindow(gUnknown_02022C78->unk_01C8[1]); + RemoveWindow(gUnknown_02022C78->unk_01C8[0]); + break; + case 4: + ChangeBgY(2, 0, 0); + ChangeBgY(3, 0, 0); + if (gUnknown_02022C78->unk_01C1 != 0xFF) + { + RemoveScrollIndicatorArrowPair(gUnknown_02022C78->unk_01C1); + gUnknown_02022C78->unk_01C1 = 0xFF; + } + break; + case 5: + sub_80186EC(gUnknown_02022C60, flag); + sub_8018798(3); + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(3); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + break; + default: + if (UpdatePaletteFade()) + return 0; + gUnknown_02022C78->unk_01C0_1 = 0; + return 1; + } + ++gUnknown_02022C78->unk_01C0_1; + return 0; +} + +void sub_801CC38(void) +{ + if (!gUnknown_02022C78->unk_01C0_0 && gUnknown_02022C78->unk_01C1 != 0xFF) + { + RemoveScrollIndicatorArrowPair(gUnknown_02022C78->unk_01C1); + gUnknown_02022C78->unk_01C1 = 0xFF; + gUnknown_02022C78->unk_01C0_0 = TRUE; + } +} + + +void sub_801CC80(void) +{ + if (gUnknown_02022C78->unk_01C0_0) + { + gUnknown_02022C78->unk_01C1 = AddScrollIndicatorArrowPair(&gUnknown_02022C78->unk_0394, &gUnknown_02022C78->unk_01C6); + gUnknown_02022C78->unk_01C0_0 = FALSE; + } +} + +u8 sub_801CCD0(u16 input) +{ + if (gUnknown_02022C78->unk_01C2_0) + { + sub_801CFA4(); + return 0xFF; + } + switch (input) + { + case A_BUTTON: + return 0; + case B_BUTTON: + return 1; + case DPAD_UP: + if (gUnknown_02022C78->unk_01C6 == 0) + return 0xFF; + if (gUnknown_02022C78->unk_01C0_0) + return 0xFF; + gUnknown_02022C78->unk_01C3_0 = FALSE; + break; + case DPAD_DOWN: + if (gUnknown_02022C78->unk_01C6 == gUnknown_02022C78->unk_01C4) + return 0xFF; + if (gUnknown_02022C78->unk_01C0_0) + return 0xFF; + gUnknown_02022C78->unk_01C3_0 = TRUE; + break; + default: + return 0xFF; + } + gUnknown_02022C78->unk_01C2_0 = TRUE; + gUnknown_02022C78->unk_01C2_1 = 2; + gUnknown_02022C78->unk_01C3_1 = 0; + if (gUnknown_02022C78->unk_01C3_0 == FALSE) + return 2; + else + return 3; +} + +void sub_801CDCC(void) +{ + u8 i = 0; + memcpy(gUnknown_02022C78->unk_01CE, gUnknown_02022C78->unk_0000.unk_04, 40); + gUnknown_02022C78->unk_01CE[40] = EOS; + for (; i < 10; ++i) + { + memcpy(gUnknown_02022C78->unk_01F7[i], gUnknown_02022C78->unk_0000.unk_2C[i], 40); + gUnknown_02022C78->unk_01F7[i][40] = EOS; + if (i > 7 && gUnknown_02022C78->unk_01F7[i][0] != EOS) + ++gUnknown_02022C78->unk_01C4; + } + gUnknown_02022C78->unk_0394 = gUnknown_082F1DF8; + gUnknown_02022C78->unk_0394.fullyDownThreshold = gUnknown_02022C78->unk_01C4; +} + +void sub_801CE7C(void) +{ + u8 i = 0; + s32 x; + PutWindowTilemap(gUnknown_02022C78->unk_01C8[0]); + PutWindowTilemap(gUnknown_02022C78->unk_01C8[1]); + FillWindowPixelBuffer(gUnknown_02022C78->unk_01C8[0], 0); + FillWindowPixelBuffer(gUnknown_02022C78->unk_01C8[1], 0); + x = (0xe0 - GetStringWidth(3, gUnknown_02022C78->unk_01CE, GetFontAttribute(3, 2))) / 2; + if (x < 0) + x = 0; + AddTextPrinterParameterized3(gUnknown_02022C78->unk_01C8[0], 3, x, 6, gUnknown_082F1DE0[gUnknown_02022C78->unk_01BC->textPal1], 0, gUnknown_02022C78->unk_01CE); + for (; i < 10; ++i) + { + AddTextPrinterParameterized3(gUnknown_02022C78->unk_01C8[1], 3, 0, 16 * i + 2, gUnknown_082F1DE0[gUnknown_02022C78->unk_01BC->textPal2], 0, gUnknown_02022C78->unk_01F7[i]); + } + CopyWindowToVram(gUnknown_02022C78->unk_01C8[0], 3); + CopyWindowToVram(gUnknown_02022C78->unk_01C8[1], 3); +} + +void sub_801CFA4(void) +{ + u16 r4 = gUnknown_02022C78->unk_01C2_1; + r4 <<= 8; + if (gUnknown_02022C78->unk_01C3_0) + { + ChangeBgY(2, r4, 1); + ChangeBgY(3, r4, 1); + } + else + { + ChangeBgY(2, r4, 2); + ChangeBgY(3, r4, 2); + } + gUnknown_02022C78->unk_01C3_1 += gUnknown_02022C78->unk_01C2_1; + if (gUnknown_02022C78->unk_01C3_1 > 15) + { + if (gUnknown_02022C78->unk_01C3_0) + ++gUnknown_02022C78->unk_01C6; + else + --gUnknown_02022C78->unk_01C6; + gUnknown_02022C78->unk_01C2_0 = FALSE; + gUnknown_02022C78->unk_01C3_1 = 0; + } +} -- cgit v1.2.3 From 7211f996a5ebf37ac7e2feffb0fd6c270d810513 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 27 Mar 2019 08:50:39 -0400 Subject: Address review comments, 1 Use field names in WindowTemplate instances Remove a leftover comment block --- src/mevent_801BAAC.c | 63 ++++++++++++++++++++++++++++++++++------------------ 1 file changed, 42 insertions(+), 21 deletions(-) (limited to 'src') diff --git a/src/mevent_801BAAC.c b/src/mevent_801BAAC.c index 0514f8e54..857ca3fde 100644 --- a/src/mevent_801BAAC.c +++ b/src/mevent_801BAAC.c @@ -67,9 +67,31 @@ const u8 gUnknown_082F0E10[][3] = { }; const u8 ALIGNED(4) gUnknown_082F0E18[3] = {7, 4, 7}; const struct WindowTemplate gUnknown_082F0E1C[] = { - {0x01, 0x01, 0x01, 0x19, 0x04, 0x02, 0x029c}, - {0x01, 0x01, 0x06, 0x1c, 0x08, 0x02, 0x01bc}, - {0x01, 0x01, 0x0e, 0x1c, 0x05, 0x02, 0x0130} + { + .bg = 1, + .tilemapLeft = 1, + .tilemapTop = 1, + .width = 25, + .height = 4, + .paletteNum = 2, + .baseBlock = 0x029c + }, { + .bg = 1, + .tilemapLeft = 1, + .tilemapTop = 6, + .width = 28, + .height = 8, + .paletteNum = 2, + .baseBlock = 0x01bc + }, { + .bg = 1, + .tilemapLeft = 1, + .tilemapTop = 14, + .width = 28, + .height = 5, + .paletteNum = 2, + .baseBlock = 0x0130 + } }; const u16 gWonderCardBgPal1[] = INCBIN_U16("graphics/wonder_transfers/wonder_card_1.gbapal"); @@ -472,8 +494,23 @@ const u8 gUnknown_082F1DE0[][3] = { {0, 1, 2} }; const struct WindowTemplate gUnknown_082F1DE8[] = { - {0, 1, 0, 28, 3, 2, 0x2AC}, - {2, 1, 3, 28, 20, 2, 0x07C} + { + .bg = 0, + .tilemapLeft = 1, + .tilemapTop = 0, + .width = 28, + .height = 3, + .paletteNum = 2, + .baseBlock = 0x2AC + }, { + .bg = 2, + .tilemapLeft = 1, + .tilemapTop = 3, + .width = 28, + .height = 20, + .paletteNum = 2, + .baseBlock = 0x07C + } }; const struct ScrollArrowsTemplate gUnknown_082F1DF8 = { 0x02, 0xe8, 0x18, 0x03, 0xe8, 0x98, @@ -493,22 +530,6 @@ const u32 gWonderNewsTilemap7[] = INCBIN_U32("graphics/wonder_transfers/wonder_n const u32 gWonderNewsGfx8[] = INCBIN_U32("graphics/wonder_transfers/wonder_news_8.4bpp.lz"); const u32 gWonderNewsTilemap8[] = INCBIN_U32("graphics/wonder_transfers/wonder_news_8.bin.lz"); -/* -const u16 gWonderNewsPal1[] = INCBIN_U16("data/graphics/mevent/pal_468060.gbapal"); -const u16 gWonderNewsPal7[] = INCBIN_U16("data/graphics/mevent/pal_468080.gbapal"); -const u16 gWonderNewsPal8[] = INCBIN_U16("data/graphics/mevent/pal_4680A0.gbapal"); -const u32 gWonderNewsGfx1[] = INCBIN_U32("data/graphics/mevent/gfx_4680C0.4bpp.lz"); -const u32 gWonderNewsTilemap1[] = INCBIN_U32("data/graphics/mevent/tilemap_468140.bin.lz"); -const u32 gWonderNewsGfx2[] = INCBIN_U32("data/graphics/mevent/gfx_46821C.4bpp.lz"); -const u32 gWonderNewsTilemap2[] = INCBIN_U32("data/graphics/mevent/tilemap_46824C.bin.lz"); -const u32 gWonderNewsGfx3[] = INCBIN_U32("data/graphics/mevent/gfx_46830C.4bpp.lz"); -const u32 gWonderNewsTilemap3[] = INCBIN_U32("data/graphics/mevent/tilemap_46837C.bin.lz"); -const u32 gWonderNewsGfx7[] = INCBIN_U32("data/graphics/mevent/gfx_468448.4bpp.lz"); -const u32 gWonderNewsTilemap7[] = INCBIN_U32("data/graphics/mevent/tilemap_4684D8.bin.lz"); -const u32 gWonderNewsGfx8[] = INCBIN_U32("data/graphics/mevent/gfx_4685B4.4bpp.lz"); -const u32 gWonderNewsTilemap8[] = INCBIN_U32("data/graphics/mevent/tilemap_468644.bin.lz"); -*/ - const struct UnkStruct_8467FB8 gUnknown_082F24C8[] = { {1, 0, 0, 0, gWonderNewsGfx1, gWonderNewsTilemap1, gWonderNewsPal1}, {1, 0, 0, 0, gWonderNewsGfx2, gWonderNewsTilemap2, gWonderCardBgPal2}, -- cgit v1.2.3 From 9538855d9a532c9839b962c755640829d9432cea Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 28 Mar 2019 08:42:35 -0400 Subject: Through sub_80173D4 --- src/union_room.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src') diff --git a/src/union_room.c b/src/union_room.c index 90631dab4..f153801a2 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -3934,3 +3934,31 @@ s32 sub_80172A0(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTempl "\tbx r1"); } #endif + +void sub_80173B0(void) +{ + FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0); + CopyBgTilemapBufferToVram(0); +} + +void sub_80173D4(void) +{ + EnableBothScriptContexts(); +} + +/* +void sub_80173E0(u8 windowId, u8 arg1, const u8 *str, u8 arg3, u8 arg4, u8 arg5) +{ + struct TextPrinterTemplate sp0 = { + .currentChar = str, + .windowId = windowId, + .fontId = arg1, + .x = arg3, + .y = arg4, + .currentX = arg3, + .currentY = arg4 + }; + + // to be continued +} +*/ -- cgit v1.2.3 From 963dcfb84d0877eb33edc2f41e18cd8076f95739 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 28 Mar 2019 09:59:08 -0400 Subject: sub_80173E0 --- src/union_room.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 65 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/union_room.c b/src/union_room.c index f153801a2..7a45724e5 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -3946,19 +3946,72 @@ void sub_80173D4(void) EnableBothScriptContexts(); } -/* void sub_80173E0(u8 windowId, u8 arg1, const u8 *str, u8 arg3, u8 arg4, u8 arg5) { - struct TextPrinterTemplate sp0 = { - .currentChar = str, - .windowId = windowId, - .fontId = arg1, - .x = arg3, - .y = arg4, - .currentX = arg3, - .currentY = arg4 - }; + struct TextPrinterTemplate sp0; - // to be continued + sp0.currentChar = str; + sp0.windowId = windowId; + sp0.fontId = arg1; + sp0.x = arg3; + sp0.y = arg4; + sp0.currentX = arg3; + sp0.currentY = arg4; + sp0.unk = 0; + + gTextFlags.useAlternateDownArrow = FALSE; + switch (arg5) + { + case 0: + sp0.letterSpacing = 0; + sp0.lineSpacing = 0; + sp0.fgColor = 2; + sp0.bgColor = 1; + sp0.shadowColor = 3; + break; + case 1: + sp0.letterSpacing = 0; + sp0.lineSpacing = 0; + sp0.fgColor = 4; + sp0.bgColor = 1; + sp0.shadowColor = 5; + break; + case 2: + sp0.letterSpacing = 0; + sp0.lineSpacing = 0; + sp0.fgColor = 6; + sp0.bgColor = 1; + sp0.shadowColor = 7; + break; + case 3: + sp0.letterSpacing = 0; + sp0.lineSpacing = 0; + sp0.fgColor = 1; + sp0.bgColor = 1; + sp0.shadowColor = 3; + break; + case 4: + sp0.letterSpacing = 0; + sp0.lineSpacing = 0; + sp0.fgColor = 1; + sp0.bgColor = 2; + sp0.shadowColor = 3; + break; + case 5: + sp0.letterSpacing = 0; + sp0.lineSpacing = 0; + sp0.fgColor = 7; + sp0.bgColor = 15; + sp0.shadowColor = 9; + break; + case 6: + sp0.letterSpacing = 0; + sp0.lineSpacing = 0; + sp0.fgColor = 14; + sp0.bgColor = 15; + sp0.shadowColor = 9; + break; + } + + AddTextPrinter(&sp0, 0xFF, NULL); } -*/ -- cgit v1.2.3 From 86f7691146ab6fa7aba6e077930b5677bb75b701 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 28 Mar 2019 10:24:31 -0400 Subject: Through sub_80176E4 --- src/union_room.c | 106 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 103 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/union_room.c b/src/union_room.c index 7a45724e5..620a13e58 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -228,7 +228,7 @@ u32 sub_8013B8C(struct UnkStruct_Group *arg0, s32 id); void sub_8013BD8(struct UnkStruct_Group *arg0, s32 id); void sub_80173D4(void); void sub_80177B8(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id); -bool32 sub_8017678(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1); +bool32 sub_8017678(struct UnkStruct_Shared *arg0, struct UnkStruct_Shared *arg1); u32 sub_8018120(struct TradeUnkStruct *arg0, u8 multiplayerId); void sub_801807C(struct TradeUnkStruct *arg0); void sub_801AC54(void); @@ -1456,7 +1456,7 @@ u8 sub_8013E44(void) { if (data->field_0->arr[i].field_1A_0 == 1) { - if (sub_8017678(&data->field_0->arr[i], &data->field_4->arr[id])) + if (sub_8017678(&data->field_0->arr[i].unk, &data->field_4->arr[id].unk0)) { data->field_0->arr[i].unk = data->field_4->arr[id].unk0; data->field_0->arr[i].field_1B = 0x40; @@ -3423,7 +3423,7 @@ u8 sub_8016B00(void) { if (structPtr->field_0->arr[j].field_1A_0 == 1) { - if (sub_8017678(&structPtr->field_0->arr[j], &structPtr->field_4->arr[i])) + if (sub_8017678(&structPtr->field_0->arr[j].unk, &structPtr->field_4->arr[i].unk0)) { structPtr->field_0->arr[j].unk = structPtr->field_4->arr[i].unk0; structPtr->field_0->arr[j].field_1B = 0x40; @@ -4015,3 +4015,103 @@ void sub_80173E0(u8 windowId, u8 arg1, const u8 *str, u8 arg3, u8 arg4, u8 arg5) AddTextPrinter(&sp0, 0xFF, NULL); } + +void sub_8017580(struct UnkStruct_x20 *arg0, u8 count) +{ + s32 i; + + for (i = 0; i < count; i++) + { + arg0[i].unk = gUnknown_082F045C; + arg0[i].field_18 = 0xFF; + arg0[i].field_1A_0 = 0; + arg0[i].field_1A_1 = 0; + arg0[i].field_1B = 0; + } +} + +void sub_80175EC(struct UnkStruct_Main4 *arg0, u8 count) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + arg0->arr[i].unk0 = gUnknown_082F045C; + arg0->arr[i].unk18 = 0; + } +} + +bool8 sub_8017630(struct UnkStruct_Shared* arg0, const struct UnkStruct_Shared* arg1) +{ + s32 i; + + for (i = 0; i < 2; i++) + { + if (arg0->field_0.unk_00.playerTrainerId[i] != arg1->field_0.unk_00.playerTrainerId[i]) + { + return TRUE; + } + } + + for (i = 0; i < 8; i++) + { + if (arg0->playerName[i] != arg1->playerName[i]) + { + return TRUE; + } + } + + return FALSE; +} + +bool32 sub_8017678(struct UnkStruct_Shared *arg0, struct UnkStruct_Shared *arg1) +{ + s32 i; + + if (arg0->field_0.unk_0a_0 != arg1->field_0.unk_0a_0) + { + return TRUE; + } + + if (arg0->field_0.unk_0a_7 != arg1->field_0.unk_0a_7) + { + return TRUE; + } + + for (i = 0; i < 4; i++) + { + if (arg0->field_0.unk_04[i] != arg1->field_0.unk_04[i]) + { + return TRUE; + } + } + + if (arg0->field_0.species != arg1->field_0.species) + { + return TRUE; + } + + if (arg0->field_0.type != arg1->field_0.type) + { + return TRUE; + } + + return FALSE; +} + +u32 sub_80176E4(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1) +{ + u8 result = 0xFF; + s32 i; + + for (i = 0; i < 4; i++) + { + if (arg1[i].unk18 && !sub_8017630(&arg0->unk, &arg1[i].unk0)) + { + result = i; + arg1[i].unk18 = FALSE; + } + } + + return result; +} -- cgit v1.2.3 From 030fb4d89881082eaa2c54a4da150e0abf3f6a8a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 28 Mar 2019 11:24:50 -0400 Subject: through sub_80179AC --- src/union_room.c | 115 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 110 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/union_room.c b/src/union_room.c index 620a13e58..4c9cb3886 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -35,6 +35,7 @@ #include "field_screen_effect.h" #include "script_pokemon_util_80F87D8.h" #include "international_string_util.h" +#include "field_player_avatar.h" #include "mevent.h" struct UnkStruct_Shared @@ -222,7 +223,7 @@ void sub_80149C4(void); u8 sub_80132D4(struct UnkStruct_Main0 *arg0); void sub_80178A0(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id); u32 sub_80176E4(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1); -u8 sub_8017734(struct UnkStruct_x20 *arg0, struct UnkStruct_Shared *arg1, u8 arg2); +u8 sub_8017734(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1, u8 arg2); u8 sub_8013E44(void); u32 sub_8013B8C(struct UnkStruct_Group *arg0, s32 id); void sub_8013BD8(struct UnkStruct_Group *arg0, s32 id); @@ -267,7 +268,7 @@ s32 sub_8017178(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate *winTe s32 sub_80172A0(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate, struct UnkStruct_Main0 *arg6); s32 sub_8017CB0(struct UnkStruct_Main0 * arg); bool32 sub_8018024(void); -u32 sub_8017984(u32 arg0); +u32 sub_8017984(s32 arg0); void sub_8018220(u8 *unused, struct UnkStruct_URoom *arg1, bool8 arg2); void sub_8017D9C(u8 *dst, u32 arg1, u32 playerGender); u32 sub_80179AC(struct UnkStruct_x20 *arg0); @@ -380,6 +381,8 @@ extern const struct UnkStruct_Shared gUnknown_082F045C; extern const u8 *const gUnknown_082F04D8[22]; +extern const u8 gText_Colon[]; + // code void nullsub_89(void) { @@ -973,7 +976,7 @@ u8 sub_80132D4(struct UnkStruct_Main0 *arg0) } for (id = 0; id < 4; id++) - sub_8017734(data->field_0->arr, &data->field_4->arr[id].unk0, 5); + sub_8017734(data->field_0->arr, &data->field_4->arr[id], 5); if (ret != 2) { @@ -1498,7 +1501,7 @@ u8 sub_8013E44(void) for (id = 0; id < 4; id++) { - if (sub_8017734(data->field_0->arr, &data->field_4->arr[id].unk0, 16) != 0xFF) + if (sub_8017734(data->field_0->arr, &data->field_4->arr[id], 16) != 0xFF) ret = 1; } @@ -3465,7 +3468,7 @@ u8 sub_8016B00(void) } for (i = 0; i < 4; i++) { - if (sub_8017734(&structPtr->field_0->arr[0], &structPtr->field_4->arr[i].unk0, 8) != 0xFF) + if (sub_8017734(&structPtr->field_0->arr[0], &structPtr->field_4->arr[i], 8) != 0xFF) r7 = 1; } @@ -4115,3 +4118,105 @@ u32 sub_80176E4(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1) return result; } + +u8 sub_8017734(struct UnkStruct_x20 *arg0, struct UnkStruct_x1C *arg1, u8 arg2) +{ + s32 i; + + if (arg1->unk18) + { + for (i = 0; i < arg2; i++) + { + if (arg0[i].field_1A_0 == 0) + { + arg0[i].unk = arg1->unk0; + arg0[i].field_18 = 0; + arg0[i].field_1A_0 = 1; + arg0[i].field_1B = 64; + arg1->unk18 = FALSE; + return i; + } + } + } + + return 0xFF; +} + +void sub_80177B8(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id) +{ + u8 r2; + u8 sp0[6]; + + ConvertIntToDecimalStringN(gStringVar4, id + 1, STR_CONV_MODE_LEADING_ZEROS, 2); + StringAppend(gStringVar4, gText_Colon); + sub_80173E0(arg0, 1, gStringVar4, arg1, arg2, 0); + arg1 += 18; + r2 = arg3->unk.field_0.unk_0a_0; + if (arg3->field_1A_0 == 1 && !(r2 & 0x40)) + { + sub_8018404(gStringVar4, arg3); + sub_80173E0(arg0, 1, gStringVar4, arg1, arg2, arg4); + ConvertIntToDecimalStringN(sp0, arg3->unk.field_0.unk_00.playerTrainerId[0] | (arg3->unk.field_0.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); + StringCopy(gStringVar4, gText_UnkCtrlCodeF907); + StringAppend(gStringVar4, sp0); + sub_80173E0(arg0, 1, gStringVar4, GetStringRightAlignXOffset(1, gStringVar4, 0x88), arg2, arg4); + } +} + +void sub_80178A0(u8 arg0, u8 arg1, u8 arg2, struct UnkStruct_x20 *arg3, u8 arg4, u8 id) +{ + u8 sp0[6]; + + if (arg3->field_1A_0 == 1) + { + sub_8018404(gStringVar4, arg3); + sub_80173E0(arg0, 1, gStringVar4, arg1, arg2, arg4); + ConvertIntToDecimalStringN(sp0, arg3->unk.field_0.unk_00.playerTrainerId[0] | (arg3->unk.field_0.unk_00.playerTrainerId[1] << 8), STR_CONV_MODE_LEADING_ZEROS, 5); + StringCopy(gStringVar4, gText_UnkCtrlCodeF907); + StringAppend(gStringVar4, sp0); + sub_80173E0(arg0, 1, gStringVar4, GetStringRightAlignXOffset(1, gStringVar4, 0x68), arg2, arg4); + } +} + +bool32 sub_8017940(void) +{ + s16 x, y; + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + if (x != 9) + { + return FALSE; + } + if (y != 8) + { + return FALSE; + } + if (gPlayerAvatar.tileTransitionState == 2 || gPlayerAvatar.tileTransitionState == 0) + { + return TRUE; + } + + return FALSE; +} + +u32 sub_8017984(s32 arg0) +{ + switch (arg0) + { + case 5: + return 1; + case 4: + return 2; + case 8: + return 3; + case 3: + default: + return 0; + } +} + +u32 sub_80179AC(struct UnkStruct_x20 *arg0) +{ + u8 sp0[30]; + sub_8018404(sp0, arg0); + return sub_800E540(ReadAsU16(arg0->unk.field_0.unk_00.playerTrainerId), sp0); +} -- cgit v1.2.3 From 8b8cc7a475d49cf590edbeb5d9763b5dd5245831 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Thu, 28 Mar 2019 18:40:49 -0500 Subject: Decompile union_room_chat.s through sub_801FF08 --- src/union_room_chat.c | 625 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 617 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/union_room_chat.c b/src/union_room_chat.c index cc482d929..df35d164c 100755 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -16,6 +16,8 @@ #include "string_util.h" #include "strings.h" #include "task.h" +#include "text.h" +#include "text_window.h" #include "window.h" #include "constants/rgb.h" #include "constants/songs.h" @@ -52,7 +54,7 @@ struct UnionRoomChat struct UnionRoomChat2_Unk0 { - int (* unk0)(u8 *); + bool32 (* unk0)(u8 *); u8 unk4; u8 unk5; }; @@ -62,11 +64,17 @@ struct UnionRoomChat2 struct UnionRoomChat2_Unk0 unk0[3]; u16 unk18; u16 unk1A; - u8 filler1C[0x2]; + u16 unk1C; u16 unk1E; u8 filler20[0x2148]; }; +struct Unk82F2C98 +{ + u16 unk0; + bool32 (* unk4)(u8 *); +}; + static void sub_801DDD0(struct UnionRoomChat *); static void c2_081284E0(void); static void sub_801DF20(void); @@ -105,15 +113,48 @@ static bool8 sub_801F4D0(void); static bool32 sub_801F534(void); static void sub_801F544(void); static void sub_801F5B8(void); -void sub_801F5EC(u16, u8); -bool8 sub_801F644(u8); -s8 sub_801FF08(void); +static void sub_801F5EC(u16, u8); +static bool8 sub_801F644(u8); +static s8 sub_801FF08(void); bool32 sub_8020890(void); void sub_8020770(void); static void sub_801F574(struct UnionRoomChat2 *); static void sub_801F580(void); void sub_80208D0(void); -int sub_801FDD8(u8 *); +static bool32 sub_801FDD8(u8 *); +void sub_8020480(void); +void sub_8020538(void); +void sub_8020584(void); +void sub_80205B4(void); +void task_tutorial_story_unknown(void); +void sub_8020680(void); +void sub_80206A4(void); +void sub_80206D0(void); +void sub_8020740(void); +void sub_80206E8(void); +void sub_80208E8(void); +void sub_8020A68(void); +void sub_8020B20(void); +void sub_80203B0(void); +void sub_802040C(void); +void sub_802091C(int); +bool32 sub_8020320(void); +void sub_80201A4(void); +bool32 sub_8020368(void); +void sub_802093C(void); +void sub_8020B80(void); +void sub_801FF18(int, u16); +static void sub_801FDDC(u8, u8, u8); +void sub_8020094(void); +static void sub_801FEBC(void); +void sub_80200C8(void); +static void sub_801FEE4(void); +void sub_80200EC(u16, u16, u8); +void sub_8020118(u16, u8 *, u8, u8, u16); +void sub_80209AC(int); +void sub_8020420(u16, u8 *, u8); +void sub_80209E0(void); +bool32 sub_8020A1C(void); extern struct UnionRoomChat *gUnknown_02022C84; extern struct UnionRoomChat2 *gUnknown_02022C88; @@ -122,6 +163,7 @@ extern const u8 *const gUnknown_082F2BA8[][10]; extern const u8 gUnknown_082F2AA8[]; extern const struct BgTemplate gUnknown_082F2C60[4]; extern const struct WindowTemplate gUnknown_082F2C70[]; +extern const struct Unk82F2C98 gUnknown_082F2C98[]; void sub_801DD98(void) @@ -1158,7 +1200,7 @@ void sub_801F0BC(u8 *arg0, u8 *arg1) *arg1 = gUnknown_02022C84->unk12; } -u8 *sub_801F0D0(void) +static u8 *sub_801F0D0(void) { return gUnknown_02022C84->unk1A; } @@ -1169,7 +1211,7 @@ int sub_801F0DC(void) return StringLength_Multibyte(str); } -void sub_801F0EC(int *arg0, int *arg1) +void sub_801F0EC(u32 *arg0, u32 *arg1) { int diff = gUnknown_02022C84->unk15 - gUnknown_02022C84->unk14; if (diff < 0) @@ -1443,3 +1485,570 @@ static void sub_801F5B8(void) gUnknown_02022C88->unk0[i].unk0(&gUnknown_02022C88->unk0[i].unk5); } } + +static void sub_801F5EC(u16 arg0, u8 arg1) +{ + u32 i; + + gUnknown_02022C88->unk0[arg1].unk0 = sub_801FDD8; + for (i = 0; i < 21; i++) + { + if (gUnknown_082F2C98[i].unk0 == arg0) + { + gUnknown_02022C88->unk0[arg1].unk0 = gUnknown_082F2C98[i].unk4; + gUnknown_02022C88->unk0[arg1].unk4 = 1; + gUnknown_02022C88->unk0[arg1].unk5 = 0; + break; + } + } +} + +static bool8 sub_801F644(u8 arg0) +{ + return gUnknown_02022C88->unk0[arg0].unk4; +} + +bool32 sub_801F658(u8 *state) +{ + if (free_temp_tile_data_buffers_if_possible() == TRUE) + return TRUE; + + switch (*state) + { + case 0: + sub_8020480(); + sub_8020538(); + break; + case 1: + sub_8020584(); + break; + case 2: + sub_80205B4(); + break; + case 3: + task_tutorial_story_unknown(); + break; + case 4: + sub_8020680(); + break; + case 5: + sub_80206A4(); + sub_80206D0(); + sub_8020740(); + sub_80206E8(); + break; + case 6: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_80208E8(); + sub_8020A68(); + sub_8020B20(); + } + break; + default: + return FALSE; + } + + (*state)++; + return TRUE; +} + +bool32 sub_801F6F8(u8 *state) +{ + switch (*state) + { + case 0: + sub_80203B0(); + CopyWindowToVram(3, 3); + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + (*state)++; + return TRUE; +} + +bool32 sub_801F730(u8 *state) +{ + switch (*state) + { + case 0: + sub_802040C(); + CopyWindowToVram(3, 3); + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + (*state)++; + return TRUE; +} + +bool32 sub_801F768(u8 *state) +{ + switch (*state) + { + case 0: + sub_802091C(1); + if (sub_8020320()) + return TRUE; + + sub_80201A4(); + CopyWindowToVram(2, 2); + break; + case 1: + if (IsDma3ManagerBusyWithBgCopy()) + return TRUE; + break; + case 2: + if (sub_8020368()) + return TRUE; + + sub_802093C(); + sub_802091C(0); + sub_8020B80(); + return FALSE; + } + + (*state)++; + return TRUE; +} + +bool32 sub_801F7D4(u8 *state) +{ + sub_802093C(); + return FALSE; +} + +bool32 sub_801F7E0(u8 *state) +{ + switch (*state) + { + case 0: + sub_801FF18(0, 0); + sub_801FDDC(23, 11, 1); + CopyWindowToVram(gUnknown_02022C88->unk1E, 3); + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + (*state)++; + return TRUE; +} + +bool32 sub_801F82C(u8 *state) +{ + switch (*state) + { + case 0: + sub_8020094(); + sub_801FEBC(); + CopyBgTilemapBufferToVram(0); + break; + case 1: + if (IsDma3ManagerBusyWithBgCopy()) + return TRUE; + + sub_80200C8(); + sub_801FEE4(); + return FALSE; + } + + (*state)++; + return TRUE; +} + +bool32 sub_801F870(u8 *state) +{ + u32 var0, var1; + u8 *str; + + switch (*state) + { + case 0: + sub_801F0EC(&var0, &var1); + sub_80200EC(var0, var1, 0); + str = sub_801F0D0(); + sub_8020118(0, str, 3, 1, 2); + CopyWindowToVram(1, 2); + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_8020B80(); + return FALSE; + } + return TRUE; + } + + (*state)++; + return TRUE; +} + +bool32 sub_801F8DC(u8 *state) +{ + u16 var0; + u8 *str; + u16 length; + + switch (*state) + { + case 0: + var0 = sub_801F144(); + str = sub_801F114(); + length = StringLength_Multibyte(str); + sub_80200EC(var0, length, PIXEL_FILL(6)); + sub_8020118(var0, str, 0, 4, 5); + CopyWindowToVram(1, 2); + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_801FF18(1, 16); + CopyWindowToVram(gUnknown_02022C88->unk1E, 3); + } + else + { + return TRUE; + } + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + sub_80209AC(1); + else + return TRUE; + break; + case 3: + return FALSE; + } + + (*state)++; + return TRUE; +} + +bool32 sub_801F984(u8 *state) +{ + u16 var0; + u8 *str; + u16 length; + + switch (*state) + { + case 0: + var0 = sub_801F144(); + str = sub_801F114(); + length = StringLength_Multibyte(str); + sub_80200EC(var0, length, PIXEL_FILL(0)); + sub_8020118(var0, str, 3, 1, 2); + CopyWindowToVram(1, 2); + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_8020094(); + CopyWindowToVram(gUnknown_02022C88->unk1E, 3); + } + else + { + return TRUE; + } + break; + case 2: + if (!IsDma3ManagerBusyWithBgCopy()) + { + sub_80209AC(0); + sub_80200C8(); + } + else + { + return TRUE; + } + break; + case 3: + return FALSE; + } + + (*state)++; + return TRUE; +} + +bool32 sub_801FA2C(u8 *state) +{ + switch (*state) + { + case 0: + sub_80201A4(); + CopyWindowToVram(2, 2); + (*state)++; + break; + case 1: + if (IsDma3ManagerBusyWithBgCopy()) + return TRUE; + else + return FALSE; + } + + return TRUE; +} + +bool32 sub_801FA68(u8 *state) +{ + u16 var0; + u8 *str; + u8 var1; + + switch (*state) + { + case 0: + var0 = gUnknown_02022C88->unk1A; + str = sub_801F180(); + var1 = sub_801F18C(); + sub_8020420(var0, str, var1); + CopyWindowToVram(0, 2); + break; + case 1: + if (IsDma3ManagerBusyWithBgCopy()) + return TRUE; + + if (gUnknown_02022C88->unk1A < 9) + { + gUnknown_02022C88->unk1A++; + *state = 4; + return FALSE; + } + else + { + gUnknown_02022C88->unk1C = 0; + (*state)++; + } + // fall through + case 2: + ScrollWindow(0, 0, 5, PIXEL_FILL(1)); + CopyWindowToVram(0, 2); + gUnknown_02022C88->unk1C++; + (*state)++; + // fall through + case 3: + if (IsDma3ManagerBusyWithBgCopy()) + return TRUE; + + if (gUnknown_02022C88->unk1C < 3) + { + (*state)--; + return TRUE; + } + break; + case 4: + return FALSE; + default: + return TRUE; + } + + (*state)++; + return TRUE; +} + +bool32 sub_801FB44(u8 *state) +{ + switch (*state) + { + case 0: + sub_80209E0(); + (*state)++; + break; + case 1: + return sub_8020A1C(); + } + + return TRUE; +} + +bool32 sub_801FB70(u8 *state) +{ + switch (*state) + { + case 0: + sub_801FF18(3, 16); + CopyWindowToVram(gUnknown_02022C88->unk1E, 3); + (*state)++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +bool32 sub_801FBB4(u8 *state) +{ + switch (*state) + { + case 0: + sub_801FF18(4, 0); + CopyWindowToVram(gUnknown_02022C88->unk1E, 3); + (*state)++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +bool32 sub_801FBF8(u8 *state) +{ + u8 *str; + + switch (*state) + { + case 0: + DynamicPlaceholderTextUtil_Reset(); + str = sub_801F1D0(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, str); + sub_801FF18(5, 0); + CopyWindowToVram(gUnknown_02022C88->unk1E, 3); + (*state)++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +bool32 sub_801FC4C(u8 *state) +{ + switch (*state) + { + case 0: + sub_801FF18(6, 0); + sub_801FDDC(23, 10, 1); + CopyWindowToVram(gUnknown_02022C88->unk1E, 3); + (*state)++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +bool32 sub_801FC9C(u8 *state) +{ + switch (*state) + { + case 0: + sub_801FF18(7, 0); + sub_801FDDC(23, 10, 1); + CopyWindowToVram(gUnknown_02022C88->unk1E, 3); + (*state)++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +bool32 sub_801FCEC(u8 *state) +{ + switch (*state) + { + case 0: + sub_801FF18(8, 0); + CopyWindowToVram(gUnknown_02022C88->unk1E, 3); + (*state)++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +bool32 sub_801FD30(u8 *state) +{ + switch (*state) + { + case 0: + DynamicPlaceholderTextUtil_Reset(); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, gSaveBlock2Ptr->playerName); + sub_801FF18(9, 0); + CopyWindowToVram(gUnknown_02022C88->unk1E, 3); + (*state)++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +bool32 sub_801FD88(u8 *state) +{ + switch (*state) + { + case 0: + sub_801FF18(10, 0); + sub_801FDDC(23, 10, 1); + CopyWindowToVram(gUnknown_02022C88->unk1E, 3); + (*state)++; + break; + case 1: + return IsDma3ManagerBusyWithBgCopy(); + } + + return TRUE; +} + +static bool32 sub_801FDD8(u8 *arg0) +{ + return FALSE; +} + +static void sub_801FDDC(u8 left, u8 top, u8 initialCursorPos) +{ + struct WindowTemplate template; + template.bg = 0; + template.tilemapLeft = left; + template.tilemapTop = top; + template.width = 6; + template.height = 4; + template.paletteNum = 14; + template.baseBlock = 0x52; + gUnknown_02022C88->unk18 = AddWindow(&template); + if (gUnknown_02022C88->unk18 != 0xFF) + { + FillWindowPixelBuffer(gUnknown_02022C88->unk18, PIXEL_FILL(1)); + PutWindowTilemap(gUnknown_02022C88->unk18); + AddTextPrinterParameterized(gUnknown_02022C88->unk18, 1, gText_Yes, 8, 1, TEXT_SPEED_FF, NULL); + AddTextPrinterParameterized(gUnknown_02022C88->unk18, 1, gText_No, 8, 17, TEXT_SPEED_FF, NULL); + sub_8098858(gUnknown_02022C88->unk18, 1, 13); + InitMenuInUpperLeftCornerPlaySoundWhenAPressed(gUnknown_02022C88->unk18, 2, initialCursorPos); + } +} + +static void sub_801FEBC(void) +{ + if (gUnknown_02022C88->unk18 != 0xFF) + { + ClearStdWindowAndFrameToTransparent(gUnknown_02022C88->unk18, FALSE); + ClearWindowTilemap(gUnknown_02022C88->unk18); + } +} + +static void sub_801FEE4(void) +{ + if (gUnknown_02022C88->unk18 != 0xFF) + { + RemoveWindow(gUnknown_02022C88->unk18); + gUnknown_02022C88->unk18 = 0xFF; + } +} + +static s8 sub_801FF08(void) +{ + return Menu_ProcessInput(); +} -- cgit v1.2.3 From 519426f4e6629a1f79fa4ce5f8ffff672d25533d Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Thu, 28 Mar 2019 20:20:52 -0500 Subject: Decompile union_room_chat through sub_8020118 --- src/text.c | 2 +- src/union_room_chat.c | 137 +++++++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 132 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/text.c b/src/text.c index 39912b17d..43834eab4 100644 --- a/src/text.c +++ b/src/text.c @@ -1615,7 +1615,7 @@ u16 RenderText(struct TextPrinter *textPrinter) } } return 2; - case 20: + case EXT_CTRL_CODE_MIN_LETTER_SPACING: textPrinter->minLetterSpacing = *textPrinter->printerTemplate.currentChar++; return 2; case EXT_CTRL_CODE_JPN: diff --git a/src/union_room_chat.c b/src/union_room_chat.c index df35d164c..4de15c563 100755 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -66,7 +66,8 @@ struct UnionRoomChat2 u16 unk1A; u16 unk1C; u16 unk1E; - u8 filler20[0x2148]; + u8 filler20[0x2]; + u8 unk22[0x2146]; }; struct Unk82F2C98 @@ -75,6 +76,18 @@ struct Unk82F2C98 bool32 (* unk4)(u8 *); }; +struct Unk82F2D40 +{ + const u8 *unk0; + u8 unk4; + u8 unk5; + u8 unk6; + u8 unk7; + u8 unk8; + u8 unk9; + u8 unkA; +}; + static void sub_801DDD0(struct UnionRoomChat *); static void c2_081284E0(void); static void sub_801DF20(void); @@ -143,14 +156,14 @@ void sub_80201A4(void); bool32 sub_8020368(void); void sub_802093C(void); void sub_8020B80(void); -void sub_801FF18(int, u16); +static void sub_801FF18(int, u16); static void sub_801FDDC(u8, u8, u8); -void sub_8020094(void); +static void sub_8020094(void); static void sub_801FEBC(void); -void sub_80200C8(void); +static void sub_80200C8(void); static void sub_801FEE4(void); -void sub_80200EC(u16, u16, u8); -void sub_8020118(u16, u8 *, u8, u8, u16); +static void sub_80200EC(u16, u16, u8); +static void sub_8020118(u16, u8 *, u8, u8, u8); void sub_80209AC(int); void sub_8020420(u16, u8 *, u8); void sub_80209E0(void); @@ -164,6 +177,7 @@ extern const u8 gUnknown_082F2AA8[]; extern const struct BgTemplate gUnknown_082F2C60[4]; extern const struct WindowTemplate gUnknown_082F2C70[]; extern const struct Unk82F2C98 gUnknown_082F2C98[]; +extern const struct Unk82F2D40 gUnknown_082F2D40[]; void sub_801DD98(void) @@ -2052,3 +2066,114 @@ static s8 sub_801FF08(void) { return Menu_ProcessInput(); } + +static void sub_801FF18(int arg0, u16 arg1) +{ + const u8 *str; + int windowId; + struct WindowTemplate template; + template.bg = 0; + template.tilemapLeft = 8; + template.tilemapTop = 16; + template.width = 21; + template.height = 4; + template.paletteNum = 14; + template.baseBlock = 0x6A; + if (gUnknown_082F2D40[arg0].unkA) + { + template.tilemapLeft -= 7; + template.width += 7; + } + + gUnknown_02022C88->unk1E = AddWindow(&template); + windowId = gUnknown_02022C88->unk1E; + if (gUnknown_02022C88->unk1E == 0xFF) + return; + + if (gUnknown_082F2D40[arg0].unk9) + { + DynamicPlaceholderTextUtil_ExpandPlaceholders(gUnknown_02022C88->unk22, gUnknown_082F2D40[arg0].unk0); + str = gUnknown_02022C88->unk22; + } + else + { + str = gUnknown_082F2D40[arg0].unk0; + } + + ChangeBgY(0, arg1 * 256, 0); + FillWindowPixelBuffer(windowId, PIXEL_FILL(1)); + PutWindowTilemap(windowId); + if (gUnknown_082F2D40[arg0].unk4 == 1) + { + sub_80989E0(windowId, 0xA, 2); + AddTextPrinterParameterized5( + windowId, + 1, + str, + gUnknown_082F2D40[arg0].unk5 + 8, + gUnknown_082F2D40[arg0].unk6 + 8, + TEXT_SPEED_FF, + NULL, + gUnknown_082F2D40[arg0].unk7, + gUnknown_082F2D40[arg0].unk8); + } + else + { + sub_8098858(windowId, 0xA, 2); + AddTextPrinterParameterized5( + windowId, + 1, + str, + gUnknown_082F2D40[arg0].unk5, + gUnknown_082F2D40[arg0].unk6, + TEXT_SPEED_FF, + NULL, + gUnknown_082F2D40[arg0].unk7, + gUnknown_082F2D40[arg0].unk8); + } + + gUnknown_02022C88->unk1E = windowId; +} + +static void sub_8020094(void) +{ + if (gUnknown_02022C88->unk1E != 0xFF) + { + ClearStdWindowAndFrameToTransparent(gUnknown_02022C88->unk1E, FALSE); + ClearWindowTilemap(gUnknown_02022C88->unk1E); + } + + ChangeBgY(0, 0, 0); +} + +static void sub_80200C8(void) +{ + if (gUnknown_02022C88->unk1E != 0xFF) + { + RemoveWindow(gUnknown_02022C88->unk1E); + gUnknown_02022C88->unk1E = 0xFF; + } +} + +static void sub_80200EC(u16 x, u16 width, u8 fillValue) +{ + FillWindowPixelRect(1, fillValue, x * 8, 1, width * 8, 14); +} + +static void sub_8020118(u16 x, u8 *str, u8 fillValue, u8 arg3, u8 arg4) +{ + u8 *str2; + u8 sp[38]; + if (fillValue) + sub_80200EC(x, sub_801F198() - x, fillValue); + + sp[0] = fillValue; + sp[1] = arg3; + sp[2] = arg4; + str2 = &sp[4]; + str2[0] = EXT_CTRL_CODE_BEGIN; + str2[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING; + str2[2] = 8; + StringCopy(&str2[3], str); + AddTextPrinterParameterized3(1, 2, x * 8, 1, sp, TEXT_SPEED_FF, str2); +} -- cgit v1.2.3 From ae0e70d7bb17bd7da4e72e2133bad79ab59fa5e7 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 29 Mar 2019 11:57:03 -0400 Subject: sub_80179D4 and rodata --- src/link_rfu.c | 20 +- src/union_room.c | 1192 +++++++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 1108 insertions(+), 104 deletions(-) (limited to 'src') diff --git a/src/link_rfu.c b/src/link_rfu.c index a557397f0..07fa04dd2 100644 --- a/src/link_rfu.c +++ b/src/link_rfu.c @@ -310,10 +310,22 @@ const char gUnknown_082ED7EC[] = "PokemonSioInfo"; const char gUnknown_082ED7FC[] = "LINK LOSS DISCONNECT!"; const char gUnknown_082ED814[] = "LINK LOSS RECOVERY NOW"; -extern const char gUnknown_082ED82C[]; -extern const char gUnknown_082ED84B[]; -extern const char gUnknown_082ED85B[]; -extern const char gUnknown_082ED868[]; +ALIGNED(4) const char gUnknown_082ED82C[31] = {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',0x00}; +const char gUnknown_082ED84B[16] = {' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',0x00}; +const char gUnknown_082ED85B[9] = {' ',' ',' ',' ',' ',' ',' ',' ',0x00}; +ALIGNED(4) const char gUnknown_082ED864[2] = {' ',0x00}; +const char gUnknown_082ED866[2] = {'*',0x00}; +const char gUnknown_082ED868[8] = "NOWSLOT"; +const char gUnknown_082ED870[12] = " "; +const char gUnknown_082ED87C[12] = "CLOCK DRIFT"; +const char gUnknown_082ED888[12] = "BUSY SEND "; +const char gUnknown_082ED894[12] = "CMD REJECT "; +const char gUnknown_082ED8A0[12] = "CLOCK SLAVE"; +const char gUnknown_082ED8A8[3][8] = { + "CHILD ", + "PARENT", + "SEARCH" +}; // .text diff --git a/src/union_room.c b/src/union_room.c index 4c9cb3886..a4a728a3b 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -1,6 +1,7 @@ #include "global.h" #include "window.h" #include "bg.h" +#include "random.h" #include "string_util.h" #include "task.h" #include "event_data.h" @@ -36,6 +37,7 @@ #include "script_pokemon_util_80F87D8.h" #include "international_string_util.h" #include "field_player_avatar.h" +#include "strings.h" #include "mevent.h" struct UnkStruct_Shared @@ -282,106 +284,1046 @@ void sub_8019BA8(void *); s32 sub_8017EA0(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *arg3); void sub_801697C(u8 taskId); bool8 sub_8017630(struct UnkStruct_Shared* arg0, const struct UnkStruct_Shared* arg1); +void sub_8013278(u8 windowId, s32 itemId, u8 y); +void sub_8013DF4(u8 windowId, s32 itemId, u8 y); +void sub_8017BE8(u8 windowId, s32 itemId, u8 y); +void nullsub_14(u8 windowId, s32 itemId, u8 y); // const rom data -extern const u8 *const gUnknown_082EDB60[][5]; - -extern const u8 gText_UnkCtrlCodeF907[]; -extern const u8 gUnknown_082EDBC4[]; -extern const u8 gText_AwaitingCommunication[]; -extern const u8 gText_AwaitingLink[]; -extern const u8 gUnknown_082EDC5C[]; -extern const u8 gUnknown_082EDC9C[]; -extern const u8 gUnknown_082EDC78[]; -extern const u8 gUnknown_082EDD58[]; -extern const u8 gUnknown_082EDBE8[]; -extern const u8 gUnknown_082EDC0C[]; -extern const u8 gUnknown_082EDC34[]; -extern const u8 gUnknown_082EE560[]; -extern const u8 gUnknown_082EE57C[]; -extern const u8 gUnknown_082EFC54[]; -extern const u8 gUnknown_082EFC3C[]; -extern const u8 gUnknown_082EDE0C[]; -extern const u8 gUnknown_082EDDF4[]; -extern const u8 gUnknown_082EF7DC[]; -extern const u8 gUnknown_082EDE48[]; -extern const u8 gUnknown_082EDE64[]; -extern const u8 gUnknown_082EDF40[]; -extern const u8 gText_PleaseStartOver[]; -extern const u8 gUnknown_082EF7F8[]; -extern const u8 gUnknown_082EFBC8[]; -extern const u8 gUnknown_082EFC90[]; -extern const u8 gUnknown_082EDEC4[]; -extern const u8 gUnknown_082EDF04[]; -extern const u8 gText_WirelessSearchCanceled[]; -extern const u8 gUnknown_082EF4FC[]; -extern const u8 gUnknown_082EF520[]; -extern const u8 gUnknown_082EF5B8[]; -extern const u8 gUnknown_082EF1EC[]; -extern const u8 gUnknown_082EF544[]; -extern const u8 gUnknown_082EF47C[]; -extern const u8 gUnknown_082EE6C8[]; -extern const u8 gUnknown_082EE004[]; -extern const u8 gUnknown_082EEBD0[]; -extern const u8 gUnknown_082EEB88[]; -extern const u8 gUnknown_082EE598[]; -extern const u8 gUnknown_082EEC14[]; -extern const u8 gUnknown_082EF590[]; -extern const u8 gUnknown_082EF20C[]; -extern const u8 gUnknown_082EF564[]; -extern const u8 gUnknown_082EF4C4[]; -extern const u8 gUnknown_082EF298[]; -extern const u8 gUnknown_082EF65C[]; -extern const u8 gUnknown_082EF6E4[]; -extern const u8 gUnknown_082EF718[]; -extern const u8 gUnknown_082EFD94[]; - -extern const u32 gUnknown_082F00C4[]; - -extern const u8 gUnknown_082F0530[]; - -extern const struct WindowTemplate gUnknown_082F00BC; -extern const struct WindowTemplate gUnknown_082F0124; -extern const struct WindowTemplate gUnknown_082F012C; -extern const struct WindowTemplate gUnknown_082F011C; -extern const struct WindowTemplate gUnknown_082F0174; -extern const struct WindowTemplate gUnknown_082F017C; -extern const struct WindowTemplate gUnknown_082F021C; -extern const struct WindowTemplate gUnknown_082F025C; -extern const struct WindowTemplate gUnknown_082F0294; -extern const struct WindowTemplate gUnknown_082F0344; -extern const struct WindowTemplate gUnknown_082F034C; - -extern const struct ListMenuTemplate gUnknown_082F015C; -extern const struct ListMenuTemplate gUnknown_082F0204; -extern const struct ListMenuTemplate gUnknown_082F0244; -extern const struct ListMenuTemplate gUnknown_082F027C; -extern const struct ListMenuTemplate gUnknown_082F032C; -extern const struct ListMenuTemplate gUnknown_082F03A4; - -extern const u8 *const gUnknown_082F0048[]; -extern const u8 *const gUnknown_082EDDC4[]; -extern const u8 *const gUnknown_082EFB70[]; -extern const u8 *const gUnknown_082EDD50[]; -extern const u8 *const gUnknown_082EDE9C[]; -extern const u8 *const gUnknown_082EDF80[]; -extern const u8 *const gUnknown_082EFD58[]; -extern const u8 *const gUnknown_082EEB80[]; -extern const u8 *const gUnknown_082EE378[]; -extern const u8 *const gUnknown_082EEC9C[]; -extern const u8 *const gUnknown_082EED3C[]; -extern const u8 *const gUnknown_082EE324[]; -extern const u8 *const gUnknown_082EE17C[]; - -extern const u8 *const gUnknown_082EE82C[][4]; - -extern const u8 *const gUnknown_082EE24C[][2]; - -extern const struct UnkStruct_Shared gUnknown_082F045C; - -extern const u8 *const gUnknown_082F04D8[22]; - -extern const u8 gText_Colon[]; + +ALIGNED(4) const u8 gText_EmptyString[] = _(""); +ALIGNED(4) const u8 gText_Colon[] = _(":"); +ALIGNED(4) const u8 gText_UnkCtrlCodeF907[] = _("{ID}"); +ALIGNED(4) const u8 gText_PleaseStartOver[] = _("Please start over from the beginning."); +ALIGNED(4) const u8 gText_WirelessSearchCanceled[] = _("The WIRELESS COMMUNICATION\nSYSTEM search has been canceled."); +ALIGNED(4) const u8 unref_text_union_room_0[] = _("Awaiting communication\nfrom another player."); +ALIGNED(4) const u8 gText_AwaitingCommunication[] = _("{STR_VAR_1}! Awaiting\ncommunication from another player."); +ALIGNED(4) const u8 gText_AwaitingLink[] = _("{STR_VAR_1}! Awaiting link!\nPress START when everyone's ready."); +ALIGNED(4) const u8 gJPText_SingleBattle[] = _("シングルバトルを かいさいする"); +ALIGNED(4) const u8 gJPText_DoubleBattle[] = _("ダブルバトルを かいさいする"); +ALIGNED(4) const u8 gJPText_MultiBattle[] = _("マルチバトルを かいさいする"); +ALIGNED(4) const u8 gJPText_TradePokemon[] = _("ポケモンこうかんを かいさいする"); +ALIGNED(4) const u8 gJPText_Chat[] = _("チャットを かいさいする"); +ALIGNED(4) const u8 gJPText_DistWonderCard[] = _("ふしぎなカードをくばる"); +ALIGNED(4) const u8 gJPText_DistWonderNews[] = _("ふしぎなニュースをくばる"); +ALIGNED(4) const u8 unref_text_union_room_1[] = _("ふしぎなできごとを かいさいする"); +ALIGNED(4) const u8 gJPText_HoldPokemonJump[] = _("なわとびを かいさいする"); +ALIGNED(4) const u8 gJPText_HoldBerryCrush[] = _("きのみマッシャーを かいさいする"); +ALIGNED(4) const u8 gJPText_HoldBerryPicking[] = _("きのみどりを かいさいする"); +ALIGNED(4) const u8 gJPText_HoldSpinTrade[] = _("ぐるぐるこうかんを かいさいする"); +ALIGNED(4) const u8 gJPText_HoldSpinShop[] = _("ぐるぐるショップを かいさいする"); + +const u8 *const unref_text_ptrs_union_room_0[] = { + gJPText_SingleBattle, + gJPText_DoubleBattle, + gJPText_MultiBattle, + gJPText_TradePokemon, + gJPText_Chat, + gJPText_DistWonderCard, + gJPText_DistWonderNews, + gJPText_DistWonderCard, + gJPText_HoldPokemonJump, + gJPText_HoldBerryCrush, + gJPText_HoldBerryPicking, + gJPText_HoldBerryPicking, + gJPText_HoldSpinTrade, + gJPText_HoldSpinShop +}; + +const u8 gText_1PlayerNeeded[] = _("1 player\nneeded."); +const u8 gText_2PlayersNeeded[] = _("2 players\nneeded."); +const u8 gText_3PlayersNeeded[] = _("3 players\nneeded."); +const u8 gText_4PlayersNeeded[] = _("4 players\nneeded."); +const u8 gText_2PlayerMode[] = _("2-PLAYER\nMODE"); +const u8 gText_3PlayerMode[] = _("3-PLAYER\nMODE"); +const u8 gText_4PlayerMode[] = _("4-PLAYER\nMODE"); +const u8 gText_5PlayerMode[] = _("5-PLAYER\nMODE"); + +const u8 *const gUnknown_082EDB60[][5] = { + { + gText_1PlayerNeeded, + gText_2PlayerMode, + NULL, + NULL, + NULL + }, { + gText_3PlayersNeeded, + gText_2PlayersNeeded, + gText_1PlayerNeeded, + gText_4PlayerMode, + NULL + }, { + gText_1PlayerNeeded, + gText_2PlayerMode, + gText_3PlayerMode, + gText_4PlayerMode, + gText_5PlayerMode + }, { + gText_2PlayersNeeded, + gText_1PlayerNeeded, + gText_3PlayerMode, + gText_4PlayerMode, + gText_5PlayerMode + }, { + gText_1PlayerNeeded, + gText_2PlayerMode, + gText_3PlayerMode, + gText_4PlayerMode, + NULL + } +}; + +ALIGNED(4) const u8 gUnknown_082EDBC4[] = _("{B_BUTTON}CANCEL"); +ALIGNED(4) const u8 unref_text_union_room_2[] = _("ため\nさんかしゃ ぼしゅうちゅう です!"); +ALIGNED(4) const u8 gUnknown_082EDBE8[] = _("{STR_VAR_2} contacted you for\n{STR_VAR_1}. Accept?"); +ALIGNED(4) const u8 gUnknown_082EDC0C[] = _("{STR_VAR_2} contacted you.\nWill you share {STR_VAR_1}?"); +ALIGNED(4) const u8 gUnknown_082EDC34[] = _("{STR_VAR_2} contacted you.\nAdd to the members?"); +ALIGNED(4) const u8 gUnknown_082EDC5C[] = _("{STR_VAR_1}!\nAre these members OK?"); +ALIGNED(4) const u8 gUnknown_082EDC78[] = _("Cancel {STR_VAR_1} MODE\nwith these members?"); +ALIGNED(4) const u8 gUnknown_082EDC9C[] = _("An “OK” was sent\nto {STR_VAR_1}."); +ALIGNED(4) const u8 gUnknown_082EDCB4[] = _("The other TRAINER doesn't appear\nto be available now…\p"); +ALIGNED(4) const u8 gUnknown_082EDCEC[] = _("You can't transmit with a TRAINER\nwho is too far away.\p"); +ALIGNED(4) const u8 gUnknown_082EDD24[] = _("The other TRAINER(S) is/are not\nready yet.\p"); + +const u8 *const gUnknown_082EDD50[] = { + gUnknown_082EDCEC, + gUnknown_082EDD24 +}; + +ALIGNED(4) const u8 gUnknown_082EDD58[] = _("The {STR_VAR_1} MODE with\nthese members will be canceled.{PAUSE 60}"); +ALIGNED(4) const u8 gUnknown_082EDD8C[] = _("There is a member who can no\nlonger remain available.\p"); + +const u8 *const gUnknown_082EDDC4[] = { + gUnknown_082EDCB4, + gUnknown_082EDD8C +}; + +ALIGNED(4) const u8 gUnknown_082EDDCC[] = _("The other TRAINER appears\nunavailable…\p"); +ALIGNED(4) const u8 gUnknown_082EDDF4[] = _("{STR_VAR_1} sent back an “OK”!"); +ALIGNED(4) const u8 gUnknown_082EDE0C[] = _("{STR_VAR_1} OK'd your registration as\na member."); +ALIGNED(4) const u8 gUnknown_082EDE34[] = _("{STR_VAR_1} replied, “No…”\p"); +ALIGNED(4) const u8 gUnknown_082EDE48[] = _("{STR_VAR_1}!\nAwaiting other members!"); +ALIGNED(4) const u8 gUnknown_082EDE64[] = _("Quit being a member?"); +ALIGNED(4) const u8 gUnknown_082EDE7C[] = _("You stopped being a member.\p"); + +const u8 *const gUnknown_082EDE9C[] = { + NULL, + gUnknown_082EDD8C, + gUnknown_082EDDCC, + NULL, + NULL, + NULL, + gUnknown_082EDE34, + NULL, + NULL, + gUnknown_082EDE7C +}; + +ALIGNED(4) const u8 gUnknown_082EDEC4[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been established."); +ALIGNED(4) const u8 gUnknown_082EDF04[] = _("The WIRELESS COMMUNICATION\nSYSTEM link has been dropped…"); +ALIGNED(4) const u8 gUnknown_082EDF40[] = _("The link with your friend has been\ndropped…"); +ALIGNED(4) const u8 gUnknown_082EDF6C[] = _("{STR_VAR_1} replied, “No…”"); + +const u8 *const gUnknown_082EDF80[] = { + NULL, + gUnknown_082EDF40, + gUnknown_082EDF40, + NULL, + NULL, + NULL, + gUnknown_082EDF6C, + NULL, + NULL, + NULL +}; + +ALIGNED(4) const u8 gUnknown_082EDFA8[] = _("Do you want the {STR_VAR_2}\nMODE?"); +ALIGNED(4) const u8 gUnknown_082EDFC4[] = _("Do you want the {STR_VAR_2}\nMODE?"); + +const u8 *const unref_text_ptrs_union_room_1[] = { + gUnknown_082EDFA8, + gUnknown_082EDFC4 +}; + +ALIGNED(4) const u8 unref_text_union_room_3[] = _("Communicating…\nPlease wait."); +ALIGNED(4) const u8 gUnknown_082EE004[] = _("Awaiting {STR_VAR_1}'s response about\nthe trade…"); +ALIGNED(4) const u8 gUnknown_082EE02C[] = _("Communicating{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}."); +ALIGNED(4) const u8 gUnknown_082EE098[] = _("Communicating with {STR_VAR_1}{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}."); +ALIGNED(4) const u8 gUnknown_082EE104[] = _("Please wait a while{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.\n{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}.{PAUSE 15}."); + +const u8 *const gUnknown_082EE17C[] = { + gUnknown_082EE02C, + gUnknown_082EE098, + gUnknown_082EE104 +}; + +ALIGNED(4) const u8 gUnknown_082EE188[] = _("Hiya! Is there something that you\nwanted to do?"); +ALIGNED(4) const u8 gUnknown_082EE1B8[] = _("Hello!\nWould you like to do something?"); +ALIGNED(4) const u8 gUnknown_082EE1E0[] = _("{STR_VAR_1}: Hiya, we meet again!\nWhat are you up for this time?"); +ALIGNED(4) const u8 gUnknown_082EE218[] = _("{STR_VAR_1}: Oh! {PLAYER}, hello!\nWould you like to do something?"); + +const u8 *const gUnknown_082EE24C[][2] = { + { + gUnknown_082EE188, + gUnknown_082EE1B8 + }, { + gUnknown_082EE1E0, + gUnknown_082EE218 + } +}; + +ALIGNED(4) const u8 gUnknown_082EE25C[] = _("Want to do something?"); +ALIGNED(4) const u8 gUnknown_082EE274[] = _("Would you like to do something?"); +ALIGNED(4) const u8 gUnknown_082EE294[] = _("{STR_VAR_1}: What would you like to\ndo now?"); +ALIGNED(4) const u8 unref_text_union_room_4[] = _("{STR_VAR_1}: Want to do anything else?"); + +const u8 *const unref_text_ptrs_union_room_2[][2] = { + { + gUnknown_082EE25C, + gUnknown_082EE274 + }, { + gUnknown_082EE294, + gUnknown_082EE294 + } +}; + +ALIGNED(4) const u8 gUnknown_082EE2E8[] = _("Somebody has contacted you.{PAUSE 60}"); +ALIGNED(4) const u8 gUnknown_082EE308[] = _("{STR_VAR_1} has contacted you.{PAUSE 60}"); + +const u8 *const gUnknown_082EE324[] = { + gUnknown_082EE2E8, + gUnknown_082EE308 +}; + +ALIGNED(4) const u8 gUnknown_082EE32C[] = _("Awaiting a response from\nthe other TRAINER…"); +ALIGNED(4) const u8 gUnknown_082EE358[] = _("Awaiting a response from\n{STR_VAR_1}…"); + +const u8 *const gUnknown_082EE378[] = { + gUnknown_082EE32C, + gUnknown_082EE358 +}; + +ALIGNED(4) const u8 gUnknown_082EE380[] = _("The other TRAINER showed\nyou their TRAINER CARD.\pWould you like to show your\nTRAINER CARD?"); +ALIGNED(4) const u8 gUnknown_082EE3DC[] = _("The other TRAINER challenges you\nto battle.\pWill you accept the battle\nchallenge?"); +ALIGNED(4) const u8 gUnknown_082EE430[] = _("The other TRAINER invites you\nto chat.\pWill you accept the chat\ninvitation?"); +ALIGNED(4) const u8 gUnknown_082EE47C[] = _("There is an offer to trade your\nregistered Lv. {SPECIAL_F7 0x00} {SPECIAL_F7 0x01}\pin exchange for a\nLv. {SPECIAL_F7 0x02} {SPECIAL_F7 0x03}.\pWill you accept this trade\noffer?"); +ALIGNED(4) const u8 gUnknown_082EE4F0[] = _("There is an offer to trade your\nregistered EGG.\lWill you accept this trade offer?"); +ALIGNED(4) const u8 gUnknown_082EE544[] = _("The chat has been dropped.\p"); +ALIGNED(4) const u8 gUnknown_082EE560[] = _("You declined the offer.\p"); +ALIGNED(4) const u8 gUnknown_082EE57C[] = _("You declined the offer.\p"); +ALIGNED(4) const u8 gUnknown_082EE598[] = _("The chat was ended.\p"); + +const u8 *const unref_text_ptrs_union_room_3[] = { + gUnknown_082EE380, + gUnknown_082EE3DC, + gUnknown_082EE430, + gUnknown_082EE47C +}; + +ALIGNED(4) const u8 gUnknown_082EE5C0[] = _("Oh, hey! We're in a chat right now.\nWant to join us?"); +ALIGNED(4) const u8 gUnknown_082EE5F8[] = _("{STR_VAR_1}: Hey, {PLAYER}!\nWe're having a chat right now.\lWant to join us?"); +ALIGNED(4) const u8 gUnknown_082EE638[] = _("Oh, hi! We're having a chat now.\nWould you like to join us?"); +ALIGNED(4) const u8 gUnknown_082EE674[] = _("{STR_VAR_1}: Oh, hi, {PLAYER}!\nWe're having a chat now.\lWould you like to join us?"); + +const u8 *const gUnknown_082EE6B8[][2] = { + { + gUnknown_082EE5C0, + gUnknown_082EE638 + }, { + gUnknown_082EE5F8, + gUnknown_082EE674 + } +}; + +ALIGNED(4) const u8 gUnknown_082EE6C8[] = _("……\nThe TRAINER appears to be busy…\p"); +ALIGNED(4) const u8 gUnknown_082EE6EC[] = _("A battle, huh?\nAll right, just give me some time."); +ALIGNED(4) const u8 gUnknown_082EE720[] = _("You want to chat, huh?\nSure, just wait a little."); +ALIGNED(4) const u8 gUnknown_082EE754[] = _("Sure thing! As my “Greetings,”\nhere's my TRAINER CARD."); +ALIGNED(4) const u8 gUnknown_082EE78C[] = _("A battle? Of course, but I need\ntime to get ready."); +ALIGNED(4) const u8 gUnknown_082EE7C0[] = _("Did you want to chat?\nOkay, but please wait a moment."); +ALIGNED(4) const u8 gUnknown_082EE7F8[] = _("As my introduction, I'll show you\nmy TRAINER CARD."); + +const u8 *const gUnknown_082EE82C[][4] = { + { + gUnknown_082EE6EC, + gUnknown_082EE720, + NULL, + gUnknown_082EE754 + }, { + gUnknown_082EE78C, + gUnknown_082EE7C0, + NULL, + gUnknown_082EE7F8 + } +}; + +ALIGNED(4) const u8 unref_text_union_room_5[] = _("You want to chat, huh?\nSure, just wait a little."); +ALIGNED(4) const u8 gUnknown_082EE880[] = _("Thanks for waiting!\nLet's get our battle started!{PAUSE 60}"); +ALIGNED(4) const u8 gUnknown_082EE8B8[] = _("All right!\nLet's chat!{PAUSE 60}"); +ALIGNED(4) const u8 gUnknown_082EE8D4[] = _("Sorry I made you wait!\nLet's get started!{PAUSE 60}"); +ALIGNED(4) const u8 gUnknown_082EE904[] = _("Sorry I made you wait!\nLet's chat.{PAUSE 60}"); +ALIGNED(4) const u8 gUnknown_082EE92C[] = _("The trade will be started.{PAUSE 60}"); +ALIGNED(4) const u8 gUnknown_082EE94C[] = _("The battle will be started.{PAUSE 60}"); +ALIGNED(4) const u8 gUnknown_082EE96C[] = _("Entering the chat…{PAUSE 60}"); + +const u8 *const gUnknown_082EE984[][3] = { + { + gUnknown_082EE94C, + gUnknown_082EE96C, + gUnknown_082EE92C + }, { + gUnknown_082EE94C, + gUnknown_082EE96C, + gUnknown_082EE92C + }, { + gUnknown_082EE880, + gUnknown_082EE8B8, + gUnknown_082EE92C + }, { + gUnknown_082EE8D4, + gUnknown_082EE904, + gUnknown_082EE92C + } +}; + +ALIGNED(4) const u8 gUnknown_082EE9B4[] = _("Sorry! My POKéMON don't seem to\nbe feeling too well right now.\lLet me battle you another time.\p"); +ALIGNED(4) const u8 gUnknown_082EEA14[] = _("I'm terribly sorry, but my POKéMON\naren't feeling well…\pLet's battle another time.\p"); + +const u8 *const gUnknown_082EEA68[] = { + gUnknown_082EE9B4, + gUnknown_082EEA14 +}; + +ALIGNED(4) const u8 gUnknown_082EEA70[] = _("Huh? My TRAINER CARD…\nWhere'd it go now?\lSorry! I'll show you another time!\p"); +ALIGNED(4) const u8 gUnknown_082EEAC0[] = _("Oh? Now where did I put my\nTRAINER CARD?…\lSorry! I'll show you later!\p"); + +const u8 *const gUnknown_082EEB08[] = { + gUnknown_082EEA70, + gUnknown_082EEAC0 +}; + +ALIGNED(4) const u8 gUnknown_082EEB10[] = _("If you want to do something with\nme, just give me a shout!\p"); +ALIGNED(4) const u8 gUnknown_082EEB4C[] = _("If you want to do something with\nme, don't be shy.\p"); + +const u8 *const gUnknown_082EEB80[] = { + gUnknown_082EEB10, + gUnknown_082EEB4C +}; + +ALIGNED(4) const u8 gUnknown_082EEB88[] = _("Whoops! Sorry, but I have to do\nsomething else.\lAnother time, okay?\p"); +ALIGNED(4) const u8 gUnknown_082EEBD0[] = _("If you want to battle, you need\ntwo POKéMON that are below\lLv. 30.\p"); +ALIGNED(4) const u8 gUnknown_082EEC14[] = _("For a battle, you need two\nPOKéMON that are below Lv. 30.\p"); +ALIGNED(4) const u8 gUnknown_082EEC50[] = _("Oh, all right.\nCome see me anytime, okay?\p"); +ALIGNED(4) const u8 gUnknown_082EEC7C[] = _("Oh…\nPlease come by anytime.\p"); + +const u8 *const gUnknown_082EEC9C[] = { + gUnknown_082EEC50, + gUnknown_082EEC7C +}; + +ALIGNED(4) const u8 gUnknown_082EECA4[] = _("Oh, sorry!\nI just can't right this instant.\lLet's chat another time.\p"); +ALIGNED(4) const u8 gUnknown_082EECEC[] = _("Oh, I'm sorry.\nI have too much to do right now.\lLet's chat some other time.\p"); + +const u8 *const gUnknown_082EED3C[] = { + gUnknown_082EECA4, + gUnknown_082EECEC +}; + +ALIGNED(4) const u8 gUnknown_082EED44[] = _("Whoa!\nI can tell you're pretty tough!\p"); +ALIGNED(4) const u8 gUnknown_082EED6C[] = _("You used that move?\nThat's good strategy!\p"); +ALIGNED(4) const u8 gUnknown_082EED98[] = _("Way to go!\nThat was an eye-opener!\p"); +ALIGNED(4) const u8 gUnknown_082EEDBC[] = _("Oh! How could you use that\nPOKéMON in that situation?\p"); +ALIGNED(4) const u8 gUnknown_082EEDF4[] = _("That POKéMON…\nIt's been raised really well!\p"); +ALIGNED(4) const u8 gUnknown_082EEE24[] = _("That's it!\nThis is the right move now!\p"); +ALIGNED(4) const u8 gUnknown_082EEE4C[] = _("That's awesome!\nYou can battle that way?\p"); +ALIGNED(4) const u8 gUnknown_082EEE78[] = _("You have exquisite timing for\nswitching POKéMON!\p"); + +const u8 *const gUnknown_082EEEAC[][4] = { + { + gUnknown_082EED44, + gUnknown_082EED6C, + gUnknown_082EED98, + gUnknown_082EEDBC + }, { + gUnknown_082EEDF4, + gUnknown_082EEE24, + gUnknown_082EEE4C, + gUnknown_082EEE78 + } +}; + +ALIGNED(4) const u8 gUnknown_082EEECC[] = _("Oh, I see!\nThis is educational!\p"); +ALIGNED(4) const u8 gUnknown_082EEEF0[] = _("Don't say anything funny anymore!\nI'm sore from laughing!\p"); +ALIGNED(4) const u8 gUnknown_082EEF2C[] = _("Oh?\nSomething like that happened.\p"); +ALIGNED(4) const u8 gUnknown_082EEF50[] = _("Hmhm… What?\nSo is this what you're saying?\p"); +ALIGNED(4) const u8 gUnknown_082EEF7C[] = _("Is that right?\nI didn't know that.\p"); +ALIGNED(4) const u8 gUnknown_082EEFA0[] = _("Ahaha!\nWhat is that about?\p"); +ALIGNED(4) const u8 gUnknown_082EEFBC[] = _("Yes, that's exactly it!\nThat's what I meant.\p"); +ALIGNED(4) const u8 gUnknown_082EEFEC[] = _("In other words…\nYes! That's right!\p"); + +const u8 *const gUnknown_082EF010[][4] = { + { + gUnknown_082EEECC, + gUnknown_082EEEF0, + gUnknown_082EEF2C, + gUnknown_082EEF50 + }, { + gUnknown_082EEF7C, + gUnknown_082EEFA0, + gUnknown_082EEFBC, + gUnknown_082EEFEC + } +}; + +ALIGNED(4) const u8 gUnknown_082EF030[] = _("I'm just showing my TRAINER CARD\nas my way of greeting.\p"); +ALIGNED(4) const u8 gUnknown_082EF06C[] = _("I hope I get to know you better!\p"); +ALIGNED(4) const u8 gUnknown_082EF090[] = _("We're showing each other our\nTRAINER CARDS to get acquainted.\p"); +ALIGNED(4) const u8 gUnknown_082EF0D0[] = _("Glad to meet you.\nPlease don't be a stranger!\p"); + +const u8 *const gUnknown_082EF100[][2] = { + { + gUnknown_082EF030, + gUnknown_082EF06C + }, { + gUnknown_082EF090, + gUnknown_082EF0D0 + } +}; + +ALIGNED(4) const u8 gUnknown_082EF110[] = _("Yeahah!\nI really wanted this POKéMON!\p"); +ALIGNED(4) const u8 gUnknown_082EF138[] = _("Finally, a trade got me that\nPOKéMON I'd wanted a long time.\p"); +ALIGNED(4) const u8 gUnknown_082EF178[] = _("I'm trading POKéMON right now.\p"); +ALIGNED(4) const u8 gUnknown_082EF198[] = _("I finally got that POKéMON I\nwanted in a trade!\p"); + +const u8 *const gUnknown_082EF1CC[][4] = { + { + gUnknown_082EF110, + gUnknown_082EF138, + NULL, + NULL + }, { + gUnknown_082EF178, + gUnknown_082EF198, + NULL, + NULL + } +}; + +ALIGNED(4) const u8 gUnknown_082EF1EC[] = _("{STR_VAR_1} checked the\nTRADING BOARD.\p"); +ALIGNED(4) const u8 gUnknown_082EF20C[] = _("Welcome to the TRADING BOARD.\pYou may register your POKéMON\nand offer it up for a trade.\pWould you like to register one of\nyour POKéMON?"); +ALIGNED(4) const u8 gUnknown_082EF298[] = _("This TRADING BOARD is used for\noffering a POKéMON for a trade.\pAll you need to do is register a\nPOKéMON for a trade.\pAnother TRAINER may offer a party\nPOKéMON in return for the trade.\pWe hope you will register POKéMON\nand trade them with many, many\lother TRAINERS.\pWould you like to register one of\nyour POKéMON?"); +ALIGNED(4) const u8 unref_text_union_room_6[] = _("We have registered your POKéMON for\ntrade on the TRADING BOARD.\pThank you for using this service!\p"); +ALIGNED(4) const u8 unref_text_union_room_7[] = _("Nobody has registered any POKéMON\nfor trade on the TRADING BOARD.\p\n"); +ALIGNED(4) const u8 gUnknown_082EF47C[] = _("Please choose the type of POKéMON\nthat you would like in the trade.\n"); +ALIGNED(4) const u8 gUnknown_082EF4C4[] = _("Which of your party POKéMON will\nyou offer in trade?\p"); +ALIGNED(4) const u8 gUnknown_082EF4FC[] = _("Registration has been canceled.\p"); +ALIGNED(4) const u8 gUnknown_082EF520[] = _("Registration has been completed.\p"); +ALIGNED(4) const u8 gUnknown_082EF544[] = _("The trade has been canceled.\p"); +ALIGNED(4) const u8 gUnknown_082EF564[] = _("Cancel the registration of your\nLv. {STR_VAR_2} {STR_VAR_1}?"); +ALIGNED(4) const u8 gUnknown_082EF590[] = _("Cancel the registration of your\nEGG?"); +ALIGNED(4) const u8 gUnknown_082EF5B8[] = _("The registration has been canceled.\p"); +ALIGNED(4) const u8 unref_text_union_room_8[] = _("TRAINERS wishing to make a trade\nwill be listed."); +ALIGNED(4) const u8 unref_text_union_room_9[] = _("Please choose the TRAINER with whom\nyou would like to trade POKéMON."); +ALIGNED(4) const u8 gUnknown_082EF65C[] = _("Would you like to ask {STR_VAR_1} to\nmake a trade?"); +ALIGNED(4) const u8 unref_text_union_room_10[] = _("Awaiting a response from\nthe other TRAINER…"); +ALIGNED(4) const u8 unref_text_union_room_11[] = _("You have not registered a POKéMON\nfor trading.\p"); +ALIGNED(4) const u8 gUnknown_082EF6E4[] = _("You don't have a {STR_VAR_2}-type\nPOKéMON that {STR_VAR_1} wants.\p"); +ALIGNED(4) const u8 gUnknown_082EF718[] = _("You don't have an EGG that\n{STR_VAR_1} wants.\p"); +ALIGNED(4) const u8 gUnknown_082EF740[] = _("{STR_VAR_1} can't make a trade for\nyour POKéMON right now.\p"); +ALIGNED(4) const u8 gUnknown_082EF774[] = _("You can't make a trade for\n{STR_VAR_1}'s POKéMON right now.\p"); + +const u8 *const unref_text_ptrs_union_room_4[] = { + gUnknown_082EF740, + gUnknown_082EF774 +}; + +ALIGNED(4) const u8 gUnknown_082EF7B0[] = _("Your trade offer was rejected.\p"); +ALIGNED(4) const u8 gUnknown_082EF7D0[] = _("EGG TRADE"); +ALIGNED(4) const u8 gUnknown_082EF7DC[] = _("{DPAD_UPDOWN}CHOOSE {A_BUTTON}JOIN {B_BUTTON}CANCEL"); +ALIGNED(4) const u8 gUnknown_082EF7F8[] = _("Please choose a TRAINER."); +ALIGNED(4) const u8 gUnknown_082EF814[] = _("Please choose a TRAINER for\na SINGLE BATTLE."); +ALIGNED(4) const u8 gUnknown_082EF844[] = _("Please choose a TRAINER for\na DOUBLE BATTLE."); +ALIGNED(4) const u8 gUnknown_082EF874[] = _("Please choose the LEADER\nfor a MULTI BATTLE."); +ALIGNED(4) const u8 gUnknown_082EF8A4[] = _("Please choose the TRAINER to\ntrade with."); +ALIGNED(4) const u8 gUnknown_082EF8D0[] = _("Please choose the TRAINER who is\nsharing WONDER CARDS."); +ALIGNED(4) const u8 gUnknown_082EF908[] = _("Please choose the TRAINER who is\nsharing WONDER NEWS."); +ALIGNED(4) const u8 gUnknown_082EF940[] = _("Jump with mini POKéMON!\nPlease choose the LEADER."); +ALIGNED(4) const u8 gUnknown_082EF974[] = _("BERRY CRUSH!\nPlease choose the LEADER."); +ALIGNED(4) const u8 gUnknown_082EF99C[] = _("DODRIO BERRY-PICKING!\nPlease choose the LEADER."); +ALIGNED(4) const u8 gUnknown_082EF9CC[] = _("BERRY BLENDER!\nPlease choose the LEADER."); +ALIGNED(4) const u8 gUnknown_082EF9F8[] = _("RECORD CORNER!\nPlease choose the LEADER."); +ALIGNED(4) const u8 gUnknown_082EFA24[] = _("COOLNESS CONTEST!\nPlease choose the LEADER."); +ALIGNED(4) const u8 gUnknown_082EFA50[] = _("BEAUTY CONTEST!\nPlease choose the LEADER."); +ALIGNED(4) const u8 gUnknown_082EFA7C[] = _("CUTENESS CONTEST!\nPlease choose the LEADER."); +ALIGNED(4) const u8 gUnknown_082EFAA8[] = _("SMARTNESS CONTEST!\nPlease choose the LEADER."); +ALIGNED(4) const u8 gUnknown_082EFAD8[] = _("TOUGHNESS CONTEST!\nPlease choose the LEADER."); +ALIGNED(4) const u8 gUnknown_082EFB08[] = _("BATTLE TOWER LEVEL 50!\nPlease choose the LEADER."); +ALIGNED(4) const u8 gUnknown_082EFB3C[] = _("BATTLE TOWER OPEN LEVEL!\nPlease choose the LEADER."); + +const u8 *const gUnknown_082EFB70[] = { + gUnknown_082EF814, + gUnknown_082EF844, + gUnknown_082EF874, + gUnknown_082EF8A4, + gUnknown_082EF940, + gUnknown_082EF974, + gUnknown_082EF99C, + gUnknown_082EF8D0, + gUnknown_082EF908, + NULL, + NULL, + NULL, + gUnknown_082EF9F8, + gUnknown_082EF9CC, + NULL, + gUnknown_082EFA24, + gUnknown_082EFA50, + gUnknown_082EFA7C, + gUnknown_082EFAA8, + gUnknown_082EFAD8, + gUnknown_082EFB08, + gUnknown_082EFB3C +}; + +ALIGNED(4) const u8 gUnknown_082EFBC8[] = _("Searching for a WIRELESS\nCOMMUNICATION SYSTEM. Wait..."); +ALIGNED(4) const u8 unref_text_union_room_12[] = _("For a DOUBLE BATTLE, you must have\nat least two POKéMON.\p"); +ALIGNED(4) const u8 gUnknown_082EFC3C[] = _("Awaiting {STR_VAR_1}'s response…"); +ALIGNED(4) const u8 gUnknown_082EFC54[] = _("{STR_VAR_1} has been asked to register\nyou as a member. Please wait."); +ALIGNED(4) const u8 gUnknown_082EFC90[] = _("Awaiting a response from the\nWIRELESS COMMUNICATION SYSTEM."); +ALIGNED(4) const u8 unref_text_union_room_13[] = _("Please wait for other TRAINERS to\ngather and get ready."); +ALIGNED(4) const u8 gUnknown_082EFD04[] = _("No CARDS appear to be shared \nright now."); +ALIGNED(4) const u8 gUnknown_082EFD30[] = _("No NEWS appears to be shared\nright now."); + +const u8 *const gUnknown_082EFD58[] = { + gUnknown_082EFD04, + gUnknown_082EFD30 +}; + +ALIGNED(4) const u8 gUnknown_082EFD60[] = _("BATTLE"); +ALIGNED(4) const u8 gUnknown_082EFD68[] = _("CHAT"); +ALIGNED(4) const u8 gUnknown_082EFD70[] = _("GREETINGS"); +ALIGNED(4) const u8 gUnknown_082EFD7C[] = _("EXIT"); +ALIGNED(4) const u8 gUnknown_082EFD84[] = _("EXIT"); +ALIGNED(4) const u8 gUnknown_082EFD8C[] = _("INFO"); +ALIGNED(4) const u8 gUnknown_082EFD94[] = _("NAME{CLEAR_TO 0x3C}WANTED{CLEAR_TO 0x6E}OFFER{CLEAR_TO 0xC6}LV."); +ALIGNED(4) const u8 gUnknown_082EFDB0[] = _("SINGLE BATTLE"); +ALIGNED(4) const u8 gUnknown_082EFDC0[] = _("DOUBLE BATTLE"); +ALIGNED(4) const u8 gUnknown_082EFDD0[] = _("MULTI BATTLE"); +ALIGNED(4) const u8 gUnknown_082EFDE0[] = _("POKéMON TRADES"); +ALIGNED(4) const u8 gUnknown_082EFDF0[] = _("CHAT"); +ALIGNED(4) const u8 gUnknown_082EFDF8[] = _("CARDS"); +ALIGNED(4) const u8 gUnknown_082EFE00[] = _("WONDER CARDS"); +ALIGNED(4) const u8 gUnknown_082EFE10[] = _("WONDER NEWS"); +ALIGNED(4) const u8 gUnknown_082EFE1C[] = _("POKéMON JUMP"); +ALIGNED(4) const u8 gUnknown_082EFE2C[] = _("BERRY CRUSH"); +ALIGNED(4) const u8 gUnknown_082EFE38[] = _("BERRY-PICKING"); +ALIGNED(4) const u8 gUnknown_082EFE48[] = _("SEARCH"); +ALIGNED(4) const u8 gUnknown_082EFE50[] = _("BERRY BLENDER"); +ALIGNED(4) const u8 gUnknown_082EFE60[] = _("RECORD CORNER"); +ALIGNED(4) const u8 gUnknown_082EFE70[] = _("COOL CONTEST"); +ALIGNED(4) const u8 gUnknown_082EFE80[] = _("BEAUTY CONTEST"); +ALIGNED(4) const u8 gUnknown_082EFE90[] = _("CUTE CONTEST"); +ALIGNED(4) const u8 gUnknown_082EFEA0[] = _("SMART CONTEST"); +ALIGNED(4) const u8 gUnknown_082EFEB0[] = _("TOUGH CONTEST"); +ALIGNED(4) const u8 gUnknown_082EFEC0[] = _("BATTLE TOWER LV. 50"); +ALIGNED(4) const u8 gUnknown_082EFED4[] = _("BATTLE TOWER OPEN LEVEL"); +ALIGNED(4) const u8 gUnknown_082EFEEC[] = _("It's a NORMAL CARD."); +ALIGNED(4) const u8 gUnknown_082EFF00[] = _("It's a BRONZE CARD!"); +ALIGNED(4) const u8 gUnknown_082EFF14[] = _("It's a COPPER CARD!"); +ALIGNED(4) const u8 gUnknown_082EFF28[] = _("It's a SILVER CARD!"); +ALIGNED(4) const u8 gUnknown_082EFF3C[] = _("It's a GOLD CARD!"); + +const u8 *const gUnknown_082EFF50[] = { + gUnknown_082EFEEC, + gUnknown_082EFF00, + gUnknown_082EFF14, + gUnknown_082EFF28, + gUnknown_082EFF3C +}; + +ALIGNED(4) const u8 gUnknown_082EFF64[] = _("This is {SPECIAL_F7 0x00} {SPECIAL_F7 0x01}'s\nTRAINER CARD…\l{SPECIAL_F7 0x02}\pPOKéDEX: {SPECIAL_F7 0x03}\nTIME: {SPECIAL_F7 0x04}:{SPECIAL_F7 0x05}\p"); +ALIGNED(4) const u8 gUnknown_082EFFA4[] = _("BATTLES: WINS: {SPECIAL_F7 0x00} LOSSES: {SPECIAL_F7 0x02}\nTRADES: {SPECIAL_F7 0x03}\p“{SPECIAL_F7 0x04} {SPECIAL_F7 0x05}\n{SPECIAL_F7 0x06} {SPECIAL_F7 0x07}”\p"); +ALIGNED(4) const u8 gUnknown_082EFFDC[] = _("{SPECIAL_F7 0x01}: Glad to have met you!{PAUSE 60}"); +ALIGNED(4) const u8 gUnknown_082EFFFC[] = _("{SPECIAL_F7 0x01}: Glad to meet you!{PAUSE 60}"); + +const u8 *const gUnknown_082F0018[] = { + gUnknown_082EFFDC, + gUnknown_082EFFFC +}; + +ALIGNED(4) const u8 gUnknown_082F0020[] = _("Finished checking {SPECIAL_F7 0x01}'s\nTRAINER CARD.{PAUSE 60}"); + +const u8 *const gUnknown_082F0048[] = { + gText_EmptyString, + gUnknown_082EFDB0, + gUnknown_082EFDC0, + gUnknown_082EFDD0, + gUnknown_082EFDE0, + gUnknown_082EFDF0, + gUnknown_082EFE00, + gUnknown_082EFE10, + gUnknown_082EFDF8, + gUnknown_082EFE1C, + gUnknown_082EFE2C, + gUnknown_082EFE38, + gUnknown_082EFE48, + gText_EmptyString, + gUnknown_082EFED4, + gUnknown_082EFE60, + gUnknown_082EFE50, + gText_EmptyString, + gText_EmptyString, + gText_EmptyString, + gText_EmptyString, + gUnknown_082EFE00, + gUnknown_082EFE10, + gUnknown_082EFE70, + gUnknown_082EFE80, + gUnknown_082EFE90, + gUnknown_082EFEA0, + gUnknown_082EFEB0, + gUnknown_082EFEC0 +}; + +const struct WindowTemplate gUnknown_082F00BC = { + .bg = 0x00, + .tilemapLeft = 0x00, + .tilemapTop = 0x00, + .width = 0x1E, + .height = 0x02, + .paletteNum = 0x0F, + .baseBlock = 0x0008 +}; + +const u32 gUnknown_082F00C4[] = { + 0x0201, + 0x0202, + 0x0403, + 0x0204, + 0x2509, + 0x250a, + 0x350b, + 0x0000, + 0x0000, + 0x0000, + 0x0000, + 0x0000, + 0x240f, + 0x2410, + 0x0000, + 0x2417, + 0x2418, + 0x2419, + 0x241a, + 0x241b, + 0x021c, + 0x020e +}; + +const struct WindowTemplate gUnknown_082F011C = { + .bg = 0x00, + .tilemapLeft = 0x01, + .tilemapTop = 0x03, + .width = 0x0d, + .height = 0x08, + .paletteNum = 0x0f, + .baseBlock = 0x0044 +}; + +const struct WindowTemplate gUnknown_082F0124 = { + .bg = 0x00, + .tilemapLeft = 0x01, + .tilemapTop = 0x03, + .width = 0x0d, + .height = 0x0a, + .paletteNum = 0x0f, + .baseBlock = 0x0044 +}; + +const struct WindowTemplate gUnknown_082F012C = { + .bg = 0x00, + .tilemapLeft = 0x10, + .tilemapTop = 0x03, + .width = 0x07, + .height = 0x04, + .paletteNum = 0x0f, + .baseBlock = 0x00c6 +}; + +const struct ListMenuItem gUnknown_082F0134[] = { + { gText_EmptyString, 0 }, + { gText_EmptyString, 1 }, + { gText_EmptyString, 2 }, + { gText_EmptyString, 3 }, + { gText_EmptyString, 4 } +}; + +const struct ListMenuTemplate gUnknown_082F015C = { + .items = gUnknown_082F0134, + .moveCursorFunc = NULL, + .itemPrintFunc = sub_8013278, + .totalItems = 5, + .maxShowed = 5, + .windowId = 0, + .header_X = 0, + .item_X = 0, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 0, + .scrollMultiple = 0, + .fontId = 1, + .cursorKind = 1 +}; + +const struct WindowTemplate gUnknown_082F0174 = { + .bg = 0x00, + .tilemapLeft = 0x01, + .tilemapTop = 0x03, + .width = 0x11, + .height = 0x0a, + .paletteNum = 0x0f, + .baseBlock = 0x0044 +}; + +const struct WindowTemplate gUnknown_082F017C = { + .bg = 0x00, + .tilemapLeft = 0x14, + .tilemapTop = 0x03, + .width = 0x07, + .height = 0x04, + .paletteNum = 0x0f, + .baseBlock = 0x00ee +}; + +const struct ListMenuItem gUnknown_082F0184[] = { + { gText_EmptyString, 0 }, + { gText_EmptyString, 1 }, + { gText_EmptyString, 2 }, + { gText_EmptyString, 3 }, + { gText_EmptyString, 4 }, + { gText_EmptyString, 5 }, + { gText_EmptyString, 6 }, + { gText_EmptyString, 7 }, + { gText_EmptyString, 8 }, + { gText_EmptyString, 9 }, + { gText_EmptyString, 10 }, + { gText_EmptyString, 11 }, + { gText_EmptyString, 12 }, + { gText_EmptyString, 13 }, + { gText_EmptyString, 14 }, + { gText_EmptyString, 15 } +}; + +const struct ListMenuTemplate gUnknown_082F0204 = { + .items = gUnknown_082F0184, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = sub_8013DF4, + .totalItems = 16, + .maxShowed = 5, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 0, + .scrollMultiple = 1, + .fontId = 1, + .cursorKind = 0 +}; + +const struct WindowTemplate gUnknown_082F021C = { + .bg = 0x00, + .tilemapLeft = 0x14, + .tilemapTop = 0x05, + .width = 0x10, + .height = 0x08, + .paletteNum = 0x0f, + .baseBlock = 0x0001 +}; + +const struct ListMenuItem gUnknown_082F0224[] = { + { gUnknown_082EFD70, 0x208 }, + { gUnknown_082EFD60, 0x241 }, + { gUnknown_082EFD68, 0x245 }, + { gUnknown_082EFD7C, 0x040 } +}; + +const struct ListMenuTemplate gUnknown_082F0244 = { + .items = gUnknown_082F0224, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = NULL, + .totalItems = 4, + .maxShowed = 4, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 0, + .scrollMultiple = 0, + .fontId = 1, + .cursorKind = 0 +}; + +const struct WindowTemplate gUnknown_082F025C = { + .bg = 0x00, + .tilemapLeft = 0x12, + .tilemapTop = 0x07, + .width = 0x10, + .height = 0x06, + .paletteNum = 0x0f, + .baseBlock = 0x0001 +}; + +const struct ListMenuItem gUnknown_082F0264[] = { + { gText_Register, 1 }, + { gUnknown_082EFD8C, 2 }, + { gUnknown_082EFD7C, 3 } +}; + +const struct ListMenuTemplate gUnknown_082F027C = { + .items = gUnknown_082F0264, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = NULL, + .totalItems = 3, + .maxShowed = 3, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 0, + .scrollMultiple = 0, + .fontId = 1, + .cursorKind = 0 +}; + +const struct WindowTemplate gUnknown_082F0294 = { + .bg = 0x00, + .tilemapLeft = 0x14, + .tilemapTop = 0x01, + .width = 0x10, + .height = 0x0c, + .paletteNum = 0x0f, + .baseBlock = 0x0001 +}; + +const struct ListMenuItem gUnknown_082F029C[] = { + { gTypeNames[TYPE_NORMAL], TYPE_NORMAL }, + { gTypeNames[TYPE_FIRE], TYPE_FIRE }, + { gTypeNames[TYPE_WATER], TYPE_WATER }, + { gTypeNames[TYPE_ELECTRIC], TYPE_ELECTRIC }, + { gTypeNames[TYPE_GRASS], TYPE_GRASS }, + { gTypeNames[TYPE_ICE], TYPE_ICE }, + { gTypeNames[TYPE_GROUND], TYPE_GROUND }, + { gTypeNames[TYPE_ROCK], TYPE_ROCK }, + { gTypeNames[TYPE_FLYING], TYPE_FLYING }, + { gTypeNames[TYPE_PSYCHIC], TYPE_PSYCHIC }, + { gTypeNames[TYPE_FIGHTING], TYPE_FIGHTING }, + { gTypeNames[TYPE_POISON], TYPE_POISON }, + { gTypeNames[TYPE_BUG], TYPE_BUG }, + { gTypeNames[TYPE_GHOST], TYPE_GHOST }, + { gTypeNames[TYPE_DRAGON], TYPE_DRAGON }, + { gTypeNames[TYPE_STEEL], TYPE_STEEL }, + { gTypeNames[TYPE_DARK], TYPE_DARK }, + { gUnknown_082EFD7C, NUMBER_OF_MON_TYPES } +}; + +const struct ListMenuTemplate gUnknown_082F032C = { + .items = gUnknown_082F029C, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = NULL, + .totalItems = NUMBER_OF_MON_TYPES, + .maxShowed = 6, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 0, + .scrollMultiple = 0, + .fontId = 1, + .cursorKind = 0 +}; + +const struct WindowTemplate gUnknown_082F0344 = { + .bg = 0x00, + .tilemapLeft = 0x01, + .tilemapTop = 0x01, + .width = 0x1c, + .height = 0x02, + .paletteNum = 0x0d, + .baseBlock = 0x0001 +}; + +const struct WindowTemplate gUnknown_082F034C = { + .bg = 0x00, + .tilemapLeft = 0x01, + .tilemapTop = 0x05, + .width = 0x1c, + .height = 0x0c, + .paletteNum = 0x0d, + .baseBlock = 0x0039 +}; + +const struct ListMenuItem gUnknown_082F0354[] = { + { gText_EmptyString, -3 }, + { gText_EmptyString, 0 }, + { gText_EmptyString, 1 }, + { gText_EmptyString, 2 }, + { gText_EmptyString, 3 }, + { gText_EmptyString, 4 }, + { gText_EmptyString, 5 }, + { gText_EmptyString, 6 }, + { gText_EmptyString, 7 }, + { gUnknown_082EFD84, 8 } +}; + +const struct ListMenuTemplate gUnknown_082F03A4 = { + .items = gUnknown_082F0354, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = sub_8017BE8, + .totalItems = 10, + .maxShowed = 6, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 14, + .fillValue = 15, + .cursorShadowPal = 13, + .lettersSpacing = 0, + .itemVerticalPadding = 0, + .scrollMultiple = 0, + .fontId = 1, + .cursorKind = 0 +}; + +const struct WindowTemplate UnrefWindowTemplate_082F03B4 = { + .bg = 0x00, + .tilemapLeft = 0x01, + .tilemapTop = 0x05, + .width = 0x1c, + .height = 0x0c, + .paletteNum = 0x0d, + .baseBlock = 0x0039 +}; + +const struct ListMenuItem gUnknown_082F03C4[] = { + { gText_EmptyString, 0 }, + { gText_EmptyString, 1 }, + { gText_EmptyString, 2 }, + { gText_EmptyString, 3 }, + { gText_EmptyString, 4 }, + { gText_EmptyString, 5 }, + { gText_EmptyString, 6 }, + { gText_EmptyString, 7 }, + { gText_EmptyString, 8 }, + { gText_EmptyString, 9 }, + { gText_EmptyString, 10 }, + { gText_EmptyString, 11 }, + { gText_EmptyString, 12 }, + { gText_EmptyString, 13 }, + { gText_EmptyString, 14 }, + { gText_EmptyString, 15 } +}; + +const struct ListMenuTemplate UnrefListMenuTemplate_082F0444 = { + .items = gUnknown_082F03C4, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = nullsub_14, + .totalItems = 16, + .maxShowed = 4, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 0, + .scrollMultiple = 1, + .fontId = 1, + .cursorKind = 0 +}; + +const struct UnkStruct_Shared gUnknown_082F045C = {0}; + +ALIGNED(4) const u8 gUnknown_082F0474[] = {0x01, 0xff}; +ALIGNED(4) const u8 gUnknown_082F0478[] = {0x02, 0xff}; +ALIGNED(4) const u8 gUnknown_082F047C[] = {0x03, 0xff}; +ALIGNED(4) const u8 gUnknown_082F0480[] = {0x04, 0xff}; +ALIGNED(4) const u8 gUnknown_082F0484[] = {0x09, 0xff}; +ALIGNED(4) const u8 gUnknown_082F0488[] = {0x0a, 0xff}; +ALIGNED(4) const u8 gUnknown_082F048C[] = {0x0b, 0xff}; +ALIGNED(4) const u8 gUnknown_082F0490[] = {0x15, 0xff}; +ALIGNED(4) const u8 gUnknown_082F0494[] = {0x16, 0xff}; +ALIGNED(4) const u8 gUnknown_082F0498[] = {0x40, 0x41, 0x44, 0x45, 0x48, 0x51, 0x52, 0x53, 0x54, 0xff}; +ALIGNED(4) const u8 gUnknown_082F04A4[] = {0x0c, 0xff}; +ALIGNED(4) const u8 gUnknown_082F04A8[] = {0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x15, 0x16, 0x0d, 0xff}; +ALIGNED(4) const u8 gUnknown_082F04B4[] = {0x0f, 0xff}; +ALIGNED(4) const u8 gUnknown_082F04B8[] = {0x10, 0xff}; +ALIGNED(4) const u8 gUnknown_082F04BC[] = {0x17, 0xff}; +ALIGNED(4) const u8 gUnknown_082F04C0[] = {0x18, 0xff}; +ALIGNED(4) const u8 gUnknown_082F04C4[] = {0x19, 0xff}; +ALIGNED(4) const u8 gUnknown_082F04C8[] = {0x1a, 0xff}; +ALIGNED(4) const u8 gUnknown_082F04CC[] = {0x1b, 0xff}; +ALIGNED(4) const u8 gUnknown_082F04D0[] = {0x1c, 0xff}; +ALIGNED(4) const u8 gUnknown_082F04D4[] = {0x0e, 0xff}; + +const u8 *const gUnknown_082F04D8[] = { + gUnknown_082F0474, + gUnknown_082F0478, + gUnknown_082F047C, + gUnknown_082F0480, + gUnknown_082F0484, + gUnknown_082F0488, + gUnknown_082F048C, + gUnknown_082F0490, + gUnknown_082F0494, + gUnknown_082F0498, + gUnknown_082F04A4, + gUnknown_082F04A8, + gUnknown_082F04B4, + gUnknown_082F04B8, + NULL, + gUnknown_082F04BC, + gUnknown_082F04C0, + gUnknown_082F04C4, + gUnknown_082F04C8, + gUnknown_082F04CC, + gUnknown_082F04D0, + gUnknown_082F04D4 +}; + +const u8 gUnknown_082F0530[] = { + 0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x15, + 0x16, 0x00, 0x00, 0x00, 0x0f, 0x10, 0x00, 0x17, + 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x0e, 0x00, 0x00 +}; // code void nullsub_89(void) @@ -930,7 +1872,7 @@ bool8 sub_801320C(struct UnkStruct_Leader *data, u32 arg1, u32 arg2) return FALSE; } -void sub_8013278(u8 arg0, u32 id, u8 arg2) +void sub_8013278(u8 arg0, s32 id, u8 arg2) { struct UnkStruct_Leader *data = gUnknown_02022C30.leader; u8 var = 0; @@ -1435,7 +2377,7 @@ u8 sub_8013DBC(struct UnkStruct_Group *data, u32 id) return 0; } -void sub_8013DF4(u8 arg0, u32 id, u8 arg2) +void sub_8013DF4(u8 arg0, s32 id, u8 arg2) { struct UnkStruct_Group *data = gUnknown_02022C30.group; u8 var = sub_8013DBC(data, id); @@ -4220,3 +5162,53 @@ u32 sub_80179AC(struct UnkStruct_x20 *arg0) sub_8018404(sp0, arg0); return sub_800E540(ReadAsU16(arg0->unk.field_0.unk_00.playerTrainerId), sp0); } + +s32 sub_80179D4(struct UnkStruct_Main0 *arg0, u8 arg1, u8 arg2, u32 playerGender) +{ + bool32 r2; + + struct UnkStruct_x20 * r5 = &arg0->arr[arg2]; + + if (!r5->unk.field_0.unk_0a_7 && arg1 == 0) + { + sub_8018404(gStringVar1, r5); + r2 = sub_800E540(ReadAsU16(r5->unk.field_0.unk_00.playerTrainerId), gStringVar1); + if (r5->unk.field_0.unk_0a_0 == 0x45) + { + StringExpandPlaceholders(gStringVar4, gUnknown_082EE6B8[r2][playerGender]); + return 2; + } + else + { + sub_8017020(gUnknown_082EE17C[r2]); + return 1; + } + } + else + { + sub_8018404(gStringVar1, r5); + if (arg1 != 0) + { + playerGender = (r5->unk.field_0.unk_00.playerTrainerId[arg1 + 1] >> 3) & 1; + } + switch (r5->unk.field_0.unk_0a_0 & 0x3F) + { + case 1: + StringExpandPlaceholders(gStringVar4, gUnknown_082EEEAC[playerGender][Random() % 4]); + break; + case 4: + StringExpandPlaceholders(gStringVar4, gUnknown_082EF1CC[playerGender][Random() % 2]); + break; + case 5: + StringExpandPlaceholders(gStringVar4, gUnknown_082EF010[playerGender][Random() % 4]); + break; + case 8: + StringExpandPlaceholders(gStringVar4, gUnknown_082EF100[playerGender][Random() % 2]); + break; + default: + StringExpandPlaceholders(gStringVar4, gUnknown_082EE6C8); + break; + } + return 0; + } +} -- cgit v1.2.3 From 8fc51b045941324c210096ccdbd385f7bfb0f6a6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 29 Mar 2019 15:50:04 -0400 Subject: through sub_8017CB0 --- src/union_room.c | 384 ++++++++++++++----------------------------------------- 1 file changed, 94 insertions(+), 290 deletions(-) (limited to 'src') diff --git a/src/union_room.c b/src/union_room.c index a4a728a3b..fdd76221f 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -39,160 +39,17 @@ #include "field_player_avatar.h" #include "strings.h" #include "mevent.h" - -struct UnkStruct_Shared -{ - struct UnkLinkRfuStruct_02022B14 field_0; - u8 needingPadding[2]; - u8 playerName[PLAYER_NAME_LENGTH + 1]; -}; - -struct UnkStruct_x1C -{ - struct UnkStruct_Shared unk0; - u8 unk18:1; -}; - -struct UnkStruct_x20 -{ - struct UnkStruct_Shared unk; - u16 field_18; - u8 field_1A_0:2; - u8 field_1A_1:1; - u8 field_1B; - u8 field_1D; - u8 field_1E; - u8 field_1F; -}; - -struct UnkStruct_Main0 -{ - struct UnkStruct_x20 arr[8]; -}; - -struct UnkStruct_Main4 -{ - struct UnkStruct_x1C arr[5]; -}; - -struct UnkStruct_Main8 -{ - struct UnkStruct_x20 arr[5]; -}; - -struct UnkStruct_Leader -{ - struct UnkStruct_Main0 *field_0; - struct UnkStruct_Main4 *field_4; - struct UnkStruct_Main8 *field_8; - u8 state; - u8 textState; - u8 field_E; - u8 listWindowId; - u8 field_10; - u8 field_11; - u8 listTaskId; - u8 field_13; - u8 field_14; - u8 field_15; - u8 field_16; - u8 field_17; - u8 field_18; - u8 field_19; - u16 field_1A; -}; - -struct UnkStruct_Group -{ - struct UnkStruct_Main0 *field_0; - struct UnkStruct_Main4 *field_4; - u8 state; - u8 textState; - u8 field_A; - u8 listWindowId; - u8 field_C; - u8 field_D; - u8 listTaskId; - u8 field_F; - u8 field_10; - u8 field_11; - u8 field_12; - u8 field_13; - u8 field_14; - u8 field_15; -}; - -struct UnkStruct_8019BA8 -{ - u8 field_0; - u8 field_1; - u8 field_2; - u8 field_3; -}; - -struct UnkStruct_URoom -{ - struct UnkStruct_Main0 *field_0; - struct UnkStruct_Main4 *field_4; - struct UnkStruct_Main0 *field_8; - struct UnkStruct_Main4 *field_C; - u16 field_10; - u16 field_12; - u8 state; - u8 stateAfterPrint; - u8 textState; - u8 field_17; - u8 field_18; - u8 field_19; - u8 field_1A; - u8 field_1B; - u8 field_1C; - u8 field_1D; - u8 field_1E; - u8 field_1F; - u8 field_20; - u8 spriteIds[40]; - u8 field_49; - u8 field_4A; - u16 field_4C[6]; - u8 field_58[0x98 - 0x58]; - u16 field_98; - u16 field_9A[3]; - struct UnkStruct_8019BA8 field_A0[8]; -}; - -union UnkUnion_Main -{ - struct UnkStruct_Leader *leader; - struct UnkStruct_Group *group; - struct UnkStruct_URoom *uRoom; -}; - -struct TradeUnkStruct -{ - u16 field_0; - u16 field_2; - u32 field_4; - u8 field_8; - u8 field_9; - u16 field_A; - u16 field_C; - u16 species; - u16 level; - u16 field_12; - u32 personality; -}; - -extern struct TradeUnkStruct gUnknown_02022C40; -extern struct UnkLinkRfuStruct_02022B14Substruct gUnknown_02022C38; -extern union UnkUnion_Main gUnknown_02022C30; -extern u8 gUnknown_02022C2C; -extern u8 gUnknown_02022C2D; -extern u8 gUnknown_02022C3E; -extern u16 gUnknown_02022C3C; -extern u8 gUnknown_02022C20[]; -extern u8 gFieldLinkPlayerCount; -extern u8 gLocalLinkPlayerId; +#include "rom_8011DC0.h" + +EWRAM_DATA u8 gUnknown_02022C20[12] = {}; +EWRAM_DATA u8 gUnknown_02022C2C = 0; +EWRAM_DATA u8 gUnknown_02022C2D = 0; +EWRAM_DATA union UnkUnion_Main gUnknown_02022C30 = {}; +EWRAM_DATA u32 gFiller_02022C34 = 0; +EWRAM_DATA struct UnkLinkRfuStruct_02022B14Substruct gUnknown_02022C38 = {}; +EWRAM_DATA u16 gUnknown_02022C3C = 0; +EWRAM_DATA u8 gUnknown_02022C3E = 0; +EWRAM_DATA struct TradeUnkStruct gUnknown_02022C40 = {}; // IWRAM vars IWRAM_DATA struct UnkStruct_Leader *gUnknown_03000DA0; @@ -268,7 +125,7 @@ void sub_801818C(bool32 arg0); void sub_801A3D0(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2); s32 sub_8017178(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate); s32 sub_80172A0(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate, struct UnkStruct_Main0 *arg6); -s32 sub_8017CB0(struct UnkStruct_Main0 * arg); +s32 sub_8017CB0(struct UnkStruct_x20 * arg, s32 arg1); bool32 sub_8018024(void); u32 sub_8017984(s32 arg0); void sub_8018220(u8 *unused, struct UnkStruct_URoom *arg1, bool8 arg2); @@ -1326,7 +1183,7 @@ const u8 gUnknown_082F0530[] = { }; // code -void nullsub_89(void) +void nullsub_89(u8 taskId) { } @@ -4692,7 +4549,6 @@ s32 sub_8017178(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate *winTe return -1; } -#ifdef NONMATCHING s32 sub_80172A0(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate, struct UnkStruct_Main0 *arg6) { s32 input; @@ -4728,7 +4584,7 @@ s32 sub_80172A0(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTempl } else { - r4 = sub_8017CB0(arg6); + r4 = sub_8017CB0(arg6->arr, input); if (r4 >= 0) { DestroyListMenuTask(*arg2, NULL, NULL); @@ -4748,138 +4604,6 @@ s32 sub_80172A0(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTempl return -1; } -#else -NAKED -s32 sub_80172A0(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate, struct UnkStruct_Main0 *arg6) -{ - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tadds r5, r0, 0\n" - "\tadds r6, r1, 0\n" - "\tmov r10, r2\n" - "\tmov r9, r3\n" - "\tldrb r4, [r5]\n" - "\tcmp r4, 0x1\n" - "\tbeq _0801730C\n" - "\tcmp r4, 0x1\n" - "\tbgt _080172C2\n" - "\tcmp r4, 0\n" - "\tbeq _080172C8\n" - "\tb _0801739C\n" - "_080172C2:\n" - "\tcmp r4, 0x2\n" - "\tbeq _0801731C\n" - "\tb _0801739C\n" - "_080172C8:\n" - "\tldr r0, =gUnknown_082F0344\n" - "\tbl sub_8017118\n" - "\tmov r1, r9\n" - "\tstrb r0, [r1]\n" - "\tldr r0, [sp, 0x20]\n" - "\tbl AddWindow\n" - "\tstrb r0, [r6]\n" - "\tldrb r0, [r6]\n" - "\tmovs r1, 0\n" - "\tbl DrawStdWindowFrame\n" - "\tldr r0, =gMultiuseListMenuTemplate\n" - "\tadds r2, r0, 0\n" - "\tldr r1, [sp, 0x24]\n" - "\tldm r1!, {r3,r4,r7}\n" - "\tstm r2!, {r3,r4,r7}\n" - "\tldm r1!, {r3,r4,r7}\n" - "\tstm r2!, {r3,r4,r7}\n" - "\tldrb r1, [r6]\n" - "\tstrb r1, [r0, 0x10]\n" - "\tmovs r1, 0\n" - "\tmovs r2, 0x1\n" - "\tbl ListMenuInit\n" - "\tmov r1, r10\n" - "\tstrb r0, [r1]\n" - "\tb _08017314\n" - "\t.pool\n" - "_0801730C:\n" - "\tldrb r0, [r6]\n" - "\tmovs r1, 0x1\n" - "\tbl CopyWindowToVram\n" - "_08017314:\n" - "\tldrb r0, [r5]\n" - "\tadds r0, 0x1\n" - "\tstrb r0, [r5]\n" - "\tb _0801739C\n" - "_0801731C:\n" - "\tmov r3, r10\n" - "\tldrb r0, [r3]\n" - "\tbl ListMenu_ProcessInput\n" - "\tadds r1, r0, 0\n" - "\tldr r0, =gMain\n" - "\tldrh r2, [r0, 0x2E]\n" - "\tmovs r0, 0x3\n" - "\tands r0, r2\n" - "\tcmp r0, 0\n" - "\tbeq _0801739C\n" - "\tcmp r1, 0x8\n" - "\tbeq _0801733E\n" - "\tands r4, r2\n" - "\tmov r8, r4\n" - "\tcmp r4, 0\n" - "\tbeq _08017368\n" - "_0801733E:\n" - "\tmov r4, r10\n" - "\tldrb r0, [r4]\n" - "\tmovs r1, 0\n" - "\tmovs r2, 0\n" - "\tbl DestroyListMenuTask\n" - "\tldrb r0, [r6]\n" - "\tbl RemoveWindow\n" - "\tmov r7, r9\n" - "\tldrb r0, [r7]\n" - "\tbl sub_8017168\n" - "\tmovs r0, 0\n" - "\tstrb r0, [r5]\n" - "\tmovs r0, 0x2\n" - "\tnegs r0, r0\n" - "\tb _080173A0\n" - "\t.pool\n" - "_08017368:\n" - "\tldr r0, [sp, 0x28]\n" - "\tbl sub_8017CB0\n" - "\tadds r4, r0, 0\n" - "\tcmp r4, 0\n" - "\tblt _08017396\n" - "\tmov r1, r10\n" - "\tldrb r0, [r1]\n" - "\tmovs r1, 0\n" - "\tmovs r2, 0\n" - "\tbl DestroyListMenuTask\n" - "\tldrb r0, [r6]\n" - "\tbl RemoveWindow\n" - "\tmov r3, r9\n" - "\tldrb r0, [r3]\n" - "\tbl sub_8017168\n" - "\tmov r7, r8\n" - "\tstrb r7, [r5]\n" - "\tadds r0, r4, 0\n" - "\tb _080173A0\n" - "_08017396:\n" - "\tmovs r0, 0x7\n" - "\tbl PlaySE\n" - "_0801739C:\n" - "\tmovs r0, 0x1\n" - "\tnegs r0, r0\n" - "_080173A0:\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r1}\n" - "\tbx r1"); -} -#endif - void sub_80173B0(void) { FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0); @@ -5212,3 +4936,83 @@ s32 sub_80179D4(struct UnkStruct_Main0 *arg0, u8 arg1, u8 arg2, u32 playerGender return 0; } } + +void nullsub_14(u8 windowId, s32 itemId, u8 y) +{ + +} + +void sub_8017B3C(u8 arg0, u8 arg1, struct UnkLinkRfuStruct_02022B14 * arg2, const u8 * str, u8 arg4) +{ + u8 sp8[4]; + u16 r8 = arg2->species; + u8 r7 = arg2->type; + u8 r9 = arg2->unk_0b_1; + + sub_80173E0(arg0, 1, str, 8, arg1, arg4); + if (r8 == SPECIES_EGG) + { + sub_80173E0(arg0, 1, gUnknown_082EF7D0, 0x44, arg1, arg4); + } + else + { + blit_move_info_icon(arg0, r7 + 1, 0x44, arg1); + sub_80173E0(arg0, 1, gSpeciesNames[r8], 0x76, arg1, arg4); + ConvertIntToDecimalStringN(sp8, r9, STR_CONV_MODE_RIGHT_ALIGN, 3); + sub_80173E0(arg0, 1, sp8, 0xC6, arg1, arg4); + } +} + +void sub_8017BE8(u8 windowId, s32 itemId, u8 y) +{ + struct UnkStruct_Leader *leader = gUnknown_02022C30.leader; + struct UnkLinkRfuStruct_02022B14 *rfu; + s32 i, j; + u8 sp4[11]; + + if (itemId == -3 && y == gUnknown_082F03A4.upText_Y) + { + rfu = sub_800F7DC(); + if (rfu->species != SPECIES_NONE) + { + sub_8017B3C(windowId, y, rfu, gSaveBlock2Ptr->playerName, 5); + } + } + else + { + j = 0; + for (i = 0; i < 8; i++) + { + if (leader->field_0->arr[i].field_1A_0 == 1 && leader->field_0->arr[i].unk.field_0.species != SPECIES_NONE) + { + j++; + } + if (j == itemId + 1) + { + sub_8018404(sp4, &leader->field_0->arr[i]); + sub_8017B3C(windowId, y, &leader->field_0->arr[i].unk.field_0, sp4, 6); + break; + } + } + } +} + +s32 sub_8017CB0(struct UnkStruct_x20 * arg, s32 arg1) +{ + s32 i; + s32 j = 0; + + for (i = 0; i < 8; i++) + { + if (arg[i].field_1A_0 == 1 && arg[i].unk.field_0.species != SPECIES_NONE) + { + j++; + } + if (j == arg1 + 1) + { + return i; + } + } + + return -1; +} -- cgit v1.2.3 From bf4a73a67cca44a01b8449aafb0d717551415a6b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 29 Mar 2019 16:24:48 -0400 Subject: through sub_8017E00 --- src/union_room.c | 109 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 93 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/union_room.c b/src/union_room.c index fdd76221f..078bf9887 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -129,7 +129,7 @@ s32 sub_8017CB0(struct UnkStruct_x20 * arg, s32 arg1); bool32 sub_8018024(void); u32 sub_8017984(s32 arg0); void sub_8018220(u8 *unused, struct UnkStruct_URoom *arg1, bool8 arg2); -void sub_8017D9C(u8 *dst, u32 arg1, u32 playerGender); +void sub_8017D9C(u8 *dst, s32 arg1, u32 playerGender); u32 sub_80179AC(struct UnkStruct_x20 *arg0); void sub_8017E00(u8 *dst, u8 arg1); void sub_8019F04(u8 *spriteIds); @@ -423,23 +423,27 @@ ALIGNED(4) const u8 gUnknown_082EE92C[] = _("The trade will be started.{PAUSE 60 ALIGNED(4) const u8 gUnknown_082EE94C[] = _("The battle will be started.{PAUSE 60}"); ALIGNED(4) const u8 gUnknown_082EE96C[] = _("Entering the chat…{PAUSE 60}"); -const u8 *const gUnknown_082EE984[][3] = { +const u8 *const gUnknown_082EE984[][2][3] = { { - gUnknown_082EE94C, - gUnknown_082EE96C, - gUnknown_082EE92C - }, { - gUnknown_082EE94C, - gUnknown_082EE96C, - gUnknown_082EE92C - }, { - gUnknown_082EE880, - gUnknown_082EE8B8, - gUnknown_082EE92C + { + gUnknown_082EE94C, + gUnknown_082EE96C, + gUnknown_082EE92C + }, { + gUnknown_082EE94C, + gUnknown_082EE96C, + gUnknown_082EE92C + } }, { - gUnknown_082EE8D4, - gUnknown_082EE904, - gUnknown_082EE92C + { + gUnknown_082EE880, + gUnknown_082EE8B8, + gUnknown_082EE92C + }, { + gUnknown_082EE8D4, + gUnknown_082EE904, + gUnknown_082EE92C + } } }; @@ -5016,3 +5020,76 @@ s32 sub_8017CB0(struct UnkStruct_x20 * arg, s32 arg1) return -1; } + +s32 sub_8017CF8(s32 arg1, struct UnkStruct_Main0 *arg0) +{ + return arg0->arr[arg1].unk.field_0.playerGender; +} + +s32 sub_8017D04(u32 type, u32 species) +{ + s32 i; + + if (species == SPECIES_EGG) + { + for (i = 0; i < gPlayerPartyCount; i++) + { + species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + if (species == SPECIES_EGG) + { + return 0; + } + } + return 2; + } + else + { + for (i = 0; i < gPlayerPartyCount; i++) + { + species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + if (gBaseStats[species].type1 == type || gBaseStats[species].type2 == type) + { + return 0; + } + } + return 1; + } +} + +void sub_8017D9C(u8 *dst, s32 arg1, u32 playerGender) +{ + switch (arg1) + { + case 0x41: + StringExpandPlaceholders(dst, gUnknown_082EEA68[playerGender]); + break; + case 0x45: + StringExpandPlaceholders(dst, gUnknown_082EED3C[playerGender]); + break; + case 0x44: + StringExpandPlaceholders(dst, gUnknown_082EF7B0); + break; + case 0x48: + StringExpandPlaceholders(dst, gUnknown_082EEB08[playerGender]); + break; + } +} + +void sub_8017E00(u8 *dst, u8 arg1) +{ + u8 mpId = GetMultiplayerId(); + u8 gender = gLinkPlayers[mpId ^ 1].gender; + + switch (arg1) + { + case 0x41: + StringCopy(dst, gUnknown_082EE984[mpId][gender][0]); + break; + case 0x44: + StringCopy(dst, gUnknown_082EE984[mpId][gender][2]); + break; + case 0x45: + StringCopy(dst, gUnknown_082EE984[mpId][gender][1]); + break; + } +} -- cgit v1.2.3 From 8d75dc1982010cedfa0b378f1a6be5805981da5c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 29 Mar 2019 17:19:29 -0400 Subject: sub_8017EA0 --- src/union_room.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) (limited to 'src') diff --git a/src/union_room.c b/src/union_room.c index 078bf9887..a1002b9b5 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -39,6 +39,7 @@ #include "field_player_avatar.h" #include "strings.h" #include "mevent.h" +#include "dynamic_placeholder_text_util.h" #include "rom_8011DC0.h" EWRAM_DATA u8 gUnknown_02022C20[12] = {}; @@ -5093,3 +5094,59 @@ void sub_8017E00(u8 *dst, u8 arg1) break; } } + +s32 sub_8017EA0(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *arg3) +{ + s32 result = 0; + u16 species = SPECIES_NONE; + s32 i; + + switch (arg2[0]) + { + case 0x41: + StringExpandPlaceholders(dst, gUnknown_082EE3DC); + result = 1; + break; + case 0x45: + StringExpandPlaceholders(dst, gUnknown_082EE430); + result = 1; + break; + case 0x44: + ConvertIntToDecimalStringN(arg3->field_58 + 0x00, gUnknown_02022C40.field_C, STR_CONV_MODE_LEFT_ALIGN, 3); + StringCopy(arg3->field_58 + 0x10, gSpeciesNames[gUnknown_02022C40.field_A]); + for (i = 0; i < 4; i++) + { + if (gUnknown_03007890->unk_14[i].unk_04 == 2) + { + ConvertIntToDecimalStringN(arg3->field_58 + 0x20, arg2[2], STR_CONV_MODE_LEFT_ALIGN, 3); + StringCopy(arg3->field_58 + 0x30, gSpeciesNames[arg2[1]]); + species = arg2[1]; + break; + } + } + if (species == SPECIES_EGG) + { + StringCopy(dst, gUnknown_082EE4F0); + } + else + { + for (i = 0; i < 4; i++) + { + DynamicPlaceholderTextUtil_SetPlaceholderPtr(i, arg3->field_58 + 0x10 * i); + } + DynamicPlaceholderTextUtil_ExpandPlaceholders(dst, gUnknown_082EE47C); + } + result = 1; + break; + case 0x48: + StringExpandPlaceholders(dst, gUnknown_082EE380); + result = 1; + break; + case 0x40: + StringExpandPlaceholders(dst, gUnknown_082EE544); + result = 2; + break; + } + + return result; +} -- cgit v1.2.3 From 6b6c98e7d0d1f0095bd1a62f1d5855b460b49f5c Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 29 Mar 2019 19:41:32 -0400 Subject: through sub_80180E8 --- src/union_room.c | 92 ++++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 90 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/union_room.c b/src/union_room.c index a1002b9b5..d3a9c95a0 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -107,8 +107,8 @@ bool32 sub_8016F1C(struct UnkLinkRfuStruct_02022B14 *arg0, s16 arg1); u8 sub_8016DF0(struct UnkStruct_Main4 *arg0, struct UnkStruct_Main4 *arg1, u32 arg2); void sub_8019F2C(void); void sub_8019E70(u8 *arg0, s32 arg1); -bool32 sub_80180A0(u8 monId, struct TradeUnkStruct *arg1); -void sub_80180E8(u8 monId, struct TradeUnkStruct *arg1); +bool32 sub_80180A0(u32 monId, struct TradeUnkStruct *arg1); +void sub_80180E8(u32 monId, struct TradeUnkStruct *arg1); bool32 sub_801A2A8(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3); void sub_80181CC(void); bool32 sub_8017940(void); @@ -5150,3 +5150,91 @@ s32 sub_8017EA0(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *arg3) return result; } + +bool32 sub_8017FD8(struct UnkStruct_URoom *arg0) +{ + if (gRecvCmds[0][1] != 0) + { + if (gRecvCmds[0][1] == 0x51) + { + arg0->field_98 = 0x51; + return TRUE; + } + else if (gRecvCmds[0][1] == 0x52) + { + arg0->field_98 = 0x52; + return TRUE; + } + } + return FALSE; +} + +bool32 InUnionRoom(void) +{ + return gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(UNION_ROOM) + && gSaveBlock1Ptr->location.mapNum == MAP_NUM(UNION_ROOM) + ? TRUE : FALSE; +} + +bool32 sub_8018024(void) +{ + s32 i; + s32 count = 0; + + for (i = 0; i < gPlayerPartyCount; i++) + { + if ( GetMonData(&gPlayerParty[i], MON_DATA_LEVEL) <= 30 + && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) != SPECIES_EGG) + { + count++; + } + } + + if (count > 1) + { + return TRUE; + } + else + { + return FALSE; + } +} + +void sub_801807C(struct TradeUnkStruct *arg0) +{ + arg0->field_0 = 0; + arg0->field_2 = 0; + arg0->field_4 = 0; + arg0->field_A = 0; + arg0->field_C = 0; + arg0->species = 0; + arg0->level = 0; + arg0->personality = 0; +} + +void sub_8018090(void) +{ + sub_801807C(&gUnknown_02022C40); +} + +bool32 sub_80180A0(u32 monId, struct TradeUnkStruct *arg1) +{ + arg1->field_A = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2); + arg1->field_C = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); + arg1->field_4 = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); + if (arg1->field_A == SPECIES_EGG) + { + return TRUE; + } + else + { + return FALSE; + } +} + +void sub_80180E8(u32 monId, struct TradeUnkStruct *arg1) +{ + arg1->species = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2); + arg1->level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); + arg1->personality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); +} -- cgit v1.2.3 From 2e588fd4d73a123ec41c92f2d7d3e70225c31c9d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Fri, 29 Mar 2019 22:22:26 -0400 Subject: through sub_80181DC --- src/union_room.c | 103 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 90 insertions(+), 13 deletions(-) (limited to 'src') diff --git a/src/union_room.c b/src/union_room.c index d3a9c95a0..59b38e6cd 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -41,6 +41,7 @@ #include "mevent.h" #include "dynamic_placeholder_text_util.h" #include "rom_8011DC0.h" +#include "event_obj_lock.h" EWRAM_DATA u8 gUnknown_02022C20[12] = {}; EWRAM_DATA u8 gUnknown_02022C2C = 0; @@ -3341,7 +3342,7 @@ void sub_80156E0(u8 taskId) break; case 2: sub_8010F84(0x40, 0, 0); - sub_8010FCC(gUnknown_02022C40.field_2, gUnknown_02022C40.field_A, gUnknown_02022C40.field_C); + sub_8010FCC(gUnknown_02022C40.type, gUnknown_02022C40.playerSpecies, gUnknown_02022C40.playerLevel); sub_800B488(); OpenLink(); sub_8011C84(); @@ -3936,14 +3937,14 @@ void sub_80156E0(u8 taskId) sub_801568C(gUnknown_082EF4FC); break; default: - gUnknown_02022C40.field_2 = var5; + gUnknown_02022C40.type = var5; data->state = 55; break; } } break; case 55: - sub_8010FCC(gUnknown_02022C40.field_2, gUnknown_02022C40.field_A, gUnknown_02022C40.field_C); + sub_8010FCC(gUnknown_02022C40.type, gUnknown_02022C40.playerSpecies, gUnknown_02022C40.playerLevel); sub_801568C(gUnknown_082EF520); break; case 44: @@ -5112,8 +5113,8 @@ s32 sub_8017EA0(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *arg3) result = 1; break; case 0x44: - ConvertIntToDecimalStringN(arg3->field_58 + 0x00, gUnknown_02022C40.field_C, STR_CONV_MODE_LEFT_ALIGN, 3); - StringCopy(arg3->field_58 + 0x10, gSpeciesNames[gUnknown_02022C40.field_A]); + ConvertIntToDecimalStringN(arg3->field_58 + 0x00, gUnknown_02022C40.playerLevel, STR_CONV_MODE_LEFT_ALIGN, 3); + StringCopy(arg3->field_58 + 0x10, gSpeciesNames[gUnknown_02022C40.playerSpecies]); for (i = 0; i < 4; i++) { if (gUnknown_03007890->unk_14[i].unk_04 == 2) @@ -5203,10 +5204,10 @@ bool32 sub_8018024(void) void sub_801807C(struct TradeUnkStruct *arg0) { arg0->field_0 = 0; - arg0->field_2 = 0; - arg0->field_4 = 0; - arg0->field_A = 0; - arg0->field_C = 0; + arg0->type = 0; + arg0->playerPersonality = 0; + arg0->playerSpecies = 0; + arg0->playerLevel = 0; arg0->species = 0; arg0->level = 0; arg0->personality = 0; @@ -5219,10 +5220,10 @@ void sub_8018090(void) bool32 sub_80180A0(u32 monId, struct TradeUnkStruct *arg1) { - arg1->field_A = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2); - arg1->field_C = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); - arg1->field_4 = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); - if (arg1->field_A == SPECIES_EGG) + arg1->playerSpecies = GetMonData(&gPlayerParty[monId], MON_DATA_SPECIES2); + arg1->playerLevel = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); + arg1->playerPersonality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); + if (arg1->playerSpecies == SPECIES_EGG) { return TRUE; } @@ -5238,3 +5239,79 @@ void sub_80180E8(u32 monId, struct TradeUnkStruct *arg1) arg1->level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); arg1->personality = GetMonData(&gPlayerParty[monId], MON_DATA_PERSONALITY); } + +u32 sub_8018120(struct TradeUnkStruct *arg0, u8 multiplayerId) +{ + u16 response = 0; + u16 species; + u32 personality; + u32 cur_personality; + u16 cur_species; + s32 i; + + if (multiplayerId == 0) + { + species = arg0->playerSpecies; + personality = arg0->playerPersonality; + } + else + { + species = arg0->species; + personality = arg0->personality; + } + + for (i = 0; i < gPlayerPartyCount; i++) + { + cur_personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); + if (cur_personality != personality) + { + continue; + } + cur_species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + if (cur_species != species) + { + continue; + } + response = i; + break; + } + + return response; +} + +void sub_801818C(bool32 arg0) +{ + sub_80173B0(); + ScriptContext2_Disable(); + sub_8098524(); + gUnknown_02022C2C = 0; + if (arg0) + { + sub_8010FCC(gUnknown_02022C40.type, gUnknown_02022C40.playerSpecies, gUnknown_02022C40.playerLevel); + sub_8011090(0x40, 0, 0); + } +} + +void sub_80181CC(void) +{ + ScriptContext2_Enable(); + ScriptFreezeEventObjects(); +} + +u8 sub_80181DC(struct UnkStruct_URoom *arg0) +{ + u8 retVal = 0x80; + u8 i; + + for (i = 0; i < 4; i++) + { + if (arg0->field_C->arr[i].unk18) + { + retVal |= arg0->field_C->arr[i].unk0.field_0.playerGender << 3; + retVal |= arg0->field_C->arr[i].unk0.field_0.unk_00.playerTrainerId[0] & 7; + break; + } + } + + return retVal; +} -- cgit v1.2.3 From a978a6a62400b2bfba7107b66077d21822759cff Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Fri, 29 Mar 2019 21:22:51 -0500 Subject: Finish decompiling union_room_chat.c --- src/union_room_chat.c | 551 +++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 501 insertions(+), 50 deletions(-) (limited to 'src') diff --git a/src/union_room_chat.c b/src/union_room_chat.c index 4de15c563..85cfa6e2e 100755 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -1,7 +1,11 @@ #include "global.h" #include "alloc.h" #include "bg.h" +#include "decompress.h" +#include "dma3.h" #include "dynamic_placeholder_text_util.h" +#include "gpu_regs.h" +#include "graphics.h" #include "link.h" #include "link_rfu.h" #include "load_save.h" @@ -66,8 +70,24 @@ struct UnionRoomChat2 u16 unk1A; u16 unk1C; u16 unk1E; - u8 filler20[0x2]; - u8 unk22[0x2146]; + s16 unk20; + u8 unk22[0x106]; + u8 unk128[BG_SCREEN_SIZE]; + u8 unk928[BG_SCREEN_SIZE]; + u8 unk1128[BG_SCREEN_SIZE]; + u8 unk1928[BG_SCREEN_SIZE]; + u8 unk2128[0x20]; + u8 unk2148[0x20]; +}; + +struct UnionRoomChat3 +{ + struct Sprite *unk0; + struct Sprite *unk4; + struct Sprite *unk8; + struct Sprite *unkC; + struct Sprite *unk10; + u16 unk14; }; struct Unk82F2C98 @@ -113,14 +133,14 @@ static void sub_801EDE0(void); static void sub_801EE10(void); static void sub_801EE2C(void); static u8 *sub_801EE84(void); -u8 *sub_801EEA8(void); +static u8 *sub_801EEA8(void); static void sub_801EF1C(u8 *); static void sub_801EF24(u8 *); static void sub_801EF4C(u8 *); static void sub_801EF7C(u8 *); static void sub_801EFA8(u8 *); static void sub_801EFD0(u8 *); -u8 *sub_801F114(void); +static u8 *sub_801F114(void); static void sub_801F2B4(u8 taskId); static bool8 sub_801F4D0(void); static bool32 sub_801F534(void); @@ -129,33 +149,33 @@ static void sub_801F5B8(void); static void sub_801F5EC(u16, u8); static bool8 sub_801F644(u8); static s8 sub_801FF08(void); -bool32 sub_8020890(void); -void sub_8020770(void); +static bool32 sub_8020890(void); +static void sub_8020770(void); static void sub_801F574(struct UnionRoomChat2 *); static void sub_801F580(void); -void sub_80208D0(void); +static void sub_80208D0(void); static bool32 sub_801FDD8(u8 *); -void sub_8020480(void); -void sub_8020538(void); -void sub_8020584(void); -void sub_80205B4(void); -void task_tutorial_story_unknown(void); -void sub_8020680(void); -void sub_80206A4(void); -void sub_80206D0(void); -void sub_8020740(void); -void sub_80206E8(void); -void sub_80208E8(void); -void sub_8020A68(void); -void sub_8020B20(void); -void sub_80203B0(void); -void sub_802040C(void); -void sub_802091C(int); -bool32 sub_8020320(void); -void sub_80201A4(void); -bool32 sub_8020368(void); -void sub_802093C(void); -void sub_8020B80(void); +static void sub_8020480(void); +static void sub_8020538(void); +static void sub_8020584(void); +static void sub_80205B4(void); +static void sub_8020604(void); +static void sub_8020680(void); +static void sub_80206A4(void); +static void sub_80206D0(void); +static void sub_8020740(void); +static void sub_80206E8(void); +static void sub_80208E8(void); +static void sub_8020A68(void); +static void sub_8020B20(void); +static void sub_80203B0(void); +static void sub_802040C(void); +static void sub_802091C(bool32); +static bool32 sub_8020320(void); +static void sub_80201A4(void); +static bool32 sub_8020368(void); +static void sub_802093C(void); +static void sub_8020B80(void); static void sub_801FF18(int, u16); static void sub_801FDDC(u8, u8, u8); static void sub_8020094(void); @@ -164,13 +184,16 @@ static void sub_80200C8(void); static void sub_801FEE4(void); static void sub_80200EC(u16, u16, u8); static void sub_8020118(u16, u8 *, u8, u8, u8); -void sub_80209AC(int); -void sub_8020420(u16, u8 *, u8); -void sub_80209E0(void); -bool32 sub_8020A1C(void); +static void sub_80209AC(int); +static void sub_8020420(u16, u8 *, u8); +static void sub_80209E0(void); +static bool32 sub_8020A1C(void); +static void sub_80207C0(s16); +static void sub_8020818(s16); extern struct UnionRoomChat *gUnknown_02022C84; extern struct UnionRoomChat2 *gUnknown_02022C88; +extern struct UnionRoomChat3 *gUnknown_02022C8C; extern const u8 *const gUnknown_082F2BA8[][10]; extern const u8 gUnknown_082F2AA8[]; @@ -178,6 +201,18 @@ extern const struct BgTemplate gUnknown_082F2C60[4]; extern const struct WindowTemplate gUnknown_082F2C70[]; extern const struct Unk82F2C98 gUnknown_082F2C98[]; extern const struct Unk82F2D40 gUnknown_082F2D40[]; +extern const u8 gText_Ellipsis[]; +extern const struct MenuAction gUnknown_082F2DC8[]; +extern const u16 gUnknown_082F2C20[]; +extern const u16 gUnknown_082F2C40[]; +extern const struct CompressedSpriteSheet gUnknown_082F3134[]; +extern const struct SpritePalette gUnknown_082F315C; +extern const struct SpriteTemplate gUnknown_082F319C; +extern const u16 gUnknown_082F2DF0[]; +extern const struct SpriteTemplate gUnknown_082F31BC; +extern const struct SpriteTemplate gUnknown_082F31D4; +extern const struct SpriteTemplate gUnknown_082F322C; +extern const struct SpriteTemplate gUnknown_082F3244; void sub_801DD98(void) @@ -1065,7 +1100,7 @@ static void sub_801EE2C(void) StringCopy(gSaveBlock1Ptr->unk3C88[i], gUnknown_02022C84->unkB9[i]); } -u8 *sub_801EE6C(int arg0) +static u8 *sub_801EE6C(int arg0) { return gUnknown_02022C84->unkB9[arg0]; } @@ -1079,7 +1114,7 @@ static u8 *sub_801EE84(void) return str; } -u8 *sub_801EEA8(void) +static u8 *sub_801EEA8(void) { u8 *str = gUnknown_02022C84->unk1A; u8 *str2 = str; @@ -1094,7 +1129,7 @@ u8 *sub_801EEA8(void) return str2; } -u16 sub_801EED8(void) +static u16 sub_801EED8(void) { u8 *str; u32 i, numChars, strLength; @@ -1159,7 +1194,7 @@ static void sub_801EFD0(u8 *arg0) arg0[1 + (PLAYER_NAME_LENGTH + 1)] = gUnknown_02022C84->unk13; } -bool32 sub_801EFF8(u8 *arg0, u8 *arg1) +static bool32 sub_801EFF8(u8 *arg0, u8 *arg1) { u8 *tempStr; u8 var0 = *arg1; @@ -1203,12 +1238,12 @@ bool32 sub_801EFF8(u8 *arg0, u8 *arg1) return FALSE; } -u8 sub_801F0B0(void) +static u8 sub_801F0B0(void) { return gUnknown_02022C84->unk10; } -void sub_801F0BC(u8 *arg0, u8 *arg1) +static void sub_801F0BC(u8 *arg0, u8 *arg1) { *arg0 = gUnknown_02022C84->unk11; *arg1 = gUnknown_02022C84->unk12; @@ -1219,13 +1254,13 @@ static u8 *sub_801F0D0(void) return gUnknown_02022C84->unk1A; } -int sub_801F0DC(void) +static int sub_801F0DC(void) { u8 *str = sub_801F0D0(); return StringLength_Multibyte(str); } -void sub_801F0EC(u32 *arg0, u32 *arg1) +static void sub_801F0EC(u32 *arg0, u32 *arg1) { int diff = gUnknown_02022C84->unk15 - gUnknown_02022C84->unk14; if (diff < 0) @@ -1241,7 +1276,7 @@ void sub_801F0EC(u32 *arg0, u32 *arg1) *arg1 = diff; } -u8 *sub_801F114(void) +static u8 *sub_801F114(void) { int i; u16 numChars = sub_801EED8(); @@ -1257,7 +1292,7 @@ u8 *sub_801F114(void) return str; } -u16 sub_801F144(void) +static u16 sub_801F144(void) { u16 count; u32 i; @@ -1274,22 +1309,22 @@ u16 sub_801F144(void) return count; } -u8 *sub_801F180(void) +static u8 *sub_801F180(void) { return gUnknown_02022C84->unk39; } -u8 sub_801F18C(void) +static u8 sub_801F18C(void) { return gUnknown_02022C84->unk16; } -int sub_801F198(void) +static int sub_801F198(void) { return gUnknown_02022C84->unk15; } -int sub_801F1A4(void) +static int sub_801F1A4(void) { u8 *str = sub_801EEA8(); u32 character = *str; @@ -1299,7 +1334,7 @@ int sub_801F1A4(void) return 0; } -u8 *sub_801F1D0(void) +static u8 *sub_801F1D0(void) { return gUnknown_02022C84->unk79; } @@ -1540,7 +1575,7 @@ bool32 sub_801F658(u8 *state) sub_80205B4(); break; case 3: - task_tutorial_story_unknown(); + sub_8020604(); break; case 4: sub_8020680(); @@ -1604,7 +1639,7 @@ bool32 sub_801F768(u8 *state) switch (*state) { case 0: - sub_802091C(1); + sub_802091C(TRUE); if (sub_8020320()) return TRUE; @@ -1620,7 +1655,7 @@ bool32 sub_801F768(u8 *state) return TRUE; sub_802093C(); - sub_802091C(0); + sub_802091C(FALSE); sub_8020B80(); return FALSE; } @@ -2177,3 +2212,419 @@ static void sub_8020118(u16 x, u8 *str, u8 fillValue, u8 arg3, u8 arg4) StringCopy(&str2[3], str); AddTextPrinterParameterized3(1, 2, x * 8, 1, sp, TEXT_SPEED_FF, str2); } + +static void sub_80201A4(void) +{ + u8 var0; + int i; + int var1; + u16 left; + u16 top; + u8 sp[52]; + u8 *str; + u8 *str2; + + FillWindowPixelBuffer(2, PIXEL_FILL(15)); + var0 = sub_801F0B0(); + sp[0] = 0; + sp[1] = 14; + sp[2] = 13; + if (var0 != 3) + { + str = &sp[4]; + str[0] = EXT_CTRL_CODE_BEGIN; + str[1] = EXT_CTRL_CODE_MIN_LETTER_SPACING; + var1 = 8; + str[2] = var1; + left = var1; + if (var0 == 2) + left = 6; + + for (i = 0, top = 0; i < 10; i++, top += 12) + { + if (!gUnknown_082F2BA8[var0][i]) + return; + + StringCopy(&sp[7], gUnknown_082F2BA8[var0][i]); + AddTextPrinterParameterized3(2, 0, left, top, sp, TEXT_SPEED_FF, &sp[4]); + } + } + else + { + left = 4; + for (i = 0, top = 0; i < 10; i++, top += 12) + { + str2 = sub_801EE6C(i); + if (GetStringWidth(0, str2, 0) <= 40) + { + AddTextPrinterParameterized3(2, 0, left, top, sp, TEXT_SPEED_FF, str2); + } + else + { + int length = StringLength_Multibyte(str2); + do + { + length--; + StringCopyN_Multibyte(&sp[4], str2, length); + } while (GetStringWidth(0, &sp[4], 0) > 35); + + AddTextPrinterParameterized3(2, 0, left, top, sp, TEXT_SPEED_FF, &sp[4]); + AddTextPrinterParameterized3(2, 0, left + 35, top, sp, TEXT_SPEED_FF, gText_Ellipsis); + } + } + } +} + +static bool32 sub_8020320(void) +{ + if (gUnknown_02022C88->unk20 < 56) + { + gUnknown_02022C88->unk20 += 12; + if (gUnknown_02022C88->unk20 >= 56) + gUnknown_02022C88->unk20 = 56; + + if (gUnknown_02022C88->unk20 < 56) + { + sub_80207C0(gUnknown_02022C88->unk20); + return TRUE; + } + } + + sub_8020818(gUnknown_02022C88->unk20); + return FALSE; +} + +static bool32 sub_8020368(void) +{ + if (gUnknown_02022C88->unk20 > 0) + { + gUnknown_02022C88->unk20 -= 12; + if (gUnknown_02022C88->unk20 <= 0) + gUnknown_02022C88->unk20 = 0; + + if (gUnknown_02022C88->unk20 > 0) + { + sub_80207C0(gUnknown_02022C88->unk20); + return TRUE; + } + } + + sub_8020818(gUnknown_02022C88->unk20); + return FALSE; +} + +static void sub_80203B0(void) +{ + FillWindowPixelBuffer(3, PIXEL_FILL(1)); + sub_8098858(3, 1, 13); + PrintTextArray(3, 2, 8, 1, 14, 5, gUnknown_082F2DC8); + sub_81983AC(3, 2, 0, 1, 14, 5, sub_801F0B0()); + PutWindowTilemap(3); +} + +static void sub_802040C(void) +{ + ClearStdWindowAndFrameToTransparent(3, FALSE); + ClearWindowTilemap(3); +} + +static void sub_8020420(u16 row, u8 *str, u8 arg2) +{ + u8 color[3]; + color[0] = 1; + color[1] = arg2 * 2 + 2; + color[2] = arg2 * 2 + 3; + FillWindowPixelRect(0, PIXEL_FILL(1), 0, row * 15, 168, 15); + AddTextPrinterParameterized3(0, 2, 0, row * 15 + 1, color, TEXT_SPEED_FF, str); +} + +static void sub_8020480(void) +{ + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + ShowBg(0); + ShowBg(1); + ShowBg(2); + ShowBg(3); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON | DISPCNT_OBJWIN_ON); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON); + SetGpuReg(REG_OFFSET_WIN0H, WIN_RANGE(64, 240)); + SetGpuReg(REG_OFFSET_WIN0V, WIN_RANGE(0, 144)); + SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG0 | WININ_WIN0_BG2 | WININ_WIN0_BG3 + | WININ_WIN0_OBJ | WININ_WIN0_CLR); + SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WIN01_BG_ALL | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); +} + +static void sub_8020538(void) +{ + SetBgTilemapBuffer(0, gUnknown_02022C88->unk128); + SetBgTilemapBuffer(1, gUnknown_02022C88->unk928); + SetBgTilemapBuffer(3, gUnknown_02022C88->unk1128); + SetBgTilemapBuffer(2, gUnknown_02022C88->unk1928); +} + +static void sub_8020584(void) +{ + RequestDma3Fill(0, (void *)BG_CHAR_ADDR(0), 0x20, 1); + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32); + CopyBgTilemapBufferToVram(0); +} + +static void sub_80205B4(void) +{ + LoadPalette(gUnknown_08DD4BD0, 0x70, 0x20); + LoadPalette(gUnknown_08DD4BB0, 0xC0, 0x20); + decompress_and_copy_tile_data_to_vram(1, gUnknown_08DD4BF0, 0, 0, 0); + CopyToBgTilemapBuffer(1, gUnknown_08DD4C4C, 0, 0); + CopyBgTilemapBufferToVram(1); +} + +static void sub_8020604(void) +{ + u8 *ptr; + + LoadPalette(gLinkMiscMenu_Pal, 0, 0x20); + ptr = decompress_and_copy_tile_data_to_vram(2, gLinkMiscMenu_Gfx, 0, 0, 0); + if (ptr) + { + CpuFastCopy(&ptr[0x220], gUnknown_02022C88->unk2128, 0x20); + CpuFastCopy(&ptr[0x420], gUnknown_02022C88->unk2148, 0x20); + } + + CopyToBgTilemapBuffer(2, gLinkMiscMenu_Tilemap, 0, 0); + CopyBgTilemapBufferToVram(2); +} + +static void sub_8020680(void) +{ + LoadPalette(gUnknown_082F2C20, 0x80, 0x20); + RequestDma3Fill(0, (void *)BG_CHAR_ADDR(1) + 0x20, 0x20, 1); +} + +static void sub_80206A4(void) +{ + LoadPalette(gUnknown_082F2C40, 0xF0, 0x20); + PutWindowTilemap(0); + FillWindowPixelBuffer(0, PIXEL_FILL(1)); + CopyWindowToVram(0, 3); +} + +static void sub_80206D0(void) +{ + PutWindowTilemap(2); + sub_80201A4(); + CopyWindowToVram(2, 3); +} + +static void sub_80206E8(void) +{ + int i; + u8 var0[2]; + var0[0] = 0; + var0[1] = 0xFF; + + for (i = 0; i < 15; i++) + BlitBitmapToWindow(1, gUnknown_02022C88->unk2128, i * 8, 0, 8, 16); + + FillWindowPixelBuffer(1, PIXEL_FILL(0)); + PutWindowTilemap(1); + CopyWindowToVram(1, 3); +} + +static void sub_8020740(void) +{ + FillWindowPixelBuffer(3, PIXEL_FILL(1)); + LoadUserWindowBorderGfx(3, 1, 0xD0); + LoadUserWindowBorderGfx_(3, 0xA, 0x20); + LoadPalette(gUnknown_0860F074, 0xE0, 0x20); +} + +static void sub_8020770(void) +{ + struct ScanlineEffectParams params; + params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT; + params.dmaDest = ®_BG1HOFS; + params.initState = 1; + params.unused9 = 0; + gUnknown_02022C88->unk20 = 0; + CpuFastFill(0, gScanlineEffectRegBuffers, sizeof(gScanlineEffectRegBuffers)); + ScanlineEffect_SetParams(params); +} + +static void sub_80207C0(s16 arg0) +{ + CpuFill16(arg0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer], 0x120); + CpuFill16(0, gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer] + 0x90, 0x20); +} + +static void sub_8020818(s16 arg0) +{ + CpuFill16(arg0, gScanlineEffectRegBuffers[0], 0x120); + CpuFill16(0, gScanlineEffectRegBuffers[0] + 0x90, 0x20); + CpuFill16(arg0, gScanlineEffectRegBuffers[0] + 0x3C0, 0x120); + CpuFill16(0, gScanlineEffectRegBuffers[0] + 0x450, 0x20); +} + +static bool32 sub_8020890(void) +{ + u32 i; + for (i = 0; i < 5; i++) + LoadCompressedSpriteSheet(&gUnknown_082F3134[i]); + + LoadSpritePalette(&gUnknown_082F315C); + gUnknown_02022C8C = Alloc(0x18); + if (!gUnknown_02022C8C) + return FALSE; + + return TRUE; +} + +static void sub_80208D0(void) +{ + if (gUnknown_02022C8C) + Free(gUnknown_02022C8C); +} + +static void sub_80208E8(void) +{ + u8 spriteId = CreateSprite(&gUnknown_082F319C, 10, 24, 0); + gUnknown_02022C8C->unk0 = &gSprites[spriteId]; +} + +static void sub_802091C(bool32 invisible) +{ + gUnknown_02022C8C->unk0->invisible = invisible; +} + +static void sub_802093C(void) +{ + u8 x, y; + u8 var2 = sub_801F0B0(); + sub_801F0BC(&x, &y); + if (var2 != 3) + { + StartSpriteAnim(gUnknown_02022C8C->unk0, 0); + gUnknown_02022C8C->unk0->pos1.x = x * 8 + 10; + gUnknown_02022C8C->unk0->pos1.y = y * 12 + 24; + } + else + { + StartSpriteAnim(gUnknown_02022C8C->unk0, 2); + gUnknown_02022C8C->unk0->pos1.x = 24; + gUnknown_02022C8C->unk0->pos1.y = y * 12 + 24; + } +} + +static void sub_80209AC(int arg0) +{ + const u16 *palette = &gUnknown_082F2DF0[arg0 * 2 + 1]; + u8 index = IndexOfSpritePaletteTag(0); + LoadPalette(palette, index * 16 + 0x101, 4); +} + +static void sub_80209E0(void) +{ + if (sub_801F0B0() != 3) + StartSpriteAnim(gUnknown_02022C8C->unk0, 1); + else + StartSpriteAnim(gUnknown_02022C8C->unk0, 3); + + gUnknown_02022C8C->unk14 = 0; +} + +static bool32 sub_8020A1C(void) +{ + if (gUnknown_02022C8C->unk14 > 3) + return FALSE; + + if (++gUnknown_02022C8C->unk14 > 3) + { + if (sub_801F0B0() != 3) + StartSpriteAnim(gUnknown_02022C8C->unk0, 0); + else + StartSpriteAnim(gUnknown_02022C8C->unk0, 2); + + return FALSE; + } + + return TRUE; +} + +static void sub_8020A68(void) +{ + u8 spriteId = CreateSprite(&gUnknown_082F31BC, 76, 152, 2); + gUnknown_02022C8C->unk8 = &gSprites[spriteId]; + spriteId = CreateSprite(&gUnknown_082F31D4, 64, 152, 1); + gUnknown_02022C8C->unk4 = &gSprites[spriteId]; +} + +void sub_8020ABC(struct Sprite *sprite) +{ + int var0 = sub_801F198(); + if (var0 == 15) + { + sprite->invisible = 1; + } + else + { + sprite->invisible = 0; + sprite->pos1.x = var0 * 8 + 76; + } +} + +void sub_8020AF4(struct Sprite *sprite) +{ + if (++sprite->data[0] > 4) + { + sprite->data[0] = 0; + if (++sprite->pos2.x > 4) + sprite->pos2.x = 0; + } +} + +static void sub_8020B20(void) +{ + u8 spriteId = CreateSprite(&gUnknown_082F322C, 8, 152, 3); + gUnknown_02022C8C->unkC = &gSprites[spriteId]; + spriteId = CreateSprite(&gUnknown_082F3244, 32, 152, 4); + gUnknown_02022C8C->unk10 = &gSprites[spriteId]; + gUnknown_02022C8C->unk10->invisible = 1; +} + +static void sub_8020B80(void) +{ + if (sub_801F0B0() == 3) + { + if (sub_801F0DC() != 0) + { + gUnknown_02022C8C->unk10->invisible = 0; + StartSpriteAnim(gUnknown_02022C8C->unk10, 3); + } + else + { + gUnknown_02022C8C->unk10->invisible = 1; + } + } + else + { + int anim = sub_801F1A4(); + if (anim == 3) + { + gUnknown_02022C8C->unk10->invisible = 1; + } + else + { + gUnknown_02022C8C->unk10->invisible = 0; + StartSpriteAnim(gUnknown_02022C8C->unk10, anim); + } + } + +} -- cgit v1.2.3 From 2f57d6bc0f822fb5f6b6dd681de7cab252626144 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 30 Mar 2019 09:18:58 -0400 Subject: sub_8018220 --- src/union_room.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/union_room.c b/src/union_room.c index 59b38e6cd..9483a2828 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -41,6 +41,7 @@ #include "mevent.h" #include "dynamic_placeholder_text_util.h" #include "rom_8011DC0.h" +#include "easy_chat.h" #include "event_obj_lock.h" EWRAM_DATA u8 gUnknown_02022C20[12] = {}; @@ -3266,7 +3267,7 @@ void UnionRoomSpecial(void) // dumb line needed to match gUnknown_02022C30.uRoom = gUnknown_02022C30.uRoom; - dataPtr = AllocZeroed(0x26C); + dataPtr = AllocZeroed(sizeof(*gUnknown_02022C30.uRoom)); gUnknown_02022C30.uRoom = dataPtr; gUnknown_03000DA8 = dataPtr; @@ -5315,3 +5316,70 @@ u8 sub_80181DC(struct UnkStruct_URoom *arg0) return retVal; } + +void sub_8018220(u8 *unused, struct UnkStruct_URoom *arg1, bool8 arg2) +{ + struct TrainerCard *trainerCard = &gTrainerCards[GetMultiplayerId() ^ 1]; + s32 i; + s32 n; + + DynamicPlaceholderTextUtil_Reset(); + + StringCopy(arg1->field_C0[0], gTrainerClassNames[sub_8068BB0()]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, arg1->field_C0[0]); + + DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, trainerCard->playerName); + + StringCopy(arg1->field_174, gUnknown_082EFF50[trainerCard->stars]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, arg1->field_174); + + ConvertIntToDecimalStringN(arg1->field_C0[2], trainerCard->caughtMonsCount, STR_CONV_MODE_LEFT_ALIGN, 3); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, arg1->field_C0[2]); + + ConvertIntToDecimalStringN(arg1->field_C0[3], trainerCard->playTimeHours, STR_CONV_MODE_LEFT_ALIGN, 3); + ConvertIntToDecimalStringN(arg1->field_C0[4], trainerCard->playTimeMinutes, STR_CONV_MODE_LEADING_ZEROS, 2); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(4, arg1->field_C0[3]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(5, arg1->field_C0[4]); + + DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, gUnknown_082EFF64); + StringCopy(gStringVar4, arg1->field_1A4); + + n = trainerCard->linkBattleWins; + if (n > 9999) + { + n = 9999; + } + ConvertIntToDecimalStringN(arg1->field_C0[0], n, STR_CONV_MODE_LEFT_ALIGN, 4); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, arg1->field_C0[0]); + + n = trainerCard->linkBattleLosses; + if (n > 9999) + { + n = 9999; + } + ConvertIntToDecimalStringN(arg1->field_C0[1], n, STR_CONV_MODE_LEFT_ALIGN, 4); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, arg1->field_C0[1]); + + ConvertIntToDecimalStringN(arg1->field_C0[2], trainerCard->pokemonTrades, STR_CONV_MODE_LEFT_ALIGN, 5); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(3, arg1->field_C0[2]); + + for (i = 0; i < 4; i++) + { + CopyEasyChatWord(arg1->field_C0[i + 3], trainerCard->var_28[i]); + DynamicPlaceholderTextUtil_SetPlaceholderPtr(i + 4, arg1->field_C0[i + 3]); + } + + DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, gUnknown_082EFFA4); + StringAppend(gStringVar4, arg1->field_1A4); + + if (arg2 == TRUE) + { + DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, gUnknown_082F0020); + StringAppend(gStringVar4, arg1->field_1A4); + } + else if (arg2 == FALSE) + { + DynamicPlaceholderTextUtil_ExpandPlaceholders(arg1->field_1A4, gUnknown_082F0018[trainerCard->gender]); + StringAppend(gStringVar4, arg1->field_1A4); + } +} -- cgit v1.2.3 From 3b9275b133c875bda4f8d43fe300394d9c4cbb2a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 30 Mar 2019 09:23:47 -0400 Subject: sub_8018404 --- src/union_room.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src') diff --git a/src/union_room.c b/src/union_room.c index 9483a2828..6928f13d6 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -5383,3 +5383,9 @@ void sub_8018220(u8 *unused, struct UnkStruct_URoom *arg1, bool8 arg2) StringAppend(gStringVar4, arg1->field_1A4); } } + +void sub_8018404(u8 *dest, struct UnkStruct_x20 *arg1) +{ + StringCopy7(dest, arg1->unk.playerName); + ConvertInternationalString(dest, arg1->unk.field_0.unk_00.unk_00_0); +} -- cgit v1.2.3 From 35cffea9874a8b135eddade958b62ee2ecf441c1 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 30 Mar 2019 12:37:18 +0100 Subject: Helpful macros for atk49 --- src/battle_script_commands.c | 25 +++---------------------- 1 file changed, 3 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 0eb6dfec0..0a0c34ad2 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -4480,28 +4480,6 @@ static void atk48_playstatchangeanimation(void) } } -enum -{ - ATK49_RAGE, - ATK49_DEFROST, - ATK49_SYNCHRONIZE_TARGET, - ATK49_MOVE_END_ABILITIES, - ATK49_STATUS_IMMUNITY_ABILITIES, - ATK49_SYNCHRONIZE_ATTACKER, - ATK49_CHOICE_MOVE, - ATK49_CHANGED_ITEMS, - ATK49_ATTACKER_INVISIBLE, - ATK49_ATTACKER_VISIBLE, - ATK49_TARGET_VISIBLE, - ATK49_ITEM_EFFECTS_ALL, - ATK49_KINGSROCK_SHELLBELL, - ATK49_SUBSTITUTE, - ATK49_UPDATE_LAST_MOVES, - ATK49_MIRROR_MOVE, - ATK49_NEXT_TARGET, - ATK49_COUNT, -}; - static void atk49_moveend(void) { s32 i; @@ -7210,6 +7188,9 @@ static void atk88_negativedamage(void) gBattlescriptCurrInstr++; } +#define STAT_CHANGE_WORKED 0 +#define STAT_CHANGE_DIDNT_WORK 1 + static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr) { bool8 certain = FALSE; -- cgit v1.2.3 From aa7f69f067a83a651c84c1feb9a874858c3adf82 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 31 Mar 2019 12:59:01 +0200 Subject: Begin use pokeblock and menu specialised --- src/menu_specialized.c | 376 ++++++++++++++++++++ src/use_pokeblock.c | 926 +++++++++++++++---------------------------------- 2 files changed, 656 insertions(+), 646 deletions(-) (limited to 'src') diff --git a/src/menu_specialized.c b/src/menu_specialized.c index 3dadc7f80..ae150dcb4 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -2,7 +2,10 @@ #include "alloc.h" #include "battle_main.h" #include "contest_effect.h" +#include "data2.h" +#include "decompress.h" #include "gpu_regs.h" +#include "graphics.h" #include "menu.h" #include "international_string_util.h" #include "menu.h" @@ -11,16 +14,21 @@ #include "palette.h" #include "player_pc.h" #include "pokemon_summary_screen.h" +#include "pokemon_storage_system.h" #include "scanline_effect.h" #include "sound.h" #include "strings.h" #include "string_util.h" +#include "text.h" #include "text_window.h" #include "trig.h" #include "window.h" #include "constants/songs.h" +#include "constants/species.h" #include "gba/io_reg.h" +extern const struct CompressedSpriteSheet gMonFrontPicTable[]; + EWRAM_DATA static u8 sUnknown_0203CF48[3] = {0}; EWRAM_DATA static struct ListMenuItem *sUnknown_0203CF4C = NULL; @@ -1075,3 +1083,371 @@ void MoveRelearnerCreateYesNoMenu(void) { CreateYesNoMenu(&sMoveRelearnerYesNoMenuTemplate, 1, 0xE, 0); } + +s32 GetBoxOrPartyMonData(u16 boxId, u16 monId, s32 request, u8 *dst) +{ + s32 ret; + + if (boxId == TOTAL_BOXES_COUNT) // Party mon. + { + if (request == MON_DATA_NICKNAME || request == MON_DATA_OT_NAME) + ret = GetMonData(&gPlayerParty[monId], request, dst); + else + ret = GetMonData(&gPlayerParty[monId], request); + } + else + { + if (request == MON_DATA_NICKNAME || request == MON_DATA_OT_NAME) + ret = GetAndCopyBoxMonDataAt(boxId, monId, request, dst); + else + ret = GetBoxMonDataAt(boxId, monId, request); + } + + return ret; +} + +static u8 *sub_81D2CD0(u8 *dst, u16 boxId, u16 monId) +{ + u16 species, level, gender; + struct BoxPokemon *boxMon; + u8 *str; + + *(dst++) = EXT_CTRL_CODE_BEGIN; + *(dst++) = 4; + *(dst++) = 8; + *(dst++) = 0; + *(dst++) = 9; + if (GetBoxOrPartyMonData(boxId, monId, MON_DATA_IS_EGG, NULL)) + { + return StringCopyPadded(dst, gText_EggNickname, 0, 12); + } + else + { + GetBoxOrPartyMonData(boxId, monId, MON_DATA_NICKNAME, dst); + StringGetEnd10(dst); + species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES, NULL); + if (boxId == TOTAL_BOXES_COUNT) // Party mon. + { + level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL); + gender = GetMonGender(&gPlayerParty[monId]); + } + else + { + // Needed to match, feel free to remove. + boxId++;boxId--; + monId++;monId--; + + boxMon = GetBoxedMonPtr(boxId, monId); + gender = GetBoxMonGender(boxMon); + level = GetLevelFromBoxMonExp(boxMon); + } + + if ((species == SPECIES_NIDORAN_F || species == SPECIES_NIDORAN_M) && !StringCompare(dst, gSpeciesNames[species])) + gender = MON_GENDERLESS; + + for (str = dst; *str != EOS; str++) + ; + + *(str++) = EXT_CTRL_CODE_BEGIN; + *(str++) = 0x12; + *(str++) = 0x3C; + + switch (gender) + { + default: + *(str++) = CHAR_SPACE; + break; + case MON_MALE: + *(str++) = EXT_CTRL_CODE_BEGIN; + *(str++) = EXT_CTRL_CODE_COLOR; + *(str++) = 4; + *(str++) = EXT_CTRL_CODE_BEGIN; + *(str++) = 3; + *(str++) = 5; + *(str++) = CHAR_MALE; + break; + case MON_FEMALE: + *(str++) = EXT_CTRL_CODE_BEGIN; + *(str++) = EXT_CTRL_CODE_COLOR; + *(str++) = 6; + *(str++) = EXT_CTRL_CODE_BEGIN; + *(str++) = 3; + *(str++) = 7; + *(str++) = CHAR_FEMALE; + break; + } + + *(str++) = EXT_CTRL_CODE_BEGIN; + *(str++) = 4; + *(str++) = 8; + *(str++) = 0; + *(str++) = 9; + *(str++) = CHAR_SLASH; + *(str++) = CHAR_SPECIAL_F9; + *(str++) = 5; + str = ConvertIntToDecimalStringN(str, level, STR_CONV_MODE_LEFT_ALIGN, 3); + *(str++) = CHAR_SPACE; + *str = EOS; + + return str; + } +} + +static u8 *sub_81D2E7C(u8 *dst, const u8 *src, s16 n) +{ + while (*src != EOS) + { + *(dst++) = *(src++); + n--; + } + while (n-- > 0) + *(dst++) = CHAR_SPACE; + + *dst = EOS; + return dst; +} + +void sub_81D2ED4(u8 *dst, u8 *nameDst, u16 boxId, u16 monId, u16 arg5, u16 arg6, bool8 arg7) +{ + u16 i; + + if (!arg7) + arg6--; + + if (arg5 != arg6) + { + sub_81D2CD0(nameDst, boxId, monId); + dst[0] = EXT_CTRL_CODE_BEGIN; + dst[1] = 4; + dst[2] = 8; + dst[3] = 0; + dst[4] = 9; + if (boxId == TOTAL_BOXES_COUNT) // Party mon. + { + sub_81D2E7C(dst + 5, gText_InParty, 8); + } + else + { + boxId++;boxId--; // Again...Someone fix this maybe? + sub_81D2E7C(dst + 5, GetBoxNamePtr(boxId), 8); + } + } + else + { + for (i = 0; i < 12; i++) + nameDst[i] = CHAR_SPACE; + nameDst[i] = EOS; + for (i = 0; i < 8; i++) + dst[i] = CHAR_SPACE; + dst[i] = EOS; + } +} + +void sub_81D2F78(struct Unk81D2F78_Struct *arg0, u8 *sheen, u16 boxId, u16 monId, u16 arg5, u16 id, u16 arg7, bool8 arg8) +{ + u16 i; + + if (!arg8) + arg7--; + + if (arg5 != arg7) + { + arg0->contestStats[id][0] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL); + arg0->contestStats[id][1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL); + arg0->contestStats[id][2] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SMART, NULL); + arg0->contestStats[id][3] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_CUTE, NULL); + arg0->contestStats[id][4] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_BEAUTY, NULL); + + sheen[id] = (GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) != 0xFF) + ? GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) / 29u + : 9; + + sub_81D2754(arg0->contestStats[id], arg0->field_20[id]); + } + else + { + for (i = 0; i < 5; i++) + { + arg0->contestStats[id][i] = 0; + arg0->field_20[id][i].unk0 = 155; + arg0->field_20[id][i].unk2 = 91; + } + } +} + +void sub_81D3094(u8 *tilesDst, u8 *palDst, u16 boxId, u16 monId, u16 arg5, u16 arg6, bool8 arg7) +{ + if (!arg7) + arg6--; + + if (arg5 != arg6) + { + u16 species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES2, NULL); + u32 trainerId = GetBoxOrPartyMonData(boxId, monId, MON_DATA_OT_ID, NULL); + u32 personality = GetBoxOrPartyMonData(boxId, monId, MON_DATA_PERSONALITY, NULL); + + LoadSpecialPokePic(&gMonFrontPicTable[species], tilesDst, species, personality, TRUE); + LZ77UnCompWram(GetFrontSpritePalFromSpeciesAndPersonality(species, trainerId, personality), palDst); + } +} + +bool8 sub_81D312C(s16 *var) +{ + *var += 24; + if (*var > 0) + *var = 0; + + return (*var != 0); +} + +bool8 sub_81D3150(s16 *var) +{ + *var -= 24; + if (*var < -80) + *var = -80; + + return (*var != -80); +} + +bool8 sub_81D3178(struct UnknownStruct_81D1ED4 *arg0, s16 *arg1) +{ + bool8 var1 = sub_81D2074(arg0); + bool8 var2 = sub_81D312C(arg1); + + return ((var1 != 0) || (var2 != 0)); +} + +bool8 sub_81D31A4(struct UnknownStruct_81D1ED4 *arg0, s16 *arg1) +{ + bool8 var1 = sub_81D2074(arg0); + bool8 var2 = sub_81D3150(arg1); + + return ((var1 != 0) || (var2 != 0)); +} + +const u32 gUnknown_08625560[] = INCBIN_U32("graphics/pokenav/pokeball.4bpp"); +const u32 gUnknown_08625660[] = INCBIN_U32("graphics/pokenav/pokeball_placeholder.4bpp"); +const u16 gUnknown_08625680[] = INCBIN_U16("graphics/pokenav/sparkle.gbapal"); +const u32 gUnknown_086256A0[] = INCBIN_U32("graphics/pokenav/sparkle.4bpp"); + +static const struct OamData sOamData_8625A20 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0 +}; + +const struct OamData sOamData_8625A28 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0 +}; + +static const union AnimCmd sSpriteAnim_8625A30[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_8625A38[] = +{ + ANIMCMD_FRAME(4, 5), + ANIMCMD_END +}; + +const union AnimCmd *const sSpriteAnimTable_8625A40[] = +{ + sSpriteAnim_8625A30, + sSpriteAnim_8625A38 +}; + +void sub_81D31D0(struct SpriteSheet *sheet, struct SpriteTemplate *template, struct SpritePalette *pal) +{ + struct SpriteSheet dataSheet = {NULL, 0x800, 100}; + + struct SpriteTemplate dataTemplate = + { + .tileTag = 100, + .paletteTag = 100, + .oam = &sOamData_8625A20, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }; + + struct SpritePalette dataPal = {NULL, 100}; + + *sheet = dataSheet; + *template = dataTemplate; + *pal = dataPal; +} + +void sub_81D321C(struct SpriteSheet *sheets, struct SpriteTemplate * template, struct SpritePalette *pals) +{ + u8 i; + + struct SpriteSheet dataSheets[] = + { + {gUnknown_08625560, 0x100, 101}, + {gUnknown_08625660, 0x20, 103}, + {gPokenavConditionCancel_Gfx, 0x100, 102}, + {}, + }; + + struct SpritePalette dataPals[] = + { + {gPokenavConditionCancel_Pal, 101}, + {gPokenavConditionCancel_Pal + 16, 102}, + {}, + }; + + struct SpriteTemplate dataTemplate = + { + .tileTag = 101, + .paletteTag = 101, + .oam = &sOamData_8625A28, + .anims = sSpriteAnimTable_8625A40, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }; + + for (i = 0; i < ARRAY_COUNT(dataSheets); i++) + *(sheets++) = dataSheets[i]; + + *template = dataTemplate; + + for (i = 0; i < ARRAY_COUNT(dataPals); i++) + *(pals++) = dataPals[i]; +} + +void sub_81D32B0(struct SpriteSheet *sheet, struct SpritePalette *pal) +{ + struct SpriteSheet dataSheet = {gUnknown_086256A0, 0x380, 104}; + struct SpritePalette dataPal = {gUnknown_08625680, 104}; + + *sheet = dataSheet; + *pal = dataPal; +} diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 9b02eeb72..d78132585 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -27,7 +27,7 @@ struct UsePokeblockSubStruct /*0x00*/ void (*field_0)(void); /*0x04*/ void (*callback)(void); /*0x08*/ struct Pokeblock *pokeblock; - /*0x0C*/ struct Pokemon *pokemon; + /*0x0C*/ struct Pokemon *mon; /*0x10*/ u8 stringBuffer[0x40]; /*0x50*/ u8 field_50; /*0x51*/ u8 field_51; @@ -57,11 +57,17 @@ struct Unk7FB8 struct UsePokeblockStruct { - /*0x0000*/ u8 field_0[0x7B06]; + /*0x0000*/ u8 field_0[4]; + /*0x0000*/ u16 field_4[3][0x40]; + /*0x0184*/ u8 field_184[0x304 - 0x184]; + /*0x0304*/ u8 field_304[3][0x2000]; + /*0x6304*/ u8 field_6304[0x7b06 - 0x6304]; /*0x7B06*/ u8 field_7B06[7]; - /*0x7B0E*/ u16 field_7B0E; + /*0x7B0E*/ s16 field_7B0E; /*0x7B10*/ u8 field_7B10; - /*0x7B11*/ u8 field_7B11[0xB]; + /*0x7B12*/ u16 field_7B12; + /*0x7B12*/ u16 field_7B14; + /*0x7B12*/ u8 *field_7B18; /*0x7B1C*/ struct Sprite *field_7B1C[10]; /*0x7B44*/ struct Sprite *field_7B44[2]; /*0x7B4C*/ u8 field_7B4C; @@ -80,6 +86,8 @@ struct UsePokeblockStruct extern u16 gKeyRepeatStartDelay; +extern void sub_81D21DC(u8); + // this file's functions void sub_816636C(void (*func)(void)); void sub_8166380(void); @@ -100,7 +108,7 @@ static void sub_8167CA0(bool8); void sub_8166BEC(void); void sub_8166D44(void); s8 sub_8166DE4(void); -bool8 sub_8167268(void); +bool8 IsSheenMaxed(void); void sub_8166F50(void); void sub_816681C(void); void sub_8166F94(void); @@ -114,22 +122,15 @@ bool8 sub_8166EDC(void); void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statID, s16 a2); void Pokeblock_MenuWindowTextPrint(const u8 *message); void sub_8167184(struct Pokeblock *, struct Pokemon *); -extern u32 sub_81D2C68(s32, s32, s32, u8 *); void sub_81673DC(struct Sprite *sprite); void sub_81674BC(void); void sub_816753C(s16, u8); static u8 sub_8167EA4(void); static u8 sub_8167FA4(void); static u8 sub_8168048(void); -extern void sub_81D2ED4(u8, u8, u16, u8, u8, u8, u8); -extern void sub_81D2F78(u8, u8, s16, u16, u8, u8, u8, u8); -extern void sub_81D3094(u8, u8, s16, u16, u8, u8, u8); -extern void sub_81D31D0(struct SpritePalette *, struct SpritePalette *, struct SpritePalette *); -extern void sub_81D321C(struct SpriteSheet *, struct SpriteTemplate *, struct SpritePalette*); void sub_8168180(struct Sprite *sprite); void sub_81681B4(struct Sprite *sprite); -extern void sub_81D32B0(struct SpriteSheet *, struct SpritePalette*); -extern void sub_81D21DC(u8); +void sub_8168168(struct Sprite *sprite); extern const struct BgTemplate gUnknown_085DFCCC[4]; extern const struct WindowTemplate gUnknown_085DFCDC[]; @@ -160,9 +161,9 @@ EWRAM_DATA void (*gUnknown_0203BC94)(void) = NULL; EWRAM_DATA struct Pokeblock *gUnknown_0203BC98 = NULL; EWRAM_DATA u8 gPokeblockMonId = 0; EWRAM_DATA s16 gPokeblockGain = 0; -EWRAM_DATA void *gUnknown_0203BCA0 = NULL; -EWRAM_DATA void *gUnknown_0203BCA4 = NULL; -EWRAM_DATA void *gUnknown_0203BCA8 = NULL; +EWRAM_DATA u8 *gUnknown_0203BCA0 = NULL; +EWRAM_DATA u8 *gUnknown_0203BCA4 = NULL; +EWRAM_DATA u8 *gUnknown_0203BCA8 = NULL; EWRAM_DATA struct UsePokeblockStruct *gUnknown_0203BCAC = NULL; // const rom data @@ -349,8 +350,9 @@ void sub_8166564(void) } void sub_8166634(void) -{ +{ u8 var; + switch (gUnknown_0203BC90->field_50) { case 0: @@ -384,9 +386,9 @@ void sub_8166634(void) break; case 1: var = gUnknown_0203BCAC->info.unk74(); - if(!var) + if (!var) gUnknown_0203BC90->field_50 = var; - break; + break; case 2: break; case 3: @@ -406,7 +408,7 @@ void sub_8166634(void) gUnknown_0203BC90->field_50 = 0; break; case 0: - if (sub_8167268()) + if (IsSheenMaxed()) { sub_8166F50(); gUnknown_0203BC90->field_50 = 7; @@ -443,14 +445,10 @@ void sub_816681C(void) if (!gPaletteFade.active) { SetVBlankCallback(NULL); - Free(gUnknown_0203BCA0); - gUnknown_0203BCA0 = NULL; - Free(gUnknown_0203BCA4); - gUnknown_0203BCA4 = NULL; - Free(gUnknown_0203BCA8); - gUnknown_0203BCA8 = NULL; - Free(gUnknown_0203BCAC); - gUnknown_0203BCAC = NULL; + FREE_AND_SET_NULL(gUnknown_0203BCA0); + FREE_AND_SET_NULL(gUnknown_0203BCA4); + FREE_AND_SET_NULL(gUnknown_0203BCA8); + FREE_AND_SET_NULL(gUnknown_0203BCAC); FreeAllWindowBuffers(); gMain.savedCallback = CB2_ReturnAndChooseMonToGivePokeblock; CB2_PreparePokeblockFeedScene(); @@ -462,6 +460,7 @@ void sub_816681C(void) void sub_81668F8(void) { u16 var; + switch (gUnknown_0203BC90->field_50) { case 0: @@ -511,65 +510,65 @@ void sub_81668F8(void) void sub_8166A34(void) { + u8 var; + switch (gUnknown_0203BC90->field_50) { - u8 var; - case 0: - gUnknown_0203BC90->pokemon = gPlayerParty; - gUnknown_0203BC90->pokemon += gUnknown_0203BCAC->field_7FB8[gUnknown_0203BCAC->info.field_71].unk1; - sub_81D3520(gUnknown_0203BCAC->field_7B1C); - gUnknown_0203BC90->field_50++; - break; - case 1: - if (gMain.newKeys & (A_BUTTON | B_BUTTON)) - gUnknown_0203BC90->field_50++; - break; - case 2: - sub_8167104(); - sub_81D2754(gUnknown_0203BC90->field_5c, gUnknown_0203BCAC->field_7C58.unk14[3]); - sub_81D1F84(&gUnknown_0203BCAC->field_7C58, gUnknown_0203BCAC->field_7C58.unk14[gUnknown_0203BCAC->field_7FB3], gUnknown_0203BCAC->field_7C58.unk14[3]); - sub_8167338(); + case 0: + gUnknown_0203BC90->mon = gPlayerParty; + gUnknown_0203BC90->mon += gUnknown_0203BCAC->field_7FB8[gUnknown_0203BCAC->info.field_71].unk1; + sub_81D3520(gUnknown_0203BCAC->field_7B1C); + gUnknown_0203BC90->field_50++; + break; + case 1: + if (gMain.newKeys & (A_BUTTON | B_BUTTON)) gUnknown_0203BC90->field_50++; - break; - case 3: - var = sub_81D2074(&gUnknown_0203BCAC->field_7C58); - if(var) - return; - + break; + case 2: + sub_8167104(); + sub_81D2754(gUnknown_0203BC90->field_5c, gUnknown_0203BCAC->field_7C58.unk14[3]); + sub_81D1F84(&gUnknown_0203BCAC->field_7C58, gUnknown_0203BCAC->field_7C58.unk14[gUnknown_0203BCAC->field_7FB3], gUnknown_0203BCAC->field_7C58.unk14[3]); + sub_8167338(); + gUnknown_0203BC90->field_50++; + break; + case 3: + var = sub_81D2074(&gUnknown_0203BCAC->field_7C58); + if (!var) + { sub_81681F4(sub_81672A4(gUnknown_0203BCAC->info.field_71)); - if (gUnknown_0203BCAC->info.field_71 != gUnknown_0203BCAC->info.field_70 - 1) { u8 var0 = gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->field_7FB3]; sub_81D3480(gUnknown_0203BCAC->field_7B1C, gUnknown_0203BCAC->field_7B10, var0); } - + gUnknown_0203BC90->field_52 = 0; - gUnknown_0203BC90->field_50++; - break; - case 4: - if ((++gUnknown_0203BC90->field_52) > 16) - { - sub_8166E24(); - gUnknown_0203BC90->field_50++; - } - break; - case 5: - if (gMain.newKeys & (A_BUTTON | B_BUTTON) && !sub_8166EDC()) - { - TryClearPokeblock((u8)gSpecialVar_ItemId); - sub_816636C(sub_8166BEC); - } - break; + gUnknown_0203BC90->field_50++; + } + break; + case 4: + if (++gUnknown_0203BC90->field_52 > 16) + { + sub_8166E24(); + gUnknown_0203BC90->field_50++; + } + break; + case 5: + if (gMain.newKeys & (A_BUTTON | B_BUTTON) && !sub_8166EDC()) + { + TryClearPokeblock((u8)gSpecialVar_ItemId); + sub_816636C(sub_8166BEC); + } + break; } } void sub_8166BEC(void) { - u8 i; - u8 var; + u8 i, var; + switch (gUnknown_0203BC90->field_50) - { + { case 0: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); gUnknown_0203BC90->field_50++; @@ -588,18 +587,18 @@ void sub_8166BEC(void) sub_81D354C(gUnknown_0203BCAC->field_7B1C); for (i = 0; i < 7; i++) DestroySprite(&gSprites[gUnknown_0203BCAC->field_7B06[i]]); - + FreeSpriteTilesByTag(0); FreeSpriteTilesByTag(1); FreeSpritePaletteByTag(0); FreeSpritePaletteByTag(1); - + for (i = 0; i < 2; i++) DestroySprite(gUnknown_0203BCAC->field_7B44[i]); - + if (gUnknown_0203BCAC->field_7B10 != 0xFF) DestroySprite(&gSprites[gUnknown_0203BCAC->field_7B10]); - + SetVBlankCallback(NULL); FREE_AND_SET_NULL(gUnknown_0203BCA0); FREE_AND_SET_NULL(gUnknown_0203BCA4); @@ -613,6 +612,7 @@ void sub_8166BEC(void) void sub_8166D44(void) { u8 stringBuffer[0x40]; + GetMonData(&gPlayerParty[sub_81672A4(gUnknown_0203BCAC->info.field_71)], MON_DATA_NICKNAME, stringBuffer); StringGetEnd10(stringBuffer); StringAppend(stringBuffer, gText_GetsAPokeBlockQuestion); @@ -627,19 +627,21 @@ void sub_8166D44(void) s8 sub_8166DE4(void) { - s8 retval = Menu_ProcessInputNoWrapClearOnChoose(); - switch(retval) + s8 menuItem = Menu_ProcessInputNoWrapClearOnChoose(); + + switch (menuItem) { case 0: break; - case -1: + case MENU_B_PRESSED: case 1: PlaySE(SE_SELECT); rbox_fill_rectangle(2); ClearWindowTilemap(2); break; } - return retval; + + return menuItem; } void sub_8166E24(void) @@ -647,13 +649,17 @@ void sub_8166E24(void) sub_8098858(2, 151, 14); FillWindowPixelBuffer(2, 17); - for (gUnknown_0203BC90->field_53 = 0; gUnknown_0203BC90->field_53 < 5 && gUnknown_0203BC90->field_61[gUnknown_0203BC90->field_53] == 0; gUnknown_0203BC90->field_53++); - + for (gUnknown_0203BC90->field_53 = 0; gUnknown_0203BC90->field_53 < 5; gUnknown_0203BC90->field_53++) + { + if (gUnknown_0203BC90->field_61[gUnknown_0203BC90->field_53] != 0) + break; + } + if (gUnknown_0203BC90->field_53 < 5) Pokeblock_BufferEnhancedStatText(gStringVar4, gUnknown_0203BC90->field_53, gUnknown_0203BC90->field_61[gUnknown_0203BC90->field_53]); else Pokeblock_BufferEnhancedStatText(gStringVar4, gUnknown_0203BC90->field_53, 0); - + Pokeblock_MenuWindowTextPrint(gStringVar4); PutWindowTilemap(2); CopyWindowToVram(2, 3); @@ -662,7 +668,7 @@ void sub_8166E24(void) bool8 sub_8166EDC(void) { FillWindowPixelBuffer(2, 17); - + while (1) { gUnknown_0203BC90->field_53++; @@ -677,11 +683,11 @@ bool8 sub_8166EDC(void) return FALSE; } } - + Pokeblock_BufferEnhancedStatText(gStringVar4, gUnknown_0203BC90->field_53, gUnknown_0203BC90->field_61[gUnknown_0203BC90->field_53]); Pokeblock_MenuWindowTextPrint(gStringVar4); CopyWindowToVram(2, 2); - + return TRUE; } @@ -765,70 +771,67 @@ _08167018:\n\ } #endif -void Pokeblock_GetMonContestStats(struct Pokemon *pokemon, u8 *data) +void Pokeblock_GetMonContestStats(struct Pokemon *mon, u8 *data) { u16 i; for (i = 0; i < 5; i++) - data[i] = GetMonData(pokemon, gUnknown_085DFCB0[i]); + data[i] = GetMonData(mon, gUnknown_085DFCB0[i]); } -void sub_8167054(struct Pokeblock *pokeblock, struct Pokemon *pokemon) +void sub_8167054(struct Pokeblock *pokeblock, struct Pokemon *mon) { u16 i; s16 cstat; u8 data; - if (GetMonData(pokemon, MON_DATA_SHEEN) != 255) + + if (GetMonData(mon, MON_DATA_SHEEN) != 255) { - sub_8167184(pokeblock, pokemon); + sub_8167184(pokeblock, mon); for (i = 0; i < 5; i++) { - data = GetMonData(pokemon, gUnknown_085DFCB0[i]); + data = GetMonData(mon, gUnknown_085DFCB0[i]); cstat = data + gUnknown_0203BC90->field_66[i]; if (cstat < 0) cstat = 0; if (cstat > 255) cstat = 255; data = cstat; - SetMonData(pokemon, gUnknown_085DFCB0[i], &data); + SetMonData(mon, gUnknown_085DFCB0[i], &data); } - cstat = (u8)GetMonData(pokemon, MON_DATA_SHEEN); - cstat = cstat + pokeblock->feel; + cstat = (u8)(GetMonData(mon, MON_DATA_SHEEN)) + pokeblock->feel; if (cstat > 255) cstat = 255; data = cstat; - SetMonData(pokemon, MON_DATA_SHEEN, &data); + SetMonData(mon, MON_DATA_SHEEN, &data); } } void sub_8167104(void) { u16 i; - struct Pokemon *pokemon = gPlayerParty; - pokemon += gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->info.field_71 * 4 + 9]; - Pokeblock_GetMonContestStats(pokemon, gUnknown_0203BC90->field_57); - sub_8167054(gUnknown_0203BC90->pokeblock, pokemon); - Pokeblock_GetMonContestStats(pokemon, gUnknown_0203BC90->field_5c); - for (i=0; i<5; i++) - { + struct Pokemon *mon = gPlayerParty; + mon += gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->info.field_71 * 4 + 9]; + + Pokeblock_GetMonContestStats(mon, gUnknown_0203BC90->field_57); + sub_8167054(gUnknown_0203BC90->pokeblock, mon); + Pokeblock_GetMonContestStats(mon, gUnknown_0203BC90->field_5c); + for (i = 0; i < 5; i++) gUnknown_0203BC90->field_61[i] = gUnknown_0203BC90->field_5c[i] - gUnknown_0203BC90->field_57[i]; - } } -void sub_8167184(struct Pokeblock *pokeblock, struct Pokemon *pokemon) +void sub_8167184(struct Pokeblock *pokeblock, struct Pokemon *mon) { - s8 direction; - s8 i; - s16 amount; - s8 boost; - s8 taste; + s8 i, direction, taste; + gUnknown_0203BC90->field_66[0] = pokeblock->spicy; gUnknown_0203BC90->field_66[1] = pokeblock->sour; gUnknown_0203BC90->field_66[2] = pokeblock->bitter; gUnknown_0203BC90->field_66[3] = pokeblock->sweet; gUnknown_0203BC90->field_66[4] = pokeblock->dry; + if (gPokeblockGain > 0) direction = 1; else if (gPokeblockGain < 0) @@ -838,39 +841,43 @@ void sub_8167184(struct Pokeblock *pokeblock, struct Pokemon *pokemon) for (i = 0; i < 5; i++) { - amount = gUnknown_0203BC90->field_66[i]; - boost = amount / 10; + s16 amount = gUnknown_0203BC90->field_66[i]; + s8 boost = amount / 10; + if (amount % 10 >= 5) // round to the nearest boost++; - taste = GetMonFlavorRelation(pokemon, gUnknown_085DFCC4[i]); + taste = GetMonFlavorRelation(mon, gUnknown_085DFCC4[i]); if (taste == direction) gUnknown_0203BC90->field_66[i] += boost * taste; } } -bool8 sub_8167268(void) +bool8 IsSheenMaxed(void) { - u8 *mon; - mon = (u8 *) &gUnknown_0203BCAC->field_0[gUnknown_0203BCAC->info.field_71 * 4]; - if (sub_81D2C68(*(mon + 864 + 0x7C58), *(mon + 865 + 0x7C58), MON_DATA_SHEEN, 0) == 255) + if (GetBoxOrPartyMonData(gUnknown_0203BCAC->field_7FB8[gUnknown_0203BCAC->info.field_71].unk0, + gUnknown_0203BCAC->field_7FB8[gUnknown_0203BCAC->info.field_71].unk1, + MON_DATA_SHEEN, + NULL) == 255) return TRUE; - return FALSE; + else + return FALSE; } u8 sub_81672A4(u8 a0) { u8 i; + for (i = 0; i < PARTY_SIZE; i++) { if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) { if (a0 == 0) return i; - a0--; } } + return 0; } @@ -894,20 +901,21 @@ u8 sub_8167324(u8 a0) void sub_8167338(void) { - u16 flavor; - u8 spriteidx; + u16 i, spriteId; + LoadSpriteSheet(&gSpriteSheet_ConditionUpDown); LoadSpritePalette(&gSpritePalette_ConditionUpDown); gUnknown_0203BC90->field_54 = 0; - for (flavor = 0; flavor < 5; flavor++) + + for (i = 0; i < 5; i++) { - if (gUnknown_0203BC90->field_61[flavor] != 0) + if (gUnknown_0203BC90->field_61[i] != 0) { - spriteidx = CreateSprite(&gSpriteTemplate_085DFD5C, gUnknown_085DFD28[flavor][0], gUnknown_085DFD28[flavor][1], 0); - if (spriteidx != MAX_SPRITES) + spriteId = CreateSprite(&gSpriteTemplate_085DFD5C, gUnknown_085DFD28[i][0], gUnknown_085DFD28[i][1], 0); + if (spriteId != MAX_SPRITES) { - if (gUnknown_0203BC90->field_61[flavor] != 0) - gSprites[spriteidx].callback = sub_81673DC; + if (gUnknown_0203BC90->field_61[i] != 0) + gSprites[spriteId].callback = sub_81673DC; gUnknown_0203BC90->field_54++; } @@ -933,8 +941,8 @@ void sub_8167420(void) { u16 i; u16 numMons; - - for (i = 0, numMons = 0; i < CalculatePlayerPartyCount(); i++) + + for (i = 0, numMons = 0; i < CalculatePlayerPartyCount(); i++) { if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG)) { @@ -952,21 +960,21 @@ void sub_8167420(void) void sub_81674BC(void) { - s16 var; - s16 var2; - + s16 var, var2; + sub_816753C(gUnknown_0203BCAC->info.field_71, 0); gUnknown_0203BCAC->field_7FB3 = 0; gUnknown_0203BCAC->field_7FB4 = 1; gUnknown_0203BCAC->field_7FB5 = 2; + var = gUnknown_0203BCAC->info.field_71 + 1; if (var >= gUnknown_0203BCAC->info.field_70) var = 0; - + var2 = gUnknown_0203BCAC->info.field_71 - 1; if (var2 < 0) var2 = gUnknown_0203BCAC->info.field_70 - 1; - + sub_816753C(var, 1); sub_816753C(var2, 2); } @@ -977,11 +985,11 @@ void sub_816753C(s16 a1, u8 a2) u8 *v3; int v5; int v6; - + v3 = &gUnknown_0203BCAC->field_0[a1 << 16 >> 14]; v5 = *(0x7FB8 + v3); v6 = *(0x7FB9 + v3); - + sub_81D2ED4(gUnknown_0203BCAC->field_0[0x7B4D + 24 * a2], gUnknown_0203BCAC->field_0[0x7B95 + 64 * a2], v5, v6, a1, gUnknown_0203BCAC->info.field_70, 0); sub_81D2F78(gUnknown_0203BCAC->field_7C58[0], gUnknown_0203BCAC->field_0[0x7FB0], v5, v6, a1, a2, gUnknown_0203BCAC->info.field_70, 0); sub_81D3094(gUnknown_0203BCAC->field_0[(a2 << 13) + 0x304], gUnknown_0203BCAC->field_0[(a2 << 7) + 4], v5, v6, a1, gUnknown_0203BCAC->info.field_70, 0); @@ -1082,547 +1090,173 @@ void sub_816753C(s16 a1, u8 a2) } #endif -#ifdef NONMATCHING void sub_8167608(u8 arg0) { - u8 v4; - u8 *v5; - u8 *v6; - u32 v7; - struct SpritePalette array[5]; - if(gUnknown_0203BCAC->field_0[0x7B10] == 255) + u8 spriteId; + struct SpriteTemplate spriteTemplate; + struct SpriteSheet spriteSheet; + struct SpritePalette spritePal; + + if (gUnknown_0203BCAC->field_7B10 == 0xFF) { - sub_81D31D0(&array[3], &array[0], &array[4]); - array[1] = (struct SpritePallete *) ((u32) gUnknown_0203BCAC->field_0[(arg0 << 13) + 772]); - array[2] = (struct SpritePallete *) ((u32) gUnknown_0203BCAC->field_0[(arg0 << 7) + 4]); - gUnknown_0203BCAC->field_0[0x7B12] = LoadSpritePalette(&array[3]); - gUnknown_0203BCAC->field_0[0x7B14] = LoadSpritePalette(&array[4]); - v4 = CreateSprite(array[0], 38, 104, 0); - gUnknown_0203BCAC->field_0[0x7B10] = v4; - if(v4 == 64) + sub_81D31D0(&spriteSheet, &spriteTemplate, &spritePal); + spriteSheet.data = gUnknown_0203BCAC->field_304[arg0]; + spritePal.data = gUnknown_0203BCAC->field_4[arg0]; + gUnknown_0203BCAC->field_7B12 = LoadSpritePalette(&spritePal); + gUnknown_0203BCAC->field_7B14 = LoadSpriteSheet(&spriteSheet); + spriteId = CreateSprite(&spriteTemplate, 38, 104, 0); + gUnknown_0203BCAC->field_7B10 = spriteId; + if (spriteId == MAX_SPRITES) { FreeSpriteTilesByTag(100); FreeSpritePaletteByTag(100); - gUnknown_0203BCAC->field_0[0x7B10] = 255; + gUnknown_0203BCAC->field_7B10 = 0xFF; } else { - gUnknown_0203BCAC->field_0[0x7B10] = v4; - v5 = &gUnknown_0203BCAC->field_0[0]; - v6 = &gUnknown_0203BCAC->field_0[0x7B10]; - gSprites[v6].callback = sub_8168168; - gSprites[v6].pos2.y -= 32; - *(v5+0x7B18) = 32 * *(v5+0x7B14) + 0x06010000; - *(v5+0x7B12) = 16 * *(v5+0x7B12) + 0x100; + gUnknown_0203BCAC->field_7B10 = spriteId; + gSprites[gUnknown_0203BCAC->field_7B10].callback = sub_8168168; + gSprites[gUnknown_0203BCAC->field_7B10].pos2.y -= 34; + gUnknown_0203BCAC->field_7B18 = (void*)(OBJ_VRAM0 + (gUnknown_0203BCAC->field_7B14 * 32)); + gUnknown_0203BCAC->field_7B12 = (gUnknown_0203BCAC->field_7B12 * 16) + 0x100; } } else { - v7 = gUnknown_0203BCAC->field_0[0x7B18]; - REG_ADDR_DMA3SAD = gUnknown_0203BCAC->field_0[(arg0 << 13) + 772]; - REG_ADDR_DMA3DAD = v7; - REG_ADDR_DMA3CNT = 0x80000400; - LoadPalette(gUnknown_0203BCAC->field_0[arg0 << 7) + 4), gUnknown_0203BCAC->field_0[0x7B12], 32); + do {} while(0); // Surprised to see something like this? It's a very neat trick for generating the same assembly. It has no practical purpose, feel free to remove it. + DmaCopy16Defvars(3, gUnknown_0203BCAC->field_304[arg0], gUnknown_0203BCAC->field_7B18, 0x800); + LoadPalette(gUnknown_0203BCAC->field_4[arg0], gUnknown_0203BCAC->field_7B12, 32); } } -#else -NAKED -void sub_8167608(u8 arg0) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - sub sp, 0x28\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - ldr r1, =gUnknown_0203BCAC\n\ - ldr r3, [r1]\n\ - ldr r0, =0x00007b10\n\ - mov r8, r0\n\ - adds r0, r3, r0\n\ - ldrb r0, [r0]\n\ - adds r7, r1, 0\n\ - cmp r0, 0xFF\n\ - bne _08167714\n\ - add r5, sp, 0x18\n\ - add r4, sp, 0x20\n\ - adds r0, r5, 0\n\ - mov r1, sp\n\ - adds r2, r4, 0\n\ - bl sub_81D31D0\n\ - lsls r0, r6, 13\n\ - movs r1, 0xC1\n\ - lsls r1, 2\n\ - adds r0, r1\n\ - ldr r1, [r7]\n\ - adds r0, r1, r0\n\ - str r0, [sp, 0x18]\n\ - lsls r0, r6, 7\n\ - adds r0, 0x4\n\ - adds r1, r0\n\ - str r1, [sp, 0x20]\n\ - adds r0, r4, 0\n\ - bl LoadSpritePalette\n\ - ldr r1, [r7]\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - ldr r2, =0x00007b12\n\ - adds r1, r2\n\ - strh r0, [r1]\n\ - adds r0, r5, 0\n\ - bl LoadSpriteSheet\n\ - ldr r1, [r7]\n\ - ldr r3, =0x00007b14\n\ - adds r1, r3\n\ - strh r0, [r1]\n\ - mov r0, sp\n\ - movs r1, 0x26\n\ - movs r2, 0x68\n\ - movs r3, 0\n\ - bl CreateSprite\n\ - lsls r0, 24\n\ - lsrs r1, r0, 24\n\ - ldr r0, [r7]\n\ - ldr r2, =0x00007b10\n\ - adds r0, r2\n\ - strb r1, [r0]\n\ - cmp r1, 0x40\n\ - bne _081676AC\n\ - movs r0, 0x64\n\ - bl FreeSpriteTilesByTag\n\ - movs r0, 0x64\n\ - bl FreeSpritePaletteByTag\n\ - ldr r0, [r7]\n\ - add r0, r8\n\ - movs r1, 0xFF\n\ - strb r1, [r0]\n\ - b _08167742\n\ - .pool\n\ -_081676AC:\n\ - ldr r0, [r7]\n\ - add r0, r8\n\ - strb r1, [r0]\n\ - ldr r4, =gSprites\n\ - ldr r2, [r7]\n\ - mov r0, r8\n\ - adds r3, r2, r0\n\ - ldrb r1, [r3]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r1, r4, 0\n\ - adds r1, 0x1C\n\ - adds r0, r1\n\ - ldr r1, =sub_8168168\n\ - str r1, [r0]\n\ - ldrb r1, [r3]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - ldrh r1, [r0, 0x26]\n\ - subs r1, 0x22\n\ - strh r1, [r0, 0x26]\n\ - ldr r3, =0x00007b18\n\ - adds r1, r2, r3\n\ - subs r3, 0x4\n\ - adds r0, r2, r3\n\ - ldrh r0, [r0]\n\ - lsls r0, 5\n\ - ldr r3, =0x06010000\n\ - adds r0, r3\n\ - str r0, [r1]\n\ - ldr r0, =0x00007b12\n\ - adds r2, r0\n\ - ldrh r0, [r2]\n\ - lsls r0, 4\n\ - movs r1, 0x80\n\ - lsls r1, 1\n\ - adds r0, r1\n\ - strh r0, [r2]\n\ - b _08167742\n\ - .pool\n\ -_08167714:\n\ - lsls r1, r6, 13\n\ - movs r0, 0xC1\n\ - lsls r0, 2\n\ - adds r1, r0\n\ - adds r1, r3, r1\n\ - ldr r2, =0x00007b18\n\ - adds r0, r3, r2\n\ - ldr r2, [r0]\n\ - ldr r0, =0x040000d4\n\ - str r1, [r0]\n\ - str r2, [r0, 0x4]\n\ - ldr r1, =0x80000400\n\ - str r1, [r0, 0x8]\n\ - ldr r0, [r0, 0x8]\n\ - lsls r0, r6, 7\n\ - adds r0, 0x4\n\ - adds r0, r3, r0\n\ - ldr r2, =0x00007b12\n\ - adds r1, r3, r2\n\ - ldrh r1, [r1]\n\ - movs r2, 0x20\n\ - bl LoadPalette\n\ -_08167742:\n\ - add sp, 0x28\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n\ - .syntax divided\n"); -} -#endif -#ifdef NONMATCHING void sub_8167760(void) { - s32 i; - u8 v1; - u8 v2; - u8 v3; - u32 v4; - struct SpriteSheet *v6; - struct SpriteTemplate *v7; - void (*funcCB) (void); - struct SpritePalette *v9; - struct SpriteSheet *v10; - struct SpritePalette *v11; - - sub_81D321C(v6, v7, v9); - LoadSpriteSheets(v6); - LoadSpritePalettes(v9); - for(i = 0; i < gUnknown_0203BCAC->info.field_70 - 1; i++) + u16 i, spriteId; + struct SpriteSheet spriteSheets[4]; + struct SpriteTemplate spriteTemplate; + struct SpritePalette spritePals[3]; + struct SpriteSheet spriteSheet2; + struct SpritePalette spritePal2; + + sub_81D321C(spriteSheets, &spriteTemplate, spritePals); + LoadSpriteSheets(spriteSheets); + LoadSpritePalettes(spritePals); + + for (i = 0; i < gUnknown_0203BCAC->info.field_70 - 1; i++) { - v1 = CreateSprite(v7, 226, (0x140000 * i + 0x80000) >> 16, 0); - if(v1 == 64) + spriteId = CreateSprite(&spriteTemplate, 226, (i * 20) + 8, 0); + if (spriteId != MAX_SPRITES) { - gUnknown_0203BCAC->field_0[0x7B06 + i] = -1; + gUnknown_0203BCAC->field_7B06[i] = spriteId; + gSprites[spriteId].data[0] = i; + gSprites[spriteId].callback = sub_8168180; } else { - gUnknown_0203BCAC->field_0[0x7B06 + i] = v1; - gSprites[v1].data[0] = i; - gSprites[v1].callback = (SpriteCallback) sub_8168180; + gUnknown_0203BCAC->field_7B06[i] = -1; } } - for(v7->tileTag = 103; i <= 5; i++) + + spriteTemplate.tileTag = 103; + for (; i < 6; i++) { - v2 = CreateSprite(v7, 230, (0x140000 * i + 0x80000) >> 16, 0); - if(v2 == 64 ) + spriteId = CreateSprite(&spriteTemplate, 230, (i * 20) + 8, 0); + if (spriteId != MAX_SPRITES) { - gUnknown_0203BCAC->field_0[0x7B06 + i] = -1; + gUnknown_0203BCAC->field_7B06[i] = spriteId; + gSprites[spriteId].oam.size = 0; } else { - gUnknown_0203BCAC->field_0[0x7B06 + i] = v2; - gSprites[v2].oam.tileNum &= 0x3F; + gUnknown_0203BCAC->field_7B06[i] = -1; } } - v7->tileTag = 102; - funcCB = sub_81681B4; - v3 = CreateSprite(v7, 222, (0x140000 * i + 0x80000) >> 16, 0); - if(v3 == 64) + + spriteTemplate.tileTag = 102; + spriteTemplate.callback = sub_81681B4; + spriteId = CreateSprite(&spriteTemplate, 222, (i * 20) + 8, 0); + if (spriteId != MAX_SPRITES) { - gUnknown_0203BCAC->field_0[0x7B06 + i] = -1; - } - else + gUnknown_0203BCAC->field_7B06[i] = spriteId; + gSprites[spriteId].oam.shape = 1; + gSprites[spriteId].oam.size = 2; + } + else { - gUnknown_0203BCAC->field_0[0x7B06 + i] = v3; - v4 = 68 * v3 + 0x2020630; - (v4 + 1) = gSprites[v2].oam.affineMode & (0x3F | 0x40); - (v4 + 3) = (v4 + 3) & (0x3F | 0x80); + gUnknown_0203BCAC->field_7B06[i] = -1; } - sub_81D32B0(v10, v11); - LoadSpriteSheet(v10); - LoadSpritePalette(v11); -} -#else -NAKED -void sub_8167760(void) -{ - asm(".syntax 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, 0x60\n\ - add r5, sp, 0x20\n\ - add r4, sp, 0x38\n\ - mov r0, sp\n\ - adds r1, r5, 0\n\ - adds r2, r4, 0\n\ - bl sub_81D321C\n\ - mov r0, sp\n\ - bl LoadSpriteSheets\n\ - adds r0, r4, 0\n\ - bl LoadSpritePalettes\n\ - movs r4, 0\n\ - ldr r1, =gUnknown_0203BCAC\n\ - ldr r0, [r1]\n\ - ldr r2, =0x00008040\n\ - adds r0, r2\n\ - ldrb r0, [r0]\n\ - subs r0, 0x1\n\ - adds r6, r5, 0\n\ - add r2, sp, 0x50\n\ - mov r9, r2\n\ - add r2, sp, 0x58\n\ - mov r10, r2\n\ - cmp r4, r0\n\ - bge _0816781C\n\ - adds r5, r1, 0\n\ - ldr r7, =gSprites\n\ - movs r0, 0x1C\n\ - adds r0, r7\n\ - mov r8, r0\n\ -_081677AC:\n\ - lsls r2, r4, 2\n\ - adds r2, r4\n\ - lsls r2, 18\n\ - movs r1, 0x80\n\ - lsls r1, 12\n\ - adds r2, r1\n\ - asrs r2, 16\n\ - adds r0, r6, 0\n\ - movs r1, 0xE2\n\ - movs r3, 0\n\ - bl CreateSprite\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - cmp r3, 0x40\n\ - beq _081677FC\n\ - ldr r0, [r5]\n\ - ldr r2, =0x00007b06\n\ - adds r0, r2\n\ - adds r0, r4\n\ - strb r3, [r0]\n\ - lsls r0, r3, 4\n\ - adds r0, r3\n\ - lsls r0, 2\n\ - adds r1, r0, r7\n\ - strh r4, [r1, 0x2E]\n\ - add r0, r8\n\ - ldr r1, =sub_8168180\n\ - str r1, [r0]\n\ - b _08167808\n\ - .pool\n\ -_081677FC:\n\ - ldr r0, [r5]\n\ - ldr r1, =0x00007b06\n\ - adds r0, r1\n\ - adds r0, r4\n\ - movs r1, 0xFF\n\ - strb r1, [r0]\n\ -_08167808:\n\ - adds r0, r4, 0x1\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - ldr r0, [r5]\n\ - ldr r2, =0x00008040\n\ - adds r0, r2\n\ - ldrb r0, [r0]\n\ - subs r0, 0x1\n\ - cmp r4, r0\n\ - blt _081677AC\n\ -_0816781C:\n\ - movs r0, 0x67\n\ - strh r0, [r6]\n\ - cmp r4, 0x5\n\ - bhi _0816788A\n\ - ldr r5, =gUnknown_0203BCAC\n\ - ldr r7, =gSprites\n\ -_08167828:\n\ - lsls r2, r4, 2\n\ - adds r2, r4\n\ - lsls r2, 18\n\ - movs r0, 0x80\n\ - lsls r0, 12\n\ - adds r2, r0\n\ - asrs r2, 16\n\ - adds r0, r6, 0\n\ - movs r1, 0xE6\n\ - movs r3, 0\n\ - bl CreateSprite\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - cmp r3, 0x40\n\ - beq _08167874\n\ - ldr r0, [r5]\n\ - ldr r1, =0x00007b06\n\ - adds r0, r1\n\ - adds r0, r4\n\ - strb r3, [r0]\n\ - lsls r1, r3, 4\n\ - adds r1, r3\n\ - lsls r1, 2\n\ - adds r1, r7\n\ - ldrb r2, [r1, 0x3]\n\ - movs r0, 0x3F\n\ - ands r0, r2\n\ - strb r0, [r1, 0x3]\n\ - b _08167880\n\ - .pool\n\ -_08167874:\n\ - ldr r0, [r5]\n\ - ldr r2, =0x00007b06\n\ - adds r0, r2\n\ - adds r0, r4\n\ - movs r1, 0xFF\n\ - strb r1, [r0]\n\ -_08167880:\n\ - adds r0, r4, 0x1\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - cmp r4, 0x5\n\ - bls _08167828\n\ -_0816788A:\n\ - movs r0, 0x66\n\ - strh r0, [r6]\n\ - ldr r0, =sub_81681B4\n\ - str r0, [r6, 0x14]\n\ - lsls r2, r4, 2\n\ - adds r2, r4\n\ - lsls r2, 18\n\ - movs r0, 0x80\n\ - lsls r0, 12\n\ - adds r2, r0\n\ - asrs r2, 16\n\ - adds r0, r6, 0\n\ - movs r1, 0xDE\n\ - movs r3, 0\n\ - bl CreateSprite\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - cmp r3, 0x40\n\ - beq _081678F4\n\ - ldr r0, =gUnknown_0203BCAC\n\ - ldr r0, [r0]\n\ - ldr r1, =0x00007b06\n\ - adds r0, r1\n\ - adds r0, r4\n\ - strb r3, [r0]\n\ - ldr r0, =gSprites\n\ - lsls r2, r3, 4\n\ - adds r2, r3\n\ - lsls r2, 2\n\ - adds r2, r0\n\ - ldrb r3, [r2, 0x1]\n\ - movs r1, 0x3F\n\ - adds r0, r1, 0\n\ - ands r0, r3\n\ - movs r3, 0x40\n\ - orrs r0, r3\n\ - strb r0, [r2, 0x1]\n\ - ldrb r0, [r2, 0x3]\n\ - ands r1, r0\n\ - movs r0, 0x80\n\ - orrs r1, r0\n\ - strb r1, [r2, 0x3]\n\ - b _08167902\n\ - .pool\n\ -_081678F4:\n\ - ldr r0, =gUnknown_0203BCAC\n\ - ldr r0, [r0]\n\ - ldr r2, =0x00007b06\n\ - adds r0, r2\n\ - adds r0, r4\n\ - movs r1, 0xFF\n\ - strb r1, [r0]\n\ -_08167902:\n\ - mov r0, r9\n\ - mov r1, r10\n\ - bl sub_81D32B0\n\ - mov r0, r9\n\ - bl LoadSpriteSheet\n\ - mov r0, r10\n\ - bl LoadSpritePalette\n\ - add sp, 0x60\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n\ - .syntax divided\n"); + + sub_81D32B0(&spriteSheet2, &spritePal2); + LoadSpriteSheet(&spriteSheet2); + LoadSpritePalette(&spritePal2); } -#endif bool8 sub_8167930(void) { - bool8 retvalue; - switch(gUnknown_0203BCAC->info.unk78) - { - case 0: - ChangeBgX(0, 0, 0); - ChangeBgY(0, 0, 0); - ChangeBgX(1, 0, 0); - ChangeBgY(1, 0, 0); - ChangeBgX(2, 0, 0); - ChangeBgY(2, 0, 0); - ChangeBgX(3, 0, 0); - ChangeBgY(3, 136 << 6, 0); - SetGpuReg(REG_OFFSET_DISPCNT, 28736); - SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2|BLDCNT_EFFECT_BLEND|BLDCNT_TGT2_BG1); - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); - break; - case 1: - (u32 *) gUnknown_0203BCA4 = Alloc(6656); - (u32 *) gUnknown_0203BCA0 = Alloc(1280); - (u32 *) gUnknown_0203BCA8 = Alloc(1280); - break; - case 2: - LZ77UnCompVram(gUnknown_085DFB60, gUnknown_0203BCA8); - break; - case 3: - LoadBgTiles(3, gUnknown_085DFA80, 224, 0); - break; - case 4: - LoadBgTilemap(3, gUnknown_0203BCA8, 1280, 0); - break; - case 5: - LoadPalette(gUnknown_085DFA60, 208, 32); - gUnknown_0203BCAC->field_7B0E = 0xFFB0; - break; - case 6: - LZ77UnCompVram(gUsePokeblockGraph_Gfx, gUnknown_0203BCA4); - break; - case 7: - LZ77UnCompVram(gUsePokeblockGraph_Tilemap, gUnknown_0203BCA0); - LoadPalette(gUsePokeblockGraph_Pal, 32, 32); - break; - case 8: - LoadBgTiles(1, gUnknown_0203BCA4, 6656, 160 << 2); - break; - case 9: - SetBgTilemapBuffer(1, gUnknown_0203BCA0); - CopyToBgTilemapBufferRect(1, gUsePokeblockNatureWin_Pal, 0, 13, 12, 4); - CopyBgTilemapBufferToVram(1); - break; - case 10: - LZ77UnCompVram(gUnknown_085DFC0C, &gUnknown_0203BCAC->field_0[0x7304]); - break; - case 11: - LoadBgTilemap(2, &gUnknown_0203BCAC->field_0[0x7304], 1280, 0); - LoadPalette(gUnknown_086231E8, 48, 32); - LoadPalette(gUnknown_08623208, 240, 32); - sub_81D21DC(2); - break; - default: - gUnknown_0203BCAC->info.unk78 = 0; - retvalue = 0; - return retvalue; - } - gUnknown_0203BCAC->info.unk78++; - retvalue = 1; - return retvalue; + switch (gUnknown_0203BCAC->info.unk78) + { + case 0: + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 136 << 6, 0); + SetGpuReg(REG_OFFSET_DISPCNT, 28736); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2|BLDCNT_EFFECT_BLEND|BLDCNT_TGT2_BG1); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4)); + break; + case 1: + gUnknown_0203BCA4 = Alloc(6656); + gUnknown_0203BCA0 = Alloc(1280); + gUnknown_0203BCA8 = Alloc(1280); + break; + case 2: + LZ77UnCompVram(gUnknown_085DFB60, gUnknown_0203BCA8); + break; + case 3: + LoadBgTiles(3, gUnknown_085DFA80, 224, 0); + break; + case 4: + LoadBgTilemap(3, gUnknown_0203BCA8, 1280, 0); + break; + case 5: + LoadPalette(gUnknown_085DFA60, 208, 32); + gUnknown_0203BCAC->field_7B0E = 0xFFB0; + break; + case 6: + LZ77UnCompVram(gUsePokeblockGraph_Gfx, gUnknown_0203BCA4); + break; + case 7: + LZ77UnCompVram(gUsePokeblockGraph_Tilemap, gUnknown_0203BCA0); + LoadPalette(gUsePokeblockGraph_Pal, 32, 32); + break; + case 8: + LoadBgTiles(1, gUnknown_0203BCA4, 6656, 160 << 2); + break; + case 9: + SetBgTilemapBuffer(1, gUnknown_0203BCA0); + CopyToBgTilemapBufferRect(1, gUsePokeblockNatureWin_Pal, 0, 13, 12, 4); + CopyBgTilemapBufferToVram(1); + break; + case 10: + LZ77UnCompVram(gUnknown_085DFC0C, &gUnknown_0203BCAC->field_0[0x7304]); + break; + case 11: + LoadBgTilemap(2, &gUnknown_0203BCAC->field_0[0x7304], 1280, 0); + LoadPalette(gUnknown_086231E8, 48, 32); + LoadPalette(gUnknown_08623208, 240, 32); + sub_81D21DC(2); + break; + default: + gUnknown_0203BCAC->info.unk78 = 0; + return FALSE; + } + + gUnknown_0203BCAC->info.unk78++; + return TRUE; } void sub_8167BA0(u16 arg0, u8 copyToVramMode) @@ -1658,9 +1292,7 @@ void sub_8167BA0(u16 arg0, u8 copyToVramMode) static void sub_8167CA0(bool8 arg0) { u16 var0; - int var1; - int r8; - int r4; + bool32 r8, r4; if (arg0) var0 = gUnknown_0203BCAC->field_7FB5; @@ -1680,11 +1312,11 @@ static void sub_8167CA0(bool8 arg0) gUnknown_0203BCAC->field_7FB3 = var0; gUnknown_0203BCAC->field_7FB6 = gUnknown_0203BCAC->field_7FB5; - gUnknown_0203BCAC->info.field_71 = gUnknown_0203BCAC->info.field_71 == 0 + gUnknown_0203BCAC->info.field_71 = (gUnknown_0203BCAC->info.field_71 == 0) ? gUnknown_0203BCAC->info.field_70 - 1 : gUnknown_0203BCAC->info.field_71 - 1; - gUnknown_0203BCAC->field_7B4C = gUnknown_0203BCAC->info.field_71 == 0 + gUnknown_0203BCAC->field_7B4C = (gUnknown_0203BCAC->info.field_71 == 0) ? gUnknown_0203BCAC->info.field_70 - 1 : gUnknown_0203BCAC->info.field_71 - 1; } @@ -1695,11 +1327,11 @@ static void sub_8167CA0(bool8 arg0) gUnknown_0203BCAC->field_7FB3 = var0; gUnknown_0203BCAC->field_7FB6 = gUnknown_0203BCAC->field_7FB4; - gUnknown_0203BCAC->info.field_71 = gUnknown_0203BCAC->info.field_71 < gUnknown_0203BCAC->info.field_70 - 1 + gUnknown_0203BCAC->info.field_71 = (gUnknown_0203BCAC->info.field_71 < gUnknown_0203BCAC->info.field_70 - 1) ? gUnknown_0203BCAC->info.field_71 + 1 : 0; - gUnknown_0203BCAC->field_7B4C = gUnknown_0203BCAC->info.field_71 < gUnknown_0203BCAC->info.field_70 - 1 + gUnknown_0203BCAC->field_7B4C = (gUnknown_0203BCAC->info.field_71 < gUnknown_0203BCAC->info.field_70 - 1) ? gUnknown_0203BCAC->info.field_71 + 1 : 0; } @@ -1835,7 +1467,8 @@ void sub_81681B4(struct Sprite *sprite) void sub_81681F4(u8 monIndex) { u8 sheen = GetMonData(&gPlayerParty[monIndex], MON_DATA_SHEEN); - gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->field_7FB3] = sheen != 255 + + gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->field_7FB3] = (sheen != 255) ? sheen / 29 : 9; } @@ -1868,7 +1501,7 @@ static void sub_8168294(void) if (spriteId != MAX_SPRITES) { gSprites[spriteId].data[0] = var; - gSprites[spriteId].data[1] = (i * xDiff) | 32; + gSprites[spriteId].data[1] = (i * xDiff) | 0x20; gSprites[spriteId].data[2] = i; StartSpriteAnim(&gSprites[spriteId], i); sprites[i] = &gSprites[spriteId]; @@ -1896,6 +1529,7 @@ static bool8 sub_8168328(void) void sub_8168374(struct Sprite *sprite) { s16 prevX = sprite->pos1.x; + sprite->pos1.x += sprite->data[0]; if ((prevX <= sprite->data[1] && sprite->pos1.x >= sprite->data[1]) || (prevX >= sprite->data[1] && sprite->pos1.x <= sprite->data[1])) -- cgit v1.2.3 From e3c07c83f2bb8ce91d96f4bb39110fae18eccdc1 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 31 Mar 2019 14:32:26 +0200 Subject: More work on use pokeblock --- src/menu_specialized.c | 222 +++++++++++++++++++++++++++++++++++++++++++++---- src/use_pokeblock.c | 144 +++++--------------------------- 2 files changed, 226 insertions(+), 140 deletions(-) (limited to 'src') diff --git a/src/menu_specialized.c b/src/menu_specialized.c index ae150dcb4..f21f4e51a 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -37,6 +37,9 @@ static void sub_81D24A4(struct UnknownStruct_81D1ED4 *a0); static void sub_81D2634(struct UnknownStruct_81D1ED4 *a0); static void MoveRelearnerCursorCallback(s32 itemIndex, bool8 onInit, struct ListMenu *list); static void nullsub_79(void); +static void sub_81D3408(struct Sprite *sprite); +/*static*/ void sub_81D3564(struct Sprite *sprite); +static void sub_81D35E8(struct Sprite *sprite); static const struct WindowTemplate sUnknown_086253E8[] = { @@ -1243,7 +1246,7 @@ void sub_81D2ED4(u8 *dst, u8 *nameDst, u16 boxId, u16 monId, u16 arg5, u16 arg6, } } -void sub_81D2F78(struct Unk81D2F78_Struct *arg0, u8 *sheen, u16 boxId, u16 monId, u16 arg5, u16 id, u16 arg7, bool8 arg8) +void sub_81D2F78(struct UnknownStruct_81D1ED4 *arg0, u8 *sheen, u16 boxId, u16 monId, u16 arg5, u16 id, u16 arg7, bool8 arg8) { u16 i; @@ -1252,30 +1255,30 @@ void sub_81D2F78(struct Unk81D2F78_Struct *arg0, u8 *sheen, u16 boxId, u16 monId if (arg5 != arg7) { - arg0->contestStats[id][0] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL); - arg0->contestStats[id][1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL); - arg0->contestStats[id][2] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SMART, NULL); - arg0->contestStats[id][3] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_CUTE, NULL); - arg0->contestStats[id][4] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_BEAUTY, NULL); + arg0->unk0[id][0] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL); + arg0->unk0[id][1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL); + arg0->unk0[id][2] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SMART, NULL); + arg0->unk0[id][3] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_CUTE, NULL); + arg0->unk0[id][4] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_BEAUTY, NULL); sheen[id] = (GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) != 0xFF) ? GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) / 29u : 9; - sub_81D2754(arg0->contestStats[id], arg0->field_20[id]); + sub_81D2754(arg0->unk0[id], arg0->unk14[id]); } else { for (i = 0; i < 5; i++) { - arg0->contestStats[id][i] = 0; - arg0->field_20[id][i].unk0 = 155; - arg0->field_20[id][i].unk2 = 91; + arg0->unk0[id][i] = 0; + arg0->unk14[id][i].unk0 = 155; + arg0->unk14[id][i].unk2 = 91; } } } -void sub_81D3094(u8 *tilesDst, u8 *palDst, u16 boxId, u16 monId, u16 arg5, u16 arg6, bool8 arg7) +void sub_81D3094(void *tilesDst, void *palDst, u16 boxId, u16 monId, u16 arg5, u16 arg6, bool8 arg7) { if (!arg7) arg6--; @@ -1325,10 +1328,10 @@ bool8 sub_81D31A4(struct UnknownStruct_81D1ED4 *arg0, s16 *arg1) return ((var1 != 0) || (var2 != 0)); } -const u32 gUnknown_08625560[] = INCBIN_U32("graphics/pokenav/pokeball.4bpp"); -const u32 gUnknown_08625660[] = INCBIN_U32("graphics/pokenav/pokeball_placeholder.4bpp"); -const u16 gUnknown_08625680[] = INCBIN_U16("graphics/pokenav/sparkle.gbapal"); -const u32 gUnknown_086256A0[] = INCBIN_U32("graphics/pokenav/sparkle.4bpp"); +static const u32 gUnknown_08625560[] = INCBIN_U32("graphics/pokenav/pokeball.4bpp"); +static const u32 gUnknown_08625660[] = INCBIN_U32("graphics/pokenav/pokeball_placeholder.4bpp"); +static const u16 gUnknown_08625680[] = INCBIN_U16("graphics/pokenav/sparkle.gbapal"); +static const u32 gUnknown_086256A0[] = INCBIN_U32("graphics/pokenav/sparkle.4bpp"); static const struct OamData sOamData_8625A20 = { @@ -1347,7 +1350,7 @@ static const struct OamData sOamData_8625A20 = .affineParam = 0 }; -const struct OamData sOamData_8625A28 = +static const struct OamData sOamData_8625A28 = { .y = 0, .affineMode = 0, @@ -1376,7 +1379,7 @@ static const union AnimCmd sSpriteAnim_8625A38[] = ANIMCMD_END }; -const union AnimCmd *const sSpriteAnimTable_8625A40[] = +static const union AnimCmd *const sSpriteAnimTable_8625A40[] = { sSpriteAnim_8625A30, sSpriteAnim_8625A38 @@ -1451,3 +1454,188 @@ void sub_81D32B0(struct SpriteSheet *sheet, struct SpritePalette *pal) *sheet = dataSheet; *pal = dataPal; } + +static void sub_81D32D4(struct Sprite *sprite) +{ + if (++sprite->data[1] > 60) + { + sprite->data[1] = 0; + sub_81D3408(sprite); + } +} + +static void sub_81D32F4(struct Sprite *sprite) +{ + if (sprite->animEnded) + { + sprite->data[1] = 0; + sprite->callback = sub_81D32D4; + } +} + +// Todo: Move these variables to C. +extern const s16 gUnknown_08625B2C[][2]; +extern const struct SpriteTemplate gUnknown_08625B14; + +void sub_81D3314(struct Sprite *sprite) +{ + struct Sprite *sprite2 = &gSprites[sprite->data[4]]; + + if (sprite2 != NULL) + { + sprite->pos1.x = sprite2->pos1.x + sprite2->pos2.x + gUnknown_08625B2C[sprite->data[0]][0]; + sprite->pos1.y = sprite2->pos1.y + sprite2->pos2.y + gUnknown_08625B2C[sprite->data[0]][1]; + } + else + { + sprite->pos1.x = gUnknown_08625B2C[sprite->data[0]][0] + 40; + sprite->pos1.y = gUnknown_08625B2C[sprite->data[0]][1] + 104; + } +} + +void sub_81D338C(u8 arg0, u8 arg1, struct Sprite **sprites) +{ + u16 i; + + for (i = 0; i < 10; i++) + { + if (sprites[i] != NULL) + { + sprites[i]->data[0] = i; + sprites[i]->data[1] = (i * 16) + 1; + sprites[i]->data[2] = arg0; + sprites[i]->data[3] = i; + if (arg1 == 0 || arg0 != 9) + { + sprites[i]->callback = sub_81D3564; + } + else + { + sub_81D3314(sprites[i]); + sub_81D35E8(sprites[i]); + sprites[i]->callback = sub_81D32F4; + sprites[i]->invisible = FALSE; + } + } + } +} + +static void sub_81D3408(struct Sprite *sprite) +{ + u16 i; + u8 id = sprite->data[5]; + + for (i = 0; i < sprite->data[2] + 1; i++) + { + gSprites[id].data[1] = (gSprites[id].data[0] * 16) + 1; + gSprites[id].callback = sub_81D3564; + id = gSprites[id].data[5]; + } +} + +void sub_81D3464(struct Sprite **sprites) +{ + u8 i; + + for (i = 0; i < 10; i++) + sprites[i] = NULL; +} + +void sub_81D3480(struct Sprite **sprites, u8 arg1, u8 arg2) +{ + u16 i, spriteId, firstSpriteId = 0; + u8 count = arg2; + + for (i = 0; i < count + 1; i++) + { + spriteId = CreateSprite(&gUnknown_08625B14, 0, 0, 0); + if (spriteId != MAX_SPRITES) + { + sprites[i] = &gSprites[spriteId]; + sprites[i]->invisible = TRUE; + sprites[i]->data[4] = arg1; + if (i != 0) + sprites[i - 1]->data[5] = spriteId; + else + firstSpriteId = spriteId; + } + else + { + break; + } + } + + sprites[count]->data[5] = firstSpriteId; + sub_81D338C(count, 1, sprites); +} + +void sub_81D3520(struct Sprite **sprites) +{ + u16 i; + + for (i = 0; i < 10; i++) + { + if (sprites[i] != NULL) + { + DestroySprite(sprites[i]); + sprites[i] = NULL; + } + else + { + break; + } + } +} + +void sub_81D354C(struct Sprite **sprites) +{ + sub_81D3520(sprites); + FreeSpriteTilesByTag(104); + FreeSpritePaletteByTag(104); +} + +/*static*/ void sub_81D3564(struct Sprite *sprite) +{ + if (sprite->data[1] != 0) + { + if (--sprite->data[1] != 0) + return; + + SeekSpriteAnim(sprite, 0); + sprite->invisible = FALSE; + } + + sub_81D3314(sprite); + if (sprite->animEnded) + { + sprite->invisible = TRUE; + if (sprite->data[3] == sprite->data[2]) + { + if (sprite->data[3] == 9) + { + sub_81D35E8(sprite); + sprite->callback = sub_81D32F4; + } + else + { + sprite->callback = sub_81D32D4; + } + } + else + { + sprite->callback = SpriteCallbackDummy; + } + } +} + +static void sub_81D35E8(struct Sprite *sprite) +{ + u8 i, id = sprite->data[5]; + + for (i = 0; i < sprite->data[2] + 1; i++) + { + SeekSpriteAnim(&gSprites[id], 0); + gSprites[id].invisible = FALSE; + id = gSprites[id].data[5]; + } +} diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index d78132585..6df826214 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -57,11 +57,11 @@ struct Unk7FB8 struct UsePokeblockStruct { - /*0x0000*/ u8 field_0[4]; - /*0x0000*/ u16 field_4[3][0x40]; - /*0x0184*/ u8 field_184[0x304 - 0x184]; + /*0x0000*/ u8 filler0[4]; + /*0x0000*/ u16 field_4[6][0x40]; /*0x0304*/ u8 field_304[3][0x2000]; - /*0x6304*/ u8 field_6304[0x7b06 - 0x6304]; + /*0x6304*/ u8 filler_6304[0x1000]; + /*0x7304*/ u8 tilemapBuffer[BG_SCREEN_SIZE + 2]; /*0x7B06*/ u8 field_7B06[7]; /*0x7B0E*/ s16 field_7B0E; /*0x7B10*/ u8 field_7B10; @@ -71,8 +71,7 @@ struct UsePokeblockStruct /*0x7B1C*/ struct Sprite *field_7B1C[10]; /*0x7B44*/ struct Sprite *field_7B44[2]; /*0x7B4C*/ u8 field_7B4C; - /*0x7B4D*/ u8 filler7B4D[0x47]; - /*0x7B94*/ u8 filler7B94; + /*0x7B4D*/ u8 field_7B4D[3][24]; /*0x7B95*/ u8 field_7B95[3][64]; /*0x7C58*/ struct UnknownStruct_81D1ED4 field_7C58; /*0x7FB0*/ u8 unk7FB0[3]; @@ -119,7 +118,7 @@ void sub_8167338(void); void sub_81681F4(u8); void sub_8166E24(void); bool8 sub_8166EDC(void); -void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statID, s16 a2); +void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statId, s16 a2); void Pokeblock_MenuWindowTextPrint(const u8 *message); void sub_8167184(struct Pokeblock *, struct Pokemon *); void sub_81673DC(struct Sprite *sprite); @@ -712,15 +711,13 @@ void Pokeblock_MenuWindowTextPrint(const u8 *message) AddTextPrinterParameterized(2, 1, gStringVar4, 0, 1, 0, NULL); } +// This function is a joke. #ifdef NONMATCHING -void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statID, s16 a2) +void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statId, s16 a2) { if (a2 != 0) { - if (a2 > 0) - a2 = 0; - - StringCopy(dest, sContestStatNames[statID]); + StringCopy(dest, sContestStatNames[statId]); StringAppend(dest, gText_WasEnhanced); } else @@ -730,7 +727,7 @@ void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statID, s16 a2) } #else NAKED -void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statID, s16 a2) +void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statId, s16 a2) { asm(".syntax unified\n\ push {r4,lr}\n\ @@ -979,116 +976,17 @@ void sub_81674BC(void) sub_816753C(var2, 2); } -#ifdef NONMATCHING -void sub_816753C(s16 a1, u8 a2) +void sub_816753C(s16 id1, u8 id2) { - u8 *v3; - int v5; - int v6; - - v3 = &gUnknown_0203BCAC->field_0[a1 << 16 >> 14]; - v5 = *(0x7FB8 + v3); - v6 = *(0x7FB9 + v3); - - sub_81D2ED4(gUnknown_0203BCAC->field_0[0x7B4D + 24 * a2], gUnknown_0203BCAC->field_0[0x7B95 + 64 * a2], v5, v6, a1, gUnknown_0203BCAC->info.field_70, 0); - sub_81D2F78(gUnknown_0203BCAC->field_7C58[0], gUnknown_0203BCAC->field_0[0x7FB0], v5, v6, a1, a2, gUnknown_0203BCAC->info.field_70, 0); - sub_81D3094(gUnknown_0203BCAC->field_0[(a2 << 13) + 0x304], gUnknown_0203BCAC->field_0[(a2 << 7) + 4], v5, v6, a1, gUnknown_0203BCAC->info.field_70, 0); - //gUnknown_0203BCAC->field_0[0x7B4D + a1 * 40], gUnknown_0203BCAC->field_7FB8, gUnknown_0203BCAC->field_7FB9, gUnknown_203BCAC->field_0[0], gUnknown_203BCAC->info.field_70, 0) + u8 boxId = gUnknown_0203BCAC->field_7FB8[id1].unk0; + u8 monId = gUnknown_0203BCAC->field_7FB8[id1].unk1; + u8 r6 = gUnknown_0203BCAC->info.field_70; + bool8 r8 = FALSE; + + sub_81D2ED4(gUnknown_0203BCAC->field_7B4D[id2], gUnknown_0203BCAC->field_7B95[id2], boxId, monId, id1, r6, r8); + sub_81D2F78(&gUnknown_0203BCAC->field_7C58, gUnknown_0203BCAC->unk7FB0, boxId, monId, id1, id2, r6, r8); + sub_81D3094(gUnknown_0203BCAC->field_304[id2], gUnknown_0203BCAC->field_4[id2], boxId, monId, id1, r6, r8); } -#else -NAKED -void sub_816753C(s16 a1, u8 a2) -{ - asm(".syntax 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, 0x10\n\ - adds r5, r0, 0\n\ - adds r4, r1, 0\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - ldr r0, =gUnknown_0203BCAC\n\ - mov r9, r0\n\ - ldr r1, [r0]\n\ - lsls r5, 16\n\ - asrs r0, r5, 14\n\ - adds r0, r1, r0\n\ - ldr r3, =0x00007fb8\n\ - adds r2, r0, r3\n\ - ldrb r7, [r2]\n\ - ldr r2, =0x00007fb9\n\ - adds r0, r2\n\ - ldrb r0, [r0]\n\ - mov r10, r0\n\ - adds r3, 0x88\n\ - adds r0, r1, r3\n\ - ldrb r6, [r0]\n\ - movs r0, 0\n\ - mov r8, r0\n\ - lsls r0, r4, 1\n\ - adds r0, r4\n\ - lsls r0, 3\n\ - ldr r2, =0x00007b4d\n\ - adds r0, r2\n\ - adds r0, r1, r0\n\ - lsls r2, r4, 6\n\ - ldr r3, =0x00007b95\n\ - adds r2, r3\n\ - adds r1, r2\n\ - lsrs r5, 16\n\ - str r5, [sp]\n\ - str r6, [sp, 0x4]\n\ - mov r2, r8\n\ - str r2, [sp, 0x8]\n\ - adds r2, r7, 0\n\ - mov r3, r10\n\ - bl sub_81D2ED4\n\ - mov r3, r9\n\ - ldr r1, [r3]\n\ - ldr r2, =0x00007c58\n\ - adds r0, r1, r2\n\ - ldr r3, =0x00007fb0\n\ - adds r1, r3\n\ - str r5, [sp]\n\ - str r4, [sp, 0x4]\n\ - str r6, [sp, 0x8]\n\ - mov r2, r8\n\ - str r2, [sp, 0xC]\n\ - adds r2, r7, 0\n\ - mov r3, r10\n\ - bl sub_81D2F78\n\ - lsls r0, r4, 13\n\ - movs r1, 0xC1\n\ - lsls r1, 2\n\ - adds r0, r1\n\ - mov r3, r9\n\ - ldr r1, [r3]\n\ - adds r0, r1, r0\n\ - lsls r4, 7\n\ - adds r4, 0x4\n\ - adds r1, r4\n\ - str r5, [sp]\n\ - str r6, [sp, 0x4]\n\ - mov r2, r8\n\ - str r2, [sp, 0x8]\n\ - adds r2, r7, 0\n\ - mov r3, r10\n\ - bl sub_81D3094\n\ - add sp, 0x10\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .pool\n\ - .syntax divided\n"); -} -#endif void sub_8167608(u8 arg0) { @@ -1242,10 +1140,10 @@ bool8 sub_8167930(void) CopyBgTilemapBufferToVram(1); break; case 10: - LZ77UnCompVram(gUnknown_085DFC0C, &gUnknown_0203BCAC->field_0[0x7304]); + LZ77UnCompVram(gUnknown_085DFC0C, gUnknown_0203BCAC->tilemapBuffer); break; case 11: - LoadBgTilemap(2, &gUnknown_0203BCAC->field_0[0x7304], 1280, 0); + LoadBgTilemap(2, gUnknown_0203BCAC->tilemapBuffer, 1280, 0); LoadPalette(gUnknown_086231E8, 48, 32); LoadPalette(gUnknown_08623208, 240, 32); sub_81D21DC(2); -- cgit v1.2.3 From 500d009b5c52345afce3dfd103113cfa77e7b262 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 31 Mar 2019 09:05:32 -0500 Subject: Start decompiling berry_crush.c --- src/berry_crush.c | 775 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/item_icon.c | 2 +- src/union_room.c | 2 +- 3 files changed, 777 insertions(+), 2 deletions(-) create mode 100755 src/berry_crush.c (limited to 'src') diff --git a/src/berry_crush.c b/src/berry_crush.c new file mode 100755 index 000000000..dc4c546b0 --- /dev/null +++ b/src/berry_crush.c @@ -0,0 +1,775 @@ +#include "global.h" +#include "alloc.h" +#include "berry_powder.h" +#include "bg.h" +#include "event_data.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "item_icon.h" +#include "item_menu.h" +#include "link.h" +#include "link_rfu.h" +#include "main.h" +#include "math_util.h" +#include "menu.h" +#include "overworld.h" +#include "palette.h" +#include "rom_8034C54.h" +#include "scanline_effect.h" +#include "sound.h" +#include "sprite.h" +#include "string_util.h" +#include "task.h" +#include "text.h" +#include "trig.h" +#include "window.h" +#include "constants/items.h" +#include "constants/rgb.h" +#include "constants/songs.h" + +struct BerryCrushGame_Player +{ + u16 unk0; + u8 filler2[0x12]; + u8 unk14[0xC]; +}; + +struct BerryCrushGame_PlayersSeparate +{ + struct BerryCrushGame_Player player; + struct BerryCrushGame_Player others[4]; +}; + +typedef union BerryCrushGame_Players +{ + struct BerryCrushGame_Player players[5]; + struct BerryCrushGame_PlayersSeparate separate; +} BerryCrushGame_Players; + +struct BerryCrushGame_138_C +{ + u8 filler0[0x8]; + s16 unk8; + u16 unkA; +}; + +struct BerryCrushGame_138 +{ + u8 filler0[0xC]; + struct BerryCrushGame_138_C *unkC[5]; + u8 filler1C[0x4]; + struct Sprite *unk24[5]; + struct Sprite *unk38[5]; + struct Sprite *unk4C[5]; + struct Sprite *unk60[5]; + struct Sprite *unk74[5]; +}; + +struct BerryCrushGame_4E +{ + u8 filler0[0x4]; + u8 unk4; + u8 filler5[0x5]; + u16 unkA; + u16 unkC; +}; + +struct __attribute__((packed)) BerryCrushGame_40 +{ + u8 filler0[0xE]; + struct BerryCrushGame_4E unkE; +}; + +struct BerryCrushGame +{ + MainCallback unk0; + void (* unk4)(struct BerryCrushGame *, u8 *); + u8 unk8; + u8 unk9; + u8 unkA; + u8 unkB; + u8 unkC; + u8 fillerD[0x1]; + u8 unkE; + u8 unkF; + u8 filler10[0x2]; + u16 unk12; + u8 filler14[0x2]; + u16 unk16; + u8 filler18[0x4]; + int unk1C; + u8 filler20[0x5]; + u8 unk25_0:1; + u8 unk25_1:1; + u8 unk25_2:1; + u8 filler26[0x2]; + u16 unk28; + u16 unk2A; + u16 unk2C; + u8 filler2E[0x8]; + u8 unk36[0xA]; + struct BerryCrushGame_40 unk40; + u8 filler60[0x8]; + int unk68; + u16 unk6C; + u8 filler6E[0x4]; + u16 unk72; + u8 filler74[0x10]; + BerryCrushGame_Players unk84; + u8 filler124[0x14]; + struct BerryCrushGame_138 unk138; + u8 unk1C0[0x1000]; + u8 unk11C0[0x1000]; + u8 unk21C0[0x1000]; + u8 unk31C0[0x1000]; +}; + +static void sub_8020F74(void); +static void sub_8020F88(void); +static void sub_8020FA0(u8); +void sub_8020FC4(struct BerryCrushGame *); +void sub_8022BEC(u16, u8, u8 *); +void sub_8024604(u8 *, u8, s8, u8, u8, u8, u8); +static int sub_8021450(struct BerryCrushGame *); +void sub_8022588(struct BerryCrushGame *); +void sub_8022600(struct BerryCrushGame *); +void sub_80226D0(struct BerryCrushGame *); +void sub_8022730(struct BerryCrushGame *); +void sub_8022960(struct BerryCrushGame *); +void sub_8022524(struct BerryCrushGame_138 *, u16); +void sub_8022B28(struct Sprite *); + +extern struct BerryCrushGame *gUnknown_02022C90; + +extern const struct BgTemplate gUnknown_082F32C8[4]; +extern const u8 gBerryCrushGrinderTopTilemap[]; +extern const u8 gBerryCrushContainerCapTilemap[]; +extern const u8 gBerryCrushBackgroundTilemap[]; +extern const struct SpriteTemplate gUnknown_082F436C; +extern const u16 gUnknown_082F41E8[]; +extern const s8 gUnknown_082F41CC[][2]; +extern const s8 gUnknown_082F41D2[][2]; + +struct BerryCrushGame *sub_8020C00(void) +{ + return gUnknown_02022C90; +} + +int sub_8020C0C(MainCallback callback) +{ + if (!gUnknown_02022C90) + return 2; + + if (!callback) + callback = gUnknown_02022C90->unk0; + + DestroyTask(gUnknown_02022C90->unkA); + FREE_AND_SET_NULL(gUnknown_02022C90); + SetMainCallback2(callback); + if (callback == CB2_ReturnToField) + { + gTextFlags.autoScroll = 1; + PlayNewMapMusic(MUS_POKECEN); + SetMainCallback1(CB1_Overworld); + } + + return 0; +} + +void sub_8020C70(MainCallback callback) +{ + u8 playerCount = 0; + u8 multiplayerId; + + if (!gReceivedRemoteLinkPlayers || gWirelessCommType == 0) + { + SetMainCallback2(callback); + gUnknown_03005000.unk_10 = 0; + gUnknown_03005000.unk_12 = 0; + gUnknown_03005000.unk_ee = 1; + return; + } + + playerCount = GetLinkPlayerCount(); + multiplayerId = GetMultiplayerId(); + if (playerCount < 2 || multiplayerId >= playerCount) + { + SetMainCallback2(callback); + gUnknown_03005000.unk_10 = 0; + gUnknown_03005000.unk_12 = 0; + gUnknown_03005000.unk_ee = 1; + return; + } + + gUnknown_02022C90 = AllocZeroed(sizeof(*gUnknown_02022C90)); + if (!gUnknown_02022C90) + { + SetMainCallback2(callback); + gUnknown_03005000.unk_10 = 0; + gUnknown_03005000.unk_12 = 0; + gUnknown_03005000.unk_ee = 1; + return; + } + + gUnknown_02022C90->unk0 = callback; + gUnknown_02022C90->unk8 = multiplayerId; + gUnknown_02022C90->unk9 = playerCount; + sub_8020FC4(gUnknown_02022C90); + gUnknown_02022C90->unk12 = 1; + gUnknown_02022C90->unkE = 1; + gUnknown_02022C90->unkF = 6; + sub_8024604(gUnknown_02022C90->unk36, 1, -1, 0, 16, 0, 0); + sub_8022BEC(4, 1, gUnknown_02022C90->unk36); + SetMainCallback2(sub_8020F88); + gUnknown_02022C90->unkA = CreateTask(sub_8020FA0, 8); + gTextFlags.autoScroll = 0; +} + +static void sub_8020D8C(void) +{ + if (gSpecialVar_ItemId < FIRST_BERRY_INDEX || gSpecialVar_ItemId > LAST_BERRY_INDEX + 1) + gSpecialVar_ItemId = ITEM_CHERI_BERRY; + else + RemoveBagItem(gSpecialVar_ItemId, 1); + + gUnknown_02022C90->unk84.separate.others[gUnknown_02022C90->unk8].unk0 = gSpecialVar_ItemId - FIRST_BERRY_INDEX; + gUnknown_02022C90->unkE = 1; + gUnknown_02022C90->unkF = 9; + sub_8024604(gUnknown_02022C90->unk36, 0, -1, 0, 16, 0, 0); + sub_8022BEC(4, 1, gUnknown_02022C90->unk36); + gUnknown_02022C90->unkA = CreateTask(sub_8020FA0, 8); + SetMainCallback2(sub_8020F88); +} + +void sub_8020E1C(void) +{ + DestroyTask(gUnknown_02022C90->unkA); + sub_81AABF0(sub_8020D8C); +} + +static void sub_8020E3C(void) +{ + SetVBlankCallback(sub_8020F74); +} + +void sub_8020E4C(void) +{ + SetVBlankCallback(NULL); +} + +void sub_8020E58(void) +{ + u32 var0, var1; + + var0 = gUnknown_02022C90->unk6C; + var0 <<= 8; + var0 = sub_81515FC(var0, 60 << 8); + var1 = gUnknown_02022C90->unk72; + var1 <<= 8; + var1 = sub_81515FC(var1, var0) & 0xFFFF; + gUnknown_02022C90->unk16 = var1; + switch (gUnknown_02022C90->unk9) + { + case 2: + if (gUnknown_02022C90->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[0]) + { + gUnknown_02022C90->unk25_1 = 1; + gSaveBlock2Ptr->berryCrush.berryCrushResults[0] = gUnknown_02022C90->unk16; + } + break; + case 3: + if (gUnknown_02022C90->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[1]) + { + gUnknown_02022C90->unk25_1 = 1; + gSaveBlock2Ptr->berryCrush.berryCrushResults[1] = gUnknown_02022C90->unk16; + } + break; + case 4: + if (gUnknown_02022C90->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[2]) + { + gUnknown_02022C90->unk25_1 = 1; + gSaveBlock2Ptr->berryCrush.berryCrushResults[2] = gUnknown_02022C90->unk16; + } + break; + case 5: + if (gUnknown_02022C90->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[3]) + { + gUnknown_02022C90->unk25_1 = 1; + gSaveBlock2Ptr->berryCrush.berryCrushResults[3] = gUnknown_02022C90->unk16; + } + break; + } + + gUnknown_02022C90->unk1C = gUnknown_02022C90->unk68; + if (GiveBerryPowder(gUnknown_02022C90->unk1C)) + return; + + gUnknown_02022C90->unk25_0 = 1; +} + +static void sub_8020F74(void) +{ + TransferPlttBuffer(); + LoadOam(); + ProcessSpriteCopyRequests(); +} + +static void sub_8020F88(void) +{ + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); +} + +static void sub_8020FA0(u8 taskId) +{ + if (gUnknown_02022C90->unk4) + gUnknown_02022C90->unk4(gUnknown_02022C90, gUnknown_02022C90->unk36); + + sub_8021450(gUnknown_02022C90); +} + +#ifdef NONMATCHING +void sub_8020FC4(struct BerryCrushGame *arg0) +{ + u8 i; + + for (i = 0; i < arg0->unk9; i++) + StringCopy(arg0->unk84.players[i].unk14, gLinkPlayers[i].name); + + for (; i < 5; i++) + { + memset(arg0->unk84.players[i].unk14, 1, PLAYER_NAME_LENGTH); + arg0->unk84.players[i].unk14[PLAYER_NAME_LENGTH] = EOS; + } + + switch (gSaveBlock2Ptr->optionsTextSpeed) + { + case OPTIONS_TEXT_SPEED_SLOW: + arg0->unkB = 8; + break; + case OPTIONS_TEXT_SPEED_MID: + arg0->unkB = 4; + break; + case OPTIONS_TEXT_SPEED_FAST: + arg0->unkB = 1; + break; + } +} +#else +NAKED +void sub_8020FC4(struct BerryCrushGame *arg0) +{ + asm_unified("\n\ + push {r4-r6,lr}\n\ + adds r6, r0, 0\n\ + movs r5, 0\n\ + b _08020FE6\n\ +LOOP_1:\n\ + lsls r0, r5, 5\n\ + adds r0, 0x98\n\ + adds r0, r6, r0\n\ + lsls r1, r5, 3\n\ + subs r1, r5\n\ + lsls r1, 2\n\ + ldr r2, =gLinkPlayers + 8\n\ + adds r1, r2\n\ + bl StringCopy\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ +_08020FE6:\n\ + ldrb r0, [r6, 0x9]\n\ + cmp r5, r0\n\ + bcc LOOP_1\n\ + cmp r5, 0x4\n\ + bhi _08021012\n\ +_08020FF0:\n\ + lsls r4, r5, 5\n\ + adds r0, r4, 0\n\ + adds r0, 0x98\n\ + adds r0, r6, r0\n\ + movs r1, 0x1\n\ + movs r2, 0x7\n\ + bl memset\n\ + adds r4, r6, r4\n\ + adds r4, 0x9F\n\ + movs r0, 0xFF\n\ + strb r0, [r4]\n\ + adds r0, r5, 0x1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + cmp r5, 0x4\n\ + bls _08020FF0\n\ +_08021012:\n\ + ldr r0, =gSaveBlock2Ptr\n\ + ldr r0, [r0]\n\ + ldrb r0, [r0, 0x14]\n\ + lsls r0, 29\n\ + lsrs r0, 29\n\ + cmp r0, 0x1\n\ + beq _0802103E\n\ + cmp r0, 0x1\n\ + bgt _08021034\n\ + cmp r0, 0\n\ + beq _0802103A\n\ + b _08021046\n\ + .pool\n\ +_08021034:\n\ + cmp r0, 0x2\n\ + beq _08021042\n\ + b _08021046\n\ +_0802103A:\n\ + movs r0, 0x8\n\ + b _08021044\n\ +_0802103E:\n\ + movs r0, 0x4\n\ + b _08021044\n\ +_08021042:\n\ + movs r0, 0x1\n\ +_08021044:\n\ + strb r0, [r6, 0xB]\n\ +_08021046:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0"); +} +#endif // NONMATCHING + +int sub_802104C(void) +{ + struct BerryCrushGame *var0 = sub_8020C00(); + if (!var0) + return -1; + + switch (var0->unkC) + { + case 0: + SetVBlankCallback(NULL); + SetHBlankCallback(NULL); + SetGpuReg(REG_OFFSET_DISPCNT, 0); + ScanlineEffect_Stop(); + reset_temp_tile_data_buffers(); + break; + case 1: + CpuFill16(0, (void *)OAM, OAM_SIZE); + gReservedSpritePaletteCount = 0; + sub_8034C54(3); + break; + case 2: + ResetPaletteFade(); + ResetSpriteData(); + FreeAllSpritePalettes(); + break; + case 3: + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_082F32C8, ARRAY_COUNT(gUnknown_082F32C8)); + SetBgTilemapBuffer(1, var0->unk1C0); + SetBgTilemapBuffer(2, var0->unk21C0); + SetBgTilemapBuffer(3, var0->unk31C0); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + break; + case 4: + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32); + FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 32, 64); + FillBgTilemapBufferRect_Palette0(2, 0, 0, 0, 32, 32); + FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 32, 32); + break; + case 5: + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(2); + CopyBgTilemapBufferToVram(3); + decompress_and_copy_tile_data_to_vram(1, gUnknown_08DE34B8, 0, 0, 0); + break; + case 6: + if (free_temp_tile_data_buffers_if_possible()) + return 0; + + InitStandardTextBoxWindows(); + sub_8197200(); + sub_8022588(var0); + sub_8022600(var0); + gPaletteFade.bufferTransferDisabled = 1; + break; + case 7: + LoadPalette(gUnknown_08DE3398, 0, 0x180); + CopyToBgTilemapBuffer(1, gBerryCrushGrinderTopTilemap, 0, 0); + CopyToBgTilemapBuffer(2, gBerryCrushContainerCapTilemap, 0, 0); + CopyToBgTilemapBuffer(3, gBerryCrushBackgroundTilemap, 0, 0); + sub_80226D0(var0); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(2); + CopyBgTilemapBufferToVram(3); + break; + case 8: + sub_800E0E8(); + CreateWirelessStatusIndicatorSprite(0, 0); + sub_8022730(var0); + SetGpuReg(REG_OFFSET_BG1VOFS, -gSpriteCoordOffsetY); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + break; + case 9: + gPaletteFade.bufferTransferDisabled = 0; + BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK); + ShowBg(0); + ShowBg(1); + ShowBg(2); + ShowBg(3); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); + sub_8020E3C(); + var0->unkC = 0; + return 1; + } + + var0->unkC++; + return 0; +} + +int sub_802130C(void) +{ + struct BerryCrushGame *var0 = sub_8020C00(); + if (!var0) + return -1; + + switch (var0->unkC) + { + case 0: + sub_8010434(); + break; + case 1: + if (!IsLinkTaskFinished()) + return 0; + // fall through. The original author forgot to use "break" here + // because this will call BeginNormalPaletteFade() twice. + case 2: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + UpdatePaletteFade(); + break; + case 3: + if (UpdatePaletteFade()) + return 0; + break; + case 4: + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32); + FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 32, 32); + FillBgTilemapBufferRect_Palette0(2, 0, 0, 0, 32, 32); + FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 32, 32); + CopyBgTilemapBufferToVram(0); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(2); + CopyBgTilemapBufferToVram(3); + break; + case 5: + FreeAllWindowBuffers(); + HideBg(0); + UnsetBgTilemapBuffer(0); + HideBg(1); + UnsetBgTilemapBuffer(1); + HideBg(2); + UnsetBgTilemapBuffer(2); + HideBg(3); + UnsetBgTilemapBuffer(3); + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); + break; + case 6: + sub_800E084(); + sub_8022960(var0); + sub_8034CC8(); + break; + case 7: + var0->unkC = 0; + return 1; + } + + var0->unkC++; + return 0; +} + +static int sub_8021450(struct BerryCrushGame *arg0) +{ + gSpriteCoordOffsetY = arg0->unk2A + arg0->unk2C; + SetGpuReg(REG_OFFSET_BG1VOFS, -gSpriteCoordOffsetY); + if (arg0->unk12 == 7) + { + sub_8022524(&arg0->unk138, arg0->unk28); + } + + return 0; +} + +void sub_8021488(struct BerryCrushGame *arg0) +{ + arg0->unk2A = -104; + arg0->unk2C = 0; + gSpriteCoordOffsetX = 0; + gSpriteCoordOffsetY = -104; +} + +void sub_80214A8(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1) +{ + u8 i; + u8 spriteId; + s16 var0, var1; + s16 *data; + int var3; + s16 var5; + u32 var6; + + for (i = 0; i < arg0->unk9; i++) + { + spriteId = AddCustomItemIconSprite( + &gUnknown_082F436C, + gUnknown_082F41E8[i], + gUnknown_082F41E8[i], + arg0->unk84.separate.others[i].unk0 + 133); + arg1->unk38[i] = &gSprites[spriteId]; + arg1->unk38[i]->oam.priority = 3; + arg1->unk38[i]->affineAnimPaused = 1; + arg1->unk38[i]->pos1.x = arg1->unkC[i]->unk8 + 120; + arg1->unk38[i]->pos1.y = -16; + data = arg1->unk38[i]->data; + var5 = 512; + data[1] = var5; + data[2] = 32; + data[7] = 112; + var0 = arg1->unkC[i]->unkA - arg1->unkC[i]->unk8; + var3 = var0; + if (var0 < 0) + var3 += 3; + + data[6] = var3 >> 2; + var0 *= 128; + var6 = var5 + 32; + var6 = var6 / 2; + var1 = sub_81515D4(7, 0x3F80, var6); + data[0] = (u16)arg1->unk38[i]->pos1.x * 128; + data[3] = sub_81515D4(7, var0, var1); + var1 = sub_8151550(7, var1, 85); + data[4] = 0; + data[5] = sub_81515D4(7, 0x3F80, var1); + data[7] |= 0x8000; + if (arg1->unkC[i]->unk8 < 0) + StartSpriteAffineAnim(arg1->unk38[i], 1); + } +} + +void sub_8021608(struct Sprite *sprite) +{ + s16 *data = sprite->data; + + data[1] += data[2]; + sprite->pos2.y += data[1] >> 8; + if (data[7] & 0x8000) + { + sprite->data[0] += data[3]; + data[4] += data[5]; + sprite->pos2.x = Sin(data[4] >> 7, data[6]); + if ((data[7] & 0x8000) && (data[4] >> 7) > 126) + { + sprite->pos2.x = 0; + data[7] &= 0x7FFF; + } + } + + sprite->pos1.x = data[0] >> 7; + if (sprite->pos1.y + sprite->pos2.y >= (data[7] & 0x7FFF)) + { + sprite->callback = SpriteCallbackDummy; + FreeSpriteOamMatrix(sprite); + DestroySprite(sprite); + } +} + +void sub_80216A8(struct BerryCrushGame *arg0) +{ + u8 i; + for (i = 0; i < arg0->unk9; i++) + { + FreeSpritePaletteByTag(gUnknown_082F41E8[i]); + FreeSpriteTilesByTag(gUnknown_082F41E8[i]); + } +} + +// void sub_80216E0(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1) +// { +// u8 sp4; +// struct BerryCrushGame_4E *var4E; +// u8 i; +// u16 var0; + +// sp4 = 0; +// var4E = &arg0->unk40.unkE; +// for (i = 0; i < arg0->unk9; i++) +// { +// var0 = var4E->unkA >> (i * 3); +// var0 &= 7; +// if (var0) +// { +// int offset; +// sp4++; +// if (var0 & 0x4) +// StartSpriteAnim(arg1->unk24[i], 1); +// else +// StartSpriteAnim(arg1->unk24[i], 0); + +// arg1->unk24[i]->invisible = 0; +// arg1->unk24[i]->animPaused = 0; +// offset = (var0 % 4) - 1; +// arg1->unk24[i]->pos2.x = gUnknown_082F41CC[offset][0]; +// arg1->unk24[i]->pos2.y = gUnknown_082F41CC[offset][1]; +// } +// } + +// if (sp4 == 0) +// { +// arg0->unk25_2 = 0; +// } +// else +// { +// u8 var3 = arg0->unk28 % 3; +// u16 var2 = var3; +// for (i = 0; i < var4E->unkC * 2 + 3; i++) +// { +// if (arg1->unk4C[i]->invisible) +// { +// arg1->unk4C[i]->callback = sub_8022B28; +// arg1->unk4C[i]->pos1.x = gUnknown_082F41D2[i][0] + 120; +// arg1->unk4C[i]->pos1.y = gUnknown_082F41D2[i][1] + (136 - var2 * 4); +// arg1->unk4C[i]->pos2.x = gUnknown_082F41D2[i][0] / (var3 * 4); +// arg1->unk4C[i]->pos2.y = gUnknown_082F41D2[i][1]; +// if (var4E->unk4 & 0x2) +// StartSpriteAnim(arg1->unk4C[i], 1); +// else +// StartSpriteAnim(arg1->unk4C[i], 0); + +// var2++; +// if (var2 > 3) +// var2 = 0; +// } +// } + +// if (arg0->unk25_2) +// { +// arg0->unk25_2 = 0; +// } +// else +// { +// if (sp4 == 1) +// PlaySE(SE_TOY_DANGO); +// else +// PlaySE(SE_TOY_KABE); + +// arg0->unk25_2 = 1; +// } +// } +// } diff --git a/src/item_icon.c b/src/item_icon.c index 7bf1a29ca..91c32951a 100644 --- a/src/item_icon.c +++ b/src/item_icon.c @@ -122,7 +122,7 @@ u8 AddItemIconSprite(u16 tilesTag, u16 paletteTag, u16 itemId) } } -u8 AddCustomItemIconSprite(struct SpriteTemplate *customSpriteTemplate, u16 tilesTag, u16 paletteTag, u16 itemId) +u8 AddCustomItemIconSprite(const struct SpriteTemplate *customSpriteTemplate, u16 tilesTag, u16 paletteTag, u16 itemId) { if (!AllocItemIconTemporaryBuffers()) { diff --git a/src/union_room.c b/src/union_room.c index 338063ef1..5050b04f1 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -44,6 +44,7 @@ #include "easy_chat.h" #include "event_obj_lock.h" #include "union_room_chat.h" +#include "berry_crush.h" EWRAM_DATA u8 gUnknown_02022C20[12] = {}; EWRAM_DATA u8 gUnknown_02022C2C = 0; @@ -98,7 +99,6 @@ void sub_801807C(struct TradeUnkStruct *arg0); void sub_801AC54(void); void sub_802A9A8(u8 monId, MainCallback callback); void sub_802493C(u8 monId, MainCallback callback); -void sub_8020C70(MainCallback callback); void sub_80149D8(void); u16 sub_8019930(void); void sub_8018784(u8 windowId); -- cgit v1.2.3 From 462b196abc126cd8c2a06434f9b3b9c25a0d4327 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 31 Mar 2019 12:15:39 -0500 Subject: Give battle_anim files appropriate names --- src/battle_ai_script_commands.c | 1 + src/battle_ai_switch_items.c | 1 + src/battle_anim_80A5C6C.c | 2464 -------------------------------------- src/battle_anim_80A9C70.c | 534 --------- src/battle_anim_80D51AC.c | 1059 ---------------- src/battle_anim_8170478.c | 2267 ----------------------------------- src/battle_anim_mon_movement.c | 1059 ++++++++++++++++ src/battle_anim_mons.c | 2464 ++++++++++++++++++++++++++++++++++++++ src/battle_anim_special.c | 2267 +++++++++++++++++++++++++++++++++++ src/battle_anim_status_effects.c | 534 +++++++++ src/battle_main.c | 1 + src/battle_message.c | 1 + src/battle_tv.c | 1 + src/battle_util.c | 1 + src/battle_util2.c | 1 + src/pokemon.c | 1 + src/recorded_battle.c | 1 + 17 files changed, 6333 insertions(+), 6324 deletions(-) delete mode 100644 src/battle_anim_80A5C6C.c delete mode 100644 src/battle_anim_80A9C70.c delete mode 100644 src/battle_anim_80D51AC.c delete mode 100755 src/battle_anim_8170478.c create mode 100644 src/battle_anim_mon_movement.c create mode 100644 src/battle_anim_mons.c create mode 100755 src/battle_anim_special.c create mode 100644 src/battle_anim_status_effects.c (limited to 'src') diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c index 6098e2d3a..61876e0de 100644 --- a/src/battle_ai_script_commands.c +++ b/src/battle_ai_script_commands.c @@ -1,5 +1,6 @@ #include "global.h" #include "battle.h" +#include "battle_anim.h" #include "battle_ai_script_commands.h" #include "battle_factory.h" #include "battle_setup.h" diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c index a5958ebc6..2d67fda99 100644 --- a/src/battle_ai_switch_items.c +++ b/src/battle_ai_switch_items.c @@ -1,5 +1,6 @@ #include "global.h" #include "battle.h" +#include "battle_anim.h" #include "battle_controllers.h" #include "pokemon.h" #include "random.h" diff --git a/src/battle_anim_80A5C6C.c b/src/battle_anim_80A5C6C.c deleted file mode 100644 index 372377a0c..000000000 --- a/src/battle_anim_80A5C6C.c +++ /dev/null @@ -1,2464 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "battle_anim.h" -#include "bg.h" -#include "contest.h" -#include "data2.h" -#include "decompress.h" -#include "dma3.h" -#include "gpu_regs.h" -#include "alloc.h" -#include "palette.h" -#include "pokemon_icon.h" -#include "sprite.h" -#include "task.h" -#include "trig.h" -#include "util.h" -#include "constants/battle_anim.h" -#include "constants/species.h" - -#define GET_UNOWN_LETTER(personality) (( \ - (((personality & 0x03000000) >> 24) << 6) \ - | (((personality & 0x00030000) >> 16) << 4) \ - | (((personality & 0x00000300) >> 8) << 2) \ - | (((personality & 0x00000003) >> 0) << 0) \ -) % 28) - -#define IS_DOUBLE_BATTLE() ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) - -extern const struct OamData gUnknown_0852497C; -extern const struct MonCoords gMonFrontPicCoords[]; -extern const struct MonCoords gMonBackPicCoords[]; -extern const u8 gEnemyMonElevation[]; -extern const struct CompressedSpriteSheet gMonFrontPicTable[]; -extern const union AffineAnimCmd *gUnknown_082FF6C0[]; - -static void sub_80A6FB4(struct Sprite *sprite); -static void sub_80A7144(struct Sprite *sprite); -static void sub_80A791C(struct Sprite *sprite); -static void sub_80A8DFC(struct Sprite *sprite); -static void sub_80A8E88(struct Sprite *sprite); -static u16 GetBattlerYDeltaFromSpriteId(u8 spriteId); -static void AnimTask_BlendMonInAndOutSetup(struct Task *task); -static void sub_80A7AFC(u8 taskId); -static void sub_80A8CAC(u8 taskId); -static void AnimTask_BlendMonInAndOutStep(u8 taskId); -static bool8 sub_80A7238(void); -static void sub_80A8D78(struct Task *task, u8 taskId); - -// EWRAM vars -EWRAM_DATA static union AffineAnimCmd *gAnimTaskAffineAnim = NULL; - -// Const rom data -static const struct UCoords8 sBattlerCoords[][4] = -{ - { - { 72, 80 }, - { 176, 40 }, - { 48, 40 }, - { 112, 80 }, - }, - { - { 32, 80 }, - { 200, 40 }, - { 90, 88 }, - { 152, 32 }, - }, -}; - -// One entry for each of the four Castform forms. -const struct MonCoords gCastformFrontSpriteCoords[] = -{ - { .size = 0x44, .y_offset = 17 }, // NORMAL - { .size = 0x66, .y_offset = 9 }, // SUN - { .size = 0x46, .y_offset = 9 }, // RAIN - { .size = 0x86, .y_offset = 8 }, // HAIL -}; - -static const u8 sCastformElevations[] = -{ - 13, // NORMAL - 14, // SUN - 13, // RAIN - 13, // HAIL -}; - -// Y position of the backsprite for each of the four Castform forms. -static const u8 sCastformBackSpriteYCoords[] = -{ - 0, // NORMAL - 0, // SUN - 0, // RAIN - 0, // HAIL -}; - -static const struct SpriteTemplate sUnknown_08525F90[] = -{ - { - .tileTag = 55125, - .paletteTag = 55125, - .oam = &gUnknown_0852497C, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, - }, - { - .tileTag = 55126, - .paletteTag = 55126, - .oam = &gUnknown_0852497C, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, - } -}; - -static const struct SpriteSheet sUnknown_08525FC0[] = -{ - { gMiscBlank_Gfx, 0x800, 55125, }, - { gMiscBlank_Gfx, 0x800, 55126, }, -}; - -u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType) -{ - u8 retVal; - u16 species; - struct BattleSpriteInfo *spriteInfo; - - if (IsContest()) - { - if (coordType == BATTLER_COORD_Y_PIC_OFFSET && battlerId == 3) - coordType = BATTLER_COORD_Y; - } - - switch (coordType) - { - case BATTLER_COORD_X: - case BATTLER_COORD_X_2: - retVal = sBattlerCoords[IS_DOUBLE_BATTLE()][GetBattlerPosition(battlerId)].x; - break; - case BATTLER_COORD_Y: - retVal = sBattlerCoords[IS_DOUBLE_BATTLE()][GetBattlerPosition(battlerId)].y; - break; - case BATTLER_COORD_Y_PIC_OFFSET: - case BATTLER_COORD_Y_PIC_OFFSET_DEFAULT: - default: - if (IsContest()) - { - if (gContestResources->field_18->unk4_0) - species = gContestResources->field_18->unk2; - else - species = gContestResources->field_18->species; - } - else - { - if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) - { - spriteInfo = gBattleSpritesDataPtr->battlerData; - if (!spriteInfo[battlerId].transformSpecies) - species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); - else - species = spriteInfo[battlerId].transformSpecies; - } - else - { - spriteInfo = gBattleSpritesDataPtr->battlerData; - if (!spriteInfo[battlerId].transformSpecies) - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); - else - species = spriteInfo[battlerId].transformSpecies; - } - } - if (coordType == BATTLER_COORD_Y_PIC_OFFSET) - retVal = GetBattlerSpriteFinal_Y(battlerId, species, TRUE); - else - retVal = GetBattlerSpriteFinal_Y(battlerId, species, FALSE); - break; - } - - return retVal; -} - -u8 GetBattlerYDelta(u8 battlerId, u16 species) -{ - u16 letter; - u32 personality; - struct BattleSpriteInfo *spriteInfo; - u8 ret; - u16 coordSpecies; - - if (GetBattlerSide(battlerId) == B_SIDE_PLAYER || IsContest()) - { - if (species == SPECIES_UNOWN) - { - if (IsContest()) - { - if (gContestResources->field_18->unk4_0) - personality = gContestResources->field_18->unk10; - else - personality = gContestResources->field_18->unk8; - } - else - { - spriteInfo = gBattleSpritesDataPtr->battlerData; - if (!spriteInfo[battlerId].transformSpecies) - personality = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PERSONALITY); - else - personality = gTransformedPersonalities[battlerId]; - } - letter = GET_UNOWN_LETTER(personality); - if (!letter) - coordSpecies = species; - else - coordSpecies = letter + SPECIES_UNOWN_B - 1; - ret = gMonBackPicCoords[coordSpecies].y_offset; - } - else if (species == SPECIES_CASTFORM) - { - ret = sCastformBackSpriteYCoords[gBattleMonForms[battlerId]]; - } - else if (species > NUM_SPECIES) - { - ret = gMonBackPicCoords[0].y_offset; - } - else - { - ret = gMonBackPicCoords[species].y_offset; - } - } - else - { - if (species == SPECIES_UNOWN) - { - spriteInfo = gBattleSpritesDataPtr->battlerData; - if (!spriteInfo[battlerId].transformSpecies) - personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PERSONALITY); - else - personality = gTransformedPersonalities[battlerId]; - letter = GET_UNOWN_LETTER(personality); - if (!letter) - coordSpecies = species; - else - coordSpecies = letter + SPECIES_UNOWN_B - 1; - ret = gMonFrontPicCoords[coordSpecies].y_offset; - } - else if (species == SPECIES_CASTFORM) - { - ret = gCastformFrontSpriteCoords[gBattleMonForms[battlerId]].y_offset; - } - else if (species > NUM_SPECIES) - { - ret = gMonFrontPicCoords[0].y_offset; - } - else - { - ret = gMonFrontPicCoords[species].y_offset; - } - } - return ret; -} - -u8 GetBattlerElevation(u8 battlerId, u16 species) -{ - u8 ret = 0; - if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT) - { - if (!IsContest()) - { - if (species == SPECIES_CASTFORM) - ret = sCastformElevations[gBattleMonForms[battlerId]]; - else if (species > NUM_SPECIES) - ret = gEnemyMonElevation[0]; - else - ret = gEnemyMonElevation[species]; - } - } - return ret; -} - -u8 GetBattlerSpriteFinal_Y(u8 battlerId, u16 species, bool8 a3) -{ - u16 offset; - u8 y; - - if (GetBattlerSide(battlerId) == B_SIDE_PLAYER || IsContest()) - { - offset = GetBattlerYDelta(battlerId, species); - } - else - { - offset = GetBattlerYDelta(battlerId, species); - offset -= GetBattlerElevation(battlerId, species); - } - y = offset + sBattlerCoords[IS_DOUBLE_BATTLE()][GetBattlerPosition(battlerId)].y; - if (a3) - { - if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) - y += 8; - if (y > 104) - y = 104; - } - return y; -} - -u8 GetBattlerSpriteCoord2(u8 battlerId, u8 coordType) -{ - u16 species; - struct BattleSpriteInfo *spriteInfo; - - if (coordType == BATTLER_COORD_Y_PIC_OFFSET || coordType == BATTLER_COORD_Y_PIC_OFFSET_DEFAULT) - { - if (IsContest()) - { - if (gContestResources->field_18->unk4_0) - species = gContestResources->field_18->unk2; - else - species = gContestResources->field_18->species; - } - else - { - spriteInfo = gBattleSpritesDataPtr->battlerData; - if (!spriteInfo[battlerId].transformSpecies) - species = gAnimBattlerSpecies[battlerId]; - else - species = spriteInfo[battlerId].transformSpecies; - } - if (coordType == BATTLER_COORD_Y_PIC_OFFSET) - return GetBattlerSpriteFinal_Y(battlerId, species, TRUE); - else - return GetBattlerSpriteFinal_Y(battlerId, species, FALSE); - } - else - { - return GetBattlerSpriteCoord(battlerId, coordType); - } -} - -u8 GetBattlerSpriteDefault_Y(u8 battlerId) -{ - return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET_DEFAULT); -} - -u8 GetSubstituteSpriteDefault_Y(u8 battlerId) -{ - u16 y; - if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) - y = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 16; - else - y = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 17; - return y; -} - -u8 GetBattlerYCoordWithElevation(u8 battlerId) -{ - u16 species; - u8 y; - struct BattleSpriteInfo *spriteInfo; - - y = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y); - if (!IsContest()) - { - if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) - { - spriteInfo = gBattleSpritesDataPtr->battlerData; - if (!spriteInfo[battlerId].transformSpecies) - species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); - else - species = spriteInfo[battlerId].transformSpecies; - } - else - { - spriteInfo = gBattleSpritesDataPtr->battlerData; - if (!spriteInfo[battlerId].transformSpecies) - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); - else - species = spriteInfo[battlerId].transformSpecies; - } - if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) - y -= GetBattlerElevation(battlerId, species); - } - return y; -} - -u8 GetAnimBattlerSpriteId(u8 animBattler) -{ - u8 *sprites; - - if (animBattler == ANIM_ATTACKER) - { - if (IsBattlerSpritePresent(gBattleAnimAttacker)) - { - sprites = gBattlerSpriteIds; - return sprites[gBattleAnimAttacker]; - } - else - { - return 0xff; - } - } - else if (animBattler == ANIM_TARGET) - { - if (IsBattlerSpritePresent(gBattleAnimTarget)) - { - sprites = gBattlerSpriteIds; - return sprites[gBattleAnimTarget]; - } - else - { - return 0xff; - } - } - else if (animBattler == ANIM_ATK_PARTNER) - { - if (!IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) - return 0xff; - else - return gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]; - } - else - { - if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget))) - return gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimTarget)]; - else - return 0xff; - } -} - -void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*callback)(struct Sprite*)) -{ - sprite->data[6] = (u32)(callback) & 0xffff; - sprite->data[7] = (u32)(callback) >> 16; -} - -void SetCallbackToStoredInData6(struct Sprite *sprite) -{ - u32 callback = (u16)sprite->data[6] | (sprite->data[7] << 16); - sprite->callback = (void (*)(struct Sprite *))callback; -} - -void TranslateSpriteInCircleOverDuration(struct Sprite *sprite) -{ - if (sprite->data[3]) - { - sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]); - sprite->pos2.y = Cos(sprite->data[0], sprite->data[1]); - sprite->data[0] += sprite->data[2]; - if (sprite->data[0] >= 0x100) - sprite->data[0] -= 0x100; - else if (sprite->data[0] < 0) - sprite->data[0] += 0x100; - sprite->data[3]--; - } - else - { - SetCallbackToStoredInData6(sprite); - } -} - -void TranslateSpriteInGrowingCircleOverDuration(struct Sprite *sprite) -{ - if (sprite->data[3]) - { - sprite->pos2.x = Sin(sprite->data[0], (sprite->data[5] >> 8) + sprite->data[1]); - sprite->pos2.y = Cos(sprite->data[0], (sprite->data[5] >> 8) + sprite->data[1]); - sprite->data[0] += sprite->data[2]; - sprite->data[5] += sprite->data[4]; - if (sprite->data[0] >= 0x100) - sprite->data[0] -= 0x100; - else if (sprite->data[0] < 0) - sprite->data[0] += 0x100; - sprite->data[3]--; - } - else - { - SetCallbackToStoredInData6(sprite); - } -} - -void sub_80A63C8(struct Sprite *sprite) -{ - if (sprite->data[3]) - { - sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]); - sprite->pos2.y = Cos(sprite->data[4], sprite->data[1]); - sprite->data[0] += sprite->data[2]; - sprite->data[4] += sprite->data[5]; - if (sprite->data[0] >= 0x100) - sprite->data[0] -= 0x100; - else if (sprite->data[0] < 0) - sprite->data[0] += 0x100; - if (sprite->data[4] >= 0x100) - sprite->data[4] -= 0x100; - else if (sprite->data[4] < 0) - sprite->data[4] += 0x100; - sprite->data[3]--; - } - else - { - SetCallbackToStoredInData6(sprite); - } -} - -void TranslateSpriteInEllipseOverDuration(struct Sprite *sprite) -{ - if (sprite->data[3]) - { - sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]); - sprite->pos2.y = Cos(sprite->data[0], sprite->data[4]); - sprite->data[0] += sprite->data[2]; - if (sprite->data[0] >= 0x100) - sprite->data[0] -= 0x100; - else if (sprite->data[0] < 0) - sprite->data[0] += 0x100; - sprite->data[3]--; - } - else - { - SetCallbackToStoredInData6(sprite); - } -} - -// Simply waits until the sprite's data[0] hits zero. -// This is used to let sprite anims or affine anims to run for a designated -// duration. -void WaitAnimForDuration(struct Sprite *sprite) -{ - if (sprite->data[0] > 0) - sprite->data[0]--; - else - SetCallbackToStoredInData6(sprite); -} - -static void sub_80A64D0(struct Sprite *sprite) -{ - sub_80A64EC(sprite); - sprite->callback = TranslateSpriteLinear; - sprite->callback(sprite); -} - -void sub_80A64EC(struct Sprite *sprite) -{ - s16 old; - int xDiff; - - if (sprite->data[1] > sprite->data[2]) - sprite->data[0] = -sprite->data[0]; - xDiff = sprite->data[2] - sprite->data[1]; - old = sprite->data[0]; - sprite->data[0] = abs(xDiff / sprite->data[0]); - sprite->data[2] = (sprite->data[4] - sprite->data[3]) / sprite->data[0]; - sprite->data[1] = old; -} - -void TranslateSpriteLinear(struct Sprite *sprite) -{ - if (sprite->data[0] > 0) - { - sprite->data[0]--; - sprite->pos2.x += sprite->data[1]; - sprite->pos2.y += sprite->data[2]; - } - else - { - SetCallbackToStoredInData6(sprite); - } -} - -void TranslateSpriteLinearFixedPoint(struct Sprite *sprite) -{ - if (sprite->data[0] > 0) - { - sprite->data[0]--; - sprite->data[3] += sprite->data[1]; - sprite->data[4] += sprite->data[2]; - sprite->pos2.x = sprite->data[3] >> 8; - sprite->pos2.y = sprite->data[4] >> 8; - } - else - { - SetCallbackToStoredInData6(sprite); - } -} - -static void TranslateSpriteLinearFixedPointIconFrame(struct Sprite *sprite) -{ - if (sprite->data[0] > 0) - { - sprite->data[0]--; - sprite->data[3] += sprite->data[1]; - sprite->data[4] += sprite->data[2]; - sprite->pos2.x = sprite->data[3] >> 8; - sprite->pos2.y = sprite->data[4] >> 8; - } - else - { - SetCallbackToStoredInData6(sprite); - } - - UpdateMonIconFrame(sprite); -} - -void sub_80A65EC(struct Sprite *sprite) -{ - sprite->data[1] = sprite->pos1.x + sprite->pos2.x; - sprite->data[3] = sprite->pos1.y + sprite->pos2.y; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); - sprite->callback = sub_80A64D0; -} - -void TranslateMonSpriteLinear(struct Sprite *sprite) -{ - if (sprite->data[0] > 0) - { - sprite->data[0]--; - gSprites[sprite->data[3]].pos2.x += sprite->data[1]; - gSprites[sprite->data[3]].pos2.y += sprite->data[2]; - } - else - { - SetCallbackToStoredInData6(sprite); - } -} - -void TranslateMonSpriteLinearFixedPoint(struct Sprite *sprite) -{ - if (sprite->data[0] > 0) - { - sprite->data[0]--; - sprite->data[3] += sprite->data[1]; - sprite->data[4] += sprite->data[2]; - gSprites[sprite->data[5]].pos2.x = sprite->data[3] >> 8; - gSprites[sprite->data[5]].pos2.y = sprite->data[4] >> 8; - } - else - { - SetCallbackToStoredInData6(sprite); - } -} - -void TranslateSpriteLinearAndFlicker(struct Sprite *sprite) -{ - if (sprite->data[0] > 0) - { - sprite->data[0]--; - sprite->pos2.x = sprite->data[2] >> 8; - sprite->data[2] += sprite->data[1]; - sprite->pos2.y = sprite->data[4] >> 8; - sprite->data[4] += sprite->data[3]; - if (sprite->data[0] % sprite->data[5] == 0) - { - if (sprite->data[5]) - sprite->invisible ^= 1; - } - } - else - { - SetCallbackToStoredInData6(sprite); - } -} - -void DestroySpriteAndMatrix(struct Sprite *sprite) -{ - FreeSpriteOamMatrix(sprite); - DestroyAnimSprite(sprite); -} - -void sub_80A6760(struct Sprite *sprite) -{ - sprite->data[1] = sprite->pos1.x + sprite->pos2.x; - sprite->data[3] = sprite->pos1.y + sprite->pos2.y; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); - sprite->callback = sub_80A64D0; -} - -void sub_80A67A4(struct Sprite *sprite) -{ - ResetPaletteStructByUid(sprite->data[5]); - DestroySpriteAndMatrix(sprite); -} - -void RunStoredCallbackWhenAffineAnimEnds(struct Sprite *sprite) -{ - if (sprite->affineAnimEnded) - SetCallbackToStoredInData6(sprite); -} - -void RunStoredCallbackWhenAnimEnds(struct Sprite *sprite) -{ - if (sprite->animEnded) - SetCallbackToStoredInData6(sprite); -} - -void DestroyAnimSpriteAndDisableBlend(struct Sprite *sprite) -{ - SetGpuReg(REG_OFFSET_BLDCNT, 0); - SetGpuReg(REG_OFFSET_BLDALPHA, 0); - DestroyAnimSprite(sprite); -} - -void DestroyAnimVisualTaskAndDisableBlend(u8 taskId) -{ - SetGpuReg(REG_OFFSET_BLDCNT, 0); - SetGpuReg(REG_OFFSET_BLDALPHA, 0); - DestroyAnimVisualTask(taskId); -} - -void SetSpriteCoordsToAnimAttackerCoords(struct Sprite *sprite) -{ - sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); - sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); -} - -// Sets the initial x offset of the anim sprite depending on the horizontal orientation -// of the two involved mons. -void SetAnimSpriteInitialXOffset(struct Sprite *sprite, s16 xOffset) -{ - u16 attackerX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); - u16 targetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); - - if (attackerX > targetX) - { - sprite->pos1.x -= xOffset; - } - else if (attackerX < targetX) - { - sprite->pos1.x += xOffset; - } - else - { - if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) - sprite->pos1.x -= xOffset; - else - sprite->pos1.x += xOffset; - } -} - -void InitAnimArcTranslation(struct Sprite *sprite) -{ - sprite->data[1] = sprite->pos1.x; - sprite->data[3] = sprite->pos1.y; - InitAnimLinearTranslation(sprite); - sprite->data[6] = 0x8000 / sprite->data[0]; - sprite->data[7] = 0; -} - -bool8 TranslateAnimHorizontalArc(struct Sprite *sprite) -{ - if (AnimTranslateLinear(sprite)) - return TRUE; - sprite->data[7] += sprite->data[6]; - sprite->pos2.y += Sin((u8)(sprite->data[7] >> 8), sprite->data[5]); - return FALSE; -} - -bool8 TranslateAnimVerticalArc(struct Sprite *sprite) -{ - if (AnimTranslateLinear(sprite)) - return TRUE; - sprite->data[7] += sprite->data[6]; - sprite->pos2.x += Sin((u8)(sprite->data[7] >> 8), sprite->data[5]); - return FALSE; -} - -void SetSpritePrimaryCoordsFromSecondaryCoords(struct Sprite *sprite) -{ - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; -} - -void InitSpritePosToAnimTarget(struct Sprite *sprite, bool8 respectMonPicOffsets) -{ - // Battle anim sprites are automatically created at the anim target's center, which - // is why there is no else clause for the "respectMonPicOffsets" check. - if (!respectMonPicOffsets) - { - sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X); - sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y); - } - SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); - sprite->pos1.y += gBattleAnimArgs[1]; -} - -void InitSpritePosToAnimAttacker(struct Sprite *sprite, bool8 respectMonPicOffsets) -{ - if (!respectMonPicOffsets) - { - sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_X); - sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_Y); - } - else - { - sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_X_2); - sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); - } - SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); - sprite->pos1.y += gBattleAnimArgs[1]; -} - -u8 GetBattlerSide(u8 battlerId) -{ - return GET_BATTLER_SIDE2(battlerId); -} - -u8 GetBattlerPosition(u8 battlerId) -{ - return GET_BATTLER_POSITION(battlerId); -} - -u8 GetBattlerAtPosition(u8 position) -{ - u8 i; - - for (i = 0; i < gBattlersCount; i++) - { - if (gBattlerPositions[i] == position) - break; - } - return i; -} - -bool8 IsBattlerSpritePresent(u8 battlerId) -{ - if (IsContest()) - { - if (gBattleAnimAttacker == battlerId) - return TRUE; - else if (gBattleAnimTarget == battlerId) - return TRUE; - else - return FALSE; - } - else - { - if (gBattlerPositions[battlerId] == 0xff) - { - return FALSE; - } - else if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) - { - if (GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_HP) != 0) - return TRUE; - } - else - { - if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_HP) != 0) - return TRUE; - } - } - return FALSE; -} - -bool8 IsDoubleBattle(void) -{ - return IS_DOUBLE_BATTLE(); -} - -void sub_80A6B30(struct BattleAnimBgData *unk) -{ - if (IsContest()) - { - unk->bgTiles = gUnknown_0202305C; - unk->bgTilemap = (u16 *)gUnknown_02023060; - unk->paletteId = 14; - unk->bgId = 1; - unk->tilesOffset = 0; - unk->unused = 0; - } - else - { - unk->bgTiles = gUnknown_0202305C; - unk->bgTilemap = (u16 *)gUnknown_02023060; - unk->paletteId = 8; - unk->bgId = 1; - unk->tilesOffset = 0x200; - unk->unused = 0; - } -} - -void sub_80A6B90(struct BattleAnimBgData *unk, u32 arg1) -{ - if (IsContest()) - { - unk->bgTiles = gUnknown_0202305C; - unk->bgTilemap = (u16 *)gUnknown_02023060; - unk->paletteId = 14; - unk->bgId = 1; - unk->tilesOffset = 0; - unk->unused = 0; - } - else if (arg1 == 1) - { - sub_80A6B30(unk); - } - else - { - unk->bgTiles = gUnknown_0202305C; - unk->bgTilemap = (u16 *)gUnknown_02023060; - unk->paletteId = 9; - unk->bgId = 2; - unk->tilesOffset = 0x300; - unk->unused = 0; - } -} - -void sub_80A6BFC(struct BattleAnimBgData *unk, u8 unused) -{ - unk->bgTiles = gUnknown_0202305C; - unk->bgTilemap = (u16 *)gUnknown_02023060; - if (IsContest()) - { - unk->paletteId = 14; - unk->bgId = 1; - unk->tilesOffset = 0; - unk->unused = 0; - } - else if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1) - { - unk->paletteId = 8; - unk->bgId = 1; - unk->tilesOffset = 0x200; - unk->unused = 0; - } - else - { - unk->paletteId = 9; - unk->bgId = 2; - unk->tilesOffset = 0x300; - unk->unused = 0; - } -} - -void sub_80A6C68(u32 bgId) -{ - struct BattleAnimBgData unkStruct; - - sub_80A6B90(&unkStruct, bgId); - CpuFill32(0, unkStruct.bgTiles, 0x2000); - LoadBgTiles(unkStruct.bgId, unkStruct.bgTiles, 0x2000, unkStruct.tilesOffset); - FillBgTilemapBufferRect(unkStruct.bgId, 0, 0, 0, 32, 64, 17); - CopyBgTilemapBufferToVram(unkStruct.bgId); -} - -void AnimLoadCompressedBgGfx(u32 bgId, const u32 *src, u32 tilesOffset) -{ - CpuFill32(0, gUnknown_0202305C, 0x2000); - LZDecompressWram(src, gUnknown_0202305C); - LoadBgTiles(bgId, gUnknown_0202305C, 0x2000, tilesOffset); -} - -static void InitAnimBgTilemapBuffer(u32 bgId, const void *src) -{ - FillBgTilemapBufferRect(bgId, 0, 0, 0, 32, 64, 17); - CopyToBgTilemapBuffer(bgId, src, 0, 0); -} - -void AnimLoadCompressedBgTilemap(u32 bgId, const void *src) -{ - InitAnimBgTilemapBuffer(bgId, src); - CopyBgTilemapBufferToVram(bgId); -} - -void sub_80A6D60(struct BattleAnimBgData *unk, const void *src, u32 arg2) -{ - InitAnimBgTilemapBuffer(unk->bgId, src); - if (IsContest() == TRUE) - sub_80A4720(unk->paletteId, unk->bgTilemap, 0, arg2); - CopyBgTilemapBufferToVram(unk->bgId); -} - -u8 sub_80A6D94(void) -{ - if (IsContest()) - return 1; - else - return 2; -} - -void sub_80A6DAC(bool8 arg0) -{ - if (!arg0 || IsContest()) - { - SetAnimBgAttribute(3, BG_ANIM_SCREEN_SIZE, 0); - SetAnimBgAttribute(3, BG_ANIM_AREA_OVERFLOW_MODE, 1); - } - else - { - SetAnimBgAttribute(3, BG_ANIM_SCREEN_SIZE, 1); - SetAnimBgAttribute(3, BG_ANIM_AREA_OVERFLOW_MODE, 0); - } -} - -void sub_80A6DEC(struct Sprite *sprite) -{ - sprite->data[1] = sprite->pos1.x; - sprite->data[3] = sprite->pos1.y; - InitSpriteDataForLinearTranslation(sprite); - sprite->callback = TranslateSpriteLinearFixedPointIconFrame; - sprite->callback(sprite); -} - -void InitSpriteDataForLinearTranslation(struct Sprite *sprite) -{ - s16 x = (sprite->data[2] - sprite->data[1]) << 8; - s16 y = (sprite->data[4] - sprite->data[3]) << 8; - sprite->data[1] = x / sprite->data[0]; - sprite->data[2] = y / sprite->data[0]; - sprite->data[4] = 0; - sprite->data[3] = 0; -} - -void InitAnimLinearTranslation(struct Sprite *sprite) -{ - int x = sprite->data[2] - sprite->data[1]; - int y = sprite->data[4] - sprite->data[3]; - bool8 movingLeft = x < 0; - bool8 movingUp = y < 0; - u16 xDelta = abs(x) << 8; - u16 yDelta = abs(y) << 8; - - xDelta = xDelta / sprite->data[0]; - yDelta = yDelta / sprite->data[0]; - - if (movingLeft) - xDelta |= 1; - else - xDelta &= ~1; - - if (movingUp) - yDelta |= 1; - else - yDelta &= ~1; - - sprite->data[1] = xDelta; - sprite->data[2] = yDelta; - sprite->data[4] = 0; - sprite->data[3] = 0; -} - -void StartAnimLinearTranslation(struct Sprite *sprite) -{ - sprite->data[1] = sprite->pos1.x; - sprite->data[3] = sprite->pos1.y; - InitAnimLinearTranslation(sprite); - sprite->callback = sub_80A6F98; - sprite->callback(sprite); -} - -void sub_80A6F14(struct Sprite *sprite) -{ - sprite->data[1] = sprite->pos1.x; - sprite->data[3] = sprite->pos1.y; - InitAnimLinearTranslation(sprite); - sprite->callback = sub_80A6FB4; - sprite->callback(sprite); -} - -bool8 AnimTranslateLinear(struct Sprite *sprite) -{ - u16 v1, v2, x, y; - - if (!sprite->data[0]) - return TRUE; - - v1 = sprite->data[1]; - v2 = sprite->data[2]; - x = sprite->data[3]; - y = sprite->data[4]; - x += v1; - y += v2; - - if (v1 & 1) - sprite->pos2.x = -(x >> 8); - else - sprite->pos2.x = x >> 8; - - if (v2 & 1) - sprite->pos2.y = -(y >> 8); - else - sprite->pos2.y = y >> 8; - - sprite->data[3] = x; - sprite->data[4] = y; - sprite->data[0]--; - return FALSE; -} - -void sub_80A6F98(struct Sprite *sprite) -{ - if (AnimTranslateLinear(sprite)) - SetCallbackToStoredInData6(sprite); -} - -static void sub_80A6FB4(struct Sprite *sprite) -{ - sub_8039E9C(sprite); - if (AnimTranslateLinear(sprite)) - SetCallbackToStoredInData6(sprite); -} - -void sub_80A6FD4(struct Sprite *sprite) -{ - int v1 = abs(sprite->data[2] - sprite->data[1]) << 8; - sprite->data[0] = v1 / sprite->data[0]; - InitAnimLinearTranslation(sprite); -} - -void sub_80A7000(struct Sprite *sprite) -{ - sprite->data[1] = sprite->pos1.x; - sprite->data[3] = sprite->pos1.y; - sub_80A6FD4(sprite); - sprite->callback = sub_80A6F98; - sprite->callback(sprite); -} - -static void InitAnimFastLinearTranslation(struct Sprite *sprite) -{ - int xDiff = sprite->data[2] - sprite->data[1]; - int yDiff = sprite->data[4] - sprite->data[3]; - bool8 x_sign = xDiff < 0; - bool8 y_sign = yDiff < 0; - u16 x2 = abs(xDiff) << 4; - u16 y2 = abs(yDiff) << 4; - - x2 /= sprite->data[0]; - y2 /= sprite->data[0]; - - if (x_sign) - x2 |= 1; - else - x2 &= ~1; - - if (y_sign) - y2 |= 1; - else - y2 &= ~1; - - sprite->data[1] = x2; - sprite->data[2] = y2; - sprite->data[4] = 0; - sprite->data[3] = 0; -} - -void InitAndRunAnimFastLinearTranslation(struct Sprite *sprite) -{ - sprite->data[1] = sprite->pos1.x; - sprite->data[3] = sprite->pos1.y; - InitAnimFastLinearTranslation(sprite); - sprite->callback = sub_80A7144; - sprite->callback(sprite); -} - -bool8 AnimFastTranslateLinear(struct Sprite *sprite) -{ - u16 v1, v2, x, y; - - if (!sprite->data[0]) - return TRUE; - - v1 = sprite->data[1]; - v2 = sprite->data[2]; - x = sprite->data[3]; - y = sprite->data[4]; - x += v1; - y += v2; - - if (v1 & 1) - sprite->pos2.x = -(x >> 4); - else - sprite->pos2.x = x >> 4; - - if (v2 & 1) - sprite->pos2.y = -(y >> 4); - else - sprite->pos2.y = y >> 4; - - sprite->data[3] = x; - sprite->data[4] = y; - sprite->data[0]--; - return FALSE; -} - -static void sub_80A7144(struct Sprite *sprite) -{ - if (AnimFastTranslateLinear(sprite)) - SetCallbackToStoredInData6(sprite); -} - -void InitAnimFastLinearTranslationWithSpeed(struct Sprite *sprite) -{ - int xDiff = abs(sprite->data[2] - sprite->data[1]) << 4; - sprite->data[0] = xDiff / sprite->data[0]; - InitAnimFastLinearTranslation(sprite); -} - -void sub_80A718C(struct Sprite *sprite) -{ - sprite->data[1] = sprite->pos1.x; - sprite->data[3] = sprite->pos1.y; - InitAnimFastLinearTranslationWithSpeed(sprite); - sprite->callback = sub_80A7144; - sprite->callback(sprite); -} - -void SetSpriteRotScale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation) -{ - int i; - struct ObjAffineSrcData src; - struct OamMatrix matrix; - - src.xScale = xScale; - src.yScale = yScale; - src.rotation = rotation; - if (sub_80A7238()) - src.xScale = -src.xScale; - i = gSprites[spriteId].oam.matrixNum; - ObjAffineSet(&src, &matrix, 1, 2); - gOamMatrices[i].a = matrix.a; - gOamMatrices[i].b = matrix.b; - gOamMatrices[i].c = matrix.c; - gOamMatrices[i].d = matrix.d; -} - -static bool8 sub_80A7238(void) -{ - if (IsContest()) - { - if (gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].data[2] == SPECIES_UNOWN) - return FALSE; - else - return TRUE; - } - else - { - return FALSE; - } -} - -void PrepareBattlerSpriteForRotScale(u8 spriteId, u8 objMode) -{ - u8 battlerId = gSprites[spriteId].data[0]; - - if (IsContest() || IsBattlerSpriteVisible(battlerId)) - gSprites[spriteId].invisible = FALSE; - gSprites[spriteId].oam.objMode = objMode; - gSprites[spriteId].affineAnimPaused = TRUE; - if (!IsContest() && !gSprites[spriteId].oam.affineMode) - gSprites[spriteId].oam.matrixNum = gBattleSpritesDataPtr->healthBoxesData[battlerId].matrixNum; - gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE; - CalcCenterToCornerVec(&gSprites[spriteId], gSprites[spriteId].oam.shape, gSprites[spriteId].oam.size, gSprites[spriteId].oam.affineMode); -} - -void ResetSpriteRotScale(u8 spriteId) -{ - SetSpriteRotScale(spriteId, 0x100, 0x100, 0); - gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; - gSprites[spriteId].oam.objMode = 0; - gSprites[spriteId].affineAnimPaused = FALSE; - CalcCenterToCornerVec(&gSprites[spriteId], gSprites[spriteId].oam.shape, gSprites[spriteId].oam.size, gSprites[spriteId].oam.affineMode); -} - -// Sets the sprite's y offset equal to the y displacement caused by the -// matrix's rotation. -void SetBattlerSpriteYOffsetFromRotation(u8 spriteId) -{ - u16 matrixNum = gSprites[spriteId].oam.matrixNum; - // The "c" component of the battler sprite matrix contains the sine of the rotation angle divided by some scale amount. - s16 c = gOamMatrices[matrixNum].c; - if (c < 0) - c = -c; - - gSprites[spriteId].pos2.y = c >> 3; -} - -void TrySetSpriteRotScale(struct Sprite *sprite, bool8 recalcCenterVector, s16 xScale, s16 yScale, u16 rotation) -{ - int i; - struct ObjAffineSrcData src; - struct OamMatrix matrix; - - if (sprite->oam.affineMode & 1) - { - sprite->affineAnimPaused = TRUE; - if (recalcCenterVector) - CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); - src.xScale = xScale; - src.yScale = yScale; - src.rotation = rotation; - if (sub_80A7238()) - src.xScale = -src.xScale; - i = sprite->oam.matrixNum; - ObjAffineSet(&src, &matrix, 1, 2); - gOamMatrices[i].a = matrix.a; - gOamMatrices[i].b = matrix.b; - gOamMatrices[i].c = matrix.c; - gOamMatrices[i].d = matrix.d; - } -} - -void sub_80A749C(struct Sprite *sprite) -{ - TrySetSpriteRotScale(sprite, TRUE, 0x100, 0x100, 0); - sprite->affineAnimPaused = FALSE; - CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); -} - -static u16 ArcTan2_(s16 a, s16 b) -{ - return ArcTan2(a, b); -} - -u16 ArcTan2Neg(s16 a, s16 b) -{ - u16 var = ArcTan2_(a, b); - return -var; -} - -void SetGreyscaleOrOriginalPalette(u16 paletteNum, bool8 restoreOriginalColor) -{ - int i; - struct PlttData *originalColor; - struct PlttData *destColor; - u16 average; - - paletteNum *= 16; - - if (!restoreOriginalColor) - { - for (i = 0; i < 16; i++) - { - originalColor = (struct PlttData *)&gPlttBufferUnfaded[paletteNum + i]; - average = originalColor->r + originalColor->g + originalColor->b; - average /= 3; - - destColor = (struct PlttData *)&gPlttBufferFaded[paletteNum + i]; - destColor->r = average; - destColor->g = average; - destColor->b = average; - } - } - else - { - CpuCopy32(&gPlttBufferUnfaded[paletteNum], &gPlttBufferFaded[paletteNum], 32); - } -} - -u32 sub_80A75AC(u8 battleBackground, u8 attacker, u8 target, u8 attackerPartner, u8 targetPartner, u8 a6, u8 a7) -{ - u32 selectedPalettes = 0; - u32 shift; - - if (battleBackground) - { - if (!IsContest()) - selectedPalettes = 0xe; - else - selectedPalettes = 1 << sub_80A6D94(); - } - if (attacker) - { - shift = gBattleAnimAttacker + 16; - selectedPalettes |= 1 << shift; - } - if (target) - { - shift = gBattleAnimTarget + 16; - selectedPalettes |= 1 << shift; - } - if (attackerPartner) - { - if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) - { - shift = BATTLE_PARTNER(gBattleAnimAttacker) + 16; - selectedPalettes |= 1 << shift; - } - } - if (targetPartner) - { - if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget))) - { - shift = BATTLE_PARTNER(gBattleAnimTarget) + 16; - selectedPalettes |= 1 << shift; - } - } - if (a6) - { - if (!IsContest()) - selectedPalettes |= 0x100; - else - selectedPalettes |= 0x4000; - } - if (a7) - { - if (!IsContest()) - selectedPalettes |= 0x200; - } - return selectedPalettes; -} - -u32 sub_80A76C4(u8 a1, u8 a2, u8 a3, u8 a4) -{ - u32 var = 0; - u32 shift; - - if (IsContest()) - { - if (a1) - { - var |= 1 << 18; - return var; - } - } - else - { - if (a1) - { - if (IsBattlerSpriteVisible(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT))) - { - var |= 1 << (GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) + 16); - } - } - if (a2) - { - if (IsBattlerSpriteVisible(GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT))) - { - shift = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT) + 16; - var |= 1 << shift; - } - } - if (a3) - { - if (IsBattlerSpriteVisible(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))) - { - shift = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT) + 16; - var |= 1 << shift; - } - } - if (a4) - { - if (IsBattlerSpriteVisible(GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT))) - { - shift = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT) + 16; - var |= 1 << shift; - } - } - } - return var; -} - -u8 sub_80A77AC(u8 a1) -{ - return a1; -} - -static u8 GetBattlerAtPosition_(u8 position) -{ - return GetBattlerAtPosition(position); -} - -void sub_80A77C8(struct Sprite *sprite) -{ - bool8 var; - - if (!sprite->data[0]) - { - if (!gBattleAnimArgs[3]) - var = TRUE; - else - var = FALSE; - if (!gBattleAnimArgs[2]) - InitSpritePosToAnimAttacker(sprite, var); - else - InitSpritePosToAnimTarget(sprite, var); - sprite->data[0]++; - - } - else if (sprite->animEnded || sprite->affineAnimEnded) - { - DestroySpriteAndMatrix(sprite); - } -} - -// Linearly translates a sprite to a target position on the -// other mon's sprite. -// arg 0: initial x offset -// arg 1: initial y offset -// arg 2: target x offset -// arg 3: target y offset -// arg 4: duration -// arg 5: lower 8 bits = location on attacking mon, upper 8 bits = location on target mon pick to target -void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite) -{ - bool8 v1; - u8 coordType; - - if (!(gBattleAnimArgs[5] & 0xff00)) - v1 = TRUE; - else - v1 = FALSE; - - if (!(gBattleAnimArgs[5] & 0xff)) - coordType = BATTLER_COORD_Y_PIC_OFFSET; - else - coordType = BATTLER_COORD_Y; - - InitSpritePosToAnimAttacker(sprite, v1); - if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - - sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, coordType) + gBattleAnimArgs[3]; - sprite->callback = StartAnimLinearTranslation; - StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); -} - -void sub_80A78AC(struct Sprite *sprite) -{ - InitSpritePosToAnimAttacker(sprite, 1); - if (GetBattlerSide(gBattleAnimAttacker)) - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; - sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; - sprite->data[5] = gBattleAnimArgs[5]; - InitAnimArcTranslation(sprite); - sprite->callback = sub_80A791C; -} - -static void sub_80A791C(struct Sprite *sprite) -{ - if (TranslateAnimHorizontalArc(sprite)) - DestroyAnimSprite(sprite); -} - -void sub_80A7938(struct Sprite *sprite) -{ - bool8 r4; - u8 battlerId, coordType; - - if (!gBattleAnimArgs[6]) - { - r4 = TRUE; - coordType = BATTLER_COORD_Y_PIC_OFFSET; - } - else - { - r4 = FALSE; - coordType = BATTLER_COORD_Y; - } - if (!gBattleAnimArgs[5]) - { - InitSpritePosToAnimAttacker(sprite, r4); - battlerId = gBattleAnimAttacker; - } - else - { - InitSpritePosToAnimTarget(sprite, r4); - battlerId = gBattleAnimTarget; - } - if (GetBattlerSide(gBattleAnimAttacker)) - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - InitSpritePosToAnimTarget(sprite, r4); - sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[2] = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; - sprite->data[4] = GetBattlerSpriteCoord(battlerId, coordType) + gBattleAnimArgs[3]; - sprite->callback = StartAnimLinearTranslation; - StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); -} - -s16 CloneBattlerSpriteWithBlend(u8 animBattler) -{ - u16 i; - u8 spriteId = GetAnimBattlerSpriteId(animBattler); - - if (spriteId != 0xFF) - { - for (i = 0; i < MAX_SPRITES; i++) - { - if (!gSprites[i].inUse) - { - gSprites[i] = gSprites[spriteId]; - gSprites[i].oam.objMode = ST_OAM_OBJ_BLEND; - gSprites[i].invisible = FALSE; - return i; - } - } - } - return -1; -} - -void obj_delete_but_dont_free_vram(struct Sprite *sprite) -{ - sprite->usingSheet = TRUE; - DestroySprite(sprite); -} - -void sub_80A7A74(u8 taskId) -{ - s16 v1 = 0; - s16 v2 = 0; - - if (gBattleAnimArgs[2] > gBattleAnimArgs[0]) - v2 = 1; - if (gBattleAnimArgs[2] < gBattleAnimArgs[0]) - v2 = -1; - if (gBattleAnimArgs[3] > gBattleAnimArgs[1]) - v1 = 1; - if (gBattleAnimArgs[3] < gBattleAnimArgs[1]) - v1 = -1; - - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = gBattleAnimArgs[4]; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = gBattleAnimArgs[0]; - gTasks[taskId].data[4] = gBattleAnimArgs[1]; - gTasks[taskId].data[5] = v2; - gTasks[taskId].data[6] = v1; - gTasks[taskId].data[7] = gBattleAnimArgs[2]; - gTasks[taskId].data[8] = gBattleAnimArgs[3]; - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gBattleAnimArgs[0], gBattleAnimArgs[1])); - gTasks[taskId].func = sub_80A7AFC; -} - -static void sub_80A7AFC(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - - if (++task->data[0] > task->data[1]) - { - task->data[0] = 0; - if (++task->data[2] & 1) - { - if (task->data[3] != task->data[7]) - task->data[3] += task->data[5]; - } - else - { - if (task->data[4] != task->data[8]) - task->data[4] += task->data[6]; - } - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[3], task->data[4])); - if (task->data[3] == task->data[7] && task->data[4] == task->data[8]) - { - DestroyAnimVisualTask(taskId); - return; - } - } -} - -// Linearly blends a mon's sprite colors with a target color with increasing -// strength, and then blends out to the original color. -// arg 0: anim bank -// arg 1: blend color -// arg 2: target blend coefficient -// arg 3: initial delay -// arg 4: number of times to blend in and out -void AnimTask_BlendMonInAndOut(u8 task) -{ - u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); - if (spriteId == 0xff) - { - DestroyAnimVisualTask(task); - return; - } - gTasks[task].data[0] = (gSprites[spriteId].oam.paletteNum * 0x10) + 0x101; - AnimTask_BlendMonInAndOutSetup(&gTasks[task]); -} - -static void AnimTask_BlendMonInAndOutSetup(struct Task *task) -{ - task->data[1] = gBattleAnimArgs[1]; - task->data[2] = 0; - task->data[3] = gBattleAnimArgs[2]; - task->data[4] = 0; - task->data[5] = gBattleAnimArgs[3]; - task->data[6] = 0; - task->data[7] = gBattleAnimArgs[4]; - task->func = AnimTask_BlendMonInAndOutStep; -} - -static void AnimTask_BlendMonInAndOutStep(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - - if (++task->data[4] >= task->data[5]) - { - task->data[4] = 0; - if (!task->data[6]) - { - task->data[2]++; - BlendPalette(task->data[0], 15, task->data[2], task->data[1]); - if (task->data[2] == task->data[3]) - task->data[6] = 1; - } - else - { - task->data[2]--; - BlendPalette(task->data[0], 15, task->data[2], task->data[1]); - if (!task->data[2]) - { - if (--task->data[7]) - { - task->data[4] = 0; - task->data[6] = 0; - } - else - { - DestroyAnimVisualTask(taskId); - return; - } - } - } - } -} - -void sub_80A7CB4(u8 task) -{ - u8 palette = IndexOfSpritePaletteTag(gBattleAnimArgs[0]); - - if (palette == 0xff) - { - DestroyAnimVisualTask(task); - return; - } - gTasks[task].data[0] = (palette * 0x10) + 0x101; - AnimTask_BlendMonInAndOutSetup(&gTasks[task]); -} - -void PrepareAffineAnimInTaskData(struct Task *task, u8 spriteId, const union AffineAnimCmd *affineAnimCmds) -{ - task->data[7] = 0; - task->data[8] = 0; - task->data[9] = 0; - task->data[15] = spriteId; - task->data[10] = 0x100; - task->data[11] = 0x100; - task->data[12] = 0; - StorePointerInVars(&task->data[13], &task->data[14], affineAnimCmds); - PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); -} - -bool8 RunAffineAnimFromTaskData(struct Task *task) -{ - gAnimTaskAffineAnim = LoadPointerFromVars(task->data[13], task->data[14]) + (task->data[7] << 3); - switch (gAnimTaskAffineAnim->type) - { - default: - if (!gAnimTaskAffineAnim->frame.duration) - { - task->data[10] = gAnimTaskAffineAnim->frame.xScale; - task->data[11] = gAnimTaskAffineAnim->frame.yScale; - task->data[12] = gAnimTaskAffineAnim->frame.rotation; - task->data[7]++; - gAnimTaskAffineAnim++; - } - task->data[10] += gAnimTaskAffineAnim->frame.xScale; - task->data[11] += gAnimTaskAffineAnim->frame.yScale; - task->data[12] += gAnimTaskAffineAnim->frame.rotation; - SetSpriteRotScale(task->data[15], task->data[10], task->data[11], task->data[12]); - SetBattlerSpriteYOffsetFromYScale(task->data[15]); - if (++task->data[8] >= gAnimTaskAffineAnim->frame.duration) - { - task->data[8] = 0; - task->data[7]++; - } - break; - case AFFINEANIMCMDTYPE_JUMP: - task->data[7] = gAnimTaskAffineAnim->jump.target; - break; - case AFFINEANIMCMDTYPE_LOOP: - if (gAnimTaskAffineAnim->loop.count) - { - if (task->data[9]) - { - if (!--task->data[9]) - { - task->data[7]++; - break; - } - } - else - { - task->data[9] = gAnimTaskAffineAnim->loop.count; - } - if (!task->data[7]) - { - break; - } - for (;;) - { - task->data[7]--; - gAnimTaskAffineAnim--; - if (gAnimTaskAffineAnim->type == AFFINEANIMCMDTYPE_LOOP) - { - task->data[7]++; - return TRUE; - } - if (!task->data[7]) - return TRUE; - } - } - task->data[7]++; - break; - case AFFINEANIMCMDTYPE_END: - gSprites[task->data[15]].pos2.y = 0; - ResetSpriteRotScale(task->data[15]); - return FALSE; - } - - return TRUE; -} - -// Sets the sprite's y offset equal to the y displacement caused by the -// matrix's scale in the y dimension. -void SetBattlerSpriteYOffsetFromYScale(u8 spriteId) -{ - int var = 64 - GetBattlerYDeltaFromSpriteId(spriteId) * 2; - u16 matrix = gSprites[spriteId].oam.matrixNum; - int var2 = (var << 8) / gOamMatrices[matrix].d; - - if (var2 > 128) - var2 = 128; - gSprites[spriteId].pos2.y = (var - var2) / 2; -} - -// Sets the sprite's y offset equal to the y displacement caused by another sprite -// matrix's scale in the y dimension. -void SetBattlerSpriteYOffsetFromOtherYScale(u8 spriteId, u8 otherSpriteId) -{ - int var = 64 - GetBattlerYDeltaFromSpriteId(otherSpriteId) * 2; - u16 matrix = gSprites[spriteId].oam.matrixNum; - int var2 = (var << 8) / gOamMatrices[matrix].d; - - if (var2 > 128) - var2 = 128; - gSprites[spriteId].pos2.y = (var - var2) / 2; -} - -static u16 GetBattlerYDeltaFromSpriteId(u8 spriteId) -{ - struct BattleSpriteInfo *spriteInfo; - u8 battlerId = gSprites[spriteId].data[0]; - u16 species; - u16 i; - - for (i = 0; i < MAX_BATTLERS_COUNT; i++) - { - if (gBattlerSpriteIds[i] == spriteId) - { - if (IsContest()) - { - species = gContestResources->field_18->species; - return gMonBackPicCoords[species].y_offset; - } - else - { - if (GetBattlerSide(i) == B_SIDE_PLAYER) - { - spriteInfo = gBattleSpritesDataPtr->battlerData; - if (!spriteInfo[battlerId].transformSpecies) - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES); - else - species = spriteInfo[battlerId].transformSpecies; - - if (species == SPECIES_CASTFORM) - return sCastformBackSpriteYCoords[gBattleMonForms[battlerId]]; - else - return gMonBackPicCoords[species].y_offset; - } - else - { - spriteInfo = gBattleSpritesDataPtr->battlerData; - if (!spriteInfo[battlerId].transformSpecies) - species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES); - else - species = spriteInfo[battlerId].transformSpecies; - - if (species == SPECIES_CASTFORM) - return sCastformElevations[gBattleMonForms[battlerId]]; - else - return gMonFrontPicCoords[species].y_offset; - } - } - } - } - return 64; -} - -void StorePointerInVars(s16 *lo, s16 *hi, const void *ptr) -{ - *lo = ((intptr_t) ptr) & 0xffff; - *hi = (((intptr_t) ptr) >> 16) & 0xffff; -} - -void *LoadPointerFromVars(s16 lo, s16 hi) -{ - return (void *)((u16)lo | ((u16)hi << 16)); -} - -void sub_80A805C(struct Task *task, u8 a2, s16 a3, s16 a4, s16 a5, s16 a6, u16 a7) -{ - task->data[8] = a7; - task->data[15] = a2; // spriteId - task->data[9] = a3; - task->data[10] = a4; - task->data[13] = a5; - task->data[14] = a6; - task->data[11] = (a5 - a3) / a7; - task->data[12] = (a6 - a4) / a7; -} - -u8 sub_80A80C8(struct Task *task) -{ - if (!task->data[8]) - return 0; - - if (--task->data[8] != 0) - { - task->data[9] += task->data[11]; - task->data[10] += task->data[12]; - } - else - { - task->data[9] = task->data[13]; - task->data[10] = task->data[14]; - } - SetSpriteRotScale(task->data[15], task->data[9], task->data[10], 0); - if (task->data[8]) - SetBattlerSpriteYOffsetFromYScale(task->data[15]); - else - gSprites[task->data[15]].pos2.y = 0; - return task->data[8]; -} - -void AnimTask_GetFrustrationPowerLevel(u8 taskId) -{ - u16 powerLevel; - - if (gAnimFriendship <= 30) - powerLevel = 0; - else if (gAnimFriendship <= 100) - powerLevel = 1; - else if (gAnimFriendship <= 200) - powerLevel = 2; - else - powerLevel = 3; - gBattleAnimArgs[7] = powerLevel; - DestroyAnimVisualTask(taskId); -} - -void sub_80A8174(u8 priority) -{ - if (IsBattlerSpriteVisible(gBattleAnimTarget)) - gSprites[gBattlerSpriteIds[gBattleAnimTarget]].oam.priority = priority; - if (IsBattlerSpriteVisible(gBattleAnimAttacker)) - gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].oam.priority = priority; - if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget))) - gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimTarget)]].oam.priority = priority; - if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) - gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]].oam.priority = priority; -} - -void sub_80A8278(void) -{ - int i; - - for (i = 0; i < gBattlersCount; i++) - { - if (IsBattlerSpriteVisible(i)) - { - gSprites[gBattlerSpriteIds[i]].subpriority = GetBattlerSpriteSubpriority(i); - gSprites[gBattlerSpriteIds[i]].oam.priority = 2; - } - } -} - -u8 GetBattlerSpriteSubpriority(u8 battlerId) -{ - u8 position; - u8 subpriority; - - if (IsContest()) - { - if (battlerId == 2) - return 30; - else - return 40; - } - else - { - position = GetBattlerPosition(battlerId); - if (position == B_POSITION_PLAYER_LEFT) - subpriority = 30; - else if (position == B_POSITION_PLAYER_RIGHT) - subpriority = 20; - else if (position == B_POSITION_OPPONENT_LEFT) - subpriority = 40; - else - subpriority = 50; - } - - return subpriority; -} - -u8 GetBattlerSpriteBGPriority(u8 battlerId) -{ - u8 position = GetBattlerPosition(battlerId); - - if (IsContest()) - return 2; - else if (position == B_POSITION_PLAYER_LEFT || position == B_POSITION_OPPONENT_RIGHT) - return GetAnimBgAttribute(2, BG_ANIM_PRIORITY); - else - return GetAnimBgAttribute(1, BG_ANIM_PRIORITY); -} - -u8 GetBattlerSpriteBGPriorityRank(u8 battlerId) -{ - if (!IsContest()) - { - u8 position = GetBattlerPosition(battlerId); - if (position == B_POSITION_PLAYER_LEFT || position == B_POSITION_OPPONENT_RIGHT) - return 2; - else - return 1; - } - return 1; -} - -u8 sub_80A8394(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority, u32 personality, u32 trainerId, u32 battlerId, u32 a10) -{ - u8 spriteId; - u16 sheet = LoadSpriteSheet(&sUnknown_08525FC0[a3]); - u16 palette = AllocSpritePalette(sUnknown_08525F90[a3].paletteTag); - - if (gMonSpritesGfxPtr != NULL && gMonSpritesGfxPtr->field_17C == NULL) - gMonSpritesGfxPtr->field_17C = AllocZeroed(0x2000); - if (!isBackpic) - { - LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20); - if (a10 == 1 || sub_80688F8(5, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != 0) - LoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], - gMonSpritesGfxPtr->field_17C, - species, - personality, - TRUE); - else - LoadSpecialPokePic_2(&gMonFrontPicTable[species], - gMonSpritesGfxPtr->field_17C, - species, - personality, - TRUE); - } - else - { - LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20); - if (a10 == 1 || sub_80688F8(5, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != 0) - LoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species], - gMonSpritesGfxPtr->field_17C, - species, - personality, - FALSE); - else - LoadSpecialPokePic_2(&gMonBackPicTable[species], - gMonSpritesGfxPtr->field_17C, - species, - personality, - FALSE); - } - - RequestDma3Copy(gMonSpritesGfxPtr->field_17C, (void *)(OBJ_VRAM0 + (sheet * 0x20)), 0x800, 1); - FREE_AND_SET_NULL(gMonSpritesGfxPtr->field_17C); - - if (!isBackpic) - spriteId = CreateSprite(&sUnknown_08525F90[a3], x, y + gMonFrontPicCoords[species].y_offset, subpriority); - else - spriteId = CreateSprite(&sUnknown_08525F90[a3], x, y + gMonBackPicCoords[species].y_offset, subpriority); - - if (IsContest()) - { - gSprites[spriteId].affineAnims = gUnknown_082FF6C0; - StartSpriteAffineAnim(&gSprites[spriteId], 0); - } - return spriteId; -} - -void DestroySpriteAndFreeResources_(struct Sprite *sprite) -{ - DestroySpriteAndFreeResources(sprite); -} - -s16 GetBattlerSpriteCoordAttr(u8 battlerId, u8 attr) -{ - u16 species; - u32 personality; - u16 letter; - u16 unownSpecies; - int ret; - const struct MonCoords *coords; - struct BattleSpriteInfo *spriteInfo; - - if (IsContest()) - { - if (gContestResources->field_18->unk4_0) - { - species = gContestResources->field_18->unk2; - personality = gContestResources->field_18->unk10; - } - else - { - species = gContestResources->field_18->species; - personality = gContestResources->field_18->unk8; - } - if (species == SPECIES_UNOWN) - { - letter = GET_UNOWN_LETTER(personality); - if (!letter) - unownSpecies = SPECIES_UNOWN; - else - unownSpecies = letter + SPECIES_UNOWN_B - 1; - coords = &gMonBackPicCoords[unownSpecies]; - } - else if (species == SPECIES_CASTFORM) - { - coords = &gCastformFrontSpriteCoords[gBattleMonForms[battlerId]]; - } - else if (species <= SPECIES_EGG) - { - coords = &gMonBackPicCoords[species]; - } - else - { - coords = &gMonBackPicCoords[0]; - } - } - else - { - if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) - { - spriteInfo = gBattleSpritesDataPtr->battlerData; - if (!spriteInfo[battlerId].transformSpecies) - { - species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); - personality = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PERSONALITY); - } - else - { - species = spriteInfo[battlerId].transformSpecies; - personality = gTransformedPersonalities[battlerId]; - } - - if (species == SPECIES_UNOWN) - { - letter = GET_UNOWN_LETTER(personality); - if (!letter) - unownSpecies = SPECIES_UNOWN; - else - unownSpecies = letter + SPECIES_UNOWN_B - 1; - coords = &gMonBackPicCoords[unownSpecies]; - } - else if (species > NUM_SPECIES) - { - coords = &gMonBackPicCoords[0]; - } - else - { - coords = &gMonBackPicCoords[species]; - } - } - else - { - spriteInfo = gBattleSpritesDataPtr->battlerData; - if (!spriteInfo[battlerId].transformSpecies) - { - species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); - personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PERSONALITY); - } - else - { - species = spriteInfo[battlerId].transformSpecies; - personality = gTransformedPersonalities[battlerId]; - } - - if (species == SPECIES_UNOWN) - { - letter = GET_UNOWN_LETTER(personality); - if (!letter) - unownSpecies = SPECIES_UNOWN; - else - unownSpecies = letter + SPECIES_UNOWN_B - 1; - coords = &gMonFrontPicCoords[unownSpecies]; - } - else if (species == SPECIES_CASTFORM) - { - coords = &gCastformFrontSpriteCoords[gBattleMonForms[battlerId]]; - } - else if (species > NUM_SPECIES) - { - coords = &gMonFrontPicCoords[0]; - } - else - { - coords = &gMonFrontPicCoords[species]; - } - } - } - - switch (attr) - { - case BATTLER_COORD_ATTR_HEIGHT: - return (coords->size & 0xf) * 8; - case BATTLER_COORD_ATTR_WIDTH: - return (coords->size >> 4) * 8; - case BATTLER_COORD_ATTR_LEFT: - return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) - ((coords->size >> 4) * 4); - case BATTLER_COORD_ATTR_RIGHT: - return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) + ((coords->size >> 4) * 4); - case BATTLER_COORD_ATTR_TOP: - return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET) - ((coords->size & 0xf) * 4); - case BATTLER_COORD_ATTR_BOTTOM: - return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET) + ((coords->size & 0xf) * 4); - case BATTLER_COORD_ATTR_RAW_BOTTOM: - ret = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 31; - return ret - coords->y_offset; - default: - return 0; - } -} - -void SetAverageBattlerPositions(u8 battlerId, bool8 respectMonPicOffsets, s16 *x, s16 *y) -{ - u8 xCoordType, yCoordType; - s16 battlerX, battlerY; - s16 partnerX, partnerY; - - if (!respectMonPicOffsets) - { - xCoordType = BATTLER_COORD_X; - yCoordType = BATTLER_COORD_Y; - } - else - { - xCoordType = BATTLER_COORD_X_2; - yCoordType = BATTLER_COORD_Y_PIC_OFFSET; - } - - battlerX = GetBattlerSpriteCoord(battlerId, xCoordType); - battlerY = GetBattlerSpriteCoord(battlerId, yCoordType); - if (IsDoubleBattle() && !IsContest()) - { - partnerX = GetBattlerSpriteCoord(BATTLE_PARTNER(battlerId), xCoordType); - partnerY = GetBattlerSpriteCoord(BATTLE_PARTNER(battlerId), yCoordType); - } - else - { - partnerX = battlerX; - partnerY = battlerY; - } - - *x = (battlerX + partnerX) / 2; - *y = (battlerY + partnerY) / 2; -} - -u8 sub_80A89C8(int battlerId, u8 spriteId, int species) -{ - u8 newSpriteId = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); - gSprites[newSpriteId] = gSprites[spriteId]; - gSprites[newSpriteId].usingSheet = TRUE; - gSprites[newSpriteId].oam.priority = 0; - gSprites[newSpriteId].oam.objMode = 2; - gSprites[newSpriteId].oam.tileNum = gSprites[spriteId].oam.tileNum; - gSprites[newSpriteId].callback = SpriteCallbackDummy; - return newSpriteId; -} - -void sub_80A8A6C(struct Sprite *sprite) -{ - SetSpriteCoordsToAnimAttackerCoords(sprite); - if (GetBattlerSide(gBattleAnimAttacker)) - { - sprite->pos1.x -= gBattleAnimArgs[0]; - gBattleAnimArgs[3] = -gBattleAnimArgs[3]; - sprite->hFlip = TRUE; - } - else - { - sprite->pos1.x += gBattleAnimArgs[0]; - } - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[1] = gBattleAnimArgs[3]; - sprite->data[3] = gBattleAnimArgs[4]; - sprite->data[5] = gBattleAnimArgs[5]; - StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); - sprite->callback = TranslateSpriteLinearAndFlicker; -} - -void sub_80A8AEC(struct Sprite *sprite) -{ - if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) - { - sprite->pos1.x -= gBattleAnimArgs[0]; - gBattleAnimArgs[3] *= -1; - } - else - { - sprite->pos1.x += gBattleAnimArgs[0]; - } - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[1] = gBattleAnimArgs[3]; - sprite->data[3] = gBattleAnimArgs[4]; - sprite->data[5] = gBattleAnimArgs[5]; - StartSpriteAnim(sprite, gBattleAnimArgs[6]); - StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); - sprite->callback = TranslateSpriteLinearAndFlicker; -} - -void sub_80A8B64(struct Sprite *sprite) -{ - SetSpriteCoordsToAnimAttackerCoords(sprite); - if (GetBattlerSide(gBattleAnimAttacker)) - sprite->pos1.x -= gBattleAnimArgs[0]; - else - sprite->pos1.x += gBattleAnimArgs[0]; - sprite->pos1.y += gBattleAnimArgs[1]; - sprite->callback = RunStoredCallbackWhenAnimEnds; - StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); -} - -void sub_80A8BC4(u8 taskId) -{ - u16 src; - u16 dest; - struct Task *task = &gTasks[taskId]; - - task->data[0] = GetAnimBattlerSpriteId(ANIM_ATTACKER); - task->data[1] = ((GetBattlerSide(gBattleAnimAttacker)) != B_SIDE_PLAYER) ? -8 : 8; - task->data[2] = 0; - task->data[3] = 0; - gSprites[task->data[0]].pos2.x -= task->data[0]; - task->data[4] = AllocSpritePalette(10097); - task->data[5] = 0; - - dest = (task->data[4] + 0x10) * 0x10; - src = (gSprites[task->data[0]].oam.paletteNum + 0x10) * 0x10; - task->data[6] = GetBattlerSpriteSubpriority(gBattleAnimAttacker); - if (task->data[6] == 20 || task->data[6] == 40) - task->data[6] = 2; - else - task->data[6] = 3; - CpuCopy32(&gPlttBufferUnfaded[src], &gPlttBufferFaded[dest], 0x20); - BlendPalette(dest, 16, gBattleAnimArgs[1], gBattleAnimArgs[0]); - task->func = sub_80A8CAC; -} - -static void sub_80A8CAC(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - switch (task->data[2]) - { - case 0: - sub_80A8D78(task, taskId); - gSprites[task->data[0]].pos2.x += task->data[1]; - if (++task->data[3] == 5) - { - task->data[3]--; - task->data[2]++; - } - break; - case 1: - sub_80A8D78(task, taskId); - gSprites[task->data[0]].pos2.x -= task->data[1]; - if (--task->data[3] == 0) - { - gSprites[task->data[0]].pos2.x = 0; - task->data[2]++; - } - break; - case 2: - if (!task->data[5]) - { - FreeSpritePaletteByTag(ANIM_TAG_BENT_SPOON); - DestroyAnimVisualTask(taskId); - } - break; - } -} - -static void sub_80A8D78(struct Task *task, u8 taskId) -{ - s16 spriteId = CloneBattlerSpriteWithBlend(0); - if (spriteId >= 0) - { - gSprites[spriteId].oam.priority = task->data[6]; - gSprites[spriteId].oam.paletteNum = task->data[4]; - gSprites[spriteId].data[0] = 8; - gSprites[spriteId].data[1] = taskId; - gSprites[spriteId].data[2] = spriteId; - gSprites[spriteId].pos2.x = gSprites[task->data[0]].pos2.x; - gSprites[spriteId].callback = sub_80A8DFC; - task->data[5]++; - } -} - -static void sub_80A8DFC(struct Sprite *sprite) -{ - if (--sprite->data[0] == 0) - { - gTasks[sprite->data[1]].data[5]--; - obj_delete_but_dont_free_vram(sprite); - } -} - -void sub_80A8E30(struct Sprite *sprite) -{ - sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); - sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); - if (!GetBattlerSide(gBattleAnimAttacker)) - sprite->data[0] = 5; - else - sprite->data[0] = -10; - sprite->data[1] = -40; - sprite->callback = sub_80A8E88; -} - -static void sub_80A8E88(struct Sprite *sprite) -{ - sprite->data[2] += sprite->data[0]; - sprite->data[3] += sprite->data[1]; - sprite->pos2.x = sprite->data[2] / 10; - sprite->pos2.y = sprite->data[3] / 10; - if (sprite->data[1] < -20) - sprite->data[1]++; - if (sprite->pos1.y + sprite->pos2.y < -32) - DestroyAnimSprite(sprite); -} - -void sub_80A8EE4(struct Sprite *sprite) -{ - int x; - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[4]; - sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[5]; - if (!GetBattlerSide(gBattleAnimTarget)) - { - x = (u16)gBattleAnimArgs[4] + 30; - sprite->pos1.x += x; - sprite->pos1.y = gBattleAnimArgs[5] - 20; - } - else - { - x = (u16)gBattleAnimArgs[4] - 30; - sprite->pos1.x += x; - sprite->pos1.y = gBattleAnimArgs[5] - 80; - } - sprite->callback = StartAnimLinearTranslation; - StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); -} diff --git a/src/battle_anim_80A9C70.c b/src/battle_anim_80A9C70.c deleted file mode 100644 index 1271680e0..000000000 --- a/src/battle_anim_80A9C70.c +++ /dev/null @@ -1,534 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "battle_anim.h" -#include "decompress.h" -#include "gpu_regs.h" -#include "palette.h" -#include "sprite.h" -#include "task.h" -#include "trig.h" -#include "util.h" -#include "constants/battle_anim.h" -#include "constants/rgb.h" - -extern const struct CompressedSpriteSheet gBattleAnimPicTable[]; -extern const struct CompressedSpritePalette gBattleAnimPaletteTable[]; -extern const u8 *const gBattleAnims_StatusConditions[]; -extern const struct OamData gUnknown_08524904; -extern const struct OamData gUnknown_08524A3C; - -// This file's functions. -static void sub_80A9DB4(u8 taskId); -static void sub_80A9FD0(u8 taskId); -static void sub_80AA020(u8 taskId); -static void sub_80AA0D0(u8 taskId); -static void sub_80AA124(u8 taskId); -static void Task_DoStatusAnimation(u8 taskId); -static void sub_80A9E44(struct Sprite *sprite); -static void sub_80A9E78(struct Sprite *sprite); - -// const rom data -static const union AnimCmd sSpriteAnim_853EDE4[] = -{ - ANIMCMD_FRAME(0, 3), - ANIMCMD_FRAME(4, 3), - ANIMCMD_FRAME(8, 3), - ANIMCMD_FRAME(12, 3), - ANIMCMD_JUMP(0) -}; - -static const union AnimCmd *const sSpriteAnimTable_853EDF8[] = -{ - sSpriteAnim_853EDE4 -}; - -const struct SpriteTemplate gUnknown_0853EDFC = -{ - .tileTag = ANIM_TAG_UNUSED_ORB, - .paletteTag = ANIM_TAG_UNUSED_ORB, - .oam = &gUnknown_0852490C, - .anims = sSpriteAnimTable_853EDF8, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80A8AEC, -}; - -const struct SpriteTemplate gUnknown_0853EE14 = -{ - .tileTag = ANIM_TAG_UNUSED_ORB, - .paletteTag = ANIM_TAG_UNUSED_ORB, - .oam = &gUnknown_0852490C, - .anims = sSpriteAnimTable_853EDF8, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80A8A6C, -}; - -static const union AnimCmd sSpriteAnim_853EE2C[] = -{ - ANIMCMD_FRAME(0, 3), - ANIMCMD_JUMP(0) -}; - -static const union AnimCmd *const sSpriteAnimTable_853EE34[] = -{ - sSpriteAnim_853EE2C -}; - -const struct SpriteTemplate gUnknown_0853EE38 = -{ - .tileTag = ANIM_TAG_WEATHER_BALL, - .paletteTag = ANIM_TAG_WEATHER_BALL, - .oam = &gUnknown_08524914, - .anims = sSpriteAnimTable_853EE34, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80A8E30, -}; - -const struct SpriteTemplate gUnknown_0853EE50 = -{ - .tileTag = ANIM_TAG_WEATHER_BALL, - .paletteTag = ANIM_TAG_WEATHER_BALL, - .oam = &gUnknown_08524914, - .anims = sSpriteAnimTable_853EE34, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80A8EE4, -}; - -static const union AnimCmd sSpriteAnim_853EE68[] = -{ - ANIMCMD_FRAME(0, 3), - ANIMCMD_FRAME(16, 3), - ANIMCMD_FRAME(32, 3), - ANIMCMD_FRAME(48, 3), - ANIMCMD_FRAME(64, 3), - ANIMCMD_END -}; - -static const union AnimCmd *const sSpriteAnimTable_853EE80[] = -{ - sSpriteAnim_853EE68 -}; - -const struct SpriteTemplate gUnknown_0853EE84 = -{ - .tileTag = ANIM_TAG_SPARKLE_4, - .paletteTag = ANIM_TAG_SPARKLE_4, - .oam = &gUnknown_08524914, - .anims = sSpriteAnimTable_853EE80, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80A8B64, -}; - -const struct SpriteTemplate gUnknown_0853EE9C = -{ - .tileTag = ANIM_TAG_UNUSED_MONSTER_FOOT, - .paletteTag = ANIM_TAG_UNUSED_MONSTER_FOOT, - .oam = &gUnknown_08524914, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80A8AEC, -}; - -static const union AnimCmd sSpriteAnim_853EEB4[] = -{ - ANIMCMD_FRAME(0, 5), - ANIMCMD_JUMP(0) -}; - -static const union AnimCmd sSpriteAnim_853EEBC[] = -{ - ANIMCMD_FRAME(0, 5), - ANIMCMD_JUMP(0) -}; - -static const union AnimCmd sSpriteAnim_853EEC4[] = -{ - ANIMCMD_FRAME(0, 5), - ANIMCMD_JUMP(0) -}; - -static const union AnimCmd *const sSpriteAnimTable_853EECC[] = -{ - sSpriteAnim_853EEB4, - sSpriteAnim_853EEBC, - sSpriteAnim_853EEC4 -}; - -const struct SpriteTemplate gUnknown_0853EED8 = -{ - .tileTag = ANIM_TAG_IMPACT, - .paletteTag = ANIM_TAG_IMPACT, - .oam = &gUnknown_08524914, - .anims = sSpriteAnimTable_853EECC, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80A8AEC, -}; - -static const union AnimCmd sSpriteAnim_853EEF0[] = -{ - ANIMCMD_FRAME(0, 15), - ANIMCMD_JUMP(0) -}; - -static const union AnimCmd *const sSpriteAnimTable_853EEF8[] = -{ - sSpriteAnim_853EEF0 -}; - -static const union AffineAnimCmd sSpriteAffineAnim_853EEFC[] = -{ - AFFINEANIMCMD_FRAME(96, 96, 0, 0), - AFFINEANIMCMD_FRAME(2, 2, 0, 1), - AFFINEANIMCMD_JUMP(1) -}; - -static const union AffineAnimCmd *const sSpriteAffineAnimTable_853EEF8[] = -{ - sSpriteAffineAnim_853EEFC -}; - -const struct SpriteTemplate gUnknown_0853EF18 = -{ - .tileTag = ANIM_TAG_UNUSED_ORB, - .paletteTag = ANIM_TAG_UNUSED_ORB, - .oam = &gUnknown_085249CC, - .anims = sSpriteAnimTable_853EEF8, - .images = NULL, - .affineAnims = sSpriteAffineAnimTable_853EEF8, - .callback = sub_80A8A6C, -}; - -static const struct Subsprite gUnknown_0853EF30[] = -{ - {.x = -16, .y = -16, .shape = ST_OAM_SQUARE, .size = 3, .tileOffset = 0, .priority = 2}, - {.x = -16, .y = 48, .shape = ST_OAM_H_RECTANGLE, .size = 3, .tileOffset = 64, .priority = 2}, - {.x = 48, .y = -16, .shape = ST_OAM_V_RECTANGLE, .size = 3, .tileOffset = 96, .priority = 2}, - {.x = 48, .y = 48, .shape = ST_OAM_SQUARE, .size = 2, .tileOffset = 128, .priority = 2}, -}; - -static const struct SubspriteTable gUnknown_0853EF40[] = -{ - {ARRAY_COUNT(gUnknown_0853EF30), gUnknown_0853EF30}, -}; - -static const struct SpriteTemplate gUnknown_0853EF48 = -{ - .tileTag = ANIM_TAG_ICE_CUBE, - .paletteTag = ANIM_TAG_ICE_CUBE, - .oam = &gUnknown_08524A3C, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, -}; - -static const struct SpriteTemplate gUnknown_0853EF60 = -{ - .tileTag = ANIM_TAG_CIRCLE_IMPACT, - .paletteTag = ANIM_TAG_CIRCLE_IMPACT, - .oam = &gUnknown_08524904, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80A9E44, -}; - -// code -u8 sub_80A9C70(u8 battlerId, bool8 b) -{ - u8 battlerSpriteId = gBattlerSpriteIds[battlerId]; - u8 taskId = CreateTask(sub_80A9DB4, 10); - u8 spriteId2; - u8 i; - - LoadCompressedSpriteSheetUsingHeap(&gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(ANIM_TAG_CIRCLE_IMPACT)]); - LoadCompressedSpritePaletteUsingHeap(&gBattleAnimPaletteTable[GET_TRUE_SPRITE_INDEX(ANIM_TAG_CIRCLE_IMPACT)]); - gTasks[taskId].data[0] = battlerId; - if (b) - { - gTasks[taskId].data[1] = RGB_RED; - for (i = 0; i < 10; i++) - { - spriteId2 = CreateSprite(&gUnknown_0853EF60, gSprites[battlerSpriteId].pos1.x, gSprites[battlerSpriteId].pos1.y + 32, 0); - gSprites[spriteId2].data[0] = i * 51; - gSprites[spriteId2].data[1] = -256; - gSprites[spriteId2].invisible = TRUE; - if (i > 4) - gSprites[spriteId2].data[6] = 21; - } - } - else - { - gTasks[taskId].data[1] = RGB_BLUE; - for (i = 0; i < 10; i++) - { - spriteId2 = CreateSprite(&gUnknown_0853EF60, gSprites[battlerSpriteId].pos1.x, gSprites[battlerSpriteId].pos1.y - 32, 0); - gSprites[spriteId2].data[0] = i * 51; - gSprites[spriteId2].data[1] = 256; - gSprites[spriteId2].invisible = TRUE; - if (i > 4) - gSprites[spriteId2].data[6] = 21; - } - } - gSprites[spriteId2].data[7] = 1; - return taskId; -} - -static void sub_80A9DB4(u8 taskId) -{ - if (gTasks[taskId].data[2] == 2) - { - gTasks[taskId].data[2] = 0; - BlendPalette(0x100 + gTasks[taskId].data[0] * 16, 16, gTasks[taskId].data[4], gTasks[taskId].data[1]); - if (gTasks[taskId].data[5] == 0) - { - gTasks[taskId].data[4]++; - if (gTasks[taskId].data[4] > 8) - gTasks[taskId].data[5] ^= 1; - } - else - { - u16 var = gTasks[taskId].data[4]; - - gTasks[taskId].data[4]--; - if (gTasks[taskId].data[4] < 0) - { - gTasks[taskId].data[4] = var; - gTasks[taskId].data[5] ^= 1; - gTasks[taskId].data[3]++; - if (gTasks[taskId].data[3] == 2) - DestroyTask(taskId); - } - } - } - else - { - gTasks[taskId].data[2]++; - } -} - -static void sub_80A9E44(struct Sprite *sprite) -{ - if (sprite->data[6] == 0) - { - sprite->invisible = FALSE; - sprite->callback = sub_80A9E78; - sub_80A9E78(sprite); - } - else - { - sprite->data[6]--; - } -} - -static void sub_80A9E78(struct Sprite *sprite) -{ - sprite->pos2.x = Cos(sprite->data[0], 32); - sprite->pos2.y = Sin(sprite->data[0], 8); - if (sprite->data[0] < 128) - sprite->subpriority = 29; - else - sprite->subpriority = 31; - sprite->data[0] = (sprite->data[0] + 8) & 0xFF; - sprite->data[5] += sprite->data[1]; - sprite->pos2.y += sprite->data[5] >> 8; - sprite->data[2]++; - if (sprite->data[2] == 52) - { - if (sprite->data[7]) - DestroySpriteAndFreeResources(sprite); - else - DestroySprite(sprite); - } -} - -void sub_80A9EF4(u8 taskId) -{ - s16 x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) - 32; - s16 y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) - 36; - u8 spriteId; - - if (IsContest()) - x -= 6; - SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); - spriteId = CreateSprite(&gUnknown_0853EF48, x, y, 4); - if (GetSpriteTileStartByTag(ANIM_TAG_ICE_CUBE) == 0xFFFF) - gSprites[spriteId].invisible = TRUE; - SetSubspriteTables(&gSprites[spriteId], gUnknown_0853EF40); - gTasks[taskId].data[15] = spriteId; - gTasks[taskId].func = sub_80A9FD0; -} - -static void sub_80A9FD0(u8 taskId) -{ - gTasks[taskId].data[1]++; - if (gTasks[taskId].data[1] == 10) - { - gTasks[taskId].func = sub_80AA020; - gTasks[taskId].data[1] = 0; - } - else - { - u8 var = gTasks[taskId].data[1]; - - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(var, 16 - var)); - } -} - -static void sub_80AA020(u8 taskId) -{ - u8 palIndex = IndexOfSpritePaletteTag(ANIM_TAG_ICE_CUBE); - - if (gTasks[taskId].data[1]++ > 13) - { - gTasks[taskId].data[2]++; - if (gTasks[taskId].data[2] == 3) - { - u16 temp; - - temp = gPlttBufferFaded[0x100 + palIndex * 16 + 13]; - gPlttBufferFaded[0x100 + palIndex * 16 + 13] = gPlttBufferFaded[0x100 + palIndex * 16 + 14]; - gPlttBufferFaded[0x100 + palIndex * 16 + 14] = gPlttBufferFaded[0x100 + palIndex * 16 + 15]; - gPlttBufferFaded[0x100 + palIndex * 16 + 15] = temp; - - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3]++; - if (gTasks[taskId].data[3] == 3) - { - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[4]++; - if (gTasks[taskId].data[4] == 2) - { - gTasks[taskId].data[1] = 9; - gTasks[taskId].func = sub_80AA0D0; - } - } - } - } -} - -static void sub_80AA0D0(u8 taskId) -{ - gTasks[taskId].data[1]--; - if (gTasks[taskId].data[1] == -1) - { - gTasks[taskId].func = sub_80AA124; - gTasks[taskId].data[1] = 0; - } - else - { - u8 var = gTasks[taskId].data[1]; - - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(var, 16 - var)); - } -} - -static void sub_80AA124(u8 taskId) -{ - gTasks[taskId].data[1]++; - if (gTasks[taskId].data[1] == 37) - { - u8 spriteId = gTasks[taskId].data[15]; - - FreeSpriteOamMatrix(&gSprites[spriteId]); - DestroySprite(&gSprites[spriteId]); - } - else if (gTasks[taskId].data[1] == 39) - { - SetGpuReg(REG_OFFSET_BLDCNT, 0); - SetGpuReg(REG_OFFSET_BLDALPHA, 0); - DestroyAnimVisualTask(taskId); - } -} - -#define CASE(by, stat) case (STAT_ANIM_##by + stat - 1) - -void AnimTask_StatsChange(u8 taskId) -{ - bool16 goesDown = FALSE; - s16 animStatId = 0; - bool16 sharply = FALSE; - - switch (gBattleSpritesDataPtr->animationData->animArg) - { - CASE(PLUS1, STAT_ATK): goesDown = FALSE; animStatId = 0; break; - CASE(PLUS1, STAT_DEF): goesDown = FALSE; animStatId = 1; break; - CASE(PLUS1, STAT_SPEED): goesDown = FALSE; animStatId = 3; break; - CASE(PLUS1, STAT_SPATK): goesDown = FALSE; animStatId = 5; break; - CASE(PLUS1, STAT_SPDEF): goesDown = FALSE; animStatId = 6; break; - CASE(PLUS1, STAT_ACC): goesDown = FALSE; animStatId = 2; break; - CASE(PLUS1, STAT_EVASION): goesDown = FALSE; animStatId = 4; break; - - CASE(MINUS1, STAT_ATK): goesDown = TRUE; animStatId = 0; break; - CASE(MINUS1, STAT_DEF): goesDown = TRUE; animStatId = 1; break; - CASE(MINUS1, STAT_SPEED): goesDown = TRUE; animStatId = 3; break; - CASE(MINUS1, STAT_SPATK): goesDown = TRUE; animStatId = 5; break; - CASE(MINUS1, STAT_SPDEF): goesDown = TRUE; animStatId = 6; break; - CASE(MINUS1, STAT_ACC): goesDown = TRUE; animStatId = 2; break; - CASE(MINUS1, STAT_EVASION): goesDown = TRUE; animStatId = 4; break; - - CASE(PLUS2, STAT_ATK): goesDown = FALSE; animStatId = 0; sharply = TRUE; break; - CASE(PLUS2, STAT_DEF): goesDown = FALSE; animStatId = 1; sharply = TRUE; break; - CASE(PLUS2, STAT_SPEED): goesDown = FALSE; animStatId = 3; sharply = TRUE; break; - CASE(PLUS2, STAT_SPATK): goesDown = FALSE; animStatId = 5; sharply = TRUE; break; - CASE(PLUS2, STAT_SPDEF): goesDown = FALSE; animStatId = 6; sharply = TRUE; break; - CASE(PLUS2, STAT_ACC): goesDown = FALSE; animStatId = 2; sharply = TRUE; break; - CASE(PLUS2, STAT_EVASION): goesDown = FALSE; animStatId = 4; sharply = TRUE; break; - - CASE(MINUS2, STAT_ATK): goesDown = TRUE; animStatId = 0; sharply = TRUE; break; - CASE(MINUS2, STAT_DEF): goesDown = TRUE; animStatId = 1; sharply = TRUE; break; - CASE(MINUS2, STAT_SPEED): goesDown = TRUE; animStatId = 3; sharply = TRUE; break; - CASE(MINUS2, STAT_SPATK): goesDown = TRUE; animStatId = 5; sharply = TRUE; break; - CASE(MINUS2, STAT_SPDEF): goesDown = TRUE; animStatId = 6; sharply = TRUE; break; - CASE(MINUS2, STAT_ACC): goesDown = TRUE; animStatId = 2; sharply = TRUE; break; - CASE(MINUS2, STAT_EVASION): goesDown = TRUE; animStatId = 4; sharply = TRUE; break; - - case STAT_ANIM_MULTIPLE_PLUS1: goesDown = FALSE; animStatId = 0xFF; sharply = FALSE; break; - case STAT_ANIM_MULTIPLE_PLUS2: goesDown = FALSE; animStatId = 0xFF; sharply = TRUE; break; - case STAT_ANIM_MULTIPLE_MINUS1: goesDown = TRUE; animStatId = 0xFF; sharply = FALSE; break; - case STAT_ANIM_MULTIPLE_MINUS2: goesDown = TRUE; animStatId = 0xFF; sharply = TRUE; break; - - default: - DestroyAnimVisualTask(taskId); - return; - } - - gBattleAnimArgs[0] = goesDown; - gBattleAnimArgs[1] = animStatId; - gBattleAnimArgs[2] = 0; - gBattleAnimArgs[3] = 0; - gBattleAnimArgs[4] = sharply; - gTasks[taskId].func = sub_8116EB4; - sub_8116EB4(taskId); -} - -#undef CASE - -void LaunchStatusAnimation(u8 battlerId, u8 statusAnimId) -{ - u8 taskId; - - gBattleAnimAttacker = battlerId; - gBattleAnimTarget = battlerId; - LaunchBattleAnimation(gBattleAnims_StatusConditions, statusAnimId, 0); - taskId = CreateTask(Task_DoStatusAnimation, 10); - gTasks[taskId].data[0] = battlerId; -} - -static void Task_DoStatusAnimation(u8 taskId) -{ - gAnimScriptCallback(); - if (!gAnimScriptActive) - { - gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].data[0]].statusAnimActive = FALSE; - DestroyTask(taskId); - } -} diff --git a/src/battle_anim_80D51AC.c b/src/battle_anim_80D51AC.c deleted file mode 100644 index 250a0459f..000000000 --- a/src/battle_anim_80D51AC.c +++ /dev/null @@ -1,1059 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "battle_anim.h" -#include "sprite.h" -#include "task.h" -#include "trig.h" - -// This file's functions. -void AnimTask_ShakeMonStep(u8 taskId); -void AnimTask_ShakeMon2Step(u8 taskId); -void AnimTask_ShakeMonInPlaceStep(u8 taskId); -void AnimTask_ShakeAndSinkMonStep(u8 taskId); -void sub_80D57B8(u8 taskId); -static void DoHorizontalLunge(struct Sprite *sprite); -static void ReverseHorizontalLungeDirection(struct Sprite *sprite); -static void DoVerticalDip(struct Sprite *sprite); -static void ReverseVerticalDipDirection(struct Sprite* sprite); -static void SlideMonToOriginalPos(struct Sprite *sprite); -static void SlideMonToOriginalPosStep(struct Sprite *sprite); -static void SlideMonToOffset(struct Sprite *sprite); -static void sub_80D5B48(struct Sprite *sprite); -static void sub_80D5C20(struct Sprite *sprite); -void AnimTask_WindUpLungePart1(u8 taskId); -void AnimTask_WindUpLungePart2(u8 taskId); -void AnimTask_SwayMonStep(u8 taskId); -void AnimTask_ScaleMonAndRestoreStep(u8 taskId); -void sub_80D6308(u8 taskId); -void sub_80D646C(u8 taskId); -void sub_80A8B3C(u8 taskId); - -const struct SpriteTemplate gHorizontalLungeSpriteTemplate = -{ - .tileTag = 0, - .paletteTag = 0, - .oam = &gDummyOamData, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = DoHorizontalLunge, -}; - -const struct SpriteTemplate gVerticalDipSpriteTemplate = -{ - .tileTag = 0, - .paletteTag = 0, - .oam = &gDummyOamData, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = DoVerticalDip, -}; - -const struct SpriteTemplate gSlideMonToOriginalPosSpriteTemplate = -{ - .tileTag = 0, - .paletteTag = 0, - .oam = &gDummyOamData, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SlideMonToOriginalPos, -}; - -const struct SpriteTemplate gSlideMonToOffsetSpriteTemplate = -{ - .tileTag = 0, - .paletteTag = 0, - .oam = &gDummyOamData, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SlideMonToOffset, -}; - -const struct SpriteTemplate gUnknown_0857FE88 = -{ - .tileTag = 0, - .paletteTag = 0, - .oam = &gDummyOamData, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80D5B48, -}; - -// Task to facilitate simple shaking of a pokemon's picture in battle. -// The shaking alternates between the original position and the target position. -// arg 0: anim battler -// arg 1: x pixel offset -// arg 2: y pixel offset -// arg 3: num times to shake -// arg 4: frame delay -void AnimTask_ShakeMon(u8 taskId) -{ - u8 spriteId; - spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); - if (spriteId == 0xff) - { - DestroyAnimVisualTask(taskId); - return; - } - gSprites[spriteId].pos2.x = gBattleAnimArgs[1]; - gSprites[spriteId].pos2.y = gBattleAnimArgs[2]; - gTasks[taskId].data[0] = spriteId; - gTasks[taskId].data[1] = gBattleAnimArgs[3]; - gTasks[taskId].data[2] = gBattleAnimArgs[4]; - gTasks[taskId].data[3] = gBattleAnimArgs[4]; - gTasks[taskId].data[4] = gBattleAnimArgs[1]; - gTasks[taskId].data[5] = gBattleAnimArgs[2]; - gTasks[taskId].func = AnimTask_ShakeMonStep; - AnimTask_ShakeMonStep(taskId); -} - -void AnimTask_ShakeMonStep(u8 taskId) -{ - if (gTasks[taskId].data[3] == 0) - { - if (gSprites[gTasks[taskId].data[0]].pos2.x == 0) - { - gSprites[gTasks[taskId].data[0]].pos2.x = gTasks[taskId].data[4]; - } - else - { - gSprites[gTasks[taskId].data[0]].pos2.x = 0; - } - if (gSprites[gTasks[taskId].data[0]].pos2.y == 0) - { - gSprites[gTasks[taskId].data[0]].pos2.y = gTasks[taskId].data[5]; - } - else - { - gSprites[gTasks[taskId].data[0]].pos2.y = 0; - } - gTasks[taskId].data[3] = gTasks[taskId].data[2]; - if (--gTasks[taskId].data[1] == 0) - { - gSprites[gTasks[taskId].data[0]].pos2.x = 0; - gSprites[gTasks[taskId].data[0]].pos2.y = 0; - DestroyAnimVisualTask(taskId); - return; - } - } - else - { - gTasks[taskId].data[3]--; - } -} - -// Task to facilitate simple shaking of a pokemon's picture in battle. -// The shaking alternates between the positive and negative versions of the specified pixel offsets. -// arg 0: anim battler -// arg 1: x pixel offset -// arg 2: y pixel offset -// arg 3: num times to shake -// arg 4: frame delay -void AnimTask_ShakeMon2(u8 taskId) -{ - u8 spriteId; - bool8 destroy = FALSE; - u8 battlerId; - - if (gBattleAnimArgs[0] < 4) - { - spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); - if (spriteId == 0xff) - { - DestroyAnimVisualTask(taskId); - return; - } - } - else if (gBattleAnimArgs[0] != 8) - { - switch (gBattleAnimArgs[0]) - { - case 4: - battlerId = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); - break; - case 5: - battlerId = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); - break; - case 6: - battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - break; - case 7: - default: - battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); - break; - } - - if (IsBattlerSpriteVisible(battlerId) == FALSE) - destroy = TRUE; - - spriteId = gBattlerSpriteIds[battlerId]; - } - else - { - spriteId = gBattlerSpriteIds[gBattleAnimAttacker]; - } - - if (destroy) - { - DestroyAnimVisualTask(taskId); - return; - } - - gSprites[spriteId].pos2.x = gBattleAnimArgs[1]; - gSprites[spriteId].pos2.y = gBattleAnimArgs[2]; - gTasks[taskId].data[0] = spriteId; - gTasks[taskId].data[1] = gBattleAnimArgs[3]; - gTasks[taskId].data[2] = gBattleAnimArgs[4]; - gTasks[taskId].data[3] = gBattleAnimArgs[4]; - gTasks[taskId].data[4] = gBattleAnimArgs[1]; - gTasks[taskId].data[5] = gBattleAnimArgs[2]; - gTasks[taskId].func = AnimTask_ShakeMon2Step; - gTasks[taskId].func(taskId); -} - -void AnimTask_ShakeMon2Step(u8 taskId) -{ - if (gTasks[taskId].data[3] == 0) - { - if (gSprites[gTasks[taskId].data[0]].pos2.x == gTasks[taskId].data[4]) - gSprites[gTasks[taskId].data[0]].pos2.x = -gTasks[taskId].data[4]; - else - gSprites[gTasks[taskId].data[0]].pos2.x = gTasks[taskId].data[4]; - - if (gSprites[gTasks[taskId].data[0]].pos2.y == gTasks[taskId].data[5]) - gSprites[gTasks[taskId].data[0]].pos2.y = -gTasks[taskId].data[5]; - else - gSprites[gTasks[taskId].data[0]].pos2.y = gTasks[taskId].data[5]; - - gTasks[taskId].data[3] = gTasks[taskId].data[2]; - if (--gTasks[taskId].data[1] == 0) - { - gSprites[gTasks[taskId].data[0]].pos2.x = 0; - gSprites[gTasks[taskId].data[0]].pos2.y = 0; - DestroyAnimVisualTask(taskId); - return; - } - } - else - { - gTasks[taskId].data[3]--; - } -} - -// Task to facilitate simple shaking of a pokemon's picture in battle. -// The shaking alternates between the positive and negative versions of the specified pixel offsets -// with respect to the current location of the mon's picture. -// arg 0: battler -// arg 1: x offset -// arg 2: y offset -// arg 3: num shakes -// arg 4: delay -void AnimTask_ShakeMonInPlace(u8 taskId) -{ - u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); - if (spriteId == 0xff) - { - DestroyAnimVisualTask(taskId); - return; - } - - gSprites[spriteId].pos2.x += gBattleAnimArgs[1]; - gSprites[spriteId].pos2.y += gBattleAnimArgs[2]; - gTasks[taskId].data[0] = spriteId; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = gBattleAnimArgs[3]; - gTasks[taskId].data[3] = 0; - gTasks[taskId].data[4] = gBattleAnimArgs[4]; - gTasks[taskId].data[5] = gBattleAnimArgs[1] * 2; - gTasks[taskId].data[6] = gBattleAnimArgs[2] * 2; - gTasks[taskId].func = AnimTask_ShakeMonInPlaceStep; - gTasks[taskId].func(taskId); -} - -void AnimTask_ShakeMonInPlaceStep(u8 taskId) -{ - if (gTasks[taskId].data[3] == 0) - { - if (gTasks[taskId].data[1] & 1) - { - gSprites[gTasks[taskId].data[0]].pos2.x += gTasks[taskId].data[5]; - gSprites[gTasks[taskId].data[0]].pos2.y += gTasks[taskId].data[6]; - } - else - { - gSprites[gTasks[taskId].data[0]].pos2.x -= gTasks[taskId].data[5]; - gSprites[gTasks[taskId].data[0]].pos2.y -= gTasks[taskId].data[6]; - } - gTasks[taskId].data[3] = gTasks[taskId].data[4]; - if (++gTasks[taskId].data[1] >= gTasks[taskId].data[2]) - { - if (gTasks[taskId].data[1] & 1) - { - gSprites[gTasks[taskId].data[0]].pos2.x += gTasks[taskId].data[5] / 2; - gSprites[gTasks[taskId].data[0]].pos2.y += gTasks[taskId].data[6] / 2; - } - else - { - gSprites[gTasks[taskId].data[0]].pos2.x -= gTasks[taskId].data[5] / 2; - gSprites[gTasks[taskId].data[0]].pos2.y -= gTasks[taskId].data[6] / 2; - } - DestroyAnimVisualTask(taskId); - return; - } - } - else - { - gTasks[taskId].data[3]--; - } -} - -// Shakes a mon bg horizontally and moves it downward linearly. -// arg 0: battler -// arg 1: x offset -// arg 2: frame delay between each movement -// arg 3: downward speed (subpixel) -// arg 4: duration -void AnimTask_ShakeAndSinkMon(u8 taskId) -{ - u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); - gSprites[spriteId].pos2.x = gBattleAnimArgs[1]; - gTasks[taskId].data[0] = spriteId; - gTasks[taskId].data[1] = gBattleAnimArgs[1]; - gTasks[taskId].data[2] = gBattleAnimArgs[2]; - gTasks[taskId].data[3] = gBattleAnimArgs[3]; - gTasks[taskId].data[4] = gBattleAnimArgs[4]; - gTasks[taskId].func = AnimTask_ShakeAndSinkMonStep; - gTasks[taskId].func(taskId); -} - -void AnimTask_ShakeAndSinkMonStep(u8 taskId) -{ - s16 x; - u8 spriteId; - spriteId = gTasks[taskId].data[0]; - x = gTasks[taskId].data[1]; - if (gTasks[taskId].data[2] == gTasks[taskId].data[8]++) - { - gTasks[taskId].data[8] = 0; - if (gSprites[spriteId].pos2.x == x) - x = -x; - - gSprites[spriteId].pos2.x += x; - } - - gTasks[taskId].data[1] = x; - gTasks[taskId].data[9] += gTasks[taskId].data[3]; - gSprites[spriteId].pos2.y = gTasks[taskId].data[9] >> 8; - if (--gTasks[taskId].data[4] == 0) - { - DestroyAnimVisualTask(taskId); - return; - } -} - -// Moves a mon bg picture along an elliptical path that begins -// and ends at the mon's origin location. -// arg 0: battler -// arg 1: ellipse width -// arg 2: ellipse height -// arg 3: num loops -// arg 4: speed (valid values are 0-5) -void AnimTask_TranslateMonElliptical(u8 taskId) -{ - u8 i; - u8 spriteId; - u8 wavePeriod; - - wavePeriod = 1; - spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); - if (gBattleAnimArgs[4] > 5) - gBattleAnimArgs[4] = 5; - - for (i = 0; i < gBattleAnimArgs[4]; i++) - { - wavePeriod <<= 1; - } - - gTasks[taskId].data[0] = spriteId; - gTasks[taskId].data[1] = gBattleAnimArgs[1]; - gTasks[taskId].data[2] = gBattleAnimArgs[2]; - gTasks[taskId].data[3] = gBattleAnimArgs[3]; - gTasks[taskId].data[4] = wavePeriod; - gTasks[taskId].func = sub_80D57B8; - gTasks[taskId].func(taskId); -} - -void sub_80D57B8(u8 taskId) -{ - u8 spriteId = gTasks[taskId].data[0]; - gSprites[spriteId].pos2.x = Sin(gTasks[taskId].data[5], gTasks[taskId].data[1]); - gSprites[spriteId].pos2.y = -Cos(gTasks[taskId].data[5], gTasks[taskId].data[2]); - gSprites[spriteId].pos2.y += gTasks[taskId].data[2]; - gTasks[taskId].data[5] += gTasks[taskId].data[4]; - gTasks[taskId].data[5] &= 0xff; - - if (gTasks[taskId].data[5] == 0) - gTasks[taskId].data[3]--; - - if (gTasks[taskId].data[3] == 0) - { - gSprites[spriteId].pos2.x = 0; - gSprites[spriteId].pos2.y = 0; - DestroyAnimVisualTask(taskId); - return; - } -} - -// Moves a mon bg picture along an elliptical path that begins -// and ends at the mon's origin location. Reverses the direction -// of the path if it's not on the player's side of the battle. -// arg 0: battler -// arg 1: ellipse width -// arg 2: ellipse height -// arg 3: num loops -// arg 4: speed (valid values are 0-5) -void AnimTask_TranslateMonEllipticalRespectSide(u8 taskId) -{ - if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - - AnimTask_TranslateMonElliptical(taskId); -} - -// Performs a simple horizontal lunge, where the mon moves -// horizontally, and then moves back in the opposite direction. -// arg 0: duration of single lunge direction -// arg 1: x pixel delta that is applied each frame -static void DoHorizontalLunge(struct Sprite *sprite) -{ - sprite->invisible = TRUE; - if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) - sprite->data[1] = -gBattleAnimArgs[1]; - else - sprite->data[1] = gBattleAnimArgs[1]; - - sprite->data[0] = gBattleAnimArgs[0]; - sprite->data[2] = 0; - sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker]; - sprite->data[4] = gBattleAnimArgs[0]; - StoreSpriteCallbackInData6(sprite, ReverseHorizontalLungeDirection); - sprite->callback = TranslateMonSpriteLinear; -} - -static void ReverseHorizontalLungeDirection(struct Sprite *sprite) -{ - sprite->data[0] = sprite->data[4]; - sprite->data[1] = -sprite->data[1]; - sprite->callback = TranslateMonSpriteLinear; - StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); -} - -// Performs a simple vertical dipping motion, where moves vertically, and then -// moves back in the opposite direction. -// arg 0: duration of single dip direction -// arg 1: y pixel delta that is applied each frame -// arg 2: battler -static void DoVerticalDip(struct Sprite *sprite) -{ - u8 spriteId; - sprite->invisible = TRUE; - spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[2]); - sprite->data[0] = gBattleAnimArgs[0]; - sprite->data[1] = 0; - sprite->data[2] = gBattleAnimArgs[1]; - sprite->data[3] = spriteId; - sprite->data[4] = gBattleAnimArgs[0]; - StoreSpriteCallbackInData6(sprite, ReverseVerticalDipDirection); - sprite->callback = TranslateMonSpriteLinear; -} - -static void ReverseVerticalDipDirection(struct Sprite *sprite) -{ - sprite->data[0] = sprite->data[4]; - sprite->data[2] = -sprite->data[2]; - sprite->callback = TranslateMonSpriteLinear; - StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); -} - -// Linearly slides a mon's bg picture back to its original sprite position. -// The sprite parameter is a dummy sprite used for facilitating the movement with its callback. -// arg 0: 1 = target or 0 = attacker -// arg 1: direction (0 = horizontal and vertical, 1 = horizontal only, 2 = vertical only) -// arg 2: duration -static void SlideMonToOriginalPos(struct Sprite *sprite) -{ - u32 monSpriteId; - if (!gBattleAnimArgs[0]) - monSpriteId = gBattlerSpriteIds[gBattleAnimAttacker]; - else - monSpriteId = gBattlerSpriteIds[gBattleAnimTarget]; - - sprite->data[0] = gBattleAnimArgs[2]; - sprite->data[1] = gSprites[monSpriteId].pos1.x + gSprites[monSpriteId].pos2.x; - sprite->data[2] = gSprites[monSpriteId].pos1.x; - sprite->data[3] = gSprites[monSpriteId].pos1.y + gSprites[monSpriteId].pos2.y; - sprite->data[4] = gSprites[monSpriteId].pos1.y; - InitSpriteDataForLinearTranslation(sprite); - sprite->data[3] = 0; - sprite->data[4] = 0; - sprite->data[5] = gSprites[monSpriteId].pos2.x; - sprite->data[6] = gSprites[monSpriteId].pos2.y; - sprite->invisible = TRUE; - - if (gBattleAnimArgs[1] == 1) - sprite->data[2] = 0; - else if (gBattleAnimArgs[1] == 2) - sprite->data[1] = 0; - - sprite->data[7] = gBattleAnimArgs[1]; - sprite->data[7] |= monSpriteId << 8; - sprite->callback = SlideMonToOriginalPosStep; -} - -static void SlideMonToOriginalPosStep(struct Sprite *sprite) -{ - s8 monSpriteId; - u8 lo; - struct Sprite *monSprite; - - lo = sprite->data[7] & 0xff; - monSpriteId = sprite->data[7] >> 8; - monSprite = &gSprites[monSpriteId]; - if (sprite->data[0] == 0) - { - if (lo < 2) - monSprite->pos2.x = 0; - - if (lo == 2 || lo == 0) - monSprite->pos2.y = 0; - - DestroyAnimSprite(sprite); - } - else - { - sprite->data[0]--; - sprite->data[3] += sprite->data[1]; - sprite->data[4] += sprite->data[2]; - monSprite->pos2.x = (s8)(sprite->data[3] >> 8) + sprite->data[5]; - monSprite->pos2.y = (s8)(sprite->data[4] >> 8) + sprite->data[6]; - } -} - -// Linearly translates a mon to a target offset. The horizontal offset -// is mirrored for the opponent's pokemon, and the vertical offset -// is only mirrored if arg 3 is set to 1. -// arg 0: 0 = attacker, 1 = target -// arg 1: target x pixel offset -// arg 2: target y pixel offset -// arg 3: mirror vertical translation for opposite battle side -// arg 4: duration -static void SlideMonToOffset(struct Sprite *sprite) -{ - u8 battler; - u8 monSpriteId; - if (!gBattleAnimArgs[0]) - battler = gBattleAnimAttacker; - else - battler = gBattleAnimTarget; - - monSpriteId = gBattlerSpriteIds[battler]; - if (GetBattlerSide(battler) != B_SIDE_PLAYER) - { - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - if (gBattleAnimArgs[3] == 1) - { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - } - } - - sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[1] = gSprites[monSpriteId].pos1.x; - sprite->data[2] = gSprites[monSpriteId].pos1.x + gBattleAnimArgs[1]; - sprite->data[3] = gSprites[monSpriteId].pos1.y; - sprite->data[4] = gSprites[monSpriteId].pos1.y + gBattleAnimArgs[2]; - InitSpriteDataForLinearTranslation(sprite); - sprite->data[3] = 0; - sprite->data[4] = 0; - sprite->data[5] = monSpriteId; - sprite->invisible = TRUE; - StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); - sprite->callback = TranslateMonSpriteLinearFixedPoint; -} - -static void sub_80D5B48(struct Sprite *sprite) -{ - u8 spriteId; - u8 battlerId; - sprite->invisible = TRUE; - if (!gBattleAnimArgs[0]) - { - battlerId = gBattleAnimAttacker; - } - else - { - battlerId = gBattleAnimTarget; - } - spriteId = gBattlerSpriteIds[battlerId]; - if (GetBattlerSide(battlerId)) - { - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - if (gBattleAnimArgs[3] == 1) - { - gBattleAnimArgs[2] = -gBattleAnimArgs[2]; - } - } - sprite->data[0] = gBattleAnimArgs[4]; - sprite->data[1] = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x; - sprite->data[2] = sprite->data[1] + gBattleAnimArgs[1]; - sprite->data[3] = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y; - sprite->data[4] = sprite->data[3] + gBattleAnimArgs[2]; - InitSpriteDataForLinearTranslation(sprite); - sprite->data[3] = gSprites[spriteId].pos2.x << 8; - sprite->data[4] = gSprites[spriteId].pos2.y << 8; - sprite->data[5] = spriteId; - sprite->data[6] = gBattleAnimArgs[5]; - if (!gBattleAnimArgs[5]) - { - StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); - } - else - { - StoreSpriteCallbackInData6(sprite, sub_80D5C20); - } - sprite->callback = TranslateMonSpriteLinearFixedPoint; -} - - -static void sub_80D5C20(struct Sprite *sprite) -{ - gSprites[sprite->data[5]].pos2.x = 0; - gSprites[sprite->data[5]].pos2.y = 0; - DestroyAnimSprite(sprite); -} - -// Task to facilitate a two-part translation animation, in which the sprite -// is first translated in an arc to one position. Then, it "lunges" to a target -// x offset. Used in TAKE_DOWN, for example. -// arg 0: anim bank -// arg 1: horizontal speed (subpixel) -// arg 2: wave amplitude -// arg 3: first duration -// arg 4: delay before starting lunge -// arg 5: target x offset for lunge -// arg 6: lunge duration -void AnimTask_WindUpLunge(u8 taskId) -{ - s16 wavePeriod = 0x8000 / gBattleAnimArgs[3]; - if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) - { - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - gBattleAnimArgs[5] = -gBattleAnimArgs[5]; - } - gTasks[taskId].data[0] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); - gTasks[taskId].data[1] = (gBattleAnimArgs[1] << 8) / gBattleAnimArgs[3]; - gTasks[taskId].data[2] = gBattleAnimArgs[2]; - gTasks[taskId].data[3] = gBattleAnimArgs[3]; - gTasks[taskId].data[4] = gBattleAnimArgs[4]; - gTasks[taskId].data[5] = (gBattleAnimArgs[5] << 8) / gBattleAnimArgs[6]; - gTasks[taskId].data[6] = gBattleAnimArgs[6]; - gTasks[taskId].data[7] = wavePeriod; - gTasks[taskId].func = AnimTask_WindUpLungePart1; -} - -void AnimTask_WindUpLungePart1(u8 taskId) -{ - u8 spriteId; - spriteId = gTasks[taskId].data[0]; - gTasks[taskId].data[11] += gTasks[taskId].data[1]; - gSprites[spriteId].pos2.x = gTasks[taskId].data[11] >> 8; - gSprites[spriteId].pos2.y = Sin((u8)(gTasks[taskId].data[10] >> 8), gTasks[taskId].data[2]); - gTasks[taskId].data[10] += gTasks[taskId].data[7]; - if (--gTasks[taskId].data[3] == 0) - { - gTasks[taskId].func = AnimTask_WindUpLungePart2; - } -} - -void AnimTask_WindUpLungePart2(u8 taskId) -{ - u8 spriteId; - if (gTasks[taskId].data[4] > 0) - { - gTasks[taskId].data[4]--; - } - else - { - spriteId = gTasks[taskId].data[0]; - gTasks[taskId].data[12] += gTasks[taskId].data[5]; - gSprites[spriteId].pos2.x = (gTasks[taskId].data[12] >> 8) + (gTasks[taskId].data[11] >> 8); - if (--gTasks[taskId].data[6] == 0) - { - DestroyAnimVisualTask(taskId); - return; - } - } -} - -void sub_80D5DB0(u8 taskId) -{ - u8 spriteId; - switch (gBattleAnimArgs[0]) - { - case 0: - case 1: - spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); - break; - case 2: - if (!IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) - { - DestroyAnimVisualTask(taskId); - return; - } - spriteId = gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]; - break; - case 3: - if (!IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget))) - { - DestroyAnimVisualTask(taskId); - return; - } - spriteId = gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimTarget)]; - break; - default: - DestroyAnimVisualTask(taskId); - return; - } - gTasks[taskId].data[0] = spriteId; - if (GetBattlerSide(gBattleAnimTarget) != B_SIDE_PLAYER) - { - gTasks[taskId].data[1] = gBattleAnimArgs[1]; - } - else - { - gTasks[taskId].data[1] = -gBattleAnimArgs[1]; - } - gTasks[taskId].func = sub_80A8B3C; -} - -void sub_80A8B3C(u8 taskId) -{ - u8 spriteId = gTasks[taskId].data[0]; - gSprites[spriteId].pos2.x += gTasks[taskId].data[1]; - if (gSprites[spriteId].pos2.x + gSprites[spriteId].pos1.x + 0x20 > 0x130u) - { - DestroyAnimVisualTask(taskId); - return; - } -} - -// Task that facilitates translating the mon bg picture back and forth -// in a swaying motion (uses Sine wave). It can sway either horizontally -// or vertically, but not both. -// arg 0: direction (0 = horizontal, 1 = vertical) -// arg 1: wave amplitude -// arg 2: wave period -// arg 3: num sways -// arg 4: which mon (0 = attacker, 1`= target) -void AnimTask_SwayMon(u8 taskId) -{ - u8 spriteId; - if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - - spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[4]); - gTasks[taskId].data[0] = gBattleAnimArgs[0]; - gTasks[taskId].data[1] = gBattleAnimArgs[1]; - gTasks[taskId].data[2] = gBattleAnimArgs[2]; - gTasks[taskId].data[3] = gBattleAnimArgs[3]; - gTasks[taskId].data[4] = spriteId; - - if (gBattleAnimArgs[4] == 0) - gTasks[taskId].data[5] = gBattleAnimAttacker; - else - gTasks[taskId].data[5] = gBattleAnimTarget; - - gTasks[taskId].data[12] = 1; - gTasks[taskId].func = AnimTask_SwayMonStep; -} - -void AnimTask_SwayMonStep(u8 taskId) -{ - s16 sineValue; - u8 spriteId; - int waveIndex; - u16 sineIndex; - - spriteId = gTasks[taskId].data[4]; - sineIndex = gTasks[taskId].data[10] + gTasks[taskId].data[2]; - gTasks[taskId].data[10] = sineIndex; - waveIndex = sineIndex >> 8; - sineValue = Sin(waveIndex, gTasks[taskId].data[1]); - - if (gTasks[taskId].data[0] == 0) - { - gSprites[spriteId].pos2.x = sineValue; - } - else - { - if (GetBattlerSide(gTasks[taskId].data[5]) == B_SIDE_PLAYER) - { - gSprites[spriteId].pos2.y = (sineValue >= 0) ? sineValue : -sineValue; - } - else - { - gSprites[spriteId].pos2.y = (sineValue >= 0) ? -sineValue : sineValue; - } - } - - if (((waveIndex >= 0x80u) && (gTasks[taskId].data[11] == 0) && (gTasks[taskId].data[12] == 1)) - || ((waveIndex < 0x7fu) && (gTasks[taskId].data[11] == 1) && (gTasks[taskId].data[12] == 0))) - { - gTasks[taskId].data[11] ^= 1; - gTasks[taskId].data[12] ^= 1; - if (--gTasks[taskId].data[3] == 0) - { - gSprites[spriteId].pos2.x = 0; - gSprites[spriteId].pos2.y = 0; - DestroyAnimVisualTask(taskId); - return; - } - } -} - -// Scales a mon's sprite, and then scales back to its original dimensions. -// arg 0: x scale delta -// arg 1: y scale delta -// arg 2: duration -// arg 3: anim bank -// arg 4: sprite object mode -void AnimTask_ScaleMonAndRestore(u8 taskId) -{ - u8 spriteId; - spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[3]); - PrepareBattlerSpriteForRotScale(spriteId, gBattleAnimArgs[4]); - gTasks[taskId].data[0] = gBattleAnimArgs[0]; - gTasks[taskId].data[1] = gBattleAnimArgs[1]; - gTasks[taskId].data[2] = gBattleAnimArgs[2]; - gTasks[taskId].data[3] = gBattleAnimArgs[2]; - gTasks[taskId].data[4] = spriteId; - gTasks[taskId].data[10] = 0x100; - gTasks[taskId].data[11] = 0x100; - gTasks[taskId].func = AnimTask_ScaleMonAndRestoreStep; -} - -void AnimTask_ScaleMonAndRestoreStep(u8 taskId) -{ - u8 spriteId; - gTasks[taskId].data[10] += gTasks[taskId].data[0]; - gTasks[taskId].data[11] += gTasks[taskId].data[1]; - spriteId = gTasks[taskId].data[4]; - SetSpriteRotScale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[11], 0); - if (--gTasks[taskId].data[2] == 0) - { - if (gTasks[taskId].data[3] > 0) - { - gTasks[taskId].data[0] = -gTasks[taskId].data[0]; - gTasks[taskId].data[1] = -gTasks[taskId].data[1]; - gTasks[taskId].data[2] = gTasks[taskId].data[3]; - gTasks[taskId].data[3] = 0; - } - else - { - ResetSpriteRotScale(spriteId); - DestroyAnimVisualTask(taskId); - return; - } - } -} - -void sub_80D6134(u8 taskId) -{ - u8 spriteId; - spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[2]); - PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = gBattleAnimArgs[0]; - if (gBattleAnimArgs[3] != 1) - { - gTasks[taskId].data[3] = 0; - } - else - { - gTasks[taskId].data[3] = gBattleAnimArgs[0] * gBattleAnimArgs[1]; - } - gTasks[taskId].data[4] = gBattleAnimArgs[1]; - gTasks[taskId].data[5] = spriteId; - gTasks[taskId].data[6] = gBattleAnimArgs[3]; - if (IsContest()) - { - gTasks[taskId].data[7] = 1; - } - else - { - if (gBattleAnimArgs[2] == 0) - { - gTasks[taskId].data[7] = !GetBattlerSide(gBattleAnimAttacker); - } - else - { - gTasks[taskId].data[7] = !GetBattlerSide(gBattleAnimTarget); - } - } - if (gTasks[taskId].data[7]) - { - if (!IsContest()) - { - gTasks[taskId].data[3] *= -1; - gTasks[taskId].data[4] *= -1; - } - } - gTasks[taskId].func = sub_80D6308; -} - -void sub_80D622C(u8 taskId) -{ - u8 spriteId; - spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[2]); - PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = gBattleAnimArgs[0]; - if (gBattleAnimArgs[2] == 0) - { - if (GetBattlerSide(gBattleAnimAttacker)) - { - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - } - } - else - { - if (GetBattlerSide(gBattleAnimTarget)) - { - gBattleAnimArgs[1] = -gBattleAnimArgs[1]; - } - } - if (gBattleAnimArgs[3] != 1) - { - gTasks[taskId].data[3] = 0; - } - else - { - gTasks[taskId].data[3] = gBattleAnimArgs[0] * gBattleAnimArgs[1]; - } - gTasks[taskId].data[4] = gBattleAnimArgs[1]; - gTasks[taskId].data[5] = spriteId; - gTasks[taskId].data[6] = gBattleAnimArgs[3]; - gTasks[taskId].data[7] = 1; - gTasks[taskId].data[3] *= -1; - gTasks[taskId].data[4] *= -1; - gTasks[taskId].func = sub_80D6308; -} - -void sub_80D6308(u8 taskId) -{ - gTasks[taskId].data[3] += gTasks[taskId].data[4]; - SetSpriteRotScale(gTasks[taskId].data[5], 0x100, 0x100, gTasks[taskId].data[3]); - if (gTasks[taskId].data[7]) - { - SetBattlerSpriteYOffsetFromRotation(gTasks[taskId].data[5]); - } - if (++gTasks[taskId].data[1] >= gTasks[taskId].data[2]) - { - switch (gTasks[taskId].data[6]) - { - case 1: - ResetSpriteRotScale(gTasks[taskId].data[5]); - case 0: - default: - DestroyAnimVisualTask(taskId); - return; - case 2: - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[4] *= -1; - gTasks[taskId].data[6] = 1; - break; - } - } -} - -void sub_80D6388(u8 taskId) -{ - if (!gBattleAnimArgs[0]) - { - gTasks[taskId].data[15] = gAnimMovePower / 12; - if (gTasks[taskId].data[15] < 1) - { - gTasks[taskId].data[15] = 1; - } - if (gTasks[taskId].data[15] > 16) - { - gTasks[taskId].data[15] = 16; - } - } - else - { - gTasks[taskId].data[15] = gAnimMoveDmg / 12; - if (gTasks[taskId].data[15] < 1) - { - gTasks[taskId].data[15] = 1; - } - if (gTasks[taskId].data[15] > 16) - { - gTasks[taskId].data[15] = 16; - } - } - gTasks[taskId].data[14] = gTasks[taskId].data[15] / 2; - gTasks[taskId].data[13] = gTasks[taskId].data[14] + (gTasks[taskId].data[15] & 1); - gTasks[taskId].data[12] = 0; - gTasks[taskId].data[10] = gBattleAnimArgs[3]; - gTasks[taskId].data[11] = gBattleAnimArgs[4]; - gTasks[taskId].data[7] = GetAnimBattlerSpriteId(1); - gTasks[taskId].data[8] = gSprites[gTasks[taskId].data[7]].pos2.x; - gTasks[taskId].data[9] = gSprites[gTasks[taskId].data[7]].pos2.y; - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = gBattleAnimArgs[1]; - gTasks[taskId].data[2] = gBattleAnimArgs[2]; - gTasks[taskId].func = sub_80D646C; -} - -void sub_80D646C(u8 taskId) -{ - struct Task *task = &gTasks[taskId]; - if (++task->data[0] > task->data[1]) - { - task->data[0] = 0; - task->data[12] = (task->data[12] + 1) & 1; - if (task->data[10]) - { - if (task->data[12]) - { - gSprites[task->data[7]].pos2.x = task->data[8] + task->data[13]; - } - else - { - gSprites[task->data[7]].pos2.x = task->data[8] - task->data[14]; - } - } - if (task->data[11]) - { - if (task->data[12]) - { - gSprites[task->data[7]].pos2.y = task->data[15]; - } - else - { - gSprites[task->data[7]].pos2.y = 0; - } - } - if (!--task->data[2]) - { - gSprites[task->data[7]].pos2.x = 0; - gSprites[task->data[7]].pos2.y = 0; - DestroyAnimVisualTask(taskId); - return; - } - } -} diff --git a/src/battle_anim_8170478.c b/src/battle_anim_8170478.c deleted file mode 100755 index 92874fe09..000000000 --- a/src/battle_anim_8170478.c +++ /dev/null @@ -1,2267 +0,0 @@ -#include "global.h" -#include "battle.h" -#include "battle_anim.h" -#include "battle_controllers.h" -#include "battle_interface.h" -#include "decompress.h" -#include "dma3.h" -#include "gpu_regs.h" -#include "graphics.h" -#include "m4a.h" -#include "main.h" -#include "palette.h" -#include "pokeball.h" -#include "sound.h" -#include "sprite.h" -#include "task.h" -#include "trig.h" -#include "util.h" -#include "constants/rgb.h" -#include "constants/items.h" -#include "constants/songs.h" - -// iwram -int gUnknown_030062DC; -u16 gUnknown_030062E0; -u16 gUnknown_030062E4; - -static void sub_8170660(u8); -static void sub_8170A38(u8); -static void sub_8170EF0(u8); -static void sub_8171104(struct Sprite *); -static void sub_8171030(u8); -static void sub_81710A8(u8); -static void sub_8171134(struct Sprite *); -static void sub_8171CAC(struct Sprite *); -static void sub_81711E8(struct Sprite *); -static void sub_8171240(struct Sprite *); -static void sub_817138C(struct Sprite *); -static void sub_81713D0(struct Sprite *); -static void sub_81717B4(struct Sprite *); -static void sub_81714D4(struct Sprite *); -static void sub_8171520(struct Sprite *); -static void sub_81717D8(struct Sprite *); -static void sub_8171AE4(struct Sprite *); -static void sub_81717F8(struct Sprite *); -static void sub_81719EC(struct Sprite *); -static void sub_81718D8(struct Sprite *); -static void sub_81719C0(struct Sprite *); -static void sub_8171D60(u8); -static void sub_8171AAC(struct Sprite *); -static void sub_8171BAC(struct Sprite *); -static void sub_8171CE8(struct Sprite *); -static void PokeBallOpenParticleAnimation_Step1(struct Sprite *); -static void PokeBallOpenParticleAnimation_Step2(struct Sprite *); -static void DestroyBallOpenAnimationParticle(struct Sprite *); -static void FanOutBallOpenParticles_Step1(struct Sprite *); -static void RepeatBallOpenParticleAnimation_Step1(struct Sprite *); -static void PremierBallOpenParticleAnimation_Step1(struct Sprite *); -static void sub_8172AB0(u8); -static void sub_8172B40(u8); -static void sub_8172B90(u8); -static void sub_8172FEC(u8); -static void sub_81731FC(struct Sprite *); -static void sub_8173250(struct Sprite *); -static void sub_81731B0(u8); -static void sub_817339C(struct Sprite *); -static void sub_81733D4(struct Sprite *); -static void sub_8173400(struct Sprite *); -static void PokeBallOpenParticleAnimation(u8); -static void GreatBallOpenParticleAnimation(u8); -static void SafariBallOpenParticleAnimation(u8); -static void UltraBallOpenParticleAnimation(u8); -static void MasterBallOpenParticleAnimation(u8); -static void DiveBallOpenParticleAnimation(u8); -static void RepeatBallOpenParticleAnimation(u8); -static void TimerBallOpenParticleAnimation(u8); -static void PremierBallOpenParticleAnimation(u8); -static void sub_817330C(struct Sprite *); - -struct BallCaptureSuccessStarData -{ - s8 xOffset; - s8 yOffset; - s8 unk2; -}; - -static const struct BallCaptureSuccessStarData sBallCaptureSuccessStarData[] = -{ - { - .xOffset = 10, - .yOffset = 2, - .unk2 = -3, - }, - { - .xOffset = 15, - .yOffset = 0, - .unk2 = -4, - }, - { - .xOffset = -10, - .yOffset = 2, - .unk2 = -4, - }, -}; - -const struct CompressedSpriteSheet gBallOpenParticleSpritesheets[] = -{ - {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6EC}, - {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6ED}, - {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6EE}, - {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6EF}, - {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F0}, - {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F1}, - {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F2}, - {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F3}, - {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F4}, - {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F5}, - {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F6}, - {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F7}, -}; - -const struct CompressedSpritePalette gBallOpenParticlePalettes[] = -{ - {gBattleAnimSpritePalette_136, 0xD6EC}, - {gBattleAnimSpritePalette_136, 0xD6ED}, - {gBattleAnimSpritePalette_136, 0xD6EE}, - {gBattleAnimSpritePalette_136, 0xD6EF}, - {gBattleAnimSpritePalette_136, 0xD6F0}, - {gBattleAnimSpritePalette_136, 0xD6F1}, - {gBattleAnimSpritePalette_136, 0xD6F2}, - {gBattleAnimSpritePalette_136, 0xD6F3}, - {gBattleAnimSpritePalette_136, 0xD6F4}, - {gBattleAnimSpritePalette_136, 0xD6F5}, - {gBattleAnimSpritePalette_136, 0xD6F6}, - {gBattleAnimSpritePalette_136, 0xD6F7}, -}; - -const union AnimCmd gUnknown_085E5154[] = -{ - ANIMCMD_FRAME(0, 1), - ANIMCMD_FRAME(1, 1), - ANIMCMD_FRAME(2, 1), - ANIMCMD_FRAME(0, 1, .hFlip = TRUE), - ANIMCMD_FRAME(2, 1), - ANIMCMD_FRAME(1, 1), - ANIMCMD_JUMP(0), -}; - -const union AnimCmd gUnknown_085E5170[] = -{ - ANIMCMD_FRAME(3, 1), - ANIMCMD_END, -}; - -const union AnimCmd gUnknown_085E5178[] = -{ - ANIMCMD_FRAME(4, 1), - ANIMCMD_END, -}; - -const union AnimCmd gUnknown_085E5180[] = -{ - ANIMCMD_FRAME(5, 1), - ANIMCMD_END, -}; - -const union AnimCmd gUnknown_085E5188[] = -{ - ANIMCMD_FRAME(6, 4), - ANIMCMD_FRAME(7, 4), - ANIMCMD_JUMP(0), -}; - -const union AnimCmd gUnknown_085E5194[] = -{ - ANIMCMD_FRAME(7, 4), - ANIMCMD_END, -}; - -const union AnimCmd *const gUnknown_085E519C[] = -{ - gUnknown_085E5154, - gUnknown_085E5170, - gUnknown_085E5178, - gUnknown_085E5180, - gUnknown_085E5188, - gUnknown_085E5194, -}; - -const u8 gBallOpenParticleAnimNums[] = -{ - 0, - 0, - 0, - 5, - 1, - 2, - 2, - 3, - 5, - 5, - 4, - 4, -}; - -const TaskFunc gBallOpenParticleAnimationFuncs[] = -{ - PokeBallOpenParticleAnimation, - GreatBallOpenParticleAnimation, - SafariBallOpenParticleAnimation, - UltraBallOpenParticleAnimation, - MasterBallOpenParticleAnimation, - SafariBallOpenParticleAnimation, - DiveBallOpenParticleAnimation, - UltraBallOpenParticleAnimation, - RepeatBallOpenParticleAnimation, - TimerBallOpenParticleAnimation, - GreatBallOpenParticleAnimation, - PremierBallOpenParticleAnimation, -}; - -const struct SpriteTemplate gUnknown_085E51F0[] = -{ - { - .tileTag = 55020, - .paletteTag = 55020, - .oam = &gUnknown_08524904, - .anims = gUnknown_085E519C, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, - }, - { - .tileTag = 55021, - .paletteTag = 55021, - .oam = &gUnknown_08524904, - .anims = gUnknown_085E519C, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, - }, - { - .tileTag = 55022, - .paletteTag = 55022, - .oam = &gUnknown_08524904, - .anims = gUnknown_085E519C, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, - }, - { - .tileTag = 55023, - .paletteTag = 55023, - .oam = &gUnknown_08524904, - .anims = gUnknown_085E519C, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, - }, - { - .tileTag = 55024, - .paletteTag = 55024, - .oam = &gUnknown_08524904, - .anims = gUnknown_085E519C, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, - }, - { - .tileTag = 55025, - .paletteTag = 55025, - .oam = &gUnknown_08524904, - .anims = gUnknown_085E519C, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, - }, - { - .tileTag = 55026, - .paletteTag = 55026, - .oam = &gUnknown_08524904, - .anims = gUnknown_085E519C, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, - }, - { - .tileTag = 55027, - .paletteTag = 55027, - .oam = &gUnknown_08524904, - .anims = gUnknown_085E519C, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, - }, - { - .tileTag = 55028, - .paletteTag = 55028, - .oam = &gUnknown_08524904, - .anims = gUnknown_085E519C, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, - }, - { - .tileTag = 55029, - .paletteTag = 55029, - .oam = &gUnknown_08524904, - .anims = gUnknown_085E519C, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, - }, - { - .tileTag = 55030, - .paletteTag = 55030, - .oam = &gUnknown_08524904, - .anims = gUnknown_085E519C, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, - }, - { - .tileTag = 55031, - .paletteTag = 55031, - .oam = &gUnknown_08524904, - .anims = gUnknown_085E519C, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = SpriteCallbackDummy, - }, -}; - -const u16 gUnknown_085E5310[] = -{ - RGB(31, 22, 30), - RGB(16, 23, 30), - RGB(23, 30, 20), - RGB(31, 31, 15), - RGB(23, 20, 28), - RGB(21, 31, 25), - RGB(12, 25, 30), - RGB(30, 27, 10), - RGB(31, 24, 16), - RGB(29, 30, 30), - RGB(31, 17, 10), - RGB(31, 9, 10), - RGB(0, 0, 0), - RGB(1, 16, 0), - RGB(3, 0, 1), - RGB(1, 8, 0), - RGB(0, 8, 0), - RGB(3, 8, 1), - RGB(6, 8, 1), - RGB(4, 0, 0), -}; - -const struct SpriteTemplate gBattleAnimSpriteTemplate_85E5338 = -{ - .tileTag = ANIM_TAG_UNUSED_RED_BRICK, - .paletteTag = ANIM_TAG_UNUSED_RED_BRICK, - .oam = &gUnknown_0852490C, - .anims = gDummySpriteAnimTable, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_817330C, -}; - -const union AnimCmd gUnknown_085E5350[] = -{ - ANIMCMD_FRAME(64, 1), - ANIMCMD_END, -}; - -const union AnimCmd *const gUnknown_085E5358[] = { - gUnknown_085E5350, -}; - -const struct SpriteTemplate gBattleAnimSpriteTemplate_085E535C = -{ - .tileTag = ANIM_TAG_ROCKS, - .paletteTag = ANIM_TAG_ROCKS, - .oam = &gUnknown_08524914, - .anims = gUnknown_085E5358, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_817330C, -}; - -extern const struct SpriteTemplate gUnknown_085CE388; -extern const struct SpriteTemplate gMiniTwinklingStarSpriteTemplate; - -void unref_sub_8170478(u8 taskId) -{ - struct BattleAnimBgData unknownStruct; - u8 healthBoxSpriteId; - u8 battler; - u8 spriteId1, spriteId2, spriteId3, spriteId4; - - battler = gBattleAnimAttacker; - gBattle_WIN0H = 0; - gBattle_WIN0V = 0; - 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_BG0 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR); - SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON); - SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); - SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 0); - SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0); - SetAnimBgAttribute(1, BG_ANIM_AREA_OVERFLOW_MODE, 1); - SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1); - - healthBoxSpriteId = gHealthboxSpriteIds[battler]; - spriteId1 = gSprites[healthBoxSpriteId].oam.affineParam; - spriteId2 = gSprites[healthBoxSpriteId].data[5]; - spriteId3 = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); - spriteId4 = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); - gSprites[healthBoxSpriteId].oam.priority = 1; - gSprites[spriteId1].oam.priority = 1; - gSprites[spriteId2].oam.priority = 1; - gSprites[spriteId3] = gSprites[healthBoxSpriteId]; - gSprites[spriteId4] = gSprites[spriteId1]; - gSprites[spriteId3].oam.objMode = ST_OAM_OBJ_WINDOW; - gSprites[spriteId4].oam.objMode = ST_OAM_OBJ_WINDOW; - gSprites[spriteId3].callback = SpriteCallbackDummy; - gSprites[spriteId4].callback = SpriteCallbackDummy; - - sub_80A6B30(&unknownStruct); - AnimLoadCompressedBgTilemap(unknownStruct.bgId, gUnknown_08C2EA9C); - AnimLoadCompressedBgGfx(unknownStruct.bgId, gUnknown_08C2EA50, unknownStruct.tilesOffset); - LoadCompressedPalette(gCureBubblesPal, unknownStruct.paletteId << 4, 32); - - gBattle_BG1_X = -gSprites[spriteId3].pos1.x + 32; - gBattle_BG1_Y = -gSprites[spriteId3].pos1.y - 32; - gTasks[taskId].data[1] = 640; - gTasks[taskId].data[0] = spriteId3; - gTasks[taskId].data[2] = spriteId4; - gTasks[taskId].func = sub_8170660; -} - -static void sub_8170660(u8 taskId) -{ - u8 spriteId1, spriteId2; - u8 battler; - - battler = gBattleAnimAttacker; - gTasks[taskId].data[13] += gTasks[taskId].data[1]; - gBattle_BG1_Y += (u16)gTasks[taskId].data[13] >> 8; - gTasks[taskId].data[13] &= 0xFF; - - switch (gTasks[taskId].data[15]) - { - case 0: - if (gTasks[taskId].data[11]++ > 1) - { - gTasks[taskId].data[11] = 0; - gTasks[taskId].data[12]++; - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12])); - if (gTasks[taskId].data[12] == 8) - gTasks[taskId].data[15]++; - } - break; - case 1: - if (++gTasks[taskId].data[10] == 30) - gTasks[taskId].data[15]++; - break; - case 2: - if (gTasks[taskId].data[11]++ > 1) - { - gTasks[taskId].data[11] = 0; - gTasks[taskId].data[12]--; - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12])); - if (gTasks[taskId].data[12] == 0) - { - sub_80A477C(0); - gBattle_WIN0H = 0; - gBattle_WIN0V = 0; - 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); - if (!IsContest()) - SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0); - - SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON); - SetGpuReg(REG_OFFSET_BLDCNT, 0); - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0)); - DestroySprite(&gSprites[gTasks[taskId].data[0]]); - DestroySprite(&gSprites[gTasks[taskId].data[2]]); - SetAnimBgAttribute(1, BG_ANIM_AREA_OVERFLOW_MODE, 0); - spriteId1 = gSprites[gHealthboxSpriteIds[battler]].oam.affineParam; - spriteId2 = gSprites[gHealthboxSpriteIds[battler]].data[5]; - gSprites[gHealthboxSpriteIds[battler]].oam.priority = 1; - gSprites[spriteId1].oam.priority = 1; - gSprites[spriteId2].oam.priority = 1; - DestroyAnimVisualTask(taskId); - } - } - break; - } -} - -static void sub_8170834(u8 *paletteId1, u8 *paletteId2, u8 battler) -{ - u8 healthBoxSpriteId; - u8 spriteId1, spriteId2; - u16 offset1, offset2; - - healthBoxSpriteId = gHealthboxSpriteIds[battler]; - spriteId1 = gSprites[healthBoxSpriteId].oam.affineParam; - spriteId2 = gSprites[healthBoxSpriteId].data[5]; - *paletteId1 = AllocSpritePalette(0xD709); - *paletteId2 = AllocSpritePalette(0xD70A); - - offset1 = (gSprites[healthBoxSpriteId].oam.paletteNum * 16) + 0x100; - offset2 = (gSprites[spriteId2].oam.paletteNum * 16) + 0x100; - LoadPalette(&gPlttBufferUnfaded[offset1], *paletteId1 * 16 + 0x100, 0x20); - LoadPalette(&gPlttBufferUnfaded[offset2], *paletteId2 * 16 + 0x100, 0x20); - - gSprites[healthBoxSpriteId].oam.paletteNum = *paletteId1; - gSprites[spriteId1].oam.paletteNum = *paletteId1; - gSprites[spriteId2].oam.paletteNum = *paletteId2; -} - -void sub_8170920(u8 taskId) -{ - u8 paletteId1, paletteId2; - sub_8170834(&paletteId1, &paletteId2, gBattleAnimAttacker); - DestroyAnimVisualTask(taskId); -} - -static void sub_817094C(u8 battler) -{ - u8 healthBoxSpriteId; - u8 spriteId1, spriteId2; - u8 paletteId1, paletteId2; - - healthBoxSpriteId = gHealthboxSpriteIds[battler]; - spriteId1 = gSprites[healthBoxSpriteId].oam.affineParam; - spriteId2 = gSprites[healthBoxSpriteId].data[5]; - - FreeSpritePaletteByTag(0xD709); - FreeSpritePaletteByTag(0xD70A); - paletteId1 = IndexOfSpritePaletteTag(0xD6FF); - paletteId2 = IndexOfSpritePaletteTag(0xD704); - gSprites[healthBoxSpriteId].oam.paletteNum = paletteId1; - gSprites[spriteId1].oam.paletteNum = paletteId1; - gSprites[spriteId2].oam.paletteNum = paletteId2; -} - -void sub_81709EC(u8 taskId) -{ - sub_817094C(gBattleAnimAttacker); - DestroyAnimVisualTask(taskId); -} - -void sub_8170A0C(u8 taskId) -{ - gTasks[taskId].data[10] = gBattleAnimArgs[0]; - gTasks[taskId].data[11] = gBattleAnimArgs[1]; - gTasks[taskId].func = sub_8170A38; -} - -static void sub_8170A38(u8 taskId) -{ - u8 paletteNum; - int paletteOffset, colorOffset; - - gTasks[taskId].data[0]++; - if (gTasks[taskId].data[0]++ >= gTasks[taskId].data[11]) - { - gTasks[taskId].data[0] = 0; - paletteNum = IndexOfSpritePaletteTag(0xD709); - colorOffset = gTasks[taskId].data[10] == 0 ? 6 : 2; - switch (gTasks[taskId].data[1]) - { - case 0: - gTasks[taskId].data[2] += 2; - if (gTasks[taskId].data[2] > 16) - gTasks[taskId].data[2] = 16; - - paletteOffset = paletteNum * 16 + 0x100; - BlendPalette(paletteOffset + colorOffset, 1, gTasks[taskId].data[2], RGB(20, 27, 31)); - if (gTasks[taskId].data[2] == 16) - gTasks[taskId].data[1]++; - break; - case 1: - gTasks[taskId].data[2] -= 2; - if (gTasks[taskId].data[2] < 0) - gTasks[taskId].data[2] = 0; - - paletteOffset = paletteNum * 16 + 0x100; - BlendPalette(paletteOffset + colorOffset, 1, gTasks[taskId].data[2], RGB(20, 27, 31)); - if (gTasks[taskId].data[2] == 0) - DestroyAnimVisualTask(taskId); - break; - } - } -} - -void sub_8170B04(u8 taskId) -{ - u8 spriteId; - - spriteId = gBattlerSpriteIds[gBattleAnimAttacker]; - switch (gTasks[taskId].data[0]) - { - case 0: - PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); - gTasks[taskId].data[10] = 0x100; - gTasks[taskId].data[0]++; - break; - case 1: - gTasks[taskId].data[10] += 0x30; - SetSpriteRotScale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[10], 0); - SetBattlerSpriteYOffsetFromYScale(spriteId); - if (gTasks[taskId].data[10] >= 0x2D0) - gTasks[taskId].data[0]++; - break; - case 2: - ResetSpriteRotScale(spriteId); - gSprites[spriteId].invisible = 1; - DestroyAnimVisualTask(taskId); - break; - } -} - -void sub_8170BB0(u8 taskId) -{ - u8 spriteId; - u16 ball; - u8 ballId; - u8 x, y; - u8 priority, subpriority; - u32 selectedPalettes; - - spriteId = gBattlerSpriteIds[gBattleAnimAttacker]; - if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) - ball = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_POKEBALL); - else - ball = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_POKEBALL); - - ballId = ItemIdToBallId(ball); - switch (gTasks[taskId].data[0]) - { - case 0: - x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); - y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1); - priority = gSprites[spriteId].oam.priority; - subpriority = gSprites[spriteId].subpriority; - gTasks[taskId].data[10] = AnimateBallOpenParticles(x, y + 32, priority, subpriority, ballId); - selectedPalettes = sub_80A75AC(1, 0, 0, 0, 0, 0, 0); - gTasks[taskId].data[11] = LaunchBallFadeMonTask(0, gBattleAnimAttacker, selectedPalettes, ballId); - gTasks[taskId].data[0]++; - break; - case 1: - if (!gTasks[gTasks[taskId].data[10]].isActive && !gTasks[gTasks[taskId].data[11]].isActive) - DestroyAnimVisualTask(taskId); - break; - } -} - -void sub_8170CFC(u8 taskId) -{ - u8 ballId = ItemIdToBallId(gLastUsedItem); - LoadBallGfx(ballId); - DestroyAnimVisualTask(taskId); -} - -void sub_8170D24(u8 taskId) -{ - u8 ballId = ItemIdToBallId(gLastUsedItem); - FreeBallGfx(ballId); - DestroyAnimVisualTask(taskId); -} - -void AnimTask_IsBallBlockedByTrainer(u8 taskId) -{ - if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_TRAINER_BLOCK) - gBattleAnimArgs[7] = -1; - else - gBattleAnimArgs[7] = 0; - - DestroyAnimVisualTask(taskId); -} - -u8 ItemIdToBallId(u16 ballItem) -{ - switch (ballItem) - { - case ITEM_MASTER_BALL: - return 4; - case ITEM_ULTRA_BALL: - return 3; - case ITEM_GREAT_BALL: - return 1; - case ITEM_SAFARI_BALL: - return 2; - case ITEM_NET_BALL: - return 5; - case ITEM_DIVE_BALL: - return 6; - case ITEM_NEST_BALL: - return 7; - case ITEM_REPEAT_BALL: - return 8; - case ITEM_TIMER_BALL: - return 9; - case ITEM_LUXURY_BALL: - return 10; - case ITEM_PREMIER_BALL: - return 11; - case ITEM_POKE_BALL: - default: - return 0; - } -} - -void sub_8170E04(u8 taskId) -{ - u8 ballId; - u8 spriteId; - - ballId = ItemIdToBallId(gLastUsedItem); - spriteId = CreateSprite(&gBallSpriteTemplates[ballId], 32, 80, 29); - gSprites[spriteId].data[0] = 34; - gSprites[spriteId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 0); - gSprites[spriteId].data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) - 16; - gSprites[spriteId].callback = sub_8171104; - gBattleSpritesDataPtr->animationData->field_9_x2 = gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible; - gTasks[taskId].data[0] = spriteId; - gTasks[taskId].func = sub_8170EF0; -} - -static void sub_8170EF0(u8 taskId) -{ - u8 spriteId = gTasks[taskId].data[0]; - if ((u16)gSprites[spriteId].data[0] == 0xFFFF) - DestroyAnimVisualTask(taskId); -} - -void sub_8170F2C(u8 taskId) -{ - int x, y; - u8 ballId; - u8 subpriority; - u8 spriteId; - - if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL) - { - x = 32; - y = 11; - } - else - { - x = 23; - y = 5; - } - - ballId = ItemIdToBallId(gLastUsedItem); - subpriority = GetBattlerSpriteSubpriority(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) + 1; - spriteId = CreateSprite(&gBallSpriteTemplates[ballId], x + 32, y | 80, subpriority); - gSprites[spriteId].data[0] = 34; - gSprites[spriteId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 0); - gSprites[spriteId].data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) - 16; - gSprites[spriteId].callback = SpriteCallbackDummy; - gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].callback = sub_8039E84; - gTasks[taskId].data[0] = spriteId; - gTasks[taskId].func = sub_8171030; -} - -static void sub_8171030(u8 taskId) -{ - if (gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].animCmdIndex == 1) - { - PlaySE12WithPanning(SE_NAGERU, 0); - gSprites[gTasks[taskId].data[0]].callback = sub_8171104; - CreateTask(sub_81710A8, 10); - gTasks[taskId].func = sub_8170EF0; - } -} - -static void sub_81710A8(u8 taskId) -{ - if (gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].animEnded) - { - StartSpriteAnim(&gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]], 0); - DestroyTask(taskId); - } -} - -static void sub_8171104(struct Sprite *sprite) -{ - u16 temp = sprite->data[1]; - u16 temp2 = sprite->data[2]; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = temp; - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = temp2; - sprite->data[5] = -40; - InitAnimArcTranslation(sprite); - sprite->callback = sub_8171134; -} - -static void sub_8171134(struct Sprite *sprite) -{ - int i; - u8 ballId; - int ballId2; // extra var needed to match - - if (TranslateAnimHorizontalArc(sprite)) - { - if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_TRAINER_BLOCK) - { - sprite->callback = sub_8171CAC; - } - else - { - StartSpriteAnim(sprite, 1); - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - - for (i = 0; i < 8; i++) - sprite->data[i] = 0; - - sprite->data[5] = 0; - sprite->callback = sub_81711E8; - ballId = ItemIdToBallId(gLastUsedItem); - ballId2 = ballId; - if (ballId2 > 11) - return; - if (ballId2 < 0) - return; - - AnimateBallOpenParticles(sprite->pos1.x, sprite->pos1.y - 5, 1, 28, ballId); - LaunchBallFadeMonTask(0, gBattleAnimTarget, 14, ballId); - } - } -} - -static void sub_81711E8(struct Sprite *sprite) -{ - if (++sprite->data[5] == 10) - { - sprite->data[5] = CreateTask(TaskDummy, 50); - sprite->callback = sub_8171240; - gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] = 0; - } -} - -static void sub_8171240(struct Sprite *sprite) -{ - u8 spriteId; - u8 taskId; - - spriteId = gBattlerSpriteIds[gBattleAnimTarget]; - taskId = sprite->data[5]; - - if (++gTasks[taskId].data[1] == 11) - PlaySE(SE_SUIKOMU); - - switch (gTasks[taskId].data[0]) - { - case 0: - PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); - gTasks[taskId].data[10] = 256; - gUnknown_030062DC = 28; - gUnknown_030062E4 = (gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) - (sprite->pos1.y + sprite->pos2.y); - gUnknown_030062E0 = (u32)(gUnknown_030062E4 * 256) / 28; - gTasks[taskId].data[2] = gUnknown_030062E0; - gTasks[taskId].data[0]++; - break; - case 1: - gTasks[taskId].data[10] += 0x20; - SetSpriteRotScale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[10], 0); - gTasks[taskId].data[3] += gTasks[taskId].data[2]; - gSprites[spriteId].pos2.y = -gTasks[taskId].data[3] >> 8; - if (gTasks[taskId].data[10] >= 0x480) - gTasks[taskId].data[0]++; - break; - case 2: - ResetSpriteRotScale(spriteId); - gSprites[spriteId].invisible = 1; - gTasks[taskId].data[0]++; - break; - default: - if (gTasks[taskId].data[1] > 10) - { - DestroyTask(taskId); - StartSpriteAnim(sprite, 2); - sprite->data[5] = 0; - sprite->callback = sub_817138C; - } - break; - } -} - -static void sub_817138C(struct Sprite *sprite) -{ - int angle; - - if (sprite->animEnded) - { - sprite->data[3] = 0; - sprite->data[4] = 40; - sprite->data[5] = 0; - angle = 0; - sprite->pos1.y += Cos(angle, 40); - sprite->pos2.y = -Cos(angle, sprite->data[4]); - sprite->callback = sub_81713D0; - } -} - -static void sub_81713D0(struct Sprite *sprite) -{ - bool8 lastBounce; - int bounceCount; - - lastBounce = 0; - - switch (sprite->data[3] & 0xFF) - { - case 0: - sprite->pos2.y = -Cos(sprite->data[5], sprite->data[4]); - sprite->data[5] += (sprite->data[3] >> 8) + 4; - if (sprite->data[5] >= 64) - { - sprite->data[4] -= 10; - sprite->data[3] += 257; - - bounceCount = sprite->data[3] >> 8; - if (bounceCount == 4) - lastBounce = 1; - - // Play a different sound effect for each pokeball bounce. - switch (bounceCount) - { - case 1: - PlaySE(SE_KON); - break; - case 2: - PlaySE(SE_KON2); - break; - case 3: - PlaySE(SE_KON3); - break; - default: - PlaySE(SE_KON4); - break; - } - } - break; - case 1: - sprite->pos2.y = -Cos(sprite->data[5], sprite->data[4]); - sprite->data[5] -= (sprite->data[3] >> 8) + 4; - if (sprite->data[5] <= 0) - { - sprite->data[5] = 0; - sprite->data[3] &= -0x100; - } - break; - } - - if (lastBounce) - { - sprite->data[3] = 0; - sprite->pos1.y += Cos(64, 40); - sprite->pos2.y = 0; - if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_NO_SHAKES) - { - sprite->data[5] = 0; - sprite->callback = sub_81717B4; - } - else - { - sprite->callback = sub_81714D4; - sprite->data[4] = 1; - sprite->data[5] = 0; - } - } -} - -static void sub_81714D4(struct Sprite *sprite) -{ - if (++sprite->data[3] == 31) - { - sprite->data[3] = 0; - sprite->affineAnimPaused = 1; - StartSpriteAffineAnim(sprite, 1); - gBattleSpritesDataPtr->animationData->field_C = 0; - sprite->callback = sub_8171520; - PlaySE(SE_BOWA); - } -} - -static void sub_8171520(struct Sprite *sprite) -{ - s8 state; - u16 var0; - - switch (sprite->data[3] & 0xFF) - { - case 0: - if (gBattleSpritesDataPtr->animationData->field_C > 0xFF) - { - sprite->pos2.x += sprite->data[4]; - gBattleSpritesDataPtr->animationData->field_C &= 0xFF; - } - else - { - gBattleSpritesDataPtr->animationData->field_C += 0xB0; - } - - sprite->data[5]++; - sprite->affineAnimPaused = 0; - var0 = sprite->data[5] + 7; - if (var0 > 14) - { - gBattleSpritesDataPtr->animationData->field_C = 0; - sprite->data[3]++; - sprite->data[5] = 0; - } - break; - case 1: - if (++sprite->data[5] == 1) - { - sprite->data[5] = 0; - sprite->data[4] = -sprite->data[4]; - sprite->data[3]++; - sprite->affineAnimPaused = 0; - if (sprite->data[4] < 0) - ChangeSpriteAffineAnim(sprite, 2); - else - ChangeSpriteAffineAnim(sprite, 1); - } - else - { - sprite->affineAnimPaused = 1; - } - break; - case 2: - if (gBattleSpritesDataPtr->animationData->field_C > 0xFF) - { - sprite->pos2.x += sprite->data[4]; - gBattleSpritesDataPtr->animationData->field_C &= 0xFF; - } - else - { - gBattleSpritesDataPtr->animationData->field_C += 0xB0; - } - - sprite->data[5]++; - sprite->affineAnimPaused = 0; - var0 = sprite->data[5] + 12; - if (var0 > 24) - { - gBattleSpritesDataPtr->animationData->field_C = 0; - sprite->data[3]++; - sprite->data[5] = 0; - } - break; - case 3: - if (sprite->data[5]++ < 0) - { - sprite->affineAnimPaused = 1; - break; - } - - sprite->data[5] = 0; - sprite->data[4] = -sprite->data[4]; - sprite->data[3]++; - sprite->affineAnimPaused = 0; - if (sprite->data[4] < 0) - ChangeSpriteAffineAnim(sprite, 2); - else - ChangeSpriteAffineAnim(sprite, 1); - // fall through - case 4: - if (gBattleSpritesDataPtr->animationData->field_C > 0xFF) - { - sprite->pos2.x += sprite->data[4]; - gBattleSpritesDataPtr->animationData->field_C &= 0xFF; - } - else - { - gBattleSpritesDataPtr->animationData->field_C += 0xB0; - } - - sprite->data[5]++; - sprite->affineAnimPaused = 0; - var0 = sprite->data[5] + 4; - if (var0 > 8) - { - gBattleSpritesDataPtr->animationData->field_C = 0; - sprite->data[3]++; - sprite->data[5] = 0; - sprite->data[4] = -sprite->data[4]; - } - break; - case 5: - sprite->data[3] += 0x100; - state = sprite->data[3] >> 8; - if (state == gBattleSpritesDataPtr->animationData->ballThrowCaseId) - { - sprite->affineAnimPaused = 1; - sprite->callback = sub_81717B4; - } - else - { - if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_3_SHAKES_SUCCESS && state == 3) - { - sprite->callback = sub_81717D8; - sprite->affineAnimPaused = 1; - } - else - { - sprite->data[3]++; - sprite->affineAnimPaused = 1; - } - } - break; - case 6: - default: - if (++sprite->data[5] == 31) - { - sprite->data[5] = 0; - sprite->data[3] &= -0x100; - StartSpriteAffineAnim(sprite, 3); - if (sprite->data[4] < 0) - StartSpriteAffineAnim(sprite, 2); - else - StartSpriteAffineAnim(sprite, 1); - - PlaySE(SE_BOWA); - } - break; - } -} - -static void sub_81717B4(struct Sprite *sprite) -{ - if (++sprite->data[5] == 31) - { - sprite->data[5] = 0; - sprite->callback = sub_8171AE4; - } -} - -static void sub_81717D8(struct Sprite *sprite) -{ - sprite->animPaused = 1; - sprite->callback = sub_81717F8; - sprite->data[3] = 0; - sprite->data[4] = 0; - sprite->data[5] = 0; -} - -static void sub_81717F8(struct Sprite *sprite) -{ - u8 *battler = &gBattleAnimTarget; - - sprite->data[4]++; - if (sprite->data[4] == 40) - { - PlaySE(SE_RG_GETTING); - BlendPalettes(0x10000 << sprite->oam.paletteNum, 6, RGB(0, 0, 0)); - sub_81719EC(sprite); - } - else if (sprite->data[4] == 60) - { - BeginNormalPaletteFade(0x10000 << sprite->oam.paletteNum, 2, 6, 0, RGB(0, 0, 0)); - } - else if (sprite->data[4] == 95) - { - gDoingBattleAnim = 0; - UpdateOamPriorityInAllHealthboxes(1); - m4aMPlayAllStop(); - PlaySE(MUS_RG_FAN6); - } - else if (sprite->data[4] == 315) - { - FreeOamMatrix(gSprites[gBattlerSpriteIds[*battler]].oam.matrixNum); - DestroySprite(&gSprites[gBattlerSpriteIds[*battler]]); - sprite->data[0] = 0; - sprite->callback = sub_81718D8; - } -} - -static void sub_81718D8(struct Sprite *sprite) -{ - u8 paletteIndex; - - switch (sprite->data[0]) - { - case 0: - sprite->data[1] = 0; - sprite->data[2] = 0; - sprite->oam.objMode = ST_OAM_OBJ_BLEND; - SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); - paletteIndex = IndexOfSpritePaletteTag(sprite->template->paletteTag); - BeginNormalPaletteFade(1 << (paletteIndex + 0x10), 0, 0, 16, RGB(31, 31, 31)); - sprite->data[0]++; - break; - case 1: - if (sprite->data[1]++ > 0) - { - sprite->data[1] = 0; - sprite->data[2]++; - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - sprite->data[2], sprite->data[2])); - if (sprite->data[2] == 16) - sprite->data[0]++; - } - break; - case 2: - sprite->invisible = 1; - sprite->data[0]++; - break; - default: - if (!gPaletteFade.active) - { - SetGpuReg(REG_OFFSET_BLDCNT, 0); - SetGpuReg(REG_OFFSET_BLDALPHA, 0); - sprite->data[0] = 0; - sprite->callback = sub_81719C0; - } - break; - } -} - -static void sub_81719C0(struct Sprite *sprite) -{ - if (sprite->data[0] == 0) - { - sprite->data[0] = -1; - } - else - { - FreeSpriteOamMatrix(sprite); - DestroySprite(sprite); - } -} - -static void sub_81719EC(struct Sprite *sprite) -{ - u32 i; - u8 subpriority; - - if (sprite->subpriority) - { - subpriority = sprite->subpriority - 1; - } - else - { - subpriority = 0; - sprite->subpriority = 1; - } - - sub_8171D60(4); - for (i = 0; i < 3; i++) - { - u8 spriteId = CreateSprite(&gUnknown_085E51F0[4], sprite->pos1.x, sprite->pos1.y, subpriority); - if (spriteId != MAX_SPRITES) - { - gSprites[spriteId].data[0] = 24; - gSprites[spriteId].data[2] = sprite->pos1.x + sBallCaptureSuccessStarData[i].xOffset; - gSprites[spriteId].data[4] = sprite->pos1.y + sBallCaptureSuccessStarData[i].yOffset; - gSprites[spriteId].data[5] = sBallCaptureSuccessStarData[i].unk2; - InitAnimArcTranslation(&gSprites[spriteId]); - gSprites[spriteId].callback = sub_8171AAC; - StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[4]); - } - } -} - -static void sub_8171AAC(struct Sprite *sprite) -{ - sprite->invisible = !sprite->invisible; - if (TranslateAnimHorizontalArc(sprite)) - DestroySprite(sprite); -} - -// fakematching. I think the return type of ItemIdToBallId() -// is wrong because of the weird required casting. -static void sub_8171AE4(struct Sprite *sprite) -{ - u8 ballId; - int ballId2; // extra var needed to match - - StartSpriteAnim(sprite, 1); - StartSpriteAffineAnim(sprite, 0); - sprite->callback = sub_8171BAC; - - ballId = ItemIdToBallId(gLastUsedItem); - ballId2 = ballId; - if (ballId2 > 11) - goto LABEL; - if (ballId2 < 0) - goto LABEL; - - AnimateBallOpenParticles(sprite->pos1.x, sprite->pos1.y - 5, 1, 28, ballId); - LaunchBallFadeMonTask(1, gBattleAnimTarget, 14, ballId); - - LABEL: - gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible = 0; - StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimTarget]], 1); - AnimateSprite(&gSprites[gBattlerSpriteIds[gBattleAnimTarget]]); - gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] = 0x1000; -} - -static void sub_8171BAC(struct Sprite *sprite) -{ - int next = FALSE; - - if (sprite->animEnded) - sprite->invisible = 1; - - if (gSprites[gBattlerSpriteIds[gBattleAnimTarget]].affineAnimEnded) - { - StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimTarget]], 0); - next = TRUE; - } - else - { - gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] -= 288; - gSprites[gBattlerSpriteIds[gBattleAnimTarget]].pos2.y = gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] >> 8; - } - - if (sprite->animEnded && next) - { - gSprites[gBattlerSpriteIds[gBattleAnimTarget]].pos2.y = 0; - gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible = gBattleSpritesDataPtr->animationData->field_9_x2; - sprite->data[0] = 0; - sprite->callback = sub_81719C0; - gDoingBattleAnim = 0; - UpdateOamPriorityInAllHealthboxes(1); - } -} - -static void sub_8171CAC(struct Sprite *sprite) -{ - int i; - - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.y = 0; - sprite->pos2.x = 0; - for (i = 0; i < 6; i++) - sprite->data[i] = 0; - - sprite->callback = sub_8171CE8; -} - -static void sub_8171CE8(struct Sprite *sprite) -{ - s16 var0 = sprite->data[0] + 0x800; - s16 var1 = sprite->data[1] + 0x680; - sprite->pos2.x -= var1 >> 8; - sprite->pos2.y += var0 >> 8; - sprite->data[0] = (sprite->data[0] + 0x800) & 0xFF; - sprite->data[1] = (sprite->data[1] + 0x680) & 0xFF; - - if (sprite->pos1.y + sprite->pos2.y > 160 - || sprite->pos1.x + sprite->pos2.x < -8) - { - sprite->data[0] = 0; - sprite->callback = sub_81719C0; - gDoingBattleAnim = 0; - UpdateOamPriorityInAllHealthboxes(1); - } -} - -static void sub_8171D60(u8 ballId) -{ - u8 taskId; - - if (GetSpriteTileStartByTag(gBallOpenParticleSpritesheets[ballId].tag) == 0xFFFF) - { - LoadCompressedSpriteSheetUsingHeap(&gBallOpenParticleSpritesheets[ballId]); - LoadCompressedSpritePaletteUsingHeap(&gBallOpenParticlePalettes[ballId]); - } -} - -u8 AnimateBallOpenParticles(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballId) -{ - u8 taskId; - - sub_8171D60(ballId); - taskId = CreateTask(gBallOpenParticleAnimationFuncs[ballId], 5); - gTasks[taskId].data[1] = x; - gTasks[taskId].data[2] = y; - gTasks[taskId].data[3] = priority; - gTasks[taskId].data[4] = subpriority; - gTasks[taskId].data[15] = ballId; - PlaySE(SE_BOWA2); - - return taskId; -} - -void sub_8171E20(void) -{ - if (gMain.inBattle) - gBattleSpritesDataPtr->animationData->field_A++; -} - -static void PokeBallOpenParticleAnimation(u8 taskId) -{ - u8 spriteId; - u8 x, y; - u8 priority, subpriority; - u8 ballId; - u8 var0; - - ballId = gTasks[taskId].data[15]; - if (gTasks[taskId].data[0] < 16) - { - x = gTasks[taskId].data[1]; - y = gTasks[taskId].data[2]; - priority = gTasks[taskId].data[3]; - subpriority = gTasks[taskId].data[4]; - - spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority); - if (spriteId != MAX_SPRITES) - { - sub_8171E20(); - StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]); - gSprites[spriteId].callback = PokeBallOpenParticleAnimation_Step1; - gSprites[spriteId].oam.priority = priority; - - var0 = (u8)gTasks[taskId].data[0]; - if (var0 >= 8) - var0 -= 8; - - gSprites[spriteId].data[0] = var0 * 32; - } - - if (gTasks[taskId].data[0] == 15) - { - if (!gMain.inBattle) - gSprites[spriteId].data[7] = 1; - - DestroyTask(taskId); - return; - } - } - - gTasks[taskId].data[0]++; -} - -static void PokeBallOpenParticleAnimation_Step1(struct Sprite *sprite) -{ - if (sprite->data[1] == 0) - sprite->callback = PokeBallOpenParticleAnimation_Step2; - else - sprite->data[1]--; -} - -static void PokeBallOpenParticleAnimation_Step2(struct Sprite *sprite) -{ - sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]); - sprite->pos2.y = Cos(sprite->data[0], sprite->data[1]); - sprite->data[1] += 2; - if (sprite->data[1] == 50) - DestroyBallOpenAnimationParticle(sprite); -} - -static void TimerBallOpenParticleAnimation(u8 taskId) -{ - u8 i; - u8 x, y, priority, subpriority, ballId; - u8 spriteId; - - ballId = gTasks[taskId].data[15]; - x = gTasks[taskId].data[1]; - y = gTasks[taskId].data[2]; - priority = gTasks[taskId].data[3]; - subpriority = gTasks[taskId].data[4]; - - for (i = 0; i < 8; i++) - { - spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority); - if (spriteId != MAX_SPRITES) - { - sub_8171E20(); - StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]); - gSprites[spriteId].callback = FanOutBallOpenParticles_Step1; - gSprites[spriteId].oam.priority = priority; - gSprites[spriteId].data[0] = i * 32; - gSprites[spriteId].data[4] = 10; - gSprites[spriteId].data[5] = 2; - gSprites[spriteId].data[6] = 1; - } - } - - if (!gMain.inBattle) - gSprites[spriteId].data[7] = 1; - - DestroyTask(taskId); -} - -static void DiveBallOpenParticleAnimation(u8 taskId) -{ - u8 i; - u8 x, y, priority, subpriority, ballId; - u8 spriteId; - - ballId = gTasks[taskId].data[15]; - x = gTasks[taskId].data[1]; - y = gTasks[taskId].data[2]; - priority = gTasks[taskId].data[3]; - subpriority = gTasks[taskId].data[4]; - - for (i = 0; i < 8; i++) - { - spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority); - if (spriteId != MAX_SPRITES) - { - sub_8171E20(); - StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]); - gSprites[spriteId].callback = FanOutBallOpenParticles_Step1; - gSprites[spriteId].oam.priority = priority; - gSprites[spriteId].data[0] = i * 32; - gSprites[spriteId].data[4] = 10; - gSprites[spriteId].data[5] = 1; - gSprites[spriteId].data[6] = 2; - } - } - - if (!gMain.inBattle) - gSprites[spriteId].data[7] = 1; - - DestroyTask(taskId); -} - -// Also used for Net Ball -static void SafariBallOpenParticleAnimation(u8 taskId) -{ - u8 i; - u8 x, y, priority, subpriority, ballId; - u8 spriteId; - - ballId = gTasks[taskId].data[15]; - x = gTasks[taskId].data[1]; - y = gTasks[taskId].data[2]; - priority = gTasks[taskId].data[3]; - subpriority = gTasks[taskId].data[4]; - - for (i = 0; i < 8; i++) - { - spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority); - if (spriteId != MAX_SPRITES) - { - sub_8171E20(); - StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]); - gSprites[spriteId].callback = FanOutBallOpenParticles_Step1; - gSprites[spriteId].oam.priority = priority; - gSprites[spriteId].data[0] = i * 32; - gSprites[spriteId].data[4] = 4; - gSprites[spriteId].data[5] = 1; - gSprites[spriteId].data[6] = 1; - } - } - - if (!gMain.inBattle) - gSprites[spriteId].data[7] = 1; - - DestroyTask(taskId); -} - -// Also used for Nest Ball -static void UltraBallOpenParticleAnimation(u8 taskId) -{ - u8 i; - u8 x, y, priority, subpriority, ballId; - u8 spriteId; - - ballId = gTasks[taskId].data[15]; - x = gTasks[taskId].data[1]; - y = gTasks[taskId].data[2]; - priority = gTasks[taskId].data[3]; - subpriority = gTasks[taskId].data[4]; - - for (i = 0; i < 10; i++) - { - spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority); - if (spriteId != MAX_SPRITES) - { - sub_8171E20(); - StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]); - gSprites[spriteId].callback = FanOutBallOpenParticles_Step1; - gSprites[spriteId].oam.priority = priority; - gSprites[spriteId].data[0] = i * 25; - gSprites[spriteId].data[4] = 5; - gSprites[spriteId].data[5] = 1; - gSprites[spriteId].data[6] = 1; - } - } - - if (!gMain.inBattle) - gSprites[spriteId].data[7] = 1; - - DestroyTask(taskId); -} - -// Also used for Luxury Ball -static void GreatBallOpenParticleAnimation(u8 taskId) -{ - u8 i; - u8 x, y, priority, subpriority, ballId; - u8 spriteId; - - if (gTasks[taskId].data[7]) - { - gTasks[taskId].data[7]--; - } - else - { - ballId = gTasks[taskId].data[15]; - x = gTasks[taskId].data[1]; - y = gTasks[taskId].data[2]; - priority = gTasks[taskId].data[3]; - subpriority = gTasks[taskId].data[4]; - - for (i = 0; i < 8; i++) - { - spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority); - if (spriteId != MAX_SPRITES) - { - sub_8171E20(); - StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]); - gSprites[spriteId].callback = FanOutBallOpenParticles_Step1; - gSprites[spriteId].oam.priority = priority; - gSprites[spriteId].data[0] = i * 32; - gSprites[spriteId].data[4] = 8; - gSprites[spriteId].data[5] = 2; - gSprites[spriteId].data[6] = 2; - } - } - - gTasks[taskId].data[7] = 8; - if (++gTasks[taskId].data[0] == 2) - { - if (!gMain.inBattle) - gSprites[spriteId].data[7] = 1; - - DestroyTask(taskId); - } - } -} - -static void FanOutBallOpenParticles_Step1(struct Sprite *sprite) -{ - sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]); - sprite->pos2.y = Cos(sprite->data[0], sprite->data[2]); - sprite->data[0] = (sprite->data[0] + sprite->data[4]) & 0xFF; - sprite->data[1] += sprite->data[5]; - sprite->data[2] += sprite->data[6]; - if (++sprite->data[3] == 51) - DestroyBallOpenAnimationParticle(sprite); -} - -static void RepeatBallOpenParticleAnimation(u8 taskId) -{ - u8 i; - u8 x, y, priority, subpriority, ballId; - u8 spriteId; - - ballId = gTasks[taskId].data[15]; - x = gTasks[taskId].data[1]; - y = gTasks[taskId].data[2]; - priority = gTasks[taskId].data[3]; - subpriority = gTasks[taskId].data[4]; - - for (i = 0; i < 12; i++) - { - spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority); - if (spriteId != MAX_SPRITES) - { - sub_8171E20(); - StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]); - gSprites[spriteId].callback = RepeatBallOpenParticleAnimation_Step1; - gSprites[spriteId].oam.priority = priority; - gSprites[spriteId].data[0] = i * 21; - } - } - - if (!gMain.inBattle) - gSprites[spriteId].data[7] = 1; - - DestroyTask(taskId); -} - -static void RepeatBallOpenParticleAnimation_Step1(struct Sprite *sprite) -{ - sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]); - sprite->pos2.y = Cos(sprite->data[0], Sin(sprite->data[0], sprite->data[2])); - sprite->data[0] = (sprite->data[0] + 6) & 0xFF; - sprite->data[1]++; - sprite->data[2]++; - if (++sprite->data[3] == 51) - DestroyBallOpenAnimationParticle(sprite); -} - -static void MasterBallOpenParticleAnimation(u8 taskId) -{ - u8 i, j; - u8 x, y, priority, subpriority, ballId; - u8 spriteId; - - ballId = gTasks[taskId].data[15]; - x = gTasks[taskId].data[1]; - y = gTasks[taskId].data[2]; - priority = gTasks[taskId].data[3]; - subpriority = gTasks[taskId].data[4]; - - for (j = 0; j < 2; j++) - { - for (i = 0; i < 8; i++) - { - spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority); - if (spriteId != MAX_SPRITES) - { - sub_8171E20(); - StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]); - gSprites[spriteId].callback = FanOutBallOpenParticles_Step1; - gSprites[spriteId].oam.priority = priority; - gSprites[spriteId].data[0] = i * 32; - gSprites[spriteId].data[4] = 8; - - if (j == 0) - { - gSprites[spriteId].data[5] = 2; - gSprites[spriteId].data[6] = 1; - } - else - { - gSprites[spriteId].data[5] = 1; - gSprites[spriteId].data[6] = 2; - } - } - } - } - - if (!gMain.inBattle) - gSprites[spriteId].data[7] = 1; - - DestroyTask(taskId); -} - -static void PremierBallOpenParticleAnimation(u8 taskId) -{ - u8 i; - u8 x, y, priority, subpriority, ballId; - u8 spriteId; - - ballId = gTasks[taskId].data[15]; - x = gTasks[taskId].data[1]; - y = gTasks[taskId].data[2]; - priority = gTasks[taskId].data[3]; - subpriority = gTasks[taskId].data[4]; - - for (i = 0; i < 8; i++) - { - spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority); - if (spriteId != MAX_SPRITES) - { - sub_8171E20(); - StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]); - gSprites[spriteId].callback = PremierBallOpenParticleAnimation_Step1; - gSprites[spriteId].oam.priority = priority; - gSprites[spriteId].data[0] = i * 32; - } - } - - if (!gMain.inBattle) - gSprites[spriteId].data[7] = 1; - - DestroyTask(taskId); -} - -static void PremierBallOpenParticleAnimation_Step1(struct Sprite *sprite) -{ - sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]); - sprite->pos2.y = Cos(sprite->data[0], Sin(sprite->data[0] & 0x3F, sprite->data[2])); - sprite->data[0] = (sprite->data[0] + 10) & 0xFF; - sprite->data[1]++; - sprite->data[2]++; - if (++sprite->data[3] == 51) - DestroyBallOpenAnimationParticle(sprite); -} - -static void DestroyBallOpenAnimationParticle(struct Sprite *sprite) -{ - int i, j; - int temp; - - if (!gMain.inBattle) - { - temp = sprite->data[7]; // temp var needed to match - if (temp == 1) - DestroySpriteAndFreeResources(sprite); - else - DestroySprite(sprite); - } - else - { - gBattleSpritesDataPtr->animationData->field_A--; - if (gBattleSpritesDataPtr->animationData->field_A == 0) - { - for (i = 0; i < 12; i++) - { - if (FuncIsActiveTask(gBallOpenParticleAnimationFuncs[i]) == TRUE) - break; - } - - if (i == 12) - { - for (j = 0; j < 12; j++) - { - FreeSpriteTilesByTag(gBallOpenParticleSpritesheets[j].tag); - FreeSpritePaletteByTag(gBallOpenParticlePalettes[j].tag); - } - } - - DestroySprite(sprite); - } - else - { - DestroySprite(sprite); - } - } -} - -u8 LaunchBallFadeMonTask(u8 unfadeLater, u8 battler, u32 selectedPalettes, u8 ballId) -{ - u8 taskId; - - taskId = CreateTask(sub_8172AB0, 5); - gTasks[taskId].data[15] = ballId; - gTasks[taskId].data[3] = battler; - gTasks[taskId].data[10] = selectedPalettes; - gTasks[taskId].data[11] = selectedPalettes >> 16; - - if (!unfadeLater) - { - BlendPalette(battler * 16 + 0x100, 16, 0, gUnknown_085E5310[ballId]); - gTasks[taskId].data[1] = 1; - } - else - { - BlendPalette(battler * 16 + 0x100, 16, 16, gUnknown_085E5310[ballId]); - gTasks[taskId].data[0] = 16; - gTasks[taskId].data[1] = -1; - gTasks[taskId].func = sub_8172B40; - } - - BeginNormalPaletteFade(selectedPalettes, 0, 0, 16, RGB(31, 31, 31)); - return taskId; -} - -static void sub_8172AB0(u8 taskId) -{ - u8 ballId = gTasks[taskId].data[15]; - - if (gTasks[taskId].data[2] <= 16) - { - BlendPalette(gTasks[taskId].data[3] * 16 + 0x100, 16, gTasks[taskId].data[0], gUnknown_085E5310[ballId]); - gTasks[taskId].data[0] += gTasks[taskId].data[1]; - gTasks[taskId].data[2]++; - } - else if (!gPaletteFade.active) - { - u32 selectedPalettes = (u16)gTasks[taskId].data[10] | ((u16)gTasks[taskId].data[11] << 16); - BeginNormalPaletteFade(selectedPalettes, 0, 16, 0, RGB(31, 31, 31)); - DestroyTask(taskId); - } -} - -static void sub_8172B40(u8 taskId) -{ - if (!gPaletteFade.active) - { - u32 selectedPalettes = (u16)gTasks[taskId].data[10] | ((u16)gTasks[taskId].data[11] << 16); - BeginNormalPaletteFade(selectedPalettes, 0, 16, 0, RGB(31, 31, 31)); - gTasks[taskId].func = sub_8172B90; - } -} - -static void sub_8172B90(u8 taskId) -{ - u8 ballId = gTasks[taskId].data[15]; - - if (gTasks[taskId].data[2] <= 16) - { - BlendPalette(gTasks[taskId].data[3] * 16 + 0x100, 16, gTasks[taskId].data[0], gUnknown_085E5310[ballId]); - gTasks[taskId].data[0] += gTasks[taskId].data[1]; - gTasks[taskId].data[2]++; - } - else - { - DestroyTask(taskId); - } -} - -void sub_8172BF0(u8 taskId) -{ - u8 spriteId; - u32 x; - u32 done; - - done = FALSE; - spriteId = gBattlerSpriteIds[gBattleAnimAttacker]; - switch (gTasks[taskId].data[10]) - { - case 0: - gTasks[taskId].data[11] = gBattleAnimArgs[0]; - gTasks[taskId].data[0] += 0x500; - if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) - gSprites[spriteId].pos2.x += gTasks[taskId].data[0] >> 8; - else - gSprites[spriteId].pos2.x -= gTasks[taskId].data[0] >> 8; - - gTasks[taskId].data[0] &= 0xFF; - x = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x + 32; - if (x > 304) - gTasks[taskId].data[10]++; - break; - case 1: - LoadBattleMonGfxAndAnimate(gBattleAnimAttacker, gTasks[taskId].data[11], spriteId); - gTasks[taskId].data[10]++; - break; - case 2: - gTasks[taskId].data[0] += 0x500; - if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) - gSprites[spriteId].pos2.x -= gTasks[taskId].data[0] >> 8; - else - gSprites[spriteId].pos2.x += gTasks[taskId].data[0] >> 8; - - gTasks[taskId].data[0] &= 0xFF; - if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) - { - if (gSprites[spriteId].pos2.x <= 0) - { - gSprites[spriteId].pos2.x = 0; - // done = FALSE; // fakematching--can't get the tail merge correct - goto DONE; - } - } - else - { - if (gSprites[spriteId].pos2.x >= 0) - { - gSprites[spriteId].pos2.x = 0; - done = TRUE; - } - } - - if (done) - { - DONE: - DestroyAnimVisualTask(taskId); - } - break; - } -} - -void sub_8172D98(u8 taskId) -{ - u8 spriteId; - - switch (gTasks[taskId].data[15]) - { - case 0: - if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == B_POSITION_OPPONENT_LEFT) - SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); - else - SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); - - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); - gTasks[taskId].data[15]++; - break; - case 1: - if (gTasks[taskId].data[1]++ > 1) - { - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[0]++; - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - gTasks[taskId].data[0], gTasks[taskId].data[0])); - if (gTasks[taskId].data[0] == 16) - gTasks[taskId].data[15]++; - } - break; - case 2: - spriteId = gBattlerSpriteIds[gBattleAnimAttacker]; - RequestDma3Fill(0, (void *)OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * TILE_SIZE_4BPP, 0x800, 1); - ClearBehindSubstituteBit(gBattleAnimAttacker); - DestroyAnimVisualTask(taskId); - break; - } -} - -void sub_8172E9C(u8 taskId) -{ - gBattleAnimArgs[7] = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].behindSubstitute; - DestroyAnimVisualTask(taskId); -} - -void sub_8172ED0(u8 taskId) -{ - gBattleAnimTarget = gEffectBattler; - DestroyAnimVisualTask(taskId); -} - -void sub_8172EF0(u8 battler, struct Pokemon *mon) -{ - int isShiny; - u32 otId, personality; - u32 shinyValue; - u8 taskId1, taskId2; - - isShiny = 0; - gBattleSpritesDataPtr->healthBoxesData[battler].flag_x80 = 1; - otId = GetMonData(mon, MON_DATA_OT_ID); - personality = GetMonData(mon, MON_DATA_PERSONALITY); - - if (IsBattlerSpriteVisible(battler)) - { - shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); - if (shinyValue < 8) - isShiny = TRUE; - - if (isShiny) - { - if (GetSpriteTileStartByTag(0x27F9) == 0xFFFF) - { - LoadCompressedSpriteSheetUsingHeap(&gBattleAnimPicTable[233]); - LoadCompressedSpritePaletteUsingHeap(&gBattleAnimPaletteTable[233]); - } - - taskId1 = CreateTask(sub_8172FEC, 10); - taskId2 = CreateTask(sub_8172FEC, 10); - gTasks[taskId1].data[0] = battler; - gTasks[taskId2].data[0] = battler; - gTasks[taskId1].data[1] = 0; - gTasks[taskId2].data[1] = 1; - return; - } - } - - gBattleSpritesDataPtr->healthBoxesData[battler].field_1_x1 = 1; -} - -static void sub_8172FEC(u8 taskId) -{ - u8 battler; - u8 x, y; - u8 spriteId; - u16 counter; - s16 state; - u8 pan; - - if (gTasks[taskId].data[13] < 60) - { - gTasks[taskId].data[13]++; - return; - } - - if (gBattleSpritesDataPtr->animationData->field_A) - return; - - counter = gTasks[taskId].data[10]++; - if (counter & 3) - return; - - battler = gTasks[taskId].data[0]; - x = GetBattlerSpriteCoord(battler, 0); - y = GetBattlerSpriteCoord(battler, 1); - state = gTasks[taskId].data[11]; - if (state == 0) - { - spriteId = CreateSprite(&gUnknown_085CE388, x, y, 5); - } - else if (state >= 0 && gTasks[taskId].data[11] < 4) - { - spriteId = CreateSprite(&gMiniTwinklingStarSpriteTemplate, x, y, 5); - gSprites[spriteId].oam.tileNum += 4; - } - else - { - spriteId = CreateSprite(&gMiniTwinklingStarSpriteTemplate, x, y, 5); - gSprites[spriteId].oam.tileNum += 5; - } - - if (gTasks[taskId].data[1] == 0) - { - gSprites[spriteId].callback = sub_81731FC; - } - else - { - gSprites[spriteId].callback = sub_8173250; - gSprites[spriteId].pos2.x = -32; - gSprites[spriteId].pos2.y = 32; - gSprites[spriteId].invisible = 1; - if (gTasks[taskId].data[11] == 0) - { - if (GetBattlerSide(battler) == B_SIDE_PLAYER) - pan = 192; - else - pan = 63; - - PlaySE12WithPanning(SE_REAPOKE, pan); - } - } - - gSprites[spriteId].data[0] = taskId; - gTasks[taskId].data[11]++; - if (spriteId != MAX_SPRITES) - gTasks[taskId].data[12]++; - - if (gTasks[taskId].data[11] == 5) - gTasks[taskId].func = sub_81731B0; -} - -static void sub_81731B0(u8 taskId) -{ - u8 battler; - - if (gTasks[taskId].data[12] == 0) - { - if (gTasks[taskId].data[1] == 1) - { - battler = gTasks[taskId].data[0]; - gBattleSpritesDataPtr->healthBoxesData[battler].field_1_x1 = 1; - } - - DestroyTask(taskId); - } -} - -static void sub_81731FC(struct Sprite *sprite) -{ - sprite->pos2.x = Sin(sprite->data[1], 24); - sprite->pos2.y = Cos(sprite->data[1], 24); - sprite->data[1] += 12; - if (sprite->data[1] > 0xFF) - { - gTasks[sprite->data[0]].data[12]--; - FreeSpriteOamMatrix(sprite); - DestroySprite(sprite); - } -} - -static void sub_8173250(struct Sprite *sprite) -{ - if (sprite->data[1] < 4) - { - sprite->data[1]++; - } - else - { - sprite->invisible = 0; - sprite->pos2.x += 5; - sprite->pos2.y -= 5; - if (sprite->pos2.x > 32) - { - gTasks[sprite->data[0]].data[12]--; - FreeSpriteOamMatrix(sprite); - DestroySprite(sprite); - } - } -} - -void sub_81732B0(u8 taskId) -{ - u8 paletteIndex; - - LoadCompressedSpriteSheetUsingHeap(&gBattleAnimPicTable[269]); - LoadCompressedSpritePaletteUsingHeap(&gBattleAnimPaletteTable[269]); - paletteIndex = IndexOfSpritePaletteTag(0x281D); // unused - DestroyAnimVisualTask(taskId); -} - -void sub_81732E4(u8 taskId) -{ - FreeSpriteTilesByTag(0x281D); - FreeSpritePaletteByTag(0x281D); - DestroyAnimVisualTask(taskId); -} - -static void sub_817330C(struct Sprite *sprite) -{ - InitSpritePosToAnimAttacker(sprite, 0); - sprite->data[0] = 30; - sprite->data[2] = GetBattlerSpriteCoord(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), 0) + gBattleAnimArgs[2]; - sprite->data[4] = GetBattlerSpriteCoord(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), 1) + gBattleAnimArgs[3]; - sprite->data[5] = -32; - InitAnimArcTranslation(sprite); - gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].callback = sub_8039E84; - sprite->callback = sub_817339C; -} - -static void sub_817339C(struct Sprite *sprite) -{ - if (gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].animCmdIndex == 1) - sprite->callback = sub_81733D4; -} - -static void sub_81733D4(struct Sprite *sprite) -{ - if (TranslateAnimHorizontalArc(sprite)) - { - sprite->data[0] = 0; - sprite->invisible = 1; - sprite->callback = sub_8173400; - } -} - -static void sub_8173400(struct Sprite *sprite) -{ - if (gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].animEnded) - { - if (++sprite->data[0] > 0) - { - StartSpriteAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], 0); - DestroyAnimSprite(sprite); - } - } -} - -void sub_817345C(u8 taskId) -{ - switch (gBattleAnimArgs[0]) - { - case 0: - gBattleAnimAttacker = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); - gBattleAnimTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - break; - case 1: - gBattleAnimAttacker = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - gBattleAnimTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); - break; - } - - DestroyAnimVisualTask(taskId); -} - -void AnimTask_GetTrappedMoveAnimId(u8 taskId) -{ - if (gBattleSpritesDataPtr->animationData->animArg == 83) - gBattleAnimArgs[0] = 1; - else if (gBattleSpritesDataPtr->animationData->animArg == 250) - gBattleAnimArgs[0] = 2; - else if (gBattleSpritesDataPtr->animationData->animArg == 128) - gBattleAnimArgs[0] = 3; - else if (gBattleSpritesDataPtr->animationData->animArg == 328) - gBattleAnimArgs[0] = 4; - else - gBattleAnimArgs[0] = 0; - - DestroyAnimVisualTask(taskId); -} - -void sub_817351C(u8 taskId) -{ - gBattleAnimAttacker = gBattleSpritesDataPtr->animationData->animArg; - gBattleAnimTarget = gBattleSpritesDataPtr->animationData->animArg >> 8; - DestroyAnimVisualTask(taskId); -} diff --git a/src/battle_anim_mon_movement.c b/src/battle_anim_mon_movement.c new file mode 100644 index 000000000..250a0459f --- /dev/null +++ b/src/battle_anim_mon_movement.c @@ -0,0 +1,1059 @@ +#include "global.h" +#include "battle.h" +#include "battle_anim.h" +#include "sprite.h" +#include "task.h" +#include "trig.h" + +// This file's functions. +void AnimTask_ShakeMonStep(u8 taskId); +void AnimTask_ShakeMon2Step(u8 taskId); +void AnimTask_ShakeMonInPlaceStep(u8 taskId); +void AnimTask_ShakeAndSinkMonStep(u8 taskId); +void sub_80D57B8(u8 taskId); +static void DoHorizontalLunge(struct Sprite *sprite); +static void ReverseHorizontalLungeDirection(struct Sprite *sprite); +static void DoVerticalDip(struct Sprite *sprite); +static void ReverseVerticalDipDirection(struct Sprite* sprite); +static void SlideMonToOriginalPos(struct Sprite *sprite); +static void SlideMonToOriginalPosStep(struct Sprite *sprite); +static void SlideMonToOffset(struct Sprite *sprite); +static void sub_80D5B48(struct Sprite *sprite); +static void sub_80D5C20(struct Sprite *sprite); +void AnimTask_WindUpLungePart1(u8 taskId); +void AnimTask_WindUpLungePart2(u8 taskId); +void AnimTask_SwayMonStep(u8 taskId); +void AnimTask_ScaleMonAndRestoreStep(u8 taskId); +void sub_80D6308(u8 taskId); +void sub_80D646C(u8 taskId); +void sub_80A8B3C(u8 taskId); + +const struct SpriteTemplate gHorizontalLungeSpriteTemplate = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = DoHorizontalLunge, +}; + +const struct SpriteTemplate gVerticalDipSpriteTemplate = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = DoVerticalDip, +}; + +const struct SpriteTemplate gSlideMonToOriginalPosSpriteTemplate = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SlideMonToOriginalPos, +}; + +const struct SpriteTemplate gSlideMonToOffsetSpriteTemplate = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SlideMonToOffset, +}; + +const struct SpriteTemplate gUnknown_0857FE88 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80D5B48, +}; + +// Task to facilitate simple shaking of a pokemon's picture in battle. +// The shaking alternates between the original position and the target position. +// arg 0: anim battler +// arg 1: x pixel offset +// arg 2: y pixel offset +// arg 3: num times to shake +// arg 4: frame delay +void AnimTask_ShakeMon(u8 taskId) +{ + u8 spriteId; + spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + if (spriteId == 0xff) + { + DestroyAnimVisualTask(taskId); + return; + } + gSprites[spriteId].pos2.x = gBattleAnimArgs[1]; + gSprites[spriteId].pos2.y = gBattleAnimArgs[2]; + gTasks[taskId].data[0] = spriteId; + gTasks[taskId].data[1] = gBattleAnimArgs[3]; + gTasks[taskId].data[2] = gBattleAnimArgs[4]; + gTasks[taskId].data[3] = gBattleAnimArgs[4]; + gTasks[taskId].data[4] = gBattleAnimArgs[1]; + gTasks[taskId].data[5] = gBattleAnimArgs[2]; + gTasks[taskId].func = AnimTask_ShakeMonStep; + AnimTask_ShakeMonStep(taskId); +} + +void AnimTask_ShakeMonStep(u8 taskId) +{ + if (gTasks[taskId].data[3] == 0) + { + if (gSprites[gTasks[taskId].data[0]].pos2.x == 0) + { + gSprites[gTasks[taskId].data[0]].pos2.x = gTasks[taskId].data[4]; + } + else + { + gSprites[gTasks[taskId].data[0]].pos2.x = 0; + } + if (gSprites[gTasks[taskId].data[0]].pos2.y == 0) + { + gSprites[gTasks[taskId].data[0]].pos2.y = gTasks[taskId].data[5]; + } + else + { + gSprites[gTasks[taskId].data[0]].pos2.y = 0; + } + gTasks[taskId].data[3] = gTasks[taskId].data[2]; + if (--gTasks[taskId].data[1] == 0) + { + gSprites[gTasks[taskId].data[0]].pos2.x = 0; + gSprites[gTasks[taskId].data[0]].pos2.y = 0; + DestroyAnimVisualTask(taskId); + return; + } + } + else + { + gTasks[taskId].data[3]--; + } +} + +// Task to facilitate simple shaking of a pokemon's picture in battle. +// The shaking alternates between the positive and negative versions of the specified pixel offsets. +// arg 0: anim battler +// arg 1: x pixel offset +// arg 2: y pixel offset +// arg 3: num times to shake +// arg 4: frame delay +void AnimTask_ShakeMon2(u8 taskId) +{ + u8 spriteId; + bool8 destroy = FALSE; + u8 battlerId; + + if (gBattleAnimArgs[0] < 4) + { + spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + if (spriteId == 0xff) + { + DestroyAnimVisualTask(taskId); + return; + } + } + else if (gBattleAnimArgs[0] != 8) + { + switch (gBattleAnimArgs[0]) + { + case 4: + battlerId = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + break; + case 5: + battlerId = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT); + break; + case 6: + battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + break; + case 7: + default: + battlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); + break; + } + + if (IsBattlerSpriteVisible(battlerId) == FALSE) + destroy = TRUE; + + spriteId = gBattlerSpriteIds[battlerId]; + } + else + { + spriteId = gBattlerSpriteIds[gBattleAnimAttacker]; + } + + if (destroy) + { + DestroyAnimVisualTask(taskId); + return; + } + + gSprites[spriteId].pos2.x = gBattleAnimArgs[1]; + gSprites[spriteId].pos2.y = gBattleAnimArgs[2]; + gTasks[taskId].data[0] = spriteId; + gTasks[taskId].data[1] = gBattleAnimArgs[3]; + gTasks[taskId].data[2] = gBattleAnimArgs[4]; + gTasks[taskId].data[3] = gBattleAnimArgs[4]; + gTasks[taskId].data[4] = gBattleAnimArgs[1]; + gTasks[taskId].data[5] = gBattleAnimArgs[2]; + gTasks[taskId].func = AnimTask_ShakeMon2Step; + gTasks[taskId].func(taskId); +} + +void AnimTask_ShakeMon2Step(u8 taskId) +{ + if (gTasks[taskId].data[3] == 0) + { + if (gSprites[gTasks[taskId].data[0]].pos2.x == gTasks[taskId].data[4]) + gSprites[gTasks[taskId].data[0]].pos2.x = -gTasks[taskId].data[4]; + else + gSprites[gTasks[taskId].data[0]].pos2.x = gTasks[taskId].data[4]; + + if (gSprites[gTasks[taskId].data[0]].pos2.y == gTasks[taskId].data[5]) + gSprites[gTasks[taskId].data[0]].pos2.y = -gTasks[taskId].data[5]; + else + gSprites[gTasks[taskId].data[0]].pos2.y = gTasks[taskId].data[5]; + + gTasks[taskId].data[3] = gTasks[taskId].data[2]; + if (--gTasks[taskId].data[1] == 0) + { + gSprites[gTasks[taskId].data[0]].pos2.x = 0; + gSprites[gTasks[taskId].data[0]].pos2.y = 0; + DestroyAnimVisualTask(taskId); + return; + } + } + else + { + gTasks[taskId].data[3]--; + } +} + +// Task to facilitate simple shaking of a pokemon's picture in battle. +// The shaking alternates between the positive and negative versions of the specified pixel offsets +// with respect to the current location of the mon's picture. +// arg 0: battler +// arg 1: x offset +// arg 2: y offset +// arg 3: num shakes +// arg 4: delay +void AnimTask_ShakeMonInPlace(u8 taskId) +{ + u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + if (spriteId == 0xff) + { + DestroyAnimVisualTask(taskId); + return; + } + + gSprites[spriteId].pos2.x += gBattleAnimArgs[1]; + gSprites[spriteId].pos2.y += gBattleAnimArgs[2]; + gTasks[taskId].data[0] = spriteId; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = gBattleAnimArgs[3]; + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[4] = gBattleAnimArgs[4]; + gTasks[taskId].data[5] = gBattleAnimArgs[1] * 2; + gTasks[taskId].data[6] = gBattleAnimArgs[2] * 2; + gTasks[taskId].func = AnimTask_ShakeMonInPlaceStep; + gTasks[taskId].func(taskId); +} + +void AnimTask_ShakeMonInPlaceStep(u8 taskId) +{ + if (gTasks[taskId].data[3] == 0) + { + if (gTasks[taskId].data[1] & 1) + { + gSprites[gTasks[taskId].data[0]].pos2.x += gTasks[taskId].data[5]; + gSprites[gTasks[taskId].data[0]].pos2.y += gTasks[taskId].data[6]; + } + else + { + gSprites[gTasks[taskId].data[0]].pos2.x -= gTasks[taskId].data[5]; + gSprites[gTasks[taskId].data[0]].pos2.y -= gTasks[taskId].data[6]; + } + gTasks[taskId].data[3] = gTasks[taskId].data[4]; + if (++gTasks[taskId].data[1] >= gTasks[taskId].data[2]) + { + if (gTasks[taskId].data[1] & 1) + { + gSprites[gTasks[taskId].data[0]].pos2.x += gTasks[taskId].data[5] / 2; + gSprites[gTasks[taskId].data[0]].pos2.y += gTasks[taskId].data[6] / 2; + } + else + { + gSprites[gTasks[taskId].data[0]].pos2.x -= gTasks[taskId].data[5] / 2; + gSprites[gTasks[taskId].data[0]].pos2.y -= gTasks[taskId].data[6] / 2; + } + DestroyAnimVisualTask(taskId); + return; + } + } + else + { + gTasks[taskId].data[3]--; + } +} + +// Shakes a mon bg horizontally and moves it downward linearly. +// arg 0: battler +// arg 1: x offset +// arg 2: frame delay between each movement +// arg 3: downward speed (subpixel) +// arg 4: duration +void AnimTask_ShakeAndSinkMon(u8 taskId) +{ + u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + gSprites[spriteId].pos2.x = gBattleAnimArgs[1]; + gTasks[taskId].data[0] = spriteId; + gTasks[taskId].data[1] = gBattleAnimArgs[1]; + gTasks[taskId].data[2] = gBattleAnimArgs[2]; + gTasks[taskId].data[3] = gBattleAnimArgs[3]; + gTasks[taskId].data[4] = gBattleAnimArgs[4]; + gTasks[taskId].func = AnimTask_ShakeAndSinkMonStep; + gTasks[taskId].func(taskId); +} + +void AnimTask_ShakeAndSinkMonStep(u8 taskId) +{ + s16 x; + u8 spriteId; + spriteId = gTasks[taskId].data[0]; + x = gTasks[taskId].data[1]; + if (gTasks[taskId].data[2] == gTasks[taskId].data[8]++) + { + gTasks[taskId].data[8] = 0; + if (gSprites[spriteId].pos2.x == x) + x = -x; + + gSprites[spriteId].pos2.x += x; + } + + gTasks[taskId].data[1] = x; + gTasks[taskId].data[9] += gTasks[taskId].data[3]; + gSprites[spriteId].pos2.y = gTasks[taskId].data[9] >> 8; + if (--gTasks[taskId].data[4] == 0) + { + DestroyAnimVisualTask(taskId); + return; + } +} + +// Moves a mon bg picture along an elliptical path that begins +// and ends at the mon's origin location. +// arg 0: battler +// arg 1: ellipse width +// arg 2: ellipse height +// arg 3: num loops +// arg 4: speed (valid values are 0-5) +void AnimTask_TranslateMonElliptical(u8 taskId) +{ + u8 i; + u8 spriteId; + u8 wavePeriod; + + wavePeriod = 1; + spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + if (gBattleAnimArgs[4] > 5) + gBattleAnimArgs[4] = 5; + + for (i = 0; i < gBattleAnimArgs[4]; i++) + { + wavePeriod <<= 1; + } + + gTasks[taskId].data[0] = spriteId; + gTasks[taskId].data[1] = gBattleAnimArgs[1]; + gTasks[taskId].data[2] = gBattleAnimArgs[2]; + gTasks[taskId].data[3] = gBattleAnimArgs[3]; + gTasks[taskId].data[4] = wavePeriod; + gTasks[taskId].func = sub_80D57B8; + gTasks[taskId].func(taskId); +} + +void sub_80D57B8(u8 taskId) +{ + u8 spriteId = gTasks[taskId].data[0]; + gSprites[spriteId].pos2.x = Sin(gTasks[taskId].data[5], gTasks[taskId].data[1]); + gSprites[spriteId].pos2.y = -Cos(gTasks[taskId].data[5], gTasks[taskId].data[2]); + gSprites[spriteId].pos2.y += gTasks[taskId].data[2]; + gTasks[taskId].data[5] += gTasks[taskId].data[4]; + gTasks[taskId].data[5] &= 0xff; + + if (gTasks[taskId].data[5] == 0) + gTasks[taskId].data[3]--; + + if (gTasks[taskId].data[3] == 0) + { + gSprites[spriteId].pos2.x = 0; + gSprites[spriteId].pos2.y = 0; + DestroyAnimVisualTask(taskId); + return; + } +} + +// Moves a mon bg picture along an elliptical path that begins +// and ends at the mon's origin location. Reverses the direction +// of the path if it's not on the player's side of the battle. +// arg 0: battler +// arg 1: ellipse width +// arg 2: ellipse height +// arg 3: num loops +// arg 4: speed (valid values are 0-5) +void AnimTask_TranslateMonEllipticalRespectSide(u8 taskId) +{ + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + + AnimTask_TranslateMonElliptical(taskId); +} + +// Performs a simple horizontal lunge, where the mon moves +// horizontally, and then moves back in the opposite direction. +// arg 0: duration of single lunge direction +// arg 1: x pixel delta that is applied each frame +static void DoHorizontalLunge(struct Sprite *sprite) +{ + sprite->invisible = TRUE; + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + sprite->data[1] = -gBattleAnimArgs[1]; + else + sprite->data[1] = gBattleAnimArgs[1]; + + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[2] = 0; + sprite->data[3] = gBattlerSpriteIds[gBattleAnimAttacker]; + sprite->data[4] = gBattleAnimArgs[0]; + StoreSpriteCallbackInData6(sprite, ReverseHorizontalLungeDirection); + sprite->callback = TranslateMonSpriteLinear; +} + +static void ReverseHorizontalLungeDirection(struct Sprite *sprite) +{ + sprite->data[0] = sprite->data[4]; + sprite->data[1] = -sprite->data[1]; + sprite->callback = TranslateMonSpriteLinear; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +// Performs a simple vertical dipping motion, where moves vertically, and then +// moves back in the opposite direction. +// arg 0: duration of single dip direction +// arg 1: y pixel delta that is applied each frame +// arg 2: battler +static void DoVerticalDip(struct Sprite *sprite) +{ + u8 spriteId; + sprite->invisible = TRUE; + spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[2]); + sprite->data[0] = gBattleAnimArgs[0]; + sprite->data[1] = 0; + sprite->data[2] = gBattleAnimArgs[1]; + sprite->data[3] = spriteId; + sprite->data[4] = gBattleAnimArgs[0]; + StoreSpriteCallbackInData6(sprite, ReverseVerticalDipDirection); + sprite->callback = TranslateMonSpriteLinear; +} + +static void ReverseVerticalDipDirection(struct Sprite *sprite) +{ + sprite->data[0] = sprite->data[4]; + sprite->data[2] = -sprite->data[2]; + sprite->callback = TranslateMonSpriteLinear; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +// Linearly slides a mon's bg picture back to its original sprite position. +// The sprite parameter is a dummy sprite used for facilitating the movement with its callback. +// arg 0: 1 = target or 0 = attacker +// arg 1: direction (0 = horizontal and vertical, 1 = horizontal only, 2 = vertical only) +// arg 2: duration +static void SlideMonToOriginalPos(struct Sprite *sprite) +{ + u32 monSpriteId; + if (!gBattleAnimArgs[0]) + monSpriteId = gBattlerSpriteIds[gBattleAnimAttacker]; + else + monSpriteId = gBattlerSpriteIds[gBattleAnimTarget]; + + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gSprites[monSpriteId].pos1.x + gSprites[monSpriteId].pos2.x; + sprite->data[2] = gSprites[monSpriteId].pos1.x; + sprite->data[3] = gSprites[monSpriteId].pos1.y + gSprites[monSpriteId].pos2.y; + sprite->data[4] = gSprites[monSpriteId].pos1.y; + InitSpriteDataForLinearTranslation(sprite); + sprite->data[3] = 0; + sprite->data[4] = 0; + sprite->data[5] = gSprites[monSpriteId].pos2.x; + sprite->data[6] = gSprites[monSpriteId].pos2.y; + sprite->invisible = TRUE; + + if (gBattleAnimArgs[1] == 1) + sprite->data[2] = 0; + else if (gBattleAnimArgs[1] == 2) + sprite->data[1] = 0; + + sprite->data[7] = gBattleAnimArgs[1]; + sprite->data[7] |= monSpriteId << 8; + sprite->callback = SlideMonToOriginalPosStep; +} + +static void SlideMonToOriginalPosStep(struct Sprite *sprite) +{ + s8 monSpriteId; + u8 lo; + struct Sprite *monSprite; + + lo = sprite->data[7] & 0xff; + monSpriteId = sprite->data[7] >> 8; + monSprite = &gSprites[monSpriteId]; + if (sprite->data[0] == 0) + { + if (lo < 2) + monSprite->pos2.x = 0; + + if (lo == 2 || lo == 0) + monSprite->pos2.y = 0; + + DestroyAnimSprite(sprite); + } + else + { + sprite->data[0]--; + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + monSprite->pos2.x = (s8)(sprite->data[3] >> 8) + sprite->data[5]; + monSprite->pos2.y = (s8)(sprite->data[4] >> 8) + sprite->data[6]; + } +} + +// Linearly translates a mon to a target offset. The horizontal offset +// is mirrored for the opponent's pokemon, and the vertical offset +// is only mirrored if arg 3 is set to 1. +// arg 0: 0 = attacker, 1 = target +// arg 1: target x pixel offset +// arg 2: target y pixel offset +// arg 3: mirror vertical translation for opposite battle side +// arg 4: duration +static void SlideMonToOffset(struct Sprite *sprite) +{ + u8 battler; + u8 monSpriteId; + if (!gBattleAnimArgs[0]) + battler = gBattleAnimAttacker; + else + battler = gBattleAnimTarget; + + monSpriteId = gBattlerSpriteIds[battler]; + if (GetBattlerSide(battler) != B_SIDE_PLAYER) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + if (gBattleAnimArgs[3] == 1) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + } + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = gSprites[monSpriteId].pos1.x; + sprite->data[2] = gSprites[monSpriteId].pos1.x + gBattleAnimArgs[1]; + sprite->data[3] = gSprites[monSpriteId].pos1.y; + sprite->data[4] = gSprites[monSpriteId].pos1.y + gBattleAnimArgs[2]; + InitSpriteDataForLinearTranslation(sprite); + sprite->data[3] = 0; + sprite->data[4] = 0; + sprite->data[5] = monSpriteId; + sprite->invisible = TRUE; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + sprite->callback = TranslateMonSpriteLinearFixedPoint; +} + +static void sub_80D5B48(struct Sprite *sprite) +{ + u8 spriteId; + u8 battlerId; + sprite->invisible = TRUE; + if (!gBattleAnimArgs[0]) + { + battlerId = gBattleAnimAttacker; + } + else + { + battlerId = gBattleAnimTarget; + } + spriteId = gBattlerSpriteIds[battlerId]; + if (GetBattlerSide(battlerId)) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + if (gBattleAnimArgs[3] == 1) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + } + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x; + sprite->data[2] = sprite->data[1] + gBattleAnimArgs[1]; + sprite->data[3] = gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y; + sprite->data[4] = sprite->data[3] + gBattleAnimArgs[2]; + InitSpriteDataForLinearTranslation(sprite); + sprite->data[3] = gSprites[spriteId].pos2.x << 8; + sprite->data[4] = gSprites[spriteId].pos2.y << 8; + sprite->data[5] = spriteId; + sprite->data[6] = gBattleAnimArgs[5]; + if (!gBattleAnimArgs[5]) + { + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); + } + else + { + StoreSpriteCallbackInData6(sprite, sub_80D5C20); + } + sprite->callback = TranslateMonSpriteLinearFixedPoint; +} + + +static void sub_80D5C20(struct Sprite *sprite) +{ + gSprites[sprite->data[5]].pos2.x = 0; + gSprites[sprite->data[5]].pos2.y = 0; + DestroyAnimSprite(sprite); +} + +// Task to facilitate a two-part translation animation, in which the sprite +// is first translated in an arc to one position. Then, it "lunges" to a target +// x offset. Used in TAKE_DOWN, for example. +// arg 0: anim bank +// arg 1: horizontal speed (subpixel) +// arg 2: wave amplitude +// arg 3: first duration +// arg 4: delay before starting lunge +// arg 5: target x offset for lunge +// arg 6: lunge duration +void AnimTask_WindUpLunge(u8 taskId) +{ + s16 wavePeriod = 0x8000 / gBattleAnimArgs[3]; + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[5] = -gBattleAnimArgs[5]; + } + gTasks[taskId].data[0] = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + gTasks[taskId].data[1] = (gBattleAnimArgs[1] << 8) / gBattleAnimArgs[3]; + gTasks[taskId].data[2] = gBattleAnimArgs[2]; + gTasks[taskId].data[3] = gBattleAnimArgs[3]; + gTasks[taskId].data[4] = gBattleAnimArgs[4]; + gTasks[taskId].data[5] = (gBattleAnimArgs[5] << 8) / gBattleAnimArgs[6]; + gTasks[taskId].data[6] = gBattleAnimArgs[6]; + gTasks[taskId].data[7] = wavePeriod; + gTasks[taskId].func = AnimTask_WindUpLungePart1; +} + +void AnimTask_WindUpLungePart1(u8 taskId) +{ + u8 spriteId; + spriteId = gTasks[taskId].data[0]; + gTasks[taskId].data[11] += gTasks[taskId].data[1]; + gSprites[spriteId].pos2.x = gTasks[taskId].data[11] >> 8; + gSprites[spriteId].pos2.y = Sin((u8)(gTasks[taskId].data[10] >> 8), gTasks[taskId].data[2]); + gTasks[taskId].data[10] += gTasks[taskId].data[7]; + if (--gTasks[taskId].data[3] == 0) + { + gTasks[taskId].func = AnimTask_WindUpLungePart2; + } +} + +void AnimTask_WindUpLungePart2(u8 taskId) +{ + u8 spriteId; + if (gTasks[taskId].data[4] > 0) + { + gTasks[taskId].data[4]--; + } + else + { + spriteId = gTasks[taskId].data[0]; + gTasks[taskId].data[12] += gTasks[taskId].data[5]; + gSprites[spriteId].pos2.x = (gTasks[taskId].data[12] >> 8) + (gTasks[taskId].data[11] >> 8); + if (--gTasks[taskId].data[6] == 0) + { + DestroyAnimVisualTask(taskId); + return; + } + } +} + +void sub_80D5DB0(u8 taskId) +{ + u8 spriteId; + switch (gBattleAnimArgs[0]) + { + case 0: + case 1: + spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + break; + case 2: + if (!IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) + { + DestroyAnimVisualTask(taskId); + return; + } + spriteId = gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]; + break; + case 3: + if (!IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget))) + { + DestroyAnimVisualTask(taskId); + return; + } + spriteId = gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimTarget)]; + break; + default: + DestroyAnimVisualTask(taskId); + return; + } + gTasks[taskId].data[0] = spriteId; + if (GetBattlerSide(gBattleAnimTarget) != B_SIDE_PLAYER) + { + gTasks[taskId].data[1] = gBattleAnimArgs[1]; + } + else + { + gTasks[taskId].data[1] = -gBattleAnimArgs[1]; + } + gTasks[taskId].func = sub_80A8B3C; +} + +void sub_80A8B3C(u8 taskId) +{ + u8 spriteId = gTasks[taskId].data[0]; + gSprites[spriteId].pos2.x += gTasks[taskId].data[1]; + if (gSprites[spriteId].pos2.x + gSprites[spriteId].pos1.x + 0x20 > 0x130u) + { + DestroyAnimVisualTask(taskId); + return; + } +} + +// Task that facilitates translating the mon bg picture back and forth +// in a swaying motion (uses Sine wave). It can sway either horizontally +// or vertically, but not both. +// arg 0: direction (0 = horizontal, 1 = vertical) +// arg 1: wave amplitude +// arg 2: wave period +// arg 3: num sways +// arg 4: which mon (0 = attacker, 1`= target) +void AnimTask_SwayMon(u8 taskId) +{ + u8 spriteId; + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + + spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[4]); + gTasks[taskId].data[0] = gBattleAnimArgs[0]; + gTasks[taskId].data[1] = gBattleAnimArgs[1]; + gTasks[taskId].data[2] = gBattleAnimArgs[2]; + gTasks[taskId].data[3] = gBattleAnimArgs[3]; + gTasks[taskId].data[4] = spriteId; + + if (gBattleAnimArgs[4] == 0) + gTasks[taskId].data[5] = gBattleAnimAttacker; + else + gTasks[taskId].data[5] = gBattleAnimTarget; + + gTasks[taskId].data[12] = 1; + gTasks[taskId].func = AnimTask_SwayMonStep; +} + +void AnimTask_SwayMonStep(u8 taskId) +{ + s16 sineValue; + u8 spriteId; + int waveIndex; + u16 sineIndex; + + spriteId = gTasks[taskId].data[4]; + sineIndex = gTasks[taskId].data[10] + gTasks[taskId].data[2]; + gTasks[taskId].data[10] = sineIndex; + waveIndex = sineIndex >> 8; + sineValue = Sin(waveIndex, gTasks[taskId].data[1]); + + if (gTasks[taskId].data[0] == 0) + { + gSprites[spriteId].pos2.x = sineValue; + } + else + { + if (GetBattlerSide(gTasks[taskId].data[5]) == B_SIDE_PLAYER) + { + gSprites[spriteId].pos2.y = (sineValue >= 0) ? sineValue : -sineValue; + } + else + { + gSprites[spriteId].pos2.y = (sineValue >= 0) ? -sineValue : sineValue; + } + } + + if (((waveIndex >= 0x80u) && (gTasks[taskId].data[11] == 0) && (gTasks[taskId].data[12] == 1)) + || ((waveIndex < 0x7fu) && (gTasks[taskId].data[11] == 1) && (gTasks[taskId].data[12] == 0))) + { + gTasks[taskId].data[11] ^= 1; + gTasks[taskId].data[12] ^= 1; + if (--gTasks[taskId].data[3] == 0) + { + gSprites[spriteId].pos2.x = 0; + gSprites[spriteId].pos2.y = 0; + DestroyAnimVisualTask(taskId); + return; + } + } +} + +// Scales a mon's sprite, and then scales back to its original dimensions. +// arg 0: x scale delta +// arg 1: y scale delta +// arg 2: duration +// arg 3: anim bank +// arg 4: sprite object mode +void AnimTask_ScaleMonAndRestore(u8 taskId) +{ + u8 spriteId; + spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[3]); + PrepareBattlerSpriteForRotScale(spriteId, gBattleAnimArgs[4]); + gTasks[taskId].data[0] = gBattleAnimArgs[0]; + gTasks[taskId].data[1] = gBattleAnimArgs[1]; + gTasks[taskId].data[2] = gBattleAnimArgs[2]; + gTasks[taskId].data[3] = gBattleAnimArgs[2]; + gTasks[taskId].data[4] = spriteId; + gTasks[taskId].data[10] = 0x100; + gTasks[taskId].data[11] = 0x100; + gTasks[taskId].func = AnimTask_ScaleMonAndRestoreStep; +} + +void AnimTask_ScaleMonAndRestoreStep(u8 taskId) +{ + u8 spriteId; + gTasks[taskId].data[10] += gTasks[taskId].data[0]; + gTasks[taskId].data[11] += gTasks[taskId].data[1]; + spriteId = gTasks[taskId].data[4]; + SetSpriteRotScale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[11], 0); + if (--gTasks[taskId].data[2] == 0) + { + if (gTasks[taskId].data[3] > 0) + { + gTasks[taskId].data[0] = -gTasks[taskId].data[0]; + gTasks[taskId].data[1] = -gTasks[taskId].data[1]; + gTasks[taskId].data[2] = gTasks[taskId].data[3]; + gTasks[taskId].data[3] = 0; + } + else + { + ResetSpriteRotScale(spriteId); + DestroyAnimVisualTask(taskId); + return; + } + } +} + +void sub_80D6134(u8 taskId) +{ + u8 spriteId; + spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[2]); + PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = gBattleAnimArgs[0]; + if (gBattleAnimArgs[3] != 1) + { + gTasks[taskId].data[3] = 0; + } + else + { + gTasks[taskId].data[3] = gBattleAnimArgs[0] * gBattleAnimArgs[1]; + } + gTasks[taskId].data[4] = gBattleAnimArgs[1]; + gTasks[taskId].data[5] = spriteId; + gTasks[taskId].data[6] = gBattleAnimArgs[3]; + if (IsContest()) + { + gTasks[taskId].data[7] = 1; + } + else + { + if (gBattleAnimArgs[2] == 0) + { + gTasks[taskId].data[7] = !GetBattlerSide(gBattleAnimAttacker); + } + else + { + gTasks[taskId].data[7] = !GetBattlerSide(gBattleAnimTarget); + } + } + if (gTasks[taskId].data[7]) + { + if (!IsContest()) + { + gTasks[taskId].data[3] *= -1; + gTasks[taskId].data[4] *= -1; + } + } + gTasks[taskId].func = sub_80D6308; +} + +void sub_80D622C(u8 taskId) +{ + u8 spriteId; + spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[2]); + PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = gBattleAnimArgs[0]; + if (gBattleAnimArgs[2] == 0) + { + if (GetBattlerSide(gBattleAnimAttacker)) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + } + } + else + { + if (GetBattlerSide(gBattleAnimTarget)) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + } + } + if (gBattleAnimArgs[3] != 1) + { + gTasks[taskId].data[3] = 0; + } + else + { + gTasks[taskId].data[3] = gBattleAnimArgs[0] * gBattleAnimArgs[1]; + } + gTasks[taskId].data[4] = gBattleAnimArgs[1]; + gTasks[taskId].data[5] = spriteId; + gTasks[taskId].data[6] = gBattleAnimArgs[3]; + gTasks[taskId].data[7] = 1; + gTasks[taskId].data[3] *= -1; + gTasks[taskId].data[4] *= -1; + gTasks[taskId].func = sub_80D6308; +} + +void sub_80D6308(u8 taskId) +{ + gTasks[taskId].data[3] += gTasks[taskId].data[4]; + SetSpriteRotScale(gTasks[taskId].data[5], 0x100, 0x100, gTasks[taskId].data[3]); + if (gTasks[taskId].data[7]) + { + SetBattlerSpriteYOffsetFromRotation(gTasks[taskId].data[5]); + } + if (++gTasks[taskId].data[1] >= gTasks[taskId].data[2]) + { + switch (gTasks[taskId].data[6]) + { + case 1: + ResetSpriteRotScale(gTasks[taskId].data[5]); + case 0: + default: + DestroyAnimVisualTask(taskId); + return; + case 2: + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[4] *= -1; + gTasks[taskId].data[6] = 1; + break; + } + } +} + +void sub_80D6388(u8 taskId) +{ + if (!gBattleAnimArgs[0]) + { + gTasks[taskId].data[15] = gAnimMovePower / 12; + if (gTasks[taskId].data[15] < 1) + { + gTasks[taskId].data[15] = 1; + } + if (gTasks[taskId].data[15] > 16) + { + gTasks[taskId].data[15] = 16; + } + } + else + { + gTasks[taskId].data[15] = gAnimMoveDmg / 12; + if (gTasks[taskId].data[15] < 1) + { + gTasks[taskId].data[15] = 1; + } + if (gTasks[taskId].data[15] > 16) + { + gTasks[taskId].data[15] = 16; + } + } + gTasks[taskId].data[14] = gTasks[taskId].data[15] / 2; + gTasks[taskId].data[13] = gTasks[taskId].data[14] + (gTasks[taskId].data[15] & 1); + gTasks[taskId].data[12] = 0; + gTasks[taskId].data[10] = gBattleAnimArgs[3]; + gTasks[taskId].data[11] = gBattleAnimArgs[4]; + gTasks[taskId].data[7] = GetAnimBattlerSpriteId(1); + gTasks[taskId].data[8] = gSprites[gTasks[taskId].data[7]].pos2.x; + gTasks[taskId].data[9] = gSprites[gTasks[taskId].data[7]].pos2.y; + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = gBattleAnimArgs[1]; + gTasks[taskId].data[2] = gBattleAnimArgs[2]; + gTasks[taskId].func = sub_80D646C; +} + +void sub_80D646C(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + if (++task->data[0] > task->data[1]) + { + task->data[0] = 0; + task->data[12] = (task->data[12] + 1) & 1; + if (task->data[10]) + { + if (task->data[12]) + { + gSprites[task->data[7]].pos2.x = task->data[8] + task->data[13]; + } + else + { + gSprites[task->data[7]].pos2.x = task->data[8] - task->data[14]; + } + } + if (task->data[11]) + { + if (task->data[12]) + { + gSprites[task->data[7]].pos2.y = task->data[15]; + } + else + { + gSprites[task->data[7]].pos2.y = 0; + } + } + if (!--task->data[2]) + { + gSprites[task->data[7]].pos2.x = 0; + gSprites[task->data[7]].pos2.y = 0; + DestroyAnimVisualTask(taskId); + return; + } + } +} diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c new file mode 100644 index 000000000..372377a0c --- /dev/null +++ b/src/battle_anim_mons.c @@ -0,0 +1,2464 @@ +#include "global.h" +#include "battle.h" +#include "battle_anim.h" +#include "bg.h" +#include "contest.h" +#include "data2.h" +#include "decompress.h" +#include "dma3.h" +#include "gpu_regs.h" +#include "alloc.h" +#include "palette.h" +#include "pokemon_icon.h" +#include "sprite.h" +#include "task.h" +#include "trig.h" +#include "util.h" +#include "constants/battle_anim.h" +#include "constants/species.h" + +#define GET_UNOWN_LETTER(personality) (( \ + (((personality & 0x03000000) >> 24) << 6) \ + | (((personality & 0x00030000) >> 16) << 4) \ + | (((personality & 0x00000300) >> 8) << 2) \ + | (((personality & 0x00000003) >> 0) << 0) \ +) % 28) + +#define IS_DOUBLE_BATTLE() ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + +extern const struct OamData gUnknown_0852497C; +extern const struct MonCoords gMonFrontPicCoords[]; +extern const struct MonCoords gMonBackPicCoords[]; +extern const u8 gEnemyMonElevation[]; +extern const struct CompressedSpriteSheet gMonFrontPicTable[]; +extern const union AffineAnimCmd *gUnknown_082FF6C0[]; + +static void sub_80A6FB4(struct Sprite *sprite); +static void sub_80A7144(struct Sprite *sprite); +static void sub_80A791C(struct Sprite *sprite); +static void sub_80A8DFC(struct Sprite *sprite); +static void sub_80A8E88(struct Sprite *sprite); +static u16 GetBattlerYDeltaFromSpriteId(u8 spriteId); +static void AnimTask_BlendMonInAndOutSetup(struct Task *task); +static void sub_80A7AFC(u8 taskId); +static void sub_80A8CAC(u8 taskId); +static void AnimTask_BlendMonInAndOutStep(u8 taskId); +static bool8 sub_80A7238(void); +static void sub_80A8D78(struct Task *task, u8 taskId); + +// EWRAM vars +EWRAM_DATA static union AffineAnimCmd *gAnimTaskAffineAnim = NULL; + +// Const rom data +static const struct UCoords8 sBattlerCoords[][4] = +{ + { + { 72, 80 }, + { 176, 40 }, + { 48, 40 }, + { 112, 80 }, + }, + { + { 32, 80 }, + { 200, 40 }, + { 90, 88 }, + { 152, 32 }, + }, +}; + +// One entry for each of the four Castform forms. +const struct MonCoords gCastformFrontSpriteCoords[] = +{ + { .size = 0x44, .y_offset = 17 }, // NORMAL + { .size = 0x66, .y_offset = 9 }, // SUN + { .size = 0x46, .y_offset = 9 }, // RAIN + { .size = 0x86, .y_offset = 8 }, // HAIL +}; + +static const u8 sCastformElevations[] = +{ + 13, // NORMAL + 14, // SUN + 13, // RAIN + 13, // HAIL +}; + +// Y position of the backsprite for each of the four Castform forms. +static const u8 sCastformBackSpriteYCoords[] = +{ + 0, // NORMAL + 0, // SUN + 0, // RAIN + 0, // HAIL +}; + +static const struct SpriteTemplate sUnknown_08525F90[] = +{ + { + .tileTag = 55125, + .paletteTag = 55125, + .oam = &gUnknown_0852497C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 55126, + .paletteTag = 55126, + .oam = &gUnknown_0852497C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + } +}; + +static const struct SpriteSheet sUnknown_08525FC0[] = +{ + { gMiscBlank_Gfx, 0x800, 55125, }, + { gMiscBlank_Gfx, 0x800, 55126, }, +}; + +u8 GetBattlerSpriteCoord(u8 battlerId, u8 coordType) +{ + u8 retVal; + u16 species; + struct BattleSpriteInfo *spriteInfo; + + if (IsContest()) + { + if (coordType == BATTLER_COORD_Y_PIC_OFFSET && battlerId == 3) + coordType = BATTLER_COORD_Y; + } + + switch (coordType) + { + case BATTLER_COORD_X: + case BATTLER_COORD_X_2: + retVal = sBattlerCoords[IS_DOUBLE_BATTLE()][GetBattlerPosition(battlerId)].x; + break; + case BATTLER_COORD_Y: + retVal = sBattlerCoords[IS_DOUBLE_BATTLE()][GetBattlerPosition(battlerId)].y; + break; + case BATTLER_COORD_Y_PIC_OFFSET: + case BATTLER_COORD_Y_PIC_OFFSET_DEFAULT: + default: + if (IsContest()) + { + if (gContestResources->field_18->unk4_0) + species = gContestResources->field_18->unk2; + else + species = gContestResources->field_18->species; + } + else + { + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + { + spriteInfo = gBattleSpritesDataPtr->battlerData; + if (!spriteInfo[battlerId].transformSpecies) + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + else + species = spriteInfo[battlerId].transformSpecies; + } + else + { + spriteInfo = gBattleSpritesDataPtr->battlerData; + if (!spriteInfo[battlerId].transformSpecies) + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + else + species = spriteInfo[battlerId].transformSpecies; + } + } + if (coordType == BATTLER_COORD_Y_PIC_OFFSET) + retVal = GetBattlerSpriteFinal_Y(battlerId, species, TRUE); + else + retVal = GetBattlerSpriteFinal_Y(battlerId, species, FALSE); + break; + } + + return retVal; +} + +u8 GetBattlerYDelta(u8 battlerId, u16 species) +{ + u16 letter; + u32 personality; + struct BattleSpriteInfo *spriteInfo; + u8 ret; + u16 coordSpecies; + + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER || IsContest()) + { + if (species == SPECIES_UNOWN) + { + if (IsContest()) + { + if (gContestResources->field_18->unk4_0) + personality = gContestResources->field_18->unk10; + else + personality = gContestResources->field_18->unk8; + } + else + { + spriteInfo = gBattleSpritesDataPtr->battlerData; + if (!spriteInfo[battlerId].transformSpecies) + personality = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PERSONALITY); + else + personality = gTransformedPersonalities[battlerId]; + } + letter = GET_UNOWN_LETTER(personality); + if (!letter) + coordSpecies = species; + else + coordSpecies = letter + SPECIES_UNOWN_B - 1; + ret = gMonBackPicCoords[coordSpecies].y_offset; + } + else if (species == SPECIES_CASTFORM) + { + ret = sCastformBackSpriteYCoords[gBattleMonForms[battlerId]]; + } + else if (species > NUM_SPECIES) + { + ret = gMonBackPicCoords[0].y_offset; + } + else + { + ret = gMonBackPicCoords[species].y_offset; + } + } + else + { + if (species == SPECIES_UNOWN) + { + spriteInfo = gBattleSpritesDataPtr->battlerData; + if (!spriteInfo[battlerId].transformSpecies) + personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PERSONALITY); + else + personality = gTransformedPersonalities[battlerId]; + letter = GET_UNOWN_LETTER(personality); + if (!letter) + coordSpecies = species; + else + coordSpecies = letter + SPECIES_UNOWN_B - 1; + ret = gMonFrontPicCoords[coordSpecies].y_offset; + } + else if (species == SPECIES_CASTFORM) + { + ret = gCastformFrontSpriteCoords[gBattleMonForms[battlerId]].y_offset; + } + else if (species > NUM_SPECIES) + { + ret = gMonFrontPicCoords[0].y_offset; + } + else + { + ret = gMonFrontPicCoords[species].y_offset; + } + } + return ret; +} + +u8 GetBattlerElevation(u8 battlerId, u16 species) +{ + u8 ret = 0; + if (GetBattlerSide(battlerId) == B_SIDE_OPPONENT) + { + if (!IsContest()) + { + if (species == SPECIES_CASTFORM) + ret = sCastformElevations[gBattleMonForms[battlerId]]; + else if (species > NUM_SPECIES) + ret = gEnemyMonElevation[0]; + else + ret = gEnemyMonElevation[species]; + } + } + return ret; +} + +u8 GetBattlerSpriteFinal_Y(u8 battlerId, u16 species, bool8 a3) +{ + u16 offset; + u8 y; + + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER || IsContest()) + { + offset = GetBattlerYDelta(battlerId, species); + } + else + { + offset = GetBattlerYDelta(battlerId, species); + offset -= GetBattlerElevation(battlerId, species); + } + y = offset + sBattlerCoords[IS_DOUBLE_BATTLE()][GetBattlerPosition(battlerId)].y; + if (a3) + { + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) + y += 8; + if (y > 104) + y = 104; + } + return y; +} + +u8 GetBattlerSpriteCoord2(u8 battlerId, u8 coordType) +{ + u16 species; + struct BattleSpriteInfo *spriteInfo; + + if (coordType == BATTLER_COORD_Y_PIC_OFFSET || coordType == BATTLER_COORD_Y_PIC_OFFSET_DEFAULT) + { + if (IsContest()) + { + if (gContestResources->field_18->unk4_0) + species = gContestResources->field_18->unk2; + else + species = gContestResources->field_18->species; + } + else + { + spriteInfo = gBattleSpritesDataPtr->battlerData; + if (!spriteInfo[battlerId].transformSpecies) + species = gAnimBattlerSpecies[battlerId]; + else + species = spriteInfo[battlerId].transformSpecies; + } + if (coordType == BATTLER_COORD_Y_PIC_OFFSET) + return GetBattlerSpriteFinal_Y(battlerId, species, TRUE); + else + return GetBattlerSpriteFinal_Y(battlerId, species, FALSE); + } + else + { + return GetBattlerSpriteCoord(battlerId, coordType); + } +} + +u8 GetBattlerSpriteDefault_Y(u8 battlerId) +{ + return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET_DEFAULT); +} + +u8 GetSubstituteSpriteDefault_Y(u8 battlerId) +{ + u16 y; + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + y = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 16; + else + y = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 17; + return y; +} + +u8 GetBattlerYCoordWithElevation(u8 battlerId) +{ + u16 species; + u8 y; + struct BattleSpriteInfo *spriteInfo; + + y = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y); + if (!IsContest()) + { + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + { + spriteInfo = gBattleSpritesDataPtr->battlerData; + if (!spriteInfo[battlerId].transformSpecies) + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + else + species = spriteInfo[battlerId].transformSpecies; + } + else + { + spriteInfo = gBattleSpritesDataPtr->battlerData; + if (!spriteInfo[battlerId].transformSpecies) + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + else + species = spriteInfo[battlerId].transformSpecies; + } + if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + y -= GetBattlerElevation(battlerId, species); + } + return y; +} + +u8 GetAnimBattlerSpriteId(u8 animBattler) +{ + u8 *sprites; + + if (animBattler == ANIM_ATTACKER) + { + if (IsBattlerSpritePresent(gBattleAnimAttacker)) + { + sprites = gBattlerSpriteIds; + return sprites[gBattleAnimAttacker]; + } + else + { + return 0xff; + } + } + else if (animBattler == ANIM_TARGET) + { + if (IsBattlerSpritePresent(gBattleAnimTarget)) + { + sprites = gBattlerSpriteIds; + return sprites[gBattleAnimTarget]; + } + else + { + return 0xff; + } + } + else if (animBattler == ANIM_ATK_PARTNER) + { + if (!IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) + return 0xff; + else + return gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]; + } + else + { + if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget))) + return gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimTarget)]; + else + return 0xff; + } +} + +void StoreSpriteCallbackInData6(struct Sprite *sprite, void (*callback)(struct Sprite*)) +{ + sprite->data[6] = (u32)(callback) & 0xffff; + sprite->data[7] = (u32)(callback) >> 16; +} + +void SetCallbackToStoredInData6(struct Sprite *sprite) +{ + u32 callback = (u16)sprite->data[6] | (sprite->data[7] << 16); + sprite->callback = (void (*)(struct Sprite *))callback; +} + +void TranslateSpriteInCircleOverDuration(struct Sprite *sprite) +{ + if (sprite->data[3]) + { + sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]); + sprite->pos2.y = Cos(sprite->data[0], sprite->data[1]); + sprite->data[0] += sprite->data[2]; + if (sprite->data[0] >= 0x100) + sprite->data[0] -= 0x100; + else if (sprite->data[0] < 0) + sprite->data[0] += 0x100; + sprite->data[3]--; + } + else + { + SetCallbackToStoredInData6(sprite); + } +} + +void TranslateSpriteInGrowingCircleOverDuration(struct Sprite *sprite) +{ + if (sprite->data[3]) + { + sprite->pos2.x = Sin(sprite->data[0], (sprite->data[5] >> 8) + sprite->data[1]); + sprite->pos2.y = Cos(sprite->data[0], (sprite->data[5] >> 8) + sprite->data[1]); + sprite->data[0] += sprite->data[2]; + sprite->data[5] += sprite->data[4]; + if (sprite->data[0] >= 0x100) + sprite->data[0] -= 0x100; + else if (sprite->data[0] < 0) + sprite->data[0] += 0x100; + sprite->data[3]--; + } + else + { + SetCallbackToStoredInData6(sprite); + } +} + +void sub_80A63C8(struct Sprite *sprite) +{ + if (sprite->data[3]) + { + sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]); + sprite->pos2.y = Cos(sprite->data[4], sprite->data[1]); + sprite->data[0] += sprite->data[2]; + sprite->data[4] += sprite->data[5]; + if (sprite->data[0] >= 0x100) + sprite->data[0] -= 0x100; + else if (sprite->data[0] < 0) + sprite->data[0] += 0x100; + if (sprite->data[4] >= 0x100) + sprite->data[4] -= 0x100; + else if (sprite->data[4] < 0) + sprite->data[4] += 0x100; + sprite->data[3]--; + } + else + { + SetCallbackToStoredInData6(sprite); + } +} + +void TranslateSpriteInEllipseOverDuration(struct Sprite *sprite) +{ + if (sprite->data[3]) + { + sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]); + sprite->pos2.y = Cos(sprite->data[0], sprite->data[4]); + sprite->data[0] += sprite->data[2]; + if (sprite->data[0] >= 0x100) + sprite->data[0] -= 0x100; + else if (sprite->data[0] < 0) + sprite->data[0] += 0x100; + sprite->data[3]--; + } + else + { + SetCallbackToStoredInData6(sprite); + } +} + +// Simply waits until the sprite's data[0] hits zero. +// This is used to let sprite anims or affine anims to run for a designated +// duration. +void WaitAnimForDuration(struct Sprite *sprite) +{ + if (sprite->data[0] > 0) + sprite->data[0]--; + else + SetCallbackToStoredInData6(sprite); +} + +static void sub_80A64D0(struct Sprite *sprite) +{ + sub_80A64EC(sprite); + sprite->callback = TranslateSpriteLinear; + sprite->callback(sprite); +} + +void sub_80A64EC(struct Sprite *sprite) +{ + s16 old; + int xDiff; + + if (sprite->data[1] > sprite->data[2]) + sprite->data[0] = -sprite->data[0]; + xDiff = sprite->data[2] - sprite->data[1]; + old = sprite->data[0]; + sprite->data[0] = abs(xDiff / sprite->data[0]); + sprite->data[2] = (sprite->data[4] - sprite->data[3]) / sprite->data[0]; + sprite->data[1] = old; +} + +void TranslateSpriteLinear(struct Sprite *sprite) +{ + if (sprite->data[0] > 0) + { + sprite->data[0]--; + sprite->pos2.x += sprite->data[1]; + sprite->pos2.y += sprite->data[2]; + } + else + { + SetCallbackToStoredInData6(sprite); + } +} + +void TranslateSpriteLinearFixedPoint(struct Sprite *sprite) +{ + if (sprite->data[0] > 0) + { + sprite->data[0]--; + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + sprite->pos2.x = sprite->data[3] >> 8; + sprite->pos2.y = sprite->data[4] >> 8; + } + else + { + SetCallbackToStoredInData6(sprite); + } +} + +static void TranslateSpriteLinearFixedPointIconFrame(struct Sprite *sprite) +{ + if (sprite->data[0] > 0) + { + sprite->data[0]--; + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + sprite->pos2.x = sprite->data[3] >> 8; + sprite->pos2.y = sprite->data[4] >> 8; + } + else + { + SetCallbackToStoredInData6(sprite); + } + + UpdateMonIconFrame(sprite); +} + +void sub_80A65EC(struct Sprite *sprite) +{ + sprite->data[1] = sprite->pos1.x + sprite->pos2.x; + sprite->data[3] = sprite->pos1.y + sprite->pos2.y; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET); + sprite->callback = sub_80A64D0; +} + +void TranslateMonSpriteLinear(struct Sprite *sprite) +{ + if (sprite->data[0] > 0) + { + sprite->data[0]--; + gSprites[sprite->data[3]].pos2.x += sprite->data[1]; + gSprites[sprite->data[3]].pos2.y += sprite->data[2]; + } + else + { + SetCallbackToStoredInData6(sprite); + } +} + +void TranslateMonSpriteLinearFixedPoint(struct Sprite *sprite) +{ + if (sprite->data[0] > 0) + { + sprite->data[0]--; + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + gSprites[sprite->data[5]].pos2.x = sprite->data[3] >> 8; + gSprites[sprite->data[5]].pos2.y = sprite->data[4] >> 8; + } + else + { + SetCallbackToStoredInData6(sprite); + } +} + +void TranslateSpriteLinearAndFlicker(struct Sprite *sprite) +{ + if (sprite->data[0] > 0) + { + sprite->data[0]--; + sprite->pos2.x = sprite->data[2] >> 8; + sprite->data[2] += sprite->data[1]; + sprite->pos2.y = sprite->data[4] >> 8; + sprite->data[4] += sprite->data[3]; + if (sprite->data[0] % sprite->data[5] == 0) + { + if (sprite->data[5]) + sprite->invisible ^= 1; + } + } + else + { + SetCallbackToStoredInData6(sprite); + } +} + +void DestroySpriteAndMatrix(struct Sprite *sprite) +{ + FreeSpriteOamMatrix(sprite); + DestroyAnimSprite(sprite); +} + +void sub_80A6760(struct Sprite *sprite) +{ + sprite->data[1] = sprite->pos1.x + sprite->pos2.x; + sprite->data[3] = sprite->pos1.y + sprite->pos2.y; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + sprite->callback = sub_80A64D0; +} + +void sub_80A67A4(struct Sprite *sprite) +{ + ResetPaletteStructByUid(sprite->data[5]); + DestroySpriteAndMatrix(sprite); +} + +void RunStoredCallbackWhenAffineAnimEnds(struct Sprite *sprite) +{ + if (sprite->affineAnimEnded) + SetCallbackToStoredInData6(sprite); +} + +void RunStoredCallbackWhenAnimEnds(struct Sprite *sprite) +{ + if (sprite->animEnded) + SetCallbackToStoredInData6(sprite); +} + +void DestroyAnimSpriteAndDisableBlend(struct Sprite *sprite) +{ + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + DestroyAnimSprite(sprite); +} + +void DestroyAnimVisualTaskAndDisableBlend(u8 taskId) +{ + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + DestroyAnimVisualTask(taskId); +} + +void SetSpriteCoordsToAnimAttackerCoords(struct Sprite *sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); +} + +// Sets the initial x offset of the anim sprite depending on the horizontal orientation +// of the two involved mons. +void SetAnimSpriteInitialXOffset(struct Sprite *sprite, s16 xOffset) +{ + u16 attackerX = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X); + u16 targetX = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); + + if (attackerX > targetX) + { + sprite->pos1.x -= xOffset; + } + else if (attackerX < targetX) + { + sprite->pos1.x += xOffset; + } + else + { + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + sprite->pos1.x -= xOffset; + else + sprite->pos1.x += xOffset; + } +} + +void InitAnimArcTranslation(struct Sprite *sprite) +{ + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + InitAnimLinearTranslation(sprite); + sprite->data[6] = 0x8000 / sprite->data[0]; + sprite->data[7] = 0; +} + +bool8 TranslateAnimHorizontalArc(struct Sprite *sprite) +{ + if (AnimTranslateLinear(sprite)) + return TRUE; + sprite->data[7] += sprite->data[6]; + sprite->pos2.y += Sin((u8)(sprite->data[7] >> 8), sprite->data[5]); + return FALSE; +} + +bool8 TranslateAnimVerticalArc(struct Sprite *sprite) +{ + if (AnimTranslateLinear(sprite)) + return TRUE; + sprite->data[7] += sprite->data[6]; + sprite->pos2.x += Sin((u8)(sprite->data[7] >> 8), sprite->data[5]); + return FALSE; +} + +void SetSpritePrimaryCoordsFromSecondaryCoords(struct Sprite *sprite) +{ + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; +} + +void InitSpritePosToAnimTarget(struct Sprite *sprite, bool8 respectMonPicOffsets) +{ + // Battle anim sprites are automatically created at the anim target's center, which + // is why there is no else clause for the "respectMonPicOffsets" check. + if (!respectMonPicOffsets) + { + sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_X); + sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimTarget, BATTLER_COORD_Y); + } + SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; +} + +void InitSpritePosToAnimAttacker(struct Sprite *sprite, bool8 respectMonPicOffsets) +{ + if (!respectMonPicOffsets) + { + sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_X); + sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_Y); + } + else + { + sprite->pos1.x = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord2(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + } + SetAnimSpriteInitialXOffset(sprite, gBattleAnimArgs[0]); + sprite->pos1.y += gBattleAnimArgs[1]; +} + +u8 GetBattlerSide(u8 battlerId) +{ + return GET_BATTLER_SIDE2(battlerId); +} + +u8 GetBattlerPosition(u8 battlerId) +{ + return GET_BATTLER_POSITION(battlerId); +} + +u8 GetBattlerAtPosition(u8 position) +{ + u8 i; + + for (i = 0; i < gBattlersCount; i++) + { + if (gBattlerPositions[i] == position) + break; + } + return i; +} + +bool8 IsBattlerSpritePresent(u8 battlerId) +{ + if (IsContest()) + { + if (gBattleAnimAttacker == battlerId) + return TRUE; + else if (gBattleAnimTarget == battlerId) + return TRUE; + else + return FALSE; + } + else + { + if (gBattlerPositions[battlerId] == 0xff) + { + return FALSE; + } + else if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) + { + if (GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_HP) != 0) + return TRUE; + } + else + { + if (GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_HP) != 0) + return TRUE; + } + } + return FALSE; +} + +bool8 IsDoubleBattle(void) +{ + return IS_DOUBLE_BATTLE(); +} + +void sub_80A6B30(struct BattleAnimBgData *unk) +{ + if (IsContest()) + { + unk->bgTiles = gUnknown_0202305C; + unk->bgTilemap = (u16 *)gUnknown_02023060; + unk->paletteId = 14; + unk->bgId = 1; + unk->tilesOffset = 0; + unk->unused = 0; + } + else + { + unk->bgTiles = gUnknown_0202305C; + unk->bgTilemap = (u16 *)gUnknown_02023060; + unk->paletteId = 8; + unk->bgId = 1; + unk->tilesOffset = 0x200; + unk->unused = 0; + } +} + +void sub_80A6B90(struct BattleAnimBgData *unk, u32 arg1) +{ + if (IsContest()) + { + unk->bgTiles = gUnknown_0202305C; + unk->bgTilemap = (u16 *)gUnknown_02023060; + unk->paletteId = 14; + unk->bgId = 1; + unk->tilesOffset = 0; + unk->unused = 0; + } + else if (arg1 == 1) + { + sub_80A6B30(unk); + } + else + { + unk->bgTiles = gUnknown_0202305C; + unk->bgTilemap = (u16 *)gUnknown_02023060; + unk->paletteId = 9; + unk->bgId = 2; + unk->tilesOffset = 0x300; + unk->unused = 0; + } +} + +void sub_80A6BFC(struct BattleAnimBgData *unk, u8 unused) +{ + unk->bgTiles = gUnknown_0202305C; + unk->bgTilemap = (u16 *)gUnknown_02023060; + if (IsContest()) + { + unk->paletteId = 14; + unk->bgId = 1; + unk->tilesOffset = 0; + unk->unused = 0; + } + else if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1) + { + unk->paletteId = 8; + unk->bgId = 1; + unk->tilesOffset = 0x200; + unk->unused = 0; + } + else + { + unk->paletteId = 9; + unk->bgId = 2; + unk->tilesOffset = 0x300; + unk->unused = 0; + } +} + +void sub_80A6C68(u32 bgId) +{ + struct BattleAnimBgData unkStruct; + + sub_80A6B90(&unkStruct, bgId); + CpuFill32(0, unkStruct.bgTiles, 0x2000); + LoadBgTiles(unkStruct.bgId, unkStruct.bgTiles, 0x2000, unkStruct.tilesOffset); + FillBgTilemapBufferRect(unkStruct.bgId, 0, 0, 0, 32, 64, 17); + CopyBgTilemapBufferToVram(unkStruct.bgId); +} + +void AnimLoadCompressedBgGfx(u32 bgId, const u32 *src, u32 tilesOffset) +{ + CpuFill32(0, gUnknown_0202305C, 0x2000); + LZDecompressWram(src, gUnknown_0202305C); + LoadBgTiles(bgId, gUnknown_0202305C, 0x2000, tilesOffset); +} + +static void InitAnimBgTilemapBuffer(u32 bgId, const void *src) +{ + FillBgTilemapBufferRect(bgId, 0, 0, 0, 32, 64, 17); + CopyToBgTilemapBuffer(bgId, src, 0, 0); +} + +void AnimLoadCompressedBgTilemap(u32 bgId, const void *src) +{ + InitAnimBgTilemapBuffer(bgId, src); + CopyBgTilemapBufferToVram(bgId); +} + +void sub_80A6D60(struct BattleAnimBgData *unk, const void *src, u32 arg2) +{ + InitAnimBgTilemapBuffer(unk->bgId, src); + if (IsContest() == TRUE) + sub_80A4720(unk->paletteId, unk->bgTilemap, 0, arg2); + CopyBgTilemapBufferToVram(unk->bgId); +} + +u8 sub_80A6D94(void) +{ + if (IsContest()) + return 1; + else + return 2; +} + +void sub_80A6DAC(bool8 arg0) +{ + if (!arg0 || IsContest()) + { + SetAnimBgAttribute(3, BG_ANIM_SCREEN_SIZE, 0); + SetAnimBgAttribute(3, BG_ANIM_AREA_OVERFLOW_MODE, 1); + } + else + { + SetAnimBgAttribute(3, BG_ANIM_SCREEN_SIZE, 1); + SetAnimBgAttribute(3, BG_ANIM_AREA_OVERFLOW_MODE, 0); + } +} + +void sub_80A6DEC(struct Sprite *sprite) +{ + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + InitSpriteDataForLinearTranslation(sprite); + sprite->callback = TranslateSpriteLinearFixedPointIconFrame; + sprite->callback(sprite); +} + +void InitSpriteDataForLinearTranslation(struct Sprite *sprite) +{ + s16 x = (sprite->data[2] - sprite->data[1]) << 8; + s16 y = (sprite->data[4] - sprite->data[3]) << 8; + sprite->data[1] = x / sprite->data[0]; + sprite->data[2] = y / sprite->data[0]; + sprite->data[4] = 0; + sprite->data[3] = 0; +} + +void InitAnimLinearTranslation(struct Sprite *sprite) +{ + int x = sprite->data[2] - sprite->data[1]; + int y = sprite->data[4] - sprite->data[3]; + bool8 movingLeft = x < 0; + bool8 movingUp = y < 0; + u16 xDelta = abs(x) << 8; + u16 yDelta = abs(y) << 8; + + xDelta = xDelta / sprite->data[0]; + yDelta = yDelta / sprite->data[0]; + + if (movingLeft) + xDelta |= 1; + else + xDelta &= ~1; + + if (movingUp) + yDelta |= 1; + else + yDelta &= ~1; + + sprite->data[1] = xDelta; + sprite->data[2] = yDelta; + sprite->data[4] = 0; + sprite->data[3] = 0; +} + +void StartAnimLinearTranslation(struct Sprite *sprite) +{ + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + InitAnimLinearTranslation(sprite); + sprite->callback = sub_80A6F98; + sprite->callback(sprite); +} + +void sub_80A6F14(struct Sprite *sprite) +{ + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + InitAnimLinearTranslation(sprite); + sprite->callback = sub_80A6FB4; + sprite->callback(sprite); +} + +bool8 AnimTranslateLinear(struct Sprite *sprite) +{ + u16 v1, v2, x, y; + + if (!sprite->data[0]) + return TRUE; + + v1 = sprite->data[1]; + v2 = sprite->data[2]; + x = sprite->data[3]; + y = sprite->data[4]; + x += v1; + y += v2; + + if (v1 & 1) + sprite->pos2.x = -(x >> 8); + else + sprite->pos2.x = x >> 8; + + if (v2 & 1) + sprite->pos2.y = -(y >> 8); + else + sprite->pos2.y = y >> 8; + + sprite->data[3] = x; + sprite->data[4] = y; + sprite->data[0]--; + return FALSE; +} + +void sub_80A6F98(struct Sprite *sprite) +{ + if (AnimTranslateLinear(sprite)) + SetCallbackToStoredInData6(sprite); +} + +static void sub_80A6FB4(struct Sprite *sprite) +{ + sub_8039E9C(sprite); + if (AnimTranslateLinear(sprite)) + SetCallbackToStoredInData6(sprite); +} + +void sub_80A6FD4(struct Sprite *sprite) +{ + int v1 = abs(sprite->data[2] - sprite->data[1]) << 8; + sprite->data[0] = v1 / sprite->data[0]; + InitAnimLinearTranslation(sprite); +} + +void sub_80A7000(struct Sprite *sprite) +{ + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + sub_80A6FD4(sprite); + sprite->callback = sub_80A6F98; + sprite->callback(sprite); +} + +static void InitAnimFastLinearTranslation(struct Sprite *sprite) +{ + int xDiff = sprite->data[2] - sprite->data[1]; + int yDiff = sprite->data[4] - sprite->data[3]; + bool8 x_sign = xDiff < 0; + bool8 y_sign = yDiff < 0; + u16 x2 = abs(xDiff) << 4; + u16 y2 = abs(yDiff) << 4; + + x2 /= sprite->data[0]; + y2 /= sprite->data[0]; + + if (x_sign) + x2 |= 1; + else + x2 &= ~1; + + if (y_sign) + y2 |= 1; + else + y2 &= ~1; + + sprite->data[1] = x2; + sprite->data[2] = y2; + sprite->data[4] = 0; + sprite->data[3] = 0; +} + +void InitAndRunAnimFastLinearTranslation(struct Sprite *sprite) +{ + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + InitAnimFastLinearTranslation(sprite); + sprite->callback = sub_80A7144; + sprite->callback(sprite); +} + +bool8 AnimFastTranslateLinear(struct Sprite *sprite) +{ + u16 v1, v2, x, y; + + if (!sprite->data[0]) + return TRUE; + + v1 = sprite->data[1]; + v2 = sprite->data[2]; + x = sprite->data[3]; + y = sprite->data[4]; + x += v1; + y += v2; + + if (v1 & 1) + sprite->pos2.x = -(x >> 4); + else + sprite->pos2.x = x >> 4; + + if (v2 & 1) + sprite->pos2.y = -(y >> 4); + else + sprite->pos2.y = y >> 4; + + sprite->data[3] = x; + sprite->data[4] = y; + sprite->data[0]--; + return FALSE; +} + +static void sub_80A7144(struct Sprite *sprite) +{ + if (AnimFastTranslateLinear(sprite)) + SetCallbackToStoredInData6(sprite); +} + +void InitAnimFastLinearTranslationWithSpeed(struct Sprite *sprite) +{ + int xDiff = abs(sprite->data[2] - sprite->data[1]) << 4; + sprite->data[0] = xDiff / sprite->data[0]; + InitAnimFastLinearTranslation(sprite); +} + +void sub_80A718C(struct Sprite *sprite) +{ + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + InitAnimFastLinearTranslationWithSpeed(sprite); + sprite->callback = sub_80A7144; + sprite->callback(sprite); +} + +void SetSpriteRotScale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation) +{ + int i; + struct ObjAffineSrcData src; + struct OamMatrix matrix; + + src.xScale = xScale; + src.yScale = yScale; + src.rotation = rotation; + if (sub_80A7238()) + src.xScale = -src.xScale; + i = gSprites[spriteId].oam.matrixNum; + ObjAffineSet(&src, &matrix, 1, 2); + gOamMatrices[i].a = matrix.a; + gOamMatrices[i].b = matrix.b; + gOamMatrices[i].c = matrix.c; + gOamMatrices[i].d = matrix.d; +} + +static bool8 sub_80A7238(void) +{ + if (IsContest()) + { + if (gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)].data[2] == SPECIES_UNOWN) + return FALSE; + else + return TRUE; + } + else + { + return FALSE; + } +} + +void PrepareBattlerSpriteForRotScale(u8 spriteId, u8 objMode) +{ + u8 battlerId = gSprites[spriteId].data[0]; + + if (IsContest() || IsBattlerSpriteVisible(battlerId)) + gSprites[spriteId].invisible = FALSE; + gSprites[spriteId].oam.objMode = objMode; + gSprites[spriteId].affineAnimPaused = TRUE; + if (!IsContest() && !gSprites[spriteId].oam.affineMode) + gSprites[spriteId].oam.matrixNum = gBattleSpritesDataPtr->healthBoxesData[battlerId].matrixNum; + gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE; + CalcCenterToCornerVec(&gSprites[spriteId], gSprites[spriteId].oam.shape, gSprites[spriteId].oam.size, gSprites[spriteId].oam.affineMode); +} + +void ResetSpriteRotScale(u8 spriteId) +{ + SetSpriteRotScale(spriteId, 0x100, 0x100, 0); + gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_NORMAL; + gSprites[spriteId].oam.objMode = 0; + gSprites[spriteId].affineAnimPaused = FALSE; + CalcCenterToCornerVec(&gSprites[spriteId], gSprites[spriteId].oam.shape, gSprites[spriteId].oam.size, gSprites[spriteId].oam.affineMode); +} + +// Sets the sprite's y offset equal to the y displacement caused by the +// matrix's rotation. +void SetBattlerSpriteYOffsetFromRotation(u8 spriteId) +{ + u16 matrixNum = gSprites[spriteId].oam.matrixNum; + // The "c" component of the battler sprite matrix contains the sine of the rotation angle divided by some scale amount. + s16 c = gOamMatrices[matrixNum].c; + if (c < 0) + c = -c; + + gSprites[spriteId].pos2.y = c >> 3; +} + +void TrySetSpriteRotScale(struct Sprite *sprite, bool8 recalcCenterVector, s16 xScale, s16 yScale, u16 rotation) +{ + int i; + struct ObjAffineSrcData src; + struct OamMatrix matrix; + + if (sprite->oam.affineMode & 1) + { + sprite->affineAnimPaused = TRUE; + if (recalcCenterVector) + CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); + src.xScale = xScale; + src.yScale = yScale; + src.rotation = rotation; + if (sub_80A7238()) + src.xScale = -src.xScale; + i = sprite->oam.matrixNum; + ObjAffineSet(&src, &matrix, 1, 2); + gOamMatrices[i].a = matrix.a; + gOamMatrices[i].b = matrix.b; + gOamMatrices[i].c = matrix.c; + gOamMatrices[i].d = matrix.d; + } +} + +void sub_80A749C(struct Sprite *sprite) +{ + TrySetSpriteRotScale(sprite, TRUE, 0x100, 0x100, 0); + sprite->affineAnimPaused = FALSE; + CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, sprite->oam.affineMode); +} + +static u16 ArcTan2_(s16 a, s16 b) +{ + return ArcTan2(a, b); +} + +u16 ArcTan2Neg(s16 a, s16 b) +{ + u16 var = ArcTan2_(a, b); + return -var; +} + +void SetGreyscaleOrOriginalPalette(u16 paletteNum, bool8 restoreOriginalColor) +{ + int i; + struct PlttData *originalColor; + struct PlttData *destColor; + u16 average; + + paletteNum *= 16; + + if (!restoreOriginalColor) + { + for (i = 0; i < 16; i++) + { + originalColor = (struct PlttData *)&gPlttBufferUnfaded[paletteNum + i]; + average = originalColor->r + originalColor->g + originalColor->b; + average /= 3; + + destColor = (struct PlttData *)&gPlttBufferFaded[paletteNum + i]; + destColor->r = average; + destColor->g = average; + destColor->b = average; + } + } + else + { + CpuCopy32(&gPlttBufferUnfaded[paletteNum], &gPlttBufferFaded[paletteNum], 32); + } +} + +u32 sub_80A75AC(u8 battleBackground, u8 attacker, u8 target, u8 attackerPartner, u8 targetPartner, u8 a6, u8 a7) +{ + u32 selectedPalettes = 0; + u32 shift; + + if (battleBackground) + { + if (!IsContest()) + selectedPalettes = 0xe; + else + selectedPalettes = 1 << sub_80A6D94(); + } + if (attacker) + { + shift = gBattleAnimAttacker + 16; + selectedPalettes |= 1 << shift; + } + if (target) + { + shift = gBattleAnimTarget + 16; + selectedPalettes |= 1 << shift; + } + if (attackerPartner) + { + if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) + { + shift = BATTLE_PARTNER(gBattleAnimAttacker) + 16; + selectedPalettes |= 1 << shift; + } + } + if (targetPartner) + { + if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget))) + { + shift = BATTLE_PARTNER(gBattleAnimTarget) + 16; + selectedPalettes |= 1 << shift; + } + } + if (a6) + { + if (!IsContest()) + selectedPalettes |= 0x100; + else + selectedPalettes |= 0x4000; + } + if (a7) + { + if (!IsContest()) + selectedPalettes |= 0x200; + } + return selectedPalettes; +} + +u32 sub_80A76C4(u8 a1, u8 a2, u8 a3, u8 a4) +{ + u32 var = 0; + u32 shift; + + if (IsContest()) + { + if (a1) + { + var |= 1 << 18; + return var; + } + } + else + { + if (a1) + { + if (IsBattlerSpriteVisible(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT))) + { + var |= 1 << (GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) + 16); + } + } + if (a2) + { + if (IsBattlerSpriteVisible(GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT))) + { + shift = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT) + 16; + var |= 1 << shift; + } + } + if (a3) + { + if (IsBattlerSpriteVisible(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))) + { + shift = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT) + 16; + var |= 1 << shift; + } + } + if (a4) + { + if (IsBattlerSpriteVisible(GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT))) + { + shift = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT) + 16; + var |= 1 << shift; + } + } + } + return var; +} + +u8 sub_80A77AC(u8 a1) +{ + return a1; +} + +static u8 GetBattlerAtPosition_(u8 position) +{ + return GetBattlerAtPosition(position); +} + +void sub_80A77C8(struct Sprite *sprite) +{ + bool8 var; + + if (!sprite->data[0]) + { + if (!gBattleAnimArgs[3]) + var = TRUE; + else + var = FALSE; + if (!gBattleAnimArgs[2]) + InitSpritePosToAnimAttacker(sprite, var); + else + InitSpritePosToAnimTarget(sprite, var); + sprite->data[0]++; + + } + else if (sprite->animEnded || sprite->affineAnimEnded) + { + DestroySpriteAndMatrix(sprite); + } +} + +// Linearly translates a sprite to a target position on the +// other mon's sprite. +// arg 0: initial x offset +// arg 1: initial y offset +// arg 2: target x offset +// arg 3: target y offset +// arg 4: duration +// arg 5: lower 8 bits = location on attacking mon, upper 8 bits = location on target mon pick to target +void TranslateAnimSpriteToTargetMonLocation(struct Sprite *sprite) +{ + bool8 v1; + u8 coordType; + + if (!(gBattleAnimArgs[5] & 0xff00)) + v1 = TRUE; + else + v1 = FALSE; + + if (!(gBattleAnimArgs[5] & 0xff)) + coordType = BATTLER_COORD_Y_PIC_OFFSET; + else + coordType = BATTLER_COORD_Y; + + InitSpritePosToAnimAttacker(sprite, v1); + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, coordType) + gBattleAnimArgs[3]; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +void sub_80A78AC(struct Sprite *sprite) +{ + InitSpritePosToAnimAttacker(sprite, 1); + if (GetBattlerSide(gBattleAnimAttacker)) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) + gBattleAnimArgs[3]; + sprite->data[5] = gBattleAnimArgs[5]; + InitAnimArcTranslation(sprite); + sprite->callback = sub_80A791C; +} + +static void sub_80A791C(struct Sprite *sprite) +{ + if (TranslateAnimHorizontalArc(sprite)) + DestroyAnimSprite(sprite); +} + +void sub_80A7938(struct Sprite *sprite) +{ + bool8 r4; + u8 battlerId, coordType; + + if (!gBattleAnimArgs[6]) + { + r4 = TRUE; + coordType = BATTLER_COORD_Y_PIC_OFFSET; + } + else + { + r4 = FALSE; + coordType = BATTLER_COORD_Y; + } + if (!gBattleAnimArgs[5]) + { + InitSpritePosToAnimAttacker(sprite, r4); + battlerId = gBattleAnimAttacker; + } + else + { + InitSpritePosToAnimTarget(sprite, r4); + battlerId = gBattleAnimTarget; + } + if (GetBattlerSide(gBattleAnimAttacker)) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + InitSpritePosToAnimTarget(sprite, r4); + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(battlerId, coordType) + gBattleAnimArgs[3]; + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +s16 CloneBattlerSpriteWithBlend(u8 animBattler) +{ + u16 i; + u8 spriteId = GetAnimBattlerSpriteId(animBattler); + + if (spriteId != 0xFF) + { + for (i = 0; i < MAX_SPRITES; i++) + { + if (!gSprites[i].inUse) + { + gSprites[i] = gSprites[spriteId]; + gSprites[i].oam.objMode = ST_OAM_OBJ_BLEND; + gSprites[i].invisible = FALSE; + return i; + } + } + } + return -1; +} + +void obj_delete_but_dont_free_vram(struct Sprite *sprite) +{ + sprite->usingSheet = TRUE; + DestroySprite(sprite); +} + +void sub_80A7A74(u8 taskId) +{ + s16 v1 = 0; + s16 v2 = 0; + + if (gBattleAnimArgs[2] > gBattleAnimArgs[0]) + v2 = 1; + if (gBattleAnimArgs[2] < gBattleAnimArgs[0]) + v2 = -1; + if (gBattleAnimArgs[3] > gBattleAnimArgs[1]) + v1 = 1; + if (gBattleAnimArgs[3] < gBattleAnimArgs[1]) + v1 = -1; + + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = gBattleAnimArgs[4]; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = gBattleAnimArgs[0]; + gTasks[taskId].data[4] = gBattleAnimArgs[1]; + gTasks[taskId].data[5] = v2; + gTasks[taskId].data[6] = v1; + gTasks[taskId].data[7] = gBattleAnimArgs[2]; + gTasks[taskId].data[8] = gBattleAnimArgs[3]; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gBattleAnimArgs[0], gBattleAnimArgs[1])); + gTasks[taskId].func = sub_80A7AFC; +} + +static void sub_80A7AFC(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (++task->data[0] > task->data[1]) + { + task->data[0] = 0; + if (++task->data[2] & 1) + { + if (task->data[3] != task->data[7]) + task->data[3] += task->data[5]; + } + else + { + if (task->data[4] != task->data[8]) + task->data[4] += task->data[6]; + } + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[3], task->data[4])); + if (task->data[3] == task->data[7] && task->data[4] == task->data[8]) + { + DestroyAnimVisualTask(taskId); + return; + } + } +} + +// Linearly blends a mon's sprite colors with a target color with increasing +// strength, and then blends out to the original color. +// arg 0: anim bank +// arg 1: blend color +// arg 2: target blend coefficient +// arg 3: initial delay +// arg 4: number of times to blend in and out +void AnimTask_BlendMonInAndOut(u8 task) +{ + u8 spriteId = GetAnimBattlerSpriteId(gBattleAnimArgs[0]); + if (spriteId == 0xff) + { + DestroyAnimVisualTask(task); + return; + } + gTasks[task].data[0] = (gSprites[spriteId].oam.paletteNum * 0x10) + 0x101; + AnimTask_BlendMonInAndOutSetup(&gTasks[task]); +} + +static void AnimTask_BlendMonInAndOutSetup(struct Task *task) +{ + task->data[1] = gBattleAnimArgs[1]; + task->data[2] = 0; + task->data[3] = gBattleAnimArgs[2]; + task->data[4] = 0; + task->data[5] = gBattleAnimArgs[3]; + task->data[6] = 0; + task->data[7] = gBattleAnimArgs[4]; + task->func = AnimTask_BlendMonInAndOutStep; +} + +static void AnimTask_BlendMonInAndOutStep(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (++task->data[4] >= task->data[5]) + { + task->data[4] = 0; + if (!task->data[6]) + { + task->data[2]++; + BlendPalette(task->data[0], 15, task->data[2], task->data[1]); + if (task->data[2] == task->data[3]) + task->data[6] = 1; + } + else + { + task->data[2]--; + BlendPalette(task->data[0], 15, task->data[2], task->data[1]); + if (!task->data[2]) + { + if (--task->data[7]) + { + task->data[4] = 0; + task->data[6] = 0; + } + else + { + DestroyAnimVisualTask(taskId); + return; + } + } + } + } +} + +void sub_80A7CB4(u8 task) +{ + u8 palette = IndexOfSpritePaletteTag(gBattleAnimArgs[0]); + + if (palette == 0xff) + { + DestroyAnimVisualTask(task); + return; + } + gTasks[task].data[0] = (palette * 0x10) + 0x101; + AnimTask_BlendMonInAndOutSetup(&gTasks[task]); +} + +void PrepareAffineAnimInTaskData(struct Task *task, u8 spriteId, const union AffineAnimCmd *affineAnimCmds) +{ + task->data[7] = 0; + task->data[8] = 0; + task->data[9] = 0; + task->data[15] = spriteId; + task->data[10] = 0x100; + task->data[11] = 0x100; + task->data[12] = 0; + StorePointerInVars(&task->data[13], &task->data[14], affineAnimCmds); + PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); +} + +bool8 RunAffineAnimFromTaskData(struct Task *task) +{ + gAnimTaskAffineAnim = LoadPointerFromVars(task->data[13], task->data[14]) + (task->data[7] << 3); + switch (gAnimTaskAffineAnim->type) + { + default: + if (!gAnimTaskAffineAnim->frame.duration) + { + task->data[10] = gAnimTaskAffineAnim->frame.xScale; + task->data[11] = gAnimTaskAffineAnim->frame.yScale; + task->data[12] = gAnimTaskAffineAnim->frame.rotation; + task->data[7]++; + gAnimTaskAffineAnim++; + } + task->data[10] += gAnimTaskAffineAnim->frame.xScale; + task->data[11] += gAnimTaskAffineAnim->frame.yScale; + task->data[12] += gAnimTaskAffineAnim->frame.rotation; + SetSpriteRotScale(task->data[15], task->data[10], task->data[11], task->data[12]); + SetBattlerSpriteYOffsetFromYScale(task->data[15]); + if (++task->data[8] >= gAnimTaskAffineAnim->frame.duration) + { + task->data[8] = 0; + task->data[7]++; + } + break; + case AFFINEANIMCMDTYPE_JUMP: + task->data[7] = gAnimTaskAffineAnim->jump.target; + break; + case AFFINEANIMCMDTYPE_LOOP: + if (gAnimTaskAffineAnim->loop.count) + { + if (task->data[9]) + { + if (!--task->data[9]) + { + task->data[7]++; + break; + } + } + else + { + task->data[9] = gAnimTaskAffineAnim->loop.count; + } + if (!task->data[7]) + { + break; + } + for (;;) + { + task->data[7]--; + gAnimTaskAffineAnim--; + if (gAnimTaskAffineAnim->type == AFFINEANIMCMDTYPE_LOOP) + { + task->data[7]++; + return TRUE; + } + if (!task->data[7]) + return TRUE; + } + } + task->data[7]++; + break; + case AFFINEANIMCMDTYPE_END: + gSprites[task->data[15]].pos2.y = 0; + ResetSpriteRotScale(task->data[15]); + return FALSE; + } + + return TRUE; +} + +// Sets the sprite's y offset equal to the y displacement caused by the +// matrix's scale in the y dimension. +void SetBattlerSpriteYOffsetFromYScale(u8 spriteId) +{ + int var = 64 - GetBattlerYDeltaFromSpriteId(spriteId) * 2; + u16 matrix = gSprites[spriteId].oam.matrixNum; + int var2 = (var << 8) / gOamMatrices[matrix].d; + + if (var2 > 128) + var2 = 128; + gSprites[spriteId].pos2.y = (var - var2) / 2; +} + +// Sets the sprite's y offset equal to the y displacement caused by another sprite +// matrix's scale in the y dimension. +void SetBattlerSpriteYOffsetFromOtherYScale(u8 spriteId, u8 otherSpriteId) +{ + int var = 64 - GetBattlerYDeltaFromSpriteId(otherSpriteId) * 2; + u16 matrix = gSprites[spriteId].oam.matrixNum; + int var2 = (var << 8) / gOamMatrices[matrix].d; + + if (var2 > 128) + var2 = 128; + gSprites[spriteId].pos2.y = (var - var2) / 2; +} + +static u16 GetBattlerYDeltaFromSpriteId(u8 spriteId) +{ + struct BattleSpriteInfo *spriteInfo; + u8 battlerId = gSprites[spriteId].data[0]; + u16 species; + u16 i; + + for (i = 0; i < MAX_BATTLERS_COUNT; i++) + { + if (gBattlerSpriteIds[i] == spriteId) + { + if (IsContest()) + { + species = gContestResources->field_18->species; + return gMonBackPicCoords[species].y_offset; + } + else + { + if (GetBattlerSide(i) == B_SIDE_PLAYER) + { + spriteInfo = gBattleSpritesDataPtr->battlerData; + if (!spriteInfo[battlerId].transformSpecies) + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES); + else + species = spriteInfo[battlerId].transformSpecies; + + if (species == SPECIES_CASTFORM) + return sCastformBackSpriteYCoords[gBattleMonForms[battlerId]]; + else + return gMonBackPicCoords[species].y_offset; + } + else + { + spriteInfo = gBattleSpritesDataPtr->battlerData; + if (!spriteInfo[battlerId].transformSpecies) + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES); + else + species = spriteInfo[battlerId].transformSpecies; + + if (species == SPECIES_CASTFORM) + return sCastformElevations[gBattleMonForms[battlerId]]; + else + return gMonFrontPicCoords[species].y_offset; + } + } + } + } + return 64; +} + +void StorePointerInVars(s16 *lo, s16 *hi, const void *ptr) +{ + *lo = ((intptr_t) ptr) & 0xffff; + *hi = (((intptr_t) ptr) >> 16) & 0xffff; +} + +void *LoadPointerFromVars(s16 lo, s16 hi) +{ + return (void *)((u16)lo | ((u16)hi << 16)); +} + +void sub_80A805C(struct Task *task, u8 a2, s16 a3, s16 a4, s16 a5, s16 a6, u16 a7) +{ + task->data[8] = a7; + task->data[15] = a2; // spriteId + task->data[9] = a3; + task->data[10] = a4; + task->data[13] = a5; + task->data[14] = a6; + task->data[11] = (a5 - a3) / a7; + task->data[12] = (a6 - a4) / a7; +} + +u8 sub_80A80C8(struct Task *task) +{ + if (!task->data[8]) + return 0; + + if (--task->data[8] != 0) + { + task->data[9] += task->data[11]; + task->data[10] += task->data[12]; + } + else + { + task->data[9] = task->data[13]; + task->data[10] = task->data[14]; + } + SetSpriteRotScale(task->data[15], task->data[9], task->data[10], 0); + if (task->data[8]) + SetBattlerSpriteYOffsetFromYScale(task->data[15]); + else + gSprites[task->data[15]].pos2.y = 0; + return task->data[8]; +} + +void AnimTask_GetFrustrationPowerLevel(u8 taskId) +{ + u16 powerLevel; + + if (gAnimFriendship <= 30) + powerLevel = 0; + else if (gAnimFriendship <= 100) + powerLevel = 1; + else if (gAnimFriendship <= 200) + powerLevel = 2; + else + powerLevel = 3; + gBattleAnimArgs[7] = powerLevel; + DestroyAnimVisualTask(taskId); +} + +void sub_80A8174(u8 priority) +{ + if (IsBattlerSpriteVisible(gBattleAnimTarget)) + gSprites[gBattlerSpriteIds[gBattleAnimTarget]].oam.priority = priority; + if (IsBattlerSpriteVisible(gBattleAnimAttacker)) + gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].oam.priority = priority; + if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimTarget))) + gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimTarget)]].oam.priority = priority; + if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) + gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]].oam.priority = priority; +} + +void sub_80A8278(void) +{ + int i; + + for (i = 0; i < gBattlersCount; i++) + { + if (IsBattlerSpriteVisible(i)) + { + gSprites[gBattlerSpriteIds[i]].subpriority = GetBattlerSpriteSubpriority(i); + gSprites[gBattlerSpriteIds[i]].oam.priority = 2; + } + } +} + +u8 GetBattlerSpriteSubpriority(u8 battlerId) +{ + u8 position; + u8 subpriority; + + if (IsContest()) + { + if (battlerId == 2) + return 30; + else + return 40; + } + else + { + position = GetBattlerPosition(battlerId); + if (position == B_POSITION_PLAYER_LEFT) + subpriority = 30; + else if (position == B_POSITION_PLAYER_RIGHT) + subpriority = 20; + else if (position == B_POSITION_OPPONENT_LEFT) + subpriority = 40; + else + subpriority = 50; + } + + return subpriority; +} + +u8 GetBattlerSpriteBGPriority(u8 battlerId) +{ + u8 position = GetBattlerPosition(battlerId); + + if (IsContest()) + return 2; + else if (position == B_POSITION_PLAYER_LEFT || position == B_POSITION_OPPONENT_RIGHT) + return GetAnimBgAttribute(2, BG_ANIM_PRIORITY); + else + return GetAnimBgAttribute(1, BG_ANIM_PRIORITY); +} + +u8 GetBattlerSpriteBGPriorityRank(u8 battlerId) +{ + if (!IsContest()) + { + u8 position = GetBattlerPosition(battlerId); + if (position == B_POSITION_PLAYER_LEFT || position == B_POSITION_OPPONENT_RIGHT) + return 2; + else + return 1; + } + return 1; +} + +u8 sub_80A8394(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority, u32 personality, u32 trainerId, u32 battlerId, u32 a10) +{ + u8 spriteId; + u16 sheet = LoadSpriteSheet(&sUnknown_08525FC0[a3]); + u16 palette = AllocSpritePalette(sUnknown_08525F90[a3].paletteTag); + + if (gMonSpritesGfxPtr != NULL && gMonSpritesGfxPtr->field_17C == NULL) + gMonSpritesGfxPtr->field_17C = AllocZeroed(0x2000); + if (!isBackpic) + { + LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20); + if (a10 == 1 || sub_80688F8(5, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != 0) + LoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], + gMonSpritesGfxPtr->field_17C, + species, + personality, + TRUE); + else + LoadSpecialPokePic_2(&gMonFrontPicTable[species], + gMonSpritesGfxPtr->field_17C, + species, + personality, + TRUE); + } + else + { + LoadCompressedPalette(GetFrontSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20); + if (a10 == 1 || sub_80688F8(5, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != 0) + LoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species], + gMonSpritesGfxPtr->field_17C, + species, + personality, + FALSE); + else + LoadSpecialPokePic_2(&gMonBackPicTable[species], + gMonSpritesGfxPtr->field_17C, + species, + personality, + FALSE); + } + + RequestDma3Copy(gMonSpritesGfxPtr->field_17C, (void *)(OBJ_VRAM0 + (sheet * 0x20)), 0x800, 1); + FREE_AND_SET_NULL(gMonSpritesGfxPtr->field_17C); + + if (!isBackpic) + spriteId = CreateSprite(&sUnknown_08525F90[a3], x, y + gMonFrontPicCoords[species].y_offset, subpriority); + else + spriteId = CreateSprite(&sUnknown_08525F90[a3], x, y + gMonBackPicCoords[species].y_offset, subpriority); + + if (IsContest()) + { + gSprites[spriteId].affineAnims = gUnknown_082FF6C0; + StartSpriteAffineAnim(&gSprites[spriteId], 0); + } + return spriteId; +} + +void DestroySpriteAndFreeResources_(struct Sprite *sprite) +{ + DestroySpriteAndFreeResources(sprite); +} + +s16 GetBattlerSpriteCoordAttr(u8 battlerId, u8 attr) +{ + u16 species; + u32 personality; + u16 letter; + u16 unownSpecies; + int ret; + const struct MonCoords *coords; + struct BattleSpriteInfo *spriteInfo; + + if (IsContest()) + { + if (gContestResources->field_18->unk4_0) + { + species = gContestResources->field_18->unk2; + personality = gContestResources->field_18->unk10; + } + else + { + species = gContestResources->field_18->species; + personality = gContestResources->field_18->unk8; + } + if (species == SPECIES_UNOWN) + { + letter = GET_UNOWN_LETTER(personality); + if (!letter) + unownSpecies = SPECIES_UNOWN; + else + unownSpecies = letter + SPECIES_UNOWN_B - 1; + coords = &gMonBackPicCoords[unownSpecies]; + } + else if (species == SPECIES_CASTFORM) + { + coords = &gCastformFrontSpriteCoords[gBattleMonForms[battlerId]]; + } + else if (species <= SPECIES_EGG) + { + coords = &gMonBackPicCoords[species]; + } + else + { + coords = &gMonBackPicCoords[0]; + } + } + else + { + if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) + { + spriteInfo = gBattleSpritesDataPtr->battlerData; + if (!spriteInfo[battlerId].transformSpecies) + { + species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + personality = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PERSONALITY); + } + else + { + species = spriteInfo[battlerId].transformSpecies; + personality = gTransformedPersonalities[battlerId]; + } + + if (species == SPECIES_UNOWN) + { + letter = GET_UNOWN_LETTER(personality); + if (!letter) + unownSpecies = SPECIES_UNOWN; + else + unownSpecies = letter + SPECIES_UNOWN_B - 1; + coords = &gMonBackPicCoords[unownSpecies]; + } + else if (species > NUM_SPECIES) + { + coords = &gMonBackPicCoords[0]; + } + else + { + coords = &gMonBackPicCoords[species]; + } + } + else + { + spriteInfo = gBattleSpritesDataPtr->battlerData; + if (!spriteInfo[battlerId].transformSpecies) + { + species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); + personality = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_PERSONALITY); + } + else + { + species = spriteInfo[battlerId].transformSpecies; + personality = gTransformedPersonalities[battlerId]; + } + + if (species == SPECIES_UNOWN) + { + letter = GET_UNOWN_LETTER(personality); + if (!letter) + unownSpecies = SPECIES_UNOWN; + else + unownSpecies = letter + SPECIES_UNOWN_B - 1; + coords = &gMonFrontPicCoords[unownSpecies]; + } + else if (species == SPECIES_CASTFORM) + { + coords = &gCastformFrontSpriteCoords[gBattleMonForms[battlerId]]; + } + else if (species > NUM_SPECIES) + { + coords = &gMonFrontPicCoords[0]; + } + else + { + coords = &gMonFrontPicCoords[species]; + } + } + } + + switch (attr) + { + case BATTLER_COORD_ATTR_HEIGHT: + return (coords->size & 0xf) * 8; + case BATTLER_COORD_ATTR_WIDTH: + return (coords->size >> 4) * 8; + case BATTLER_COORD_ATTR_LEFT: + return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) - ((coords->size >> 4) * 4); + case BATTLER_COORD_ATTR_RIGHT: + return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X_2) + ((coords->size >> 4) * 4); + case BATTLER_COORD_ATTR_TOP: + return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET) - ((coords->size & 0xf) * 4); + case BATTLER_COORD_ATTR_BOTTOM: + return GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y_PIC_OFFSET) + ((coords->size & 0xf) * 4); + case BATTLER_COORD_ATTR_RAW_BOTTOM: + ret = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 31; + return ret - coords->y_offset; + default: + return 0; + } +} + +void SetAverageBattlerPositions(u8 battlerId, bool8 respectMonPicOffsets, s16 *x, s16 *y) +{ + u8 xCoordType, yCoordType; + s16 battlerX, battlerY; + s16 partnerX, partnerY; + + if (!respectMonPicOffsets) + { + xCoordType = BATTLER_COORD_X; + yCoordType = BATTLER_COORD_Y; + } + else + { + xCoordType = BATTLER_COORD_X_2; + yCoordType = BATTLER_COORD_Y_PIC_OFFSET; + } + + battlerX = GetBattlerSpriteCoord(battlerId, xCoordType); + battlerY = GetBattlerSpriteCoord(battlerId, yCoordType); + if (IsDoubleBattle() && !IsContest()) + { + partnerX = GetBattlerSpriteCoord(BATTLE_PARTNER(battlerId), xCoordType); + partnerY = GetBattlerSpriteCoord(BATTLE_PARTNER(battlerId), yCoordType); + } + else + { + partnerX = battlerX; + partnerY = battlerY; + } + + *x = (battlerX + partnerX) / 2; + *y = (battlerY + partnerY) / 2; +} + +u8 sub_80A89C8(int battlerId, u8 spriteId, int species) +{ + u8 newSpriteId = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); + gSprites[newSpriteId] = gSprites[spriteId]; + gSprites[newSpriteId].usingSheet = TRUE; + gSprites[newSpriteId].oam.priority = 0; + gSprites[newSpriteId].oam.objMode = 2; + gSprites[newSpriteId].oam.tileNum = gSprites[spriteId].oam.tileNum; + gSprites[newSpriteId].callback = SpriteCallbackDummy; + return newSpriteId; +} + +void sub_80A8A6C(struct Sprite *sprite) +{ + SetSpriteCoordsToAnimAttackerCoords(sprite); + if (GetBattlerSide(gBattleAnimAttacker)) + { + sprite->pos1.x -= gBattleAnimArgs[0]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + sprite->hFlip = TRUE; + } + else + { + sprite->pos1.x += gBattleAnimArgs[0]; + } + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[3] = gBattleAnimArgs[4]; + sprite->data[5] = gBattleAnimArgs[5]; + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = TranslateSpriteLinearAndFlicker; +} + +void sub_80A8AEC(struct Sprite *sprite) +{ + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + sprite->pos1.x -= gBattleAnimArgs[0]; + gBattleAnimArgs[3] *= -1; + } + else + { + sprite->pos1.x += gBattleAnimArgs[0]; + } + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[3] = gBattleAnimArgs[4]; + sprite->data[5] = gBattleAnimArgs[5]; + StartSpriteAnim(sprite, gBattleAnimArgs[6]); + StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); + sprite->callback = TranslateSpriteLinearAndFlicker; +} + +void sub_80A8B64(struct Sprite *sprite) +{ + SetSpriteCoordsToAnimAttackerCoords(sprite); + if (GetBattlerSide(gBattleAnimAttacker)) + sprite->pos1.x -= gBattleAnimArgs[0]; + else + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->callback = RunStoredCallbackWhenAnimEnds; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} + +void sub_80A8BC4(u8 taskId) +{ + u16 src; + u16 dest; + struct Task *task = &gTasks[taskId]; + + task->data[0] = GetAnimBattlerSpriteId(ANIM_ATTACKER); + task->data[1] = ((GetBattlerSide(gBattleAnimAttacker)) != B_SIDE_PLAYER) ? -8 : 8; + task->data[2] = 0; + task->data[3] = 0; + gSprites[task->data[0]].pos2.x -= task->data[0]; + task->data[4] = AllocSpritePalette(10097); + task->data[5] = 0; + + dest = (task->data[4] + 0x10) * 0x10; + src = (gSprites[task->data[0]].oam.paletteNum + 0x10) * 0x10; + task->data[6] = GetBattlerSpriteSubpriority(gBattleAnimAttacker); + if (task->data[6] == 20 || task->data[6] == 40) + task->data[6] = 2; + else + task->data[6] = 3; + CpuCopy32(&gPlttBufferUnfaded[src], &gPlttBufferFaded[dest], 0x20); + BlendPalette(dest, 16, gBattleAnimArgs[1], gBattleAnimArgs[0]); + task->func = sub_80A8CAC; +} + +static void sub_80A8CAC(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + switch (task->data[2]) + { + case 0: + sub_80A8D78(task, taskId); + gSprites[task->data[0]].pos2.x += task->data[1]; + if (++task->data[3] == 5) + { + task->data[3]--; + task->data[2]++; + } + break; + case 1: + sub_80A8D78(task, taskId); + gSprites[task->data[0]].pos2.x -= task->data[1]; + if (--task->data[3] == 0) + { + gSprites[task->data[0]].pos2.x = 0; + task->data[2]++; + } + break; + case 2: + if (!task->data[5]) + { + FreeSpritePaletteByTag(ANIM_TAG_BENT_SPOON); + DestroyAnimVisualTask(taskId); + } + break; + } +} + +static void sub_80A8D78(struct Task *task, u8 taskId) +{ + s16 spriteId = CloneBattlerSpriteWithBlend(0); + if (spriteId >= 0) + { + gSprites[spriteId].oam.priority = task->data[6]; + gSprites[spriteId].oam.paletteNum = task->data[4]; + gSprites[spriteId].data[0] = 8; + gSprites[spriteId].data[1] = taskId; + gSprites[spriteId].data[2] = spriteId; + gSprites[spriteId].pos2.x = gSprites[task->data[0]].pos2.x; + gSprites[spriteId].callback = sub_80A8DFC; + task->data[5]++; + } +} + +static void sub_80A8DFC(struct Sprite *sprite) +{ + if (--sprite->data[0] == 0) + { + gTasks[sprite->data[1]].data[5]--; + obj_delete_but_dont_free_vram(sprite); + } +} + +void sub_80A8E30(struct Sprite *sprite) +{ + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); + sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); + if (!GetBattlerSide(gBattleAnimAttacker)) + sprite->data[0] = 5; + else + sprite->data[0] = -10; + sprite->data[1] = -40; + sprite->callback = sub_80A8E88; +} + +static void sub_80A8E88(struct Sprite *sprite) +{ + sprite->data[2] += sprite->data[0]; + sprite->data[3] += sprite->data[1]; + sprite->pos2.x = sprite->data[2] / 10; + sprite->pos2.y = sprite->data[3] / 10; + if (sprite->data[1] < -20) + sprite->data[1]++; + if (sprite->pos1.y + sprite->pos2.y < -32) + DestroyAnimSprite(sprite); +} + +void sub_80A8EE4(struct Sprite *sprite) +{ + int x; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[4]; + sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[5]; + if (!GetBattlerSide(gBattleAnimTarget)) + { + x = (u16)gBattleAnimArgs[4] + 30; + sprite->pos1.x += x; + sprite->pos1.y = gBattleAnimArgs[5] - 20; + } + else + { + x = (u16)gBattleAnimArgs[4] - 30; + sprite->pos1.x += x; + sprite->pos1.y = gBattleAnimArgs[5] - 80; + } + sprite->callback = StartAnimLinearTranslation; + StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); +} diff --git a/src/battle_anim_special.c b/src/battle_anim_special.c new file mode 100755 index 000000000..92874fe09 --- /dev/null +++ b/src/battle_anim_special.c @@ -0,0 +1,2267 @@ +#include "global.h" +#include "battle.h" +#include "battle_anim.h" +#include "battle_controllers.h" +#include "battle_interface.h" +#include "decompress.h" +#include "dma3.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "m4a.h" +#include "main.h" +#include "palette.h" +#include "pokeball.h" +#include "sound.h" +#include "sprite.h" +#include "task.h" +#include "trig.h" +#include "util.h" +#include "constants/rgb.h" +#include "constants/items.h" +#include "constants/songs.h" + +// iwram +int gUnknown_030062DC; +u16 gUnknown_030062E0; +u16 gUnknown_030062E4; + +static void sub_8170660(u8); +static void sub_8170A38(u8); +static void sub_8170EF0(u8); +static void sub_8171104(struct Sprite *); +static void sub_8171030(u8); +static void sub_81710A8(u8); +static void sub_8171134(struct Sprite *); +static void sub_8171CAC(struct Sprite *); +static void sub_81711E8(struct Sprite *); +static void sub_8171240(struct Sprite *); +static void sub_817138C(struct Sprite *); +static void sub_81713D0(struct Sprite *); +static void sub_81717B4(struct Sprite *); +static void sub_81714D4(struct Sprite *); +static void sub_8171520(struct Sprite *); +static void sub_81717D8(struct Sprite *); +static void sub_8171AE4(struct Sprite *); +static void sub_81717F8(struct Sprite *); +static void sub_81719EC(struct Sprite *); +static void sub_81718D8(struct Sprite *); +static void sub_81719C0(struct Sprite *); +static void sub_8171D60(u8); +static void sub_8171AAC(struct Sprite *); +static void sub_8171BAC(struct Sprite *); +static void sub_8171CE8(struct Sprite *); +static void PokeBallOpenParticleAnimation_Step1(struct Sprite *); +static void PokeBallOpenParticleAnimation_Step2(struct Sprite *); +static void DestroyBallOpenAnimationParticle(struct Sprite *); +static void FanOutBallOpenParticles_Step1(struct Sprite *); +static void RepeatBallOpenParticleAnimation_Step1(struct Sprite *); +static void PremierBallOpenParticleAnimation_Step1(struct Sprite *); +static void sub_8172AB0(u8); +static void sub_8172B40(u8); +static void sub_8172B90(u8); +static void sub_8172FEC(u8); +static void sub_81731FC(struct Sprite *); +static void sub_8173250(struct Sprite *); +static void sub_81731B0(u8); +static void sub_817339C(struct Sprite *); +static void sub_81733D4(struct Sprite *); +static void sub_8173400(struct Sprite *); +static void PokeBallOpenParticleAnimation(u8); +static void GreatBallOpenParticleAnimation(u8); +static void SafariBallOpenParticleAnimation(u8); +static void UltraBallOpenParticleAnimation(u8); +static void MasterBallOpenParticleAnimation(u8); +static void DiveBallOpenParticleAnimation(u8); +static void RepeatBallOpenParticleAnimation(u8); +static void TimerBallOpenParticleAnimation(u8); +static void PremierBallOpenParticleAnimation(u8); +static void sub_817330C(struct Sprite *); + +struct BallCaptureSuccessStarData +{ + s8 xOffset; + s8 yOffset; + s8 unk2; +}; + +static const struct BallCaptureSuccessStarData sBallCaptureSuccessStarData[] = +{ + { + .xOffset = 10, + .yOffset = 2, + .unk2 = -3, + }, + { + .xOffset = 15, + .yOffset = 0, + .unk2 = -4, + }, + { + .xOffset = -10, + .yOffset = 2, + .unk2 = -4, + }, +}; + +const struct CompressedSpriteSheet gBallOpenParticleSpritesheets[] = +{ + {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6EC}, + {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6ED}, + {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6EE}, + {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6EF}, + {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F0}, + {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F1}, + {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F2}, + {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F3}, + {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F4}, + {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F5}, + {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F6}, + {gBattleAnimSpriteSheet_Particles, 0x100, 0xD6F7}, +}; + +const struct CompressedSpritePalette gBallOpenParticlePalettes[] = +{ + {gBattleAnimSpritePalette_136, 0xD6EC}, + {gBattleAnimSpritePalette_136, 0xD6ED}, + {gBattleAnimSpritePalette_136, 0xD6EE}, + {gBattleAnimSpritePalette_136, 0xD6EF}, + {gBattleAnimSpritePalette_136, 0xD6F0}, + {gBattleAnimSpritePalette_136, 0xD6F1}, + {gBattleAnimSpritePalette_136, 0xD6F2}, + {gBattleAnimSpritePalette_136, 0xD6F3}, + {gBattleAnimSpritePalette_136, 0xD6F4}, + {gBattleAnimSpritePalette_136, 0xD6F5}, + {gBattleAnimSpritePalette_136, 0xD6F6}, + {gBattleAnimSpritePalette_136, 0xD6F7}, +}; + +const union AnimCmd gUnknown_085E5154[] = +{ + ANIMCMD_FRAME(0, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_FRAME(2, 1), + ANIMCMD_FRAME(0, 1, .hFlip = TRUE), + ANIMCMD_FRAME(2, 1), + ANIMCMD_FRAME(1, 1), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gUnknown_085E5170[] = +{ + ANIMCMD_FRAME(3, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_085E5178[] = +{ + ANIMCMD_FRAME(4, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_085E5180[] = +{ + ANIMCMD_FRAME(5, 1), + ANIMCMD_END, +}; + +const union AnimCmd gUnknown_085E5188[] = +{ + ANIMCMD_FRAME(6, 4), + ANIMCMD_FRAME(7, 4), + ANIMCMD_JUMP(0), +}; + +const union AnimCmd gUnknown_085E5194[] = +{ + ANIMCMD_FRAME(7, 4), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_085E519C[] = +{ + gUnknown_085E5154, + gUnknown_085E5170, + gUnknown_085E5178, + gUnknown_085E5180, + gUnknown_085E5188, + gUnknown_085E5194, +}; + +const u8 gBallOpenParticleAnimNums[] = +{ + 0, + 0, + 0, + 5, + 1, + 2, + 2, + 3, + 5, + 5, + 4, + 4, +}; + +const TaskFunc gBallOpenParticleAnimationFuncs[] = +{ + PokeBallOpenParticleAnimation, + GreatBallOpenParticleAnimation, + SafariBallOpenParticleAnimation, + UltraBallOpenParticleAnimation, + MasterBallOpenParticleAnimation, + SafariBallOpenParticleAnimation, + DiveBallOpenParticleAnimation, + UltraBallOpenParticleAnimation, + RepeatBallOpenParticleAnimation, + TimerBallOpenParticleAnimation, + GreatBallOpenParticleAnimation, + PremierBallOpenParticleAnimation, +}; + +const struct SpriteTemplate gUnknown_085E51F0[] = +{ + { + .tileTag = 55020, + .paletteTag = 55020, + .oam = &gUnknown_08524904, + .anims = gUnknown_085E519C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 55021, + .paletteTag = 55021, + .oam = &gUnknown_08524904, + .anims = gUnknown_085E519C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 55022, + .paletteTag = 55022, + .oam = &gUnknown_08524904, + .anims = gUnknown_085E519C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 55023, + .paletteTag = 55023, + .oam = &gUnknown_08524904, + .anims = gUnknown_085E519C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 55024, + .paletteTag = 55024, + .oam = &gUnknown_08524904, + .anims = gUnknown_085E519C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 55025, + .paletteTag = 55025, + .oam = &gUnknown_08524904, + .anims = gUnknown_085E519C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 55026, + .paletteTag = 55026, + .oam = &gUnknown_08524904, + .anims = gUnknown_085E519C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 55027, + .paletteTag = 55027, + .oam = &gUnknown_08524904, + .anims = gUnknown_085E519C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 55028, + .paletteTag = 55028, + .oam = &gUnknown_08524904, + .anims = gUnknown_085E519C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 55029, + .paletteTag = 55029, + .oam = &gUnknown_08524904, + .anims = gUnknown_085E519C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 55030, + .paletteTag = 55030, + .oam = &gUnknown_08524904, + .anims = gUnknown_085E519C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, + { + .tileTag = 55031, + .paletteTag = 55031, + .oam = &gUnknown_08524904, + .anims = gUnknown_085E519C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, + }, +}; + +const u16 gUnknown_085E5310[] = +{ + RGB(31, 22, 30), + RGB(16, 23, 30), + RGB(23, 30, 20), + RGB(31, 31, 15), + RGB(23, 20, 28), + RGB(21, 31, 25), + RGB(12, 25, 30), + RGB(30, 27, 10), + RGB(31, 24, 16), + RGB(29, 30, 30), + RGB(31, 17, 10), + RGB(31, 9, 10), + RGB(0, 0, 0), + RGB(1, 16, 0), + RGB(3, 0, 1), + RGB(1, 8, 0), + RGB(0, 8, 0), + RGB(3, 8, 1), + RGB(6, 8, 1), + RGB(4, 0, 0), +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_85E5338 = +{ + .tileTag = ANIM_TAG_UNUSED_RED_BRICK, + .paletteTag = ANIM_TAG_UNUSED_RED_BRICK, + .oam = &gUnknown_0852490C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_817330C, +}; + +const union AnimCmd gUnknown_085E5350[] = +{ + ANIMCMD_FRAME(64, 1), + ANIMCMD_END, +}; + +const union AnimCmd *const gUnknown_085E5358[] = { + gUnknown_085E5350, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_085E535C = +{ + .tileTag = ANIM_TAG_ROCKS, + .paletteTag = ANIM_TAG_ROCKS, + .oam = &gUnknown_08524914, + .anims = gUnknown_085E5358, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_817330C, +}; + +extern const struct SpriteTemplate gUnknown_085CE388; +extern const struct SpriteTemplate gMiniTwinklingStarSpriteTemplate; + +void unref_sub_8170478(u8 taskId) +{ + struct BattleAnimBgData unknownStruct; + u8 healthBoxSpriteId; + u8 battler; + u8 spriteId1, spriteId2, spriteId3, spriteId4; + + battler = gBattleAnimAttacker; + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + 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_BG0 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR | WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR); + SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON); + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); + SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 0); + SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 0); + SetAnimBgAttribute(1, BG_ANIM_AREA_OVERFLOW_MODE, 1); + SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1); + + healthBoxSpriteId = gHealthboxSpriteIds[battler]; + spriteId1 = gSprites[healthBoxSpriteId].oam.affineParam; + spriteId2 = gSprites[healthBoxSpriteId].data[5]; + spriteId3 = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); + spriteId4 = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); + gSprites[healthBoxSpriteId].oam.priority = 1; + gSprites[spriteId1].oam.priority = 1; + gSprites[spriteId2].oam.priority = 1; + gSprites[spriteId3] = gSprites[healthBoxSpriteId]; + gSprites[spriteId4] = gSprites[spriteId1]; + gSprites[spriteId3].oam.objMode = ST_OAM_OBJ_WINDOW; + gSprites[spriteId4].oam.objMode = ST_OAM_OBJ_WINDOW; + gSprites[spriteId3].callback = SpriteCallbackDummy; + gSprites[spriteId4].callback = SpriteCallbackDummy; + + sub_80A6B30(&unknownStruct); + AnimLoadCompressedBgTilemap(unknownStruct.bgId, gUnknown_08C2EA9C); + AnimLoadCompressedBgGfx(unknownStruct.bgId, gUnknown_08C2EA50, unknownStruct.tilesOffset); + LoadCompressedPalette(gCureBubblesPal, unknownStruct.paletteId << 4, 32); + + gBattle_BG1_X = -gSprites[spriteId3].pos1.x + 32; + gBattle_BG1_Y = -gSprites[spriteId3].pos1.y - 32; + gTasks[taskId].data[1] = 640; + gTasks[taskId].data[0] = spriteId3; + gTasks[taskId].data[2] = spriteId4; + gTasks[taskId].func = sub_8170660; +} + +static void sub_8170660(u8 taskId) +{ + u8 spriteId1, spriteId2; + u8 battler; + + battler = gBattleAnimAttacker; + gTasks[taskId].data[13] += gTasks[taskId].data[1]; + gBattle_BG1_Y += (u16)gTasks[taskId].data[13] >> 8; + gTasks[taskId].data[13] &= 0xFF; + + switch (gTasks[taskId].data[15]) + { + case 0: + if (gTasks[taskId].data[11]++ > 1) + { + gTasks[taskId].data[11] = 0; + gTasks[taskId].data[12]++; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12])); + if (gTasks[taskId].data[12] == 8) + gTasks[taskId].data[15]++; + } + break; + case 1: + if (++gTasks[taskId].data[10] == 30) + gTasks[taskId].data[15]++; + break; + case 2: + if (gTasks[taskId].data[11]++ > 1) + { + gTasks[taskId].data[11] = 0; + gTasks[taskId].data[12]--; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12])); + if (gTasks[taskId].data[12] == 0) + { + sub_80A477C(0); + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + 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); + if (!IsContest()) + SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0); + + SetGpuReg(REG_OFFSET_DISPCNT, GetGpuReg(REG_OFFSET_DISPCNT) ^ DISPCNT_OBJWIN_ON); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 0)); + DestroySprite(&gSprites[gTasks[taskId].data[0]]); + DestroySprite(&gSprites[gTasks[taskId].data[2]]); + SetAnimBgAttribute(1, BG_ANIM_AREA_OVERFLOW_MODE, 0); + spriteId1 = gSprites[gHealthboxSpriteIds[battler]].oam.affineParam; + spriteId2 = gSprites[gHealthboxSpriteIds[battler]].data[5]; + gSprites[gHealthboxSpriteIds[battler]].oam.priority = 1; + gSprites[spriteId1].oam.priority = 1; + gSprites[spriteId2].oam.priority = 1; + DestroyAnimVisualTask(taskId); + } + } + break; + } +} + +static void sub_8170834(u8 *paletteId1, u8 *paletteId2, u8 battler) +{ + u8 healthBoxSpriteId; + u8 spriteId1, spriteId2; + u16 offset1, offset2; + + healthBoxSpriteId = gHealthboxSpriteIds[battler]; + spriteId1 = gSprites[healthBoxSpriteId].oam.affineParam; + spriteId2 = gSprites[healthBoxSpriteId].data[5]; + *paletteId1 = AllocSpritePalette(0xD709); + *paletteId2 = AllocSpritePalette(0xD70A); + + offset1 = (gSprites[healthBoxSpriteId].oam.paletteNum * 16) + 0x100; + offset2 = (gSprites[spriteId2].oam.paletteNum * 16) + 0x100; + LoadPalette(&gPlttBufferUnfaded[offset1], *paletteId1 * 16 + 0x100, 0x20); + LoadPalette(&gPlttBufferUnfaded[offset2], *paletteId2 * 16 + 0x100, 0x20); + + gSprites[healthBoxSpriteId].oam.paletteNum = *paletteId1; + gSprites[spriteId1].oam.paletteNum = *paletteId1; + gSprites[spriteId2].oam.paletteNum = *paletteId2; +} + +void sub_8170920(u8 taskId) +{ + u8 paletteId1, paletteId2; + sub_8170834(&paletteId1, &paletteId2, gBattleAnimAttacker); + DestroyAnimVisualTask(taskId); +} + +static void sub_817094C(u8 battler) +{ + u8 healthBoxSpriteId; + u8 spriteId1, spriteId2; + u8 paletteId1, paletteId2; + + healthBoxSpriteId = gHealthboxSpriteIds[battler]; + spriteId1 = gSprites[healthBoxSpriteId].oam.affineParam; + spriteId2 = gSprites[healthBoxSpriteId].data[5]; + + FreeSpritePaletteByTag(0xD709); + FreeSpritePaletteByTag(0xD70A); + paletteId1 = IndexOfSpritePaletteTag(0xD6FF); + paletteId2 = IndexOfSpritePaletteTag(0xD704); + gSprites[healthBoxSpriteId].oam.paletteNum = paletteId1; + gSprites[spriteId1].oam.paletteNum = paletteId1; + gSprites[spriteId2].oam.paletteNum = paletteId2; +} + +void sub_81709EC(u8 taskId) +{ + sub_817094C(gBattleAnimAttacker); + DestroyAnimVisualTask(taskId); +} + +void sub_8170A0C(u8 taskId) +{ + gTasks[taskId].data[10] = gBattleAnimArgs[0]; + gTasks[taskId].data[11] = gBattleAnimArgs[1]; + gTasks[taskId].func = sub_8170A38; +} + +static void sub_8170A38(u8 taskId) +{ + u8 paletteNum; + int paletteOffset, colorOffset; + + gTasks[taskId].data[0]++; + if (gTasks[taskId].data[0]++ >= gTasks[taskId].data[11]) + { + gTasks[taskId].data[0] = 0; + paletteNum = IndexOfSpritePaletteTag(0xD709); + colorOffset = gTasks[taskId].data[10] == 0 ? 6 : 2; + switch (gTasks[taskId].data[1]) + { + case 0: + gTasks[taskId].data[2] += 2; + if (gTasks[taskId].data[2] > 16) + gTasks[taskId].data[2] = 16; + + paletteOffset = paletteNum * 16 + 0x100; + BlendPalette(paletteOffset + colorOffset, 1, gTasks[taskId].data[2], RGB(20, 27, 31)); + if (gTasks[taskId].data[2] == 16) + gTasks[taskId].data[1]++; + break; + case 1: + gTasks[taskId].data[2] -= 2; + if (gTasks[taskId].data[2] < 0) + gTasks[taskId].data[2] = 0; + + paletteOffset = paletteNum * 16 + 0x100; + BlendPalette(paletteOffset + colorOffset, 1, gTasks[taskId].data[2], RGB(20, 27, 31)); + if (gTasks[taskId].data[2] == 0) + DestroyAnimVisualTask(taskId); + break; + } + } +} + +void sub_8170B04(u8 taskId) +{ + u8 spriteId; + + spriteId = gBattlerSpriteIds[gBattleAnimAttacker]; + switch (gTasks[taskId].data[0]) + { + case 0: + PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); + gTasks[taskId].data[10] = 0x100; + gTasks[taskId].data[0]++; + break; + case 1: + gTasks[taskId].data[10] += 0x30; + SetSpriteRotScale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[10], 0); + SetBattlerSpriteYOffsetFromYScale(spriteId); + if (gTasks[taskId].data[10] >= 0x2D0) + gTasks[taskId].data[0]++; + break; + case 2: + ResetSpriteRotScale(spriteId); + gSprites[spriteId].invisible = 1; + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_8170BB0(u8 taskId) +{ + u8 spriteId; + u16 ball; + u8 ballId; + u8 x, y; + u8 priority, subpriority; + u32 selectedPalettes; + + spriteId = gBattlerSpriteIds[gBattleAnimAttacker]; + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) + ball = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_POKEBALL); + else + ball = GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_POKEBALL); + + ballId = ItemIdToBallId(ball); + switch (gTasks[taskId].data[0]) + { + case 0: + x = GetBattlerSpriteCoord(gBattleAnimAttacker, 0); + y = GetBattlerSpriteCoord(gBattleAnimAttacker, 1); + priority = gSprites[spriteId].oam.priority; + subpriority = gSprites[spriteId].subpriority; + gTasks[taskId].data[10] = AnimateBallOpenParticles(x, y + 32, priority, subpriority, ballId); + selectedPalettes = sub_80A75AC(1, 0, 0, 0, 0, 0, 0); + gTasks[taskId].data[11] = LaunchBallFadeMonTask(0, gBattleAnimAttacker, selectedPalettes, ballId); + gTasks[taskId].data[0]++; + break; + case 1: + if (!gTasks[gTasks[taskId].data[10]].isActive && !gTasks[gTasks[taskId].data[11]].isActive) + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_8170CFC(u8 taskId) +{ + u8 ballId = ItemIdToBallId(gLastUsedItem); + LoadBallGfx(ballId); + DestroyAnimVisualTask(taskId); +} + +void sub_8170D24(u8 taskId) +{ + u8 ballId = ItemIdToBallId(gLastUsedItem); + FreeBallGfx(ballId); + DestroyAnimVisualTask(taskId); +} + +void AnimTask_IsBallBlockedByTrainer(u8 taskId) +{ + if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_TRAINER_BLOCK) + gBattleAnimArgs[7] = -1; + else + gBattleAnimArgs[7] = 0; + + DestroyAnimVisualTask(taskId); +} + +u8 ItemIdToBallId(u16 ballItem) +{ + switch (ballItem) + { + case ITEM_MASTER_BALL: + return 4; + case ITEM_ULTRA_BALL: + return 3; + case ITEM_GREAT_BALL: + return 1; + case ITEM_SAFARI_BALL: + return 2; + case ITEM_NET_BALL: + return 5; + case ITEM_DIVE_BALL: + return 6; + case ITEM_NEST_BALL: + return 7; + case ITEM_REPEAT_BALL: + return 8; + case ITEM_TIMER_BALL: + return 9; + case ITEM_LUXURY_BALL: + return 10; + case ITEM_PREMIER_BALL: + return 11; + case ITEM_POKE_BALL: + default: + return 0; + } +} + +void sub_8170E04(u8 taskId) +{ + u8 ballId; + u8 spriteId; + + ballId = ItemIdToBallId(gLastUsedItem); + spriteId = CreateSprite(&gBallSpriteTemplates[ballId], 32, 80, 29); + gSprites[spriteId].data[0] = 34; + gSprites[spriteId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 0); + gSprites[spriteId].data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) - 16; + gSprites[spriteId].callback = sub_8171104; + gBattleSpritesDataPtr->animationData->field_9_x2 = gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible; + gTasks[taskId].data[0] = spriteId; + gTasks[taskId].func = sub_8170EF0; +} + +static void sub_8170EF0(u8 taskId) +{ + u8 spriteId = gTasks[taskId].data[0]; + if ((u16)gSprites[spriteId].data[0] == 0xFFFF) + DestroyAnimVisualTask(taskId); +} + +void sub_8170F2C(u8 taskId) +{ + int x, y; + u8 ballId; + u8 subpriority; + u8 spriteId; + + if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL) + { + x = 32; + y = 11; + } + else + { + x = 23; + y = 5; + } + + ballId = ItemIdToBallId(gLastUsedItem); + subpriority = GetBattlerSpriteSubpriority(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) + 1; + spriteId = CreateSprite(&gBallSpriteTemplates[ballId], x + 32, y | 80, subpriority); + gSprites[spriteId].data[0] = 34; + gSprites[spriteId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, 0); + gSprites[spriteId].data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 1) - 16; + gSprites[spriteId].callback = SpriteCallbackDummy; + gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].callback = sub_8039E84; + gTasks[taskId].data[0] = spriteId; + gTasks[taskId].func = sub_8171030; +} + +static void sub_8171030(u8 taskId) +{ + if (gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].animCmdIndex == 1) + { + PlaySE12WithPanning(SE_NAGERU, 0); + gSprites[gTasks[taskId].data[0]].callback = sub_8171104; + CreateTask(sub_81710A8, 10); + gTasks[taskId].func = sub_8170EF0; + } +} + +static void sub_81710A8(u8 taskId) +{ + if (gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].animEnded) + { + StartSpriteAnim(&gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]], 0); + DestroyTask(taskId); + } +} + +static void sub_8171104(struct Sprite *sprite) +{ + u16 temp = sprite->data[1]; + u16 temp2 = sprite->data[2]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = temp; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = temp2; + sprite->data[5] = -40; + InitAnimArcTranslation(sprite); + sprite->callback = sub_8171134; +} + +static void sub_8171134(struct Sprite *sprite) +{ + int i; + u8 ballId; + int ballId2; // extra var needed to match + + if (TranslateAnimHorizontalArc(sprite)) + { + if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_TRAINER_BLOCK) + { + sprite->callback = sub_8171CAC; + } + else + { + StartSpriteAnim(sprite, 1); + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + + for (i = 0; i < 8; i++) + sprite->data[i] = 0; + + sprite->data[5] = 0; + sprite->callback = sub_81711E8; + ballId = ItemIdToBallId(gLastUsedItem); + ballId2 = ballId; + if (ballId2 > 11) + return; + if (ballId2 < 0) + return; + + AnimateBallOpenParticles(sprite->pos1.x, sprite->pos1.y - 5, 1, 28, ballId); + LaunchBallFadeMonTask(0, gBattleAnimTarget, 14, ballId); + } + } +} + +static void sub_81711E8(struct Sprite *sprite) +{ + if (++sprite->data[5] == 10) + { + sprite->data[5] = CreateTask(TaskDummy, 50); + sprite->callback = sub_8171240; + gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] = 0; + } +} + +static void sub_8171240(struct Sprite *sprite) +{ + u8 spriteId; + u8 taskId; + + spriteId = gBattlerSpriteIds[gBattleAnimTarget]; + taskId = sprite->data[5]; + + if (++gTasks[taskId].data[1] == 11) + PlaySE(SE_SUIKOMU); + + switch (gTasks[taskId].data[0]) + { + case 0: + PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); + gTasks[taskId].data[10] = 256; + gUnknown_030062DC = 28; + gUnknown_030062E4 = (gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) - (sprite->pos1.y + sprite->pos2.y); + gUnknown_030062E0 = (u32)(gUnknown_030062E4 * 256) / 28; + gTasks[taskId].data[2] = gUnknown_030062E0; + gTasks[taskId].data[0]++; + break; + case 1: + gTasks[taskId].data[10] += 0x20; + SetSpriteRotScale(spriteId, gTasks[taskId].data[10], gTasks[taskId].data[10], 0); + gTasks[taskId].data[3] += gTasks[taskId].data[2]; + gSprites[spriteId].pos2.y = -gTasks[taskId].data[3] >> 8; + if (gTasks[taskId].data[10] >= 0x480) + gTasks[taskId].data[0]++; + break; + case 2: + ResetSpriteRotScale(spriteId); + gSprites[spriteId].invisible = 1; + gTasks[taskId].data[0]++; + break; + default: + if (gTasks[taskId].data[1] > 10) + { + DestroyTask(taskId); + StartSpriteAnim(sprite, 2); + sprite->data[5] = 0; + sprite->callback = sub_817138C; + } + break; + } +} + +static void sub_817138C(struct Sprite *sprite) +{ + int angle; + + if (sprite->animEnded) + { + sprite->data[3] = 0; + sprite->data[4] = 40; + sprite->data[5] = 0; + angle = 0; + sprite->pos1.y += Cos(angle, 40); + sprite->pos2.y = -Cos(angle, sprite->data[4]); + sprite->callback = sub_81713D0; + } +} + +static void sub_81713D0(struct Sprite *sprite) +{ + bool8 lastBounce; + int bounceCount; + + lastBounce = 0; + + switch (sprite->data[3] & 0xFF) + { + case 0: + sprite->pos2.y = -Cos(sprite->data[5], sprite->data[4]); + sprite->data[5] += (sprite->data[3] >> 8) + 4; + if (sprite->data[5] >= 64) + { + sprite->data[4] -= 10; + sprite->data[3] += 257; + + bounceCount = sprite->data[3] >> 8; + if (bounceCount == 4) + lastBounce = 1; + + // Play a different sound effect for each pokeball bounce. + switch (bounceCount) + { + case 1: + PlaySE(SE_KON); + break; + case 2: + PlaySE(SE_KON2); + break; + case 3: + PlaySE(SE_KON3); + break; + default: + PlaySE(SE_KON4); + break; + } + } + break; + case 1: + sprite->pos2.y = -Cos(sprite->data[5], sprite->data[4]); + sprite->data[5] -= (sprite->data[3] >> 8) + 4; + if (sprite->data[5] <= 0) + { + sprite->data[5] = 0; + sprite->data[3] &= -0x100; + } + break; + } + + if (lastBounce) + { + sprite->data[3] = 0; + sprite->pos1.y += Cos(64, 40); + sprite->pos2.y = 0; + if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_NO_SHAKES) + { + sprite->data[5] = 0; + sprite->callback = sub_81717B4; + } + else + { + sprite->callback = sub_81714D4; + sprite->data[4] = 1; + sprite->data[5] = 0; + } + } +} + +static void sub_81714D4(struct Sprite *sprite) +{ + if (++sprite->data[3] == 31) + { + sprite->data[3] = 0; + sprite->affineAnimPaused = 1; + StartSpriteAffineAnim(sprite, 1); + gBattleSpritesDataPtr->animationData->field_C = 0; + sprite->callback = sub_8171520; + PlaySE(SE_BOWA); + } +} + +static void sub_8171520(struct Sprite *sprite) +{ + s8 state; + u16 var0; + + switch (sprite->data[3] & 0xFF) + { + case 0: + if (gBattleSpritesDataPtr->animationData->field_C > 0xFF) + { + sprite->pos2.x += sprite->data[4]; + gBattleSpritesDataPtr->animationData->field_C &= 0xFF; + } + else + { + gBattleSpritesDataPtr->animationData->field_C += 0xB0; + } + + sprite->data[5]++; + sprite->affineAnimPaused = 0; + var0 = sprite->data[5] + 7; + if (var0 > 14) + { + gBattleSpritesDataPtr->animationData->field_C = 0; + sprite->data[3]++; + sprite->data[5] = 0; + } + break; + case 1: + if (++sprite->data[5] == 1) + { + sprite->data[5] = 0; + sprite->data[4] = -sprite->data[4]; + sprite->data[3]++; + sprite->affineAnimPaused = 0; + if (sprite->data[4] < 0) + ChangeSpriteAffineAnim(sprite, 2); + else + ChangeSpriteAffineAnim(sprite, 1); + } + else + { + sprite->affineAnimPaused = 1; + } + break; + case 2: + if (gBattleSpritesDataPtr->animationData->field_C > 0xFF) + { + sprite->pos2.x += sprite->data[4]; + gBattleSpritesDataPtr->animationData->field_C &= 0xFF; + } + else + { + gBattleSpritesDataPtr->animationData->field_C += 0xB0; + } + + sprite->data[5]++; + sprite->affineAnimPaused = 0; + var0 = sprite->data[5] + 12; + if (var0 > 24) + { + gBattleSpritesDataPtr->animationData->field_C = 0; + sprite->data[3]++; + sprite->data[5] = 0; + } + break; + case 3: + if (sprite->data[5]++ < 0) + { + sprite->affineAnimPaused = 1; + break; + } + + sprite->data[5] = 0; + sprite->data[4] = -sprite->data[4]; + sprite->data[3]++; + sprite->affineAnimPaused = 0; + if (sprite->data[4] < 0) + ChangeSpriteAffineAnim(sprite, 2); + else + ChangeSpriteAffineAnim(sprite, 1); + // fall through + case 4: + if (gBattleSpritesDataPtr->animationData->field_C > 0xFF) + { + sprite->pos2.x += sprite->data[4]; + gBattleSpritesDataPtr->animationData->field_C &= 0xFF; + } + else + { + gBattleSpritesDataPtr->animationData->field_C += 0xB0; + } + + sprite->data[5]++; + sprite->affineAnimPaused = 0; + var0 = sprite->data[5] + 4; + if (var0 > 8) + { + gBattleSpritesDataPtr->animationData->field_C = 0; + sprite->data[3]++; + sprite->data[5] = 0; + sprite->data[4] = -sprite->data[4]; + } + break; + case 5: + sprite->data[3] += 0x100; + state = sprite->data[3] >> 8; + if (state == gBattleSpritesDataPtr->animationData->ballThrowCaseId) + { + sprite->affineAnimPaused = 1; + sprite->callback = sub_81717B4; + } + else + { + if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_3_SHAKES_SUCCESS && state == 3) + { + sprite->callback = sub_81717D8; + sprite->affineAnimPaused = 1; + } + else + { + sprite->data[3]++; + sprite->affineAnimPaused = 1; + } + } + break; + case 6: + default: + if (++sprite->data[5] == 31) + { + sprite->data[5] = 0; + sprite->data[3] &= -0x100; + StartSpriteAffineAnim(sprite, 3); + if (sprite->data[4] < 0) + StartSpriteAffineAnim(sprite, 2); + else + StartSpriteAffineAnim(sprite, 1); + + PlaySE(SE_BOWA); + } + break; + } +} + +static void sub_81717B4(struct Sprite *sprite) +{ + if (++sprite->data[5] == 31) + { + sprite->data[5] = 0; + sprite->callback = sub_8171AE4; + } +} + +static void sub_81717D8(struct Sprite *sprite) +{ + sprite->animPaused = 1; + sprite->callback = sub_81717F8; + sprite->data[3] = 0; + sprite->data[4] = 0; + sprite->data[5] = 0; +} + +static void sub_81717F8(struct Sprite *sprite) +{ + u8 *battler = &gBattleAnimTarget; + + sprite->data[4]++; + if (sprite->data[4] == 40) + { + PlaySE(SE_RG_GETTING); + BlendPalettes(0x10000 << sprite->oam.paletteNum, 6, RGB(0, 0, 0)); + sub_81719EC(sprite); + } + else if (sprite->data[4] == 60) + { + BeginNormalPaletteFade(0x10000 << sprite->oam.paletteNum, 2, 6, 0, RGB(0, 0, 0)); + } + else if (sprite->data[4] == 95) + { + gDoingBattleAnim = 0; + UpdateOamPriorityInAllHealthboxes(1); + m4aMPlayAllStop(); + PlaySE(MUS_RG_FAN6); + } + else if (sprite->data[4] == 315) + { + FreeOamMatrix(gSprites[gBattlerSpriteIds[*battler]].oam.matrixNum); + DestroySprite(&gSprites[gBattlerSpriteIds[*battler]]); + sprite->data[0] = 0; + sprite->callback = sub_81718D8; + } +} + +static void sub_81718D8(struct Sprite *sprite) +{ + u8 paletteIndex; + + switch (sprite->data[0]) + { + case 0: + sprite->data[1] = 0; + sprite->data[2] = 0; + sprite->oam.objMode = ST_OAM_OBJ_BLEND; + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); + paletteIndex = IndexOfSpritePaletteTag(sprite->template->paletteTag); + BeginNormalPaletteFade(1 << (paletteIndex + 0x10), 0, 0, 16, RGB(31, 31, 31)); + sprite->data[0]++; + break; + case 1: + if (sprite->data[1]++ > 0) + { + sprite->data[1] = 0; + sprite->data[2]++; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - sprite->data[2], sprite->data[2])); + if (sprite->data[2] == 16) + sprite->data[0]++; + } + break; + case 2: + sprite->invisible = 1; + sprite->data[0]++; + break; + default: + if (!gPaletteFade.active) + { + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + sprite->data[0] = 0; + sprite->callback = sub_81719C0; + } + break; + } +} + +static void sub_81719C0(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + sprite->data[0] = -1; + } + else + { + FreeSpriteOamMatrix(sprite); + DestroySprite(sprite); + } +} + +static void sub_81719EC(struct Sprite *sprite) +{ + u32 i; + u8 subpriority; + + if (sprite->subpriority) + { + subpriority = sprite->subpriority - 1; + } + else + { + subpriority = 0; + sprite->subpriority = 1; + } + + sub_8171D60(4); + for (i = 0; i < 3; i++) + { + u8 spriteId = CreateSprite(&gUnknown_085E51F0[4], sprite->pos1.x, sprite->pos1.y, subpriority); + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].data[0] = 24; + gSprites[spriteId].data[2] = sprite->pos1.x + sBallCaptureSuccessStarData[i].xOffset; + gSprites[spriteId].data[4] = sprite->pos1.y + sBallCaptureSuccessStarData[i].yOffset; + gSprites[spriteId].data[5] = sBallCaptureSuccessStarData[i].unk2; + InitAnimArcTranslation(&gSprites[spriteId]); + gSprites[spriteId].callback = sub_8171AAC; + StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[4]); + } + } +} + +static void sub_8171AAC(struct Sprite *sprite) +{ + sprite->invisible = !sprite->invisible; + if (TranslateAnimHorizontalArc(sprite)) + DestroySprite(sprite); +} + +// fakematching. I think the return type of ItemIdToBallId() +// is wrong because of the weird required casting. +static void sub_8171AE4(struct Sprite *sprite) +{ + u8 ballId; + int ballId2; // extra var needed to match + + StartSpriteAnim(sprite, 1); + StartSpriteAffineAnim(sprite, 0); + sprite->callback = sub_8171BAC; + + ballId = ItemIdToBallId(gLastUsedItem); + ballId2 = ballId; + if (ballId2 > 11) + goto LABEL; + if (ballId2 < 0) + goto LABEL; + + AnimateBallOpenParticles(sprite->pos1.x, sprite->pos1.y - 5, 1, 28, ballId); + LaunchBallFadeMonTask(1, gBattleAnimTarget, 14, ballId); + + LABEL: + gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible = 0; + StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimTarget]], 1); + AnimateSprite(&gSprites[gBattlerSpriteIds[gBattleAnimTarget]]); + gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] = 0x1000; +} + +static void sub_8171BAC(struct Sprite *sprite) +{ + int next = FALSE; + + if (sprite->animEnded) + sprite->invisible = 1; + + if (gSprites[gBattlerSpriteIds[gBattleAnimTarget]].affineAnimEnded) + { + StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[gBattleAnimTarget]], 0); + next = TRUE; + } + else + { + gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] -= 288; + gSprites[gBattlerSpriteIds[gBattleAnimTarget]].pos2.y = gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] >> 8; + } + + if (sprite->animEnded && next) + { + gSprites[gBattlerSpriteIds[gBattleAnimTarget]].pos2.y = 0; + gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible = gBattleSpritesDataPtr->animationData->field_9_x2; + sprite->data[0] = 0; + sprite->callback = sub_81719C0; + gDoingBattleAnim = 0; + UpdateOamPriorityInAllHealthboxes(1); + } +} + +static void sub_8171CAC(struct Sprite *sprite) +{ + int i; + + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + for (i = 0; i < 6; i++) + sprite->data[i] = 0; + + sprite->callback = sub_8171CE8; +} + +static void sub_8171CE8(struct Sprite *sprite) +{ + s16 var0 = sprite->data[0] + 0x800; + s16 var1 = sprite->data[1] + 0x680; + sprite->pos2.x -= var1 >> 8; + sprite->pos2.y += var0 >> 8; + sprite->data[0] = (sprite->data[0] + 0x800) & 0xFF; + sprite->data[1] = (sprite->data[1] + 0x680) & 0xFF; + + if (sprite->pos1.y + sprite->pos2.y > 160 + || sprite->pos1.x + sprite->pos2.x < -8) + { + sprite->data[0] = 0; + sprite->callback = sub_81719C0; + gDoingBattleAnim = 0; + UpdateOamPriorityInAllHealthboxes(1); + } +} + +static void sub_8171D60(u8 ballId) +{ + u8 taskId; + + if (GetSpriteTileStartByTag(gBallOpenParticleSpritesheets[ballId].tag) == 0xFFFF) + { + LoadCompressedSpriteSheetUsingHeap(&gBallOpenParticleSpritesheets[ballId]); + LoadCompressedSpritePaletteUsingHeap(&gBallOpenParticlePalettes[ballId]); + } +} + +u8 AnimateBallOpenParticles(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballId) +{ + u8 taskId; + + sub_8171D60(ballId); + taskId = CreateTask(gBallOpenParticleAnimationFuncs[ballId], 5); + gTasks[taskId].data[1] = x; + gTasks[taskId].data[2] = y; + gTasks[taskId].data[3] = priority; + gTasks[taskId].data[4] = subpriority; + gTasks[taskId].data[15] = ballId; + PlaySE(SE_BOWA2); + + return taskId; +} + +void sub_8171E20(void) +{ + if (gMain.inBattle) + gBattleSpritesDataPtr->animationData->field_A++; +} + +static void PokeBallOpenParticleAnimation(u8 taskId) +{ + u8 spriteId; + u8 x, y; + u8 priority, subpriority; + u8 ballId; + u8 var0; + + ballId = gTasks[taskId].data[15]; + if (gTasks[taskId].data[0] < 16) + { + x = gTasks[taskId].data[1]; + y = gTasks[taskId].data[2]; + priority = gTasks[taskId].data[3]; + subpriority = gTasks[taskId].data[4]; + + spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority); + if (spriteId != MAX_SPRITES) + { + sub_8171E20(); + StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]); + gSprites[spriteId].callback = PokeBallOpenParticleAnimation_Step1; + gSprites[spriteId].oam.priority = priority; + + var0 = (u8)gTasks[taskId].data[0]; + if (var0 >= 8) + var0 -= 8; + + gSprites[spriteId].data[0] = var0 * 32; + } + + if (gTasks[taskId].data[0] == 15) + { + if (!gMain.inBattle) + gSprites[spriteId].data[7] = 1; + + DestroyTask(taskId); + return; + } + } + + gTasks[taskId].data[0]++; +} + +static void PokeBallOpenParticleAnimation_Step1(struct Sprite *sprite) +{ + if (sprite->data[1] == 0) + sprite->callback = PokeBallOpenParticleAnimation_Step2; + else + sprite->data[1]--; +} + +static void PokeBallOpenParticleAnimation_Step2(struct Sprite *sprite) +{ + sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]); + sprite->pos2.y = Cos(sprite->data[0], sprite->data[1]); + sprite->data[1] += 2; + if (sprite->data[1] == 50) + DestroyBallOpenAnimationParticle(sprite); +} + +static void TimerBallOpenParticleAnimation(u8 taskId) +{ + u8 i; + u8 x, y, priority, subpriority, ballId; + u8 spriteId; + + ballId = gTasks[taskId].data[15]; + x = gTasks[taskId].data[1]; + y = gTasks[taskId].data[2]; + priority = gTasks[taskId].data[3]; + subpriority = gTasks[taskId].data[4]; + + for (i = 0; i < 8; i++) + { + spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority); + if (spriteId != MAX_SPRITES) + { + sub_8171E20(); + StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]); + gSprites[spriteId].callback = FanOutBallOpenParticles_Step1; + gSprites[spriteId].oam.priority = priority; + gSprites[spriteId].data[0] = i * 32; + gSprites[spriteId].data[4] = 10; + gSprites[spriteId].data[5] = 2; + gSprites[spriteId].data[6] = 1; + } + } + + if (!gMain.inBattle) + gSprites[spriteId].data[7] = 1; + + DestroyTask(taskId); +} + +static void DiveBallOpenParticleAnimation(u8 taskId) +{ + u8 i; + u8 x, y, priority, subpriority, ballId; + u8 spriteId; + + ballId = gTasks[taskId].data[15]; + x = gTasks[taskId].data[1]; + y = gTasks[taskId].data[2]; + priority = gTasks[taskId].data[3]; + subpriority = gTasks[taskId].data[4]; + + for (i = 0; i < 8; i++) + { + spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority); + if (spriteId != MAX_SPRITES) + { + sub_8171E20(); + StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]); + gSprites[spriteId].callback = FanOutBallOpenParticles_Step1; + gSprites[spriteId].oam.priority = priority; + gSprites[spriteId].data[0] = i * 32; + gSprites[spriteId].data[4] = 10; + gSprites[spriteId].data[5] = 1; + gSprites[spriteId].data[6] = 2; + } + } + + if (!gMain.inBattle) + gSprites[spriteId].data[7] = 1; + + DestroyTask(taskId); +} + +// Also used for Net Ball +static void SafariBallOpenParticleAnimation(u8 taskId) +{ + u8 i; + u8 x, y, priority, subpriority, ballId; + u8 spriteId; + + ballId = gTasks[taskId].data[15]; + x = gTasks[taskId].data[1]; + y = gTasks[taskId].data[2]; + priority = gTasks[taskId].data[3]; + subpriority = gTasks[taskId].data[4]; + + for (i = 0; i < 8; i++) + { + spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority); + if (spriteId != MAX_SPRITES) + { + sub_8171E20(); + StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]); + gSprites[spriteId].callback = FanOutBallOpenParticles_Step1; + gSprites[spriteId].oam.priority = priority; + gSprites[spriteId].data[0] = i * 32; + gSprites[spriteId].data[4] = 4; + gSprites[spriteId].data[5] = 1; + gSprites[spriteId].data[6] = 1; + } + } + + if (!gMain.inBattle) + gSprites[spriteId].data[7] = 1; + + DestroyTask(taskId); +} + +// Also used for Nest Ball +static void UltraBallOpenParticleAnimation(u8 taskId) +{ + u8 i; + u8 x, y, priority, subpriority, ballId; + u8 spriteId; + + ballId = gTasks[taskId].data[15]; + x = gTasks[taskId].data[1]; + y = gTasks[taskId].data[2]; + priority = gTasks[taskId].data[3]; + subpriority = gTasks[taskId].data[4]; + + for (i = 0; i < 10; i++) + { + spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority); + if (spriteId != MAX_SPRITES) + { + sub_8171E20(); + StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]); + gSprites[spriteId].callback = FanOutBallOpenParticles_Step1; + gSprites[spriteId].oam.priority = priority; + gSprites[spriteId].data[0] = i * 25; + gSprites[spriteId].data[4] = 5; + gSprites[spriteId].data[5] = 1; + gSprites[spriteId].data[6] = 1; + } + } + + if (!gMain.inBattle) + gSprites[spriteId].data[7] = 1; + + DestroyTask(taskId); +} + +// Also used for Luxury Ball +static void GreatBallOpenParticleAnimation(u8 taskId) +{ + u8 i; + u8 x, y, priority, subpriority, ballId; + u8 spriteId; + + if (gTasks[taskId].data[7]) + { + gTasks[taskId].data[7]--; + } + else + { + ballId = gTasks[taskId].data[15]; + x = gTasks[taskId].data[1]; + y = gTasks[taskId].data[2]; + priority = gTasks[taskId].data[3]; + subpriority = gTasks[taskId].data[4]; + + for (i = 0; i < 8; i++) + { + spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority); + if (spriteId != MAX_SPRITES) + { + sub_8171E20(); + StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]); + gSprites[spriteId].callback = FanOutBallOpenParticles_Step1; + gSprites[spriteId].oam.priority = priority; + gSprites[spriteId].data[0] = i * 32; + gSprites[spriteId].data[4] = 8; + gSprites[spriteId].data[5] = 2; + gSprites[spriteId].data[6] = 2; + } + } + + gTasks[taskId].data[7] = 8; + if (++gTasks[taskId].data[0] == 2) + { + if (!gMain.inBattle) + gSprites[spriteId].data[7] = 1; + + DestroyTask(taskId); + } + } +} + +static void FanOutBallOpenParticles_Step1(struct Sprite *sprite) +{ + sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]); + sprite->pos2.y = Cos(sprite->data[0], sprite->data[2]); + sprite->data[0] = (sprite->data[0] + sprite->data[4]) & 0xFF; + sprite->data[1] += sprite->data[5]; + sprite->data[2] += sprite->data[6]; + if (++sprite->data[3] == 51) + DestroyBallOpenAnimationParticle(sprite); +} + +static void RepeatBallOpenParticleAnimation(u8 taskId) +{ + u8 i; + u8 x, y, priority, subpriority, ballId; + u8 spriteId; + + ballId = gTasks[taskId].data[15]; + x = gTasks[taskId].data[1]; + y = gTasks[taskId].data[2]; + priority = gTasks[taskId].data[3]; + subpriority = gTasks[taskId].data[4]; + + for (i = 0; i < 12; i++) + { + spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority); + if (spriteId != MAX_SPRITES) + { + sub_8171E20(); + StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]); + gSprites[spriteId].callback = RepeatBallOpenParticleAnimation_Step1; + gSprites[spriteId].oam.priority = priority; + gSprites[spriteId].data[0] = i * 21; + } + } + + if (!gMain.inBattle) + gSprites[spriteId].data[7] = 1; + + DestroyTask(taskId); +} + +static void RepeatBallOpenParticleAnimation_Step1(struct Sprite *sprite) +{ + sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]); + sprite->pos2.y = Cos(sprite->data[0], Sin(sprite->data[0], sprite->data[2])); + sprite->data[0] = (sprite->data[0] + 6) & 0xFF; + sprite->data[1]++; + sprite->data[2]++; + if (++sprite->data[3] == 51) + DestroyBallOpenAnimationParticle(sprite); +} + +static void MasterBallOpenParticleAnimation(u8 taskId) +{ + u8 i, j; + u8 x, y, priority, subpriority, ballId; + u8 spriteId; + + ballId = gTasks[taskId].data[15]; + x = gTasks[taskId].data[1]; + y = gTasks[taskId].data[2]; + priority = gTasks[taskId].data[3]; + subpriority = gTasks[taskId].data[4]; + + for (j = 0; j < 2; j++) + { + for (i = 0; i < 8; i++) + { + spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority); + if (spriteId != MAX_SPRITES) + { + sub_8171E20(); + StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]); + gSprites[spriteId].callback = FanOutBallOpenParticles_Step1; + gSprites[spriteId].oam.priority = priority; + gSprites[spriteId].data[0] = i * 32; + gSprites[spriteId].data[4] = 8; + + if (j == 0) + { + gSprites[spriteId].data[5] = 2; + gSprites[spriteId].data[6] = 1; + } + else + { + gSprites[spriteId].data[5] = 1; + gSprites[spriteId].data[6] = 2; + } + } + } + } + + if (!gMain.inBattle) + gSprites[spriteId].data[7] = 1; + + DestroyTask(taskId); +} + +static void PremierBallOpenParticleAnimation(u8 taskId) +{ + u8 i; + u8 x, y, priority, subpriority, ballId; + u8 spriteId; + + ballId = gTasks[taskId].data[15]; + x = gTasks[taskId].data[1]; + y = gTasks[taskId].data[2]; + priority = gTasks[taskId].data[3]; + subpriority = gTasks[taskId].data[4]; + + for (i = 0; i < 8; i++) + { + spriteId = CreateSprite(&gUnknown_085E51F0[ballId], x, y, subpriority); + if (spriteId != MAX_SPRITES) + { + sub_8171E20(); + StartSpriteAnim(&gSprites[spriteId], gBallOpenParticleAnimNums[ballId]); + gSprites[spriteId].callback = PremierBallOpenParticleAnimation_Step1; + gSprites[spriteId].oam.priority = priority; + gSprites[spriteId].data[0] = i * 32; + } + } + + if (!gMain.inBattle) + gSprites[spriteId].data[7] = 1; + + DestroyTask(taskId); +} + +static void PremierBallOpenParticleAnimation_Step1(struct Sprite *sprite) +{ + sprite->pos2.x = Sin(sprite->data[0], sprite->data[1]); + sprite->pos2.y = Cos(sprite->data[0], Sin(sprite->data[0] & 0x3F, sprite->data[2])); + sprite->data[0] = (sprite->data[0] + 10) & 0xFF; + sprite->data[1]++; + sprite->data[2]++; + if (++sprite->data[3] == 51) + DestroyBallOpenAnimationParticle(sprite); +} + +static void DestroyBallOpenAnimationParticle(struct Sprite *sprite) +{ + int i, j; + int temp; + + if (!gMain.inBattle) + { + temp = sprite->data[7]; // temp var needed to match + if (temp == 1) + DestroySpriteAndFreeResources(sprite); + else + DestroySprite(sprite); + } + else + { + gBattleSpritesDataPtr->animationData->field_A--; + if (gBattleSpritesDataPtr->animationData->field_A == 0) + { + for (i = 0; i < 12; i++) + { + if (FuncIsActiveTask(gBallOpenParticleAnimationFuncs[i]) == TRUE) + break; + } + + if (i == 12) + { + for (j = 0; j < 12; j++) + { + FreeSpriteTilesByTag(gBallOpenParticleSpritesheets[j].tag); + FreeSpritePaletteByTag(gBallOpenParticlePalettes[j].tag); + } + } + + DestroySprite(sprite); + } + else + { + DestroySprite(sprite); + } + } +} + +u8 LaunchBallFadeMonTask(u8 unfadeLater, u8 battler, u32 selectedPalettes, u8 ballId) +{ + u8 taskId; + + taskId = CreateTask(sub_8172AB0, 5); + gTasks[taskId].data[15] = ballId; + gTasks[taskId].data[3] = battler; + gTasks[taskId].data[10] = selectedPalettes; + gTasks[taskId].data[11] = selectedPalettes >> 16; + + if (!unfadeLater) + { + BlendPalette(battler * 16 + 0x100, 16, 0, gUnknown_085E5310[ballId]); + gTasks[taskId].data[1] = 1; + } + else + { + BlendPalette(battler * 16 + 0x100, 16, 16, gUnknown_085E5310[ballId]); + gTasks[taskId].data[0] = 16; + gTasks[taskId].data[1] = -1; + gTasks[taskId].func = sub_8172B40; + } + + BeginNormalPaletteFade(selectedPalettes, 0, 0, 16, RGB(31, 31, 31)); + return taskId; +} + +static void sub_8172AB0(u8 taskId) +{ + u8 ballId = gTasks[taskId].data[15]; + + if (gTasks[taskId].data[2] <= 16) + { + BlendPalette(gTasks[taskId].data[3] * 16 + 0x100, 16, gTasks[taskId].data[0], gUnknown_085E5310[ballId]); + gTasks[taskId].data[0] += gTasks[taskId].data[1]; + gTasks[taskId].data[2]++; + } + else if (!gPaletteFade.active) + { + u32 selectedPalettes = (u16)gTasks[taskId].data[10] | ((u16)gTasks[taskId].data[11] << 16); + BeginNormalPaletteFade(selectedPalettes, 0, 16, 0, RGB(31, 31, 31)); + DestroyTask(taskId); + } +} + +static void sub_8172B40(u8 taskId) +{ + if (!gPaletteFade.active) + { + u32 selectedPalettes = (u16)gTasks[taskId].data[10] | ((u16)gTasks[taskId].data[11] << 16); + BeginNormalPaletteFade(selectedPalettes, 0, 16, 0, RGB(31, 31, 31)); + gTasks[taskId].func = sub_8172B90; + } +} + +static void sub_8172B90(u8 taskId) +{ + u8 ballId = gTasks[taskId].data[15]; + + if (gTasks[taskId].data[2] <= 16) + { + BlendPalette(gTasks[taskId].data[3] * 16 + 0x100, 16, gTasks[taskId].data[0], gUnknown_085E5310[ballId]); + gTasks[taskId].data[0] += gTasks[taskId].data[1]; + gTasks[taskId].data[2]++; + } + else + { + DestroyTask(taskId); + } +} + +void sub_8172BF0(u8 taskId) +{ + u8 spriteId; + u32 x; + u32 done; + + done = FALSE; + spriteId = gBattlerSpriteIds[gBattleAnimAttacker]; + switch (gTasks[taskId].data[10]) + { + case 0: + gTasks[taskId].data[11] = gBattleAnimArgs[0]; + gTasks[taskId].data[0] += 0x500; + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gSprites[spriteId].pos2.x += gTasks[taskId].data[0] >> 8; + else + gSprites[spriteId].pos2.x -= gTasks[taskId].data[0] >> 8; + + gTasks[taskId].data[0] &= 0xFF; + x = gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x + 32; + if (x > 304) + gTasks[taskId].data[10]++; + break; + case 1: + LoadBattleMonGfxAndAnimate(gBattleAnimAttacker, gTasks[taskId].data[11], spriteId); + gTasks[taskId].data[10]++; + break; + case 2: + gTasks[taskId].data[0] += 0x500; + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + gSprites[spriteId].pos2.x -= gTasks[taskId].data[0] >> 8; + else + gSprites[spriteId].pos2.x += gTasks[taskId].data[0] >> 8; + + gTasks[taskId].data[0] &= 0xFF; + if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) + { + if (gSprites[spriteId].pos2.x <= 0) + { + gSprites[spriteId].pos2.x = 0; + // done = FALSE; // fakematching--can't get the tail merge correct + goto DONE; + } + } + else + { + if (gSprites[spriteId].pos2.x >= 0) + { + gSprites[spriteId].pos2.x = 0; + done = TRUE; + } + } + + if (done) + { + DONE: + DestroyAnimVisualTask(taskId); + } + break; + } +} + +void sub_8172D98(u8 taskId) +{ + u8 spriteId; + + switch (gTasks[taskId].data[15]) + { + case 0: + if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == B_POSITION_OPPONENT_LEFT) + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG1 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); + else + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); + + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); + gTasks[taskId].data[15]++; + break; + case 1: + if (gTasks[taskId].data[1]++ > 1) + { + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[0]++; + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16 - gTasks[taskId].data[0], gTasks[taskId].data[0])); + if (gTasks[taskId].data[0] == 16) + gTasks[taskId].data[15]++; + } + break; + case 2: + spriteId = gBattlerSpriteIds[gBattleAnimAttacker]; + RequestDma3Fill(0, (void *)OBJ_VRAM0 + gSprites[spriteId].oam.tileNum * TILE_SIZE_4BPP, 0x800, 1); + ClearBehindSubstituteBit(gBattleAnimAttacker); + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_8172E9C(u8 taskId) +{ + gBattleAnimArgs[7] = gBattleSpritesDataPtr->battlerData[gBattleAnimAttacker].behindSubstitute; + DestroyAnimVisualTask(taskId); +} + +void sub_8172ED0(u8 taskId) +{ + gBattleAnimTarget = gEffectBattler; + DestroyAnimVisualTask(taskId); +} + +void sub_8172EF0(u8 battler, struct Pokemon *mon) +{ + int isShiny; + u32 otId, personality; + u32 shinyValue; + u8 taskId1, taskId2; + + isShiny = 0; + gBattleSpritesDataPtr->healthBoxesData[battler].flag_x80 = 1; + otId = GetMonData(mon, MON_DATA_OT_ID); + personality = GetMonData(mon, MON_DATA_PERSONALITY); + + if (IsBattlerSpriteVisible(battler)) + { + shinyValue = HIHALF(otId) ^ LOHALF(otId) ^ HIHALF(personality) ^ LOHALF(personality); + if (shinyValue < 8) + isShiny = TRUE; + + if (isShiny) + { + if (GetSpriteTileStartByTag(0x27F9) == 0xFFFF) + { + LoadCompressedSpriteSheetUsingHeap(&gBattleAnimPicTable[233]); + LoadCompressedSpritePaletteUsingHeap(&gBattleAnimPaletteTable[233]); + } + + taskId1 = CreateTask(sub_8172FEC, 10); + taskId2 = CreateTask(sub_8172FEC, 10); + gTasks[taskId1].data[0] = battler; + gTasks[taskId2].data[0] = battler; + gTasks[taskId1].data[1] = 0; + gTasks[taskId2].data[1] = 1; + return; + } + } + + gBattleSpritesDataPtr->healthBoxesData[battler].field_1_x1 = 1; +} + +static void sub_8172FEC(u8 taskId) +{ + u8 battler; + u8 x, y; + u8 spriteId; + u16 counter; + s16 state; + u8 pan; + + if (gTasks[taskId].data[13] < 60) + { + gTasks[taskId].data[13]++; + return; + } + + if (gBattleSpritesDataPtr->animationData->field_A) + return; + + counter = gTasks[taskId].data[10]++; + if (counter & 3) + return; + + battler = gTasks[taskId].data[0]; + x = GetBattlerSpriteCoord(battler, 0); + y = GetBattlerSpriteCoord(battler, 1); + state = gTasks[taskId].data[11]; + if (state == 0) + { + spriteId = CreateSprite(&gUnknown_085CE388, x, y, 5); + } + else if (state >= 0 && gTasks[taskId].data[11] < 4) + { + spriteId = CreateSprite(&gMiniTwinklingStarSpriteTemplate, x, y, 5); + gSprites[spriteId].oam.tileNum += 4; + } + else + { + spriteId = CreateSprite(&gMiniTwinklingStarSpriteTemplate, x, y, 5); + gSprites[spriteId].oam.tileNum += 5; + } + + if (gTasks[taskId].data[1] == 0) + { + gSprites[spriteId].callback = sub_81731FC; + } + else + { + gSprites[spriteId].callback = sub_8173250; + gSprites[spriteId].pos2.x = -32; + gSprites[spriteId].pos2.y = 32; + gSprites[spriteId].invisible = 1; + if (gTasks[taskId].data[11] == 0) + { + if (GetBattlerSide(battler) == B_SIDE_PLAYER) + pan = 192; + else + pan = 63; + + PlaySE12WithPanning(SE_REAPOKE, pan); + } + } + + gSprites[spriteId].data[0] = taskId; + gTasks[taskId].data[11]++; + if (spriteId != MAX_SPRITES) + gTasks[taskId].data[12]++; + + if (gTasks[taskId].data[11] == 5) + gTasks[taskId].func = sub_81731B0; +} + +static void sub_81731B0(u8 taskId) +{ + u8 battler; + + if (gTasks[taskId].data[12] == 0) + { + if (gTasks[taskId].data[1] == 1) + { + battler = gTasks[taskId].data[0]; + gBattleSpritesDataPtr->healthBoxesData[battler].field_1_x1 = 1; + } + + DestroyTask(taskId); + } +} + +static void sub_81731FC(struct Sprite *sprite) +{ + sprite->pos2.x = Sin(sprite->data[1], 24); + sprite->pos2.y = Cos(sprite->data[1], 24); + sprite->data[1] += 12; + if (sprite->data[1] > 0xFF) + { + gTasks[sprite->data[0]].data[12]--; + FreeSpriteOamMatrix(sprite); + DestroySprite(sprite); + } +} + +static void sub_8173250(struct Sprite *sprite) +{ + if (sprite->data[1] < 4) + { + sprite->data[1]++; + } + else + { + sprite->invisible = 0; + sprite->pos2.x += 5; + sprite->pos2.y -= 5; + if (sprite->pos2.x > 32) + { + gTasks[sprite->data[0]].data[12]--; + FreeSpriteOamMatrix(sprite); + DestroySprite(sprite); + } + } +} + +void sub_81732B0(u8 taskId) +{ + u8 paletteIndex; + + LoadCompressedSpriteSheetUsingHeap(&gBattleAnimPicTable[269]); + LoadCompressedSpritePaletteUsingHeap(&gBattleAnimPaletteTable[269]); + paletteIndex = IndexOfSpritePaletteTag(0x281D); // unused + DestroyAnimVisualTask(taskId); +} + +void sub_81732E4(u8 taskId) +{ + FreeSpriteTilesByTag(0x281D); + FreeSpritePaletteByTag(0x281D); + DestroyAnimVisualTask(taskId); +} + +static void sub_817330C(struct Sprite *sprite) +{ + InitSpritePosToAnimAttacker(sprite, 0); + sprite->data[0] = 30; + sprite->data[2] = GetBattlerSpriteCoord(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), 0) + gBattleAnimArgs[2]; + sprite->data[4] = GetBattlerSpriteCoord(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), 1) + gBattleAnimArgs[3]; + sprite->data[5] = -32; + InitAnimArcTranslation(sprite); + gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].callback = sub_8039E84; + sprite->callback = sub_817339C; +} + +static void sub_817339C(struct Sprite *sprite) +{ + if (gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].animCmdIndex == 1) + sprite->callback = sub_81733D4; +} + +static void sub_81733D4(struct Sprite *sprite) +{ + if (TranslateAnimHorizontalArc(sprite)) + { + sprite->data[0] = 0; + sprite->invisible = 1; + sprite->callback = sub_8173400; + } +} + +static void sub_8173400(struct Sprite *sprite) +{ + if (gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].animEnded) + { + if (++sprite->data[0] > 0) + { + StartSpriteAnim(&gSprites[gBattlerSpriteIds[gBattleAnimAttacker]], 0); + DestroyAnimSprite(sprite); + } + } +} + +void sub_817345C(u8 taskId) +{ + switch (gBattleAnimArgs[0]) + { + case 0: + gBattleAnimAttacker = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + gBattleAnimTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + break; + case 1: + gBattleAnimAttacker = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); + gBattleAnimTarget = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT); + break; + } + + DestroyAnimVisualTask(taskId); +} + +void AnimTask_GetTrappedMoveAnimId(u8 taskId) +{ + if (gBattleSpritesDataPtr->animationData->animArg == 83) + gBattleAnimArgs[0] = 1; + else if (gBattleSpritesDataPtr->animationData->animArg == 250) + gBattleAnimArgs[0] = 2; + else if (gBattleSpritesDataPtr->animationData->animArg == 128) + gBattleAnimArgs[0] = 3; + else if (gBattleSpritesDataPtr->animationData->animArg == 328) + gBattleAnimArgs[0] = 4; + else + gBattleAnimArgs[0] = 0; + + DestroyAnimVisualTask(taskId); +} + +void sub_817351C(u8 taskId) +{ + gBattleAnimAttacker = gBattleSpritesDataPtr->animationData->animArg; + gBattleAnimTarget = gBattleSpritesDataPtr->animationData->animArg >> 8; + DestroyAnimVisualTask(taskId); +} diff --git a/src/battle_anim_status_effects.c b/src/battle_anim_status_effects.c new file mode 100644 index 000000000..1271680e0 --- /dev/null +++ b/src/battle_anim_status_effects.c @@ -0,0 +1,534 @@ +#include "global.h" +#include "battle.h" +#include "battle_anim.h" +#include "decompress.h" +#include "gpu_regs.h" +#include "palette.h" +#include "sprite.h" +#include "task.h" +#include "trig.h" +#include "util.h" +#include "constants/battle_anim.h" +#include "constants/rgb.h" + +extern const struct CompressedSpriteSheet gBattleAnimPicTable[]; +extern const struct CompressedSpritePalette gBattleAnimPaletteTable[]; +extern const u8 *const gBattleAnims_StatusConditions[]; +extern const struct OamData gUnknown_08524904; +extern const struct OamData gUnknown_08524A3C; + +// This file's functions. +static void sub_80A9DB4(u8 taskId); +static void sub_80A9FD0(u8 taskId); +static void sub_80AA020(u8 taskId); +static void sub_80AA0D0(u8 taskId); +static void sub_80AA124(u8 taskId); +static void Task_DoStatusAnimation(u8 taskId); +static void sub_80A9E44(struct Sprite *sprite); +static void sub_80A9E78(struct Sprite *sprite); + +// const rom data +static const union AnimCmd sSpriteAnim_853EDE4[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(4, 3), + ANIMCMD_FRAME(8, 3), + ANIMCMD_FRAME(12, 3), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const sSpriteAnimTable_853EDF8[] = +{ + sSpriteAnim_853EDE4 +}; + +const struct SpriteTemplate gUnknown_0853EDFC = +{ + .tileTag = ANIM_TAG_UNUSED_ORB, + .paletteTag = ANIM_TAG_UNUSED_ORB, + .oam = &gUnknown_0852490C, + .anims = sSpriteAnimTable_853EDF8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A8AEC, +}; + +const struct SpriteTemplate gUnknown_0853EE14 = +{ + .tileTag = ANIM_TAG_UNUSED_ORB, + .paletteTag = ANIM_TAG_UNUSED_ORB, + .oam = &gUnknown_0852490C, + .anims = sSpriteAnimTable_853EDF8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A8A6C, +}; + +static const union AnimCmd sSpriteAnim_853EE2C[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const sSpriteAnimTable_853EE34[] = +{ + sSpriteAnim_853EE2C +}; + +const struct SpriteTemplate gUnknown_0853EE38 = +{ + .tileTag = ANIM_TAG_WEATHER_BALL, + .paletteTag = ANIM_TAG_WEATHER_BALL, + .oam = &gUnknown_08524914, + .anims = sSpriteAnimTable_853EE34, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A8E30, +}; + +const struct SpriteTemplate gUnknown_0853EE50 = +{ + .tileTag = ANIM_TAG_WEATHER_BALL, + .paletteTag = ANIM_TAG_WEATHER_BALL, + .oam = &gUnknown_08524914, + .anims = sSpriteAnimTable_853EE34, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A8EE4, +}; + +static const union AnimCmd sSpriteAnim_853EE68[] = +{ + ANIMCMD_FRAME(0, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(32, 3), + ANIMCMD_FRAME(48, 3), + ANIMCMD_FRAME(64, 3), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_853EE80[] = +{ + sSpriteAnim_853EE68 +}; + +const struct SpriteTemplate gUnknown_0853EE84 = +{ + .tileTag = ANIM_TAG_SPARKLE_4, + .paletteTag = ANIM_TAG_SPARKLE_4, + .oam = &gUnknown_08524914, + .anims = sSpriteAnimTable_853EE80, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A8B64, +}; + +const struct SpriteTemplate gUnknown_0853EE9C = +{ + .tileTag = ANIM_TAG_UNUSED_MONSTER_FOOT, + .paletteTag = ANIM_TAG_UNUSED_MONSTER_FOOT, + .oam = &gUnknown_08524914, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A8AEC, +}; + +static const union AnimCmd sSpriteAnim_853EEB4[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_853EEBC[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd sSpriteAnim_853EEC4[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const sSpriteAnimTable_853EECC[] = +{ + sSpriteAnim_853EEB4, + sSpriteAnim_853EEBC, + sSpriteAnim_853EEC4 +}; + +const struct SpriteTemplate gUnknown_0853EED8 = +{ + .tileTag = ANIM_TAG_IMPACT, + .paletteTag = ANIM_TAG_IMPACT, + .oam = &gUnknown_08524914, + .anims = sSpriteAnimTable_853EECC, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A8AEC, +}; + +static const union AnimCmd sSpriteAnim_853EEF0[] = +{ + ANIMCMD_FRAME(0, 15), + ANIMCMD_JUMP(0) +}; + +static const union AnimCmd *const sSpriteAnimTable_853EEF8[] = +{ + sSpriteAnim_853EEF0 +}; + +static const union AffineAnimCmd sSpriteAffineAnim_853EEFC[] = +{ + AFFINEANIMCMD_FRAME(96, 96, 0, 0), + AFFINEANIMCMD_FRAME(2, 2, 0, 1), + AFFINEANIMCMD_JUMP(1) +}; + +static const union AffineAnimCmd *const sSpriteAffineAnimTable_853EEF8[] = +{ + sSpriteAffineAnim_853EEFC +}; + +const struct SpriteTemplate gUnknown_0853EF18 = +{ + .tileTag = ANIM_TAG_UNUSED_ORB, + .paletteTag = ANIM_TAG_UNUSED_ORB, + .oam = &gUnknown_085249CC, + .anims = sSpriteAnimTable_853EEF8, + .images = NULL, + .affineAnims = sSpriteAffineAnimTable_853EEF8, + .callback = sub_80A8A6C, +}; + +static const struct Subsprite gUnknown_0853EF30[] = +{ + {.x = -16, .y = -16, .shape = ST_OAM_SQUARE, .size = 3, .tileOffset = 0, .priority = 2}, + {.x = -16, .y = 48, .shape = ST_OAM_H_RECTANGLE, .size = 3, .tileOffset = 64, .priority = 2}, + {.x = 48, .y = -16, .shape = ST_OAM_V_RECTANGLE, .size = 3, .tileOffset = 96, .priority = 2}, + {.x = 48, .y = 48, .shape = ST_OAM_SQUARE, .size = 2, .tileOffset = 128, .priority = 2}, +}; + +static const struct SubspriteTable gUnknown_0853EF40[] = +{ + {ARRAY_COUNT(gUnknown_0853EF30), gUnknown_0853EF30}, +}; + +static const struct SpriteTemplate gUnknown_0853EF48 = +{ + .tileTag = ANIM_TAG_ICE_CUBE, + .paletteTag = ANIM_TAG_ICE_CUBE, + .oam = &gUnknown_08524A3C, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy, +}; + +static const struct SpriteTemplate gUnknown_0853EF60 = +{ + .tileTag = ANIM_TAG_CIRCLE_IMPACT, + .paletteTag = ANIM_TAG_CIRCLE_IMPACT, + .oam = &gUnknown_08524904, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A9E44, +}; + +// code +u8 sub_80A9C70(u8 battlerId, bool8 b) +{ + u8 battlerSpriteId = gBattlerSpriteIds[battlerId]; + u8 taskId = CreateTask(sub_80A9DB4, 10); + u8 spriteId2; + u8 i; + + LoadCompressedSpriteSheetUsingHeap(&gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(ANIM_TAG_CIRCLE_IMPACT)]); + LoadCompressedSpritePaletteUsingHeap(&gBattleAnimPaletteTable[GET_TRUE_SPRITE_INDEX(ANIM_TAG_CIRCLE_IMPACT)]); + gTasks[taskId].data[0] = battlerId; + if (b) + { + gTasks[taskId].data[1] = RGB_RED; + for (i = 0; i < 10; i++) + { + spriteId2 = CreateSprite(&gUnknown_0853EF60, gSprites[battlerSpriteId].pos1.x, gSprites[battlerSpriteId].pos1.y + 32, 0); + gSprites[spriteId2].data[0] = i * 51; + gSprites[spriteId2].data[1] = -256; + gSprites[spriteId2].invisible = TRUE; + if (i > 4) + gSprites[spriteId2].data[6] = 21; + } + } + else + { + gTasks[taskId].data[1] = RGB_BLUE; + for (i = 0; i < 10; i++) + { + spriteId2 = CreateSprite(&gUnknown_0853EF60, gSprites[battlerSpriteId].pos1.x, gSprites[battlerSpriteId].pos1.y - 32, 0); + gSprites[spriteId2].data[0] = i * 51; + gSprites[spriteId2].data[1] = 256; + gSprites[spriteId2].invisible = TRUE; + if (i > 4) + gSprites[spriteId2].data[6] = 21; + } + } + gSprites[spriteId2].data[7] = 1; + return taskId; +} + +static void sub_80A9DB4(u8 taskId) +{ + if (gTasks[taskId].data[2] == 2) + { + gTasks[taskId].data[2] = 0; + BlendPalette(0x100 + gTasks[taskId].data[0] * 16, 16, gTasks[taskId].data[4], gTasks[taskId].data[1]); + if (gTasks[taskId].data[5] == 0) + { + gTasks[taskId].data[4]++; + if (gTasks[taskId].data[4] > 8) + gTasks[taskId].data[5] ^= 1; + } + else + { + u16 var = gTasks[taskId].data[4]; + + gTasks[taskId].data[4]--; + if (gTasks[taskId].data[4] < 0) + { + gTasks[taskId].data[4] = var; + gTasks[taskId].data[5] ^= 1; + gTasks[taskId].data[3]++; + if (gTasks[taskId].data[3] == 2) + DestroyTask(taskId); + } + } + } + else + { + gTasks[taskId].data[2]++; + } +} + +static void sub_80A9E44(struct Sprite *sprite) +{ + if (sprite->data[6] == 0) + { + sprite->invisible = FALSE; + sprite->callback = sub_80A9E78; + sub_80A9E78(sprite); + } + else + { + sprite->data[6]--; + } +} + +static void sub_80A9E78(struct Sprite *sprite) +{ + sprite->pos2.x = Cos(sprite->data[0], 32); + sprite->pos2.y = Sin(sprite->data[0], 8); + if (sprite->data[0] < 128) + sprite->subpriority = 29; + else + sprite->subpriority = 31; + sprite->data[0] = (sprite->data[0] + 8) & 0xFF; + sprite->data[5] += sprite->data[1]; + sprite->pos2.y += sprite->data[5] >> 8; + sprite->data[2]++; + if (sprite->data[2] == 52) + { + if (sprite->data[7]) + DestroySpriteAndFreeResources(sprite); + else + DestroySprite(sprite); + } +} + +void sub_80A9EF4(u8 taskId) +{ + s16 x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2) - 32; + s16 y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET) - 36; + u8 spriteId; + + if (IsContest()) + x -= 6; + SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); + spriteId = CreateSprite(&gUnknown_0853EF48, x, y, 4); + if (GetSpriteTileStartByTag(ANIM_TAG_ICE_CUBE) == 0xFFFF) + gSprites[spriteId].invisible = TRUE; + SetSubspriteTables(&gSprites[spriteId], gUnknown_0853EF40); + gTasks[taskId].data[15] = spriteId; + gTasks[taskId].func = sub_80A9FD0; +} + +static void sub_80A9FD0(u8 taskId) +{ + gTasks[taskId].data[1]++; + if (gTasks[taskId].data[1] == 10) + { + gTasks[taskId].func = sub_80AA020; + gTasks[taskId].data[1] = 0; + } + else + { + u8 var = gTasks[taskId].data[1]; + + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(var, 16 - var)); + } +} + +static void sub_80AA020(u8 taskId) +{ + u8 palIndex = IndexOfSpritePaletteTag(ANIM_TAG_ICE_CUBE); + + if (gTasks[taskId].data[1]++ > 13) + { + gTasks[taskId].data[2]++; + if (gTasks[taskId].data[2] == 3) + { + u16 temp; + + temp = gPlttBufferFaded[0x100 + palIndex * 16 + 13]; + gPlttBufferFaded[0x100 + palIndex * 16 + 13] = gPlttBufferFaded[0x100 + palIndex * 16 + 14]; + gPlttBufferFaded[0x100 + palIndex * 16 + 14] = gPlttBufferFaded[0x100 + palIndex * 16 + 15]; + gPlttBufferFaded[0x100 + palIndex * 16 + 15] = temp; + + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3]++; + if (gTasks[taskId].data[3] == 3) + { + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[4]++; + if (gTasks[taskId].data[4] == 2) + { + gTasks[taskId].data[1] = 9; + gTasks[taskId].func = sub_80AA0D0; + } + } + } + } +} + +static void sub_80AA0D0(u8 taskId) +{ + gTasks[taskId].data[1]--; + if (gTasks[taskId].data[1] == -1) + { + gTasks[taskId].func = sub_80AA124; + gTasks[taskId].data[1] = 0; + } + else + { + u8 var = gTasks[taskId].data[1]; + + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(var, 16 - var)); + } +} + +static void sub_80AA124(u8 taskId) +{ + gTasks[taskId].data[1]++; + if (gTasks[taskId].data[1] == 37) + { + u8 spriteId = gTasks[taskId].data[15]; + + FreeSpriteOamMatrix(&gSprites[spriteId]); + DestroySprite(&gSprites[spriteId]); + } + else if (gTasks[taskId].data[1] == 39) + { + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + DestroyAnimVisualTask(taskId); + } +} + +#define CASE(by, stat) case (STAT_ANIM_##by + stat - 1) + +void AnimTask_StatsChange(u8 taskId) +{ + bool16 goesDown = FALSE; + s16 animStatId = 0; + bool16 sharply = FALSE; + + switch (gBattleSpritesDataPtr->animationData->animArg) + { + CASE(PLUS1, STAT_ATK): goesDown = FALSE; animStatId = 0; break; + CASE(PLUS1, STAT_DEF): goesDown = FALSE; animStatId = 1; break; + CASE(PLUS1, STAT_SPEED): goesDown = FALSE; animStatId = 3; break; + CASE(PLUS1, STAT_SPATK): goesDown = FALSE; animStatId = 5; break; + CASE(PLUS1, STAT_SPDEF): goesDown = FALSE; animStatId = 6; break; + CASE(PLUS1, STAT_ACC): goesDown = FALSE; animStatId = 2; break; + CASE(PLUS1, STAT_EVASION): goesDown = FALSE; animStatId = 4; break; + + CASE(MINUS1, STAT_ATK): goesDown = TRUE; animStatId = 0; break; + CASE(MINUS1, STAT_DEF): goesDown = TRUE; animStatId = 1; break; + CASE(MINUS1, STAT_SPEED): goesDown = TRUE; animStatId = 3; break; + CASE(MINUS1, STAT_SPATK): goesDown = TRUE; animStatId = 5; break; + CASE(MINUS1, STAT_SPDEF): goesDown = TRUE; animStatId = 6; break; + CASE(MINUS1, STAT_ACC): goesDown = TRUE; animStatId = 2; break; + CASE(MINUS1, STAT_EVASION): goesDown = TRUE; animStatId = 4; break; + + CASE(PLUS2, STAT_ATK): goesDown = FALSE; animStatId = 0; sharply = TRUE; break; + CASE(PLUS2, STAT_DEF): goesDown = FALSE; animStatId = 1; sharply = TRUE; break; + CASE(PLUS2, STAT_SPEED): goesDown = FALSE; animStatId = 3; sharply = TRUE; break; + CASE(PLUS2, STAT_SPATK): goesDown = FALSE; animStatId = 5; sharply = TRUE; break; + CASE(PLUS2, STAT_SPDEF): goesDown = FALSE; animStatId = 6; sharply = TRUE; break; + CASE(PLUS2, STAT_ACC): goesDown = FALSE; animStatId = 2; sharply = TRUE; break; + CASE(PLUS2, STAT_EVASION): goesDown = FALSE; animStatId = 4; sharply = TRUE; break; + + CASE(MINUS2, STAT_ATK): goesDown = TRUE; animStatId = 0; sharply = TRUE; break; + CASE(MINUS2, STAT_DEF): goesDown = TRUE; animStatId = 1; sharply = TRUE; break; + CASE(MINUS2, STAT_SPEED): goesDown = TRUE; animStatId = 3; sharply = TRUE; break; + CASE(MINUS2, STAT_SPATK): goesDown = TRUE; animStatId = 5; sharply = TRUE; break; + CASE(MINUS2, STAT_SPDEF): goesDown = TRUE; animStatId = 6; sharply = TRUE; break; + CASE(MINUS2, STAT_ACC): goesDown = TRUE; animStatId = 2; sharply = TRUE; break; + CASE(MINUS2, STAT_EVASION): goesDown = TRUE; animStatId = 4; sharply = TRUE; break; + + case STAT_ANIM_MULTIPLE_PLUS1: goesDown = FALSE; animStatId = 0xFF; sharply = FALSE; break; + case STAT_ANIM_MULTIPLE_PLUS2: goesDown = FALSE; animStatId = 0xFF; sharply = TRUE; break; + case STAT_ANIM_MULTIPLE_MINUS1: goesDown = TRUE; animStatId = 0xFF; sharply = FALSE; break; + case STAT_ANIM_MULTIPLE_MINUS2: goesDown = TRUE; animStatId = 0xFF; sharply = TRUE; break; + + default: + DestroyAnimVisualTask(taskId); + return; + } + + gBattleAnimArgs[0] = goesDown; + gBattleAnimArgs[1] = animStatId; + gBattleAnimArgs[2] = 0; + gBattleAnimArgs[3] = 0; + gBattleAnimArgs[4] = sharply; + gTasks[taskId].func = sub_8116EB4; + sub_8116EB4(taskId); +} + +#undef CASE + +void LaunchStatusAnimation(u8 battlerId, u8 statusAnimId) +{ + u8 taskId; + + gBattleAnimAttacker = battlerId; + gBattleAnimTarget = battlerId; + LaunchBattleAnimation(gBattleAnims_StatusConditions, statusAnimId, 0); + taskId = CreateTask(Task_DoStatusAnimation, 10); + gTasks[taskId].data[0] = battlerId; +} + +static void Task_DoStatusAnimation(u8 taskId) +{ + gAnimScriptCallback(); + if (!gAnimScriptActive) + { + gBattleSpritesDataPtr->healthBoxesData[gTasks[taskId].data[0]].statusAnimActive = FALSE; + DestroyTask(taskId); + } +} diff --git a/src/battle_main.c b/src/battle_main.c index 0f593fef6..19fd01e3c 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -1,5 +1,6 @@ #include "global.h" #include "battle.h" +#include "battle_anim.h" #include "battle_ai_script_commands.h" #include "battle_arena.h" #include "battle_controllers.h" diff --git a/src/battle_message.c b/src/battle_message.c index 6762cd416..f93765b89 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1,5 +1,6 @@ #include "global.h" #include "battle.h" +#include "battle_anim.h" #include "battle_controllers.h" #include "battle_message.h" #include "battle_setup.h" diff --git a/src/battle_tv.c b/src/battle_tv.c index d3ca9b61f..26df08786 100644 --- a/src/battle_tv.c +++ b/src/battle_tv.c @@ -1,6 +1,7 @@ #include "global.h" #include "pokemon.h" #include "battle.h" +#include "battle_anim.h" #include "battle_tv.h" #include "constants/battle_string_ids.h" #include "constants/battle_anim.h" diff --git a/src/battle_util.c b/src/battle_util.c index aa88cf952..a7962b7f7 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -1,5 +1,6 @@ #include "global.h" #include "battle.h" +#include "battle_anim.h" #include "constants/battle_script_commands.h" #include "constants/abilities.h" #include "constants/moves.h" diff --git a/src/battle_util2.c b/src/battle_util2.c index 9c0d55a57..5ef969fd5 100644 --- a/src/battle_util2.c +++ b/src/battle_util2.c @@ -1,5 +1,6 @@ #include "global.h" #include "battle.h" +#include "battle_anim.h" #include "battle_controllers.h" #include "alloc.h" #include "pokemon.h" diff --git a/src/pokemon.c b/src/pokemon.c index 1ee9c4cff..7c26b4c22 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -2,6 +2,7 @@ #include "alloc.h" #include "apprentice.h" #include "battle.h" +#include "battle_anim.h" #include "battle_controllers.h" #include "battle_message.h" #include "battle_pike.h" diff --git a/src/recorded_battle.c b/src/recorded_battle.c index c11dc55e7..acd4c2ce6 100644 --- a/src/recorded_battle.c +++ b/src/recorded_battle.c @@ -1,5 +1,6 @@ #include "global.h" #include "battle.h" +#include "battle_anim.h" #include "recorded_battle.h" #include "main.h" #include "pokemon.h" -- cgit v1.2.3 From d13563b174119121964c2da62380bce44743b93f Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 31 Mar 2019 14:09:40 -0500 Subject: Document some faraway_island code --- src/event_object_movement.c | 4 +- src/faraway_island.c | 131 ++++++++++++++++++++++---------------------- 2 files changed, 68 insertions(+), 67 deletions(-) (limited to 'src') diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 30dffd8d7..6a3527bc1 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -4414,8 +4414,8 @@ bool8 CopyablePlayerMovement_GoSpeed0(struct EventObject *eventObject, struct Sp direction = playerDirection; if (EventObjectIsFarawayIslandMew(eventObject)) { - direction = sub_81D427C(); - if (direction == 0) + direction = GetMewMoveDirection(); + if (direction == DIR_NONE) { direction = playerDirection; direction = state_to_direction(gInitialMovementTypeFacingDirections[eventObject->movementType], eventObject->directionSequenceIndex, direction); diff --git a/src/faraway_island.c b/src/faraway_island.c index 1c8dff14e..6a835a02b 100755 --- a/src/faraway_island.c +++ b/src/faraway_island.c @@ -17,12 +17,13 @@ static u8 sub_81D4C9C(struct EventObject*, u8); static u8 sub_81D4C58(struct EventObject*, u8); static u8 sub_81D4CE0(struct EventObject*, u8); static u8 sub_81D4D24(u8); -static bool8 sub_81D4834(s16, s16); +static bool8 CanMewWalkToCoords(s16, s16); -extern u8 gUnknown_0203CF50; -extern s16 gUnknown_030012F8; -extern s16 gUnknown_030012FA; -extern u8 gUnknown_030012FC[4]; +static EWRAM_DATA u8 sUnknown_0203CF50 = 0; + +static s16 sPlayerToMewDeltaX; +static s16 sPlayerToMewDeltaY; +static u8 sMewDirectionCandidates[4]; extern const struct SpritePalette gFieldEffectObjectPaletteInfo1; extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[]; @@ -35,23 +36,23 @@ static const s16 sFarawayIslandRockCoords[4][2] = {20, 20}, }; -static u8 sub_81D4258(void) +static u8 GetMewEventObjectId(void) { u8 eventObjectId; TryGetEventObjectIdByLocalIdAndMap(1, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &eventObjectId); return eventObjectId; } -u32 sub_81D427C(void) +u32 GetMewMoveDirection(void) { u8 i; int skip; - struct EventObject *mew = &gEventObjects[sub_81D4258()]; + struct EventObject *mew = &gEventObjects[GetMewEventObjectId()]; - gUnknown_030012F8 = gEventObjects[gPlayerAvatar.eventObjectId].previousCoords.x - mew->currentCoords.x; - gUnknown_030012FA = gEventObjects[gPlayerAvatar.eventObjectId].previousCoords.y - mew->currentCoords.y; - for (i = 0; i < ARRAY_COUNT(gUnknown_030012FC); i++) - gUnknown_030012FC[i] = DIR_NONE; + sPlayerToMewDeltaX = gEventObjects[gPlayerAvatar.eventObjectId].previousCoords.x - mew->currentCoords.x; + sPlayerToMewDeltaY = gEventObjects[gPlayerAvatar.eventObjectId].previousCoords.y - mew->currentCoords.y; + for (i = 0; i < ARRAY_COUNT(sMewDirectionCandidates); i++) + sMewDirectionCandidates[i] = DIR_NONE; if (gEventObjects[gPlayerAvatar.eventObjectId].previousCoords.x == gEventObjects[gPlayerAvatar.eventObjectId].currentCoords.x && gEventObjects[gPlayerAvatar.eventObjectId].previousCoords.y == gEventObjects[gPlayerAvatar.eventObjectId].currentCoords.y) @@ -85,33 +86,33 @@ u32 sub_81D427C(void) if (!skip) { - if (gUnknown_030012F8 > 0) + if (sPlayerToMewDeltaX > 0) { if (mew->currentCoords.x + 1 == gEventObjects[gPlayerAvatar.eventObjectId].previousCoords.x) { - if (sub_81D4834(mew->currentCoords.x + 1, mew->currentCoords.y)) + if (CanMewWalkToCoords(mew->currentCoords.x + 1, mew->currentCoords.y)) return DIR_EAST; } } - else if (gUnknown_030012F8 < 0) + else if (sPlayerToMewDeltaX < 0) { if (mew->currentCoords.x - 1 == gEventObjects[gPlayerAvatar.eventObjectId].previousCoords.x) { - if (sub_81D4834(mew->currentCoords.x - 1, mew->currentCoords.y)) + if (CanMewWalkToCoords(mew->currentCoords.x - 1, mew->currentCoords.y)) return DIR_WEST; } } if (mew->currentCoords.x == gEventObjects[gPlayerAvatar.eventObjectId].previousCoords.x) { - if (gUnknown_030012FA > 0) + if (sPlayerToMewDeltaY > 0) { - if (sub_81D4834(mew->currentCoords.x, mew->currentCoords.y - 1)) + if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y - 1)) return DIR_NORTH; } else { - if (sub_81D4834(mew->currentCoords.x, mew->currentCoords.y + 1)) + if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y + 1)) return DIR_SOUTH; } } @@ -134,33 +135,33 @@ u32 sub_81D427C(void) if (!skip) { - if (gUnknown_030012FA > 0) + if (sPlayerToMewDeltaY > 0) { if (mew->currentCoords.y + 1 == gEventObjects[gPlayerAvatar.eventObjectId].previousCoords.y) { - if (sub_81D4834(mew->currentCoords.x, mew->currentCoords.y + 1)) + if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y + 1)) return DIR_SOUTH; } } - else if (gUnknown_030012FA < 0) + else if (sPlayerToMewDeltaY < 0) { if (mew->currentCoords.y - 1 == gEventObjects[gPlayerAvatar.eventObjectId].previousCoords.y) { - if (sub_81D4834(mew->currentCoords.x, mew->currentCoords.y - 1)) + if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y - 1)) return DIR_NORTH; } } if (mew->currentCoords.y == gEventObjects[gPlayerAvatar.eventObjectId].previousCoords.y) { - if (gUnknown_030012F8 > 0) + if (sPlayerToMewDeltaX > 0) { - if (sub_81D4834(mew->currentCoords.x - 1, mew->currentCoords.y)) + if (CanMewWalkToCoords(mew->currentCoords.x - 1, mew->currentCoords.y)) return DIR_WEST; } else { - if (sub_81D4834(mew->currentCoords.x + 1, mew->currentCoords.y)) + if (CanMewWalkToCoords(mew->currentCoords.x + 1, mew->currentCoords.y)) return DIR_EAST; } } @@ -208,52 +209,52 @@ u32 sub_81D427C(void) return DIR_WEST; } - if (gUnknown_030012FA == 0) + if (sPlayerToMewDeltaY == 0) { if (gEventObjects[gPlayerAvatar.eventObjectId].currentCoords.y > mew->currentCoords.y) { - if (sub_81D4834(mew->currentCoords.x, mew->currentCoords.y - 1)) + if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y - 1)) return DIR_NORTH; } if (gEventObjects[gPlayerAvatar.eventObjectId].currentCoords.y < mew->currentCoords.y) { - if (sub_81D4834(mew->currentCoords.x, mew->currentCoords.y + 1)) + if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y + 1)) return DIR_SOUTH; } - if (sub_81D4834(mew->currentCoords.x, mew->currentCoords.y - 1)) + if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y - 1)) return DIR_NORTH; - if (sub_81D4834(mew->currentCoords.x, mew->currentCoords.y + 1)) + if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y + 1)) return DIR_SOUTH; } - if (gUnknown_030012F8 == 0) + if (sPlayerToMewDeltaX == 0) { if (gEventObjects[gPlayerAvatar.eventObjectId].currentCoords.x > mew->currentCoords.x) { - if (sub_81D4834(mew->currentCoords.x - 1, mew->currentCoords.y)) + if (CanMewWalkToCoords(mew->currentCoords.x - 1, mew->currentCoords.y)) return DIR_WEST; } if (gEventObjects[gPlayerAvatar.eventObjectId].currentCoords.x < mew->currentCoords.x) { - if (sub_81D4834(mew->currentCoords.x + 1, mew->currentCoords.y)) + if (CanMewWalkToCoords(mew->currentCoords.x + 1, mew->currentCoords.y)) return DIR_EAST; } - if (sub_81D4834(mew->currentCoords.x + 1, mew->currentCoords.y)) + if (CanMewWalkToCoords(mew->currentCoords.x + 1, mew->currentCoords.y)) return DIR_EAST; - if (sub_81D4834(mew->currentCoords.x - 1, mew->currentCoords.y)) + if (CanMewWalkToCoords(mew->currentCoords.x - 1, mew->currentCoords.y)) return DIR_WEST; } return sub_81D4890(DIR_NONE); } -static bool8 sub_81D4834(s16 x, s16 y) +static bool8 CanMewWalkToCoords(s16 x, s16 y) { if (gEventObjects[gPlayerAvatar.eventObjectId].currentCoords.x == x && gEventObjects[gPlayerAvatar.eventObjectId].currentCoords.y == y) @@ -268,39 +269,39 @@ static u8 sub_81D4890(u8 ignoredDir) { u8 i; u8 count = 0; - struct EventObject *mew = &gEventObjects[sub_81D4258()]; + struct EventObject *mew = &gEventObjects[GetMewEventObjectId()]; - for (i = 0; i < ARRAY_COUNT(gUnknown_030012FC); i++) - gUnknown_030012FC[i] = DIR_NONE; + for (i = 0; i < ARRAY_COUNT(sMewDirectionCandidates); i++) + sMewDirectionCandidates[i] = DIR_NONE; - if (sub_81D4834(mew->currentCoords.x, mew->currentCoords.y - 1) == TRUE && ignoredDir != DIR_NORTH) + if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y - 1) == TRUE && ignoredDir != DIR_NORTH) { - gUnknown_030012FC[count] = DIR_NORTH; + sMewDirectionCandidates[count] = DIR_NORTH; count++; } - if (sub_81D4834(mew->currentCoords.x + 1, mew->currentCoords.y) == TRUE && ignoredDir != DIR_EAST) + if (CanMewWalkToCoords(mew->currentCoords.x + 1, mew->currentCoords.y) == TRUE && ignoredDir != DIR_EAST) { - gUnknown_030012FC[count] = DIR_EAST; + sMewDirectionCandidates[count] = DIR_EAST; count++; } - if (sub_81D4834(mew->currentCoords.x, mew->currentCoords.y + 1) == TRUE && ignoredDir != DIR_SOUTH) + if (CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y + 1) == TRUE && ignoredDir != DIR_SOUTH) { - gUnknown_030012FC[count] = DIR_SOUTH; + sMewDirectionCandidates[count] = DIR_SOUTH; count++; } - if (sub_81D4834(mew->currentCoords.x - 1, mew->currentCoords.y) == TRUE && ignoredDir != DIR_WEST) + if (CanMewWalkToCoords(mew->currentCoords.x - 1, mew->currentCoords.y) == TRUE && ignoredDir != DIR_WEST) { - gUnknown_030012FC[count] = DIR_WEST; + sMewDirectionCandidates[count] = DIR_WEST; count++; } if (count > 1) - return gUnknown_030012FC[VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) % count]; + return sMewDirectionCandidates[VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) % count]; else - return gUnknown_030012FC[0]; + return sMewDirectionCandidates[0]; } void UpdateFarawayIslandStepCounter(void) @@ -355,7 +356,7 @@ void sub_81D4A90(void) s16 x; s16 y; u8 spriteId; - struct EventObject *mew = &gEventObjects[sub_81D4258()]; + struct EventObject *mew = &gEventObjects[GetMewEventObjectId()]; mew->invisible = 0; if (gSpecialVar_0x8004 == 1) @@ -378,10 +379,10 @@ void sub_81D4A90(void) x = mew->currentCoords.x; y = mew->currentCoords.y; sub_80930E0(&x, &y, 8, 8); - gUnknown_0203CF50 = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[15], x, y, gSprites[mew->spriteId].subpriority - 1); - if (gUnknown_0203CF50 != MAX_SPRITES) + sUnknown_0203CF50 = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[15], x, y, gSprites[mew->spriteId].subpriority - 1); + if (sUnknown_0203CF50 != MAX_SPRITES) { - struct Sprite *sprite = &gSprites[gUnknown_0203CF50]; + struct Sprite *sprite = &gSprites[sUnknown_0203CF50]; sprite->coordOffsetEnabled = 1; sprite->oam.priority = 2; sprite->callback = SpriteCallbackDummy; @@ -391,15 +392,15 @@ void sub_81D4A90(void) void sub_81D4BEC(void) { - if (gUnknown_0203CF50 != MAX_SPRITES) - DestroySprite(&gSprites[gUnknown_0203CF50]); + if (sUnknown_0203CF50 != MAX_SPRITES) + DestroySprite(&gSprites[sUnknown_0203CF50]); } static bool8 sub_81D4C14(struct EventObject *mew, u8 index) { - if (gUnknown_030012FA > 0 && sub_81D4834(mew->currentCoords.x, mew->currentCoords.y - 1)) + if (sPlayerToMewDeltaY > 0 && CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y - 1)) { - gUnknown_030012FC[index] = DIR_NORTH; + sMewDirectionCandidates[index] = DIR_NORTH; return TRUE; } @@ -408,9 +409,9 @@ static bool8 sub_81D4C14(struct EventObject *mew, u8 index) static u8 sub_81D4C58(struct EventObject *mew, u8 index) { - if (gUnknown_030012F8 < 0 && sub_81D4834(mew->currentCoords.x + 1, mew->currentCoords.y)) + if (sPlayerToMewDeltaX < 0 && CanMewWalkToCoords(mew->currentCoords.x + 1, mew->currentCoords.y)) { - gUnknown_030012FC[index] = DIR_EAST; + sMewDirectionCandidates[index] = DIR_EAST; return TRUE; } @@ -419,9 +420,9 @@ static u8 sub_81D4C58(struct EventObject *mew, u8 index) static u8 sub_81D4C9C(struct EventObject *mew, u8 index) { - if (gUnknown_030012FA < 0 && sub_81D4834(mew->currentCoords.x, mew->currentCoords.y + 1)) + if (sPlayerToMewDeltaY < 0 && CanMewWalkToCoords(mew->currentCoords.x, mew->currentCoords.y + 1)) { - gUnknown_030012FC[index] = DIR_SOUTH; + sMewDirectionCandidates[index] = DIR_SOUTH; return TRUE; } @@ -430,9 +431,9 @@ static u8 sub_81D4C9C(struct EventObject *mew, u8 index) static u8 sub_81D4CE0(struct EventObject *mew, u8 index) { - if (gUnknown_030012F8 > 0 && sub_81D4834(mew->currentCoords.x - 1, mew->currentCoords.y)) + if (sPlayerToMewDeltaX > 0 && CanMewWalkToCoords(mew->currentCoords.x - 1, mew->currentCoords.y)) { - gUnknown_030012FC[index] = DIR_WEST; + sMewDirectionCandidates[index] = DIR_WEST; return TRUE; } @@ -441,5 +442,5 @@ static u8 sub_81D4CE0(struct EventObject *mew, u8 index) static u8 sub_81D4D24(u8 mod) { - return gUnknown_030012FC[VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) % mod]; + return sMewDirectionCandidates[VarGet(VAR_FARAWAY_ISLAND_STEP_COUNTER) % mod]; } -- cgit v1.2.3 From f34cda3b5209735fbf276b0f23e29549b1a1a3d9 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 30 Mar 2019 13:14:00 -0400 Subject: Start decompiling mystery gift --- src/mystery_gift.c | 253 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 253 insertions(+) create mode 100644 src/mystery_gift.c (limited to 'src') diff --git a/src/mystery_gift.c b/src/mystery_gift.c new file mode 100644 index 000000000..b6c317281 --- /dev/null +++ b/src/mystery_gift.c @@ -0,0 +1,253 @@ +#include "global.h" +#include "main.h" +#include "text.h" +#include "task.h" +#include "alloc.h" +#include "gpu_regs.h" +#include "scanline_effect.h" +#include "text_window.h" +#include "bg.h" +#include "window.h" +#include "text_window.h" +#include "menu.h" +#include "palette.h" +#include "constants/songs.h" +#include "sound.h" +#include "mystery_gift.h" + +void bgid_upload_textbox_1(u8 bgId); +void sub_8018798(u8); +void sub_80186EC(u8, u8); + +const u16 gUnkTextboxBorderPal[] = INCBIN_U16("graphics/interface/unk_textbox_border.gbapal"); +const u32 gUnkTextboxBorderGfx[] = INCBIN_U32("graphics/interface/unk_textbox_border.4bpp.lz"); + +const struct BgTemplate gUnknown_082F0598[] = { + { + .bg = 0, + .charBaseIndex = 2, + .mapBaseIndex = 15, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0x000 + }, { + .bg = 1, + .charBaseIndex = 0, + .mapBaseIndex = 14, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0x000 + }, { + .bg = 2, + .charBaseIndex = 0, + .mapBaseIndex = 13, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0x000 + }, { + .bg = 3, + .charBaseIndex = 0, + .mapBaseIndex = 12, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 0x000 + } +}; + +const struct WindowTemplate gUnknown_082F05A8[] = { + { + .bg = 0x00, + .tilemapLeft = 0x00, + .tilemapTop = 0x00, + .width = 0x1e, + .height = 0x02, + .paletteNum = 0x0c, + .baseBlock = 0x0013 + }, { + .bg = 0x00, + .tilemapLeft = 0x01, + .tilemapTop = 0x0f, + .width = 0x1c, + .height = 0x04, + .paletteNum = 0x0c, + .baseBlock = 0x004f + }, { + .bg = 0x00, + .tilemapLeft = 0x00, + .tilemapTop = 0x0f, + .width = 0x1e, + .height = 0x05, + .paletteNum = 0x0d, + .baseBlock = 0x004f + }, { + 0xFF + } +}; + +const struct WindowTemplate gUnknown_082F05C8 = { + .bg = 0x00, + .tilemapLeft = 0x01, + .tilemapTop = 0x0f, + .width = 0x1c, + .height = 0x04, + .paletteNum = 0x0c, + .baseBlock = 0x00e5 +}; + +const struct WindowTemplate gUnknown_082F05D0 = { + .bg = 0x00, + .tilemapLeft = 0x01, + .tilemapTop = 0x0f, + .width = 0x14, + .height = 0x04, + .paletteNum = 0x0c, + .baseBlock = 0x00e5 +}; + +const struct WindowTemplate gUnknown_082F05D8 = { + .bg = 0x00, + .tilemapLeft = 0x01, + .tilemapTop = 0x0f, + .width = 0x13, + .height = 0x04, + .paletteNum = 0x0c, + .baseBlock = 0x00e5 +}; + +const struct WindowTemplate gUnknown_082F05E0 = { + .bg = 0x00, + .tilemapLeft = 0x08, + .tilemapTop = 0x06, + .width = 0x0e, + .height = 0x06, + .paletteNum = 0x0c, + .baseBlock = 0x0155 +}; + +const struct WindowTemplate gUnknown_082F05E8 = { + .bg = 0x00, + .tilemapLeft = 0x17, + .tilemapTop = 0x0f, + .width = 0x06, + .height = 0x04, + .paletteNum = 0x0c, + .baseBlock = 0x0155 +}; + +const struct WindowTemplate gUnknown_082F05F0 = { + .bg = 0x00, + .tilemapLeft = 0x16, + .tilemapTop = 0x0b, + .width = 0x07, + .height = 0x08, + .paletteNum = 0x0c, + .baseBlock = 0x0155 +}; + +const struct WindowTemplate gUnknown_082F05F8 = { + .bg = 0x00, + .tilemapLeft = 0x16, + .tilemapTop = 0x0d, + .width = 0x07, + .height = 0x06, + .paletteNum = 0x0c, + .baseBlock = 0x0155 +}; + +const struct WindowTemplate gUnknown_082F0600 = { + .bg = 0x00, + .tilemapLeft = 0x16, + .tilemapTop = 0x0f, + .width = 0x07, + .height = 0x04, + .paletteNum = 0x0c, + .baseBlock = 0x0155 +}; + +void sub_8018424(void) +{ + ProcessSpriteCopyRequests(); + LoadOam(); + TransferPlttBuffer(); +} + +void sub_8018438(void) +{ + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); +} + +bool32 sub_8018450(s32 arg) +{ + switch (gMain.state) + { + case 0: + SetVBlankCallback(NULL); + ResetPaletteFade(); + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + ScanlineEffect_Stop(); + ResetBgsAndClearDma3BusyFlags(0); + + InitBgsFromTemplates(0, gUnknown_082F0598, ARRAY_COUNT(gUnknown_082F0598)); + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + ChangeBgX(2, 0, 0); + ChangeBgY(2, 0, 0); + ChangeBgX(3, 0, 0); + ChangeBgY(3, 0, 0); + + SetBgTilemapBuffer(3, Alloc(0x800)); + SetBgTilemapBuffer(2, Alloc(0x800)); + SetBgTilemapBuffer(1, Alloc(0x800)); + SetBgTilemapBuffer(0, Alloc(0x800)); + + bgid_upload_textbox_1(3); + InitWindows(gUnknown_082F05A8); + DeactivateAllTextPrinters(); + ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + SetGpuReg(REG_OFFSET_BLDALPHA, 0); + SetGpuReg(REG_OFFSET_BLDY, 0); + gMain.state++; + break; + case 1: + LoadPalette(gUnkTextboxBorderPal, 0, 0x20); + LoadPalette(stdpal_get(2), 0xd0, 0x20); + sub_81978B0(0xC0); + LoadUserWindowBorderGfx(0, 0xA, 0xE0); + LoadUserWindowBorderGfx_(0, 0x1, 0xF0); + FillBgTilemapBufferRect(0, 0x000, 0, 0, 32, 32, 0x11); + FillBgTilemapBufferRect(1, 0x000, 0, 0, 32, 32, 0x11); + FillBgTilemapBufferRect(2, 0x000, 0, 0, 32, 32, 0x11); + sub_8018798(3); + sub_80186EC(arg, 0); + gMain.state++; + break; + case 2: + CopyBgTilemapBufferToVram(3); + CopyBgTilemapBufferToVram(2); + CopyBgTilemapBufferToVram(1); + CopyBgTilemapBufferToVram(0); + gMain.state++; + break; + case 3: + ShowBg(0); + ShowBg(3); + PlayBGM(MUS_RG_OKURIMONO); + SetVBlankCallback(sub_8018424); + EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_VCOUNT | INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL); + return TRUE; + } + + return FALSE; +} -- cgit v1.2.3 From aafe9df454f42c77146d76676cc477e876d6540b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 30 Mar 2019 14:36:52 -0400 Subject: through sub_8018798 --- src/cable_club.c | 3 +- src/ereader_helpers.c | 2 +- src/ereader_screen.c | 2 +- src/link_rfu.c | 4 +- src/mevent_801BAAC.c | 1 + src/mystery_gift.c | 245 +++++++++++++++++++++++++++++++++++++++++++++++++- src/party_menu.c | 2 +- src/start_menu.c | 1 + src/trade.c | 3 + src/union_room.c | 4 +- 10 files changed, 256 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/cable_club.c b/src/cable_club.c index b80e76e99..fab187b07 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -17,7 +17,8 @@ #include "menu.h" #include "overworld.h" #include "palette.h" -#include "rom_8011DC0.h" +#include "union_room.h" +#include "mevent2.h" #include "script.h" #include "script_pokemon_util_80F87D8.h" #include "sound.h" diff --git a/src/ereader_helpers.c b/src/ereader_helpers.c index 6c92b676f..cdb829ac8 100755 --- a/src/ereader_helpers.c +++ b/src/ereader_helpers.c @@ -4,7 +4,7 @@ #include "ereader_helpers.h" #include "link.h" #include "main.h" -#include "rom_8011DC0.h" +#include "union_room.h" #include "save.h" #include "sprite.h" #include "task.h" diff --git a/src/ereader_screen.c b/src/ereader_screen.c index b15c1fd0c..10a23e251 100755 --- a/src/ereader_screen.c +++ b/src/ereader_screen.c @@ -4,7 +4,7 @@ #include "ereader_helpers.h" #include "link.h" #include "main.h" -#include "rom_8011DC0.h" +#include "union_room.h" #include "save.h" #include "sound.h" #include "sprite.h" diff --git a/src/link_rfu.c b/src/link_rfu.c index 945806459..43d19be03 100644 --- a/src/link_rfu.c +++ b/src/link_rfu.c @@ -11,13 +11,13 @@ #include "overworld.h" #include "random.h" #include "palette.h" -#include "rom_8011DC0.h" +#include "union_room.h" #include "string_util.h" #include "task.h" #include "text.h" #include "constants/species.h" #include "save.h" -#include "rom_8011DC0.h" +#include "mystery_gift.h" extern u16 gHeldKeyCodeToSend; diff --git a/src/mevent_801BAAC.c b/src/mevent_801BAAC.c index 857ca3fde..d69ab0495 100644 --- a/src/mevent_801BAAC.c +++ b/src/mevent_801BAAC.c @@ -13,6 +13,7 @@ #include "string_util.h" #include "link_rfu.h" #include "mevent.h" +#include "mystery_gift.h" struct UnkStruct_8467FB8 { diff --git a/src/mystery_gift.c b/src/mystery_gift.c index b6c317281..3fbe11378 100644 --- a/src/mystery_gift.c +++ b/src/mystery_gift.c @@ -8,16 +8,24 @@ #include "text_window.h" #include "bg.h" #include "window.h" +#include "strings.h" #include "text_window.h" #include "menu.h" #include "palette.h" #include "constants/songs.h" #include "sound.h" #include "mystery_gift.h" +#include "union_room.h" +#include "title_screen.h" +#include "ereader_screen.h" +#include "international_string_util.h" +#include "list_menu.h" void bgid_upload_textbox_1(u8 bgId); -void sub_8018798(u8); -void sub_80186EC(u8, u8); +void task_add_00_mystery_gift(void); + +EWRAM_DATA u8 gUnknown_02022C58 = 0; +EWRAM_DATA u8 gUnknown_02022C59 = 0; const u16 gUnkTextboxBorderPal[] = INCBIN_U16("graphics/interface/unk_textbox_border.gbapal"); const u32 gUnkTextboxBorderGfx[] = INCBIN_U32("graphics/interface/unk_textbox_border.4bpp.lz"); @@ -168,6 +176,158 @@ const struct WindowTemplate gUnknown_082F0600 = { .baseBlock = 0x0155 }; +const struct ListMenuItem gUnknown_082F0608[] = { + { gText_WonderCards, 0 }, + { gText_WonderNews, 1 }, + { gText_Exit3, -2 } +}; + +const struct ListMenuItem gUnknown_082F0620[] = { + { gText_WirelessCommunication, 0 }, + { gText_Friend2, 1 }, + { gText_Cancel2, -2 } +}; + +const struct ListMenuTemplate gUnknown_082F0638 = { + .items = NULL, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = NULL, + .totalItems = 3, + .maxShowed = 3, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 0, + .scrollMultiple = 0, + .fontId = 1, + .cursorKind = 0 +}; + +const struct ListMenuItem gUnknown_082F0650[] = { + { gText_Receive, 0 }, + { gText_Send, 1 }, + { gText_Toss, 2 }, + { gText_Cancel2, -2 } +}; + +const struct ListMenuItem gUnknown_082F0670[] = { + { gText_Receive, 0 }, + { gText_Toss, 2 }, + { gText_Cancel2, -2 } +}; + +const struct ListMenuItem gUnknown_082F0688[] = { + { gText_Receive, 0 }, + { gText_Send, 1 }, + { gText_Cancel2, -2 } +}; + +const struct ListMenuItem gUnknown_082F06A0[] = { + { gText_Receive, 0 }, + { gText_Cancel2, -2 } +}; + +const struct ListMenuTemplate gUnknown_082F06B0 = { + .items = gUnknown_082F0650, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = NULL, + .totalItems = 4, + .maxShowed = 4, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 0, + .scrollMultiple = 0, + .fontId = 1, + .cursorKind = 0 +}; + +const struct ListMenuTemplate gUnknown_082F06C8 = { + .items = gUnknown_082F0670, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = NULL, + .totalItems = 3, + .maxShowed = 3, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 0, + .scrollMultiple = 0, + .fontId = 1, + .cursorKind = 0 +}; + +const struct ListMenuTemplate gUnknown_082F06E0 = { + .items = gUnknown_082F0688, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = NULL, + .totalItems = 3, + .maxShowed = 3, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 0, + .scrollMultiple = 0, + .fontId = 1, + .cursorKind = 0 +}; + +const struct ListMenuTemplate gUnknown_082F06F8 = { + .items = gUnknown_082F06A0, + .moveCursorFunc = ListMenuDefaultCursorMoveFunc, + .itemPrintFunc = NULL, + .totalItems = 2, + .maxShowed = 2, + .windowId = 0, + .header_X = 0, + .item_X = 8, + .cursor_X = 0, + .upText_Y = 1, + .cursorPal = 2, + .fillValue = 1, + .cursorShadowPal = 3, + .lettersSpacing = 0, + .itemVerticalPadding = 0, + .scrollMultiple = 0, + .fontId = 1, + .cursorKind = 0 +}; + +const u8 *const Unref_082F0710[] = { + gText_VarietyOfEventsImportedWireless, + gText_WonderCardsInPossession, + gText_ReadNewsThatArrived, + gText_ReturnToTitle +}; + +ALIGNED(2) const u8 gUnknown_082F0720[] = { 0, 1, 2 }; +ALIGNED(2) const u8 gUnknown_082F0724[] = { 0, 1, 2 }; +ALIGNED(2) const u8 gUnknown_082F0728[] = { 1, 2, 3 }; + void sub_8018424(void) { ProcessSpriteCopyRequests(); @@ -251,3 +411,84 @@ bool32 sub_8018450(s32 arg) return FALSE; } + +void c2_mystery_gift(void) +{ + if (sub_8018450(0)) + { + SetMainCallback2(sub_8018438); + gUnknown_02022C60 = FALSE; + task_add_00_mystery_gift(); + } + RunTasks(); +} + +void sub_801867C(void) +{ + if (sub_8018450(1)) + { + SetMainCallback2(sub_8018438); + gUnknown_02022C60 = TRUE; + sub_81D5014(); + } +} + +void sub_80186A4(void) +{ + gUnknown_02022C60 = FALSE; + FreeAllWindowBuffers(); + Free(GetBgTilemapBuffer(0)); + Free(GetBgTilemapBuffer(1)); + Free(GetBgTilemapBuffer(2)); + Free(GetBgTilemapBuffer(3)); + SetMainCallback2(CB2_InitTitleScreen); +} + +void sub_80186EC(bool8 isJapanese, bool32 usePickOkCancel) +{ + const u8 * header; + const u8 * options; + FillWindowPixelBuffer(0, 0); + if (!isJapanese) + { + header = gText_MysteryGift; + options = !usePickOkCancel ? gText_PickOKExit : gText_PickOKCancel; + } + else + { + header = gJPText_MysteryGift; + options = gJPText_DecideStop; + } + + AddTextPrinterParameterized4(0, 1, 4, 1, 0, 0, gUnknown_082F0720, -1, header); + AddTextPrinterParameterized4(0, 0, GetStringRightAlignXOffset(0, options, 0xDE), 1, 0, 0, gUnknown_082F0720, -1, options); + CopyWindowToVram(0, 2); + PutWindowTilemap(0); +} + +void sub_8018784(u8 windowId) +{ + sub_8098858(windowId, 0x01, 0xF); +} + +void sub_8018798(u32 bg) +{ + s32 i = 0, j; + + FillBgTilemapBufferRect(bg, 0x003, 0, 0, 32, 2, 0x11); + + for (i = 0; i < 18; i++) + { + for (j = 0; j < 32; j++) + { + if ((i & 1) != (j & 1)) + { + FillBgTilemapBufferRect(bg, 1, j, i + 2, 1, 1, 0x11); + } + else + { + FillBgTilemapBufferRect(bg, 2, j, i + 2, 1, 1, 0x11); + } + } + } +} diff --git a/src/party_menu.c b/src/party_menu.c index 7db24b6ca..6233558ff 100755 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -49,7 +49,7 @@ #include "pokemon_summary_screen.h" #include "region_map.h" #include "reshow_battle_screen.h" -#include "rom_8011DC0.h" +#include "union_room.h" #include "scanline_effect.h" #include "script.h" #include "sound.h" diff --git a/src/start_menu.c b/src/start_menu.c index 4822c12e6..f573f9bdf 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -44,6 +44,7 @@ #include "window.h" #include "constants/songs.h" #include "rom_8011DC0.h" +#include "union_room.h" // Menu actions enum diff --git a/src/trade.c b/src/trade.c index df8f493f1..34f49060f 100644 --- a/src/trade.c +++ b/src/trade.c @@ -19,6 +19,8 @@ #include "load_save.h" #include "mail.h" #include "main.h" +#include "mevent2.h" +#include "mystery_gift.h" #include "overworld.h" #include "palette.h" #include "party_menu.h" @@ -39,6 +41,7 @@ #include "text_window.h" #include "trainer_card.h" #include "trade.h" +#include "union_room.h" #include "util.h" #include "window.h" #include "constants/easy_chat.h" diff --git a/src/union_room.c b/src/union_room.c index 5050b04f1..df0137379 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -40,7 +40,7 @@ #include "strings.h" #include "mevent.h" #include "dynamic_placeholder_text_util.h" -#include "rom_8011DC0.h" +#include "union_room.h" #include "easy_chat.h" #include "event_obj_lock.h" #include "union_room_chat.h" @@ -102,8 +102,6 @@ void sub_802493C(u8 monId, MainCallback callback); void sub_80149D8(void); u16 sub_8019930(void); void sub_8018784(u8 windowId); -void sub_8018884(const u8 *src); -bool32 mevent_0814257C(u8 *textState, const u8 *str); s8 sub_8018B08(u8 *textState, u8 *arg1, u8 arg2, const u8 *str); bool32 sub_8016F1C(struct UnkLinkRfuStruct_02022B14 *arg0, s16 arg1); u8 sub_8016DF0(struct UnkStruct_Main4 *arg0, struct UnkStruct_Main4 *arg1, u32 arg2); -- cgit v1.2.3 From 82a3f29b880037f1e06e26e10f53ecc0c045ec00 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sat, 30 Mar 2019 20:04:30 -0400 Subject: through sub_8018A50 --- src/mystery_gift.c | 147 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 145 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/mystery_gift.c b/src/mystery_gift.c index 3fbe11378..7c686964d 100644 --- a/src/mystery_gift.c +++ b/src/mystery_gift.c @@ -20,12 +20,12 @@ #include "ereader_screen.h" #include "international_string_util.h" #include "list_menu.h" +#include "string_util.h" void bgid_upload_textbox_1(u8 bgId); void task_add_00_mystery_gift(void); -EWRAM_DATA u8 gUnknown_02022C58 = 0; -EWRAM_DATA u8 gUnknown_02022C59 = 0; +EWRAM_DATA u8 gUnknown_02022C58[2] = {}; const u16 gUnkTextboxBorderPal[] = INCBIN_U16("graphics/interface/unk_textbox_border.gbapal"); const u32 gUnkTextboxBorderGfx[] = INCBIN_U32("graphics/interface/unk_textbox_border.4bpp.lz"); @@ -492,3 +492,146 @@ void sub_8018798(u32 bg) } } } + +void sub_8018838(bool32 arg) +{ + switch (arg) + { + case 0: + FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0x11); + break; + case 1: + FillBgTilemapBufferRect(0, 0, 0, 2, 32, 30, 0x11); + break; + } + CopyBgTilemapBufferToVram(0); +} + +void sub_8018884(const u8 *str) +{ + StringExpandPlaceholders(gStringVar4, str); + FillWindowPixelBuffer(1, 0x11); + AddTextPrinterParameterized4(1, 1, 0, 1, 0, 0, gUnknown_082F0728, 0, gStringVar4); + sub_8098858(1, 0x001, 0xF); + PutWindowTilemap(1); + CopyWindowToVram(1, 3); +} + +void sub_80188DC(void) +{ + rbox_fill_rectangle(1); + ClearWindowTilemap(1); + CopyWindowToVram(1, 1); +} + +bool32 mevent_0814257C(u8 *textState, const u8 *str) +{ + switch (*textState) + { + case 0: + sub_8018884(str); + goto inc; + case 1: + DrawDownArrow(1, 0xD0, 0x14, 1, FALSE, &gUnknown_02022C58[0], &gUnknown_02022C58[1]); + if (({gMain.newKeys & (A_BUTTON | B_BUTTON);})) + { + inc: + (*textState)++; + } + break; + case 2: + DrawDownArrow(1, 0xD0, 0x14, 1, TRUE, &gUnknown_02022C58[0], &gUnknown_02022C58[1]); + *textState = 0; + sub_80188DC(); + return TRUE; + case 0xFF: + *textState = 2; + break; + } + return FALSE; +} + +void sub_801898C(void) +{ + DrawDownArrow(1, 0xD0, 0x14, 1, FALSE, &gUnknown_02022C58[0], &gUnknown_02022C58[1]); +} + +void sub_80189B4(void) +{ + DrawDownArrow(1, 0xD0, 0x14, 1, TRUE, &gUnknown_02022C58[0], &gUnknown_02022C58[1]); +} + +bool32 sub_80189DC(u8 * textState) +{ + switch (*textState) + { + case 0: + sub_801898C(); + if (({gMain.newKeys & (A_BUTTON | B_BUTTON);})) + { + (*textState)++; + } + break; + case 1: + sub_80189B4(); + *textState = 0; + return TRUE; + } + return FALSE; +} + +bool32 sub_8018A1C(u8 * counter, const u8 * str) +{ + if (*counter == 0) + { + sub_8018884(str); + } + if (++(*counter) > 120) + { + *counter = 0; + sub_80188DC(); + return TRUE; + } + else + { + return FALSE; + } +} + +s32 sub_8018A50(u32 unused0, u32 unused1, bool8 r2) +{ + struct ListMenuTemplate listMenuTemplate = gUnknown_082F0638; + struct WindowTemplate windowTemplate = gUnknown_082F05E0; + s32 r3; + s32 r4; + + if (r2 == FALSE) + { + listMenuTemplate.items = gUnknown_082F0608; + } + else + { + listMenuTemplate.items = gUnknown_082F0620; + } + r3 = sub_81DB41C(&listMenuTemplate); + if (r3 & 1) + { + r3++; + } + windowTemplate.width = r3; + if (r3 < 30) + { + windowTemplate.tilemapLeft = (30 - r3) / 2; + } + else + { + windowTemplate.tilemapLeft = 0; + } + r4 = DoMysteryGiftListMenu(&windowTemplate, &listMenuTemplate, 1, 0x00A, 0xE0); + if (r4 != -1) + { + ClearWindowTilemap(2); + CopyWindowToVram(2, 1); + } + return r4; +} -- cgit v1.2.3 From 608a2172403abdae4ceba7f56ab78120dd0b9f1f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 31 Mar 2019 10:33:27 -0400 Subject: sub_8018B08 --- src/mystery_gift.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/mystery_gift.c b/src/mystery_gift.c index 7c686964d..da2a3bcc0 100644 --- a/src/mystery_gift.c +++ b/src/mystery_gift.c @@ -598,7 +598,7 @@ bool32 sub_8018A1C(u8 * counter, const u8 * str) } } -s32 sub_8018A50(u32 unused0, u32 unused1, bool8 r2) +s32 sub_8018A50(u8 * unused0, u8 * unused1, bool8 r2) { struct ListMenuTemplate listMenuTemplate = gUnknown_082F0638; struct WindowTemplate windowTemplate = gUnknown_082F05E0; @@ -635,3 +635,64 @@ s32 sub_8018A50(u32 unused0, u32 unused1, bool8 r2) } return r4; } + +s32 sub_8018B08(u8 * textState, u16 * windowId, bool8 r6, const u8 * str) +{ + struct WindowTemplate windowTemplate; + s8 input; + + switch (*textState) + { + case 0: + StringExpandPlaceholders(gStringVar4, str); + if (r6 == 0) + { + *windowId = AddWindow(&gUnknown_082F05C8); + } + else + { + *windowId = AddWindow(&gUnknown_082F05D0); + } + FillWindowPixelBuffer(*windowId, 0x11); + AddTextPrinterParameterized4(*windowId, 1, 0, 1, 0, 0, gUnknown_082F0728, 0, gStringVar4); + sub_8098858(*windowId, 0x001, 0x0F); + CopyWindowToVram(*windowId, 2); + PutWindowTilemap(*windowId); + (*textState)++; + break; + case 1: + windowTemplate = gUnknown_082F05E8; + if (r6 == 0) + { + windowTemplate.tilemapTop = 9; + } + else + { + windowTemplate.tilemapTop = 15; + } + CreateYesNoMenu(&windowTemplate, 10, 14, 0); + (*textState)++; + break; + case 2: + input = Menu_ProcessInputNoWrapClearOnChoose(); + if (input == -1 || input == 0 || input == 1) + { + *textState = 0; + rbox_fill_rectangle(*windowId); + ClearWindowTilemap(*windowId); + CopyWindowToVram(*windowId, 1); + RemoveWindow(*windowId); + return input; + } + break; + case 0xFF: + *textState = 0; + rbox_fill_rectangle(*windowId); + ClearWindowTilemap(*windowId); + CopyWindowToVram(*windowId, 1); + RemoveWindow(*windowId); + return -1; + } + + return -2; +} -- cgit v1.2.3 From f88f815cff272f4cd19759f2df24f85bc5f02ae1 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 31 Mar 2019 11:16:19 -0400 Subject: WIP sub_8018DAC --- src/list_menu.c | 2 +- src/mystery_gift.c | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 121 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/list_menu.c b/src/list_menu.c index 57bcc5c4f..3bcd3073d 100644 --- a/src/list_menu.c +++ b/src/list_menu.c @@ -312,7 +312,7 @@ static void ListMenuDummyTask(u8 taskId) } -s32 DoMysteryGiftListMenu(struct WindowTemplate *windowTemplate, struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum) +s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum) { switch (sMysteryGiftLinkMenu.state) { diff --git a/src/mystery_gift.c b/src/mystery_gift.c index da2a3bcc0..9561fbbeb 100644 --- a/src/mystery_gift.c +++ b/src/mystery_gift.c @@ -21,6 +21,8 @@ #include "international_string_util.h" #include "list_menu.h" #include "string_util.h" +#include "mevent.h" +#include "mevent_801BAAC.h" void bgid_upload_textbox_1(u8 bgId); void task_add_00_mystery_gift(void); @@ -696,3 +698,121 @@ s32 sub_8018B08(u8 * textState, u16 * windowId, bool8 r6, const u8 * str) return -2; } + +s32 sub_8018C4C(u8 * textState, u16 * windowId, bool32 r2, bool32 r3) +{ + struct WindowTemplate windowTemplate; + s32 input; + + switch (*textState) + { + case 0: + if (r2 == 0) + { + StringExpandPlaceholders(gStringVar4, gText_WhatToDoWithCards); + } + else + { + StringExpandPlaceholders(gStringVar4, gText_WhatToDoWithNews); + } + *windowId = AddWindow(&gUnknown_082F05D8); + FillWindowPixelBuffer(*windowId, 0x11); + AddTextPrinterParameterized4(*windowId, 1, 0, 1, 0, 0, gUnknown_082F0728, 0, gStringVar4); + sub_8098858(*windowId, 0x001, 0x0F); + CopyWindowToVram(*windowId, 2); + PutWindowTilemap(*windowId); + (*textState)++; + break; + case 1: + windowTemplate = gUnknown_082F05E8; + if (r3) + { + if (r2 == 0) + { + input = DoMysteryGiftListMenu(&gUnknown_082F05F8, &gUnknown_082F06C8, 1, 0x00A, 0xE0); + } + else + { + input = DoMysteryGiftListMenu(&gUnknown_082F0600, &gUnknown_082F06F8, 1, 0x00A, 0xE0); + } + } + else + { + if (r2 == 0) + { + input = DoMysteryGiftListMenu(&gUnknown_082F05F0, &gUnknown_082F06B0, 1, 0x00A, 0xE0); + } + else + { + input = DoMysteryGiftListMenu(&gUnknown_082F05F8, &gUnknown_082F06E0, 1, 0x00A, 0xE0); + } + } + if (input != -1) + { + *textState = 0; + rbox_fill_rectangle(*windowId); + ClearWindowTilemap(*windowId); + CopyWindowToVram(*windowId, 1); + RemoveWindow(*windowId); + return input; + } + break; + case 0xFF: + *textState = 0; + rbox_fill_rectangle(*windowId); + ClearWindowTilemap(*windowId); + CopyWindowToVram(*windowId, 1); + RemoveWindow(*windowId); + return -2; + } + + return -1; +} + +s32 sub_8018D98(bool32 a0) +{ + if (a0 == 0) + { + return sub_801B27C(); + } + else + { + return sub_801B0CC(); + } +} + +/*bool32 sub_8018DAC(u8 * state, bool32 arg1) +{ + switch (*state) + { + case 0: + if (arg1 == 0) + { + sub_801BAAC(sav1_get_mevent_buffer_1(), sav1_get_mevent_buffer_2()); + } + else + { + sub_801C6C8(sub_801B00C()); + } + (*state)++; + case 1: + if (arg1 == 0) + { + if (sub_801BB74() == 0) + { + break; + } + } + else + { + if (sub_801C758() == 0) + { + break; + } + } + *state = 0; + return TRUE; + } + + return FALSE; +}*/ -- cgit v1.2.3 From 813de11154ac9ac6d561ef820d2a13995ce5bb35 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 31 Mar 2019 12:27:36 -0400 Subject: Through mevent_save_game --- src/mystery_gift.c | 118 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 110 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/mystery_gift.c b/src/mystery_gift.c index 9561fbbeb..206a9e50b 100644 --- a/src/mystery_gift.c +++ b/src/mystery_gift.c @@ -23,6 +23,7 @@ #include "string_util.h" #include "mevent.h" #include "mevent_801BAAC.h" +#include "save.h" void bgid_upload_textbox_1(u8 bgId); void task_add_00_mystery_gift(void); @@ -781,8 +782,10 @@ s32 sub_8018D98(bool32 a0) } } -/*bool32 sub_8018DAC(u8 * state, bool32 arg1) +bool32 sub_8018DAC(u8 * state, bool32 arg1) { + s32 v0; + switch (*state) { case 0: @@ -795,24 +798,123 @@ s32 sub_8018D98(bool32 a0) sub_801C6C8(sub_801B00C()); } (*state)++; + break; case 1: if (arg1 == 0) { - if (sub_801BB74() == 0) + v0 = sub_801BB74(); + check: + if (v0 != 0) { - break; + goto done; } + break; } else { - if (sub_801C758() == 0) - { - break; - } + v0 = sub_801C758(); + goto check; + } + done: + *state = 0; + return TRUE; + } + + return FALSE; +} + +bool32 sub_8018E08(bool32 arg0) +{ + if (arg0 == 0) + { + sub_801B1E8(); + } + else + { + sub_801B06C(); + } + return TRUE; +} + +bool32 sub_8018E20(bool32 arg0, bool32 arg1) +{ + if (arg0 == 0) + { + if (sub_801BDA4(arg1) != 0) + { + sub_801BB48(); + return TRUE; + } + else + { + return FALSE; + } + } + else + { + if (sub_801CA50(arg1) != 0) + { + sub_801C72C(); + return TRUE; + } + else + { + return FALSE; + } + } +} + +s8 sub_8018E50(u8 * textState, u16 * windowId, bool32 r2) +{ + if (r2 == 0) + { + return sub_8018B08(textState, windowId, TRUE, gText_IfThrowAwayCardEventWontHappen); + } + else + { + return sub_8018B08(textState, windowId, TRUE, gText_OkayToDiscardNews); + } +} + +bool32 mevent_message_was_thrown_away(u8 * textState, bool32 r1) +{ + if (r1 == 0) + { + return mevent_0814257C(textState, gText_WonderCardThrownAway); + } + else + { + return mevent_0814257C(textState, gText_WonderNewsThrownAway); + } +} + +bool32 mevent_save_game(u8 * state) +{ + switch (*state) + { + case 0: + sub_8018884(gText_DataWillBeSaved); + (*state)++; + break; + case 1: + TrySavingData(0); + (*state)++; + break; + case 2: + sub_8018884(gText_SaveCompletedPressA); + (*state)++; + break; + case 3: + if (({gMain.newKeys & (A_BUTTON | B_BUTTON);})) + { + (*state)++; } + break; + case 4: *state = 0; + sub_80188DC(); return TRUE; } return FALSE; -}*/ +} -- cgit v1.2.3 From fb5c19a33bf314f4976ae56ce13f4dc9d9ed0fe0 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 31 Mar 2019 12:36:48 -0400 Subject: through mevent_message --- src/mystery_gift.c | 70 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) (limited to 'src') diff --git a/src/mystery_gift.c b/src/mystery_gift.c index 206a9e50b..c8a507355 100644 --- a/src/mystery_gift.c +++ b/src/mystery_gift.c @@ -918,3 +918,73 @@ bool32 mevent_save_game(u8 * state) return FALSE; } + +const u8 * mevent_message(u32 * a0, u8 a1, u8 a2, u32 a3) +{ + const u8 * msg = NULL; + *a0 = 0; + + switch (a3) + { + case 0: + *a0 = 0; + msg = gText_NothingSentOver; + break; + case 1: + *a0 = 0; + msg = gText_RecordUploadedViaWireless; + break; + case 2: + *a0 = 1; + msg = a2 == 0 ? gText_WonderCardReceived : gText_WonderCardReceivedFrom; + break; + case 3: + *a0 = 1; + msg = a2 == 0 ? gText_WonderNewsReceived : gText_WonderNewsReceivedFrom; + break; + case 4: + *a0 = 1; + msg = gText_NewStampReceived; + break; + case 5: + *a0 = 0; + msg = gText_AlreadyHadCard; + break; + case 6: + *a0 = 0; + msg = gText_AlreadyHadStamp; + break; + case 7: + *a0 = 0; + msg = gText_AlreadyHadNews; + break; + case 8: + *a0 = 0; + msg = gText_NoMoreRoomForStamps; + break; + case 9: + *a0 = 0; + msg = gText_CommunicationCanceled; + break; + case 10: + *a0 = 0; + msg = a1 == 0 ? gText_CantAcceptCardFromTrainer : gText_CantAcceptNewsFromTrainer; + break; + case 11: + *a0 = 0; + msg = gText_CommunicationError; + break; + case 12: + *a0 = 1; + msg = gText_NewTrainerReceived; + break; + case 13: + *a0 = 1; + break; + case 14: + *a0 = 0; + break; + } + + return msg; +} -- cgit v1.2.3 From 90fb329b70433e75cfd571d8b33df2593d2b7656 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 31 Mar 2019 12:55:27 -0400 Subject: through task_add_00_mystery_gift --- src/mystery_gift.c | 142 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) (limited to 'src') diff --git a/src/mystery_gift.c b/src/mystery_gift.c index c8a507355..30aa6f323 100644 --- a/src/mystery_gift.c +++ b/src/mystery_gift.c @@ -27,12 +27,34 @@ void bgid_upload_textbox_1(u8 bgId); void task_add_00_mystery_gift(void); +void task00_mystery_gift(u8 taskId); EWRAM_DATA u8 gUnknown_02022C58[2] = {}; const u16 gUnkTextboxBorderPal[] = INCBIN_U16("graphics/interface/unk_textbox_border.gbapal"); const u32 gUnkTextboxBorderGfx[] = INCBIN_U32("graphics/interface/unk_textbox_border.4bpp.lz"); +struct MysteryGiftExtraData +{ + u8 filler_00[0x40]; +}; + +struct MysteryGiftTaskData +{ + u16 unk0; + u16 unk2; + u16 unk4; + u16 unk6; + u8 unk8; + u8 unk9; + u8 unkA; + u8 unkB; + u8 unkC; + u8 unkD; + u8 unkE; + struct MysteryGiftExtraData * unk10; +}; + const struct BgTemplate gUnknown_082F0598[] = { { .bg = 0, @@ -988,3 +1010,123 @@ const u8 * mevent_message(u32 * a0, u8 a1, u8 a2, u32 a3) return msg; } + +bool32 mevent_08142CE8(u8 * state, const u8 * arg1, u16 * arg2) +{ + switch (*state) + { + case 0: + if (arg1 != NULL) + { + sub_8018884(arg1); + } + PlayFanfare(MUS_FANFA4); + *arg2 = 0; + (*state)++; + break; + case 1: + if (++(*arg2) > 0xF0) + { + (*state)++; + } + break; + case 2: + if (IsFanfareTaskInactive()) + { + *state = 0; + sub_80188DC(); + return TRUE; + } + break; + } + return FALSE; +} + +const u8 * mevent_message_stamp_card_etc_send_status(u32 * a0, u8 unused, u32 state) +{ + const u8 * result = gText_CommunicationError; + *a0 = 0; + switch (state) + { + case 0: + result = gText_NothingSentOver; + break; + case 1: + result = gText_RecordUploadedViaWireless; + break; + case 2: + result = gText_WonderCardSentTo; + *a0 = 1; + break; + case 3: + result = gText_WonderNewsSentTo; + *a0 = 1; + break; + case 4: + result = gText_StampSentTo; + break; + case 5: + result = gText_OtherTrainerHasCard; + break; + case 6: + result = gText_OtherTrainerHasStamp; + break; + case 7: + result = gText_OtherTrainerHasNews; + break; + case 8: + result = gText_NoMoreRoomForStamps; + break; + case 9: + result = gText_OtherTrainerCanceled; + break; + case 10: + result = gText_CantSendGiftToTrainer; + break; + case 11: + result = gText_CommunicationError; + break; + case 12: + result = gText_GiftSentTo; + break; + case 13: + result = gText_GiftSentTo; + break; + case 14: + result = gText_CantSendGiftToTrainer; + break; + } + return result; +} + +bool32 sub_8019174(u8 * state_p, u16 * arg1, u8 arg2, u32 state) +{ + u32 flag; + const u8 * str = mevent_message_stamp_card_etc_send_status(&flag, arg2, state); + if (flag) + { + return mevent_08142CE8(state_p, str, arg1); + } + else + { + return mevent_0814257C(state_p, str); + } +} + +void task_add_00_mystery_gift(void) +{ + u8 taskId = CreateTask(task00_mystery_gift, 0); + struct MysteryGiftTaskData * data = (void *)gTasks[taskId].data; + data->unk8 = 0; + data->unk9 = 0; + data->unkA = 0; + data->unkB = 0; + data->unkC = 0; + data->unkD = 0; + data->unk0 = 0; + data->unk2 = 0; + data->unk4 = 0; + data->unk6 = 0; + data->unkE = 0; + data->unk10 = AllocZeroed(sizeof(*data->unk10)); +} -- cgit v1.2.3 From 0a8427c8effeefc58c542f249d7384648585ff4a Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 31 Mar 2019 15:50:25 -0400 Subject: fakematching task00_mystery_gift --- src/mevent_801BAAC.c | 2 +- src/mystery_gift.c | 580 ++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 571 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/mevent_801BAAC.c b/src/mevent_801BAAC.c index d69ab0495..b9931a682 100644 --- a/src/mevent_801BAAC.c +++ b/src/mevent_801BAAC.c @@ -724,7 +724,7 @@ void sub_801CC80(void) } } -u8 sub_801CCD0(u16 input) +u32 sub_801CCD0(u16 input) { if (gUnknown_02022C78->unk_01C2_0) { diff --git a/src/mystery_gift.c b/src/mystery_gift.c index 30aa6f323..5e000a249 100644 --- a/src/mystery_gift.c +++ b/src/mystery_gift.c @@ -24,6 +24,12 @@ #include "mevent.h" #include "mevent_801BAAC.h" #include "save.h" +#include "link.h" +#include "mevent_server_ish.h" +#include "event_data.h" +#include "link_rfu.h" +#include "mevent_news.h" +#include "mevent_server.h" void bgid_upload_textbox_1(u8 bgId); void task_add_00_mystery_gift(void); @@ -34,11 +40,6 @@ EWRAM_DATA u8 gUnknown_02022C58[2] = {}; const u16 gUnkTextboxBorderPal[] = INCBIN_U16("graphics/interface/unk_textbox_border.gbapal"); const u32 gUnkTextboxBorderGfx[] = INCBIN_U32("graphics/interface/unk_textbox_border.4bpp.lz"); -struct MysteryGiftExtraData -{ - u8 filler_00[0x40]; -}; - struct MysteryGiftTaskData { u16 unk0; @@ -52,7 +53,7 @@ struct MysteryGiftTaskData u8 unkC; u8 unkD; u8 unkE; - struct MysteryGiftExtraData * unk10; + u8 * unk10; }; const struct BgTemplate gUnknown_082F0598[] = { @@ -623,7 +624,7 @@ bool32 sub_8018A1C(u8 * counter, const u8 * str) } } -s32 sub_8018A50(u8 * unused0, u8 * unused1, bool8 r2) +u32 sub_8018A50(u8 * unused0, u16 * unused1, bool8 r2) { struct ListMenuTemplate listMenuTemplate = gUnknown_082F0638; struct WindowTemplate windowTemplate = gUnknown_082F05E0; @@ -661,7 +662,7 @@ s32 sub_8018A50(u8 * unused0, u8 * unused1, bool8 r2) return r4; } -s32 sub_8018B08(u8 * textState, u16 * windowId, bool8 r6, const u8 * str) +s8 sub_8018B08(u8 * textState, u16 * windowId, bool8 r6, const u8 * str) { struct WindowTemplate windowTemplate; s8 input; @@ -886,7 +887,7 @@ bool32 sub_8018E20(bool32 arg0, bool32 arg1) } } -s8 sub_8018E50(u8 * textState, u16 * windowId, bool32 r2) +s32 sub_8018E50(u8 * textState, u16 * windowId, bool32 r2) { if (r2 == 0) { @@ -1128,5 +1129,564 @@ void task_add_00_mystery_gift(void) data->unk4 = 0; data->unk6 = 0; data->unkE = 0; - data->unk10 = AllocZeroed(sizeof(*data->unk10)); + data->unk10 = AllocZeroed(0x40); +} + +void task00_mystery_gift(u8 taskId) +{ + struct MysteryGiftTaskData * data = (void *)gTasks[taskId].data; + u32 sp0; + const u8 * r1; + + switch (data->unk8) + { + case 0: + data->unk8 = 1; + break; + case 1: + switch (sub_8018A50(&data->unk9, &data->unk0, FALSE)) + { + case 0: + data->unkC = 0; + if (sub_801B27C() == TRUE) + { + data->unk8 = 18; + } + else + { + data->unk8 = 2; + } + break; + case 1: + data->unkC = 1; + if (sub_801B0CC() == TRUE) + { + data->unk8 = 18; + } + else + { + data->unk8 = 2; + } + break; + case -2u: + data->unk8 = 37; + break; + } + break; + case 2: + { + if (data->unkC == 0) + { + if (mevent_0814257C(&data->unk9, gText_DontHaveCardNewOneInput)) + { + data->unk8 = 3; + sub_80186EC(0, 1); + } + } + else + { + if (mevent_0814257C(&data->unk9, gText_DontHaveNewsNewOneInput)) + { + data->unk8 = 3; + sub_80186EC(0, 1); + } + } + break; + } + case 3: + if (data->unkC == 0) + { + sub_8018884(gText_WhereShouldCardBeAccessed); + } + else + { + sub_8018884(gText_WhereShouldNewsBeAccessed); + } + data->unk8 = 4; + break; + case 4: + switch (sub_8018A50(&data->unk9, &data->unk0, TRUE)) + { + case 0: + sub_80188DC(); + data->unk8 = 5; + data->unkD = 0; + break; + case 1: + sub_80188DC(); + data->unk8 = 5; + data->unkD = 1; + break; + case -2u: + sub_80188DC(); + if (sub_8018D98(data->unkC)) + { + data->unk8 = 18; + } + else + { + data->unk8 = 0; + sub_80186EC(0, 0); + } + break; + } + break; + case 5: + { + register u8 eos asm("r1"); + gStringVar1[0] = (eos = EOS); + gStringVar2[0] = eos; + gStringVar3[0] = eos; + } + switch (data->unkC) + { + case 0: + if (data->unkD == 1) + { + sub_8014EFC(0x15); + } + else if (data->unkD == 0) + { + sub_80152A8(0x15); + } + break; + case 1: + if (data->unkD == 1) + { + sub_8014EFC(0x16); + } + else if (data->unkD == 0) + { + sub_80152A8(0x16); + } + break; + } + data->unk8 = 6; + break; + case 6: + if (gReceivedRemoteLinkPlayers != 0) + { + sub_8018838(TRUE); + data->unk8 = 7; + sub_801D484(data->unkC); + } + else if (gSpecialVar_Result == 5) + { + sub_8018838(TRUE); + data->unk8 = 3; + } + break; + case 7: + sub_8018884(gText_Communicating); + data->unk8 = 8; + break; + case 8: + switch (sub_801D4A8(&data->unk0)) + { + case 6: + task_add_05_task_del_08FA224_when_no_RfuFunc(); + data->unkE = data->unk0; + data->unk8 = 13; + break; + case 5: + memcpy(data->unk10, sub_801D4F4(), 0x40); + sub_801D4E4(); + break; + case 3: + data->unk8 = 10; + break; + case 2: + data->unk8 = 9; + break; + case 4: + data->unk8 = 11; + StringCopy(gStringVar1, gLinkPlayers[0].name); + break; + } + break; + case 9: + switch ((u32)sub_8018B08(&data->unk9, &data->unk0, FALSE, sub_801D4F4())) + { + case 0: + sub_801D500(0); + sub_801D4E4(); + data->unk8 = 7; + break; + case 1: + sub_801D500(1); + sub_801D4E4(); + data->unk8 = 7; + break; + case -1u: + sub_801D500(1); + sub_801D4E4(); + data->unk8 = 7; + break; + } + break; + case 10: + if (mevent_0814257C(&data->unk9, sub_801D4F4())) + { + sub_801D4E4(); + data->unk8 = 7; + } + break; + case 11: + switch ((u32)sub_8018B08(&data->unk9, &data->unk0, FALSE, gText_ThrowAwayWonderCard)) + { + case 0: + if (sub_801B3F8() == TRUE) + { + data->unk8 = 12; + } + else + { + sub_801D500(0); + sub_801D4E4(); + data->unk8 = 7; + } + break; + case 1: + sub_801D500(1); + sub_801D4E4(); + data->unk8 = 7; + break; + case -1u: + sub_801D500(1); + sub_801D4E4(); + data->unk8 = 7; + break; + } + break; + case 12: + switch ((u32)sub_8018B08(&data->unk9, &data->unk0, FALSE, gText_HaventReceivedCardsGift)) + { + case 0: + sub_801D500(0); + sub_801D4E4(); + data->unk8 = 7; + break; + case 1: + sub_801D500(1); + sub_801D4E4(); + data->unk8 = 7; + break; + case -1u: + sub_801D500(1); + sub_801D4E4(); + data->unk8 = 7; + break; + } + break; + case 13: + if (gReceivedRemoteLinkPlayers == 0) + { + sub_800E084(); + data->unk8 = 14; + } + break; + case 14: + if (sub_8018A1C(&data->unk9, gText_CommunicationCompleted)) + { + if (data->unkD == 1) + { + StringCopy(gStringVar1, gLinkPlayers[0].name); + } + data->unk8 = 15; + } + break; + case 15: + { + register bool32 flag asm("r1"); + r1 = mevent_message(&sp0, data->unkC, data->unkD, data->unkE); + if (r1 == NULL) + { + r1 = data->unk10; + } + if (sp0) + { + flag = mevent_08142CE8(&data->unk9, r1, &data->unk0); + } + else + { + flag = mevent_0814257C(&data->unk9, r1); + } + if (flag) + { + if (data->unkE == 3) + { + if (data->unkD == 1) + { + sub_801DB68(1); + } + else + { + sub_801DB68(2); + } + } + if (sp0 == 0) + { + data->unk8 = 0; + sub_80186EC(0, 0); + } + else + { + data->unk8 = 17; + } + } + break; + } + case 16: + if (mevent_0814257C(&data->unk9, gText_CommunicationError)) + { + data->unk8 = 0; + sub_80186EC(0, 0); + } + break; + case 17: + if (mevent_save_game(&data->unk9)) + { + data->unk8 = 18; + } + break; + case 18: + if (sub_8018DAC(&data->unk9, data->unkC)) + { + data->unk8 = 20; + } + break; + case 20: + if (data->unkC == 0) + { + if (({gMain.newKeys & A_BUTTON;})) + { + data->unk8 = 21; + } + if (({gMain.newKeys & B_BUTTON;})) + { + data->unk8 = 27; + } + } + else + { + switch (sub_801CCD0(gMain.newKeys)) + { + case 0: + sub_801CC38(); + data->unk8 = 21; + break; + case 1: + data->unk8 = 27; + break; + } + } + break; + case 21: + { + u32 result; + if (data->unkC == 0) + { + if (sub_801B308()) + { + result = sub_8018C4C(&data->unk9, &data->unk0, data->unkC, FALSE); + } + else + { + result = sub_8018C4C(&data->unk9, &data->unk0, data->unkC, TRUE); + } + } + else + { + if (sub_801B128()) + { + result = sub_8018C4C(&data->unk9, &data->unk0, data->unkC, FALSE); + } + else + { + result = sub_8018C4C(&data->unk9, &data->unk0, data->unkC, TRUE); + } + } + switch (result) + { + case 0: + data->unk8 = 28; + break; + case 1: + data->unk8 = 29; + break; + case 2: + data->unk8 = 22; + break; + case -2u: + if (data->unkC == 1) + { + sub_801CC80(); + } + data->unk8 = 20; + break; + } + break; + } + case 22: + switch (sub_8018E50(&data->unk9, &data->unk0, data->unkC)) + { + case 0: + if (data->unkC == 0 && sub_801B3F8() == TRUE) + { + data->unk8 = 23; + } + else + { + data->unk8 = 24; + } + break; + case 1: + data->unk8 = 21; + break; + case -1: + data->unk8 = 21; + break; + } + break; + case 23: + switch ((u32)sub_8018B08(&data->unk9, &data->unk0, TRUE, gText_HaventReceivedGiftOkayToDiscard)) + { + case 0: + data->unk8 = 24; + break; + case 1: + data->unk8 = 21; + break; + case -1u: + data->unk8 = 21; + break; + } + break; + case 24: + if (sub_8018E20(data->unkC, 1)) + { + sub_8018E08(data->unkC); + data->unk8 = 25; + } + break; + case 25: + if (mevent_save_game(&data->unk9)) + { + data->unk8 = 26; + } + break; + case 26: + if (mevent_message_was_thrown_away(&data->unk9, data->unkC)) + { + data->unk8 = 0; + sub_80186EC(0, 0); + } + break; + case 27: + if (sub_8018E20(data->unkC, 0)) + { + data->unk8 = 0; + } + break; + case 28: + if (sub_8018E20(data->unkC, 1)) + { + data->unk8 = 3; + } + break; + case 29: + if (sub_8018E20(data->unkC, 1)) + { + switch (data->unkC) + { + case 0: + sub_8014A00(21); + break; + case 1: + sub_8014A00(22); + break; + } + data->unkD = 1; + data->unk8 = 30; + } + break; + case 30: + if (gReceivedRemoteLinkPlayers != 0) + { + sub_8018838(1); + data->unk8 = 31; + } + else if (gSpecialVar_Result == 5) + { + sub_8018838(1); + data->unk8 = 18; + } + break; + case 31: + { + register u8 eos asm("r1"); + gStringVar1[0] = (eos = EOS); + gStringVar2[0] = eos; + gStringVar3[0] = eos; + } + if (data->unkC == 0) + { + sub_8018884(gText_SendingWonderCard); + mevent_srv_new_wcard(); + } + else + { + sub_8018884(gText_SendingWonderNews); + mevent_srv_init_wnews(); + } + data->unk8 = 32; + break; + case 32: + if (sub_801D0C4(&data->unk0) == 3) + { + data->unkE = data->unk0; + data->unk8 = 33; + } + break; + case 33: + task_add_05_task_del_08FA224_when_no_RfuFunc(); + StringCopy(gStringVar1, gLinkPlayers[1].name); + data->unk8 = 34; + break; + case 34: + if (gReceivedRemoteLinkPlayers == 0) + { + sub_800E084(); + data->unk8 = 35; + } + break; + case 35: + if (sub_8019174(&data->unk9, &data->unk0, data->unkD, data->unkE)) + { + if (data->unkD == 1 && data->unkE == 3) + { + sub_801DB68(3); + data->unk8 = 17; + } + else + { + data->unk8 = 0; + sub_80186EC(0, 0); + } + } + break; + case 36: + if (mevent_0814257C(&data->unk9, gText_CommunicationError)) + { + data->unk8 = 0; + sub_80186EC(0, 0); + } + break; + case 37: + CloseLink(); + Free(data->unk10); + DestroyTask(taskId); + SetMainCallback2(sub_80186A4); + break; + } } -- cgit v1.2.3 From ade01833781ee8a8057f2b2945095bababb2e639 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 31 Mar 2019 18:59:52 -0400 Subject: Document mystery_gift --- src/battle_bg.c | 2 +- src/berry_blender.c | 2 +- src/berry_crush.c | 2 +- src/contest_link_80F57C4.c | 2 +- src/easy_chat.c | 2 +- src/ereader_screen.c | 34 +- src/evolution_scene.c | 2 +- src/international_string_util.c | 2 +- src/link_rfu.c | 6 +- src/list_menu.c | 2 +- src/main_menu.c | 3 +- src/menu.c | 2 +- src/mevent2.c | 46 +-- src/mevent_801BAAC.c | 380 +++++++++---------- src/mevent_news.c | 4 +- src/mystery_event_menu.c | 2 +- src/mystery_gift.c | 747 +++++++++++++++++++------------------- src/pokemon_storage_system.c | 2 +- src/script.c | 2 +- src/script_pokemon_util_80F87D8.c | 2 +- src/start_menu.c | 4 +- src/text_window.c | 4 +- src/trade.c | 10 +- src/union_room.c | 86 ++--- src/union_room_chat.c | 8 +- src/use_pokeblock.c | 6 +- 26 files changed, 688 insertions(+), 676 deletions(-) (limited to 'src') diff --git a/src/battle_bg.c b/src/battle_bg.c index 524f73abf..814e8dad9 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -709,7 +709,7 @@ void LoadBattleMenuWindowGfx(void) if (gBattleTypeFlags & BATTLE_TYPE_ARENA) { - sub_81978B0(0x70); + Menu_LoadStdPalAt(0x70); LoadMessageBoxGfx(0, 0x30, 0x70); gPlttBufferUnfaded[0x76] = 0; CpuCopy16(&gPlttBufferUnfaded[0x76], &gPlttBufferFaded[0x76], 2); diff --git a/src/berry_blender.c b/src/berry_blender.c index c792b9b40..26327a634 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -940,7 +940,7 @@ static void InitBerryBlenderWindows(void) FillWindowPixelBuffer(i, PIXEL_FILL(0)); FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x1E, 0x14); - sub_81978B0(0xE0); + Menu_LoadStdPalAt(0xE0); } } diff --git a/src/berry_crush.c b/src/berry_crush.c index dc4c546b0..51dbe8203 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -582,7 +582,7 @@ int sub_802130C(void) ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); break; case 6: - sub_800E084(); + DestroyWirelessStatusIndicatorSprite(); sub_8022960(var0); sub_8034CC8(); break; diff --git a/src/contest_link_80F57C4.c b/src/contest_link_80F57C4.c index a4b88c074..59f41d72a 100644 --- a/src/contest_link_80F57C4.c +++ b/src/contest_link_80F57C4.c @@ -778,7 +778,7 @@ static void sub_80F677C(u8 taskId) if (!gReceivedRemoteLinkPlayers) { if (gIsLinkContest & 0x2) - sub_800E084(); + DestroyWirelessStatusIndicatorSprite(); sub_80F7144(); gTasks[taskId].func = sub_80F67C4; diff --git a/src/easy_chat.c b/src/easy_chat.c index 2e384de6e..1cb7b0fe8 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -3721,7 +3721,7 @@ static void sub_811D0BC(void) { FillBgTilemapBufferRect(0, 0, 0, 0, 32, 20, 17); LoadUserWindowBorderGfx(1, 1, 0xE0); - sub_8098858(1, 1, 14); + DrawTextBorderOuter(1, 1, 14); sub_811D104(0); PutWindowTilemap(1); CopyBgTilemapBufferToVram(0); diff --git a/src/ereader_screen.c b/src/ereader_screen.c index 10a23e251..bac29cd42 100755 --- a/src/ereader_screen.c +++ b/src/ereader_screen.c @@ -4,7 +4,7 @@ #include "ereader_helpers.h" #include "link.h" #include "main.h" -#include "union_room.h" +#include "mystery_gift.h" #include "save.h" #include "sound.h" #include "sprite.h" @@ -209,7 +209,7 @@ static u32 sub_81D4EE4(u8 *arg0, u16 *arg1) return 0; } -void sub_81D5014(void) +void task_add_00_ereader(void) { int value; struct Unk81D5014 *data; @@ -251,7 +251,7 @@ static void sub_81D5084(u8 taskId) switch (data->unk8) { case 0: - if (mevent_0814257C(&data->unk9, gUnknown_085EDFD6)) + if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9, gUnknown_085EDFD6)) data->unk8 = 1; break; case 1: @@ -275,9 +275,9 @@ static void sub_81D5084(u8 taskId) } break; case 4: - if (mevent_0814257C(&data->unk9, gUnknown_085EDFF5)) + if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9, gUnknown_085EDFF5)) { - sub_8018884(gUnknown_085EE014); + AddTextPrinterToWindow1(gUnknown_085EE014); sub_81D505C(&data->unk0); data->unk8 = 5; } @@ -324,11 +324,11 @@ static void sub_81D5084(u8 taskId) } break; case 7: - if (mevent_0814257C(&data->unk9, gUnknown_085EE05C)) + if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9, gUnknown_085EE05C)) data->unk8 = 4; break; case 8: - sub_8018884(gUnknown_085EE097); + AddTextPrinterToWindow1(gUnknown_085EE097); // XXX: This (u32*) cast is discarding the const qualifier from gUnknown_089A3470 sub_81D4D50(&gUnknown_03006370, gMultiBootProgram_BerryGlitchFix_Start - gUnknown_089A3470, (u32*)gUnknown_089A3470); data->unk8 = 9; @@ -347,7 +347,7 @@ static void sub_81D5084(u8 taskId) else if (data->unkE == 1) { sub_81D505C(&data->unk0); - sub_8018884(gUnknown_085EE120); + AddTextPrinterToWindow1(gUnknown_085EE120); data->unk8 = 11; } else @@ -361,7 +361,7 @@ static void sub_81D5084(u8 taskId) break; case 12: sub_81D4E30(); - sub_8018884(gUnknown_085EE0DC); + AddTextPrinterToWindow1(gUnknown_085EE0DC); data->unk8 = 13; break; case 13: @@ -370,7 +370,7 @@ static void sub_81D5084(u8 taskId) case 0: break; case 2: - sub_8018884(gUnknown_085EE097); + AddTextPrinterToWindow1(gUnknown_085EE097); data->unk8 = 14; break; case 1: @@ -418,7 +418,7 @@ static void sub_81D5084(u8 taskId) case 17: if (sub_81D3AB0((struct Unk81D38FC *)&gDecompressionBuffer)) { - sub_8018884(gUnknown_085EE0FA); + AddTextPrinterToWindow1(gUnknown_085EE0FA); sub_81D505C(&data->unk0); data->unk8 = 18; } @@ -430,7 +430,7 @@ static void sub_81D5084(u8 taskId) case 18: if (sub_81D5064(&data->unk0, 120)) { - sub_8018884(gUnknown_085EE107); + AddTextPrinterToWindow1(gUnknown_085EE107); PlayFanfare(MUS_FANFA4); data->unk8 = 19; } @@ -440,25 +440,25 @@ static void sub_81D5084(u8 taskId) data->unk8 = 26; break; case 23: - if (mevent_0814257C(&data->unk9,gUnknown_085EE06B)) + if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9,gUnknown_085EE06B)) data->unk8 = 26; break; case 20: - if (mevent_0814257C(&data->unk9, gUnknown_085EE0A3)) + if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9, gUnknown_085EE0A3)) data->unk8 = 0; break; case 21: - if (mevent_0814257C(&data->unk9, gUnknown_085EE0BF)) + if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9, gUnknown_085EE0BF)) data->unk8 = 0; break; case 22: - if (mevent_0814257C(&data->unk9, gUnknown_085EE12D)) + if (MG_PrintTextOnWindow1AndWaitButton(&data->unk9, gUnknown_085EE12D)) data->unk8 = 0; break; case 26: Free(data->unk10); DestroyTask(taskId); - SetMainCallback2(sub_80186A4); + SetMainCallback2(MainCB_FreeAllBuffersAndReturnToInitTitleScreen); break; } } diff --git a/src/evolution_scene.c b/src/evolution_scene.c index 4bf7701be..8c4847b8d 100644 --- a/src/evolution_scene.c +++ b/src/evolution_scene.c @@ -1228,7 +1228,7 @@ static void Task_TradeEvolutionScene(u8 taskID) if (!gPaletteFade.active) { if (gWirelessCommType) - sub_800E084(); + DestroyWirelessStatusIndicatorSprite(); Free(GetBgTilemapBuffer(3)); Free(GetBgTilemapBuffer(1)); diff --git a/src/international_string_util.c b/src/international_string_util.c index a7c42c39e..dfeda49e3 100644 --- a/src/international_string_util.c +++ b/src/international_string_util.c @@ -62,7 +62,7 @@ int sub_81DB3D8(const struct MenuAction *str, const u8* arg1, int arg2) return convert_pixel_width_to_tile_width(var); } -int sub_81DB41C(const struct ListMenuTemplate *listMenu) +int Intl_GetListMenuWidth(const struct ListMenuTemplate *listMenu) { int i, maxWidth, finalWidth; const struct ListMenuItem *items = listMenu->items; diff --git a/src/link_rfu.c b/src/link_rfu.c index 43d19be03..a430f6e24 100644 --- a/src/link_rfu.c +++ b/src/link_rfu.c @@ -2243,7 +2243,7 @@ void CreateWirelessStatusIndicatorSprite(u8 x, u8 y) } } -void sub_800E084(void) +void DestroyWirelessStatusIndicatorSprite(void) { if (gSprites[gWirelessStatusIndicatorSpriteId].data[7] == 0x1234) { @@ -2356,7 +2356,7 @@ void sub_800E174(void) CpuCopy16(gMain.oamBuffer + 125, (struct OamData *)OAM + 125, sizeof(struct OamData)); if (sub_8011A74() == 1) { - sub_800E084(); + DestroyWirelessStatusIndicatorSprite(); } } } @@ -4209,7 +4209,7 @@ void sub_8010DB4(void) { if (gUnknown_03005000.unk_ee == 1 && gUnknown_03004140.unk_02 == 0) { - if (gMain.callback2 == sub_8018438 || gUnknown_03004140.unk_3c->unk_04) + if (gMain.callback2 == c2_mystery_gift_e_reader_run || gUnknown_03004140.unk_3c->unk_04) gWirelessCommType = 2; SetMainCallback2(CB2_LinkError); gMain.savedCallback = CB2_LinkError; diff --git a/src/list_menu.c b/src/list_menu.c index 3bcd3073d..6d51559f7 100644 --- a/src/list_menu.c +++ b/src/list_menu.c @@ -324,7 +324,7 @@ s32 DoMysteryGiftListMenu(const struct WindowTemplate *windowTemplate, const str case 2: LoadUserWindowBorderGfx(sMysteryGiftLinkMenu.windowId, tileNum, palNum); case 1: - sub_8098858(sMysteryGiftLinkMenu.windowId, tileNum, palNum / 16); + DrawTextBorderOuter(sMysteryGiftLinkMenu.windowId, tileNum, palNum / 16); break; } gMultiuseListMenuTemplate = *listMenuTemplate; diff --git a/src/main_menu.c b/src/main_menu.c index cbd257cb1..8c9612c24 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -38,6 +38,7 @@ #include "text_window.h" #include "title_screen.h" #include "window.h" +#include "mystery_gift.h" /* * Main menu state machine @@ -1083,7 +1084,7 @@ static void Task_HandleMainMenuAPressed(u8 taskId) DestroyTask(taskId); break; case ACTION_EREADER: - SetMainCallback2(sub_801867C); + SetMainCallback2(c2_ereader); DestroyTask(taskId); break; case ACTION_INVALID: diff --git a/src/menu.c b/src/menu.c index b04572b81..958788b25 100644 --- a/src/menu.c +++ b/src/menu.c @@ -432,7 +432,7 @@ void sub_819789C(void) LoadPalette(gUnknown_0860F074, STD_WINDOW_PALETTE_NUM * 0x10, 0x14); } -void sub_81978B0(u16 offset) +void Menu_LoadStdPalAt(u16 offset) { LoadPalette(gUnknown_0860F074, offset, 0x14); } diff --git a/src/mevent2.c b/src/mevent2.c index 8a6bd9faa..4174c4055 100755 --- a/src/mevent2.c +++ b/src/mevent2.c @@ -14,7 +14,7 @@ static EWRAM_DATA bool32 gUnknown_02022C70 = FALSE; static void sub_801B180(void); -static void sub_801B14C(void); +static void s_DestroyWonderNews(void); static bool32 sub_801B114(const struct MEventBuffer_3120_Sub *data); static bool32 sub_801B2CC(const struct MEventBuffer_32E0_Sub *data); static void sub_801B330(void); @@ -29,7 +29,7 @@ void sub_801AFD8(void) sub_811F8BC(); } -struct MEventBuffer_3120_Sub *sub_801B00C(void) +struct MEventBuffer_3120_Sub *sav1_get_mevent_buffer_0(void) { return &gSaveBlock1Ptr->unk_322C.buffer_000.data; } @@ -54,9 +54,9 @@ u16 *sub_801B058(void) return gSaveBlock1Ptr->unk_322C.unk_338; } -void sub_801B06C(void) +void DestroyWonderNews(void) { - sub_801B14C(); + s_DestroyWonderNews(); } bool32 sub_801B078(const struct MEventBuffer_3120_Sub *src) @@ -64,13 +64,13 @@ bool32 sub_801B078(const struct MEventBuffer_3120_Sub *src) if (!sub_801B114(src)) return FALSE; - sub_801B14C(); + s_DestroyWonderNews(); gSaveBlock1Ptr->unk_322C.buffer_000.data = *src; gSaveBlock1Ptr->unk_322C.buffer_000.crc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.buffer_000.data, sizeof(struct MEventBuffer_3120_Sub)); return TRUE; } -bool32 sub_801B0CC(void) +bool32 ValidateReceivedWonderNews(void) { if (CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.buffer_000.data, sizeof(struct MEventBuffer_3120_Sub)) != gSaveBlock1Ptr->unk_322C.buffer_000.crc) return FALSE; @@ -88,7 +88,7 @@ static bool32 sub_801B114(const struct MEventBuffer_3120_Sub *data) return TRUE; } -bool32 sub_801B128(void) +bool32 WonderNews_Test_Unk_02(void) { const struct MEventBuffer_3120_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_000.data; if (data->unk_02 == 0) @@ -97,9 +97,9 @@ bool32 sub_801B128(void) return TRUE; } -static void sub_801B14C(void) +static void s_DestroyWonderNews(void) { - CpuFill32(0, sub_801B00C(), sizeof(gSaveBlock1Ptr->unk_322C.buffer_000.data)); + CpuFill32(0, sav1_get_mevent_buffer_0(), sizeof(gSaveBlock1Ptr->unk_322C.buffer_000.data)); gSaveBlock1Ptr->unk_322C.buffer_000.crc = 0; } @@ -113,7 +113,7 @@ bool32 sub_801B1A4(const u8 *src) { const u8 *r5 = (const u8 *)&gSaveBlock1Ptr->unk_322C.buffer_000.data; u32 i; - if (!sub_801B0CC()) + if (!ValidateReceivedWonderNews()) return FALSE; for (i = 0; i < sizeof(struct MEventBuffer_3120_Sub); i++) @@ -125,7 +125,7 @@ bool32 sub_801B1A4(const u8 *src) return TRUE; } -void sub_801B1E8(void) +void DestroyWonderCard(void) { sub_801B330(); sub_801B368(); @@ -143,7 +143,7 @@ bool32 sub_801B21C(const struct MEventBuffer_32E0_Sub *data) if (!sub_801B2CC(data)) return FALSE; - sub_801B1E8(); + DestroyWonderCard(); memcpy(&gSaveBlock1Ptr->unk_322C.buffer_1c0.data, data, sizeof(struct MEventBuffer_32E0_Sub)); gSaveBlock1Ptr->unk_322C.buffer_1c0.crc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.buffer_1c0.data, sizeof(struct MEventBuffer_32E0_Sub)); r2 = &gSaveBlock1Ptr->unk_322C.buffer_310.data; @@ -152,7 +152,7 @@ bool32 sub_801B21C(const struct MEventBuffer_32E0_Sub *data) return TRUE; } -bool32 sub_801B27C(void) +bool32 ValidateReceivedWonderCard(void) { if (gSaveBlock1Ptr->unk_322C.buffer_1c0.crc != CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.buffer_1c0.data, sizeof(struct MEventBuffer_32E0_Sub))) return FALSE; @@ -180,7 +180,7 @@ static bool32 sub_801B2CC(const struct MEventBuffer_32E0_Sub *data) return TRUE; } -bool32 sub_801B308(void) +bool32 WonderCard_Test_Unk_08_6(void) { const struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data; if (data->unk_08_6 == 0) @@ -201,9 +201,9 @@ static void sub_801B368(void) gSaveBlock1Ptr->unk_322C.buffer_310.crc = 0; } -u16 sub_801B39C(void) +u16 GetWonderCardFlagID(void) { - if (sub_801B27C()) + if (ValidateReceivedWonderCard()) return gSaveBlock1Ptr->unk_322C.buffer_1c0.data.unk_00; return 0; @@ -215,7 +215,7 @@ void sub_801B3C0(struct MEventBuffer_32E0_Sub *buffer) buffer->unk_08_6 = 0; } -static bool32 sub_801B3D8(u16 a0) +static bool32 IsWonderCardFlagIDInValidRange(u16 a0) { if (a0 >= 1000 && a0 < 1020) return TRUE; @@ -247,10 +247,10 @@ static const u16 sMysteryGiftFlags[] = FLAG_UNUSED_MYSTERY_GIFT_0x14D, }; -bool32 sub_801B3F8(void) +bool32 CheckReceivedGiftFromWonderCard(void) { - u16 value = sub_801B39C(); - if (!sub_801B3D8(value)) + u16 value = GetWonderCardFlagID(); + if (!IsWonderCardFlagIDInValidRange(value)) return FALSE; if (FlagGet(sMysteryGiftFlags[value - 1000]) == TRUE) @@ -300,7 +300,7 @@ static bool32 sub_801B4A4(const u16 *data) static int sub_801B4CC(void) { struct MEventBuffer_32E0_Sub *data; - if (!sub_801B27C()) + if (!ValidateReceivedWonderCard()) return 0; data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data; @@ -353,7 +353,7 @@ void sub_801B580(struct MEventStruct_Unk1442CC *data, bool32 a1) data->unk_10 = 0x0200; } - if (sub_801B27C()) + if (ValidateReceivedWonderCard()) { data->unk_14 = sav1_get_mevent_buffer_1()->unk_00; data->unk_20 = *sav1_get_mevent_buffer_2(); @@ -554,7 +554,7 @@ bool32 sub_801B94C(u16 a0) if (a0 == 0) return FALSE; - if (!sub_801B27C()) + if (!ValidateReceivedWonderCard()) return FALSE; if (gSaveBlock1Ptr->unk_322C.buffer_1c0.data.unk_00 != a0) diff --git a/src/mevent_801BAAC.c b/src/mevent_801BAAC.c index b9931a682..24a999f69 100644 --- a/src/mevent_801BAAC.c +++ b/src/mevent_801BAAC.c @@ -53,7 +53,7 @@ struct UnkStruct_203F3C8 /*045C*/ u8 buffer_045C[0x1000]; }; -EWRAM_DATA struct UnkStruct_203F3C8 * gUnknown_02022C74 = NULL; +EWRAM_DATA struct UnkStruct_203F3C8 * sWonderCardData = NULL; void sub_801BEF8(void); void sub_801C178(u8 whichWindow); @@ -150,40 +150,40 @@ const struct UnkStruct_8467FB8 gUnknown_082F1D60[8] = { {1, 0, 0, 7, gWonderCardBgGfx8, gWonderCardBgTilemap8, gWonderCardBgPal8} }; -bool32 sub_801BAAC(struct MEventBuffer_32E0_Sub * r5, struct MEventBuffer_3430_Sub * r6) +bool32 InitWonderCardResources(struct MEventBuffer_32E0_Sub * r5, struct MEventBuffer_3430_Sub * r6) { if (r5 == NULL || r6 == NULL) return FALSE; - gUnknown_02022C74 = AllocZeroed(sizeof(struct UnkStruct_203F3C8)); - if (gUnknown_02022C74 == NULL) + sWonderCardData = AllocZeroed(sizeof(struct UnkStruct_203F3C8)); + if (sWonderCardData == NULL) return FALSE; - gUnknown_02022C74->unk_0000 = *r5; - gUnknown_02022C74->unk_014C = *r6; - if (gUnknown_02022C74->unk_0000.unk_08_2 >= ARRAY_COUNT(gUnknown_082F1D60)) - gUnknown_02022C74->unk_0000.unk_08_2 = 0; - if (gUnknown_02022C74->unk_0000.unk_08_0 >= ARRAY_COUNT(gUnknown_082F0E18)) - gUnknown_02022C74->unk_0000.unk_08_0 = 0; - if (gUnknown_02022C74->unk_0000.unk_09 > ARRAY_COUNT(gUnknown_02022C74->unk_017D)) - gUnknown_02022C74->unk_0000.unk_09 = 0; - gUnknown_02022C74->unk_0170 = &gUnknown_082F1D60[gUnknown_02022C74->unk_0000.unk_08_2]; + sWonderCardData->unk_0000 = *r5; + sWonderCardData->unk_014C = *r6; + if (sWonderCardData->unk_0000.unk_08_2 >= ARRAY_COUNT(gUnknown_082F1D60)) + sWonderCardData->unk_0000.unk_08_2 = 0; + if (sWonderCardData->unk_0000.unk_08_0 >= ARRAY_COUNT(gUnknown_082F0E18)) + sWonderCardData->unk_0000.unk_08_0 = 0; + if (sWonderCardData->unk_0000.unk_09 > ARRAY_COUNT(sWonderCardData->unk_017D)) + sWonderCardData->unk_0000.unk_09 = 0; + sWonderCardData->unk_0170 = &gUnknown_082F1D60[sWonderCardData->unk_0000.unk_08_2]; return TRUE; } -void sub_801BB48(void) +void DestroyWonderCardResources(void) { - if (gUnknown_02022C74 != NULL) + if (sWonderCardData != NULL) { - *gUnknown_02022C74 = (struct UnkStruct_203F3C8){}; - Free(gUnknown_02022C74); - gUnknown_02022C74 = NULL; + *sWonderCardData = (struct UnkStruct_203F3C8){}; + Free(sWonderCardData); + sWonderCardData = NULL; } } -s32 sub_801BB74(void) +s32 FadeToWonderCardMenu(void) { - if (gUnknown_02022C74 == NULL) + if (sWonderCardData == NULL) return -1; - switch(gUnknown_02022C74->unk_0174) + switch(sWonderCardData->unk_0174) { case 0: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); @@ -199,19 +199,19 @@ s32 sub_801BB74(void) CopyBgTilemapBufferToVram(0); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(2); - decompress_and_copy_tile_data_to_vram(2, gUnknown_02022C74->unk_0170->tiles, 0, 0x008, 0); - gUnknown_02022C74->unk_0176[0] = AddWindow(&gUnknown_082F0E1C[0]); - gUnknown_02022C74->unk_0176[1] = AddWindow(&gUnknown_082F0E1C[1]); - gUnknown_02022C74->unk_0176[2] = AddWindow(&gUnknown_082F0E1C[2]); + decompress_and_copy_tile_data_to_vram(2, sWonderCardData->unk_0170->tiles, 0, 0x008, 0); + sWonderCardData->unk_0176[0] = AddWindow(&gUnknown_082F0E1C[0]); + sWonderCardData->unk_0176[1] = AddWindow(&gUnknown_082F0E1C[1]); + sWonderCardData->unk_0176[2] = AddWindow(&gUnknown_082F0E1C[2]); break; case 3: if (free_temp_tile_data_buffers_if_possible()) return 0; LoadPalette(stdpal_get(1), 0x20, 0x20); gPaletteFade.bufferTransferDisabled = TRUE; - LoadPalette(gUnknown_02022C74->unk_0170->pal, 0x10, 0x20); - LZ77UnCompWram(gUnknown_02022C74->unk_0170->map, gUnknown_02022C74->buffer_045C); - CopyRectToBgTilemapBufferRect(2, gUnknown_02022C74->buffer_045C, 0, 0, 30, 20, 0, 0, 30, 20, 1, 0x008, 0); + LoadPalette(sWonderCardData->unk_0170->pal, 0x10, 0x20); + LZ77UnCompWram(sWonderCardData->unk_0170->map, sWonderCardData->buffer_045C); + CopyRectToBgTilemapBufferRect(2, sWonderCardData->buffer_045C, 0, 0, 30, 20, 0, 0, 30, 20, 1, 0x008, 0); CopyBgTilemapBufferToVram(2); break; case 4: @@ -237,18 +237,18 @@ s32 sub_801BB74(void) default: if (UpdatePaletteFade()) return 0; - gUnknown_02022C74->unk_0174 = 0; + sWonderCardData->unk_0174 = 0; return 1; } - ++gUnknown_02022C74->unk_0174; + ++sWonderCardData->unk_0174; return 0; } -s32 sub_801BDA4(bool32 flag) +s32 FadeOutFromWonderCard(bool32 flag) { - if (gUnknown_02022C74 == NULL) + if (sWonderCardData == NULL) return -1; - switch (gUnknown_02022C74->unk_0174) + switch (sWonderCardData->unk_0174) { case 0: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); @@ -268,26 +268,26 @@ s32 sub_801BDA4(bool32 flag) case 3: HideBg(1); HideBg(2); - RemoveWindow(gUnknown_02022C74->unk_0176[2]); - RemoveWindow(gUnknown_02022C74->unk_0176[1]); - RemoveWindow(gUnknown_02022C74->unk_0176[0]); + RemoveWindow(sWonderCardData->unk_0176[2]); + RemoveWindow(sWonderCardData->unk_0176[1]); + RemoveWindow(sWonderCardData->unk_0176[0]); break; case 4: sub_801C61C(); FreeMonIconPalettes(); break; case 5: - sub_80186EC(gUnknown_02022C60, flag); + PrintMysteryGiftOrEReaderTopMenu(gGiftIsFromEReader, flag); CopyBgTilemapBufferToVram(0); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); break; default: if (UpdatePaletteFade()) return 0; - gUnknown_02022C74->unk_0174 = 0; + sWonderCardData->unk_0174 = 0; return 1; } - ++gUnknown_02022C74->unk_0174; + ++sWonderCardData->unk_0174; return 0; } @@ -297,59 +297,59 @@ void sub_801BEF8(void) u16 r6; u16 sp0[3] = {0, 0, 0}; - memcpy(gUnknown_02022C74->unk_018B, gUnknown_02022C74->unk_0000.unk_0A, 40); - gUnknown_02022C74->unk_018B[40] = EOS; - memcpy(gUnknown_02022C74->unk_01B4, gUnknown_02022C74->unk_0000.unk_32, 40); - gUnknown_02022C74->unk_01B4[40] = EOS; - if (gUnknown_02022C74->unk_0000.unk_04 > 999999) - gUnknown_02022C74->unk_0000.unk_04 = 999999; - ConvertIntToDecimalStringN(gUnknown_02022C74->unk_01DD, gUnknown_02022C74->unk_0000.unk_04, STR_CONV_MODE_LEFT_ALIGN, 6); + memcpy(sWonderCardData->unk_018B, sWonderCardData->unk_0000.unk_0A, 40); + sWonderCardData->unk_018B[40] = EOS; + memcpy(sWonderCardData->unk_01B4, sWonderCardData->unk_0000.unk_32, 40); + sWonderCardData->unk_01B4[40] = EOS; + if (sWonderCardData->unk_0000.unk_04 > 999999) + sWonderCardData->unk_0000.unk_04 = 999999; + ConvertIntToDecimalStringN(sWonderCardData->unk_01DD, sWonderCardData->unk_0000.unk_04, STR_CONV_MODE_LEFT_ALIGN, 6); for (i = 0; i < 4; i++) { - memcpy(gUnknown_02022C74->unk_01E4[i], gUnknown_02022C74->unk_0000.unk_5A[i], 40); - gUnknown_02022C74->unk_01E4[i][40] = EOS; + memcpy(sWonderCardData->unk_01E4[i], sWonderCardData->unk_0000.unk_5A[i], 40); + sWonderCardData->unk_01E4[i][40] = EOS; } - memcpy(gUnknown_02022C74->unk_0288, gUnknown_02022C74->unk_0000.unk_FA, 40); - gUnknown_02022C74->unk_0288[40] = EOS; - switch (gUnknown_02022C74->unk_0000.unk_08_0) + memcpy(sWonderCardData->unk_0288, sWonderCardData->unk_0000.unk_FA, 40); + sWonderCardData->unk_0288[40] = EOS; + switch (sWonderCardData->unk_0000.unk_08_0) { case 0: - memcpy(gUnknown_02022C74->unk_02B1, gUnknown_02022C74->unk_0000.unk_122, 40); - gUnknown_02022C74->unk_02B1[40] = EOS; + memcpy(sWonderCardData->unk_02B1, sWonderCardData->unk_0000.unk_122, 40); + sWonderCardData->unk_02B1[40] = EOS; break; case 1: - gUnknown_02022C74->unk_02B1[00] = EOS; + sWonderCardData->unk_02B1[00] = EOS; break; case 2: - gUnknown_02022C74->unk_02B1[00] = EOS; - sp0[0] = gUnknown_02022C74->unk_014C.unk_00 < 999 ? gUnknown_02022C74->unk_014C.unk_00 : 999; - sp0[1] = gUnknown_02022C74->unk_014C.unk_02 < 999 ? gUnknown_02022C74->unk_014C.unk_02 : 999; - sp0[2] = gUnknown_02022C74->unk_014C.unk_04 < 999 ? gUnknown_02022C74->unk_014C.unk_04 : 999; + sWonderCardData->unk_02B1[00] = EOS; + sp0[0] = sWonderCardData->unk_014C.unk_00 < 999 ? sWonderCardData->unk_014C.unk_00 : 999; + sp0[1] = sWonderCardData->unk_014C.unk_02 < 999 ? sWonderCardData->unk_014C.unk_02 : 999; + sp0[2] = sWonderCardData->unk_014C.unk_04 < 999 ? sWonderCardData->unk_014C.unk_04 : 999; for (i = 0; i < 8; i++) { - memset(gUnknown_02022C74->unk_02DC[i].unk_42, EOS, 4); - memset(gUnknown_02022C74->unk_02DC[i].unk_01, EOS, 41); + memset(sWonderCardData->unk_02DC[i].unk_42, EOS, 4); + memset(sWonderCardData->unk_02DC[i].unk_01, EOS, 41); } for (i = 0, r6 = 0; i < 40; i++) { - if (gUnknown_02022C74->unk_0000.unk_122[i] != 0xF7) + if (sWonderCardData->unk_0000.unk_122[i] != 0xF7) { - gUnknown_02022C74->unk_02DC[gUnknown_02022C74->unk_0175].unk_01[r6] = gUnknown_02022C74->unk_0000.unk_122[i]; + sWonderCardData->unk_02DC[sWonderCardData->unk_0175].unk_01[r6] = sWonderCardData->unk_0000.unk_122[i]; r6++; } else { - u8 r3 = gUnknown_02022C74->unk_0000.unk_122[i + 1]; + u8 r3 = sWonderCardData->unk_0000.unk_122[i + 1]; if (r3 > 2) { i += 2; } else { - ConvertIntToDecimalStringN(gUnknown_02022C74->unk_02DC[gUnknown_02022C74->unk_0175].unk_42, sp0[r3], STR_CONV_MODE_LEADING_ZEROS, 3); - gUnknown_02022C74->unk_02DC[gUnknown_02022C74->unk_0175].unk_00 = gUnknown_02022C74->unk_0000.unk_122[i + 2]; - gUnknown_02022C74->unk_0175++; - if (gUnknown_02022C74->unk_0175 > 7) + ConvertIntToDecimalStringN(sWonderCardData->unk_02DC[sWonderCardData->unk_0175].unk_42, sp0[r3], STR_CONV_MODE_LEADING_ZEROS, 3); + sWonderCardData->unk_02DC[sWonderCardData->unk_0175].unk_00 = sWonderCardData->unk_0000.unk_122[i + 2]; + sWonderCardData->unk_0175++; + if (sWonderCardData->unk_0175 > 7) break; r6 = 0; i += 2; @@ -362,7 +362,7 @@ void sub_801BEF8(void) void sub_801C178(u8 whichWindow) { s8 sp0C = 0; - s32 windowId = gUnknown_02022C74->unk_0176[whichWindow]; + s32 windowId = sWonderCardData->unk_0176[whichWindow]; PutWindowTilemap(windowId); FillWindowPixelBuffer(windowId, 0); switch (whichWindow) @@ -370,42 +370,42 @@ void sub_801C178(u8 whichWindow) case 0: { s32 x; - AddTextPrinterParameterized3(windowId, 3, 0, 1, gUnknown_082F0E10[gUnknown_02022C74->unk_0170->textPal1], 0, gUnknown_02022C74->unk_018B); - x = 160 - GetStringWidth(3, gUnknown_02022C74->unk_01B4, GetFontAttribute(3, 2)); + AddTextPrinterParameterized3(windowId, 3, 0, 1, gUnknown_082F0E10[sWonderCardData->unk_0170->textPal1], 0, sWonderCardData->unk_018B); + x = 160 - GetStringWidth(3, sWonderCardData->unk_01B4, GetFontAttribute(3, 2)); if (x < 0) x = 0; - AddTextPrinterParameterized3(windowId, 3, x, 17, gUnknown_082F0E10[gUnknown_02022C74->unk_0170->textPal1], 0, gUnknown_02022C74->unk_01B4); - if (gUnknown_02022C74->unk_0000.unk_04 != 0) + AddTextPrinterParameterized3(windowId, 3, x, 17, gUnknown_082F0E10[sWonderCardData->unk_0170->textPal1], 0, sWonderCardData->unk_01B4); + if (sWonderCardData->unk_0000.unk_04 != 0) { - AddTextPrinterParameterized3(windowId, 1, 166, 17, gUnknown_082F0E10[gUnknown_02022C74->unk_0170->textPal1], 0, gUnknown_02022C74->unk_01DD); + AddTextPrinterParameterized3(windowId, 1, 166, 17, gUnknown_082F0E10[sWonderCardData->unk_0170->textPal1], 0, sWonderCardData->unk_01DD); } break; } case 1: for (; sp0C < 4; sp0C++) { - AddTextPrinterParameterized3(windowId, 3, 0, 16 * sp0C + 2, gUnknown_082F0E10[gUnknown_02022C74->unk_0170->textPal2], 0, gUnknown_02022C74->unk_01E4[sp0C]); + AddTextPrinterParameterized3(windowId, 3, 0, 16 * sp0C + 2, gUnknown_082F0E10[sWonderCardData->unk_0170->textPal2], 0, sWonderCardData->unk_01E4[sp0C]); } break; case 2: - AddTextPrinterParameterized3(windowId, 3, 0, gUnknown_082F0E18[gUnknown_02022C74->unk_0000.unk_08_0], gUnknown_082F0E10[gUnknown_02022C74->unk_0170->textPal3], 0, gUnknown_02022C74->unk_0288); - if (gUnknown_02022C74->unk_0000.unk_08_0 != 2) + AddTextPrinterParameterized3(windowId, 3, 0, gUnknown_082F0E18[sWonderCardData->unk_0000.unk_08_0], gUnknown_082F0E10[sWonderCardData->unk_0170->textPal3], 0, sWonderCardData->unk_0288); + if (sWonderCardData->unk_0000.unk_08_0 != 2) { - AddTextPrinterParameterized3(windowId, 3, 0, 16 + gUnknown_082F0E18[gUnknown_02022C74->unk_0000.unk_08_0], gUnknown_082F0E10[gUnknown_02022C74->unk_0170->textPal3], 0, gUnknown_02022C74->unk_02B1); + AddTextPrinterParameterized3(windowId, 3, 0, 16 + gUnknown_082F0E18[sWonderCardData->unk_0000.unk_08_0], gUnknown_082F0E10[sWonderCardData->unk_0170->textPal3], 0, sWonderCardData->unk_02B1); } else { s32 x = 0; - s32 y = gUnknown_082F0E18[gUnknown_02022C74->unk_0000.unk_08_0] + 16; + s32 y = gUnknown_082F0E18[sWonderCardData->unk_0000.unk_08_0] + 16; s32 spacing = GetFontAttribute(3, 2); - for (; sp0C < gUnknown_02022C74->unk_0175; sp0C++) + for (; sp0C < sWonderCardData->unk_0175; sp0C++) { - AddTextPrinterParameterized3(windowId, 3, x, y, gUnknown_082F0E10[gUnknown_02022C74->unk_0170->textPal3], 0, gUnknown_02022C74->unk_02DC[sp0C].unk_01); - if (gUnknown_02022C74->unk_02DC[sp0C].unk_42[0] != EOS) + AddTextPrinterParameterized3(windowId, 3, x, y, gUnknown_082F0E10[sWonderCardData->unk_0170->textPal3], 0, sWonderCardData->unk_02DC[sp0C].unk_01); + if (sWonderCardData->unk_02DC[sp0C].unk_42[0] != EOS) { - x += GetStringWidth(3, gUnknown_02022C74->unk_02DC[sp0C].unk_01, spacing); - AddTextPrinterParameterized3(windowId, 3, x, y, gUnknown_082F0E10[gUnknown_02022C74->unk_0170->textPal3], 0, gUnknown_02022C74->unk_02DC[sp0C].unk_42); - x += GetStringWidth(3, gUnknown_02022C74->unk_02DC[sp0C].unk_42, spacing) + gUnknown_02022C74->unk_02DC[sp0C].unk_00; + x += GetStringWidth(3, sWonderCardData->unk_02DC[sp0C].unk_01, spacing); + AddTextPrinterParameterized3(windowId, 3, x, y, gUnknown_082F0E10[sWonderCardData->unk_0170->textPal3], 0, sWonderCardData->unk_02DC[sp0C].unk_42); + x += GetStringWidth(3, sWonderCardData->unk_02DC[sp0C].unk_42, spacing) + sWonderCardData->unk_02DC[sp0C].unk_00; } } } @@ -417,24 +417,24 @@ void sub_801C178(u8 whichWindow) void sub_801C4C0(void) { u8 r7 = 0; - gUnknown_02022C74->unk_017C = 0xFF; - if (gUnknown_02022C74->unk_014C.unk_06 != SPECIES_NONE) + sWonderCardData->unk_017C = 0xFF; + if (sWonderCardData->unk_014C.unk_06 != SPECIES_NONE) { - gUnknown_02022C74->unk_017C = sub_80D2D78(sub_80D2E84(gUnknown_02022C74->unk_014C.unk_06), SpriteCallbackDummy, 0xDC, 0x14, 0, FALSE); - gSprites[gUnknown_02022C74->unk_017C].oam.priority = 2; + sWonderCardData->unk_017C = sub_80D2D78(sub_80D2E84(sWonderCardData->unk_014C.unk_06), SpriteCallbackDummy, 0xDC, 0x14, 0, FALSE); + gSprites[sWonderCardData->unk_017C].oam.priority = 2; } - if (gUnknown_02022C74->unk_0000.unk_09 != 0 && gUnknown_02022C74->unk_0000.unk_08_0 == 1) + if (sWonderCardData->unk_0000.unk_09 != 0 && sWonderCardData->unk_0000.unk_08_0 == 1) { LoadCompressedSpriteSheetUsingHeap(&gUnknown_082F1D00); - LoadSpritePalette(&gUnknown_082F1D08[gUnknown_02022C74->unk_0170->textPal4]); - for (; r7 < gUnknown_02022C74->unk_0000.unk_09; r7++) + LoadSpritePalette(&gUnknown_082F1D08[sWonderCardData->unk_0170->textPal4]); + for (; r7 < sWonderCardData->unk_0000.unk_09; r7++) { - gUnknown_02022C74->unk_017D[r7][0] = 0xFF; - gUnknown_02022C74->unk_017D[r7][1] = 0xFF; - gUnknown_02022C74->unk_017D[r7][0] = CreateSprite(&gUnknown_082F1D48, 0xd8 - 32 * r7, 0x90, 8); - if (gUnknown_02022C74->unk_014C.unk_08[0][r7] != 0) + sWonderCardData->unk_017D[r7][0] = 0xFF; + sWonderCardData->unk_017D[r7][1] = 0xFF; + sWonderCardData->unk_017D[r7][0] = CreateSprite(&gUnknown_082F1D48, 0xd8 - 32 * r7, 0x90, 8); + if (sWonderCardData->unk_014C.unk_08[0][r7] != 0) { - gUnknown_02022C74->unk_017D[r7][1] = sub_80D2D78(sub_80D2E84(gUnknown_02022C74->unk_014C.unk_08[0][r7]), SpriteCallbackDummy, 0xd8 - 32 * r7, 0x88, 0, 0); + sWonderCardData->unk_017D[r7][1] = sub_80D2D78(sub_80D2E84(sWonderCardData->unk_014C.unk_08[0][r7]), SpriteCallbackDummy, 0xd8 - 32 * r7, 0x88, 0, 0); } } } @@ -443,19 +443,19 @@ void sub_801C4C0(void) void sub_801C61C(void) { u8 r6 = 0; - if (gUnknown_02022C74->unk_017C != 0xFF) - sub_80D2EF8(&gSprites[gUnknown_02022C74->unk_017C]); - if (gUnknown_02022C74->unk_0000.unk_09 != 0 && gUnknown_02022C74->unk_0000.unk_08_0 == 1) + if (sWonderCardData->unk_017C != 0xFF) + sub_80D2EF8(&gSprites[sWonderCardData->unk_017C]); + if (sWonderCardData->unk_0000.unk_09 != 0 && sWonderCardData->unk_0000.unk_08_0 == 1) { - for (; r6 < gUnknown_02022C74->unk_0000.unk_09; r6++) + for (; r6 < sWonderCardData->unk_0000.unk_09; r6++) { - if (gUnknown_02022C74->unk_017D[r6][0] != 0xFF) + if (sWonderCardData->unk_017D[r6][0] != 0xFF) { - DestroySprite(&gSprites[gUnknown_02022C74->unk_017D[r6][0]]); + DestroySprite(&gSprites[sWonderCardData->unk_017D[r6][0]]); } - if (gUnknown_02022C74->unk_017D[r6][1] != 0xFF) + if (sWonderCardData->unk_017D[r6][1] != 0xFF) { - sub_80D2EF8(&gSprites[gUnknown_02022C74->unk_017D[r6][1]]); + sub_80D2EF8(&gSprites[sWonderCardData->unk_017D[r6][1]]); } } FreeSpriteTilesByTag(0x8000); @@ -484,7 +484,7 @@ struct UnkStruct_203F3CC /*03a4*/ u8 buffer_03A4[0x1000]; }; -EWRAM_DATA struct UnkStruct_203F3CC * gUnknown_02022C78 = NULL; +EWRAM_DATA struct UnkStruct_203F3CC * sWonderNewsData = NULL; void sub_801CDCC(void); void sub_801CE7C(void); @@ -542,37 +542,37 @@ const struct UnkStruct_8467FB8 gUnknown_082F24C8[] = { {1, 0, 0, 0, gWonderNewsGfx8, gWonderNewsTilemap8, gWonderNewsPal8} }; -bool32 sub_801C6C8(const struct MEventBuffer_3120_Sub * a0) +bool32 InitWonderNewsResources(const struct MEventBuffer_3120_Sub * a0) { if (a0 == NULL) return FALSE; - gUnknown_02022C78 = AllocZeroed(sizeof(struct UnkStruct_203F3CC)); - if (gUnknown_02022C78 == NULL) + sWonderNewsData = AllocZeroed(sizeof(struct UnkStruct_203F3CC)); + if (sWonderNewsData == NULL) return FALSE; - gUnknown_02022C78->unk_0000 = *a0; - if (gUnknown_02022C78->unk_0000.unk_03 >= ARRAY_COUNT(gUnknown_082F24C8)) - gUnknown_02022C78->unk_0000.unk_03 = 0; - gUnknown_02022C78->unk_01BC = &gUnknown_082F24C8[gUnknown_02022C78->unk_0000.unk_03]; - gUnknown_02022C78->unk_01C1 = 0xFF; + sWonderNewsData->unk_0000 = *a0; + if (sWonderNewsData->unk_0000.unk_03 >= ARRAY_COUNT(gUnknown_082F24C8)) + sWonderNewsData->unk_0000.unk_03 = 0; + sWonderNewsData->unk_01BC = &gUnknown_082F24C8[sWonderNewsData->unk_0000.unk_03]; + sWonderNewsData->unk_01C1 = 0xFF; return TRUE; } -void sub_801C72C(void) +void DestroyWonderNewsResources(void) { - if (gUnknown_02022C78 != NULL) + if (sWonderNewsData != NULL) { - *gUnknown_02022C78 = (struct UnkStruct_203F3CC){}; - Free(gUnknown_02022C78); - gUnknown_02022C78 = NULL; + *sWonderNewsData = (struct UnkStruct_203F3CC){}; + Free(sWonderNewsData); + sWonderNewsData = NULL; } } -s32 sub_801C758(void) +s32 FadeToWonderNewsMenu(void) { - if (gUnknown_02022C78 == NULL) + if (sWonderNewsData == NULL) return -1; - switch (gUnknown_02022C78->unk_01C0_1) + switch (sWonderNewsData->unk_01C0_1) { case 0: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); @@ -599,19 +599,19 @@ s32 sub_801C758(void) CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(2); CopyBgTilemapBufferToVram(3); - decompress_and_copy_tile_data_to_vram(3, gUnknown_02022C78->unk_01BC->tiles, 0, 8, 0); - gUnknown_02022C78->unk_01C8[0] = AddWindow(&gUnknown_082F1DE8[0]); - gUnknown_02022C78->unk_01C8[1] = AddWindow(&gUnknown_082F1DE8[1]); + decompress_and_copy_tile_data_to_vram(3, sWonderNewsData->unk_01BC->tiles, 0, 8, 0); + sWonderNewsData->unk_01C8[0] = AddWindow(&gUnknown_082F1DE8[0]); + sWonderNewsData->unk_01C8[1] = AddWindow(&gUnknown_082F1DE8[1]); break; case 3: if (free_temp_tile_data_buffers_if_possible()) return 0; LoadPalette(stdpal_get(1), 0x20, 0x20); gPaletteFade.bufferTransferDisabled = TRUE; - LoadPalette(gUnknown_02022C78->unk_01BC->pal, 0x10, 0x20); - LZ77UnCompWram(gUnknown_02022C78->unk_01BC->map, gUnknown_02022C78->buffer_03A4); - CopyRectToBgTilemapBufferRect(1, gUnknown_02022C78->buffer_03A4, 0, 0, 30, 3, 0, 0, 30, 3, 1, 8, 0); - CopyRectToBgTilemapBufferRect(3, gUnknown_02022C78->buffer_03A4, 0, 3, 30, 23, 0, 3, 30, 23, 1, 8, 0); + LoadPalette(sWonderNewsData->unk_01BC->pal, 0x10, 0x20); + LZ77UnCompWram(sWonderNewsData->unk_01BC->map, sWonderNewsData->buffer_03A4); + CopyRectToBgTilemapBufferRect(1, sWonderNewsData->buffer_03A4, 0, 0, 30, 3, 0, 0, 30, 3, 1, 8, 0); + CopyRectToBgTilemapBufferRect(3, sWonderNewsData->buffer_03A4, 0, 3, 30, 23, 0, 3, 30, 23, 1, 8, 0); CopyBgTilemapBufferToVram(1); CopyBgTilemapBufferToVram(3); break; @@ -628,26 +628,26 @@ s32 sub_801C758(void) ShowBg(2); ShowBg(3); gPaletteFade.bufferTransferDisabled = FALSE; - gUnknown_02022C78->unk_01C1 = AddScrollIndicatorArrowPair(&gUnknown_02022C78->unk_0394, &gUnknown_02022C78->unk_01C6); + sWonderNewsData->unk_01C1 = AddScrollIndicatorArrowPair(&sWonderNewsData->unk_0394, &sWonderNewsData->unk_01C6); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); UpdatePaletteFade(); break; default: if (UpdatePaletteFade()) return 0; - gUnknown_02022C78->unk_01C0_1 = 0; + sWonderNewsData->unk_01C0_1 = 0; return 1; } - ++gUnknown_02022C78->unk_01C0_1; + ++sWonderNewsData->unk_01C0_1; return 0; } -s32 sub_801CA50(bool32 flag) +s32 FadeOutFromWonderNews(bool32 flag) { - if (gUnknown_02022C78 == NULL) + if (sWonderNewsData == NULL) return -1; - switch (gUnknown_02022C78->unk_01C0_1) + switch (sWonderNewsData->unk_01C0_1) { case 0: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); @@ -675,21 +675,21 @@ s32 sub_801CA50(bool32 flag) case 3: HideBg(1); HideBg(2); - RemoveWindow(gUnknown_02022C78->unk_01C8[1]); - RemoveWindow(gUnknown_02022C78->unk_01C8[0]); + RemoveWindow(sWonderNewsData->unk_01C8[1]); + RemoveWindow(sWonderNewsData->unk_01C8[0]); break; case 4: ChangeBgY(2, 0, 0); ChangeBgY(3, 0, 0); - if (gUnknown_02022C78->unk_01C1 != 0xFF) + if (sWonderNewsData->unk_01C1 != 0xFF) { - RemoveScrollIndicatorArrowPair(gUnknown_02022C78->unk_01C1); - gUnknown_02022C78->unk_01C1 = 0xFF; + RemoveScrollIndicatorArrowPair(sWonderNewsData->unk_01C1); + sWonderNewsData->unk_01C1 = 0xFF; } break; case 5: - sub_80186EC(gUnknown_02022C60, flag); - sub_8018798(3); + PrintMysteryGiftOrEReaderTopMenu(gGiftIsFromEReader, flag); + MG_DrawCheckerboardPattern(3); CopyBgTilemapBufferToVram(0); CopyBgTilemapBufferToVram(3); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); @@ -697,36 +697,36 @@ s32 sub_801CA50(bool32 flag) default: if (UpdatePaletteFade()) return 0; - gUnknown_02022C78->unk_01C0_1 = 0; + sWonderNewsData->unk_01C0_1 = 0; return 1; } - ++gUnknown_02022C78->unk_01C0_1; + ++sWonderNewsData->unk_01C0_1; return 0; } -void sub_801CC38(void) +void MENews_RemoveScrollIndicatorArrowPair(void) { - if (!gUnknown_02022C78->unk_01C0_0 && gUnknown_02022C78->unk_01C1 != 0xFF) + if (!sWonderNewsData->unk_01C0_0 && sWonderNewsData->unk_01C1 != 0xFF) { - RemoveScrollIndicatorArrowPair(gUnknown_02022C78->unk_01C1); - gUnknown_02022C78->unk_01C1 = 0xFF; - gUnknown_02022C78->unk_01C0_0 = TRUE; + RemoveScrollIndicatorArrowPair(sWonderNewsData->unk_01C1); + sWonderNewsData->unk_01C1 = 0xFF; + sWonderNewsData->unk_01C0_0 = TRUE; } } -void sub_801CC80(void) +void MENews_AddScrollIndicatorArrowPair(void) { - if (gUnknown_02022C78->unk_01C0_0) + if (sWonderNewsData->unk_01C0_0) { - gUnknown_02022C78->unk_01C1 = AddScrollIndicatorArrowPair(&gUnknown_02022C78->unk_0394, &gUnknown_02022C78->unk_01C6); - gUnknown_02022C78->unk_01C0_0 = FALSE; + sWonderNewsData->unk_01C1 = AddScrollIndicatorArrowPair(&sWonderNewsData->unk_0394, &sWonderNewsData->unk_01C6); + sWonderNewsData->unk_01C0_0 = FALSE; } } -u32 sub_801CCD0(u16 input) +u32 MENews_GetInput(u16 input) { - if (gUnknown_02022C78->unk_01C2_0) + if (sWonderNewsData->unk_01C2_0) { sub_801CFA4(); return 0xFF; @@ -738,26 +738,26 @@ u32 sub_801CCD0(u16 input) case B_BUTTON: return 1; case DPAD_UP: - if (gUnknown_02022C78->unk_01C6 == 0) + if (sWonderNewsData->unk_01C6 == 0) return 0xFF; - if (gUnknown_02022C78->unk_01C0_0) + if (sWonderNewsData->unk_01C0_0) return 0xFF; - gUnknown_02022C78->unk_01C3_0 = FALSE; + sWonderNewsData->unk_01C3_0 = FALSE; break; case DPAD_DOWN: - if (gUnknown_02022C78->unk_01C6 == gUnknown_02022C78->unk_01C4) + if (sWonderNewsData->unk_01C6 == sWonderNewsData->unk_01C4) return 0xFF; - if (gUnknown_02022C78->unk_01C0_0) + if (sWonderNewsData->unk_01C0_0) return 0xFF; - gUnknown_02022C78->unk_01C3_0 = TRUE; + sWonderNewsData->unk_01C3_0 = TRUE; break; default: return 0xFF; } - gUnknown_02022C78->unk_01C2_0 = TRUE; - gUnknown_02022C78->unk_01C2_1 = 2; - gUnknown_02022C78->unk_01C3_1 = 0; - if (gUnknown_02022C78->unk_01C3_0 == FALSE) + sWonderNewsData->unk_01C2_0 = TRUE; + sWonderNewsData->unk_01C2_1 = 2; + sWonderNewsData->unk_01C3_1 = 0; + if (sWonderNewsData->unk_01C3_0 == FALSE) return 2; else return 3; @@ -766,44 +766,44 @@ u32 sub_801CCD0(u16 input) void sub_801CDCC(void) { u8 i = 0; - memcpy(gUnknown_02022C78->unk_01CE, gUnknown_02022C78->unk_0000.unk_04, 40); - gUnknown_02022C78->unk_01CE[40] = EOS; + memcpy(sWonderNewsData->unk_01CE, sWonderNewsData->unk_0000.unk_04, 40); + sWonderNewsData->unk_01CE[40] = EOS; for (; i < 10; ++i) { - memcpy(gUnknown_02022C78->unk_01F7[i], gUnknown_02022C78->unk_0000.unk_2C[i], 40); - gUnknown_02022C78->unk_01F7[i][40] = EOS; - if (i > 7 && gUnknown_02022C78->unk_01F7[i][0] != EOS) - ++gUnknown_02022C78->unk_01C4; + memcpy(sWonderNewsData->unk_01F7[i], sWonderNewsData->unk_0000.unk_2C[i], 40); + sWonderNewsData->unk_01F7[i][40] = EOS; + if (i > 7 && sWonderNewsData->unk_01F7[i][0] != EOS) + ++sWonderNewsData->unk_01C4; } - gUnknown_02022C78->unk_0394 = gUnknown_082F1DF8; - gUnknown_02022C78->unk_0394.fullyDownThreshold = gUnknown_02022C78->unk_01C4; + sWonderNewsData->unk_0394 = gUnknown_082F1DF8; + sWonderNewsData->unk_0394.fullyDownThreshold = sWonderNewsData->unk_01C4; } void sub_801CE7C(void) { u8 i = 0; s32 x; - PutWindowTilemap(gUnknown_02022C78->unk_01C8[0]); - PutWindowTilemap(gUnknown_02022C78->unk_01C8[1]); - FillWindowPixelBuffer(gUnknown_02022C78->unk_01C8[0], 0); - FillWindowPixelBuffer(gUnknown_02022C78->unk_01C8[1], 0); - x = (0xe0 - GetStringWidth(3, gUnknown_02022C78->unk_01CE, GetFontAttribute(3, 2))) / 2; + PutWindowTilemap(sWonderNewsData->unk_01C8[0]); + PutWindowTilemap(sWonderNewsData->unk_01C8[1]); + FillWindowPixelBuffer(sWonderNewsData->unk_01C8[0], 0); + FillWindowPixelBuffer(sWonderNewsData->unk_01C8[1], 0); + x = (0xe0 - GetStringWidth(3, sWonderNewsData->unk_01CE, GetFontAttribute(3, 2))) / 2; if (x < 0) x = 0; - AddTextPrinterParameterized3(gUnknown_02022C78->unk_01C8[0], 3, x, 6, gUnknown_082F1DE0[gUnknown_02022C78->unk_01BC->textPal1], 0, gUnknown_02022C78->unk_01CE); + AddTextPrinterParameterized3(sWonderNewsData->unk_01C8[0], 3, x, 6, gUnknown_082F1DE0[sWonderNewsData->unk_01BC->textPal1], 0, sWonderNewsData->unk_01CE); for (; i < 10; ++i) { - AddTextPrinterParameterized3(gUnknown_02022C78->unk_01C8[1], 3, 0, 16 * i + 2, gUnknown_082F1DE0[gUnknown_02022C78->unk_01BC->textPal2], 0, gUnknown_02022C78->unk_01F7[i]); + AddTextPrinterParameterized3(sWonderNewsData->unk_01C8[1], 3, 0, 16 * i + 2, gUnknown_082F1DE0[sWonderNewsData->unk_01BC->textPal2], 0, sWonderNewsData->unk_01F7[i]); } - CopyWindowToVram(gUnknown_02022C78->unk_01C8[0], 3); - CopyWindowToVram(gUnknown_02022C78->unk_01C8[1], 3); + CopyWindowToVram(sWonderNewsData->unk_01C8[0], 3); + CopyWindowToVram(sWonderNewsData->unk_01C8[1], 3); } void sub_801CFA4(void) { - u16 r4 = gUnknown_02022C78->unk_01C2_1; + u16 r4 = sWonderNewsData->unk_01C2_1; r4 <<= 8; - if (gUnknown_02022C78->unk_01C3_0) + if (sWonderNewsData->unk_01C3_0) { ChangeBgY(2, r4, 1); ChangeBgY(3, r4, 1); @@ -813,14 +813,14 @@ void sub_801CFA4(void) ChangeBgY(2, r4, 2); ChangeBgY(3, r4, 2); } - gUnknown_02022C78->unk_01C3_1 += gUnknown_02022C78->unk_01C2_1; - if (gUnknown_02022C78->unk_01C3_1 > 15) + sWonderNewsData->unk_01C3_1 += sWonderNewsData->unk_01C2_1; + if (sWonderNewsData->unk_01C3_1 > 15) { - if (gUnknown_02022C78->unk_01C3_0) - ++gUnknown_02022C78->unk_01C6; + if (sWonderNewsData->unk_01C3_0) + ++sWonderNewsData->unk_01C6; else - --gUnknown_02022C78->unk_01C6; - gUnknown_02022C78->unk_01C2_0 = FALSE; - gUnknown_02022C78->unk_01C3_1 = 0; + --sWonderNewsData->unk_01C6; + sWonderNewsData->unk_01C2_0 = FALSE; + sWonderNewsData->unk_01C3_1 = 0; } } diff --git a/src/mevent_news.c b/src/mevent_news.c index f5a061c84..192bb0fc7 100644 --- a/src/mevent_news.c +++ b/src/mevent_news.c @@ -10,7 +10,7 @@ static u32 sub_801DD44(struct MysteryEventStruct *); static void sub_801DCD8(struct MysteryEventStruct *); static void sub_801DCCC(struct MysteryEventStruct *); -void sub_801DB68(u32 a0) +void GenerateRandomNews(u32 a0) { struct MysteryEventStruct *r5 = sub_801B044(); @@ -59,7 +59,7 @@ u16 sub_801DC20(void) struct MysteryEventStruct *r4 = sub_801B044(); u16 r5; - if (!IsMysteryEventEnabled() || !sub_801B0CC()) + if (!IsMysteryEventEnabled() || !ValidateReceivedWonderNews()) return 0; r5 = sub_801DD44(r4); diff --git a/src/mystery_event_menu.c b/src/mystery_event_menu.c index ad4a2e692..850b22d5b 100644 --- a/src/mystery_event_menu.c +++ b/src/mystery_event_menu.c @@ -94,7 +94,7 @@ void CB2_InitMysteryEventMenu(void) FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 0x1E, 0x14); LoadUserWindowBorderGfx(0, 1u, 0xD0u); - sub_81978B0(0xE0); + Menu_LoadStdPalAt(0xE0); SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON); SetGpuReg(REG_OFFSET_BLDCNT, 0); CreateTask(Task_DestroySelf, 0); diff --git a/src/mystery_gift.c b/src/mystery_gift.c index 5e000a249..c8b3a9060 100644 --- a/src/mystery_gift.c +++ b/src/mystery_gift.c @@ -35,28 +35,29 @@ void bgid_upload_textbox_1(u8 bgId); void task_add_00_mystery_gift(void); void task00_mystery_gift(u8 taskId); -EWRAM_DATA u8 gUnknown_02022C58[2] = {}; +EWRAM_DATA u8 sDownArrowCounterAndYCoordIdx[8] = {}; +EWRAM_DATA bool8 gGiftIsFromEReader = FALSE; -const u16 gUnkTextboxBorderPal[] = INCBIN_U16("graphics/interface/unk_textbox_border.gbapal"); -const u32 gUnkTextboxBorderGfx[] = INCBIN_U32("graphics/interface/unk_textbox_border.4bpp.lz"); +static const u16 gUnkTextboxBorderPal[] = INCBIN_U16("graphics/interface/unk_textbox_border.gbapal"); +static const u32 gUnkTextboxBorderGfx[] = INCBIN_U32("graphics/interface/unk_textbox_border.4bpp.lz"); struct MysteryGiftTaskData { - u16 unk0; + u16 curPromptWindowId; u16 unk2; u16 unk4; u16 unk6; - u8 unk8; - u8 unk9; + u8 state; + u8 textState; u8 unkA; u8 unkB; - u8 unkC; - u8 unkD; - u8 unkE; - u8 * unk10; + u8 IsCardOrNews; + u8 source; + u8 prevPromptWindowId; + u8 * buffer; }; -const struct BgTemplate gUnknown_082F0598[] = { +static const struct BgTemplate sBGTemplates[] = { { .bg = 0, .charBaseIndex = 2, @@ -92,7 +93,7 @@ const struct BgTemplate gUnknown_082F0598[] = { } }; -const struct WindowTemplate gUnknown_082F05A8[] = { +static const struct WindowTemplate sMainWindows[] = { { .bg = 0x00, .tilemapLeft = 0x00, @@ -122,7 +123,7 @@ const struct WindowTemplate gUnknown_082F05A8[] = { } }; -const struct WindowTemplate gUnknown_082F05C8 = { +static const struct WindowTemplate sWindowTemplate_PromptYesOrNo_Width28 = { .bg = 0x00, .tilemapLeft = 0x01, .tilemapTop = 0x0f, @@ -132,7 +133,7 @@ const struct WindowTemplate gUnknown_082F05C8 = { .baseBlock = 0x00e5 }; -const struct WindowTemplate gUnknown_082F05D0 = { +static const struct WindowTemplate sWindowTemplate_PromptYesOrNo_Width20 = { .bg = 0x00, .tilemapLeft = 0x01, .tilemapTop = 0x0f, @@ -142,7 +143,7 @@ const struct WindowTemplate gUnknown_082F05D0 = { .baseBlock = 0x00e5 }; -const struct WindowTemplate gUnknown_082F05D8 = { +static const struct WindowTemplate sMysteryGiftMenuWindowTemplate = { .bg = 0x00, .tilemapLeft = 0x01, .tilemapTop = 0x0f, @@ -152,7 +153,7 @@ const struct WindowTemplate gUnknown_082F05D8 = { .baseBlock = 0x00e5 }; -const struct WindowTemplate gUnknown_082F05E0 = { +static const struct WindowTemplate sWindowTemplate_ThreeOptions = { .bg = 0x00, .tilemapLeft = 0x08, .tilemapTop = 0x06, @@ -162,7 +163,7 @@ const struct WindowTemplate gUnknown_082F05E0 = { .baseBlock = 0x0155 }; -const struct WindowTemplate gUnknown_082F05E8 = { +static const struct WindowTemplate sWindowTemplate_YesNoBox = { .bg = 0x00, .tilemapLeft = 0x17, .tilemapTop = 0x0f, @@ -172,7 +173,7 @@ const struct WindowTemplate gUnknown_082F05E8 = { .baseBlock = 0x0155 }; -const struct WindowTemplate gUnknown_082F05F0 = { +static const struct WindowTemplate sWindowTemplate_7by8 = { .bg = 0x00, .tilemapLeft = 0x16, .tilemapTop = 0x0b, @@ -182,7 +183,7 @@ const struct WindowTemplate gUnknown_082F05F0 = { .baseBlock = 0x0155 }; -const struct WindowTemplate gUnknown_082F05F8 = { +static const struct WindowTemplate sWindowTemplate_7by6 = { .bg = 0x00, .tilemapLeft = 0x16, .tilemapTop = 0x0d, @@ -192,7 +193,7 @@ const struct WindowTemplate gUnknown_082F05F8 = { .baseBlock = 0x0155 }; -const struct WindowTemplate gUnknown_082F0600 = { +static const struct WindowTemplate sWindowTemplate_7by4 = { .bg = 0x00, .tilemapLeft = 0x16, .tilemapTop = 0x0f, @@ -202,19 +203,19 @@ const struct WindowTemplate gUnknown_082F0600 = { .baseBlock = 0x0155 }; -const struct ListMenuItem gUnknown_082F0608[] = { +static const struct ListMenuItem sListMenuItems_CardsOrNews[] = { { gText_WonderCards, 0 }, { gText_WonderNews, 1 }, { gText_Exit3, -2 } }; -const struct ListMenuItem gUnknown_082F0620[] = { +static const struct ListMenuItem sListMenuItems_WirelessOrFriend[] = { { gText_WirelessCommunication, 0 }, { gText_Friend2, 1 }, { gText_Cancel2, -2 } }; -const struct ListMenuTemplate gUnknown_082F0638 = { +static const struct ListMenuTemplate sListMenuTemplate_ThreeOptions = { .items = NULL, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .itemPrintFunc = NULL, @@ -235,32 +236,32 @@ const struct ListMenuTemplate gUnknown_082F0638 = { .cursorKind = 0 }; -const struct ListMenuItem gUnknown_082F0650[] = { +static const struct ListMenuItem sListMenuItems_ReceiveSendToss[] = { { gText_Receive, 0 }, { gText_Send, 1 }, { gText_Toss, 2 }, { gText_Cancel2, -2 } }; -const struct ListMenuItem gUnknown_082F0670[] = { +static const struct ListMenuItem sListMenuItems_ReceiveToss[] = { { gText_Receive, 0 }, { gText_Toss, 2 }, { gText_Cancel2, -2 } }; -const struct ListMenuItem gUnknown_082F0688[] = { +static const struct ListMenuItem sListMenuItems_ReceiveSend[] = { { gText_Receive, 0 }, { gText_Send, 1 }, { gText_Cancel2, -2 } }; -const struct ListMenuItem gUnknown_082F06A0[] = { +static const struct ListMenuItem sListMenuItems_Receive[] = { { gText_Receive, 0 }, { gText_Cancel2, -2 } }; -const struct ListMenuTemplate gUnknown_082F06B0 = { - .items = gUnknown_082F0650, +static const struct ListMenuTemplate sListMenu_ReceiveSendToss = { + .items = sListMenuItems_ReceiveSendToss, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .itemPrintFunc = NULL, .totalItems = 4, @@ -280,8 +281,8 @@ const struct ListMenuTemplate gUnknown_082F06B0 = { .cursorKind = 0 }; -const struct ListMenuTemplate gUnknown_082F06C8 = { - .items = gUnknown_082F0670, +static const struct ListMenuTemplate sListMenu_ReceiveToss = { + .items = sListMenuItems_ReceiveToss, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .itemPrintFunc = NULL, .totalItems = 3, @@ -301,8 +302,8 @@ const struct ListMenuTemplate gUnknown_082F06C8 = { .cursorKind = 0 }; -const struct ListMenuTemplate gUnknown_082F06E0 = { - .items = gUnknown_082F0688, +static const struct ListMenuTemplate sListMenu_ReceiveSend = { + .items = sListMenuItems_ReceiveSend, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .itemPrintFunc = NULL, .totalItems = 3, @@ -322,8 +323,8 @@ const struct ListMenuTemplate gUnknown_082F06E0 = { .cursorKind = 0 }; -const struct ListMenuTemplate gUnknown_082F06F8 = { - .items = gUnknown_082F06A0, +static const struct ListMenuTemplate sListMenu_Receive = { + .items = sListMenuItems_Receive, .moveCursorFunc = ListMenuDefaultCursorMoveFunc, .itemPrintFunc = NULL, .totalItems = 2, @@ -343,25 +344,25 @@ const struct ListMenuTemplate gUnknown_082F06F8 = { .cursorKind = 0 }; -const u8 *const Unref_082F0710[] = { +static const u8 *const Unref_082F0710[] = { gText_VarietyOfEventsImportedWireless, gText_WonderCardsInPossession, gText_ReadNewsThatArrived, gText_ReturnToTitle }; -ALIGNED(2) const u8 gUnknown_082F0720[] = { 0, 1, 2 }; -ALIGNED(2) const u8 gUnknown_082F0724[] = { 0, 1, 2 }; -ALIGNED(2) const u8 gUnknown_082F0728[] = { 1, 2, 3 }; +ALIGNED(2) const u8 sMG_Ereader_TextColor_1[] = { 0, 1, 2 }; +ALIGNED(2) const u8 sMG_Ereader_TextColor_1_Copy[] = { 0, 1, 2 }; +ALIGNED(2) const u8 sMG_Ereader_TextColor_2[] = { 1, 2, 3 }; -void sub_8018424(void) +void vblankcb_mystery_gift_e_reader_run(void) { ProcessSpriteCopyRequests(); LoadOam(); TransferPlttBuffer(); } -void sub_8018438(void) +void c2_mystery_gift_e_reader_run(void) { RunTasks(); RunTextPrinters(); @@ -369,7 +370,7 @@ void sub_8018438(void) BuildOamBuffer(); } -bool32 sub_8018450(s32 arg) +bool32 HandleMysteryGiftOrEReaderSetup(s32 mg_or_ereader) { switch (gMain.state) { @@ -382,7 +383,7 @@ bool32 sub_8018450(s32 arg) ScanlineEffect_Stop(); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, gUnknown_082F0598, ARRAY_COUNT(gUnknown_082F0598)); + InitBgsFromTemplates(0, sBGTemplates, ARRAY_COUNT(sBGTemplates)); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); ChangeBgX(1, 0, 0); @@ -398,7 +399,7 @@ bool32 sub_8018450(s32 arg) SetBgTilemapBuffer(0, Alloc(0x800)); bgid_upload_textbox_1(3); - InitWindows(gUnknown_082F05A8); + InitWindows(sMainWindows); DeactivateAllTextPrinters(); ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_WIN1_ON); SetGpuReg(REG_OFFSET_BLDCNT, 0); @@ -409,14 +410,14 @@ bool32 sub_8018450(s32 arg) case 1: LoadPalette(gUnkTextboxBorderPal, 0, 0x20); LoadPalette(stdpal_get(2), 0xd0, 0x20); - sub_81978B0(0xC0); + Menu_LoadStdPalAt(0xC0); LoadUserWindowBorderGfx(0, 0xA, 0xE0); LoadUserWindowBorderGfx_(0, 0x1, 0xF0); FillBgTilemapBufferRect(0, 0x000, 0, 0, 32, 32, 0x11); FillBgTilemapBufferRect(1, 0x000, 0, 0, 32, 32, 0x11); FillBgTilemapBufferRect(2, 0x000, 0, 0, 32, 32, 0x11); - sub_8018798(3); - sub_80186EC(arg, 0); + MG_DrawCheckerboardPattern(3); + PrintMysteryGiftOrEReaderTopMenu(mg_or_ereader, 0); gMain.state++; break; case 2: @@ -430,7 +431,7 @@ bool32 sub_8018450(s32 arg) ShowBg(0); ShowBg(3); PlayBGM(MUS_RG_OKURIMONO); - SetVBlankCallback(sub_8018424); + SetVBlankCallback(vblankcb_mystery_gift_e_reader_run); EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_VCOUNT | INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL); return TRUE; } @@ -440,28 +441,28 @@ bool32 sub_8018450(s32 arg) void c2_mystery_gift(void) { - if (sub_8018450(0)) + if (HandleMysteryGiftOrEReaderSetup(0)) { - SetMainCallback2(sub_8018438); - gUnknown_02022C60 = FALSE; + SetMainCallback2(c2_mystery_gift_e_reader_run); + gGiftIsFromEReader = FALSE; task_add_00_mystery_gift(); } RunTasks(); } -void sub_801867C(void) +void c2_ereader(void) { - if (sub_8018450(1)) + if (HandleMysteryGiftOrEReaderSetup(1)) { - SetMainCallback2(sub_8018438); - gUnknown_02022C60 = TRUE; - sub_81D5014(); + SetMainCallback2(c2_mystery_gift_e_reader_run); + gGiftIsFromEReader = TRUE; + task_add_00_ereader(); } } -void sub_80186A4(void) +void MainCB_FreeAllBuffersAndReturnToInitTitleScreen(void) { - gUnknown_02022C60 = FALSE; + gGiftIsFromEReader = FALSE; FreeAllWindowBuffers(); Free(GetBgTilemapBuffer(0)); Free(GetBgTilemapBuffer(1)); @@ -470,12 +471,12 @@ void sub_80186A4(void) SetMainCallback2(CB2_InitTitleScreen); } -void sub_80186EC(bool8 isJapanese, bool32 usePickOkCancel) +void PrintMysteryGiftOrEReaderTopMenu(bool8 mg_or_ereader, bool32 usePickOkCancel) { const u8 * header; const u8 * options; FillWindowPixelBuffer(0, 0); - if (!isJapanese) + if (mg_or_ereader == 0) { header = gText_MysteryGift; options = !usePickOkCancel ? gText_PickOKExit : gText_PickOKCancel; @@ -486,18 +487,18 @@ void sub_80186EC(bool8 isJapanese, bool32 usePickOkCancel) options = gJPText_DecideStop; } - AddTextPrinterParameterized4(0, 1, 4, 1, 0, 0, gUnknown_082F0720, -1, header); - AddTextPrinterParameterized4(0, 0, GetStringRightAlignXOffset(0, options, 0xDE), 1, 0, 0, gUnknown_082F0720, -1, options); + AddTextPrinterParameterized4(0, 1, 4, 1, 0, 0, sMG_Ereader_TextColor_1, -1, header); + AddTextPrinterParameterized4(0, 0, GetStringRightAlignXOffset(0, options, 0xDE), 1, 0, 0, sMG_Ereader_TextColor_1, -1, options); CopyWindowToVram(0, 2); PutWindowTilemap(0); } -void sub_8018784(u8 windowId) +void MG_DrawTextBorder(u8 windowId) { - sub_8098858(windowId, 0x01, 0xF); + DrawTextBorderOuter(windowId, 0x01, 0xF); } -void sub_8018798(u32 bg) +void MG_DrawCheckerboardPattern(u32 bg) { s32 i = 0, j; @@ -519,9 +520,9 @@ void sub_8018798(u32 bg) } } -void sub_8018838(bool32 arg) +void ClearScreenInBg0(bool32 ignoreTopTwoRows) { - switch (arg) + switch (ignoreTopTwoRows) { case 0: FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0x11); @@ -533,32 +534,32 @@ void sub_8018838(bool32 arg) CopyBgTilemapBufferToVram(0); } -void sub_8018884(const u8 *str) +void AddTextPrinterToWindow1(const u8 *str) { StringExpandPlaceholders(gStringVar4, str); FillWindowPixelBuffer(1, 0x11); - AddTextPrinterParameterized4(1, 1, 0, 1, 0, 0, gUnknown_082F0728, 0, gStringVar4); - sub_8098858(1, 0x001, 0xF); + AddTextPrinterParameterized4(1, 1, 0, 1, 0, 0, sMG_Ereader_TextColor_2, 0, gStringVar4); + DrawTextBorderOuter(1, 0x001, 0xF); PutWindowTilemap(1); CopyWindowToVram(1, 3); } -void sub_80188DC(void) +static void ClearTextWindow(void) { rbox_fill_rectangle(1); ClearWindowTilemap(1); CopyWindowToVram(1, 1); } -bool32 mevent_0814257C(u8 *textState, const u8 *str) +bool32 MG_PrintTextOnWindow1AndWaitButton(u8 *textState, const u8 *str) { switch (*textState) { case 0: - sub_8018884(str); + AddTextPrinterToWindow1(str); goto inc; case 1: - DrawDownArrow(1, 0xD0, 0x14, 1, FALSE, &gUnknown_02022C58[0], &gUnknown_02022C58[1]); + DrawDownArrow(1, 0xD0, 0x14, 1, FALSE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); if (({gMain.newKeys & (A_BUTTON | B_BUTTON);})) { inc: @@ -566,9 +567,9 @@ bool32 mevent_0814257C(u8 *textState, const u8 *str) } break; case 2: - DrawDownArrow(1, 0xD0, 0x14, 1, TRUE, &gUnknown_02022C58[0], &gUnknown_02022C58[1]); + DrawDownArrow(1, 0xD0, 0x14, 1, TRUE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); *textState = 0; - sub_80188DC(); + ClearTextWindow(); return TRUE; case 0xFF: *textState = 2; @@ -577,45 +578,45 @@ bool32 mevent_0814257C(u8 *textState, const u8 *str) return FALSE; } -void sub_801898C(void) +static void HideDownArrow(void) { - DrawDownArrow(1, 0xD0, 0x14, 1, FALSE, &gUnknown_02022C58[0], &gUnknown_02022C58[1]); + DrawDownArrow(1, 0xD0, 0x14, 1, FALSE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); } -void sub_80189B4(void) +static void ShowDownArrow(void) { - DrawDownArrow(1, 0xD0, 0x14, 1, TRUE, &gUnknown_02022C58[0], &gUnknown_02022C58[1]); + DrawDownArrow(1, 0xD0, 0x14, 1, TRUE, &sDownArrowCounterAndYCoordIdx[0], &sDownArrowCounterAndYCoordIdx[1]); } -bool32 sub_80189DC(u8 * textState) +bool32 unref_HideDownArrowAndWaitButton(u8 * textState) { switch (*textState) { case 0: - sub_801898C(); + HideDownArrow(); if (({gMain.newKeys & (A_BUTTON | B_BUTTON);})) { (*textState)++; } break; case 1: - sub_80189B4(); + ShowDownArrow(); *textState = 0; return TRUE; } return FALSE; } -bool32 sub_8018A1C(u8 * counter, const u8 * str) +static bool32 PrintStringAndWait2Seconds(u8 * counter, const u8 * str) { if (*counter == 0) { - sub_8018884(str); + AddTextPrinterToWindow1(str); } if (++(*counter) > 120) { *counter = 0; - sub_80188DC(); + ClearTextWindow(); return TRUE; } else @@ -624,45 +625,45 @@ bool32 sub_8018A1C(u8 * counter, const u8 * str) } } -u32 sub_8018A50(u8 * unused0, u16 * unused1, bool8 r2) +static u32 MysteryGift_HandleThreeOptionMenu(u8 * unused0, u16 * unused1, u8 whichMenu) { - struct ListMenuTemplate listMenuTemplate = gUnknown_082F0638; - struct WindowTemplate windowTemplate = gUnknown_082F05E0; - s32 r3; - s32 r4; + struct ListMenuTemplate listMenuTemplate = sListMenuTemplate_ThreeOptions; + struct WindowTemplate windowTemplate = sWindowTemplate_ThreeOptions; + s32 width; + s32 response; - if (r2 == FALSE) + if (whichMenu == 0) { - listMenuTemplate.items = gUnknown_082F0608; + listMenuTemplate.items = sListMenuItems_CardsOrNews; } else { - listMenuTemplate.items = gUnknown_082F0620; + listMenuTemplate.items = sListMenuItems_WirelessOrFriend; } - r3 = sub_81DB41C(&listMenuTemplate); - if (r3 & 1) + width = Intl_GetListMenuWidth(&listMenuTemplate); + if (width & 1) { - r3++; + width++; } - windowTemplate.width = r3; - if (r3 < 30) + windowTemplate.width = width; + if (width < 30) { - windowTemplate.tilemapLeft = (30 - r3) / 2; + windowTemplate.tilemapLeft = (30 - width) / 2; } else { windowTemplate.tilemapLeft = 0; } - r4 = DoMysteryGiftListMenu(&windowTemplate, &listMenuTemplate, 1, 0x00A, 0xE0); - if (r4 != -1) + response = DoMysteryGiftListMenu(&windowTemplate, &listMenuTemplate, 1, 0x00A, 0xE0); + if (response != -1) { ClearWindowTilemap(2); CopyWindowToVram(2, 1); } - return r4; + return response; } -s8 sub_8018B08(u8 * textState, u16 * windowId, bool8 r6, const u8 * str) +s8 mevent_message_print_and_prompt_yes_no(u8 * textState, u16 * windowId, bool8 yesNoBoxPlacement, const u8 * str) { struct WindowTemplate windowTemplate; s8 input; @@ -671,24 +672,24 @@ s8 sub_8018B08(u8 * textState, u16 * windowId, bool8 r6, const u8 * str) { case 0: StringExpandPlaceholders(gStringVar4, str); - if (r6 == 0) + if (yesNoBoxPlacement == 0) { - *windowId = AddWindow(&gUnknown_082F05C8); + *windowId = AddWindow(&sWindowTemplate_PromptYesOrNo_Width28); } else { - *windowId = AddWindow(&gUnknown_082F05D0); + *windowId = AddWindow(&sWindowTemplate_PromptYesOrNo_Width20); } FillWindowPixelBuffer(*windowId, 0x11); - AddTextPrinterParameterized4(*windowId, 1, 0, 1, 0, 0, gUnknown_082F0728, 0, gStringVar4); - sub_8098858(*windowId, 0x001, 0x0F); + AddTextPrinterParameterized4(*windowId, 1, 0, 1, 0, 0, sMG_Ereader_TextColor_2, 0, gStringVar4); + DrawTextBorderOuter(*windowId, 0x001, 0x0F); CopyWindowToVram(*windowId, 2); PutWindowTilemap(*windowId); (*textState)++; break; case 1: - windowTemplate = gUnknown_082F05E8; - if (r6 == 0) + windowTemplate = sWindowTemplate_YesNoBox; + if (yesNoBoxPlacement == 0) { windowTemplate.tilemapTop = 9; } @@ -723,7 +724,7 @@ s8 sub_8018B08(u8 * textState, u16 * windowId, bool8 r6, const u8 * str) return -2; } -s32 sub_8018C4C(u8 * textState, u16 * windowId, bool32 r2, bool32 r3) +static s32 HandleMysteryGiftListMenu(u8 * textState, u16 * windowId, bool32 cannotToss, bool32 cannotSend) { struct WindowTemplate windowTemplate; s32 input; @@ -731,7 +732,7 @@ s32 sub_8018C4C(u8 * textState, u16 * windowId, bool32 r2, bool32 r3) switch (*textState) { case 0: - if (r2 == 0) + if (cannotToss == 0) { StringExpandPlaceholders(gStringVar4, gText_WhatToDoWithCards); } @@ -739,36 +740,36 @@ s32 sub_8018C4C(u8 * textState, u16 * windowId, bool32 r2, bool32 r3) { StringExpandPlaceholders(gStringVar4, gText_WhatToDoWithNews); } - *windowId = AddWindow(&gUnknown_082F05D8); + *windowId = AddWindow(&sMysteryGiftMenuWindowTemplate); FillWindowPixelBuffer(*windowId, 0x11); - AddTextPrinterParameterized4(*windowId, 1, 0, 1, 0, 0, gUnknown_082F0728, 0, gStringVar4); - sub_8098858(*windowId, 0x001, 0x0F); + AddTextPrinterParameterized4(*windowId, 1, 0, 1, 0, 0, sMG_Ereader_TextColor_2, 0, gStringVar4); + DrawTextBorderOuter(*windowId, 0x001, 0x0F); CopyWindowToVram(*windowId, 2); PutWindowTilemap(*windowId); (*textState)++; break; case 1: - windowTemplate = gUnknown_082F05E8; - if (r3) + windowTemplate = sWindowTemplate_YesNoBox; + if (cannotSend) { - if (r2 == 0) + if (cannotToss == 0) { - input = DoMysteryGiftListMenu(&gUnknown_082F05F8, &gUnknown_082F06C8, 1, 0x00A, 0xE0); + input = DoMysteryGiftListMenu(&sWindowTemplate_7by6, &sListMenu_ReceiveToss, 1, 0x00A, 0xE0); } else { - input = DoMysteryGiftListMenu(&gUnknown_082F0600, &gUnknown_082F06F8, 1, 0x00A, 0xE0); + input = DoMysteryGiftListMenu(&sWindowTemplate_7by4, &sListMenu_Receive, 1, 0x00A, 0xE0); } } else { - if (r2 == 0) + if (cannotToss == 0) { - input = DoMysteryGiftListMenu(&gUnknown_082F05F0, &gUnknown_082F06B0, 1, 0x00A, 0xE0); + input = DoMysteryGiftListMenu(&sWindowTemplate_7by8, &sListMenu_ReceiveSendToss, 1, 0x00A, 0xE0); } else { - input = DoMysteryGiftListMenu(&gUnknown_082F05F8, &gUnknown_082F06E0, 1, 0x00A, 0xE0); + input = DoMysteryGiftListMenu(&sWindowTemplate_7by6, &sListMenu_ReceiveSend, 1, 0x00A, 0xE0); } } if (input != -1) @@ -793,39 +794,39 @@ s32 sub_8018C4C(u8 * textState, u16 * windowId, bool32 r2, bool32 r3) return -1; } -s32 sub_8018D98(bool32 a0) +static bool32 ValidateCardOrNews(bool32 cardOrNews) { - if (a0 == 0) + if (cardOrNews == 0) { - return sub_801B27C(); + return ValidateReceivedWonderCard(); } else { - return sub_801B0CC(); + return ValidateReceivedWonderNews(); } } -bool32 sub_8018DAC(u8 * state, bool32 arg1) +static bool32 HandleLoadWonderCardOrNews(u8 * state, bool32 cardOrNews) { s32 v0; switch (*state) { case 0: - if (arg1 == 0) + if (cardOrNews == 0) { - sub_801BAAC(sav1_get_mevent_buffer_1(), sav1_get_mevent_buffer_2()); + InitWonderCardResources(sav1_get_mevent_buffer_1(), sav1_get_mevent_buffer_2()); } else { - sub_801C6C8(sub_801B00C()); + InitWonderNewsResources(sav1_get_mevent_buffer_0()); } (*state)++; break; case 1: - if (arg1 == 0) + if (cardOrNews == 0) { - v0 = sub_801BB74(); + v0 = FadeToWonderCardMenu(); check: if (v0 != 0) { @@ -835,7 +836,7 @@ bool32 sub_8018DAC(u8 * state, bool32 arg1) } else { - v0 = sub_801C758(); + v0 = FadeToWonderNewsMenu(); goto check; } done: @@ -846,26 +847,26 @@ bool32 sub_8018DAC(u8 * state, bool32 arg1) return FALSE; } -bool32 sub_8018E08(bool32 arg0) +static bool32 DestroyNewsOrCard(bool32 cardOrNews) { - if (arg0 == 0) + if (cardOrNews == 0) { - sub_801B1E8(); + DestroyWonderCard(); } else { - sub_801B06C(); + DestroyWonderNews(); } return TRUE; } -bool32 sub_8018E20(bool32 arg0, bool32 arg1) +static bool32 TearDownCardOrNews_ReturnToTopMenu(bool32 cardOrNews, bool32 arg1) { - if (arg0 == 0) + if (cardOrNews == 0) { - if (sub_801BDA4(arg1) != 0) + if (FadeOutFromWonderCard(arg1) != 0) { - sub_801BB48(); + DestroyWonderCardResources(); return TRUE; } else @@ -875,9 +876,9 @@ bool32 sub_8018E20(bool32 arg0, bool32 arg1) } else { - if (sub_801CA50(arg1) != 0) + if (FadeOutFromWonderNews(arg1) != 0) { - sub_801C72C(); + DestroyWonderNewsResources(); return TRUE; } else @@ -887,36 +888,36 @@ bool32 sub_8018E20(bool32 arg0, bool32 arg1) } } -s32 sub_8018E50(u8 * textState, u16 * windowId, bool32 r2) +static s32 mevent_message_prompt_discard(u8 * textState, u16 * windowId, bool32 cardOrNews) { - if (r2 == 0) + if (cardOrNews == 0) { - return sub_8018B08(textState, windowId, TRUE, gText_IfThrowAwayCardEventWontHappen); + return mevent_message_print_and_prompt_yes_no(textState, windowId, TRUE, gText_IfThrowAwayCardEventWontHappen); } else { - return sub_8018B08(textState, windowId, TRUE, gText_OkayToDiscardNews); + return mevent_message_print_and_prompt_yes_no(textState, windowId, TRUE, gText_OkayToDiscardNews); } } -bool32 mevent_message_was_thrown_away(u8 * textState, bool32 r1) +static bool32 mevent_message_was_thrown_away(u8 * textState, bool32 cardOrNews) { - if (r1 == 0) + if (cardOrNews == 0) { - return mevent_0814257C(textState, gText_WonderCardThrownAway); + return MG_PrintTextOnWindow1AndWaitButton(textState, gText_WonderCardThrownAway); } else { - return mevent_0814257C(textState, gText_WonderNewsThrownAway); + return MG_PrintTextOnWindow1AndWaitButton(textState, gText_WonderNewsThrownAway); } } -bool32 mevent_save_game(u8 * state) +static bool32 mevent_save_game(u8 * state) { switch (*state) { case 0: - sub_8018884(gText_DataWillBeSaved); + AddTextPrinterToWindow1(gText_DataWillBeSaved); (*state)++; break; case 1: @@ -924,7 +925,7 @@ bool32 mevent_save_game(u8 * state) (*state)++; break; case 2: - sub_8018884(gText_SaveCompletedPressA); + AddTextPrinterToWindow1(gText_SaveCompletedPressA); (*state)++; break; case 3: @@ -935,19 +936,19 @@ bool32 mevent_save_game(u8 * state) break; case 4: *state = 0; - sub_80188DC(); + ClearTextWindow(); return TRUE; } return FALSE; } -const u8 * mevent_message(u32 * a0, u8 a1, u8 a2, u32 a3) +static const u8 * mevent_message(u32 * a0, u8 a1, u8 cardOrNews, u32 msgId) { const u8 * msg = NULL; *a0 = 0; - switch (a3) + switch (msgId) { case 0: *a0 = 0; @@ -959,11 +960,11 @@ const u8 * mevent_message(u32 * a0, u8 a1, u8 a2, u32 a3) break; case 2: *a0 = 1; - msg = a2 == 0 ? gText_WonderCardReceived : gText_WonderCardReceivedFrom; + msg = cardOrNews == 0 ? gText_WonderCardReceived : gText_WonderCardReceivedFrom; break; case 3: *a0 = 1; - msg = a2 == 0 ? gText_WonderNewsReceived : gText_WonderNewsReceivedFrom; + msg = cardOrNews == 0 ? gText_WonderNewsReceived : gText_WonderNewsReceivedFrom; break; case 4: *a0 = 1; @@ -1012,14 +1013,14 @@ const u8 * mevent_message(u32 * a0, u8 a1, u8 a2, u32 a3) return msg; } -bool32 mevent_08142CE8(u8 * state, const u8 * arg1, u16 * arg2) +static bool32 PrintMGSuccessMessage(u8 * state, const u8 * arg1, u16 * arg2) { switch (*state) { case 0: if (arg1 != NULL) { - sub_8018884(arg1); + AddTextPrinterToWindow1(arg1); } PlayFanfare(MUS_FANFA4); *arg2 = 0; @@ -1035,7 +1036,7 @@ bool32 mevent_08142CE8(u8 * state, const u8 * arg1, u16 * arg2) if (IsFanfareTaskInactive()) { *state = 0; - sub_80188DC(); + ClearTextWindow(); return TRUE; } break; @@ -1043,11 +1044,11 @@ bool32 mevent_08142CE8(u8 * state, const u8 * arg1, u16 * arg2) return FALSE; } -const u8 * mevent_message_stamp_card_etc_send_status(u32 * a0, u8 unused, u32 state) +static const u8 * mevent_message_stamp_card_etc_send_status(u32 * a0, u8 unused, u32 msgId) { const u8 * result = gText_CommunicationError; *a0 = 0; - switch (state) + switch (msgId) { case 0: result = gText_NothingSentOver; @@ -1100,17 +1101,17 @@ const u8 * mevent_message_stamp_card_etc_send_status(u32 * a0, u8 unused, u32 st return result; } -bool32 sub_8019174(u8 * state_p, u16 * arg1, u8 arg2, u32 state) +static bool32 PrintMGSendStatus(u8 * state, u16 * arg1, u8 arg2, u32 msgId) { u32 flag; - const u8 * str = mevent_message_stamp_card_etc_send_status(&flag, arg2, state); + const u8 * str = mevent_message_stamp_card_etc_send_status(&flag, arg2, msgId); if (flag) { - return mevent_08142CE8(state_p, str, arg1); + return PrintMGSuccessMessage(state, str, arg1); } else { - return mevent_0814257C(state_p, str); + return MG_PrintTextOnWindow1AndWaitButton(state, str); } } @@ -1118,18 +1119,18 @@ void task_add_00_mystery_gift(void) { u8 taskId = CreateTask(task00_mystery_gift, 0); struct MysteryGiftTaskData * data = (void *)gTasks[taskId].data; - data->unk8 = 0; - data->unk9 = 0; + data->state = 0; + data->textState = 0; data->unkA = 0; data->unkB = 0; - data->unkC = 0; - data->unkD = 0; - data->unk0 = 0; + data->IsCardOrNews = 0; + data->source = 0; + data->curPromptWindowId = 0; data->unk2 = 0; data->unk4 = 0; data->unk6 = 0; - data->unkE = 0; - data->unk10 = AllocZeroed(0x40); + data->prevPromptWindowId = 0; + data->buffer = AllocZeroed(0x40); } void task00_mystery_gift(u8 taskId) @@ -1138,95 +1139,95 @@ void task00_mystery_gift(u8 taskId) u32 sp0; const u8 * r1; - switch (data->unk8) + switch (data->state) { case 0: - data->unk8 = 1; + data->state = 1; break; case 1: - switch (sub_8018A50(&data->unk9, &data->unk0, FALSE)) + switch (MysteryGift_HandleThreeOptionMenu(&data->textState, &data->curPromptWindowId, FALSE)) { case 0: - data->unkC = 0; - if (sub_801B27C() == TRUE) + data->IsCardOrNews = 0; + if (ValidateReceivedWonderCard() == TRUE) { - data->unk8 = 18; + data->state = 18; } else { - data->unk8 = 2; + data->state = 2; } break; case 1: - data->unkC = 1; - if (sub_801B0CC() == TRUE) + data->IsCardOrNews = 1; + if (ValidateReceivedWonderNews() == TRUE) { - data->unk8 = 18; + data->state = 18; } else { - data->unk8 = 2; + data->state = 2; } break; case -2u: - data->unk8 = 37; + data->state = 37; break; } break; case 2: { - if (data->unkC == 0) + if (data->IsCardOrNews == 0) { - if (mevent_0814257C(&data->unk9, gText_DontHaveCardNewOneInput)) + if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_DontHaveCardNewOneInput)) { - data->unk8 = 3; - sub_80186EC(0, 1); + data->state = 3; + PrintMysteryGiftOrEReaderTopMenu(0, 1); } } else { - if (mevent_0814257C(&data->unk9, gText_DontHaveNewsNewOneInput)) + if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_DontHaveNewsNewOneInput)) { - data->unk8 = 3; - sub_80186EC(0, 1); + data->state = 3; + PrintMysteryGiftOrEReaderTopMenu(0, 1); } } break; } case 3: - if (data->unkC == 0) + if (data->IsCardOrNews == 0) { - sub_8018884(gText_WhereShouldCardBeAccessed); + AddTextPrinterToWindow1(gText_WhereShouldCardBeAccessed); } else { - sub_8018884(gText_WhereShouldNewsBeAccessed); + AddTextPrinterToWindow1(gText_WhereShouldNewsBeAccessed); } - data->unk8 = 4; + data->state = 4; break; case 4: - switch (sub_8018A50(&data->unk9, &data->unk0, TRUE)) + switch (MysteryGift_HandleThreeOptionMenu(&data->textState, &data->curPromptWindowId, TRUE)) { case 0: - sub_80188DC(); - data->unk8 = 5; - data->unkD = 0; + ClearTextWindow(); + data->state = 5; + data->source = 0; break; case 1: - sub_80188DC(); - data->unk8 = 5; - data->unkD = 1; + ClearTextWindow(); + data->state = 5; + data->source = 1; break; case -2u: - sub_80188DC(); - if (sub_8018D98(data->unkC)) + ClearTextWindow(); + if (ValidateCardOrNews(data->IsCardOrNews)) { - data->unk8 = 18; + data->state = 18; } else { - data->unk8 = 0; - sub_80186EC(0, 0); + data->state = 0; + PrintMysteryGiftOrEReaderTopMenu(0, 0); } break; } @@ -1238,245 +1239,245 @@ void task00_mystery_gift(u8 taskId) gStringVar2[0] = eos; gStringVar3[0] = eos; } - switch (data->unkC) + switch (data->IsCardOrNews) { case 0: - if (data->unkD == 1) + if (data->source == 1) { - sub_8014EFC(0x15); + MEvent_CreateTask_CardOrNewsWithFriend(0x15); } - else if (data->unkD == 0) + else if (data->source == 0) { - sub_80152A8(0x15); + MEvent_CreateTask_CardOrNewsOverWireless(0x15); } break; case 1: - if (data->unkD == 1) + if (data->source == 1) { - sub_8014EFC(0x16); + MEvent_CreateTask_CardOrNewsWithFriend(0x16); } - else if (data->unkD == 0) + else if (data->source == 0) { - sub_80152A8(0x16); + MEvent_CreateTask_CardOrNewsOverWireless(0x16); } break; } - data->unk8 = 6; + data->state = 6; break; case 6: if (gReceivedRemoteLinkPlayers != 0) { - sub_8018838(TRUE); - data->unk8 = 7; - sub_801D484(data->unkC); + ClearScreenInBg0(TRUE); + data->state = 7; + mevent_srv_ish_do_init(data->IsCardOrNews); } else if (gSpecialVar_Result == 5) { - sub_8018838(TRUE); - data->unk8 = 3; + ClearScreenInBg0(TRUE); + data->state = 3; } break; case 7: - sub_8018884(gText_Communicating); - data->unk8 = 8; + AddTextPrinterToWindow1(gText_Communicating); + data->state = 8; break; case 8: - switch (sub_801D4A8(&data->unk0)) + switch (mevent_srv_ish_do_exec(&data->curPromptWindowId)) { case 6: task_add_05_task_del_08FA224_when_no_RfuFunc(); - data->unkE = data->unk0; - data->unk8 = 13; + data->prevPromptWindowId = data->curPromptWindowId; + data->state = 13; break; case 5: - memcpy(data->unk10, sub_801D4F4(), 0x40); - sub_801D4E4(); + memcpy(data->buffer, mevent_srv_ish_get_buffer(), 0x40); + mevent_srv_ish_inc_flag(); break; case 3: - data->unk8 = 10; + data->state = 10; break; case 2: - data->unk8 = 9; + data->state = 9; break; case 4: - data->unk8 = 11; + data->state = 11; StringCopy(gStringVar1, gLinkPlayers[0].name); break; } break; case 9: - switch ((u32)sub_8018B08(&data->unk9, &data->unk0, FALSE, sub_801D4F4())) + switch ((u32)mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, mevent_srv_ish_get_buffer())) { case 0: - sub_801D500(0); - sub_801D4E4(); - data->unk8 = 7; + mevent_srv_ish_set_param(0); + mevent_srv_ish_inc_flag(); + data->state = 7; break; case 1: - sub_801D500(1); - sub_801D4E4(); - data->unk8 = 7; + mevent_srv_ish_set_param(1); + mevent_srv_ish_inc_flag(); + data->state = 7; break; case -1u: - sub_801D500(1); - sub_801D4E4(); - data->unk8 = 7; + mevent_srv_ish_set_param(1); + mevent_srv_ish_inc_flag(); + data->state = 7; break; } break; case 10: - if (mevent_0814257C(&data->unk9, sub_801D4F4())) + if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, mevent_srv_ish_get_buffer())) { - sub_801D4E4(); - data->unk8 = 7; + mevent_srv_ish_inc_flag(); + data->state = 7; } break; case 11: - switch ((u32)sub_8018B08(&data->unk9, &data->unk0, FALSE, gText_ThrowAwayWonderCard)) + switch ((u32)mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, gText_ThrowAwayWonderCard)) { case 0: - if (sub_801B3F8() == TRUE) + if (CheckReceivedGiftFromWonderCard() == TRUE) { - data->unk8 = 12; + data->state = 12; } else { - sub_801D500(0); - sub_801D4E4(); - data->unk8 = 7; + mevent_srv_ish_set_param(0); + mevent_srv_ish_inc_flag(); + data->state = 7; } break; case 1: - sub_801D500(1); - sub_801D4E4(); - data->unk8 = 7; + mevent_srv_ish_set_param(1); + mevent_srv_ish_inc_flag(); + data->state = 7; break; case -1u: - sub_801D500(1); - sub_801D4E4(); - data->unk8 = 7; + mevent_srv_ish_set_param(1); + mevent_srv_ish_inc_flag(); + data->state = 7; break; } break; case 12: - switch ((u32)sub_8018B08(&data->unk9, &data->unk0, FALSE, gText_HaventReceivedCardsGift)) + switch ((u32)mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, gText_HaventReceivedCardsGift)) { case 0: - sub_801D500(0); - sub_801D4E4(); - data->unk8 = 7; + mevent_srv_ish_set_param(0); + mevent_srv_ish_inc_flag(); + data->state = 7; break; case 1: - sub_801D500(1); - sub_801D4E4(); - data->unk8 = 7; + mevent_srv_ish_set_param(1); + mevent_srv_ish_inc_flag(); + data->state = 7; break; case -1u: - sub_801D500(1); - sub_801D4E4(); - data->unk8 = 7; + mevent_srv_ish_set_param(1); + mevent_srv_ish_inc_flag(); + data->state = 7; break; } break; case 13: if (gReceivedRemoteLinkPlayers == 0) { - sub_800E084(); - data->unk8 = 14; + DestroyWirelessStatusIndicatorSprite(); + data->state = 14; } break; case 14: - if (sub_8018A1C(&data->unk9, gText_CommunicationCompleted)) + if (PrintStringAndWait2Seconds(&data->textState, gText_CommunicationCompleted)) { - if (data->unkD == 1) + if (data->source == 1) { StringCopy(gStringVar1, gLinkPlayers[0].name); } - data->unk8 = 15; + data->state = 15; } break; case 15: { register bool32 flag asm("r1"); - r1 = mevent_message(&sp0, data->unkC, data->unkD, data->unkE); + r1 = mevent_message(&sp0, data->IsCardOrNews, data->source, data->prevPromptWindowId); if (r1 == NULL) { - r1 = data->unk10; + r1 = data->buffer; } if (sp0) { - flag = mevent_08142CE8(&data->unk9, r1, &data->unk0); + flag = PrintMGSuccessMessage(&data->textState, r1, &data->curPromptWindowId); } else { - flag = mevent_0814257C(&data->unk9, r1); + flag = MG_PrintTextOnWindow1AndWaitButton(&data->textState, r1); } if (flag) { - if (data->unkE == 3) + if (data->prevPromptWindowId == 3) { - if (data->unkD == 1) + if (data->source == 1) { - sub_801DB68(1); + GenerateRandomNews(1); } else { - sub_801DB68(2); + GenerateRandomNews(2); } } if (sp0 == 0) { - data->unk8 = 0; - sub_80186EC(0, 0); + data->state = 0; + PrintMysteryGiftOrEReaderTopMenu(0, 0); } else { - data->unk8 = 17; + data->state = 17; } } break; } case 16: - if (mevent_0814257C(&data->unk9, gText_CommunicationError)) + if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_CommunicationError)) { - data->unk8 = 0; - sub_80186EC(0, 0); + data->state = 0; + PrintMysteryGiftOrEReaderTopMenu(0, 0); } break; case 17: - if (mevent_save_game(&data->unk9)) + if (mevent_save_game(&data->textState)) { - data->unk8 = 18; + data->state = 18; } break; case 18: - if (sub_8018DAC(&data->unk9, data->unkC)) + if (HandleLoadWonderCardOrNews(&data->textState, data->IsCardOrNews)) { - data->unk8 = 20; + data->state = 20; } break; case 20: - if (data->unkC == 0) + if (data->IsCardOrNews == 0) { if (({gMain.newKeys & A_BUTTON;})) { - data->unk8 = 21; + data->state = 21; } if (({gMain.newKeys & B_BUTTON;})) { - data->unk8 = 27; + data->state = 27; } } else { - switch (sub_801CCD0(gMain.newKeys)) + switch (MENews_GetInput(gMain.newKeys)) { case 0: - sub_801CC38(); - data->unk8 = 21; + MENews_RemoveScrollIndicatorArrowPair(); + data->state = 21; break; case 1: - data->unk8 = 27; + data->state = 27; break; } } @@ -1484,142 +1485,142 @@ void task00_mystery_gift(u8 taskId) case 21: { u32 result; - if (data->unkC == 0) + if (data->IsCardOrNews == 0) { - if (sub_801B308()) + if (WonderCard_Test_Unk_08_6()) { - result = sub_8018C4C(&data->unk9, &data->unk0, data->unkC, FALSE); + result = HandleMysteryGiftListMenu(&data->textState, &data->curPromptWindowId, data->IsCardOrNews, FALSE); } else { - result = sub_8018C4C(&data->unk9, &data->unk0, data->unkC, TRUE); + result = HandleMysteryGiftListMenu(&data->textState, &data->curPromptWindowId, data->IsCardOrNews, TRUE); } } else { - if (sub_801B128()) + if (WonderNews_Test_Unk_02()) { - result = sub_8018C4C(&data->unk9, &data->unk0, data->unkC, FALSE); + result = HandleMysteryGiftListMenu(&data->textState, &data->curPromptWindowId, data->IsCardOrNews, FALSE); } else { - result = sub_8018C4C(&data->unk9, &data->unk0, data->unkC, TRUE); + result = HandleMysteryGiftListMenu(&data->textState, &data->curPromptWindowId, data->IsCardOrNews, TRUE); } } switch (result) { case 0: - data->unk8 = 28; + data->state = 28; break; case 1: - data->unk8 = 29; + data->state = 29; break; case 2: - data->unk8 = 22; + data->state = 22; break; case -2u: - if (data->unkC == 1) + if (data->IsCardOrNews == 1) { - sub_801CC80(); + MENews_AddScrollIndicatorArrowPair(); } - data->unk8 = 20; + data->state = 20; break; } break; } case 22: - switch (sub_8018E50(&data->unk9, &data->unk0, data->unkC)) + switch (mevent_message_prompt_discard(&data->textState, &data->curPromptWindowId, data->IsCardOrNews)) { case 0: - if (data->unkC == 0 && sub_801B3F8() == TRUE) + if (data->IsCardOrNews == 0 && CheckReceivedGiftFromWonderCard() == TRUE) { - data->unk8 = 23; + data->state = 23; } else { - data->unk8 = 24; + data->state = 24; } break; case 1: - data->unk8 = 21; + data->state = 21; break; case -1: - data->unk8 = 21; + data->state = 21; break; } break; case 23: - switch ((u32)sub_8018B08(&data->unk9, &data->unk0, TRUE, gText_HaventReceivedGiftOkayToDiscard)) + switch ((u32)mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, TRUE, gText_HaventReceivedGiftOkayToDiscard)) { case 0: - data->unk8 = 24; + data->state = 24; break; case 1: - data->unk8 = 21; + data->state = 21; break; case -1u: - data->unk8 = 21; + data->state = 21; break; } break; case 24: - if (sub_8018E20(data->unkC, 1)) + if (TearDownCardOrNews_ReturnToTopMenu(data->IsCardOrNews, 1)) { - sub_8018E08(data->unkC); - data->unk8 = 25; + DestroyNewsOrCard(data->IsCardOrNews); + data->state = 25; } break; case 25: - if (mevent_save_game(&data->unk9)) + if (mevent_save_game(&data->textState)) { - data->unk8 = 26; + data->state = 26; } break; case 26: - if (mevent_message_was_thrown_away(&data->unk9, data->unkC)) + if (mevent_message_was_thrown_away(&data->textState, data->IsCardOrNews)) { - data->unk8 = 0; - sub_80186EC(0, 0); + data->state = 0; + PrintMysteryGiftOrEReaderTopMenu(0, 0); } break; case 27: - if (sub_8018E20(data->unkC, 0)) + if (TearDownCardOrNews_ReturnToTopMenu(data->IsCardOrNews, 0)) { - data->unk8 = 0; + data->state = 0; } break; case 28: - if (sub_8018E20(data->unkC, 1)) + if (TearDownCardOrNews_ReturnToTopMenu(data->IsCardOrNews, 1)) { - data->unk8 = 3; + data->state = 3; } break; case 29: - if (sub_8018E20(data->unkC, 1)) + if (TearDownCardOrNews_ReturnToTopMenu(data->IsCardOrNews, 1)) { - switch (data->unkC) + switch (data->IsCardOrNews) { case 0: - sub_8014A00(21); + MEvent_CreateTask_Leader(21); break; case 1: - sub_8014A00(22); + MEvent_CreateTask_Leader(22); break; } - data->unkD = 1; - data->unk8 = 30; + data->source = 1; + data->state = 30; } break; case 30: if (gReceivedRemoteLinkPlayers != 0) { - sub_8018838(1); - data->unk8 = 31; + ClearScreenInBg0(1); + data->state = 31; } else if (gSpecialVar_Result == 5) { - sub_8018838(1); - data->unk8 = 18; + ClearScreenInBg0(1); + data->state = 18; } break; case 31: @@ -1629,64 +1630,74 @@ void task00_mystery_gift(u8 taskId) gStringVar2[0] = eos; gStringVar3[0] = eos; } - if (data->unkC == 0) + if (data->IsCardOrNews == 0) { - sub_8018884(gText_SendingWonderCard); + AddTextPrinterToWindow1(gText_SendingWonderCard); mevent_srv_new_wcard(); } else { - sub_8018884(gText_SendingWonderNews); + AddTextPrinterToWindow1(gText_SendingWonderNews); mevent_srv_init_wnews(); } - data->unk8 = 32; + data->state = 32; break; case 32: - if (sub_801D0C4(&data->unk0) == 3) + if (mevent_srv_common_do_exec(&data->curPromptWindowId) == 3) { - data->unkE = data->unk0; - data->unk8 = 33; + data->prevPromptWindowId = data->curPromptWindowId; + data->state = 33; } break; case 33: task_add_05_task_del_08FA224_when_no_RfuFunc(); StringCopy(gStringVar1, gLinkPlayers[1].name); - data->unk8 = 34; + data->state = 34; break; case 34: if (gReceivedRemoteLinkPlayers == 0) { - sub_800E084(); - data->unk8 = 35; + DestroyWirelessStatusIndicatorSprite(); + data->state = 35; } break; case 35: - if (sub_8019174(&data->unk9, &data->unk0, data->unkD, data->unkE)) + if (PrintMGSendStatus(&data->textState, &data->curPromptWindowId, data->source, data->prevPromptWindowId)) { - if (data->unkD == 1 && data->unkE == 3) + if (data->source == 1 && data->prevPromptWindowId == 3) { - sub_801DB68(3); - data->unk8 = 17; + GenerateRandomNews(3); + data->state = 17; } else { - data->unk8 = 0; - sub_80186EC(0, 0); + data->state = 0; + PrintMysteryGiftOrEReaderTopMenu(0, 0); } } break; case 36: - if (mevent_0814257C(&data->unk9, gText_CommunicationError)) + if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_CommunicationError)) { - data->unk8 = 0; - sub_80186EC(0, 0); + data->state = 0; + PrintMysteryGiftOrEReaderTopMenu(0, 0); } break; case 37: CloseLink(); - Free(data->unk10); + Free(data->buffer); DestroyTask(taskId); - SetMainCallback2(sub_80186A4); + SetMainCallback2(MainCB_FreeAllBuffersAndReturnToInitTitleScreen); break; } } + +u16 GetMysteryGiftBaseBlock(void) +{ + return 0x1A9; +} + +void bgid_upload_textbox_1(u8 bgId) +{ + DecompressAndLoadBgGfxUsingHeap(bgId, gUnkTextboxBorderGfx, 0x100, 0, 0); +} diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c index 30f5af14c..fb1be0698 100644 --- a/src/pokemon_storage_system.c +++ b/src/pokemon_storage_system.c @@ -4419,7 +4419,7 @@ static void PrintStorageActionText(u8 id) DynamicPlaceholderTextUtil_ExpandPlaceholders(sPSSData->field_2190, gPCStorageActionTexts[id].text); FillWindowPixelBuffer(1, PIXEL_FILL(1)); AddTextPrinterParameterized(1, 1, sPSSData->field_2190, 0, 1, TEXT_SPEED_FF, NULL); - sub_8098858(1, 2, 14); + DrawTextBorderOuter(1, 2, 14); PutWindowTilemap(1); CopyWindowToVram(1, 2); schedule_bg_copy_tilemap_to_vram(0); diff --git a/src/script.c b/src/script.c index 91690dd33..cb06300bf 100644 --- a/src/script.c +++ b/src/script.c @@ -405,7 +405,7 @@ bool32 sub_80991F8(void) u8 *sub_8099244(void) { struct RamScriptData *scriptData = &gSaveBlock1Ptr->ramScript.data; - if (!sub_801B27C()) + if (!ValidateReceivedWonderCard()) return NULL; if (scriptData->magic != RAM_SCRIPT_MAGIC) return NULL; diff --git a/src/script_pokemon_util_80F87D8.c b/src/script_pokemon_util_80F87D8.c index 7d6020c7a..7e4c14531 100755 --- a/src/script_pokemon_util_80F87D8.c +++ b/src/script_pokemon_util_80F87D8.c @@ -488,7 +488,7 @@ void sub_80F910C(void) if (gIsLinkContest & 2) { if (gReceivedRemoteLinkPlayers) - sub_800E084(); + DestroyWirelessStatusIndicatorSprite(); } } diff --git a/src/start_menu.c b/src/start_menu.c index f573f9bdf..5b527e15e 100644 --- a/src/start_menu.c +++ b/src/start_menu.c @@ -1185,7 +1185,7 @@ static bool32 sub_80A03E4(u8 *par1) InitBgsFromTemplates(0, sUnknown_085105A8, ARRAY_COUNT(sUnknown_085105A8)); InitWindows(sUnknown_085105AC); LoadUserWindowBorderGfx_(0, 8, 224); - sub_81978B0(240); + Menu_LoadStdPalAt(240); break; case 3: ShowBg(0); @@ -1234,7 +1234,7 @@ static void sub_80A0550(u8 taskId) 2, 1, 3); - sub_8098858(0, 8, 14); + DrawTextBorderOuter(0, 8, 14); PutWindowTilemap(0); CopyWindowToVram(0, 3); BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); diff --git a/src/text_window.c b/src/text_window.c index 517f4bdb9..98fc09e87 100644 --- a/src/text_window.c +++ b/src/text_window.c @@ -113,7 +113,7 @@ void LoadUserWindowBorderGfx(u8 windowId, u16 destOffset, u8 palOffset) LoadWindowGfx(windowId, gSaveBlock2Ptr->optionsWindowFrameType, destOffset, palOffset); } -void sub_8098858(u8 windowId, u16 tileNum, u8 palNum) +void DrawTextBorderOuter(u8 windowId, u16 tileNum, u8 palNum) { u8 bgLayer = GetWindowAttribute(windowId, WINDOW_BG); u16 tilemapLeft = GetWindowAttribute(windowId, WINDOW_TILEMAP_LEFT); @@ -131,7 +131,7 @@ void sub_8098858(u8 windowId, u16 tileNum, u8 palNum) FillBgTilemapBufferRect(bgLayer, tileNum + 8, tilemapLeft + width, tilemapTop + height, 1, 1, palNum); } -void sub_80989E0(u8 windowId, u16 tileNum, u8 palNum) +void DrawTextBorderInner(u8 windowId, u16 tileNum, u8 palNum) { u8 bgLayer = GetWindowAttribute(windowId, WINDOW_BG); u16 tilemapLeft = GetWindowAttribute(windowId, WINDOW_TILEMAP_LEFT); diff --git a/src/trade.c b/src/trade.c index 34f49060f..80c74d2cd 100644 --- a/src/trade.c +++ b/src/trade.c @@ -2014,7 +2014,7 @@ static void sub_80781C8(void) FreeAllWindowBuffers(); Free(gUnknown_0203229C); gMain.callback1 = NULL; - sub_800E084(); + DestroyWirelessStatusIndicatorSprite(); SetMainCallback2(sub_807AE50); } } @@ -2543,7 +2543,7 @@ static void sub_8078DBC(void) if (gUnknown_0203229C->tradeMenuCursorPosition < 6) { - sub_8098858(1, 1, 14); + DrawTextBorderOuter(1, 1, 14); FillWindowPixelBuffer(1, PIXEL_FILL(1)); PrintMenuTable(1, 2, gUnknown_0832DEAC); InitMenuInUpperLeftCornerPlaySoundWhenAPressed(1, 2, 0); @@ -2844,7 +2844,7 @@ static void sub_80794CC(void) Free(gUnknown_02032184); Free(gUnknown_0203229C); FreeAllWindowBuffers(); - sub_800E084(); + DestroyWirelessStatusIndicatorSprite(); SetMainCallback2(CB2_ReturnToFieldFromMultiplayer); } } @@ -3341,7 +3341,7 @@ static void sub_807A19C(u8 a0) { FillWindowPixelBuffer(0, PIXEL_FILL(1)); AddTextPrinterParameterized(0, 1, gUnknown_0832DEBC[a0], 0, 1, TEXT_SPEED_FF, NULL); - sub_8098858(0, 20, 12); + DrawTextBorderOuter(0, 20, 12); PutWindowTilemap(0); CopyWindowToVram(0, 3); } @@ -6123,7 +6123,7 @@ static void c2_080543C4(void) FreeMonSpritesGfx(); FREE_AND_SET_NULL(gUnknown_020322A0); if (gWirelessCommType) - sub_800E084(); + DestroyWirelessStatusIndicatorSprite(); SetMainCallback2(gMain.savedCallback); } RunTasks(); diff --git a/src/union_room.c b/src/union_room.c index df0137379..8aeaaf6fb 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -45,6 +45,7 @@ #include "event_obj_lock.h" #include "union_room_chat.h" #include "berry_crush.h" +#include "mystery_gift.h" EWRAM_DATA u8 gUnknown_02022C20[12] = {}; EWRAM_DATA u8 gUnknown_02022C2C = 0; @@ -100,9 +101,8 @@ void sub_801AC54(void); void sub_802A9A8(u8 monId, MainCallback callback); void sub_802493C(u8 monId, MainCallback callback); void sub_80149D8(void); -u16 sub_8019930(void); -void sub_8018784(u8 windowId); -s8 sub_8018B08(u8 *textState, u8 *arg1, u8 arg2, const u8 *str); +void MG_DrawTextBorder(u8 windowId); +s8 mevent_message_print_and_prompt_yes_no(u8 *textState, u8 *arg1, u8 arg2, const u8 *str); bool32 sub_8016F1C(struct UnkLinkRfuStruct_02022B14 *arg0, s16 arg1); u8 sub_8016DF0(struct UnkStruct_Main4 *arg0, struct UnkStruct_Main4 *arg1, u32 arg2); void sub_8019F2C(void); @@ -1555,7 +1555,7 @@ void sub_8012780(u8 taskId) break; case 21: case 23: - sub_800E084(); + DestroyWirelessStatusIndicatorSprite(); sub_800EDD4(); sub_8012F64(data); data->state++; @@ -2076,7 +2076,7 @@ void sub_80134E8(u8 taskId) data->state++; break; case 13: - sub_800E084(); + DestroyWirelessStatusIndicatorSprite(); if (PrintOnTextbox(&data->textState, gUnknown_082EDE9C[sub_8011A74()])) { gSpecialVar_Result = 6; @@ -2084,12 +2084,12 @@ void sub_80134E8(u8 taskId) } break; case 11: - sub_800E084(); + DestroyWirelessStatusIndicatorSprite(); gSpecialVar_Result = 5; data->state = 23; break; case 15: - sub_800E084(); + DestroyWirelessStatusIndicatorSprite(); if (PrintOnTextbox(&data->textState, gUnknown_082EDE9C[sub_8011A74()])) { gSpecialVar_Result = 8; @@ -2481,7 +2481,7 @@ void sub_80143E4(void *arg0, bool32 arg1) TrainerCard_GenerateCardForPlayer((struct TrainerCard *)argAsU16Ptr); if (arg1) - argAsU16Ptr[48] = sub_801B39C(); + argAsU16Ptr[48] = GetWonderCardFlagID(); else argAsU16Ptr[48] = 0; } @@ -2680,7 +2680,7 @@ void sub_8014790(u8 taskId) case 8: if (gReceivedRemoteLinkPlayers == 0) { - sub_800E084(); + DestroyWirelessStatusIndicatorSprite(); EnableBothScriptContexts(); DestroyTask(taskId); } @@ -2699,7 +2699,7 @@ void sub_80149D8(void) gTasks[taskId].data[0] = 0; } -void sub_8014A00(u32 arg0) +void MEvent_CreateTask_Leader(u32 arg0) { u8 taskId; struct UnkStruct_Leader *dataPtr; @@ -2745,10 +2745,10 @@ void sub_8014A40(u8 taskId) data->field_17 = sub_8016FC0(data->field_4, 0xFF); winTemplate = gUnknown_082F011C; - winTemplate.baseBlock = sub_8019930(); + winTemplate.baseBlock = GetMysteryGiftBaseBlock(); winTemplate.paletteNum = 0xC; data->listWindowId = AddWindow(&winTemplate); - sub_8018784(data->listWindowId); + MG_DrawTextBorder(data->listWindowId); gMultiuseListMenuTemplate = gUnknown_082F015C; gMultiuseListMenuTemplate.windowId = data->listWindowId; data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); @@ -2763,7 +2763,7 @@ void sub_8014A40(u8 taskId) data->state = 3; break; case 3: - sub_8018884(gStringVar4); + AddTextPrinterToWindow1(gStringVar4); data->state = 4; break; case 4: @@ -2771,11 +2771,11 @@ void sub_8014A40(u8 taskId) if (gMain.newKeys & B_BUTTON) { data->state = 13; - sub_800E084(); + DestroyWirelessStatusIndicatorSprite(); } break; case 6: - if (mevent_0814257C(&data->textState, gUnknown_082EDF40)) + if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_082EDF40)) { data->field_13 = sub_8013398(data->field_0); RedrawListMenu(data->listTaskId); @@ -2786,7 +2786,7 @@ void sub_8014A40(u8 taskId) data->state = 7; break; case 7: - switch (sub_8018B08(&data->textState, &data->field_14, 0, gStringVar4)) + switch (mevent_message_print_and_prompt_yes_no(&data->textState, &data->field_14, 0, gStringVar4)) { case 0: sub_800E0E8(); @@ -2837,7 +2837,7 @@ void sub_8014A40(u8 taskId) } break; case 9: - sub_8018884(gStringVar4); + AddTextPrinterToWindow1(gStringVar4); data->state = 10; break; case 10: @@ -2860,7 +2860,7 @@ void sub_8014A40(u8 taskId) } break; case 13: - sub_800E084(); + DestroyWirelessStatusIndicatorSprite(); sub_800EDD4(); DestroyListMenuTask(data->listTaskId, 0, 0); CopyBgTilemapBufferToVram(0); @@ -2872,7 +2872,7 @@ void sub_8014A40(u8 taskId) data->state++; break; case 14: - if (mevent_0814257C(&data->textState, gText_PleaseStartOver)) + if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_PleaseStartOver)) { DestroyTask(taskId); gSpecialVar_Result = 5; @@ -2907,7 +2907,7 @@ void sub_8014A40(u8 taskId) } } -void sub_8014EFC(u32 arg0) +void MEvent_CreateTask_CardOrNewsWithFriend(u32 arg0) { u8 taskId; struct UnkStruct_Group *dataPtr; @@ -2940,7 +2940,7 @@ void sub_8014F48(u8 taskId) data->state = 1; break; case 1: - sub_8018884(gUnknown_082EF7F8); + AddTextPrinterToWindow1(gUnknown_082EF7F8); data->state = 2; break; case 2: @@ -2949,7 +2949,7 @@ void sub_8014F48(u8 taskId) data->field_11 = sub_8016FC0(data->field_4, data->field_12 + 7); winTemplate1 = gUnknown_082F0174; - winTemplate1.baseBlock = sub_8019930(); + winTemplate1.baseBlock = GetMysteryGiftBaseBlock(); winTemplate1.paletteNum = 0xC; data->listWindowId = AddWindow(&winTemplate1); @@ -2957,12 +2957,12 @@ void sub_8014F48(u8 taskId) winTemplate2.paletteNum = 0xC; data->field_D = AddWindow(&winTemplate2); - sub_8018784(data->listWindowId); + MG_DrawTextBorder(data->listWindowId); gMultiuseListMenuTemplate = gUnknown_082F0204; gMultiuseListMenuTemplate.windowId = data->listWindowId; data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); - sub_8018784(data->field_D); + MG_DrawTextBorder(data->field_D); FillWindowPixelBuffer(data->field_D, PIXEL_FILL(1)); PutWindowTilemap(data->field_D); sub_80125BC(data->field_D); @@ -3013,7 +3013,7 @@ void sub_8014F48(u8 taskId) } break; case 4: - sub_8018884(gUnknown_082EFC3C); + AddTextPrinterToWindow1(gUnknown_082EFC3C); sub_8018404(gStringVar1, &data->field_0->arr[data->field_F]); data->state = 5; break; @@ -3032,7 +3032,7 @@ void sub_8014F48(u8 taskId) data->state = 8; break; case 5: - sub_8018884(gUnknown_082EDDF4); + AddTextPrinterToWindow1(gUnknown_082EDDF4); sub_8011A64(0, 0); break; } @@ -3050,17 +3050,17 @@ void sub_8014F48(u8 taskId) data->state++; break; case 9: - if (mevent_0814257C(&data->textState, gUnknown_082EDF80[sub_8011A74()])) + if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_082EDF80[sub_8011A74()])) { - sub_800E084(); + DestroyWirelessStatusIndicatorSprite(); DestroyTask(taskId); sub_800EDD4(); gSpecialVar_Result = 5; } break; case 7: - sub_800E084(); - sub_8018884(gText_PleaseStartOver); + DestroyWirelessStatusIndicatorSprite(); + AddTextPrinterToWindow1(gText_PleaseStartOver); DestroyTask(taskId); sub_800EDD4(); gSpecialVar_Result = 5; @@ -3076,7 +3076,7 @@ void sub_8014F48(u8 taskId) } } -void sub_80152A8(u32 arg0) +void MEvent_CreateTask_CardOrNewsOverWireless(u32 arg0) { u8 taskId; struct UnkStruct_Group *dataPtr; @@ -3109,7 +3109,7 @@ void sub_80152F4(u8 taskId) data->state = 1; break; case 1: - sub_8018884(gUnknown_082EFBC8); + AddTextPrinterToWindow1(gUnknown_082EFBC8); data->state = 2; break; case 2: @@ -3120,10 +3120,10 @@ void sub_80152F4(u8 taskId) if (data->field_13 != 0) { winTemplate = gUnknown_082F0174; - winTemplate.baseBlock = sub_8019930(); + winTemplate.baseBlock = GetMysteryGiftBaseBlock(); data->listWindowId = AddWindow(&winTemplate); - sub_8018784(data->listWindowId); + MG_DrawTextBorder(data->listWindowId); gMultiuseListMenuTemplate = gUnknown_082F0204; gMultiuseListMenuTemplate.windowId = data->listWindowId; data->listTaskId = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0); @@ -3178,7 +3178,7 @@ void sub_80152F4(u8 taskId) } break; case 4: - sub_8018884(gUnknown_082EFC90); + AddTextPrinterToWindow1(gUnknown_082EFC90); sub_8018404(gStringVar1, &data->field_0->arr[data->field_F]); data->state = 5; break; @@ -3197,7 +3197,7 @@ void sub_80152F4(u8 taskId) data->state = 8; break; case 5: - sub_8018884(gUnknown_082EDEC4); + AddTextPrinterToWindow1(gUnknown_082EDEC4); sub_8011A64(0, 0); break; } @@ -3218,27 +3218,27 @@ void sub_80152F4(u8 taskId) data->state++; break; case 9: - if (mevent_0814257C(&data->textState, gUnknown_082EDF04)) + if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_082EDF04)) { - sub_800E084(); + DestroyWirelessStatusIndicatorSprite(); DestroyTask(taskId); sub_800EDD4(); gSpecialVar_Result = 5; } break; case 7: - if (mevent_0814257C(&data->textState, gText_WirelessSearchCanceled)) + if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gText_WirelessSearchCanceled)) { - sub_800E084(); + DestroyWirelessStatusIndicatorSprite(); DestroyTask(taskId); sub_800EDD4(); gSpecialVar_Result = 5; } break; case 11: - if (mevent_0814257C(&data->textState, gUnknown_082EFD58[data->field_12])) + if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, gUnknown_082EFD58[data->field_12])) { - sub_800E084(); + DestroyWirelessStatusIndicatorSprite(); DestroyTask(taskId); sub_800EDD4(); gSpecialVar_Result = 5; @@ -4513,7 +4513,7 @@ s32 sub_8017178(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate *winTe { case 0: winTemplateCopy = *winTemplate; - r1 = sub_81DB41C(menuTemplate); + r1 = Intl_GetListMenuWidth(menuTemplate); if (winTemplateCopy.width > r1) { winTemplateCopy.width = r1; diff --git a/src/union_room_chat.c b/src/union_room_chat.c index 85cfa6e2e..120252d36 100755 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -2074,7 +2074,7 @@ static void sub_801FDDC(u8 left, u8 top, u8 initialCursorPos) PutWindowTilemap(gUnknown_02022C88->unk18); AddTextPrinterParameterized(gUnknown_02022C88->unk18, 1, gText_Yes, 8, 1, TEXT_SPEED_FF, NULL); AddTextPrinterParameterized(gUnknown_02022C88->unk18, 1, gText_No, 8, 17, TEXT_SPEED_FF, NULL); - sub_8098858(gUnknown_02022C88->unk18, 1, 13); + DrawTextBorderOuter(gUnknown_02022C88->unk18, 1, 13); InitMenuInUpperLeftCornerPlaySoundWhenAPressed(gUnknown_02022C88->unk18, 2, initialCursorPos); } } @@ -2140,7 +2140,7 @@ static void sub_801FF18(int arg0, u16 arg1) PutWindowTilemap(windowId); if (gUnknown_082F2D40[arg0].unk4 == 1) { - sub_80989E0(windowId, 0xA, 2); + DrawTextBorderInner(windowId, 0xA, 2); AddTextPrinterParameterized5( windowId, 1, @@ -2154,7 +2154,7 @@ static void sub_801FF18(int arg0, u16 arg1) } else { - sub_8098858(windowId, 0xA, 2); + DrawTextBorderOuter(windowId, 0xA, 2); AddTextPrinterParameterized5( windowId, 1, @@ -2316,7 +2316,7 @@ static bool32 sub_8020368(void) static void sub_80203B0(void) { FillWindowPixelBuffer(3, PIXEL_FILL(1)); - sub_8098858(3, 1, 13); + DrawTextBorderOuter(3, 1, 13); PrintTextArray(3, 2, 8, 1, 14, 5, gUnknown_082F2DC8); sub_81983AC(3, 2, 0, 1, 14, 5, sub_801F0B0()); PutWindowTilemap(3); diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c index 6df826214..4eaf60be4 100644 --- a/src/use_pokeblock.c +++ b/src/use_pokeblock.c @@ -617,7 +617,7 @@ void sub_8166D44(void) StringAppend(stringBuffer, gText_GetsAPokeBlockQuestion); StringCopy(gStringVar4, stringBuffer); FillWindowPixelBuffer(2, 17); - sub_8098858(2, 151, 14); + DrawTextBorderOuter(2, 151, 14); AddTextPrinterParameterized(2, 1, gStringVar4, 0, 1, 0, NULL); PutWindowTilemap(2); CopyWindowToVram(2, 3); @@ -645,7 +645,7 @@ s8 sub_8166DE4(void) void sub_8166E24(void) { - sub_8098858(2, 151, 14); + DrawTextBorderOuter(2, 151, 14); FillWindowPixelBuffer(2, 17); for (gUnknown_0203BC90->field_53 = 0; gUnknown_0203BC90->field_53 < 5; gUnknown_0203BC90->field_53++) @@ -693,7 +693,7 @@ bool8 sub_8166EDC(void) void sub_8166F50(void) { FillWindowPixelBuffer(2, 17); - sub_8098858(2, 151, 14); + DrawTextBorderOuter(2, 151, 14); AddTextPrinterParameterized(2, 1, gText_WontEatAnymore, 0, 1, 0, NULL); PutWindowTilemap(2); CopyWindowToVram(2, 3); -- cgit v1.2.3 From 207a54393c533e073e54365a8069753536fefa3c Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Sun, 31 Mar 2019 20:07:24 -0400 Subject: Fix mistakes and use EVENT_OBJ_GFX_* macros --- src/data/contest_opponents.h | 392 ++++++++++++++++++++--------------------- src/data/contest_text_tables.h | 118 ++++++------- 2 files changed, 255 insertions(+), 255 deletions(-) (limited to 'src') diff --git a/src/data/contest_opponents.h b/src/data/contest_opponents.h index 2ebfd1dfd..ef1fdba9f 100644 --- a/src/data/contest_opponents.h +++ b/src/data/contest_opponents.h @@ -182,9 +182,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_POOCHYENA, .nickname = _("POOCHY"), .trainerName = _("JIMMY"), - .trainerGfxId = 7, + .trainerGfxId = EVENT_OBJ_GFX_BOY_1, .flags = 0xC000FFF, - .whichRank = 0, + .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -211,9 +211,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_ILLUMISE, .nickname = _("MUSILLE"), .trainerName = _("EDITH"), - .trainerGfxId = 8, + .trainerGfxId = EVENT_OBJ_GFX_GIRL_1, .flags = 0x82000FFF, - .whichRank = 0, + .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -240,9 +240,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_DUSTOX, .nickname = _("DUSTER"), .trainerName = _("EVAN"), - .trainerGfxId = 11, + .trainerGfxId = EVENT_OBJ_GFX_LITTLE_BOY, .flags = 0x21000FFF, - .whichRank = 0, + .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, .aiPool_Cute = FALSE, @@ -269,9 +269,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_SEEDOT, .nickname = _("DOTS"), .trainerName = _("KELSEY"), - .trainerGfxId = 16, + .trainerGfxId = EVENT_OBJ_GFX_WOMAN_1, .flags = 0x20800FFF, - .whichRank = 0, + .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -298,9 +298,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_TAILLOW, .nickname = _("TATAY"), .trainerName = _("MADISON"), - .trainerGfxId = 18, + .trainerGfxId = EVENT_OBJ_GFX_POKEFAN_F, .flags = 0x80400FFF, - .whichRank = 0, + .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -327,9 +327,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_NINCADA, .nickname = _("NINDA"), .trainerName = _("RAYMOND"), - .trainerGfxId = 44, + .trainerGfxId = EVENT_OBJ_GFX_BLACK_BELT, .flags = 0x10200FFF, - .whichRank = 0, + .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -356,9 +356,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_SHROOMISH, .nickname = _("SMISH"), .trainerName = _("GRANT"), - .trainerGfxId = 35, + .trainerGfxId = EVENT_OBJ_GFX_YOUNGSTER, .flags = 0x20100FFF, - .whichRank = 0, + .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -385,9 +385,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_SPHEAL, .nickname = _("SLEAL"), .trainerName = _("PAIGE"), - .trainerGfxId = 26, + .trainerGfxId = EVENT_OBJ_GFX_WOMAN_4, .flags = 0x8080FFF, - .whichRank = 0, + .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, .aiPool_Cute = TRUE, @@ -414,9 +414,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_SLAKOTH, .nickname = _("SLOKTH"), .trainerName = _("ALEC"), - .trainerGfxId = 31, + .trainerGfxId = EVENT_OBJ_GFX_CAMPER, .flags = 0x40040FFF, - .whichRank = 0, + .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, .aiPool_Cute = TRUE, @@ -443,9 +443,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_WHISMUR, .nickname = _("WHIRIS"), .trainerName = _("SYDNEY"), - .trainerGfxId = 47, + .trainerGfxId = EVENT_OBJ_GFX_LASS, .flags = 0x80020FFF, - .whichRank = 0, + .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -472,9 +472,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_MAKUHITA, .nickname = _("MAHITA"), .trainerName = _("MORRIS"), - .trainerGfxId = 38, + .trainerGfxId = EVENT_OBJ_GFX_SCHOOL_KID_M, .flags = 0x8010FFF, - .whichRank = 0, + .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -501,9 +501,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_ARON, .nickname = _("RONAR"), .trainerName = _("MARIAH"), - .trainerGfxId = 10, + .trainerGfxId = EVENT_OBJ_GFX_GIRL_2, .flags = 0x8008FFF, - .whichRank = 0, + .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -530,9 +530,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_CROBAT, .nickname = _("BATRO"), .trainerName = _("RUSSELL"), - .trainerGfxId = 33, + .trainerGfxId = EVENT_OBJ_GFX_MAN_3, .flags = 0x90004FFF, - .whichRank = 0, + .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, .aiPool_Cute = TRUE, @@ -559,9 +559,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_GULPIN, .nickname = _("GULIN"), .trainerName = _("MELANIE"), - .trainerGfxId = 6, + .trainerGfxId = EVENT_OBJ_GFX_TWIN, .flags = 0x40002FFF, - .whichRank = 0, + .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -588,9 +588,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_MANECTRIC, .nickname = _("RIKELEC"), .trainerName = _("CHANCE"), - .trainerGfxId = 15, + .trainerGfxId = EVENT_OBJ_GFX_RICH_BOY, .flags = 0x80001FFF, - .whichRank = 0, + .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, .aiPool_Cute = FALSE, @@ -617,9 +617,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_BULBASAUR, .nickname = _("BULBY"), .trainerName = _("AGATHA"), - .trainerGfxId = 20, + .trainerGfxId = EVENT_OBJ_GFX_WOMAN_2, .flags = 0xC000FFF, - .whichRank = 0, + .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -646,9 +646,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_BUTTERFREE, .nickname = _("FUTTERBE"), .trainerName = _("BEAU"), - .trainerGfxId = 40, + .trainerGfxId = EVENT_OBJ_GFX_HEX_MANIAC, .flags = 0x82000FFF, - .whichRank = 0, + .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, .aiPool_Cute = FALSE, @@ -675,9 +675,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_PIDGEOTTO, .nickname = _("PIDEOT"), .trainerName = _("KAY"), - .trainerGfxId = 34, + .trainerGfxId = EVENT_OBJ_GFX_WOMAN_5, .flags = 0x21000FFF, - .whichRank = 0, + .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, .aiPool_Cute = FALSE, @@ -704,9 +704,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_DIGLETT, .nickname = _("DIGLE"), .trainerName = _("CALE"), - .trainerGfxId = 55, + .trainerGfxId = EVENT_OBJ_GFX_HIKER, .flags = 0x20800FFF, - .whichRank = 0, + .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -733,9 +733,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_POLIWAG, .nickname = _("WAGIL"), .trainerName = _("CAITLIN"), - .trainerGfxId = 53, + .trainerGfxId = EVENT_OBJ_GFX_TUBER_F, .flags = 0x80400FFF, - .whichRank = 0, + .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, .aiPool_Cute = FALSE, @@ -762,9 +762,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_TOTODILE, .nickname = _("TOTDIL"), .trainerName = _("COLBY"), - .trainerGfxId = 5, + .trainerGfxId = EVENT_OBJ_GFX_NINJA_BOY, .flags = 0x10200FFF, - .whichRank = 0, + .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, .aiPool_Cute = FALSE, @@ -791,9 +791,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_LEDYBA, .nickname = _("BALEDY"), .trainerName = _("KYLIE"), - .trainerGfxId = 45, + .trainerGfxId = EVENT_OBJ_GFX_BEAUTY, .flags = 0x20100FFF, - .whichRank = 0, + .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -820,9 +820,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_DELIBIRD, .nickname = _("BIRDLY"), .trainerName = _("LIAM"), - .trainerGfxId = 66, + .trainerGfxId = EVENT_OBJ_GFX_MAN_5, .flags = 0x8080FFF, - .whichRank = 0, + .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -849,9 +849,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_LARVITAR, .nickname = _("TARVITAR"), .trainerName = _("MILO"), - .trainerGfxId = 39, + .trainerGfxId = EVENT_OBJ_GFX_MANIAC, .flags = 0x40040FFF, - .whichRank = 0, + .whichRank = CONTEST_RANK_NORMAL, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -878,9 +878,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_ROSELIA, .nickname = _("RELIA"), .trainerName = _("KARINA"), - .trainerGfxId = 32, + .trainerGfxId = EVENT_OBJ_GFX_PICNICKER, .flags = 0x24000FFF, - .whichRank = 1, + .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, .aiPool_Cute = FALSE, @@ -907,9 +907,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_DODRIO, .nickname = _("DUODO"), .trainerName = _("BOBBY"), - .trainerGfxId = 51, + .trainerGfxId = EVENT_OBJ_GFX_RUNNING_TRIATHLETE_M, .flags = 0x82000FFF, - .whichRank = 1, + .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, .aiPool_Cute = TRUE, @@ -936,9 +936,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_TRAPINCH, .nickname = _("PINCHIN"), .trainerName = _("CLAIRE"), - .trainerGfxId = 8, + .trainerGfxId = EVENT_OBJ_GFX_GIRL_1, .flags = 0x81000FFF, - .whichRank = 1, + .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -965,9 +965,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_CACNEA, .nickname = _("NACAC"), .trainerName = _("WILLIE"), - .trainerGfxId = 11, + .trainerGfxId = EVENT_OBJ_GFX_LITTLE_BOY, .flags = 0x80800FFF, - .whichRank = 1, + .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -994,9 +994,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_SANDSLASH, .nickname = _("SHRAND"), .trainerName = _("CASSIDY"), - .trainerGfxId = 18, + .trainerGfxId = EVENT_OBJ_GFX_POKEFAN_F, .flags = 0x10400FFF, - .whichRank = 1, + .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -1023,9 +1023,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_BALTOY, .nickname = _("TOYBAL"), .trainerName = _("MORGAN"), - .trainerGfxId = 44, + .trainerGfxId = EVENT_OBJ_GFX_BLACK_BELT, .flags = 0x8200FFF, - .whichRank = 1, + .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, .aiPool_Cute = FALSE, @@ -1052,9 +1052,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_MEDICHAM, .nickname = _("CHAMCHAM"), .trainerName = _("SUMMER"), - .trainerGfxId = 26, + .trainerGfxId = EVENT_OBJ_GFX_WOMAN_4, .flags = 0x10100FFF, - .whichRank = 1, + .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, .aiPool_Cute = FALSE, @@ -1081,9 +1081,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_SPINDA, .nickname = _("SPININ"), .trainerName = _("MILES"), - .trainerGfxId = 31, + .trainerGfxId = EVENT_OBJ_GFX_CAMPER, .flags = 0x80080FFF, - .whichRank = 1, + .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -1110,9 +1110,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_SWABLU, .nickname = _("SWABY"), .trainerName = _("AUDREY"), - .trainerGfxId = 47, + .trainerGfxId = EVENT_OBJ_GFX_LASS, .flags = 0xA0040FFF, - .whichRank = 1, + .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, .aiPool_Cute = FALSE, @@ -1139,9 +1139,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_SPOINK, .nickname = _("POINKER"), .trainerName = _("AVERY"), - .trainerGfxId = 38, + .trainerGfxId = EVENT_OBJ_GFX_SCHOOL_KID_M, .flags = 0x80020FFF, - .whichRank = 1, + .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -1168,9 +1168,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_KECLEON, .nickname = _("KECON"), .trainerName = _("ARIANA"), - .trainerGfxId = 10, + .trainerGfxId = EVENT_OBJ_GFX_GIRL_2, .flags = 0x80010FFF, - .whichRank = 1, + .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -1197,9 +1197,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_GOLDEEN, .nickname = _("GOLDEN"), .trainerName = _("ASHTON"), - .trainerGfxId = 33, + .trainerGfxId = EVENT_OBJ_GFX_MAN_3, .flags = 0x80008FFF, - .whichRank = 1, + .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, .aiPool_Cute = FALSE, @@ -1226,9 +1226,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_BARBOACH, .nickname = _("BOBOACH"), .trainerName = _("SANDRA"), - .trainerGfxId = 6, + .trainerGfxId = EVENT_OBJ_GFX_TWIN, .flags = 0x80004FFF, - .whichRank = 1, + .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -1255,9 +1255,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_SKARMORY, .nickname = _("CORPY"), .trainerName = _("CARSON"), - .trainerGfxId = 35, + .trainerGfxId = EVENT_OBJ_GFX_YOUNGSTER, .flags = 0x8002FFF, - .whichRank = 1, + .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, .aiPool_Cute = FALSE, @@ -1284,9 +1284,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_LOTAD, .nickname = _("TADO"), .trainerName = _("KATRINA"), - .trainerGfxId = 16, + .trainerGfxId = EVENT_OBJ_GFX_WOMAN_1, .flags = 0x8001FFF, - .whichRank = 1, + .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, .aiPool_Cute = TRUE, @@ -1313,9 +1313,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_SLOWBRO, .nickname = _("BROWLO"), .trainerName = _("LUKE"), - .trainerGfxId = 17, + .trainerGfxId = EVENT_OBJ_GFX_FAT_MAN, .flags = 0xC000FFF, - .whichRank = 1, + .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -1342,9 +1342,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_FARFETCHD, .nickname = _("FETCHIN"), .trainerName = _("RAUL"), - .trainerGfxId = 66, + .trainerGfxId = EVENT_OBJ_GFX_MAN_5, .flags = 0x82000FFF, - .whichRank = 1, + .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -1371,9 +1371,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_SEEL, .nickname = _("SEELEY"), .trainerName = _("JADA"), - .trainerGfxId = 20, + .trainerGfxId = EVENT_OBJ_GFX_WOMAN_2, .flags = 0x21000FFF, - .whichRank = 1, + .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, .aiPool_Cute = TRUE, @@ -1400,9 +1400,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_DROWZEE, .nickname = _("DROWZIN"), .trainerName = _("ZEEK"), - .trainerGfxId = 37, + .trainerGfxId = EVENT_OBJ_GFX_PSYCHIC_M, .flags = 0x20800FFF, - .whichRank = 1, + .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, .aiPool_Cute = TRUE, @@ -1429,9 +1429,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_HITMONCHAN, .nickname = _("HITEMON"), .trainerName = _("DIEGO"), - .trainerGfxId = 21, + .trainerGfxId = EVENT_OBJ_GFX_EXPERT_M, .flags = 0x80400FFF, - .whichRank = 1, + .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -1458,9 +1458,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_BLISSEY, .nickname = _("BLISS"), .trainerName = _("ALIYAH"), - .trainerGfxId = 85, + .trainerGfxId = EVENT_OBJ_GFX_TEALA, .flags = 0x10200FFF, - .whichRank = 1, + .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, .aiPool_Cute = TRUE, @@ -1487,9 +1487,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_ELEKID, .nickname = _("KIDLEK"), .trainerName = _("NATALIA"), - .trainerGfxId = 18, + .trainerGfxId = EVENT_OBJ_GFX_POKEFAN_F, .flags = 0x20100FFF, - .whichRank = 1, + .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -1516,9 +1516,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_SNUBBULL, .nickname = _("SNUBBINS"), .trainerName = _("DEVIN"), - .trainerGfxId = 48, + .trainerGfxId = EVENT_OBJ_GFX_GENTLEMAN, .flags = 0x8080FFF, - .whichRank = 1, + .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -1545,9 +1545,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_MISDREAVUS, .nickname = _("DREAVIS"), .trainerName = _("TYLOR"), - .trainerGfxId = 40, + .trainerGfxId = EVENT_OBJ_GFX_HEX_MANIAC, .flags = 0x40040FFF, - .whichRank = 1, + .whichRank = CONTEST_RANK_SUPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, .aiPool_Cute = FALSE, @@ -1574,9 +1574,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_LAIRON, .nickname = _("LAIRN"), .trainerName = _("RONNIE"), - .trainerGfxId = 55, + .trainerGfxId = EVENT_OBJ_GFX_HIKER, .flags = 0x84000FFF, - .whichRank = 2, + .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -1603,9 +1603,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_SHIFTRY, .nickname = _("SHIFTY"), .trainerName = _("CLAUDIA"), - .trainerGfxId = 8, + .trainerGfxId = EVENT_OBJ_GFX_GIRL_1, .flags = 0x82000FFF, - .whichRank = 2, + .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, .aiPool_Cute = FALSE, @@ -1632,9 +1632,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_NINJASK, .nickname = _("NINAS"), .trainerName = _("ELIAS"), - .trainerGfxId = 11, + .trainerGfxId = EVENT_OBJ_GFX_LITTLE_BOY, .flags = 0x81000FFF, - .whichRank = 2, + .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -1661,9 +1661,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_SWELLOW, .nickname = _("WELOW"), .trainerName = _("JADE"), - .trainerGfxId = 18, + .trainerGfxId = EVENT_OBJ_GFX_POKEFAN_F, .flags = 0x80800FFF, - .whichRank = 2, + .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, .aiPool_Cute = FALSE, @@ -1690,9 +1690,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_MIGHTYENA, .nickname = _("YENA"), .trainerName = _("FRANCIS"), - .trainerGfxId = 44, + .trainerGfxId = EVENT_OBJ_GFX_BLACK_BELT, .flags = 0x80400FFF, - .whichRank = 2, + .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -1719,9 +1719,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_BEAUTIFLY, .nickname = _("TIFLY"), .trainerName = _("ALISHA"), - .trainerGfxId = 26, + .trainerGfxId = EVENT_OBJ_GFX_WOMAN_4, .flags = 0x80200FFF, - .whichRank = 2, + .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, .aiPool_Cute = FALSE, @@ -1748,9 +1748,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_SEAKING, .nickname = _("KINGSEA"), .trainerName = _("SAUL"), - .trainerGfxId = 31, + .trainerGfxId = EVENT_OBJ_GFX_CAMPER, .flags = 0x80100FFF, - .whichRank = 2, + .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -1777,9 +1777,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_CASTFORM, .nickname = _("CASTER"), .trainerName = _("FELICIA"), - .trainerGfxId = 47, + .trainerGfxId = EVENT_OBJ_GFX_LASS, .flags = 0x80080FFF, - .whichRank = 2, + .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, .aiPool_Cute = TRUE, @@ -1806,9 +1806,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_MACHOKE, .nickname = _("CHOKEM"), .trainerName = _("EMILIO"), - .trainerGfxId = 38, + .trainerGfxId = EVENT_OBJ_GFX_SCHOOL_KID_M, .flags = 0x80040FFF, - .whichRank = 2, + .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -1835,9 +1835,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_LOMBRE, .nickname = _("LOMBE"), .trainerName = _("KARLA"), - .trainerGfxId = 10, + .trainerGfxId = EVENT_OBJ_GFX_GIRL_2, .flags = 0x80020FFF, - .whichRank = 2, + .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, .aiPool_Cute = TRUE, @@ -1864,9 +1864,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_SEVIPER, .nickname = _("VIPES"), .trainerName = _("DARRYL"), - .trainerGfxId = 33, + .trainerGfxId = EVENT_OBJ_GFX_MAN_3, .flags = 0x80010FFF, - .whichRank = 2, + .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -1893,9 +1893,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_WAILMER, .nickname = _("MERAIL"), .trainerName = _("SELENA"), - .trainerGfxId = 22, + .trainerGfxId = EVENT_OBJ_GFX_EXPERT_F, .flags = 0x80008FFF, - .whichRank = 2, + .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, .aiPool_Cute = TRUE, @@ -1922,9 +1922,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_MAGIKARP, .nickname = _("KARPAG"), .trainerName = _("NOEL"), - .trainerGfxId = 35, + .trainerGfxId = EVENT_OBJ_GFX_YOUNGSTER, .flags = 0x80004FFF, - .whichRank = 2, + .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -1951,9 +1951,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_LUNATONE, .nickname = _("LUNONE"), .trainerName = _("LACEY"), - .trainerGfxId = 16, + .trainerGfxId = EVENT_OBJ_GFX_WOMAN_1, .flags = 0x80002FFF, - .whichRank = 2, + .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, .aiPool_Cute = FALSE, @@ -1980,9 +1980,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_ABSOL, .nickname = _("ABSO"), .trainerName = _("CORBIN"), - .trainerGfxId = 39, + .trainerGfxId = EVENT_OBJ_GFX_MANIAC, .flags = 0x80001FFF, - .whichRank = 2, + .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, .aiPool_Cute = FALSE, @@ -2009,9 +2009,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_EXEGGUTOR, .nickname = _("EGGSOR"), .trainerName = _("GRACIE"), - .trainerGfxId = 32, + .trainerGfxId = EVENT_OBJ_GFX_PICNICKER, .flags = 0xC000FFF, - .whichRank = 2, + .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -2038,9 +2038,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_CUBONE, .nickname = _("CUBIN"), .trainerName = _("COLTIN"), - .trainerGfxId = 65, + .trainerGfxId = EVENT_OBJ_GFX_MAN_4, .flags = 0x82000FFF, - .whichRank = 2, + .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -2067,9 +2067,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_HITMONLEE, .nickname = _("HITMON"), .trainerName = _("ELLIE"), - .trainerGfxId = 22, + .trainerGfxId = EVENT_OBJ_GFX_EXPERT_F, .flags = 0x21000FFF, - .whichRank = 2, + .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -2096,9 +2096,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_SQUIRTLE, .nickname = _("SURTLE"), .trainerName = _("MARCUS"), - .trainerGfxId = 49, + .trainerGfxId = EVENT_OBJ_GFX_SAILOR, .flags = 0x20800FFF, - .whichRank = 2, + .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -2125,9 +2125,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_KANGASKHAN, .nickname = _("KHANKAN"), .trainerName = _("KIARA"), - .trainerGfxId = 14, + .trainerGfxId = EVENT_OBJ_GFX_GIRL_3, .flags = 0x80400FFF, - .whichRank = 2, + .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -2154,9 +2154,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_PINECO, .nickname = _("PINOC"), .trainerName = _("BRYCE"), - .trainerGfxId = 36, + .trainerGfxId = EVENT_OBJ_GFX_BUG_CATCHER, .flags = 0x10200FFF, - .whichRank = 2, + .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, .aiPool_Cute = FALSE, @@ -2183,9 +2183,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_DUNSPARCE, .nickname = _("DILTOT"), .trainerName = _("JAMIE"), - .trainerGfxId = 34, + .trainerGfxId = EVENT_OBJ_GFX_WOMAN_5, .flags = 0x20100FFF, - .whichRank = 2, + .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -2212,9 +2212,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_HOUNDOOM, .nickname = _("DOOMOND"), .trainerName = _("JORGE"), - .trainerGfxId = 48, + .trainerGfxId = EVENT_OBJ_GFX_GENTLEMAN, .flags = 0x8080FFF, - .whichRank = 2, + .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, .aiPool_Cute = FALSE, @@ -2241,9 +2241,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_MILTANK, .nickname = _("MILKAN"), .trainerName = _("DEVON"), - .trainerGfxId = 25, + .trainerGfxId = EVENT_OBJ_GFX_POKEFAN_M, .flags = 0x40040FFF, - .whichRank = 2, + .whichRank = CONTEST_RANK_HYPER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, .aiPool_Cute = TRUE, @@ -2270,9 +2270,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_GYARADOS, .nickname = _("RADOS"), .trainerName = _("JUSTINA"), - .trainerGfxId = 32, + .trainerGfxId = EVENT_OBJ_GFX_PICNICKER, .flags = 0x84000FFF, - .whichRank = 3, + .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, .aiPool_Cute = FALSE, @@ -2299,9 +2299,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_LOUDRED, .nickname = _("LOUDERD"), .trainerName = _("RALPH"), - .trainerGfxId = 21, + .trainerGfxId = EVENT_OBJ_GFX_EXPERT_M, .flags = 0x82000FFF, - .whichRank = 3, + .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -2328,9 +2328,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_SKITTY, .nickname = _("SITTY"), .trainerName = _("ROSA"), - .trainerGfxId = 8, + .trainerGfxId = EVENT_OBJ_GFX_GIRL_1, .flags = 0x81000FFF, - .whichRank = 3, + .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, .aiPool_Cute = TRUE, @@ -2357,9 +2357,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_SLAKING, .nickname = _("SLING"), .trainerName = _("KEATON"), - .trainerGfxId = 11, + .trainerGfxId = EVENT_OBJ_GFX_LITTLE_BOY, .flags = 0x80800FFF, - .whichRank = 3, + .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -2386,9 +2386,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_ALTARIA, .nickname = _("TARIA"), .trainerName = _("MAYRA"), - .trainerGfxId = 18, + .trainerGfxId = EVENT_OBJ_GFX_POKEFAN_F, .flags = 0x80400FFF, - .whichRank = 3, + .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, .aiPool_Cute = FALSE, @@ -2415,9 +2415,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_KIRLIA, .nickname = _("LIRKI"), .trainerName = _("LAMAR"), - .trainerGfxId = 15, + .trainerGfxId = EVENT_OBJ_GFX_RICH_BOY, .flags = 0x80200FFF, - .whichRank = 3, + .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -2444,9 +2444,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_BELLOSSOM, .nickname = _("BLOSSOM"), .trainerName = _("AUBREY"), - .trainerGfxId = 26, + .trainerGfxId = EVENT_OBJ_GFX_WOMAN_4, .flags = 0x80100FFF, - .whichRank = 3, + .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, .aiPool_Cute = TRUE, @@ -2473,9 +2473,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_SABLEYE, .nickname = _("EYESAB"), .trainerName = _("NIGEL"), - .trainerGfxId = 31, + .trainerGfxId = EVENT_OBJ_GFX_CAMPER, .flags = 0x80080FFF, - .whichRank = 3, + .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -2502,9 +2502,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_NATU, .nickname = _("UTAN"), .trainerName = _("CAMILLE"), - .trainerGfxId = 47, + .trainerGfxId = EVENT_OBJ_GFX_LASS, .flags = 0x80040FFF, - .whichRank = 3, + .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -2531,9 +2531,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_SHARPEDO, .nickname = _("PEDOS"), .trainerName = _("DEON"), - .trainerGfxId = 38, + .trainerGfxId = EVENT_OBJ_GFX_SCHOOL_KID_M, .flags = 0x80020FFF, - .whichRank = 3, + .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -2560,9 +2560,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_LUVDISC, .nickname = _("LUVIS"), .trainerName = _("JANELLE"), - .trainerGfxId = 10, + .trainerGfxId = EVENT_OBJ_GFX_GIRL_2, .flags = 0x80010FFF, - .whichRank = 3, + .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -2589,9 +2589,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_HERACROSS, .nickname = _("HEROSS"), .trainerName = _("HEATH"), - .trainerGfxId = 33, + .trainerGfxId = EVENT_OBJ_GFX_MAN_3, .flags = 0x80008FFF, - .whichRank = 3, + .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -2618,9 +2618,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_ELECTRODE, .nickname = _("RODLECT"), .trainerName = _("SASHA"), - .trainerGfxId = 6, + .trainerGfxId = EVENT_OBJ_GFX_TWIN, .flags = 0x80004FFF, - .whichRank = 3, + .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, .aiPool_Cute = FALSE, @@ -2647,9 +2647,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_PICHU, .nickname = _("CHUPY"), .trainerName = _("FRANKIE"), - .trainerGfxId = 35, + .trainerGfxId = EVENT_OBJ_GFX_YOUNGSTER, .flags = 0x80002FFF, - .whichRank = 3, + .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, .aiPool_Cute = TRUE, @@ -2676,9 +2676,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_WOBBUFFET, .nickname = _("WOBET"), .trainerName = _("HELEN"), - .trainerGfxId = 16, + .trainerGfxId = EVENT_OBJ_GFX_WOMAN_1, .flags = 0x80001FFF, - .whichRank = 3, + .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, .aiPool_Cute = FALSE, @@ -2705,9 +2705,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_GENGAR, .nickname = _("GAREN"), .trainerName = _("CAMILE"), - .trainerGfxId = 40, + .trainerGfxId = EVENT_OBJ_GFX_HEX_MANIAC, .flags = 0xC000FFF, - .whichRank = 3, + .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -2734,9 +2734,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_PORYGON, .nickname = _("GONPOR"), .trainerName = _("MARTIN"), - .trainerGfxId = 46, + .trainerGfxId = EVENT_OBJ_GFX_SCIENTIST_1, .flags = 0x82000FFF, - .whichRank = 3, + .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, .aiPool_Cute = TRUE, @@ -2763,9 +2763,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_DRAGONITE, .nickname = _("DRITE"), .trainerName = _("SERGIO"), - .trainerGfxId = 7, + .trainerGfxId = EVENT_OBJ_GFX_BOY_1, .flags = 0x21000FFF, - .whichRank = 3, + .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -2792,9 +2792,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_MEOWTH, .nickname = _("MEOWY"), .trainerName = _("KAILEY"), - .trainerGfxId = 6, + .trainerGfxId = EVENT_OBJ_GFX_TWIN, .flags = 0x20800FFF, - .whichRank = 3, + .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -2821,9 +2821,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_JYNX, .nickname = _("NYX"), .trainerName = _("PERLA"), - .trainerGfxId = 45, + .trainerGfxId = EVENT_OBJ_GFX_BEAUTY, .flags = 0x80400FFF, - .whichRank = 3, + .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = FALSE, .aiPool_Beauty = TRUE, .aiPool_Cute = FALSE, @@ -2850,9 +2850,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_TOGEPI, .nickname = _("GEPITO"), .trainerName = _("CLARA"), - .trainerGfxId = 20, + .trainerGfxId = EVENT_OBJ_GFX_WOMAN_2, .flags = 0x10200FFF, - .whichRank = 3, + .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -2879,9 +2879,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_ESPEON, .nickname = _("SPEON"), .trainerName = _("JAKOB"), - .trainerGfxId = 37, + .trainerGfxId = EVENT_OBJ_GFX_PSYCHIC_M, .flags = 0x20100FFF, - .whichRank = 3, + .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = TRUE, .aiPool_Cute = FALSE, @@ -2908,9 +2908,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_SLOWKING, .nickname = _("SLOWGO"), .trainerName = _("TREY"), - .trainerGfxId = 49, + .trainerGfxId = EVENT_OBJ_GFX_SAILOR, .flags = 0x8080FFF, - .whichRank = 3, + .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = FALSE, .aiPool_Beauty = FALSE, .aiPool_Cute = TRUE, @@ -2937,9 +2937,9 @@ const struct ContestPokemon gContestOpponents[] = .species = SPECIES_URSARING, .nickname = _("URSING"), .trainerName = _("LANE"), - .trainerGfxId = 44, + .trainerGfxId = EVENT_OBJ_GFX_BLACK_BELT, .flags = 0x40040FFF, - .whichRank = 3, + .whichRank = CONTEST_RANK_MASTER, .aiPool_Cool = TRUE, .aiPool_Beauty = FALSE, .aiPool_Cute = FALSE, @@ -2967,7 +2967,7 @@ const struct ContestPokemon gContestOpponents[] = const u8 gPostgameContestOpponentFilter[] = { - [CONTEST_OPPONENT_JIMMY] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_JIMMY] = CONTEST_FILTER_NONE, [CONTEST_OPPONENT_EDITH] = CONTEST_FILTER_NONE, [CONTEST_OPPONENT_EVAN] = CONTEST_FILTER_NONE, [CONTEST_OPPONENT_KELSEY] = CONTEST_FILTER_NONE, @@ -2999,7 +2999,7 @@ const u8 gPostgameContestOpponentFilter[] = [CONTEST_OPPONENT_MORGAN] = CONTEST_FILTER_NONE, [CONTEST_OPPONENT_SUMMER] = CONTEST_FILTER_NONE, [CONTEST_OPPONENT_MILES] = CONTEST_FILTER_NONE, - [CONTEST_OPPONENT_AUDREY] = CONTEST_FILTER_NONE, + [CONTEST_OPPONENT_AUDREY] = CONTEST_FILTER_NONE, [CONTEST_OPPONENT_AVERY] = CONTEST_FILTER_NONE, [CONTEST_OPPONENT_ARIANA] = CONTEST_FILTER_NONE, [CONTEST_OPPONENT_ASHTON] = CONTEST_FILTER_NONE, @@ -3031,7 +3031,7 @@ const u8 gPostgameContestOpponentFilter[] = [CONTEST_OPPONENT_LACEY] = CONTEST_FILTER_NONE, [CONTEST_OPPONENT_CORBIN] = CONTEST_FILTER_NONE, [CONTEST_OPPONENT_GRACIE] = CONTEST_FILTER_ONLY_POSTGAME, - [CONTEST_OPPONENT_COLTIN] = CONTEST_FILTER_ONLY_POSTGAME, + [CONTEST_OPPONENT_COLTIN] = CONTEST_FILTER_ONLY_POSTGAME, [CONTEST_OPPONENT_ELLIE] = CONTEST_FILTER_ONLY_POSTGAME, [CONTEST_OPPONENT_MARCUS] = CONTEST_FILTER_ONLY_POSTGAME, [CONTEST_OPPONENT_KIARA] = CONTEST_FILTER_ONLY_POSTGAME, @@ -3063,4 +3063,4 @@ const u8 gPostgameContestOpponentFilter[] = [CONTEST_OPPONENT_JAKOB] = CONTEST_FILTER_ONLY_POSTGAME, [CONTEST_OPPONENT_TREY] = CONTEST_FILTER_ONLY_POSTGAME, [CONTEST_OPPONENT_LANE] = CONTEST_FILTER_ONLY_POSTGAME -}; \ No newline at end of file +}; diff --git a/src/data/contest_text_tables.h b/src/data/contest_text_tables.h index fa32f33b5..8375520d1 100644 --- a/src/data/contest_text_tables.h +++ b/src/data/contest_text_tables.h @@ -196,53 +196,53 @@ extern const u8 gText_0827E8CA[]; const u8 *const gContestEffectDescriptionPointers[] = { gContestEffect00hDescription, - gContestEffect01hDescription, + gContestEffect01hDescription, gContestEffect02hDescription, - gContestEffect03hDescription, - gContestEffect04hDescription, - gContestEffect05hDescription, - gContestEffect06hDescription, - gContestEffect07hDescription, - gContestEffect08hDescription, - gContestEffect09hDescription, - gContestEffect0AhDescription, - gContestEffect0BhDescription, - gContestEffect0ChDescription, - gContestEffect0DhDescription, - gContestEffect0EhDescription, - gContestEffect0FhDescription, - gContestEffect10hDescription, - gContestEffect11hDescription, - gContestEffect12hDescription, - gContestEffect13hDescription, - gContestEffect14hDescription, - gContestEffect15hDescription, - gContestEffect16hDescription, - gContestEffect17hDescription, - gContestEffect18hDescription, - gContestEffect19hDescription, - gContestEffect1AhDescription, - gContestEffect1BhDescription, - gContestEffect1ChDescription, - gContestEffect1DhDescription, - gContestEffect1EhDescription, - gContestEffect1FhDescription, - gContestEffect20hDescription, - gContestEffect21hDescription, - gContestEffect22hDescription, - gContestEffect23hDescription, - gContestEffect24hDescription, - gContestEffect25hDescription, - gContestEffect26hDescription, - gContestEffect27hDescription, - gContestEffect28hDescription, - gContestEffect29hDescription, - gContestEffect2AhDescription, - gContestEffect2BhDescription, - gContestEffect2ChDescription, - gContestEffect2DhDescription, - gContestEffect2EhDescription, - gContestEffect2FhDescription + gContestEffect03hDescription, + gContestEffect04hDescription, + gContestEffect05hDescription, + gContestEffect06hDescription, + gContestEffect07hDescription, + gContestEffect08hDescription, + gContestEffect09hDescription, + gContestEffect0AhDescription, + gContestEffect0BhDescription, + gContestEffect0ChDescription, + gContestEffect0DhDescription, + gContestEffect0EhDescription, + gContestEffect0FhDescription, + gContestEffect10hDescription, + gContestEffect11hDescription, + gContestEffect12hDescription, + gContestEffect13hDescription, + gContestEffect14hDescription, + gContestEffect15hDescription, + gContestEffect16hDescription, + gContestEffect17hDescription, + gContestEffect18hDescription, + gContestEffect19hDescription, + gContestEffect1AhDescription, + gContestEffect1BhDescription, + gContestEffect1ChDescription, + gContestEffect1DhDescription, + gContestEffect1EhDescription, + gContestEffect1FhDescription, + gContestEffect20hDescription, + gContestEffect21hDescription, + gContestEffect22hDescription, + gContestEffect23hDescription, + gContestEffect24hDescription, + gContestEffect25hDescription, + gContestEffect26hDescription, + gContestEffect27hDescription, + gContestEffect28hDescription, + gContestEffect29hDescription, + gContestEffect2AhDescription, + gContestEffect2BhDescription, + gContestEffect2ChDescription, + gContestEffect2DhDescription, + gContestEffect2EhDescription, + gContestEffect2FhDescription }; // Unreferenced array of pointers to move names. @@ -278,18 +278,18 @@ const u8 *const gContestMoveTypeTextPointers[] = const u8 *const gUnknown_08587D5C[] = { gText_0827D5C1, - gText_0827D5DC, - gText_0827D600, - gText_0827D612, - gText_0827D612, - gText_0827D62D, - gText_0827D654, - gText_0827D67E, - gText_0827D69C, - gText_0827D6BA, - gText_0827D6E5, - gText_0827D706, - gText_0827D71D + gText_0827D5DC, + gText_0827D600, + gText_0827D612, + gText_0827D612, + gText_0827D62D, + gText_0827D654, + gText_0827D67E, + gText_0827D69C, + gText_0827D6BA, + gText_0827D6E5, + gText_0827D706, + gText_0827D71D }; const u8 *const gUnknown_08587D90[] = @@ -411,4 +411,4 @@ const u8 *const gUnknown_08587F1C[] = gText_0827E8B4, gText_0827E8BF, gText_0827E8CA -}; \ No newline at end of file +}; -- cgit v1.2.3 From 23ac2cc94e2914a427e97467103c0160af6f1be0 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Sun, 31 Mar 2019 20:15:44 -0400 Subject: Prep for merge --- src/contest.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/contest.c b/src/contest.c index da3075e65..53d7e547d 100644 --- a/src/contest.c +++ b/src/contest.c @@ -412,14 +412,16 @@ const struct Subsprite gSubspriteTable_8587B78[] = { .x = -28, .y = -4, - SPRITE_SIZE_32x8, + .shape = ST_OAM_H_RECTANGLE, + .size = 1, .tileOffset = 0, .priority = 0 }, { .x = 4, .y = -4, - SPRITE_SIZE_32x8, + .shape = ST_OAM_H_RECTANGLE, + .size = 1, .tileOffset = 4, .priority = 0 } -- cgit v1.2.3 From b7057e8d923e78c6d29ab122b3e136ca93fdd7b4 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Sun, 31 Mar 2019 20:33:25 -0400 Subject: Update OAMs to use new constants --- src/contest.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/contest.c b/src/contest.c index 53d7e547d..0591668ff 100644 --- a/src/contest.c +++ b/src/contest.c @@ -272,10 +272,10 @@ static const struct OamData gOamData_8587A7C = .objMode = 0, .mosaic = 0, .bpp = 0, - .shape = 0, + .shape = SPRITE_SHAPE(8x8), .x = 0, .matrixNum = 0, - .size = 0, + .size = SPRITE_SIZE(8x8), .tileNum = 0, .priority = 0, .paletteNum = 0, @@ -357,10 +357,10 @@ static const struct OamData gOamData_8587B10 = .objMode = 0, .mosaic = 0, .bpp = 0, - .shape = 1, + .shape = SPRITE_SHAPE(32x8), .x = 0, .matrixNum = 0, - .size = 1, + .size = SPRITE_SIZE(32x8), .tileNum = 0, .priority = 0, .paletteNum = 0, @@ -449,10 +449,10 @@ const struct OamData gOamData_8587B90 = .objMode = 0, .mosaic = 0, .bpp = 0, - .shape = 0, + .shape = SPRITE_SHAPE(16x16), .x = 0, .matrixNum = 0, - .size = 1, + .size = SPRITE_SIZE(16x16), .tileNum = 0, .priority = 0, .paletteNum = 0, @@ -490,10 +490,10 @@ const struct OamData gOamData_8587BC0 = .objMode = 0, .mosaic = 0, .bpp = 0, - .shape = 1, + .shape = SPRITE_SHAPE(64x32), .x = 0, .matrixNum = 0, - .size = 3, + .size = SPRITE_SIZE(64x32), .tileNum = 0, .priority = 0, .paletteNum = 0, @@ -518,10 +518,10 @@ const struct OamData gOamData_8587BE0 = .objMode = 0, .mosaic = 0, .bpp = 0, - .shape = 0, + .shape = SPRITE_SHAPE(64x64), .x = 0, .matrixNum = 0, - .size = 3, + .size = SPRITE_SIZE(64x64), .tileNum = 0, .priority = 3, .paletteNum = 2, @@ -772,10 +772,10 @@ const struct OamData gOamData_8589944 = .objMode = 1, .mosaic = 0, .bpp = 0, - .shape = 0, + .shape = SPRITE_SHAPE(64x64), .x = 0, .matrixNum = 0, - .size = 3, + .size = SPRITE_SIZE(64x64), .tileNum = 0, .priority = 0, .paletteNum = 0, -- cgit v1.2.3 From 3181c64c64afa47b3adc04f325ad3798c8c324ec Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Sun, 31 Mar 2019 20:40:14 -0400 Subject: Change names from MAP_AREA_ to MAP_GROUP_ --- src/pokedex_area_screen.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/pokedex_area_screen.c b/src/pokedex_area_screen.c index d43c556c8..7404e9d5a 100755 --- a/src/pokedex_area_screen.c +++ b/src/pokedex_area_screen.c @@ -341,11 +341,11 @@ static void FindMapsWithMon(u16 species) { switch (sFeebasData[i][1]) { - case MAP_AREA_OVERWORLD_MONS: + case MAP_GROUP_OVERWORLD_MONS: SetAreaHasMon(sFeebasData[i][1], sFeebasData[i][2]); break; - case MAP_AREA_SPECIAL_MONS_1: - case MAP_AREA_SPECIAL_MONS_2: + case MAP_GROUP_SPECIAL_MONS_1: + case MAP_GROUP_SPECIAL_MONS_2: SetSpecialMapHasMon(sFeebasData[i][1], sFeebasData[i][2]); break; } @@ -358,11 +358,11 @@ static void FindMapsWithMon(u16 species) { switch (gWildMonHeaders[i].mapGroup) { - case MAP_AREA_OVERWORLD_MONS: + case MAP_GROUP_OVERWORLD_MONS: SetAreaHasMon(gWildMonHeaders[i].mapGroup, gWildMonHeaders[i].mapNum); break; - case MAP_AREA_SPECIAL_MONS_1: - case MAP_AREA_SPECIAL_MONS_2: + case MAP_GROUP_SPECIAL_MONS_1: + case MAP_GROUP_SPECIAL_MONS_2: SetSpecialMapHasMon(gWildMonHeaders[i].mapGroup, gWildMonHeaders[i].mapNum); break; } -- cgit v1.2.3 From 099ea89b77fdde1a6b31c7ef3e1975e57a175dd9 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 31 Mar 2019 21:07:29 -0500 Subject: Document rain weather effect --- src/braille_puzzles.c | 72 ++--- src/field_weather.c | 5 +- src/field_weather_effect.c | 721 ++++++++++++++++++++++++--------------------- 3 files changed, 416 insertions(+), 382 deletions(-) (limited to 'src') diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c index 07b941f11..659f8682e 100644 --- a/src/braille_puzzles.c +++ b/src/braille_puzzles.c @@ -25,42 +25,42 @@ EWRAM_DATA static u8 sBraillePuzzleCallbackFlag = 0; static const u8 gRegicePathCoords[][2] = { - {0x04, 0x15}, - {0x05, 0x15}, - {0x06, 0x15}, - {0x07, 0x15}, - {0x08, 0x15}, - {0x09, 0x15}, - {0x0a, 0x15}, - {0x0b, 0x15}, - {0x0c, 0x15}, - {0x0c, 0x16}, - {0x0c, 0x17}, - {0x0d, 0x17}, - {0x0d, 0x18}, - {0x0d, 0x19}, - {0x0d, 0x1a}, - {0x0d, 0x1b}, - {0x0c, 0x1b}, - {0x0c, 0x1c}, - {0x04, 0x1d}, - {0x05, 0x1d}, - {0x06, 0x1d}, - {0x07, 0x1d}, - {0x08, 0x1d}, - {0x09, 0x1d}, - {0x0a, 0x1d}, - {0x0b, 0x1d}, - {0x0c, 0x1d}, - {0x04, 0x1c}, - {0x04, 0x1b}, - {0x03, 0x1b}, - {0x03, 0x1a}, - {0x03, 0x19}, - {0x03, 0x18}, - {0x03, 0x17}, - {0x04, 0x17}, - {0x04, 0x16}, + {4, 21}, + {5, 21}, + {6, 21}, + {7, 21}, + {8, 21}, + {9, 21}, + {10, 21}, + {11, 21}, + {12, 21}, + {12, 22}, + {12, 23}, + {13, 23}, + {13, 24}, + {13, 25}, + {13, 26}, + {13, 27}, + {12, 27}, + {12, 28}, + {4, 29}, + {5, 29}, + {6, 29}, + {7, 29}, + {8, 29}, + {9, 29}, + {10, 29}, + {11, 29}, + {12, 29}, + {4, 28}, + {4, 27}, + {3, 27}, + {3, 26}, + {3, 25}, + {3, 24}, + {3, 23}, + {4, 23}, + {4, 22}, }; void SealedChamberShakingEffect(u8); diff --git a/src/field_weather.c b/src/field_weather.c index 9913e9a61..a2c40052b 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -167,7 +167,7 @@ void StartWeather(void) gWeatherPtr->altGammaSpritePalIndex = index; gWeatherPtr->weatherPicSpritePalIndex = AllocSpritePalette(0x1201); gWeatherPtr->rainSpriteCount = 0; - gWeatherPtr->unknown_6D8 = 0; + gWeatherPtr->curRainSpriteIndex = 0; gWeatherPtr->cloudSpritesCreated = 0; gWeatherPtr->snowflakeSpriteCount = 0; gWeatherPtr->ashSpritesCreated = 0; @@ -234,7 +234,8 @@ static void Task_WeatherMain(u8 taskId) { if (gWeatherPtr->currWeather != gWeatherPtr->nextWeather) { - if (!sWeatherFuncs[gWeatherPtr->currWeather].finish() && gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_SCREEN_FADING_OUT) + if (!sWeatherFuncs[gWeatherPtr->currWeather].finish() + && gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_SCREEN_FADING_OUT) { // Finished cleaning up previous weather. Now transition to next weather. sWeatherFuncs[gWeatherPtr->nextWeather].initVars(); diff --git a/src/field_weather_effect.c b/src/field_weather_effect.c index 6ec83f1a0..95f80d061 100644 --- a/src/field_weather_effect.c +++ b/src/field_weather_effect.c @@ -12,9 +12,6 @@ #include "trig.h" #include "gpu_regs.h" -// This file's functions. -void sub_80AC6B4(struct Sprite *); - // EWRAM EWRAM_DATA static u8 gCurrentAlternatingWeather = 0; EWRAM_DATA static u16 gUnusedWeatherRelated = 0; @@ -32,6 +29,12 @@ const u8 gWeatherAshTiles[] = INCBIN_U8("graphics/weather/ash.4bpp"); const u8 gWeatherRainTiles[] = INCBIN_U8("graphics/weather/rain.4bpp"); const u8 gWeatherSandstormTiles[] = INCBIN_U8("graphics/weather/sandstorm.4bpp"); +//------------------------------------------------------------------------------ +// Clouds +//------------------------------------------------------------------------------ + +static void sub_80AC6B4(struct Sprite *); + static const struct Coords16 gUnknown_0854FB50[] = { { 0, 66}, @@ -39,7 +42,12 @@ static const struct Coords16 gUnknown_0854FB50[] = {10, 78}, }; -static const struct SpriteSheet sCloudSpriteSheet = {gWeatherCloudTiles, sizeof(gWeatherCloudTiles), 0x1200}; +static const struct SpriteSheet sCloudSpriteSheet = +{ + .data = gWeatherCloudTiles, + .size = sizeof(gWeatherCloudTiles), + .tag = 0x1200 +}; static const struct OamData gOamData_839A9DC = { @@ -80,10 +88,6 @@ static const struct SpriteTemplate sCloudSpriteTemplate = .callback = sub_80AC6B4, }; -//------------------------------------------------------------------------------ -// Clouds -//------------------------------------------------------------------------------ - void Clouds_InitVars(void) { gWeatherPtr->gammaTargetIndex = 0; @@ -214,7 +218,7 @@ void sub_807E0A0(void) gWeatherPtr->cloudSpritesCreated = FALSE; } -void sub_80AC6B4(struct Sprite *sprite) +static void sub_80AC6B4(struct Sprite *sprite) { sprite->data[0] = (sprite->data[0] + 1) & 1; if (sprite->data[0] != 0) @@ -350,14 +354,128 @@ void task50_0807B6D4(u8 taskId) // Light Rain //------------------------------------------------------------------------------ +static void LoadRainSpriteSheet(void); +static bool8 CreateRainSprite(void); +static void UpdateRainSprite(struct Sprite *sprite); +static bool8 UpdateVisibleRainSprites(void); +static void DestroyRainSprites(void); + +static const struct Coords16 sRainSpriteCoords[] = +{ + { 0, 0}, + { 0, 160}, + { 0, 64}, + {144, 224}, + {144, 128}, + { 32, 32}, + { 32, 192}, + { 32, 96}, + { 72, 128}, + { 72, 32}, + { 72, 192}, + {216, 96}, + {216, 0}, + {104, 160}, + {104, 64}, + {104, 224}, + {144, 0}, + {144, 160}, + {144, 64}, + { 32, 224}, + { 32, 128}, + { 72, 32}, + { 72, 192}, + { 48, 96}, +}; + +static const struct OamData sRainSpriteOamData = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(16x32), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(16x32), + .tileNum = 0, + .priority = 1, + .paletteNum = 2, + .affineParam = 0, +}; + +static const union AnimCmd sRainSpriteFallAnimCmd[] = +{ + ANIMCMD_FRAME(0, 16), + ANIMCMD_JUMP(0), +}; + +static const union AnimCmd sRainSpriteSplashAnimCmd[] = +{ + ANIMCMD_FRAME(8, 3), + ANIMCMD_FRAME(32, 2), + ANIMCMD_FRAME(40, 2), + ANIMCMD_END, +}; + +static const union AnimCmd sRainSpriteHeavySplashAnimCmd[] = +{ + ANIMCMD_FRAME(8, 3), + ANIMCMD_FRAME(16, 3), + ANIMCMD_FRAME(24, 4), + ANIMCMD_END, +}; + +static const union AnimCmd *const sRainSpriteAnimCmds[] = +{ + sRainSpriteFallAnimCmd, + sRainSpriteSplashAnimCmd, + sRainSpriteHeavySplashAnimCmd, +}; + +static const struct SpriteTemplate sRainSpriteTemplate = +{ + .tileTag = 4614, + .paletteTag = 4608, + .oam = &sRainSpriteOamData, + .anims = sRainSpriteAnimCmds, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = UpdateRainSprite, +}; + +// Q28.4 fixed-point format values +static const s16 sRainSpriteMovement[][2] = +{ + {-0x68, 0xD0}, + {-0xA0, 0x140}, +}; + +// First byte is the number of frames a raindrop falls before it splashes. +// Second byte is the maximum number of frames a raindrop can "wait" before +// it appears and starts falling. (This is only for the initial raindrop spawn.) +static const u16 sRainSpriteFallingDurations[][2] = +{ + {18, 7}, + {12, 10}, +}; + +static const struct SpriteSheet sRainSpriteSheet = +{ + .data = gWeatherRainTiles, + .size = sizeof(gWeatherRainTiles), + .tag = 0x1206, +}; + void LightRain_InitVars(void) { gWeatherPtr->initStep = 0; gWeatherPtr->weatherGfxLoaded = FALSE; - gWeatherPtr->unknown_6D6 = 0; - gWeatherPtr->unknown_6DB = 8; - gWeatherPtr->unknown_6DC = 0; - gWeatherPtr->unknown_6D9 = 10; + gWeatherPtr->rainSpriteVisibleCounter = 0; + gWeatherPtr->rainSpriteVisibleDelay = 8; + gWeatherPtr->isHeavyRain = 0; + gWeatherPtr->maxRainSprites = 10; gWeatherPtr->gammaTargetIndex = 3; gWeatherPtr->gammaStepDelay = 20; SetRainStrengthFromSoundEffect(SE_T_KOAME); @@ -366,14 +484,10 @@ void LightRain_InitVars(void) void LightRain_InitAll(void) { LightRain_InitVars(); - while (gWeatherPtr->weatherGfxLoaded == FALSE) + while (!gWeatherPtr->weatherGfxLoaded) LightRain_Main(); } -void LoadRainSpriteSheet(void); -u8 CreateRainSprite(void); -u8 sub_807E8E8(void); - void LightRain_Main(void) { switch (gWeatherPtr->initStep) @@ -383,11 +497,11 @@ void LightRain_Main(void) gWeatherPtr->initStep++; break; case 1: - if (CreateRainSprite() == 0) + if (!CreateRainSprite()) gWeatherPtr->initStep++; break; case 2: - if (sub_807E8E8() == FALSE) + if (!UpdateVisibleRainSprites()) { gWeatherPtr->weatherGfxLoaded = TRUE; gWeatherPtr->initStep++; @@ -396,8 +510,6 @@ void LightRain_Main(void) } } -void DestroyRainSprites(void); - bool8 LightRain_Finish(void) { switch (gWeatherPtr->finishStep) @@ -412,12 +524,12 @@ bool8 LightRain_Finish(void) } else { - gWeatherPtr->unknown_6D9 = 0; + gWeatherPtr->maxRainSprites = 0; gWeatherPtr->finishStep++; } // fall through case 1: - if (sub_807E8E8() == FALSE) + if (!UpdateVisibleRainSprites()) { DestroyRainSprites(); gWeatherPtr->finishStep++; @@ -428,66 +540,74 @@ bool8 LightRain_Finish(void) return FALSE; } -// defined below -extern const s16 gUnknown_0839AABC[][2]; -extern const u16 gUnknown_0839AAC4[][2]; +#define tCounter data[0] +#define tRandom data[1] +#define tPosX data[2] +#define tPosY data[3] +#define tState data[4] +#define tActive data[5] +#define tWaiting data[6] -void sub_807E4EC(struct Sprite *sprite) +static void StartRainSpriteFall(struct Sprite *sprite) { - u32 randVal; - u16 r6; - s32 r4; - s32 r0; + u32 rand; + u16 numFallingFrames; + int tileX; + int tileY; - if (sprite->data[1] == 0) - sprite->data[1] = 361; - randVal = sprite->data[1] * 1103515245 + 12345; - sprite->data[1] = ((randVal & 0x7FFF0000) >> 16) % 600; + if (sprite->tRandom == 0) + sprite->tRandom = 361; - r6 = gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][0]; + // Standard RNG sequence. + rand = sprite->tRandom * 1103515245 + 12345; + sprite->tRandom = ((rand & 0x7FFF0000) >> 16) % 600; - r4 = sprite->data[1] % 30; - sprite->data[2] = r4 * 8; // useless assignment + numFallingFrames = sRainSpriteFallingDurations[gWeatherPtr->isHeavyRain][0]; - r0 = sprite->data[1] / 30; - sprite->data[3] = r0 * 8; // useless assignment + tileX = sprite->tRandom % 30; + sprite->tPosX = tileX * 8; // Useless assignment, leftover from before fixed-point values were used - sprite->data[2] = r4; - sprite->data[2] <<= 7; + tileY = sprite->tRandom / 30; + sprite->tPosY = tileY * 8; // Useless assignment, leftover from before fixed-point values were used - sprite->data[3] = r0; - sprite->data[3] <<= 7; + sprite->tPosX = tileX; + sprite->tPosX <<= 7; // This is tileX * 8, using a fixed-point value with 4 decimal places - sprite->data[2] -= gUnknown_0839AABC[gWeatherPtr->unknown_6DC][0] * r6; - sprite->data[3] -= gUnknown_0839AABC[gWeatherPtr->unknown_6DC][1] * r6; + sprite->tPosY = tileY; + sprite->tPosY <<= 7; // This is tileX * 8, using a fixed-point value with 4 decimal places + + // "Rewind" the rain sprites, from their ending position. + sprite->tPosX -= sRainSpriteMovement[gWeatherPtr->isHeavyRain][0] * numFallingFrames; + sprite->tPosY -= sRainSpriteMovement[gWeatherPtr->isHeavyRain][1] * numFallingFrames; StartSpriteAnim(sprite, 0); - sprite->data[4] = 0; + sprite->tState = 0; sprite->coordOffsetEnabled = FALSE; - sprite->data[0] = r6; + sprite->tCounter = numFallingFrames; } -void sub_807E5C0(struct Sprite *sprite) +static void UpdateRainSprite(struct Sprite *sprite) { - if (sprite->data[4] == 0) + if (sprite->tState == 0) { - sprite->data[2] += gUnknown_0839AABC[gWeatherPtr->unknown_6DC][0]; - sprite->data[3] += gUnknown_0839AABC[gWeatherPtr->unknown_6DC][1]; - sprite->pos1.x = sprite->data[2] >> 4; - sprite->pos1.y = sprite->data[3] >> 4; + // Raindrop is in its "falling" motion. + sprite->tPosX += sRainSpriteMovement[gWeatherPtr->isHeavyRain][0]; + sprite->tPosY += sRainSpriteMovement[gWeatherPtr->isHeavyRain][1]; + sprite->pos1.x = sprite->tPosX >> 4; + sprite->pos1.y = sprite->tPosY >> 4; - if (sprite->data[5] != 0 + if (sprite->tActive && (sprite->pos1.x >= -8 && sprite->pos1.x <= 248) && sprite->pos1.y >= -16 && sprite->pos1.y <= 176) sprite->invisible = FALSE; else sprite->invisible = TRUE; - sprite->data[0]--; - if (sprite->data[0] == 0) + if (--sprite->tCounter == 0) { - StartSpriteAnim(sprite, gWeatherPtr->unknown_6DC + 1); - sprite->data[4] = 1; + // Make raindrop splash on the ground + StartSpriteAnim(sprite, gWeatherPtr->isHeavyRain + 1); + sprite->tState = 1; sprite->pos1.x -= gSpriteCoordOffsetX; sprite->pos1.y -= gSpriteCoordOffsetY; sprite->coordOffsetEnabled = TRUE; @@ -495,151 +615,230 @@ void sub_807E5C0(struct Sprite *sprite) } else if (sprite->animEnded) { + // The splashing animation ended. sprite->invisible = TRUE; - sub_807E4EC(sprite); + StartRainSpriteFall(sprite); } } -void sub_807E6C4(struct Sprite *sprite) +static void WaitRainSprite(struct Sprite *sprite) { - if (sprite->data[0] == 0) + if (sprite->tCounter == 0) { - sub_807E4EC(sprite); - sprite->callback = sub_807E5C0; + StartRainSpriteFall(sprite); + sprite->callback = UpdateRainSprite; } else { - sprite->data[0]--; + sprite->tCounter--; } } -void sub_807E6F0(struct Sprite *sprite, u16 b) +static void InitRainSpriteMovement(struct Sprite *sprite, u16 val) { - u16 r8 = gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][0]; - u16 r6 = b / (gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][1] + r8); - u16 r4 = b % (gUnknown_0839AAC4[gWeatherPtr->unknown_6DC][1] + r8); + u16 numFallingFrames = sRainSpriteFallingDurations[gWeatherPtr->isHeavyRain][0]; + u16 numAdvanceRng = val / (sRainSpriteFallingDurations[gWeatherPtr->isHeavyRain][1] + numFallingFrames); + u16 frameVal = val % (sRainSpriteFallingDurations[gWeatherPtr->isHeavyRain][1] + numFallingFrames); + + while (--numAdvanceRng != 0xFFFF) + StartRainSpriteFall(sprite); - while (--r6 != 0xFFFF) - sub_807E4EC(sprite); - if (r4 < r8) + if (frameVal < numFallingFrames) { - while (--r4 != 0xFFFF) - sub_807E5C0(sprite); - sprite->data[6] = 0; + while (--frameVal != 0xFFFF) + UpdateRainSprite(sprite); + + sprite->tWaiting = 0; } else { - sprite->data[0] = r4 - r8; + sprite->tCounter = frameVal - numFallingFrames; sprite->invisible = TRUE; - sprite->data[6] = 1; + sprite->tWaiting = 1; } } -extern const struct SpriteSheet sRainSpriteSheet; // defined below - -void LoadRainSpriteSheet(void) +static void LoadRainSpriteSheet(void) { LoadSpriteSheet(&sRainSpriteSheet); } -static const struct Coords16 sRainSpriteCoords[] = +static bool8 CreateRainSprite(void) { - { 0, 0}, - { 0, 160}, - { 0, 64}, - {144, 224}, - {144, 128}, - { 32, 32}, - { 32, 192}, - { 32, 96}, - { 72, 128}, - { 72, 32}, - { 72, 192}, - {216, 96}, - {216, 0}, - {104, 160}, - {104, 64}, - {104, 224}, - {144, 0}, - {144, 160}, - {144, 64}, - { 32, 224}, - { 32, 128}, - { 72, 32}, - { 72, 192}, - { 48, 96}, -}; + u8 spriteIndex; + u8 spriteId; -static const struct OamData gOamData_839AA68 = -{ - .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = SPRITE_SHAPE(16x32), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(16x32), - .tileNum = 0, - .priority = 1, - .paletteNum = 2, - .affineParam = 0, -}; + if (gWeatherPtr->rainSpriteCount == MAX_RAIN_SPRITES) + return FALSE; + + spriteIndex = gWeatherPtr->rainSpriteCount; + spriteId = CreateSpriteAtEnd(&sRainSpriteTemplate, + sRainSpriteCoords[spriteIndex].x, sRainSpriteCoords[spriteIndex].y, 78); + + if (spriteId != MAX_SPRITES) + { + gSprites[spriteId].tActive = 0; + gSprites[spriteId].tRandom = spriteIndex * 145; + while (gSprites[spriteId].tRandom >= 600) + gSprites[spriteId].tRandom -= 600; + + StartRainSpriteFall(&gSprites[spriteId]); + InitRainSpriteMovement(&gSprites[spriteId], spriteIndex * 9); + gSprites[spriteId].invisible = TRUE; + gWeatherPtr->sprites.s1.rainSprites[spriteIndex] = &gSprites[spriteId]; + } + else + { + gWeatherPtr->sprites.s1.rainSprites[spriteIndex] = NULL; + } + + if (++gWeatherPtr->rainSpriteCount == MAX_RAIN_SPRITES) + { + u16 i; + for (i = 0; i < MAX_RAIN_SPRITES; i++) + { + if (gWeatherPtr->sprites.s1.rainSprites[i]) + { + if (!gWeatherPtr->sprites.s1.rainSprites[i]->tWaiting) + gWeatherPtr->sprites.s1.rainSprites[i]->callback = UpdateRainSprite; + else + gWeatherPtr->sprites.s1.rainSprites[i]->callback = WaitRainSprite; + } + } + + return FALSE; + } -static const union AnimCmd gSpriteAnim_839AA70[] = + return TRUE; +} + +static bool8 UpdateVisibleRainSprites(void) { - ANIMCMD_FRAME(0, 16), - ANIMCMD_JUMP(0), -}; + if (gWeatherPtr->curRainSpriteIndex == gWeatherPtr->maxRainSprites) + return FALSE; -static const union AnimCmd gSpriteAnim_839AA78[] = + if (++gWeatherPtr->rainSpriteVisibleCounter > gWeatherPtr->rainSpriteVisibleDelay) + { + gWeatherPtr->rainSpriteVisibleCounter = 0; + if (gWeatherPtr->curRainSpriteIndex < gWeatherPtr->maxRainSprites) + { + gWeatherPtr->sprites.s1.rainSprites[gWeatherPtr->curRainSpriteIndex++]->tActive = 1; + } + else + { + gWeatherPtr->curRainSpriteIndex--; + gWeatherPtr->sprites.s1.rainSprites[gWeatherPtr->curRainSpriteIndex]->tActive = 0; + gWeatherPtr->sprites.s1.rainSprites[gWeatherPtr->curRainSpriteIndex]->invisible = TRUE; + } + } + return TRUE; +} + +static void DestroyRainSprites(void) { - ANIMCMD_FRAME(8, 3), - ANIMCMD_FRAME(32, 2), - ANIMCMD_FRAME(40, 2), - ANIMCMD_END, -}; + u16 i; + + for (i = 0; i < gWeatherPtr->rainSpriteCount; i++) + { + if (gWeatherPtr->sprites.s1.rainSprites[i] != NULL) + DestroySprite(gWeatherPtr->sprites.s1.rainSprites[i]); + } + gWeatherPtr->rainSpriteCount = 0; + FreeSpriteTilesByTag(0x1206); +} -static const union AnimCmd gSpriteAnim_839AA88[] = +#undef tCounter +#undef tRandom +#undef tPosX +#undef tPosY +#undef tState +#undef tActive +#undef tWaiting + +//------------------------------------------------------------------------------ +// Snow +//------------------------------------------------------------------------------ + +void Snow_InitVars(void) { - ANIMCMD_FRAME(8, 3), - ANIMCMD_FRAME(16, 3), - ANIMCMD_FRAME(24, 4), - ANIMCMD_END, -}; + gWeatherPtr->initStep = 0; + gWeatherPtr->weatherGfxLoaded = FALSE; + gWeatherPtr->gammaTargetIndex = 3; + gWeatherPtr->gammaStepDelay = 20; + gWeatherPtr->unknown_6E5 = 16; + gWeatherPtr->unknown_6E0 = 0; +} + +void Snow_Main(void); +void sub_807ED48(struct Sprite *); -static const union AnimCmd *const gSpriteAnimTable_839AA98[] = +void Snow_InitAll(void) { - gSpriteAnim_839AA70, - gSpriteAnim_839AA78, - gSpriteAnim_839AA88, -}; + Snow_InitVars(); + while (gWeatherPtr->weatherGfxLoaded == FALSE) + { + u16 i; -static const struct SpriteTemplate sRainSpriteTemplate = + Snow_Main(); + for (i = 0; i < gWeatherPtr->snowflakeSpriteCount; i++) + { + sub_807ED48(gWeatherPtr->sprites.s1.snowflakeSprites[i]); + } + } +} + +u8 snowflakes_progress(void); + +void Snow_Main(void) { - .tileTag = 4614, - .paletteTag = 4608, - .oam = &gOamData_839AA68, - .anims = gSpriteAnimTable_839AA98, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_807E5C0, -}; + if (gWeatherPtr->initStep == 0 && snowflakes_progress() == FALSE) + { + gWeatherPtr->weatherGfxLoaded = TRUE; + gWeatherPtr->initStep++; + } +} -const s16 gUnknown_0839AABC[][2] = +bool8 Snow_Finish(void) { - {-104, 208}, - {-160, 320}, -}; + switch (gWeatherPtr->finishStep) + { + case 0: + gWeatherPtr->unknown_6E5 = 0; + gWeatherPtr->unknown_6E0 = 0; + gWeatherPtr->finishStep++; + // fall through + case 1: + if (snowflakes_progress() == FALSE) + { + gWeatherPtr->finishStep++; + return FALSE; + } + return TRUE; + } + return FALSE; +} -const u16 gUnknown_0839AAC4[][2] = +bool8 CreateSnowflakeSprite(void); +bool8 RemoveSnowflakeSprite(void); + +bool8 snowflakes_progress(void) { - {18, 7}, - {12, 10}, -}; + if (gWeatherPtr->snowflakeSpriteCount == gWeatherPtr->unknown_6E5) + return FALSE; -static const struct SpriteSheet sRainSpriteSheet = {gWeatherRainTiles, sizeof(gWeatherRainTiles), 0x1206}; + gWeatherPtr->unknown_6E0++; + if (gWeatherPtr->unknown_6E0 > 36) + { + gWeatherPtr->unknown_6E0 = 0; + if (gWeatherPtr->snowflakeSpriteCount < gWeatherPtr->unknown_6E5) + CreateSnowflakeSprite(); + else + RemoveSnowflakeSprite(); + } + return (gWeatherPtr->snowflakeSpriteCount != gWeatherPtr->unknown_6E5); +} + +void sub_807EC40(struct Sprite *); static const struct OamData gOamData_839AAD4 = { @@ -783,172 +982,6 @@ static const struct SpriteTemplate sFog1SpriteTemplate = .callback = Fog1SpriteCallback, }; -bool8 CreateRainSprite(void) -{ - u8 spriteNum; - u8 spriteId; - - if (gWeatherPtr->rainSpriteCount == 24) - return FALSE; - - spriteNum = gWeatherPtr->rainSpriteCount; - spriteId = CreateSpriteAtEnd(&sRainSpriteTemplate, - sRainSpriteCoords[spriteNum].x, sRainSpriteCoords[spriteNum].y, 78); - if (spriteId != MAX_SPRITES) - { - gSprites[spriteId].data[5] = 0; - gSprites[spriteId].data[1] = spriteNum * 145; - while (gSprites[spriteId].data[1] >= 600) - gSprites[spriteId].data[1] -= 600; - sub_807E4EC(&gSprites[spriteId]); - sub_807E6F0(&gSprites[spriteId], spriteNum * 9); - gSprites[spriteId].invisible = TRUE; - gWeatherPtr->sprites.s1.rainSprites[spriteNum] = &gSprites[spriteId]; - } - else - { - gWeatherPtr->sprites.s1.rainSprites[spriteNum] = NULL; - } - - if (++gWeatherPtr->rainSpriteCount == 24) - { - u16 i; - - for (i = 0; i < 24; i++) - { - if (gWeatherPtr->sprites.s1.rainSprites[i] != NULL) - { - if (gWeatherPtr->sprites.s1.rainSprites[i]->data[6] == 0) - gWeatherPtr->sprites.s1.rainSprites[i]->callback = sub_807E5C0; - else - gWeatherPtr->sprites.s1.rainSprites[i]->callback = sub_807E6C4; - } - } - return FALSE; - } - return TRUE; -} - -bool8 sub_807E8E8(void) -{ - if (gWeatherPtr->unknown_6D8 == gWeatherPtr->unknown_6D9) - return FALSE; - - if (++gWeatherPtr->unknown_6D6 > gWeatherPtr->unknown_6DB) - { - gWeatherPtr->unknown_6D6 = 0; - if (gWeatherPtr->unknown_6D8 < gWeatherPtr->unknown_6D9) - { - gWeatherPtr->sprites.s1.rainSprites[gWeatherPtr->unknown_6D8++]->data[5] = 1; - } - else - { - gWeatherPtr->unknown_6D8--; - gWeatherPtr->sprites.s1.rainSprites[gWeatherPtr->unknown_6D8]->data[5] = 0; - gWeatherPtr->sprites.s1.rainSprites[gWeatherPtr->unknown_6D8]->invisible = TRUE; - } - } - return TRUE; -} - -void DestroyRainSprites(void) -{ - u16 i; - - for (i = 0; i < gWeatherPtr->rainSpriteCount; i++) - { - if (gWeatherPtr->sprites.s1.rainSprites[i] != NULL) - DestroySprite(gWeatherPtr->sprites.s1.rainSprites[i]); - } - gWeatherPtr->rainSpriteCount = 0; - FreeSpriteTilesByTag(0x1206); -} - -//------------------------------------------------------------------------------ -// Snow -//------------------------------------------------------------------------------ - -void Snow_InitVars(void) -{ - gWeatherPtr->initStep = 0; - gWeatherPtr->weatherGfxLoaded = FALSE; - gWeatherPtr->gammaTargetIndex = 3; - gWeatherPtr->gammaStepDelay = 20; - gWeatherPtr->unknown_6E5 = 16; - gWeatherPtr->unknown_6E0 = 0; -} - -void Snow_Main(void); -void sub_807ED48(struct Sprite *); - -void Snow_InitAll(void) -{ - Snow_InitVars(); - while (gWeatherPtr->weatherGfxLoaded == FALSE) - { - u16 i; - - Snow_Main(); - for (i = 0; i < gWeatherPtr->snowflakeSpriteCount; i++) - { - sub_807ED48(gWeatherPtr->sprites.s1.snowflakeSprites[i]); - } - } -} - -u8 snowflakes_progress(void); - -void Snow_Main(void) -{ - if (gWeatherPtr->initStep == 0 && snowflakes_progress() == FALSE) - { - gWeatherPtr->weatherGfxLoaded = TRUE; - gWeatherPtr->initStep++; - } -} - -bool8 Snow_Finish(void) -{ - switch (gWeatherPtr->finishStep) - { - case 0: - gWeatherPtr->unknown_6E5 = 0; - gWeatherPtr->unknown_6E0 = 0; - gWeatherPtr->finishStep++; - // fall through - case 1: - if (snowflakes_progress() == FALSE) - { - gWeatherPtr->finishStep++; - return FALSE; - } - return TRUE; - } - return FALSE; -} - -bool8 CreateSnowflakeSprite(void); -bool8 RemoveSnowflakeSprite(void); - -bool8 snowflakes_progress(void) -{ - if (gWeatherPtr->snowflakeSpriteCount == gWeatherPtr->unknown_6E5) - return FALSE; - - gWeatherPtr->unknown_6E0++; - if (gWeatherPtr->unknown_6E0 > 36) - { - gWeatherPtr->unknown_6E0 = 0; - if (gWeatherPtr->snowflakeSpriteCount < gWeatherPtr->unknown_6E5) - CreateSnowflakeSprite(); - else - RemoveSnowflakeSprite(); - } - return (gWeatherPtr->snowflakeSpriteCount != gWeatherPtr->unknown_6E5); -} - -void sub_807EC40(struct Sprite *); - bool8 CreateSnowflakeSprite(void) { u8 spriteId = CreateSpriteAtEnd(&sSnowflakeSpriteTemplate, 0, 0, 78); @@ -1057,10 +1090,10 @@ void MedRain_InitVars(void) { gWeatherPtr->initStep = 0; gWeatherPtr->weatherGfxLoaded = FALSE; - gWeatherPtr->unknown_6D6 = 0; - gWeatherPtr->unknown_6DB = 4; - gWeatherPtr->unknown_6DC = 0; - gWeatherPtr->unknown_6D9 = 16; + gWeatherPtr->rainSpriteVisibleCounter = 0; + gWeatherPtr->rainSpriteVisibleDelay = 4; + gWeatherPtr->isHeavyRain = 0; + gWeatherPtr->maxRainSprites = 16; gWeatherPtr->gammaTargetIndex = 3; gWeatherPtr->gammaStepDelay = 20; gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment @@ -1085,10 +1118,10 @@ void HeavyRain_InitVars(void) { gWeatherPtr->initStep = 0; gWeatherPtr->weatherGfxLoaded = FALSE; - gWeatherPtr->unknown_6D6 = 0; - gWeatherPtr->unknown_6DB = 4; - gWeatherPtr->unknown_6DC = 1; - gWeatherPtr->unknown_6D9 = 24; + gWeatherPtr->rainSpriteVisibleCounter = 0; + gWeatherPtr->rainSpriteVisibleDelay = 4; + gWeatherPtr->isHeavyRain = 1; + gWeatherPtr->maxRainSprites = 24; gWeatherPtr->gammaTargetIndex = 3; gWeatherPtr->gammaStepDelay = 20; gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment @@ -1102,8 +1135,8 @@ void HeavyRain_InitAll(void) Rain_Main(); } -void UpdateThunderSound(void); -void SetThunderCounter(u16); +static void UpdateThunderSound(void); +static void SetThunderCounter(u16); void Rain_Main(void) { @@ -1120,7 +1153,7 @@ void Rain_Main(void) gWeatherPtr->initStep++; break; case 2: - if (sub_807E8E8()) + if (UpdateVisibleRainSprites()) break; gWeatherPtr->weatherGfxLoaded = TRUE; gWeatherPtr->initStep++; @@ -1224,12 +1257,12 @@ bool8 Rain_Finish(void) || gWeatherPtr->nextWeather == WEATHER_RAIN_MED || gWeatherPtr->nextWeather == WEATHER_RAIN_HEAVY) return FALSE; - gWeatherPtr->unknown_6D9 = 0; + gWeatherPtr->maxRainSprites = 0; gWeatherPtr->finishStep++; } break; case 2: - if (sub_807E8E8()) + if (UpdateVisibleRainSprites()) break; DestroyRainSprites(); gWeatherPtr->unknown_6ED = 0; @@ -1241,7 +1274,7 @@ bool8 Rain_Finish(void) return TRUE; } -void SetThunderCounter(u16 max) +static void SetThunderCounter(u16 max) { if (gWeatherPtr->unknown_6ED == 0) { @@ -1250,7 +1283,7 @@ void SetThunderCounter(u16 max) } } -void UpdateThunderSound(void) +static void UpdateThunderSound(void) { if (gWeatherPtr->unknown_6ED == 1) { @@ -2125,7 +2158,7 @@ bool8 Shade_Finish(void) } //------------------------------------------------------------------------------ -// Weather 14 +// Bubbles //------------------------------------------------------------------------------ const u8 gUnknown_0839AC68[] = {40, 90, 60, 90, 2, 60, 40, 30}; -- cgit v1.2.3 From 1fe52085606ccd9258eea5a037c43b30fc04d7c5 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 1 Apr 2019 12:05:58 -0400 Subject: through sub_801A02C --- src/union_room_player_avatar.c | 462 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 462 insertions(+) create mode 100644 src/union_room_player_avatar.c (limited to 'src') diff --git a/src/union_room_player_avatar.c b/src/union_room_player_avatar.c new file mode 100644 index 000000000..298ad04c7 --- /dev/null +++ b/src/union_room_player_avatar.c @@ -0,0 +1,462 @@ +#include "global.h" +#include "constants/flags.h" +#include "constants/event_object_movement_constants.h" +#include "event_data.h" +#include "event_object_movement.h" +#include "script.h" +#include "field_player_avatar.h" +#include "fieldmap.h" +#include "union_room.h" +#include "task.h" + +EWRAM_DATA struct UnkStruct_8019BA8 * gUnknown_02022C64 = NULL; +EWRAM_DATA u32 gUnknown_02022C68 = 0; + +u8 sub_8019DF4(void); +bool32 sub_8019F8C(u32 playerIdx, u32 arg1); +void sub_801A3B0(u32 arg0, u32 arg1, u8 arg2); + +ALIGNED(4) const u8 gUnknown_082F072C[][10] = { + {0x21, 0x2c, 0x1f, 0x23, 0x25, 0x24, 0x41, 0x42}, + {0x22, 0x28, 0x20, 0x2f, 0x2f, 0x0e, 0x14, 0x2d} +}; + +const s16 gUnknown_082F0740[][2] = { + {0x4, 0x6}, + {0xd, 0x8}, + {0xa, 0x6}, + {0x1, 0x8}, + {0xd, 0x4}, + {0x7, 0x4}, + {0x1, 0x4}, + {0x7, 0x8} +}; + +const s8 gUnknown_082F0760[][2] = { + { 0, 0}, + { 1, 0}, + { 0, -1}, + {-1, 0}, + { 0, 1} +}; + +const u8 gUnknown_082F076A[] = { + 0x00, 0x02, 0x01, 0x04, 0x03 +}; + +const u8 gUnknown_082F076F[] = { + 0x01, 0x03, 0x01, 0x04, 0x02 +}; + +const u8 gUnknown_082F0774[] = { + 0x09, 0x08, 0x07, 0x02, 0x06, 0x05, 0x04, 0x03, + 0xbf, 0x02, 0xc0, 0x02, 0xc1, 0x02, 0xc2, 0x02, + 0xc3, 0x02, 0xc4, 0x02, 0xc5, 0x02, 0xc6, 0x02 +}; + +const u8 gUnknown_082F078C[2] = { + MOVEMENT_ACTION_FLY_UP, + MOVEMENT_ACTION_STEP_END +}; + +const u8 gUnknown_082F078E[2] = { + MOVEMENT_ACTION_FLY_DOWN, + MOVEMENT_ACTION_STEP_END +}; + +bool32 is_walking_or_running(void) +{ + if (gPlayerAvatar.tileTransitionState == 2 || gPlayerAvatar.tileTransitionState == 0) + { + return TRUE; + } + else + { + return FALSE; + } +} + +u8 sub_8019978(u32 a0, u32 a1) +{ + return gUnknown_082F072C[a0][a1 % 8]; +} + +void sub_8019990(u32 a0, u32 a1, s32 * a2, s32 * a3) +{ + *a2 = gUnknown_082F0740[a0][0] + gUnknown_082F0760[a1][0] + 7; + *a3 = gUnknown_082F0740[a0][1] + gUnknown_082F0760[a1][1] + 7; +} + +bool32 sub_80199E0(u32 a0, u32 a1, s32 a2, s32 a3) +{ + if (gUnknown_082F0740[a0][0] + gUnknown_082F0760[a1][0] + 7 != a2) + { + return FALSE; + } + else if (gUnknown_082F0740[a0][1] + gUnknown_082F0760[a1][1] + 7 != a3) + { + return FALSE; + } + else + { + return TRUE; + } +} + +bool32 IsUnionRoomPlayerHidden(u32 player_idx) +{ + return FlagGet(FLAG_HIDE_UNION_ROOM_PLAYER_1 + player_idx); +} + +void HideUnionRoomPlayer(u32 player_idx) +{ + FlagSet(FLAG_HIDE_UNION_ROOM_PLAYER_1 + player_idx); +} + +void ShowUnionRoomPlayer(u32 player_idx) +{ + FlagClear(FLAG_HIDE_UNION_ROOM_PLAYER_1 + player_idx); +} + +void SetUnionRoomPlayerGfx(u32 playerIdx, u32 gfxId) +{ + VarSet(VAR_OBJ_GFX_ID_0 + playerIdx, gfxId); +} + +void CreateUnionRoomPlayerEventObject(u32 playerIdx) +{ + show_sprite(gUnknown_082F0774[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); +} + +void RemoveUnionRoomPlayerEventObject(u32 playerIdx) +{ + RemoveEventObjectByLocalIdAndMap(gUnknown_082F0774[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); +} + +bool32 SetUnionRoomPlayerEnterExitMovement(u32 playerIdx, const u8 * movement) +{ + u8 objectId; + struct EventObject * object; + if (TryGetEventObjectIdByLocalIdAndMap(gUnknown_082F0774[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectId)) + { + return FALSE; + } + object = &gEventObjects[objectId]; + if (EventObjectIsMovementOverridden(object)) + { + return FALSE; + } + if (EventObjectSetHeldMovement(object, *movement)) + { + return FALSE; + } + return TRUE; +} + +bool32 sub_8019B3C(u32 playerIdx) +{ + u8 objectId; + struct EventObject * object; + if (TryGetEventObjectIdByLocalIdAndMap(gUnknown_082F0774[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectId)) + { + return TRUE; + } + object = &gEventObjects[objectId]; + if (!EventObjectClearHeldMovementIfFinished(object)) + { + return FALSE; + } + if (!ScriptContext2_IsEnabled()) + { + UnfreezeEventObject(object); + } + else + { + FreezeEventObject(object); + } + return TRUE; +} + +u8 sub_8019BA8(struct UnkStruct_8019BA8 * ptr) +{ + s32 i; + + gUnknown_02022C68 = 0; + gUnknown_02022C64 = ptr; + for (i = 0; i < 8; i++) + { + ptr[i].field_0 = 0; + ptr[i].field_1 = 0; + ptr[i].field_2 = 0; + ptr[i].field_3 = 0; + } + return sub_8019DF4(); +} + +bool32 sub_8019BDC(s8 * a0, u32 playerIdx, struct UnkStruct_8019BA8 * ptr) +{ + switch (*a0) + { + case 0: + if (SetUnionRoomPlayerEnterExitMovement(playerIdx, gUnknown_082F078C) == TRUE) + { + HideUnionRoomPlayer(playerIdx); + (*a0)++; + } + break; + case 1: + if (sub_8019B3C(playerIdx)) + { + RemoveUnionRoomPlayerEventObject(playerIdx); + HideUnionRoomPlayer(playerIdx); + *a0 = 0; + return TRUE; + } + break; + } + return FALSE; +} + +bool32 sub_8019C38(s8 * a0, u32 playerIdx, struct UnkStruct_8019BA8 * ptr) +{ + s16 x, y; + + switch (*a0) + { + case 0: + if (!is_walking_or_running()) + { + break; + } + PlayerGetDestCoords(&x, &y); + if (sub_80199E0(playerIdx, 0, x, y) == 1) + { + break; + } + player_get_pos_including_state_based_drift(&x, &y); + if (sub_80199E0(playerIdx, 0, x, y) == 1) + { + break; + } + SetUnionRoomPlayerGfx(playerIdx, ptr->field_1); + CreateUnionRoomPlayerEventObject(playerIdx); + ShowUnionRoomPlayer(playerIdx); + (*a0)++; + // fallthrough + case 3: // incorrect? + if (SetUnionRoomPlayerEnterExitMovement(playerIdx, gUnknown_082F078E) == 1) + { + (*a0)++; + } + break; + case 2: + if (sub_8019B3C(playerIdx)) + { + *a0 = 0; + return TRUE; + } + break; + } + return FALSE; +} + +bool32 sub_8019CF0(u32 playerIdx, u32 a1, u32 a2) +{ + struct UnkStruct_8019BA8 * ptr = &gUnknown_02022C64[playerIdx]; + ptr->field_3 = 1; + ptr->field_1 = sub_8019978(a1, a2); + if (ptr->field_0 == 0) + { + return TRUE; + } + else + { + return FALSE; + } +} + +bool32 sub_8019D20(u32 playerIdx) +{ + struct UnkStruct_8019BA8 * ptr = &gUnknown_02022C64[playerIdx]; + ptr->field_3 = 2; + if (ptr->field_0 == 1) + { + return TRUE; + } + else + { + return FALSE; + } +} + +void sub_8019D44(u32 playerIdx, struct UnkStruct_8019BA8 * ptr) +{ + switch (ptr->field_0) + { + case 0: + if (ptr->field_3 == 1) + { + ptr->field_0 = 2; + ptr->field_2 = 0; + } + else + { + break; + } + // fallthrough + case 2: + if (!sub_8019F8C(playerIdx, 0) && ptr->field_3 == 2) + { + ptr->field_0 = 0; + ptr->field_2 = 0; + RemoveUnionRoomPlayerEventObject(playerIdx); + HideUnionRoomPlayer(playerIdx); + } + else if (sub_8019C38(&ptr->field_2, playerIdx, ptr) == 1) + { + ptr->field_0 = 1; + } + break; + case 1: + if (ptr->field_3 == 2) + { + ptr->field_0 = 3; + ptr->field_2 = 0; + } + else + { + break; + } + // fallthrough + case 3: + if (sub_8019BDC(&ptr->field_2, playerIdx, ptr) == 1) + { + ptr->field_0 = 0; + } + break; + } + ptr->field_3 = 0; +} + +void sub_8019DD0(u8 taskId) +{ + s32 i; + for (i = 0; i < 8; i++) + { + sub_8019D44(i, &gUnknown_02022C64[i]); + } +} + +u8 sub_8019DF4(void) +{ + if (FuncIsActiveTask(sub_8019DD0) == 1) + { + return NUM_TASKS; + } + else + { + return CreateTask(sub_8019DD0, 5); + } +} + +void sub_8019E20(void) +{ + u8 taskId = FindTaskIdByFunc(sub_8019DD0); + if (taskId < NUM_TASKS) + { + DestroyTask(taskId); + } +} + +void sub_8019E3C(void) +{ + s32 i; + for (i = 0; i < 8; i++) + { + if (!IsUnionRoomPlayerHidden(i)) + { + RemoveUnionRoomPlayerEventObject(i); + HideUnionRoomPlayer(i); + } + } + gUnknown_02022C64 = NULL; + sub_8019E20(); +} + +void sub_8019E70(u8 * sp8, s32 r9) +{ + s32 r7; + + for (r7 = 0; r7 < 5; r7++) + { + s32 r5 = 5 * r9 + r7; + sp8[r5] = sprite_new(0x41, r5 - 0x38, gUnknown_082F0740[r9][0] + gUnknown_082F0760[r7][0], gUnknown_082F0740[r9][1] + gUnknown_082F0760[r7][1], 3, 1); + sub_8097C44(r5 - 0x38, TRUE); + } +} + +void sub_8019F04(u8 * r5) +{ + s32 i; + for (i = 0; i < 40; i++) + { + DestroySprite(&gSprites[r5[i]]); + } +} + +void sub_8019F2C(void) +{ + s32 i, j, x, y; + for (i = 0; i < 8; i++) + { + for (j = 0; j < 5; j++) + { + sub_8019990(i, j, &x, &y); + sub_8088B94(x, y, 0); + } + } +} + +u8 sub_8019F64(u32 r1, u32 unused, struct UnkLinkRfuStruct_02022B14 * r2) +{ + if (r1 != 0) + { + return gUnknown_082F076F[r1]; + } + else if (r2->unk_0a_0 == 0x45) + { + return 1; + } + else + { + return 4; + } +} + +u32 sub_8019F8C(u32 a0, u32 a1) +{ + return sub_8097C8C(5 * a0 + a1 - 0x38); +} + +void sub_8019FA4(u32 r5, u32 r6, u8 r8, struct UnkLinkRfuStruct_02022B14 * r9) +{ + s32 x, y; + s32 r7 = 5 * r5 + r6; + if (sub_8019F8C(r5, r6) == 1) + { + sub_8097C44(r7 - 0x38, FALSE); + sub_8097CC4(r7 - 0x38, 1); + } + sub_8097BB4(r7 - 0x38, r8); + sub_801A3B0(r6, r5, sub_8019F64(r6, r5, r9)); + sub_8019990(r5, r6, &x, &y); + sub_8088B94(x, y, 1); +} + +void sub_801A02C(u32 a0, u32 a1) +{ + s32 x, y; + sub_8097CC4(5 * a0 + a1 - 0x38, 2); + sub_8019990(a0, a1, &x, &y); + sub_8088B94(x, y, 0); +} -- cgit v1.2.3 From ce89cf6f75a94e08d02cc8c60147469c91ea99c9 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 1 Apr 2019 14:09:56 -0400 Subject: through sub_801A3D0 --- src/union_room_player_avatar.c | 151 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 150 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/union_room_player_avatar.c b/src/union_room_player_avatar.c index 298ad04c7..e7af24b38 100644 --- a/src/union_room_player_avatar.c +++ b/src/union_room_player_avatar.c @@ -14,7 +14,7 @@ EWRAM_DATA u32 gUnknown_02022C68 = 0; u8 sub_8019DF4(void); bool32 sub_8019F8C(u32 playerIdx, u32 arg1); -void sub_801A3B0(u32 arg0, u32 arg1, u8 arg2); +void sub_801A3B0(s32 arg0, s32 arg1, u8 arg2); ALIGNED(4) const u8 gUnknown_082F072C[][10] = { {0x21, 0x2c, 0x1f, 0x23, 0x25, 0x24, 0x41, 0x42}, @@ -460,3 +460,152 @@ void sub_801A02C(u32 a0, u32 a1) sub_8019990(a0, a1, &x, &y); sub_8088B94(x, y, 0); } + +void sub_801A064(u32 r7, struct UnkLinkRfuStruct_02022B14 * r8) +{ + s16 x, y, x2, y2; + s32 i; + + PlayerGetDestCoords(&x, &y); + player_get_pos_including_state_based_drift(&x2, &y2); + if (sub_8097C8C(5 * r7 - 0x38) == 1) + { + if (sub_80199E0(r7, 0, x, y) == 1 || sub_80199E0(r7, 0, x2, y2) == 1) + { + return; + } + sub_8019FA4(r7, 0, sub_8019978(r8->playerGender, r8->unk_00.playerTrainerId[0]), r8); + } + for (i = 1; i < 5; i++) + { + if (r8->unk_04[i - 1] == 0) + { + sub_801A02C(r7, i); + } + else if (sub_80199E0(r7, i, x, y) == 0 && sub_80199E0(r7, i, x2, y2) == 0) + { + sub_8019FA4(r7, i, sub_8019978((r8->unk_04[i - 1] >> 3) & 1, r8->unk_04[i - 1] & 7), r8); + } + } +} + +void sub_801A16C(u32 r5, struct UnkLinkRfuStruct_02022B14 * r4) +{ + u32 i; + switch (r4->unk_0a_0) + { + case 0x40: + case 0x54: + sub_8019CF0(r5, r4->playerGender, r4->unk_00.playerTrainerId[0]); + for (i = 0; i < 5; i++) + { + sub_801A02C(r5, i); + } + break; + case 0x41: + case 0x44: + case 0x45: + case 0x48: + case 0x51: + case 0x52: + case 0x53: + sub_8019D20(r5); + sub_801A064(r5, r4); + break; + } +} + +void sub_801A214(u32 r5, struct UnkLinkRfuStruct_02022B14 * unused) +{ + s32 i; + sub_8019D20(r5); + for (i = 0; i < 5; i++) + { + sub_801A02C(r5, i); + } +} + +void sub_801A234(struct UnkStruct_URoom *r0) +{ + s32 i; + struct UnkStruct_x20 * r4; + gUnknown_02022C68 = 0; + for (i = 0, r4 = r0->field_0->arr; i < 8; i++) + { + if (r4[i].field_1A_0 == 1) + { + sub_801A16C(i, &r4[i].unk.field_0); + } + else if (r4[i].field_1A_0 == 2) + { + sub_801A214(i, &r4[i].unk.field_0); + } + } +} + +void sub_801A274(void) +{ + gUnknown_02022C68 = 300; +} + +void sub_801A284(struct UnkStruct_URoom *r2) +{ + if (++gUnknown_02022C68 > 300) + { + sub_801A234(r2); + } +} + +bool32 sub_801A2A8(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3) +{ + s16 x, y; + s32 i, j; + struct UnkStruct_x20 * r4; + if (!is_walking_or_running()) + { + return FALSE; + } + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + for (i = 0, r4 = arg0->arr; i < 8; i++) + { + for (j = 0; j < 5; j++) + { + s32 r3 = 5 * i + j; + if (x != gUnknown_082F0740[i][0] + gUnknown_082F0760[j][0] + 7) + { + continue; + } + if (y != gUnknown_082F0740[i][1] + gUnknown_082F0760[j][1] + 7) + { + continue; + } + if (sub_8097C8C(r3 - 0x38) != 0) + { + continue; + } + if (sub_8097D9C(r3 - 0x38) != 0) + { + continue; + } + if (r4[i].field_1A_0 != 1) + { + continue; + } + sub_801A3B0(j, i, gUnknown_082F076A[GetPlayerFacingDirection()]); + *arg1 = j; + *arg2 = i; + return TRUE; + } + } + return FALSE; +} + +void sub_801A3B0(s32 arg0, s32 arg1, u8 arg2) +{ + sub_8097B78(5 * arg1 - 0x38 + arg0, arg2); +} + +void sub_801A3D0(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2) +{ + return sub_801A3B0(arg0, arg1, sub_8019F64(arg0, arg1, &arg2->arr[arg1].unk.field_0)); +} -- cgit v1.2.3 From 9f1d1219cec0643bb6e58cb2cdba07ca6f8587ed Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 1 Apr 2019 14:20:34 -0400 Subject: create header and fix prototypes --- src/union_room.c | 9 ++--- src/union_room_player_avatar.c | 80 +++++++++++++++++++++--------------------- 2 files changed, 42 insertions(+), 47 deletions(-) (limited to 'src') diff --git a/src/union_room.c b/src/union_room.c index 8aeaaf6fb..ad33112e4 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -46,6 +46,7 @@ #include "union_room_chat.h" #include "berry_crush.h" #include "mystery_gift.h" +#include "union_room_player_avatar.h" EWRAM_DATA u8 gUnknown_02022C20[12] = {}; EWRAM_DATA u8 gUnknown_02022C2C = 0; @@ -106,15 +107,12 @@ s8 mevent_message_print_and_prompt_yes_no(u8 *textState, u8 *arg1, u8 arg2, cons bool32 sub_8016F1C(struct UnkLinkRfuStruct_02022B14 *arg0, s16 arg1); u8 sub_8016DF0(struct UnkStruct_Main4 *arg0, struct UnkStruct_Main4 *arg1, u32 arg2); void sub_8019F2C(void); -void sub_8019E70(u8 *arg0, s32 arg1); bool32 sub_80180A0(u32 monId, struct TradeUnkStruct *arg1); void sub_80180E8(u32 monId, struct TradeUnkStruct *arg1); -bool32 sub_801A2A8(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3); void sub_80181CC(void); bool32 sub_8017940(void); u8 sub_8016B00(void); void sub_801A274(struct UnkStruct_URoom *arg0); -void sub_801A284(struct UnkStruct_URoom *arg0); bool32 sub_8017FD8(struct UnkStruct_URoom *arg0); void sub_801689C(struct UnkStruct_URoom *arg0); u8 sub_80181DC(struct UnkStruct_URoom *arg0); @@ -123,7 +121,6 @@ bool32 sub_801704C(void); s32 sub_8017CF8(s32 arg1, struct UnkStruct_Main0 *arg0); s32 sub_80179D4(struct UnkStruct_Main0 *arg0, u8 arg1, u8 arg2, u32 playerGender); void sub_801818C(bool32 arg0); -void sub_801A3D0(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2); s32 sub_8017178(u8 *arg0, u8 *arg1, u8 *arg2, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate); s32 sub_80172A0(u8 *arg0, u8 *arg1, u8 *arg2, u8 *arg3, const struct WindowTemplate *winTemplate, const struct ListMenuTemplate *menuTemplate, struct UnkStruct_Main0 *arg6); s32 sub_8017CB0(struct UnkStruct_x20 * arg, s32 arg1); @@ -133,12 +130,10 @@ void sub_8018220(u8 *unused, struct UnkStruct_URoom *arg1, bool8 arg2); void sub_8017D9C(u8 *dst, s32 arg1, u32 playerGender); u32 sub_80179AC(struct UnkStruct_x20 *arg0); void sub_8017E00(u8 *dst, u8 arg1); -void sub_8019F04(u8 *spriteIds); -void sub_8019E3C(void); void sub_80173B0(void); s32 sub_8017D04(u32 type, u32 species); bool32 sub_8017020(const u8 *src); -void sub_8019BA8(void *); +u8 sub_8019BA8(struct UnkStruct_8019BA8 * ); s32 sub_8017EA0(u8 *dst, u32 gender, u16 *arg2, struct UnkStruct_URoom *arg3); void sub_801697C(u8 taskId); bool8 sub_8017630(struct UnkStruct_Shared* arg0, const struct UnkStruct_Shared* arg1); diff --git a/src/union_room_player_avatar.c b/src/union_room_player_avatar.c index e7af24b38..61be86a37 100644 --- a/src/union_room_player_avatar.c +++ b/src/union_room_player_avatar.c @@ -12,16 +12,16 @@ EWRAM_DATA struct UnkStruct_8019BA8 * gUnknown_02022C64 = NULL; EWRAM_DATA u32 gUnknown_02022C68 = 0; -u8 sub_8019DF4(void); -bool32 sub_8019F8C(u32 playerIdx, u32 arg1); -void sub_801A3B0(s32 arg0, s32 arg1, u8 arg2); +static u8 sub_8019DF4(void); +static u32 sub_8019F8C(u32 playerIdx, u32 arg1); +static void sub_801A3B0(s32 arg0, s32 arg1, u8 arg2); ALIGNED(4) const u8 gUnknown_082F072C[][10] = { {0x21, 0x2c, 0x1f, 0x23, 0x25, 0x24, 0x41, 0x42}, {0x22, 0x28, 0x20, 0x2f, 0x2f, 0x0e, 0x14, 0x2d} }; -const s16 gUnknown_082F0740[][2] = { +static const s16 gUnknown_082F0740[][2] = { {0x4, 0x6}, {0xd, 0x8}, {0xa, 0x6}, @@ -32,7 +32,7 @@ const s16 gUnknown_082F0740[][2] = { {0x7, 0x8} }; -const s8 gUnknown_082F0760[][2] = { +static const s8 gUnknown_082F0760[][2] = { { 0, 0}, { 1, 0}, { 0, -1}, @@ -40,31 +40,31 @@ const s8 gUnknown_082F0760[][2] = { { 0, 1} }; -const u8 gUnknown_082F076A[] = { +static const u8 gUnknown_082F076A[] = { 0x00, 0x02, 0x01, 0x04, 0x03 }; -const u8 gUnknown_082F076F[] = { +static const u8 gUnknown_082F076F[] = { 0x01, 0x03, 0x01, 0x04, 0x02 }; -const u8 gUnknown_082F0774[] = { +static const u8 gUnknown_082F0774[] = { 0x09, 0x08, 0x07, 0x02, 0x06, 0x05, 0x04, 0x03, 0xbf, 0x02, 0xc0, 0x02, 0xc1, 0x02, 0xc2, 0x02, 0xc3, 0x02, 0xc4, 0x02, 0xc5, 0x02, 0xc6, 0x02 }; -const u8 gUnknown_082F078C[2] = { +static const u8 gUnknown_082F078C[2] = { MOVEMENT_ACTION_FLY_UP, MOVEMENT_ACTION_STEP_END }; -const u8 gUnknown_082F078E[2] = { +static const u8 gUnknown_082F078E[2] = { MOVEMENT_ACTION_FLY_DOWN, MOVEMENT_ACTION_STEP_END }; -bool32 is_walking_or_running(void) +static bool32 is_walking_or_running(void) { if (gPlayerAvatar.tileTransitionState == 2 || gPlayerAvatar.tileTransitionState == 0) { @@ -76,18 +76,18 @@ bool32 is_walking_or_running(void) } } -u8 sub_8019978(u32 a0, u32 a1) +static u8 sub_8019978(u32 a0, u32 a1) { return gUnknown_082F072C[a0][a1 % 8]; } -void sub_8019990(u32 a0, u32 a1, s32 * a2, s32 * a3) +static void sub_8019990(u32 a0, u32 a1, s32 * a2, s32 * a3) { *a2 = gUnknown_082F0740[a0][0] + gUnknown_082F0760[a1][0] + 7; *a3 = gUnknown_082F0740[a0][1] + gUnknown_082F0760[a1][1] + 7; } -bool32 sub_80199E0(u32 a0, u32 a1, s32 a2, s32 a3) +static bool32 sub_80199E0(u32 a0, u32 a1, s32 a2, s32 a3) { if (gUnknown_082F0740[a0][0] + gUnknown_082F0760[a1][0] + 7 != a2) { @@ -103,37 +103,37 @@ bool32 sub_80199E0(u32 a0, u32 a1, s32 a2, s32 a3) } } -bool32 IsUnionRoomPlayerHidden(u32 player_idx) +static bool32 IsUnionRoomPlayerHidden(u32 player_idx) { return FlagGet(FLAG_HIDE_UNION_ROOM_PLAYER_1 + player_idx); } -void HideUnionRoomPlayer(u32 player_idx) +static void HideUnionRoomPlayer(u32 player_idx) { FlagSet(FLAG_HIDE_UNION_ROOM_PLAYER_1 + player_idx); } -void ShowUnionRoomPlayer(u32 player_idx) +static void ShowUnionRoomPlayer(u32 player_idx) { FlagClear(FLAG_HIDE_UNION_ROOM_PLAYER_1 + player_idx); } -void SetUnionRoomPlayerGfx(u32 playerIdx, u32 gfxId) +static void SetUnionRoomPlayerGfx(u32 playerIdx, u32 gfxId) { VarSet(VAR_OBJ_GFX_ID_0 + playerIdx, gfxId); } -void CreateUnionRoomPlayerEventObject(u32 playerIdx) +static void CreateUnionRoomPlayerEventObject(u32 playerIdx) { show_sprite(gUnknown_082F0774[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); } -void RemoveUnionRoomPlayerEventObject(u32 playerIdx) +static void RemoveUnionRoomPlayerEventObject(u32 playerIdx) { RemoveEventObjectByLocalIdAndMap(gUnknown_082F0774[playerIdx], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup); } -bool32 SetUnionRoomPlayerEnterExitMovement(u32 playerIdx, const u8 * movement) +static bool32 SetUnionRoomPlayerEnterExitMovement(u32 playerIdx, const u8 * movement) { u8 objectId; struct EventObject * object; @@ -153,7 +153,7 @@ bool32 SetUnionRoomPlayerEnterExitMovement(u32 playerIdx, const u8 * movement) return TRUE; } -bool32 sub_8019B3C(u32 playerIdx) +static bool32 sub_8019B3C(u32 playerIdx) { u8 objectId; struct EventObject * object; @@ -193,7 +193,7 @@ u8 sub_8019BA8(struct UnkStruct_8019BA8 * ptr) return sub_8019DF4(); } -bool32 sub_8019BDC(s8 * a0, u32 playerIdx, struct UnkStruct_8019BA8 * ptr) +static bool32 sub_8019BDC(s8 * a0, u32 playerIdx, struct UnkStruct_8019BA8 * ptr) { switch (*a0) { @@ -217,7 +217,7 @@ bool32 sub_8019BDC(s8 * a0, u32 playerIdx, struct UnkStruct_8019BA8 * ptr) return FALSE; } -bool32 sub_8019C38(s8 * a0, u32 playerIdx, struct UnkStruct_8019BA8 * ptr) +static bool32 sub_8019C38(s8 * a0, u32 playerIdx, struct UnkStruct_8019BA8 * ptr) { s16 x, y; @@ -260,7 +260,7 @@ bool32 sub_8019C38(s8 * a0, u32 playerIdx, struct UnkStruct_8019BA8 * ptr) return FALSE; } -bool32 sub_8019CF0(u32 playerIdx, u32 a1, u32 a2) +static bool32 sub_8019CF0(u32 playerIdx, u32 a1, u32 a2) { struct UnkStruct_8019BA8 * ptr = &gUnknown_02022C64[playerIdx]; ptr->field_3 = 1; @@ -275,7 +275,7 @@ bool32 sub_8019CF0(u32 playerIdx, u32 a1, u32 a2) } } -bool32 sub_8019D20(u32 playerIdx) +static bool32 sub_8019D20(u32 playerIdx) { struct UnkStruct_8019BA8 * ptr = &gUnknown_02022C64[playerIdx]; ptr->field_3 = 2; @@ -289,7 +289,7 @@ bool32 sub_8019D20(u32 playerIdx) } } -void sub_8019D44(u32 playerIdx, struct UnkStruct_8019BA8 * ptr) +static void sub_8019D44(u32 playerIdx, struct UnkStruct_8019BA8 * ptr) { switch (ptr->field_0) { @@ -338,7 +338,7 @@ void sub_8019D44(u32 playerIdx, struct UnkStruct_8019BA8 * ptr) ptr->field_3 = 0; } -void sub_8019DD0(u8 taskId) +static void sub_8019DD0(u8 taskId) { s32 i; for (i = 0; i < 8; i++) @@ -347,7 +347,7 @@ void sub_8019DD0(u8 taskId) } } -u8 sub_8019DF4(void) +static u8 sub_8019DF4(void) { if (FuncIsActiveTask(sub_8019DD0) == 1) { @@ -359,7 +359,7 @@ u8 sub_8019DF4(void) } } -void sub_8019E20(void) +static void sub_8019E20(void) { u8 taskId = FindTaskIdByFunc(sub_8019DD0); if (taskId < NUM_TASKS) @@ -417,7 +417,7 @@ void sub_8019F2C(void) } } -u8 sub_8019F64(u32 r1, u32 unused, struct UnkLinkRfuStruct_02022B14 * r2) +static u8 sub_8019F64(u32 r1, u32 unused, struct UnkLinkRfuStruct_02022B14 * r2) { if (r1 != 0) { @@ -433,12 +433,12 @@ u8 sub_8019F64(u32 r1, u32 unused, struct UnkLinkRfuStruct_02022B14 * r2) } } -u32 sub_8019F8C(u32 a0, u32 a1) +static u32 sub_8019F8C(u32 a0, u32 a1) { return sub_8097C8C(5 * a0 + a1 - 0x38); } -void sub_8019FA4(u32 r5, u32 r6, u8 r8, struct UnkLinkRfuStruct_02022B14 * r9) +static void sub_8019FA4(u32 r5, u32 r6, u8 r8, struct UnkLinkRfuStruct_02022B14 * r9) { s32 x, y; s32 r7 = 5 * r5 + r6; @@ -453,7 +453,7 @@ void sub_8019FA4(u32 r5, u32 r6, u8 r8, struct UnkLinkRfuStruct_02022B14 * r9) sub_8088B94(x, y, 1); } -void sub_801A02C(u32 a0, u32 a1) +static void sub_801A02C(u32 a0, u32 a1) { s32 x, y; sub_8097CC4(5 * a0 + a1 - 0x38, 2); @@ -461,7 +461,7 @@ void sub_801A02C(u32 a0, u32 a1) sub_8088B94(x, y, 0); } -void sub_801A064(u32 r7, struct UnkLinkRfuStruct_02022B14 * r8) +static void sub_801A064(u32 r7, struct UnkLinkRfuStruct_02022B14 * r8) { s16 x, y, x2, y2; s32 i; @@ -489,7 +489,7 @@ void sub_801A064(u32 r7, struct UnkLinkRfuStruct_02022B14 * r8) } } -void sub_801A16C(u32 r5, struct UnkLinkRfuStruct_02022B14 * r4) +static void sub_801A16C(u32 r5, struct UnkLinkRfuStruct_02022B14 * r4) { u32 i; switch (r4->unk_0a_0) @@ -515,7 +515,7 @@ void sub_801A16C(u32 r5, struct UnkLinkRfuStruct_02022B14 * r4) } } -void sub_801A214(u32 r5, struct UnkLinkRfuStruct_02022B14 * unused) +static void sub_801A214(u32 r5, struct UnkLinkRfuStruct_02022B14 * unused) { s32 i; sub_8019D20(r5); @@ -525,7 +525,7 @@ void sub_801A214(u32 r5, struct UnkLinkRfuStruct_02022B14 * unused) } } -void sub_801A234(struct UnkStruct_URoom *r0) +static void sub_801A234(struct UnkStruct_URoom *r0) { s32 i; struct UnkStruct_x20 * r4; @@ -543,7 +543,7 @@ void sub_801A234(struct UnkStruct_URoom *r0) } } -void sub_801A274(void) +void sub_801A274(struct UnkStruct_URoom *unused) { gUnknown_02022C68 = 300; } @@ -600,7 +600,7 @@ bool32 sub_801A2A8(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3) return FALSE; } -void sub_801A3B0(s32 arg0, s32 arg1, u8 arg2) +static void sub_801A3B0(s32 arg0, s32 arg1, u8 arg2) { sub_8097B78(5 * arg1 - 0x38 + arg0, arg2); } -- cgit v1.2.3 From c429e6d69c3df23687e2336039b676b8927c238e Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Mon, 1 Apr 2019 20:30:41 -0400 Subject: Move gPlayerFacingPosition out of sym_ewram.txt (#617) * Move gPlayerFacingPosition out of sym_ewram.txt * Fix tabs in sym_ewram.txt * Remove redundant faraway island extern --- src/fldeff_misc.c | 2 +- src/fldeff_rocksmash.c | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) (limited to 'src') diff --git a/src/fldeff_misc.c b/src/fldeff_misc.c index 5d1920aac..efde43b76 100644 --- a/src/fldeff_misc.c +++ b/src/fldeff_misc.c @@ -23,7 +23,7 @@ #include "constants/songs.h" #include "constants/vars.h" -extern struct MapPosition gPlayerFacingPosition; +EWRAM_DATA struct MapPosition gPlayerFacingPosition = {0}; static void sub_80F9C90(u8); static void sub_80F9DFC(u8); diff --git a/src/fldeff_rocksmash.c b/src/fldeff_rocksmash.c index 86df8e943..a9077f2ff 100644 --- a/src/fldeff_rocksmash.c +++ b/src/fldeff_rocksmash.c @@ -27,9 +27,6 @@ static void sub_813561C(u8 taskId); static void sub_81356C4(void); static void sub_8135714(void); -// extern RAM loc -extern struct MapPosition gPlayerFacingPosition; - // text bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId) { -- cgit v1.2.3 From 35505c7f5b421b7589d1d761dcbd41a1c40affb6 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 1 Apr 2019 20:04:23 -0500 Subject: Document somre more weather effects --- src/event_object_movement.c | 49 ++- src/field_effect_helpers.c | 2 +- src/field_weather.c | 2 +- src/field_weather_effect.c | 785 +++++++++++++++++++++++--------------------- src/overworld.c | 2 +- 5 files changed, 438 insertions(+), 402 deletions(-) (limited to 'src') diff --git a/src/event_object_movement.c b/src/event_object_movement.c index 6a3527bc1..45b721f56 100644 --- a/src/event_object_movement.c +++ b/src/event_object_movement.c @@ -1949,7 +1949,7 @@ void EventObjectSetGraphicsId(struct EventObject *eventObject, u8 graphicsId) sprite->oam.paletteNum = paletteSlot; eventObject->inanimate = graphicsInfo->inanimate; eventObject->graphicsId = graphicsId; - sub_8093038(eventObject->currentCoords.x, eventObject->currentCoords.y, &sprite->pos1.x, &sprite->pos1.y); + SetSpritePosToMapCoords(eventObject->currentCoords.x, eventObject->currentCoords.y, &sprite->pos1.x, &sprite->pos1.y); sprite->centerToCornerVecX = -(graphicsInfo->width >> 1); sprite->centerToCornerVecY = -(graphicsInfo->height >> 1); sprite->pos1.x += 8; @@ -2253,7 +2253,7 @@ void sub_808EB08(struct EventObject *eventObject, s16 x, s16 y) sprite = &gSprites[eventObject->spriteId]; graphicsInfo = GetEventObjectGraphicsInfo(eventObject->graphicsId); SetEventObjectCoords(eventObject, x, y); - sub_8093038(eventObject->currentCoords.x, eventObject->currentCoords.y, &sprite->pos1.x, &sprite->pos1.y); + SetSpritePosToMapCoords(eventObject->currentCoords.x, eventObject->currentCoords.y, &sprite->pos1.x, &sprite->pos1.y); sprite->centerToCornerVecX = -(graphicsInfo->width >> 1); sprite->centerToCornerVecY = -(graphicsInfo->height >> 1); sprite->pos1.x += 8; @@ -5024,44 +5024,37 @@ static void MoveCoordsInDirection(u32 dir, s16 *x, s16 *y, s16 deltaX, s16 delta *y -= dy2; } -void sub_8092FF0(s16 x, s16 y, s16 *dest_x, s16 *dest_y) +void sub_8092FF0(s16 x, s16 y, s16 *destX, s16 *destY) { - *dest_x = (x - gSaveBlock1Ptr->pos.x) << 4; - *dest_y = (y - gSaveBlock1Ptr->pos.y) << 4; - *dest_x -= gTotalCameraPixelOffsetX; - *dest_y -= gTotalCameraPixelOffsetY; + *destX = (x - gSaveBlock1Ptr->pos.x) << 4; + *destY = (y - gSaveBlock1Ptr->pos.y) << 4; + *destX -= gTotalCameraPixelOffsetX; + *destY -= gTotalCameraPixelOffsetY; } -void sub_8093038(s16 x, s16 y, s16 *dest_x, s16 *dest_y) +void SetSpritePosToMapCoords(s16 mapX, s16 mapY, s16 *destX, s16 *destY) { - s16 dx; - s16 dy; - - dx = -gTotalCameraPixelOffsetX - gFieldCamera.x; - dy = -gTotalCameraPixelOffsetY - gFieldCamera.y; + s16 dx = -gTotalCameraPixelOffsetX - gFieldCamera.x; + s16 dy = -gTotalCameraPixelOffsetY - gFieldCamera.y; if (gFieldCamera.x > 0) - { - dx += 0x10; - } + dx += 1 << 4; + if (gFieldCamera.x < 0) - { - dx -= 0x10; - } + dx -= 1 << 4; + if (gFieldCamera.y > 0) - { - dy += 0x10; - } + dy += 1 << 4; + if (gFieldCamera.y < 0) - { - dy -= 0x10; - } - *dest_x = ((x - gSaveBlock1Ptr->pos.x) << 4) + dx; - *dest_y = ((y - gSaveBlock1Ptr->pos.y) << 4) + dy; + dy -= 1 << 4; + + *destX = ((mapX - gSaveBlock1Ptr->pos.x) << 4) + dx; + *destY = ((mapY - gSaveBlock1Ptr->pos.y) << 4) + dy; } void sub_80930E0(s16 *x, s16 *y, s16 dx, s16 dy) { - sub_8093038(*x, *y, x, y); + SetSpritePosToMapCoords(*x, *y, x, y); *x += dx; *y += dy; } diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c index 3f75fbb84..c715da25d 100755 --- a/src/field_effect_helpers.c +++ b/src/field_effect_helpers.c @@ -191,7 +191,7 @@ void ShowWarpArrowSprite(u8 spriteId, u8 direction, s16 x, s16 y) sprite = &gSprites[spriteId]; if (sprite->invisible || sprite->data[0] != x || sprite->data[1] != y) { - sub_8093038(x, y, &x2, &y2); + SetSpritePosToMapCoords(x, y, &x2, &y2); sprite = &gSprites[spriteId]; sprite->pos1.x = x2 + 8; sprite->pos1.y = y2 + 8; diff --git a/src/field_weather.c b/src/field_weather.c index a2c40052b..346d30a38 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -91,7 +91,7 @@ static const struct WeatherCallbacks sWeatherFuncs[] = { {None_Init, None_Main, None_Init, None_Finish}, {Clouds_InitVars, Clouds_Main, Clouds_InitAll, Clouds_Finish}, - {Weather2_InitVars, Weather2_Main, Weather2_InitAll, Weather2_Finish}, + {Sunny_InitVars, Sunny_Main, Sunny_InitAll, Sunny_Finish}, {LightRain_InitVars, LightRain_Main, LightRain_InitAll, LightRain_Finish}, {Snow_InitVars, Snow_Main, Snow_InitAll, Snow_Finish}, {MedRain_InitVars, Rain_Main, MedRain_InitAll, Rain_Finish}, diff --git a/src/field_weather_effect.c b/src/field_weather_effect.c index 95f80d061..0544710ad 100644 --- a/src/field_weather_effect.c +++ b/src/field_weather_effect.c @@ -33,9 +33,13 @@ const u8 gWeatherSandstormTiles[] = INCBIN_U8("graphics/weather/sandstorm.4bpp") // Clouds //------------------------------------------------------------------------------ -static void sub_80AC6B4(struct Sprite *); +static void CreateCloudSprites(void); +static void DestroyCloudSprites(void); +static void UpdateCloudSprite(struct Sprite *); -static const struct Coords16 gUnknown_0854FB50[] = +// The clouds are positioned on the map's grid. +// These coordinates are for the lower half of Route 120. +static const struct Coords16 sCloudSpriteMapCoords[] = { { 0, 66}, { 5, 73}, @@ -49,11 +53,11 @@ static const struct SpriteSheet sCloudSpriteSheet = .tag = 0x1200 }; -static const struct OamData gOamData_839A9DC = +static const struct OamData sCloudSpriteOamData = { .y = 0, .affineMode = 0, - .objMode = 1, + .objMode = ST_OAM_OBJ_BLEND, .mosaic = 0, .bpp = 0, .shape = SPRITE_SHAPE(64x64), @@ -66,26 +70,26 @@ static const struct OamData gOamData_839A9DC = .affineParam = 0, }; -static const union AnimCmd gSpriteAnim_839A9E4[] = +static const union AnimCmd sCloudSpriteAnimCmd[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_END, }; -static const union AnimCmd *const gSpriteAnimTable_839A9EC[] = +static const union AnimCmd *const sCloudSpriteAnimCmds[] = { - gSpriteAnim_839A9E4, + sCloudSpriteAnimCmd, }; static const struct SpriteTemplate sCloudSpriteTemplate = { - .tileTag = 4608, - .paletteTag = 4609, - .oam = &gOamData_839A9DC, - .anims = gSpriteAnimTable_839A9EC, + .tileTag = 0x1200, + .paletteTag = 0x1201, + .oam = &sCloudSpriteOamData, + .anims = sCloudSpriteAnimCmds, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80AC6B4, + .callback = UpdateCloudSprite, }; void Clouds_InitVars(void) @@ -105,8 +109,6 @@ void Clouds_InitAll(void) Clouds_Main(); } -void CreateCloudSprites(void); - void Clouds_Main(void) { switch (gWeatherPtr->initStep) @@ -129,8 +131,6 @@ void Clouds_Main(void) } } -void sub_807E0A0(void); - bool8 Clouds_Finish(void) { switch (gWeatherPtr->finishStep) @@ -142,7 +142,7 @@ bool8 Clouds_Finish(void) case 1: if (Weather_UpdateBlend()) { - sub_807E0A0(); + DestroyCloudSprites(); gWeatherPtr->finishStep++; } return TRUE; @@ -150,49 +150,45 @@ bool8 Clouds_Finish(void) return FALSE; } -//------------------------------------------------------------------------------ -// Weather 2 -//------------------------------------------------------------------------------ - -void Weather2_InitVars(void) +void Sunny_InitVars(void) { gWeatherPtr->gammaTargetIndex = 0; gWeatherPtr->gammaStepDelay = 20; } -void Weather2_InitAll(void) +void Sunny_InitAll(void) { - Weather2_InitVars(); + Sunny_InitVars(); } -void Weather2_Main(void) +void Sunny_Main(void) { } -bool8 Weather2_Finish(void) +bool8 Sunny_Finish(void) { - return 0; + return FALSE; } -void CreateCloudSprites(void) +static void CreateCloudSprites(void) { u16 i; + u8 spriteId; + struct Sprite *sprite; if (gWeatherPtr->cloudSpritesCreated == TRUE) return; + LoadSpriteSheet(&sCloudSpriteSheet); LoadCustomWeatherSpritePalette(gUnknown_0854C290); - for (i = 0; i < 3; i++) + for (i = 0; i < NUM_CLOUD_SPRITES; i++) { - u8 spriteId = CreateSprite(&sCloudSpriteTemplate, 0, 0, 0xFF); - + spriteId = CreateSprite(&sCloudSpriteTemplate, 0, 0, 0xFF); if (spriteId != MAX_SPRITES) { - struct Sprite *sprite; - gWeatherPtr->sprites.s1.cloudSprites[i] = &gSprites[spriteId]; sprite = gWeatherPtr->sprites.s1.cloudSprites[i]; - sub_8093038(gUnknown_0854FB50[i].x + 7, gUnknown_0854FB50[i].y + 7, &sprite->pos1.x, &sprite->pos1.y); + SetSpritePosToMapCoords(sCloudSpriteMapCoords[i].x + 7, sCloudSpriteMapCoords[i].y + 7, &sprite->pos1.x, &sprite->pos1.y); sprite->coordOffsetEnabled = TRUE; } else @@ -200,28 +196,32 @@ void CreateCloudSprites(void) gWeatherPtr->sprites.s1.cloudSprites[i] = NULL; } } + gWeatherPtr->cloudSpritesCreated = TRUE; } -void sub_807E0A0(void) +static void DestroyCloudSprites(void) { u16 i; - if (gWeatherPtr->cloudSpritesCreated == FALSE) + if (!gWeatherPtr->cloudSpritesCreated) return; - for (i = 0; i < 3; i++) + + for (i = 0; i < NUM_CLOUD_SPRITES; i++) { if (gWeatherPtr->sprites.s1.cloudSprites[i] != NULL) DestroySprite(gWeatherPtr->sprites.s1.cloudSprites[i]); } + FreeSpriteTilesByTag(0x1200); gWeatherPtr->cloudSpritesCreated = FALSE; } -static void sub_80AC6B4(struct Sprite *sprite) +static void UpdateCloudSprite(struct Sprite *sprite) { + // Move 1 pixel left every 2 frames. sprite->data[0] = (sprite->data[0] + 1) & 1; - if (sprite->data[0] != 0) + if (sprite->data[0]) sprite->pos1.x--; } @@ -437,7 +437,7 @@ static const union AnimCmd *const sRainSpriteAnimCmds[] = static const struct SpriteTemplate sRainSpriteTemplate = { .tileTag = 4614, - .paletteTag = 4608, + .paletteTag = 0x1200, .oam = &sRainSpriteOamData, .anims = sRainSpriteAnimCmds, .images = NULL, @@ -475,7 +475,7 @@ void LightRain_InitVars(void) gWeatherPtr->rainSpriteVisibleCounter = 0; gWeatherPtr->rainSpriteVisibleDelay = 8; gWeatherPtr->isHeavyRain = 0; - gWeatherPtr->maxRainSprites = 10; + gWeatherPtr->targetRainSpriteCount = 10; gWeatherPtr->gammaTargetIndex = 3; gWeatherPtr->gammaStepDelay = 20; SetRainStrengthFromSoundEffect(SE_T_KOAME); @@ -524,7 +524,7 @@ bool8 LightRain_Finish(void) } else { - gWeatherPtr->maxRainSprites = 0; + gWeatherPtr->targetRainSpriteCount = 0; gWeatherPtr->finishStep++; } // fall through @@ -714,13 +714,13 @@ static bool8 CreateRainSprite(void) static bool8 UpdateVisibleRainSprites(void) { - if (gWeatherPtr->curRainSpriteIndex == gWeatherPtr->maxRainSprites) + if (gWeatherPtr->curRainSpriteIndex == gWeatherPtr->targetRainSpriteCount) return FALSE; if (++gWeatherPtr->rainSpriteVisibleCounter > gWeatherPtr->rainSpriteVisibleDelay) { gWeatherPtr->rainSpriteVisibleCounter = 0; - if (gWeatherPtr->curRainSpriteIndex < gWeatherPtr->maxRainSprites) + if (gWeatherPtr->curRainSpriteIndex < gWeatherPtr->targetRainSpriteCount) { gWeatherPtr->sprites.s1.rainSprites[gWeatherPtr->curRainSpriteIndex++]->tActive = 1; } @@ -759,39 +759,38 @@ static void DestroyRainSprites(void) // Snow //------------------------------------------------------------------------------ +static void UpdateSnowflakeSprite(struct Sprite *); +static bool8 UpdateVisibleSnowflakeSprites(void); +static bool8 CreateSnowflakeSprite(void); +static bool8 DestroySnowflakeSprite(void); +static void InitSnowflakeSpriteMovement(struct Sprite *); + void Snow_InitVars(void) { gWeatherPtr->initStep = 0; gWeatherPtr->weatherGfxLoaded = FALSE; gWeatherPtr->gammaTargetIndex = 3; gWeatherPtr->gammaStepDelay = 20; - gWeatherPtr->unknown_6E5 = 16; - gWeatherPtr->unknown_6E0 = 0; + gWeatherPtr->targetSnowflakeSpriteCount = 16; + gWeatherPtr->snowflakeVisibleCounter = 0; } -void Snow_Main(void); -void sub_807ED48(struct Sprite *); - void Snow_InitAll(void) { + u16 i; + Snow_InitVars(); while (gWeatherPtr->weatherGfxLoaded == FALSE) { - u16 i; - Snow_Main(); for (i = 0; i < gWeatherPtr->snowflakeSpriteCount; i++) - { - sub_807ED48(gWeatherPtr->sprites.s1.snowflakeSprites[i]); - } + UpdateSnowflakeSprite(gWeatherPtr->sprites.s1.snowflakeSprites[i]); } } -u8 snowflakes_progress(void); - void Snow_Main(void) { - if (gWeatherPtr->initStep == 0 && snowflakes_progress() == FALSE) + if (gWeatherPtr->initStep == 0 && !UpdateVisibleSnowflakeSprites()) { gWeatherPtr->weatherGfxLoaded = TRUE; gWeatherPtr->initStep++; @@ -803,44 +802,40 @@ bool8 Snow_Finish(void) switch (gWeatherPtr->finishStep) { case 0: - gWeatherPtr->unknown_6E5 = 0; - gWeatherPtr->unknown_6E0 = 0; + gWeatherPtr->targetSnowflakeSpriteCount = 0; + gWeatherPtr->snowflakeVisibleCounter = 0; gWeatherPtr->finishStep++; // fall through case 1: - if (snowflakes_progress() == FALSE) + if (!UpdateVisibleSnowflakeSprites()) { gWeatherPtr->finishStep++; return FALSE; } return TRUE; } + return FALSE; } -bool8 CreateSnowflakeSprite(void); -bool8 RemoveSnowflakeSprite(void); - -bool8 snowflakes_progress(void) +static bool8 UpdateVisibleSnowflakeSprites(void) { - if (gWeatherPtr->snowflakeSpriteCount == gWeatherPtr->unknown_6E5) + if (gWeatherPtr->snowflakeSpriteCount == gWeatherPtr->targetSnowflakeSpriteCount) return FALSE; - gWeatherPtr->unknown_6E0++; - if (gWeatherPtr->unknown_6E0 > 36) + if (++gWeatherPtr->snowflakeVisibleCounter > 36) { - gWeatherPtr->unknown_6E0 = 0; - if (gWeatherPtr->snowflakeSpriteCount < gWeatherPtr->unknown_6E5) + gWeatherPtr->snowflakeVisibleCounter = 0; + if (gWeatherPtr->snowflakeSpriteCount < gWeatherPtr->targetSnowflakeSpriteCount) CreateSnowflakeSprite(); else - RemoveSnowflakeSprite(); + DestroySnowflakeSprite(); } - return (gWeatherPtr->snowflakeSpriteCount != gWeatherPtr->unknown_6E5); -} -void sub_807EC40(struct Sprite *); + return gWeatherPtr->snowflakeSpriteCount != gWeatherPtr->targetSnowflakeSpriteCount; +} -static const struct OamData gOamData_839AAD4 = +static const struct OamData sSnowflakeSpriteOamData = { .y = 0, .affineMode = 0, @@ -857,231 +852,161 @@ static const struct OamData gOamData_839AAD4 = .affineParam = 0, }; -static const struct SpriteFrameImage gSpriteImageTable_839AADC[] = +static const struct SpriteFrameImage sSnowflakeSpriteImages[] = { {gWeatherSnow1Tiles, sizeof(gWeatherSnow1Tiles)}, {gWeatherSnow2Tiles, sizeof(gWeatherSnow2Tiles)}, }; -static const union AnimCmd gSpriteAnim_839AAEC[] = +static const union AnimCmd sSnowflakeAnimCmd0[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_END, }; -static const union AnimCmd gSpriteAnim_839AAF4[] = +static const union AnimCmd sSnowflakeAnimCmd1[] = { ANIMCMD_FRAME(1, 16), ANIMCMD_END, }; -static const union AnimCmd *const gSpriteAnimTable_839AAFC[] = +static const union AnimCmd *const sSnowflakeAnimCmds[] = { - gSpriteAnim_839AAEC, - gSpriteAnim_839AAF4, + sSnowflakeAnimCmd0, + sSnowflakeAnimCmd1, }; -void sub_807ED48(struct Sprite *); static const struct SpriteTemplate sSnowflakeSpriteTemplate = { .tileTag = 0xFFFF, - .paletteTag = 4608, - .oam = &gOamData_839AAD4, - .anims = gSpriteAnimTable_839AAFC, - .images = gSpriteImageTable_839AADC, + .paletteTag = 0x1200, + .oam = &sSnowflakeSpriteOamData, + .anims = sSnowflakeAnimCmds, + .images = sSnowflakeSpriteImages, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_807ED48, -}; - -// unused data -static const u16 unusedData_839AB1C[] = {0, 6, 6, 12, 18, 42, 300, 300}; - -static const struct OamData gOamData_839AB2C = -{ - .y = 0, - .affineMode = 0, - .objMode = 1, - .mosaic = 0, - .bpp = 0, - .shape = SPRITE_SHAPE(64x64), - .x = 0, - .matrixNum = 0, - .size = SPRITE_SIZE(64x64), - .tileNum = 0, - .priority = 2, - .paletteNum = 0, - .affineParam = 0, -}; - -static const union AnimCmd gSpriteAnim_839AB34[] = -{ - ANIMCMD_FRAME(0, 16), - ANIMCMD_END, -}; - -static const union AnimCmd gSpriteAnim_839AB3C[] = -{ - ANIMCMD_FRAME(32, 16), - ANIMCMD_END, -}; - -static const union AnimCmd gSpriteAnim_839AB44[] = -{ - ANIMCMD_FRAME(64, 16), - ANIMCMD_END, -}; - -static const union AnimCmd gSpriteAnim_839AB4C[] = -{ - ANIMCMD_FRAME(96, 16), - ANIMCMD_END, -}; - -static const union AnimCmd gSpriteAnim_839AB54[] = -{ - ANIMCMD_FRAME(128, 16), - ANIMCMD_END, -}; - -static const union AnimCmd gSpriteAnim_839AB5C[] = -{ - ANIMCMD_FRAME(160, 16), - ANIMCMD_END, -}; - -static const union AnimCmd *const gSpriteAnimTable_839AB64[] = -{ - gSpriteAnim_839AB34, - gSpriteAnim_839AB3C, - gSpriteAnim_839AB44, - gSpriteAnim_839AB4C, - gSpriteAnim_839AB54, - gSpriteAnim_839AB5C, -}; - -static const union AffineAnimCmd gSpriteAffineAnim_839AB7C[] = -{ - AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), - AFFINEANIMCMD_END, -}; - -static const union AffineAnimCmd *const gSpriteAffineAnimTable_839AB8C[] = -{ - gSpriteAffineAnim_839AB7C, + .callback = UpdateSnowflakeSprite, }; -static void Fog1SpriteCallback(struct Sprite *); -static const struct SpriteTemplate sFog1SpriteTemplate = -{ - .tileTag = 4609, - .paletteTag = 4608, - .oam = &gOamData_839AB2C, - .anims = gSpriteAnimTable_839AB64, - .images = NULL, - .affineAnims = gSpriteAffineAnimTable_839AB8C, - .callback = Fog1SpriteCallback, -}; +#define tPosY data[0] +#define tDeltaY data[1] +#define tWaveDelta data[2] +#define tWaveIndex data[3] +#define tSnowflakeId data[4] +#define tFallCounter data[5] +#define tFallDuration data[6] +#define tDeltaY2 data[7] -bool8 CreateSnowflakeSprite(void) +static bool8 CreateSnowflakeSprite(void) { u8 spriteId = CreateSpriteAtEnd(&sSnowflakeSpriteTemplate, 0, 0, 78); - if (spriteId == MAX_SPRITES) return FALSE; - gSprites[spriteId].data[4] = gWeatherPtr->snowflakeSpriteCount; - sub_807EC40(&gSprites[spriteId]); + + gSprites[spriteId].tSnowflakeId = gWeatherPtr->snowflakeSpriteCount; + InitSnowflakeSpriteMovement(&gSprites[spriteId]); gSprites[spriteId].coordOffsetEnabled = TRUE; gWeatherPtr->sprites.s1.snowflakeSprites[gWeatherPtr->snowflakeSpriteCount++] = &gSprites[spriteId]; return TRUE; } -bool8 RemoveSnowflakeSprite(void) +static bool8 DestroySnowflakeSprite(void) { - if (gWeatherPtr->snowflakeSpriteCount != 0) + if (gWeatherPtr->snowflakeSpriteCount) { DestroySprite(gWeatherPtr->sprites.s1.snowflakeSprites[--gWeatherPtr->snowflakeSpriteCount]); return TRUE; } + return FALSE; } -void sub_807EC40(struct Sprite *sprite) +static void InitSnowflakeSpriteMovement(struct Sprite *sprite) { - u16 r4 = ((sprite->data[4] * 5) & 7) * 30 + (Random() % 30); - u16 r6; + u16 rand; + u16 x = ((sprite->tSnowflakeId * 5) & 7) * 30 + (Random() % 30); sprite->pos1.y = -3 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); - sprite->pos1.x = r4 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); - sprite->data[0] = sprite->pos1.y * 128; + sprite->pos1.x = x - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); + sprite->tPosY = sprite->pos1.y * 128; sprite->pos2.x = 0; - r6 = Random(); - sprite->data[1] = (r6 & 3) * 5 + 64; - sprite->data[7] = (r6 & 3) * 5 + 64; - StartSpriteAnim(sprite, (r6 & 1) ? 0 : 1); - sprite->data[3] = 0; - sprite->data[2] = ((r6 & 3) == 0) ? 2 : 1; - sprite->data[6] = (r6 & 0x1F) + 210; - sprite->data[5] = 0; + rand = Random(); + sprite->tDeltaY = (rand & 3) * 5 + 64; + sprite->tDeltaY2 = sprite->tDeltaY; + StartSpriteAnim(sprite, (rand & 1) ? 0 : 1); + sprite->tWaveIndex = 0; + sprite->tWaveDelta = ((rand & 3) == 0) ? 2 : 1; + sprite->tFallDuration = (rand & 0x1F) + 210; + sprite->tFallCounter = 0; } -void sub_807ECEC(struct Sprite *sprite) +static void WaitSnowflakeSprite(struct Sprite *sprite) { if (gWeatherPtr->unknown_6E2 > 18) { sprite->invisible = FALSE; - sprite->callback = sub_807ED48; - sprite->pos1.y = 0xFA - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); - sprite->data[0] = sprite->pos1.y * 128; + sprite->callback = UpdateSnowflakeSprite; + sprite->pos1.y = 250 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); + sprite->tPosY = sprite->pos1.y * 128; gWeatherPtr->unknown_6E2 = 0; } } -void sub_807ED48(struct Sprite *sprite) +static void UpdateSnowflakeSprite(struct Sprite *sprite) { - s16 r3; - s16 r2; + s16 x; + s16 y; + + sprite->tPosY += sprite->tDeltaY; + sprite->pos1.y = sprite->tPosY >> 7; + sprite->tWaveIndex += sprite->tWaveDelta; + sprite->tWaveIndex &= 0xFF; + sprite->pos2.x = gSineTable[sprite->tWaveIndex] / 64; - sprite->data[0] += sprite->data[1]; - sprite->pos1.y = sprite->data[0] >> 7; - sprite->data[3] = (sprite->data[3] + sprite->data[2]) & 0xFF; - sprite->pos2.x = gSineTable[sprite->data[3]] / 64; + x = (sprite->pos1.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX) & 0x1FF; + if (x & 0x100) + x |= -0x100; - r3 = (sprite->pos1.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX) & 0x1FF; - if (r3 & 0x100) - r3 |= -0x100; // hmm... what is this? - if (r3 < -3) + if (x < -3) sprite->pos1.x = 242 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); - else if (r3 > 242) + else if (x > 242) sprite->pos1.x = -3 - (gSpriteCoordOffsetX + sprite->centerToCornerVecX); - r2 = (sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY) & 0xFF; - if (r2 > 163 && r2 < 171) + y = (sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY) & 0xFF; + if (y > 163 && y < 171) { sprite->pos1.y = 250 - (gSpriteCoordOffsetY + sprite->centerToCornerVecY); - sprite->data[0] = sprite->pos1.y * 128; - sprite->data[5] = 0; - sprite->data[6] = 220; + sprite->tPosY = sprite->pos1.y * 128; + sprite->tFallCounter = 0; + sprite->tFallDuration = 220; } - else if (r2 > 242 && r2 < 250) + else if (y > 242 && y < 250) { sprite->pos1.y = 163; - sprite->data[0] = sprite->pos1.y * 128; - sprite->data[5] = 0; - sprite->data[6] = 220; + sprite->tPosY = sprite->pos1.y * 128; + sprite->tFallCounter = 0; + sprite->tFallDuration = 220; sprite->invisible = TRUE; - sprite->callback = sub_807ECEC; + sprite->callback = WaitSnowflakeSprite; } - sprite->data[5]++; - if (sprite->data[5] == sprite->data[6]) + if (++sprite->tFallCounter == sprite->tFallDuration) { - sub_807EC40(sprite); + InitSnowflakeSpriteMovement(sprite); sprite->pos1.y = 250; sprite->invisible = TRUE; - sprite->callback = sub_807ECEC; + sprite->callback = WaitSnowflakeSprite; } } +#undef tPosY +#undef tDeltaY +#undef tWaveDelta +#undef tWaveIndex +#undef tSnowflakeId +#undef tFallCounter +#undef tFallDuration +#undef tDeltaY2 + //------------------------------------------------------------------------------ // Medium Rain //------------------------------------------------------------------------------ @@ -1093,16 +1018,14 @@ void MedRain_InitVars(void) gWeatherPtr->rainSpriteVisibleCounter = 0; gWeatherPtr->rainSpriteVisibleDelay = 4; gWeatherPtr->isHeavyRain = 0; - gWeatherPtr->maxRainSprites = 16; + gWeatherPtr->targetRainSpriteCount = 16; gWeatherPtr->gammaTargetIndex = 3; gWeatherPtr->gammaStepDelay = 20; gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment - gWeatherPtr->unknown_6ED = 0; + gWeatherPtr->thunderTriggered = 0; SetRainStrengthFromSoundEffect(SE_T_AME); } -void Rain_Main(void); - void MedRain_InitAll(void) { MedRain_InitVars(); @@ -1114,6 +1037,9 @@ void MedRain_InitAll(void) // Heavy Rain //------------------------------------------------------------------------------ +static void UpdateThunderSound(void); +static void SetThunderCounter(u16); + void HeavyRain_InitVars(void) { gWeatherPtr->initStep = 0; @@ -1121,7 +1047,7 @@ void HeavyRain_InitVars(void) gWeatherPtr->rainSpriteVisibleCounter = 0; gWeatherPtr->rainSpriteVisibleDelay = 4; gWeatherPtr->isHeavyRain = 1; - gWeatherPtr->maxRainSprites = 24; + gWeatherPtr->targetRainSpriteCount = 24; gWeatherPtr->gammaTargetIndex = 3; gWeatherPtr->gammaStepDelay = 20; gWeatherPtr->weatherGfxLoaded = FALSE; // duplicate assignment @@ -1135,9 +1061,6 @@ void HeavyRain_InitAll(void) Rain_Main(); } -static void UpdateThunderSound(void); -static void SetThunderCounter(u16); - void Rain_Main(void) { UpdateThunderSound(); @@ -1148,20 +1071,19 @@ void Rain_Main(void) gWeatherPtr->initStep++; break; case 1: - if (CreateRainSprite()) - break; - gWeatherPtr->initStep++; + if (!CreateRainSprite()) + gWeatherPtr->initStep++; break; case 2: - if (UpdateVisibleRainSprites()) - break; - gWeatherPtr->weatherGfxLoaded = TRUE; - gWeatherPtr->initStep++; + if (!UpdateVisibleRainSprites()) + { + gWeatherPtr->weatherGfxLoaded = TRUE; + gWeatherPtr->initStep++; + } break; case 3: - if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_CHANGING_WEATHER) - break; - gWeatherPtr->initStep = 6; + if (gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_CHANGING_WEATHER) + gWeatherPtr->initStep = 6; break; case 4: gWeatherPtr->unknown_6EA = 1; @@ -1169,9 +1091,8 @@ void Rain_Main(void) gWeatherPtr->initStep++; // fall through case 5: - if (--gWeatherPtr->unknown_6E6 != 0) - break; - gWeatherPtr->initStep++; + if (--gWeatherPtr->unknown_6E6 == 0) + gWeatherPtr->initStep++; break; case 6: gWeatherPtr->unknown_6EA = 1; @@ -1186,57 +1107,60 @@ void Rain_Main(void) sub_80ABC48(19); if (gWeatherPtr->unknown_6EB == 0 && gWeatherPtr->unknown_6EC == 1) SetThunderCounter(20); + gWeatherPtr->unknown_6E6 = (Random() % 3) + 6; gWeatherPtr->initStep++; break; case 9: - if (--gWeatherPtr->unknown_6E6 != 0) - break; - sub_80ABC48(3); - gWeatherPtr->unknown_6EA = 1; - if (--gWeatherPtr->unknown_6EC != 0) - { - gWeatherPtr->unknown_6E6 = (Random() % 16) + 60; - gWeatherPtr->initStep = 10; - } - else if (gWeatherPtr->unknown_6EB == 0) + if (--gWeatherPtr->unknown_6E6 == 0) { - gWeatherPtr->initStep = 4; - } - else - { - gWeatherPtr->initStep = 11; + sub_80ABC48(3); + gWeatherPtr->unknown_6EA = 1; + if (--gWeatherPtr->unknown_6EC != 0) + { + gWeatherPtr->unknown_6E6 = (Random() % 16) + 60; + gWeatherPtr->initStep = 10; + } + else if (gWeatherPtr->unknown_6EB == 0) + { + gWeatherPtr->initStep = 4; + } + else + { + gWeatherPtr->initStep = 11; + } } break; case 10: - if (--gWeatherPtr->unknown_6E6 != 0) - break; - gWeatherPtr->initStep = 8; + if (--gWeatherPtr->unknown_6E6 == 0) + gWeatherPtr->initStep = 8; break; case 11: gWeatherPtr->unknown_6E6 = (Random() % 16) + 60; gWeatherPtr->initStep++; break; case 12: - if (--gWeatherPtr->unknown_6E6 != 0) - break; - SetThunderCounter(100); - sub_80ABC48(19); - // Why use "% 16" everywhere else and "& 0xF" here. So dumb. - gWeatherPtr->unknown_6E6 = (Random() & 0xF) + 30; - gWeatherPtr->initStep++; + if (--gWeatherPtr->unknown_6E6 == 0) + { + SetThunderCounter(100); + sub_80ABC48(19); + gWeatherPtr->unknown_6E6 = (Random() & 0xF) + 30; + gWeatherPtr->initStep++; + } break; case 13: - if (--gWeatherPtr->unknown_6E6 != 0) - break; - sub_80ABC7C(19, 3, 5); - gWeatherPtr->initStep++; + if (--gWeatherPtr->unknown_6E6 == 0) + { + sub_80ABC7C(19, 3, 5); + gWeatherPtr->initStep++; + } break; case 14: - if (gWeatherPtr->palProcessingState != WEATHER_PAL_STATE_IDLE) - break; - gWeatherPtr->unknown_6EA = 1; - gWeatherPtr->initStep = 4; + if (gWeatherPtr->palProcessingState == WEATHER_PAL_STATE_IDLE) + { + gWeatherPtr->unknown_6EA = 1; + gWeatherPtr->initStep = 4; + } break; } } @@ -1251,23 +1175,26 @@ bool8 Rain_Finish(void) // fall through case 1: Rain_Main(); - if (gWeatherPtr->unknown_6EA != 0) + if (gWeatherPtr->unknown_6EA) { if (gWeatherPtr->nextWeather == WEATHER_RAIN_LIGHT || gWeatherPtr->nextWeather == WEATHER_RAIN_MED || gWeatherPtr->nextWeather == WEATHER_RAIN_HEAVY) return FALSE; - gWeatherPtr->maxRainSprites = 0; + + gWeatherPtr->targetRainSpriteCount = 0; gWeatherPtr->finishStep++; } break; case 2: - if (UpdateVisibleRainSprites()) - break; - DestroyRainSprites(); - gWeatherPtr->unknown_6ED = 0; - gWeatherPtr->finishStep++; - return FALSE; + if (!UpdateVisibleRainSprites()) + { + DestroyRainSprites(); + gWeatherPtr->thunderTriggered = 0; + gWeatherPtr->finishStep++; + return FALSE; + } + break; default: return FALSE; } @@ -1276,26 +1203,28 @@ bool8 Rain_Finish(void) static void SetThunderCounter(u16 max) { - if (gWeatherPtr->unknown_6ED == 0) + if (gWeatherPtr->thunderTriggered == 0) { gWeatherPtr->thunderCounter = Random() % max; - gWeatherPtr->unknown_6ED = 1; + gWeatherPtr->thunderTriggered = 1; } } static void UpdateThunderSound(void) { - if (gWeatherPtr->unknown_6ED == 1) + if (gWeatherPtr->thunderTriggered == 1) { if (gWeatherPtr->thunderCounter == 0) { if (IsSEPlaying()) return; + if (Random() & 1) PlaySE(SE_T_KAMI); else PlaySE(SE_T_KAMI2); - gWeatherPtr->unknown_6ED = 0; + + gWeatherPtr->thunderTriggered = 0; } else { @@ -1308,6 +1237,95 @@ static void UpdateThunderSound(void) // Fog 1 //------------------------------------------------------------------------------ +// unused data +static const u16 unusedData_839AB1C[] = {0, 6, 6, 12, 18, 42, 300, 300}; + +static const struct OamData gOamData_839AB2C = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = SPRITE_SHAPE(64x64), + .x = 0, + .matrixNum = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd gSpriteAnim_839AB34[] = +{ + ANIMCMD_FRAME(0, 16), + ANIMCMD_END, +}; + +static const union AnimCmd gSpriteAnim_839AB3C[] = +{ + ANIMCMD_FRAME(32, 16), + ANIMCMD_END, +}; + +static const union AnimCmd gSpriteAnim_839AB44[] = +{ + ANIMCMD_FRAME(64, 16), + ANIMCMD_END, +}; + +static const union AnimCmd gSpriteAnim_839AB4C[] = +{ + ANIMCMD_FRAME(96, 16), + ANIMCMD_END, +}; + +static const union AnimCmd gSpriteAnim_839AB54[] = +{ + ANIMCMD_FRAME(128, 16), + ANIMCMD_END, +}; + +static const union AnimCmd gSpriteAnim_839AB5C[] = +{ + ANIMCMD_FRAME(160, 16), + ANIMCMD_END, +}; + +static const union AnimCmd *const gSpriteAnimTable_839AB64[] = +{ + gSpriteAnim_839AB34, + gSpriteAnim_839AB3C, + gSpriteAnim_839AB44, + gSpriteAnim_839AB4C, + gSpriteAnim_839AB54, + gSpriteAnim_839AB5C, +}; + +static const union AffineAnimCmd gSpriteAffineAnim_839AB7C[] = +{ + AFFINEANIMCMD_FRAME(0x200, 0x200, 0, 0), + AFFINEANIMCMD_END, +}; + +static const union AffineAnimCmd *const gSpriteAffineAnimTable_839AB8C[] = +{ + gSpriteAffineAnim_839AB7C, +}; + +static void Fog1SpriteCallback(struct Sprite *); +static const struct SpriteTemplate sFog1SpriteTemplate = +{ + .tileTag = 0x1201, + .paletteTag = 0x1200, + .oam = &gOamData_839AB2C, + .anims = gSpriteAnimTable_839AB64, + .images = NULL, + .affineAnims = gSpriteAffineAnimTable_839AB8C, + .callback = Fog1SpriteCallback, +}; + void Fog1_Main(void); static void CreateFog1Sprites(void); static void DestroyFog1Sprites(void); @@ -1320,8 +1338,8 @@ void Fog1_InitVars(void) gWeatherPtr->gammaStepDelay = 20; if (gWeatherPtr->fog1SpritesCreated == 0) { - gWeatherPtr->unknown_6F0 = 0; - gWeatherPtr->unknown_6F2 = 0; + gWeatherPtr->fog1ScrollCounter = 0; + gWeatherPtr->fog1ScrollOffset = 0; gWeatherPtr->fog1ScrollPosX = 0; Weather_SetBlendCoeffs(0, 16); } @@ -1336,11 +1354,11 @@ void Fog1_InitAll(void) void Fog1_Main(void) { - gWeatherPtr->fog1ScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->unknown_6F2) & 0xFF; - if (++gWeatherPtr->unknown_6F0 > 3) + gWeatherPtr->fog1ScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->fog1ScrollOffset) & 0xFF; + if (++gWeatherPtr->fog1ScrollCounter > 3) { - gWeatherPtr->unknown_6F0 = 0; - gWeatherPtr->unknown_6F2++; + gWeatherPtr->fog1ScrollCounter = 0; + gWeatherPtr->fog1ScrollOffset++; } switch (gWeatherPtr->initStep) { @@ -1364,12 +1382,13 @@ void Fog1_Main(void) bool8 Fog1_Finish(void) { - gWeatherPtr->fog1ScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->unknown_6F2) & 0xFF; - if (++gWeatherPtr->unknown_6F0 > 3) + gWeatherPtr->fog1ScrollPosX = (gSpriteCoordOffsetX - gWeatherPtr->fog1ScrollOffset) & 0xFF; + if (++gWeatherPtr->fog1ScrollCounter > 3) { - gWeatherPtr->unknown_6F0 = 0; - gWeatherPtr->unknown_6F2++; + gWeatherPtr->fog1ScrollCounter = 0; + gWeatherPtr->fog1ScrollOffset++; } + switch (gWeatherPtr->finishStep) { case 0: @@ -1377,9 +1396,8 @@ bool8 Fog1_Finish(void) gWeatherPtr->finishStep++; break; case 1: - if (!Weather_UpdateBlend()) - break; - gWeatherPtr->finishStep++; + if (Weather_UpdateBlend()) + gWeatherPtr->finishStep++; break; case 2: DestroyFog1Sprites(); @@ -1391,15 +1409,15 @@ bool8 Fog1_Finish(void) return TRUE; } -#define sprColumn data[0] +#define tSpriteColumn data[0] static void Fog1SpriteCallback(struct Sprite *sprite) { sprite->pos2.y = (u8)gSpriteCoordOffsetY; - sprite->pos1.x = gWeatherPtr->fog1ScrollPosX + 32 + sprite->sprColumn * 64; - if (sprite->pos1.x > 0x10F) + sprite->pos1.x = gWeatherPtr->fog1ScrollPosX + 32 + sprite->tSpriteColumn * 64; + if (sprite->pos1.x > 271) { - sprite->pos1.x = 480 + gWeatherPtr->fog1ScrollPosX - (4 - sprite->sprColumn) * 64; + sprite->pos1.x = 480 + gWeatherPtr->fog1ScrollPosX - (4 - sprite->tSpriteColumn) * 64; sprite->pos1.x &= 0x1FF; } } @@ -1407,21 +1425,24 @@ static void Fog1SpriteCallback(struct Sprite *sprite) static void CreateFog1Sprites(void) { u16 i; + u8 spriteId; + struct Sprite *sprite; if (!gWeatherPtr->fog1SpritesCreated) { - struct SpriteSheet fog1SpriteSheet = {gWeatherFog1Tiles, sizeof(gWeatherFog1Tiles), 0x1201}; - + struct SpriteSheet fog1SpriteSheet = { + .data = gWeatherFog1Tiles, + .size = sizeof(gWeatherFog1Tiles), + .tag = 0x1201, + }; LoadSpriteSheet(&fog1SpriteSheet); - for (i = 0; i < 20; i++) + for (i = 0; i < NUM_FOG_SPRITES; i++) { - u8 spriteId = CreateSpriteAtEnd(&sFog1SpriteTemplate, 0, 0, 0xFF); - + spriteId = CreateSpriteAtEnd(&sFog1SpriteTemplate, 0, 0, 0xFF); if (spriteId != MAX_SPRITES) { - struct Sprite *sprite = &gSprites[spriteId]; - - sprite->sprColumn = i % 5; + sprite = &gSprites[spriteId]; + sprite->tSpriteColumn = i % 5; sprite->pos1.x = (i % 5) * 64 + 32; sprite->pos1.y = (i / 5) * 64 + 32; gWeatherPtr->sprites.s2.fog1Sprites[i] = sprite; @@ -1431,36 +1452,38 @@ static void CreateFog1Sprites(void) gWeatherPtr->sprites.s2.fog1Sprites[i] = NULL; } } + gWeatherPtr->fog1SpritesCreated = TRUE; } } -#undef sprColumn - static void DestroyFog1Sprites(void) { u16 i; if (gWeatherPtr->fog1SpritesCreated) { - for (i = 0; i < 20; i++) + for (i = 0; i < NUM_FOG_SPRITES; i++) { if (gWeatherPtr->sprites.s2.fog1Sprites[i] != NULL) DestroySprite(gWeatherPtr->sprites.s2.fog1Sprites[i]); } + FreeSpriteTilesByTag(0x1201); gWeatherPtr->fog1SpritesCreated = 0; } } +#undef tSpriteColumn + //------------------------------------------------------------------------------ // Volcanic ash //------------------------------------------------------------------------------ -void Ash_Main(void); -void LoadAshSpriteSheet(void); -void CreateAshSprites(void); -void DestroyAshSprites(void); +static void LoadAshSpriteSheet(void); +static void CreateAshSprites(void); +static void DestroyAshSprites(void); +static void UpdateAshSprite(struct Sprite *); void Ash_InitVars(void) { @@ -1472,7 +1495,7 @@ void Ash_InitVars(void) if (!gWeatherPtr->ashSpritesCreated) { Weather_SetBlendCoeffs(0, 16); - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(64, 63)); // Those aren't even valid coefficients! + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(64, 63)); // These aren't valid blend coefficients! } } @@ -1485,9 +1508,10 @@ void Ash_InitAll(void) void Ash_Main(void) { - gWeatherPtr->unknown_6FC = gSpriteCoordOffsetX & 0x1FF; - while (gWeatherPtr->unknown_6FC > 0xEF) - gWeatherPtr->unknown_6FC -= 0xF0; + gWeatherPtr->baseAshSpritesX = gSpriteCoordOffsetX & 0x1FF; + while (gWeatherPtr->baseAshSpritesX >= 240) + gWeatherPtr->baseAshSpritesX -= 240; + switch (gWeatherPtr->initStep) { case 0: @@ -1497,14 +1521,16 @@ void Ash_Main(void) case 1: if (!gWeatherPtr->ashSpritesCreated) CreateAshSprites(); + Weather_SetTargetBlendCoeffs(16, 0, 1); gWeatherPtr->initStep++; break; case 2: - if (!Weather_UpdateBlend()) - break; - gWeatherPtr->weatherGfxLoaded = TRUE; - gWeatherPtr->initStep++; + if (Weather_UpdateBlend()) + { + gWeatherPtr->weatherGfxLoaded = TRUE; + gWeatherPtr->initStep++; + } break; default: Weather_UpdateBlend(); @@ -1521,10 +1547,11 @@ bool8 Ash_Finish(void) gWeatherPtr->finishStep++; break; case 1: - if (!Weather_UpdateBlend()) - break; - DestroyAshSprites(); - gWeatherPtr->finishStep++; + if (Weather_UpdateBlend()) + { + DestroyAshSprites(); + gWeatherPtr->finishStep++; + } break; case 2: SetGpuReg(REG_OFFSET_BLDALPHA, 0); @@ -1536,18 +1563,23 @@ bool8 Ash_Finish(void) return TRUE; } -static const struct SpriteSheet sAshSpriteSheet = {gWeatherAshTiles, sizeof(gWeatherAshTiles), 0x1202}; +static const struct SpriteSheet sAshSpriteSheet = +{ + .data = gWeatherAshTiles, + .size = sizeof(gWeatherAshTiles), + .tag = 0x1202, +}; -void LoadAshSpriteSheet(void) +static void LoadAshSpriteSheet(void) { LoadSpriteSheet(&sAshSpriteSheet); } -const struct OamData gOamData_839ABB8 = +static const struct OamData sAshSpriteOamData = { .y = 0, .affineMode = 0, - .objMode = 1, + .objMode = ST_OAM_OBJ_BLEND, .mosaic = 0, .bpp = 0, .shape = SPRITE_SHAPE(64x64), @@ -1560,48 +1592,52 @@ const struct OamData gOamData_839ABB8 = .affineParam = 0, }; -const union AnimCmd gSpriteAnim_839ABC0[] = +static const union AnimCmd sAshSpriteAnimCmd0[] = { ANIMCMD_FRAME(0, 60), ANIMCMD_FRAME(64, 60), ANIMCMD_JUMP(0), }; -const union AnimCmd *const gSpriteAnimTable_839ABCC[] = +static const union AnimCmd *const sAshSpriteAnimCmds[] = { - gSpriteAnim_839ABC0, + sAshSpriteAnimCmd0, }; -void sub_807FAA8(struct Sprite *); static const struct SpriteTemplate sAshSpriteTemplate = { .tileTag = 4610, - .paletteTag = 4608, - .oam = &gOamData_839ABB8, - .anims = gSpriteAnimTable_839ABCC, + .paletteTag = 0x1200, + .oam = &sAshSpriteOamData, + .anims = sAshSpriteAnimCmds, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_807FAA8, + .callback = UpdateAshSprite, }; -void CreateAshSprites(void) +#define tOffsetY data[0] +#define tCounterY data[1] +#define tSpriteColumn data[2] +#define tSpriteRow data[3] + +static void CreateAshSprites(void) { u8 i; + u8 spriteId; + struct Sprite *sprite; if (!gWeatherPtr->ashSpritesCreated) { - for (i = 0; i < 20; i++) + for (i = 0; i < NUM_ASH_SPRITES; i++) { - u8 spriteId = CreateSpriteAtEnd(&sAshSpriteTemplate, 0, 0, 0x4E); - + spriteId = CreateSpriteAtEnd(&sAshSpriteTemplate, 0, 0, 0x4E); if (spriteId != MAX_SPRITES) { - struct Sprite *sprite = &gSprites[spriteId]; - - sprite->data[1] = 0; - sprite->data[2] = (u8)(i % 5); - sprite->data[3] = (u8)(i / 5); - sprite->data[0] = sprite->data[3] * 64 + 32; + sprite = &gSprites[spriteId]; + sprite->tCounterY = 0; + sprite->tSpriteColumn = (u8)(i % 5); + sprite->tSpriteRow = (u8)(i / 5); + sprite->tOffsetY = sprite->tSpriteRow * 64 + 32; gWeatherPtr->sprites.s2.ashSprites[i] = sprite; } else @@ -1609,43 +1645,50 @@ void CreateAshSprites(void) gWeatherPtr->sprites.s2.ashSprites[i] = NULL; } } + gWeatherPtr->ashSpritesCreated = TRUE; } } -void DestroyAshSprites(void) +static void DestroyAshSprites(void) { u16 i; if (gWeatherPtr->ashSpritesCreated) { - for (i = 0; i < 20; i++) + for (i = 0; i < NUM_ASH_SPRITES; i++) { if (gWeatherPtr->sprites.s2.ashSprites[i] != NULL) DestroySprite(gWeatherPtr->sprites.s2.ashSprites[i]); } + FreeSpriteTilesByTag(0x1202); gWeatherPtr->ashSpritesCreated = FALSE; } } -void sub_807FAA8(struct Sprite *sprite) +static void UpdateAshSprite(struct Sprite *sprite) { - sprite->data[1]++; - if (sprite->data[1] > 5) + if (++sprite->tCounterY > 5) { - sprite->data[1] = 0; - sprite->data[0]++; + sprite->tCounterY = 0; + sprite->tOffsetY++; } - sprite->pos1.y = gSpriteCoordOffsetY + sprite->data[0]; - sprite->pos1.x = gWeatherPtr->unknown_6FC + 32 + sprite->data[2] * 64; + + sprite->pos1.y = gSpriteCoordOffsetY + sprite->tOffsetY; + sprite->pos1.x = gWeatherPtr->baseAshSpritesX + 32 + sprite->tSpriteColumn * 64; if (sprite->pos1.x > 271) { - sprite->pos1.x = gWeatherPtr->unknown_6FC + 0x1E0 - (4 - sprite->data[2]) * 64; + sprite->pos1.x = gWeatherPtr->baseAshSpritesX + 480 - (4 - sprite->tSpriteColumn) * 64; sprite->pos1.x &= 0x1FF; } } +#undef tOffsetY +#undef tCounterY +#undef tSpriteColumn +#undef tSpriteRow + //------------------------------------------------------------------------------ // Fog 2 //------------------------------------------------------------------------------ @@ -1656,8 +1699,8 @@ void Fog2_InitVars(void) gWeatherPtr->weatherGfxLoaded = 0; gWeatherPtr->gammaTargetIndex = 0; gWeatherPtr->gammaStepDelay = 20; - gWeatherPtr->unknown_6F0 = 0; - gWeatherPtr->unknown_6F2 = 1; + gWeatherPtr->fog1ScrollCounter = 0; + gWeatherPtr->fog1ScrollOffset = 1; if (gWeatherPtr->fog2SpritesCreated == 0) { gWeatherPtr->unknown_71C = 0; @@ -1812,7 +1855,7 @@ void Fog2SpriteCallback(struct Sprite *); const struct SpriteTemplate sFog2SpriteTemplate = { .tileTag = 4611, - .paletteTag = 4608, + .paletteTag = 0x1200, .oam = &gOamData_839ABF0, .anims = gSpriteAnimTable_839AC00, .images = NULL, @@ -2017,8 +2060,8 @@ const union AnimCmd *const gSpriteAnimTable_839AC34[] = void SandstormSpriteCallback1(struct Sprite *); const struct SpriteTemplate sSandstormSpriteTemplate = { - .tileTag = 4612, - .paletteTag = 4609, + .tileTag = 0x1204, + .paletteTag = 0x1201, .oam = &gOamData_839AC1C, .anims = gSpriteAnimTable_839AC34, .images = NULL, @@ -2250,7 +2293,7 @@ void unc_0807DAB4(struct Sprite *); const struct SpriteTemplate gSpriteTemplate_839ACBC = { .tileTag = 4613, - .paletteTag = 4608, + .paletteTag = 0x1200, .oam = &gUnknown_08524904, .anims = gSpriteAnimTable_839ACB8, .images = NULL, diff --git a/src/overworld.c b/src/overworld.c index ce1e21ab1..ae6efefd7 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -2960,7 +2960,7 @@ static void InitLinkPlayerEventObjectPos(struct EventObject *eventObj, s16 x, s1 eventObj->currentCoords.y = y; eventObj->previousCoords.x = x; eventObj->previousCoords.y = y; - sub_8093038(x, y, &eventObj->initialCoords.x, &eventObj->initialCoords.y); + SetSpritePosToMapCoords(x, y, &eventObj->initialCoords.x, &eventObj->initialCoords.y); eventObj->initialCoords.x += 8; EventObjectUpdateZCoord(eventObj); } -- cgit v1.2.3 From 4be97b2dc691d5215ae402a345708b3e207ceb9f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 1 Apr 2019 18:42:57 -0400 Subject: through sub_801A960 --- src/union_room.c | 2 - src/union_room_battle.c | 466 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 466 insertions(+), 2 deletions(-) create mode 100644 src/union_room_battle.c (limited to 'src') diff --git a/src/union_room.c b/src/union_room.c index ad33112e4..88ac65baa 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -62,8 +62,6 @@ EWRAM_DATA struct TradeUnkStruct gUnknown_02022C40 = {}; IWRAM_DATA struct UnkStruct_Leader *gUnknown_03000DA0; IWRAM_DATA struct UnkStruct_Group *gUnknown_03000DA4; IWRAM_DATA struct UnkStruct_URoom *gUnknown_03000DA8; -IWRAM_DATA void *gUnknown_03000DAC; -IWRAM_DATA bool32 gUnknown_03000DB0; // this file's functions void sub_80173E0(u8 windowId, u8 arg1, const u8 *str, u8 arg3, u8 arg4, u8 arg5); diff --git a/src/union_room_battle.c b/src/union_room_battle.c new file mode 100644 index 000000000..b571e803a --- /dev/null +++ b/src/union_room_battle.c @@ -0,0 +1,466 @@ +#include "global.h" +#include "battle.h" +#include "task.h" +#include "text.h" +#include "main.h" +#include "bg.h" +#include "palette.h" +#include "gpu_regs.h" +#include "alloc.h" +#include "menu.h" +#include "window.h" +#include "scanline_effect.h" +#include "m4a.h" +#include "dynamic_placeholder_text_util.h" +#include "overworld.h" +#include "strings.h" +#include "string_util.h" +#include "international_string_util.h" +#include "sound.h" +#include "constants/songs.h" +#include "union_room.h" +#include "union_room_battle.h" + +struct UnkStruct_3000DAC +{ + /*0x00*/ u32 unk00[4]; + /*0x10*/ u32 unk10[4]; + /*0x20*/ u32 unk20[16]; + /*0x60*/ u8 taskId; + /*0x61*/ u8 unk61; + /*0x62*/ u8 filler_62[10]; +}; + +IWRAM_DATA struct UnkStruct_3000DAC * gUnknown_03000DAC; +IWRAM_DATA bool32 gUnknown_03000DB0; + +void sub_801A43C(void); +void sub_801A6C0(u8 taskId); +static void sub_801A8B0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 mode); +bool32 sub_801AA30(u32 * a0, u32 * a1, u32 * a2, u8 a3); + +const u16 gWirelessInfoScreenPal[] = INCBIN_U16("graphics/interface/wireless_info_screen.gbapal"); +const u32 gWirelessInfoScreenGfx[] = INCBIN_U32("graphics/interface/wireless_info_screen.4bpp.lz"); +const u32 gWirelessInfoScreenTilemap[] = INCBIN_U32("graphics/interface/wireless_info_screen.bin.lz"); + +const struct BgTemplate gUnknown_082F0D34[] = { + { + .bg = 0, + .charBaseIndex = 2, + .mapBaseIndex = 0x1F, + .priority = 0 + }, { + .bg = 1, + .charBaseIndex = 0, + .mapBaseIndex = 0x08, + .priority = 1 + } +}; + +const struct WindowTemplate gUnknown_082F0D3C[] = { + { + .bg = 0x00, + .tilemapLeft = 0x03, + .tilemapTop = 0x00, + .width = 0x18, + .height = 0x03, + .paletteNum = 0x0f, + .baseBlock = 0x0001 + }, { + .bg = 0x00, + .tilemapLeft = 0x03, + .tilemapTop = 0x04, + .width = 0x15, + .height = 0x0f, + .paletteNum = 0x0f, + .baseBlock = 0x0049 + }, { + .bg = 0x00, + .tilemapLeft = 0x18, + .tilemapTop = 0x04, + .width = 0x03, + .height = 0x0f, + .paletteNum = 0x0f, + .baseBlock = 0x0184 + }, + { 0xFF } +}; + +const u8 *const gUnknown_082F0D5C[] = { + gText_WirelessCommStatus, + gText_PeopleTrading, + gText_PeopleBattling, + gText_PeopleInUnionRoom, + gText_PeopleCommunicating +}; + +const u8 gUnknown_082F0D70[][3] = { + {0x01, 0x01, 0x02}, + {0x02, 0x01, 0x02}, + {0x03, 0x01, 0x04}, + {0x04, 0x00, 0x02}, + {0x06, 0x03, 0x02}, + {0x07, 0x03, 0x02}, + {0x09, 0x03, 0x00}, + {0x0a, 0x03, 0x00}, + {0x0b, 0x03, 0x00}, + {0x0c, 0xff, 0x00}, + {0x0d, 0x00, 0x00}, + {0x10, 0x03, 0x00}, + {0x0f, 0x03, 0x00}, + {0x40, 0x02, 0x01}, + {0x41, 0x02, 0x02}, + {0x44, 0x02, 0x02}, + {0x45, 0x02, 0x00}, + {0x48, 0x02, 0x02}, + {0x54, 0x02, 0x01}, + {0x53, 0x02, 0x02}, + {0x51, 0x02, 0x01}, + {0x52, 0x02, 0x01}, + {0x15, 0x03, 0x02}, + {0x16, 0x03, 0x02}, + {0x17, 0x03, 0x00}, + {0x18, 0x03, 0x00}, + {0x19, 0x03, 0x00}, + {0x1a, 0x03, 0x00}, + {0x1b, 0x03, 0x00}, + {0x1c, 0x01, 0x02}, + {0x0e, 0x01, 0x02} +}; + +void sub_801A3F4(void) +{ + if (!IsDma3ManagerBusyWithBgCopy()) + { + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + } +} + +void sub_801A418(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_801A42C(void) +{ + SetMainCallback2(sub_801A43C); +} + +void sub_801A43C(void) +{ + SetGpuReg(REG_OFFSET_DISPCNT, 0x0000); + gUnknown_03000DAC = AllocZeroed(sizeof(struct UnkStruct_3000DAC)); + SetVBlankCallback(NULL); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_082F0D34, ARRAY_COUNT(gUnknown_082F0D34)); + SetBgTilemapBuffer(1, Alloc(0x800)); + SetBgTilemapBuffer(0, Alloc(0x800)); + DecompressAndLoadBgGfxUsingHeap(1, gWirelessInfoScreenGfx, 0, 0, 0); + CopyToBgTilemapBuffer(1, gWirelessInfoScreenTilemap, 0, 0); + InitWindows(gUnknown_082F0D3C); + DeactivateAllTextPrinters(); + ResetPaletteFade(); + ResetSpriteData(); + ResetTasks(); + ScanlineEffect_Stop(); + m4aSoundVSyncOn(); + SetVBlankCallback(sub_801A418); + gUnknown_03000DAC->taskId = CreateTask(sub_801A6C0, 0); + gUnknown_03000DAC->unk61 = sub_8013C40(); + gUnknown_03000DAC->unk10[3] = 1; + ChangeBgX(0, 0, 0); + ChangeBgY(0, 0, 0); + ChangeBgX(1, 0, 0); + ChangeBgY(1, 0, 0); + LoadPalette(gWirelessInfoScreenPal, 0x00, 0x20); + Menu_LoadStdPalAt(0xF0); + DynamicPlaceholderTextUtil_Reset(); + FillBgTilemapBufferRect(0, 0, 0, 0, 32, 32, 0x0F); + CopyBgTilemapBufferToVram(1); + SetMainCallback2(sub_801A3F4); + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_801A584(void) +{ + s32 i; + FreeAllWindowBuffers(); + for (i = 0; i < 2; i++) + { + Free(GetBgTilemapBuffer(i)); + } + Free(gUnknown_03000DAC); + SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); +} + +void sub_801A5BC(s16 * a0, s16 * a1) +{ + if (++(*a0) > 5) + { + if (++(*a1) == 14) + { + *a1 = 0; + } + *a0 = 0; + } + LoadPalette(gWirelessInfoScreenPal + 16 * (*a1 + 2), 0, 0x10); +} + +void sub_801A600(void) +{ + s32 i; + FillWindowPixelBuffer(0, 0); + FillWindowPixelBuffer(1, 0); + FillWindowPixelBuffer(2, 0); + sub_801A8B0(0, 1, gUnknown_082F0D5C[0], GetStringCenterAlignXOffset(1, gUnknown_082F0D5C[0], 0xC0), 6, 3); + for (i = 0; i < 3; i++) + { + sub_801A8B0(1, 1, gUnknown_082F0D5C[i + 1], 0, 30 * i + 8, 1); + } + sub_801A8B0(1, 1, gUnknown_082F0D5C[i + 1], 0, 30 * i + 8, 2); + PutWindowTilemap(0); + CopyWindowToVram(0, 2); + PutWindowTilemap(1); + CopyWindowToVram(1, 2); +} + +void sub_801A6C0(u8 taskId) +{ + s32 i; + switch (gTasks[taskId].data[0]) + { + case 0: + sub_801A600(); + gTasks[taskId].data[0]++; + break; + case 1: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + ShowBg(1); + CopyBgTilemapBufferToVram(0); + ShowBg(0); + gTasks[taskId].data[0]++; + break; + case 2: + if (!gPaletteFade.active) + { + gTasks[taskId].data[0]++; + } + break; + case 3: + if (sub_801AA30(gUnknown_03000DAC->unk00, gUnknown_03000DAC->unk10, gUnknown_03000DAC->unk20, gUnknown_03000DAC->unk61)) + { + FillWindowPixelBuffer(2, 0); + for (i = 0; i < 4; i++) + { + ConvertIntToDecimalStringN(gStringVar4, gUnknown_03000DAC->unk00[i], STR_CONV_MODE_RIGHT_ALIGN, 2); + if (i != 3) + { + sub_801A8B0(2, 1, gStringVar4, 12, 30 * i + 8, 1); + } + else + { + sub_801A8B0(2, 1, gStringVar4, 12, 98, 2); + } + } + PutWindowTilemap(2); + CopyWindowToVram(2, 3); + } + if (({gMain.newKeys & A_BUTTON;}) || ({gMain.newKeys & B_BUTTON;})) + { + PlaySE(SE_SELECT); + gTasks[gUnknown_03000DAC->unk61].data[15] = 0xFF; + gTasks[taskId].data[0]++; + } + sub_801A5BC(&gTasks[taskId].data[7], &gTasks[taskId].data[8]); + break; + case 4: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gTasks[taskId].data[0]++; + break; + case 5: + if (!gPaletteFade.active) + { + SetMainCallback2(sub_801A584); + DestroyTask(taskId); + } + break; + } +} + +static void sub_801A8B0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 mode) +{ + u8 color[3]; + + switch (mode) + { + case 0: + color[0] = 0; + color[1] = 2; + color[2] = 3; + break; + case 1: + color[0] = 0; + color[1] = 1; + color[2] = 3; + break; + case 2: + color[0] = 0; + color[1] = 4; + color[2] = 5; + break; + case 3: + color[0] = 0; + color[1] = 7; + color[2] = 6; + break; + case 4: + color[0] = 0; + color[1] = 1; + color[2] = 2; + break; + } + + AddTextPrinterParameterized4(windowId, fontId, x, y, 0, 0, color, -1, str); +} + +#ifdef NONMATCHING +// register swap r2, r3 +u8 sub_801A960(struct UnkStruct_x20 * a0, u32 * a1) +{ + s32 i, j, r2; + u8 result = a0->unk.field_0.unk_0a_0; + + for (i = 0; i < (unsigned)ARRAY_COUNT(gUnknown_082F0D70); i++) + { + if (result != gUnknown_082F0D70[i][0]) + { + continue; + } + if (a0->field_1A_0 != 1) + { + continue; + } + if (gUnknown_082F0D70[i][2] == 0) + { + r2 = 0; + for (j = 0; j < 4; j++) + { + if (a0->unk.field_0.unk_04[j] != 0) + { + r2++; + } + } + r2++; + a1[gUnknown_082F0D70[i][1]] += r2; + } + else + { + a1[gUnknown_082F0D70[i][1]] += gUnknown_082F0D70[i][2]; + } + } + return result; +} +#else +NAKED +u8 sub_801A960(struct UnkStruct_x20 * a0, u32 * a1) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tmov r7, r10\n" + "\tmov r6, r9\n" + "\tmov r5, r8\n" + "\tpush {r5-r7}\n" + "\tsub sp, 0x4\n" + "\tmov r12, r0\n" + "\tadds r7, r1, 0\n" + "\tldrb r0, [r0, 0xA]\n" + "\tlsls r0, 25\n" + "\tlsrs r0, 25\n" + "\tmov r8, r0\n" + "\tmovs r4, 0\n" + "\tldr r0, =gUnknown_082F0D70\n" + "\tmov r9, r0\n" + "\tmovs r1, 0x1\n" + "\tadd r1, r9\n" + "\tmov r10, r1\n" + "\tmov r3, r12\n" + "\tadds r3, 0x4\n" + "\tstr r3, [sp]\n" + "_0801A98A:\n" + "\tlsls r0, r4, 1\n" + "\tadds r2, r0, r4\n" + "\tmov r3, r9\n" + "\tadds r1, r2, r3\n" + "\tadds r5, r0, 0\n" + "\tadds r6, r4, 0x1\n" + "\tldrb r1, [r1]\n" + "\tcmp r8, r1\n" + "\tbne _0801A9EE\n" + "\tmov r0, r12\n" + "\tldrb r1, [r0, 0x1A]\n" + "\tmovs r0, 0x3\n" + "\tands r0, r1\n" + "\tcmp r0, 0x1\n" + "\tbne _0801A9EE\n" + "\tmov r0, r9\n" + "\tadds r0, 0x2\n" + "\tadds r3, r2, r0\n" + "\tldrb r0, [r3]\n" + "\tcmp r0, 0\n" + "\tbne _0801A9DC\n" + "\tmovs r2, 0\n" + "\tmovs r1, 0\n" + "\tldr r3, [sp]\n" + "_0801A9BA:\n" + "\tadds r0, r3, r1\n" + "\tldrb r0, [r0]\n" + "\tcmp r0, 0\n" + "\tbeq _0801A9C4\n" + "\tadds r2, 0x1\n" + "_0801A9C4:\n" + "\tadds r1, 0x1\n" + "\tcmp r1, 0x3\n" + "\tble _0801A9BA\n" + "\tadds r2, 0x1\n" + "\tadds r0, r5, r4\n" + "\tadd r0, r10\n" + "\tldrb r1, [r0]\n" + "\tlsls r1, 2\n" + "\tadds r1, r7\n" + "\tb _0801A9E8\n" + "\t.pool\n" + "_0801A9DC:\n" + "\tmov r1, r10\n" + "\tadds r0, r2, r1\n" + "\tldrb r1, [r0]\n" + "\tlsls r1, 2\n" + "\tadds r1, r7\n" + "\tldrb r2, [r3]\n" + "_0801A9E8:\n" + "\tldr r0, [r1]\n" + "\tadds r0, r2\n" + "\tstr r0, [r1]\n" + "_0801A9EE:\n" + "\tadds r4, r6, 0\n" + "\tcmp r4, 0x1E\n" + "\tbls _0801A98A\n" + "\tmov r0, r8\n" + "\tadd sp, 0x4\n" + "\tpop {r3-r5}\n" + "\tmov r8, r3\n" + "\tmov r9, r4\n" + "\tmov r10, r5\n" + "\tpop {r4-r7}\n" + "\tpop {r1}\n" + "\tbx r1"); +} +#endif //NONMATCHING -- cgit v1.2.3 From 7571969a458fefcfa242acdd4a38dce134897977 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 1 Apr 2019 22:30:30 -0400 Subject: Finish union room battle --- src/mauville_old_man.c | 2 +- src/union_room.c | 2 +- src/union_room_battle.c | 359 +++++++++++++++++++++++++++++++++++------------- 3 files changed, 264 insertions(+), 99 deletions(-) (limited to 'src') diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index ec5cb238b..ddd3f931e 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -914,7 +914,7 @@ struct Story }; static const struct Story sStorytellerStories[] = { - {GAME_STAT_50, 1, MauvilleCity_PokemonCenter_1F_Text_28E930, MauvilleCity_PokemonCenter_1F_Text_28E947, MauvilleCity_PokemonCenter_1F_Text_28E956}, + {GAME_STAT_NUM_UNION_ROOM_BATTLES, 1, MauvilleCity_PokemonCenter_1F_Text_28E930, MauvilleCity_PokemonCenter_1F_Text_28E947, MauvilleCity_PokemonCenter_1F_Text_28E956}, {GAME_STAT_STARTED_TRENDS, 1, MauvilleCity_PokemonCenter_1F_Text_28E9D7, MauvilleCity_PokemonCenter_1F_Text_28E9EF, MauvilleCity_PokemonCenter_1F_Text_28E9FE}, {GAME_STAT_PLANTED_BERRIES, 1, MauvilleCity_PokemonCenter_1F_Text_28EA7D, MauvilleCity_PokemonCenter_1F_Text_28EA98, MauvilleCity_PokemonCenter_1F_Text_28EAA8}, {GAME_STAT_TRADED_BIKES, 1, MauvilleCity_PokemonCenter_1F_Text_28EB19, MauvilleCity_PokemonCenter_1F_Text_28EB31, MauvilleCity_PokemonCenter_1F_Text_28EB3E}, diff --git a/src/union_room.c b/src/union_room.c index 88ac65baa..ea3658903 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -2332,7 +2332,7 @@ void sub_8013F90(u8 taskId) if (GetBlockReceivedStatus() == 3) { gEnemyParty[0] = *(struct Pokemon*)(gBlockRecvBuffer[GetMultiplayerId() ^ 1]); - IncrementGameStat(GAME_STAT_50); + IncrementGameStat(GAME_STAT_NUM_UNION_ROOM_BATTLES); ResetBlockReceivedFlags(); gTasks[taskId].data[0]++; } diff --git a/src/union_room_battle.c b/src/union_room_battle.c index b571e803a..9d9f9dcf3 100644 --- a/src/union_room_battle.c +++ b/src/union_room_battle.c @@ -9,6 +9,7 @@ #include "alloc.h" #include "menu.h" #include "window.h" +#include "text_window.h" #include "scanline_effect.h" #include "m4a.h" #include "dynamic_placeholder_text_util.h" @@ -18,6 +19,9 @@ #include "international_string_util.h" #include "sound.h" #include "constants/songs.h" +#include "party_menu.h" +#include "battle_setup.h" +#include "link.h" #include "union_room.h" #include "union_room_battle.h" @@ -31,13 +35,20 @@ struct UnkStruct_3000DAC /*0x62*/ u8 filler_62[10]; }; +struct UnkStruct_2022C6C +{ + s16 a0; +}; + IWRAM_DATA struct UnkStruct_3000DAC * gUnknown_03000DAC; IWRAM_DATA bool32 gUnknown_03000DB0; +EWRAM_DATA struct UnkStruct_2022C6C * gUnknown_02022C6C = NULL; + void sub_801A43C(void); void sub_801A6C0(u8 taskId); static void sub_801A8B0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 mode); -bool32 sub_801AA30(u32 * a0, u32 * a1, u32 * a2, u8 a3); +bool32 sub_801AA30(u32 * a0, u32 * a1, u32 * a2, u8 taskId); const u16 gWirelessInfoScreenPal[] = INCBIN_U16("graphics/interface/wireless_info_screen.gbapal"); const u32 gWirelessInfoScreenGfx[] = INCBIN_U32("graphics/interface/wireless_info_screen.4bpp.lz"); @@ -128,6 +139,29 @@ const u8 gUnknown_082F0D70[][3] = { {0x0e, 0x01, 0x02} }; +const struct BgTemplate gUnknown_082F0DD0[] = { + { + .bg = 0, + .charBaseIndex = 3, + .mapBaseIndex = 31 + } +}; + +const struct WindowTemplate gUnknown_082F0DD4[] = { + { + .bg = 0, + .tilemapLeft = 3, + .tilemapTop = 15, + .width = 24, + .height = 4, + .paletteNum = 0xE, + .baseBlock = 0x014 + }, + { 0xFF } +}; + +const u8 gUnknown_082F0DE4[] = { 1, 2, 3 }; + void sub_801A3F4(void) { if (!IsDma3ManagerBusyWithBgCopy()) @@ -333,12 +367,10 @@ static void sub_801A8B0(u8 windowId, u8 fontId, const u8 * str, u8 x, u8 y, u8 m AddTextPrinterParameterized4(windowId, fontId, x, y, 0, 0, color, -1, str); } -#ifdef NONMATCHING -// register swap r2, r3 -u8 sub_801A960(struct UnkStruct_x20 * a0, u32 * a1) +u32 sub_801A960(struct UnkStruct_x20 * a0, u32 * a1) { s32 i, j, r2; - u8 result = a0->unk.field_0.unk_0a_0; + u32 result = a0->unk.field_0.unk_0a_0; for (i = 0; i < (unsigned)ARRAY_COUNT(gUnknown_082F0D70); i++) { @@ -370,97 +402,230 @@ u8 sub_801A960(struct UnkStruct_x20 * a0, u32 * a1) } return result; } -#else -NAKED -u8 sub_801A960(struct UnkStruct_x20 * a0, u32 * a1) + +bool32 sub_801AA08(u32 * a0, u32 * a1) +{ + s32 i; + for (i = 0; i < 4; i++) + { + if (a0[i] != a1[i]) + { + return TRUE; + } + } + return FALSE; +} + +bool32 sub_801AA30(u32 * a0, u32 * a1, u32 * a2, u8 taskId) +{ + bool32 r8 = FALSE; + u32 sp0[4] = {0, 0, 0, 0}; + struct UnkStruct_x20 ** data = (void *)gTasks[taskId].data; + s32 i; + + for (i = 0; i < 16; i++) + { + u32 r1 = sub_801A960(&(*data)[i], sp0); + if (r1 != a2[i]) + { + a2[i] = r1; + r8 = TRUE; + } + } + if (sub_801AA08(sp0, a1) == 0) + { + if (r8 != TRUE) + { + return FALSE; + } + } + else + { + memcpy(a0, sp0, sizeof(sp0)); + memcpy(a1, sp0, sizeof(sp0)); + a0[3] = a0[0] + a0[1] + a0[2] + a0[3]; + } + return TRUE; +} + +void sub_801AAD4(void) +{ + s32 i; + sub_8014210(10); + for (i = 0; i < 2; i++) + { + gEnemyParty[i] = gPlayerParty[gSelectedOrderFromParty[i] - 1]; + } + for (i = 0; i < 6; i++) + { + ZeroMonData(&gPlayerParty[i]); + } + for (i = 0; i < 2; i++) + { + gPlayerParty[i] = gEnemyParty[i]; + } + IncrementGameStat(GAME_STAT_NUM_UNION_ROOM_BATTLES); + CalculatePlayerPartyCount(); + gTrainerBattleOpponent_A = 0xC00; + SetMainCallback2(CB2_InitBattle); +} + +void sub_801AB68(u8 windowId, const u8 * str, u8 x, u8 y, s32 speed) +{ + s32 letterSpacing = 0; + s32 lineSpacing = 1; + FillWindowPixelBuffer(windowId, (gUnknown_082F0DE4[0] << 4) | gUnknown_082F0DE4[0]); + AddTextPrinterParameterized4(windowId, 1, x, y, letterSpacing, lineSpacing, gUnknown_082F0DE4, speed, str); +} + +bool32 sub_801ABDC(s16 * state, const u8 * str, s32 speed) +{ + switch (*state) + { + case 0: + DrawTextBorderOuter(0, 0x001, 0xD); + sub_801AB68(0, str, 0, 1, speed); + PutWindowTilemap(0); + CopyWindowToVram(0, 3); + (*state)++; + break; + case 1: + if (!IsTextPrinterActive(0)) + { + *state = 0; + return TRUE; + } + break; + } + return FALSE; +} + +void sub_801AC40(void) { - asm_unified("\tpush {r4-r7,lr}\n" - "\tmov r7, r10\n" - "\tmov r6, r9\n" - "\tmov r5, r8\n" - "\tpush {r5-r7}\n" - "\tsub sp, 0x4\n" - "\tmov r12, r0\n" - "\tadds r7, r1, 0\n" - "\tldrb r0, [r0, 0xA]\n" - "\tlsls r0, 25\n" - "\tlsrs r0, 25\n" - "\tmov r8, r0\n" - "\tmovs r4, 0\n" - "\tldr r0, =gUnknown_082F0D70\n" - "\tmov r9, r0\n" - "\tmovs r1, 0x1\n" - "\tadd r1, r9\n" - "\tmov r10, r1\n" - "\tmov r3, r12\n" - "\tadds r3, 0x4\n" - "\tstr r3, [sp]\n" - "_0801A98A:\n" - "\tlsls r0, r4, 1\n" - "\tadds r2, r0, r4\n" - "\tmov r3, r9\n" - "\tadds r1, r2, r3\n" - "\tadds r5, r0, 0\n" - "\tadds r6, r4, 0x1\n" - "\tldrb r1, [r1]\n" - "\tcmp r8, r1\n" - "\tbne _0801A9EE\n" - "\tmov r0, r12\n" - "\tldrb r1, [r0, 0x1A]\n" - "\tmovs r0, 0x3\n" - "\tands r0, r1\n" - "\tcmp r0, 0x1\n" - "\tbne _0801A9EE\n" - "\tmov r0, r9\n" - "\tadds r0, 0x2\n" - "\tadds r3, r2, r0\n" - "\tldrb r0, [r3]\n" - "\tcmp r0, 0\n" - "\tbne _0801A9DC\n" - "\tmovs r2, 0\n" - "\tmovs r1, 0\n" - "\tldr r3, [sp]\n" - "_0801A9BA:\n" - "\tadds r0, r3, r1\n" - "\tldrb r0, [r0]\n" - "\tcmp r0, 0\n" - "\tbeq _0801A9C4\n" - "\tadds r2, 0x1\n" - "_0801A9C4:\n" - "\tadds r1, 0x1\n" - "\tcmp r1, 0x3\n" - "\tble _0801A9BA\n" - "\tadds r2, 0x1\n" - "\tadds r0, r5, r4\n" - "\tadd r0, r10\n" - "\tldrb r1, [r0]\n" - "\tlsls r1, 2\n" - "\tadds r1, r7\n" - "\tb _0801A9E8\n" - "\t.pool\n" - "_0801A9DC:\n" - "\tmov r1, r10\n" - "\tadds r0, r2, r1\n" - "\tldrb r1, [r0]\n" - "\tlsls r1, 2\n" - "\tadds r1, r7\n" - "\tldrb r2, [r3]\n" - "_0801A9E8:\n" - "\tldr r0, [r1]\n" - "\tadds r0, r2\n" - "\tstr r0, [r1]\n" - "_0801A9EE:\n" - "\tadds r4, r6, 0\n" - "\tcmp r4, 0x1E\n" - "\tbls _0801A98A\n" - "\tmov r0, r8\n" - "\tadd sp, 0x4\n" - "\tpop {r3-r5}\n" - "\tmov r8, r3\n" - "\tmov r9, r4\n" - "\tmov r10, r5\n" - "\tpop {r4-r7}\n" - "\tpop {r1}\n" - "\tbx r1"); + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_801AC54(void) +{ + switch (gMain.state) + { + case 0: + SetGpuReg(REG_OFFSET_DISPCNT, 0x0000); + gUnknown_02022C6C = AllocZeroed(4); + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_082F0DD0, 1); + reset_temp_tile_data_buffers(); + if (!InitWindows(gUnknown_082F0DD4)) + { + return; + } + DeactivateAllTextPrinters(); + ClearWindowTilemap(0); + FillWindowPixelBuffer(0, 0x00); + FillWindowPixelBuffer(0, 0x11); + FillBgTilemapBufferRect(0, 0, 0, 0, 30, 20, 0xF); + LoadUserWindowBorderGfx(0, 1, 0xD0); + LoadUserWindowBorderGfx_(0, 1, 0xD0); + sub_819789C(); + SetVBlankCallback(sub_801AC40); + gMain.state++; + break; + case 1: + if (sub_801ABDC(&gUnknown_02022C6C->a0, gText_CommStandbyAwaitingOtherPlayer, 0)) + { + gMain.state++; + } + break; + case 2: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + ShowBg(0); + gMain.state++; + break; + case 3: + if (!UpdatePaletteFade()) + { + memset(gBlockSendBuffer, 0, 0x20); + if (gSelectedOrderFromParty[0] == -gSelectedOrderFromParty[1]) + { + gBlockSendBuffer[0] = 0x52; + } + else + { + gBlockSendBuffer[0] = 0x51; + } + SendBlock(0, gBlockSendBuffer, 0x20); + gMain.state++; + } + break; + case 4: + if (GetBlockReceivedStatus() == 3) + { + if (gBlockRecvBuffer[0][0] == 0x51 && gBlockRecvBuffer[1][0] == 0x51) + { + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gMain.state = 50; + } + else + { + sub_800AC34(); + if (gBlockRecvBuffer[GetMultiplayerId()][0] == 0x52) + { + gMain.state = 6; + } + else + { + gMain.state = 8; + } + } + ResetBlockReceivedFlags(); + } + break; + case 50: + if (!UpdatePaletteFade()) + { + sub_800ADF8(); + gMain.state++; + } + break; + case 51: + if (IsLinkTaskFinished()) + { + SetMainCallback2(sub_801AAD4); + } + break; + case 6: + if (gReceivedRemoteLinkPlayers == 0) + { + gMain.state++; + } + break; + case 7: + if (sub_801ABDC(&gUnknown_02022C6C->a0, gText_RefusedBattle, 1)) + { + SetMainCallback2(CB2_ReturnToField); + } + break; + case 8: + if (gReceivedRemoteLinkPlayers == 0) + { + gMain.state++; + } + break; + case 9: + if (sub_801ABDC(&gUnknown_02022C6C->a0, gText_BattleWasRefused, 1)) + { + SetMainCallback2(CB2_ReturnToField); + } + break; + } + RunTasks(); + RunTextPrinters(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); } -#endif //NONMATCHING -- cgit v1.2.3 From ca9f7fe3563b84504d499bdb291ca10d38cbf229 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Tue, 2 Apr 2019 00:59:01 -0400 Subject: Fix hardcoded array sizes --- src/pokenav_match_call.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/pokenav_match_call.c b/src/pokenav_match_call.c index b775ed10e..0a21c4edc 100644 --- a/src/pokenav_match_call.c +++ b/src/pokenav_match_call.c @@ -680,7 +680,7 @@ bool32 MatchCallFlagGetByIndex(u32 idx) match_call_t matchCall; u32 i; - if (idx > 20) + if (idx > ARRAY_COUNT(sMatchCallHeaders) - 1) return FALSE; matchCall = sMatchCallHeaders[idx]; i = MatchCallGetFunctionIndex(matchCall); @@ -727,7 +727,7 @@ u8 sub_81D16DC(u32 idx) match_call_t matchCall; u32 i; - if (idx > 20) + if (idx > ARRAY_COUNT(sMatchCallHeaders) - 1) return 0; matchCall = sMatchCallHeaders[idx]; i = MatchCallGetFunctionIndex(matchCall); @@ -771,7 +771,7 @@ bool32 MatchCall_IsRematchable(u32 idx) match_call_t matchCall; u32 i; - if (idx > 20) + if (idx > ARRAY_COUNT(sMatchCallHeaders) - 1) return 0; matchCall = sMatchCallHeaders[idx]; i = MatchCallGetFunctionIndex(matchCall); @@ -810,13 +810,13 @@ bool32 sub_81D17E8(u32 idx) match_call_t matchCall; u32 i; - if (idx > 20) + if (idx > ARRAY_COUNT(sMatchCallHeaders) - 1) return FALSE; matchCall = sMatchCallHeaders[idx]; i = MatchCallGetFunctionIndex(matchCall); if (gUnknown_08625338[i](matchCall)) return TRUE; - for (i = 0; i < 4; i++) + for (i = 0; i < ARRAY_COUNT(sMatchCallCheckPageOverrides); i++) { if (sMatchCallCheckPageOverrides[i].idx == idx) return TRUE; @@ -854,7 +854,7 @@ u32 MatchCall_GetRematchTableIdx(u32 idx) match_call_t matchCall; u32 i; - if (idx > 20) + if (idx > ARRAY_COUNT(sMatchCallHeaders) - 1) return REMATCH_TABLE_ENTRIES; matchCall = sMatchCallHeaders[idx]; i = MatchCallGetFunctionIndex(matchCall); @@ -891,7 +891,7 @@ void MatchCall_GetMessage(u32 idx, u8 *dest) match_call_t matchCall; u32 i; - if (idx > 20) + if (idx > ARRAY_COUNT(sMatchCallHeaders) - 1) return; matchCall = sMatchCallHeaders[idx]; i = MatchCallGetFunctionIndex(matchCall); @@ -1093,7 +1093,7 @@ void sub_81D1A78(u32 idx, const u8 **desc, const u8 **name) match_call_t matchCall; u32 i; - if (idx > 20) + if (idx > ARRAY_COUNT(sMatchCallHeaders) - 1) return; matchCall = sMatchCallHeaders[idx]; i = MatchCallGetFunctionIndex(matchCall); @@ -1146,11 +1146,11 @@ const u8 *sub_81D1B40(u32 idx, u32 offset) { u32 i; - for (i = 0; i < 4; i++) + for (i = 0; i < ARRAY_COUNT(sMatchCallCheckPageOverrides); i++) { if (sMatchCallCheckPageOverrides[i].idx == idx) { - for (; i + 1 < 4 && sMatchCallCheckPageOverrides[i + 1].idx == idx; i++) + for (; i + 1 < ARRAY_COUNT(sMatchCallCheckPageOverrides) && sMatchCallCheckPageOverrides[i + 1].idx == idx; i++) { if (!FlagGet(sMatchCallCheckPageOverrides[i + 1].v4)) break; @@ -1244,7 +1244,7 @@ s32 sub_81D1BD0(u32 idx) { u32 i; - for (i = 0; i < 4; i++) + for (i = 0; i < ARRAY_COUNT(sMatchCallCheckPageOverrides); i++) { if (sMatchCallCheckPageOverrides[i].idx == idx) return sMatchCallCheckPageOverrides[i].v2; @@ -1256,7 +1256,7 @@ bool32 sub_81D1BF8(u32 idx) { s32 i; - for (i = 0; i < 21; i++) + for (i = 0; i < (s32)ARRAY_COUNT(sMatchCallHeaders); i++) { u32 r0 = MatchCall_GetRematchTableIdx(i); if (r0 != REMATCH_TABLE_ENTRIES && r0 == idx) -- cgit v1.2.3 From 65d8b68f9db02252ae5e4ba8ee779218eb67f135 Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Tue, 2 Apr 2019 01:10:20 -0400 Subject: Expicitly hardcode rematch indecies Inserting an entry without updating the indecies will now cause a compiler error. This will make it easier for modders to remember to update the constants. --- src/battle_setup.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/battle_setup.c b/src/battle_setup.c index 347486a0b..cb7b63ebe 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -296,7 +296,8 @@ const struct RematchTrainer gRematchTable[REMATCH_TABLE_ENTRIES] = {{TRAINER_TRENT_1, TRAINER_TRENT_2, TRAINER_TRENT_3, TRAINER_TRENT_4, TRAINER_TRENT_5}, 0x0, 0x1b}, {{TRAINER_SAWYER_1, TRAINER_SAWYER_2, TRAINER_SAWYER_3, TRAINER_SAWYER_4, TRAINER_SAWYER_5}, 0x18, 0xc}, {{TRAINER_KIRA_AND_DAN_1, TRAINER_KIRA_AND_DAN_2, TRAINER_KIRA_AND_DAN_3, TRAINER_KIRA_AND_DAN_4, TRAINER_KIRA_AND_DAN_5}, 0x18, 0x3e}, - {{TRAINER_WALLY_3, TRAINER_WALLY_4, TRAINER_WALLY_5, TRAINER_WALLY_6, TRAINER_WALLY_6}, 0x18, 0x2b}, + // Wally's entry index is hardcoded. + [REMATCH_WALLY_ENTRY] = {{TRAINER_WALLY_3, TRAINER_WALLY_4, TRAINER_WALLY_5, TRAINER_WALLY_6, TRAINER_WALLY_6}, 0x18, 0x2b}, {{TRAINER_ROXANNE_1, TRAINER_ROXANNE_2, TRAINER_ROXANNE_3, TRAINER_ROXANNE_4, TRAINER_ROXANNE_5}, 0x0, 0x3}, {{TRAINER_BRAWLY_1, TRAINER_BRAWLY_2, TRAINER_BRAWLY_3, TRAINER_BRAWLY_4, TRAINER_BRAWLY_5}, 0x0, 0xb}, {{TRAINER_WATTSON_1, TRAINER_WATTSON_2, TRAINER_WATTSON_3, TRAINER_WATTSON_4, TRAINER_WATTSON_5}, 0x0, 0x2}, @@ -305,7 +306,8 @@ const struct RematchTrainer gRematchTable[REMATCH_TABLE_ENTRIES] = {{TRAINER_WINONA_1, TRAINER_WINONA_2, TRAINER_WINONA_3, TRAINER_WINONA_4, TRAINER_WINONA_5}, 0x0, 0x4}, {{TRAINER_TATE_AND_LIZA_1, TRAINER_TATE_AND_LIZA_2, TRAINER_TATE_AND_LIZA_3, TRAINER_TATE_AND_LIZA_4, TRAINER_TATE_AND_LIZA_5}, 0x0, 0x6}, {{TRAINER_JUAN_1, TRAINER_JUAN_2, TRAINER_JUAN_3, TRAINER_JUAN_4, TRAINER_JUAN_5}, 0x0, 0x7}, - {{TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY}, 0x0, 0x8}, + + [REMATCH_ELITE_FOUR_ENTRIES] = {{TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY}, 0x0, 0x8}, {{TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE}, 0x0, 0x8}, {{TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA}, 0x0, 0x8}, {{TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE}, 0x0, 0x8}, -- cgit v1.2.3 From 6916f09cd5cdb508e270bfba40f1bd165a16762f Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Tue, 2 Apr 2019 03:22:07 -0400 Subject: Expand MatchCallStruct defs, use REMATCH_* enum --- src/battle_setup.c | 162 ++++++++++++++++---------------- src/pokenav_match_call.c | 236 +++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 286 insertions(+), 112 deletions(-) (limited to 'src') diff --git a/src/battle_setup.c b/src/battle_setup.c index cb7b63ebe..7395c175b 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -232,86 +232,84 @@ static const struct TrainerBattleParameter sTrainerBContinueScriptBattleParams[] const struct RematchTrainer gRematchTable[REMATCH_TABLE_ENTRIES] = { - {{TRAINER_ROSE_1, TRAINER_ROSE_2, TRAINER_ROSE_3, TRAINER_ROSE_4, TRAINER_ROSE_5}, 0x0, 0x21}, - {{TRAINER_ANDRES_1, TRAINER_ANDRES_2, TRAINER_ANDRES_3, TRAINER_ANDRES_4, TRAINER_ANDRES_5}, 0x0, 0x14}, - {{TRAINER_DUSTY_1, TRAINER_DUSTY_2, TRAINER_DUSTY_3, TRAINER_DUSTY_4, TRAINER_DUSTY_5}, 0x0, 0x1a}, - {{TRAINER_LOLA_1, TRAINER_LOLA_2, TRAINER_LOLA_3, TRAINER_LOLA_4, TRAINER_LOLA_5}, 0x0, 0x18}, - {{TRAINER_RICKY_1, TRAINER_RICKY_2, TRAINER_RICKY_3, TRAINER_RICKY_4, TRAINER_RICKY_5}, 0x0, 0x18}, - {{TRAINER_LILA_AND_ROY_1, TRAINER_LILA_AND_ROY_2, TRAINER_LILA_AND_ROY_3, TRAINER_LILA_AND_ROY_4, TRAINER_LILA_AND_ROY_5}, 0x0, 0x27}, - {{TRAINER_CRISTIN_1, TRAINER_CRISTIN_2, TRAINER_CRISTIN_3, TRAINER_CRISTIN_4, TRAINER_CRISTIN_5}, 0x0, 0x24}, - {{TRAINER_BROOKE_1, TRAINER_BROOKE_2, TRAINER_BROOKE_3, TRAINER_BROOKE_4, TRAINER_BROOKE_5}, 0x0, 0x1a}, - {{TRAINER_WILTON_1, TRAINER_WILTON_2, TRAINER_WILTON_3, TRAINER_WILTON_4, TRAINER_WILTON_5}, 0x0, 0x1a}, - {{TRAINER_VALERIE_1, TRAINER_VALERIE_2, TRAINER_VALERIE_3, TRAINER_VALERIE_4, TRAINER_VALERIE_5}, 0x18, 0x14}, - {{TRAINER_CINDY_1, TRAINER_CINDY_3, TRAINER_CINDY_4, TRAINER_CINDY_5, TRAINER_CINDY_6}, 0x0, 0x13}, - {{TRAINER_THALIA_1, TRAINER_THALIA_2, TRAINER_THALIA_3, TRAINER_THALIA_4, TRAINER_THALIA_5}, 0x18, 0x38}, - {{TRAINER_JESSICA_1, TRAINER_JESSICA_2, TRAINER_JESSICA_3, TRAINER_JESSICA_4, TRAINER_JESSICA_5}, 0x0, 0x24}, - {{TRAINER_WINSTON_1, TRAINER_WINSTON_2, TRAINER_WINSTON_3, TRAINER_WINSTON_4, TRAINER_WINSTON_5}, 0x0, 0x13}, - {{TRAINER_STEVE_1, TRAINER_STEVE_2, TRAINER_STEVE_3, TRAINER_STEVE_4, TRAINER_STEVE_5}, 0x0, 0x1d}, - {{TRAINER_TONY_1, TRAINER_TONY_2, TRAINER_TONY_3, TRAINER_TONY_4, TRAINER_TONY_5}, 0x0, 0x16}, - {{TRAINER_NOB_1, TRAINER_NOB_2, TRAINER_NOB_3, TRAINER_NOB_4, TRAINER_NOB_5}, 0x0, 0x1e}, - {{TRAINER_KOJI_1, TRAINER_KOJI_2, TRAINER_KOJI_3, TRAINER_KOJI_4, TRAINER_KOJI_5}, 0x0, 0x2a}, - {{TRAINER_FERNANDO_1, TRAINER_FERNANDO_2, TRAINER_FERNANDO_3, TRAINER_FERNANDO_4, TRAINER_FERNANDO_5}, 0x0, 0x26}, - {{TRAINER_DALTON_1, TRAINER_DALTON_2, TRAINER_DALTON_3, TRAINER_DALTON_4, TRAINER_DALTON_5}, 0x0, 0x21}, - {{TRAINER_BERNIE_1, TRAINER_BERNIE_2, TRAINER_BERNIE_3, TRAINER_BERNIE_4, TRAINER_BERNIE_5}, 0x0, 0x1d}, - {{TRAINER_ETHAN_1, TRAINER_ETHAN_2, TRAINER_ETHAN_3, TRAINER_ETHAN_4, TRAINER_ETHAN_5}, 0x18, 0xd}, - {{TRAINER_JOHN_AND_JAY_1, TRAINER_JOHN_AND_JAY_2, TRAINER_JOHN_AND_JAY_3, TRAINER_JOHN_AND_JAY_4, TRAINER_JOHN_AND_JAY_5}, 0x18, 0x1}, - {{TRAINER_JEFFREY_1, TRAINER_JEFFREY_2, TRAINER_JEFFREY_3, TRAINER_JEFFREY_4, TRAINER_JEFFREY_5}, 0x0, 0x23}, - {{TRAINER_CAMERON_1, TRAINER_CAMERON_2, TRAINER_CAMERON_3, TRAINER_CAMERON_4, TRAINER_CAMERON_5}, 0x0, 0x26}, - {{TRAINER_JACKI_1, TRAINER_JACKI_2, TRAINER_JACKI_3, TRAINER_JACKI_4, TRAINER_JACKI_5}, 0x0, 0x26}, - {{TRAINER_WALTER_1, TRAINER_WALTER_2, TRAINER_WALTER_3, TRAINER_WALTER_4, TRAINER_WALTER_5}, 0x0, 0x24}, - {{TRAINER_KAREN_1, TRAINER_KAREN_2, TRAINER_KAREN_3, TRAINER_KAREN_4, TRAINER_KAREN_5}, 0x0, 0x1f}, - {{TRAINER_JERRY_1, TRAINER_JERRY_2, TRAINER_JERRY_3, TRAINER_JERRY_4, TRAINER_JERRY_5}, 0x0, 0x1f}, - {{TRAINER_ANNA_AND_MEG_1, TRAINER_ANNA_AND_MEG_2, TRAINER_ANNA_AND_MEG_3, TRAINER_ANNA_AND_MEG_4, TRAINER_ANNA_AND_MEG_5}, 0x0, 0x20}, - {{TRAINER_ISABEL_1, TRAINER_ISABEL_2, TRAINER_ISABEL_3, TRAINER_ISABEL_4, TRAINER_ISABEL_5}, 0x0, 0x19}, - {{TRAINER_MIGUEL_1, TRAINER_MIGUEL_2, TRAINER_MIGUEL_3, TRAINER_MIGUEL_4, TRAINER_MIGUEL_5}, 0x0, 0x12}, - {{TRAINER_TIMOTHY_1, TRAINER_TIMOTHY_2, TRAINER_TIMOTHY_3, TRAINER_TIMOTHY_4, TRAINER_TIMOTHY_5}, 0x0, 0x1e}, - {{TRAINER_SHELBY_1, TRAINER_SHELBY_2, TRAINER_SHELBY_3, TRAINER_SHELBY_4, TRAINER_SHELBY_5}, 0x18, 0xc}, - {{TRAINER_CALVIN_1, TRAINER_CALVIN_2, TRAINER_CALVIN_3, TRAINER_CALVIN_4, TRAINER_CALVIN_5}, 0x0, 0x11}, - {{TRAINER_ELLIOT_1, TRAINER_ELLIOT_2, TRAINER_ELLIOT_3, TRAINER_ELLIOT_4, TRAINER_ELLIOT_5}, 0x0, 0x15}, - {{TRAINER_ISAIAH_1, TRAINER_ISAIAH_2, TRAINER_ISAIAH_3, TRAINER_ISAIAH_4, TRAINER_ISAIAH_5}, 0x0, 0x2b}, - {{TRAINER_MARIA_1, TRAINER_MARIA_2, TRAINER_MARIA_3, TRAINER_MARIA_4, TRAINER_MARIA_5}, 0x0, 0x20}, - {{TRAINER_ABIGAIL_1, TRAINER_ABIGAIL_2, TRAINER_ABIGAIL_3, TRAINER_ABIGAIL_4, TRAINER_ABIGAIL_5}, 0x0, 0x19}, - {{TRAINER_DYLAN_1, TRAINER_DYLAN_2, TRAINER_DYLAN_3, TRAINER_DYLAN_4, TRAINER_DYLAN_5}, 0x0, 0x20}, - {{TRAINER_KATELYN_1, TRAINER_KATELYN_2, TRAINER_KATELYN_3, TRAINER_KATELYN_4, TRAINER_KATELYN_5}, 0x0, 0x2b}, - {{TRAINER_BENJAMIN_1, TRAINER_BENJAMIN_2, TRAINER_BENJAMIN_3, TRAINER_BENJAMIN_4, TRAINER_BENJAMIN_5}, 0x0, 0x19}, - {{TRAINER_PABLO_1, TRAINER_PABLO_2, TRAINER_PABLO_3, TRAINER_PABLO_4, TRAINER_PABLO_5}, 0x0, 0x29}, - {{TRAINER_NICOLAS_1, TRAINER_NICOLAS_2, TRAINER_NICOLAS_3, TRAINER_NICOLAS_4, TRAINER_NICOLAS_5}, 0x18, 0x1}, - {{TRAINER_ROBERT_1, TRAINER_ROBERT_2, TRAINER_ROBERT_3, TRAINER_ROBERT_4, TRAINER_ROBERT_5}, 0x0, 0x23}, - {{TRAINER_LAO_1, TRAINER_LAO_2, TRAINER_LAO_3, TRAINER_LAO_4, TRAINER_LAO_5}, 0x0, 0x1c}, - {{TRAINER_CYNDY_1, TRAINER_CYNDY_2, TRAINER_CYNDY_3, TRAINER_CYNDY_4, TRAINER_CYNDY_5}, 0x0, 0x1e}, - {{TRAINER_MADELINE_1, TRAINER_MADELINE_2, TRAINER_MADELINE_3, TRAINER_MADELINE_4, TRAINER_MADELINE_5}, 0x0, 0x1c}, - {{TRAINER_JENNY_1, TRAINER_JENNY_2, TRAINER_JENNY_3, TRAINER_JENNY_4, TRAINER_JENNY_5}, 0x0, 0x27}, - {{TRAINER_DIANA_1, TRAINER_DIANA_2, TRAINER_DIANA_3, TRAINER_DIANA_4, TRAINER_DIANA_5}, 0x18, 0xd}, - {{TRAINER_AMY_AND_LIV_1, TRAINER_AMY_AND_LIV_2, TRAINER_AMY_AND_LIV_4, TRAINER_AMY_AND_LIV_5, TRAINER_AMY_AND_LIV_6}, 0x0, 0x12}, - {{TRAINER_ERNEST_1, TRAINER_ERNEST_2, TRAINER_ERNEST_3, TRAINER_ERNEST_4, TRAINER_ERNEST_5}, 0x0, 0x28}, - {{TRAINER_CORY_1, TRAINER_CORY_2, TRAINER_CORY_3, TRAINER_CORY_4, TRAINER_CORY_5}, 0x0, 0x17}, - {{TRAINER_EDWIN_1, TRAINER_EDWIN_2, TRAINER_EDWIN_3, TRAINER_EDWIN_4, TRAINER_EDWIN_5}, 0x0, 0x19}, - {{TRAINER_LYDIA_1, TRAINER_LYDIA_2, TRAINER_LYDIA_3, TRAINER_LYDIA_4, TRAINER_LYDIA_5}, 0x0, 0x20}, - {{TRAINER_ISAAC_1, TRAINER_ISAAC_2, TRAINER_ISAAC_3, TRAINER_ISAAC_4, TRAINER_ISAAC_5}, 0x0, 0x20}, - {{TRAINER_GABRIELLE_1, TRAINER_GABRIELLE_2, TRAINER_GABRIELLE_3, TRAINER_GABRIELLE_4, TRAINER_GABRIELLE_5}, 0x18, 0x11}, - {{TRAINER_CATHERINE_1, TRAINER_CATHERINE_2, TRAINER_CATHERINE_3, TRAINER_CATHERINE_4, TRAINER_CATHERINE_5}, 0x0, 0x22}, - {{TRAINER_JACKSON_1, TRAINER_JACKSON_2, TRAINER_JACKSON_3, TRAINER_JACKSON_4, TRAINER_JACKSON_5}, 0x0, 0x22}, - {{TRAINER_HALEY_1, TRAINER_HALEY_2, TRAINER_HALEY_3, TRAINER_HALEY_4, TRAINER_HALEY_5}, 0x0, 0x13}, - {{TRAINER_JAMES_1, TRAINER_JAMES_2, TRAINER_JAMES_3, TRAINER_JAMES_4, TRAINER_JAMES_5}, 0x18, 0xb}, - {{TRAINER_TRENT_1, TRAINER_TRENT_2, TRAINER_TRENT_3, TRAINER_TRENT_4, TRAINER_TRENT_5}, 0x0, 0x1b}, - {{TRAINER_SAWYER_1, TRAINER_SAWYER_2, TRAINER_SAWYER_3, TRAINER_SAWYER_4, TRAINER_SAWYER_5}, 0x18, 0xc}, - {{TRAINER_KIRA_AND_DAN_1, TRAINER_KIRA_AND_DAN_2, TRAINER_KIRA_AND_DAN_3, TRAINER_KIRA_AND_DAN_4, TRAINER_KIRA_AND_DAN_5}, 0x18, 0x3e}, - // Wally's entry index is hardcoded. - [REMATCH_WALLY_ENTRY] = {{TRAINER_WALLY_3, TRAINER_WALLY_4, TRAINER_WALLY_5, TRAINER_WALLY_6, TRAINER_WALLY_6}, 0x18, 0x2b}, - {{TRAINER_ROXANNE_1, TRAINER_ROXANNE_2, TRAINER_ROXANNE_3, TRAINER_ROXANNE_4, TRAINER_ROXANNE_5}, 0x0, 0x3}, - {{TRAINER_BRAWLY_1, TRAINER_BRAWLY_2, TRAINER_BRAWLY_3, TRAINER_BRAWLY_4, TRAINER_BRAWLY_5}, 0x0, 0xb}, - {{TRAINER_WATTSON_1, TRAINER_WATTSON_2, TRAINER_WATTSON_3, TRAINER_WATTSON_4, TRAINER_WATTSON_5}, 0x0, 0x2}, - {{TRAINER_FLANNERY_1, TRAINER_FLANNERY_2, TRAINER_FLANNERY_3, TRAINER_FLANNERY_4, TRAINER_FLANNERY_5}, 0x0, 0xc}, - {{TRAINER_NORMAN_1, TRAINER_NORMAN_2, TRAINER_NORMAN_3, TRAINER_NORMAN_4, TRAINER_NORMAN_5}, 0x0, 0x0}, - {{TRAINER_WINONA_1, TRAINER_WINONA_2, TRAINER_WINONA_3, TRAINER_WINONA_4, TRAINER_WINONA_5}, 0x0, 0x4}, - {{TRAINER_TATE_AND_LIZA_1, TRAINER_TATE_AND_LIZA_2, TRAINER_TATE_AND_LIZA_3, TRAINER_TATE_AND_LIZA_4, TRAINER_TATE_AND_LIZA_5}, 0x0, 0x6}, - {{TRAINER_JUAN_1, TRAINER_JUAN_2, TRAINER_JUAN_3, TRAINER_JUAN_4, TRAINER_JUAN_5}, 0x0, 0x7}, - - [REMATCH_ELITE_FOUR_ENTRIES] = {{TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY}, 0x0, 0x8}, - {{TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE}, 0x0, 0x8}, - {{TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA}, 0x0, 0x8}, - {{TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE}, 0x0, 0x8}, - {{TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE}, 0x0, 0x8}, + [REMATCH_ROSE] = {{TRAINER_ROSE_1, TRAINER_ROSE_2, TRAINER_ROSE_3, TRAINER_ROSE_4, TRAINER_ROSE_5}, 0x0, 0x21}, + [REMATCH_ANDRES] = {{TRAINER_ANDRES_1, TRAINER_ANDRES_2, TRAINER_ANDRES_3, TRAINER_ANDRES_4, TRAINER_ANDRES_5}, 0x0, 0x14}, + [REMATCH_DUSTY] = {{TRAINER_DUSTY_1, TRAINER_DUSTY_2, TRAINER_DUSTY_3, TRAINER_DUSTY_4, TRAINER_DUSTY_5}, 0x0, 0x1a}, + [REMATCH_LOLA] = {{TRAINER_LOLA_1, TRAINER_LOLA_2, TRAINER_LOLA_3, TRAINER_LOLA_4, TRAINER_LOLA_5}, 0x0, 0x18}, + [REMATCH_RICKY] = {{TRAINER_RICKY_1, TRAINER_RICKY_2, TRAINER_RICKY_3, TRAINER_RICKY_4, TRAINER_RICKY_5}, 0x0, 0x18}, + [REMATCH_LILA_AND_ROY] = {{TRAINER_LILA_AND_ROY_1, TRAINER_LILA_AND_ROY_2, TRAINER_LILA_AND_ROY_3, TRAINER_LILA_AND_ROY_4, TRAINER_LILA_AND_ROY_5}, 0x0, 0x27}, + [REMATCH_CRISTIN] = {{TRAINER_CRISTIN_1, TRAINER_CRISTIN_2, TRAINER_CRISTIN_3, TRAINER_CRISTIN_4, TRAINER_CRISTIN_5}, 0x0, 0x24}, + [REMATCH_BROOKE] = {{TRAINER_BROOKE_1, TRAINER_BROOKE_2, TRAINER_BROOKE_3, TRAINER_BROOKE_4, TRAINER_BROOKE_5}, 0x0, 0x1a}, + [REMATCH_WILTON] = {{TRAINER_WILTON_1, TRAINER_WILTON_2, TRAINER_WILTON_3, TRAINER_WILTON_4, TRAINER_WILTON_5}, 0x0, 0x1a}, + [REMATCH_VALERIE] = {{TRAINER_VALERIE_1, TRAINER_VALERIE_2, TRAINER_VALERIE_3, TRAINER_VALERIE_4, TRAINER_VALERIE_5}, 0x18, 0x14}, + [REMATCH_CINDY] = {{TRAINER_CINDY_1, TRAINER_CINDY_3, TRAINER_CINDY_4, TRAINER_CINDY_5, TRAINER_CINDY_6}, 0x0, 0x13}, + [REMATCH_THALIA] = {{TRAINER_THALIA_1, TRAINER_THALIA_2, TRAINER_THALIA_3, TRAINER_THALIA_4, TRAINER_THALIA_5}, 0x18, 0x38}, + [REMATCH_JESSICA] = {{TRAINER_JESSICA_1, TRAINER_JESSICA_2, TRAINER_JESSICA_3, TRAINER_JESSICA_4, TRAINER_JESSICA_5}, 0x0, 0x24}, + [REMATCH_WINSTON] = {{TRAINER_WINSTON_1, TRAINER_WINSTON_2, TRAINER_WINSTON_3, TRAINER_WINSTON_4, TRAINER_WINSTON_5}, 0x0, 0x13}, + [REMATCH_STEVE] = {{TRAINER_STEVE_1, TRAINER_STEVE_2, TRAINER_STEVE_3, TRAINER_STEVE_4, TRAINER_STEVE_5}, 0x0, 0x1d}, + [REMATCH_TONY] = {{TRAINER_TONY_1, TRAINER_TONY_2, TRAINER_TONY_3, TRAINER_TONY_4, TRAINER_TONY_5}, 0x0, 0x16}, + [REMATCH_NOB] = {{TRAINER_NOB_1, TRAINER_NOB_2, TRAINER_NOB_3, TRAINER_NOB_4, TRAINER_NOB_5}, 0x0, 0x1e}, + [REMATCH_KOJI] = {{TRAINER_KOJI_1, TRAINER_KOJI_2, TRAINER_KOJI_3, TRAINER_KOJI_4, TRAINER_KOJI_5}, 0x0, 0x2a}, + [REMATCH_FERNANDO] = {{TRAINER_FERNANDO_1, TRAINER_FERNANDO_2, TRAINER_FERNANDO_3, TRAINER_FERNANDO_4, TRAINER_FERNANDO_5}, 0x0, 0x26}, + [REMATCH_DALTON] = {{TRAINER_DALTON_1, TRAINER_DALTON_2, TRAINER_DALTON_3, TRAINER_DALTON_4, TRAINER_DALTON_5}, 0x0, 0x21}, + [REMATCH_BERNIE] = {{TRAINER_BERNIE_1, TRAINER_BERNIE_2, TRAINER_BERNIE_3, TRAINER_BERNIE_4, TRAINER_BERNIE_5}, 0x0, 0x1d}, + [REMATCH_ETHAN] = {{TRAINER_ETHAN_1, TRAINER_ETHAN_2, TRAINER_ETHAN_3, TRAINER_ETHAN_4, TRAINER_ETHAN_5}, 0x18, 0xd}, + [REMATCH_JOHN_AND_JAY] = {{TRAINER_JOHN_AND_JAY_1, TRAINER_JOHN_AND_JAY_2, TRAINER_JOHN_AND_JAY_3, TRAINER_JOHN_AND_JAY_4, TRAINER_JOHN_AND_JAY_5}, 0x18, 0x1}, + [REMATCH_JEFFREY] = {{TRAINER_JEFFREY_1, TRAINER_JEFFREY_2, TRAINER_JEFFREY_3, TRAINER_JEFFREY_4, TRAINER_JEFFREY_5}, 0x0, 0x23}, + [REMATCH_CAMERON] = {{TRAINER_CAMERON_1, TRAINER_CAMERON_2, TRAINER_CAMERON_3, TRAINER_CAMERON_4, TRAINER_CAMERON_5}, 0x0, 0x26}, + [REMATCH_JACKI] = {{TRAINER_JACKI_1, TRAINER_JACKI_2, TRAINER_JACKI_3, TRAINER_JACKI_4, TRAINER_JACKI_5}, 0x0, 0x26}, + [REMATCH_WALTER] = {{TRAINER_WALTER_1, TRAINER_WALTER_2, TRAINER_WALTER_3, TRAINER_WALTER_4, TRAINER_WALTER_5}, 0x0, 0x24}, + [REMATCH_KAREN] = {{TRAINER_KAREN_1, TRAINER_KAREN_2, TRAINER_KAREN_3, TRAINER_KAREN_4, TRAINER_KAREN_5}, 0x0, 0x1f}, + [REMATCH_JERRY] = {{TRAINER_JERRY_1, TRAINER_JERRY_2, TRAINER_JERRY_3, TRAINER_JERRY_4, TRAINER_JERRY_5}, 0x0, 0x1f}, + [REMATCH_ANNA_AND_MEG] = {{TRAINER_ANNA_AND_MEG_1, TRAINER_ANNA_AND_MEG_2, TRAINER_ANNA_AND_MEG_3, TRAINER_ANNA_AND_MEG_4, TRAINER_ANNA_AND_MEG_5}, 0x0, 0x20}, + [REMATCH_ISABEL] = {{TRAINER_ISABEL_1, TRAINER_ISABEL_2, TRAINER_ISABEL_3, TRAINER_ISABEL_4, TRAINER_ISABEL_5}, 0x0, 0x19}, + [REMATCH_MIGUEL] = {{TRAINER_MIGUEL_1, TRAINER_MIGUEL_2, TRAINER_MIGUEL_3, TRAINER_MIGUEL_4, TRAINER_MIGUEL_5}, 0x0, 0x12}, + [REMATCH_TIMOTHY] = {{TRAINER_TIMOTHY_1, TRAINER_TIMOTHY_2, TRAINER_TIMOTHY_3, TRAINER_TIMOTHY_4, TRAINER_TIMOTHY_5}, 0x0, 0x1e}, + [REMATCH_SHELBY] = {{TRAINER_SHELBY_1, TRAINER_SHELBY_2, TRAINER_SHELBY_3, TRAINER_SHELBY_4, TRAINER_SHELBY_5}, 0x18, 0xc}, + [REMATCH_CALVIN] = {{TRAINER_CALVIN_1, TRAINER_CALVIN_2, TRAINER_CALVIN_3, TRAINER_CALVIN_4, TRAINER_CALVIN_5}, 0x0, 0x11}, + [REMATCH_ELLIOT] = {{TRAINER_ELLIOT_1, TRAINER_ELLIOT_2, TRAINER_ELLIOT_3, TRAINER_ELLIOT_4, TRAINER_ELLIOT_5}, 0x0, 0x15}, + [REMATCH_ISAIAH] = {{TRAINER_ISAIAH_1, TRAINER_ISAIAH_2, TRAINER_ISAIAH_3, TRAINER_ISAIAH_4, TRAINER_ISAIAH_5}, 0x0, 0x2b}, + [REMATCH_MARIA] = {{TRAINER_MARIA_1, TRAINER_MARIA_2, TRAINER_MARIA_3, TRAINER_MARIA_4, TRAINER_MARIA_5}, 0x0, 0x20}, + [REMATCH_ABIGAIL] = {{TRAINER_ABIGAIL_1, TRAINER_ABIGAIL_2, TRAINER_ABIGAIL_3, TRAINER_ABIGAIL_4, TRAINER_ABIGAIL_5}, 0x0, 0x19}, + [REMATCH_DYLAN] = {{TRAINER_DYLAN_1, TRAINER_DYLAN_2, TRAINER_DYLAN_3, TRAINER_DYLAN_4, TRAINER_DYLAN_5}, 0x0, 0x20}, + [REMATCH_KATELYN] = {{TRAINER_KATELYN_1, TRAINER_KATELYN_2, TRAINER_KATELYN_3, TRAINER_KATELYN_4, TRAINER_KATELYN_5}, 0x0, 0x2b}, + [REMATCH_BENJAMIN] = {{TRAINER_BENJAMIN_1, TRAINER_BENJAMIN_2, TRAINER_BENJAMIN_3, TRAINER_BENJAMIN_4, TRAINER_BENJAMIN_5}, 0x0, 0x19}, + [REMATCH_PABLO] = {{TRAINER_PABLO_1, TRAINER_PABLO_2, TRAINER_PABLO_3, TRAINER_PABLO_4, TRAINER_PABLO_5}, 0x0, 0x29}, + [REMATCH_NICOLAS] = {{TRAINER_NICOLAS_1, TRAINER_NICOLAS_2, TRAINER_NICOLAS_3, TRAINER_NICOLAS_4, TRAINER_NICOLAS_5}, 0x18, 0x1}, + [REMATCH_ROBERT] = {{TRAINER_ROBERT_1, TRAINER_ROBERT_2, TRAINER_ROBERT_3, TRAINER_ROBERT_4, TRAINER_ROBERT_5}, 0x0, 0x23}, + [REMATCH_LAO] = {{TRAINER_LAO_1, TRAINER_LAO_2, TRAINER_LAO_3, TRAINER_LAO_4, TRAINER_LAO_5}, 0x0, 0x1c}, + [REMATCH_CYNDY] = {{TRAINER_CYNDY_1, TRAINER_CYNDY_2, TRAINER_CYNDY_3, TRAINER_CYNDY_4, TRAINER_CYNDY_5}, 0x0, 0x1e}, + [REMATCH_MADELINE] = {{TRAINER_MADELINE_1, TRAINER_MADELINE_2, TRAINER_MADELINE_3, TRAINER_MADELINE_4, TRAINER_MADELINE_5}, 0x0, 0x1c}, + [REMATCH_JENNY] = {{TRAINER_JENNY_1, TRAINER_JENNY_2, TRAINER_JENNY_3, TRAINER_JENNY_4, TRAINER_JENNY_5}, 0x0, 0x27}, + [REMATCH_DIANA] = {{TRAINER_DIANA_1, TRAINER_DIANA_2, TRAINER_DIANA_3, TRAINER_DIANA_4, TRAINER_DIANA_5}, 0x18, 0xd}, + [REMATCH_AMY_AND_LIV] = {{TRAINER_AMY_AND_LIV_1, TRAINER_AMY_AND_LIV_2, TRAINER_AMY_AND_LIV_4, TRAINER_AMY_AND_LIV_5, TRAINER_AMY_AND_LIV_6}, 0x0, 0x12}, + [REMATCH_ERNEST] = {{TRAINER_ERNEST_1, TRAINER_ERNEST_2, TRAINER_ERNEST_3, TRAINER_ERNEST_4, TRAINER_ERNEST_5}, 0x0, 0x28}, + [REMATCH_CORY] = {{TRAINER_CORY_1, TRAINER_CORY_2, TRAINER_CORY_3, TRAINER_CORY_4, TRAINER_CORY_5}, 0x0, 0x17}, + [REMATCH_EDWIN] = {{TRAINER_EDWIN_1, TRAINER_EDWIN_2, TRAINER_EDWIN_3, TRAINER_EDWIN_4, TRAINER_EDWIN_5}, 0x0, 0x19}, + [REMATCH_LYDIA] = {{TRAINER_LYDIA_1, TRAINER_LYDIA_2, TRAINER_LYDIA_3, TRAINER_LYDIA_4, TRAINER_LYDIA_5}, 0x0, 0x20}, + [REMATCH_ISAAC] = {{TRAINER_ISAAC_1, TRAINER_ISAAC_2, TRAINER_ISAAC_3, TRAINER_ISAAC_4, TRAINER_ISAAC_5}, 0x0, 0x20}, + [REMATCH_GABRIELLE] = {{TRAINER_GABRIELLE_1, TRAINER_GABRIELLE_2, TRAINER_GABRIELLE_3, TRAINER_GABRIELLE_4, TRAINER_GABRIELLE_5}, 0x18, 0x11}, + [REMATCH_CATHERINE] = {{TRAINER_CATHERINE_1, TRAINER_CATHERINE_2, TRAINER_CATHERINE_3, TRAINER_CATHERINE_4, TRAINER_CATHERINE_5}, 0x0, 0x22}, + [REMATCH_JACKSON] = {{TRAINER_JACKSON_1, TRAINER_JACKSON_2, TRAINER_JACKSON_3, TRAINER_JACKSON_4, TRAINER_JACKSON_5}, 0x0, 0x22}, + [REMATCH_HALEY] = {{TRAINER_HALEY_1, TRAINER_HALEY_2, TRAINER_HALEY_3, TRAINER_HALEY_4, TRAINER_HALEY_5}, 0x0, 0x13}, + [REMATCH_JAMES] = {{TRAINER_JAMES_1, TRAINER_JAMES_2, TRAINER_JAMES_3, TRAINER_JAMES_4, TRAINER_JAMES_5}, 0x18, 0xb}, + [REMATCH_TRENT] = {{TRAINER_TRENT_1, TRAINER_TRENT_2, TRAINER_TRENT_3, TRAINER_TRENT_4, TRAINER_TRENT_5}, 0x0, 0x1b}, + [REMATCH_SAWYER] = {{TRAINER_SAWYER_1, TRAINER_SAWYER_2, TRAINER_SAWYER_3, TRAINER_SAWYER_4, TRAINER_SAWYER_5}, 0x18, 0xc}, + [REMATCH_KIRA_AND_DAN] = {{TRAINER_KIRA_AND_DAN_1, TRAINER_KIRA_AND_DAN_2, TRAINER_KIRA_AND_DAN_3, TRAINER_KIRA_AND_DAN_4, TRAINER_KIRA_AND_DAN_5}, 0x18, 0x3e}, + [REMATCH_WALLY_3] = {{TRAINER_WALLY_3, TRAINER_WALLY_4, TRAINER_WALLY_5, TRAINER_WALLY_6, TRAINER_WALLY_6}, 0x18, 0x2b}, + [REMATCH_ROXANNE] = {{TRAINER_ROXANNE_1, TRAINER_ROXANNE_2, TRAINER_ROXANNE_3, TRAINER_ROXANNE_4, TRAINER_ROXANNE_5}, 0x0, 0x3}, + [REMATCH_BRAWLY] = {{TRAINER_BRAWLY_1, TRAINER_BRAWLY_2, TRAINER_BRAWLY_3, TRAINER_BRAWLY_4, TRAINER_BRAWLY_5}, 0x0, 0xb}, + [REMATCH_WATTSON] = {{TRAINER_WATTSON_1, TRAINER_WATTSON_2, TRAINER_WATTSON_3, TRAINER_WATTSON_4, TRAINER_WATTSON_5}, 0x0, 0x2}, + [REMATCH_FLANNERY] = {{TRAINER_FLANNERY_1, TRAINER_FLANNERY_2, TRAINER_FLANNERY_3, TRAINER_FLANNERY_4, TRAINER_FLANNERY_5}, 0x0, 0xc}, + [REMATCH_NORMAN] = {{TRAINER_NORMAN_1, TRAINER_NORMAN_2, TRAINER_NORMAN_3, TRAINER_NORMAN_4, TRAINER_NORMAN_5}, 0x0, 0x0}, + [REMATCH_WINONA] = {{TRAINER_WINONA_1, TRAINER_WINONA_2, TRAINER_WINONA_3, TRAINER_WINONA_4, TRAINER_WINONA_5}, 0x0, 0x4}, + [REMATCH_TATE_AND_LIZA] = {{TRAINER_TATE_AND_LIZA_1, TRAINER_TATE_AND_LIZA_2, TRAINER_TATE_AND_LIZA_3, TRAINER_TATE_AND_LIZA_4, TRAINER_TATE_AND_LIZA_5}, 0x0, 0x6}, + [REMATCH_JUAN] = {{TRAINER_JUAN_1, TRAINER_JUAN_2, TRAINER_JUAN_3, TRAINER_JUAN_4, TRAINER_JUAN_5}, 0x0, 0x7}, + [REMATCH_SIDNEY] = {{TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY}, 0x0, 0x8}, + [REMATCH_PHOEBE] = {{TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE}, 0x0, 0x8}, + [REMATCH_GLACIA] = {{TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA}, 0x0, 0x8}, + [REMATCH_DRAKE] = {{TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE}, 0x0, 0x8}, + [REMATCH_WALLACE] = {{TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE}, 0x0, 0x8}, }; static const u16 sBadgeFlags[8] = @@ -1547,7 +1545,7 @@ static bool32 sub_80B1D94(s32 rematchTableId) { if (rematchTableId >= REMATCH_ELITE_FOUR_ENTRIES) return TRUE; - else if (rematchTableId == REMATCH_WALLY_ENTRY) + else if (rematchTableId == REMATCH_WALLY_3) return (FlagGet(FLAG_DEFEATED_WALLY_VICTORY_ROAD) == FALSE); else return FALSE; @@ -1575,7 +1573,7 @@ static bool32 UpdateRandomTrainerRematches(const struct RematchTrainer *table, u s32 i; bool32 ret = FALSE; - for (i = 0; i <= REMATCH_WALLY_ENTRY; i++) + for (i = 0; i <= REMATCH_WALLY_3; i++) { if (table[i].mapGroup == mapGroup && table[i].mapNum == mapNum && !sub_80B1D94(i)) { diff --git a/src/pokenav_match_call.c b/src/pokenav_match_call.c index 0a21c4edc..ce00401a9 100644 --- a/src/pokenav_match_call.c +++ b/src/pokenav_match_call.c @@ -73,22 +73,17 @@ struct MatchCallStruct4 { const match_call_text_data_t *textData; }; +// Note: Type1 and Type5 have identical struct layouts. struct MatchCallStruct5 { u8 type; u8 v1; u16 flag; - u16 v4; + u16 rematchTableIdx; const u8 *desc; const u8 *name; const match_call_text_data_t *textData; }; -#define MATCHCALLDEF(name, type_, ...) \ -static const struct MatchCallStruct##type_ name = { \ - .type = type_, \ - __VA_ARGS__ \ -}; - typedef union { const struct MatchCallStructCommon *common; const struct MatchCallStruct0 *type0; @@ -328,7 +323,15 @@ static const match_call_text_data_t sMrStoneTextScripts[] = { { NULL, 0xFFFF, 0xFFFF } }; -MATCHCALLDEF(sMrStoneMatchCallHeader, 0, 10, 0xffff, gMrStoneMatchCallDesc, gMrStoneMatchCallName, sMrStoneTextScripts); +static const struct MatchCallStruct0 sMrStoneMatchCallHeader = +{ + .type = 0, + .v1 = 10, + .flag = 0xFFFF, + .desc = gMrStoneMatchCallDesc, + .name = gMrStoneMatchCallName, + .textData = sMrStoneTextScripts +}; static const match_call_text_data_t sNormanTextScripts[] = { { gText_Norman_Pokenav_2B5719, FLAG_ENABLE_NORMAN_MATCH_CALL, 0xFFFF }, @@ -343,9 +346,25 @@ static const match_call_text_data_t sNormanTextScripts[] = { { NULL, 0xFFFF, 0xFFFF } }; -MATCHCALLDEF(sNormanMatchCallHeader, 5, 7, FLAG_ENABLE_NORMAN_MATCH_CALL, 0x45, gNormanMatchCallDesc, gNormanMatchCallName, sNormanTextScripts); +static const struct MatchCallStruct5 sNormanMatchCallHeader = +{ + .type = 5, + .v1 = 7, + .flag = FLAG_ENABLE_NORMAN_MATCH_CALL, + .rematchTableIdx = REMATCH_NORMAN, + .desc = gNormanMatchCallDesc, + .name = gNormanMatchCallName, + .textData = sNormanTextScripts +}; -MATCHCALLDEF(sProfBirchMatchCallHeader, 3, 0, FLAG_ENABLE_PROF_BIRCH_MATCH_CALL, gProfBirchMatchCallDesc, gProfBirchMatchCallName) +static const struct MatchCallStruct3 sProfBirchMatchCallHeader = +{ + .type = 3, + .v1 = 0, + .flag = FLAG_ENABLE_PROF_BIRCH_MATCH_CALL, + .desc = gProfBirchMatchCallDesc, + .name = gProfBirchMatchCallName +}; static const match_call_text_data_t sMomTextScripts[] = { { gText_Mom_Pokenav_2B227B, 0xffff, 0xffff }, @@ -354,7 +373,15 @@ static const match_call_text_data_t sMomTextScripts[] = { { NULL, 0xffff, 0xffff } }; -MATCHCALLDEF(sMomMatchCallHeader, 0, 0, FLAG_ENABLE_MOM_MATCH_CALL, gMomMatchCallDesc, gMomMatchCallName, sMomTextScripts); +static const struct MatchCallStruct0 sMomMatchCallHeader = +{ + .type = 0, + .v1 = 0, + .flag = FLAG_ENABLE_MOM_MATCH_CALL, + .desc = gMomMatchCallDesc, + .name = gMomMatchCallName, + .textData = sMomTextScripts +}; static const match_call_text_data_t sStevenTextScripts[] = { { gText_Steven_Pokenav_2B5B95, 0xffff, 0xffff }, @@ -367,7 +394,15 @@ static const match_call_text_data_t sStevenTextScripts[] = { { NULL, 0xffff, 0xffff }, }; -MATCHCALLDEF(sStevenMatchCallHeader, 0, 0xd5, FLAG_REGISTERED_STEVEN_POKENAV, gStevenMatchCallDesc, gStevenMatchCallName, sStevenTextScripts); +static const struct MatchCallStruct0 sStevenMatchCallHeader = +{ + .type = 0, + .v1 = 0xD5, + .flag = FLAG_REGISTERED_STEVEN_POKENAV, + .desc = gStevenMatchCallDesc, + .name = gStevenMatchCallName, + .textData = sStevenTextScripts +}; static const match_call_text_data_t sMayTextScripts[] = { { gText_May_Pokenav_2B3AB3, 0xFFFF, 0xFFFF }, @@ -388,7 +423,15 @@ static const match_call_text_data_t sMayTextScripts[] = { { NULL, 0xFFFF, 0xFFFF } }; -MATCHCALLDEF(sMayMatchCallHeader, 4, MALE, FLAG_ENABLE_RIVAL_MATCH_CALL, gMayBrendanMatchCallDesc, gExpandedPlaceholder_May, sMayTextScripts); +static const struct MatchCallStruct4 sMayMatchCallHeader = +{ + .type = 4, + .gender = MALE, + .flag = FLAG_ENABLE_RIVAL_MATCH_CALL, + .desc = gMayBrendanMatchCallDesc, + .name = gExpandedPlaceholder_May, + .textData = sMayTextScripts +}; static const match_call_text_data_t sBrendanTextScripts[] = { { gText_Brendan_Pokenav_2B43EF, 0xFFFF, 0xFFFF }, @@ -409,7 +452,15 @@ static const match_call_text_data_t sBrendanTextScripts[] = { { NULL, 0xFFFF, 0xFFFF } }; -MATCHCALLDEF(sBrendanMatchCallHeader, 4, FEMALE, FLAG_ENABLE_RIVAL_MATCH_CALL, gMayBrendanMatchCallDesc, gExpandedPlaceholder_Brendan, sBrendanTextScripts); +static const struct MatchCallStruct4 sBrendanMatchCallHeader = +{ + .type = 4, + .gender = FEMALE, + .flag = FLAG_ENABLE_RIVAL_MATCH_CALL, + .desc = gMayBrendanMatchCallDesc, + .name = gExpandedPlaceholder_Brendan, + .textData = sBrendanTextScripts +}; static const match_call_text_data_t sWallyTextScripts[] = { { gText_Wally_Pokenav_2B4DE2, 0xFFFF, 0xFFFF }, @@ -429,7 +480,16 @@ const struct MatchCallSubstruct2 sWallyAdditionalData[] = { { 0xFFFF, 0xD5 } }; -MATCHCALLDEF(sWallyMatchCallHeader, 2, 0, FLAG_ENABLE_WALLY_MATCH_CALL, REMATCH_WALLY_3, gWallyMatchCallDesc, sWallyTextScripts, sWallyAdditionalData); +static const struct MatchCallStruct2 sWallyMatchCallHeader = +{ + .type = 2, + .v1 = 0, + .flag = FLAG_ENABLE_WALLY_MATCH_CALL, + .rematchTableIdx = REMATCH_WALLY_3, + .desc = gWallyMatchCallDesc, + .textData = sWallyTextScripts, + .v10 = sWallyAdditionalData +}; static const match_call_text_data_t sScottTextScripts[] = { { gText_Scott_Pokenav_2B5184, 0xFFFF, 0xFFFF }, @@ -443,7 +503,15 @@ static const match_call_text_data_t sScottTextScripts[] = { }; -MATCHCALLDEF(sScottMatchCallHeader, 0, 0xD5, FLAG_ENABLE_SCOTT_MATCH_CALL, gScottMatchCallDesc, gScottMatchCallName, sScottTextScripts); +static const struct MatchCallStruct0 sScottMatchCallHeader = +{ + .type = 0, + .v1 = 0xD5, + .flag = FLAG_ENABLE_SCOTT_MATCH_CALL, + .desc = gScottMatchCallDesc, + .name = gScottMatchCallName, + .textData = sScottTextScripts +}; static const match_call_text_data_t sRoxanneTextScripts[] = { { gText_Roxanne_Pokenav_2B2456, 0xFFFE, 0xFFFF }, @@ -453,7 +521,16 @@ static const match_call_text_data_t sRoxanneTextScripts[] = { { NULL, 0xFFFF, 0xFFFF } }; -MATCHCALLDEF(sRoxanneMatchCallHeader, 5, 10, FLAG_ENABLE_ROXANNE_MATCH_CALL, 0x41, gRoxanneMatchCallDesc, NULL, sRoxanneTextScripts); +static const struct MatchCallStruct5 sRoxanneMatchCallHeader = +{ + .type = 5, + .v1 = 10, + .flag = FLAG_ENABLE_ROXANNE_MATCH_CALL, + .rematchTableIdx = REMATCH_ROXANNE, + .desc = gRoxanneMatchCallDesc, + .name = NULL, + .textData = sRoxanneTextScripts +}; static const match_call_text_data_t sBrawlyTextScripts[] = { { gText_Brawly_Pokenav_2B2659, 0xFFFE, 0xFFFF }, @@ -463,7 +540,16 @@ static const match_call_text_data_t sBrawlyTextScripts[] = { { NULL, 0xFFFF, 0xFFFF } }; -MATCHCALLDEF(sBrawlyMatchCallHeader, 5, 2, FLAG_ENABLE_BRAWLY_MATCH_CALL, 0x42, gBrawlyMatchCallDesc, NULL, sBrawlyTextScripts); +static const struct MatchCallStruct5 sBrawlyMatchCallHeader = +{ + .type = 5, + .v1 = 2, + .flag = FLAG_ENABLE_BRAWLY_MATCH_CALL, + .rematchTableIdx = REMATCH_BRAWLY, + .desc = gBrawlyMatchCallDesc, + .name = NULL, + .textData = sBrawlyTextScripts +}; static const match_call_text_data_t sWattsonTextScripts[] = { { gText_Wattson_Pokenav_2B2912, 0xFFFE, 0xFFFF }, @@ -473,7 +559,16 @@ static const match_call_text_data_t sWattsonTextScripts[] = { { NULL, 0xFFFF, 0xFFFF } }; -MATCHCALLDEF(sWattsonMatchCallHeader, 5, 9, FLAG_ENABLE_WATTSON_MATCH_CALL, 0x43, gWattsonMatchCallDesc, NULL, sWattsonTextScripts); +static const struct MatchCallStruct5 sWattsonMatchCallHeader = +{ + .type = 5, + .v1 = 9, + .flag = FLAG_ENABLE_WATTSON_MATCH_CALL, + .rematchTableIdx = REMATCH_WATTSON, + .desc = gWattsonMatchCallDesc, + .name = NULL, + .textData = sWattsonTextScripts +}; static const match_call_text_data_t sFlanneryTextScripts[] = { { gText_Flannery_Pokenav_2B2B4D, 0xFFFE, 0xFFFF }, @@ -483,7 +578,16 @@ static const match_call_text_data_t sFlanneryTextScripts[] = { { NULL, 0xFFFF, 0xFFFF } }; -MATCHCALLDEF(sFlanneryMatchCallHeader, 5, 3, FLAG_ENABLE_FLANNERY_MATCH_CALL, 0x44, gFlanneryMatchCallDesc, NULL, sFlanneryTextScripts); +static const struct MatchCallStruct5 sFlanneryMatchCallHeader = +{ + .type = 5, + .v1 = 3, + .flag = FLAG_ENABLE_FLANNERY_MATCH_CALL, + .rematchTableIdx = REMATCH_FLANNERY, + .desc = gFlanneryMatchCallDesc, + .name = NULL, + .textData = sFlanneryTextScripts +}; static const match_call_text_data_t sWinonaTextScripts[] = { { gText_Winona_Pokenav_2B2DA4, 0xFFFE, 0xFFFF }, @@ -493,7 +597,16 @@ static const match_call_text_data_t sWinonaTextScripts[] = { { NULL, 0xFFFF, 0xFFFF } }; -MATCHCALLDEF(sWinonaMatchCallHeader, 5, 11, FLAG_ENABLE_WINONA_MATCH_CALL, 0x46, gWinonaMatchCallDesc, NULL, sWinonaTextScripts); +static const struct MatchCallStruct5 sWinonaMatchCallHeader = +{ + .type = 5, + .v1 = 11, + .flag = FLAG_ENABLE_WINONA_MATCH_CALL, + .rematchTableIdx = REMATCH_WINONA, + .desc = gWinonaMatchCallDesc, + .name = NULL, + .textData = sWinonaTextScripts +}; static const match_call_text_data_t sTateLizaTextScripts[] = { { gText_TateLiza_Pokenav_2B2F97, 0xFFFE, 0xFFFF }, @@ -503,7 +616,16 @@ static const match_call_text_data_t sTateLizaTextScripts[] = { { NULL, 0xFFFF, 0xFFFF } }; -MATCHCALLDEF(sTateLizaMatchCallHeader, 5, 13, FLAG_ENABLE_TATE_AND_LIZA_MATCH_CALL, 0x47, gTateLizaMatchCallDesc, NULL, sTateLizaTextScripts); +static const struct MatchCallStruct5 sTateLizaMatchCallHeader = +{ + .type = 5, + .v1 = 13, + .flag = FLAG_ENABLE_TATE_AND_LIZA_MATCH_CALL, + .rematchTableIdx = REMATCH_TATE_AND_LIZA, + .desc = gTateLizaMatchCallDesc, + .name = NULL, + .textData = sTateLizaTextScripts +}; static const match_call_text_data_t sJuanTextScripts[] = { { gText_Juan_Pokenav_2B3249, 0xFFFE, 0xFFFF }, @@ -513,42 +635,96 @@ static const match_call_text_data_t sJuanTextScripts[] = { { NULL, 0xFFFF, 0xFFFF } }; -MATCHCALLDEF(sJuanMatchCallHeader, 5, 14, FLAG_ENABLE_JUAN_MATCH_CALL, 0x48, gJuanMatchCallDesc, NULL, sJuanTextScripts); +static const struct MatchCallStruct5 sJuanMatchCallHeader = +{ + .type = 5, + .v1 = 14, + .flag = FLAG_ENABLE_JUAN_MATCH_CALL, + .rematchTableIdx = REMATCH_JUAN, + .desc = gJuanMatchCallDesc, + .name = NULL, + .textData = sJuanTextScripts +}; static const match_call_text_data_t sSidneyTextScripts[] = { { gText_Sidney_Pokenav_2B34CC, 0xFFFF, 0xFFFF }, { NULL, 0xFFFF, 0xFFFF } }; -MATCHCALLDEF(sSidneyMatchCallHeader, 5, 15, FLAG_REMATCH_JUAN, 0x49, gEliteFourMatchCallDesc, NULL, sSidneyTextScripts); +static const struct MatchCallStruct5 sSidneyMatchCallHeader = +{ + .type = 5, + .v1 = 15, + .flag = FLAG_REMATCH_SIDNEY, + .rematchTableIdx = REMATCH_SIDNEY, + .desc = gEliteFourMatchCallDesc, + .name = NULL, + .textData = sSidneyTextScripts +}; static const match_call_text_data_t sPhoebeTextScripts[] = { { gText_Phoebe_Pokenav_2B3561, 0xFFFF, 0xFFFF }, { NULL, 0xFFFF, 0xFFFF } }; -MATCHCALLDEF(sPhoebeMatchCallHeader, 5, 15, FLAG_REMATCH_SIDNEY, 0x4A, gEliteFourMatchCallDesc, NULL, sPhoebeTextScripts); +static const struct MatchCallStruct5 sPhoebeMatchCallHeader = +{ + .type = 5, + .v1 = 15, + .flag = FLAG_REMATCH_PHOEBE, + .rematchTableIdx = REMATCH_PHOEBE, + .desc = gEliteFourMatchCallDesc, + .name = NULL, + .textData = sPhoebeTextScripts +}; static const match_call_text_data_t sGlaciaTextScripts[] = { { gText_Glacia_Pokenav_2B35E4, 0xFFFF, 0xFFFF }, { NULL, 0xFFFF, 0xFFFF } }; -MATCHCALLDEF(sGlaciaMatchCallHeader, 5, 15, FLAG_REMATCH_PHOEBE, 0x4B, gEliteFourMatchCallDesc, NULL, sGlaciaTextScripts); +static const struct MatchCallStruct5 sGlaciaMatchCallHeader = +{ + .type = 5, + .v1 = 15, + .flag = FLAG_REMATCH_GLACIA, + .rematchTableIdx = REMATCH_GLACIA, + .desc = gEliteFourMatchCallDesc, + .name = NULL, + .textData = sGlaciaTextScripts +}; static const match_call_text_data_t sDrakeTextScripts[] = { { gText_Drake_Pokenav_2B368B, 0xFFFF, 0xFFFF }, { NULL, 0xFFFF, 0xFFFF } }; -MATCHCALLDEF(sDrakeMatchCallHeader, 5, 15, FLAG_REMATCH_GLACIA, 0x4C, gEliteFourMatchCallDesc, NULL, sDrakeTextScripts); +static const struct MatchCallStruct5 sDrakeMatchCallHeader = +{ + .type = 5, + .v1 = 15, + .flag = FLAG_REMATCH_DRAKE, + .rematchTableIdx = REMATCH_DRAKE, + .desc = gEliteFourMatchCallDesc, + .name = NULL, + .textData = sDrakeTextScripts +}; static const match_call_text_data_t sWallaceTextScripts[] = { { gText_Wallace_Pokenav_2B3790, 0xFFFF, 0xFFFF }, { NULL, 0xFFFF, 0xFFFF } }; -MATCHCALLDEF(sWallaceMatchCallHeader, 5, 15, FLAG_REMATCH_DRAKE, 0x4D, gChampionMatchCallDesc, NULL, sWallaceTextScripts); +static const struct MatchCallStruct5 sWallaceMatchCallHeader = +{ + .type = 5, + .v1 = 15, + .flag = FLAG_REMATCH_WALLACE, + .rematchTableIdx = REMATCH_WALLACE, + .desc = gChampionMatchCallDesc, + .name = NULL, + .textData = sWallaceTextScripts +}; static const match_call_t sMatchCallHeaders[] = { {.type0 = &sMrStoneMatchCallHeader}, @@ -906,9 +1082,9 @@ static void MatchCall_GetMessage_Type0(match_call_t matchCall, u8 *dest) static void MatchCall_GetMessage_Type1(match_call_t matchCall, u8 *dest) { if (matchCall.common->type != 5) - sub_81D1920(matchCall.type5->textData, dest); + sub_81D1920(matchCall.type1->textData, dest); else - sub_81D199C(matchCall.type1->textData, matchCall.type1->rematchTableIdx, dest); + sub_81D199C(matchCall.type5->textData, matchCall.type5->rematchTableIdx, dest); } static void MatchCall_GetMessage_Type2(match_call_t matchCall, u8 *dest) -- cgit v1.2.3 From 1aa95a1821cd4ebe552a39bbfed067a305071e31 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 2 Apr 2019 08:36:22 +0200 Subject: Document a bit of anims --- src/battle_anim_effects_1.c | 16 ++++++++-------- src/battle_anim_effects_2.c | 4 ++-- src/bug.c | 19 +++++++++++++------ src/dark.c | 44 ++++++++++++++++++++++++++------------------ 4 files changed, 49 insertions(+), 34 deletions(-) (limited to 'src') diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c index f14e502f3..af4bc19ec 100644 --- a/src/battle_anim_effects_1.c +++ b/src/battle_anim_effects_1.c @@ -1093,7 +1093,7 @@ const struct SpriteTemplate gUnknown_085928D0 = .callback = sub_8100A50, }; -const struct SpriteTemplate gUnknown_085928E8 = +const struct SpriteTemplate gVineWhipSpriteTemplate = { .tileTag = ANIM_TAG_WHIP_HIT, .paletteTag = ANIM_TAG_WHIP_HIT, @@ -2336,7 +2336,7 @@ void AnimHyperBeamOrb(struct Sprite* sprite) { u16 speed; u16 animNum = Random2(); - + StartSpriteAnim(sprite, animNum % 8); sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_X_2); sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, BATTLER_COORD_Y_PIC_OFFSET); @@ -2660,7 +2660,7 @@ static void AnimTranslateLinearSingleSineWaveStep(struct Sprite* sprite) s16 a = sprite->data[0]; s16 b = sprite->data[7]; s16 r0; - + sprite->data[0] = 1; TranslateAnimHorizontalArc(sprite); r0 = sprite->data[7]; @@ -2675,7 +2675,7 @@ static void AnimTranslateLinearSingleSineWaveStep(struct Sprite* sprite) if (sprite->oam.affineParam == 30) destroy = TRUE; } - + if (sprite->pos1.x + sprite->pos2.x > 256 || sprite->pos1.x + sprite->pos2.x < -16 || sprite->pos1.y + sprite->pos2.y > 160 @@ -3748,7 +3748,7 @@ void sub_81009F8(struct Sprite* sprite) void sub_8100A50(struct Sprite* sprite) { - if (GetBattlerSide(gBattleAnimAttacker) == 0) + if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_PLAYER) StartSpriteAnim(sprite, 1); sprite->callback = sub_81009DC; @@ -3770,7 +3770,7 @@ void sub_8100A94(struct Sprite* sprite) } // Moves the sprite in a diagonally slashing motion across the target mon. -// Used by moves such as MOVE_CUT and MOVE_AERIAL_ACE. +// Used by moves such as MOVE_CUT and MOVE_AERIAL_ACE. // arg 0: initial x pixel offset // arg 1: initial y pixel offset // arg 2: slice direction; 0 = right-to-left, 1 = left-to-right @@ -5350,10 +5350,10 @@ static void sub_8102DE4(struct Sprite* sprite) void sub_8102EB0(struct Sprite* sprite) { - int a; + int a; if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT) { - a = gBattleAnimArgs[1]; + a = gBattleAnimArgs[1]; (u16)gBattleAnimArgs[1] = -a; } diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c index 80b3258b4..e3295acb8 100755 --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -889,7 +889,7 @@ const struct SpriteTemplate gUnknown_08593958 = .callback = sub_8105DE8, }; -const struct SpriteTemplate gUnknown_08593970 = +const struct SpriteTemplate gMagentaHeartSpriteTemplate = { .tileTag = ANIM_TAG_MAGENTA_HEART, .paletteTag = ANIM_TAG_MAGENTA_HEART, @@ -3286,7 +3286,7 @@ static void sub_810627C(struct Sprite *sprite) } } -void sub_81062E8(u8 taskId) +void AnimTask_HeartsBackground(u8 taskId) { struct BattleAnimBgData animBg; diff --git a/src/bug.c b/src/bug.c index 88f93a3d5..4fa6a5bb6 100644 --- a/src/bug.c +++ b/src/bug.c @@ -6,7 +6,7 @@ void sub_8110368(struct Sprite *); void sub_8110438(struct Sprite *); -void sub_81104E4(struct Sprite *); +void AnimTranslateWebThread(struct Sprite *); void sub_81105B4(struct Sprite *); void sub_811067C(struct Sprite *); void AnimTranslateStinger(struct Sprite *); @@ -90,7 +90,7 @@ const struct SpriteTemplate gUnknown_085969C8 = .callback = sub_8110438, }; -const struct SpriteTemplate gUnknown_085969E0 = +const struct SpriteTemplate gWebThreadSpriteTemplate = { .tileTag = ANIM_TAG_WEB_THREAD, .paletteTag = ANIM_TAG_WEB_THREAD, @@ -98,7 +98,7 @@ const struct SpriteTemplate gUnknown_085969E0 = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_81104E4, + .callback = AnimTranslateWebThread, }; const struct SpriteTemplate gUnknown_085969F8 = @@ -124,7 +124,7 @@ const union AffineAnimCmd *const gUnknown_08596A28[] = gUnknown_08596A10, }; -const struct SpriteTemplate gUnknown_08596A2C = +const struct SpriteTemplate gSpiderWebSpriteTemplate = { .tileTag = ANIM_TAG_SPIDER_WEB, .paletteTag = ANIM_TAG_SPIDER_WEB, @@ -247,12 +247,19 @@ void sub_8110438(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } -void sub_81104E4(struct Sprite *sprite) +// Creates a single web thread that travels from attacker to target. +// Used by MOVE_STRING_SHOT and MOVE_SPIDER_WEB in their first move phase. +// arg 0: x +// arg 1: y +// arg 2: controls the left-to-right movement +// arg 3: amplitude +// arg 4: if targets both opponents +void AnimTranslateWebThread(struct Sprite *sprite) { if (IsContest()) gBattleAnimArgs[2] /= 2; - InitSpritePosToAnimAttacker(sprite, 1); + InitSpritePosToAnimAttacker(sprite, TRUE); sprite->data[0] = gBattleAnimArgs[2]; sprite->data[1] = sprite->pos1.x; sprite->data[3] = sprite->pos1.y; diff --git a/src/dark.c b/src/dark.c index 80ce61800..482c09c04 100644 --- a/src/dark.c +++ b/src/dark.c @@ -803,17 +803,23 @@ void sub_81144BC(struct Sprite *sprite) StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } -void sub_81144F8(u8 taskId) +// Makes the attacker metallic and shining. +// Used by MOVE_HARDEN and MOVE_IRON_DEFENSE. +// arg0: if true won't change battler's palette back +// arg1: if true, use custom color +// arg2: custom color +// Custom color argument is used in MOVE_POISON_TAIL to make the mon turn purplish/pinkish as if became cloaked in poison. +void AnimTask_MetallicShine(u8 taskId) { u16 species; u8 spriteId; u8 newSpriteId; u16 paletteNum; struct BattleAnimBgData animBg; - int var0 = 0; + bool32 priorityChanged = FALSE; - gBattle_WIN0H = var0; - gBattle_WIN0V = var0; + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; 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_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | WINOUT_WIN01_BG0 | WINOUT_WIN01_BG2 | WINOUT_WIN01_BG3 | WINOUT_WIN01_OBJ | WINOUT_WIN01_CLR); SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJWIN_ON); @@ -832,7 +838,7 @@ void sub_81144F8(u8 taskId) { gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]].oam.priority--; SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); - var0 = 1; + priorityChanged = TRUE; } } } @@ -861,7 +867,7 @@ void sub_81144F8(u8 taskId) gBattle_BG1_Y = -gSprites[spriteId].pos1.y + 32; paletteNum = 16 + gSprites[spriteId].oam.paletteNum; - if (gBattleAnimArgs[1] == 0) + if (gBattleAnimArgs[1] == 0) SetGreyscaleOrOriginalPalette(paletteNum, FALSE); else BlendPalette(paletteNum * 16, 16, 11, gBattleAnimArgs[2]); @@ -870,7 +876,7 @@ void sub_81144F8(u8 taskId) gTasks[taskId].data[1] = gBattleAnimArgs[0]; gTasks[taskId].data[2] = gBattleAnimArgs[1]; gTasks[taskId].data[3] = gBattleAnimArgs[2]; - gTasks[taskId].data[6] = var0; + gTasks[taskId].data[6] = priorityChanged; gTasks[taskId].func = sub_8114748; } @@ -879,29 +885,28 @@ static void sub_8114748(u8 taskId) struct BattleAnimBgData animBg; u16 paletteNum; u8 spriteId; - u8 taskIdCopy = taskId; - gTasks[taskIdCopy].data[10] += 4; + gTasks[taskId].data[10] += 4; gBattle_BG1_X -= 4; - if (gTasks[taskIdCopy].data[10] == 128) + if (gTasks[taskId].data[10] == 128) { - gTasks[taskIdCopy].data[10] = 0; + gTasks[taskId].data[10] = 0; gBattle_BG1_X += 128; - gTasks[taskIdCopy].data[11]++; - if (gTasks[taskIdCopy].data[11] == 2) + gTasks[taskId].data[11]++; + if (gTasks[taskId].data[11] == 2) { spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); paletteNum = 16 + gSprites[spriteId].oam.paletteNum; - if (gTasks[taskIdCopy].data[1] == 0) + if (gTasks[taskId].data[1] == 0) SetGreyscaleOrOriginalPalette(paletteNum, 1); - DestroySprite(&gSprites[gTasks[taskIdCopy].data[0]]); + DestroySprite(&gSprites[gTasks[taskId].data[0]]); sub_80A6B30(&animBg); sub_80A6C68(animBg.bgId); - if (gTasks[taskIdCopy].data[6] == 1) + if (gTasks[taskId].data[6] == 1) gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]].oam.priority++; } - else if (gTasks[taskIdCopy].data[11] == 3) + else if (gTasks[taskId].data[11] == 3) { gBattle_WIN0H = 0; gBattle_WIN0V = 0; @@ -918,7 +923,10 @@ static void sub_8114748(u8 taskId) } } -void sub_811489C(u8 taskId) +// Changes battler's palette to either greyscale or original. +// arg0: which battler +// arg1: 0 grayscale, 1 original +void AnimTask_SetGreyscaleOrOriginalPal(u8 taskId) { u8 spriteId; u8 battler; -- cgit v1.2.3 From 201c0953ae4f6c6b65958065f009cbaee3c8f3ee Mon Sep 17 00:00:00 2001 From: Phlosioneer Date: Mon, 1 Apr 2019 18:31:10 -0400 Subject: Cleanup OamData entries --- src/battle_anim.c | 362 +++++++++++++++++++++++++++++++++++++++++++++ src/battle_main.c | 22 ++- src/cable_car.c | 34 ++++- src/contest.c | 39 ++--- src/contest_painting.c | 5 +- src/decoration.c | 13 +- src/field_effect.c | 41 ++++- src/field_weather_effect.c | 29 ++-- src/link_rfu.c | 14 +- src/naming_screen.c | 29 ++-- src/pokedex_cry_screen.c | 8 +- src/pokemon_icon.c | 11 +- 12 files changed, 511 insertions(+), 96 deletions(-) mode change 100755 => 100644 src/cable_car.c mode change 100755 => 100644 src/pokedex_cry_screen.c (limited to 'src') diff --git a/src/battle_anim.c b/src/battle_anim.c index 31ff11ee8..88de3ee88 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -117,651 +117,1011 @@ EWRAM_DATA u8 gUnknown_02038440 = 0; const struct OamData gUnknown_08524904 = { + .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), + .x = 0, .size = SPRITE_SIZE(8x8), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_0852490C = { + .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), + .x = 0, .size = SPRITE_SIZE(16x16), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524914 = { + .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), + .x = 0, .size = SPRITE_SIZE(32x32), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_0852491C = { + .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), + .x = 0, .size = SPRITE_SIZE(64x64), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524924 = { + .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x8), + .x = 0, .size = SPRITE_SIZE(16x8), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_0852492C = { + .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x8), + .x = 0, .size = SPRITE_SIZE(32x8), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524934 = { + .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x16), + .x = 0, .size = SPRITE_SIZE(32x16), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_0852493C = { + .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x32), + .x = 0, .size = SPRITE_SIZE(64x32), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524944 = { + .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x16), + .x = 0, .size = SPRITE_SIZE(8x16), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_0852494C = { + .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x32), + .x = 0, .size = SPRITE_SIZE(8x32), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524954 = { + .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x32), + .x = 0, .size = SPRITE_SIZE(16x32), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_0852495C = { + .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x64), + .x = 0, .size = SPRITE_SIZE(32x64), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524964 = { + .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), + .x = 0, .size = SPRITE_SIZE(8x8), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_0852496C = { + .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), + .x = 0, .size = SPRITE_SIZE(16x16), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524974 = { + .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), + .x = 0, .size = SPRITE_SIZE(32x32), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_0852497C = { + .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), + .x = 0, .size = SPRITE_SIZE(64x64), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524984 = { + .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x8), + .x = 0, .size = SPRITE_SIZE(16x8), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_0852498C = { + .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x8), + .x = 0, .size = SPRITE_SIZE(32x8), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524994 = { + .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x16), + .x = 0, .size = SPRITE_SIZE(32x16), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_0852499C = { + .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x32), + .x = 0, .size = SPRITE_SIZE(64x32), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_085249A4 = { + .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x16), + .x = 0, .size = SPRITE_SIZE(8x16), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_085249AC = { + .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x32), + .x = 0, .size = SPRITE_SIZE(8x32), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_085249B4 = { + .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x32), + .x = 0, .size = SPRITE_SIZE(16x32), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_085249BC = { + .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x64), + .x = 0, .size = SPRITE_SIZE(32x64), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_085249C4 = { + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), + .x = 0, .size = SPRITE_SIZE(8x8), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_085249CC = { + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), + .x = 0, .size = SPRITE_SIZE(16x16), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_085249D4 = { + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), + .x = 0, .size = SPRITE_SIZE(32x32), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_085249DC = { + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), + .x = 0, .size = SPRITE_SIZE(64x64), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_085249E4 = { + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x8), + .x = 0, .size = SPRITE_SIZE(16x8), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_085249EC = { + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x8), + .x = 0, .size = SPRITE_SIZE(32x8), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_085249F4 = { + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x16), + .x = 0, .size = SPRITE_SIZE(32x16), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_085249FC = { + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x32), + .x = 0, .size = SPRITE_SIZE(64x32), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524A04 = { + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x16), + .x = 0, .size = SPRITE_SIZE(8x16), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524A0C = { + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x32), + .x = 0, .size = SPRITE_SIZE(8x32), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524A14 = { + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x32), + .x = 0, .size = SPRITE_SIZE(16x32), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524A1C = { + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x64), + .x = 0, .size = SPRITE_SIZE(32x64), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524A24 = { + .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), + .x = 0, .size = SPRITE_SIZE(8x8), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524A2C = { + .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), + .x = 0, .size = SPRITE_SIZE(16x16), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524A34 = { + .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), + .x = 0, .size = SPRITE_SIZE(32x32), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524A3C = { + .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), + .x = 0, .size = SPRITE_SIZE(64x64), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524A44 = { + .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x8), + .x = 0, .size = SPRITE_SIZE(16x8), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524A4C = { + .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x8), + .x = 0, .size = SPRITE_SIZE(32x8), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524A54 = { + .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x16), + .x = 0, .size = SPRITE_SIZE(32x16), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524A5C = { + .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x32), + .x = 0, .size = SPRITE_SIZE(64x32), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524A64 = { + .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x16), + .x = 0, .size = SPRITE_SIZE(8x16), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524A6C = { + .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x32), + .x = 0, .size = SPRITE_SIZE(8x32), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524A74 = { + .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x32), + .x = 0, .size = SPRITE_SIZE(16x32), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524A7C = { + .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x64), + .x = 0, .size = SPRITE_SIZE(32x64), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524A84 = { + .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), + .x = 0, .size = SPRITE_SIZE(8x8), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524A8C = { + .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), + .x = 0, .size = SPRITE_SIZE(16x16), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524A94 = { + .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), + .x = 0, .size = SPRITE_SIZE(32x32), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524A9C = { + .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), + .x = 0, .size = SPRITE_SIZE(64x64), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524AA4 = { + .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x8), + .x = 0, .size = SPRITE_SIZE(16x8), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524AAC = { + .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x8), + .x = 0, .size = SPRITE_SIZE(32x8), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524AB4 = { + .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x16), + .x = 0, .size = SPRITE_SIZE(32x16), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524ABC = { + .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x32), + .x = 0, .size = SPRITE_SIZE(64x32), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524AC4 = { + .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x16), + .x = 0, .size = SPRITE_SIZE(8x16), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524ACC = { + .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x32), + .x = 0, .size = SPRITE_SIZE(8x32), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524AD4 = { + .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x32), + .x = 0, .size = SPRITE_SIZE(16x32), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524ADC = { + .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x64), + .x = 0, .size = SPRITE_SIZE(32x64), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524AE4 = { + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), + .x = 0, .size = SPRITE_SIZE(8x8), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524AEC = { + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), + .x = 0, .size = SPRITE_SIZE(16x16), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524AF4 = { + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), + .x = 0, .size = SPRITE_SIZE(32x32), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524AFC = { + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), + .x = 0, .size = SPRITE_SIZE(64x64), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524B04 = { + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x8), + .x = 0, .size = SPRITE_SIZE(16x8), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524B0C = { + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x8), + .x = 0, .size = SPRITE_SIZE(32x8), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524B14 = { + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x16), + .x = 0, .size = SPRITE_SIZE(32x16), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524B1C = { + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x32), + .x = 0, .size = SPRITE_SIZE(64x32), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524B24 = { + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x16), + .x = 0, .size = SPRITE_SIZE(8x16), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524B2C = { + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x32), + .x = 0, .size = SPRITE_SIZE(8x32), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524B34 = { + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x32), + .x = 0, .size = SPRITE_SIZE(16x32), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct OamData gUnknown_08524B3C = { + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x64), + .x = 0, .size = SPRITE_SIZE(32x64), + .tileNum = 0, .priority = 2, + .paletteNum = 0, }; const struct CompressedSpriteSheet gBattleAnimPicTable[] = @@ -3088,3 +3448,5 @@ static void ScriptCmd_stopsound(void) m4aMPlayStop(&gMPlayInfo_SE2); sBattleAnimScriptPtr++; } + + diff --git a/src/battle_main.c b/src/battle_main.c index 19fd01e3c..92f12636d 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -293,35 +293,31 @@ static const u8 sText_ShedinjaJpnName[] = _("ヌケニン"); // Nukenin const struct OamData gOamData_831ACA8 = { .y = 0, - .affineMode = 1, - .objMode = 0, - .mosaic = 0, - .bpp = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, - .matrixNum = 0, .size = SPRITE_SIZE(64x64), .tileNum = 0, .priority = 2, .paletteNum = 0, - .affineParam = 0 + .affineParam = 0, }; const struct OamData gOamData_831ACB0 = { .y = 0, - .affineMode = 1, - .objMode = 0, - .mosaic = 0, - .bpp = 0, + .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, - .matrixNum = 0, .size = SPRITE_SIZE(64x64), .tileNum = 0, .priority = 2, .paletteNum = 2, - .affineParam = 0 + .affineParam = 0, }; // Unknown and unused data. Feel free to remove. @@ -5891,3 +5887,5 @@ static void HandleAction_ActionFinished(void) gBattleScripting.multihitMoveEffect = 0; gBattleResources->battleScriptsStack->size = 0; } + + diff --git a/src/cable_car.c b/src/cable_car.c old mode 100755 new mode 100644 index ab7b5726a..4e6980c4e --- a/src/cable_car.c +++ b/src/cable_car.c @@ -151,25 +151,46 @@ const struct SpritePalette gUnknown_085CDB74[] = { { } }; -const struct OamData gOamData_85CDB84 = { +const struct OamData gOamData_85CDB84 = +{ + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), + .x = 0, .size = SPRITE_SIZE(64x64), - .priority = 2 + .tileNum = 0, + .priority = 2, + .paletteNum = 0, }; -const struct OamData gOamData_85CDB8C = { +const struct OamData gOamData_85CDB8C = +{ + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x8), + .x = 0, .size = SPRITE_SIZE(16x8), - .priority = 2 + .tileNum = 0, + .priority = 2, + .paletteNum = 0, }; -const struct OamData gOamData_85CDB94 = { +const struct OamData gOamData_85CDB94 = +{ + .y = 0, .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), + .x = 0, .size = SPRITE_SIZE(16x16), - .priority = 2 + .tileNum = 0, + .priority = 2, + .paletteNum = 0, }; const struct SpriteTemplate gSpriteTemplate_85CDB9C[] = @@ -1007,3 +1028,4 @@ static void sub_81514C8(u8 arg0) sCableCar->unk1C = 0; } + diff --git a/src/contest.c b/src/contest.c index 0591668ff..02d7038cf 100644 --- a/src/contest.c +++ b/src/contest.c @@ -445,18 +445,15 @@ const struct CompressedSpriteSheet gUnknown_08587B88 = const struct OamData gOamData_8587B90 = { .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, - .matrixNum = 0, .size = SPRITE_SIZE(16x16), .tileNum = 0, .priority = 0, .paletteNum = 0, - .affineParam = 0 }; const struct SpriteTemplate gSpriteTemplate_8587B98 = @@ -486,18 +483,15 @@ const struct SpritePalette gUnknown_08587BB8 = const struct OamData gOamData_8587BC0 = { .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x32), .x = 0, - .matrixNum = 0, .size = SPRITE_SIZE(64x32), .tileNum = 0, .priority = 0, .paletteNum = 0, - .affineParam = 0 }; const struct SpriteTemplate gSpriteTemplate_8587BC8 = @@ -514,18 +508,15 @@ const struct SpriteTemplate gSpriteTemplate_8587BC8 = const struct OamData gOamData_8587BE0 = { .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, - .matrixNum = 0, .size = SPRITE_SIZE(64x64), .tileNum = 0, .priority = 3, .paletteNum = 2, - .affineParam = 0 }; const struct SpriteTemplate gSpriteTemplate_8587BE8 = @@ -768,18 +759,16 @@ static const struct SpritePalette sUnknown_08589924[] = const struct OamData gOamData_8589944 = { .y = 0, - .affineMode = 3, - .objMode = 1, - .mosaic = 0, - .bpp = 0, + .affineMode = ST_OAM_AFFINE_DOUBLE, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, - .matrixNum = 0, .size = SPRITE_SIZE(64x64), .tileNum = 0, .priority = 0, .paletteNum = 0, - .affineParam = 0 + .affineParam = 0, }; const union AffineAnimCmd gSpriteAffineAnim_858994C[] = @@ -5762,3 +5751,5 @@ void sub_80DFA08(struct ContestPokemon *mon, s32 language) name[PLAYER_NAME_LENGTH] = EOS; } } + + diff --git a/src/contest_painting.c b/src/contest_painting.c index 29f3c871d..87598f2bd 100644 --- a/src/contest_painting.c +++ b/src/contest_painting.c @@ -152,16 +152,14 @@ const struct OamData gUnknown_085B0830 = .y = 0, .affineMode = ST_OAM_AFFINE_OFF, .objMode = ST_OAM_OBJ_NORMAL, - .mosaic = 1, + .mosaic = TRUE, .bpp = ST_OAM_8BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, - .matrixNum = 0, .size = SPRITE_SIZE(64x64), .tileNum = 0, .priority = 0, .paletteNum = 0, - .affineParam = 0, }; const u16 gUnknown_085B0838[] = {RGB(0, 0, 0), RGB(0, 0, 0)}; @@ -705,3 +703,4 @@ static void sub_8130884(u8 arg0, u8 arg1) sub_8130688(arg0); sub_8130430(arg0, arg1); } + diff --git a/src/decoration.c b/src/decoration.c index 3c8809c6a..4baa6d4c8 100644 --- a/src/decoration.c +++ b/src/decoration.c @@ -391,10 +391,18 @@ const struct SpritePalette gUnknown_085A73E0 = { Unknown_085A7328, OVERWORLD_PLACE_DECOR_PLAYER_PAL_TAG }; -const struct OamData Unknown_085A73E8 = { +const struct OamData Unknown_085A73E8 = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), + .x = 0, .size = SPRITE_SIZE(16x16), - .priority = 1 + .tileNum = 0, + .priority = 1, + .paletteNum = 0, }; const union AnimCmd Unknown_085A73F0[] = { @@ -2740,3 +2748,4 @@ void sub_812A478(u8 taskId) StringExpandPlaceholders(gStringVar4, gText_DecorationThrownAway); DisplayItemMessageOnField(taskId, gStringVar4, sub_8127A5C); } + diff --git a/src/field_effect.c b/src/field_effect.c index 825efc380..93d7e5ef8 100644 --- a/src/field_effect.c +++ b/src/field_effect.c @@ -284,20 +284,44 @@ bool8 (*const gFieldEffectScriptFuncs[])(u8 **, u32 *) = const struct OamData gNewGameBirchOamAttributes = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), - .size = SPRITE_SIZE(64x64) + .x = 0, + .size = SPRITE_SIZE(64x64), + .tileNum = 0, + .priority = 0, + .paletteNum = 0, }; const struct OamData gOamData_855C218 = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), - .size = SPRITE_SIZE(8x8) + .x = 0, + .size = SPRITE_SIZE(8x8), + .tileNum = 0, + .priority = 0, + .paletteNum = 0, }; const struct OamData gOamData_855C220 = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), - .size = SPRITE_SIZE(16x16) + .x = 0, + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 0, + .paletteNum = 0, }; const struct SpriteFrameImage gNewGameBirchPicTable[] = @@ -347,8 +371,16 @@ const struct SpritePalette gFieldEffectObjectPaletteInfo5 = const struct OamData gOamData_855C26C = { + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x16), - .size = SPRITE_SIZE(32x16) + .x = 0, + .size = SPRITE_SIZE(32x16), + .tileNum = 0, + .priority = 0, + .paletteNum = 0, }; const struct SpriteFrameImage gSpriteImageTable_855C274[] = @@ -3759,3 +3791,4 @@ static void Fldeff_MoveDeoxysRock_Step(u8 taskId) break; } } + diff --git a/src/field_weather_effect.c b/src/field_weather_effect.c index 6ec83f1a0..1468f7ca0 100644 --- a/src/field_weather_effect.c +++ b/src/field_weather_effect.c @@ -1513,18 +1513,15 @@ void LoadAshSpriteSheet(void) const struct OamData gOamData_839ABB8 = { .y = 0, - .affineMode = 0, - .objMode = 1, - .mosaic = 0, - .bpp = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, - .matrixNum = 0, .size = SPRITE_SIZE(64x64), .tileNum = 0, .priority = 1, .paletteNum = 15, - .affineParam = 0, }; const union AnimCmd gSpriteAnim_839ABC0[] = @@ -1750,18 +1747,15 @@ void CreateFog2Sprites(void) const struct OamData gOamData_839ABF0 = { .y = 0, - .affineMode = 0, - .objMode = 1, - .mosaic = 0, - .bpp = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, - .matrixNum = 0, .size = SPRITE_SIZE(64x64), .tileNum = 0, .priority = 2, .paletteNum = 0, - .affineParam = 0, }; const union AnimCmd gSpriteAnim_839ABF8[] = @@ -1949,18 +1943,15 @@ void sub_80800E4(void) const struct OamData gOamData_839AC1C = { .y = 0, - .affineMode = 0, - .objMode = 1, - .mosaic = 0, - .bpp = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_BLEND, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), .x = 0, - .matrixNum = 0, .size = SPRITE_SIZE(64x64), .tileNum = 0, .priority = 1, .paletteNum = 0, - .affineParam = 0, }; const union AnimCmd gSpriteAnim_839AC24[] = @@ -2470,3 +2461,5 @@ static void UpdateRainCounter(u8 newWeather, u8 oldWeather) && (newWeather == WEATHER_RAIN_LIGHT || newWeather == WEATHER_RAIN_MED)) IncrementGameStat(GAME_STAT_GOT_RAINED_ON); } + + diff --git a/src/link_rfu.c b/src/link_rfu.c index a430f6e24..1e4c9c7e6 100644 --- a/src/link_rfu.c +++ b/src/link_rfu.c @@ -154,9 +154,18 @@ const u8 sWireless_RSEtoASCIITable[] = { 0x20, 0x2b, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x00 }; -const struct OamData sWirelessStatusIndicatorOamData = { +const struct OamData sWirelessStatusIndicatorOamData = +{ + .y = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), - .size = SPRITE_SIZE(16x16) + .x = 0, + .size = SPRITE_SIZE(16x16), + .tileNum = 0, + .priority = 0, + .paletteNum = 0, }; static const union AnimCmd sWirelessStatusIndicatorAnim0[] = { // 3 bars @@ -5182,3 +5191,4 @@ u32 GetRfuRecvQueueLength(void) { return gUnknown_03005000.unk_124.unk_8c2; } + diff --git a/src/naming_screen.c b/src/naming_screen.c index 75b7c8566..3b8ba037c 100644 --- a/src/naming_screen.c +++ b/src/naming_screen.c @@ -1906,52 +1906,43 @@ static const struct NamingScreenTemplate *const sNamingScreenTemplates[] = const struct OamData gOamData_858BFEC = { .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(8x8), .x = 0, - .matrixNum = 0, .size = SPRITE_SIZE(8x8), .tileNum = 0, .priority = 0, .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_858BFF4 = { .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(16x16), .x = 0, - .matrixNum = 0, .size = SPRITE_SIZE(16x16), .tileNum = 0, .priority = 0, .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_858BFFC = { .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x16), .x = 0, - .matrixNum = 0, .size = SPRITE_SIZE(32x16), .tileNum = 0, .priority = 0, .paletteNum = 0, - .affineParam = 0, }; static const struct Subsprite gUnknown_0858C004[] = @@ -2203,3 +2194,5 @@ static const struct SpritePalette gUnknown_0858C230[] = {gNamingScreenMenu_Pal + 0x40, 0x0007}, {NULL} }; + + diff --git a/src/pokedex_cry_screen.c b/src/pokedex_cry_screen.c old mode 100755 new mode 100644 index 8ca0c8d6e..487db6d58 --- a/src/pokedex_cry_screen.c +++ b/src/pokedex_cry_screen.c @@ -169,9 +169,14 @@ const struct OamData gOamData_85B8C60 = { .y = 160, .affineMode = ST_OAM_AFFINE_NORMAL, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(64x64), + .x = 0, .size = SPRITE_SIZE(64x64), - .priority = 1 + .tileNum = 0, + .priority = 1, + .paletteNum = 0, }; const struct SpriteTemplate gUnknown_085B8C68 = @@ -521,3 +526,4 @@ static void sub_8145B24(s8 a0) sCryVolumeMeter->unk1 = r2; sCryVolumeMeter->unk2 = 5; } + diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index 4ff182a0e..a5d3f8961 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -927,18 +927,15 @@ const struct SpritePalette gMonIconPaletteTable[] = const struct OamData sMonIconOamData = { .y = 0, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, + .affineMode = ST_OAM_AFFINE_OFF, + .objMode = ST_OAM_OBJ_NORMAL, + .bpp = ST_OAM_4BPP, .shape = SPRITE_SHAPE(32x32), .x = 0, - .matrixNum = 0, .size = SPRITE_SIZE(32x32), .tileNum = 0, .priority = 1, .paletteNum = 0, - .affineParam = 0 }; // fastest to slowest @@ -1311,3 +1308,5 @@ void sub_80D32C8(struct Sprite *sprite, u8 animNum) sprite->animDelayCounter = 0; sprite->animCmdIndex = 0; } + + -- cgit v1.2.3 From 02e2b1af97dc46824faa3b3b6a28dc2483c1b41d Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 2 Apr 2019 20:57:09 +0200 Subject: Use species defines in gMonIconTable --- src/pokemon_icon.c | 886 ++++++++++++++++++++++++++--------------------------- 1 file changed, 442 insertions(+), 444 deletions(-) (limited to 'src') diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index a5d3f8961..6a135875e 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -25,446 +25,446 @@ static u8 CreateMonIconSprite(struct MonIconSpriteTemplate *, s16, s16, u8); const u8 *const gMonIconTable[] = { - gMonIcon_Bulbasaur, - gMonIcon_Bulbasaur, - gMonIcon_Ivysaur, - gMonIcon_Venusaur, - gMonIcon_Charmander, - gMonIcon_Charmeleon, - gMonIcon_Charizard, - gMonIcon_Squirtle, - gMonIcon_Wartortle, - gMonIcon_Blastoise, - gMonIcon_Caterpie, - gMonIcon_Metapod, - gMonIcon_Butterfree, - gMonIcon_Weedle, - gMonIcon_Kakuna, - gMonIcon_Beedrill, - gMonIcon_Pidgey, - gMonIcon_Pidgeotto, - gMonIcon_Pidgeot, - gMonIcon_Rattata, - gMonIcon_Raticate, - gMonIcon_Spearow, - gMonIcon_Fearow, - gMonIcon_Ekans, - gMonIcon_Arbok, - gMonIcon_Pikachu, - gMonIcon_Raichu, - gMonIcon_Sandshrew, - gMonIcon_Sandslash, - gMonIcon_NidoranF, - gMonIcon_Nidorina, - gMonIcon_Nidoqueen, - gMonIcon_NidoranM, - gMonIcon_Nidorino, - gMonIcon_Nidoking, - gMonIcon_Clefairy, - gMonIcon_Clefable, - gMonIcon_Vulpix, - gMonIcon_Ninetales, - gMonIcon_Jigglypuff, - gMonIcon_Wigglytuff, - gMonIcon_Zubat, - gMonIcon_Golbat, - gMonIcon_Oddish, - gMonIcon_Gloom, - gMonIcon_Vileplume, - gMonIcon_Paras, - gMonIcon_Parasect, - gMonIcon_Venonat, - gMonIcon_Venomoth, - gMonIcon_Diglett, - gMonIcon_Dugtrio, - gMonIcon_Meowth, - gMonIcon_Persian, - gMonIcon_Psyduck, - gMonIcon_Golduck, - gMonIcon_Mankey, - gMonIcon_Primeape, - gMonIcon_Growlithe, - gMonIcon_Arcanine, - gMonIcon_Poliwag, - gMonIcon_Poliwhirl, - gMonIcon_Poliwrath, - gMonIcon_Abra, - gMonIcon_Kadabra, - gMonIcon_Alakazam, - gMonIcon_Machop, - gMonIcon_Machoke, - gMonIcon_Machamp, - gMonIcon_Bellsprout, - gMonIcon_Weepinbell, - gMonIcon_Victreebel, - gMonIcon_Tentacool, - gMonIcon_Tentacruel, - gMonIcon_Geodude, - gMonIcon_Graveler, - gMonIcon_Golem, - gMonIcon_Ponyta, - gMonIcon_Rapidash, - gMonIcon_Slowpoke, - gMonIcon_Slowbro, - gMonIcon_Magnemite, - gMonIcon_Magneton, - gMonIcon_Farfetchd, - gMonIcon_Doduo, - gMonIcon_Dodrio, - gMonIcon_Seel, - gMonIcon_Dewgong, - gMonIcon_Grimer, - gMonIcon_Muk, - gMonIcon_Shellder, - gMonIcon_Cloyster, - gMonIcon_Gastly, - gMonIcon_Haunter, - gMonIcon_Gengar, - gMonIcon_Onix, - gMonIcon_Drowzee, - gMonIcon_Hypno, - gMonIcon_Krabby, - gMonIcon_Kingler, - gMonIcon_Voltorb, - gMonIcon_Electrode, - gMonIcon_Exeggcute, - gMonIcon_Exeggutor, - gMonIcon_Cubone, - gMonIcon_Marowak, - gMonIcon_Hitmonlee, - gMonIcon_Hitmonchan, - gMonIcon_Lickitung, - gMonIcon_Koffing, - gMonIcon_Weezing, - gMonIcon_Rhyhorn, - gMonIcon_Rhydon, - gMonIcon_Chansey, - gMonIcon_Tangela, - gMonIcon_Kangaskhan, - gMonIcon_Horsea, - gMonIcon_Seadra, - gMonIcon_Goldeen, - gMonIcon_Seaking, - gMonIcon_Staryu, - gMonIcon_Starmie, - gMonIcon_Mrmime, - gMonIcon_Scyther, - gMonIcon_Jynx, - gMonIcon_Electabuzz, - gMonIcon_Magmar, - gMonIcon_Pinsir, - gMonIcon_Tauros, - gMonIcon_Magikarp, - gMonIcon_Gyarados, - gMonIcon_Lapras, - gMonIcon_Ditto, - gMonIcon_Eevee, - gMonIcon_Vaporeon, - gMonIcon_Jolteon, - gMonIcon_Flareon, - gMonIcon_Porygon, - gMonIcon_Omanyte, - gMonIcon_Omastar, - gMonIcon_Kabuto, - gMonIcon_Kabutops, - gMonIcon_Aerodactyl, - gMonIcon_Snorlax, - gMonIcon_Articuno, - gMonIcon_Zapdos, - gMonIcon_Moltres, - gMonIcon_Dratini, - gMonIcon_Dragonair, - gMonIcon_Dragonite, - gMonIcon_Mewtwo, - gMonIcon_Mew, - gMonIcon_Chikorita, - gMonIcon_Bayleef, - gMonIcon_Meganium, - gMonIcon_Cyndaquil, - gMonIcon_Quilava, - gMonIcon_Typhlosion, - gMonIcon_Totodile, - gMonIcon_Croconaw, - gMonIcon_Feraligatr, - gMonIcon_Sentret, - gMonIcon_Furret, - gMonIcon_Hoothoot, - gMonIcon_Noctowl, - gMonIcon_Ledyba, - gMonIcon_Ledian, - gMonIcon_Spinarak, - gMonIcon_Ariados, - gMonIcon_Crobat, - gMonIcon_Chinchou, - gMonIcon_Lanturn, - gMonIcon_Pichu, - gMonIcon_Cleffa, - gMonIcon_Igglybuff, - gMonIcon_Togepi, - gMonIcon_Togetic, - gMonIcon_Natu, - gMonIcon_Xatu, - gMonIcon_Mareep, - gMonIcon_Flaaffy, - gMonIcon_Ampharos, - gMonIcon_Bellossom, - gMonIcon_Marill, - gMonIcon_Azumarill, - gMonIcon_Sudowoodo, - gMonIcon_Politoed, - gMonIcon_Hoppip, - gMonIcon_Skiploom, - gMonIcon_Jumpluff, - gMonIcon_Aipom, - gMonIcon_Sunkern, - gMonIcon_Sunflora, - gMonIcon_Yanma, - gMonIcon_Wooper, - gMonIcon_Quagsire, - gMonIcon_Espeon, - gMonIcon_Umbreon, - gMonIcon_Murkrow, - gMonIcon_Slowking, - gMonIcon_Misdreavus, - gMonIcon_UnownA, - gMonIcon_Wobbuffet, - gMonIcon_Girafarig, - gMonIcon_Pineco, - gMonIcon_Forretress, - gMonIcon_Dunsparce, - gMonIcon_Gligar, - gMonIcon_Steelix, - gMonIcon_Snubbull, - gMonIcon_Granbull, - gMonIcon_Qwilfish, - gMonIcon_Scizor, - gMonIcon_Shuckle, - gMonIcon_Heracross, - gMonIcon_Sneasel, - gMonIcon_Teddiursa, - gMonIcon_Ursaring, - gMonIcon_Slugma, - gMonIcon_Magcargo, - gMonIcon_Swinub, - gMonIcon_Piloswine, - gMonIcon_Corsola, - gMonIcon_Remoraid, - gMonIcon_Octillery, - gMonIcon_Delibird, - gMonIcon_Mantine, - gMonIcon_Skarmory, - gMonIcon_Houndour, - gMonIcon_Houndoom, - gMonIcon_Kingdra, - gMonIcon_Phanpy, - gMonIcon_Donphan, - gMonIcon_Porygon2, - gMonIcon_Stantler, - gMonIcon_Smeargle, - gMonIcon_Tyrogue, - gMonIcon_Hitmontop, - gMonIcon_Smoochum, - gMonIcon_Elekid, - gMonIcon_Magby, - gMonIcon_Miltank, - gMonIcon_Blissey, - gMonIcon_Raikou, - gMonIcon_Entei, - gMonIcon_Suicune, - gMonIcon_Larvitar, - gMonIcon_Pupitar, - gMonIcon_Tyranitar, - gMonIcon_Lugia, - gMonIcon_HoOh, - gMonIcon_Celebi, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_QuestionMark, - gMonIcon_Treecko, - gMonIcon_Grovyle, - gMonIcon_Sceptile, - gMonIcon_Torchic, - gMonIcon_Combusken, - gMonIcon_Blaziken, - gMonIcon_Mudkip, - gMonIcon_Marshtomp, - gMonIcon_Swampert, - gMonIcon_Poochyena, - gMonIcon_Mightyena, - gMonIcon_Zigzagoon, - gMonIcon_Linoone, - gMonIcon_Wurmple, - gMonIcon_Silcoon, - gMonIcon_Beautifly, - gMonIcon_Cascoon, - gMonIcon_Dustox, - gMonIcon_Lotad, - gMonIcon_Lombre, - gMonIcon_Ludicolo, - gMonIcon_Seedot, - gMonIcon_Nuzleaf, - gMonIcon_Shiftry, - gMonIcon_Nincada, - gMonIcon_Ninjask, - gMonIcon_Shedinja, - gMonIcon_Taillow, - gMonIcon_Swellow, - gMonIcon_Shroomish, - gMonIcon_Breloom, - gMonIcon_Spinda, - gMonIcon_Wingull, - gMonIcon_Pelipper, - gMonIcon_Surskit, - gMonIcon_Masquerain, - gMonIcon_Wailmer, - gMonIcon_Wailord, - gMonIcon_Skitty, - gMonIcon_Delcatty, - gMonIcon_Kecleon, - gMonIcon_Baltoy, - gMonIcon_Claydol, - gMonIcon_Nosepass, - gMonIcon_Torkoal, - gMonIcon_Sableye, - gMonIcon_Barboach, - gMonIcon_Whiscash, - gMonIcon_Luvdisc, - gMonIcon_Corphish, - gMonIcon_Crawdaunt, - gMonIcon_Feebas, - gMonIcon_Milotic, - gMonIcon_Carvanha, - gMonIcon_Sharpedo, - gMonIcon_Trapinch, - gMonIcon_Vibrava, - gMonIcon_Flygon, - gMonIcon_Makuhita, - gMonIcon_Hariyama, - gMonIcon_Electrike, - gMonIcon_Manectric, - gMonIcon_Numel, - gMonIcon_Camerupt, - gMonIcon_Spheal, - gMonIcon_Sealeo, - gMonIcon_Walrein, - gMonIcon_Cacnea, - gMonIcon_Cacturne, - gMonIcon_Snorunt, - gMonIcon_Glalie, - gMonIcon_Lunatone, - gMonIcon_Solrock, - gMonIcon_Azurill, - gMonIcon_Spoink, - gMonIcon_Grumpig, - gMonIcon_Plusle, - gMonIcon_Minun, - gMonIcon_Mawile, - gMonIcon_Meditite, - gMonIcon_Medicham, - gMonIcon_Swablu, - gMonIcon_Altaria, - gMonIcon_Wynaut, - gMonIcon_Duskull, - gMonIcon_Dusclops, - gMonIcon_Roselia, - gMonIcon_Slakoth, - gMonIcon_Vigoroth, - gMonIcon_Slaking, - gMonIcon_Gulpin, - gMonIcon_Swalot, - gMonIcon_Tropius, - gMonIcon_Whismur, - gMonIcon_Loudred, - gMonIcon_Exploud, - gMonIcon_Clamperl, - gMonIcon_Huntail, - gMonIcon_Gorebyss, - gMonIcon_Absol, - gMonIcon_Shuppet, - gMonIcon_Banette, - gMonIcon_Seviper, - gMonIcon_Zangoose, - gMonIcon_Relicanth, - gMonIcon_Aron, - gMonIcon_Lairon, - gMonIcon_Aggron, - gMonIcon_Castform, - gMonIcon_Volbeat, - gMonIcon_Illumise, - gMonIcon_Lileep, - gMonIcon_Cradily, - gMonIcon_Anorith, - gMonIcon_Armaldo, - gMonIcon_Ralts, - gMonIcon_Kirlia, - gMonIcon_Gardevoir, - gMonIcon_Bagon, - gMonIcon_Shelgon, - gMonIcon_Salamence, - gMonIcon_Beldum, - gMonIcon_Metang, - gMonIcon_Metagross, - gMonIcon_Regirock, - gMonIcon_Regice, - gMonIcon_Registeel, - gMonIcon_Kyogre, - gMonIcon_Groudon, - gMonIcon_Rayquaza, - gMonIcon_Latias, - gMonIcon_Latios, - gMonIcon_Jirachi, - gMonIcon_Deoxys, - gMonIcon_Chimecho, - gMonIcon_Egg, - gMonIcon_UnownB, - gMonIcon_UnownC, - gMonIcon_UnownD, - gMonIcon_UnownE, - gMonIcon_UnownF, - gMonIcon_UnownG, - gMonIcon_UnownH, - gMonIcon_UnownI, - gMonIcon_UnownJ, - gMonIcon_UnownK, - gMonIcon_UnownL, - gMonIcon_UnownM, - gMonIcon_UnownN, - gMonIcon_UnownO, - gMonIcon_UnownP, - gMonIcon_UnownQ, - gMonIcon_UnownR, - gMonIcon_UnownS, - gMonIcon_UnownT, - gMonIcon_UnownU, - gMonIcon_UnownV, - gMonIcon_UnownW, - gMonIcon_UnownX, - gMonIcon_UnownY, - gMonIcon_UnownZ, - gMonIcon_UnownExclamationMark, - gMonIcon_UnownQuestionMark, + [SPECIES_NONE] = gMonIcon_Bulbasaur, + [SPECIES_BULBASAUR] = gMonIcon_Bulbasaur, + [SPECIES_IVYSAUR] = gMonIcon_Ivysaur, + [SPECIES_VENUSAUR] = gMonIcon_Venusaur, + [SPECIES_CHARMANDER] = gMonIcon_Charmander, + [SPECIES_CHARMELEON] = gMonIcon_Charmeleon, + [SPECIES_CHARIZARD] = gMonIcon_Charizard, + [SPECIES_SQUIRTLE] = gMonIcon_Squirtle, + [SPECIES_WARTORTLE] = gMonIcon_Wartortle, + [SPECIES_BLASTOISE] = gMonIcon_Blastoise, + [SPECIES_CATERPIE] = gMonIcon_Caterpie, + [SPECIES_METAPOD] = gMonIcon_Metapod, + [SPECIES_BUTTERFREE] = gMonIcon_Butterfree, + [SPECIES_WEEDLE] = gMonIcon_Weedle, + [SPECIES_KAKUNA] = gMonIcon_Kakuna, + [SPECIES_BEEDRILL] = gMonIcon_Beedrill, + [SPECIES_PIDGEY] = gMonIcon_Pidgey, + [SPECIES_PIDGEOTTO] = gMonIcon_Pidgeotto, + [SPECIES_PIDGEOT] = gMonIcon_Pidgeot, + [SPECIES_RATTATA] = gMonIcon_Rattata, + [SPECIES_RATICATE] = gMonIcon_Raticate, + [SPECIES_SPEAROW] = gMonIcon_Spearow, + [SPECIES_FEAROW] = gMonIcon_Fearow, + [SPECIES_EKANS] = gMonIcon_Ekans, + [SPECIES_ARBOK] = gMonIcon_Arbok, + [SPECIES_PIKACHU] = gMonIcon_Pikachu, + [SPECIES_RAICHU] = gMonIcon_Raichu, + [SPECIES_SANDSHREW] = gMonIcon_Sandshrew, + [SPECIES_SANDSLASH] = gMonIcon_Sandslash, + [SPECIES_NIDORAN_F] = gMonIcon_NidoranF, + [SPECIES_NIDORINA] = gMonIcon_Nidorina, + [SPECIES_NIDOQUEEN] = gMonIcon_Nidoqueen, + [SPECIES_NIDORAN_M] = gMonIcon_NidoranM, + [SPECIES_NIDORINO] = gMonIcon_Nidorino, + [SPECIES_NIDOKING] = gMonIcon_Nidoking, + [SPECIES_CLEFAIRY] = gMonIcon_Clefairy, + [SPECIES_CLEFABLE] = gMonIcon_Clefable, + [SPECIES_VULPIX] = gMonIcon_Vulpix, + [SPECIES_NINETALES] = gMonIcon_Ninetales, + [SPECIES_JIGGLYPUFF] = gMonIcon_Jigglypuff, + [SPECIES_WIGGLYTUFF] = gMonIcon_Wigglytuff, + [SPECIES_ZUBAT] = gMonIcon_Zubat, + [SPECIES_GOLBAT] = gMonIcon_Golbat, + [SPECIES_ODDISH] = gMonIcon_Oddish, + [SPECIES_GLOOM] = gMonIcon_Gloom, + [SPECIES_VILEPLUME] = gMonIcon_Vileplume, + [SPECIES_PARAS] = gMonIcon_Paras, + [SPECIES_PARASECT] = gMonIcon_Parasect, + [SPECIES_VENONAT] = gMonIcon_Venonat, + [SPECIES_VENOMOTH] = gMonIcon_Venomoth, + [SPECIES_DIGLETT] = gMonIcon_Diglett, + [SPECIES_DUGTRIO] = gMonIcon_Dugtrio, + [SPECIES_MEOWTH] = gMonIcon_Meowth, + [SPECIES_PERSIAN] = gMonIcon_Persian, + [SPECIES_PSYDUCK] = gMonIcon_Psyduck, + [SPECIES_GOLDUCK] = gMonIcon_Golduck, + [SPECIES_MANKEY] = gMonIcon_Mankey, + [SPECIES_PRIMEAPE] = gMonIcon_Primeape, + [SPECIES_GROWLITHE] = gMonIcon_Growlithe, + [SPECIES_ARCANINE] = gMonIcon_Arcanine, + [SPECIES_POLIWAG] = gMonIcon_Poliwag, + [SPECIES_POLIWHIRL] = gMonIcon_Poliwhirl, + [SPECIES_POLIWRATH] = gMonIcon_Poliwrath, + [SPECIES_ABRA] = gMonIcon_Abra, + [SPECIES_KADABRA] = gMonIcon_Kadabra, + [SPECIES_ALAKAZAM] = gMonIcon_Alakazam, + [SPECIES_MACHOP] = gMonIcon_Machop, + [SPECIES_MACHOKE] = gMonIcon_Machoke, + [SPECIES_MACHAMP] = gMonIcon_Machamp, + [SPECIES_BELLSPROUT] = gMonIcon_Bellsprout, + [SPECIES_WEEPINBELL] = gMonIcon_Weepinbell, + [SPECIES_VICTREEBEL] = gMonIcon_Victreebel, + [SPECIES_TENTACOOL] = gMonIcon_Tentacool, + [SPECIES_TENTACRUEL] = gMonIcon_Tentacruel, + [SPECIES_GEODUDE] = gMonIcon_Geodude, + [SPECIES_GRAVELER] = gMonIcon_Graveler, + [SPECIES_GOLEM] = gMonIcon_Golem, + [SPECIES_PONYTA] = gMonIcon_Ponyta, + [SPECIES_RAPIDASH] = gMonIcon_Rapidash, + [SPECIES_SLOWPOKE] = gMonIcon_Slowpoke, + [SPECIES_SLOWBRO] = gMonIcon_Slowbro, + [SPECIES_MAGNEMITE] = gMonIcon_Magnemite, + [SPECIES_MAGNETON] = gMonIcon_Magneton, + [SPECIES_FARFETCHD] = gMonIcon_Farfetchd, + [SPECIES_DODUO] = gMonIcon_Doduo, + [SPECIES_DODRIO] = gMonIcon_Dodrio, + [SPECIES_SEEL] = gMonIcon_Seel, + [SPECIES_DEWGONG] = gMonIcon_Dewgong, + [SPECIES_GRIMER] = gMonIcon_Grimer, + [SPECIES_MUK] = gMonIcon_Muk, + [SPECIES_SHELLDER] = gMonIcon_Shellder, + [SPECIES_CLOYSTER] = gMonIcon_Cloyster, + [SPECIES_GASTLY] = gMonIcon_Gastly, + [SPECIES_HAUNTER] = gMonIcon_Haunter, + [SPECIES_GENGAR] = gMonIcon_Gengar, + [SPECIES_ONIX] = gMonIcon_Onix, + [SPECIES_DROWZEE] = gMonIcon_Drowzee, + [SPECIES_HYPNO] = gMonIcon_Hypno, + [SPECIES_KRABBY] = gMonIcon_Krabby, + [SPECIES_KINGLER] = gMonIcon_Kingler, + [SPECIES_VOLTORB] = gMonIcon_Voltorb, + [SPECIES_ELECTRODE] = gMonIcon_Electrode, + [SPECIES_EXEGGCUTE] = gMonIcon_Exeggcute, + [SPECIES_EXEGGUTOR] = gMonIcon_Exeggutor, + [SPECIES_CUBONE] = gMonIcon_Cubone, + [SPECIES_MAROWAK] = gMonIcon_Marowak, + [SPECIES_HITMONLEE] = gMonIcon_Hitmonlee, + [SPECIES_HITMONCHAN] = gMonIcon_Hitmonchan, + [SPECIES_LICKITUNG] = gMonIcon_Lickitung, + [SPECIES_KOFFING] = gMonIcon_Koffing, + [SPECIES_WEEZING] = gMonIcon_Weezing, + [SPECIES_RHYHORN] = gMonIcon_Rhyhorn, + [SPECIES_RHYDON] = gMonIcon_Rhydon, + [SPECIES_CHANSEY] = gMonIcon_Chansey, + [SPECIES_TANGELA] = gMonIcon_Tangela, + [SPECIES_KANGASKHAN] = gMonIcon_Kangaskhan, + [SPECIES_HORSEA] = gMonIcon_Horsea, + [SPECIES_SEADRA] = gMonIcon_Seadra, + [SPECIES_GOLDEEN] = gMonIcon_Goldeen, + [SPECIES_SEAKING] = gMonIcon_Seaking, + [SPECIES_STARYU] = gMonIcon_Staryu, + [SPECIES_STARMIE] = gMonIcon_Starmie, + [SPECIES_MR_MIME] = gMonIcon_Mrmime, + [SPECIES_SCYTHER] = gMonIcon_Scyther, + [SPECIES_JYNX] = gMonIcon_Jynx, + [SPECIES_ELECTABUZZ] = gMonIcon_Electabuzz, + [SPECIES_MAGMAR] = gMonIcon_Magmar, + [SPECIES_PINSIR] = gMonIcon_Pinsir, + [SPECIES_TAUROS] = gMonIcon_Tauros, + [SPECIES_MAGIKARP] = gMonIcon_Magikarp, + [SPECIES_GYARADOS] = gMonIcon_Gyarados, + [SPECIES_LAPRAS] = gMonIcon_Lapras, + [SPECIES_DITTO] = gMonIcon_Ditto, + [SPECIES_EEVEE] = gMonIcon_Eevee, + [SPECIES_VAPOREON] = gMonIcon_Vaporeon, + [SPECIES_JOLTEON] = gMonIcon_Jolteon, + [SPECIES_FLAREON] = gMonIcon_Flareon, + [SPECIES_PORYGON] = gMonIcon_Porygon, + [SPECIES_OMANYTE] = gMonIcon_Omanyte, + [SPECIES_OMASTAR] = gMonIcon_Omastar, + [SPECIES_KABUTO] = gMonIcon_Kabuto, + [SPECIES_KABUTOPS] = gMonIcon_Kabutops, + [SPECIES_AERODACTYL] = gMonIcon_Aerodactyl, + [SPECIES_SNORLAX] = gMonIcon_Snorlax, + [SPECIES_ARTICUNO] = gMonIcon_Articuno, + [SPECIES_ZAPDOS] = gMonIcon_Zapdos, + [SPECIES_MOLTRES] = gMonIcon_Moltres, + [SPECIES_DRATINI] = gMonIcon_Dratini, + [SPECIES_DRAGONAIR] = gMonIcon_Dragonair, + [SPECIES_DRAGONITE] = gMonIcon_Dragonite, + [SPECIES_MEWTWO] = gMonIcon_Mewtwo, + [SPECIES_MEW] = gMonIcon_Mew, + [SPECIES_CHIKORITA] = gMonIcon_Chikorita, + [SPECIES_BAYLEEF] = gMonIcon_Bayleef, + [SPECIES_MEGANIUM] = gMonIcon_Meganium, + [SPECIES_CYNDAQUIL] = gMonIcon_Cyndaquil, + [SPECIES_QUILAVA] = gMonIcon_Quilava, + [SPECIES_TYPHLOSION] = gMonIcon_Typhlosion, + [SPECIES_TOTODILE] = gMonIcon_Totodile, + [SPECIES_CROCONAW] = gMonIcon_Croconaw, + [SPECIES_FERALIGATR] = gMonIcon_Feraligatr, + [SPECIES_SENTRET] = gMonIcon_Sentret, + [SPECIES_FURRET] = gMonIcon_Furret, + [SPECIES_HOOTHOOT] = gMonIcon_Hoothoot, + [SPECIES_NOCTOWL] = gMonIcon_Noctowl, + [SPECIES_LEDYBA] = gMonIcon_Ledyba, + [SPECIES_LEDIAN] = gMonIcon_Ledian, + [SPECIES_SPINARAK] = gMonIcon_Spinarak, + [SPECIES_ARIADOS] = gMonIcon_Ariados, + [SPECIES_CROBAT] = gMonIcon_Crobat, + [SPECIES_CHINCHOU] = gMonIcon_Chinchou, + [SPECIES_LANTURN] = gMonIcon_Lanturn, + [SPECIES_PICHU] = gMonIcon_Pichu, + [SPECIES_CLEFFA] = gMonIcon_Cleffa, + [SPECIES_IGGLYBUFF] = gMonIcon_Igglybuff, + [SPECIES_TOGEPI] = gMonIcon_Togepi, + [SPECIES_TOGETIC] = gMonIcon_Togetic, + [SPECIES_NATU] = gMonIcon_Natu, + [SPECIES_XATU] = gMonIcon_Xatu, + [SPECIES_MAREEP] = gMonIcon_Mareep, + [SPECIES_FLAAFFY] = gMonIcon_Flaaffy, + [SPECIES_AMPHAROS] = gMonIcon_Ampharos, + [SPECIES_BELLOSSOM] = gMonIcon_Bellossom, + [SPECIES_MARILL] = gMonIcon_Marill, + [SPECIES_AZUMARILL] = gMonIcon_Azumarill, + [SPECIES_SUDOWOODO] = gMonIcon_Sudowoodo, + [SPECIES_POLITOED] = gMonIcon_Politoed, + [SPECIES_HOPPIP] = gMonIcon_Hoppip, + [SPECIES_SKIPLOOM] = gMonIcon_Skiploom, + [SPECIES_JUMPLUFF] = gMonIcon_Jumpluff, + [SPECIES_AIPOM] = gMonIcon_Aipom, + [SPECIES_SUNKERN] = gMonIcon_Sunkern, + [SPECIES_SUNFLORA] = gMonIcon_Sunflora, + [SPECIES_YANMA] = gMonIcon_Yanma, + [SPECIES_WOOPER] = gMonIcon_Wooper, + [SPECIES_QUAGSIRE] = gMonIcon_Quagsire, + [SPECIES_ESPEON] = gMonIcon_Espeon, + [SPECIES_UMBREON] = gMonIcon_Umbreon, + [SPECIES_MURKROW] = gMonIcon_Murkrow, + [SPECIES_SLOWKING] = gMonIcon_Slowking, + [SPECIES_MISDREAVUS] = gMonIcon_Misdreavus, + [SPECIES_UNOWN] = gMonIcon_UnownA, + [SPECIES_WOBBUFFET] = gMonIcon_Wobbuffet, + [SPECIES_GIRAFARIG] = gMonIcon_Girafarig, + [SPECIES_PINECO] = gMonIcon_Pineco, + [SPECIES_FORRETRESS] = gMonIcon_Forretress, + [SPECIES_DUNSPARCE] = gMonIcon_Dunsparce, + [SPECIES_GLIGAR] = gMonIcon_Gligar, + [SPECIES_STEELIX] = gMonIcon_Steelix, + [SPECIES_SNUBBULL] = gMonIcon_Snubbull, + [SPECIES_GRANBULL] = gMonIcon_Granbull, + [SPECIES_QWILFISH] = gMonIcon_Qwilfish, + [SPECIES_SCIZOR] = gMonIcon_Scizor, + [SPECIES_SHUCKLE] = gMonIcon_Shuckle, + [SPECIES_HERACROSS] = gMonIcon_Heracross, + [SPECIES_SNEASEL] = gMonIcon_Sneasel, + [SPECIES_TEDDIURSA] = gMonIcon_Teddiursa, + [SPECIES_URSARING] = gMonIcon_Ursaring, + [SPECIES_SLUGMA] = gMonIcon_Slugma, + [SPECIES_MAGCARGO] = gMonIcon_Magcargo, + [SPECIES_SWINUB] = gMonIcon_Swinub, + [SPECIES_PILOSWINE] = gMonIcon_Piloswine, + [SPECIES_CORSOLA] = gMonIcon_Corsola, + [SPECIES_REMORAID] = gMonIcon_Remoraid, + [SPECIES_OCTILLERY] = gMonIcon_Octillery, + [SPECIES_DELIBIRD] = gMonIcon_Delibird, + [SPECIES_MANTINE] = gMonIcon_Mantine, + [SPECIES_SKARMORY] = gMonIcon_Skarmory, + [SPECIES_HOUNDOUR] = gMonIcon_Houndour, + [SPECIES_HOUNDOOM] = gMonIcon_Houndoom, + [SPECIES_KINGDRA] = gMonIcon_Kingdra, + [SPECIES_PHANPY] = gMonIcon_Phanpy, + [SPECIES_DONPHAN] = gMonIcon_Donphan, + [SPECIES_PORYGON2] = gMonIcon_Porygon2, + [SPECIES_STANTLER] = gMonIcon_Stantler, + [SPECIES_SMEARGLE] = gMonIcon_Smeargle, + [SPECIES_TYROGUE] = gMonIcon_Tyrogue, + [SPECIES_HITMONTOP] = gMonIcon_Hitmontop, + [SPECIES_SMOOCHUM] = gMonIcon_Smoochum, + [SPECIES_ELEKID] = gMonIcon_Elekid, + [SPECIES_MAGBY] = gMonIcon_Magby, + [SPECIES_MILTANK] = gMonIcon_Miltank, + [SPECIES_BLISSEY] = gMonIcon_Blissey, + [SPECIES_RAIKOU] = gMonIcon_Raikou, + [SPECIES_ENTEI] = gMonIcon_Entei, + [SPECIES_SUICUNE] = gMonIcon_Suicune, + [SPECIES_LARVITAR] = gMonIcon_Larvitar, + [SPECIES_PUPITAR] = gMonIcon_Pupitar, + [SPECIES_TYRANITAR] = gMonIcon_Tyranitar, + [SPECIES_LUGIA] = gMonIcon_Lugia, + [SPECIES_HO_OH] = gMonIcon_HoOh, + [SPECIES_CELEBI] = gMonIcon_Celebi, + [SPECIES_OLD_UNOWN_B] = gMonIcon_QuestionMark, + [SPECIES_OLD_UNOWN_C] = gMonIcon_QuestionMark, + [SPECIES_OLD_UNOWN_D] = gMonIcon_QuestionMark, + [SPECIES_OLD_UNOWN_E] = gMonIcon_QuestionMark, + [SPECIES_OLD_UNOWN_F] = gMonIcon_QuestionMark, + [SPECIES_OLD_UNOWN_G] = gMonIcon_QuestionMark, + [SPECIES_OLD_UNOWN_H] = gMonIcon_QuestionMark, + [SPECIES_OLD_UNOWN_I] = gMonIcon_QuestionMark, + [SPECIES_OLD_UNOWN_J] = gMonIcon_QuestionMark, + [SPECIES_OLD_UNOWN_K] = gMonIcon_QuestionMark, + [SPECIES_OLD_UNOWN_L] = gMonIcon_QuestionMark, + [SPECIES_OLD_UNOWN_M] = gMonIcon_QuestionMark, + [SPECIES_OLD_UNOWN_N] = gMonIcon_QuestionMark, + [SPECIES_OLD_UNOWN_O] = gMonIcon_QuestionMark, + [SPECIES_OLD_UNOWN_P] = gMonIcon_QuestionMark, + [SPECIES_OLD_UNOWN_Q] = gMonIcon_QuestionMark, + [SPECIES_OLD_UNOWN_R] = gMonIcon_QuestionMark, + [SPECIES_OLD_UNOWN_S] = gMonIcon_QuestionMark, + [SPECIES_OLD_UNOWN_T] = gMonIcon_QuestionMark, + [SPECIES_OLD_UNOWN_U] = gMonIcon_QuestionMark, + [SPECIES_OLD_UNOWN_V] = gMonIcon_QuestionMark, + [SPECIES_OLD_UNOWN_W] = gMonIcon_QuestionMark, + [SPECIES_OLD_UNOWN_X] = gMonIcon_QuestionMark, + [SPECIES_OLD_UNOWN_Y] = gMonIcon_QuestionMark, + [SPECIES_OLD_UNOWN_Z] = gMonIcon_QuestionMark, + [SPECIES_TREECKO] = gMonIcon_Treecko, + [SPECIES_GROVYLE] = gMonIcon_Grovyle, + [SPECIES_SCEPTILE] = gMonIcon_Sceptile, + [SPECIES_TORCHIC] = gMonIcon_Torchic, + [SPECIES_COMBUSKEN] = gMonIcon_Combusken, + [SPECIES_BLAZIKEN] = gMonIcon_Blaziken, + [SPECIES_MUDKIP] = gMonIcon_Mudkip, + [SPECIES_MARSHTOMP] = gMonIcon_Marshtomp, + [SPECIES_SWAMPERT] = gMonIcon_Swampert, + [SPECIES_POOCHYENA] = gMonIcon_Poochyena, + [SPECIES_MIGHTYENA] = gMonIcon_Mightyena, + [SPECIES_ZIGZAGOON] = gMonIcon_Zigzagoon, + [SPECIES_LINOONE] = gMonIcon_Linoone, + [SPECIES_WURMPLE] = gMonIcon_Wurmple, + [SPECIES_SILCOON] = gMonIcon_Silcoon, + [SPECIES_BEAUTIFLY] = gMonIcon_Beautifly, + [SPECIES_CASCOON] = gMonIcon_Cascoon, + [SPECIES_DUSTOX] = gMonIcon_Dustox, + [SPECIES_LOTAD] = gMonIcon_Lotad, + [SPECIES_LOMBRE] = gMonIcon_Lombre, + [SPECIES_LUDICOLO] = gMonIcon_Ludicolo, + [SPECIES_SEEDOT] = gMonIcon_Seedot, + [SPECIES_NUZLEAF] = gMonIcon_Nuzleaf, + [SPECIES_SHIFTRY] = gMonIcon_Shiftry, + [SPECIES_NINCADA] = gMonIcon_Nincada, + [SPECIES_NINJASK] = gMonIcon_Ninjask, + [SPECIES_SHEDINJA] = gMonIcon_Shedinja, + [SPECIES_TAILLOW] = gMonIcon_Taillow, + [SPECIES_SWELLOW] = gMonIcon_Swellow, + [SPECIES_SHROOMISH] = gMonIcon_Shroomish, + [SPECIES_BRELOOM] = gMonIcon_Breloom, + [SPECIES_SPINDA] = gMonIcon_Spinda, + [SPECIES_WINGULL] = gMonIcon_Wingull, + [SPECIES_PELIPPER] = gMonIcon_Pelipper, + [SPECIES_SURSKIT] = gMonIcon_Surskit, + [SPECIES_MASQUERAIN] = gMonIcon_Masquerain, + [SPECIES_WAILMER] = gMonIcon_Wailmer, + [SPECIES_WAILORD] = gMonIcon_Wailord, + [SPECIES_SKITTY] = gMonIcon_Skitty, + [SPECIES_DELCATTY] = gMonIcon_Delcatty, + [SPECIES_KECLEON] = gMonIcon_Kecleon, + [SPECIES_BALTOY] = gMonIcon_Baltoy, + [SPECIES_CLAYDOL] = gMonIcon_Claydol, + [SPECIES_NOSEPASS] = gMonIcon_Nosepass, + [SPECIES_TORKOAL] = gMonIcon_Torkoal, + [SPECIES_SABLEYE] = gMonIcon_Sableye, + [SPECIES_BARBOACH] = gMonIcon_Barboach, + [SPECIES_WHISCASH] = gMonIcon_Whiscash, + [SPECIES_LUVDISC] = gMonIcon_Luvdisc, + [SPECIES_CORPHISH] = gMonIcon_Corphish, + [SPECIES_CRAWDAUNT] = gMonIcon_Crawdaunt, + [SPECIES_FEEBAS] = gMonIcon_Feebas, + [SPECIES_MILOTIC] = gMonIcon_Milotic, + [SPECIES_CARVANHA] = gMonIcon_Carvanha, + [SPECIES_SHARPEDO] = gMonIcon_Sharpedo, + [SPECIES_TRAPINCH] = gMonIcon_Trapinch, + [SPECIES_VIBRAVA] = gMonIcon_Vibrava, + [SPECIES_FLYGON] = gMonIcon_Flygon, + [SPECIES_MAKUHITA] = gMonIcon_Makuhita, + [SPECIES_HARIYAMA] = gMonIcon_Hariyama, + [SPECIES_ELECTRIKE] = gMonIcon_Electrike, + [SPECIES_MANECTRIC] = gMonIcon_Manectric, + [SPECIES_NUMEL] = gMonIcon_Numel, + [SPECIES_CAMERUPT] = gMonIcon_Camerupt, + [SPECIES_SPHEAL] = gMonIcon_Spheal, + [SPECIES_SEALEO] = gMonIcon_Sealeo, + [SPECIES_WALREIN] = gMonIcon_Walrein, + [SPECIES_CACNEA] = gMonIcon_Cacnea, + [SPECIES_CACTURNE] = gMonIcon_Cacturne, + [SPECIES_SNORUNT] = gMonIcon_Snorunt, + [SPECIES_GLALIE] = gMonIcon_Glalie, + [SPECIES_LUNATONE] = gMonIcon_Lunatone, + [SPECIES_SOLROCK] = gMonIcon_Solrock, + [SPECIES_AZURILL] = gMonIcon_Azurill, + [SPECIES_SPOINK] = gMonIcon_Spoink, + [SPECIES_GRUMPIG] = gMonIcon_Grumpig, + [SPECIES_PLUSLE] = gMonIcon_Plusle, + [SPECIES_MINUN] = gMonIcon_Minun, + [SPECIES_MAWILE] = gMonIcon_Mawile, + [SPECIES_MEDITITE] = gMonIcon_Meditite, + [SPECIES_MEDICHAM] = gMonIcon_Medicham, + [SPECIES_SWABLU] = gMonIcon_Swablu, + [SPECIES_ALTARIA] = gMonIcon_Altaria, + [SPECIES_WYNAUT] = gMonIcon_Wynaut, + [SPECIES_DUSKULL] = gMonIcon_Duskull, + [SPECIES_DUSCLOPS] = gMonIcon_Dusclops, + [SPECIES_ROSELIA] = gMonIcon_Roselia, + [SPECIES_SLAKOTH] = gMonIcon_Slakoth, + [SPECIES_VIGOROTH] = gMonIcon_Vigoroth, + [SPECIES_SLAKING] = gMonIcon_Slaking, + [SPECIES_GULPIN] = gMonIcon_Gulpin, + [SPECIES_SWALOT] = gMonIcon_Swalot, + [SPECIES_TROPIUS] = gMonIcon_Tropius, + [SPECIES_WHISMUR] = gMonIcon_Whismur, + [SPECIES_LOUDRED] = gMonIcon_Loudred, + [SPECIES_EXPLOUD] = gMonIcon_Exploud, + [SPECIES_CLAMPERL] = gMonIcon_Clamperl, + [SPECIES_HUNTAIL] = gMonIcon_Huntail, + [SPECIES_GOREBYSS] = gMonIcon_Gorebyss, + [SPECIES_ABSOL] = gMonIcon_Absol, + [SPECIES_SHUPPET] = gMonIcon_Shuppet, + [SPECIES_BANETTE] = gMonIcon_Banette, + [SPECIES_SEVIPER] = gMonIcon_Seviper, + [SPECIES_ZANGOOSE] = gMonIcon_Zangoose, + [SPECIES_RELICANTH] = gMonIcon_Relicanth, + [SPECIES_ARON] = gMonIcon_Aron, + [SPECIES_LAIRON] = gMonIcon_Lairon, + [SPECIES_AGGRON] = gMonIcon_Aggron, + [SPECIES_CASTFORM] = gMonIcon_Castform, + [SPECIES_VOLBEAT] = gMonIcon_Volbeat, + [SPECIES_ILLUMISE] = gMonIcon_Illumise, + [SPECIES_LILEEP] = gMonIcon_Lileep, + [SPECIES_CRADILY] = gMonIcon_Cradily, + [SPECIES_ANORITH] = gMonIcon_Anorith, + [SPECIES_ARMALDO] = gMonIcon_Armaldo, + [SPECIES_RALTS] = gMonIcon_Ralts, + [SPECIES_KIRLIA] = gMonIcon_Kirlia, + [SPECIES_GARDEVOIR] = gMonIcon_Gardevoir, + [SPECIES_BAGON] = gMonIcon_Bagon, + [SPECIES_SHELGON] = gMonIcon_Shelgon, + [SPECIES_SALAMENCE] = gMonIcon_Salamence, + [SPECIES_BELDUM] = gMonIcon_Beldum, + [SPECIES_METANG] = gMonIcon_Metang, + [SPECIES_METAGROSS] = gMonIcon_Metagross, + [SPECIES_REGIROCK] = gMonIcon_Regirock, + [SPECIES_REGICE] = gMonIcon_Regice, + [SPECIES_REGISTEEL] = gMonIcon_Registeel, + [SPECIES_KYOGRE] = gMonIcon_Kyogre, + [SPECIES_GROUDON] = gMonIcon_Groudon, + [SPECIES_RAYQUAZA] = gMonIcon_Rayquaza, + [SPECIES_LATIAS] = gMonIcon_Latias, + [SPECIES_LATIOS] = gMonIcon_Latios, + [SPECIES_JIRACHI] = gMonIcon_Jirachi, + [SPECIES_DEOXYS] = gMonIcon_Deoxys, + [SPECIES_CHIMECHO] = gMonIcon_Chimecho, + [SPECIES_EGG] = gMonIcon_Egg, + [SPECIES_UNOWN_B] = gMonIcon_UnownB, + [SPECIES_UNOWN_C] = gMonIcon_UnownC, + [SPECIES_UNOWN_D] = gMonIcon_UnownD, + [SPECIES_UNOWN_E] = gMonIcon_UnownE, + [SPECIES_UNOWN_F] = gMonIcon_UnownF, + [SPECIES_UNOWN_G] = gMonIcon_UnownG, + [SPECIES_UNOWN_H] = gMonIcon_UnownH, + [SPECIES_UNOWN_I] = gMonIcon_UnownI, + [SPECIES_UNOWN_J] = gMonIcon_UnownJ, + [SPECIES_UNOWN_K] = gMonIcon_UnownK, + [SPECIES_UNOWN_L] = gMonIcon_UnownL, + [SPECIES_UNOWN_M] = gMonIcon_UnownM, + [SPECIES_UNOWN_N] = gMonIcon_UnownN, + [SPECIES_UNOWN_O] = gMonIcon_UnownO, + [SPECIES_UNOWN_P] = gMonIcon_UnownP, + [SPECIES_UNOWN_Q] = gMonIcon_UnownQ, + [SPECIES_UNOWN_R] = gMonIcon_UnownR, + [SPECIES_UNOWN_S] = gMonIcon_UnownS, + [SPECIES_UNOWN_T] = gMonIcon_UnownT, + [SPECIES_UNOWN_U] = gMonIcon_UnownU, + [SPECIES_UNOWN_V] = gMonIcon_UnownV, + [SPECIES_UNOWN_W] = gMonIcon_UnownW, + [SPECIES_UNOWN_X] = gMonIcon_UnownX, + [SPECIES_UNOWN_Y] = gMonIcon_UnownY, + [SPECIES_UNOWN_Z] = gMonIcon_UnownZ, + [SPECIES_UNOWN_EMARK] = gMonIcon_UnownExclamationMark, + [SPECIES_UNOWN_QMARK] = gMonIcon_UnownQuestionMark, }; const u8 gMonIconPaletteIndices[] = @@ -1138,7 +1138,7 @@ void sub_80D2EF8(struct Sprite *sprite) void LoadMonIconPalettes(void) { u8 i; - for (i = 0; i < 6; i++) + for (i = 0; i < ARRAY_COUNT(gMonIconPaletteTable); i++) LoadSpritePalette(&gMonIconPaletteTable[i]); } @@ -1192,7 +1192,7 @@ void sub_80D3014(struct Sprite *sprite) const u8* GetMonIconTiles(u16 species, bool32 extra) { const u8* iconSprite = gMonIconTable[species]; - if(species == SPECIES_DEOXYS && extra == TRUE) + if (species == SPECIES_DEOXYS && extra == TRUE) { iconSprite = (const u8*)(0x400 + (u32)iconSprite); //WTF? } @@ -1308,5 +1308,3 @@ void sub_80D32C8(struct Sprite *sprite, u8 animNum) sprite->animDelayCounter = 0; sprite->animCmdIndex = 0; } - - -- cgit v1.2.3 From 2745cdc7d26e84d7efc5349519a494610390e130 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 2 Apr 2019 18:02:43 +0200 Subject: Remove unneeded sMonAnimationDelayTable entries --- src/pokemon.c | 360 +--------------------------------------------------------- 1 file changed, 2 insertions(+), 358 deletions(-) (limited to 'src') diff --git a/src/pokemon.c b/src/pokemon.c index 7c26b4c22..984c484a2 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -1810,419 +1810,63 @@ static const u8 sMonFrontAnimIdsTable[] = [SPECIES_CHIMECHO - 1] = 0x1d, }; -static const u8 sMonAnimationDelayTable[] = -{ - [SPECIES_BULBASAUR - 1] = 0x00, - [SPECIES_IVYSAUR - 1] = 0x00, - [SPECIES_VENUSAUR - 1] = 0x00, - [SPECIES_CHARMANDER - 1] = 0x00, - [SPECIES_CHARMELEON - 1] = 0x00, - [SPECIES_CHARIZARD - 1] = 0x00, - [SPECIES_SQUIRTLE - 1] = 0x00, - [SPECIES_WARTORTLE - 1] = 0x00, +static const u8 sMonAnimationDelayTable[NUM_SPECIES - 1] = +{ [SPECIES_BLASTOISE - 1] = 0x32, - [SPECIES_CATERPIE - 1] = 0x00, - [SPECIES_METAPOD - 1] = 0x00, - [SPECIES_BUTTERFREE - 1] = 0x00, [SPECIES_WEEDLE - 1] = 0x0a, [SPECIES_KAKUNA - 1] = 0x14, [SPECIES_BEEDRILL - 1] = 0x23, - [SPECIES_PIDGEY - 1] = 0x00, [SPECIES_PIDGEOTTO - 1] = 0x19, - [SPECIES_PIDGEOT - 1] = 0x00, - [SPECIES_RATTATA - 1] = 0x00, - [SPECIES_RATICATE - 1] = 0x00, - [SPECIES_SPEAROW - 1] = 0x00, [SPECIES_FEAROW - 1] = 0x02, [SPECIES_EKANS - 1] = 0x1e, - [SPECIES_ARBOK - 1] = 0x00, - [SPECIES_PIKACHU - 1] = 0x00, - [SPECIES_RAICHU - 1] = 0x00, - [SPECIES_SANDSHREW - 1] = 0x00, - [SPECIES_SANDSLASH - 1] = 0x00, [SPECIES_NIDORAN_F - 1] = 0x1c, - [SPECIES_NIDORINA - 1] = 0x00, - [SPECIES_NIDOQUEEN - 1] = 0x00, - [SPECIES_NIDORAN_M - 1] = 0x00, - [SPECIES_NIDORINO - 1] = 0x00, [SPECIES_NIDOKING - 1] = 0x19, - [SPECIES_CLEFAIRY - 1] = 0x00, - [SPECIES_CLEFABLE - 1] = 0x00, - [SPECIES_VULPIX - 1] = 0x00, - [SPECIES_NINETALES - 1] = 0x00, - [SPECIES_JIGGLYPUFF - 1] = 0x00, - [SPECIES_WIGGLYTUFF - 1] = 0x00, - [SPECIES_ZUBAT - 1] = 0x00, - [SPECIES_GOLBAT - 1] = 0x00, - [SPECIES_ODDISH - 1] = 0x00, - [SPECIES_GLOOM - 1] = 0x00, - [SPECIES_VILEPLUME - 1] = 0x00, [SPECIES_PARAS - 1] = 0x0a, [SPECIES_PARASECT - 1] = 0x2d, [SPECIES_VENONAT - 1] = 0x14, - [SPECIES_VENOMOTH - 1] = 0x00, [SPECIES_DIGLETT - 1] = 0x19, [SPECIES_DUGTRIO - 1] = 0x23, [SPECIES_MEOWTH - 1] = 0x28, [SPECIES_PERSIAN - 1] = 0x14, - [SPECIES_PSYDUCK - 1] = 0x00, - [SPECIES_GOLDUCK - 1] = 0x00, [SPECIES_MANKEY - 1] = 0x14, - [SPECIES_PRIMEAPE - 1] = 0x00, [SPECIES_GROWLITHE - 1] = 0x1e, [SPECIES_ARCANINE - 1] = 0x28, - [SPECIES_POLIWAG - 1] = 0x00, [SPECIES_POLIWHIRL - 1] = 0x05, - [SPECIES_POLIWRATH - 1] = 0x00, - [SPECIES_ABRA - 1] = 0x00, - [SPECIES_KADABRA - 1] = 0x00, - [SPECIES_ALAKAZAM - 1] = 0x00, - [SPECIES_MACHOP - 1] = 0x00, - [SPECIES_MACHOKE - 1] = 0x00, - [SPECIES_MACHAMP - 1] = 0x00, - [SPECIES_BELLSPROUT - 1] = 0x00, [SPECIES_WEEPINBELL - 1] = 0x03, - [SPECIES_VICTREEBEL - 1] = 0x00, - [SPECIES_TENTACOOL - 1] = 0x00, - [SPECIES_TENTACRUEL - 1] = 0x00, - [SPECIES_GEODUDE - 1] = 0x00, - [SPECIES_GRAVELER - 1] = 0x00, - [SPECIES_GOLEM - 1] = 0x00, - [SPECIES_PONYTA - 1] = 0x00, - [SPECIES_RAPIDASH - 1] = 0x00, - [SPECIES_SLOWPOKE - 1] = 0x00, - [SPECIES_SLOWBRO - 1] = 0x00, - [SPECIES_MAGNEMITE - 1] = 0x00, - [SPECIES_MAGNETON - 1] = 0x00, - [SPECIES_FARFETCHD - 1] = 0x00, - [SPECIES_DODUO - 1] = 0x00, - [SPECIES_DODRIO - 1] = 0x00, - [SPECIES_SEEL - 1] = 0x00, - [SPECIES_DEWGONG - 1] = 0x00, - [SPECIES_GRIMER - 1] = 0x00, [SPECIES_MUK - 1] = 0x2d, [SPECIES_SHELLDER - 1] = 0x14, - [SPECIES_CLOYSTER - 1] = 0x00, - [SPECIES_GASTLY - 1] = 0x00, [SPECIES_HAUNTER - 1] = 0x17, - [SPECIES_GENGAR - 1] = 0x00, - [SPECIES_ONIX - 1] = 0x00, [SPECIES_DROWZEE - 1] = 0x30, [SPECIES_HYPNO - 1] = 0x28, - [SPECIES_KRABBY - 1] = 0x00, - [SPECIES_KINGLER - 1] = 0x00, - [SPECIES_VOLTORB - 1] = 0x00, - [SPECIES_ELECTRODE - 1] = 0x00, - [SPECIES_EXEGGCUTE - 1] = 0x00, - [SPECIES_EXEGGUTOR - 1] = 0x00, - [SPECIES_CUBONE - 1] = 0x00, - [SPECIES_MAROWAK - 1] = 0x00, - [SPECIES_HITMONLEE - 1] = 0x00, [SPECIES_HITMONCHAN - 1] = 0x19, - [SPECIES_LICKITUNG - 1] = 0x00, - [SPECIES_KOFFING - 1] = 0x00, - [SPECIES_WEEZING - 1] = 0x00, - [SPECIES_RHYHORN - 1] = 0x00, - [SPECIES_RHYDON - 1] = 0x00, - [SPECIES_CHANSEY - 1] = 0x00, - [SPECIES_TANGELA - 1] = 0x00, - [SPECIES_KANGASKHAN - 1] = 0x00, - [SPECIES_HORSEA - 1] = 0x00, - [SPECIES_SEADRA - 1] = 0x00, - [SPECIES_GOLDEEN - 1] = 0x00, - [SPECIES_SEAKING - 1] = 0x00, - [SPECIES_STARYU - 1] = 0x00, - [SPECIES_STARMIE - 1] = 0x00, - [SPECIES_MR_MIME - 1] = 0x00, [SPECIES_SCYTHER - 1] = 0x0a, - [SPECIES_JYNX - 1] = 0x00, - [SPECIES_ELECTABUZZ - 1] = 0x00, - [SPECIES_MAGMAR - 1] = 0x00, - [SPECIES_PINSIR - 1] = 0x00, [SPECIES_TAUROS - 1] = 0x0a, - [SPECIES_MAGIKARP - 1] = 0x00, - [SPECIES_GYARADOS - 1] = 0x00, - [SPECIES_LAPRAS - 1] = 0x00, - [SPECIES_DITTO - 1] = 0x00, - [SPECIES_EEVEE - 1] = 0x00, - [SPECIES_VAPOREON - 1] = 0x00, - [SPECIES_JOLTEON - 1] = 0x00, - [SPECIES_FLAREON - 1] = 0x00, - [SPECIES_PORYGON - 1] = 0x00, - [SPECIES_OMANYTE - 1] = 0x00, - [SPECIES_OMASTAR - 1] = 0x00, - [SPECIES_KABUTO - 1] = 0x00, - [SPECIES_KABUTOPS - 1] = 0x00, - [SPECIES_AERODACTYL - 1] = 0x00, - [SPECIES_SNORLAX - 1] = 0x00, - [SPECIES_ARTICUNO - 1] = 0x00, - [SPECIES_ZAPDOS - 1] = 0x00, - [SPECIES_MOLTRES - 1] = 0x00, - [SPECIES_DRATINI - 1] = 0x00, - [SPECIES_DRAGONAIR - 1] = 0x00, - [SPECIES_DRAGONITE - 1] = 0x00, - [SPECIES_MEWTWO - 1] = 0x00, - [SPECIES_MEW - 1] = 0x00, - [SPECIES_CHIKORITA - 1] = 0x00, - [SPECIES_BAYLEEF - 1] = 0x00, - [SPECIES_MEGANIUM - 1] = 0x00, - [SPECIES_CYNDAQUIL - 1] = 0x00, - [SPECIES_QUILAVA - 1] = 0x00, [SPECIES_TYPHLOSION - 1] = 0x14, - [SPECIES_TOTODILE - 1] = 0x00, - [SPECIES_CROCONAW - 1] = 0x00, [SPECIES_FERALIGATR - 1] = 0x05, - [SPECIES_SENTRET - 1] = 0x00, - [SPECIES_FURRET - 1] = 0x00, - [SPECIES_HOOTHOOT - 1] = 0x00, - [SPECIES_NOCTOWL - 1] = 0x00, - [SPECIES_LEDYBA - 1] = 0x00, - [SPECIES_LEDIAN - 1] = 0x00, - [SPECIES_SPINARAK - 1] = 0x00, - [SPECIES_ARIADOS - 1] = 0x00, - [SPECIES_CROBAT - 1] = 0x00, - [SPECIES_CHINCHOU - 1] = 0x00, - [SPECIES_LANTURN - 1] = 0x00, - [SPECIES_PICHU - 1] = 0x00, - [SPECIES_CLEFFA - 1] = 0x00, - [SPECIES_IGGLYBUFF - 1] = 0x00, - [SPECIES_TOGEPI - 1] = 0x00, - [SPECIES_TOGETIC - 1] = 0x00, [SPECIES_NATU - 1] = 0x1e, - [SPECIES_XATU - 1] = 0x00, [SPECIES_MAREEP - 1] = 0x32, - [SPECIES_FLAAFFY - 1] = 0x00, [SPECIES_AMPHAROS - 1] = 0x0a, - [SPECIES_BELLOSSOM - 1] = 0x00, - [SPECIES_MARILL - 1] = 0x00, - [SPECIES_AZUMARILL - 1] = 0x00, - [SPECIES_SUDOWOODO - 1] = 0x00, [SPECIES_POLITOED - 1] = 0x28, - [SPECIES_HOPPIP - 1] = 0x00, - [SPECIES_SKIPLOOM - 1] = 0x00, - [SPECIES_JUMPLUFF - 1] = 0x00, - [SPECIES_AIPOM - 1] = 0x00, - [SPECIES_SUNKERN - 1] = 0x00, - [SPECIES_SUNFLORA - 1] = 0x00, - [SPECIES_YANMA - 1] = 0x00, - [SPECIES_WOOPER - 1] = 0x00, - [SPECIES_QUAGSIRE - 1] = 0x00, - [SPECIES_ESPEON - 1] = 0x00, - [SPECIES_UMBREON - 1] = 0x00, - [SPECIES_MURKROW - 1] = 0x00, - [SPECIES_SLOWKING - 1] = 0x00, - [SPECIES_MISDREAVUS - 1] = 0x00, - [SPECIES_UNOWN - 1] = 0x00, - [SPECIES_WOBBUFFET - 1] = 0x00, - [SPECIES_GIRAFARIG - 1] = 0x00, - [SPECIES_PINECO - 1] = 0x00, - [SPECIES_FORRETRESS - 1] = 0x00, [SPECIES_DUNSPARCE - 1] = 0x0a, - [SPECIES_GLIGAR - 1] = 0x00, [SPECIES_STEELIX - 1] = 0x2d, - [SPECIES_SNUBBULL - 1] = 0x00, - [SPECIES_GRANBULL - 1] = 0x00, [SPECIES_QWILFISH - 1] = 0x27, [SPECIES_SCIZOR - 1] = 0x13, - [SPECIES_SHUCKLE - 1] = 0x00, - [SPECIES_HERACROSS - 1] = 0x00, - [SPECIES_SNEASEL - 1] = 0x00, - [SPECIES_TEDDIURSA - 1] = 0x00, - [SPECIES_URSARING - 1] = 0x00, - [SPECIES_SLUGMA - 1] = 0x00, - [SPECIES_MAGCARGO - 1] = 0x00, - [SPECIES_SWINUB - 1] = 0x00, - [SPECIES_PILOSWINE - 1] = 0x00, - [SPECIES_CORSOLA - 1] = 0x00, - [SPECIES_REMORAID - 1] = 0x00, [SPECIES_OCTILLERY - 1] = 0x14, - [SPECIES_DELIBIRD - 1] = 0x00, - [SPECIES_MANTINE - 1] = 0x00, - [SPECIES_SKARMORY - 1] = 0x00, - [SPECIES_HOUNDOUR - 1] = 0x00, - [SPECIES_HOUNDOOM - 1] = 0x00, - [SPECIES_KINGDRA - 1] = 0x00, - [SPECIES_PHANPY - 1] = 0x00, - [SPECIES_DONPHAN - 1] = 0x00, - [SPECIES_PORYGON2 - 1] = 0x00, - [SPECIES_STANTLER - 1] = 0x00, - [SPECIES_SMEARGLE - 1] = 0x00, - [SPECIES_TYROGUE - 1] = 0x00, - [SPECIES_HITMONTOP - 1] = 0x00, [SPECIES_SMOOCHUM - 1] = 0x28, - [SPECIES_ELEKID - 1] = 0x00, - [SPECIES_MAGBY - 1] = 0x00, - [SPECIES_MILTANK - 1] = 0x00, - [SPECIES_BLISSEY - 1] = 0x00, - [SPECIES_RAIKOU - 1] = 0x00, - [SPECIES_ENTEI - 1] = 0x00, - [SPECIES_SUICUNE - 1] = 0x00, - [SPECIES_LARVITAR - 1] = 0x00, - [SPECIES_PUPITAR - 1] = 0x00, [SPECIES_TYRANITAR - 1] = 0x0a, [SPECIES_LUGIA - 1] = 0x14, - [SPECIES_HO_OH - 1] = 0x00, - [SPECIES_CELEBI - 1] = 0x00, - [SPECIES_OLD_UNOWN_B - 1] = 0x00, - [SPECIES_OLD_UNOWN_C - 1] = 0x00, - [SPECIES_OLD_UNOWN_D - 1] = 0x00, - [SPECIES_OLD_UNOWN_E - 1] = 0x00, - [SPECIES_OLD_UNOWN_F - 1] = 0x00, - [SPECIES_OLD_UNOWN_G - 1] = 0x00, - [SPECIES_OLD_UNOWN_H - 1] = 0x00, - [SPECIES_OLD_UNOWN_I - 1] = 0x00, - [SPECIES_OLD_UNOWN_J - 1] = 0x00, - [SPECIES_OLD_UNOWN_K - 1] = 0x00, - [SPECIES_OLD_UNOWN_L - 1] = 0x00, - [SPECIES_OLD_UNOWN_M - 1] = 0x00, - [SPECIES_OLD_UNOWN_N - 1] = 0x00, - [SPECIES_OLD_UNOWN_O - 1] = 0x00, - [SPECIES_OLD_UNOWN_P - 1] = 0x00, - [SPECIES_OLD_UNOWN_Q - 1] = 0x00, - [SPECIES_OLD_UNOWN_R - 1] = 0x00, - [SPECIES_OLD_UNOWN_S - 1] = 0x00, - [SPECIES_OLD_UNOWN_T - 1] = 0x00, - [SPECIES_OLD_UNOWN_U - 1] = 0x00, - [SPECIES_OLD_UNOWN_V - 1] = 0x00, - [SPECIES_OLD_UNOWN_W - 1] = 0x00, - [SPECIES_OLD_UNOWN_X - 1] = 0x00, - [SPECIES_OLD_UNOWN_Y - 1] = 0x00, - [SPECIES_OLD_UNOWN_Z - 1] = 0x00, - [SPECIES_TREECKO - 1] = 0x00, - [SPECIES_GROVYLE - 1] = 0x00, - [SPECIES_SCEPTILE - 1] = 0x00, - [SPECIES_TORCHIC - 1] = 0x00, - [SPECIES_COMBUSKEN - 1] = 0x00, - [SPECIES_BLAZIKEN - 1] = 0x00, - [SPECIES_MUDKIP - 1] = 0x00, - [SPECIES_MARSHTOMP - 1] = 0x00, - [SPECIES_SWAMPERT - 1] = 0x00, - [SPECIES_POOCHYENA - 1] = 0x00, - [SPECIES_MIGHTYENA - 1] = 0x00, - [SPECIES_ZIGZAGOON - 1] = 0x00, - [SPECIES_LINOONE - 1] = 0x00, - [SPECIES_WURMPLE - 1] = 0x00, - [SPECIES_SILCOON - 1] = 0x00, - [SPECIES_BEAUTIFLY - 1] = 0x00, - [SPECIES_CASCOON - 1] = 0x00, - [SPECIES_DUSTOX - 1] = 0x00, - [SPECIES_LOTAD - 1] = 0x00, - [SPECIES_LOMBRE - 1] = 0x00, - [SPECIES_LUDICOLO - 1] = 0x00, - [SPECIES_SEEDOT - 1] = 0x00, - [SPECIES_NUZLEAF - 1] = 0x00, - [SPECIES_SHIFTRY - 1] = 0x00, - [SPECIES_NINCADA - 1] = 0x00, - [SPECIES_NINJASK - 1] = 0x00, - [SPECIES_SHEDINJA - 1] = 0x00, - [SPECIES_TAILLOW - 1] = 0x00, - [SPECIES_SWELLOW - 1] = 0x00, - [SPECIES_SHROOMISH - 1] = 0x00, - [SPECIES_BRELOOM - 1] = 0x00, - [SPECIES_SPINDA - 1] = 0x00, - [SPECIES_WINGULL - 1] = 0x00, - [SPECIES_PELIPPER - 1] = 0x00, - [SPECIES_SURSKIT - 1] = 0x00, - [SPECIES_MASQUERAIN - 1] = 0x00, - [SPECIES_WAILMER - 1] = 0x00, [SPECIES_WAILORD - 1] = 0x0a, - [SPECIES_SKITTY - 1] = 0x00, - [SPECIES_DELCATTY - 1] = 0x00, [SPECIES_KECLEON - 1] = 0x1e, - [SPECIES_BALTOY - 1] = 0x00, - [SPECIES_CLAYDOL - 1] = 0x00, - [SPECIES_NOSEPASS - 1] = 0x00, - [SPECIES_TORKOAL - 1] = 0x00, - [SPECIES_SABLEYE - 1] = 0x00, - [SPECIES_BARBOACH - 1] = 0x00, - [SPECIES_WHISCASH - 1] = 0x00, - [SPECIES_LUVDISC - 1] = 0x00, - [SPECIES_CORPHISH - 1] = 0x00, - [SPECIES_CRAWDAUNT - 1] = 0x00, - [SPECIES_FEEBAS - 1] = 0x00, [SPECIES_MILOTIC - 1] = 0x2d, - [SPECIES_CARVANHA - 1] = 0x00, - [SPECIES_SHARPEDO - 1] = 0x00, - [SPECIES_TRAPINCH - 1] = 0x00, - [SPECIES_VIBRAVA - 1] = 0x00, - [SPECIES_FLYGON - 1] = 0x00, - [SPECIES_MAKUHITA - 1] = 0x00, - [SPECIES_HARIYAMA - 1] = 0x00, - [SPECIES_ELECTRIKE - 1] = 0x00, - [SPECIES_MANECTRIC - 1] = 0x00, - [SPECIES_NUMEL - 1] = 0x00, - [SPECIES_CAMERUPT - 1] = 0x00, [SPECIES_SPHEAL - 1] = 0x0f, - [SPECIES_SEALEO - 1] = 0x00, - [SPECIES_WALREIN - 1] = 0x00, - [SPECIES_CACNEA - 1] = 0x00, - [SPECIES_CACTURNE - 1] = 0x00, [SPECIES_SNORUNT - 1] = 0x14, - [SPECIES_GLALIE - 1] = 0x00, - [SPECIES_LUNATONE - 1] = 0x00, - [SPECIES_SOLROCK - 1] = 0x00, - [SPECIES_AZURILL - 1] = 0x00, - [SPECIES_SPOINK - 1] = 0x00, [SPECIES_GRUMPIG - 1] = 0x0f, - [SPECIES_PLUSLE - 1] = 0x00, - [SPECIES_MINUN - 1] = 0x00, - [SPECIES_MAWILE - 1] = 0x00, - [SPECIES_MEDITITE - 1] = 0x00, - [SPECIES_MEDICHAM - 1] = 0x00, - [SPECIES_SWABLU - 1] = 0x00, - [SPECIES_ALTARIA - 1] = 0x00, [SPECIES_WYNAUT - 1] = 0x0f, - [SPECIES_DUSKULL - 1] = 0x00, [SPECIES_DUSCLOPS - 1] = 0x1e, - [SPECIES_ROSELIA - 1] = 0x00, - [SPECIES_SLAKOTH - 1] = 0x00, - [SPECIES_VIGOROTH - 1] = 0x00, - [SPECIES_SLAKING - 1] = 0x00, - [SPECIES_GULPIN - 1] = 0x00, - [SPECIES_SWALOT - 1] = 0x00, - [SPECIES_TROPIUS - 1] = 0x00, - [SPECIES_WHISMUR - 1] = 0x00, - [SPECIES_LOUDRED - 1] = 0x00, - [SPECIES_EXPLOUD - 1] = 0x00, - [SPECIES_CLAMPERL - 1] = 0x00, - [SPECIES_HUNTAIL - 1] = 0x00, - [SPECIES_GOREBYSS - 1] = 0x00, [SPECIES_ABSOL - 1] = 0x2d, - [SPECIES_SHUPPET - 1] = 0x00, - [SPECIES_BANETTE - 1] = 0x00, - [SPECIES_SEVIPER - 1] = 0x00, - [SPECIES_ZANGOOSE - 1] = 0x00, - [SPECIES_RELICANTH - 1] = 0x00, - [SPECIES_ARON - 1] = 0x00, - [SPECIES_LAIRON - 1] = 0x00, - [SPECIES_AGGRON - 1] = 0x00, - [SPECIES_CASTFORM - 1] = 0x00, - [SPECIES_VOLBEAT - 1] = 0x00, - [SPECIES_ILLUMISE - 1] = 0x00, - [SPECIES_LILEEP - 1] = 0x00, - [SPECIES_CRADILY - 1] = 0x00, - [SPECIES_ANORITH - 1] = 0x00, - [SPECIES_ARMALDO - 1] = 0x00, - [SPECIES_RALTS - 1] = 0x00, - [SPECIES_KIRLIA - 1] = 0x00, - [SPECIES_GARDEVOIR - 1] = 0x00, - [SPECIES_BAGON - 1] = 0x00, - [SPECIES_SHELGON - 1] = 0x00, [SPECIES_SALAMENCE - 1] = 0x46, - [SPECIES_BELDUM - 1] = 0x00, - [SPECIES_METANG - 1] = 0x00, - [SPECIES_METAGROSS - 1] = 0x00, - [SPECIES_REGIROCK - 1] = 0x00, - [SPECIES_REGICE - 1] = 0x00, - [SPECIES_REGISTEEL - 1] = 0x00, [SPECIES_KYOGRE - 1] = 0x3c, - [SPECIES_GROUDON - 1] = 0x00, [SPECIES_RAYQUAZA - 1] = 0x3c, - [SPECIES_LATIAS - 1] = 0x00, - [SPECIES_LATIOS - 1] = 0x00, - [SPECIES_JIRACHI - 1] = 0x00, - [SPECIES_DEOXYS - 1] = 0x00, - [SPECIES_CHIMECHO - 1] = 0x00, }; const u8 gPPUpGetMask[] = {0x03, 0x0c, 0x30, 0xc0}; // Masks for getting PP Up count, also PP Max values -- cgit v1.2.3 From baa187665b102b0210ecd7296aaaf0de512d3e87 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 2 Apr 2019 13:35:52 +0200 Subject: Document a bit of script menu and battle anims --- src/ghost.c | 106 ++++++++++++++++++++----------------- src/mauville_old_man.c | 2 +- src/menu.c | 14 +++-- src/script_menu.c | 107 ++++++++++++++++++-------------------- src/script_pokemon_util_80F87D8.c | 2 +- 5 files changed, 116 insertions(+), 115 deletions(-) (limited to 'src') diff --git a/src/ghost.c b/src/ghost.c index 998be0caa..97b86aa76 100644 --- a/src/ghost.c +++ b/src/ghost.c @@ -87,7 +87,7 @@ const union AffineAnimCmd *const gUnknown_08596D54[] = gUnknown_08596D44, }; -const struct SpriteTemplate gUnknown_08596D58 = +const struct SpriteTemplate gShadowBallSpriteTemplate = { .tileTag = ANIM_TAG_SHADOW_BALL, .paletteTag = ANIM_TAG_SHADOW_BALL, @@ -261,20 +261,20 @@ static void sub_81116E8(struct Sprite *sprite) AnimTranslateLinear(sprite); sprite->pos2.x += Sin(sprite->data[5], 10); sprite->pos2.y += Cos(sprite->data[5], 15); - + r2 = sprite->data[5]; sprite->data[5] = (sprite->data[5] + 5) & 0xFF; r0 = sprite->data[5]; - + if (r2 == 0 || r2 > 196) { if (r0 > 0) PlaySE(SE_W109); } - + if (sprite->data[6] == 0) { - sprite->invisible = TRUE; + sprite->invisible = TRUE; sprite->callback = DestroyAnimSpriteAndDisableBlend; } else @@ -283,18 +283,18 @@ static void sub_81116E8(struct Sprite *sprite) static void sub_8111764(struct Sprite *sprite) { - - s16 r0; + + s16 r0; if (sprite->data[6] > 0xFF) { if (++sprite->data[6] == 0x10d) sprite->data[6] = 0; return; } - + r0 = sprite->data[7]; sprite->data[7]++; - + if ((r0 & 0xFF) == 0) { sprite->data[7] &= 0xff00; @@ -392,16 +392,16 @@ static void sub_811196C(u8 taskId) } } -// Spins a sprite towards the target, pausing in the middle. -// Used in Shadow Ball. +// Spins a sprite towards the target, pausing in the middle. +// Used in Shadow Ball. // arg 0: duration step 1 (attacker -> center) // arg 1: duration step 2 (spin center) // arg 2: duration step 3 (center -> target) static void InitAnimShadowBall(struct Sprite *sprite) { - u16 r5, r6; - r5 = sprite->pos1.x; - r6 = sprite->pos1.y; + s16 oldPosX = sprite->pos1.x; + s16 oldPosY = sprite->pos1.y; + sprite->pos1.x = GetBattlerSpriteCoord(gBattleAnimAttacker, 2); sprite->pos1.y = GetBattlerSpriteCoord(gBattleAnimAttacker, 3); sprite->data[0] = 0; @@ -410,8 +410,8 @@ static void InitAnimShadowBall(struct Sprite *sprite) sprite->data[3] = gBattleAnimArgs[2]; sprite->data[4] = sprite->pos1.x << 4; sprite->data[5] = sprite->pos1.y << 4; - sprite->data[6] = (((s16)r5 - sprite->pos1.x) << 4) / (gBattleAnimArgs[0] << 1); - sprite->data[7] = (((s16)r6 - sprite->pos1.y) << 4) / (gBattleAnimArgs[0] << 1); + sprite->data[6] = ((oldPosX - sprite->pos1.x) << 4) / (gBattleAnimArgs[0] << 1); + sprite->data[7] = ((oldPosY - sprite->pos1.y) << 4) / (gBattleAnimArgs[0] << 1); sprite->callback = AnimShadowBallStep; } @@ -465,50 +465,57 @@ static void sub_8111B9C(struct Sprite *sprite) sprite->callback = sub_8111BB4; } -static void sub_8111BB4(struct Sprite *sprite) { - - s8 r5 = FALSE; +static void sub_8111BB4(struct Sprite *sprite) +{ + bool8 r5 = FALSE; bool8 r6 = FALSE; - if(sprite->animEnded) + + if (sprite->animEnded) { - if(!(sprite->invisible)) - sprite->invisible=TRUE; - switch(sprite->data[0]) + if (!sprite->invisible) + sprite->invisible = TRUE; + + switch (sprite->data[0]) { - case 0: - if((sprite->data[1]) != 2) - break; - goto loc_08111C06; - case 1: - if((sprite->data[1]) == 4) - r5 = TRUE; - break; - default: - r6 = TRUE; + default: + r6 = TRUE; + break; + case 0: + if (sprite->data[1] == 2) + r5 = TRUE; + break; + case 1: + if (sprite->data[1] == 4) + r5 = TRUE; + break; } - if(r5) + + if (r5) { - loc_08111C06: sprite->invisible ^= 1; sprite->data[2]++; sprite->data[1] = 0; - if(sprite->data[2] == 5) + if (sprite->data[2] == 5) { sprite->data[2] = 0; sprite->data[0]++; } } - else if(r6) + else if (r6) + { DestroyAnimSprite(sprite); + } else + { sprite->data[1]++; + } } } void sub_8111C50(u8 taskId) { struct Task *task; - + task = &gTasks[taskId]; task->data[0] = CloneBattlerSpriteWithBlend(1); if (task->data[0] < 0) @@ -523,7 +530,7 @@ void sub_8111C50(u8 taskId) SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL)); SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(task->data[2], task->data[3])); gSprites[task->data[0]].data[0] = 80; - if (GetBattlerSide(gBattleAnimTarget) == 0) + if (GetBattlerSide(gBattleAnimTarget) == B_SIDE_PLAYER) { gSprites[task->data[0]].data[1] = -144; gSprites[task->data[0]].data[2] = 112; @@ -573,6 +580,7 @@ static void sub_8111D78(u8 taskId) break; case 2: DestroyAnimVisualTask(taskId); + break; } } @@ -595,7 +603,7 @@ static void sub_8111E78(u8 taskId) switch (task->data[15]) { case 0: - task->data[14] = AllocSpritePalette(0x2771); + task->data[14] = AllocSpritePalette(ANIM_TAG_BENT_SPOON); if (task->data[14] == 0xFF || task->data[14] == 0xF) { DestroyAnimVisualTask(taskId); @@ -605,7 +613,7 @@ static void sub_8111E78(u8 taskId) task->data[0] = CloneBattlerSpriteWithBlend(1); if (task->data[0] < 0) { - FreeSpritePaletteByTag(0x2771); + FreeSpritePaletteByTag(ANIM_TAG_BENT_SPOON); DestroyAnimVisualTask(taskId); } else @@ -698,14 +706,14 @@ static void sub_81120DC(u8 taskId) static void sub_8112170(u8 taskId) { struct Task *task = &gTasks[taskId]; - u8 position = GetBattlerSpriteBGPriorityRank(gBattleAnimTarget); + u8 rank = GetBattlerSpriteBGPriorityRank(gBattleAnimTarget); switch (task->data[15]) { case 0: gScanlineEffect.state = 3; task->data[14] = GetAnimBattlerSpriteId(1); - if (position == 1) + if (rank == 1) ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON); else ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON); @@ -714,12 +722,12 @@ static void sub_8112170(u8 taskId) BlendPalette(task->data[4], 16, 0, RGB(13, 0, 15)); break; case 2: - gSprites[task->data[14]].invisible = 1; + gSprites[task->data[14]].invisible = TRUE; obj_delete_but_dont_free_vram(&gSprites[task->data[0]]); - FreeSpritePaletteByTag(0x2771); + FreeSpritePaletteByTag(ANIM_TAG_BENT_SPOON); SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); - if (position == 1) + if (rank == 1) SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG1_ON); else SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_BG2_ON); @@ -886,7 +894,7 @@ static void sub_81125E0(u8 taskId) } } } - + if (task->data[10]) task->data[10]--; else if (task->data[6]) @@ -1081,7 +1089,7 @@ static void sub_8112ACC(struct Sprite *sprite) if (sprite->data[0] == 0) { SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL)); - SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0x10, 0)); + SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 0)); sprite->data[0]++; sprite->data[1] = 0; sprite->data[2] = 0; @@ -1120,7 +1128,7 @@ static void sub_8112B78(struct Sprite *sprite) sprite->pos2.x = Sin(sprite->data[0], 12); if (GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) sprite->pos2.x = -sprite->pos2.x; - + sprite->data[0] = (sprite->data[0] + 6) & 0xFF; sprite->data[1] += 0x100; sprite->pos2.y = -(sprite->data[1] >> 8); diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c index ddd3f931e..8bb9cb6e4 100644 --- a/src/mauville_old_man.c +++ b/src/mauville_old_man.c @@ -1193,7 +1193,7 @@ static void Task_StoryListMenu(u8 taskId) // Task_StoryListMenu gSpecialVar_Result = 1; sSelectedStory = selection; } - sub_80E2A78(sStorytellerWindowId); + ClearToTransparentAndRemoveWindow(sStorytellerWindowId); DestroyTask(taskId); EnableBothScriptContexts(); break; diff --git a/src/menu.c b/src/menu.c index 958788b25..80d440771 100644 --- a/src/menu.c +++ b/src/menu.c @@ -1661,16 +1661,14 @@ void CreateYesNoMenu(const struct WindowTemplate *window, u16 baseTileNum, u8 pa InitMenuInUpperLeftCornerPlaySoundWhenAPressed(sYesNoWindowId, 2, initialCursorPos); } -void sub_81997AC(u8 windowId, u8 a4, u8 a6, u8 a7, const struct MenuAction *strs) +void PrintMenuGridTable(u8 windowId, u8 optionWidth, u8 horizontalCount, u8 verticalCount, const struct MenuAction *strs) { - u32 i; - u32 j; - for (i = 0; i < a7; i++) + u32 i, j; + + for (i = 0; i < verticalCount; i++) { - for (j = 0; j < a6; j++) - { - AddTextPrinterParameterized(windowId, 1, strs[(i * a6) + j].text, (a4 * j) + 8, (i * 16) + 1, 0xFF, NULL); - } + for (j = 0; j < horizontalCount; j++) + AddTextPrinterParameterized(windowId, 1, strs[(i * horizontalCount) + j].text, (optionWidth * j) + 8, (i * 16) + 1, 0xFF, NULL); } CopyWindowToVram(windowId, 2); } diff --git a/src/script_menu.c b/src/script_menu.c index c7523a370..082253e35 100644 --- a/src/script_menu.c +++ b/src/script_menu.c @@ -1183,7 +1183,7 @@ static void Task_HandleMultichoiceInput(u8 taskId) { gSpecialVar_Result = selection; } - sub_80E2A78(tWindowId); + ClearToTransparentAndRemoveWindow(tWindowId); DestroyTask(taskId); EnableBothScriptContexts(); } @@ -1219,8 +1219,6 @@ bool8 IsScriptActive(void) static void Task_HandleYesNoInput(u8 taskId) { - u8 left, top; - if (gTasks[taskId].tRight < 5) { gTasks[taskId].tRight++; @@ -1229,9 +1227,9 @@ static void Task_HandleYesNoInput(u8 taskId) switch (Menu_ProcessInputNoWrapClearOnChoose()) { - case -2: + case MENU_NOTHING_CHOSEN: return; - case -1: + case MENU_B_PRESSED: case 1: PlaySE(SE_SELECT); gSpecialVar_Result = 0; @@ -1247,8 +1245,6 @@ static void Task_HandleYesNoInput(u8 taskId) bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress, u8 columnCount) { - u8 bottom = 0; - if (FuncIsActiveTask(Task_HandleMultichoiceGridInput) == TRUE) { return FALSE; @@ -1256,10 +1252,8 @@ bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPr else { u8 taskId; - u8 unk2; - int width; - int i; - u8 newWidth; + u8 rowCount, newWidth; + int i, width; gSpecialVar_Result = 0xFF; width = 0; @@ -1272,15 +1266,15 @@ bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPr newWidth = convert_pixel_width_to_tile_width(width); left = sub_80E2D5C(left, columnCount * newWidth); - unk2 = gMultichoiceLists[multichoiceId].count / columnCount; + rowCount = gMultichoiceLists[multichoiceId].count / columnCount; taskId = CreateTask(Task_HandleMultichoiceGridInput, 80); gTasks[taskId].tIgnoreBPress = ignoreBPress; - gTasks[taskId].tWindowId = CreateWindowFromRect(left, top, columnCount * newWidth, unk2 * 2); + gTasks[taskId].tWindowId = CreateWindowFromRect(left, top, columnCount * newWidth, rowCount * 2); SetStandardWindowBorderStyle(gTasks[taskId].tWindowId, 0); - sub_81997AC(gTasks[taskId].tWindowId, newWidth * 8, columnCount, unk2, gMultichoiceLists[multichoiceId].list); - sub_8199944(gTasks[taskId].tWindowId, newWidth * 8, columnCount, unk2, 0); + PrintMenuGridTable(gTasks[taskId].tWindowId, newWidth * 8, columnCount, rowCount, gMultichoiceLists[multichoiceId].list); + sub_8199944(gTasks[taskId].tWindowId, newWidth * 8, columnCount, rowCount, 0); CopyWindowToVram(gTasks[taskId].tWindowId, 3); return TRUE; } @@ -1291,23 +1285,24 @@ static void Task_HandleMultichoiceGridInput(u8 taskId) s16 *data = gTasks[taskId].data; s8 selection = Menu_ProcessInputGridLayout(); - if (selection != -2) + switch (selection) { - if (selection == -1) - { - if (tIgnoreBPress) - return; - PlaySE(SE_SELECT); - gSpecialVar_Result = 0x7F; - } - else - { - gSpecialVar_Result = selection; - } - sub_80E2A78(tWindowId); - DestroyTask(taskId); - EnableBothScriptContexts(); + case MENU_NOTHING_CHOSEN: + return; + case MENU_B_PRESSED: + if (tIgnoreBPress) + return; + PlaySE(SE_SELECT); + gSpecialVar_Result = 0x7F; + break; + default: + gSpecialVar_Result = selection; + break; } + + ClearToTransparentAndRemoveWindow(tWindowId); + DestroyTask(taskId); + EnableBothScriptContexts(); } #undef tWindowId @@ -1564,7 +1559,7 @@ static void Task_PokemonPicWindow(u8 taskId) task->tState++; break; case 3: - sub_80E2A78(task->tWindowId); + ClearToTransparentAndRemoveWindow(task->tWindowId); DestroyTask(taskId); break; } @@ -1628,7 +1623,7 @@ u8 CreateWindowFromRect(u8 x, u8 y, u8 width, u8 height) return windowId; } -void sub_80E2A78(u8 windowId) +void ClearToTransparentAndRemoveWindow(u8 windowId) { ClearStdWindowAndFrameToTransparent(windowId, TRUE); RemoveWindow(windowId); @@ -1638,30 +1633,30 @@ static void sub_80E2A94(u8 multichoiceId) { switch (multichoiceId) { - case 77: - FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, gUnknown_0858BBAC[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); - break; - case 76: - FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, gUnknown_0858BB9C[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); - break; - case 78: - FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, gUnknown_0858BBBC[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); - break; - case 79: - FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, gUnknown_0858BBCC[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); - break; - case 75: - FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, gUnknown_0858BBEC[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); - break; - case 74: - FillWindowPixelBuffer(0, PIXEL_FILL(1)); - AddTextPrinterParameterized2(0, 1, gUnknown_0858BBE0[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); - break; + case 77: + FillWindowPixelBuffer(0, PIXEL_FILL(1)); + AddTextPrinterParameterized2(0, 1, gUnknown_0858BBAC[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); + break; + case 76: + FillWindowPixelBuffer(0, PIXEL_FILL(1)); + AddTextPrinterParameterized2(0, 1, gUnknown_0858BB9C[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); + break; + case 78: + FillWindowPixelBuffer(0, PIXEL_FILL(1)); + AddTextPrinterParameterized2(0, 1, gUnknown_0858BBBC[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); + break; + case 79: + FillWindowPixelBuffer(0, PIXEL_FILL(1)); + AddTextPrinterParameterized2(0, 1, gUnknown_0858BBCC[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); + break; + case 75: + FillWindowPixelBuffer(0, PIXEL_FILL(1)); + AddTextPrinterParameterized2(0, 1, gUnknown_0858BBEC[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); + break; + case 74: + FillWindowPixelBuffer(0, PIXEL_FILL(1)); + AddTextPrinterParameterized2(0, 1, gUnknown_0858BBE0[Menu_GetCursorPos()], 0, NULL, 2, 1, 3); + break; } } diff --git a/src/script_pokemon_util_80F87D8.c b/src/script_pokemon_util_80F87D8.c index 7e4c14531..ece030395 100755 --- a/src/script_pokemon_util_80F87D8.c +++ b/src/script_pokemon_util_80F87D8.c @@ -395,7 +395,7 @@ static void sub_80F8EE8(u8 taskId) task->data[0]++; break; case 4: - sub_80E2A78(gTasks[taskId].data[5]); + ClearToTransparentAndRemoveWindow(gTasks[taskId].data[5]); DestroyTask(taskId); break; } -- cgit v1.2.3 From d8c9f1b30fb92289e7aa4d44dfcf1b2120bea8d6 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 2 Apr 2019 15:06:44 +0200 Subject: Rows and columns --- src/menu.c | 60 ++++++++++++++++++++++++++++++------------------------------ 1 file changed, 30 insertions(+), 30 deletions(-) (limited to 'src') diff --git a/src/menu.c b/src/menu.c index 80d440771..b766b1b86 100644 --- a/src/menu.c +++ b/src/menu.c @@ -43,8 +43,8 @@ struct Menu u8 fontId; u8 optionWidth; u8 optionHeight; - u8 horizontalCount; - u8 verticalCount; + u8 columns; + u8 rows; bool8 APressMuted; }; @@ -1283,8 +1283,8 @@ u8 sub_8198F58(u8 windowId, u8 fontId, u8 left, u8 top, u8 a4, u8 cursorHeight, sMenu.fontId = fontId; sMenu.optionWidth = a4; sMenu.optionHeight = cursorHeight; - sMenu.horizontalCount = a6; - sMenu.verticalCount = a7; + sMenu.columns = a6; + sMenu.rows = a7; pos = a9; @@ -1308,16 +1308,16 @@ void sub_8199060(u8 oldCursorPos, u8 newCursorPos) { u8 cursorWidth = GetMenuCursorDimensionByFont(sMenu.fontId, 0); u8 cursorHeight = GetMenuCursorDimensionByFont(sMenu.fontId, 1); - u8 xPos = (oldCursorPos % sMenu.horizontalCount) * sMenu.optionWidth + sMenu.left; - u8 yPos = (oldCursorPos / sMenu.horizontalCount) * sMenu.optionHeight + sMenu.top; + u8 xPos = (oldCursorPos % sMenu.columns) * sMenu.optionWidth + sMenu.left; + u8 yPos = (oldCursorPos / sMenu.columns) * sMenu.optionHeight + sMenu.top; FillWindowPixelRect(sMenu.windowId, PIXEL_FILL(1), xPos, yPos, cursorWidth, cursorHeight); - xPos = (newCursorPos % sMenu.horizontalCount) * sMenu.optionWidth + sMenu.left; - yPos = (newCursorPos / sMenu.horizontalCount) * sMenu.optionHeight + sMenu.top; + xPos = (newCursorPos % sMenu.columns) * sMenu.optionWidth + sMenu.left; + yPos = (newCursorPos / sMenu.columns) * sMenu.optionHeight + sMenu.top; AddTextPrinterParameterized(sMenu.windowId, sMenu.fontId, gText_SelectorArrow3, @@ -1333,13 +1333,13 @@ u8 sub_8199134(s8 deltaX, s8 deltaY) if (deltaX != 0) { - if ((sMenu.cursorPos % sMenu.horizontalCount) + deltaX < 0) + if ((sMenu.cursorPos % sMenu.columns) + deltaX < 0) { - sMenu.cursorPos += sMenu.horizontalCount - 1; + sMenu.cursorPos += sMenu.columns - 1; } - else if ((sMenu.cursorPos % sMenu.horizontalCount) + deltaX >= sMenu.horizontalCount) + else if ((sMenu.cursorPos % sMenu.columns) + deltaX >= sMenu.columns) { - sMenu.cursorPos = (sMenu.cursorPos / sMenu.horizontalCount) * sMenu.horizontalCount; + sMenu.cursorPos = (sMenu.cursorPos / sMenu.columns) * sMenu.columns; } else { @@ -1349,17 +1349,17 @@ u8 sub_8199134(s8 deltaX, s8 deltaY) if (deltaY != 0) { - if ((sMenu.cursorPos / sMenu.horizontalCount) + deltaY < 0) + if ((sMenu.cursorPos / sMenu.columns) + deltaY < 0) { - sMenu.cursorPos += sMenu.horizontalCount * (sMenu.verticalCount - 1); + sMenu.cursorPos += sMenu.columns * (sMenu.rows - 1); } - else if ((sMenu.cursorPos / sMenu.horizontalCount) + deltaY >= sMenu.verticalCount) + else if ((sMenu.cursorPos / sMenu.columns) + deltaY >= sMenu.rows) { - sMenu.cursorPos -= sMenu.horizontalCount * (sMenu.verticalCount - 1); + sMenu.cursorPos -= sMenu.columns * (sMenu.rows - 1); } else { - sMenu.cursorPos += (sMenu.horizontalCount * deltaY); + sMenu.cursorPos += (sMenu.columns * deltaY); } } @@ -1381,8 +1381,8 @@ u8 sub_81991F8(s8 deltaX, s8 deltaY) if (deltaX != 0) { - if (((sMenu.cursorPos % sMenu.horizontalCount) + deltaX >= 0) && - ((sMenu.cursorPos % sMenu.horizontalCount) + deltaX < sMenu.horizontalCount)) + if (((sMenu.cursorPos % sMenu.columns) + deltaX >= 0) && + ((sMenu.cursorPos % sMenu.columns) + deltaX < sMenu.columns)) { sMenu.cursorPos += deltaX; } @@ -1390,10 +1390,10 @@ u8 sub_81991F8(s8 deltaX, s8 deltaY) if (deltaY != 0) { - if (((sMenu.cursorPos / sMenu.horizontalCount) + deltaY >= 0) && - ((sMenu.cursorPos / sMenu.horizontalCount) + deltaY < sMenu.verticalCount)) + if (((sMenu.cursorPos / sMenu.columns) + deltaY >= 0) && + ((sMenu.cursorPos / sMenu.columns) + deltaY < sMenu.rows)) { - sMenu.cursorPos += (sMenu.horizontalCount * deltaY); + sMenu.cursorPos += (sMenu.columns * deltaY); } } @@ -1661,14 +1661,14 @@ void CreateYesNoMenu(const struct WindowTemplate *window, u16 baseTileNum, u8 pa InitMenuInUpperLeftCornerPlaySoundWhenAPressed(sYesNoWindowId, 2, initialCursorPos); } -void PrintMenuGridTable(u8 windowId, u8 optionWidth, u8 horizontalCount, u8 verticalCount, const struct MenuAction *strs) +void PrintMenuGridTable(u8 windowId, u8 optionWidth, u8 columns, u8 rows, const struct MenuAction *strs) { u32 i, j; - for (i = 0; i < verticalCount; i++) + for (i = 0; i < rows; i++) { - for (j = 0; j < horizontalCount; j++) - AddTextPrinterParameterized(windowId, 1, strs[(i * horizontalCount) + j].text, (optionWidth * j) + 8, (i * 16) + 1, 0xFF, NULL); + for (j = 0; j < columns; j++) + AddTextPrinterParameterized(windowId, 1, strs[(i * columns) + j].text, (optionWidth * j) + 8, (i * 16) + 1, 0xFF, NULL); } CopyWindowToVram(windowId, 2); } @@ -1704,20 +1704,20 @@ void sub_819983C(u8 windowId, u8 a4, u8 itemCount, u8 itemCount2, const struct M CopyWindowToVram(windowId, 2); } -u8 sub_8199944(u8 windowId, u8 optionWidth, u8 horizontalCount, u8 verticalCount, u8 initialCursorPos) +u8 sub_8199944(u8 windowId, u8 optionWidth, u8 columns, u8 rows, u8 initialCursorPos) { s32 pos; sMenu.left = 0; sMenu.top = 1; sMenu.minCursorPos = 0; - sMenu.maxCursorPos = (horizontalCount * verticalCount) - 1; + sMenu.maxCursorPos = (columns * rows) - 1; sMenu.windowId = windowId; sMenu.fontId = 1; sMenu.optionWidth = optionWidth; sMenu.optionHeight = 16; - sMenu.horizontalCount = horizontalCount; - sMenu.verticalCount = verticalCount; + sMenu.columns = columns; + sMenu.rows = rows; pos = initialCursorPos; -- cgit v1.2.3 From 1241700b204b9f450221299c6e837c0f522f60b2 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Tue, 2 Apr 2019 18:28:56 -0500 Subject: Finish documenting the other weather effects --- src/cable_car.c | 19 +- src/field_weather.c | 6 +- src/field_weather_effect.c | 583 ++++++++++++++++++++++++--------------------- 3 files changed, 324 insertions(+), 284 deletions(-) (limited to 'src') diff --git a/src/cable_car.c b/src/cable_car.c index ab7b5726a..42137e804 100755 --- a/src/cable_car.c +++ b/src/cable_car.c @@ -407,13 +407,12 @@ static void sub_81503E4(u8 taskId) case WEATHER_ASH: if (gWeatherPtr->sprites.s2.ashSprites[0] != NULL && gWeatherPtr->sprites.s2.ashSprites[0]->oam.priority != 0) { - for (; i < 20; i++) + for (; i < NUM_ASH_SPRITES; i++) { - if (gWeatherPtr->sprites.s2.ashSprites[i] != NULL) - { + if (gWeatherPtr->sprites.s2.ashSprites[i]) gWeatherPtr->sprites.s2.ashSprites[i]->oam.priority = 0; - } } + sCableCar->state = 2; } break; @@ -424,12 +423,10 @@ static void sub_81503E4(u8 taskId) } else if (sCableCar->timer >= sCableCar->unk4 + 8) { - for (; i < 20; i++) + for (; i < NUM_ASH_SPRITES; i++) { - if (gWeatherPtr->sprites.s2.ashSprites[i] != NULL) - { - gWeatherPtr->sprites.s2.ashSprites[i]->invisible ^= TRUE; - } + if (gWeatherPtr->sprites.s2.ashSprites[i]) + gWeatherPtr->sprites.s2.ashSprites[i]->invisible ^= 1; } } break; @@ -445,9 +442,7 @@ static void sub_81503E4(u8 taskId) break; case 3: if (!gPaletteFade.active) - { sCableCar->state = 0xFF; - } break; case 0xFF: SetVBlankCallback(NULL); @@ -536,7 +531,7 @@ static void sub_8150664(u8 taskId) if (sCableCar->timer < sCableCar->unk4) gSpriteCoordOffsetX = (gSpriteCoordOffsetX + 247) % 248; else - gWeatherPtr->unknown_6FC = (gWeatherPtr->unknown_6FC + 247) % 248; + gWeatherPtr->ashBaseSpritesX = (gWeatherPtr->ashBaseSpritesX + 247) % 248; } static void CableCarVblankCallback(void) diff --git a/src/field_weather.c b/src/field_weather.c index 346d30a38..814e85ef4 100644 --- a/src/field_weather.c +++ b/src/field_weather.c @@ -173,9 +173,9 @@ void StartWeather(void) gWeatherPtr->ashSpritesCreated = 0; gWeatherPtr->fog1SpritesCreated = 0; gWeatherPtr->fog2SpritesCreated = 0; - gWeatherPtr->sandstormSprites1Created = 0; - gWeatherPtr->sandstormSprites2Created = 0; - gWeatherPtr->unknown_72E = 0; + gWeatherPtr->sandstormSpritesCreated = 0; + gWeatherPtr->sandstormSwirlSpritesCreated = 0; + gWeatherPtr->bubblesSpritesCreated = 0; gWeatherPtr->lightenedFogSpritePalsCount = 0; Weather_SetBlendCoeffs(16, 0); gWeatherPtr->currWeather = 0; diff --git a/src/field_weather_effect.c b/src/field_weather_effect.c index 0544710ad..eac434983 100644 --- a/src/field_weather_effect.c +++ b/src/field_weather_effect.c @@ -1,4 +1,5 @@ #include "global.h" +#include "battle_anim.h" #include "event_object_movement.h" #include "field_weather.h" #include "overworld.h" @@ -17,8 +18,8 @@ EWRAM_DATA static u8 gCurrentAlternatingWeather = 0; EWRAM_DATA static u16 gUnusedWeatherRelated = 0; // CONST -const u16 gUnknown_0854C290[] = INCBIN_U16("graphics/weather/1.gbapal"); -const u16 gUnknown_0854C2B0[] = INCBIN_U16("graphics/weather/2.gbapal"); +const u16 gCloudsWeatherPalette[] = INCBIN_U16("graphics/weather/cloud.gbapal"); +const u16 gSandstormWeatherPalette[] = INCBIN_U16("graphics/weather/sandstorm.gbapal"); const u8 gWeatherFog2Tiles[] = INCBIN_U8("graphics/weather/fog2.4bpp"); const u8 gWeatherFog1Tiles[] = INCBIN_U8("graphics/weather/fog1.4bpp"); const u8 gWeatherCloudTiles[] = INCBIN_U8("graphics/weather/cloud.4bpp"); @@ -180,7 +181,7 @@ static void CreateCloudSprites(void) return; LoadSpriteSheet(&sCloudSpriteSheet); - LoadCustomWeatherSpritePalette(gUnknown_0854C290); + LoadCustomWeatherSpritePalette(gCloudsWeatherPalette); for (i = 0; i < NUM_CLOUD_SPRITES; i++) { spriteId = CreateSprite(&sCloudSpriteTemplate, 0, 0, 0xFF); @@ -229,6 +230,8 @@ static void UpdateCloudSprite(struct Sprite *sprite) // Drought //------------------------------------------------------------------------------ +static void UpdateDroughtBlend(u8); + void Drought_InitVars(void) { gWeatherPtr->initStep = 0; @@ -280,14 +283,12 @@ void Drought_Main(void) bool8 Drought_Finish(void) { - return 0; + return FALSE; } -void task50_0807B6D4(u8); - -void sub_80AC81C(void) +void StartDroughtWeatherBlend(void) { - CreateTask(task50_0807B6D4, 0x50); + CreateTask(UpdateDroughtBlend, 0x50); } #define tState data[0] @@ -295,7 +296,7 @@ void sub_80AC81C(void) #define tBlendDelay data[2] #define tWinRange data[3] -void task50_0807B6D4(u8 taskId) +static void UpdateDroughtBlend(u8 taskId) { struct Task *task = &gTasks[taskId]; @@ -1436,7 +1437,7 @@ static void CreateFog1Sprites(void) .tag = 0x1201, }; LoadSpriteSheet(&fog1SpriteSheet); - for (i = 0; i < NUM_FOG_SPRITES; i++) + for (i = 0; i < NUM_FOG1_SPRITES; i++) { spriteId = CreateSpriteAtEnd(&sFog1SpriteTemplate, 0, 0, 0xFF); if (spriteId != MAX_SPRITES) @@ -1463,7 +1464,7 @@ static void DestroyFog1Sprites(void) if (gWeatherPtr->fog1SpritesCreated) { - for (i = 0; i < NUM_FOG_SPRITES; i++) + for (i = 0; i < NUM_FOG1_SPRITES; i++) { if (gWeatherPtr->sprites.s2.fog1Sprites[i] != NULL) DestroySprite(gWeatherPtr->sprites.s2.fog1Sprites[i]); @@ -1508,9 +1509,9 @@ void Ash_InitAll(void) void Ash_Main(void) { - gWeatherPtr->baseAshSpritesX = gSpriteCoordOffsetX & 0x1FF; - while (gWeatherPtr->baseAshSpritesX >= 240) - gWeatherPtr->baseAshSpritesX -= 240; + gWeatherPtr->ashBaseSpritesX = gSpriteCoordOffsetX & 0x1FF; + while (gWeatherPtr->ashBaseSpritesX >= 240) + gWeatherPtr->ashBaseSpritesX -= 240; switch (gWeatherPtr->initStep) { @@ -1676,10 +1677,10 @@ static void UpdateAshSprite(struct Sprite *sprite) } sprite->pos1.y = gSpriteCoordOffsetY + sprite->tOffsetY; - sprite->pos1.x = gWeatherPtr->baseAshSpritesX + 32 + sprite->tSpriteColumn * 64; + sprite->pos1.x = gWeatherPtr->ashBaseSpritesX + 32 + sprite->tSpriteColumn * 64; if (sprite->pos1.x > 271) { - sprite->pos1.x = gWeatherPtr->baseAshSpritesX + 480 - (4 - sprite->tSpriteColumn) * 64; + sprite->pos1.x = gWeatherPtr->ashBaseSpritesX + 480 - (4 - sprite->tSpriteColumn) * 64; sprite->pos1.x &= 0x1FF; } } @@ -1693,6 +1694,11 @@ static void UpdateAshSprite(struct Sprite *sprite) // Fog 2 //------------------------------------------------------------------------------ +static void UpdateFog2Movement(void); +static void CreateFog2Sprites(void); +static void DestroyFog2Sprites(void); +static void UpdateFog2Sprite(struct Sprite *); + void Fog2_InitVars(void) { gWeatherPtr->initStep = 0; @@ -1701,20 +1707,18 @@ void Fog2_InitVars(void) gWeatherPtr->gammaStepDelay = 20; gWeatherPtr->fog1ScrollCounter = 0; gWeatherPtr->fog1ScrollOffset = 1; - if (gWeatherPtr->fog2SpritesCreated == 0) - { - gWeatherPtr->unknown_71C = 0; - gWeatherPtr->unknown_71E = 0; - gWeatherPtr->unknown_720 = 0; - gWeatherPtr->unknown_722 = 0; - gWeatherPtr->unknown_718 = 0; - gWeatherPtr->unknown_71A = 0; + if (!gWeatherPtr->fog2SpritesCreated) + { + gWeatherPtr->fog2ScrollXCounter = 0; + gWeatherPtr->fog2ScrollYCounter = 0; + gWeatherPtr->fog2XOffset = 0; + gWeatherPtr->fog2YOffset = 0; + gWeatherPtr->fog2BaseSpritesX = 0; + gWeatherPtr->fog2PosY = 0; Weather_SetBlendCoeffs(0, 16); } } -void Fog2_Main(void); - void Fog2_InitAll(void) { Fog2_InitVars(); @@ -1722,12 +1726,9 @@ void Fog2_InitAll(void) Fog2_Main(); } -void sub_807FC9C(void); -void CreateFog2Sprites(void); - void Fog2_Main(void) { - sub_807FC9C(); + UpdateFog2Movement(); switch (gWeatherPtr->initStep) { case 0: @@ -1747,11 +1748,9 @@ void Fog2_Main(void) } } -void DestroyFog2Sprites(void); - bool8 Fog2_Finish(void) { - sub_807FC9C(); + UpdateFog2Movement(); switch (gWeatherPtr->finishStep) { case 0: @@ -1773,57 +1772,32 @@ bool8 Fog2_Finish(void) return TRUE; } -void sub_807FC9C(void) +static void UpdateFog2Movement(void) { - if (++gWeatherPtr->unknown_71C > 2) + if (++gWeatherPtr->fog2ScrollXCounter > 2) { - gWeatherPtr->unknown_720++; - gWeatherPtr->unknown_71C = 0; + gWeatherPtr->fog2XOffset++; + gWeatherPtr->fog2ScrollXCounter = 0; } - if (++gWeatherPtr->unknown_71E > 4) + if (++gWeatherPtr->fog2ScrollYCounter > 4) { - gWeatherPtr->unknown_722++; - gWeatherPtr->unknown_71E = 0; + gWeatherPtr->fog2YOffset++; + gWeatherPtr->fog2ScrollYCounter = 0; } - gWeatherPtr->unknown_718 = (gSpriteCoordOffsetX - gWeatherPtr->unknown_720) & 0xFF; - gWeatherPtr->unknown_71A = gSpriteCoordOffsetY + gWeatherPtr->unknown_722; + gWeatherPtr->fog2BaseSpritesX = (gSpriteCoordOffsetX - gWeatherPtr->fog2XOffset) & 0xFF; + gWeatherPtr->fog2PosY = gSpriteCoordOffsetY + gWeatherPtr->fog2YOffset; } -extern const struct SpriteTemplate sFog2SpriteTemplate; // defined below - -void CreateFog2Sprites(void) +static const struct SpriteSheet gFog2SpriteSheet = { - u16 i; - - if (!gWeatherPtr->fog2SpritesCreated) - { - struct SpriteSheet fog2SpriteSheet = {gWeatherFog2Tiles, sizeof(gWeatherFog2Tiles), 0x1203}; - - LoadSpriteSheet(&fog2SpriteSheet); - for (i = 0; i < 20; i++) - { - u8 spriteId = CreateSpriteAtEnd(&sFog2SpriteTemplate, 0, (i / 5) * 64, 0xFF); - - if (spriteId != MAX_SPRITES) - { - struct Sprite *sprite = &gSprites[spriteId]; - - sprite->data[0] = i % 5; - sprite->data[1] = i / 5; - gWeatherPtr->sprites.s2.fog2Sprites[i] = sprite; - } - else - { - gWeatherPtr->sprites.s2.fog2Sprites[i] = NULL; - } - } - gWeatherPtr->fog2SpritesCreated = TRUE; - } -} + .data = gWeatherFog2Tiles, + .size = sizeof(gWeatherFog2Tiles), + .tag = 0x1203, +}; -const struct OamData gOamData_839ABF0 = +static const struct OamData sFog2SpriteOamData = { .y = 0, .affineMode = 0, @@ -1840,103 +1814,146 @@ const struct OamData gOamData_839ABF0 = .affineParam = 0, }; -const union AnimCmd gSpriteAnim_839ABF8[] = +static const union AnimCmd sFog2SpriteAnimCmd0[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_END, }; -const union AnimCmd *const gSpriteAnimTable_839AC00[] = +static const union AnimCmd *const sFog2SpriteAnimCmds[] = { - gSpriteAnim_839ABF8, + sFog2SpriteAnimCmd0, }; -void Fog2SpriteCallback(struct Sprite *); -const struct SpriteTemplate sFog2SpriteTemplate = +static const struct SpriteTemplate sFog2SpriteTemplate = { - .tileTag = 4611, + .tileTag = 0x1203, .paletteTag = 0x1200, - .oam = &gOamData_839ABF0, - .anims = gSpriteAnimTable_839AC00, + .oam = &sFog2SpriteOamData, + .anims = sFog2SpriteAnimCmds, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = Fog2SpriteCallback, + .callback = UpdateFog2Sprite, }; -void DestroyFog2Sprites(void) +#define tSpriteColumn data[0] +#define tSpriteRow data[1] + +static void CreateFog2Sprites(void) +{ + u16 i; + struct SpriteSheet fog2SpriteSheet; + u8 spriteId; + struct Sprite *sprite; + + if (!gWeatherPtr->fog2SpritesCreated) + { + fog2SpriteSheet = gFog2SpriteSheet; + LoadSpriteSheet(&fog2SpriteSheet); + for (i = 0; i < NUM_FOG2_SPRITES; i++) + { + spriteId = CreateSpriteAtEnd(&sFog2SpriteTemplate, 0, (i / 5) * 64, 0xFF); + if (spriteId != MAX_SPRITES) + { + sprite = &gSprites[spriteId]; + sprite->tSpriteColumn = i % 5; + sprite->tSpriteRow = i / 5; + gWeatherPtr->sprites.s2.fog2Sprites[i] = sprite; + } + else + { + gWeatherPtr->sprites.s2.fog2Sprites[i] = NULL; + } + } + + gWeatherPtr->fog2SpritesCreated = TRUE; + } +} + +static void DestroyFog2Sprites(void) { u16 i; if (gWeatherPtr->fog2SpritesCreated) { - for (i = 0; i < 20; i++) + for (i = 0; i < NUM_FOG2_SPRITES; i++) { - if (gWeatherPtr->sprites.s2.fog2Sprites[i] != NULL) + if (gWeatherPtr->sprites.s2.fog2Sprites[i]) DestroySprite(gWeatherPtr->sprites.s2.fog2Sprites[i]); } + FreeSpriteTilesByTag(0x1203); gWeatherPtr->fog2SpritesCreated = FALSE; } } -void Fog2SpriteCallback(struct Sprite *sprite) +static void UpdateFog2Sprite(struct Sprite *sprite) { - sprite->pos2.y = gWeatherPtr->unknown_71A; - sprite->pos1.x = gWeatherPtr->unknown_718 + 32 + sprite->data[0] * 64; + sprite->pos2.y = gWeatherPtr->fog2PosY; + sprite->pos1.x = gWeatherPtr->fog2BaseSpritesX + 32 + sprite->tSpriteColumn * 64; if (sprite->pos1.x > 271) { - sprite->pos1.x = gWeatherPtr->unknown_718 + 0x1E0 - (4 - sprite->data[0]) * 64; + sprite->pos1.x = gWeatherPtr->fog2BaseSpritesX + 480 - (4 - sprite->tSpriteColumn) * 64; sprite->pos1.x &= 0x1FF; } } +#undef tSpriteColumn +#undef tSpriteRow + //------------------------------------------------------------------------------ // Sandstorm //------------------------------------------------------------------------------ +static void UpdateSandstormWaveIndex(void); +static void UpdateSandstormMovement(void); +static void CreateSandstormSprites(void); +static void CreateSwirlSandstormSprites(void); +static void DestroySandstormSprites(void); +static void UpdateSandstormSprite(struct Sprite *); +static void WaitSandSwirlSpriteEntrance(struct Sprite *); +static void UpdateSandstormSwirlSprite(struct Sprite *); + +#define MIN_SANDSTORM_WAVE_INDEX 0x20 + void Sandstorm_InitVars(void) { gWeatherPtr->initStep = 0; gWeatherPtr->weatherGfxLoaded = 0; gWeatherPtr->gammaTargetIndex = 0; gWeatherPtr->gammaStepDelay = 20; - if (gWeatherPtr->sandstormSprites1Created == 0) + if (!gWeatherPtr->sandstormSpritesCreated) { - gWeatherPtr->unknown_704 = gWeatherPtr->unknown_708 = 0; - gWeatherPtr->unknown_712 = 8; - gWeatherPtr->unknown_714 = 0; + gWeatherPtr->sandstormXOffset = gWeatherPtr->sandstormYOffset = 0; + gWeatherPtr->sandstormWaveIndex = 8; + gWeatherPtr->sandstormWaveCounter = 0; // Dead code. How does the compiler not optimize this out? - if (gWeatherPtr->unknown_712 > 0x5F) - gWeatherPtr->unknown_712 = 0x80 - gWeatherPtr->unknown_712; + if (gWeatherPtr->sandstormWaveIndex >= 0x80 - MIN_SANDSTORM_WAVE_INDEX) + gWeatherPtr->sandstormWaveIndex = 0x80 - gWeatherPtr->sandstormWaveIndex; + Weather_SetBlendCoeffs(0, 16); } } -void Sandstorm_Main(void); - void Sandstorm_InitAll(void) { Sandstorm_InitVars(); - while (gWeatherPtr->weatherGfxLoaded == FALSE) + while (!gWeatherPtr->weatherGfxLoaded) Sandstorm_Main(); } -void sub_808002C(void); -void sub_8080064(void); -void CreateSandstormSprites_1(void); -void CreateSandstormSprites_2(void); - void Sandstorm_Main(void) { - sub_8080064(); - sub_808002C(); - if (gWeatherPtr->unknown_712 > 0x5F) - gWeatherPtr->unknown_712 = 32; + UpdateSandstormMovement(); + UpdateSandstormWaveIndex(); + if (gWeatherPtr->sandstormWaveIndex >= 0x80 - MIN_SANDSTORM_WAVE_INDEX) + gWeatherPtr->sandstormWaveIndex = MIN_SANDSTORM_WAVE_INDEX; + switch (gWeatherPtr->initStep) { case 0: - CreateSandstormSprites_1(); - CreateSandstormSprites_2(); + CreateSandstormSprites(); + CreateSwirlSandstormSprites(); gWeatherPtr->initStep++; break; case 1: @@ -1944,20 +1961,19 @@ void Sandstorm_Main(void) gWeatherPtr->initStep++; break; case 2: - if (!Weather_UpdateBlend()) - break; - gWeatherPtr->weatherGfxLoaded = TRUE; - gWeatherPtr->initStep++; + if (Weather_UpdateBlend()) + { + gWeatherPtr->weatherGfxLoaded = TRUE; + gWeatherPtr->initStep++; + } break; } } -void sub_80800E4(void); - bool8 Sandstorm_Finish(void) { - sub_8080064(); - sub_808002C(); + UpdateSandstormMovement(); + UpdateSandstormWaveIndex(); switch (gWeatherPtr->finishStep) { case 0: @@ -1965,64 +1981,66 @@ bool8 Sandstorm_Finish(void) gWeatherPtr->finishStep++; break; case 1: - if (!Weather_UpdateBlend()) - break; - gWeatherPtr->finishStep++; + if (Weather_UpdateBlend()) + gWeatherPtr->finishStep++; break; case 2: - sub_80800E4(); + DestroySandstormSprites(); gWeatherPtr->finishStep++; break; default: return FALSE; } + return TRUE; } -void sub_808002C(void) +static void UpdateSandstormWaveIndex(void) { - if (gWeatherPtr->unknown_714++ > 4) + if (gWeatherPtr->sandstormWaveCounter++ > 4) { - gWeatherPtr->unknown_712++; - gWeatherPtr->unknown_714 = 0; + gWeatherPtr->sandstormWaveIndex++; + gWeatherPtr->sandstormWaveCounter = 0; } } -void sub_8080064(void) +static void UpdateSandstormMovement(void) { - gWeatherPtr->unknown_704 -= gSineTable[gWeatherPtr->unknown_712] * 4; - gWeatherPtr->unknown_708 -= gSineTable[gWeatherPtr->unknown_712]; - gWeatherPtr->unknown_70E = (gSpriteCoordOffsetX + (gWeatherPtr->unknown_704 >> 8)) & 0xFF; - gWeatherPtr->unknown_710 = gSpriteCoordOffsetY + (gWeatherPtr->unknown_708 >> 8); + gWeatherPtr->sandstormXOffset -= gSineTable[gWeatherPtr->sandstormWaveIndex] * 4; + gWeatherPtr->sandstormYOffset -= gSineTable[gWeatherPtr->sandstormWaveIndex]; + gWeatherPtr->sandstormBaseSpritesX = (gSpriteCoordOffsetX + (gWeatherPtr->sandstormXOffset >> 8)) & 0xFF; + gWeatherPtr->sandstormPosY = gSpriteCoordOffsetY + (gWeatherPtr->sandstormYOffset >> 8); } -void sub_80800E4(void) +static void DestroySandstormSprites(void) { u16 i; - if (gWeatherPtr->sandstormSprites1Created) + if (gWeatherPtr->sandstormSpritesCreated) { - for (i = 0; i < 20; i++) + for (i = 0; i < NUM_SANDSTORM_SPRITES; i++) { - if (gWeatherPtr->sprites.s2.sandstormSprites1[i] != NULL) + if (gWeatherPtr->sprites.s2.sandstormSprites1[i]) DestroySprite(gWeatherPtr->sprites.s2.sandstormSprites1[i]); } - gWeatherPtr->sandstormSprites1Created = FALSE; + + gWeatherPtr->sandstormSpritesCreated = FALSE; FreeSpriteTilesByTag(0x1204); } - if (gWeatherPtr->sandstormSprites2Created) + if (gWeatherPtr->sandstormSwirlSpritesCreated) { - for (i = 0; i < 5; i++) + for (i = 0; i < NUM_SWIRL_SANDSTORM_SPRITES; i++) { if (gWeatherPtr->sprites.s2.sandstormSprites2[i] != NULL) DestroySprite(gWeatherPtr->sprites.s2.sandstormSprites2[i]); } - gWeatherPtr->sandstormSprites2Created = FALSE; + + gWeatherPtr->sandstormSwirlSpritesCreated = FALSE; } } -const struct OamData gOamData_839AC1C = +static const struct OamData sSandstormSpriteOamData = { .y = 0, .affineMode = 0, @@ -2039,142 +2057,162 @@ const struct OamData gOamData_839AC1C = .affineParam = 0, }; -const union AnimCmd gSpriteAnim_839AC24[] = +static const union AnimCmd sSandstormSpriteAnimCmd0[] = { ANIMCMD_FRAME(0, 3), ANIMCMD_END, }; -const union AnimCmd gSpriteAnim_839AC2C[] = +static const union AnimCmd sSandstormSpriteAnimCmd1[] = { ANIMCMD_FRAME(64, 3), ANIMCMD_END, }; -const union AnimCmd *const gSpriteAnimTable_839AC34[] = +static const union AnimCmd *const sSandstormSpriteAnimCmds[] = { - gSpriteAnim_839AC24, - gSpriteAnim_839AC2C, + sSandstormSpriteAnimCmd0, + sSandstormSpriteAnimCmd1, }; -void SandstormSpriteCallback1(struct Sprite *); -const struct SpriteTemplate sSandstormSpriteTemplate = +static const struct SpriteTemplate sSandstormSpriteTemplate = { .tileTag = 0x1204, .paletteTag = 0x1201, - .oam = &gOamData_839AC1C, - .anims = gSpriteAnimTable_839AC34, + .oam = &sSandstormSpriteOamData, + .anims = sSandstormSpriteAnimCmds, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = SandstormSpriteCallback1, + .callback = UpdateSandstormSprite, }; -static const struct SpriteSheet sSandstormSpriteSheet = {gWeatherSandstormTiles, sizeof(gWeatherSandstormTiles), 0x1204}; +static const struct SpriteSheet sSandstormSpriteSheet = +{ + .data = gWeatherSandstormTiles, + .size = sizeof(gWeatherSandstormTiles), + .tag = 0x1204, +}; + +// Regular sandstorm sprites +#define tSpriteColumn data[0] +#define tSpriteRow data[1] + +// Swirly sandstorm sprites +#define tRadius data[0] +#define tWaveIndex data[1] +#define tRadiusCounter data[2] +#define tEntranceDelay data[3] -void CreateSandstormSprites_1(void) +static void CreateSandstormSprites(void) { u16 i; + u8 spriteId; - if (!gWeatherPtr->sandstormSprites1Created) + if (!gWeatherPtr->sandstormSpritesCreated) { LoadSpriteSheet(&sSandstormSpriteSheet); - LoadCustomWeatherSpritePalette(gUnknown_0854C2B0); - for (i = 0; i < 20; i++) + LoadCustomWeatherSpritePalette(gSandstormWeatherPalette); + for (i = 0; i < NUM_SANDSTORM_SPRITES; i++) { - u8 spriteId = CreateSpriteAtEnd(&sSandstormSpriteTemplate, 0, (i / 5) * 64, 1); - + spriteId = CreateSpriteAtEnd(&sSandstormSpriteTemplate, 0, (i / 5) * 64, 1); if (spriteId != MAX_SPRITES) { gWeatherPtr->sprites.s2.sandstormSprites1[i] = &gSprites[spriteId]; - gWeatherPtr->sprites.s2.sandstormSprites1[i]->data[0] = i % 5; - gWeatherPtr->sprites.s2.sandstormSprites1[i]->data[1] = i / 5; + gWeatherPtr->sprites.s2.sandstormSprites1[i]->tSpriteColumn = i % 5; + gWeatherPtr->sprites.s2.sandstormSprites1[i]->tSpriteRow = i / 5; } else { gWeatherPtr->sprites.s2.sandstormSprites1[i] = NULL; } } - gWeatherPtr->sandstormSprites1Created = TRUE; + + gWeatherPtr->sandstormSpritesCreated = TRUE; } } -const u16 gUnknown_0839AC5C[] = {0, 120, 80, 160, 40, 0}; +static const u16 sSwirlEntranceDelays[] = {0, 120, 80, 160, 40, 0}; -void SandstormSpriteCallback2(struct Sprite *); - -void CreateSandstormSprites_2(void) +static void CreateSwirlSandstormSprites(void) { u16 i; + u8 spriteId; - if (!gWeatherPtr->sandstormSprites2Created) + if (!gWeatherPtr->sandstormSwirlSpritesCreated) { - for (i = 0; i < 5; i++) + for (i = 0; i < NUM_SWIRL_SANDSTORM_SPRITES; i++) { - u8 spriteId = CreateSpriteAtEnd(&sSandstormSpriteTemplate, i * 48 + 24, 208, 1); - + spriteId = CreateSpriteAtEnd(&sSandstormSpriteTemplate, i * 48 + 24, 208, 1); if (spriteId != MAX_SPRITES) { gWeatherPtr->sprites.s2.sandstormSprites2[i] = &gSprites[spriteId]; gWeatherPtr->sprites.s2.sandstormSprites2[i]->oam.size = 2; - gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[1] = i * 51; - gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[0] = 8; - gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[2] = 0; - gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[4] = 0x6730; - gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[3] = gUnknown_0839AC5C[i]; + gWeatherPtr->sprites.s2.sandstormSprites2[i]->tSpriteRow = i * 51; + gWeatherPtr->sprites.s2.sandstormSprites2[i]->tRadius = 8; + gWeatherPtr->sprites.s2.sandstormSprites2[i]->tRadiusCounter = 0; + gWeatherPtr->sprites.s2.sandstormSprites2[i]->data[4] = 0x6730; // unused value + gWeatherPtr->sprites.s2.sandstormSprites2[i]->tEntranceDelay = sSwirlEntranceDelays[i]; StartSpriteAnim(gWeatherPtr->sprites.s2.sandstormSprites2[i], 1); CalcCenterToCornerVec(gWeatherPtr->sprites.s2.sandstormSprites2[i], 0, 2, 0); - gWeatherPtr->sprites.s2.sandstormSprites2[i]->callback = SandstormSpriteCallback2; + gWeatherPtr->sprites.s2.sandstormSprites2[i]->callback = WaitSandSwirlSpriteEntrance; } else { gWeatherPtr->sprites.s2.sandstormSprites2[i] = NULL; } - gWeatherPtr->sandstormSprites2Created = TRUE; + + gWeatherPtr->sandstormSwirlSpritesCreated = TRUE; } } } -void SandstormSpriteCallback1(struct Sprite *sprite) +static void UpdateSandstormSprite(struct Sprite *sprite) { - sprite->pos2.y = gWeatherPtr->unknown_710; - sprite->pos1.x = gWeatherPtr->unknown_70E + 32 + sprite->data[0] * 64; + sprite->pos2.y = gWeatherPtr->sandstormPosY; + sprite->pos1.x = gWeatherPtr->sandstormBaseSpritesX + 32 + sprite->tSpriteColumn * 64; if (sprite->pos1.x > 271) { - sprite->pos1.x = gWeatherPtr->unknown_70E + 0x1E0 - (4 - sprite->data[0]) * 64; + sprite->pos1.x = gWeatherPtr->sandstormBaseSpritesX + 480 - (4 - sprite->tSpriteColumn) * 64; sprite->pos1.x &= 0x1FF; } } -void SandstormSpriteCallback3(struct Sprite *); - -void SandstormSpriteCallback2(struct Sprite *sprite) +static void WaitSandSwirlSpriteEntrance(struct Sprite *sprite) { - if (--sprite->data[3] == -1) - sprite->callback = SandstormSpriteCallback3; + if (--sprite->tEntranceDelay == -1) + sprite->callback = UpdateSandstormSwirlSprite; } -void SandstormSpriteCallback3(struct Sprite *sprite) +static void UpdateSandstormSwirlSprite(struct Sprite *sprite) { - u32 x; - u32 y; + u32 x, y; if (--sprite->pos1.y < -48) { sprite->pos1.y = 208; - sprite->data[0] = 4; + sprite->tRadius = 4; } - x = sprite->data[0] * gSineTable[sprite->data[1]]; - y = sprite->data[0] * gSineTable[sprite->data[1] + 64]; + + x = sprite->tRadius * gSineTable[sprite->tWaveIndex]; + y = sprite->tRadius * gSineTable[sprite->tWaveIndex + 0x40]; sprite->pos2.x = x >> 8; sprite->pos2.y = y >> 8; - sprite->data[1] = (sprite->data[1] + 10) & 0xFF; - if (++sprite->data[2] > 8) + sprite->tWaveIndex = (sprite->tWaveIndex + 10) & 0xFF; + if (++sprite->tRadiusCounter > 8) { - sprite->data[2] = 0; - sprite->data[0]++; + sprite->tRadiusCounter = 0; + sprite->tRadius++; } } +#undef tSpriteColumn +#undef tSpriteRow + +#undef tRadius +#undef tWaveIndex +#undef tRadiusCounter +#undef tEntranceDelay + //------------------------------------------------------------------------------ // Shade //------------------------------------------------------------------------------ @@ -2204,162 +2242,169 @@ bool8 Shade_Finish(void) // Bubbles //------------------------------------------------------------------------------ -const u8 gUnknown_0839AC68[] = {40, 90, 60, 90, 2, 60, 40, 30}; +static void CreateBubbleSprite(u16); +static void DestroyBubbleSprites(void); +static void UpdateBubbleSprite(struct Sprite *); + +static const u8 sBubbleStartDelays[] = {40, 90, 60, 90, 2, 60, 40, 30}; -const struct SpriteSheet gWeatherBubbleSpriteSheet = {gWeatherBubbleTiles, sizeof(gWeatherBubbleTiles), 0x1205}; +static const struct SpriteSheet sWeatherBubbleSpriteSheet = +{ + .data = gWeatherBubbleTiles, + .size = sizeof(gWeatherBubbleTiles), + .tag = 0x1205, +}; + +static const s16 sBubbleStartCoords[][2] = +{ + {120, 160}, + {376, 160}, + { 40, 140}, + {296, 140}, + {180, 130}, + {436, 130}, + { 60, 160}, + {436, 160}, + {220, 180}, + {476, 180}, + { 10, 90}, + {266, 90}, + {256, 160}, +}; void Bubbles_InitVars(void) { Fog1_InitVars(); - if (gWeatherPtr->unknown_72E == 0) + if (!gWeatherPtr->bubblesSpritesCreated) { - LoadSpriteSheet(&gWeatherBubbleSpriteSheet); - gWeatherPtr->unknown_728 = 0; - gWeatherPtr->unknown_726 = gUnknown_0839AC68[0]; - gWeatherPtr->unknown_72A = 0; - gWeatherPtr->unknown_72C = 0; + LoadSpriteSheet(&sWeatherBubbleSpriteSheet); + gWeatherPtr->bubblesDelayIndex = 0; + gWeatherPtr->bubblesDelayCounter = sBubbleStartDelays[0]; + gWeatherPtr->bubblesCoordsIndex = 0; + gWeatherPtr->bubblesSpriteCount = 0; } } -void Bubbles_Main(void); - void Bubbles_InitAll(void) { Bubbles_InitVars(); - while (gWeatherPtr->weatherGfxLoaded == FALSE) + while (!gWeatherPtr->weatherGfxLoaded) Bubbles_Main(); } -void sub_8080588(u16); - void Bubbles_Main(void) { Fog1_Main(); - if (++gWeatherPtr->unknown_726 > gUnknown_0839AC68[gWeatherPtr->unknown_728]) + if (++gWeatherPtr->bubblesDelayCounter > sBubbleStartDelays[gWeatherPtr->bubblesDelayIndex]) { - gWeatherPtr->unknown_726 = 0; - if (++gWeatherPtr->unknown_728 > 7) - gWeatherPtr->unknown_728 = 0; - sub_8080588(gWeatherPtr->unknown_72A); - if (++gWeatherPtr->unknown_72A > 12) - gWeatherPtr->unknown_72A = 0; + gWeatherPtr->bubblesDelayCounter = 0; + if (++gWeatherPtr->bubblesDelayIndex > ARRAY_COUNT(sBubbleStartDelays) - 1) + gWeatherPtr->bubblesDelayIndex = 0; + + CreateBubbleSprite(gWeatherPtr->bubblesCoordsIndex); + if (++gWeatherPtr->bubblesCoordsIndex > ARRAY_COUNT(sBubbleStartCoords) - 1) + gWeatherPtr->bubblesCoordsIndex = 0; } } -void sub_8080610(void); - bool8 Bubbles_Finish(void) { if (!Fog1_Finish()) { - sub_8080610(); + DestroyBubbleSprites(); return FALSE; } + return TRUE; } -const s16 gUnknown_0839AC78[][2] = -{ - {120, 160}, - {376, 160}, - { 40, 140}, - {296, 140}, - {180, 130}, - {436, 130}, - { 60, 160}, - {436, 160}, - {220, 180}, - {476, 180}, - { 10, 90}, - {266, 90}, - {256, 160}, -}; - -const union AnimCmd gSpriteAnim_839ACAC[] = +static const union AnimCmd sBubbleSpriteAnimCmd0[] = { ANIMCMD_FRAME(0, 16), ANIMCMD_FRAME(1, 16), ANIMCMD_END, }; -const union AnimCmd *const gSpriteAnimTable_839ACB8[] = +static const union AnimCmd *const sBubbleSpriteAnimCmds[] = { - gSpriteAnim_839ACAC, + sBubbleSpriteAnimCmd0, }; -extern const struct OamData gUnknown_08524904; - -void unc_0807DAB4(struct Sprite *); -const struct SpriteTemplate gSpriteTemplate_839ACBC = +static const struct SpriteTemplate sBubbleSpriteTemplate = { - .tileTag = 4613, + .tileTag = 0x1205, .paletteTag = 0x1200, .oam = &gUnknown_08524904, - .anims = gSpriteAnimTable_839ACB8, + .anims = sBubbleSpriteAnimCmds, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = unc_0807DAB4, + .callback = UpdateBubbleSprite, }; -void sub_8080588(u16 a) -{ - s16 x = gUnknown_0839AC78[a][0]; - s16 y = gUnknown_0839AC78[a][1] - gSpriteCoordOffsetY; - u8 spriteId = CreateSpriteAtEnd( - &gSpriteTemplate_839ACBC, - x, - y, - 0); +#define tScrollXCounter data[0] +#define tScrollXDir data[1] +#define tCounter data[2] +static void CreateBubbleSprite(u16 coordsIndex) +{ + s16 x = sBubbleStartCoords[coordsIndex][0]; + s16 y = sBubbleStartCoords[coordsIndex][1] - gSpriteCoordOffsetY; + u8 spriteId = CreateSpriteAtEnd(&sBubbleSpriteTemplate, x, y, 0); if (spriteId != MAX_SPRITES) { gSprites[spriteId].oam.priority = 1; gSprites[spriteId].coordOffsetEnabled = TRUE; - gSprites[spriteId].data[0] = 0; - gSprites[spriteId].data[1] = 0; - gSprites[spriteId].data[2] = 0; - gWeatherPtr->unknown_72C++; + gSprites[spriteId].tScrollXCounter = 0; + gSprites[spriteId].tScrollXDir = 0; + gSprites[spriteId].tCounter = 0; + gWeatherPtr->bubblesSpriteCount++; } } -void sub_8080610(void) +static void DestroyBubbleSprites(void) { u16 i; - if (gWeatherPtr->unknown_72C != 0) + if (gWeatherPtr->bubblesSpriteCount) { - for (i = 0; i < 64; i++) + for (i = 0; i < MAX_SPRITES; i++) { - if (gSprites[i].template == &gSpriteTemplate_839ACBC) + if (gSprites[i].template == &sBubbleSpriteTemplate) DestroySprite(&gSprites[i]); } + FreeSpriteTilesByTag(0x1205); - gWeatherPtr->unknown_72C = 0; + gWeatherPtr->bubblesSpriteCount = 0; } } -void unc_0807DAB4(struct Sprite *sprite) +static void UpdateBubbleSprite(struct Sprite *sprite) { - ++sprite->data[0]; - if (++sprite->data[0] > 8) // double increment + ++sprite->tScrollXCounter; + if (++sprite->tScrollXCounter > 8) // double increment { - sprite->data[0] = 0; - if (sprite->data[1] == 0) + sprite->tScrollXCounter = 0; + if (sprite->tScrollXDir == 0) { if (++sprite->pos2.x > 4) - sprite->data[1] = 1; + sprite->tScrollXDir = 1; } else { if (--sprite->pos2.x <= 0) - sprite->data[1] = 0; + sprite->tScrollXDir = 0; } } + sprite->pos1.y -= 3; - if (++sprite->data[2] > 0x77) + if (++sprite->tCounter >= 120) DestroySprite(sprite); } +#undef tScrollXCounter +#undef tScrollXDir +#undef tCounter + //------------------------------------------------------------------------------ // Unused function. -- cgit v1.2.3 From 02651f6177032baad32efdddeee54a9af624812b Mon Sep 17 00:00:00 2001 From: ultima-soul Date: Tue, 2 Apr 2019 19:18:36 -0700 Subject: Attempt to decompile menu_specialized. 2 NONMATCHING --- src/menu_specialized.c | 437 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 436 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/menu_specialized.c b/src/menu_specialized.c index f21f4e51a..c8c46fbc1 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -28,6 +28,7 @@ #include "gba/io_reg.h" extern const struct CompressedSpriteSheet gMonFrontPicTable[]; +extern const u8 *gUnknown_08625B54[]; EWRAM_DATA static u8 sUnknown_0203CF48[3] = {0}; EWRAM_DATA static struct ListMenuItem *sUnknown_0203CF4C = NULL; @@ -259,7 +260,7 @@ static void sub_81D1D44(u8 windowId, s32 itemId, u8 y) u8 buffer[30]; u16 length; - if (itemId == LIST_CANCEL) + if (itemId == LIST_CANCEL) return; StringCopy(buffer, gSaveBlock1Ptr->mail[6 + itemId].playerName); @@ -1639,3 +1640,437 @@ static void sub_81D35E8(struct Sprite *sprite) id = gSprites[id].data[5]; } } + + +#ifdef NONMATCHING +void DrawLevelUpWindowPg1(u8 arg0, u16 *statStoreLocation1, u16 *statStoreLocation2, u8 arg3, u8 arg4, u8 arg5) +{ + s32 i; + s16 array[6]; + u8 *text; + u8 *text2; + s16 *ptr; + u8 something[14]; + s32 var; + u8 var2; + s32 var3; + + + + + + FillWindowPixelBuffer(arg0, arg3 * 16 | arg3); + + + array[0] = statStoreLocation2[0] - statStoreLocation1[0]; + array[1] = statStoreLocation2[1] - statStoreLocation1[1]; + array[2] = statStoreLocation2[2] - statStoreLocation1[2]; + array[3] = statStoreLocation2[4] - statStoreLocation1[4]; + array[4] = statStoreLocation2[5] - statStoreLocation1[5]; + array[5] = statStoreLocation2[3] - statStoreLocation1[3]; + + + for(i = 0; i < 6; i++) + { + AddTextPrinterParameterized3(arg0, 1, 0, 15 * i, &arg3, TEXT_SPEED_FF, gUnknown_08625B54[i]); + ptr = &array[i]; + text = (u8 *) gText_Dash; + + if(*ptr >= 0) + { + text = (u8 *) gText_UnkCtrlF904; + } + + StringCopy(text2, text); + AddTextPrinterParameterized3(arg0, 1, 56, 15 * i, &arg3, TEXT_SPEED_FF, text2); + var3 = *ptr; + var = var3; + + if(var3 < 0) + { + var = -var3; + } + + var2 = 12; + + if(var <= 9) + { + var2 = 18; + } + + if(var3 < 0) + { + var3 = -var3; + } + + ConvertIntToDecimalStringN(text2, var3, 0, 2); + AddTextPrinterParameterized3(arg0, 1, var2 + 56, 15 * i, &arg3, TEXT_SPEED_FF, text2); + } +} +#else +NAKED +void DrawLevelUpWindowPg1(u16 arg0, u16 *statStoreLocation1, u16 *statStoreLocation2, u8 arg3, u8 arg4, u8 arg5) +{ + asm(".syntax 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, 0x2C\n\ + mov r8, r0\n\ + adds r6, r1, 0\n\ + adds r5, r2, 0\n\ + adds r4, r3, 0\n\ + ldr r3, [sp, 0x4C]\n\ + ldr r0, [sp, 0x50]\n\ + mov r9, r0\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + lsls r3, 24\n\ + lsrs r3, 24\n\ + mov r1, r9\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + mov r9, r1\n\ + mov r0, r8\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + lsls r1, r4, 4\n\ + orrs r1, r4\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + str r3, [sp, 0x28]\n\ + bl FillWindowPixelBuffer\n\ + add r2, sp, 0xC\n\ + ldrh r0, [r5]\n\ + ldrh r1, [r6]\n\ + subs r0, r1\n\ + strh r0, [r2]\n\ + ldrh r0, [r5, 0x2]\n\ + ldrh r1, [r6, 0x2]\n\ + subs r0, r1\n\ + strh r0, [r2, 0x2]\n\ + ldrh r0, [r5, 0x4]\n\ + ldrh r1, [r6, 0x4]\n\ + subs r0, r1\n\ + strh r0, [r2, 0x4]\n\ + ldrh r0, [r5, 0x8]\n\ + ldrh r1, [r6, 0x8]\n\ + subs r0, r1\n\ + strh r0, [r2, 0x6]\n\ + ldrh r0, [r5, 0xA]\n\ + ldrh r1, [r6, 0xA]\n\ + subs r0, r1\n\ + strh r0, [r2, 0x8]\n\ + ldrh r0, [r5, 0x6]\n\ + ldrh r1, [r6, 0x6]\n\ + subs r0, r1\n\ + strh r0, [r2, 0xA]\n\ + add r0, sp, 0x24\n\ + strb r4, [r0]\n\ + ldr r3, [sp, 0x28]\n\ + strb r3, [r0, 0x1]\n\ + mov r1, r9\n\ + strb r1, [r0, 0x2]\n\ + movs r7, 0\n\ + mov r10, r0\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + mov r9, r0\n\ + add r6, sp, 0x18\n\ +_081D36CA:\n\ + lsls r0, r7, 4\n\ + subs r0, r7\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + mov r1, r10\n\ + str r1, [sp]\n\ + mov r0, r9\n\ + str r0, [sp, 0x4]\n\ + ldr r1, =gUnknown_08625B54\n\ + lsls r0, r7, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + str r0, [sp, 0x8]\n\ + mov r0, r8\n\ + movs r1, 0x1\n\ + movs r2, 0\n\ + adds r3, r5, 0\n\ + bl AddTextPrinterParameterized3\n\ + lsls r0, r7, 1\n\ + mov r4, sp\n\ + adds r4, r0\n\ + adds r4, 0xC\n\ + movs r1, 0\n\ + ldrsh r0, [r4, r1]\n\ + ldr r1, =gText_Dash\n\ + cmp r0, 0\n\ + blt _081D3704\n\ + ldr r1, =gText_UnkCtrlF904\n\ +_081D3704:\n\ + adds r0, r6, 0\n\ + bl StringCopy\n\ + mov r0, r10\n\ + str r0, [sp]\n\ + mov r1, r9\n\ + str r1, [sp, 0x4]\n\ + str r6, [sp, 0x8]\n\ + mov r0, r8\n\ + movs r1, 0x1\n\ + movs r2, 0x38\n\ + adds r3, r5, 0\n\ + bl AddTextPrinterParameterized3\n\ + movs r0, 0\n\ + ldrsh r1, [r4, r0]\n\ + adds r0, r1, 0\n\ + cmp r1, 0\n\ + bge _081D372C\n\ + negs r0, r1\n\ +_081D372C:\n\ + movs r4, 0xC\n\ + cmp r0, 0x9\n\ + bgt _081D3734\n\ + movs r4, 0x12\n\ +_081D3734:\n\ + cmp r1, 0\n\ + bge _081D373A\n\ + negs r1, r1\n\ +_081D373A:\n\ + adds r0, r6, 0\n\ + movs r2, 0\n\ + movs r3, 0x2\n\ + bl ConvertIntToDecimalStringN\n\ + adds r2, r4, 0\n\ + adds r2, 0x38\n\ + mov r1, r10\n\ + str r1, [sp]\n\ + mov r0, r9\n\ + str r0, [sp, 0x4]\n\ + str r6, [sp, 0x8]\n\ + mov r0, r8\n\ + movs r1, 0x1\n\ + adds r3, r5, 0\n\ + bl AddTextPrinterParameterized3\n\ + adds r0, r7, 0x1\n\ + lsls r0, 16\n\ + lsrs r7, r0, 16\n\ + cmp r7, 0x5\n\ + bls _081D36CA\n\ + add sp, 0x2C\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n\ + .syntax divided"); +} +#endif // NONMATCHING + +#ifdef NONMATCHING +void DrawLevelUpWindowPg2(u16 arg0, u16* statStoreLocation1, u8 arg2, u8 arg3, u8 arg4) +{ + s32 i; + s32 var; + s32 var2; + u8 text; + s16 array[6]; + u8 *something; + u8 some; + FillWindowPixelBuffer(arg0, arg2 * 16 | arg2); + array[0] = statStoreLocation1[0]; + array[1] = statStoreLocation1[1]; + array[2] = statStoreLocation1[2]; + array[3] = statStoreLocation1[4]; + array[4] = statStoreLocation1[5]; + array[5] = statStoreLocation1[3]; + for(i = 0; i <= 5; i++) + { + var = array[i]; + var2 = 3; + if(var <= 99) + { + var2 = 1; + if(var > 9) + { + var2 = 2; + } + } + something = ConvertIntToDecimalStringN(&text, array[i], 0, var2); + some = (((4 - *something) * 2) + *something) * 2; + AddTextPrinterParameterized3(arg0, 1, 0, 15 * i, &arg2, TEXT_SPEED_FF, gUnknown_08625B54[i]); + AddTextPrinterParameterized3(arg0, 1, some + 56, 15 * i, &arg2, TEXT_SPEED_FF, &text); + } +} +#else +NAKED +void DrawLevelUpWindowPg2(u16 arg0, u16* statStoreLocation1, u8 arg2, u8 arg3, u8 arg4) +{ + asm(".syntax 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, 0x2C\n\ + mov r8, r0\n\ + adds r5, r1, 0\n\ + adds r4, r2, 0\n\ + adds r6, r3, 0\n\ + ldr r2, [sp, 0x4C]\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + lsls r6, 24\n\ + lsrs r6, 24\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + lsls r1, r4, 4\n\ + orrs r1, r4\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + str r2, [sp, 0x28]\n\ + bl FillWindowPixelBuffer\n\ + add r1, sp, 0xC\n\ + ldrh r0, [r5]\n\ + strh r0, [r1]\n\ + ldrh r0, [r5, 0x2]\n\ + strh r0, [r1, 0x2]\n\ + ldrh r0, [r5, 0x4]\n\ + strh r0, [r1, 0x4]\n\ + ldrh r0, [r5, 0x8]\n\ + strh r0, [r1, 0x6]\n\ + ldrh r0, [r5, 0xA]\n\ + strh r0, [r1, 0x8]\n\ + ldrh r0, [r5, 0x6]\n\ + strh r0, [r1, 0xA]\n\ + add r0, sp, 0x24\n\ + strb r4, [r0]\n\ + strb r6, [r0, 0x1]\n\ + ldr r2, [sp, 0x28]\n\ + strb r2, [r0, 0x2]\n\ + movs r6, 0\n\ + add r1, sp, 0x18\n\ + mov r9, r1\n\ + mov r7, r8\n\ + mov r10, r0\n\ + movs r2, 0x1\n\ + negs r2, r2\n\ + mov r8, r2\n\ +_081D37EE:\n\ + lsls r1, r6, 1\n\ + mov r0, sp\n\ + adds r0, r1\n\ + adds r0, 0xC\n\ + movs r2, 0\n\ + ldrsh r0, [r0, r2]\n\ + movs r4, 0x3\n\ + cmp r0, 0x63\n\ + bgt _081D3808\n\ + movs r4, 0x1\n\ + cmp r0, 0x9\n\ + ble _081D3808\n\ + movs r4, 0x2\n\ +_081D3808:\n\ + mov r0, sp\n\ + adds r0, r1\n\ + adds r0, 0xC\n\ + movs r2, 0\n\ + ldrsh r1, [r0, r2]\n\ + mov r0, r9\n\ + movs r2, 0\n\ + adds r3, r4, 0\n\ + bl ConvertIntToDecimalStringN\n\ + movs r0, 0x4\n\ + subs r0, r4\n\ + lsls r4, r0, 1\n\ + adds r4, r0\n\ + lsls r4, 17\n\ + lsrs r4, 16\n\ + lsls r5, r6, 4\n\ + subs r5, r6\n\ + lsls r5, 24\n\ + lsrs r5, 24\n\ + mov r0, r10\n\ + str r0, [sp]\n\ + mov r1, r8\n\ + str r1, [sp, 0x4]\n\ + ldr r1, =gUnknown_08625B54\n\ + lsls r0, r6, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + str r0, [sp, 0x8]\n\ + adds r0, r7, 0\n\ + movs r1, 0x1\n\ + movs r2, 0\n\ + adds r3, r5, 0\n\ + bl AddTextPrinterParameterized3\n\ + adds r4, 0x38\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + mov r2, r10\n\ + str r2, [sp]\n\ + mov r0, r8\n\ + str r0, [sp, 0x4]\n\ + mov r1, r9\n\ + str r1, [sp, 0x8]\n\ + adds r0, r7, 0\n\ + movs r1, 0x1\n\ + adds r2, r4, 0\n\ + adds r3, r5, 0\n\ + bl AddTextPrinterParameterized3\n\ + adds r0, r6, 0x1\n\ + lsls r0, 16\n\ + lsrs r6, r0, 16\n\ + cmp r6, 0x5\n\ + bls _081D37EE\n\ + add sp, 0x2C\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n\ + .syntax divided"); +} +#endif // NONMATCHING + +void GetMonLevelUpWindowStats(struct Pokemon* mon, u16* statStoreLocation) +{ + statStoreLocation[0] = GetMonData(mon, MON_DATA_MAX_HP); + statStoreLocation[1] = GetMonData(mon, MON_DATA_ATK); + statStoreLocation[2] = GetMonData(mon, MON_DATA_DEF); + statStoreLocation[3] = GetMonData(mon, MON_DATA_SPEED); + statStoreLocation[4] = GetMonData(mon, MON_DATA_SPATK); + statStoreLocation[5] = GetMonData(mon, MON_DATA_SPDEF); +} + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3 From 438521bf21e24afc15adf871f154d5d7c361408a Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 3 Apr 2019 22:00:15 +0200 Subject: Get rid of redundant cast --- src/pokemon.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/pokemon.c b/src/pokemon.c index 984c484a2..a75701cb0 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -5463,7 +5463,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem) if (gEvolutionTable[species][i].param == heldItem) { heldItem = 0; - SetMonData(mon, MON_DATA_HELD_ITEM, (u8 *)&heldItem); + SetMonData(mon, MON_DATA_HELD_ITEM, &heldItem); targetSpecies = gEvolutionTable[species][i].targetSpecies; } break; -- cgit v1.2.3 From a455d98385cdeadc65ee3df992fc8d6be36495b3 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 2 Apr 2019 08:43:16 -0400 Subject: start porting mevent_server from firered --- src/mevent_server.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 src/mevent_server.c (limited to 'src') diff --git a/src/mevent_server.c b/src/mevent_server.c new file mode 100644 index 000000000..ea5a18626 --- /dev/null +++ b/src/mevent_server.c @@ -0,0 +1,56 @@ +#include "global.h" +#include "alloc.h" +#include "mevent.h" +#include "mevent_server.h" +#include "mevent_server_helpers.h" + +EWRAM_DATA struct mevent_srv_common * s_mevent_srv_common_ptr = NULL; +EWRAM_DATA struct mevent_srv_ish * s_mevent_srv_ish_ptr = NULL; + +static void mevent_srv_init_common(struct mevent_srv_common *, const void *, u32, u32); +u32 mevent_srv_exec_common(struct mevent_srv_common *); +u32 mevent_srv_free_resources(struct mevent_srv_common *); + +extern const struct mevent_cmd s_mevent_wonder_news[]; +extern const struct mevent_cmd s_mevent_wonder_card[]; + +void mevent_srv_init_wnews(void) +{ + s_mevent_srv_common_ptr = AllocZeroed(sizeof(struct mevent_srv_common)); + mevent_srv_init_common(s_mevent_srv_common_ptr, s_mevent_wonder_news, 0, 1); +} + +void mevent_srv_new_wcard(void) +{ + s_mevent_srv_common_ptr = AllocZeroed(sizeof(struct mevent_srv_common)); + mevent_srv_init_common(s_mevent_srv_common_ptr, s_mevent_wonder_card, 0, 1); +} + +u32 mevent_srv_common_do_exec(u16 * a0) +{ + u32 result; + if (s_mevent_srv_common_ptr == NULL) + return 3; + result = mevent_srv_exec_common(s_mevent_srv_common_ptr); + if (result == 3) + { + *a0 = s_mevent_srv_common_ptr->param; + mevent_srv_free_resources(s_mevent_srv_common_ptr); + Free(s_mevent_srv_common_ptr); + s_mevent_srv_common_ptr = NULL; + } + return result; +} + +static void mevent_srv_init_common(struct mevent_srv_common * svr, const void * cmdBuffer, u32 sendPlayerNo, u32 recvPlayerNo) +{ + svr->unk_00 = 0; + svr->mainseqno = 0; + svr->mevent_32e0 = AllocZeroed(sizeof(struct MEventBuffer_32E0_Sub)); + svr->mevent_3120 = AllocZeroed(sizeof(struct MEventBuffer_3120_Sub)); + svr->recvBuffer = AllocZeroed(ME_SEND_BUF_SIZE); + svr->mevent_unk1442cc = AllocZeroed(sizeof(struct MEventStruct_Unk1442CC)); + svr->cmdBuffer = cmdBuffer; + svr->cmdidx = 0; + mevent_srv_sub_init(&svr->manager, sendPlayerNo, recvPlayerNo); +} -- cgit v1.2.3 From dabd1f6177ee6e2f65553d3fe43efcf023e0c3fe Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 2 Apr 2019 10:54:51 -0400 Subject: finish mevent_server.s --- src/mevent_server.c | 235 +++++++++++++++++++++++++++++++++++++++++++- src/mevent_server_helpers.c | 1 + src/mevent_server_ish.c | 7 ++ 3 files changed, 240 insertions(+), 3 deletions(-) create mode 100644 src/mevent_server_helpers.c create mode 100644 src/mevent_server_ish.c (limited to 'src') diff --git a/src/mevent_server.c b/src/mevent_server.c index ea5a18626..6a129ee28 100644 --- a/src/mevent_server.c +++ b/src/mevent_server.c @@ -1,15 +1,15 @@ #include "global.h" #include "alloc.h" +#include "script.h" #include "mevent.h" #include "mevent_server.h" #include "mevent_server_helpers.h" EWRAM_DATA struct mevent_srv_common * s_mevent_srv_common_ptr = NULL; -EWRAM_DATA struct mevent_srv_ish * s_mevent_srv_ish_ptr = NULL; static void mevent_srv_init_common(struct mevent_srv_common *, const void *, u32, u32); -u32 mevent_srv_exec_common(struct mevent_srv_common *); -u32 mevent_srv_free_resources(struct mevent_srv_common *); +static void mevent_srv_free_resources(struct mevent_srv_common *); +static u32 mevent_srv_exec_common(struct mevent_srv_common *); extern const struct mevent_cmd s_mevent_wonder_news[]; extern const struct mevent_cmd s_mevent_wonder_card[]; @@ -54,3 +54,232 @@ static void mevent_srv_init_common(struct mevent_srv_common * svr, const void * svr->cmdidx = 0; mevent_srv_sub_init(&svr->manager, sendPlayerNo, recvPlayerNo); } + +static void mevent_srv_free_resources(struct mevent_srv_common * svr) +{ + Free(svr->mevent_32e0); + Free(svr->mevent_3120); + Free(svr->recvBuffer); + Free(svr->mevent_unk1442cc); +} + +void mevent_srv_common_init_send(struct mevent_srv_common * svr, u32 ident, const void * src, u32 size) +{ + AGB_ASSERT(size <= ME_SEND_BUF_SIZE); + mevent_srv_sub_init_send(&svr->manager, ident, src, size); +} + +static void * mevent_first_if_not_null_else_second(void * a0, void * a1) +{ + if (a0 != NULL) + return a0; + else + return a1; +} + +static u32 mevent_compare_pointers(void * a0, void * a1) +{ + if (a1 < a0) + return 0; + else if (a1 == a0) + return 1; + else + return 2; +} + +static u32 common_mainseq_0(struct mevent_srv_common * svr) +{ + // start + svr->mainseqno = 4; + return 0; +} + +static u32 common_mainseq_1(struct mevent_srv_common * svr) +{ + // done + return 3; +} + +static u32 common_mainseq_2(struct mevent_srv_common * svr) +{ + // do recv + if (mevent_srv_sub_recv(&svr->manager)) + svr->mainseqno = 4; + return 1; +} + +static u32 common_mainseq_3(struct mevent_srv_common * svr) +{ + // do send + if (mevent_srv_sub_send(&svr->manager)) + svr->mainseqno = 4; + return 1; +} + +static u32 common_mainseq_4(struct mevent_srv_common * svr) +{ + // process command + const struct mevent_cmd * cmd = &svr->cmdBuffer[svr->cmdidx]; + void * ptr; + svr->cmdidx++; + + switch (cmd->instr) + { + case 0: + AGB_ASSERT(cmd->parameter == NULL); + svr->mainseqno = 1; + svr->param = cmd->flag; + break; + case 1: + svr->mainseqno = 3; + break; + case 2: + AGB_ASSERT(cmd->parameter == NULL); + mevent_srv_sub_init_recv(&svr->manager, cmd->flag, svr->recvBuffer); + svr->mainseqno = 2; + break; + case 3: + AGB_ASSERT(cmd->flag == FALSE); + svr->cmdidx = 0; + svr->cmdBuffer = cmd->parameter; + break; + case 5: + AGB_ASSERT(cmd->flag == FALSE); + AGB_ASSERT(cmd->parameter == NULL); + memcpy(svr->mevent_unk1442cc, svr->recvBuffer, sizeof(struct MEventStruct_Unk1442CC)); + break; + case 6: + AGB_ASSERT(cmd->flag == FALSE); + AGB_ASSERT(cmd->parameter == NULL); + svr->param = sub_801B6A0(svr->mevent_unk1442cc, FALSE); + break; + case 30: + AGB_ASSERT(cmd->flag == FALSE); + AGB_ASSERT(cmd->parameter == NULL); + svr->param = sub_801B6A0(svr->mevent_unk1442cc, TRUE); + break; + case 4: + if (svr->param == cmd->flag) + { + svr->cmdidx = 0; + svr->cmdBuffer = cmd->parameter; + } + break; + case 7: + AGB_ASSERT(cmd->flag == FALSE); + ptr = mevent_first_if_not_null_else_second(cmd->parameter, svr->mevent_32e0); + svr->param = sub_801B6EC(ptr, svr->mevent_unk1442cc, ptr); + break; + case 8: + AGB_ASSERT(cmd->flag == FALSE); + AGB_ASSERT(cmd->parameter == NULL); + svr->param = *(u32 *)svr->recvBuffer; + break; + case 9: + AGB_ASSERT(cmd->flag == FALSE); + ptr = mevent_first_if_not_null_else_second(cmd->parameter, &svr->sendWord); + svr->param = sub_801B708(ptr, svr->mevent_unk1442cc, ptr); + break; + case 10: + AGB_ASSERT(cmd->parameter == NULL); + svr->param = sub_801B784(svr->mevent_unk1442cc, cmd->flag); + break; + case 11: + AGB_ASSERT(cmd->flag == FALSE); + svr->param = sub_801B748(svr->mevent_unk1442cc, cmd->parameter); + break; + case 12: + AGB_ASSERT(cmd->flag == FALSE); + svr->param = mevent_compare_pointers(cmd->parameter, *(void **)svr->recvBuffer); + break; + case 14: + AGB_ASSERT(cmd->flag == FALSE); + mevent_srv_common_init_send(svr, 0x17, mevent_first_if_not_null_else_second(cmd->parameter, svr->mevent_3120), sizeof(struct MEventBuffer_3120_Sub)); + break; + case 13: + AGB_ASSERT(cmd->flag == FALSE); + mevent_srv_common_init_send(svr, 0x16, mevent_first_if_not_null_else_second(cmd->parameter, svr->mevent_32e0), sizeof(struct MEventBuffer_32E0_Sub)); + break; + case 16: + AGB_ASSERT(cmd->flag == FALSE); + mevent_srv_common_init_send(svr, 0x18, mevent_first_if_not_null_else_second(cmd->parameter, &svr->sendWord), 4); + break; + case 15: + if (cmd->parameter == NULL) + mevent_srv_common_init_send(svr, 0x19, svr->sendBuffer1, svr->sendBuffer1Size); + else + mevent_srv_common_init_send(svr, 0x19, cmd->parameter, cmd->flag); + break; + case 18: + if (cmd->parameter == NULL) + mevent_srv_common_init_send(svr, 0x10, svr->sendBuffer2, svr->sendBuffer2Size); + else + mevent_srv_common_init_send(svr, 0x10, cmd->parameter, cmd->flag); + break; + case 19: + AGB_ASSERT(cmd->flag == FALSE); + mevent_srv_common_init_send(svr, 0x1a, cmd->parameter, 188); + break; + case 20: + mevent_srv_common_init_send(svr, 0x15, cmd->parameter, cmd->flag); + break; + case 17: + mevent_srv_common_init_send(svr, 0x1c, cmd->parameter, cmd->flag); + break; + case 22: + AGB_ASSERT(cmd->flag == FALSE); + memcpy(svr->mevent_32e0, cmd->parameter, 332); + break; + case 23: + AGB_ASSERT(cmd->flag == FALSE); + memcpy(svr->mevent_3120, cmd->parameter, 444); + break; + case 21: + AGB_ASSERT(cmd->flag == FALSE); + svr->sendWord = *(u32 *)cmd->parameter; + break; + case 24: + svr->sendBuffer1 = cmd->parameter; + svr->sendBuffer1Size = cmd->flag; + break; + case 25: + svr->sendBuffer2 = cmd->parameter; + svr->sendBuffer2Size = cmd->flag; + break; + case 26: + AGB_ASSERT(cmd->flag == FALSE && cmd->parameter == NULL); + memcpy(svr->mevent_32e0, sav1_get_mevent_buffer_1(), 332); + sub_801B3C0(svr->mevent_32e0); + break; + case 27: + AGB_ASSERT(cmd->flag == FALSE && cmd->parameter == NULL); + memcpy(svr->mevent_3120, sav1_get_mevent_buffer_0(), 444); + break; + case 28: + AGB_ASSERT(cmd->flag == FALSE && cmd->parameter == NULL); + svr->sendBuffer1 = sub_8099244(); + break; + case 29: + mevent_srv_common_init_send(svr, 0x1b, cmd->parameter, cmd->flag); + break; + } + + return 1; +} + +static u32 (*const func_tbl[])(struct mevent_srv_common *) = { + common_mainseq_0, + common_mainseq_1, + common_mainseq_2, + common_mainseq_3, + common_mainseq_4 +}; + +static u32 mevent_srv_exec_common(struct mevent_srv_common * svr) +{ + u32 response; + AGB_ASSERT(svr->mainseqno < NELEMS(func_tbl)); + response = func_tbl[svr->mainseqno](svr); + AGB_ASSERT(svr->mainseqno < NELEMS(func_tbl)); + return response; +} diff --git a/src/mevent_server_helpers.c b/src/mevent_server_helpers.c new file mode 100644 index 000000000..dc4f98a6e --- /dev/null +++ b/src/mevent_server_helpers.c @@ -0,0 +1 @@ +#include "global.h" diff --git a/src/mevent_server_ish.c b/src/mevent_server_ish.c new file mode 100644 index 000000000..30793cf5c --- /dev/null +++ b/src/mevent_server_ish.c @@ -0,0 +1,7 @@ +#include "global.h" +#include "alloc.h" +#include "mevent.h" +#include "mevent_server.h" +#include "mevent_server_helpers.h" + +EWRAM_DATA struct mevent_srv_ish * s_mevent_srv_ish_ptr = NULL; -- cgit v1.2.3 From 03badd9c40de5d50562376d39348fb5c85f8340b Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 2 Apr 2019 11:43:29 -0400 Subject: mevent_server_ish --- src/mevent_server_ish.c | 290 +++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 288 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/mevent_server_ish.c b/src/mevent_server_ish.c index 30793cf5c..2b310c981 100644 --- a/src/mevent_server_ish.c +++ b/src/mevent_server_ish.c @@ -1,7 +1,293 @@ #include "global.h" #include "alloc.h" +#include "decompress.h" +#include "overworld.h" +#include "script.h" +#include "battle_tower.h" #include "mevent.h" -#include "mevent_server.h" -#include "mevent_server_helpers.h" +#include "mystery_event_script.h" +#include "mevent_server_ish.h" EWRAM_DATA struct mevent_srv_ish * s_mevent_srv_ish_ptr = NULL; + +static void mevent_srv_ish_init(struct mevent_srv_ish *, u32, u32); +static u32 mevent_srv_ish_exec(struct mevent_srv_ish *); +static void mevent_srv_ish_free_resources(struct mevent_srv_ish *); + +extern const u8 gUnknown_082F2598[]; +extern const struct mevent_cmd gUnknown_8468B6C[]; +extern const struct mevent_cmd gUnknown_8468BCC[]; + +void mevent_srv_ish_do_init(u32 arg) +{ + s_mevent_srv_ish_ptr = AllocZeroed(sizeof(struct mevent_srv_ish)); + mevent_srv_ish_init(s_mevent_srv_ish_ptr, 1, 0); + s_mevent_srv_ish_ptr->unk_4C = arg; +} + +u32 mevent_srv_ish_do_exec(u16 * a0) +{ + u32 result; + if (s_mevent_srv_ish_ptr == NULL) + return 6; + result = mevent_srv_ish_exec(s_mevent_srv_ish_ptr); + if (result == 6) + { + *a0 = s_mevent_srv_ish_ptr->param; + mevent_srv_ish_free_resources(s_mevent_srv_ish_ptr); + Free(s_mevent_srv_ish_ptr); + s_mevent_srv_ish_ptr = NULL; + } + return result; +} + +void mevent_srv_ish_inc_flag(void) +{ + s_mevent_srv_ish_ptr->flag++; +} + +void * mevent_srv_ish_get_buffer(void) +{ + return s_mevent_srv_ish_ptr->buffer; +} + +void mevent_srv_ish_set_param(u32 a0) +{ + s_mevent_srv_ish_ptr->param = a0; +} + +static void mevent_srv_ish_init(struct mevent_srv_ish * svr, u32 sendPlayerNo, u32 recvPlayerNo) +{ + svr->unk_00 = 0; + svr->mainseqno = 0; + svr->flag = 0; + svr->sendBuffer = AllocZeroed(ME_SEND_BUF_SIZE); + svr->recvBuffer = AllocZeroed(ME_SEND_BUF_SIZE); + svr->cmdBuffer = AllocZeroed(ME_SEND_BUF_SIZE); + svr->buffer = AllocZeroed(0x40); + mevent_srv_sub_init(&svr->manager, sendPlayerNo, recvPlayerNo); +} + +static void mevent_srv_ish_free_resources(struct mevent_srv_ish * svr) +{ + Free(svr->sendBuffer); + Free(svr->recvBuffer); + Free(svr->cmdBuffer); + Free(svr->buffer); +} + +static void mevent_srv_ish_jmp_buffer(struct mevent_srv_ish * svr) +{ + memcpy(svr->cmdBuffer, svr->recvBuffer, ME_SEND_BUF_SIZE); + svr->cmdidx = 0; +} + +static void mevent_srv_ish_send_word(struct mevent_srv_ish * svr, u32 ident, u32 word) +{ + CpuFill32(0, svr->sendBuffer, ME_SEND_BUF_SIZE); + *(u32 *)svr->sendBuffer = word; + mevent_srv_sub_init_send(&svr->manager, ident, svr->sendBuffer, sizeof(u32)); +} + +static u32 ish_mainseq_0(struct mevent_srv_ish * svr) +{ + // init + memcpy(svr->cmdBuffer, gUnknown_082F2598, ME_SEND_BUF_SIZE); + svr->cmdidx = 0; + svr->mainseqno = 4; + svr->flag = 0; + return 0; +} + +static u32 ish_mainseq_1(struct mevent_srv_ish * svr) +{ + // done + return 6; +} + + +static u32 ish_mainseq_2(struct mevent_srv_ish * svr) +{ + // do recv + if (mevent_srv_sub_recv(&svr->manager)) + { + svr->mainseqno = 4; + svr->flag = 0; + } + return 1; +} + +static u32 ish_mainseq_3(struct mevent_srv_ish * svr) +{ + // do send + if (mevent_srv_sub_send(&svr->manager)) + { + svr->mainseqno = 4; + svr->flag = 0; + } + return 1; +} + +static u32 ish_mainseq_4(struct mevent_srv_ish * svr) +{ + // process command + struct mevent_cmd_ish * cmd = &svr->cmdBuffer[svr->cmdidx]; + ++svr->cmdidx; + switch (cmd->instr) + { + case 0: + break; + case 1: + svr->param = cmd->parameter; + svr->mainseqno = 1; + svr->flag = 0; + break; + case 2: + mevent_srv_sub_init_recv(&svr->manager, cmd->parameter, svr->recvBuffer); + svr->mainseqno = 2; + svr->flag = 0; + break; + case 3: + svr->mainseqno = 3; + svr->flag = 0; + break; + case 20: + mevent_srv_sub_init_send(&svr->manager, 0x14, svr->sendBuffer, 0); + svr->mainseqno = 3; + svr->flag = 0; + break; + case 19: + mevent_srv_ish_send_word(svr, 0x12, GetGameStat(cmd->parameter)); + svr->mainseqno = 3; + svr->flag = 0; + break; + case 6: + if (svr->param == 0) + mevent_srv_ish_jmp_buffer(svr); + break; + case 7: + if (svr->param == 1) + mevent_srv_ish_jmp_buffer(svr); + break; + case 4: + mevent_srv_ish_jmp_buffer(svr); + break; + case 5: + memcpy(svr->buffer, svr->recvBuffer, 0x40); + svr->mainseqno = 5; + svr->flag = 0; + return 2; + case 11: + memcpy(svr->buffer, svr->recvBuffer, 0x40); + svr->mainseqno = 5; + svr->flag = 0; + return 3; + case 12: + memcpy(svr->buffer, svr->recvBuffer, 0x40); + svr->mainseqno = 5; + svr->flag = 0; + return 5; + case 13: + svr->mainseqno = 5; + svr->flag = 0; + return 4; + case 8: + sub_801B580(svr->sendBuffer, svr->unk_4C); + mevent_srv_sub_init_send(&svr->manager, 0x11, svr->sendBuffer, sizeof(struct MEventStruct_Unk1442CC)); + break; + case 14: + mevent_srv_ish_send_word(svr, 0x13, svr->param); + break; + case 10: + sub_801B21C(svr->recvBuffer); + break; + case 9: + if (!sub_801B1A4(svr->recvBuffer)) + { + sub_801B078(svr->recvBuffer); + mevent_srv_ish_send_word(svr, 0x13, 0); + } + else + mevent_srv_ish_send_word(svr, 0x13, 1); + break; + case 15: + svr->mainseqno = 6; + svr->flag = 0; + break; + case 16: + sub_801B508(svr->recvBuffer); + break; + case 17: + sub_80992A0(svr->recvBuffer, 1000); + break; + case 18: + memcpy(&gSaveBlock2Ptr->frontier.ereaderTrainer, svr->recvBuffer, 0xbc); + ValidateEReaderTrainer(); + break; + case 21: + memcpy(gDecompressionBuffer, svr->recvBuffer, ME_SEND_BUF_SIZE); + svr->mainseqno = 7; + svr->flag = 0; + break; + } + + return 1; +} + +static u32 ish_mainseq_5(struct mevent_srv_ish * svr) +{ + // wait flag + if (svr->flag) + { + svr->mainseqno = 4; + svr->flag = 0; + } + return 1; +} + +static u32 ish_mainseq_6(struct mevent_srv_ish * svr) +{ + // ??? + switch (svr->flag) + { + case 0: + sub_8153870(svr->recvBuffer); + ++svr->flag; + break; + case 1: + if (!sub_8153884(&svr->param)) + { + svr->mainseqno = 4; + svr->flag = 0; + } + break; + } + return 1; +} + +static u32 ish_mainseq_7(struct mevent_srv_ish * svr) +{ + // exec arbitrary code + u32 (*func)(u32 *, struct SaveBlock2 *, struct SaveBlock1 *) = (void *)gDecompressionBuffer; + if (func(&svr->param, gSaveBlock2Ptr, gSaveBlock1Ptr) == 1) + { + svr->mainseqno = 4; + svr->flag = 0; + } + return 1; +} + +static u32 mevent_srv_ish_exec(struct mevent_srv_ish * svr) +{ + u32 (*funcs[])(struct mevent_srv_ish *) = { + ish_mainseq_0, + ish_mainseq_1, + ish_mainseq_2, + ish_mainseq_3, + ish_mainseq_4, + ish_mainseq_5, + ish_mainseq_6, + ish_mainseq_7 + }; + return funcs[svr->mainseqno](svr); +} -- cgit v1.2.3 From 6c12d154e7a6a0bc60c988497b3daa4f8126a5b2 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 2 Apr 2019 12:22:39 -0400 Subject: Reformat mevent server and client scripts --- src/mevent_server_helpers.c | 210 ++++++++++++++++++++++++++++++++++++++++++++ src/mevent_server_ish.c | 4 +- src/util.c | 4 +- 3 files changed, 213 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/mevent_server_helpers.c b/src/mevent_server_helpers.c index dc4f98a6e..af14b514c 100644 --- a/src/mevent_server_helpers.c +++ b/src/mevent_server_helpers.c @@ -1 +1,211 @@ #include "global.h" +#include "alloc.h" +#include "decompress.h" +#include "util.h" +#include "link.h" +#include "link_rfu.h" +#include "overworld.h" +#include "script.h" +#include "battle_tower.h" +#include "mystery_event_script.h" +#include "mevent.h" +#include "mevent_server_helpers.h" + +static u32 mevent_receive_func(struct mevent_srv_sub *); +static u32 mevent_send_func(struct mevent_srv_sub *); + +u32 mevent_srv_sub_recv(struct mevent_srv_sub * svr) +{ + return svr->recvFunc(svr); +} + +u32 mevent_srv_sub_send(struct mevent_srv_sub * svr) +{ + return svr->sendFunc(svr); +} + +void mevent_srv_sub_init(struct mevent_srv_sub * svr, u32 sendPlayerNo, u32 recvPlayerNo) +{ + svr->sendPlayerNo = sendPlayerNo; + svr->recvPlayerNo = recvPlayerNo; + svr->seqno = 0; + svr->sendCRC = 0; + svr->sendSize = 0; + svr->sendCounter = 0; + svr->recvCRC = 0; + svr->recvSize = 0; + svr->recvCounter = 0; + svr->sendBfr = NULL; + svr->recvBfr = NULL; + svr->sendFunc = mevent_send_func; + svr->recvFunc = mevent_receive_func; +} + +void mevent_srv_sub_init_send(struct mevent_srv_sub * svr, u32 ident, const void * src, u32 size) +{ + svr->seqno = 0; + svr->sendIdent = ident; + svr->sendCounter = 0; + svr->sendCRC = 0; + if (size != 0) + svr->sendSize = size; + else + svr->sendSize = ME_SEND_BUF_SIZE; + svr->sendBfr = src; +} + +void mevent_srv_sub_init_recv(struct mevent_srv_sub * svr, u32 ident, void * dest) +{ + svr->seqno = 0; + svr->recvIdent = ident; + svr->recvCounter = 0; + svr->recvCRC = 0; + svr->recvSize = 0; + svr->recvBfr = dest; +} + +static void mevent_recv_block(u32 recv_idx, void * dest, size_t size) +{ + memcpy(dest, gBlockRecvBuffer[recv_idx], size); +} + +static bool32 mevent_has_received(u32 recv_idx) +{ + if ((GetBlockReceivedStatus() >> recv_idx) & 1) + return TRUE; + else + return FALSE; +} + +static void mevent_reset_recv(u32 recv_idx) +{ + ResetBlockReceivedFlag(recv_idx); +} + +static bool32 mevent_receive_func(struct mevent_srv_sub * svr) +{ + struct send_recv_header header; + + switch (svr->seqno) + { + case 0: + if (mevent_has_received(svr->recvPlayerNo)) + { + mevent_recv_block(svr->recvPlayerNo, &header, sizeof(header)); + svr->recvSize = header.size; + svr->recvCRC = header.crc; + if (svr->recvSize > ME_SEND_BUF_SIZE) + { + sub_8010198(); + return FALSE; + } + else if (svr->recvIdent != header.ident) + { + sub_8010198(); + return FALSE; + } + else + { + svr->recvCounter = 0; + mevent_reset_recv(svr->recvPlayerNo); + ++svr->seqno; + } + } + break; + case 1: + if (mevent_has_received(svr->recvPlayerNo)) + { + size_t blocksiz = svr->recvCounter * 252; + if (svr->recvSize - blocksiz <= 252) + { + mevent_recv_block(svr->recvPlayerNo, svr->recvBfr + blocksiz, svr->recvSize - blocksiz); + ++svr->recvCounter; + ++svr->seqno; + } + else + { + mevent_recv_block(svr->recvPlayerNo, svr->recvBfr + blocksiz, 252); + ++svr->recvCounter; + } + mevent_reset_recv(svr->recvPlayerNo); + } + break; + case 2: + if (CalcCRC16WithTable(svr->recvBfr, svr->recvSize) != svr->recvCRC) + { + sub_8010198(); + return FALSE; + } + else + { + svr->seqno = 0; + return TRUE; + } + break; + + } + + return FALSE; +} + +static bool32 mevent_send_func(struct mevent_srv_sub * svr) +{ + struct send_recv_header header; + + switch (svr->seqno) + { + case 0: + if (IsLinkTaskFinished()) + { + header.ident = svr->sendIdent; + header.size = svr->sendSize; + header.crc = CalcCRC16WithTable(svr->sendBfr, svr->sendSize); + svr->sendCRC = header.crc; + svr->sendCounter = 0; + SendBlock(0, &header, sizeof(header)); + ++svr->seqno; + } + break; + case 1: + if (IsLinkTaskFinished()) + { + if (mevent_has_received(svr->sendPlayerNo)) + { + size_t blocksiz; + mevent_reset_recv(svr->sendPlayerNo); + blocksiz = 252 * svr->sendCounter; + if (svr->sendSize - blocksiz <= 252) + { + SendBlock(0, svr->sendBfr + blocksiz, svr->sendSize - blocksiz); + ++svr->sendCounter; + ++svr->seqno; + } + else + { + SendBlock(0, svr->sendBfr + blocksiz, 252); + ++svr->sendCounter; + } + } + } + break; + case 2: + if (IsLinkTaskFinished()) + { + if (CalcCRC16WithTable(svr->sendBfr, svr->sendSize) != svr->sendCRC) + sub_8010198(); + else + ++svr->seqno; + } + break; + case 3: + if (mevent_has_received(svr->sendPlayerNo)) + { + mevent_reset_recv(svr->sendPlayerNo); + svr->seqno = 0; + return TRUE; + } + break; + } + + return FALSE; +} diff --git a/src/mevent_server_ish.c b/src/mevent_server_ish.c index 2b310c981..0303bfd9b 100644 --- a/src/mevent_server_ish.c +++ b/src/mevent_server_ish.c @@ -14,9 +14,7 @@ static void mevent_srv_ish_init(struct mevent_srv_ish *, u32, u32); static u32 mevent_srv_ish_exec(struct mevent_srv_ish *); static void mevent_srv_ish_free_resources(struct mevent_srv_ish *); -extern const u8 gUnknown_082F2598[]; -extern const struct mevent_cmd gUnknown_8468B6C[]; -extern const struct mevent_cmd gUnknown_8468BCC[]; +extern const struct mevent_cmd_ish gUnknown_082F2598[]; void mevent_srv_ish_do_init(u32 arg) { diff --git a/src/util.c b/src/util.c index 47112774a..8aa54857a 100644 --- a/src/util.c +++ b/src/util.c @@ -218,7 +218,7 @@ int CountTrailingZeroBits(u32 value) return 0; } -u16 CalcCRC16(u8 *data, s32 length) +u16 CalcCRC16(const u8 *data, s32 length) { u16 i, j; u16 crc = 0x1121; @@ -237,7 +237,7 @@ u16 CalcCRC16(u8 *data, s32 length) return ~crc; } -u16 CalcCRC16WithTable(u8 *data, u32 length) +u16 CalcCRC16WithTable(const u8 *data, u32 length) { u16 i; u16 crc = 0x1121; -- cgit v1.2.3 From 28646ea64ea628596dc1cd9496febf6f46cc9e41 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 2 Apr 2019 13:26:06 -0400 Subject: Decompile mevent server scripts --- src/mevent2.c | 4 +- src/mevent_scripts.c | 191 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/mevent_server.c | 16 ++++- 3 files changed, 206 insertions(+), 5 deletions(-) create mode 100644 src/mevent_scripts.c (limited to 'src') diff --git a/src/mevent2.c b/src/mevent2.c index 4174c4055..8585224ef 100755 --- a/src/mevent2.c +++ b/src/mevent2.c @@ -399,7 +399,7 @@ bool32 sub_801B6A0(const struct MEventStruct_Unk1442CC *data, bool32 a1) return TRUE; } -u32 sub_801B6EC(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, void *unused) +u32 sub_801B6EC(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, const void *unused) { if (a1->unk_14 == 0) return 0; @@ -410,7 +410,7 @@ u32 sub_801B6EC(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, void *un return 2; } -u32 sub_801B708(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, void *unused) +u32 sub_801B708(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, const void *unused) { int r4 = a1->unk_44 - sub_801B438(&a1->unk_20, a1->unk_44); if (r4 == 0) diff --git a/src/mevent_scripts.c b/src/mevent_scripts.c new file mode 100644 index 000000000..4a1a26535 --- /dev/null +++ b/src/mevent_scripts.c @@ -0,0 +1,191 @@ +#include "global.h" +#include "mevent_server_ish.h" +#include "mevent_server.h" + +const u8 gText_CanceledReadingCard[] = _("Canceled reading\nthe Card."); + + +const struct mevent_cmd_ish gUnknown_082F2598[] = { + { 2, 16}, + { 4, 0} +}; + +const struct mevent_cmd_ish gUnknown_082F25A8[] = { + { 8, 0}, + { 3, 0}, + { 2, 16}, + { 4, 0} +}; + +const struct mevent_cmd_ish gUnknown_082F25C8[] = { + {20, 0}, + { 1, 10} +}; + +const struct mevent_cmd_ish gUnknown_082F25D8[] = { + {20, 0}, + { 1, 11} +}; + +const struct mevent_cmd_ish gUnknown_082F25E8[] = { + {20, 0}, + { 1, 0} +}; + +const struct mevent_cmd_ish gUnknown_082F25F8[] = { + { 2, 22}, + {10, 0}, + { 2, 25}, + {17, 0}, + {20, 0}, + { 1, 2} +}; + +const struct mevent_cmd_ish gUnknown_082F2628[] = { + { 2, 23}, + { 9, 0}, + { 3, 0}, + { 2, 16}, + { 4, 0} +}; + +const struct mevent_cmd_ish gUnknown_082F2650[] = { + {20, 0}, + { 1, 7} +}; + +const struct mevent_cmd_ish gUnknown_082F2660[] = { + {20, 0}, + { 1, 3} +}; + +const struct mevent_cmd_ish gUnknown_082F2670[] = { + {13, 0}, + {14, 0}, + { 3, 0}, + { 2, 16}, + { 4, 0} +}; + +const struct mevent_cmd_ish gUnknown_082F2698[] = { + {20, 0}, + { 1, 9} +}; + +const struct mevent_cmd_ish gUnknown_082F26A8[] = { + {20, 0}, + { 1, 5} +}; + +const struct mevent_cmd_ish gUnknown_082F26B8[] = { + { 2, 21}, + {12, 0}, + {20, 0}, + { 1, 14}, + { 2, 21}, + {12, 0}, + {20, 0}, + { 1, 13} +}; + +const struct mevent_cmd gUnknown_082F26F8[] = { + {18, 0x10, gUnknown_082F25C8}, + { 1, 0x00, NULL}, + { 2, 0x14, NULL}, + { 0, 0x0a, NULL}, + {18, 0x10, gUnknown_082F25D8}, + { 1, 0x00, NULL}, + { 2, 0x14, NULL}, + { 0, 0x0b, NULL}, + {18, 0x10, gUnknown_082F2698}, + { 1, 0x00, NULL}, + { 2, 0x14, NULL}, + { 0, 0x09, NULL} +}; + +const struct mevent_cmd gUnknown_082F2788[] = { + {18, 0x20, gUnknown_082F26B8}, + { 1, 0x00, NULL}, + {20, 0x1b, gText_CanceledReadingCard}, + { 1, 0x00, NULL}, + { 2, 0x14, NULL}, + { 0, 0x09, NULL} +}; + +const struct mevent_cmd gUnknown_082F27D0[] = { + {18, 0x10, gUnknown_082F2650}, + { 1, 0x00, NULL}, + { 2, 0x14, NULL}, + { 0, 0x07, NULL} +}; + +const struct mevent_cmd gUnknown_082F2800[] = { + {18, 0x28, gUnknown_082F2628}, + { 1, 0x00, NULL}, + {14, 0x00, NULL}, + { 1, 0x00, NULL}, + { 2, 0x13, NULL}, + { 8, 0x00, NULL}, + { 4, 0x01, gUnknown_082F27D0}, + {18, 0x10, gUnknown_082F2660}, + { 1, 0x00, NULL}, + { 2, 0x14, NULL}, + { 0, 0x03, NULL} +}; + +const struct mevent_cmd gUnknown_082F2884[] = { + {18, 0x30, gUnknown_082F25F8}, + { 1, 0x00, NULL}, + {13, 0x00, NULL}, + { 1, 0x00, NULL}, + {15, 0x00, NULL}, + { 1, 0x00, NULL}, + { 2, 0x14, NULL}, + { 0, 0x02, NULL} +}; + +const struct mevent_cmd gUnknown_082F28E4[] = { + {18, 0x28, gUnknown_082F2670}, + { 1, 0x00, NULL}, + { 2, 0x13, NULL}, + { 8, 0x00, NULL}, + { 4, 0x00, gUnknown_082F2884}, + { 3, 0x00, gUnknown_082F2788} +}; + +const struct mevent_cmd gUnknown_082F292C[] = { + {18, 0x10, gUnknown_082F26A8}, + { 1, 0x00, NULL}, + { 2, 0x14, NULL}, + { 0, 0x05, NULL}, + {18, 0x10, gUnknown_082F25E8}, + { 1, 0x00, NULL}, + { 2, 0x14, NULL}, + { 0, 0x00, NULL} +}; + +const struct mevent_cmd s_mevent_wonder_news[] = { + {27, 0x00, NULL}, + {18, 0x20, gUnknown_082F25A8}, + { 1, 0x00, NULL}, + { 2, 0x11, NULL}, + { 5, 0x00, NULL}, + {30, 0x00, NULL}, + { 4, 0x00, gUnknown_082F26F8}, + { 3, 0x00, gUnknown_082F2800} +}; + +const struct mevent_cmd s_mevent_wonder_card[] = { + {26, 0x00, NULL}, + {28, 0x00, NULL}, + {18, 0x20, gUnknown_082F25A8}, + {1, 0x00, NULL}, + {2, 0x11, NULL}, + {5, 0x00, NULL}, + {6, 0x00, NULL}, + {4, 0x00, gUnknown_082F26F8}, + {7, 0x00, NULL}, + {4, 0x02, gUnknown_082F28E4}, + {4, 0x00, gUnknown_082F2884}, + {3, 0x00, gUnknown_082F292C}, +}; diff --git a/src/mevent_server.c b/src/mevent_server.c index 6a129ee28..fe13943ff 100644 --- a/src/mevent_server.c +++ b/src/mevent_server.c @@ -69,7 +69,7 @@ void mevent_srv_common_init_send(struct mevent_srv_common * svr, u32 ident, cons mevent_srv_sub_init_send(&svr->manager, ident, src, size); } -static void * mevent_first_if_not_null_else_second(void * a0, void * a1) +static const void * mevent_first_if_not_null_else_second(const void * a0, const void * a1) { if (a0 != NULL) return a0; @@ -77,7 +77,7 @@ static void * mevent_first_if_not_null_else_second(void * a0, void * a1) return a1; } -static u32 mevent_compare_pointers(void * a0, void * a1) +static u32 mevent_compare_pointers(const void * a0, const void * a1) { if (a1 < a0) return 0; @@ -120,45 +120,53 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr) { // process command const struct mevent_cmd * cmd = &svr->cmdBuffer[svr->cmdidx]; - void * ptr; + const void * ptr; svr->cmdidx++; switch (cmd->instr) { case 0: + // end AGB_ASSERT(cmd->parameter == NULL); svr->mainseqno = 1; svr->param = cmd->flag; break; case 1: + // wait_send svr->mainseqno = 3; break; case 2: + // receive AGB_ASSERT(cmd->parameter == NULL); mevent_srv_sub_init_recv(&svr->manager, cmd->flag, svr->recvBuffer); svr->mainseqno = 2; break; case 3: + // jump AGB_ASSERT(cmd->flag == FALSE); svr->cmdidx = 0; svr->cmdBuffer = cmd->parameter; break; case 5: + // get_1442CC AGB_ASSERT(cmd->flag == FALSE); AGB_ASSERT(cmd->parameter == NULL); memcpy(svr->mevent_unk1442cc, svr->recvBuffer, sizeof(struct MEventStruct_Unk1442CC)); break; case 6: + // check_header__pass_false AGB_ASSERT(cmd->flag == FALSE); AGB_ASSERT(cmd->parameter == NULL); svr->param = sub_801B6A0(svr->mevent_unk1442cc, FALSE); break; case 30: + // check_header__pass_true AGB_ASSERT(cmd->flag == FALSE); AGB_ASSERT(cmd->parameter == NULL); svr->param = sub_801B6A0(svr->mevent_unk1442cc, TRUE); break; case 4: + // jump_if_eq if (svr->param == cmd->flag) { svr->cmdidx = 0; @@ -166,11 +174,13 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr) } break; case 7: + // check_crc AGB_ASSERT(cmd->flag == FALSE); ptr = mevent_first_if_not_null_else_second(cmd->parameter, svr->mevent_32e0); svr->param = sub_801B6EC(ptr, svr->mevent_unk1442cc, ptr); break; case 8: + // read_word AGB_ASSERT(cmd->flag == FALSE); AGB_ASSERT(cmd->parameter == NULL); svr->param = *(u32 *)svr->recvBuffer; -- cgit v1.2.3 From b17c85ff7c975359b6d075453fb1ad668262f87f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 2 Apr 2019 13:35:38 -0400 Subject: Use named fields for command structs --- src/mevent_scripts.c | 238 +++++++++++++++++++++++++-------------------------- 1 file changed, 119 insertions(+), 119 deletions(-) (limited to 'src') diff --git a/src/mevent_scripts.c b/src/mevent_scripts.c index 4a1a26535..29b37119e 100644 --- a/src/mevent_scripts.c +++ b/src/mevent_scripts.c @@ -6,186 +6,186 @@ const u8 gText_CanceledReadingCard[] = _("Canceled reading\nthe Card."); const struct mevent_cmd_ish gUnknown_082F2598[] = { - { 2, 16}, - { 4, 0} + {.instr = 2, .parameter = 16}, + {.instr = 4, .parameter = 0} }; const struct mevent_cmd_ish gUnknown_082F25A8[] = { - { 8, 0}, - { 3, 0}, - { 2, 16}, - { 4, 0} + {.instr = 8, .parameter = 0}, + {.instr = 3, .parameter = 0}, + {.instr = 2, .parameter = 16}, + {.instr = 4, .parameter = 0} }; const struct mevent_cmd_ish gUnknown_082F25C8[] = { - {20, 0}, - { 1, 10} + {.instr = 20, .parameter = 0}, + {.instr = 1, .parameter = 10} }; const struct mevent_cmd_ish gUnknown_082F25D8[] = { - {20, 0}, - { 1, 11} + {.instr = 20, .parameter = 0}, + {.instr = 1, .parameter = 11} }; const struct mevent_cmd_ish gUnknown_082F25E8[] = { - {20, 0}, - { 1, 0} + {.instr = 20, .parameter = 0}, + {.instr = 1, .parameter = 0} }; const struct mevent_cmd_ish gUnknown_082F25F8[] = { - { 2, 22}, - {10, 0}, - { 2, 25}, - {17, 0}, - {20, 0}, - { 1, 2} + {.instr = 2, .parameter = 22}, + {.instr = 10, .parameter = 0}, + {.instr = 2, .parameter = 25}, + {.instr = 17, .parameter = 0}, + {.instr = 20, .parameter = 0}, + {.instr = 1, .parameter = 2} }; const struct mevent_cmd_ish gUnknown_082F2628[] = { - { 2, 23}, - { 9, 0}, - { 3, 0}, - { 2, 16}, - { 4, 0} + {.instr = 2, .parameter = 23}, + {.instr = 9, .parameter = 0}, + {.instr = 3, .parameter = 0}, + {.instr = 2, .parameter = 16}, + {.instr = 4, .parameter = 0} }; const struct mevent_cmd_ish gUnknown_082F2650[] = { - {20, 0}, - { 1, 7} + {.instr = 20, .parameter = 0}, + {.instr = 1, .parameter = 7} }; const struct mevent_cmd_ish gUnknown_082F2660[] = { - {20, 0}, - { 1, 3} + {.instr = 20, .parameter = 0}, + {.instr = 1, .parameter = 3} }; const struct mevent_cmd_ish gUnknown_082F2670[] = { - {13, 0}, - {14, 0}, - { 3, 0}, - { 2, 16}, - { 4, 0} + {.instr = 13, .parameter = 0}, + {.instr = 14, .parameter = 0}, + {.instr = 3, .parameter = 0}, + {.instr = 2, .parameter = 16}, + {.instr = 4, .parameter = 0} }; const struct mevent_cmd_ish gUnknown_082F2698[] = { - {20, 0}, - { 1, 9} + {.instr = 20, .parameter = 0}, + {.instr = 1, .parameter = 9} }; const struct mevent_cmd_ish gUnknown_082F26A8[] = { - {20, 0}, - { 1, 5} + {.instr = 20, .parameter = 0}, + {.instr = 1, .parameter = 5} }; const struct mevent_cmd_ish gUnknown_082F26B8[] = { - { 2, 21}, - {12, 0}, - {20, 0}, - { 1, 14}, - { 2, 21}, - {12, 0}, - {20, 0}, - { 1, 13} + {.instr = 2, .parameter = 21}, + {.instr = 12, .parameter = 0}, + {.instr = 20, .parameter = 0}, + {.instr = 1, .parameter = 14}, + {.instr = 2, .parameter = 21}, + {.instr = 12, .parameter = 0}, + {.instr = 20, .parameter = 0}, + {.instr = 1, .parameter = 13} }; const struct mevent_cmd gUnknown_082F26F8[] = { - {18, 0x10, gUnknown_082F25C8}, - { 1, 0x00, NULL}, - { 2, 0x14, NULL}, - { 0, 0x0a, NULL}, - {18, 0x10, gUnknown_082F25D8}, - { 1, 0x00, NULL}, - { 2, 0x14, NULL}, - { 0, 0x0b, NULL}, - {18, 0x10, gUnknown_082F2698}, - { 1, 0x00, NULL}, - { 2, 0x14, NULL}, - { 0, 0x09, NULL} + {.instr = 18, .flag = 0x10, .parameter = gUnknown_082F25C8}, + {.instr = 1, .flag = 0x00, .parameter = NULL}, + {.instr = 2, .flag = 0x14, .parameter = NULL}, + {.instr = 0, .flag = 0x0a, .parameter = NULL}, + {.instr = 18, .flag = 0x10, .parameter = gUnknown_082F25D8}, + {.instr = 1, .flag = 0x00, .parameter = NULL}, + {.instr = 2, .flag = 0x14, .parameter = NULL}, + {.instr = 0, .flag = 0x0b, .parameter = NULL}, + {.instr = 18, .flag = 0x10, .parameter = gUnknown_082F2698}, + {.instr = 1, .flag = 0x00, .parameter = NULL}, + {.instr = 2, .flag = 0x14, .parameter = NULL}, + {.instr = 0, .flag = 0x09, .parameter = NULL} }; const struct mevent_cmd gUnknown_082F2788[] = { - {18, 0x20, gUnknown_082F26B8}, - { 1, 0x00, NULL}, - {20, 0x1b, gText_CanceledReadingCard}, - { 1, 0x00, NULL}, - { 2, 0x14, NULL}, - { 0, 0x09, NULL} + {.instr = 18, .flag = 0x20, .parameter = gUnknown_082F26B8}, + {.instr = 1, .flag = 0x00, .parameter = NULL}, + {.instr = 20, .flag = 0x1b, .parameter = gText_CanceledReadingCard}, + {.instr = 1, .flag = 0x00, .parameter = NULL}, + {.instr = 2, .flag = 0x14, .parameter = NULL}, + {.instr = 0, .flag = 0x09, .parameter = NULL} }; const struct mevent_cmd gUnknown_082F27D0[] = { - {18, 0x10, gUnknown_082F2650}, - { 1, 0x00, NULL}, - { 2, 0x14, NULL}, - { 0, 0x07, NULL} + {.instr = 18, .flag = 0x10, .parameter = gUnknown_082F2650}, + {.instr = 1, .flag = 0x00, .parameter = NULL}, + {.instr = 2, .flag = 0x14, .parameter = NULL}, + {.instr = 0, .flag = 0x07, .parameter = NULL} }; const struct mevent_cmd gUnknown_082F2800[] = { - {18, 0x28, gUnknown_082F2628}, - { 1, 0x00, NULL}, - {14, 0x00, NULL}, - { 1, 0x00, NULL}, - { 2, 0x13, NULL}, - { 8, 0x00, NULL}, - { 4, 0x01, gUnknown_082F27D0}, - {18, 0x10, gUnknown_082F2660}, - { 1, 0x00, NULL}, - { 2, 0x14, NULL}, - { 0, 0x03, NULL} + {.instr = 18, .flag = 0x28, .parameter = gUnknown_082F2628}, + {.instr = 1, .flag = 0x00, .parameter = NULL}, + {.instr = 14, .flag = 0x00, .parameter = NULL}, + {.instr = 1, .flag = 0x00, .parameter = NULL}, + {.instr = 2, .flag = 0x13, .parameter = NULL}, + {.instr = 8, .flag = 0x00, .parameter = NULL}, + {.instr = 4, .flag = 0x01, .parameter = gUnknown_082F27D0}, + {.instr = 18, .flag = 0x10, .parameter = gUnknown_082F2660}, + {.instr = 1, .flag = 0x00, .parameter = NULL}, + {.instr = 2, .flag = 0x14, .parameter = NULL}, + {.instr = 0, .flag = 0x03, .parameter = NULL} }; const struct mevent_cmd gUnknown_082F2884[] = { - {18, 0x30, gUnknown_082F25F8}, - { 1, 0x00, NULL}, - {13, 0x00, NULL}, - { 1, 0x00, NULL}, - {15, 0x00, NULL}, - { 1, 0x00, NULL}, - { 2, 0x14, NULL}, - { 0, 0x02, NULL} + {.instr = 18, .flag = 0x30, .parameter = gUnknown_082F25F8}, + {.instr = 1, .flag = 0x00, .parameter = NULL}, + {.instr = 13, .flag = 0x00, .parameter = NULL}, + {.instr = 1, .flag = 0x00, .parameter = NULL}, + {.instr = 15, .flag = 0x00, .parameter = NULL}, + {.instr = 1, .flag = 0x00, .parameter = NULL}, + {.instr = 2, .flag = 0x14, .parameter = NULL}, + {.instr = 0, .flag = 0x02, .parameter = NULL} }; const struct mevent_cmd gUnknown_082F28E4[] = { - {18, 0x28, gUnknown_082F2670}, - { 1, 0x00, NULL}, - { 2, 0x13, NULL}, - { 8, 0x00, NULL}, - { 4, 0x00, gUnknown_082F2884}, - { 3, 0x00, gUnknown_082F2788} + {.instr = 18, .flag = 0x28, .parameter = gUnknown_082F2670}, + {.instr = 1, .flag = 0x00, .parameter = NULL}, + {.instr = 2, .flag = 0x13, .parameter = NULL}, + {.instr = 8, .flag = 0x00, .parameter = NULL}, + {.instr = 4, .flag = 0x00, .parameter = gUnknown_082F2884}, + {.instr = 3, .flag = 0x00, .parameter = gUnknown_082F2788} }; const struct mevent_cmd gUnknown_082F292C[] = { - {18, 0x10, gUnknown_082F26A8}, - { 1, 0x00, NULL}, - { 2, 0x14, NULL}, - { 0, 0x05, NULL}, - {18, 0x10, gUnknown_082F25E8}, - { 1, 0x00, NULL}, - { 2, 0x14, NULL}, - { 0, 0x00, NULL} + {.instr = 18, .flag = 0x10, .parameter = gUnknown_082F26A8}, + {.instr = 1, .flag = 0x00, .parameter = NULL}, + {.instr = 2, .flag = 0x14, .parameter = NULL}, + {.instr = 0, .flag = 0x05, .parameter = NULL}, + {.instr = 18, .flag = 0x10, .parameter = gUnknown_082F25E8}, + {.instr = 1, .flag = 0x00, .parameter = NULL}, + {.instr = 2, .flag = 0x14, .parameter = NULL}, + {.instr = 0, .flag = 0x00, .parameter = NULL} }; const struct mevent_cmd s_mevent_wonder_news[] = { - {27, 0x00, NULL}, - {18, 0x20, gUnknown_082F25A8}, - { 1, 0x00, NULL}, - { 2, 0x11, NULL}, - { 5, 0x00, NULL}, - {30, 0x00, NULL}, - { 4, 0x00, gUnknown_082F26F8}, - { 3, 0x00, gUnknown_082F2800} + {.instr = 27, .flag = 0x00, .parameter = NULL}, + {.instr = 18, .flag = 0x20, .parameter = gUnknown_082F25A8}, + {.instr = 1, .flag = 0x00, .parameter = NULL}, + {.instr = 2, .flag = 0x11, .parameter = NULL}, + {.instr = 5, .flag = 0x00, .parameter = NULL}, + {.instr = 30, .flag = 0x00, .parameter = NULL}, + {.instr = 4, .flag = 0x00, .parameter = gUnknown_082F26F8}, + {.instr = 3, .flag = 0x00, .parameter = gUnknown_082F2800} }; const struct mevent_cmd s_mevent_wonder_card[] = { - {26, 0x00, NULL}, - {28, 0x00, NULL}, - {18, 0x20, gUnknown_082F25A8}, - {1, 0x00, NULL}, - {2, 0x11, NULL}, - {5, 0x00, NULL}, - {6, 0x00, NULL}, - {4, 0x00, gUnknown_082F26F8}, - {7, 0x00, NULL}, - {4, 0x02, gUnknown_082F28E4}, - {4, 0x00, gUnknown_082F2884}, - {3, 0x00, gUnknown_082F292C}, + {.instr = 26, .flag = 0x00, .parameter = NULL}, + {.instr = 28, .flag = 0x00, .parameter = NULL}, + {.instr = 18, .flag = 0x20, .parameter = gUnknown_082F25A8}, + {.instr = 1, .flag = 0x00, .parameter = NULL}, + {.instr = 2, .flag = 0x11, .parameter = NULL}, + {.instr = 5, .flag = 0x00, .parameter = NULL}, + {.instr = 6, .flag = 0x00, .parameter = NULL}, + {.instr = 4, .flag = 0x00, .parameter = gUnknown_082F26F8}, + {.instr = 7, .flag = 0x00, .parameter = NULL}, + {.instr = 4, .flag = 0x02, .parameter = gUnknown_082F28E4}, + {.instr = 4, .flag = 0x00, .parameter = gUnknown_082F2884}, + {.instr = 3, .flag = 0x00, .parameter = gUnknown_082F292C} }; -- cgit v1.2.3 From d220f876fc9e7281075419ce6bbb5bf9e8dbef8f Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 2 Apr 2019 13:57:03 -0400 Subject: Some symbol documentation --- src/mevent2.c | 90 ++++++++++++++++++++++++------------------------- src/mevent_801BAAC.c | 8 ++--- src/mevent_server.c | 30 ++++++++--------- src/mevent_server_ish.c | 2 +- src/mystery_gift.c | 4 +-- src/scrcmd.c | 2 +- src/script.c | 6 ++-- 7 files changed, 71 insertions(+), 71 deletions(-) (limited to 'src') diff --git a/src/mevent2.c b/src/mevent2.c index 8585224ef..f36e5d06b 100755 --- a/src/mevent2.c +++ b/src/mevent2.c @@ -15,8 +15,8 @@ static EWRAM_DATA bool32 gUnknown_02022C70 = FALSE; static void sub_801B180(void); static void s_DestroyWonderNews(void); -static bool32 sub_801B114(const struct MEventBuffer_3120_Sub *data); -static bool32 sub_801B2CC(const struct MEventBuffer_32E0_Sub *data); +static bool32 sub_801B114(const struct WonderNews *data); +static bool32 sub_801B2CC(const struct WonderCard *data); static void sub_801B330(void); static void sub_801B368(void); static void sub_801B9F8(void); @@ -29,14 +29,14 @@ void sub_801AFD8(void) sub_811F8BC(); } -struct MEventBuffer_3120_Sub *sav1_get_mevent_buffer_0(void) +struct WonderNews *GetSavedWonderNews(void) { - return &gSaveBlock1Ptr->unk_322C.buffer_000.data; + return &gSaveBlock1Ptr->unk_322C.wonderNews.data; } -struct MEventBuffer_32E0_Sub *sav1_get_mevent_buffer_1(void) +struct WonderCard *GetSavedWonderCard(void) { - return &gSaveBlock1Ptr->unk_322C.buffer_1c0.data; + return &gSaveBlock1Ptr->unk_322C.wonderCard.data; } struct MEventBuffer_3430_Sub *sav1_get_mevent_buffer_2(void) @@ -59,28 +59,28 @@ void DestroyWonderNews(void) s_DestroyWonderNews(); } -bool32 sub_801B078(const struct MEventBuffer_3120_Sub *src) +bool32 sub_801B078(const struct WonderNews *src) { if (!sub_801B114(src)) return FALSE; s_DestroyWonderNews(); - gSaveBlock1Ptr->unk_322C.buffer_000.data = *src; - gSaveBlock1Ptr->unk_322C.buffer_000.crc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.buffer_000.data, sizeof(struct MEventBuffer_3120_Sub)); + gSaveBlock1Ptr->unk_322C.wonderNews.data = *src; + gSaveBlock1Ptr->unk_322C.wonderNews.crc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.wonderNews.data, sizeof(struct WonderNews)); return TRUE; } bool32 ValidateReceivedWonderNews(void) { - if (CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.buffer_000.data, sizeof(struct MEventBuffer_3120_Sub)) != gSaveBlock1Ptr->unk_322C.buffer_000.crc) + if (CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.wonderNews.data, sizeof(struct WonderNews)) != gSaveBlock1Ptr->unk_322C.wonderNews.crc) return FALSE; - if (!sub_801B114(&gSaveBlock1Ptr->unk_322C.buffer_000.data)) + if (!sub_801B114(&gSaveBlock1Ptr->unk_322C.wonderNews.data)) return FALSE; return TRUE; } -static bool32 sub_801B114(const struct MEventBuffer_3120_Sub *data) +static bool32 sub_801B114(const struct WonderNews *data) { if (data->unk_00 == 0) return FALSE; @@ -90,7 +90,7 @@ static bool32 sub_801B114(const struct MEventBuffer_3120_Sub *data) bool32 WonderNews_Test_Unk_02(void) { - const struct MEventBuffer_3120_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_000.data; + const struct WonderNews *data = &gSaveBlock1Ptr->unk_322C.wonderNews.data; if (data->unk_02 == 0) return FALSE; @@ -99,8 +99,8 @@ bool32 WonderNews_Test_Unk_02(void) static void s_DestroyWonderNews(void) { - CpuFill32(0, sav1_get_mevent_buffer_0(), sizeof(gSaveBlock1Ptr->unk_322C.buffer_000.data)); - gSaveBlock1Ptr->unk_322C.buffer_000.crc = 0; + CpuFill32(0, GetSavedWonderNews(), sizeof(gSaveBlock1Ptr->unk_322C.wonderNews.data)); + gSaveBlock1Ptr->unk_322C.wonderNews.crc = 0; } static void sub_801B180(void) @@ -111,12 +111,12 @@ static void sub_801B180(void) bool32 sub_801B1A4(const u8 *src) { - const u8 *r5 = (const u8 *)&gSaveBlock1Ptr->unk_322C.buffer_000.data; + const u8 *r5 = (const u8 *)&gSaveBlock1Ptr->unk_322C.wonderNews.data; u32 i; if (!ValidateReceivedWonderNews()) return FALSE; - for (i = 0; i < sizeof(struct MEventBuffer_3120_Sub); i++) + for (i = 0; i < sizeof(struct WonderNews); i++) { if (r5[i] != src[i]) return FALSE; @@ -136,35 +136,35 @@ void DestroyWonderCard(void) ClearEReaderTrainer(&gSaveBlock2Ptr->frontier.ereaderTrainer); } -bool32 sub_801B21C(const struct MEventBuffer_32E0_Sub *data) +bool32 sub_801B21C(const struct WonderCard *data) { struct MEventBuffer_3430_Sub *r2; - struct MEventBuffer_32E0_Sub *r1; + struct WonderCard *r1; if (!sub_801B2CC(data)) return FALSE; DestroyWonderCard(); - memcpy(&gSaveBlock1Ptr->unk_322C.buffer_1c0.data, data, sizeof(struct MEventBuffer_32E0_Sub)); - gSaveBlock1Ptr->unk_322C.buffer_1c0.crc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.buffer_1c0.data, sizeof(struct MEventBuffer_32E0_Sub)); + memcpy(&gSaveBlock1Ptr->unk_322C.wonderCard.data, data, sizeof(struct WonderCard)); + gSaveBlock1Ptr->unk_322C.wonderCard.crc = CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.wonderCard.data, sizeof(struct WonderCard)); r2 = &gSaveBlock1Ptr->unk_322C.buffer_310.data; - r1 = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data; + r1 = &gSaveBlock1Ptr->unk_322C.wonderCard.data; r2->unk_06 = r1->unk_02; return TRUE; } bool32 ValidateReceivedWonderCard(void) { - if (gSaveBlock1Ptr->unk_322C.buffer_1c0.crc != CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.buffer_1c0.data, sizeof(struct MEventBuffer_32E0_Sub))) + if (gSaveBlock1Ptr->unk_322C.wonderCard.crc != CalcCRC16WithTable((void *)&gSaveBlock1Ptr->unk_322C.wonderCard.data, sizeof(struct WonderCard))) return FALSE; - if (!sub_801B2CC(&gSaveBlock1Ptr->unk_322C.buffer_1c0.data)) + if (!sub_801B2CC(&gSaveBlock1Ptr->unk_322C.wonderCard.data)) return FALSE; - if (!sub_80991F8()) + if (!ValidateSavedRamScript()) return FALSE; return TRUE; } -static bool32 sub_801B2CC(const struct MEventBuffer_32E0_Sub *data) +static bool32 sub_801B2CC(const struct WonderCard *data) { if (data->unk_00 == 0) return FALSE; @@ -182,7 +182,7 @@ static bool32 sub_801B2CC(const struct MEventBuffer_32E0_Sub *data) bool32 WonderCard_Test_Unk_08_6(void) { - const struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data; + const struct WonderCard *data = &gSaveBlock1Ptr->unk_322C.wonderCard.data; if (data->unk_08_6 == 0) return FALSE; @@ -191,8 +191,8 @@ bool32 WonderCard_Test_Unk_08_6(void) static void sub_801B330(void) { - CpuFill32(0, &gSaveBlock1Ptr->unk_322C.buffer_1c0.data, sizeof(struct MEventBuffer_32E0_Sub)); - gSaveBlock1Ptr->unk_322C.buffer_1c0.crc = 0; + CpuFill32(0, &gSaveBlock1Ptr->unk_322C.wonderCard.data, sizeof(struct WonderCard)); + gSaveBlock1Ptr->unk_322C.wonderCard.crc = 0; } static void sub_801B368(void) @@ -204,12 +204,12 @@ static void sub_801B368(void) u16 GetWonderCardFlagID(void) { if (ValidateReceivedWonderCard()) - return gSaveBlock1Ptr->unk_322C.buffer_1c0.data.unk_00; + return gSaveBlock1Ptr->unk_322C.wonderCard.data.unk_00; return 0; } -void sub_801B3C0(struct MEventBuffer_32E0_Sub *buffer) +void WonderCard_ResetInternalReceivedFlag(struct WonderCard *buffer) { if (buffer->unk_08_6 == 1) buffer->unk_08_6 = 0; @@ -299,11 +299,11 @@ static bool32 sub_801B4A4(const u16 *data) static int sub_801B4CC(void) { - struct MEventBuffer_32E0_Sub *data; + struct WonderCard *data; if (!ValidateReceivedWonderCard()) return 0; - data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data; + data = &gSaveBlock1Ptr->unk_322C.wonderCard.data; if (data->unk_08_0 != 1) return 0; @@ -312,7 +312,7 @@ static int sub_801B4CC(void) bool32 sub_801B508(const u16 *data) { - struct MEventBuffer_32E0_Sub *buffer = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data; + struct WonderCard *buffer = &gSaveBlock1Ptr->unk_322C.wonderCard.data; int size = buffer->unk_09; int i; if (!sub_801B4A4(data)) @@ -355,9 +355,9 @@ void sub_801B580(struct MEventStruct_Unk1442CC *data, bool32 a1) if (ValidateReceivedWonderCard()) { - data->unk_14 = sav1_get_mevent_buffer_1()->unk_00; + data->unk_14 = GetSavedWonderCard()->unk_00; data->unk_20 = *sav1_get_mevent_buffer_2(); - data->unk_44 = sav1_get_mevent_buffer_1()->unk_09; + data->unk_44 = GetSavedWonderCard()->unk_09; } else { @@ -422,7 +422,7 @@ u32 sub_801B708(const u16 *a0, const struct MEventStruct_Unk1442CC *a1, const vo return 2; } -bool32 sub_801B748(const struct MEventStruct_Unk1442CC *a0, const u16 *a1) +bool32 MEventStruct_Unk1442CC_CompareField_unk_16(const struct MEventStruct_Unk1442CC *a0, const u16 *a1) { int i; for (i = 0; i < 4; i++) @@ -439,7 +439,7 @@ static int sub_801B770(const struct MEventStruct_Unk1442CC *a0) return sub_801B438(&a0->unk_20, a0->unk_44); } -u16 sub_801B784(const struct MEventStruct_Unk1442CC *a0, u32 command) +u16 MEventStruct_Unk1442CC_GetValueNFrom_unk_20(const struct MEventStruct_Unk1442CC *a0, u32 command) { switch (command) { @@ -461,7 +461,7 @@ u16 sub_801B784(const struct MEventStruct_Unk1442CC *a0, u32 command) static void sub_801B7D8(u32 command) { - struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data; + struct WonderCard *data = &gSaveBlock1Ptr->unk_322C.wonderCard.data; if (data->unk_08_0 == 2) { u16 *dest = NULL; @@ -495,7 +495,7 @@ u16 mevent_081445C0(u32 command) { case 0: { - struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data; + struct WonderCard *data = &gSaveBlock1Ptr->unk_322C.wonderCard.data; if (data->unk_08_0 == 2) { struct MEventBuffer_3430_Sub *buffer = &gSaveBlock1Ptr->unk_322C.buffer_310.data; @@ -505,7 +505,7 @@ u16 mevent_081445C0(u32 command) } case 1: { - struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data; + struct WonderCard *data = &gSaveBlock1Ptr->unk_322C.wonderCard.data; if (data->unk_08_0 == 2) { struct MEventBuffer_3430_Sub *buffer = &gSaveBlock1Ptr->unk_322C.buffer_310.data; @@ -515,7 +515,7 @@ u16 mevent_081445C0(u32 command) } case 2: { - struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data; + struct WonderCard *data = &gSaveBlock1Ptr->unk_322C.wonderCard.data; if (data->unk_08_0 == 2) { struct MEventBuffer_3430_Sub *buffer = &gSaveBlock1Ptr->unk_322C.buffer_310.data; @@ -525,14 +525,14 @@ u16 mevent_081445C0(u32 command) } case 3: { - struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data; + struct WonderCard *data = &gSaveBlock1Ptr->unk_322C.wonderCard.data; if (data->unk_08_0 == 1) return sub_801B4CC(); break; } case 4: { - struct MEventBuffer_32E0_Sub *data = &gSaveBlock1Ptr->unk_322C.buffer_1c0.data; + struct WonderCard *data = &gSaveBlock1Ptr->unk_322C.wonderCard.data; if (data->unk_08_0 == 1) return data->unk_09; break; @@ -557,7 +557,7 @@ bool32 sub_801B94C(u16 a0) if (!ValidateReceivedWonderCard()) return FALSE; - if (gSaveBlock1Ptr->unk_322C.buffer_1c0.data.unk_00 != a0) + if (gSaveBlock1Ptr->unk_322C.wonderCard.data.unk_00 != a0) return FALSE; gUnknown_02022C70 = TRUE; diff --git a/src/mevent_801BAAC.c b/src/mevent_801BAAC.c index 24a999f69..62240af98 100644 --- a/src/mevent_801BAAC.c +++ b/src/mevent_801BAAC.c @@ -35,7 +35,7 @@ struct UnkStruct_203F3C8_02DC struct UnkStruct_203F3C8 { - /*0000*/ struct MEventBuffer_32E0_Sub unk_0000; + /*0000*/ struct WonderCard unk_0000; /*014c*/ struct MEventBuffer_3430_Sub unk_014C; /*0170*/ const struct UnkStruct_8467FB8 * unk_0170; /*0174*/ u8 unk_0174; @@ -150,7 +150,7 @@ const struct UnkStruct_8467FB8 gUnknown_082F1D60[8] = { {1, 0, 0, 7, gWonderCardBgGfx8, gWonderCardBgTilemap8, gWonderCardBgPal8} }; -bool32 InitWonderCardResources(struct MEventBuffer_32E0_Sub * r5, struct MEventBuffer_3430_Sub * r6) +bool32 InitWonderCardResources(struct WonderCard * r5, struct MEventBuffer_3430_Sub * r6) { if (r5 == NULL || r6 == NULL) return FALSE; @@ -465,7 +465,7 @@ void sub_801C61C(void) struct UnkStruct_203F3CC { - /*0000*/ struct MEventBuffer_3120_Sub unk_0000; + /*0000*/ struct WonderNews unk_0000; /*01bc*/ const struct UnkStruct_8467FB8 * unk_01BC; /*01c0*/ u8 unk_01C0_0:1; u8 unk_01C0_1:7; @@ -542,7 +542,7 @@ const struct UnkStruct_8467FB8 gUnknown_082F24C8[] = { {1, 0, 0, 0, gWonderNewsGfx8, gWonderNewsTilemap8, gWonderNewsPal8} }; -bool32 InitWonderNewsResources(const struct MEventBuffer_3120_Sub * a0) +bool32 InitWonderNewsResources(const struct WonderNews * a0) { if (a0 == NULL) return FALSE; diff --git a/src/mevent_server.c b/src/mevent_server.c index fe13943ff..06b10dd95 100644 --- a/src/mevent_server.c +++ b/src/mevent_server.c @@ -46,8 +46,8 @@ static void mevent_srv_init_common(struct mevent_srv_common * svr, const void * { svr->unk_00 = 0; svr->mainseqno = 0; - svr->mevent_32e0 = AllocZeroed(sizeof(struct MEventBuffer_32E0_Sub)); - svr->mevent_3120 = AllocZeroed(sizeof(struct MEventBuffer_3120_Sub)); + svr->wonder_card = AllocZeroed(sizeof(struct WonderCard)); + svr->wonder_news = AllocZeroed(sizeof(struct WonderNews)); svr->recvBuffer = AllocZeroed(ME_SEND_BUF_SIZE); svr->mevent_unk1442cc = AllocZeroed(sizeof(struct MEventStruct_Unk1442CC)); svr->cmdBuffer = cmdBuffer; @@ -57,8 +57,8 @@ static void mevent_srv_init_common(struct mevent_srv_common * svr, const void * static void mevent_srv_free_resources(struct mevent_srv_common * svr) { - Free(svr->mevent_32e0); - Free(svr->mevent_3120); + Free(svr->wonder_card); + Free(svr->wonder_news); Free(svr->recvBuffer); Free(svr->mevent_unk1442cc); } @@ -176,7 +176,7 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr) case 7: // check_crc AGB_ASSERT(cmd->flag == FALSE); - ptr = mevent_first_if_not_null_else_second(cmd->parameter, svr->mevent_32e0); + ptr = mevent_first_if_not_null_else_second(cmd->parameter, svr->wonder_card); svr->param = sub_801B6EC(ptr, svr->mevent_unk1442cc, ptr); break; case 8: @@ -192,11 +192,11 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr) break; case 10: AGB_ASSERT(cmd->parameter == NULL); - svr->param = sub_801B784(svr->mevent_unk1442cc, cmd->flag); + svr->param = MEventStruct_Unk1442CC_GetValueNFrom_unk_20(svr->mevent_unk1442cc, cmd->flag); break; case 11: AGB_ASSERT(cmd->flag == FALSE); - svr->param = sub_801B748(svr->mevent_unk1442cc, cmd->parameter); + svr->param = MEventStruct_Unk1442CC_CompareField_unk_16(svr->mevent_unk1442cc, cmd->parameter); break; case 12: AGB_ASSERT(cmd->flag == FALSE); @@ -204,11 +204,11 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr) break; case 14: AGB_ASSERT(cmd->flag == FALSE); - mevent_srv_common_init_send(svr, 0x17, mevent_first_if_not_null_else_second(cmd->parameter, svr->mevent_3120), sizeof(struct MEventBuffer_3120_Sub)); + mevent_srv_common_init_send(svr, 0x17, mevent_first_if_not_null_else_second(cmd->parameter, svr->wonder_news), sizeof(struct WonderNews)); break; case 13: AGB_ASSERT(cmd->flag == FALSE); - mevent_srv_common_init_send(svr, 0x16, mevent_first_if_not_null_else_second(cmd->parameter, svr->mevent_32e0), sizeof(struct MEventBuffer_32E0_Sub)); + mevent_srv_common_init_send(svr, 0x16, mevent_first_if_not_null_else_second(cmd->parameter, svr->wonder_card), sizeof(struct WonderCard)); break; case 16: AGB_ASSERT(cmd->flag == FALSE); @@ -238,11 +238,11 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr) break; case 22: AGB_ASSERT(cmd->flag == FALSE); - memcpy(svr->mevent_32e0, cmd->parameter, 332); + memcpy(svr->wonder_card, cmd->parameter, 332); break; case 23: AGB_ASSERT(cmd->flag == FALSE); - memcpy(svr->mevent_3120, cmd->parameter, 444); + memcpy(svr->wonder_news, cmd->parameter, 444); break; case 21: AGB_ASSERT(cmd->flag == FALSE); @@ -258,16 +258,16 @@ static u32 common_mainseq_4(struct mevent_srv_common * svr) break; case 26: AGB_ASSERT(cmd->flag == FALSE && cmd->parameter == NULL); - memcpy(svr->mevent_32e0, sav1_get_mevent_buffer_1(), 332); - sub_801B3C0(svr->mevent_32e0); + memcpy(svr->wonder_card, GetSavedWonderCard(), 332); + WonderCard_ResetInternalReceivedFlag(svr->wonder_card); break; case 27: AGB_ASSERT(cmd->flag == FALSE && cmd->parameter == NULL); - memcpy(svr->mevent_3120, sav1_get_mevent_buffer_0(), 444); + memcpy(svr->wonder_news, GetSavedWonderNews(), 444); break; case 28: AGB_ASSERT(cmd->flag == FALSE && cmd->parameter == NULL); - svr->sendBuffer1 = sub_8099244(); + svr->sendBuffer1 = GetSavedRamScriptIfValid(); break; case 29: mevent_srv_common_init_send(svr, 0x1b, cmd->parameter, cmd->flag); diff --git a/src/mevent_server_ish.c b/src/mevent_server_ish.c index 0303bfd9b..48f72eaad 100644 --- a/src/mevent_server_ish.c +++ b/src/mevent_server_ish.c @@ -216,7 +216,7 @@ static u32 ish_mainseq_4(struct mevent_srv_ish * svr) sub_801B508(svr->recvBuffer); break; case 17: - sub_80992A0(svr->recvBuffer, 1000); + InitRamScript_NoEventObject(svr->recvBuffer, 1000); break; case 18: memcpy(&gSaveBlock2Ptr->frontier.ereaderTrainer, svr->recvBuffer, 0xbc); diff --git a/src/mystery_gift.c b/src/mystery_gift.c index c8b3a9060..c935e9b25 100644 --- a/src/mystery_gift.c +++ b/src/mystery_gift.c @@ -815,11 +815,11 @@ static bool32 HandleLoadWonderCardOrNews(u8 * state, bool32 cardOrNews) case 0: if (cardOrNews == 0) { - InitWonderCardResources(sav1_get_mevent_buffer_1(), sav1_get_mevent_buffer_2()); + InitWonderCardResources(GetSavedWonderCard(), sav1_get_mevent_buffer_2()); } else { - InitWonderNewsResources(sav1_get_mevent_buffer_0()); + InitWonderNewsResources(GetSavedWonderNews()); } (*state)++; break; diff --git a/src/scrcmd.c b/src/scrcmd.c index 314504600..0b1006cef 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -2217,7 +2217,7 @@ bool8 ScrCmd_checkmonobedience(struct ScriptContext *ctx) bool8 ScrCmd_cmdCF(struct ScriptContext *ctx) { - const u8* v1 = sub_8099244(); + const u8* v1 = GetSavedRamScriptIfValid(); if (v1) { diff --git a/src/script.c b/src/script.c index cb06300bf..27476dba3 100644 --- a/src/script.c +++ b/src/script.c @@ -386,7 +386,7 @@ const u8 *GetRamScript(u8 objectId, const u8 *script) } } -bool32 sub_80991F8(void) +bool32 ValidateSavedRamScript(void) { struct RamScriptData *scriptData = &gSaveBlock1Ptr->ramScript.data; if (scriptData->magic != RAM_SCRIPT_MAGIC) @@ -402,7 +402,7 @@ bool32 sub_80991F8(void) return TRUE; } -u8 *sub_8099244(void) +u8 *GetSavedRamScriptIfValid(void) { struct RamScriptData *scriptData = &gSaveBlock1Ptr->ramScript.data; if (!ValidateReceivedWonderCard()) @@ -426,7 +426,7 @@ u8 *sub_8099244(void) } } -void sub_80992A0(u8 *script, u16 scriptSize) +void InitRamScript_NoEventObject(u8 *script, u16 scriptSize) { if (scriptSize > sizeof(gSaveBlock1Ptr->ramScript.data.script)) scriptSize = sizeof(gSaveBlock1Ptr->ramScript.data.script); -- cgit v1.2.3 From d0384ee95e124f16e33cdfbf1d18d02ef97145b4 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 2 Apr 2019 14:02:13 -0400 Subject: mevent_server_ish --> mevent_client --- src/mevent_client.c | 291 ++++++++++++++++++++++++++++++++++++++++++++++++ src/mevent_scripts.c | 28 ++--- src/mevent_server_ish.c | 291 ------------------------------------------------ src/mystery_gift.c | 52 ++++----- 4 files changed, 331 insertions(+), 331 deletions(-) create mode 100644 src/mevent_client.c delete mode 100644 src/mevent_server_ish.c (limited to 'src') diff --git a/src/mevent_client.c b/src/mevent_client.c new file mode 100644 index 000000000..cdf976a41 --- /dev/null +++ b/src/mevent_client.c @@ -0,0 +1,291 @@ +#include "global.h" +#include "alloc.h" +#include "decompress.h" +#include "overworld.h" +#include "script.h" +#include "battle_tower.h" +#include "mevent.h" +#include "mystery_event_script.h" +#include "mevent_client.h" + +EWRAM_DATA struct mevent_client * s_mevent_client_ptr = NULL; + +static void mevent_client_init(struct mevent_client *, u32, u32); +static u32 mevent_client_exec(struct mevent_client *); +static void mevent_client_free_resources(struct mevent_client *); + +extern const struct mevent_client_cmd gUnknown_082F2598[]; + +void mevent_client_do_init(u32 arg) +{ + s_mevent_client_ptr = AllocZeroed(sizeof(struct mevent_client)); + mevent_client_init(s_mevent_client_ptr, 1, 0); + s_mevent_client_ptr->unk_4C = arg; +} + +u32 mevent_client_do_exec(u16 * a0) +{ + u32 result; + if (s_mevent_client_ptr == NULL) + return 6; + result = mevent_client_exec(s_mevent_client_ptr); + if (result == 6) + { + *a0 = s_mevent_client_ptr->param; + mevent_client_free_resources(s_mevent_client_ptr); + Free(s_mevent_client_ptr); + s_mevent_client_ptr = NULL; + } + return result; +} + +void mevent_client_inc_flag(void) +{ + s_mevent_client_ptr->flag++; +} + +void * mevent_client_get_buffer(void) +{ + return s_mevent_client_ptr->buffer; +} + +void mevent_client_set_param(u32 a0) +{ + s_mevent_client_ptr->param = a0; +} + +static void mevent_client_init(struct mevent_client * svr, u32 sendPlayerNo, u32 recvPlayerNo) +{ + svr->unk_00 = 0; + svr->mainseqno = 0; + svr->flag = 0; + svr->sendBuffer = AllocZeroed(ME_SEND_BUF_SIZE); + svr->recvBuffer = AllocZeroed(ME_SEND_BUF_SIZE); + svr->cmdBuffer = AllocZeroed(ME_SEND_BUF_SIZE); + svr->buffer = AllocZeroed(0x40); + mevent_srv_sub_init(&svr->manager, sendPlayerNo, recvPlayerNo); +} + +static void mevent_client_free_resources(struct mevent_client * svr) +{ + Free(svr->sendBuffer); + Free(svr->recvBuffer); + Free(svr->cmdBuffer); + Free(svr->buffer); +} + +static void mevent_client_jmp_buffer(struct mevent_client * svr) +{ + memcpy(svr->cmdBuffer, svr->recvBuffer, ME_SEND_BUF_SIZE); + svr->cmdidx = 0; +} + +static void mevent_client_send_word(struct mevent_client * svr, u32 ident, u32 word) +{ + CpuFill32(0, svr->sendBuffer, ME_SEND_BUF_SIZE); + *(u32 *)svr->sendBuffer = word; + mevent_srv_sub_init_send(&svr->manager, ident, svr->sendBuffer, sizeof(u32)); +} + +static u32 ish_mainseq_0(struct mevent_client * svr) +{ + // init + memcpy(svr->cmdBuffer, gUnknown_082F2598, ME_SEND_BUF_SIZE); + svr->cmdidx = 0; + svr->mainseqno = 4; + svr->flag = 0; + return 0; +} + +static u32 ish_mainseq_1(struct mevent_client * svr) +{ + // done + return 6; +} + + +static u32 ish_mainseq_2(struct mevent_client * svr) +{ + // do recv + if (mevent_srv_sub_recv(&svr->manager)) + { + svr->mainseqno = 4; + svr->flag = 0; + } + return 1; +} + +static u32 ish_mainseq_3(struct mevent_client * svr) +{ + // do send + if (mevent_srv_sub_send(&svr->manager)) + { + svr->mainseqno = 4; + svr->flag = 0; + } + return 1; +} + +static u32 ish_mainseq_4(struct mevent_client * svr) +{ + // process command + struct mevent_client_cmd * cmd = &svr->cmdBuffer[svr->cmdidx]; + ++svr->cmdidx; + switch (cmd->instr) + { + case 0: + break; + case 1: + svr->param = cmd->parameter; + svr->mainseqno = 1; + svr->flag = 0; + break; + case 2: + mevent_srv_sub_init_recv(&svr->manager, cmd->parameter, svr->recvBuffer); + svr->mainseqno = 2; + svr->flag = 0; + break; + case 3: + svr->mainseqno = 3; + svr->flag = 0; + break; + case 20: + mevent_srv_sub_init_send(&svr->manager, 0x14, svr->sendBuffer, 0); + svr->mainseqno = 3; + svr->flag = 0; + break; + case 19: + mevent_client_send_word(svr, 0x12, GetGameStat(cmd->parameter)); + svr->mainseqno = 3; + svr->flag = 0; + break; + case 6: + if (svr->param == 0) + mevent_client_jmp_buffer(svr); + break; + case 7: + if (svr->param == 1) + mevent_client_jmp_buffer(svr); + break; + case 4: + mevent_client_jmp_buffer(svr); + break; + case 5: + memcpy(svr->buffer, svr->recvBuffer, 0x40); + svr->mainseqno = 5; + svr->flag = 0; + return 2; + case 11: + memcpy(svr->buffer, svr->recvBuffer, 0x40); + svr->mainseqno = 5; + svr->flag = 0; + return 3; + case 12: + memcpy(svr->buffer, svr->recvBuffer, 0x40); + svr->mainseqno = 5; + svr->flag = 0; + return 5; + case 13: + svr->mainseqno = 5; + svr->flag = 0; + return 4; + case 8: + sub_801B580(svr->sendBuffer, svr->unk_4C); + mevent_srv_sub_init_send(&svr->manager, 0x11, svr->sendBuffer, sizeof(struct MEventStruct_Unk1442CC)); + break; + case 14: + mevent_client_send_word(svr, 0x13, svr->param); + break; + case 10: + sub_801B21C(svr->recvBuffer); + break; + case 9: + if (!sub_801B1A4(svr->recvBuffer)) + { + sub_801B078(svr->recvBuffer); + mevent_client_send_word(svr, 0x13, 0); + } + else + mevent_client_send_word(svr, 0x13, 1); + break; + case 15: + svr->mainseqno = 6; + svr->flag = 0; + break; + case 16: + sub_801B508(svr->recvBuffer); + break; + case 17: + InitRamScript_NoEventObject(svr->recvBuffer, 1000); + break; + case 18: + memcpy(&gSaveBlock2Ptr->frontier.ereaderTrainer, svr->recvBuffer, 0xbc); + ValidateEReaderTrainer(); + break; + case 21: + memcpy(gDecompressionBuffer, svr->recvBuffer, ME_SEND_BUF_SIZE); + svr->mainseqno = 7; + svr->flag = 0; + break; + } + + return 1; +} + +static u32 ish_mainseq_5(struct mevent_client * svr) +{ + // wait flag + if (svr->flag) + { + svr->mainseqno = 4; + svr->flag = 0; + } + return 1; +} + +static u32 ish_mainseq_6(struct mevent_client * svr) +{ + // ??? + switch (svr->flag) + { + case 0: + sub_8153870(svr->recvBuffer); + ++svr->flag; + break; + case 1: + if (!sub_8153884(&svr->param)) + { + svr->mainseqno = 4; + svr->flag = 0; + } + break; + } + return 1; +} + +static u32 ish_mainseq_7(struct mevent_client * svr) +{ + // exec arbitrary code + u32 (*func)(u32 *, struct SaveBlock2 *, struct SaveBlock1 *) = (void *)gDecompressionBuffer; + if (func(&svr->param, gSaveBlock2Ptr, gSaveBlock1Ptr) == 1) + { + svr->mainseqno = 4; + svr->flag = 0; + } + return 1; +} + +static u32 mevent_client_exec(struct mevent_client * svr) +{ + u32 (*funcs[])(struct mevent_client *) = { + ish_mainseq_0, + ish_mainseq_1, + ish_mainseq_2, + ish_mainseq_3, + ish_mainseq_4, + ish_mainseq_5, + ish_mainseq_6, + ish_mainseq_7 + }; + return funcs[svr->mainseqno](svr); +} diff --git a/src/mevent_scripts.c b/src/mevent_scripts.c index 29b37119e..41a5ddd51 100644 --- a/src/mevent_scripts.c +++ b/src/mevent_scripts.c @@ -1,38 +1,38 @@ #include "global.h" -#include "mevent_server_ish.h" +#include "mevent_client.h" #include "mevent_server.h" const u8 gText_CanceledReadingCard[] = _("Canceled reading\nthe Card."); -const struct mevent_cmd_ish gUnknown_082F2598[] = { +const struct mevent_client_cmd gUnknown_082F2598[] = { {.instr = 2, .parameter = 16}, {.instr = 4, .parameter = 0} }; -const struct mevent_cmd_ish gUnknown_082F25A8[] = { +const struct mevent_client_cmd gUnknown_082F25A8[] = { {.instr = 8, .parameter = 0}, {.instr = 3, .parameter = 0}, {.instr = 2, .parameter = 16}, {.instr = 4, .parameter = 0} }; -const struct mevent_cmd_ish gUnknown_082F25C8[] = { +const struct mevent_client_cmd gUnknown_082F25C8[] = { {.instr = 20, .parameter = 0}, {.instr = 1, .parameter = 10} }; -const struct mevent_cmd_ish gUnknown_082F25D8[] = { +const struct mevent_client_cmd gUnknown_082F25D8[] = { {.instr = 20, .parameter = 0}, {.instr = 1, .parameter = 11} }; -const struct mevent_cmd_ish gUnknown_082F25E8[] = { +const struct mevent_client_cmd gUnknown_082F25E8[] = { {.instr = 20, .parameter = 0}, {.instr = 1, .parameter = 0} }; -const struct mevent_cmd_ish gUnknown_082F25F8[] = { +const struct mevent_client_cmd gUnknown_082F25F8[] = { {.instr = 2, .parameter = 22}, {.instr = 10, .parameter = 0}, {.instr = 2, .parameter = 25}, @@ -41,7 +41,7 @@ const struct mevent_cmd_ish gUnknown_082F25F8[] = { {.instr = 1, .parameter = 2} }; -const struct mevent_cmd_ish gUnknown_082F2628[] = { +const struct mevent_client_cmd gUnknown_082F2628[] = { {.instr = 2, .parameter = 23}, {.instr = 9, .parameter = 0}, {.instr = 3, .parameter = 0}, @@ -49,17 +49,17 @@ const struct mevent_cmd_ish gUnknown_082F2628[] = { {.instr = 4, .parameter = 0} }; -const struct mevent_cmd_ish gUnknown_082F2650[] = { +const struct mevent_client_cmd gUnknown_082F2650[] = { {.instr = 20, .parameter = 0}, {.instr = 1, .parameter = 7} }; -const struct mevent_cmd_ish gUnknown_082F2660[] = { +const struct mevent_client_cmd gUnknown_082F2660[] = { {.instr = 20, .parameter = 0}, {.instr = 1, .parameter = 3} }; -const struct mevent_cmd_ish gUnknown_082F2670[] = { +const struct mevent_client_cmd gUnknown_082F2670[] = { {.instr = 13, .parameter = 0}, {.instr = 14, .parameter = 0}, {.instr = 3, .parameter = 0}, @@ -67,17 +67,17 @@ const struct mevent_cmd_ish gUnknown_082F2670[] = { {.instr = 4, .parameter = 0} }; -const struct mevent_cmd_ish gUnknown_082F2698[] = { +const struct mevent_client_cmd gUnknown_082F2698[] = { {.instr = 20, .parameter = 0}, {.instr = 1, .parameter = 9} }; -const struct mevent_cmd_ish gUnknown_082F26A8[] = { +const struct mevent_client_cmd gUnknown_082F26A8[] = { {.instr = 20, .parameter = 0}, {.instr = 1, .parameter = 5} }; -const struct mevent_cmd_ish gUnknown_082F26B8[] = { +const struct mevent_client_cmd gUnknown_082F26B8[] = { {.instr = 2, .parameter = 21}, {.instr = 12, .parameter = 0}, {.instr = 20, .parameter = 0}, diff --git a/src/mevent_server_ish.c b/src/mevent_server_ish.c deleted file mode 100644 index 48f72eaad..000000000 --- a/src/mevent_server_ish.c +++ /dev/null @@ -1,291 +0,0 @@ -#include "global.h" -#include "alloc.h" -#include "decompress.h" -#include "overworld.h" -#include "script.h" -#include "battle_tower.h" -#include "mevent.h" -#include "mystery_event_script.h" -#include "mevent_server_ish.h" - -EWRAM_DATA struct mevent_srv_ish * s_mevent_srv_ish_ptr = NULL; - -static void mevent_srv_ish_init(struct mevent_srv_ish *, u32, u32); -static u32 mevent_srv_ish_exec(struct mevent_srv_ish *); -static void mevent_srv_ish_free_resources(struct mevent_srv_ish *); - -extern const struct mevent_cmd_ish gUnknown_082F2598[]; - -void mevent_srv_ish_do_init(u32 arg) -{ - s_mevent_srv_ish_ptr = AllocZeroed(sizeof(struct mevent_srv_ish)); - mevent_srv_ish_init(s_mevent_srv_ish_ptr, 1, 0); - s_mevent_srv_ish_ptr->unk_4C = arg; -} - -u32 mevent_srv_ish_do_exec(u16 * a0) -{ - u32 result; - if (s_mevent_srv_ish_ptr == NULL) - return 6; - result = mevent_srv_ish_exec(s_mevent_srv_ish_ptr); - if (result == 6) - { - *a0 = s_mevent_srv_ish_ptr->param; - mevent_srv_ish_free_resources(s_mevent_srv_ish_ptr); - Free(s_mevent_srv_ish_ptr); - s_mevent_srv_ish_ptr = NULL; - } - return result; -} - -void mevent_srv_ish_inc_flag(void) -{ - s_mevent_srv_ish_ptr->flag++; -} - -void * mevent_srv_ish_get_buffer(void) -{ - return s_mevent_srv_ish_ptr->buffer; -} - -void mevent_srv_ish_set_param(u32 a0) -{ - s_mevent_srv_ish_ptr->param = a0; -} - -static void mevent_srv_ish_init(struct mevent_srv_ish * svr, u32 sendPlayerNo, u32 recvPlayerNo) -{ - svr->unk_00 = 0; - svr->mainseqno = 0; - svr->flag = 0; - svr->sendBuffer = AllocZeroed(ME_SEND_BUF_SIZE); - svr->recvBuffer = AllocZeroed(ME_SEND_BUF_SIZE); - svr->cmdBuffer = AllocZeroed(ME_SEND_BUF_SIZE); - svr->buffer = AllocZeroed(0x40); - mevent_srv_sub_init(&svr->manager, sendPlayerNo, recvPlayerNo); -} - -static void mevent_srv_ish_free_resources(struct mevent_srv_ish * svr) -{ - Free(svr->sendBuffer); - Free(svr->recvBuffer); - Free(svr->cmdBuffer); - Free(svr->buffer); -} - -static void mevent_srv_ish_jmp_buffer(struct mevent_srv_ish * svr) -{ - memcpy(svr->cmdBuffer, svr->recvBuffer, ME_SEND_BUF_SIZE); - svr->cmdidx = 0; -} - -static void mevent_srv_ish_send_word(struct mevent_srv_ish * svr, u32 ident, u32 word) -{ - CpuFill32(0, svr->sendBuffer, ME_SEND_BUF_SIZE); - *(u32 *)svr->sendBuffer = word; - mevent_srv_sub_init_send(&svr->manager, ident, svr->sendBuffer, sizeof(u32)); -} - -static u32 ish_mainseq_0(struct mevent_srv_ish * svr) -{ - // init - memcpy(svr->cmdBuffer, gUnknown_082F2598, ME_SEND_BUF_SIZE); - svr->cmdidx = 0; - svr->mainseqno = 4; - svr->flag = 0; - return 0; -} - -static u32 ish_mainseq_1(struct mevent_srv_ish * svr) -{ - // done - return 6; -} - - -static u32 ish_mainseq_2(struct mevent_srv_ish * svr) -{ - // do recv - if (mevent_srv_sub_recv(&svr->manager)) - { - svr->mainseqno = 4; - svr->flag = 0; - } - return 1; -} - -static u32 ish_mainseq_3(struct mevent_srv_ish * svr) -{ - // do send - if (mevent_srv_sub_send(&svr->manager)) - { - svr->mainseqno = 4; - svr->flag = 0; - } - return 1; -} - -static u32 ish_mainseq_4(struct mevent_srv_ish * svr) -{ - // process command - struct mevent_cmd_ish * cmd = &svr->cmdBuffer[svr->cmdidx]; - ++svr->cmdidx; - switch (cmd->instr) - { - case 0: - break; - case 1: - svr->param = cmd->parameter; - svr->mainseqno = 1; - svr->flag = 0; - break; - case 2: - mevent_srv_sub_init_recv(&svr->manager, cmd->parameter, svr->recvBuffer); - svr->mainseqno = 2; - svr->flag = 0; - break; - case 3: - svr->mainseqno = 3; - svr->flag = 0; - break; - case 20: - mevent_srv_sub_init_send(&svr->manager, 0x14, svr->sendBuffer, 0); - svr->mainseqno = 3; - svr->flag = 0; - break; - case 19: - mevent_srv_ish_send_word(svr, 0x12, GetGameStat(cmd->parameter)); - svr->mainseqno = 3; - svr->flag = 0; - break; - case 6: - if (svr->param == 0) - mevent_srv_ish_jmp_buffer(svr); - break; - case 7: - if (svr->param == 1) - mevent_srv_ish_jmp_buffer(svr); - break; - case 4: - mevent_srv_ish_jmp_buffer(svr); - break; - case 5: - memcpy(svr->buffer, svr->recvBuffer, 0x40); - svr->mainseqno = 5; - svr->flag = 0; - return 2; - case 11: - memcpy(svr->buffer, svr->recvBuffer, 0x40); - svr->mainseqno = 5; - svr->flag = 0; - return 3; - case 12: - memcpy(svr->buffer, svr->recvBuffer, 0x40); - svr->mainseqno = 5; - svr->flag = 0; - return 5; - case 13: - svr->mainseqno = 5; - svr->flag = 0; - return 4; - case 8: - sub_801B580(svr->sendBuffer, svr->unk_4C); - mevent_srv_sub_init_send(&svr->manager, 0x11, svr->sendBuffer, sizeof(struct MEventStruct_Unk1442CC)); - break; - case 14: - mevent_srv_ish_send_word(svr, 0x13, svr->param); - break; - case 10: - sub_801B21C(svr->recvBuffer); - break; - case 9: - if (!sub_801B1A4(svr->recvBuffer)) - { - sub_801B078(svr->recvBuffer); - mevent_srv_ish_send_word(svr, 0x13, 0); - } - else - mevent_srv_ish_send_word(svr, 0x13, 1); - break; - case 15: - svr->mainseqno = 6; - svr->flag = 0; - break; - case 16: - sub_801B508(svr->recvBuffer); - break; - case 17: - InitRamScript_NoEventObject(svr->recvBuffer, 1000); - break; - case 18: - memcpy(&gSaveBlock2Ptr->frontier.ereaderTrainer, svr->recvBuffer, 0xbc); - ValidateEReaderTrainer(); - break; - case 21: - memcpy(gDecompressionBuffer, svr->recvBuffer, ME_SEND_BUF_SIZE); - svr->mainseqno = 7; - svr->flag = 0; - break; - } - - return 1; -} - -static u32 ish_mainseq_5(struct mevent_srv_ish * svr) -{ - // wait flag - if (svr->flag) - { - svr->mainseqno = 4; - svr->flag = 0; - } - return 1; -} - -static u32 ish_mainseq_6(struct mevent_srv_ish * svr) -{ - // ??? - switch (svr->flag) - { - case 0: - sub_8153870(svr->recvBuffer); - ++svr->flag; - break; - case 1: - if (!sub_8153884(&svr->param)) - { - svr->mainseqno = 4; - svr->flag = 0; - } - break; - } - return 1; -} - -static u32 ish_mainseq_7(struct mevent_srv_ish * svr) -{ - // exec arbitrary code - u32 (*func)(u32 *, struct SaveBlock2 *, struct SaveBlock1 *) = (void *)gDecompressionBuffer; - if (func(&svr->param, gSaveBlock2Ptr, gSaveBlock1Ptr) == 1) - { - svr->mainseqno = 4; - svr->flag = 0; - } - return 1; -} - -static u32 mevent_srv_ish_exec(struct mevent_srv_ish * svr) -{ - u32 (*funcs[])(struct mevent_srv_ish *) = { - ish_mainseq_0, - ish_mainseq_1, - ish_mainseq_2, - ish_mainseq_3, - ish_mainseq_4, - ish_mainseq_5, - ish_mainseq_6, - ish_mainseq_7 - }; - return funcs[svr->mainseqno](svr); -} diff --git a/src/mystery_gift.c b/src/mystery_gift.c index c935e9b25..ab3df9020 100644 --- a/src/mystery_gift.c +++ b/src/mystery_gift.c @@ -25,7 +25,7 @@ #include "mevent_801BAAC.h" #include "save.h" #include "link.h" -#include "mevent_server_ish.h" +#include "mevent_client.h" #include "event_data.h" #include "link_rfu.h" #include "mevent_news.h" @@ -1269,7 +1269,7 @@ void task00_mystery_gift(u8 taskId) { ClearScreenInBg0(TRUE); data->state = 7; - mevent_srv_ish_do_init(data->IsCardOrNews); + mevent_client_do_init(data->IsCardOrNews); } else if (gSpecialVar_Result == 5) { @@ -1282,7 +1282,7 @@ void task00_mystery_gift(u8 taskId) data->state = 8; break; case 8: - switch (mevent_srv_ish_do_exec(&data->curPromptWindowId)) + switch (mevent_client_do_exec(&data->curPromptWindowId)) { case 6: task_add_05_task_del_08FA224_when_no_RfuFunc(); @@ -1290,8 +1290,8 @@ void task00_mystery_gift(u8 taskId) data->state = 13; break; case 5: - memcpy(data->buffer, mevent_srv_ish_get_buffer(), 0x40); - mevent_srv_ish_inc_flag(); + memcpy(data->buffer, mevent_client_get_buffer(), 0x40); + mevent_client_inc_flag(); break; case 3: data->state = 10; @@ -1306,29 +1306,29 @@ void task00_mystery_gift(u8 taskId) } break; case 9: - switch ((u32)mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, mevent_srv_ish_get_buffer())) + switch ((u32)mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, mevent_client_get_buffer())) { case 0: - mevent_srv_ish_set_param(0); - mevent_srv_ish_inc_flag(); + mevent_client_set_param(0); + mevent_client_inc_flag(); data->state = 7; break; case 1: - mevent_srv_ish_set_param(1); - mevent_srv_ish_inc_flag(); + mevent_client_set_param(1); + mevent_client_inc_flag(); data->state = 7; break; case -1u: - mevent_srv_ish_set_param(1); - mevent_srv_ish_inc_flag(); + mevent_client_set_param(1); + mevent_client_inc_flag(); data->state = 7; break; } break; case 10: - if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, mevent_srv_ish_get_buffer())) + if (MG_PrintTextOnWindow1AndWaitButton(&data->textState, mevent_client_get_buffer())) { - mevent_srv_ish_inc_flag(); + mevent_client_inc_flag(); data->state = 7; } break; @@ -1342,19 +1342,19 @@ void task00_mystery_gift(u8 taskId) } else { - mevent_srv_ish_set_param(0); - mevent_srv_ish_inc_flag(); + mevent_client_set_param(0); + mevent_client_inc_flag(); data->state = 7; } break; case 1: - mevent_srv_ish_set_param(1); - mevent_srv_ish_inc_flag(); + mevent_client_set_param(1); + mevent_client_inc_flag(); data->state = 7; break; case -1u: - mevent_srv_ish_set_param(1); - mevent_srv_ish_inc_flag(); + mevent_client_set_param(1); + mevent_client_inc_flag(); data->state = 7; break; } @@ -1363,18 +1363,18 @@ void task00_mystery_gift(u8 taskId) switch ((u32)mevent_message_print_and_prompt_yes_no(&data->textState, &data->curPromptWindowId, FALSE, gText_HaventReceivedCardsGift)) { case 0: - mevent_srv_ish_set_param(0); - mevent_srv_ish_inc_flag(); + mevent_client_set_param(0); + mevent_client_inc_flag(); data->state = 7; break; case 1: - mevent_srv_ish_set_param(1); - mevent_srv_ish_inc_flag(); + mevent_client_set_param(1); + mevent_client_inc_flag(); data->state = 7; break; case -1u: - mevent_srv_ish_set_param(1); - mevent_srv_ish_inc_flag(); + mevent_client_set_param(1); + mevent_client_inc_flag(); data->state = 7; break; } -- cgit v1.2.3 From 33ee31b2e099a3e2cefa2542f710d51087e09a83 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 2 Apr 2019 14:48:27 -0400 Subject: remove last remaining trace of "ish" --- src/mevent_client.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/mevent_client.c b/src/mevent_client.c index cdf976a41..ec8908af2 100644 --- a/src/mevent_client.c +++ b/src/mevent_client.c @@ -87,7 +87,7 @@ static void mevent_client_send_word(struct mevent_client * svr, u32 ident, u32 w mevent_srv_sub_init_send(&svr->manager, ident, svr->sendBuffer, sizeof(u32)); } -static u32 ish_mainseq_0(struct mevent_client * svr) +static u32 mainseq_0(struct mevent_client * svr) { // init memcpy(svr->cmdBuffer, gUnknown_082F2598, ME_SEND_BUF_SIZE); @@ -97,14 +97,14 @@ static u32 ish_mainseq_0(struct mevent_client * svr) return 0; } -static u32 ish_mainseq_1(struct mevent_client * svr) +static u32 mainseq_1(struct mevent_client * svr) { // done return 6; } -static u32 ish_mainseq_2(struct mevent_client * svr) +static u32 mainseq_2(struct mevent_client * svr) { // do recv if (mevent_srv_sub_recv(&svr->manager)) @@ -115,7 +115,7 @@ static u32 ish_mainseq_2(struct mevent_client * svr) return 1; } -static u32 ish_mainseq_3(struct mevent_client * svr) +static u32 mainseq_3(struct mevent_client * svr) { // do send if (mevent_srv_sub_send(&svr->manager)) @@ -126,7 +126,7 @@ static u32 ish_mainseq_3(struct mevent_client * svr) return 1; } -static u32 ish_mainseq_4(struct mevent_client * svr) +static u32 mainseq_4(struct mevent_client * svr) { // process command struct mevent_client_cmd * cmd = &svr->cmdBuffer[svr->cmdidx]; @@ -232,7 +232,7 @@ static u32 ish_mainseq_4(struct mevent_client * svr) return 1; } -static u32 ish_mainseq_5(struct mevent_client * svr) +static u32 mainseq_5(struct mevent_client * svr) { // wait flag if (svr->flag) @@ -243,7 +243,7 @@ static u32 ish_mainseq_5(struct mevent_client * svr) return 1; } -static u32 ish_mainseq_6(struct mevent_client * svr) +static u32 mainseq_6(struct mevent_client * svr) { // ??? switch (svr->flag) @@ -263,7 +263,7 @@ static u32 ish_mainseq_6(struct mevent_client * svr) return 1; } -static u32 ish_mainseq_7(struct mevent_client * svr) +static u32 mainseq_7(struct mevent_client * svr) { // exec arbitrary code u32 (*func)(u32 *, struct SaveBlock2 *, struct SaveBlock1 *) = (void *)gDecompressionBuffer; @@ -278,14 +278,14 @@ static u32 ish_mainseq_7(struct mevent_client * svr) static u32 mevent_client_exec(struct mevent_client * svr) { u32 (*funcs[])(struct mevent_client *) = { - ish_mainseq_0, - ish_mainseq_1, - ish_mainseq_2, - ish_mainseq_3, - ish_mainseq_4, - ish_mainseq_5, - ish_mainseq_6, - ish_mainseq_7 + mainseq_0, + mainseq_1, + mainseq_2, + mainseq_3, + mainseq_4, + mainseq_5, + mainseq_6, + mainseq_7 }; return funcs[svr->mainseqno](svr); } -- cgit v1.2.3 From 4fadbaf16153c0160f6ad38dc0053e7ff6db7472 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 3 Apr 2019 09:55:17 -0400 Subject: Minor fixes gotoram --> returnram cmdCF/execram --> gotoram fix indentation in sym_ewram.txt fix mevent_client.h guard name --- src/link_rfu.c | 2 +- src/mevent_server_helpers.c | 8 ++++---- src/overworld.c | 2 +- src/scrcmd.c | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/link_rfu.c b/src/link_rfu.c index 1e4c9c7e6..7c55df783 100644 --- a/src/link_rfu.c +++ b/src/link_rfu.c @@ -3674,7 +3674,7 @@ void sub_8010168(void) gUnknown_03005000.unk_00 = sub_8010148; } -void sub_8010198(void) +void LinkRfu_FatalError(void) { sub_800D630(); gUnknown_03005000.unk_ce4 = 1; diff --git a/src/mevent_server_helpers.c b/src/mevent_server_helpers.c index af14b514c..9d47ba745 100644 --- a/src/mevent_server_helpers.c +++ b/src/mevent_server_helpers.c @@ -96,12 +96,12 @@ static bool32 mevent_receive_func(struct mevent_srv_sub * svr) svr->recvCRC = header.crc; if (svr->recvSize > ME_SEND_BUF_SIZE) { - sub_8010198(); + LinkRfu_FatalError(); return FALSE; } else if (svr->recvIdent != header.ident) { - sub_8010198(); + LinkRfu_FatalError(); return FALSE; } else @@ -133,7 +133,7 @@ static bool32 mevent_receive_func(struct mevent_srv_sub * svr) case 2: if (CalcCRC16WithTable(svr->recvBfr, svr->recvSize) != svr->recvCRC) { - sub_8010198(); + LinkRfu_FatalError(); return FALSE; } else @@ -192,7 +192,7 @@ static bool32 mevent_send_func(struct mevent_srv_sub * svr) if (IsLinkTaskFinished()) { if (CalcCRC16WithTable(svr->sendBfr, svr->sendSize) != svr->sendCRC) - sub_8010198(); + LinkRfu_FatalError(); else ++svr->seqno; } diff --git a/src/overworld.c b/src/overworld.c index ae6efefd7..9ed147c0a 100644 --- a/src/overworld.c +++ b/src/overworld.c @@ -2287,7 +2287,7 @@ static void SetKeyInterceptCallback(u16 (*func)(u32)) static void CheckRfuKeepAliveTimer(void) { if (gWirelessCommType != 0 && ++sRfuKeepAliveTimer > 60) - sub_8010198(); + LinkRfu_FatalError(); } static void ResetAllTradingStates(void) diff --git a/src/scrcmd.c b/src/scrcmd.c index 0b1006cef..125a57c01 100644 --- a/src/scrcmd.c +++ b/src/scrcmd.c @@ -281,7 +281,7 @@ bool8 ScrCmd_callstd_if(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_gotoram(struct ScriptContext *ctx) +bool8 ScrCmd_returnram(struct ScriptContext *ctx) { ScriptJump(ctx, gUnknown_020375C0); return FALSE; @@ -2215,7 +2215,7 @@ bool8 ScrCmd_checkmonobedience(struct ScriptContext *ctx) return FALSE; } -bool8 ScrCmd_cmdCF(struct ScriptContext *ctx) +bool8 ScrCmd_gotoram(struct ScriptContext *ctx) { const u8* v1 = GetSavedRamScriptIfValid(); -- cgit v1.2.3 From 48d27c035ae194419317884f64ddf4beec001e7c Mon Sep 17 00:00:00 2001 From: ultima-soul Date: Wed, 3 Apr 2019 15:15:08 -0700 Subject: Remove pokemon_3.h --- src/main_menu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/main_menu.c b/src/main_menu.c index 8c9612c24..504c1bd33 100644 --- a/src/main_menu.c +++ b/src/main_menu.c @@ -23,7 +23,7 @@ #include "palette.h" #include "pokeball.h" #include "pokedex.h" -#include "pokemon_3.h" +#include "pokemon.h" #include "random.h" #include "rtc.h" #include "save.h" -- cgit v1.2.3 From 91a94a0ca1f2df00a776c85b40d76c193977d13a Mon Sep 17 00:00:00 2001 From: ultima-soul Date: Wed, 3 Apr 2019 21:13:26 -0700 Subject: Try to get closer to matching. --- src/battle_script_commands.c | 8 +-- src/menu_specialized.c | 160 +++++++++++++++++++++++++------------------ 2 files changed, 97 insertions(+), 71 deletions(-) (limited to 'src') diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 0a0c34ad2..d1d8d87ac 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -6295,16 +6295,16 @@ static void sub_804F100(void) { struct StatsArray currentStats; - GetMonLevelUpWindowStats(&gPlayerParty[gBattleStruct->expGetterMonId], ¤tStats); - DrawLevelUpWindowPg1(0xD, gBattleResources->statsBeforeLvlUp, ¤tStats, 0xE, 0xD, 0xF); + GetMonLevelUpWindowStats(&gPlayerParty[gBattleStruct->expGetterMonId], (u16*) ¤tStats); + DrawLevelUpWindowPg1(0xD, (u16*) gBattleResources->statsBeforeLvlUp,(u16*) ¤tStats, 0xE, 0xD, 0xF); } static void sub_804F144(void) { struct StatsArray currentStats; - GetMonLevelUpWindowStats(&gPlayerParty[gBattleStruct->expGetterMonId], ¤tStats); - DrawLevelUpWindowPg2(0xD, ¤tStats, 0xE, 0xD, 0xF); + GetMonLevelUpWindowStats(&gPlayerParty[gBattleStruct->expGetterMonId], (u16*) ¤tStats); + DrawLevelUpWindowPg2(0xD, (u16*) ¤tStats, 0xE, 0xD, 0xF); } static void sub_804F17C(void) diff --git a/src/menu_specialized.c b/src/menu_specialized.c index c8c46fbc1..58ed6e982 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -1643,47 +1643,51 @@ static void sub_81D35E8(struct Sprite *sprite) #ifdef NONMATCHING -void DrawLevelUpWindowPg1(u8 arg0, u16 *statStoreLocation1, u16 *statStoreLocation2, u8 arg3, u8 arg4, u8 arg5) +void DrawLevelUpWindowPg1(u16 arg0, u16 *statStoreLocation1, u16 *statStoreLocation2, u8 arg3, u8 arg4, u8 arg5) { - s32 i; + u16 i; s16 array[6]; u8 *text; - u8 *text2; - s16 *ptr; - u8 something[14]; + u8 text2; + s16 *statVal; s32 var; - u8 var2; + u8 padding; s32 var3; + u8 color[11]; + FillWindowPixelBuffer(arg0, PIXEL_FILL(arg3)); + + array[0] = statStoreLocation2[STAT_HP] - statStoreLocation1[STAT_HP]; + array[1] = statStoreLocation2[STAT_ATK] - statStoreLocation1[STAT_ATK]; + array[2] = statStoreLocation2[STAT_DEF] - statStoreLocation1[STAT_DEF]; + array[3] = statStoreLocation2[STAT_SPATK] - statStoreLocation1[STAT_SPATK]; + array[4] = statStoreLocation2[STAT_SPDEF] - statStoreLocation1[STAT_SPDEF]; + array[5] = statStoreLocation2[STAT_SPEED] - statStoreLocation1[STAT_SPEED]; + + color[0] = arg3; + color[1] = arg4; + color[2] = arg5; - - - - FillWindowPixelBuffer(arg0, arg3 * 16 | arg3); - - - array[0] = statStoreLocation2[0] - statStoreLocation1[0]; - array[1] = statStoreLocation2[1] - statStoreLocation1[1]; - array[2] = statStoreLocation2[2] - statStoreLocation1[2]; - array[3] = statStoreLocation2[4] - statStoreLocation1[4]; - array[4] = statStoreLocation2[5] - statStoreLocation1[5]; - array[5] = statStoreLocation2[3] - statStoreLocation1[3]; - - - for(i = 0; i < 6; i++) + for(i = 0; i <= 5; i++) { - AddTextPrinterParameterized3(arg0, 1, 0, 15 * i, &arg3, TEXT_SPEED_FF, gUnknown_08625B54[i]); - ptr = &array[i]; - text = (u8 *) gText_Dash; - - if(*ptr >= 0) - { - text = (u8 *) gText_UnkCtrlF904; - } - - StringCopy(text2, text); - AddTextPrinterParameterized3(arg0, 1, 56, 15 * i, &arg3, TEXT_SPEED_FF, text2); - var3 = *ptr; + AddTextPrinterParameterized3(arg0, + 1, + 0, + 15 * i, + color, + TEXT_SPEED_FF, + gUnknown_08625B54[i]); + statVal = &array[i]; + text = array[i] >= 0 ? (u8 *) gText_UnkCtrlF904 : (u8 *) gText_Dash;//Plus sign for stat gain, dash for none maybe + StringCopy(&text2, text); + AddTextPrinterParameterized3(arg0, + 1, + 56, + 15 * i, + color, + TEXT_SPEED_FF, + &text2); + var3 = *statVal; var = var3; if(var3 < 0) @@ -1691,11 +1695,11 @@ void DrawLevelUpWindowPg1(u8 arg0, u16 *statStoreLocation1, u16 *statStoreLocati var = -var3; } - var2 = 12; + padding = 12; //amount of padding if(var <= 9) { - var2 = 18; + padding = 18; //more padding for single digit numbers } if(var3 < 0) @@ -1703,8 +1707,14 @@ void DrawLevelUpWindowPg1(u8 arg0, u16 *statStoreLocation1, u16 *statStoreLocati var3 = -var3; } - ConvertIntToDecimalStringN(text2, var3, 0, 2); - AddTextPrinterParameterized3(arg0, 1, var2 + 56, 15 * i, &arg3, TEXT_SPEED_FF, text2); + ConvertIntToDecimalStringN(&text2, var3, STR_CONV_MODE_LEFT_ALIGN, 2); + AddTextPrinterParameterized3(arg0, + 1, + padding + 56, + 15 * i, + color, + TEXT_SPEED_FF, + &text2); } } #else @@ -1872,43 +1882,59 @@ _081D373A:\n\ #endif // NONMATCHING #ifdef NONMATCHING -void DrawLevelUpWindowPg2(u16 arg0, u16* statStoreLocation1, u8 arg2, u8 arg3, u8 arg4) +void DrawLevelUpWindowPg2(u16 arg0, u16 *statStoreLocation1, u8 arg2, u8 arg3, u8 arg4) { s32 i; - s32 var; - s32 var2; + s16 *var; + s32 numDigits; u8 text; s16 array[6]; - u8 *something; - u8 some; - FillWindowPixelBuffer(arg0, arg2 * 16 | arg2); - array[0] = statStoreLocation1[0]; - array[1] = statStoreLocation1[1]; - array[2] = statStoreLocation1[2]; - array[3] = statStoreLocation1[4]; - array[4] = statStoreLocation1[5]; - array[5] = statStoreLocation1[3]; + u8 color[11]; + + FillWindowPixelBuffer(arg0, PIXEL_FILL(arg2)); + + array[0] = statStoreLocation1[STAT_HP]; + array[1] = statStoreLocation1[STAT_ATK]; + array[2] = statStoreLocation1[STAT_DEF]; + array[3] = statStoreLocation1[STAT_SPATK]; + array[4] = statStoreLocation1[STAT_SPDEF]; + array[5] = statStoreLocation1[STAT_SPEED]; + + color[0] = arg2; + color[1] = arg3; + color[2] = arg4; + for(i = 0; i <= 5; i++) { - var = array[i]; - var2 = 3; - if(var <= 99) + numDigits = 3; //3 digit stat + if(array[i] <= 99) { - var2 = 1; - if(var > 9) + numDigits = 1; //1 digit stat + if(array[i] > 9) { - var2 = 2; + numDigits = 2; //2 digit stat } } - something = ConvertIntToDecimalStringN(&text, array[i], 0, var2); - some = (((4 - *something) * 2) + *something) * 2; - AddTextPrinterParameterized3(arg0, 1, 0, 15 * i, &arg2, TEXT_SPEED_FF, gUnknown_08625B54[i]); - AddTextPrinterParameterized3(arg0, 1, some + 56, 15 * i, &arg2, TEXT_SPEED_FF, &text); + ConvertIntToDecimalStringN(&text, array[i], STR_CONV_MODE_LEFT_ALIGN, numDigits); + AddTextPrinterParameterized3(arg0, + 1, + 0, + 15 * i, + color, + TEXT_SPEED_FF, + gUnknown_08625B54[i]); + AddTextPrinterParameterized3(arg0, + 1, + 6 * (4 - numDigits) + 56, + 15 * i, + color, + TEXT_SPEED_FF, + &text); } } #else NAKED -void DrawLevelUpWindowPg2(u16 arg0, u16* statStoreLocation1, u8 arg2, u8 arg3, u8 arg4) +void DrawLevelUpWindowPg2(u16 arg0, u16 *statStoreLocation1, u8 arg2, u8 arg3, u8 arg4) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -2043,14 +2069,14 @@ _081D3808:\n\ } #endif // NONMATCHING -void GetMonLevelUpWindowStats(struct Pokemon* mon, u16* statStoreLocation) +void GetMonLevelUpWindowStats(struct Pokemon *mon, u16 *statStoreLocation) { - statStoreLocation[0] = GetMonData(mon, MON_DATA_MAX_HP); - statStoreLocation[1] = GetMonData(mon, MON_DATA_ATK); - statStoreLocation[2] = GetMonData(mon, MON_DATA_DEF); - statStoreLocation[3] = GetMonData(mon, MON_DATA_SPEED); - statStoreLocation[4] = GetMonData(mon, MON_DATA_SPATK); - statStoreLocation[5] = GetMonData(mon, MON_DATA_SPDEF); + statStoreLocation[STAT_HP] = GetMonData(mon, MON_DATA_MAX_HP); + statStoreLocation[STAT_ATK] = GetMonData(mon, MON_DATA_ATK); + statStoreLocation[STAT_DEF] = GetMonData(mon, MON_DATA_DEF); + statStoreLocation[STAT_SPEED] = GetMonData(mon, MON_DATA_SPEED); + statStoreLocation[STAT_SPATK] = GetMonData(mon, MON_DATA_SPATK); + statStoreLocation[STAT_SPDEF] = GetMonData(mon, MON_DATA_SPDEF); } -- cgit v1.2.3 From 64da3d051ecf8617c081f64a49f62c7e79354585 Mon Sep 17 00:00:00 2001 From: ultima-soul Date: Wed, 3 Apr 2019 21:15:45 -0700 Subject: Fix formatting. --- src/menu_specialized.c | 108 ++++++++++++++++++++----------------------------- 1 file changed, 43 insertions(+), 65 deletions(-) (limited to 'src') diff --git a/src/menu_specialized.c b/src/menu_specialized.c index 58ed6e982..cbdef3d39 100644 --- a/src/menu_specialized.c +++ b/src/menu_specialized.c @@ -1653,10 +1653,10 @@ void DrawLevelUpWindowPg1(u16 arg0, u16 *statStoreLocation1, u16 *statStoreLocat s32 var; u8 padding; s32 var3; - u8 color[11]; + u8 color[11]; FillWindowPixelBuffer(arg0, PIXEL_FILL(arg3)); - + array[0] = statStoreLocation2[STAT_HP] - statStoreLocation1[STAT_HP]; array[1] = statStoreLocation2[STAT_ATK] - statStoreLocation1[STAT_ATK]; array[2] = statStoreLocation2[STAT_DEF] - statStoreLocation1[STAT_DEF]; @@ -1665,28 +1665,28 @@ void DrawLevelUpWindowPg1(u16 arg0, u16 *statStoreLocation1, u16 *statStoreLocat array[5] = statStoreLocation2[STAT_SPEED] - statStoreLocation1[STAT_SPEED]; color[0] = arg3; - color[1] = arg4; - color[2] = arg5; + color[1] = arg4; + color[2] = arg5; for(i = 0; i <= 5; i++) { AddTextPrinterParameterized3(arg0, - 1, - 0, - 15 * i, - color, - TEXT_SPEED_FF, - gUnknown_08625B54[i]); + 1, + 0, + 15 * i, + color, + TEXT_SPEED_FF, + gUnknown_08625B54[i]); statVal = &array[i]; text = array[i] >= 0 ? (u8 *) gText_UnkCtrlF904 : (u8 *) gText_Dash;//Plus sign for stat gain, dash for none maybe StringCopy(&text2, text); AddTextPrinterParameterized3(arg0, - 1, - 56, - 15 * i, - color, - TEXT_SPEED_FF, - &text2); + 1, + 56, + 15 * i, + color, + TEXT_SPEED_FF, + &text2); var3 = *statVal; var = var3; @@ -1709,12 +1709,12 @@ void DrawLevelUpWindowPg1(u16 arg0, u16 *statStoreLocation1, u16 *statStoreLocat ConvertIntToDecimalStringN(&text2, var3, STR_CONV_MODE_LEFT_ALIGN, 2); AddTextPrinterParameterized3(arg0, - 1, - padding + 56, - 15 * i, - color, - TEXT_SPEED_FF, - &text2); + 1, + padding + 56, + 15 * i, + color, + TEXT_SPEED_FF, + &text2); } } #else @@ -1889,21 +1889,21 @@ void DrawLevelUpWindowPg2(u16 arg0, u16 *statStoreLocation1, u8 arg2, u8 arg3, u s32 numDigits; u8 text; s16 array[6]; - u8 color[11]; - + u8 color[11]; + FillWindowPixelBuffer(arg0, PIXEL_FILL(arg2)); - + array[0] = statStoreLocation1[STAT_HP]; array[1] = statStoreLocation1[STAT_ATK]; array[2] = statStoreLocation1[STAT_DEF]; array[3] = statStoreLocation1[STAT_SPATK]; array[4] = statStoreLocation1[STAT_SPDEF]; array[5] = statStoreLocation1[STAT_SPEED]; - - color[0] = arg2; - color[1] = arg3; - color[2] = arg4; - + + color[0] = arg2; + color[1] = arg3; + color[2] = arg4; + for(i = 0; i <= 5; i++) { numDigits = 3; //3 digit stat @@ -1917,19 +1917,19 @@ void DrawLevelUpWindowPg2(u16 arg0, u16 *statStoreLocation1, u8 arg2, u8 arg3, u } ConvertIntToDecimalStringN(&text, array[i], STR_CONV_MODE_LEFT_ALIGN, numDigits); AddTextPrinterParameterized3(arg0, - 1, - 0, - 15 * i, - color, - TEXT_SPEED_FF, - gUnknown_08625B54[i]); + 1, + 0, + 15 * i, + color, + TEXT_SPEED_FF, + gUnknown_08625B54[i]); AddTextPrinterParameterized3(arg0, - 1, - 6 * (4 - numDigits) + 56, - 15 * i, - color, - TEXT_SPEED_FF, - &text); + 1, + 6 * (4 - numDigits) + 56, + 15 * i, + color, + TEXT_SPEED_FF, + &text); } } #else @@ -2071,32 +2071,10 @@ _081D3808:\n\ void GetMonLevelUpWindowStats(struct Pokemon *mon, u16 *statStoreLocation) { - statStoreLocation[STAT_HP] = GetMonData(mon, MON_DATA_MAX_HP); + statStoreLocation[STAT_HP] = GetMonData(mon, MON_DATA_MAX_HP); statStoreLocation[STAT_ATK] = GetMonData(mon, MON_DATA_ATK); statStoreLocation[STAT_DEF] = GetMonData(mon, MON_DATA_DEF); statStoreLocation[STAT_SPEED] = GetMonData(mon, MON_DATA_SPEED); statStoreLocation[STAT_SPATK] = GetMonData(mon, MON_DATA_SPATK); statStoreLocation[STAT_SPDEF] = GetMonData(mon, MON_DATA_SPDEF); } - - - - - - - - - - - - - - - - - - - - - - -- cgit v1.2.3 From a47abb3949f8d1050379f51005368a5093c15113 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 3 Apr 2019 21:46:59 -0400 Subject: union_room_chat data, 1 --- src/union_room_chat.c | 240 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 214 insertions(+), 26 deletions(-) (limited to 'src') diff --git a/src/union_room_chat.c b/src/union_room_chat.c index 120252d36..1528cdd5f 100755 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -190,22 +190,33 @@ static void sub_80209E0(void); static bool32 sub_8020A1C(void); static void sub_80207C0(s16); static void sub_8020818(s16); +static bool32 sub_801F658(u8 *state); +static bool32 sub_801F6F8(u8 *state); +static bool32 sub_801F730(u8 *state); +static bool32 sub_801F768(u8 *state); +static bool32 sub_801F7D4(u8 *state); +static bool32 sub_801F7E0(u8 *state); +static bool32 sub_801F82C(u8 *state); +static bool32 sub_801F870(u8 *state); +static bool32 sub_801F8DC(u8 *state); +static bool32 sub_801F984(u8 *state); +static bool32 sub_801FA2C(u8 *state); +static bool32 sub_801FA68(u8 *state); +static bool32 sub_801FB44(u8 *state); +static bool32 sub_801FB70(u8 *state); +static bool32 sub_801FBB4(u8 *state); +static bool32 sub_801FBF8(u8 *state); +static bool32 sub_801FC4C(u8 *state); +static bool32 sub_801FC9C(u8 *state); +static bool32 sub_801FCEC(u8 *state); +static bool32 sub_801FD30(u8 *state); +static bool32 sub_801FD88(u8 *state); extern struct UnionRoomChat *gUnknown_02022C84; extern struct UnionRoomChat2 *gUnknown_02022C88; extern struct UnionRoomChat3 *gUnknown_02022C8C; - -extern const u8 *const gUnknown_082F2BA8[][10]; -extern const u8 gUnknown_082F2AA8[]; -extern const struct BgTemplate gUnknown_082F2C60[4]; -extern const struct WindowTemplate gUnknown_082F2C70[]; -extern const struct Unk82F2C98 gUnknown_082F2C98[]; -extern const struct Unk82F2D40 gUnknown_082F2D40[]; -extern const u8 gText_Ellipsis[]; -extern const struct MenuAction gUnknown_082F2DC8[]; extern const u16 gUnknown_082F2C20[]; extern const u16 gUnknown_082F2C40[]; -extern const struct CompressedSpriteSheet gUnknown_082F3134[]; extern const struct SpritePalette gUnknown_082F315C; extern const struct SpriteTemplate gUnknown_082F319C; extern const u16 gUnknown_082F2DF0[]; @@ -214,6 +225,199 @@ extern const struct SpriteTemplate gUnknown_082F31D4; extern const struct SpriteTemplate gUnknown_082F322C; extern const struct SpriteTemplate gUnknown_082F3244; +void (*const gUnknown_082F2A7C[])(void) = + { + sub_801DFAC, + sub_801E030, + sub_801E120, + sub_801E240, + sub_801E764, + sub_801E838, + sub_801E460, + sub_801E5C4, + sub_801E668, + sub_801E978, + }; + +static const u8 sUnknown_082F2AA4[] = {9, 9, 9, 9}; + +static const u8 gUnknown_082F2AA8[] = { + CHAR_SPACE, 0x16, 0x17, 0x68, 0x19, 0x1A, 0x1B, 0x1C, + 0x1D, 0x1E, CHAR_SPACE, 0x20, 0x21, 0x22, 0x23, 0x24, + 0x25, 0x26, 0x27, 0x28, 0x29, 0x15, 0x01, 0x02, + CHAR_SPACE, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, CHAR_SPACE, + 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, + 0x13, 0x14, 0x2A, 0x2B, 0x2C, 0x2D, CHAR_SPACE, CHAR_SPACE, + CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, 0x35, 0x36, CHAR_SPACE, + CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, + CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, + CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, + CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, 0x53, 0x54, 0x55, 0x56, CHAR_SPACE, + CHAR_SPACE, CHAR_SPACE, 0x6F, 0x5B, 0x5C, 0x5D, CHAR_SPACE, CHAR_SPACE, + CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, + 0x03, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, 0x5A, + CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, + CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, + CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, 0x84, 0x85, 0x86, CHAR_SPACE, + CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, + CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, + CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, + 0xA0, CHAR_0, CHAR_1, CHAR_2, CHAR_3, CHAR_4, CHAR_5, CHAR_6, + CHAR_7, CHAR_8, CHAR_9, CHAR_EXCL_MARK, CHAR_QUESTION_MARK, CHAR_PERIOD, CHAR_HYPHEN, 0xAF, + CHAR_ELLIPSIS, CHAR_DBL_QUOT_LEFT, CHAR_DBL_QUOT_RIGHT, CHAR_SGL_QUOT_LEFT, CHAR_SGL_QUOT_RIGHT, CHAR_MALE, CHAR_FEMALE, CHAR_CURRENCY, + CHAR_COMMA, CHAR_MULT_SIGN, CHAR_SLASH, CHAR_a, CHAR_b, CHAR_c, CHAR_d, CHAR_e, + CHAR_f, CHAR_g, CHAR_h, CHAR_i, CHAR_j, CHAR_k, CHAR_l, CHAR_m, + CHAR_n, CHAR_o, CHAR_p, CHAR_q, CHAR_r, CHAR_s, CHAR_t, CHAR_u, + CHAR_v, CHAR_w, CHAR_x, CHAR_y, CHAR_z, CHAR_A, CHAR_B, CHAR_C, + CHAR_D, CHAR_E, CHAR_F, CHAR_G, CHAR_H, CHAR_I, CHAR_J, CHAR_K, + CHAR_L, CHAR_M, CHAR_N, CHAR_O, CHAR_P, CHAR_Q, CHAR_R, CHAR_S, + CHAR_T, CHAR_U, CHAR_V, CHAR_W, CHAR_X, CHAR_Y, CHAR_Z, 0xEF, + CHAR_COLON, 0xF4, 0xF5, 0xF6, 0xF1, 0xF2, 0xF3, CHAR_SPACE, + CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE, CHAR_SPACE +}; + +const u8 *const gUnknown_082F2BA8[][10] = { + {gUnknown_0862B9F9, gUnknown_0862B9FF, gUnknown_0862BA05, gUnknown_0862BA0B, gUnknown_0862BA11, gUnknown_0862BA17, gUnknown_0862BA1D, gUnknown_0862BA23, gUnknown_0862BA29, gUnknown_0862BA2F}, + {gUnknown_0862BA35, gUnknown_0862BA3B, gUnknown_0862BA41, gUnknown_0862BA47, gUnknown_0862BA4D, gUnknown_0862BA53, gUnknown_0862BA59, gUnknown_0862BA5F, gUnknown_0862BA65, gUnknown_0862BA6B}, + {gUnknown_0862BA79, gUnknown_0862BA84, gUnknown_0862BA8F, gUnknown_0862BA9A, gUnknown_0862BAA3, gUnknown_0862BAAE, gUnknown_0862BAB9, gUnknown_0862BAC4, gUnknown_0862BACF, gUnknown_0862BADA} +}; + +const u16 gUnknown_082F2C20[] = INCBIN_U16("graphics/interface/unk_palette1.gbapal"); +const u16 gUnknown_082F2C40[] = INCBIN_U16("graphics/interface/unk_palette2.gbapal"); + +const struct BgTemplate gUnknown_082F2C60[] = { + { + .bg = 0, + .charBaseIndex = 0, + .mapBaseIndex = 7, + .screenSize = 0, + .paletteMode = 0, + .priority = 0, + .baseTile = 0 + }, { + .bg = 1, + .charBaseIndex = 3, + .mapBaseIndex = 31, + .screenSize = 0, + .paletteMode = 0, + .priority = 1, + .baseTile = 0 + }, { + .bg = 2, + .charBaseIndex = 2, + .mapBaseIndex = 23, + .screenSize = 0, + .paletteMode = 0, + .priority = 2, + .baseTile = 0 + }, { + .bg = 3, + .charBaseIndex = 1, + .mapBaseIndex = 15, + .screenSize = 0, + .paletteMode = 0, + .priority = 3, + .baseTile = 1 + } +}; + +const struct WindowTemplate gUnknown_082F2C70[] = { + { + .bg = 0x03, + .tilemapLeft = 0x08, + .tilemapTop = 0x01, + .width = 0x15, + .height = 0x13, + .paletteNum = 0x0f, + .baseBlock = 0x0001, + }, { + .bg = 0x01, + .tilemapLeft = 0x09, + .tilemapTop = 0x12, + .width = 0x0f, + .height = 0x02, + .paletteNum = 0x0c, + .baseBlock = 0x007a, + }, { + .bg = 0x01, + .tilemapLeft = 0x00, + .tilemapTop = 0x02, + .width = 0x06, + .height = 0x0f, + .paletteNum = 0x07, + .baseBlock = 0x0020, + }, { + .bg = 0x00, + .tilemapLeft = 0x01, + .tilemapTop = 0x02, + .width = 0x07, + .height = 0x09, + .paletteNum = 0x0e, + .baseBlock = 0x0013, + }, { 0xFF } +}; + +const struct Unk82F2C98 gUnknown_082F2C98[] = { + {0x00000000, sub_801F658}, + {0x00000003, sub_801F6F8}, + {0x00000004, sub_801F730}, + {0x00000005, sub_801F768}, + {0x00000001, sub_801F7D4}, + {0x00000006, sub_801F7E0}, + {0x00000007, sub_801F82C}, + {0x00000008, sub_801F870}, + {0x00000009, sub_801F8DC}, + {0x0000000a, sub_801F984}, + {0x0000000b, sub_801FA2C}, + {0x0000000c, sub_801FA68}, + {0x00000002, sub_801FB44}, + {0x0000000d, sub_801FB70}, + {0x00000012, sub_801FBB4}, + {0x00000013, sub_801FBF8}, + {0x0000000e, sub_801FC4C}, + {0x0000000f, sub_801FC9C}, + {0x00000010, sub_801FCEC}, + {0x00000011, sub_801FD30}, + {0x00000014, sub_801FD88} +}; + +const struct Unk82F2D40 gUnknown_082F2D40[] = { + {gText_QuitChatting, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00}, + {gText_RegisterTextWhere, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00}, + {gText_RegisterTextHere, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00}, + {gText_InputText, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00}, + {gText_ExitingChat, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00}, + {gText_LeaderLeftEndingChat, 0x02, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00}, + {gText_RegisteredTextChanged, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01}, + {gText_AlreadySavedFile_Unused, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01}, + {gText_SavingDontTurnOff_Unused, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01}, + {gText_PlayerSavedGame_Unused, 0x02, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01}, + {gText_IfLeaderLeavesChatEnds, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01} +}; + +const u8 gText_Ellipsis[] = _("…"); + +const struct MenuAction gUnknown_082F2DC8[] = { + {gText_Upper, NULL}, + {gText_Lower, NULL}, + {gText_Symbols, NULL}, + {gText_Register2, NULL}, + {gText_Exit2, NULL}, +}; + +const u16 gUnknown_082F2DF0[] = INCBIN_U16("graphics/interface/unk_palette3.gbapal"); +const u32 gUnknown_082F2E10[] = INCBIN_U32("graphics/interface/unk_cursor.4bpp.lz"); +const u32 gUnknown_082F3094[] = INCBIN_U32("graphics/interface/unk_dash.4bpp.lz"); +const u32 gUnknown_082F30B4[] = INCBIN_U32("graphics/interface/unk_cursor_arrow.4bpp.lz"); +const u32 gUnknown_082F30E0[] = INCBIN_U32("graphics/interface/unk_rbutton.4bpp.lz"); + +const struct CompressedSpriteSheet gUnknown_082F3134[] = { + {gUnknown_082F2E10, 0x1000, 0x0000}, + {gUnknown_082F30B4, 0x0040, 0x0001}, + {gUnknown_082F3094, 0x0040, 0x0002}, + {gUnknown_082F30E0, 0x0080, 0x0003}, + {gUnknown_08DD4CF8, 0x0400, 0x0004} +}; void sub_801DD98(void) { @@ -305,20 +509,6 @@ static void sub_801DF38(void) UpdatePaletteFade(); } -void (*const gUnknown_082F2A7C[])(void) = -{ - sub_801DFAC, - sub_801E030, - sub_801E120, - sub_801E240, - sub_801E764, - sub_801E838, - sub_801E460, - sub_801E5C4, - sub_801E668, - sub_801E978, -}; - static void sub_801DF54(u8 taskId) { switch (gUnknown_02022C84->unk17) @@ -939,8 +1129,6 @@ static void sub_801EBD4(u16 arg0) gUnknown_02022C84->unk6 = 0; } -static const u8 sUnknown_082F2AA4[] = {9, 9, 9, 9}; - static bool32 sub_801EBE4(void) { if (!(gMain.newAndRepeatedKeys & DPAD_UP)) -- cgit v1.2.3 From 53efbe2832f5e7a6973c3c5a6a6d7240ea5ecbdd Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 4 Apr 2019 08:49:01 -0400 Subject: Finish decomp of union_room_chat --- src/union_room_chat.c | 138 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 136 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/union_room_chat.c b/src/union_room_chat.c index 1528cdd5f..ffe30d863 100755 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -211,6 +211,8 @@ static bool32 sub_801FC9C(u8 *state); static bool32 sub_801FCEC(u8 *state); static bool32 sub_801FD30(u8 *state); static bool32 sub_801FD88(u8 *state); +static void sub_8020ABC(struct Sprite *sprite); +static void sub_8020AF4(struct Sprite *sprite); extern struct UnionRoomChat *gUnknown_02022C84; extern struct UnionRoomChat2 *gUnknown_02022C88; @@ -419,6 +421,138 @@ const struct CompressedSpriteSheet gUnknown_082F3134[] = { {gUnknown_08DD4CF8, 0x0400, 0x0004} }; +const struct SpritePalette gUnknown_082F315C = { + gUnknown_082F2DF0, 0x0000 +}; + +const struct OamData gUnknown_082F3164 = { + .shape = ST_OAM_H_RECTANGLE, + .size = 3, + .priority = 1 +}; + +const union AnimCmd gUnknown_082F316C[] = { + ANIMCMD_FRAME(0x00, 30), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_082F3174[] = { + ANIMCMD_FRAME(0x20, 30), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_082F317C[] = { + ANIMCMD_FRAME(0x40, 30), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_082F3184[] = { + ANIMCMD_FRAME(0x60, 30), + ANIMCMD_END +}; + +const union AnimCmd *const gUnknown_082F318C[] = { + gUnknown_082F316C, + gUnknown_082F3174, + gUnknown_082F317C, + gUnknown_082F3184 +}; + +const struct SpriteTemplate gUnknown_082F319C = { + .tileTag = 0x0000, + .paletteTag = 0x0000, + .oam = &gUnknown_082F3164, + .anims = gUnknown_082F318C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +const struct OamData gUnknown_082F31B4 = { + .shape = ST_OAM_V_RECTANGLE, + .size = 0, + .priority = 2 +}; + +const struct SpriteTemplate gUnknown_082F31BC = { + .tileTag = 0x0002, + .paletteTag = 0x0000, + .oam = &gUnknown_082F31B4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8020ABC +}; + +const struct SpriteTemplate gUnknown_082F31D4 = { + .tileTag = 0x0001, + .paletteTag = 0x0000, + .oam = &gUnknown_082F31B4, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8020AF4 +}; + +const struct OamData gUnknown_082F31EC = { + .shape = ST_OAM_SQUARE, + .size = 1, + .priority = 2 +}; + +const struct OamData gUnknown_082F31F4 = { + .shape = ST_OAM_H_RECTANGLE, + .size = 2, + .priority = 2 +}; + +const union AnimCmd gUnknown_082F31FC[] = { + ANIMCMD_FRAME(0x00, 2), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_082F3204[] = { + ANIMCMD_FRAME(0x08, 2), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_082F320C[] = { + ANIMCMD_FRAME(0x10, 2), + ANIMCMD_END +}; + +const union AnimCmd gUnknown_082F3214[] = { + ANIMCMD_FRAME(0x18, 2), + ANIMCMD_END +}; + +const union AnimCmd *const gUnknown_082F321C[] = { + gUnknown_082F31FC, + gUnknown_082F3204, + gUnknown_082F320C, + gUnknown_082F3214 +}; + +const struct SpriteTemplate gUnknown_082F322C = { + .tileTag = 0x0003, + .paletteTag = 0x0000, + .oam = &gUnknown_082F31EC, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + +const struct SpriteTemplate gUnknown_082F3244 = { + .tileTag = 0x0004, + .paletteTag = 0x0000, + .oam = &gUnknown_082F31F4, + .anims = gUnknown_082F321C, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + void sub_801DD98(void) { gUnknown_02022C84 = Alloc(sizeof(*gUnknown_02022C84)); @@ -2754,7 +2888,7 @@ static void sub_8020A68(void) gUnknown_02022C8C->unk4 = &gSprites[spriteId]; } -void sub_8020ABC(struct Sprite *sprite) +static void sub_8020ABC(struct Sprite *sprite) { int var0 = sub_801F198(); if (var0 == 15) @@ -2768,7 +2902,7 @@ void sub_8020ABC(struct Sprite *sprite) } } -void sub_8020AF4(struct Sprite *sprite) +static void sub_8020AF4(struct Sprite *sprite) { if (++sprite->data[0] > 4) { -- cgit v1.2.3 From cb04af05dc473f15eb97ae181dcba624efa2b8d1 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 4 Apr 2019 09:23:13 -0400 Subject: Resolve unnecessarily externed symbols --- src/union_room_chat.c | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) (limited to 'src') diff --git a/src/union_room_chat.c b/src/union_room_chat.c index ffe30d863..84a0406be 100755 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -214,18 +214,9 @@ static bool32 sub_801FD88(u8 *state); static void sub_8020ABC(struct Sprite *sprite); static void sub_8020AF4(struct Sprite *sprite); -extern struct UnionRoomChat *gUnknown_02022C84; -extern struct UnionRoomChat2 *gUnknown_02022C88; -extern struct UnionRoomChat3 *gUnknown_02022C8C; -extern const u16 gUnknown_082F2C20[]; -extern const u16 gUnknown_082F2C40[]; -extern const struct SpritePalette gUnknown_082F315C; -extern const struct SpriteTemplate gUnknown_082F319C; -extern const u16 gUnknown_082F2DF0[]; -extern const struct SpriteTemplate gUnknown_082F31BC; -extern const struct SpriteTemplate gUnknown_082F31D4; -extern const struct SpriteTemplate gUnknown_082F322C; -extern const struct SpriteTemplate gUnknown_082F3244; +EWRAM_DATA struct UnionRoomChat *gUnknown_02022C84 = NULL; +EWRAM_DATA struct UnionRoomChat2 *gUnknown_02022C88 = NULL; +EWRAM_DATA struct UnionRoomChat3 *gUnknown_02022C8C = NULL; void (*const gUnknown_082F2A7C[])(void) = { -- cgit v1.2.3 From c46f271f676812b7292560f36f890010c71ef5d1 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 4 Apr 2019 11:55:18 -0400 Subject: Documentation of ereader_helpers, 1 --- src/ereader_helpers.c | 69 +++++++++++++++++++++++++-------------------------- src/ereader_screen.c | 4 +-- src/recorded_battle.c | 4 +-- src/save.c | 10 ++++---- src/trainer_hill.c | 2 +- 5 files changed, 44 insertions(+), 45 deletions(-) (limited to 'src') diff --git a/src/ereader_helpers.c b/src/ereader_helpers.c index cdb829ac8..48c41301e 100755 --- a/src/ereader_helpers.c +++ b/src/ereader_helpers.c @@ -26,17 +26,17 @@ static void sub_81D414C(void); static void sub_81D3F1C(u32, u32*, u32*); static void sub_81D3F68(void); -extern struct Unknown030012C8 gUnknown_030012C8; -extern u16 gUnknown_030012E0; -extern u16 gUnknown_030012E2; -extern u16 gUnknown_030012E4; -extern u16 gUnknown_030012E6; -extern u32 gUnknown_030012E8; -extern u16 gUnknown_030012EC; -extern u16 gUnknown_030012EE; -extern u16 gUnknown_030012F0; -extern u16 gUnknown_030012F2; -extern u16 gUnknown_030012F4; +IWRAM_DATA struct Unknown030012C8 gUnknown_030012C8; +IWRAM_DATA u16 gUnknown_030012E0; +IWRAM_DATA u16 gUnknown_030012E2; +IWRAM_DATA u16 gUnknown_030012E4; +IWRAM_DATA u16 gUnknown_030012E6; +IWRAM_DATA u32 gUnknown_030012E8; +IWRAM_DATA u16 gUnknown_030012EC; +IWRAM_DATA u16 gUnknown_030012EE; +IWRAM_DATA u16 gUnknown_030012F0; +IWRAM_DATA u16 gUnknown_030012F2; +IWRAM_DATA u16 gUnknown_030012F4; extern const u8 gUnknown_08625B6C[]; @@ -45,7 +45,7 @@ static u8 sub_81D38D4(void) return (gSaveBlock1Ptr->trainerHill.unused + 1) % 256; } -static bool32 sub_81D38FC(struct Unk81D38FC *arg0) +static bool32 Struct_Unk81D38FC_ValidateChecksum(struct Unk81D38FC *arg0) { int checksum = CalcByteArraySum(arg0->unk0, 0x270); if (checksum != arg0->checksum) @@ -54,43 +54,42 @@ static bool32 sub_81D38FC(struct Unk81D38FC *arg0) return TRUE; } -bool8 sub_81D3920(u8 *buffer) +bool8 EReader_IsReceivedDataValid(struct EReaderTrainerHillSet *buffer) { u32 i; u32 checksum; - int var0 = buffer[0]; + int var0 = buffer->unk_0; if (var0 < 1 || var0 > 8) return FALSE; for (i = 0; i < var0; i++) { - struct Unk81D38FC *var1 = (struct Unk81D38FC *)(&buffer[i * (sizeof(struct Unk81D38FC)) + 8]); - if (!sub_81D38FC(var1)) + if (!Struct_Unk81D38FC_ValidateChecksum(&buffer->unk_8[i])) return FALSE; } - checksum = CalcByteArraySum(buffer + 8, var0 * 0x274); - if (checksum != ((int *)buffer)[1]) + checksum = CalcByteArraySum((u8 *)buffer->unk_8, var0 * sizeof(struct Unk81D38FC)); + if (checksum != buffer->checksum) return FALSE; return TRUE; } -static bool32 sub_81D396C(u8 *buffer) +static bool32 TrainerHill_VerifyChecksum(struct EReaderTrainerHillSet *buffer) { u32 checksum; - int var0 = buffer[0]; + int var0 = buffer->unk_0; if (var0 < 1 || var0 > 8) return FALSE; - checksum = CalcByteArraySum(buffer + 8, 0xEE0); - if (checksum != ((int *)buffer)[1]) + checksum = CalcByteArraySum((u8 *)buffer->unk_8, sizeof(struct EReaderTrainerHillSet) - offsetof(struct EReaderTrainerHillSet, unk_8)); + if (checksum != buffer->checksum) return FALSE; return TRUE; } -static bool32 sub_81D3998(struct Unk81D38FC *arg0, u8 *buffer2) +static bool32 TryWriteTrainerHill_r(struct Unk81D38FC *arg0, u8 *buffer2) { int i; const u8 *ereaderVals; @@ -131,44 +130,44 @@ static bool32 sub_81D3998(struct Unk81D38FC *arg0, u8 *buffer2) } ((int *)buffer2)[1] = CalcByteArraySum(buffer2 + 8, 0xEE0); - if (sub_8153634(SECTOR_ID_TRAINER_HILL, buffer2) != 1) + if (TryWriteSpecialSaveSection(SECTOR_ID_TRAINER_HILL, (u8 *)buffer2) != 1) return FALSE; return TRUE; } -bool32 sub_81D3AB0(struct Unk81D38FC *arg0) +bool32 TryWriteTrainerHill(struct Unk81D38FC *arg0) { u8 *var0 = AllocZeroed(0x1000); - bool32 result = sub_81D3998(arg0, var0); + bool32 result = TryWriteTrainerHill_r(arg0, var0); Free(var0); return result; } -static bool32 sub_81D3AD8(u8 *arg0, u8 *arg1) +static bool32 TryReadTrainerHill_r(struct EReaderTrainerHillSet *arg0, u8 *arg1) { - if (TryCopySpecialSaveSection(SECTOR_ID_TRAINER_HILL, arg1) != 1) + if (TryReadSpecialSaveSection(SECTOR_ID_TRAINER_HILL, arg1) != 1) return FALSE; - memcpy(arg0, arg1, 0xEE8); - if (!sub_81D396C(arg0)) + memcpy(arg0, arg1, sizeof(struct EReaderTrainerHillSet)); + if (!TrainerHill_VerifyChecksum(arg0)) return FALSE; return TRUE; } -static bool32 sub_81D3B0C(u8 *arg0) +static bool32 TryReadTrainerHill(struct EReaderTrainerHillSet *arg0) { u8 *var0 = AllocZeroed(0x1000); - bool32 result = sub_81D3AD8(arg0, var0); + bool32 result = TryReadTrainerHill_r(arg0, var0); Free(var0); return result; } -bool32 sub_81D3B34(void) +bool32 ReadTrainerHillAndValidate(void) { - u8 *var0 = AllocZeroed(0x1000); - bool32 result = sub_81D3B0C(var0); + struct EReaderTrainerHillSet *var0 = AllocZeroed(0x1000); + bool32 result = TryReadTrainerHill(var0); Free(var0); return result; } diff --git a/src/ereader_screen.c b/src/ereader_screen.c index bac29cd42..8dc2a539b 100755 --- a/src/ereader_screen.c +++ b/src/ereader_screen.c @@ -402,7 +402,7 @@ static void sub_81D5084(u8 taskId) } break; case 15: - data->unkE = sub_81D3920(gDecompressionBuffer); + data->unkE = EReader_IsReceivedDataValid((struct EReaderTrainerHillSet *)gDecompressionBuffer); sub_800ABF4(data->unkE); data->unk8 = 16; break; @@ -416,7 +416,7 @@ static void sub_81D5084(u8 taskId) } break; case 17: - if (sub_81D3AB0((struct Unk81D38FC *)&gDecompressionBuffer)) + if (TryWriteTrainerHill((struct Unk81D38FC *)&gDecompressionBuffer)) { AddTextPrinterToWindow1(gUnknown_085EE0FA); sub_81D505C(&data->unk0); diff --git a/src/recorded_battle.c b/src/recorded_battle.c index acd4c2ce6..9f2be36af 100644 --- a/src/recorded_battle.c +++ b/src/recorded_battle.c @@ -322,7 +322,7 @@ static bool32 RecordedBattleToSave(struct RecordedBattleSave *battleSave, struct saveSection->checksum = CalcByteArraySum((void*)(saveSection), sizeof(*saveSection) - 4); - if (sub_8153634(31, (void*)(saveSection)) != 1) + if (TryWriteSpecialSaveSection(SECTOR_ID_RECORDED_BATTLE, (void*)(saveSection)) != 1) return FALSE; else return TRUE; @@ -491,7 +491,7 @@ bool32 MoveRecordedBattleToSaveData(void) static bool32 TryCopyRecordedBattleSaveData(struct RecordedBattleSave *dst, struct SaveSection *saveBuffer) { - if (TryCopySpecialSaveSection(SECTOR_ID_RECORDED_BATTLE, (void*)(saveBuffer)) != 1) + if (TryReadSpecialSaveSection(SECTOR_ID_RECORDED_BATTLE, (void*)(saveBuffer)) != 1) return FALSE; memcpy(dst, saveBuffer, sizeof(struct RecordedBattleSave)); diff --git a/src/save.c b/src/save.c index 361a88e1e..45a75b5dc 100644 --- a/src/save.c +++ b/src/save.c @@ -849,7 +849,7 @@ u16 sub_815355C(void) return 0; } -u32 TryCopySpecialSaveSection(u8 sector, u8* dst) +u32 TryReadSpecialSaveSection(u8 sector, u8* dst) { s32 i; s32 size; @@ -858,7 +858,7 @@ u32 TryCopySpecialSaveSection(u8 sector, u8* dst) if (sector != SECTOR_ID_TRAINER_HILL && sector != SECTOR_ID_RECORDED_BATTLE) return 0xFF; ReadFlash(sector, 0, (u8 *)&gSaveDataBuffer, sizeof(struct SaveSection)); - if (*(u32*)(&gSaveDataBuffer.data[0]) != 0xB39D) + if (*(u32*)(&gSaveDataBuffer.data[0]) != SPECIAL_SECTION_SENTINEL) return 0xFF; // copies whole save section except u32 counter i = 0; @@ -869,18 +869,18 @@ u32 TryCopySpecialSaveSection(u8 sector, u8* dst) return 1; } -u32 sub_8153634(u8 sector, u8* src) +u32 TryWriteSpecialSaveSection(u8 sector, u8* src) { s32 i; s32 size; u8* savData; void* savDataBuffer; - if (sector != 30 && sector != 31) + if (sector != SECTOR_ID_TRAINER_HILL && sector != SECTOR_ID_RECORDED_BATTLE) return 0xFF; savDataBuffer = &gSaveDataBuffer; - *(u32*)(savDataBuffer) = 0xB39D; + *(u32*)(savDataBuffer) = SPECIAL_SECTION_SENTINEL; // copies whole save section except u32 counter i = 0; diff --git a/src/trainer_hill.c b/src/trainer_hill.c index eafd1eb3d..650a748cb 100644 --- a/src/trainer_hill.c +++ b/src/trainer_hill.c @@ -428,7 +428,7 @@ void CopyTrainerHillTrainerText(u8 which, u16 trainerId) static void TrainerHillStartChallenge(void) { nullsub_2(); - if (!sub_81D3B34()) + if (!ReadTrainerHillAndValidate()) gSaveBlock1Ptr->trainerHill.field_3D6E_0f = 1; else gSaveBlock1Ptr->trainerHill.field_3D6E_0f = 0; -- cgit v1.2.3 From 8db03ba6fab0d335d6141f1a9289122c1477a7b6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 4 Apr 2019 13:44:43 -0400 Subject: Documentation of ereader helpers, 2 --- src/ereader_helpers.c | 45 ++++++++++++++++++--------------------------- src/ereader_screen.c | 2 +- 2 files changed, 19 insertions(+), 28 deletions(-) (limited to 'src') diff --git a/src/ereader_helpers.c b/src/ereader_helpers.c index 48c41301e..cd64afe0e 100755 --- a/src/ereader_helpers.c +++ b/src/ereader_helpers.c @@ -38,7 +38,7 @@ IWRAM_DATA u16 gUnknown_030012F0; IWRAM_DATA u16 gUnknown_030012F2; IWRAM_DATA u16 gUnknown_030012F4; -extern const u8 gUnknown_08625B6C[]; +extern const u8 gUnknown_08625B6C[][0x148]; static u8 sub_81D38D4(void) { @@ -47,7 +47,7 @@ static u8 sub_81D38D4(void) static bool32 Struct_Unk81D38FC_ValidateChecksum(struct Unk81D38FC *arg0) { - int checksum = CalcByteArraySum(arg0->unk0, 0x270); + int checksum = CalcByteArraySum((u8 *)arg0, 0x270); if (checksum != arg0->checksum) return FALSE; @@ -89,56 +89,47 @@ static bool32 TrainerHill_VerifyChecksum(struct EReaderTrainerHillSet *buffer) return TRUE; } -static bool32 TryWriteTrainerHill_r(struct Unk81D38FC *arg0, u8 *buffer2) +static bool32 TryWriteTrainerHill_r(struct EReaderTrainerHillSet *arg0, struct Unk81D3998 *buffer2) { int i; - const u8 *ereaderVals; memset(buffer2, 0, 0x1000); - buffer2[0] = arg0->unk0[0]; - buffer2[1] = sub_81D38D4(); - buffer2[2] = (arg0->unk0[0] + 1) / 2; + buffer2->unk_000 = arg0->unk_0; + buffer2->unk_001 = sub_81D38D4(); + buffer2->unk_002 = (arg0->unk_0 + 1) / 2; - for (i = 0; i < arg0->unk0[0]; i++) + for (i = 0; i < arg0->unk_0; i++) { if (!(i & 1)) { - u8 *var0 = &buffer2[(i / 2) * 0x3B8]; - u8 *var1 = arg0[i].unk0; - var0[8] = var1[8]; - memcpy(&var0[0x29C], &var1[0x154], 0x124); - var0 += 0xC; - var1 += 0xC; - memcpy(var0, var1, 0x148); + buffer2->unk_008[i / 2].unk_000[0] = arg0->unk_8[i].unk0; + memcpy(buffer2->unk_008[i / 2].unk_294, arg0->unk_8[i].unk14C, 0x124); + memcpy(buffer2->unk_008[i / 2].unk_004, arg0->unk_8[i].unk4, 0x148); } else { - u8 *var0 = &buffer2[(i / 2) * 0x3B8]; - u8 *var1 = arg0[i].unk0; - var0[9] = var1[8]; - memcpy(&var0[0x154], &var1[0xC], 0x148); + buffer2->unk_008[i / 2].unk_000[1] = arg0->unk_8[i].unk0; + memcpy(buffer2->unk_008[i / 2].unk_14C, arg0->unk_8[i].unk4, 0x148); } } if (i & 1) { - u8 *var0 = &buffer2[(i / 2) * 0x3B8]; - var0 += 0x154; - - ereaderVals = gUnknown_08625B6C; - memcpy(var0, &ereaderVals[(i / 2) * 0x148], 0x148); + u8 * dest = buffer2->unk_008[i / 2].unk_14C; + const u8 (* src)[0x148] = gUnknown_08625B6C; + memcpy(dest, src[i / 2], 0x148); } - ((int *)buffer2)[1] = CalcByteArraySum(buffer2 + 8, 0xEE0); + buffer2->checksum = CalcByteArraySum((u8 *)buffer2->unk_008, sizeof(struct Unk81D3998) - offsetof(struct Unk81D3998, unk_008)); if (TryWriteSpecialSaveSection(SECTOR_ID_TRAINER_HILL, (u8 *)buffer2) != 1) return FALSE; return TRUE; } -bool32 TryWriteTrainerHill(struct Unk81D38FC *arg0) +bool32 TryWriteTrainerHill(struct EReaderTrainerHillSet *arg0) { - u8 *var0 = AllocZeroed(0x1000); + struct Unk81D3998 *var0 = AllocZeroed(0x1000); bool32 result = TryWriteTrainerHill_r(arg0, var0); Free(var0); return result; diff --git a/src/ereader_screen.c b/src/ereader_screen.c index 8dc2a539b..f74efa32b 100755 --- a/src/ereader_screen.c +++ b/src/ereader_screen.c @@ -416,7 +416,7 @@ static void sub_81D5084(u8 taskId) } break; case 17: - if (TryWriteTrainerHill((struct Unk81D38FC *)&gDecompressionBuffer)) + if (TryWriteTrainerHill((struct EReaderTrainerHillSet *)&gDecompressionBuffer)) { AddTextPrinterToWindow1(gUnknown_085EE0FA); sub_81D505C(&data->unk0); -- cgit v1.2.3 From 016021ac049961a3ad2b2419f358801138edd757 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 4 Apr 2019 14:55:24 -0400 Subject: Move gUnknown_02022C90 from sym_ewram.txt --- src/berry_crush.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/berry_crush.c b/src/berry_crush.c index 51dbe8203..307bd49a7 100755 --- a/src/berry_crush.c +++ b/src/berry_crush.c @@ -139,7 +139,7 @@ void sub_8022960(struct BerryCrushGame *); void sub_8022524(struct BerryCrushGame_138 *, u16); void sub_8022B28(struct Sprite *); -extern struct BerryCrushGame *gUnknown_02022C90; +static EWRAM_DATA struct BerryCrushGame *gUnknown_02022C90 = NULL; extern const struct BgTemplate gUnknown_082F32C8[4]; extern const u8 gBerryCrushGrinderTopTilemap[]; -- cgit v1.2.3 From 704f025a00e32a910b6fd70a54511844e755663f Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Wed, 3 Apr 2019 10:36:50 -0400 Subject: Fix a typo in as(s)istattackselect --- src/battle_script_commands.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index d1d8d87ac..2e78e1ca0 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -296,7 +296,7 @@ static void atkDA_tryswapabilities(void); static void atkDB_tryimprison(void); static void atkDC_trysetgrudge(void); static void atkDD_weightdamagecalculation(void); -static void atkDE_asistattackselect(void); +static void atkDE_assistattackselect(void); static void atkDF_trysetmagiccoat(void); static void atkE0_trysetsnatch(void); static void atkE1_trygetintimidatetarget(void); @@ -548,7 +548,7 @@ void (* const gBattleScriptingCommandsTable[])(void) = atkDB_tryimprison, atkDC_trysetgrudge, atkDD_weightdamagecalculation, - atkDE_asistattackselect, + atkDE_assistattackselect, atkDF_trysetmagiccoat, atkE0_trysetsnatch, atkE1_trygetintimidatetarget, @@ -9660,7 +9660,7 @@ static void atkDD_weightdamagecalculation(void) gBattlescriptCurrInstr++; } -static void atkDE_asistattackselect(void) +static void atkDE_assistattackselect(void) { s32 chooseableMovesNo = 0; struct Pokemon* party; -- cgit v1.2.3 From 9e74409bb2032e25d431dda116462759e5b51fe0 Mon Sep 17 00:00:00 2001 From: Fontbane Date: Thu, 4 Apr 2019 19:28:37 -0400 Subject: Fix labels, label more scripts --- src/data/bard_music/pokemon.h | 2 +- src/easy_chat.c | 2 +- src/item_use.c | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/data/bard_music/pokemon.h b/src/data/bard_music/pokemon.h index 693005360..112a5870b 100644 --- a/src/data/bard_music/pokemon.h +++ b/src/data/bard_music/pokemon.h @@ -2,7 +2,7 @@ #define GUARD_DATA_BARD_MUSIC_POKEMON_H #include "constants/species.h" -const u16 gUnknown_085F5490 = NUM_SPECIES; +const u16 gNumSpeciesNames = NUM_SPECIES; const struct BardSound gBardSounds_Pokemon[][6] = { { diff --git a/src/easy_chat.c b/src/easy_chat.c index 1cb7b0fe8..4388592f7 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -4882,7 +4882,7 @@ bool8 ECWord_CheckIfOutsideOfValidRange(u16 easyChatWord) { case EC_GROUP_POKEMON: case EC_GROUP_POKEMON_2: - numWordsInGroup = gUnknown_085F5490; + numWordsInGroup = gNumSpeciesNames; break; case EC_GROUP_MOVE_1: case EC_GROUP_MOVE_2: diff --git a/src/item_use.c b/src/item_use.c index 7947964ca..159ece398 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -42,8 +42,8 @@ #include "constants/vars.h" #include "event_obj_lock.h" -extern u8 Route102_EventScript_274482[]; -extern u8 Route102_EventScript_2744C0[]; +extern u8 BerryTree_EventScript_274482[]; +extern u8 BerryTree_EventScript_2744C0[]; extern u8 BattleFrontier_OutsideEast_EventScript_242CFC[]; void SetUpItemUseCallback(u8 taskId); @@ -669,7 +669,7 @@ void sub_80FDD74(u8 taskId) { RemoveBagItem(gSpecialVar_ItemId, 1); ScriptContext2_Enable(); - ScriptContext1_SetupScript(Route102_EventScript_274482); + ScriptContext1_SetupScript(BerryTree_EventScript_274482); DestroyTask(taskId); } @@ -694,7 +694,7 @@ void ItemUseOutOfBattle_WailmerPail(u8 taskId) void sub_80FDE08(u8 taskId) { ScriptContext2_Enable(); - ScriptContext1_SetupScript(Route102_EventScript_2744C0); + ScriptContext1_SetupScript(BerryTree_EventScript_2744C0); DestroyTask(taskId); } -- cgit v1.2.3