From e67214db6c4b7a655726134cdbefa4da20a0c8a9 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 5 Aug 2017 21:53:51 +0200 Subject: start decompiling berry blender --- src/berry_blender.c | 903 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 903 insertions(+) create mode 100644 src/berry_blender.c (limited to 'src') diff --git a/src/berry_blender.c b/src/berry_blender.c new file mode 100644 index 000000000..7e7f58db7 --- /dev/null +++ b/src/berry_blender.c @@ -0,0 +1,903 @@ +#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 "berry.h" +#include "string_util.h" +#include "link.h" +#include "task.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; +}; + +// other files functions +void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s16 pitch); +void sub_80A6978(void); +u8 sub_80A7DEC(u8 berryId, u8 x, u8 y, bool8 animate); + +#define BLENDER_MAX_PLAYERS 4 + +struct BlenderBerry +{ + u16 field_0; + u8 name[7]; + u8 spicy; + u8 dry; + u8 sweet; + u8 bitter; + u8 sour; + u8 smoothness; +}; + +struct BerryBlenderData +{ + u8 field_0; + u8 field_1; + u8 field_2; + u8 field_3; + u8 field_4; + u8 field_5; + u8 field_6; + u8 field_7; + u8 field_8; + u8 field_9; + u8 field_A; + u8 field_B; + u8 field_C; + u8 field_D; + u8 field_E; + u8 field_F; + u8 field_10; + u8 field_11; + u8 field_12; + u8 field_13; + u8 field_14; + u8 field_15; + u8 field_16; + u8 field_17; + u8 field_18; + u8 field_19; + u8 field_1A; + u8 field_1B; + u8 field_1C; + u8 field_1D; + u8 field_1E; + u8 field_1F; + u8 field_20; + u8 field_21; + u8 field_22; + u8 field_23; + u8 field_24; + u8 field_25; + u8 field_26; + u8 field_27; + u8 field_28; + u8 field_29; + u8 field_2A; + u8 field_2B; + u8 field_2C; + u8 field_2D; + u8 field_2E; + u8 field_2F; + u8 field_30; + u8 field_31; + u8 field_32; + u8 field_33; + u8 field_34; + 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 field_50; + u8 field_51; + u8 field_52; + u8 field_53; + u16 field_54; + s16 hitPitch; //56 + u8 field_58; + u8 field_59; + u16 field_5A; + u8 SyncArrowSpriteID[BLENDER_MAX_PLAYERS]; + u8 field_60; + u8 field_61; + u8 field_62; + u8 field_63; + 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]; + u8 field_78; + u8 field_79; + u8 field_7A; + u8 field_7B; + u16 field_7C; + u8 field_7E; + u8 field_7F; + u16 field_80[BLENDER_MAX_PLAYERS]; + u8 field_88; + 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; + u8 field_94; + u8 field_95; + u8 field_96; + u8 field_97; + u8 field_98; + u8 field_99; + u8 field_9A; + u8 field_9B; + u8 field_9C; + u8 field_9D; + u8 field_9E; + u8 field_9F; + u8 field_A0; + u8 field_A1; + u8 field_A2; + u8 field_A3; + u8 field_A4; + u8 field_A5; + u8 field_A6; + u8 field_A7; + u8 field_A8; + u8 field_A9; + u8 field_AA; + u8 field_AB; + u8 field_AC; + u8 field_AD; + u8 field_AE; + u8 field_AF; + u8 field_B0; + u8 field_B1; + u8 field_B2; + u8 field_B3; + u8 field_B4; + u8 field_B5; + u8 field_B6; + u8 field_B7; + u8 field_B8; + u8 field_B9; + u8 field_BA; + u8 field_BB; + u8 field_BC; + u8 field_BD; + u8 field_BE; + u8 field_BF; + u8 field_C0; + u8 field_C1; + u8 field_C2; + u8 field_C3; + u8 field_C4; + u8 field_C5; + u8 field_C6; + u8 field_C7; + u8 field_C8; + u8 field_C9; + u8 field_CA; + u8 field_CB; + u8 field_CC; + u8 field_CD; + u8 field_CE; + u8 field_CF; + u8 field_D0; + u8 field_D1; + u8 field_D2; + u8 field_D3; + u8 field_D4; + u8 field_D5; + u8 field_D6; + u8 field_D7; + u8 field_D8; + u8 field_D9; + u8 field_DA; + u8 field_DB; + u8 field_DC; + u8 field_DD; + u8 field_DE; + u8 field_DF; + u8 field_E0; + u8 field_E1; + u8 field_E2; + u8 field_E3; + u8 field_E4; + u8 field_E5; + u8 field_E6; + u8 field_E7; + u8 field_E8; + u8 field_E9; + u8 field_EA; + u8 field_EB; + u8 field_EC; + u8 field_ED; + u8 field_EE; + u8 field_EF; + u8 field_F0; + u8 field_F1; + u8 field_F2; + u8 field_F3; + u8 field_F4; + u8 field_F5; + u8 field_F6; + u8 field_F7; + u8 field_F8; + u8 field_F9; + u8 field_FA; + u8 field_FB; + u8 field_FC; + u8 field_FD; + u8 field_FE; + u8 field_FF; + u8 field_100; + u8 field_101; + u8 field_102; + u8 field_103; + u8 field_104; + u8 field_105; + u8 field_106; + u8 field_107; + u8 field_108; + u8 field_109; + u8 field_10A; + u8 field_10B; + u8 field_10C; + u8 field_10D; + u8 field_10E; + u8 field_10F; + u8 field_110; + u8 field_111; + u8 field_112; + u8 field_113; + u8 field_114; + u8 field_115; + u8 field_116; + u8 field_117; + u8 field_118; + u8 field_119; + u8 field_11A; + u8 field_11B; + u8 field_11C; + u8 field_11D; + u8 field_11E; + u8 field_11F; + u8 field_120; + u8 field_121; + u8 field_122; + u8 field_123; + u8 field_124; + u8 field_125; + u8 field_126; + u8 field_127; + u8 field_128; + u8 field_129; + u8 field_12A; + u8 field_12B; + u8 field_12C; + u8 field_12D; + u8 field_12E; + u8 field_12F; + u32 field_130; + 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; + u16 field_144; + u16 field_146; + u8 field_148; + u8 field_149; + u8 field_14A; + u8 field_14B; + u16 field_14C[BLENDER_MAX_PLAYERS][2]; + u8 field_15C; + u8 field_15D; + u8 field_15E; + u8 field_15F; + u8 field_160; + u8 field_161; + u8 field_162; + u8 field_163; + u8 field_164; + u8 field_165; + u8 field_166; + u8 field_167; + u8 field_168; + u8 field_169; + u8 field_16A; + u8 field_16B; + u8 field_16C; + u8 field_16D; + u8 field_16E; + u8 field_16F; + u8 field_170; + u8 field_171; + u8 field_172; + u8 field_173; + u8 field_174; + u8 field_175; + u8 field_176; + u8 field_177; + u8 field_178; + u8 field_179; + u8 field_17A; + u8 field_17B; + struct BlenderBerry blendedBerries[BLENDER_MAX_PLAYERS]; +}; + +extern struct BerryBlenderData* sBerryBlenderData; + +extern struct MusicPlayerInfo gMPlay_SE2; +extern u8 ewram[]; + +// this file's functions: +void sub_80514A4(void); +void sub_80514F0(void); +void sub_804E56C(void); +void sub_804E884(u8 a0); +void sub_8051474(void); +void sub_804E9F8(void); +void sub_804F378(void); +void sub_8051414(void*); + +void Blender_ControlHitPitch(void) +{ + m4aMPlayPitchControl(&gMPlay_SE2, 0xFFFF, (sBerryBlenderData->hitPitch - 128) * 2); +} + +void VBlankCB0_BerryBlender(void) +{ + sub_80514A4(); + sub_80514F0(); + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void VBlankCB1_BerryBlender(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +extern const u8 gUnknown_08E6C100[]; +extern const u8 gUnknown_08215C2C[]; +extern const u8 gUnknown_08E6C920[]; +extern const u8 gUnknown_08E6D354[]; +extern const u16 gUnknown_08215C0C[]; +extern const u16 gUnknown_0821602C[]; +extern const struct SpriteSheet gUnknown_082163DC; +extern const struct SpriteSheet gUnknown_082164F4; +extern const struct SpriteSheet gUnknown_08216454; +extern const struct SpriteSheet gUnknown_08216540; +extern const struct SpriteSheet gUnknown_08216574; +extern const struct SpritePalette gUnknown_082163EC; +extern const struct SpritePalette gUnknown_082163E4; + +bool8 sub_804E2EC(void) +{ + switch (sBerryBlenderData->field_1) + { + case 0: + sub_800D238(gUnknown_08E6C100, &ewram[0x10000]); + sBerryBlenderData->field_1++; + break; + case 1: + { + const void* offsetRead = gUnknown_08215C2C; + void* offsetWrite = (void*)(VRAM + 0x4000); + + DmaCopy16(3, offsetRead, offsetWrite, 0x400); + LoadPalette(gUnknown_08215C0C, 0, 0x100); + sBerryBlenderData->field_1++; + } + break; + case 2: + { + void* offsetRead = &ewram[0x10000]; + void* offsetWrite = (void*)(VRAM); + u32 size = 0x2000; + while (TRUE) + { + DmaCopy16(3, offsetRead, offsetWrite, 0x1000); + offsetRead += 0x1000; + offsetWrite += 0x1000; + size -= 0x1000; + if (size <= 0x1000) + { + DmaCopy16(3, offsetRead, offsetWrite, size); + break; + } + } + sBerryBlenderData->field_1++; + } + break; + case 3: + sub_800D238(gUnknown_08E6C920, &ewram[0x10000]); + sBerryBlenderData->field_1++; + break; + case 4: + sub_800D238(gUnknown_08E6D354, &ewram[0x13000]); + sBerryBlenderData->field_1++; + break; + case 5: + { + void* offsetRead = &ewram[0x10000]; + void* offsetWrite = (void*)(VRAM + 0xE000); + + DmaCopy16(3, offsetRead, offsetWrite, 0x1000); + sBerryBlenderData->field_1++; + } + break; + case 6: + { + void* offsetRead = &ewram[0x11000]; + void* offsetWrite = (void*)(VRAM + 0xF000); + + DmaCopy16(3, offsetRead, offsetWrite, 0x1000); + sBerryBlenderData->field_1++; + } + break; + case 7: + { + u16 i; + u16* palStore = (u16*)(&ewram[0x13000]); + void* offsetRead; + void* offsetWrite; + + for (i = 0; i < 640; i++) + { + *(palStore + i) |= 0x100; + } + offsetRead = &ewram[0x13000]; + offsetWrite = (void*)(VRAM + 0x6000); + DmaCopy16(3, offsetRead, offsetWrite, 0x500); + LoadPalette(gUnknown_0821602C, 0x80, 0x20); + sBerryBlenderData->field_1++; + } + break; + case 8: + LoadSpriteSheet(&gUnknown_082163DC); + LoadSpriteSheet(&gUnknown_082164F4); + LoadSpriteSheet(&gUnknown_08216454); + sBerryBlenderData->field_1++; + break; + case 9: + LoadSpriteSheet(&gUnknown_08216540); + LoadSpriteSheet(&gUnknown_08216574); + LoadSpritePalette(&gUnknown_082163EC); + LoadSpritePalette(&gUnknown_082163E4); + sBerryBlenderData->field_1 = 0; + return 1; + } + return 0; +} + +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 sub_804E538(void) +{ + u8* field6F; //this temp value is needed to match + + sBerryBlenderData = (struct BerryBlenderData*)(&ewram[0x18000]); + + field6F = &sBerryBlenderData->field_6F; + sBerryBlenderData->field_0 = 0; + *field6F = 0; + + sub_804E884(gSpecialVar_0x8004); + SetMainCallback2(sub_804E56C); +} + +extern const struct WindowConfig gWindowConfig_81E6F68; +extern const u8 sBlenderSyncArrowsPos[][2]; +extern const struct SpriteTemplate sBlenderSyncArrow_SpriteTemplate; + +void sub_804E56C(void) +{ + s32 i; + switch (sBerryBlenderData->field_0) + { + case 0: + REG_DISPCNT = 0; + ResetSpriteData(); + FreeAllSpritePalettes(); + SetVBlankCallback(NULL); + SetUpWindowConfig(&gWindowConfig_81E6F68); + InitMenuWindow(&gWindowConfig_81E6F68); + sBerryBlenderData->field_0++; + sBerryBlenderData->field_140 = 0; + sBerryBlenderData->field_13E = 0; + sBerryBlenderData->field_142 = 0x50; + sBerryBlenderData->field_144 = 0; + sBerryBlenderData->field_146 = 0; + sBerryBlenderData->field_1 = 0; + sub_8051474(); + break; + case 1: + if (sub_804E2EC()) + { + for (i = 0; i < BLENDER_MAX_PLAYERS; i++) + { + sBerryBlenderData->SyncArrowSpriteID[i] = CreateSprite(&sBlenderSyncArrow_SpriteTemplate, sBlenderSyncArrowsPos[i][0], sBlenderSyncArrowsPos[i][1], 1); + StartSpriteAnim(&gSprites[sBerryBlenderData->SyncArrowSpriteID[i]], i + 8); + } + SetVBlankCallback(VBlankCB0_BerryBlender); + sBerryBlenderData->field_0++; + } + break; + case 2: + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + sub_8051474(); + sBerryBlenderData->field_0++; + break; + case 3: + sub_804E4FC(); + if (!gPaletteFade.active) + { + sBerryBlenderData->field_0++; + } + break; + case 4: + MenuDrawTextWindow(0, 14, 29, 19); + MenuPrintMessage(gOtherText_BlenderChooseBerry, 1, 15); + sBerryBlenderData->field_0++; + break; + case 5: + if (MenuUpdateWindowText()) + { + sBerryBlenderData->field_0++; + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + } + break; + case 6: + if (!gPaletteFade.active) + { + sub_80A6978(); + sBerryBlenderData->field_0 = 0; + } + break; + } + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_804E738(struct Sprite* sprite) +{ + sprite->data1 += sprite->data6; + sprite->data2 -= sprite->data4; + sprite->data2 += sprite->data7; + sprite->data0 += sprite->data7; + sprite->data4--; + + if (sprite->data0 < sprite->data2) + { + sprite->data3 = sprite->data4 = sprite->data3 - 1; + if (++sprite->data5 > 3) + DestroySprite(sprite); + else + PlaySE(116); + } + sprite->pos1.x = sprite->data1; + sprite->pos1.y = sprite->data2; +} + +void sub_804E794(struct Sprite* sprite, s16 a2, s16 a3, s16 a4, s16 a5, s16 a6) +{ + sprite->data0 = a3; + sprite->data1 = a2; + sprite->data2 = a3; + sprite->data3 = a4; + sprite->data4 = 10; + sprite->data5 = 0; + sprite->data6 = a5; + sprite->data7 = a6; + sprite->callback = sub_804E738; +} + +extern const s16 gUnknown_08216594[][5]; + +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]); +} + +void Blender_CopyBerryData(struct BlenderBerry* berry, u16 itemID) +{ + const struct Berry *berryInfo = GetBerryInfo(itemID + 124); + berry->field_0 = itemID; + StringCopy(berry->name, berryInfo->name); + berry->spicy = berryInfo->spicy; + berry->dry = berryInfo->dry; + berry->sweet = berryInfo->sweet; + berry->bitter = berryInfo->bitter; + berry->sour = berryInfo->sour; + berry->smoothness = berryInfo->smoothness; +} + +extern u8 gUnknown_03004834; +extern const u8* const gUnknown_082162B8[]; + +void sub_804E884(u8 a0) +{ + int i; + if (a0) + { + for (i = 0; i < 4; i++) + gLinkPlayers[i].language = LANGUAGE_ENGLISH; + } + switch (a0) + { + case 0: + gUnknown_03004834 = 0; + break; + case 1: + gUnknown_03004834 = 1; + sBerryBlenderData->field_88 = 2; + StringCopy(gLinkPlayers[0].name, gSaveBlock2.playerName); + StringCopy(gLinkPlayers[1].name, gUnknown_082162B8[0]); + break; + case 2: + gUnknown_03004834 = 2; + sBerryBlenderData->field_88 = 3; + StringCopy(gLinkPlayers[0].name, gSaveBlock2.playerName); + StringCopy(gLinkPlayers[1].name, gUnknown_082162B8[0]); + StringCopy(gLinkPlayers[2].name, gUnknown_082162B8[1]); + break; + case 3: + gUnknown_03004834 = 3; + sBerryBlenderData->field_88 = 4; + StringCopy(gLinkPlayers[0].name, gSaveBlock2.playerName); + StringCopy(gLinkPlayers[1].name, gUnknown_082162B8[0]); + StringCopy(gLinkPlayers[2].name, gUnknown_082162B8[1]); + StringCopy(gLinkPlayers[3].name, gUnknown_082162B8[2]); + break; + } +} + +void sub_804E990(void) +{ + s32 i; + + REG_DISPCNT = 0; + sBerryBlenderData = (struct BerryBlenderData*)(&ewram[0x18000]); + sBerryBlenderData->field_0 = 0; + sBerryBlenderData->field_134 = 0; + for (i = 0; i < BLENDER_MAX_PLAYERS; i++) + { + sBerryBlenderData->field_80[i] = 0; + } + sub_804E884(gSpecialVar_0x8004); + if (gSpecialVar_0x8004 == 0) + SetMainCallback2(sub_804E9F8); + else + SetMainCallback2(sub_804F378); +} + +extern u16 gScriptItemId; + +extern const u8 gUnknown_082162EC[3][4]; +extern const u16 gUnknown_082162F8[]; +extern const u8 gUnknown_08216300[]; + +void sub_804E9F8(void) +{ + int i, j; + switch (sBerryBlenderData->field_0) + { + case 0: + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + SetVBlankCallback(VBlankCB0_BerryBlender); + SetUpWindowConfig(&gWindowConfig_81E6F68); + InitMenuWindow(&gWindowConfig_81E6F68); + gLinkType = 0x4422; + sBerryBlenderData->field_0++; + sBerryBlenderData->field_4E = 0; + sBerryBlenderData->field_7E = 0; + sBerryBlenderData->field_144 = 0; + sBerryBlenderData->field_146 = 0; + for (i = 0; i < BLENDER_MAX_PLAYERS; i++) + { + sBerryBlenderData->field_70[i] = 0; + for (j = 0; j < 2; j++) + { + sBerryBlenderData->field_14C[i][j] = 0; + } + } + sBerryBlenderData->field_7C = 0; + sBerryBlenderData->hitPitch = 0; + sBerryBlenderData->field_54 = 0; + sBerryBlenderData->field_5A = 0; + sBerryBlenderData->field_1 = 0; + break; + case 1: + if (!sub_804E2EC()) + { + sBerryBlenderData->field_0++; + sub_8051474(); + } + break; + case 2: + for (i = 0; i < BLENDER_MAX_PLAYERS; i++) + { + sBerryBlenderData->SyncArrowSpriteID[i] = CreateSprite(&sBlenderSyncArrow_SpriteTemplate, sBlenderSyncArrowsPos[i][0], sBlenderSyncArrowsPos[i][1], 1); + StartSpriteAnim(&gSprites[sBerryBlenderData->SyncArrowSpriteID[i]], i + 8); + } + sBerryBlenderData->field_0++; + break; + case 3: + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + sBerryBlenderData->field_0++; + break; + case 4: + sub_804E4FC(); + if (!gPaletteFade.active) + { + sBerryBlenderData->field_0++; + } + break; + case 5: + MenuDrawTextWindow(0, 14, 29, 19); + MenuPrint(gOtherText_BlenderChooseBerry, 1, 15); + sBerryBlenderData->field_0 = 8; + sBerryBlenderData->field_130 = 0; + break; + case 8: + sBerryBlenderData->field_0++; + sBerryBlenderData->field_13C = 0; + Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[0], gScriptItemId); + memcpy(gBlockSendBuffer, &sBerryBlenderData->blendedBerries[0], sizeof(struct BlenderBerry)); + sub_80084A4(); + sBerryBlenderData->field_130 = 0; + break; + case 9: + if (sub_8007ECC()) + { + ResetBlockReceivedFlags(); + if (GetMultiplayerId() == 0) + sub_8007E9C(4); + sBerryBlenderData->field_0++; + } + break; + case 10: + if (++sBerryBlenderData->field_130 > 20) + { + MenuZeroFillScreen(); + if (GetBlockReceivedStatus() == sub_8008198()) + { + for (i = 0; i < GetLinkPlayerCount(); i++) + { + memcpy(&sBerryBlenderData->blendedBerries[i], &gBlockRecvBuffer[i][256], sizeof(struct BlenderBerry)); + sBerryBlenderData->field_80[i] = sBerryBlenderData->blendedBerries[i].field_0; + } + ResetBlockReceivedFlags(); + sBerryBlenderData->field_0++; + } + } + break; + case 11: + sBerryBlenderData->field_88 = GetLinkPlayerCount(); + for (i = 0; i < BLENDER_MAX_PLAYERS; i++) + { + if (sBerryBlenderData->field_13C == gUnknown_082162EC[sBerryBlenderData->field_88][i]) + { + sub_804E7C0(sBerryBlenderData->field_80[sBerryBlenderData->field_88], i); + break; + } + } + sBerryBlenderData->field_130 = 0; + sBerryBlenderData->field_0++; + sBerryBlenderData->field_13C++; + break; + case 12: + if (++sBerryBlenderData->field_130 > 60) + { + if (sBerryBlenderData->field_13C >= sBerryBlenderData->field_88) + { + sBerryBlenderData->field_0++; + sBerryBlenderData->field_54 = gUnknown_082162F8[gUnknown_08216300[sBerryBlenderData->field_88 - 2]] - 22528; + } + else + sBerryBlenderData->field_0--; + sBerryBlenderData->field_130 = 0; + } + break; + case 13: + if (sub_8007ECC()) + { + sBerryBlenderData->field_0++; + sub_8051414(&sBerryBlenderData->field_168); + } + break; + case 14: + + break; + } + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} -- cgit v1.2.3 From f7c33068ff9eafaf111985dc934e83d773183ba9 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 6 Aug 2017 18:16:56 +0200 Subject: fake matching troubles --- src/berry_blender.c | 594 ++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 533 insertions(+), 61 deletions(-) (limited to 'src') diff --git a/src/berry_blender.c b/src/berry_blender.c index 7e7f58db7..47aebf513 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -11,6 +11,9 @@ #include "string_util.h" #include "link.h" #include "task.h" +#include "rom4.h" +#include "items.h" +#include "rng.h" //needed to match Blender_ControlHitPitch struct MusicPlayerInfo @@ -45,15 +48,17 @@ u8 sub_80A7DEC(u8 berryId, u8 x, u8 y, bool8 animate); #define BLENDER_MAX_PLAYERS 4 +#define FLAVOUR_SPICY 0 +#define FLAVOUR_DRY 1 +#define FLAVOUR_SWEET 2 +#define FLAVOUR_BITTER 3 +#define FLAVOUR_SOUR 4 + struct BlenderBerry { u16 field_0; u8 name[7]; - u8 spicy; - u8 dry; - u8 sweet; - u8 bitter; - u8 sour; + u8 flavours[5]; u8 smoothness; }; @@ -142,16 +147,13 @@ struct BerryBlenderData u8 field_51; u8 field_52; u8 field_53; - u16 field_54; + u16 arrowPos; s16 hitPitch; //56 u8 field_58; u8 field_59; u16 field_5A; u8 SyncArrowSpriteID[BLENDER_MAX_PLAYERS]; - u8 field_60; - u8 field_61; - u8 field_62; - u8 field_63; + u8 SyncArrowSprite2ID[BLENDER_MAX_PLAYERS]; u8 field_64; u8 field_65; u8 field_66; @@ -191,22 +193,8 @@ struct BerryBlenderData u8 field_97; u8 field_98; u8 field_99; - u8 field_9A; - u8 field_9B; - u8 field_9C; - u8 field_9D; - u8 field_9E; - u8 field_9F; - u8 field_A0; - u8 field_A1; - u8 field_A2; - u8 field_A3; - u8 field_A4; - u8 field_A5; - u8 field_A6; - u8 field_A7; - u8 field_A8; - u8 field_A9; + u16 field_9A[BLENDER_MAX_PLAYERS]; + u16 field_A2[BLENDER_MAX_PLAYERS]; u8 field_AA; u8 field_AB; u8 field_AC; @@ -337,11 +325,8 @@ struct BerryBlenderData u8 field_129; u8 field_12A; u8 field_12B; - u8 field_12C; - u8 field_12D; - u8 field_12E; - u8 field_12F; - u32 field_130; + u32 field_12C; + s32 field_130; u32 field_134; u8 field_138; u8 field_139; @@ -354,19 +339,9 @@ struct BerryBlenderData u16 field_142; u16 field_144; u16 field_146; - u8 field_148; - u8 field_149; - u8 field_14A; + u8 field_148[3]; u8 field_14B; - u16 field_14C[BLENDER_MAX_PLAYERS][2]; - u8 field_15C; - u8 field_15D; - u8 field_15E; - u8 field_15F; - u8 field_160; - u8 field_161; - u8 field_162; - u8 field_163; + u16 field_14C[BLENDER_MAX_PLAYERS][3]; u8 field_164; u8 field_165; u8 field_166; @@ -387,8 +362,7 @@ struct BerryBlenderData u8 field_175; u8 field_176; u8 field_177; - u8 field_178; - u8 field_179; + u16 field_178; u8 field_17A; u8 field_17B; struct BlenderBerry blendedBerries[BLENDER_MAX_PLAYERS]; @@ -408,6 +382,12 @@ void sub_8051474(void); void sub_804E9F8(void); void sub_804F378(void); void sub_8051414(void*); +void sub_804F238(void); +void sub_80501FC(void); +bool8 sub_8051B8C(void); +void sub_80516C4(u8 a0, u16 itemID); +void sub_804F2A8(void); +void sub_804F81C(void); void Blender_ControlHitPitch(void) { @@ -688,11 +668,11 @@ void Blender_CopyBerryData(struct BlenderBerry* berry, u16 itemID) const struct Berry *berryInfo = GetBerryInfo(itemID + 124); berry->field_0 = itemID; StringCopy(berry->name, berryInfo->name); - berry->spicy = berryInfo->spicy; - berry->dry = berryInfo->dry; - berry->sweet = berryInfo->sweet; - berry->bitter = berryInfo->bitter; - berry->sour = berryInfo->sour; + 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; } @@ -760,6 +740,7 @@ extern u16 gScriptItemId; extern const u8 gUnknown_082162EC[3][4]; extern const u16 gUnknown_082162F8[]; extern const u8 gUnknown_08216300[]; +extern const struct SpriteTemplate gSpriteTemplate_8216548; void sub_804E9F8(void) { @@ -782,19 +763,19 @@ void sub_804E9F8(void) for (i = 0; i < BLENDER_MAX_PLAYERS; i++) { sBerryBlenderData->field_70[i] = 0; - for (j = 0; j < 2; j++) + for (j = 0; j < 3; j++) { sBerryBlenderData->field_14C[i][j] = 0; } } sBerryBlenderData->field_7C = 0; sBerryBlenderData->hitPitch = 0; - sBerryBlenderData->field_54 = 0; + sBerryBlenderData->arrowPos = 0; sBerryBlenderData->field_5A = 0; sBerryBlenderData->field_1 = 0; break; case 1: - if (!sub_804E2EC()) + if (sub_804E2EC()) { sBerryBlenderData->field_0++; sub_8051474(); @@ -803,8 +784,8 @@ void sub_804E9F8(void) case 2: for (i = 0; i < BLENDER_MAX_PLAYERS; i++) { - sBerryBlenderData->SyncArrowSpriteID[i] = CreateSprite(&sBlenderSyncArrow_SpriteTemplate, sBlenderSyncArrowsPos[i][0], sBlenderSyncArrowsPos[i][1], 1); - StartSpriteAnim(&gSprites[sBerryBlenderData->SyncArrowSpriteID[i]], i + 8); + sBerryBlenderData->SyncArrowSprite2ID[i] = CreateSprite(&sBlenderSyncArrow_SpriteTemplate, sBlenderSyncArrowsPos[i][0], sBlenderSyncArrowsPos[i][1], 1); + StartSpriteAnim(&gSprites[sBerryBlenderData->SyncArrowSprite2ID[i]], i + 8); } sBerryBlenderData->field_0++; break; @@ -820,8 +801,8 @@ void sub_804E9F8(void) } break; case 5: - MenuDrawTextWindow(0, 14, 29, 19); - MenuPrint(gOtherText_BlenderChooseBerry, 1, 15); + MenuDrawTextWindow(0, 13, 29, 19); + MenuPrint(gOtherText_LinkStandby3, 1, 14); sBerryBlenderData->field_0 = 8; sBerryBlenderData->field_130 = 0; break; @@ -850,7 +831,7 @@ void sub_804E9F8(void) { for (i = 0; i < GetLinkPlayerCount(); i++) { - memcpy(&sBerryBlenderData->blendedBerries[i], &gBlockRecvBuffer[i][256], sizeof(struct BlenderBerry)); + memcpy(&sBerryBlenderData->blendedBerries[i], &gBlockRecvBuffer[i][0], sizeof(struct BlenderBerry)); sBerryBlenderData->field_80[i] = sBerryBlenderData->blendedBerries[i].field_0; } ResetBlockReceivedFlags(); @@ -862,9 +843,9 @@ void sub_804E9F8(void) sBerryBlenderData->field_88 = GetLinkPlayerCount(); for (i = 0; i < BLENDER_MAX_PLAYERS; i++) { - if (sBerryBlenderData->field_13C == gUnknown_082162EC[sBerryBlenderData->field_88][i]) + if (sBerryBlenderData->field_13C == gUnknown_082162EC[sBerryBlenderData->field_88 - 2][i]) { - sub_804E7C0(sBerryBlenderData->field_80[sBerryBlenderData->field_88], i); + sub_804E7C0(sBerryBlenderData->field_80[sBerryBlenderData->field_13C], i); break; } } @@ -878,7 +859,7 @@ void sub_804E9F8(void) if (sBerryBlenderData->field_13C >= sBerryBlenderData->field_88) { sBerryBlenderData->field_0++; - sBerryBlenderData->field_54 = gUnknown_082162F8[gUnknown_08216300[sBerryBlenderData->field_88 - 2]] - 22528; + sBerryBlenderData->arrowPos = gUnknown_082162F8[gUnknown_08216300[sBerryBlenderData->field_88 - 2]] - 22528; } else sBerryBlenderData->field_0--; @@ -893,7 +874,329 @@ void sub_804E9F8(void) } break; case 14: + REG_DISPCNT |= 0x400; + sBerryBlenderData->arrowPos += 0x200; + sBerryBlenderData->field_142 += 4; + if (sBerryBlenderData->field_142 > 255) + { + sBerryBlenderData->field_0++; + sBerryBlenderData->field_142 = 256; + sBerryBlenderData->arrowPos = gUnknown_082162F8[gUnknown_08216300[sBerryBlenderData->field_88 - 2]]; + REG_BG2CNT = 0x4882; + sBerryBlenderData->field_130 = 0; + sub_804F238(); + sub_804F2A8(); + } + sub_8051414(&sBerryBlenderData->field_168); + break; + case 15: + if (sub_8051B8C()) + { + sBerryBlenderData->field_130 = 0; + sBerryBlenderData->field_0++; + } + sub_8051414(&sBerryBlenderData->field_168); + break; + case 16: + CreateSprite(&gSpriteTemplate_8216548, 120, -16, 3); + sBerryBlenderData->field_0++; + break; + case 18: + sBerryBlenderData->field_0++; + break; + case 19: + sub_80084A4(); + sBerryBlenderData->field_0++; + break; + case 20: + if (sub_8007ECC()) + { + sub_8007E24(); + sBerryBlenderData->field_0++; + } + break; + case 21: + sBerryBlenderData->hitPitch = 128; + sBerryBlenderData->field_12C = 0; + SetMainCallback2(sub_80501FC); + if (GetCurrentMapMusic() != 403) + { + sBerryBlenderData->field_178 = GetCurrentMapMusic(); + } + PlayBGM(403); + break; + case 100: + MenuDrawTextWindow(0, 13, 29, 19); + MenuPrintMessage(gOtherText_LinkNotFound, 1, 15); + sBerryBlenderData->field_0++; + break; + case 101: + if (MenuUpdateWindowText()) + sBerryBlenderData->field_0++; + break; + case 102: + if (!gPaletteFade.active) + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); + break; + } + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_804F0F4(void) +{ + REG_DISPCNT = 0; + + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + + SetVBlankCallback(VBlankCB0_BerryBlender); + + SetUpWindowConfig(&gWindowConfig_81E6F68); + InitMenuWindow(&gWindowConfig_81E6F68); + + gLinkType = 0x4422; + + sBerryBlenderData->field_4E = 0; + sBerryBlenderData->hitPitch = 0; + sBerryBlenderData->arrowPos = 0; + sBerryBlenderData->field_5A = 0; + sBerryBlenderData->field_144 = 0; + sBerryBlenderData->field_146 = 0; + sBerryBlenderData->field_0++; +} + +extern const u8 gUnknown_08216303[]; + +u8 sub_804F16C(u16 arrowPos, u8 a1) +{ + u32 var1 = (arrowPos / 256) + 24; + u8 arrID = sBerryBlenderData->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; +} + +extern const u8 gUnknown_082165BC[][3]; + +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++) + { + sub_80516C4(i + 1, gUnknown_082165BC[r4][i] + 133); + } +} + +void sub_804F238(void) +{ + s32 i, j; + for (i = 0; i < BLENDER_MAX_PLAYERS; i++) + { + sBerryBlenderData->field_A2[i] = 0xFF; + sBerryBlenderData->field_9A[i] = gUnknown_082162EC[sBerryBlenderData->field_88 - 2][i]; + } + for (j = 0; j < BLENDER_MAX_PLAYERS; j++) + { + for (i = 0; i < BLENDER_MAX_PLAYERS; i++) + { + if (sBerryBlenderData->field_9A[i] == j) + sBerryBlenderData->field_A2[j] = i; + } + } +} + +extern const u8 gUnknown_082162C4[]; +extern const u8 gUnknown_082162D4[][2]; + +void sub_804F2A8(void) +{ + int i; + for (i = 0; i < BLENDER_MAX_PLAYERS; i++) + { + if (sBerryBlenderData->field_9A[i] != 0xFF) + { + u8* stringPtr = gStringVar1; + + sBerryBlenderData->SyncArrowSpriteID[sBerryBlenderData->field_9A[i]] = sBerryBlenderData->SyncArrowSprite2ID[i]; + StartSpriteAnim(&gSprites[sBerryBlenderData->SyncArrowSpriteID[sBerryBlenderData->field_9A[i]]], i); + if (GetMultiplayerId() == sBerryBlenderData->field_9A[i]) + stringPtr = StringCopy(stringPtr, gUnknown_082162C4); + StringCopy(stringPtr, gLinkPlayers[sBerryBlenderData->field_9A[i]].name); + MenuPrint_PixelCoords(gStringVar1, gUnknown_082162D4[i][0] * 8 + 1, gUnknown_082162D4[i][1] * 8, 1); + } + } +} + +extern const TaskFunc gUnknown_08216308[]; + +void sub_804F378(void) +{ + s32 i, j; + switch (sBerryBlenderData->field_0) + { + case 0: + sub_804F0F4(); + sub_80516C4(0, gScriptItemId); + Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[0], gScriptItemId); + sub_804F1BC(gScriptItemId, sBerryBlenderData->field_88, &sBerryBlenderData->blendedBerries[0]); + for (i = 0; i < BLENDER_MAX_PLAYERS; i++) + { + sBerryBlenderData->field_70[i] = 0; + for (j = 0; j < 3; j++) + { + sBerryBlenderData->field_14C[i][j] = 0; + } + } + sBerryBlenderData->field_7C = 0; + sBerryBlenderData->field_1 = 0; + break; + case 1: + if (sub_804E2EC()) + { + sBerryBlenderData->field_0++; + sub_8051474(); + } + break; + case 2: + for (i = 0; i < BLENDER_MAX_PLAYERS; i++) + { + sBerryBlenderData->SyncArrowSprite2ID[i] = CreateSprite(&sBlenderSyncArrow_SpriteTemplate, sBlenderSyncArrowsPos[i][0], sBlenderSyncArrowsPos[i][1], 1); + StartSpriteAnim(&gSprites[sBerryBlenderData->SyncArrowSprite2ID[i]], i + 8); + } + sBerryBlenderData->field_0++; + break; + case 3: + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + sBerryBlenderData->field_0++; + sBerryBlenderData->field_130 = 0; + break; + case 4: + if (++sBerryBlenderData->field_130 == 2) + sub_804E4FC(); + if (!gPaletteFade.active) + sBerryBlenderData->field_0 = 8; + break; + case 8: + sBerryBlenderData->field_0 = 11; + sBerryBlenderData->field_13C = 0; + break; + case 11: + for (i = 0; i < BLENDER_MAX_PLAYERS; i++) + { + u32 var = gUnknown_082162EC[sBerryBlenderData->field_88 - 2][i]; + if (sBerryBlenderData->field_13C == var) + { + sub_804E7C0(sBerryBlenderData->field_80[sBerryBlenderData->field_13C], i); + break; + } + } + sBerryBlenderData->field_130 = 0; + sBerryBlenderData->field_0++; + sBerryBlenderData->field_13C++; + break; + case 12: + if (++sBerryBlenderData->field_130 > 60) + { + if (sBerryBlenderData->field_13C >= sBerryBlenderData->field_88) + { + sBerryBlenderData->arrowPos = gUnknown_082162F8[gUnknown_08216300[sBerryBlenderData->field_88 - 2]] - 22528; + sBerryBlenderData->field_0++; + } + else + sBerryBlenderData->field_0--; + sBerryBlenderData->field_130 = 0; + } + break; + case 13: + sBerryBlenderData->field_0++; + sub_804F238(); + PlaySE(43); + sub_8051414(&sBerryBlenderData->field_168); + break; + case 14: + REG_DISPCNT |= 0x400; + sBerryBlenderData->arrowPos += 0x200; + sBerryBlenderData->field_142 += 4; + if (sBerryBlenderData->field_142 > 255) + { + sBerryBlenderData->field_0++; + sBerryBlenderData->field_142 = 256; + sBerryBlenderData->arrowPos = gUnknown_082162F8[gUnknown_08216300[sBerryBlenderData->field_88 - 2]]; + REG_BG2CNT = 0x4882; + sBerryBlenderData->field_130 = 0; + PlaySE(52); + sub_804F2A8(); + } + sub_8051414(&sBerryBlenderData->field_168); + break; + case 15: + if (sub_8051B8C()) + { + sBerryBlenderData->field_0++; + } + sub_8051414(&sBerryBlenderData->field_168); + break; + case 16: + CreateSprite(&gSpriteTemplate_8216548, 120, -16, 3); + sBerryBlenderData->field_0++; + break; + case 18: + sBerryBlenderData->field_0++; + break; + case 19: + sBerryBlenderData->field_0++; + break; + case 20: + sBerryBlenderData->field_0++; + break; + case 21: + sub_804F81C(); + sBerryBlenderData->hitPitch = 128; + sBerryBlenderData->field_12C = 0; + sBerryBlenderData->field_14B = 0; + sBerryBlenderData->field_7E = 0; + SetMainCallback2(sub_80501FC); + for (i = 0; i < gSpecialVar_0x8004; i++) + { + sBerryBlenderData->field_148[i] = CreateTask(gUnknown_08216308[i], 10 + i); + } + + if (GetCurrentMapMusic() != 403) + { + sBerryBlenderData->field_178 = GetCurrentMapMusic(); + } + PlayBGM(403); + PlaySE(53); + Blender_ControlHitPitch(); break; } RunTasks(); @@ -901,3 +1204,172 @@ void sub_804E9F8(void) BuildOamBuffer(); UpdatePaletteFade(); } + +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; + } +} + +void sub_804F844(u8 taskID) +{ + if(++gTasks[taskID].data[0] > gTasks[taskID].data[1]) + { + gRecvCmds[2][gTasks[taskID].data[2]] = 0x2345; + DestroyTask(taskID); + } +} + +void sub_804F890(u8 a0, u8 a1) +{ + u8 taskID = CreateTask(sub_804F844, 80); + gTasks[taskID].data[1] = a1; + gTasks[taskID].data[2] = a0; +} + +void sub_804F8C8(u8 taskID) +{ + if (sub_804F16C(sBerryBlenderData->arrowPos, 1) == 2) + { + if (gTasks[taskID].data[0] == 0) + { + if (sBerryBlenderData->field_14B == 0) + { + u8 rand = Random() / 655; + if (sBerryBlenderData->hitPitch < 500) + { + if (rand > 75) + gRecvCmds[2][1] = 0x4523; + else + gRecvCmds[2][1] = 0x5432; + gRecvCmds[2][1] = 0x5432; // ??? + } + else if (sBerryBlenderData->hitPitch < 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; +} + +void sub_804F9F4(u8 taskID) +{ + u32 var1 = (sBerryBlenderData->arrowPos + 0x1800) & 0xFFFF; + u32 var2 = sBerryBlenderData->field_A2[2] & 0xFF; + if ((var1 >> 8) > gUnknown_08216303[var2] + 20 && (var1 >> 8) < gUnknown_08216303[var2] + 40) + { + if (gTasks[taskID].data[0] == 0) + { + if (sBerryBlenderData->field_14B == 0) + { + u8 rand = Random() / 655; + if (sBerryBlenderData->hitPitch < 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; +} + +void sub_804FB1C(u8 taskID) +{ + u32 var1, var2; + + #ifndef FAKEMATCHING + asm("":::"r6"); + #endif // FAKEMATCHING + + var1 = (sBerryBlenderData->arrowPos + 0x1800) & 0xFFFF; + var2 = sBerryBlenderData->field_A2[3] & 0xFF; + if ((var1 >> 8) > gUnknown_08216303[var2] + 20 && (var1 >> 8) < gUnknown_08216303[var2] + 40) + { + if (gTasks[taskID].data[0] == 0) + { + if (sBerryBlenderData->field_14B == 0) + { + u8 rand = (Random() / 655); + if (sBerryBlenderData->hitPitch < 500) + { + if (rand > 88) + gRecvCmds[2][3] = 0x4523; + else + gRecvCmds[2][3] = 0x5432; + } + else + { + u8 value; + if (rand > 60) + gRecvCmds[2][3] = 0x4523; + else if ((value = rand - 56) < 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; +} -- cgit v1.2.3 From f72d61c18c8e1d476c305bee4fded8923ff1278e Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 7 Aug 2017 17:39:49 +0200 Subject: more stuff done --- src/berry_blender.c | 124 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 105 insertions(+), 19 deletions(-) (limited to 'src') diff --git a/src/berry_blender.c b/src/berry_blender.c index 47aebf513..62264f76e 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -148,7 +148,7 @@ struct BerryBlenderData u8 field_52; u8 field_53; u16 arrowPos; - s16 hitPitch; //56 + s16 field_56; u8 field_58; u8 field_59; u16 field_5A; @@ -337,8 +337,8 @@ struct BerryBlenderData u16 field_13E; u16 field_140; u16 field_142; - u16 field_144; - u16 field_146; + s16 field_144; + s16 field_146; u8 field_148[3]; u8 field_14B; u16 field_14C[BLENDER_MAX_PLAYERS][3]; @@ -388,10 +388,13 @@ bool8 sub_8051B8C(void); void sub_80516C4(u8 a0, u16 itemID); void sub_804F2A8(void); void sub_804F81C(void); +void sub_805156C(void); +void sub_8051684(struct Sprite* sprite); +void sub_8051AC8(s16* a0, u16 a1); void Blender_ControlHitPitch(void) { - m4aMPlayPitchControl(&gMPlay_SE2, 0xFFFF, (sBerryBlenderData->hitPitch - 128) * 2); + m4aMPlayPitchControl(&gMPlay_SE2, 0xFFFF, (sBerryBlenderData->field_56 - 128) * 2); } void VBlankCB0_BerryBlender(void) @@ -769,7 +772,7 @@ void sub_804E9F8(void) } } sBerryBlenderData->field_7C = 0; - sBerryBlenderData->hitPitch = 0; + sBerryBlenderData->field_56 = 0; sBerryBlenderData->arrowPos = 0; sBerryBlenderData->field_5A = 0; sBerryBlenderData->field_1 = 0; @@ -916,7 +919,7 @@ void sub_804E9F8(void) } break; case 21: - sBerryBlenderData->hitPitch = 128; + sBerryBlenderData->field_56 = 128; sBerryBlenderData->field_12C = 0; SetMainCallback2(sub_80501FC); if (GetCurrentMapMusic() != 403) @@ -961,7 +964,7 @@ void sub_804F0F4(void) gLinkType = 0x4422; sBerryBlenderData->field_4E = 0; - sBerryBlenderData->hitPitch = 0; + sBerryBlenderData->field_56 = 0; sBerryBlenderData->arrowPos = 0; sBerryBlenderData->field_5A = 0; sBerryBlenderData->field_144 = 0; @@ -1179,7 +1182,7 @@ void sub_804F378(void) break; case 21: sub_804F81C(); - sBerryBlenderData->hitPitch = 128; + sBerryBlenderData->field_56 = 128; sBerryBlenderData->field_12C = 0; sBerryBlenderData->field_14B = 0; sBerryBlenderData->field_7E = 0; @@ -1242,7 +1245,7 @@ void sub_804F8C8(u8 taskID) if (sBerryBlenderData->field_14B == 0) { u8 rand = Random() / 655; - if (sBerryBlenderData->hitPitch < 500) + if (sBerryBlenderData->field_56 < 500) { if (rand > 75) gRecvCmds[2][1] = 0x4523; @@ -1250,7 +1253,7 @@ void sub_804F8C8(u8 taskID) gRecvCmds[2][1] = 0x5432; gRecvCmds[2][1] = 0x5432; // ??? } - else if (sBerryBlenderData->hitPitch < 1500) + else if (sBerryBlenderData->field_56 < 1500) { if (rand > 80) gRecvCmds[2][1] = 0x4523; @@ -1295,7 +1298,7 @@ void sub_804F9F4(u8 taskID) if (sBerryBlenderData->field_14B == 0) { u8 rand = Random() / 655; - if (sBerryBlenderData->hitPitch < 500) + if (sBerryBlenderData->field_56 < 500) { if (rand > 66) gRecvCmds[2][2] = 0x4523; @@ -1331,10 +1334,6 @@ void sub_804FB1C(u8 taskID) { u32 var1, var2; - #ifndef FAKEMATCHING - asm("":::"r6"); - #endif // FAKEMATCHING - var1 = (sBerryBlenderData->arrowPos + 0x1800) & 0xFFFF; var2 = sBerryBlenderData->field_A2[3] & 0xFF; if ((var1 >> 8) > gUnknown_08216303[var2] + 20 && (var1 >> 8) < gUnknown_08216303[var2] + 40) @@ -1344,7 +1343,7 @@ void sub_804FB1C(u8 taskID) if (sBerryBlenderData->field_14B == 0) { u8 rand = (Random() / 655); - if (sBerryBlenderData->hitPitch < 500) + if (sBerryBlenderData->field_56 < 500) { if (rand > 88) gRecvCmds[2][3] = 0x4523; @@ -1353,11 +1352,15 @@ void sub_804FB1C(u8 taskID) } else { - u8 value; if (rand > 60) gRecvCmds[2][3] = 0x4523; - else if ((value = rand - 56) < 5) - gRecvCmds[2][3] = 0x5432; + 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); } @@ -1373,3 +1376,86 @@ void sub_804FB1C(u8 taskID) else gTasks[taskID].data[0] = 0; } + +extern const s8 gUnknown_082162CC[][2]; +extern const struct SpriteTemplate gSpriteTemplate_821645C; + +void sub_804FC48(u16 a0, u8 a1) +{ + u8 spriteID; + + spriteID = CreateSprite(&gSpriteTemplate_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(40); + } + else if (a0 == 0x5432) + { + StartSpriteAnim(&gSprites[spriteID], 0); + PlaySE(31); + } + else if (a0 == 0x2345) + { + StartSpriteAnim(&gSprites[spriteID], 1); + PlaySE(32); + } + sub_805156C(); +} + +extern const u8 gUnknown_082165DA[]; + +void sub_804FD30(u16 a0) +{ + Blender_ControlHitPitch(); + switch (a0) + { + case 0x4523: + if (sBerryBlenderData->field_56 < 1500) + sBerryBlenderData->field_56 += (384 / gUnknown_082165DA[sBerryBlenderData->field_88]); + else + { + sBerryBlenderData->field_56 += (128 / gUnknown_082165DA[sBerryBlenderData->field_88]); + sub_8051AC8(&sBerryBlenderData->field_144, (sBerryBlenderData->field_56 / 100) - 10); + sub_8051AC8(&sBerryBlenderData->field_146, (sBerryBlenderData->field_56 / 100) - 10); + } + break; + case 0x5432: + if (sBerryBlenderData->field_56 < 1500) + sBerryBlenderData->field_56 += (256 / gUnknown_082165DA[sBerryBlenderData->field_88]); + break; + case 0x2345: + sBerryBlenderData->field_56 -= (256 / gUnknown_082165DA[sBerryBlenderData->field_88]); + if (sBerryBlenderData->field_56 < 128) + sBerryBlenderData->field_56 = 128; + break; + } +} + +void sub_804FE70(void) +{ + s32 i; + + if (gSpecialVar_0x8004 != 0) + { + if (gSendCmd[2] != 0) + { + gRecvCmds[2][0] = 0; + gRecvCmds[0][0] = 0x4444; + gSendCmd[2] = 0; + } + for (i = 0; i < 3; i++) + { + if (gRecvCmds[2][i] != 0) + gRecvCmds[0][i] = 0x4444; + } + } + for (i = 0; i < gUnknown_082165DA[sBerryBlenderData->field_88]; i++) + { + if (gRecvCmds[0]) + } +} -- cgit v1.2.3 From c1d160c31d1be9c756b6666b4dfc97d7b1845b0f Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Wed, 9 Aug 2017 22:45:59 +0200 Subject: more stuff, a troublesome function --- src/berry_blender.c | 351 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 344 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/berry_blender.c b/src/berry_blender.c index 62264f76e..ce2f3db20 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -43,6 +43,7 @@ struct MusicPlayerInfo // other files functions void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s16 pitch); +void m4aMPlayTempoControl(struct MusicPlayerInfo *mplayInfo, u16 tempo); void sub_80A6978(void); u8 sub_80A7DEC(u8 berryId, u8 x, u8 y, bool8 animate); @@ -56,7 +57,7 @@ u8 sub_80A7DEC(u8 berryId, u8 x, u8 y, bool8 animate); struct BlenderBerry { - u16 field_0; + u16 itemID; u8 name[7]; u8 flavours[5]; u8 smoothness; @@ -371,7 +372,9 @@ struct BerryBlenderData extern struct BerryBlenderData* sBerryBlenderData; extern struct MusicPlayerInfo gMPlay_SE2; +extern struct MusicPlayerInfo gMPlay_BGM; extern u8 ewram[]; +extern s16 gUnknown_03000520[]; // this file's functions: void sub_80514A4(void); @@ -391,6 +394,11 @@ void sub_804F81C(void); void sub_805156C(void); void sub_8051684(struct Sprite* sprite); void sub_8051AC8(s16* a0, u16 a1); +void sub_805194C(u16 a0, u16 a1); +void sub_8051A3C(u16 a0); +void sub_8051B18(void); +void sub_805123C(void); +void sub_8050954(void); void Blender_ControlHitPitch(void) { @@ -669,7 +677,7 @@ void sub_804E7C0(u16 a0, u8 a1) void Blender_CopyBerryData(struct BlenderBerry* berry, u16 itemID) { const struct Berry *berryInfo = GetBerryInfo(itemID + 124); - berry->field_0 = itemID; + berry->itemID = itemID; StringCopy(berry->name, berryInfo->name); berry->flavours[FLAVOUR_SPICY] = berryInfo->spicy; berry->flavours[FLAVOUR_DRY] = berryInfo->dry; @@ -835,7 +843,7 @@ void sub_804E9F8(void) for (i = 0; i < GetLinkPlayerCount(); i++) { memcpy(&sBerryBlenderData->blendedBerries[i], &gBlockRecvBuffer[i][0], sizeof(struct BlenderBerry)); - sBerryBlenderData->field_80[i] = sBerryBlenderData->blendedBerries[i].field_0; + sBerryBlenderData->field_80[i] = sBerryBlenderData->blendedBerries[i].itemID; } ResetBlockReceivedFlags(); sBerryBlenderData->field_0++; @@ -1444,18 +1452,347 @@ void sub_804FE70(void) { if (gSendCmd[2] != 0) { - gRecvCmds[2][0] = 0; + gRecvCmds[2][0] = gSendCmd[2]; gRecvCmds[0][0] = 0x4444; gSendCmd[2] = 0; } - for (i = 0; i < 3; i++) + for (i = 1; i < 4; i++) { if (gRecvCmds[2][i] != 0) gRecvCmds[0][i] = 0x4444; } } - for (i = 0; i < gUnknown_082165DA[sBerryBlenderData->field_88]; i++) + for (i = 0; i < sBerryBlenderData->field_88; i++) { - if (gRecvCmds[0]) + if (gRecvCmds[0][i] == 0x4444) + { + u32 var = sBerryBlenderData->field_A2[i]; + if (gRecvCmds[2][i] == 0x4523) + { + sub_804FD30(0x4523); + sBerryBlenderData->field_13E += (sBerryBlenderData->field_56 / 55); + if (sBerryBlenderData->field_13E >= 1000) + sBerryBlenderData->field_13E = 1000; + sub_804FC48(0x4523, var); + sBerryBlenderData->field_14C[i][0]++; + } + else if (gRecvCmds[2][i] == 0x5432) + { + sub_804FD30(0x5432); + sBerryBlenderData->field_13E += (sBerryBlenderData->field_56 / 70); + sub_804FC48(0x5432, var); + sBerryBlenderData->field_14C[i][1]++; + } + else if (gRecvCmds[2][i] == 0x2345) + { + sub_804FC48(0x2345, var); + sub_804FD30(0x2345); + if (sBerryBlenderData->field_15 > 1000) + sBerryBlenderData->field_13E = 1000; + if (sBerryBlenderData->field_14C[i][2] < 999) + sBerryBlenderData->field_14C[i][2]++; + } + if (gRecvCmds[2][i] == 0x2345 || gRecvCmds[2][i] == 0x4523 || gRecvCmds[2][i] == 0x5432) + { + if (sBerryBlenderData->field_56 > 1500) + m4aMPlayTempoControl(&gMPlay_BGM, ((sBerryBlenderData->field_56 - 750) / 20) + 256); + else + m4aMPlayTempoControl(&gMPlay_BGM, 256); + } + } + } + if (gSpecialVar_0x8004 != 0) + { + for (i = 0; i < sBerryBlenderData->field_88; i++) + { + gRecvCmds[0][i] = 0; + gRecvCmds[2][i] = 0; + } + } +} + +extern u8 gUnknown_020297ED; + +void sub_80500A8(void) +{ + bool8 A_pressed = 0; + u8 var2 = sBerryBlenderData->field_A2[GetMultiplayerId()]; + if (sBerryBlenderData->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[sBerryBlenderData->SyncArrowSpriteID[sBerryBlenderData->field_9A[var2]]], var2 + 4); + var3 = sub_804F16C(sBerryBlenderData->arrowPos, GetMultiplayerId()); + if (var3 == 2) + gSendCmd[2] = 0x4523; + else if (var3 == 1) + gSendCmd[2] = 0x5432; + else + gSendCmd[2] = 0x2345; + } + } + if (++sBerryBlenderData->field_7E > 5) + { + if (sBerryBlenderData->field_56 > 128) + sBerryBlenderData->field_56--; + sBerryBlenderData->field_7E = 0; + } + if (gUnknown_020297ED && gMain.newKeys & L_BUTTON) + sBerryBlenderData->field_14B ^= 1; +} + +void sub_80501FC(void) +{ + sub_8051474(); + if (sBerryBlenderData->field_12C < 359940) + sBerryBlenderData->field_12C++; + sub_80500A8(); + SetLinkDebugValues((u16)(sBerryBlenderData->field_56), sBerryBlenderData->field_13E); + sub_804FE70(); + sub_805194C(sBerryBlenderData->field_13E, 1000); + sub_8051A3C(sBerryBlenderData->field_56); + sub_8051B18(); + sub_805123C(); + if (sBerryBlenderData->field_6F == 0 && sBerryBlenderData->field_140 >= 1000) + { + sBerryBlenderData->field_13E = 1000; + sBerryBlenderData->field_6F = 1; + SetMainCallback2(sub_8050954); + } + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +#define ARE_FLAVOURS_SAME(flavours1, flavours2)(((*(u32*)(&flavours1[-1]) & 0xFFFFFF00) == (*(u32*)(&flavours2[-1]) & 0xFFFFFF00)&& (*(u32*)(&flavours1[3]) & 0xFFFFFF) == (*(u32*)(&flavours2[3]) & 0xFFFFFF))) + +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 + && ARE_FLAVOURS_SAME(berries[index1].flavours, berries[index2].flavours))) + return 1; + else + return 0; +} + +#undef ARE_FLAVOURS_SAME + +u32 sub_80502F8(struct BlenderBerry* berries, s16* a1, u8 a2, 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 < a2; i++) + { + for (r6 = 0; r6 < a2; 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; +} + +extern s16 gUnknown_0300052C; +extern s16 gUnknown_0300052E; + +void sub_80504F0(s16 value) +{ + gUnknown_0300052C = value; +} + +s16 unref_sub_80504FC(void) +{ + return gUnknown_0300052C; +} + +void sub_8050508(s16 value) +{ + gUnknown_0300052E = value; +} + +s16 unref_sub_8050514(void) +{ + return gUnknown_0300052E; +} + +extern s16 gUnknown_03000510[6]; +extern s32 gUnknown_03000530[]; +extern s32 gUnknown_03000548[]; +extern u32 gUnknown_0300055C; + +extern const u8 gUnknown_082165DF[]; + +void sub_8050520(struct BlenderBerry* berries, u8* a1, u8 a2, u8* a3, u16 a4) +{ + s32 i, j; + + s32 var5, var6; + + for (i = 0; i < 6; i++) + gUnknown_03000510[i] = 0; + for (i = 0; i < a2; i++) + { + for (j = 0; j < 5; j++) + gUnknown_03000510[j] += berries[i].flavours[j]; + } + + var5 = 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] -= var5; + + var6 = 0; + for (i = 0; i < 6; i++) + { + if (gUnknown_03000510[i] < 0) + { + gUnknown_03000510[i] = 0; + var6++; + } + } + for (i = 0; i < 6; i++) + { + if (gUnknown_03000510[i] > 0) + { + if (gUnknown_03000510[i] < var6) + gUnknown_03000510[i] = 0; + else + gUnknown_03000510[i] -= var6; + } + } + for (i = 0; i < 6; i++) + { + gUnknown_03000530[i] = gUnknown_03000510[i]; + } + + gUnknown_0300055C = ((a4 / 333) + 100); + + for (i = 0; i < 5; i++) + { + s32 var4; + s32 var3 = gUnknown_03000510[i]; + var3 = (((a4 / 333) + 100) * var3) / 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]; + } + *a1 = sub_80502F8(berries, &gUnknown_03000510[0], a2, var6); + gUnknown_03000510[5] = (gUnknown_03000510[5] / a2) - a2; + if (gUnknown_03000510[5] > 0) + gUnknown_03000510[5] = 0; + if (*a1 == 12) + { + u16 rand = Random() % 10; + for (i = 0; i < 6; i++) + { + if ((gUnknown_082165DF[rand] >> 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; + } + a1[1] = gUnknown_03000510[0]; + a1[2] = gUnknown_03000510[1]; + a1[3] = gUnknown_03000510[2]; + a1[4] = gUnknown_03000510[3]; + a1[5] = gUnknown_03000510[4]; + a1[6] = gUnknown_03000510[5]; + for (i = 0; i < 6; i++) + { + a3[i] = gUnknown_03000510[i]; } } -- cgit v1.2.3 From 79a04893cea2b62ce21eaf236a13998130ee2546 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sat, 12 Aug 2017 22:35:53 +0200 Subject: almost done --- src/berry_blender.c | 1800 ++++++++++++++++++++++++++++++++++++++++++++------- src/link.c | 5 +- 2 files changed, 1586 insertions(+), 219 deletions(-) (limited to 'src') diff --git a/src/berry_blender.c b/src/berry_blender.c index ce2f3db20..74b87b983 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -7,13 +7,19 @@ #include "menu.h" #include "strings2.h" #include "sound.h" +#include "songs.h" #include "berry.h" #include "string_util.h" #include "link.h" #include "task.h" #include "rom4.h" +#include "item.h" #include "items.h" #include "rng.h" +#include "save.h" +#include "menu_cursor.h" +#include "trig.h" +#include "pokeblock.h" //needed to match Blender_ControlHitPitch struct MusicPlayerInfo @@ -44,10 +50,20 @@ struct MusicPlayerInfo // 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 sub_814A880(u8 a1, u8 a2); +u8 sub_814A5C0(u8 a1, u16 a2, u8 a3, u16 a4, u8 a5); +s8 sub_810CA00(void); +bool8 sub_810CA34(struct Pokeblock *pokeblock); + +#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 @@ -69,55 +85,7 @@ struct BerryBlenderData u8 field_1; u8 field_2; u8 field_3; - u8 field_4; - u8 field_5; - u8 field_6; - u8 field_7; - u8 field_8; - u8 field_9; - u8 field_A; - u8 field_B; - u8 field_C; - u8 field_D; - u8 field_E; - u8 field_F; - u8 field_10; - u8 field_11; - u8 field_12; - u8 field_13; - u8 field_14; - u8 field_15; - u8 field_16; - u8 field_17; - u8 field_18; - u8 field_19; - u8 field_1A; - u8 field_1B; - u8 field_1C; - u8 field_1D; - u8 field_1E; - u8 field_1F; - u8 field_20; - u8 field_21; - u8 field_22; - u8 field_23; - u8 field_24; - u8 field_25; - u8 field_26; - u8 field_27; - u8 field_28; - u8 field_29; - u8 field_2A; - u8 field_2B; - u8 field_2C; - u8 field_2D; - u8 field_2E; - u8 field_2F; - u8 field_30; - u8 field_31; - u8 field_32; - u8 field_33; - u8 field_34; + struct Window field_4; u8 field_35; u8 field_36; u8 field_37; @@ -144,15 +112,11 @@ struct BerryBlenderData u8 field_4C; u8 field_4D; u16 field_4E; - u8 field_50; - u8 field_51; - u8 field_52; - u8 field_53; + u8 scoreIconIDs[3]; u16 arrowPos; s16 field_56; - u8 field_58; - u8 field_59; - u16 field_5A; + s16 field_58; + u16 max_RPM; u8 SyncArrowSpriteID[BLENDER_MAX_PLAYERS]; u8 SyncArrowSprite2ID[BLENDER_MAX_PLAYERS]; u8 field_64; @@ -168,15 +132,13 @@ struct BerryBlenderData u8 field_6E; u8 field_6F; u16 field_70[BLENDER_MAX_PLAYERS]; - u8 field_78; - u8 field_79; - u8 field_7A; - u8 field_7B; + u16 field_78; + u16 field_7A; u16 field_7C; u8 field_7E; u8 field_7F; - u16 field_80[BLENDER_MAX_PLAYERS]; - u8 field_88; + u16 chosenItemID[BLENDER_MAX_PLAYERS]; + u8 playersNo; u8 field_89; u8 field_8A; u8 field_8B; @@ -188,8 +150,7 @@ struct BerryBlenderData u8 field_91; u8 field_92; u8 field_93; - u8 field_94; - u8 field_95; + u16 field_94; u8 field_96; u8 field_97; u8 field_98; @@ -197,67 +158,7 @@ struct BerryBlenderData u16 field_9A[BLENDER_MAX_PLAYERS]; u16 field_A2[BLENDER_MAX_PLAYERS]; u8 field_AA; - u8 field_AB; - u8 field_AC; - u8 field_AD; - u8 field_AE; - u8 field_AF; - u8 field_B0; - u8 field_B1; - u8 field_B2; - u8 field_B3; - u8 field_B4; - u8 field_B5; - u8 field_B6; - u8 field_B7; - u8 field_B8; - u8 field_B9; - u8 field_BA; - u8 field_BB; - u8 field_BC; - u8 field_BD; - u8 field_BE; - u8 field_BF; - u8 field_C0; - u8 field_C1; - u8 field_C2; - u8 field_C3; - u8 field_C4; - u8 field_C5; - u8 field_C6; - u8 field_C7; - u8 field_C8; - u8 field_C9; - u8 field_CA; - u8 field_CB; - u8 field_CC; - u8 field_CD; - u8 field_CE; - u8 field_CF; - u8 field_D0; - u8 field_D1; - u8 field_D2; - u8 field_D3; - u8 field_D4; - u8 field_D5; - u8 field_D6; - u8 field_D7; - u8 field_D8; - u8 field_D9; - u8 field_DA; - u8 field_DB; - u8 field_DC; - u8 field_DD; - u8 field_DE; - u8 field_DF; - u8 field_E0; - u8 field_E1; - u8 field_E2; - u8 field_E3; - u8 field_E4; - u8 field_E5; - u8 field_E6; - u8 field_E7; + u8 stringVar[61]; u8 field_E8; u8 field_E9; u8 field_EA; @@ -326,8 +227,8 @@ struct BerryBlenderData u8 field_129; u8 field_12A; u8 field_12B; - u32 field_12C; - s32 field_130; + u32 gameFrameTime; + s32 framesToWait; u32 field_134; u8 field_138; u8 field_139; @@ -342,31 +243,17 @@ struct BerryBlenderData s16 field_146; u8 field_148[3]; u8 field_14B; - u16 field_14C[BLENDER_MAX_PLAYERS][3]; - u8 field_164; - u8 field_165; - u8 field_166; - u8 field_167; - u8 field_168; - u8 field_169; - u8 field_16A; - u8 field_16B; - u8 field_16C; - u8 field_16D; - u8 field_16E; - u8 field_16F; - u8 field_170; - u8 field_171; - u8 field_172; - u8 field_173; - u8 field_174; - u8 field_175; - u8 field_176; - u8 field_177; + u16 scores[BLENDER_MAX_PLAYERS][3]; + u8 playerPlaces[BLENDER_MAX_PLAYERS]; + struct BgAffineDstData field_168; u16 field_178; u8 field_17A; u8 field_17B; struct BlenderBerry blendedBerries[BLENDER_MAX_PLAYERS]; + u32 field_1BC; + u16 field_1C0; + u16 field_1C2; + u32 field_1C4; }; extern struct BerryBlenderData* sBerryBlenderData; @@ -384,11 +271,11 @@ void sub_804E884(u8 a0); void sub_8051474(void); void sub_804E9F8(void); void sub_804F378(void); -void sub_8051414(void*); +void sub_8051414(struct BgAffineDstData *dest); void sub_804F238(void); void sub_80501FC(void); bool8 sub_8051B8C(void); -void sub_80516C4(u8 a0, u16 itemID); +void Blender_SetBankBerryData(u8 bank, u16 itemID); void sub_804F2A8(void); void sub_804F81C(void); void sub_805156C(void); @@ -399,6 +286,14 @@ void sub_8051A3C(u16 a0); void sub_8051B18(void); void sub_805123C(void); void sub_8050954(void); +bool8 Blender_PrintBlendingRanking(void); +bool8 Blender_PrintBlendingResults(void); +void sub_80510E8(void); +void sub_8050E30(void); +void sub_805197C(u16 a0, u16 a1); +void Blender_PrintMadePokeblockString(struct Pokeblock* pokeblock, u8* dst); +void sub_8052BD0(u8 taskID); +void sub_8052AF8(void); void Blender_ControlHitPitch(void) { @@ -705,20 +600,20 @@ void sub_804E884(u8 a0) break; case 1: gUnknown_03004834 = 1; - sBerryBlenderData->field_88 = 2; + sBerryBlenderData->playersNo = 2; StringCopy(gLinkPlayers[0].name, gSaveBlock2.playerName); StringCopy(gLinkPlayers[1].name, gUnknown_082162B8[0]); break; case 2: gUnknown_03004834 = 2; - sBerryBlenderData->field_88 = 3; + sBerryBlenderData->playersNo = 3; StringCopy(gLinkPlayers[0].name, gSaveBlock2.playerName); StringCopy(gLinkPlayers[1].name, gUnknown_082162B8[0]); StringCopy(gLinkPlayers[2].name, gUnknown_082162B8[1]); break; case 3: gUnknown_03004834 = 3; - sBerryBlenderData->field_88 = 4; + sBerryBlenderData->playersNo = 4; StringCopy(gLinkPlayers[0].name, gSaveBlock2.playerName); StringCopy(gLinkPlayers[1].name, gUnknown_082162B8[0]); StringCopy(gLinkPlayers[2].name, gUnknown_082162B8[1]); @@ -737,7 +632,7 @@ void sub_804E990(void) sBerryBlenderData->field_134 = 0; for (i = 0; i < BLENDER_MAX_PLAYERS; i++) { - sBerryBlenderData->field_80[i] = 0; + sBerryBlenderData->chosenItemID[i] = 0; } sub_804E884(gSpecialVar_0x8004); if (gSpecialVar_0x8004 == 0) @@ -776,13 +671,13 @@ void sub_804E9F8(void) sBerryBlenderData->field_70[i] = 0; for (j = 0; j < 3; j++) { - sBerryBlenderData->field_14C[i][j] = 0; + sBerryBlenderData->scores[i][j] = 0; } } sBerryBlenderData->field_7C = 0; sBerryBlenderData->field_56 = 0; sBerryBlenderData->arrowPos = 0; - sBerryBlenderData->field_5A = 0; + sBerryBlenderData->max_RPM = 0; sBerryBlenderData->field_1 = 0; break; case 1: @@ -815,7 +710,7 @@ void sub_804E9F8(void) MenuDrawTextWindow(0, 13, 29, 19); MenuPrint(gOtherText_LinkStandby3, 1, 14); sBerryBlenderData->field_0 = 8; - sBerryBlenderData->field_130 = 0; + sBerryBlenderData->framesToWait = 0; break; case 8: sBerryBlenderData->field_0++; @@ -823,7 +718,7 @@ void sub_804E9F8(void) Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[0], gScriptItemId); memcpy(gBlockSendBuffer, &sBerryBlenderData->blendedBerries[0], sizeof(struct BlenderBerry)); sub_80084A4(); - sBerryBlenderData->field_130 = 0; + sBerryBlenderData->framesToWait = 0; break; case 9: if (sub_8007ECC()) @@ -835,7 +730,7 @@ void sub_804E9F8(void) } break; case 10: - if (++sBerryBlenderData->field_130 > 20) + if (++sBerryBlenderData->framesToWait > 20) { MenuZeroFillScreen(); if (GetBlockReceivedStatus() == sub_8008198()) @@ -843,7 +738,7 @@ void sub_804E9F8(void) for (i = 0; i < GetLinkPlayerCount(); i++) { memcpy(&sBerryBlenderData->blendedBerries[i], &gBlockRecvBuffer[i][0], sizeof(struct BlenderBerry)); - sBerryBlenderData->field_80[i] = sBerryBlenderData->blendedBerries[i].itemID; + sBerryBlenderData->chosenItemID[i] = sBerryBlenderData->blendedBerries[i].itemID; } ResetBlockReceivedFlags(); sBerryBlenderData->field_0++; @@ -851,30 +746,30 @@ void sub_804E9F8(void) } break; case 11: - sBerryBlenderData->field_88 = GetLinkPlayerCount(); + sBerryBlenderData->playersNo = GetLinkPlayerCount(); for (i = 0; i < BLENDER_MAX_PLAYERS; i++) { - if (sBerryBlenderData->field_13C == gUnknown_082162EC[sBerryBlenderData->field_88 - 2][i]) + if (sBerryBlenderData->field_13C == gUnknown_082162EC[sBerryBlenderData->playersNo - 2][i]) { - sub_804E7C0(sBerryBlenderData->field_80[sBerryBlenderData->field_13C], i); + sub_804E7C0(sBerryBlenderData->chosenItemID[sBerryBlenderData->field_13C], i); break; } } - sBerryBlenderData->field_130 = 0; + sBerryBlenderData->framesToWait = 0; sBerryBlenderData->field_0++; sBerryBlenderData->field_13C++; break; case 12: - if (++sBerryBlenderData->field_130 > 60) + if (++sBerryBlenderData->framesToWait > 60) { - if (sBerryBlenderData->field_13C >= sBerryBlenderData->field_88) + if (sBerryBlenderData->field_13C >= sBerryBlenderData->playersNo) { sBerryBlenderData->field_0++; - sBerryBlenderData->arrowPos = gUnknown_082162F8[gUnknown_08216300[sBerryBlenderData->field_88 - 2]] - 22528; + sBerryBlenderData->arrowPos = gUnknown_082162F8[gUnknown_08216300[sBerryBlenderData->playersNo - 2]] - 22528; } else sBerryBlenderData->field_0--; - sBerryBlenderData->field_130 = 0; + sBerryBlenderData->framesToWait = 0; } break; case 13: @@ -892,9 +787,9 @@ void sub_804E9F8(void) { sBerryBlenderData->field_0++; sBerryBlenderData->field_142 = 256; - sBerryBlenderData->arrowPos = gUnknown_082162F8[gUnknown_08216300[sBerryBlenderData->field_88 - 2]]; + sBerryBlenderData->arrowPos = gUnknown_082162F8[gUnknown_08216300[sBerryBlenderData->playersNo - 2]]; REG_BG2CNT = 0x4882; - sBerryBlenderData->field_130 = 0; + sBerryBlenderData->framesToWait = 0; sub_804F238(); sub_804F2A8(); } @@ -903,7 +798,7 @@ void sub_804E9F8(void) case 15: if (sub_8051B8C()) { - sBerryBlenderData->field_130 = 0; + sBerryBlenderData->framesToWait = 0; sBerryBlenderData->field_0++; } sub_8051414(&sBerryBlenderData->field_168); @@ -928,7 +823,7 @@ void sub_804E9F8(void) break; case 21: sBerryBlenderData->field_56 = 128; - sBerryBlenderData->field_12C = 0; + sBerryBlenderData->gameFrameTime = 0; SetMainCallback2(sub_80501FC); if (GetCurrentMapMusic() != 403) { @@ -974,7 +869,7 @@ void sub_804F0F4(void) sBerryBlenderData->field_4E = 0; sBerryBlenderData->field_56 = 0; sBerryBlenderData->arrowPos = 0; - sBerryBlenderData->field_5A = 0; + sBerryBlenderData->max_RPM = 0; sBerryBlenderData->field_144 = 0; sBerryBlenderData->field_146 = 0; sBerryBlenderData->field_0++; @@ -1022,7 +917,7 @@ void sub_804F1BC(u16 itemID, u8 a1, struct BlenderBerry* berry) } for (i = 0; i < a1 - 1; i++) { - sub_80516C4(i + 1, gUnknown_082165BC[r4][i] + 133); + Blender_SetBankBerryData(i + 1, gUnknown_082165BC[r4][i] + 133); } } @@ -1032,7 +927,7 @@ void sub_804F238(void) for (i = 0; i < BLENDER_MAX_PLAYERS; i++) { sBerryBlenderData->field_A2[i] = 0xFF; - sBerryBlenderData->field_9A[i] = gUnknown_082162EC[sBerryBlenderData->field_88 - 2][i]; + sBerryBlenderData->field_9A[i] = gUnknown_082162EC[sBerryBlenderData->playersNo - 2][i]; } for (j = 0; j < BLENDER_MAX_PLAYERS; j++) { @@ -1075,15 +970,15 @@ void sub_804F378(void) { case 0: sub_804F0F4(); - sub_80516C4(0, gScriptItemId); + Blender_SetBankBerryData(0, gScriptItemId); Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[0], gScriptItemId); - sub_804F1BC(gScriptItemId, sBerryBlenderData->field_88, &sBerryBlenderData->blendedBerries[0]); + sub_804F1BC(gScriptItemId, sBerryBlenderData->playersNo, &sBerryBlenderData->blendedBerries[0]); for (i = 0; i < BLENDER_MAX_PLAYERS; i++) { sBerryBlenderData->field_70[i] = 0; for (j = 0; j < 3; j++) { - sBerryBlenderData->field_14C[i][j] = 0; + sBerryBlenderData->scores[i][j] = 0; } } sBerryBlenderData->field_7C = 0; @@ -1107,10 +1002,10 @@ void sub_804F378(void) case 3: BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); sBerryBlenderData->field_0++; - sBerryBlenderData->field_130 = 0; + sBerryBlenderData->framesToWait = 0; break; case 4: - if (++sBerryBlenderData->field_130 == 2) + if (++sBerryBlenderData->framesToWait == 2) sub_804E4FC(); if (!gPaletteFade.active) sBerryBlenderData->field_0 = 8; @@ -1122,28 +1017,28 @@ void sub_804F378(void) case 11: for (i = 0; i < BLENDER_MAX_PLAYERS; i++) { - u32 var = gUnknown_082162EC[sBerryBlenderData->field_88 - 2][i]; + u32 var = gUnknown_082162EC[sBerryBlenderData->playersNo - 2][i]; if (sBerryBlenderData->field_13C == var) { - sub_804E7C0(sBerryBlenderData->field_80[sBerryBlenderData->field_13C], i); + sub_804E7C0(sBerryBlenderData->chosenItemID[sBerryBlenderData->field_13C], i); break; } } - sBerryBlenderData->field_130 = 0; + sBerryBlenderData->framesToWait = 0; sBerryBlenderData->field_0++; sBerryBlenderData->field_13C++; break; case 12: - if (++sBerryBlenderData->field_130 > 60) + if (++sBerryBlenderData->framesToWait > 60) { - if (sBerryBlenderData->field_13C >= sBerryBlenderData->field_88) + if (sBerryBlenderData->field_13C >= sBerryBlenderData->playersNo) { - sBerryBlenderData->arrowPos = gUnknown_082162F8[gUnknown_08216300[sBerryBlenderData->field_88 - 2]] - 22528; + sBerryBlenderData->arrowPos = gUnknown_082162F8[gUnknown_08216300[sBerryBlenderData->playersNo - 2]] - 22528; sBerryBlenderData->field_0++; } else sBerryBlenderData->field_0--; - sBerryBlenderData->field_130 = 0; + sBerryBlenderData->framesToWait = 0; } break; case 13: @@ -1160,9 +1055,9 @@ void sub_804F378(void) { sBerryBlenderData->field_0++; sBerryBlenderData->field_142 = 256; - sBerryBlenderData->arrowPos = gUnknown_082162F8[gUnknown_08216300[sBerryBlenderData->field_88 - 2]]; + sBerryBlenderData->arrowPos = gUnknown_082162F8[gUnknown_08216300[sBerryBlenderData->playersNo - 2]]; REG_BG2CNT = 0x4882; - sBerryBlenderData->field_130 = 0; + sBerryBlenderData->framesToWait = 0; PlaySE(52); sub_804F2A8(); } @@ -1191,7 +1086,7 @@ void sub_804F378(void) case 21: sub_804F81C(); sBerryBlenderData->field_56 = 128; - sBerryBlenderData->field_12C = 0; + sBerryBlenderData->gameFrameTime = 0; sBerryBlenderData->field_14B = 0; sBerryBlenderData->field_7E = 0; SetMainCallback2(sub_80501FC); @@ -1424,20 +1319,20 @@ void sub_804FD30(u16 a0) { case 0x4523: if (sBerryBlenderData->field_56 < 1500) - sBerryBlenderData->field_56 += (384 / gUnknown_082165DA[sBerryBlenderData->field_88]); + sBerryBlenderData->field_56 += (384 / gUnknown_082165DA[sBerryBlenderData->playersNo]); else { - sBerryBlenderData->field_56 += (128 / gUnknown_082165DA[sBerryBlenderData->field_88]); + sBerryBlenderData->field_56 += (128 / gUnknown_082165DA[sBerryBlenderData->playersNo]); sub_8051AC8(&sBerryBlenderData->field_144, (sBerryBlenderData->field_56 / 100) - 10); sub_8051AC8(&sBerryBlenderData->field_146, (sBerryBlenderData->field_56 / 100) - 10); } break; case 0x5432: if (sBerryBlenderData->field_56 < 1500) - sBerryBlenderData->field_56 += (256 / gUnknown_082165DA[sBerryBlenderData->field_88]); + sBerryBlenderData->field_56 += (256 / gUnknown_082165DA[sBerryBlenderData->playersNo]); break; case 0x2345: - sBerryBlenderData->field_56 -= (256 / gUnknown_082165DA[sBerryBlenderData->field_88]); + sBerryBlenderData->field_56 -= (256 / gUnknown_082165DA[sBerryBlenderData->playersNo]); if (sBerryBlenderData->field_56 < 128) sBerryBlenderData->field_56 = 128; break; @@ -1462,7 +1357,7 @@ void sub_804FE70(void) gRecvCmds[0][i] = 0x4444; } } - for (i = 0; i < sBerryBlenderData->field_88; i++) + for (i = 0; i < sBerryBlenderData->playersNo; i++) { if (gRecvCmds[0][i] == 0x4444) { @@ -1474,23 +1369,23 @@ void sub_804FE70(void) if (sBerryBlenderData->field_13E >= 1000) sBerryBlenderData->field_13E = 1000; sub_804FC48(0x4523, var); - sBerryBlenderData->field_14C[i][0]++; + sBerryBlenderData->scores[i][BLENDER_SCORE_BEST]++; } else if (gRecvCmds[2][i] == 0x5432) { sub_804FD30(0x5432); sBerryBlenderData->field_13E += (sBerryBlenderData->field_56 / 70); sub_804FC48(0x5432, var); - sBerryBlenderData->field_14C[i][1]++; + sBerryBlenderData->scores[i][BLENDER_SCORE_GOOD]++; } else if (gRecvCmds[2][i] == 0x2345) { sub_804FC48(0x2345, var); sub_804FD30(0x2345); - if (sBerryBlenderData->field_15 > 1000) + if (sBerryBlenderData->field_4.win_field_F > 1000) sBerryBlenderData->field_13E = 1000; - if (sBerryBlenderData->field_14C[i][2] < 999) - sBerryBlenderData->field_14C[i][2]++; + if (sBerryBlenderData->scores[i][BLENDER_SCORE_MISS] < 999) + sBerryBlenderData->scores[i][BLENDER_SCORE_MISS]++; } if (gRecvCmds[2][i] == 0x2345 || gRecvCmds[2][i] == 0x4523 || gRecvCmds[2][i] == 0x5432) { @@ -1503,7 +1398,7 @@ void sub_804FE70(void) } if (gSpecialVar_0x8004 != 0) { - for (i = 0; i < sBerryBlenderData->field_88; i++) + for (i = 0; i < sBerryBlenderData->playersNo; i++) { gRecvCmds[0][i] = 0; gRecvCmds[2][i] = 0; @@ -1549,8 +1444,8 @@ void sub_80500A8(void) void sub_80501FC(void) { sub_8051474(); - if (sBerryBlenderData->field_12C < 359940) - sBerryBlenderData->field_12C++; + if (sBerryBlenderData->gameFrameTime < (99 * 60 * 60) + (59 * 60)) // game time can't be longer than 99 minutes and 59 seconds, can't print 3 digits + sBerryBlenderData->gameFrameTime++; sub_80500A8(); SetLinkDebugValues((u16)(sBerryBlenderData->field_56), sBerryBlenderData->field_13E); sub_804FE70(); @@ -1703,11 +1598,18 @@ extern u32 gUnknown_0300055C; extern const u8 gUnknown_082165DF[]; -void sub_8050520(struct BlenderBerry* berries, u8* a1, u8 a2, u8* a3, u16 a4) -{ - s32 i, j; +#ifdef NONMATCHING - s32 var5, var6; +void sub_8050520(struct BlenderBerry* berries, struct Pokeblock* pokeblock, u8 a2, u8* a3, u16 a4) +{ + s32 i; + s32 j; + s32 savedEntry; + s32 var3; + s32 var4; + s32 var6; + s32 var11; + u16 rand; for (i = 0; i < 6; i++) gUnknown_03000510[i] = 0; @@ -1717,12 +1619,12 @@ void sub_8050520(struct BlenderBerry* berries, u8* a1, u8 a2, u8* a3, u16 a4) gUnknown_03000510[j] += berries[i].flavours[j]; } - var5 = gUnknown_03000510[0]; + savedEntry = 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] -= var5; + gUnknown_03000510[4] -= savedEntry; var6 = 0; for (i = 0; i < 6; i++) @@ -1733,7 +1635,7 @@ void sub_8050520(struct BlenderBerry* berries, u8* a1, u8 a2, u8* a3, u16 a4) var6++; } } - for (i = 0; i < 6; i++) + for (i = 0; i < 5; i++) { if (gUnknown_03000510[i] > 0) { @@ -1743,18 +1645,18 @@ void sub_8050520(struct BlenderBerry* berries, u8* a1, u8 a2, u8* a3, u16 a4) gUnknown_03000510[i] -= var6; } } - for (i = 0; i < 6; i++) + for (i = 0; i < 5; i++) { gUnknown_03000530[i] = gUnknown_03000510[i]; } - gUnknown_0300055C = ((a4 / 333) + 100); + var11 = a4 / 333 + 100; + gUnknown_0300055C = ((var11)); for (i = 0; i < 5; i++) { - s32 var4; - s32 var3 = gUnknown_03000510[i]; - var3 = (((a4 / 333) + 100) * var3) / 10; + var3 = gUnknown_03000510[i]; + var3 = ((var11) * var3) / 10; var4 = var3 % 10; var3 /= 10; if (var4 > 4) @@ -1767,11 +1669,11 @@ void sub_8050520(struct BlenderBerry* berries, u8* a1, u8 a2, u8* a3, u16 a4) } *a1 = sub_80502F8(berries, &gUnknown_03000510[0], a2, var6); gUnknown_03000510[5] = (gUnknown_03000510[5] / a2) - a2; - if (gUnknown_03000510[5] > 0) + if (gUnknown_03000510[5] < 0) gUnknown_03000510[5] = 0; if (*a1 == 12) { - u16 rand = Random() % 10; + rand = Random() % 10; for (i = 0; i < 6; i++) { if ((gUnknown_082165DF[rand] >> i) & 1) @@ -1796,3 +1698,1467 @@ void sub_8050520(struct BlenderBerry* berries, u8* a1, u8 a2, u8* a3, u16 a4) a3[i] = gUnknown_03000510[i]; } } + +#else +__attribute__((naked)) +void sub_8050520(struct BlenderBerry* berries, struct Pokeblock* pokeblock, u8 a2, u8* a3, u16 a4) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x10\n\ + str r0, [sp]\n\ + mov r8, r1\n\ + str r3, [sp, 0x4]\n\ + ldr r0, [sp, 0x30]\n\ + lsls r2, 24\n\ + lsrs r2, 24\n\ + mov r9, r2\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + str r0, [sp, 0x8]\n\ + ldr r7, _080505DC @ =gUnknown_03000510\n\ + adds r2, r7, 0\n\ + movs r1, 0\n\ + adds r0, r7, 0\n\ + adds r0, 0xA\n\ +_0805054A:\n\ + strh r1, [r0]\n\ + subs r0, 0x2\n\ + cmp r0, r2\n\ + bge _0805054A\n\ + movs r6, 0\n\ + cmp r6, r9\n\ + bge _08050580\n\ + ldr r0, _080505DC @ =gUnknown_03000510\n\ + mov r12, r0\n\ + ldr r5, [sp]\n\ + adds r5, 0x9\n\ +_08050560:\n\ + movs r3, 0\n\ + adds r4, r5, 0\n\ + mov r2, r12\n\ +_08050566:\n\ + adds r1, r4, r3\n\ + ldrh r0, [r2]\n\ + ldrb r1, [r1]\n\ + adds r0, r1\n\ + strh r0, [r2]\n\ + adds r2, 0x2\n\ + adds r3, 0x1\n\ + cmp r3, 0x5\n\ + ble _08050566\n\ + adds r5, 0x10\n\ + adds r6, 0x1\n\ + cmp r6, r9\n\ + blt _08050560\n\ +_08050580:\n\ + movs r1, 0\n\ + ldrsh r3, [r7, r1]\n\ + ldrh r0, [r7]\n\ + ldrh r1, [r7, 0x2]\n\ + subs r0, r1\n\ + strh r0, [r7]\n\ + ldrh r0, [r7, 0x4]\n\ + subs r1, r0\n\ + strh r1, [r7, 0x2]\n\ + ldrh r1, [r7, 0x6]\n\ + subs r0, r1\n\ + strh r0, [r7, 0x4]\n\ + ldrh r0, [r7, 0x8]\n\ + subs r1, r0\n\ + strh r1, [r7, 0x6]\n\ + subs r0, r3\n\ + strh r0, [r7, 0x8]\n\ + movs r3, 0\n\ + movs r2, 0\n\ + adds r1, r7, 0\n\ + movs r6, 0x4\n\ +_080505AA:\n\ + movs r4, 0\n\ + ldrsh r0, [r1, r4]\n\ + cmp r0, 0\n\ + bge _080505B6\n\ + strh r2, [r1]\n\ + adds r3, 0x1\n\ +_080505B6:\n\ + adds r1, 0x2\n\ + subs r6, 0x1\n\ + cmp r6, 0\n\ + bge _080505AA\n\ + lsls r0, r3, 24\n\ + lsrs r0, 24\n\ + mov r10, r0\n\ + movs r4, 0\n\ + ldr r1, _080505DC @ =gUnknown_03000510\n\ + movs r6, 0x4\n\ +_080505CA:\n\ + ldrh r2, [r1]\n\ + movs r5, 0\n\ + ldrsh r0, [r1, r5]\n\ + cmp r0, 0\n\ + ble _080505E4\n\ + cmp r0, r3\n\ + bge _080505E0\n\ + strh r4, [r1]\n\ + b _080505E4\n\ + .align 2, 0\n\ +_080505DC: .4byte gUnknown_03000510\n\ +_080505E0:\n\ + subs r0, r2, r3\n\ + strh r0, [r1]\n\ +_080505E4:\n\ + adds r1, 0x2\n\ + subs r6, 0x1\n\ + cmp r6, 0\n\ + bge _080505CA\n\ + ldr r1, _080506C4 @ =gUnknown_03000510\n\ + ldr r2, _080506C8 @ =gUnknown_03000530\n\ + movs r6, 0x4\n\ +_080505F2:\n\ + movs r3, 0\n\ + ldrsh r0, [r1, r3]\n\ + stm r2!, {r0}\n\ + adds r1, 0x2\n\ + subs r6, 0x1\n\ + cmp r6, 0\n\ + bge _080505F2\n\ + ldr r1, _080506CC @ =0x0000014d\n\ + ldr r0, [sp, 0x8]\n\ + bl __udivsi3\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + adds r3, r0, 0\n\ + adds r3, 0x64\n\ + ldr r4, _080506D0 @ =gUnknown_0300055C\n\ + str r3, [r4]\n\ + movs r6, 0x4\n\ +_08050616:\n\ + movs r0, 0\n\ + ldrsh r5, [r7, r0]\n\ + adds r0, r5, 0\n\ + muls r0, r3\n\ + movs r1, 0xA\n\ + str r3, [sp, 0xC]\n\ + bl __divsi3\n\ + adds r5, r0, 0\n\ + movs r1, 0xA\n\ + bl __modsi3\n\ + adds r4, r0, 0\n\ + adds r0, r5, 0\n\ + movs r1, 0xA\n\ + bl __divsi3\n\ + adds r5, r0, 0\n\ + ldr r3, [sp, 0xC]\n\ + cmp r4, 0x4\n\ + ble _08050642\n\ + adds r5, 0x1\n\ +_08050642:\n\ + strh r5, [r7]\n\ + adds r7, 0x2\n\ + subs r6, 0x1\n\ + cmp r6, 0\n\ + bge _08050616\n\ + ldr r1, _080506C4 @ =gUnknown_03000510\n\ + ldr r2, _080506D4 @ =gUnknown_03000548\n\ + movs r6, 0x4\n\ +_08050652:\n\ + movs r3, 0\n\ + ldrsh r0, [r1, r3]\n\ + stm r2!, {r0}\n\ + adds r1, 0x2\n\ + subs r6, 0x1\n\ + cmp r6, 0\n\ + bge _08050652\n\ + ldr r4, _080506C4 @ =gUnknown_03000510\n\ + ldr r0, [sp]\n\ + adds r1, r4, 0\n\ + mov r2, r9\n\ + mov r3, r10\n\ + bl sub_80502F8\n\ + mov r5, r8\n\ + strb r0, [r5]\n\ + movs r1, 0xA\n\ + ldrsh r0, [r4, r1]\n\ + mov r1, r9\n\ + bl __divsi3\n\ + mov r3, r9\n\ + subs r0, r3\n\ + strh r0, [r4, 0xA]\n\ + lsls r0, 16\n\ + cmp r0, 0\n\ + bge _0805068C\n\ + movs r0, 0\n\ + strh r0, [r4, 0xA]\n\ +_0805068C:\n\ + mov r5, r8\n\ + ldrb r0, [r5]\n\ + cmp r0, 0xC\n\ + bne _080506E6\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + movs r1, 0xA\n\ + bl __umodsi3\n\ + lsls r0, 16\n\ + lsrs r3, r0, 16\n\ + movs r6, 0\n\ + ldr r0, _080506D8 @ =gUnknown_082165DF\n\ + adds r0, r3, r0\n\ + ldrb r0, [r0]\n\ + adds r1, r4, 0\n\ + movs r4, 0x1\n\ + movs r3, 0x2\n\ +_080506B4:\n\ + adds r2, r0, 0\n\ + asrs r2, r6\n\ + ands r2, r4\n\ + cmp r2, 0\n\ + beq _080506DC\n\ + strh r3, [r1]\n\ + b _080506DE\n\ + .align 2, 0\n\ +_080506C4: .4byte gUnknown_03000510\n\ +_080506C8: .4byte gUnknown_03000530\n\ +_080506CC: .4byte 0x0000014d\n\ +_080506D0: .4byte gUnknown_0300055C\n\ +_080506D4: .4byte gUnknown_03000548\n\ +_080506D8: .4byte gUnknown_082165DF\n\ +_080506DC:\n\ + strh r2, [r1]\n\ +_080506DE:\n\ + adds r1, 0x2\n\ + adds r6, 0x1\n\ + cmp r6, 0x4\n\ + ble _080506B4\n\ +_080506E6:\n\ + ldr r7, _08050740 @ =gUnknown_03000510\n\ + movs r2, 0xFF\n\ + adds r1, r7, 0\n\ + movs r6, 0x5\n\ +_080506EE:\n\ + movs r3, 0\n\ + ldrsh r0, [r1, r3]\n\ + cmp r0, 0xFF\n\ + ble _080506F8\n\ + strh r2, [r1]\n\ +_080506F8:\n\ + adds r1, 0x2\n\ + subs r6, 0x1\n\ + cmp r6, 0\n\ + bge _080506EE\n\ + ldrh r0, [r7]\n\ + mov r4, r8\n\ + strb r0, [r4, 0x1]\n\ + ldrh r0, [r7, 0x2]\n\ + strb r0, [r4, 0x2]\n\ + ldrh r0, [r7, 0x4]\n\ + strb r0, [r4, 0x3]\n\ + ldrh r0, [r7, 0x6]\n\ + strb r0, [r4, 0x4]\n\ + ldrh r0, [r7, 0x8]\n\ + strb r0, [r4, 0x5]\n\ + ldrh r0, [r7, 0xA]\n\ + strb r0, [r4, 0x6]\n\ + movs r6, 0\n\ + adds r2, r7, 0\n\ +_0805071E:\n\ + ldr r5, [sp, 0x4]\n\ + adds r1, r5, r6\n\ + ldrh r0, [r2]\n\ + strb r0, [r1]\n\ + adds r2, 0x2\n\ + adds r6, 0x1\n\ + cmp r6, 0x5\n\ + ble _0805071E\n\ + add sp, 0x10\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08050740: .4byte gUnknown_03000510\n\ + .syntax divided"); +} + +#endif // NONMATCHING + +void sub_8050744(struct BlenderBerry* berries, struct Pokeblock* pokeblock, u8 a2, u8* a3, u16 a4) +{ + sub_8050520(berries, pokeblock, a2, a3, a4); // what is the purpose of this function? +} + +void sub_8050760(void) +{ + u32 frames = (u16)(sBerryBlenderData->gameFrameTime); + u32 max_RPM = (u16)(sBerryBlenderData->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 ((u16)(max_RPM - 50) < 50) + var = -1; + else if ((u16)(max_RPM - 100) < 50) + var = -2; + else if ((u16)(max_RPM - 150) < 50) + var = -3; + else if ((u16)(max_RPM - 200) < 50) + var = -4; + else if ((u16)(max_RPM - 250) < 50) + var = -5; + else if ((u16)(max_RPM - 350) < 50) + var = -6; + else if ((u16)(max_RPM - 400) < 50) + var = -7; + else if ((u16)(max_RPM - 500) < 50) + var = -8; + else if ((u16)(max_RPM - 550) < 50) + var = -9; + else if (max_RPM >= 600) + var = -10; + } + sub_80504F0(var); +} + +void sub_80508D4(u8 value) +{ + sBerryBlenderData->field_AA = value; + sub_814A880(192, (sBerryBlenderData->field_AA * 16) + 72); +} + +void sub_80508FC(void) +{ + sBerryBlenderData->field_AA = 0; + MenuDrawTextWindow(23, 8, 28, 13); + sub_814A5C0(0, -1, 12, 0x2D9F, 32); + MenuPrint(gOtherText_YesNoTerminating, 24, 9); + sub_80508D4(sBerryBlenderData->field_AA); +} + +void sub_8050954(void) +{ + u8 i; + u8 multiplayerID; // unused + + sub_8051474(); + multiplayerID = GetMultiplayerId(); + switch (sBerryBlenderData->field_6F) + { + case 1: + ClearLinkCallback(); + m4aMPlayTempoControl(&gMPlay_BGM, 256); + for (i = 0; i < gSpecialVar_0x8004; i++) + { + DestroyTask(sBerryBlenderData->field_148[i]); + } + sBerryBlenderData->field_6F++; + break; + case 2: + sBerryBlenderData->field_56 -= 32; + if (sBerryBlenderData->field_56 <= 0) + { + sBerryBlenderData->field_56 = 0; + if (gReceivedRemoteLinkPlayers != 0) + sBerryBlenderData->field_6F++; + else + sBerryBlenderData->field_6F = 5; + sBerryBlenderData->field_0 = 0; + m4aMPlayStop(&gMPlay_SE2); + } + Blender_ControlHitPitch(); + break; + case 3: + if (/*multiplayerID != 0*/ GetMultiplayerId() != 0) + sBerryBlenderData->field_6F++; + else if (sub_8007ECC()) + { + sBerryBlenderData->field_1BC = sBerryBlenderData->gameFrameTime; + sBerryBlenderData->field_1C0 = sBerryBlenderData->max_RPM; + SendBlock(0, &sBerryBlenderData->field_1BC, 40); + sBerryBlenderData->field_6F++; + } + break; + case 4: + if (GetBlockReceivedStatus()) + { + u32* ptr = ((u32*)(&gBlockRecvBuffer[0][0])); + sBerryBlenderData->max_RPM = gBlockRecvBuffer[0][2]; + sBerryBlenderData->gameFrameTime = *ptr; + sBerryBlenderData->field_6F++; + ResetBlockReceivedFlags(); + } + break; + case 5: + if (Blender_PrintBlendingRanking()) + sBerryBlenderData->field_6F++; + break; + case 6: + if (Blender_PrintBlendingResults()) + { + if (gUnknown_03004834 == 0) + IncrementGameStat(34); + else + IncrementGameStat(33); + sBerryBlenderData->field_6F++; + } + break; + case 7: + sBerryBlenderData->field_6F++; + MenuDrawTextWindow(0, 14, 29, 19); + MenuPrintMessage(gOtherText_BlendAnotherBerryPrompt, 1, 15); + break; + case 8: + if (MenuUpdateWindowText()) + sBerryBlenderData->field_6F++; + break; + case 9: + sBerryBlenderData->field_AA = 0; + sub_80508FC(); + sBerryBlenderData->field_6F++; + break; + case 10: + if (gMain.newKeys & DPAD_UP) + { + if (sBerryBlenderData->field_AA != 0) + PlaySE(SE_SELECT); + sub_80508D4(0); + } + else if (gMain.newKeys & DPAD_DOWN) + { + if (sBerryBlenderData->field_AA != 1) + PlaySE(SE_SELECT); + sub_80508D4(1); + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + sBerryBlenderData->field_6F++; + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + sBerryBlenderData->field_6F++; + sub_80508D4(1); + } + break; + case 11: + gSendCmd[0] = 0x2FFF; + if (sBerryBlenderData->field_AA == 0) + { + if (IsBagPocketNonEmpty(BAG_BERRIES) == FALSE) // is empty + { + sBerryBlenderData->field_7C = 2; + gSendCmd[1] = 0x9999; + } + else if (sub_810CA00() == -1) + { + sBerryBlenderData->field_7C = 3; + gSendCmd[1] = 0xAAAA; + } + else + { + sBerryBlenderData->field_7C = 0; + gSendCmd[1] = 0x7779; + } + sBerryBlenderData->field_6F++; + } + else + { + sBerryBlenderData->field_7C = 1; + gSendCmd[1] = 0x8888; + sBerryBlenderData->field_6F++; + } + break; + case 12: + if (gUnknown_03004834) + { + SetMainCallback2(sub_80510E8); + sBerryBlenderData->field_6F = 0; + sBerryBlenderData->field_0 = 0; + } + else + { + MenuPrintMessage(gOtherText_LinkStandby3, 1, 15); + sBerryBlenderData->field_6F++; + } + break; + case 13: + if (MenuUpdateWindowText()) + { + SetMainCallback2(sub_8050E30); + sBerryBlenderData->field_6F = 0; + sBerryBlenderData->field_0 = 0; + } + break; + } + sub_8051B18(); + sub_8051A3C(sBerryBlenderData->field_56); + sub_805123C(); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +bool8 sub_8050CE8(void) +{ + switch (sBerryBlenderData->field_1C4) + { + case 0: + sub_80084A4(); + sBerryBlenderData->field_1C4 = 1; + sBerryBlenderData->framesToWait = 0; + break; + case 1: + if (sub_8007ECC()) + { + sBerryBlenderData->field_1C4++; + gSoftResetDisabled = TRUE; + } + break; + case 2: + sub_8125E2C(); + sBerryBlenderData->field_1C4++; + sBerryBlenderData->framesToWait = 0; + break; + case 3: + if (++sBerryBlenderData->framesToWait == 10) + { + sub_80084A4(); + sBerryBlenderData->field_1C4++; + } + break; + case 4: + if (sub_8007ECC()) + { + if (sub_8125E6C()) + sBerryBlenderData->field_1C4 = 5; + else + { + sBerryBlenderData->framesToWait = 0; + sBerryBlenderData->field_1C4 = 3; + } + } + break; + case 5: + sBerryBlenderData->field_1C4++; + sBerryBlenderData->framesToWait = 0; + break; + case 6: + if (++sBerryBlenderData->framesToWait > 5) + { + gSoftResetDisabled = FALSE; + return 1; + } + break; + } + return 0; +} + +void sub_8050E30(void) +{ + switch (sBerryBlenderData->field_6F) + { + case 0: + if (sBerryBlenderData->field_70[0] == 0x2222) + sBerryBlenderData->field_6F = 5; + else if (sBerryBlenderData->field_70[0] == 0x1111) + { + if (sBerryBlenderData->field_78 == 0x9999) + sBerryBlenderData->field_6F = 2; + else if (sBerryBlenderData->field_78 == 0xAAAA) + sBerryBlenderData->field_6F = 1; + else + sBerryBlenderData->field_6F = 5; + } + break; + case 1: + sBerryBlenderData->field_6F = 3; + DestroyMenuCursor(); + MenuZeroFillWindowRect(23, 8, 28, 13); + StringCopy(gStringVar4, gLinkPlayers[sBerryBlenderData->field_7A].name); + StringAppend(gStringVar4, gOtherText_OtherCaseIsFull); + MenuPrintMessage(gStringVar4, 1, 15); + break; + case 2: + sBerryBlenderData->field_6F++; + DestroyMenuCursor(); + MenuZeroFillWindowRect(23, 8, 28, 13); + StringCopy(gStringVar4, gLinkPlayers[sBerryBlenderData->field_7A].name); + StringAppend(gStringVar4, gOtherText_NoBerriesForBlend); + MenuPrintMessage(gStringVar4, 1, 15); + break; + case 3: + if (MenuUpdateWindowText()) + { + sBerryBlenderData->framesToWait = 0; + sBerryBlenderData->field_6F++; + } + break; + case 4: + if (++sBerryBlenderData->framesToWait > 60) + sBerryBlenderData->field_6F = 5; + break; + case 5: + MenuDrawTextWindow(0, 14, 29, 19); + MenuPrint(gMultiText_Saving, 2, 15); + sub_80084A4(); + sBerryBlenderData->field_6F++; + break; + case 6: + if (sub_8007ECC()) + { + sBerryBlenderData->framesToWait = 0; + sBerryBlenderData->field_6F++; + sBerryBlenderData->field_1C4 = 0; + } + break; + case 7: + if (sub_8050CE8()) + { + PlaySE(SE_SAVE); + sBerryBlenderData->field_6F++; + } + break; + case 8: + sBerryBlenderData->field_6F++; + sub_80084A4(); + break; + case 9: + if (sub_8007ECC()) + { + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + sBerryBlenderData->field_6F++; + } + break; + case 10: + if (!gPaletteFade.active) + { + if (sBerryBlenderData->field_70[0] == 0x2222) + SetMainCallback2(sub_804E538); + else + { + sBerryBlenderData->framesToWait = 0; + sBerryBlenderData->field_6F++; + } + } + break; + case 11: + if (++sBerryBlenderData->framesToWait > 30) + { + sub_800832C(); + sBerryBlenderData->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(); +} + +void sub_80510E8(void) +{ + switch (sBerryBlenderData->field_6F) + { + case 0: + if (sBerryBlenderData->field_7C < 2) + sBerryBlenderData->field_6F = 9; + if (sBerryBlenderData->field_7C == 2) + sBerryBlenderData->field_6F = 2; + if (sBerryBlenderData->field_7C == 3) + sBerryBlenderData->field_6F =1; + break; + case 1: + sBerryBlenderData->field_6F = 3; + DestroyMenuCursor(); + MenuZeroFillWindowRect(23, 8, 28, 13); + MenuPrintMessage(gOtherText_CaseIsFull, 1, 15); + break; + case 2: + sBerryBlenderData->field_6F++; + DestroyMenuCursor(); + MenuZeroFillWindowRect(23, 8, 28, 13); + MenuPrintMessage(gOtherText_OutOfBerries, 1, 15); + break; + case 3: + if (MenuUpdateWindowText()) + sBerryBlenderData->field_6F = 9; + break; + case 9: + BeginFastPaletteFade(3); + sBerryBlenderData->field_6F++; + break; + case 10: + if (!gPaletteFade.active) + { + if (sBerryBlenderData->field_7C == 0) + SetMainCallback2(sub_804E538); + else + SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); + } + break; + } + + sub_805123C(); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_805123C(void) +{ + if (gReceivedRemoteLinkPlayers) + { + if (gRecvCmds[0][0] == 0x2FFF) + { + if (gRecvCmds[1][0] == 0x1111) + { + switch (gRecvCmds[2][0]) + { + case 0x8888: + sBerryBlenderData->field_78 = 0x8888; + sBerryBlenderData->field_7A = gRecvCmds[3][0]; + break; + case 0x9999: + sBerryBlenderData->field_78 = 0x9999; + sBerryBlenderData->field_7A = gRecvCmds[3][0]; + break; + case 0xAAAA: + sBerryBlenderData->field_78 = 0xAAAA; + sBerryBlenderData->field_7A = gRecvCmds[3][0]; + break; + } + sBerryBlenderData->field_70[0] = 0x1111; + } + else if (gRecvCmds[1][0] == 0x2222) + sBerryBlenderData->field_70[0] = 0x2222; + } + if (GetMultiplayerId() == 0 && sBerryBlenderData->field_70[0] != 0x1111 && sBerryBlenderData->field_70[0] != 0x2222) + { + u8 i; + for (i = 0; i < GetLinkPlayerCount(); i++) + { + if (gRecvCmds[0][i] == 0x2FFF) + { + switch (gRecvCmds[1][i]) + { + case 0x8888: + sBerryBlenderData->field_70[i] = 0x8888; + break; + case 0x7779: + sBerryBlenderData->field_70[i] = 0x7779; + break; + case 0x9999: + sBerryBlenderData->field_70[i] = 0x9999; + break; + case 0xAAAA: + sBerryBlenderData->field_70[i] = 0xAAAA; + break; + } + } + } + for (i = 0; i < GetLinkPlayerCount(); i++) + { + if (sBerryBlenderData->field_70[i] == 0) + break; + } + if (i == GetLinkPlayerCount()) + { + for (i = 0; i < GetLinkPlayerCount(); i++) + { + if (sBerryBlenderData->field_70[i] != 0x7779) + break; + } + gSendCmd[0] = 0x2FFF; + if (i == GetLinkPlayerCount()) + gSendCmd[1] = 0x2222; + else + { + gSendCmd[1] = 0x1111; + gSendCmd[2] = sBerryBlenderData->field_70[i]; + gSendCmd[3] = i; + } + } + } + } +} + +void sub_8051414(struct BgAffineDstData *dest) +{ + struct BgAffineSrcData affineSrc; + affineSrc.texX = 30720; + affineSrc.texY = 20480; + affineSrc.scrX = 120 - sBerryBlenderData->field_144; + affineSrc.scrY = 80 - sBerryBlenderData->field_146; + affineSrc.sx = sBerryBlenderData->field_142; + affineSrc.sy = sBerryBlenderData->field_142; + affineSrc.alpha = sBerryBlenderData->arrowPos; + BgAffineSet(&affineSrc, dest, 1); +} + +void sub_8051474(void) +{ + sBerryBlenderData->field_58 = sBerryBlenderData->arrowPos; + sBerryBlenderData->arrowPos += sBerryBlenderData->field_56; + sub_8051414(&sBerryBlenderData->field_168); +} + +void sub_80514A4(void) +{ + REG_BG2PA = sBerryBlenderData->field_168.pa; + REG_BG2PB = sBerryBlenderData->field_168.pb; + REG_BG2PC = sBerryBlenderData->field_168.pc; + REG_BG2PD = sBerryBlenderData->field_168.pd; + REG_BG2X = sBerryBlenderData->field_168.dx; + REG_BG2Y = sBerryBlenderData->field_168.dy; +} + +void sub_80514F0(void) +{ + REG_BG1HOFS = sBerryBlenderData->field_144; + REG_BG1VOFS = sBerryBlenderData->field_146; + REG_BG0HOFS = sBerryBlenderData->field_144; + REG_BG0VOFS = sBerryBlenderData->field_146; +} + +void sub_8051524(struct Sprite* sprite) +{ + sprite->data2 += sprite->data0; + sprite->data3 += sprite->data1; + sprite->pos2.x = sprite->data2 / 8; + sprite->pos2.y = sprite->data3 / 8; + if (sprite->animEnded) + DestroySprite(sprite); +} + +extern const struct SpriteTemplate gSpriteTemplate_82164FC; + +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 = sBerryBlenderData->arrowPos + (Random() % 20); + + x = gSineTable[(rand & 0xFF) + 64] / 4; + y = gSineTable[(rand & 0xFF)] / 4; + + spriteID = CreateSprite(&gSpriteTemplate_82164FC, x + 120, y + 80, 1); + gSprites[spriteID].data0 = 16 - (Random() % 32); + gSprites[spriteID].data1 = 16 - (Random() % 32); + + gSprites[spriteID].callback = sub_8051524; + } +} + +void sub_8051650(struct Sprite* sprite) +{ + sprite->data0++; + sprite->pos2.y = -(sprite->data0 / 3); + if (sprite->animEnded) + DestroySprite(sprite); +} + +void sub_8051684(struct Sprite* sprite) +{ + sprite->data0++; + sprite->pos2.y = -(sprite->data0 * 2); + if (sprite->pos2.y < -12) + sprite->pos2.y = -12; + if (sprite->animEnded) + DestroySprite(sprite); +} + +void Blender_SetBankBerryData(u8 bank, u16 itemID) +{ + sBerryBlenderData->chosenItemID[bank] = itemID; + Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[bank], itemID); +} + +extern const u8* const gUnknown_08216284[]; +extern u8 byte_3002A68; + +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) + { + ZeroFillWindowRect(&sBerryBlenderData->field_4, 0, 0, 16, 20); + MenuDrawTextWindow(4, 4, 10, 12); + for (i = 0; i < 3; i++) + { + if (gLinkPlayers[i + 1].trainerId != 0) + MenuPrint(gUnknown_08216284[i], 5, (2 * i) + 5); + MenuDrawTextWindow(0, 13, 29, 19); + MenuPrint(gOtherText_PressAToStart, 1, 15); + } + } + if (gMain.newKeys & A_BUTTON) + { + sub_8007E4C(); + DestroyTask(taskID); + } + } + else + { + if (task->data[0] == 10) + MenuPrint(gOtherText_PleaseWait, 3, 10); + if (++task->data[0] > 120) + task->data[0] = 0; + if (byte_3002A68 > 4 && gReceivedRemoteLinkPlayers == 1) + DestroyTask(taskID); + } + } +} + +extern const struct SpriteTemplate gSpriteTemplate_821657C; + +void sub_805181C(struct Sprite* sprite) +{ + switch (sprite->data0) + { + case 0: + sprite->data1 += 8; + if (sprite->data1 > 88) + { + sprite->data1 = 88; + sprite->data0++; + PlaySE(SE_KON); + } + break; + case 1: + sprite->data2 += 1; + if (sprite->data2 > 20) + { + sprite->data0++; + sprite->data2 = 0; + } + break; + case 2: + sprite->data1 += 4; + if (sprite->data1 > 176) + { + if (++sprite->data3 == 3) + { + DestroySprite(sprite); + CreateSprite(&gSpriteTemplate_821657C, 120, -20, 2); + } + else + { + sprite->data0 = 0; + sprite->data1 = -16; + StartSpriteAnim(sprite, sprite->data3); + } + } + break; + } + sprite->pos2.y = sprite->data1; +} + +void sub_80518CC(struct Sprite* sprite) +{ + switch (sprite->data0) + { + case 0: + sprite->data1 += 8; + if (sprite->data1 > 92) + { + sprite->data1 = 92; + sprite->data0++; + PlaySE(SE_PIN); + } + break; + case 1: + sprite->data2 += 1; + if (sprite->data2 > 20) + sprite->data0++; + break; + case 2: + sprite->data1 += 4; + if (sprite->data1 > 176) + { + sBerryBlenderData->field_0++; + DestroySprite(sprite); + } + break; + } + sprite->pos2.y = sprite->data1; +} + +void sub_805194C(u16 a0, u16 a1) +{ + if (sBerryBlenderData->field_140 < a0) + { + sBerryBlenderData->field_140 += 2; + sub_805197C(sBerryBlenderData->field_140, a1); + } +} + +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; + } +} + +u32 sub_8051A1C(u16 a0) +{ + return 360000 * a0 / 0x10000; +} + +void sub_8051A3C(u16 a0) +{ + u8 i; + u8 palAdders[5]; + + u32 var = sub_8051A1C(a0); + if (sBerryBlenderData->max_RPM < var) + sBerryBlenderData->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; +} + +void sub_8051AC8(s16* a0, u16 a1) +{ + if (*a0 == 0) + *a0 = (Random() % a1) - (a1 / 2); +} + +void sub_8051AF4(s16* a0) +{ + if (*a0 < 0 ) + (*a0)++; + if (*a0 > 0 ) + (*a0)--; +} + +void sub_8051B18(void) +{ + sub_8051AF4(&sBerryBlenderData->field_144); + sub_8051AF4(&sBerryBlenderData->field_146); +} + +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)--; + } +} + +bool8 sub_8051B8C(void) +{ + if (sBerryBlenderData->framesToWait == 0) + { + sBerryBlenderData->field_144 = 0; + sBerryBlenderData->field_146 = 0; + } + sBerryBlenderData->framesToWait++; + sub_8051B40(&sBerryBlenderData->field_144, sBerryBlenderData->framesToWait); + sub_8051B40(&sBerryBlenderData->field_146, sBerryBlenderData->framesToWait); + if (sBerryBlenderData->framesToWait == 20) + { + sBerryBlenderData->field_144 = 0; + sBerryBlenderData->field_146 = 0; + return 1; + } + else + return 0; +} + +void sub_8051C04(struct Sprite* sprite) +{ + sprite->pos2.x = -(sBerryBlenderData->field_144); + sprite->pos2.y = -(sBerryBlenderData->field_146); +} + +void Blender_TrySettingRecord(void) +{ + if (gSaveBlock1.berryBlenderRecords[sBerryBlenderData->playersNo - 2] < sBerryBlenderData->max_RPM) + gSaveBlock1.berryBlenderRecords[sBerryBlenderData->playersNo - 2] = sBerryBlenderData->max_RPM; +} + +extern const u8 gUnknown_082165E9[]; +extern const u8 gUnknown_082165EE[]; + +bool8 Blender_PrintBlendingResults(void) +{ + u16 i; + + struct Pokeblock pokeblock; + u8 vars2[8]; + u8 text[2][10]; + u16 berryIDs[4]; // unused + + switch (sBerryBlenderData->field_0) + { + case 0: + sBerryBlenderData->field_0++; + sBerryBlenderData->framesToWait = 17; + break; + case 1: + sBerryBlenderData->framesToWait -= 10; + if (sBerryBlenderData->framesToWait < 0) + { + sBerryBlenderData->framesToWait = 0; + sBerryBlenderData->field_0++; + } + break; + case 2: + if (++sBerryBlenderData->framesToWait > 20) + { + for (i = 0; i < 3; i++) + DestroySprite(&gSprites[sBerryBlenderData->scoreIconIDs[i]]); + sBerryBlenderData->framesToWait = 0; + sBerryBlenderData->field_0++; + } + break; + case 3: + { + u8* textPtr; + u16 secondsPassed, minutes, seconds; + + MenuDrawTextWindow(4, 2, 25, 17); + sub_8072BD8(gOtherText_ResultsOfBlending, 5, 3, 160); + for (i = 0; i < sBerryBlenderData->playersNo; i++) + { + u8 place = sBerryBlenderData->playerPlaces[i]; + textPtr = text[0]; + + StringCopy(textPtr, sBerryBlenderData->blendedBerries[place].name); + ConvertInternationalString(textPtr, gLinkPlayers[place].language); + StringAppend(textPtr, gOtherText_Berry); + textPtr = sBerryBlenderData->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); + MenuPrint(sBerryBlenderData->stringVar, 5, gUnknown_082165E9[sBerryBlenderData->playersNo] + (i * gUnknown_082165EE[sBerryBlenderData->playersNo])); + } + ConvertIntToDecimalStringN(text[0], sBerryBlenderData->max_RPM % 100, 2, 2); + textPtr = sBerryBlenderData->stringVar; + textPtr = StringCopy(textPtr, gOtherText_MaxSpeed); + textPtr = sub_8072C14(textPtr, sBerryBlenderData->max_RPM / 100, 121, 1); + + textPtr[0] = CHAR_SPACE; + textPtr[1] = CHAR_PERIOD; + textPtr[2] = CHAR_SPACE; + textPtr += 3; + + textPtr = sub_8072C74(textPtr, text[0], 142, 1); + StringCopy(textPtr, gOtherText_RPM); + MenuPrint(sBerryBlenderData->stringVar, 5, 13); + + secondsPassed = sBerryBlenderData->gameFrameTime / 60; + seconds = secondsPassed % 60; + minutes = secondsPassed / 60; + ConvertIntToDecimalStringN(text[0], minutes, 2, 2); + ConvertIntToDecimalStringN(text[1], seconds, 2, 2); + textPtr = sBerryBlenderData->stringVar; + textPtr = StringCopy(textPtr, gOtherText_RequiredTime); + + textPtr = sub_8072C74(textPtr, text[0], 102, 1); + textPtr = StringAppend(textPtr, gOtherText_Min); + + textPtr = sub_8072C74(textPtr, text[1], 136, 1); + StringCopy(textPtr, gOtherText_Sec); + + MenuPrint(sBerryBlenderData->stringVar, 5, 15); + + sBerryBlenderData->framesToWait = 0; + sBerryBlenderData->field_0++; + } + break; + case 4: + if (gMain.newKeys & A_BUTTON) + sBerryBlenderData->field_0++; + break; + case 5: + MenuZeroFillScreen(); + MenuDrawTextWindow(0, 14, 29, 19); + for (i = 0; i < BLENDER_MAX_PLAYERS; i++) + { + if (sBerryBlenderData->chosenItemID[i] != 0) + berryIDs[i] = sBerryBlenderData->chosenItemID[i] - 133; + } + sub_8050760(); + sub_8050520(sBerryBlenderData->blendedBerries, &pokeblock, sBerryBlenderData->playersNo, vars2, sBerryBlenderData->max_RPM); + Blender_PrintMadePokeblockString(&pokeblock, sBerryBlenderData->stringVar); + CreateTask(sub_8052BD0, 6); + MenuPrintMessage(sBerryBlenderData->stringVar, 1, 15); + RemoveBagItem(gScriptItemId, 1); + sub_810CA34(&pokeblock); + sBerryBlenderData->field_0++; + break; + case 6: + if (MenuUpdateWindowText()) + { + Blender_TrySettingRecord(); + return 1; + } + break; + } + return 0; +} + +extern const u8 gUnknown_08216249[]; +extern const u8 gUnknown_082162C8[]; +extern const u8 *const gPokeblockNames[]; + +void Blender_PrintMadePokeblockString(struct Pokeblock* pokeblock, u8* dst) +{ + u8 text[12]; + u8 flavourLvl, feel; + + dst[0] = EOS; + StringCopy(dst, gPokeblockNames[pokeblock->color]); + StringAppend(dst, gOtherText_PokeBlockMade); + StringAppend(dst, gUnknown_082162C8); + + 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); +} + +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; + } + } + } +} + +void Blender_SortScores(void) +{ + u8 i; + u8 places[4]; + u32 points[4]; + + for (i = 0; i < sBerryBlenderData->playersNo; i++) + places[i] = i; + for (i = 0; i < sBerryBlenderData->playersNo; i++) + { + points[i] = 1000000 * sBerryBlenderData->scores[i][BLENDER_SCORE_BEST]; + points[i] += 1000 * sBerryBlenderData->scores[i][BLENDER_SCORE_GOOD]; + points[i] += 1000 - sBerryBlenderData->scores[i][BLENDER_SCORE_MISS]; + } + Blender_SortBasedOnPoints(places, sBerryBlenderData->playersNo, points); + for (i = 0; i < sBerryBlenderData->playersNo; i++) + sBerryBlenderData->playerPlaces[i] = places[i]; +} + +extern const u8 gUnknown_082165F3[]; + +bool8 Blender_PrintBlendingRanking(void) +{ + u16 i; + switch (sBerryBlenderData->field_0) + { + case 0: + sBerryBlenderData->field_0++; + sBerryBlenderData->framesToWait = 255; + break; + case 1: + sBerryBlenderData->framesToWait -= 10; + if (sBerryBlenderData->framesToWait < 0) + { + sBerryBlenderData->framesToWait = 0; + sBerryBlenderData->field_0++; + } + break; + case 2: + if (++sBerryBlenderData->framesToWait > 20) + { + sBerryBlenderData->framesToWait = 0; + sBerryBlenderData->field_0++; + } + break; + case 3: + MenuDrawTextWindow(4, 2, 25, 17); + sub_8072BD8(gOtherText_Ranking, 5, 3, 160); + + sBerryBlenderData->scoreIconIDs[BLENDER_SCORE_BEST] = CreateSprite(&gSpriteTemplate_821645C, 140, 52, 0); + gSprites[sBerryBlenderData->scoreIconIDs[BLENDER_SCORE_BEST]].callback = SpriteCallbackDummy; + StartSpriteAnim(&gSprites[sBerryBlenderData->scoreIconIDs[BLENDER_SCORE_BEST]], 3); + + sBerryBlenderData->scoreIconIDs[BLENDER_SCORE_GOOD] = CreateSprite(&gSpriteTemplate_821645C, 164, 52, 0); + gSprites[sBerryBlenderData->scoreIconIDs[BLENDER_SCORE_GOOD]].callback = SpriteCallbackDummy; + + sBerryBlenderData->scoreIconIDs[BLENDER_SCORE_MISS] = CreateSprite(&gSpriteTemplate_821645C, 188, 52, 0); + gSprites[sBerryBlenderData->scoreIconIDs[BLENDER_SCORE_MISS]].callback = SpriteCallbackDummy; + StartSpriteAnim(&gSprites[sBerryBlenderData->scoreIconIDs[BLENDER_SCORE_MISS]], 1); + + Blender_SortScores(); + + for (i = 0; i < sBerryBlenderData->playersNo; i++) + { + u8 place = sBerryBlenderData->playerPlaces[i]; + u8* txtPtr = sBerryBlenderData->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, sBerryBlenderData->scores[place][BLENDER_SCORE_BEST], 108, 1); + txtPtr = sub_8072C14(txtPtr, sBerryBlenderData->scores[place][BLENDER_SCORE_GOOD], 132, 1); + txtPtr = sub_8072C14(txtPtr, sBerryBlenderData->scores[place][BLENDER_SCORE_MISS], 156, 1); + + MenuPrint(sBerryBlenderData->stringVar, 5, i * gUnknown_082165F3[sBerryBlenderData->playersNo] + 8); + } + sBerryBlenderData->framesToWait = 0; + sBerryBlenderData->field_0++; + break; + case 4: + if (++sBerryBlenderData->framesToWait > 20) + sBerryBlenderData->field_0++; + break; + case 5: + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + sBerryBlenderData->field_0++; + } + break; + case 6: + sBerryBlenderData->field_0 = 0; + return 1; + } + return 0; +} + +struct UnknownStruct +{ + s8 bytes[24]; + s16 hword[2]; +}; + +extern struct UnknownStruct gUnknown_03000560; + +void unref_sub_80524BC(void) +{ + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + SetVBlankCallback(VBlankCB1_BerryBlender); + SetUpWindowConfig(&gWindowConfig_81E6CE4); + InitMenuWindow(&gWindowConfig_81E6CE4); + SeedRng(gMain.vblankCounter1); + REG_DISPCNT = 0x1540; + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + gUnknown_03000560.hword[1] = 0x1F40; + gUnknown_03000560.bytes[16]++; + SetMainCallback2(sub_8052AF8); +} diff --git a/src/link.c b/src/link.c index 5858ad8bf..850201ccb 100644 --- a/src/link.c +++ b/src/link.c @@ -2,7 +2,6 @@ #include "link.h" #include "battle.h" #include "berry.h" -#include "berry_blender.h" #include "hall_of_fame.h" #include "item_use.h" #include "main.h" @@ -42,6 +41,8 @@ extern u16 gBattleTypeFlags; extern u16 word_3004858; +extern void Blender_SetBankBerryData(u8 bank, u16 itemID); + static void InitLinkTestBG(u8, u8, u8, u8); void InitLinkTestBG_Unused(u8, u8, u8, u8); void LinkTestScreen(); @@ -556,7 +557,7 @@ static void ProcessRecvCmds(u8 unusedParam) sub_8007E24(); break; case 0xAAAB: - sub_80516C4(i, gRecvCmds[1][i]); + Blender_SetBankBerryData(i, gRecvCmds[1][i]); break; case 0xCCCC: #if defined(ENGLISH) -- cgit v1.2.3 From bf0f2e4a0ba447abf50340586045f3567ab7a9b8 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 13 Aug 2017 23:52:47 +0200 Subject: berry blender is decompiled --- src/berry_blender.c | 1658 ++++++++++++++++++++++++++++----------------------- 1 file changed, 927 insertions(+), 731 deletions(-) (limited to 'src') diff --git a/src/berry_blender.c b/src/berry_blender.c index 74b87b983..cbf50fdb3 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -47,17 +47,6 @@ struct MusicPlayerInfo u32 intp; }; -// 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 sub_814A880(u8 a1, u8 a2); -u8 sub_814A5C0(u8 a1, u16 a2, u8 a3, u16 a4, u8 a5); -s8 sub_810CA00(void); -bool8 sub_810CA34(struct Pokeblock *pokeblock); - #define BLENDER_SCORE_BEST 0 #define BLENDER_SCORE_GOOD 1 #define BLENDER_SCORE_MISS 2 @@ -83,8 +72,6 @@ struct BerryBlenderData { u8 field_0; u8 field_1; - u8 field_2; - u8 field_3; struct Window field_4; u8 field_35; u8 field_36; @@ -158,75 +145,7 @@ struct BerryBlenderData u16 field_9A[BLENDER_MAX_PLAYERS]; u16 field_A2[BLENDER_MAX_PLAYERS]; u8 field_AA; - u8 stringVar[61]; - u8 field_E8; - u8 field_E9; - u8 field_EA; - u8 field_EB; - u8 field_EC; - u8 field_ED; - u8 field_EE; - u8 field_EF; - u8 field_F0; - u8 field_F1; - u8 field_F2; - u8 field_F3; - u8 field_F4; - u8 field_F5; - u8 field_F6; - u8 field_F7; - u8 field_F8; - u8 field_F9; - u8 field_FA; - u8 field_FB; - u8 field_FC; - u8 field_FD; - u8 field_FE; - u8 field_FF; - u8 field_100; - u8 field_101; - u8 field_102; - u8 field_103; - u8 field_104; - u8 field_105; - u8 field_106; - u8 field_107; - u8 field_108; - u8 field_109; - u8 field_10A; - u8 field_10B; - u8 field_10C; - u8 field_10D; - u8 field_10E; - u8 field_10F; - u8 field_110; - u8 field_111; - u8 field_112; - u8 field_113; - u8 field_114; - u8 field_115; - u8 field_116; - u8 field_117; - u8 field_118; - u8 field_119; - u8 field_11A; - u8 field_11B; - u8 field_11C; - u8 field_11D; - u8 field_11E; - u8 field_11F; - u8 field_120; - u8 field_121; - u8 field_122; - u8 field_123; - u8 field_124; - u8 field_125; - u8 field_126; - u8 field_127; - u8 field_128; - u8 field_129; - u8 field_12A; - u8 field_12B; + u8 stringVar[129]; u32 gameFrameTime; s32 framesToWait; u32 field_134; @@ -247,8 +166,6 @@ struct BerryBlenderData u8 playerPlaces[BLENDER_MAX_PLAYERS]; struct BgAffineDstData field_168; u16 field_178; - u8 field_17A; - u8 field_17B; struct BlenderBerry blendedBerries[BLENDER_MAX_PLAYERS]; u32 field_1BC; u16 field_1C0; @@ -256,51 +173,150 @@ struct BerryBlenderData u32 field_1C4; }; -extern struct BerryBlenderData* sBerryBlenderData; +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 sub_814A880(u8 a1, u8 a2); +u8 sub_814A5C0(u8 a1, u16 a2, u8 a3, u16 a4, u8 a5); +s8 sub_810CA00(void); +bool8 sub_810CA34(struct Pokeblock *pokeblock); extern struct MusicPlayerInfo gMPlay_SE2; extern struct MusicPlayerInfo gMPlay_BGM; extern u8 ewram[]; -extern s16 gUnknown_03000520[]; - -// this file's functions: -void sub_80514A4(void); -void sub_80514F0(void); -void sub_804E56C(void); -void sub_804E884(u8 a0); -void sub_8051474(void); -void sub_804E9F8(void); -void sub_804F378(void); -void sub_8051414(struct BgAffineDstData *dest); -void sub_804F238(void); -void sub_80501FC(void); -bool8 sub_8051B8C(void); +extern u16 gScriptItemId; +extern u8 gUnknown_020297ED; +extern u8 byte_3002A68; + +// rom data to do + +extern const u8 gUnknown_08E6C100[]; +extern const u8 gUnknown_08215C2C[]; +extern const u8 gUnknown_08E6C920[]; +extern const u8 gUnknown_08E6D354[]; +extern const u16 gUnknown_08215C0C[]; +extern const u16 gUnknown_0821602C[]; +extern const struct SpriteSheet gUnknown_082163DC; +extern const struct SpriteSheet gUnknown_082164F4; +extern const struct SpriteSheet gUnknown_08216454; +extern const struct SpriteSheet gUnknown_08216540; +extern const struct SpriteSheet gUnknown_08216574; +extern const struct SpritePalette gUnknown_082163EC; +extern const struct SpritePalette gUnknown_082163E4; +extern const struct WindowConfig gWindowConfig_81E6F68; +extern const u8 sBlenderSyncArrowsPos[][2]; +extern const struct SpriteTemplate sBlenderSyncArrow_SpriteTemplate; +extern const s16 gUnknown_08216594[][5]; +extern const u8* const gUnknown_082162B8[]; +extern const u8 gUnknown_082162EC[3][4]; +extern const u16 gUnknown_082162F8[]; +extern const u8 gUnknown_08216300[]; +extern const struct SpriteTemplate gSpriteTemplate_8216548; +extern const u8 gUnknown_08216303[]; +extern const u8 gUnknown_082165BC[][3]; +extern const u8 gUnknown_082162C4[]; +extern const u8 gUnknown_082162D4[][2]; +extern const TaskFunc gUnknown_08216308[]; +extern const s8 gUnknown_082162CC[][2]; +extern const struct SpriteTemplate gSpriteTemplate_821645C; +extern const u8 gUnknown_082165DA[]; +extern const u8 gUnknown_082165DF[]; +extern const struct SpriteTemplate gSpriteTemplate_82164FC; +extern const u8* const gUnknown_08216284[]; +extern const struct SpriteTemplate gSpriteTemplate_821657C; +extern const u8 gUnknown_082165E9[]; +extern const u8 gUnknown_082165EE[]; +extern const u8 gUnknown_08216249[]; +extern const u8 gUnknown_082162C8[]; +extern const u8 *const gPokeblockNames[]; +extern const u8 gUnknown_082165F3[]; +extern const u8 gOtherText_BPMAndDash[]; +extern const u8 gUnknown_082165F8[]; +extern const u8 gUnknown_08216600[]; +extern const struct Berry gBerries[]; + +// 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 gUnknown_03004834; +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); -void sub_804F2A8(void); -void sub_804F81C(void); -void sub_805156C(void); + +static void sub_80514A4(void); +static void sub_80514F0(void); +static void sub_804E56C(void); +static void sub_804E884(u8 a0); +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); -void sub_8051AC8(s16* a0, u16 a1); -void sub_805194C(u16 a0, u16 a1); -void sub_8051A3C(u16 a0); -void sub_8051B18(void); -void sub_805123C(void); -void sub_8050954(void); -bool8 Blender_PrintBlendingRanking(void); -bool8 Blender_PrintBlendingResults(void); -void sub_80510E8(void); -void sub_8050E30(void); -void sub_805197C(u16 a0, u16 a1); -void Blender_PrintMadePokeblockString(struct Pokeblock* pokeblock, u8* dst); -void sub_8052BD0(u8 taskID); -void sub_8052AF8(void); +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); +static 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); -void Blender_ControlHitPitch(void) +static void Blender_ControlHitPitch(void) { - m4aMPlayPitchControl(&gMPlay_SE2, 0xFFFF, (sBerryBlenderData->field_56 - 128) * 2); + m4aMPlayPitchControl(&gMPlay_SE2, 0xFFFF, (gBerryBlenderData->field_56 - 128) * 2); } -void VBlankCB0_BerryBlender(void) +static void VBlankCB0_BerryBlender(void) { sub_80514A4(); sub_80514F0(); @@ -309,34 +325,20 @@ void VBlankCB0_BerryBlender(void) TransferPlttBuffer(); } -void VBlankCB1_BerryBlender(void) +static void VBlankCB1_BerryBlender(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -extern const u8 gUnknown_08E6C100[]; -extern const u8 gUnknown_08215C2C[]; -extern const u8 gUnknown_08E6C920[]; -extern const u8 gUnknown_08E6D354[]; -extern const u16 gUnknown_08215C0C[]; -extern const u16 gUnknown_0821602C[]; -extern const struct SpriteSheet gUnknown_082163DC; -extern const struct SpriteSheet gUnknown_082164F4; -extern const struct SpriteSheet gUnknown_08216454; -extern const struct SpriteSheet gUnknown_08216540; -extern const struct SpriteSheet gUnknown_08216574; -extern const struct SpritePalette gUnknown_082163EC; -extern const struct SpritePalette gUnknown_082163E4; - -bool8 sub_804E2EC(void) +static bool8 sub_804E2EC(void) { - switch (sBerryBlenderData->field_1) + switch (gBerryBlenderData->field_1) { case 0: sub_800D238(gUnknown_08E6C100, &ewram[0x10000]); - sBerryBlenderData->field_1++; + gBerryBlenderData->field_1++; break; case 1: { @@ -345,7 +347,7 @@ bool8 sub_804E2EC(void) DmaCopy16(3, offsetRead, offsetWrite, 0x400); LoadPalette(gUnknown_08215C0C, 0, 0x100); - sBerryBlenderData->field_1++; + gBerryBlenderData->field_1++; } break; case 2: @@ -365,16 +367,16 @@ bool8 sub_804E2EC(void) break; } } - sBerryBlenderData->field_1++; + gBerryBlenderData->field_1++; } break; case 3: sub_800D238(gUnknown_08E6C920, &ewram[0x10000]); - sBerryBlenderData->field_1++; + gBerryBlenderData->field_1++; break; case 4: sub_800D238(gUnknown_08E6D354, &ewram[0x13000]); - sBerryBlenderData->field_1++; + gBerryBlenderData->field_1++; break; case 5: { @@ -382,7 +384,7 @@ bool8 sub_804E2EC(void) void* offsetWrite = (void*)(VRAM + 0xE000); DmaCopy16(3, offsetRead, offsetWrite, 0x1000); - sBerryBlenderData->field_1++; + gBerryBlenderData->field_1++; } break; case 6: @@ -391,7 +393,7 @@ bool8 sub_804E2EC(void) void* offsetWrite = (void*)(VRAM + 0xF000); DmaCopy16(3, offsetRead, offsetWrite, 0x1000); - sBerryBlenderData->field_1++; + gBerryBlenderData->field_1++; } break; case 7: @@ -409,27 +411,27 @@ bool8 sub_804E2EC(void) offsetWrite = (void*)(VRAM + 0x6000); DmaCopy16(3, offsetRead, offsetWrite, 0x500); LoadPalette(gUnknown_0821602C, 0x80, 0x20); - sBerryBlenderData->field_1++; + gBerryBlenderData->field_1++; } break; case 8: LoadSpriteSheet(&gUnknown_082163DC); LoadSpriteSheet(&gUnknown_082164F4); LoadSpriteSheet(&gUnknown_08216454); - sBerryBlenderData->field_1++; + gBerryBlenderData->field_1++; break; case 9: LoadSpriteSheet(&gUnknown_08216540); LoadSpriteSheet(&gUnknown_08216574); LoadSpritePalette(&gUnknown_082163EC); LoadSpritePalette(&gUnknown_082163E4); - sBerryBlenderData->field_1 = 0; + gBerryBlenderData->field_1 = 0; return 1; } return 0; } -void sub_804E4FC(void) +static void sub_804E4FC(void) { REG_DISPCNT = 0x1341; REG_BG2CNT = 0x4880; @@ -444,24 +446,20 @@ void sub_804E538(void) { u8* field6F; //this temp value is needed to match - sBerryBlenderData = (struct BerryBlenderData*)(&ewram[0x18000]); + gBerryBlenderData = (struct BerryBlenderData*)(&ewram[0x18000]); - field6F = &sBerryBlenderData->field_6F; - sBerryBlenderData->field_0 = 0; + field6F = &gBerryBlenderData->field_6F; + gBerryBlenderData->field_0 = 0; *field6F = 0; sub_804E884(gSpecialVar_0x8004); SetMainCallback2(sub_804E56C); } -extern const struct WindowConfig gWindowConfig_81E6F68; -extern const u8 sBlenderSyncArrowsPos[][2]; -extern const struct SpriteTemplate sBlenderSyncArrow_SpriteTemplate; - -void sub_804E56C(void) +static void sub_804E56C(void) { s32 i; - switch (sBerryBlenderData->field_0) + switch (gBerryBlenderData->field_0) { case 0: REG_DISPCNT = 0; @@ -470,13 +468,13 @@ void sub_804E56C(void) SetVBlankCallback(NULL); SetUpWindowConfig(&gWindowConfig_81E6F68); InitMenuWindow(&gWindowConfig_81E6F68); - sBerryBlenderData->field_0++; - sBerryBlenderData->field_140 = 0; - sBerryBlenderData->field_13E = 0; - sBerryBlenderData->field_142 = 0x50; - sBerryBlenderData->field_144 = 0; - sBerryBlenderData->field_146 = 0; - sBerryBlenderData->field_1 = 0; + 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: @@ -484,34 +482,34 @@ void sub_804E56C(void) { for (i = 0; i < BLENDER_MAX_PLAYERS; i++) { - sBerryBlenderData->SyncArrowSpriteID[i] = CreateSprite(&sBlenderSyncArrow_SpriteTemplate, sBlenderSyncArrowsPos[i][0], sBlenderSyncArrowsPos[i][1], 1); - StartSpriteAnim(&gSprites[sBerryBlenderData->SyncArrowSpriteID[i]], i + 8); + gBerryBlenderData->SyncArrowSpriteID[i] = CreateSprite(&sBlenderSyncArrow_SpriteTemplate, sBlenderSyncArrowsPos[i][0], sBlenderSyncArrowsPos[i][1], 1); + StartSpriteAnim(&gSprites[gBerryBlenderData->SyncArrowSpriteID[i]], i + 8); } SetVBlankCallback(VBlankCB0_BerryBlender); - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; } break; case 2: BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); sub_8051474(); - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; break; case 3: sub_804E4FC(); if (!gPaletteFade.active) { - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; } break; case 4: MenuDrawTextWindow(0, 14, 29, 19); MenuPrintMessage(gOtherText_BlenderChooseBerry, 1, 15); - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; break; case 5: if (MenuUpdateWindowText()) { - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); } break; @@ -519,7 +517,7 @@ void sub_804E56C(void) if (!gPaletteFade.active) { sub_80A6978(); - sBerryBlenderData->field_0 = 0; + gBerryBlenderData->field_0 = 0; } break; } @@ -561,15 +559,13 @@ void sub_804E794(struct Sprite* sprite, s16 a2, s16 a3, s16 a4, s16 a5, s16 a6) sprite->callback = sub_804E738; } -extern const s16 gUnknown_08216594[][5]; - -void sub_804E7C0(u16 a0, u8 a1) +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]); } -void Blender_CopyBerryData(struct BlenderBerry* berry, u16 itemID) +static void Blender_CopyBerryData(struct BlenderBerry* berry, u16 itemID) { const struct Berry *berryInfo = GetBerryInfo(itemID + 124); berry->itemID = itemID; @@ -582,10 +578,7 @@ void Blender_CopyBerryData(struct BlenderBerry* berry, u16 itemID) berry->smoothness = berryInfo->smoothness; } -extern u8 gUnknown_03004834; -extern const u8* const gUnknown_082162B8[]; - -void sub_804E884(u8 a0) +static void sub_804E884(u8 a0) { int i; if (a0) @@ -600,20 +593,20 @@ void sub_804E884(u8 a0) break; case 1: gUnknown_03004834 = 1; - sBerryBlenderData->playersNo = 2; + gBerryBlenderData->playersNo = 2; StringCopy(gLinkPlayers[0].name, gSaveBlock2.playerName); StringCopy(gLinkPlayers[1].name, gUnknown_082162B8[0]); break; case 2: gUnknown_03004834 = 2; - sBerryBlenderData->playersNo = 3; + gBerryBlenderData->playersNo = 3; StringCopy(gLinkPlayers[0].name, gSaveBlock2.playerName); StringCopy(gLinkPlayers[1].name, gUnknown_082162B8[0]); StringCopy(gLinkPlayers[2].name, gUnknown_082162B8[1]); break; case 3: gUnknown_03004834 = 3; - sBerryBlenderData->playersNo = 4; + gBerryBlenderData->playersNo = 4; StringCopy(gLinkPlayers[0].name, gSaveBlock2.playerName); StringCopy(gLinkPlayers[1].name, gUnknown_082162B8[0]); StringCopy(gLinkPlayers[2].name, gUnknown_082162B8[1]); @@ -627,12 +620,12 @@ void sub_804E990(void) s32 i; REG_DISPCNT = 0; - sBerryBlenderData = (struct BerryBlenderData*)(&ewram[0x18000]); - sBerryBlenderData->field_0 = 0; - sBerryBlenderData->field_134 = 0; + gBerryBlenderData = (struct BerryBlenderData*)(&ewram[0x18000]); + gBerryBlenderData->field_0 = 0; + gBerryBlenderData->field_134 = 0; for (i = 0; i < BLENDER_MAX_PLAYERS; i++) { - sBerryBlenderData->chosenItemID[i] = 0; + gBerryBlenderData->chosenItemID[i] = 0; } sub_804E884(gSpecialVar_0x8004); if (gSpecialVar_0x8004 == 0) @@ -641,17 +634,10 @@ void sub_804E990(void) SetMainCallback2(sub_804F378); } -extern u16 gScriptItemId; - -extern const u8 gUnknown_082162EC[3][4]; -extern const u16 gUnknown_082162F8[]; -extern const u8 gUnknown_08216300[]; -extern const struct SpriteTemplate gSpriteTemplate_8216548; - -void sub_804E9F8(void) +static void sub_804E9F8(void) { int i, j; - switch (sBerryBlenderData->field_0) + switch (gBerryBlenderData->field_0) { case 0: ResetSpriteData(); @@ -661,64 +647,64 @@ void sub_804E9F8(void) SetUpWindowConfig(&gWindowConfig_81E6F68); InitMenuWindow(&gWindowConfig_81E6F68); gLinkType = 0x4422; - sBerryBlenderData->field_0++; - sBerryBlenderData->field_4E = 0; - sBerryBlenderData->field_7E = 0; - sBerryBlenderData->field_144 = 0; - sBerryBlenderData->field_146 = 0; + 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++) { - sBerryBlenderData->field_70[i] = 0; + gBerryBlenderData->field_70[i] = 0; for (j = 0; j < 3; j++) { - sBerryBlenderData->scores[i][j] = 0; + gBerryBlenderData->scores[i][j] = 0; } } - sBerryBlenderData->field_7C = 0; - sBerryBlenderData->field_56 = 0; - sBerryBlenderData->arrowPos = 0; - sBerryBlenderData->max_RPM = 0; - sBerryBlenderData->field_1 = 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()) { - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; sub_8051474(); } break; case 2: for (i = 0; i < BLENDER_MAX_PLAYERS; i++) { - sBerryBlenderData->SyncArrowSprite2ID[i] = CreateSprite(&sBlenderSyncArrow_SpriteTemplate, sBlenderSyncArrowsPos[i][0], sBlenderSyncArrowsPos[i][1], 1); - StartSpriteAnim(&gSprites[sBerryBlenderData->SyncArrowSprite2ID[i]], i + 8); + gBerryBlenderData->SyncArrowSprite2ID[i] = CreateSprite(&sBlenderSyncArrow_SpriteTemplate, sBlenderSyncArrowsPos[i][0], sBlenderSyncArrowsPos[i][1], 1); + StartSpriteAnim(&gSprites[gBerryBlenderData->SyncArrowSprite2ID[i]], i + 8); } - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; break; case 3: BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; break; case 4: sub_804E4FC(); if (!gPaletteFade.active) { - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; } break; case 5: MenuDrawTextWindow(0, 13, 29, 19); MenuPrint(gOtherText_LinkStandby3, 1, 14); - sBerryBlenderData->field_0 = 8; - sBerryBlenderData->framesToWait = 0; + gBerryBlenderData->field_0 = 8; + gBerryBlenderData->framesToWait = 0; break; case 8: - sBerryBlenderData->field_0++; - sBerryBlenderData->field_13C = 0; - Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[0], gScriptItemId); - memcpy(gBlockSendBuffer, &sBerryBlenderData->blendedBerries[0], sizeof(struct BlenderBerry)); + gBerryBlenderData->field_0++; + gBerryBlenderData->field_13C = 0; + Blender_CopyBerryData(&gBerryBlenderData->blendedBerries[0], gScriptItemId); + memcpy(gBlockSendBuffer, &gBerryBlenderData->blendedBerries[0], sizeof(struct BlenderBerry)); sub_80084A4(); - sBerryBlenderData->framesToWait = 0; + gBerryBlenderData->framesToWait = 0; break; case 9: if (sub_8007ECC()) @@ -726,119 +712,119 @@ void sub_804E9F8(void) ResetBlockReceivedFlags(); if (GetMultiplayerId() == 0) sub_8007E9C(4); - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; } break; case 10: - if (++sBerryBlenderData->framesToWait > 20) + if (++gBerryBlenderData->framesToWait > 20) { MenuZeroFillScreen(); if (GetBlockReceivedStatus() == sub_8008198()) { for (i = 0; i < GetLinkPlayerCount(); i++) { - memcpy(&sBerryBlenderData->blendedBerries[i], &gBlockRecvBuffer[i][0], sizeof(struct BlenderBerry)); - sBerryBlenderData->chosenItemID[i] = sBerryBlenderData->blendedBerries[i].itemID; + memcpy(&gBerryBlenderData->blendedBerries[i], &gBlockRecvBuffer[i][0], sizeof(struct BlenderBerry)); + gBerryBlenderData->chosenItemID[i] = gBerryBlenderData->blendedBerries[i].itemID; } ResetBlockReceivedFlags(); - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; } } break; case 11: - sBerryBlenderData->playersNo = GetLinkPlayerCount(); + gBerryBlenderData->playersNo = GetLinkPlayerCount(); for (i = 0; i < BLENDER_MAX_PLAYERS; i++) { - if (sBerryBlenderData->field_13C == gUnknown_082162EC[sBerryBlenderData->playersNo - 2][i]) + if (gBerryBlenderData->field_13C == gUnknown_082162EC[gBerryBlenderData->playersNo - 2][i]) { - sub_804E7C0(sBerryBlenderData->chosenItemID[sBerryBlenderData->field_13C], i); + sub_804E7C0(gBerryBlenderData->chosenItemID[gBerryBlenderData->field_13C], i); break; } } - sBerryBlenderData->framesToWait = 0; - sBerryBlenderData->field_0++; - sBerryBlenderData->field_13C++; + gBerryBlenderData->framesToWait = 0; + gBerryBlenderData->field_0++; + gBerryBlenderData->field_13C++; break; case 12: - if (++sBerryBlenderData->framesToWait > 60) + if (++gBerryBlenderData->framesToWait > 60) { - if (sBerryBlenderData->field_13C >= sBerryBlenderData->playersNo) + if (gBerryBlenderData->field_13C >= gBerryBlenderData->playersNo) { - sBerryBlenderData->field_0++; - sBerryBlenderData->arrowPos = gUnknown_082162F8[gUnknown_08216300[sBerryBlenderData->playersNo - 2]] - 22528; + gBerryBlenderData->field_0++; + gBerryBlenderData->arrowPos = gUnknown_082162F8[gUnknown_08216300[gBerryBlenderData->playersNo - 2]] - 22528; } else - sBerryBlenderData->field_0--; - sBerryBlenderData->framesToWait = 0; + gBerryBlenderData->field_0--; + gBerryBlenderData->framesToWait = 0; } break; case 13: if (sub_8007ECC()) { - sBerryBlenderData->field_0++; - sub_8051414(&sBerryBlenderData->field_168); + gBerryBlenderData->field_0++; + sub_8051414(&gBerryBlenderData->field_168); } break; case 14: REG_DISPCNT |= 0x400; - sBerryBlenderData->arrowPos += 0x200; - sBerryBlenderData->field_142 += 4; - if (sBerryBlenderData->field_142 > 255) + gBerryBlenderData->arrowPos += 0x200; + gBerryBlenderData->field_142 += 4; + if (gBerryBlenderData->field_142 > 255) { - sBerryBlenderData->field_0++; - sBerryBlenderData->field_142 = 256; - sBerryBlenderData->arrowPos = gUnknown_082162F8[gUnknown_08216300[sBerryBlenderData->playersNo - 2]]; + gBerryBlenderData->field_0++; + gBerryBlenderData->field_142 = 256; + gBerryBlenderData->arrowPos = gUnknown_082162F8[gUnknown_08216300[gBerryBlenderData->playersNo - 2]]; REG_BG2CNT = 0x4882; - sBerryBlenderData->framesToWait = 0; + gBerryBlenderData->framesToWait = 0; sub_804F238(); sub_804F2A8(); } - sub_8051414(&sBerryBlenderData->field_168); + sub_8051414(&gBerryBlenderData->field_168); break; case 15: if (sub_8051B8C()) { - sBerryBlenderData->framesToWait = 0; - sBerryBlenderData->field_0++; + gBerryBlenderData->framesToWait = 0; + gBerryBlenderData->field_0++; } - sub_8051414(&sBerryBlenderData->field_168); + sub_8051414(&gBerryBlenderData->field_168); break; case 16: CreateSprite(&gSpriteTemplate_8216548, 120, -16, 3); - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; break; case 18: - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; break; case 19: sub_80084A4(); - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; break; case 20: if (sub_8007ECC()) { sub_8007E24(); - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; } break; case 21: - sBerryBlenderData->field_56 = 128; - sBerryBlenderData->gameFrameTime = 0; + gBerryBlenderData->field_56 = 128; + gBerryBlenderData->gameFrameTime = 0; SetMainCallback2(sub_80501FC); if (GetCurrentMapMusic() != 403) { - sBerryBlenderData->field_178 = GetCurrentMapMusic(); + gBerryBlenderData->field_178 = GetCurrentMapMusic(); } PlayBGM(403); break; case 100: MenuDrawTextWindow(0, 13, 29, 19); MenuPrintMessage(gOtherText_LinkNotFound, 1, 15); - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; break; case 101: if (MenuUpdateWindowText()) - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; break; case 102: if (!gPaletteFade.active) @@ -851,7 +837,7 @@ void sub_804E9F8(void) UpdatePaletteFade(); } -void sub_804F0F4(void) +static void sub_804F0F4(void) { REG_DISPCNT = 0; @@ -866,21 +852,19 @@ void sub_804F0F4(void) gLinkType = 0x4422; - sBerryBlenderData->field_4E = 0; - sBerryBlenderData->field_56 = 0; - sBerryBlenderData->arrowPos = 0; - sBerryBlenderData->max_RPM = 0; - sBerryBlenderData->field_144 = 0; - sBerryBlenderData->field_146 = 0; - sBerryBlenderData->field_0++; + 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++; } -extern const u8 gUnknown_08216303[]; - -u8 sub_804F16C(u16 arrowPos, u8 a1) +static u8 sub_804F16C(u16 arrowPos, u8 a1) { u32 var1 = (arrowPos / 256) + 24; - u8 arrID = sBerryBlenderData->field_A2[a1]; + u8 arrID = gBerryBlenderData->field_A2[a1]; u32 var2 = gUnknown_08216303[arrID]; if (var1 >= var2 && var1 < var2 + 48) @@ -894,9 +878,7 @@ u8 sub_804F16C(u16 arrowPos, u8 a1) return 0; } -extern const u8 gUnknown_082165BC[][3]; - -void sub_804F1BC(u16 itemID, u8 a1, struct BlenderBerry* berry) +static void sub_804F1BC(u16 itemID, u8 a1, struct BlenderBerry* berry) { u16 r4 = 0; u16 i; @@ -921,184 +903,179 @@ void sub_804F1BC(u16 itemID, u8 a1, struct BlenderBerry* berry) } } -void sub_804F238(void) +static void sub_804F238(void) { s32 i, j; for (i = 0; i < BLENDER_MAX_PLAYERS; i++) { - sBerryBlenderData->field_A2[i] = 0xFF; - sBerryBlenderData->field_9A[i] = gUnknown_082162EC[sBerryBlenderData->playersNo - 2][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 (sBerryBlenderData->field_9A[i] == j) - sBerryBlenderData->field_A2[j] = i; + if (gBerryBlenderData->field_9A[i] == j) + gBerryBlenderData->field_A2[j] = i; } } } -extern const u8 gUnknown_082162C4[]; -extern const u8 gUnknown_082162D4[][2]; - -void sub_804F2A8(void) +static void sub_804F2A8(void) { int i; for (i = 0; i < BLENDER_MAX_PLAYERS; i++) { - if (sBerryBlenderData->field_9A[i] != 0xFF) + if (gBerryBlenderData->field_9A[i] != 0xFF) { u8* stringPtr = gStringVar1; - sBerryBlenderData->SyncArrowSpriteID[sBerryBlenderData->field_9A[i]] = sBerryBlenderData->SyncArrowSprite2ID[i]; - StartSpriteAnim(&gSprites[sBerryBlenderData->SyncArrowSpriteID[sBerryBlenderData->field_9A[i]]], i); - if (GetMultiplayerId() == sBerryBlenderData->field_9A[i]) + 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, gUnknown_082162C4); - StringCopy(stringPtr, gLinkPlayers[sBerryBlenderData->field_9A[i]].name); + StringCopy(stringPtr, gLinkPlayers[gBerryBlenderData->field_9A[i]].name); MenuPrint_PixelCoords(gStringVar1, gUnknown_082162D4[i][0] * 8 + 1, gUnknown_082162D4[i][1] * 8, 1); } } } -extern const TaskFunc gUnknown_08216308[]; - -void sub_804F378(void) +static void sub_804F378(void) { s32 i, j; - switch (sBerryBlenderData->field_0) + switch (gBerryBlenderData->field_0) { case 0: sub_804F0F4(); Blender_SetBankBerryData(0, gScriptItemId); - Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[0], gScriptItemId); - sub_804F1BC(gScriptItemId, sBerryBlenderData->playersNo, &sBerryBlenderData->blendedBerries[0]); + Blender_CopyBerryData(&gBerryBlenderData->blendedBerries[0], gScriptItemId); + sub_804F1BC(gScriptItemId, gBerryBlenderData->playersNo, &gBerryBlenderData->blendedBerries[0]); for (i = 0; i < BLENDER_MAX_PLAYERS; i++) { - sBerryBlenderData->field_70[i] = 0; + gBerryBlenderData->field_70[i] = 0; for (j = 0; j < 3; j++) { - sBerryBlenderData->scores[i][j] = 0; + gBerryBlenderData->scores[i][j] = 0; } } - sBerryBlenderData->field_7C = 0; - sBerryBlenderData->field_1 = 0; + gBerryBlenderData->field_7C = 0; + gBerryBlenderData->field_1 = 0; break; case 1: if (sub_804E2EC()) { - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; sub_8051474(); } break; case 2: for (i = 0; i < BLENDER_MAX_PLAYERS; i++) { - sBerryBlenderData->SyncArrowSprite2ID[i] = CreateSprite(&sBlenderSyncArrow_SpriteTemplate, sBlenderSyncArrowsPos[i][0], sBlenderSyncArrowsPos[i][1], 1); - StartSpriteAnim(&gSprites[sBerryBlenderData->SyncArrowSprite2ID[i]], i + 8); + gBerryBlenderData->SyncArrowSprite2ID[i] = CreateSprite(&sBlenderSyncArrow_SpriteTemplate, sBlenderSyncArrowsPos[i][0], sBlenderSyncArrowsPos[i][1], 1); + StartSpriteAnim(&gSprites[gBerryBlenderData->SyncArrowSprite2ID[i]], i + 8); } - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; break; case 3: BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); - sBerryBlenderData->field_0++; - sBerryBlenderData->framesToWait = 0; + gBerryBlenderData->field_0++; + gBerryBlenderData->framesToWait = 0; break; case 4: - if (++sBerryBlenderData->framesToWait == 2) + if (++gBerryBlenderData->framesToWait == 2) sub_804E4FC(); if (!gPaletteFade.active) - sBerryBlenderData->field_0 = 8; + gBerryBlenderData->field_0 = 8; break; case 8: - sBerryBlenderData->field_0 = 11; - sBerryBlenderData->field_13C = 0; + gBerryBlenderData->field_0 = 11; + gBerryBlenderData->field_13C = 0; break; case 11: for (i = 0; i < BLENDER_MAX_PLAYERS; i++) { - u32 var = gUnknown_082162EC[sBerryBlenderData->playersNo - 2][i]; - if (sBerryBlenderData->field_13C == var) + u32 var = gUnknown_082162EC[gBerryBlenderData->playersNo - 2][i]; + if (gBerryBlenderData->field_13C == var) { - sub_804E7C0(sBerryBlenderData->chosenItemID[sBerryBlenderData->field_13C], i); + sub_804E7C0(gBerryBlenderData->chosenItemID[gBerryBlenderData->field_13C], i); break; } } - sBerryBlenderData->framesToWait = 0; - sBerryBlenderData->field_0++; - sBerryBlenderData->field_13C++; + gBerryBlenderData->framesToWait = 0; + gBerryBlenderData->field_0++; + gBerryBlenderData->field_13C++; break; case 12: - if (++sBerryBlenderData->framesToWait > 60) + if (++gBerryBlenderData->framesToWait > 60) { - if (sBerryBlenderData->field_13C >= sBerryBlenderData->playersNo) + if (gBerryBlenderData->field_13C >= gBerryBlenderData->playersNo) { - sBerryBlenderData->arrowPos = gUnknown_082162F8[gUnknown_08216300[sBerryBlenderData->playersNo - 2]] - 22528; - sBerryBlenderData->field_0++; + gBerryBlenderData->arrowPos = gUnknown_082162F8[gUnknown_08216300[gBerryBlenderData->playersNo - 2]] - 22528; + gBerryBlenderData->field_0++; } else - sBerryBlenderData->field_0--; - sBerryBlenderData->framesToWait = 0; + gBerryBlenderData->field_0--; + gBerryBlenderData->framesToWait = 0; } break; case 13: - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; sub_804F238(); PlaySE(43); - sub_8051414(&sBerryBlenderData->field_168); + sub_8051414(&gBerryBlenderData->field_168); break; case 14: REG_DISPCNT |= 0x400; - sBerryBlenderData->arrowPos += 0x200; - sBerryBlenderData->field_142 += 4; - if (sBerryBlenderData->field_142 > 255) + gBerryBlenderData->arrowPos += 0x200; + gBerryBlenderData->field_142 += 4; + if (gBerryBlenderData->field_142 > 255) { - sBerryBlenderData->field_0++; - sBerryBlenderData->field_142 = 256; - sBerryBlenderData->arrowPos = gUnknown_082162F8[gUnknown_08216300[sBerryBlenderData->playersNo - 2]]; + gBerryBlenderData->field_0++; + gBerryBlenderData->field_142 = 256; + gBerryBlenderData->arrowPos = gUnknown_082162F8[gUnknown_08216300[gBerryBlenderData->playersNo - 2]]; REG_BG2CNT = 0x4882; - sBerryBlenderData->framesToWait = 0; + gBerryBlenderData->framesToWait = 0; PlaySE(52); sub_804F2A8(); } - sub_8051414(&sBerryBlenderData->field_168); + sub_8051414(&gBerryBlenderData->field_168); break; case 15: if (sub_8051B8C()) { - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; } - sub_8051414(&sBerryBlenderData->field_168); + sub_8051414(&gBerryBlenderData->field_168); break; case 16: CreateSprite(&gSpriteTemplate_8216548, 120, -16, 3); - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; break; case 18: - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; break; case 19: - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; break; case 20: - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; break; case 21: sub_804F81C(); - sBerryBlenderData->field_56 = 128; - sBerryBlenderData->gameFrameTime = 0; - sBerryBlenderData->field_14B = 0; - sBerryBlenderData->field_7E = 0; + 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++) { - sBerryBlenderData->field_148[i] = CreateTask(gUnknown_08216308[i], 10 + i); + gBerryBlenderData->field_148[i] = CreateTask(gUnknown_08216308[i], 10 + i); } if (GetCurrentMapMusic() != 403) { - sBerryBlenderData->field_178 = GetCurrentMapMusic(); + gBerryBlenderData->field_178 = GetCurrentMapMusic(); } PlayBGM(403); PlaySE(53); @@ -1111,7 +1088,7 @@ void sub_804F378(void) UpdatePaletteFade(); } -void sub_804F81C(void) +static void sub_804F81C(void) { s32 i; for (i = 0; i < 4; i++) @@ -1123,7 +1100,7 @@ void sub_804F81C(void) } } -void sub_804F844(u8 taskID) +static void sub_804F844(u8 taskID) { if(++gTasks[taskID].data[0] > gTasks[taskID].data[1]) { @@ -1132,7 +1109,7 @@ void sub_804F844(u8 taskID) } } -void sub_804F890(u8 a0, u8 a1) +static void sub_804F890(u8 a0, u8 a1) { u8 taskID = CreateTask(sub_804F844, 80); gTasks[taskID].data[1] = a1; @@ -1141,14 +1118,14 @@ void sub_804F890(u8 a0, u8 a1) void sub_804F8C8(u8 taskID) { - if (sub_804F16C(sBerryBlenderData->arrowPos, 1) == 2) + if (sub_804F16C(gBerryBlenderData->arrowPos, 1) == 2) { if (gTasks[taskID].data[0] == 0) { - if (sBerryBlenderData->field_14B == 0) + if (gBerryBlenderData->field_14B == 0) { u8 rand = Random() / 655; - if (sBerryBlenderData->field_56 < 500) + if (gBerryBlenderData->field_56 < 500) { if (rand > 75) gRecvCmds[2][1] = 0x4523; @@ -1156,7 +1133,7 @@ void sub_804F8C8(u8 taskID) gRecvCmds[2][1] = 0x5432; gRecvCmds[2][1] = 0x5432; // ??? } - else if (sBerryBlenderData->field_56 < 1500) + else if (gBerryBlenderData->field_56 < 1500) { if (rand > 80) gRecvCmds[2][1] = 0x4523; @@ -1192,16 +1169,16 @@ void sub_804F8C8(u8 taskID) void sub_804F9F4(u8 taskID) { - u32 var1 = (sBerryBlenderData->arrowPos + 0x1800) & 0xFFFF; - u32 var2 = sBerryBlenderData->field_A2[2] & 0xFF; + 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 (sBerryBlenderData->field_14B == 0) + if (gBerryBlenderData->field_14B == 0) { u8 rand = Random() / 655; - if (sBerryBlenderData->field_56 < 500) + if (gBerryBlenderData->field_56 < 500) { if (rand > 66) gRecvCmds[2][2] = 0x4523; @@ -1237,16 +1214,16 @@ void sub_804FB1C(u8 taskID) { u32 var1, var2; - var1 = (sBerryBlenderData->arrowPos + 0x1800) & 0xFFFF; - var2 = sBerryBlenderData->field_A2[3] & 0xFF; + 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 (sBerryBlenderData->field_14B == 0) + if (gBerryBlenderData->field_14B == 0) { u8 rand = (Random() / 655); - if (sBerryBlenderData->field_56 < 500) + if (gBerryBlenderData->field_56 < 500) { if (rand > 88) gRecvCmds[2][3] = 0x4523; @@ -1280,10 +1257,7 @@ void sub_804FB1C(u8 taskID) gTasks[taskID].data[0] = 0; } -extern const s8 gUnknown_082162CC[][2]; -extern const struct SpriteTemplate gSpriteTemplate_821645C; - -void sub_804FC48(u16 a0, u8 a1) +static void sub_804FC48(u16 a0, u8 a1) { u8 spriteID; @@ -1310,36 +1284,34 @@ void sub_804FC48(u16 a0, u8 a1) sub_805156C(); } -extern const u8 gUnknown_082165DA[]; - -void sub_804FD30(u16 a0) +static void sub_804FD30(u16 a0) { Blender_ControlHitPitch(); switch (a0) { case 0x4523: - if (sBerryBlenderData->field_56 < 1500) - sBerryBlenderData->field_56 += (384 / gUnknown_082165DA[sBerryBlenderData->playersNo]); + if (gBerryBlenderData->field_56 < 1500) + gBerryBlenderData->field_56 += (384 / gUnknown_082165DA[gBerryBlenderData->playersNo]); else { - sBerryBlenderData->field_56 += (128 / gUnknown_082165DA[sBerryBlenderData->playersNo]); - sub_8051AC8(&sBerryBlenderData->field_144, (sBerryBlenderData->field_56 / 100) - 10); - sub_8051AC8(&sBerryBlenderData->field_146, (sBerryBlenderData->field_56 / 100) - 10); + 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 (sBerryBlenderData->field_56 < 1500) - sBerryBlenderData->field_56 += (256 / gUnknown_082165DA[sBerryBlenderData->playersNo]); + if (gBerryBlenderData->field_56 < 1500) + gBerryBlenderData->field_56 += (256 / gUnknown_082165DA[gBerryBlenderData->playersNo]); break; case 0x2345: - sBerryBlenderData->field_56 -= (256 / gUnknown_082165DA[sBerryBlenderData->playersNo]); - if (sBerryBlenderData->field_56 < 128) - sBerryBlenderData->field_56 = 128; + gBerryBlenderData->field_56 -= (256 / gUnknown_082165DA[gBerryBlenderData->playersNo]); + if (gBerryBlenderData->field_56 < 128) + gBerryBlenderData->field_56 = 128; break; } } -void sub_804FE70(void) +static void sub_804FE70(void) { s32 i; @@ -1357,40 +1329,40 @@ void sub_804FE70(void) gRecvCmds[0][i] = 0x4444; } } - for (i = 0; i < sBerryBlenderData->playersNo; i++) + for (i = 0; i < gBerryBlenderData->playersNo; i++) { if (gRecvCmds[0][i] == 0x4444) { - u32 var = sBerryBlenderData->field_A2[i]; + u32 var = gBerryBlenderData->field_A2[i]; if (gRecvCmds[2][i] == 0x4523) { sub_804FD30(0x4523); - sBerryBlenderData->field_13E += (sBerryBlenderData->field_56 / 55); - if (sBerryBlenderData->field_13E >= 1000) - sBerryBlenderData->field_13E = 1000; + gBerryBlenderData->field_13E += (gBerryBlenderData->field_56 / 55); + if (gBerryBlenderData->field_13E >= 1000) + gBerryBlenderData->field_13E = 1000; sub_804FC48(0x4523, var); - sBerryBlenderData->scores[i][BLENDER_SCORE_BEST]++; + gBerryBlenderData->scores[i][BLENDER_SCORE_BEST]++; } else if (gRecvCmds[2][i] == 0x5432) { sub_804FD30(0x5432); - sBerryBlenderData->field_13E += (sBerryBlenderData->field_56 / 70); + gBerryBlenderData->field_13E += (gBerryBlenderData->field_56 / 70); sub_804FC48(0x5432, var); - sBerryBlenderData->scores[i][BLENDER_SCORE_GOOD]++; + gBerryBlenderData->scores[i][BLENDER_SCORE_GOOD]++; } else if (gRecvCmds[2][i] == 0x2345) { sub_804FC48(0x2345, var); sub_804FD30(0x2345); - if (sBerryBlenderData->field_4.win_field_F > 1000) - sBerryBlenderData->field_13E = 1000; - if (sBerryBlenderData->scores[i][BLENDER_SCORE_MISS] < 999) - sBerryBlenderData->scores[i][BLENDER_SCORE_MISS]++; + 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 (sBerryBlenderData->field_56 > 1500) - m4aMPlayTempoControl(&gMPlay_BGM, ((sBerryBlenderData->field_56 - 750) / 20) + 256); + if (gBerryBlenderData->field_56 > 1500) + m4aMPlayTempoControl(&gMPlay_BGM, ((gBerryBlenderData->field_56 - 750) / 20) + 256); else m4aMPlayTempoControl(&gMPlay_BGM, 256); } @@ -1398,7 +1370,7 @@ void sub_804FE70(void) } if (gSpecialVar_0x8004 != 0) { - for (i = 0; i < sBerryBlenderData->playersNo; i++) + for (i = 0; i < gBerryBlenderData->playersNo; i++) { gRecvCmds[0][i] = 0; gRecvCmds[2][i] = 0; @@ -1406,13 +1378,11 @@ void sub_804FE70(void) } } -extern u8 gUnknown_020297ED; - -void sub_80500A8(void) +static void sub_80500A8(void) { bool8 A_pressed = 0; - u8 var2 = sBerryBlenderData->field_A2[GetMultiplayerId()]; - if (sBerryBlenderData->field_6F == 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)); @@ -1421,8 +1391,8 @@ void sub_80500A8(void) if (A_pressed) { u8 var3; - StartSpriteAnim(&gSprites[sBerryBlenderData->SyncArrowSpriteID[sBerryBlenderData->field_9A[var2]]], var2 + 4); - var3 = sub_804F16C(sBerryBlenderData->arrowPos, GetMultiplayerId()); + 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) @@ -1431,32 +1401,32 @@ void sub_80500A8(void) gSendCmd[2] = 0x2345; } } - if (++sBerryBlenderData->field_7E > 5) + if (++gBerryBlenderData->field_7E > 5) { - if (sBerryBlenderData->field_56 > 128) - sBerryBlenderData->field_56--; - sBerryBlenderData->field_7E = 0; + if (gBerryBlenderData->field_56 > 128) + gBerryBlenderData->field_56--; + gBerryBlenderData->field_7E = 0; } if (gUnknown_020297ED && gMain.newKeys & L_BUTTON) - sBerryBlenderData->field_14B ^= 1; + gBerryBlenderData->field_14B ^= 1; } -void sub_80501FC(void) +static void sub_80501FC(void) { sub_8051474(); - if (sBerryBlenderData->gameFrameTime < (99 * 60 * 60) + (59 * 60)) // game time can't be longer than 99 minutes and 59 seconds, can't print 3 digits - sBerryBlenderData->gameFrameTime++; + 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)(sBerryBlenderData->field_56), sBerryBlenderData->field_13E); + SetLinkDebugValues((u16)(gBerryBlenderData->field_56), gBerryBlenderData->field_13E); sub_804FE70(); - sub_805194C(sBerryBlenderData->field_13E, 1000); - sub_8051A3C(sBerryBlenderData->field_56); + sub_805194C(gBerryBlenderData->field_13E, 1000); + sub_8051A3C(gBerryBlenderData->field_56); sub_8051B18(); sub_805123C(); - if (sBerryBlenderData->field_6F == 0 && sBerryBlenderData->field_140 >= 1000) + if (gBerryBlenderData->field_6F == 0 && gBerryBlenderData->field_140 >= 1000) { - sBerryBlenderData->field_13E = 1000; - sBerryBlenderData->field_6F = 1; + gBerryBlenderData->field_13E = 1000; + gBerryBlenderData->field_6F = 1; SetMainCallback2(sub_8050954); } RunTasks(); @@ -1467,7 +1437,7 @@ void sub_80501FC(void) #define ARE_FLAVOURS_SAME(flavours1, flavours2)(((*(u32*)(&flavours1[-1]) & 0xFFFFFF00) == (*(u32*)(&flavours2[-1]) & 0xFFFFFF00)&& (*(u32*)(&flavours1[3]) & 0xFFFFFF) == (*(u32*)(&flavours2[3]) & 0xFFFFFF))) -bool8 sub_80502A4(struct BlenderBerry* berries, u8 index1, u8 index2) +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 @@ -1479,7 +1449,7 @@ bool8 sub_80502A4(struct BlenderBerry* berries, u8 index1, u8 index2) #undef ARE_FLAVOURS_SAME -u32 sub_80502F8(struct BlenderBerry* berries, s16* a1, u8 a2, u8 a3) +u32 Blender_GetPokeblockColor(struct BlenderBerry* berries, s16* a1, u8 playersNo, u8 a3) { s16 vars[5]; s32 i; @@ -1496,9 +1466,9 @@ u32 sub_80502F8(struct BlenderBerry* berries, s16* a1, u8 a2, u8 a3) } if (r6 == 5 || a3 > 3) return 12; - for (i = 0; i < a2; i++) + for (i = 0; i < playersNo; i++) { - for (r6 = 0; r6 < a2; r6++) + 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))) @@ -1568,10 +1538,7 @@ u32 sub_80502F8(struct BlenderBerry* berries, s16* a1, u8 a2, u8 a3) return 0; } -extern s16 gUnknown_0300052C; -extern s16 gUnknown_0300052E; - -void sub_80504F0(s16 value) +static void sub_80504F0(s16 value) { gUnknown_0300052C = value; } @@ -1581,7 +1548,7 @@ s16 unref_sub_80504FC(void) return gUnknown_0300052C; } -void sub_8050508(s16 value) +static void sub_8050508(s16 value) { gUnknown_0300052E = value; } @@ -1591,29 +1558,22 @@ s16 unref_sub_8050514(void) return gUnknown_0300052E; } -extern s16 gUnknown_03000510[6]; -extern s32 gUnknown_03000530[]; -extern s32 gUnknown_03000548[]; -extern u32 gUnknown_0300055C; - -extern const u8 gUnknown_082165DF[]; - #ifdef NONMATCHING -void sub_8050520(struct BlenderBerry* berries, struct Pokeblock* pokeblock, u8 a2, u8* a3, u16 a4) +static void Blender_CalculatePokeblock(struct BlenderBerry* berries, struct Pokeblock* pokeblock, u8 playersNo, u8* flavours, u16 maxRPM) { s32 i; s32 j; s32 savedEntry; s32 var3; s32 var4; - s32 var6; + u32 var6; s32 var11; u16 rand; for (i = 0; i < 6; i++) gUnknown_03000510[i] = 0; - for (i = 0; i < a2; i++) + for (i = 0; i < playersNo; i++) { for (j = 0; j < 5; j++) gUnknown_03000510[j] += berries[i].flavours[j]; @@ -1650,7 +1610,7 @@ void sub_8050520(struct BlenderBerry* berries, struct Pokeblock* pokeblock, u8 a gUnknown_03000530[i] = gUnknown_03000510[i]; } - var11 = a4 / 333 + 100; + var11 = maxRPM / 333 + 100; gUnknown_0300055C = ((var11)); for (i = 0; i < 5; i++) @@ -1667,11 +1627,11 @@ void sub_8050520(struct BlenderBerry* berries, struct Pokeblock* pokeblock, u8 a { gUnknown_03000548[i] = gUnknown_03000510[i]; } - *a1 = sub_80502F8(berries, &gUnknown_03000510[0], a2, var6); - gUnknown_03000510[5] = (gUnknown_03000510[5] / a2) - a2; + pokeblock->color = Blender_GetPokeblockColor(berries, &gUnknown_03000510[0], playersNo, var6); + gUnknown_03000510[5] = (gUnknown_03000510[5] / playersNo) - playersNo; if (gUnknown_03000510[5] < 0) gUnknown_03000510[5] = 0; - if (*a1 == 12) + if (pokeblock->color == 12) { rand = Random() % 10; for (i = 0; i < 6; i++) @@ -1687,21 +1647,21 @@ void sub_8050520(struct BlenderBerry* berries, struct Pokeblock* pokeblock, u8 a if (gUnknown_03000510[i] > 255) gUnknown_03000510[i] = 255; } - a1[1] = gUnknown_03000510[0]; - a1[2] = gUnknown_03000510[1]; - a1[3] = gUnknown_03000510[2]; - a1[4] = gUnknown_03000510[3]; - a1[5] = gUnknown_03000510[4]; - a1[6] = gUnknown_03000510[5]; + 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++) { - a3[i] = gUnknown_03000510[i]; + flavours[i] = gUnknown_03000510[i]; } } #else __attribute__((naked)) -void sub_8050520(struct BlenderBerry* berries, struct Pokeblock* pokeblock, u8 a2, u8* a3, u16 a4) +static void Blender_CalculatePokeblock(struct BlenderBerry* berries, struct Pokeblock* pokeblock, u8 a2, u8* flavours, u16 a4) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -1878,7 +1838,7 @@ _08050652:\n\ adds r1, r4, 0\n\ mov r2, r9\n\ mov r3, r10\n\ - bl sub_80502F8\n\ + bl Blender_GetPokeblockColor\n\ mov r5, r8\n\ strb r0, [r5]\n\ movs r1, 0xA\n\ @@ -1989,15 +1949,15 @@ _08050740: .4byte gUnknown_03000510\n\ #endif // NONMATCHING -void sub_8050744(struct BlenderBerry* berries, struct Pokeblock* pokeblock, u8 a2, u8* a3, u16 a4) +static void BlenderDebug_CalculatePokeblock(struct BlenderBerry* berries, struct Pokeblock* pokeblock, u8 playersNo, u8* flavours, u16 a4) { - sub_8050520(berries, pokeblock, a2, a3, a4); // what is the purpose of this function? + Blender_CalculatePokeblock(berries, pokeblock, playersNo, flavours, a4); } -void sub_8050760(void) +static void sub_8050760(void) { - u32 frames = (u16)(sBerryBlenderData->gameFrameTime); - u32 max_RPM = (u16)(sBerryBlenderData->max_RPM); + u32 frames = (u16)(gBerryBlenderData->gameFrameTime); + u32 max_RPM = (u16)(gBerryBlenderData->max_RPM); s16 var = 0; if (frames < 900) @@ -2039,77 +1999,77 @@ void sub_8050760(void) sub_80504F0(var); } -void sub_80508D4(u8 value) +static void sub_80508D4(u8 value) { - sBerryBlenderData->field_AA = value; - sub_814A880(192, (sBerryBlenderData->field_AA * 16) + 72); + gBerryBlenderData->field_AA = value; + sub_814A880(192, (gBerryBlenderData->field_AA * 16) + 72); } -void sub_80508FC(void) +static void sub_80508FC(void) { - sBerryBlenderData->field_AA = 0; + gBerryBlenderData->field_AA = 0; MenuDrawTextWindow(23, 8, 28, 13); sub_814A5C0(0, -1, 12, 0x2D9F, 32); MenuPrint(gOtherText_YesNoTerminating, 24, 9); - sub_80508D4(sBerryBlenderData->field_AA); + sub_80508D4(gBerryBlenderData->field_AA); } -void sub_8050954(void) +static void sub_8050954(void) { u8 i; u8 multiplayerID; // unused sub_8051474(); multiplayerID = GetMultiplayerId(); - switch (sBerryBlenderData->field_6F) + switch (gBerryBlenderData->field_6F) { case 1: ClearLinkCallback(); m4aMPlayTempoControl(&gMPlay_BGM, 256); for (i = 0; i < gSpecialVar_0x8004; i++) { - DestroyTask(sBerryBlenderData->field_148[i]); + DestroyTask(gBerryBlenderData->field_148[i]); } - sBerryBlenderData->field_6F++; + gBerryBlenderData->field_6F++; break; case 2: - sBerryBlenderData->field_56 -= 32; - if (sBerryBlenderData->field_56 <= 0) + gBerryBlenderData->field_56 -= 32; + if (gBerryBlenderData->field_56 <= 0) { - sBerryBlenderData->field_56 = 0; + gBerryBlenderData->field_56 = 0; if (gReceivedRemoteLinkPlayers != 0) - sBerryBlenderData->field_6F++; + gBerryBlenderData->field_6F++; else - sBerryBlenderData->field_6F = 5; - sBerryBlenderData->field_0 = 0; + gBerryBlenderData->field_6F = 5; + gBerryBlenderData->field_0 = 0; m4aMPlayStop(&gMPlay_SE2); } Blender_ControlHitPitch(); break; case 3: if (/*multiplayerID != 0*/ GetMultiplayerId() != 0) - sBerryBlenderData->field_6F++; + gBerryBlenderData->field_6F++; else if (sub_8007ECC()) { - sBerryBlenderData->field_1BC = sBerryBlenderData->gameFrameTime; - sBerryBlenderData->field_1C0 = sBerryBlenderData->max_RPM; - SendBlock(0, &sBerryBlenderData->field_1BC, 40); - sBerryBlenderData->field_6F++; + 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])); - sBerryBlenderData->max_RPM = gBlockRecvBuffer[0][2]; - sBerryBlenderData->gameFrameTime = *ptr; - sBerryBlenderData->field_6F++; + gBerryBlenderData->max_RPM = gBlockRecvBuffer[0][2]; + gBerryBlenderData->gameFrameTime = *ptr; + gBerryBlenderData->field_6F++; ResetBlockReceivedFlags(); } break; case 5: if (Blender_PrintBlendingRanking()) - sBerryBlenderData->field_6F++; + gBerryBlenderData->field_6F++; break; case 6: if (Blender_PrintBlendingResults()) @@ -2118,100 +2078,100 @@ void sub_8050954(void) IncrementGameStat(34); else IncrementGameStat(33); - sBerryBlenderData->field_6F++; + gBerryBlenderData->field_6F++; } break; case 7: - sBerryBlenderData->field_6F++; + gBerryBlenderData->field_6F++; MenuDrawTextWindow(0, 14, 29, 19); MenuPrintMessage(gOtherText_BlendAnotherBerryPrompt, 1, 15); break; case 8: if (MenuUpdateWindowText()) - sBerryBlenderData->field_6F++; + gBerryBlenderData->field_6F++; break; case 9: - sBerryBlenderData->field_AA = 0; + gBerryBlenderData->field_AA = 0; sub_80508FC(); - sBerryBlenderData->field_6F++; + gBerryBlenderData->field_6F++; break; case 10: if (gMain.newKeys & DPAD_UP) { - if (sBerryBlenderData->field_AA != 0) + if (gBerryBlenderData->field_AA != 0) PlaySE(SE_SELECT); sub_80508D4(0); } else if (gMain.newKeys & DPAD_DOWN) { - if (sBerryBlenderData->field_AA != 1) + if (gBerryBlenderData->field_AA != 1) PlaySE(SE_SELECT); sub_80508D4(1); } else if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); - sBerryBlenderData->field_6F++; + gBerryBlenderData->field_6F++; } else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); - sBerryBlenderData->field_6F++; + gBerryBlenderData->field_6F++; sub_80508D4(1); } break; case 11: gSendCmd[0] = 0x2FFF; - if (sBerryBlenderData->field_AA == 0) + if (gBerryBlenderData->field_AA == 0) { if (IsBagPocketNonEmpty(BAG_BERRIES) == FALSE) // is empty { - sBerryBlenderData->field_7C = 2; + gBerryBlenderData->field_7C = 2; gSendCmd[1] = 0x9999; } else if (sub_810CA00() == -1) { - sBerryBlenderData->field_7C = 3; + gBerryBlenderData->field_7C = 3; gSendCmd[1] = 0xAAAA; } else { - sBerryBlenderData->field_7C = 0; + gBerryBlenderData->field_7C = 0; gSendCmd[1] = 0x7779; } - sBerryBlenderData->field_6F++; + gBerryBlenderData->field_6F++; } else { - sBerryBlenderData->field_7C = 1; + gBerryBlenderData->field_7C = 1; gSendCmd[1] = 0x8888; - sBerryBlenderData->field_6F++; + gBerryBlenderData->field_6F++; } break; case 12: if (gUnknown_03004834) { SetMainCallback2(sub_80510E8); - sBerryBlenderData->field_6F = 0; - sBerryBlenderData->field_0 = 0; + gBerryBlenderData->field_6F = 0; + gBerryBlenderData->field_0 = 0; } else { MenuPrintMessage(gOtherText_LinkStandby3, 1, 15); - sBerryBlenderData->field_6F++; + gBerryBlenderData->field_6F++; } break; case 13: if (MenuUpdateWindowText()) { SetMainCallback2(sub_8050E30); - sBerryBlenderData->field_6F = 0; - sBerryBlenderData->field_0 = 0; + gBerryBlenderData->field_6F = 0; + gBerryBlenderData->field_0 = 0; } break; } sub_8051B18(); - sub_8051A3C(sBerryBlenderData->field_56); + sub_8051A3C(gBerryBlenderData->field_56); sub_805123C(); RunTasks(); AnimateSprites(); @@ -2219,52 +2179,52 @@ void sub_8050954(void) UpdatePaletteFade(); } -bool8 sub_8050CE8(void) +static bool8 sub_8050CE8(void) { - switch (sBerryBlenderData->field_1C4) + switch (gBerryBlenderData->field_1C4) { case 0: sub_80084A4(); - sBerryBlenderData->field_1C4 = 1; - sBerryBlenderData->framesToWait = 0; + gBerryBlenderData->field_1C4 = 1; + gBerryBlenderData->framesToWait = 0; break; case 1: if (sub_8007ECC()) { - sBerryBlenderData->field_1C4++; + gBerryBlenderData->field_1C4++; gSoftResetDisabled = TRUE; } break; case 2: sub_8125E2C(); - sBerryBlenderData->field_1C4++; - sBerryBlenderData->framesToWait = 0; + gBerryBlenderData->field_1C4++; + gBerryBlenderData->framesToWait = 0; break; case 3: - if (++sBerryBlenderData->framesToWait == 10) + if (++gBerryBlenderData->framesToWait == 10) { sub_80084A4(); - sBerryBlenderData->field_1C4++; + gBerryBlenderData->field_1C4++; } break; case 4: if (sub_8007ECC()) { if (sub_8125E6C()) - sBerryBlenderData->field_1C4 = 5; + gBerryBlenderData->field_1C4 = 5; else { - sBerryBlenderData->framesToWait = 0; - sBerryBlenderData->field_1C4 = 3; + gBerryBlenderData->framesToWait = 0; + gBerryBlenderData->field_1C4 = 3; } } break; case 5: - sBerryBlenderData->field_1C4++; - sBerryBlenderData->framesToWait = 0; + gBerryBlenderData->field_1C4++; + gBerryBlenderData->framesToWait = 0; break; case 6: - if (++sBerryBlenderData->framesToWait > 5) + if (++gBerryBlenderData->framesToWait > 5) { gSoftResetDisabled = FALSE; return 1; @@ -2274,99 +2234,99 @@ bool8 sub_8050CE8(void) return 0; } -void sub_8050E30(void) +static void sub_8050E30(void) { - switch (sBerryBlenderData->field_6F) + switch (gBerryBlenderData->field_6F) { case 0: - if (sBerryBlenderData->field_70[0] == 0x2222) - sBerryBlenderData->field_6F = 5; - else if (sBerryBlenderData->field_70[0] == 0x1111) - { - if (sBerryBlenderData->field_78 == 0x9999) - sBerryBlenderData->field_6F = 2; - else if (sBerryBlenderData->field_78 == 0xAAAA) - sBerryBlenderData->field_6F = 1; + 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 - sBerryBlenderData->field_6F = 5; + gBerryBlenderData->field_6F = 5; } break; case 1: - sBerryBlenderData->field_6F = 3; + gBerryBlenderData->field_6F = 3; DestroyMenuCursor(); MenuZeroFillWindowRect(23, 8, 28, 13); - StringCopy(gStringVar4, gLinkPlayers[sBerryBlenderData->field_7A].name); + StringCopy(gStringVar4, gLinkPlayers[gBerryBlenderData->field_7A].name); StringAppend(gStringVar4, gOtherText_OtherCaseIsFull); MenuPrintMessage(gStringVar4, 1, 15); break; case 2: - sBerryBlenderData->field_6F++; + gBerryBlenderData->field_6F++; DestroyMenuCursor(); MenuZeroFillWindowRect(23, 8, 28, 13); - StringCopy(gStringVar4, gLinkPlayers[sBerryBlenderData->field_7A].name); + StringCopy(gStringVar4, gLinkPlayers[gBerryBlenderData->field_7A].name); StringAppend(gStringVar4, gOtherText_NoBerriesForBlend); MenuPrintMessage(gStringVar4, 1, 15); break; case 3: if (MenuUpdateWindowText()) { - sBerryBlenderData->framesToWait = 0; - sBerryBlenderData->field_6F++; + gBerryBlenderData->framesToWait = 0; + gBerryBlenderData->field_6F++; } break; case 4: - if (++sBerryBlenderData->framesToWait > 60) - sBerryBlenderData->field_6F = 5; + if (++gBerryBlenderData->framesToWait > 60) + gBerryBlenderData->field_6F = 5; break; case 5: MenuDrawTextWindow(0, 14, 29, 19); MenuPrint(gMultiText_Saving, 2, 15); sub_80084A4(); - sBerryBlenderData->field_6F++; + gBerryBlenderData->field_6F++; break; case 6: if (sub_8007ECC()) { - sBerryBlenderData->framesToWait = 0; - sBerryBlenderData->field_6F++; - sBerryBlenderData->field_1C4 = 0; + gBerryBlenderData->framesToWait = 0; + gBerryBlenderData->field_6F++; + gBerryBlenderData->field_1C4 = 0; } break; case 7: if (sub_8050CE8()) { PlaySE(SE_SAVE); - sBerryBlenderData->field_6F++; + gBerryBlenderData->field_6F++; } break; case 8: - sBerryBlenderData->field_6F++; + gBerryBlenderData->field_6F++; sub_80084A4(); break; case 9: if (sub_8007ECC()) { BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - sBerryBlenderData->field_6F++; + gBerryBlenderData->field_6F++; } break; case 10: if (!gPaletteFade.active) { - if (sBerryBlenderData->field_70[0] == 0x2222) + if (gBerryBlenderData->field_70[0] == 0x2222) SetMainCallback2(sub_804E538); else { - sBerryBlenderData->framesToWait = 0; - sBerryBlenderData->field_6F++; + gBerryBlenderData->framesToWait = 0; + gBerryBlenderData->field_6F++; } } break; case 11: - if (++sBerryBlenderData->framesToWait > 30) + if (++gBerryBlenderData->framesToWait > 30) { sub_800832C(); - sBerryBlenderData->field_6F++; + gBerryBlenderData->field_6F++; } break; case 12: @@ -2382,42 +2342,42 @@ void sub_8050E30(void) UpdatePaletteFade(); } -void sub_80510E8(void) +static void sub_80510E8(void) { - switch (sBerryBlenderData->field_6F) + switch (gBerryBlenderData->field_6F) { case 0: - if (sBerryBlenderData->field_7C < 2) - sBerryBlenderData->field_6F = 9; - if (sBerryBlenderData->field_7C == 2) - sBerryBlenderData->field_6F = 2; - if (sBerryBlenderData->field_7C == 3) - sBerryBlenderData->field_6F =1; + 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: - sBerryBlenderData->field_6F = 3; + gBerryBlenderData->field_6F = 3; DestroyMenuCursor(); MenuZeroFillWindowRect(23, 8, 28, 13); MenuPrintMessage(gOtherText_CaseIsFull, 1, 15); break; case 2: - sBerryBlenderData->field_6F++; + gBerryBlenderData->field_6F++; DestroyMenuCursor(); MenuZeroFillWindowRect(23, 8, 28, 13); MenuPrintMessage(gOtherText_OutOfBerries, 1, 15); break; case 3: if (MenuUpdateWindowText()) - sBerryBlenderData->field_6F = 9; + gBerryBlenderData->field_6F = 9; break; case 9: BeginFastPaletteFade(3); - sBerryBlenderData->field_6F++; + gBerryBlenderData->field_6F++; break; case 10: if (!gPaletteFade.active) { - if (sBerryBlenderData->field_7C == 0) + if (gBerryBlenderData->field_7C == 0) SetMainCallback2(sub_804E538); else SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); @@ -2432,7 +2392,7 @@ void sub_80510E8(void) UpdatePaletteFade(); } -void sub_805123C(void) +static void sub_805123C(void) { if (gReceivedRemoteLinkPlayers) { @@ -2443,24 +2403,24 @@ void sub_805123C(void) switch (gRecvCmds[2][0]) { case 0x8888: - sBerryBlenderData->field_78 = 0x8888; - sBerryBlenderData->field_7A = gRecvCmds[3][0]; + gBerryBlenderData->field_78 = 0x8888; + gBerryBlenderData->field_7A = gRecvCmds[3][0]; break; case 0x9999: - sBerryBlenderData->field_78 = 0x9999; - sBerryBlenderData->field_7A = gRecvCmds[3][0]; + gBerryBlenderData->field_78 = 0x9999; + gBerryBlenderData->field_7A = gRecvCmds[3][0]; break; case 0xAAAA: - sBerryBlenderData->field_78 = 0xAAAA; - sBerryBlenderData->field_7A = gRecvCmds[3][0]; + gBerryBlenderData->field_78 = 0xAAAA; + gBerryBlenderData->field_7A = gRecvCmds[3][0]; break; } - sBerryBlenderData->field_70[0] = 0x1111; + gBerryBlenderData->field_70[0] = 0x1111; } else if (gRecvCmds[1][0] == 0x2222) - sBerryBlenderData->field_70[0] = 0x2222; + gBerryBlenderData->field_70[0] = 0x2222; } - if (GetMultiplayerId() == 0 && sBerryBlenderData->field_70[0] != 0x1111 && sBerryBlenderData->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++) @@ -2470,30 +2430,30 @@ void sub_805123C(void) switch (gRecvCmds[1][i]) { case 0x8888: - sBerryBlenderData->field_70[i] = 0x8888; + gBerryBlenderData->field_70[i] = 0x8888; break; case 0x7779: - sBerryBlenderData->field_70[i] = 0x7779; + gBerryBlenderData->field_70[i] = 0x7779; break; case 0x9999: - sBerryBlenderData->field_70[i] = 0x9999; + gBerryBlenderData->field_70[i] = 0x9999; break; case 0xAAAA: - sBerryBlenderData->field_70[i] = 0xAAAA; + gBerryBlenderData->field_70[i] = 0xAAAA; break; } } } for (i = 0; i < GetLinkPlayerCount(); i++) { - if (sBerryBlenderData->field_70[i] == 0) + if (gBerryBlenderData->field_70[i] == 0) break; } if (i == GetLinkPlayerCount()) { for (i = 0; i < GetLinkPlayerCount(); i++) { - if (sBerryBlenderData->field_70[i] != 0x7779) + if (gBerryBlenderData->field_70[i] != 0x7779) break; } gSendCmd[0] = 0x2FFF; @@ -2502,7 +2462,7 @@ void sub_805123C(void) else { gSendCmd[1] = 0x1111; - gSendCmd[2] = sBerryBlenderData->field_70[i]; + gSendCmd[2] = gBerryBlenderData->field_70[i]; gSendCmd[3] = i; } } @@ -2510,42 +2470,42 @@ void sub_805123C(void) } } -void sub_8051414(struct BgAffineDstData *dest) +static void sub_8051414(struct BgAffineDstData *dest) { struct BgAffineSrcData affineSrc; affineSrc.texX = 30720; affineSrc.texY = 20480; - affineSrc.scrX = 120 - sBerryBlenderData->field_144; - affineSrc.scrY = 80 - sBerryBlenderData->field_146; - affineSrc.sx = sBerryBlenderData->field_142; - affineSrc.sy = sBerryBlenderData->field_142; - affineSrc.alpha = sBerryBlenderData->arrowPos; + 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); } -void sub_8051474(void) +static void sub_8051474(void) { - sBerryBlenderData->field_58 = sBerryBlenderData->arrowPos; - sBerryBlenderData->arrowPos += sBerryBlenderData->field_56; - sub_8051414(&sBerryBlenderData->field_168); + gBerryBlenderData->field_58 = gBerryBlenderData->arrowPos; + gBerryBlenderData->arrowPos += gBerryBlenderData->field_56; + sub_8051414(&gBerryBlenderData->field_168); } -void sub_80514A4(void) +static void sub_80514A4(void) { - REG_BG2PA = sBerryBlenderData->field_168.pa; - REG_BG2PB = sBerryBlenderData->field_168.pb; - REG_BG2PC = sBerryBlenderData->field_168.pc; - REG_BG2PD = sBerryBlenderData->field_168.pd; - REG_BG2X = sBerryBlenderData->field_168.dx; - REG_BG2Y = sBerryBlenderData->field_168.dy; + 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; } -void sub_80514F0(void) +static void sub_80514F0(void) { - REG_BG1HOFS = sBerryBlenderData->field_144; - REG_BG1VOFS = sBerryBlenderData->field_146; - REG_BG0HOFS = sBerryBlenderData->field_144; - REG_BG0VOFS = sBerryBlenderData->field_146; + 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) @@ -2558,9 +2518,7 @@ void sub_8051524(struct Sprite* sprite) DestroySprite(sprite); } -extern const struct SpriteTemplate gSpriteTemplate_82164FC; - -void sub_805156C(void) +static void sub_805156C(void) { s32 limit = (Random() % 2) + 1; s32 i; @@ -2571,7 +2529,7 @@ void sub_805156C(void) s32 x, y; u8 spriteID; - rand = sBerryBlenderData->arrowPos + (Random() % 20); + rand = gBerryBlenderData->arrowPos + (Random() % 20); x = gSineTable[(rand & 0xFF) + 64] / 4; y = gSineTable[(rand & 0xFF)] / 4; @@ -2604,13 +2562,10 @@ void sub_8051684(struct Sprite* sprite) void Blender_SetBankBerryData(u8 bank, u16 itemID) { - sBerryBlenderData->chosenItemID[bank] = itemID; - Blender_CopyBerryData(&sBerryBlenderData->blendedBerries[bank], itemID); + gBerryBlenderData->chosenItemID[bank] = itemID; + Blender_CopyBerryData(&gBerryBlenderData->blendedBerries[bank], itemID); } -extern const u8* const gUnknown_08216284[]; -extern u8 byte_3002A68; - void unref_sub_80516F8(u8 taskID) { struct Task* task = &gTasks[taskID]; @@ -2623,7 +2578,7 @@ void unref_sub_80516F8(u8 taskID) task->data[0] = 0; if (task->data[0] == 100) { - ZeroFillWindowRect(&sBerryBlenderData->field_4, 0, 0, 16, 20); + ZeroFillWindowRect(&gBerryBlenderData->field_4, 0, 0, 16, 20); MenuDrawTextWindow(4, 4, 10, 12); for (i = 0; i < 3; i++) { @@ -2651,8 +2606,6 @@ void unref_sub_80516F8(u8 taskID) } } -extern const struct SpriteTemplate gSpriteTemplate_821657C; - void sub_805181C(struct Sprite* sprite) { switch (sprite->data0) @@ -2717,7 +2670,7 @@ void sub_80518CC(struct Sprite* sprite) sprite->data1 += 4; if (sprite->data1 > 176) { - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; DestroySprite(sprite); } break; @@ -2725,16 +2678,16 @@ void sub_80518CC(struct Sprite* sprite) sprite->pos2.y = sprite->data1; } -void sub_805194C(u16 a0, u16 a1) +static void sub_805194C(u16 a0, u16 a1) { - if (sBerryBlenderData->field_140 < a0) + if (gBerryBlenderData->field_140 < a0) { - sBerryBlenderData->field_140 += 2; - sub_805197C(sBerryBlenderData->field_140, a1); + gBerryBlenderData->field_140 += 2; + sub_805197C(gBerryBlenderData->field_140, a1); } } -void sub_805197C(u16 a0, u16 a1) +static void sub_805197C(u16 a0, u16 a1) { s32 var1, var2, var3, var4; u16* vram; @@ -2761,19 +2714,19 @@ void sub_805197C(u16 a0, u16 a1) } } -u32 sub_8051A1C(u16 a0) +static u32 sub_8051A1C(u16 a0) { return 360000 * a0 / 0x10000; } -void sub_8051A3C(u16 a0) +static void sub_8051A3C(u16 a0) { u8 i; u8 palAdders[5]; u32 var = sub_8051A1C(a0); - if (sBerryBlenderData->max_RPM < var) - sBerryBlenderData->max_RPM = var; + if (gBerryBlenderData->max_RPM < var) + gBerryBlenderData->max_RPM = var; for (i = 0; i < 5; i++) { palAdders[i] = var % 10; @@ -2786,13 +2739,13 @@ void sub_8051A3C(u16 a0) *((u16*)(VRAM + 0x6462)) = palAdders[0] + 0x8172; } -void sub_8051AC8(s16* a0, u16 a1) +static void sub_8051AC8(s16* a0, u16 a1) { if (*a0 == 0) *a0 = (Random() % a1) - (a1 / 2); } -void sub_8051AF4(s16* a0) +static void sub_8051AF4(s16* a0) { if (*a0 < 0 ) (*a0)++; @@ -2800,13 +2753,13 @@ void sub_8051AF4(s16* a0) (*a0)--; } -void sub_8051B18(void) +static void sub_8051B18(void) { - sub_8051AF4(&sBerryBlenderData->field_144); - sub_8051AF4(&sBerryBlenderData->field_146); + sub_8051AF4(&gBerryBlenderData->field_144); + sub_8051AF4(&gBerryBlenderData->field_146); } -void sub_8051B40(s16* a0, u16 a1) +static void sub_8051B40(s16* a0, u16 a1) { s32 var; if (a1 < 10) @@ -2824,20 +2777,20 @@ void sub_8051B40(s16* a0, u16 a1) } } -bool8 sub_8051B8C(void) +static bool8 sub_8051B8C(void) { - if (sBerryBlenderData->framesToWait == 0) + if (gBerryBlenderData->framesToWait == 0) { - sBerryBlenderData->field_144 = 0; - sBerryBlenderData->field_146 = 0; + gBerryBlenderData->field_144 = 0; + gBerryBlenderData->field_146 = 0; } - sBerryBlenderData->framesToWait++; - sub_8051B40(&sBerryBlenderData->field_144, sBerryBlenderData->framesToWait); - sub_8051B40(&sBerryBlenderData->field_146, sBerryBlenderData->framesToWait); - if (sBerryBlenderData->framesToWait == 20) + gBerryBlenderData->framesToWait++; + sub_8051B40(&gBerryBlenderData->field_144, gBerryBlenderData->framesToWait); + sub_8051B40(&gBerryBlenderData->field_146, gBerryBlenderData->framesToWait); + if (gBerryBlenderData->framesToWait == 20) { - sBerryBlenderData->field_144 = 0; - sBerryBlenderData->field_146 = 0; + gBerryBlenderData->field_144 = 0; + gBerryBlenderData->field_146 = 0; return 1; } else @@ -2846,49 +2799,46 @@ bool8 sub_8051B8C(void) void sub_8051C04(struct Sprite* sprite) { - sprite->pos2.x = -(sBerryBlenderData->field_144); - sprite->pos2.y = -(sBerryBlenderData->field_146); + sprite->pos2.x = -(gBerryBlenderData->field_144); + sprite->pos2.y = -(gBerryBlenderData->field_146); } -void Blender_TrySettingRecord(void) +static void Blender_TrySettingRecord(void) { - if (gSaveBlock1.berryBlenderRecords[sBerryBlenderData->playersNo - 2] < sBerryBlenderData->max_RPM) - gSaveBlock1.berryBlenderRecords[sBerryBlenderData->playersNo - 2] = sBerryBlenderData->max_RPM; + if (gSaveBlock1.berryBlenderRecords[gBerryBlenderData->playersNo - 2] < gBerryBlenderData->max_RPM) + gSaveBlock1.berryBlenderRecords[gBerryBlenderData->playersNo - 2] = gBerryBlenderData->max_RPM; } -extern const u8 gUnknown_082165E9[]; -extern const u8 gUnknown_082165EE[]; - -bool8 Blender_PrintBlendingResults(void) +static bool8 Blender_PrintBlendingResults(void) { u16 i; struct Pokeblock pokeblock; - u8 vars2[8]; + u8 flavours[6]; u8 text[2][10]; u16 berryIDs[4]; // unused - switch (sBerryBlenderData->field_0) + switch (gBerryBlenderData->field_0) { case 0: - sBerryBlenderData->field_0++; - sBerryBlenderData->framesToWait = 17; + gBerryBlenderData->field_0++; + gBerryBlenderData->framesToWait = 17; break; case 1: - sBerryBlenderData->framesToWait -= 10; - if (sBerryBlenderData->framesToWait < 0) + gBerryBlenderData->framesToWait -= 10; + if (gBerryBlenderData->framesToWait < 0) { - sBerryBlenderData->framesToWait = 0; - sBerryBlenderData->field_0++; + gBerryBlenderData->framesToWait = 0; + gBerryBlenderData->field_0++; } break; case 2: - if (++sBerryBlenderData->framesToWait > 20) + if (++gBerryBlenderData->framesToWait > 20) { for (i = 0; i < 3; i++) - DestroySprite(&gSprites[sBerryBlenderData->scoreIconIDs[i]]); - sBerryBlenderData->framesToWait = 0; - sBerryBlenderData->field_0++; + DestroySprite(&gSprites[gBerryBlenderData->scoreIconIDs[i]]); + gBerryBlenderData->framesToWait = 0; + gBerryBlenderData->field_0++; } break; case 3: @@ -2898,15 +2848,15 @@ bool8 Blender_PrintBlendingResults(void) MenuDrawTextWindow(4, 2, 25, 17); sub_8072BD8(gOtherText_ResultsOfBlending, 5, 3, 160); - for (i = 0; i < sBerryBlenderData->playersNo; i++) + for (i = 0; i < gBerryBlenderData->playersNo; i++) { - u8 place = sBerryBlenderData->playerPlaces[i]; + u8 place = gBerryBlenderData->playerPlaces[i]; textPtr = text[0]; - StringCopy(textPtr, sBerryBlenderData->blendedBerries[place].name); + StringCopy(textPtr, gBerryBlenderData->blendedBerries[place].name); ConvertInternationalString(textPtr, gLinkPlayers[place].language); StringAppend(textPtr, gOtherText_Berry); - textPtr = sBerryBlenderData->stringVar; + textPtr = gBerryBlenderData->stringVar; textPtr = ConvertIntToDecimalString(textPtr, i + 1); textPtr[0] = CHAR_SPACE; textPtr[1] = CHAR_PERIOD; @@ -2914,12 +2864,12 @@ bool8 Blender_PrintBlendingResults(void) textPtr += 3; textPtr = sub_8072C74(textPtr, gLinkPlayers[place].name, 88, 0); sub_8072C74(textPtr, text[0], 157, 0); - MenuPrint(sBerryBlenderData->stringVar, 5, gUnknown_082165E9[sBerryBlenderData->playersNo] + (i * gUnknown_082165EE[sBerryBlenderData->playersNo])); + MenuPrint(gBerryBlenderData->stringVar, 5, gUnknown_082165E9[gBerryBlenderData->playersNo] + (i * gUnknown_082165EE[gBerryBlenderData->playersNo])); } - ConvertIntToDecimalStringN(text[0], sBerryBlenderData->max_RPM % 100, 2, 2); - textPtr = sBerryBlenderData->stringVar; + ConvertIntToDecimalStringN(text[0], gBerryBlenderData->max_RPM % 100, 2, 2); + textPtr = gBerryBlenderData->stringVar; textPtr = StringCopy(textPtr, gOtherText_MaxSpeed); - textPtr = sub_8072C14(textPtr, sBerryBlenderData->max_RPM / 100, 121, 1); + textPtr = sub_8072C14(textPtr, gBerryBlenderData->max_RPM / 100, 121, 1); textPtr[0] = CHAR_SPACE; textPtr[1] = CHAR_PERIOD; @@ -2928,14 +2878,14 @@ bool8 Blender_PrintBlendingResults(void) textPtr = sub_8072C74(textPtr, text[0], 142, 1); StringCopy(textPtr, gOtherText_RPM); - MenuPrint(sBerryBlenderData->stringVar, 5, 13); + MenuPrint(gBerryBlenderData->stringVar, 5, 13); - secondsPassed = sBerryBlenderData->gameFrameTime / 60; + secondsPassed = gBerryBlenderData->gameFrameTime / 60; seconds = secondsPassed % 60; minutes = secondsPassed / 60; ConvertIntToDecimalStringN(text[0], minutes, 2, 2); ConvertIntToDecimalStringN(text[1], seconds, 2, 2); - textPtr = sBerryBlenderData->stringVar; + textPtr = gBerryBlenderData->stringVar; textPtr = StringCopy(textPtr, gOtherText_RequiredTime); textPtr = sub_8072C74(textPtr, text[0], 102, 1); @@ -2944,32 +2894,32 @@ bool8 Blender_PrintBlendingResults(void) textPtr = sub_8072C74(textPtr, text[1], 136, 1); StringCopy(textPtr, gOtherText_Sec); - MenuPrint(sBerryBlenderData->stringVar, 5, 15); + MenuPrint(gBerryBlenderData->stringVar, 5, 15); - sBerryBlenderData->framesToWait = 0; - sBerryBlenderData->field_0++; + gBerryBlenderData->framesToWait = 0; + gBerryBlenderData->field_0++; } break; case 4: if (gMain.newKeys & A_BUTTON) - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; break; case 5: MenuZeroFillScreen(); MenuDrawTextWindow(0, 14, 29, 19); for (i = 0; i < BLENDER_MAX_PLAYERS; i++) { - if (sBerryBlenderData->chosenItemID[i] != 0) - berryIDs[i] = sBerryBlenderData->chosenItemID[i] - 133; + if (gBerryBlenderData->chosenItemID[i] != 0) + berryIDs[i] = gBerryBlenderData->chosenItemID[i] - 133; } sub_8050760(); - sub_8050520(sBerryBlenderData->blendedBerries, &pokeblock, sBerryBlenderData->playersNo, vars2, sBerryBlenderData->max_RPM); - Blender_PrintMadePokeblockString(&pokeblock, sBerryBlenderData->stringVar); + Blender_CalculatePokeblock(gBerryBlenderData->blendedBerries, &pokeblock, gBerryBlenderData->playersNo, flavours, gBerryBlenderData->max_RPM); + Blender_PrintMadePokeblockString(&pokeblock, gBerryBlenderData->stringVar); CreateTask(sub_8052BD0, 6); - MenuPrintMessage(sBerryBlenderData->stringVar, 1, 15); + MenuPrintMessage(gBerryBlenderData->stringVar, 1, 15); RemoveBagItem(gScriptItemId, 1); sub_810CA34(&pokeblock); - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; break; case 6: if (MenuUpdateWindowText()) @@ -2982,11 +2932,7 @@ bool8 Blender_PrintBlendingResults(void) return 0; } -extern const u8 gUnknown_08216249[]; -extern const u8 gUnknown_082162C8[]; -extern const u8 *const gPokeblockNames[]; - -void Blender_PrintMadePokeblockString(struct Pokeblock* pokeblock, u8* dst) +static void Blender_PrintMadePokeblockString(struct Pokeblock* pokeblock, u8* dst) { u8 text[12]; u8 flavourLvl, feel; @@ -3011,7 +2957,7 @@ void Blender_PrintMadePokeblockString(struct Pokeblock* pokeblock, u8* dst) StringAppend(dst, gUnknown_08216249); } -void Blender_SortBasedOnPoints(u8* places, u8 playersNum, u32* scores) +static void Blender_SortBasedOnPoints(u8* places, u8 playersNum, u32* scores) { s32 i, j; for (i = 0; i < playersNum; i++) @@ -3028,72 +2974,70 @@ void Blender_SortBasedOnPoints(u8* places, u8 playersNum, u32* scores) } } -void Blender_SortScores(void) +static void Blender_SortScores(void) { u8 i; u8 places[4]; u32 points[4]; - for (i = 0; i < sBerryBlenderData->playersNo; i++) + for (i = 0; i < gBerryBlenderData->playersNo; i++) places[i] = i; - for (i = 0; i < sBerryBlenderData->playersNo; i++) + for (i = 0; i < gBerryBlenderData->playersNo; i++) { - points[i] = 1000000 * sBerryBlenderData->scores[i][BLENDER_SCORE_BEST]; - points[i] += 1000 * sBerryBlenderData->scores[i][BLENDER_SCORE_GOOD]; - points[i] += 1000 - sBerryBlenderData->scores[i][BLENDER_SCORE_MISS]; + 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, sBerryBlenderData->playersNo, points); - for (i = 0; i < sBerryBlenderData->playersNo; i++) - sBerryBlenderData->playerPlaces[i] = places[i]; + Blender_SortBasedOnPoints(places, gBerryBlenderData->playersNo, points); + for (i = 0; i < gBerryBlenderData->playersNo; i++) + gBerryBlenderData->playerPlaces[i] = places[i]; } -extern const u8 gUnknown_082165F3[]; - -bool8 Blender_PrintBlendingRanking(void) +static bool8 Blender_PrintBlendingRanking(void) { u16 i; - switch (sBerryBlenderData->field_0) + switch (gBerryBlenderData->field_0) { case 0: - sBerryBlenderData->field_0++; - sBerryBlenderData->framesToWait = 255; + gBerryBlenderData->field_0++; + gBerryBlenderData->framesToWait = 255; break; case 1: - sBerryBlenderData->framesToWait -= 10; - if (sBerryBlenderData->framesToWait < 0) + gBerryBlenderData->framesToWait -= 10; + if (gBerryBlenderData->framesToWait < 0) { - sBerryBlenderData->framesToWait = 0; - sBerryBlenderData->field_0++; + gBerryBlenderData->framesToWait = 0; + gBerryBlenderData->field_0++; } break; case 2: - if (++sBerryBlenderData->framesToWait > 20) + if (++gBerryBlenderData->framesToWait > 20) { - sBerryBlenderData->framesToWait = 0; - sBerryBlenderData->field_0++; + gBerryBlenderData->framesToWait = 0; + gBerryBlenderData->field_0++; } break; case 3: MenuDrawTextWindow(4, 2, 25, 17); sub_8072BD8(gOtherText_Ranking, 5, 3, 160); - sBerryBlenderData->scoreIconIDs[BLENDER_SCORE_BEST] = CreateSprite(&gSpriteTemplate_821645C, 140, 52, 0); - gSprites[sBerryBlenderData->scoreIconIDs[BLENDER_SCORE_BEST]].callback = SpriteCallbackDummy; - StartSpriteAnim(&gSprites[sBerryBlenderData->scoreIconIDs[BLENDER_SCORE_BEST]], 3); + gBerryBlenderData->scoreIconIDs[BLENDER_SCORE_BEST] = CreateSprite(&gSpriteTemplate_821645C, 140, 52, 0); + gSprites[gBerryBlenderData->scoreIconIDs[BLENDER_SCORE_BEST]].callback = SpriteCallbackDummy; + StartSpriteAnim(&gSprites[gBerryBlenderData->scoreIconIDs[BLENDER_SCORE_BEST]], 3); - sBerryBlenderData->scoreIconIDs[BLENDER_SCORE_GOOD] = CreateSprite(&gSpriteTemplate_821645C, 164, 52, 0); - gSprites[sBerryBlenderData->scoreIconIDs[BLENDER_SCORE_GOOD]].callback = SpriteCallbackDummy; + gBerryBlenderData->scoreIconIDs[BLENDER_SCORE_GOOD] = CreateSprite(&gSpriteTemplate_821645C, 164, 52, 0); + gSprites[gBerryBlenderData->scoreIconIDs[BLENDER_SCORE_GOOD]].callback = SpriteCallbackDummy; - sBerryBlenderData->scoreIconIDs[BLENDER_SCORE_MISS] = CreateSprite(&gSpriteTemplate_821645C, 188, 52, 0); - gSprites[sBerryBlenderData->scoreIconIDs[BLENDER_SCORE_MISS]].callback = SpriteCallbackDummy; - StartSpriteAnim(&gSprites[sBerryBlenderData->scoreIconIDs[BLENDER_SCORE_MISS]], 1); + gBerryBlenderData->scoreIconIDs[BLENDER_SCORE_MISS] = CreateSprite(&gSpriteTemplate_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 < sBerryBlenderData->playersNo; i++) + for (i = 0; i < gBerryBlenderData->playersNo; i++) { - u8 place = sBerryBlenderData->playerPlaces[i]; - u8* txtPtr = sBerryBlenderData->stringVar; + u8 place = gBerryBlenderData->playerPlaces[i]; + u8* txtPtr = gBerryBlenderData->stringVar; txtPtr[0] = EXT_CTRL_CODE_BEGIN; txtPtr[1] = 0x13; @@ -3109,40 +3053,34 @@ bool8 Blender_PrintBlendingRanking(void) txtPtr = StringCopy(txtPtr, gLinkPlayers[place].name); - txtPtr = sub_8072C14(txtPtr, sBerryBlenderData->scores[place][BLENDER_SCORE_BEST], 108, 1); - txtPtr = sub_8072C14(txtPtr, sBerryBlenderData->scores[place][BLENDER_SCORE_GOOD], 132, 1); - txtPtr = sub_8072C14(txtPtr, sBerryBlenderData->scores[place][BLENDER_SCORE_MISS], 156, 1); + 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); - MenuPrint(sBerryBlenderData->stringVar, 5, i * gUnknown_082165F3[sBerryBlenderData->playersNo] + 8); + MenuPrint(gBerryBlenderData->stringVar, 5, i * gUnknown_082165F3[gBerryBlenderData->playersNo] + 8); } - sBerryBlenderData->framesToWait = 0; - sBerryBlenderData->field_0++; + gBerryBlenderData->framesToWait = 0; + gBerryBlenderData->field_0++; break; case 4: - if (++sBerryBlenderData->framesToWait > 20) - sBerryBlenderData->field_0++; + if (++gBerryBlenderData->framesToWait > 20) + gBerryBlenderData->field_0++; break; case 5: if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); - sBerryBlenderData->field_0++; + gBerryBlenderData->field_0++; } break; case 6: - sBerryBlenderData->field_0 = 0; + gBerryBlenderData->field_0 = 0; return 1; } return 0; } -struct UnknownStruct -{ - s8 bytes[24]; - s16 hword[2]; -}; - -extern struct UnknownStruct gUnknown_03000560; +// debug menu goes here void unref_sub_80524BC(void) { @@ -3158,7 +3096,265 @@ void unref_sub_80524BC(void) AnimateSprites(); BuildOamBuffer(); UpdatePaletteFade(); - gUnknown_03000560.hword[1] = 0x1F40; - gUnknown_03000560.bytes[16]++; + sBlenderDebug.BPM = 8000; + sBlenderDebug.field_10++; SetMainCallback2(sub_8052AF8); } + +static void BlenderDebug_PrintBerryData(void) +{ + u8 text[128]; + u8 i; + + StringCopy(text, gOtherText_BPMAndDash); + MenuPrint(text, 2, 0); + + ConvertIntToDecimalStringN(text, sBlenderDebug.BPM / 100, 2, 3); + MenuPrint(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; + MenuPrint(text, 2, var); + + ConvertIntToDecimalStringN(&text[0], gBerries[sBlenderDebug.berries[i]].spicy, 2, 2); + StringAppend(text, gUnknown_082165F8); + + ConvertIntToDecimalStringN(&text[3], gBerries[sBlenderDebug.berries[i]].dry, 2, 2); + StringAppend(text, gUnknown_082165F8); + + ConvertIntToDecimalStringN(&text[6], gBerries[sBlenderDebug.berries[i]].sweet, 2, 2); + StringAppend(text, gUnknown_082165F8); + + ConvertIntToDecimalStringN(&text[9], gBerries[sBlenderDebug.berries[i]].bitter, 2, 2); + StringAppend(text, gUnknown_082165F8); + + ConvertIntToDecimalStringN(&text[12], gBerries[sBlenderDebug.berries[i]].sour, 2, 2); + StringAppend(text, gUnknown_082165F8); + + ConvertIntToDecimalStringN(&text[15], gBerries[sBlenderDebug.berries[i]].smoothness, 2, 2); + + text[17] = EOS; + MenuPrint(text, 7, var); + } + if (sBlenderDebug.pokeblock.color != 0) + { + StringCopy(text, gPokeblockNames[sBlenderDebug.pokeblock.color]); + MenuPrint(text, 2, 15); + + ConvertIntToHexStringN(&text[0], sBlenderDebug.spicy, 2, 2); + StringAppend(text, gUnknown_082165F8); + + ConvertIntToHexStringN(&text[3], sBlenderDebug.dry, 2, 2); + StringAppend(text, gUnknown_082165F8); + + ConvertIntToHexStringN(&text[6], sBlenderDebug.sweet, 2, 2); + StringAppend(text, gUnknown_082165F8); + + ConvertIntToHexStringN(&text[9], sBlenderDebug.bitter, 2, 2); + StringAppend(text, gUnknown_082165F8); + + ConvertIntToHexStringN(&text[12], sBlenderDebug.sour, 2, 2); + StringAppend(text, gUnknown_082165F8); + + ConvertIntToHexStringN(&text[15], sBlenderDebug.feel, 2, 2); + + text[17] = EOS; + MenuPrint(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++) + ewram[i] = 0; + gUnknown_020297E8 = 0; + } + for (i = 0; i < 100; i++) + { + if (((Random() >> 15) & 1) == gUnknown_020297E8) + gUnknown_020297E0++; + else + { + u16* ewramPtr = ((u16*)(ewram)); + 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, gUnknown_082165F8); + + ConvertIntToHexStringN(buffer, gUnknown_020297E0, 2, 8); + StringAppend(text, buffer); + StringAppend(text, gUnknown_08216600); + + if (gUnknown_020297DC == 3) + { + ConvertIntToHexStringN(buffer, gUnknown_020297E4, 2, 16); + StringAppend(text, buffer); + gUnknown_020297DC = 0; + } + + MenuPrint(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; + + MenuDrawTextWindow(6, 3, 23, 16); + MenuPrint(gMultiText_BerryBlenderMaxSpeedRecord, 8, 4); + MenuPrint(gMultiText_2P3P4P, 8, 9); + + for (i = 0; i < 3; i++) + { + u32 record = gSaveBlock1.berryBlenderRecords[i]; + u8* txtPtr = sub_8072C14(text, record / 100, 18, 1); + txtPtr[0] = CHAR_SPACE; + txtPtr[1] = CHAR_PERIOD; + txtPtr[2] = CHAR_SPACE; + txtPtr += 3; + txtPtr = ConvertIntToDecimalStringN(txtPtr, record % 100, 2, 2); + StringAppend(txtPtr, gOtherText_RPM); + MenuPrint(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); + } +} -- cgit v1.2.3 From 56eacd725bb6da9c4ff0b0b4f8058341deba3e97 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 21 Aug 2017 10:41:07 +0200 Subject: fix german build of berry blender --- src/berry_blender.c | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/berry_blender.c b/src/berry_blender.c index cbf50fdb3..d1c90fcbb 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -201,6 +201,9 @@ void sub_814A880(u8 a1, u8 a2); u8 sub_814A5C0(u8 a1, u16 a2, u8 a3, u16 a4, u8 a5); s8 sub_810CA00(void); bool8 sub_810CA34(struct Pokeblock *pokeblock); +#ifdef GERMAN +extern void de_sub_8073110(); +#endif extern struct MusicPlayerInfo gMPlay_SE2; extern struct MusicPlayerInfo gMPlay_BGM; @@ -584,7 +587,7 @@ static void sub_804E884(u8 a0) if (a0) { for (i = 0; i < 4; i++) - gLinkPlayers[i].language = LANGUAGE_ENGLISH; + gLinkPlayers[i].language = GAME_LANGUAGE; } switch (a0) { @@ -2179,7 +2182,7 @@ static void sub_8050954(void) UpdatePaletteFade(); } -static bool8 sub_8050CE8(void) +bool8 sub_8050CE8(void) { switch (gBerryBlenderData->field_1C4) { @@ -2255,16 +2258,26 @@ static void sub_8050E30(void) gBerryBlenderData->field_6F = 3; DestroyMenuCursor(); MenuZeroFillWindowRect(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(); MenuZeroFillWindowRect(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: @@ -2855,7 +2868,11 @@ static bool8 Blender_PrintBlendingResults(void) 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; @@ -2871,12 +2888,16 @@ static bool8 Blender_PrintBlendingResults(void) 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); MenuPrint(gBerryBlenderData->stringVar, 5, 13); @@ -2888,7 +2909,11 @@ static bool8 Blender_PrintBlendingResults(void) 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); @@ -2939,7 +2964,11 @@ static void Blender_PrintMadePokeblockString(struct Pokeblock* pokeblock, u8* ds dst[0] = EOS; StringCopy(dst, gPokeblockNames[pokeblock->color]); +#ifdef ENGLISH StringAppend(dst, gOtherText_PokeBlockMade); +#else + de_sub_8073174(dst, gOtherText_PokeBlockMade); +#endif StringAppend(dst, gUnknown_082162C8); flavourLvl = sub_810C9B0(pokeblock); @@ -3335,10 +3364,16 @@ void ShowBerryBlenderRecordWindow(void) { 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); MenuPrint(text, 15, i * 2 + 9); -- cgit v1.2.3 From bfbe446e73b945926e3581ef25d50291451b06b0 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 21 Aug 2017 13:42:49 +0200 Subject: moved all data to C --- src/berry_blender.c | 672 +++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 580 insertions(+), 92 deletions(-) (limited to 'src') diff --git a/src/berry_blender.c b/src/berry_blender.c index d1c90fcbb..772de43f7 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -212,53 +212,21 @@ extern u16 gScriptItemId; extern u8 gUnknown_020297ED; extern u8 byte_3002A68; -// rom data to do - extern const u8 gUnknown_08E6C100[]; -extern const u8 gUnknown_08215C2C[]; extern const u8 gUnknown_08E6C920[]; extern const u8 gUnknown_08E6D354[]; -extern const u16 gUnknown_08215C0C[]; -extern const u16 gUnknown_0821602C[]; -extern const struct SpriteSheet gUnknown_082163DC; -extern const struct SpriteSheet gUnknown_082164F4; -extern const struct SpriteSheet gUnknown_08216454; -extern const struct SpriteSheet gUnknown_08216540; -extern const struct SpriteSheet gUnknown_08216574; -extern const struct SpritePalette gUnknown_082163EC; -extern const struct SpritePalette gUnknown_082163E4; extern const struct WindowConfig gWindowConfig_81E6F68; -extern const u8 sBlenderSyncArrowsPos[][2]; -extern const struct SpriteTemplate sBlenderSyncArrow_SpriteTemplate; -extern const s16 gUnknown_08216594[][5]; -extern const u8* const gUnknown_082162B8[]; -extern const u8 gUnknown_082162EC[3][4]; -extern const u16 gUnknown_082162F8[]; -extern const u8 gUnknown_08216300[]; -extern const struct SpriteTemplate gSpriteTemplate_8216548; -extern const u8 gUnknown_08216303[]; -extern const u8 gUnknown_082165BC[][3]; -extern const u8 gUnknown_082162C4[]; -extern const u8 gUnknown_082162D4[][2]; -extern const TaskFunc gUnknown_08216308[]; -extern const s8 gUnknown_082162CC[][2]; -extern const struct SpriteTemplate gSpriteTemplate_821645C; -extern const u8 gUnknown_082165DA[]; -extern const u8 gUnknown_082165DF[]; -extern const struct SpriteTemplate gSpriteTemplate_82164FC; -extern const u8* const gUnknown_08216284[]; -extern const struct SpriteTemplate gSpriteTemplate_821657C; -extern const u8 gUnknown_082165E9[]; -extern const u8 gUnknown_082165EE[]; -extern const u8 gUnknown_08216249[]; -extern const u8 gUnknown_082162C8[]; extern const u8 *const gPokeblockNames[]; -extern const u8 gUnknown_082165F3[]; -extern const u8 gOtherText_BPMAndDash[]; -extern const u8 gUnknown_082165F8[]; -extern const u8 gUnknown_08216600[]; 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; @@ -267,7 +235,7 @@ static EWRAM_DATA u8 gUnknown_020297E8 = 0; // iwram common u16 gUnknown_03004830; -u8 gUnknown_03004834; +u8 gInGameOpponentsNo; u16 gUnknown_03004840[10]; struct BerryBlenderData* gBerryBlenderData; @@ -287,7 +255,7 @@ void Blender_SetBankBerryData(u8 bank, u16 itemID); static void sub_80514A4(void); static void sub_80514F0(void); static void sub_804E56C(void); -static void sub_804E884(u8 a0); +static void Blender_SetPlayerNamesLocal(u8 NoOfOpponents); static void sub_8051474(void); static void sub_804E9F8(void); static void sub_804F378(void); @@ -313,6 +281,526 @@ 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, 0, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_821632C[] = +{ + ANIMCMD_FRAME(16, 5, 1, 0), + 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, 0, 1), + ANIMCMD_FRAME(32, 5, 0, 1), + ANIMCMD_FRAME(48, 3, 0, 1), + ANIMCMD_FRAME(16, 5, 0, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_8216364[] = +{ + ANIMCMD_FRAME(48, 2, 1, 0), + ANIMCMD_FRAME(32, 5, 1, 0), + ANIMCMD_FRAME(48, 3, 1, 0), + ANIMCMD_FRAME(16, 5, 1, 0), + 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, 0, 1), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_821639C[] = +{ + ANIMCMD_FRAME(0, 5, 1, 0), + 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) { @@ -345,11 +833,11 @@ static bool8 sub_804E2EC(void) break; case 1: { - const void* offsetRead = gUnknown_08215C2C; + const void* offsetRead = sBlenderCenterMap; void* offsetWrite = (void*)(VRAM + 0x4000); DmaCopy16(3, offsetRead, offsetWrite, 0x400); - LoadPalette(gUnknown_08215C0C, 0, 0x100); + LoadPalette(sBlenderCenterPal, 0, 0x100); gBerryBlenderData->field_1++; } break; @@ -413,7 +901,7 @@ static bool8 sub_804E2EC(void) offsetRead = &ewram[0x13000]; offsetWrite = (void*)(VRAM + 0x6000); DmaCopy16(3, offsetRead, offsetWrite, 0x500); - LoadPalette(gUnknown_0821602C, 0x80, 0x20); + LoadPalette(sBlenderOuterPal, 0x80, 0x20); gBerryBlenderData->field_1++; } break; @@ -455,7 +943,7 @@ void sub_804E538(void) gBerryBlenderData->field_0 = 0; *field6F = 0; - sub_804E884(gSpecialVar_0x8004); + Blender_SetPlayerNamesLocal(gSpecialVar_0x8004); SetMainCallback2(sub_804E56C); } @@ -581,39 +1069,39 @@ static void Blender_CopyBerryData(struct BlenderBerry* berry, u16 itemID) berry->smoothness = berryInfo->smoothness; } -static void sub_804E884(u8 a0) +static void Blender_SetPlayerNamesLocal(u8 NoOfOpponents) { int i; - if (a0) + if (NoOfOpponents) { for (i = 0; i < 4; i++) gLinkPlayers[i].language = GAME_LANGUAGE; } - switch (a0) + switch (NoOfOpponents) { case 0: - gUnknown_03004834 = 0; + gInGameOpponentsNo = 0; break; case 1: - gUnknown_03004834 = 1; + gInGameOpponentsNo = 1; gBerryBlenderData->playersNo = 2; StringCopy(gLinkPlayers[0].name, gSaveBlock2.playerName); - StringCopy(gLinkPlayers[1].name, gUnknown_082162B8[0]); + StringCopy(gLinkPlayers[1].name, sBlenderOpponentsNames[0]); break; case 2: - gUnknown_03004834 = 2; + gInGameOpponentsNo = 2; gBerryBlenderData->playersNo = 3; StringCopy(gLinkPlayers[0].name, gSaveBlock2.playerName); - StringCopy(gLinkPlayers[1].name, gUnknown_082162B8[0]); - StringCopy(gLinkPlayers[2].name, gUnknown_082162B8[1]); + StringCopy(gLinkPlayers[1].name, sBlenderOpponentsNames[0]); + StringCopy(gLinkPlayers[2].name, sBlenderOpponentsNames[1]); break; case 3: - gUnknown_03004834 = 3; + gInGameOpponentsNo = 3; gBerryBlenderData->playersNo = 4; StringCopy(gLinkPlayers[0].name, gSaveBlock2.playerName); - StringCopy(gLinkPlayers[1].name, gUnknown_082162B8[0]); - StringCopy(gLinkPlayers[2].name, gUnknown_082162B8[1]); - StringCopy(gLinkPlayers[3].name, gUnknown_082162B8[2]); + StringCopy(gLinkPlayers[1].name, sBlenderOpponentsNames[0]); + StringCopy(gLinkPlayers[2].name, sBlenderOpponentsNames[1]); + StringCopy(gLinkPlayers[3].name, sBlenderOpponentsNames[2]); break; } } @@ -630,7 +1118,7 @@ void sub_804E990(void) { gBerryBlenderData->chosenItemID[i] = 0; } - sub_804E884(gSpecialVar_0x8004); + Blender_SetPlayerNamesLocal(gSpecialVar_0x8004); if (gSpecialVar_0x8004 == 0) SetMainCallback2(sub_804E9F8); else @@ -793,7 +1281,7 @@ static void sub_804E9F8(void) sub_8051414(&gBerryBlenderData->field_168); break; case 16: - CreateSprite(&gSpriteTemplate_8216548, 120, -16, 3); + CreateSprite(&sSpriteTemplate_8216548, 120, -16, 3); gBerryBlenderData->field_0++; break; case 18: @@ -936,7 +1424,7 @@ static void sub_804F2A8(void) 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, gUnknown_082162C4); + stringPtr = StringCopy(stringPtr, sRedColorString); StringCopy(stringPtr, gLinkPlayers[gBerryBlenderData->field_9A[i]].name); MenuPrint_PixelCoords(gStringVar1, gUnknown_082162D4[i][0] * 8 + 1, gUnknown_082162D4[i][1] * 8, 1); } @@ -1051,7 +1539,7 @@ static void sub_804F378(void) sub_8051414(&gBerryBlenderData->field_168); break; case 16: - CreateSprite(&gSpriteTemplate_8216548, 120, -16, 3); + CreateSprite(&sSpriteTemplate_8216548, 120, -16, 3); gBerryBlenderData->field_0++; break; case 18: @@ -1119,7 +1607,7 @@ static void sub_804F890(u8 a0, u8 a1) gTasks[taskID].data[2] = a0; } -void sub_804F8C8(u8 taskID) +static void sub_804F8C8(u8 taskID) { if (sub_804F16C(gBerryBlenderData->arrowPos, 1) == 2) { @@ -1170,7 +1658,7 @@ void sub_804F8C8(u8 taskID) gTasks[taskID].data[0] = 0; } -void sub_804F9F4(u8 taskID) +static void sub_804F9F4(u8 taskID) { u32 var1 = (gBerryBlenderData->arrowPos + 0x1800) & 0xFFFF; u32 var2 = gBerryBlenderData->field_A2[2] & 0xFF; @@ -1213,7 +1701,7 @@ void sub_804F9F4(u8 taskID) gTasks[taskID].data[0] = 0; } -void sub_804FB1C(u8 taskID) +static void sub_804FB1C(u8 taskID) { u32 var1, var2; @@ -1264,7 +1752,7 @@ static void sub_804FC48(u16 a0, u8 a1) { u8 spriteID; - spriteID = CreateSprite(&gSpriteTemplate_821645C, + spriteID = CreateSprite(&sSpriteTemplate_821645C, sBlenderSyncArrowsPos[a1][0] - (10 * gUnknown_082162CC[a1][0]), sBlenderSyncArrowsPos[a1][1] - (10 * gUnknown_082162CC[a1][1]), 1); @@ -2077,7 +2565,7 @@ static void sub_8050954(void) case 6: if (Blender_PrintBlendingResults()) { - if (gUnknown_03004834 == 0) + if (gInGameOpponentsNo == 0) IncrementGameStat(34); else IncrementGameStat(33); @@ -2152,7 +2640,7 @@ static void sub_8050954(void) } break; case 12: - if (gUnknown_03004834) + if (gInGameOpponentsNo) { SetMainCallback2(sub_80510E8); gBerryBlenderData->field_6F = 0; @@ -2547,7 +3035,7 @@ static void sub_805156C(void) x = gSineTable[(rand & 0xFF) + 64] / 4; y = gSineTable[(rand & 0xFF)] / 4; - spriteID = CreateSprite(&gSpriteTemplate_82164FC, x + 120, y + 80, 1); + spriteID = CreateSprite(&sSpriteTemplate_82164FC, x + 120, y + 80, 1); gSprites[spriteID].data0 = 16 - (Random() % 32); gSprites[spriteID].data1 = 16 - (Random() % 32); @@ -2555,7 +3043,7 @@ static void sub_805156C(void) } } -void sub_8051650(struct Sprite* sprite) +static void sub_8051650(struct Sprite* sprite) { sprite->data0++; sprite->pos2.y = -(sprite->data0 / 3); @@ -2619,7 +3107,7 @@ void unref_sub_80516F8(u8 taskID) } } -void sub_805181C(struct Sprite* sprite) +static void sub_805181C(struct Sprite* sprite) { switch (sprite->data0) { @@ -2647,7 +3135,7 @@ void sub_805181C(struct Sprite* sprite) if (++sprite->data3 == 3) { DestroySprite(sprite); - CreateSprite(&gSpriteTemplate_821657C, 120, -20, 2); + CreateSprite(&sSpriteTemplate_821657C, 120, -20, 2); } else { @@ -2661,7 +3149,7 @@ void sub_805181C(struct Sprite* sprite) sprite->pos2.y = sprite->data1; } -void sub_80518CC(struct Sprite* sprite) +static void sub_80518CC(struct Sprite* sprite) { switch (sprite->data0) { @@ -2810,7 +3298,7 @@ static bool8 sub_8051B8C(void) return 0; } -void sub_8051C04(struct Sprite* sprite) +static void sub_8051C04(struct Sprite* sprite) { sprite->pos2.x = -(gBerryBlenderData->field_144); sprite->pos2.y = -(gBerryBlenderData->field_146); @@ -2969,7 +3457,7 @@ static void Blender_PrintMadePokeblockString(struct Pokeblock* pokeblock, u8* ds #else de_sub_8073174(dst, gOtherText_PokeBlockMade); #endif - StringAppend(dst, gUnknown_082162C8); + StringAppend(dst, sNewLineString_0); flavourLvl = sub_810C9B0(pokeblock); feel = sub_810C9E8(pokeblock); @@ -3050,14 +3538,14 @@ static bool8 Blender_PrintBlendingRanking(void) MenuDrawTextWindow(4, 2, 25, 17); sub_8072BD8(gOtherText_Ranking, 5, 3, 160); - gBerryBlenderData->scoreIconIDs[BLENDER_SCORE_BEST] = CreateSprite(&gSpriteTemplate_821645C, 140, 52, 0); + 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(&gSpriteTemplate_821645C, 164, 52, 0); + 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(&gSpriteTemplate_821645C, 188, 52, 0); + 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); @@ -3135,7 +3623,7 @@ static void BlenderDebug_PrintBerryData(void) u8 text[128]; u8 i; - StringCopy(text, gOtherText_BPMAndDash); + StringCopy(text, sText_BPM); MenuPrint(text, 2, 0); ConvertIntToDecimalStringN(text, sBlenderDebug.BPM / 100, 2, 3); @@ -3160,19 +3648,19 @@ static void BlenderDebug_PrintBerryData(void) MenuPrint(text, 2, var); ConvertIntToDecimalStringN(&text[0], gBerries[sBlenderDebug.berries[i]].spicy, 2, 2); - StringAppend(text, gUnknown_082165F8); + StringAppend(text, sText_Space); ConvertIntToDecimalStringN(&text[3], gBerries[sBlenderDebug.berries[i]].dry, 2, 2); - StringAppend(text, gUnknown_082165F8); + StringAppend(text, sText_Space); ConvertIntToDecimalStringN(&text[6], gBerries[sBlenderDebug.berries[i]].sweet, 2, 2); - StringAppend(text, gUnknown_082165F8); + StringAppend(text, sText_Space); ConvertIntToDecimalStringN(&text[9], gBerries[sBlenderDebug.berries[i]].bitter, 2, 2); - StringAppend(text, gUnknown_082165F8); + StringAppend(text, sText_Space); ConvertIntToDecimalStringN(&text[12], gBerries[sBlenderDebug.berries[i]].sour, 2, 2); - StringAppend(text, gUnknown_082165F8); + StringAppend(text, sText_Space); ConvertIntToDecimalStringN(&text[15], gBerries[sBlenderDebug.berries[i]].smoothness, 2, 2); @@ -3185,19 +3673,19 @@ static void BlenderDebug_PrintBerryData(void) MenuPrint(text, 2, 15); ConvertIntToHexStringN(&text[0], sBlenderDebug.spicy, 2, 2); - StringAppend(text, gUnknown_082165F8); + StringAppend(text, sText_Space); ConvertIntToHexStringN(&text[3], sBlenderDebug.dry, 2, 2); - StringAppend(text, gUnknown_082165F8); + StringAppend(text, sText_Space); ConvertIntToHexStringN(&text[6], sBlenderDebug.sweet, 2, 2); - StringAppend(text, gUnknown_082165F8); + StringAppend(text, sText_Space); ConvertIntToHexStringN(&text[9], sBlenderDebug.bitter, 2, 2); - StringAppend(text, gUnknown_082165F8); + StringAppend(text, sText_Space); ConvertIntToHexStringN(&text[12], sBlenderDebug.sour, 2, 2); - StringAppend(text, gUnknown_082165F8); + StringAppend(text, sText_Space); ConvertIntToHexStringN(&text[15], sBlenderDebug.feel, 2, 2); @@ -3241,11 +3729,11 @@ static void sub_80527BC(void) ConvertIntToHexStringN(buffer, gUnknown_03004830, 2, 8); StringAppend(text, buffer); - StringAppend(text, gUnknown_082165F8); + StringAppend(text, sText_Space); ConvertIntToHexStringN(buffer, gUnknown_020297E0, 2, 8); StringAppend(text, buffer); - StringAppend(text, gUnknown_08216600); + StringAppend(text, sNewLineString_1); if (gUnknown_020297DC == 3) { -- cgit v1.2.3 From 13f917d4ffeff59ad13ea80fa8dbc994e4b687c0 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 22 Aug 2017 10:34:45 +0200 Subject: cleaning up the file --- src/berry_blender.c | 101 ++++++++++++++++++++++++++-------------------------- 1 file changed, 51 insertions(+), 50 deletions(-) (limited to 'src') diff --git a/src/berry_blender.c b/src/berry_blender.c index 772de43f7..f54c6271d 100644 --- a/src/berry_blender.c +++ b/src/berry_blender.c @@ -373,7 +373,7 @@ static const u8 gUnknown_08216303[] = {32, 224, 96, 160, 0}; static const TaskFunc gUnknown_08216308[] = { - &sub_804F8C8, &sub_804F9F4, &sub_804FB1C + sub_804F8C8, sub_804F9F4, sub_804FB1C }; static const struct OamData sOamData_8216314 = @@ -401,13 +401,13 @@ static const union AnimCmd sSpriteAnim_821631C[] = static const union AnimCmd sSpriteAnim_8216324[] = { - ANIMCMD_FRAME(16, 5, 0, 1), + ANIMCMD_FRAME(16, 5, .vFlip = TRUE), ANIMCMD_END }; static const union AnimCmd sSpriteAnim_821632C[] = { - ANIMCMD_FRAME(16, 5, 1, 0), + ANIMCMD_FRAME(16, 5, .hFlip = TRUE), ANIMCMD_END }; @@ -428,19 +428,19 @@ static const union AnimCmd sSpriteAnim_821633C[] = static const union AnimCmd sSpriteAnim_8216350[] = { - ANIMCMD_FRAME(48, 2, 0, 1), - ANIMCMD_FRAME(32, 5, 0, 1), - ANIMCMD_FRAME(48, 3, 0, 1), - ANIMCMD_FRAME(16, 5, 0, 1), + 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, 1, 0), - ANIMCMD_FRAME(32, 5, 1, 0), - ANIMCMD_FRAME(48, 3, 1, 0), - ANIMCMD_FRAME(16, 5, 1, 0), + 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 }; @@ -461,13 +461,13 @@ static const union AnimCmd sSpriteAnim_821638C[] = static const union AnimCmd sSpriteAnim_8216394[] = { - ANIMCMD_FRAME(0, 5, 0, 1), + ANIMCMD_FRAME(0, 5, .vFlip = TRUE), ANIMCMD_END }; static const union AnimCmd sSpriteAnim_821639C[] = { - ANIMCMD_FRAME(0, 5, 1, 0), + ANIMCMD_FRAME(0, 5, .hFlip = TRUE), ANIMCMD_END }; @@ -917,9 +917,9 @@ static bool8 sub_804E2EC(void) LoadSpritePalette(&gUnknown_082163EC); LoadSpritePalette(&gUnknown_082163E4); gBerryBlenderData->field_1 = 0; - return 1; + return TRUE; } - return 0; + return FALSE; } static void sub_804E4FC(void) @@ -1031,7 +1031,7 @@ void sub_804E738(struct Sprite* sprite) if (++sprite->data5 > 3) DestroySprite(sprite); else - PlaySE(116); + PlaySE(SE_TB_KARA); } sprite->pos1.x = sprite->data1; sprite->pos1.y = sprite->data2; @@ -1306,7 +1306,7 @@ static void sub_804E9F8(void) { gBerryBlenderData->field_178 = GetCurrentMapMusic(); } - PlayBGM(403); + PlayBGM(BGM_CYCLING); break; case 100: MenuDrawTextWindow(0, 13, 29, 19); @@ -1512,7 +1512,7 @@ static void sub_804F378(void) case 13: gBerryBlenderData->field_0++; sub_804F238(); - PlaySE(43); + PlaySE(SE_RU_HYUU); sub_8051414(&gBerryBlenderData->field_168); break; case 14: @@ -1526,7 +1526,7 @@ static void sub_804F378(void) gBerryBlenderData->arrowPos = gUnknown_082162F8[gUnknown_08216300[gBerryBlenderData->playersNo - 2]]; REG_BG2CNT = 0x4882; gBerryBlenderData->framesToWait = 0; - PlaySE(52); + PlaySE(SE_TRACK_DOOR);; sub_804F2A8(); } sub_8051414(&gBerryBlenderData->field_168); @@ -1568,8 +1568,8 @@ static void sub_804F378(void) { gBerryBlenderData->field_178 = GetCurrentMapMusic(); } - PlayBGM(403); - PlaySE(53); + PlayBGM(BGM_CYCLING); + PlaySE(SE_MOTER); Blender_ControlHitPitch(); break; } @@ -1760,17 +1760,17 @@ static void sub_804FC48(u16 a0, u8 a1) { StartSpriteAnim(&gSprites[spriteID], 2); gSprites[spriteID].callback = sub_8051684; - PlaySE(40); + PlaySE(SE_RU_GASHIN); } else if (a0 == 0x5432) { StartSpriteAnim(&gSprites[spriteID], 0); - PlaySE(31); + PlaySE(SE_SEIKAI); } else if (a0 == 0x2345) { StartSpriteAnim(&gSprites[spriteID], 1); - PlaySE(32); + PlaySE(SE_HAZURE); } sub_805156C(); } @@ -1926,20 +1926,21 @@ static void sub_80501FC(void) UpdatePaletteFade(); } -#define ARE_FLAVOURS_SAME(flavours1, flavours2)(((*(u32*)(&flavours1[-1]) & 0xFFFFFF00) == (*(u32*)(&flavours2[-1]) & 0xFFFFFF00)&& (*(u32*)(&flavours1[3]) & 0xFFFFFF) == (*(u32*)(&flavours2[3]) & 0xFFFFFF))) - 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 - && ARE_FLAVOURS_SAME(berries[index1].flavours, berries[index2].flavours))) - return 1; + || (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 0; + return FALSE; } -#undef ARE_FLAVOURS_SAME - u32 Blender_GetPokeblockColor(struct BlenderBerry* berries, s16* a1, u8 playersNo, u8 a3) { s16 vars[5]; @@ -2448,7 +2449,7 @@ static void BlenderDebug_CalculatePokeblock(struct BlenderBerry* berries, struct static void sub_8050760(void) { u32 frames = (u16)(gBerryBlenderData->gameFrameTime); - u32 max_RPM = (u16)(gBerryBlenderData->max_RPM); + u16 max_RPM = gBerryBlenderData->max_RPM; s16 var = 0; if (frames < 900) @@ -2466,23 +2467,23 @@ static void sub_8050760(void) var = 0; if (max_RPM <= 64) { - if ((u16)(max_RPM - 50) < 50) + if (max_RPM >= 50 && max_RPM < 100) var = -1; - else if ((u16)(max_RPM - 100) < 50) + else if (max_RPM >= 100 && max_RPM < 150) var = -2; - else if ((u16)(max_RPM - 150) < 50) + else if (max_RPM >= 150 && max_RPM < 200) var = -3; - else if ((u16)(max_RPM - 200) < 50) + else if (max_RPM >= 200 && max_RPM < 250) var = -4; - else if ((u16)(max_RPM - 250) < 50) + else if (max_RPM >= 250 && max_RPM < 300) var = -5; - else if ((u16)(max_RPM - 350) < 50) + else if (max_RPM >= 350 && max_RPM < 400) var = -6; - else if ((u16)(max_RPM - 400) < 50) + else if (max_RPM >= 400 && max_RPM < 450) var = -7; - else if ((u16)(max_RPM - 500) < 50) + else if (max_RPM >= 500 && max_RPM < 550) var = -8; - else if ((u16)(max_RPM - 550) < 50) + else if (max_RPM >= 550 && max_RPM < 600) var = -9; else if (max_RPM >= 600) var = -10; @@ -2718,11 +2719,11 @@ bool8 sub_8050CE8(void) if (++gBerryBlenderData->framesToWait > 5) { gSoftResetDisabled = FALSE; - return 1; + return TRUE; } break; } - return 0; + return FALSE; } static void sub_8050E30(void) @@ -3292,10 +3293,10 @@ static bool8 sub_8051B8C(void) { gBerryBlenderData->field_144 = 0; gBerryBlenderData->field_146 = 0; - return 1; + return TRUE; } else - return 0; + return FALSE; } static void sub_8051C04(struct Sprite* sprite) @@ -3438,11 +3439,11 @@ static bool8 Blender_PrintBlendingResults(void) if (MenuUpdateWindowText()) { Blender_TrySettingRecord(); - return 1; + return TRUE; } break; } - return 0; + return FALSE; } static void Blender_PrintMadePokeblockString(struct Pokeblock* pokeblock, u8* dst) @@ -3592,9 +3593,9 @@ static bool8 Blender_PrintBlendingRanking(void) break; case 6: gBerryBlenderData->field_0 = 0; - return 1; + return TRUE; } - return 0; + return FALSE; } // debug menu goes here -- cgit v1.2.3