diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/battle/contest_link_80C2020.c | 509 | ||||
-rw-r--r-- | src/pokemon_storage_system_4.c | 4 |
2 files changed, 510 insertions, 3 deletions
diff --git a/src/battle/contest_link_80C2020.c b/src/battle/contest_link_80C2020.c index db1210cdb..43f6b970e 100644 --- a/src/battle/contest_link_80C2020.c +++ b/src/battle/contest_link_80C2020.c @@ -25,6 +25,7 @@ #include "field_specials.h" #include "contest_link_80C857C.h" #include "contest_link_80C2020.h" +#include "pokemon_storage_system.h" #define ABS(x) ((x) < 0 ? -(x) : (x)) @@ -84,8 +85,11 @@ void sub_80C310C(void); void sub_80C3158(const u8 *string, u8 spriteId); void sub_80C33DC(void); u16 sub_80C34AC(const u8 *string); -void sub_80C34CC(s16 data4, s16 pos0y, u16 data5, s16 data6); +void sub_80C34CC(s16 data4, u16 pos0y, u16 data5, u16 data6); void sub_80C3520(u16 a0); +void sub_80C3588(struct Sprite *sprite); +void sub_80C35FC(struct Sprite *sprite); +void sub_80C3630(struct Sprite *sprite); void sub_80C3698(const u8 *string); void sub_80C3764(void); void sub_80C37E4(void); @@ -1252,3 +1256,506 @@ u16 sub_80C34AC(const u8 * string) u8 width = (StringLength(string) * 6); return 0x70 - (width / 2); } + +void sub_80C34CC(s16 arg0, u16 y, u16 arg2, u16 arg3) +{ + struct Sprite *sprite = &gSprites[eContestLink80C2020Struct2018000.unk_00]; + sprite->pos1.x = 272; + sprite->pos1.y = y; + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->data[4] = arg0 + 32; + sprite->data[5] = arg2; + sprite->data[6] = arg3; + sprite->data[7] = 0; + sprite->callback = sub_80C3588; + eContestLink80C2020Struct2018000.unk_04 = 1; +} + +void sub_80C3520(u16 arg0) +{ + struct Sprite *sprite = &gSprites[eContestLink80C2020Struct2018000.unk_00]; + sprite->pos1.x += sprite->pos2.x; + sprite->pos1.y += sprite->pos2.y; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->data[6] = arg0; + sprite->data[7] = 0; + sprite->callback = sub_80C3630; + eContestLink80C2020Struct2018000.unk_04 = 3; +} + +void sub_80C3564(struct Sprite *sprite) +{ + sprite->pos1.x = 272; + sprite->pos1.y = 144; + sprite->pos2.y = 0; + sprite->pos2.x = 0; + sprite->callback = SpriteCallbackDummy; + eContestLink80C2020Struct2018000.unk_04 = 0; +} + + +void sub_80C3588(struct Sprite *sprite) +{ + int i; + s16 var0; + + var0 = (u16)sprite->data[7] + (u16)sprite->data[6]; + sprite->pos1.x -= var0 >> 8; + sprite->data[7] = (sprite->data[6] + sprite->data[7]) & 0xFF; + if (sprite->pos1.x < sprite->data[4]) + sprite->pos1.x = sprite->data[4]; + + for (i = 0; i < 3; i++) + { + struct Sprite *sprite2 = &gSprites[sprite->data[i]]; + sprite2->pos1.x = sprite->pos1.x + sprite->pos2.x + (i + 1) * 64; + } + + if (sprite->pos1.x == sprite->data[4]) + sprite->callback = sub_80C35FC; +} + +void sub_80C35FC(struct Sprite *sprite) +{ + eContestLink80C2020Struct2018000.unk_04 = 2; + if ((u16)sprite->data[5] != 0xFFFF) + { + if (--sprite->data[5] == -1) + sub_80C3520(sprite->data[6]); + } +} + +void sub_80C3630(struct Sprite *sprite) +{ + int i; + s16 var0; + + var0 = (u16)sprite->data[7] + (u16)sprite->data[6]; + sprite->pos1.x -= var0 >> 8; + sprite->data[7] = (sprite->data[6] + sprite->data[7]) & 0xFF; + for (i = 0; i < 3; i++) + { + struct Sprite *sprite2 = &gSprites[sprite->data[i]]; + sprite2->pos1.x = sprite->pos1.x + sprite->pos2.x + (i + 1) * 64; + } + + if (sprite->pos1.x + sprite->pos2.x < -224) + sub_80C3564(sprite); +} + +void sub_80C3698(const u8 *text) +{ + int i; + u16 x; + struct Sprite *sprite; + + sub_80C3158(text, eContestLink80C2020Struct2018000.unk_01); + x = sub_80C34AC(text); + sprite = &gSprites[eContestLink80C2020Struct2018000.unk_01]; + sprite->pos1.x = x + 32; + sprite->pos1.y = 80; + sprite->invisible = 0; + for (i = 0; i < 3; i++) + { + gSprites[sprite->data[i]].pos1.x = sprite->pos1.x + sprite->pos2.x + (i + 1) * 64; + gSprites[sprite->data[i]].pos1.y = sprite->pos1.y; + gSprites[sprite->data[i]].invisible = 0; + } + + gBattle_WIN0H = 0x00F0; + gBattle_WIN0V = ((sprite->pos1.y - 16) << 8) | (sprite->pos1.y + 16); + REG_WININ = WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR | WININ_WIN0_BG1 | WININ_WIN0_BG2 | WININ_WIN0_BG3 | WININ_WIN0_OBJ | WININ_WIN0_CLR; +} + +void sub_80C3764(void) +{ + int i; + struct Sprite *sprite; + + sprite = &gSprites[eContestLink80C2020Struct2018000.unk_01]; + sprite->invisible = 1; + for (i = 0; i < 3; i++) + gSprites[sprite->data[i]].invisible = 1; + + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + REG_WIN0H = gBattle_WIN0H; + REG_WIN0V = gBattle_WIN0V; + REG_WININ = WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR; +} + +#ifdef ENGLISH +#ifdef NONMATCHING +static inline s32 de_sub_80C39A8(s32 a0) +{ + s32 result = 0; + if (gIsLinkContest & 0x1) + { + sub_809D104((void *)0x0600E000, a0, 1, gUnknown_08E964B8, 9, 2, 8, 2); + result = 8; + } + else if (gSpecialVar_ContestRank == 0) + { + sub_809D104((void *)0x0600E000, a0, 1, gUnknown_08E964B8, 0, 0, 9, 2); + result = 9; + } + else if (gSpecialVar_ContestRank == 1) + { + sub_809D104((void *)0x0600E000, a0, 1, gUnknown_08E964B8, 9, 0, 8, 2); + result = 8; + } + else if (gSpecialVar_ContestRank == 2) + { + sub_809D104((void *)0x0600E000, a0, 1, gUnknown_08E964B8, 17, 0, 8, 2); + result = 8; + } + else + { + sub_809D104((void *)0x0600E000, a0, 1, gUnknown_08E964B8, 0, 2, 9, 2); + result = 9; + } + return result; +} + +static inline s32 de_sub_80C3A84(s32 a0, s32 * a1) +{ + s32 result; + if (gSpecialVar_ContestCategory == 0) + { + *a1 = 0; + sub_809D104((void *)0x0600E000, a0, 1, gUnknown_08E964B8, 17, 2, 10, 2); + result = 10; + } + else if (gSpecialVar_ContestCategory == 1) + { + *a1 = 1; + sub_809D104((void *)0x0600E000, a0, 1, gUnknown_08E964B8, 0, 4, 11, 2); + result = 11; + } + else if (gSpecialVar_ContestCategory == 2) + { + *a1 = 2; + sub_809D104((void *)0x0600E000, a0, 1, gUnknown_08E964B8, 11, 4, 10, 2); + result = 10; + } + else if (gSpecialVar_ContestCategory == 3) + { + *a1 = 3; + sub_809D104((void *)0x0600E000, a0, 1, gUnknown_08E964B8, 21, 4, 10, 2); + result = 10; + } + else + { + *a1 = 4; + sub_809D104((void *)0x0600E000, a0, 1, gUnknown_08E964B8, 0, 6, 10, 2); + result = 10; + } + return result; +} + +void sub_80C37E4(void) +{ + s32 sp0; + s32 i; + de_sub_80C3A84(de_sub_80C39A8(5) + 5, &sp0); + for (i = 0; i < 0x80; i++) + { + ((vu16 *)0x0600E000)[i] &= 0xFFF; + ((vu16 *)0x0600E000)[i] |= sp0 << 12;; + } +} +#else +NAKED +void sub_80C37E4(void) +{ + asm_unified("\tpush {r4-r6,lr}\n" + "\tsub sp, 0x10\n" + "\tmovs r5, 0x1\n" + "\tmovs r4, 0\n" + "\tldr r0, _080C3808 @ =gIsLinkContest\n" + "\tldrb r0, [r0]\n" + "\tadds r1, r5, 0\n" + "\tands r1, r0\n" + "\tcmp r1, 0\n" + "\tbeq _080C3814\n" + "\tldr r0, _080C380C @ =0x0600e000\n" + "\tldr r3, _080C3810 @ =gUnknown_08E964B8\n" + "\tmovs r1, 0x9\n" + "\tstr r1, [sp]\n" + "\tmovs r2, 0x2\n" + "\tstr r2, [sp, 0x4]\n" + "\tb _080C386A\n" + "\t.align 2, 0\n" + "_080C3808: .4byte gIsLinkContest\n" + "_080C380C: .4byte 0x0600e000\n" + "_080C3810: .4byte gUnknown_08E964B8\n" + "_080C3814:\n" + "\tldr r0, _080C3830 @ =gSpecialVar_ContestRank\n" + "\tldrh r2, [r0]\n" + "\tcmp r2, 0\n" + "\tbne _080C383C\n" + "\tmovs r4, 0x1\n" + "\tldr r0, _080C3834 @ =0x0600e000\n" + "\tldr r3, _080C3838 @ =gUnknown_08E964B8\n" + "\tstr r2, [sp]\n" + "\tstr r2, [sp, 0x4]\n" + "\tmovs r1, 0x9\n" + "\tstr r1, [sp, 0x8]\n" + "\tmovs r1, 0x2\n" + "\tstr r1, [sp, 0xC]\n" + "\tb _080C3870\n" + "\t.align 2, 0\n" + "_080C3830: .4byte gSpecialVar_ContestRank\n" + "_080C3834: .4byte 0x0600e000\n" + "_080C3838: .4byte gUnknown_08E964B8\n" + "_080C383C:\n" + "\tcmp r2, 0x1\n" + "\tbne _080C385C\n" + "\tldr r0, _080C3854 @ =0x0600e000\n" + "\tldr r3, _080C3858 @ =gUnknown_08E964B8\n" + "\tmovs r1, 0x9\n" + "\tstr r1, [sp]\n" + "\tstr r4, [sp, 0x4]\n" + "\tmovs r1, 0x8\n" + "\tstr r1, [sp, 0x8]\n" + "\tmovs r1, 0x2\n" + "\tstr r1, [sp, 0xC]\n" + "\tb _080C3870\n" + "\t.align 2, 0\n" + "_080C3854: .4byte 0x0600e000\n" + "_080C3858: .4byte gUnknown_08E964B8\n" + "_080C385C:\n" + "\tcmp r2, 0x2\n" + "\tbne _080C3884\n" + "\tldr r0, _080C387C @ =0x0600e000\n" + "\tldr r3, _080C3880 @ =gUnknown_08E964B8\n" + "\tmovs r1, 0x11\n" + "\tstr r1, [sp]\n" + "\tstr r4, [sp, 0x4]\n" + "_080C386A:\n" + "\tmovs r1, 0x8\n" + "\tstr r1, [sp, 0x8]\n" + "\tstr r2, [sp, 0xC]\n" + "_080C3870:\n" + "\tmovs r1, 0x5\n" + "\tmovs r2, 0x1\n" + "\tbl sub_809D104\n" + "\tb _080C389E\n" + "\t.align 2, 0\n" + "_080C387C: .4byte 0x0600e000\n" + "_080C3880: .4byte gUnknown_08E964B8\n" + "_080C3884:\n" + "\tmovs r4, 0x1\n" + "\tldr r0, _080C38C0 @ =0x0600e000\n" + "\tldr r3, _080C38C4 @ =gUnknown_08E964B8\n" + "\tstr r1, [sp]\n" + "\tmovs r2, 0x2\n" + "\tstr r2, [sp, 0x4]\n" + "\tmovs r1, 0x9\n" + "\tstr r1, [sp, 0x8]\n" + "\tstr r2, [sp, 0xC]\n" + "\tmovs r1, 0x5\n" + "\tmovs r2, 0x1\n" + "\tbl sub_809D104\n" + "_080C389E:\n" + "\tadds r4, 0xD\n" + "\tldr r0, _080C38C8 @ =gSpecialVar_ContestCategory\n" + "\tldrh r0, [r0]\n" + "\tcmp r0, 0\n" + "\tbne _080C38CC\n" + "\tmovs r6, 0\n" + "\tldr r0, _080C38C0 @ =0x0600e000\n" + "\tldr r3, _080C38C4 @ =gUnknown_08E964B8\n" + "\tmovs r1, 0x11\n" + "\tstr r1, [sp]\n" + "\tmovs r2, 0x2\n" + "\tstr r2, [sp, 0x4]\n" + "\tmovs r1, 0xA\n" + "\tstr r1, [sp, 0x8]\n" + "\tstr r2, [sp, 0xC]\n" + "\tb _080C392A\n" + "\t.align 2, 0\n" + "_080C38C0: .4byte 0x0600e000\n" + "_080C38C4: .4byte gUnknown_08E964B8\n" + "_080C38C8: .4byte gSpecialVar_ContestCategory\n" + "_080C38CC:\n" + "\tcmp r0, 0x1\n" + "\tbne _080C38EC\n" + "\tmovs r6, 0x1\n" + "\tldr r0, _080C38E4 @ =0x0600e000\n" + "\tldr r3, _080C38E8 @ =gUnknown_08E964B8\n" + "\tmovs r1, 0\n" + "\tstr r1, [sp]\n" + "\tmovs r1, 0x4\n" + "\tstr r1, [sp, 0x4]\n" + "\tmovs r1, 0xB\n" + "\tb _080C3924\n" + "\t.align 2, 0\n" + "_080C38E4: .4byte 0x0600e000\n" + "_080C38E8: .4byte gUnknown_08E964B8\n" + "_080C38EC:\n" + "\tcmp r0, 0x2\n" + "\tbne _080C3910\n" + "\tmovs r6, 0x2\n" + "\tldr r0, _080C3908 @ =0x0600e000\n" + "\tldr r3, _080C390C @ =gUnknown_08E964B8\n" + "\tmovs r1, 0xB\n" + "\tstr r1, [sp]\n" + "\tmovs r1, 0x4\n" + "\tstr r1, [sp, 0x4]\n" + "\tmovs r1, 0xA\n" + "\tstr r1, [sp, 0x8]\n" + "\tstr r6, [sp, 0xC]\n" + "\tb _080C392A\n" + "\t.align 2, 0\n" + "_080C3908: .4byte 0x0600e000\n" + "_080C390C: .4byte gUnknown_08E964B8\n" + "_080C3910:\n" + "\tcmp r0, 0x3\n" + "\tbne _080C393C\n" + "\tmovs r6, 0x3\n" + "\tldr r0, _080C3934 @ =0x0600e000\n" + "\tldr r3, _080C3938 @ =gUnknown_08E964B8\n" + "\tmovs r1, 0x15\n" + "\tstr r1, [sp]\n" + "\tmovs r1, 0x4\n" + "\tstr r1, [sp, 0x4]\n" + "\tmovs r1, 0xA\n" + "_080C3924:\n" + "\tstr r1, [sp, 0x8]\n" + "\tmovs r1, 0x2\n" + "\tstr r1, [sp, 0xC]\n" + "_080C392A:\n" + "\tadds r1, r4, 0\n" + "\tadds r2, r5, 0\n" + "\tbl sub_809D104\n" + "\tb _080C395A\n" + "\t.align 2, 0\n" + "_080C3934: .4byte 0x0600e000\n" + "_080C3938: .4byte gUnknown_08E964B8\n" + "_080C393C:\n" + "\tmovs r6, 0x4\n" + "\tldr r0, _080C3984 @ =0x0600e000\n" + "\tldr r3, _080C3988 @ =gUnknown_08E964B8\n" + "\tmovs r1, 0\n" + "\tstr r1, [sp]\n" + "\tmovs r1, 0x6\n" + "\tstr r1, [sp, 0x4]\n" + "\tmovs r1, 0xA\n" + "\tstr r1, [sp, 0x8]\n" + "\tmovs r1, 0x2\n" + "\tstr r1, [sp, 0xC]\n" + "\tadds r1, r4, 0\n" + "\tadds r2, r5, 0\n" + "\tbl sub_809D104\n" + "_080C395A:\n" + "\tldr r5, _080C398C @ =0x00000fff\n" + "\tlsls r4, r6, 12\n" + "\tldr r2, _080C3984 @ =0x0600e000\n" + "\tmovs r3, 0x7F\n" + "_080C3962:\n" + "\tldrh r1, [r2]\n" + "\tadds r0, r5, 0\n" + "\tands r0, r1\n" + "\tstrh r0, [r2]\n" + "\tldrh r1, [r2]\n" + "\tadds r0, r4, 0\n" + "\torrs r0, r1\n" + "\tstrh r0, [r2]\n" + "\tadds r2, 0x2\n" + "\tsubs r3, 0x1\n" + "\tcmp r3, 0\n" + "\tbge _080C3962\n" + "\tadd sp, 0x10\n" + "\tpop {r4-r6}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_080C3984: .4byte 0x0600e000\n" + "_080C3988: .4byte gUnknown_08E964B8\n" + "_080C398C: .4byte 0x00000fff"); +} +#endif // NONMATCHING + +#elif defined(GERMAN) +s16 de_sub_80C39A8(s32 a0) +{ + s16 result; + if (gIsLinkContest & 1) + { + sub_809D104((void *)0x0600E000, a0, 0, gUnknown_08E964B8, 11, 3, 8, 3); + result = 8; + } + else if (gSpecialVar_ContestRank == 0) + { + sub_809D104((void *)0x0600E000, a0, 0, gUnknown_08E964B8, 0, 0, 11, 3); + result = 11; + } + else if (gSpecialVar_ContestRank == 1) + { + sub_809D104((void *)0x0600E000, a0, 0, gUnknown_08E964B8, 11, 0, 10, 3); + result = 10; + } + else if (gSpecialVar_ContestRank == 2) + { + sub_809D104((void *)0x0600E000, a0, 0, gUnknown_08E964B8, 21, 0, 10, 3); + result = 10; + } + else + { + sub_809D104((void *)0x0600E000, a0, 0, gUnknown_08E964B8, 0, 3, 11, 3); + result = 11; + } + return result; +} + +s16 de_sub_80C3A84(s32 a0, s32 * a1) +{ + s16 result; + if (gSpecialVar_ContestCategory == 0) + { + *a1 = 0; + sub_809D104((void *)0x0600E000, a0, 0, gUnknown_08E964B8, 19, 3, 7, 3); + result = 7; + } + else if (gSpecialVar_ContestCategory == 1) + { + *a1 = 1; + sub_809D104((void *)0x0600E000, a0, 0, gUnknown_08E964B8, 0, 6, 7, 3); + result = 7; + } + else if (gSpecialVar_ContestCategory == 2) + { + *a1 = 2; + sub_809D104((void *)0x0600E000, a0, 0, gUnknown_08E964B8, 7, 6, 4, 3); + result = 4; + } + else if (gSpecialVar_ContestCategory == 3) + { + *a1 = 3; + sub_809D104((void *)0x0600E000, a0, 0, gUnknown_08E964B8, 11, 6, 6, 3); + result = 6; + } + else + { + *a1 = 4; + sub_809D104((void *)0x0600E000, a0, 0, gUnknown_08E964B8, 17, 6, 5, 3); + result = 5; + } + return result; +} + +void sub_80C37E4(void) +{ + s32 sp0; + s32 i; + de_sub_80C3A84(de_sub_80C39A8(6) + 6, &sp0); + for (i = 0; i < 0x80; i++) + { + ((vu16 *)0x0600E000)[i] &= 0xFFF; + ((vu16 *)0x0600E000)[i] |= sp0 << 12;; + } +} +#endif diff --git a/src/pokemon_storage_system_4.c b/src/pokemon_storage_system_4.c index fff545492..3640e3961 100644 --- a/src/pokemon_storage_system_4.c +++ b/src/pokemon_storage_system_4.c @@ -3555,7 +3555,7 @@ void sub_809D0BC(struct UnkStruct_2000028 *unkStruct) int width = unkStruct->unk_08; for (i = 0; i < height; i++) { - CpuSet(src, dest, (width / 2) & 0x1FFFFF); + CpuCopy16(src, dest, width); dest += 64; src += 64; } @@ -3569,7 +3569,7 @@ void sub_809D104(u8 *dest, u16 dLeft, u16 dTop, const u8 *src, u16 sLeft, u16 sT int width2 = width * 2; while (to < end) { - CpuSet(from, to, (width2 / 2) & 0x1FFFFF); + CpuCopy16(from, to, width2); to += 64; from += 64; } |