summaryrefslogtreecommitdiff
path: root/src/scene
diff options
context:
space:
mode:
authorcamthesaxman <cameronghall@cox.net>2018-02-18 19:59:51 -0600
committercamthesaxman <cameronghall@cox.net>2018-02-18 19:59:51 -0600
commitdaa05c1b7c5e079ad8554e88a290e07b333bd2db (patch)
treef635e307268f6e6027423369d221e2adf32b438d /src/scene
parent2e21a867487e2187a954a351f775bd3f3a9535b1 (diff)
remove subdirectories
Diffstat (limited to 'src/scene')
-rw-r--r--src/scene/berry_blender.c3560
-rw-r--r--src/scene/cable_car.c1077
-rw-r--r--src/scene/contest_painting.c786
-rw-r--r--src/scene/credits.c1677
-rw-r--r--src/scene/cute_sketch.c164
-rw-r--r--src/scene/egg_hatch.c838
-rw-r--r--src/scene/evolution_graphics.c614
-rw-r--r--src/scene/evolution_scene.c3959
-rw-r--r--src/scene/hall_of_fame.c1366
-rw-r--r--src/scene/intro.c2810
-rw-r--r--src/scene/intro_credits_graphics.c645
-rw-r--r--src/scene/new_game.c236
-rw-r--r--src/scene/title_screen.c911
13 files changed, 0 insertions, 18643 deletions
diff --git a/src/scene/berry_blender.c b/src/scene/berry_blender.c
deleted file mode 100644
index bf634a49f..000000000
--- a/src/scene/berry_blender.c
+++ /dev/null
@@ -1,3560 +0,0 @@
-#include "global.h"
-#include "decompress.h"
-#include "palette.h"
-#include "event_data.h"
-#include "main.h"
-#include "text_window.h"
-#include "menu.h"
-#include "strings2.h"
-#include "sound.h"
-#include "constants/songs.h"
-#include "berry.h"
-#include "string_util.h"
-#include "link.h"
-#include "task.h"
-#include "overworld.h"
-#include "item.h"
-#include "constants/items.h"
-#include "random.h"
-#include "save.h"
-#include "menu_cursor.h"
-#include "trig.h"
-#include "pokeblock.h"
-#include "ewram.h"
-
-//needed to match Blender_ControlHitPitch
-struct MusicPlayerInfo
-{
- struct SongHeader *songHeader;
- u32 status;
- u8 trackCount;
- u8 priority;
- u8 cmd;
- u8 unk_B;
- u32 clock;
- u8 gap[8];
- u8 *memAccArea;
- u16 tempoD;
- u16 tempoU;
- u16 tempoI;
- u16 tempoC;
- u16 fadeOI;
- u16 fadeOC;
- u16 fadeOV;
- struct MusicPlayerTrack *tracks;
- struct ToneData *tone;
- u32 ident;
- u32 func;
- u32 intp;
-};
-
-#define BLENDER_SCORE_BEST 0
-#define BLENDER_SCORE_GOOD 1
-#define BLENDER_SCORE_MISS 2
-
-#define BLENDER_MAX_PLAYERS 4
-#define BLENDER_SCORES_NO 3
-
-#define FLAVOUR_SPICY 0
-#define FLAVOUR_DRY 1
-#define FLAVOUR_SWEET 2
-#define FLAVOUR_BITTER 3
-#define FLAVOUR_SOUR 4
-
-struct BlenderBerry
-{
- u16 itemID;
- u8 name[7];
- u8 flavours[5];
- u8 smoothness;
-};
-
-struct BerryBlenderData
-{
- u8 field_0;
- u8 field_1;
- struct Window field_4;
- u8 field_35;
- u8 field_36;
- u8 field_37;
- u8 field_38;
- u8 field_39;
- u8 field_3A;
- u8 field_3B;
- u8 field_3C;
- u8 field_3D;
- u8 field_3E;
- u8 field_3F;
- u8 field_40;
- u8 field_41;
- u8 field_42;
- u8 field_43;
- u8 field_44;
- u8 field_45;
- u8 field_46;
- u8 field_47;
- u8 field_48;
- u8 field_49;
- u8 field_4A;
- u8 field_4B;
- u8 field_4C;
- u8 field_4D;
- u16 field_4E;
- u8 scoreIconIDs[3];
- u16 arrowPos;
- s16 field_56;
- s16 field_58;
- u16 max_RPM;
- u8 SyncArrowSpriteID[BLENDER_MAX_PLAYERS];
- u8 SyncArrowSprite2ID[BLENDER_MAX_PLAYERS];
- u8 field_64;
- u8 field_65;
- u8 field_66;
- u8 field_67;
- u8 field_68;
- u8 field_69;
- u8 field_6A;
- u8 field_6B;
- u8 field_6C;
- u8 field_6D;
- u8 field_6E;
- u8 field_6F;
- u16 field_70[BLENDER_MAX_PLAYERS];
- u16 field_78;
- u16 field_7A;
- u16 field_7C;
- u8 field_7E;
- u8 field_7F;
- u16 chosenItemID[BLENDER_MAX_PLAYERS];
- u8 playersNo;
- u8 field_89;
- u8 field_8A;
- u8 field_8B;
- u8 field_8C;
- u8 field_8D;
- u8 field_8E;
- u8 field_8F;
- u8 field_90;
- u8 field_91;
- u8 field_92;
- u8 field_93;
- u16 field_94;
- u8 field_96;
- u8 field_97;
- u8 field_98;
- u8 field_99;
- u16 field_9A[BLENDER_MAX_PLAYERS];
- u16 field_A2[BLENDER_MAX_PLAYERS];
- u8 field_AA;
- u8 stringVar[129];
- u32 gameFrameTime;
- s32 framesToWait;
- u32 field_134;
- u8 field_138;
- u8 field_139;
- u8 field_13A;
- u8 field_13B;
- u8 field_13C;
- u8 field_13D;
- u16 field_13E;
- u16 field_140;
- u16 field_142;
- s16 field_144;
- s16 field_146;
- u8 field_148[3];
- u8 field_14B;
- u16 scores[BLENDER_MAX_PLAYERS][3];
- u8 playerPlaces[BLENDER_MAX_PLAYERS];
- struct BgAffineDstData field_168;
- u16 field_178;
- struct BlenderBerry blendedBerries[BLENDER_MAX_PLAYERS];
- u32 field_1BC;
- u16 field_1C0;
- u16 field_1C2;
- u32 field_1C4;
-};
-
-struct BlenderDebug
-{
- s8 cursorPos;
- s8 berries[4];
- struct Pokeblock pokeblock;
- u8 field_10;
- u8 spicy;
- u8 dry;
- u8 sweet;
- u8 bitter;
- u8 sour;
- u8 feel;
- s8 field_17;
- s8 field_18;
- s8 field_19;
- s16 BPM;
-};
-
-// other files functions
-void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s16 pitch);
-void m4aMPlayTempoControl(struct MusicPlayerInfo *mplayInfo, u16 tempo);
-void m4aMPlayStop(struct MusicPlayerInfo *mplayInfo);
-void sub_80A6978(void);
-u8 sub_80A7DEC(u8 berryId, u8 x, u8 y, bool8 animate);
-void MenuCursor_SetPos814A880(u8 a1, u8 a2);
-u8 MenuCursor_Create814A5C0(u8 a1, u16 a2, u8 a3, u16 a4, u8 a5);
-s8 GetFirstFreePokeblockSlot(void);
-#ifdef GERMAN
-extern void de_sub_8073110();
-#endif
-
-extern struct MusicPlayerInfo gMPlay_SE2;
-extern struct MusicPlayerInfo gMPlay_BGM;
-extern u16 gSpecialVar_ItemId;
-extern u8 gUnknown_020297ED;
-extern u8 byte_3002A68;
-
-extern const u8 gUnknown_08E6C100[];
-extern const u8 gUnknown_08E6C920[];
-extern const u8 gUnknown_08E6D354[];
-extern const struct WindowTemplate gWindowTemplate_81E6F68;
-extern const u8 *const gPokeblockNames[];
-extern const struct Berry gBerries[];
-
-extern const u8 gBerryBlenderArrowTiles[];
-extern const u8 gBerryBlenderMarubatsuTiles[];
-extern const u8 gBerryBlenderParticlesTiles[];
-extern const u8 gBerryBlenderCountdownNumbersTiles[];
-extern const u8 gBerryBlenderStartTiles[];
-extern const u16 gBerryBlenderMiscPalette[];
-extern const u16 gBerryBlenderArrowPalette[];
-
-// ewram
-static EWRAM_DATA u8 gUnknown_020297DC = 0;
-static EWRAM_DATA u32 gUnknown_020297E0 = 0;
-static EWRAM_DATA u32 gUnknown_020297E4 = 0;
-static EWRAM_DATA u8 gUnknown_020297E8 = 0;
-
-// iwram common
-u16 gUnknown_03004830;
-u8 gInGameOpponentsNo;
-u16 gUnknown_03004840[10];
-struct BerryBlenderData* gBerryBlenderData;
-
-// iwram bss
-IWRAM_DATA s16 gUnknown_03000510[8];
-IWRAM_DATA s16 gUnknown_03000520[6];
-IWRAM_DATA s16 gUnknown_0300052C;
-IWRAM_DATA s16 gUnknown_0300052E;
-IWRAM_DATA s32 gUnknown_03000530[6];
-IWRAM_DATA s32 gUnknown_03000548[5];
-IWRAM_DATA u32 gUnknown_0300055C;
-IWRAM_DATA struct BlenderDebug sBlenderDebug;
-
-// this file's functions
-void Blender_SetBankBerryData(u8 bank, u16 itemID);
-
-static void sub_80514A4(void);
-static void sub_80514F0(void);
-static void sub_804E56C(void);
-static void Blender_SetPlayerNamesLocal(u8 NoOfOpponents);
-static void sub_8051474(void);
-static void sub_804E9F8(void);
-static void sub_804F378(void);
-static void sub_8051414(struct BgAffineDstData *dest);
-static void sub_804F238(void);
-static void sub_80501FC(void);
-static bool8 sub_8051B8C(void);
-static void sub_804F2A8(void);
-static void sub_804F81C(void);
-static void sub_805156C(void);
-void sub_8051684(struct Sprite* sprite);
-static void sub_8051AC8(s16* a0, u16 a1);
-static void sub_805194C(u16 a0, u16 a1);
-static void sub_8051A3C(u16 a0);
-static void sub_8051B18(void);
-static void sub_805123C(void);
-static void sub_8050954(void);
-static bool8 Blender_PrintBlendingRanking(void);
-bool8 Blender_PrintBlendingResults(void);
-static void sub_80510E8(void);
-static void sub_8050E30(void);
-static void sub_805197C(u16 a0, u16 a1);
-static void Blender_PrintMadePokeblockString(struct Pokeblock* pokeblock, u8* dst);
-static void sub_8052BD0(u8 taskID);
-static void sub_8052AF8(void);
-static void sub_804F8C8(u8 taskID);
-static void sub_804F9F4(u8 taskID);
-static void sub_804FB1C(u8 taskID);
-static void sub_8051C04(struct Sprite* sprite);
-static void sub_8051650(struct Sprite* sprite);
-static void sub_805181C(struct Sprite* sprite);
-static void sub_80518CC(struct Sprite* sprite);
-
-// const data
-static const u16 sBlenderCenterPal[] = INCBIN_U16("graphics/berry_blender/center.gbapal");
-static const u8 sBlenderCenterMap[] = INCBIN_U8("graphics/berry_blender/center_map.bin");
-static const u16 sBlenderOuterPal[] = INCBIN_U16("graphics/berry_blender/outer.gbapal");
-
-// unreferenced pals?
-static const u16 sUnknownPal_0[] = INCBIN_U16("graphics/unused/unknown/821604C.gbapal");
-static const u16 sUnknownArray_1[224] = {0};
-
-// unreferenced Japanese strings
-static const u8 sUnknownJpnString0[] = _("▶");
-static const u8 sUnknownJpnString1[] = _(" ");
-static const u8 sUnknownJpnString2[] = _("カッコイ"); // "cool" (missing an イ at the end)
-static const u8 sUnknownJpnString3[] = _("カワイイ"); // "cute"
-static const u8 sUnknownJpnString4[] = _("ウツクシ"); // "beautiful" (missing an イ at the end)
-static const u8 sUnknownJpnString5[] = _("カシコイ"); // "smart"
-static const u8 sUnknownJpnString6[] = _("タクマシ"); // "tough" (missing an イ at the end)
-
-static const u8 gUnknown_08216249[] = _("\p");
-
-// unreferenced; These appear to be the first names of four people who worked on the game.
-static const u8 sUnknownJpnString7[10] = _("てつじ"); // Tetsuji (Ohta)
-static const u8 sUnknownJpnString8[10] = _("あきと"); // Akito (Mori)
-static const u8 sUnknownJpnString9[10] = _("シゲル"); // Shigeru (Ohmori)
-static const u8 sUnknownJpnString10[10] = _("ヨシノリ"); // Yoshinori (Matsuda)
-
-static const u8 sUnknownText_2Pok[] = _("2Pok");
-static const u8 sUnknownText_3Pok[] = _("3Pok");
-static const u8 sUnknownText_4Pok[] = _("4Pok");
-static const u8* const gUnknown_08216284[] =
-{
- sUnknownText_2Pok, sUnknownText_3Pok, sUnknownText_4Pok
-};
-
-// unreferenced player strings
-static const u8 sUnknown1PString[4] = _("1P");
-static const u8 sUnknown2PString[4] = _("2P");
-static const u8 sUnknown3PString[4] = _("3P");
-static const u8 sUnknown4PString[4] = _("4P");
-
-#ifdef ENGLISH
-static const u8 sBlenderOpponentName1[] = _("MISTER");
-static const u8 sBlenderOpponentName2[] = _("LADDIE");
-static const u8 sBlenderOpponentName3[] = _("LASSIE");
-#else // GERMAN
-static const u8 sBlenderOpponentName1[] = _("OPI");
-static const u8 sBlenderOpponentName2[] = _("KUMPEL");
-static const u8 sBlenderOpponentName3[] = _("TUSSI");
-#endif // ENGLISH
-static const u8* const sBlenderOpponentsNames[] =
-{
- sBlenderOpponentName1, sBlenderOpponentName2, sBlenderOpponentName3
-};
-
-static const u8 sRedColorString[] = _("{COLOR RED}");
-static const u8 sNewLineString_0[] = _("\n");
-static const u8 sSpaceString_0[] = _(" ");
-
-static const s8 gUnknown_082162CC[][2] =
-{
- {-1, -1}, {1, -1}, {-1, 1}, {1, 1}
-};
-
-static const u8 gUnknown_082162D4[][2] =
-{
- {2, 6}, {23, 6}, {2, 12}, {23, 12}, {1, 6}, {22, 6}, {1, 12}, {22, 12}
-};
-
-static const u8 sBlenderSyncArrowsPos[][2] =
-{
- {72, 32}, {168, 32}, {72, 128}, {168, 128}
-};
-
-static const u8 gUnknown_082162EC[3][4] =
-{
- {-1, 0, 1, -1}, {-1, 0, 1, 2}, {0, 1, 2, 3}
-};
-
-static const u16 gUnknown_082162F8[] = {0, 0xC000, 0x4000, 0x8000};
-static const u8 gUnknown_08216300[] = {1, 1, 0};
-static const u8 gUnknown_08216303[] = {32, 224, 96, 160, 0};
-
-static const TaskFunc gUnknown_08216308[] =
-{
- sub_804F8C8, sub_804F9F4, sub_804FB1C
-};
-
-static const struct OamData sOamData_8216314 =
-{
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = 0,
- .x = 0,
- .matrixNum = 0,
- .size = 2,
- .tileNum = 0,
- .priority = 1,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-static const union AnimCmd sSpriteAnim_821631C[] =
-{
- ANIMCMD_FRAME(16, 5, 1, 1),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_8216324[] =
-{
- ANIMCMD_FRAME(16, 5, .vFlip = TRUE),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_821632C[] =
-{
- ANIMCMD_FRAME(16, 5, .hFlip = TRUE),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_8216334[] =
-{
- ANIMCMD_FRAME(16, 5, 0, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_821633C[] =
-{
- ANIMCMD_FRAME(48, 2, 1, 1),
- ANIMCMD_FRAME(32, 5, 1, 1),
- ANIMCMD_FRAME(48, 3, 1, 1),
- ANIMCMD_FRAME(16, 5, 1, 1),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_8216350[] =
-{
- ANIMCMD_FRAME(48, 2, .vFlip = TRUE),
- ANIMCMD_FRAME(32, 5, .vFlip = TRUE),
- ANIMCMD_FRAME(48, 3, .vFlip = TRUE),
- ANIMCMD_FRAME(16, 5, .vFlip = TRUE),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_8216364[] =
-{
- ANIMCMD_FRAME(48, 2, .hFlip = TRUE),
- ANIMCMD_FRAME(32, 5, .hFlip = TRUE),
- ANIMCMD_FRAME(48, 3, .hFlip = TRUE),
- ANIMCMD_FRAME(16, 5, .hFlip = TRUE),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_8216378[] =
-{
- ANIMCMD_FRAME(48, 2, 0, 0),
- ANIMCMD_FRAME(32, 5, 0, 0),
- ANIMCMD_FRAME(48, 3, 0, 0),
- ANIMCMD_FRAME(16, 5, 0, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_821638C[] =
-{
- ANIMCMD_FRAME(0, 5, 1, 1),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_8216394[] =
-{
- ANIMCMD_FRAME(0, 5, .vFlip = TRUE),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_821639C[] =
-{
- ANIMCMD_FRAME(0, 5, .hFlip = TRUE),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_82163A4[] =
-{
- ANIMCMD_FRAME(0, 5, 0, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd *const sSpriteAnimTable_82163AC[] =
-{
- sSpriteAnim_821631C,
- sSpriteAnim_8216324,
- sSpriteAnim_821632C,
- sSpriteAnim_8216334,
- sSpriteAnim_821633C,
- sSpriteAnim_8216350,
- sSpriteAnim_8216364,
- sSpriteAnim_8216378,
- sSpriteAnim_821638C,
- sSpriteAnim_8216394,
- sSpriteAnim_821639C,
- sSpriteAnim_82163A4
-};
-
-static const struct SpriteSheet gUnknown_082163DC =
-{
- gBerryBlenderArrowTiles, 0x800, 46545
-};
-
-static const struct SpritePalette gUnknown_082163E4 =
-{
- gBerryBlenderMiscPalette, 46546
-};
-
-static const struct SpritePalette gUnknown_082163EC =
-{
- gBerryBlenderArrowPalette, 12312
-};
-
-static const struct SpriteTemplate sBlenderSyncArrow_SpriteTemplate =
-{
- .tileTag = 46545,
- .paletteTag = 12312,
- .oam = &sOamData_8216314,
- .anims = sSpriteAnimTable_82163AC,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8051C04
-};
-
-static const struct OamData sOamData_821640C =
-{
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = 0,
- .x = 0,
- .matrixNum = 0,
- .size = 1,
- .tileNum = 0,
- .priority = 0,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-static const union AnimCmd sSpriteAnim_8216414[] =
-{
- ANIMCMD_FRAME(0, 20),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_821641C[] =
-{
- ANIMCMD_FRAME(4, 20, 1, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_8216424[] =
-{
- ANIMCMD_FRAME(8, 4),
- ANIMCMD_FRAME(12, 4),
- ANIMCMD_FRAME(8, 4),
- ANIMCMD_FRAME(12, 4),
- ANIMCMD_FRAME(8, 4),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_821643C[] =
-{
- ANIMCMD_FRAME(8, 4),
- ANIMCMD_END
-};
-
-static const union AnimCmd *const sSpriteAnimTable_8216444[] =
-{
- sSpriteAnim_8216414,
- sSpriteAnim_821641C,
- sSpriteAnim_8216424,
- sSpriteAnim_821643C,
-};
-
-static const struct SpriteSheet gUnknown_08216454 =
-{
- gBerryBlenderMarubatsuTiles, 0x200, 48888
-};
-
-static const struct SpriteTemplate sSpriteTemplate_821645C =
-{
- .tileTag = 48888,
- .paletteTag = 46546,
- .oam = &sOamData_821640C,
- .anims = sSpriteAnimTable_8216444,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8051650
-};
-
-static const struct OamData sOamData_8216474 =
-{
- .y = 0,
- .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 sSpriteAnim_821647C[] =
-{
- ANIMCMD_FRAME(0, 3),
- ANIMCMD_FRAME(1, 4),
- ANIMCMD_FRAME(3, 5),
- ANIMCMD_FRAME(1, 4),
- ANIMCMD_FRAME(0, 3),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_8216494[] =
-{
- ANIMCMD_FRAME(0, 3),
- ANIMCMD_FRAME(2, 4),
- ANIMCMD_FRAME(4, 5),
- ANIMCMD_FRAME(2, 4),
- ANIMCMD_FRAME(0, 3),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_82164AC[] =
-{
- ANIMCMD_FRAME(0, 2),
- ANIMCMD_FRAME(1, 2),
- ANIMCMD_FRAME(2, 2),
- ANIMCMD_FRAME(4, 4),
- ANIMCMD_FRAME(3, 3),
- ANIMCMD_FRAME(2, 2),
- ANIMCMD_FRAME(1, 2),
- ANIMCMD_FRAME(0, 2),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_82164D0[] =
-{
- ANIMCMD_FRAME(5, 5, 1, 1),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_82164D8[] =
-{
- ANIMCMD_FRAME(6, 5, 1, 1),
- ANIMCMD_END
-};
-
-static const union AnimCmd *const sSpriteAnimTable_82164E0[] =
-{
- sSpriteAnim_821647C,
- sSpriteAnim_8216494,
- sSpriteAnim_82164AC,
- sSpriteAnim_82164D0,
- sSpriteAnim_82164D8,
-};
-
-static const struct SpriteSheet gUnknown_082164F4 =
-{
- gBerryBlenderParticlesTiles, 0xE0, 23456
-};
-
-static const struct SpriteTemplate sSpriteTemplate_82164FC =
-{
- .tileTag = 23456,
- .paletteTag = 46546,
- .oam = &sOamData_8216474,
- .anims = sSpriteAnimTable_82164E0,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallbackDummy
-};
-
-static const struct OamData sOamData_8216514 =
-{
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = 0,
- .x = 0,
- .matrixNum = 0,
- .size = 2,
- .tileNum = 0,
- .priority = 1,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-static const union AnimCmd sSpriteAnim_821651C[] =
-{
- ANIMCMD_FRAME(32, 30),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_8216524[] =
-{
- ANIMCMD_FRAME(16, 30),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_821652C[] =
-{
- ANIMCMD_FRAME(0, 30),
- ANIMCMD_END
-};
-
-static const union AnimCmd *const sSpriteAnimTable_8216534[] =
-{
- sSpriteAnim_821651C,
- sSpriteAnim_8216524,
- sSpriteAnim_821652C,
-};
-
-static const struct SpriteSheet gUnknown_08216540 =
-{
- gBerryBlenderCountdownNumbersTiles, 0x600, 12345
-};
-
-static const struct SpriteTemplate sSpriteTemplate_8216548 =
-{
- .tileTag = 12345,
- .paletteTag = 46546,
- .oam = &sOamData_8216514,
- .anims = sSpriteAnimTable_8216534,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_805181C
-};
-
-static const struct OamData sOamData_8216560 =
-{
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = 1,
- .x = 0,
- .matrixNum = 0,
- .size = 3,
- .tileNum = 0,
- .priority = 1,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-static const union AnimCmd sSpriteAnim_8216568[] =
-{
- ANIMCMD_FRAME(0, 30),
- ANIMCMD_END
-};
-
-static const union AnimCmd *const sSpriteAnimTable_8216570[] =
-{
- sSpriteAnim_8216568,
-};
-
-static const struct SpriteSheet gUnknown_08216574 =
-{
- gBerryBlenderStartTiles, 0x400, 12346
-};
-
-static const struct SpriteTemplate sSpriteTemplate_821657C =
-{
- .tileTag = 12346,
- .paletteTag = 46546,
- .oam = &sOamData_8216560,
- .anims = sSpriteAnimTable_8216570,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_80518CC
-};
-
-static const s16 gUnknown_08216594[][5] =
-{
- {-10, 20, 10, 2, 1},
- {250, 20, 10, -2, 1},
- {-10, 140, 10, 2, -1},
- {250, 140, 10, -2, -1},
-};
-
-static const u8 gUnknown_082165BC[][3] =
-{
- {4, 3, 2}, {0, 4, 3}, {1, 0, 4}, {2, 1, 0}, {3, 2, 1}, {0, 2, 3}, {1, 3, 4}, {2, 4, 0}, {3, 0, 1}, {4, 1, 2},
-};
-
-static const u8 gUnknown_082165DA[] = {1, 1, 2, 3, 4};
-static const u8 gUnknown_082165DF[] = {0x1C, 0x16, 0x13, 0x1A, 0x19, 0x0E, 0x0D, 0x0B, 0x07, 0x15};
-static const u8 gUnknown_082165E9[] = {6, 6, 6, 6, 5};
-static const u8 gUnknown_082165EE[] = {3, 3, 3, 2, 2};
-static const u8 gUnknown_082165F3[] = {3, 3, 3, 3, 2};
-
-static const u8 sText_Space[] = _(" ");
-static const u8 sText_BPM[] = _("BPM");
-static const u8 sText_Dash[] = _("-");
-static const u8 sNewLineString_1[] = _("\n");
-static const u8 sNewLineString_2[] = _("\n");
-
-static void Blender_ControlHitPitch(void)
-{
- m4aMPlayPitchControl(&gMPlay_SE2, 0xFFFF, (gBerryBlenderData->field_56 - 128) * 2);
-}
-
-static void VBlankCB0_BerryBlender(void)
-{
- sub_80514A4();
- sub_80514F0();
- LoadOam();
- ProcessSpriteCopyRequests();
- TransferPlttBuffer();
-}
-
-static void VBlankCB1_BerryBlender(void)
-{
- LoadOam();
- ProcessSpriteCopyRequests();
- TransferPlttBuffer();
-}
-
-static bool8 sub_804E2EC(void)
-{
- switch (gBerryBlenderData->field_1)
- {
- case 0:
- LZDecompressWram(gUnknown_08E6C100, ewram10000);
- gBerryBlenderData->field_1++;
- break;
- case 1:
- DmaCopy16Defvars(3, sBlenderCenterMap, (void *)(VRAM + 0x4000), 0x400);
- LoadPalette(sBlenderCenterPal, 0, 0x100);
- gBerryBlenderData->field_1++;
- break;
- case 2:
- DmaCopyLarge16(3, ewram10000, (void *)(VRAM + 0x0), 0x2000, 0x1000);
- gBerryBlenderData->field_1++;
- break;
- case 3:
- LZDecompressWram(gUnknown_08E6C920, ewram10000);
- gBerryBlenderData->field_1++;
- break;
- case 4:
- LZDecompressWram(gUnknown_08E6D354, ewram13000);
- gBerryBlenderData->field_1++;
- break;
- case 5:
- DmaCopy16Defvars(3, ewram10000, (void *)(VRAM + 0xE000), 0x1000);
- gBerryBlenderData->field_1++;
- break;
- case 6:
- DmaCopy16Defvars(3, ewram11000, (void *)(VRAM + 0xF000), 0x1000);
- gBerryBlenderData->field_1++;
- break;
- case 7:
- {
- u16 i;
- u16* palStore = (u16*)(ewram13000);
-
- for (i = 0; i < 640; i++)
- {
- *(palStore + i) |= 0x100;
- }
- DmaCopy16Defvars(3, ewram13000, (void *)(VRAM + 0x6000), 0x500);
- LoadPalette(sBlenderOuterPal, 0x80, 0x20);
- gBerryBlenderData->field_1++;
- }
- break;
- case 8:
- LoadSpriteSheet(&gUnknown_082163DC);
- LoadSpriteSheet(&gUnknown_082164F4);
- LoadSpriteSheet(&gUnknown_08216454);
- gBerryBlenderData->field_1++;
- break;
- case 9:
- LoadSpriteSheet(&gUnknown_08216540);
- LoadSpriteSheet(&gUnknown_08216574);
- LoadSpritePalette(&gUnknown_082163EC);
- LoadSpritePalette(&gUnknown_082163E4);
- gBerryBlenderData->field_1 = 0;
- return TRUE;
- }
- return FALSE;
-}
-
-static void sub_804E4FC(void)
-{
- REG_DISPCNT = 0x1341;
- REG_BG2CNT = 0x4880;
- REG_BG1CNT = 0xC0D;
- REG_BG0HOFS = 0;
- REG_BG0VOFS = 0;
- REG_BG1HOFS = 0;
- REG_BG1VOFS = 0;
-}
-
-void DoBerryBlending(void)
-{
- u8* field6F; //this temp value is needed to match
-
- gBerryBlenderData = eBerryBlenderData;
-
- field6F = &gBerryBlenderData->field_6F;
- gBerryBlenderData->field_0 = 0;
- *field6F = 0;
-
- Blender_SetPlayerNamesLocal(gSpecialVar_0x8004);
- SetMainCallback2(sub_804E56C);
-}
-
-static void sub_804E56C(void)
-{
- s32 i;
- switch (gBerryBlenderData->field_0)
- {
- case 0:
- REG_DISPCNT = 0;
- ResetSpriteData();
- FreeAllSpritePalettes();
- SetVBlankCallback(NULL);
- Text_LoadWindowTemplate(&gWindowTemplate_81E6F68);
- InitMenuWindow(&gWindowTemplate_81E6F68);
- gBerryBlenderData->field_0++;
- gBerryBlenderData->field_140 = 0;
- gBerryBlenderData->field_13E = 0;
- gBerryBlenderData->field_142 = 0x50;
- gBerryBlenderData->field_144 = 0;
- gBerryBlenderData->field_146 = 0;
- gBerryBlenderData->field_1 = 0;
- sub_8051474();
- break;
- case 1:
- if (sub_804E2EC())
- {
- for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
- {
- gBerryBlenderData->SyncArrowSpriteID[i] = CreateSprite(&sBlenderSyncArrow_SpriteTemplate, sBlenderSyncArrowsPos[i][0], sBlenderSyncArrowsPos[i][1], 1);
- StartSpriteAnim(&gSprites[gBerryBlenderData->SyncArrowSpriteID[i]], i + 8);
- }
- SetVBlankCallback(VBlankCB0_BerryBlender);
- gBerryBlenderData->field_0++;
- }
- break;
- case 2:
- BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
- sub_8051474();
- gBerryBlenderData->field_0++;
- break;
- case 3:
- sub_804E4FC();
- if (!gPaletteFade.active)
- {
- gBerryBlenderData->field_0++;
- }
- break;
- case 4:
- Menu_DrawStdWindowFrame(0, 14, 29, 19);
- MenuPrintMessage(gOtherText_BlenderChooseBerry, 1, 15);
- gBerryBlenderData->field_0++;
- break;
- case 5:
- if (Menu_UpdateWindowText())
- {
- gBerryBlenderData->field_0++;
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- }
- break;
- case 6:
- if (!gPaletteFade.active)
- {
- sub_80A6978();
- gBerryBlenderData->field_0 = 0;
- }
- break;
- }
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
-}
-
-void sub_804E738(struct Sprite* sprite)
-{
- sprite->data[1] += sprite->data[6];
- sprite->data[2] -= sprite->data[4];
- sprite->data[2] += sprite->data[7];
- sprite->data[0] += sprite->data[7];
- sprite->data[4]--;
-
- if (sprite->data[0] < sprite->data[2])
- {
- sprite->data[3] = sprite->data[4] = sprite->data[3] - 1;
- if (++sprite->data[5] > 3)
- DestroySprite(sprite);
- else
- PlaySE(SE_TB_KARA);
- }
- sprite->pos1.x = sprite->data[1];
- sprite->pos1.y = sprite->data[2];
-}
-
-void sub_804E794(struct Sprite* sprite, s16 a2, s16 a3, s16 a4, s16 a5, s16 a6)
-{
- sprite->data[0] = a3;
- sprite->data[1] = a2;
- sprite->data[2] = a3;
- sprite->data[3] = a4;
- sprite->data[4] = 10;
- sprite->data[5] = 0;
- sprite->data[6] = a5;
- sprite->data[7] = a6;
- sprite->callback = sub_804E738;
-}
-
-static void sub_804E7C0(u16 a0, u8 a1)
-{
- u8 spriteID = sub_80A7DEC(a0 + 123, 0, 80, a1 & 1);
- sub_804E794(&gSprites[spriteID], gUnknown_08216594[a1][0], gUnknown_08216594[a1][1], gUnknown_08216594[a1][2], gUnknown_08216594[a1][3], gUnknown_08216594[a1][4]);
-}
-
-static void Blender_CopyBerryData(struct BlenderBerry* berry, u16 itemID)
-{
- const struct Berry *berryInfo = GetBerryInfo(itemID + 124);
- berry->itemID = itemID;
- StringCopy(berry->name, berryInfo->name);
- berry->flavours[FLAVOUR_SPICY] = berryInfo->spicy;
- berry->flavours[FLAVOUR_DRY] = berryInfo->dry;
- berry->flavours[FLAVOUR_SWEET] = berryInfo->sweet;
- berry->flavours[FLAVOUR_BITTER] = berryInfo->bitter;
- berry->flavours[FLAVOUR_SOUR] = berryInfo->sour;
- berry->smoothness = berryInfo->smoothness;
-}
-
-static void Blender_SetPlayerNamesLocal(u8 NoOfOpponents)
-{
- int i;
- if (NoOfOpponents)
- {
- for (i = 0; i < 4; i++)
- gLinkPlayers[i].language = GAME_LANGUAGE;
- }
- switch (NoOfOpponents)
- {
- case 0:
- gInGameOpponentsNo = 0;
- break;
- case 1:
- gInGameOpponentsNo = 1;
- gBerryBlenderData->playersNo = 2;
- StringCopy(gLinkPlayers[0].name, gSaveBlock2.playerName);
- StringCopy(gLinkPlayers[1].name, sBlenderOpponentsNames[0]);
- break;
- case 2:
- gInGameOpponentsNo = 2;
- gBerryBlenderData->playersNo = 3;
- StringCopy(gLinkPlayers[0].name, gSaveBlock2.playerName);
- StringCopy(gLinkPlayers[1].name, sBlenderOpponentsNames[0]);
- StringCopy(gLinkPlayers[2].name, sBlenderOpponentsNames[1]);
- break;
- case 3:
- gInGameOpponentsNo = 3;
- gBerryBlenderData->playersNo = 4;
- StringCopy(gLinkPlayers[0].name, gSaveBlock2.playerName);
- StringCopy(gLinkPlayers[1].name, sBlenderOpponentsNames[0]);
- StringCopy(gLinkPlayers[2].name, sBlenderOpponentsNames[1]);
- StringCopy(gLinkPlayers[3].name, sBlenderOpponentsNames[2]);
- break;
- }
-}
-
-void sub_804E990(void)
-{
- s32 i;
-
- REG_DISPCNT = 0;
- gBerryBlenderData = eBerryBlenderData;
- gBerryBlenderData->field_0 = 0;
- gBerryBlenderData->field_134 = 0;
- for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
- {
- gBerryBlenderData->chosenItemID[i] = 0;
- }
- Blender_SetPlayerNamesLocal(gSpecialVar_0x8004);
- if (gSpecialVar_0x8004 == 0)
- SetMainCallback2(sub_804E9F8);
- else
- SetMainCallback2(sub_804F378);
-}
-
-static void sub_804E9F8(void)
-{
- int i, j;
- switch (gBerryBlenderData->field_0)
- {
- case 0:
- ResetSpriteData();
- FreeAllSpritePalettes();
- ResetTasks();
- SetVBlankCallback(VBlankCB0_BerryBlender);
- Text_LoadWindowTemplate(&gWindowTemplate_81E6F68);
- InitMenuWindow(&gWindowTemplate_81E6F68);
- gLinkType = 0x4422;
- gBerryBlenderData->field_0++;
- gBerryBlenderData->field_4E = 0;
- gBerryBlenderData->field_7E = 0;
- gBerryBlenderData->field_144 = 0;
- gBerryBlenderData->field_146 = 0;
- for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
- {
- gBerryBlenderData->field_70[i] = 0;
- for (j = 0; j < 3; j++)
- {
- gBerryBlenderData->scores[i][j] = 0;
- }
- }
- gBerryBlenderData->field_7C = 0;
- gBerryBlenderData->field_56 = 0;
- gBerryBlenderData->arrowPos = 0;
- gBerryBlenderData->max_RPM = 0;
- gBerryBlenderData->field_1 = 0;
- break;
- case 1:
- if (sub_804E2EC())
- {
- gBerryBlenderData->field_0++;
- sub_8051474();
- }
- break;
- case 2:
- for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
- {
- gBerryBlenderData->SyncArrowSprite2ID[i] = CreateSprite(&sBlenderSyncArrow_SpriteTemplate, sBlenderSyncArrowsPos[i][0], sBlenderSyncArrowsPos[i][1], 1);
- StartSpriteAnim(&gSprites[gBerryBlenderData->SyncArrowSprite2ID[i]], i + 8);
- }
- gBerryBlenderData->field_0++;
- break;
- case 3:
- BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
- gBerryBlenderData->field_0++;
- break;
- case 4:
- sub_804E4FC();
- if (!gPaletteFade.active)
- {
- gBerryBlenderData->field_0++;
- }
- break;
- case 5:
- Menu_DrawStdWindowFrame(0, 13, 29, 19);
- Menu_PrintText(gOtherText_LinkStandby3, 1, 14);
- gBerryBlenderData->field_0 = 8;
- gBerryBlenderData->framesToWait = 0;
- break;
- case 8:
- gBerryBlenderData->field_0++;
- gBerryBlenderData->field_13C = 0;
- Blender_CopyBerryData(&gBerryBlenderData->blendedBerries[0], gSpecialVar_ItemId);
- memcpy(gBlockSendBuffer, &gBerryBlenderData->blendedBerries[0], sizeof(struct BlenderBerry));
- sub_80084A4();
- gBerryBlenderData->framesToWait = 0;
- break;
- case 9:
- if (IsLinkTaskFinished())
- {
- ResetBlockReceivedFlags();
- if (GetMultiplayerId() == 0)
- sub_8007E9C(4);
- gBerryBlenderData->field_0++;
- }
- break;
- case 10:
- if (++gBerryBlenderData->framesToWait > 20)
- {
- Menu_EraseScreen();
- if (GetBlockReceivedStatus() == sub_8008198())
- {
- for (i = 0; i < GetLinkPlayerCount(); i++)
- {
- memcpy(&gBerryBlenderData->blendedBerries[i], &gBlockRecvBuffer[i][0], sizeof(struct BlenderBerry));
- gBerryBlenderData->chosenItemID[i] = gBerryBlenderData->blendedBerries[i].itemID;
- }
- ResetBlockReceivedFlags();
- gBerryBlenderData->field_0++;
- }
- }
- break;
- case 11:
- gBerryBlenderData->playersNo = GetLinkPlayerCount();
- for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
- {
- if (gBerryBlenderData->field_13C == gUnknown_082162EC[gBerryBlenderData->playersNo - 2][i])
- {
- sub_804E7C0(gBerryBlenderData->chosenItemID[gBerryBlenderData->field_13C], i);
- break;
- }
- }
- gBerryBlenderData->framesToWait = 0;
- gBerryBlenderData->field_0++;
- gBerryBlenderData->field_13C++;
- break;
- case 12:
- if (++gBerryBlenderData->framesToWait > 60)
- {
- if (gBerryBlenderData->field_13C >= gBerryBlenderData->playersNo)
- {
- gBerryBlenderData->field_0++;
- gBerryBlenderData->arrowPos = gUnknown_082162F8[gUnknown_08216300[gBerryBlenderData->playersNo - 2]] - 22528;
- }
- else
- gBerryBlenderData->field_0--;
- gBerryBlenderData->framesToWait = 0;
- }
- break;
- case 13:
- if (IsLinkTaskFinished())
- {
- gBerryBlenderData->field_0++;
- sub_8051414(&gBerryBlenderData->field_168);
- }
- break;
- case 14:
- REG_DISPCNT |= 0x400;
- gBerryBlenderData->arrowPos += 0x200;
- gBerryBlenderData->field_142 += 4;
- if (gBerryBlenderData->field_142 > 255)
- {
- gBerryBlenderData->field_0++;
- gBerryBlenderData->field_142 = 256;
- gBerryBlenderData->arrowPos = gUnknown_082162F8[gUnknown_08216300[gBerryBlenderData->playersNo - 2]];
- REG_BG2CNT = 0x4882;
- gBerryBlenderData->framesToWait = 0;
- sub_804F238();
- sub_804F2A8();
- }
- sub_8051414(&gBerryBlenderData->field_168);
- break;
- case 15:
- if (sub_8051B8C())
- {
- gBerryBlenderData->framesToWait = 0;
- gBerryBlenderData->field_0++;
- }
- sub_8051414(&gBerryBlenderData->field_168);
- break;
- case 16:
- CreateSprite(&sSpriteTemplate_8216548, 120, -16, 3);
- gBerryBlenderData->field_0++;
- break;
- case 18:
- gBerryBlenderData->field_0++;
- break;
- case 19:
- sub_80084A4();
- gBerryBlenderData->field_0++;
- break;
- case 20:
- if (IsLinkTaskFinished())
- {
- sub_8007E24();
- gBerryBlenderData->field_0++;
- }
- break;
- case 21:
- gBerryBlenderData->field_56 = 128;
- gBerryBlenderData->gameFrameTime = 0;
- SetMainCallback2(sub_80501FC);
- if (GetCurrentMapMusic() != 403)
- {
- gBerryBlenderData->field_178 = GetCurrentMapMusic();
- }
- PlayBGM(BGM_CYCLING);
- break;
- case 100:
- Menu_DrawStdWindowFrame(0, 13, 29, 19);
- MenuPrintMessage(gOtherText_LinkNotFound, 1, 15);
- gBerryBlenderData->field_0++;
- break;
- case 101:
- if (Menu_UpdateWindowText())
- gBerryBlenderData->field_0++;
- break;
- case 102:
- if (!gPaletteFade.active)
- SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
- break;
- }
- RunTasks();
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
-}
-
-static void sub_804F0F4(void)
-{
- REG_DISPCNT = 0;
-
- ResetSpriteData();
- FreeAllSpritePalettes();
- ResetTasks();
-
- SetVBlankCallback(VBlankCB0_BerryBlender);
-
- Text_LoadWindowTemplate(&gWindowTemplate_81E6F68);
- InitMenuWindow(&gWindowTemplate_81E6F68);
-
- gLinkType = 0x4422;
-
- gBerryBlenderData->field_4E = 0;
- gBerryBlenderData->field_56 = 0;
- gBerryBlenderData->arrowPos = 0;
- gBerryBlenderData->max_RPM = 0;
- gBerryBlenderData->field_144 = 0;
- gBerryBlenderData->field_146 = 0;
- gBerryBlenderData->field_0++;
-}
-
-static u8 sub_804F16C(u16 arrowPos, u8 a1)
-{
- u32 var1 = (arrowPos / 256) + 24;
- u8 arrID = gBerryBlenderData->field_A2[a1];
- u32 var2 = gUnknown_08216303[arrID];
-
- if (var1 >= var2 && var1 < var2 + 48)
- {
- if (var1 >= var2 + 20 && var1 < var2 + 28)
- return 2;
- else
- return 1;
- }
- else
- return 0;
-}
-
-static void sub_804F1BC(u16 itemID, u8 a1, struct BlenderBerry* berry)
-{
- u16 r4 = 0;
- u16 i;
- if (itemID == ITEM_ENIGMA_BERRY)
- {
- for (i = 0; i < 5; i++)
- {
- if (berry->flavours[r4] > berry->flavours[i])
- r4 = i;
- }
- r4 += 5;
- }
- else
- {
- r4 = itemID - 133;
- if (r4 >= 5)
- r4 = (r4 % 5) + 5;
- }
- for (i = 0; i < a1 - 1; i++)
- {
- Blender_SetBankBerryData(i + 1, gUnknown_082165BC[r4][i] + 133);
- }
-}
-
-static void sub_804F238(void)
-{
- s32 i, j;
- for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
- {
- gBerryBlenderData->field_A2[i] = 0xFF;
- gBerryBlenderData->field_9A[i] = gUnknown_082162EC[gBerryBlenderData->playersNo - 2][i];
- }
- for (j = 0; j < BLENDER_MAX_PLAYERS; j++)
- {
- for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
- {
- if (gBerryBlenderData->field_9A[i] == j)
- gBerryBlenderData->field_A2[j] = i;
- }
- }
-}
-
-static void sub_804F2A8(void)
-{
- int i;
- for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
- {
- if (gBerryBlenderData->field_9A[i] != 0xFF)
- {
- u8* stringPtr = gStringVar1;
-
- gBerryBlenderData->SyncArrowSpriteID[gBerryBlenderData->field_9A[i]] = gBerryBlenderData->SyncArrowSprite2ID[i];
- StartSpriteAnim(&gSprites[gBerryBlenderData->SyncArrowSpriteID[gBerryBlenderData->field_9A[i]]], i);
- if (GetMultiplayerId() == gBerryBlenderData->field_9A[i])
- stringPtr = StringCopy(stringPtr, sRedColorString);
- StringCopy(stringPtr, gLinkPlayers[gBerryBlenderData->field_9A[i]].name);
- Menu_PrintTextPixelCoords(gStringVar1, gUnknown_082162D4[i][0] * 8 + 1, gUnknown_082162D4[i][1] * 8, 1);
- }
- }
-}
-
-static void sub_804F378(void)
-{
- s32 i, j;
- switch (gBerryBlenderData->field_0)
- {
- case 0:
- sub_804F0F4();
- Blender_SetBankBerryData(0, gSpecialVar_ItemId);
- Blender_CopyBerryData(&gBerryBlenderData->blendedBerries[0], gSpecialVar_ItemId);
- sub_804F1BC(gSpecialVar_ItemId, gBerryBlenderData->playersNo, &gBerryBlenderData->blendedBerries[0]);
- for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
- {
- gBerryBlenderData->field_70[i] = 0;
- for (j = 0; j < 3; j++)
- {
- gBerryBlenderData->scores[i][j] = 0;
- }
- }
- gBerryBlenderData->field_7C = 0;
- gBerryBlenderData->field_1 = 0;
- break;
- case 1:
- if (sub_804E2EC())
- {
- gBerryBlenderData->field_0++;
- sub_8051474();
- }
- break;
- case 2:
- for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
- {
- gBerryBlenderData->SyncArrowSprite2ID[i] = CreateSprite(&sBlenderSyncArrow_SpriteTemplate, sBlenderSyncArrowsPos[i][0], sBlenderSyncArrowsPos[i][1], 1);
- StartSpriteAnim(&gSprites[gBerryBlenderData->SyncArrowSprite2ID[i]], i + 8);
- }
- gBerryBlenderData->field_0++;
- break;
- case 3:
- BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
- gBerryBlenderData->field_0++;
- gBerryBlenderData->framesToWait = 0;
- break;
- case 4:
- if (++gBerryBlenderData->framesToWait == 2)
- sub_804E4FC();
- if (!gPaletteFade.active)
- gBerryBlenderData->field_0 = 8;
- break;
- case 8:
- gBerryBlenderData->field_0 = 11;
- gBerryBlenderData->field_13C = 0;
- break;
- case 11:
- for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
- {
- u32 var = gUnknown_082162EC[gBerryBlenderData->playersNo - 2][i];
- if (gBerryBlenderData->field_13C == var)
- {
- sub_804E7C0(gBerryBlenderData->chosenItemID[gBerryBlenderData->field_13C], i);
- break;
- }
- }
- gBerryBlenderData->framesToWait = 0;
- gBerryBlenderData->field_0++;
- gBerryBlenderData->field_13C++;
- break;
- case 12:
- if (++gBerryBlenderData->framesToWait > 60)
- {
- if (gBerryBlenderData->field_13C >= gBerryBlenderData->playersNo)
- {
- gBerryBlenderData->arrowPos = gUnknown_082162F8[gUnknown_08216300[gBerryBlenderData->playersNo - 2]] - 22528;
- gBerryBlenderData->field_0++;
- }
- else
- gBerryBlenderData->field_0--;
- gBerryBlenderData->framesToWait = 0;
- }
- break;
- case 13:
- gBerryBlenderData->field_0++;
- sub_804F238();
- PlaySE(SE_RU_HYUU);
- sub_8051414(&gBerryBlenderData->field_168);
- break;
- case 14:
- REG_DISPCNT |= 0x400;
- gBerryBlenderData->arrowPos += 0x200;
- gBerryBlenderData->field_142 += 4;
- if (gBerryBlenderData->field_142 > 255)
- {
- gBerryBlenderData->field_0++;
- gBerryBlenderData->field_142 = 256;
- gBerryBlenderData->arrowPos = gUnknown_082162F8[gUnknown_08216300[gBerryBlenderData->playersNo - 2]];
- REG_BG2CNT = 0x4882;
- gBerryBlenderData->framesToWait = 0;
- PlaySE(SE_TRACK_DOOR);;
- sub_804F2A8();
- }
- sub_8051414(&gBerryBlenderData->field_168);
- break;
- case 15:
- if (sub_8051B8C())
- {
- gBerryBlenderData->field_0++;
- }
- sub_8051414(&gBerryBlenderData->field_168);
- break;
- case 16:
- CreateSprite(&sSpriteTemplate_8216548, 120, -16, 3);
- gBerryBlenderData->field_0++;
- break;
- case 18:
- gBerryBlenderData->field_0++;
- break;
- case 19:
- gBerryBlenderData->field_0++;
- break;
- case 20:
- gBerryBlenderData->field_0++;
- break;
- case 21:
- sub_804F81C();
- gBerryBlenderData->field_56 = 128;
- gBerryBlenderData->gameFrameTime = 0;
- gBerryBlenderData->field_14B = 0;
- gBerryBlenderData->field_7E = 0;
- SetMainCallback2(sub_80501FC);
-
- for (i = 0; i < gSpecialVar_0x8004; i++)
- {
- gBerryBlenderData->field_148[i] = CreateTask(gUnknown_08216308[i], 10 + i);
- }
-
- if (GetCurrentMapMusic() != 403)
- {
- gBerryBlenderData->field_178 = GetCurrentMapMusic();
- }
- PlayBGM(BGM_CYCLING);
- PlaySE(SE_MOTER);
- Blender_ControlHitPitch();
- break;
- }
- RunTasks();
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
-}
-
-static void sub_804F81C(void)
-{
- s32 i;
- for (i = 0; i < 4; i++)
- {
- gSendCmd[0] = 0;
- gSendCmd[2] = 0;
- gRecvCmds[0][i] = 0;
- gRecvCmds[2][i] = 0;
- }
-}
-
-static void sub_804F844(u8 taskID)
-{
- if(++gTasks[taskID].data[0] > gTasks[taskID].data[1])
- {
- gRecvCmds[2][gTasks[taskID].data[2]] = 0x2345;
- DestroyTask(taskID);
- }
-}
-
-static void sub_804F890(u8 a0, u8 a1)
-{
- u8 taskID = CreateTask(sub_804F844, 80);
- gTasks[taskID].data[1] = a1;
- gTasks[taskID].data[2] = a0;
-}
-
-static void sub_804F8C8(u8 taskID)
-{
- if (sub_804F16C(gBerryBlenderData->arrowPos, 1) == 2)
- {
- if (gTasks[taskID].data[0] == 0)
- {
- if (gBerryBlenderData->field_14B == 0)
- {
- u8 rand = Random() / 655;
- if (gBerryBlenderData->field_56 < 500)
- {
- if (rand > 75)
- gRecvCmds[2][1] = 0x4523;
- else
- gRecvCmds[2][1] = 0x5432;
- gRecvCmds[2][1] = 0x5432; // ???
- }
- else if (gBerryBlenderData->field_56 < 1500)
- {
- if (rand > 80)
- gRecvCmds[2][1] = 0x4523;
- else
- {
- u8 value = rand - 21;
- if (value < 60)
- gRecvCmds[2][1] = 0x5432;
- else if (rand < 10)
- sub_804F890(1, 5);
- }
- }
- else if (rand <= 90)
- {
- u8 value = rand - 71;
- if (value < 20)
- gRecvCmds[2][1] = 0x5432;
- else if (rand < 30)
- sub_804F890(1, 5);
- }
- else
- gRecvCmds[2][1] = 0x4523;
- }
- else
- gRecvCmds[2][1] = 0x4523;
-
- gTasks[taskID].data[0] = 1;
- }
- }
- else
- gTasks[taskID].data[0] = 0;
-}
-
-static void sub_804F9F4(u8 taskID)
-{
- u32 var1 = (gBerryBlenderData->arrowPos + 0x1800) & 0xFFFF;
- u32 var2 = gBerryBlenderData->field_A2[2] & 0xFF;
- if ((var1 >> 8) > gUnknown_08216303[var2] + 20 && (var1 >> 8) < gUnknown_08216303[var2] + 40)
- {
- if (gTasks[taskID].data[0] == 0)
- {
- if (gBerryBlenderData->field_14B == 0)
- {
- u8 rand = Random() / 655;
- if (gBerryBlenderData->field_56 < 500)
- {
- if (rand > 66)
- gRecvCmds[2][2] = 0x4523;
- else
- gRecvCmds[2][2] = 0x5432;
- }
- else
- {
- u8 value;
- if (rand > 65)
- gRecvCmds[2][2] = 0x4523;
- value = rand - 41;
- if (value < 25)
- gRecvCmds[2][2] = 0x5432;
- if (rand < 10)
- sub_804F890(2, 5);
- }
-
- gTasks[taskID].data[0] = 1;
- }
- else
- {
- gRecvCmds[2][2] = 0x4523;
- gTasks[taskID].data[0] = 1;
- }
- }
- }
- else
- gTasks[taskID].data[0] = 0;
-}
-
-static void sub_804FB1C(u8 taskID)
-{
- u32 var1, var2;
-
- var1 = (gBerryBlenderData->arrowPos + 0x1800) & 0xFFFF;
- var2 = gBerryBlenderData->field_A2[3] & 0xFF;
- if ((var1 >> 8) > gUnknown_08216303[var2] + 20 && (var1 >> 8) < gUnknown_08216303[var2] + 40)
- {
- if (gTasks[taskID].data[0] == 0)
- {
- if (gBerryBlenderData->field_14B == 0)
- {
- u8 rand = (Random() / 655);
- if (gBerryBlenderData->field_56 < 500)
- {
- if (rand > 88)
- gRecvCmds[2][3] = 0x4523;
- else
- gRecvCmds[2][3] = 0x5432;
- }
- else
- {
- if (rand > 60)
- gRecvCmds[2][3] = 0x4523;
- else
- {
- s8 value = rand - 56; // makes me wonder what the original code was
- u8 value2 = value;
- if (value2 < 5)
- gRecvCmds[2][3] = 0x5432;
- }
- if (rand < 5)
- sub_804F890(3, 5);
- }
- gTasks[taskID].data[0] = 1;
- }
- else
- {
- gRecvCmds[2][3] = 0x4523;
- gTasks[taskID].data[0] = 1;
- }
- }
- }
- else
- gTasks[taskID].data[0] = 0;
-}
-
-static void sub_804FC48(u16 a0, u8 a1)
-{
- u8 spriteID;
-
- spriteID = CreateSprite(&sSpriteTemplate_821645C,
- sBlenderSyncArrowsPos[a1][0] - (10 * gUnknown_082162CC[a1][0]),
- sBlenderSyncArrowsPos[a1][1] - (10 * gUnknown_082162CC[a1][1]),
- 1);
- if (a0 == 0x4523)
- {
- StartSpriteAnim(&gSprites[spriteID], 2);
- gSprites[spriteID].callback = sub_8051684;
- PlaySE(SE_RU_GASHIN);
- }
- else if (a0 == 0x5432)
- {
- StartSpriteAnim(&gSprites[spriteID], 0);
- PlaySE(SE_SEIKAI);
- }
- else if (a0 == 0x2345)
- {
- StartSpriteAnim(&gSprites[spriteID], 1);
- PlaySE(SE_HAZURE);
- }
- sub_805156C();
-}
-
-static void sub_804FD30(u16 a0)
-{
- Blender_ControlHitPitch();
- switch (a0)
- {
- case 0x4523:
- if (gBerryBlenderData->field_56 < 1500)
- gBerryBlenderData->field_56 += (384 / gUnknown_082165DA[gBerryBlenderData->playersNo]);
- else
- {
- gBerryBlenderData->field_56 += (128 / gUnknown_082165DA[gBerryBlenderData->playersNo]);
- sub_8051AC8(&gBerryBlenderData->field_144, (gBerryBlenderData->field_56 / 100) - 10);
- sub_8051AC8(&gBerryBlenderData->field_146, (gBerryBlenderData->field_56 / 100) - 10);
- }
- break;
- case 0x5432:
- if (gBerryBlenderData->field_56 < 1500)
- gBerryBlenderData->field_56 += (256 / gUnknown_082165DA[gBerryBlenderData->playersNo]);
- break;
- case 0x2345:
- gBerryBlenderData->field_56 -= (256 / gUnknown_082165DA[gBerryBlenderData->playersNo]);
- if (gBerryBlenderData->field_56 < 128)
- gBerryBlenderData->field_56 = 128;
- break;
- }
-}
-
-static void sub_804FE70(void)
-{
- s32 i;
-
- if (gSpecialVar_0x8004 != 0)
- {
- if (gSendCmd[2] != 0)
- {
- gRecvCmds[2][0] = gSendCmd[2];
- gRecvCmds[0][0] = 0x4444;
- gSendCmd[2] = 0;
- }
- for (i = 1; i < 4; i++)
- {
- if (gRecvCmds[2][i] != 0)
- gRecvCmds[0][i] = 0x4444;
- }
- }
- for (i = 0; i < gBerryBlenderData->playersNo; i++)
- {
- if (gRecvCmds[0][i] == 0x4444)
- {
- u32 var = gBerryBlenderData->field_A2[i];
- if (gRecvCmds[2][i] == 0x4523)
- {
- sub_804FD30(0x4523);
- gBerryBlenderData->field_13E += (gBerryBlenderData->field_56 / 55);
- if (gBerryBlenderData->field_13E >= 1000)
- gBerryBlenderData->field_13E = 1000;
- sub_804FC48(0x4523, var);
- gBerryBlenderData->scores[i][BLENDER_SCORE_BEST]++;
- }
- else if (gRecvCmds[2][i] == 0x5432)
- {
- sub_804FD30(0x5432);
- gBerryBlenderData->field_13E += (gBerryBlenderData->field_56 / 70);
- sub_804FC48(0x5432, var);
- gBerryBlenderData->scores[i][BLENDER_SCORE_GOOD]++;
- }
- else if (gRecvCmds[2][i] == 0x2345)
- {
- sub_804FC48(0x2345, var);
- sub_804FD30(0x2345);
- if (gBerryBlenderData->field_4.win_field_F > 1000)
- gBerryBlenderData->field_13E = 1000;
- if (gBerryBlenderData->scores[i][BLENDER_SCORE_MISS] < 999)
- gBerryBlenderData->scores[i][BLENDER_SCORE_MISS]++;
- }
- if (gRecvCmds[2][i] == 0x2345 || gRecvCmds[2][i] == 0x4523 || gRecvCmds[2][i] == 0x5432)
- {
- if (gBerryBlenderData->field_56 > 1500)
- m4aMPlayTempoControl(&gMPlay_BGM, ((gBerryBlenderData->field_56 - 750) / 20) + 256);
- else
- m4aMPlayTempoControl(&gMPlay_BGM, 256);
- }
- }
- }
- if (gSpecialVar_0x8004 != 0)
- {
- for (i = 0; i < gBerryBlenderData->playersNo; i++)
- {
- gRecvCmds[0][i] = 0;
- gRecvCmds[2][i] = 0;
- }
- }
-}
-
-static void sub_80500A8(void)
-{
- bool8 A_pressed = 0;
- u8 var2 = gBerryBlenderData->field_A2[GetMultiplayerId()];
- if (gBerryBlenderData->field_6F == 0)
- {
- if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A && gMain.newKeys & A_BUTTON)
- A_pressed = ((gMain.heldKeysRaw & (A_BUTTON | L_BUTTON)) != (A_BUTTON | L_BUTTON));
- else if (gMain.newKeys & A_BUTTON)
- A_pressed = 1;
- if (A_pressed)
- {
- u8 var3;
- StartSpriteAnim(&gSprites[gBerryBlenderData->SyncArrowSpriteID[gBerryBlenderData->field_9A[var2]]], var2 + 4);
- var3 = sub_804F16C(gBerryBlenderData->arrowPos, GetMultiplayerId());
- if (var3 == 2)
- gSendCmd[2] = 0x4523;
- else if (var3 == 1)
- gSendCmd[2] = 0x5432;
- else
- gSendCmd[2] = 0x2345;
- }
- }
- if (++gBerryBlenderData->field_7E > 5)
- {
- if (gBerryBlenderData->field_56 > 128)
- gBerryBlenderData->field_56--;
- gBerryBlenderData->field_7E = 0;
- }
- if (gUnknown_020297ED && gMain.newKeys & L_BUTTON)
- gBerryBlenderData->field_14B ^= 1;
-}
-
-static void sub_80501FC(void)
-{
- sub_8051474();
- if (gBerryBlenderData->gameFrameTime < (99 * 60 * 60) + (59 * 60)) // game time can't be longer than 99 minutes and 59 seconds, can't print 3 digits
- gBerryBlenderData->gameFrameTime++;
- sub_80500A8();
- SetLinkDebugValues((u16)(gBerryBlenderData->field_56), gBerryBlenderData->field_13E);
- sub_804FE70();
- sub_805194C(gBerryBlenderData->field_13E, 1000);
- sub_8051A3C(gBerryBlenderData->field_56);
- sub_8051B18();
- sub_805123C();
- if (gBerryBlenderData->field_6F == 0 && gBerryBlenderData->field_140 >= 1000)
- {
- gBerryBlenderData->field_13E = 1000;
- gBerryBlenderData->field_6F = 1;
- SetMainCallback2(sub_8050954);
- }
- RunTasks();
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
-}
-
-static bool8 sub_80502A4(struct BlenderBerry* berries, u8 index1, u8 index2)
-{
- if (berries[index1].itemID != berries[index2].itemID
- || (StringCompare(berries[index1].name, berries[index2].name) == 0
- && (berries[index1].flavours[0] == berries[index2].flavours[0]
- && berries[index1].flavours[1] == berries[index2].flavours[1]
- && berries[index1].flavours[2] == berries[index2].flavours[2]
- && berries[index1].flavours[3] == berries[index2].flavours[3]
- && berries[index1].flavours[4] == berries[index2].flavours[4]
- && berries[index1].smoothness == berries[index2].smoothness)))
- return TRUE;
- else
- return FALSE;
-}
-
-u32 Blender_GetPokeblockColor(struct BlenderBerry* berries, s16* a1, u8 playersNo, u8 a3)
-{
- s16 vars[5];
- s32 i;
- s32 r6;
- u8 r2;
-
- for (i = 0; i <= 5; i++) // bug, writing one index too far
- vars[i] = a1[i];
- r6 = 0;
- for (i = 0; i < 5; i++)
- {
- if (vars[i] == 0)
- r6++;
- }
- if (r6 == 5 || a3 > 3)
- return 12;
- for (i = 0; i < playersNo; i++)
- {
- for (r6 = 0; r6 < playersNo; r6++)
- {
- if (berries[i].itemID == berries[r6].itemID && i != r6
- && (berries[i].itemID != ITEM_ENIGMA_BERRY || sub_80502A4(berries, i, r6)))
- return 12;
- }
- }
- r2 = 0;
- for (r2 = 0, i = 0; i < 5; i++)
- {
- if (vars[i] > 0)
- r2++;
- }
- if (r2 > 3)
- return 13;
- if (r2 == 3)
- return 11;
- for (i = 0; i < 5; i++)
- {
- if (vars[i] > 50)
- return 14;
- }
- if (r2 == 1 && vars[0] > 0)
- return 1;
- if (r2 == 1 && vars[1] > 0)
- return 2;
- if (r2 == 1 && vars[2] > 0)
- return 3;
- if (r2 == 1 && vars[3] > 0)
- return 4;
- if (r2 == 1 && vars[4] > 0)
- return 5;
- if (r2 == 2)
- {
- s32 var = 0;
- for (i = 0; i < 5; i++)
- {
- if (vars[i] > 0)
- gUnknown_03000520[var++] = i;
- }
- if (vars[gUnknown_03000520[0]] >= vars[gUnknown_03000520[1]])
- {
- if (gUnknown_03000520[0] == 0)
- return (gUnknown_03000520[1] << 16) | 6;
- if (gUnknown_03000520[0] == 1)
- return (gUnknown_03000520[1] << 16) | 7;
- if (gUnknown_03000520[0] == 2)
- return (gUnknown_03000520[1] << 16) | 8;
- if (gUnknown_03000520[0] == 3)
- return (gUnknown_03000520[1] << 16) | 9;
- if (gUnknown_03000520[0] == 4)
- return (gUnknown_03000520[1] << 16) | 10;
- }
- else
- {
- if (gUnknown_03000520[1] == 0)
- return (gUnknown_03000520[0] << 16) | 6;
- if (gUnknown_03000520[1] == 1)
- return (gUnknown_03000520[0] << 16) | 7;
- if (gUnknown_03000520[1] == 2)
- return (gUnknown_03000520[0] << 16) | 8;
- if (gUnknown_03000520[1] == 3)
- return (gUnknown_03000520[0] << 16) | 9;
- if (gUnknown_03000520[1] == 4)
- return (gUnknown_03000520[0] << 16) | 10;
- }
- }
- return 0;
-}
-
-static void sub_80504F0(s16 value)
-{
- gUnknown_0300052C = value;
-}
-
-s16 unref_sub_80504FC(void)
-{
- return gUnknown_0300052C;
-}
-
-static void sub_8050508(s16 value)
-{
- gUnknown_0300052E = value;
-}
-
-s16 unref_sub_8050514(void)
-{
- return gUnknown_0300052E;
-}
-
-static void Blender_CalculatePokeblock(struct BlenderBerry* berries, struct Pokeblock* pokeblock, u8 playersNo, u8* flavours, u16 maxRPM)
-{
- s32 i;
- s32 j;
- s32 var3;
- s32 var4;
- s32 var6;
- u8 r10;
-
- for (i = 0; i < 6; i++)
- gUnknown_03000510[i] = 0;
- for (i = 0; i < playersNo; i++)
- {
- for (j = 0; j < 6; j++)
- gUnknown_03000510[j] += berries[i].flavours[j];
- }
-
- var6 = gUnknown_03000510[0];
- gUnknown_03000510[0] -= gUnknown_03000510[1];
- gUnknown_03000510[1] -= gUnknown_03000510[2];
- gUnknown_03000510[2] -= gUnknown_03000510[3];
- gUnknown_03000510[3] -= gUnknown_03000510[4];
- gUnknown_03000510[4] -= var6;
-
- var6 = 0;
- for (i = 0; i < 5; i++)
- {
- if (gUnknown_03000510[i] < 0)
- {
- gUnknown_03000510[i] = 0;
- var6++;
- }
- }
- r10 = var6;
- for (i = 0; i < 5; i++)
- {
- if (gUnknown_03000510[i] > 0)
- {
- if (gUnknown_03000510[i] < var6)
- gUnknown_03000510[i] = 0;
- else
- gUnknown_03000510[i] -= var6;
- }
- }
- for (i = 0; i < 5; i++)
- {
- gUnknown_03000530[i] = gUnknown_03000510[i];
- }
-
- var6 = maxRPM / 333 + 100;
- gUnknown_0300055C = var6;
-
- for (i = 0; i < 5; i++)
- {
- var3 = gUnknown_03000510[i];
- var3 = (var3 * var6) / 10;
- var4 = var3 % 10;
- var3 /= 10;
- if (var4 > 4)
- var3++;
- gUnknown_03000510[i] = var3;
- }
- for (i = 0; i < 5; i++)
- {
- gUnknown_03000548[i] = gUnknown_03000510[i];
- }
- pokeblock->color = Blender_GetPokeblockColor(berries, &gUnknown_03000510[0], playersNo, r10);
- gUnknown_03000510[5] = (gUnknown_03000510[5] / playersNo) - playersNo;
- if (gUnknown_03000510[5] < 0)
- gUnknown_03000510[5] = 0;
- if (pokeblock->color == 12)
- {
- var6 = Random() % 10;
- for (i = 0; i < 5; i++)
- {
- if ((gUnknown_082165DF[var6] >> i) & 1)
- gUnknown_03000510[i] = 2;
- else
- gUnknown_03000510[i] = 0;
- }
- }
- for (i = 0; i < 6; i++)
- {
- if (gUnknown_03000510[i] > 255)
- gUnknown_03000510[i] = 255;
- }
- pokeblock->spicy = gUnknown_03000510[0];
- pokeblock->dry = gUnknown_03000510[1];
- pokeblock->sweet = gUnknown_03000510[2];
- pokeblock->bitter = gUnknown_03000510[3];
- pokeblock->sour = gUnknown_03000510[4];
- pokeblock->feel = gUnknown_03000510[5];
- for (i = 0; i < 6; i++)
- {
- flavours[i] = gUnknown_03000510[i];
- }
-}
-
-static void BlenderDebug_CalculatePokeblock(struct BlenderBerry* berries, struct Pokeblock* pokeblock, u8 playersNo, u8* flavours, u16 a4)
-{
- Blender_CalculatePokeblock(berries, pokeblock, playersNo, flavours, a4);
-}
-
-/*static*/ void sub_8050760(void)
-{
- u32 frames = (u16)(gBerryBlenderData->gameFrameTime);
- u16 max_RPM = gBerryBlenderData->max_RPM;
- s16 var = 0;
-
- if (frames < 900)
- var = 5;
- else if ((u16)(frames - 900) < 600)
- var = 4;
- else if ((u16)(frames - 1500) < 600)
- var = 3;
- else if ((u16)(frames - 2100) < 900)
- var = 2;
- else if ((u16)(frames - 3300) < 300)
- var = 1;
- sub_8050508(var);
-
- var = 0;
- if (max_RPM <= 64)
- {
- if (max_RPM >= 50 && max_RPM < 100)
- var = -1;
- else if (max_RPM >= 100 && max_RPM < 150)
- var = -2;
- else if (max_RPM >= 150 && max_RPM < 200)
- var = -3;
- else if (max_RPM >= 200 && max_RPM < 250)
- var = -4;
- else if (max_RPM >= 250 && max_RPM < 300)
- var = -5;
- else if (max_RPM >= 350 && max_RPM < 400)
- var = -6;
- else if (max_RPM >= 400 && max_RPM < 450)
- var = -7;
- else if (max_RPM >= 500 && max_RPM < 550)
- var = -8;
- else if (max_RPM >= 550 && max_RPM < 600)
- var = -9;
- else if (max_RPM >= 600)
- var = -10;
- }
- sub_80504F0(var);
-}
-
-static void sub_80508D4(u8 value)
-{
- gBerryBlenderData->field_AA = value;
- MenuCursor_SetPos814A880(192, (gBerryBlenderData->field_AA * 16) + 72);
-}
-
-static void sub_80508FC(void)
-{
- gBerryBlenderData->field_AA = 0;
- Menu_DrawStdWindowFrame(23, 8, 28, 13);
- MenuCursor_Create814A5C0(0, -1, 12, 0x2D9F, 32);
- Menu_PrintText(gOtherText_YesNoTerminating, 24, 9);
- sub_80508D4(gBerryBlenderData->field_AA);
-}
-
-static void sub_8050954(void)
-{
- u8 i;
- u8 multiplayerID; // unused
-
- sub_8051474();
- multiplayerID = GetMultiplayerId();
- switch (gBerryBlenderData->field_6F)
- {
- case 1:
- ClearLinkCallback();
- m4aMPlayTempoControl(&gMPlay_BGM, 256);
- for (i = 0; i < gSpecialVar_0x8004; i++)
- {
- DestroyTask(gBerryBlenderData->field_148[i]);
- }
- gBerryBlenderData->field_6F++;
- break;
- case 2:
- gBerryBlenderData->field_56 -= 32;
- if (gBerryBlenderData->field_56 <= 0)
- {
- gBerryBlenderData->field_56 = 0;
- if (gReceivedRemoteLinkPlayers != 0)
- gBerryBlenderData->field_6F++;
- else
- gBerryBlenderData->field_6F = 5;
- gBerryBlenderData->field_0 = 0;
- m4aMPlayStop(&gMPlay_SE2);
- }
- Blender_ControlHitPitch();
- break;
- case 3:
- if (/*multiplayerID != 0*/ GetMultiplayerId() != 0)
- gBerryBlenderData->field_6F++;
- else if (IsLinkTaskFinished())
- {
- gBerryBlenderData->field_1BC = gBerryBlenderData->gameFrameTime;
- gBerryBlenderData->field_1C0 = gBerryBlenderData->max_RPM;
- SendBlock(0, &gBerryBlenderData->field_1BC, 40);
- gBerryBlenderData->field_6F++;
- }
- break;
- case 4:
- if (GetBlockReceivedStatus())
- {
- u32* ptr = ((u32*)(&gBlockRecvBuffer[0][0]));
- gBerryBlenderData->max_RPM = gBlockRecvBuffer[0][2];
- gBerryBlenderData->gameFrameTime = *ptr;
- gBerryBlenderData->field_6F++;
- ResetBlockReceivedFlags();
- }
- break;
- case 5:
- if (Blender_PrintBlendingRanking())
- gBerryBlenderData->field_6F++;
- break;
- case 6:
- if (Blender_PrintBlendingResults())
- {
- if (gInGameOpponentsNo == 0)
- IncrementGameStat(GAME_STAT_POKEBLOCKS_WITH_FRIENDS);
- else
- IncrementGameStat(GAME_STAT_POKEBLOCKS);
- gBerryBlenderData->field_6F++;
- }
- break;
- case 7:
- gBerryBlenderData->field_6F++;
- Menu_DrawStdWindowFrame(0, 14, 29, 19);
- MenuPrintMessage(gOtherText_BlendAnotherBerryPrompt, 1, 15);
- break;
- case 8:
- if (Menu_UpdateWindowText())
- gBerryBlenderData->field_6F++;
- break;
- case 9:
- gBerryBlenderData->field_AA = 0;
- sub_80508FC();
- gBerryBlenderData->field_6F++;
- break;
- case 10:
- if (gMain.newKeys & DPAD_UP)
- {
- if (gBerryBlenderData->field_AA != 0)
- PlaySE(SE_SELECT);
- sub_80508D4(0);
- }
- else if (gMain.newKeys & DPAD_DOWN)
- {
- if (gBerryBlenderData->field_AA != 1)
- PlaySE(SE_SELECT);
- sub_80508D4(1);
- }
- else if (gMain.newKeys & A_BUTTON)
- {
- PlaySE(SE_SELECT);
- gBerryBlenderData->field_6F++;
- }
- else if (gMain.newKeys & B_BUTTON)
- {
- PlaySE(SE_SELECT);
- gBerryBlenderData->field_6F++;
- sub_80508D4(1);
- }
- break;
- case 11:
- gSendCmd[0] = 0x2FFF;
- if (gBerryBlenderData->field_AA == 0)
- {
- if (IsBagPocketNonEmpty(BAG_BERRIES) == FALSE) // is empty
- {
- gBerryBlenderData->field_7C = 2;
- gSendCmd[1] = 0x9999;
- }
- else if (GetFirstFreePokeblockSlot() == -1)
- {
- gBerryBlenderData->field_7C = 3;
- gSendCmd[1] = 0xAAAA;
- }
- else
- {
- gBerryBlenderData->field_7C = 0;
- gSendCmd[1] = 0x7779;
- }
- gBerryBlenderData->field_6F++;
- }
- else
- {
- gBerryBlenderData->field_7C = 1;
- gSendCmd[1] = 0x8888;
- gBerryBlenderData->field_6F++;
- }
- break;
- case 12:
- if (gInGameOpponentsNo)
- {
- SetMainCallback2(sub_80510E8);
- gBerryBlenderData->field_6F = 0;
- gBerryBlenderData->field_0 = 0;
- }
- else
- {
- MenuPrintMessage(gOtherText_LinkStandby3, 1, 15);
- gBerryBlenderData->field_6F++;
- }
- break;
- case 13:
- if (Menu_UpdateWindowText())
- {
- SetMainCallback2(sub_8050E30);
- gBerryBlenderData->field_6F = 0;
- gBerryBlenderData->field_0 = 0;
- }
- break;
- }
- sub_8051B18();
- sub_8051A3C(gBerryBlenderData->field_56);
- sub_805123C();
- RunTasks();
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
-}
-
-bool8 sub_8050CE8(void)
-{
- switch (gBerryBlenderData->field_1C4)
- {
- case 0:
- sub_80084A4();
- gBerryBlenderData->field_1C4 = 1;
- gBerryBlenderData->framesToWait = 0;
- break;
- case 1:
- if (IsLinkTaskFinished())
- {
- gBerryBlenderData->field_1C4++;
- gSoftResetDisabled = TRUE;
- }
- break;
- case 2:
- sub_8125E2C();
- gBerryBlenderData->field_1C4++;
- gBerryBlenderData->framesToWait = 0;
- break;
- case 3:
- if (++gBerryBlenderData->framesToWait == 10)
- {
- sub_80084A4();
- gBerryBlenderData->field_1C4++;
- }
- break;
- case 4:
- if (IsLinkTaskFinished())
- {
- if (sub_8125E6C())
- gBerryBlenderData->field_1C4 = 5;
- else
- {
- gBerryBlenderData->framesToWait = 0;
- gBerryBlenderData->field_1C4 = 3;
- }
- }
- break;
- case 5:
- gBerryBlenderData->field_1C4++;
- gBerryBlenderData->framesToWait = 0;
- break;
- case 6:
- if (++gBerryBlenderData->framesToWait > 5)
- {
- gSoftResetDisabled = FALSE;
- return TRUE;
- }
- break;
- }
- return FALSE;
-}
-
-static void sub_8050E30(void)
-{
- switch (gBerryBlenderData->field_6F)
- {
- case 0:
- if (gBerryBlenderData->field_70[0] == 0x2222)
- gBerryBlenderData->field_6F = 5;
- else if (gBerryBlenderData->field_70[0] == 0x1111)
- {
- if (gBerryBlenderData->field_78 == 0x9999)
- gBerryBlenderData->field_6F = 2;
- else if (gBerryBlenderData->field_78 == 0xAAAA)
- gBerryBlenderData->field_6F = 1;
- else
- gBerryBlenderData->field_6F = 5;
- }
- break;
- case 1:
- gBerryBlenderData->field_6F = 3;
- DestroyMenuCursor();
- Menu_EraseWindowRect(23, 8, 28, 13);
-#ifdef ENGLISH
- StringCopy(gStringVar4, gLinkPlayers[gBerryBlenderData->field_7A].name);
- StringAppend(gStringVar4, gOtherText_OtherCaseIsFull);
-#else
- StringCopy(gStringVar4, gOtherText_OtherCaseIsFull);
- de_sub_8073110(gStringVar4, gLinkPlayers[gBerryBlenderData->field_7A].name);
-#endif
- MenuPrintMessage(gStringVar4, 1, 15);
- break;
- case 2:
- gBerryBlenderData->field_6F++;
- DestroyMenuCursor();
- Menu_EraseWindowRect(23, 8, 28, 13);
-#ifdef ENGLISH
- StringCopy(gStringVar4, gLinkPlayers[gBerryBlenderData->field_7A].name);
- StringAppend(gStringVar4, gOtherText_NoBerriesForBlend);
-#else
- StringCopy(gStringVar4, gOtherText_NoBerriesForBlend);
- de_sub_8073110(gStringVar4, gLinkPlayers[gBerryBlenderData->field_7A].name);
-#endif
- MenuPrintMessage(gStringVar4, 1, 15);
- break;
- case 3:
- if (Menu_UpdateWindowText())
- {
- gBerryBlenderData->framesToWait = 0;
- gBerryBlenderData->field_6F++;
- }
- break;
- case 4:
- if (++gBerryBlenderData->framesToWait > 60)
- gBerryBlenderData->field_6F = 5;
- break;
- case 5:
- Menu_DrawStdWindowFrame(0, 14, 29, 19);
- Menu_PrintText(gMultiText_Saving, 2, 15);
- sub_80084A4();
- gBerryBlenderData->field_6F++;
- break;
- case 6:
- if (IsLinkTaskFinished())
- {
- gBerryBlenderData->framesToWait = 0;
- gBerryBlenderData->field_6F++;
- gBerryBlenderData->field_1C4 = 0;
- }
- break;
- case 7:
- if (sub_8050CE8())
- {
- PlaySE(SE_SAVE);
- gBerryBlenderData->field_6F++;
- }
- break;
- case 8:
- gBerryBlenderData->field_6F++;
- sub_80084A4();
- break;
- case 9:
- if (IsLinkTaskFinished())
- {
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gBerryBlenderData->field_6F++;
- }
- break;
- case 10:
- if (!gPaletteFade.active)
- {
- if (gBerryBlenderData->field_70[0] == 0x2222)
- SetMainCallback2(DoBerryBlending);
- else
- {
- gBerryBlenderData->framesToWait = 0;
- gBerryBlenderData->field_6F++;
- }
- }
- break;
- case 11:
- if (++gBerryBlenderData->framesToWait > 30)
- {
- sub_800832C();
- gBerryBlenderData->field_6F++;
- }
- break;
- case 12:
- if (gReceivedRemoteLinkPlayers == 0)
- SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
- break;
- }
-
- sub_805123C();
- RunTasks();
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
-}
-
-static void sub_80510E8(void)
-{
- switch (gBerryBlenderData->field_6F)
- {
- case 0:
- if (gBerryBlenderData->field_7C < 2)
- gBerryBlenderData->field_6F = 9;
- if (gBerryBlenderData->field_7C == 2)
- gBerryBlenderData->field_6F = 2;
- if (gBerryBlenderData->field_7C == 3)
- gBerryBlenderData->field_6F =1;
- break;
- case 1:
- gBerryBlenderData->field_6F = 3;
- DestroyMenuCursor();
- Menu_EraseWindowRect(23, 8, 28, 13);
- MenuPrintMessage(gOtherText_CaseIsFull, 1, 15);
- break;
- case 2:
- gBerryBlenderData->field_6F++;
- DestroyMenuCursor();
- Menu_EraseWindowRect(23, 8, 28, 13);
- MenuPrintMessage(gOtherText_OutOfBerries, 1, 15);
- break;
- case 3:
- if (Menu_UpdateWindowText())
- gBerryBlenderData->field_6F = 9;
- break;
- case 9:
- BeginFastPaletteFade(3);
- gBerryBlenderData->field_6F++;
- break;
- case 10:
- if (!gPaletteFade.active)
- {
- if (gBerryBlenderData->field_7C == 0)
- SetMainCallback2(DoBerryBlending);
- else
- SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
- }
- break;
- }
-
- sub_805123C();
- RunTasks();
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
-}
-
-static void sub_805123C(void)
-{
- if (gReceivedRemoteLinkPlayers)
- {
- if (gRecvCmds[0][0] == 0x2FFF)
- {
- if (gRecvCmds[1][0] == 0x1111)
- {
- switch (gRecvCmds[2][0])
- {
- case 0x8888:
- gBerryBlenderData->field_78 = 0x8888;
- gBerryBlenderData->field_7A = gRecvCmds[3][0];
- break;
- case 0x9999:
- gBerryBlenderData->field_78 = 0x9999;
- gBerryBlenderData->field_7A = gRecvCmds[3][0];
- break;
- case 0xAAAA:
- gBerryBlenderData->field_78 = 0xAAAA;
- gBerryBlenderData->field_7A = gRecvCmds[3][0];
- break;
- }
- gBerryBlenderData->field_70[0] = 0x1111;
- }
- else if (gRecvCmds[1][0] == 0x2222)
- gBerryBlenderData->field_70[0] = 0x2222;
- }
- if (GetMultiplayerId() == 0 && gBerryBlenderData->field_70[0] != 0x1111 && gBerryBlenderData->field_70[0] != 0x2222)
- {
- u8 i;
- for (i = 0; i < GetLinkPlayerCount(); i++)
- {
- if (gRecvCmds[0][i] == 0x2FFF)
- {
- switch (gRecvCmds[1][i])
- {
- case 0x8888:
- gBerryBlenderData->field_70[i] = 0x8888;
- break;
- case 0x7779:
- gBerryBlenderData->field_70[i] = 0x7779;
- break;
- case 0x9999:
- gBerryBlenderData->field_70[i] = 0x9999;
- break;
- case 0xAAAA:
- gBerryBlenderData->field_70[i] = 0xAAAA;
- break;
- }
- }
- }
- for (i = 0; i < GetLinkPlayerCount(); i++)
- {
- if (gBerryBlenderData->field_70[i] == 0)
- break;
- }
- if (i == GetLinkPlayerCount())
- {
- for (i = 0; i < GetLinkPlayerCount(); i++)
- {
- if (gBerryBlenderData->field_70[i] != 0x7779)
- break;
- }
- gSendCmd[0] = 0x2FFF;
- if (i == GetLinkPlayerCount())
- gSendCmd[1] = 0x2222;
- else
- {
- gSendCmd[1] = 0x1111;
- gSendCmd[2] = gBerryBlenderData->field_70[i];
- gSendCmd[3] = i;
- }
- }
- }
- }
-}
-
-static void sub_8051414(struct BgAffineDstData *dest)
-{
- struct BgAffineSrcData affineSrc;
- affineSrc.texX = 30720;
- affineSrc.texY = 20480;
- affineSrc.scrX = 120 - gBerryBlenderData->field_144;
- affineSrc.scrY = 80 - gBerryBlenderData->field_146;
- affineSrc.sx = gBerryBlenderData->field_142;
- affineSrc.sy = gBerryBlenderData->field_142;
- affineSrc.alpha = gBerryBlenderData->arrowPos;
- BgAffineSet(&affineSrc, dest, 1);
-}
-
-static void sub_8051474(void)
-{
- gBerryBlenderData->field_58 = gBerryBlenderData->arrowPos;
- gBerryBlenderData->arrowPos += gBerryBlenderData->field_56;
- sub_8051414(&gBerryBlenderData->field_168);
-}
-
-static void sub_80514A4(void)
-{
- REG_BG2PA = gBerryBlenderData->field_168.pa;
- REG_BG2PB = gBerryBlenderData->field_168.pb;
- REG_BG2PC = gBerryBlenderData->field_168.pc;
- REG_BG2PD = gBerryBlenderData->field_168.pd;
- REG_BG2X = gBerryBlenderData->field_168.dx;
- REG_BG2Y = gBerryBlenderData->field_168.dy;
-}
-
-static void sub_80514F0(void)
-{
- REG_BG1HOFS = gBerryBlenderData->field_144;
- REG_BG1VOFS = gBerryBlenderData->field_146;
- REG_BG0HOFS = gBerryBlenderData->field_144;
- REG_BG0VOFS = gBerryBlenderData->field_146;
-}
-
-void sub_8051524(struct Sprite* sprite)
-{
- sprite->data[2] += sprite->data[0];
- sprite->data[3] += sprite->data[1];
- sprite->pos2.x = sprite->data[2] / 8;
- sprite->pos2.y = sprite->data[3] / 8;
- if (sprite->animEnded)
- DestroySprite(sprite);
-}
-
-static void sub_805156C(void)
-{
- s32 limit = (Random() % 2) + 1;
- s32 i;
-
- for (i = 0; i < limit; i++)
- {
- u16 rand;
- s32 x, y;
- u8 spriteID;
-
- rand = gBerryBlenderData->arrowPos + (Random() % 20);
-
- x = gSineTable[(rand & 0xFF) + 64] / 4;
- y = gSineTable[(rand & 0xFF)] / 4;
-
- spriteID = CreateSprite(&sSpriteTemplate_82164FC, x + 120, y + 80, 1);
- gSprites[spriteID].data[0] = 16 - (Random() % 32);
- gSprites[spriteID].data[1] = 16 - (Random() % 32);
-
- gSprites[spriteID].callback = sub_8051524;
- }
-}
-
-static void sub_8051650(struct Sprite* sprite)
-{
- sprite->data[0]++;
- sprite->pos2.y = -(sprite->data[0] / 3);
- if (sprite->animEnded)
- DestroySprite(sprite);
-}
-
-void sub_8051684(struct Sprite* sprite)
-{
- sprite->data[0]++;
- sprite->pos2.y = -(sprite->data[0] * 2);
- if (sprite->pos2.y < -12)
- sprite->pos2.y = -12;
- if (sprite->animEnded)
- DestroySprite(sprite);
-}
-
-void Blender_SetBankBerryData(u8 bank, u16 itemID)
-{
- gBerryBlenderData->chosenItemID[bank] = itemID;
- Blender_CopyBerryData(&gBerryBlenderData->blendedBerries[bank], itemID);
-}
-
-void unref_sub_80516F8(u8 taskID)
-{
- struct Task* task = &gTasks[taskID];
- if (gReceivedRemoteLinkPlayers)
- {
- s32 i;
- if (GetMultiplayerId() == 0)
- {
- if (++task->data[0] > 120)
- task->data[0] = 0;
- if (task->data[0] == 100)
- {
- Text_EraseWindowRect(&gBerryBlenderData->field_4, 0, 0, 16, 20);
- Menu_DrawStdWindowFrame(4, 4, 10, 12);
- for (i = 0; i < 3; i++)
- {
- if (gLinkPlayers[i + 1].trainerId != 0)
- Menu_PrintText(gUnknown_08216284[i], 5, (2 * i) + 5);
- Menu_DrawStdWindowFrame(0, 13, 29, 19);
- Menu_PrintText(gOtherText_PressAToStart, 1, 15);
- }
- }
- if (gMain.newKeys & A_BUTTON)
- {
- sub_8007E4C();
- DestroyTask(taskID);
- }
- }
- else
- {
- if (task->data[0] == 10)
- Menu_PrintText(gOtherText_PleaseWait, 3, 10);
- if (++task->data[0] > 120)
- task->data[0] = 0;
- if (byte_3002A68 > 4 && gReceivedRemoteLinkPlayers == 1)
- DestroyTask(taskID);
- }
- }
-}
-
-static void sub_805181C(struct Sprite* sprite)
-{
- switch (sprite->data[0])
- {
- case 0:
- sprite->data[1] += 8;
- if (sprite->data[1] > 88)
- {
- sprite->data[1] = 88;
- sprite->data[0]++;
- PlaySE(SE_KON);
- }
- break;
- case 1:
- sprite->data[2] += 1;
- if (sprite->data[2] > 20)
- {
- sprite->data[0]++;
- sprite->data[2] = 0;
- }
- break;
- case 2:
- sprite->data[1] += 4;
- if (sprite->data[1] > 176)
- {
- if (++sprite->data[3] == 3)
- {
- DestroySprite(sprite);
- CreateSprite(&sSpriteTemplate_821657C, 120, -20, 2);
- }
- else
- {
- sprite->data[0] = 0;
- sprite->data[1] = -16;
- StartSpriteAnim(sprite, sprite->data[3]);
- }
- }
- break;
- }
- sprite->pos2.y = sprite->data[1];
-}
-
-static void sub_80518CC(struct Sprite* sprite)
-{
- switch (sprite->data[0])
- {
- case 0:
- sprite->data[1] += 8;
- if (sprite->data[1] > 92)
- {
- sprite->data[1] = 92;
- sprite->data[0]++;
- PlaySE(SE_PIN);
- }
- break;
- case 1:
- sprite->data[2] += 1;
- if (sprite->data[2] > 20)
- sprite->data[0]++;
- break;
- case 2:
- sprite->data[1] += 4;
- if (sprite->data[1] > 176)
- {
- gBerryBlenderData->field_0++;
- DestroySprite(sprite);
- }
- break;
- }
- sprite->pos2.y = sprite->data[1];
-}
-
-static void sub_805194C(u16 a0, u16 a1)
-{
- if (gBerryBlenderData->field_140 < a0)
- {
- gBerryBlenderData->field_140 += 2;
- sub_805197C(gBerryBlenderData->field_140, a1);
- }
-}
-
-static void sub_805197C(u16 a0, u16 a1)
-{
- s32 var1, var2, var3, var4;
- u16* vram;
-
- vram = (u16*)(VRAM + 0x6000);
- var1 = (a0 * 64) / a1;
- var2 = var1 / 8;
- for (var4 = 0; var4 < var2; var4++)
- {
- vram[11 + var4] = 0x81E9;
- vram[43 + var4] = 0x81F9;
- }
- var3 = var1 % 8;
- if (var3 != 0)
- {
- vram[11 + var4] = var3 - 32287;
- vram[43 + var4] = var3 - 32271;
- var4++;
- }
- for (; var4 < 8; var4++)
- {
- vram[11 + var4] = 33249;
- vram[43 + var4] = 33249 + 16;
- }
-}
-
-static u32 sub_8051A1C(u16 a0)
-{
- return 360000 * a0 / 0x10000;
-}
-
-static void sub_8051A3C(u16 a0)
-{
- u8 i;
- u8 palAdders[5];
-
- u32 var = sub_8051A1C(a0);
- if (gBerryBlenderData->max_RPM < var)
- gBerryBlenderData->max_RPM = var;
- for (i = 0; i < 5; i++)
- {
- palAdders[i] = var % 10;
- var /= 10;
- }
- *((u16*)(VRAM + 0x6458)) = palAdders[4] + 0x8172;
- *((u16*)(VRAM + 0x645A)) = palAdders[3] + 0x8172;
- *((u16*)(VRAM + 0x645C)) = palAdders[2] + 0x8172;
- *((u16*)(VRAM + 0x6460)) = palAdders[1] + 0x8172;
- *((u16*)(VRAM + 0x6462)) = palAdders[0] + 0x8172;
-}
-
-static void sub_8051AC8(s16* a0, u16 a1)
-{
- if (*a0 == 0)
- *a0 = (Random() % a1) - (a1 / 2);
-}
-
-static void sub_8051AF4(s16* a0)
-{
- if (*a0 < 0 )
- (*a0)++;
- if (*a0 > 0 )
- (*a0)--;
-}
-
-static void sub_8051B18(void)
-{
- sub_8051AF4(&gBerryBlenderData->field_144);
- sub_8051AF4(&gBerryBlenderData->field_146);
-}
-
-static void sub_8051B40(s16* a0, u16 a1)
-{
- s32 var;
- if (a1 < 10)
- var = 16;
- else
- var = 8;
- if (*a0 == 0)
- *a0 = (Random() % var) - (var / 2);
- else
- {
- if (*a0 < 0)
- (*a0)++;
- if (*a0 > 0)
- (*a0)--;
- }
-}
-
-static bool8 sub_8051B8C(void)
-{
- if (gBerryBlenderData->framesToWait == 0)
- {
- gBerryBlenderData->field_144 = 0;
- gBerryBlenderData->field_146 = 0;
- }
- gBerryBlenderData->framesToWait++;
- sub_8051B40(&gBerryBlenderData->field_144, gBerryBlenderData->framesToWait);
- sub_8051B40(&gBerryBlenderData->field_146, gBerryBlenderData->framesToWait);
- if (gBerryBlenderData->framesToWait == 20)
- {
- gBerryBlenderData->field_144 = 0;
- gBerryBlenderData->field_146 = 0;
- return TRUE;
- }
- else
- return FALSE;
-}
-
-static void sub_8051C04(struct Sprite* sprite)
-{
- sprite->pos2.x = -(gBerryBlenderData->field_144);
- sprite->pos2.y = -(gBerryBlenderData->field_146);
-}
-
-/*static*/ void Blender_TrySettingRecord(void)
-{
- if (gSaveBlock1.berryBlenderRecords[gBerryBlenderData->playersNo - 2] < gBerryBlenderData->max_RPM)
- gSaveBlock1.berryBlenderRecords[gBerryBlenderData->playersNo - 2] = gBerryBlenderData->max_RPM;
-}
-
-bool8 Blender_PrintBlendingResults(void)
-{
- u16 i;
-
- struct Pokeblock pokeblock;
- u8 flavours[6];
- u8 text[2][10];
- u16 berryIDs[4]; // unused
-
- switch (gBerryBlenderData->field_0)
- {
- case 0:
- gBerryBlenderData->field_0++;
- gBerryBlenderData->framesToWait = 17;
- break;
- case 1:
- gBerryBlenderData->framesToWait -= 10;
- if (gBerryBlenderData->framesToWait < 0)
- {
- gBerryBlenderData->framesToWait = 0;
- gBerryBlenderData->field_0++;
- }
- break;
- case 2:
- if (++gBerryBlenderData->framesToWait > 20)
- {
- for (i = 0; i < 3; i++)
- DestroySprite(&gSprites[gBerryBlenderData->scoreIconIDs[i]]);
- gBerryBlenderData->framesToWait = 0;
- gBerryBlenderData->field_0++;
- }
- break;
- case 3:
- {
- u8* textPtr;
- u16 secondsPassed, minutes, seconds;
-
- Menu_DrawStdWindowFrame(4, 2, 25, 17);
- sub_8072BD8(gOtherText_ResultsOfBlending, 5, 3, 160);
- for (i = 0; i < gBerryBlenderData->playersNo; i++)
- {
- u8 place = gBerryBlenderData->playerPlaces[i];
- textPtr = text[0];
-
- StringCopy(textPtr, gBerryBlenderData->blendedBerries[place].name);
- ConvertInternationalString(textPtr, gLinkPlayers[place].language);
-#ifdef ENGLISH
- StringAppend(textPtr, gOtherText_Berry);
-#else
- de_sub_8073174(textPtr, gOtherText_Berry);
-#endif
- textPtr = gBerryBlenderData->stringVar;
- textPtr = ConvertIntToDecimalString(textPtr, i + 1);
- textPtr[0] = CHAR_SPACE;
- textPtr[1] = CHAR_PERIOD;
- textPtr[2] = CHAR_SPACE;
- textPtr += 3;
- textPtr = sub_8072C74(textPtr, gLinkPlayers[place].name, 88, 0);
- sub_8072C74(textPtr, text[0], 157, 0);
- Menu_PrintText(gBerryBlenderData->stringVar, 5, gUnknown_082165E9[gBerryBlenderData->playersNo] + (i * gUnknown_082165EE[gBerryBlenderData->playersNo]));
- }
- ConvertIntToDecimalStringN(text[0], gBerryBlenderData->max_RPM % 100, 2, 2);
- textPtr = gBerryBlenderData->stringVar;
- textPtr = StringCopy(textPtr, gOtherText_MaxSpeed);
- textPtr = sub_8072C14(textPtr, gBerryBlenderData->max_RPM / 100, 121, 1);
-
-#ifdef ENGLISH
- textPtr[0] = CHAR_SPACE;
- textPtr[1] = CHAR_PERIOD;
- textPtr[2] = CHAR_SPACE;
- textPtr += 3;
- textPtr = sub_8072C74(textPtr, text[0], 142, 1);
-#else
- *textPtr++ = CHAR_COMMA;
- textPtr = sub_8072C74(textPtr, text[0], 136, 1);
-#endif
- StringCopy(textPtr, gOtherText_RPM);
- Menu_PrintText(gBerryBlenderData->stringVar, 5, 13);
-
- secondsPassed = gBerryBlenderData->gameFrameTime / 60;
- seconds = secondsPassed % 60;
- minutes = secondsPassed / 60;
- ConvertIntToDecimalStringN(text[0], minutes, 2, 2);
- ConvertIntToDecimalStringN(text[1], seconds, 2, 2);
- textPtr = gBerryBlenderData->stringVar;
- textPtr = StringCopy(textPtr, gOtherText_RequiredTime);
-
-#ifdef ENGLISH
- textPtr = sub_8072C74(textPtr, text[0], 102, 1);
-#else
- textPtr = sub_8072C74(textPtr, text[0], 99, 1);
-#endif
- textPtr = StringAppend(textPtr, gOtherText_Min);
-
- textPtr = sub_8072C74(textPtr, text[1], 136, 1);
- StringCopy(textPtr, gOtherText_Sec);
-
- Menu_PrintText(gBerryBlenderData->stringVar, 5, 15);
-
- gBerryBlenderData->framesToWait = 0;
- gBerryBlenderData->field_0++;
- }
- break;
- case 4:
- if (gMain.newKeys & A_BUTTON)
- gBerryBlenderData->field_0++;
- break;
- case 5:
- Menu_EraseScreen();
- Menu_DrawStdWindowFrame(0, 14, 29, 19);
- for (i = 0; i < BLENDER_MAX_PLAYERS; i++)
- {
- if (gBerryBlenderData->chosenItemID[i] != 0)
- berryIDs[i] = gBerryBlenderData->chosenItemID[i] - 133;
- }
- sub_8050760();
- Blender_CalculatePokeblock(gBerryBlenderData->blendedBerries, &pokeblock, gBerryBlenderData->playersNo, flavours, gBerryBlenderData->max_RPM);
- Blender_PrintMadePokeblockString(&pokeblock, gBerryBlenderData->stringVar);
- CreateTask(sub_8052BD0, 6);
-#if DEBUG
- ConvertIntToHexStringN(text[0], sub_8007E40(), 0, 4);
- StringAppend(text[0], gUnknown_08216249);
- StringAppend(gBerryBlenderData->stringVar, text[0]);
-#endif
- MenuPrintMessage(gBerryBlenderData->stringVar, 1, 15);
- RemoveBagItem(gSpecialVar_ItemId, 1);
- sub_810CA34(&pokeblock);
- gBerryBlenderData->field_0++;
- break;
- case 6:
- if (Menu_UpdateWindowText())
- {
- Blender_TrySettingRecord();
- return TRUE;
- }
- break;
- }
- return FALSE;
-}
-
-static void Blender_PrintMadePokeblockString(struct Pokeblock* pokeblock, u8* dst)
-{
- u8 text[12];
- u8 flavourLvl, feel;
-
- dst[0] = EOS;
- StringCopy(dst, gPokeblockNames[pokeblock->color]);
-#ifdef ENGLISH
- StringAppend(dst, gOtherText_PokeBlockMade);
-#else
- de_sub_8073174(dst, gOtherText_PokeBlockMade);
-#endif
- StringAppend(dst, sNewLineString_0);
-
- flavourLvl = sub_810C9B0(pokeblock);
- feel = sub_810C9E8(pokeblock);
-
- StringAppend(dst, gOtherText_BlockLevelIs);
- ConvertIntToDecimalStringN(text, flavourLvl, 0, 3);
- StringAppend(dst, text);
-
- StringAppend(dst, gOtherText_BlockFeelIs);
- ConvertIntToDecimalStringN(text, feel, 0, 3);
- StringAppend(dst, text);
-
- StringAppend(dst, gOtherText_Period);
- StringAppend(dst, gUnknown_08216249);
-}
-
-static void Blender_SortBasedOnPoints(u8* places, u8 playersNum, u32* scores)
-{
- s32 i, j;
- for (i = 0; i < playersNum; i++)
- {
- for (j = 0; j < playersNum; j++)
- {
- if (scores[places[i]] > scores[places[j]])
- {
- u8 temp = places[i];
- places[i] = places[j];
- places[j] = temp;
- }
- }
- }
-}
-
-static void Blender_SortScores(void)
-{
- u8 i;
- u8 places[4];
- u32 points[4];
-
- for (i = 0; i < gBerryBlenderData->playersNo; i++)
- places[i] = i;
- for (i = 0; i < gBerryBlenderData->playersNo; i++)
- {
- points[i] = 1000000 * gBerryBlenderData->scores[i][BLENDER_SCORE_BEST];
- points[i] += 1000 * gBerryBlenderData->scores[i][BLENDER_SCORE_GOOD];
- points[i] += 1000 - gBerryBlenderData->scores[i][BLENDER_SCORE_MISS];
- }
- Blender_SortBasedOnPoints(places, gBerryBlenderData->playersNo, points);
- for (i = 0; i < gBerryBlenderData->playersNo; i++)
- gBerryBlenderData->playerPlaces[i] = places[i];
-}
-
-static bool8 Blender_PrintBlendingRanking(void)
-{
- u16 i;
- switch (gBerryBlenderData->field_0)
- {
- case 0:
- gBerryBlenderData->field_0++;
- gBerryBlenderData->framesToWait = 255;
- break;
- case 1:
- gBerryBlenderData->framesToWait -= 10;
- if (gBerryBlenderData->framesToWait < 0)
- {
- gBerryBlenderData->framesToWait = 0;
- gBerryBlenderData->field_0++;
- }
- break;
- case 2:
- if (++gBerryBlenderData->framesToWait > 20)
- {
- gBerryBlenderData->framesToWait = 0;
- gBerryBlenderData->field_0++;
- }
- break;
- case 3:
- Menu_DrawStdWindowFrame(4, 2, 25, 17);
- sub_8072BD8(gOtherText_Ranking, 5, 3, 160);
-
- gBerryBlenderData->scoreIconIDs[BLENDER_SCORE_BEST] = CreateSprite(&sSpriteTemplate_821645C, 140, 52, 0);
- gSprites[gBerryBlenderData->scoreIconIDs[BLENDER_SCORE_BEST]].callback = SpriteCallbackDummy;
- StartSpriteAnim(&gSprites[gBerryBlenderData->scoreIconIDs[BLENDER_SCORE_BEST]], 3);
-
- gBerryBlenderData->scoreIconIDs[BLENDER_SCORE_GOOD] = CreateSprite(&sSpriteTemplate_821645C, 164, 52, 0);
- gSprites[gBerryBlenderData->scoreIconIDs[BLENDER_SCORE_GOOD]].callback = SpriteCallbackDummy;
-
- gBerryBlenderData->scoreIconIDs[BLENDER_SCORE_MISS] = CreateSprite(&sSpriteTemplate_821645C, 188, 52, 0);
- gSprites[gBerryBlenderData->scoreIconIDs[BLENDER_SCORE_MISS]].callback = SpriteCallbackDummy;
- StartSpriteAnim(&gSprites[gBerryBlenderData->scoreIconIDs[BLENDER_SCORE_MISS]], 1);
-
- Blender_SortScores();
-
- for (i = 0; i < gBerryBlenderData->playersNo; i++)
- {
- u8 place = gBerryBlenderData->playerPlaces[i];
- u8* txtPtr = gBerryBlenderData->stringVar;
-
- txtPtr[0] = EXT_CTRL_CODE_BEGIN;
- txtPtr[1] = 0x13;
- txtPtr[2] = 4;
- txtPtr += 3;
-
- txtPtr = ConvertIntToDecimalString(txtPtr, i + 1);
-
- txtPtr[0] = CHAR_SPACE;
- txtPtr[1] = CHAR_PERIOD;
- txtPtr[2] = CHAR_SPACE;
- txtPtr += 3;
-
- txtPtr = StringCopy(txtPtr, gLinkPlayers[place].name);
-
- txtPtr = sub_8072C14(txtPtr, gBerryBlenderData->scores[place][BLENDER_SCORE_BEST], 108, 1);
- txtPtr = sub_8072C14(txtPtr, gBerryBlenderData->scores[place][BLENDER_SCORE_GOOD], 132, 1);
- txtPtr = sub_8072C14(txtPtr, gBerryBlenderData->scores[place][BLENDER_SCORE_MISS], 156, 1);
-
- Menu_PrintText(gBerryBlenderData->stringVar, 5, i * gUnknown_082165F3[gBerryBlenderData->playersNo] + 8);
- }
- gBerryBlenderData->framesToWait = 0;
- gBerryBlenderData->field_0++;
- break;
- case 4:
- if (++gBerryBlenderData->framesToWait > 20)
- gBerryBlenderData->field_0++;
- break;
- case 5:
- if (gMain.newKeys & A_BUTTON)
- {
- PlaySE(SE_SELECT);
- gBerryBlenderData->field_0++;
- }
- break;
- case 6:
- gBerryBlenderData->field_0 = 0;
- return TRUE;
- }
- return FALSE;
-}
-
-// debug menu goes here
-
-void unref_sub_80524BC(void)
-{
- ResetSpriteData();
- FreeAllSpritePalettes();
- ResetTasks();
- SetVBlankCallback(VBlankCB1_BerryBlender);
- Text_LoadWindowTemplate(&gWindowTemplate_81E6CE4);
- InitMenuWindow(&gWindowTemplate_81E6CE4);
- SeedRng(gMain.vblankCounter1);
- REG_DISPCNT = 0x1540;
- RunTasks();
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
- sBlenderDebug.BPM = 8000;
- sBlenderDebug.field_10++;
- SetMainCallback2(sub_8052AF8);
-}
-
-static void BlenderDebug_PrintBerryData(void)
-{
- u8 text[128];
- u8 i;
-
- StringCopy(text, sText_BPM);
- Menu_PrintText(text, 2, 0);
-
- ConvertIntToDecimalStringN(text, sBlenderDebug.BPM / 100, 2, 3);
- Menu_PrintText(text, 6, 0);
-
- for (i = 0; i < 4; i++)
- {
- u8 var;
-
- if (sBlenderDebug.cursorPos == i)
- {
- text[0] = 0xEF;
- CopyItemName(sBlenderDebug.berries[i] + 133, &text[1]);
- }
- else
- {
- CopyItemName(sBlenderDebug.berries[i] + 133, &text[0]);
- text[6] = CHAR_SPACE;
- text[7] = EOS;
- }
- var = (i * 3) + 3;
- Menu_PrintText(text, 2, var);
-
- ConvertIntToDecimalStringN(&text[0], gBerries[sBlenderDebug.berries[i]].spicy, 2, 2);
- StringAppend(text, sText_Space);
-
- ConvertIntToDecimalStringN(&text[3], gBerries[sBlenderDebug.berries[i]].dry, 2, 2);
- StringAppend(text, sText_Space);
-
- ConvertIntToDecimalStringN(&text[6], gBerries[sBlenderDebug.berries[i]].sweet, 2, 2);
- StringAppend(text, sText_Space);
-
- ConvertIntToDecimalStringN(&text[9], gBerries[sBlenderDebug.berries[i]].bitter, 2, 2);
- StringAppend(text, sText_Space);
-
- ConvertIntToDecimalStringN(&text[12], gBerries[sBlenderDebug.berries[i]].sour, 2, 2);
- StringAppend(text, sText_Space);
-
- ConvertIntToDecimalStringN(&text[15], gBerries[sBlenderDebug.berries[i]].smoothness, 2, 2);
-
- text[17] = EOS;
- Menu_PrintText(text, 7, var);
- }
- if (sBlenderDebug.pokeblock.color != 0)
- {
- StringCopy(text, gPokeblockNames[sBlenderDebug.pokeblock.color]);
- Menu_PrintText(text, 2, 15);
-
- ConvertIntToHexStringN(&text[0], sBlenderDebug.spicy, 2, 2);
- StringAppend(text, sText_Space);
-
- ConvertIntToHexStringN(&text[3], sBlenderDebug.dry, 2, 2);
- StringAppend(text, sText_Space);
-
- ConvertIntToHexStringN(&text[6], sBlenderDebug.sweet, 2, 2);
- StringAppend(text, sText_Space);
-
- ConvertIntToHexStringN(&text[9], sBlenderDebug.bitter, 2, 2);
- StringAppend(text, sText_Space);
-
- ConvertIntToHexStringN(&text[12], sBlenderDebug.sour, 2, 2);
- StringAppend(text, sText_Space);
-
- ConvertIntToHexStringN(&text[15], sBlenderDebug.feel, 2, 2);
-
- text[17] = EOS;
- Menu_PrintText(text, 7, 17);
- }
-}
-
-static void sub_80527BC(void)
-{
- u8 text[70];
- u8 buffer[10];
- u16 i;
-
- if (gUnknown_020297DC == 1)
- {
- u16 j;
- for (j = 0; j < 10; j++)
- gUnknown_03004840[j] = 0;
- gUnknown_03004830 = Random();
- gUnknown_020297E0 = 0;
- gUnknown_020297DC = 2;
- for (i = 0; i < 200; i++)
- gSharedMem[i] = 0;
- gUnknown_020297E8 = 0;
- }
- for (i = 0; i < 100; i++)
- {
- if (((Random() >> 15) & 1) == gUnknown_020297E8)
- gUnknown_020297E0++;
- else
- {
- u16* ewramPtr = ((u16*)(gSharedMem));
- ewramPtr[gUnknown_020297E4] = gUnknown_020297E0;
- gUnknown_020297E4++;
- gUnknown_020297E0 = 0;
- gUnknown_020297E8 ^= 1;
- }
- }
- text[0] = EOS;
-
- ConvertIntToHexStringN(buffer, gUnknown_03004830, 2, 8);
- StringAppend(text, buffer);
- StringAppend(text, sText_Space);
-
- ConvertIntToHexStringN(buffer, gUnknown_020297E0, 2, 8);
- StringAppend(text, buffer);
- StringAppend(text, sNewLineString_1);
-
- if (gUnknown_020297DC == 3)
- {
- ConvertIntToHexStringN(buffer, gUnknown_020297E4, 2, 16);
- StringAppend(text, buffer);
- gUnknown_020297DC = 0;
- }
-
- Menu_PrintText(text, 2, 15);
-}
-
-static void sub_8052918(void)
-{
- if (gMain.newKeys & R_BUTTON)
- {
- sBlenderDebug.BPM += 1000;
- if (sBlenderDebug.BPM > 30000)
- sBlenderDebug.BPM = 1000;
- sBlenderDebug.field_10++;
- }
- if (gMain.newKeys & L_BUTTON)
- {
- sBlenderDebug.BPM -= 1000;
- if (sBlenderDebug.BPM < 0)
- sBlenderDebug.BPM = 30000;
- sBlenderDebug.field_10++;
- }
- if (gMain.newKeys & DPAD_UP)
- {
- sBlenderDebug.cursorPos -= 1;
- if (sBlenderDebug.cursorPos < 0)
- sBlenderDebug.cursorPos = 3;
- sBlenderDebug.field_10++;
- }
- if (gMain.newKeys & DPAD_DOWN)
- {
- sBlenderDebug.cursorPos += 1;
- if (sBlenderDebug.cursorPos > 3)
- sBlenderDebug.cursorPos = 0;
- sBlenderDebug.field_10++;
- }
- if (gMain.newKeys & DPAD_LEFT)
- {
- if (--sBlenderDebug.berries[sBlenderDebug.cursorPos] < 0)
- sBlenderDebug.berries[sBlenderDebug.cursorPos] = 42;
- sBlenderDebug.field_10++;
- }
- if (gMain.newKeys & DPAD_RIGHT)
- {
- if (++sBlenderDebug.berries[sBlenderDebug.cursorPos] > 42)
- sBlenderDebug.berries[sBlenderDebug.cursorPos] = 0;
- sBlenderDebug.field_10++;
- }
- if (gMain.newKeys & A_BUTTON)
- {
- u16 berryIDs[4];
- struct BlenderBerry berries[4];
-
- u16 i, notEnigma = 0;
- for (i = 0; i < 4; i++)
- {
- if (sBlenderDebug.berries[i] != 42)
- {
- notEnigma++;
- berryIDs[i] = sBlenderDebug.berries[i];
- Blender_CopyBerryData(&berries[i], sBlenderDebug.berries[i] + 133);
- }
- else
- break;
- }
- if (notEnigma > 1)
- {
- BlenderDebug_CalculatePokeblock(berries, &sBlenderDebug.pokeblock, notEnigma, &sBlenderDebug.spicy, sBlenderDebug.BPM);
- sBlenderDebug.field_10++;
- }
- else
- sBlenderDebug.pokeblock.color = 0xFF;
- }
- if (sBlenderDebug.field_10)
- {
- BlenderDebug_PrintBerryData();
- sBlenderDebug.field_10 = 0;
- }
- if (gMain.newKeys & SELECT_BUTTON && gUnknown_020297DC == 0)
- {
- gUnknown_020297DC++;
- gUnknown_020297E0 = 0;
- SeedRng(gMain.vblankCounter1);
- }
- if (gUnknown_020297DC != 0)
- sub_80527BC();
-}
-
-static void sub_8052AF8(void)
-{
- sub_8052918();
- RunTasks();
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
-}
-
-// debug menu ends
-// blender record window begins
-
-void ShowBerryBlenderRecordWindow(void)
-{
- u8 text[30];
- s32 i;
-
- Menu_DrawStdWindowFrame(6, 3, 23, 16);
- Menu_PrintText(gMultiText_BerryBlenderMaxSpeedRecord, 8, 4);
- Menu_PrintText(gMultiText_2P3P4P, 8, 9);
-
- for (i = 0; i < 3; i++)
- {
- u32 record = gSaveBlock1.berryBlenderRecords[i];
- u8* txtPtr = sub_8072C14(text, record / 100, 18, 1);
-
-#ifdef ENGLISH
- txtPtr[0] = CHAR_SPACE;
- txtPtr[1] = CHAR_PERIOD;
- txtPtr[2] = CHAR_SPACE;
- txtPtr += 3;
-#else
- *txtPtr++ = CHAR_COMMA;
-#endif
-
- txtPtr = ConvertIntToDecimalStringN(txtPtr, record % 100, 2, 2);
- StringAppend(txtPtr, gOtherText_RPM);
- Menu_PrintText(text, 15, i * 2 + 9);
- }
-}
-
-static void sub_8052BD0(u8 taskID)
-{
- if (gTasks[taskID].data[0] == 0)
- {
- PlayFanfare(BGM_FANFA1);
- gTasks[taskID].data[0]++;
- }
- if (IsFanfareTaskInactive())
- {
- PlayBGM(gBerryBlenderData->field_178);
- DestroyTask(taskID);
- }
-}
diff --git a/src/scene/cable_car.c b/src/scene/cable_car.c
deleted file mode 100644
index 8c3f9885d..000000000
--- a/src/scene/cable_car.c
+++ /dev/null
@@ -1,1077 +0,0 @@
-
-// Includes
-#include "global.h"
-#include "ewram.h"
-#include "overworld.h"
-#include "palette.h"
-#include "random.h"
-#include "main.h"
-#include "menu.h"
-#include "script.h"
-#include "task.h"
-#include "sound.h"
-#include "graphics.h"
-#include "constants/songs.h"
-#include "decompress.h"
-#include "field_weather.h"
-#include "event_object_movement.h"
-#include "scanline_effect.h"
-#include "event_data.h"
-#include "cable_car_util.h"
-#include "constants/map_objects.h"
-#include "constants/weather.h"
-
-extern u8 (*gMenuCallback)(void);
-
-// Static type declarations
-
-struct CableCarEwramStruct1
-{
- u8 unk_0000;
- u8 unk_0001;
- u8 unk_0002;
- u8 unk_0003;
- u16 unk_0004;
- u16 unk_0006;
- u8 unk_0008;
- u8 unk_0009;
- u8 filler_000a[2];
- u8 unk_000c;
- u8 unk_000d;
- u8 filler_0000e[6];
- u8 unk_0014;
- u8 unk_0015;
- u8 unk_0016;
- u8 unk_0017;
- u8 unk_0018;
- u8 unk_0019;
- u8 unk_001a;
- u8 unk_001b;
- u8 unk_001c;
- u8 unk_001d;
- u8 unk_001e;
- u8 unk_001f;
- u8 unk_0020;
- u16 unk_0022[9][12];
- u8 filler_00fa[2];
- u16 unk_00fc[0x20][0x20];
- u16 unk_08fc[0x20][0x20];
-}; // size 0x10FC
-
-struct CableCarEwramStruct2
-{
- /* 0x000 */ u16 mtChimneyTilemap[0xb4];
- /* 0x168 */ u16 treeTilemap[0x1e0];
- /* 0x528 */ u16 mountainTilemap[0x258];
- /* 0x9d8 */ u16 pylonStemTilemap[0x628]; // size not actually known
-};
-
-// Static RAM declarations
-
-EWRAM_DATA struct CableCarEwramStruct1 *sCableCarPtr = NULL;
-EWRAM_DATA u8 gUnknown_02039278 = 0;
-EWRAM_DATA u8 gUnknown_02039279 = 0;
-EWRAM_DATA u8 gUnknown_0203927A = 0;
-EWRAM_DATA u8 gUnknown_0203927B = 0;
-EWRAM_DATA u8 gUnknown_0203927C = 0;
-EWRAM_DATA u8 gUnknown_0203927D = 0;
-EWRAM_DATA u32 filler_02039280 = 0;
-
-// Static ROM declarations
-
-static void CableCarMainCallback_Setup(void);
-static void CableCarMainCallback_Run(void);
-static void sub_8123878(u8 taskId);
-static void sub_81239E4(u8 taskId);
-static void sub_8123AF8(u8 taskId);
-static void CableCarVblankCallback(void);
-static void nullsub_76(struct Sprite *sprite);
-static void sub_8123CB8(struct Sprite *sprite);
-static void sub_8123EB8(struct Sprite *sprite);
-static void sub_8123F44(struct Sprite *sprite);
-static void sub_8123FBC(u8);
-static void LoadSprites(void);
-static void sub_812453C(void);
-static void sub_8124598(void);
-static void sub_81245F4(void);
-static void sub_812476C(void);
-static void sub_81248AC(u8);
-
-// .rodata
-
-#if DEBUG
-
-void debug_sub_8138D74(void);
-void debug_sub_8138D8C(void);
-u8 debug_sub_8138C14(void);
-u8 debug_sub_8138C34(void);
-u8 debug_sub_810CD9C(void);
-
-const u8 Str_842DBD0[] = _("CABLE CAR U");
-const u8 Str_842DBDC[] = _("CABLE CAR D");
-const u8 Str_842DBE8[] = _("ROULETTE1");
-const u8 Str_842DBF2[] = _("ROULETTE3");
-const u8 Str_842DBFC[] = _("View a MAIL");
-
-const struct MenuAction gUnkDebug4Menu[] =
-{
- {Str_842DBD0, (u8 (*)(void))debug_sub_8138D74}, // why do these two functions have a different prototype?
- {Str_842DBDC, (u8 (*)(void))debug_sub_8138D8C},
- {Str_842DBE8, debug_sub_8138C14},
- {Str_842DBF2, debug_sub_8138C34},
- {Str_842DBFC, debug_sub_810CD9C},
-};
-
-#endif
-
-static const u8 gCableCarMtChimneyTilemap[] = INCBIN_U8("graphics/misc/cable_car_mt_chimney_map.bin.lz");
-
-static const u8 gCableCarTreeTilemap[] = INCBIN_U8("graphics/misc/cable_car_tree_map.bin.lz");
-
-static const u8 gCableCarMountainTilemap[] = INCBIN_U8("graphics/misc/cable_car_mountain_map.bin.lz");
-
-static const u16 gCableCarPylonHookTilemapEntries[] = {
- 0x3000,
- 0x3001,
- 0x3002,
- 0x3003,
- 0x3004,
- 0x3005,
- 0x3006,
- 0x3007,
- 0x3008,
- 0x3009
-};
-
-static const u8 gCableCarPylonStemTilemap[] = INCBIN_U8("graphics/misc/cable_car_pylon_stem_map.bin.lz");
-
-static const struct CompressedSpriteSheet gUnknown_08401CF8[] = {
- { gCableCar_Gfx, 0x800, 1 },
- { gCableCarDoor_Gfx, 0x40, 2 },
- { gCableCarCord_Gfx, 0x80, 3 },
- { }
-};
-static const struct SpritePalette gUnknown_08401D18[] = {
- { gCableCar_Pal, 1 },
- { }
-};
-
-static const struct OamData gOamData_8401D28 = {
- .affineMode = ST_OAM_AFFINE_DOUBLE,
- .size = 3,
- .priority = 2
-};
-
-static const struct OamData gOamData_8401D30 = {
- .affineMode = ST_OAM_AFFINE_DOUBLE,
- .shape = ST_OAM_H_RECTANGLE,
- .priority = 2
-};
-
-static const struct OamData gOamData_8401D38 = {
- .affineMode = ST_OAM_AFFINE_DOUBLE,
- .size = 1,
- .priority = 2
-};
-
-static const struct SpriteTemplate gSpriteTemplate_8401D40[] =
-{
- {
- .tileTag = 1,
- .paletteTag = 1,
- .oam = &gOamData_8401D28,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8123CB8,
- },
- {
- .tileTag = 2,
- .paletteTag = 1,
- .oam = &gOamData_8401D30,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_8123CB8,
- },
- {
- .tileTag = 3,
- .paletteTag = 1,
- .oam = &gOamData_8401D38,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = nullsub_76,
- }
-};
-
-#if DEBUG
-
-extern u8 unk_203955C;
-
-extern const u8 MauvilleCity_GameCorner_EventScript_1C407E[];
-extern const u8 MauvilleCity_GameCorner_EventScript_1C40AC[];
-
-u8 debug_sub_8138C14(void)
-{
- unk_203955C = 1;
- ScriptContext1_SetupScript(MauvilleCity_GameCorner_EventScript_1C407E);
- CloseMenu();
- return 1;
-}
-
-u8 debug_sub_8138C34(void)
-{
- unk_203955C = 1;
- ScriptContext1_SetupScript(MauvilleCity_GameCorner_EventScript_1C40AC);
- CloseMenu();
- return 1;
-}
-
-u8 debug_sub_8138C54(void)
-{
- if (gMain.newKeys == DPAD_UP)
- Menu_MoveCursor(-1);
- if (gMain.newKeys == DPAD_DOWN)
- Menu_MoveCursor(1);
- if (gMain.newKeys == A_BUTTON)
- return gUnkDebug4Menu[Menu_GetCursorPos()].func();
- if (gMain.newKeys == (R_BUTTON | A_BUTTON))
- {
- gSpecialVar_0x8004 = 1;
- return gUnkDebug4Menu[Menu_GetCursorPos()].func();
- }
- if (gMain.newKeys == B_BUTTON)
- {
- CloseMenu();
- return 1;
- }
- return 0;
-}
-
-u8 debug_sub_8138CC4(void)
-{
- gSpecialVar_0x8004 = 0;
- Menu_EraseScreen();
- Menu_DrawStdWindowFrame(19, 0, 29, 12);
- Menu_PrintItems(20, 1, 5, gUnkDebug4Menu);
- InitMenu(0, 20, 1, 5, 0, 8);
- gMenuCallback = debug_sub_8138C54;
- return 0;
-}
-
-#endif
-
-static void CableCarTask1(u8 taskId)
-{
- if (!gPaletteFade.active)
- {
- SetMainCallback2(CableCarMainCallback_Setup);
- DestroyTask(taskId);
- }
-}
-
-void CableCar(void)
-{
- ScriptContext2_Enable();
- CreateTask(CableCarTask1, 1);
- BeginNormalPaletteFade(-1, 0, 0, 16, 0);
-}
-
-#if DEBUG
-
-void debug_sub_8138D74(void)
-{
- gSpecialVar_0x8004 = 0;
- CloseMenu();
- CableCar();
-}
-
-void debug_sub_8138D8C(void)
-{
- gSpecialVar_0x8004 = 1;
- CloseMenu();
- CableCar();
-}
-
-#endif
-
-static void CableCarMainCallback_Setup(void)
-{
- u8 i;
- u16 imebak;
-
- switch (gMain.state)
- {
- case 0:
- default:
- SetVBlankCallback(NULL);
- ScanlineEffect_Stop();
- DmaFill16Large(3, 0, VRAM, VRAM_SIZE, 0x1000);
- DmaFill32Defvars(3, 0, OAM, OAM_SIZE);
- DmaFill16Defvars(3, 0, PLTT, PLTT_SIZE);
- sCableCarPtr = eCableCar1;
- DmaFill16Large(3, 0, eCableCar1, 0x10FC, 0x1000);
- gMain.state++;
- break;
- case 1:
- ResetSpriteData();
- ResetTasks();
- FreeAllSpritePalettes();
- ResetPaletteFade();
- StartWeather();
- for (i = 0; i < 20; i++)
- {
- gWeatherPtr->sprites.s2.ashSprites[i] = NULL;
- }
- InitMapMusic();
- ResetMapMusic();
- gSpriteCoordOffsetX = gSpriteCoordOffsetY = 0;
- gMain.state++;
- break;
- case 2:
- for (i = 0; i < 3; i++)
- {
- LoadCompressedObjectPic(&gUnknown_08401CF8[i]);
- }
- LoadSpritePalettes(gUnknown_08401D18);
- LZDecompressWram(gCableCarMtChimneyTilemap, eCableCar2->mtChimneyTilemap);
- LZDecompressWram(gCableCarTreeTilemap, eCableCar2->treeTilemap);
- LZDecompressWram(gCableCarMountainTilemap, eCableCar2->mountainTilemap);
- LZDecompressWram(gCableCarPylonStemTilemap, eCableCar2->pylonStemTilemap);
- LoadPalette(gCableCarBG_Pal, 0, 0x80);
- LZ77UnCompVram(gCableCarBG_Gfx, (u16 *)BG_VRAM);
- gMain.state++;
- break;
- case 3:
- LoadSprites();
- RunTasks();
- gMain.state++;
- break;
- case 4:
- if (sCableCarPtr->unk_0002 == 7)
- {
- gMain.state++;
- }
- else if (gWeatherPtr->sprites.s2.ashSprites[0] != NULL)
- {
- for (i = 0; i < 20; i++)
- {
- if (gWeatherPtr->sprites.s2.ashSprites[i] != NULL)
- {
- gWeatherPtr->sprites.s2.ashSprites[i]->oam.priority = 0;
- }
- }
- gMain.state++;
- }
- break;
- case 5:
- CableCarUtil_CopyWrapped((void *)BG_SCREEN_ADDR(29), eCableCar2->treeTilemap, 0, 17, 32, 15);
- CableCarUtil_CopyWrapped((void *)BG_SCREEN_ADDR(30), eCableCar2->mountainTilemap, 0, 0, 30, 20);
- CableCarUtil_CopyWrapped(sCableCarPtr->unk_08fc, gCableCarPylonHookTilemapEntries, 0, 0, 5, 2);
- CableCarUtil_CopyWrapped(sCableCarPtr->unk_08fc, eCableCar2->pylonStemTilemap, 0, 2, 2, 20);
- gMain.state++;
- break;
- case 6:
- sub_81248AC(gSpecialVar_0x8004);
- CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x48, 0, 14, 12, 3);
- CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x6C, 12, 17, 12, 3);
- CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x90, 24, 20, 12, 3);
- CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x00, 0, 17, 12, 3);
- CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x24, 0, 20, 12, 3);
- CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x00, 12, 20, 12, 3);
- CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x24, 12, 23, 12, 3);
- CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x00, 24, 23, 12, 3);
- gMain.state++;
- break;
- case 7:
- BeginNormalPaletteFade(-1, 3, 16, 0, 0);
- FadeInNewBGM(BGM_ROPEWAY, 1);
- sub_8123FBC(1);
- gMain.state++;
- break;
- case 8:
- imebak = REG_IME;
- REG_IME = 0;
- REG_IE |= INTR_FLAG_VBLANK;
- REG_IME = imebak;
- SetVBlankCallback(CableCarVblankCallback);
- SetMainCallback2(CableCarMainCallback_Run);
- CreateTask(sub_8123878, 0);
- if (gSpecialVar_0x8004 == 0)
- {
- sCableCarPtr->unk_0000 = CreateTask(sub_81239E4, 1);
- }
- else
- {
- sCableCarPtr->unk_0000 = CreateTask(sub_8123AF8, 1);
- }
- break;
- }
-}
-
-static void CableCarMainCallback_Run(void)
-{
- RunTasks();
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
- MapMusicMain();
-}
-
-static void sub_8123740(void)
-{
- u8 i;
-
- i = 0;
- sub_8123FBC(0);
- gSpriteCoordOffsetX = 0;
- sub_807C9B4(WEATHER_NONE);
- for (; i < 20; i++)
- {
- gWeatherPtr->sprites.s2.ashSprites[i] = NULL;
- }
- ResetTasks();
- ResetSpriteData();
- ResetPaletteFade();
- DmaFill32Large(3, 0, gSharedMem, 0x20000, 0x1000);
- sCableCarPtr = NULL;
- DmaFill16Large(3, 0, VRAM, VRAM_SIZE, 0x1000);
- DmaFill32Defvars(3, 0, OAM, OAM_SIZE);
- DmaFill16Defvars(3, 0, PLTT, PLTT_SIZE);
- warp_in();
- gFieldCallback = NULL;
- SetMainCallback2(CB2_LoadMap);
-}
-
-static void sub_8123878(u8 taskId)
-{
- u8 i;
-
- i = 0;
- sCableCarPtr->unk_0006++;
- switch (sCableCarPtr->unk_0001)
- {
- case 0:
- if (sCableCarPtr->unk_0006 == sCableCarPtr->unk_0004)
- {
- ChangeWeather(sCableCarPtr->unk_0002);
- sCableCarPtr->unk_0001 = 1;
- }
- break;
- case 1:
- switch (sCableCarPtr->unk_0002)
- {
- case 7:
- if (gWeatherPtr->sprites.s2.ashSprites[0] != NULL && gWeatherPtr->sprites.s2.ashSprites[0]->oam.priority != 0)
- {
- for (; i < 20; i++)
- {
- if (gWeatherPtr->sprites.s2.ashSprites[i] != NULL)
- {
- gWeatherPtr->sprites.s2.ashSprites[i]->oam.priority = 0;
- }
- }
- sCableCarPtr->unk_0001 = 2;
- }
- break;
- case 2:
- if (gWeatherPtr->currWeather == 2)
- {
- sCableCarPtr->unk_0001 = 2;
- }
- else if (sCableCarPtr->unk_0006 >= sCableCarPtr->unk_0004 + 8)
- {
- for (; i < 20; i++)
- {
- if (gWeatherPtr->sprites.s2.ashSprites[i] != NULL)
- {
- gWeatherPtr->sprites.s2.ashSprites[i]->invisible ^= TRUE;
- }
- }
- }
- break;
- }
- break;
- case 2:
- if (sCableCarPtr->unk_0006 == 570)
- {
- sCableCarPtr->unk_0001 = 3;
- BeginNormalPaletteFade(-1, 3, 0, 16, 0);
- FadeOutBGM(4);
- }
- break;
- case 3:
- if (!gPaletteFade.active)
- {
- sCableCarPtr->unk_0001 = 255;
- }
- break;
- case 255:
- SetVBlankCallback(NULL);
- DestroyTask(taskId);
- DestroyTask(sCableCarPtr->unk_0000);
- SetMainCallback2(sub_8123740);
- break;
- }
-}
-
-static void sub_81239E4(u8 taskId)
-{
- if (sCableCarPtr->unk_0001 != 255)
- {
- sCableCarPtr->unk_0014--;
- if ((sCableCarPtr->unk_0006 % 2) == 0)
- {
- sCableCarPtr->unk_0015--;
- }
- if ((sCableCarPtr->unk_0006 % 8) == 0)
- {
- sCableCarPtr->unk_000c--;
- sCableCarPtr->unk_000d--;
- }
- switch (sCableCarPtr->unk_0014)
- {
- case 175:
- CableCarUtil_FillWrapped(sCableCarPtr->unk_08fc, 0, 0, 22, 2, 10);
- break;
- case 40:
- CableCarUtil_FillWrapped(sCableCarPtr->unk_08fc, 0, 3, 0, 2, 2);
- break;
- case 32:
- CableCarUtil_FillWrapped(sCableCarPtr->unk_08fc, 0, 2, 0, 1, 2);
- break;
- case 16:
- CableCarUtil_CopyWrapped(sCableCarPtr->unk_08fc, gCableCarPylonHookTilemapEntries, 0, 0, 5, 2);
- CableCarUtil_CopyWrapped(sCableCarPtr->unk_08fc, eCableCar2->pylonStemTilemap, 0, 2, 2, 30);
- sCableCarPtr->unk_0015 = 64;
- break;
- }
- }
- sub_812453C();
- gSpriteCoordOffsetX = (gSpriteCoordOffsetX + 1) % 128;
-}
-
-static void sub_8123AF8(u8 taskId)
-{
- if (sCableCarPtr->unk_0001 != 255)
- {
- sCableCarPtr->unk_0014++;
- if ((sCableCarPtr->unk_0006 % 2) == 0)
- {
- sCableCarPtr->unk_0015++;
- }
- if ((sCableCarPtr->unk_0006 % 8) == 0)
- {
- sCableCarPtr->unk_000c++;
- sCableCarPtr->unk_000d++;
- }
- switch (sCableCarPtr->unk_0014)
- {
- case 176:
- CableCarUtil_CopyWrapped(sCableCarPtr->unk_08fc, eCableCar2->pylonStemTilemap, 0, 2, 2, 30);
- break;
- case 16:
- CableCarUtil_FillWrapped(sCableCarPtr->unk_08fc, 0, 2, 0, 3, 2);
- CableCarUtil_FillWrapped(sCableCarPtr->unk_08fc, 0, 0, 22, 2, 10);
- sCableCarPtr->unk_0015 = 192;
- break;
- case 32:
- sCableCarPtr->unk_08fc[0][2] = (gCableCarPylonHookTilemapEntries + 2)[0];
- sCableCarPtr->unk_08fc[0][3] = (gCableCarPylonHookTilemapEntries + 2)[1];
- sCableCarPtr->unk_08fc[1][2] = (gCableCarPylonHookTilemapEntries + 2)[5];
- sCableCarPtr->unk_08fc[1][3] = (gCableCarPylonHookTilemapEntries + 2)[6];
- break;
- case 40:
- sCableCarPtr->unk_08fc[0][4] = (gCableCarPylonHookTilemapEntries + 4)[0];
- sCableCarPtr->unk_08fc[1][4] = (gCableCarPylonHookTilemapEntries + 4)[5];
- break;
- }
- }
- sub_8124598();
- if (sCableCarPtr->unk_0006 < sCableCarPtr->unk_0004) {
- gSpriteCoordOffsetX = (gSpriteCoordOffsetX + 247) % 248;
- }
- else
- {
- gWeatherPtr->unknown_6FC = (gWeatherPtr->unknown_6FC + 247) % 248;
- }
-}
-
-static void CableCarVblankCallback(void)
-{
- DmaCopy16(3, sCableCarPtr->unk_00fc, BG_SCREEN_ADDR(28), 0x800);
- DmaCopy16(3, sCableCarPtr->unk_08fc, BG_SCREEN_ADDR(31), 0x800);
- REG_BG3HOFS = sCableCarPtr->unk_0014;
- REG_BG3VOFS = sCableCarPtr->unk_0015;
- REG_BG1HOFS = sCableCarPtr->unk_000c;
- REG_BG1VOFS = sCableCarPtr->unk_000d;
- REG_BG0HOFS = sCableCarPtr->unk_0008;
- REG_BG0VOFS = sCableCarPtr->unk_0009;
- LoadOam();
- ProcessSpriteCopyRequests();
- TransferPlttBuffer();
-}
-
-static void nullsub_76(struct Sprite *sprite)
-{
-
-}
-
-static void sub_8123CB8(struct Sprite *sprite)
-{
- if (sCableCarPtr->unk_0001 != 255)
- {
- if (gSpecialVar_0x8004 == 0)
- {
- sprite->pos1.x = sprite->data[0] - (u8)(0.14f * S16TOPOSFLOAT(sCableCarPtr->unk_0006));
- sprite->pos1.y = sprite->data[1] - (u8)(0.067f * S16TOPOSFLOAT(sCableCarPtr->unk_0006));
- }
- else
- {
- sprite->pos1.x = sprite->data[0] + (u8)(0.14f * S16TOPOSFLOAT(sCableCarPtr->unk_0006));
- sprite->pos1.y = sprite->data[1] + (u8)(0.067f * S16TOPOSFLOAT(sCableCarPtr->unk_0006));
- }
- }
-}
-
-static void sub_8123D98(struct Sprite *sprite)
-{
- if (sCableCarPtr->unk_0001 != 255)
- {
- if (gSpecialVar_0x8004 == 0)
- {
- sprite->pos1.x = sprite->data[0] - (u8)(0.14f * S16TOPOSFLOAT(sCableCarPtr->unk_0006));
- sprite->pos1.y = sprite->data[1] - (u8)(0.067f * S16TOPOSFLOAT(sCableCarPtr->unk_0006));
- }
- else
- {
- sprite->pos1.x = sprite->data[0] + (u8)(0.14f * S16TOPOSFLOAT(sCableCarPtr->unk_0006));
- sprite->pos1.y = sprite->data[1] + (u8)(0.067f * S16TOPOSFLOAT(sCableCarPtr->unk_0006));
- }
- switch (sprite->data[2])
- {
- case 0:
- sprite->pos2.y = 17;
- if (sprite->data[3] ++ > 9)
- {
- sprite->data[3] = 0;
- sprite->data[2] ++;
- }
- break;
- default:
- sprite->pos2.y = 16;
- if (sprite->data[3] ++ > 9)
- {
- sprite->data[3] = 0;
- sprite->data[2] = 0;
- }
- break;
- }
- }
-}
-
-static void sub_8123EB8(struct Sprite *sprite)
-{
- if (sprite->data[0] == 0)
- {
- sprite->pos1.x += 2 * sprite->centerToCornerVecX;
- sprite->pos1.y += 16 + sprite->centerToCornerVecY;
- }
- if (++sprite->data[0] >= sprite->data[2])
- {
- switch (sprite->data[1])
- {
- case 0:
- sprite->pos1.x++;
- if ((sprite->data[0] % 4) == 0)
- {
- sprite->pos1.y++;
- }
- break;
- case 1:
- if ((sprite->data[0] % 2) != 0)
- {
- sprite->pos1.x++;
- if ((sprite->pos1.x % 4) == 0)
- {
- sprite->pos1.y++;
- }
- }
- break;
- }
- if (sprite->pos1.y > 0xa0)
- {
- DestroySprite(sprite);
- }
- }
-}
-
-static void sub_8123F44(struct Sprite *sprite)
-{
- if (sprite->data[0] == 0)
- {
- sprite->pos1.y += 16 + sprite->centerToCornerVecY;
- }
- if (++sprite->data[0] >= sprite->data[2])
- {
- switch (sprite->data[1])
- {
- case 0:
- sprite->pos1.x--;
- if ((sprite->data[0] % 4) == 0)
- {
- sprite->pos1.y--;
- }
- break;
- case 1:
- if ((sprite->data[0] % 2) != 0)
- {
- sprite->pos1.x--;
- if ((sprite->pos1.x % 4) == 0)
- {
- sprite->pos1.y--;
- }
- }
- break;
- }
- if (sprite->pos1.y < 0x50)
- {
- DestroySprite(sprite);
- }
- }
-}
-
-static void sub_8123FBC(bool8 which)
-{
- switch (which)
- {
- case FALSE:
- default:
- REG_WININ = 0;
- REG_WINOUT = 0;
- REG_WIN0H = 0;
- REG_WIN1H = 0;
- REG_WIN0V = 0;
- REG_WIN1V = 0;
- REG_DISPCNT = 0;
- REG_BG3CNT = 0;
- REG_BG2CNT = 0;
- REG_BG1CNT = 0;
- REG_BG0CNT = 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;
- break;
- case TRUE:
- REG_WININ = 0;
- REG_WINOUT = 0;
- REG_WIN0H = 0;
- REG_WIN1H = 0;
- REG_WIN0V = 0;
- REG_WIN1V = 0;
- if (gSpecialVar_0x8004 == 0)
- {
- sCableCarPtr->unk_0014 = 0xb0;
- sCableCarPtr->unk_0015 = 0x10;
- sCableCarPtr->unk_000c = 0x00;
- sCableCarPtr->unk_000d = 0x50;
- sCableCarPtr->unk_0009 = 0;
- sCableCarPtr->unk_0009 = 0;
- }
- else
- {
- sCableCarPtr->unk_0014 = 0x60;
- sCableCarPtr->unk_0015 = 0xe8;
- sCableCarPtr->unk_000c = 0x00;
- sCableCarPtr->unk_000d = 0x04;
- sCableCarPtr->unk_0009 = 0;
- sCableCarPtr->unk_0009 = 0;
- }
- REG_BG3HOFS = sCableCarPtr->unk_0014;
- REG_BG3VOFS = sCableCarPtr->unk_0015;
- REG_BG2HOFS = 0;
- REG_BG2VOFS = 0;
- REG_BG1HOFS = sCableCarPtr->unk_000c;
- REG_BG1VOFS = sCableCarPtr->unk_000d;
- REG_BG0HOFS = sCableCarPtr->unk_0008;
- REG_BG0VOFS = sCableCarPtr->unk_0009;
- REG_BG0CNT = BGCNT_PRIORITY(1) | BGCNT_SCREENBASE(28) | BGCNT_WRAP;
- REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_SCREENBASE(29) | BGCNT_WRAP;
- REG_BG2CNT = BGCNT_PRIORITY(3) | BGCNT_SCREENBASE(30) | BGCNT_WRAP;
- REG_BG3CNT = BGCNT_PRIORITY(0) | BGCNT_SCREENBASE(31) | BGCNT_WRAP;
- REG_DISPCNT = DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON;
- REG_BLDCNT = 0x3f00;
- break;
- }
-}
-
-static void LoadSprites(void)
-{
- u8 spriteId;
- u8 i;
-
- u8 playerGraphicsIds[2] = {
- MAP_OBJ_GFX_RIVAL_BRENDAN_NORMAL,
- MAP_OBJ_GFX_RIVAL_MAY_NORMAL
- };
- u16 rval = Random();
- u8 hikerGraphicsIds[4] = {
- MAP_OBJ_GFX_HIKER,
- MAP_OBJ_GFX_CAMPER,
- MAP_OBJ_GFX_PICNICKER,
- MAP_OBJ_GFX_POOCHYENA
- };
- s16 hikerCoords[2][2] = {
- { 0, 80 },
- { 240, 146 }
- };
- u8 hikerMovementDelayTable[4] = {
- 0,
- 60,
- 120,
- 170
- };
- void (*callbacks[2])(struct Sprite *) = {
- sub_8123EB8,
- sub_8123F44
- };
-
- switch (gSpecialVar_0x8004)
- {
- case 0:
- default:
- spriteId = AddPseudoFieldObject(playerGraphicsIds[gSaveBlock2.playerGender], sub_8123D98, 0xc8, 0x49, 0x66);
- if (spriteId != MAX_SPRITES)
- {
- gSprites[spriteId].oam.priority = 2;
- gSprites[spriteId].pos2.x = 0x08;
- gSprites[spriteId].pos2.y = 0x10;
- gSprites[spriteId].data[0] = 0xc8;
- gSprites[spriteId].data[1] = 0x49;
- }
- spriteId = CreateSprite(&gSpriteTemplate_8401D40[0], 0xb0, 0x2b, 0x67);
- gSprites[spriteId].pos2.x = gSprites[spriteId].pos2.y = 0x20;
- gSprites[spriteId].data[0] = 0xb0;
- gSprites[spriteId].data[1] = 0x2b;
- spriteId = CreateSprite(&gSpriteTemplate_8401D40[1], 0xc8, 0x63, 0x65);
- gSprites[spriteId].pos2.x = 8;
- gSprites[spriteId].pos2.y = 4;
- gSprites[spriteId].data[0] = 0xc8;
- gSprites[spriteId].data[1] = 0x63;
- sCableCarPtr->unk_0002 = 7;
- sCableCarPtr->unk_0004 = 0x15e;
- sub_807C9B4(WEATHER_SUNNY);
- break;
- case 1:
- CableCarUtil_CopyWrapped(sCableCarPtr->unk_00fc, eCableCar2->mtChimneyTilemap + 0x24, 0x18, 0x1a, 0x0c, 0x03);
- spriteId = AddPseudoFieldObject(playerGraphicsIds[gSaveBlock2.playerGender], sub_8123D98, 0x80, 0x27, 0x66);
- if (spriteId != MAX_SPRITES)
- {
- gSprites[spriteId].oam.priority = 2;
- gSprites[spriteId].pos2.x = 0x08;
- gSprites[spriteId].pos2.y = 0x10;
- gSprites[spriteId].data[0] = 0x80;
- gSprites[spriteId].data[1] = 0x27;
- }
- spriteId = CreateSprite(&gSpriteTemplate_8401D40[0], 0x68, 0x09, 0x67);
- gSprites[spriteId].pos2.x = gSprites[spriteId].pos2.y = 0x20;
- gSprites[spriteId].data[0] = 0x68;
- gSprites[spriteId].data[1] = 0x09;
- spriteId = CreateSprite(&gSpriteTemplate_8401D40[1], 0x80, 0x41, 0x65);
- gSprites[spriteId].pos2.x = 8;
- gSprites[spriteId].pos2.y = 4;
- gSprites[spriteId].data[0] = 0x80;
- gSprites[spriteId].data[1] = 0x41;
- sCableCarPtr->unk_0002 = 2;
- sCableCarPtr->unk_0004 = 0x109;
- sub_807C9B4(WEATHER_ASH);
- break;
- }
- for (i = 0; i < 9; i++)
- {
- spriteId = CreateSprite(&gSpriteTemplate_8401D40[2], 16 * i + 0x60, 8 * i - 8, 0x68);
- gSprites[spriteId].pos2.x = 8;
- gSprites[spriteId].pos2.y = 8;
- }
- if ((rval % 64) == 0)
- {
- spriteId = AddPseudoFieldObject(hikerGraphicsIds[rval % 3], callbacks[gSpecialVar_0x8004], hikerCoords[gSpecialVar_0x8004][0], hikerCoords[gSpecialVar_0x8004][1], 0x6a);
- if (spriteId != MAX_SPRITES)
- {
- gSprites[spriteId].oam.priority = 2;
- gSprites[spriteId].pos2.x = -gSprites[spriteId].centerToCornerVecX;
- gSprites[spriteId].pos2.y = -gSprites[spriteId].centerToCornerVecY;
- if (gSpecialVar_0x8004 == 0)
- {
- if (rval % 2)
- {
- StartSpriteAnim(&gSprites[spriteId], 6);
- gSprites[spriteId].data[1] = 1;
- gSprites[spriteId].pos1.y += 2;
- }
- else
- {
- StartSpriteAnim(&gSprites[spriteId], 7);
- gSprites[spriteId].data[1] = 0;
- }
- }
- else
- {
- if (rval % 2)
- {
- StartSpriteAnim(&gSprites[spriteId], 7);
- gSprites[spriteId].data[1] = 1;
- gSprites[spriteId].pos1.y += 2;
- }
- else
- {
- StartSpriteAnim(&gSprites[spriteId], 6);
- gSprites[spriteId].data[1] = 0;
- }
- }
- gSprites[spriteId].data[2] = hikerMovementDelayTable[rval % 4];
- }
- }
-}
-
-static void sub_812446C(void)
-{
- u8 i;
- u8 j;
- u8 k;
- u8 offset;
-
- for (i = 0, k = 0, offset = 0x24 * (sCableCarPtr->unk_001b + 2); i < 3; i++)
- {
- for (j = 0; j < 12; j++)
- {
- sCableCarPtr->unk_0022[i][j] = *(eCableCar2->mtChimneyTilemap + (offset++));
- sCableCarPtr->unk_0022[i + 3][j] = eCableCar2->mtChimneyTilemap[k];
- sCableCarPtr->unk_0022[i + 6][j] = (eCableCar2->mtChimneyTilemap + 0x24)[k];
- k++;
- }
- }
- sCableCarPtr->unk_001b = (sCableCarPtr->unk_001b + 1) % 3;
-}
-
-static void sub_812453C(void)
-{
- sCableCarPtr->unk_001c = (sCableCarPtr->unk_001c + 1) % 0x60;
- sCableCarPtr->unk_0008 = sCableCarPtr->unk_001f - sCableCarPtr->unk_001d;
- sCableCarPtr->unk_0009 = sCableCarPtr->unk_0020 - sCableCarPtr->unk_001e;
- sCableCarPtr->unk_001d++;
- if ((sCableCarPtr->unk_001d % 4) == 0)
- {
- sCableCarPtr->unk_001e++;
- }
- if (sCableCarPtr->unk_001d > 16)
- {
- sub_81245F4();
- }
-}
-
-static void sub_8124598(void)
-{
- sCableCarPtr->unk_001c = (sCableCarPtr->unk_001c + 1) % 0x60;
- sCableCarPtr->unk_0008 = sCableCarPtr->unk_001f + sCableCarPtr->unk_001d;
- sCableCarPtr->unk_0009 = sCableCarPtr->unk_0020 + sCableCarPtr->unk_001e;
- sCableCarPtr->unk_001d++;
- if ((sCableCarPtr->unk_001d % 4) == 0)
- {
- sCableCarPtr->unk_001e++;
- }
- if (sCableCarPtr->unk_001d > 16)
- {
- sub_812476C();
- }
-}
-
-static void sub_81245F4(void)
-{
- u8 i = 0;
-
- sCableCarPtr->unk_001d = sCableCarPtr->unk_001e = 0;
- sCableCarPtr->unk_001f = sCableCarPtr->unk_0008;
- sCableCarPtr->unk_0020 = sCableCarPtr->unk_0009;
- sCableCarPtr->unk_0019 = (sCableCarPtr->unk_0019 + 30) % 32;
- sCableCarPtr->unk_0018 -= 2;
- gUnknown_0203927A = (sCableCarPtr->unk_001a + 23) % 32;
- for (i = 0; i < 9; i++)
- {
- gUnknown_02039278 = sCableCarPtr->unk_0019;
- gUnknown_02039279 = (gUnknown_0203927A + i) % 32;
- sCableCarPtr->unk_00fc[gUnknown_02039279][gUnknown_02039278] = sCableCarPtr->unk_0022[i][sCableCarPtr->unk_0018];
- gUnknown_02039278 = (gUnknown_02039278 + 1) % 32;
- sCableCarPtr->unk_00fc[gUnknown_02039279][gUnknown_02039278] = sCableCarPtr->unk_0022[i][sCableCarPtr->unk_0018 + 1];
- }
- gUnknown_02039278 = (sCableCarPtr->unk_0019 + 30) % 32;
- CableCarUtil_FillWrapped(sCableCarPtr->unk_00fc, 0, gUnknown_02039278, 0, 2, 32);
- if (sCableCarPtr->unk_0018 == 0)
- {
- sCableCarPtr->unk_001a = (sCableCarPtr->unk_001a + 29) % 32;
- sCableCarPtr->unk_0018 = 12;
- sub_812446C();
- gUnknown_02039278 = (sCableCarPtr->unk_001a + 1) % 32;
- CableCarUtil_FillWrapped(sCableCarPtr->unk_00fc, 0, 0, gUnknown_02039278, 32, 9);
- }
-}
-
-static void sub_812476C(void)
-{
- u8 i = 0;
-
- sCableCarPtr->unk_001d = sCableCarPtr->unk_001e = 0;
- sCableCarPtr->unk_001f = sCableCarPtr->unk_0008;
- sCableCarPtr->unk_0020 = sCableCarPtr->unk_0009;
- sCableCarPtr->unk_0019 = (sCableCarPtr->unk_0019 + 2) % 32;
- sCableCarPtr->unk_0018 += 2;
- gUnknown_0203927D = sCableCarPtr->unk_001a;
- for (i = 0; i < 9; i++)
- {
- gUnknown_0203927B = sCableCarPtr->unk_0019;
- gUnknown_0203927C = (gUnknown_0203927D + i) % 32;
- sCableCarPtr->unk_00fc[gUnknown_0203927C][gUnknown_0203927B] = sCableCarPtr->unk_0022[i][sCableCarPtr->unk_0018];
- gUnknown_0203927B = (gUnknown_0203927B + 1) % 32;
- sCableCarPtr->unk_00fc[gUnknown_0203927C][gUnknown_0203927B] = sCableCarPtr->unk_0022[i][sCableCarPtr->unk_0018 + 1];
- }
- gUnknown_0203927C = (sCableCarPtr->unk_001a + 23) % 32;
- CableCarUtil_FillWrapped(sCableCarPtr->unk_00fc, 0, sCableCarPtr->unk_0019, gUnknown_0203927C, 2, 9);
- if (sCableCarPtr->unk_0018 == 10)
- {
- sCableCarPtr->unk_001a = (sCableCarPtr->unk_001a + 3) % 32;
- sCableCarPtr->unk_0018 = 0xfe;
- sub_812446C();
- }
-}
-
-static void sub_81248AC(u8 a0)
-{
- switch (a0)
- {
- case 0:
- default:
- sCableCarPtr->unk_001b = 2;
- sCableCarPtr->unk_0019 = 0;
- sCableCarPtr->unk_001a = 20;
- sCableCarPtr->unk_0018 = 12;
- sub_812446C();
- sub_81245F4();
- break;
- case 1:
- sCableCarPtr->unk_001b = 2;
- sCableCarPtr->unk_0019 = 28;
- sCableCarPtr->unk_001a = 20;
- sCableCarPtr->unk_0018 = 4;
- sub_812446C();
- sub_812476C();
- break;
- }
- sCableCarPtr->unk_001c = 0;
-}
diff --git a/src/scene/contest_painting.c b/src/scene/contest_painting.c
deleted file mode 100644
index 0aa02312f..000000000
--- a/src/scene/contest_painting.c
+++ /dev/null
@@ -1,786 +0,0 @@
-#include "global.h"
-#include "contest_painting.h"
-#include "cute_sketch.h"
-#include "data2.h"
-#include "decompress.h"
-#include "main.h"
-#include "menu.h"
-#include "palette.h"
-#include "random.h"
-#include "sprite.h"
-#include "string_util.h"
-#include "strings.h"
-#include "text.h"
-#include "scanline_effect.h"
-#include "ewram.h"
-
-static u8 gUnknown_03000750;
-static u16 gUnknown_03000752;
-static u16 gUnknown_03000754;
-static u8 gUnknown_03000756;
-
-u16 (*gUnknown_03005E10)[][32];
-struct Unk03005E20 gUnknown_03005E20;
-u8 gUnknown_03005E40[0x4C];
-struct ContestEntry *gUnknown_03005E8C;
-u16 (*gUnknown_03005E90)[];
-
-static const u16 gPictureFramePalettes[][16] =
-{
- INCBIN_U16("graphics/picture_frame/bg0.gbapal"),
- INCBIN_U16("graphics/picture_frame/bg1.gbapal"),
- INCBIN_U16("graphics/picture_frame/bg2.gbapal"),
- INCBIN_U16("graphics/picture_frame/bg3.gbapal"),
- INCBIN_U16("graphics/picture_frame/bg4.gbapal"),
- INCBIN_U16("graphics/picture_frame/bg5.gbapal"),
- {0},
- {0},
-};
-const u8 emptySpace[8 * 32] = {0};
-const u8 gPictureFrameTiles_0[] = INCBIN_U8("graphics/picture_frame/frame0.4bpp.rl");
-const u8 gPictureFrameTiles_1[] = INCBIN_U8("graphics/picture_frame/frame1.4bpp.rl");
-const u8 gPictureFrameTiles_2[] = INCBIN_U8("graphics/picture_frame/frame2.4bpp.rl");
-const u8 gPictureFrameTiles_3[] = INCBIN_U8("graphics/picture_frame/frame3.4bpp.rl");
-const u8 gPictureFrameTiles_4[] = INCBIN_U8("graphics/picture_frame/frame4.4bpp.rl");
-const u8 gPictureFrameTiles_5[] = INCBIN_U8("graphics/picture_frame/frame5.4bpp.rl");
-const u8 gPictureFrameTilemap_0[] = INCBIN_U8("graphics/picture_frame/frame0_map.bin.rl");
-const u8 gPictureFrameTilemap_1[] = INCBIN_U8("graphics/picture_frame/frame1_map.bin.rl");
-const u8 gPictureFrameTilemap_2[] = INCBIN_U8("graphics/picture_frame/frame2_map.bin.rl");
-const u8 gPictureFrameTilemap_3[] = INCBIN_U8("graphics/picture_frame/frame3_map.bin.rl");
-const u8 gPictureFrameTilemap_4[] = INCBIN_U8("graphics/picture_frame/frame4_map.bin.rl");
-const u8 gPictureFrameTilemap_5[] = INCBIN_U8("graphics/picture_frame/frame5_map.bin.rl");
-const u8 *const gUnknown_083F60AC[] =
-{
- OtherText_Cool,
- OtherText_Beauty2,
- OtherText_Cute,
- OtherText_Smart,
- OtherText_Tough,
-};
-const struct LabelPair gUnknown_083F60C0[] =
-{
- {OtherText_NonstopSuperCool, OtherText_Terminator6},
- {OtherText_GoodLookingPoke, OtherText_Terminator7},
- {OtherText_MarvelousGreat, OtherText_Terminator8},
- {OtherText_CenturyLastVenus, OtherText_Terminator9},
- {OtherText_Terminator10, OtherText_DazzlingSmile},
- {OtherText_PokeCenterIdol, OtherText_Terminator11},
- {OtherText_LovelyAndSweet, OtherText_Terminator12},
- {OtherText_ThePretty, OtherText_WinningPortrait},
- {OtherText_GiveUsWink, OtherText_Terminator13},
- {OtherText_SmartnessMaestro, OtherText_Terminator15},
- {OtherText_ChosenPokeAmong, OtherText_Terminator15},
- {OtherText_TheExcellent, OtherText_ItsMomentOfElegance},
- {OtherText_PowerfullyMuscular, OtherText_Terminator16},
- {OtherText_StrongErEst, OtherText_Terminator17},
- {OtherText_MightyTough, OtherText_Exclamation},
-};
-const struct OamData gOamData_83F6138 =
-{
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 1,
- .bpp = 1,
- .shape = 0,
- .x = 0,
- .matrixNum = 0,
- .size = 3,
- .tileNum = 0,
- .priority = 0,
- .paletteNum = 0,
- .affineParam = 0,
-};
-const u16 gUnknown_083F6140[] = {0, 0};
-
-static void ShowContestPainting();
-static void CB2_HoldContestPainting(void);
-static void HoldContestPainting(void);
-static void ContestPaintingInitWindow(u8 arg0);
-static void ContestPaintingPrintCaption(u8 arg0, u8 arg1);
-static void ContestPaintingInitBG(void);
-static void ContestPaintingInitVars(u8 arg0);
-static void VBlankCB_ContestPainting(void);
-void sub_8106B90(); //should be static
-static void sub_8107090(u8 arg0, u8 arg1);
-
-__attribute__((naked))
-void sub_8106630(u32 arg0)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- ldr r2, _0810665C @ =gSharedMem + 0x15DE0\n\
- subs r4, r2, 0x2\n\
- subs r5, r2, 0x1\n\
- ldr r3, _08106660 @ =gSaveBlock1\n\
- subs r0, 0x1\n\
- lsls r1, r0, 5\n\
- adds r1, r3\n\
- ldr r3, _08106664 @ =0x00002dfc\n\
- adds r1, r3\n\
- ldm r1!, {r3,r6,r7}\n\
- stm r2!, {r3,r6,r7}\n\
- ldm r1!, {r3,r6,r7}\n\
- stm r2!, {r3,r6,r7}\n\
- ldm r1!, {r6,r7}\n\
- stm r2!, {r6,r7}\n\
- strb r0, [r4]\n\
- movs r0, 0\n\
- strb r0, [r5]\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_0810665C: .4byte gSharedMem + 0x15DE0\n\
-_08106660: .4byte gSaveBlock1\n\
-_08106664: .4byte 0x00002dfc\n\
- .syntax divided\n");
-}
-
-void CB2_ContestPainting(void)
-{
- ShowContestPainting();
-}
-
-static void ShowContestPainting(void)
-{
- switch (gMain.state)
- {
- case 0:
- ScanlineEffect_Stop();
- SetVBlankCallback(NULL);
- gUnknown_03005E8C = &ewram15DE0;
- ContestPaintingInitVars(TRUE);
- ContestPaintingInitBG();
- gMain.state++;
- break;
- case 1:
- {
- ResetPaletteFade();
- DmaFill32Large(3, 0, (void *)(VRAM + 0x0), 0x18000, 0x1000);
- ResetSpriteData();
- gMain.state++;
- break;
- }
- case 2:
- SeedRng(gMain.vblankCounter1);
- InitKeys();
- ContestPaintingInitWindow(ewram15DDF);
- gMain.state++;
- break;
- case 3:
- sub_8107090(ewram15DDE, ewram15DDF);
- gMain.state++;
- break;
- case 4:
- ContestPaintingPrintCaption(ewram15DDE, ewram15DDF);
- LoadPalette(gUnknown_083F6140, 0, 1 * 2);
- DmaClear32(3, PLTT, 0x400);
- BeginFastPaletteFade(2);
- SetVBlankCallback(VBlankCB_ContestPainting);
- gUnknown_03000750 = 0;
- REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON;
- SetMainCallback2(CB2_HoldContestPainting);
- break;
- }
-}
-
-static void CB2_HoldContestPainting(void)
-{
- HoldContestPainting();
- UpdatePaletteFade();
-}
-
-static void CB2_QuitContestPainting(void)
-{
- SetMainCallback2(gMain.savedCallback);
-}
-
-static void HoldContestPainting(void)
-{
- switch (gUnknown_03000750)
- {
- case 0:
- if (!gPaletteFade.active)
- gUnknown_03000750 = 1;
- if (gUnknown_03000756 != 0 && gUnknown_03000754 != 0)
- gUnknown_03000754--;
- break;
- case 1:
- if ((gMain.newKeys & 1) || (gMain.newKeys & 2))
- {
- u8 two = 2; //needed to make the asm match
-
- gUnknown_03000750 = two;
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
- }
- if (gUnknown_03000756 != 0)
- gUnknown_03000754 = 0;
- break;
- case 2:
- if (!gPaletteFade.active)
- SetMainCallback2(CB2_QuitContestPainting);
- if (gUnknown_03000756 != 0 && gUnknown_03000754 <= 0x1D)
- gUnknown_03000754++;
- break;
- }
-}
-
-static void ContestPaintingInitWindow(u8 arg0)
-{
- InitMenuWindow(&gWindowTemplate_81E7160);
- Text_LoadWindowTemplate(&gWindowTemplate_81E7160);
-}
-
-static void ContestPaintingPrintCaption(u8 contestType, u8 arg1)
-{
- u8 xPos, yPos;
- u8 *ptr;
- u8 type;
-
- if (arg1 == TRUE)
- return;
- ptr = gUnknown_03005E40;
- type = gUnknown_03005E8C->contestType;
- if (contestType < 8)
- {
- ptr = StringCopy(ptr, gUnknown_083F60AC[type]);
- ptr = StringCopy(ptr, gContestText_ContestWinner);
-#if ENGLISH
- ptr = StringCopy(ptr, gUnknown_03005E8C->trainer_name);
-#elif GERMAN
- ptr = StringCopy10(ptr, gUnknown_03005E8C->pokemon_name);
-#endif
-
- // {LATIN}
- ptr[0] = 0xFC;
- ptr[1] = 0x16;
- ptr += 2;
-
- ptr = StringCopy(ptr, gOtherText_Unknown1);
-#if ENGLISH
- ptr = StringCopy10(ptr, gUnknown_03005E8C->pokemon_name);
-#elif GERMAN
- ptr = StringCopy(ptr, gUnknown_03005E8C->trainer_name);
-#endif
-
- xPos = 6;
- yPos = 14;
- }
- else
- {
- ptr = StringCopy(ptr, gUnknown_083F60C0[type].prefix);
- ptr = StringCopy10(ptr, gUnknown_03005E8C->pokemon_name);
- ptr = StringCopy(ptr, gUnknown_083F60C0[type].suffix);
-
- xPos = 3;
- yPos = 14;
- }
- Menu_PrintTextPixelCoords(gUnknown_03005E40, xPos * 8 + 1, yPos * 8, 1);
-}
-
-static void ContestPaintingInitBG(void)
-{
- REG_DISPCNT = 0;
- REG_IE |= INTR_FLAG_VBLANK;
- REG_BG0CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(12) | BGCNT_MOSAIC | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(10) | BGCNT_MOSAIC | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_BLDCNT = 0;
- REG_BLDALPHA = 0;
- REG_BLDY = 0;
-}
-
-static void ContestPaintingInitVars(bool8 arg0)
-{
- if (arg0 == FALSE)
- {
- gUnknown_03000756 = FALSE;
- gUnknown_03000752 = 0;
- gUnknown_03000754 = 0;
- }
- else
- {
- gUnknown_03000756 = TRUE;
- gUnknown_03000752 = 15;
- gUnknown_03000754 = 30;
- }
-}
-
-static void ContestPaintingMosaic(void)
-{
- if (gUnknown_03000756 == FALSE)
- {
- REG_MOSAIC = 0;
- return;
- }
-
- REG_BG1CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(1) | BGCNT_SCREENBASE(10) | BGCNT_MOSAIC | BGCNT_16COLOR | BGCNT_TXT256x256;
- gUnknown_03000752 = gUnknown_03000754 / 2;
-
- REG_MOSAIC = (gUnknown_03000752 << 12) | (gUnknown_03000752 << 8) | (gUnknown_03000752 << 4) | (gUnknown_03000752 << 0);
-}
-
-static void VBlankCB_ContestPainting(void)
-{
- ContestPaintingMosaic();
- LoadOam();
- ProcessSpriteCopyRequests();
- TransferPlttBuffer();
-}
-
-#ifdef NONMATCHING
-static void sub_8106AC4(u16 species, u8 arg1)
-{
- void *pal;
-
- // Unsure what gUnknown_03005E8C->var0 is supposed to be.
- pal = GetMonSpritePalFromOtIdPersonality(species, gUnknown_03005E8C->var4, gUnknown_03005E8C->var0);
- LZDecompressVram(pal, gUnknown_03005E90);
-
- if (arg1 == 1)
- {
- HandleLoadSpecialPokePic(
- &gMonFrontPicTable[species],
- gMonFrontPicCoords[species].x,
- gMonFrontPicCoords[species].y,
- 0x2000000,
- gUnknown_081FAF4C[1],
- species,
- (u32)gUnknown_03005E8C->var0
- );
- sub_8106B90(gUnknown_081FAF4C[1], gUnknown_03005E90, gUnknown_03005E10);
- }
- else
- {
- HandleLoadSpecialPokePic(
- &gMonBackPicTable[species],
- gMonBackPicCoords[species].x,
- gMonBackPicCoords[species].y,
- 0x2000000,
- gUnknown_081FAF4C[0],
- species,
- (u32)gUnknown_03005E8C->var0
- );
- sub_8106B90(gUnknown_081FAF4C[0], gUnknown_03005E90, gUnknown_03005E10);
- }
-}
-#else
-__attribute__((naked))
-static void sub_8106AC4(u16 arg0, u8 arg2)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- sub sp, 0xC\n\
- adds r4, r1, 0\n\
- lsls r0, 16\n\
- lsrs r6, r0, 16\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- ldr r7, _08106B28 @ =gUnknown_03005E8C\n\
- ldr r0, [r7]\n\
- ldr r1, [r0, 0x4]\n\
- ldr r2, [r0]\n\
- adds r0, r6, 0\n\
- bl GetMonSpritePalFromOtIdPersonality\n\
- ldr r1, _08106B2C @ =gUnknown_03005E90\n\
- mov r8, r1\n\
- ldr r1, [r1]\n\
- bl LZDecompressVram\n\
- cmp r4, 0\n\
- bne _08106B40\n\
- lsls r0, r6, 3\n\
- ldr r1, _08106B30 @ =gMonFrontPicTable\n\
- adds r0, r1\n\
- ldr r1, _08106B34 @ =gMonFrontPicCoords\n\
- lsls r2, r6, 2\n\
- adds r2, r1\n\
- ldrb r1, [r2]\n\
- ldrb r2, [r2, 0x1]\n\
- movs r3, 0x80\n\
- lsls r3, 18\n\
- ldr r4, _08106B38 @ =gUnknown_081FAF4C\n\
- ldr r5, [r4, 0x4]\n\
- str r5, [sp]\n\
- str r6, [sp, 0x4]\n\
- ldr r4, [r7]\n\
- ldr r4, [r4]\n\
- str r4, [sp, 0x8]\n\
- bl HandleLoadSpecialPokePic\n\
- mov r2, r8\n\
- ldr r1, [r2]\n\
- ldr r0, _08106B3C @ =gUnknown_03005E10\n\
- ldr r2, [r0]\n\
- adds r0, r5, 0\n\
- bl sub_8106B90\n\
- b _08106B74\n\
- .align 2, 0\n\
-_08106B28: .4byte gUnknown_03005E8C\n\
-_08106B2C: .4byte gUnknown_03005E90\n\
-_08106B30: .4byte gMonFrontPicTable\n\
-_08106B34: .4byte gMonFrontPicCoords\n\
-_08106B38: .4byte gUnknown_081FAF4C\n\
-_08106B3C: .4byte gUnknown_03005E10\n\
-_08106B40:\n\
- lsls r0, r6, 3\n\
- ldr r1, _08106B80 @ =gMonBackPicTable\n\
- adds r0, r1\n\
- ldr r1, _08106B84 @ =gMonBackPicCoords\n\
- lsls r2, r6, 2\n\
- adds r2, r1\n\
- ldrb r1, [r2]\n\
- ldrb r2, [r2, 0x1]\n\
- movs r3, 0x80\n\
- lsls r3, 18\n\
- ldr r4, _08106B88 @ =gUnknown_081FAF4C\n\
- ldr r5, [r4]\n\
- str r5, [sp]\n\
- str r6, [sp, 0x4]\n\
- ldr r4, [r7]\n\
- ldr r4, [r4]\n\
- str r4, [sp, 0x8]\n\
- bl HandleLoadSpecialPokePic\n\
- mov r0, r8\n\
- ldr r1, [r0]\n\
- ldr r0, _08106B8C @ =gUnknown_03005E10\n\
- ldr r2, [r0]\n\
- adds r0, r5, 0\n\
- bl sub_8106B90\n\
-_08106B74:\n\
- add sp, 0xC\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_08106B80: .4byte gMonBackPicTable\n\
-_08106B84: .4byte gMonBackPicCoords\n\
-_08106B88: .4byte gUnknown_081FAF4C\n\
-_08106B8C: .4byte gUnknown_03005E10\n\
- .syntax divided\n");
-}
-#endif
-
-#ifdef NONMATCHING
-void sub_8106B90(u8 a[][8][8][4], u16 b[], u16 c[][8][8][8])
-{
- u16 i;
- u16 j;
- u16 k;
- u16 l;
-
- for (i = 0; i < 8; i++)
- {
- for (j = 0; j < 8; j++)
- {
- for (k = 0; k < 8; k++)
- {
- for (l = 0; l < 8; l++)
- {
- //u8 *arr = a[i][j][k];
- //u8 r1 = arr[l / 2];
- u8 r1 = a[i][j][k][l / 2];
-
- if (l & 1)
- r1 /= 16;
- else
- r1 %= 16;
- //_08106BEA
- if (r1 == 0)
- c[i][k][j][l] = 0x8000;
- else
- c[i][k][j][l] = b[r1];
- }
- }
- }
- }
-}
-#else
-__attribute__((naked))
-void sub_8106B90()
-{
- 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, 0xC\n\
- mov r10, r0\n\
- mov r9, r1\n\
- str r2, [sp]\n\
- movs r0, 0\n\
-_08106BA4:\n\
- movs r3, 0\n\
- adds r1, r0, 0x1\n\
- str r1, [sp, 0x4]\n\
- lsls r0, 3\n\
- str r0, [sp, 0x8]\n\
-_08106BAE:\n\
- movs r1, 0\n\
- adds r2, r3, 0x1\n\
- mov r8, r2\n\
- ldr r7, [sp, 0x8]\n\
- adds r0, r7, r3\n\
- lsls r0, 5\n\
- mov r12, r0\n\
- lsls r4, r3, 3\n\
-_08106BBE:\n\
- movs r3, 0\n\
- lsls r0, r1, 2\n\
- adds r6, r1, 0x1\n\
- mov r2, r12\n\
- adds r5, r2, r0\n\
- ldr r7, [sp, 0x8]\n\
- adds r0, r7, r1\n\
- lsls r0, 7\n\
- ldr r1, [sp]\n\
- adds r2, r0, r1\n\
-_08106BD2:\n\
- lsrs r0, r3, 1\n\
- adds r0, r5, r0\n\
- add r0, r10\n\
- ldrb r1, [r0]\n\
- movs r0, 0x1\n\
- ands r0, r3\n\
- cmp r0, 0\n\
- beq _08106BE6\n\
- lsrs r1, 4\n\
- b _08106BEA\n\
-_08106BE6:\n\
- movs r0, 0xF\n\
- ands r1, r0\n\
-_08106BEA:\n\
- cmp r1, 0\n\
- bne _08106BFC\n\
- adds r0, r4, r3\n\
- lsls r0, 1\n\
- adds r0, r2\n\
- movs r7, 0x80\n\
- lsls r7, 8\n\
- adds r1, r7, 0\n\
- b _08106C08\n\
-_08106BFC:\n\
- adds r0, r4, r3\n\
- lsls r0, 1\n\
- adds r0, r2\n\
- lsls r1, 1\n\
- add r1, r9\n\
- ldrh r1, [r1]\n\
-_08106C08:\n\
- strh r1, [r0]\n\
- adds r0, r3, 0x1\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- cmp r3, 0x7\n\
- bls _08106BD2\n\
- lsls r0, r6, 16\n\
- lsrs r1, r0, 16\n\
- cmp r1, 0x7\n\
- bls _08106BBE\n\
- mov r1, r8\n\
- lsls r0, r1, 16\n\
- lsrs r3, r0, 16\n\
- cmp r3, 0x7\n\
- bls _08106BAE\n\
- ldr r2, [sp, 0x4]\n\
- lsls r0, r2, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0x7\n\
- bls _08106BA4\n\
- add sp, 0xC\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .syntax divided\n");
-}
-#endif
-
-static void sub_8106C40(u8 arg0, u8 arg1)
-{
- u8 x, y;
-
- LoadPalette(gPictureFramePalettes, 0, sizeof(gPictureFramePalettes));
- if (arg1 == 1)
- {
- switch (gUnknown_03005E8C->contestType / 3)
- {
- case CONTEST_COOL:
- RLUnCompVram(gPictureFrameTiles_0, (void *)VRAM);
- RLUnCompWram(gPictureFrameTilemap_0, gUnknown_03005E10);
- break;
- case CONTEST_BEAUTY:
- RLUnCompVram(gPictureFrameTiles_1, (void *)VRAM);
- RLUnCompWram(gPictureFrameTilemap_1, gUnknown_03005E10);
- break;
- case CONTEST_CUTE:
- RLUnCompVram(gPictureFrameTiles_2, (void *)VRAM);
- RLUnCompWram(gPictureFrameTilemap_2, gUnknown_03005E10);
- break;
- case CONTEST_SMART:
- RLUnCompVram(gPictureFrameTiles_3, (void *)VRAM);
- RLUnCompWram(gPictureFrameTilemap_3, gUnknown_03005E10);
- break;
- case CONTEST_TOUGH:
- RLUnCompVram(gPictureFrameTiles_4, (void *)VRAM);
- RLUnCompWram(gPictureFrameTilemap_4, gUnknown_03005E10);
- break;
- }
-
-#define VRAM_PICTURE_DATA(x, y) (((u16 *)(VRAM + 0x6000))[(y) * 32 + (x)])
-
- // Set the background
- for (y = 0; y < 20; y++)
- {
- for (x = 0; x < 32; x++)
- VRAM_PICTURE_DATA(x, y) = 0x1015;
- }
-
- // Copy the image frame
- for (y = 0; y < 10; y++)
- {
- for (x = 0; x < 18; x++)
- VRAM_PICTURE_DATA(x + 6, y + 2) = (*gUnknown_03005E10)[y + 2][x + 6];
- }
-
- // Re-set the entire top row to the first top frame part
- for (x = 0; x < 16; x++)
- VRAM_PICTURE_DATA(x + 7, 2) = (*gUnknown_03005E10)[2][7];
-
-#undef VRAM_PICTURE_DATA
- }
- else if (arg0 < 8)
- {
- RLUnCompVram(gPictureFrameTiles_5, (void *)VRAM);
- RLUnCompVram(gPictureFrameTilemap_5, (void *)(VRAM + 0x6000));
- }
- else
- {
- switch (gUnknown_03005E8C->contestType / 3)
- {
- case CONTEST_COOL:
- RLUnCompVram(gPictureFrameTiles_0, (void *)VRAM);
- RLUnCompVram(gPictureFrameTilemap_0, (void *)(VRAM + 0x6000));
- break;
- case CONTEST_BEAUTY:
- RLUnCompVram(gPictureFrameTiles_1, (void *)VRAM);
- RLUnCompVram(gPictureFrameTilemap_1, (void *)(VRAM + 0x6000));
- break;
- case CONTEST_CUTE:
- RLUnCompVram(gPictureFrameTiles_2, (void *)VRAM);
- RLUnCompVram(gPictureFrameTilemap_2, (void *)(VRAM + 0x6000));
- break;
- case CONTEST_SMART:
- RLUnCompVram(gPictureFrameTiles_3, (void *)VRAM);
- RLUnCompVram(gPictureFrameTilemap_3, (void *)(VRAM + 0x6000));
- break;
- case CONTEST_TOUGH:
- RLUnCompVram(gPictureFrameTiles_4, (void *)VRAM);
- RLUnCompVram(gPictureFrameTilemap_4, (void *)(VRAM + 0x6000));
- break;
- }
- }
-}
-
-static void sub_8106E98(u8 arg0)
-{
- //Some hacks just to get the asm to match
-#ifndef NONMATCHING
- asm(""::"r"(arg0));
-#endif
-
- gMain.oamBuffer[0] = gOamData_83F6138;
- gMain.oamBuffer[0].tileNum = 0;
-
-#ifndef NONMATCHING
- if (arg0) arg0 = gMain.oamBuffer[0].tileNum;
-#endif
-
- gMain.oamBuffer[0].x = 88;
- gMain.oamBuffer[0].y = 24;
-}
-
-static u8 sub_8106EE0(u8 arg0)
-{
- u8 contestType;
-
- if (arg0 < 8)
- contestType = gUnknown_03005E8C->contestType;
- else
- contestType = gUnknown_03005E8C->contestType / 3;
-
- switch (contestType)
- {
- case CONTEST_COOL:
- return CONTESTRESULT_COOL;
- case CONTEST_BEAUTY:
- return CONTESTRESULT_BEAUTY;
- case CONTEST_CUTE:
- return CONTESTRESULT_CUTE;
- case CONTEST_SMART:
- return CONTESTRESULT_SMART;
- case CONTEST_TOUGH:
- return CONTESTRESULT_TOUGH;
- }
-
- return contestType;
-}
-
-static void sub_8106F4C(void)
-{
- gUnknown_03005E90 = &ewram15E00.unk2017e00;
- gUnknown_03005E10 = &ewram15E00.unk2015e00;
-}
-
-static void sub_8106F6C(u8 arg0)
-{
- gUnknown_03005E20.var_4 = gUnknown_03005E10;
- gUnknown_03005E20.var_8 = gUnknown_03005E90;
- gUnknown_03005E20.var_18 = 0;
- gUnknown_03005E20.var_1F = gUnknown_03005E8C->var0;
- gUnknown_03005E20.var_19 = 0;
- gUnknown_03005E20.var_1A = 0;
- gUnknown_03005E20.var_1B = 64;
- gUnknown_03005E20.var_1C = 64;
- gUnknown_03005E20.var_1D = 64;
- gUnknown_03005E20.var_1E = 64;
-
- switch (arg0)
- {
- case CONTESTRESULT_SMART:
- case CONTESTRESULT_TOUGH:
- gUnknown_03005E20.var_14 = 3;
- break;
- case CONTESTRESULT_COOL:
- case CONTESTRESULT_BEAUTY:
- case CONTESTRESULT_CUTE:
- default:
- gUnknown_03005E20.var_14 = 1;
- break;
- }
-
- gUnknown_03005E20.var_16 = 2;
- gUnknown_03005E20.var_0 = arg0;
- gUnknown_03005E20.var_10 = 0x6010000;
-
- sub_80FC7A0(&gUnknown_03005E20);
- sub_80FDA18(&gUnknown_03005E20);
- sub_80FD8CC(&gUnknown_03005E20);
-
- LoadPalette(gUnknown_03005E90, 256, 256 * 2);
-}
-
-static void sub_8107090(u8 arg0, u8 arg1)
-{
- sub_8106F4C();
- sub_8106AC4(gUnknown_03005E8C->var8, 0);
- sub_8106F6C(sub_8106EE0(arg0));
- sub_8106E98(arg0);
- sub_8106C40(arg0, arg1);
-}
diff --git a/src/scene/credits.c b/src/scene/credits.c
deleted file mode 100644
index e31e2c797..000000000
--- a/src/scene/credits.c
+++ /dev/null
@@ -1,1677 +0,0 @@
-#include "global.h"
-#include "data2.h"
-#include "decompress.h"
-#include "event_data.h"
-#include "hall_of_fame.h"
-#include "intro_credits_graphics.h"
-#include "m4a.h"
-#include "main.h"
-#include "menu.h"
-#include "palette.h"
-#include "pokedex.h"
-#include "random.h"
-#include "constants/songs.h"
-#include "sound.h"
-#include "constants/species.h"
-#include "starter_choose.h"
-#include "task.h"
-#include "trig.h"
-#include "ewram.h"
-
-asm(".set REG_BASE, 0x4000000");
-asm(".set OFFSET_REG_BLDCNT, 0x50");
-asm(".set OFFSET_REG_BLDALPHA, 0x52");
-asm(".set REG_BLDCNT, REG_BASE + OFFSET_REG_BLDCNT");
-asm(".set REG_BLDALPHA, REG_BASE + OFFSET_REG_BLDALPHA");
-
-enum
-{
- PAGE_TITLE,
- PAGE_DIRECTOR,
- PAGE_ART_DIRECTOR,
- PAGE_BATTLE_DIRECTOR,
- PAGE_MAIN_PROGRAMMER,
- PAGE_BATTLE_SYSTEM_PROGRAMMER,
- PAGE_PROGRAMMERS_1,
- PAGE_PROGRAMMERS_2,
- PAGE_PROGRAMMERS_3,
- PAGE_MAIN_GRAHPICS_DESIGNER,
- PAGE_POKEMON_GRAHPIC_DESIGNERS_1,
- PAGE_POKEMON_GRAHPIC_DESIGNERS_2,
- PAGE_POKEMON_GRAHPIC_DESIGNERS_3,
- PAGE_POKEMON_DESIGNERS_1,
- PAGE_POKEMON_DESIGNERS_2,
- PAGE_MUSIC_COMPOSITION,
- PAGE_SOUND_EFFECTS,
- PAGE_GAME_DESIGNERS_1,
- PAGE_GAME_DESIGNERS_2,
- PAGE_GAME_DESIGNERS_3,
- PAGE_PLOT_SCENARIO,
- PAGE_GAME_SCENARIO,
- PAGE_SCRIPT_DESIGNERS,
- PAGE_MAP_DESIGNERS,
- PAGE_MAP_DATA_DESIGNERS,
- PAGE_PARAMETRIC_DESIGNERS,
- PAGE_POKEDEX_TEXT,
- PAGE_ENVIRONMENT_TOOLS,
- PAGE_PRODUCT_TESTING,
- PAGE_SPECIAL_THANKS,
- PAGE_SPECIAL_THANKS_1,
- PAGE_SPECIAL_THANKS_2,
- PAGE_SPECIAL_THANKS_3,
- PAGE_INFORMATION_SUPERVISORS,
- PAGE_COORDINATORS,
- PAGE_TASK_MANAGERS,
- PAGE_PRODUCERS,
- PAGE_EXECUTIVE_DIRECTOR,
- PAGE_EXECUTIVE_PRODUCERS_1,
- PAGE_EXECUTIVE_PRODUCERS_2,
- PAGE_TRANSLATION_COORDINATOR,
- PAGE_TRANSLATORS,
- PAGE_PROGRAMMERS,
- PAGE_GRAPHIC_DESIGNERS,
- PAGE_PRODUCT_SUPPORT,
-
-#if ENGLISH
- PAGE_ARTWORK,
- PAGE_TEXT_EDITOR,
- PAGE_NOA_TESTING,
- PAGE_BRAILLE_CODE_CHECK_1,
- PAGE_BRAILLE_CODE_CHECK_2,
-#elif GERMAN
- PAGE_NOE_TESTING,
- PAGE_BRAILLE_CODE_CHECK_1,
-#endif
-
- PAGE_SPECIAL_THANKS_4,
- PAGE_SPECIAL_THANKS_5,
-
- PAGE_COUNT
-};
-
-#if ENGLISH
-#define POKEMON_TILE_COUNT 68
-#define LAST_PAGE (PAGE_TEXT_EDITOR)
-#define UNK_DEFINE_45 (0x45)
-#define UNK_DEFINE_82 (0x82)
-#define UNK_DEF_1F3 (499)
-#elif GERMAN
-#define POKEMON_TILE_COUNT 65
-#define LAST_PAGE (PAGE_NOE_TESTING)
-#define UNK_DEFINE_45 (8)
-#define UNK_DEFINE_82 (0x8D)
-#define UNK_DEF_1F3 (554)
-#endif
-
-#define COLOR_DARK_GREEN 0x1967
-#define COLOR_LIGHT_GREEN 0x328D
-
-enum
-{
- TDA_0 = 0,
- TDA_TASK_C_ID = 1,
- TDA_TASK_E_ID = 2,
- TDA_TASK_D_ID = 3,
- TDA_4 = 4,
- TDA_PLAYER_CYCLIST = 5,
- TDA_RIVAL_CYCLIST = 6,
- TDA_7 = 7, // Has something to do with the bike scene
- TDA_11 = 11, // Gets set depending on whether the bike or the grass scene should be shown
- TDA_12 = 12,
- TDA_13 = 13,
- TDA_14 = 14,
- TDA_TASK_B_ID = 15,
-
- // Appears to be responsible for text
- TDB_0 = 0,
- TDB_TASK_A_ID = 1,
- TDB_CURRENT_PAGE = 2,
- TDB_3 = 3,
-
- TDC_0 = 0,
- TDC_1 = 1,
- TDC_2 = 2,
- TDC_3 = 3,
- TDC_4 = 4,
- TDC_5 = 5,
-
- TDD_STATE = 0,
- TDD_TASK_A_ID = 1,
- TDD_2 = 2,
- TDD_3 = 3,
-
- TDE_0 = 0,
- TDE_1 = 1,
- TDE_TASK_A_ID = 2,
-};
-
-
-struct Unk201C000
-{
- u16 unk0[POKEMON_TILE_COUNT];
- u16 unk88;
- u16 unk8A;
- u16 unk8C;
- u16 unk8E;
- u16 unk90[386];
- u16 unk394;
-};
-
-struct CreditsEntry
-{
- u8 var_0;
- const u8 *text;
-};
-
-extern u8 unk_201e800[0x800];
-extern u8 unk_201f000[0x800];
-
-extern struct SpriteTemplate gUnknown_02024E8C;
-
-extern u16 gUnknown_02039358;
-extern s16 gUnknown_0203935A;
-extern s16 gUnknown_0203935C;
-
-static EWRAM_DATA s16 gUnknown_02039320 = 0;
-static EWRAM_DATA u16 gUnknown_02039322 = 0; // TASK A
-EWRAM_DATA u8 gUnknown_02039324 = 0;
-static EWRAM_DATA u8 gUnknown_02039325 = 0;
-
-extern u8 gReservedSpritePaletteCount;
-
-// data/hall_of_fame
-extern void *gUnknown_0840B5A0[];
-
-// data/credits
-const u16 gUnknown_0840B7BC[] = INCBIN_U16("graphics/credits/palette_1.gbapal");
-const u8 gUnknown_0840B7FC[] = INCBIN_U8("graphics/credits/ampersand.4bpp");
-
-void spritecb_814580C(struct Sprite *sprite);
-
-const u8 gUnknown_0840B83C[] =
-{
- 0, 1, 0,
- 0xFF, 1, 0xFF,
- 0xFF, 1, 0xFF,
- 0xFF, 1, 0xFF,
- 0xFF, 1, 0xFF,
-};
-
-const u8 gUnknown_0840B84B[] =
-{
- 1, 0xFF, 1,
- 1, 0xFF, 1,
- 1, 2, 1,
- 1, 0xFF, 1,
- 1, 0xFF, 1,
-};
-
-const u8 gUnknown_0840B85A[] =
-{
- 1, 0, 0,
- 1, 0xFF, 0xFF,
- 1, 2, 2,
- 1, 0xFF, 0xFF,
- 1, 0x80, 0x80,
-};
-
-const u8 gUnknown_0840B869[] =
-{
- 1, 3, 1,
- 1, 4, 1,
- 1, 5, 1,
- 1, 0xC4, 1,
- 1, 0xC3, 1,
-};
-
-const u8 gUnknown_0840B878[] =
-{
- 1, 6, 7,
- 1, 8, 9,
- 1, 0xFF, 1,
- 1, 0x88, 0x89,
- 1, 0x86, 0x87,
-#ifdef GERMAN
- 1, 0, 0,
- 1, 0xFF, 0xFF,
- 1, 0x80, 0x8A,
- 1, 0xFF, 0xFF,
- 1, 0xFF, 0xFF,
- 0, 1, 0,
- 0xFF, 1, 0xFF,
- 0xFF, 1, 0xFF,
- 0xFF, 1, 0xFF,
- 0x80, 1, 0x80,
-#endif
-};
-
-#ifdef GERMAN
-#include "../data/credits_de.h"
-#else
-#include "../data/credits_en.h"
-#endif
-
-const u8 gUnknown_0840CA00[][2] =
-{
- {104, 36},
- {120, 36},
- {136, 36},
-};
-
-static const union AnimCmd gSpriteAnim_840CA08[] =
-{
- ANIMCMD_FRAME(0, 8),
- ANIMCMD_FRAME(64, 8),
- ANIMCMD_FRAME(128, 8),
- ANIMCMD_FRAME(192, 8),
- ANIMCMD_JUMP(0),
-};
-
-static const union AnimCmd gSpriteAnim_840CA1C[] =
-{
- ANIMCMD_FRAME(0, 4),
- ANIMCMD_FRAME(64, 4),
- ANIMCMD_FRAME(128, 4),
- ANIMCMD_FRAME(192, 4),
- ANIMCMD_JUMP(0),
-};
-
-static const union AnimCmd gSpriteAnim_840CA30[] =
-{
- ANIMCMD_FRAME(256, 4),
- ANIMCMD_FRAME(320, 4),
- ANIMCMD_FRAME(384, 4),
- ANIMCMD_END,
-};
-
-static const union AnimCmd gSpriteAnim_840CA40[] =
-{
- ANIMCMD_FRAME(384, 30),
- ANIMCMD_FRAME(320, 30),
- ANIMCMD_FRAME(256, 30),
- ANIMCMD_FRAME(256, 30),
- ANIMCMD_END,
-};
-
-static const union AnimCmd *const gSpriteAnimTable_0840CA54[] =
-{
- gSpriteAnim_840CA08,
- gSpriteAnim_840CA1C,
- gSpriteAnim_840CA30,
- gSpriteAnim_840CA40,
-};
-
-static const union AnimCmd gSpriteAnim_840CA64[] =
-{
- ANIMCMD_FRAME(0, 8),
- ANIMCMD_FRAME(64, 8),
- ANIMCMD_FRAME(128, 8),
- ANIMCMD_FRAME(192, 8),
- ANIMCMD_JUMP(0),
-};
-
-static const union AnimCmd gSpriteAnim_840CA78[] =
-{
- ANIMCMD_FRAME(0, 4),
- ANIMCMD_FRAME(64, 4),
- ANIMCMD_FRAME(128, 4),
- ANIMCMD_FRAME(192, 4),
- ANIMCMD_JUMP(0),
-};
-
-static const union AnimCmd gSpriteAnim_840CA8C[] =
-{
- ANIMCMD_FRAME(0, 4),
- ANIMCMD_END,
-};
-
-static const union AnimCmd *const gSpriteAnimTable_0840CA94[] =
-{
- gSpriteAnim_840CA64,
- gSpriteAnim_840CA78,
- gSpriteAnim_840CA8C,
-};
-
-static const struct SpriteSheet gUnknown_0840CAA0[] = {{ewram1E000_2, 6144, 1001}, {0}};
-static const struct SpritePalette gUnknown_0840CAB0[] = {{ewram_1F800_2, 1001}, {0}};
-
-static const struct OamData gOamData_840CAC0 =
-{
- .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_840CAC8[] =
-{
- ANIMCMD_FRAME(0, 8),
- ANIMCMD_END,
-};
-
-static const union AnimCmd gSpriteAnim_840CAD0[] =
-{
- ANIMCMD_FRAME(64, 8),
- ANIMCMD_END,
-};
-
-static const union AnimCmd gSpriteAnim_840CAD8[] =
-{
- ANIMCMD_FRAME(128, 8),
- ANIMCMD_END,
-};
-
-static const union AnimCmd *const gSpriteAnimTable_840CAE0[] =
-{
- gSpriteAnim_840CAC8,
- gSpriteAnim_840CAD0,
- gSpriteAnim_840CAD8,
-};
-
-static const struct SpriteTemplate gSpriteTemplate_840CAEC =
-{
- .tileTag = 1001,
- .paletteTag = 1001,
- .oam = &gOamData_840CAC0,
- .anims = gSpriteAnimTable_840CAE0,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = spritecb_814580C,
-};
-
-// graphics
-extern u8 gCreditsCopyrightEnd_Gfx[];
-extern u16 gIntroCopyright_Pal[16];
-
-static void task_a_8143B38(u8 taskIdA);
-static void task_a_8143B68(u8 taskIdA);
-static void task_a_8143BFC(u8 taskIdA);
-static void task_a_80C9BFC(u8 taskIdA);
-static void task_a_8143CC0(u8 taskIdA);
-static void task_a_8143D04(u8 taskIdA);
-static void task_a_8143EBC(u8 taskIdA);
-static void task_a_8143F04(u8 taskIdA);
-static void task_a_8143F3C(u8 taskIdA);
-static void task_a_8143FDC(u8 taskIdA);
-static void task_a_8144024(u8 taskIdA);
-static void task_a_8144080(u8 taskIdA);
-static void task_a_8144114(u8 taskIdA);
-static void sub_8144130(void);
-static void task_b_81441B8(u8 taskIdB);
-static u8 sub_8144454(u8 page, u8 taskIdA);
-static void task_d_8144514(u8 taskIdD);
-static bool8 sub_8144ECC(u8 data, u8 taskIdA);
-static void sub_81450AC(u8 taskIdA);
-static void sub_8145128(u16, u16, u16);
-static void sub_81452D0(u16 arg0, u16 palette);
-static void spritecb_player_8145378(struct Sprite *sprite);
-static void spritecb_rival_8145420(struct Sprite *sprite);
-static u8 sub_81456B4(u16 species, u16 x, u16 y, u16 position);
-static void sub_81458DC(void);
-
-static void vblank_8143948(void)
-{
- LoadOam();
- ProcessSpriteCopyRequests();
- TransferPlttBuffer();
-}
-
-static void sub_814395C(void)
-{
- RunTasks();
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
-
- if ((gMain.heldKeys & B_BUTTON)
- && gUnknown_02039324 != 0
- && gTasks[gUnknown_02039322].func == task_a_8143B68)
- {
- vblank_8143948();
- RunTasks();
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
- gUnknown_02039325 = 1;
- }
-}
-
-void sub_81439D0(void)
-{
- u8 taskIdA;
- s16 taskIdC;
- u8 taskIdB;
- u16 savedIme;
- struct Unk201C000 *c000;
-
- sub_8144130();
- SetVBlankCallback(NULL);
- ResetPaletteFade();
- ResetTasks();
-
- taskIdA = CreateTask(task_a_8143B38, 0);
-
- gTasks[taskIdA].data[TDA_4] = 0;
- gTasks[taskIdA].data[TDA_7] = 0;
- gTasks[taskIdA].data[TDA_11] = 0;
- gTasks[taskIdA].data[TDA_13] = 1;
-
- while (TRUE)
- {
- if (sub_8144ECC(0, taskIdA))
- break;
- }
-
- taskIdC = gTasks[taskIdA].data[TDA_TASK_C_ID];
- gTasks[taskIdC].data[TDC_0] = 40;
-
- Text_LoadWindowTemplate(&gWindowTemplate_81E7208);
- InitMenuWindow(&gWindowTemplate_81E7208);
- LoadPalette(&gUnknown_0840B7BC, 0x80, sizeof(gUnknown_0840B7BC));
-
- CpuCopy16(&gUnknown_0840B7FC, (void *)(VRAM + 0xBEE0), sizeof(gUnknown_0840B7FC));
-
- REG_BG0VOFS = 0xFFFC;
-
- taskIdB = CreateTask(task_b_81441B8, 0);
-
- gTasks[taskIdB].data[TDB_TASK_A_ID] = taskIdA;
- gTasks[taskIdA].data[TDA_TASK_B_ID] = taskIdB;
-
- BeginNormalPaletteFade(-1, 0, 16, 0, 0);
-
- savedIme = REG_IME;
- REG_IME = 0;
- REG_IE |= INTR_FLAG_VBLANK;
- REG_IME = savedIme;
- REG_DISPSTAT |= DISPSTAT_VBLANK_INTR;
-
-
- SetVBlankCallback(vblank_8143948);
- m4aSongNumStart(BGM_THANKFOR);
- SetMainCallback2(sub_814395C);
- gUnknown_02039325 = 0;
-
- c000 = &ewram1c000;
-
- sub_81458DC();
-
- c000->unk88 = 0;
- c000->unk8A = 0;
- c000->unk8C = 0;
-
- gUnknown_02039322 = taskIdA;
-}
-
-static void task_a_8143B38(u8 taskIdA)
-{
- if (!gPaletteFade.active)
- gTasks[taskIdA].func = task_a_8143B68;
-}
-
-static void task_a_8143B68(u8 taskIdA)
-{
- u16 data1;
-
- if (gTasks[taskIdA].data[TDA_4])
- {
- s16 taskIdC;
-
- taskIdC = gTasks[taskIdA].data[TDA_TASK_C_ID];
- gTasks[taskIdC].data[TDC_0] = 30;
-
- gTasks[taskIdA].data[TDA_12] = 0x100;
- gTasks[taskIdA].func = task_a_8143EBC;
- return;
- }
-
- gUnknown_02039320 = 0;
- data1 = gTasks[taskIdA].data[TDA_11];
-
- if (gTasks[taskIdA].data[TDA_11] == 1)
- {
- gTasks[taskIdA].data[TDA_13] = data1;
- gTasks[taskIdA].data[TDA_11] = 0;
- BeginNormalPaletteFade(-1, 0, 0, 16, 0);
- gTasks[taskIdA].func = task_a_8143BFC;
- }
- else if (gTasks[taskIdA].data[TDA_11] == 2)
- {
- gTasks[taskIdA].data[TDA_13] = data1;
- gTasks[taskIdA].data[TDA_11] = 0;
- BeginNormalPaletteFade(-1, 0, 0, 16, 0);
- gTasks[taskIdA].func = task_a_8143CC0;
- }
-}
-
-static void task_a_8143BFC(u8 taskIdA)
-{
- if (!gPaletteFade.active)
- {
- REG_DISPCNT = 0;
- sub_81450AC(taskIdA);
- gTasks[taskIdA].func = task_a_80C9BFC;
- }
-}
-
-static void task_a_80C9BFC(u8 taskIdA)
-{
- u16 backup;
-
- SetVBlankCallback(NULL);
-
- if (sub_8144ECC(gTasks[taskIdA].data[TDA_7], taskIdA))
- {
- BeginNormalPaletteFade(-1, 0, 16, 0, 0);
-
- backup = REG_IME;
- REG_IME = 0;
- REG_IE |= INTR_FLAG_VBLANK;
- REG_IME = backup;
- REG_DISPSTAT |= DISPSTAT_VBLANK_INTR;
-
- SetVBlankCallback(vblank_8143948);
- gTasks[taskIdA].func = task_a_8143B38;
- }
-}
-
-static void task_a_8143CC0(u8 taskIdA)
-{
- if (!gPaletteFade.active)
- {
- REG_DISPCNT = 0;
- sub_81450AC(taskIdA);
- gTasks[taskIdA].func = task_a_8143D04;
- }
-}
-
-void task_a_8143D04(u8 taskIdA)
-{
- switch (gMain.state)
- {
- default:
- case 0:
- {
- u16 i;
-
- ResetSpriteData();
- FreeAllSpritePalettes();
- gReservedSpritePaletteCount = 8;
- LZ77UnCompVram(&gBirchHelpGfx, (void *)VRAM);
- LZ77UnCompVram(&gBirchGrassTilemap, (void *)(VRAM + 0x3800));
- LoadPalette(gBirchBagGrassPal[0] + 1, 1, 31 * 2);
-
- for (i = 0; i < 0x800; i++)
- HALL_OF_FAME_SHEET_0[i] = 0x11;
- for (i = 0; i < 0x800; i++)
- HALL_OF_FAME_SHEET_1[i] = 0x22;
- for (i = 0; i < 0x800; i++)
- HALL_OF_FAME_SHEET_2[i] = 0x33;
-
- EWRAM_1F800[0] = 0;
- EWRAM_1F800[1] = 0x53FF; // light yellow
- EWRAM_1F800[2] = 0x529F; // light red
- EWRAM_1F800[3] = 0x7E94; // light blue
-
- LoadSpriteSheet(gUnknown_0840CAA0);
- LoadSpritePalette(gUnknown_0840CAB0);
-
- gMain.state += 1;
- break;
- }
- case 1:
- gTasks[taskIdA].data[TDA_TASK_D_ID] = CreateTask(task_d_8144514, 0);
- gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_STATE] = 1;
- gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_TASK_A_ID] = taskIdA;
- gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_2] = gTasks[taskIdA].data[TDA_7];
-
- BeginNormalPaletteFade(-1, 0, 16, 0, 0);
- REG_BG3HOFS = 0;
- REG_BG3VOFS = 32;
- REG_BG3CNT = BGCNT_PRIORITY(3) | 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;
-
- gMain.state = 0;
- gUnknown_0203935C = 0;
- gTasks[taskIdA].func = task_a_8143B38;
- break;
- }
-}
-
-static void task_a_8143EBC(u8 taskIdA)
-{
- if (gTasks[taskIdA].data[TDA_12])
- {
- gTasks[taskIdA].data[TDA_12] -= 1;
- return;
- }
-
- BeginNormalPaletteFade(-1, 12, 0, 16, 0);
- gTasks[taskIdA].func = task_a_8143F04;
-}
-
-static void task_a_8143F04(u8 taskIdA)
-{
- if (!gPaletteFade.active)
- {
- sub_81450AC(taskIdA);
- gTasks[taskIdA].func = task_a_8143F3C;
- }
-}
-
-static void task_a_8143F3C(u8 taskIdA)
-{
- u16 backup;
-
- sub_8144130();
- ResetPaletteFade();
- sub_8145128(0, 0x3800, 0);
- ResetSpriteData();
- FreeAllSpritePalettes();
- BeginNormalPaletteFade(-1, 8, 16, 0, 0);
-
- REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256;
- backup = REG_IME;
- REG_IME = 0;
- REG_IE |= INTR_FLAG_VBLANK;
- REG_IME = backup;
- REG_DISPSTAT |= DISPSTAT_VBLANK_INTR;
- REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON;
-
- gTasks[taskIdA].data[TDA_0] = 0x100;
- gTasks[taskIdA].func = task_a_8143FDC;
-}
-
-static void task_a_8143FDC(u8 taskIdA)
-{
- if (gTasks[taskIdA].data[TDA_0])
- {
- gTasks[taskIdA].data[TDA_0] -= 1;
- return;
- }
-
- BeginNormalPaletteFade(-1, 6, 0, 16, 0);
- gTasks[taskIdA].func = task_a_8144024;
-}
-
-static void task_a_8144024(u8 taskIdA)
-{
- if (!gPaletteFade.active)
- {
- sub_81452D0(0x3800, 0);
-
- BeginNormalPaletteFade(-1, 0, 0, 0, 0);
- gTasks[taskIdA].data[TDA_0] = 7200;
- gTasks[taskIdA].func = task_a_8144080;
- }
-}
-
-static void task_a_8144080(u8 taskIdA)
-{
- if (!gPaletteFade.active)
- {
- if (gTasks[taskIdA].data[TDA_0] == 0)
- {
- FadeOutBGM(4);
- BeginNormalPaletteFade(-1, 8, 0, 16, 0xFFFF);
- gTasks[taskIdA].func = task_a_8144114;
- return;
- }
-
- if (gMain.newKeys)
- {
- FadeOutBGM(4);
- BeginNormalPaletteFade(-1, 8, 0, 16, 0xFFFF);
- gTasks[taskIdA].func = task_a_8144114;
- return;
- }
-
- if (gTasks[taskIdA].data[TDA_0] == 7144)
- {
- FadeOutBGM(8);
- }
-
- if (gTasks[taskIdA].data[TDA_0] == 6840)
- m4aSongNumStart(BGM_END);
-
- gTasks[taskIdA].data[TDA_0] -= 1;
- }
-}
-
-static void task_a_8144114(u8 taskIdA)
-{
- if (!gPaletteFade.active)
- SoftReset(0xFF);
-}
-
-static void sub_8144130(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;
-
- DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE);
- DmaFill32(3, 0, (void *)OAM, OAM_SIZE);
- DmaFill16(3, 0, (void *)(PLTT + 2), PLTT_SIZE - 2);
-}
-
-static void task_b_81441B8(u8 taskIdB)
-{
- u16 i;
-
- switch (gTasks[taskIdB].data[TDB_0])
- {
- case 0:
- case 6:
- case 7:
- case 8:
- case 9:
- default:
- if (!gPaletteFade.active)
- {
- gTasks[taskIdB].data[TDB_0] = 1;
- gTasks[taskIdB].data[TDB_3] = 0x58;
- gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_14] = 0;
- gUnknown_02039320 = 0;
- }
- return;
- case 1:
- if (gTasks[taskIdB].data[TDB_3] != 0)
- {
- gTasks[taskIdB].data[TDB_3] -= 1;
- return;
- }
- gTasks[taskIdB].data[TDB_0] += 1;
- return;
- case 2:
- REG_DISPCNT &= ~DISPCNT_BG0_ON;
- if (gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].func == task_a_8143B68)
- {
- if (gTasks[taskIdB].data[TDB_CURRENT_PAGE] < PAGE_COUNT)
- {
- for (i = 0; i < 5; i++)
- sub_8072BD8(gCreditsEntryPointerTable[gTasks[taskIdB].data[TDB_CURRENT_PAGE]][i]->text, 0, 9 + i * 2, 240);
-
- gTasks[taskIdB].data[TDB_CURRENT_PAGE] += 1;
- gTasks[taskIdB].data[TDB_0] += 1;
-
- gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_14] = 1;
-
- if (gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_13] == 1)
- BeginNormalPaletteFade(0x300, 0, 16, 0, COLOR_LIGHT_GREEN);
- else
- BeginNormalPaletteFade(0x300, 0, 16, 0, COLOR_DARK_GREEN);
- return;
- }
- gTasks[taskIdB].data[TDB_0] = 10;
- return;
- }
- gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_14] = 0;
- return;
- case 3:
- REG_DISPCNT |= DISPCNT_BG0_ON;
- if (!gPaletteFade.active)
- {
- gTasks[taskIdB].data[TDB_3] = UNK_DEFINE_82;
- gTasks[taskIdB].data[TDB_0] += 1;
- }
- return;
- case 4:
- if (gTasks[taskIdB].data[TDB_3] != 0)
- {
- gTasks[taskIdB].data[TDB_3] -= 1;
- return;
- }
-
- if (sub_8144454((u8)gTasks[taskIdB].data[TDB_CURRENT_PAGE], (u8)gTasks[taskIdB].data[TDB_TASK_A_ID]))
- {
- gTasks[taskIdB].data[TDB_0] += 1;
- return;
- }
- gTasks[taskIdB].data[TDB_0] += 1;
- if (gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_13] == 1)
- BeginNormalPaletteFade(0x300, 0, 0, 16, COLOR_LIGHT_GREEN);
- else
- BeginNormalPaletteFade(0x300, 0, 0, 16, COLOR_DARK_GREEN);
- return;
- case 5:
- if (!gPaletteFade.active)
- {
- Menu_EraseWindowRect(0, 9, 29, 19);
- gTasks[taskIdB].data[TDB_0] = 2;
- }
- return;
-
- case 10:
- gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_4] = 1;
- DestroyTask(taskIdB);
- return;
- }
-}
-
-static u8 sub_8144454(u8 page, u8 taskIdA)
-{
- // Starts with bike + ocean + morning
-
- if (page == PAGE_PROGRAMMERS_1)
- {
- // Grass patch
- gTasks[taskIdA].data[TDA_11] = 2;
- }
-
- if (page == PAGE_POKEMON_GRAHPIC_DESIGNERS_3)
- {
- // Bike + ocean + sunset
- gTasks[taskIdA].data[TDA_7] = 1;
- gTasks[taskIdA].data[TDA_11] = 1;
- }
-
- if (page == PAGE_GAME_DESIGNERS_2)
- {
- // Grass patch
- gTasks[taskIdA].data[TDA_11] = 2;
- }
-
- if (page == PAGE_MAP_DATA_DESIGNERS)
- {
- // Bike + forest + sunset
- gTasks[taskIdA].data[TDA_7] = 2;
- gTasks[taskIdA].data[TDA_11] = 1;
- }
-
- if (page == PAGE_SPECIAL_THANKS_1)
- {
- // Grass patch
- gTasks[taskIdA].data[TDA_11] = 2;
- }
-
- if (page == PAGE_TASK_MANAGERS)
- {
- // Bike + forest + sunset
- gTasks[taskIdA].data[TDA_7] = 3;
- gTasks[taskIdA].data[TDA_11] = 1;
- }
-
- if (page == PAGE_TRANSLATION_COORDINATOR)
- {
- // Grass patch
- gTasks[taskIdA].data[TDA_11] = 2;
- }
-
- if (page == LAST_PAGE)
- {
- // Bike + town + night
- gTasks[taskIdA].data[TDA_7] = 4;
- gTasks[taskIdA].data[TDA_11] = 1;
- }
-
- if (gTasks[taskIdA].data[TDA_11] != 0)
- {
- // Returns true if changed?
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void task_d_8144514(u8 taskIdD)
-{
- struct Unk201C000 *r6 = &ewram1c000;
- u8 r2;
-
- switch (gTasks[taskIdD].data[TDD_STATE])
- {
- case 0:
- break;
- case 1:
- if (r6->unk8A == 0 && gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].data[TDA_14] == 0)
- break;
- gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].data[TDA_14] = 0;
- gTasks[taskIdD].data[TDD_STATE]++;
- break;
- case 2:
- if (r6->unk88 == POKEMON_TILE_COUNT || gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].func != task_a_8143B68)
- break;
- r2 = sub_81456B4(r6->unk0[r6->unk8C], gUnknown_0840CA00[r6->unk8A][0], gUnknown_0840CA00[r6->unk8A][1], r6->unk8A);
- if (r6->unk8C < r6->unk8E - 1)
- {
- r6->unk8C++;
- gSprites[r2].data[3] = 50;
- }
- else
- {
- r6->unk8C = 0;
- gSprites[r2].data[3] = 512;
- }
- r6->unk88++;
- if (r6->unk8A == 2)
- r6->unk8A = 0;
- else
- r6->unk8A++;
- gTasks[taskIdD].data[TDD_3] = 50;
- gTasks[taskIdD].data[TDD_STATE]++;
- break;
- case 3:
- if (gTasks[taskIdD].data[TDD_3] != 0)
- gTasks[taskIdD].data[TDD_3]--;
- else
- gTasks[taskIdD].data[TDD_STATE] = 1;
- break;
- }
-}
-
-void task_c_8144664(u8 taskIdC)
-{
- switch (gTasks[taskIdC].data[TDC_0])
- {
- case 0:
- gUnknown_0203935A = Sin((gTasks[taskIdC].data[TDC_5] >> 1) & 0x7F, 12);
- gTasks[taskIdC].data[TDC_5]++;
- break;
- case 1:
- if (gUnknown_0203935A != 0)
- {
- gUnknown_0203935A = Sin((gTasks[taskIdC].data[TDC_5] >> 1) & 0x7F, 12);
- gTasks[taskIdC].data[TDC_5]++;
- }
- else
- {
- gSprites[gTasks[taskIdC].data[TDC_2]].data[0] = 2;
- gTasks[taskIdC].data[TDC_5] = 0;
- gTasks[taskIdC].data[TDC_0]++;
- }
- break;
- case 2:
- if (gTasks[taskIdC].data[TDC_5] < 64)
- {
- gTasks[taskIdC].data[TDC_5]++;
- gUnknown_0203935A = Sin(gTasks[taskIdC].data[TDC_5] & 0x7F, 20);
- }
- else
- {
- gTasks[taskIdC].data[TDC_0]++;
- }
- break;
- case 3:
- gSprites[gTasks[taskIdC].data[TDC_2]].data[0] = 3;
- gSprites[gTasks[taskIdC].data[TDC_3]].data[0] = 1;
- gTasks[taskIdC].data[TDC_4] = 120;
- gTasks[taskIdC].data[TDC_0]++;
- break;
- case 4:
- if (gTasks[taskIdC].data[TDC_4] != 0)
- {
- gTasks[taskIdC].data[TDC_4]--;
- }
- else
- {
- gTasks[taskIdC].data[TDC_5] = 64;
- gTasks[taskIdC].data[TDC_0]++;
- }
- break;
- case 5:
- if (gTasks[taskIdC].data[TDC_5] > 0)
- {
- gTasks[taskIdC].data[TDC_5]--;
- gUnknown_0203935A = Sin(gTasks[taskIdC].data[TDC_5] & 0x7F, 20);
- }
- else
- {
- gSprites[gTasks[taskIdC].data[TDC_2]].data[0] = 1;
- gTasks[taskIdC].data[TDC_0]++;
- }
- break;
- case 6:
- gTasks[taskIdC].data[TDC_0] = 50;
- break;
- case 10:
- gSprites[gTasks[taskIdC].data[TDC_3]].data[0] = 2;
- gTasks[taskIdC].data[TDC_0] = 50;
- break;
- case 20:
- gSprites[gTasks[taskIdC].data[TDC_2]].data[0] = 4;
- gTasks[taskIdC].data[TDC_0] = 50;
- break;
- case 30:
- gSprites[gTasks[taskIdC].data[TDC_2]].data[0] = 5;
- gSprites[gTasks[taskIdC].data[TDC_3]].data[0] = 3;
- gTasks[taskIdC].data[TDC_0] = 50;
- break;
- case 50:
- gTasks[taskIdC].data[TDC_0] = 0;
- break;
- }
-}
-
-void task_e_8144934(u8 taskIdE)
-{
- s16 taskIdC;
-
- switch (gTasks[taskIdE].data[TDE_0])
- {
- default:
- case 0:
- if (gTasks[taskIdE].data[TDE_1] != 0x7FFF)
- {
-
- if (gTasks[gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_B_ID]].data[TDB_CURRENT_PAGE] == PAGE_ART_DIRECTOR)
- {
- gTasks[gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_C_ID]].data[TDC_0] = 20;
- gTasks[taskIdE].data[TDE_1] = 0x7FFF;
- }
- }
- sub_8149020(0);
- break;
- case 1:
- sub_8149020(0);
- break;
- case 2:
- if (gTasks[taskIdE].data[TDE_1] != 0x7FFF)
- {
- taskIdC = gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_C_ID];
-
- // Floor to multiple of 128
- if ((gTasks[taskIdC].data[TDC_5] & -128) == 640)
- {
- gTasks[taskIdC].data[TDC_0] = 1;
- gTasks[taskIdE].data[TDE_1] = 0x7FFF;
- }
- }
- sub_8149020(1);
- break;
- case 3:
- if (gTasks[taskIdE].data[TDE_1] != 0x7FFF)
- {
-
- if (gTasks[taskIdE].data[TDE_1] == UNK_DEF_1F3)
- {
- gTasks[gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_C_ID]].data[TDC_0] = 10;
- gTasks[taskIdE].data[TDE_1] = 0x7FFF;
- }
- else
- {
- gTasks[taskIdE].data[TDE_1] += 1;
- }
- }
- sub_8149020(1);
- break;
- case 4:
- sub_8149020(2);
- break;
- }
-}
-
-static void sub_8144A68(u8 data, u8 taskIdA)
-{
- switch (data)
- {
- case 0:
- gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0;
- gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0;
- gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 272;
- gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 272;
- gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46;
- gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46;
- gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data[0] = 0;
- gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data[0] = 0;
- gTasks[taskIdA].data[TDA_0] = sub_8148EC0(0, 0x2000, 0x20, 8);
- break;
- case 1:
- gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0;
- gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0;
- gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 120;
- gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 272;
- gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46;
- gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46;
- gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data[0] = 0;
- gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data[0] = 0;
- gTasks[taskIdA].data[TDA_0] = sub_8148EC0(0, 0x2000, 0x20, 8);
- break;
- case 2:
- gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0;
- gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0;
- gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 120;
- gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 272;
- gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46;
- gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46;
- gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data[0] = 0;
- gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data[0] = 0;
- gTasks[taskIdA].data[TDA_0] = sub_8148EC0(1, 0x2000, 0x200, 8);
- break;
- case 3:
- gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0;
- gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0;
- gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 120;
- gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = -32;
- gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46;
- gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46;
- gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data[0] = 0;
- gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data[0] = 0;
- gTasks[taskIdA].data[TDA_0] = sub_8148EC0(1, 0x2000, 0x200, 8);
- break;
- case 4:
- gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0;
- gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0;
- gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 88;
- gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 152;
- gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46;
- gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46;
- gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data[0] = 0;
- gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data[0] = 0;
- gTasks[taskIdA].data[TDA_0] = sub_8148EC0(2, 0x2000, 0x200, 8);
- break;
- }
-
- gTasks[taskIdA].data[TDA_TASK_E_ID] = CreateTask(task_e_8144934, 0);
- gTasks[gTasks[taskIdA].data[TDA_TASK_E_ID]].data[TDE_0] = data;
- gTasks[gTasks[taskIdA].data[TDA_TASK_E_ID]].data[TDE_1] = 0;
- gTasks[gTasks[taskIdA].data[TDA_TASK_E_ID]].data[TDE_TASK_A_ID] = taskIdA;
-
- gTasks[taskIdA].data[TDA_TASK_C_ID] = CreateTask(task_c_8144664, 0);
- gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_0] = 0;
- gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_1] = taskIdA;
- gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_2] = gTasks[taskIdA].data[TDA_PLAYER_CYCLIST];
- gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_3] = gTasks[taskIdA].data[TDA_RIVAL_CYCLIST];
- gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_4] = 0;
-
- if (data == 2)
- gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_5] = UNK_DEFINE_45;
-}
-
-static bool8 sub_8144ECC(u8 data, u8 taskIdA)
-{
- u8 spriteId;
-
- switch (gMain.state)
- {
- default:
- case 0:
- REG_DISPCNT = 0;
- REG_BG3HOFS = 8;
- REG_BG3VOFS = 0;
- REG_BG2HOFS = 0;
- REG_BG2VOFS = 0;
- REG_BG1HOFS = 0;
- REG_BG1VOFS = 0;
- REG_BLDCNT = 0;
- REG_BLDALPHA = 0;
- ResetSpriteData();
- FreeAllSpritePalettes();
- gMain.state = 1;
- break;
- case 1:
- gUnknown_02039358 = 34;
- gUnknown_0203935A = 0;
- sub_8148CB0(data);
- gMain.state += 1;
- break;
- case 2:
- if (gSaveBlock2.playerGender == MALE)
- {
- LoadCompressedObjectPic(gIntro2BrendanSpriteSheet);
- LoadCompressedObjectPic(gUnknown_08416E34);
- LoadCompressedObjectPic(gIntro2BicycleSpriteSheet);
- LoadSpritePalettes(gIntro2SpritePalettes);
-
- spriteId = intro_create_brendan_sprite(120, 46);
- gTasks[taskIdA].data[TDA_PLAYER_CYCLIST] = spriteId;
- gSprites[spriteId].callback = spritecb_player_8145378;
- gSprites[spriteId].anims = gSpriteAnimTable_0840CA54;
-
- spriteId = intro_create_may_sprite(272, 46);
- gTasks[taskIdA].data[TDA_RIVAL_CYCLIST] = spriteId;
- gSprites[spriteId].callback = spritecb_rival_8145420;
- gSprites[spriteId].anims = gSpriteAnimTable_0840CA94;
- }
- else
- {
- LoadCompressedObjectPic(gIntro2MaySpriteSheet);
- LoadCompressedObjectPic(gUnknown_08416E24);
- LoadCompressedObjectPic(gIntro2BicycleSpriteSheet);
- LoadSpritePalettes(gIntro2SpritePalettes);
-
- spriteId = intro_create_may_sprite(120, 46);
- gTasks[taskIdA].data[TDA_PLAYER_CYCLIST] = spriteId;
- gSprites[spriteId].callback = spritecb_player_8145378;
- gSprites[spriteId].anims = gSpriteAnimTable_0840CA54;
-
- spriteId = intro_create_brendan_sprite(272, 46);
- gTasks[taskIdA].data[TDA_RIVAL_CYCLIST] = spriteId;
- gSprites[spriteId].callback = spritecb_rival_8145420;
- gSprites[spriteId].anims = gSpriteAnimTable_0840CA94;
- };
- gMain.state += 1;
- break;
- case 3:
- sub_8144A68(data, taskIdA);
- sub_8148E90(data);
- gMain.state = 0;
- return TRUE;
- }
- return FALSE;
-}
-
-static void sub_81450AC(u8 taskIdA)
-{
- if (gTasks[taskIdA].data[TDA_0] != 0)
- {
- DestroyTask(gTasks[taskIdA].data[TDA_0]);
- gTasks[taskIdA].data[TDA_0] = 0;
- }
-
- if (gTasks[taskIdA].data[TDA_TASK_C_ID] != 0)
- {
- DestroyTask(gTasks[taskIdA].data[TDA_TASK_C_ID]);
- gTasks[taskIdA].data[TDA_TASK_C_ID] = 0;
- }
-
- if (gTasks[taskIdA].data[TDA_TASK_E_ID] != 0)
- {
- DestroyTask(gTasks[taskIdA].data[TDA_TASK_E_ID]);
- gTasks[taskIdA].data[TDA_TASK_E_ID] = 0;
- }
-
- if (gTasks[taskIdA].data[TDA_TASK_D_ID] != 0)
- {
- DestroyTask(gTasks[taskIdA].data[TDA_TASK_D_ID]);
- gTasks[taskIdA].data[TDA_TASK_D_ID] = 0;
- }
-
- gUnknown_0203935C = 1;
-}
-
-static void sub_8145128(u16 arg0, u16 arg1, u16 arg2)
-{
- u16 baseTile;
- u16 i;
-
- LZ77UnCompVram(gCreditsCopyrightEnd_Gfx, (void *) (VRAM + arg0));
- LoadPalette(gIntroCopyright_Pal, arg2, sizeof(gIntroCopyright_Pal));
-
- baseTile = (arg2 / 16) << 12;
-
- for (i = 0; i < 32 * 32; i++)
- ((u16 *) (VRAM + arg1))[i] = baseTile + 1;
-
- for (i = 0; i < 21; i++)
- ((u16 *) (VRAM + arg1))[7 * 32 + 4 + i] = i + 2 + baseTile;
-
- for (i = 0; i < 20; i++)
- ((u16 *) (VRAM + arg1))[9 * 32 + 4 + i] = i + 23 + baseTile;
-
- for (i = 0; i < 23; i++)
- ((u16 *) (VRAM + arg1))[11 * 32 + 4 + i] = i + 43 + baseTile;
-
- for (i = 0; i < 12; i++)
- ((u16 *) (VRAM + arg1))[13 * 32 + 4 + i] = i + 66 + baseTile;
-}
-
-u16 sub_8145208(u8 arg0)
-{
- u16 out = (arg0 & 0x3F) + 80;
-
- if (arg0 == 0xFF)
- return 1;
-
- if (arg0 & (1 << 7))
- out |= 1 << 11;
- if (arg0 & (1 << 6))
- out |= 1 << 10;
-
- return out;
-}
-
-void sub_814524C(const u8 arg0[], u8 baseX, u8 baseY, u16 arg3, u16 palette)
-{
- u8 y, x;
- const u16 tileOffset = (palette / 16) << 12;
-
- for (y = 0; y < 5; y++)
- {
- for (x = 0; x < 3; x++)
- ((u16 *) (VRAM + arg3 + (baseY + y) * 64))[baseX + x] = tileOffset + sub_8145208(arg0[y * 3 + x]);
- }
-}
-
-static void sub_81452D0(u16 arg0, u16 palette)
-{
- u16 pos;
- u16 baseTile = (palette / 16) << 12;
-
- for (pos = 0; pos < 32 * 32; pos++)
- ((u16 *) (VRAM + arg0))[pos] = baseTile + 1;
-
-#if ENGLISH
- sub_814524C(gUnknown_0840B83C, 3, 7, arg0, palette);
- sub_814524C(gUnknown_0840B84B, 7, 7, arg0, palette);
- sub_814524C(gUnknown_0840B85A, 11, 7, arg0, palette);
- sub_814524C(gUnknown_0840B85A, 16, 7, arg0, palette);
- sub_814524C(gUnknown_0840B869, 20, 7, arg0, palette);
- sub_814524C(gUnknown_0840B878, 24, 7, arg0, palette);
-#elif GERMAN
- sub_814524C(gUnknown_0840B85A, 7, 7, arg0, palette);
- sub_814524C(gUnknown_0840B869, 11, 7, arg0, palette);
- sub_814524C(gUnknown_0840B878, 15, 7, arg0, palette);
- sub_814524C(gUnknown_0840B85A, 19, 7, arg0, palette);
-#endif
-}
-
-static void spritecb_player_8145378(struct Sprite *sprite)
-{
- if (gUnknown_0203935C != 0)
- {
- DestroySprite(sprite);
- return;
- }
-
- switch (sprite->data[0])
- {
- case 0:
- StartSpriteAnimIfDifferent(sprite, 0);
- break;
- case 1:
- StartSpriteAnimIfDifferent(sprite, 1);
- if (sprite->pos1.x > -32)
- sprite->pos1.x -= 1;
- break;
- case 2:
- StartSpriteAnimIfDifferent(sprite, 2);
- break;
- case 3:
- StartSpriteAnimIfDifferent(sprite, 3);
- break;
- case 4:
- StartSpriteAnimIfDifferent(sprite, 0);
- if (sprite->pos1.x > 120)
- sprite->pos1.x -= 1;
- break;
- case 5:
- StartSpriteAnimIfDifferent(sprite, 0);
- if (sprite->pos1.x > -32)
- sprite->pos1.x -= 1;
- break;
- }
-}
-
-static void spritecb_rival_8145420(struct Sprite *sprite)
-{
- if (gUnknown_0203935C != 0)
- {
- DestroySprite(sprite);
- return;
- }
-
- switch (sprite->data[0])
- {
- case 0:
- sprite->pos2.y = 0;
- StartSpriteAnimIfDifferent(sprite, 0);
- break;
- case 1:
- if (sprite->pos1.x > 200)
- StartSpriteAnimIfDifferent(sprite, 1);
- else
- StartSpriteAnimIfDifferent(sprite, 2);
- if (sprite->pos1.x > -32)
- sprite->pos1.x -= 2;
- sprite->pos2.y = -gUnknown_0203935A;
- break;
- case 2:
- sprite->data[7] += 1;
- StartSpriteAnimIfDifferent(sprite, 0);
- if ((sprite->data[7] & 3) == 0)
- sprite->pos1.x += 1;
- break;
- case 3:
- StartSpriteAnimIfDifferent(sprite, 0);
- if (sprite->pos1.x > -32)
- sprite->pos1.x -= 1;
- break;
- }
-}
-
-void spritecb_81454E0(struct Sprite *sprite)
-{
- if (gUnknown_0203935C)
- {
- DestroySprite(sprite);
- return;
- }
-
- sprite->data[7] += 1;
- switch (sprite->data[0])
- {
- case 0:
- default:
- sprite->oam.affineMode = 1;
- sprite->oam.matrixNum = sprite->data[1];
- sprite->data[2] = 16;
- SetOamMatrix(sprite->data[1], 0x10000 / sprite->data[2], 0, 0, 0x10000 / sprite->data[2]);
- sprite->invisible = FALSE;
- sprite->data[0] = 1;
- break;
- case 1:
- if (sprite->data[2] < 256)
- {
- sprite->data[2] += 8;
- SetOamMatrix(sprite->data[1], 0x10000 / sprite->data[2], 0, 0, 0x10000 / sprite->data[2]);
- }
- else
- {
- sprite->data[0] += 1;
- }
- switch (sprite->data[1])
- {
- case 1:
- if ((sprite->data[7] & 3) == 0)
- sprite->pos1.y += 1;
- sprite->pos1.x -= 2;
- break;
- case 2:
- break;
- case 3:
- if ((sprite->data[7] & 3) == 0)
- sprite->pos1.y += 1;
- sprite->pos1.x += 2;
- break;
- }
- break;
- case 2:
- if (sprite->data[3] != 0)
- {
- sprite->data[3] -= 1;
- }
- else
- {
- REG_BLDCNT = 0xF40;
- REG_BLDALPHA = 0x10;
- sprite->oam.objMode = 1;
- sprite->data[3] = 16;
- sprite->data[0] += 1;
- }
- break;
- case 3:
- if (sprite->data[3] != 0)
- {
- int data3;
- vu16 *reg;
-
- sprite->data[3] -= 1;
-
- reg = &REG_BLDALPHA;
- data3 = 16 - sprite->data[3];
- *reg = (data3 << 8) + sprite->data[3];
- }
- else
- {
- sprite->invisible = TRUE;
- sprite->data[0] = 10;
- }
- break;
- case 10:
- REG_BLDCNT = 0;
- REG_BLDALPHA = 0;
- DestroySprite(sprite);
- break;
- }
-}
-
-static u8 sub_81456B4(u16 species, u16 x, u16 y, u16 position)
-{
- u32 personality;
- const u8 *lzPaletteData;
- u8 spriteId;
- u8 spriteId2;
-
- species = NationalPokedexNumToSpecies(species);
- switch (species)
- {
- default:
- personality = 0;
- break;
- case SPECIES_SPINDA:
- personality = gSaveBlock2.pokedex.spindaPersonality;
- break;
- case SPECIES_UNOWN:
- personality = gSaveBlock2.pokedex.unownPersonality;
- break;
- }
-
- LoadSpecialPokePic(
- &gMonFrontPicTable[species],
- gMonFrontPicCoords[species].coords,
- gMonFrontPicCoords[species].y_offset,
- 0x2000000,
- gUnknown_0840B5A0[position],
- species,
- personality,
- 1
- );
-
- lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, 0, 0xFFFF);
- LoadCompressedPalette(lzPaletteData, 0x100 + (position * 16), 0x20);
- sub_8143648(position, position);
-
- spriteId = CreateSprite(&gUnknown_02024E8C, x, y, 0);
- gSprites[spriteId].oam.paletteNum = position;
- gSprites[spriteId].oam.priority = 1;
- gSprites[spriteId].data[1] = position + 1;
- gSprites[spriteId].invisible = TRUE;
- gSprites[spriteId].callback = spritecb_81454E0;
-
- spriteId2 = CreateSprite(&gSpriteTemplate_840CAEC, gSprites[spriteId].pos1.x, gSprites[spriteId].pos1.y, 1);
- gSprites[spriteId2].data[0] = spriteId;
-
- StartSpriteAnimIfDifferent(&gSprites[spriteId2], position);
-
- return spriteId;
-}
-
-void spritecb_814580C(struct Sprite *sprite)
-{
- if (gSprites[sprite->data[0]].data[0] == 10 || gUnknown_0203935C)
- {
- DestroySprite(sprite);
- return;
- }
-
- sprite->invisible = gSprites[sprite->data[0]].invisible;
- sprite->oam.objMode = gSprites[sprite->data[0]].oam.objMode;
- sprite->oam.affineMode = gSprites[sprite->data[0]].oam.affineMode;
- sprite->oam.matrixNum = gSprites[sprite->data[0]].oam.matrixNum;
- sprite->pos1.x = gSprites[sprite->data[0]].pos1.x;
- sprite->pos1.y = gSprites[sprite->data[0]].pos1.y;
-}
-
-static void sub_81458DC(void)
-{
- struct Unk201C000 *unk201C000 = &ewram1c000;
- u16 starter = SpeciesToNationalPokedexNum(GetStarterPokemon(VarGet(VAR_STARTER_MON)));
- u16 seenTypesCount;
- u16 page;
- u16 dexNum;
- u16 j;
-
- for (dexNum = 1, seenTypesCount = 0; dexNum < 386; dexNum++)
- {
- if (GetSetPokedexFlag(dexNum, 1))
- {
- unk201C000->unk90[seenTypesCount] = dexNum;
- seenTypesCount++;
- }
- }
-
- for (dexNum = seenTypesCount; dexNum < 386; dexNum++)
- unk201C000->unk90[dexNum] = 0;
-
- unk201C000->unk394 = seenTypesCount;
- if (unk201C000->unk394 < POKEMON_TILE_COUNT)
- unk201C000->unk8E = seenTypesCount;
- else
- unk201C000->unk8E = POKEMON_TILE_COUNT;
-
- j = 0;
- do
- {
- page = Random() % unk201C000->unk394;
- unk201C000->unk0[j] = unk201C000->unk90[page];
-
- j++;
- unk201C000->unk90[page] = 0;
- unk201C000->unk394--;
- if (page != unk201C000->unk394)
- {
- unk201C000->unk90[page] = unk201C000->unk90[unk201C000->unk394];
- unk201C000->unk90[unk201C000->unk394] = 0;
- }
- }
- while (unk201C000->unk394 != 0 && j < POKEMON_TILE_COUNT);
-
- if (unk201C000->unk8E < POKEMON_TILE_COUNT)
- {
- for (j = unk201C000->unk8E, page = 0; j < POKEMON_TILE_COUNT; j++)
- {
- unk201C000->unk0[j] = unk201C000->unk0[page];
-
- page++;
- if (page == unk201C000->unk8E)
- page = 0;
- }
- unk201C000->unk0[POKEMON_TILE_COUNT - 1] = starter;
- }
- else
- {
- for (dexNum = 0; unk201C000->unk0[dexNum] != starter && dexNum < POKEMON_TILE_COUNT; dexNum++);
-
- if (dexNum < unk201C000->unk8E - 1)
- {
- unk201C000->unk0[dexNum] = unk201C000->unk0[POKEMON_TILE_COUNT - 1];
- unk201C000->unk0[POKEMON_TILE_COUNT - 1] = starter;
- }
- else
- {
- unk201C000->unk0[POKEMON_TILE_COUNT - 1] = starter;
- }
- }
- unk201C000->unk8E = POKEMON_TILE_COUNT;
-}
diff --git a/src/scene/cute_sketch.c b/src/scene/cute_sketch.c
deleted file mode 100644
index 5317bc334..000000000
--- a/src/scene/cute_sketch.c
+++ /dev/null
@@ -1,164 +0,0 @@
-#include "global.h"
-#include "cute_sketch.h"
-#include "contest_painting.h"
-
-extern u16 (*gUnknown_03005DEC)[][32];
-extern u8 gUnknown_03005E00;
-extern u8 gUnknown_03005DFC;
-extern u8 gUnknown_03005DF8;
-extern u8 gUnknown_03005DF0;
-extern u8 gUnknown_03005E04;
-extern u8 gUnknown_03005DF4;
-
-extern u8 gUnknown_03005DE8;
-
-// this file's functions
-void sub_80FCAA4(void);
-void sub_80FCB5C(void);
-void sub_80FCD54(void);
-void sub_80FCEA4(void);
-void sub_80FCCBC(void);
-void sub_80FD06C(void);
-void sub_80FD114(void);
-void sub_80FCF3C(void);
-void sub_80FCAC4(void);
-void sub_80FCC18(u8);
-void sub_80FC92C(u8);
-void sub_80FC9E4(u8);
-void sub_80FD1C8(u16);
-u16 sub_80FD39C(u16*);
-u16 sub_80FD68C(u16*, u16*, u16*);
-
-void sub_80FC7A0(struct Unk03005E20* info)
-{
- gUnknown_03005DEC = info->var_4;
- gUnknown_03005E00 = info->var_1F;
- gUnknown_03005DE8 = info->var_19;
- gUnknown_03005DFC = info->var_1A;
- gUnknown_03005DF8 = info->var_1B;
- gUnknown_03005DF0 = info->var_1C;
- gUnknown_03005E04 = info->var_1D;
- gUnknown_03005DF4 = info->var_1E;
- switch (info->var_0)
- {
- case 2:
- sub_80FCAA4();
- break;
- case 8:
- sub_80FCB5C();
- break;
- case 9:
- sub_80FCD54();
- sub_80FCC18(gUnknown_03005E00);
- break;
- case 10:
- sub_80FCD54();
- sub_80FCEA4();
- sub_80FCCBC();
- case 31:
- sub_80FCEA4();
- break;
- case 11:
- sub_80FCD54();
- sub_80FD06C();
- sub_80FD06C();
- sub_80FD114();
- sub_80FCCBC();
- break;
- case 13:
- sub_80FCF3C();
- break;
- case 30:
- sub_80FCD54();
- break;
- case 32:
- sub_80FD06C();
- break;
- case 33:
- sub_80FD114();
- break;
- case 6:
- sub_80FCAC4();
- sub_80FC92C(3);
- break;
- case 36:
- sub_80FCD54();
- sub_80FD06C();
- sub_80FD114();
- sub_80FCCBC();
- sub_80FCB5C();
- sub_80FCB5C();
- sub_80FC92C(2);
- sub_80FC9E4(4);
- break;
- }
-}
-
-#define RGB2(r, g, b) (((b) << 10) | ((g) << 5) | (r))
-
-void sub_80FC92C(u8 a0) // it changes palette someway somehow... .__.
-{
- u8 i, j;
- for (i = 0; i < gUnknown_03005DF0; i++)
- {
- u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04];
- u16* pal = &var2[gUnknown_03005DE8];
- for (j = 0; j < gUnknown_03005DF8; j++, pal++)
- {
- if (!(0x8000 & *pal))
- {
- u8 val = (31 & *pal);
- val += a0;
- if (val > 31)
- val = 31;
-
- *pal = RGB2(val, val, val);
- }
- }
- }
-}
-
-void sub_80FC9E4(u8 a0)
-{
- u8 i, j;
- for (i = 0; i < gUnknown_03005DF0; i++)
- {
- u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04];
- u16* pal = &var2[gUnknown_03005DE8];
- for (j = 0; j < gUnknown_03005DF8; j++, pal++)
- {
- if (!(0x8000 & *pal))
- {
- u8 val = (31 & *pal);
- if (val > 31 - a0)
- val = 31 - (a0 >> 1);
-
- *pal = RGB2(val, val, val);
- }
- }
- }
-}
-
-void sub_80FCAA4(void)
-{
- u32 i;
- for (i = 0; i < 3200; i++)
- sub_80FD1C8(i);
-}
-
-void sub_80FCAC4(void)
-{
- u8 i, j;
- for (i = 0; i < gUnknown_03005DF0; i++)
- {
- u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04];
- u16* pal = &var2[gUnknown_03005DE8];
- for (j = 0; j < gUnknown_03005DF8; j++, pal++)
- {
- if (!(0x8000 & *pal))
- {
- *pal = sub_80FD39C(pal);
- }
- }
- }
-}
diff --git a/src/scene/egg_hatch.c b/src/scene/egg_hatch.c
deleted file mode 100644
index 282ad31fb..000000000
--- a/src/scene/egg_hatch.c
+++ /dev/null
@@ -1,838 +0,0 @@
-#include "global.h"
-#include "data2.h"
-#include "daycare.h"
-#include "decompress.h"
-#include "event_data.h"
-#include "ewram.h"
-#include "constants/items.h"
-#include "main.h"
-#include "menu.h"
-#include "naming_screen.h"
-#include "overworld.h"
-#include "palette.h"
-#include "pokemon.h"
-#include "random.h"
-#include "script.h"
-#include "constants/songs.h"
-#include "sound.h"
-#include "string_util.h"
-#include "strings2.h"
-#include "task.h"
-#include "text.h"
-#include "text_window.h"
-#include "trig.h"
-#include "trade.h"
-
-extern struct SpriteTemplate gUnknown_02024E8C;
-
-struct EggHatchData
-{
- u8 eggSpriteID;
- u8 pokeSpriteID;
- u8 CB2_state;
- u8 CB2_PalCounter;
- u8 eggPartyID;
- struct Window window;
- u8 tileDataStartOffset;
- u8 unused_39;
- u8 eggShardVelocityID;
-};
-
-struct EggHatchData* gEggHatchData;
-
-extern const u32 gUnknown_08D00000[];
-extern const u32 gUnknown_08D00524[];
-extern const u16 gUnknown_08D004E0[]; //palette
-extern const struct SpriteSheet sUnknown_0820A3B0;
-extern const struct SpriteSheet sUnknown_0820A3B8;
-extern const struct SpritePalette sUnknown_0820A3C0;
-
-bool8 GetSetPokedexFlag(u16 nationalNum, u8 caseID);
-u8 sav1_map_get_name(void);
-const struct CompressedSpritePalette* GetMonSpritePalStruct(struct Pokemon* mon); //gets pokemon palette address
-void sub_8080990(void);
-
-static void Task_EggHatch(u8 taskID);
-static void CB2_EggHatch_0(void);
-static void CB2_EggHatch_1(void);
-static void SpriteCB_Egg_0(struct Sprite* sprite);
-static void SpriteCB_Egg_1(struct Sprite* sprite);
-static void SpriteCB_Egg_2(struct Sprite* sprite);
-static void SpriteCB_Egg_3(struct Sprite* sprite);
-static void SpriteCB_Egg_4(struct Sprite* sprite);
-static void SpriteCB_Egg_5(struct Sprite* sprite);
-static void SpriteCB_EggShard(struct Sprite* sprite);
-static void EggHatchPrintMessage2(u8* src);
-static void EggHatchPrintMessage1(u8* src);
-static bool8 EggHatchUpdateWindowText(void);
-static void CreateRandomEggShardSprite(void);
-static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex);
-
-// graphics
-
-static const u16 sEggPalette[] = INCBIN_U16("graphics/pokemon/egg/palette.gbapal");
-static const u8 sEggHatchTiles[] = INCBIN_U8("graphics/misc/egg_hatch.4bpp");
-static const u8 sEggShardTiles[] = INCBIN_U8("graphics/misc/egg_shard.4bpp");
-
-static const struct OamData sOamData_820A378 =
-{
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = 0,
- .x = 0,
- .matrixNum = 0,
- .size = 2,
- .tileNum = 0,
- .priority = 1,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-static const union AnimCmd sSpriteAnim_820A380[] =
-{
- ANIMCMD_FRAME(0, 5),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_820A388[] =
-{
- ANIMCMD_FRAME(16, 5),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_820A390[] =
-{
- ANIMCMD_FRAME(32, 5),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_820A398[] =
-{
- ANIMCMD_FRAME(48, 5),
- ANIMCMD_END
-};
-
-static const union AnimCmd *const sSpriteAnimTable_820A3A0[] =
-{
- sSpriteAnim_820A380,
- sSpriteAnim_820A388,
- sSpriteAnim_820A390,
- sSpriteAnim_820A398,
-};
-
-static const struct SpriteSheet sUnknown_0820A3B0 =
-{
- .data = sEggHatchTiles,
- .size = 2048,
- .tag = 12345,
-};
-
-static const struct SpriteSheet sUnknown_0820A3B8 =
-{
- .data = sEggShardTiles,
- .size = 128,
- .tag = 23456,
-};
-
-static const struct SpritePalette sUnknown_0820A3C0 =
-{
- .data = sEggPalette,
- .tag = 54321
-};
-
-static const struct SpriteTemplate sSpriteTemplate_820A3C8 =
-{
- .tileTag = 12345,
- .paletteTag = 54321,
- .oam = &sOamData_820A378,
- .anims = sSpriteAnimTable_820A3A0,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallbackDummy
-};
-
-
-static const struct OamData sOamData_820A3E0 =
-{
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = 0,
- .x = 0,
- .matrixNum = 0,
- .size = 0,
- .tileNum = 0,
- .priority = 2,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-static const union AnimCmd sSpriteAnim_820A3E8[] =
-{
- ANIMCMD_FRAME(0, 5),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_820A3F0[] =
-{
- ANIMCMD_FRAME(1, 5),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_820A3F8[] =
-{
- ANIMCMD_FRAME(2, 5),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_820A400[] =
-{
- ANIMCMD_FRAME(3, 5),
- ANIMCMD_END
-};
-
-static const union AnimCmd *const sSpriteAnimTable_820A408[] =
-{
- sSpriteAnim_820A3E8,
- sSpriteAnim_820A3F0,
- sSpriteAnim_820A3F8,
- sSpriteAnim_820A400,
-};
-
-static const struct SpriteTemplate sSpriteTemplate_820A418 =
-{
- .tileTag = 23456,
- .paletteTag = 54321,
- .oam = &sOamData_820A3E0,
- .anims = sSpriteAnimTable_820A408,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCB_EggShard
-};
-
-// actual code
-
-static void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp)
-{
- u16 species;
- u32 personality, pokerus;
- u8 i, friendship, language, gameMet, markings;
- u16 moves[4];
- u32 ivs[6];
-
-
- species = GetMonData(egg, MON_DATA_SPECIES);
-
- for (i = 0; i < 4; i++)
- {
- moves[i] = GetMonData(egg, MON_DATA_MOVE1 + i);
- }
-
- personality = GetMonData(egg, MON_DATA_PERSONALITY);
-
- for (i = 0; i < 6; i++)
- {
- ivs[i] = GetMonData(egg, MON_DATA_HP_IV + i);
- }
-
- gameMet = GetMonData(egg, MON_DATA_MET_GAME);
- markings = GetMonData(egg, MON_DATA_MARKINGS);
- pokerus = GetMonData(egg, MON_DATA_POKERUS);
-
- CreateMon(temp, species, 5, 32, TRUE, personality, 0, 0);
-
- for (i = 0; i < 4; i++)
- {
- SetMonData(temp, MON_DATA_MOVE1 + i, (const u8 *) &moves[i]);
- }
-
- for (i = 0; i < 6; i++)
- {
- SetMonData(temp, MON_DATA_HP_IV + i, (const u8 *) &ivs[i]);
- }
-
- language = GAME_LANGUAGE;
- SetMonData(temp, MON_DATA_LANGUAGE, &language);
- SetMonData(temp, MON_DATA_MET_GAME, &gameMet);
- SetMonData(temp, MON_DATA_MARKINGS, &markings);
-
- friendship = 120;
- SetMonData(temp, MON_DATA_FRIENDSHIP, &friendship);
- SetMonData(temp, MON_DATA_POKERUS, (const u8 *) &pokerus);
-
- *egg = *temp;
-}
-
-static void AddHatchedMonToParty(u8 id)
-{
- u8 isEgg;
- u16 pokeNum;
- u8 name[12];
- u16 ball;
- u16 caughtLvl;
- u8 mapNameID;
- struct Pokemon* mon = &gPlayerParty[id];
-
- CreatedHatchedMon(mon, &gEnemyParty[0]);
- isEgg = 0;
- SetMonData(mon, MON_DATA_IS_EGG, &isEgg);
-
- pokeNum = GetMonData(mon, MON_DATA_SPECIES);
- GetSpeciesName(name, pokeNum);
- SetMonData(mon, MON_DATA_NICKNAME, name);
-
- pokeNum = SpeciesToNationalPokedexNum(pokeNum);
- GetSetPokedexFlag(pokeNum, 2);
- GetSetPokedexFlag(pokeNum, 3);
-
- GetMonNick(mon, gStringVar1);
-
- ball = ITEM_POKE_BALL;
- SetMonData(mon, MON_DATA_POKEBALL, (const u8*) &ball);
-
- caughtLvl = 0;
- SetMonData(mon, MON_DATA_MET_LEVEL, (const u8*) &caughtLvl);
-
- mapNameID = sav1_map_get_name();
- SetMonData(mon, MON_DATA_MET_LOCATION, &mapNameID);
-
- MonRestorePP(mon);
- CalculateMonStats(mon);
-}
-
-void ScriptHatchMon(void)
-{
- AddHatchedMonToParty(gSpecialVar_0x8004);
-}
-
-#ifdef NONMATCHING
-static bool8 sub_8042ABC(void* a, u8 b)
-{
-
-}
-
-#else
-__attribute__((naked))
-static bool8 sub_8042ABC(void* a, u8 b)
-{
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- sub sp, 0x20\n\
- adds r5, r0, 0\n\
- lsls r4, r1, 24\n\
- lsrs r4, 24\n\
- lsls r0, r4, 2\n\
- adds r0, r4\n\
- lsls r0, 4\n\
- adds r0, r5, r0\n\
- mov r1, sp\n\
- bl GetBoxMonNick\n\
- lsls r0, r4, 3\n\
- subs r0, r4\n\
- lsls r1, r0, 3\n\
- adds r0, r5, r1\n\
- adds r0, 0xC0\n\
- ldrh r0, [r0]\n\
- cmp r0, 0\n\
- beq _08042B40\n\
- adds r0, r1, 0\n\
- adds r0, 0xA0\n\
- adds r5, r0\n\
- adds r6, r5, 0\n\
- adds r6, 0x2C\n\
- mov r0, sp\n\
- adds r1, r6, 0\n\
- bl StringCompareWithoutExtCtrlCodes\n\
- cmp r0, 0\n\
- bne _08042B08\n\
- ldr r0, _08042B30 @ =gSaveBlock2\n\
- adds r1, r5, 0\n\
- adds r1, 0x24\n\
- bl StringCompareWithoutExtCtrlCodes\n\
- cmp r0, 0\n\
- beq _08042B40\n\
-_08042B08:\n\
- ldr r0, _08042B34 @ =gStringVar1\n\
- mov r1, sp\n\
- bl StringCopy\n\
- ldr r4, _08042B38 @ =gStringVar2\n\
- adds r1, r5, 0\n\
- adds r1, 0x24\n\
- adds r0, r4, 0\n\
- bl StringCopy\n\
- ldr r0, _08042B3C @ =gStringVar3\n\
- adds r1, r6, 0\n\
- bl StringCopy\n\
- adds r0, r4, 0\n\
- bl SanitizeNameString\n\
- movs r0, 0x1\n\
- b _08042B42\n\
- .align 2, 0\n\
-_08042B30: .4byte gSaveBlock2\n\
-_08042B34: .4byte gStringVar1\n\
-_08042B38: .4byte gStringVar2\n\
-_08042B3C: .4byte gStringVar3\n\
-_08042B40:\n\
- movs r0, 0\n\
-_08042B42:\n\
- add sp, 0x20\n\
- pop {r4-r6}\n\
- pop {r1}\n\
- bx r1\n\
- .syntax divided");
-}
-
-#endif // NONMATCHING
-
-bool8 sub_8042B4C(void)
-{
- return sub_8042ABC(&gSaveBlock1.daycare, gSpecialVar_0x8004);
-}
-
-static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID)
-{
- u8 r5 = 0;
- u8 spriteID = 0;
- struct Pokemon* mon = NULL;
-
- if (a0 == 0)
- {
- mon = &gPlayerParty[pokeID];
- r5 = 1;
- }
- if (a0 == 1)
- {
- mon = &gPlayerParty[pokeID];
- r5 = 3;
- }
- switch (switchID)
- {
- case 0:
- {
- u16 species = GetMonData(mon, MON_DATA_SPECIES);
- u32 pid = GetMonData(mon, MON_DATA_PERSONALITY);
- HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, ewram0_6, gUnknown_081FAF4C[2 * a0 + 1], species, pid);
- LoadCompressedObjectPalette(GetMonSpritePalStruct(mon));
- }
- break;
- case 1:
- GetMonSpriteTemplate_803C56C(GetMonSpritePalStruct(mon)->tag, r5);
- spriteID = CreateSprite(&gUnknown_02024E8C, 120, 70, 6);
- gSprites[spriteID].invisible = 1;
- gSprites[spriteID].callback = SpriteCallbackDummy;
- break;
- }
- return spriteID;
-}
-
-static void VBlankCB_EggHatch(void)
-{
- LoadOam();
- ProcessSpriteCopyRequests();
- TransferPlttBuffer();
-}
-
-void EggHatch(void)
-{
- ScriptContext2_Enable();
- CreateTask(Task_EggHatch, 10);
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
-}
-
-static void Task_EggHatch(u8 taskID)
-{
- if (!gPaletteFade.active)
- {
- SetMainCallback2(CB2_EggHatch_0);
- gFieldCallback = sub_8080990;
- DestroyTask(taskID);
- }
-}
-
-static void CB2_EggHatch_0(void)
-{
- switch (gMain.state)
- {
- case 0:
- REG_DISPCNT = 0;
- gEggHatchData = eEggHatchData;
- gEggHatchData->eggPartyID = gSpecialVar_0x8004;
- gEggHatchData->eggShardVelocityID = 0;
- ResetTasks();
- ResetSpriteData();
- FreeAllSpritePalettes();
- SetVBlankCallback(VBlankCB_EggHatch);
- gMain.state++;
- gSpecialVar_0x8005 = GetCurrentMapMusic();
- break;
- case 1:
- Text_LoadWindowTemplate(&gWindowTemplate_81E6F84);
- Text_InitWindowWithTemplate(&gEggHatchData->window, &gWindowTemplate_81E6F84);
- gEggHatchData->tileDataStartOffset = TextWindow_SetBaseTileNum(20);
- TextWindow_LoadStdFrameGraphics(&gEggHatchData->window);
- gMain.state++;
- break;
- case 2:
- LZDecompressVram(&gUnknown_08D00000, (void*)(VRAM));
- CpuSet(&gUnknown_08D00524, ewram0_7, 0x800);
- DmaCopy16(3, ewram0_7, (void*)(VRAM + 0x2800), 0x500);
- LoadCompressedPalette(&gUnknown_08D004E0, 0, 0x20);
- gMain.state++;
- break;
- case 3:
- LoadSpriteSheet(&sUnknown_0820A3B0);
- LoadSpriteSheet(&sUnknown_0820A3B8);
- LoadSpritePalette(&sUnknown_0820A3C0);
- gMain.state++;
- break;
- case 4:
- gEggHatchData->eggSpriteID = CreateSprite(&sSpriteTemplate_820A3C8, 0x78, 0x4B, 5);
- AddHatchedMonToParty(gEggHatchData->eggPartyID);
- gMain.state++;
- break;
- case 5:
- EggHatchCreateMonSprite(0, 0, gEggHatchData->eggPartyID);
- gMain.state++;
- break;
- case 6:
- gEggHatchData->pokeSpriteID = EggHatchCreateMonSprite(0, 1, gEggHatchData->eggPartyID);
- gMain.state++;
- break;
- case 7:
- REG_BG2CNT = 0x4C06;
- LoadPalette(gUnknown_0820C9F8, 0x10, 0xA0);
- DmaCopyLarge16(3, gUnknown_0820CA98, (void *)(VRAM + 0x4000), 0x1300, 0x1000);
- DmaCopy16Defvars(3, gUnknown_0820F798, (void *)(VRAM + 0x6000), 0x1000);
- gMain.state++;
- break;
- case 8:
- REG_BG1CNT = 0x501;
-
- REG_BG0HOFS = 0;
- REG_BG0VOFS = 0;
-
- REG_BG1HOFS = 0;
- REG_BG1VOFS = 0;
-
- REG_BG2HOFS = 0;
- REG_BG2VOFS = 0;
-
- SetMainCallback2(CB2_EggHatch_1);
- gEggHatchData->CB2_state = 0;
- break;
- }
-}
-
-static void EggHatchSetMonNickname(void)
-{
- SetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar3);
- SetMainCallback2(c2_exit_to_overworld_2_switch);
-}
-
-static void Task_EggHatchPlayBGM(u8 taskID)
-{
- if (gTasks[taskID].data[0] == 0)
- StopMapMusic();
- if (gTasks[taskID].data[0] == 1)
- PlayBGM(376);
- if (gTasks[taskID].data[0] > 60)
- {
- PlayBGM(377);
- DestroyTask(taskID);
- //return; task is destroyed, yet you increment the value?
- }
- gTasks[taskID].data[0]++;
-}
-
-static void CB2_EggHatch_1(void)
-{
- switch (gEggHatchData->CB2_state)
- {
- case 0:
- BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
- REG_DISPCNT = 0x1740;
- gEggHatchData->CB2_state++;
- CreateTask(Task_EggHatchPlayBGM, 5);
- break;
- case 1:
- if (!gPaletteFade.active)
- {
- gEggHatchData->CB2_PalCounter = 0;
- gEggHatchData->CB2_state++;
- }
- break;
- case 2:
- if (++gEggHatchData->CB2_PalCounter > 30)
- {
- gEggHatchData->CB2_state++;
- gSprites[gEggHatchData->eggSpriteID].callback = SpriteCB_Egg_0;
- }
- break;
- case 3:
- if (gSprites[gEggHatchData->eggSpriteID].callback == SpriteCallbackDummy)
- gEggHatchData->CB2_state++;
- break;
- case 4:
- GetMonNick(&gPlayerParty[gEggHatchData->eggPartyID], gStringVar1);
- StringExpandPlaceholders(gStringVar4, gOtherText_HatchedFromEgg);
- EggHatchPrintMessage2(gStringVar4);
- PlayFanfare(371);
- gEggHatchData->CB2_state++;
- break;
- case 5:
- if (IsFanfareTaskInactive())
- gEggHatchData->CB2_state++;
- break;
- case 6:
- if (IsFanfareTaskInactive())
- gEggHatchData->CB2_state++;
- break;
- case 7:
- GetMonNick(&gPlayerParty[gEggHatchData->eggPartyID], gStringVar1);
- StringExpandPlaceholders(gStringVar4, gOtherText_NickHatchPrompt);
- EggHatchPrintMessage1(gStringVar4);
- gEggHatchData->CB2_state++;
- break;
- case 8:
- if (EggHatchUpdateWindowText())
- {
- Menu_DrawStdWindowFrame(22, 8, 27, 13);
- InitYesNoMenu(22, 8, 4);
- gEggHatchData->CB2_state++;
- }
- break;
- case 9:
- {
- s8 menuInput;
- if ((menuInput = Menu_ProcessInputNoWrap_()) != -2)
- {
- if (menuInput != -1 && menuInput != 1)
- {
- u16 species;
- u8 gender;
- u32 personality;
-
- GetMonNick(&gPlayerParty[gEggHatchData->eggPartyID], gStringVar3);
- species = GetMonData(&gPlayerParty[gEggHatchData->eggPartyID], MON_DATA_SPECIES);
- gender = GetMonGender(&gPlayerParty[gEggHatchData->eggPartyID]);
- personality = GetMonData(&gPlayerParty[gEggHatchData->eggPartyID], MON_DATA_PERSONALITY, 0);
- DoNamingScreen(3, gStringVar3, species, gender, personality, EggHatchSetMonNickname);
- }
- else
- gEggHatchData->CB2_state++;
- }
- }
- break;
- case 10:
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gEggHatchData->CB2_state++;
- break;
- case 11:
- if (!gPaletteFade.active)
- SetMainCallback2(c2_exit_to_overworld_2_switch);
- break;
- }
- RunTasks();
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
-}
-
-static void SpriteCB_Egg_0(struct Sprite* sprite)
-{
- if (++sprite->data[0] > 20)
- {
- sprite->callback = SpriteCB_Egg_1;
- sprite->data[0] = 0;
- }
- else
- {
- sprite->data[1] = (sprite->data[1] + 20) & 0xFF;
- sprite->pos2.x = Sin(sprite->data[1], 1);
- if (sprite->data[0] == 15)
- {
- PlaySE(SE_BOWA);
- StartSpriteAnim(sprite, 1);
- CreateRandomEggShardSprite();
- }
- }
-}
-
-static void SpriteCB_Egg_1(struct Sprite* sprite)
-{
- if (++sprite->data[2] > 30)
- {
- if (++sprite->data[0] > 20)
- {
- sprite->callback = SpriteCB_Egg_2;
- sprite->data[0] = 0;
- sprite->data[2] = 0;
- }
- else
- {
- sprite->data[1] = (sprite->data[1] + 20) & 0xFF;
- sprite->pos2.x = Sin(sprite->data[1], 2);
- if (sprite->data[0] == 15)
- {
- PlaySE(SE_BOWA);
- StartSpriteAnim(sprite, 2);
- }
- }
- }
-}
-
-static void SpriteCB_Egg_2(struct Sprite* sprite)
-{
- if (++sprite->data[2] > 30)
- {
- if (++sprite->data[0] > 38)
- {
- u16 species;
-
- sprite->callback = SpriteCB_Egg_3;
- sprite->data[0] = 0;
- species = GetMonData(&gPlayerParty[gEggHatchData->eggPartyID], MON_DATA_SPECIES);
- gSprites[gEggHatchData->pokeSpriteID].pos2.x = 0;
- gSprites[gEggHatchData->pokeSpriteID].pos2.y = gMonFrontPicCoords[species].y_offset;
- }
- else
- {
- sprite->data[1] = (sprite->data[1] + 20) & 0xFF;
- sprite->pos2.x = Sin(sprite->data[1], 2);
- if (sprite->data[0] == 15)
- {
- PlaySE(SE_BOWA);
- StartSpriteAnim(sprite, 2);
- CreateRandomEggShardSprite();
- CreateRandomEggShardSprite();
- }
- if (sprite->data[0] == 30)
- PlaySE(SE_BOWA);
- }
- }
-}
-
-static void SpriteCB_Egg_3(struct Sprite* sprite)
-{
- if (++sprite->data[0] > 50)
- {
- sprite->callback = SpriteCB_Egg_4;
- sprite->data[0] = 0;
- }
-}
-
-static void SpriteCB_Egg_4(struct Sprite* sprite)
-{
- s16 i;
- if (sprite->data[0] == 0)
- BeginNormalPaletteFade(-1, -1, 0, 0x10, 0xFFFF);
- if (sprite->data[0] < 4u)
- {
- for (i = 0; i <= 3; i++)
- CreateRandomEggShardSprite();
- }
- sprite->data[0]++;
- if (!gPaletteFade.active)
- {
- PlaySE(SE_TAMAGO);
- sprite->invisible = 1;
- sprite->callback = SpriteCB_Egg_5;
- sprite->data[0] = 0;
- }
-}
-
-static void SpriteCB_Egg_5(struct Sprite* sprite)
-{
- if (sprite->data[0] == 0)
- {
- gSprites[gEggHatchData->pokeSpriteID].invisible = 0;
- StartSpriteAffineAnim(&gSprites[gEggHatchData->pokeSpriteID], 1);
- }
- if (sprite->data[0] == 8)
- BeginNormalPaletteFade(-1, -1, 0x10, 0, 0xFFFF);
- if (sprite->data[0] <= 9)
- gSprites[gEggHatchData->pokeSpriteID].pos1.y -= 1;
- if (sprite->data[0] > 40)
- sprite->callback = SpriteCallbackDummy;
- sprite->data[0]++;
-}
-
-static void SpriteCB_EggShard(struct Sprite* sprite)
-{
- sprite->data[4] += sprite->data[1];
- sprite->data[5] += sprite->data[2];
-
- sprite->pos2.x = sprite->data[4] / 256;
- sprite->pos2.y = sprite->data[5] / 256;
-
- sprite->data[2] += sprite->data[3];
-
- if (sprite->pos1.y + sprite->pos2.y > sprite->pos1.y + 20 && sprite->data[2] > 0)
- DestroySprite(sprite);
-}
-
-// Converts a number to Q8.8 fixed-point format
-#define Q_8_8(n) ((s16)((n) * 256))
-
-static const s16 sEggShardVelocities[][2] =
-{
- {Q_8_8(-1.5), Q_8_8(-3.75)},
- {Q_8_8(-5), Q_8_8(-3)},
- {Q_8_8(3.5), Q_8_8(-3)},
- {Q_8_8(-4), Q_8_8(-3.75)},
- {Q_8_8(2), Q_8_8(-1.5)},
- {Q_8_8(-0.5), Q_8_8(-6.75)},
- {Q_8_8(5), Q_8_8(-2.25)},
- {Q_8_8(-1.5), Q_8_8(-3.75)},
- {Q_8_8(4.5), Q_8_8(-1.5)},
- {Q_8_8(-1), Q_8_8(-6.75)},
- {Q_8_8(4), Q_8_8(-2.25)},
- {Q_8_8(-3.5), Q_8_8(-3.75)},
- {Q_8_8(1), Q_8_8(-1.5)},
- {Q_8_8(-3.515625), Q_8_8(-6.75)},
- {Q_8_8(4.5), Q_8_8(-2.25)},
- {Q_8_8(-0.5), Q_8_8(-7.5)},
- {Q_8_8(1), Q_8_8(-4.5)},
- {Q_8_8(-2.5), Q_8_8(-2.25)},
- {Q_8_8(2.5), Q_8_8(-7.5)},
-};
-
-static void CreateRandomEggShardSprite(void)
-{
- u16 spriteAnimIndex;
-
- s16 velocity1 = sEggShardVelocities[gEggHatchData->eggShardVelocityID][0];
- s16 velocity2 = sEggShardVelocities[gEggHatchData->eggShardVelocityID][1];
- gEggHatchData->eggShardVelocityID++;
- spriteAnimIndex = Random() % 4;
- CreateEggShardSprite(120, 60, velocity1, velocity2, 100, spriteAnimIndex);
-}
-
-static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex)
-{
- u8 spriteID = CreateSprite(&sSpriteTemplate_820A418, x, y, 4);
- gSprites[spriteID].data[1] = data1;
- gSprites[spriteID].data[2] = data2;
- gSprites[spriteID].data[3] = data3;
- StartSpriteAnim(&gSprites[spriteID], spriteAnimIndex);
-}
-
-static void EggHatchPrintMessage1(u8* src)
-{
- Text_InitWindow8002EB0(&gEggHatchData->window, src, gEggHatchData->tileDataStartOffset, 3, 15);
-}
-
-static void EggHatchPrintMessage2(u8* src)
-{
- Text_InitWindowAndPrintText(&gEggHatchData->window, src, gEggHatchData->tileDataStartOffset, 3, 15);
-}
-
-static bool8 EggHatchUpdateWindowText(void)
-{
- return Text_UpdateWindow(&gEggHatchData->window);
-}
diff --git a/src/scene/evolution_graphics.c b/src/scene/evolution_graphics.c
deleted file mode 100644
index b9ef5b402..000000000
--- a/src/scene/evolution_graphics.c
+++ /dev/null
@@ -1,614 +0,0 @@
-#include "global.h"
-#include "evolution_graphics.h"
-#include "sprite.h"
-#include "trig.h"
-#include "random.h"
-#include "decompress.h"
-#include "task.h"
-#include "sound.h"
-#include "constants/songs.h"
-#include "palette.h"
-
-// this file's functions
-static void EvoSparkle_DummySpriteCb(struct Sprite* sprite);
-static void EvoTask_BeginPreSet1_FadeAndPlaySE(u8 taskID);
-static void EvoTask_CreatePreEvoSparkleSet1(u8 taskID);
-static void EvoTask_WaitForPre1SparklesToGoUp(u8 taskID);
-static void EvoTask_BeginPreSparklesSet2(u8 taskID);
-static void EvoTask_CreatePreEvoSparklesSet2(u8 taskID);
-static void EvoTask_DestroyPreSet2Task(u8 taskID);
-static void EvoTask_BeginPostSparklesSet1(u8 taskID);
-static void EvoTask_CreatePostEvoSparklesSet1(u8 taskID);
-static void EvoTask_DestroyPostSet1Task(u8 taskID);
-static void EvoTask_BeginPostSparklesSet2_AndFlash(u8 taskID);
-static void EvoTask_CreatePostEvoSparklesSet2_AndFlash(u8 taskID);
-static void EvoTask_BeginPostSparklesSet2_AndFlash_Trade(u8 taskID);
-static void EvoTask_CreatePostEvoSparklesSet2_AndFlash_Trade(u8 taskID);
-static void EvoTask_DestroyPostSet2AndFlashTask(u8 taskID);
-
-static void sub_8149FC8(u8 taskID);
-static void sub_8149FEC(u8 taskID);
-static void PreEvoVisible_PostEvoInvisible_KillTask(u8 taskID);
-static void PreEvoInVisible_PostEvoVisible_KillTask(u8 taskID);
-static void sub_814A03C(u8 taskID);
-
-// const data
-static const u16 sEvoSparklePalette[] = INCBIN_U16("graphics/misc/evo_sparkle.gbapal");
-static const u8 sEvoSparkleTiles[] = INCBIN_U8("graphics/misc/evo_sparkle.4bpp.lz");
-
-static const struct CompressedSpriteSheet sEvoSparkleSpriteSheets[] =
-{
- {sEvoSparkleTiles, 0x20, 1001},
- {NULL, 0, 0}
-};
-static const struct SpritePalette sEvoSparkleSpritePals[] =
-{
- {sEvoSparklePalette, 1001},
- {NULL, 0}
-};
-
-static const struct OamData sOamData_EvoSparkle =
-{
- .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 sSpriteAnim_EvoSparkle[] =
-{
- ANIMCMD_FRAME(0, 8),
- ANIMCMD_END
-};
-
-static const union AnimCmd *const sSpriteAnimTable_EvoSparkle[] =
-{
- sSpriteAnim_EvoSparkle,
-};
-
-static const struct SpriteTemplate sEvoSparkleSpriteTemplate =
-{
- .tileTag = 1001,
- .paletteTag = 1001,
- .oam = &sOamData_EvoSparkle,
- .anims = sSpriteAnimTable_EvoSparkle,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = EvoSparkle_DummySpriteCb
-};
-
-static const s16 sEvoSparkleMatricies[] =
-{
- 0x3C0, 0x380, 0x340, 0x300, 0x2C0, 0x280, 0x240, 0x200, 0x1C0,
- 0x180, 0x140, 0x100, -4, 0x10, -3, 0x30, -2, 0x50,
- -1, 0x70, 0x1, 0x70, 0x2, 0x50, 0x3, 0x30, 0x4, 0x10
-};
-
-// code
-
-static void EvoSparkle_DummySpriteCb(struct Sprite* sprite)
-{
-
-}
-
-static void SetEvoSparklesMatrices(void)
-{
- u16 i;
- for (i = 0; i < 12; i++)
- {
- SetOamMatrix(20 + i, sEvoSparkleMatricies[i], 0, 0, sEvoSparkleMatricies[i]);
- }
-}
-
-static void SpriteCB_PreEvoSparkleSet1(struct Sprite* sprite)
-{
- if (sprite->pos1.y > 8)
- {
- u8 matrixNum;
-
- sprite->pos1.y = 88 - (sprite->data[7] * sprite->data[7]) / 80;
- sprite->pos2.y = Sin((u8)(sprite->data[6]), sprite->data[5]) / 4;
- sprite->pos2.x = Cos((u8)(sprite->data[6]), sprite->data[5]);
- sprite->data[6] += 4;
- if (sprite->data[7] & 1)
- sprite->data[5]--;
- sprite->data[7]++;
- if (sprite->pos2.y > 0)
- sprite->subpriority = 1;
- else
- sprite->subpriority = 20;
- matrixNum = sprite->data[5] / 4 + 20;
- if (matrixNum > 31)
- matrixNum = 31;
- sprite->oam.matrixNum = matrixNum;
- }
- else
- DestroySprite(sprite);
-}
-
-static void CreatePreEvoSparkleSet1(u8 arg0)
-{
- u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 88, 0);
- if (spriteID != MAX_SPRITES)
- {
- gSprites[spriteID].data[5] = 48;
- gSprites[spriteID].data[6] = arg0;
- gSprites[spriteID].data[7] = 0;
- gSprites[spriteID].oam.affineMode = 1;
- gSprites[spriteID].oam.matrixNum = 31;
- gSprites[spriteID].callback = SpriteCB_PreEvoSparkleSet1;
- }
-}
-
-static void SpriteCB_PreEvoSparkleSet2(struct Sprite* sprite)
-{
- if (sprite->pos1.y < 88)
- {
- sprite->pos1.y = 8 + (sprite->data[7] * sprite->data[7]) / 5;
- sprite->pos2.y = Sin((u8)(sprite->data[6]), sprite->data[5]) / 4;
- sprite->pos2.x = Cos((u8)(sprite->data[6]), sprite->data[5]);
- sprite->data[5] = 8 + Sin((u8)(sprite->data[7] * 4), 40);
- sprite->data[7]++;
- }
- else
- DestroySprite(sprite);
-}
-
-static void CreatePreEvoSparkleSet2(u8 arg0)
-{
- u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 8, 0);
- if (spriteID != MAX_SPRITES)
- {
- gSprites[spriteID].data[5] = 8;
- gSprites[spriteID].data[6] = arg0;
- gSprites[spriteID].data[7] = 0;
- gSprites[spriteID].oam.affineMode = 1;
- gSprites[spriteID].oam.matrixNum = 25;
- gSprites[spriteID].subpriority = 1;
- gSprites[spriteID].callback = SpriteCB_PreEvoSparkleSet2;
- }
-}
-
-static void SpriteCB_PostEvoSparkleSet1(struct Sprite* sprite)
-{
- if (sprite->data[5] > 8)
- {
- sprite->pos2.y = Sin((u8)(sprite->data[6]), sprite->data[5]);
- sprite->pos2.x = Cos((u8)(sprite->data[6]), sprite->data[5]);
- sprite->data[5] -= sprite->data[3];
- sprite->data[6] += 4;
- }
- else
- DestroySprite(sprite);
-}
-
-static void CreatePostEvoSparkleSet1(u8 arg0, u8 arg1)
-{
- u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 56, 0);
- if (spriteID != MAX_SPRITES)
- {
- gSprites[spriteID].data[3] = arg1;
- gSprites[spriteID].data[5] = 120;
- gSprites[spriteID].data[6] = arg0;
- gSprites[spriteID].data[7] = 0;
- gSprites[spriteID].oam.affineMode = 1;
- gSprites[spriteID].oam.matrixNum = 31;
- gSprites[spriteID].subpriority = 1;
- gSprites[spriteID].callback = SpriteCB_PostEvoSparkleSet1;
- }
-}
-
-static void SpriteCB_PostEvoSparkleSet2(struct Sprite* sprite)
-{
- if (!(sprite->data[7] & 3))
- sprite->pos1.y++;
- if (sprite->data[6] < 128)
- {
- u8 matrixNum;
-
- sprite->pos2.y = -Sin((u8)(sprite->data[6]), sprite->data[5]);
- sprite->pos1.x = 120 + (sprite->data[3] * sprite->data[7]) / 3;
- sprite->data[6]++;
- matrixNum = 31 - (sprite->data[6] * 12 / 128);
- if (sprite->data[6] > 64)
- sprite->subpriority = 1;
- else
- {
- sprite->invisible = 0;
- sprite->subpriority = 20;
- if (sprite->data[6] > 112 && sprite->data[6] & 1)
- sprite->invisible = 1;
- }
- if (matrixNum < 20)
- matrixNum = 20;
- sprite->oam.matrixNum = matrixNum;
- sprite->data[7]++;
- }
- else
- DestroySprite(sprite);
-}
-
-static void CreatePostEvoSparkleSet2(u8 arg0)
-{
- u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 56, 0);
- if (spriteID != MAX_SPRITES)
- {
- gSprites[spriteID].data[3] = 3 - (Random() % 7);
- gSprites[spriteID].data[5] = 48 + (Random() & 0x3F);
- gSprites[spriteID].data[7] = 0;
- gSprites[spriteID].oam.affineMode = 1;
- gSprites[spriteID].oam.matrixNum = 31;
- gSprites[spriteID].subpriority = 20;
- gSprites[spriteID].callback = SpriteCB_PostEvoSparkleSet2;
- }
-}
-
-void LoadEvoSparkleSpriteAndPal(void)
-{
- LoadCompressedObjectPic(&sEvoSparkleSpriteSheets[0]);
- LoadSpritePalettes(sEvoSparkleSpritePals);
-}
-
-#define tFrameCounter data[15]
-
-u8 LaunchTask_PreEvoSparklesSet1(u16 arg0)
-{
- u8 taskID = CreateTask(EvoTask_BeginPreSet1_FadeAndPlaySE, 0);
- gTasks[taskID].data[1] = arg0;
- return taskID;
-}
-
-static void EvoTask_BeginPreSet1_FadeAndPlaySE(u8 taskID)
-{
- SetEvoSparklesMatrices();
- gTasks[taskID].tFrameCounter = 0;
- BeginNormalPaletteFade(3 << gTasks[taskID].data[1], 0xA, 0, 0x10, 0x7FFF);
- gTasks[taskID].func = EvoTask_CreatePreEvoSparkleSet1;
- PlaySE(SE_W025);
-}
-
-static void EvoTask_CreatePreEvoSparkleSet1(u8 taskID)
-{
- if (gTasks[taskID].tFrameCounter < 64)
- {
- if (!(gTasks[taskID].tFrameCounter & 7))
- {
- u8 i;
- for (i = 0; i < 4; i++)
- CreatePreEvoSparkleSet1((0x78 & gTasks[taskID].tFrameCounter) * 2 + i * 64);
- }
- gTasks[taskID].tFrameCounter++;
- }
- else
- {
- gTasks[taskID].tFrameCounter = 96;
- gTasks[taskID].func = EvoTask_WaitForPre1SparklesToGoUp;
- }
-}
-
-static void EvoTask_WaitForPre1SparklesToGoUp(u8 taskID)
-{
- if (gTasks[taskID].tFrameCounter != 0)
- gTasks[taskID].tFrameCounter--;
- else
- DestroyTask(taskID);
-}
-
-u8 LaunchTask_PreEvoSparklesSet2(void)
-{
- return CreateTask(EvoTask_BeginPreSparklesSet2, 0);
-}
-
-static void EvoTask_BeginPreSparklesSet2(u8 taskID)
-{
- SetEvoSparklesMatrices();
- gTasks[taskID].tFrameCounter = 0;
- gTasks[taskID].func = EvoTask_CreatePreEvoSparklesSet2;
- PlaySE(SE_W062B);
-}
-
-static void EvoTask_CreatePreEvoSparklesSet2(u8 taskID)
-{
- if (gTasks[taskID].tFrameCounter < 96)
- {
- if (gTasks[taskID].tFrameCounter < 6)
- {
- u8 i;
- for (i = 0; i < 9; i++)
- CreatePreEvoSparkleSet2(i * 16);
- }
- gTasks[taskID].tFrameCounter++;
- }
- else
- gTasks[taskID].func = EvoTask_DestroyPreSet2Task;
-}
-
-static void EvoTask_DestroyPreSet2Task(u8 taskID)
-{
- DestroyTask(taskID);
-}
-
-u8 LaunchTask_PostEvoSparklesSet1(void)
-{
- return CreateTask(EvoTask_BeginPostSparklesSet1, 0);
-}
-
-static void EvoTask_BeginPostSparklesSet1(u8 taskID)
-{
- SetEvoSparklesMatrices();
- gTasks[taskID].tFrameCounter = 0;
- gTasks[taskID].func = EvoTask_CreatePostEvoSparklesSet1;
- PlaySE(SE_REAPOKE);
-}
-
-static void EvoTask_CreatePostEvoSparklesSet1(u8 taskID)
-{
- if (gTasks[taskID].tFrameCounter < 48)
- {
- if (gTasks[taskID].tFrameCounter == 0)
- {
- u8 i;
- for (i = 0; i < 16; i++)
- CreatePostEvoSparkleSet1(i * 16, 4);
- }
- if (gTasks[taskID].tFrameCounter == 32)
- {
- u8 i;
- for (i = 0; i < 16; i++)
- CreatePostEvoSparkleSet1(i * 16, 8);
- }
- gTasks[taskID].tFrameCounter++;
- }
- else
- gTasks[taskID].func = EvoTask_DestroyPostSet1Task;
-}
-
-static void EvoTask_DestroyPostSet1Task(u8 taskID)
-{
- DestroyTask(taskID);
-}
-
-u8 LaunchTask_PostEvoSparklesSet2AndFlash(u16 species)
-{
- u8 taskID = CreateTask(EvoTask_BeginPostSparklesSet2_AndFlash, 0);
- gTasks[taskID].data[2] = species;
- return taskID;
-}
-
-static void EvoTask_BeginPostSparklesSet2_AndFlash(u8 taskID)
-{
- SetEvoSparklesMatrices();
- gTasks[taskID].tFrameCounter = 0;
- CpuSet(&gPlttBufferFaded[0x20], &gPlttBufferUnfaded[0x20], 0x30);
- BeginNormalPaletteFade(0xFFF9001C, 0, 0, 0x10, 0x7FFF);
- gTasks[taskID].func = EvoTask_CreatePostEvoSparklesSet2_AndFlash;
- PlaySE(SE_W080);
-}
-
-static void EvoTask_CreatePostEvoSparklesSet2_AndFlash(u8 taskID)
-{
- if (gTasks[taskID].tFrameCounter < 128)
- {
- u8 i;
- switch (gTasks[taskID].tFrameCounter)
- {
- default:
- if (gTasks[taskID].tFrameCounter < 50)
- CreatePostEvoSparkleSet2(Random() & 7);
- break;
- case 0:
- for (i = 0; i < 8; i++)
- CreatePostEvoSparkleSet2(i);
- break;
- case 32:
- BeginNormalPaletteFade(0xFFFF001C, 0x10, 0x10, 0, 0x7FFF);
- break;
- }
- gTasks[taskID].tFrameCounter++;
- }
- else
- gTasks[taskID].func = EvoTask_DestroyPostSet2AndFlashTask;
-}
-
-static void EvoTask_DestroyPostSet2AndFlashTask(u8 taskID)
-{
- if (!gPaletteFade.active)
- DestroyTask(taskID);
-}
-
-u8 LaunchTask_PostEvoSparklesSet2AndFlash_Trade(u16 species)
-{
- u8 taskID = CreateTask(EvoTask_BeginPostSparklesSet2_AndFlash_Trade, 0);
- gTasks[taskID].data[2] = species;
- return taskID;
-}
-
-static void EvoTask_BeginPostSparklesSet2_AndFlash_Trade(u8 taskID)
-{
- SetEvoSparklesMatrices();
- gTasks[taskID].tFrameCounter = 0;
- CpuSet(&gPlttBufferFaded[0x20], &gPlttBufferUnfaded[0x20], 0x30);
- BeginNormalPaletteFade(0xFFF90001, 0, 0, 0x10, 0x7FFF);
- gTasks[taskID].func = EvoTask_CreatePostEvoSparklesSet2_AndFlash_Trade;
- PlaySE(SE_W080);
-}
-
-static void EvoTask_CreatePostEvoSparklesSet2_AndFlash_Trade(u8 taskID)
-{
- if (gTasks[taskID].tFrameCounter < 128)
- {
- u8 i;
- switch (gTasks[taskID].tFrameCounter)
- {
- default:
- if (gTasks[taskID].tFrameCounter < 50)
- CreatePostEvoSparkleSet2(Random() & 7);
- break;
- case 0:
- for (i = 0; i < 8; i++)
- CreatePostEvoSparkleSet2(i);
- break;
- case 32:
- BeginNormalPaletteFade(0xFFFF0001, 0x10, 0x10, 0, 0x7FFF);
- break;
- }
- gTasks[taskID].tFrameCounter++;
- }
- else
- gTasks[taskID].func = EvoTask_DestroyPostSet2AndFlashTask;
-}
-
-#undef tFrameCounter
-
-static void PokeEvoSprite_DummySpriteCB(struct Sprite* sprite)
-{
-
-}
-
-#define tPreEvoSpriteID data[1]
-#define tPostEvoSpriteID data[2]
-#define tEvoStopped data[8]
-
-u8 sub_8149E7C(u8 preEvoSpriteID, u8 postEvoSpriteID)
-{
- u16 i;
- u16 stack[16];
- u8 taskID;
- s32 toDiv;
-
- for (i = 0; i < 16; i++)
- stack[i] = 0x7FFF;
-
- taskID = CreateTask(sub_8149FC8, 0);
- gTasks[taskID].tPreEvoSpriteID = preEvoSpriteID;
- gTasks[taskID].tPostEvoSpriteID = postEvoSpriteID;
- gTasks[taskID].data[3] = 256;
- gTasks[taskID].data[4] = 16;
-
- toDiv = 65536;
- SetOamMatrix(30, 256, 0, 0, 256);
- SetOamMatrix(31, toDiv / gTasks[taskID].data[4], 0, 0, toDiv / gTasks[taskID].data[4]);
-
- gSprites[preEvoSpriteID].callback = PokeEvoSprite_DummySpriteCB;
- gSprites[preEvoSpriteID].oam.affineMode = 1;
- gSprites[preEvoSpriteID].oam.matrixNum = 30;
- gSprites[preEvoSpriteID].invisible = 0;
- CpuSet(stack, &gPlttBufferFaded[0x100 + (gSprites[preEvoSpriteID].oam.paletteNum * 16)], 16);
-
- gSprites[postEvoSpriteID].callback = PokeEvoSprite_DummySpriteCB;
- gSprites[postEvoSpriteID].oam.affineMode = 1;
- gSprites[postEvoSpriteID].oam.matrixNum = 31;
- gSprites[postEvoSpriteID].invisible = 0;
- CpuSet(stack, &gPlttBufferFaded[0x100 + (gSprites[postEvoSpriteID].oam.paletteNum * 16)], 16);
-
- gTasks[taskID].tEvoStopped = FALSE;
- return taskID;
-}
-
-static void sub_8149FC8(u8 taskID)
-{
- gTasks[taskID].data[5] = 0;
- gTasks[taskID].data[6] = 8;
- gTasks[taskID].func = sub_8149FEC;
-}
-
-static void sub_8149FEC(u8 taskID)
-{
- if (gTasks[taskID].tEvoStopped)
- PreEvoVisible_PostEvoInvisible_KillTask(taskID);
- else if (gTasks[taskID].data[6] == 128)
- PreEvoInVisible_PostEvoVisible_KillTask(taskID);
- else
- {
- gTasks[taskID].data[6] += 2;
- gTasks[taskID].data[5] ^= 1;
- gTasks[taskID].func = sub_814A03C;
- }
-}
-
-static void sub_814A03C(u8 taskID)
-{
- if (gTasks[taskID].tEvoStopped)
- gTasks[taskID].func = PreEvoVisible_PostEvoInvisible_KillTask;
- else
- {
- u16 oamMatrixArg;
- u8 r6 = 0;
- if (gTasks[taskID].data[5] == 0)
- {
- if (gTasks[taskID].data[3] < 256 - gTasks[taskID].data[6])
- gTasks[taskID].data[3] += gTasks[taskID].data[6];
- else
- {
- gTasks[taskID].data[3] = 256;
- r6++;
- }
- if (gTasks[taskID].data[4] > 16 + gTasks[taskID].data[6])
- gTasks[taskID].data[4] -= gTasks[taskID].data[6];
- else
- {
- gTasks[taskID].data[4] = 16;
- r6++;
- }
- }
- else
- {
- if (gTasks[taskID].data[4] < 256 - gTasks[taskID].data[6])
- gTasks[taskID].data[4] += gTasks[taskID].data[6];
- else
- {
- gTasks[taskID].data[4] = 256;
- r6++;
- }
- if (gTasks[taskID].data[3] > 16 + gTasks[taskID].data[6])
- gTasks[taskID].data[3] -= gTasks[taskID].data[6];
- else
- {
- gTasks[taskID].data[3] = 16;
- r6++;
- }
- }
- oamMatrixArg = 65536 / gTasks[taskID].data[3];
- SetOamMatrix(30, oamMatrixArg, 0, 0, oamMatrixArg);
-
- oamMatrixArg = 65536 / gTasks[taskID].data[4];
- SetOamMatrix(31, oamMatrixArg, 0, 0, oamMatrixArg);
- if (r6 == 2)
- gTasks[taskID].func = sub_8149FEC;
- }
-}
-
-static void PreEvoInVisible_PostEvoVisible_KillTask(u8 taskID)
-{
- gSprites[gTasks[taskID].tPreEvoSpriteID].oam.affineMode = 0;
- gSprites[gTasks[taskID].tPreEvoSpriteID].oam.matrixNum = 0;
- gSprites[gTasks[taskID].tPreEvoSpriteID].invisible = 1;
-
- gSprites[gTasks[taskID].tPostEvoSpriteID].oam.affineMode = 0;
- gSprites[gTasks[taskID].tPostEvoSpriteID].oam.matrixNum = 0;
- gSprites[gTasks[taskID].tPostEvoSpriteID].invisible = 0;
-
- DestroyTask(taskID);
-}
-
-static void PreEvoVisible_PostEvoInvisible_KillTask(u8 taskID)
-{
- gSprites[gTasks[taskID].tPreEvoSpriteID].oam.affineMode = 0;
- gSprites[gTasks[taskID].tPreEvoSpriteID].oam.matrixNum = 0;
- gSprites[gTasks[taskID].tPreEvoSpriteID].invisible = 0;
-
- gSprites[gTasks[taskID].tPostEvoSpriteID].oam.affineMode = 0;
- gSprites[gTasks[taskID].tPostEvoSpriteID].oam.matrixNum = 0;
- gSprites[gTasks[taskID].tPostEvoSpriteID].invisible = 1;
-
- DestroyTask(taskID);
-}
diff --git a/src/scene/evolution_scene.c b/src/scene/evolution_scene.c
deleted file mode 100644
index 3ba325574..000000000
--- a/src/scene/evolution_scene.c
+++ /dev/null
@@ -1,3959 +0,0 @@
-#include "global.h"
-#include "task.h"
-#include "evolution_scene.h"
-#include "evolution_graphics.h"
-#include "palette.h"
-#include "main.h"
-#include "text.h"
-#include "text_window.h"
-#include "pokemon.h"
-#include "string_util.h"
-#include "battle.h"
-#include "scanline_effect.h"
-#include "data2.h"
-#include "decompress.h"
-#include "m4a.h"
-#include "trade.h"
-#include "menu.h"
-#include "pokedex.h"
-#include "constants/species.h"
-#include "sound.h"
-#include "constants/songs.h"
-#include "overworld.h"
-#include "battle_message.h"
-#include "pokemon_summary_screen.h"
-#include "menu_cursor.h"
-#include "strings2.h"
-#include "ewram.h"
-
-struct EvoInfo
-{
- u8 preEvoSpriteID;
- u8 postEvoSpriteID;
- u8 evoTaskID;
- u8 field_3;
-
- u8 unk4[0x40];
- u8 unk44[0x40];
- u8 unk84[0x40];
-
- u8 unkC4[0x40][0x20]; // 0x20148C4
- u8 unk8C4[0x40][0x20]; // 0x20150C4
- u8 unk10C4[0x40][0x20]; // 0x20158C4
- u8 unk18C4[0x40][0x20]; // 0x20160C4
- u8 unk20C4[0x40][0x20]; // 0x20168C4
- u8 unk28C4[0x40][0x20]; // 0x20170C4
- u8 unk30C4[0x40][0x20]; // 0x20178C4
- u8 unk38C4[0x40][0x20]; // 0x20180C4
-
- u8 *unk40C4[0x40][0x20]; // 0x20188C4
-
- u16 unk60C4[0x40][0x20]; // 0x201A8C4
- u16 unk70C4[0x40][0x20]; // 0x201B8C4
- u16 unk80C4[0x40][0x20]; // 0x201C8C4
- u16 unk90C4[0x40][0x20]; // 0x201D8C4
-
- u8 unkA0C4; // 0x201E8C4
-};
-
-void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies);
-void sub_8024CEC(void);
-void sub_8023A80(void);
-void sub_802BC6C(void);
-void sub_8023AD8(void);
-void nullsub_6(void);
-bool32 IsHMMove2(u16 move);
-
-extern struct Window gUnknown_03004210;
-extern u16 gBattle_BG0_X;
-extern u16 gBattle_BG0_Y;
-extern u16 gBattle_BG1_X;
-extern u16 gBattle_BG1_Y;
-extern u16 gBattle_BG2_X;
-extern u16 gBattle_BG2_Y;
-extern u16 gBattle_BG3_X;
-extern u16 gBattle_BG3_Y;
-extern u8 gBattleTerrain;
-extern u8 gReservedSpritePaletteCount;
-extern u16 gMoveToLearn;
-extern struct SpriteTemplate gUnknown_02024E8C;
-extern bool8 gAffineAnimsDisabled;
-extern u8 gDisplayedStringBattle[];
-extern u8 gBattleTextBuff2[];
-
-extern u8 gBattleCommunication[];
-#define sEvoCursorPos gBattleCommunication[1] // when learning a new move
-#define sEvoGraphicsTaskID gBattleCommunication[2]
-
-extern const u8 BattleText_StartEvo[];
-extern const u8 BattleText_FinishEvo[];
-extern const u8 BattleText_StopEvo[];
-extern const u8 *const gBattleStringsTable[];
-
-// this file's functions
-static void Task_EvolutionScene(u8 taskID);
-static void Task_TradeEvolutionScene(u8 taskID);
-static void CB2_EvolutionSceneUpdate(void);
-static void CB2_TradeEvolutionSceneUpdate(void);
-static void EvoDummyFunc(void);
-static void EvoDummyFunc2(void);
-static void VBlankCB_EvolutionScene(void);
-static void VBlankCB_TradeEvolutionScene(void);
-static void sub_81150D8(void);
-
-// iwram common
-MainCallback gCB2_AfterEvolution;
-
-// const data
-static const u8 sUnknownShedinjaJpnString[] = _("ヌケニン");
-static const u8 sUnusedString0[] = _("{COLOR DARK_GREY}{HIGHLIGHT WHITE2}{SHADOW LIGHT_GREY}");
-static const u8 sUnusedString1[] = _("▶\n ");
-static const u8 sUnusedString2[] = _(" \n▶");
-static const u8 sUnusedString3[] = _(" \n ");
-static const u8 sPadding[9] = {0};
-
-// code
-
-static void CB2_BeginEvolutionScene(void)
-{
- UpdatePaletteFade();
- RunTasks();
-}
-
-#define tState data[0]
-#define tMonPtrHI data[1]
-#define tMonPtrLO data[2]
-#define tPreEvoSpecies data[3]
-#define tPostEvoSpecies data[4]
-#define tCanStop data[5] // in first fast data[5] only checks that
-#define tBits data[5] // in the second task, it works as a bitfield
-#define tLearnsFirstMove data[6]
-#define tLearnMoveState data[8]
-#define tData9 data[9]
-#define tdata10 data[10]
-#define tEvoWasStopped data[11]
-#define tPartyID data[12]
-
-#define TASK_BIT_CAN_STOP 0x1
-#define TASK_BIT_LEARN_MOVE 0x80
-
-static void Task_BeginEvolutionScene(u8 taskID)
-{
- struct Pokemon* mon = NULL;
- switch (gTasks[taskID].tState)
- {
- case 0:
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskID].tState++;
- break;
- case 1:
- if (!gPaletteFade.active)
- {
- u16 speciesToEvolve;
- bool8 canStopEvo;
- u8 partyID;
-
- mon = (struct Pokemon*)(gTasks[taskID].tMonPtrHI | (gTasks[taskID].tMonPtrLO << 0x10));
- speciesToEvolve = gTasks[taskID].tPostEvoSpecies;
- canStopEvo = gTasks[taskID].tCanStop;
- partyID = gTasks[taskID].tPartyID;
-
- DestroyTask(taskID);
- EvolutionScene(mon, speciesToEvolve, canStopEvo, partyID);
- }
- break;
- }
-}
-
-void BeginEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID)
-{
- u8 taskID = CreateTask(Task_BeginEvolutionScene, 0);
- gTasks[taskID].tState = 0;
- gTasks[taskID].tMonPtrHI = (u32)(mon);
- gTasks[taskID].tMonPtrLO = (u32)(mon) >> 0x10;
- gTasks[taskID].tPostEvoSpecies = speciesToEvolve;
- gTasks[taskID].tCanStop = canStopEvo;
- gTasks[taskID].tPartyID = partyID;
- SetMainCallback2(CB2_BeginEvolutionScene);
-}
-
-void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID)
-{
- u8 name[20];
- u16 currSpecies;
- u32 TiD, PiD;
- const struct CompressedSpritePalette** pokePal;
- u8 ID;
- SetHBlankCallback(NULL);
- SetVBlankCallback(NULL);
- CpuFill32(0, (void*)(VRAM), VRAM_SIZE);
-
- REG_MOSAIC = 0;
- REG_WIN0H = 0;
- REG_WIN0V = 0;
- REG_WIN1H = 0;
- REG_WIN1V = 0;
- REG_WININ = 0;
- REG_WINOUT = 0;
-
- Text_LoadWindowTemplate(&gWindowTemplate_81E6C58);
- ResetPaletteFade();
-
- gBattle_BG0_X = 0;
- gBattle_BG0_Y = 0;
- gBattle_BG1_X = 0;
- gBattle_BG1_Y = 0;
- gBattle_BG2_X = 0;
- gBattle_BG2_Y = 0;
- gBattle_BG3_X = 256;
- gBattle_BG3_Y = 0;
-
- Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58);
- gBattleTerrain = BATTLE_TERRAIN_PLAIN;
-
- sub_800D6D4();
- sub_800DAB8();
- ResetSpriteData();
- ScanlineEffect_Stop();
- ResetTasks();
- FreeAllSpritePalettes();
-
- gReservedSpritePaletteCount = 4;
-
- GetMonData(mon, MON_DATA_NICKNAME, name);
- StringCopy10(gStringVar1, name);
- StringCopy(gStringVar2, gSpeciesNames[speciesToEvolve]);
-
- // preEvo sprite
- currSpecies = GetMonData(mon, MON_DATA_SPECIES);
- TiD = GetMonData(mon, MON_DATA_OT_ID);
- PiD = GetMonData(mon, MON_DATA_PERSONALITY);
- DecompressPicFromTable_2(&gMonFrontPicTable[currSpecies],
- gMonFrontPicCoords[currSpecies].coords,
- gMonFrontPicCoords[currSpecies].y_offset,
- (void*)(0x2000000),
- gUnknown_081FAF4C[1], currSpecies);
- pokePal = (void*) GetMonSpritePalStructFromOtIdPersonality(currSpecies, TiD, PiD);
- LoadCompressedPalette(*pokePal, 0x110, 0x20);
-
- GetMonSpriteTemplate_803C56C(currSpecies, 1);
- gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable;
- sEvoInfo.preEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30);
-
- gSprites[ID].callback = nullsub_37;
- gSprites[ID].oam.paletteNum = 1;
- gSprites[ID].invisible = 1;
-
- // postEvo sprite
- DecompressPicFromTable_2(&gMonFrontPicTable[speciesToEvolve],
- gMonFrontPicCoords[speciesToEvolve].coords,
- gMonFrontPicCoords[speciesToEvolve].y_offset,
- (void*)(0x2000000),
- gUnknown_081FAF4C[3], speciesToEvolve);
- pokePal = (void*) GetMonSpritePalStructFromOtIdPersonality(speciesToEvolve, TiD, PiD);
- LoadCompressedPalette(*pokePal, 0x120, 0x20);
-
- GetMonSpriteTemplate_803C56C(speciesToEvolve, 3);
- gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable;
- sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30);
- gSprites[ID].callback = nullsub_37;
- gSprites[ID].oam.paletteNum = 2;
- gSprites[ID].invisible = 1;
-
- LoadEvoSparkleSpriteAndPal();
-
- sEvoInfo.evoTaskID = ID = CreateTask(Task_EvolutionScene, 0);
- gTasks[ID].tState = 0;
- gTasks[ID].tPreEvoSpecies = currSpecies;
- gTasks[ID].tPostEvoSpecies = speciesToEvolve;
- gTasks[ID].tMonPtrHI = (u32)(mon);
- gTasks[ID].tMonPtrLO = (u32)(mon) >> 0x10;
- gTasks[ID].tCanStop = canStopEvo;
- gTasks[ID].tLearnsFirstMove = TRUE;
- gTasks[ID].tEvoWasStopped = FALSE;
- gTasks[ID].tPartyID = partyID;
-
- memcpy(ewram9000_hack, &gPlttBufferUnfaded[0x20], 0x60);
-
- REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP;
- SetHBlankCallback(EvoDummyFunc);
- SetVBlankCallback(VBlankCB_EvolutionScene);
- m4aMPlayAllStop();
- SetMainCallback2(CB2_EvolutionSceneUpdate);
-}
-
-static void CB2_EvolutionSceneLoadGraphics(void)
-{
- u8 ID;
- const struct CompressedSpritePalette** pokePal;
- u16 postEvoSpecies;
- u32 TiD, PiD;
- struct Pokemon* Mon = &gPlayerParty[gTasks[sEvoInfo.evoTaskID].tPartyID];
-
- postEvoSpecies = gTasks[sEvoInfo.evoTaskID].tPostEvoSpecies;
- TiD = GetMonData(Mon, MON_DATA_OT_ID);
- PiD = GetMonData(Mon, MON_DATA_PERSONALITY);
-
- SetHBlankCallback(NULL);
- SetVBlankCallback(NULL);
- CpuFill32(0, (void*)(VRAM), VRAM_SIZE);
-
- REG_MOSAIC = 0;
- REG_WIN0H = 0;
- REG_WIN0V = 0;
- REG_WIN1H = 0;
- REG_WIN1V = 0;
- REG_WININ = 0;
- REG_WINOUT = 0;
- Text_LoadWindowTemplate(&gWindowTemplate_81E6C58);
- ResetPaletteFade();
- gBattle_BG0_X = 0;
- gBattle_BG0_Y = 0;
- gBattle_BG1_X = 0;
- gBattle_BG1_Y = 0;
- gBattle_BG2_X = 0;
- gBattle_BG2_Y = 0;
- gBattle_BG3_X = 256;
- gBattle_BG3_Y = 0;
-
- Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58);
- gBattleTerrain = BATTLE_TERRAIN_PLAIN;
-
- sub_800D6D4();
- sub_800DAB8();
- ResetSpriteData();
- FreeAllSpritePalettes();
- gReservedSpritePaletteCount = 4;
-
- DecompressPicFromTable_2(&gMonFrontPicTable[postEvoSpecies],
- gMonFrontPicCoords[postEvoSpecies].coords,
- gMonFrontPicCoords[postEvoSpecies].y_offset,
- (void*)(0x2000000),
- gUnknown_081FAF4C[3], postEvoSpecies);
- pokePal = (void*) GetMonSpritePalStructFromOtIdPersonality(postEvoSpecies, TiD, PiD);
- LoadCompressedPalette(*pokePal, 0x120, 0x20);
-
- GetMonSpriteTemplate_803C56C(postEvoSpecies, 3);
- gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable;
- sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30);
-
- gSprites[ID].callback = nullsub_37;
- gSprites[ID].oam.paletteNum = 2;
-
- REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP;
- SetHBlankCallback(EvoDummyFunc);
- SetVBlankCallback(VBlankCB_EvolutionScene);
- SetMainCallback2(CB2_EvolutionSceneUpdate);
- BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
-}
-
-static void CB2_TradeEvolutionSceneLoadGraphics(void)
-{
- struct Pokemon* Mon = &gPlayerParty[gTasks[sEvoInfo.evoTaskID].tPartyID];
- u16 postEvoSpecies = gTasks[sEvoInfo.evoTaskID].tPostEvoSpecies;
-
- switch (gMain.state)
- {
- case 0:
- REG_DISPCNT = 0;
- SetHBlankCallback(NULL);
- SetVBlankCallback(NULL);
- ResetSpriteData();
- FreeAllSpritePalettes();
- gReservedSpritePaletteCount = 4;
- gBattle_BG0_X = 0;
- gBattle_BG0_Y = 0;
- gBattle_BG1_X = 0;
- gBattle_BG1_Y = 0;
- gBattle_BG2_X = 0;
- gBattle_BG2_Y = 0;
- gBattle_BG3_X = 256;
- gBattle_BG3_Y = 0;
- gMain.state++;
- break;
- case 1:
- Text_LoadWindowTemplate(&gWindowTemplate_81E6F84);
- Text_InitWindowWithTemplate(&gUnknown_03004828->window, &gWindowTemplate_81E6F84);
- gMain.state++;
- break;
- case 2:
- TextWindow_LoadStdFrameGraphics(&gUnknown_03004828->window);
- gUnknown_03004828->textWindowBaseTileNum = TextWindow_SetBaseTileNum(2);
- TextWindow_LoadStdFrameGraphics(&gUnknown_03004828->window);
- Menu_EraseScreen();
- ResetPaletteFade();
- gMain.state++;
- SetHBlankCallback(EvoDummyFunc);
- SetVBlankCallback(VBlankCB_TradeEvolutionScene);
- break;
- case 3:
- sub_804E22C();
- gMain.state++;
- break;
- case 4:
- {
- const struct CompressedSpritePalette** pokePal;
- u32 TiD = GetMonData(Mon, MON_DATA_OT_ID);
- u32 PiD = GetMonData(Mon, MON_DATA_PERSONALITY);
- DecompressPicFromTable_2(&gMonFrontPicTable[postEvoSpecies],
- gMonFrontPicCoords[postEvoSpecies].coords,
- gMonFrontPicCoords[postEvoSpecies].y_offset,
- (void*)(0x2000000),
- gUnknown_081FAF4C[3], postEvoSpecies);
- pokePal = (void*) GetMonSpritePalStructFromOtIdPersonality(postEvoSpecies, TiD, PiD);
- LoadCompressedPalette(*pokePal, 0x120, 0x20);
- gMain.state++;
- }
- break;
- case 5:
- {
- u8 ID;
-
- GetMonSpriteTemplate_803C56C(postEvoSpecies, 3);
- gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable;
- sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30);
-
- gSprites[ID].callback = nullsub_37;
- gSprites[ID].oam.paletteNum = 2;
- gMain.state++;
- }
- break;
- case 6:
- BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
- SetMainCallback2(CB2_TradeEvolutionSceneUpdate);
- REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_1D_MAP;
- break;
- }
-}
-
-void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpriteID, u8 partyID)
-{
- u8 name[20];
- u16 currSpecies;
- u32 TiD, PiD;
- const struct CompressedSpritePalette** pokePal;
- u8 ID;
-
- GetMonData(mon, MON_DATA_NICKNAME, name);
- StringCopy10(gStringVar1, name);
- StringCopy(gStringVar2, gSpeciesNames[speciesToEvolve]);
-
- gAffineAnimsDisabled = TRUE;
-
- // preEvo sprite
- currSpecies = GetMonData(mon, MON_DATA_SPECIES);
- PiD = GetMonData(mon, MON_DATA_PERSONALITY);
- TiD = GetMonData(mon, MON_DATA_OT_ID);
- sEvoInfo.preEvoSpriteID = preEvoSpriteID;
- DecompressPicFromTable_2(&gMonFrontPicTable[speciesToEvolve],
- gMonFrontPicCoords[speciesToEvolve].coords,
- gMonFrontPicCoords[speciesToEvolve].y_offset,
- (void*)(0x2000000),
- gUnknown_081FAF4C[1], speciesToEvolve);
- pokePal = (void*) GetMonSpritePalStructFromOtIdPersonality(speciesToEvolve, TiD, PiD);
- LoadCompressedPalette(*pokePal, 0x120, 0x20);
-
- GetMonSpriteTemplate_803C56C(speciesToEvolve, 1);
- gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable;
- sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30);
-
- gSprites[ID].callback = nullsub_37;
- gSprites[ID].oam.paletteNum = 2;
- gSprites[ID].invisible = 1;
-
- LoadEvoSparkleSpriteAndPal();
-
- sEvoInfo.evoTaskID = ID = CreateTask(Task_TradeEvolutionScene, 0);
- gTasks[ID].tState = 0;
- gTasks[ID].tPreEvoSpecies = currSpecies;
- gTasks[ID].tPostEvoSpecies = speciesToEvolve;
- gTasks[ID].tMonPtrHI = (u32)(mon);
- gTasks[ID].tMonPtrLO = (u32)(mon) >> 0x10;
- gTasks[ID].tLearnsFirstMove = TRUE;
- gTasks[ID].tEvoWasStopped = FALSE;
- gTasks[ID].tPartyID = partyID;
-
- SetMainCallback2(CB2_TradeEvolutionSceneUpdate);
-}
-
-static void CB2_EvolutionSceneUpdate(void)
-{
- AnimateSprites();
- BuildOamBuffer();
- Text_UpdateWindowInBattle(&gUnknown_03004210);
- UpdatePaletteFade();
- RunTasks();
-}
-
-static void CB2_TradeEvolutionSceneUpdate(void)
-{
- AnimateSprites();
- BuildOamBuffer();
- Text_UpdateWindow(&gUnknown_03004828->window);
- UpdatePaletteFade();
- RunTasks();
-}
-
-static void CreateShedinja(u16 preEvoSpecies, struct Pokemon* mon)
-{
- u32 data = 0;
-
- if (gEvolutionTable[preEvoSpecies][0].method == EVO_LEVEL_NINJASK && gPlayerPartyCount < 6)
- {
- s32 i;
- struct Pokemon* Shedinja = &gPlayerParty[gPlayerPartyCount];
-
- CopyMon(Shedinja, mon, sizeof(struct Pokemon));
- SetMonData(Shedinja, MON_DATA_SPECIES, (void*)&gEvolutionTable[preEvoSpecies][1].targetSpecies);
- SetMonData(Shedinja, MON_DATA_NICKNAME, (void*)gSpeciesNames[gEvolutionTable[preEvoSpecies][1].targetSpecies]);
- SetMonData(Shedinja, MON_DATA_HELD_ITEM, (void*)&data);
- SetMonData(Shedinja, MON_DATA_MARKINGS, (void*)&data);
- SetMonData(Shedinja, MON_DATA_10, (void*)&data);
- for (i = MON_DATA_COOL_RIBBON; i < MON_DATA_COOL_RIBBON + 5; i++)
- SetMonData(Shedinja, i, (void*)&data);
- for (i = MON_DATA_CHAMPION_RIBBON; i <= MON_DATA_FATEFUL_ENCOUNTER; i++)
- SetMonData(Shedinja, i, (void*)&data);
- SetMonData(Shedinja, MON_DATA_STATUS, (void*)&data);
- data = 0xFF;
- SetMonData(Shedinja, MON_DATA_MAIL, (void*)&data);
-
- CalculateMonStats(Shedinja);
- CalculatePlayerPartyCount();
-
- GetSetPokedexFlag(SpeciesToNationalPokedexNum(gEvolutionTable[preEvoSpecies][1].targetSpecies), 2);
- GetSetPokedexFlag(SpeciesToNationalPokedexNum(gEvolutionTable[preEvoSpecies][1].targetSpecies), 3);
-
- if (GetMonData(Shedinja, MON_DATA_SPECIES) == SPECIES_SHEDINJA
- && GetMonData(Shedinja, MON_DATA_LANGUAGE) == LANGUAGE_JAPANESE
- && GetMonData(mon, MON_DATA_SPECIES) == SPECIES_NINJASK)
- SetMonData(Shedinja, MON_DATA_NICKNAME, sUnknownShedinjaJpnString);
- }
-}
-
-static void Task_EvolutionScene(u8 taskID)
-{
- u32 var;
- struct Pokemon* mon = (struct Pokemon*)(gTasks[taskID].tMonPtrHI | (gTasks[taskID].tMonPtrLO << 0x10));
-
- // check if B Button was held, so the evolution gets stopped
- if (gMain.heldKeys == B_BUTTON && gTasks[taskID].tState == 8 && gTasks[taskID].tBits & TASK_BIT_CAN_STOP)
- {
- gTasks[taskID].tState = 16;
- if (gTasks[sEvoGraphicsTaskID].isActive)
- gTasks[sEvoGraphicsTaskID].EvoGraphicsTaskEvoStop = TRUE;
- }
- switch (gTasks[taskID].tState)
- {
- case 0:
- BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
- gSprites[sEvoInfo.preEvoSpriteID].invisible = 0;
- gTasks[taskID].tState++;
- break;
- case 1: // print 'whoa, poke is evolving!!!' msg
- if (!gPaletteFade.active)
- {
- StringExpandPlaceholders(gStringVar4, BattleText_StartEvo);
- Text_InitWindow8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15);
- gTasks[taskID].tState++;
- }
- break;
- case 2: // wait for string, play cry
- if (gUnknown_03004210.state == 0)
- {
- PlayCry1(gTasks[taskID].tPreEvoSpecies, 0);
- gTasks[taskID].tState++;
- }
- break;
- case 3: // wait for cry, play tu du SE
- if (IsCryFinished())
- {
- PlaySE(BGM_ME_SHINKA);
- gTasks[taskID].tState++;
- }
- break;
- case 4: // play evolution music and fade screen black
- if (!IsSEPlaying())
- {
- PlayNewMapMusic(BGM_SHINKA);
- gTasks[taskID].tState++;
- BeginNormalPaletteFade(0x1C, 4, 0, 0x10, 0);
- }
- break;
- case 5: // after screen fade, preapre evo sparkles
- if (!gPaletteFade.active)
- {
- sEvoGraphicsTaskID = LaunchTask_PreEvoSparklesSet1(17);
- gTasks[taskID].tState++;
- }
- break;
- case 6: // another set of evo sparkles
- if (!gTasks[sEvoGraphicsTaskID].isActive)
- {
- gTasks[taskID].tState++;
- sEvoInfo.field_3 = 1;
- sEvoGraphicsTaskID = LaunchTask_PreEvoSparklesSet2();
- }
- break;
- case 7: // launch task that flashes pre evo with post evo sprites
- if (!gTasks[sEvoGraphicsTaskID].isActive)
- {
- sEvoGraphicsTaskID = sub_8149E7C(sEvoInfo.preEvoSpriteID, sEvoInfo.postEvoSpriteID);
- gTasks[taskID].tState++;
- }
- break;
- case 8: // wait for the above task to finish
- if (--sEvoInfo.field_3 == 0)
- {
- sEvoInfo.field_3 = 3;
- if (!gTasks[sEvoGraphicsTaskID].isActive)
- gTasks[taskID].tState++;
- }
- break;
- case 9: // post evo sparkles
- sEvoGraphicsTaskID = LaunchTask_PostEvoSparklesSet1();
- gTasks[taskID].tState++;
- break;
- case 10:
- if (!gTasks[sEvoGraphicsTaskID].isActive)
- {
- sEvoGraphicsTaskID = LaunchTask_PostEvoSparklesSet2AndFlash(gTasks[taskID].tPostEvoSpecies);
- gTasks[taskID].tState++;
- }
- break;
- case 11: // play tu du sound after evolution
- if (!gTasks[sEvoGraphicsTaskID].isActive)
- {
- PlaySE(SE_EXP);
- gTasks[taskID].tState++;
- }
- break;
- case 12: // play poke cry after evolution and return screed to pre-fade state
- if (IsSEPlaying())
- {
- m4aMPlayAllStop();
- PlayCry1(gTasks[taskID].tPostEvoSpecies, 0);
- memcpy(&gPlttBufferUnfaded[0x20], ewram9000_hack, 0x60);
- BeginNormalPaletteFade(0x1C, 0, 0x10, 0, 0);
- gTasks[taskID].tState++;
- }
- break;
- case 13: // congratulations string and rename prompt
- if (IsCryFinished() && !gPaletteFade.active)
- {
- StringExpandPlaceholders(gStringVar4, BattleText_FinishEvo);
- Text_InitWindow8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15);
- PlayBGM(BGM_FANFA5);
- gTasks[taskID].tState++;
- SetMonData(mon, MON_DATA_SPECIES, (void*)(&gTasks[taskID].tPostEvoSpecies));
- CalculateMonStats(mon);
- EvolutionRenameMon(mon, gTasks[taskID].tPreEvoSpecies, gTasks[taskID].tPostEvoSpecies);
- GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskID].tPostEvoSpecies), 2);
- GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskID].tPostEvoSpecies), 3);
- IncrementGameStat(GAME_STAT_EVOLVED_POKEMON);
- }
- break;
- case 14: // check if it wants to learn a new move
- if (gUnknown_03004210.state == 0)
- {
- var = MonTryLearningNewMove(mon, gTasks[taskID].tLearnsFirstMove);
- if (var != 0 && !gTasks[taskID].tEvoWasStopped)
- {
- u8 text[20];
-
- Overworld_PlaySpecialMapMusic();
- gTasks[taskID].tBits |= TASK_BIT_LEARN_MOVE;
- gTasks[taskID].tLearnsFirstMove = FALSE;
- gTasks[taskID].tLearnMoveState = 0;
- GetMonData(mon, MON_DATA_NICKNAME, text);
- StringCopy10(gBattleTextBuff1, text);
- if (var == 0xFFFF) // no place to learn it
- gTasks[taskID].tState = 21;
- else if (var == 0xFFFE) // it already knows that move
- break;
- else
- gTasks[taskID].tState = 19; // has less than 4 moves, so it's been learned
- }
- else // no move to learn
- {
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- gTasks[taskID].tState++;
- }
- }
- break;
- case 15: // task has finished, return
- if (!gPaletteFade.active)
- {
- if (!(gTasks[taskID].tBits & TASK_BIT_LEARN_MOVE))
- Overworld_PlaySpecialMapMusic();
- if (!gTasks[taskID].tEvoWasStopped)
- CreateShedinja(gTasks[taskID].tPreEvoSpecies, mon);
- DestroyTask(taskID);
- SetMainCallback2(gCB2_AfterEvolution);
- }
- break;
- case 16: // evolution has been canceled, stop music and re-fade palette
- if (!gTasks[sEvoGraphicsTaskID].isActive)
- {
- m4aMPlayAllStop();
- BeginNormalPaletteFade(0x6001C, 0, 0x10, 0, 0x7FFF);
- gTasks[taskID].tState++;
- }
- break;
- case 17: // play cry of the pokemon trying to evolve again, evolution has been stopped
- if (!gPaletteFade.active)
- {
- PlayCry1(gTasks[taskID].tPreEvoSpecies, 0);
- gTasks[taskID].tState++;
- }
- break;
- case 18: // after the cry, print the string 'WHOA IT DID NOT EVOLVE!!!'
- if (IsCryFinished())
- {
- StringExpandPlaceholders(gStringVar4, BattleText_StopEvo);
- Text_InitWindow8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15);
- gTasks[taskID].tEvoWasStopped = TRUE;
- gTasks[taskID].tState = 14;
- }
- break;
- case 19: // pokemon learned a new move, print string and play a fanfare
- if (gUnknown_03004210.state == 0 && !IsSEPlaying())
- {
- sub_8024CEC();
- PlayFanfare(BGM_FANFA1);
- StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[3]);
- Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
- gTasks[taskID].tLearnsFirstMove = 0x40; // re-used as a counter
- gTasks[taskID].tState++;
- }
- break;
- case 20: // wait a bit and check if can learn another move
- if (gUnknown_03004210.state == 0 && !IsSEPlaying() && --gTasks[taskID].tLearnsFirstMove == 0)
- gTasks[taskID].tState = 14;
- break;
- case 21: // try to learn a new move
- switch (gTasks[taskID].tLearnMoveState)
- {
- case 0:
- if (gUnknown_03004210.state == 0 && !IsSEPlaying())
- {
- sub_8024CEC();
- StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[4]);
- Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
- gTasks[taskID].tLearnMoveState++;
- }
- break;
- case 1:
- if (gUnknown_03004210.state == 0 && !IsSEPlaying())
- {
- StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[5]);
- Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
- gTasks[taskID].tLearnMoveState++;
- }
- break;
- case 2:
- if (gUnknown_03004210.state != 0)
- break;
- if (!IsSEPlaying())
- {
- StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[6]);
- Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
- gTasks[taskID].tData9 = 5;
- gTasks[taskID].tdata10 = 9;
- gTasks[taskID].tLearnMoveState++;
- }
- case 3:
- if (gUnknown_03004210.state == 0 && !IsSEPlaying())
- {
- sub_8023A80();
- gTasks[taskID].tLearnMoveState++;
- sEvoCursorPos = 0;
- sub_802BC6C();
- }
- break;
- case 4:
- if (gMain.newKeys & DPAD_UP && sEvoCursorPos != 0)
- {
- PlaySE(SE_SELECT);
- nullsub_6();
- sEvoCursorPos = 0;
- sub_802BC6C();
- }
- if (gMain.newKeys & DPAD_DOWN && sEvoCursorPos == 0)
- {
- PlaySE(SE_SELECT);
- nullsub_6();
- sEvoCursorPos = 1;
- sub_802BC6C();
- }
- if (gMain.newKeys & A_BUTTON)
- {
- sub_8023AD8();
- StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[292]);
- Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
- PlaySE(SE_SELECT);
- if (sEvoCursorPos != 0)
- gTasks[taskID].tLearnMoveState = gTasks[taskID].tdata10;
- else
- {
- gTasks[taskID].tLearnMoveState = gTasks[taskID].tData9;
- if (gTasks[taskID].tLearnMoveState == 5)
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- }
- }
- if (gMain.newKeys & B_BUTTON)
- {
- sub_8023AD8();
- StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[292]);
- Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
- PlaySE(SE_SELECT);
- gTasks[taskID].tLearnMoveState = gTasks[taskID].tdata10;
- }
- break;
- case 5:
- if (!gPaletteFade.active)
- {
- ShowSelectMovePokemonSummaryScreen(gPlayerParty, gTasks[taskID].tPartyID,
- gPlayerPartyCount - 1, CB2_EvolutionSceneLoadGraphics,
- gMoveToLearn);
- gTasks[taskID].tLearnMoveState++;
- }
- break;
- case 6:
- if (!gPaletteFade.active && gMain.callback2 == CB2_EvolutionSceneUpdate)
- {
- var = sub_809FA30(); // moveID
- if (var == 4)
- gTasks[taskID].tLearnMoveState = 9;
- else
- {
- u16 move = GetMonData(mon, var + MON_DATA_MOVE1);
- if (IsHMMove2(move))
- {
- StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[307]);
- Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
- gTasks[taskID].tLearnMoveState = 11;
- }
- else
- {
- gBattleTextBuff2[0] = 0xFD;
- gBattleTextBuff2[1] = 2;
- gBattleTextBuff2[2] = move;
- gBattleTextBuff2[3] = (move & 0xFF00) >> 8;
- gBattleTextBuff2[4] = EOS;
- RemoveMonPPBonus(mon, var);
- SetMonMoveSlot(mon, gMoveToLearn, var);
- StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[207]);
- Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
- gTasks[taskID].tLearnMoveState++;
- }
- }
- }
- break;
- case 7:
- if (gUnknown_03004210.state == 0 && !IsSEPlaying())
- {
- StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[7]);
- Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
- gTasks[taskID].tLearnMoveState++;
- }
- break;
- case 8:
- if (gUnknown_03004210.state == 0 && !IsSEPlaying())
- {
- StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[208]);
- Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
- gTasks[taskID].tState = 19;
- }
- break;
- case 9:
- StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[8]);
- Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
- gTasks[taskID].tData9 = 10;
- gTasks[taskID].tdata10 = 0;
- gTasks[taskID].tLearnMoveState = 3;
- break;
- case 10:
- StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[9]);
- Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
- gTasks[taskID].tState = 14;
- break;
- case 11:
- if (gUnknown_03004210.state == 0 && !IsSEPlaying())
- gTasks[taskID].tLearnMoveState = 5;
- break;
- }
- break;
- }
-}
-
-static void Task_TradeEvolutionScene(u8 taskID)
-{
- u32 var;
- struct Pokemon* mon = (struct Pokemon*)(gTasks[taskID].tMonPtrHI | (gTasks[taskID].tMonPtrLO << 0x10));
-
- switch (gTasks[taskID].tState)
- {
- case 0:
- StringExpandPlaceholders(gStringVar4, BattleText_StartEvo);
- Text_InitWindow8002EB0(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
- gTasks[taskID].tState++;
- break;
- case 1:
- if (gUnknown_03004828->window.state == 0)
- {
- PlayCry1(gTasks[taskID].tPreEvoSpecies, 0);
- gTasks[taskID].tState++;
- }
- break;
- case 2:
- if (IsCryFinished())
- {
- m4aSongNumStop(BGM_SHINKA);
- PlaySE(BGM_ME_SHINKA);
- gTasks[taskID].tState++;
- }
- break;
- case 3:
- if (!IsSEPlaying())
- {
- PlayBGM(BGM_SHINKA);
- gTasks[taskID].tState++;
- BeginNormalPaletteFade(0x1C, 4, 0, 0x10, 0);
- }
- break;
- case 4:
- if (!gPaletteFade.active)
- {
- REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_1D_MAP;
- sEvoGraphicsTaskID = LaunchTask_PreEvoSparklesSet1(17);
- gTasks[taskID].tState++;
- }
- break;
- case 5:
- if (!gTasks[sEvoGraphicsTaskID].isActive)
- {
- gTasks[taskID].tState++;
- sEvoInfo.field_3 = 1;
- sEvoGraphicsTaskID = LaunchTask_PreEvoSparklesSet2();
- }
- break;
- case 6:
- if (!gTasks[sEvoGraphicsTaskID].isActive)
- {
- sEvoGraphicsTaskID = sub_8149E7C(sEvoInfo.preEvoSpriteID, sEvoInfo.postEvoSpriteID);
- gTasks[taskID].tState++;
- }
- break;
- case 7:
- if (--sEvoInfo.field_3 == 0)
- {
- sEvoInfo.field_3 = 3;
- if (!gTasks[sEvoGraphicsTaskID].isActive)
- gTasks[taskID].tState++;
- }
- break;
- case 8:
- sEvoGraphicsTaskID = LaunchTask_PostEvoSparklesSet1();
- gTasks[taskID].tState++;
- break;
- case 9:
- if (!gTasks[sEvoGraphicsTaskID].isActive)
- {
- sEvoGraphicsTaskID = LaunchTask_PostEvoSparklesSet2AndFlash_Trade(gTasks[taskID].tPostEvoSpecies);
- gTasks[taskID].tState++;
- }
- break;
- case 10:
- if (!gTasks[sEvoGraphicsTaskID].isActive)
- {
- PlaySE(SE_EXP);
- gTasks[taskID].tState++;
- }
- break;
- case 11:
- if (IsSEPlaying())
- {
- PlayCry1(gTasks[taskID].tPostEvoSpecies, 0);
- memcpy(&gPlttBufferUnfaded[0x20], ewram9000_hack, 0x60);
- BeginNormalPaletteFade(1, 0, 0x10, 0, 0);
- gTasks[taskID].tState++;
- }
- break;
- case 12:
- if (IsCryFinished() && !gPaletteFade.active)
- {
- StringExpandPlaceholders(gStringVar4, BattleText_FinishEvo);
- Text_InitWindow8002EB0(&gUnknown_03004828->window, gStringVar4, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
- PlayFanfare(BGM_FANFA5);
- gTasks[taskID].tState++;
- SetMonData(mon, MON_DATA_SPECIES, (void*)(&gTasks[taskID].tPostEvoSpecies));
- CalculateMonStats(mon);
- EvolutionRenameMon(mon, gTasks[taskID].tPreEvoSpecies, gTasks[taskID].tPostEvoSpecies);
- GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskID].tPostEvoSpecies), 2);
- GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskID].tPostEvoSpecies), 3);
- IncrementGameStat(GAME_STAT_EVOLVED_POKEMON);
- }
- break;
- case 13:
- if (gUnknown_03004828->window.state == 0 && IsFanfareTaskInactive() == TRUE)
- {
- var = MonTryLearningNewMove(mon, gTasks[taskID].tLearnsFirstMove);
- if (var != 0 && !gTasks[taskID].tEvoWasStopped)
- {
- u8 text[20];
-
- gTasks[taskID].tBits |= TASK_BIT_LEARN_MOVE;
- gTasks[taskID].tLearnsFirstMove = FALSE;
- gTasks[taskID].tLearnMoveState = 0;
- GetMonData(mon, MON_DATA_NICKNAME, text);
- StringCopy10(gBattleTextBuff1, text);
- if (var == 0xFFFF)
- gTasks[taskID].tState = 17;
- else if (var == 0xFFFE)
- break;
- else
- gTasks[taskID].tState = 15;
- }
- else
- {
- PlayBGM(BGM_SHINKA);
- Text_InitWindow8002EB0(&gUnknown_03004828->window, gOtherText_LinkStandby2, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
- gTasks[taskID].tState++;
- }
- }
- break;
- case 14:
- if (gUnknown_03004828->window.state == 0)
- {
- DestroyTask(taskID);
- SetMainCallback2(gCB2_AfterEvolution);
- }
- break;
- case 15:
- if (gUnknown_03004828->window.state == 0 && !IsSEPlaying())
- {
- sub_8024CEC();
- PlayFanfare(BGM_FANFA1);
- StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[3]);
- Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
- gTasks[taskID].tLearnsFirstMove = 0x40; // re-used as a counter
- gTasks[taskID].tState++;
- }
- break;
- case 16:
- if (gUnknown_03004828->window.state == 0 && IsFanfareTaskInactive() == TRUE && --gTasks[taskID].tLearnsFirstMove == 0)
- gTasks[taskID].tState = 13;
- break;
- case 17:
- switch (gTasks[taskID].tLearnMoveState)
- {
- case 0:
- if (gUnknown_03004828->window.state == 0 && !IsSEPlaying())
- {
- sub_8024CEC();
- StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[4]);
- Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
- gTasks[taskID].tLearnMoveState++;
- }
- break;
- case 1:
- if (gUnknown_03004828->window.state == 0 && !IsSEPlaying())
- {
- StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[5]);
- Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
- gTasks[taskID].tLearnMoveState++;
- }
- break;
- case 2:
- if (gUnknown_03004828->window.state != 0)
- break;
- if (!IsSEPlaying())
- {
- StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[6]);
- Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
- gTasks[taskID].tData9 = 5;
- gTasks[taskID].tdata10 = 9;
- gTasks[taskID].tLearnMoveState++;
- }
- case 3:
- if (gUnknown_03004828->window.state == 0 && !IsSEPlaying())
- {
- TextWindow_DrawStdFrame(&gUnknown_03004828->window, 24, 8, 29, 13);
- sEvoCursorPos = 0;
- Text_InitWindow(&gUnknown_03004828->window, gOtherText_YesNoAndPlayer, gUnknown_03004828->textWindowBaseTileNum + 128, 25, 9);
- Text_PrintWindow8002F44(&gUnknown_03004828->window);
- MenuCursor_Create814A5C0(0, 0xFFFF, 0xC, 0x2D9F, 0x20);
- sub_81150D8();
- gTasks[taskID].tLearnMoveState++;
- sEvoCursorPos = 0;
- }
- break;
- case 4:
- if (gMain.newKeys & DPAD_UP && sEvoCursorPos != 0)
- {
- PlaySE(SE_SELECT);
- EvoDummyFunc2();
- sEvoCursorPos = 0;
- sub_81150D8();
- }
- if (gMain.newKeys & DPAD_DOWN && sEvoCursorPos == 0)
- {
- PlaySE(SE_SELECT);
- EvoDummyFunc2();
- sEvoCursorPos = 1;
- sub_81150D8();
- }
- if (gMain.newKeys & A_BUTTON)
- {
- Text_EraseWindowRect(&gUnknown_03004828->window, 0x18, 8, 0x1D, 0xD);
- DestroyMenuCursor();
- StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[292]);
- Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
- PlaySE(SE_SELECT);
- if (sEvoCursorPos != 0)
- gTasks[taskID].tLearnMoveState = gTasks[taskID].tdata10;
- else
- {
- gTasks[taskID].tLearnMoveState = gTasks[taskID].tData9;
- if (gTasks[taskID].tLearnMoveState == 5)
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- }
- }
- if (gMain.newKeys & B_BUTTON)
- {
- Text_EraseWindowRect(&gUnknown_03004828->window, 0x18, 8, 0x1D, 0xD);
- DestroyMenuCursor();
- StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[292]);
- Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
- PlaySE(SE_SELECT);
- gTasks[taskID].tLearnMoveState = gTasks[taskID].tdata10;
- }
- break;
- case 5:
- if (!gPaletteFade.active)
- {
- ShowSelectMovePokemonSummaryScreen(gPlayerParty, gTasks[taskID].tPartyID,
- gPlayerPartyCount - 1, CB2_TradeEvolutionSceneLoadGraphics,
- gMoveToLearn);
- gTasks[taskID].tLearnMoveState++;
- }
- break;
- case 6:
- if (!gPaletteFade.active && gMain.callback2 == CB2_TradeEvolutionSceneUpdate)
- {
- var = sub_809FA30(); // moveID
- if (var == 4)
- gTasks[taskID].tLearnMoveState = 9;
- else
- {
- u16 move = GetMonData(mon, var + MON_DATA_MOVE1);
- if (IsHMMove2(move))
- {
- StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[307]);
- Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
- gTasks[taskID].tLearnMoveState = 11;
- }
- else
- {
- gBattleTextBuff2[0] = 0xFD;
- gBattleTextBuff2[1] = 2;
- gBattleTextBuff2[2] = move;
- gBattleTextBuff2[3] = (move & 0xFF00) >> 8;
- gBattleTextBuff2[4] = EOS;
- RemoveMonPPBonus(mon, var);
- SetMonMoveSlot(mon, gMoveToLearn, var);
- StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[207]);
- Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
- gTasks[taskID].tLearnMoveState++;
- }
- }
- }
- break;
- case 7:
- if (gUnknown_03004828->window.state == 0 && !IsSEPlaying())
- {
- StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[7]);
- Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
- gTasks[taskID].tLearnMoveState++;
- }
- break;
- case 8:
- if (gUnknown_03004828->window.state == 0 && !IsSEPlaying())
- {
- StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[208]);
- Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
- gTasks[taskID].tState = 15;
- }
- break;
- case 9:
- StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[8]);
- Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
- gTasks[taskID].tData9 = 10;
- gTasks[taskID].tdata10 = 0;
- gTasks[taskID].tLearnMoveState = 3;
- break;
- case 10:
- StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[9]);
- Text_InitWindow8002EB0(&gUnknown_03004828->window, gDisplayedStringBattle, gUnknown_03004828->textWindowBaseTileNum, 2, 15);
- gTasks[taskID].tState = 13;
- break;
- case 11:
- if (gUnknown_03004828->window.state == 0 && !IsSEPlaying())
- gTasks[taskID].tLearnMoveState = 5;
- break;
- }
- break;
- }
-}
-
-/*
-DizzyEgg, 27.08.2017
-NOTE:
- Functions below are all unused.
- What's more, they do NOT exist in Emerald.
- That's why I think there is no reason to decompile those,
- as they probably were prototypes for the evolution
- functions.
-*/
-
-/*
-void unref_sub_8113B50(u8 *a, u8 *b)
-{
- //u8 *sp0 = a;
- //u8 *sp4 = b;
-#define sp0 a
-#define sp4 b
- s32 sp8;
- s32 spC = 0;
- u32 sp10 = 0;
- s32 sp14;
- s32 r6;
- u32 r8;
-
- for (sp8 = 0; sp8 < 64; sp8++)
- {
- sEvoInfo.unk84[sp8] = 0;
- sEvoInfo.unk4[sp8] = 0;
- sEvoInfo.unk44[sp8] = 0;
- for (r6 = 0; r6 < 32; r6++)
- {
- sEvoInfo.unk10C4[sp8][r6] = 0;
- sEvoInfo.unk18C4[sp8][r6] = 0;
- sEvoInfo.unk20C4[sp8][r6] = 0;
- sEvoInfo.unk28C4[sp8][r6] = 0;
- sEvoInfo.unkC4[sp8][r6] = 0;
- sEvoInfo.unk8C4[sp8][r6] = 0;
- sEvoInfo.unk30C4[sp8][r6] = 0;
- sEvoInfo.unk38C4[sp8][r6] = 0;
-
- sEvoInfo.unk60C4[sp8][r6] = 0;
- sEvoInfo.unk70C4[sp8][r6] = 0;
- sEvoInfo.unk80C4[sp8][r6] = 0;
- sEvoInfo.unk90C4[sp8][r6] = 0;
- }
- }
-
- sEvoInfo.unkA0C4 = 64;
- r8 = 0;
- for (sp8 = 0; sp8 < 64; sp8++)
- {
- //_08113C32
- u32 r3 = 0;
- u8 *r2 = sp0 + r8;
-
- for (r6 = 0; r6 < 64; r6++)
- {
- sEvoInfo.unk40C4[sp8][r6 >> 1] = r2;
- switch (r3)
- {
- case 0:
- switch (r6 & 1)
- {
- case 0:
- if (*r2 & 0xF)
- {
- sEvoInfo.unk10C4[sp8][sEvoInfo.unk4[sp8]] = r6;
- r3 = 1;
- }
- break;
- case 1:
- if (*r2 & 0xF0)
- {
- sEvoInfo.unk10C4[sp8][sEvoInfo.unk4[sp8]] = r6;
- r3 = 1;
- }
- break;
- }
- break;
- case 1:
- switch (r6 & r3)
- {
- case 0:
- if (*r2 & 0xF)
- {
- sEvoInfo.unk18C4[sp8][sEvoInfo.unk4[sp8]] = r6 - 1;
- sEvoInfo.unk4[sp8]++;
- r3 = 0;
- }
- break;
- case 1:
- if (*r2 & 0xF0)
- {
- sEvoInfo.unk18C4[sp8][sEvoInfo.unk4[sp8]] = r6 - 1;
- sEvoInfo.unk4[sp8]++;
- r3 = 0;
- }
- break;
- }
- }
- //if (!((r6 + 1) & 7))
- if ((r6 + 1) % 8 == 0)
- r2 += 0x1D;
- else if (r6 & 1)
- r2 += 1;
- }
- if (r3)
- {
- sEvoInfo.unk18C4[sp8][sEvoInfo.unk4[sp8]] = r6;
- sEvoInfo.unk4[sp8]++;
- }
- //_08113D26
- if (!((sp8 + 1) & 7))
- r8 += 0xE4;
- else
- r8 += 4;
- }
- //_08113D4A
- r8 = 0;
- for (sp8 = 0; sp8 < 64; sp8++)
- {
- //_08113D6A
- u32 r3 = 0;
- u8 *r2 = sp4 + r8;
-
- for (r6 = 0; r6 < 64; r6++)
- {
- switch (r3)
- {
- case 0:
- switch (r6 & 1)
- {
- case 0:
- if (*r2 & 0xF)
- {
- sEvoInfo.unk20C4[sp8][sEvoInfo.unk44[sp8]] = r6;
- r3 = 1;
- }
- break;
- case 1:
- if (*r2 & 0xF0)
- {
- sEvoInfo.unk20C4[sp8][sEvoInfo.unk44[sp8]] = r6;
- r3 = 1;
- }
- break;
- }
- break;
- case 1:
- switch (r6 & r3)
- {
- case 0:
- if (*r2 & 0xF)
- {
- sEvoInfo.unk28C4[sp8][sEvoInfo.unk44[sp8]] = r6 - 1;
- sEvoInfo.unk44[sp8]++;
- r3 = 0;
- }
- break;
- case 1:
- if (*r2 & 0xF0)
- {
- sEvoInfo.unk28C4[sp8][sEvoInfo.unk44[sp8]] = r6 - 1;
- sEvoInfo.unk44[sp8]++;
- r3 = 0;
- }
- break;
- }
- }
- //_08113DE4
- if (!((r6 + 1) & 7))
- r2 += 0x1D;
- else if (r6 & 1)
- r2 += 1;
-
- }
- if (r3)
- {
- sEvoInfo.unk28C4[sp8][sEvoInfo.unk44[sp8]] = r6;
- sEvoInfo.unk44[sp8]++;
- }
- //if (!((sp8 + 1) & 7))
- if ((sp8 + 1) % 8 == 0)
- r8 += 0xE4;
- else
- r8 += 4;
- }
-
- for (sp8 = 0; sp8 < 0x40; sp8++) //_08113E3A
- {
- if (sEvoInfo.unk4[sp8] < sEvoInfo.unk44[sp8])
- {
- for (spC = 0; spC < sEvoInfo.unk4[sp8]; spC++)
- {
- sp14 = 0x100;
-
- for (r6 = 0; r6 < sEvoInfo.unk44[sp8]; r6++)
- {
- s32 r3;
-
- //_08113EA4
- if (sEvoInfo.unk10C4[sp8][spC] > sEvoInfo.unk20C4[sp8][r6])
- r3 = sEvoInfo.unk10C4[sp8][spC] - sEvoInfo.unk20C4[sp8][r6];
- else
- r3 = sEvoInfo.unk20C4[sp8][r6] - sEvoInfo.unk10C4[sp8][spC];
-
- if (sEvoInfo.unk18C4[sp8][spC] > sEvoInfo.unk28C4[sp8][spC])
- r3 += sEvoInfo.unk18C4[sp8][spC] - sEvoInfo.unk28C4[sp8][spC];
- else
- r3 += sEvoInfo.unk28C4[sp8][spC] - sEvoInfo.unk18C4[sp8][spC];
-
- if (sp14 >= r3 && sEvoInfo.unkC4[sp8][r6] == 0 && sEvoInfo.unk8C4[sp8][r6] == 0)
- {
- sp10 = r6;
- sp14 = r3;
- }
- }
- //_08113F3E
- sub_81141F0(spC, sp10, sp8);
- }
- //_08113F54
-
- for (r6 = 0; r6 < sEvoInfo.unk44[sp8]; r6++)
- {
- if (sEvoInfo.unkC4[sp8][r6] == 0 && sEvoInfo.unk8C4[sp8][r6] == 0)
- sub_811430C(r6, sp8);
- }
- }
- //_08113F9E
- if (sEvoInfo.unk4[sp8] == sEvoInfo.unk44[sp8])
- {
- for (r6 = 0; r6 < sEvoInfo.unk4[sp8]; r6++)
- sub_81141F0(r6, r6, sp8);
- }
- //_08113FCC
- if (sEvoInfo.unk4[sp8] > sEvoInfo.unk44[sp8])
- {
- for (sp10 = 0; sp10 < sEvoInfo.unk44[sp8]; sp10++)
- {
- sp14 = 0x100;
-
- for (r6 = 0; r6 < sEvoInfo.unk4[sp8]; r6++)
- {
- s32 r3;
-
- if (sEvoInfo.unk10C4[sp8][r6] > sEvoInfo.unk20C4[sp8][sp10])
- r3 = sEvoInfo.unk10C4[sp8][r6] - sEvoInfo.unk20C4[sp8][sp10];
- else
- r3 = sEvoInfo.unk20C4[sp8][sp10] - sEvoInfo.unk10C4[sp8][r6];
-
- if (sEvoInfo.unk18C4[sp8][r6] > sEvoInfo.unk28C4[sp8][sp10])
- r3 += sEvoInfo.unk18C4[sp8][r6] - sEvoInfo.unk28C4[sp8][sp10];
- else
- r3 += sEvoInfo.unk28C4[sp8][sp10] - sEvoInfo.unk18C4[sp8][r6];
-
- //r3 = abs(sEvoInfo.unk10C4[sp8][r6] - sEvoInfo.unk20C4[sp8][sp10]);
- //r3 += abs(sEvoInfo.unk18C4[sp8][r6] - sEvoInfo.unk28C4[sp8][sp10]);
-
- if (sp14 > r3 && sEvoInfo.unkC4[sp8][r6] == 0)
- {
- spC = r6;
- sp14 = r3;
- }
- }
- //_081140C4
- sEvoInfo.unk30C4[sp8][spC] = sEvoInfo.unk20C4[sp8][sp10];
- sEvoInfo.unk38C4[sp8][spC] = sEvoInfo.unk28C4[sp8][sp10];
- sEvoInfo.unkC4[sp8][spC] = 1;
- }
- //_08114104
- for (r6 = 0; r6 < sEvoInfo.unk4[sp8]; r6++)
- {
- sEvoInfo.unk20C4[sp8][r6] = sEvoInfo.unk30C4[sp8][r6];
- sEvoInfo.unk28C4[sp8][r6] = sEvoInfo.unk38C4[sp8][r6];
- if (sEvoInfo.unkC4[sp8][r6] != 0)
- {
- sEvoInfo.unkC4[sp8][r6] = 0;
- sub_81141F0(r6, r6, sp8);
- }
- else
- {
- // Ugh, can't get this part right
- //u8 *ptr1 = &sEvoInfo.unk10C4[sp8][r6];
- //u8 *ptr2 = &sEvoInfo.unk18C4[sp8][r6];
- //s32 r2 = *ptr1 + (*ptr2 - *ptr1) / 2;
-
- //u8 r0_ = sEvoInfo.unk10C4[sp8][r6];
- //u8 r2_ = sEvoInfo.unk18C4[sp8][r6];
- //s32 r2 = (r0_ - r2_) / 2;
-
- s32 r2 = (sEvoInfo.unk18C4[sp8][r6] - sEvoInfo.unk10C4[sp8][r6]);
- s32 r2_ = sEvoInfo.unk10C4[sp8][r6];
-
- sEvoInfo.unk20C4[sp8][r6] = sEvoInfo.unk28C4[sp8][r6] = r2_ + r2 / 2;
- sEvoInfo.unk28C4[sp8][r6]++;
- sub_81141F0(r6, r6, sp8);
- }
- }
- }
- //_081141C4
- }
-#undef sp0
-#undef sp4
-}
-*/
-__attribute__((naked))
-void unref_sub_8113B50()
-{
- 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, 0x3C\n\
- str r0, [sp]\n\
- str r1, [sp, 0x4]\n\
- movs r0, 0\n\
- str r0, [sp, 0xC]\n\
- movs r1, 0\n\
- str r1, [sp, 0x10]\n\
- movs r2, 0\n\
- str r2, [sp, 0x8]\n\
- ldr r3, _08113C60 @ =gSharedMem + 0x14800\n\
- mov r12, r3\n\
- ldr r4, _08113C64 @ =0x000018c4\n\
- add r4, r12\n\
- mov r10, r4\n\
- ldr r5, _08113C68 @ =0x000020c4\n\
- add r5, r12\n\
- mov r8, r5\n\
-_08113B7C:\n\
- adds r0, r3, 0\n\
- adds r0, 0x84\n\
- ldr r1, [sp, 0x8]\n\
- adds r0, r1, r0\n\
- strb r2, [r0]\n\
- adds r0, r3, 0x4\n\
- adds r0, r1, r0\n\
- strb r2, [r0]\n\
- ldr r4, _08113C6C @ =gSharedMem + 0x14844\n\
- adds r0, r1, r4\n\
- strb r2, [r0]\n\
- movs r6, 0\n\
- lsls r1, 5\n\
- mov r9, r1\n\
- ldr r5, [sp, 0x8]\n\
- lsls r4, r5, 6\n\
-_08113B9C:\n\
- mov r0, r9\n\
- adds r1, r6, r0\n\
- ldr r5, _08113C70 @ =gSharedMem + 0x158C4\n\
- adds r0, r1, r5\n\
- strb r2, [r0]\n\
- mov r5, r10\n\
- adds r0, r1, r5\n\
- strb r2, [r0]\n\
- mov r5, r8\n\
- adds r0, r1, r5\n\
- strb r2, [r0]\n\
- ldr r5, _08113C74 @ =gSharedMem + 0x170C4\n\
- adds r0, r1, r5\n\
- strb r2, [r0]\n\
- adds r7, r3, 0\n\
- adds r7, 0xC4\n\
- adds r0, r1, r7\n\
- strb r2, [r0]\n\
- ldr r5, _08113C78 @ =0x000008c4\n\
- adds r0, r3, r5\n\
- adds r0, r1, r0\n\
- strb r2, [r0]\n\
- ldr r5, _08113C7C @ =0x000030c4\n\
- adds r0, r3, r5\n\
- adds r0, r1, r0\n\
- strb r2, [r0]\n\
- ldr r5, _08113C80 @ =0x000038c4\n\
- adds r0, r3, r5\n\
- adds r1, r0\n\
- strb r2, [r1]\n\
- lsls r1, r6, 1\n\
- adds r1, r4\n\
- ldr r5, _08113C84 @ =0x000060c4\n\
- adds r0, r3, r5\n\
- adds r0, r1, r0\n\
- strh r2, [r0]\n\
- ldr r5, _08113C88 @ =0x000070c4\n\
- adds r0, r3, r5\n\
- adds r0, r1, r0\n\
- strh r2, [r0]\n\
- ldr r5, _08113C8C @ =0x000080c4\n\
- adds r0, r3, r5\n\
- adds r0, r1, r0\n\
- strh r2, [r0]\n\
- ldr r5, _08113C90 @ =0x000090c4\n\
- adds r0, r3, r5\n\
- adds r1, r0\n\
- strh r2, [r1]\n\
- adds r6, 0x1\n\
- cmp r6, 0x1F\n\
- ble _08113B9C\n\
- ldr r0, [sp, 0x8]\n\
- adds r0, 0x1\n\
- str r0, [sp, 0x8]\n\
- cmp r0, 0x3F\n\
- ble _08113B7C\n\
- ldr r1, _08113C94 @ =0x0000a0c4\n\
- add r1, r12\n\
- movs r0, 0x40\n\
- strb r0, [r1]\n\
- movs r1, 0\n\
- mov r8, r1\n\
- movs r2, 0\n\
- str r2, [sp, 0x8]\n\
- movs r3, 0x80\n\
- lsls r3, 5\n\
- adds r3, r7\n\
- mov r12, r3\n\
- movs r4, 0xC0\n\
- lsls r4, 5\n\
- adds r4, r7\n\
- mov r9, r4\n\
- movs r5, 0\n\
- adds r4, r7, 0\n\
- subs r4, 0xC0\n\
-_08113C32:\n\
- movs r3, 0\n\
- ldr r2, [sp]\n\
- add r2, r8\n\
- movs r6, 0\n\
- ldr r0, [sp, 0x8]\n\
- adds r0, 0x1\n\
- str r0, [sp, 0x30]\n\
- ldr r1, [sp, 0x8]\n\
- lsls r1, 7\n\
- mov r10, r1\n\
- movs r7, 0x1\n\
- negs r7, r7\n\
-_08113C4A:\n\
- asrs r0, r6, 1\n\
- lsls r0, 2\n\
- add r0, r10\n\
- ldr r1, _08113C98 @ =gSharedMem + 0x188C4\n\
- adds r0, r1\n\
- str r2, [r0]\n\
- cmp r3, 0\n\
- beq _08113C9C\n\
- cmp r3, 0x1\n\
- beq _08113CC6\n\
- b _08113CF4\n\
- .align 2, 0\n\
-_08113C60: .4byte gSharedMem + 0x14800\n\
-_08113C64: .4byte 0x000018c4\n\
-_08113C68: .4byte 0x000020c4\n\
-_08113C6C: .4byte gSharedMem + 0x14844\n\
-_08113C70: .4byte gSharedMem + 0x158C4\n\
-_08113C74: .4byte gSharedMem + 0x170C4\n\
-_08113C78: .4byte 0x000008c4\n\
-_08113C7C: .4byte 0x000030c4\n\
-_08113C80: .4byte 0x000038c4\n\
-_08113C84: .4byte 0x000060c4\n\
-_08113C88: .4byte 0x000070c4\n\
-_08113C8C: .4byte 0x000080c4\n\
-_08113C90: .4byte 0x000090c4\n\
-_08113C94: .4byte 0x0000a0c4\n\
-_08113C98: .4byte gSharedMem + 0x188C4\n\
-_08113C9C:\n\
- movs r0, 0x1\n\
- ands r0, r6\n\
- cmp r0, 0\n\
- beq _08113CAA\n\
- cmp r0, 0x1\n\
- beq _08113CB0\n\
- b _08113CF4\n\
-_08113CAA:\n\
- ldrb r1, [r2]\n\
- movs r0, 0xF\n\
- b _08113CB4\n\
-_08113CB0:\n\
- ldrb r1, [r2]\n\
- movs r0, 0xF0\n\
-_08113CB4:\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08113CF4\n\
- ldrb r0, [r4]\n\
- adds r0, r5\n\
- add r0, r12\n\
- strb r6, [r0]\n\
- movs r3, 0x1\n\
- b _08113CF4\n\
-_08113CC6:\n\
- adds r0, r6, 0\n\
- ands r0, r3\n\
- cmp r0, 0\n\
- beq _08113CD4\n\
- cmp r0, 0x1\n\
- beq _08113CDA\n\
- b _08113CF4\n\
-_08113CD4:\n\
- ldrb r1, [r2]\n\
- movs r0, 0xF\n\
- b _08113CDE\n\
-_08113CDA:\n\
- ldrb r1, [r2]\n\
- movs r0, 0xF0\n\
-_08113CDE:\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08113CF4\n\
- ldrb r0, [r4]\n\
- adds r0, r5\n\
- add r0, r9\n\
- strb r7, [r0]\n\
- ldrb r0, [r4]\n\
- adds r0, 0x1\n\
- strb r0, [r4]\n\
- movs r3, 0\n\
-_08113CF4:\n\
- adds r0, r6, 0x1\n\
- movs r1, 0x7\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08113D02\n\
- adds r2, 0x1D\n\
- b _08113D0C\n\
-_08113D02:\n\
- movs r0, 0x1\n\
- ands r0, r6\n\
- cmp r0, 0\n\
- beq _08113D0C\n\
- adds r2, 0x1\n\
-_08113D0C:\n\
- adds r7, 0x1\n\
- adds r6, 0x1\n\
- cmp r6, 0x3F\n\
- ble _08113C4A\n\
- cmp r3, 0\n\
- beq _08113D26\n\
- ldrb r0, [r4]\n\
- adds r0, r5\n\
- add r0, r9\n\
- strb r6, [r0]\n\
- ldrb r0, [r4]\n\
- adds r0, 0x1\n\
- strb r0, [r4]\n\
-_08113D26:\n\
- movs r0, 0x7\n\
- ldr r2, [sp, 0x30]\n\
- ands r2, r0\n\
- cmp r2, 0\n\
- bne _08113D36\n\
- movs r3, 0xE4\n\
- add r8, r3\n\
- b _08113D3A\n\
-_08113D36:\n\
- movs r0, 0x4\n\
- add r8, r0\n\
-_08113D3A:\n\
- adds r5, 0x20\n\
- adds r4, 0x1\n\
- ldr r1, [sp, 0x8]\n\
- adds r1, 0x1\n\
- str r1, [sp, 0x8]\n\
- cmp r1, 0x3F\n\
- bgt _08113D4A\n\
- b _08113C32\n\
-_08113D4A:\n\
- movs r2, 0\n\
- mov r8, r2\n\
- movs r3, 0\n\
- str r3, [sp, 0x8]\n\
- ldr r0, _08113D84 @ =gSharedMem + 0x14844\n\
- movs r4, 0x82\n\
- lsls r4, 6\n\
- adds r4, r0\n\
- mov r10, r4\n\
- movs r5, 0xA2\n\
- lsls r5, 6\n\
- adds r7, r0, r5\n\
- movs r5, 0\n\
- adds r4, r0, 0\n\
- movs r0, 0x1\n\
- mov r9, r0\n\
-_08113D6A:\n\
- movs r3, 0\n\
- ldr r2, [sp, 0x4]\n\
- add r2, r8\n\
- movs r6, 0\n\
- ldr r1, [sp, 0x8]\n\
- adds r1, 0x1\n\
- str r1, [sp, 0x30]\n\
-_08113D78:\n\
- cmp r3, 0\n\
- beq _08113D88\n\
- cmp r3, 0x1\n\
- beq _08113DB4\n\
- b _08113DE4\n\
- .align 2, 0\n\
-_08113D84: .4byte gSharedMem + 0x14844\n\
-_08113D88:\n\
- adds r0, r6, 0\n\
- mov r1, r9\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08113D98\n\
- cmp r0, 0x1\n\
- beq _08113D9E\n\
- b _08113DE4\n\
-_08113D98:\n\
- ldrb r1, [r2]\n\
- movs r0, 0xF\n\
- b _08113DA2\n\
-_08113D9E:\n\
- ldrb r1, [r2]\n\
- movs r0, 0xF0\n\
-_08113DA2:\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08113DE4\n\
- ldrb r0, [r4]\n\
- adds r0, r5\n\
- add r0, r10\n\
- strb r6, [r0]\n\
- movs r3, 0x1\n\
- b _08113DE4\n\
-_08113DB4:\n\
- adds r0, r6, 0\n\
- ands r0, r3\n\
- cmp r0, 0\n\
- beq _08113DC2\n\
- cmp r0, 0x1\n\
- beq _08113DC8\n\
- b _08113DE4\n\
-_08113DC2:\n\
- ldrb r1, [r2]\n\
- movs r0, 0xF\n\
- b _08113DCC\n\
-_08113DC8:\n\
- ldrb r1, [r2]\n\
- movs r0, 0xF0\n\
-_08113DCC:\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08113DE4\n\
- ldrb r0, [r4]\n\
- adds r0, r5\n\
- adds r0, r7\n\
- subs r1, r6, 0x1\n\
- strb r1, [r0]\n\
- ldrb r0, [r4]\n\
- adds r0, 0x1\n\
- strb r0, [r4]\n\
- movs r3, 0\n\
-_08113DE4:\n\
- adds r1, r6, 0x1\n\
- movs r0, 0x7\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08113DF2\n\
- adds r2, 0x1D\n\
- b _08113DFC\n\
-_08113DF2:\n\
- mov r0, r9\n\
- ands r6, r0\n\
- cmp r6, 0\n\
- beq _08113DFC\n\
- adds r2, 0x1\n\
-_08113DFC:\n\
- adds r6, r1, 0\n\
- cmp r6, 0x3F\n\
- ble _08113D78\n\
- cmp r3, 0\n\
- beq _08113E14\n\
- ldrb r0, [r4]\n\
- adds r0, r5\n\
- adds r0, r7\n\
- strb r6, [r0]\n\
- ldrb r0, [r4]\n\
- adds r0, 0x1\n\
- strb r0, [r4]\n\
-_08113E14:\n\
- movs r0, 0x7\n\
- ldr r1, [sp, 0x30]\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- bne _08113E24\n\
- movs r2, 0xE4\n\
- add r8, r2\n\
- b _08113E28\n\
-_08113E24:\n\
- movs r3, 0x4\n\
- add r8, r3\n\
-_08113E28:\n\
- adds r5, 0x20\n\
- adds r4, 0x1\n\
- ldr r0, [sp, 0x8]\n\
- adds r0, 0x1\n\
- str r0, [sp, 0x8]\n\
- cmp r0, 0x3F\n\
- ble _08113D6A\n\
- movs r1, 0\n\
- str r1, [sp, 0x8]\n\
-_08113E3A:\n\
- ldr r3, [sp, 0x8]\n\
- ldr r4, _08113EBC @ =gSharedMem + 0x14804\n\
- adds r2, r3, r4\n\
- ldr r5, _08113EC0 @ =gSharedMem + 0x14844\n\
- adds r1, r3, r5\n\
- ldrb r0, [r2]\n\
- adds r3, 0x1\n\
- str r3, [sp, 0x30]\n\
- ldrb r1, [r1]\n\
- cmp r0, r1\n\
- bcc _08113E52\n\
- b _08113F9E\n\
-_08113E52:\n\
- movs r0, 0\n\
- str r0, [sp, 0xC]\n\
- ldrb r2, [r2]\n\
- cmp r0, r2\n\
- bge _08113F54\n\
- ldr r0, _08113EC4 @ =gSharedMem + 0x14800\n\
- adds r0, 0x4\n\
- ldr r1, [sp, 0x8]\n\
- adds r0, r1, r0\n\
- str r0, [sp, 0x18]\n\
-_08113E66:\n\
- movs r2, 0x80\n\
- lsls r2, 1\n\
- str r2, [sp, 0x14]\n\
- movs r6, 0\n\
- ldr r3, [sp, 0x8]\n\
- ldr r4, _08113EC0 @ =gSharedMem + 0x14844\n\
- adds r0, r3, r4\n\
- ldr r5, [sp, 0xC]\n\
- adds r5, 0x1\n\
- str r5, [sp, 0x34]\n\
- ldrb r0, [r0]\n\
- cmp r6, r0\n\
- bge _08113F3E\n\
- ldr r0, _08113EC4 @ =gSharedMem + 0x14800\n\
- mov r10, r0\n\
- lsls r0, r3, 5\n\
- ldr r2, [sp, 0xC]\n\
- adds r1, r2, r0\n\
- mov r9, r0\n\
- ldr r0, _08113EC4 @ =gSharedMem + 0x14800\n\
- adds r0, 0xC4\n\
- mov r3, r9\n\
- adds r7, r3, r0\n\
- mov r5, r9\n\
- ldr r4, _08113EC4 @ =gSharedMem + 0x14800\n\
- ldr r2, _08113EC8 @ =0x000010c4\n\
- adds r0, r4, r2\n\
- adds r1, r0\n\
- mov r8, r1\n\
- ldrb r3, [r1]\n\
- str r3, [sp, 0x1C]\n\
-_08113EA4:\n\
- ldr r0, _08113ECC @ =0x000020c4\n\
- add r0, r10\n\
- adds r0, r5, r0\n\
- ldr r4, [sp, 0x1C]\n\
- ldrb r1, [r0]\n\
- cmp r4, r1\n\
- bls _08113ED0\n\
- mov r2, r8\n\
- ldrb r1, [r2]\n\
- ldrb r0, [r0]\n\
- b _08113ED6\n\
- .align 2, 0\n\
-_08113EBC: .4byte gSharedMem + 0x14804\n\
-_08113EC0: .4byte gSharedMem + 0x14844\n\
-_08113EC4: .4byte gSharedMem + 0x14800\n\
-_08113EC8: .4byte 0x000010c4\n\
-_08113ECC: .4byte 0x000020c4\n\
-_08113ED0:\n\
- ldrb r1, [r0]\n\
- mov r3, r8\n\
- ldrb r0, [r3]\n\
-_08113ED6:\n\
- subs r3, r1, r0\n\
- ldr r1, [sp, 0xC]\n\
- add r1, r9\n\
- ldr r0, _08113EFC @ =0x000018c4\n\
- add r0, r10\n\
- adds r4, r1, r0\n\
- ldr r0, _08113F00 @ =0x000028c4\n\
- add r0, r10\n\
- adds r2, r5, r0\n\
- ldrb r0, [r4]\n\
- ldr r1, _08113F04 @ =gSharedMem + 0x14800\n\
- mov r12, r1\n\
- ldrb r1, [r2]\n\
- cmp r0, r1\n\
- bls _08113F08\n\
- adds r1, r0, 0\n\
- ldrb r0, [r2]\n\
- b _08113F0C\n\
- .align 2, 0\n\
-_08113EFC: .4byte 0x000018c4\n\
-_08113F00: .4byte 0x000028c4\n\
-_08113F04: .4byte gSharedMem + 0x14800\n\
-_08113F08:\n\
- ldrb r1, [r2]\n\
- ldrb r0, [r4]\n\
-_08113F0C:\n\
- subs r1, r0\n\
- adds r3, r1\n\
- ldr r2, [sp, 0x14]\n\
- cmp r2, r3\n\
- ble _08113F2C\n\
- ldrb r0, [r7]\n\
- cmp r0, 0\n\
- bne _08113F2C\n\
- ldr r0, _08114050 @ =0x000008c4\n\
- add r0, r12\n\
- adds r0, r5, r0\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- bne _08113F2C\n\
- str r6, [sp, 0x10]\n\
- str r3, [sp, 0x14]\n\
-_08113F2C:\n\
- adds r7, 0x1\n\
- adds r5, 0x1\n\
- adds r6, 0x1\n\
- ldr r3, [sp, 0x8]\n\
- ldr r4, _08114054 @ =gSharedMem + 0x14844\n\
- adds r0, r3, r4\n\
- ldrb r0, [r0]\n\
- cmp r6, r0\n\
- blt _08113EA4\n\
-_08113F3E:\n\
- ldr r0, [sp, 0xC]\n\
- ldr r1, [sp, 0x10]\n\
- ldr r2, [sp, 0x8]\n\
- bl sub_81141F0\n\
- ldr r5, [sp, 0x34]\n\
- str r5, [sp, 0xC]\n\
- ldr r0, [sp, 0x18]\n\
- ldrb r0, [r0]\n\
- cmp r5, r0\n\
- blt _08113E66\n\
-_08113F54:\n\
- movs r6, 0\n\
- ldr r2, _08114058 @ =gSharedMem + 0x14800\n\
- ldr r1, [sp, 0x8]\n\
- ldr r3, _08114054 @ =gSharedMem + 0x14844\n\
- adds r0, r1, r3\n\
- adds r4, r2, 0\n\
- mov r12, r4\n\
- ldrb r0, [r0]\n\
- cmp r6, r0\n\
- bge _08113F9E\n\
- mov r0, r12\n\
- adds r0, 0x44\n\
- adds r4, r1, r0\n\
-_08113F6E:\n\
- ldr r5, [sp, 0x8]\n\
- lsls r0, r5, 5\n\
- adds r1, r6, r0\n\
- adds r0, r2, 0\n\
- adds r0, 0xC4\n\
- adds r0, r1, r0\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- bne _08113F94\n\
- ldr r3, _08114050 @ =0x000008c4\n\
- adds r0, r2, r3\n\
- adds r0, r1, r0\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- bne _08113F94\n\
- adds r0, r6, 0\n\
- adds r1, r5, 0\n\
- bl sub_811430C\n\
-_08113F94:\n\
- adds r6, 0x1\n\
- ldr r2, _08114058 @ =gSharedMem + 0x14800\n\
- ldrb r5, [r4]\n\
- cmp r6, r5\n\
- blt _08113F6E\n\
-_08113F9E:\n\
- ldr r0, [sp, 0x8]\n\
- ldr r1, _0811405C @ =gSharedMem + 0x14804\n\
- adds r2, r0, r1\n\
- ldr r3, _08114054 @ =gSharedMem + 0x14844\n\
- adds r1, r0, r3\n\
- ldrb r0, [r2]\n\
- ldrb r1, [r1]\n\
- cmp r0, r1\n\
- bne _08113FCC\n\
- movs r6, 0\n\
- ldrb r4, [r2]\n\
- cmp r6, r4\n\
- bge _08113FCC\n\
- adds r4, r2, 0\n\
-_08113FBA:\n\
- adds r0, r6, 0\n\
- adds r1, r6, 0\n\
- ldr r2, [sp, 0x8]\n\
- bl sub_81141F0\n\
- adds r6, 0x1\n\
- ldrb r5, [r4]\n\
- cmp r6, r5\n\
- blt _08113FBA\n\
-_08113FCC:\n\
- ldr r0, [sp, 0x8]\n\
- ldr r1, _0811405C @ =gSharedMem + 0x14804\n\
- adds r2, r0, r1\n\
- ldr r3, _08114054 @ =gSharedMem + 0x14844\n\
- adds r1, r0, r3\n\
- ldrb r0, [r2]\n\
- ldr r4, _08114058 @ =gSharedMem + 0x14800\n\
- ldrb r5, [r1]\n\
- cmp r0, r5\n\
- bhi _08113FE2\n\
- b _081141C4\n\
-_08113FE2:\n\
- movs r0, 0\n\
- str r0, [sp, 0x10]\n\
- ldrb r1, [r1]\n\
- cmp r0, r1\n\
- blt _08113FEE\n\
- b _08114104\n\
-_08113FEE:\n\
- str r2, [sp, 0x2C]\n\
- ldr r1, [sp, 0x8]\n\
- lsls r1, 5\n\
- mov r9, r1\n\
- adds r0, r4, 0\n\
- adds r0, 0x44\n\
- ldr r2, [sp, 0x8]\n\
- adds r0, r2, r0\n\
- str r0, [sp, 0x20]\n\
- mov r3, r9\n\
- str r3, [sp, 0x24]\n\
-_08114004:\n\
- movs r4, 0x80\n\
- lsls r4, 1\n\
- str r4, [sp, 0x14]\n\
- movs r6, 0\n\
- ldr r5, [sp, 0x10]\n\
- adds r5, 0x1\n\
- str r5, [sp, 0x38]\n\
- ldr r0, [sp, 0x2C]\n\
- ldrb r0, [r0]\n\
- cmp r6, r0\n\
- bge _081140C4\n\
- ldr r1, [sp, 0x10]\n\
- ldr r2, [sp, 0x24]\n\
- adds r1, r2\n\
- mov r10, r1\n\
- ldr r0, _08114058 @ =gSharedMem + 0x14800\n\
- adds r0, 0xC4\n\
- adds r2, r0\n\
- mov r8, r2\n\
- ldr r7, [sp, 0x24]\n\
- ldr r3, _08114058 @ =gSharedMem + 0x14800\n\
- ldr r4, _08114060 @ =0x000010c4\n\
- adds r0, r3, r4\n\
- adds r5, r7, r0\n\
- ldr r0, _08114064 @ =gSharedMem + 0x168C4\n\
- add r0, r10\n\
- mov r12, r0\n\
- ldrb r1, [r0]\n\
- str r1, [sp, 0x28]\n\
-_0811403E:\n\
- ldrb r0, [r5]\n\
- ldr r2, [sp, 0x28]\n\
- cmp r0, r2\n\
- bls _08114068\n\
- adds r1, r0, 0\n\
- mov r3, r12\n\
- ldrb r0, [r3]\n\
- b _0811406E\n\
- .align 2, 0\n\
-_08114050: .4byte 0x000008c4\n\
-_08114054: .4byte gSharedMem + 0x14844\n\
-_08114058: .4byte gSharedMem + 0x14800\n\
-_0811405C: .4byte gSharedMem + 0x14804\n\
-_08114060: .4byte 0x000010c4\n\
-_08114064: .4byte gSharedMem + 0x168C4\n\
-_08114068:\n\
- mov r4, r12\n\
- ldrb r1, [r4]\n\
- ldrb r0, [r5]\n\
-_0811406E:\n\
- subs r3, r1, r0\n\
- ldr r1, _0811408C @ =gSharedMem + 0x14800\n\
- ldr r2, _08114090 @ =0x000018c4\n\
- adds r0, r1, r2\n\
- adds r4, r7, r0\n\
- ldr r2, _08114094 @ =gSharedMem + 0x170C4\n\
- add r2, r10\n\
- ldrb r0, [r4]\n\
- ldrb r1, [r2]\n\
- cmp r0, r1\n\
- bls _08114098\n\
- adds r1, r0, 0\n\
- ldrb r0, [r2]\n\
- b _0811409C\n\
- .align 2, 0\n\
-_0811408C: .4byte gSharedMem + 0x14800\n\
-_08114090: .4byte 0x000018c4\n\
-_08114094: .4byte gSharedMem + 0x170C4\n\
-_08114098:\n\
- ldrb r1, [r2]\n\
- ldrb r0, [r4]\n\
-_0811409C:\n\
- subs r1, r0\n\
- adds r3, r1\n\
- ldr r2, [sp, 0x14]\n\
- cmp r2, r3\n\
- ble _081140B2\n\
- mov r4, r8\n\
- ldrb r0, [r4]\n\
- cmp r0, 0\n\
- bne _081140B2\n\
- str r6, [sp, 0xC]\n\
- str r3, [sp, 0x14]\n\
-_081140B2:\n\
- movs r0, 0x1\n\
- add r8, r0\n\
- adds r7, 0x1\n\
- adds r5, 0x1\n\
- adds r6, 0x1\n\
- ldr r1, [sp, 0x2C]\n\
- ldrb r1, [r1]\n\
- cmp r6, r1\n\
- blt _0811403E\n\
-_081140C4:\n\
- ldr r3, [sp, 0xC]\n\
- add r3, r9\n\
- ldr r2, _08114164 @ =gSharedMem + 0x14800\n\
- ldr r4, _08114168 @ =0x000030c4\n\
- adds r1, r2, r4\n\
- adds r1, r3, r1\n\
- ldr r2, [sp, 0x10]\n\
- add r2, r9\n\
- ldr r5, _0811416C @ =gSharedMem + 0x168C4\n\
- adds r0, r2, r5\n\
- ldrb r0, [r0]\n\
- strb r0, [r1]\n\
- ldr r0, _08114164 @ =gSharedMem + 0x14800\n\
- ldr r4, _08114170 @ =0x000038c4\n\
- adds r1, r0, r4\n\
- adds r1, r3, r1\n\
- ldr r5, _08114174 @ =gSharedMem + 0x170C4\n\
- adds r2, r5\n\
- ldrb r0, [r2]\n\
- strb r0, [r1]\n\
- ldr r0, _08114164 @ =gSharedMem + 0x14800\n\
- adds r0, 0xC4\n\
- adds r3, r0\n\
- movs r0, 0x1\n\
- strb r0, [r3]\n\
- ldr r0, [sp, 0x38]\n\
- str r0, [sp, 0x10]\n\
- ldr r1, [sp, 0x20]\n\
- ldrb r1, [r1]\n\
- cmp r0, r1\n\
- bge _08114104\n\
- b _08114004\n\
-_08114104:\n\
- movs r6, 0\n\
- ldr r4, _08114164 @ =gSharedMem + 0x14800\n\
- ldr r2, [sp, 0x8]\n\
- ldr r3, _08114178 @ =gSharedMem + 0x14804\n\
- adds r0, r2, r3\n\
- ldrb r0, [r0]\n\
- cmp r6, r0\n\
- bge _081141C4\n\
- adds r7, r4, 0\n\
- mov r9, r6\n\
- movs r5, 0xC4\n\
- adds r5, r7\n\
- mov r8, r5\n\
-_0811411E:\n\
- ldr r1, [sp, 0x8]\n\
- lsls r0, r1, 5\n\
- adds r2, r6, r0\n\
- ldr r3, _0811417C @ =0x000020c4\n\
- adds r0, r7, r3\n\
- adds r0, r2\n\
- mov r10, r0\n\
- ldr r5, _08114168 @ =0x000030c4\n\
- adds r0, r7, r5\n\
- adds r0, r2, r0\n\
- ldrb r0, [r0]\n\
- mov r1, r10\n\
- strb r0, [r1]\n\
- ldr r3, _08114180 @ =0x000028c4\n\
- adds r0, r7, r3\n\
- adds r3, r2, r0\n\
- ldr r5, _08114170 @ =0x000038c4\n\
- adds r0, r7, r5\n\
- adds r0, r2, r0\n\
- ldrb r0, [r0]\n\
- strb r0, [r3]\n\
- mov r0, r8\n\
- adds r1, r2, r0\n\
- ldrb r0, [r1]\n\
- cmp r0, 0\n\
- beq _08114184\n\
- mov r2, r9\n\
- strb r2, [r1]\n\
- adds r0, r6, 0\n\
- adds r1, r6, 0\n\
- ldr r2, [sp, 0x8]\n\
- bl sub_81141F0\n\
- b _081141B4\n\
- .align 2, 0\n\
-_08114164: .4byte gSharedMem + 0x14800\n\
-_08114168: .4byte 0x000030c4\n\
-_0811416C: .4byte gSharedMem + 0x168C4\n\
-_08114170: .4byte 0x000038c4\n\
-_08114174: .4byte gSharedMem + 0x170C4\n\
-_08114178: .4byte gSharedMem + 0x14804\n\
-_0811417C: .4byte 0x000020c4\n\
-_08114180: .4byte 0x000028c4\n\
-_08114184:\n\
- ldr r5, _081141E0 @ =0x000010c4\n\
- adds r1, r4, r5\n\
- adds r1, r2, r1\n\
- ldr r5, _081141E4 @ =0x000018c4\n\
- adds r0, r4, r5\n\
- adds r0, r2, r0\n\
- ldrb r0, [r0]\n\
- ldrb r2, [r1]\n\
- subs r0, r2\n\
- lsrs r1, r0, 31\n\
- adds r0, r1\n\
- asrs r0, 1\n\
- adds r2, r0\n\
- strb r2, [r3]\n\
- mov r0, r10\n\
- strb r2, [r0]\n\
- ldrb r0, [r3]\n\
- subs r0, 0x1\n\
- strb r0, [r3]\n\
- adds r0, r6, 0\n\
- adds r1, r6, 0\n\
- ldr r2, [sp, 0x8]\n\
- bl sub_81141F0\n\
-_081141B4:\n\
- adds r6, 0x1\n\
- ldr r4, _081141E8 @ =gSharedMem + 0x14800\n\
- ldr r1, [sp, 0x8]\n\
- ldr r2, _081141EC @ =gSharedMem + 0x14804\n\
- adds r0, r1, r2\n\
- ldrb r0, [r0]\n\
- cmp r6, r0\n\
- blt _0811411E\n\
-_081141C4:\n\
- ldr r3, [sp, 0x30]\n\
- str r3, [sp, 0x8]\n\
- cmp r3, 0x3F\n\
- bgt _081141CE\n\
- b _08113E3A\n\
-_081141CE:\n\
- add sp, 0x3C\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_081141E0: .4byte 0x000010c4\n\
-_081141E4: .4byte 0x000018c4\n\
-_081141E8: .4byte gSharedMem + 0x14800\n\
-_081141EC: .4byte gSharedMem + 0x14804\n\
- .syntax divided");
-}
-
-void sub_81141F0(s32 a, s32 b, s32 c)
-{
- u32 r7;
-
- sEvoInfo.unk30C4[c][b] = sEvoInfo.unk10C4[c][a];
- sEvoInfo.unk38C4[c][b] = sEvoInfo.unk18C4[c][a];
-
- r7 = 0;
- if (sEvoInfo.unk10C4[c][a] < sEvoInfo.unk20C4[c][b])
- {
- sEvoInfo.unkC4[c][b] = 4;
- r7 = sEvoInfo.unk20C4[c][b] - sEvoInfo.unk10C4[c][a];
- }
- else if (sEvoInfo.unk10C4[c][a] > sEvoInfo.unk20C4[c][b])
- {
- sEvoInfo.unkC4[c][b] = 1;
- r7 = sEvoInfo.unk10C4[c][a] - sEvoInfo.unk20C4[c][b];
- }
- sEvoInfo.unk80C4[c][b] = r7 * 16;
-
- r7 = 0;
- if (sEvoInfo.unk18C4[c][a] < sEvoInfo.unk28C4[c][b])
- {
- sEvoInfo.unk8C4[c][b] = 3;
- r7 = sEvoInfo.unk28C4[c][b] - sEvoInfo.unk18C4[c][a];
- }
- else if (sEvoInfo.unk18C4[c][a] > sEvoInfo.unk28C4[c][b])
- {
- sEvoInfo.unk8C4[c][b] = 2;
- r7 = sEvoInfo.unk18C4[c][a] - sEvoInfo.unk28C4[c][b];
- }
- sEvoInfo.unk90C4[c][b] = r7 * 16;
-
- sEvoInfo.unk84[c]++;
-}
-
-void sub_811430C(u32 a, u32 b)
-{
- u8 r2 = sEvoInfo.unk28C4[b][a];
- u8 r3 = sEvoInfo.unk20C4[b][a];
- s32 r7 = r2 - r3;
-
- sEvoInfo.unk30C4[b][a] = sEvoInfo.unk38C4[b][a] = r3 + r7 / 2;
- sEvoInfo.unkC4[b][a] = 5;
- sEvoInfo.unk8C4[b][a] = 7;
- sEvoInfo.unk84[b]++;
- r7 = sEvoInfo.unk30C4[b][a] - sEvoInfo.unk20C4[b][a];
- sEvoInfo.unk80C4[b][a] = r7 * 16;
- r7 = sEvoInfo.unk28C4[b][a] - sEvoInfo.unk38C4[b][a];
- sEvoInfo.unk90C4[b][a] = r7 * 16;
-}
-
-__attribute__((naked))
-void unref_sub_81143CC()
-{
- 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, 0x14\n\
- movs r0, 0x1\n\
- str r0, [sp, 0x4]\n\
- ldr r0, _08114408 @ =gSharedMem + 0x14800\n\
- ldr r2, _0811440C @ =0x0000a0c4\n\
- adds r1, r0, r2\n\
- ldrb r3, [r1]\n\
- adds r4, r0, 0\n\
- cmp r3, 0\n\
- beq _081143EE\n\
- subs r0, r3, 0x1\n\
- strb r0, [r1]\n\
-_081143EE:\n\
- movs r5, 0\n\
- str r5, [sp]\n\
-_081143F2:\n\
- movs r3, 0\n\
- adds r2, r4, 0\n\
- adds r0, r4, 0\n\
- adds r0, 0x84\n\
- ldr r1, [sp]\n\
- adds r0, r1, r0\n\
- adds r1, 0x1\n\
- str r1, [sp, 0x8]\n\
- bl _08114D84\n\
- .align 2, 0\n\
-_08114408: .4byte gSharedMem + 0x14800\n\
-_0811440C: .4byte 0x0000a0c4\n\
-_08114410:\n\
- ldr r5, [sp]\n\
- lsls r0, r5, 5\n\
- adds r1, r3, r0\n\
- adds r2, 0xC4\n\
- adds r1, r2\n\
- ldrb r2, [r1]\n\
- mov r8, r0\n\
- adds r0, r3, 0x1\n\
- mov r10, r0\n\
- cmp r2, 0xC\n\
- bls _08114428\n\
- b _081148D2\n\
-_08114428:\n\
- lsls r0, r2, 2\n\
- ldr r1, _08114434 @ =_08114438\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- mov pc, r0\n\
- .align 2, 0\n\
-_08114434: .4byte _08114438\n\
- .align 2, 0\n\
-_08114438:\n\
- .4byte _081148D2\n\
- .4byte _0811446C\n\
- .4byte _081144F0\n\
- .4byte _0811457C\n\
- .4byte _08114600\n\
- .4byte _0811468C\n\
- .4byte _081146C8\n\
- .4byte _08114704\n\
- .4byte _08114740\n\
- .4byte _0811477C\n\
- .4byte _081147D0\n\
- .4byte _08114810\n\
- .4byte _08114858\n\
-_0811446C:\n\
- movs r1, 0\n\
- str r1, [sp, 0x4]\n\
- lsls r0, r3, 1\n\
- ldr r2, [sp]\n\
- lsls r1, r2, 6\n\
- adds r0, r1\n\
- ldr r5, _081144E0 @ =0x000060c4\n\
- adds r2, r4, r5\n\
- adds r2, r0, r2\n\
- ldr r5, _081144E4 @ =0x000080c4\n\
- adds r1, r4, r5\n\
- adds r0, r1\n\
- ldrh r1, [r0]\n\
- ldrh r0, [r2]\n\
- adds r1, r0\n\
- movs r0, 0xFF\n\
- lsls r0, 8\n\
- ands r0, r1\n\
- lsrs r5, r0, 8\n\
- movs r0, 0xFF\n\
- ands r1, r0\n\
- strh r1, [r2]\n\
- movs r6, 0\n\
- adds r1, r3, 0x1\n\
- mov r10, r1\n\
- ldr r2, [sp, 0x4]\n\
- cmp r2, r5\n\
- blt _081144A6\n\
- b _081148D2\n\
-_081144A6:\n\
- mov r9, r4\n\
- mov r4, r8\n\
- adds r7, r3, r4\n\
- ldr r0, _081144E8 @ =0x000030c4\n\
- add r0, r9\n\
- adds r4, r7, r0\n\
- ldr r0, _081144EC @ =0x000020c4\n\
- add r0, r9\n\
- adds r2, r7, r0\n\
-_081144B8:\n\
- ldrb r0, [r4]\n\
- subs r0, 0x1\n\
- strb r0, [r4]\n\
- ldrb r1, [r4]\n\
- ldr r0, [sp]\n\
- str r2, [sp, 0xC]\n\
- str r3, [sp, 0x10]\n\
- bl sub_8114DB4\n\
- ldrb r0, [r4]\n\
- ldr r2, [sp, 0xC]\n\
- ldr r3, [sp, 0x10]\n\
- ldrb r1, [r2]\n\
- cmp r0, r1\n\
- bne _081144D8\n\
- b _081148A0\n\
-_081144D8:\n\
- adds r6, 0x1\n\
- cmp r6, r5\n\
- blt _081144B8\n\
- b _081148D2\n\
- .align 2, 0\n\
-_081144E0: .4byte 0x000060c4\n\
-_081144E4: .4byte 0x000080c4\n\
-_081144E8: .4byte 0x000030c4\n\
-_081144EC: .4byte 0x000020c4\n\
-_081144F0:\n\
- movs r2, 0\n\
- str r2, [sp, 0x4]\n\
- ldr r4, _08114568 @ =gSharedMem + 0x14800\n\
- lsls r0, r3, 1\n\
- ldr r5, [sp]\n\
- lsls r1, r5, 6\n\
- adds r0, r1\n\
- ldr r1, _0811456C @ =0x000060c4\n\
- adds r2, r4, r1\n\
- adds r2, r0, r2\n\
- ldr r5, _08114570 @ =0x000080c4\n\
- adds r1, r4, r5\n\
- adds r0, r1\n\
- ldrh r1, [r0]\n\
- ldrh r0, [r2]\n\
- adds r1, r0\n\
- movs r0, 0xFF\n\
- lsls r0, 8\n\
- ands r0, r1\n\
- lsrs r5, r0, 8\n\
- movs r0, 0xFF\n\
- ands r1, r0\n\
- strh r1, [r2]\n\
- movs r6, 0\n\
- adds r1, r3, 0x1\n\
- mov r10, r1\n\
- ldr r2, [sp, 0x4]\n\
- cmp r2, r5\n\
- blt _0811452C\n\
- b _081148D2\n\
-_0811452C:\n\
- mov r9, r4\n\
- mov r4, r8\n\
- adds r7, r3, r4\n\
- ldr r0, _08114574 @ =0x000030c4\n\
- add r0, r9\n\
- adds r4, r7, r0\n\
- ldr r0, _08114578 @ =0x000020c4\n\
- add r0, r9\n\
- adds r2, r7, r0\n\
-_0811453E:\n\
- ldrb r0, [r4]\n\
- ldrb r1, [r2]\n\
- cmp r0, r1\n\
- bne _08114548\n\
- b _081148B8\n\
-_08114548:\n\
- adds r1, r0, 0\n\
- ldr r0, [sp]\n\
- str r2, [sp, 0xC]\n\
- str r3, [sp, 0x10]\n\
- bl sub_8114DF0\n\
- ldrb r0, [r4]\n\
- subs r0, 0x1\n\
- strb r0, [r4]\n\
- adds r6, 0x1\n\
- ldr r2, [sp, 0xC]\n\
- ldr r3, [sp, 0x10]\n\
- cmp r6, r5\n\
- blt _0811453E\n\
- b _081148D2\n\
- .align 2, 0\n\
-_08114568: .4byte gSharedMem + 0x14800\n\
-_0811456C: .4byte 0x000060c4\n\
-_08114570: .4byte 0x000080c4\n\
-_08114574: .4byte 0x000030c4\n\
-_08114578: .4byte 0x000020c4\n\
-_0811457C:\n\
- movs r2, 0\n\
- str r2, [sp, 0x4]\n\
- lsls r0, r3, 1\n\
- ldr r5, [sp]\n\
- lsls r1, r5, 6\n\
- adds r0, r1\n\
- ldr r1, _081145F0 @ =0x000060c4\n\
- adds r2, r4, r1\n\
- adds r2, r0, r2\n\
- ldr r5, _081145F4 @ =0x000080c4\n\
- adds r1, r4, r5\n\
- adds r0, r1\n\
- ldrh r1, [r0]\n\
- ldrh r0, [r2]\n\
- adds r1, r0\n\
- movs r0, 0xFF\n\
- lsls r0, 8\n\
- ands r0, r1\n\
- lsrs r5, r0, 8\n\
- movs r0, 0xFF\n\
- ands r1, r0\n\
- strh r1, [r2]\n\
- movs r6, 0\n\
- adds r1, r3, 0x1\n\
- mov r10, r1\n\
- ldr r2, [sp, 0x4]\n\
- cmp r2, r5\n\
- blt _081145B6\n\
- b _081148D2\n\
-_081145B6:\n\
- mov r9, r4\n\
- mov r4, r8\n\
- adds r7, r3, r4\n\
- ldr r0, _081145F8 @ =0x000030c4\n\
- add r0, r9\n\
- adds r4, r7, r0\n\
- ldr r0, _081145FC @ =0x000020c4\n\
- add r0, r9\n\
- adds r2, r7, r0\n\
-_081145C8:\n\
- ldrb r0, [r4]\n\
- adds r0, 0x1\n\
- strb r0, [r4]\n\
- ldrb r1, [r4]\n\
- ldr r0, [sp]\n\
- str r2, [sp, 0xC]\n\
- str r3, [sp, 0x10]\n\
- bl sub_8114DB4\n\
- ldrb r0, [r4]\n\
- ldr r2, [sp, 0xC]\n\
- ldr r3, [sp, 0x10]\n\
- ldrb r1, [r2]\n\
- cmp r0, r1\n\
- bne _081145E8\n\
- b _081148AC\n\
-_081145E8:\n\
- adds r6, 0x1\n\
- cmp r6, r5\n\
- blt _081145C8\n\
- b _081148D2\n\
- .align 2, 0\n\
-_081145F0: .4byte 0x000060c4\n\
-_081145F4: .4byte 0x000080c4\n\
-_081145F8: .4byte 0x000030c4\n\
-_081145FC: .4byte 0x000020c4\n\
-_08114600:\n\
- movs r2, 0\n\
- str r2, [sp, 0x4]\n\
- ldr r4, _08114678 @ =gSharedMem + 0x14800\n\
- lsls r0, r3, 1\n\
- ldr r5, [sp]\n\
- lsls r1, r5, 6\n\
- adds r0, r1\n\
- ldr r1, _0811467C @ =0x000060c4\n\
- adds r2, r4, r1\n\
- adds r2, r0, r2\n\
- ldr r5, _08114680 @ =0x000080c4\n\
- adds r1, r4, r5\n\
- adds r0, r1\n\
- ldrh r1, [r0]\n\
- ldrh r0, [r2]\n\
- adds r1, r0\n\
- movs r0, 0xFF\n\
- lsls r0, 8\n\
- ands r0, r1\n\
- lsrs r5, r0, 8\n\
- movs r0, 0xFF\n\
- ands r1, r0\n\
- strh r1, [r2]\n\
- movs r6, 0\n\
- adds r1, r3, 0x1\n\
- mov r10, r1\n\
- ldr r2, [sp, 0x4]\n\
- cmp r2, r5\n\
- blt _0811463C\n\
- b _081148D2\n\
-_0811463C:\n\
- mov r9, r4\n\
- mov r4, r8\n\
- adds r7, r3, r4\n\
- ldr r0, _08114684 @ =0x000030c4\n\
- add r0, r9\n\
- adds r4, r7, r0\n\
- ldr r0, _08114688 @ =0x000020c4\n\
- add r0, r9\n\
- adds r2, r7, r0\n\
-_0811464E:\n\
- ldrb r0, [r4]\n\
- ldrb r1, [r2]\n\
- cmp r0, r1\n\
- bne _08114658\n\
- b _081148B8\n\
-_08114658:\n\
- adds r1, r0, 0\n\
- ldr r0, [sp]\n\
- str r2, [sp, 0xC]\n\
- str r3, [sp, 0x10]\n\
- bl sub_8114DF0\n\
- ldrb r0, [r4]\n\
- adds r0, 0x1\n\
- strb r0, [r4]\n\
- adds r6, 0x1\n\
- ldr r2, [sp, 0xC]\n\
- ldr r3, [sp, 0x10]\n\
- cmp r6, r5\n\
- blt _0811464E\n\
- b _081148D2\n\
- .align 2, 0\n\
-_08114678: .4byte gSharedMem + 0x14800\n\
-_0811467C: .4byte 0x000060c4\n\
-_08114680: .4byte 0x000080c4\n\
-_08114684: .4byte 0x000030c4\n\
-_08114688: .4byte 0x000020c4\n\
-_0811468C:\n\
- movs r2, 0\n\
- str r2, [sp, 0x4]\n\
- ldr r5, _081146C0 @ =gSharedMem + 0x14800\n\
- mov r0, r8\n\
- adds r4, r3, r0\n\
- ldr r1, _081146C4 @ =0x000030c4\n\
- adds r0, r5, r1\n\
- adds r0, r4, r0\n\
- ldrb r1, [r0]\n\
- ldr r0, [sp]\n\
- str r3, [sp, 0x10]\n\
- bl sub_8114E48\n\
- lsls r0, 24\n\
- ldr r3, [sp, 0x10]\n\
- adds r2, r3, 0x1\n\
- mov r10, r2\n\
- cmp r0, 0\n\
- bne _081146B4\n\
- b _081148D2\n\
-_081146B4:\n\
- adds r0, r5, 0\n\
- adds r0, 0xC4\n\
- adds r0, r4, r0\n\
- movs r1, 0x9\n\
- strb r1, [r0]\n\
- b _081148D2\n\
- .align 2, 0\n\
-_081146C0: .4byte gSharedMem + 0x14800\n\
-_081146C4: .4byte 0x000030c4\n\
-_081146C8:\n\
- movs r4, 0\n\
- str r4, [sp, 0x4]\n\
- ldr r5, _081146FC @ =gSharedMem + 0x14800\n\
- mov r0, r8\n\
- adds r4, r3, r0\n\
- ldr r1, _08114700 @ =0x000030c4\n\
- adds r0, r5, r1\n\
- adds r0, r4, r0\n\
- ldrb r1, [r0]\n\
- ldr r0, [sp]\n\
- str r3, [sp, 0x10]\n\
- bl sub_8114E48\n\
- lsls r0, 24\n\
- ldr r3, [sp, 0x10]\n\
- adds r2, r3, 0x1\n\
- mov r10, r2\n\
- cmp r0, 0\n\
- bne _081146F0\n\
- b _081148D2\n\
-_081146F0:\n\
- adds r0, r5, 0\n\
- adds r0, 0xC4\n\
- adds r0, r4, r0\n\
- movs r1, 0xA\n\
- strb r1, [r0]\n\
- b _081148D2\n\
- .align 2, 0\n\
-_081146FC: .4byte gSharedMem + 0x14800\n\
-_08114700: .4byte 0x000030c4\n\
-_08114704:\n\
- movs r4, 0\n\
- str r4, [sp, 0x4]\n\
- ldr r5, _08114738 @ =gSharedMem + 0x14800\n\
- mov r0, r8\n\
- adds r4, r3, r0\n\
- ldr r1, _0811473C @ =0x000030c4\n\
- adds r0, r5, r1\n\
- adds r0, r4, r0\n\
- ldrb r1, [r0]\n\
- ldr r0, [sp]\n\
- str r3, [sp, 0x10]\n\
- bl sub_8114E48\n\
- lsls r0, 24\n\
- ldr r3, [sp, 0x10]\n\
- adds r2, r3, 0x1\n\
- mov r10, r2\n\
- cmp r0, 0\n\
- bne _0811472C\n\
- b _081148D2\n\
-_0811472C:\n\
- adds r0, r5, 0\n\
- adds r0, 0xC4\n\
- adds r0, r4, r0\n\
- movs r1, 0xB\n\
- strb r1, [r0]\n\
- b _081148D2\n\
- .align 2, 0\n\
-_08114738: .4byte gSharedMem + 0x14800\n\
-_0811473C: .4byte 0x000030c4\n\
-_08114740:\n\
- movs r4, 0\n\
- str r4, [sp, 0x4]\n\
- ldr r5, _08114774 @ =gSharedMem + 0x14800\n\
- mov r0, r8\n\
- adds r4, r3, r0\n\
- ldr r1, _08114778 @ =0x000030c4\n\
- adds r0, r5, r1\n\
- adds r0, r4, r0\n\
- ldrb r1, [r0]\n\
- ldr r0, [sp]\n\
- str r3, [sp, 0x10]\n\
- bl sub_8114E48\n\
- lsls r0, 24\n\
- ldr r3, [sp, 0x10]\n\
- adds r2, r3, 0x1\n\
- mov r10, r2\n\
- cmp r0, 0\n\
- bne _08114768\n\
- b _081148D2\n\
-_08114768:\n\
- adds r0, r5, 0\n\
- adds r0, 0xC4\n\
- adds r0, r4, r0\n\
- movs r1, 0xC\n\
- strb r1, [r0]\n\
- b _081148D2\n\
- .align 2, 0\n\
-_08114774: .4byte gSharedMem + 0x14800\n\
-_08114778: .4byte 0x000030c4\n\
-_0811477C:\n\
- movs r4, 0\n\
- str r4, [sp, 0x4]\n\
- ldr r6, _081147B4 @ =gSharedMem + 0x14800\n\
- mov r0, r8\n\
- adds r5, r3, r0\n\
- ldr r1, _081147B8 @ =0x000030c4\n\
- adds r4, r6, r1\n\
- adds r4, r5, r4\n\
- ldrb r1, [r4]\n\
- ldr r0, [sp]\n\
- str r3, [sp, 0x10]\n\
- bl sub_8114DB4\n\
- ldr r2, _081147BC @ =0x000020c4\n\
- adds r0, r6, r2\n\
- adds r0, r5, r0\n\
- ldrb r1, [r4]\n\
- ldr r3, [sp, 0x10]\n\
- ldrb r0, [r0]\n\
- cmp r1, r0\n\
- bne _081147C0\n\
- adds r0, r6, 0\n\
- adds r0, 0xC4\n\
- adds r0, r5, r0\n\
- mov r4, sp\n\
- ldrb r4, [r4, 0x4]\n\
- strb r4, [r0]\n\
- b _08114844\n\
- .align 2, 0\n\
-_081147B4: .4byte gSharedMem + 0x14800\n\
-_081147B8: .4byte 0x000030c4\n\
-_081147BC: .4byte 0x000020c4\n\
-_081147C0:\n\
- adds r0, r6, 0\n\
- adds r0, 0xC4\n\
- adds r0, r5, r0\n\
- movs r1, 0x1\n\
- strb r1, [r0]\n\
- adds r0, r3, 0x1\n\
- mov r10, r0\n\
- b _081148D2\n\
-_081147D0:\n\
- movs r1, 0\n\
- str r1, [sp, 0x4]\n\
- ldr r6, _08114804 @ =gSharedMem + 0x14800\n\
- mov r2, r8\n\
- adds r5, r3, r2\n\
- ldr r0, _08114808 @ =0x000030c4\n\
- adds r4, r6, r0\n\
- adds r4, r5, r4\n\
- ldrb r1, [r4]\n\
- ldr r0, [sp]\n\
- str r3, [sp, 0x10]\n\
- bl sub_8114DF0\n\
- ldr r1, _0811480C @ =0x000020c4\n\
- adds r0, r6, r1\n\
- adds r0, r5, r0\n\
- ldrb r1, [r4]\n\
- ldr r3, [sp, 0x10]\n\
- ldrb r0, [r0]\n\
- cmp r1, r0\n\
- beq _08114882\n\
- adds r0, r6, 0\n\
- adds r0, 0xC4\n\
- adds r0, r5, r0\n\
- movs r1, 0x2\n\
- b _08114842\n\
- .align 2, 0\n\
-_08114804: .4byte gSharedMem + 0x14800\n\
-_08114808: .4byte 0x000030c4\n\
-_0811480C: .4byte 0x000020c4\n\
-_08114810:\n\
- movs r0, 0\n\
- str r0, [sp, 0x4]\n\
- ldr r6, _0811484C @ =gSharedMem + 0x14800\n\
- mov r1, r8\n\
- adds r5, r3, r1\n\
- ldr r2, _08114850 @ =0x000030c4\n\
- adds r4, r6, r2\n\
- adds r4, r5, r4\n\
- ldrb r1, [r4]\n\
- ldr r0, [sp]\n\
- str r3, [sp, 0x10]\n\
- bl sub_8114DB4\n\
- ldr r1, _08114854 @ =0x000020c4\n\
- adds r0, r6, r1\n\
- adds r0, r5, r0\n\
- ldrb r1, [r4]\n\
- ldr r3, [sp, 0x10]\n\
- ldrb r0, [r0]\n\
- cmp r1, r0\n\
- beq _08114882\n\
- adds r0, r6, 0\n\
- adds r0, 0xC4\n\
- adds r0, r5, r0\n\
- movs r1, 0x3\n\
-_08114842:\n\
- strb r1, [r0]\n\
-_08114844:\n\
- adds r5, r3, 0x1\n\
- mov r10, r5\n\
- b _081148D2\n\
- .align 2, 0\n\
-_0811484C: .4byte gSharedMem + 0x14800\n\
-_08114850: .4byte 0x000030c4\n\
-_08114854: .4byte 0x000020c4\n\
-_08114858:\n\
- movs r0, 0\n\
- str r0, [sp, 0x4]\n\
- ldr r6, _08114894 @ =gSharedMem + 0x14800\n\
- mov r1, r8\n\
- adds r5, r3, r1\n\
- ldr r2, _08114898 @ =0x000030c4\n\
- adds r4, r6, r2\n\
- adds r4, r5, r4\n\
- ldrb r1, [r4]\n\
- ldr r0, [sp]\n\
- str r3, [sp, 0x10]\n\
- bl sub_8114DF0\n\
- ldr r1, _0811489C @ =0x000020c4\n\
- adds r0, r6, r1\n\
- adds r0, r5, r0\n\
- ldrb r1, [r4]\n\
- ldr r3, [sp, 0x10]\n\
- ldrb r0, [r0]\n\
- cmp r1, r0\n\
- bne _081148C4\n\
-_08114882:\n\
- adds r0, r6, 0\n\
- adds r0, 0xC4\n\
- adds r0, r5, r0\n\
- mov r2, sp\n\
- ldrb r2, [r2, 0x4]\n\
- strb r2, [r0]\n\
- adds r4, r3, 0x1\n\
- mov r10, r4\n\
- b _081148D2\n\
- .align 2, 0\n\
-_08114894: .4byte gSharedMem + 0x14800\n\
-_08114898: .4byte 0x000030c4\n\
-_0811489C: .4byte 0x000020c4\n\
-_081148A0:\n\
- mov r0, r9\n\
- adds r0, 0xC4\n\
- adds r0, r7, r0\n\
- movs r5, 0\n\
- strb r5, [r0]\n\
- b _081148D2\n\
-_081148AC:\n\
- mov r0, r9\n\
- adds r0, 0xC4\n\
- adds r0, r7, r0\n\
- movs r1, 0\n\
- strb r1, [r0]\n\
- b _081148D2\n\
-_081148B8:\n\
- mov r0, r9\n\
- adds r0, 0xC4\n\
- adds r0, r7, r0\n\
- movs r1, 0\n\
- strb r1, [r0]\n\
- b _081148D2\n\
-_081148C4:\n\
- adds r0, r6, 0\n\
- adds r0, 0xC4\n\
- adds r0, r5, r0\n\
- movs r1, 0x4\n\
- strb r1, [r0]\n\
- adds r2, r3, 0x1\n\
- mov r10, r2\n\
-_081148D2:\n\
- ldr r0, _081148F4 @ =gSharedMem + 0x14800\n\
- mov r4, r8\n\
- adds r1, r3, r4\n\
- ldr r5, _081148F8 @ =0x000008c4\n\
- adds r2, r0, r5\n\
- adds r1, r2\n\
- ldrb r1, [r1]\n\
- adds r4, r0, 0\n\
- cmp r1, 0xC\n\
- bls _081148E8\n\
- b _08114D76\n\
-_081148E8:\n\
- lsls r0, r1, 2\n\
- ldr r1, _081148FC @ =_08114900\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- mov pc, r0\n\
- .align 2, 0\n\
-_081148F4: .4byte gSharedMem + 0x14800\n\
-_081148F8: .4byte 0x000008c4\n\
-_081148FC: .4byte _08114900\n\
- .align 2, 0\n\
-_08114900:\n\
- .4byte _08114D76\n\
- .4byte _08114934\n\
- .4byte _081149B8\n\
- .4byte _08114A3C\n\
- .4byte _08114AC0\n\
- .4byte _08114B44\n\
- .4byte _08114B7C\n\
- .4byte _08114BB4\n\
- .4byte _08114BEC\n\
- .4byte _08114C24\n\
- .4byte _08114C78\n\
- .4byte _08114CB8\n\
- .4byte _08114CF8\n\
-_08114934:\n\
- movs r0, 0\n\
- str r0, [sp, 0x4]\n\
- lsls r0, r3, 1\n\
- ldr r2, [sp]\n\
- lsls r1, r2, 6\n\
- adds r0, r1\n\
- ldr r5, _081149A8 @ =0x000070c4\n\
- adds r2, r4, r5\n\
- adds r2, r0, r2\n\
- ldr r5, _081149AC @ =0x000090c4\n\
- adds r1, r4, r5\n\
- adds r0, r1\n\
- ldrh r1, [r0]\n\
- ldrh r0, [r2]\n\
- adds r1, r0\n\
- movs r0, 0xFF\n\
- lsls r0, 8\n\
- ands r0, r1\n\
- lsrs r5, r0, 8\n\
- movs r0, 0xFF\n\
- ands r1, r0\n\
- strh r1, [r2]\n\
- movs r6, 0\n\
- ldr r1, [sp, 0x4]\n\
- cmp r1, r5\n\
- blt _0811496A\n\
- b _08114D76\n\
-_0811496A:\n\
- mov r9, r4\n\
- mov r2, r8\n\
- adds r7, r3, r2\n\
- ldr r0, _081149B0 @ =0x000038c4\n\
- add r0, r9\n\
- adds r4, r7, r0\n\
- movs r3, 0\n\
- ldr r0, _081149B4 @ =0x000028c4\n\
- add r0, r9\n\
- adds r2, r7, r0\n\
-_0811497E:\n\
- ldrb r0, [r4]\n\
- subs r0, 0x1\n\
- strb r0, [r4]\n\
- ldrb r1, [r4]\n\
- ldr r0, [sp]\n\
- str r2, [sp, 0xC]\n\
- str r3, [sp, 0x10]\n\
- bl sub_8114DB4\n\
- ldrb r0, [r4]\n\
- ldr r2, [sp, 0xC]\n\
- ldr r3, [sp, 0x10]\n\
- ldrb r1, [r2]\n\
- cmp r0, r1\n\
- bne _0811499E\n\
- b _08114D4C\n\
-_0811499E:\n\
- adds r6, 0x1\n\
- cmp r6, r5\n\
- blt _0811497E\n\
- b _08114D76\n\
- .align 2, 0\n\
-_081149A8: .4byte 0x000070c4\n\
-_081149AC: .4byte 0x000090c4\n\
-_081149B0: .4byte 0x000038c4\n\
-_081149B4: .4byte 0x000028c4\n\
-_081149B8:\n\
- movs r2, 0\n\
- str r2, [sp, 0x4]\n\
- ldr r4, _08114A28 @ =gSharedMem + 0x14800\n\
- lsls r0, r3, 1\n\
- ldr r5, [sp]\n\
- lsls r1, r5, 6\n\
- adds r0, r1\n\
- ldr r1, _08114A2C @ =0x000070c4\n\
- adds r2, r4, r1\n\
- adds r2, r0, r2\n\
- ldr r5, _08114A30 @ =0x000090c4\n\
- adds r1, r4, r5\n\
- adds r0, r1\n\
- ldrh r1, [r0]\n\
- ldrh r0, [r2]\n\
- adds r1, r0\n\
- movs r0, 0xFF\n\
- lsls r0, 8\n\
- ands r0, r1\n\
- lsrs r5, r0, 8\n\
- movs r0, 0xFF\n\
- ands r1, r0\n\
- strh r1, [r2]\n\
- movs r6, 0\n\
- ldr r1, [sp, 0x4]\n\
- cmp r1, r5\n\
- blt _081149F0\n\
- b _08114D76\n\
-_081149F0:\n\
- mov r9, r4\n\
- mov r2, r8\n\
- adds r7, r3, r2\n\
- ldr r0, _08114A34 @ =0x000038c4\n\
- add r0, r9\n\
- adds r4, r7, r0\n\
- ldr r0, _08114A38 @ =0x000028c4\n\
- add r0, r9\n\
- adds r2, r7, r0\n\
-_08114A02:\n\
- ldrb r0, [r4]\n\
- ldrb r1, [r2]\n\
- cmp r0, r1\n\
- bne _08114A0C\n\
- b _08114D3C\n\
-_08114A0C:\n\
- adds r1, r0, 0\n\
- ldr r0, [sp]\n\
- str r2, [sp, 0xC]\n\
- bl sub_8114DF0\n\
- ldrb r0, [r4]\n\
- subs r0, 0x1\n\
- strb r0, [r4]\n\
- adds r6, 0x1\n\
- ldr r2, [sp, 0xC]\n\
- cmp r6, r5\n\
- blt _08114A02\n\
- b _08114D76\n\
- .align 2, 0\n\
-_08114A28: .4byte gSharedMem + 0x14800\n\
-_08114A2C: .4byte 0x000070c4\n\
-_08114A30: .4byte 0x000090c4\n\
-_08114A34: .4byte 0x000038c4\n\
-_08114A38: .4byte 0x000028c4\n\
-_08114A3C:\n\
- movs r2, 0\n\
- str r2, [sp, 0x4]\n\
- lsls r0, r3, 1\n\
- ldr r5, [sp]\n\
- lsls r1, r5, 6\n\
- adds r0, r1\n\
- ldr r1, _08114AB0 @ =0x000070c4\n\
- adds r2, r4, r1\n\
- adds r2, r0, r2\n\
- ldr r5, _08114AB4 @ =0x000090c4\n\
- adds r1, r4, r5\n\
- adds r0, r1\n\
- ldrh r1, [r0]\n\
- ldrh r0, [r2]\n\
- adds r1, r0\n\
- movs r0, 0xFF\n\
- lsls r0, 8\n\
- ands r0, r1\n\
- lsrs r5, r0, 8\n\
- movs r0, 0xFF\n\
- ands r1, r0\n\
- strh r1, [r2]\n\
- movs r6, 0\n\
- ldr r1, [sp, 0x4]\n\
- cmp r1, r5\n\
- blt _08114A72\n\
- b _08114D76\n\
-_08114A72:\n\
- mov r9, r4\n\
- mov r2, r8\n\
- adds r7, r3, r2\n\
- ldr r0, _08114AB8 @ =0x000038c4\n\
- add r0, r9\n\
- adds r4, r7, r0\n\
- movs r3, 0\n\
- ldr r0, _08114ABC @ =0x000028c4\n\
- add r0, r9\n\
- adds r2, r7, r0\n\
-_08114A86:\n\
- ldrb r0, [r4]\n\
- adds r0, 0x1\n\
- strb r0, [r4]\n\
- ldrb r1, [r4]\n\
- ldr r0, [sp]\n\
- str r2, [sp, 0xC]\n\
- str r3, [sp, 0x10]\n\
- bl sub_8114DB4\n\
- ldrb r0, [r4]\n\
- ldr r2, [sp, 0xC]\n\
- ldr r3, [sp, 0x10]\n\
- ldrb r1, [r2]\n\
- cmp r0, r1\n\
- bne _08114AA6\n\
- b _08114D4C\n\
-_08114AA6:\n\
- adds r6, 0x1\n\
- cmp r6, r5\n\
- blt _08114A86\n\
- b _08114D76\n\
- .align 2, 0\n\
-_08114AB0: .4byte 0x000070c4\n\
-_08114AB4: .4byte 0x000090c4\n\
-_08114AB8: .4byte 0x000038c4\n\
-_08114ABC: .4byte 0x000028c4\n\
-_08114AC0:\n\
- movs r2, 0\n\
- str r2, [sp, 0x4]\n\
- ldr r4, _08114B30 @ =gSharedMem + 0x14800\n\
- lsls r0, r3, 1\n\
- ldr r5, [sp]\n\
- lsls r1, r5, 6\n\
- adds r0, r1\n\
- ldr r1, _08114B34 @ =0x000070c4\n\
- adds r2, r4, r1\n\
- adds r2, r0, r2\n\
- ldr r5, _08114B38 @ =0x000090c4\n\
- adds r1, r4, r5\n\
- adds r0, r1\n\
- ldrh r1, [r0]\n\
- ldrh r0, [r2]\n\
- adds r1, r0\n\
- movs r0, 0xFF\n\
- lsls r0, 8\n\
- ands r0, r1\n\
- lsrs r5, r0, 8\n\
- movs r0, 0xFF\n\
- ands r1, r0\n\
- strh r1, [r2]\n\
- movs r6, 0\n\
- ldr r1, [sp, 0x4]\n\
- cmp r1, r5\n\
- blt _08114AF8\n\
- b _08114D76\n\
-_08114AF8:\n\
- mov r9, r4\n\
- mov r2, r8\n\
- adds r7, r3, r2\n\
- ldr r0, _08114B3C @ =0x000038c4\n\
- add r0, r9\n\
- adds r4, r7, r0\n\
- ldr r0, _08114B40 @ =0x000028c4\n\
- add r0, r9\n\
- adds r2, r7, r0\n\
-_08114B0A:\n\
- ldrb r0, [r4]\n\
- ldrb r1, [r2]\n\
- cmp r0, r1\n\
- bne _08114B14\n\
- b _08114D5C\n\
-_08114B14:\n\
- adds r1, r0, 0\n\
- ldr r0, [sp]\n\
- str r2, [sp, 0xC]\n\
- bl sub_8114DF0\n\
- ldrb r0, [r4]\n\
- adds r0, 0x1\n\
- strb r0, [r4]\n\
- adds r6, 0x1\n\
- ldr r2, [sp, 0xC]\n\
- cmp r6, r5\n\
- blt _08114B0A\n\
- b _08114D76\n\
- .align 2, 0\n\
-_08114B30: .4byte gSharedMem + 0x14800\n\
-_08114B34: .4byte 0x000070c4\n\
-_08114B38: .4byte 0x000090c4\n\
-_08114B3C: .4byte 0x000038c4\n\
-_08114B40: .4byte 0x000028c4\n\
-_08114B44:\n\
- movs r2, 0\n\
- str r2, [sp, 0x4]\n\
- ldr r5, _08114B70 @ =gSharedMem + 0x14800\n\
- mov r0, r8\n\
- adds r4, r3, r0\n\
- ldr r1, _08114B74 @ =0x000038c4\n\
- adds r0, r5, r1\n\
- adds r0, r4, r0\n\
- ldrb r1, [r0]\n\
- ldr r0, [sp]\n\
- bl sub_8114E48\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _08114B64\n\
- b _08114D76\n\
-_08114B64:\n\
- ldr r2, _08114B78 @ =0x000008c4\n\
- adds r0, r5, r2\n\
- adds r0, r4, r0\n\
- movs r1, 0x9\n\
- b _08114D74\n\
- .align 2, 0\n\
-_08114B70: .4byte gSharedMem + 0x14800\n\
-_08114B74: .4byte 0x000038c4\n\
-_08114B78: .4byte 0x000008c4\n\
-_08114B7C:\n\
- movs r4, 0\n\
- str r4, [sp, 0x4]\n\
- ldr r5, _08114BA8 @ =gSharedMem + 0x14800\n\
- mov r0, r8\n\
- adds r4, r3, r0\n\
- ldr r1, _08114BAC @ =0x000038c4\n\
- adds r0, r5, r1\n\
- adds r0, r4, r0\n\
- ldrb r1, [r0]\n\
- ldr r0, [sp]\n\
- bl sub_8114E48\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _08114B9C\n\
- b _08114D76\n\
-_08114B9C:\n\
- ldr r2, _08114BB0 @ =0x000008c4\n\
- adds r0, r5, r2\n\
- adds r0, r4, r0\n\
- movs r1, 0xA\n\
- b _08114D74\n\
- .align 2, 0\n\
-_08114BA8: .4byte gSharedMem + 0x14800\n\
-_08114BAC: .4byte 0x000038c4\n\
-_08114BB0: .4byte 0x000008c4\n\
-_08114BB4:\n\
- movs r4, 0\n\
- str r4, [sp, 0x4]\n\
- ldr r5, _08114BE0 @ =gSharedMem + 0x14800\n\
- mov r0, r8\n\
- adds r4, r3, r0\n\
- ldr r1, _08114BE4 @ =0x000038c4\n\
- adds r0, r5, r1\n\
- adds r0, r4, r0\n\
- ldrb r1, [r0]\n\
- ldr r0, [sp]\n\
- bl sub_8114E48\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _08114BD4\n\
- b _08114D76\n\
-_08114BD4:\n\
- ldr r2, _08114BE8 @ =0x000008c4\n\
- adds r0, r5, r2\n\
- adds r0, r4, r0\n\
- movs r1, 0xB\n\
- b _08114D74\n\
- .align 2, 0\n\
-_08114BE0: .4byte gSharedMem + 0x14800\n\
-_08114BE4: .4byte 0x000038c4\n\
-_08114BE8: .4byte 0x000008c4\n\
-_08114BEC:\n\
- movs r4, 0\n\
- str r4, [sp, 0x4]\n\
- ldr r5, _08114C18 @ =gSharedMem + 0x14800\n\
- mov r0, r8\n\
- adds r4, r3, r0\n\
- ldr r1, _08114C1C @ =0x000038c4\n\
- adds r0, r5, r1\n\
- adds r0, r4, r0\n\
- ldrb r1, [r0]\n\
- ldr r0, [sp]\n\
- bl sub_8114E48\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _08114C0C\n\
- b _08114D76\n\
-_08114C0C:\n\
- ldr r2, _08114C20 @ =0x000008c4\n\
- adds r0, r5, r2\n\
- adds r0, r4, r0\n\
- movs r1, 0xC\n\
- b _08114D74\n\
- .align 2, 0\n\
-_08114C18: .4byte gSharedMem + 0x14800\n\
-_08114C1C: .4byte 0x000038c4\n\
-_08114C20: .4byte 0x000008c4\n\
-_08114C24:\n\
- movs r4, 0\n\
- str r4, [sp, 0x4]\n\
- ldr r6, _08114C58 @ =gSharedMem + 0x14800\n\
- mov r0, r8\n\
- adds r5, r3, r0\n\
- ldr r1, _08114C5C @ =0x000038c4\n\
- adds r4, r6, r1\n\
- adds r4, r5, r4\n\
- ldrb r1, [r4]\n\
- ldr r0, [sp]\n\
- bl sub_8114DB4\n\
- ldr r2, _08114C60 @ =0x000028c4\n\
- adds r0, r6, r2\n\
- adds r0, r5, r0\n\
- ldrb r1, [r4]\n\
- ldrb r0, [r0]\n\
- cmp r1, r0\n\
- bne _08114C68\n\
- ldr r4, _08114C64 @ =0x000008c4\n\
- adds r0, r6, r4\n\
- adds r0, r5, r0\n\
- mov r5, sp\n\
- ldrb r5, [r5, 0x4]\n\
- strb r5, [r0]\n\
- b _08114D76\n\
- .align 2, 0\n\
-_08114C58: .4byte gSharedMem + 0x14800\n\
-_08114C5C: .4byte 0x000038c4\n\
-_08114C60: .4byte 0x000028c4\n\
-_08114C64: .4byte 0x000008c4\n\
-_08114C68:\n\
- ldr r1, _08114C74 @ =0x000008c4\n\
- adds r0, r6, r1\n\
- adds r0, r5, r0\n\
- movs r1, 0x1\n\
- b _08114D74\n\
- .align 2, 0\n\
-_08114C74: .4byte 0x000008c4\n\
-_08114C78:\n\
- movs r2, 0\n\
- str r2, [sp, 0x4]\n\
- ldr r6, _08114CA8 @ =gSharedMem + 0x14800\n\
- mov r4, r8\n\
- adds r5, r3, r4\n\
- ldr r0, _08114CAC @ =0x000038c4\n\
- adds r4, r6, r0\n\
- adds r4, r5, r4\n\
- ldrb r1, [r4]\n\
- ldr r0, [sp]\n\
- bl sub_8114DF0\n\
- ldr r1, _08114CB0 @ =0x000028c4\n\
- adds r0, r6, r1\n\
- adds r0, r5, r0\n\
- ldrb r1, [r4]\n\
- ldrb r0, [r0]\n\
- cmp r1, r0\n\
- beq _08114D1E\n\
- ldr r1, _08114CB4 @ =0x000008c4\n\
- adds r0, r6, r1\n\
- adds r0, r5, r0\n\
- movs r1, 0x2\n\
- b _08114D74\n\
- .align 2, 0\n\
-_08114CA8: .4byte gSharedMem + 0x14800\n\
-_08114CAC: .4byte 0x000038c4\n\
-_08114CB0: .4byte 0x000028c4\n\
-_08114CB4: .4byte 0x000008c4\n\
-_08114CB8:\n\
- movs r2, 0\n\
- str r2, [sp, 0x4]\n\
- ldr r6, _08114CE8 @ =gSharedMem + 0x14800\n\
- mov r4, r8\n\
- adds r5, r3, r4\n\
- ldr r0, _08114CEC @ =0x000038c4\n\
- adds r4, r6, r0\n\
- adds r4, r5, r4\n\
- ldrb r1, [r4]\n\
- ldr r0, [sp]\n\
- bl sub_8114DB4\n\
- ldr r1, _08114CF0 @ =0x000028c4\n\
- adds r0, r6, r1\n\
- adds r0, r5, r0\n\
- ldrb r1, [r4]\n\
- ldrb r0, [r0]\n\
- cmp r1, r0\n\
- beq _08114D1E\n\
- ldr r1, _08114CF4 @ =0x000008c4\n\
- adds r0, r6, r1\n\
- adds r0, r5, r0\n\
- movs r1, 0x3\n\
- b _08114D74\n\
- .align 2, 0\n\
-_08114CE8: .4byte gSharedMem + 0x14800\n\
-_08114CEC: .4byte 0x000038c4\n\
-_08114CF0: .4byte 0x000028c4\n\
-_08114CF4: .4byte 0x000008c4\n\
-_08114CF8:\n\
- movs r2, 0\n\
- str r2, [sp, 0x4]\n\
- ldr r6, _08114D2C @ =gSharedMem + 0x14800\n\
- mov r4, r8\n\
- adds r5, r3, r4\n\
- ldr r0, _08114D30 @ =0x000038c4\n\
- adds r4, r6, r0\n\
- adds r4, r5, r4\n\
- ldrb r1, [r4]\n\
- ldr r0, [sp]\n\
- bl sub_8114DF0\n\
- ldr r1, _08114D34 @ =0x000028c4\n\
- adds r0, r6, r1\n\
- adds r0, r5, r0\n\
- ldrb r1, [r4]\n\
- ldrb r0, [r0]\n\
- cmp r1, r0\n\
- bne _08114D6C\n\
-_08114D1E:\n\
- ldr r2, _08114D38 @ =0x000008c4\n\
- adds r0, r6, r2\n\
- adds r0, r5, r0\n\
- mov r4, sp\n\
- ldrb r4, [r4, 0x4]\n\
- strb r4, [r0]\n\
- b _08114D76\n\
- .align 2, 0\n\
-_08114D2C: .4byte gSharedMem + 0x14800\n\
-_08114D30: .4byte 0x000038c4\n\
-_08114D34: .4byte 0x000028c4\n\
-_08114D38: .4byte 0x000008c4\n\
-_08114D3C:\n\
- ldr r0, _08114D48 @ =0x000008c4\n\
- add r0, r9\n\
- adds r0, r7, r0\n\
- movs r1, 0\n\
- b _08114D74\n\
- .align 2, 0\n\
-_08114D48: .4byte 0x000008c4\n\
-_08114D4C:\n\
- ldr r0, _08114D58 @ =0x000008c4\n\
- add r0, r9\n\
- adds r0, r7, r0\n\
- strb r3, [r0]\n\
- b _08114D76\n\
- .align 2, 0\n\
-_08114D58: .4byte 0x000008c4\n\
-_08114D5C:\n\
- ldr r0, _08114D68 @ =0x000008c4\n\
- add r0, r9\n\
- adds r0, r7, r0\n\
- movs r1, 0\n\
- b _08114D74\n\
- .align 2, 0\n\
-_08114D68: .4byte 0x000008c4\n\
-_08114D6C:\n\
- ldr r1, _08114DAC @ =0x000008c4\n\
- adds r0, r6, r1\n\
- adds r0, r5, r0\n\
- movs r1, 0x4\n\
-_08114D74:\n\
- strb r1, [r0]\n\
-_08114D76:\n\
- mov r3, r10\n\
- ldr r2, _08114DB0 @ =gSharedMem + 0x14800\n\
- adds r0, r2, 0\n\
- adds r0, 0x84\n\
- ldr r4, [sp]\n\
- adds r0, r4, r0\n\
- adds r4, r2, 0\n\
-_08114D84:\n\
- ldrb r0, [r0]\n\
- cmp r3, r0\n\
- bge _08114D8E\n\
- bl _08114410\n\
-_08114D8E:\n\
- ldr r5, [sp, 0x8]\n\
- str r5, [sp]\n\
- cmp r5, 0x3F\n\
- bgt _08114D9A\n\
- bl _081143F2\n\
-_08114D9A:\n\
- ldr r0, [sp, 0x4]\n\
- add sp, 0x14\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_08114DAC: .4byte 0x000008c4\n\
-_08114DB0: .4byte gSharedMem + 0x14800\n\
- .syntax divided");
-}
-
-void sub_8114DB4(u32 a, u8 b)
-{
- u8 *r2 = sEvoInfo.unk40C4[a][b / 2];
-
- if (b % 2 != 0)
- *r2 |= 0xF0;
- else
- *r2 |= 0x0F;
-}
-
-void sub_8114DF0(u32 a, u8 b)
-{
- u8 *r2 = sEvoInfo.unk40C4[a][b / 2];
- u8 *r1 = r2 + 0x6000;
-
- if (b % 2 != 0)
- {
- if (!(*r1 & 0xF0))
- *r2 &= 0x0F;
- }
- else
- {
- if (!(*r1 & 0x0F))
- *r2 &= 0xF0;
- }
-}
-
-__attribute__((naked))
-void sub_8114E48()
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- adds r4, r0, 0\n\
- lsls r1, 24\n\
- lsrs r6, r1, 24\n\
- ldr r1, _08114E6C @ =gSharedMem + 0x14800\n\
- ldr r2, _08114E70 @ =0x0000a0c4\n\
- adds r0, r1, r2\n\
- ldrb r0, [r0]\n\
- adds r5, r1, 0\n\
- cmp r0, 0\n\
- bne _08114E60\n\
- b _08114F5E\n\
-_08114E60:\n\
- movs r1, 0\n\
- movs r3, 0\n\
- cmp r4, 0\n\
- bne _08114E74\n\
- movs r1, 0x1\n\
- b _08114EA6\n\
- .align 2, 0\n\
-_08114E6C: .4byte gSharedMem + 0x14800\n\
-_08114E70: .4byte 0x0000a0c4\n\
-_08114E74:\n\
- subs r0, r4, 0x1\n\
- lsls r0, 5\n\
- adds r2, r3, r0\n\
- adds r0, r5, 0\n\
- adds r0, 0xC4\n\
- adds r0, r2, r0\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- bne _08114EA6\n\
- ldr r7, _08114EC4 @ =0x000008c4\n\
- adds r0, r5, r7\n\
- adds r0, r2, r0\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- bne _08114EA6\n\
- adds r3, 0x1\n\
- cmp r3, 0x1F\n\
- bgt _08114EA6\n\
- cmp r4, 0\n\
- bne _08114E74\n\
- lsls r0, r1, 24\n\
- movs r1, 0x80\n\
- lsls r1, 17\n\
- adds r0, r1\n\
- lsrs r1, r0, 24\n\
-_08114EA6:\n\
- cmp r3, 0x20\n\
- bne _08114EB4\n\
- lsls r0, r1, 24\n\
- movs r2, 0x80\n\
- lsls r2, 17\n\
- adds r0, r2\n\
- lsrs r1, r0, 24\n\
-_08114EB4:\n\
- movs r3, 0\n\
- cmp r4, 0x3F\n\
- bne _08114EC8\n\
- lsls r0, r1, 24\n\
- movs r7, 0x80\n\
- lsls r7, 17\n\
- adds r0, r7\n\
- b _08114EF8\n\
- .align 2, 0\n\
-_08114EC4: .4byte 0x000008c4\n\
-_08114EC8:\n\
- adds r0, r4, 0x1\n\
- lsls r0, 5\n\
- adds r2, r3, r0\n\
- adds r0, r5, 0\n\
- adds r0, 0xC4\n\
- adds r0, r2, r0\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- bne _08114EFA\n\
- ldr r7, _08114F64 @ =0x000008c4\n\
- adds r0, r5, r7\n\
- adds r0, r2, r0\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- bne _08114EFA\n\
- adds r3, 0x1\n\
- cmp r3, 0x1F\n\
- bgt _08114EFA\n\
- cmp r4, 0x3F\n\
- bne _08114EC8\n\
- lsls r0, r1, 24\n\
- movs r1, 0x80\n\
- lsls r1, 17\n\
- adds r0, r1\n\
-_08114EF8:\n\
- lsrs r1, r0, 24\n\
-_08114EFA:\n\
- cmp r3, 0x20\n\
- bne _08114F08\n\
- lsls r0, r1, 24\n\
- movs r2, 0x80\n\
- lsls r2, 17\n\
- adds r0, r2\n\
- lsrs r1, r0, 24\n\
-_08114F08:\n\
- cmp r1, 0x2\n\
- beq _08114F5E\n\
- subs r0, r6, 0x2\n\
- lsls r0, 24\n\
- lsrs r1, r0, 24\n\
- cmp r0, 0\n\
- bge _08114F18\n\
- movs r1, 0\n\
-_08114F18:\n\
- adds r0, r6, 0x2\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
- asrs r0, 24\n\
- cmp r0, 0x3F\n\
- ble _08114F26\n\
- movs r2, 0x3F\n\
-_08114F26:\n\
- lsls r1, 24\n\
- asrs r3, r1, 24\n\
- lsls r0, r2, 24\n\
- asrs r2, r0, 24\n\
- adds r6, r1, 0\n\
- adds r7, r0, 0\n\
- cmp r3, r2\n\
- bge _08114F7C\n\
- cmp r4, 0\n\
- beq _08114F7C\n\
- subs r0, r4, 0x1\n\
- lsls r5, r0, 7\n\
- ldr r0, _08114F68 @ =gSharedMem + 0x188C4\n\
- mov r12, r0\n\
-_08114F42:\n\
- asrs r0, r3, 1\n\
- lsls r0, 2\n\
- adds r0, r5\n\
- add r0, r12\n\
- ldr r1, [r0]\n\
- movs r0, 0x1\n\
- ands r0, r3\n\
- cmp r0, 0\n\
- beq _08114F6C\n\
- ldrb r1, [r1]\n\
- movs r0, 0xF0\n\
-_08114F58:\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08114F72\n\
-_08114F5E:\n\
- movs r0, 0x1\n\
- b _08114FCA\n\
- .align 2, 0\n\
-_08114F64: .4byte 0x000008c4\n\
-_08114F68: .4byte gSharedMem + 0x188C4\n\
-_08114F6C:\n\
- ldrb r1, [r1]\n\
- movs r0, 0xF\n\
- b _08114F58\n\
-_08114F72:\n\
- adds r3, 0x1\n\
- cmp r3, r2\n\
- bge _08114F7C\n\
- cmp r4, 0\n\
- bne _08114F42\n\
-_08114F7C:\n\
- asrs r3, r6, 24\n\
- asrs r1, r7, 24\n\
- cmp r3, r1\n\
- bge _08114FC8\n\
- cmp r4, 0x3F\n\
- beq _08114FC8\n\
- adds r0, r4, 0x1\n\
- lsls r5, r0, 7\n\
- ldr r6, _08114FB0 @ =gSharedMem + 0x188C4\n\
- adds r2, r1, 0\n\
-_08114F90:\n\
- asrs r0, r3, 1\n\
- lsls r0, 2\n\
- adds r0, r5\n\
- adds r0, r6\n\
- ldr r1, [r0]\n\
- movs r0, 0x1\n\
- ands r0, r3\n\
- cmp r0, 0\n\
- beq _08114FB4\n\
- ldrb r1, [r1]\n\
- movs r0, 0xF0\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08114FBE\n\
- b _08114F5E\n\
- .align 2, 0\n\
-_08114FB0: .4byte gSharedMem + 0x188C4\n\
-_08114FB4:\n\
- ldrb r1, [r1]\n\
- movs r0, 0xF\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08114F5E\n\
-_08114FBE:\n\
- adds r3, 0x1\n\
- cmp r3, r2\n\
- bge _08114FC8\n\
- cmp r4, 0x3F\n\
- bne _08114F90\n\
-_08114FC8:\n\
- movs r0, 0\n\
-_08114FCA:\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .syntax divided");
-}
-
-// Functions below are vblank callbacks and are used
-
-static void EvoDummyFunc(void)
-{
-
-}
-
-static void VBlankCB_EvolutionScene(void)
-{
- REG_BG0CNT = BGCNT_SCREENBASE(24) | BGCNT_16COLOR | BGCNT_TXT256x256 | BGCNT_AFF512x512 | BGCNT_PRIORITY(3); // 0x9803
- REG_BG0HOFS = gBattle_BG0_X;
- REG_BG0VOFS = gBattle_BG0_Y;
- REG_BG1HOFS = gBattle_BG1_X;
- REG_BG1VOFS = gBattle_BG1_Y;
- REG_BG2HOFS = gBattle_BG2_X;
- REG_BG2VOFS = gBattle_BG2_Y;
- REG_BG3HOFS = gBattle_BG3_X;
- REG_BG3VOFS = gBattle_BG3_Y;
- LoadOam();
- ProcessSpriteCopyRequests();
- TransferPlttBuffer();
- ScanlineEffect_InitHBlankDmaTransfer();
-}
-
-static void VBlankCB_TradeEvolutionScene(void)
-{
- REG_BG0HOFS = gBattle_BG0_X;
- REG_BG0VOFS = gBattle_BG0_Y;
- REG_BG1HOFS = gBattle_BG1_X;
- REG_BG1VOFS = gBattle_BG1_Y;
- REG_BG2HOFS = gBattle_BG2_X;
- REG_BG2VOFS = gBattle_BG2_Y;
- REG_BG3HOFS = gBattle_BG3_X;
- REG_BG3VOFS = gBattle_BG3_Y;
- LoadOam();
- ProcessSpriteCopyRequests();
- TransferPlttBuffer();
- ScanlineEffect_InitHBlankDmaTransfer();
-}
-
-static void sub_81150D8(void)
-{
- MenuCursor_SetPos814A880(200, 72 + (sEvoCursorPos * 16));
-}
-
-static void EvoDummyFunc2(void)
-{
-
-}
diff --git a/src/scene/hall_of_fame.c b/src/scene/hall_of_fame.c
deleted file mode 100644
index 2b790e97d..000000000
--- a/src/scene/hall_of_fame.c
+++ /dev/null
@@ -1,1366 +0,0 @@
-#include "global.h"
-#include "main.h"
-#include "task.h"
-#include "palette.h"
-#include "sound.h"
-#include "constants/songs.h"
-#include "pokemon.h"
-#include "text.h"
-#include "strings.h"
-#include "string_util.h"
-#include "menu.h"
-#include "save.h"
-#include "constants/species.h"
-#include "overworld.h"
-#include "m4a.h"
-#include "data2.h"
-#include "decompress.h"
-#include "random.h"
-#include "scanline_effect.h"
-#include "trig.h"
-#include "hof_pc.h"
-#include "credits.h"
-#include "pc_screen_effect.h"
-#include "ewram.h"
-
-static EWRAM_DATA u32 sUnknown_0203931C = 0;
-
-extern bool8 gUnknown_02039324; // has hall of fame records
-extern void (*gGameContinueCallback)(void);
-extern struct MusicPlayerInfo gMPlay_BGM;
-extern u8 gReservedSpritePaletteCount;
-extern struct SpriteTemplate gUnknown_02024E8C;
-
-extern const u8 gContestConfetti_Gfx[];
-extern const u8 gContestConfetti_Pal[];
-extern const u8 gHallOfFame_Gfx[];
-extern const u16 gHallOfFame_Pal[];
-
-struct HallofFameMon
-{
- u32 tid;
- u32 personality;
- u16 species : 9;
- u16 lvl : 7;
- u8 nick[10];
-};
-
-struct HallofFameMons
-{
- struct HallofFameMon mons[6];
-};
-
-#define HALL_OF_FAME_MAX_TEAMS 50
-
-static void sub_8141FF8(u8 taskID);
-static void sub_81422E8(u8 taskID);
-static void sub_814217C(u8 taskID);
-static void sub_8142274(u8 taskID);
-static void sub_81422B8(u8 taskID);
-static void sub_8142320(u8 taskID);
-static void sub_8142404(u8 taskID);
-static void sub_8142484(u8 taskID);
-static void sub_8142570(u8 taskID);
-static void sub_8142618(u8 taskID);
-static void sub_81426F8(u8 taskID);
-static void sub_8142738(u8 taskID);
-static void sub_8142794(u8 taskID);
-static void sub_8142818(u8 taskID);
-static void sub_8142850(u8 taskID);
-static void sub_81428A0(u8 taskID);
-static void sub_8142A28(u8 taskID);
-static void sub_8142FEC(u8 taskID);
-static void sub_8142B04(u8 taskID);
-static void sub_8142CC8(u8 taskID);
-static void sub_8142DF4(u8 taskID);
-static void sub_8142F78(u8 taskID);
-static void sub_8142FCC(u8 taskID);
-static void sub_814302C(u8 taskID);
-
-static void sub_81435DC(struct Sprite* sprite);
-static void sub_814386C(struct Sprite* sprite);
-static void SpriteCB_HallOfFame_Dummy(struct Sprite* sprite);
-
-static void sub_8143068(u8 a0, u8 a1);
-static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 a1, u8 a2);
-static void HallOfFame_PrintPlayerInfo(u8 a0, u8 a1);
-static void sub_81433E0(void);
-static void sub_8143570(void);
-static void sub_81435B8(void);
-static u32 HallOfFame_LoadPokemonPic(u16 species, s16 posX, s16 posY, u16 pokeID, u32 tid, u32 pid);
-static u32 HallOfFame_LoadTrainerPic(u16 trainerPicID, s16 posX, s16 posY, u16 a3);
-static bool8 sub_81438C4(void);
-
-// data and gfx
-
-static const struct CompressedSpriteSheet sHallOfFame_ConfettiSpriteSheet =
-{
- gContestConfetti_Gfx, 0x220, 1001
-};
-
-static const u8 sUnused0[8] = {};
-
-static const struct CompressedSpritePalette sHallOfFame_ConfettiSpritePalette =
-{
- gContestConfetti_Pal, 1001
-};
-
-static const u8 sUnused1[8] = {};
-
-static const s16 sHallOfFame_MonsFullTeamPositions[6][4] =
-{
- {120, 210, 120, 40},
- {326, 220, 56, 40},
- {-86, 220, 184, 40},
- {120, -62, 120, 88},
- {-25, -62, 200, 88},
- {265, -62, 40, 88}
-};
-
-static const s16 sHallOfFame_MonsHalfTeamPositions[3][4] =
-{
- {120, 214, 120, 64},
- {281, 214, 56, 64},
- {-41, 214, 184, 64}
-};
-
-static const struct PCScreenEffectStruct sPCScreenEffectTemplate = {
- .tileTag = 0x3ea,
- .paletteTag = 0x3ea
-};
-
-static const u8 sUnused2[6] = {2, 1, 3, 6, 4, 5};
-
-static const struct OamData sOamData_840B598 =
-{
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = 0,
- .x = 0,
- .matrixNum = 0,
- .size = 3,
- .tileNum = 0,
- .priority = 0,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-void* const gUnknown_0840B5A0[] =
-{
- ewram8000,
- ewramA000,
- ewramC000,
- ewramE000,
- ewram10000,
- ewram14000,
- ewram18000_2
-};
-
-static const struct SpriteFrameImage sSpriteImageTable_840B5BC[] =
-{
- {ewram8000, 0x800},
- {ewram8800, 0x800},
- {ewram9000, 0x800},
- {ewram9800, 0x800}
-};
-
-static const struct SpriteFrameImage sSpriteImageTable_840B5DC[] =
-{
- {ewramA000, 0x800},
- {ewramA800, 0x800},
- {ewramB000, 0x800},
- {ewramB800, 0x800}
-};
-
-static const struct SpriteFrameImage sSpriteImageTable_840B5FC[] =
-{
- {ewramC000, 0x800},
- {ewramC800, 0x800},
- {ewramD000, 0x800},
- {ewramD800, 0x800}
-};
-
-static const struct SpriteFrameImage sSpriteImageTable_840B61C[] =
-{
- {ewramE000, 0x800},
- {ewramE800, 0x800},
- {ewramF000, 0x800},
- {ewramF800, 0x800}
-};
-
-static const struct SpriteFrameImage sSpriteImageTable_840B63C[] =
-{
- {ewram10000, 0x800},
- {ewram10800, 0x800},
- {ewram11000, 0x800},
- {ewram11800, 0x800}
-};
-
-static const struct SpriteFrameImage sSpriteImageTable_840B65C[] =
-{
- {ewram14000, 0x800},
- {ewram14800, 0x800},
- {ewram15000, 0x800},
- {ewram15800, 0x800}
-};
-
-static const struct SpriteFrameImage sSpriteImageTable_840B67C[] =
-{
- {ewram18000_2, 0x800},
- {ewram18800, 0x800},
- {ewram19000, 0x800},
- {ewram19800, 0x800}
-};
-
-static const struct SpriteFrameImage* const sUnknown_0840B69C[7] =
-{
- sSpriteImageTable_840B5BC,
- sSpriteImageTable_840B5DC,
- sSpriteImageTable_840B5FC,
- sSpriteImageTable_840B61C,
- sSpriteImageTable_840B63C,
- sSpriteImageTable_840B65C,
- sSpriteImageTable_840B67C
-};
-
-static const struct SpriteTemplate sUnknown_0840B6B8 =
-{
- .tileTag = -1,
- .paletteTag = -1,
- .oam = &sOamData_840B598,
- .anims = NULL,
- .images = sSpriteImageTable_840B5BC,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCB_HallOfFame_Dummy
-};
-
-static const struct OamData sOamData_840B6D0 =
-{
- .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 AnimCmd sSpriteAnim_840B6D8[] =
-{
- ANIMCMD_FRAME(0, 30),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_840B6E0[] =
-{
- ANIMCMD_FRAME(1, 30),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_840B6E8[] =
-{
- ANIMCMD_FRAME(2, 30),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_840B6F0[] =
-{
- ANIMCMD_FRAME(3, 30),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_840B6F8[] =
-{
- ANIMCMD_FRAME(4, 30),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_840B700[] =
-{
- ANIMCMD_FRAME(5, 30),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_840B708[] =
-{
- ANIMCMD_FRAME(6, 30),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_840B710[] =
-{
- ANIMCMD_FRAME(7, 30),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_840B718[] =
-{
- ANIMCMD_FRAME(8, 30),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_840B720[] =
-{
- ANIMCMD_FRAME(9, 30),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_840B728[] =
-{
- ANIMCMD_FRAME(10, 30),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_840B730[] =
-{
- ANIMCMD_FRAME(11, 30),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_840B738[] =
-{
- ANIMCMD_FRAME(12, 30),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_840B740[] =
-{
- ANIMCMD_FRAME(13, 30),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_840B748[] =
-{
- ANIMCMD_FRAME(14, 30),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_840B750[] =
-{
- ANIMCMD_FRAME(15, 30),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_840B758[] =
-{
- ANIMCMD_FRAME(16, 30),
- ANIMCMD_END
-};
-
-static const union AnimCmd* const sSpriteAnimTable_840B760[] =
-{
- sSpriteAnim_840B6D8,
- sSpriteAnim_840B6E0,
- sSpriteAnim_840B6E8,
- sSpriteAnim_840B6F0,
- sSpriteAnim_840B6F8,
- sSpriteAnim_840B700,
- sSpriteAnim_840B708,
- sSpriteAnim_840B710,
- sSpriteAnim_840B718,
- sSpriteAnim_840B720,
- sSpriteAnim_840B728,
- sSpriteAnim_840B730,
- sSpriteAnim_840B738,
- sSpriteAnim_840B740,
- sSpriteAnim_840B748,
- sSpriteAnim_840B750,
- sSpriteAnim_840B758
-};
-
-static const struct SpriteTemplate sSpriteTemplate_840B7A4 =
-{
- .tileTag = 1001,
- .paletteTag = 1001,
- .oam = &sOamData_840B6D0,
- .anims = sSpriteAnimTable_840B760,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = sub_814386C
-};
-
-// code
-
-#define tDisplayedPoke data[1]
-#define tPokesNumber data[2]
-#define tFrameCount data[3]
-#define tPlayerSpriteID data[4]
-#define tMonSpriteID(i) data[i + 5]
-
-static void VBlankCB_HallOfFame(void)
-{
- LoadOam();
- ProcessSpriteCopyRequests();
- TransferPlttBuffer();
-}
-
-static void CB2_HallOfFame(void)
-{
- RunTasks();
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
-}
-
-static bool8 sub_8141E64(void)
-{
- switch (gMain.state)
- {
- case 0:
- default:
- SetVBlankCallback(NULL);
- sub_81433E0();
- gMain.state = 1;
- break;
- case 1:
- sub_8143570();
- gMain.state++;
- break;
- case 2:
- {
- u16 saved_IME;
-
- BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
- SetVBlankCallback(VBlankCB_HallOfFame);
- saved_IME = REG_IME;
- REG_IME = 0;
- REG_IE |= 1;
- REG_IME = saved_IME;
- REG_DISPSTAT |= 8;
- gMain.state++;
- }
- break;
- case 3:
- REG_BLDCNT = 0x3F42;
- REG_BLDALPHA = 0x710;
- REG_BLDY = 0;
- sub_81435B8();
- gMain.state++;
- break;
- case 4:
- UpdatePaletteFade();
- if (!gPaletteFade.active)
- {
- SetMainCallback2(CB2_HallOfFame);
- PlayBGM(BGM_DENDOU);
- return 0;
- }
- break;
- }
- return 1;
-}
-
-void sub_8141F90(void)
-{
- if (sub_8141E64() == 0)
- {
- u8 taskID = CreateTask(sub_8141FF8, 0);
- gTasks[taskID].data[0] = 0;
- }
-}
-
-static void sub_8141FC4(void)
-{
- if (sub_8141E64() == 0)
- {
- u8 taskID = CreateTask(sub_8141FF8, 0);
- gTasks[taskID].data[0] = 1;
- }
-}
-
-static void sub_8141FF8(u8 taskID)
-{
- u16 i, j;
- struct HallofFameMons* fameMons = eHallOfFameMons1;
-
- gTasks[taskID].tPokesNumber = 0; // valid pokes
- for (i = 0; i < 6; i++)
- {
- u8 nick[12];
- if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES))
- {
- fameMons->mons[i].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2);
- fameMons->mons[i].tid = GetMonData(&gPlayerParty[i], MON_DATA_OT_ID);
- fameMons->mons[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY);
- fameMons->mons[i].lvl = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL);
- GetMonData(&gPlayerParty[i], MON_DATA_NICKNAME, nick);
- for (j = 0; j < 10; j++)
- {
- fameMons->mons[i].nick[j] = nick[j];
- }
- gTasks[taskID].tPokesNumber++;
- }
- else
- {
- fameMons->mons[i].species = 0;
- fameMons->mons[i].tid = 0;
- fameMons->mons[i].personality = 0;
- fameMons->mons[i].lvl = 0;
- fameMons->mons[i].nick[0] = EOS;
- }
- }
- sUnknown_0203931C = 0;
- gTasks[taskID].tDisplayedPoke = 0;
- gTasks[taskID].data[4] = 0xFF;
- for (i = 0; i < 6; i++)
- {
- gTasks[taskID].tMonSpriteID(i) = 0xFF;
- }
- if (gTasks[taskID].data[0])
- gTasks[taskID].func = sub_81422E8;
- else
- gTasks[taskID].func = sub_814217C;
-}
-
-static void sub_814217C(u8 taskID)
-{
- u16 i;
- struct HallofFameMons* fameMons = eHallOfFameMons1;
- struct HallofFameMons* lastSavedTeam = eHallOfFameMons2;
-
- if (gUnknown_02039324 == FALSE)
- {
- for (i = 0; i < 0x2000; i++)
- ewram1E000(i) = 0;
- }
- else
- Save_LoadGameData(SAVE_HALL_OF_FAME);
-
- for (i = 0; i < HALL_OF_FAME_MAX_TEAMS; i++, lastSavedTeam++)
- {
- if (lastSavedTeam->mons[0].species == 0)
- break;
- }
- if (i >= HALL_OF_FAME_MAX_TEAMS)
- {
- struct HallofFameMons* r5 = eHallOfFameMons2;
- struct HallofFameMons* r6 = eHallOfFameMons2;
- r5++;
- for (i = 0; i < HALL_OF_FAME_MAX_TEAMS - 1; i++, r6++, r5++)
- {
- *r6 = *r5;
- }
- lastSavedTeam--;
- }
- *lastSavedTeam = *fameMons;
- Menu_DrawStdWindowFrame(2, 14, 27, 19);
- Menu_PrintText(gMenuText_HOFSaving, 3, 15);
- gTasks[taskID].func = sub_8142274;
-}
-
-static void sub_8142274(u8 taskID)
-{
- gGameContinueCallback = sub_8141FC4;
- Save_WriteData(3);
- PlaySE(SE_SAVE);
- gTasks[taskID].func = sub_81422B8;
- gTasks[taskID].tFrameCount = 32;
-}
-
-static void sub_81422B8(u8 taskID)
-{
- if (gTasks[taskID].tFrameCount)
- gTasks[taskID].tFrameCount--;
- else
- gTasks[taskID].func = sub_81422E8;
-}
-
-static void sub_81422E8(u8 taskID)
-{
- Text_LoadWindowTemplate(&gWindowTemplate_81E7198);
- InitMenuWindow(&gWindowTemplate_81E7198);
- gTasks[taskID].func = sub_8142320;
-}
-
-static void sub_8142320(u8 taskID)
-{
- u8 spriteID;
- s16 xPos, yPos, field4, field6;
-
- struct HallofFameMons* fameMons = eHallOfFameMons1;
- u16 currPokeID = gTasks[taskID].tDisplayedPoke;
- struct HallofFameMon* currMon = &fameMons->mons[currPokeID];
-
- if (gTasks[taskID].tPokesNumber > 3)
- {
- xPos = sHallOfFame_MonsFullTeamPositions[currPokeID][0];
- yPos = sHallOfFame_MonsFullTeamPositions[currPokeID][1];
- field4 = sHallOfFame_MonsFullTeamPositions[currPokeID][2];
- field6 = sHallOfFame_MonsFullTeamPositions[currPokeID][3];
- }
- else
- {
- xPos = sHallOfFame_MonsHalfTeamPositions[currPokeID][0];
- yPos = sHallOfFame_MonsHalfTeamPositions[currPokeID][1];
- field4 = sHallOfFame_MonsHalfTeamPositions[currPokeID][2];
- field6 = sHallOfFame_MonsHalfTeamPositions[currPokeID][3];
- }
-
- spriteID = HallOfFame_LoadPokemonPic(currMon->species, xPos, yPos, currPokeID, currMon->tid, currMon->personality);
- gSprites[spriteID].data[1] = field4;
- gSprites[spriteID].data[2] = field6;
- gSprites[spriteID].data[0] = 0;
- gSprites[spriteID].callback = sub_81435DC;
- gTasks[taskID].tMonSpriteID(currPokeID) = spriteID;
- Menu_EraseWindowRect(0, 14, 29, 19);
- gTasks[taskID].func = sub_8142404;
-}
-
-static void sub_8142404(u8 taskID)
-{
- struct HallofFameMons* fameMons = eHallOfFameMons1;
- u16 currPokeID = gTasks[taskID].tDisplayedPoke;
- struct HallofFameMon* currMon = &fameMons->mons[currPokeID];
-
- if (gSprites[gTasks[taskID].tMonSpriteID(currPokeID)].data[0] != 0)
- {
- if (currMon->species != SPECIES_EGG)
- PlayCry1(currMon->species, 0);
- HallOfFame_PrintMonInfo(currMon, 0, 14);
- gTasks[taskID].tFrameCount = 120;
- gTasks[taskID].func = sub_8142484;
- }
-}
-
-static void sub_8142484(u8 taskID)
-{
- struct HallofFameMons* fameMons = eHallOfFameMons1;
- u16 currPokeID = gTasks[taskID].tDisplayedPoke;
- struct HallofFameMon* currMon = &fameMons->mons[currPokeID];
-
- if (gTasks[taskID].tFrameCount != 0)
- gTasks[taskID].tFrameCount--;
- else
- {
- sUnknown_0203931C |= (0x10000 << gSprites[gTasks[taskID].tMonSpriteID(currPokeID)].oam.paletteNum);
- if (gTasks[taskID].tDisplayedPoke <= 4 && currMon[1].species != 0) // there is another pokemon to display
- {
- gTasks[taskID].tDisplayedPoke++;
- BeginNormalPaletteFade(sUnknown_0203931C, 0, 12, 12, 0x735F);
- gSprites[gTasks[taskID].tMonSpriteID(currPokeID)].oam.priority = 1;
- gTasks[taskID].func = sub_8142320;
- }
- else
- gTasks[taskID].func = sub_8142570;
- }
-}
-
-static void sub_8142570(u8 taskID)
-{
- u16 i;
-
- BeginNormalPaletteFade(0xFFFF0000, 0, 0, 0, 0);
- for (i = 0; i < 6; i++)
- {
- if (gTasks[taskID].tMonSpriteID(i) != 0xFF)
- gSprites[gTasks[taskID].tMonSpriteID(i)].oam.priority = 0;
- }
- Menu_EraseWindowRect(0, 14, 29, 19);
- sub_8143068(0, 15);
- PlaySE(SE_DENDOU);
- gTasks[taskID].tFrameCount = 400;
- gTasks[taskID].func = sub_8142618;
-}
-
-static void sub_8142618(u8 taskID)
-{
- if (gTasks[taskID].tFrameCount != 0)
- {
- gTasks[taskID].tFrameCount--;
- if ((gTasks[taskID].tFrameCount & 3) == 0 && gTasks[taskID].tFrameCount > 110)
- sub_81438C4();
- }
- else
- {
- u16 i;
- for (i = 0; i < 6; i++)
- {
- if (gTasks[taskID].tMonSpriteID(i) != 0xFF)
- gSprites[gTasks[taskID].tMonSpriteID(i)].oam.priority = 1;
- }
- BeginNormalPaletteFade(sUnknown_0203931C, 0, 12, 12, 0x735F);
- Menu_EraseWindowRect(0, 14, 29, 19);
- gTasks[taskID].tFrameCount = 7;
- gTasks[taskID].func = sub_81426F8;
- }
-}
-
-static void sub_81426F8(u8 taskID)
-{
- if (gTasks[taskID].tFrameCount >= 16)
- gTasks[taskID].func = sub_8142738;
- else
- {
- gTasks[taskID].tFrameCount++;
- REG_BLDALPHA = gTasks[taskID].tFrameCount * 256;
- }
-}
-
-static void sub_8142738(u8 taskID)
-{
- REG_DISPCNT = 0x1940;
- Text_LoadWindowTemplate(&gWindowTemplate_81E71B4);
- InitMenuWindow(&gWindowTemplate_81E71B4);
-
- gTasks[taskID].tPlayerSpriteID = HallOfFame_LoadTrainerPic(gSaveBlock2.playerGender, 120, 72, 6);
- gTasks[taskID].tFrameCount = 120;
- gTasks[taskID].func = sub_8142794;
-}
-
-static void sub_8142794(u8 taskID)
-{
- if (gTasks[taskID].tFrameCount != 0)
- gTasks[taskID].tFrameCount--;
- else
- {
- if (gSprites[gTasks[taskID].tPlayerSpriteID].pos1.x != 160)
- gSprites[gTasks[taskID].tPlayerSpriteID].pos1.x++;
- else
- {
- Menu_DrawStdWindowFrame(1, 2, 15, 9);
- HallOfFame_PrintPlayerInfo(1, 2);
- Menu_DrawStdWindowFrame(2, 14, 27, 19);
- Menu_PrintText(gMenuText_HOFCongratulations, 4, 15);
- gTasks[taskID].func = sub_8142818;
- }
- }
-}
-
-static void sub_8142818(u8 taskID)
-{
- if (gMain.newKeys & A_BUTTON)
- {
- FadeOutBGM(4);
- gTasks[taskID].func = sub_8142850;
- }
-}
-
-static void sub_8142850(u8 taskID)
-{
- CpuSet(gPlttBufferFaded, gPlttBufferUnfaded, 0x200);
- BeginNormalPaletteFade(-1, 8, 0, 0x10, 0);
- gTasks[taskID].func = sub_81428A0;
-}
-
-static void sub_81428A0(u8 taskID)
-{
- if (!gPaletteFade.active)
- {
- DestroyTask(taskID);
- SetMainCallback2(sub_81439D0);
- }
-}
-
-#undef tDisplayedPoke
-#undef tPokesNumber
-#undef tFrameCount
-#undef tPlayerSpriteID
-#undef tMonSpriteID
-
-void sub_81428CC(void)
-{
- switch (gMain.state)
- {
- case 0:
- default:
- SetVBlankCallback(NULL);
- sub_81433E0();
- gMain.state = 1;
- break;
- case 1:
- sub_8143570();
- gMain.state++;
- break;
- case 2:
- {
- u16 savedIme;
-
- SetVBlankCallback(VBlankCB_HallOfFame);
- savedIme = REG_IME;
- REG_IME = 0;
- REG_IE |= 1;
- REG_IME = savedIme;
- REG_DISPSTAT |= 8;
- gMain.state++;
- }
- break;
- case 3:
- REG_BLDCNT = 0;
- REG_BLDALPHA = 0;
- REG_BLDY = 0;
- sub_81435B8();
-
- eHOFPCScreenEffect = sPCScreenEffectTemplate;
-
- sub_80C5CD4(&eHOFPCScreenEffect);
- gMain.state++;
- break;
- case 4:
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
- if (sub_80C5DCC())
- gMain.state++;
- break;
- case 5:
- REG_BLDCNT = 0x3F42;
- REG_BLDALPHA = 0x710;
- REG_BLDY = 0;
- CreateTask(sub_8142A28, 0);
- SetMainCallback2(CB2_HallOfFame);
- break;
- }
-}
-
-#define tCurrTeamNo data[0]
-#define tCurrPageNo data[1]
-#define tCurrPokeID data[2]
-#define tPokesNo data[4]
-#define tMonSpriteID(i) data[i + 5]
-
-static void sub_8142A28(u8 taskID)
-{
- if (Save_LoadGameData(SAVE_HALL_OF_FAME) != SAVE_STATUS_OK)
- gTasks[taskID].func = sub_8142FEC;
- else
- {
- u16 *vram1, *vram2;
-
- u16 i;
- struct HallofFameMons* savedTeams = eHallOfFameMons2;
- for (i = 0; i < HALL_OF_FAME_MAX_TEAMS; i++, savedTeams++)
- {
- if (savedTeams->mons[0].species == 0)
- break;
- }
- if (i < HALL_OF_FAME_MAX_TEAMS)
- gTasks[taskID].tCurrTeamNo = i - 1;
- else
- gTasks[taskID].tCurrTeamNo = HALL_OF_FAME_MAX_TEAMS - 1;
- gTasks[taskID].tCurrPageNo = GetGameStat(10);
-
- for (i = 0, vram1 = (u16*)(VRAM + 0x381A), vram2 = (u16*)(VRAM + 0x385A); i <= 16; i++)
- {
- *(vram1 + i) = i + 3;
- *(vram2 + i) = i + 20;
- }
- Text_LoadWindowTemplate(&gWindowTemplate_81E7198);
- InitMenuWindow(&gWindowTemplate_81E7198);
- gTasks[taskID].func = sub_8142B04;
- }
-}
-
-static void sub_8142B04(u8 taskID)
-{
- struct HallofFameMons* savedTeams = eHallOfFameMons2;
- struct HallofFameMon* currMon;
- u16 i;
- u8* stringPtr;
-
- for (i = 0; i < gTasks[taskID].tCurrTeamNo; i++)
- savedTeams++;
-
- currMon = &savedTeams->mons[0];
- sUnknown_0203931C = 0;
- gTasks[taskID].tCurrPokeID = 0;
- gTasks[taskID].tPokesNo = 0;
-
- for (i = 0; i < 6; i++, currMon++)
- {
- if (currMon->species != 0)
- gTasks[taskID].tPokesNo++;
- }
-
- currMon = &savedTeams->mons[0];
-
- for (i = 0; i < 6; i++, currMon++)
- {
- if (currMon->species != 0)
- {
- u16 spriteID;
- s16 posX, posY;
- if (gTasks[taskID].tPokesNo > 3)
- {
- posX = sHallOfFame_MonsFullTeamPositions[i][2];
- posY = sHallOfFame_MonsFullTeamPositions[i][3];
- }
- else
- {
- posX = sHallOfFame_MonsHalfTeamPositions[i][2];
- posY = sHallOfFame_MonsHalfTeamPositions[i][3];
- }
- spriteID = HallOfFame_LoadPokemonPic(currMon->species, posX, posY, i, currMon->tid, currMon->personality);
- gSprites[spriteID].oam.priority = 1;
- gTasks[taskID].tMonSpriteID(i) = spriteID;
- }
- else
- gTasks[taskID].tMonSpriteID(i) = 0xFF;
- }
-
- BlendPalettes(0xFFFF0000, 0xC, 0x735F);
-
- stringPtr = gStringVar1;
- stringPtr = StringCopy(stringPtr, gMenuText_HOFNumber);
- stringPtr[0] = 0xFC;
- stringPtr[1] = 0x14;
- stringPtr[2] = 0x6;
- stringPtr += 3;
- stringPtr = ConvertIntToDecimalString(stringPtr, gTasks[taskID].tCurrPageNo);
- stringPtr[0] = 0xFC;
- stringPtr[1] = 0x13;
- stringPtr[2] = 0xF0;
- stringPtr[3] = EOS;
- Menu_PrintText(gStringVar1, 0, 0);
-
- gTasks[taskID].func = sub_8142CC8;
-}
-
-static void sub_8142CC8(u8 taskID)
-{
- struct HallofFameMons* savedTeams = eHallOfFameMons2;
- struct HallofFameMon* currMon;
- u16 i;
- u16 currMonID;
-
- for (i = 0; i < gTasks[taskID].tCurrTeamNo; i++)
- savedTeams++;
-
- for (i = 0; i < 6; i++)
- {
- u16 spriteID = gTasks[taskID].tMonSpriteID(i);
- if (spriteID != 0xFF)
- gSprites[spriteID].oam.priority = 1;
- }
-
- currMonID = gTasks[taskID].tMonSpriteID(gTasks[taskID].tCurrPokeID);
- gSprites[currMonID].oam.priority = 0;
- sUnknown_0203931C = (0x10000 << gSprites[currMonID].oam.paletteNum) ^ 0xFFFF0000;
- BlendPalettesUnfaded(sUnknown_0203931C, 0xC, 0x735F);
-
- currMon = &savedTeams->mons[gTasks[taskID].tCurrPokeID];
- if (currMon->species != SPECIES_EGG)
- {
- StopCryAndClearCrySongs();
- PlayCry1(currMon->species, 0);
- }
- HallOfFame_PrintMonInfo(currMon, 0, 14);
-
- gTasks[taskID].func = sub_8142DF4;
-}
-
-static void sub_8142DF4(u8 taskID)
-{
- u16 i;
- if (gMain.newKeys & A_BUTTON)
- {
- if (gTasks[taskID].tCurrTeamNo != 0) // prepare another team to view
- {
- gTasks[taskID].tCurrTeamNo--;
- for (i = 0; i < 6; i++)
- {
- u8 spriteID = gTasks[taskID].tMonSpriteID(i);
- if (spriteID != 0xFF)
- {
- FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[spriteID].oam.paletteNum));
- DestroySprite(&gSprites[spriteID]);
- }
- }
- if (gTasks[taskID].tCurrPageNo != 0)
- gTasks[taskID].tCurrPageNo--;
- gTasks[taskID].func = sub_8142B04;
- }
- else // no more teams to view, turn off hall of fame PC
- {
- if (IsCryPlayingOrClearCrySongs())
- {
- StopCryAndClearCrySongs();
- m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
- }
- gTasks[taskID].func = sub_8142F78;
- }
- }
- else if (gMain.newKeys & B_BUTTON) // turn off hall of fame PC
- {
- if (IsCryPlayingOrClearCrySongs())
- {
- StopCryAndClearCrySongs();
- m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
- }
- gTasks[taskID].func = sub_8142F78;
- }
- else if (gMain.newKeys & DPAD_UP && gTasks[taskID].tCurrPokeID != 0) // change poke -1
- {
- gTasks[taskID].tCurrPokeID--;
- gTasks[taskID].func = sub_8142CC8;
- }
- else if (gMain.newKeys & DPAD_DOWN && gTasks[taskID].tCurrPokeID < gTasks[taskID].tPokesNo - 1) // change poke +1
- {
- gTasks[taskID].tCurrPokeID++;
- gTasks[taskID].func = sub_8142CC8;
- }
-}
-
-static void sub_8142F78(u8 taskID)
-{
- CpuSet(gPlttBufferFaded, gPlttBufferUnfaded, 0x200);
- eHOFPCScreenEffect = sPCScreenEffectTemplate;
- sub_80C5E38(&eHOFPCScreenEffect);
- gTasks[taskID].func = sub_8142FCC;
-}
-
-static void sub_8142FCC(u8 taskID)
-{
- if (sub_80C5F98())
- {
- DestroyTask(taskID);
- ReturnFromHallOfFamePC();
- }
-}
-
-static void sub_8142FEC(u8 taskID)
-{
- Menu_DrawStdWindowFrame(2, 14, 27, 19);
- MenuPrintMessage(gMenuText_HOFCorrupt, 3, 15);
- gTasks[taskID].func = sub_814302C;
-}
-
-static void sub_814302C(u8 taskID)
-{
- if (Menu_UpdateWindowText() && gMain.newKeys & A_BUTTON)
- gTasks[taskID].func = sub_8142F78;
-}
-
-#undef tCurrTeamNo
-#undef tCurrPageNo
-#undef tCurrPokeID
-#undef tPokesNo
-#undef tMonSpriteID
-
-static void sub_8143068(u8 a0, u8 a1)
-{
- sub_8072BD8(gMenuText_WelcomeToHOFAndDexRating, 0, a1 + 1, 0xF0);
-}
-
-static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 a1, u8 a2)
-{
- u8* stringPtr;
- u16 monData;
- u16 i;
-
- stringPtr = gStringVar1;
- stringPtr[0] = EXT_CTRL_CODE_BEGIN;
- stringPtr[1] = 0x13;
- stringPtr[2] = 0x28;
- stringPtr[3] = EOS;
-
- if (currMon->species != SPECIES_EGG)
- {
- monData = SpeciesToPokedexNum(currMon->species);
- if (monData != 0xFFFF)
- {
- stringPtr = StringCopy(stringPtr, gOtherText_Number2);
- ConvertIntToDecimalStringN(stringPtr, monData, 2, 3);
- }
- }
-
- Menu_PrintText(gStringVar1, a1 + 4, a2 + 1);
- stringPtr = gStringVar1;
-
- for (i = 0; i < 10 && currMon->nick[i] != EOS; stringPtr[i] = currMon->nick[i], i++) {}
- stringPtr += i;
- stringPtr[0] = EOS;
-
- if (currMon->species == SPECIES_EGG)
- {
- stringPtr[0] = EXT_CTRL_CODE_BEGIN;
- stringPtr[1] = 0x13;
- stringPtr[2] = 0xA0;
- stringPtr[3] = EOS;
- Menu_PrintText(gStringVar1, a1 + 9, a2 + 1);
- Menu_EraseWindowRect(0, a2 + 3, 29, a2 + 4);
- }
- else
- {
-
- stringPtr[0] = EXT_CTRL_CODE_BEGIN;
- stringPtr[1] = 0x13;
- stringPtr[2] = 0x3E;
- stringPtr += 3;
-
- stringPtr[0] = CHAR_SLASH;
- stringPtr++;
-
- for (i = 0; i < 10 && gSpeciesNames[currMon->species][i] != EOS; stringPtr[i] = gSpeciesNames[currMon->species][i], i++) {}
-
- stringPtr += i;
- stringPtr[0] = CHAR_SPACE;
- stringPtr++;
-
- if (currMon->species != SPECIES_NIDORAN_M && currMon->species != SPECIES_NIDORAN_F)
- {
- switch (GetGenderFromSpeciesAndPersonality(currMon->species, currMon->personality))
- {
- case MON_MALE:
- stringPtr[0] = CHAR_MALE;
- stringPtr++;
- break;
- case MON_FEMALE:
- stringPtr[0] = CHAR_FEMALE;
- stringPtr++;
- break;
- }
- }
-
- stringPtr[0] = EXT_CTRL_CODE_BEGIN;
- stringPtr[1] = 0x13;
- stringPtr[2] = 0xA0;
- stringPtr[3] = EOS;
-
- Menu_PrintText(gStringVar1, a1 + 9, a2 + 1);
-
- monData = currMon->lvl;
-
- stringPtr = StringCopy(gStringVar1, gOtherText_Level3);
-
- stringPtr[0] = EXT_CTRL_CODE_BEGIN;
- stringPtr[1] = 0x14;
- stringPtr[2] = 6;
- stringPtr += 3;
-
- stringPtr = ConvertIntToDecimalStringN(stringPtr, monData, 0, 3);
-
- stringPtr[0] = EXT_CTRL_CODE_BEGIN;
- stringPtr[1] = 0x13;
- stringPtr[2] = 0x30;
- stringPtr[3] = EOS;
-
- Menu_PrintText(gStringVar1, a1 + 7, a2 + 3);
-
- monData = currMon->tid;
-
- stringPtr = StringCopy(gStringVar1, gOtherText_IDNumber);
- ConvertIntToDecimalStringN(stringPtr, monData, 2, 5);
-
- Menu_PrintText(gStringVar1, a1 + 13, a2 + 3);
- }
-}
-
-#define ByteRead16(ptr) ((ptr)[0] | ((ptr)[1] << 8))
-
-static void HallOfFame_PrintPlayerInfo(u8 a0, u8 a1)
-{
- u8* stringPtr;
- u16 visibleTid;
-
- Menu_PrintText(gOtherText_Name, a0 + 1, a1 + 1);
- MenuPrint_RightAligned(gSaveBlock2.playerName, a0 + 14, a1 + 1);
-
- Menu_PrintText(gOtherText_IDNumber2, a0 + 1, a1 + 3);
- visibleTid = ByteRead16(gSaveBlock2.playerTrainerId);
- ConvertIntToDecimalStringN(gStringVar1, visibleTid, 2, 5);
-
- MenuPrint_RightAligned(gStringVar1, a0 + 14, a1 + 3);
- Menu_PrintText(gMainMenuString_Time, a0 + 1, a1 + 5);
-
- stringPtr = ConvertIntToDecimalString(gStringVar1, gSaveBlock2.playTimeHours);
- stringPtr[0] = CHAR_SPACE;
- stringPtr[1] = CHAR_COLON;
- stringPtr[2] = CHAR_SPACE;
- stringPtr += 3;
-
- stringPtr = ConvertIntToDecimalStringN(stringPtr, gSaveBlock2.playTimeMinutes, 2, 2);
- stringPtr[0] = EOS;
-
- MenuPrint_RightAligned(gStringVar1, a0 + 14, a1 + 5);
-}
-
-static void sub_81433E0(void)
-{
- u16 i;
-
- REG_DISPCNT = 0;
-
- REG_BG0CNT = 0;
- REG_BG0HOFS = 0;
- REG_BG0VOFS = 0;
-
- REG_BG1CNT = 0;
- REG_BG1HOFS = 0;
- REG_BG1VOFS = 0;
-
- REG_BG2CNT = 0;
- REG_BG2HOFS = 0;
- REG_BG2VOFS = 0;
-
- REG_BG3CNT = 0;
- REG_BG3HOFS = 0;
- REG_BG3VOFS = 0;
-
- DmaFill16Large(3, 0, VRAM, 0x18000, 0x1000);
- DmaFill32Defvars(3, 0, OAM, OAM_SIZE);
- DmaFill16Defvars(3, 0, PLTT, PLTT_SIZE);
-
- LZ77UnCompVram(gHallOfFame_Gfx, (void*)(VRAM));
-
- for (i = 0; i < 64; i++)
- {
- *((u16*)(VRAM + 0x3800) + i) = 1;
- }
- for (i = 0; i < 192; i++)
- {
- *((u16*)(VRAM + 0x3B80) + i) = 1;
- }
- for (i = 0; i < 1024; i++)
- {
- *((u16*)(VRAM + 0x3000) + i) = 2;
- }
-
- DmaFill16Large(3, 0, ewram0_6, 0x4000, 0x1000);
- ResetPaletteFade();
- LoadPalette(gHallOfFame_Pal, 0, 0x20);
-}
-
-static void sub_8143570(void)
-{
- ScanlineEffect_Stop();
- ResetTasks();
- ResetSpriteData();
- FreeAllSpritePalettes();
- gReservedSpritePaletteCount = 8;
- LoadCompressedObjectPic(&sHallOfFame_ConfettiSpriteSheet);
- LoadCompressedObjectPalette(&sHallOfFame_ConfettiSpritePalette);
- Text_LoadWindowTemplate(&gWindowTemplate_81E71B4);
- InitMenuWindow(&gWindowTemplate_81E71B4);
-}
-
-static void sub_81435B8(void)
-{
- REG_BG1CNT = 0x700;
- REG_BG3CNT = 0x603;
- REG_DISPCNT = 0x1B40;
-}
-
-static void sub_81435DC(struct Sprite* sprite)
-{
- u32 spritePos = *(u32*)(&sprite->pos1);
- u32 dataPos = *(u32*)(&sprite->data[1]);
- if (spritePos != dataPos)
- {
- if (sprite->pos1.x < sprite->data[1])
- sprite->pos1.x += 15;
- if (sprite->pos1.x > sprite->data[1])
- sprite->pos1.x -= 15;
-
- if (sprite->pos1.y < sprite->data[2])
- sprite->pos1.y += 10;
- if (sprite->pos1.y > sprite->data[2])
- sprite->pos1.y -= 10;
- }
- else
- {
- sprite->data[0] = 1;
- sprite->callback = SpriteCB_HallOfFame_Dummy;
- }
-}
-
-static void SpriteCB_HallOfFame_Dummy(struct Sprite* sprite)
-{
-
-}
-
-void sub_8143648(u16 paletteTag, u8 animID)
-{
- gUnknown_02024E8C = sUnknown_0840B6B8;
- gUnknown_02024E8C.paletteTag = paletteTag;
- gUnknown_02024E8C.images = sUnknown_0840B69C[animID];
- gUnknown_02024E8C.anims = gSpriteAnimTable_81E7C64;
-}
-
-void sub_8143680(u16 paletteTag, u8 animID)
-{
- gUnknown_02024E8C = sUnknown_0840B6B8;
- gUnknown_02024E8C.paletteTag = paletteTag;
- gUnknown_02024E8C.images = sUnknown_0840B69C[animID];
- gUnknown_02024E8C.anims = gUnknown_081EC2A4[0];
-}
-
-static u32 HallOfFame_LoadPokemonPic(u16 species, s16 posX, s16 posY, u16 pokeID, u32 tid, u32 pid)
-{
- u8 spriteID;
- const u8* pokePal;
-
- LoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, 0x2000000, gUnknown_0840B5A0[pokeID], species, pid, 1);
-
- pokePal = GetMonSpritePalFromOtIdPersonality(species, tid, pid);
- LoadCompressedPalette(pokePal, 16 * pokeID + 256, 0x20);
-
- sub_8143648(pokeID, pokeID);
- spriteID = CreateSprite(&gUnknown_02024E8C, posX, posY, 10 - pokeID);
- gSprites[spriteID].oam.paletteNum = pokeID;
- return spriteID;
-}
-
-static u32 HallOfFame_LoadTrainerPic(u16 trainerPicID, s16 posX, s16 posY, u16 a3)
-{
- u8 spriteID;
-
- DecompressPicFromTable_2(&gTrainerFrontPicTable[trainerPicID], gTrainerFrontPicCoords[trainerPicID].coords, gTrainerFrontPicCoords[trainerPicID].y_offset, (void*) 0x2000000, gUnknown_0840B5A0[a3], trainerPicID);
-
- LoadCompressedPalette(gTrainerFrontPicPaletteTable[trainerPicID].data, 16 * a3 + 256, 0x20);
- sub_8143680(a3, a3);
-
- spriteID = CreateSprite(&gUnknown_02024E8C, posX, posY, 1);
- gSprites[spriteID].oam.paletteNum = a3;
-
- return spriteID;
-}
-
-static void sub_814386C(struct Sprite* sprite)
-{
- if (sprite->pos2.y > 120)
- DestroySprite(sprite);
- else
- {
- u16 rand;
- u8 tableID;
-
- sprite->pos2.y++;
- sprite->pos2.y += sprite->data[1];
-
- tableID = sprite->data[0];
- rand = (Random() % 4) + 8;
- sprite->pos2.x = rand * gSineTable[tableID] / 256;
-
- sprite->data[0] += 4;
- }
-}
-
-static bool8 sub_81438C4(void)
-{
- u8 spriteID;
- struct Sprite* sprite;
-
- s16 posX = Random() % 240;
- s16 posY = -(Random() % 8);
-
- spriteID = CreateSprite(&sSpriteTemplate_840B7A4, posX, posY, 0);
- sprite = &gSprites[spriteID];
-
- StartSpriteAnim(sprite, Random() % 17);
-
- if (Random() & 3)
- sprite->data[1] = 0;
- else
- sprite->data[1] = 1;
-
- return 0;
-}
diff --git a/src/scene/intro.c b/src/scene/intro.c
deleted file mode 100644
index 5c0e7a67d..000000000
--- a/src/scene/intro.c
+++ /dev/null
@@ -1,2810 +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 "random.h"
-#include "save.h"
-#include "constants/songs.h"
-#include "sound.h"
-#include "constants/species.h"
-#include "task.h"
-#include "title_screen.h"
-#include "trig.h"
-#include "scanline_effect.h"
-#include "ewram.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},
-};
-
-// Game Freak probably used the raw address here.
-// Treating this like a u8 * causes the compiler
-// to remove it at link time.
-const u32 unusedSharedMemPtr = (u32)gSharedMem;
-
-static void MainCB2_EndIntro(void);
-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);
- ScanlineEffect_Stop();
- 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();
- Save_ResetSaveCounters();
- Save_LoadGameData(SAVE_NORMAL);
- if (gSaveFileStatus == 0 || gSaveFileStatus == 2)
- ClearSav2();
- SetPokemonCryStereo(gSaveBlock2.optionsSound);
- }
-}
-
-void CB2_InitCopyrightScreenAfterTitleScreen(void)
-{
- SetUpCopyrightScreen();
-}
-
-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]].data[0] = 1;
-
- //drop rock
- if (gIntroFrameCounter == 251)
- gSprites[gTasks[taskId].data[0]].data[0] = 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]].data[0] = 1;
- if (gIntroFrameCounter == 1214)
- gSprites[gTasks[taskId].data[1]].data[0] = 0;
- if (gIntroFrameCounter == 1394)
- gSprites[gTasks[taskId].data[2]].data[0] = 1;
- if (gIntroFrameCounter == 1398)
- gSprites[gTasks[taskId].data[1]].data[0] = 2;
- if (gIntroFrameCounter == 1586)
- gSprites[gTasks[taskId].data[1]].data[0] = 3;
- if (gIntroFrameCounter == 1727)
- gSprites[gTasks[taskId].data[1]].data[0] = 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 gSharedMem[][32];
-
-static void Task_IntroLoadPart3Streaks(u8 taskId)
-{
- u16 i;
-
- intro_reset_and_hide_bgs();
- for (i = 0; i < 32; i++)
- {
- ewram0arr[0][i] = 0;
- ewram0arr[1][i] = 17;
- ewram0arr[2][i] = 34;
- }
- DmaCopy16Defvars(3, gSharedMem, (void *)(VRAM + 0x0), 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].data[1] = 1;
- gSprites[spriteId].data[2] = 0;
- }
- if (gIntroFrameCounter == 152)
- {
- spriteId = sub_813CE88(SPECIES_DUSKULL, 0, 0xA0, 4, 1);
- gSprites[spriteId].callback = sub_813DB9C;
- gSprites[spriteId].data[1] = 2;
- gSprites[spriteId].data[2] = 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]].data[0] = 2;
- }
- if (gIntroFrameCounter == 384)
- {
- gTasks[gTasks[taskId].data[15]].data[0] = 0;
- gSprites[gTasks[taskId].data[1]].data[0] = 4;
- }
- if (gIntroFrameCounter == 400)
- {
- BeginNormalPaletteFade(0xFF0000, 0, 0x10, 0, 0x7EFF);
- }
- if (gIntroFrameCounter == 432)
- {
- gSprites[gTasks[taskId].data[1]].data[0] = 5;
- }
- if (gIntroFrameCounter == 462)
- {
- gSprites[gTasks[taskId].data[1]].data[0] = 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]].data[0] = 2;
- gSprites[gTasks[taskId].data[3]].data[0] = 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]].data[0] = 2;
- gSprites[gTasks[taskId].data[5]].data[0] = 2;
- gTasks[gTasks[taskId].data[15]].data[0] = 0;
- }
- if (gIntroFrameCounter == 781)
- {
- sub_813D084(2);
- gSprites[gTasks[taskId].data[2]].data[0] = 3;
- gSprites[gTasks[taskId].data[3]].data[0] = 3;
- gSprites[gTasks[taskId].data[4]].data[0] = 3;
- gSprites[gTasks[taskId].data[5]].data[0] = 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;
-}
-
-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;
- break;
- case 1:
- if (gTasks[taskId].data[1] != 0)
- {
- u8 foo;
-
- gTasks[taskId].data[1]--;
- foo = gTasks[taskId].data[1] / 2;
- REG_BLDALPHA = gUnknown_08393E64[foo];
- }
- else
- {
- REG_BLDALPHA = gUnknown_08393E64[0];
- gTasks[taskId].data[1] = 0x80;
- gTasks[taskId].data[0]++;
- }
- break;
- 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]++;
- }
- break;
- case 3:
- if (gTasks[taskId].data[1] <= 0x3D)
- {
- u8 foo;
-
- gTasks[taskId].data[1]++;
- foo = gTasks[taskId].data[1] / 2;
- REG_BLDALPHA = gUnknown_08393E64[foo];
- }
- else
- {
- //_0813CDE0
- REG_BLDALPHA = gUnknown_08393E64[0x1F];
- gTasks[taskId].data[1] = 0x10;
- gTasks[taskId].data[0]++;
- }
- break;
- case 4:
- if (gTasks[taskId].data[1] != 0)
- {
- gTasks[taskId].data[1]--;
- }
- else
- {
- REG_BLDCNT = 0;
- REG_BLDALPHA = 0;
- REG_BLDY = 0;
- DestroyTask(taskId);
- }
- break;
- }
-}
-
-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 = GetMonSpritePalFromOtIdPersonality(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->data[2] >= 192)
- {
- if (sprite->data[3] != 0)
- {
- sprite->data[3]--;
- }
- else
- {
- sprite->invisible = FALSE;
- SetOamMatrix(sprite->data[1], sprite->data[2], 0, 0, sprite->data[2]);
- sprite->data[2] = (sprite->data[2] * 95) / 100;
- r0 = (sprite->data[2] - 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->data[7]].data[7] != 0)
- {
- sprite->invisible = TRUE;
- sprite->pos1.x += sprite->pos2.x;
- sprite->pos1.y += sprite->pos2.y;
- StartSpriteAnim(sprite, 3);
- sprite->data[2] = 1024;
- sprite->data[3] = 8 * (sprite->data[1] & 3);
- sprite->callback = sub_813D0CC;
- sprite->oam.shape = 1;
- sprite->oam.size = 3;
- CalcCenterToCornerVec(sprite, 1, 3, 2);
- }
- else
- {
- sprite->pos2.x = gSprites[sprite->data[7]].pos2.x;
- sprite->pos2.y = gSprites[sprite->data[7]].pos2.y;
- sprite->pos1.x = gSprites[sprite->data[7]].pos1.x;
- sprite->pos1.y = gSprites[sprite->data[7]].pos1.y;
- }
-}
-
-static void sub_813D208(struct Sprite *sprite)
-{
- if (sprite->data[0] != 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->data[4] = 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->data[4];
- sin1 = gSineTable[(u8)data4];
- sin2 = gSineTable[(u8)(data4 + 64)];
- sprite->data[4] += 2;
- sprite->pos2.y = sin1 / 32;
- sprite->pos1.x--;
- if (sprite->pos1.x & 1)
- sprite->pos1.y++;
- temp = -sin2 / 16;
- data2 = sprite->data[2];
- data3 = sprite->data[3];
- 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->data[1], data2, 0, 0, data3);
- SetOamMatrix(sprite->data[1] + 1, var1, var3, var2, var4);
- SetOamMatrix(sprite->data[1] + 2, var1, var3, var2 * 2, var4 * 2);
- }
-}
-
-static void sub_813D368(struct Sprite *sprite)
-{
- SetOamMatrix(sprite->data[1], sprite->data[6] + 64, 0, 0, sprite->data[6] + 64);
- SetOamMatrix(sprite->data[1] + 1, sprite->data[6] + 64, 0, 0, sprite->data[6] + 64);
- SetOamMatrix(sprite->data[1] + 2, sprite->data[6] + 64, 0, 0, sprite->data[6] + 64);
- if (sprite->data[4] != 64)
- {
- u16 data4;
-
- sprite->data[4] -= 8;
- data4 = sprite->data[4];
- sprite->pos2.x = gSineTable[(u8)(data4 + 64)] / 64;
- sprite->pos2.y = gSineTable[(u8)data4] / 64;
- }
- else
- {
- sprite->data[4] = 0;
- sprite->callback = sub_813D414;
- }
-}
-
-static void sub_813D414(struct Sprite *sprite)
-{
- if (sprite->data[0] != 2)
- {
- s16 r2;
-
- sprite->data[4] += 8;
- r2 = gSineTable[(u8)sprite->data[4]] / 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->data[5])
- {
- sprite->pos1.y += 4;
- }
- else
- {
- sprite->data[7] = 1;
- sprite->invisible = TRUE;
- sprite->pos1.x += sprite->pos2.x;
- sprite->pos1.y += sprite->pos2.y;
- StartSpriteAnim(sprite, 3);
- sprite->data[2] = 1024;
- sprite->data[3] = 8 * (sprite->data[1] & 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->data[5])
- {
- sprite->pos1.y += 4;
- }
- else
- {
- sprite->data[7] = 1;
- sprite->invisible = TRUE;
- sprite->pos1.x += sprite->pos2.x;
- sprite->pos1.y += sprite->pos2.y;
- StartSpriteAnim(sprite, 3);
- sprite->data[2] = 1024;
- sprite->data[3] = 8 * (sprite->data[1] & 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].data[0] = 0;
- gSprites[spriteId].data[7] = 0;
- gSprites[spriteId].data[1] = d;
- gSprites[spriteId].data[2] = c;
- gSprites[spriteId].data[3] = c;
- gSprites[spriteId].data[5] = e;
- gSprites[spriteId].data[6] = 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].data[7] = oldSpriteId;
- gSprites[spriteId].data[1] = 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].data[7] = oldSpriteId;
- gSprites[spriteId].data[1] = 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->data[0])
- {
- 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->data[0])
- {
- case 0:
- break;
- case 1:
- if (sprite->pos2.x + sprite->pos1.x < 304)
- sprite->pos2.x += 8;
- else
- sprite->data[0] = 2;
- break;
- case 2:
- if (sprite->pos2.x + sprite->pos1.x > 120)
- sprite->pos2.x -= 1;
- else
- sprite->data[0] = 3;
- break;
- case 3:
- if (sprite->pos2.x > 0)
- sprite->pos2.x -= 2;
- break;
- }
- sprite->pos2.y = Sin((u8)sprite->data[1], 8) - gUnknown_0203935A;
- sprite->data[1] += 4;
-}
-
-static void sub_813D908(struct Sprite *sprite)
-{
- if (gTasks[sprite->data[0]].data[0] == 0)
- {
- sprite->invisible = TRUE;
- }
- else if (gTasks[sprite->data[0]].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].data[0] = 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].data[0] = c;
- StartSpriteAnim(&gSprites[spriteId], gUnknown_0840AF74[i][0]);
- }
- spriteId = CreateSprite(&gSpriteTemplate_840AFC4, 120, b - 4, 0);
- gSprites[spriteId].data[0] = c;
-
- return spriteId;
-}
-
-static void sub_813DA64(struct Sprite *sprite)
-{
- sprite->data[7]++;
-
- switch (sprite->data[0])
- {
- case 0:
- default:
- sprite->oam.affineMode = 3;
- sprite->oam.matrixNum = 1;
- CalcCenterToCornerVec(sprite, 1, 3, 3);
- sprite->invisible = FALSE;
- sprite->data[0] = 1;
- sprite->data[1] = 128;
- sprite->data[2] = -24;
- sprite->data[3] = 0;
- break;
- case 1:
- {
- s16 sin;
- s16 cos;
- s16 a;
- s16 b;
- s16 c;
- s16 d;
-
- if (sprite->data[3] < 0x50)
- {
- sprite->pos2.y = -Sin((u8)sprite->data[3], 0x78);
- sprite->pos2.x = -Sin((u8)sprite->data[3], 0x8C);
- if (sprite->data[3] > 64)
- sprite->oam.priority = 3;
- }
- sin = gSineTable[(u8)sprite->data[2]];
- cos = gSineTable[(u8)(sprite->data[2] + 64)];
- d = cos * sprite->data[1] / 256;
- c = -sin * sprite->data[1] / 256;
- b = sin * sprite->data[1] / 256;
- a = cos * sprite->data[1] / 256;
-
- SetOamMatrix(1, a, b, c, d);
-
- if (sprite->data[1] < 0x100)
- sprite->data[1] += 8;
- else
- sprite->data[1] += 32;
- if (sprite->data[2] < 0x18)
- sprite->data[2] += 1;
- if (sprite->data[3] < 64)
- sprite->data[3] += 2;
- else if (!(sprite->data[7] & 3))
- sprite->data[3] += 1;
- break;
- }
- }
-}
-
-static void sub_813DB9C(struct Sprite *sprite)
-{
- switch (sprite->data[0])
- {
- case 0:
- default:
- if (sprite->data[2] != 0)
- sprite->hFlip = TRUE;
- else
- sprite->hFlip = FALSE;
- sprite->data[0] = 1;
- //fall through
- case 1:
- if (sprite->pos1.y > 96)
- {
- sprite->pos1.y -= 4;
- if (sprite->data[2] != 0)
- sprite->pos1.x += 2;
- else
- sprite->pos1.x -= 2;
- }
- else
- {
- sprite->data[0]++;
- sprite->data[3] = 8;
- }
- break;
- case 2:
- if (sprite->data[3] != 0)
- {
- sprite->data[3]--;
- }
- else
- {
- sprite->data[0]++;
- sprite->data[3] = 0; //redundant?
- }
- break;
- case 3:
- sprite->oam.affineMode = 3;
- sprite->oam.matrixNum = sprite->data[1];
- CalcCenterToCornerVec(sprite, 0, 3, 3);
- if (sprite->data[2] != 0)
- SetOamMatrix(sprite->data[1], -256, 0, 0, 256);
- else
- SetOamMatrix(sprite->data[1], 256, 0, 0, 256);
- sprite->data[0]++;
- sprite->data[4] = 0;
- break;
- case 4:
- sprite->data[4]++;
- if (sprite->pos1.y + sprite->pos2.y > -32
- && sprite->pos1.x + sprite->pos2.x > -64)
- {
- u16 r2;
-
- sprite->pos2.y = -(sprite->data[4] * sprite->data[4]) / 8;
- if (sprite->data[2] != 0)
- sprite->pos2.x += sprite->data[4];
- else
- sprite->pos2.x -= sprite->data[4];
- if (sprite->data[3] < 128)
- sprite->data[3] += 8;
- r2 = 256 - sprite->data[3];
- if (sprite->data[2] != 0)
- SetOamMatrix(sprite->data[1], -r2, 0, 0, r2);
- else
- SetOamMatrix(sprite->data[1], r2, 0, 0, r2);
- }
- else
- {
- DestroySprite(sprite);
- }
- }
-}
-
-static void sub_813DD58(struct Sprite *sprite)
-{
- switch (sprite->data[0])
- {
- case 0:
- default:
- sprite->invisible = FALSE;
- sprite->oam.affineMode = 1;
- sprite->oam.matrixNum = sprite->data[1];
- sprite->data[3] = 2048;
- sprite->data[0] = 1;
- //fall through
- case 1:
- if (sprite->data[3] > 256)
- {
- sprite->data[3] -= 128;
- if (sprite->data[2] != 0)
- SetOamMatrix(sprite->data[1], -sprite->data[3], 0, 0, sprite->data[3]);
- else
- SetOamMatrix(sprite->data[1], sprite->data[3], 0, 0, sprite->data[3]);
- }
- else
- {
- if (sprite->data[2] != 0)
- SetOamMatrix(sprite->data[1], -256, 0, 0, 256);
- else
- SetOamMatrix(sprite->data[1], 256, 0, 0, 256);
- sprite->data[0]++;
- }
- break;
- case 2:
- break;
- case 3:
- sprite->data[4]++;
- sprite->pos2.y = sprite->data[4] * sprite->data[4] / 32;
- if (sprite->data[2] != 0)
- sprite->pos2.x = sprite->data[4] / 4;
- else
- sprite->pos2.x = -(sprite->data[4] / 4);
- break;
- }
-}
-
-static void sub_813DE70(struct Sprite *sprite)
-{
- switch (sprite->data[0])
- {
- case 0:
- default:
- if (sprite->pos1.x > 40)
- {
- sprite->pos1.x -= 4;
- }
- else
- {
- StartSpriteAnim(sprite, 1);
- sprite->data[6] = CreateSprite(&gSpriteTemplate_840B084, 16, 104, 100);
- sprite->data[7] = CreateSprite(&gSpriteTemplate_840B084, 12, 106, 101);
- sprite->data[0] = 1;
- }
- break;
- case 1:
- break;
- case 2:
- StartSpriteAnim(sprite, 2);
- gSprites[sprite->data[6]].data[0] = 1;
- gSprites[sprite->data[7]].data[0] = 2;
- sprite->data[0]++;
- break;
- case 3:
- if (sprite->pos1.y > 160)
- {
- sprite->invisible = 1;
- sprite->data[0] = 1;
- }
- else
- {
- sprite->pos1.y += 2;
- sprite->pos1.x--;
- }
- break;
- case 4:
- {
- s16 r4, r5;
-
- r5 = gSprites[sprite->data[6]].pos1.x + gSprites[sprite->data[6]].pos2.x;
- r4 = gSprites[sprite->data[6]].pos1.y + gSprites[sprite->data[6]].pos2.y;
- DestroySprite(&gSprites[sprite->data[6]]);
- sprite->data[6] = sub_813CE88(SPECIES_TORCHIC, r5, r4, 2, 1);
- gSprites[sprite->data[6]].callback = sub_813DD58;
- gSprites[sprite->data[6]].invisible = TRUE;
- gSprites[sprite->data[6]].data[1] = 1;
- gSprites[sprite->data[6]].data[2] = 1;
- sub_813E580(r5, r4);
-
- r5 = gSprites[sprite->data[7]].pos1.x + gSprites[sprite->data[7]].pos2.x;
- r4 = gSprites[sprite->data[7]].pos1.y + gSprites[sprite->data[7]].pos2.y;
- DestroySprite(&gSprites[sprite->data[7]]);
- sprite->data[7] = sub_813CE88(SPECIES_MUDKIP, r5, r4, 3, 1);
- gSprites[sprite->data[7]].callback = sub_813DD58;
- gSprites[sprite->data[7]].invisible = TRUE;
- gSprites[sprite->data[7]].data[1] = 2;
- gSprites[sprite->data[7]].data[2] = 0;
- sub_813E580(r5, r4);
-
- BeginNormalPaletteFade(0xFF0000, 0, 16, 16, RGB(31, 23, 31));
- sprite->data[0] = 1;
- break;
- }
- case 5:
- gSprites[sprite->data[6]].data[0] = 3;
- gSprites[sprite->data[7]].data[0] = 3;
- break;
- case 6:
- DestroySprite(&gSprites[sprite->data[6]]);
- DestroySprite(&gSprites[sprite->data[7]]);
- DestroySprite(sprite);
- break;
- }
-}
-
-static void sub_813E10C(struct Sprite *sprite)
-{
- switch (sprite->data[0])
- {
- case 0:
- default:
- if (sprite->pos2.x > -56)
- {
- sprite->pos2.x -= 8;
- sprite->pos2.y += 6;
- }
- else
- {
- sprite->data[6] = sprite->pos1.x;
- sprite->data[7] = sprite->pos1.y;
- sprite->pos1.x += sprite->pos2.x;
- sprite->pos1.y += sprite->pos2.y;
- sprite->pos2.x = 0;
- sprite->pos2.y = 0;
- sprite->data[0] = 1;
- sprite->data[1] = 0;
- }
- break;
- case 1:
- if (!(sprite->data[1] & 1))
- {
- if (sprite->data[1] & 2)
- {
- sprite->pos2.x = -1;
- sprite->pos2.y = 1;
- }
- else
- {
- sprite->pos2.x = 0;
- sprite->pos2.y = 0;
- }
- }
- sprite->data[1]++;
- break;
- case 2:
- sprite->invisible = TRUE;
- sprite->pos1.x = sprite->data[6];
- sprite->pos1.y = sprite->data[7];
- sprite->pos2.x = 0;
- sprite->pos2.y = 0;
- break;
- case 3:
- sprite->invisible = FALSE;
- sprite->data[1]++;
- //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->data[0] = 1;
- }
- break;
- }
-}
-
-static void sub_813E210(struct Sprite *sprite)
-{
- switch (sprite->data[0])
- {
- case 0:
- default:
- if (sprite->pos2.x < 56)
- {
- sprite->pos2.x += 8;
- sprite->pos2.y -= 6;
- }
- else
- {
- sprite->data[6] = sprite->pos1.x;
- sprite->data[7] = sprite->pos1.y;
- sprite->pos1.x += sprite->pos2.x;
- sprite->pos1.y += sprite->pos2.y;
- sprite->pos2.x = 0;
- sprite->pos2.y = 0;
- sprite->data[0] = 1;
- sprite->data[1] = 0;
- }
- break;
- case 1:
- if (!(sprite->data[1] & 1))
- {
- if (sprite->data[1] & 2)
- {
- sprite->pos2.x = 1;
- sprite->pos2.y = -1;
- }
- else
- {
- sprite->pos2.x = 0;
- sprite->pos2.y = 0;
- }
- }
- sprite->data[1]++;
- break;
- case 2:
- sprite->invisible = TRUE;
- sprite->pos1.x = sprite->data[6];
- sprite->pos1.y = sprite->data[7];
- sprite->pos2.x = 0;
- sprite->pos2.y = 0;
- break;
- case 3:
- sprite->invisible = FALSE;
- sprite->data[1]++;
- //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->data[0] = 1;
- }
- break;
- }
-}
-
-static void sub_813E30C(struct Sprite *sprite)
-{
- u16 r4, r1;
-
- sprite->data[7]++;
- switch (sprite->data[0])
- {
- case 0:
- default:
- break;
- case 1:
- sprite->oam.affineMode = 1;
- sprite->oam.matrixNum = 1;
- sprite->data[0] = 10;
- sprite->data[4] = 36;
- //fall through
- case 10:
- if (sprite->pos1.x <= 144)
- {
- sprite->pos1.x += 4;
- sprite->pos1.y -= 1;
- sprite->pos2.y = -Sin((u8)sprite->data[2], 24);
- sprite->data[2] += 4;
- }
- sprite->data[3] -= sprite->data[4];
- if ((sprite->data[7] & 1) && sprite->data[4] != 0)
- sprite->data[4]--;
- r4 = gSineTable[(u8)sprite->data[3]];
- r1 = gSineTable[(u8)(sprite->data[3] + 64)];
- SetOamMatrix(1, r1, r4, -r4, r1);
- break;
- case 2:
- sprite->oam.affineMode = 1;
- sprite->oam.matrixNum = 2;
- sprite->data[0] = 20;
- sprite->data[4] = 36;
- //fall through
- case 20:
- if (sprite->pos1.x <= 96)
- {
- sprite->pos1.x += 3;
- sprite->pos1.y -= 1;
- sprite->pos2.y = -Sin((u8)sprite->data[2], 24);
- sprite->data[2] += 4;
- }
- sprite->data[3] -= sprite->data[4];
- if ((sprite->data[7] & 1) && sprite->data[4] != 0)
- sprite->data[4]--;
- r4 = gSineTable[(u8)sprite->data[3]];
- r1 = gSineTable[(u8)(sprite->data[3] + 64)];
- SetOamMatrix(2, r1, r4, -r4, r1);
- break;
- }
-}
-
-static void sub_813E4B8(struct Sprite *sprite)
-{
- u16 r4;
- u16 r2;
- u16 r1;
-
- sprite->data[7]++;
- if (sprite->data[7] & 1)
- sprite->invisible = FALSE;
- else
- sprite->invisible = TRUE;
- if (sprite->data[2] >= 64)
- {
- DestroySprite(sprite);
- return;
- }
- sprite->data[2] += 2;
- r4 = Sin((u8)sprite->data[2], 40);
- sprite->pos2.x = Cos((u8)(sprite->data[0] * 32), r4);
- sprite->pos2.y = Sin((u8)(sprite->data[0] * 32), r4);
- if (sprite->data[0] == 0)
- {
- sprite->data[3] -= sprite->data[1];
- if ((sprite->data[7] & 1) && sprite->data[1] != 0)
- sprite->data[1]--;
- r2 = gSineTable[(u8)sprite->data[3]];
- r1 = gSineTable[(u8)(sprite->data[3] + 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].data[0] = i;
- gSprites[spriteId].data[1] = 32;
- }
-}
-
-static void sub_813E5E0(struct Sprite *sprite)
-{
- if (gUnknown_0203931A != 0)
- {
- DestroySprite(sprite);
- }
- else
- {
- sprite->invisible = gSprites[sprite->data[0]].invisible;
- if (sprite->data[7] < 12)
- sprite->data[7]++;
- sprite->data[6] += 4;
- sprite->pos1.x = sprite->data[4] + gSineTable[(u8)(sprite->data[3] + 64)] * sprite->data[6] / 256;
- //This useless '+ 0' is needed to make the asm match
- sprite->pos1.y = sprite->data[5] + gSineTable[(u8)(sprite->data[3] + 0)] * sprite->data[6] / 256;
- sprite->pos2.y = gSineTable[(u8)(sprite->data[1] + 0)] * sprite->data[7] / 256;
- sprite->data[1] += 16;
- if (sprite->pos1.y > sprite->data[2])
- 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->data[7]++;
- sprite->invisible = TRUE;
- if (gSprites[sprite->data[0]].data[0] == 1 && !(sprite->data[7] & 3))
- {
- var1 = sprite->data[1] + gSprites[sprite->data[0]].pos1.x;
- var2 = sprite->data[2] + gSprites[sprite->data[0]].pos1.y;
- for (i = 0; i < 3; i++)
- {
- u8 r3 = gSprites[sprite->data[0]].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].data[0] = sprite->data[0];
- gSprites[spriteId].data[1] = (((sprite->data[7] >> 2) & 7) << 5) + i * 85;
- gSprites[spriteId].data[2] = sprite->data[3];
- gSprites[spriteId].data[3] = 104;
- gSprites[spriteId].data[4] = var1;
- gSprites[spriteId].data[5] = var2;
- gSprites[spriteId].data[6] = 0;
- }
- }
- }
- }
-}
-
-static void sub_813E7C0(u8 a)
-{
- u8 spriteId;
-
- spriteId = CreateSprite(&gSpriteTemplate_840B0F4, 0, 0, 0);
- if (spriteId != 64)
- {
- gSprites[spriteId].data[0] = a;
- gSprites[spriteId].data[1] = -12;
- gSprites[spriteId].data[2] = 0;
- gSprites[spriteId].data[3] = 136;
- }
-}
-
-static void sub_813E804(struct Sprite *sprite)
-{
- if (gUnknown_0203931A != 0)
- {
- DestroySprite(sprite);
- }
- else
- {
- sprite->invisible = gSprites[sprite->data[0]].invisible;
- sprite->data[7]++;
- if (sprite->data[3] < 40)
- sprite->data[3] += 2;
- //This useless '+ 0' is needed to make the asm match
- sprite->pos1.x = gSprites[sprite->data[0]].pos1.x + gSprites[sprite->data[0]].pos2.x + gSineTable[(u8)(sprite->data[1] + 64)] * sprite->data[3] / 256;
- sprite->pos1.y = gSprites[sprite->data[0]].pos1.y + gSprites[sprite->data[0]].pos2.y + gSineTable[(u8)(sprite->data[1] + 0)] * sprite->data[3] / 512;
- sprite->data[1] += 2;
- sprite->pos2.y = gSineTable[(u8)(sprite->data[2] + 0)] / 32;
- sprite->data[2] += 8;
- if ((sprite->data[1] & 0xFF) < 128)
- sprite->subpriority = gSprites[sprite->data[0]].subpriority - 1;
- else
- sprite->subpriority = gSprites[sprite->data[0]].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].data[0] = a;
- gSprites[spriteId].data[1] = i * 32;
- }
- }
-}
-
-static void sub_813E980(struct Sprite *sprite)
-{
- if (gUnknown_0203931A != 0)
- {
- DestroySprite(sprite);
- }
- else
- {
- u8 r0;
- u16 matrixNum;
-
- sprite->invisible = gSprites[sprite->data[0]].invisible;
- sprite->data[7]++;
- sprite->data[6] += 8;
- sprite->pos1.x = sprite->data[4] + gSineTable[(u8)(sprite->data[3] + 64)] * sprite->data[6] / 256;
- sprite->pos1.y = sprite->data[5] + gSineTable[(u8)(sprite->data[3] + 0)] * sprite->data[6] / 256;
- r0 = sprite->data[6] / 16;
- if (r0 > 9)
- r0 = 9;
- matrixNum = (r0 + 18) & 31;
- sprite->oam.matrixNum = matrixNum;
- if (sprite->data[6] > 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->data[7]++;
- sprite->invisible = TRUE;
- if (gSprites[sprite->data[0]].data[0] == 1)
- {
- r6 = (sprite->data[7] & 1);
- if (!r6)
- {
- r1 = sprite->data[1] + gSprites[sprite->data[0]].pos1.x;
- r2 = sprite->data[2] + gSprites[sprite->data[0]].pos1.y;
- spriteId = CreateSprite(&gSpriteTemplate_840B150, r1, r2, gSprites[sprite->data[0]].subpriority + 1);
- if (spriteId != 64)
- {
- gSprites[spriteId].oam.affineMode = 3;
- gSprites[spriteId].oam.matrixNum = 18;
- CalcCenterToCornerVec(&gSprites[spriteId], 0, 1, 3);
- gSprites[spriteId].data[0] = sprite->data[0];
- gSprites[spriteId].data[3] = gUnknown_0840B168[(sprite->data[7] >> 1) & 7];
- gSprites[spriteId].data[4] = r1;
- gSprites[spriteId].data[5] = r2;
- gSprites[spriteId].data[6] = r6;
- }
- }
- }
- }
-}
-
-static void InitIntroTorchicAttackAnim(u8 a)
-{
- u8 spriteId;
- u8 i;
-
- spriteId = CreateSprite(&gSpriteTemplate_840B170, 0, 0, 0);
- if (spriteId != 64)
- {
- gSprites[spriteId].data[0] = a;
- gSprites[spriteId].data[1] = 0;
- gSprites[spriteId].data[2] = 8;
- gSprites[spriteId].data[3] = 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->data[0]].invisible;
- sprite->data[7] += 1;
- sprite->data[6] += 8;
- sprite->pos1.x = sprite->data[4] + gSineTable[(u8)(sprite->data[3] + 64)] * sprite->data[6] / 256;
- sprite->pos1.y = sprite->data[5] + gSineTable[(u8)(sprite->data[3] + 0)] * sprite->data[6] / 256;
- sprite->pos2.y = gSineTable[(u8)(sprite->data[1] + 0)] / 64;
- sprite->data[1] += 16;
- if (sprite->pos1.y < sprite->data[2])
- 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->data[7]++;
- sprite->invisible = TRUE;
- if (gSprites[sprite->data[0]].data[0] == 1)
- {
- r6 = sprite->data[7] & 1;
- if (!r6)
- {
- r1 = sprite->data[1] + gSprites[sprite->data[0]].pos1.x;
- r2 = sprite->data[2] + gSprites[sprite->data[0]].pos1.y;
- spriteId = CreateSprite(&gSpriteTemplate_840B1B0, r1, r2, gSprites[sprite->data[0]].subpriority + 1);
- if (spriteId != 64)
- {
- gSprites[spriteId].oam.affineMode = 3;
- gSprites[spriteId].oam.matrixNum = 17;
- CalcCenterToCornerVec(&gSprites[spriteId], 0, 1, 3);
- gSprites[spriteId].data[0] = sprite->data[0];
- gSprites[spriteId].data[1] = ((sprite->data[7] >> 2) & 7) << 5;
- gSprites[spriteId].data[2] = sprite->data[3];
- gSprites[spriteId].data[3] = 232;
- gSprites[spriteId].data[4] = r1;
- gSprites[spriteId].data[5] = r2;
- gSprites[spriteId].data[6] = r6;
- }
- }
- if (sprite->data[6] < 112)
- sprite->data[6] += 4;
- }
- foo = 256 - gSineTable[(u8)sprite->data[6]] / 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].data[0] = a;
- gSprites[spriteId].data[1] = 0;
- gSprites[spriteId].data[2] = 12;
- gSprites[spriteId].data[3] = 24;
- }
-}
-
-static void sub_813EDFC(struct Sprite *sprite)
-{
- u16 foo;
-
- //I'm not sure why a switch statement was used here.
- //if (sprite->data[0] != 1) would have been more appropriate.
- switch (sprite->data[0])
- {
- case 0:
- default:
- sprite->invisible = FALSE;
- sprite->oam.affineMode = 3;
- sprite->oam.matrixNum = 18;
- CalcCenterToCornerVec(sprite, 0, 3, 3);
- sprite->data[1] = 0;
- sprite->data[0] = 1;
- //fall through
- case 1:
- break;
- }
- sprite->data[7]++;
- if (sprite->data[7] & 1)
- {
- sprite->invisible = TRUE;
- }
- else
- {
- sprite->invisible = FALSE;
- if (sprite->data[1] < 64)
- sprite->data[1]++;
- }
- foo = 256 - gSineTable[(u8)sprite->data[1]] / 2;
- SetOamMatrix(18, foo, 0, 0, foo);
-}
diff --git a/src/scene/intro_credits_graphics.c b/src/scene/intro_credits_graphics.c
deleted file mode 100644
index 6aadafc58..000000000
--- a/src/scene/intro_credits_graphics.c
+++ /dev/null
@@ -1,645 +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 "random.h"
-#include "save.h"
-#include "constants/songs.h"
-#include "sound.h"
-#include "constants/species.h"
-#include "task.h"
-#include "title_screen.h"
-#include "trig.h"
-#include "scanline_effect.h"
-
-// define register constants for the inline asm
-asm(".include \"constants/gba_constants.inc\"\n");
-
-struct IntroCreditsSpriteMetadata
-{
- u8 animNum:4;
- u8 shape:2;
- u8 size:2;
- u8 x;
- u8 y;
- u8 subpriority;
- u16 xOff;
-};
-
-const u16 gUnknown_084121FC[] = INCBIN_U16("graphics/intro/intro2_grass.gbapal");
-const u16 gUnknown_0841221C[] = INCBIN_U16("graphics/intro/intro2_grass_afternoon.gbapal");
-const u16 gUnknown_0841223C[] = INCBIN_U16("graphics/intro/intro2_grass_night.gbapal");
-const u8 gUnknown_0841225C[] = INCBIN_U8("graphics/intro/intro2_grass.4bpp.lz");
-const u8 gUnknown_084126DC[] = INCBIN_U8("graphics/intro/intro2_grass_map.bin.lz");
-const u16 gUnknown_08412818[] = INCBIN_U16("graphics/intro/8412818.gbapal");
-const u16 gUnknown_08412878[] = INCBIN_U16("graphics/intro/8412878.gbapal");
-const u8 gUnknown_084128D8[] = INCBIN_U8("graphics/intro/intro2_bgclouds.4bpp.lz");
-const u8 gUnknown_08412EB4[] = INCBIN_U8("graphics/intro/intro2_bgclouds_map.bin.lz");
-const u16 gUnknown_08413184[] = INCBIN_U16("graphics/intro/intro2_bgclouds.gbapal");
-const u16 gUnknown_084131A4[] = INCBIN_U16("graphics/intro/intro2_bgclouds_afternoon.gbapal");
-const u8 gUnknown_084131C4[] = INCBIN_U8("graphics/intro/intro2_bgclouds2.4bpp.lz");
-const u16 gUnknown_08413300[] = INCBIN_U16("graphics/intro/intro2_bgtrees2.gbapal");
-const u16 gUnknown_08413320[] = INCBIN_U16("graphics/intro/intro2_bgtrees2_afternoon.gbapal");
-const u8 gUnknown_08413340[] = INCBIN_U8("graphics/intro/intro2_bgtrees.4bpp.lz");
-const u8 gUnknown_084139C8[] = INCBIN_U8("graphics/intro/intro2_bgtrees_map.bin.lz");
-const u16 gUnknown_08413CCC[] = INCBIN_U16("graphics/intro/intro2_bgtrees.gbapal");
-const u8 gIntro2TreeTiles[] = INCBIN_U8("graphics/intro/intro2_bgtreessmall.4bpp.lz");
-const u16 gUnknown_08413E38[] = INCBIN_U16("graphics/intro/8413E38.gbapal");
-const u8 gUnknown_08413E78[] = INCBIN_U8("graphics/intro/intro2_bgnight.4bpp.lz"); // only used in credits, coupled with intro because bicycle sequence
-const u16 gUnknown_08414064[] = INCBIN_U16("graphics/intro/intro2_bgnight.gbapal");
-const u8 gUnknown_08414084[] = INCBIN_U8("graphics/intro/intro2_bgnight_map.bin.lz");
-const u8 gIntro2NightTiles[] = INCBIN_U8("graphics/intro/intro2_night.4bpp.lz");
-const u16 gIntro2BrendanPalette[] = INCBIN_U16("graphics/intro/intro2_brendan.gbapal");
-const u8 gIntro2BrendanTiles[] = INCBIN_U8("graphics/intro/intro2_brendan.4bpp.lz");
-const u16 gIntro2MayPalette[] = INCBIN_U16("graphics/intro/intro2_may.gbapal");
-const u16 gUnknown_08414F90[0xF0] = {0};
-const u8 gIntro2MayTiles[] = INCBIN_U8("graphics/intro/intro2_may.4bpp.lz");
-const u8 gIntro2BicycleTiles[] = INCBIN_U8("graphics/intro/intro2_bicycle.4bpp.lz");
-const u16 gIntro2LatiosPalette[] = INCBIN_U16("graphics/intro/intro2_latios.gbapal");
-const u8 gIntro2LatiosTiles[] = INCBIN_U8("graphics/intro/intro2_latios.4bpp.lz");
-const u16 gIntro2LatiasPalette[] = INCBIN_U16("graphics/intro/intro2_latias.gbapal");
-const u8 gIntro2LatiasTiles[] = INCBIN_U8("graphics/intro/intro2_latias.4bpp.lz");
-
-void sub_814910C(struct Sprite *sprite);
-void nullsub_82(struct Sprite *sprite);
-void sub_81492A0(struct Sprite *sprite);
-void nullsub_83(struct Sprite *sprite);
-
-const struct SpriteTemplate gSpriteTemplate_8416B3C = {
- 2000, 0xFFFF, &gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_814910C
-};
-
-const struct CompressedSpriteSheet gUnknown_08416B54[] = {
- { gUnknown_084131C4, 0x400, 2000 },
- {}
-};
-
-const union AnimCmd gSpriteAnim_8416B64[] = {
- ANIMCMD_FRAME( 0, 30),
- ANIMCMD_END
-};
-
-const union AnimCmd gSpriteAnim_8416B6C[] = {
- ANIMCMD_FRAME(16, 30),
- ANIMCMD_END
-};
-
-const union AnimCmd gSpriteAnim_8416B74[] = {
- ANIMCMD_FRAME(20, 30),
- ANIMCMD_END
-};
-
-const union AnimCmd gSpriteAnim_8416B7C[] = {
- ANIMCMD_FRAME(22, 30),
- ANIMCMD_END
-};
-
-const union AnimCmd *const gSpriteAnimTable_8416B84[] = {
- gSpriteAnim_8416B64,
- gSpriteAnim_8416B6C,
- gSpriteAnim_8416B74,
- gSpriteAnim_8416B7C
-};
-
-const struct IntroCreditsSpriteMetadata gUnknown_08416B94[] = {
- { 0, ST_OAM_SQUARE, 2, 72, 32, 100, 0xc00 },
- { 0, ST_OAM_SQUARE, 2, 158, 32, 100, 0xc00 },
- { 1, ST_OAM_SQUARE, 1, 192, 40, 101, 0x800 },
- { 1, ST_OAM_SQUARE, 1, 56, 40, 101, 0x800 },
- { 2, ST_OAM_H_RECTANGLE, 0, 100, 44, 102, 0x400 },
- { 2, ST_OAM_H_RECTANGLE, 0, 152, 44, 102, 0x400 },
- { 3, ST_OAM_H_RECTANGLE, 0, 8, 46, 103, 0x100 },
- { 3, ST_OAM_H_RECTANGLE, 0, 56, 46, 103, 0x100 },
- { 3, ST_OAM_H_RECTANGLE, 0, 240, 46, 103, 0x100 },
-};
-
-const struct CompressedSpriteSheet gUnknown_08416BDC[] = {
- { gIntro2TreeTiles, 0x400, 2000 },
- {}
-};
-
-const union AnimCmd gSpriteAnim_8416BEC[] = {
- ANIMCMD_FRAME( 0, 30),
- ANIMCMD_END
-};
-
-const union AnimCmd gSpriteAnim_8416BF4[] = {
- ANIMCMD_FRAME(16, 30),
- ANIMCMD_END
-};
-
-const union AnimCmd gSpriteAnim_8416BFC[] = {
- ANIMCMD_FRAME(24, 30),
- ANIMCMD_END
-};
-
-const union AnimCmd *const gSpriteAnimTable_8416C04[] = {
- gSpriteAnim_8416BEC,
- gSpriteAnim_8416BF4,
- gSpriteAnim_8416BFC
-};
-
-const struct IntroCreditsSpriteMetadata gUnknown_08416C10[] = {
- { 0, ST_OAM_SQUARE, 2, 16, 88, 100, 0x2000 },
- { 0, ST_OAM_SQUARE, 2, 80, 88, 100, 0x2000 },
- { 0, ST_OAM_SQUARE, 2, 144, 88, 100, 0x2000 },
- { 0, ST_OAM_SQUARE, 2, 208, 88, 100, 0x2000 },
- { 1, ST_OAM_V_RECTANGLE, 2, 40, 88, 101, 0x1000 },
- { 1, ST_OAM_V_RECTANGLE, 2, 104, 88, 101, 0x1000 },
- { 1, ST_OAM_V_RECTANGLE, 2, 168, 88, 101, 0x1000 },
- { 1, ST_OAM_V_RECTANGLE, 2, 232, 88, 101, 0x1000 },
- { 2, ST_OAM_V_RECTANGLE, 2, 56, 88, 102, 0x800 },
- { 2, ST_OAM_V_RECTANGLE, 2, 120, 88, 102, 0x800 },
- { 2, ST_OAM_V_RECTANGLE, 2, 184, 88, 102, 0x800 },
- { 2, ST_OAM_V_RECTANGLE, 2, 248, 88, 102, 0x800 },
-};
-
-const struct CompressedSpriteSheet gUnknown_08416C70[] = {
- { gIntro2NightTiles, 0x400, 2000 },
- {}
-};
-
-const union AnimCmd gSpriteAnim_8416C80[] = {
- ANIMCMD_FRAME(0, 30),
- ANIMCMD_END
-};
-
-const union AnimCmd *const gSpriteAnimTable_8416C88[] = {
- gSpriteAnim_8416C80
-};
-
-const struct IntroCreditsSpriteMetadata gUnknown_08416C8C[] = {
- { 0, ST_OAM_SQUARE, 2, 24, 88, 100, 0x1000 },
- { 0, ST_OAM_SQUARE, 2, 64, 88, 100, 0x1000 },
- { 0, ST_OAM_SQUARE, 2, 104, 88, 100, 0x1000 },
- { 0, ST_OAM_SQUARE, 2, 144, 88, 100, 0x1000 },
- { 0, ST_OAM_SQUARE, 2, 184, 88, 100, 0x1000 },
- { 0, ST_OAM_SQUARE, 2, 224, 88, 100, 0x1000 },
-};
-
-const struct OamData gOamData_8416CBC = {
- .y = 160, .shape = ST_OAM_SQUARE, .size = 3, .priority = 1
-};
-
-const union AnimCmd gSpriteAnim_8416CC4[] = {
- ANIMCMD_FRAME( 0, 8),
- ANIMCMD_FRAME( 64, 8),
- ANIMCMD_FRAME(128, 8),
- ANIMCMD_FRAME(192, 8),
- ANIMCMD_JUMP(0)
-};
-
-const union AnimCmd *const gSpriteAnimTable_8416CD8[] = {
- gSpriteAnim_8416CC4
-};
-
-const struct SpriteTemplate gSpriteTemplate_8416CDC = {
- 1002, 1002, &gOamData_8416CBC, gSpriteAnimTable_8416CD8, NULL, gDummySpriteAffineAnimTable, nullsub_82
-};
-
-const struct SpriteTemplate gSpriteTemplate_8416CF4 = {
- 1003, 1003, &gOamData_8416CBC, gSpriteAnimTable_8416CD8, NULL, gDummySpriteAffineAnimTable, nullsub_82
-};
-
-const struct OamData gOamData_8416D0C = {
- .y = 160, .shape = ST_OAM_H_RECTANGLE, .size = 3, .priority = 1
-};
-
-const union AnimCmd gSpriteAnim_8416D14[] = {
- ANIMCMD_FRAME( 0, 8),
- ANIMCMD_FRAME( 32, 8),
- ANIMCMD_FRAME( 64, 8),
- ANIMCMD_FRAME( 96, 8),
- ANIMCMD_JUMP(0)
-};
-
-const union AnimCmd *const gSpriteAnimTable_8416D28[] = {
- gSpriteAnim_8416D14
-};
-
-const struct SpriteTemplate gSpriteTemplate_Brendan = {
- 1001, 1002, &gOamData_8416D0C, gSpriteAnimTable_8416D28, NULL, gDummySpriteAffineAnimTable, sub_81492A0
-};
-
-const struct SpriteTemplate gSpriteTemplate_May = {
- 1001, 1003, &gOamData_8416D0C, gSpriteAnimTable_8416D28, NULL, gDummySpriteAffineAnimTable, sub_81492A0
-};
-
-const struct OamData gOamData_8416D5C = {
- .y = 160, .shape = ST_OAM_SQUARE, .size = 3, .priority = 1
-};
-
-const union AnimCmd gSpriteAnim_8416D64[] = {
- ANIMCMD_FRAME( 0, 16),
- ANIMCMD_END
-};
-
-const union AnimCmd gSpriteAnim_8416D6C[] = {
- ANIMCMD_FRAME( 64, 16),
- ANIMCMD_END
-};
-
-const union AnimCmd *const gSpriteAnimTable_8416D74[] = {
- gSpriteAnim_8416D64,
- gSpriteAnim_8416D6C
-};
-
-const struct SpriteTemplate gSpriteTemplate_8416D7C = {
- 1004, 1004, &gOamData_8416D5C, gSpriteAnimTable_8416D74, NULL, gDummySpriteAffineAnimTable, nullsub_83
-};
-
-const struct SpriteTemplate gSpriteTemplate_8416D94 = {
- 1005, 1005, &gOamData_8416D5C, gSpriteAnimTable_8416D74, NULL, gDummySpriteAffineAnimTable, nullsub_83
-};
-
-const struct CompressedSpriteSheet gIntro2BrendanSpriteSheet[] = {
- { gIntro2BrendanTiles, 0x3800, 1002 },
- {}
-};
-const struct CompressedSpriteSheet gIntro2MaySpriteSheet[] = {
- { gIntro2MayTiles, 0x3800, 1003 },
- {}
-};
-const struct CompressedSpriteSheet gIntro2BicycleSpriteSheet[] = {
- { gIntro2BicycleTiles, 0x1000, 1001 },
- {}
-};
-const struct CompressedSpriteSheet gIntro2LatiosSpriteSheet[] = {
- { gIntro2LatiosTiles, 0x1000, 1004 },
- {}
-};
-const struct CompressedSpriteSheet gIntro2LatiasSpriteSheet[] = {
- { gIntro2LatiasTiles, 0x1000, 1005 },
- {}
-};
-
-const struct SpritePalette gIntro2SpritePalettes[] = {
- {gIntro2BrendanPalette, 1002},
- {gIntro2MayPalette, 1003},
- {gIntro2LatiosPalette, 1004},
- {gIntro2LatiasPalette, 1005},
- {}
-};
-
-const struct CompressedSpriteSheet gUnknown_08416E24[] = {
- { gIntro2BrendanTiles, 0x2000, 1002},
- {}
-};
-
-const struct CompressedSpriteSheet gUnknown_08416E34[] = {
- { gIntro2MayTiles, 0x2000, 1003},
- {}
-};
-
-
-EWRAM_DATA u16 gUnknown_02039358 = 0;
-EWRAM_DATA s16 gUnknown_0203935A = 0;
-EWRAM_DATA s16 gUnknown_0203935C = 0;
-
-extern u8 gReservedSpritePaletteCount;
-
-void sub_8149248();
-void sub_8149264();
-
-void load_intro_part2_graphics(u8 a)
-{
- LZ77UnCompVram(&gUnknown_0841225C, (void *)(VRAM + 0x4000));
- LZ77UnCompVram(&gUnknown_084126DC, (void *)(VRAM + 0x7800));
- LoadPalette(&gUnknown_084121FC, 240, 32);
- switch (a)
- {
- case 0:
- default:
- LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM));
- LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000));
- LoadPalette(&gUnknown_08412818, 0, 96);
- LoadCompressedObjectPic(gUnknown_08416B54);
- LoadPalette(&gUnknown_08413184, 256, 32);
- sub_8149248();
- break;
- case 1:
- LZ77UnCompVram(&gUnknown_08413340, (void *)(VRAM));
- LZ77UnCompVram(&gUnknown_084139C8, (void *)(VRAM + 0x3000));
- LoadPalette(&gUnknown_08413300, 0, 32);
- LoadCompressedObjectPic(gUnknown_08416BDC);
- LoadPalette(&gUnknown_08413CCC, 256, 32);
- sub_8149264();
- break;
- }
- gUnknown_0203935C = 0;
- gReservedSpritePaletteCount = 8;
-}
-
-void sub_8148C78(u8 a)
-{
- if (a == 1)
- {
- REG_BG3CNT = 0x603;
- REG_BG2CNT = 0x702;
- REG_BG1CNT = 0xF05;
- REG_DISPCNT = 0x1E40;
- }
- else
- {
- REG_BG3CNT = 0x603;
- REG_BG2CNT = 0x702;
- REG_BG1CNT = 0xF05;
- REG_DISPCNT = 0x1E40;
- }
-}
-
-void sub_8149280();
-
-void sub_8148CB0(u8 a)
-{
- LZ77UnCompVram(&gUnknown_0841225C, (void *)(VRAM + 0x4000));
- LZ77UnCompVram(&gUnknown_084126DC, (void *)(VRAM + 0x7800));
- switch (a)
- {
- case 0:
- default:
- LoadPalette(&gUnknown_084121FC, 240, 32);
- LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM));
- LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000));
- LoadPalette(&gUnknown_08412818, 0, 96);
- LoadCompressedObjectPic(gUnknown_08416B54);
- LZ77UnCompVram(&gUnknown_084131C4, (void *)(VRAM + 0x10000));
- LoadPalette(&gUnknown_08413184, 256, 32);
- sub_8149248();
- break;
- case 1:
- LoadPalette(&gUnknown_0841221C, 240, 32);
- LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM));
- LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000));
- LoadPalette(&gUnknown_08412878, 0, 96);
- LoadCompressedObjectPic(gUnknown_08416B54);
- LZ77UnCompVram(&gUnknown_084131C4, (void *)(VRAM + 0x10000));
- LoadPalette(&gUnknown_084131A4, 256, 32);
- sub_8149248();
- break;
- case 2:
- case 3:
- LoadPalette(&gUnknown_0841221C, 240, 32);
- LZ77UnCompVram(&gUnknown_08413340, (void *)(VRAM));
- LZ77UnCompVram(&gUnknown_084139C8, (void *)(VRAM + 0x3000));
- LoadPalette(&gUnknown_08413320, 0, 32);
- LoadCompressedObjectPic(gUnknown_08416BDC);
- LoadPalette(&gUnknown_08413320, 256, 32);
- sub_8149264();
- break;
- case 4:
- LoadPalette(&gUnknown_0841223C, 240, 32);
- LZ77UnCompVram(&gUnknown_08413E78, (void *)(VRAM));
- LZ77UnCompVram(&gUnknown_08414084, (void *)(VRAM + 0x3000));
- LoadPalette(&gUnknown_08413E38, 0, 64);
- LoadCompressedObjectPic(gUnknown_08416C70);
- LoadPalette(&gUnknown_08414064, 256, 32);
- sub_8149280();
- break;
- }
- gReservedSpritePaletteCount = 8;
- gUnknown_0203935C = 0;
-}
-
-void sub_8148E90(u8 a)
-{
- REG_BG3CNT = 0x603;
- REG_BG2CNT = 0x702;
- REG_BG1CNT = 0xF05;
- REG_DISPCNT = 0x1F40;
-}
-
-u8 sub_8148EC0(u8 a, u16 b, u16 c, u16 d)
-{
- u8 taskId = CreateTask(&sub_8148F3C, 0);
-
- gTasks[taskId].data[0] = a;
- gTasks[taskId].data[1] = b;
- gTasks[taskId].data[2] = 0;
- gTasks[taskId].data[3] = 0;
- gTasks[taskId].data[4] = c;
- gTasks[taskId].data[5] = 0;
- gTasks[taskId].data[6] = 0;
- gTasks[taskId].data[7] = d;
- gTasks[taskId].data[8] = 8;
- gTasks[taskId].data[9] = 0;
- sub_8148F3C(taskId);
- return taskId;
-}
-
-void sub_8148F3C(u8 taskId)
-{
- s16 r4;
- s32 r2;
-
- r4 = gTasks[taskId].data[1];
- if (r4 != 0)
- {
- r2 = (gTasks[taskId].data[2] << 16) + (u16)gTasks[taskId].data[3];
- r2 -= 16 * (u16)r4;
- gTasks[taskId].data[2] = r2 >> 16;
- gTasks[taskId].data[3] = r2;
- REG_BG1HOFS = gTasks[taskId].data[2];
- REG_BG1VOFS = gUnknown_02039358 + gUnknown_0203935A;
- }
-
- r4 = gTasks[taskId].data[4];
- if (r4 != 0)
- {
- r2 = (gTasks[taskId].data[5] << 16) + (u16)gTasks[taskId].data[6];
- r2 -= 16 * (u16)r4;
- gTasks[taskId].data[5] = r2 >> 16;
- gTasks[taskId].data[6] = r2;
- REG_BG2HOFS = gTasks[taskId].data[5];
- if (gTasks[taskId].data[0] != 0)
- REG_BG2VOFS = gUnknown_02039358 + gUnknown_0203935A;
- else
- REG_BG2VOFS = gUnknown_02039358;
- }
-
- r4 = gTasks[taskId].data[7];
- if (r4 != 0)
- {
- r2 = (gTasks[taskId].data[8] << 16) + (u16)gTasks[taskId].data[9];
- r2 -= 16 * (u16)r4;
- gTasks[taskId].data[8] = r2 >> 16;
- gTasks[taskId].data[9] = r2;
- REG_BG3HOFS = gTasks[taskId].data[8];
- REG_BG3VOFS = gUnknown_02039358;
- }
-}
-
-void sub_8149020(u8 mode)
-{
- u16 x;
- u16 y;
- switch (mode)
- {
- case 0:
- default:
- /* stuff */
- if (gMain.vblankCounter1 & 3 || gPaletteFade.active)
- break;
- if (gMain.vblankCounter1 & 4)
- {
- x = gPlttBufferUnfaded[9];
- y = gPlttBufferUnfaded[10];
- }
- else
- {
- x = gPlttBufferUnfaded[10];
- y = gPlttBufferUnfaded[9];
- }
- LoadPalette(&x, 9, 2);
- LoadPalette(&y, 10, 2);
- break;
- case 2:
- if (gMain.vblankCounter1 & 3 || gPaletteFade.active)
- break;
- if (gMain.vblankCounter1 & 4)
- {
- x = 0x3D27;
- y = 0x295;
- }
- else
- {
- x = 0x31C;
- y = 0x3D27;
- }
- LoadPalette(&x, 12, 2);
- LoadPalette(&y, 13, 2);
- break;
- case 1:
- break;
- }
-}
-
-void sub_814910C(struct Sprite *sprite)
-{
- if (gUnknown_0203935C)
- {
- DestroySprite(sprite);
- }
- else
- {
- s32 var = ((sprite->pos1.x << 16) | (u16)sprite->data[2]) + (u16)sprite->data[1];
- sprite->pos1.x = var >> 16;
- sprite->data[2] = var;
- if (sprite->pos1.x > 255) sprite->pos1.x = 0xFFE0;
- if (sprite->data[0])
- {
- sprite->pos2.y = -(gUnknown_02039358 + gUnknown_0203935A);
- }
- else
- {
- sprite->pos2.y = -gUnknown_02039358;
- }
- }
-}
-
-void sub_8149174(u8 a, const struct IntroCreditsSpriteMetadata *b, const union AnimCmd *const *c, u8 d)
-{
- u8 i;
-
- for(i = 0; i < d; i++)
- {
- u8 sprite = CreateSprite(&gSpriteTemplate_8416B3C, b[i].x, b[i].y, b[i].subpriority);
- CalcCenterToCornerVec(&gSprites[sprite], b[i].shape, b[i].size, 0);
- gSprites[sprite].oam.priority = 3;
- gSprites[sprite].oam.shape = b[i].shape;
- gSprites[sprite].oam.size = b[i].size;
- gSprites[sprite].oam.paletteNum = 0;
- gSprites[sprite].anims = c;
- StartSpriteAnim(&gSprites[sprite], b[i].animNum);
- gSprites[sprite].data[0] = a;
- gSprites[sprite].data[1] = b[i].xOff;
- gSprites[sprite].data[2] = 0;
- }
-}
-
-void sub_8149248()
-{
- sub_8149174(0, gUnknown_08416B94, gSpriteAnimTable_8416B84, 9);
-}
-
-void sub_8149264()
-{
- sub_8149174(1, gUnknown_08416C10, gSpriteAnimTable_8416C04, 12);
-}
-
-void sub_8149280()
-{
- sub_8149174(1, gUnknown_08416C8C, gSpriteAnimTable_8416C88, 6);
-}
-
-void nullsub_82(struct Sprite *sprite)
-{
-}
-
-void sub_81492A0(struct Sprite* sprite)
-{
- sprite->invisible = gSprites[sprite->data[0]].invisible;
- sprite->pos1.x = gSprites[sprite->data[0]].pos1.x;
- sprite->pos1.y = gSprites[sprite->data[0]].pos1.y + 8;
- sprite->pos2.x = gSprites[sprite->data[0]].pos2.x;
- sprite->pos2.y = gSprites[sprite->data[0]].pos2.y;
-}
-
-
-
-u8 intro_create_brendan_sprite(s16 a, s16 b)
-{
- u8 sprite = CreateSprite(&gSpriteTemplate_8416CDC, a, b, 0);
- u8 brendan = CreateSprite(&gSpriteTemplate_Brendan, a, b + 8, 1);
- gSprites[brendan].data[0] = sprite;
- return sprite;
-}
-
-u8 intro_create_may_sprite(s16 a, s16 b)
-{
- u8 sprite = CreateSprite(&gSpriteTemplate_8416CF4, a, b, 0);
- u8 may = CreateSprite(&gSpriteTemplate_May, a, b + 8, 1);
- gSprites[may].data[0] = sprite;
- return sprite;
-}
-
-void nullsub_83(struct Sprite *sprite)
-{
-}
-
-void sub_81493C4(struct Sprite* sprite)
-{
- sprite->invisible = gSprites[sprite->data[0]].invisible;
- sprite->pos1.y = gSprites[sprite->data[0]].pos1.y;
- sprite->pos2.x = gSprites[sprite->data[0]].pos2.x;
- sprite->pos2.y = gSprites[sprite->data[0]].pos2.y;
-}
-
-u8 intro_create_latios_sprite(s16 a, s16 b)
-{
- u8 sprite = CreateSprite(&gSpriteTemplate_8416D7C, a - 32, b, 2);
- u8 latios = CreateSprite(&gSpriteTemplate_8416D7C, a + 32, b, 2);
- gSprites[latios].data[0] = sprite;
- StartSpriteAnim(&gSprites[latios], 1);
- gSprites[latios].callback = &sub_81493C4;
- return sprite;
-}
-
-u8 intro_create_latias_sprite(s16 a, s16 b)
-{
- u8 sprite = CreateSprite(&gSpriteTemplate_8416D94, a - 32, b, 2);
- u8 latios = CreateSprite(&gSpriteTemplate_8416D94, a + 32, b, 2);
- gSprites[latios].data[0] = sprite;
- StartSpriteAnim(&gSprites[latios], 1);
- gSprites[latios].callback = &sub_81493C4;
- return sprite;
-}
diff --git a/src/scene/new_game.c b/src/scene/new_game.c
deleted file mode 100644
index e64dc91e3..000000000
--- a/src/scene/new_game.c
+++ /dev/null
@@ -1,236 +0,0 @@
-#include "global.h"
-#include "constants/maps.h"
-#include "constants/species.h"
-#include "clock.h"
-#include "new_game.h"
-#include "battle_records.h"
-#include "berry.h"
-#include "contest.h"
-#include "decoration_inventory.h"
-#include "dewford_trend.h"
-#include "easy_chat.h"
-#include "event_data.h"
-#include "field_specials.h"
-#include "item_menu.h"
-#include "lottery_corner.h"
-#include "mail_data.h"
-#include "mauville_man.h"
-#include "play_time.h"
-#include "player_pc.h"
-#include "pokeblock.h"
-#include "pokedex.h"
-#include "pokemon_size_record.h"
-#include "pokemon_storage_system.h"
-#include "random.h"
-#include "roamer.h"
-#include "script_pokemon_80C4.h"
-#include "overworld.h"
-#include "rtc.h"
-#include "script.h"
-#include "secret_base.h"
-#include "text.h"
-#include "tv.h"
-
-EWRAM_DATA u8 gDifferentSaveFile = 0;
-EWRAM_DATA u8 gUnknown_020297ED = 0;
-
-extern u8 gPlayerPartyCount;
-extern u8 gUnknown_03005CE8;
-extern u16 gSaveFileStatus;
-
-extern u8 gUnknown_0819FA81[];
-
-static const struct ContestWinner sEmptyMuseumPortrait =
-{
- .nickname = {EOS},
- .trainerName = {EOS},
-};
-
-#if DEBUG
-const s8 gUnknown_Debug_0823C788[][2] =
-{
- { MAP_GROUP(INSIDE_OF_TRUCK), MAP_NUM(INSIDE_OF_TRUCK) },
- { MAP_GROUP(OLDALE_TOWN_POKEMON_CENTER_2F), MAP_NUM(OLDALE_TOWN_POKEMON_CENTER_2F) },
- { MAP_GROUP(LITTLEROOT_TOWN), MAP_NUM(LITTLEROOT_TOWN) },
- { MAP_GROUP(LITTLEROOT_TOWN_BRENDANS_HOUSE_2F), MAP_NUM(LITTLEROOT_TOWN_BRENDANS_HOUSE_2F) }
-};
-
-const u8 gUnknown_Debug_0823C790[] = _("KRÖTE");
-#endif
-
-void write_word_to_mem(u32 var, u8 *dataPtr)
-{
- dataPtr[0] = var;
- dataPtr[1] = var >> 8;
- dataPtr[2] = var >> 16;
- dataPtr[3] = var >> 24;
-}
-
-void copy_word_to_mem(u8 *copyTo, u8 *copyFrom)
-{
- s32 i;
- for (i = 0; i < 4; i++)
- copyTo[i] = copyFrom[i];
-}
-
-void InitPlayerTrainerId(void)
-{
- write_word_to_mem((Random() << 16) | Random(), gSaveBlock2.playerTrainerId);
-}
-
-// L=A isnt set here for some reason.
-void SetDefaultOptions(void)
-{
- gSaveBlock2.optionsTextSpeed = OPTIONS_TEXT_SPEED_MID;
- gSaveBlock2.optionsWindowFrameType = 0;
- gSaveBlock2.optionsSound = OPTIONS_SOUND_MONO;
- gSaveBlock2.optionsBattleStyle = OPTIONS_BATTLE_STYLE_SHIFT;
- gSaveBlock2.optionsBattleSceneOff = FALSE;
- gSaveBlock2.regionMapZoom = FALSE;
-}
-
-void ClearPokedexFlags(void)
-{
- gUnknown_03005CE8 = 0;
- memset(&gSaveBlock2.pokedex.owned, 0, sizeof(gSaveBlock2.pokedex.owned));
- memset(&gSaveBlock2.pokedex.seen, 0, sizeof(gSaveBlock2.pokedex.seen));
-}
-
-void ResetContestAndMuseumWinners(void)
-{
- s32 i;
-
- Contest_ResetWinners();
- for (i = 0; i < 5; i++)
- gSaveBlock1.museumPortraits[i] = sEmptyMuseumPortrait;
-}
-
-void ZeroBattleTowerData(void)
-{
- CpuFill32(0, &gSaveBlock2.battleTower, sizeof(gSaveBlock2.battleTower));
-}
-
-#if DEBUG
-void debug_sub_8052E04()
-{
- u8 i;
-
- for (i = 0; i < 4; i++)
- {
- if (gUnknown_Debug_0823C788[i][0] == gSaveBlock1.location.mapGroup &&
- gUnknown_Debug_0823C788[i][1] == gSaveBlock1.location.mapNum)
- {
- break;
- }
- }
-
- i++;
- if (i >= 4)
- {
- i = 0;
- }
-
- Overworld_SetWarpDestination(gUnknown_Debug_0823C788[i][0], gUnknown_Debug_0823C788[i][1], -1, -1, -1);
-}
-#endif
-
-void WarpToTruck(void)
-{
- Overworld_SetWarpDestination(25, 40, -1, -1, -1); // inside of truck
- warp_in();
-}
-
-void ClearSav2(void)
-{
- CpuFill16(0, &gSaveBlock2, sizeof(gSaveBlock2));
- SetDefaultOptions();
-}
-
-void sub_8052E4C(void)
-{
- gDifferentSaveFile = 0;
-#if DEBUG
- gUnknown_020297ED = 0;
-#endif
- sub_808C0A0();
- ZeroPlayerPartyMons();
- ZeroEnemyPartyMons();
- ResetBagScrollPositions();
-}
-
-void NewGameInitData(void)
-{
- if (gSaveFileStatus == 0 || gSaveFileStatus == 2)
- RtcReset();
-
- gDifferentSaveFile = 1;
- ZeroPlayerPartyMons();
- ZeroEnemyPartyMons();
- ResetPokedex();
- ZeroBattleTowerData();
- memset(&gSaveBlock1, 0, sizeof(gSaveBlock1));
- ClearMailData();
- gSaveBlock2.specialSaveWarp = 0;
- InitPlayerTrainerId();
- PlayTimeCounter_Reset();
- ClearPokedexFlags();
- InitEventData();
- ClearTVShowData();
- ResetGabbyAndTy();
- ResetSecretBases();
- ClearBerryTrees();
- gSaveBlock1.money = 3000;
- ResetLinkContestBoolean();
- ResetGameStats();
- ResetContestAndMuseumWinners();
- InitLinkBattleRecords();
- InitShroomishSizeRecord();
- InitBarboachSizeRecord();
- gPlayerPartyCount = 0;
- ZeroPlayerPartyMons();
- ResetPokemonStorageSystem();
- ClearRoamerData();
- ClearRoamerLocationData();
- gSaveBlock1.registeredItem = 0;
- ClearBag();
- NewGameInitPCItems();
- ClearPokeblocks();
- ClearDecorationInventories();
- InitEasyChatPhrases();
- SetupMauvilleOldMan();
- InitDewfordTrend();
- ResetFanClub();
- ResetLotteryCorner();
- WarpToTruck();
- ScriptContext2_RunNewScript(gUnknown_0819FA81);
-}
-
-#if DEBUG
-extern void debug_sub_80A3904(void);
-extern void debug_sub_80A3714(void);
-extern void debug_sub_8120F98(void);
-extern void unref_sub_8070F90(void);
-
-void debug_sub_8057508(bool32 arg0)
-{
- gUnknown_020297ED = 1;
- NewGameInitData();
- gSaveBlock1.money = 999999;
- FlagSet(FLAG_SYS_POKEMON_GET);
- FlagSet(FLAG_SYS_POKEDEX_GET);
- FlagSet(FLAG_SYS_POKENAV_GET);
- FlagSet(FLAG_SYS_B_DASH);
- ScriptGiveMon(SPECIES_TREECKO, 99, 0, 0, 0, 0);
-
- if (arg0 == TRUE)
- SetMonData(&gPlayerParty[0], MON_DATA_NICKNAME, gUnknown_Debug_0823C790);
-
- debug_sub_80A3904();
- debug_sub_80A3714();
- debug_sub_8120F98();
- FlagSet(FLAG_SYS_HIPSTER_MEET);
- sub_80EB8EC();
- unref_sub_8070F90();
- InitTimeBasedEvents();
-}
-#endif
diff --git a/src/scene/title_screen.c b/src/scene/title_screen.c
deleted file mode 100644
index a1c8e081d..000000000
--- a/src/scene/title_screen.c
+++ /dev/null
@@ -1,911 +0,0 @@
-#include "global.h"
-#include "gba/m4a_internal.h"
-#include "title_screen.h"
-#include "clear_save_data_menu.h"
-#include "decompress.h"
-#include "event_data.h"
-#include "intro.h"
-#include "m4a.h"
-#include "main.h"
-#include "main_menu.h"
-#include "overworld.h"
-#include "palette.h"
-#include "reset_rtc_screen.h"
-#include "sound.h"
-#include "sprite.h"
-#include "task.h"
-#include "scanline_effect.h"
-
-#if ENGLISH
-#define VERSION_BANNER_SHAPE 1
-#define VERSION_BANNER_RIGHT_TILEOFFSET 64
-#define VERSION_BANNER_BYTES 0x1000
-#define VERSION_BANNER_LEFT_X 98
-#define VERSION_BANNER_RIGHT_X 162
-#define VERSION_BANNER_Y 26
-#define VERSION_BANNER_Y_GOAL 66
-#define START_BANNER_X DISPLAY_WIDTH / 2
-#elif GERMAN
-#define VERSION_BANNER_SHAPE 0
-#define VERSION_BANNER_RIGHT_TILEOFFSET 128
-#define VERSION_BANNER_BYTES 0x2000
-#define VERSION_BANNER_LEFT_X 108
-#define VERSION_BANNER_RIGHT_X 172
-#ifdef SAPPHIRE
-#define VERSION_BANNER_Y_GOAL 83
-#else
-#define VERSION_BANNER_Y_GOAL 84
-#endif
-#define VERSION_BANNER_Y (VERSION_BANNER_Y_GOAL - 40)
-#define START_BANNER_X DISPLAY_WIDTH / 2 - 2
-#endif
-
-extern u8 gReservedSpritePaletteCount;
-extern struct MusicPlayerInfo gMPlay_BGM;
-extern u16 gBattle_BG1_Y;
-extern u16 gBattle_BG1_X;
-extern const u8 gUnknown_08E9D8CC[];
-extern const u16 gUnknown_08E9F624[];
-extern const u8 gUnknown_08E9F7E4[];
-extern const u8 gVersionTiles[];
-extern const u8 gTitleScreenPressStart_Gfx[];
-extern const u16 gTitleScreenLogoShinePalette[];
-
-static EWRAM_DATA u8 gUnknown_0202F7E4 = 0;
-
-#ifdef SAPPHIRE
-static const u16 sLegendaryMonPalettes[][16] =
-{
- INCBIN_U16("graphics/title_screen/kyogre_dark.gbapal"),
- INCBIN_U16("graphics/title_screen/kyogre_glow.gbapal"),
-};
-static const u8 sLegendaryMonPixelData[] = INCBIN_U8("graphics/title_screen/kyogre.4bpp.lz");
-static const u8 sLegendaryMonTilemap[] = INCBIN_U8("graphics/title_screen/kyogre_map.bin.lz");
-static const u8 sBackdropTilemap[] = INCBIN_U8("graphics/title_screen/water_map.bin.lz");
-#else
-static const u16 sLegendaryMonPalettes[][16] =
-{
- INCBIN_U16("graphics/title_screen/groudon_dark.gbapal"),
- INCBIN_U16("graphics/title_screen/groudon_glow.gbapal"),
-};
-static const u8 sLegendaryMonPixelData[] = INCBIN_U8("graphics/title_screen/groudon.4bpp.lz");
-static const u8 sLegendaryMonTilemap[] = INCBIN_U8("graphics/title_screen/groudon_map.bin.lz");
-static const u8 sBackdropTilemap[] = INCBIN_U8("graphics/title_screen/lava_map.bin.lz");
-#endif
-static const u8 sLogoShineTiles[] = INCBIN_U8("graphics/title_screen/logo_shine.4bpp.lz");
-const u16 gUnknown_08393E64[] =
-{
- 0x10,
- 0x110,
- 0x210,
- 0x310,
- 0x410,
- 0x510,
- 0x610,
- 0x710,
- 0x810,
- 0x910,
- 0xA10,
- 0xB10,
- 0xC10,
- 0xD10,
- 0xE10,
- 0xF10,
- 0x100F,
- 0x100E,
- 0x100D,
- 0x100C,
- 0x100B,
- 0x100A,
- 0x1009,
- 0x1008,
- 0x1007,
- 0x1006,
- 0x1005,
- 0x1004,
- 0x1003,
- 0x1002,
- 0x1001,
- 0x1000,
-};
-static const struct OamData sVersionBannerLeftOamData =
-{
- .y = 160,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 1,
- .shape = VERSION_BANNER_SHAPE,
- .x = 0,
- .matrixNum = 0,
- .size = 3,
- .tileNum = 0,
- .priority = 0,
- .paletteNum = 0,
- .affineParam = 0,
-};
-static const struct OamData sVersionBannerRightOamData =
-{
- .y = 160,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 1,
- .shape = VERSION_BANNER_SHAPE,
- .x = 0,
- .matrixNum = 0,
- .size = 3,
- .tileNum = 0,
- .priority = 0,
- .paletteNum = 0,
- .affineParam = 0,
-};
-static const union AnimCmd sVersionBannerLeftAnimSequence[] =
-{
- ANIMCMD_FRAME(0, 30),
- ANIMCMD_END,
-};
-static const union AnimCmd sVersionBannerRightAnimSequence[] =
-{
- ANIMCMD_FRAME(VERSION_BANNER_RIGHT_TILEOFFSET, 30),
- ANIMCMD_END,
-};
-static const union AnimCmd *const sVersionBannerLeftAnimTable[] =
-{
- sVersionBannerLeftAnimSequence,
-};
-static const union AnimCmd *const sVersionBannerRightAnimTable[] =
-{
- sVersionBannerRightAnimSequence,
-};
-static const struct SpriteTemplate sVersionBannerLeftSpriteTemplate =
-{
- .tileTag = 1000,
- .paletteTag = 1000,
- .oam = &sVersionBannerLeftOamData,
- .anims = sVersionBannerLeftAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallback_VersionBannerLeft,
-};
-static const struct SpriteTemplate sVersionBannerRightSpriteTemplate =
-{
- .tileTag = 1000,
- .paletteTag = 1000,
- .oam = &sVersionBannerRightOamData,
- .anims = sVersionBannerRightAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallback_VersionBannerRight,
-};
-static const struct CompressedSpriteSheet gUnknown_08393EFC[] =
-{
- {gVersionTiles, VERSION_BANNER_BYTES, 1000},
- {NULL},
-};
-static const struct OamData gOamData_8393F0C =
-{
- .y = 160,
- .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 union AnimCmd gSpriteAnim_8393F14[] =
-{
- ANIMCMD_FRAME(0, 4),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_8393F1C[] =
-{
- ANIMCMD_FRAME(4, 4),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_8393F24[] =
-{
- ANIMCMD_FRAME(8, 4),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_8393F2C[] =
-{
- ANIMCMD_FRAME(12, 4),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_8393F34[] =
-{
- ANIMCMD_FRAME(16, 4),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_8393F3C[] =
-{
- ANIMCMD_FRAME(20, 4),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_8393F44[] =
-{
- ANIMCMD_FRAME(24, 4),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_8393F4C[] =
-{
- ANIMCMD_FRAME(28, 4),
- ANIMCMD_END,
-};
-#if GERMAN
-static const union AnimCmd gSpriteAnim_839F73C[] =
-{
- ANIMCMD_FRAME(32, 4),
- ANIMCMD_END,
-};
-static const union AnimCmd gSpriteAnim_839F744[] =
-{
- ANIMCMD_FRAME(36, 4),
- ANIMCMD_END,
-};
-#endif
-static const union AnimCmd *const sStartCopyrightBannerAnimTable[] =
-{
- gSpriteAnim_8393F14,
- gSpriteAnim_8393F1C,
- gSpriteAnim_8393F24,
- gSpriteAnim_8393F2C,
- gSpriteAnim_8393F34,
- gSpriteAnim_8393F3C,
- gSpriteAnim_8393F44,
- gSpriteAnim_8393F4C,
-#if GERMAN
- gSpriteAnim_839F73C,
- gSpriteAnim_839F744,
-#endif
-};
-static const struct SpriteTemplate sStartCopyrightBannerSpriteTemplate =
-{
- .tileTag = 1001,
- .paletteTag = 1001,
- .oam = &gOamData_8393F0C,
- .anims = sStartCopyrightBannerAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallback_PressStartCopyrightBanner,
-};
-static const struct CompressedSpriteSheet gUnknown_08393F8C[] =
-{
- {gTitleScreenPressStart_Gfx, 0x520, 1001},
- {NULL},
-};
-const struct SpritePalette sPokemonLogoShinePalette[] =
-{
- {gTitleScreenLogoShinePalette, 1001},
- {NULL},
-};
-static const struct OamData sPokemonLogoShineOamData =
-{
- .y = 160,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = 0,
- .x = 0,
- .matrixNum = 0,
- .size = 3,
- .tileNum = 0,
- .priority = 0,
- .paletteNum = 0,
- .affineParam = 0,
-};
-static const union AnimCmd sPokemonLogoShineAnimSequence[] =
-{
- ANIMCMD_FRAME(0, 4),
- ANIMCMD_END,
-};
-static const union AnimCmd *const sPokemonLogoShineAnimTable[] =
-{
- sPokemonLogoShineAnimSequence,
-};
-static const struct SpriteTemplate sPokemonLogoShineSpriteTemplate =
-{
- .tileTag = 1002,
- .paletteTag = 1001,
- .oam = &sPokemonLogoShineOamData,
- .anims = sPokemonLogoShineAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallback_PokemonLogoShine,
-};
-static const struct CompressedSpriteSheet sPokemonLogoShineSpriteSheet[] =
-{
- {sLogoShineTiles, 0x800, 1002},
- {NULL},
-};
-
-#define _RGB(r, g, b) ((((b) & 31) << 10) + (((g) & 31) << 5) + ((r) & 31))
-
-#ifdef SAPPHIRE
-//Red Kyogre markings
-#define LEGENDARY_MARKING_COLOR(c) RGB((c), 0, 0)
-#else
-//Blue Groundon markings
-#define LEGENDARY_MARKING_COLOR(c) RGB(0, 0, (c))
-#endif
-
-#if defined(GERMAN) && defined(SAPPHIRE)
-#define PLTT_BUFFER_INDEX 9
-#elif defined(SAPPHIRE)
-#define PLTT_BUFFER_INDEX 26
-#else
-#define PLTT_BUFFER_INDEX 21
-#endif
-
-#define CLEAR_SAVE_BUTTON_COMBO (B_BUTTON | SELECT_BUTTON | DPAD_UP)
-#define RESET_RTC_BUTTON_COMBO (B_BUTTON | SELECT_BUTTON | DPAD_LEFT)
-#define A_B_START_SELECT (A_BUTTON | B_BUTTON | START_BUTTON | SELECT_BUTTON)
-
-static void MainCB2(void);
-static void Task_TitleScreenPhase1(u8);
-static void Task_TitleScreenPhase2(u8);
-static void Task_TitleScreenPhase3(u8);
-static void CB2_GoToMainMenu(void);
-#if DEBUG
-static void CB2_GoToTestMenu(void);
-#endif
-static void CB2_GoToClearSaveDataScreen(void);
-static void CB2_GoToResetRtcScreen(void);
-static void CB2_GoToCopyrightScreen(void);
-static void UpdateLegendaryMarkingColor(u8);
-
-void SpriteCallback_VersionBannerLeft(struct Sprite *sprite)
-{
- struct Task *task = &gTasks[sprite->data[1]];
-
- if (task->data[1] != 0)
- {
- sprite->oam.objMode = 0;
- sprite->pos1.y = VERSION_BANNER_Y_GOAL;
- sprite->invisible = FALSE;
- }
- else
- {
- if (task->data[5] != 0)
- task->data[5]--;
- if (task->data[5] < 64)
- {
- sprite->invisible = FALSE;
- if (sprite->pos1.y != VERSION_BANNER_Y_GOAL)
- sprite->pos1.y++;
- REG_BLDALPHA = gUnknown_08393E64[task->data[5] / 2];
- }
- }
-}
-
-void SpriteCallback_VersionBannerRight(struct Sprite *sprite)
-{
- struct Task *task = &gTasks[sprite->data[1]];
-
- if (task->data[1] != 0)
- {
- sprite->oam.objMode = 0;
- sprite->pos1.y = VERSION_BANNER_Y_GOAL;
- sprite->invisible = FALSE;
- }
- else
- {
- if (task->data[5] < 64)
- {
- sprite->invisible = FALSE;
- if (sprite->pos1.y != VERSION_BANNER_Y_GOAL)
- sprite->pos1.y++;
- }
- }
-}
-
-void SpriteCallback_PressStartCopyrightBanner(struct Sprite *sprite)
-{
- if (sprite->data[0] == 1)
- {
- sprite->data[1]++;
- //Alternate between hidden and shown every 16th frame
- if (sprite->data[1] & 16)
- sprite->invisible = FALSE;
- else
- sprite->invisible = TRUE;
- }
- else
- sprite->invisible = FALSE;
-}
-
-#if ENGLISH
-static void CreatePressStartBanner(s16 x, s16 y)
-{
- u8 i;
- u8 spriteId;
-
- x -= 32;
- for (i = 0; i < 3; i++, x += 32)
- {
- spriteId = CreateSprite(&sStartCopyrightBannerSpriteTemplate, x, y, 0);
- StartSpriteAnim(&gSprites[spriteId], i);
- gSprites[spriteId].data[0] = 1;
- }
-}
-#elif GERMAN
-__attribute__((naked))
-static void CreatePressStartBanner(s16 x, s16 y)
-{
- 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\
- lsls r0, 16\n\
- ldr r2, _0807C3AC @ =0xffe00000\n\
- adds r0, r2\n\
- lsrs r0, 16\n\
- movs r6, 0\n\
- lsls r1, 16\n\
- mov r10, r1\n\
- mov r8, r10\n\
-_0807C302:\n\
- lsls r5, r0, 16\n\
- asrs r5, 16\n\
- ldr r0, _0807C3B0 @ =sStartCopyrightBannerSpriteTemplate\n\
- adds r1, r5, 0\n\
- mov r3, r8\n\
- asrs r2, r3, 16\n\
- movs r3, 0\n\
- bl CreateSprite\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- lsls r4, r0, 4\n\
- adds r4, r0\n\
- lsls r4, 2\n\
- ldr r0, _0807C3B4 @ =gSprites\n\
- mov r9, r0\n\
- add r4, r9\n\
- adds r0, r4, 0\n\
- adds r1, r6, 0\n\
- bl StartSpriteAnim\n\
- movs r7, 0x1\n\
- strh r7, [r4, 0x2E]\n\
- adds r0, r6, 0x1\n\
- lsls r0, 24\n\
- lsrs r6, r0, 24\n\
- adds r5, 0x20\n\
- lsls r5, 16\n\
- lsrs r0, r5, 16\n\
- cmp r6, 0x2\n\
- bls _0807C302\n\
- ldr r1, _0807C3B0 @ =sStartCopyrightBannerSpriteTemplate\n\
- mov r8, r1\n\
- lsls r5, r0, 16\n\
- asrs r5, 16\n\
- mov r2, r10\n\
- asrs r6, r2, 16\n\
- mov r0, r8\n\
- adds r1, r5, 0\n\
- adds r2, r6, 0\n\
- movs r3, 0\n\
- bl CreateSprite\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- lsls r4, r0, 4\n\
- adds r4, r0\n\
- lsls r4, 2\n\
- add r4, r9\n\
- adds r0, r4, 0\n\
- movs r1, 0x8\n\
- bl StartSpriteAnim\n\
- strh r7, [r4, 0x2E]\n\
- subs r5, 0x60\n\
- lsls r5, 16\n\
- asrs r5, 16\n\
- subs r6, 0x8\n\
- lsls r6, 16\n\
- asrs r6, 16\n\
- mov r0, r8\n\
- adds r1, r5, 0\n\
- adds r2, r6, 0\n\
- movs r3, 0\n\
- bl CreateSprite\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- lsls r4, r0, 4\n\
- adds r4, r0\n\
- lsls r4, 2\n\
- add r4, r9\n\
- adds r0, r4, 0\n\
- movs r1, 0x9\n\
- bl StartSpriteAnim\n\
- strh r7, [r4, 0x2E]\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\
- .align 2, 0\n\
-_0807C3AC: .4byte 0xffe00000\n\
-_0807C3B0: .4byte sStartCopyrightBannerSpriteTemplate\n\
-_0807C3B4: .4byte gSprites\n\
- .syntax divided\n");
-}
-#endif
-
-static void CreateCopyrightBanner(s16 x, s16 y)
-{
- u8 i;
- u8 spriteId;
-
- x -= 64;
- for (i = 0; i < 5; i++, x += 32)
- {
- spriteId = CreateSprite(&sStartCopyrightBannerSpriteTemplate, x, y, 0);
- StartSpriteAnim(&gSprites[spriteId], i + 3);
- }
-}
-
-void SpriteCallback_PokemonLogoShine(struct Sprite *sprite)
-{
- if (gTasks[gUnknown_0202F7E4].data[1] == 0 && sprite->pos1.x < 272)
- {
- if (sprite->data[0]) //Flash background
- {
- u16 backgroundColor;
-
- if (sprite->pos1.x < DISPLAY_WIDTH / 2)
- {
- //Brighten background color
- if (sprite->data[1] < 31)
- sprite->data[1]++;
- if (sprite->data[1] < 31)
- sprite->data[1]++;
- }
- else
- {
- //Darken background color
- if (sprite->data[1] != 0)
- sprite->data[1]--;
- if (sprite->data[1] != 0)
- sprite->data[1]--;
- }
- backgroundColor = _RGB(sprite->data[1], sprite->data[1], sprite->data[1]);
- gPlttBufferFaded[0] = backgroundColor;
- gPlttBufferFaded[PLTT_BUFFER_INDEX] = backgroundColor;
- }
- sprite->pos1.x += 4;
- }
- else
- {
- gPlttBufferFaded[0] = RGB_BLACK;
- gPlttBufferFaded[PLTT_BUFFER_INDEX] = RGB_BLACK;
- DestroySprite(sprite);
- }
-}
-
-static void StartPokemonLogoShine(bool8 flashBackground)
-{
- u8 spriteId = CreateSprite(&sPokemonLogoShineSpriteTemplate, 0, 68, 0);
-
- gSprites[spriteId].oam.objMode = 2;
- gSprites[spriteId].data[0] = flashBackground;
-}
-
-static void VBlankCB(void)
-{
- ScanlineEffect_InitHBlankDmaTransfer();
- LoadOam();
- ProcessSpriteCopyRequests();
- TransferPlttBuffer();
- REG_BG1VOFS = gBattle_BG1_Y;
-}
-
-
-#define tCounter data[0]
-#define tSkipToNext data[1]
-
-void CB2_InitTitleScreen(void)
-{
- switch (gMain.state)
- {
- default:
- case 0:
- SetVBlankCallback(NULL);
- REG_BLDCNT = 0;
- REG_BLDALPHA = 0;
- REG_BLDY = 0;
- *((u16 *)PLTT) = RGB_WHITE;
- REG_DISPCNT = 0;
- REG_BG2CNT = 0;
- REG_BG1CNT = 0;
- REG_BG0CNT = 0;
- REG_BG2HOFS = 0;
- REG_BG2VOFS = 0;
- REG_BG1HOFS = 0;
- REG_BG1VOFS = 0;
- REG_BG0HOFS = 0;
- REG_BG0VOFS = 0;
- DmaFill16(3, 0, (void *)VRAM, 0x18000);
- DmaFill32(3, 0, (void *)OAM, 0x400);
- DmaFill16(3, 0, (void *)(PLTT + 2), 0x3FE);
- ResetPaletteFade();
- gMain.state = 1;
- break;
- case 1:
- LZ77UnCompVram(gUnknown_08E9D8CC, (void *)VRAM);
- LZ77UnCompVram(gUnknown_08E9F7E4, (void *)(VRAM + 0x4800));
- LoadPalette(gUnknown_08E9F624, 0, 0x1C0);
- LZ77UnCompVram(sLegendaryMonPixelData, (void *)(VRAM + 0x8000));
- LZ77UnCompVram(sLegendaryMonTilemap, (void *)(VRAM + 0xC000));
- LZ77UnCompVram(sBackdropTilemap, (void *)(VRAM + 0xC800));
- LoadPalette(sLegendaryMonPalettes, 0xE0, sizeof(sLegendaryMonPalettes));
- ScanlineEffect_Stop();
- ResetTasks();
- ResetSpriteData();
- FreeAllSpritePalettes();
- gReservedSpritePaletteCount = 14;
- LoadCompressedObjectPic(&gUnknown_08393EFC[0]);
- LoadCompressedObjectPic(&gUnknown_08393F8C[0]);
- LoadCompressedObjectPic(&sPokemonLogoShineSpriteSheet[0]);
- LoadPalette(gUnknown_08E9F624, 0x100, 0x1C0);
- LoadSpritePalette(&sPokemonLogoShinePalette[0]);
- gMain.state = 2;
- break;
- case 2:
- {
- u8 taskId = CreateTask(Task_TitleScreenPhase1, 0);
-
- gTasks[taskId].tCounter = 256;
- gTasks[taskId].tSkipToNext = FALSE;
- gTasks[taskId].data[2] = -16;
- gTasks[taskId].data[3] = -32;
- gUnknown_0202F7E4 = taskId;
- gMain.state = 3;
- break;
- }
- case 3:
- BeginNormalPaletteFade(-1, 1, 0x10, 0, 0xFFFF);
- SetVBlankCallback(VBlankCB);
- gMain.state = 4;
- break;
- case 4:
- {
- u16 savedIme;
-
- sub_813CE30(0x78, 0x50, 0x100, 0);
- REG_BG2X = -29 * 256;
- REG_BG2Y = -33 * 256;
- REG_WIN0H = 0;
- REG_WIN0V = 0;
- REG_WIN1H = 0;
- REG_WIN1V = 0;
- REG_WININ = 0x1F1F;
- REG_WINOUT = 0x3F1F;
- REG_BLDCNT = 0x84;
- REG_BLDALPHA = 0;
- REG_BLDY = 0x8;
- REG_BG0CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(24) | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_BG1CNT = BGCNT_PRIORITY(2) | BGCNT_CHARBASE(2) | BGCNT_SCREENBASE(25) | BGCNT_16COLOR | BGCNT_TXT256x256;
- REG_BG2CNT = BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(9) | BGCNT_256COLOR | BGCNT_AFF256x256;
- savedIme = REG_IME;
- REG_IME = 0;
- REG_IE |= INTR_FLAG_VBLANK;
- REG_IME = savedIme;
- REG_DISPSTAT |= DISPSTAT_VBLANK_INTR;
- REG_DISPCNT = DISPCNT_MODE_1
- | DISPCNT_OBJ_1D_MAP
- | DISPCNT_BG2_ON
- | DISPCNT_OBJ_ON
- | DISPCNT_WIN0_ON
- | DISPCNT_OBJWIN_ON;
- m4aSongNumStart(0x19D);
- gMain.state = 5;
- break;
- }
- case 5:
- if (!UpdatePaletteFade())
- {
- StartPokemonLogoShine(FALSE);
- ScanlineEffect_InitWave(0, DISPLAY_HEIGHT, 4, 4, 0, SCANLINE_EFFECT_REG_BG1HOFS, TRUE);
- SetMainCallback2(MainCB2);
- }
- break;
- }
-}
-
-static void MainCB2(void)
-{
- RunTasks();
- AnimateSprites();
- BuildOamBuffer();
- UpdatePaletteFade();
-}
-
-//Shine the Pokemon logo two more times, and fade in the version banner
-static void Task_TitleScreenPhase1(u8 taskId)
-{
- //Skip to next phase when A, B, Start, or Select is pressed
- if ((gMain.newKeys & A_B_START_SELECT) || gTasks[taskId].data[1] != 0)
- {
- gTasks[taskId].tSkipToNext = TRUE;
- gTasks[taskId].tCounter = 0;
- }
-
- if (gTasks[taskId].tCounter != 0)
- {
- u16 frameNum = gTasks[taskId].tCounter;
-
- if (frameNum == 160 || frameNum == 64)
- StartPokemonLogoShine(TRUE);
- gTasks[taskId].tCounter--;
- }
- else
- {
- u8 spriteId;
-
- REG_DISPCNT = DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON;
- REG_WININ = 0;
- REG_WINOUT = 0;
- REG_BLDCNT = 0x3F50;
- REG_BLDALPHA = 0x1F;
- REG_BLDY = 0;
-
- //Create left side of version banner
- spriteId = CreateSprite(&sVersionBannerLeftSpriteTemplate, VERSION_BANNER_LEFT_X, VERSION_BANNER_Y, 0);
- gSprites[spriteId].invisible = TRUE;
- gSprites[spriteId].data[1] = taskId;
-
- //Create right side of version banner
- spriteId = CreateSprite(&sVersionBannerRightSpriteTemplate, VERSION_BANNER_RIGHT_X, VERSION_BANNER_Y, 0);
- gSprites[spriteId].invisible = TRUE;
- gSprites[spriteId].data[1] = taskId;
-
- gTasks[taskId].data[5] = 88;
- gTasks[taskId].tCounter = 144;
- gTasks[taskId].func = Task_TitleScreenPhase2;
- }
-}
-
-//Create "Press Start" and copyright banners, and slide Pokemon logo up
-static void Task_TitleScreenPhase2(u8 taskId)
-{
- //Skip to next phase when A, B, Start, or Select is pressed
- if ((gMain.newKeys & A_B_START_SELECT) || gTasks[taskId].tSkipToNext)
- {
- gTasks[taskId].tSkipToNext = TRUE;
- gTasks[taskId].tCounter = 0;
- }
-
- if (gTasks[taskId].tCounter != 0)
- gTasks[taskId].tCounter--;
- else
- {
- gTasks[taskId].tSkipToNext = TRUE;
- REG_DISPCNT = DISPCNT_MODE_1
- | DISPCNT_OBJ_1D_MAP
- | DISPCNT_BG0_ON
- | DISPCNT_BG1_ON
- | DISPCNT_BG2_ON
- | DISPCNT_OBJ_ON;
- CreatePressStartBanner(START_BANNER_X, 108);
- CreateCopyrightBanner(DISPLAY_WIDTH / 2, 148);
- gTasks[taskId].data[4] = 0;
- gTasks[taskId].func = Task_TitleScreenPhase3;
- }
-
- if (!(gTasks[taskId].tCounter & 1) && gTasks[taskId].data[3] != 0)
- gTasks[taskId].data[3]++;
-
- //Slide Pokemon logo up
- REG_BG2Y = gTasks[taskId].data[3] * 256;
-}
-
-//Show Kyogre/Groundon silhouette and process main title screen input
-static void Task_TitleScreenPhase3(u8 taskId)
-{
- REG_BLDCNT = 0x2142;
- REG_BLDALPHA = 0x1F0F;
- REG_BLDY = 0;
-
- if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & START_BUTTON))
- {
- FadeOutBGM(4);
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0xFFFF);
- SetMainCallback2(CB2_GoToMainMenu);
- }
- else
- {
- if ((gMain.heldKeys & CLEAR_SAVE_BUTTON_COMBO) == CLEAR_SAVE_BUTTON_COMBO)
- SetMainCallback2(CB2_GoToClearSaveDataScreen);
- if ((gMain.heldKeys & RESET_RTC_BUTTON_COMBO) == RESET_RTC_BUTTON_COMBO
- && CanResetRTC() == 1)
- {
- FadeOutBGM(4);
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
- SetMainCallback2(CB2_GoToResetRtcScreen);
- }
-#if DEBUG
- else if (gMain.heldKeys == SELECT_BUTTON)
- {
- BeginNormalPaletteFade(-1, 0, 0, 16, 0);
- SetMainCallback2(CB2_GoToTestMenu);
- }
-#endif
- else
- {
- REG_BG2Y = 0;
- gTasks[taskId].tCounter++;
- if (gTasks[taskId].tCounter & 1)
- {
- gTasks[taskId].data[4]++;
- gBattle_BG1_Y = gTasks[taskId].data[4];
- gBattle_BG1_X = 0;
- }
- UpdateLegendaryMarkingColor(gTasks[taskId].tCounter);
- if ((gMPlay_BGM.status & 0xFFFF) == 0)
- {
- BeginNormalPaletteFade(-1, 0, 0, 0x10, 0xFFFF);
- SetMainCallback2(CB2_GoToCopyrightScreen);
- }
- }
- }
-}
-
-static void CB2_GoToMainMenu(void)
-{
- if (!UpdatePaletteFade())
- SetMainCallback2(CB2_InitMainMenu);
-}
-
-#if DEBUG
-static void CB2_GoToTestMenu(void)
-{
- if (!UpdatePaletteFade())
- SetMainCallback2(CB2_InitTestMenu);
-}
-#endif
-
-static void CB2_GoToCopyrightScreen(void)
-{
- if (!UpdatePaletteFade())
- SetMainCallback2(CB2_InitCopyrightScreenAfterTitleScreen);
-}
-
-static void CB2_GoToClearSaveDataScreen(void)
-{
- if (!UpdatePaletteFade())
- SetMainCallback2(CB2_InitClearSaveDataScreen);
-}
-
-static void CB2_GoToResetRtcScreen(void)
-{
- if (!UpdatePaletteFade())
- SetMainCallback2(CB2_InitResetRtcScreen);
-}
-
-static void UpdateLegendaryMarkingColor(u8 frameNum)
-{
- u16 palette;
-
- if ((frameNum % 4) == 0) //Change color every 4th frame
- {
- u8 colorIntensity = (frameNum >> 2) & 31; //Take bits 2-6 of frameNum the color intensity
- u8 fadeDarker = (frameNum >> 2) & 32;
-
- if (!fadeDarker)
- palette = LEGENDARY_MARKING_COLOR(colorIntensity);
- else
- palette = LEGENDARY_MARKING_COLOR(31 - colorIntensity);
- LoadPalette(&palette, 0xEF, sizeof(palette));
- }
-}
-