diff options
author | camthesaxman <cameronghall@cox.net> | 2018-02-18 19:59:51 -0600 |
---|---|---|
committer | camthesaxman <cameronghall@cox.net> | 2018-02-18 19:59:51 -0600 |
commit | daa05c1b7c5e079ad8554e88a290e07b333bd2db (patch) | |
tree | f635e307268f6e6027423369d221e2adf32b438d /src/scene | |
parent | 2e21a867487e2187a954a351f775bd3f3a9535b1 (diff) |
remove subdirectories
Diffstat (limited to 'src/scene')
-rw-r--r-- | src/scene/berry_blender.c | 3560 | ||||
-rw-r--r-- | src/scene/cable_car.c | 1077 | ||||
-rw-r--r-- | src/scene/contest_painting.c | 786 | ||||
-rw-r--r-- | src/scene/credits.c | 1677 | ||||
-rw-r--r-- | src/scene/cute_sketch.c | 164 | ||||
-rw-r--r-- | src/scene/egg_hatch.c | 838 | ||||
-rw-r--r-- | src/scene/evolution_graphics.c | 614 | ||||
-rw-r--r-- | src/scene/evolution_scene.c | 3959 | ||||
-rw-r--r-- | src/scene/hall_of_fame.c | 1366 | ||||
-rw-r--r-- | src/scene/intro.c | 2810 | ||||
-rw-r--r-- | src/scene/intro_credits_graphics.c | 645 | ||||
-rw-r--r-- | src/scene/new_game.c | 236 | ||||
-rw-r--r-- | src/scene/title_screen.c | 911 |
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 = ®_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)); - } -} - |