diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2018-04-01 11:02:07 -0400 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2018-04-01 11:02:07 -0400 |
commit | e88e39d5fda1644f77e41fd652d4310612da7532 (patch) | |
tree | 12623b44d54dc9a1cc784816937e7d939810f13c | |
parent | 0015d6fe2c6a53c5f757599122ae9fd1a156a69f (diff) |
(wip) sub_80C3158
-rw-r--r-- | asm/contest_link_80C2020.s | 338 | ||||
-rw-r--r-- | src/battle/contest_link_80C2020.c | 133 |
2 files changed, 123 insertions, 348 deletions
diff --git a/asm/contest_link_80C2020.s b/asm/contest_link_80C2020.s index e45862db6..eaa61e7eb 100644 --- a/asm/contest_link_80C2020.s +++ b/asm/contest_link_80C2020.s @@ -5,344 +5,6 @@ .text - thumb_func_start sub_80C310C -sub_80C310C: @ 80C310C - push {r4-r6,lr} - movs r4, 0 - ldr r6, _080C314C @ =gMonIconPaletteIndices - movs r5, 0xA0 - lsls r5, 16 -_080C3116: - ldr r1, _080C3150 @ =gContestMons - lsls r0, r4, 6 - adds r0, r1 - ldrh r0, [r0] - movs r1, 0 - bl mon_icon_convert_unown_species_id - lsls r0, 16 - lsrs r0, 16 - adds r0, r6 - ldrb r0, [r0] - lsls r0, 5 - ldr r1, _080C3154 @ =gMonIconPalettes - adds r0, r1 - lsrs r1, r5, 16 - movs r2, 0x20 - bl LoadPalette - movs r0, 0x80 - lsls r0, 13 - adds r5, r0 - adds r4, 0x1 - cmp r4, 0x3 - ble _080C3116 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080C314C: .4byte gMonIconPaletteIndices -_080C3150: .4byte gContestMons -_080C3154: .4byte gMonIconPalettes - thumb_func_end sub_80C310C - - thumb_func_start sub_80C3158 -sub_80C3158: @ 80C3158 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x1C - mov r9, r0 - lsls r1, 24 - lsrs r1, 24 - lsls r2, r1, 4 - adds r2, r1 - lsls r2, 2 - ldr r3, _080C32C0 @ =gSprites - adds r2, r3 - mov r1, sp - ldrh r0, [r2, 0x4] - lsls r0, 22 - lsrs r0, 22 - strh r0, [r1] - mov r4, sp - movs r0, 0x2E - ldrsh r1, [r2, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrh r0, [r0, 0x4] - lsls r0, 22 - lsrs r0, 22 - strh r0, [r4, 0x2] - movs r0, 0x30 - ldrsh r1, [r2, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrh r0, [r0, 0x4] - lsls r0, 22 - lsrs r0, 22 - strh r0, [r4, 0x4] - movs r0, 0x32 - ldrsh r1, [r2, r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r3 - ldrh r0, [r0, 0x4] - lsls r0, 22 - lsrs r0, 22 - strh r0, [r4, 0x6] - ldr r1, _080C32C4 @ =gWindowTemplate_81E7278 - mov r8, r1 - ldr r7, _080C32C8 @ =0x06010000 - ldr r2, _080C32CC @ =0x040000d4 - ldr r6, _080C32D0 @ =0x85000100 - mov r1, sp - movs r5, 0 - add r3, sp, 0x8 - movs r4, 0x3 -_080C31CE: - ldrh r0, [r1] - lsls r0, 5 - adds r0, r7 - str r5, [sp, 0x8] - str r3, [r2] - str r0, [r2, 0x4] - str r6, [r2, 0x8] - ldr r0, [r2, 0x8] - adds r1, 0x2 - subs r4, 0x1 - cmp r4, 0 - bge _080C31CE - mov r0, r8 - mov r1, r9 - bl Text_GetStringWidthFromWindowTemplate - lsls r0, 24 - lsrs r5, r0, 24 - ldr r2, _080C32D4 @ =gDisplayedStringBattle - ldr r1, _080C32D8 @ =gUnknown_083D17E2 - adds r0, r2, 0 - bl StringCopy - adds r2, r0, 0 - mvns r0, r5 - adds r1, r0, 0x1 - movs r0, 0x7 - ands r1, r0 - cmp r1, 0 - beq _080C3218 - movs r0, 0xFC - strb r0, [r2] - movs r0, 0x11 - strb r0, [r2, 0x1] - lsrs r0, r1, 1 - strb r0, [r2, 0x2] - adds r2, 0x3 -_080C3218: - adds r6, r5, 0x7 - movs r1, 0x8 - negs r1, r1 - adds r0, r1, 0 - ands r6, r0 - lsls r6, 24 - lsrs r5, r6, 24 - adds r0, r2, 0 - mov r1, r9 - bl StringCopy - adds r2, r0, 0 - movs r0, 0xFC - strb r0, [r2] - movs r0, 0x13 - strb r0, [r2, 0x1] - strb r5, [r2, 0x2] - movs r0, 0xFF - strb r0, [r2, 0x3] - ldr r0, _080C32DC @ =gSharedMem + 0x18068 - mov r10, r0 - ldr r1, _080C32D4 @ =gDisplayedStringBattle - bl sub_80034D4 - mov r0, sp - ldrh r4, [r0] - lsls r4, 5 - ldr r1, _080C32C8 @ =0x06010000 - adds r7, r4, r1 - ldr r0, _080C32E0 @ =gUnknown_083D1624 - mov r9, r0 - ldr r1, _080C32E4 @ =REG_BG0CNT - mov r8, r1 - adds r1, r7, 0 - mov r2, r8 - bl CpuSet - mov r5, r9 - adds r5, 0x80 - ldr r0, _080C32E8 @ =0x06010100 - adds r1, r4, r0 - adds r0, r5, 0 - mov r2, r8 - bl CpuSet - ldr r0, _080C32EC @ =0x06010200 - adds r1, r4, r0 - adds r0, r5, 0 - mov r2, r8 - bl CpuSet - mov r0, r9 - adds r0, 0x40 - ldr r1, _080C32F0 @ =0x06010300 - adds r4, r1 - adds r1, r4, 0 - mov r2, r8 - bl CpuSet - lsrs r5, r6, 27 - movs r4, 0 - cmp r4, r5 - bgt _080C3382 - mov r6, sp - mov r0, r10 - adds r0, 0x20 - str r0, [sp, 0xC] - mov r1, r10 - str r1, [sp, 0x10] - ldr r0, _080C32F4 @ =0x0600fd20 - str r0, [sp, 0x14] - ldr r1, _080C32F8 @ =0x0600fe20 - str r1, [sp, 0x18] - ldr r0, _080C32FC @ =0x0600ff20 - mov r10, r0 - ldr r1, _080C3300 @ =0x06010020 - mov r9, r1 -_080C32B2: - cmp r4, 0x6 - bgt _080C3304 - ldrh r0, [r6] - lsls r0, 5 - mov r1, r9 - b _080C3322 - .align 2, 0 -_080C32C0: .4byte gSprites -_080C32C4: .4byte gWindowTemplate_81E7278 -_080C32C8: .4byte 0x06010000 -_080C32CC: .4byte 0x040000d4 -_080C32D0: .4byte 0x85000100 -_080C32D4: .4byte gDisplayedStringBattle -_080C32D8: .4byte gUnknown_083D17E2 -_080C32DC: .4byte gSharedMem + 0x18068 -_080C32E0: .4byte gUnknown_083D1624 -_080C32E4: .4byte REG_BG0CNT -_080C32E8: .4byte 0x06010100 -_080C32EC: .4byte 0x06010200 -_080C32F0: .4byte 0x06010300 -_080C32F4: .4byte 0x0600fd20 -_080C32F8: .4byte 0x0600fe20 -_080C32FC: .4byte 0x0600ff20 -_080C3300: .4byte 0x06010020 -_080C3304: - cmp r4, 0xE - bgt _080C3310 - ldrh r0, [r6, 0x2] - lsls r0, 5 - mov r1, r10 - b _080C3322 -_080C3310: - cmp r4, 0x16 - bgt _080C331C - ldrh r0, [r6, 0x4] - lsls r0, 5 - ldr r1, [sp, 0x18] - b _080C3322 -_080C331C: - ldrh r0, [r6, 0x6] - lsls r0, 5 - ldr r1, [sp, 0x14] -_080C3322: - adds r7, r0, r1 - cmp r4, r5 - beq _080C3382 - ldr r0, _080C33D0 @ =gUnknown_083D16E4 - adds r1, r7, 0 - mov r2, r8 - bl CpuSet - movs r0, 0xC0 - lsls r0, 2 - adds r1, r7, r0 - ldr r0, _080C33D0 @ =gUnknown_083D16E4 - adds r0, 0x20 - mov r2, r8 - bl CpuSet - movs r0, 0x80 - lsls r0, 1 - adds r1, r7, r0 - ldr r0, [sp, 0x10] - mov r2, r8 - bl CpuSet - movs r0, 0x80 - lsls r0, 2 - adds r1, r7, r0 - ldr r0, [sp, 0xC] - mov r2, r8 - bl CpuSet - ldr r1, [sp, 0xC] - adds r1, 0x40 - str r1, [sp, 0xC] - ldr r0, [sp, 0x10] - adds r0, 0x40 - str r0, [sp, 0x10] - ldr r1, [sp, 0x14] - adds r1, 0x20 - str r1, [sp, 0x14] - ldr r0, [sp, 0x18] - adds r0, 0x20 - str r0, [sp, 0x18] - movs r1, 0x20 - add r10, r1 - add r9, r1 - adds r4, 0x1 - cmp r4, r5 - ble _080C32B2 -_080C3382: - ldr r4, _080C33D4 @ =gUnknown_083D1644 - ldr r5, _080C33D8 @ =REG_BG0CNT - adds r0, r4, 0 - adds r1, r7, 0 - adds r2, r5, 0 - bl CpuSet - adds r6, r4, 0 - adds r6, 0x80 - movs r0, 0x80 - lsls r0, 1 - adds r1, r7, r0 - adds r0, r6, 0 - adds r2, r5, 0 - bl CpuSet - movs r0, 0x80 - lsls r0, 2 - adds r1, r7, r0 - adds r0, r6, 0 - adds r2, r5, 0 - bl CpuSet - adds r4, 0x40 - movs r0, 0xC0 - lsls r0, 2 - adds r1, r7, r0 - adds r0, r4, 0 - adds r2, r5, 0 - bl CpuSet - add sp, 0x1C - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080C33D0: .4byte gUnknown_083D16E4 -_080C33D4: .4byte gUnknown_083D1644 -_080C33D8: .4byte REG_BG0CNT - thumb_func_end sub_80C3158 - thumb_func_start sub_80C33DC sub_80C33DC: @ 80C33DC push {r4-r6,lr} diff --git a/src/battle/contest_link_80C2020.c b/src/battle/contest_link_80C2020.c index e56206a9b..57f22b85c 100644 --- a/src/battle/contest_link_80C2020.c +++ b/src/battle/contest_link_80C2020.c @@ -58,6 +58,7 @@ struct UnkEwramStruct18018 { #define eContestLink80C2020Struct2018000 (*(struct UnkEwramStruct18000 *)(gSharedMem + 0x18000)) #define eContestLink80C2020Struct2018018 (*(struct UnkEwramStruct18018 *)(gSharedMem + 0x18018)) +#define eContestLink80C2020Struct2018068 (gSharedMem + 0x18068) static void sub_80C2430(void); static void sub_80C2448(void); @@ -895,13 +896,125 @@ static void LoadAllContestMonIcons(u8 srcOffset, bool8 useDmaNow) sub_80C3024(gContestMons[i].species, i, srcOffset, useDmaNow, gContestMons[i].personality); } } -// -//void sub_80C310C(void) { -// int i; -// -// for (i = 0; i < 4; i++) -// { -// u16 species = mon_icon_convert_unown_species_id(gContestMons[i].species, 0); -// LoadPalette(gMonIconPalettes[gMonIconPaletteIndices[species]], 0xa0 + 0x10 * i, 0x20); -// } -//} + +#ifdef NONMATCHING +void sub_80C310C(void) +{ + int i; + + for (i = 0; i < 4; i++) + { + u16 species = mon_icon_convert_unown_species_id(gContestMons[i].species, 0); + LoadPalette(gMonIconPalettes[gMonIconPaletteIndices[species]], 0xa0 + 0x10 * i, 0x20); + } +} +#else +__attribute__((naked)) void sub_80C310C(void) +{ + asm_unified("\tpush {r4-r6,lr}\n" + "\tmovs r4, 0\n" + "\tldr r6, _080C314C @ =gMonIconPaletteIndices\n" + "\tmovs r5, 0xA0\n" + "\tlsls r5, 16\n" + "_080C3116:\n" + "\tldr r1, _080C3150 @ =gContestMons\n" + "\tlsls r0, r4, 6\n" + "\tadds r0, r1\n" + "\tldrh r0, [r0]\n" + "\tmovs r1, 0\n" + "\tbl mon_icon_convert_unown_species_id\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tadds r0, r6\n" + "\tldrb r0, [r0]\n" + "\tlsls r0, 5\n" + "\tldr r1, _080C3154 @ =gMonIconPalettes\n" + "\tadds r0, r1\n" + "\tlsrs r1, r5, 16\n" + "\tmovs r2, 0x20\n" + "\tbl LoadPalette\n" + "\tmovs r0, 0x80\n" + "\tlsls r0, 13\n" + "\tadds r5, r0\n" + "\tadds r4, 0x1\n" + "\tcmp r4, 0x3\n" + "\tble _080C3116\n" + "\tpop {r4-r6}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_080C314C: .4byte gMonIconPaletteIndices\n" + "_080C3150: .4byte gContestMons\n" + "_080C3154: .4byte gMonIconPalettes"); +} +#endif + +void sub_80C3158(const u8 *string, u8 spriteId) +{ + struct Sprite *sprite = gSprites + spriteId; + u16 sp00[4] = { + sprite->oam.tileNum, + gSprites[sprite->data[0]].oam.tileNum, + gSprites[sprite->data[1]].oam.tileNum, + gSprites[sprite->data[2]].oam.tileNum + }; + int i; + u8 width; + u8 * displayedStringBattle; + void * dest; + + for (i = 0; i < 4; i++) + { + DmaFill32(3, 0, BG_CHAR_ADDR(4) + 32 * sp00[i], 0x400); + } + + width = Text_GetStringWidthFromWindowTemplate(&gWindowTemplate_81E7278, string); + displayedStringBattle = gDisplayedStringBattle; + displayedStringBattle = StringCopy(displayedStringBattle, gUnknown_083D17E2); + if ((~width + 1) & 7) + { + displayedStringBattle[0] = EXT_CTRL_CODE_BEGIN; + displayedStringBattle[1] = 0x11; + displayedStringBattle[2] = ((~width + 1) & 7) / 2; + displayedStringBattle += 3; + } + width = (width + 7) & (~8); + displayedStringBattle = StringCopy(displayedStringBattle, string); + + displayedStringBattle[0] = EXT_CTRL_CODE_BEGIN; + displayedStringBattle[1] = 0x13; + displayedStringBattle[2] = width; + displayedStringBattle[3] = EOS; + + sub_80034D4(eContestLink80C2020Struct2018068, gDisplayedStringBattle); + + CpuCopy32(gUnknown_083D1624, BG_CHAR_ADDR(4) + 32 * sp00[0], 32); + CpuCopy32(gUnknown_083D1624 + 0x40, BG_CHAR_ADDR(4) + 32 * sp00[0] + 0x100, 32); + CpuCopy32(gUnknown_083D1624 + 0x40, BG_CHAR_ADDR(4) + 32 * sp00[0] + 0x200, 32); + CpuCopy32(gUnknown_083D1624 + 0x20, BG_CHAR_ADDR(4) + 32 * sp00[0] + 0x300, 32); + + for (i = 0; i < width / 8; i++) + { + if (i < 7) + dest = (void *)VRAM + 0x10020 + 32 * sp00[0] + 32 * i; + else if (i < 15) + dest = (void *)VRAM + 0x0FF20 + 32 * sp00[0] + 32 * i; + else if (i < 23) + dest = (void *)VRAM + 0x0FE20 + 32 * sp00[0] + 32 * i; + else + dest = (void *)VRAM + 0x0FD20 + 32 * sp00[0] + 32 * i; + + if (i != width / 8) + { + CpuCopy32(gUnknown_083D16E4, dest, 32); + CpuCopy32(gUnknown_083D16E4 + 0x10, dest + 0x300, 32); + CpuCopy32(eContestLink80C2020Struct2018068 + 0x40 * i, dest + 0x100, 32); + CpuCopy32(eContestLink80C2020Struct2018068 + 0x20 + 0x40 * i, dest + 0x200, 32); + } + } + + CpuCopy32(gUnknown_083D1644, dest, 32); + CpuCopy32(gUnknown_083D1644 + 0x40, dest + 0x100, 32); + CpuCopy32(gUnknown_083D1644 + 0x40, dest + 0x200, 32); + CpuCopy32(gUnknown_083D1644 + 0x20, dest + 0x300, 32); +} |