From e1be0a633761d01cee77058df3211bee0faeb177 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 25 Jul 2017 18:37:41 -0500 Subject: clean up pokemon_icon.c --- src/pokemon_icon.c | 87 ++++++++++++++++++++++++++---------------------------- 1 file changed, 42 insertions(+), 45 deletions(-) (limited to 'src') diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index 8994ea49e..07b23bd18 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -1024,17 +1024,17 @@ void sub_809D7E8(struct Sprite *); u8 unref_sub_809D26C(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority) { u8 spriteId; - struct MonIconSpriteTemplate iconTemplate; - struct MonIconSpriteTemplate *iconTemplatePtr = &iconTemplate; // needed to match - - iconTemplatePtr->oam = &sMonIconOamData; - iconTemplatePtr->image = gMonIconTable[species]; - iconTemplatePtr->anims = sMonIconAnims; - iconTemplatePtr->affineAnims = sMonIconAffineAnims; - iconTemplatePtr->callback = callback; - iconTemplatePtr->paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species]; + struct MonIconSpriteTemplate iconTemplate = + { + .oam = &sMonIconOamData, + .image = gMonIconTable[species], + .anims = sMonIconAnims, + .affineAnims = sMonIconAffineAnims, + .callback = callback, + .paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species], + }; - spriteId = CreateMonIconSprite(iconTemplatePtr, x, y, subpriority); + spriteId = CreateMonIconSprite(&iconTemplate, x, y, subpriority); UpdateMonIconFrame(&gSprites[spriteId]); @@ -1067,17 +1067,17 @@ u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u u8 sub_809D3A4(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority) { u8 spriteId; - struct MonIconSpriteTemplate iconTemplate; - struct MonIconSpriteTemplate *iconTemplatePtr = &iconTemplate; // needed to match - - iconTemplatePtr->oam = &sMonIconOamData; - iconTemplatePtr->image = gMonIconTable[species]; - iconTemplatePtr->anims = sMonIconAnims; - iconTemplatePtr->affineAnims = sMonIconAffineAnims; - iconTemplatePtr->callback = callback; - iconTemplatePtr->paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species]; + struct MonIconSpriteTemplate iconTemplate = + { + .oam = &sMonIconOamData, + .image = gMonIconTable[species], + .anims = sMonIconAnims, + .affineAnims = sMonIconAffineAnims, + .callback = callback, + .paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species], + }; - spriteId = CreateMonIconSprite(iconTemplatePtr, x, y, subpriority); + spriteId = CreateMonIconSprite(&iconTemplate, x, y, subpriority); UpdateMonIconFrame(&gSprites[spriteId]); @@ -1197,43 +1197,40 @@ void sub_809D62C(struct Sprite *sprite) UpdateMonIconFrame(sprite); } -// TODO: try to find a way to avoid using goto and asm statement +// TODO: try to find a way to avoid using asm statement u8 UpdateMonIconFrame(struct Sprite *sprite) -{ +{ u8 result = 0; - + if (sprite->animDelayCounter == 0) { s16 frame = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue; - - if (frame != -2) + + switch (frame) { - if (frame != -1) - goto copy; - goto end; + case -1: + break; + case -2: + sprite->animCmdIndex = 0; + break; + default: + RequestSpriteCopy( + (u8 *)sprite->images + sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] * frame, + (u8 *)OBJ_VRAM0 + sprite->oam.tileNum * TILE_SIZE_4BPP, + sSpriteImageSizes[sprite->oam.shape][sprite->oam.size]); + { + register u8 duration asm("r0") = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration; + sprite->animDelayCounter = duration; + } + sprite->animCmdIndex++; + result = sprite->animCmdIndex; + break; } - - sprite->animCmdIndex = 0; - goto end; - - copy: - RequestSpriteCopy( - (u8 *)sprite->images + sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] * frame, - (u8 *)OBJ_VRAM0 + sprite->oam.tileNum * TILE_SIZE_4BPP, - sSpriteImageSizes[sprite->oam.shape][sprite->oam.size]); - { - register u8 duration asm("r0") = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration; - sprite->animDelayCounter = duration; - } - sprite->animCmdIndex++; - result = sprite->animCmdIndex; } else { sprite->animDelayCounter--; } - -end: return result; } -- cgit v1.2.3 From 1fd1a3b0c44ec57147087e05ecd2b8b301e0f385 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 25 Jul 2017 18:38:47 -0500 Subject: whitespace --- src/pokemon_icon.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c index 07b23bd18..9bb3386e1 100644 --- a/src/pokemon_icon.c +++ b/src/pokemon_icon.c @@ -1199,13 +1199,13 @@ void sub_809D62C(struct Sprite *sprite) // TODO: try to find a way to avoid using asm statement u8 UpdateMonIconFrame(struct Sprite *sprite) -{ +{ u8 result = 0; - + if (sprite->animDelayCounter == 0) { s16 frame = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue; - + switch (frame) { case -1: -- cgit v1.2.3 From 6f52c5238ccd0dad9a465102c950aa77cc7730c4 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 25 Jul 2017 22:07:49 -0500 Subject: decompile the two remaining functions of berry_tag_screen.c --- src/berry_tag_screen.c | 243 ++++++++++++------------------------------------- src/item_menu.c | 8 -- 2 files changed, 59 insertions(+), 192 deletions(-) (limited to 'src') diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c index ff430e7b2..50db5388c 100644 --- a/src/berry_tag_screen.c +++ b/src/berry_tag_screen.c @@ -61,9 +61,9 @@ static void sub_8146440(u8 taskId); static void sub_8146480(u8 taskid); static void sub_81464E4(void); static void sub_8146600(u8 berry); -// static void sub_81466A0(void); +static void sub_81466A0(void); static void sub_81466E8(u8 taskId, s8 direction); -// static void sub_8146798(u8 berry); +static void sub_8146798(u8 berry); static void sub_8146810(s8 berry); static void sub_81468BC(void); @@ -347,7 +347,7 @@ static void sub_8146600(u8 berry) gUnknown_0203932E[4] = sub_80A7E5C(208); } -void sub_81466A0(void) +static void sub_81466A0(void) { u16 i; @@ -361,105 +361,36 @@ void sub_81466A0(void) } } -__attribute__((naked)) static void sub_81466E8(u8 taskId, s8 direction) { - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - lsls r0, 24\n\ - lsrs r7, r0, 24\n\ - lsls r1, 24\n\ - lsrs r2, r1, 24\n\ - lsls r0, r7, 2\n\ - adds r0, r7\n\ - lsls r0, 3\n\ - ldr r1, _08146748 @ =gTasks + 0x8\n\ - adds r6, r0, r1\n\ - ldr r4, _0814674C @ =gBagPocketScrollStates\n\ - movs r0, 0xC\n\ - adds r0, r4\n\ - mov r8, r0\n\ - ldrb r1, [r0, 0x1]\n\ - ldrb r0, [r4, 0xC]\n\ - adds r1, r0\n\ - cmp r1, 0\n\ - bne _08146718\n\ - lsls r0, r2, 24\n\ - cmp r0, 0\n\ - blt _0814678C\n\ -_08146718:\n\ - adds r0, r1, 0x1\n\ - lsls r5, r2, 24\n\ - mov r1, r8\n\ - ldrb r1, [r1, 0x2]\n\ - cmp r0, r1\n\ - bne _08146728\n\ - cmp r5, 0\n\ - bgt _0814678C\n\ -_08146728:\n\ - movs r0, 0x5\n\ - bl PlaySE\n\ - mov r2, r8\n\ - ldrb r3, [r2, 0x1]\n\ - ldrb r4, [r4, 0xC]\n\ - mov r12, r4\n\ - adds r0, r3, r4\n\ - asrs r2, r5, 24\n\ - adds r1, r0, r2\n\ - cmp r1, 0\n\ - bge _08146750\n\ - negs r0, r0\n\ - strh r0, [r6, 0x2]\n\ - b _08146766\n\ - .align 2, 0\n\ -_08146748: .4byte gTasks + 0x8\n\ -_0814674C: .4byte gBagPocketScrollStates\n\ -_08146750:\n\ - mov r4, r8\n\ - ldrb r0, [r4, 0x2]\n\ - cmp r1, r0\n\ - blt _08146764\n\ - subs r0, r3\n\ - mov r1, r12\n\ - subs r0, r1\n\ - subs r0, 0x1\n\ - strh r0, [r6, 0x2]\n\ - b _08146766\n\ -_08146764:\n\ - strh r2, [r6, 0x2]\n\ -_08146766:\n\ - ldr r0, _08146780 @ =gTasks\n\ - lsls r1, r7, 2\n\ - adds r1, r7\n\ - lsls r1, 3\n\ - adds r1, r0\n\ - ldr r0, _08146784 @ =sub_8146798\n\ - str r0, [r1]\n\ - cmp r5, 0\n\ - bge _08146788\n\ - movs r2, 0x10\n\ - negs r2, r2\n\ - adds r0, r2, 0\n\ - b _0814678A\n\ - .align 2, 0\n\ -_08146780: .4byte gTasks\n\ -_08146784: .4byte sub_8146798\n\ -_08146788:\n\ - movs r0, 0x10\n\ -_0814678A:\n\ - strh r0, [r6]\n\ -_0814678C:\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided\n"); + u8 berryPocket = 3; + s16 *data = gTasks[taskId].data; + + if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos == 0 + && direction < 0) + return; + if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + 1 == gBagPocketScrollStates[berryPocket].numSlots + && direction > 0) + return; + + PlaySE(SE_SELECT); + if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + direction < 0) + data[1] = -(gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos); + else if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + direction >= gBagPocketScrollStates[berryPocket].numSlots) + data[1] = gBagPocketScrollStates[berryPocket].numSlots - gBagPocketScrollStates[berryPocket].scrollTop - gBagPocketScrollStates[berryPocket].cursorPos - 1; + else + data[1] = direction; + + gTasks[taskId].func = sub_8146798; + + if (direction < 0) + data[0] = -16; + else + data[0] = 16; + } -void sub_8146798(u8 taskId) +static void sub_8146798(u8 taskId) { s16 *taskData = gTasks[taskId].data; @@ -478,94 +409,38 @@ void sub_8146798(u8 taskId) } } -__attribute__((naked)) static void sub_8146810(s8 berry) { - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - lsls r0, 24\n\ - lsrs r3, r0, 24\n\ - adds r4, r3, 0\n\ - lsls r0, r3, 24\n\ - asrs r1, r0, 24\n\ - cmp r1, 0\n\ - ble _08146848\n\ - ldr r0, _08146840 @ =gBagPocketScrollStates\n\ - adds r4, r0, 0\n\ - adds r4, 0xC\n\ - ldrb r2, [r0, 0xC]\n\ - adds r1, r2, r1\n\ - adds r6, r0, 0\n\ - cmp r1, 0x7\n\ - ble _08146844\n\ - adds r0, r3, 0\n\ - adds r0, 0xF9\n\ - adds r0, r2, r0\n\ - ldrb r1, [r4, 0x1]\n\ - adds r0, r1\n\ - strb r0, [r4, 0x1]\n\ - movs r0, 0x7\n\ - b _0814686E\n\ - .align 2, 0\n\ -_08146840: .4byte gBagPocketScrollStates\n\ -_08146844:\n\ - adds r0, r2, r3\n\ - b _0814686E\n\ -_08146848:\n\ - ldr r0, _08146868 @ =gBagPocketScrollStates\n\ - adds r5, r0, 0\n\ - adds r5, 0xC\n\ - ldrb r2, [r0, 0xC]\n\ - adds r1, r2, r1\n\ - adds r6, r0, 0\n\ - cmp r1, 0\n\ - bge _0814686C\n\ - adds r0, r2, r3\n\ - ldrb r1, [r5, 0x1]\n\ - adds r0, r1\n\ - movs r1, 0\n\ - strb r0, [r5, 0x1]\n\ - strb r1, [r6, 0xC]\n\ - b _08146870\n\ - .align 2, 0\n\ -_08146868: .4byte gBagPocketScrollStates\n\ -_0814686C:\n\ - adds r0, r2, r4\n\ -_0814686E:\n\ - strb r0, [r6, 0xC]\n\ -_08146870:\n\ - ldr r2, _081468AC @ =gScriptItemId\n\ - movs r0, 0x3\n\ - lsls r0, 2\n\ - adds r0, r6\n\ - ldrb r1, [r0, 0x1]\n\ - ldrb r0, [r0]\n\ - adds r1, r0\n\ - ldr r0, _081468B0 @ =gCurrentBagPocketItemSlots\n\ - ldr r0, [r0]\n\ - lsls r1, 2\n\ - adds r1, r0\n\ - ldrh r0, [r1]\n\ - strh r0, [r2]\n\ - ldr r0, _081468B4 @ =gUnknown_0203932C\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - ldr r1, _081468B8 @ =gSprites\n\ - adds r0, r1\n\ - bl DestroySprite\n\ - bl sub_81466A0\n\ - bl sub_80A7DD4\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_081468AC: .4byte gScriptItemId\n\ -_081468B0: .4byte gCurrentBagPocketItemSlots\n\ -_081468B4: .4byte gUnknown_0203932C\n\ -_081468B8: .4byte gSprites\n\ - .syntax divided\n"); + u8 berryPocket = 3; + + if (berry > 0) + { + if (gBagPocketScrollStates[berryPocket].cursorPos + berry > 7) + { + gBagPocketScrollStates[berryPocket].scrollTop += gBagPocketScrollStates[berryPocket].cursorPos - 7 + berry; + gBagPocketScrollStates[berryPocket].cursorPos = 7; + } + else + { + gBagPocketScrollStates[berryPocket].cursorPos += berry; + } + } + else + { + if (gBagPocketScrollStates[berryPocket].cursorPos + berry < 0) + { + gBagPocketScrollStates[berryPocket].scrollTop += gBagPocketScrollStates[berryPocket].cursorPos + berry; + gBagPocketScrollStates[berryPocket].cursorPos = 0; + } + else + { + gBagPocketScrollStates[berryPocket].cursorPos += berry; + } + } + gScriptItemId = gCurrentBagPocketItemSlots[gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos].itemId; + DestroySprite(&gSprites[gUnknown_0203932C]); + sub_81466A0(); + sub_80A7DD4(); } static void sub_81468BC(void) diff --git a/src/item_menu.c b/src/item_menu.c index 350ba3db4..fdc47ad67 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -56,14 +56,6 @@ extern void sub_804E990(u8); extern void sub_802E424(u8); extern void sub_8064E2C(void); -struct PocketScrollState -{ - u8 cursorPos; - u8 scrollTop; - u8 numSlots; - u8 cursorMax; -}; - struct UnknownStruct2 { u8 unk0; -- cgit v1.2.3 From bba94787f73662b21703d105603da6d1f40a442c Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 31 Jul 2017 16:11:41 +0200 Subject: battle message decompiled --- src/battle_4.c | 9 - src/battle_message.c | 1064 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1064 insertions(+), 9 deletions(-) create mode 100644 src/battle_message.c (limited to 'src') diff --git a/src/battle_4.c b/src/battle_4.c index 31d6c76dc..6dd5d7df6 100644 --- a/src/battle_4.c +++ b/src/battle_4.c @@ -246,15 +246,6 @@ extern u8 gUnknown_081D95DB[]; //bs payday money give #define CMP_COMMON_BITS 0x4 #define CMP_NO_COMMON_BITS 0x5 -#define BATTLE_WON 0x1 -#define BATTLE_LOST 0x2 -#define BATTLE_DREW 0x3 -#define BATTLE_RAN 0x4 -#define BATTLE_PLAYER_TELEPORTED 0x5 -#define BATTLE_POKE_FLED 0x6 -#define BATTLE_CAUGHT 0x7 -#define BATTLE_OPPONENT_TELEPORTED 0xA - #define uBYTE0_16(value)(( (u8) (((u16)(value) & (0x000000FF)) >> 0x00))) #define uBYTE1_16(value)(( (u8) (((u16)(value) & (0x0000FF00)) >> 0x08))) diff --git a/src/battle_message.c b/src/battle_message.c new file mode 100644 index 000000000..d4b8f86c6 --- /dev/null +++ b/src/battle_message.c @@ -0,0 +1,1064 @@ +#include "global.h" +#include "battle_message.h" +#include "battle.h" +#include "item.h" +#include "items.h" +#include "pokemon.h" +#include "data2.h" +#include "text.h" +#include "string_util.h" +#include "link.h" +#include "battle_setup.h" +#include "battle_tower.h" +#include "flags.h" + +#define BATTLESTRING_TO_SUB 12 +#define BATTLESTRINGS_NO 351 +#define BATTLESTRINGS_MAX BATTLESTRINGS_NO + BATTLESTRING_TO_SUB + +extern const u8* const gBattleStringsTable[BATTLESTRINGS_NO]; + +extern u16 gLastUsedItem; +extern u8 gLastUsedAbility; +extern u8 gActiveBank; +extern u8 gBankAttacker; +extern u8 gBankTarget; +extern u8 gStringBank; +extern u8 gEffectBank; +extern u8 gAbilitiesPerBank[4]; +extern u8 gBattleTextBuff1[]; +extern u8 gBattleTextBuff2[]; +extern u8 gBattleTextBuff3[]; +extern u8 gStringVar1[]; +extern u8 gStringVar2[]; +extern u8 gStringVar3[]; +extern u16 gBattleTypeFlags; +extern u16 gTrainerBattleOpponent; +extern u8 gDisplayedStringBattle[]; +extern u8 gStringVar1[]; +extern u8 gStringVar2[]; +extern u8 gStringVar3[]; +extern u16 gBattlePartyID[4]; +extern struct BattleEnigmaBerry gEnigmaBerries[4]; +extern u8 gBattleBufferA[4][0x200]; + +extern const u8 gUnknown_084005DB[]; +extern const u8 gUnknown_084005C7[]; +extern const u8 gUnknown_084005AA[]; +extern const u8 gUnknown_08400568[]; +extern const u8 gUnknown_08400590[]; +extern const u8 gUnknown_0840057B[]; +extern const u8 gUnknown_08400555[]; +extern const u8 gUnknown_084006F1[]; +extern const u8 gUnknown_084006A4[]; +extern const u8 gUnknown_0840069C[]; +extern const u8 gUnknown_0840065C[]; +extern const u8 gUnknown_08400645[]; +extern const u8 gUnknown_08400608[]; +extern const u8 gUnknown_08400635[]; +extern const u8 gUnknown_084005F5[]; +extern const u8 gUnknown_08400709[]; +extern const u8 gUnknown_08400727[]; +extern const u8 gUnknown_08400736[]; +extern const u8 gUnknown_08400749[]; +extern const u8 gUnknown_08400781[]; +extern const u8 gUnknown_08400771[]; +extern const u8 gUnknown_0840075E[]; +extern const u8 gUnknown_084006B3[]; +extern const u8 gUnknown_084006BB[]; +extern const u8 gUnknown_084006C6[]; +extern const u8 gUnknown_084006D5[]; +extern const u8 gUnknown_0840068C[]; +extern const u8 gUnknown_0840067C[]; +extern const u8 gUnknown_08400622[]; +extern const u8 gUnknown_084007BD[]; +extern const u8 gUnknown_083FFEFC[]; +extern const u8 gUnknown_083FFFF7[]; +extern const u8 gUnknown_083FFFEA[]; +extern const u8 gUnknown_083FFF6A[]; +extern const u8 gUnknown_083FFF99[]; +extern const u8 gUnknown_083FFFCB[]; +extern const u8 gUnknown_083FFF56[]; +extern const u8 gUnknown_083FFF81[]; +extern const u8 gUnknown_083FFFB3[]; +extern const u8 gUnknown_08400A78[]; +extern const u8 gUnknown_08400A85[]; +extern const u8 gUnknown_08400797[]; +extern const u8 gUnknown_08400791[]; +extern const u8 gUnknown_084007B7[]; +extern const u8 gUnknown_084007B2[]; +extern const u8 gUnknown_0840079C[]; +extern const u8 gUnknown_084007A1[]; +extern const u8 gUnknown_084007A7[]; +extern const u8 gUnknown_084007AC[]; +extern const u8 gUnknown_084009ED[]; +extern const u8 gUnknown_084009F7[]; +extern const u8 gUnknown_084007C8[]; +extern const u8 gUnknown_084007CA[]; +extern const u8 gUnknown_084007CC[]; +extern const u8 gUnknown_084007CE[]; +extern const u8 gUnknown_084007D0[]; +extern const u8 gUnknown_08400E5E[]; +extern const u8 gUnknown_08400E62[]; + +extern const u16 gUnknown_084016BC[]; // a table of moves + +extern const u8* const gUnknown_08401674[]; // table of pointers to 'a -TYPE' strings +extern const u8* const gUnknown_08400F58[]; // table of pointers to stat strings +extern const u8* const gUnknown_08400F78[]; // table of pointers to flavour strings + +struct StatusFlagString +{ + u8* flag; + u8* ptr; +}; + +extern const struct StatusFlagString gUnknown_081FA6D4[7]; // status flag/text +extern const u8 gUnknown_084017A8[8]; // empty flags + +struct StringInfo +{ + u16 currentMove; + u16 lastMove; + u16 lastItem; + u8 lastAbility; + u8 scrActive; + u8 unk1605E; + u8 hpScale; + u8 StringBank; + u8 moveType; + u8 abilities[4]; + u8 textBuffs[3][0x10]; +}; + +extern struct StringInfo* gSelectedOrderFromParty; +#define gStringInfo gSelectedOrderFromParty + +static void sub_8121D1C(u8* textBuff); +static void sub_8121D74(u8* textBuff); +static void StrCpyDecodeBattleTextBuff(u8* src, u8* dst); + +u8 GetBankSide(u8 bank); +s32 sub_803FC34(u16); +void get_trainer_name(u8* dst); +u8 get_trainer_class_name_index(void); +u8 sub_8135FD8(void); +u8 GetMultiplayerId(void); +u8 GetBankByPlayerAI(u8 ID); +u8 GetBankSide(u8 bank); +u8 GetBankIdentity(u8 bank); + +void BufferStringBattle(u16 stringID) +{ + int i; + const u8* stringPtr = NULL; + + gStringInfo = (struct StringInfo*)(&gBattleBufferA[gActiveBank][4]); + gLastUsedItem = gStringInfo->lastItem; + gLastUsedAbility = gStringInfo->lastAbility; + BATTLE_STRUCT->scriptingActive = gStringInfo->scrActive; + BATTLE_STRUCT->unk1605E = gStringInfo->unk1605E; + BATTLE_STRUCT->hpScale = gStringInfo->hpScale; + gStringBank = gStringInfo->StringBank; + BATTLE_STRUCT->stringMoveType = gStringInfo->moveType; + for (i = 0; i < 4; i++) + { + gAbilitiesPerBank[i] = gStringInfo->abilities[i]; + } + for (i = 0; i < 0x10; i++) + { + gBattleTextBuff1[i] = gStringInfo->textBuffs[0][i]; + gBattleTextBuff2[i] = gStringInfo->textBuffs[1][i]; + gBattleTextBuff3[i] = gStringInfo->textBuffs[2][i]; + } + switch (stringID) + { + case 0: // first battle msg + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + { + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + stringPtr = gUnknown_084005DB; + else + stringPtr = gUnknown_084005C7; + } + else + stringPtr = gUnknown_084005AA; + } + else + { + if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY) + stringPtr = gUnknown_08400568; + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) // interesting, looks like they had something planned for wild double battles + stringPtr = gUnknown_08400590; + else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL) + stringPtr = gUnknown_0840057B; + else + stringPtr = gUnknown_08400555; + } + break; + case 1: // poke first send-out + if (GetBankSide(gActiveBank) == 0) + { + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + stringPtr = gUnknown_084006F1; + else + stringPtr = gUnknown_084006A4; + } + else + stringPtr = gUnknown_0840069C; + } + else + { + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + stringPtr = gUnknown_0840065C; + else if (gBattleTypeFlags & BATTLE_TYPE_LINK) + stringPtr = gUnknown_08400645; + else + stringPtr = gUnknown_08400608; + } + else if (gBattleTypeFlags & BATTLE_TYPE_LINK) + stringPtr = gUnknown_08400635; + else + stringPtr = gUnknown_084005F5; + } + break; + case 2: // sending poke to ball msg + if (GetBankSide(gActiveBank) == 0) + { + if (BATTLE_STRUCT->hpScale == 0) + stringPtr = gUnknown_08400709; + else if (BATTLE_STRUCT->hpScale == 1 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + stringPtr = gUnknown_08400727; + else if (BATTLE_STRUCT->hpScale == 2) + stringPtr = gUnknown_08400736; + else + stringPtr = gUnknown_08400749; + } + else + { + if (gTrainerBattleOpponent == 0x800) + { + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + stringPtr = gUnknown_08400781; + else + stringPtr = gUnknown_08400771; + } + else + stringPtr = gUnknown_0840075E; + } + break; + case 3: // switch-in msg + if (GetBankSide(BATTLE_STRUCT->scriptingActive) == 0) + { + if (BATTLE_STRUCT->hpScale == 0 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + stringPtr = gUnknown_084006B3; + else if (BATTLE_STRUCT->hpScale == 1) + stringPtr = gUnknown_084006BB; + else if (BATTLE_STRUCT->hpScale == 2) + stringPtr = gUnknown_084006C6; + else + stringPtr = gUnknown_084006D5; + } + else + { + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + stringPtr = gUnknown_0840068C; + else + stringPtr = gUnknown_0840067C; + } + else + stringPtr = gUnknown_08400622; + } + break; + case 4: // pokemon used a move msg + sub_8121D1C(gBattleTextBuff1); + if (gStringInfo->currentMove > 0x162) + StringCopy(gBattleTextBuff2, gUnknown_08401674[BATTLE_STRUCT->stringMoveType]); + else + StringCopy(gBattleTextBuff2, gMoveNames[gStringInfo->currentMove]); + sub_8121D74(gBattleTextBuff2); + stringPtr = gUnknown_084007BD; + break; + case 5: // battle end + if (gBattleTextBuff1[0] & 0x80) + { + gBattleTextBuff1[0] &= ~(0x80); + if (GetBankSide(gActiveBank) == 1 && gBattleTextBuff1[0] != 3) + gBattleTextBuff1[0] ^= 3; + if (gBattleTextBuff1[0] == BATTLE_LOST || gBattleTextBuff1[0] == BATTLE_DREW) + stringPtr = gUnknown_083FFEFC; + else + { + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + stringPtr = gUnknown_083FFFF7; + else + stringPtr = gUnknown_083FFFEA; + } + } + else + { + if (GetBankSide(gActiveBank) == 1 && gBattleTextBuff1[0] != 3) + gBattleTextBuff1[0] ^= 3; + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + switch (gBattleTextBuff1[0]) + { + case BATTLE_WON: + stringPtr = gUnknown_083FFF6A; + break; + case BATTLE_LOST: + stringPtr = gUnknown_083FFF99; + break; + case BATTLE_DREW: + stringPtr = gUnknown_083FFFCB; + break; + } + } + else + { + switch (gBattleTextBuff1[0]) + { + case BATTLE_WON: + stringPtr = gUnknown_083FFF56; + break; + case BATTLE_LOST: + stringPtr = gUnknown_083FFF81; + break; + case BATTLE_DREW: + stringPtr = gUnknown_083FFFB3; + break; + } + } + } + break; + default: // load a string from the table + if (stringID >= BATTLESTRINGS_MAX) + { + gDisplayedStringBattle[0] = EOS; + return; + } + else + stringPtr = gBattleStringsTable[stringID - BATTLESTRING_TO_SUB]; + break; + } + StrCpyDecodeToDisplayedStringBattle(stringPtr); +} + +u32 StrCpyDecodeToDisplayedStringBattle(const u8* src) +{ + StrCpyDecodeBattle(src, gDisplayedStringBattle); +} + +static const u8* AppendStatusString(u8* src) +{ + u32 i; + u8 status[8]; + u32 flag1, flag2; + u8* statusPtr; + + memcpy(status, gUnknown_084017A8, 8); + + statusPtr = status; + for (i = 0; i < sizeof(struct StatusFlagString); i++) + { + if (*src == EOS) + break; + *statusPtr = *src; + src++; + statusPtr++; + } + flag1 = *(u32*)(&status[0]); + flag2 = *(u32*)(&status[4]); + for (i = 0; i < 7; i++) + { + if (flag1 == *(u32*)(&gUnknown_081FA6D4[i].flag[0]) && flag2 == *(u32*)(&gUnknown_081FA6D4[i].flag[4])) + return gUnknown_081FA6D4[i].ptr; + } + return NULL; +} + +u32 StrCpyDecodeBattle(const u8* src, u8* dst) +{ + u32 dstID = 0; // if they used dstID, why not use srcID as well? + const u8* toCpy = NULL; + u8 text[12]; + u8 multiplayerID = GetMultiplayerId(); + + while (*src != EOS) + { + if (*src == 0xFD) + { + src++; + switch (*src) + { + case 0: + if (gBattleTextBuff1[0] == 0xFD) + { + StrCpyDecodeBattleTextBuff(gBattleTextBuff1, gStringVar1); + toCpy = gStringVar1; + } + else + { + toCpy = AppendStatusString(gBattleTextBuff1); + if (toCpy == 0) + toCpy = gBattleTextBuff1; + } + break; + case 1: + if (gBattleTextBuff2[0] == 0xFD) + { + StrCpyDecodeBattleTextBuff(gBattleTextBuff2, gStringVar2); + toCpy = gStringVar2; + } + else + toCpy = gBattleTextBuff2; + break; + case 42: + if (gBattleTextBuff3[0] == 0xFD) + { + StrCpyDecodeBattleTextBuff(gBattleTextBuff3, gStringVar3); + toCpy = gStringVar3; + } + else + toCpy = gBattleTextBuff3; + break; + case 2: // first player poke name + GetMonData(&gPlayerParty[gBattlePartyID[GetBankByPlayerAI(0)]], MON_DATA_NICKNAME, text); + StringGetEnd10(text); + toCpy = text; + break; + case 3: // first enemy poke name + GetMonData(&gEnemyParty[gBattlePartyID[GetBankByPlayerAI(1)]], MON_DATA_NICKNAME, text); + StringGetEnd10(text); + toCpy = text; + break; + case 4: // second player poke name + GetMonData(&gPlayerParty[gBattlePartyID[GetBankByPlayerAI(2)]], MON_DATA_NICKNAME, text); + StringGetEnd10(text); + toCpy = text; + break; + case 5: // second enemy poke name + GetMonData(&gEnemyParty[gBattlePartyID[GetBankByPlayerAI(3)]], MON_DATA_NICKNAME, text); + StringGetEnd10(text); + toCpy = text; + break; + case 6: // link first player poke name + GetMonData(&gPlayerParty[gBattlePartyID[gLinkPlayers[multiplayerID].lp_field_18]], MON_DATA_NICKNAME, text); + StringGetEnd10(text); + toCpy = text; + break; + case 7: // link first opponent poke name + GetMonData(&gEnemyParty[gBattlePartyID[gLinkPlayers[multiplayerID].lp_field_18 ^ 1]], MON_DATA_NICKNAME, text); + StringGetEnd10(text); + toCpy = text; + break; + case 8: // link second player poke name + GetMonData(&gPlayerParty[gBattlePartyID[gLinkPlayers[multiplayerID].lp_field_18 ^ 2]], MON_DATA_NICKNAME, text); + StringGetEnd10(text); + toCpy = text; + break; + case 9: // link second opponent poke name + GetMonData(&gEnemyParty[gBattlePartyID[gLinkPlayers[multiplayerID].lp_field_18 ^ 3]], MON_DATA_NICKNAME, text); + StringGetEnd10(text); + toCpy = text; + break; + case 10: // attacker name with prefix, only bank 0/1 + if (GetBankSide(gBankAttacker) != 0) + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + toCpy = gUnknown_08400797; + else + toCpy = gUnknown_08400791; + while (*toCpy != EOS) + { + dst[dstID] = *toCpy; + dstID++; + toCpy++; + } + GetMonData(&gEnemyParty[gBattlePartyID[GetBankByPlayerAI(GetBankIdentity(gBankAttacker) & 1)]], MON_DATA_NICKNAME, text); + } + else + GetMonData(&gPlayerParty[gBattlePartyID[GetBankByPlayerAI(GetBankIdentity(gBankAttacker) & 1)]], MON_DATA_NICKNAME, text); + + StringGetEnd10(text); + toCpy = text; + break; + case 11: // attacker partner name, only bank 0/1 + if (GetBankSide(gBankAttacker) == 0) + GetMonData(&gPlayerParty[gBattlePartyID[GetBankByPlayerAI(GetBankIdentity(gBankAttacker) & 1) + 2]], MON_DATA_NICKNAME, text); + else + GetMonData(&gEnemyParty[gBattlePartyID[GetBankByPlayerAI(GetBankIdentity(gBankAttacker) & 1) + 2]], MON_DATA_NICKNAME, text); + + StringGetEnd10(text); + toCpy = text; + break; + case 12: // attacker name with prefix + if (GetBankSide(gBankAttacker) != 0) + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + toCpy = gUnknown_08400797; + else + toCpy = gUnknown_08400791; + while (*toCpy != EOS) + { + dst[dstID] = *toCpy; + dstID++; + toCpy++; + } + GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker]], MON_DATA_NICKNAME, text); + } + else + GetMonData(&gPlayerParty[gBattlePartyID[gBankAttacker]], MON_DATA_NICKNAME, text); + + StringGetEnd10(text); + toCpy = text; + break; + case 13: // target name with prefix + if (GetBankSide(gBankTarget) != 0) + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + toCpy = gUnknown_08400797; + else + toCpy = gUnknown_08400791; + while (*toCpy != EOS) + { + dst[dstID] = *toCpy; + dstID++; + toCpy++; + } + GetMonData(&gEnemyParty[gBattlePartyID[gBankTarget]], MON_DATA_NICKNAME, text); + } + else + GetMonData(&gPlayerParty[gBattlePartyID[gBankTarget]], MON_DATA_NICKNAME, text); + + StringGetEnd10(text); + toCpy = text; + break; + case 14: // effect bank name with prefix + if (GetBankSide(gEffectBank) != 0) + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + toCpy = gUnknown_08400797; + else + toCpy = gUnknown_08400791; + while (*toCpy != EOS) + { + dst[dstID] = *toCpy; + dstID++; + toCpy++; + } + GetMonData(&gEnemyParty[gBattlePartyID[gEffectBank]], MON_DATA_NICKNAME, text); + } + else + GetMonData(&gPlayerParty[gBattlePartyID[gEffectBank]], MON_DATA_NICKNAME, text); + + StringGetEnd10(text); + toCpy = text; + break; + case 15: // active bank name with prefix + if (GetBankSide(gActiveBank) != 0) + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + toCpy = gUnknown_08400797; + else + toCpy = gUnknown_08400791; + while (*toCpy != EOS) + { + dst[dstID] = *toCpy; + dstID++; + toCpy++; + } + GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_NICKNAME, text); + } + else + GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_NICKNAME, text); + + StringGetEnd10(text); + toCpy = text; + break; + case 16: // scripting active bank name with prefix + if (GetBankSide(BATTLE_STRUCT->scriptingActive) != 0) + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + toCpy = gUnknown_08400797; + else + toCpy = gUnknown_08400791; + while (*toCpy != EOS) + { + dst[dstID] = *toCpy; + dstID++; + toCpy++; + } + GetMonData(&gEnemyParty[gBattlePartyID[BATTLE_STRUCT->scriptingActive]], MON_DATA_NICKNAME, text); + } + else + GetMonData(&gPlayerParty[gBattlePartyID[BATTLE_STRUCT->scriptingActive]], MON_DATA_NICKNAME, text); + + StringGetEnd10(text); + toCpy = text; + break; + case 17: // current move name + if (gStringInfo->currentMove > 0x162) + toCpy = (void*) &gUnknown_08401674[BATTLE_STRUCT->stringMoveType]; + else + toCpy = gMoveNames[gStringInfo->currentMove]; + break; + case 18: // last used move name + if (gStringInfo->lastMove > 0x162) + toCpy = (void*) &gUnknown_08401674[BATTLE_STRUCT->stringMoveType]; + else + toCpy = gMoveNames[gStringInfo->lastMove]; + break; + case 19: // last used item + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + if (gLastUsedItem == ITEM_ENIGMA_BERRY) + { + if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 == gStringBank) + { + StringCopy(text, gEnigmaBerries[gStringBank].name); + StringAppend(text, gUnknown_08400A85); + toCpy = text; + } + else + toCpy = gUnknown_08400A78; + } + else + { + CopyItemName(gLastUsedItem, text); + toCpy = text; + } + } + else + { + CopyItemName(gLastUsedItem, text); + toCpy = text; + } + break; + case 20: // last used ability + toCpy = gAbilityNames[gLastUsedAbility]; + break; + case 21: // attacker ability + toCpy = gAbilityNames[gAbilitiesPerBank[gBankAttacker]]; + break; + case 22: // target ability + toCpy = gAbilityNames[gAbilitiesPerBank[gBankTarget]]; + break; + case 23: // scripting active ability + toCpy = gAbilityNames[gAbilitiesPerBank[BATTLE_STRUCT->scriptingActive]]; + break; + case 24: // effect bank ability + toCpy = gAbilityNames[gAbilitiesPerBank[gEffectBank]]; + break; + case 25: // trainer class name + if (gTrainerBattleOpponent == 0x400) + toCpy = gTrainerClassNames[GetSecretBaseTrainerNameIndex()]; + else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) + toCpy = gTrainerClassNames[get_trainer_class_name_index()]; + else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) + toCpy = gTrainerClassNames[sub_8135FD8()]; + else + toCpy = gTrainerClassNames[gTrainers[gTrainerBattleOpponent].trainerClass]; + break; + case 26: // trainer name + if (gTrainerBattleOpponent == 0x400) + { + memset(text, 0xFF, 8); + memcpy(text, &ewram[0x17002], 7); + toCpy = text; + } + else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) + { + get_trainer_name(text); + toCpy = text; + } + else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) + { + sub_8135FF4(text); + toCpy = text; + } + else + toCpy = gTrainers[gTrainerBattleOpponent].trainerName; + break; + case 27: // link player name? + toCpy = gLinkPlayers[multiplayerID].name; + break; + case 28: // link partner name? + toCpy = gLinkPlayers[sub_803FC34(2 ^ gLinkPlayers[multiplayerID].lp_field_18)].name; + break; + case 29: // link opponent 1 name? + toCpy = gLinkPlayers[sub_803FC34(1 ^ gLinkPlayers[multiplayerID].lp_field_18)].name; + break; + case 30: // link opponent 2 name? + toCpy = gLinkPlayers[sub_803FC34(3 ^ gLinkPlayers[multiplayerID].lp_field_18)].name; + break; + case 31: // link scripting active name + toCpy = gLinkPlayers[sub_803FC34(BATTLE_STRUCT->scriptingActive)].name; + break; + case 32: // player name + toCpy = gSaveBlock2.playerName; + break; + case 33: // ? + toCpy = sub_8082830(); + break; + case 34: // ? + if (GetBankSide(BATTLE_STRUCT->scriptingActive) != 0) + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + toCpy = gUnknown_08400797; + else + toCpy = gUnknown_08400791; + while (*toCpy != EOS) + { + dst[dstID] = *toCpy; + dstID++; + toCpy++; + } + GetMonData(&gEnemyParty[BATTLE_STRUCT->unk1605E], MON_DATA_NICKNAME, text); + } + else + GetMonData(&gPlayerParty[BATTLE_STRUCT->unk1605E], MON_DATA_NICKNAME, text); + + StringGetEnd10(text); + toCpy = text; + break; + case 35: // lanette pc + if (FlagGet(SYS_PC_LANETTE)) + toCpy = gUnknown_084009F7; + else + toCpy = gUnknown_084009ED; + break; + case 38: + if (GetBankSide(gBankAttacker) == 0) + toCpy = gUnknown_084007AC; + else + toCpy = gUnknown_084007A7; + break; + case 39: + if (GetBankSide(gBankTarget) == 0) + toCpy = gUnknown_084007AC; + else + toCpy = gUnknown_084007A7; + break; + case 36: + if (GetBankSide(gBankAttacker) == 0) + toCpy = gUnknown_084007A1; + else + toCpy = gUnknown_0840079C; + break; + case 37: + if (GetBankSide(gBankTarget) == 0) + toCpy = gUnknown_084007A1; + else + toCpy = gUnknown_0840079C; + break; + case 40: + if (GetBankSide(gBankAttacker) == 0) + toCpy = gUnknown_084007B7; + else + toCpy = gUnknown_084007B2; + break; + case 41: + if (GetBankSide(gBankTarget) == 0) + toCpy = gUnknown_084007B7; + else + toCpy = gUnknown_084007B2; + break; + } + //if (toCpy != NULL) really GF, why did you forgot about this + while (*toCpy != EOS) + { + dst[dstID] = *toCpy; + dstID++; + toCpy++; + } + if (*src == 33) + { + dst[dstID] = 0xFC; + dstID++; + dst[dstID] = 9; + dstID++; + } + } + else + { + dst[dstID] = *src; + dstID++; + } + src++; + } + dst[dstID] = *src; + dstID++; + return dstID; +} + +#define ByteRead16(ptr) ((ptr)[0] | ((ptr)[1] << 8)) +#define ByteRead32(ptr) ((ptr)[0] | (ptr)[1] << 8 | (ptr)[2] << 16 | (ptr)[3] << 24) + +static void StrCpyDecodeBattleTextBuff(u8* src, u8* dst) +{ + u32 srcID = 1; + u32 value = 0; + u8 text[12]; + + *dst = EOS; + while (src[srcID] != EOS) + { + switch (src[srcID]) + { + case 0: // battlescript ptr + { + u16 BS_ID = ByteRead16(&src[srcID + 1]); + StringAppend(dst, gBattleStringsTable[BS_ID - BATTLESTRING_TO_SUB]); + srcID += 3; + } + break; + case 1: // int to string + switch (src[srcID + 1]) + { + case 1: + value = src[srcID + 3]; + break; + case 2: + value = ByteRead16(&src[srcID + 3]); + break; + case 4: + value = ByteRead32(&src[srcID + 3]); + break; + } + ConvertIntToDecimalStringN(dst, value, 0, src[srcID + 2]); + srcID += src[srcID + 1] + 3; + break; + case 2: // move name + StringAppend(dst, gMoveNames[ByteRead16(&src[srcID + 1])]); + srcID += 3; + break; + case 3: // type name + StringAppend(dst, gTypeNames[src[srcID + 1]]); + srcID += 2; + break; + case 4: // poke nick with prefix + if (GetBankSide(src[srcID + 1]) == 0) + { + GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, text); + } + else + { + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + StringAppend(dst, gUnknown_08400797); + else + StringAppend(dst, gUnknown_08400791); + GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, text); + } + StringGetEnd10(text); + StringAppend(dst, text); + srcID += 3; + break; + case 5: // stats + StringAppend(dst, gUnknown_08400F58[src[srcID + 1]]); + srcID += 2; + break; + case 6: // species name + GetSpeciesName(dst, ByteRead16(&src[srcID + 1])); + srcID += 3; + break; + case 7: // poke nick without prefix + if (GetBankSide(src[srcID + 1]) == 0) + GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, dst); + else + GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, dst); + StringGetEnd10(dst); + srcID += 3; + break; + case 8: // flavour table + StringAppend(dst, gUnknown_08400F78[src[srcID + 1]]); + srcID += 2; + break; + case 9: // ability names + StringAppend(dst, gAbilityNames[src[srcID + 1]]); + srcID += 2; + break; + case 10: // item name + { + u16 item = ByteRead16(&src[srcID + 1]); + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + if (item == ITEM_ENIGMA_BERRY) + { + if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 == gStringBank) + { + StringCopy(dst, gEnigmaBerries[gStringBank].name); + StringAppend(dst, gUnknown_08400A85); + } + else + StringAppend(dst, gUnknown_08400A78); + } + else + CopyItemName(item, dst); + } + else + CopyItemName(item, dst); + srcID += 3; + } + break; + } + } +} + +static void sub_8121D1C(u8* textBuff) +{ + s32 counter = 0; + u32 i = 0; + + while (counter != 4) + { + if (gUnknown_084016BC[i] == 0) + counter++; + if (gUnknown_084016BC[i++] == gStringInfo->currentMove) + break; + } + + if (counter >= 0) + { + if (counter <= 2) + StringCopy(textBuff, gUnknown_08400E5E); // is + else if (counter <= 4) + StringCopy(textBuff, gUnknown_08400E62); // 's + } +} + +#ifdef NONMATCHING + +static void sub_8121D74(u8* dst) +{ + s32 counter = 0; + s32 i; + + while (*dst != EOS) + dst++; + + i = 0; + while (counter != 4) + { + if (gUnknown_084016BC[i] == 0) + counter++; + if (gUnknown_084016BC[i++] == gStringInfo->currentMove) + break; + } + switch (counter) + { + case 0: + StringCopy(dst, gUnknown_084007C8); + break; + case 1: + StringCopy(dst, gUnknown_084007CA); + break; + case 2: + StringCopy(dst, gUnknown_084007CC); + break; + case 3: + StringCopy(dst, gUnknown_084007CE); + break; + case 4: + StringCopy(dst, gUnknown_084007D0); + break; + } +} + +#else +__attribute__((naked)) +static void sub_8121D74(u8* dst) +{ + asm(".syntax unified\n\ + push {r4,r5,lr}\n\ + adds r3, r0, 0\n\ + movs r4, 0\n\ + b _08121D7E\n\ +_08121D7C:\n\ + adds r3, 0x1\n\ +_08121D7E:\n\ + ldrb r0, [r3]\n\ + cmp r0, 0xFF\n\ + bne _08121D7C\n\ + ldr r1, _08121DB4 @ =gUnknown_084016BC\n\ + ldr r5, _08121DB8 @ =gSelectedOrderFromParty\n\ + movs r0, 0\n\ + lsls r0, 1\n\ + adds r2, r0, r1\n\ +_08121D8E:\n\ + cmp r4, 0x4\n\ + beq _08121DA8\n\ + ldrh r1, [r2]\n\ + cmp r1, 0\n\ + bne _08121D9A\n\ + adds r4, 0x1\n\ +_08121D9A:\n\ + ldr r0, [r5]\n\ + adds r2, 0x2\n\ + ldrh r0, [r0]\n\ + cmp r1, r0\n\ + bne _08121D8E\n\ + cmp r4, 0x4\n\ + bhi _08121E04\n\ +_08121DA8:\n\ + lsls r0, r4, 2\n\ + ldr r1, _08121DBC @ =_08121DC0\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_08121DB4: .4byte gUnknown_084016BC\n\ +_08121DB8: .4byte gSelectedOrderFromParty\n\ +_08121DBC: .4byte _08121DC0\n\ + .align 2, 0\n\ +_08121DC0:\n\ + .4byte _08121DD4\n\ + .4byte _08121DDC\n\ + .4byte _08121DE4\n\ + .4byte _08121DEC\n\ + .4byte _08121DFC\n\ +_08121DD4:\n\ + ldr r1, _08121DD8 @ =gUnknown_084007C8\n\ + b _08121DEE\n\ + .align 2, 0\n\ +_08121DD8: .4byte gUnknown_084007C8\n\ +_08121DDC:\n\ + ldr r1, _08121DE0 @ =gUnknown_084007CA\n\ + b _08121DEE\n\ + .align 2, 0\n\ +_08121DE0: .4byte gUnknown_084007CA\n\ +_08121DE4:\n\ + ldr r1, _08121DE8 @ =gUnknown_084007CC\n\ + b _08121DEE\n\ + .align 2, 0\n\ +_08121DE8: .4byte gUnknown_084007CC\n\ +_08121DEC:\n\ + ldr r1, _08121DF8 @ =gUnknown_084007CE\n\ +_08121DEE:\n\ + adds r0, r3, 0\n\ + bl StringCopy\n\ + b _08121E04\n\ + .align 2, 0\n\ +_08121DF8: .4byte gUnknown_084007CE\n\ +_08121DFC:\n\ + ldr r1, _08121E0C @ =gUnknown_084007D0\n\ + adds r0, r3, 0\n\ + bl StringCopy\n\ +_08121E04:\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08121E0C: .4byte gUnknown_084007D0\n\ + .syntax divided"); +} + +#endif // NONMATCHING -- cgit v1.2.3 From d413187fa82e19ceea5ff1b2437891329781a814 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 1 Aug 2017 11:07:23 +0200 Subject: start decompiling egg hatch --- src/egg_hatch.c | 571 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 570 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 32fbe1547..70d206a06 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -1,7 +1,38 @@ #include "global.h" #include "pokemon.h" +#include "items.h" +#include "decompress.h" +#include "data2.h" +#include "task.h" +#include "script.h" +#include "palette.h" +#include "rom4.h" +#include "main.h" +#include "event_data.h" +#include "sound.h" +#include "text.h" +#include "text_window.h" +#include "string_util.h" +#include "strings2.h" +#include "menu.h" +#include "naming_screen.h" +#include "trig.h" -void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) { +extern u8 gStringVar1[]; +extern u8 ewram[]; +extern struct SpriteTemplate gUnknown_02024E8C; + +bool8 GetNationalPokedexFlag(u16 nationalNum, u8 caseID); +u8* GetMonNick(struct Pokemon* mon, u8* dst); +u8 sav1_map_get_name(void); +const struct CompressedSpritePalette* sub_8040990(struct Pokemon* mon); //gets pokemon palette address +void sub_8080990(void); + +void Task_EggHatch(u8 taskID); +void CB2_EggHatch_0(void); + +void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) +{ u16 species; u32 personality, pokerus; u8 i, friendship, language, gameMet, markings; @@ -50,3 +81,541 @@ void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) { *egg = *temp; } + +void AddHatchedMonToParty(u8 id) +{ + u8 isEgg; + u16 pokeNum; + u8 name[12]; + u16 ball; + u16 caughtLvl; + u8 mapNameID; + struct Pokemon* mon = &gPlayerParty[id]; + + CreatedHatchedMon(mon, &gEnemyParty[0]); + isEgg = 0; + SetMonData(mon, MON_DATA_IS_EGG, &isEgg); + + pokeNum = GetMonData(mon, MON_DATA_SPECIES); + GetSpeciesName(name, pokeNum); + SetMonData(mon, MON_DATA_NICKNAME, name); + + pokeNum = SpeciesToNationalPokedexNum(pokeNum); + GetNationalPokedexFlag(pokeNum, 2); + GetNationalPokedexFlag(pokeNum, 3); + + GetMonNick(mon, gStringVar1); + + ball = ITEM_POKE_BALL; + SetMonData(mon, MON_DATA_POKEBALL, &ball); + + caughtLvl = 0; + SetMonData(mon, MON_DATA_MET_LEVEL, &caughtLvl); + + mapNameID = sav1_map_get_name(); + SetMonData(mon, MON_DATA_MET_LOCATION, &mapNameID); + + MonRestorePP(mon); + CalculateMonStats(mon); +} + +void ScriptHatchMon(void) +{ + AddHatchedMonToParty(gSpecialVar_0x8004); +} + +__attribute__((naked)) +bool8 sub_8042ABC(void* a, u8 b) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + sub sp, 0x20\n\ + adds r5, r0, 0\n\ + lsls r4, r1, 24\n\ + lsrs r4, 24\n\ + lsls r0, r4, 2\n\ + adds r0, r4\n\ + lsls r0, 4\n\ + adds r0, r5, r0\n\ + mov r1, sp\n\ + bl GetBoxMonNick\n\ + lsls r0, r4, 3\n\ + subs r0, r4\n\ + lsls r1, r0, 3\n\ + adds r0, r5, r1\n\ + adds r0, 0xC0\n\ + ldrh r0, [r0]\n\ + cmp r0, 0\n\ + beq _08042B40\n\ + adds r0, r1, 0\n\ + adds r0, 0xA0\n\ + adds r5, r0\n\ + adds r6, r5, 0\n\ + adds r6, 0x2C\n\ + mov r0, sp\n\ + adds r1, r6, 0\n\ + bl StringCompareWithoutExtCtrlCodes\n\ + cmp r0, 0\n\ + bne _08042B08\n\ + ldr r0, _08042B30 @ =gSaveBlock2\n\ + adds r1, r5, 0\n\ + adds r1, 0x24\n\ + bl StringCompareWithoutExtCtrlCodes\n\ + cmp r0, 0\n\ + beq _08042B40\n\ +_08042B08:\n\ + ldr r0, _08042B34 @ =gStringVar1\n\ + mov r1, sp\n\ + bl StringCopy\n\ + ldr r4, _08042B38 @ =gStringVar2\n\ + adds r1, r5, 0\n\ + adds r1, 0x24\n\ + adds r0, r4, 0\n\ + bl StringCopy\n\ + ldr r0, _08042B3C @ =gStringVar3\n\ + adds r1, r6, 0\n\ + bl StringCopy\n\ + adds r0, r4, 0\n\ + bl SanitizeNameString\n\ + movs r0, 0x1\n\ + b _08042B42\n\ + .align 2, 0\n\ +_08042B30: .4byte gSaveBlock2\n\ +_08042B34: .4byte gStringVar1\n\ +_08042B38: .4byte gStringVar2\n\ +_08042B3C: .4byte gStringVar3\n\ +_08042B40:\n\ + movs r0, 0\n\ +_08042B42:\n\ + add sp, 0x20\n\ + pop {r4-r6}\n\ + pop {r1}\n\ + bx r1\n\ + .syntax divided"); +} + +bool8 sub_8042B4C(void) +{ + return sub_8042ABC(&gSaveBlock1.daycareData, gSpecialVar_0x8004); +} + +u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID) +{ + u8 r5 = 0; + u8 spriteID = 0; + struct Pokemon* mon = NULL; + + if (a0 == 0) + { + mon = &gPlayerParty[pokeID]; + r5 = 1; + } + if (a0 == 1) + { + mon = &gPlayerParty[pokeID]; + r5 = 3; + } + switch (switchID) + { + case 0: + { + u16 species = GetMonData(mon, MON_DATA_SPECIES); + u32 pid = GetMonData(mon, MON_DATA_PERSONALITY); + HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset,(u32)(&ewram[0]), gUnknown_081FAF4C[2 * a0 + 1], species, pid); + LoadCompressedObjectPalette(sub_8040990(mon)); + } + break; + case 1: + GetMonSpriteTemplate_803C56C(sub_8040990(mon)->tag, r5); + spriteID = CreateSprite(&gUnknown_02024E8C, 120, 70, 6); + gSprites[spriteID].invisible = 1; + gSprites[spriteID].callback = SpriteCallbackDummy; + break; + } + return spriteID; +} + +void VBlankCB_EggHatch(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void EggHatch(void) +{ + ScriptContext2_Enable(); + CreateTask(Task_EggHatch, 10); + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); +} + +void Task_EggHatch(u8 taskID) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(CB2_EggHatch_0); + gFieldCallback = sub_8080990; + DestroyTask(taskID); + } +} + +void CB2_EggHatch_1(void); + +struct Struct_2018000 +{ + u8 eggSpriteID; + u8 pokeSpriteID; + u8 field_2; + u8 field_3; + u8 eggPartyID; + u8 field_5; + u8 field_6; + u8 field_7; + struct Window window; + u8 field_38; + u8 field_39; + u8 field_3A; +}; + +extern struct Struct_2018000* gUnknown_0300481C; +extern const u32 gUnknown_08D00000[]; +extern const u32 gUnknown_08D00524[]; +extern const u32 gUnknown_0820CA98[]; +extern const u32 gUnknown_0820F798[]; +extern const u16 gUnknown_08D004E0[]; //palette + +extern const u16 gUnknown_0820C9F8[]; //palette + +extern const struct SpriteSheet gUnknown_0820A3B0; +extern const struct SpriteSheet gUnknown_0820A3B8; +extern const struct SpritePalette gUnknown_0820A3C0; + +extern const struct SpriteTemplate gSpriteTemplate_820A3C8; + +void CB2_EggHatch_0(void) +{ + switch (gMain.state) + { + case 0: + REG_DISPCNT = 0; + gUnknown_0300481C = (struct Struct_2018000*)(&ewram[0x18000]); + gUnknown_0300481C->eggPartyID = gSpecialVar_0x8004; + gUnknown_0300481C->field_3A = 0; + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + SetVBlankCallback(VBlankCB_EggHatch); + gMain.state++; + gSpecialVar_0x8005 = GetCurrentMapMusic(); + break; + case 1: + SetUpWindowConfig(&gWindowConfig_81E6F84); + InitWindowFromConfig(&gUnknown_0300481C->window, &gWindowConfig_81E6F84); + gUnknown_0300481C->field_38 = SetTextWindowBaseTileNum(20); + LoadTextWindowGraphics(&gUnknown_0300481C->window); + gMain.state++; + break; + case 2: + LZDecompressVram(&gUnknown_08D00000, (void*)(VRAM)); + CpuSet(&gUnknown_08D00524, &ewram[0], 0x800); + DmaCopy16(3, &ewram[0], (void*)(VRAM + 0x2800), 0x500); + LoadCompressedPalette(&gUnknown_08D004E0, 0, 0x20); + gMain.state++; + break; + case 3: + LoadSpriteSheet(&gUnknown_0820A3B0); + LoadSpriteSheet(&gUnknown_0820A3B8); + LoadSpritePalette(&gUnknown_0820A3C0); + gMain.state++; + break; + case 4: + gUnknown_0300481C->eggSpriteID = CreateSprite(&gSpriteTemplate_820A3C8, 0x78, 0x4B, 5); + AddHatchedMonToParty(gUnknown_0300481C->eggPartyID); + gMain.state++; + break; + case 5: + EggHatchCreateMonSprite(0, 0, gUnknown_0300481C->eggPartyID); + gMain.state++; + break; + case 6: + gUnknown_0300481C->pokeSpriteID = EggHatchCreateMonSprite(0, 1, gUnknown_0300481C->eggPartyID); + gMain.state++; + break; + case 7: + { + u32 offsetRead, offsetWrite; + u32 offsetRead2, offsetWrite2; + u32 size; + + REG_BG2CNT = 0x4C06; + LoadPalette(&gUnknown_0820C9F8, 0x10, 0xA0); + + offsetRead = (u32)(&gUnknown_0820CA98); + offsetWrite = (VRAM + 0x4000); + size = 0x1300; + while (TRUE) + { + DmaCopy16(3, offsetRead, (void *) (offsetWrite), 0x1000); + offsetRead += 0x1000; + offsetWrite += 0x1000; + size -= 0x1000; + if (size <= 0x1000) + { + DmaCopy16(3, offsetRead, (void *) (offsetWrite), size); + break; + } + } + + offsetRead2 = (u32)(&gUnknown_0820F798); + offsetWrite2 = (u32)(VRAM + 0x6000); + DmaCopy16(3, offsetRead2, (void*)(offsetWrite2), 0x1000); + gMain.state++; + } + break; + case 8: + REG_BG1CNT = 0x501; + + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + + SetMainCallback2(CB2_EggHatch_1); + gUnknown_0300481C->field_2 = 0; + break; + } +} + +void EggHatchSetMonNickname(void) +{ + SetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar3); + SetMainCallback2(c2_exit_to_overworld_2_switch); +} + +void Task_EggHatchPlayBGM(u8 taskID) +{ + if (gTasks[taskID].data[0] == 0) + StopMapMusic(); + if (gTasks[taskID].data[0] == 1) + PlayBGM(376); + if (gTasks[taskID].data[0] > 60) + { + PlayBGM(377); + DestroyTask(taskID); + //return; task is destroyed, yet you increment the value? + } + gTasks[taskID].data[0]++; +} + +void SpriteCB_Egg_0(struct Sprite* sprite); +void SpriteCB_Egg_1(struct Sprite* sprite); +void SpriteCB_Egg_2(struct Sprite* sprite); +void SpriteCB_Egg_3(struct Sprite* sprite); +void SpriteCB_Egg_4(struct Sprite* sprite); +void SpriteCB_Egg_5(struct Sprite* sprite); + +void EggHatchPrintMessage2(u8* src); +void EggHatchPrintMessage1(u8* src); +bool8 EggHatchUpdateWindowText(void); +void CreateRandomEggShardSprite(void); + +void CB2_EggHatch_1(void) +{ + switch (gUnknown_0300481C->field_2) + { + case 0: + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + REG_DISPCNT = 0x1740; + gUnknown_0300481C->field_2++; + CreateTask(Task_EggHatchPlayBGM, 5); + break; + case 1: + if (!gPaletteFade.active) + { + gUnknown_0300481C->field_3 = 0; + gUnknown_0300481C->field_2++; + } + break; + case 2: + if (++gUnknown_0300481C->field_3 > 30) + { + gUnknown_0300481C->field_2++; + gSprites[gUnknown_0300481C->eggSpriteID].callback = SpriteCB_Egg_0; + } + break; + case 3: + if (gSprites[gUnknown_0300481C->eggSpriteID].callback == SpriteCallbackDummy) + gUnknown_0300481C->field_2++; + break; + case 4: + GetMonNick(&gPlayerParty[gUnknown_0300481C->eggPartyID], gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_HatchedFromEgg); + EggHatchPrintMessage2(gStringVar4); + PlayFanfare(371); + gUnknown_0300481C->field_2++; + break; + case 5: + if (IsFanfareTaskInactive()) + gUnknown_0300481C->field_2++; + break; + case 6: + if (IsFanfareTaskInactive()) + gUnknown_0300481C->field_2++; + break; + case 7: + GetMonNick(&gPlayerParty[gUnknown_0300481C->eggPartyID], gStringVar1); + StringExpandPlaceholders(gStringVar4, gOtherText_NickHatchPrompt); + EggHatchPrintMessage1(gStringVar4); + gUnknown_0300481C->field_2++; + break; + case 8: + if (EggHatchUpdateWindowText()) + { + MenuDrawTextWindow(22, 8, 27, 13); + InitYesNoMenu(22, 8, 4); + gUnknown_0300481C->field_2++; + } + break; + case 9: + { + s8 menuInput; + if ((menuInput = ProcessMenuInputNoWrap_()) != -2) + { + if (menuInput != -1 && menuInput != 1) + { + u16 species; + u8 gender; + u32 personality; + + GetMonNick(&gPlayerParty[gUnknown_0300481C->eggPartyID], gStringVar3); + species = GetMonData(&gPlayerParty[gUnknown_0300481C->eggPartyID], MON_DATA_SPECIES); + gender = GetMonGender(&gPlayerParty[gUnknown_0300481C->eggPartyID]); + personality = GetMonData(&gPlayerParty[gUnknown_0300481C->eggPartyID], MON_DATA_PERSONALITY, 0); + DoNamingScreen(3, gStringVar3, species, gender, personality, EggHatchSetMonNickname); + } + else + gUnknown_0300481C->field_2++; + } + } + break; + case 10: + BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); + gUnknown_0300481C->field_2++; + break; + case 11: + if (!gPaletteFade.active) + SetMainCallback2(c2_exit_to_overworld_2_switch); + break; + } + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void SpriteCB_Egg_0(struct Sprite* sprite) +{ + if (++sprite->data0 > 20) + { + sprite->callback = SpriteCB_Egg_1; + sprite->data0 = 0; + } + else + { + sprite->data1 = (sprite->data1 + 20) & 0xFF; + sprite->pos2.x = Sin(sprite->data1, 1); + if (sprite->data0 == 15) + { + PlaySE(23); + StartSpriteAnim(sprite, 1); + CreateRandomEggShardSprite(); + } + } +} + +void SpriteCB_Egg_1(struct Sprite* sprite) +{ + if (++sprite->data2 > 30) + { + if (++sprite->data0 > 20) + { + sprite->callback = SpriteCB_Egg_2; + sprite->data0 = 0; + sprite->data2 = 0; + } + else + { + sprite->data1 = (sprite->data1 + 20) & 0xFF; + sprite->pos2.x = Sin(sprite->data1, 2); + if (sprite->data0 == 15) + { + PlaySE(23); + StartSpriteAnim(sprite, 2); + } + } + } +} + +void SpriteCB_Egg_2(struct Sprite* sprite) +{ + if (++sprite->data2 > 30) + { + if (++sprite->data0 > 38) + { + u16 species; + + sprite->callback = SpriteCB_Egg_3; + sprite->data0 = 0; + species = GetMonData(&gPlayerParty[gUnknown_0300481C->eggPartyID], MON_DATA_SPECIES); + gSprites[gUnknown_0300481C->pokeSpriteID].pos2.x = 0; + gSprites[gUnknown_0300481C->pokeSpriteID].pos2.y = gMonFrontPicCoords[species].y_offset; + } + else + { + sprite->data1 = (sprite->data1 + 20) & 0xFF; + sprite->pos2.x = Sin(sprite->data1, 2); + if (sprite->data0 == 15) + { + PlaySE(23); + StartSpriteAnim(sprite, 2); + CreateRandomEggShardSprite(); + CreateRandomEggShardSprite(); + } + if (sprite->data0 == 30) + PlaySE(23); + } + } +} + +void SpriteCB_Egg_3(struct Sprite* sprite) +{ + if (++sprite->data0 > 50) + { + sprite->callback = SpriteCB_Egg_4; + sprite->data0 = 0; + } +} + +void SpriteCB_Egg_4(struct Sprite* sprite) +{ + s16 i; + if (sprite->data0 == 0) + BeginNormalPaletteFade(-1, -1, 0, 0x10, 0xFFFF); + if (sprite->data0 < 4u) + { + for (i = 0; i <= 3; i++) + CreateRandomEggShardSprite(); + } + sprite->data0++; + if (!gPaletteFade.active) + { + PlaySE(113); + sprite->invisible = 1; + sprite->callback = SpriteCB_Egg_5; + sprite->data0 = 0; + } +} -- cgit v1.2.3 From f246b05d996dba1249393e9219f0c32337feac02 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 1 Aug 2017 12:47:03 +0200 Subject: finish up egg hatch, make it compile --- src/egg_hatch.c | 265 +++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 167 insertions(+), 98 deletions(-) (limited to 'src') diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 70d206a06..f518fdb84 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -17,21 +17,61 @@ #include "menu.h" #include "naming_screen.h" #include "trig.h" +#include "rng.h" -extern u8 gStringVar1[]; extern u8 ewram[]; extern struct SpriteTemplate gUnknown_02024E8C; +struct EggHatchData +{ + u8 eggSpriteID; + u8 pokeSpriteID; + u8 CB2_state; + u8 CB2_PalCounter; + u8 eggPartyID; + struct Window window; + u8 tileDataStartOffset; + u8 unused_39; + u8 eggShardVelocityID; +}; + +extern struct EggHatchData* sEggHatchData; + +extern const u32 gUnknown_08D00000[]; +extern const u32 gUnknown_08D00524[]; +extern const u32 gUnknown_0820CA98[]; +extern const u32 gUnknown_0820F798[]; +extern const u16 gUnknown_08D004E0[]; //palette +extern const u16 gUnknown_0820C9F8[]; //palette +extern const struct SpriteSheet gUnknown_0820A3B0; +extern const struct SpriteSheet gUnknown_0820A3B8; +extern const struct SpritePalette gUnknown_0820A3C0; +extern const struct SpriteTemplate gSpriteTemplate_820A3C8; +extern const struct SpriteTemplate gSpriteTemplate_820A418; +extern const s16 gEggShardVelocities[][2]; + bool8 GetNationalPokedexFlag(u16 nationalNum, u8 caseID); u8* GetMonNick(struct Pokemon* mon, u8* dst); u8 sav1_map_get_name(void); const struct CompressedSpritePalette* sub_8040990(struct Pokemon* mon); //gets pokemon palette address void sub_8080990(void); -void Task_EggHatch(u8 taskID); -void CB2_EggHatch_0(void); - -void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) +static void Task_EggHatch(u8 taskID); +static void CB2_EggHatch_0(void); +static void CB2_EggHatch_1(void); +static void SpriteCB_Egg_0(struct Sprite* sprite); +static void SpriteCB_Egg_1(struct Sprite* sprite); +static void SpriteCB_Egg_2(struct Sprite* sprite); +static void SpriteCB_Egg_3(struct Sprite* sprite); +static void SpriteCB_Egg_4(struct Sprite* sprite); +static void SpriteCB_Egg_5(struct Sprite* sprite); +static void EggHatchPrintMessage2(u8* src); +static void EggHatchPrintMessage1(u8* src); +static bool8 EggHatchUpdateWindowText(void); +static void CreateRandomEggShardSprite(void); +static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex); + +static void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) { u16 species; u32 personality, pokerus; @@ -82,7 +122,7 @@ void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) *egg = *temp; } -void AddHatchedMonToParty(u8 id) +static void AddHatchedMonToParty(u8 id) { u8 isEgg; u16 pokeNum; @@ -107,10 +147,10 @@ void AddHatchedMonToParty(u8 id) GetMonNick(mon, gStringVar1); ball = ITEM_POKE_BALL; - SetMonData(mon, MON_DATA_POKEBALL, &ball); + SetMonData(mon, MON_DATA_POKEBALL, (const u8*) &ball); caughtLvl = 0; - SetMonData(mon, MON_DATA_MET_LEVEL, &caughtLvl); + SetMonData(mon, MON_DATA_MET_LEVEL, (const u8*) &caughtLvl); mapNameID = sav1_map_get_name(); SetMonData(mon, MON_DATA_MET_LOCATION, &mapNameID); @@ -124,8 +164,15 @@ void ScriptHatchMon(void) AddHatchedMonToParty(gSpecialVar_0x8004); } +#ifdef NONMATCHING +static bool8 sub_8042ABC(void* a, u8 b) +{ + +} + +#else __attribute__((naked)) -bool8 sub_8042ABC(void* a, u8 b) +static bool8 sub_8042ABC(void* a, u8 b) { asm(".syntax unified\n\ push {r4-r6,lr}\n\ @@ -194,12 +241,14 @@ _08042B42:\n\ .syntax divided"); } +#endif // NONMATCHING + bool8 sub_8042B4C(void) { return sub_8042ABC(&gSaveBlock1.daycareData, gSpecialVar_0x8004); } -u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID) +static u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID) { u8 r5 = 0; u8 spriteID = 0; @@ -235,7 +284,7 @@ u8 EggHatchCreateMonSprite(u8 a0, u8 switchID, u8 pokeID) return spriteID; } -void VBlankCB_EggHatch(void) +static void VBlankCB_EggHatch(void) { LoadOam(); ProcessSpriteCopyRequests(); @@ -249,7 +298,7 @@ void EggHatch(void) BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); } -void Task_EggHatch(u8 taskID) +static void Task_EggHatch(u8 taskID) { if (!gPaletteFade.active) { @@ -259,48 +308,15 @@ void Task_EggHatch(u8 taskID) } } -void CB2_EggHatch_1(void); - -struct Struct_2018000 -{ - u8 eggSpriteID; - u8 pokeSpriteID; - u8 field_2; - u8 field_3; - u8 eggPartyID; - u8 field_5; - u8 field_6; - u8 field_7; - struct Window window; - u8 field_38; - u8 field_39; - u8 field_3A; -}; - -extern struct Struct_2018000* gUnknown_0300481C; -extern const u32 gUnknown_08D00000[]; -extern const u32 gUnknown_08D00524[]; -extern const u32 gUnknown_0820CA98[]; -extern const u32 gUnknown_0820F798[]; -extern const u16 gUnknown_08D004E0[]; //palette - -extern const u16 gUnknown_0820C9F8[]; //palette - -extern const struct SpriteSheet gUnknown_0820A3B0; -extern const struct SpriteSheet gUnknown_0820A3B8; -extern const struct SpritePalette gUnknown_0820A3C0; - -extern const struct SpriteTemplate gSpriteTemplate_820A3C8; - void CB2_EggHatch_0(void) { switch (gMain.state) { case 0: REG_DISPCNT = 0; - gUnknown_0300481C = (struct Struct_2018000*)(&ewram[0x18000]); - gUnknown_0300481C->eggPartyID = gSpecialVar_0x8004; - gUnknown_0300481C->field_3A = 0; + sEggHatchData = (struct EggHatchData*)(&ewram[0x18000]); + sEggHatchData->eggPartyID = gSpecialVar_0x8004; + sEggHatchData->eggShardVelocityID = 0; ResetTasks(); ResetSpriteData(); FreeAllSpritePalettes(); @@ -310,9 +326,9 @@ void CB2_EggHatch_0(void) break; case 1: SetUpWindowConfig(&gWindowConfig_81E6F84); - InitWindowFromConfig(&gUnknown_0300481C->window, &gWindowConfig_81E6F84); - gUnknown_0300481C->field_38 = SetTextWindowBaseTileNum(20); - LoadTextWindowGraphics(&gUnknown_0300481C->window); + InitWindowFromConfig(&sEggHatchData->window, &gWindowConfig_81E6F84); + sEggHatchData->tileDataStartOffset = SetTextWindowBaseTileNum(20); + LoadTextWindowGraphics(&sEggHatchData->window); gMain.state++; break; case 2: @@ -329,16 +345,16 @@ void CB2_EggHatch_0(void) gMain.state++; break; case 4: - gUnknown_0300481C->eggSpriteID = CreateSprite(&gSpriteTemplate_820A3C8, 0x78, 0x4B, 5); - AddHatchedMonToParty(gUnknown_0300481C->eggPartyID); + sEggHatchData->eggSpriteID = CreateSprite(&gSpriteTemplate_820A3C8, 0x78, 0x4B, 5); + AddHatchedMonToParty(sEggHatchData->eggPartyID); gMain.state++; break; case 5: - EggHatchCreateMonSprite(0, 0, gUnknown_0300481C->eggPartyID); + EggHatchCreateMonSprite(0, 0, sEggHatchData->eggPartyID); gMain.state++; break; case 6: - gUnknown_0300481C->pokeSpriteID = EggHatchCreateMonSprite(0, 1, gUnknown_0300481C->eggPartyID); + sEggHatchData->pokeSpriteID = EggHatchCreateMonSprite(0, 1, sEggHatchData->eggPartyID); gMain.state++; break; case 7: @@ -385,7 +401,7 @@ void CB2_EggHatch_0(void) REG_BG2VOFS = 0; SetMainCallback2(CB2_EggHatch_1); - gUnknown_0300481C->field_2 = 0; + sEggHatchData->CB2_state = 0; break; } } @@ -411,73 +427,61 @@ void Task_EggHatchPlayBGM(u8 taskID) gTasks[taskID].data[0]++; } -void SpriteCB_Egg_0(struct Sprite* sprite); -void SpriteCB_Egg_1(struct Sprite* sprite); -void SpriteCB_Egg_2(struct Sprite* sprite); -void SpriteCB_Egg_3(struct Sprite* sprite); -void SpriteCB_Egg_4(struct Sprite* sprite); -void SpriteCB_Egg_5(struct Sprite* sprite); - -void EggHatchPrintMessage2(u8* src); -void EggHatchPrintMessage1(u8* src); -bool8 EggHatchUpdateWindowText(void); -void CreateRandomEggShardSprite(void); - void CB2_EggHatch_1(void) { - switch (gUnknown_0300481C->field_2) + switch (sEggHatchData->CB2_state) { case 0: BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); REG_DISPCNT = 0x1740; - gUnknown_0300481C->field_2++; + sEggHatchData->CB2_state++; CreateTask(Task_EggHatchPlayBGM, 5); break; case 1: if (!gPaletteFade.active) { - gUnknown_0300481C->field_3 = 0; - gUnknown_0300481C->field_2++; + sEggHatchData->CB2_PalCounter = 0; + sEggHatchData->CB2_state++; } break; case 2: - if (++gUnknown_0300481C->field_3 > 30) + if (++sEggHatchData->CB2_PalCounter > 30) { - gUnknown_0300481C->field_2++; - gSprites[gUnknown_0300481C->eggSpriteID].callback = SpriteCB_Egg_0; + sEggHatchData->CB2_state++; + gSprites[sEggHatchData->eggSpriteID].callback = SpriteCB_Egg_0; } break; case 3: - if (gSprites[gUnknown_0300481C->eggSpriteID].callback == SpriteCallbackDummy) - gUnknown_0300481C->field_2++; + if (gSprites[sEggHatchData->eggSpriteID].callback == SpriteCallbackDummy) + sEggHatchData->CB2_state++; break; case 4: - GetMonNick(&gPlayerParty[gUnknown_0300481C->eggPartyID], gStringVar1); + GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1); StringExpandPlaceholders(gStringVar4, gOtherText_HatchedFromEgg); EggHatchPrintMessage2(gStringVar4); PlayFanfare(371); - gUnknown_0300481C->field_2++; + sEggHatchData->CB2_state++; break; case 5: if (IsFanfareTaskInactive()) - gUnknown_0300481C->field_2++; + sEggHatchData->CB2_state++; break; case 6: if (IsFanfareTaskInactive()) - gUnknown_0300481C->field_2++; + sEggHatchData->CB2_state++; break; case 7: - GetMonNick(&gPlayerParty[gUnknown_0300481C->eggPartyID], gStringVar1); + GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1); StringExpandPlaceholders(gStringVar4, gOtherText_NickHatchPrompt); EggHatchPrintMessage1(gStringVar4); - gUnknown_0300481C->field_2++; + sEggHatchData->CB2_state++; break; case 8: if (EggHatchUpdateWindowText()) { MenuDrawTextWindow(22, 8, 27, 13); InitYesNoMenu(22, 8, 4); - gUnknown_0300481C->field_2++; + sEggHatchData->CB2_state++; } break; case 9: @@ -491,20 +495,20 @@ void CB2_EggHatch_1(void) u8 gender; u32 personality; - GetMonNick(&gPlayerParty[gUnknown_0300481C->eggPartyID], gStringVar3); - species = GetMonData(&gPlayerParty[gUnknown_0300481C->eggPartyID], MON_DATA_SPECIES); - gender = GetMonGender(&gPlayerParty[gUnknown_0300481C->eggPartyID]); - personality = GetMonData(&gPlayerParty[gUnknown_0300481C->eggPartyID], MON_DATA_PERSONALITY, 0); + GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar3); + species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES); + gender = GetMonGender(&gPlayerParty[sEggHatchData->eggPartyID]); + personality = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_PERSONALITY, 0); DoNamingScreen(3, gStringVar3, species, gender, personality, EggHatchSetMonNickname); } else - gUnknown_0300481C->field_2++; + sEggHatchData->CB2_state++; } } break; case 10: BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - gUnknown_0300481C->field_2++; + sEggHatchData->CB2_state++; break; case 11: if (!gPaletteFade.active) @@ -517,7 +521,7 @@ void CB2_EggHatch_1(void) UpdatePaletteFade(); } -void SpriteCB_Egg_0(struct Sprite* sprite) +static void SpriteCB_Egg_0(struct Sprite* sprite) { if (++sprite->data0 > 20) { @@ -537,7 +541,7 @@ void SpriteCB_Egg_0(struct Sprite* sprite) } } -void SpriteCB_Egg_1(struct Sprite* sprite) +static void SpriteCB_Egg_1(struct Sprite* sprite) { if (++sprite->data2 > 30) { @@ -560,7 +564,7 @@ void SpriteCB_Egg_1(struct Sprite* sprite) } } -void SpriteCB_Egg_2(struct Sprite* sprite) +static void SpriteCB_Egg_2(struct Sprite* sprite) { if (++sprite->data2 > 30) { @@ -570,9 +574,9 @@ void SpriteCB_Egg_2(struct Sprite* sprite) sprite->callback = SpriteCB_Egg_3; sprite->data0 = 0; - species = GetMonData(&gPlayerParty[gUnknown_0300481C->eggPartyID], MON_DATA_SPECIES); - gSprites[gUnknown_0300481C->pokeSpriteID].pos2.x = 0; - gSprites[gUnknown_0300481C->pokeSpriteID].pos2.y = gMonFrontPicCoords[species].y_offset; + species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES); + gSprites[sEggHatchData->pokeSpriteID].pos2.x = 0; + gSprites[sEggHatchData->pokeSpriteID].pos2.y = gMonFrontPicCoords[species].y_offset; } else { @@ -591,7 +595,7 @@ void SpriteCB_Egg_2(struct Sprite* sprite) } } -void SpriteCB_Egg_3(struct Sprite* sprite) +static void SpriteCB_Egg_3(struct Sprite* sprite) { if (++sprite->data0 > 50) { @@ -600,7 +604,7 @@ void SpriteCB_Egg_3(struct Sprite* sprite) } } -void SpriteCB_Egg_4(struct Sprite* sprite) +static void SpriteCB_Egg_4(struct Sprite* sprite) { s16 i; if (sprite->data0 == 0) @@ -619,3 +623,68 @@ void SpriteCB_Egg_4(struct Sprite* sprite) sprite->data0 = 0; } } + +static void SpriteCB_Egg_5(struct Sprite* sprite) +{ + if (sprite->data0 == 0) + { + gSprites[sEggHatchData->pokeSpriteID].invisible = 0; + StartSpriteAffineAnim(&gSprites[sEggHatchData->pokeSpriteID], 1); + } + if (sprite->data0 == 8) + BeginNormalPaletteFade(-1, -1, 0x10, 0, 0xFFFF); + if (sprite->data0 <= 9) + gSprites[sEggHatchData->pokeSpriteID].pos1.y -= 1; + if (sprite->data0 > 40) + sprite->callback = SpriteCallbackDummy; + sprite->data0++; +} + +void SpriteCB_EggShard(struct Sprite* sprite) +{ + sprite->data4 += sprite->data1; + sprite->data5 += sprite->data2; + + sprite->pos2.x = sprite->data4 / 256; + sprite->pos2.y = sprite->data5 / 256; + + sprite->data2 += sprite->data3; + + if (sprite->pos1.y + sprite->pos2.y > sprite->pos1.y + 20 && sprite->data2 > 0) + DestroySprite(sprite); +} + +static void CreateRandomEggShardSprite(void) +{ + u16 spriteAnimIndex; + + s16 velocity1 = gEggShardVelocities[sEggHatchData->eggShardVelocityID][0]; + s16 velocity2 = gEggShardVelocities[sEggHatchData->eggShardVelocityID][1]; + sEggHatchData->eggShardVelocityID++; + spriteAnimIndex = Random() % 4; + CreateEggShardSprite(120, 60, velocity1, velocity2, 100, spriteAnimIndex); +} + +static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex) +{ + u8 spriteID = CreateSprite(&gSpriteTemplate_820A418, x, y, 4); + gSprites[spriteID].data1 = data1; + gSprites[spriteID].data2 = data2; + gSprites[spriteID].data3 = data3; + StartSpriteAnim(&gSprites[spriteID], spriteAnimIndex); +} + +static void EggHatchPrintMessage1(u8* src) +{ + sub_8002EB0(&sEggHatchData->window, src, sEggHatchData->tileDataStartOffset, 3, 15); +} + +static void EggHatchPrintMessage2(u8* src) +{ + sub_8003460(&sEggHatchData->window, src, sEggHatchData->tileDataStartOffset, 3, 15); +} + +static bool8 EggHatchUpdateWindowText(void) +{ + return sub_80035AC(&sEggHatchData->window); +} -- cgit v1.2.3 From b14554c6ae23dfd1f1a8e1f3d3fc486fc9158a66 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 1 Aug 2017 15:21:54 +0200 Subject: move data to C --- src/egg_hatch.c | 209 +++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 191 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/egg_hatch.c b/src/egg_hatch.c index f518fdb84..45021d3e4 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -43,12 +43,9 @@ extern const u32 gUnknown_0820CA98[]; extern const u32 gUnknown_0820F798[]; extern const u16 gUnknown_08D004E0[]; //palette extern const u16 gUnknown_0820C9F8[]; //palette -extern const struct SpriteSheet gUnknown_0820A3B0; -extern const struct SpriteSheet gUnknown_0820A3B8; -extern const struct SpritePalette gUnknown_0820A3C0; -extern const struct SpriteTemplate gSpriteTemplate_820A3C8; -extern const struct SpriteTemplate gSpriteTemplate_820A418; -extern const s16 gEggShardVelocities[][2]; +extern const struct SpriteSheet sUnknown_0820A3B0; +extern const struct SpriteSheet sUnknown_0820A3B8; +extern const struct SpritePalette sUnknown_0820A3C0; bool8 GetNationalPokedexFlag(u16 nationalNum, u8 caseID); u8* GetMonNick(struct Pokemon* mon, u8* dst); @@ -65,12 +62,162 @@ static void SpriteCB_Egg_2(struct Sprite* sprite); static void SpriteCB_Egg_3(struct Sprite* sprite); static void SpriteCB_Egg_4(struct Sprite* sprite); static void SpriteCB_Egg_5(struct Sprite* sprite); +static void SpriteCB_EggShard(struct Sprite* sprite); static void EggHatchPrintMessage2(u8* src); static void EggHatchPrintMessage1(u8* src); static bool8 EggHatchUpdateWindowText(void); static void CreateRandomEggShardSprite(void); static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex); +// graphics + +static const u16 sEggPalette[] = INCBIN_U16("graphics/pokemon/egg/palette.gbapal"); +static const u8 sEggHatchTiles[] = INCBIN_U8("graphics/misc/egg_hatch.4bpp"); +static const u8 sEggShardTiles[] = INCBIN_U8("graphics/misc/egg_shard.4bpp"); + +static const struct OamData sOamData_820A378 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 1, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sSpriteAnim_820A380[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_820A388[] = +{ + ANIMCMD_FRAME(16, 5), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_820A390[] = +{ + ANIMCMD_FRAME(32, 5), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_820A398[] = +{ + ANIMCMD_FRAME(48, 5), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_820A3A0[] = +{ + sSpriteAnim_820A380, + sSpriteAnim_820A388, + sSpriteAnim_820A390, + sSpriteAnim_820A398, +}; + +static const struct SpriteSheet sUnknown_0820A3B0 = +{ + .data = sEggHatchTiles, + .size = 2048, + .tag = 12345, +}; + +static const struct SpriteSheet sUnknown_0820A3B8 = +{ + .data = sEggShardTiles, + .size = 128, + .tag = 23456, +}; + +static const struct SpritePalette sUnknown_0820A3C0 = +{ + .data = sEggPalette, + .tag = 54321 +}; + +static const struct SpriteTemplate sSpriteTemplate_820A3C8 = +{ + .tileTag = 12345, + .paletteTag = 54321, + .oam = &sOamData_820A378, + .anims = sSpriteAnimTable_820A3A0, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCallbackDummy +}; + + +static const struct OamData sOamData_820A3E0 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sSpriteAnim_820A3E8[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_820A3F0[] = +{ + ANIMCMD_FRAME(1, 5), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_820A3F8[] = +{ + ANIMCMD_FRAME(2, 5), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_820A400[] = +{ + ANIMCMD_FRAME(3, 5), + ANIMCMD_END +}; + +static const union AnimCmd *const sSpriteAnimTable_820A408[] = +{ + sSpriteAnim_820A3E8, + sSpriteAnim_820A3F0, + sSpriteAnim_820A3F8, + sSpriteAnim_820A400, +}; + +static const struct SpriteTemplate sSpriteTemplate_820A418 = +{ + .tileTag = 23456, + .paletteTag = 54321, + .oam = &sOamData_820A3E0, + .anims = sSpriteAnimTable_820A408, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_EggShard +}; + +// actual code + static void CreatedHatchedMon(struct Pokemon *egg, struct Pokemon *temp) { u16 species; @@ -308,7 +455,7 @@ static void Task_EggHatch(u8 taskID) } } -void CB2_EggHatch_0(void) +static void CB2_EggHatch_0(void) { switch (gMain.state) { @@ -339,13 +486,13 @@ void CB2_EggHatch_0(void) gMain.state++; break; case 3: - LoadSpriteSheet(&gUnknown_0820A3B0); - LoadSpriteSheet(&gUnknown_0820A3B8); - LoadSpritePalette(&gUnknown_0820A3C0); + LoadSpriteSheet(&sUnknown_0820A3B0); + LoadSpriteSheet(&sUnknown_0820A3B8); + LoadSpritePalette(&sUnknown_0820A3C0); gMain.state++; break; case 4: - sEggHatchData->eggSpriteID = CreateSprite(&gSpriteTemplate_820A3C8, 0x78, 0x4B, 5); + sEggHatchData->eggSpriteID = CreateSprite(&sSpriteTemplate_820A3C8, 0x78, 0x4B, 5); AddHatchedMonToParty(sEggHatchData->eggPartyID); gMain.state++; break; @@ -406,13 +553,13 @@ void CB2_EggHatch_0(void) } } -void EggHatchSetMonNickname(void) +static void EggHatchSetMonNickname(void) { SetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar3); SetMainCallback2(c2_exit_to_overworld_2_switch); } -void Task_EggHatchPlayBGM(u8 taskID) +static void Task_EggHatchPlayBGM(u8 taskID) { if (gTasks[taskID].data[0] == 0) StopMapMusic(); @@ -427,7 +574,7 @@ void Task_EggHatchPlayBGM(u8 taskID) gTasks[taskID].data[0]++; } -void CB2_EggHatch_1(void) +static void CB2_EggHatch_1(void) { switch (sEggHatchData->CB2_state) { @@ -640,7 +787,7 @@ static void SpriteCB_Egg_5(struct Sprite* sprite) sprite->data0++; } -void SpriteCB_EggShard(struct Sprite* sprite) +static void SpriteCB_EggShard(struct Sprite* sprite) { sprite->data4 += sprite->data1; sprite->data5 += sprite->data2; @@ -654,12 +801,38 @@ void SpriteCB_EggShard(struct Sprite* sprite) DestroySprite(sprite); } +// Converts a number to Q8.8 fixed-point format +#define Q_8_8(n) ((s16)((n) * 256)) + +static const s16 sEggShardVelocities[][2] = +{ + {Q_8_8(-1.5), Q_8_8(-3.75)}, + {Q_8_8(-5), Q_8_8(-3)}, + {Q_8_8(3.5), Q_8_8(-3)}, + {Q_8_8(-4), Q_8_8(-3.75)}, + {Q_8_8(2), Q_8_8(-1.5)}, + {Q_8_8(-0.5), Q_8_8(-6.75)}, + {Q_8_8(5), Q_8_8(-2.25)}, + {Q_8_8(-1.5), Q_8_8(-3.75)}, + {Q_8_8(4.5), Q_8_8(-1.5)}, + {Q_8_8(-1), Q_8_8(-6.75)}, + {Q_8_8(4), Q_8_8(-2.25)}, + {Q_8_8(-3.5), Q_8_8(-3.75)}, + {Q_8_8(1), Q_8_8(-1.5)}, + {Q_8_8(-3.515625), Q_8_8(-6.75)}, + {Q_8_8(4.5), Q_8_8(-2.25)}, + {Q_8_8(-0.5), Q_8_8(-7.5)}, + {Q_8_8(1), Q_8_8(-4.5)}, + {Q_8_8(-2.5), Q_8_8(-2.25)}, + {Q_8_8(2.5), Q_8_8(-7.5)}, +}; + static void CreateRandomEggShardSprite(void) { u16 spriteAnimIndex; - s16 velocity1 = gEggShardVelocities[sEggHatchData->eggShardVelocityID][0]; - s16 velocity2 = gEggShardVelocities[sEggHatchData->eggShardVelocityID][1]; + s16 velocity1 = sEggShardVelocities[sEggHatchData->eggShardVelocityID][0]; + s16 velocity2 = sEggShardVelocities[sEggHatchData->eggShardVelocityID][1]; sEggHatchData->eggShardVelocityID++; spriteAnimIndex = Random() % 4; CreateEggShardSprite(120, 60, velocity1, velocity2, 100, spriteAnimIndex); @@ -667,7 +840,7 @@ static void CreateRandomEggShardSprite(void) static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 spriteAnimIndex) { - u8 spriteID = CreateSprite(&gSpriteTemplate_820A418, x, y, 4); + u8 spriteID = CreateSprite(&sSpriteTemplate_820A418, x, y, 4); gSprites[spriteID].data1 = data1; gSprites[spriteID].data2 = data2; gSprites[spriteID].data3 = data3; -- cgit v1.2.3 From a459f8f729942a2950c7d823d380e2579db95d4b Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Tue, 1 Aug 2017 23:20:03 +0200 Subject: start decompiling hall of fame --- src/hall_of_fame.c | 231 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 231 insertions(+) create mode 100644 src/hall_of_fame.c (limited to 'src') diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c new file mode 100644 index 000000000..39616f63e --- /dev/null +++ b/src/hall_of_fame.c @@ -0,0 +1,231 @@ +#include "global.h" +#include "main.h" +#include "task.h" +#include "palette.h" +#include "sound.h" +#include "pokemon.h" +#include "text.h" +#include "strings.h" +#include "menu.h" +#include "save.h" + +extern u32 gUnknown_0203931C; +extern bool8 gUnknown_02039324; // has hall of fame records +extern void (*gGameContinueCallback)(void); + +struct HallofFameMon +{ + u32 tid; + u32 personality; + u16 species : 9; + u16 lvl : 7; + u8 nick[10]; +}; + +struct HallofFameMons +{ + struct HallofFameMon mons[6]; +}; + +#define HALL_OF_FAME_MAX_TEAMS 50 + +extern u8 ewram[]; + +void sub_81433E0(void); +void sub_8143570(void); +void sub_81435B8(void); +void sub_8141FF8(u8 taskID); +void sub_81422E8(u8 taskID); +void sub_814217C(u8 taskID); +void sub_8142274(u8 taskID); +void sub_81422B8(u8 taskID); + +#define tDisplayedPoke data[1] +#define tPokesNumber data[2] +#define tFrameCount data[3] +#define tMonSpriteID(i) data[i + 5] + +void VBlankCB_HallOfFame(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_8141E4C(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +bool8 sub_8141E64(void) +{ + switch (gMain.state) + { + case 0: + default: + SetVBlankCallback(NULL); + sub_81433E0(); + gMain.state = 1; + break; + case 1: + sub_8143570(); + gMain.state++; + break; + case 2: + { + u16 saved_IME; + + BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); + SetVBlankCallback(VBlankCB_HallOfFame); + saved_IME = REG_IME; + REG_IME = 0; + REG_IE |= 1; + REG_IME = saved_IME; + REG_DISPSTAT |= 8; + gMain.state++; + } + break; + case 3: + REG_BLDCNT = 0x3F42; + REG_BLDALPHA = 0x710; + REG_BLDY = 0; + sub_81435B8(); + gMain.state++; + break; + case 4: + UpdatePaletteFade(); + if (!gPaletteFade.active) + { + SetMainCallback2(sub_8141E4C); + PlayBGM(436); + return 0; + } + break; + } + return 1; +} + +void sub_8141F90(void) +{ + if (sub_8141E64() == 0) + { + u8 taskID = CreateTask(sub_8141FF8, 0); + gTasks[taskID].data[0] = 0; + } +} + +void sub_8141FC4(void) +{ + if (sub_8141E64() == 0) + { + u8 taskID = CreateTask(sub_8141FF8, 0); + gTasks[taskID].data[0] = 1; + } +} + +void sub_8141FF8(u8 taskID) +{ + u16 i, j; + struct HallofFameMons* fameMons = (struct HallofFameMons*)(&ewram[0x1C000]); + + gTasks[taskID].tPokesNumber = 0; // valid pokes + for (i = 0; i < 6; i++) + { + u8 nick[12]; + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES)) + { + fameMons->mons[i].species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); + fameMons->mons[i].tid = GetMonData(&gPlayerParty[i], MON_DATA_OT_ID); + fameMons->mons[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); + fameMons->mons[i].lvl = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL); + GetMonData(&gPlayerParty[i], MON_DATA_NICKNAME, nick); + for (j = 0; j < 10; j++) + { + fameMons->mons[i].nick[j] = nick[j]; + } + gTasks[taskID].tPokesNumber++; + } + else + { + fameMons->mons[i].species = 0; + fameMons->mons[i].tid = 0; + fameMons->mons[i].personality = 0; + fameMons->mons[i].lvl = 0; + fameMons->mons[i].nick[0] = EOS; + } + } + gUnknown_0203931C = 0; + gTasks[taskID].tDisplayedPoke = 0; + gTasks[taskID].data[4] = 0xFF; + for (i = 0; i < 6; i++) + { + gTasks[taskID].tMonSpriteID(i) = 0xFF; + } + if (gTasks[taskID].data[0]) + gTasks[taskID].func = sub_81422E8; + else + gTasks[taskID].func = sub_814217C; +} + +void sub_814217C(u8 taskID) +{ + u16 i; + struct HallofFameMons* fameMons = (struct HallofFameMons*)(&ewram[0x1C000]); + struct HallofFameMons* lastSavedTeam = (struct HallofFameMons*)(&ewram[0x1E000]); + + if (gUnknown_02039324 == FALSE) + { + for (i = 0; i < 0x2000; i++) + ewram[i + 0x1E000] = 0; + } + else + sub_8125EC8(3); + + for (i = 0; i < 50; i++, lastSavedTeam++) + { + if (lastSavedTeam->mons[0].species == 0) + break; + } + if (i >= 50) + { + struct HallofFameMons* r5 = (struct HallofFameMons*)(&ewram[0x1E000]); + struct HallofFameMons* r6 = (struct HallofFameMons*)(&ewram[0x1E000]); + r5++; + for (i = 0; i < 49; i++, r6++, r5++) + { + *r6 = *r5; + } + lastSavedTeam--; + } + *lastSavedTeam = *fameMons; + MenuDrawTextWindow(2, 14, 27, 19); + MenuPrint(gMenuText_HOFSaving, 3, 15); + gTasks[taskID].func = sub_8142274; +} + +void sub_8142274(u8 taskID) +{ + gGameContinueCallback = sub_8141FC4; + TrySavingData(3); + PlaySE(55); + gTasks[taskID].func = sub_81422B8; + gTasks[taskID].tFrameCount = 32; +} + +void sub_81422B8(u8 taskID) +{ + if (gTasks[taskID].tFrameCount) + gTasks[taskID].tFrameCount--; + else + gTasks[taskID].func = sub_81422E8; +} + +/* +#undef tDisplayedPoke +#undef tPokesNumber +#undef tFrameCount +#undef tMonSpriteID +*/ -- cgit v1.2.3 From 1764de7db82669b5868f891f30bac3bb4c0bf442 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 3 Aug 2017 10:07:50 +0200 Subject: more functions decompiled --- src/hall_of_fame.c | 691 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 675 insertions(+), 16 deletions(-) (limited to 'src') diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 39616f63e..9ccecc0e3 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -6,12 +6,21 @@ #include "pokemon.h" #include "text.h" #include "strings.h" +#include "string_util.h" #include "menu.h" #include "save.h" +#include "species.h" +#include "rom4.h" +#include "m4a.h" +#include "data2.h" extern u32 gUnknown_0203931C; extern bool8 gUnknown_02039324; // has hall of fame records extern void (*gGameContinueCallback)(void); +extern struct MusicPlayerInfo gMPlay_BGM; + +extern const s16 gUnknown_0840B534[][4]; +extern const s16 gUnknown_0840B564[][4]; struct HallofFameMon { @@ -31,28 +40,66 @@ struct HallofFameMons extern u8 ewram[]; +static void sub_8141FF8(u8 taskID); +static void sub_81422E8(u8 taskID); +static void sub_814217C(u8 taskID); +static void sub_8142274(u8 taskID); +static void sub_81422B8(u8 taskID); +static void sub_8142320(u8 taskID); +static void sub_8142404(u8 taskID); +static void sub_8142484(u8 taskID); +static void sub_8142570(u8 taskID); +static void sub_8142618(u8 taskID); +static void sub_81426F8(u8 taskID); +static void sub_8142738(u8 taskID); +static void sub_8142794(u8 taskID); +static void sub_8142818(u8 taskID); +static void sub_8142850(u8 taskID); +static void sub_81428A0(u8 taskID); +static void sub_8142A28(u8 taskID); +static void sub_8142FEC(u8 taskID); +static void sub_8142B04(u8 taskID); +static void sub_8142CC8(u8 taskID); +static void sub_8142DF4(u8 taskID); +static void sub_8142F78(u8 taskID); +static void sub_8142FCC(u8 taskID); +static void sub_814302C(u8 taskID); + +static void sub_8143068(u8 a0, u8 a1); +static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 a1, u8 a2); +static void HallOfFame_PrintPlayerInfo(u8 a0, u8 a1); + +u32 sub_81436BC(u16 species, s16 posX, s16 posY, u16 pokeID, u32 tid, u32 pid); //return value either u16 or u32 +void sub_81435DC(struct Sprite* sprite); +void sub_81438C4(void); +u32 sub_81437A4(u16 gender, u16 a1, u16 a2, u16 a3); + +// functions from different files void sub_81433E0(void); void sub_8143570(void); void sub_81435B8(void); -void sub_8141FF8(u8 taskID); -void sub_81422E8(u8 taskID); -void sub_814217C(u8 taskID); -void sub_8142274(u8 taskID); -void sub_81422B8(u8 taskID); +void sub_81439D0(void); +void sub_80C5CD4(void*); // ? +void sub_80C5E38(void*); // ? +bool8 sub_80C5DCC(void); +bool8 sub_80C5F98(void); +void ReturnFromHallOfFamePC(void); +u16 SpeciesToPokedexNum(u16 species); #define tDisplayedPoke data[1] #define tPokesNumber data[2] #define tFrameCount data[3] +#define tPlayerSpriteID data[4] #define tMonSpriteID(i) data[i + 5] -void VBlankCB_HallOfFame(void) +static void VBlankCB_HallOfFame(void) { LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); } -void sub_8141E4C(void) +static void CB2_HallOfFame(void) { RunTasks(); AnimateSprites(); @@ -60,7 +107,7 @@ void sub_8141E4C(void) UpdatePaletteFade(); } -bool8 sub_8141E64(void) +static bool8 sub_8141E64(void) { switch (gMain.state) { @@ -99,7 +146,7 @@ bool8 sub_8141E64(void) UpdatePaletteFade(); if (!gPaletteFade.active) { - SetMainCallback2(sub_8141E4C); + SetMainCallback2(CB2_HallOfFame); PlayBGM(436); return 0; } @@ -117,7 +164,7 @@ void sub_8141F90(void) } } -void sub_8141FC4(void) +static void sub_8141FC4(void) { if (sub_8141E64() == 0) { @@ -126,7 +173,7 @@ void sub_8141FC4(void) } } -void sub_8141FF8(u8 taskID) +static void sub_8141FF8(u8 taskID) { u16 i, j; struct HallofFameMons* fameMons = (struct HallofFameMons*)(&ewram[0x1C000]); @@ -170,7 +217,7 @@ void sub_8141FF8(u8 taskID) gTasks[taskID].func = sub_814217C; } -void sub_814217C(u8 taskID) +static void sub_814217C(u8 taskID) { u16 i; struct HallofFameMons* fameMons = (struct HallofFameMons*)(&ewram[0x1C000]); @@ -206,7 +253,7 @@ void sub_814217C(u8 taskID) gTasks[taskID].func = sub_8142274; } -void sub_8142274(u8 taskID) +static void sub_8142274(u8 taskID) { gGameContinueCallback = sub_8141FC4; TrySavingData(3); @@ -215,7 +262,7 @@ void sub_8142274(u8 taskID) gTasks[taskID].tFrameCount = 32; } -void sub_81422B8(u8 taskID) +static void sub_81422B8(u8 taskID) { if (gTasks[taskID].tFrameCount) gTasks[taskID].tFrameCount--; @@ -223,9 +270,621 @@ void sub_81422B8(u8 taskID) gTasks[taskID].func = sub_81422E8; } -/* +static void sub_81422E8(u8 taskID) +{ + SetUpWindowConfig(&gWindowConfig_81E7198); + InitMenuWindow(&gWindowConfig_81E7198); + gTasks[taskID].func = sub_8142320; +} + +static void sub_8142320(u8 taskID) +{ + u8 spriteID; + s16 xPos, yPos, field4, field6; + + struct HallofFameMons* fameMons = (struct HallofFameMons*)(&ewram[0x1C000]); + u16 currPokeID = gTasks[taskID].tDisplayedPoke; + struct HallofFameMon* currMon = &fameMons->mons[currPokeID]; + + if (gTasks[taskID].tPokesNumber > 3) + { + xPos = gUnknown_0840B534[currPokeID][0]; + yPos = gUnknown_0840B534[currPokeID][1]; + field4 = gUnknown_0840B534[currPokeID][2]; + field6 = gUnknown_0840B534[currPokeID][3]; + } + else + { + xPos = gUnknown_0840B564[currPokeID][0]; + yPos = gUnknown_0840B564[currPokeID][1]; + field4 = gUnknown_0840B564[currPokeID][2]; + field6 = gUnknown_0840B564[currPokeID][3]; + } + + spriteID = sub_81436BC(currMon->species, xPos, yPos, currPokeID, currMon->tid, currMon->personality); + gSprites[spriteID].data1 = field4; + gSprites[spriteID].data2 = field6; + gSprites[spriteID].data0 = 0; + gSprites[spriteID].callback = sub_81435DC; + gTasks[taskID].tMonSpriteID(currPokeID) = spriteID; + MenuZeroFillWindowRect(0, 14, 29, 19); + gTasks[taskID].func = sub_8142404; +} + +static void sub_8142404(u8 taskID) +{ + struct HallofFameMons* fameMons = (struct HallofFameMons*)(&ewram[0x1C000]); + u16 currPokeID = gTasks[taskID].tDisplayedPoke; + struct HallofFameMon* currMon = &fameMons->mons[currPokeID]; + + if (gSprites[gTasks[taskID].tMonSpriteID(currPokeID)].data0 != 0) + { + if (currMon->species != SPECIES_EGG) + PlayCry1(currMon->species, 0); + HallOfFame_PrintMonInfo(currMon, 0, 14); + gTasks[taskID].tFrameCount = 120; + gTasks[taskID].func = sub_8142484; + } +} + +static void sub_8142484(u8 taskID) +{ + struct HallofFameMons* fameMons = (struct HallofFameMons*)(&ewram[0x1C000]); + u16 currPokeID = gTasks[taskID].tDisplayedPoke; + struct HallofFameMon* currMon = &fameMons->mons[currPokeID]; + + if (gTasks[taskID].tFrameCount != 0) + gTasks[taskID].tFrameCount--; + else + { + gUnknown_0203931C |= (0x10000 << gSprites[gTasks[taskID].tMonSpriteID(currPokeID)].oam.paletteNum); + if (gTasks[taskID].tDisplayedPoke <= 4 && currMon[1].species != 0) // there is another pokemon to display + { + gTasks[taskID].tDisplayedPoke++; + BeginNormalPaletteFade(gUnknown_0203931C, 0, 12, 12, 0x735F); + gSprites[gTasks[taskID].tMonSpriteID(currPokeID)].oam.priority = 1; + gTasks[taskID].func = sub_8142320; + } + else + gTasks[taskID].func = sub_8142570; + } +} + +static void sub_8142570(u8 taskID) +{ + u16 i; + + BeginNormalPaletteFade(0xFFFF0000, 0, 0, 0, 0); + for (i = 0; i < 6; i++) + { + if (gTasks[taskID].tMonSpriteID(i) != 0xFF) + gSprites[gTasks[taskID].tMonSpriteID(i)].oam.priority = 0; + } + MenuZeroFillWindowRect(0, 14, 29, 19); + sub_8143068(0, 15); + PlaySE(105); + gTasks[taskID].tFrameCount = 400; + gTasks[taskID].func = sub_8142618; +} + +static void sub_8142618(u8 taskID) +{ + if (gTasks[taskID].tFrameCount != 0) + { + gTasks[taskID].tFrameCount--; + if ((gTasks[taskID].tFrameCount & 3) == 0 && gTasks[taskID].tFrameCount > 110) + sub_81438C4(); + } + else + { + u16 i; + for (i = 0; i < 6; i++) + { + if (gTasks[taskID].tMonSpriteID(i) != 0xFF) + gSprites[gTasks[taskID].tMonSpriteID(i)].oam.priority = 1; + } + BeginNormalPaletteFade(gUnknown_0203931C, 0, 12, 12, 0x735F); + MenuZeroFillWindowRect(0, 14, 29, 19); + gTasks[taskID].tFrameCount = 7; + gTasks[taskID].func = sub_81426F8; + } +} + +static void sub_81426F8(u8 taskID) +{ + if (gTasks[taskID].tFrameCount >= 16) + gTasks[taskID].func = sub_8142738; + else + { + gTasks[taskID].tFrameCount++; + REG_BLDALPHA = gTasks[taskID].tFrameCount * 256; + } +} + +static void sub_8142738(u8 taskID) +{ + REG_DISPCNT = 0x1940; + SetUpWindowConfig(&gWindowConfig_81E71B4); + InitMenuWindow(&gWindowConfig_81E71B4); + + gTasks[taskID].tPlayerSpriteID = sub_81437A4(gSaveBlock2.playerGender, 120, 72, 6); + gTasks[taskID].tFrameCount = 120; + gTasks[taskID].func = sub_8142794; +} + +static void sub_8142794(u8 taskID) +{ + if (gTasks[taskID].tFrameCount != 0) + gTasks[taskID].tFrameCount--; + else + { + if (gSprites[gTasks[taskID].tPlayerSpriteID].pos1.x != 160) + gSprites[gTasks[taskID].tPlayerSpriteID].pos1.x++; + else + { + MenuDrawTextWindow(1, 2, 15, 9); + HallOfFame_PrintPlayerInfo(1, 2); + MenuDrawTextWindow(2, 14, 27, 19); + MenuPrint(gMenuText_HOFCongratulations, 4, 15); + gTasks[taskID].func = sub_8142818; + } + } +} + +static void sub_8142818(u8 taskID) +{ + if (gMain.newKeys & A_BUTTON) + { + FadeOutBGM(4); + gTasks[taskID].func = sub_8142850; + } +} + +static void sub_8142850(u8 taskID) +{ + CpuSet(gPlttBufferFaded, gPlttBufferUnfaded, 0x200); + BeginNormalPaletteFade(-1, 8, 0, 0x10, 0); + gTasks[taskID].func = sub_81428A0; +} + +static void sub_81428A0(u8 taskID) +{ + if (!gPaletteFade.active) + { + DestroyTask(taskID); + SetMainCallback2(sub_81439D0); + } +} + #undef tDisplayedPoke #undef tPokesNumber #undef tFrameCount +#undef tPlayerSpriteID +#undef tMonSpriteID + +extern const struct HallofFameMon sDummyFameMon; + +void sub_81428CC(void) +{ + switch (gMain.state) + { + case 0: + default: + SetVBlankCallback(NULL); + sub_81433E0(); + gMain.state = 1; + break; + case 1: + sub_8143570(); + gMain.state++; + break; + case 2: + { + u16 savedIme; + + SetVBlankCallback(VBlankCB_HallOfFame); + savedIme = REG_IME; + REG_IME = 0; + REG_IE |= 1; + REG_IME = savedIme; + REG_DISPSTAT |= 8; + gMain.state++; + } + break; + case 3: + { + struct HallofFameMons* fameMons; + + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + sub_81435B8(); + + fameMons = (struct HallofFameMons*)(&ewram[0x1C000]); + fameMons->mons[0] = sDummyFameMon; + + sub_80C5CD4(fameMons); + gMain.state++; + } + break; + case 4: + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + if (sub_80C5DCC()) + gMain.state++; + break; + case 5: + REG_BLDCNT = 0x3F42; + REG_BLDALPHA = 0x710; + REG_BLDY = 0; + CreateTask(sub_8142A28, 0); + SetMainCallback2(CB2_HallOfFame); + break; + } +} + +#define tCurrTeamNo data[0] //0x8 +#define tCurrPageNo data[1] //0xA +#define tCurrPokeID data[2] //0xC +#define tPokesNo data[4] //0x10 +#define tMonSpriteID(i) data[i + 5] + +static void sub_8142A28(u8 taskID) +{ + if (sub_8125EC8(3) != 1) + gTasks[taskID].func = sub_8142FEC; + else + { + u16 *vram1, *vram2; + + u16 i; + struct HallofFameMons* savedTeams = (struct HallofFameMons*)(&ewram[0x1E000]); + for (i = 0; i < 50; i++, savedTeams++) + { + if (savedTeams->mons[0].species == 0) + break; + } + if (i < 50) + gTasks[taskID].tCurrTeamNo = i - 1; + else + gTasks[taskID].tCurrTeamNo = 49; + gTasks[taskID].tCurrPageNo = GetGameStat(10); + + for (i = 0, vram1 = (u16*)(VRAM + 0x381A), vram2 = (u16*)(VRAM + 0x385A); i <= 16; i++) + { + *(vram1 + i) = i + 3; + *(vram2 + i) = i + 20; + } + SetUpWindowConfig(&gWindowConfig_81E7198); + InitMenuWindow(&gWindowConfig_81E7198); + gTasks[taskID].func = sub_8142B04; + } +} + +static void sub_8142B04(u8 taskID) +{ + struct HallofFameMons* savedTeams = (struct HallofFameMons*)(&ewram[0x1E000]); + struct HallofFameMon* currMon; + u16 i; + u8* stringPtr; + + for (i = 0; i < gTasks[taskID].tCurrTeamNo; i++) + savedTeams++; + + currMon = &savedTeams->mons[0]; + gUnknown_0203931C = 0; + gTasks[taskID].tCurrPokeID = 0; + gTasks[taskID].tPokesNo = 0; + + for (i = 0; i < 6; i++, currMon++) + { + if (currMon->species != 0) + gTasks[taskID].tPokesNo++; + } + + currMon = &savedTeams->mons[0]; + + for (i = 0; i < 6; i++, currMon++) + { + if (currMon->species != 0) + { + u16 spriteID; + s16 posX, posY; + if (gTasks[taskID].tPokesNo > 3) + { + posX = gUnknown_0840B534[i][2]; + posY = gUnknown_0840B534[i][3]; + } + else + { + posX = gUnknown_0840B564[i][2]; + posY = gUnknown_0840B564[i][3]; + } + spriteID = sub_81436BC(currMon->species, posX, posY, i, currMon->tid, currMon->personality); + gSprites[spriteID].oam.priority = 1; + gTasks[taskID].tMonSpriteID(i) = spriteID; + } + else + gTasks[taskID].tMonSpriteID(i) = 0xFF; + } + + BlendPalettes(0xFFFF0000, 0xC, 0x735F); + + stringPtr = gStringVar1; + stringPtr = StringCopy(stringPtr, gMenuText_HOFNumber); + stringPtr[0] = 0xFC; + stringPtr[1] = 0x14; + stringPtr[2] = 0x6; + stringPtr += 3; + stringPtr = ConvertIntToDecimalString(stringPtr, gTasks[taskID].tCurrPageNo); + stringPtr[0] = 0xFC; + stringPtr[1] = 0x13; + stringPtr[2] = 0xF0; + stringPtr[3] = EOS; + MenuPrint(gStringVar1, 0, 0); + + gTasks[taskID].func = sub_8142CC8; +} + +static void sub_8142CC8(u8 taskID) +{ + struct HallofFameMons* savedTeams = (struct HallofFameMons*)(&ewram[0x1E000]); + struct HallofFameMon* currMon; + u16 i; + u16 currMonID; + + for (i = 0; i < gTasks[taskID].tCurrTeamNo; i++) + savedTeams++; + + for (i = 0; i < 6; i++) + { + u16 spriteID = gTasks[taskID].tMonSpriteID(i); + if (spriteID != 0xFF) + gSprites[spriteID].oam.priority = 1; + } + + currMonID = gTasks[taskID].tMonSpriteID(gTasks[taskID].tCurrPokeID); + gSprites[currMonID].oam.priority = 0; + gUnknown_0203931C = (0x10000 << gSprites[currMonID].oam.paletteNum) ^ 0xFFFF0000; + BlendPalettesUnfaded(gUnknown_0203931C, 0xC, 0x735F); + + currMon = &savedTeams->mons[gTasks[taskID].tCurrPokeID]; + if (currMon->species != SPECIES_EGG) + { + StopCryAndClearCrySongs(); + PlayCry1(currMon->species, 0); + } + HallOfFame_PrintMonInfo(currMon, 0, 14); + + gTasks[taskID].func = sub_8142DF4; +} + +static void sub_8142DF4(u8 taskID) +{ + u16 i; + if (gMain.newKeys & A_BUTTON) + { + if (gTasks[taskID].tCurrTeamNo != 0) // prepare another team to view + { + gTasks[taskID].tCurrTeamNo--; + for (i = 0; i < 6; i++) + { + u8 spriteID = gTasks[taskID].tMonSpriteID(i); + if (spriteID != 0xFF) + { + FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[spriteID].oam.paletteNum)); + DestroySprite(&gSprites[spriteID]); + } + } + if (gTasks[taskID].tCurrPageNo != 0) + gTasks[taskID].tCurrPageNo--; + gTasks[taskID].func = sub_8142B04; + } + else // no more teams to view, turn off hall of fame PC + { + if (IsCryPlayingOrClearCrySongs()) + { + StopCryAndClearCrySongs(); + m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100); + } + gTasks[taskID].func = sub_8142F78; + } + } + else if (gMain.newKeys & B_BUTTON) // turn off hall of fame PC + { + if (IsCryPlayingOrClearCrySongs()) + { + StopCryAndClearCrySongs(); + m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100); + } + gTasks[taskID].func = sub_8142F78; + } + else if (gMain.newKeys & DPAD_UP && gTasks[taskID].tCurrPokeID != 0) // change poke -1 + { + gTasks[taskID].tCurrPokeID--; + gTasks[taskID].func = sub_8142CC8; + } + else if (gMain.newKeys & DPAD_DOWN && gTasks[taskID].tCurrPokeID < gTasks[taskID].tPokesNo - 1) // change poke +1 + { + gTasks[taskID].tCurrPokeID++; + gTasks[taskID].func = sub_8142CC8; + } +} + +static void sub_8142F78(u8 taskID) +{ + struct HallofFameMons* fameMons; + + CpuSet(gPlttBufferFaded, gPlttBufferUnfaded, 0x200); + fameMons = (struct HallofFameMons*)(&ewram[0x1C000]); + fameMons->mons[0] = sDummyFameMon; + sub_80C5E38(fameMons); + gTasks[taskID].func = sub_8142FCC; +} + +static void sub_8142FCC(u8 taskID) +{ + if (sub_80C5F98()) + { + DestroyTask(taskID); + ReturnFromHallOfFamePC(); + } +} + +static void sub_8142FEC(u8 taskID) +{ + MenuDrawTextWindow(2, 14, 27, 19); + MenuPrintMessage(gMenuText_HOFCorrupt, 3, 15); + gTasks[taskID].func = sub_814302C; +} + +static void sub_814302C(u8 taskID) +{ + if (MenuUpdateWindowText() && gMain.newKeys & A_BUTTON) + gTasks[taskID].func = sub_8142F78; +} + +#undef tCurrTeamNo +#undef tCurrPageNo +#undef tCurrPokeID +#undef tPokesNo #undef tMonSpriteID -*/ + +static void sub_8143068(u8 a0, u8 a1) +{ + sub_8072BD8(gMenuText_WelcomeToHOFAndDexRating, 0, a1 + 1, 0xF0); +} + +static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 a1, u8 a2) +{ + u8* stringPtr; + u16 monData; + u16 i; + + stringPtr = gStringVar1; + stringPtr[0] = EXT_CTRL_CODE_BEGIN; + stringPtr[1] = 0x13; + stringPtr[2] = 0x28; + stringPtr[3] = EOS; + + if (currMon->species != SPECIES_EGG) + { + monData = SpeciesToPokedexNum(currMon->species); + if (monData != 0xFFFF) + { + stringPtr = StringCopy(stringPtr, gOtherText_Number2); + ConvertIntToDecimalStringN(stringPtr, monData, 2, 3); + } + } + + MenuPrint(gStringVar1, a1 + 4, a2 + 1); + stringPtr = gStringVar1; + + for (i = 0; i < 10 && currMon->nick[i] != EOS; stringPtr[i] = currMon->nick[i], i++) {} + stringPtr += i; + stringPtr[0] = EOS; + + if (currMon->species == SPECIES_EGG) + { + stringPtr[0] = EXT_CTRL_CODE_BEGIN; + stringPtr[1] = 0x13; + stringPtr[2] = 0xA0; + stringPtr[3] = EOS; + MenuPrint(gStringVar1, a1 + 9, a2 + 1); + MenuZeroFillWindowRect(0, a2 + 3, 29, a2 + 4); + } + else + { + + stringPtr[0] = EXT_CTRL_CODE_BEGIN; + stringPtr[1] = 0x13; + stringPtr[2] = 0x3E; + stringPtr += 3; + + stringPtr[0] = CHAR_SLASH; + stringPtr++; + + for (i = 0; i < 10 && gSpeciesNames[currMon->species][i] != EOS; stringPtr[i] = gSpeciesNames[currMon->species][i], i++) {} + + stringPtr += i; + stringPtr[0] = CHAR_SPACE; + stringPtr++; + + if (currMon->species != SPECIES_NIDORAN_M && currMon->species != SPECIES_NIDORAN_F) + { + switch (GetGenderFromSpeciesAndPersonality(currMon->species, currMon->personality)) + { + case MON_MALE: + stringPtr[0] = CHAR_MALE; + stringPtr++; + break; + case MON_FEMALE: + stringPtr[0] = CHAR_FEMALE; + stringPtr++; + break; + } + } + + stringPtr[0] = EXT_CTRL_CODE_BEGIN; + stringPtr[1] = 0x13; + stringPtr[2] = 0xA0; + stringPtr[3] = EOS; + + MenuPrint(gStringVar1, a1 + 9, a2 + 1); + + monData = currMon->lvl; + + stringPtr = StringCopy(gStringVar1, gOtherText_Level3); + + stringPtr[0] = EXT_CTRL_CODE_BEGIN; + stringPtr[1] = 0x14; + stringPtr[2] = 6; + stringPtr += 3; + + stringPtr = ConvertIntToDecimalStringN(stringPtr, monData, 0, 3); + + stringPtr[0] = EXT_CTRL_CODE_BEGIN; + stringPtr[1] = 0x13; + stringPtr[2] = 0x30; + stringPtr[3] = EOS; + + MenuPrint(gStringVar1, a1 + 7, a2 + 3); + + monData = currMon->tid; + + stringPtr = StringCopy(gStringVar1, gOtherText_IDNumber); + ConvertIntToDecimalStringN(stringPtr, monData, 2, 5); + + MenuPrint(gStringVar1, a1 + 13, a2 + 3); + } +} + +#define ByteRead16(ptr) ((ptr)[0] | ((ptr)[1] << 8)) + +static void HallOfFame_PrintPlayerInfo(u8 a0, u8 a1) +{ + u8* stringPtr; + u16 visibleTid; + + MenuPrint(gOtherText_Name, a0 + 1, a1 + 1); + MenuPrint_RightAligned(gSaveBlock2.playerName, a0 + 14, a1 + 1); + + MenuPrint(gOtherText_IDNumber2, a0 + 1, a1 + 3); + visibleTid = ByteRead16(gSaveBlock2.playerTrainerId); + ConvertIntToDecimalStringN(gStringVar1, visibleTid, 2, 5); + + MenuPrint_RightAligned(gStringVar1, a0 + 14, a1 + 3); + MenuPrint(gMainMenuString_Time, a0 + 1, a1 + 5); + + stringPtr = ConvertIntToDecimalString(gStringVar1, gSaveBlock2.playTimeHours); + stringPtr[0] = CHAR_SPACE; + stringPtr[1] = CHAR_COLON; + stringPtr[2] = CHAR_SPACE; + stringPtr += 3; + + stringPtr = ConvertIntToDecimalStringN(stringPtr, gSaveBlock2.playTimeMinutes, 2, 2); + stringPtr[0] = EOS; + + MenuPrint_RightAligned(gStringVar1, a0 + 14, a1 + 5); +} -- cgit v1.2.3 From edcacd232abe2d5dda4bc5b6a6d74817a42fdc45 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 3 Aug 2017 15:26:15 +0200 Subject: more functions decompiled --- src/hall_of_fame.c | 189 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 182 insertions(+), 7 deletions(-) (limited to 'src') diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 9ccecc0e3..93f32ec88 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -13,11 +13,14 @@ #include "rom4.h" #include "m4a.h" #include "data2.h" +#include "decompress.h" extern u32 gUnknown_0203931C; extern bool8 gUnknown_02039324; // has hall of fame records extern void (*gGameContinueCallback)(void); extern struct MusicPlayerInfo gMPlay_BGM; +extern u8 gReservedSpritePaletteCount; +extern struct SpriteTemplate gUnknown_02024E8C; extern const s16 gUnknown_0840B534[][4]; extern const s16 gUnknown_0840B564[][4]; @@ -65,19 +68,20 @@ static void sub_8142F78(u8 taskID); static void sub_8142FCC(u8 taskID); static void sub_814302C(u8 taskID); +static void sub_81435DC(struct Sprite* sprite); +void SpriteCB_HallOfFame_Dummy(struct Sprite* sprite); + static void sub_8143068(u8 a0, u8 a1); static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 a1, u8 a2); static void HallOfFame_PrintPlayerInfo(u8 a0, u8 a1); +static void sub_81433E0(void); +static void sub_8143570(void); +static void sub_81435B8(void); +static u32 sub_81436BC(u16 species, s16 posX, s16 posY, u16 pokeID, u32 tid, u32 pid); -u32 sub_81436BC(u16 species, s16 posX, s16 posY, u16 pokeID, u32 tid, u32 pid); //return value either u16 or u32 -void sub_81435DC(struct Sprite* sprite); +// functions from different files void sub_81438C4(void); u32 sub_81437A4(u16 gender, u16 a1, u16 a2, u16 a3); - -// functions from different files -void sub_81433E0(void); -void sub_8143570(void); -void sub_81435B8(void); void sub_81439D0(void); void sub_80C5CD4(void*); // ? void sub_80C5E38(void*); // ? @@ -85,6 +89,7 @@ bool8 sub_80C5DCC(void); bool8 sub_80C5F98(void); void ReturnFromHallOfFamePC(void); u16 SpeciesToPokedexNum(u16 species); +void remove_some_task(void); #define tDisplayedPoke data[1] #define tPokesNumber data[2] @@ -888,3 +893,173 @@ static void HallOfFame_PrintPlayerInfo(u8 a0, u8 a1) MenuPrint_RightAligned(gStringVar1, a0 + 14, a1 + 5); } + +extern const u8 gHallOfFame_Gfx[]; +extern const u16 gHallOfFame_Pal[]; + +static void sub_81433E0(void) +{ + u32 offsetWrite, offsetWrite2, offsetWrite3, offsetWrite4; + u32 size, size2, size3, size4; + u16 i; + + REG_DISPCNT = 0; + + REG_BG0CNT = 0; + REG_BG0HOFS = 0; + REG_BG0VOFS = 0; + + REG_BG1CNT = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + + REG_BG2CNT = 0; + REG_BG2HOFS = 0; + REG_BG2VOFS = 0; + + REG_BG3CNT = 0; + REG_BG3HOFS = 0; + REG_BG3VOFS = 0; + + offsetWrite = (VRAM); + size = 0x18000; + while (TRUE) + { + DmaFill16(3, 0, offsetWrite, 0x1000); + offsetWrite += 0x1000; + size -= 0x1000; + if (size <= 0x1000) + { + DmaFill16(3, 0, offsetWrite, size); + break; + } + } + + offsetWrite2 = OAM; + size2 = OAM_SIZE; + DmaFill32(3, 0, offsetWrite2, size2); + + offsetWrite3 = PLTT; + size3 = PLTT_SIZE; + DmaFill16(3, 0, offsetWrite3, size3); + + LZ77UnCompVram(gHallOfFame_Gfx, (void*)(VRAM)); + + for (i = 0; i < 64; i++) + { + *((u16*)(VRAM + 0x3800) + i) = 1; + } + for (i = 0; i < 192; i++) + { + *((u16*)(VRAM + 0x3B80) + i) = 1; + } + for (i = 0; i < 1024; i++) + { + *((u16*)(VRAM + 0x3000) + i) = 2; + } + + offsetWrite4 = (u32)(&ewram[0]); + size4 = 0x4000; + while (TRUE) + { + DmaFill16(3, 0, offsetWrite4, 0x1000); + offsetWrite4 += 0x1000; + size4 -= 0x1000; + if (size4 <= 0x1000) + { + DmaFill16(3, 0, offsetWrite4, size4); + break; + } + } + + ResetPaletteFade(); + LoadPalette(gHallOfFame_Pal, 0, 0x20); +} + +extern const struct CompressedSpriteSheet gUnknown_0840B514; +extern const struct CompressedSpritePalette gUnknown_0840B524; + +static void sub_8143570(void) +{ + remove_some_task(); + ResetTasks(); + ResetSpriteData(); + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 8; + LoadCompressedObjectPic(&gUnknown_0840B514); + LoadCompressedObjectPalette(&gUnknown_0840B524); + SetUpWindowConfig(&gWindowConfig_81E71B4); + InitMenuWindow(&gWindowConfig_81E71B4); +} + +static void sub_81435B8(void) +{ + REG_BG1CNT = 0x700; + REG_BG3CNT = 0x603; + REG_DISPCNT = 0x1B40; +} + +static void sub_81435DC(struct Sprite* sprite) +{ + u32 spritePos = *(u32*)(&sprite->pos1); + u32 dataPos = *(u32*)(&sprite->data1); + if (spritePos != dataPos) + { + if (sprite->pos1.x < sprite->data1) + sprite->pos1.x += 15; + if (sprite->pos1.x > sprite->data1) + sprite->pos1.x -= 15; + + if (sprite->pos1.y < sprite->data2) + sprite->pos1.y += 10; + if (sprite->pos1.y > sprite->data2) + sprite->pos1.y -= 10; + } + else + { + sprite->data0 = 1; + sprite->callback = SpriteCB_HallOfFame_Dummy; + } +} + +void SpriteCB_HallOfFame_Dummy(struct Sprite* sprite) +{ + +} + +extern const struct SpriteTemplate gUnknown_0840B6B8; +extern const struct SpriteFrameImage* gUnknown_0840B69C[]; + +void sub_8143648(u16 paletteTag, u8 animID) +{ + gUnknown_02024E8C = gUnknown_0840B6B8; + gUnknown_02024E8C.paletteTag = paletteTag; + gUnknown_02024E8C.images = gUnknown_0840B69C[animID]; + gUnknown_02024E8C.anims = gSpriteAnimTable_81E7C64; +} + +void sub_8143680(u16 paletteTag, u8 animID) +{ + gUnknown_02024E8C = gUnknown_0840B6B8; + gUnknown_02024E8C.paletteTag = paletteTag; + gUnknown_02024E8C.images = gUnknown_0840B69C[animID]; + gUnknown_02024E8C.anims = gUnknown_081EC2A4[0]; +} + +extern void* gUnknown_0840B5A0[]; + +static u32 sub_81436BC(u16 species, s16 posX, s16 posY, u16 pokeID, u32 tid, u32 pid) +{ + u8 spriteID; + const u8* pokePal; + + LoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, 0x2000000, gUnknown_0840B5A0[pokeID], species, pid, 1); + + pokePal = species_and_otid_get_pal(species, tid, pid); + LoadCompressedPalette(pokePal, 16 * pokeID + 256, 0x20); + + sub_8143648(pokeID, pokeID); + spriteID = CreateSprite(&gUnknown_02024E8C, posX, posY, 10 - pokeID); + gSprites[spriteID].oam.paletteNum = pokeID; + return spriteID; +} -- cgit v1.2.3 From ba8734d45940190a08767acd4ab9999f8c6b774c Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 3 Aug 2017 16:13:21 +0200 Subject: all functions decompiled --- src/hall_of_fame.c | 106 ++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 80 insertions(+), 26 deletions(-) (limited to 'src') diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 93f32ec88..550cb0ebe 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -14,6 +14,8 @@ #include "m4a.h" #include "data2.h" #include "decompress.h" +#include "rng.h" +#include "trig.h" extern u32 gUnknown_0203931C; extern bool8 gUnknown_02039324; // has hall of fame records @@ -24,6 +26,15 @@ extern struct SpriteTemplate gUnknown_02024E8C; extern const s16 gUnknown_0840B534[][4]; extern const s16 gUnknown_0840B564[][4]; +extern const struct SpriteTemplate gSpriteTemplate_840B7A4; +extern const struct HallofFameMon sDummyFameMon; +extern const u8 gHallOfFame_Gfx[]; +extern const u16 gHallOfFame_Pal[]; +extern const struct CompressedSpriteSheet gUnknown_0840B514; +extern const struct CompressedSpritePalette gUnknown_0840B524; +extern const struct SpriteTemplate gUnknown_0840B6B8; +extern const struct SpriteFrameImage* gUnknown_0840B69C[]; +extern void* gUnknown_0840B5A0[]; struct HallofFameMon { @@ -77,11 +88,11 @@ static void HallOfFame_PrintPlayerInfo(u8 a0, u8 a1); static void sub_81433E0(void); static void sub_8143570(void); static void sub_81435B8(void); -static u32 sub_81436BC(u16 species, s16 posX, s16 posY, u16 pokeID, u32 tid, u32 pid); +static u32 HallOfFame_LoadPokemonPic(u16 species, s16 posX, s16 posY, u16 pokeID, u32 tid, u32 pid); +static u32 HallOfFame_LoadTrainerPic(u16 trainerPicID, s16 posX, s16 posY, u16 a3); +static bool8 sub_81438C4(void); // functions from different files -void sub_81438C4(void); -u32 sub_81437A4(u16 gender, u16 a1, u16 a2, u16 a3); void sub_81439D0(void); void sub_80C5CD4(void*); // ? void sub_80C5E38(void*); // ? @@ -236,17 +247,17 @@ static void sub_814217C(u8 taskID) else sub_8125EC8(3); - for (i = 0; i < 50; i++, lastSavedTeam++) + for (i = 0; i < HALL_OF_FAME_MAX_TEAMS; i++, lastSavedTeam++) { if (lastSavedTeam->mons[0].species == 0) break; } - if (i >= 50) + if (i >= HALL_OF_FAME_MAX_TEAMS) { struct HallofFameMons* r5 = (struct HallofFameMons*)(&ewram[0x1E000]); struct HallofFameMons* r6 = (struct HallofFameMons*)(&ewram[0x1E000]); r5++; - for (i = 0; i < 49; i++, r6++, r5++) + for (i = 0; i < HALL_OF_FAME_MAX_TEAMS - 1; i++, r6++, r5++) { *r6 = *r5; } @@ -306,7 +317,7 @@ static void sub_8142320(u8 taskID) field6 = gUnknown_0840B564[currPokeID][3]; } - spriteID = sub_81436BC(currMon->species, xPos, yPos, currPokeID, currMon->tid, currMon->personality); + spriteID = HallOfFame_LoadPokemonPic(currMon->species, xPos, yPos, currPokeID, currMon->tid, currMon->personality); gSprites[spriteID].data1 = field4; gSprites[spriteID].data2 = field6; gSprites[spriteID].data0 = 0; @@ -412,7 +423,7 @@ static void sub_8142738(u8 taskID) SetUpWindowConfig(&gWindowConfig_81E71B4); InitMenuWindow(&gWindowConfig_81E71B4); - gTasks[taskID].tPlayerSpriteID = sub_81437A4(gSaveBlock2.playerGender, 120, 72, 6); + gTasks[taskID].tPlayerSpriteID = HallOfFame_LoadTrainerPic(gSaveBlock2.playerGender, 120, 72, 6); gTasks[taskID].tFrameCount = 120; gTasks[taskID].func = sub_8142794; } @@ -467,8 +478,6 @@ static void sub_81428A0(u8 taskID) #undef tPlayerSpriteID #undef tMonSpriteID -extern const struct HallofFameMon sDummyFameMon; - void sub_81428CC(void) { switch (gMain.state) @@ -545,15 +554,15 @@ static void sub_8142A28(u8 taskID) u16 i; struct HallofFameMons* savedTeams = (struct HallofFameMons*)(&ewram[0x1E000]); - for (i = 0; i < 50; i++, savedTeams++) + for (i = 0; i < HALL_OF_FAME_MAX_TEAMS; i++, savedTeams++) { if (savedTeams->mons[0].species == 0) break; } - if (i < 50) + if (i < HALL_OF_FAME_MAX_TEAMS) gTasks[taskID].tCurrTeamNo = i - 1; else - gTasks[taskID].tCurrTeamNo = 49; + gTasks[taskID].tCurrTeamNo = HALL_OF_FAME_MAX_TEAMS - 1; gTasks[taskID].tCurrPageNo = GetGameStat(10); for (i = 0, vram1 = (u16*)(VRAM + 0x381A), vram2 = (u16*)(VRAM + 0x385A); i <= 16; i++) @@ -606,7 +615,7 @@ static void sub_8142B04(u8 taskID) posX = gUnknown_0840B564[i][2]; posY = gUnknown_0840B564[i][3]; } - spriteID = sub_81436BC(currMon->species, posX, posY, i, currMon->tid, currMon->personality); + spriteID = HallOfFame_LoadPokemonPic(currMon->species, posX, posY, i, currMon->tid, currMon->personality); gSprites[spriteID].oam.priority = 1; gTasks[taskID].tMonSpriteID(i) = spriteID; } @@ -894,9 +903,6 @@ static void HallOfFame_PrintPlayerInfo(u8 a0, u8 a1) MenuPrint_RightAligned(gStringVar1, a0 + 14, a1 + 5); } -extern const u8 gHallOfFame_Gfx[]; -extern const u16 gHallOfFame_Pal[]; - static void sub_81433E0(void) { u32 offsetWrite, offsetWrite2, offsetWrite3, offsetWrite4; @@ -976,9 +982,6 @@ static void sub_81433E0(void) LoadPalette(gHallOfFame_Pal, 0, 0x20); } -extern const struct CompressedSpriteSheet gUnknown_0840B514; -extern const struct CompressedSpritePalette gUnknown_0840B524; - static void sub_8143570(void) { remove_some_task(); @@ -1027,9 +1030,6 @@ void SpriteCB_HallOfFame_Dummy(struct Sprite* sprite) } -extern const struct SpriteTemplate gUnknown_0840B6B8; -extern const struct SpriteFrameImage* gUnknown_0840B69C[]; - void sub_8143648(u16 paletteTag, u8 animID) { gUnknown_02024E8C = gUnknown_0840B6B8; @@ -1046,9 +1046,7 @@ void sub_8143680(u16 paletteTag, u8 animID) gUnknown_02024E8C.anims = gUnknown_081EC2A4[0]; } -extern void* gUnknown_0840B5A0[]; - -static u32 sub_81436BC(u16 species, s16 posX, s16 posY, u16 pokeID, u32 tid, u32 pid) +static u32 HallOfFame_LoadPokemonPic(u16 species, s16 posX, s16 posY, u16 pokeID, u32 tid, u32 pid) { u8 spriteID; const u8* pokePal; @@ -1063,3 +1061,59 @@ static u32 sub_81436BC(u16 species, s16 posX, s16 posY, u16 pokeID, u32 tid, u32 gSprites[spriteID].oam.paletteNum = pokeID; return spriteID; } + +static u32 HallOfFame_LoadTrainerPic(u16 trainerPicID, s16 posX, s16 posY, u16 a3) +{ + u8 spriteID; + + DecompressPicFromTable_2(&gTrainerFrontPicTable[trainerPicID], gTrainerFrontPicCoords[trainerPicID].coords, gTrainerFrontPicCoords[trainerPicID].y_offset, (void*) 0x2000000, gUnknown_0840B5A0[a3], trainerPicID); + + LoadCompressedPalette(gTrainerFrontPicPaletteTable[trainerPicID].data, 16 * a3 + 256, 0x20); + sub_8143680(a3, a3); + + spriteID = CreateSprite(&gUnknown_02024E8C, posX, posY, 1); + gSprites[spriteID].oam.paletteNum = a3; + + return spriteID; +} + +void sub_814386C(struct Sprite* sprite) +{ + if (sprite->pos2.y > 120) + DestroySprite(sprite); + else + { + u16 rand; + u8 tableID; + + sprite->pos2.y++; + sprite->pos2.y += sprite->data1; + + tableID = sprite->data0; + rand = (Random() % 4) + 8; + sprite->pos2.x = rand * gSineTable[tableID] / 256; + + sprite->data0 += 4; + } +} + +bool8 sub_81438C4(void) +{ + u8 spriteID; + struct Sprite* sprite; + + s16 posX = Random() % 240; + s16 posY = -(Random() % 8); + + spriteID = CreateSprite(&gSpriteTemplate_840B7A4, posX, posY, 0); + sprite = &gSprites[spriteID]; + + StartSpriteAnim(sprite, Random() % 17); + + if (Random() & 3) + sprite->data1 = 0; + else + sprite->data1 = 1; + + return 0; +} -- cgit v1.2.3 From ba2577649abfa09b50247ca2e2d290883c11b254 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Thu, 3 Aug 2017 18:02:13 +0200 Subject: hall of fame is done --- src/hall_of_fame.c | 368 +++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 330 insertions(+), 38 deletions(-) (limited to 'src') diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 550cb0ebe..40ecdf06d 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -17,6 +17,7 @@ #include "rng.h" #include "trig.h" +extern u8 ewram[]; extern u32 gUnknown_0203931C; extern bool8 gUnknown_02039324; // has hall of fame records extern void (*gGameContinueCallback)(void); @@ -24,17 +25,10 @@ extern struct MusicPlayerInfo gMPlay_BGM; extern u8 gReservedSpritePaletteCount; extern struct SpriteTemplate gUnknown_02024E8C; -extern const s16 gUnknown_0840B534[][4]; -extern const s16 gUnknown_0840B564[][4]; -extern const struct SpriteTemplate gSpriteTemplate_840B7A4; -extern const struct HallofFameMon sDummyFameMon; +extern const u8 gContestConfetti_Gfx[]; +extern const u8 gContestConfetti_Pal[]; extern const u8 gHallOfFame_Gfx[]; extern const u16 gHallOfFame_Pal[]; -extern const struct CompressedSpriteSheet gUnknown_0840B514; -extern const struct CompressedSpritePalette gUnknown_0840B524; -extern const struct SpriteTemplate gUnknown_0840B6B8; -extern const struct SpriteFrameImage* gUnknown_0840B69C[]; -extern void* gUnknown_0840B5A0[]; struct HallofFameMon { @@ -52,8 +46,6 @@ struct HallofFameMons #define HALL_OF_FAME_MAX_TEAMS 50 -extern u8 ewram[]; - static void sub_8141FF8(u8 taskID); static void sub_81422E8(u8 taskID); static void sub_814217C(u8 taskID); @@ -80,7 +72,8 @@ static void sub_8142FCC(u8 taskID); static void sub_814302C(u8 taskID); static void sub_81435DC(struct Sprite* sprite); -void SpriteCB_HallOfFame_Dummy(struct Sprite* sprite); +static void sub_814386C(struct Sprite* sprite); +static void SpriteCB_HallOfFame_Dummy(struct Sprite* sprite); static void sub_8143068(u8 a0, u8 a1); static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 a1, u8 a2); @@ -102,6 +95,305 @@ void ReturnFromHallOfFamePC(void); u16 SpeciesToPokedexNum(u16 species); void remove_some_task(void); +// data and gfx + +static const struct CompressedSpriteSheet sHallOfFame_ConfettiSpriteSheet = +{ + gContestConfetti_Gfx, 0x220, 1001 +}; + +static const u8 sUnused0[8] = {}; + +static const struct CompressedSpritePalette sHallOfFame_ConfettiSpritePalette = +{ + gContestConfetti_Pal, 1001 +}; + +static const u8 sUnused1[8] = {}; + +static const s16 sHallOfFame_MonsFullTeamPositions[6][4] = +{ + {120, 210, 120, 40}, + {326, 220, 56, 40}, + {-86, 220, 184, 40}, + {120, -62, 120, 88}, + {-25, -62, 200, 88}, + {265, -62, 40, 88} +}; + +static const s16 sHallOfFame_MonsHalfTeamPositions[3][4] = +{ + {120, 214, 120, 64}, + {281, 214, 56, 64}, + {-41, 214, 184, 64} +}; + +static const struct HallofFameMon sDummyFameMon = +{ + 0x3EA03EA, 0, 0, 0, {0} +}; + +static const u8 sUnused2[6] = {2, 1, 3, 6, 4, 5}; + +static const struct OamData sOamData_840B598 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; + +void* const gUnknown_0840B5A0[] = +{ + &ewram[0x08000], + &ewram[0x0A000], + &ewram[0x0C000], + &ewram[0x0E000], + &ewram[0x10000], + &ewram[0x14000], + &ewram[0x18000] +}; + +static const struct SpriteFrameImage sSpriteImageTable_840B5BC[] = +{ + {&ewram[0x8000], 0x800}, + {&ewram[0x8800], 0x800}, + {&ewram[0x9000], 0x800}, + {&ewram[0x9800], 0x800} +}; + +static const struct SpriteFrameImage sSpriteImageTable_840B5DC[] = +{ + {&ewram[0xA000], 0x800}, + {&ewram[0xA800], 0x800}, + {&ewram[0xB000], 0x800}, + {&ewram[0xB800], 0x800} +}; + +static const struct SpriteFrameImage sSpriteImageTable_840B5FC[] = +{ + {&ewram[0xC000], 0x800}, + {&ewram[0xC800], 0x800}, + {&ewram[0xD000], 0x800}, + {&ewram[0xD800], 0x800} +}; + +static const struct SpriteFrameImage sSpriteImageTable_840B61C[] = +{ + {&ewram[0xE000], 0x800}, + {&ewram[0xE800], 0x800}, + {&ewram[0xF000], 0x800}, + {&ewram[0xF800], 0x800} +}; + +static const struct SpriteFrameImage sSpriteImageTable_840B63C[] = +{ + {&ewram[0x10000], 0x800}, + {&ewram[0x10800], 0x800}, + {&ewram[0x11000], 0x800}, + {&ewram[0x11800], 0x800} +}; + +static const struct SpriteFrameImage sSpriteImageTable_840B65C[] = +{ + {&ewram[0x14000], 0x800}, + {&ewram[0x14800], 0x800}, + {&ewram[0x15000], 0x800}, + {&ewram[0x15800], 0x800} +}; + +static const struct SpriteFrameImage sSpriteImageTable_840B67C[] = +{ + {&ewram[0x18000], 0x800}, + {&ewram[0x18800], 0x800}, + {&ewram[0x19000], 0x800}, + {&ewram[0x19800], 0x800} +}; + +static const struct SpriteFrameImage* const sUnknown_0840B69C[7] = +{ + sSpriteImageTable_840B5BC, + sSpriteImageTable_840B5DC, + sSpriteImageTable_840B5FC, + sSpriteImageTable_840B61C, + sSpriteImageTable_840B63C, + sSpriteImageTable_840B65C, + sSpriteImageTable_840B67C +}; + +static const struct SpriteTemplate sUnknown_0840B6B8 = +{ + .tileTag = -1, + .paletteTag = -1, + .oam = &sOamData_840B598, + .anims = NULL, + .images = sSpriteImageTable_840B5BC, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = SpriteCB_HallOfFame_Dummy +}; + +static const struct OamData sOamData_840B6D0 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 0, + .paletteNum = 0, + .affineParam = 0, +}; + +static const union AnimCmd sSpriteAnim_840B6D8[] = +{ + ANIMCMD_FRAME(0, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_840B6E0[] = +{ + ANIMCMD_FRAME(1, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_840B6E8[] = +{ + ANIMCMD_FRAME(2, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_840B6F0[] = +{ + ANIMCMD_FRAME(3, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_840B6F8[] = +{ + ANIMCMD_FRAME(4, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_840B700[] = +{ + ANIMCMD_FRAME(5, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_840B708[] = +{ + ANIMCMD_FRAME(6, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_840B710[] = +{ + ANIMCMD_FRAME(7, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_840B718[] = +{ + ANIMCMD_FRAME(8, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_840B720[] = +{ + ANIMCMD_FRAME(9, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_840B728[] = +{ + ANIMCMD_FRAME(10, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_840B730[] = +{ + ANIMCMD_FRAME(11, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_840B738[] = +{ + ANIMCMD_FRAME(12, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_840B740[] = +{ + ANIMCMD_FRAME(13, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_840B748[] = +{ + ANIMCMD_FRAME(14, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_840B750[] = +{ + ANIMCMD_FRAME(15, 30), + ANIMCMD_END +}; + +static const union AnimCmd sSpriteAnim_840B758[] = +{ + ANIMCMD_FRAME(16, 30), + ANIMCMD_END +}; + +static const union AnimCmd* const sSpriteAnimTable_840B760[] = +{ + sSpriteAnim_840B6D8, + sSpriteAnim_840B6E0, + sSpriteAnim_840B6E8, + sSpriteAnim_840B6F0, + sSpriteAnim_840B6F8, + sSpriteAnim_840B700, + sSpriteAnim_840B708, + sSpriteAnim_840B710, + sSpriteAnim_840B718, + sSpriteAnim_840B720, + sSpriteAnim_840B728, + sSpriteAnim_840B730, + sSpriteAnim_840B738, + sSpriteAnim_840B740, + sSpriteAnim_840B748, + sSpriteAnim_840B750, + sSpriteAnim_840B758 +}; + +static const struct SpriteTemplate sSpriteTemplate_840B7A4 = +{ + .tileTag = 1001, + .paletteTag = 1001, + .oam = &sOamData_840B6D0, + .anims = sSpriteAnimTable_840B760, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_814386C +}; + +// code + #define tDisplayedPoke data[1] #define tPokesNumber data[2] #define tFrameCount data[3] @@ -304,17 +596,17 @@ static void sub_8142320(u8 taskID) if (gTasks[taskID].tPokesNumber > 3) { - xPos = gUnknown_0840B534[currPokeID][0]; - yPos = gUnknown_0840B534[currPokeID][1]; - field4 = gUnknown_0840B534[currPokeID][2]; - field6 = gUnknown_0840B534[currPokeID][3]; + xPos = sHallOfFame_MonsFullTeamPositions[currPokeID][0]; + yPos = sHallOfFame_MonsFullTeamPositions[currPokeID][1]; + field4 = sHallOfFame_MonsFullTeamPositions[currPokeID][2]; + field6 = sHallOfFame_MonsFullTeamPositions[currPokeID][3]; } else { - xPos = gUnknown_0840B564[currPokeID][0]; - yPos = gUnknown_0840B564[currPokeID][1]; - field4 = gUnknown_0840B564[currPokeID][2]; - field6 = gUnknown_0840B564[currPokeID][3]; + xPos = sHallOfFame_MonsHalfTeamPositions[currPokeID][0]; + yPos = sHallOfFame_MonsHalfTeamPositions[currPokeID][1]; + field4 = sHallOfFame_MonsHalfTeamPositions[currPokeID][2]; + field6 = sHallOfFame_MonsHalfTeamPositions[currPokeID][3]; } spriteID = HallOfFame_LoadPokemonPic(currMon->species, xPos, yPos, currPokeID, currMon->tid, currMon->personality); @@ -538,10 +830,10 @@ void sub_81428CC(void) } } -#define tCurrTeamNo data[0] //0x8 -#define tCurrPageNo data[1] //0xA -#define tCurrPokeID data[2] //0xC -#define tPokesNo data[4] //0x10 +#define tCurrTeamNo data[0] +#define tCurrPageNo data[1] +#define tCurrPokeID data[2] +#define tPokesNo data[4] #define tMonSpriteID(i) data[i + 5] static void sub_8142A28(u8 taskID) @@ -607,13 +899,13 @@ static void sub_8142B04(u8 taskID) s16 posX, posY; if (gTasks[taskID].tPokesNo > 3) { - posX = gUnknown_0840B534[i][2]; - posY = gUnknown_0840B534[i][3]; + posX = sHallOfFame_MonsFullTeamPositions[i][2]; + posY = sHallOfFame_MonsFullTeamPositions[i][3]; } else { - posX = gUnknown_0840B564[i][2]; - posY = gUnknown_0840B564[i][3]; + posX = sHallOfFame_MonsHalfTeamPositions[i][2]; + posY = sHallOfFame_MonsHalfTeamPositions[i][3]; } spriteID = HallOfFame_LoadPokemonPic(currMon->species, posX, posY, i, currMon->tid, currMon->personality); gSprites[spriteID].oam.priority = 1; @@ -989,8 +1281,8 @@ static void sub_8143570(void) ResetSpriteData(); FreeAllSpritePalettes(); gReservedSpritePaletteCount = 8; - LoadCompressedObjectPic(&gUnknown_0840B514); - LoadCompressedObjectPalette(&gUnknown_0840B524); + LoadCompressedObjectPic(&sHallOfFame_ConfettiSpriteSheet); + LoadCompressedObjectPalette(&sHallOfFame_ConfettiSpritePalette); SetUpWindowConfig(&gWindowConfig_81E71B4); InitMenuWindow(&gWindowConfig_81E71B4); } @@ -1025,24 +1317,24 @@ static void sub_81435DC(struct Sprite* sprite) } } -void SpriteCB_HallOfFame_Dummy(struct Sprite* sprite) +static void SpriteCB_HallOfFame_Dummy(struct Sprite* sprite) { } void sub_8143648(u16 paletteTag, u8 animID) { - gUnknown_02024E8C = gUnknown_0840B6B8; + gUnknown_02024E8C = sUnknown_0840B6B8; gUnknown_02024E8C.paletteTag = paletteTag; - gUnknown_02024E8C.images = gUnknown_0840B69C[animID]; + gUnknown_02024E8C.images = sUnknown_0840B69C[animID]; gUnknown_02024E8C.anims = gSpriteAnimTable_81E7C64; } void sub_8143680(u16 paletteTag, u8 animID) { - gUnknown_02024E8C = gUnknown_0840B6B8; + gUnknown_02024E8C = sUnknown_0840B6B8; gUnknown_02024E8C.paletteTag = paletteTag; - gUnknown_02024E8C.images = gUnknown_0840B69C[animID]; + gUnknown_02024E8C.images = sUnknown_0840B69C[animID]; gUnknown_02024E8C.anims = gUnknown_081EC2A4[0]; } @@ -1077,7 +1369,7 @@ static u32 HallOfFame_LoadTrainerPic(u16 trainerPicID, s16 posX, s16 posY, u16 a return spriteID; } -void sub_814386C(struct Sprite* sprite) +static void sub_814386C(struct Sprite* sprite) { if (sprite->pos2.y > 120) DestroySprite(sprite); @@ -1097,7 +1389,7 @@ void sub_814386C(struct Sprite* sprite) } } -bool8 sub_81438C4(void) +static bool8 sub_81438C4(void) { u8 spriteID; struct Sprite* sprite; @@ -1105,7 +1397,7 @@ bool8 sub_81438C4(void) s16 posX = Random() % 240; s16 posY = -(Random() % 8); - spriteID = CreateSprite(&gSpriteTemplate_840B7A4, posX, posY, 0); + spriteID = CreateSprite(&sSpriteTemplate_840B7A4, posX, posY, 0); sprite = &gSprites[spriteID]; StartSpriteAnim(sprite, Random() % 17); -- cgit v1.2.3 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 acecf4fdb5bac6774c1bd5c77ee41a4269f023ef Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 7 Aug 2017 18:13:20 +0200 Subject: SE enums and egg hatch common sym --- src/egg_hatch.c | 103 ++++++++++++++++++++++++++++---------------------------- 1 file changed, 52 insertions(+), 51 deletions(-) (limited to 'src') diff --git a/src/egg_hatch.c b/src/egg_hatch.c index 45021d3e4..2b68d83e8 100644 --- a/src/egg_hatch.c +++ b/src/egg_hatch.c @@ -10,6 +10,7 @@ #include "main.h" #include "event_data.h" #include "sound.h" +#include "songs.h" #include "text.h" #include "text_window.h" #include "string_util.h" @@ -35,7 +36,7 @@ struct EggHatchData u8 eggShardVelocityID; }; -extern struct EggHatchData* sEggHatchData; +struct EggHatchData* gEggHatchData; extern const u32 gUnknown_08D00000[]; extern const u32 gUnknown_08D00524[]; @@ -461,9 +462,9 @@ static void CB2_EggHatch_0(void) { case 0: REG_DISPCNT = 0; - sEggHatchData = (struct EggHatchData*)(&ewram[0x18000]); - sEggHatchData->eggPartyID = gSpecialVar_0x8004; - sEggHatchData->eggShardVelocityID = 0; + gEggHatchData = (struct EggHatchData*)(&ewram[0x18000]); + gEggHatchData->eggPartyID = gSpecialVar_0x8004; + gEggHatchData->eggShardVelocityID = 0; ResetTasks(); ResetSpriteData(); FreeAllSpritePalettes(); @@ -473,9 +474,9 @@ static void CB2_EggHatch_0(void) break; case 1: SetUpWindowConfig(&gWindowConfig_81E6F84); - InitWindowFromConfig(&sEggHatchData->window, &gWindowConfig_81E6F84); - sEggHatchData->tileDataStartOffset = SetTextWindowBaseTileNum(20); - LoadTextWindowGraphics(&sEggHatchData->window); + InitWindowFromConfig(&gEggHatchData->window, &gWindowConfig_81E6F84); + gEggHatchData->tileDataStartOffset = SetTextWindowBaseTileNum(20); + LoadTextWindowGraphics(&gEggHatchData->window); gMain.state++; break; case 2: @@ -492,16 +493,16 @@ static void CB2_EggHatch_0(void) gMain.state++; break; case 4: - sEggHatchData->eggSpriteID = CreateSprite(&sSpriteTemplate_820A3C8, 0x78, 0x4B, 5); - AddHatchedMonToParty(sEggHatchData->eggPartyID); + gEggHatchData->eggSpriteID = CreateSprite(&sSpriteTemplate_820A3C8, 0x78, 0x4B, 5); + AddHatchedMonToParty(gEggHatchData->eggPartyID); gMain.state++; break; case 5: - EggHatchCreateMonSprite(0, 0, sEggHatchData->eggPartyID); + EggHatchCreateMonSprite(0, 0, gEggHatchData->eggPartyID); gMain.state++; break; case 6: - sEggHatchData->pokeSpriteID = EggHatchCreateMonSprite(0, 1, sEggHatchData->eggPartyID); + gEggHatchData->pokeSpriteID = EggHatchCreateMonSprite(0, 1, gEggHatchData->eggPartyID); gMain.state++; break; case 7: @@ -548,7 +549,7 @@ static void CB2_EggHatch_0(void) REG_BG2VOFS = 0; SetMainCallback2(CB2_EggHatch_1); - sEggHatchData->CB2_state = 0; + gEggHatchData->CB2_state = 0; break; } } @@ -576,59 +577,59 @@ static void Task_EggHatchPlayBGM(u8 taskID) static void CB2_EggHatch_1(void) { - switch (sEggHatchData->CB2_state) + switch (gEggHatchData->CB2_state) { case 0: BeginNormalPaletteFade(-1, 0, 0x10, 0, 0); REG_DISPCNT = 0x1740; - sEggHatchData->CB2_state++; + gEggHatchData->CB2_state++; CreateTask(Task_EggHatchPlayBGM, 5); break; case 1: if (!gPaletteFade.active) { - sEggHatchData->CB2_PalCounter = 0; - sEggHatchData->CB2_state++; + gEggHatchData->CB2_PalCounter = 0; + gEggHatchData->CB2_state++; } break; case 2: - if (++sEggHatchData->CB2_PalCounter > 30) + if (++gEggHatchData->CB2_PalCounter > 30) { - sEggHatchData->CB2_state++; - gSprites[sEggHatchData->eggSpriteID].callback = SpriteCB_Egg_0; + gEggHatchData->CB2_state++; + gSprites[gEggHatchData->eggSpriteID].callback = SpriteCB_Egg_0; } break; case 3: - if (gSprites[sEggHatchData->eggSpriteID].callback == SpriteCallbackDummy) - sEggHatchData->CB2_state++; + if (gSprites[gEggHatchData->eggSpriteID].callback == SpriteCallbackDummy) + gEggHatchData->CB2_state++; break; case 4: - GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1); + GetMonNick(&gPlayerParty[gEggHatchData->eggPartyID], gStringVar1); StringExpandPlaceholders(gStringVar4, gOtherText_HatchedFromEgg); EggHatchPrintMessage2(gStringVar4); PlayFanfare(371); - sEggHatchData->CB2_state++; + gEggHatchData->CB2_state++; break; case 5: if (IsFanfareTaskInactive()) - sEggHatchData->CB2_state++; + gEggHatchData->CB2_state++; break; case 6: if (IsFanfareTaskInactive()) - sEggHatchData->CB2_state++; + gEggHatchData->CB2_state++; break; case 7: - GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar1); + GetMonNick(&gPlayerParty[gEggHatchData->eggPartyID], gStringVar1); StringExpandPlaceholders(gStringVar4, gOtherText_NickHatchPrompt); EggHatchPrintMessage1(gStringVar4); - sEggHatchData->CB2_state++; + gEggHatchData->CB2_state++; break; case 8: if (EggHatchUpdateWindowText()) { MenuDrawTextWindow(22, 8, 27, 13); InitYesNoMenu(22, 8, 4); - sEggHatchData->CB2_state++; + gEggHatchData->CB2_state++; } break; case 9: @@ -642,20 +643,20 @@ static void CB2_EggHatch_1(void) u8 gender; u32 personality; - GetMonNick(&gPlayerParty[sEggHatchData->eggPartyID], gStringVar3); - species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES); - gender = GetMonGender(&gPlayerParty[sEggHatchData->eggPartyID]); - personality = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_PERSONALITY, 0); + GetMonNick(&gPlayerParty[gEggHatchData->eggPartyID], gStringVar3); + species = GetMonData(&gPlayerParty[gEggHatchData->eggPartyID], MON_DATA_SPECIES); + gender = GetMonGender(&gPlayerParty[gEggHatchData->eggPartyID]); + personality = GetMonData(&gPlayerParty[gEggHatchData->eggPartyID], MON_DATA_PERSONALITY, 0); DoNamingScreen(3, gStringVar3, species, gender, personality, EggHatchSetMonNickname); } else - sEggHatchData->CB2_state++; + gEggHatchData->CB2_state++; } } break; case 10: BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - sEggHatchData->CB2_state++; + gEggHatchData->CB2_state++; break; case 11: if (!gPaletteFade.active) @@ -681,7 +682,7 @@ static void SpriteCB_Egg_0(struct Sprite* sprite) sprite->pos2.x = Sin(sprite->data1, 1); if (sprite->data0 == 15) { - PlaySE(23); + PlaySE(SE_BOWA); StartSpriteAnim(sprite, 1); CreateRandomEggShardSprite(); } @@ -704,7 +705,7 @@ static void SpriteCB_Egg_1(struct Sprite* sprite) sprite->pos2.x = Sin(sprite->data1, 2); if (sprite->data0 == 15) { - PlaySE(23); + PlaySE(SE_BOWA); StartSpriteAnim(sprite, 2); } } @@ -721,9 +722,9 @@ static void SpriteCB_Egg_2(struct Sprite* sprite) sprite->callback = SpriteCB_Egg_3; sprite->data0 = 0; - species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyID], MON_DATA_SPECIES); - gSprites[sEggHatchData->pokeSpriteID].pos2.x = 0; - gSprites[sEggHatchData->pokeSpriteID].pos2.y = gMonFrontPicCoords[species].y_offset; + species = GetMonData(&gPlayerParty[gEggHatchData->eggPartyID], MON_DATA_SPECIES); + gSprites[gEggHatchData->pokeSpriteID].pos2.x = 0; + gSprites[gEggHatchData->pokeSpriteID].pos2.y = gMonFrontPicCoords[species].y_offset; } else { @@ -731,13 +732,13 @@ static void SpriteCB_Egg_2(struct Sprite* sprite) sprite->pos2.x = Sin(sprite->data1, 2); if (sprite->data0 == 15) { - PlaySE(23); + PlaySE(SE_BOWA); StartSpriteAnim(sprite, 2); CreateRandomEggShardSprite(); CreateRandomEggShardSprite(); } if (sprite->data0 == 30) - PlaySE(23); + PlaySE(SE_BOWA); } } } @@ -764,7 +765,7 @@ static void SpriteCB_Egg_4(struct Sprite* sprite) sprite->data0++; if (!gPaletteFade.active) { - PlaySE(113); + PlaySE(SE_TAMAGO); sprite->invisible = 1; sprite->callback = SpriteCB_Egg_5; sprite->data0 = 0; @@ -775,13 +776,13 @@ static void SpriteCB_Egg_5(struct Sprite* sprite) { if (sprite->data0 == 0) { - gSprites[sEggHatchData->pokeSpriteID].invisible = 0; - StartSpriteAffineAnim(&gSprites[sEggHatchData->pokeSpriteID], 1); + gSprites[gEggHatchData->pokeSpriteID].invisible = 0; + StartSpriteAffineAnim(&gSprites[gEggHatchData->pokeSpriteID], 1); } if (sprite->data0 == 8) BeginNormalPaletteFade(-1, -1, 0x10, 0, 0xFFFF); if (sprite->data0 <= 9) - gSprites[sEggHatchData->pokeSpriteID].pos1.y -= 1; + gSprites[gEggHatchData->pokeSpriteID].pos1.y -= 1; if (sprite->data0 > 40) sprite->callback = SpriteCallbackDummy; sprite->data0++; @@ -831,9 +832,9 @@ static void CreateRandomEggShardSprite(void) { u16 spriteAnimIndex; - s16 velocity1 = sEggShardVelocities[sEggHatchData->eggShardVelocityID][0]; - s16 velocity2 = sEggShardVelocities[sEggHatchData->eggShardVelocityID][1]; - sEggHatchData->eggShardVelocityID++; + s16 velocity1 = sEggShardVelocities[gEggHatchData->eggShardVelocityID][0]; + s16 velocity2 = sEggShardVelocities[gEggHatchData->eggShardVelocityID][1]; + gEggHatchData->eggShardVelocityID++; spriteAnimIndex = Random() % 4; CreateEggShardSprite(120, 60, velocity1, velocity2, 100, spriteAnimIndex); } @@ -849,15 +850,15 @@ static void CreateEggShardSprite(u8 x, u8 y, s16 data1, s16 data2, s16 data3, u8 static void EggHatchPrintMessage1(u8* src) { - sub_8002EB0(&sEggHatchData->window, src, sEggHatchData->tileDataStartOffset, 3, 15); + sub_8002EB0(&gEggHatchData->window, src, gEggHatchData->tileDataStartOffset, 3, 15); } static void EggHatchPrintMessage2(u8* src) { - sub_8003460(&sEggHatchData->window, src, sEggHatchData->tileDataStartOffset, 3, 15); + sub_8003460(&gEggHatchData->window, src, gEggHatchData->tileDataStartOffset, 3, 15); } static bool8 EggHatchUpdateWindowText(void) { - return sub_80035AC(&sEggHatchData->window); + return sub_80035AC(&gEggHatchData->window); } -- cgit v1.2.3 From 237d1a8d66172fcd4e5ed55f9dbb0063aa5faa30 Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Mon, 7 Aug 2017 19:38:52 +0200 Subject: SE constants and a file var --- src/hall_of_fame.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c index 40ecdf06d..a04f9d65b 100644 --- a/src/hall_of_fame.c +++ b/src/hall_of_fame.c @@ -3,6 +3,7 @@ #include "task.h" #include "palette.h" #include "sound.h" +#include "songs.h" #include "pokemon.h" #include "text.h" #include "strings.h" @@ -17,8 +18,9 @@ #include "rng.h" #include "trig.h" +static EWRAM_DATA u32 sUnknown_0203931C = 0; + extern u8 ewram[]; -extern u32 gUnknown_0203931C; extern bool8 gUnknown_02039324; // has hall of fame records extern void (*gGameContinueCallback)(void); extern struct MusicPlayerInfo gMPlay_BGM; @@ -455,7 +457,7 @@ static bool8 sub_8141E64(void) if (!gPaletteFade.active) { SetMainCallback2(CB2_HallOfFame); - PlayBGM(436); + PlayBGM(BGM_DENDOU); return 0; } break; @@ -512,7 +514,7 @@ static void sub_8141FF8(u8 taskID) fameMons->mons[i].nick[0] = EOS; } } - gUnknown_0203931C = 0; + sUnknown_0203931C = 0; gTasks[taskID].tDisplayedPoke = 0; gTasks[taskID].data[4] = 0xFF; for (i = 0; i < 6; i++) @@ -565,7 +567,7 @@ static void sub_8142274(u8 taskID) { gGameContinueCallback = sub_8141FC4; TrySavingData(3); - PlaySE(55); + PlaySE(SE_SAVE); gTasks[taskID].func = sub_81422B8; gTasks[taskID].tFrameCount = 32; } @@ -645,11 +647,11 @@ static void sub_8142484(u8 taskID) gTasks[taskID].tFrameCount--; else { - gUnknown_0203931C |= (0x10000 << gSprites[gTasks[taskID].tMonSpriteID(currPokeID)].oam.paletteNum); + sUnknown_0203931C |= (0x10000 << gSprites[gTasks[taskID].tMonSpriteID(currPokeID)].oam.paletteNum); if (gTasks[taskID].tDisplayedPoke <= 4 && currMon[1].species != 0) // there is another pokemon to display { gTasks[taskID].tDisplayedPoke++; - BeginNormalPaletteFade(gUnknown_0203931C, 0, 12, 12, 0x735F); + BeginNormalPaletteFade(sUnknown_0203931C, 0, 12, 12, 0x735F); gSprites[gTasks[taskID].tMonSpriteID(currPokeID)].oam.priority = 1; gTasks[taskID].func = sub_8142320; } @@ -670,7 +672,7 @@ static void sub_8142570(u8 taskID) } MenuZeroFillWindowRect(0, 14, 29, 19); sub_8143068(0, 15); - PlaySE(105); + PlaySE(SE_DENDOU); gTasks[taskID].tFrameCount = 400; gTasks[taskID].func = sub_8142618; } @@ -691,7 +693,7 @@ static void sub_8142618(u8 taskID) if (gTasks[taskID].tMonSpriteID(i) != 0xFF) gSprites[gTasks[taskID].tMonSpriteID(i)].oam.priority = 1; } - BeginNormalPaletteFade(gUnknown_0203931C, 0, 12, 12, 0x735F); + BeginNormalPaletteFade(sUnknown_0203931C, 0, 12, 12, 0x735F); MenuZeroFillWindowRect(0, 14, 29, 19); gTasks[taskID].tFrameCount = 7; gTasks[taskID].func = sub_81426F8; @@ -879,7 +881,7 @@ static void sub_8142B04(u8 taskID) savedTeams++; currMon = &savedTeams->mons[0]; - gUnknown_0203931C = 0; + sUnknown_0203931C = 0; gTasks[taskID].tCurrPokeID = 0; gTasks[taskID].tPokesNo = 0; @@ -952,8 +954,8 @@ static void sub_8142CC8(u8 taskID) currMonID = gTasks[taskID].tMonSpriteID(gTasks[taskID].tCurrPokeID); gSprites[currMonID].oam.priority = 0; - gUnknown_0203931C = (0x10000 << gSprites[currMonID].oam.paletteNum) ^ 0xFFFF0000; - BlendPalettesUnfaded(gUnknown_0203931C, 0xC, 0x735F); + sUnknown_0203931C = (0x10000 << gSprites[currMonID].oam.paletteNum) ^ 0xFFFF0000; + BlendPalettesUnfaded(sUnknown_0203931C, 0xC, 0x735F); currMon = &savedTeams->mons[gTasks[taskID].tCurrPokeID]; if (currMon->species != SPECIES_EGG) -- 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 a50ec1ee05ff46ea8335b982ac501bc9917ec289 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Fri, 11 Aug 2017 16:06:12 -0500 Subject: decompile sub_813265C - sub_81330E8 --- src/learn_move.c | 556 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 556 insertions(+) create mode 100644 src/learn_move.c (limited to 'src') diff --git a/src/learn_move.c b/src/learn_move.c new file mode 100644 index 000000000..fe14cebf6 --- /dev/null +++ b/src/learn_move.c @@ -0,0 +1,556 @@ +#include "global.h" +#include "data2.h" +#include "field_fadetransition.h" +#include "main.h" +#include "menu.h" +#include "menu_cursor.h" +#include "palette.h" +#include "pokemon.h" +#include "rom4.h" +#include "script.h" +#include "songs.h" +#include "sound.h" +#include "sprite.h" +#include "string_util.h" +#include "strings2.h" +#include "task.h" + +struct UnknownStruct1 +{ + const u8 *unk0; + u8 unk4; + u8 unk5; + u8 unk6; +}; + +extern u8 ewram[]; +extern u16 gSpecialVar_0x8004; +extern u16 gSpecialVar_0x8005; +extern u8 gTileBuffer[]; + +extern const struct WindowConfig gWindowConfig_81E6CE4; +extern const struct WindowConfig gWindowConfig_81E7240; +extern const struct UnknownStruct1 gUnknown_08402D08[]; +extern const struct SpriteSheet gUnknown_08402D80; +extern const struct SpritePalette gUnknown_08402D88; + +extern void sub_809D9F0(struct Pokemon *, u8, u8, void *, u32); + +struct Struct2017000 +{ + u8 unk0; + u8 filler1[2]; + u8 unk3; + u8 unk4; + u8 unk5[16]; + u8 filler15[3]; + u8 unk18; + u8 filler19[0x1B-0x19]; + u8 unk1B; + u8 filler1C; + u8 unk1D; + u8 unk1E; + u8 filler1F; + u16 unk20[4]; + u8 filler28[0x2C3-0x28]; + u8 unk2C3; + u8 unk2C4; + u8 unk2C5; + u8 unk2C6; +}; + +extern struct Struct2017000 *gUnknown_030007B0; + +const u16 gDexArrows_Pal[] = INCBIN_U16("graphics/pokedex/arrows.gbapal"); + +const u8 gDexArrows_Gfx[] = INCBIN_U8("graphics/pokedex/arrows.4bpp"); + +const u8 gUnknown_08402CF8[][4] = +{ + { 0, 0, 9, 13}, + {10, 0, 29, 7}, + { 2, 14, 27, 19}, + {10, 8, 29, 13}, +}; + +const struct UnknownStruct1 gUnknown_08402D08[] = +{ + {OtherText_Battle, 1, 1, 0}, + {OtherText_Power, 1, 4, 1}, + {OtherText_Accuracy, 1, 9, 2}, + {NULL, 0, 0, 0}, + {OtherText_Contest, 1, 1, 0}, + {OtherText_Appeal, 1, 4, 1}, + {OtherText_Jam, 1, 9, 2}, + {NULL, 0, 0, 0}, +}; + +void sub_813269C(u8); +void sub_81326D8(void); +void sub_8132870(void); +void sub_8132908(void); +void sub_8132FEC(void); +void sub_8133030(u8); +u8 sub_81330E8(void); +void sub_8133140(u8); +u8 sub_8133248(void); +void sub_81332A0(void); +void sub_8133358(void); +void sub_8133558(void); +void sub_813362C(void); +void sub_8133800(void); +void sub_8133AEC(); +void sub_8133CA4(void); + +void sub_813265C(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void sub_8132670(void) +{ + ScriptContext2_Enable(); + CreateTask(sub_813269C, 10); + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); +} + +void sub_813269C(u8 taskId) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(sub_81326D8); + gFieldCallback = sub_8080990; + DestroyTask(taskId); + } +} + +void sub_81326D8(void) +{ + REG_DISPCNT = 0; + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + gUnknown_030007B0 = (struct Struct2017000 *)(ewram + 0x17000); + sub_81332A0(); + gUnknown_030007B0->unk2C5 = gSpecialVar_0x8004; + sub_8133558(); + SetVBlankCallback(sub_813265C); + + SetUpWindowConfig(&gWindowConfig_81E7240); + InitMenuWindow(&gWindowConfig_81E7240); + MenuZeroFillScreen(); + + SetUpWindowConfig(&gWindowConfig_81E6CE4); + InitMenuWindow(&gWindowConfig_81E6CE4); + MenuZeroFillScreen(); + + REG_BG0VOFS = 0; + REG_BG0VOFS = 0; // huh? + REG_BG1HOFS = 0; + REG_BG1HOFS = 0; // huh? + + LoadSpriteSheet(&gUnknown_08402D80); + LoadSpritePalette(&gUnknown_08402D88); + sub_8133358(); + FillPalette(0, 0, 2); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + SetMainCallback2(sub_8132870); +} + +void sub_81327A4(void) +{ + ResetSpriteData(); + FreeAllSpritePalettes(); + ResetTasks(); + gUnknown_030007B0 = (struct Struct2017000 *)(ewram + 0x17000); + sub_8133558(); + gUnknown_030007B0->unk2C6 = gSpecialVar_0x8005; + SetVBlankCallback(sub_813265C); + + SetUpWindowConfig(&gWindowConfig_81E7240); + InitMenuWindow(&gWindowConfig_81E7240); + MenuZeroFillScreen(); + + SetUpWindowConfig(&gWindowConfig_81E6CE4); + InitMenuWindow(&gWindowConfig_81E6CE4); + MenuZeroFillScreen(); + + REG_DISPCNT = 0x1340; + REG_BG0VOFS = 0; + REG_BG0HOFS = 0; + REG_BG1HOFS = 0; + REG_BG1HOFS = 0; // huh? + + LoadSpriteSheet(&gUnknown_08402D80); + LoadSpritePalette(&gUnknown_08402D88); + sub_8133358(); + FillPalette(0, 0, 2); + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); + SetMainCallback2(sub_8132870); +} + +void sub_8132870(void) +{ + sub_8132908(); + if (gUnknown_030007B0->unk1D != 0) + { + gUnknown_030007B0->unk1D = 0; + sub_814AD7C(0x58, (gUnknown_030007B0->unk18 * 2 + 1) * 8); + } + if (gUnknown_030007B0->unk1E != 0) + { + gUnknown_030007B0->unk1E = 0; + sub_8133800(); + } + if (gUnknown_030007B0->unk2C3 != 0) + { + sub_8133AEC(gUnknown_030007B0->unk2C4, 1); + gUnknown_030007B0->unk2C3 = 0; + } + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + UpdatePaletteFade(); +} + +void sub_81328E8(const u8 *a) +{ + StringExpandPlaceholders(gStringVar4, a); + MenuPrintMessage(gStringVar4, 3, 15); +} + +void sub_8132908(void) +{ + switch (gUnknown_030007B0->unk0) + { + case 0: + gUnknown_030007B0->unk0++; + sub_8132FEC(); + sub_8133030(0); + sub_8133800(); + gSprites[1].pos1.x = 0x48; + gUnknown_030007B0->unk2C3 = 1; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + REG_DISPCNT = 0x1340; + break; + case 1: + if (!gPaletteFade.active) + gUnknown_030007B0->unk0 = 4; + break; + case 2: + gUnknown_030007B0->unk0++; + break; + case 3: + sub_8133030(0); + sub_8133800(); + gUnknown_030007B0->unk2C3 = 1; + gUnknown_030007B0->unk0++; + gSprites[1].pos1.x = 0x48; + break; + case 4: + if (sub_81330E8() == 0) + sub_813362C(); + return; + case 5: + sub_8133140(0); + sub_8133800(); + gUnknown_030007B0->unk2C3 = 1; + gSprites[1].pos1.x = 0x48; + gUnknown_030007B0->unk0++; + break; + case 6: + if (sub_8133248() == 0) + sub_813362C(); + break; + case 8: + if (MenuUpdateWindowText()) + { + DisplayYesNoMenu(21, 7, 1); + gUnknown_030007B0->unk0++; + } + break; + case 9: + { + s8 var = ProcessMenuInputNoWrap_(); + + if (var == 0) + { + sub_8133CA4(); + if (GiveMoveToMon(&gPlayerParty[gUnknown_030007B0->unk2C5], gUnknown_030007B0->unk20[gUnknown_030007B0->unk1B]) != 0xFFFF) + { + sub_81328E8(gOtherText_PokeLearnedMove); + gSpecialVar_0x8004 = 1; + gUnknown_030007B0->unk0 = 31; + } + else + { + gUnknown_030007B0->unk0 = 16; + } + } + else if (var == -1 || var == 1) + { + sub_8133CA4(); + if (gUnknown_030007B0->unk2C4 == 0) + gUnknown_030007B0->unk0 = 3; + if (gUnknown_030007B0->unk2C4 == 1) + gUnknown_030007B0->unk0 = 5; + } + } + break; + case 12: + if (MenuUpdateWindowText()) + { + DisplayYesNoMenu(21, 7, 1); + gUnknown_030007B0->unk0++; + } + break; + case 13: + { + s8 r4 = ProcessMenuInputNoWrap_(); + + if (r4 == 0) + { + sub_8133CA4(); + gSpecialVar_0x8004 = r4; + gUnknown_030007B0->unk0 = 14; + } + else if (r4 == -1 || r4 == 1) + { + sub_8133CA4(); + if (gUnknown_030007B0->unk2C4 == 0) + gUnknown_030007B0->unk0 = 3; + if (gUnknown_030007B0->unk2C4 == 1) + gUnknown_030007B0->unk0 = 5; + } + } + break; + case 16: + sub_81328E8(gOtherText_DeleteOlderMove); + gUnknown_030007B0->unk0++; + break; + case 17: + if (MenuUpdateWindowText()) + { + DisplayYesNoMenu(21, 7, 1); + gUnknown_030007B0->unk0 = 18; + } + break; + case 18: + { + s8 var = ProcessMenuInputNoWrap_(); + + if (var == 0) + { + sub_8133CA4(); + sub_81328E8(gOtherText_WhichMoveToForget); + gUnknown_030007B0->unk0 = 19; + } + else if (var == -1 || var == 1) + { + sub_8133CA4(); + gUnknown_030007B0->unk0 = 24; + } + } + break; + case 24: + sub_81328E8(gOtherText_StopLearningMove); + gUnknown_030007B0->unk0++; + break; + case 25: + if (MenuUpdateWindowText()) + { + gUnknown_030007B0->unk0 = 26; + DisplayYesNoMenu(21, 7, 1); + } + break; + case 26: + { + s8 var = ProcessMenuInputNoWrap_(); + + if (var == 0) + { + sub_8133CA4(); + gUnknown_030007B0->unk0 = 27; + } + else if (var == -1 || var == 1) + { + sub_8133CA4(); + + // What's the point? It gets set to 16, anyway. + if (gUnknown_030007B0->unk2C4 == 0) + gUnknown_030007B0->unk0 = 3; + if (gUnknown_030007B0->unk2C4 == 1) + gUnknown_030007B0->unk0 = 5; + gUnknown_030007B0->unk0 = 16; + } + } + break; + case 27: + if (MenuUpdateWindowText()) + { + if (gUnknown_030007B0->unk2C4 == 0) + gUnknown_030007B0->unk0 = 3; + if (gUnknown_030007B0->unk2C4 == 1) + gUnknown_030007B0->unk0 = 5; + } + break; + case 19: + if (MenuUpdateWindowText()) + { + gUnknown_030007B0->unk0 = 20; + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + } + break; + case 20: + if (!gPaletteFade.active) + { + sub_809D9F0(gPlayerParty, gUnknown_030007B0->unk2C5, gPlayerPartyCount - 1, sub_81327A4, gUnknown_030007B0->unk20[gUnknown_030007B0->unk1B]); + gUnknown_030007B0->unk0 = 28; + } + break; + case 21: + if (MenuUpdateWindowText()) + gUnknown_030007B0->unk0 = 14; + break; + case 22: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + break; + case 14: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); + gUnknown_030007B0->unk0++; + break; + case 15: + if (!gPaletteFade.active) + SetMainCallback2(c2_exit_to_overworld_2_switch); + break; + case 28: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); + gUnknown_030007B0->unk0++; + sub_8132FEC(); + sub_8133800(); + if (gUnknown_030007B0->unk2C4 == 0) + sub_8133030(1); + if (gUnknown_030007B0->unk2C4 == 1) + { + gSprites[1].pos1.x = 0x48; + sub_8133140(1); + } + sub_8133AEC(gUnknown_030007B0->unk2C4, 1); + break; + case 29: + if (!gPaletteFade.active) + { + if (gUnknown_030007B0->unk2C6 == 4) + { + gUnknown_030007B0->unk0 = 24; + } + else + { + u16 moveId = GetMonData(&gPlayerParty[gUnknown_030007B0->unk2C5], MON_DATA_MOVE1 + gUnknown_030007B0->unk2C6); + + StringCopy(gStringVar3, gMoveNames[moveId]); + RemoveMonPPBonus(&gPlayerParty[gUnknown_030007B0->unk2C5], gUnknown_030007B0->unk2C6); + SetMonMoveSlot(&gPlayerParty[gUnknown_030007B0->unk2C5], gUnknown_030007B0->unk20[gUnknown_030007B0->unk1B], gUnknown_030007B0->unk2C6); + StringCopy(gStringVar2, gMoveNames[gUnknown_030007B0->unk20[gUnknown_030007B0->unk1B]]); + sub_81328E8(gOtherText_ForgotMove123); + gUnknown_030007B0->unk0 = 30; + gSpecialVar_0x8004 = 1; + } + } + break; + case 30: + if (MenuUpdateWindowText()) + { +#ifdef ENGLISH + sub_81328E8(gOtherText_ForgotOrDidNotLearnMove); +#else + sub_81328E8(deuOtherText_ForgotAndLearned); +#endif + gUnknown_030007B0->unk0 = 31; + PlayFanfare(BGM_FANFA1); + } + break; + case 31: + if (MenuUpdateWindowText()) + { + PlayFanfare(BGM_FANFA1); + gUnknown_030007B0->unk0 = 32; + } + break; + case 32: + if (IsFanfareTaskInactive()) + gUnknown_030007B0->unk0 = 33; + break; + case 33: + if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + gUnknown_030007B0->unk0 = 14; + } + break; + } +} + +void sub_8132FEC(void) +{ + u32 i; + + BasicInitMenuWindow(&gWindowConfig_81E7240); + for (i = 0; i < 4; i++) + { + MenuDrawTextWindow( + gUnknown_08402CF8[i][0], + gUnknown_08402CF8[i][1], + gUnknown_08402CF8[i][2], + gUnknown_08402CF8[i][3]); + } + BasicInitMenuWindow(&gWindowConfig_81E6CE4); +} + +void sub_8133030(bool8 a) +{ + s32 i; + + gSprites[gUnknown_030007B0->unk3].invisible = FALSE; + gSprites[gUnknown_030007B0->unk4].invisible = FALSE; + for (i = 0; i < 16; i++) + { + // Hmm... + gSprites[*((u8 *)gUnknown_030007B0 + i + 7)].invisible = TRUE; + } + for (i = 0; gUnknown_08402D08[i].unk0 != NULL; i++) + { + sub_8072C74(gTileBuffer, gUnknown_08402D08[i].unk0, 64, 2); + MenuPrint(gTileBuffer, gUnknown_08402D08[i].unk4, gUnknown_08402D08[i].unk5); + } + if (!a) + { + sub_8072AB0(gOtherText_TeachWhichMove, 24, 120, 192, 32, 1); + } +} + +u8 sub_81330E8(void) +{ + u32 r4 = ((gMain.newKeys & 0x30) != 0); + + if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR + && (gMain.newKeys & 0x300)) + r4++; + + if (r4 != 0) + { + PlaySE(SE_SELECT); + gUnknown_030007B0->unk0 = 5; + gUnknown_030007B0->unk2C4 = 1; + } + + return r4; +} -- cgit v1.2.3 From f3b6f3c2738a9a1d7e1167b4078355c59cce8074 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 12 Aug 2017 12:39:45 -0500 Subject: finish decompiling learn_move --- src/learn_move.c | 460 ++++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 437 insertions(+), 23 deletions(-) (limited to 'src') diff --git a/src/learn_move.c b/src/learn_move.c index fe14cebf6..01a37fe70 100644 --- a/src/learn_move.c +++ b/src/learn_move.c @@ -12,8 +12,10 @@ #include "sound.h" #include "sprite.h" #include "string_util.h" +#include "strings.h" #include "strings2.h" #include "task.h" +#include "trig.h" struct UnknownStruct1 { @@ -30,7 +32,6 @@ extern u8 gTileBuffer[]; extern const struct WindowConfig gWindowConfig_81E6CE4; extern const struct WindowConfig gWindowConfig_81E7240; -extern const struct UnknownStruct1 gUnknown_08402D08[]; extern const struct SpriteSheet gUnknown_08402D80; extern const struct SpritePalette gUnknown_08402D88; @@ -39,20 +40,27 @@ extern void sub_809D9F0(struct Pokemon *, u8, u8, void *, u32); struct Struct2017000 { u8 unk0; - u8 filler1[2]; - u8 unk3; - u8 unk4; + u8 filler1; + u8 unk2; + u8 unk3[2]; + //u8 unk4; u8 unk5[16]; u8 filler15[3]; u8 unk18; - u8 filler19[0x1B-0x19]; + u8 unk19; + u8 unk1A; u8 unk1B; - u8 filler1C; + u8 unk1C; u8 unk1D; u8 unk1E; u8 filler1F; - u16 unk20[4]; - u8 filler28[0x2C3-0x28]; + //u16 unk20[4]; + //u8 filler28[0x2C3-0x28]; + u16 unk20[20]; + u8 filler48[0x52-0x48]; + //u8 unk52[0x2C3-0x52]; + u8 unk52[6][0x19]; + u8 fillerE8[0x2C3-0xE8]; u8 unk2C3; u8 unk2C4; u8 unk2C5; @@ -73,16 +81,20 @@ const u8 gUnknown_08402CF8[][4] = {10, 8, 29, 13}, }; -const struct UnknownStruct1 gUnknown_08402D08[] = +const struct UnknownStruct1 gUnknown_08402D08[][4] = { - {OtherText_Battle, 1, 1, 0}, - {OtherText_Power, 1, 4, 1}, - {OtherText_Accuracy, 1, 9, 2}, - {NULL, 0, 0, 0}, - {OtherText_Contest, 1, 1, 0}, - {OtherText_Appeal, 1, 4, 1}, - {OtherText_Jam, 1, 9, 2}, - {NULL, 0, 0, 0}, + { + {OtherText_Battle, 1, 1, 0}, + {OtherText_Power, 1, 4, 1}, + {OtherText_Accuracy, 1, 9, 2}, + {NULL, 0, 0, 0}, + }, + { + {OtherText_Contest, 1, 1, 0}, + {OtherText_Appeal, 1, 4, 1}, + {OtherText_Jam, 1, 9, 2}, + {NULL, 0, 0, 0}, + }, }; void sub_813269C(u8); @@ -99,7 +111,7 @@ void sub_8133358(void); void sub_8133558(void); void sub_813362C(void); void sub_8133800(void); -void sub_8133AEC(); +void sub_8133AEC(u8, int); void sub_8133CA4(void); void sub_813265C(void) @@ -519,17 +531,17 @@ void sub_8133030(bool8 a) { s32 i; - gSprites[gUnknown_030007B0->unk3].invisible = FALSE; - gSprites[gUnknown_030007B0->unk4].invisible = FALSE; + gSprites[gUnknown_030007B0->unk3[0]].invisible = FALSE; + gSprites[gUnknown_030007B0->unk3[1]].invisible = FALSE; for (i = 0; i < 16; i++) { // Hmm... gSprites[*((u8 *)gUnknown_030007B0 + i + 7)].invisible = TRUE; } - for (i = 0; gUnknown_08402D08[i].unk0 != NULL; i++) + for (i = 0; gUnknown_08402D08[0][i].unk0 != NULL; i++) { - sub_8072C74(gTileBuffer, gUnknown_08402D08[i].unk0, 64, 2); - MenuPrint(gTileBuffer, gUnknown_08402D08[i].unk4, gUnknown_08402D08[i].unk5); + sub_8072C74(gTileBuffer, gUnknown_08402D08[0][i].unk0, 64, 2); + MenuPrint(gTileBuffer, gUnknown_08402D08[0][i].unk4, gUnknown_08402D08[0][i].unk5); } if (!a) { @@ -554,3 +566,405 @@ u8 sub_81330E8(void) return r4; } + +void sub_8133140(bool8 a) +{ + s32 i; + + gSprites[gUnknown_030007B0->unk3[0]].invisible = FALSE; + gSprites[gUnknown_030007B0->unk3[1]].invisible = FALSE; + for (i = 0; i < 16; i++) + { + // Hmm... + gSprites[*((u8 *)gUnknown_030007B0 + i + 7)].invisible = FALSE; + } + for (i = 0; gUnknown_08402D08[0][i].unk0 != NULL; i++) + { + sub_8072C74(gTileBuffer, gUnknown_08402D08[1][i].unk0, 64, 2); + MenuPrint(gTileBuffer, gUnknown_08402D08[1][i].unk4, gUnknown_08402D08[1][i].unk5); + if (i != 0) + { + MenuZeroFillWindowRect( + gUnknown_08402D08[1][i].unk4, + gUnknown_08402D08[1][i].unk5 + 2, + gUnknown_08402D08[1][i].unk4 + 7, + gUnknown_08402D08[1][i].unk5 + 3); + } + } + if (!a) + sub_8072AB0(gOtherText_TeachWhichMove, 24, 120, 192, 32, 1); +} + +u8 sub_8133248(void) +{ + u32 r4 = ((gMain.newKeys & 0x30) != 0); + + if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR + && (gMain.newKeys & 0x300)) + r4++; + + if (r4 != 0) + { + PlaySE(SE_SELECT); + gUnknown_030007B0->unk0 = 3; + gUnknown_030007B0->unk2C4 = 0; + } + + return r4; +} + +void sub_81332A0(void) +{ + s32 i; + + gUnknown_030007B0->unk0 = 0; + gUnknown_030007B0->unk2 = 0; + gUnknown_030007B0->unk19 = 0; + gUnknown_030007B0->unk18 = 0; + gUnknown_030007B0->unk1C = 0; + gUnknown_030007B0->unk1A = 0; + gUnknown_030007B0->unk1B = 0; + gUnknown_030007B0->unk1D = 0; + gUnknown_030007B0->unk1E = 0; + gUnknown_030007B0->unk2C3 = 0; + gUnknown_030007B0->unk2C4 = 0; + for (i = 0; i < 20; i++) + gUnknown_030007B0->unk20[i] = 0; +} + +void sub_8133300(struct Sprite *sprite) +{ + s16 var = (sprite->data1 * 10) & 0xFF; + + switch (sprite->data0) + { + case 0: + break; + case 1: + sprite->pos2.x = Sin(var, 3) * sprite->data2; + break; + case 2: + sprite->pos2.y = Sin(var, 1) * sprite->data2; + break; + } + sprite->data1++; +} + +extern const struct SpriteTemplate gSpriteTemplate_8402D90; +extern const struct SpriteTemplate gSpriteTemplate_8402DC0; +extern const struct SpriteTemplate gSpriteTemplate_8402E08; + +void sub_8133358(void) +{ + s32 i; + + gUnknown_030007B0->unk3[0] = CreateSprite(&gSpriteTemplate_8402D90, 8, 16, 0); + gSprites[gUnknown_030007B0->unk3[0]].data0 = 1; + gSprites[gUnknown_030007B0->unk3[0]].data2 = -1; + + gUnknown_030007B0->unk3[1] = CreateSprite(&gSpriteTemplate_8402D90, 72, 16, 0); + StartSpriteAnim(&gSprites[gUnknown_030007B0->unk3[1]], 1); + gSprites[gUnknown_030007B0->unk3[1]].data0 = 1; + gSprites[gUnknown_030007B0->unk3[1]].data2 = 1; + + gUnknown_030007B0->unk3[2] = CreateSprite(&gSpriteTemplate_8402DC0, 160, 4, 0); + StartSpriteAnim(&gSprites[gUnknown_030007B0->unk3[2]], 1); + gSprites[gUnknown_030007B0->unk3[2]].data0 = 2; + gSprites[gUnknown_030007B0->unk3[2]].data2 = -1; + + gUnknown_030007B0->unk3[3] = CreateSprite(&gSpriteTemplate_8402DC0, 160, 60, 0); + gSprites[gUnknown_030007B0->unk3[3]].data0 = 2; + gSprites[gUnknown_030007B0->unk3[3]].data2 = 1; + + for (i = 0; i < 8; i++) + { + gUnknown_030007B0->unk3[i + 4] = CreateSprite(&gSpriteTemplate_8402E08, (i - (i / 4) * 4) * 8 + 0x1C, (i / 4) * 8 + 0x34, 0); + StartSpriteAnim(&gSprites[gUnknown_030007B0->unk3[i + 4]], 2); + } + + for (i = 0; i < 8; i++) + { + gUnknown_030007B0->unk3[i + 12] = CreateSprite(&gSpriteTemplate_8402E08, (i - (i / 4) * 4) * 8 + 0x1C, (i / 4) * 8 + 0x5C, 0); + StartSpriteAnim(&gSprites[gUnknown_030007B0->unk3[i + 12]], 2); + } + + for (i = 0; i < 20; i++) + gSprites[gUnknown_030007B0->unk3[i]].invisible = TRUE; + + CreateBlendedOutlineCursor(16, 0xFFFF, 12, 0x2D9F, 18); +} + +void sub_8133558(void) +{ + s32 i; + u8 nickname[POKEMON_NAME_LENGTH + 1]; + + gUnknown_030007B0->unk1A = GetMoveRelearnerMoves(&gPlayerParty[gUnknown_030007B0->unk2C5], gUnknown_030007B0->unk20); + for (i = 0; i < gUnknown_030007B0->unk1A; i++) + StringCopy(gUnknown_030007B0->unk52[i], gMoveNames[gUnknown_030007B0->unk20[i]]); + GetMonData(&gPlayerParty[gUnknown_030007B0->unk2C5], MON_DATA_NICKNAME, nickname); + StringCopy10(gStringVar1, nickname); + StringCopy(gUnknown_030007B0->unk52[gUnknown_030007B0->unk1A], gUnknownText_Exit); + gUnknown_030007B0->unk1A++; +} + +void sub_813360C(s8 a) +{ + gUnknown_030007B0->unk1C = gUnknown_030007B0->unk18; + gUnknown_030007B0->unk18 += a; + gUnknown_030007B0->unk1D = 1; +} + +void sub_813362C(void) +{ + if (gMain.newAndRepeatedKeys & 0x40) + { + if (gUnknown_030007B0->unk1B != 0) + { + PlaySE(SE_SELECT); + gUnknown_030007B0->unk1B--; + gUnknown_030007B0->unk2C3 = 1; + if (gUnknown_030007B0->unk18 != 0) + { + sub_813360C(-1); + } + else if (gUnknown_030007B0->unk19 != 0) + { + gUnknown_030007B0->unk19--; + gUnknown_030007B0->unk1E++; + } + } + } + else if (gMain.newAndRepeatedKeys & 0x80) + { + if (gUnknown_030007B0->unk1B < gUnknown_030007B0->unk1A - 1) + { + PlaySE(SE_SELECT); + gUnknown_030007B0->unk1B++; + gUnknown_030007B0->unk2C3 = 1; + if (gUnknown_030007B0->unk18 != 2) + { + sub_813360C(1); + } + else if (gUnknown_030007B0->unk19 != gUnknown_030007B0->unk1A - 3) + { + gUnknown_030007B0->unk19++; + gUnknown_030007B0->unk1E++; + } + } + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (gUnknown_030007B0->unk1B != gUnknown_030007B0->unk1A - 1) + { + gUnknown_030007B0->unk0 = 8; + StringCopy(gStringVar2, gUnknown_030007B0->unk52[gUnknown_030007B0->unk1B]); + StringExpandPlaceholders(gStringVar4, gOtherText_TeachSpecificMove); + MenuPrintMessage(gStringVar4, 3, 15); + } + else + { + StringExpandPlaceholders(gStringVar4, gOtherText_GiveUpTeachingMove); + MenuPrintMessage(gStringVar4, 3, 15); + gUnknown_030007B0->unk0 = 12; + } + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + gUnknown_030007B0->unk0 = 12; + StringExpandPlaceholders(gStringVar4, gOtherText_GiveUpTeachingMove); + MenuPrintMessage(gStringVar4, 3, 15); + } + if (gUnknown_030007B0->unk1A > 3) + { + gSprites[2].invisible = FALSE; + gSprites[3].invisible = FALSE; + if (gUnknown_030007B0->unk19 == 0) + gSprites[2].invisible = TRUE; + else if (gUnknown_030007B0->unk19 == gUnknown_030007B0->unk1A - 3) + gSprites[3].invisible = TRUE; + } +} + +extern const u8 *const gUnknown_083CAF70[]; + +struct ContestMove +{ + u8 effect; + u8 contestCategory:3; + u8 comboStarterId; + u8 comboMoves[4]; +}; + +extern const struct ContestMove gContestMoves[]; +extern const u8 gTypeNames[][7]; + +void sub_8133800(void) +{ + u8 r6 = gUnknown_030007B0->unk19; + u8 *str = gTileBuffer; + s32 i; + + for (i = 0; i < 3; i++) + { + if (r6 >= gUnknown_030007B0->unk1A) + { + str = sub_8072C74(str, gEmptyString_81E72B0, 0x90, 0); + } + else if (r6 == gUnknown_030007B0->unk1A - 1) + { + str = sub_8072C74(str, gUnknownText_Exit, 0x90, 0); + } + else + { + u16 moveId = gUnknown_030007B0->unk20[r6]; + + if (gUnknown_030007B0->unk2C4 != 0) + str = sub_8072C74(str, gUnknown_083CAF70[gContestMoves[moveId].contestCategory], 0x27, 0); + else + str = sub_8072C74(str, gTypeNames[gBattleMoves[moveId].type], 0x27, 0); + + str = sub_8072C74(str, gUnknown_030007B0->unk52[r6], 0x72, 0); + + str[0] = 0xCA; + str[1] = 0xCA; + str[2] = 0xBA; + str += 3; + + str = sub_8072C14(str, gBattleMoves[moveId].pp, 0x90, 0); + } + *str++ = 0xFE; + r6++; + } + *str = 0xFF; + MenuPrint(gTileBuffer, 11, 1); + sub_813360C(0); +} + +struct ContestEffect +{ + u8 effectType; + u8 appeal; + u8 jam; +}; + +extern const struct ContestEffect gContestEffects[]; + +void sub_8133940(u16 a, const u8 *b) +{ + u8 str[0x34]; + u8 numHearts; + u8 i; + + StringCopy(str, gExpandedPlaceholder_Empty); + switch (b[2]) + { + case 1: + break; + case 2: + if (gBattleMoves[a].power < 2) + sub_8072C74(str, gOtherText_ThreeDashes2, 32, 2); + else + sub_8072C14(str, gBattleMoves[a].power, 32, 2); + MenuPrint(str, b[0], b[1]); + break; + case 4: + if (gBattleMoves[a].accuracy == 0) + sub_8072C74(str, gOtherText_ThreeDashes2, 32, 2); + else + sub_8072C14(str, gBattleMoves[a].accuracy, 32, 2); + MenuPrint(str, b[0], b[1]); + break; + case 6: + MenuZeroFillWindowRect(b[0], b[1], b[0], b[1] + 1); + numHearts = gContestEffects[gContestMoves[a].effect].appeal / 10; + if (numHearts == 255) + numHearts = 0; + for (i = 0; i < 8; i++) + { + if (i < numHearts) + StartSpriteAnim(&gSprites[gUnknown_030007B0->unk3[i + 4]], 1); + else + StartSpriteAnim(&gSprites[gUnknown_030007B0->unk3[i + 4]], 0); + } + break; + case 7: + MenuZeroFillWindowRect(b[0], b[1], b[0], b[1] + 1); + numHearts = gContestEffects[gContestMoves[a].effect].jam / 10; + if (numHearts == 255) + numHearts = 0; + for (i = 0; i < 8; i++) + { + if (i < numHearts) + StartSpriteAnim(&gSprites[gUnknown_030007B0->unk3[i + 12]], 3); + else + StartSpriteAnim(&gSprites[gUnknown_030007B0->unk3[i + 12]], 2); + } + break; + } +} + +extern const u8 gUnknown_08402E24[][3]; +extern const u8 gUnknown_08402E3D[]; +extern const u8 gUnknown_08402E39[]; + +extern const u8 *const gUnknown_083CADD4[]; +extern const u8 *const gMoveDescriptions[]; + +void sub_8133AEC(u8 a, int unused) +{ + u16 i; + + if (gUnknown_030007B0->unk1B != gUnknown_030007B0->unk1A - 1) + { + u16 r5 = gUnknown_030007B0->unk20[gUnknown_030007B0->unk1B]; + + if (a != 0) + { + for (i = 0; i < 16; i++) + gSprites[gUnknown_030007B0->unk3[i + 4]].invisible = FALSE; + for (i = 0; i < 3; i++) + sub_8133940(r5, gUnknown_08402E24[gUnknown_08402E3D[i]]); + sub_8072AB0(gUnknown_083CADD4[gContestMoves[r5].effect], 0x58, 0x48, 0x90, 32, 1); + } + //_08133BA0 + else + { + u8 var; + + for (i = 0; i < 4; i++) + sub_8133940(r5, gUnknown_08402E24[gUnknown_08402E39[i]]); + var = sub_8072A18(gMoveDescriptions[r5 - 1], 0x58, 0x48, 0x90, 1); + if (var < 2) + { + u8 r1 = var * 2 + 9; + + MenuFillWindowRectWithBlankTile(11, r1, 28, 12); + } + } + } + else + { + if (a != 0) + { + MenuZeroFillWindowRect(gUnknown_08402E24[5][0], gUnknown_08402E24[5][1], gUnknown_08402E24[5][0], gUnknown_08402E24[5][1] + 1); + MenuZeroFillWindowRect(gUnknown_08402E24[6][0], gUnknown_08402E24[6][1], gUnknown_08402E24[6][0], gUnknown_08402E24[6][1] + 1); + for (i = 0; i < 16; i++) + gSprites[gUnknown_030007B0->unk3[i + 4]].invisible = TRUE; + } + else + { + MenuZeroFillWindowRect(gUnknown_08402E24[1][0], gUnknown_08402E24[1][1], gUnknown_08402E24[1][0] + 3, gUnknown_08402E24[1][1] + 1); + MenuZeroFillWindowRect(gUnknown_08402E24[3][0], gUnknown_08402E24[3][1], gUnknown_08402E24[3][0] + 3, gUnknown_08402E24[3][1] + 1); + } + MenuZeroFillWindowRect(11, 9, 28, 12); + } +} + +void sub_8133CA4(void) +{ + MenuZeroFillWindowRect(21, 7, 27, 12); + sub_8133AEC(gUnknown_030007B0->unk2C4, 0); +} -- cgit v1.2.3 From 11f590a1e88eed99b24439d246110356142cc9eb Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 12 Aug 2017 13:20:23 -0500 Subject: move ROM data into learn_move.c --- src/learn_move.c | 133 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 129 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/learn_move.c b/src/learn_move.c index 01a37fe70..a83d7a491 100644 --- a/src/learn_move.c +++ b/src/learn_move.c @@ -97,6 +97,135 @@ const struct UnknownStruct1 gUnknown_08402D08[][4] = }, }; +// XXX: What are these for? +const u32 unkDataFF00FFEF = 0xFF00FFEF; +const u8 *const gTileBuffer_ = gTileBuffer; + +const struct OamData gOamData_8402D50 = {.shape = 0}; +const struct OamData gOamData_8402D58 = {.shape = 2}; +const struct OamData gOamData_8402D60 = {.shape = 1}; + +const union AnimCmd gSpriteAnim_8402D68[] = +{ + ANIMCMD_FRAME(2, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_8402D70[] = +{ + ANIMCMD_FRAME(0, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_8402D78[] = +{ + gSpriteAnim_8402D68, + gSpriteAnim_8402D70, +}; + +const struct SpriteSheet gUnknown_08402D80 = {gDexArrows_Gfx, sizeof(gDexArrows_Gfx), 5525}; +const struct SpritePalette gUnknown_08402D88 = {gDexArrows_Pal, 5526}; + +void sub_8133300(struct Sprite *); +const struct SpriteTemplate gSpriteTemplate_8402D90 = +{ + .tileTag = 5525, + .paletteTag = 5526, + .oam = &gOamData_8402D58, + .anims = gSpriteAnimTable_8402D78, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8133300, +}; + +const union AnimCmd gSpriteAnim_8402DA8[] = +{ + ANIMCMD_FRAME(4, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_8402DB0[] = +{ + ANIMCMD_FRAME(6, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_8402DB8[] = +{ + gSpriteAnim_8402DA8, + gSpriteAnim_8402DB0, +}; + +const struct SpriteTemplate gSpriteTemplate_8402DC0 = +{ + .tileTag = 5525, + .paletteTag = 5526, + .oam = &gOamData_8402D60, + .anims = gSpriteAnimTable_8402DB8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8133300, +}; + +const union AnimCmd gSpriteAnim_8402DD8[] = +{ + ANIMCMD_FRAME(8, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_8402DE0[] = +{ + ANIMCMD_FRAME(9, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_8402DE8[] = +{ + ANIMCMD_FRAME(10, 5), + ANIMCMD_END, +}; + +const union AnimCmd gSpriteAnim_8402DF0[] = +{ + ANIMCMD_FRAME(11, 5), + ANIMCMD_END, +}; + +const union AnimCmd *const gSpriteAnimTable_8402DF8[] = +{ + gSpriteAnim_8402DD8, + gSpriteAnim_8402DE0, + gSpriteAnim_8402DE8, + gSpriteAnim_8402DF0, +}; + +const struct SpriteTemplate gSpriteTemplate_8402E08 = +{ + .tileTag = 5525, + .paletteTag = 5526, + .oam = &gOamData_8402D50, + .anims = gSpriteAnimTable_8402DF8, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_8133300, +}; + +const u8 gString_AkitoMori[] = _("あきと"); // programmer Akito Mori? + +const u8 gUnknown_08402E24[7][3] = +{ + {11, 1, 1}, + { 3, 6, 2}, + {24, 1, 3}, + { 3, 11, 4}, + { 5, 4, 5}, + { 3, 6, 6}, + { 3, 11, 7}, +}; + +const u8 gUnknown_08402E39[] = {0, 1, 2, 3}; +const u8 gUnknown_08402E3D[] = {4, 5, 6}; + void sub_813269C(u8); void sub_81326D8(void); void sub_8132870(void); @@ -906,10 +1035,6 @@ void sub_8133940(u16 a, const u8 *b) } } -extern const u8 gUnknown_08402E24[][3]; -extern const u8 gUnknown_08402E3D[]; -extern const u8 gUnknown_08402E39[]; - extern const u8 *const gUnknown_083CADD4[]; extern const u8 *const gMoveDescriptions[]; -- 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 81274f41e1730f34d2929baa3b3f95d83145a97d Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 12 Aug 2017 18:55:06 -0500 Subject: clean up learn_move.c a bit --- src/learn_move.c | 578 +++++++++++++++++++++++++++---------------------------- 1 file changed, 280 insertions(+), 298 deletions(-) (limited to 'src') diff --git a/src/learn_move.c b/src/learn_move.c index a83d7a491..71de9910a 100644 --- a/src/learn_move.c +++ b/src/learn_move.c @@ -17,57 +17,63 @@ #include "task.h" #include "trig.h" -struct UnknownStruct1 -{ - const u8 *unk0; - u8 unk4; - u8 unk5; - u8 unk6; -}; - extern u8 ewram[]; extern u16 gSpecialVar_0x8004; extern u16 gSpecialVar_0x8005; extern u8 gTileBuffer[]; +struct ContestMove +{ + u8 effect; + u8 contestCategory:3; + u8 comboStarterId; + u8 comboMoves[4]; +}; + +struct ContestEffect +{ + u8 effectType; + u8 appeal; + u8 jam; +}; + +extern const struct ContestMove gContestMoves[]; +extern const struct ContestEffect gContestEffects[]; extern const struct WindowConfig gWindowConfig_81E6CE4; extern const struct WindowConfig gWindowConfig_81E7240; -extern const struct SpriteSheet gUnknown_08402D80; -extern const struct SpritePalette gUnknown_08402D88; +extern const u8 *const gUnknown_083CADD4[]; +extern const u8 *const gMoveDescriptions[]; +extern const u8 gTypeNames[][7]; +extern const u8 *const gUnknown_083CAF70[]; extern void sub_809D9F0(struct Pokemon *, u8, u8, void *, u32); -struct Struct2017000 +struct LearnMoveStruct { - u8 unk0; + u8 state; u8 filler1; u8 unk2; - u8 unk3[2]; - //u8 unk4; - u8 unk5[16]; - u8 filler15[3]; + u8 spriteIDs[20]; + u8 filler17[1]; u8 unk18; u8 unk19; - u8 unk1A; - u8 unk1B; + u8 numMenuChoices; + u8 menuSelection; u8 unk1C; - u8 unk1D; + bool8 unk1D; u8 unk1E; u8 filler1F; - //u16 unk20[4]; - //u8 filler28[0x2C3-0x28]; - u16 unk20[20]; + /*0x020*/ u16 movesToLearn[20]; u8 filler48[0x52-0x48]; - //u8 unk52[0x2C3-0x52]; - u8 unk52[6][0x19]; + u8 moveNames[6][0x19]; u8 fillerE8[0x2C3-0xE8]; - u8 unk2C3; - u8 unk2C4; - u8 unk2C5; + bool8 unk2C3; + bool8 showContestInfo; + /*0x2C5*/ u8 partyMon; u8 unk2C6; }; -extern struct Struct2017000 *gUnknown_030007B0; +static struct LearnMoveStruct *sLearnMoveStruct; const u16 gDexArrows_Pal[] = INCBIN_U16("graphics/pokedex/arrows.gbapal"); @@ -81,6 +87,14 @@ const u8 gUnknown_08402CF8[][4] = {10, 8, 29, 13}, }; +struct UnknownStruct1 +{ + const u8 *unk0; + u8 unk4; + u8 unk5; + u8 unk6; +}; + const struct UnknownStruct1 gUnknown_08402D08[][4] = { { @@ -212,38 +226,24 @@ const struct SpriteTemplate gSpriteTemplate_8402E08 = const u8 gString_AkitoMori[] = _("あきと"); // programmer Akito Mori? -const u8 gUnknown_08402E24[7][3] = -{ - {11, 1, 1}, - { 3, 6, 2}, - {24, 1, 3}, - { 3, 11, 4}, - { 5, 4, 5}, - { 3, 6, 6}, - { 3, 11, 7}, -}; - -const u8 gUnknown_08402E39[] = {0, 1, 2, 3}; -const u8 gUnknown_08402E3D[] = {4, 5, 6}; - void sub_813269C(u8); -void sub_81326D8(void); -void sub_8132870(void); -void sub_8132908(void); -void sub_8132FEC(void); -void sub_8133030(u8); +void CB2_InitLearnMove(void); +void CB2_LearnMove(void); +void LearnMoveMain(void); +void DrawLearnMoveMenuWindow(void); +void sub_8133030(bool8); u8 sub_81330E8(void); void sub_8133140(u8); u8 sub_8133248(void); -void sub_81332A0(void); +void ClearLearnMoveVars(void); void sub_8133358(void); void sub_8133558(void); void sub_813362C(void); void sub_8133800(void); -void sub_8133AEC(u8, int); +void sub_8133AEC(bool8, int); void sub_8133CA4(void); -void sub_813265C(void) +void VBlankCB_LearnMove(void) { LoadOam(); ProcessSpriteCopyRequests(); @@ -261,23 +261,23 @@ void sub_813269C(u8 taskId) { if (!gPaletteFade.active) { - SetMainCallback2(sub_81326D8); + SetMainCallback2(CB2_InitLearnMove); gFieldCallback = sub_8080990; DestroyTask(taskId); } } -void sub_81326D8(void) +void CB2_InitLearnMove(void) { REG_DISPCNT = 0; ResetSpriteData(); FreeAllSpritePalettes(); ResetTasks(); - gUnknown_030007B0 = (struct Struct2017000 *)(ewram + 0x17000); - sub_81332A0(); - gUnknown_030007B0->unk2C5 = gSpecialVar_0x8004; + sLearnMoveStruct = (struct LearnMoveStruct *)(ewram + 0x17000); + ClearLearnMoveVars(); + sLearnMoveStruct->partyMon = gSpecialVar_0x8004; sub_8133558(); - SetVBlankCallback(sub_813265C); + SetVBlankCallback(VBlankCB_LearnMove); SetUpWindowConfig(&gWindowConfig_81E7240); InitMenuWindow(&gWindowConfig_81E7240); @@ -300,7 +300,7 @@ void sub_81326D8(void) AnimateSprites(); BuildOamBuffer(); UpdatePaletteFade(); - SetMainCallback2(sub_8132870); + SetMainCallback2(CB2_LearnMove); } void sub_81327A4(void) @@ -308,10 +308,10 @@ void sub_81327A4(void) ResetSpriteData(); FreeAllSpritePalettes(); ResetTasks(); - gUnknown_030007B0 = (struct Struct2017000 *)(ewram + 0x17000); + sLearnMoveStruct = (struct LearnMoveStruct *)(ewram + 0x17000); sub_8133558(); - gUnknown_030007B0->unk2C6 = gSpecialVar_0x8005; - SetVBlankCallback(sub_813265C); + sLearnMoveStruct->unk2C6 = gSpecialVar_0x8005; + SetVBlankCallback(VBlankCB_LearnMove); SetUpWindowConfig(&gWindowConfig_81E7240); InitMenuWindow(&gWindowConfig_81E7240); @@ -335,26 +335,26 @@ void sub_81327A4(void) AnimateSprites(); BuildOamBuffer(); UpdatePaletteFade(); - SetMainCallback2(sub_8132870); + SetMainCallback2(CB2_LearnMove); } -void sub_8132870(void) +void CB2_LearnMove(void) { - sub_8132908(); - if (gUnknown_030007B0->unk1D != 0) + LearnMoveMain(); + if (sLearnMoveStruct->unk1D) { - gUnknown_030007B0->unk1D = 0; - sub_814AD7C(0x58, (gUnknown_030007B0->unk18 * 2 + 1) * 8); + sLearnMoveStruct->unk1D = FALSE; + sub_814AD7C(0x58, (sLearnMoveStruct->unk18 * 2 + 1) * 8); } - if (gUnknown_030007B0->unk1E != 0) + if (sLearnMoveStruct->unk1E != 0) { - gUnknown_030007B0->unk1E = 0; + sLearnMoveStruct->unk1E = 0; sub_8133800(); } - if (gUnknown_030007B0->unk2C3 != 0) + if (sLearnMoveStruct->unk2C3) { - sub_8133AEC(gUnknown_030007B0->unk2C4, 1); - gUnknown_030007B0->unk2C3 = 0; + sub_8133AEC(sLearnMoveStruct->showContestInfo, 1); + sLearnMoveStruct->unk2C3 = FALSE; } RunTasks(); AnimateSprites(); @@ -368,32 +368,32 @@ void sub_81328E8(const u8 *a) MenuPrintMessage(gStringVar4, 3, 15); } -void sub_8132908(void) +void LearnMoveMain(void) { - switch (gUnknown_030007B0->unk0) + switch (sLearnMoveStruct->state) { case 0: - gUnknown_030007B0->unk0++; - sub_8132FEC(); - sub_8133030(0); + sLearnMoveStruct->state++; + DrawLearnMoveMenuWindow(); + sub_8133030(FALSE); sub_8133800(); gSprites[1].pos1.x = 0x48; - gUnknown_030007B0->unk2C3 = 1; + sLearnMoveStruct->unk2C3 = TRUE; BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); REG_DISPCNT = 0x1340; break; case 1: if (!gPaletteFade.active) - gUnknown_030007B0->unk0 = 4; + sLearnMoveStruct->state = 4; break; case 2: - gUnknown_030007B0->unk0++; + sLearnMoveStruct->state++; break; case 3: - sub_8133030(0); + sub_8133030(FALSE); sub_8133800(); - gUnknown_030007B0->unk2C3 = 1; - gUnknown_030007B0->unk0++; + sLearnMoveStruct->unk2C3 = TRUE; + sLearnMoveStruct->state++; gSprites[1].pos1.x = 0x48; break; case 4: @@ -403,9 +403,9 @@ void sub_8132908(void) case 5: sub_8133140(0); sub_8133800(); - gUnknown_030007B0->unk2C3 = 1; + sLearnMoveStruct->unk2C3 = TRUE; gSprites[1].pos1.x = 0x48; - gUnknown_030007B0->unk0++; + sLearnMoveStruct->state++; break; case 6: if (sub_8133248() == 0) @@ -415,34 +415,34 @@ void sub_8132908(void) if (MenuUpdateWindowText()) { DisplayYesNoMenu(21, 7, 1); - gUnknown_030007B0->unk0++; + sLearnMoveStruct->state++; } break; case 9: { - s8 var = ProcessMenuInputNoWrap_(); + s8 selection = ProcessMenuInputNoWrap_(); - if (var == 0) + if (selection == 0) { sub_8133CA4(); - if (GiveMoveToMon(&gPlayerParty[gUnknown_030007B0->unk2C5], gUnknown_030007B0->unk20[gUnknown_030007B0->unk1B]) != 0xFFFF) + if (GiveMoveToMon(&gPlayerParty[sLearnMoveStruct->partyMon], sLearnMoveStruct->movesToLearn[sLearnMoveStruct->menuSelection]) != 0xFFFF) { sub_81328E8(gOtherText_PokeLearnedMove); gSpecialVar_0x8004 = 1; - gUnknown_030007B0->unk0 = 31; + sLearnMoveStruct->state = 31; } else { - gUnknown_030007B0->unk0 = 16; + sLearnMoveStruct->state = 16; } } - else if (var == -1 || var == 1) + else if (selection == -1 || selection == 1) { sub_8133CA4(); - if (gUnknown_030007B0->unk2C4 == 0) - gUnknown_030007B0->unk0 = 3; - if (gUnknown_030007B0->unk2C4 == 1) - gUnknown_030007B0->unk0 = 5; + if (sLearnMoveStruct->showContestInfo == FALSE) + sLearnMoveStruct->state = 3; + if (sLearnMoveStruct->showContestInfo == TRUE) + sLearnMoveStruct->state = 5; } } break; @@ -450,38 +450,38 @@ void sub_8132908(void) if (MenuUpdateWindowText()) { DisplayYesNoMenu(21, 7, 1); - gUnknown_030007B0->unk0++; + sLearnMoveStruct->state++; } break; case 13: { - s8 r4 = ProcessMenuInputNoWrap_(); + s8 selection = ProcessMenuInputNoWrap_(); - if (r4 == 0) + if (selection == 0) { sub_8133CA4(); - gSpecialVar_0x8004 = r4; - gUnknown_030007B0->unk0 = 14; + gSpecialVar_0x8004 = selection; + sLearnMoveStruct->state = 14; } - else if (r4 == -1 || r4 == 1) + else if (selection == -1 || selection == 1) { sub_8133CA4(); - if (gUnknown_030007B0->unk2C4 == 0) - gUnknown_030007B0->unk0 = 3; - if (gUnknown_030007B0->unk2C4 == 1) - gUnknown_030007B0->unk0 = 5; + if (sLearnMoveStruct->showContestInfo == FALSE) + sLearnMoveStruct->state = 3; + if (sLearnMoveStruct->showContestInfo == TRUE) + sLearnMoveStruct->state = 5; } } break; case 16: sub_81328E8(gOtherText_DeleteOlderMove); - gUnknown_030007B0->unk0++; + sLearnMoveStruct->state++; break; case 17: if (MenuUpdateWindowText()) { DisplayYesNoMenu(21, 7, 1); - gUnknown_030007B0->unk0 = 18; + sLearnMoveStruct->state = 18; } break; case 18: @@ -492,23 +492,23 @@ void sub_8132908(void) { sub_8133CA4(); sub_81328E8(gOtherText_WhichMoveToForget); - gUnknown_030007B0->unk0 = 19; + sLearnMoveStruct->state = 19; } else if (var == -1 || var == 1) { sub_8133CA4(); - gUnknown_030007B0->unk0 = 24; + sLearnMoveStruct->state = 24; } } break; case 24: sub_81328E8(gOtherText_StopLearningMove); - gUnknown_030007B0->unk0++; + sLearnMoveStruct->state++; break; case 25: if (MenuUpdateWindowText()) { - gUnknown_030007B0->unk0 = 26; + sLearnMoveStruct->state = 26; DisplayYesNoMenu(21, 7, 1); } break; @@ -519,54 +519,54 @@ void sub_8132908(void) if (var == 0) { sub_8133CA4(); - gUnknown_030007B0->unk0 = 27; + sLearnMoveStruct->state = 27; } else if (var == -1 || var == 1) { sub_8133CA4(); // What's the point? It gets set to 16, anyway. - if (gUnknown_030007B0->unk2C4 == 0) - gUnknown_030007B0->unk0 = 3; - if (gUnknown_030007B0->unk2C4 == 1) - gUnknown_030007B0->unk0 = 5; - gUnknown_030007B0->unk0 = 16; + if (sLearnMoveStruct->showContestInfo == FALSE) + sLearnMoveStruct->state = 3; + if (sLearnMoveStruct->showContestInfo == TRUE) + sLearnMoveStruct->state = 5; + sLearnMoveStruct->state = 16; } } break; case 27: if (MenuUpdateWindowText()) { - if (gUnknown_030007B0->unk2C4 == 0) - gUnknown_030007B0->unk0 = 3; - if (gUnknown_030007B0->unk2C4 == 1) - gUnknown_030007B0->unk0 = 5; + if (sLearnMoveStruct->showContestInfo == FALSE) + sLearnMoveStruct->state = 3; + if (sLearnMoveStruct->showContestInfo == TRUE) + sLearnMoveStruct->state = 5; } break; case 19: if (MenuUpdateWindowText()) { - gUnknown_030007B0->unk0 = 20; + sLearnMoveStruct->state = 20; BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); } break; case 20: if (!gPaletteFade.active) { - sub_809D9F0(gPlayerParty, gUnknown_030007B0->unk2C5, gPlayerPartyCount - 1, sub_81327A4, gUnknown_030007B0->unk20[gUnknown_030007B0->unk1B]); - gUnknown_030007B0->unk0 = 28; + sub_809D9F0(gPlayerParty, sLearnMoveStruct->partyMon, gPlayerPartyCount - 1, sub_81327A4, sLearnMoveStruct->movesToLearn[sLearnMoveStruct->menuSelection]); + sLearnMoveStruct->state = 28; } break; case 21: if (MenuUpdateWindowText()) - gUnknown_030007B0->unk0 = 14; + sLearnMoveStruct->state = 14; break; case 22: BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); break; case 14: BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0); - gUnknown_030007B0->unk0++; + sLearnMoveStruct->state++; break; case 15: if (!gPaletteFade.active) @@ -574,35 +574,35 @@ void sub_8132908(void) break; case 28: BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, 0); - gUnknown_030007B0->unk0++; - sub_8132FEC(); + sLearnMoveStruct->state++; + DrawLearnMoveMenuWindow(); sub_8133800(); - if (gUnknown_030007B0->unk2C4 == 0) - sub_8133030(1); - if (gUnknown_030007B0->unk2C4 == 1) + if (sLearnMoveStruct->showContestInfo == FALSE) + sub_8133030(TRUE); + if (sLearnMoveStruct->showContestInfo == TRUE) { gSprites[1].pos1.x = 0x48; sub_8133140(1); } - sub_8133AEC(gUnknown_030007B0->unk2C4, 1); + sub_8133AEC(sLearnMoveStruct->showContestInfo, 1); break; case 29: if (!gPaletteFade.active) { - if (gUnknown_030007B0->unk2C6 == 4) + if (sLearnMoveStruct->unk2C6 == 4) { - gUnknown_030007B0->unk0 = 24; + sLearnMoveStruct->state = 24; } else { - u16 moveId = GetMonData(&gPlayerParty[gUnknown_030007B0->unk2C5], MON_DATA_MOVE1 + gUnknown_030007B0->unk2C6); + u16 moveId = GetMonData(&gPlayerParty[sLearnMoveStruct->partyMon], MON_DATA_MOVE1 + sLearnMoveStruct->unk2C6); StringCopy(gStringVar3, gMoveNames[moveId]); - RemoveMonPPBonus(&gPlayerParty[gUnknown_030007B0->unk2C5], gUnknown_030007B0->unk2C6); - SetMonMoveSlot(&gPlayerParty[gUnknown_030007B0->unk2C5], gUnknown_030007B0->unk20[gUnknown_030007B0->unk1B], gUnknown_030007B0->unk2C6); - StringCopy(gStringVar2, gMoveNames[gUnknown_030007B0->unk20[gUnknown_030007B0->unk1B]]); + RemoveMonPPBonus(&gPlayerParty[sLearnMoveStruct->partyMon], sLearnMoveStruct->unk2C6); + SetMonMoveSlot(&gPlayerParty[sLearnMoveStruct->partyMon], sLearnMoveStruct->movesToLearn[sLearnMoveStruct->menuSelection], sLearnMoveStruct->unk2C6); + StringCopy(gStringVar2, gMoveNames[sLearnMoveStruct->movesToLearn[sLearnMoveStruct->menuSelection]]); sub_81328E8(gOtherText_ForgotMove123); - gUnknown_030007B0->unk0 = 30; + sLearnMoveStruct->state = 30; gSpecialVar_0x8004 = 1; } } @@ -615,7 +615,7 @@ void sub_8132908(void) #else sub_81328E8(deuOtherText_ForgotAndLearned); #endif - gUnknown_030007B0->unk0 = 31; + sLearnMoveStruct->state = 31; PlayFanfare(BGM_FANFA1); } break; @@ -623,24 +623,24 @@ void sub_8132908(void) if (MenuUpdateWindowText()) { PlayFanfare(BGM_FANFA1); - gUnknown_030007B0->unk0 = 32; + sLearnMoveStruct->state = 32; } break; case 32: if (IsFanfareTaskInactive()) - gUnknown_030007B0->unk0 = 33; + sLearnMoveStruct->state = 33; break; case 33: if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); - gUnknown_030007B0->unk0 = 14; + sLearnMoveStruct->state = 14; } break; } } -void sub_8132FEC(void) +void DrawLearnMoveMenuWindow(void) { u32 i; @@ -660,53 +660,50 @@ void sub_8133030(bool8 a) { s32 i; - gSprites[gUnknown_030007B0->unk3[0]].invisible = FALSE; - gSprites[gUnknown_030007B0->unk3[1]].invisible = FALSE; + gSprites[sLearnMoveStruct->spriteIDs[0]].invisible = FALSE; + gSprites[sLearnMoveStruct->spriteIDs[1]].invisible = FALSE; + for (i = 0; i < 16; i++) - { - // Hmm... - gSprites[*((u8 *)gUnknown_030007B0 + i + 7)].invisible = TRUE; - } + gSprites[sLearnMoveStruct->spriteIDs[i + 4]].invisible = TRUE; + for (i = 0; gUnknown_08402D08[0][i].unk0 != NULL; i++) { sub_8072C74(gTileBuffer, gUnknown_08402D08[0][i].unk0, 64, 2); MenuPrint(gTileBuffer, gUnknown_08402D08[0][i].unk4, gUnknown_08402D08[0][i].unk5); } + if (!a) - { sub_8072AB0(gOtherText_TeachWhichMove, 24, 120, 192, 32, 1); - } } u8 sub_81330E8(void) { - u32 r4 = ((gMain.newKeys & 0x30) != 0); + u32 result = (gMain.newKeys & DPAD_LEFT) || (gMain.newKeys & DPAD_RIGHT); if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR - && (gMain.newKeys & 0x300)) - r4++; + && ((gMain.newKeys & L_BUTTON) || (gMain.newKeys & R_BUTTON))) + result++; - if (r4 != 0) + if (result != 0) { PlaySE(SE_SELECT); - gUnknown_030007B0->unk0 = 5; - gUnknown_030007B0->unk2C4 = 1; + sLearnMoveStruct->state = 5; + sLearnMoveStruct->showContestInfo = TRUE; } - return r4; + return result; } void sub_8133140(bool8 a) { s32 i; - gSprites[gUnknown_030007B0->unk3[0]].invisible = FALSE; - gSprites[gUnknown_030007B0->unk3[1]].invisible = FALSE; + gSprites[sLearnMoveStruct->spriteIDs[0]].invisible = FALSE; + gSprites[sLearnMoveStruct->spriteIDs[1]].invisible = FALSE; + for (i = 0; i < 16; i++) - { - // Hmm... - gSprites[*((u8 *)gUnknown_030007B0 + i + 7)].invisible = FALSE; - } + gSprites[sLearnMoveStruct->spriteIDs[i + 4]].invisible = FALSE; + for (i = 0; gUnknown_08402D08[0][i].unk0 != NULL; i++) { sub_8072C74(gTileBuffer, gUnknown_08402D08[1][i].unk0, 64, 2); @@ -720,45 +717,46 @@ void sub_8133140(bool8 a) gUnknown_08402D08[1][i].unk5 + 3); } } + if (!a) sub_8072AB0(gOtherText_TeachWhichMove, 24, 120, 192, 32, 1); } u8 sub_8133248(void) { - u32 r4 = ((gMain.newKeys & 0x30) != 0); + u32 result = (gMain.newKeys & DPAD_LEFT) || (gMain.newKeys & DPAD_RIGHT); if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR - && (gMain.newKeys & 0x300)) - r4++; + && ((gMain.newKeys & L_BUTTON) || (gMain.newKeys & R_BUTTON))) + result++; - if (r4 != 0) + if (result != 0) { PlaySE(SE_SELECT); - gUnknown_030007B0->unk0 = 3; - gUnknown_030007B0->unk2C4 = 0; + sLearnMoveStruct->state = 3; + sLearnMoveStruct->showContestInfo = FALSE; } - return r4; + return result; } -void sub_81332A0(void) +void ClearLearnMoveVars(void) { s32 i; - gUnknown_030007B0->unk0 = 0; - gUnknown_030007B0->unk2 = 0; - gUnknown_030007B0->unk19 = 0; - gUnknown_030007B0->unk18 = 0; - gUnknown_030007B0->unk1C = 0; - gUnknown_030007B0->unk1A = 0; - gUnknown_030007B0->unk1B = 0; - gUnknown_030007B0->unk1D = 0; - gUnknown_030007B0->unk1E = 0; - gUnknown_030007B0->unk2C3 = 0; - gUnknown_030007B0->unk2C4 = 0; + sLearnMoveStruct->state = 0; + sLearnMoveStruct->unk2 = 0; + sLearnMoveStruct->unk19 = 0; + sLearnMoveStruct->unk18 = 0; + sLearnMoveStruct->unk1C = 0; + sLearnMoveStruct->numMenuChoices = 0; + sLearnMoveStruct->menuSelection = 0; + sLearnMoveStruct->unk1D = FALSE; + sLearnMoveStruct->unk1E = 0; + sLearnMoveStruct->unk2C3 = FALSE; + sLearnMoveStruct->showContestInfo = FALSE; for (i = 0; i < 20; i++) - gUnknown_030007B0->unk20[i] = 0; + sLearnMoveStruct->movesToLearn[i] = 0; } void sub_8133300(struct Sprite *sprite) @@ -779,46 +777,42 @@ void sub_8133300(struct Sprite *sprite) sprite->data1++; } -extern const struct SpriteTemplate gSpriteTemplate_8402D90; -extern const struct SpriteTemplate gSpriteTemplate_8402DC0; -extern const struct SpriteTemplate gSpriteTemplate_8402E08; - void sub_8133358(void) { s32 i; - gUnknown_030007B0->unk3[0] = CreateSprite(&gSpriteTemplate_8402D90, 8, 16, 0); - gSprites[gUnknown_030007B0->unk3[0]].data0 = 1; - gSprites[gUnknown_030007B0->unk3[0]].data2 = -1; + sLearnMoveStruct->spriteIDs[0] = CreateSprite(&gSpriteTemplate_8402D90, 8, 16, 0); + gSprites[sLearnMoveStruct->spriteIDs[0]].data0 = 1; + gSprites[sLearnMoveStruct->spriteIDs[0]].data2 = -1; - gUnknown_030007B0->unk3[1] = CreateSprite(&gSpriteTemplate_8402D90, 72, 16, 0); - StartSpriteAnim(&gSprites[gUnknown_030007B0->unk3[1]], 1); - gSprites[gUnknown_030007B0->unk3[1]].data0 = 1; - gSprites[gUnknown_030007B0->unk3[1]].data2 = 1; + sLearnMoveStruct->spriteIDs[1] = CreateSprite(&gSpriteTemplate_8402D90, 72, 16, 0); + StartSpriteAnim(&gSprites[sLearnMoveStruct->spriteIDs[1]], 1); + gSprites[sLearnMoveStruct->spriteIDs[1]].data0 = 1; + gSprites[sLearnMoveStruct->spriteIDs[1]].data2 = 1; - gUnknown_030007B0->unk3[2] = CreateSprite(&gSpriteTemplate_8402DC0, 160, 4, 0); - StartSpriteAnim(&gSprites[gUnknown_030007B0->unk3[2]], 1); - gSprites[gUnknown_030007B0->unk3[2]].data0 = 2; - gSprites[gUnknown_030007B0->unk3[2]].data2 = -1; + sLearnMoveStruct->spriteIDs[2] = CreateSprite(&gSpriteTemplate_8402DC0, 160, 4, 0); + StartSpriteAnim(&gSprites[sLearnMoveStruct->spriteIDs[2]], 1); + gSprites[sLearnMoveStruct->spriteIDs[2]].data0 = 2; + gSprites[sLearnMoveStruct->spriteIDs[2]].data2 = -1; - gUnknown_030007B0->unk3[3] = CreateSprite(&gSpriteTemplate_8402DC0, 160, 60, 0); - gSprites[gUnknown_030007B0->unk3[3]].data0 = 2; - gSprites[gUnknown_030007B0->unk3[3]].data2 = 1; + sLearnMoveStruct->spriteIDs[3] = CreateSprite(&gSpriteTemplate_8402DC0, 160, 60, 0); + gSprites[sLearnMoveStruct->spriteIDs[3]].data0 = 2; + gSprites[sLearnMoveStruct->spriteIDs[3]].data2 = 1; for (i = 0; i < 8; i++) { - gUnknown_030007B0->unk3[i + 4] = CreateSprite(&gSpriteTemplate_8402E08, (i - (i / 4) * 4) * 8 + 0x1C, (i / 4) * 8 + 0x34, 0); - StartSpriteAnim(&gSprites[gUnknown_030007B0->unk3[i + 4]], 2); + sLearnMoveStruct->spriteIDs[i + 4] = CreateSprite(&gSpriteTemplate_8402E08, (i - (i / 4) * 4) * 8 + 0x1C, (i / 4) * 8 + 0x34, 0); + StartSpriteAnim(&gSprites[sLearnMoveStruct->spriteIDs[i + 4]], 2); } for (i = 0; i < 8; i++) { - gUnknown_030007B0->unk3[i + 12] = CreateSprite(&gSpriteTemplate_8402E08, (i - (i / 4) * 4) * 8 + 0x1C, (i / 4) * 8 + 0x5C, 0); - StartSpriteAnim(&gSprites[gUnknown_030007B0->unk3[i + 12]], 2); + sLearnMoveStruct->spriteIDs[i + 12] = CreateSprite(&gSpriteTemplate_8402E08, (i - (i / 4) * 4) * 8 + 0x1C, (i / 4) * 8 + 0x5C, 0); + StartSpriteAnim(&gSprites[sLearnMoveStruct->spriteIDs[i + 12]], 2); } for (i = 0; i < 20; i++) - gSprites[gUnknown_030007B0->unk3[i]].invisible = TRUE; + gSprites[sLearnMoveStruct->spriteIDs[i]].invisible = TRUE; CreateBlendedOutlineCursor(16, 0xFFFF, 12, 0x2D9F, 18); } @@ -828,67 +822,67 @@ void sub_8133558(void) s32 i; u8 nickname[POKEMON_NAME_LENGTH + 1]; - gUnknown_030007B0->unk1A = GetMoveRelearnerMoves(&gPlayerParty[gUnknown_030007B0->unk2C5], gUnknown_030007B0->unk20); - for (i = 0; i < gUnknown_030007B0->unk1A; i++) - StringCopy(gUnknown_030007B0->unk52[i], gMoveNames[gUnknown_030007B0->unk20[i]]); - GetMonData(&gPlayerParty[gUnknown_030007B0->unk2C5], MON_DATA_NICKNAME, nickname); + sLearnMoveStruct->numMenuChoices = GetMoveRelearnerMoves(&gPlayerParty[sLearnMoveStruct->partyMon], sLearnMoveStruct->movesToLearn); + for (i = 0; i < sLearnMoveStruct->numMenuChoices; i++) + StringCopy(sLearnMoveStruct->moveNames[i], gMoveNames[sLearnMoveStruct->movesToLearn[i]]); + GetMonData(&gPlayerParty[sLearnMoveStruct->partyMon], MON_DATA_NICKNAME, nickname); StringCopy10(gStringVar1, nickname); - StringCopy(gUnknown_030007B0->unk52[gUnknown_030007B0->unk1A], gUnknownText_Exit); - gUnknown_030007B0->unk1A++; + StringCopy(sLearnMoveStruct->moveNames[sLearnMoveStruct->numMenuChoices], gUnknownText_Exit); + sLearnMoveStruct->numMenuChoices++; } -void sub_813360C(s8 a) +void sub_813360C(s8 delta) { - gUnknown_030007B0->unk1C = gUnknown_030007B0->unk18; - gUnknown_030007B0->unk18 += a; - gUnknown_030007B0->unk1D = 1; + sLearnMoveStruct->unk1C = sLearnMoveStruct->unk18; + sLearnMoveStruct->unk18 += delta; + sLearnMoveStruct->unk1D = TRUE; } void sub_813362C(void) { - if (gMain.newAndRepeatedKeys & 0x40) + if (gMain.newAndRepeatedKeys & DPAD_UP) { - if (gUnknown_030007B0->unk1B != 0) + if (sLearnMoveStruct->menuSelection != 0) { PlaySE(SE_SELECT); - gUnknown_030007B0->unk1B--; - gUnknown_030007B0->unk2C3 = 1; - if (gUnknown_030007B0->unk18 != 0) + sLearnMoveStruct->menuSelection--; + sLearnMoveStruct->unk2C3 = TRUE; + if (sLearnMoveStruct->unk18 != 0) { sub_813360C(-1); } - else if (gUnknown_030007B0->unk19 != 0) + else if (sLearnMoveStruct->unk19 != 0) { - gUnknown_030007B0->unk19--; - gUnknown_030007B0->unk1E++; + sLearnMoveStruct->unk19--; + sLearnMoveStruct->unk1E++; } } } - else if (gMain.newAndRepeatedKeys & 0x80) + else if (gMain.newAndRepeatedKeys & DPAD_DOWN) { - if (gUnknown_030007B0->unk1B < gUnknown_030007B0->unk1A - 1) + if (sLearnMoveStruct->menuSelection < sLearnMoveStruct->numMenuChoices - 1) { PlaySE(SE_SELECT); - gUnknown_030007B0->unk1B++; - gUnknown_030007B0->unk2C3 = 1; - if (gUnknown_030007B0->unk18 != 2) + sLearnMoveStruct->menuSelection++; + sLearnMoveStruct->unk2C3 = TRUE; + if (sLearnMoveStruct->unk18 != 2) { sub_813360C(1); } - else if (gUnknown_030007B0->unk19 != gUnknown_030007B0->unk1A - 3) + else if (sLearnMoveStruct->unk19 != sLearnMoveStruct->numMenuChoices - 3) { - gUnknown_030007B0->unk19++; - gUnknown_030007B0->unk1E++; + sLearnMoveStruct->unk19++; + sLearnMoveStruct->unk1E++; } } } else if (gMain.newKeys & A_BUTTON) { PlaySE(SE_SELECT); - if (gUnknown_030007B0->unk1B != gUnknown_030007B0->unk1A - 1) + if (sLearnMoveStruct->menuSelection != sLearnMoveStruct->numMenuChoices - 1) { - gUnknown_030007B0->unk0 = 8; - StringCopy(gStringVar2, gUnknown_030007B0->unk52[gUnknown_030007B0->unk1B]); + sLearnMoveStruct->state = 8; + StringCopy(gStringVar2, sLearnMoveStruct->moveNames[sLearnMoveStruct->menuSelection]); StringExpandPlaceholders(gStringVar4, gOtherText_TeachSpecificMove); MenuPrintMessage(gStringVar4, 3, 15); } @@ -896,92 +890,84 @@ void sub_813362C(void) { StringExpandPlaceholders(gStringVar4, gOtherText_GiveUpTeachingMove); MenuPrintMessage(gStringVar4, 3, 15); - gUnknown_030007B0->unk0 = 12; + sLearnMoveStruct->state = 12; } } else if (gMain.newKeys & B_BUTTON) { PlaySE(SE_SELECT); - gUnknown_030007B0->unk0 = 12; + sLearnMoveStruct->state = 12; StringExpandPlaceholders(gStringVar4, gOtherText_GiveUpTeachingMove); MenuPrintMessage(gStringVar4, 3, 15); } - if (gUnknown_030007B0->unk1A > 3) + if (sLearnMoveStruct->numMenuChoices > 3) { gSprites[2].invisible = FALSE; gSprites[3].invisible = FALSE; - if (gUnknown_030007B0->unk19 == 0) + if (sLearnMoveStruct->unk19 == 0) gSprites[2].invisible = TRUE; - else if (gUnknown_030007B0->unk19 == gUnknown_030007B0->unk1A - 3) + else if (sLearnMoveStruct->unk19 == sLearnMoveStruct->numMenuChoices - 3) gSprites[3].invisible = TRUE; } } -extern const u8 *const gUnknown_083CAF70[]; - -struct ContestMove -{ - u8 effect; - u8 contestCategory:3; - u8 comboStarterId; - u8 comboMoves[4]; -}; - -extern const struct ContestMove gContestMoves[]; -extern const u8 gTypeNames[][7]; - void sub_8133800(void) { - u8 r6 = gUnknown_030007B0->unk19; + u8 r6 = sLearnMoveStruct->unk19; u8 *str = gTileBuffer; s32 i; for (i = 0; i < 3; i++) { - if (r6 >= gUnknown_030007B0->unk1A) + if (r6 >= sLearnMoveStruct->numMenuChoices) { str = sub_8072C74(str, gEmptyString_81E72B0, 0x90, 0); } - else if (r6 == gUnknown_030007B0->unk1A - 1) + else if (r6 == sLearnMoveStruct->numMenuChoices - 1) { str = sub_8072C74(str, gUnknownText_Exit, 0x90, 0); } else { - u16 moveId = gUnknown_030007B0->unk20[r6]; + u16 moveId = sLearnMoveStruct->movesToLearn[r6]; - if (gUnknown_030007B0->unk2C4 != 0) + if (sLearnMoveStruct->showContestInfo) str = sub_8072C74(str, gUnknown_083CAF70[gContestMoves[moveId].contestCategory], 0x27, 0); else str = sub_8072C74(str, gTypeNames[gBattleMoves[moveId].type], 0x27, 0); - str = sub_8072C74(str, gUnknown_030007B0->unk52[r6], 0x72, 0); + str = sub_8072C74(str, sLearnMoveStruct->moveNames[r6], 0x72, 0); - str[0] = 0xCA; - str[1] = 0xCA; - str[2] = 0xBA; + str[0] = CHAR_P; + str[1] = CHAR_P; + str[2] = CHAR_SLASH; str += 3; str = sub_8072C14(str, gBattleMoves[moveId].pp, 0x90, 0); } - *str++ = 0xFE; + *str++ = CHAR_NEWLINE; r6++; } - *str = 0xFF; + *str = EOS; MenuPrint(gTileBuffer, 11, 1); sub_813360C(0); } -struct ContestEffect +const u8 gUnknown_08402E24[7][3] = { - u8 effectType; - u8 appeal; - u8 jam; + {11, 1, 1}, + { 3, 6, 2}, + {24, 1, 3}, + { 3, 11, 4}, + { 5, 4, 5}, + { 3, 6, 6}, + { 3, 11, 7}, }; -extern const struct ContestEffect gContestEffects[]; +const u8 gUnknown_08402E39[] = {0, 1, 2, 3}; +const u8 gUnknown_08402E3D[] = {4, 5, 6}; -void sub_8133940(u16 a, const u8 *b) +void PrintMoveInfo(u16 moveId, const u8 *b) { u8 str[0x34]; u8 numHearts; @@ -993,75 +979,71 @@ void sub_8133940(u16 a, const u8 *b) case 1: break; case 2: - if (gBattleMoves[a].power < 2) + if (gBattleMoves[moveId].power < 2) sub_8072C74(str, gOtherText_ThreeDashes2, 32, 2); else - sub_8072C14(str, gBattleMoves[a].power, 32, 2); + sub_8072C14(str, gBattleMoves[moveId].power, 32, 2); MenuPrint(str, b[0], b[1]); break; case 4: - if (gBattleMoves[a].accuracy == 0) + if (gBattleMoves[moveId].accuracy == 0) sub_8072C74(str, gOtherText_ThreeDashes2, 32, 2); else - sub_8072C14(str, gBattleMoves[a].accuracy, 32, 2); + sub_8072C14(str, gBattleMoves[moveId].accuracy, 32, 2); MenuPrint(str, b[0], b[1]); break; case 6: MenuZeroFillWindowRect(b[0], b[1], b[0], b[1] + 1); - numHearts = gContestEffects[gContestMoves[a].effect].appeal / 10; + numHearts = gContestEffects[gContestMoves[moveId].effect].appeal / 10; if (numHearts == 255) numHearts = 0; for (i = 0; i < 8; i++) { if (i < numHearts) - StartSpriteAnim(&gSprites[gUnknown_030007B0->unk3[i + 4]], 1); + StartSpriteAnim(&gSprites[sLearnMoveStruct->spriteIDs[i + 4]], 1); else - StartSpriteAnim(&gSprites[gUnknown_030007B0->unk3[i + 4]], 0); + StartSpriteAnim(&gSprites[sLearnMoveStruct->spriteIDs[i + 4]], 0); } break; case 7: MenuZeroFillWindowRect(b[0], b[1], b[0], b[1] + 1); - numHearts = gContestEffects[gContestMoves[a].effect].jam / 10; + numHearts = gContestEffects[gContestMoves[moveId].effect].jam / 10; if (numHearts == 255) numHearts = 0; for (i = 0; i < 8; i++) { if (i < numHearts) - StartSpriteAnim(&gSprites[gUnknown_030007B0->unk3[i + 12]], 3); + StartSpriteAnim(&gSprites[sLearnMoveStruct->spriteIDs[i + 12]], 3); else - StartSpriteAnim(&gSprites[gUnknown_030007B0->unk3[i + 12]], 2); + StartSpriteAnim(&gSprites[sLearnMoveStruct->spriteIDs[i + 12]], 2); } break; } } -extern const u8 *const gUnknown_083CADD4[]; -extern const u8 *const gMoveDescriptions[]; - -void sub_8133AEC(u8 a, int unused) +void sub_8133AEC(bool8 contestInfo, int unused) { u16 i; - if (gUnknown_030007B0->unk1B != gUnknown_030007B0->unk1A - 1) + if (sLearnMoveStruct->menuSelection != sLearnMoveStruct->numMenuChoices - 1) { - u16 r5 = gUnknown_030007B0->unk20[gUnknown_030007B0->unk1B]; + u16 moveId = sLearnMoveStruct->movesToLearn[sLearnMoveStruct->menuSelection]; - if (a != 0) + if (contestInfo) { for (i = 0; i < 16; i++) - gSprites[gUnknown_030007B0->unk3[i + 4]].invisible = FALSE; + gSprites[sLearnMoveStruct->spriteIDs[i + 4]].invisible = FALSE; for (i = 0; i < 3; i++) - sub_8133940(r5, gUnknown_08402E24[gUnknown_08402E3D[i]]); - sub_8072AB0(gUnknown_083CADD4[gContestMoves[r5].effect], 0x58, 0x48, 0x90, 32, 1); + PrintMoveInfo(moveId, gUnknown_08402E24[gUnknown_08402E3D[i]]); + sub_8072AB0(gUnknown_083CADD4[gContestMoves[moveId].effect], 0x58, 0x48, 0x90, 32, 1); } - //_08133BA0 else { u8 var; for (i = 0; i < 4; i++) - sub_8133940(r5, gUnknown_08402E24[gUnknown_08402E39[i]]); - var = sub_8072A18(gMoveDescriptions[r5 - 1], 0x58, 0x48, 0x90, 1); + PrintMoveInfo(moveId, gUnknown_08402E24[gUnknown_08402E39[i]]); + var = sub_8072A18(gMoveDescriptions[moveId - 1], 0x58, 0x48, 0x90, 1); if (var < 2) { u8 r1 = var * 2 + 9; @@ -1072,12 +1054,12 @@ void sub_8133AEC(u8 a, int unused) } else { - if (a != 0) + if (contestInfo) { MenuZeroFillWindowRect(gUnknown_08402E24[5][0], gUnknown_08402E24[5][1], gUnknown_08402E24[5][0], gUnknown_08402E24[5][1] + 1); MenuZeroFillWindowRect(gUnknown_08402E24[6][0], gUnknown_08402E24[6][1], gUnknown_08402E24[6][0], gUnknown_08402E24[6][1] + 1); for (i = 0; i < 16; i++) - gSprites[gUnknown_030007B0->unk3[i + 4]].invisible = TRUE; + gSprites[sLearnMoveStruct->spriteIDs[i + 4]].invisible = TRUE; } else { @@ -1091,5 +1073,5 @@ void sub_8133AEC(u8 a, int unused) void sub_8133CA4(void) { MenuZeroFillWindowRect(21, 7, 27, 12); - sub_8133AEC(gUnknown_030007B0->unk2C4, 0); + sub_8133AEC(sLearnMoveStruct->showContestInfo, 0); } -- cgit v1.2.3 From a6c0c433c9356b51181c8f2c7cc028017a953390 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 12 Aug 2017 21:19:14 -0500 Subject: fix German build --- src/learn_move.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src') diff --git a/src/learn_move.c b/src/learn_move.c index 71de9910a..51de68171 100644 --- a/src/learn_move.c +++ b/src/learn_move.c @@ -46,6 +46,10 @@ extern const u8 *const gMoveDescriptions[]; extern const u8 gTypeNames[][7]; extern const u8 *const gUnknown_083CAF70[]; +#ifdef GERMAN +extern const u8 deuOtherText_ForgotAndLearned[]; +#endif + extern void sub_809D9F0(struct Pokemon *, u8, u8, void *, u32); struct LearnMoveStruct -- 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 00abce98dba72f1119b41e5f7f9b186fb30dbf64 Mon Sep 17 00:00:00 2001 From: golemgalvanize Date: Sun, 13 Aug 2017 20:05:42 -0400 Subject: decompile intro_credits_graphics.s (#381) * Update * Update * Update * update * intro_credits_graphics * decompiled up to sub_80cb438 * decompiled up to sub_80CB7EC * decompiled up to sub_80cbc8c * decompiled up to sub_80CC408 * decompiled up to sub_80CCD24 * fixed it up a little * more fixes * Update ld_script.txt * Delete battle_anim_80CA710.c * Update battle_anim_80CA710.s reverted --- src/intro_credits_graphics.c | 532 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 532 insertions(+) create mode 100755 src/intro_credits_graphics.c (limited to 'src') diff --git a/src/intro_credits_graphics.c b/src/intro_credits_graphics.c new file mode 100755 index 000000000..cd0589af8 --- /dev/null +++ b/src/intro_credits_graphics.c @@ -0,0 +1,532 @@ +#include "global.h" +#include "gba/m4a_internal.h" +#include "intro.h" +#include "data2.h" +#include "decompress.h" +#include "hall_of_fame.h" +#include "intro_credits_graphics.h" +#include "libgncmultiboot.h" +#include "link.h" +#include "m4a.h" +#include "main.h" +#include "new_game.h" +#include "palette.h" +#include "rng.h" +#include "save.h" +#include "songs.h" +#include "sound.h" +#include "species.h" +#include "task.h" +#include "title_screen.h" +#include "trig.h" +#include "unknown_task.h" + +// define register constants for the inline asm +asm(".include \"constants/gba_constants.inc\"\n"); + +struct UnknownStruct1 +{ + u8 var0_0:4; + u8 var0_4:2; + u8 var0_6:2; + u8 var1; + u8 var2; + u8 var3; + u16 var4; +}; + +extern u8 gUnknown_0841225C; +extern u8 gUnknown_084126DC; +extern u8 gUnknown_084121FC; +extern u8 gUnknown_084128D8; +extern u8 gUnknown_08412EB4; +extern u8 gUnknown_08412818; +extern u8 gUnknown_08413184; +extern u8 gUnknown_08413340; +extern u8 gUnknown_084139C8; +extern u8 gUnknown_08413300; +extern u8 gUnknown_08413CCC; + +extern const struct SpriteTemplate gSpriteTemplate_8416B3C; +const extern struct CompressedSpriteSheet gUnknown_08416B54; +const extern struct CompressedSpriteSheet gUnknown_08416BDC; + +extern u16 gUnknown_02039358; +extern s16 gUnknown_0203935A; +extern s16 gUnknown_0203935C; +extern u8 gReservedSpritePaletteCount; + +void sub_8149248(); +void sub_8149264(); + +void load_intro_part2_graphics(u8 a) +{ + LZ77UnCompVram(&gUnknown_0841225C, (void *)(VRAM + 0x4000)); + LZ77UnCompVram(&gUnknown_084126DC, (void *)(VRAM + 0x7800)); + LoadPalette(&gUnknown_084121FC, 240, 32); + switch (a) + { + case 0: + default: + LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM)); + LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000)); + LoadPalette(&gUnknown_08412818, 0, 96); + LoadCompressedObjectPic(&gUnknown_08416B54); + LoadPalette(&gUnknown_08413184, 256, 32); + sub_8149248(); + break; + case 1: + LZ77UnCompVram(&gUnknown_08413340, (void *)(VRAM)); + LZ77UnCompVram(&gUnknown_084139C8, (void *)(VRAM + 0x3000)); + LoadPalette(&gUnknown_08413300, 0, 32); + LoadCompressedObjectPic(&gUnknown_08416BDC); + LoadPalette(&gUnknown_08413CCC, 256, 32); + sub_8149264(); + break; + } + gUnknown_0203935C = 0; + gReservedSpritePaletteCount = 8; +} + +void sub_8148C78(u8 a) +{ + if (a == 1) + { + REG_BG3CNT = 0x603; + REG_BG2CNT = 0x702; + REG_BG1CNT = 0xF05; + REG_DISPCNT = 0x1E40; + } + else + { + REG_BG3CNT = 0x603; + REG_BG2CNT = 0x702; + REG_BG1CNT = 0xF05; + REG_DISPCNT = 0x1E40; + } +} + +extern u8 gUnknown_084131C4; +extern u8 gUnknown_084131A4; +extern u8 gUnknown_0841221C; +extern u8 gUnknown_08412878; +extern u8 gUnknown_08413320; +extern u8 gUnknown_0841223C; +extern u8 gUnknown_08413E78; +extern u8 gUnknown_08414084; +extern u8 gUnknown_08413E38; +const extern struct CompressedSpriteSheet gUnknown_08416C70; +extern u8 gUnknown_08414064; +extern struct UnknownStruct1 gUnknown_08416B94; +extern struct UnknownStruct1 gUnknown_08416C10; +extern struct UnknownStruct1 gUnknown_08416C8C; +const extern union AnimCmd *const gSpriteAnimTable_8416B84; +const extern union AnimCmd *const gSpriteAnimTable_8416C04; +const extern union AnimCmd *const gSpriteAnimTable_8416C88; +const extern struct SpriteTemplate gSpriteTemplate_8416CDC; +const extern struct SpriteTemplate gSpriteTemplate_Brendan; +const extern struct SpriteTemplate gSpriteTemplate_8416CF4; +const extern struct SpriteTemplate gSpriteTemplate_May; +const extern struct SpriteTemplate gSpriteTemplate_8416D7C; +const extern struct SpriteTemplate gSpriteTemplate_8416D94; + +void sub_8149280(); + +void sub_8148CB0(u8 a) +{ + LZ77UnCompVram(&gUnknown_0841225C, (void *)(VRAM + 0x4000)); + LZ77UnCompVram(&gUnknown_084126DC, (void *)(VRAM + 0x7800)); + switch (a) + { + case 0: + default: + LoadPalette(&gUnknown_084121FC, 240, 32); + LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM)); + LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000)); + LoadPalette(&gUnknown_08412818, 0, 96); + LoadCompressedObjectPic(&gUnknown_08416B54); + LZ77UnCompVram(&gUnknown_084131C4, (void *)(VRAM + 0x10000)); + LoadPalette(&gUnknown_08413184, 256, 32); + sub_8149248(); + break; + case 1: + LoadPalette(&gUnknown_0841221C, 240, 32); + LZ77UnCompVram(&gUnknown_084128D8, (void *)(VRAM)); + LZ77UnCompVram(&gUnknown_08412EB4, (void *)(VRAM + 0x3000)); + LoadPalette(&gUnknown_08412878, 0, 96); + LoadCompressedObjectPic(&gUnknown_08416B54); + LZ77UnCompVram(&gUnknown_084131C4, (void *)(VRAM + 0x10000)); + LoadPalette(&gUnknown_084131A4, 256, 32); + sub_8149248(); + break; + case 2: + case 3: + LoadPalette(&gUnknown_0841221C, 240, 32); + LZ77UnCompVram(&gUnknown_08413340, (void *)(VRAM)); + LZ77UnCompVram(&gUnknown_084139C8, (void *)(VRAM + 0x3000)); + LoadPalette(&gUnknown_08413320, 0, 32); + LoadCompressedObjectPic(&gUnknown_08416BDC); + LoadPalette(&gUnknown_08413320, 256, 32); + sub_8149264(); + break; + case 4: + LoadPalette(&gUnknown_0841223C, 240, 32); + LZ77UnCompVram(&gUnknown_08413E78, (void *)(VRAM)); + LZ77UnCompVram(&gUnknown_08414084, (void *)(VRAM + 0x3000)); + LoadPalette(&gUnknown_08413E38, 0, 64); + LoadCompressedObjectPic(&gUnknown_08416C70); + LoadPalette(&gUnknown_08414064, 256, 32); + sub_8149280(); + break; + } + gReservedSpritePaletteCount = 8; + gUnknown_0203935C = 0; +} + +void sub_8148E90(u8 a) +{ + REG_BG3CNT = 0x603; + REG_BG2CNT = 0x702; + REG_BG1CNT = 0xF05; + REG_DISPCNT = 0x1F40; +} + +u8 sub_8148EC0(u8 a, u16 b, u16 c, u16 d) +{ + u8 taskId = CreateTask(&sub_8148F3C, 0); + + gTasks[taskId].data[0] = a; + gTasks[taskId].data[1] = b; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[4] = c; + gTasks[taskId].data[5] = 0; + gTasks[taskId].data[6] = 0; + gTasks[taskId].data[7] = d; + gTasks[taskId].data[8] = 8; + gTasks[taskId].data[9] = 0; + sub_8148F3C(taskId); + return taskId; +} + +#ifdef NONMATCHING +void sub_8148F3C(u8 taskId) +{ + register u32 r4 asm("r4"); + s32 r2; + + r4 = (u16)gTasks[taskId].data[1] << 16; + if (r4 != 0) + { + r2 = (gTasks[taskId].data[2] << 16) + (u16)gTasks[taskId].data[3] - (r4 >> 12); + gTasks[taskId].data[2] = r2 >> 16; + gTasks[taskId].data[3] = r2; + REG_BG1HOFS = gTasks[taskId].data[2]; + REG_BG1VOFS = gUnknown_0203935A + gUnknown_02039358; + } + + r4 = (u16)gTasks[taskId].data[4] << 16; + if (r4 != 0) + { + r2 = (gTasks[taskId].data[5] << 16) + (u16)gTasks[taskId].data[6] - (r4 >> 12); + gTasks[taskId].data[5] = r2 >> 16; + gTasks[taskId].data[3] = r2; + REG_BG2HOFS = gTasks[taskId].data[5]; + if (gTasks[taskId].data[0] != 0) + REG_BG2VOFS = gUnknown_0203935A + gUnknown_02039358; + else + REG_BG2VOFS = gUnknown_02039358; + } + + r4 = (u16)gTasks[taskId].data[7] << 16; + if (r4 != 0) + { + r2 = (gTasks[taskId].data[8] << 16) + (u16)gTasks[taskId].data[9] - (r4 >> 12);; + gTasks[taskId].data[8] = r2 >> 16; + gTasks[taskId].data[9] = r2; + REG_BG3HOFS = gTasks[taskId].data[8]; + REG_BG3VOFS = gUnknown_02039358; + } +} +#else +__attribute__((naked)) +void sub_8148F3C(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + ldr r1, _08148FB4 @ =gTasks\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + adds r3, r0, r1\n\ + ldrh r0, [r3, 0xA]\n\ + lsls r4, r0, 16\n\ + adds r6, r1, 0\n\ + cmp r4, 0\n\ + beq _08148F7C\n\ + movs r1, 0xC\n\ + ldrsh r0, [r3, r1]\n\ + lsls r0, 16\n\ + ldrh r1, [r3, 0xE]\n\ + adds r2, r0, r1\n\ + lsrs r0, r4, 12\n\ + subs r2, r0\n\ + asrs r1, r2, 16\n\ + strh r1, [r3, 0xC]\n\ + strh r2, [r3, 0xE]\n\ + ldr r0, _08148FB8 @ =REG_BG1HOFS\n\ + strh r1, [r0]\n\ + ldr r2, _08148FBC @ =REG_BG1VOFS\n\ + ldr r1, _08148FC0 @ =gUnknown_02039358\n\ + ldr r0, _08148FC4 @ =gUnknown_0203935A\n\ + ldrh r0, [r0]\n\ + ldrh r1, [r1]\n\ + adds r0, r1\n\ + strh r0, [r2]\n\ +_08148F7C:\n\ + ldrh r0, [r3, 0x10]\n\ + lsls r4, r0, 16\n\ + cmp r4, 0\n\ + beq _08148FD8\n\ + movs r1, 0x12\n\ + ldrsh r0, [r3, r1]\n\ + lsls r0, 16\n\ + ldrh r1, [r3, 0x14]\n\ + adds r2, r0, r1\n\ + lsrs r0, r4, 12\n\ + subs r2, r0\n\ + asrs r1, r2, 16\n\ + strh r1, [r3, 0x12]\n\ + strh r2, [r3, 0x14]\n\ + ldr r0, _08148FC8 @ =REG_BG2HOFS\n\ + strh r1, [r0]\n\ + movs r1, 0x8\n\ + ldrsh r0, [r3, r1]\n\ + cmp r0, 0\n\ + beq _08148FD0\n\ + ldr r2, _08148FCC @ =REG_BG2VOFS\n\ + ldr r1, _08148FC0 @ =gUnknown_02039358\n\ + ldr r0, _08148FC4 @ =gUnknown_0203935A\n\ + ldrh r0, [r0]\n\ + ldrh r1, [r1]\n\ + adds r0, r1\n\ + strh r0, [r2]\n\ + b _08148FD8\n\ + .align 2, 0\n\ +_08148FB4: .4byte gTasks\n\ +_08148FB8: .4byte REG_BG1HOFS\n\ +_08148FBC: .4byte REG_BG1VOFS\n\ +_08148FC0: .4byte gUnknown_02039358\n\ +_08148FC4: .4byte gUnknown_0203935A\n\ +_08148FC8: .4byte REG_BG2HOFS\n\ +_08148FCC: .4byte REG_BG2VOFS\n\ +_08148FD0:\n\ + ldr r0, _08149010 @ =REG_BG2VOFS\n\ + ldr r1, _08149014 @ =gUnknown_02039358\n\ + ldrh r1, [r1]\n\ + strh r1, [r0]\n\ +_08148FD8:\n\ + lsls r0, r5, 2\n\ + adds r0, r5\n\ + lsls r0, 3\n\ + adds r3, r0, r6\n\ + ldrh r0, [r3, 0x16]\n\ + lsls r4, r0, 16\n\ + cmp r4, 0\n\ + beq _08149008\n\ + movs r1, 0x18\n\ + ldrsh r0, [r3, r1]\n\ + lsls r0, 16\n\ + ldrh r1, [r3, 0x1A]\n\ + adds r2, r0, r1\n\ + lsrs r0, r4, 12\n\ + subs r2, r0\n\ + asrs r1, r2, 16\n\ + strh r1, [r3, 0x18]\n\ + strh r2, [r3, 0x1A]\n\ + ldr r0, _08149018 @ =REG_BG3HOFS\n\ + strh r1, [r0]\n\ + ldr r1, _0814901C @ =REG_BG3VOFS\n\ + ldr r0, _08149014 @ =gUnknown_02039358\n\ + ldrh r0, [r0]\n\ + strh r0, [r1]\n\ +_08149008:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08149010: .4byte REG_BG2VOFS\n\ +_08149014: .4byte gUnknown_02039358\n\ +_08149018: .4byte REG_BG3HOFS\n\ +_0814901C: .4byte REG_BG3VOFS\n\ + .syntax divided\n"); +} +#endif + +void sub_8149020(u8 mode) +{ + u16 var1; + u16 var2; + switch (mode) + { + case 0: + default: + /* stuff */ + if (gMain.vblankCounter1 & 3 || gPaletteFade.active) + break; + if (gMain.vblankCounter1 & 4) + { + var1 = gPlttBufferUnfaded[9]; + var2 = gPlttBufferUnfaded[10]; + } + else + { + var1 = gPlttBufferUnfaded[10]; + var2 = gPlttBufferUnfaded[9]; + } + LoadPalette(&var1, 9, 2); + LoadPalette(&var2, 10, 2); + break; + case 2: + if (gMain.vblankCounter1 & 3 || gPaletteFade.active) + break; + if (gMain.vblankCounter1 & 4) + { + var1 = 0x3D27; + var2 = 0x295; + } + else + { + var1 = 0x31C; + var2 = 0x3D27; + } + LoadPalette(&var1, 12, 2); + LoadPalette(&var2, 13, 2); + break; + case 1: + break; + } +} + +void sub_814910C(struct Sprite *sprite) +{ + if (gUnknown_0203935C) + { + DestroySprite(sprite); + } + else + { + s32 var = ((sprite->pos1.x << 16) | (u16)sprite->data2) + (u16)sprite->data1; + sprite->pos1.x = var >> 16; + sprite->data2 = var; + if (sprite->pos1.x > 255) sprite->pos1.x = 0xFFE0; + if (sprite->data0) + { + sprite->pos2.y = -(gUnknown_02039358 + gUnknown_0203935A); + } + else + { + sprite->pos2.y = -gUnknown_02039358; + } + } +} + +void sub_8149174(u8 a, struct UnknownStruct1 *b, const union AnimCmd *const *c, u8 d) +{ + u8 i; + + for(i = 0; i < d; i++) + { + u8 sprite = CreateSprite(&gSpriteTemplate_8416B3C, b[i].var1, b[i].var2, b[i].var3); + CalcCenterToCornerVec(&gSprites[sprite], b[i].var0_4, b[i].var0_6, 0); + gSprites[sprite].oam.priority = 3; + gSprites[sprite].oam.shape = b[i].var0_4; + gSprites[sprite].oam.size = b[i].var0_6; + gSprites[sprite].oam.paletteNum = 0; + gSprites[sprite].anims = c; + StartSpriteAnim(&gSprites[sprite], b[i].var0_0); + gSprites[sprite].data0 = a; + gSprites[sprite].data1 = b[i].var4; + gSprites[sprite].data2 = 0; + } +} + +void sub_8149248() +{ + sub_8149174(0, &gUnknown_08416B94, &gSpriteAnimTable_8416B84, 9); +} + +void sub_8149264() +{ + sub_8149174(1, &gUnknown_08416C10, &gSpriteAnimTable_8416C04, 12); +} + +void sub_8149280() +{ + sub_8149174(1, &gUnknown_08416C8C, &gSpriteAnimTable_8416C88, 6); +} + +void nullsub_82() +{ +} + +void sub_81492A0(struct Sprite* sprite) +{ + sprite->invisible = gSprites[sprite->data0].invisible; + sprite->pos1.x = gSprites[sprite->data0].pos1.x; + sprite->pos1.y = gSprites[sprite->data0].pos1.y + 8; + sprite->pos2.x = gSprites[sprite->data0].pos2.x; + sprite->pos2.y = gSprites[sprite->data0].pos2.y; +} + + + +u8 intro_create_brendan_sprite(s16 a, s16 b) +{ + u8 sprite = CreateSprite(&gSpriteTemplate_8416CDC, a, b, 0); + u8 brendan = CreateSprite(&gSpriteTemplate_Brendan, a, b + 8, 1); + gSprites[brendan].data0 = sprite; + return sprite; +} + +u8 intro_create_may_sprite(s16 a, s16 b) +{ + u8 sprite = CreateSprite(&gSpriteTemplate_8416CF4, a, b, 0); + u8 may = CreateSprite(&gSpriteTemplate_May, a, b + 8, 1); + gSprites[may].data0 = sprite; + return sprite; +} + +void nullsub_83() +{ +} + +void sub_81493C4(struct Sprite* sprite) +{ + sprite->invisible = gSprites[sprite->data0].invisible; + sprite->pos1.y = gSprites[sprite->data0].pos1.y; + sprite->pos2.x = gSprites[sprite->data0].pos2.x; + sprite->pos2.y = gSprites[sprite->data0].pos2.y; +} + +u8 intro_create_latios_sprite(s16 a, s16 b) +{ + u8 sprite = CreateSprite(&gSpriteTemplate_8416D7C, a - 32, b, 2); + u8 latios = CreateSprite(&gSpriteTemplate_8416D7C, a + 32, b, 2); + gSprites[latios].data0 = sprite; + StartSpriteAnim(&gSprites[latios], 1); + gSprites[latios].callback = &sub_81493C4; + return sprite; +} + +u8 intro_create_latias_sprite(s16 a, s16 b) +{ + u8 sprite = CreateSprite(&gSpriteTemplate_8416D94, a - 32, b, 2); + u8 latios = CreateSprite(&gSpriteTemplate_8416D94, a + 32, b, 2); + gSprites[latios].data0 = sprite; + StartSpriteAnim(&gSprites[latios], 1); + gSprites[latios].callback = &sub_81493C4; + return sprite; +} -- cgit v1.2.3 From ab913c9e63d21a604001c5fee48f0a225d9964ee Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 20 Aug 2017 17:42:43 +0200 Subject: german build fixed --- src/battle_message.c | 524 ++++++++++++++++++++++++++------------------------- 1 file changed, 263 insertions(+), 261 deletions(-) (limited to 'src') diff --git a/src/battle_message.c b/src/battle_message.c index d4b8f86c6..350856818 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -42,57 +42,57 @@ extern u16 gBattlePartyID[4]; extern struct BattleEnigmaBerry gEnigmaBerries[4]; extern u8 gBattleBufferA[4][0x200]; -extern const u8 gUnknown_084005DB[]; -extern const u8 gUnknown_084005C7[]; -extern const u8 gUnknown_084005AA[]; -extern const u8 gUnknown_08400568[]; -extern const u8 gUnknown_08400590[]; -extern const u8 gUnknown_0840057B[]; -extern const u8 gUnknown_08400555[]; -extern const u8 gUnknown_084006F1[]; -extern const u8 gUnknown_084006A4[]; -extern const u8 gUnknown_0840069C[]; -extern const u8 gUnknown_0840065C[]; -extern const u8 gUnknown_08400645[]; -extern const u8 gUnknown_08400608[]; -extern const u8 gUnknown_08400635[]; -extern const u8 gUnknown_084005F5[]; -extern const u8 gUnknown_08400709[]; -extern const u8 gUnknown_08400727[]; -extern const u8 gUnknown_08400736[]; -extern const u8 gUnknown_08400749[]; -extern const u8 gUnknown_08400781[]; -extern const u8 gUnknown_08400771[]; -extern const u8 gUnknown_0840075E[]; -extern const u8 gUnknown_084006B3[]; -extern const u8 gUnknown_084006BB[]; -extern const u8 gUnknown_084006C6[]; -extern const u8 gUnknown_084006D5[]; -extern const u8 gUnknown_0840068C[]; -extern const u8 gUnknown_0840067C[]; -extern const u8 gUnknown_08400622[]; -extern const u8 gUnknown_084007BD[]; -extern const u8 gUnknown_083FFEFC[]; -extern const u8 gUnknown_083FFFF7[]; -extern const u8 gUnknown_083FFFEA[]; -extern const u8 gUnknown_083FFF6A[]; -extern const u8 gUnknown_083FFF99[]; -extern const u8 gUnknown_083FFFCB[]; -extern const u8 gUnknown_083FFF56[]; -extern const u8 gUnknown_083FFF81[]; -extern const u8 gUnknown_083FFFB3[]; -extern const u8 gUnknown_08400A78[]; -extern const u8 gUnknown_08400A85[]; -extern const u8 gUnknown_08400797[]; -extern const u8 gUnknown_08400791[]; -extern const u8 gUnknown_084007B7[]; -extern const u8 gUnknown_084007B2[]; -extern const u8 gUnknown_0840079C[]; -extern const u8 gUnknown_084007A1[]; -extern const u8 gUnknown_084007A7[]; -extern const u8 gUnknown_084007AC[]; -extern const u8 gUnknown_084009ED[]; -extern const u8 gUnknown_084009F7[]; +extern const u8 gUnknown_084005DB[]; +extern const u8 gUnknown_084005C7[]; +extern const u8 gUnknown_084005AA[]; +extern const u8 gUnknown_08400568[]; +extern const u8 gUnknown_08400590[]; +extern const u8 gUnknown_0840057B[]; +extern const u8 gUnknown_08400555[]; +extern const u8 gUnknown_084006F1[]; +extern const u8 gUnknown_084006A4[]; +extern const u8 gUnknown_0840069C[]; +extern const u8 gUnknown_0840065C[]; +extern const u8 gUnknown_08400645[]; +extern const u8 gUnknown_08400608[]; +extern const u8 gUnknown_08400635[]; +extern const u8 gUnknown_084005F5[]; +extern const u8 gUnknown_08400709[]; +extern const u8 gUnknown_08400727[]; +extern const u8 gUnknown_08400736[]; +extern const u8 gUnknown_08400749[]; +extern const u8 gUnknown_08400781[]; +extern const u8 gUnknown_08400771[]; +extern const u8 gUnknown_0840075E[]; +extern const u8 gUnknown_084006B3[]; +extern const u8 gUnknown_084006BB[]; +extern const u8 gUnknown_084006C6[]; +extern const u8 gUnknown_084006D5[]; +extern const u8 gUnknown_0840068C[]; +extern const u8 gUnknown_0840067C[]; +extern const u8 gUnknown_08400622[]; +extern const u8 gUnknown_084007BD[]; +extern const u8 gUnknown_083FFEFC[]; +extern const u8 gUnknown_083FFFF7[]; +extern const u8 gUnknown_083FFFEA[]; +extern const u8 gUnknown_083FFF6A[]; +extern const u8 gUnknown_083FFF99[]; +extern const u8 gUnknown_083FFFCB[]; +extern const u8 gUnknown_083FFF56[]; +extern const u8 gUnknown_083FFF81[]; +extern const u8 gUnknown_083FFFB3[]; +extern const u8 gUnknown_08400A78[]; +extern const u8 gUnknown_08400A85[]; +extern const u8 gUnknown_08400797[]; +extern const u8 gUnknown_08400791[]; +extern const u8 gUnknown_084007B7[]; +extern const u8 gUnknown_084007B2[]; +extern const u8 gUnknown_0840079C[]; +extern const u8 gUnknown_084007A1[]; +extern const u8 gUnknown_084007A7[]; +extern const u8 gUnknown_084007AC[]; +extern const u8 gUnknown_084009ED[]; +extern const u8 gUnknown_084009F7[]; extern const u8 gUnknown_084007C8[]; extern const u8 gUnknown_084007CA[]; extern const u8 gUnknown_084007CC[]; @@ -134,9 +134,9 @@ struct StringInfo extern struct StringInfo* gSelectedOrderFromParty; #define gStringInfo gSelectedOrderFromParty -static void sub_8121D1C(u8* textBuff); -static void sub_8121D74(u8* textBuff); -static void StrCpyDecodeBattleTextBuff(u8* src, u8* dst); +void sub_8121D1C(u8* textBuff); +void sub_8121D74(u8* textBuff); +void StrCpyDecodeBattleTextBuff(u8* src, u8* dst); u8 GetBankSide(u8 bank); s32 sub_803FC34(u16); @@ -147,6 +147,9 @@ u8 GetMultiplayerId(void); u8 GetBankByPlayerAI(u8 ID); u8 GetBankSide(u8 bank); u8 GetBankIdentity(u8 bank); +#ifdef GERMAN +extern u8 *de_sub_804110C(); +#endif void BufferStringBattle(u16 stringID) { @@ -184,7 +187,12 @@ void BufferStringBattle(u16 stringID) stringPtr = gUnknown_084005C7; } else + { stringPtr = gUnknown_084005AA; +#ifdef GERMAN + stringPtr = de_sub_804110C(0xFFFF, stringPtr); +#endif + } } else { @@ -220,12 +228,22 @@ void BufferStringBattle(u16 stringID) else if (gBattleTypeFlags & BATTLE_TYPE_LINK) stringPtr = gUnknown_08400645; else + { stringPtr = gUnknown_08400608; +#ifdef GERMAN + stringPtr = de_sub_804110C(0xFFFF, stringPtr); +#endif + } } else if (gBattleTypeFlags & BATTLE_TYPE_LINK) stringPtr = gUnknown_08400635; else + { stringPtr = gUnknown_084005F5; +#ifdef GERMAN + stringPtr = de_sub_804110C(0xFFFF, stringPtr); +#endif + } } break; case 2: // sending poke to ball msg @@ -250,7 +268,12 @@ void BufferStringBattle(u16 stringID) stringPtr = gUnknown_08400771; } else + { stringPtr = gUnknown_0840075E; +#ifdef GERMAN + stringPtr = de_sub_804110C(0xFFFF, stringPtr); +#endif + } } break; case 3: // switch-in msg @@ -275,7 +298,12 @@ void BufferStringBattle(u16 stringID) stringPtr = gUnknown_0840067C; } else + { stringPtr = gUnknown_08400622; +#ifdef GERMAN + stringPtr = de_sub_804110C(0xFFFF, stringPtr); +#endif + } } break; case 4: // pokemon used a move msg @@ -346,7 +374,12 @@ void BufferStringBattle(u16 stringID) return; } else + { stringPtr = gBattleStringsTable[stringID - BATTLESTRING_TO_SUB]; +#ifdef GERMAN + stringPtr = de_sub_804110C(stringID, stringPtr); +#endif + } break; } StrCpyDecodeToDisplayedStringBattle(stringPtr); @@ -357,7 +390,7 @@ u32 StrCpyDecodeToDisplayedStringBattle(const u8* src) StrCpyDecodeBattle(src, gDisplayedStringBattle); } -static const u8* AppendStatusString(u8* src) +const u8* AppendStatusString(u8* src) { u32 i; u8 status[8]; @@ -385,6 +418,59 @@ static const u8* AppendStatusString(u8* src) return NULL; } +#ifdef GERMAN +extern u8 *de_sub_8073174(u8 *, const u8 *); +extern u8 *de_sub_8041024(s32, u32); +#endif + +#ifdef ENGLISH +#define HANDLE_NICKNAME_STRING_CASE(bank, monIndex) \ + if (GetBankSide(bank) != 0) \ + { \ + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) \ + toCpy = gUnknown_08400797; \ + else \ + toCpy = gUnknown_08400791; \ + while (*toCpy != EOS) \ + { \ + dst[dstID] = *toCpy; \ + dstID++; \ + toCpy++; \ + } \ + GetMonData(&gEnemyParty[monIndex], MON_DATA_NICKNAME, text); \ + } \ + else \ + { \ + GetMonData(&gPlayerParty[monIndex], MON_DATA_NICKNAME, text); \ + } \ + StringGetEnd10(text); \ + toCpy = text; +#else +#define HANDLE_NICKNAME_STRING_CASE(bank, monIndex) \ + if (GetBankSide(bank) != 0) \ + { \ + GetMonData(&gEnemyParty[monIndex], MON_DATA_NICKNAME, text); \ + StringGetEnd10(text); \ + toCpy = text; \ + while (*toCpy != EOS) \ + { \ + dst[dstID] = *toCpy; \ + dstID++; \ + toCpy++; \ + } \ + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) \ + toCpy = gUnknown_08400797; \ + else \ + toCpy = gUnknown_08400791; \ + } \ + else \ + { \ + GetMonData(&gPlayerParty[monIndex], MON_DATA_NICKNAME, text); \ + StringGetEnd10(text); \ + toCpy = text; \ + } +#endif + u32 StrCpyDecodeBattle(const u8* src, u8* dst) { u32 dstID = 0; // if they used dstID, why not use srcID as well? @@ -471,25 +557,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) toCpy = text; break; case 10: // attacker name with prefix, only bank 0/1 - if (GetBankSide(gBankAttacker) != 0) - { - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - toCpy = gUnknown_08400797; - else - toCpy = gUnknown_08400791; - while (*toCpy != EOS) - { - dst[dstID] = *toCpy; - dstID++; - toCpy++; - } - GetMonData(&gEnemyParty[gBattlePartyID[GetBankByPlayerAI(GetBankIdentity(gBankAttacker) & 1)]], MON_DATA_NICKNAME, text); - } - else - GetMonData(&gPlayerParty[gBattlePartyID[GetBankByPlayerAI(GetBankIdentity(gBankAttacker) & 1)]], MON_DATA_NICKNAME, text); - - StringGetEnd10(text); - toCpy = text; + HANDLE_NICKNAME_STRING_CASE(gBankAttacker, gBattlePartyID[GetBankByPlayerAI(GetBankIdentity(gBankAttacker) & 1)]) break; case 11: // attacker partner name, only bank 0/1 if (GetBankSide(gBankAttacker) == 0) @@ -501,109 +569,19 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) toCpy = text; break; case 12: // attacker name with prefix - if (GetBankSide(gBankAttacker) != 0) - { - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - toCpy = gUnknown_08400797; - else - toCpy = gUnknown_08400791; - while (*toCpy != EOS) - { - dst[dstID] = *toCpy; - dstID++; - toCpy++; - } - GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker]], MON_DATA_NICKNAME, text); - } - else - GetMonData(&gPlayerParty[gBattlePartyID[gBankAttacker]], MON_DATA_NICKNAME, text); - - StringGetEnd10(text); - toCpy = text; + HANDLE_NICKNAME_STRING_CASE(gBankAttacker, gBattlePartyID[gBankAttacker]) break; case 13: // target name with prefix - if (GetBankSide(gBankTarget) != 0) - { - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - toCpy = gUnknown_08400797; - else - toCpy = gUnknown_08400791; - while (*toCpy != EOS) - { - dst[dstID] = *toCpy; - dstID++; - toCpy++; - } - GetMonData(&gEnemyParty[gBattlePartyID[gBankTarget]], MON_DATA_NICKNAME, text); - } - else - GetMonData(&gPlayerParty[gBattlePartyID[gBankTarget]], MON_DATA_NICKNAME, text); - - StringGetEnd10(text); - toCpy = text; + HANDLE_NICKNAME_STRING_CASE(gBankTarget, gBattlePartyID[gBankTarget]) break; case 14: // effect bank name with prefix - if (GetBankSide(gEffectBank) != 0) - { - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - toCpy = gUnknown_08400797; - else - toCpy = gUnknown_08400791; - while (*toCpy != EOS) - { - dst[dstID] = *toCpy; - dstID++; - toCpy++; - } - GetMonData(&gEnemyParty[gBattlePartyID[gEffectBank]], MON_DATA_NICKNAME, text); - } - else - GetMonData(&gPlayerParty[gBattlePartyID[gEffectBank]], MON_DATA_NICKNAME, text); - - StringGetEnd10(text); - toCpy = text; + HANDLE_NICKNAME_STRING_CASE(gEffectBank, gBattlePartyID[gEffectBank]) break; case 15: // active bank name with prefix - if (GetBankSide(gActiveBank) != 0) - { - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - toCpy = gUnknown_08400797; - else - toCpy = gUnknown_08400791; - while (*toCpy != EOS) - { - dst[dstID] = *toCpy; - dstID++; - toCpy++; - } - GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_NICKNAME, text); - } - else - GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_NICKNAME, text); - - StringGetEnd10(text); - toCpy = text; + HANDLE_NICKNAME_STRING_CASE(gActiveBank, gBattlePartyID[gActiveBank]) break; case 16: // scripting active bank name with prefix - if (GetBankSide(BATTLE_STRUCT->scriptingActive) != 0) - { - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - toCpy = gUnknown_08400797; - else - toCpy = gUnknown_08400791; - while (*toCpy != EOS) - { - dst[dstID] = *toCpy; - dstID++; - toCpy++; - } - GetMonData(&gEnemyParty[gBattlePartyID[BATTLE_STRUCT->scriptingActive]], MON_DATA_NICKNAME, text); - } - else - GetMonData(&gPlayerParty[gBattlePartyID[BATTLE_STRUCT->scriptingActive]], MON_DATA_NICKNAME, text); - - StringGetEnd10(text); - toCpy = text; + HANDLE_NICKNAME_STRING_CASE(BATTLE_STRUCT->scriptingActive, gBattlePartyID[BATTLE_STRUCT->scriptingActive]) break; case 17: // current move name if (gStringInfo->currentMove > 0x162) @@ -625,7 +603,11 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 == gStringBank) { StringCopy(text, gEnigmaBerries[gStringBank].name); +#ifdef ENGLISH StringAppend(text, gUnknown_08400A85); +#else + de_sub_8073174(text, gUnknown_08400A85); +#endif toCpy = text; } else @@ -659,6 +641,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) toCpy = gAbilityNames[gAbilitiesPerBank[gEffectBank]]; break; case 25: // trainer class name +#ifdef ENGLISH if (gTrainerBattleOpponent == 0x400) toCpy = gTrainerClassNames[GetSecretBaseTrainerNameIndex()]; else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) @@ -668,6 +651,17 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) else toCpy = gTrainerClassNames[gTrainers[gTrainerBattleOpponent].trainerClass]; break; +#else + if (gTrainerBattleOpponent == 0x400) + toCpy = de_sub_8041024(gTrainerBattleOpponent, 0); + else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) + toCpy = de_sub_8041024(BATTLE_TYPE_BATTLE_TOWER, 0); + else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) + toCpy = de_sub_8041024(BATTLE_TYPE_EREADER_TRAINER, 0); + else + toCpy = de_sub_8041024(0, gTrainerBattleOpponent); + break; +#endif case 26: // trainer name if (gTrainerBattleOpponent == 0x400) { @@ -710,25 +704,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) toCpy = sub_8082830(); break; case 34: // ? - if (GetBankSide(BATTLE_STRUCT->scriptingActive) != 0) - { - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) - toCpy = gUnknown_08400797; - else - toCpy = gUnknown_08400791; - while (*toCpy != EOS) - { - dst[dstID] = *toCpy; - dstID++; - toCpy++; - } - GetMonData(&gEnemyParty[BATTLE_STRUCT->unk1605E], MON_DATA_NICKNAME, text); - } - else - GetMonData(&gPlayerParty[BATTLE_STRUCT->unk1605E], MON_DATA_NICKNAME, text); - - StringGetEnd10(text); - toCpy = text; + HANDLE_NICKNAME_STRING_CASE(BATTLE_STRUCT->scriptingActive, BATTLE_STRUCT->unk1605E) break; case 35: // lanette pc if (FlagGet(SYS_PC_LANETTE)) @@ -773,7 +749,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) toCpy = gUnknown_084007B2; break; } - //if (toCpy != NULL) really GF, why did you forgot about this + //if (toCpy != NULL) really GF, why did you forget about this? while (*toCpy != EOS) { dst[dstID] = *toCpy; @@ -803,23 +779,26 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) #define ByteRead16(ptr) ((ptr)[0] | ((ptr)[1] << 8)) #define ByteRead32(ptr) ((ptr)[0] | (ptr)[1] << 8 | (ptr)[2] << 16 | (ptr)[3] << 24) -static void StrCpyDecodeBattleTextBuff(u8* src, u8* dst) +void StrCpyDecodeBattleTextBuff(u8* src, u8* dst) { u32 srcID = 1; u32 value = 0; u8 text[12]; + u16 hword; *dst = EOS; while (src[srcID] != EOS) { switch (src[srcID]) { - case 0: // battlescript ptr - { - u16 BS_ID = ByteRead16(&src[srcID + 1]); - StringAppend(dst, gBattleStringsTable[BS_ID - BATTLESTRING_TO_SUB]); + case 0: // battle string + hword = ByteRead16(&src[srcID + 1]); +#ifdef GERMAN + if (hword == 209 || hword == 211) srcID += 3; - } +#endif + StringAppend(dst, gBattleStringsTable[hword - BATTLESTRING_TO_SUB]); + srcID += 3; break; case 1: // int to string switch (src[srcID + 1]) @@ -846,6 +825,7 @@ static void StrCpyDecodeBattleTextBuff(u8* src, u8* dst) srcID += 2; break; case 4: // poke nick with prefix +#ifdef ENGLISH if (GetBankSide(src[srcID + 1]) == 0) { GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, text); @@ -860,6 +840,24 @@ static void StrCpyDecodeBattleTextBuff(u8* src, u8* dst) } StringGetEnd10(text); StringAppend(dst, text); +#else + if (GetBankSide(src[srcID + 1]) == 0) + { + GetMonData(&gPlayerParty[src[srcID + 2]], MON_DATA_NICKNAME, text); + StringGetEnd10(text); + StringAppend(dst, text); + } + else + { + GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, text); + StringGetEnd10(text); + StringAppend(dst, text); + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) + StringAppend(dst, gUnknown_08400797); + else + StringAppend(dst, gUnknown_08400791); + } +#endif srcID += 3; break; case 5: // stats @@ -888,24 +886,28 @@ static void StrCpyDecodeBattleTextBuff(u8* src, u8* dst) break; case 10: // item name { - u16 item = ByteRead16(&src[srcID + 1]); + hword = ByteRead16(&src[srcID + 1]); if (gBattleTypeFlags & BATTLE_TYPE_LINK) { - if (item == ITEM_ENIGMA_BERRY) + if (hword == ITEM_ENIGMA_BERRY) { if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 == gStringBank) { StringCopy(dst, gEnigmaBerries[gStringBank].name); +#ifdef ENGLISH StringAppend(dst, gUnknown_08400A85); +#else + de_sub_8073174(dst, gUnknown_08400A85); +#endif } else StringAppend(dst, gUnknown_08400A78); } else - CopyItemName(item, dst); + CopyItemName(hword, dst); } else - CopyItemName(item, dst); + CopyItemName(hword, dst); srcID += 3; } break; @@ -913,7 +915,7 @@ static void StrCpyDecodeBattleTextBuff(u8* src, u8* dst) } } -static void sub_8121D1C(u8* textBuff) +void sub_8121D1C(u8* textBuff) { s32 counter = 0; u32 i = 0; @@ -937,7 +939,7 @@ static void sub_8121D1C(u8* textBuff) #ifdef NONMATCHING -static void sub_8121D74(u8* dst) +void sub_8121D74(u8* dst) { s32 counter = 0; s32 i; @@ -975,88 +977,88 @@ static void sub_8121D74(u8* dst) #else __attribute__((naked)) -static void sub_8121D74(u8* dst) +void sub_8121D74(u8* dst) { asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - adds r3, r0, 0\n\ - movs r4, 0\n\ - b _08121D7E\n\ + push {r4,r5,lr}\n\ + adds r3, r0, 0\n\ + movs r4, 0\n\ + b _08121D7E\n\ _08121D7C:\n\ - adds r3, 0x1\n\ + adds r3, 0x1\n\ _08121D7E:\n\ - ldrb r0, [r3]\n\ - cmp r0, 0xFF\n\ - bne _08121D7C\n\ - ldr r1, _08121DB4 @ =gUnknown_084016BC\n\ - ldr r5, _08121DB8 @ =gSelectedOrderFromParty\n\ - movs r0, 0\n\ - lsls r0, 1\n\ - adds r2, r0, r1\n\ + ldrb r0, [r3]\n\ + cmp r0, 0xFF\n\ + bne _08121D7C\n\ + ldr r1, _08121DB4 @ =gUnknown_084016BC\n\ + ldr r5, _08121DB8 @ =gSelectedOrderFromParty\n\ + movs r0, 0\n\ + lsls r0, 1\n\ + adds r2, r0, r1\n\ _08121D8E:\n\ - cmp r4, 0x4\n\ - beq _08121DA8\n\ - ldrh r1, [r2]\n\ - cmp r1, 0\n\ - bne _08121D9A\n\ - adds r4, 0x1\n\ + cmp r4, 0x4\n\ + beq _08121DA8\n\ + ldrh r1, [r2]\n\ + cmp r1, 0\n\ + bne _08121D9A\n\ + adds r4, 0x1\n\ _08121D9A:\n\ - ldr r0, [r5]\n\ - adds r2, 0x2\n\ - ldrh r0, [r0]\n\ - cmp r1, r0\n\ - bne _08121D8E\n\ - cmp r4, 0x4\n\ - bhi _08121E04\n\ + ldr r0, [r5]\n\ + adds r2, 0x2\n\ + ldrh r0, [r0]\n\ + cmp r1, r0\n\ + bne _08121D8E\n\ + cmp r4, 0x4\n\ + bhi _08121E04\n\ _08121DA8:\n\ - lsls r0, r4, 2\n\ - ldr r1, _08121DBC @ =_08121DC0\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ + lsls r0, r4, 2\n\ + ldr r1, _08121DBC @ =_08121DC0\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ _08121DB4: .4byte gUnknown_084016BC\n\ _08121DB8: .4byte gSelectedOrderFromParty\n\ _08121DBC: .4byte _08121DC0\n\ - .align 2, 0\n\ + .align 2, 0\n\ _08121DC0:\n\ - .4byte _08121DD4\n\ - .4byte _08121DDC\n\ - .4byte _08121DE4\n\ - .4byte _08121DEC\n\ - .4byte _08121DFC\n\ + .4byte _08121DD4\n\ + .4byte _08121DDC\n\ + .4byte _08121DE4\n\ + .4byte _08121DEC\n\ + .4byte _08121DFC\n\ _08121DD4:\n\ - ldr r1, _08121DD8 @ =gUnknown_084007C8\n\ - b _08121DEE\n\ - .align 2, 0\n\ + ldr r1, _08121DD8 @ =gUnknown_084007C8\n\ + b _08121DEE\n\ + .align 2, 0\n\ _08121DD8: .4byte gUnknown_084007C8\n\ _08121DDC:\n\ - ldr r1, _08121DE0 @ =gUnknown_084007CA\n\ - b _08121DEE\n\ - .align 2, 0\n\ + ldr r1, _08121DE0 @ =gUnknown_084007CA\n\ + b _08121DEE\n\ + .align 2, 0\n\ _08121DE0: .4byte gUnknown_084007CA\n\ _08121DE4:\n\ - ldr r1, _08121DE8 @ =gUnknown_084007CC\n\ - b _08121DEE\n\ - .align 2, 0\n\ + ldr r1, _08121DE8 @ =gUnknown_084007CC\n\ + b _08121DEE\n\ + .align 2, 0\n\ _08121DE8: .4byte gUnknown_084007CC\n\ _08121DEC:\n\ - ldr r1, _08121DF8 @ =gUnknown_084007CE\n\ + ldr r1, _08121DF8 @ =gUnknown_084007CE\n\ _08121DEE:\n\ - adds r0, r3, 0\n\ - bl StringCopy\n\ - b _08121E04\n\ - .align 2, 0\n\ + adds r0, r3, 0\n\ + bl StringCopy\n\ + b _08121E04\n\ + .align 2, 0\n\ _08121DF8: .4byte gUnknown_084007CE\n\ _08121DFC:\n\ - ldr r1, _08121E0C @ =gUnknown_084007D0\n\ - adds r0, r3, 0\n\ - bl StringCopy\n\ + ldr r1, _08121E0C @ =gUnknown_084007D0\n\ + adds r0, r3, 0\n\ + bl StringCopy\n\ _08121E04:\n\ - pop {r4,r5}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ _08121E0C: .4byte gUnknown_084007D0\n\ .syntax divided"); } -- cgit v1.2.3 From 872c04bd73b5fb1f68f5f5a668b70cdd778a397f Mon Sep 17 00:00:00 2001 From: DizzyEggg Date: Sun, 20 Aug 2017 23:15:13 +0200 Subject: cam fixed the last nonmatching function --- src/battle_message.c | 96 ++-------------------------------------------------- 1 file changed, 2 insertions(+), 94 deletions(-) (limited to 'src') diff --git a/src/battle_message.c b/src/battle_message.c index 350856818..37ec14459 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -937,17 +937,14 @@ void sub_8121D1C(u8* textBuff) } } -#ifdef NONMATCHING - void sub_8121D74(u8* dst) { s32 counter = 0; - s32 i; + s32 i = 0; while (*dst != EOS) dst++; - i = 0; while (counter != 4) { if (gUnknown_084016BC[i] == 0) @@ -955,6 +952,7 @@ void sub_8121D74(u8* dst) if (gUnknown_084016BC[i++] == gStringInfo->currentMove) break; } + switch (counter) { case 0: @@ -974,93 +972,3 @@ void sub_8121D74(u8* dst) break; } } - -#else -__attribute__((naked)) -void sub_8121D74(u8* dst) -{ - asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - adds r3, r0, 0\n\ - movs r4, 0\n\ - b _08121D7E\n\ -_08121D7C:\n\ - adds r3, 0x1\n\ -_08121D7E:\n\ - ldrb r0, [r3]\n\ - cmp r0, 0xFF\n\ - bne _08121D7C\n\ - ldr r1, _08121DB4 @ =gUnknown_084016BC\n\ - ldr r5, _08121DB8 @ =gSelectedOrderFromParty\n\ - movs r0, 0\n\ - lsls r0, 1\n\ - adds r2, r0, r1\n\ -_08121D8E:\n\ - cmp r4, 0x4\n\ - beq _08121DA8\n\ - ldrh r1, [r2]\n\ - cmp r1, 0\n\ - bne _08121D9A\n\ - adds r4, 0x1\n\ -_08121D9A:\n\ - ldr r0, [r5]\n\ - adds r2, 0x2\n\ - ldrh r0, [r0]\n\ - cmp r1, r0\n\ - bne _08121D8E\n\ - cmp r4, 0x4\n\ - bhi _08121E04\n\ -_08121DA8:\n\ - lsls r0, r4, 2\n\ - ldr r1, _08121DBC @ =_08121DC0\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_08121DB4: .4byte gUnknown_084016BC\n\ -_08121DB8: .4byte gSelectedOrderFromParty\n\ -_08121DBC: .4byte _08121DC0\n\ - .align 2, 0\n\ -_08121DC0:\n\ - .4byte _08121DD4\n\ - .4byte _08121DDC\n\ - .4byte _08121DE4\n\ - .4byte _08121DEC\n\ - .4byte _08121DFC\n\ -_08121DD4:\n\ - ldr r1, _08121DD8 @ =gUnknown_084007C8\n\ - b _08121DEE\n\ - .align 2, 0\n\ -_08121DD8: .4byte gUnknown_084007C8\n\ -_08121DDC:\n\ - ldr r1, _08121DE0 @ =gUnknown_084007CA\n\ - b _08121DEE\n\ - .align 2, 0\n\ -_08121DE0: .4byte gUnknown_084007CA\n\ -_08121DE4:\n\ - ldr r1, _08121DE8 @ =gUnknown_084007CC\n\ - b _08121DEE\n\ - .align 2, 0\n\ -_08121DE8: .4byte gUnknown_084007CC\n\ -_08121DEC:\n\ - ldr r1, _08121DF8 @ =gUnknown_084007CE\n\ -_08121DEE:\n\ - adds r0, r3, 0\n\ - bl StringCopy\n\ - b _08121E04\n\ - .align 2, 0\n\ -_08121DF8: .4byte gUnknown_084007CE\n\ -_08121DFC:\n\ - ldr r1, _08121E0C @ =gUnknown_084007D0\n\ - adds r0, r3, 0\n\ - bl StringCopy\n\ -_08121E04:\n\ - pop {r4,r5}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08121E0C: .4byte gUnknown_084007D0\n\ - .syntax divided"); -} - -#endif // NONMATCHING -- cgit v1.2.3 From 88f0eef3f20dc3e1c8411c02862700669dad0932 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 20 Aug 2017 16:27:51 -0500 Subject: make IsMonAllowedInBattleTower match --- src/choose_party.c | 96 ++++-------------------------------------------------- 1 file changed, 7 insertions(+), 89 deletions(-) (limited to 'src') diff --git a/src/choose_party.c b/src/choose_party.c index d8df44028..7b2c833e1 100644 --- a/src/choose_party.c +++ b/src/choose_party.c @@ -211,11 +211,10 @@ bool8 sub_8121E78(void) return FALSE; } -#ifdef NONMATCHING static bool8 IsMonAllowedInBattleTower(struct Pokemon *pkmn) { - u16 r3; - s32 i; + u16 species; + s32 i = 0; if (GetMonData(pkmn, MON_DATA_IS_EGG)) return FALSE; @@ -232,97 +231,16 @@ static bool8 IsMonAllowedInBattleTower(struct Pokemon *pkmn) && GetMonData(pkmn, MON_DATA_LEVEL) > 50) return FALSE; - r3 = GetMonData(pkmn, MON_DATA_SPECIES); - // Can't stop the compiler from optimizing out the first index - for (i = 0; gBattleTowerBanlist[i] != 0xFFFF; i++) + // Check if the pkmn is in the ban list + species = GetMonData(pkmn, MON_DATA_SPECIES); + while (gBattleTowerBanlist[i] != 0xFFFF) { - if (gBattleTowerBanlist[i] == r3) + if (gBattleTowerBanlist[i] == species) return FALSE; + i++; } return TRUE; } -#else -__attribute__((naked)) -static bool8 IsMonAllowedInBattleTower(struct Pokemon *pkmn) -{ - asm_unified( - "push {r4,lr}\n\ - adds r4, r0, 0\n\ - movs r1, 0x2D\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - bne _0812207C\n\ - ldr r0, _08122058 @ =0x0201b000\n\ - ldr r1, _0812205C @ =0x00000263\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, 0\n\ - bne _08122060\n\ - adds r0, r4, 0\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0812207C\n\ - b _081220B6\n\ - .align 2, 0\n\ -_08122058: .4byte 0x0201b000\n\ -_0812205C: .4byte 0x00000263\n\ -_08122060:\n\ - ldr r0, _08122080 @ =gSaveBlock2\n\ - ldr r1, _08122084 @ =0x00000554\n\ - adds r0, r1\n\ - ldrb r1, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08122088\n\ - adds r0, r4, 0\n\ - movs r1, 0x38\n\ - bl GetMonData\n\ - cmp r0, 0x32\n\ - bls _08122088\n\ -_0812207C:\n\ - movs r0, 0\n\ - b _081220B8\n\ - .align 2, 0\n\ -_08122080: .4byte gSaveBlock2\n\ -_08122084: .4byte 0x00000554\n\ -_08122088:\n\ - adds r0, r4, 0\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - lsls r0, 16\n\ - lsrs r3, r0, 16\n\ - ldr r1, _081220C0 @ =gBattleTowerBanlist\n\ - movs r0, 0\n\ - lsls r0, 1\n\ - adds r2, r0, r1\n\ - ldrh r0, [r2]\n\ - ldr r1, _081220C4 @ =0x0000ffff\n\ - cmp r0, r1\n\ - beq _081220B6\n\ - adds r4, r1, 0\n\ - adds r1, r2, 0\n\ -_081220A8:\n\ - ldrh r0, [r1]\n\ - cmp r0, r3\n\ - beq _0812207C\n\ - adds r1, 0x2\n\ - ldrh r0, [r1]\n\ - cmp r0, r4\n\ - bne _081220A8\n\ -_081220B6:\n\ - movs r0, 0x1\n\ -_081220B8:\n\ - pop {r4}\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_081220C0: .4byte gBattleTowerBanlist\n\ -_081220C4: .4byte 0x0000ffff\n" - ); -} -#endif static u8 sub_81220C8(void) { -- 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