summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-03-31 10:39:11 -0400
committerPikalaxALT <pikalaxalt@gmail.com>2019-03-31 10:39:11 -0400
commitdb4e9505adb121b35b50d3b6fbc7e4595c2f90a8 (patch)
tree17c6d45f75cfb684fdc87825ca8d857d40bcc0c2 /src
parent0ba4d0cadcb2cf22dabc791964038457aa5b46ec (diff)
parent500d009b5c52345afce3dfd103113cfa77e7b262 (diff)
Merge branch 'master' into mystery_gift
Diffstat (limited to 'src')
-rwxr-xr-xsrc/berry_crush.c775
-rw-r--r--src/item_icon.c2
-rw-r--r--src/menu_specialized.c564
-rw-r--r--src/union_room.c2
-rw-r--r--src/use_pokeblock.c1054
5 files changed, 1634 insertions, 763 deletions
diff --git a/src/berry_crush.c b/src/berry_crush.c
new file mode 100755
index 000000000..dc4c546b0
--- /dev/null
+++ b/src/berry_crush.c
@@ -0,0 +1,775 @@
+#include "global.h"
+#include "alloc.h"
+#include "berry_powder.h"
+#include "bg.h"
+#include "event_data.h"
+#include "gpu_regs.h"
+#include "graphics.h"
+#include "item_icon.h"
+#include "item_menu.h"
+#include "link.h"
+#include "link_rfu.h"
+#include "main.h"
+#include "math_util.h"
+#include "menu.h"
+#include "overworld.h"
+#include "palette.h"
+#include "rom_8034C54.h"
+#include "scanline_effect.h"
+#include "sound.h"
+#include "sprite.h"
+#include "string_util.h"
+#include "task.h"
+#include "text.h"
+#include "trig.h"
+#include "window.h"
+#include "constants/items.h"
+#include "constants/rgb.h"
+#include "constants/songs.h"
+
+struct BerryCrushGame_Player
+{
+ u16 unk0;
+ u8 filler2[0x12];
+ u8 unk14[0xC];
+};
+
+struct BerryCrushGame_PlayersSeparate
+{
+ struct BerryCrushGame_Player player;
+ struct BerryCrushGame_Player others[4];
+};
+
+typedef union BerryCrushGame_Players
+{
+ struct BerryCrushGame_Player players[5];
+ struct BerryCrushGame_PlayersSeparate separate;
+} BerryCrushGame_Players;
+
+struct BerryCrushGame_138_C
+{
+ u8 filler0[0x8];
+ s16 unk8;
+ u16 unkA;
+};
+
+struct BerryCrushGame_138
+{
+ u8 filler0[0xC];
+ struct BerryCrushGame_138_C *unkC[5];
+ u8 filler1C[0x4];
+ struct Sprite *unk24[5];
+ struct Sprite *unk38[5];
+ struct Sprite *unk4C[5];
+ struct Sprite *unk60[5];
+ struct Sprite *unk74[5];
+};
+
+struct BerryCrushGame_4E
+{
+ u8 filler0[0x4];
+ u8 unk4;
+ u8 filler5[0x5];
+ u16 unkA;
+ u16 unkC;
+};
+
+struct __attribute__((packed)) BerryCrushGame_40
+{
+ u8 filler0[0xE];
+ struct BerryCrushGame_4E unkE;
+};
+
+struct BerryCrushGame
+{
+ MainCallback unk0;
+ void (* unk4)(struct BerryCrushGame *, u8 *);
+ u8 unk8;
+ u8 unk9;
+ u8 unkA;
+ u8 unkB;
+ u8 unkC;
+ u8 fillerD[0x1];
+ u8 unkE;
+ u8 unkF;
+ u8 filler10[0x2];
+ u16 unk12;
+ u8 filler14[0x2];
+ u16 unk16;
+ u8 filler18[0x4];
+ int unk1C;
+ u8 filler20[0x5];
+ u8 unk25_0:1;
+ u8 unk25_1:1;
+ u8 unk25_2:1;
+ u8 filler26[0x2];
+ u16 unk28;
+ u16 unk2A;
+ u16 unk2C;
+ u8 filler2E[0x8];
+ u8 unk36[0xA];
+ struct BerryCrushGame_40 unk40;
+ u8 filler60[0x8];
+ int unk68;
+ u16 unk6C;
+ u8 filler6E[0x4];
+ u16 unk72;
+ u8 filler74[0x10];
+ BerryCrushGame_Players unk84;
+ u8 filler124[0x14];
+ struct BerryCrushGame_138 unk138;
+ u8 unk1C0[0x1000];
+ u8 unk11C0[0x1000];
+ u8 unk21C0[0x1000];
+ u8 unk31C0[0x1000];
+};
+
+static void sub_8020F74(void);
+static void sub_8020F88(void);
+static void sub_8020FA0(u8);
+void sub_8020FC4(struct BerryCrushGame *);
+void sub_8022BEC(u16, u8, u8 *);
+void sub_8024604(u8 *, u8, s8, u8, u8, u8, u8);
+static int sub_8021450(struct BerryCrushGame *);
+void sub_8022588(struct BerryCrushGame *);
+void sub_8022600(struct BerryCrushGame *);
+void sub_80226D0(struct BerryCrushGame *);
+void sub_8022730(struct BerryCrushGame *);
+void sub_8022960(struct BerryCrushGame *);
+void sub_8022524(struct BerryCrushGame_138 *, u16);
+void sub_8022B28(struct Sprite *);
+
+extern struct BerryCrushGame *gUnknown_02022C90;
+
+extern const struct BgTemplate gUnknown_082F32C8[4];
+extern const u8 gBerryCrushGrinderTopTilemap[];
+extern const u8 gBerryCrushContainerCapTilemap[];
+extern const u8 gBerryCrushBackgroundTilemap[];
+extern const struct SpriteTemplate gUnknown_082F436C;
+extern const u16 gUnknown_082F41E8[];
+extern const s8 gUnknown_082F41CC[][2];
+extern const s8 gUnknown_082F41D2[][2];
+
+struct BerryCrushGame *sub_8020C00(void)
+{
+ return gUnknown_02022C90;
+}
+
+int sub_8020C0C(MainCallback callback)
+{
+ if (!gUnknown_02022C90)
+ return 2;
+
+ if (!callback)
+ callback = gUnknown_02022C90->unk0;
+
+ DestroyTask(gUnknown_02022C90->unkA);
+ FREE_AND_SET_NULL(gUnknown_02022C90);
+ SetMainCallback2(callback);
+ if (callback == CB2_ReturnToField)
+ {
+ gTextFlags.autoScroll = 1;
+ PlayNewMapMusic(MUS_POKECEN);
+ SetMainCallback1(CB1_Overworld);
+ }
+
+ return 0;
+}
+
+void sub_8020C70(MainCallback callback)
+{
+ u8 playerCount = 0;
+ u8 multiplayerId;
+
+ if (!gReceivedRemoteLinkPlayers || gWirelessCommType == 0)
+ {
+ SetMainCallback2(callback);
+ gUnknown_03005000.unk_10 = 0;
+ gUnknown_03005000.unk_12 = 0;
+ gUnknown_03005000.unk_ee = 1;
+ return;
+ }
+
+ playerCount = GetLinkPlayerCount();
+ multiplayerId = GetMultiplayerId();
+ if (playerCount < 2 || multiplayerId >= playerCount)
+ {
+ SetMainCallback2(callback);
+ gUnknown_03005000.unk_10 = 0;
+ gUnknown_03005000.unk_12 = 0;
+ gUnknown_03005000.unk_ee = 1;
+ return;
+ }
+
+ gUnknown_02022C90 = AllocZeroed(sizeof(*gUnknown_02022C90));
+ if (!gUnknown_02022C90)
+ {
+ SetMainCallback2(callback);
+ gUnknown_03005000.unk_10 = 0;
+ gUnknown_03005000.unk_12 = 0;
+ gUnknown_03005000.unk_ee = 1;
+ return;
+ }
+
+ gUnknown_02022C90->unk0 = callback;
+ gUnknown_02022C90->unk8 = multiplayerId;
+ gUnknown_02022C90->unk9 = playerCount;
+ sub_8020FC4(gUnknown_02022C90);
+ gUnknown_02022C90->unk12 = 1;
+ gUnknown_02022C90->unkE = 1;
+ gUnknown_02022C90->unkF = 6;
+ sub_8024604(gUnknown_02022C90->unk36, 1, -1, 0, 16, 0, 0);
+ sub_8022BEC(4, 1, gUnknown_02022C90->unk36);
+ SetMainCallback2(sub_8020F88);
+ gUnknown_02022C90->unkA = CreateTask(sub_8020FA0, 8);
+ gTextFlags.autoScroll = 0;
+}
+
+static void sub_8020D8C(void)
+{
+ if (gSpecialVar_ItemId < FIRST_BERRY_INDEX || gSpecialVar_ItemId > LAST_BERRY_INDEX + 1)
+ gSpecialVar_ItemId = ITEM_CHERI_BERRY;
+ else
+ RemoveBagItem(gSpecialVar_ItemId, 1);
+
+ gUnknown_02022C90->unk84.separate.others[gUnknown_02022C90->unk8].unk0 = gSpecialVar_ItemId - FIRST_BERRY_INDEX;
+ gUnknown_02022C90->unkE = 1;
+ gUnknown_02022C90->unkF = 9;
+ sub_8024604(gUnknown_02022C90->unk36, 0, -1, 0, 16, 0, 0);
+ sub_8022BEC(4, 1, gUnknown_02022C90->unk36);
+ gUnknown_02022C90->unkA = CreateTask(sub_8020FA0, 8);
+ SetMainCallback2(sub_8020F88);
+}
+
+void sub_8020E1C(void)
+{
+ DestroyTask(gUnknown_02022C90->unkA);
+ sub_81AABF0(sub_8020D8C);
+}
+
+static void sub_8020E3C(void)
+{
+ SetVBlankCallback(sub_8020F74);
+}
+
+void sub_8020E4C(void)
+{
+ SetVBlankCallback(NULL);
+}
+
+void sub_8020E58(void)
+{
+ u32 var0, var1;
+
+ var0 = gUnknown_02022C90->unk6C;
+ var0 <<= 8;
+ var0 = sub_81515FC(var0, 60 << 8);
+ var1 = gUnknown_02022C90->unk72;
+ var1 <<= 8;
+ var1 = sub_81515FC(var1, var0) & 0xFFFF;
+ gUnknown_02022C90->unk16 = var1;
+ switch (gUnknown_02022C90->unk9)
+ {
+ case 2:
+ if (gUnknown_02022C90->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[0])
+ {
+ gUnknown_02022C90->unk25_1 = 1;
+ gSaveBlock2Ptr->berryCrush.berryCrushResults[0] = gUnknown_02022C90->unk16;
+ }
+ break;
+ case 3:
+ if (gUnknown_02022C90->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[1])
+ {
+ gUnknown_02022C90->unk25_1 = 1;
+ gSaveBlock2Ptr->berryCrush.berryCrushResults[1] = gUnknown_02022C90->unk16;
+ }
+ break;
+ case 4:
+ if (gUnknown_02022C90->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[2])
+ {
+ gUnknown_02022C90->unk25_1 = 1;
+ gSaveBlock2Ptr->berryCrush.berryCrushResults[2] = gUnknown_02022C90->unk16;
+ }
+ break;
+ case 5:
+ if (gUnknown_02022C90->unk16 > gSaveBlock2Ptr->berryCrush.berryCrushResults[3])
+ {
+ gUnknown_02022C90->unk25_1 = 1;
+ gSaveBlock2Ptr->berryCrush.berryCrushResults[3] = gUnknown_02022C90->unk16;
+ }
+ break;
+ }
+
+ gUnknown_02022C90->unk1C = gUnknown_02022C90->unk68;
+ if (GiveBerryPowder(gUnknown_02022C90->unk1C))
+ return;
+
+ gUnknown_02022C90->unk25_0 = 1;
+}
+
+static void sub_8020F74(void)
+{
+ TransferPlttBuffer();
+ LoadOam();
+ ProcessSpriteCopyRequests();
+}
+
+static void sub_8020F88(void)
+{
+ RunTasks();
+ RunTextPrinters();
+ AnimateSprites();
+ BuildOamBuffer();
+}
+
+static void sub_8020FA0(u8 taskId)
+{
+ if (gUnknown_02022C90->unk4)
+ gUnknown_02022C90->unk4(gUnknown_02022C90, gUnknown_02022C90->unk36);
+
+ sub_8021450(gUnknown_02022C90);
+}
+
+#ifdef NONMATCHING
+void sub_8020FC4(struct BerryCrushGame *arg0)
+{
+ u8 i;
+
+ for (i = 0; i < arg0->unk9; i++)
+ StringCopy(arg0->unk84.players[i].unk14, gLinkPlayers[i].name);
+
+ for (; i < 5; i++)
+ {
+ memset(arg0->unk84.players[i].unk14, 1, PLAYER_NAME_LENGTH);
+ arg0->unk84.players[i].unk14[PLAYER_NAME_LENGTH] = EOS;
+ }
+
+ switch (gSaveBlock2Ptr->optionsTextSpeed)
+ {
+ case OPTIONS_TEXT_SPEED_SLOW:
+ arg0->unkB = 8;
+ break;
+ case OPTIONS_TEXT_SPEED_MID:
+ arg0->unkB = 4;
+ break;
+ case OPTIONS_TEXT_SPEED_FAST:
+ arg0->unkB = 1;
+ break;
+ }
+}
+#else
+NAKED
+void sub_8020FC4(struct BerryCrushGame *arg0)
+{
+ asm_unified("\n\
+ push {r4-r6,lr}\n\
+ adds r6, r0, 0\n\
+ movs r5, 0\n\
+ b _08020FE6\n\
+LOOP_1:\n\
+ lsls r0, r5, 5\n\
+ adds r0, 0x98\n\
+ adds r0, r6, r0\n\
+ lsls r1, r5, 3\n\
+ subs r1, r5\n\
+ lsls r1, 2\n\
+ ldr r2, =gLinkPlayers + 8\n\
+ adds r1, r2\n\
+ bl StringCopy\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+_08020FE6:\n\
+ ldrb r0, [r6, 0x9]\n\
+ cmp r5, r0\n\
+ bcc LOOP_1\n\
+ cmp r5, 0x4\n\
+ bhi _08021012\n\
+_08020FF0:\n\
+ lsls r4, r5, 5\n\
+ adds r0, r4, 0\n\
+ adds r0, 0x98\n\
+ adds r0, r6, r0\n\
+ movs r1, 0x1\n\
+ movs r2, 0x7\n\
+ bl memset\n\
+ adds r4, r6, r4\n\
+ adds r4, 0x9F\n\
+ movs r0, 0xFF\n\
+ strb r0, [r4]\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ cmp r5, 0x4\n\
+ bls _08020FF0\n\
+_08021012:\n\
+ ldr r0, =gSaveBlock2Ptr\n\
+ ldr r0, [r0]\n\
+ ldrb r0, [r0, 0x14]\n\
+ lsls r0, 29\n\
+ lsrs r0, 29\n\
+ cmp r0, 0x1\n\
+ beq _0802103E\n\
+ cmp r0, 0x1\n\
+ bgt _08021034\n\
+ cmp r0, 0\n\
+ beq _0802103A\n\
+ b _08021046\n\
+ .pool\n\
+_08021034:\n\
+ cmp r0, 0x2\n\
+ beq _08021042\n\
+ b _08021046\n\
+_0802103A:\n\
+ movs r0, 0x8\n\
+ b _08021044\n\
+_0802103E:\n\
+ movs r0, 0x4\n\
+ b _08021044\n\
+_08021042:\n\
+ movs r0, 0x1\n\
+_08021044:\n\
+ strb r0, [r6, 0xB]\n\
+_08021046:\n\
+ pop {r4-r6}\n\
+ pop {r0}\n\
+ bx r0");
+}
+#endif // NONMATCHING
+
+int sub_802104C(void)
+{
+ struct BerryCrushGame *var0 = sub_8020C00();
+ if (!var0)
+ return -1;
+
+ switch (var0->unkC)
+ {
+ case 0:
+ SetVBlankCallback(NULL);
+ SetHBlankCallback(NULL);
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ ScanlineEffect_Stop();
+ reset_temp_tile_data_buffers();
+ break;
+ case 1:
+ CpuFill16(0, (void *)OAM, OAM_SIZE);
+ gReservedSpritePaletteCount = 0;
+ sub_8034C54(3);
+ break;
+ case 2:
+ ResetPaletteFade();
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ break;
+ case 3:
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, gUnknown_082F32C8, ARRAY_COUNT(gUnknown_082F32C8));
+ SetBgTilemapBuffer(1, var0->unk1C0);
+ SetBgTilemapBuffer(2, var0->unk21C0);
+ SetBgTilemapBuffer(3, var0->unk31C0);
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ ChangeBgX(2, 0, 0);
+ ChangeBgY(2, 0, 0);
+ ChangeBgX(3, 0, 0);
+ ChangeBgY(3, 0, 0);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ break;
+ case 4:
+ FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32);
+ FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 32, 64);
+ FillBgTilemapBufferRect_Palette0(2, 0, 0, 0, 32, 32);
+ FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 32, 32);
+ break;
+ case 5:
+ CopyBgTilemapBufferToVram(0);
+ CopyBgTilemapBufferToVram(1);
+ CopyBgTilemapBufferToVram(2);
+ CopyBgTilemapBufferToVram(3);
+ decompress_and_copy_tile_data_to_vram(1, gUnknown_08DE34B8, 0, 0, 0);
+ break;
+ case 6:
+ if (free_temp_tile_data_buffers_if_possible())
+ return 0;
+
+ InitStandardTextBoxWindows();
+ sub_8197200();
+ sub_8022588(var0);
+ sub_8022600(var0);
+ gPaletteFade.bufferTransferDisabled = 1;
+ break;
+ case 7:
+ LoadPalette(gUnknown_08DE3398, 0, 0x180);
+ CopyToBgTilemapBuffer(1, gBerryCrushGrinderTopTilemap, 0, 0);
+ CopyToBgTilemapBuffer(2, gBerryCrushContainerCapTilemap, 0, 0);
+ CopyToBgTilemapBuffer(3, gBerryCrushBackgroundTilemap, 0, 0);
+ sub_80226D0(var0);
+ CopyBgTilemapBufferToVram(1);
+ CopyBgTilemapBufferToVram(2);
+ CopyBgTilemapBufferToVram(3);
+ break;
+ case 8:
+ sub_800E0E8();
+ CreateWirelessStatusIndicatorSprite(0, 0);
+ sub_8022730(var0);
+ SetGpuReg(REG_OFFSET_BG1VOFS, -gSpriteCoordOffsetY);
+ ChangeBgX(1, 0, 0);
+ ChangeBgY(1, 0, 0);
+ break;
+ case 9:
+ gPaletteFade.bufferTransferDisabled = 0;
+ BlendPalettes(0xFFFFFFFF, 16, RGB_BLACK);
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ ShowBg(3);
+ SetGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
+ sub_8020E3C();
+ var0->unkC = 0;
+ return 1;
+ }
+
+ var0->unkC++;
+ return 0;
+}
+
+int sub_802130C(void)
+{
+ struct BerryCrushGame *var0 = sub_8020C00();
+ if (!var0)
+ return -1;
+
+ switch (var0->unkC)
+ {
+ case 0:
+ sub_8010434();
+ break;
+ case 1:
+ if (!IsLinkTaskFinished())
+ return 0;
+ // fall through. The original author forgot to use "break" here
+ // because this will call BeginNormalPaletteFade() twice.
+ case 2:
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ UpdatePaletteFade();
+ break;
+ case 3:
+ if (UpdatePaletteFade())
+ return 0;
+ break;
+ case 4:
+ FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 32, 32);
+ FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 32, 32);
+ FillBgTilemapBufferRect_Palette0(2, 0, 0, 0, 32, 32);
+ FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 32, 32);
+ CopyBgTilemapBufferToVram(0);
+ CopyBgTilemapBufferToVram(1);
+ CopyBgTilemapBufferToVram(2);
+ CopyBgTilemapBufferToVram(3);
+ break;
+ case 5:
+ FreeAllWindowBuffers();
+ HideBg(0);
+ UnsetBgTilemapBuffer(0);
+ HideBg(1);
+ UnsetBgTilemapBuffer(1);
+ HideBg(2);
+ UnsetBgTilemapBuffer(2);
+ HideBg(3);
+ UnsetBgTilemapBuffer(3);
+ ClearGpuRegBits(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
+ break;
+ case 6:
+ sub_800E084();
+ sub_8022960(var0);
+ sub_8034CC8();
+ break;
+ case 7:
+ var0->unkC = 0;
+ return 1;
+ }
+
+ var0->unkC++;
+ return 0;
+}
+
+static int sub_8021450(struct BerryCrushGame *arg0)
+{
+ gSpriteCoordOffsetY = arg0->unk2A + arg0->unk2C;
+ SetGpuReg(REG_OFFSET_BG1VOFS, -gSpriteCoordOffsetY);
+ if (arg0->unk12 == 7)
+ {
+ sub_8022524(&arg0->unk138, arg0->unk28);
+ }
+
+ return 0;
+}
+
+void sub_8021488(struct BerryCrushGame *arg0)
+{
+ arg0->unk2A = -104;
+ arg0->unk2C = 0;
+ gSpriteCoordOffsetX = 0;
+ gSpriteCoordOffsetY = -104;
+}
+
+void sub_80214A8(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1)
+{
+ u8 i;
+ u8 spriteId;
+ s16 var0, var1;
+ s16 *data;
+ int var3;
+ s16 var5;
+ u32 var6;
+
+ for (i = 0; i < arg0->unk9; i++)
+ {
+ spriteId = AddCustomItemIconSprite(
+ &gUnknown_082F436C,
+ gUnknown_082F41E8[i],
+ gUnknown_082F41E8[i],
+ arg0->unk84.separate.others[i].unk0 + 133);
+ arg1->unk38[i] = &gSprites[spriteId];
+ arg1->unk38[i]->oam.priority = 3;
+ arg1->unk38[i]->affineAnimPaused = 1;
+ arg1->unk38[i]->pos1.x = arg1->unkC[i]->unk8 + 120;
+ arg1->unk38[i]->pos1.y = -16;
+ data = arg1->unk38[i]->data;
+ var5 = 512;
+ data[1] = var5;
+ data[2] = 32;
+ data[7] = 112;
+ var0 = arg1->unkC[i]->unkA - arg1->unkC[i]->unk8;
+ var3 = var0;
+ if (var0 < 0)
+ var3 += 3;
+
+ data[6] = var3 >> 2;
+ var0 *= 128;
+ var6 = var5 + 32;
+ var6 = var6 / 2;
+ var1 = sub_81515D4(7, 0x3F80, var6);
+ data[0] = (u16)arg1->unk38[i]->pos1.x * 128;
+ data[3] = sub_81515D4(7, var0, var1);
+ var1 = sub_8151550(7, var1, 85);
+ data[4] = 0;
+ data[5] = sub_81515D4(7, 0x3F80, var1);
+ data[7] |= 0x8000;
+ if (arg1->unkC[i]->unk8 < 0)
+ StartSpriteAffineAnim(arg1->unk38[i], 1);
+ }
+}
+
+void sub_8021608(struct Sprite *sprite)
+{
+ s16 *data = sprite->data;
+
+ data[1] += data[2];
+ sprite->pos2.y += data[1] >> 8;
+ if (data[7] & 0x8000)
+ {
+ sprite->data[0] += data[3];
+ data[4] += data[5];
+ sprite->pos2.x = Sin(data[4] >> 7, data[6]);
+ if ((data[7] & 0x8000) && (data[4] >> 7) > 126)
+ {
+ sprite->pos2.x = 0;
+ data[7] &= 0x7FFF;
+ }
+ }
+
+ sprite->pos1.x = data[0] >> 7;
+ if (sprite->pos1.y + sprite->pos2.y >= (data[7] & 0x7FFF))
+ {
+ sprite->callback = SpriteCallbackDummy;
+ FreeSpriteOamMatrix(sprite);
+ DestroySprite(sprite);
+ }
+}
+
+void sub_80216A8(struct BerryCrushGame *arg0)
+{
+ u8 i;
+ for (i = 0; i < arg0->unk9; i++)
+ {
+ FreeSpritePaletteByTag(gUnknown_082F41E8[i]);
+ FreeSpriteTilesByTag(gUnknown_082F41E8[i]);
+ }
+}
+
+// void sub_80216E0(struct BerryCrushGame *arg0, struct BerryCrushGame_138 *arg1)
+// {
+// u8 sp4;
+// struct BerryCrushGame_4E *var4E;
+// u8 i;
+// u16 var0;
+
+// sp4 = 0;
+// var4E = &arg0->unk40.unkE;
+// for (i = 0; i < arg0->unk9; i++)
+// {
+// var0 = var4E->unkA >> (i * 3);
+// var0 &= 7;
+// if (var0)
+// {
+// int offset;
+// sp4++;
+// if (var0 & 0x4)
+// StartSpriteAnim(arg1->unk24[i], 1);
+// else
+// StartSpriteAnim(arg1->unk24[i], 0);
+
+// arg1->unk24[i]->invisible = 0;
+// arg1->unk24[i]->animPaused = 0;
+// offset = (var0 % 4) - 1;
+// arg1->unk24[i]->pos2.x = gUnknown_082F41CC[offset][0];
+// arg1->unk24[i]->pos2.y = gUnknown_082F41CC[offset][1];
+// }
+// }
+
+// if (sp4 == 0)
+// {
+// arg0->unk25_2 = 0;
+// }
+// else
+// {
+// u8 var3 = arg0->unk28 % 3;
+// u16 var2 = var3;
+// for (i = 0; i < var4E->unkC * 2 + 3; i++)
+// {
+// if (arg1->unk4C[i]->invisible)
+// {
+// arg1->unk4C[i]->callback = sub_8022B28;
+// arg1->unk4C[i]->pos1.x = gUnknown_082F41D2[i][0] + 120;
+// arg1->unk4C[i]->pos1.y = gUnknown_082F41D2[i][1] + (136 - var2 * 4);
+// arg1->unk4C[i]->pos2.x = gUnknown_082F41D2[i][0] / (var3 * 4);
+// arg1->unk4C[i]->pos2.y = gUnknown_082F41D2[i][1];
+// if (var4E->unk4 & 0x2)
+// StartSpriteAnim(arg1->unk4C[i], 1);
+// else
+// StartSpriteAnim(arg1->unk4C[i], 0);
+
+// var2++;
+// if (var2 > 3)
+// var2 = 0;
+// }
+// }
+
+// if (arg0->unk25_2)
+// {
+// arg0->unk25_2 = 0;
+// }
+// else
+// {
+// if (sp4 == 1)
+// PlaySE(SE_TOY_DANGO);
+// else
+// PlaySE(SE_TOY_KABE);
+
+// arg0->unk25_2 = 1;
+// }
+// }
+// }
diff --git a/src/item_icon.c b/src/item_icon.c
index 7bf1a29ca..91c32951a 100644
--- a/src/item_icon.c
+++ b/src/item_icon.c
@@ -122,7 +122,7 @@ u8 AddItemIconSprite(u16 tilesTag, u16 paletteTag, u16 itemId)
}
}
-u8 AddCustomItemIconSprite(struct SpriteTemplate *customSpriteTemplate, u16 tilesTag, u16 paletteTag, u16 itemId)
+u8 AddCustomItemIconSprite(const struct SpriteTemplate *customSpriteTemplate, u16 tilesTag, u16 paletteTag, u16 itemId)
{
if (!AllocItemIconTemporaryBuffers())
{
diff --git a/src/menu_specialized.c b/src/menu_specialized.c
index 3dadc7f80..f21f4e51a 100644
--- a/src/menu_specialized.c
+++ b/src/menu_specialized.c
@@ -2,7 +2,10 @@
#include "alloc.h"
#include "battle_main.h"
#include "contest_effect.h"
+#include "data2.h"
+#include "decompress.h"
#include "gpu_regs.h"
+#include "graphics.h"
#include "menu.h"
#include "international_string_util.h"
#include "menu.h"
@@ -11,16 +14,21 @@
#include "palette.h"
#include "player_pc.h"
#include "pokemon_summary_screen.h"
+#include "pokemon_storage_system.h"
#include "scanline_effect.h"
#include "sound.h"
#include "strings.h"
#include "string_util.h"
+#include "text.h"
#include "text_window.h"
#include "trig.h"
#include "window.h"
#include "constants/songs.h"
+#include "constants/species.h"
#include "gba/io_reg.h"
+extern const struct CompressedSpriteSheet gMonFrontPicTable[];
+
EWRAM_DATA static u8 sUnknown_0203CF48[3] = {0};
EWRAM_DATA static struct ListMenuItem *sUnknown_0203CF4C = NULL;
@@ -29,6 +37,9 @@ static void sub_81D24A4(struct UnknownStruct_81D1ED4 *a0);
static void sub_81D2634(struct UnknownStruct_81D1ED4 *a0);
static void MoveRelearnerCursorCallback(s32 itemIndex, bool8 onInit, struct ListMenu *list);
static void nullsub_79(void);
+static void sub_81D3408(struct Sprite *sprite);
+/*static*/ void sub_81D3564(struct Sprite *sprite);
+static void sub_81D35E8(struct Sprite *sprite);
static const struct WindowTemplate sUnknown_086253E8[] =
{
@@ -1075,3 +1086,556 @@ void MoveRelearnerCreateYesNoMenu(void)
{
CreateYesNoMenu(&sMoveRelearnerYesNoMenuTemplate, 1, 0xE, 0);
}
+
+s32 GetBoxOrPartyMonData(u16 boxId, u16 monId, s32 request, u8 *dst)
+{
+ s32 ret;
+
+ if (boxId == TOTAL_BOXES_COUNT) // Party mon.
+ {
+ if (request == MON_DATA_NICKNAME || request == MON_DATA_OT_NAME)
+ ret = GetMonData(&gPlayerParty[monId], request, dst);
+ else
+ ret = GetMonData(&gPlayerParty[monId], request);
+ }
+ else
+ {
+ if (request == MON_DATA_NICKNAME || request == MON_DATA_OT_NAME)
+ ret = GetAndCopyBoxMonDataAt(boxId, monId, request, dst);
+ else
+ ret = GetBoxMonDataAt(boxId, monId, request);
+ }
+
+ return ret;
+}
+
+static u8 *sub_81D2CD0(u8 *dst, u16 boxId, u16 monId)
+{
+ u16 species, level, gender;
+ struct BoxPokemon *boxMon;
+ u8 *str;
+
+ *(dst++) = EXT_CTRL_CODE_BEGIN;
+ *(dst++) = 4;
+ *(dst++) = 8;
+ *(dst++) = 0;
+ *(dst++) = 9;
+ if (GetBoxOrPartyMonData(boxId, monId, MON_DATA_IS_EGG, NULL))
+ {
+ return StringCopyPadded(dst, gText_EggNickname, 0, 12);
+ }
+ else
+ {
+ GetBoxOrPartyMonData(boxId, monId, MON_DATA_NICKNAME, dst);
+ StringGetEnd10(dst);
+ species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES, NULL);
+ if (boxId == TOTAL_BOXES_COUNT) // Party mon.
+ {
+ level = GetMonData(&gPlayerParty[monId], MON_DATA_LEVEL);
+ gender = GetMonGender(&gPlayerParty[monId]);
+ }
+ else
+ {
+ // Needed to match, feel free to remove.
+ boxId++;boxId--;
+ monId++;monId--;
+
+ boxMon = GetBoxedMonPtr(boxId, monId);
+ gender = GetBoxMonGender(boxMon);
+ level = GetLevelFromBoxMonExp(boxMon);
+ }
+
+ if ((species == SPECIES_NIDORAN_F || species == SPECIES_NIDORAN_M) && !StringCompare(dst, gSpeciesNames[species]))
+ gender = MON_GENDERLESS;
+
+ for (str = dst; *str != EOS; str++)
+ ;
+
+ *(str++) = EXT_CTRL_CODE_BEGIN;
+ *(str++) = 0x12;
+ *(str++) = 0x3C;
+
+ switch (gender)
+ {
+ default:
+ *(str++) = CHAR_SPACE;
+ break;
+ case MON_MALE:
+ *(str++) = EXT_CTRL_CODE_BEGIN;
+ *(str++) = EXT_CTRL_CODE_COLOR;
+ *(str++) = 4;
+ *(str++) = EXT_CTRL_CODE_BEGIN;
+ *(str++) = 3;
+ *(str++) = 5;
+ *(str++) = CHAR_MALE;
+ break;
+ case MON_FEMALE:
+ *(str++) = EXT_CTRL_CODE_BEGIN;
+ *(str++) = EXT_CTRL_CODE_COLOR;
+ *(str++) = 6;
+ *(str++) = EXT_CTRL_CODE_BEGIN;
+ *(str++) = 3;
+ *(str++) = 7;
+ *(str++) = CHAR_FEMALE;
+ break;
+ }
+
+ *(str++) = EXT_CTRL_CODE_BEGIN;
+ *(str++) = 4;
+ *(str++) = 8;
+ *(str++) = 0;
+ *(str++) = 9;
+ *(str++) = CHAR_SLASH;
+ *(str++) = CHAR_SPECIAL_F9;
+ *(str++) = 5;
+ str = ConvertIntToDecimalStringN(str, level, STR_CONV_MODE_LEFT_ALIGN, 3);
+ *(str++) = CHAR_SPACE;
+ *str = EOS;
+
+ return str;
+ }
+}
+
+static u8 *sub_81D2E7C(u8 *dst, const u8 *src, s16 n)
+{
+ while (*src != EOS)
+ {
+ *(dst++) = *(src++);
+ n--;
+ }
+ while (n-- > 0)
+ *(dst++) = CHAR_SPACE;
+
+ *dst = EOS;
+ return dst;
+}
+
+void sub_81D2ED4(u8 *dst, u8 *nameDst, u16 boxId, u16 monId, u16 arg5, u16 arg6, bool8 arg7)
+{
+ u16 i;
+
+ if (!arg7)
+ arg6--;
+
+ if (arg5 != arg6)
+ {
+ sub_81D2CD0(nameDst, boxId, monId);
+ dst[0] = EXT_CTRL_CODE_BEGIN;
+ dst[1] = 4;
+ dst[2] = 8;
+ dst[3] = 0;
+ dst[4] = 9;
+ if (boxId == TOTAL_BOXES_COUNT) // Party mon.
+ {
+ sub_81D2E7C(dst + 5, gText_InParty, 8);
+ }
+ else
+ {
+ boxId++;boxId--; // Again...Someone fix this maybe?
+ sub_81D2E7C(dst + 5, GetBoxNamePtr(boxId), 8);
+ }
+ }
+ else
+ {
+ for (i = 0; i < 12; i++)
+ nameDst[i] = CHAR_SPACE;
+ nameDst[i] = EOS;
+ for (i = 0; i < 8; i++)
+ dst[i] = CHAR_SPACE;
+ dst[i] = EOS;
+ }
+}
+
+void sub_81D2F78(struct UnknownStruct_81D1ED4 *arg0, u8 *sheen, u16 boxId, u16 monId, u16 arg5, u16 id, u16 arg7, bool8 arg8)
+{
+ u16 i;
+
+ if (!arg8)
+ arg7--;
+
+ if (arg5 != arg7)
+ {
+ arg0->unk0[id][0] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_COOL, NULL);
+ arg0->unk0[id][1] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_TOUGH, NULL);
+ arg0->unk0[id][2] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SMART, NULL);
+ arg0->unk0[id][3] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_CUTE, NULL);
+ arg0->unk0[id][4] = GetBoxOrPartyMonData(boxId, monId, MON_DATA_BEAUTY, NULL);
+
+ sheen[id] = (GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) != 0xFF)
+ ? GetBoxOrPartyMonData(boxId, monId, MON_DATA_SHEEN, NULL) / 29u
+ : 9;
+
+ sub_81D2754(arg0->unk0[id], arg0->unk14[id]);
+ }
+ else
+ {
+ for (i = 0; i < 5; i++)
+ {
+ arg0->unk0[id][i] = 0;
+ arg0->unk14[id][i].unk0 = 155;
+ arg0->unk14[id][i].unk2 = 91;
+ }
+ }
+}
+
+void sub_81D3094(void *tilesDst, void *palDst, u16 boxId, u16 monId, u16 arg5, u16 arg6, bool8 arg7)
+{
+ if (!arg7)
+ arg6--;
+
+ if (arg5 != arg6)
+ {
+ u16 species = GetBoxOrPartyMonData(boxId, monId, MON_DATA_SPECIES2, NULL);
+ u32 trainerId = GetBoxOrPartyMonData(boxId, monId, MON_DATA_OT_ID, NULL);
+ u32 personality = GetBoxOrPartyMonData(boxId, monId, MON_DATA_PERSONALITY, NULL);
+
+ LoadSpecialPokePic(&gMonFrontPicTable[species], tilesDst, species, personality, TRUE);
+ LZ77UnCompWram(GetFrontSpritePalFromSpeciesAndPersonality(species, trainerId, personality), palDst);
+ }
+}
+
+bool8 sub_81D312C(s16 *var)
+{
+ *var += 24;
+ if (*var > 0)
+ *var = 0;
+
+ return (*var != 0);
+}
+
+bool8 sub_81D3150(s16 *var)
+{
+ *var -= 24;
+ if (*var < -80)
+ *var = -80;
+
+ return (*var != -80);
+}
+
+bool8 sub_81D3178(struct UnknownStruct_81D1ED4 *arg0, s16 *arg1)
+{
+ bool8 var1 = sub_81D2074(arg0);
+ bool8 var2 = sub_81D312C(arg1);
+
+ return ((var1 != 0) || (var2 != 0));
+}
+
+bool8 sub_81D31A4(struct UnknownStruct_81D1ED4 *arg0, s16 *arg1)
+{
+ bool8 var1 = sub_81D2074(arg0);
+ bool8 var2 = sub_81D3150(arg1);
+
+ return ((var1 != 0) || (var2 != 0));
+}
+
+static const u32 gUnknown_08625560[] = INCBIN_U32("graphics/pokenav/pokeball.4bpp");
+static const u32 gUnknown_08625660[] = INCBIN_U32("graphics/pokenav/pokeball_placeholder.4bpp");
+static const u16 gUnknown_08625680[] = INCBIN_U16("graphics/pokenav/sparkle.gbapal");
+static const u32 gUnknown_086256A0[] = INCBIN_U32("graphics/pokenav/sparkle.4bpp");
+
+static const struct OamData sOamData_8625A20 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0
+};
+
+static const struct OamData sOamData_8625A28 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 1,
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0,
+ .affineParam = 0
+};
+
+static const union AnimCmd sSpriteAnim_8625A30[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_8625A38[] =
+{
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_8625A40[] =
+{
+ sSpriteAnim_8625A30,
+ sSpriteAnim_8625A38
+};
+
+void sub_81D31D0(struct SpriteSheet *sheet, struct SpriteTemplate *template, struct SpritePalette *pal)
+{
+ struct SpriteSheet dataSheet = {NULL, 0x800, 100};
+
+ struct SpriteTemplate dataTemplate =
+ {
+ .tileTag = 100,
+ .paletteTag = 100,
+ .oam = &sOamData_8625A20,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ };
+
+ struct SpritePalette dataPal = {NULL, 100};
+
+ *sheet = dataSheet;
+ *template = dataTemplate;
+ *pal = dataPal;
+}
+
+void sub_81D321C(struct SpriteSheet *sheets, struct SpriteTemplate * template, struct SpritePalette *pals)
+{
+ u8 i;
+
+ struct SpriteSheet dataSheets[] =
+ {
+ {gUnknown_08625560, 0x100, 101},
+ {gUnknown_08625660, 0x20, 103},
+ {gPokenavConditionCancel_Gfx, 0x100, 102},
+ {},
+ };
+
+ struct SpritePalette dataPals[] =
+ {
+ {gPokenavConditionCancel_Pal, 101},
+ {gPokenavConditionCancel_Pal + 16, 102},
+ {},
+ };
+
+ struct SpriteTemplate dataTemplate =
+ {
+ .tileTag = 101,
+ .paletteTag = 101,
+ .oam = &sOamData_8625A28,
+ .anims = sSpriteAnimTable_8625A40,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+ };
+
+ for (i = 0; i < ARRAY_COUNT(dataSheets); i++)
+ *(sheets++) = dataSheets[i];
+
+ *template = dataTemplate;
+
+ for (i = 0; i < ARRAY_COUNT(dataPals); i++)
+ *(pals++) = dataPals[i];
+}
+
+void sub_81D32B0(struct SpriteSheet *sheet, struct SpritePalette *pal)
+{
+ struct SpriteSheet dataSheet = {gUnknown_086256A0, 0x380, 104};
+ struct SpritePalette dataPal = {gUnknown_08625680, 104};
+
+ *sheet = dataSheet;
+ *pal = dataPal;
+}
+
+static void sub_81D32D4(struct Sprite *sprite)
+{
+ if (++sprite->data[1] > 60)
+ {
+ sprite->data[1] = 0;
+ sub_81D3408(sprite);
+ }
+}
+
+static void sub_81D32F4(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ {
+ sprite->data[1] = 0;
+ sprite->callback = sub_81D32D4;
+ }
+}
+
+// Todo: Move these variables to C.
+extern const s16 gUnknown_08625B2C[][2];
+extern const struct SpriteTemplate gUnknown_08625B14;
+
+void sub_81D3314(struct Sprite *sprite)
+{
+ struct Sprite *sprite2 = &gSprites[sprite->data[4]];
+
+ if (sprite2 != NULL)
+ {
+ sprite->pos1.x = sprite2->pos1.x + sprite2->pos2.x + gUnknown_08625B2C[sprite->data[0]][0];
+ sprite->pos1.y = sprite2->pos1.y + sprite2->pos2.y + gUnknown_08625B2C[sprite->data[0]][1];
+ }
+ else
+ {
+ sprite->pos1.x = gUnknown_08625B2C[sprite->data[0]][0] + 40;
+ sprite->pos1.y = gUnknown_08625B2C[sprite->data[0]][1] + 104;
+ }
+}
+
+void sub_81D338C(u8 arg0, u8 arg1, struct Sprite **sprites)
+{
+ u16 i;
+
+ for (i = 0; i < 10; i++)
+ {
+ if (sprites[i] != NULL)
+ {
+ sprites[i]->data[0] = i;
+ sprites[i]->data[1] = (i * 16) + 1;
+ sprites[i]->data[2] = arg0;
+ sprites[i]->data[3] = i;
+ if (arg1 == 0 || arg0 != 9)
+ {
+ sprites[i]->callback = sub_81D3564;
+ }
+ else
+ {
+ sub_81D3314(sprites[i]);
+ sub_81D35E8(sprites[i]);
+ sprites[i]->callback = sub_81D32F4;
+ sprites[i]->invisible = FALSE;
+ }
+ }
+ }
+}
+
+static void sub_81D3408(struct Sprite *sprite)
+{
+ u16 i;
+ u8 id = sprite->data[5];
+
+ for (i = 0; i < sprite->data[2] + 1; i++)
+ {
+ gSprites[id].data[1] = (gSprites[id].data[0] * 16) + 1;
+ gSprites[id].callback = sub_81D3564;
+ id = gSprites[id].data[5];
+ }
+}
+
+void sub_81D3464(struct Sprite **sprites)
+{
+ u8 i;
+
+ for (i = 0; i < 10; i++)
+ sprites[i] = NULL;
+}
+
+void sub_81D3480(struct Sprite **sprites, u8 arg1, u8 arg2)
+{
+ u16 i, spriteId, firstSpriteId = 0;
+ u8 count = arg2;
+
+ for (i = 0; i < count + 1; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_08625B14, 0, 0, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprites[i] = &gSprites[spriteId];
+ sprites[i]->invisible = TRUE;
+ sprites[i]->data[4] = arg1;
+ if (i != 0)
+ sprites[i - 1]->data[5] = spriteId;
+ else
+ firstSpriteId = spriteId;
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ sprites[count]->data[5] = firstSpriteId;
+ sub_81D338C(count, 1, sprites);
+}
+
+void sub_81D3520(struct Sprite **sprites)
+{
+ u16 i;
+
+ for (i = 0; i < 10; i++)
+ {
+ if (sprites[i] != NULL)
+ {
+ DestroySprite(sprites[i]);
+ sprites[i] = NULL;
+ }
+ else
+ {
+ break;
+ }
+ }
+}
+
+void sub_81D354C(struct Sprite **sprites)
+{
+ sub_81D3520(sprites);
+ FreeSpriteTilesByTag(104);
+ FreeSpritePaletteByTag(104);
+}
+
+/*static*/ void sub_81D3564(struct Sprite *sprite)
+{
+ if (sprite->data[1] != 0)
+ {
+ if (--sprite->data[1] != 0)
+ return;
+
+ SeekSpriteAnim(sprite, 0);
+ sprite->invisible = FALSE;
+ }
+
+ sub_81D3314(sprite);
+ if (sprite->animEnded)
+ {
+ sprite->invisible = TRUE;
+ if (sprite->data[3] == sprite->data[2])
+ {
+ if (sprite->data[3] == 9)
+ {
+ sub_81D35E8(sprite);
+ sprite->callback = sub_81D32F4;
+ }
+ else
+ {
+ sprite->callback = sub_81D32D4;
+ }
+ }
+ else
+ {
+ sprite->callback = SpriteCallbackDummy;
+ }
+ }
+}
+
+static void sub_81D35E8(struct Sprite *sprite)
+{
+ u8 i, id = sprite->data[5];
+
+ for (i = 0; i < sprite->data[2] + 1; i++)
+ {
+ SeekSpriteAnim(&gSprites[id], 0);
+ gSprites[id].invisible = FALSE;
+ id = gSprites[id].data[5];
+ }
+}
diff --git a/src/union_room.c b/src/union_room.c
index a623527ec..df0137379 100644
--- a/src/union_room.c
+++ b/src/union_room.c
@@ -44,6 +44,7 @@
#include "easy_chat.h"
#include "event_obj_lock.h"
#include "union_room_chat.h"
+#include "berry_crush.h"
EWRAM_DATA u8 gUnknown_02022C20[12] = {};
EWRAM_DATA u8 gUnknown_02022C2C = 0;
@@ -98,7 +99,6 @@ void sub_801807C(struct TradeUnkStruct *arg0);
void sub_801AC54(void);
void sub_802A9A8(u8 monId, MainCallback callback);
void sub_802493C(u8 monId, MainCallback callback);
-void sub_8020C70(MainCallback callback);
void sub_80149D8(void);
u16 sub_8019930(void);
void sub_8018784(u8 windowId);
diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c
index 9b02eeb72..6df826214 100644
--- a/src/use_pokeblock.c
+++ b/src/use_pokeblock.c
@@ -27,7 +27,7 @@ struct UsePokeblockSubStruct
/*0x00*/ void (*field_0)(void);
/*0x04*/ void (*callback)(void);
/*0x08*/ struct Pokeblock *pokeblock;
- /*0x0C*/ struct Pokemon *pokemon;
+ /*0x0C*/ struct Pokemon *mon;
/*0x10*/ u8 stringBuffer[0x40];
/*0x50*/ u8 field_50;
/*0x51*/ u8 field_51;
@@ -57,16 +57,21 @@ struct Unk7FB8
struct UsePokeblockStruct
{
- /*0x0000*/ u8 field_0[0x7B06];
+ /*0x0000*/ u8 filler0[4];
+ /*0x0000*/ u16 field_4[6][0x40];
+ /*0x0304*/ u8 field_304[3][0x2000];
+ /*0x6304*/ u8 filler_6304[0x1000];
+ /*0x7304*/ u8 tilemapBuffer[BG_SCREEN_SIZE + 2];
/*0x7B06*/ u8 field_7B06[7];
- /*0x7B0E*/ u16 field_7B0E;
+ /*0x7B0E*/ s16 field_7B0E;
/*0x7B10*/ u8 field_7B10;
- /*0x7B11*/ u8 field_7B11[0xB];
+ /*0x7B12*/ u16 field_7B12;
+ /*0x7B12*/ u16 field_7B14;
+ /*0x7B12*/ u8 *field_7B18;
/*0x7B1C*/ struct Sprite *field_7B1C[10];
/*0x7B44*/ struct Sprite *field_7B44[2];
/*0x7B4C*/ u8 field_7B4C;
- /*0x7B4D*/ u8 filler7B4D[0x47];
- /*0x7B94*/ u8 filler7B94;
+ /*0x7B4D*/ u8 field_7B4D[3][24];
/*0x7B95*/ u8 field_7B95[3][64];
/*0x7C58*/ struct UnknownStruct_81D1ED4 field_7C58;
/*0x7FB0*/ u8 unk7FB0[3];
@@ -80,6 +85,8 @@ struct UsePokeblockStruct
extern u16 gKeyRepeatStartDelay;
+extern void sub_81D21DC(u8);
+
// this file's functions
void sub_816636C(void (*func)(void));
void sub_8166380(void);
@@ -100,7 +107,7 @@ static void sub_8167CA0(bool8);
void sub_8166BEC(void);
void sub_8166D44(void);
s8 sub_8166DE4(void);
-bool8 sub_8167268(void);
+bool8 IsSheenMaxed(void);
void sub_8166F50(void);
void sub_816681C(void);
void sub_8166F94(void);
@@ -111,25 +118,18 @@ void sub_8167338(void);
void sub_81681F4(u8);
void sub_8166E24(void);
bool8 sub_8166EDC(void);
-void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statID, s16 a2);
+void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statId, s16 a2);
void Pokeblock_MenuWindowTextPrint(const u8 *message);
void sub_8167184(struct Pokeblock *, struct Pokemon *);
-extern u32 sub_81D2C68(s32, s32, s32, u8 *);
void sub_81673DC(struct Sprite *sprite);
void sub_81674BC(void);
void sub_816753C(s16, u8);
static u8 sub_8167EA4(void);
static u8 sub_8167FA4(void);
static u8 sub_8168048(void);
-extern void sub_81D2ED4(u8, u8, u16, u8, u8, u8, u8);
-extern void sub_81D2F78(u8, u8, s16, u16, u8, u8, u8, u8);
-extern void sub_81D3094(u8, u8, s16, u16, u8, u8, u8);
-extern void sub_81D31D0(struct SpritePalette *, struct SpritePalette *, struct SpritePalette *);
-extern void sub_81D321C(struct SpriteSheet *, struct SpriteTemplate *, struct SpritePalette*);
void sub_8168180(struct Sprite *sprite);
void sub_81681B4(struct Sprite *sprite);
-extern void sub_81D32B0(struct SpriteSheet *, struct SpritePalette*);
-extern void sub_81D21DC(u8);
+void sub_8168168(struct Sprite *sprite);
extern const struct BgTemplate gUnknown_085DFCCC[4];
extern const struct WindowTemplate gUnknown_085DFCDC[];
@@ -160,9 +160,9 @@ EWRAM_DATA void (*gUnknown_0203BC94)(void) = NULL;
EWRAM_DATA struct Pokeblock *gUnknown_0203BC98 = NULL;
EWRAM_DATA u8 gPokeblockMonId = 0;
EWRAM_DATA s16 gPokeblockGain = 0;
-EWRAM_DATA void *gUnknown_0203BCA0 = NULL;
-EWRAM_DATA void *gUnknown_0203BCA4 = NULL;
-EWRAM_DATA void *gUnknown_0203BCA8 = NULL;
+EWRAM_DATA u8 *gUnknown_0203BCA0 = NULL;
+EWRAM_DATA u8 *gUnknown_0203BCA4 = NULL;
+EWRAM_DATA u8 *gUnknown_0203BCA8 = NULL;
EWRAM_DATA struct UsePokeblockStruct *gUnknown_0203BCAC = NULL;
// const rom data
@@ -349,8 +349,9 @@ void sub_8166564(void)
}
void sub_8166634(void)
-{
+{
u8 var;
+
switch (gUnknown_0203BC90->field_50)
{
case 0:
@@ -384,9 +385,9 @@ void sub_8166634(void)
break;
case 1:
var = gUnknown_0203BCAC->info.unk74();
- if(!var)
+ if (!var)
gUnknown_0203BC90->field_50 = var;
- break;
+ break;
case 2:
break;
case 3:
@@ -406,7 +407,7 @@ void sub_8166634(void)
gUnknown_0203BC90->field_50 = 0;
break;
case 0:
- if (sub_8167268())
+ if (IsSheenMaxed())
{
sub_8166F50();
gUnknown_0203BC90->field_50 = 7;
@@ -443,14 +444,10 @@ void sub_816681C(void)
if (!gPaletteFade.active)
{
SetVBlankCallback(NULL);
- Free(gUnknown_0203BCA0);
- gUnknown_0203BCA0 = NULL;
- Free(gUnknown_0203BCA4);
- gUnknown_0203BCA4 = NULL;
- Free(gUnknown_0203BCA8);
- gUnknown_0203BCA8 = NULL;
- Free(gUnknown_0203BCAC);
- gUnknown_0203BCAC = NULL;
+ FREE_AND_SET_NULL(gUnknown_0203BCA0);
+ FREE_AND_SET_NULL(gUnknown_0203BCA4);
+ FREE_AND_SET_NULL(gUnknown_0203BCA8);
+ FREE_AND_SET_NULL(gUnknown_0203BCAC);
FreeAllWindowBuffers();
gMain.savedCallback = CB2_ReturnAndChooseMonToGivePokeblock;
CB2_PreparePokeblockFeedScene();
@@ -462,6 +459,7 @@ void sub_816681C(void)
void sub_81668F8(void)
{
u16 var;
+
switch (gUnknown_0203BC90->field_50)
{
case 0:
@@ -511,65 +509,65 @@ void sub_81668F8(void)
void sub_8166A34(void)
{
+ u8 var;
+
switch (gUnknown_0203BC90->field_50)
{
- u8 var;
- case 0:
- gUnknown_0203BC90->pokemon = gPlayerParty;
- gUnknown_0203BC90->pokemon += gUnknown_0203BCAC->field_7FB8[gUnknown_0203BCAC->info.field_71].unk1;
- sub_81D3520(gUnknown_0203BCAC->field_7B1C);
- gUnknown_0203BC90->field_50++;
- break;
- case 1:
- if (gMain.newKeys & (A_BUTTON | B_BUTTON))
- gUnknown_0203BC90->field_50++;
- break;
- case 2:
- sub_8167104();
- sub_81D2754(gUnknown_0203BC90->field_5c, gUnknown_0203BCAC->field_7C58.unk14[3]);
- sub_81D1F84(&gUnknown_0203BCAC->field_7C58, gUnknown_0203BCAC->field_7C58.unk14[gUnknown_0203BCAC->field_7FB3], gUnknown_0203BCAC->field_7C58.unk14[3]);
- sub_8167338();
+ case 0:
+ gUnknown_0203BC90->mon = gPlayerParty;
+ gUnknown_0203BC90->mon += gUnknown_0203BCAC->field_7FB8[gUnknown_0203BCAC->info.field_71].unk1;
+ sub_81D3520(gUnknown_0203BCAC->field_7B1C);
+ gUnknown_0203BC90->field_50++;
+ break;
+ case 1:
+ if (gMain.newKeys & (A_BUTTON | B_BUTTON))
gUnknown_0203BC90->field_50++;
- break;
- case 3:
- var = sub_81D2074(&gUnknown_0203BCAC->field_7C58);
- if(var)
- return;
-
+ break;
+ case 2:
+ sub_8167104();
+ sub_81D2754(gUnknown_0203BC90->field_5c, gUnknown_0203BCAC->field_7C58.unk14[3]);
+ sub_81D1F84(&gUnknown_0203BCAC->field_7C58, gUnknown_0203BCAC->field_7C58.unk14[gUnknown_0203BCAC->field_7FB3], gUnknown_0203BCAC->field_7C58.unk14[3]);
+ sub_8167338();
+ gUnknown_0203BC90->field_50++;
+ break;
+ case 3:
+ var = sub_81D2074(&gUnknown_0203BCAC->field_7C58);
+ if (!var)
+ {
sub_81681F4(sub_81672A4(gUnknown_0203BCAC->info.field_71));
-
if (gUnknown_0203BCAC->info.field_71 != gUnknown_0203BCAC->info.field_70 - 1)
{
u8 var0 = gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->field_7FB3];
sub_81D3480(gUnknown_0203BCAC->field_7B1C, gUnknown_0203BCAC->field_7B10, var0);
}
-
+
gUnknown_0203BC90->field_52 = 0;
- gUnknown_0203BC90->field_50++;
- break;
- case 4:
- if ((++gUnknown_0203BC90->field_52) > 16)
- {
- sub_8166E24();
- gUnknown_0203BC90->field_50++;
- }
- break;
- case 5:
- if (gMain.newKeys & (A_BUTTON | B_BUTTON) && !sub_8166EDC())
- {
- TryClearPokeblock((u8)gSpecialVar_ItemId);
- sub_816636C(sub_8166BEC);
- }
- break;
+ gUnknown_0203BC90->field_50++;
+ }
+ break;
+ case 4:
+ if (++gUnknown_0203BC90->field_52 > 16)
+ {
+ sub_8166E24();
+ gUnknown_0203BC90->field_50++;
+ }
+ break;
+ case 5:
+ if (gMain.newKeys & (A_BUTTON | B_BUTTON) && !sub_8166EDC())
+ {
+ TryClearPokeblock((u8)gSpecialVar_ItemId);
+ sub_816636C(sub_8166BEC);
+ }
+ break;
}
}
void sub_8166BEC(void)
{
- u8 i;
- u8 var;
+ u8 i, var;
+
switch (gUnknown_0203BC90->field_50)
- {
+ {
case 0:
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
gUnknown_0203BC90->field_50++;
@@ -588,18 +586,18 @@ void sub_8166BEC(void)
sub_81D354C(gUnknown_0203BCAC->field_7B1C);
for (i = 0; i < 7; i++)
DestroySprite(&gSprites[gUnknown_0203BCAC->field_7B06[i]]);
-
+
FreeSpriteTilesByTag(0);
FreeSpriteTilesByTag(1);
FreeSpritePaletteByTag(0);
FreeSpritePaletteByTag(1);
-
+
for (i = 0; i < 2; i++)
DestroySprite(gUnknown_0203BCAC->field_7B44[i]);
-
+
if (gUnknown_0203BCAC->field_7B10 != 0xFF)
DestroySprite(&gSprites[gUnknown_0203BCAC->field_7B10]);
-
+
SetVBlankCallback(NULL);
FREE_AND_SET_NULL(gUnknown_0203BCA0);
FREE_AND_SET_NULL(gUnknown_0203BCA4);
@@ -613,6 +611,7 @@ void sub_8166BEC(void)
void sub_8166D44(void)
{
u8 stringBuffer[0x40];
+
GetMonData(&gPlayerParty[sub_81672A4(gUnknown_0203BCAC->info.field_71)], MON_DATA_NICKNAME, stringBuffer);
StringGetEnd10(stringBuffer);
StringAppend(stringBuffer, gText_GetsAPokeBlockQuestion);
@@ -627,19 +626,21 @@ void sub_8166D44(void)
s8 sub_8166DE4(void)
{
- s8 retval = Menu_ProcessInputNoWrapClearOnChoose();
- switch(retval)
+ s8 menuItem = Menu_ProcessInputNoWrapClearOnChoose();
+
+ switch (menuItem)
{
case 0:
break;
- case -1:
+ case MENU_B_PRESSED:
case 1:
PlaySE(SE_SELECT);
rbox_fill_rectangle(2);
ClearWindowTilemap(2);
break;
}
- return retval;
+
+ return menuItem;
}
void sub_8166E24(void)
@@ -647,13 +648,17 @@ void sub_8166E24(void)
sub_8098858(2, 151, 14);
FillWindowPixelBuffer(2, 17);
- for (gUnknown_0203BC90->field_53 = 0; gUnknown_0203BC90->field_53 < 5 && gUnknown_0203BC90->field_61[gUnknown_0203BC90->field_53] == 0; gUnknown_0203BC90->field_53++);
-
+ for (gUnknown_0203BC90->field_53 = 0; gUnknown_0203BC90->field_53 < 5; gUnknown_0203BC90->field_53++)
+ {
+ if (gUnknown_0203BC90->field_61[gUnknown_0203BC90->field_53] != 0)
+ break;
+ }
+
if (gUnknown_0203BC90->field_53 < 5)
Pokeblock_BufferEnhancedStatText(gStringVar4, gUnknown_0203BC90->field_53, gUnknown_0203BC90->field_61[gUnknown_0203BC90->field_53]);
else
Pokeblock_BufferEnhancedStatText(gStringVar4, gUnknown_0203BC90->field_53, 0);
-
+
Pokeblock_MenuWindowTextPrint(gStringVar4);
PutWindowTilemap(2);
CopyWindowToVram(2, 3);
@@ -662,7 +667,7 @@ void sub_8166E24(void)
bool8 sub_8166EDC(void)
{
FillWindowPixelBuffer(2, 17);
-
+
while (1)
{
gUnknown_0203BC90->field_53++;
@@ -677,11 +682,11 @@ bool8 sub_8166EDC(void)
return FALSE;
}
}
-
+
Pokeblock_BufferEnhancedStatText(gStringVar4, gUnknown_0203BC90->field_53, gUnknown_0203BC90->field_61[gUnknown_0203BC90->field_53]);
Pokeblock_MenuWindowTextPrint(gStringVar4);
CopyWindowToVram(2, 2);
-
+
return TRUE;
}
@@ -706,15 +711,13 @@ void Pokeblock_MenuWindowTextPrint(const u8 *message)
AddTextPrinterParameterized(2, 1, gStringVar4, 0, 1, 0, NULL);
}
+// This function is a joke.
#ifdef NONMATCHING
-void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statID, s16 a2)
+void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statId, s16 a2)
{
if (a2 != 0)
{
- if (a2 > 0)
- a2 = 0;
-
- StringCopy(dest, sContestStatNames[statID]);
+ StringCopy(dest, sContestStatNames[statId]);
StringAppend(dest, gText_WasEnhanced);
}
else
@@ -724,7 +727,7 @@ void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statID, s16 a2)
}
#else
NAKED
-void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statID, s16 a2)
+void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statId, s16 a2)
{
asm(".syntax unified\n\
push {r4,lr}\n\
@@ -765,70 +768,67 @@ _08167018:\n\
}
#endif
-void Pokeblock_GetMonContestStats(struct Pokemon *pokemon, u8 *data)
+void Pokeblock_GetMonContestStats(struct Pokemon *mon, u8 *data)
{
u16 i;
for (i = 0; i < 5; i++)
- data[i] = GetMonData(pokemon, gUnknown_085DFCB0[i]);
+ data[i] = GetMonData(mon, gUnknown_085DFCB0[i]);
}
-void sub_8167054(struct Pokeblock *pokeblock, struct Pokemon *pokemon)
+void sub_8167054(struct Pokeblock *pokeblock, struct Pokemon *mon)
{
u16 i;
s16 cstat;
u8 data;
- if (GetMonData(pokemon, MON_DATA_SHEEN) != 255)
+
+ if (GetMonData(mon, MON_DATA_SHEEN) != 255)
{
- sub_8167184(pokeblock, pokemon);
+ sub_8167184(pokeblock, mon);
for (i = 0; i < 5; i++)
{
- data = GetMonData(pokemon, gUnknown_085DFCB0[i]);
+ data = GetMonData(mon, gUnknown_085DFCB0[i]);
cstat = data + gUnknown_0203BC90->field_66[i];
if (cstat < 0)
cstat = 0;
if (cstat > 255)
cstat = 255;
data = cstat;
- SetMonData(pokemon, gUnknown_085DFCB0[i], &data);
+ SetMonData(mon, gUnknown_085DFCB0[i], &data);
}
- cstat = (u8)GetMonData(pokemon, MON_DATA_SHEEN);
- cstat = cstat + pokeblock->feel;
+ cstat = (u8)(GetMonData(mon, MON_DATA_SHEEN)) + pokeblock->feel;
if (cstat > 255)
cstat = 255;
data = cstat;
- SetMonData(pokemon, MON_DATA_SHEEN, &data);
+ SetMonData(mon, MON_DATA_SHEEN, &data);
}
}
void sub_8167104(void)
{
u16 i;
- struct Pokemon *pokemon = gPlayerParty;
- pokemon += gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->info.field_71 * 4 + 9];
- Pokeblock_GetMonContestStats(pokemon, gUnknown_0203BC90->field_57);
- sub_8167054(gUnknown_0203BC90->pokeblock, pokemon);
- Pokeblock_GetMonContestStats(pokemon, gUnknown_0203BC90->field_5c);
- for (i=0; i<5; i++)
- {
+ struct Pokemon *mon = gPlayerParty;
+ mon += gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->info.field_71 * 4 + 9];
+
+ Pokeblock_GetMonContestStats(mon, gUnknown_0203BC90->field_57);
+ sub_8167054(gUnknown_0203BC90->pokeblock, mon);
+ Pokeblock_GetMonContestStats(mon, gUnknown_0203BC90->field_5c);
+ for (i = 0; i < 5; i++)
gUnknown_0203BC90->field_61[i] = gUnknown_0203BC90->field_5c[i] - gUnknown_0203BC90->field_57[i];
- }
}
-void sub_8167184(struct Pokeblock *pokeblock, struct Pokemon *pokemon)
+void sub_8167184(struct Pokeblock *pokeblock, struct Pokemon *mon)
{
- s8 direction;
- s8 i;
- s16 amount;
- s8 boost;
- s8 taste;
+ s8 i, direction, taste;
+
gUnknown_0203BC90->field_66[0] = pokeblock->spicy;
gUnknown_0203BC90->field_66[1] = pokeblock->sour;
gUnknown_0203BC90->field_66[2] = pokeblock->bitter;
gUnknown_0203BC90->field_66[3] = pokeblock->sweet;
gUnknown_0203BC90->field_66[4] = pokeblock->dry;
+
if (gPokeblockGain > 0)
direction = 1;
else if (gPokeblockGain < 0)
@@ -838,39 +838,43 @@ void sub_8167184(struct Pokeblock *pokeblock, struct Pokemon *pokemon)
for (i = 0; i < 5; i++)
{
- amount = gUnknown_0203BC90->field_66[i];
- boost = amount / 10;
+ s16 amount = gUnknown_0203BC90->field_66[i];
+ s8 boost = amount / 10;
+
if (amount % 10 >= 5) // round to the nearest
boost++;
- taste = GetMonFlavorRelation(pokemon, gUnknown_085DFCC4[i]);
+ taste = GetMonFlavorRelation(mon, gUnknown_085DFCC4[i]);
if (taste == direction)
gUnknown_0203BC90->field_66[i] += boost * taste;
}
}
-bool8 sub_8167268(void)
+bool8 IsSheenMaxed(void)
{
- u8 *mon;
- mon = (u8 *) &gUnknown_0203BCAC->field_0[gUnknown_0203BCAC->info.field_71 * 4];
- if (sub_81D2C68(*(mon + 864 + 0x7C58), *(mon + 865 + 0x7C58), MON_DATA_SHEEN, 0) == 255)
+ if (GetBoxOrPartyMonData(gUnknown_0203BCAC->field_7FB8[gUnknown_0203BCAC->info.field_71].unk0,
+ gUnknown_0203BCAC->field_7FB8[gUnknown_0203BCAC->info.field_71].unk1,
+ MON_DATA_SHEEN,
+ NULL) == 255)
return TRUE;
- return FALSE;
+ else
+ return FALSE;
}
u8 sub_81672A4(u8 a0)
{
u8 i;
+
for (i = 0; i < PARTY_SIZE; i++)
{
if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
{
if (a0 == 0)
return i;
-
a0--;
}
}
+
return 0;
}
@@ -894,20 +898,21 @@ u8 sub_8167324(u8 a0)
void sub_8167338(void)
{
- u16 flavor;
- u8 spriteidx;
+ u16 i, spriteId;
+
LoadSpriteSheet(&gSpriteSheet_ConditionUpDown);
LoadSpritePalette(&gSpritePalette_ConditionUpDown);
gUnknown_0203BC90->field_54 = 0;
- for (flavor = 0; flavor < 5; flavor++)
+
+ for (i = 0; i < 5; i++)
{
- if (gUnknown_0203BC90->field_61[flavor] != 0)
+ if (gUnknown_0203BC90->field_61[i] != 0)
{
- spriteidx = CreateSprite(&gSpriteTemplate_085DFD5C, gUnknown_085DFD28[flavor][0], gUnknown_085DFD28[flavor][1], 0);
- if (spriteidx != MAX_SPRITES)
+ spriteId = CreateSprite(&gSpriteTemplate_085DFD5C, gUnknown_085DFD28[i][0], gUnknown_085DFD28[i][1], 0);
+ if (spriteId != MAX_SPRITES)
{
- if (gUnknown_0203BC90->field_61[flavor] != 0)
- gSprites[spriteidx].callback = sub_81673DC;
+ if (gUnknown_0203BC90->field_61[i] != 0)
+ gSprites[spriteId].callback = sub_81673DC;
gUnknown_0203BC90->field_54++;
}
@@ -933,8 +938,8 @@ void sub_8167420(void)
{
u16 i;
u16 numMons;
-
- for (i = 0, numMons = 0; i < CalculatePlayerPartyCount(); i++)
+
+ for (i = 0, numMons = 0; i < CalculatePlayerPartyCount(); i++)
{
if (!GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
{
@@ -952,677 +957,204 @@ void sub_8167420(void)
void sub_81674BC(void)
{
- s16 var;
- s16 var2;
-
+ s16 var, var2;
+
sub_816753C(gUnknown_0203BCAC->info.field_71, 0);
gUnknown_0203BCAC->field_7FB3 = 0;
gUnknown_0203BCAC->field_7FB4 = 1;
gUnknown_0203BCAC->field_7FB5 = 2;
+
var = gUnknown_0203BCAC->info.field_71 + 1;
if (var >= gUnknown_0203BCAC->info.field_70)
var = 0;
-
+
var2 = gUnknown_0203BCAC->info.field_71 - 1;
if (var2 < 0)
var2 = gUnknown_0203BCAC->info.field_70 - 1;
-
+
sub_816753C(var, 1);
sub_816753C(var2, 2);
}
-#ifdef NONMATCHING
-void sub_816753C(s16 a1, u8 a2)
+void sub_816753C(s16 id1, u8 id2)
{
- u8 *v3;
- int v5;
- int v6;
-
- v3 = &gUnknown_0203BCAC->field_0[a1 << 16 >> 14];
- v5 = *(0x7FB8 + v3);
- v6 = *(0x7FB9 + v3);
-
- sub_81D2ED4(gUnknown_0203BCAC->field_0[0x7B4D + 24 * a2], gUnknown_0203BCAC->field_0[0x7B95 + 64 * a2], v5, v6, a1, gUnknown_0203BCAC->info.field_70, 0);
- sub_81D2F78(gUnknown_0203BCAC->field_7C58[0], gUnknown_0203BCAC->field_0[0x7FB0], v5, v6, a1, a2, gUnknown_0203BCAC->info.field_70, 0);
- sub_81D3094(gUnknown_0203BCAC->field_0[(a2 << 13) + 0x304], gUnknown_0203BCAC->field_0[(a2 << 7) + 4], v5, v6, a1, gUnknown_0203BCAC->info.field_70, 0);
- //gUnknown_0203BCAC->field_0[0x7B4D + a1 * 40], gUnknown_0203BCAC->field_7FB8, gUnknown_0203BCAC->field_7FB9, gUnknown_203BCAC->field_0[0], gUnknown_203BCAC->info.field_70, 0)
+ u8 boxId = gUnknown_0203BCAC->field_7FB8[id1].unk0;
+ u8 monId = gUnknown_0203BCAC->field_7FB8[id1].unk1;
+ u8 r6 = gUnknown_0203BCAC->info.field_70;
+ bool8 r8 = FALSE;
+
+ sub_81D2ED4(gUnknown_0203BCAC->field_7B4D[id2], gUnknown_0203BCAC->field_7B95[id2], boxId, monId, id1, r6, r8);
+ sub_81D2F78(&gUnknown_0203BCAC->field_7C58, gUnknown_0203BCAC->unk7FB0, boxId, monId, id1, id2, r6, r8);
+ sub_81D3094(gUnknown_0203BCAC->field_304[id2], gUnknown_0203BCAC->field_4[id2], boxId, monId, id1, r6, r8);
}
-#else
-NAKED
-void sub_816753C(s16 a1, u8 a2)
-{
- 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\
- adds r5, r0, 0\n\
- adds r4, r1, 0\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- ldr r0, =gUnknown_0203BCAC\n\
- mov r9, r0\n\
- ldr r1, [r0]\n\
- lsls r5, 16\n\
- asrs r0, r5, 14\n\
- adds r0, r1, r0\n\
- ldr r3, =0x00007fb8\n\
- adds r2, r0, r3\n\
- ldrb r7, [r2]\n\
- ldr r2, =0x00007fb9\n\
- adds r0, r2\n\
- ldrb r0, [r0]\n\
- mov r10, r0\n\
- adds r3, 0x88\n\
- adds r0, r1, r3\n\
- ldrb r6, [r0]\n\
- movs r0, 0\n\
- mov r8, r0\n\
- lsls r0, r4, 1\n\
- adds r0, r4\n\
- lsls r0, 3\n\
- ldr r2, =0x00007b4d\n\
- adds r0, r2\n\
- adds r0, r1, r0\n\
- lsls r2, r4, 6\n\
- ldr r3, =0x00007b95\n\
- adds r2, r3\n\
- adds r1, r2\n\
- lsrs r5, 16\n\
- str r5, [sp]\n\
- str r6, [sp, 0x4]\n\
- mov r2, r8\n\
- str r2, [sp, 0x8]\n\
- adds r2, r7, 0\n\
- mov r3, r10\n\
- bl sub_81D2ED4\n\
- mov r3, r9\n\
- ldr r1, [r3]\n\
- ldr r2, =0x00007c58\n\
- adds r0, r1, r2\n\
- ldr r3, =0x00007fb0\n\
- adds r1, r3\n\
- str r5, [sp]\n\
- str r4, [sp, 0x4]\n\
- str r6, [sp, 0x8]\n\
- mov r2, r8\n\
- str r2, [sp, 0xC]\n\
- adds r2, r7, 0\n\
- mov r3, r10\n\
- bl sub_81D2F78\n\
- lsls r0, r4, 13\n\
- movs r1, 0xC1\n\
- lsls r1, 2\n\
- adds r0, r1\n\
- mov r3, r9\n\
- ldr r1, [r3]\n\
- adds r0, r1, r0\n\
- lsls r4, 7\n\
- adds r4, 0x4\n\
- adds r1, r4\n\
- str r5, [sp]\n\
- str r6, [sp, 0x4]\n\
- mov r2, r8\n\
- str r2, [sp, 0x8]\n\
- adds r2, r7, 0\n\
- mov r3, r10\n\
- bl sub_81D3094\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\
- .pool\n\
- .syntax divided\n");
-}
-#endif
-#ifdef NONMATCHING
void sub_8167608(u8 arg0)
{
- u8 v4;
- u8 *v5;
- u8 *v6;
- u32 v7;
- struct SpritePalette array[5];
- if(gUnknown_0203BCAC->field_0[0x7B10] == 255)
+ u8 spriteId;
+ struct SpriteTemplate spriteTemplate;
+ struct SpriteSheet spriteSheet;
+ struct SpritePalette spritePal;
+
+ if (gUnknown_0203BCAC->field_7B10 == 0xFF)
{
- sub_81D31D0(&array[3], &array[0], &array[4]);
- array[1] = (struct SpritePallete *) ((u32) gUnknown_0203BCAC->field_0[(arg0 << 13) + 772]);
- array[2] = (struct SpritePallete *) ((u32) gUnknown_0203BCAC->field_0[(arg0 << 7) + 4]);
- gUnknown_0203BCAC->field_0[0x7B12] = LoadSpritePalette(&array[3]);
- gUnknown_0203BCAC->field_0[0x7B14] = LoadSpritePalette(&array[4]);
- v4 = CreateSprite(array[0], 38, 104, 0);
- gUnknown_0203BCAC->field_0[0x7B10] = v4;
- if(v4 == 64)
+ sub_81D31D0(&spriteSheet, &spriteTemplate, &spritePal);
+ spriteSheet.data = gUnknown_0203BCAC->field_304[arg0];
+ spritePal.data = gUnknown_0203BCAC->field_4[arg0];
+ gUnknown_0203BCAC->field_7B12 = LoadSpritePalette(&spritePal);
+ gUnknown_0203BCAC->field_7B14 = LoadSpriteSheet(&spriteSheet);
+ spriteId = CreateSprite(&spriteTemplate, 38, 104, 0);
+ gUnknown_0203BCAC->field_7B10 = spriteId;
+ if (spriteId == MAX_SPRITES)
{
FreeSpriteTilesByTag(100);
FreeSpritePaletteByTag(100);
- gUnknown_0203BCAC->field_0[0x7B10] = 255;
+ gUnknown_0203BCAC->field_7B10 = 0xFF;
}
else
{
- gUnknown_0203BCAC->field_0[0x7B10] = v4;
- v5 = &gUnknown_0203BCAC->field_0[0];
- v6 = &gUnknown_0203BCAC->field_0[0x7B10];
- gSprites[v6].callback = sub_8168168;
- gSprites[v6].pos2.y -= 32;
- *(v5+0x7B18) = 32 * *(v5+0x7B14) + 0x06010000;
- *(v5+0x7B12) = 16 * *(v5+0x7B12) + 0x100;
+ gUnknown_0203BCAC->field_7B10 = spriteId;
+ gSprites[gUnknown_0203BCAC->field_7B10].callback = sub_8168168;
+ gSprites[gUnknown_0203BCAC->field_7B10].pos2.y -= 34;
+ gUnknown_0203BCAC->field_7B18 = (void*)(OBJ_VRAM0 + (gUnknown_0203BCAC->field_7B14 * 32));
+ gUnknown_0203BCAC->field_7B12 = (gUnknown_0203BCAC->field_7B12 * 16) + 0x100;
}
}
else
{
- v7 = gUnknown_0203BCAC->field_0[0x7B18];
- REG_ADDR_DMA3SAD = gUnknown_0203BCAC->field_0[(arg0 << 13) + 772];
- REG_ADDR_DMA3DAD = v7;
- REG_ADDR_DMA3CNT = 0x80000400;
- LoadPalette(gUnknown_0203BCAC->field_0[arg0 << 7) + 4), gUnknown_0203BCAC->field_0[0x7B12], 32);
+ do {} while(0); // Surprised to see something like this? It's a very neat trick for generating the same assembly. It has no practical purpose, feel free to remove it.
+ DmaCopy16Defvars(3, gUnknown_0203BCAC->field_304[arg0], gUnknown_0203BCAC->field_7B18, 0x800);
+ LoadPalette(gUnknown_0203BCAC->field_4[arg0], gUnknown_0203BCAC->field_7B12, 32);
}
}
-#else
-NAKED
-void sub_8167608(u8 arg0)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- sub sp, 0x28\n\
- lsls r0, 24\n\
- lsrs r6, r0, 24\n\
- ldr r1, =gUnknown_0203BCAC\n\
- ldr r3, [r1]\n\
- ldr r0, =0x00007b10\n\
- mov r8, r0\n\
- adds r0, r3, r0\n\
- ldrb r0, [r0]\n\
- adds r7, r1, 0\n\
- cmp r0, 0xFF\n\
- bne _08167714\n\
- add r5, sp, 0x18\n\
- add r4, sp, 0x20\n\
- adds r0, r5, 0\n\
- mov r1, sp\n\
- adds r2, r4, 0\n\
- bl sub_81D31D0\n\
- lsls r0, r6, 13\n\
- movs r1, 0xC1\n\
- lsls r1, 2\n\
- adds r0, r1\n\
- ldr r1, [r7]\n\
- adds r0, r1, r0\n\
- str r0, [sp, 0x18]\n\
- lsls r0, r6, 7\n\
- adds r0, 0x4\n\
- adds r1, r0\n\
- str r1, [sp, 0x20]\n\
- adds r0, r4, 0\n\
- bl LoadSpritePalette\n\
- ldr r1, [r7]\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- ldr r2, =0x00007b12\n\
- adds r1, r2\n\
- strh r0, [r1]\n\
- adds r0, r5, 0\n\
- bl LoadSpriteSheet\n\
- ldr r1, [r7]\n\
- ldr r3, =0x00007b14\n\
- adds r1, r3\n\
- strh r0, [r1]\n\
- mov r0, sp\n\
- movs r1, 0x26\n\
- movs r2, 0x68\n\
- movs r3, 0\n\
- bl CreateSprite\n\
- lsls r0, 24\n\
- lsrs r1, r0, 24\n\
- ldr r0, [r7]\n\
- ldr r2, =0x00007b10\n\
- adds r0, r2\n\
- strb r1, [r0]\n\
- cmp r1, 0x40\n\
- bne _081676AC\n\
- movs r0, 0x64\n\
- bl FreeSpriteTilesByTag\n\
- movs r0, 0x64\n\
- bl FreeSpritePaletteByTag\n\
- ldr r0, [r7]\n\
- add r0, r8\n\
- movs r1, 0xFF\n\
- strb r1, [r0]\n\
- b _08167742\n\
- .pool\n\
-_081676AC:\n\
- ldr r0, [r7]\n\
- add r0, r8\n\
- strb r1, [r0]\n\
- ldr r4, =gSprites\n\
- ldr r2, [r7]\n\
- mov r0, r8\n\
- adds r3, r2, r0\n\
- ldrb r1, [r3]\n\
- lsls r0, r1, 4\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r1, r4, 0\n\
- adds r1, 0x1C\n\
- adds r0, r1\n\
- ldr r1, =sub_8168168\n\
- str r1, [r0]\n\
- ldrb r1, [r3]\n\
- lsls r0, r1, 4\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r4\n\
- ldrh r1, [r0, 0x26]\n\
- subs r1, 0x22\n\
- strh r1, [r0, 0x26]\n\
- ldr r3, =0x00007b18\n\
- adds r1, r2, r3\n\
- subs r3, 0x4\n\
- adds r0, r2, r3\n\
- ldrh r0, [r0]\n\
- lsls r0, 5\n\
- ldr r3, =0x06010000\n\
- adds r0, r3\n\
- str r0, [r1]\n\
- ldr r0, =0x00007b12\n\
- adds r2, r0\n\
- ldrh r0, [r2]\n\
- lsls r0, 4\n\
- movs r1, 0x80\n\
- lsls r1, 1\n\
- adds r0, r1\n\
- strh r0, [r2]\n\
- b _08167742\n\
- .pool\n\
-_08167714:\n\
- lsls r1, r6, 13\n\
- movs r0, 0xC1\n\
- lsls r0, 2\n\
- adds r1, r0\n\
- adds r1, r3, r1\n\
- ldr r2, =0x00007b18\n\
- adds r0, r3, r2\n\
- ldr r2, [r0]\n\
- ldr r0, =0x040000d4\n\
- str r1, [r0]\n\
- str r2, [r0, 0x4]\n\
- ldr r1, =0x80000400\n\
- str r1, [r0, 0x8]\n\
- ldr r0, [r0, 0x8]\n\
- lsls r0, r6, 7\n\
- adds r0, 0x4\n\
- adds r0, r3, r0\n\
- ldr r2, =0x00007b12\n\
- adds r1, r3, r2\n\
- ldrh r1, [r1]\n\
- movs r2, 0x20\n\
- bl LoadPalette\n\
-_08167742:\n\
- add sp, 0x28\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .pool\n\
- .syntax divided\n");
-}
-#endif
-#ifdef NONMATCHING
void sub_8167760(void)
{
- s32 i;
- u8 v1;
- u8 v2;
- u8 v3;
- u32 v4;
- struct SpriteSheet *v6;
- struct SpriteTemplate *v7;
- void (*funcCB) (void);
- struct SpritePalette *v9;
- struct SpriteSheet *v10;
- struct SpritePalette *v11;
-
- sub_81D321C(v6, v7, v9);
- LoadSpriteSheets(v6);
- LoadSpritePalettes(v9);
- for(i = 0; i < gUnknown_0203BCAC->info.field_70 - 1; i++)
+ u16 i, spriteId;
+ struct SpriteSheet spriteSheets[4];
+ struct SpriteTemplate spriteTemplate;
+ struct SpritePalette spritePals[3];
+ struct SpriteSheet spriteSheet2;
+ struct SpritePalette spritePal2;
+
+ sub_81D321C(spriteSheets, &spriteTemplate, spritePals);
+ LoadSpriteSheets(spriteSheets);
+ LoadSpritePalettes(spritePals);
+
+ for (i = 0; i < gUnknown_0203BCAC->info.field_70 - 1; i++)
{
- v1 = CreateSprite(v7, 226, (0x140000 * i + 0x80000) >> 16, 0);
- if(v1 == 64)
+ spriteId = CreateSprite(&spriteTemplate, 226, (i * 20) + 8, 0);
+ if (spriteId != MAX_SPRITES)
{
- gUnknown_0203BCAC->field_0[0x7B06 + i] = -1;
+ gUnknown_0203BCAC->field_7B06[i] = spriteId;
+ gSprites[spriteId].data[0] = i;
+ gSprites[spriteId].callback = sub_8168180;
}
else
{
- gUnknown_0203BCAC->field_0[0x7B06 + i] = v1;
- gSprites[v1].data[0] = i;
- gSprites[v1].callback = (SpriteCallback) sub_8168180;
+ gUnknown_0203BCAC->field_7B06[i] = -1;
}
}
- for(v7->tileTag = 103; i <= 5; i++)
+
+ spriteTemplate.tileTag = 103;
+ for (; i < 6; i++)
{
- v2 = CreateSprite(v7, 230, (0x140000 * i + 0x80000) >> 16, 0);
- if(v2 == 64 )
+ spriteId = CreateSprite(&spriteTemplate, 230, (i * 20) + 8, 0);
+ if (spriteId != MAX_SPRITES)
{
- gUnknown_0203BCAC->field_0[0x7B06 + i] = -1;
+ gUnknown_0203BCAC->field_7B06[i] = spriteId;
+ gSprites[spriteId].oam.size = 0;
}
else
{
- gUnknown_0203BCAC->field_0[0x7B06 + i] = v2;
- gSprites[v2].oam.tileNum &= 0x3F;
+ gUnknown_0203BCAC->field_7B06[i] = -1;
}
}
- v7->tileTag = 102;
- funcCB = sub_81681B4;
- v3 = CreateSprite(v7, 222, (0x140000 * i + 0x80000) >> 16, 0);
- if(v3 == 64)
+
+ spriteTemplate.tileTag = 102;
+ spriteTemplate.callback = sub_81681B4;
+ spriteId = CreateSprite(&spriteTemplate, 222, (i * 20) + 8, 0);
+ if (spriteId != MAX_SPRITES)
{
- gUnknown_0203BCAC->field_0[0x7B06 + i] = -1;
- }
- else
+ gUnknown_0203BCAC->field_7B06[i] = spriteId;
+ gSprites[spriteId].oam.shape = 1;
+ gSprites[spriteId].oam.size = 2;
+ }
+ else
{
- gUnknown_0203BCAC->field_0[0x7B06 + i] = v3;
- v4 = 68 * v3 + 0x2020630;
- (v4 + 1) = gSprites[v2].oam.affineMode & (0x3F | 0x40);
- (v4 + 3) = (v4 + 3) & (0x3F | 0x80);
+ gUnknown_0203BCAC->field_7B06[i] = -1;
}
- sub_81D32B0(v10, v11);
- LoadSpriteSheet(v10);
- LoadSpritePalette(v11);
-}
-#else
-NAKED
-void sub_8167760(void)
-{
- 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, 0x60\n\
- add r5, sp, 0x20\n\
- add r4, sp, 0x38\n\
- mov r0, sp\n\
- adds r1, r5, 0\n\
- adds r2, r4, 0\n\
- bl sub_81D321C\n\
- mov r0, sp\n\
- bl LoadSpriteSheets\n\
- adds r0, r4, 0\n\
- bl LoadSpritePalettes\n\
- movs r4, 0\n\
- ldr r1, =gUnknown_0203BCAC\n\
- ldr r0, [r1]\n\
- ldr r2, =0x00008040\n\
- adds r0, r2\n\
- ldrb r0, [r0]\n\
- subs r0, 0x1\n\
- adds r6, r5, 0\n\
- add r2, sp, 0x50\n\
- mov r9, r2\n\
- add r2, sp, 0x58\n\
- mov r10, r2\n\
- cmp r4, r0\n\
- bge _0816781C\n\
- adds r5, r1, 0\n\
- ldr r7, =gSprites\n\
- movs r0, 0x1C\n\
- adds r0, r7\n\
- mov r8, r0\n\
-_081677AC:\n\
- lsls r2, r4, 2\n\
- adds r2, r4\n\
- lsls r2, 18\n\
- movs r1, 0x80\n\
- lsls r1, 12\n\
- adds r2, r1\n\
- asrs r2, 16\n\
- adds r0, r6, 0\n\
- movs r1, 0xE2\n\
- movs r3, 0\n\
- bl CreateSprite\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- cmp r3, 0x40\n\
- beq _081677FC\n\
- ldr r0, [r5]\n\
- ldr r2, =0x00007b06\n\
- adds r0, r2\n\
- adds r0, r4\n\
- strb r3, [r0]\n\
- lsls r0, r3, 4\n\
- adds r0, r3\n\
- lsls r0, 2\n\
- adds r1, r0, r7\n\
- strh r4, [r1, 0x2E]\n\
- add r0, r8\n\
- ldr r1, =sub_8168180\n\
- str r1, [r0]\n\
- b _08167808\n\
- .pool\n\
-_081677FC:\n\
- ldr r0, [r5]\n\
- ldr r1, =0x00007b06\n\
- adds r0, r1\n\
- adds r0, r4\n\
- movs r1, 0xFF\n\
- strb r1, [r0]\n\
-_08167808:\n\
- adds r0, r4, 0x1\n\
- lsls r0, 16\n\
- lsrs r4, r0, 16\n\
- ldr r0, [r5]\n\
- ldr r2, =0x00008040\n\
- adds r0, r2\n\
- ldrb r0, [r0]\n\
- subs r0, 0x1\n\
- cmp r4, r0\n\
- blt _081677AC\n\
-_0816781C:\n\
- movs r0, 0x67\n\
- strh r0, [r6]\n\
- cmp r4, 0x5\n\
- bhi _0816788A\n\
- ldr r5, =gUnknown_0203BCAC\n\
- ldr r7, =gSprites\n\
-_08167828:\n\
- lsls r2, r4, 2\n\
- adds r2, r4\n\
- lsls r2, 18\n\
- movs r0, 0x80\n\
- lsls r0, 12\n\
- adds r2, r0\n\
- asrs r2, 16\n\
- adds r0, r6, 0\n\
- movs r1, 0xE6\n\
- movs r3, 0\n\
- bl CreateSprite\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- cmp r3, 0x40\n\
- beq _08167874\n\
- ldr r0, [r5]\n\
- ldr r1, =0x00007b06\n\
- adds r0, r1\n\
- adds r0, r4\n\
- strb r3, [r0]\n\
- lsls r1, r3, 4\n\
- adds r1, r3\n\
- lsls r1, 2\n\
- adds r1, r7\n\
- ldrb r2, [r1, 0x3]\n\
- movs r0, 0x3F\n\
- ands r0, r2\n\
- strb r0, [r1, 0x3]\n\
- b _08167880\n\
- .pool\n\
-_08167874:\n\
- ldr r0, [r5]\n\
- ldr r2, =0x00007b06\n\
- adds r0, r2\n\
- adds r0, r4\n\
- movs r1, 0xFF\n\
- strb r1, [r0]\n\
-_08167880:\n\
- adds r0, r4, 0x1\n\
- lsls r0, 16\n\
- lsrs r4, r0, 16\n\
- cmp r4, 0x5\n\
- bls _08167828\n\
-_0816788A:\n\
- movs r0, 0x66\n\
- strh r0, [r6]\n\
- ldr r0, =sub_81681B4\n\
- str r0, [r6, 0x14]\n\
- lsls r2, r4, 2\n\
- adds r2, r4\n\
- lsls r2, 18\n\
- movs r0, 0x80\n\
- lsls r0, 12\n\
- adds r2, r0\n\
- asrs r2, 16\n\
- adds r0, r6, 0\n\
- movs r1, 0xDE\n\
- movs r3, 0\n\
- bl CreateSprite\n\
- lsls r0, 24\n\
- lsrs r3, r0, 24\n\
- cmp r3, 0x40\n\
- beq _081678F4\n\
- ldr r0, =gUnknown_0203BCAC\n\
- ldr r0, [r0]\n\
- ldr r1, =0x00007b06\n\
- adds r0, r1\n\
- adds r0, r4\n\
- strb r3, [r0]\n\
- ldr r0, =gSprites\n\
- lsls r2, r3, 4\n\
- adds r2, r3\n\
- lsls r2, 2\n\
- adds r2, r0\n\
- ldrb r3, [r2, 0x1]\n\
- movs r1, 0x3F\n\
- adds r0, r1, 0\n\
- ands r0, r3\n\
- movs r3, 0x40\n\
- orrs r0, r3\n\
- strb r0, [r2, 0x1]\n\
- ldrb r0, [r2, 0x3]\n\
- ands r1, r0\n\
- movs r0, 0x80\n\
- orrs r1, r0\n\
- strb r1, [r2, 0x3]\n\
- b _08167902\n\
- .pool\n\
-_081678F4:\n\
- ldr r0, =gUnknown_0203BCAC\n\
- ldr r0, [r0]\n\
- ldr r2, =0x00007b06\n\
- adds r0, r2\n\
- adds r0, r4\n\
- movs r1, 0xFF\n\
- strb r1, [r0]\n\
-_08167902:\n\
- mov r0, r9\n\
- mov r1, r10\n\
- bl sub_81D32B0\n\
- mov r0, r9\n\
- bl LoadSpriteSheet\n\
- mov r0, r10\n\
- bl LoadSpritePalette\n\
- add sp, 0x60\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\
- .pool\n\
- .syntax divided\n");
+
+ sub_81D32B0(&spriteSheet2, &spritePal2);
+ LoadSpriteSheet(&spriteSheet2);
+ LoadSpritePalette(&spritePal2);
}
-#endif
bool8 sub_8167930(void)
{
- bool8 retvalue;
- switch(gUnknown_0203BCAC->info.unk78)
- {
- case 0:
- ChangeBgX(0, 0, 0);
- ChangeBgY(0, 0, 0);
- ChangeBgX(1, 0, 0);
- ChangeBgY(1, 0, 0);
- ChangeBgX(2, 0, 0);
- ChangeBgY(2, 0, 0);
- ChangeBgX(3, 0, 0);
- ChangeBgY(3, 136 << 6, 0);
- SetGpuReg(REG_OFFSET_DISPCNT, 28736);
- SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2|BLDCNT_EFFECT_BLEND|BLDCNT_TGT2_BG1);
- SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4));
- break;
- case 1:
- (u32 *) gUnknown_0203BCA4 = Alloc(6656);
- (u32 *) gUnknown_0203BCA0 = Alloc(1280);
- (u32 *) gUnknown_0203BCA8 = Alloc(1280);
- break;
- case 2:
- LZ77UnCompVram(gUnknown_085DFB60, gUnknown_0203BCA8);
- break;
- case 3:
- LoadBgTiles(3, gUnknown_085DFA80, 224, 0);
- break;
- case 4:
- LoadBgTilemap(3, gUnknown_0203BCA8, 1280, 0);
- break;
- case 5:
- LoadPalette(gUnknown_085DFA60, 208, 32);
- gUnknown_0203BCAC->field_7B0E = 0xFFB0;
- break;
- case 6:
- LZ77UnCompVram(gUsePokeblockGraph_Gfx, gUnknown_0203BCA4);
- break;
- case 7:
- LZ77UnCompVram(gUsePokeblockGraph_Tilemap, gUnknown_0203BCA0);
- LoadPalette(gUsePokeblockGraph_Pal, 32, 32);
- break;
- case 8:
- LoadBgTiles(1, gUnknown_0203BCA4, 6656, 160 << 2);
- break;
- case 9:
- SetBgTilemapBuffer(1, gUnknown_0203BCA0);
- CopyToBgTilemapBufferRect(1, gUsePokeblockNatureWin_Pal, 0, 13, 12, 4);
- CopyBgTilemapBufferToVram(1);
- break;
- case 10:
- LZ77UnCompVram(gUnknown_085DFC0C, &gUnknown_0203BCAC->field_0[0x7304]);
- break;
- case 11:
- LoadBgTilemap(2, &gUnknown_0203BCAC->field_0[0x7304], 1280, 0);
- LoadPalette(gUnknown_086231E8, 48, 32);
- LoadPalette(gUnknown_08623208, 240, 32);
- sub_81D21DC(2);
- break;
- default:
- gUnknown_0203BCAC->info.unk78 = 0;
- retvalue = 0;
- return retvalue;
- }
- gUnknown_0203BCAC->info.unk78++;
- retvalue = 1;
- return retvalue;
+ switch (gUnknown_0203BCAC->info.unk78)
+ {
+ case 0:
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ ChangeBgX(1, 0, 0);
+ ChangeBgY(1, 0, 0);
+ ChangeBgX(2, 0, 0);
+ ChangeBgY(2, 0, 0);
+ ChangeBgX(3, 0, 0);
+ ChangeBgY(3, 136 << 6, 0);
+ SetGpuReg(REG_OFFSET_DISPCNT, 28736);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG2|BLDCNT_EFFECT_BLEND|BLDCNT_TGT2_BG1);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(11, 4));
+ break;
+ case 1:
+ gUnknown_0203BCA4 = Alloc(6656);
+ gUnknown_0203BCA0 = Alloc(1280);
+ gUnknown_0203BCA8 = Alloc(1280);
+ break;
+ case 2:
+ LZ77UnCompVram(gUnknown_085DFB60, gUnknown_0203BCA8);
+ break;
+ case 3:
+ LoadBgTiles(3, gUnknown_085DFA80, 224, 0);
+ break;
+ case 4:
+ LoadBgTilemap(3, gUnknown_0203BCA8, 1280, 0);
+ break;
+ case 5:
+ LoadPalette(gUnknown_085DFA60, 208, 32);
+ gUnknown_0203BCAC->field_7B0E = 0xFFB0;
+ break;
+ case 6:
+ LZ77UnCompVram(gUsePokeblockGraph_Gfx, gUnknown_0203BCA4);
+ break;
+ case 7:
+ LZ77UnCompVram(gUsePokeblockGraph_Tilemap, gUnknown_0203BCA0);
+ LoadPalette(gUsePokeblockGraph_Pal, 32, 32);
+ break;
+ case 8:
+ LoadBgTiles(1, gUnknown_0203BCA4, 6656, 160 << 2);
+ break;
+ case 9:
+ SetBgTilemapBuffer(1, gUnknown_0203BCA0);
+ CopyToBgTilemapBufferRect(1, gUsePokeblockNatureWin_Pal, 0, 13, 12, 4);
+ CopyBgTilemapBufferToVram(1);
+ break;
+ case 10:
+ LZ77UnCompVram(gUnknown_085DFC0C, gUnknown_0203BCAC->tilemapBuffer);
+ break;
+ case 11:
+ LoadBgTilemap(2, gUnknown_0203BCAC->tilemapBuffer, 1280, 0);
+ LoadPalette(gUnknown_086231E8, 48, 32);
+ LoadPalette(gUnknown_08623208, 240, 32);
+ sub_81D21DC(2);
+ break;
+ default:
+ gUnknown_0203BCAC->info.unk78 = 0;
+ return FALSE;
+ }
+
+ gUnknown_0203BCAC->info.unk78++;
+ return TRUE;
}
void sub_8167BA0(u16 arg0, u8 copyToVramMode)
@@ -1658,9 +1190,7 @@ void sub_8167BA0(u16 arg0, u8 copyToVramMode)
static void sub_8167CA0(bool8 arg0)
{
u16 var0;
- int var1;
- int r8;
- int r4;
+ bool32 r8, r4;
if (arg0)
var0 = gUnknown_0203BCAC->field_7FB5;
@@ -1680,11 +1210,11 @@ static void sub_8167CA0(bool8 arg0)
gUnknown_0203BCAC->field_7FB3 = var0;
gUnknown_0203BCAC->field_7FB6 = gUnknown_0203BCAC->field_7FB5;
- gUnknown_0203BCAC->info.field_71 = gUnknown_0203BCAC->info.field_71 == 0
+ gUnknown_0203BCAC->info.field_71 = (gUnknown_0203BCAC->info.field_71 == 0)
? gUnknown_0203BCAC->info.field_70 - 1
: gUnknown_0203BCAC->info.field_71 - 1;
- gUnknown_0203BCAC->field_7B4C = gUnknown_0203BCAC->info.field_71 == 0
+ gUnknown_0203BCAC->field_7B4C = (gUnknown_0203BCAC->info.field_71 == 0)
? gUnknown_0203BCAC->info.field_70 - 1
: gUnknown_0203BCAC->info.field_71 - 1;
}
@@ -1695,11 +1225,11 @@ static void sub_8167CA0(bool8 arg0)
gUnknown_0203BCAC->field_7FB3 = var0;
gUnknown_0203BCAC->field_7FB6 = gUnknown_0203BCAC->field_7FB4;
- gUnknown_0203BCAC->info.field_71 = gUnknown_0203BCAC->info.field_71 < gUnknown_0203BCAC->info.field_70 - 1
+ gUnknown_0203BCAC->info.field_71 = (gUnknown_0203BCAC->info.field_71 < gUnknown_0203BCAC->info.field_70 - 1)
? gUnknown_0203BCAC->info.field_71 + 1
: 0;
- gUnknown_0203BCAC->field_7B4C = gUnknown_0203BCAC->info.field_71 < gUnknown_0203BCAC->info.field_70 - 1
+ gUnknown_0203BCAC->field_7B4C = (gUnknown_0203BCAC->info.field_71 < gUnknown_0203BCAC->info.field_70 - 1)
? gUnknown_0203BCAC->info.field_71 + 1
: 0;
}
@@ -1835,7 +1365,8 @@ void sub_81681B4(struct Sprite *sprite)
void sub_81681F4(u8 monIndex)
{
u8 sheen = GetMonData(&gPlayerParty[monIndex], MON_DATA_SHEEN);
- gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->field_7FB3] = sheen != 255
+
+ gUnknown_0203BCAC->unk7FB0[gUnknown_0203BCAC->field_7FB3] = (sheen != 255)
? sheen / 29
: 9;
}
@@ -1868,7 +1399,7 @@ static void sub_8168294(void)
if (spriteId != MAX_SPRITES)
{
gSprites[spriteId].data[0] = var;
- gSprites[spriteId].data[1] = (i * xDiff) | 32;
+ gSprites[spriteId].data[1] = (i * xDiff) | 0x20;
gSprites[spriteId].data[2] = i;
StartSpriteAnim(&gSprites[spriteId], i);
sprites[i] = &gSprites[spriteId];
@@ -1896,6 +1427,7 @@ static bool8 sub_8168328(void)
void sub_8168374(struct Sprite *sprite)
{
s16 prevX = sprite->pos1.x;
+
sprite->pos1.x += sprite->data[0];
if ((prevX <= sprite->data[1] && sprite->pos1.x >= sprite->data[1])
|| (prevX >= sprite->data[1] && sprite->pos1.x <= sprite->data[1]))