diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/battle_main.c | 15 | ||||
-rw-r--r-- | src/fldeff_softboiled.c | 2 | ||||
-rwxr-xr-x | src/item_use.c | 4 | ||||
-rwxr-xr-x | src/party_menu.c | 2786 |
4 files changed, 2790 insertions, 17 deletions
diff --git a/src/battle_main.c b/src/battle_main.c index de0becd2a..8bf722300 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -4,6 +4,7 @@ #include "battle_arena.h" #include "battle_controllers.h" #include "battle_interface.h" +#include "battle_main.h" #include "battle_message.h" #include "battle_pyramid.h" #include "battle_scripts.h" @@ -55,20 +56,6 @@ #include "constants/species.h" #include "constants/trainers.h" -struct UnknownPokemonStruct4 -{ - /*0x00*/ u16 species; - /*0x02*/ u16 heldItem; - /*0x04*/ u8 nickname[POKEMON_NAME_LENGTH + 1]; - /*0x0F*/ u8 level; - /*0x10*/ u16 hp; - /*0x12*/ u16 maxhp; - /*0x14*/ u32 status; - /*0x18*/ u32 personality; - /*0x1C*/ u8 gender; - /*0x1D*/ u8 language; -}; - extern struct MusicPlayerInfo gMPlayInfo_SE1; extern struct MusicPlayerInfo gMPlayInfo_SE2; extern u8 gUnknown_0203CF00[]; diff --git a/src/fldeff_softboiled.c b/src/fldeff_softboiled.c index 471a83c61..adec780b3 100644 --- a/src/fldeff_softboiled.c +++ b/src/fldeff_softboiled.c @@ -103,7 +103,7 @@ static void sub_8161784(u8 taskId) static void sub_81617B8(u8 taskId) { PlaySE(SE_SELECT); - sub_81B1B5C(&gText_CantBeUsedOnPkmn, 0); + sub_81B1B5C(gText_CantBeUsedOnPkmn, 0); schedule_bg_copy_tilemap_to_vram(2); gTasks[taskId].func = sub_8161784; } diff --git a/src/item_use.c b/src/item_use.c index 4ab9f6e23..e840e0859 100755 --- a/src/item_use.c +++ b/src/item_use.c @@ -38,7 +38,7 @@ #include "constants/vars.h" extern void(*gUnknown_0203A0F4)(u8 taskId); -extern void (*gUnknown_03006328)(u8, u16, TaskFunc); +extern void (*gUnknown_03006328)(u8, TaskFunc); extern void unknown_ItemMenu_Confirm(u8 taskId); extern void sub_81C5B14(u8 taskId); extern void ScriptUnfreezeEventObjects(void); @@ -52,7 +52,7 @@ extern u8 BattleFrontier_OutsideEast_EventScript_242CFC[]; extern int sub_80247BC(void); extern struct MapHeader* mapconnection_get_mapheader(struct MapConnection *connection); extern void SetUpItemUseCallback(u8 taskId); -extern void ItemUseCB_Medicine(u8, u16, TaskFunc); +extern void ItemUseCB_Medicine(u8, TaskFunc); extern void bag_menu_yes_no(u8, u8, const struct YesNoFuncTable*); extern void sub_81C5924(void); extern void sub_81C59BC(void); diff --git a/src/party_menu.c b/src/party_menu.c new file mode 100755 index 000000000..833950657 --- /dev/null +++ b/src/party_menu.c @@ -0,0 +1,2786 @@ +#include "global.h" +#include "battle.h" +#include "battle_controllers.h" +#include "battle_interface.h" +#include "bg.h" +#include "constants/battle.h" +#include "constants/items.h" +#include "constants/rgb.h" +#include "constants/songs.h" +#include "constants/species.h" +#include "contest.h" +#include "data2.h" +#include "decompress.h" +#include "event_data.h" +#include "fldeff_softboiled.h" +#include "gpu_regs.h" +#include "graphics.h" +#include "international_string_util.h" +#include "item.h" +#include "item_menu.h" +#include "item_use.h" +#include "main.h" +#include "mail.h" +#include "malloc.h" +#include "menu.h" +#include "menu_helpers.h" +#include "palette.h" +#include "party_menu.h" +#include "pokemon.h" +#include "pokemon_icon.h" +#include "rom_8011DC0.h" +#include "scanline_effect.h" +#include "sound.h" +#include "sprite.h" +#include "string_util.h" +#include "strings.h" +#include "task.h" +#include "text.h" +#include "text_window.h" +#include "window.h" + +struct Unk_Rodata1 { + void (*unk0)(u8, u8, u8, u8, u8, u8); + u8 unk4[24]; + u8 unk1C; + u8 unk1D; + u8 unk1E; + u8 unk1F; +}; + +struct Unk_203CEC4 { + TaskFunc unk0; + MainCallback unk4; + u32 unk8_0:1; + u32 unk8_1:3; + u32 unk8_2:7; + u32 unk9_0:7; + u32 unkA_0:14; + u8 unkC[3]; + u8 fillerF[9]; + u16 unk18[0xB0]; + u8 filler[0xA0]; + s16 unk218[16]; +}; + +struct Unk_203CEDC { + struct Unk_Rodata1 *unk0; + u8 *unk4; + u8 unk8; + u8 unk9; + u8 unkA; + u8 unkB; + u8 unkC; +}; + +struct Unk_203CEE4 { + u8 filler[0x800]; +}; + +// BELOW TO BE PUT IN EWRAM + +extern struct Unk_203CEC4 *gUnknown_0203CEC4; +extern struct Struct203CEC8 gUnknown_0203CEC8; +extern struct Unk_203CEDC *gUnknown_0203CEDC; +extern u8 *gUnknown_0203CEE0; +extern struct Unk_203CEE4 *gUnknown_0203CEE4; +extern u8 gUnknown_0203CEE8; +extern u8 gSelectedOrderFromParty[]; + +// ABOVE TO BE PUT IN EWRAM + +// BELOW TO BE CONVERTED TO C + +extern u32 gUnknown_08615048[]; // tutor compatibility table +extern struct BgTemplate gUnknown_086156B8[]; +extern struct Unk_Rodata1 gUnknown_086156C4[2]; +// extern struct Unk_Rodata1 gUnknown_086156E4; +extern u8 gUnknown_08615704[][6][8]; +extern u8 gUnknown_086157C4[]; +extern u8 gUnknown_086157E0[]; +extern const u8 gUnknown_086157FC[][3]; +extern struct WindowTemplate gUnknown_08615810[]; +extern struct WindowTemplate gUnknown_08615850[]; +extern struct WindowTemplate gUnknown_086158D0[]; +extern struct WindowTemplate gUnknown_08615890[]; +extern struct WindowTemplate gUnknown_08615908; +extern struct WindowTemplate gUnknown_08615910; +extern struct WindowTemplate gUnknown_08615918; +extern struct WindowTemplate gUnknown_08615920; +extern struct WindowTemplate gUnknown_08615928; +extern struct WindowTemplate gUnknown_08615930; +extern struct WindowTemplate gUnknown_08615938; +extern struct WindowTemplate gUnknown_08615940; +extern struct WindowTemplate gUnknown_08615948; +extern u8 gUnknown_08615988[]; +extern u8 gUnknown_086159CE[]; +extern u8 gUnknown_08615A14[]; +extern u8 gUnknown_08615A4A[]; +extern u8 gUnknown_08615A80[]; +extern u8 gUnknown_08615AB6[]; +extern u8 gUnknown_08615AB8[]; +extern u8 gUnknown_08615ABA[]; +extern u8 gUnknown_08615ABD[]; +extern u8 gUnknown_08615AC0[]; +extern u8 gUnknown_08615AC3[]; +extern u8 gUnknown_08615AC5[]; +extern u8 gUnknown_08615AC7[]; +extern u8 gUnknown_08615AC9[]; +extern u8 gUnknown_08615ACB[]; +extern u8 gUnknown_08615ACD[]; +extern u8 gUnknown_08615AD0[]; +extern u8 gUnknown_08615AD3[]; +extern u8 gUnknown_08615AD6[]; +extern u8 gUnknown_08615AD9[]; +extern u8 gUnknown_08615ADC[]; +extern u8 gUnknown_08615ADF[]; +extern u8 gUnknown_08615AE2[]; +extern u8 gUnknown_08615AE5[]; +extern u8 gUnknown_08615AE8[]; +extern u8 gUnknown_08615AEB[]; +extern u8 gUnknown_08615AEE[]; +extern u8 gUnknown_08615AF1[]; +extern const u8 *gUnknown_08615AF4[]; +extern const u8 *gUnknown_08615B60[]; + +// ABOVE TO BE CONVERTED TO C + +extern void (*gUnknown_03006328)(u8, TaskFunc); + +void reset_brm(void); +void c2_811EBD0(void); +bool8 sub_81B020C(void); +void sub_81B209C(void); +void sub_81B04BC(void); +bool8 sub_81B0550(void); +bool8 sub_81B05C8(void); +void sub_81B239C(u8); +void sub_81B0740(u8); +void sub_81B5D30(void); +void sub_81B6040(void); +void sub_81B6160(void); +bool8 party_menu_add_per_mon_objects(void); +bool8 sub_81B0DA0(void); +void sub_81B0F28(void); +void sub_81B2428(u8); +void display_pokemon_menu_message(u32); +void sub_81B04F8(u8); +void sub_81B06F4(void); +void sub_81B06C0(u8); +void sub_81B0CEC(u8); +void sub_81B2748(struct Unk_203CEDC *, u8); +void sub_81B2720(u8); +void sub_81B0B60(u8); +void sub_81B0B08(u8); +void sub_81B0A9C(u8); +void sub_81B0B98(u8); +void sub_81B0BC4(u8); +bool8 sub_81B0BFC(u8); +void sub_81B0948(u8); +void sub_81B0FCC(u8, u8); +void sub_81B2A70(struct Pokemon *, struct Unk_203CEDC *, u8); +void sub_81B2AC8(struct Pokemon *, struct Unk_203CEDC *, u8); +void sub_81B2B8C(struct Pokemon *, struct Unk_203CEDC *, u8); +void sub_81B2CD4(struct Pokemon *, struct Unk_203CEDC *, u8); +void sub_81B2D74(struct Pokemon *, struct Unk_203CEDC *, u8); +void sub_81B2E28(struct Pokemon *, struct Unk_203CEDC *); +void sub_81B2FA8(u8, struct Unk_203CEDC *, u8); +u8 sub_81B8830(void); +bool8 sub_81B85AC(struct Pokemon *); +bool8 sub_81B218C(u8); +void sub_81B0C94(u8, u16, u8); +u8 sub_81B22D8(struct Pokemon *, u16, u8); +void sub_81B2A3C(u8, const u8*, u8, u8*); +void sub_81B2B40(u8, struct Unk_203CEDC *); +void sub_81B2BF4(u8, u16, u8*, struct Unk_203CEDC *); +void sub_81B2D3C(u16, struct Unk_203CEDC *); +void sub_81B2DDC(u16, struct Unk_203CEDC *); +void sub_81B2E64(u16, u16, struct Unk_203CEDC *); +void party_menu_link_mon_icon_anim(u16, u32, struct Unk_203CEDC *, u8, u8); +void party_menu_link_mon_held_item_object(u16, u16, struct Unk_203CEDC *); +void party_menu_link_mon_pokeball_object(u16, struct Unk_203CEDC *); +void party_menu_link_mon_status_condition_object(u16, u8, struct Unk_203CEDC *); +void party_menu_held_item_object(struct Pokemon *, struct Unk_203CEDC *); +void party_menu_pokeball_object(struct Pokemon *, struct Unk_203CEDC *); +void party_menu_icon_anim(struct Pokemon *, struct Unk_203CEDC *, u8); +void party_menu_status_condition_object(struct Pokemon *, struct Unk_203CEDC *); +u8 sub_81B5F74(u8, u8); +void sub_81B120C(void); +u8 sub_81B5F34(u8, u8); +void sub_81B5B6C(u8, u8); +void sub_81B5F98(u8, u8); +u8 sub_81B10F8(u8, u8); +bool8 sub_81B118C(u8); +u8 sub_81B8F38(u8); +void c3_0811FAB4(u8); +void sub_81B9080(void); +void sub_81B4F88(void); +void sub_81B15D0(u8, s8*); +void sub_81B140C(u8, s8*); +u16 sub_81B1760(s8*); +s8* sub_81B13EC(void); +bool8 sub_81B15A4(u8*); +void sub_81B302C(u8*); +void sub_81B9140(void); +void sub_81B6794(u8); +void sub_81B7E4C(u8); +void sub_81B8474(u8); +void sub_81B7FAC(u8); +void sub_81B3938(u8); +void sub_81B21AC(u8, u8); +void sub_81B36FC(u8); +void sub_81B407C(u8); +void sub_81B2210(u8); +bool8 sub_81B1660(u8); +const u8* sub_81B88BC(void); +u8 sub_81B1B5C(const u8*, u8); +void sub_81B16D4(u8); +void sub_81B334C(void); +void sub_81B1708(u8); +bool8 sub_81B1BD4(void); +void sub_81B1C1C(u8); +void sub_81B8558(void); +void sub_81B17F8(s8*, s8); +void sub_81B1854(s8*, s8); +void sub_81B195C(s8*, s8); +s8 sub_81B1B00(s8, s8); +void sub_81B3300(const u8*); +void sub_81B1B8C(u8); +void sub_81B2CD4(struct Pokemon*, struct Unk_203CEDC*, u8); +void sub_81B2E28(struct Pokemon*, struct Unk_203CEDC*); +bool16 sub_81B2134(struct Pokemon*); +bool16 sub_81B2164(struct Pokemon*); +void sub_81B2248(u8); +void sub_81B227C(u8); +bool8 sub_81B2370(u16, u8); +u16 sub_81B2360(u8); +bool8 sub_81B314C(void); + +void sub_81B0038(u8 a, u8 b, u8 c, u8 d, u8 e, TaskFunc f, MainCallback g) +{ + u16 i; + + reset_brm(); + gUnknown_0203CEC4 = Alloc(sizeof(struct Unk_203CEC4)); + if (gUnknown_0203CEC4 == 0) + { + SetMainCallback2(g); + } + else + { + gUnknown_0203CEC8.unk8_0 = a; + gUnknown_0203CEC8.unk0 = g; + gUnknown_0203CEC8.unkB = c; + gUnknown_0203CEC4->unkA_0 = e; + gUnknown_0203CEC4->unk0 = f; + gUnknown_0203CEC4->unk4 = NULL; + gUnknown_0203CEC4->unk8_1 = 0; + gUnknown_0203CEC4->unk8_2 = 0xFF; + gUnknown_0203CEC4->unk9_0 = 0xFF; + + if (a == 4) + gUnknown_0203CEC4->unk8_0 = TRUE; + else + gUnknown_0203CEC4->unk8_0 = FALSE; + + if (b != 0xFF) + gUnknown_0203CEC8.unk8_1 = b; + + for (i = 0; i <= 15; i++) + gUnknown_0203CEC4->unk218[i] = 0; + for (i = 0; i < 3; i++) + gUnknown_0203CEC4->unkC[i] |= 0xFF; + + if (d == 0) + gUnknown_0203CEC8.unk9 = 0; + else if (gUnknown_0203CEC8.unk9 > 5 || GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_SPECIES) == SPECIES_NONE) + gUnknown_0203CEC8.unk9 = 0; // wut why is this else if? + + gTextFlags.autoScroll = 0; + CalculatePlayerPartyCount(); + SetMainCallback2(c2_811EBD0); + } +} + +void sub_81B01B0(void) +{ + RunTasks(); + AnimateSprites(); + BuildOamBuffer(); + do_scheduled_bg_tilemap_copies_to_vram(); + UpdatePaletteFade(); +} + +void sub_81B01CC(void) +{ + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); +} + +void c2_811EBD0(void) +{ + while (TRUE) + { + if (sub_81221EC() == TRUE || sub_81B020C() == TRUE || sub_81221AC() == TRUE) + break; + } +} + +bool8 sub_81B020C(void) +{ + switch (gMain.state) + { + case 0: + SetVBlankHBlankCallbacksToNull(); + ResetVramOamAndBgCntRegs(); + clear_scheduled_bg_copies_to_vram(); + gMain.state++; + break; + case 1: + ScanlineEffect_Stop(); + gMain.state++; + break; + case 2: + ResetPaletteFade(); + gPaletteFade.bufferTransferDisabled = TRUE; + gMain.state++; + break; + case 3: + ResetSpriteData(); + gMain.state++; + break; + case 4: + FreeAllSpritePalettes(); + gMain.state++; + break; + case 5: + if (!sub_81221AC()) + ResetTasks(); + gMain.state++; + break; + case 6: + sub_81B209C(); + gMain.state++; + break; + case 7: + if (!sub_81B0550()) + { + sub_81B04BC(); + return TRUE; + } + else + { + gUnknown_0203CEC4->unk218[0] = 0; + gMain.state++; + } + break; + case 8: + if (sub_81B05C8()) + gMain.state++; + break; + case 9: + sub_81B239C(gUnknown_0203CEC8.unk8_1); + gMain.state++; + break; + case 10: + sub_81B0740(gUnknown_0203CEC8.unk8_1); + gUnknown_0203CEC4->unk218[0] = 0; + gMain.state++; + break; + case 11: + sub_81B5D30(); + gMain.state++; + break; + case 12: + sub_81B6040(); + gMain.state++; + break; + case 13: + sub_81B6160(); + gMain.state++; + break; + case 14: + LoadMonIconPalettes(); + gMain.state++; + break; + case 15: + if (party_menu_add_per_mon_objects()) + { + gUnknown_0203CEC4->unk218[0] = 0; + gMain.state++; + } + break; + case 16: + if (sub_81B0DA0()) + { + gUnknown_0203CEC4->unk218[0] = 0; + gMain.state++; + } + break; + case 17: + sub_81B0F28(); + gMain.state++; + break; + case 18: + sub_81B2428(gUnknown_0203CEC4->unk8_0); + gMain.state++; + break; + case 19: + gMain.state++; + break; + case 20: + CreateTask(gUnknown_0203CEC4->unk0, 0); + display_pokemon_menu_message(gUnknown_0203CEC4->unkA_0); + gMain.state++; + break; + case 21: + BlendPalettes(0xFFFFFFFF, 16, 0); + gPaletteFade.bufferTransferDisabled = FALSE; + gMain.state++; + break; + case 22: + BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK); + gMain.state++; + break; + default: + SetVBlankCallback(sub_81B01CC); + SetMainCallback2(sub_81B01B0); + return TRUE; + } + return FALSE; +} + +void sub_81B04BC(void) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + CreateTask(sub_81B04F8, 0); + SetVBlankCallback(sub_81B01CC); + SetMainCallback2(sub_81B01B0); +} + +void sub_81B04F8(u8 taskId) +{ + if (!gPaletteFade.active) + { + SetMainCallback2(gUnknown_0203CEC8.unk0); + sub_81B06F4(); + DestroyTask(taskId); + } +} + +void reset_brm(void) +{ + gUnknown_0203CEC4 = NULL; + gUnknown_0203CEE4 = NULL; + gUnknown_0203CEDC = NULL; + gUnknown_0203CEE0 = NULL; +} + +bool8 sub_81B0550(void) +{ + gUnknown_0203CEE4 = Alloc(sizeof(struct Unk_203CEE4)); + if (gUnknown_0203CEE4 == NULL) + return FALSE; + memset(gUnknown_0203CEE4, 0, sizeof(struct Unk_203CEE4)); + ResetBgsAndClearDma3BusyFlags(0); + InitBgsFromTemplates(0, gUnknown_086156B8, 3); + SetBgTilemapBuffer(1, gUnknown_0203CEE4); + ResetAllBgsCoordinates(); + schedule_bg_copy_tilemap_to_vram(1); + SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP); + SetGpuReg(REG_OFFSET_BLDCNT, 0); + ShowBg(0); + ShowBg(1); + ShowBg(2); + return TRUE; +} + +bool8 sub_81B05C8(void) +{ + int sizeout; + + switch (gUnknown_0203CEC4->unk218[0]) + { + case 0: + gUnknown_0203CEE0 = malloc_and_decompress(gPartyMenuMisc_Gfx, &sizeout); + LoadBgTiles(1, gUnknown_0203CEE0, sizeout, 0); + gUnknown_0203CEC4->unk218[0]++; + break; + case 1: + if (!IsDma3ManagerBusyWithBgCopy()) + { + LZDecompressWram(gPartyMenuMisc_Tilemap, gUnknown_0203CEE4); + gUnknown_0203CEC4->unk218[0]++; + } + break; + case 2: + LoadCompressedPalette(gPartyMenuMisc_Pal, 0, 0x160); + CpuCopy16(gPlttBufferUnfaded, gUnknown_0203CEC4->unk18, 0x160); + gUnknown_0203CEC4->unk218[0]++; + break; + case 3: + sub_81B06C0(4); + gUnknown_0203CEC4->unk218[0]++; + break; + case 4: + sub_81B06C0(5); + gUnknown_0203CEC4->unk218[0]++; + break; + case 5: + sub_81B06C0(6); + gUnknown_0203CEC4->unk218[0]++; + break; + case 6: + sub_81B06C0(7); + gUnknown_0203CEC4->unk218[0]++; + break; + case 7: + sub_81B06C0(8); + gUnknown_0203CEC4->unk218[0]++; + break; + default: + return TRUE; + } + return FALSE; +} + +void sub_81B06C0(u8 offset) +{ + offset *= 16; + CpuCopy16(&gPlttBufferUnfaded[0x30], &gPlttBufferUnfaded[offset], 32); + CpuCopy16(&gPlttBufferUnfaded[0x30], &gPlttBufferFaded[offset], 32); +} + +void sub_81B06F4(void) +{ + if (gUnknown_0203CEC4) + Free(gUnknown_0203CEC4); + if (gUnknown_0203CEE4) + Free(gUnknown_0203CEE4); + if (gUnknown_0203CEE0) + Free(gUnknown_0203CEE0); + if (gUnknown_0203CEDC) + Free(gUnknown_0203CEDC); + FreeAllWindowBuffers(); +} + +void sub_81B0740(u8 a) +{ + u8 i; + + gUnknown_0203CEDC = Alloc(sizeof(struct Unk_203CEDC[6])); + + for (i = 0; i < 6; i++) + { + gUnknown_0203CEDC[i].unk0 = &gUnknown_086156C4[1]; + gUnknown_0203CEDC[i].unk4 = gUnknown_08615704[a][i]; + gUnknown_0203CEDC[i].unk8 = i; + gUnknown_0203CEDC[i].unk9 |= 0xFF; + gUnknown_0203CEDC[i].unkA |= 0xFF; + gUnknown_0203CEDC[i].unkB |= 0xFF; + gUnknown_0203CEDC[i].unkC |= 0xFF; + } + gUnknown_0203CEDC[0].unk0 = &gUnknown_086156C4[0]; + if (a == 3) + gUnknown_0203CEDC[3].unk0 = &gUnknown_086156C4[0]; + else if (a) + gUnknown_0203CEDC[1].unk0 = &gUnknown_086156C4[0]; +} + +void sub_81B07E0(u8 slot) +{ + if (gUnknown_0203CEC8.unk8_0 == 5 && slot > 2) + { + sub_81B0CEC(slot); + if (gUnknown_02022FF8[slot - 3].species == SPECIES_NONE) + sub_81B2748(&gUnknown_0203CEDC[slot], 0x40); + else + sub_81B2748(&gUnknown_0203CEDC[slot], 8); + CopyWindowToVram(gUnknown_0203CEDC[slot].unk8, 2); + PutWindowTilemap(gUnknown_0203CEDC[slot].unk8); + schedule_bg_copy_tilemap_to_vram(2); + } + else + { + if (GetMonData(&gPlayerParty[slot], MON_DATA_SPECIES) == SPECIES_NONE) + { + sub_81B2720(gUnknown_0203CEDC[slot].unk8); + sub_81B2748(&gUnknown_0203CEDC[slot], 0x40); + CopyWindowToVram(gUnknown_0203CEDC[slot].unk8, 2); + } + else + { + if (gUnknown_0203CEC8.unk8_0 == 7) + sub_81B0B60(slot); + else if (gUnknown_0203CEC8.unk8_0 == 2) + sub_81B0B08(slot); + else if (gUnknown_0203CEC8.unk8_0 == 4) + sub_81B0A9C(slot); + else if (gUnknown_0203CEC8.unk8_0 == 11) + sub_81B0B98(slot); + else if (gUnknown_0203CEC8.unk8_0 == 12) + sub_81B0BC4(slot); + else if (!sub_81B0BFC(slot)) + sub_81B0948(slot); + + if (gUnknown_0203CEC8.unk8_0 == 5) + sub_81B0FCC(slot, 0); + else if (gUnknown_0203CEC8.unk9 == slot) + sub_81B0FCC(slot, 1); + else + sub_81B0FCC(slot, 0); + } + PutWindowTilemap(gUnknown_0203CEDC[slot].unk8); + schedule_bg_copy_tilemap_to_vram(0); + } +} + +void sub_81B0948(u8 slot) +{ + if (GetMonData(&gPlayerParty[slot], MON_DATA_IS_EGG)) + { + gUnknown_0203CEDC[slot].unk0->unk0(gUnknown_0203CEDC[slot].unk8, 0, 0, 0, 0, 1); + sub_81B2A70(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], 0); + } + else + { + gUnknown_0203CEDC[slot].unk0->unk0(gUnknown_0203CEDC[slot].unk8, 0, 0, 0, 0, 0); + sub_81B2A70(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], 0); + sub_81B2AC8(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], 0); + sub_81B2B8C(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], 0); + sub_81B2CD4(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], 0); + sub_81B2D74(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], 0); + sub_81B2E28(&gPlayerParty[slot], &gUnknown_0203CEDC[slot]); + } +} + +void sub_81B0A10(u8 slot, u8 b) +{ + struct Pokemon *currentPokemon = &gPlayerParty[slot]; + + gUnknown_0203CEDC[slot].unk0->unk0(gUnknown_0203CEDC[slot].unk8, 0, 0, 0, 0, 1); + sub_81B2A70(currentPokemon, &gUnknown_0203CEDC[slot], 0); + if (!GetMonData(currentPokemon, MON_DATA_IS_EGG)) + { + sub_81B2AC8(currentPokemon, &gUnknown_0203CEDC[slot], 0); + sub_81B2B8C(currentPokemon, &gUnknown_0203CEDC[slot], 0); + } + sub_81B2FA8(b, &gUnknown_0203CEDC[slot], 0); +} + +void sub_81B0A9C(u8 slot) +{ + u8 i; + struct Pokemon *currentPokemon = &gPlayerParty[slot]; + u8 *ptr = gSelectedOrderFromParty; + + if (!sub_81B85AC(currentPokemon)) + { + sub_81B0A10(slot, 7); + return; + } + else + { + i = 0; + while (i < sub_81B8830()) + { + if (ptr[i] != 0 && (ptr[i] - 1) == slot) + { + sub_81B0A10(slot, i + 2); + return; + } + i++; + } + sub_81B0A10(slot, 1); + } +} + +void sub_81B0B08(u8 slot) +{ + switch (sub_80DAE0C(&gPlayerParty[slot])) + { + case 0: + case 3: + case 4: + sub_81B0A10(slot, 7); + break; + case 1: + case 2: + sub_81B0A10(slot, 6); + break; + } +} + +void sub_81B0B60(u8 slot) +{ + if (GetNumberOfRelearnableMoves(&gPlayerParty[slot]) == 0) + sub_81B0A10(slot, 9); + else + sub_81B0A10(slot, 8); +} + +void sub_81B0B98(u8 slot) +{ + if (sub_81B218C(slot) == TRUE) + sub_81B0A10(slot, 6); + else + sub_81B0A10(slot, 7); +} + +void sub_81B0BC4(u8 slot) +{ + if (GetMonData(&gPlayerParty[slot], MON_DATA_HELD_ITEM)) + sub_81B0A10(slot, 11); + else + sub_81B0A10(slot, 12); +} + +bool8 sub_81B0BFC(u8 slot) +{ + struct Pokemon *currentPokemon = &gPlayerParty[slot]; + u16 item = gSpecialVar_ItemId; + + if (gUnknown_0203CEC8.unkB == 12) + { + gSpecialVar_Result = FALSE; + sub_81B0C94(slot, 0, gSpecialVar_0x8005); + } + else + { + if (gUnknown_0203CEC8.unkB != 3) + return FALSE; + + switch (CheckIfItemIsTMHMOrEvolutionStone(item)) + { + default: + return FALSE; + case 1: + sub_81B0C94(slot, item, 0); + break; + case 2: + if (!GetMonData(currentPokemon, MON_DATA_IS_EGG) && GetEvolutionTargetSpecies(currentPokemon, 3, item) != SPECIES_NONE) + return FALSE; + sub_81B0A10(slot, 0); + break; + } + } + return TRUE; +} + +void sub_81B0C94(u8 slot, u16 item, u8 c) +{ + switch (sub_81B22D8(&gPlayerParty[slot], item, c)) + { + case 1: + case 3: + sub_81B0A10(slot, 9); + break; + case 2: + sub_81B0A10(slot, 10); + break; + default: + sub_81B0A10(slot, 8); + break; + } +} + +void sub_81B0CEC(u8 slot) +{ + struct Unk_203CEDC *structPtr = &gUnknown_0203CEDC[slot]; + u8 actualSlot = slot - 3; + + if (gUnknown_02022FF8[actualSlot].species == SPECIES_NONE) + { + sub_81B2720(structPtr->unk8); + } + else + { + structPtr->unk0->unk0(structPtr->unk8, 0, 0, 0, 0, 0); + StringCopy(gStringVar1, gUnknown_02022FF8[actualSlot].nickname); + StringGetEnd10(gStringVar1); + sub_81DB52C(gStringVar1); + sub_81B2A3C(structPtr->unk8, gStringVar1, 0, structPtr->unk0->unk4); + sub_81B2B40(gUnknown_02022FF8[actualSlot].level, structPtr); + sub_81B2BF4(gUnknown_02022FF8[actualSlot].gender, gUnknown_02022FF8[actualSlot].species, gUnknown_02022FF8[actualSlot].nickname, structPtr); + sub_81B2D3C(gUnknown_02022FF8[actualSlot].hp, structPtr); + sub_81B2DDC(gUnknown_02022FF8[actualSlot].maxhp, structPtr); + sub_81B2E64(gUnknown_02022FF8[actualSlot].hp, gUnknown_02022FF8[actualSlot].maxhp, structPtr); + } +} + +bool8 sub_81B0DA0(void) +{ + sub_81B07E0(gUnknown_0203CEC4->unk218[0]); + if (++gUnknown_0203CEC4->unk218[0] == 6) + return TRUE; + return FALSE; +} + +u8* sub_81B0DD4(u16 a) +{ + return &gUnknown_0203CEE0[a << 5]; +} + +void party_menu_add_per_mon_objects_internal(u8 slot) +{ + u8 actualSlot; + + if (gUnknown_0203CEC8.unk8_0 == 5 && slot > 2) + { + u8 status; + actualSlot = slot - 3; + + if (gUnknown_02022FF8[actualSlot].species != SPECIES_NONE) + { + party_menu_link_mon_icon_anim(gUnknown_02022FF8[actualSlot].species, gUnknown_02022FF8[actualSlot].personality, &gUnknown_0203CEDC[slot], 0, 0); + party_menu_link_mon_held_item_object(gUnknown_02022FF8[actualSlot].species, gUnknown_02022FF8[actualSlot].heldItem, &gUnknown_0203CEDC[slot]); + party_menu_link_mon_pokeball_object(gUnknown_02022FF8[actualSlot].species, &gUnknown_0203CEDC[slot]); + if (gUnknown_02022FF8[actualSlot].hp == 0) + status = AILMENT_FNT; + else + status = pokemon_ailments_get_primary(gUnknown_02022FF8[actualSlot].status); + party_menu_link_mon_status_condition_object(gUnknown_02022FF8[actualSlot].species, status, &gUnknown_0203CEDC[slot]); + } + } + else if (GetMonData(&gPlayerParty[slot], MON_DATA_SPECIES) != SPECIES_NONE) + { + party_menu_icon_anim(&gPlayerParty[slot], &gUnknown_0203CEDC[slot], slot); + party_menu_held_item_object(&gPlayerParty[slot], &gUnknown_0203CEDC[slot]); + party_menu_pokeball_object(&gPlayerParty[slot], &gUnknown_0203CEDC[slot]); + party_menu_status_condition_object(&gPlayerParty[slot], &gUnknown_0203CEDC[slot]); + } +} + +bool8 party_menu_add_per_mon_objects(void) +{ + party_menu_add_per_mon_objects_internal(gUnknown_0203CEC4->unk218[0]); + if (++gUnknown_0203CEC4->unk218[0] == 6) + return TRUE; + return FALSE; +} + +void sub_81B0F28(void) +{ + if (gUnknown_0203CEC8.unk8_0 == 5) + { + FillBgTilemapBufferRect(1, 14, 23, 17, 7, 2, 1); + } + else + { + if (gUnknown_0203CEC4->unk8_0 != FALSE) + { + gUnknown_0203CEC4->unk8_2 = sub_81B5F74(0xBF, 0x88); + sub_81B120C(); + gUnknown_0203CEC4->unk9_0 = sub_81B5F74(0xBF, 0x98); + } + else + { + gUnknown_0203CEC4->unk9_0 = sub_81B5F34(0xC6, 0x94); + } + sub_81B0FCC(gUnknown_0203CEC8.unk9, 1); + } +} + +void sub_81B0FCC(u8 slot, u8 b) +{ + u8 spriteId; + + switch (slot) + { + default: + if (GetMonData(&gPlayerParty[slot], MON_DATA_SPECIES) != SPECIES_NONE) + { + sub_81B2748(&gUnknown_0203CEDC[slot], sub_81B10F8(slot, b)); + sub_81B5B6C(gUnknown_0203CEDC[slot].unk9, b); + sub_81B5F98(gUnknown_0203CEDC[slot].unkB, b); + } + return; + case 6: + if (b == 0) + sub_8199C30(1, 23, 16, 7, 2, 1); + else + sub_8199C30(1, 23, 16, 7, 2, 2); + spriteId = gUnknown_0203CEC4->unk8_2; + break; + case 7: + if (!gUnknown_0203CEC4->unk8_0) + { + if (b == 0) + sub_8199C30(1, 23, 17, 7, 2, 1); + else + sub_8199C30(1, 23, 17, 7, 2, 2); + } + else if (b == 0) + { + sub_8199C30(1, 23, 18, 7, 2, 1); + } + else + { + sub_8199C30(1, 23, 18, 7, 2, 2); + } + spriteId = gUnknown_0203CEC4->unk9_0; + break; + } + sub_81B5F98(spriteId, b); + schedule_bg_copy_tilemap_to_vram(1); +} + +u8 sub_81B10F8(u8 slot, u8 b) +{ + u8 returnVar = 0; + if (b == 1) + returnVar = 1; + if (GetMonData(&gPlayerParty[slot], MON_DATA_HP) == 0) + returnVar |= 2; + if (sub_81B118C(slot) == TRUE) + returnVar |= 8; + if (gUnknown_0203CEC8.unkB == 9) + returnVar |= 16; + if (gUnknown_0203CEC8.unkB == 8) + { + if (slot == gUnknown_0203CEC8.unk9 || slot == gUnknown_0203CEC8.unkA) + returnVar |= 4; + } + if (gUnknown_0203CEC8.unkB == 10 && slot == gUnknown_0203CEC8.unk9 ) + returnVar |= 32; + + return returnVar; +} + +bool8 sub_81B118C(u8 slot) +{ + if (gUnknown_0203CEC8.unk8_1 == 2 && (slot == 1 || slot == 4 || slot == 5)) + return TRUE; + + if (slot < 3 && (gBattleTypeFlags & BATTLE_TYPE_ARENA) && gMain.inBattle && (gBattleStruct->arenaLostPlayerMons >> sub_81B8F38(slot) & 1)) + return TRUE; + + return FALSE; +} + +void sub_81B120C(void) +{ + CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_086157C4, 23, 16, 7, 2, 17); + CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_086157E0, 23, 18, 7, 2, 17); + schedule_bg_copy_tilemap_to_vram(1); +} + +bool8 sub_81B1250(void) +{ + if ((gBattleTypeFlags & (BATTLE_TYPE_DOUBLE | BATTLE_TYPE_TRAINER | BATTLE_TYPE_MULTI)) == (BATTLE_TYPE_DOUBLE | BATTLE_TYPE_TRAINER | BATTLE_TYPE_MULTI) && gMain.inBattle) + return TRUE; + return FALSE; +} + +void sub_81B1288(struct Pokemon *partySlot, struct Pokemon *pokemon) +{ + struct Pokemon *temp = Alloc(sizeof(struct Pokemon)); + + *temp = *partySlot; + *partySlot = *pokemon; + *pokemon = *temp; + + Free(temp); +} + +void sub_81B12C0(u8 taskId) +{ + BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK); + gTasks[taskId].func = c3_0811FAB4; +} + +void c3_0811FAB4(u8 taskId) +{ + if (!gPaletteFade.active) + { + if (gUnknown_0203CEC8.unk8_0 == 1) + sub_81B9080(); + + if (gUnknown_0203CEC4->unk4 != NULL) + SetMainCallback2(gUnknown_0203CEC4->unk4); + else + SetMainCallback2(gUnknown_0203CEC8.unk0); + + ResetSpriteData(); + sub_81B06F4(); + DestroyTask(taskId); + } +} + +u8 GetCursorSelectionMonId(void) +{ + return gUnknown_0203CEC8.unk9; +} + +u8 sub_81B1360(void) +{ + return gUnknown_0203CEC8.unk8_0; +} + +void sub_81B1370(u8 taskId) +{ + if (!gPaletteFade.active && sub_81221EC() != TRUE) + { + s8 *ptr = sub_81B13EC(); + + switch (sub_81B1760(ptr)) + { + case 1: + sub_81B140C(taskId, ptr); + break; + case 2: + sub_81B15D0(taskId, ptr); + break; + case 8: + if (gUnknown_0203CEC4->unk8_0) + { + PlaySE(SE_SELECT); + sub_81B4F88(); + } + } + } +} + +s8* sub_81B13EC(void) +{ + if (gUnknown_0203CEC8.unkB == 8 || gUnknown_0203CEC8.unkB == 10) + return &gUnknown_0203CEC8.unkA; + return &gUnknown_0203CEC8.unk9; +} + +void sub_81B140C(u8 taskId, s8 *ptr) +{ + if (*ptr == 6) + { + gUnknown_0203CEC8.unk4(taskId); + } + else + { + switch (gUnknown_0203CEC8.unkB - 3) + { + case 7: + if (sub_81B15A4((u8*)ptr)) + { + sub_81B302C(&gUnknown_0203CEC4->unkC[1]); + sub_81615A8(taskId); + } + break; + case 0: + if (sub_81B15A4((u8*)ptr)) + { + if (gUnknown_0203CEC8.unk8_0 == 1) + gUnknown_0203CEC4->unk4 = sub_81B9140; + + sub_81B302C(&gUnknown_0203CEC4->unkC[1]); + gUnknown_03006328(taskId, sub_81B6794); + } + break; + case 9: + if (sub_81B15A4((u8*)ptr)) + { + PlaySE(SE_SELECT); + sub_81B302C(&gUnknown_0203CEC4->unkC[1]); + sub_81B7E4C(taskId); + } + break; + case 4: + if (sub_81B15A4((u8*)ptr)) + { + PlaySE(SE_SELECT); + sub_81B302C(&gUnknown_0203CEC4->unkC[1]); + sub_81B8474(taskId); + } + break; + case 2: + case 3: + if (sub_81B15A4((u8*)ptr)) + { + PlaySE(SE_SELECT); + sub_81B302C(&gUnknown_0203CEC4->unkC[1]); + sub_81B7FAC(taskId); + } + break; + case 5: + PlaySE(SE_SELECT); + sub_81B3938(taskId); + break; + case 8: + PlaySE(SE_SELECT); + sub_81B12C0(taskId); + break; + case 10: + if (sub_81B15A4((u8*)ptr)) + { + sub_81B21AC(taskId, (u8)*ptr); + } + break; + default: + case 1: + case 6: + PlaySE(SE_SELECT); + sub_81B36FC(taskId); + break; + } + } +} + +bool8 sub_81B15A4(u8 *slotPtr) +{ + if (GetMonData(&gPlayerParty[*slotPtr], MON_DATA_IS_EGG) == TRUE) + { + PlaySE(SE_HAZURE); + return FALSE; + } + return TRUE; +} + +void sub_81B15D0(u8 taskId, s8 *ptr) +{ + switch (gUnknown_0203CEC8.unkB) + { + case 1: + PlaySE(SE_HAZURE); + break; + case 8: + case 10: + PlaySE(SE_SELECT); + sub_81B407C(taskId); + break; + case 13: + PlaySE(SE_SELECT); + sub_81B2210(taskId); + break; + default: + PlaySE(SE_SELECT); + if (sub_81B1660(taskId) != TRUE) + { + if (!sub_81221AC()) + gSpecialVar_0x8004 = 7; + gUnknown_0203CEE8 = 0; + *ptr = 7; + sub_81B12C0(taskId); + } + break; + } +} + +bool8 sub_81B1660(u8 taskId) +{ + const u8* stringPtr = NULL; + + if (gUnknown_0203CEC8.unk8_0 == 2) + stringPtr = gText_CancelParticipation; + else if (gUnknown_0203CEC8.unk8_0 == 4) + stringPtr = sub_81B88BC(); + + if (stringPtr == NULL) + return FALSE; + + sub_81B302C(&gUnknown_0203CEC4->unkC[1]); + StringExpandPlaceholders(gStringVar4, stringPtr); + sub_81B1B5C(gStringVar4, 1); + gTasks[taskId].func = sub_81B16D4; + return TRUE; +} + +void sub_81B16D4(u8 taskId) +{ + if (sub_81B1BD4() != TRUE) + { + sub_81B334C(); + gTasks[taskId].func = sub_81B1708; + } +} + +void sub_81B1708(u8 taskId) +{ + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case 0: + gUnknown_0203CEE8 = 0; + gUnknown_0203CEC8.unk9 = 7; + sub_81B8558(); + sub_81B12C0(taskId); + break; + case -1: + PlaySE(SE_SELECT); + case 1: + sub_81B1C1C(taskId); + break; + } +} + +u16 sub_81B1760(s8 *ptr) +{ + s8 r1; + + switch (gMain.newAndRepeatedKeys) + { + case DPAD_UP: + r1 = -1; + break; + case DPAD_DOWN: + r1 = 1; + break; + case DPAD_LEFT: + r1 = -2; + break; + case DPAD_RIGHT: + r1 = 2; + break; + default: + switch (sub_812210C()) + { + case 1: + r1 = -1; + break; + case 2: + r1 = 1; + break; + default: + r1 = 0; + break; + } + } + + if (gMain.newKeys & START_BUTTON) + return 8; + + if (r1) + { + sub_81B17F8(ptr, r1); + return 0; + } + + if ((gMain.newKeys & A_BUTTON) && *ptr == 7) + return 2; + + return gMain.newKeys & (A_BUTTON | B_BUTTON); +} + +#ifdef NONMATCHING +void sub_81B17F8(s8 *ptr, s8 b) +{ + s8 slot = *ptr; + + if (!gUnknown_0203CEC8.unk8_1) + sub_81B1854(ptr, b); + else + sub_81B195C(ptr, b); + + if (*ptr != slot) + { + PlaySE(SE_SELECT); + sub_81B0FCC(slot, 0); + sub_81B0FCC(*ptr, 1); + } +} +#else +NAKED +void sub_81B17F8(s8 *ptr, s8 b) +{ + asm_unified("push {r4,r5,lr}\n\ + adds r5, r0, 0\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + ldrb r4, [r5]\n\ + ldr r0, =gUnknown_0203CEC8\n\ + ldrb r0, [r0, 0x8]\n\ + lsls r0, 26\n\ + lsrs r0, 30\n\ + cmp r0, 0\n\ + bne _081B1820\n\ + lsls r1, 24\n\ + asrs r1, 24\n\ + adds r0, r5, 0\n\ + bl sub_81B1854\n\ + b _081B182A\n\ + .pool\n\ +_081B1820:\n\ + lsls r1, 24\n\ + asrs r1, 24\n\ + adds r0, r5, 0\n\ + bl sub_81B195C\n\ +_081B182A:\n\ + movs r1, 0\n\ + ldrsb r1, [r5, r1]\n\ + lsls r4, 24\n\ + asrs r0, r4, 24\n\ + cmp r1, r0\n\ + beq _081B184C\n\ + movs r0, 0x5\n\ + bl PlaySE\n\ + lsrs r0, r4, 24\n\ + movs r1, 0\n\ + bl sub_81B0FCC\n\ + ldrb r0, [r5]\n\ + movs r1, 0x1\n\ + bl sub_81B0FCC\n\ +_081B184C:\n\ + pop {r4,r5}\n\ + pop {r0}\n\ + bx r0\n"); +} +#endif + +#ifdef NONMATCHING +void sub_81B1854(s8 *ptr, s8 b) +{ + u8 r0r2; + + switch (b) + { + case -1: + r0r2 = *ptr; + if (*ptr == 0) + { + *ptr = 7; + } + else if (*ptr == 6) + { + *ptr = gPlayerPartyCount - 1; + } + else if (*ptr == 7) + { + if (gUnknown_0203CEC4->unk8_0) + *ptr = 6; + else + *ptr = gPlayerPartyCount - 1; + } + else + { + *ptr = r0r2 - 1; + } + break; + case 1: + r0r2 = *ptr; + if (*ptr != 7) + { + if ((u32)*ptr == gPlayerPartyCount - 1) + { + if (gUnknown_0203CEC4->unk8_0) + *ptr = 6; + else + *ptr = 7; + } + else + { + *ptr = r0r2 + 1; + } + } + else + { + *ptr = 0; + } + break; + case 2: + if (gPlayerPartyCount != 1 && *ptr == 0) + { + if (gUnknown_0203CEC4->unk8_1 == 0) + *ptr = 1; + else + *ptr = gUnknown_0203CEC4->unk8_1; + } + break; + case -2: + if (*ptr != 0 && *ptr != 6 && *ptr != 7) + { + gUnknown_0203CEC4->unk8_1 = *ptr; + *ptr = 0; + } + break; + } +} +#else +NAKED +void sub_81B1854(s8 *ptr, s8 b) +{ + asm_unified("push {r4,lr}\n\ + adds r4, r0, 0\n\ + lsls r1, 24\n\ + asrs r1, 24\n\ + movs r0, 0x1\n\ + negs r0, r0\n\ + cmp r1, r0\n\ + beq _081B187A\n\ + cmp r1, r0\n\ + bgt _081B1870\n\ + subs r0, 0x1\n\ + cmp r1, r0\n\ + beq _081B1924\n\ + b _081B1952\n\ +_081B1870:\n\ + cmp r1, 0x1\n\ + beq _081B18C0\n\ + cmp r1, 0x2\n\ + beq _081B18F8\n\ + b _081B1952\n\ +_081B187A:\n\ + ldrb r0, [r4]\n\ + movs r1, 0\n\ + ldrsb r1, [r4, r1]\n\ + cmp r1, 0\n\ + bne _081B1888\n\ + movs r0, 0x7\n\ + b _081B1950\n\ +_081B1888:\n\ + cmp r1, 0x6\n\ + bne _081B1898\n\ + ldr r0, =gPlayerPartyCount\n\ + ldrb r0, [r0]\n\ + subs r0, 0x1\n\ + b _081B1950\n\ + .pool\n\ +_081B1898:\n\ + cmp r1, 0x7\n\ + bne _081B18BC\n\ + ldr r0, =gUnknown_0203CEC4\n\ + ldr r0, [r0]\n\ + ldrb r0, [r0, 0x8]\n\ + lsls r0, 31\n\ + cmp r0, 0\n\ + beq _081B18B0\n\ + movs r0, 0x6\n\ + b _081B1950\n\ + .pool\n\ +_081B18B0:\n\ + ldr r0, =gPlayerPartyCount\n\ + ldrb r0, [r0]\n\ + subs r0, 0x1\n\ + b _081B1950\n\ + .pool\n\ +_081B18BC:\n\ + subs r0, 0x1\n\ + b _081B1950\n\ +_081B18C0:\n\ + ldrb r2, [r4]\n\ + movs r0, 0\n\ + ldrsb r0, [r4, r0]\n\ + cmp r0, 0x7\n\ + beq _081B194E\n\ + movs r1, 0\n\ + ldrsb r1, [r4, r1]\n\ + ldr r0, =gPlayerPartyCount\n\ + ldrb r0, [r0]\n\ + subs r0, 0x1\n\ + cmp r1, r0\n\ + bne _081B18F4\n\ + ldr r0, =gUnknown_0203CEC4\n\ + ldr r0, [r0]\n\ + ldrb r0, [r0, 0x8]\n\ + lsls r0, 31\n\ + cmp r0, 0\n\ + beq _081B18F0\n\ + movs r0, 0x6\n\ + b _081B1950\n\ + .pool\n\ +_081B18F0:\n\ + movs r0, 0x7\n\ + b _081B1950\n\ +_081B18F4:\n\ + adds r0, r2, 0x1\n\ + b _081B1950\n\ +_081B18F8:\n\ + ldr r0, =gPlayerPartyCount\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x1\n\ + beq _081B1952\n\ + movs r0, 0\n\ + ldrsb r0, [r4, r0]\n\ + cmp r0, 0\n\ + bne _081B1952\n\ + ldr r0, =gUnknown_0203CEC4\n\ + ldr r0, [r0]\n\ + ldrb r0, [r0, 0x8]\n\ + lsls r0, 28\n\ + lsrs r0, 29\n\ + cmp r0, 0\n\ + bne _081B1950\n\ + movs r0, 0x1\n\ + b _081B1950\n\ + .pool\n\ +_081B1924:\n\ + movs r0, 0\n\ + ldrsb r0, [r4, r0]\n\ + cmp r0, 0\n\ + beq _081B1952\n\ + cmp r0, 0x6\n\ + beq _081B1952\n\ + cmp r0, 0x7\n\ + beq _081B1952\n\ + ldr r0, =gUnknown_0203CEC4\n\ + ldr r3, [r0]\n\ + movs r1, 0\n\ + ldrsb r1, [r4, r1]\n\ + movs r0, 0x7\n\ + ands r1, r0\n\ + lsls r1, 1\n\ + ldrb r2, [r3, 0x8]\n\ + movs r0, 0xF\n\ + negs r0, r0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strb r0, [r3, 0x8]\n\ +_081B194E:\n\ + movs r0, 0\n\ +_081B1950:\n\ + strb r0, [r4]\n\ +_081B1952:\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n"); +} +#endif + +#ifdef NONMATCHING +void sub_81B195C(s8 *ptr, s8 b) +{ + u8 unk; + s8 unk2 = b; + u8 unk3; + + switch (b) + { + case -1: + unk = *ptr; + if (*ptr == 0) + { + *ptr = 7; + } + else if (*ptr == 6) + { + *ptr = gPlayerPartyCount - 1; + } + else if (*ptr == 7) + { + if (gUnknown_0203CEC4->unk8_0) + { + *ptr = 6; + } + else + { + *ptr = unk - 1; + unk2 = sub_81B1B00(*ptr, unk2); + if (unk2 != -1) + *ptr = unk2; + } + } + else + { + unk2 = sub_81B1B00(*ptr, unk2); + if (unk2 != -1) + *ptr = unk2; + } + break; + case 1: + if (*ptr == 6) + { + *ptr = 7; + } + else if (*ptr == 7) + { + *ptr = 0; + } + else + { + unk2 = sub_81B1B00(*ptr, 1); + if (unk2 == -1) + { + if (gUnknown_0203CEC4->unk8_0) + *ptr = 6; + else + *ptr = 7; + } + else + { + *ptr = unk2; + } + } + break; + case 2: + if (*ptr == 0) + { + if (gUnknown_0203CEC4->unk8_1 == 3) + { + if (GetMonData(&gPlayerParty[3], MON_DATA_SPECIES) != SPECIES_NONE) + *ptr = 3; + } + else if (GetMonData(&gPlayerParty[2], MON_DATA_SPECIES) != SPECIES_NONE) + { + *ptr = 2; + } + } + else if (*ptr == 1) + { + if (gUnknown_0203CEC4->unk8_1 == 5) + { + if (GetMonData(&gPlayerParty[5], MON_DATA_SPECIES) != SPECIES_NONE) + *ptr = 5; + } + else if (GetMonData(&gPlayerParty[4], MON_DATA_SPECIES) != SPECIES_NONE) + { + *ptr = 4; + } + } + break; + case -2: + unk3 = *ptr - 2; + if (unk3 <= 1) + { + gUnknown_0203CEC4->unk8_1 = *ptr; + *ptr = 0; + } + else + { + unk3 = *ptr - 4; + if (unk3 <= 1) + { + gUnknown_0203CEC4->unk8_1 = *ptr; + *ptr = 1; + } + } + break; + } +} +#else +NAKED +void sub_81B195C(s8 *ptr, s8 b) +{ + asm_unified("push {r4-r6,lr}\n\ + adds r4, r0, 0\n\ + lsls r1, 24\n\ + lsrs r2, r1, 24\n\ + asrs r5, r1, 24\n\ + movs r6, 0x1\n\ + negs r6, r6\n\ + cmp r5, r6\n\ + beq _081B1988\n\ + cmp r5, r6\n\ + bgt _081B197E\n\ + movs r0, 0x2\n\ + negs r0, r0\n\ + cmp r5, r0\n\ + bne _081B197C\n\ + b _081B1A9C\n\ +_081B197C:\n\ + b _081B1AF4\n\ +_081B197E:\n\ + cmp r5, 0x1\n\ + beq _081B19E4\n\ + cmp r5, 0x2\n\ + beq _081B1A24\n\ + b _081B1AF4\n\ +_081B1988:\n\ + ldrb r1, [r4]\n\ + movs r0, 0\n\ + ldrsb r0, [r4, r0]\n\ + cmp r0, 0\n\ + bne _081B1996\n\ + movs r0, 0x7\n\ + b _081B1AF2\n\ +_081B1996:\n\ + cmp r0, 0x6\n\ + bne _081B19A8\n\ + ldr r0, =gPlayerPartyCount\n\ + ldrb r0, [r0]\n\ + subs r0, 0x1\n\ + b _081B1AF2\n\ + .pool\n\ +_081B19A8:\n\ + cmp r0, 0x7\n\ + bne _081B19C4\n\ + ldr r0, =gUnknown_0203CEC4\n\ + ldr r0, [r0]\n\ + ldrb r0, [r0, 0x8]\n\ + lsls r0, 31\n\ + cmp r0, 0\n\ + beq _081B19C0\n\ + movs r0, 0x6\n\ + b _081B1AF2\n\ + .pool\n\ +_081B19C0:\n\ + subs r0, r1, 0x1\n\ + strb r0, [r4]\n\ +_081B19C4:\n\ + movs r0, 0\n\ + ldrsb r0, [r4, r0]\n\ + lsls r1, r2, 24\n\ + asrs r1, 24\n\ + bl sub_81B1B00\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + asrs r0, 24\n\ + movs r1, 0x1\n\ + negs r1, r1\n\ + cmp r0, r1\n\ + bne _081B19E0\n\ + b _081B1AF4\n\ +_081B19E0:\n\ + strb r2, [r4]\n\ + b _081B1AF4\n\ +_081B19E4:\n\ + movs r0, 0\n\ + ldrsb r0, [r4, r0]\n\ + cmp r0, 0x6\n\ + bne _081B19F0\n\ + movs r0, 0x7\n\ + b _081B1AF2\n\ +_081B19F0:\n\ + cmp r0, 0x7\n\ + bne _081B19F8\n\ + movs r0, 0\n\ + b _081B1AF2\n\ +_081B19F8:\n\ + movs r0, 0\n\ + ldrsb r0, [r4, r0]\n\ + movs r1, 0x1\n\ + bl sub_81B1B00\n\ + lsls r0, 24\n\ + lsrs r2, r0, 24\n\ + asrs r0, 24\n\ + cmp r0, r6\n\ + bne _081B19E0\n\ + ldr r0, =gUnknown_0203CEC4\n\ + ldr r0, [r0]\n\ + ldrb r0, [r0, 0x8]\n\ + lsls r0, 31\n\ + cmp r0, 0\n\ + beq _081B1A20\n\ + movs r0, 0x6\n\ + b _081B1AF2\n\ + .pool\n\ +_081B1A20:\n\ + movs r0, 0x7\n\ + b _081B1AF2\n\ +_081B1A24:\n\ + movs r0, 0\n\ + ldrsb r0, [r4, r0]\n\ + cmp r0, 0\n\ + bne _081B1A5C\n\ + ldr r0, =gUnknown_0203CEC4\n\ + ldr r0, [r0]\n\ + ldrb r0, [r0, 0x8]\n\ + lsls r0, 28\n\ + lsrs r6, r0, 29\n\ + cmp r6, 0x3\n\ + bne _081B1A54\n\ + ldr r0, =gPlayerParty + 300\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _081B1AF4\n\ + strb r6, [r4]\n\ + b _081B1AF4\n\ + .pool\n\ +_081B1A54:\n\ + ldr r0, =gPlayerParty + 200\n\ + b _081B1A70\n\ + .pool\n\ +_081B1A5C:\n\ + cmp r0, 0x1\n\ + bne _081B1AF4\n\ + ldr r0, =gUnknown_0203CEC4\n\ + ldr r0, [r0]\n\ + ldrb r0, [r0, 0x8]\n\ + lsls r0, 28\n\ + lsrs r5, r0, 29\n\ + cmp r5, 0x5\n\ + bne _081B1A88\n\ + ldr r0, =gPlayerParty + 500\n\ +_081B1A70:\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _081B1AF4\n\ + strb r5, [r4]\n\ + b _081B1AF4\n\ + .pool\n\ +_081B1A88:\n\ + ldr r0, =gPlayerParty + 400\n\ + movs r1, 0xB\n\ + bl GetMonData\n\ + cmp r0, 0\n\ + beq _081B1AF4\n\ + movs r0, 0x4\n\ + b _081B1AF2\n\ + .pool\n\ +_081B1A9C:\n\ + ldrb r1, [r4]\n\ + subs r0, r1, 0x2\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bhi _081B1ACC\n\ + ldr r0, =gUnknown_0203CEC4\n\ + ldr r3, [r0]\n\ + movs r1, 0\n\ + ldrsb r1, [r4, r1]\n\ + movs r0, 0x7\n\ + ands r1, r0\n\ + lsls r1, 1\n\ + ldrb r2, [r3, 0x8]\n\ + movs r0, 0xF\n\ + negs r0, r0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strb r0, [r3, 0x8]\n\ + movs r0, 0\n\ + b _081B1AF2\n\ + .pool\n\ +_081B1ACC:\n\ + subs r0, r1, 0x4\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + cmp r0, 0x1\n\ + bhi _081B1AF4\n\ + ldr r0, =gUnknown_0203CEC4\n\ + ldr r3, [r0]\n\ + movs r1, 0\n\ + ldrsb r1, [r4, r1]\n\ + movs r0, 0x7\n\ + ands r1, r0\n\ + lsls r1, 1\n\ + ldrb r2, [r3, 0x8]\n\ + movs r0, 0xF\n\ + negs r0, r0\n\ + ands r0, r2\n\ + orrs r0, r1\n\ + strb r0, [r3, 0x8]\n\ + movs r0, 0x1\n\ +_081B1AF2:\n\ + strb r0, [r4]\n\ +_081B1AF4:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n"); +} +#endif + +s8 sub_81B1B00(s8 a, s8 b) +{ + while (TRUE) + { + a += b; + if ((u8)a >= 6) + return -1; + if (GetMonData(&gPlayerParty[a], MON_DATA_SPECIES) != SPECIES_NONE) + return a; + } +} + +u8* GetMonNickname(struct Pokemon *mon, u8 *dest) +{ + GetMonData(mon, MON_DATA_NICKNAME, dest); + return StringGetEnd10(dest); +} + +u8 sub_81B1B5C(const u8* str, u8 b) +{ + u8 taskId; + + sub_81B3300(str); + taskId = CreateTask(sub_81B1B8C, 1); + gTasks[taskId].data[0] = b; + return taskId; +} + +void sub_81B1B8C(u8 taskId) +{ + if (RunTextPrintersRetIsActive(6) != TRUE) + { + if (gTasks[taskId].data[0] == 0) + { + sub_8198070(6, 0); + ClearWindowTilemap(6); + } + DestroyTask(taskId); + } +} + +bool8 sub_81B1BD4(void) +{ + return FuncIsActiveTask(sub_81B1B8C); +} + +void sub_81B1BE8(u8 taskId) +{ + if (sub_81221EC() != TRUE) + { + display_pokemon_menu_message(0); + gTasks[taskId].func = sub_81B1370; + } +} + +void sub_81B1C1C(u8 taskId) +{ + if (sub_81B1BD4() != TRUE) + { + sub_8198070(6, 0); + ClearWindowTilemap(6); + if (sub_81221AC() == TRUE) + { + gTasks[taskId].func = sub_81B1BE8; + } + else + { + display_pokemon_menu_message(0); + gTasks[taskId].func = sub_81B1370; + } + } +} + +void sub_81B1C84(struct Pokemon *mon, u16 item, u8 c) +{ + GetMonNickname(mon, gStringVar1); + CopyItemName(item, gStringVar2); + StringExpandPlaceholders(gStringVar4, gText_PkmnWasGivenItem); + sub_81B1B5C(gStringVar4, c); + schedule_bg_copy_tilemap_to_vram(2); +} + +void sub_81B1CD0(struct Pokemon *mon, u16 item, u8 c) +{ + GetMonNickname(mon, gStringVar1); + CopyItemName(item, gStringVar2); + StringExpandPlaceholders(gStringVar4, gText_RecievedItemFromPkmn); + sub_81B1B5C(gStringVar4, c); + schedule_bg_copy_tilemap_to_vram(2); +} + +void sub_81B1D1C(struct Pokemon *mon, u16 item, u8 c) +{ + GetMonNickname(mon, gStringVar1); + CopyItemName(item, gStringVar2); + StringExpandPlaceholders(gStringVar4, gText_SwitchPkmnItem); + sub_81B1B5C(gStringVar4, c); + schedule_bg_copy_tilemap_to_vram(2); +} + +void sub_81B1D68(u16 item, u16 item2, u8 c) +{ + CopyItemName(item, gStringVar1); + CopyItemName(item2, gStringVar2); + StringExpandPlaceholders(gStringVar4, gText_SwitchedPkmnItem); + sub_81B1B5C(gStringVar4, c); + schedule_bg_copy_tilemap_to_vram(2); +} + +void sub_81B1DB8(struct Pokemon *mon, u16 item) +{ + u8 itemBytes[2]; + + if (ItemIsMail(item) == TRUE) + { + if (GiveMailToMon(mon, item) == 0xFF) + return; + } + itemBytes[0] = item; + itemBytes[1] = item >> 8; + SetMonData(mon, MON_DATA_HELD_ITEM, itemBytes); +} + +u8 sub_81B1E00(struct Pokemon* mon) +{ + u16 item = GetMonData(mon, MON_DATA_HELD_ITEM); + + if (item == ITEM_NONE) + return 0; + if (AddBagItem(item, 1) == FALSE) + return 1; + + item = ITEM_NONE; + SetMonData(mon, MON_DATA_HELD_ITEM, &item); + return 2; +} + +void pokemon_item_not_removed(void) +{ + StringExpandPlaceholders(gStringVar4, gText_BagFullCouldNotRemoveItem); +} + +void sub_81B1E60(u8 taskId) +{ + s16 *data = gTasks[taskId].data; + + data[0] += data[2]; + data[3]--; + SetMonData(&gPlayerParty[data[4]], MON_DATA_HP, &data[0]); + sub_81B2CD4(&gPlayerParty[data[4]], &gUnknown_0203CEDC[data[4]], 1); + sub_81B2E28(&gPlayerParty[data[4]], &gUnknown_0203CEDC[data[4]]); + if (data[3] == 0 || data[0] == 0 || data[0] == data[1]) + { + if (data[0] > data[5]) + ConvertIntToDecimalStringN(gStringVar2, data[0] - data[5], 0, 3); + SwitchTaskToFollowupFunc(taskId); + } +} + +void sub_81B1F18(u8 taskId, u8 slot, s8 c, s16 HPSomething, TaskFunc func) +{ + struct Pokemon *mon = &gPlayerParty[slot]; + s16 *data = gTasks[taskId].data; + + data[0] = GetMonData(mon, MON_DATA_HP); + data[1] = GetMonData(mon, MON_DATA_MAX_HP); + data[2] = c; + data[3] = HPSomething; + data[4] = slot; + data[5] = data[0]; + SetTaskFuncWithFollowupFunc(taskId, sub_81B1E60, func); +} + +void sub_81B1FA8(u8 taskId, u8 b, u32 hp) +{ + s16 *data = gTasks[taskId].data; + + switch (b) // only case 0 is used + { + case 0: + data[0] = hp; + data[5] = hp; + break; + case 1: + data[1] = hp; + break; + case 2: + data[2] = hp; + break; + case 3: + data[3] = hp; + break; + case 4: + data[4] = hp; + break; + case 5: + SetTaskFuncWithFollowupFunc(taskId, sub_81B1E60, (TaskFunc)hp); // >casting hp as a taskfunc + break; + } +} + +u8 pokemon_ailments_get_primary(u32 status) +{ + if (status & STATUS1_PSN_ANY) + return AILMENT_PSN; + if (status & STATUS1_PARALYSIS) + return AILMENT_PRZ; + if (status & STATUS1_SLEEP) + return AILMENT_SLP; + if (status & STATUS1_FREEZE) + return AILMENT_FRZ; + if (status & STATUS1_BURN) + return AILMENT_BRN; + return AILMENT_NONE; +} + +u8 sub_81B205C(struct Pokemon *mon) +{ + u8 ailment; + + if (GetMonData(mon, MON_DATA_HP) == 0) + return AILMENT_FNT; + ailment = pokemon_ailments_get_primary(GetMonData(mon, MON_DATA_STATUS)); + if (ailment != AILMENT_NONE) + return ailment; + if (CheckPartyPokerus(mon, 0)) + return AILMENT_PKRS; + return AILMENT_NONE; +} + +void sub_81B209C(void) +{ + u16 *ptr; + + if (gUnknown_0203CEC8.unk8_0 == 11) + { + u8 i; + + ptr = &gUnknown_0203CEC8.unkE; + gUnknown_0203CEC8.unkE = 0; + if (gSpecialVar_0x8005 == 0) + { + for (i = 0; i < gPlayerPartyCount; i++) + *ptr += sub_81B2134(&gPlayerParty[i]) << i; + } + else + { + for (i = 0; i < gPlayerPartyCount; i++) + *ptr += sub_81B2164(&gPlayerParty[i]) << i; + } + } +} + +bool16 sub_81B2134(struct Pokemon *mon) +{ + if (GetMonData(mon, MON_DATA_IS_EGG) != TRUE && sub_802C908(GetMonData(mon, MON_DATA_SPECIES)) != FALSE) + return TRUE; + return FALSE; +} + +// Dodrio Berry Picking select? + +bool16 sub_81B2164(struct Pokemon *mon) +{ + if (GetMonData(mon, MON_DATA_IS_EGG) != TRUE && GetMonData(mon, MON_DATA_SPECIES) == SPECIES_DODRIO) + return TRUE; + return FALSE; +} + +bool8 sub_81B218C(u8 slot) +{ + if (!((gUnknown_0203CEC8.unkE >> slot) & 1)) + return FALSE; + return TRUE; +} + +void sub_81B21AC(u8 taskId, u8 slot) +{ + if (sub_81B218C(slot) == TRUE) + { + PlaySE(SE_SELECT); + gSpecialVar_0x8004 = slot; + sub_81B12C0(taskId); + } + else + { + PlaySE(SE_HAZURE); + sub_81B1B5C(gText_PkmnCantParticipate, 0); + schedule_bg_copy_tilemap_to_vram(2); + gTasks[taskId].func = sub_81B1C1C; + } +} + +void sub_81B2210(u8 taskId) +{ + sub_81B1B5C(gText_CancelParticipation, 1); + schedule_bg_copy_tilemap_to_vram(2); + gTasks[taskId].func = sub_81B2248; +} + +void sub_81B2248(u8 taskId) +{ + if (sub_81B1BD4() != TRUE) + { + sub_81B334C(); + gTasks[taskId].func = sub_81B227C; + } +} + +void sub_81B227C(u8 taskId) +{ + switch (Menu_ProcessInputNoWrapClearOnChoose()) + { + case 0: + gSpecialVar_0x8004 = 7; + sub_81B12C0(taskId); + break; + case -1: + PlaySE(SE_SELECT); + case 1: + gTasks[taskId].func = sub_81B1C1C; + break; + } +} + +u8 sub_81B22D8(struct Pokemon *mon, u16 item, u8 c) +{ + u16 move; + + if (GetMonData(mon, MON_DATA_IS_EGG) != FALSE) + return 3; + if (item >= ITEM_TM01_FOCUS_PUNCH) + { + if (CanMonLearnTMHM(mon, item - 33) != FALSE) + move = ItemIdToBattleMoveId(item); + else + return 1; + do {} while (0); // :morphon: + } + else if (sub_81B2370(GetMonData(mon, MON_DATA_SPECIES), c) == FALSE) + { + return 1; + } + else + { + move = sub_81B2360(c); + } + + if (pokemon_has_move(mon, move) == TRUE) + return 2; + return 0; +} + +u16 sub_81B2360(u8 tutor) +{ + return gUnknown_0861500C[tutor]; +} + +bool8 sub_81B2370(u16 species, u8 tutor) +{ + if (gUnknown_08615048[species] & (1 << tutor)) + return TRUE; + return FALSE; +} + +void sub_81B239C(u8 a) +{ + u8 i; + + switch (a) + { + case 0: + InitWindows(gUnknown_08615810); + break; + case 1: + InitWindows(gUnknown_08615850); + break; + case 2: + InitWindows(gUnknown_08615890); + break; + default: + InitWindows(gUnknown_086158D0); + break; + } + DeactivateAllTextPrinters(); + for (i = 0; i < 6; i++) + FillWindowPixelBuffer(i, 0); + LoadUserWindowBorderGfx(0, 0x4F, 0xD0); + LoadPalette(GetOverworldTextboxPalettePtr(), 0xE0, 0x20); + LoadPalette(gUnknown_0860F074, 0xF0, 0x20); +} + +void sub_81B2428(bool8 a) +{ + u8 firstWindowId; + u8 windowId; + u8 offset; + u8 mainOffset; + + if (gUnknown_0203CEC8.unk8_0 != 5) + { + if (a == TRUE) + { + firstWindowId = AddWindow(&gUnknown_08615918); + FillWindowPixelBuffer(firstWindowId, 0); + mainOffset = GetStringCenterAlignXOffset(0, gMenuText_Confirm, 48); + AddTextPrinterParameterized4(firstWindowId, 0, mainOffset, 1, 0, 0, gUnknown_086157FC[0], -1, gMenuText_Confirm); + PutWindowTilemap(firstWindowId); + CopyWindowToVram(firstWindowId, 2); + windowId = AddWindow(&gUnknown_08615910); + offset = 0; + } + else + { + windowId = AddWindow(&gUnknown_08615908); + offset = 3; + } + FillWindowPixelBuffer(windowId, 0); + if (gUnknown_0203CEC8.unk8_0 != 10) + { + mainOffset = GetStringCenterAlignXOffset(0, gText_Cancel, 48); + AddTextPrinterParameterized3(windowId, 0, mainOffset + offset, 1, gUnknown_086157FC[0], -1, gText_Cancel); + } + else + { + mainOffset = GetStringCenterAlignXOffset(0, gText_Cancel2, 48); + AddTextPrinterParameterized3(windowId, 0, mainOffset + offset, 1, gUnknown_086157FC[0], -1, gText_Cancel2); + } + PutWindowTilemap(windowId); + CopyWindowToVram(windowId, 2); + schedule_bg_copy_tilemap_to_vram(0); + } +} + +u16* sub_81B2564(u8 a) +{ + return &gUnknown_0203CEC4->unk18[a]; +} + +void sub_81B2578(u8 windowId, u8 *b, u8 c, u8 x, u8 y, u8 width, u8 height) +{ + u8 *pixels = AllocZeroed(height * width * 32); + u8 i, j; + + if (pixels != NULL) + { + for (i = 0; i < height; i++) + { + for (j = 0; j < width; j++) + CpuCopy16(sub_81B0DD4(b[x + j + ((y + i) * c)]), &pixels[(i * width + j) * 32], 32); + } + BlitBitmapToWindow(windowId, pixels, x * 8, y * 8, width * 8, height * 8); + Free(pixels); + } +} + +void sub_81B2658(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 f) +{ + if (width == 0 && height == 0) + { + width = 10; + height = 7; + } + if (f == 0) + sub_81B2578(windowId, gUnknown_08615988, 10, x, y, width, height); + else + sub_81B2578(windowId, gUnknown_086159CE, 10, x, y, width, height); +} + +void sub_81B26BC(u8 windowId, u8 x, u8 y, u8 width, u8 height, u8 f) +{ + if (width == 0 && height == 0) + { + width = 18; + height = 3; + } + if (f == 0) + sub_81B2578(windowId, gUnknown_08615A14, 18, x, y, width, height); + else + sub_81B2578(windowId, gUnknown_08615A4A, 18, x, y, width, height); +} + +void sub_81B2720(u8 windowId) +{ + sub_81B2578(windowId, gUnknown_08615A80, 18, 0, 0, 18, 3); +} + +void sub_81B2748(struct Unk_203CEDC *ptr, u8 bitfield) +{ + u8 palNum = GetWindowAttribute(ptr->unk8, WINDOW_PALETTE_NUM) * 16; + + if (0x40 & bitfield) + { + LoadPalette(sub_81B2564(gUnknown_08615AF1[0]), gUnknown_08615AC0[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AF1[1]), gUnknown_08615AC0[1] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AF1[2]), gUnknown_08615AC0[2] + palNum, 2); + } + else if (0x20 & bitfield) + { + if (1 & bitfield) + { + LoadPalette(sub_81B2564(gUnknown_08615ADF[0]), gUnknown_08615ABA[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615ADF[1]), gUnknown_08615ABA[1] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615ADF[2]), gUnknown_08615ABA[2] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AEB[0]), gUnknown_08615ABD[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AEB[1]), gUnknown_08615ABD[1] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AEB[2]), gUnknown_08615ABD[2] + palNum, 2); + } + else + { + LoadPalette(sub_81B2564(gUnknown_08615ADF[0]), gUnknown_08615ABA[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615ADF[1]), gUnknown_08615ABA[1] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615ADF[2]), gUnknown_08615ABA[2] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AEE[0]), gUnknown_08615ABD[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AEE[1]), gUnknown_08615ABD[1] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AEE[2]), gUnknown_08615ABD[2] + palNum, 2); + } + } + else if (0x10 & bitfield) + { + LoadPalette(sub_81B2564(gUnknown_08615ADF[0]), gUnknown_08615ABA[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615ADF[1]), gUnknown_08615ABA[1] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615ADF[2]), gUnknown_08615ABA[2] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AEE[0]), gUnknown_08615ABD[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AEE[1]), gUnknown_08615ABD[1] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AEE[2]), gUnknown_08615ABD[2] + palNum, 2); + } + else if (4 & bitfield) + { + if (1 & bitfield) + { + LoadPalette(sub_81B2564(gUnknown_08615ADF[0]), gUnknown_08615ABA[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615ADF[1]), gUnknown_08615ABA[1] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615ADF[2]), gUnknown_08615ABA[2] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AEB[0]), gUnknown_08615ABD[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AEB[1]), gUnknown_08615ABD[1] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AEB[2]), gUnknown_08615ABD[2] + palNum, 2); + } + else + { + LoadPalette(sub_81B2564(gUnknown_08615ADF[0]), gUnknown_08615ABA[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615ADF[1]), gUnknown_08615ABA[1] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615ADF[2]), gUnknown_08615ABA[2] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AEE[0]), gUnknown_08615ABD[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AEE[1]), gUnknown_08615ABD[1] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AEE[2]), gUnknown_08615ABD[2] + palNum, 2); + } + } + else if (2 & bitfield) + { + if (1 & bitfield) + { + LoadPalette(sub_81B2564(gUnknown_08615ADC[0]), gUnknown_08615ABA[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615ADC[1]), gUnknown_08615ABA[1] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615ADC[2]), gUnknown_08615ABA[2] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AEB[0]), gUnknown_08615ABD[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AEB[1]), gUnknown_08615ABD[1] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AEB[2]), gUnknown_08615ABD[2] + palNum, 2); + } + else + { + LoadPalette(sub_81B2564(gUnknown_08615AD3[0]), gUnknown_08615ABA[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AD3[1]), gUnknown_08615ABA[1] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AD3[2]), gUnknown_08615ABA[2] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AE8[0]), gUnknown_08615ABD[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AE8[1]), gUnknown_08615ABD[1] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AE8[2]), gUnknown_08615ABD[2] + palNum, 2); + } + } + else if (8 & bitfield) + { + if (1 & bitfield) + { + LoadPalette(sub_81B2564(gUnknown_08615AD9[0]), gUnknown_08615ABA[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AD9[1]), gUnknown_08615ABA[1] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AD9[2]), gUnknown_08615ABA[2] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AEB[0]), gUnknown_08615ABD[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AEB[1]), gUnknown_08615ABD[1] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AEB[2]), gUnknown_08615ABD[2] + palNum, 2); + } + else + { + LoadPalette(sub_81B2564(gUnknown_08615AD0[0]), gUnknown_08615ABA[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AD0[1]), gUnknown_08615ABA[1] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AD0[2]), gUnknown_08615ABA[2] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AE5[0]), gUnknown_08615ABD[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AE5[1]), gUnknown_08615ABD[1] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AE5[2]), gUnknown_08615ABD[2] + palNum, 2); + } + } + else if (1 & bitfield) + { + LoadPalette(sub_81B2564(gUnknown_08615AD6[0]), gUnknown_08615ABA[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AD6[1]), gUnknown_08615ABA[1] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AD6[2]), gUnknown_08615ABA[2] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AEB[0]), gUnknown_08615ABD[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AEB[1]), gUnknown_08615ABD[1] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AEB[2]), gUnknown_08615ABD[2] + palNum, 2); + } + else + { + LoadPalette(sub_81B2564(gUnknown_08615ACD[0]), gUnknown_08615ABA[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615ACD[1]), gUnknown_08615ABA[1] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615ACD[2]), gUnknown_08615ABA[2] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AE2[0]), gUnknown_08615ABD[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AE2[1]), gUnknown_08615ABD[1] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AE2[2]), gUnknown_08615ABD[2] + palNum, 2); + } +} + +void sub_81B2A3C(u8 windowId, const u8 *str, u8 color, u8 *ptr) +{ + AddTextPrinterParameterized3(windowId, 0, ptr[0], ptr[1], gUnknown_086157FC[color], 0, str); +} + +void sub_81B2A70(struct Pokemon *mon, struct Unk_203CEDC *ptr, u8 c) +{ + u8 nickname[POKEMON_NAME_LENGTH + 1]; + + if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE) + { + if (c == 1) + ptr->unk0->unk0(ptr->unk8, ptr->unk0->unk4[0] >> 3, ptr->unk0->unk4[1] >> 3, ptr->unk0->unk4[2] >> 3, ptr->unk0->unk4[3] >> 3, 0); + GetMonNickname(mon, nickname); + sub_81B2A3C(ptr->unk8, nickname, 0, ptr->unk0->unk4); + } +} + +void sub_81B2AC8(struct Pokemon *mon, struct Unk_203CEDC *ptr, u8 c) +{ + if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE) + { + u8 ailment = sub_81B205C(mon); + if (ailment == AILMENT_NONE || ailment == AILMENT_PKRS) + { + if (c != 0) + ptr->unk0->unk0(ptr->unk8, ptr->unk0->unk4[4] >> 3, (ptr->unk0->unk4[5] >> 3) + 1, ptr->unk0->unk4[6] >> 3, ptr->unk0->unk4[7] >> 3, 0); + if (c != 2) + sub_81B2B40(GetMonData(mon, MON_DATA_LEVEL), ptr); + } + } +} + +void sub_81B2B40(u8 level, struct Unk_203CEDC *ptr) +{ + ConvertIntToDecimalStringN(gStringVar2, level, 0, 3); + StringCopy(gStringVar1, gText_LevelSymbol); + StringAppend(gStringVar1, gStringVar2); + sub_81B2A3C(ptr->unk8, gStringVar1, 0, &ptr->unk0->unk4[4]); +} + +void sub_81B2B8C(struct Pokemon *mon, struct Unk_203CEDC *ptr, u8 c) +{ + u8 nickname[POKEMON_NAME_LENGTH + 1]; + + if (c == 1) + ptr->unk0->unk0(ptr->unk8, ptr->unk0->unk4[8] >> 3, (ptr->unk0->unk4[9] >> 3) + 1, ptr->unk0->unk4[10] >> 3, ptr->unk0->unk4[11] >> 3, 0); + GetMonNickname(mon, nickname); + sub_81B2BF4(GetMonGender(mon), GetMonData(mon, MON_DATA_SPECIES), nickname, ptr); +} + +void sub_81B2BF4(u8 gender, u16 species, u8 *nickname, struct Unk_203CEDC *ptr) +{ + u8 palNum = GetWindowAttribute(ptr->unk8, WINDOW_PALETTE_NUM) * 16; + + if (species == SPECIES_NONE) + return; + if (species == SPECIES_NIDORAN_M || species == SPECIES_NIDORAN_F) + { + if (StringCompare(nickname, gSpeciesNames[species]) == 0) + return; + } + switch (gender) + { + case MON_MALE: + LoadPalette(sub_81B2564(gUnknown_08615AC3[0]), gUnknown_08615AB6[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AC3[1]), gUnknown_08615AB6[1] + palNum, 2); + sub_81B2A3C(ptr->unk8, gText_MaleSymbol, 2, &ptr->unk0->unk4[8]); + break; + case MON_FEMALE: + LoadPalette(sub_81B2564(gUnknown_08615AC5[0]), gUnknown_08615AB6[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AC5[1]), gUnknown_08615AB6[1] + palNum, 2); + sub_81B2A3C(ptr->unk8, gText_FemaleSymbol, 2, &ptr->unk0->unk4[8]); + break; + } +} + +void sub_81B2CD4(struct Pokemon *mon, struct Unk_203CEDC *ptr, u8 c) +{ + if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE) + { + if (c != 0) + ptr->unk0->unk0(ptr->unk8, ptr->unk0->unk4[12] >> 3, (ptr->unk0->unk4[13] >> 3) + 1, ptr->unk0->unk4[14] >> 3, ptr->unk0->unk4[15] >> 3, 0); + if (c != 2) + sub_81B2D3C(GetMonData(mon, MON_DATA_HP), ptr); + } +} + +void sub_81B2D3C(u16 hp, struct Unk_203CEDC *ptr) +{ + u8 *strOut = ConvertIntToDecimalStringN(gStringVar1, hp, 1, 3); + + strOut[0] = CHAR_SLASH; + strOut[1] = EOS; + + sub_81B2A3C(ptr->unk8, gStringVar1, 0, &ptr->unk0->unk4[12]); +} + +void sub_81B2D74(struct Pokemon *mon, struct Unk_203CEDC *ptr, u8 c) +{ + if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE) + { + if (c != 0) + ptr->unk0->unk0(ptr->unk8, (ptr->unk0->unk4[16] >> 3) + 1, (ptr->unk0->unk4[17] >> 3) + 1, ptr->unk0->unk4[18] >> 3, ptr->unk0->unk4[19] >> 3, 0); + if (c != 2) + sub_81B2DDC(GetMonData(mon, MON_DATA_MAX_HP), ptr); + } +} + +void sub_81B2DDC(u16 maxhp, struct Unk_203CEDC *ptr) +{ + ConvertIntToDecimalStringN(gStringVar2, maxhp, 1, 3); + StringCopy(gStringVar1, gText_Slash); + StringAppend(gStringVar1, gStringVar2); + sub_81B2A3C(ptr->unk8, gStringVar1, 0, &ptr->unk0->unk4[16]); +} + +void sub_81B2E28(struct Pokemon *mon, struct Unk_203CEDC *ptr) +{ + if (GetMonData(mon, MON_DATA_SPECIES) != SPECIES_NONE) + sub_81B2E64(GetMonData(mon, MON_DATA_HP), GetMonData(mon, MON_DATA_MAX_HP), ptr); +} + +void sub_81B2E64(u16 hp, u16 maxhp, struct Unk_203CEDC *ptr) +{ + u8 palNum = GetWindowAttribute(ptr->unk8, WINDOW_PALETTE_NUM) * 16; + u8 hpFraction; + + switch (GetHPBarLevel(hp, maxhp)) + { + case 3: + case 4: + LoadPalette(sub_81B2564(gUnknown_08615AC7[0]), gUnknown_08615AB8[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AC7[1]), gUnknown_08615AB8[1] + palNum, 2); + break; + case 2: + LoadPalette(sub_81B2564(gUnknown_08615AC9[0]), gUnknown_08615AB8[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615AC9[1]), gUnknown_08615AB8[1] + palNum, 2); + break; + default: + LoadPalette(sub_81B2564(gUnknown_08615ACB[0]), gUnknown_08615AB8[0] + palNum, 2); + LoadPalette(sub_81B2564(gUnknown_08615ACB[1]), gUnknown_08615AB8[1] + palNum, 2); + break; + } + + hpFraction = GetScaledHPFraction(hp, maxhp, ptr->unk0->unk4[22]); + FillWindowPixelRect(ptr->unk8, gUnknown_08615AB8[1], ptr->unk0->unk4[20], ptr->unk0->unk4[21], hpFraction, 1); + FillWindowPixelRect(ptr->unk8, gUnknown_08615AB8[0], ptr->unk0->unk4[20], ptr->unk0->unk4[21] + 1, hpFraction, 2); + if (hpFraction != ptr->unk0->unk4[22]) + { + FillWindowPixelRect(ptr->unk8, 13, ptr->unk0->unk4[20] + hpFraction, ptr->unk0->unk4[21], ptr->unk0->unk4[22] - hpFraction, 1); + FillWindowPixelRect(ptr->unk8, 2, ptr->unk0->unk4[20] + hpFraction, ptr->unk0->unk4[21] + 1, ptr->unk0->unk4[22] - hpFraction, 2); + } + CopyWindowToVram(ptr->unk8, 2); +} + +#ifdef NONMATCHING +void sub_81B2FA8(u8 stringID, struct Unk_203CEDC *ptr, u8 c) +{ + if (c != 0) + { + int unk = ((ptr->unk0->unk1C & 7) + ptr->unk0->unk1E + 7) / 8; + int unk2 = ((ptr->unk0->unk1D & 7) + ptr->unk0->unk1F + 7) / 8; + ptr->unk0->unk0(ptr->unk8, ptr->unk0->unk1C >> 3, ptr->unk0->unk1D >> 3, unk, unk2, 1); + } + if (c != 2) + AddTextPrinterParameterized3(ptr->unk8, 1, ptr->unk0->unk1C, ptr->unk0->unk1D, gUnknown_086157FC[0], 0, gUnknown_08615B60[stringID]); +} +#else +NAKED +void sub_81B2FA8(u8 stringID, struct Unk_203CEDC *ptr, u8 c) +{ + asm_unified("push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + sub sp, 0xC\n\ + adds r6, r1, 0\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + lsls r2, 24\n\ + lsrs r7, r2, 24\n\ + cmp r7, 0\n\ + beq _081B2FF2\n\ + ldr r5, [r6]\n\ + ldrb r1, [r5, 0x1C]\n\ + movs r4, 0x7\n\ + adds r0, r1, 0\n\ + ands r0, r4\n\ + ldrb r2, [r5, 0x1E]\n\ + adds r0, r2\n\ + adds r3, r0, 0x7\n\ + asrs r3, 3\n\ + ldrb r2, [r5, 0x1D]\n\ + adds r0, r2, 0\n\ + ands r0, r4\n\ + ldrb r4, [r5, 0x1F]\n\ + adds r0, r4\n\ + adds r4, r0, 0x7\n\ + ldrb r0, [r6, 0x8]\n\ + lsrs r1, 3\n\ + lsrs r2, 3\n\ + lsrs r4, 3\n\ + str r4, [sp]\n\ + movs r4, 0x1\n\ + str r4, [sp, 0x4]\n\ + ldr r4, [r5]\n\ + bl _call_via_r4\n\ +_081B2FF2:\n\ + cmp r7, 0x2\n\ + beq _081B3018\n\ + ldrb r0, [r6, 0x8]\n\ + ldr r1, [r6]\n\ + ldrb r2, [r1, 0x1C]\n\ + ldrb r3, [r1, 0x1D]\n\ + ldr r1, =gUnknown_086157FC\n\ + str r1, [sp]\n\ + movs r1, 0\n\ + str r1, [sp, 0x4]\n\ + ldr r4, =gUnknown_08615B60\n\ + mov r5, r8\n\ + lsls r1, r5, 2\n\ + adds r1, r4\n\ + ldr r1, [r1]\n\ + str r1, [sp, 0x8]\n\ + movs r1, 0x1\n\ + bl AddTextPrinterParameterized3\n\ +_081B3018:\n\ + add sp, 0xC\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .pool\n"); +} +#endif + +void sub_81B302C(u8 *ptr) +{ + if (*ptr != 0xFF) + { + sub_8198070(*ptr, 0); + RemoveWindow(*ptr); + *ptr = 0xFF; + schedule_bg_copy_tilemap_to_vram(2); + } +} + +void display_pokemon_menu_message(u32 stringID) +{ + u8 *windowPtr = &gUnknown_0203CEC4->unkC[1]; + + if (*windowPtr != 0xFF) + sub_81B302C(windowPtr); + + if (stringID != 0x7F) + { + switch (stringID - 21) + { + case 0: + *windowPtr = AddWindow(&gUnknown_08615928); + break; + case 3: + *windowPtr = AddWindow(&gUnknown_08615930); + break; + case 4: + *windowPtr = AddWindow(&gUnknown_08615938); + break; + case 1: + case 2: + *windowPtr = AddWindow(&gUnknown_08615940); + break; + case 5: + *windowPtr = AddWindow(&gUnknown_08615948); + break; + default: + *windowPtr = AddWindow(&gUnknown_08615920); + break; + } + if (stringID == 0) + { + if (gUnknown_0203CEC4->unk8_0 != FALSE) + stringID = 2; + else if (sub_81B314C() == FALSE) + stringID = 1; + } + SetWindowBorderStyle(*windowPtr, 0, 0x4F, 0xD); + StringExpandPlaceholders(gStringVar4, gUnknown_08615AF4[stringID]); + AddTextPrinterParameterized(*windowPtr, 1, gStringVar4, 0, 1, 0, 0); + schedule_bg_copy_tilemap_to_vram(2); + } +} + +bool8 sub_81B314C(void) +{ + struct Pokemon *party = gPlayerParty; + u8 i; + u8 j = 0; + + if (gUnknown_0203CEC8.unkB == 1) + return TRUE; + + for (i = 0; i < 6; i++) + { + if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE) + { + if (GetMonData(&party[i], MON_DATA_HP) != 0 || GetMonData(&party[i], MON_DATA_IS_EGG) != FALSE) + j++; + } + if (j > 1) + return TRUE; + } + return FALSE; +} |