summaryrefslogtreecommitdiff
path: root/src/scene/berry_blender.c
diff options
context:
space:
mode:
authorcamthesaxman <cameronghall@cox.net>2018-02-18 19:59:51 -0600
committercamthesaxman <cameronghall@cox.net>2018-02-18 19:59:51 -0600
commitdaa05c1b7c5e079ad8554e88a290e07b333bd2db (patch)
treef635e307268f6e6027423369d221e2adf32b438d /src/scene/berry_blender.c
parent2e21a867487e2187a954a351f775bd3f3a9535b1 (diff)
remove subdirectories
Diffstat (limited to 'src/scene/berry_blender.c')
-rw-r--r--src/scene/berry_blender.c3560
1 files changed, 0 insertions, 3560 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);
- }
-}