diff options
Diffstat (limited to 'src/intro.c')
-rw-r--r-- | src/intro.c | 3167 |
1 files changed, 0 insertions, 3167 deletions
diff --git a/src/intro.c b/src/intro.c deleted file mode 100644 index a43e0356c..000000000 --- a/src/intro.c +++ /dev/null @@ -1,3167 +0,0 @@ -#include "global.h" -#include "gba/m4a_internal.h" -#include "intro.h" -#include "data2.h" -#include "decompress.h" -#include "hall_of_fame.h" -#include "intro_credits_graphics.h" -#include "libgncmultiboot.h" -#include "link.h" -#include "m4a.h" -#include "main.h" -#include "new_game.h" -#include "palette.h" -#include "rng.h" -#include "save.h" -#include "songs.h" -#include "sound.h" -#include "species.h" -#include "task.h" -#include "title_screen.h" -#include "trig.h" -#include "unknown_task.h" - -extern struct SpriteTemplate gUnknown_02024E8C; -extern u16 gUnknown_02039358; -extern u16 gUnknown_0203935A; -extern u16 gSaveFileStatus; -extern u8 gReservedSpritePaletteCount; -extern const u8 gInterfaceGfx_PokeBall[]; -extern const u8 gInterfacePal_PokeBall[]; -extern const u8 gIntroCopyright_Gfx[]; -extern const u16 gIntroCopyright_Pal[]; -extern const u16 gIntroCopyright_Tilemap[]; -extern void *const gUnknown_0840B5A0[]; - -static EWRAM_DATA u16 gUnknown_02039318 = 0; -static EWRAM_DATA u16 gUnknown_0203931A = 0; - -u32 gIntroFrameCounter; -struct GcmbStruct gMultibootProgramStruct; - -//-------------------------------------------------- -// Graphics Data -//-------------------------------------------------- - -static const u16 Palette_406340[] = INCBIN_U16("graphics/intro/unknown1.gbapal"); -static const u16 Palette_406360[] = INCBIN_U16("graphics/intro/unknown2.gbapal"); -#if ENGLISH -static const u8 gIntroTiles[] = INCBIN_U8("graphics/intro/intro.4bpp.lz"); -#elif GERMAN -extern const u8 gIntroTiles[]; -#endif -static const u16 gIntro1BGPals[][16] = -{ - INCBIN_U16("graphics/intro/intro1_bgpal1.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal2.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal3.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal4.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal5.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal6.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal7.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal8.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal9.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal10.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal11.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal12.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal13.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal14.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal15.gbapal"), - INCBIN_U16("graphics/intro/intro1_bgpal16.gbapal"), -}; -static const u8 gIntro1BG0_Tilemap[] = INCBIN_U8("graphics/intro/intro1_bg0_map.bin.lz"); -static const u8 gIntro1BG1_Tilemap[] = INCBIN_U8("graphics/intro/intro1_bg1_map.bin.lz"); -static const u8 gIntro1BG2_Tilemap[] = INCBIN_U8("graphics/intro/intro1_bg2_map.bin.lz"); -static const u8 gIntro1BG3_Tilemap[] = INCBIN_U8("graphics/intro/intro1_bg3_map.bin.lz"); -static const u8 gIntro1BGLeavesGfx[] = INCBIN_U8("graphics/intro/introgfx.4bpp.lz"); -static const u16 gIntro3PokeballPal[] = INCBIN_U16("graphics/intro/intro3_pokeball.gbapal"); -static const u8 gIntro3Pokeball_Tilemap[] = INCBIN_U8("graphics/intro/intro3_pokeball_map.bin.lz"); -static const u8 gIntro3Pokeball_Gfx[] = INCBIN_U8("graphics/intro/intro3_pokeball.8bpp.lz"); -static const u16 gIntro3Streaks_Pal[] = INCBIN_U16("graphics/intro/intro3_streaks.gbapal"); -static const u8 gIntro3Streaks_Gfx[] = INCBIN_U8("graphics/intro/intro3_streaks.4bpp.lz"); -static const u8 gIntro3Streaks_Tilemap[] = INCBIN_U8("graphics/intro/intro3_streaks_map.bin.lz"); -static const u16 gIntro3Misc1Palette[] = INCBIN_U16("graphics/intro/intro3_misc1.gbapal"); -static const u16 gIntro3Misc2Palette[] = INCBIN_U16("graphics/intro/intro3_misc2.gbapal"); -static const u8 gIntro3MiscTiles[] = INCBIN_U8("graphics/intro/intro3_misc.4bpp.lz"); -static const u16 gIntro1EonPalette[] = INCBIN_U16("graphics/intro/intro1_eon.gbapal"); -static const u8 gIntro1EonTiles[] = INCBIN_U8("graphics/intro/intro1_eon.4bpp.lz"); -static const struct OamData gOamData_840ADE8 = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 2, - .tileNum = 0, - .priority = 0, - .paletteNum = 0, - .affineParam = 0, -}; -static const union AnimCmd gSpriteAnim_840ADF0[] = -{ - ANIMCMD_FRAME(16, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840ADF8[] = -{ - ANIMCMD_FRAME(24, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AE00[] = -{ - ANIMCMD_FRAME(0, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AE08[] = -{ - ANIMCMD_FRAME(48, 8), - ANIMCMD_END, -}; -static const union AnimCmd *const gSpriteAnimTable_840AE10[] = -{ - gSpriteAnim_840ADF0, - gSpriteAnim_840ADF8, - gSpriteAnim_840AE00, - gSpriteAnim_840AE08, -}; -static void sub_813D208(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_840AE20 = -{ - .tileTag = 2000, - .paletteTag = 2000, - .oam = &gOamData_840ADE8, - .anims = gSpriteAnimTable_840AE10, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813D208, -}; -static const union AnimCmd Unknown_40AE38[] = -{ - ANIMCMD_FRAME(0, 4), - ANIMCMD_FRAME(64, 4), - ANIMCMD_FRAME(128, 4), - ANIMCMD_FRAME(192, 4), - ANIMCMD_JUMP(0), -}; -static const union AnimCmd Unknown_40AE4C[] = -{ - ANIMCMD_FRAME(0, 8), - ANIMCMD_FRAME(64, 8), - ANIMCMD_FRAME(128, 8), - ANIMCMD_FRAME(192, 8), - ANIMCMD_JUMP(0), -}; -static const union AnimCmd Unknown_40AE60[] = -{ - ANIMCMD_FRAME(256, 4), - ANIMCMD_FRAME(0x140, 4), - ANIMCMD_FRAME(0x180, 4), - ANIMCMD_END, -}; -static const union AnimCmd Unknown_40AE70[] = -{ - ANIMCMD_FRAME(0x180, 16), - ANIMCMD_FRAME(0x140, 16), - ANIMCMD_FRAME(256, 16), - ANIMCMD_END, -}; -static const union AnimCmd *const gUnknown_0840AE80[] = -{ - Unknown_40AE38, - Unknown_40AE4C, - Unknown_40AE60, - Unknown_40AE70, -}; -static const struct OamData gOamData_840AE90 = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 1, - .tileNum = 0, - .priority = 0, - .paletteNum = 0, - .affineParam = 0, -}; -static const struct OamData gOamData_840AE98 = -{ - .y = 160, - .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 struct OamData gOamData_840AEA0 = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 2, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 0, - .paletteNum = 0, - .affineParam = 0, -}; -static const union AnimCmd gSpriteAnim_840AEA8[] = -{ - ANIMCMD_FRAME(80, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AEB0[] = -{ - ANIMCMD_FRAME(84, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AEB8[] = -{ - ANIMCMD_FRAME(88, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AEC0[] = -{ - ANIMCMD_FRAME(92, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AEC8[] = -{ - ANIMCMD_FRAME(96, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AED0[] = -{ - ANIMCMD_FRAME(100, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AED8[] = -{ - ANIMCMD_FRAME(104, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AEE0[] = -{ - ANIMCMD_FRAME(112, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AEE8[] = -{ - ANIMCMD_FRAME(113, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AEF0[] = -{ - ANIMCMD_FRAME(114, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AEF8[] = -{ - ANIMCMD_FRAME(115, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AF00[] = -{ - ANIMCMD_FRAME(116, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AF08[] = -{ - ANIMCMD_FRAME(117, 8), - ANIMCMD_END, -}; -static const union AnimCmd gSpriteAnim_840AF10[] = -{ - ANIMCMD_FRAME(128, 8), - ANIMCMD_END, -}; -#if GERMAN -static const union AnimCmd gSpriteAnim_8416DA4[] = -{ - ANIMCMD_FRAME(118, 8), - ANIMCMD_END, -}; -#endif -static const union AnimCmd *const gSpriteAnimTable_840AF18[] = -{ - gSpriteAnim_840AEA8, - gSpriteAnim_840AEB0, - gSpriteAnim_840AEB8, - gSpriteAnim_840AEC0, - gSpriteAnim_840AEC8, - gSpriteAnim_840AED0, - gSpriteAnim_840AED8, -}; -static const union AnimCmd *const gSpriteAnimTable_840AF34[] = -{ - gSpriteAnim_840AEE0, - gSpriteAnim_840AEE8, - gSpriteAnim_840AEF0, - gSpriteAnim_840AEF8, - gSpriteAnim_840AF00, - gSpriteAnim_840AF08, -#if GERMAN - gSpriteAnim_8416DA4, -#endif -}; -static const union AnimCmd *const gSpriteAnimTable_840AF4C[] = -{ - gSpriteAnim_840AF10, -}; -static const s16 gUnknown_0840AF50[][2] = -{ - {0, -72}, - {1, -56}, - {2, -40}, - {3, -24}, - {4, 8}, - {5, 24}, - {3, 40}, - {1, 56}, - {6, 72}, -}; -static const s16 gUnknown_0840AF74[][2] = -{ - {0, -28}, - {1, -20}, - {2, -12}, - {3, -4}, - {2, 4}, - {4, 12}, - {5, 20}, - {3, 28}, -}; -static void sub_813D908(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_840AF94 = -{ - .tileTag = 2000, - .paletteTag = 2001, - .oam = &gOamData_840AE90, - .anims = gSpriteAnimTable_840AF18, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813D908, -}; -static const struct SpriteTemplate gSpriteTemplate_840AFAC = -{ - .tileTag = 2000, - .paletteTag = 2001, - .oam = &gOamData_840AE98, - .anims = gSpriteAnimTable_840AF34, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813D908, -}; -static const struct SpriteTemplate gSpriteTemplate_840AFC4 = -{ - .tileTag = 2000, - .paletteTag = 2001, - .oam = &gOamData_840AEA0, - .anims = gSpriteAnimTable_840AF4C, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813D908, -}; -static const struct OamData gOamData_840AFDC = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 1, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 0, - .paletteNum = 0, - .affineParam = 0, -}; -static const union AnimCmd gSpriteAnim_840AFE4[] = -{ - ANIMCMD_FRAME(0, 10), - ANIMCMD_JUMP(0), -}; -static const union AnimCmd *const gSpriteAnimTable_840AFEC[] = -{ - gSpriteAnim_840AFE4, -}; -static void sub_813DA64(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_840AFF0 = -{ - .tileTag = 2002, - .paletteTag = 2002, - .oam = &gOamData_840AFDC, - .anims = gSpriteAnimTable_840AFEC, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813DA64, -}; -const struct CompressedSpriteSheet gUnknown_0840B008[] = -{ - {gIntroTiles, 0x1400, 2000}, - {NULL}, -}; -const struct CompressedSpriteSheet gUnknown_0840B018[] = -{ - {gIntro1EonTiles, 0x400, 2002}, - {NULL}, -}; -const struct SpritePalette gUnknown_0840B028[] = -{ - {Palette_406340, 2000}, - {Palette_406360, 2001}, - {gIntro1EonPalette, 2002}, - {NULL}, -}; -static const union AnimCmd gUnknown_0840B048[] = -{ - ANIMCMD_FRAME(3, 0), - ANIMCMD_END, -}; -static const union AnimCmd gUnknown_0840B050[] = -{ - ANIMCMD_FRAME(0, 8), - ANIMCMD_END, -}; -static const union AnimCmd gUnknown_0840B058[] = -{ - ANIMCMD_FRAME(1, 8), - ANIMCMD_FRAME(2, 8), - ANIMCMD_END, -}; -static const union AnimCmd *const gUnknown_0840B064[] = -{ - gUnknown_0840B048, - gUnknown_0840B050, - gUnknown_0840B058, -}; -static const struct OamData gOamData_840B070 = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 1, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; -static const union AnimCmd gSpriteAnim_840B078[] = -{ - ANIMCMD_FRAME(0, 8), - ANIMCMD_END, -}; -static const union AnimCmd *const gSpriteAnimTable_840B080[] = -{ - gSpriteAnim_840B078, -}; -static void sub_813E30C(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_840B084 = -{ - .tileTag = 2002, - .paletteTag = 2002, - .oam = &gOamData_840B070, - .anims = gSpriteAnimTable_840B080, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813E30C, -}; -static const struct OamData gOamData_840B09C = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 0, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; -static const union AnimCmd gSpriteAnim_840B0A4[] = -{ - ANIMCMD_FRAME(1, 8), - ANIMCMD_END, -}; -static const union AnimCmd *const gSpriteAnimTable_840B0AC[] = -{ - gSpriteAnim_840B0A4, -}; -static void sub_813E4B8(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_840B0B0 = -{ - .tileTag = 2003, - .paletteTag = 2003, - .oam = &gOamData_840B09C, - .anims = gSpriteAnimTable_840B0AC, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813E4B8, -}; -static const struct OamData gOamData_840B0C8 = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 0, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; -static const union AnimCmd gSpriteAnim_840B0D0[] = -{ - ANIMCMD_FRAME(14, 8), - ANIMCMD_END, -}; -static const union AnimCmd *const gSpriteAnimTable_840B0D8[] = -{ - gSpriteAnim_840B0D0, -}; -static void sub_813E5E0(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_840B0DC = -{ - .tileTag = 2003, - .paletteTag = 2004, - .oam = &gOamData_840B0C8, - .anims = gSpriteAnimTable_840B0D8, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813E5E0, -}; -static void sub_813E6C0(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_840B0F4 = -{ - .tileTag = 2003, - .paletteTag = 2004, - .oam = &gOamData_840B0C8, - .anims = gSpriteAnimTable_840B0D8, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813E6C0, -}; -static const struct OamData gOamData_840B10C = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 1, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; -static const union AnimCmd gSpriteAnim_840B114[] = -{ - ANIMCMD_FRAME(6, 8), - ANIMCMD_FRAME(6, 8, .hFlip = TRUE), - ANIMCMD_JUMP(0), -}; -static const union AnimCmd *const gSpriteAnimTable_840B120[] = -{ - gSpriteAnim_840B114, -}; -static void sub_813E804(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_840B124 = -{ - .tileTag = 2003, - .paletteTag = 2004, - .oam = &gOamData_840B10C, - .anims = gSpriteAnimTable_840B120, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813E804, -}; -static const struct OamData gOamData_840B13C = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 1, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; -static const union AnimCmd gSpriteAnim_840B144[] = -{ - ANIMCMD_FRAME(10, 8), - ANIMCMD_END, -}; -static const union AnimCmd *const gSpriteAnimTable_840B14C[] = -{ - gSpriteAnim_840B144, -}; -static void sub_813E980(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_840B150 = -{ - .tileTag = 2003, - .paletteTag = 2004, - .oam = &gOamData_840B13C, - .anims = gSpriteAnimTable_840B14C, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813E980, -}; -static const u8 gUnknown_0840B168[] = {0xE6, 0xEB, 0xE4, 0xEA, 0xE5, 0xE9, 0xE7, 0xE8}; -static void sub_813EA60(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_840B170 = -{ - .tileTag = 2003, - .paletteTag = 2004, - .oam = &gOamData_840B13C, - .anims = gSpriteAnimTable_840B14C, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813EA60, -}; -static const u16 gUnknown_0840B188[] = {0x200, 0x1C0, 0x180, 0x140, 0x100, 0xE0, 0xC0, 0xA0, 0x80, 0x80}; -static const struct OamData gOamData_840B19C = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 1, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; -static const union AnimCmd gSpriteAnim_840B1A4[] = -{ - ANIMCMD_FRAME(2, 8), - ANIMCMD_END, -}; -static const union AnimCmd *const gSpriteAnimTable_840B1AC[] = -{ - gSpriteAnim_840B1A4, -}; -static void sub_813EBBC(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_840B1B0 = -{ - .tileTag = 2003, - .paletteTag = 2004, - .oam = &gOamData_840B19C, - .anims = gSpriteAnimTable_840B1AC, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813EBBC, -}; -static void sub_813EC90(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_840B1C8 = -{ - .tileTag = 2003, - .paletteTag = 2004, - .oam = &gOamData_840B19C, - .anims = gSpriteAnimTable_840B1AC, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813EC90, -}; -static const struct OamData gOamData_840B1E0 = -{ - .y = 160, - .affineMode = 0, - .objMode = 0, - .mosaic = 0, - .bpp = 0, - .shape = 0, - .x = 0, - .matrixNum = 0, - .size = 3, - .tileNum = 0, - .priority = 1, - .paletteNum = 0, - .affineParam = 0, -}; -static const union AnimCmd gSpriteAnim_840B1E8[] = -{ - ANIMCMD_FRAME(16, 8), - ANIMCMD_END, -}; -static const union AnimCmd *const gSpriteAnimTable_840B1F0[] = -{ - gSpriteAnim_840B1E8, -}; -static void sub_813EDFC(struct Sprite *sprite); -static const struct SpriteTemplate gSpriteTemplate_840B1F4 = -{ - .tileTag = 2003, - .paletteTag = 2003, - .oam = &gOamData_840B1E0, - .anims = gSpriteAnimTable_840B1F0, - .images = NULL, - .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_813EDFC, -}; -const struct CompressedSpriteSheet gIntro3PokeballGfx_Table[] = -{ - {gInterfaceGfx_PokeBall, 0x100, 2002}, - {NULL}, -}; -const struct CompressedSpriteSheet gIntro3MiscGfx_Table[] = -{ - {gIntro3MiscTiles, 0xa00, 2003}, - {NULL}, -}; -const struct CompressedSpritePalette gInterfacePokeballPal_Table[] = -{ - {gInterfacePal_PokeBall, 2002}, - {NULL}, -}; -const struct SpritePalette gIntro3MiscPal_Table[] = -{ - {gIntro3Misc1Palette, 2003}, - {gIntro3Misc2Palette, 2004}, - {NULL}, -}; -const u32 unusedData = 0x02000000; - -static void MainCB2_EndIntro(void); -static void Task_IntroLoadPart1Graphics(u8); -static void Task_IntroFadeIn(u8); -static void Task_IntroWaterDrops(u8); -static void Task_IntroScrollDownAndShowEon(u8); -static void Task_IntroWaitToSetupPart2(u8); -static void Task_IntroLoadPart2Graphics(u8); -static void Task_IntroStartBikeRide(u8); -static void Task_IntroHandleBikeAndEonMovement(u8); -static void Task_IntroWaitToSetupPart3(u8); -static void Task_IntroLoadPart3Graphics(u8); -static void Task_IntroSpinAndZoomPokeball(u8); -static void Task_IntroWaitToSetupPart3DoubleFight(u8); -static void Task_IntroLoadPart3Streaks(u8); -static void task_intro_14(u8); -static void task_intro_15(u8); -static void task_intro_16(u8); -static void task_intro_17(u8); -static void Task_IntroPokemonBattle(u8); -static void task_intro_19(u8); -static void task_intro_20(u8); -static void intro_reset_and_hide_bgs(void); -static void sub_813CCE8(u8); -static u16 sub_813CE88(u16, s16, s16, u16, u8); -static u8 sub_813CFA8(u16, u16, u16, u16); -static void sub_813D084(u8); -static void sub_813D220(struct Sprite *); -static void sub_813D368(struct Sprite *); -static void sub_813D414(struct Sprite *); -static void SpriteCB_WaterDropFall(struct Sprite *); -static u8 CreateWaterDrop(s16, s16, u16, u16, u16, u8); -static void sub_813D788(struct Sprite *); -static void sub_813D880(struct Sprite *); -static u8 CreateGameFreakLogo(s16, s16, u8); -static void sub_813DB9C(struct Sprite *); -static void sub_813DE70(struct Sprite *); -static void sub_813E10C(struct Sprite *); -static void sub_813E210(struct Sprite *); -static void sub_813E580(u16, u16); -static void sub_813E7C0(u8); -static void sub_813E930(u8); -static void InitIntroTorchicAttackAnim(u8); -static void InitIntroMudkipAttackAnim(u8); - -static void VBlankCB_Intro(void) -{ - LoadOam(); - ProcessSpriteCopyRequests(); - TransferPlttBuffer(); -} - -static void MainCB2_Intro(void) -{ - RunTasks(); - AnimateSprites(); - BuildOamBuffer(); - UpdatePaletteFade(); - if (gMain.newKeys && !gPaletteFade.active) - SetMainCallback2(MainCB2_EndIntro); - else if (gIntroFrameCounter != -1) - gIntroFrameCounter++; -} - -static void MainCB2_EndIntro(void) -{ - if (!UpdatePaletteFade()) - SetMainCallback2(CB2_InitTitleScreen); -} - -static void LoadCopyrightGraphics(u16 tilesetAddress, u16 tilemapAddress, u16 paletteAddress) -{ - LZ77UnCompVram(gIntroCopyright_Gfx, (void *)(VRAM + tilesetAddress)); - LoadPalette(gIntroCopyright_Pal, paletteAddress, 0x20); - CpuCopy16(gIntroCopyright_Tilemap, (void *)(VRAM + tilemapAddress), 0x500); -} - -static void SerialCB_CopyrightScreen(void) -{ - GameCubeMultiBoot_HandleSerialInterrupt(&gMultibootProgramStruct); -} - -static u8 SetUpCopyrightScreen(void) -{ - u16 ime; - - switch (gMain.state) - { - case 0: - SetVBlankCallback(NULL); - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BLDY = 0; - *(u16 *)PLTT = 0x7FFF; - REG_DISPCNT = 0; - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE); - DmaFill32(3, 0, (void *)OAM, OAM_SIZE); - DmaFill16(3, 0, (void *)(PLTT + 2), PLTT_SIZE - 2); - ResetPaletteFade(); - LoadCopyrightGraphics(0, 0x3800, 0); - remove_some_task(); - ResetTasks(); - ResetSpriteData(); - FreeAllSpritePalettes(); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0xFFFF); - REG_BG0CNT = BGCNT_PRIORITY(0) - | BGCNT_CHARBASE(0) - | BGCNT_SCREENBASE(7) - | BGCNT_16COLOR - | BGCNT_TXT256x256; - ime = REG_IME; - REG_IME = 0; - REG_IE |= INTR_FLAG_VBLANK; - REG_IME = ime; - REG_DISPSTAT |= DISPSTAT_VBLANK_INTR; - SetVBlankCallback(VBlankCB_Intro); - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON; - SetSerialCallback(SerialCB_CopyrightScreen); - GameCubeMultiBoot_Init(&gMultibootProgramStruct); - default: - UpdatePaletteFade(); - gMain.state++; - GameCubeMultiBoot_Main(&gMultibootProgramStruct); - break; - case 140: - GameCubeMultiBoot_Main(&gMultibootProgramStruct); - if (gMultibootProgramStruct.gcmb_field_2 != 1) - { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0); - gMain.state++; - } - break; - case 141: - if (UpdatePaletteFade()) - break; - CreateTask(Task_IntroLoadPart1Graphics, 0); - SetMainCallback2(MainCB2_Intro); - if (gMultibootProgramStruct.gcmb_field_2) - { - GameCubeMultiBoot_ExecuteProgram(&gMultibootProgramStruct); - } - else - { - GameCubeMultiBoot_Quit(); - SetSerialCallback(SerialCB); - } - return 0; - } - - return 1; -} - -void CB2_InitCopyrightScreenAfterBootup(void) -{ - if (!SetUpCopyrightScreen()) - { - sub_8052E4C(); - ResetSaveCounters(); - sub_8125EC8(0); - if (gSaveFileStatus == 0 || gSaveFileStatus == 2) - ClearSav2(); - SetPokemonCryStereo(gSaveBlock2.optionsSound); - } -} - -void CB2_InitCopyrightScreenAfterTitleScreen(void) -{ - SetUpCopyrightScreen(); -} - -static void Task_IntroLoadPart1Graphics(u8 taskId) -{ - SetVBlankCallback(NULL); - gUnknown_02039318 = Random() & 1; - intro_reset_and_hide_bgs(); - REG_BG3VOFS = 0; - REG_BG2VOFS = 0x50; - REG_BG1VOFS = 0x18; - REG_BG0VOFS = 0x28; - LZ77UnCompVram(gIntro1BGLeavesGfx, (void *)VRAM); - LZ77UnCompVram(gIntro1BG0_Tilemap, (void *)(VRAM + 0x8000)); - DmaClear16(3, VRAM + 0x8800, 0x800); - LZ77UnCompVram(gIntro1BG1_Tilemap, (void *)(VRAM + 0x9000)); - DmaClear16(3, VRAM + 0x9800, 0x800); - LZ77UnCompVram(gIntro1BG2_Tilemap, (void *)(VRAM + 0xA000)); - DmaClear16(3, VRAM + 0xA800, 0x800); - LZ77UnCompVram(gIntro1BG3_Tilemap, (void *)(VRAM + 0xB000)); - DmaClear16(3, VRAM + 0xB800, 0x800); - LoadPalette(gIntro1BGPals, 0, sizeof(gIntro1BGPals)); - REG_BG3CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(22) | BGCNT_16COLOR | BGCNT_TXT256x512; - REG_BG2CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(20) | BGCNT_16COLOR | BGCNT_TXT256x512; - REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(18) | BGCNT_16COLOR | BGCNT_TXT256x512; - REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(16) | BGCNT_16COLOR | BGCNT_TXT256x512; - LoadCompressedObjectPic(&gUnknown_0840B008[0]); - LoadCompressedObjectPic(&gUnknown_0840B018[0]); - LoadSpritePalettes(gUnknown_0840B028); - CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1F0, 0x20); - CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1E1, 0x1E); - CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1D2, 0x1C); - CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1C3, 0x1A); - CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1B4, 0x18); - CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1A5, 0x16); - CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x196, 0x14); - gTasks[taskId].data[0] = CreateWaterDrop(236, -14, 0x200, 1, 0x78, FALSE); - gTasks[taskId].func = Task_IntroFadeIn; -} - -static void Task_IntroFadeIn(u8 taskId) -{ - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); - SetVBlankCallback(VBlankCB_Intro); - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON; - gTasks[taskId].func = Task_IntroWaterDrops; - gIntroFrameCounter = 0; - m4aSongNumStart(0x19E); - ResetSerial(); -} - -static void Task_IntroWaterDrops(u8 taskId) -{ - //start moving rock - if (gIntroFrameCounter == 76) - gSprites[gTasks[taskId].data[0]].data0 = 1; - - //drop rock - if (gIntroFrameCounter == 251) - gSprites[gTasks[taskId].data[0]].data0 = 2; - - if (gIntroFrameCounter == 368) - CreateWaterDrop(48, 0, 0x400, 5, 0x70, TRUE); - if (gIntroFrameCounter == 384) - CreateWaterDrop(200, 60, 0x400, 9, 0x80, TRUE); - - if (gIntroFrameCounter == 560) - CreateGameFreakLogo(DISPLAY_WIDTH / 2, DISPLAY_HEIGHT / 2, CreateTask(sub_813CCE8, 0)); - - if (gIntroFrameCounter > 739) - { - gTasks[taskId].data[1] = 0x50; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 0x18; - gTasks[taskId].data[4] = 0; - gTasks[taskId].data[5] = 0x28; - gTasks[taskId].data[6] = 0; - gTasks[taskId].func = Task_IntroScrollDownAndShowEon; - } -} - -static void Task_IntroScrollDownAndShowEon(u8 taskId) -{ - if (gIntroFrameCounter < 904) - { - s32 r2; - - //slide backgrounds downward - r2 = (gTasks[taskId].data[1] << 16) + (u16)gTasks[taskId].data[2] - 0xC000; - gTasks[taskId].data[1] = r2 >> 16; - gTasks[taskId].data[2] = r2; - REG_BG2VOFS = gTasks[taskId].data[1]; - r2 = (gTasks[taskId].data[3] << 16) + (u16)gTasks[taskId].data[4] - 0x10000; - gTasks[taskId].data[3] = r2 >> 16; - gTasks[taskId].data[4] = r2; - REG_BG1VOFS = gTasks[taskId].data[3]; - r2 = (gTasks[taskId].data[5] << 16) + (u16)gTasks[taskId].data[6] - 0x18000; - gTasks[taskId].data[5] = r2 >> 16; - gTasks[taskId].data[6] = r2; - REG_BG0VOFS = gTasks[taskId].data[5]; - - //show Lati@s sprite - if (gIntroFrameCounter == 880) - { - u8 spriteId = CreateSprite(&gSpriteTemplate_840AFF0, 200, 160, 10); - - gSprites[spriteId].invisible = 1; - } - } - else - { - //fade to white - if (gIntroFrameCounter > 1007) - { - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0xFFFF); - gTasks[taskId].func = Task_IntroWaitToSetupPart2; - } - } -} - -static void Task_IntroWaitToSetupPart2(u8 taskId) -{ - if (gIntroFrameCounter > 1026) - gTasks[taskId].func = Task_IntroLoadPart2Graphics; -} - -static void Task_IntroLoadPart2Graphics(u8 taskId) -{ - intro_reset_and_hide_bgs(); - SetVBlankCallback(NULL); - ResetSpriteData(); - FreeAllSpritePalettes(); - gUnknown_02039358 = 0; - gUnknown_0203935A = 0; -#ifdef SAPPHIRE - load_intro_part2_graphics(0); -#else - load_intro_part2_graphics(1); -#endif - gTasks[taskId].func = Task_IntroStartBikeRide; -} - -static void Task_IntroStartBikeRide(u8 taskId) -{ - u8 spriteId; - - if (gUnknown_02039318 == 0) - LoadCompressedObjectPic(&gIntro2BrendanSpriteSheet); - else - LoadCompressedObjectPic(&gIntro2MaySpriteSheet); - LoadCompressedObjectPic(&gIntro2BicycleSpriteSheet); -#ifdef SAPPHIRE - LoadCompressedObjectPic(&gIntro2LatiasSpriteSheet); -#else - LoadCompressedObjectPic(&gIntro2LatiosSpriteSheet); -#endif - LoadSpritePalettes(gIntro2SpritePalettes); - if (gUnknown_02039318 == 0) - spriteId = intro_create_brendan_sprite(0x110, 100); - else - spriteId = intro_create_may_sprite(0x110, 100); - gSprites[spriteId].callback = sub_813D788; - gSprites[spriteId].anims = gUnknown_0840AE80; - gTasks[taskId].data[1] = spriteId; -#ifdef SAPPHIRE - spriteId = intro_create_latias_sprite(-0x40, 0x3C); -#else - spriteId = intro_create_latios_sprite(-0x40, 0x3C); -#endif - gSprites[spriteId].callback = sub_813D880; - gTasks[taskId].data[2] = spriteId; - BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0xFFFF); - SetVBlankCallback(VBlankCB_Intro); -#ifdef SAPPHIRE - gTasks[taskId].data[0] = sub_8148EC0(0, 0x4000, 0x40, 0x10); - sub_8148C78(0); -#else - gTasks[taskId].data[0] = sub_8148EC0(1, 0x4000, 0x400, 0x10); - sub_8148C78(1); -#endif - gTasks[taskId].func = Task_IntroHandleBikeAndEonMovement; -} - -static void Task_IntroHandleBikeAndEonMovement(u8 taskId) -{ - s16 a; - u16 sine; - - if (gIntroFrameCounter > 1823) - { - BeginNormalPaletteFade(0xFFFFFFFF, 16, 0, 16, 0xFFFF); - gTasks[taskId].func = Task_IntroWaitToSetupPart3; - } - if (gIntroFrameCounter == 1109) - gSprites[gTasks[taskId].data[1]].data0 = 1; - if (gIntroFrameCounter == 1214) - gSprites[gTasks[taskId].data[1]].data0 = 0; - if (gIntroFrameCounter == 1394) - gSprites[gTasks[taskId].data[2]].data0 = 1; - if (gIntroFrameCounter == 1398) - gSprites[gTasks[taskId].data[1]].data0 = 2; - if (gIntroFrameCounter == 1586) - gSprites[gTasks[taskId].data[1]].data0 = 3; - if (gIntroFrameCounter == 1727) - gSprites[gTasks[taskId].data[1]].data0 = 4; - - //TODO: Clean this up - a = (((u16)gTasks[taskId].data[3] << 16) >> 18) & 0x7F; - sine = Sin(a, 48); - gUnknown_0203935A = sine; - if (gTasks[taskId].data[3] < 512) - gTasks[taskId].data[3]++; -#ifdef SAPPHIRE - sub_8149020(0); -#else - sub_8149020(1); -#endif -} - -static void Task_IntroWaitToSetupPart3(u8 taskId) -{ - if (gIntroFrameCounter > 2068) - { - DestroyTask(gTasks[taskId].data[0]); - gTasks[taskId].func = Task_IntroLoadPart3Graphics; - } -} - -static void Task_IntroLoadPart3Graphics(u8 taskId) -{ - intro_reset_and_hide_bgs(); - LZ77UnCompVram(gIntro3Pokeball_Gfx, (void *)VRAM); - LZ77UnCompVram(gIntro3Pokeball_Tilemap, (void *)(VRAM + 0x4000)); - LoadPalette(gIntro3PokeballPal, 0, 0x200); - gTasks[taskId].data[0] = 0; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 0; - sub_813CE30(0x78, 0x50, 0, 0); - ResetSpriteData(); - FreeAllSpritePalettes(); - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0xFFFF); - REG_BG2CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(8) | BGCNT_256COLOR | BGCNT_AFF256x256; - REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON; - gTasks[taskId].func = Task_IntroSpinAndZoomPokeball; - gIntroFrameCounter = 0; - m4aSongNumStart(0x1BA); -} - -static void Task_IntroSpinAndZoomPokeball(u8 taskId) -{ - gTasks[taskId].data[0] += 0x400; - if (gTasks[taskId].data[1] <= 0x6BF) - { - gTasks[taskId].data[1] += gTasks[taskId].data[2]; - gTasks[taskId].data[2]++; - } - else - { - gTasks[taskId].func = Task_IntroWaitToSetupPart3DoubleFight; - } - sub_813CE30(0x78, 0x50, 0x10000 / gTasks[taskId].data[1], gTasks[taskId].data[0]); - if (gIntroFrameCounter == 44) - BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, 0xFFFF); -} - -static void Task_IntroWaitToSetupPart3DoubleFight(u8 taskId) -{ - if (gIntroFrameCounter > 59) - gTasks[taskId].func = Task_IntroLoadPart3Streaks; -} - -extern u8 unk_2000000[][32]; - -static void Task_IntroLoadPart3Streaks(u8 taskId) -{ - u16 i; - void *vram; - - intro_reset_and_hide_bgs(); - for (i = 0; i < 32; i++) - { - unk_2000000[0][i] = 0; - unk_2000000[1][i] = 17; - unk_2000000[2][i] = 34; - } - vram = (void *)VRAM; - DmaCopy16(3, unk_2000000, vram, 0x60); - for (i = 0; i < 0x280; i++) - ((u16 *)(VRAM + 0x3000))[i] = 0xF001; - for (i = 0; i < 0x80; i++) - ((u16 *)(VRAM + 0x3800))[i] = 0xF002; - for (i = 0; i < 0x180; i++) - ((u16 *)(VRAM + 0x3900))[i] = 0xF000; - for (i = 0; i < 0x80; i++) - ((u16 *)(VRAM + 0x3C00))[i] = 0xF002; - gPlttBufferUnfaded[0xF0] = RGB_WHITE; - gPlttBufferFaded[0xF0] = RGB_WHITE; - sub_813D084(1); - gPlttBufferUnfaded[0xF2] = RGB_BLACK; - gPlttBufferFaded[0xF2] = RGB_BLACK; - LZ77UnCompVram(gIntro3Streaks_Gfx, (void *)(VRAM + 0x4000)); - LZ77UnCompVram(gIntro3Streaks_Tilemap, (void *)(VRAM + 0x7000)); - LoadPalette(gIntro3Streaks_Pal, 0, 0x20); - ResetSpriteData(); - FreeAllSpritePalettes(); - gReservedSpritePaletteCount = 8; - LoadCompressedObjectPic(&gIntro3PokeballGfx_Table[0]); - LoadCompressedObjectPic(&gIntro3MiscGfx_Table[0]); - LoadCompressedObjectPalette(&gInterfacePokeballPal_Table[0]); - LoadSpritePalettes(gIntro3MiscPal_Table); - gTasks[taskId].func = task_intro_14; -} - -static void task_intro_14(u8 taskId) -{ - REG_WIN0H = 0xF0; - REG_WIN0V = 0xA0; - REG_WININ = 0x1C; - REG_WINOUT = 0x1D; - REG_BG3CNT = BGCNT_PRIORITY(3) - | BGCNT_CHARBASE(0) - | BGCNT_SCREENBASE(6) - | BGCNT_16COLOR - | BGCNT_TXT256x256; - REG_BG0CNT = BGCNT_PRIORITY(0) - | BGCNT_CHARBASE(0) - | BGCNT_SCREENBASE(7) - | BGCNT_16COLOR - | BGCNT_TXT256x256; - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON; - gTasks[taskId].data[15] = CreateTask(task_intro_20, 0); - gTasks[gTasks[taskId].data[15]].data[0] = 0; - gTasks[taskId].data[0] = 0; - gTasks[taskId].func = task_intro_15; -} - -static void task_intro_15(u8 taskId) -{ - u16 foo = gTasks[taskId].data[0]; - - if (gTasks[taskId].data[0] != 32) - { - u32 bar; //needed to match for some reason - - gTasks[taskId].data[0] += 4; - REG_WIN0V = (gTasks[taskId].data[0] * 256) - (bar = foo - 0x9C); - } - else - { - REG_WIN0V = 0x2080; - gTasks[taskId].func = task_intro_16; - } -} - -static void task_intro_16(u8 taskId) -{ - gTasks[taskId].func = task_intro_17; -} - -static void task_intro_17(u8 taskId) -{ - gUnknown_0203931A = 0; - gTasks[taskId].func = Task_IntroPokemonBattle; -} - -static void Task_IntroPokemonBattle(u8 taskId) -{ - u8 spriteId; - - if (gIntroFrameCounter == 80) - { - spriteId = sub_813CE88(SPECIES_SHARPEDO, 0xF0, 0xA0, 5, 1); - gSprites[spriteId].callback = sub_813DB9C; - gSprites[spriteId].data1 = 1; - gSprites[spriteId].data2 = 0; - } - if (gIntroFrameCounter == 152) - { - spriteId = sub_813CE88(SPECIES_DUSKULL, 0, 0xA0, 4, 1); - gSprites[spriteId].callback = sub_813DB9C; - gSprites[spriteId].data1 = 2; - gSprites[spriteId].data2 = 1; - } - if (gIntroFrameCounter == 219) - { - sub_813D084(0); - spriteId = sub_813CFA8(gUnknown_02039318, 0x110, 0x60, 6); - gSprites[spriteId].callback = sub_813DE70; - gTasks[taskId].data[1] = spriteId; - } - if (gIntroFrameCounter == 304) - { - gTasks[gTasks[taskId].data[15]].data[0] = 4; - gSprites[gTasks[taskId].data[1]].data0 = 2; - } - if (gIntroFrameCounter == 384) - { - gTasks[gTasks[taskId].data[15]].data[0] = 0; - gSprites[gTasks[taskId].data[1]].data0 = 4; - } - if (gIntroFrameCounter == 400) - { - BeginNormalPaletteFade(0xFF0000, 0, 0x10, 0, 0x7EFF); - } - if (gIntroFrameCounter == 432) - { - gSprites[gTasks[taskId].data[1]].data0 = 5; - } - if (gIntroFrameCounter == 462) - { - gSprites[gTasks[taskId].data[1]].data0 = 6; - gTasks[gTasks[taskId].data[15]].data[0] = 2; - } - if (gIntroFrameCounter == 463) - { - sub_813D084(1); - spriteId = sub_813CE88(SPECIES_SHARPEDO, 0xD0, 8, 5, 1); - gSprites[spriteId].callback = sub_813E10C; - gTasks[taskId].data[2] = spriteId; - sub_813E7C0(spriteId); - } - if (gIntroFrameCounter == 539) - { - spriteId = sub_813CE88(SPECIES_DUSKULL, 0xF8, 0x10, 4, 1); - gSprites[spriteId].callback = sub_813E10C; - gTasks[taskId].data[3] = spriteId; - sub_813E930(spriteId); - } - if (gIntroFrameCounter == 623) - { - gSprites[gTasks[taskId].data[2]].data0 = 2; - gSprites[gTasks[taskId].data[3]].data0 = 2; - gTasks[gTasks[taskId].data[15]].data[0] = 3; - } - if (gIntroFrameCounter == 624) - { - sub_813D084(0); - spriteId = sub_813CE88(SPECIES_MUDKIP, 0x20, 0x98, 0, 0); - gSprites[spriteId].callback = sub_813E210; - gTasks[taskId].data[4] = spriteId; - InitIntroMudkipAttackAnim(spriteId); - } - if (gIntroFrameCounter == 700) - { - spriteId = sub_813CE88(SPECIES_TORCHIC, -8, 0x90, 1, 0); - gSprites[spriteId].callback = sub_813E210; - gTasks[taskId].data[5] = spriteId; - InitIntroTorchicAttackAnim(spriteId); - } - if (gIntroFrameCounter == 776) - { - gUnknown_0203931A = 1; - gSprites[gTasks[taskId].data[4]].data0 = 2; - gSprites[gTasks[taskId].data[5]].data0 = 2; - gTasks[gTasks[taskId].data[15]].data[0] = 0; - } - if (gIntroFrameCounter == 781) - { - sub_813D084(2); - gSprites[gTasks[taskId].data[2]].data0 = 3; - gSprites[gTasks[taskId].data[3]].data0 = 3; - gSprites[gTasks[taskId].data[4]].data0 = 3; - gSprites[gTasks[taskId].data[5]].data0 = 3; - spriteId = CreateSprite(&gSpriteTemplate_840B1F4, 0x78, 0x50, 15); - gSprites[spriteId].invisible = 1; - } - if (gIntroFrameCounter == 800) - PlaySE(SE_OP_BASYU); - if (gIntroFrameCounter == 850) - BeginNormalPaletteFade(0xFFFFFFFF, 4, 0, 0x10, 0xFFFF); - if (gIntroFrameCounter == 946) - gTasks[taskId].func = task_intro_19; -} - -static void task_intro_19(u8 taskId) -{ - DestroyTask(taskId); - SetMainCallback2(MainCB2_EndIntro); -} - -static void task_intro_20(u8 taskId) -{ -#define BG2_FLAGS (BGCNT_PRIORITY(3) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(14) | BGCNT_16COLOR | BGCNT_TXT256x256) -#define DISPCNT_FLAGS (DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG2_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON) - - gTasks[taskId].data[15]++; - switch (gTasks[taskId].data[0]) - { - case 0: - REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_ON | DISPCNT_WIN0_ON; - REG_BG2CNT = 0; - gTasks[taskId].data[0] = 0xFF; - break; - case 2: - BeginNormalPaletteFade(1, 0, 0x10, 0, 0xFFFF); - REG_BG2CNT = BG2_FLAGS; - REG_DISPCNT = DISPCNT_FLAGS; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[0] = 20; - //fall through - case 20: - REG_BG2VOFS = gTasks[taskId].data[1]; - REG_BG2HOFS = gTasks[taskId].data[2]; - gTasks[taskId].data[1] += 6; - gTasks[taskId].data[2] -= 8; - break; - case 3: - BeginNormalPaletteFade(1, 0, 0x10, 0, 0xFFFF); - REG_BG2CNT = BG2_FLAGS; - REG_DISPCNT = DISPCNT_FLAGS; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[0] = 0x1E; - //fall through - case 0x1E: - REG_BG2VOFS = gTasks[taskId].data[1]; - REG_BG2HOFS = gTasks[taskId].data[2]; - gTasks[taskId].data[1] -= 6; - gTasks[taskId].data[2] += 8; - break; - case 4: - BeginNormalPaletteFade(1, 5, 0, 0x10, 0x37F7); - REG_BG2CNT = BG2_FLAGS; - REG_DISPCNT = DISPCNT_FLAGS; - gTasks[taskId].data[1] = 0; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 8; - gTasks[taskId].data[0] = 0x28; - //fall through - case 0x28: - REG_BG2VOFS = gTasks[taskId].data[1]; - REG_BG2HOFS = gTasks[taskId].data[2]; - gTasks[taskId].data[1] -= gTasks[taskId].data[3]; - gTasks[taskId].data[2] += gTasks[taskId].data[3]; - if (!(gTasks[taskId].data[15] & 7) && gTasks[taskId].data[3] != 0) - gTasks[taskId].data[3]--; - break; - case 0xFF: //needed to prevent jump table optimization - break; - } - -#undef BG2_FLAGS -#undef DISPCNT_FLAGS -} - -static void intro_reset_and_hide_bgs(void) -{ - REG_DISPCNT = 0; - REG_BG3HOFS = 0; - REG_BG3VOFS = 0; - REG_BG2HOFS = 0; - REG_BG2VOFS = 0; - REG_BG1HOFS = 0; - REG_BG1VOFS = 0; - REG_BG0HOFS = 0; - REG_BG0VOFS = 0; - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BLDY = 0; -} - -#ifdef NONMATCHING -static void sub_813CCE8(u8 taskId) -{ - switch (gTasks[taskId].data[0]) - { - default: - case 0: - REG_BLDCNT = 0x3F50; - REG_BLDALPHA = 0x1000; - REG_BLDY = 0; - gTasks[taskId].data[1] = 0x40; - gTasks[taskId].data[0] = 1; - return; - case 1: - if (gTasks[taskId].data[1] != 0) - { - u32 foo; - u32 bar asm("r2"); - - gTasks[taskId].data[1]--; - //tail merge at _0813CDC2 - foo = gTasks[taskId].data[1] + (gTasks[taskId].data[1] < 0); - bar = 0x1FE; - REG_BLDALPHA = gUnknown_08393E64[(foo & bar) / 2]; - } - else - { - REG_BLDALPHA = gUnknown_08393E64[0]; - gTasks[taskId].data[1] = 0x80; - gTasks[taskId].data[0]++; - } - return; - case 2: - if (gTasks[taskId].data[1] != 0) - { - //tail merge at _0813CE0E - gTasks[taskId].data[1]--; - } - else - { - gTasks[taskId].data[1] = 0; //redundant? - gTasks[taskId].data[0]++; - } - return; - case 3: - if (gTasks[taskId].data[1] <= 0x3D) - { - u32 foo; - u32 bar asm("r2"); - - gTasks[taskId].data[1]++; - //_0813CDC2 - foo = gTasks[taskId].data[1] + (gTasks[taskId].data[1] < 0); - bar = 0x1FE; - REG_BLDALPHA = gUnknown_08393E64[(foo & bar) / 2]; - } - else - { - //_0813CDE0 - REG_BLDALPHA = gUnknown_08393E64[0x1F]; - gTasks[taskId].data[1] = 0x10; - gTasks[taskId].data[0]++; - } - return; - case 4: - if (gTasks[taskId].data[1] != 0) - { - gTasks[taskId].data[1]--; - } - else - { - REG_BLDCNT = 0; - REG_BLDALPHA = 0; - REG_BLDY = 0; - DestroyTask(taskId); - } - return; - } -} -#else -__attribute__((naked)) -static void sub_813CCE8(u8 taskId) -{ - asm("\n\ - .equ REG_BLDCNT, 0x4000050\n\ - .equ REG_BLDALPHA, 0x4000052\n\ - .syntax unified\n\ - push {r4,lr}\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - ldr r1, _0813CD0C @ =gTasks\n\ - lsls r0, r3, 2\n\ - adds r0, r3\n\ - lsls r0, 3\n\ - adds r0, r1\n\ - movs r2, 0x8\n\ - ldrsh r0, [r0, r2]\n\ - adds r2, r1, 0\n\ - cmp r0, 0x4\n\ - bhi _0813CD28\n\ - lsls r0, 2\n\ - ldr r1, _0813CD10 @ =_0813CD14\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_0813CD0C: .4byte gTasks\n\ -_0813CD10: .4byte _0813CD14\n\ - .align 2, 0\n\ -_0813CD14:\n\ - .4byte _0813CD28\n\ - .4byte _0813CD5C\n\ - .4byte _0813CD8C\n\ - .4byte _0813CDA8\n\ - .4byte _0813CDFC\n\ -_0813CD28:\n\ - ldr r1, _0813CD54 @ =REG_BLDCNT\n\ - ldr r4, _0813CD58 @ =0x00003f50\n\ - adds r0, r4, 0\n\ - strh r0, [r1]\n\ - adds r1, 0x2\n\ - movs r4, 0x80\n\ - lsls r4, 5\n\ - adds r0, r4, 0\n\ - strh r0, [r1]\n\ - adds r1, 0x2\n\ - movs r0, 0\n\ - strh r0, [r1]\n\ - lsls r0, r3, 2\n\ - adds r0, r3\n\ - lsls r0, 3\n\ - adds r0, r2\n\ - movs r1, 0x40\n\ - strh r1, [r0, 0xA]\n\ - movs r1, 0x1\n\ - strh r1, [r0, 0x8]\n\ - b _0813CE26\n\ - .align 2, 0\n\ -_0813CD54: .4byte REG_BLDCNT\n\ -_0813CD58: .4byte 0x00003f50\n\ -_0813CD5C:\n\ - lsls r0, r3, 2\n\ - adds r0, r3\n\ - lsls r0, 3\n\ - adds r2, r0, r2\n\ - ldrh r1, [r2, 0xA]\n\ - movs r3, 0xA\n\ - ldrsh r0, [r2, r3]\n\ - cmp r0, 0\n\ - beq _0813CD78\n\ - subs r0, r1, 0x1\n\ - strh r0, [r2, 0xA]\n\ - movs r4, 0xA\n\ - ldrsh r0, [r2, r4]\n\ - b _0813CDC2\n\ -_0813CD78:\n\ - ldr r1, _0813CD84 @ =REG_BLDALPHA\n\ - ldr r0, _0813CD88 @ =gUnknown_08393E64\n\ - ldrh r0, [r0]\n\ - strh r0, [r1]\n\ - movs r0, 0x80\n\ - b _0813CDEA\n\ - .align 2, 0\n\ -_0813CD84: .4byte REG_BLDALPHA\n\ -_0813CD88: .4byte gUnknown_08393E64\n\ -_0813CD8C:\n\ - lsls r0, r3, 2\n\ - adds r0, r3\n\ - lsls r0, 3\n\ - adds r1, r0, r2\n\ - ldrh r0, [r1, 0xA]\n\ - movs r3, 0xA\n\ - ldrsh r2, [r1, r3]\n\ - cmp r2, 0\n\ - bne _0813CE0E\n\ - strh r2, [r1, 0xA]\n\ - ldrh r0, [r1, 0x8]\n\ - adds r0, 0x1\n\ - strh r0, [r1, 0x8]\n\ - b _0813CE26\n\ -_0813CDA8:\n\ - lsls r0, r3, 2\n\ - adds r0, r3\n\ - lsls r0, 3\n\ - adds r2, r0, r2\n\ - ldrh r1, [r2, 0xA]\n\ - movs r4, 0xA\n\ - ldrsh r0, [r2, r4]\n\ - cmp r0, 0x3D\n\ - bgt _0813CDE0\n\ - adds r0, r1, 0x1\n\ - strh r0, [r2, 0xA]\n\ - movs r1, 0xA\n\ - ldrsh r0, [r2, r1]\n\ -_0813CDC2:\n\ - lsrs r1, r0, 31\n\ - adds r0, r1\n\ - movs r2, 0xFF\n\ - lsls r2, 1\n\ - ldr r3, _0813CDD8 @ =REG_BLDALPHA\n\ - ldr r1, _0813CDDC @ =gUnknown_08393E64\n\ - ands r0, r2\n\ - adds r0, r1\n\ - ldrh r0, [r0]\n\ - strh r0, [r3]\n\ - b _0813CE26\n\ - .align 2, 0\n\ -_0813CDD8: .4byte REG_BLDALPHA\n\ -_0813CDDC: .4byte gUnknown_08393E64\n\ -_0813CDE0:\n\ - ldr r1, _0813CDF4 @ =REG_BLDALPHA\n\ - ldr r0, _0813CDF8 @ =gUnknown_08393E64\n\ - ldrh r0, [r0, 0x3E]\n\ - strh r0, [r1]\n\ - movs r0, 0x10\n\ -_0813CDEA:\n\ - strh r0, [r2, 0xA]\n\ - ldrh r0, [r2, 0x8]\n\ - adds r0, 0x1\n\ - strh r0, [r2, 0x8]\n\ - b _0813CE26\n\ - .align 2, 0\n\ -_0813CDF4: .4byte REG_BLDALPHA\n\ -_0813CDF8: .4byte gUnknown_08393E64\n\ -_0813CDFC:\n\ - lsls r0, r3, 2\n\ - adds r0, r3\n\ - lsls r0, 3\n\ - adds r1, r0, r2\n\ - ldrh r0, [r1, 0xA]\n\ - movs r4, 0xA\n\ - ldrsh r2, [r1, r4]\n\ - cmp r2, 0\n\ - beq _0813CE14\n\ -_0813CE0E:\n\ - subs r0, 0x1\n\ - strh r0, [r1, 0xA]\n\ - b _0813CE26\n\ -_0813CE14:\n\ - ldr r0, _0813CE2C @ =REG_BLDCNT\n\ - strh r2, [r0]\n\ - adds r0, 0x2\n\ - strh r2, [r0]\n\ - adds r0, 0x2\n\ - strh r2, [r0]\n\ - adds r0, r3, 0\n\ - bl DestroyTask\n\ -_0813CE26:\n\ - pop {r4}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_0813CE2C: .4byte REG_BLDCNT\n\ - .syntax divided\n"); -} -#endif - -void sub_813CE30(u16 scrX, u16 scrY, u16 zoom, u16 alpha) -{ - struct BgAffineSrcData src; - struct BgAffineDstData dest; - - src.texX = 0x8000; - src.texY = 0x8000; - src.scrX = scrX; - src.scrY = scrY; - src.sx = zoom; - src.sy = zoom; - src.alpha = alpha; - BgAffineSet(&src, &dest, 1); - REG_BG2PA = dest.pa; - REG_BG2PB = dest.pb; - REG_BG2PC = dest.pc; - REG_BG2PD = dest.pd; - REG_BG2X = dest.dx; - REG_BG2Y = dest.dy; -} - -static u16 sub_813CE88(u16 species, s16 x, s16 y, u16 d, u8 front) -{ - const u8 *lzPaletteData; - u8 spriteId; - - if (front) - LoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, 0x2000000, gUnknown_0840B5A0[d], species, 0, 1); - else - LoadSpecialPokePic(&gMonBackPicTable[species], gMonBackPicCoords[species].coords, gMonBackPicCoords[species].y_offset, 0x2000000, gUnknown_0840B5A0[d], species, 0, 0); - lzPaletteData = species_and_otid_get_pal(species, 0, 0xFFFF); - LoadCompressedPalette(lzPaletteData, 0x100 + d * 0x10, 0x20); - sub_8143648(d, d); - spriteId = CreateSprite(&gUnknown_02024E8C, x, y, (d + 1) * 4); - gSprites[spriteId].oam.paletteNum = d; - gSprites[spriteId].oam.priority = 1; - return spriteId; -} - -static u8 sub_813CFA8(u16 a, u16 b, u16 c, u16 d) -{ - u8 spriteId; - - DecompressPicFromTable_2(&gTrainerBackPicTable[a], gTrainerBackPicCoords[a].coords, gTrainerBackPicCoords[a].y_offset, (void *)0x2000000, gUnknown_0840B5A0[d], a); - LoadCompressedPalette(gTrainerBackPicPaletteTable[a].data, 0x100 + d * 0x10, 0x20); - sub_8143680(d, d); - gUnknown_02024E8C.anims = gUnknown_0840B064; - spriteId = CreateSprite(&gUnknown_02024E8C, b, c, 1); - gSprites[spriteId].oam.paletteNum = d; - gSprites[spriteId].oam.priority = 1; - return spriteId; -} - -static void sub_813D084(u8 a) -{ - u16 color; - - switch (a) - { - default: - case 0: - color = RGB(22, 31, 15); - break; - case 1: - color = RGB(31, 14, 12); - break; - case 2: - color = RGB(12, 12, 20); - break; - } - gPlttBufferUnfaded[241] = color; - gPlttBufferFaded[241] = color; -} - -static void sub_813D0CC(struct Sprite *sprite) -{ - u8 r0; - - if (sprite->data2 >= 192) - { - if (sprite->data3 != 0) - { - sprite->data3--; - } - else - { - sprite->invisible = FALSE; - SetOamMatrix(sprite->data1, sprite->data2, 0, 0, sprite->data2); - sprite->data2 = (sprite->data2 * 95) / 100; - r0 = (sprite->data2 - 192) / 128 + 9; - if (r0 > 15) - r0 = 15; - sprite->oam.paletteNum = r0; - } - } - else - { - DestroySprite(sprite); - } -} - -static void sub_813D158(struct Sprite *sprite) -{ - if (gSprites[sprite->data7].data7 != 0) - { - sprite->invisible = TRUE; - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - StartSpriteAnim(sprite, 3); - sprite->data2 = 1024; - sprite->data3 = 8 * (sprite->data1 & 3); - sprite->callback = sub_813D0CC; - sprite->oam.shape = 1; - sprite->oam.size = 3; - CalcCenterToCornerVec(sprite, 1, 3, 2); - } - else - { - sprite->pos2.x = gSprites[sprite->data7].pos2.x; - sprite->pos2.y = gSprites[sprite->data7].pos2.y; - sprite->pos1.x = gSprites[sprite->data7].pos1.x; - sprite->pos1.y = gSprites[sprite->data7].pos1.y; - } -} - -static void sub_813D208(struct Sprite *sprite) -{ - if (sprite->data0 != 0) - sprite->callback = sub_813D220; -} - -static void sub_813D220(struct Sprite *sprite) -{ - if (sprite->pos1.x <= 116) - { - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.y = 0; - sprite->pos1.x += 4; - sprite->pos2.x = -4; - sprite->data4 = 128; - sprite->callback = sub_813D368; - } - else - { - u16 data2; - u16 data3; - u16 data4; - s16 sin1; - s16 sin2; - s16 sin3; - s16 sin4; - s16 var1; - s16 var2; - s16 var3; - s16 var4; - s16 temp; - - data4 = sprite->data4; - sin1 = gSineTable[(u8)data4]; - sin2 = gSineTable[(u8)(data4 + 64)]; - sprite->data4 += 2; - sprite->pos2.y = sin1 / 32; - sprite->pos1.x--; - if (sprite->pos1.x & 1) - sprite->pos1.y++; - temp = -sin2 / 16; - data2 = sprite->data2; - data3 = sprite->data3; - sin3 = gSineTable[(u8)(temp - 16)]; - sin4 = gSineTable[(u8)(temp + 48)]; - var1 = sin4 * data2 / 256; - var2 = -sin3 * data3 / 256; - var3 = sin3 * data2 / 256; - var4 = sin4 * data3 / 256; - SetOamMatrix(sprite->data1, data2, 0, 0, data3); - SetOamMatrix(sprite->data1 + 1, var1, var3, var2, var4); - SetOamMatrix(sprite->data1 + 2, var1, var3, var2 * 2, var4 * 2); - } -} - -static void sub_813D368(struct Sprite *sprite) -{ - SetOamMatrix(sprite->data1, sprite->data6 + 64, 0, 0, sprite->data6 + 64); - SetOamMatrix(sprite->data1 + 1, sprite->data6 + 64, 0, 0, sprite->data6 + 64); - SetOamMatrix(sprite->data1 + 2, sprite->data6 + 64, 0, 0, sprite->data6 + 64); - if (sprite->data4 != 64) - { - u16 data4; - - sprite->data4 -= 8; - data4 = sprite->data4; - sprite->pos2.x = gSineTable[(u8)(data4 + 64)] / 64; - sprite->pos2.y = gSineTable[(u8)data4] / 64; - } - else - { - sprite->data4 = 0; - sprite->callback = sub_813D414; - } -} - -static void sub_813D414(struct Sprite *sprite) -{ - if (sprite->data0 != 2) - { - s16 r2; - - sprite->data4 += 8; - r2 = gSineTable[(u8)sprite->data4] / 16 + 64; - sprite->pos2.x = gSineTable[(u8)(r2 + 64)] / 64; - sprite->pos2.y = gSineTable[(u8)r2] / 64; - } - else - { - sprite->callback = SpriteCB_WaterDropFall; - } -} - -static void SpriteCB_WaterDropFall(struct Sprite *sprite) -{ - if (sprite->pos1.y < sprite->data5) - { - sprite->pos1.y += 4; - } - else - { - sprite->data7 = 1; - sprite->invisible = TRUE; - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - StartSpriteAnim(sprite, 3); - sprite->data2 = 1024; - sprite->data3 = 8 * (sprite->data1 & 3); - sprite->callback = sub_813D0CC; - sprite->oam.shape = 1; - sprite->oam.size = 3; - CalcCenterToCornerVec(sprite, 1, 3, 2); - } -} - -//Duplicate function -static void SpriteCB_WaterDropFall_2(struct Sprite *sprite) -{ - if (sprite->pos1.y < sprite->data5) - { - sprite->pos1.y += 4; - } - else - { - sprite->data7 = 1; - sprite->invisible = TRUE; - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - StartSpriteAnim(sprite, 3); - sprite->data2 = 1024; - sprite->data3 = 8 * (sprite->data1 & 3); - sprite->callback = sub_813D0CC; - sprite->oam.shape = 1; - sprite->oam.size = 3; - CalcCenterToCornerVec(sprite, 1, 3, 2); - } -} - -static u8 CreateWaterDrop(s16 x, s16 y, u16 c, u16 d, u16 e, u8 fallImmediately) -{ - u8 spriteId; - u8 oldSpriteId; - - spriteId = CreateSprite(&gSpriteTemplate_840AE20, x, y, 0); - gSprites[spriteId].data0 = 0; - gSprites[spriteId].data7 = 0; - gSprites[spriteId].data1 = d; - gSprites[spriteId].data2 = c; - gSprites[spriteId].data3 = c; - gSprites[spriteId].data5 = e; - gSprites[spriteId].data6 = c; - gSprites[spriteId].oam.affineMode = 3; - gSprites[spriteId].oam.matrixNum = d; - CalcCenterToCornerVec(&gSprites[spriteId], 0, 2, 2); - StartSpriteAnim(&gSprites[spriteId], 2); - if (!fallImmediately) - gSprites[spriteId].callback = sub_813D208; - else - gSprites[spriteId].callback = SpriteCB_WaterDropFall_2; - oldSpriteId = spriteId; - - spriteId = CreateSprite(&gSpriteTemplate_840AE20, x, y, 0); - gSprites[spriteId].data7 = oldSpriteId; - gSprites[spriteId].data1 = d + 1; - gSprites[spriteId].oam.affineMode = 3; - gSprites[spriteId].oam.matrixNum = d + 1; - CalcCenterToCornerVec(&gSprites[spriteId], 0, 2, 2); - gSprites[spriteId].callback = sub_813D158; - - spriteId = CreateSprite(&gSpriteTemplate_840AE20, x, y, 0); - gSprites[spriteId].data7 = oldSpriteId; - gSprites[spriteId].data1 = d + 2; - StartSpriteAnim(&gSprites[spriteId], 1); - gSprites[spriteId].oam.affineMode = 3; - gSprites[spriteId].oam.matrixNum = d + 2; - CalcCenterToCornerVec(&gSprites[spriteId], 0, 2, 2); - gSprites[spriteId].callback = sub_813D158; - - SetOamMatrix(d, c + 32, 0, 0, c + 32); - SetOamMatrix(d + 1, c + 32, 0, 0, c + 32); - SetOamMatrix(d + 2, c + 32, 0, 0, 2 * (c + 32)); - - return oldSpriteId; -} - -static void sub_813D788(struct Sprite *sprite) -{ - switch (sprite->data0) - { - case 0: - StartSpriteAnimIfDifferent(sprite, 0); - sprite->pos1.x--; - break; - case 1: - StartSpriteAnimIfDifferent(sprite, 0); - if (gIntroFrameCounter & 7) - return; - sprite->pos1.x++; - break; - case 2: - StartSpriteAnimIfDifferent(sprite, 2); - if (sprite->pos1.x <= 120 || (gIntroFrameCounter & 7)) - sprite->pos1.x++; - break; - case 3: - StartSpriteAnimIfDifferent(sprite, 3); - break; - case 4: - StartSpriteAnimIfDifferent(sprite, 0); - if (sprite->pos1.x > -32) - sprite->pos1.x -= 2; - break; - } - if (gIntroFrameCounter & 7) - return; - if (sprite->pos2.y != 0) - { - sprite->pos2.y = 0; - } - else - { - switch (Random() & 3) - { - case 0: - sprite->pos2.y = -1; - break; - case 1: - sprite->pos2.y = 1; - break; - case 2: - case 3: - sprite->pos2.y = 0; - break; - } - } -} - -static void sub_813D880(struct Sprite *sprite) -{ - switch (sprite->data0) - { - case 0: - break; - case 1: - if (sprite->pos2.x + sprite->pos1.x < 304) - sprite->pos2.x += 8; - else - sprite->data0 = 2; - break; - case 2: - if (sprite->pos2.x + sprite->pos1.x > 120) - sprite->pos2.x -= 1; - else - sprite->data0 = 3; - break; - case 3: - if (sprite->pos2.x > 0) - sprite->pos2.x -= 2; - break; - } - sprite->pos2.y = Sin((u8)sprite->data1, 8) - gUnknown_0203935A; - sprite->data1 += 4; -} - -static void sub_813D908(struct Sprite *sprite) -{ - if (gTasks[sprite->data0].data[0] == 0) - { - sprite->invisible = TRUE; - } - else if (gTasks[sprite->data0].data[0] != 4) - { - sprite->invisible = FALSE; - } - else - { - DestroySprite(sprite); - } -} - -static u8 CreateGameFreakLogo(s16 a, s16 b, u8 c) -{ - u8 spriteId; - u16 i; - - for (i = 0; i < 9; i++) - { - spriteId = CreateSprite(&gSpriteTemplate_840AF94, gUnknown_0840AF50[i][1] + a, b - 4, 0); - gSprites[spriteId].data0 = c; - StartSpriteAnim(&gSprites[spriteId], gUnknown_0840AF50[i][0]); - } - for (i = 0; i < 8; i++) - { - spriteId = CreateSprite(&gSpriteTemplate_840AFAC, gUnknown_0840AF74[i][1] + a, b + 12, 0); - gSprites[spriteId].data0 = c; - StartSpriteAnim(&gSprites[spriteId], gUnknown_0840AF74[i][0]); - } - spriteId = CreateSprite(&gSpriteTemplate_840AFC4, 120, b - 4, 0); - gSprites[spriteId].data0 = c; - - return spriteId; -} - -#ifdef NONMATCHING -static void sub_813DA64(struct Sprite *sprite) -{ - sprite->data7++; - - switch (sprite->data0) - { - case 0: - default: - sprite->oam.affineMode = 3; - sprite->oam.matrixNum = 1; - CalcCenterToCornerVec(sprite, 1, 3, 3); - sprite->invisible = FALSE; - sprite->data0 = 1; - sprite->data1 = 128; - sprite->data2 = -24; - sprite->data3 = 0; - break; - case 1: - { - s16 r3; - s16 sin1; - s16 r6; - s16 foo; - s16 r5; - s16 r2; - - //_0813DAC0 - if (sprite->data3 < 0x50) - { - sprite->pos2.y = -Sin((u8)sprite->data3, 0x78); - sprite->pos2.x = -Sin((u8)sprite->data3, 0x8C); - if (sprite->data3 > 64) - sprite->oam.priority = 3; - } - //_0813DAF8 - r3 = gSineTable[(u8)sprite->data2]; - sin1 = gSineTable[(u8)(sprite->data2 + 64)]; - r6 = sin1 * sprite->data1 / 256; - foo = sin1 * sprite->data1 / 256; - r5 = -r3 * sprite->data1 / 256; - r2 = r3 * sprite->data1 / 256; - - SetOamMatrix(1, r6, r2, r5, foo); - - if (sprite->data1 < 0x100) - sprite->data1 += 8; - else - sprite->data1 += 32; - if (sprite->data2 < 0x18) - sprite->data2 += 1; - if (sprite->data3 < 64) - sprite->data3 += 2; - else if (!(sprite->data7 & 3)) - sprite->data3 += 1; - break; - } - } - //_0813DB92 -} -#else -__attribute__((naked)) -static void sub_813DA64(struct Sprite *sprite) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - sub sp, 0x4\n\ - adds r4, r0, 0\n\ - ldrh r0, [r4, 0x3C]\n\ - adds r0, 0x1\n\ - strh r0, [r4, 0x3C]\n\ - movs r1, 0x2E\n\ - ldrsh r0, [r4, r1]\n\ - cmp r0, 0\n\ - beq _0813DA7C\n\ - cmp r0, 0x1\n\ - beq _0813DAC0\n\ -_0813DA7C:\n\ - ldrb r0, [r4, 0x1]\n\ - movs r1, 0x3\n\ - orrs r0, r1\n\ - strb r0, [r4, 0x1]\n\ - ldrb r1, [r4, 0x3]\n\ - movs r0, 0x3F\n\ - negs r0, r0\n\ - ands r0, r1\n\ - movs r1, 0x2\n\ - orrs r0, r1\n\ - strb r0, [r4, 0x3]\n\ - adds r0, r4, 0\n\ - movs r1, 0x1\n\ - movs r2, 0x3\n\ - movs r3, 0x3\n\ - bl CalcCenterToCornerVec\n\ - adds r2, r4, 0\n\ - adds r2, 0x3E\n\ - ldrb r1, [r2]\n\ - movs r0, 0x5\n\ - negs r0, r0\n\ - ands r0, r1\n\ - strb r0, [r2]\n\ - movs r0, 0x1\n\ - strh r0, [r4, 0x2E]\n\ - movs r0, 0x80\n\ - strh r0, [r4, 0x30]\n\ - ldr r0, _0813DABC @ =0x0000ffe8\n\ - strh r0, [r4, 0x32]\n\ - movs r0, 0\n\ - b _0813DB92\n\ - .align 2, 0\n\ -_0813DABC: .4byte 0x0000ffe8\n\ -_0813DAC0:\n\ - ldrh r1, [r4, 0x34]\n\ - movs r2, 0x34\n\ - ldrsh r0, [r4, r2]\n\ - cmp r0, 0x4F\n\ - bgt _0813DAF8\n\ - lsls r0, r1, 24\n\ - lsrs r0, 24\n\ - movs r1, 0x78\n\ - bl Sin\n\ - negs r0, r0\n\ - strh r0, [r4, 0x26]\n\ - ldrh r0, [r4, 0x34]\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - movs r1, 0x8C\n\ - bl Sin\n\ - negs r0, r0\n\ - strh r0, [r4, 0x24]\n\ - movs r1, 0x34\n\ - ldrsh r0, [r4, r1]\n\ - cmp r0, 0x40\n\ - ble _0813DAF8\n\ - ldrb r0, [r4, 0x5]\n\ - movs r1, 0xC\n\ - orrs r0, r1\n\ - strb r0, [r4, 0x5]\n\ -_0813DAF8:\n\ - ldr r2, _0813DB60 @ =gSineTable\n\ - ldrh r1, [r4, 0x32]\n\ - lsls r0, r1, 24\n\ - lsrs r0, 23\n\ - adds r0, r2\n\ - ldrh r3, [r0]\n\ - adds r1, 0x40\n\ - lsls r1, 24\n\ - lsrs r1, 23\n\ - adds r1, r2\n\ - movs r2, 0\n\ - ldrsh r0, [r1, r2]\n\ - movs r1, 0x30\n\ - ldrsh r2, [r4, r1]\n\ - adds r1, r0, 0\n\ - muls r1, r2\n\ - adds r0, r1, 0\n\ - cmp r1, 0\n\ - bge _0813DB20\n\ - adds r0, 0xFF\n\ -_0813DB20:\n\ - lsls r0, 8\n\ - lsrs r6, r0, 16\n\ - lsls r0, r3, 16\n\ - asrs r3, r0, 16\n\ - negs r0, r3\n\ - muls r0, r2\n\ - cmp r0, 0\n\ - bge _0813DB32\n\ - adds r0, 0xFF\n\ -_0813DB32:\n\ - lsls r0, 8\n\ - lsrs r5, r0, 16\n\ - adds r0, r3, 0\n\ - muls r0, r2\n\ - cmp r0, 0\n\ - bge _0813DB40\n\ - adds r0, 0xFF\n\ -_0813DB40:\n\ - lsls r0, 8\n\ - lsrs r2, r0, 16\n\ - adds r1, r6, 0\n\ - adds r3, r5, 0\n\ - str r1, [sp]\n\ - movs r0, 0x1\n\ - bl SetOamMatrix\n\ - ldrh r1, [r4, 0x30]\n\ - movs r2, 0x30\n\ - ldrsh r0, [r4, r2]\n\ - cmp r0, 0xFF\n\ - bgt _0813DB64\n\ - adds r0, r1, 0\n\ - adds r0, 0x8\n\ - b _0813DB68\n\ - .align 2, 0\n\ -_0813DB60: .4byte gSineTable\n\ -_0813DB64:\n\ - adds r0, r1, 0\n\ - adds r0, 0x20\n\ -_0813DB68:\n\ - strh r0, [r4, 0x30]\n\ - ldrh r1, [r4, 0x32]\n\ - movs r2, 0x32\n\ - ldrsh r0, [r4, r2]\n\ - cmp r0, 0x17\n\ - bgt _0813DB78\n\ - adds r0, r1, 0x1\n\ - strh r0, [r4, 0x32]\n\ -_0813DB78:\n\ - ldrh r2, [r4, 0x34]\n\ - movs r1, 0x34\n\ - ldrsh r0, [r4, r1]\n\ - cmp r0, 0x3F\n\ - bgt _0813DB86\n\ - adds r0, r2, 0x2\n\ - b _0813DB92\n\ -_0813DB86:\n\ - ldrh r1, [r4, 0x3C]\n\ - movs r0, 0x3\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _0813DB94\n\ - adds r0, r2, 0x1\n\ -_0813DB92:\n\ - strh r0, [r4, 0x34]\n\ -_0813DB94:\n\ - add sp, 0x4\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided\n"); -} -#endif - -static void sub_813DB9C(struct Sprite *sprite) -{ - switch (sprite->data0) - { - case 0: - default: - if (sprite->data2 != 0) - sprite->hFlip = TRUE; - else - sprite->hFlip = FALSE; - sprite->data0 = 1; - //fall through - case 1: - if (sprite->pos1.y > 96) - { - sprite->pos1.y -= 4; - if (sprite->data2 != 0) - sprite->pos1.x += 2; - else - sprite->pos1.x -= 2; - } - else - { - sprite->data0++; - sprite->data3 = 8; - } - break; - case 2: - if (sprite->data3 != 0) - { - sprite->data3--; - } - else - { - sprite->data0++; - sprite->data3 = 0; //redundant? - } - break; - case 3: - sprite->oam.affineMode = 3; - sprite->oam.matrixNum = sprite->data1; - CalcCenterToCornerVec(sprite, 0, 3, 3); - if (sprite->data2 != 0) - SetOamMatrix(sprite->data1, -256, 0, 0, 256); - else - SetOamMatrix(sprite->data1, 256, 0, 0, 256); - sprite->data0++; - sprite->data4 = 0; - break; - case 4: - sprite->data4++; - if (sprite->pos1.y + sprite->pos2.y > -32 - && sprite->pos1.x + sprite->pos2.x > -64) - { - u16 r2; - - sprite->pos2.y = -(sprite->data4 * sprite->data4) / 8; - if (sprite->data2 != 0) - sprite->pos2.x += sprite->data4; - else - sprite->pos2.x -= sprite->data4; - if (sprite->data3 < 128) - sprite->data3 += 8; - r2 = 256 - sprite->data3; - if (sprite->data2 != 0) - SetOamMatrix(sprite->data1, -r2, 0, 0, r2); - else - SetOamMatrix(sprite->data1, r2, 0, 0, r2); - } - else - { - DestroySprite(sprite); - } - } -} - -static void sub_813DD58(struct Sprite *sprite) -{ - switch (sprite->data0) - { - case 0: - default: - sprite->invisible = FALSE; - sprite->oam.affineMode = 1; - sprite->oam.matrixNum = sprite->data1; - sprite->data3 = 2048; - sprite->data0 = 1; - //fall through - case 1: - if (sprite->data3 > 256) - { - sprite->data3 -= 128; - if (sprite->data2 != 0) - SetOamMatrix(sprite->data1, -sprite->data3, 0, 0, sprite->data3); - else - SetOamMatrix(sprite->data1, sprite->data3, 0, 0, sprite->data3); - } - else - { - if (sprite->data2 != 0) - SetOamMatrix(sprite->data1, -256, 0, 0, 256); - else - SetOamMatrix(sprite->data1, 256, 0, 0, 256); - sprite->data0++; - } - break; - case 2: - break; - case 3: - sprite->data4++; - sprite->pos2.y = sprite->data4 * sprite->data4 / 32; - if (sprite->data2 != 0) - sprite->pos2.x = sprite->data4 / 4; - else - sprite->pos2.x = -(sprite->data4 / 4); - break; - } -} - -static void sub_813DE70(struct Sprite *sprite) -{ - switch (sprite->data0) - { - case 0: - default: - if (sprite->pos1.x > 40) - { - sprite->pos1.x -= 4; - } - else - { - StartSpriteAnim(sprite, 1); - sprite->data6 = CreateSprite(&gSpriteTemplate_840B084, 16, 104, 100); - sprite->data7 = CreateSprite(&gSpriteTemplate_840B084, 12, 106, 101); - sprite->data0 = 1; - } - break; - case 1: - break; - case 2: - StartSpriteAnim(sprite, 2); - gSprites[sprite->data6].data0 = 1; - gSprites[sprite->data7].data0 = 2; - sprite->data0++; - break; - case 3: - if (sprite->pos1.y > 160) - { - sprite->invisible = 1; - sprite->data0 = 1; - } - else - { - sprite->pos1.y += 2; - sprite->pos1.x--; - } - break; - case 4: - { - s16 r4, r5; - - r5 = gSprites[sprite->data6].pos1.x + gSprites[sprite->data6].pos2.x; - r4 = gSprites[sprite->data6].pos1.y + gSprites[sprite->data6].pos2.y; - DestroySprite(&gSprites[sprite->data6]); - sprite->data6 = sub_813CE88(SPECIES_TORCHIC, r5, r4, 2, 1); - gSprites[sprite->data6].callback = sub_813DD58; - gSprites[sprite->data6].invisible = TRUE; - gSprites[sprite->data6].data1 = 1; - gSprites[sprite->data6].data2 = 1; - sub_813E580(r5, r4); - - r5 = gSprites[sprite->data7].pos1.x + gSprites[sprite->data7].pos2.x; - r4 = gSprites[sprite->data7].pos1.y + gSprites[sprite->data7].pos2.y; - DestroySprite(&gSprites[sprite->data7]); - sprite->data7 = sub_813CE88(SPECIES_MUDKIP, r5, r4, 3, 1); - gSprites[sprite->data7].callback = sub_813DD58; - gSprites[sprite->data7].invisible = TRUE; - gSprites[sprite->data7].data1 = 2; - gSprites[sprite->data7].data2 = 0; - sub_813E580(r5, r4); - - BeginNormalPaletteFade(0xFF0000, 0, 16, 16, RGB(31, 23, 31)); - sprite->data0 = 1; - break; - } - case 5: - gSprites[sprite->data6].data0 = 3; - gSprites[sprite->data7].data0 = 3; - break; - case 6: - DestroySprite(&gSprites[sprite->data6]); - DestroySprite(&gSprites[sprite->data7]); - DestroySprite(sprite); - break; - } -} - -static void sub_813E10C(struct Sprite *sprite) -{ - switch (sprite->data0) - { - case 0: - default: - if (sprite->pos2.x > -56) - { - sprite->pos2.x -= 8; - sprite->pos2.y += 6; - } - else - { - sprite->data6 = sprite->pos1.x; - sprite->data7 = sprite->pos1.y; - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data0 = 1; - sprite->data1 = 0; - } - break; - case 1: - if (!(sprite->data1 & 1)) - { - if (sprite->data1 & 2) - { - sprite->pos2.x = -1; - sprite->pos2.y = 1; - } - else - { - sprite->pos2.x = 0; - sprite->pos2.y = 0; - } - } - sprite->data1++; - break; - case 2: - sprite->invisible = TRUE; - sprite->pos1.x = sprite->data6; - sprite->pos1.y = sprite->data7; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - break; - case 3: - sprite->invisible = FALSE; - sprite->data1++; - //fall through - case 4: - if (sprite->pos2.x > -56) - { - sprite->pos2.x -= 4; - sprite->pos2.y += 3; - } - else - { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data0 = 1; - } - break; - } -} - -static void sub_813E210(struct Sprite *sprite) -{ - switch (sprite->data0) - { - case 0: - default: - if (sprite->pos2.x < 56) - { - sprite->pos2.x += 8; - sprite->pos2.y -= 6; - } - else - { - sprite->data6 = sprite->pos1.x; - sprite->data7 = sprite->pos1.y; - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data0 = 1; - sprite->data1 = 0; - } - break; - case 1: - if (!(sprite->data1 & 1)) - { - if (sprite->data1 & 2) - { - sprite->pos2.x = 1; - sprite->pos2.y = -1; - } - else - { - sprite->pos2.x = 0; - sprite->pos2.y = 0; - } - } - sprite->data1++; - break; - case 2: - sprite->invisible = TRUE; - sprite->pos1.x = sprite->data6; - sprite->pos1.y = sprite->data7; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - break; - case 3: - sprite->invisible = FALSE; - sprite->data1++; - //fall through - case 4: - if (sprite->pos2.x < 56) - { - sprite->pos2.x += 4; - sprite->pos2.y -= 3; - } - else - { - sprite->pos1.x += sprite->pos2.x; - sprite->pos1.y += sprite->pos2.y; - sprite->pos2.x = 0; - sprite->pos2.y = 0; - sprite->data0 = 1; - } - break; - } -} - -static void sub_813E30C(struct Sprite *sprite) -{ - u16 r4, r1; - - sprite->data7++; - switch (sprite->data0) - { - case 0: - default: - break; - case 1: - sprite->oam.affineMode = 1; - sprite->oam.matrixNum = 1; - sprite->data0 = 10; - sprite->data4 = 36; - //fall through - case 10: - if (sprite->pos1.x <= 144) - { - sprite->pos1.x += 4; - sprite->pos1.y -= 1; - sprite->pos2.y = -Sin((u8)sprite->data2, 24); - sprite->data2 += 4; - } - sprite->data3 -= sprite->data4; - if ((sprite->data7 & 1) && sprite->data4 != 0) - sprite->data4--; - r4 = gSineTable[(u8)sprite->data3]; - r1 = gSineTable[(u8)(sprite->data3 + 64)]; - SetOamMatrix(1, r1, r4, -r4, r1); - break; - case 2: - sprite->oam.affineMode = 1; - sprite->oam.matrixNum = 2; - sprite->data0 = 20; - sprite->data4 = 36; - //fall through - case 20: - if (sprite->pos1.x <= 96) - { - sprite->pos1.x += 3; - sprite->pos1.y -= 1; - sprite->pos2.y = -Sin((u8)sprite->data2, 24); - sprite->data2 += 4; - } - sprite->data3 -= sprite->data4; - if ((sprite->data7 & 1) && sprite->data4 != 0) - sprite->data4--; - r4 = gSineTable[(u8)sprite->data3]; - r1 = gSineTable[(u8)(sprite->data3 + 64)]; - SetOamMatrix(2, r1, r4, -r4, r1); - break; - } -} - -static void sub_813E4B8(struct Sprite *sprite) -{ - u16 r4; - u16 r2; - u16 r1; - - sprite->data7++; - if (sprite->data7 & 1) - sprite->invisible = FALSE; - else - sprite->invisible = TRUE; - if (sprite->data2 >= 64) - { - DestroySprite(sprite); - return; - } - sprite->data2 += 2; - r4 = Sin((u8)sprite->data2, 40); - sprite->pos2.x = Cos((u8)(sprite->data0 * 32), r4); - sprite->pos2.y = Sin((u8)(sprite->data0 * 32), r4); - if (sprite->data0 == 0) - { - sprite->data3 -= sprite->data1; - if ((sprite->data7 & 1) && sprite->data1 != 0) - sprite->data1--; - r2 = gSineTable[(u8)sprite->data3]; - r1 = gSineTable[(u8)(sprite->data3 + 64)]; - SetOamMatrix(16, r1, r2, -r2, r1); - } -} - -static void sub_813E580(u16 x, u16 y) -{ - u8 i; - u8 spriteId; - - for (i = 0; i < 8; i++) - { - spriteId = CreateSprite(&gSpriteTemplate_840B0B0, x, y, 0); - gSprites[spriteId].oam.affineMode = 1; - gSprites[spriteId].oam.matrixNum = 16; - gSprites[spriteId].data0 = i; - gSprites[spriteId].data1 = 32; - } -} - -static void sub_813E5E0(struct Sprite *sprite) -{ - if (gUnknown_0203931A != 0) - { - DestroySprite(sprite); - } - else - { - sprite->invisible = gSprites[sprite->data0].invisible; - if (sprite->data7 < 12) - sprite->data7++; - sprite->data6 += 4; - sprite->pos1.x = sprite->data4 + gSineTable[(u8)(sprite->data3 + 64)] * sprite->data6 / 256; - //This useless '+ 0' is needed to make the asm match - sprite->pos1.y = sprite->data5 + gSineTable[(u8)(sprite->data3 + 0)] * sprite->data6 / 256; - sprite->pos2.y = gSineTable[(u8)(sprite->data1 + 0)] * sprite->data7 / 256; - sprite->data1 += 16; - if (sprite->pos1.y > sprite->data2) - DestroySprite(sprite); - } -} - -static void sub_813E6C0(struct Sprite *sprite) -{ - u8 spriteId; - u8 i; - s16 var1; - s16 var2; - - if (gUnknown_0203931A != 0) - { - DestroySprite(sprite); - } - else - { - sprite->data7++; - sprite->invisible = TRUE; - if (gSprites[sprite->data0].data0 == 1 && !(sprite->data7 & 3)) - { - var1 = sprite->data1 + gSprites[sprite->data0].pos1.x; - var2 = sprite->data2 + gSprites[sprite->data0].pos1.y; - for (i = 0; i < 3; i++) - { - u8 r3 = gSprites[sprite->data0].subpriority - 1; - //Make redundant copies of these variables to get the asm to match - s16 _var1 = var1; - s16 _var2 = var2; - - spriteId = CreateSprite(&gSpriteTemplate_840B0DC, _var1, _var2, r3); - if (spriteId != 64) - { - gSprites[spriteId].data0 = sprite->data0; - gSprites[spriteId].data1 = (((sprite->data7 >> 2) & 7) << 5) + i * 85; - gSprites[spriteId].data2 = sprite->data3; - gSprites[spriteId].data3 = 104; - gSprites[spriteId].data4 = var1; - gSprites[spriteId].data5 = var2; - gSprites[spriteId].data6 = 0; - } - } - } - } -} - -static void sub_813E7C0(u8 a) -{ - u8 spriteId; - - spriteId = CreateSprite(&gSpriteTemplate_840B0F4, 0, 0, 0); - if (spriteId != 64) - { - gSprites[spriteId].data0 = a; - gSprites[spriteId].data1 = -12; - gSprites[spriteId].data2 = 0; - gSprites[spriteId].data3 = 136; - } -} - -static void sub_813E804(struct Sprite *sprite) -{ - if (gUnknown_0203931A != 0) - { - DestroySprite(sprite); - } - else - { - sprite->invisible = gSprites[sprite->data0].invisible; - sprite->data7++; - if (sprite->data3 < 40) - sprite->data3 += 2; - //This useless '+ 0' is needed to make the asm match - sprite->pos1.x = gSprites[sprite->data0].pos1.x + gSprites[sprite->data0].pos2.x + gSineTable[(u8)(sprite->data1 + 64)] * sprite->data3 / 256; - sprite->pos1.y = gSprites[sprite->data0].pos1.y + gSprites[sprite->data0].pos2.y + gSineTable[(u8)(sprite->data1 + 0)] * sprite->data3 / 512; - sprite->data1 += 2; - sprite->pos2.y = gSineTable[(u8)(sprite->data2 + 0)] / 32; - sprite->data2 += 8; - if ((sprite->data1 & 0xFF) < 128) - sprite->subpriority = gSprites[sprite->data0].subpriority - 1; - else - sprite->subpriority = gSprites[sprite->data0].subpriority + 1; - } -} - -static void sub_813E930(u8 a) -{ - u8 i; - u8 spriteId; - - for (i = 0; i < 8; i++) - { - spriteId = CreateSprite(&gSpriteTemplate_840B124, gSprites[a].pos1.x, gSprites[a].pos1.y, 0); - if (spriteId != 64) - { - gSprites[spriteId].data0 = a; - gSprites[spriteId].data1 = i * 32; - } - } -} - -static void sub_813E980(struct Sprite *sprite) -{ - if (gUnknown_0203931A != 0) - { - DestroySprite(sprite); - } - else - { - u8 r0; - u16 matrixNum; - - sprite->invisible = gSprites[sprite->data0].invisible; - sprite->data7++; - sprite->data6 += 8; - sprite->pos1.x = sprite->data4 + gSineTable[(u8)(sprite->data3 + 64)] * sprite->data6 / 256; - sprite->pos1.y = sprite->data5 + gSineTable[(u8)(sprite->data3 + 0)] * sprite->data6 / 256; - r0 = sprite->data6 / 16; - if (r0 > 9) - r0 = 9; - matrixNum = (r0 + 18) & 31; - sprite->oam.matrixNum = matrixNum; - if (sprite->data6 > 160) - DestroySprite(sprite); - } -} - -static void sub_813EA60(struct Sprite *sprite) -{ - bool32 r6; - s16 r1, r2; - u8 spriteId; - - if (gUnknown_0203931A != 0) - { - DestroySprite(sprite); - } - else - { - sprite->data7++; - sprite->invisible = TRUE; - if (gSprites[sprite->data0].data0 == 1) - { - r6 = (sprite->data7 & 1); - if (!r6) - { - r1 = sprite->data1 + gSprites[sprite->data0].pos1.x; - r2 = sprite->data2 + gSprites[sprite->data0].pos1.y; - spriteId = CreateSprite(&gSpriteTemplate_840B150, r1, r2, gSprites[sprite->data0].subpriority + 1); - if (spriteId != 64) - { - gSprites[spriteId].oam.affineMode = 3; - gSprites[spriteId].oam.matrixNum = 18; - CalcCenterToCornerVec(&gSprites[spriteId], 0, 1, 3); - gSprites[spriteId].data0 = sprite->data0; - gSprites[spriteId].data3 = gUnknown_0840B168[(sprite->data7 >> 1) & 7]; - gSprites[spriteId].data4 = r1; - gSprites[spriteId].data5 = r2; - gSprites[spriteId].data6 = r6; - } - } - } - } -} - -static void InitIntroTorchicAttackAnim(u8 a) -{ - u8 spriteId; - u8 i; - - spriteId = CreateSprite(&gSpriteTemplate_840B170, 0, 0, 0); - if (spriteId != 64) - { - gSprites[spriteId].data0 = a; - gSprites[spriteId].data1 = 0; - gSprites[spriteId].data2 = 8; - gSprites[spriteId].data3 = 24; - } - for (i = 0; i < 10; i++) - { - SetOamMatrix(18 + i, gUnknown_0840B188[i], 0, 0, gUnknown_0840B188[i]); - } -} - -static void sub_813EBBC(struct Sprite *sprite) -{ - if (gUnknown_0203931A != 0) - { - DestroySprite(sprite); - } - else - { - sprite->invisible = gSprites[sprite->data0].invisible; - sprite->data7 += 1; - sprite->data6 += 8; - sprite->pos1.x = sprite->data4 + gSineTable[(u8)(sprite->data3 + 64)] * sprite->data6 / 256; - sprite->pos1.y = sprite->data5 + gSineTable[(u8)(sprite->data3 + 0)] * sprite->data6 / 256; - sprite->pos2.y = gSineTable[(u8)(sprite->data1 + 0)] / 64; - sprite->data1 += 16; - if (sprite->pos1.y < sprite->data2) - DestroySprite(sprite); - } -} - -static void sub_813EC90(struct Sprite *sprite) -{ - bool32 r6; - s16 r1, r2; - u8 spriteId; - u16 foo; - - if (gUnknown_0203931A != 0) - { - DestroySprite(sprite); - } - else - { - sprite->data7++; - sprite->invisible = TRUE; - if (gSprites[sprite->data0].data0 == 1) - { - r6 = sprite->data7 & 1; - if (!r6) - { - r1 = sprite->data1 + gSprites[sprite->data0].pos1.x; - r2 = sprite->data2 + gSprites[sprite->data0].pos1.y; - spriteId = CreateSprite(&gSpriteTemplate_840B1B0, r1, r2, gSprites[sprite->data0].subpriority + 1); - if (spriteId != 64) - { - gSprites[spriteId].oam.affineMode = 3; - gSprites[spriteId].oam.matrixNum = 17; - CalcCenterToCornerVec(&gSprites[spriteId], 0, 1, 3); - gSprites[spriteId].data0 = sprite->data0; - gSprites[spriteId].data1 = ((sprite->data7 >> 2) & 7) << 5; - gSprites[spriteId].data2 = sprite->data3; - gSprites[spriteId].data3 = 232; - gSprites[spriteId].data4 = r1; - gSprites[spriteId].data5 = r2; - gSprites[spriteId].data6 = r6; - } - } - if (sprite->data6 < 112) - sprite->data6 += 4; - } - foo = 256 - gSineTable[(u8)sprite->data6] / 2; - SetOamMatrix(17, foo, 0, 0, foo); - } -} - -static void InitIntroMudkipAttackAnim(u8 a) -{ - u8 spriteId; - - spriteId = CreateSprite(&gSpriteTemplate_840B1C8, 0, 0, 0); - if (spriteId != 64) - { - gSprites[spriteId].data0 = a; - gSprites[spriteId].data1 = 0; - gSprites[spriteId].data2 = 12; - gSprites[spriteId].data3 = 24; - } -} - -static void sub_813EDFC(struct Sprite *sprite) -{ - u16 foo; - - //I'm not sure why a switch statement was used here. - //if (sprite->data0 != 1) would have been more appropriate. - switch (sprite->data0) - { - case 0: - default: - sprite->invisible = FALSE; - sprite->oam.affineMode = 3; - sprite->oam.matrixNum = 18; - CalcCenterToCornerVec(sprite, 0, 3, 3); - sprite->data1 = 0; - sprite->data0 = 1; - //fall through - case 1: - break; - } - sprite->data7++; - if (sprite->data7 & 1) - { - sprite->invisible = TRUE; - } - else - { - sprite->invisible = FALSE; - if (sprite->data1 < 64) - sprite->data1++; - } - foo = 256 - gSineTable[(u8)sprite->data1] / 2; - SetOamMatrix(18, foo, 0, 0, foo); -} |