diff options
-rw-r--r-- | asm/contest.s | 1648 | ||||
-rw-r--r-- | include/battle.h | 16 | ||||
-rw-r--r-- | include/battle_anim.h | 14 | ||||
-rw-r--r-- | include/contest.h | 2 | ||||
-rw-r--r-- | include/gba/macro.h | 35 | ||||
-rw-r--r-- | include/gba/types.h | 11 | ||||
-rw-r--r-- | include/global.h | 16 | ||||
-rw-r--r-- | include/graphics.h | 8 | ||||
-rw-r--r-- | src/battle/reshow_battle_screen.c | 10 | ||||
-rw-r--r-- | src/contest.c | 566 | ||||
-rw-r--r-- | src/scene/new_game.c | 3 |
11 files changed, 613 insertions, 1716 deletions
diff --git a/asm/contest.s b/asm/contest.s index c918c7683..7e6baa6e3 100644 --- a/asm/contest.s +++ b/asm/contest.s @@ -5,1654 +5,6 @@ .text - thumb_func_start sub_80B1F4C -sub_80B1F4C: @ 80B1F4C - push {r4,r5,lr} - lsls r0, 24 - lsrs r5, r0, 24 - ldr r2, _080B1F7C @ =gTasks - lsls r0, r5, 2 - adds r0, r5 - lsls r0, 3 - adds r3, r0, r2 - ldrh r0, [r3, 0x1C] - adds r1, r0, 0x1 - strh r1, [r3, 0x1C] - lsls r0, 16 - cmp r0, 0 - blt _080B1FC4 - movs r0, 0 - strh r0, [r3, 0x1C] - movs r1, 0xC - ldrsh r0, [r3, r1] - cmp r0, 0 - ble _080B1F80 - ldrh r0, [r3, 0xA] - adds r0, 0x1 - b _080B1F84 - .align 2, 0 -_080B1F7C: .4byte gTasks -_080B1F80: - ldrh r0, [r3, 0xA] - subs r0, 0x1 -_080B1F84: - strh r0, [r3, 0xA] - lsls r4, r5, 2 - adds r4, r5 - lsls r4, 3 - adds r4, r2 - ldrb r2, [r4, 0xA] - ldrh r3, [r4, 0x8] - movs r0, 0x11 - movs r1, 0x1 - bl BlendPalette - ldrb r2, [r4, 0xA] - ldrh r3, [r4, 0x8] - movs r0, 0x1A - movs r1, 0x1 - bl BlendPalette - movs r2, 0xA - ldrsh r1, [r4, r2] - movs r2, 0xE - ldrsh r0, [r4, r2] - cmp r1, r0 - bne _080B1FC4 - adds r0, r5, 0 - bl DestroyTask - ldr r2, _080B1FCC @ =gSharedMem + 0x19204 - ldrb r1, [r2, 0x7] - movs r0, 0x2 - negs r0, r0 - ands r0, r1 - strb r0, [r2, 0x7] -_080B1FC4: - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_080B1FCC: .4byte gSharedMem + 0x19204 - thumb_func_end sub_80B1F4C - - thumb_func_start sub_80B1FD0 -sub_80B1FD0: @ 80B1FD0 - push {r4-r7,lr} - mov r7, r8 - push {r7} - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - movs r5, 0 - ldr r0, _080B204C @ =gSharedMem + 0x19260 - ldr r6, _080B2050 @ =gSprites - adds r4, r0, 0 - adds r4, 0xD8 - adds r7, r0, 0 -_080B1FE8: - ldrb r1, [r7, 0x10] - movs r0, 0xC0 - ands r0, r1 - cmp r0, 0 - beq _080B2064 - mov r0, r8 - cmp r0, 0 - beq _080B2064 - lsls r0, r5, 24 - lsrs r0, 24 - bl sub_80B208C - ldrb r2, [r4, 0x1] - lsls r1, r2, 4 - adds r1, r2 - lsls r1, 2 - adds r1, r6 - ldrh r1, [r1, 0x4] - lsls r1, 22 - lsrs r1, 17 - ldr r2, _080B2054 @ =0x060100a0 - adds r1, r2 - ldr r2, _080B2058 @ =REG_BG0HOFS - bl CpuSet - ldrb r0, [r4, 0x1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - ldr r2, _080B205C @ =gUnknown_083CA33C - ldr r0, _080B2060 @ =gUnknown_02038696 - adds r0, r5, r0 - ldrb r0, [r0] - adds r0, r2 - ldrb r0, [r0] - strh r0, [r1, 0x22] - ldrb r1, [r4, 0x1] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - adds r0, 0x3E - ldrb r1, [r0] - movs r3, 0x5 - negs r3, r3 - adds r2, r3, 0 - ands r1, r2 - b _080B2076 - .align 2, 0 -_080B204C: .4byte gSharedMem + 0x19260 -_080B2050: .4byte gSprites -_080B2054: .4byte 0x060100a0 -_080B2058: .4byte REG_BG0HOFS -_080B205C: .4byte gUnknown_083CA33C -_080B2060: .4byte gUnknown_02038696 -_080B2064: - ldrb r1, [r4, 0x1] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - adds r0, 0x3E - ldrb r1, [r0] - movs r2, 0x4 - orrs r1, r2 -_080B2076: - strb r1, [r0] - adds r4, 0x4 - adds r7, 0x1C - adds r5, 0x1 - cmp r5, 0x3 - ble _080B1FE8 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_80B1FD0 - - thumb_func_start sub_80B208C -sub_80B208C: @ 80B208C - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - ldr r0, _080B20B0 @ =gSharedMem + 0x19260 - adds r2, r1, r0 - ldrb r1, [r2, 0x10] - movs r0, 0xC0 - ands r0, r1 - cmp r0, 0x40 - bne _080B20B8 - ldrb r0, [r2, 0x19] - lsls r0, 6 - ldr r1, _080B20B4 @ =gContestNextTurnNumbersGfx - adds r0, r1 - b _080B20BA - .align 2, 0 -_080B20B0: .4byte gSharedMem + 0x19260 -_080B20B4: .4byte gContestNextTurnNumbersGfx -_080B20B8: - ldr r0, _080B20C0 @ =gContestNextTurnRandomGfx -_080B20BA: - pop {r1} - bx r1 - .align 2, 0 -_080B20C0: .4byte gContestNextTurnRandomGfx - thumb_func_end sub_80B208C - - thumb_func_start sub_80B20C4 -sub_80B20C4: @ 80B20C4 - push {r4-r7,lr} - movs r6, 0 - ldr r7, _080B2134 @ =gSharedMem + 0x192DD -_080B20CA: - adds r0, r6, r7 - ldrb r0, [r0] - cmp r0, 0 - beq _080B2126 - lsls r0, r6, 24 - lsrs r5, r0, 24 - adds r0, r5, 0 - bl sub_80AF59C - lsls r0, 24 - cmp r0, 0 - bne _080B2126 - ldr r0, _080B2138 @ =gUnknown_02038696 - adds r0, r6, r0 - ldrb r0, [r0] - lsls r4, r0, 2 - adds r4, r0 - adds r4, 0x2 - lsls r4, 24 - lsrs r4, 24 - adds r0, r5, 0 - movs r1, 0x3 - bl sub_80AEFE8 - lsls r0, 16 - lsrs r0, 16 - lsls r4, 6 - ldr r2, _080B213C @ =0x0600c028 - adds r1, r4, r2 - strh r0, [r1] - ldr r1, _080B2140 @ =0x0600c02a - adds r2, r4, r1 - adds r1, r0, 0x1 - strh r1, [r2] - ldr r1, _080B2144 @ =0x0600c068 - adds r2, r4, r1 - adds r1, r0, 0 - adds r1, 0x10 - strh r1, [r2] - ldr r2, _080B2148 @ =0x0600c06a - adds r4, r2 - adds r0, 0x11 - strh r0, [r4] - movs r0, 0x63 - bl PlaySE -_080B2126: - adds r6, 0x1 - cmp r6, 0x3 - ble _080B20CA - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B2134: .4byte gSharedMem + 0x192DD -_080B2138: .4byte gUnknown_02038696 -_080B213C: .4byte 0x0600c028 -_080B2140: .4byte 0x0600c02a -_080B2144: .4byte 0x0600c068 -_080B2148: .4byte 0x0600c06a - thumb_func_end sub_80B20C4 - - thumb_func_start sub_80B214C -sub_80B214C: @ 80B214C - push {lr} - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - ldr r0, _080B2178 @ =gSharedMem + 0x19260 - adds r2, r1, r0 - ldrb r1, [r2, 0x15] - movs r3, 0x1 - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - bne _080B2172 - ldrb r1, [r2, 0xC] - adds r0, r3, 0 - ands r0, r1 - cmp r0, 0 - beq _080B217C -_080B2172: - movs r0, 0 - b _080B217E - .align 2, 0 -_080B2178: .4byte gSharedMem + 0x19260 -_080B217C: - movs r0, 0x1 -_080B217E: - pop {r1} - bx r1 - thumb_func_end sub_80B214C - - thumb_func_start sub_80B2184 -sub_80B2184: @ 80B2184 - push {r4-r7,lr} - sub sp, 0x4 - ldr r4, _080B2250 @ =REG_BG1CNT - ldrb r1, [r4] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - strb r0, [r4] - ldrb r1, [r4, 0x1] - movs r0, 0x3F - ands r0, r1 - movs r1, 0x40 - orrs r0, r1 - strb r0, [r4, 0x1] - ldrb r1, [r4, 0x1] - movs r0, 0x21 - negs r0, r0 - ands r0, r1 - strb r0, [r4, 0x1] - ldr r0, _080B2254 @ =gUnknown_030042C0 - movs r2, 0xF0 - strh r2, [r0] - ldr r0, _080B2258 @ =gUnknown_030041B4 - movs r1, 0xA0 - strh r1, [r0] - ldr r0, _080B225C @ =REG_BG1HOFS - strh r2, [r0] - adds r0, 0x2 - strh r1, [r0] - ldr r1, _080B2260 @ =0x0600f000 - movs r0, 0 - str r0, [sp] - ldr r0, _080B2264 @ =0x040000d4 - mov r2, sp - str r2, [r0] - str r1, [r0, 0x4] - ldr r2, _080B2268 @ =0x85000400 - str r2, [r0, 0x8] - ldr r0, [r0, 0x8] - ldr r0, _080B226C @ =gUnknown_08D17C3C - bl LZDecompressVram - ldrb r1, [r4] - movs r2, 0xD - negs r2, r2 - adds r0, r2, 0 - ands r0, r1 - strb r0, [r4] - movs r4, 0 - ldr r6, _080B2270 @ =gSprites - adds r7, r2, 0 - movs r5, 0x4 - ldr r3, _080B2274 @ =gSharedMem + 0x19338 -_080B21EE: - ldrb r0, [r3] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - ldrb r2, [r1, 0x5] - adds r0, r7, 0 - ands r0, r2 - orrs r0, r5 - strb r0, [r1, 0x5] - ldrb r0, [r3, 0x1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - ldrb r2, [r1, 0x5] - adds r0, r7, 0 - ands r0, r2 - orrs r0, r5 - strb r0, [r1, 0x5] - adds r3, 0x4 - adds r4, 0x1 - cmp r4, 0x3 - ble _080B21EE - ldr r3, _080B2278 @ =REG_BG2CNT - ldrb r2, [r3] - movs r1, 0x4 - negs r1, r1 - adds r0, r1, 0 - ands r0, r2 - movs r4, 0x1 - orrs r0, r4 - strb r0, [r3] - ldr r2, _080B227C @ =REG_BG0CNT - ldrb r0, [r2] - ands r1, r0 - orrs r1, r4 - strb r1, [r2] - adds r2, 0x2 - ldrb r1, [r2, 0x1] - movs r0, 0x3F - ands r0, r1 - movs r1, 0x80 - orrs r0, r1 - strb r0, [r2, 0x1] - add sp, 0x4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B2250: .4byte REG_BG1CNT -_080B2254: .4byte gUnknown_030042C0 -_080B2258: .4byte gUnknown_030041B4 -_080B225C: .4byte REG_BG1HOFS -_080B2260: .4byte 0x0600f000 -_080B2264: .4byte 0x040000d4 -_080B2268: .4byte 0x85000400 -_080B226C: .4byte gUnknown_08D17C3C -_080B2270: .4byte gSprites -_080B2274: .4byte gSharedMem + 0x19338 -_080B2278: .4byte REG_BG2CNT -_080B227C: .4byte REG_BG0CNT - thumb_func_end sub_80B2184 - - thumb_func_start sub_80B2280 -sub_80B2280: @ 80B2280 - push {r4-r7,lr} - mov r7, r8 - push {r7} - sub sp, 0x4 - ldr r2, _080B2358 @ =0x06008000 - movs r3, 0x80 - lsls r3, 6 - ldr r0, _080B235C @ =gUnknown_030042C0 - mov r12, r0 - ldr r0, _080B2360 @ =gUnknown_030041B4 - mov r8, r0 - movs r5, 0 - ldr r1, _080B2364 @ =0x040000d4 - movs r4, 0x80 - lsls r4, 5 - ldr r6, _080B2368 @ =0x85000400 - movs r7, 0x85 - lsls r7, 24 -_080B22A4: - str r5, [sp] - mov r0, sp - str r0, [r1] - str r2, [r1, 0x4] - str r6, [r1, 0x8] - ldr r0, [r1, 0x8] - adds r2, r4 - subs r3, r4 - cmp r3, r4 - bhi _080B22A4 - str r5, [sp] - mov r0, sp - str r0, [r1] - str r2, [r1, 0x4] - lsrs r0, r3, 2 - orrs r0, r7 - str r0, [r1, 0x8] - ldr r0, [r1, 0x8] - ldr r1, _080B236C @ =0x0600f000 - movs r2, 0 - str r2, [sp] - ldr r0, _080B2364 @ =0x040000d4 - mov r3, sp - str r3, [r0] - str r1, [r0, 0x4] - ldr r1, _080B2368 @ =0x85000400 - str r1, [r0, 0x8] - ldr r0, [r0, 0x8] - mov r0, r12 - strh r2, [r0] - mov r3, r8 - strh r2, [r3] - ldr r2, _080B2370 @ =REG_BG1CNT - ldrb r1, [r2] - movs r0, 0x4 - negs r0, r0 - ands r0, r1 - movs r1, 0x1 - orrs r0, r1 - strb r0, [r2] - ldrb r1, [r2, 0x1] - movs r0, 0x3F - ands r0, r1 - strb r0, [r2, 0x1] - ldrb r1, [r2, 0x1] - movs r0, 0x21 - negs r0, r0 - ands r0, r1 - strb r0, [r2, 0x1] - ldrb r1, [r2] - movs r3, 0xD - negs r3, r3 - adds r0, r3, 0 - ands r0, r1 - movs r1, 0x8 - orrs r0, r1 - strb r0, [r2] - movs r4, 0 - ldr r5, _080B2374 @ =gSprites - adds r6, r3, 0 - ldr r3, _080B2378 @ =gSharedMem + 0x19338 -_080B231E: - ldrb r0, [r3] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - ldrb r2, [r1, 0x5] - adds r0, r6, 0 - ands r0, r2 - strb r0, [r1, 0x5] - ldrb r0, [r3, 0x1] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - ldrb r2, [r1, 0x5] - adds r0, r6, 0 - ands r0, r2 - strb r0, [r1, 0x5] - adds r3, 0x4 - adds r4, 0x1 - cmp r4, 0x3 - ble _080B231E - add sp, 0x4 - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B2358: .4byte 0x06008000 -_080B235C: .4byte gUnknown_030042C0 -_080B2360: .4byte gUnknown_030041B4 -_080B2364: .4byte 0x040000d4 -_080B2368: .4byte 0x85000400 -_080B236C: .4byte 0x0600f000 -_080B2370: .4byte REG_BG1CNT -_080B2374: .4byte gSprites -_080B2378: .4byte gSharedMem + 0x19338 - thumb_func_end sub_80B2280 - - thumb_func_start sub_80B237C -sub_80B237C: @ 80B237C - push {r4,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r1, _080B23AC @ =gUnknown_030042C0 - movs r0, 0 - strh r0, [r1] - ldr r1, _080B23B0 @ =gUnknown_030041B4 - movs r0, 0xA0 - strh r0, [r1] - movs r0, 0x62 - movs r1, 0 - bl PlaySE12WithPanning - ldr r1, _080B23B4 @ =gTasks - lsls r0, r4, 2 - adds r0, r4 - lsls r0, 3 - adds r0, r1 - ldr r1, _080B23B8 @ =sub_80B23BC - str r1, [r0] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B23AC: .4byte gUnknown_030042C0 -_080B23B0: .4byte gUnknown_030041B4 -_080B23B4: .4byte gTasks -_080B23B8: .4byte sub_80B23BC - thumb_func_end sub_80B237C - - thumb_func_start sub_80B23BC -sub_80B23BC: @ 80B23BC - push {lr} - lsls r0, 24 - lsrs r3, r0, 24 - ldr r1, _080B23F4 @ =gUnknown_030041B4 - ldrh r0, [r1] - subs r0, 0x7 - strh r0, [r1] - lsls r0, 16 - cmp r0, 0 - bge _080B23D4 - movs r0, 0 - strh r0, [r1] -_080B23D4: - ldrh r2, [r1] - cmp r2, 0 - bne _080B23EE - ldr r0, _080B23F8 @ =gTasks - lsls r1, r3, 2 - adds r1, r3 - lsls r1, 3 - adds r1, r0 - strh r2, [r1, 0x8] - strh r2, [r1, 0xA] - strh r2, [r1, 0xC] - ldr r0, _080B23FC @ =sub_80B2400 - str r0, [r1] -_080B23EE: - pop {r0} - bx r0 - .align 2, 0 -_080B23F4: .4byte gUnknown_030041B4 -_080B23F8: .4byte gTasks -_080B23FC: .4byte sub_80B2400 - thumb_func_end sub_80B23BC - - thumb_func_start sub_80B2400 -sub_80B2400: @ 80B2400 - push {r4-r6,lr} - lsls r0, 24 - lsrs r4, r0, 24 - ldr r1, _080B2424 @ =gTasks - lsls r3, r4, 2 - adds r0, r3, r4 - lsls r0, 3 - adds r5, r0, r1 - movs r0, 0x8 - ldrsh r1, [r5, r0] - cmp r1, 0x1 - beq _080B247C - cmp r1, 0x1 - bgt _080B2428 - cmp r1, 0 - beq _080B2432 - b _080B24FC - .align 2, 0 -_080B2424: .4byte gTasks -_080B2428: - cmp r1, 0x2 - beq _080B24D6 - cmp r1, 0x3 - beq _080B24EC - b _080B24FC -_080B2432: - movs r2, 0 - adds r6, r3, 0 - ldr r5, _080B2470 @ =gSharedMem + 0x19218 - ldr r3, _080B2474 @ =gUnknown_02038696 -_080B243A: - adds r0, r2, r5 - adds r1, r2, r3 - ldrb r1, [r1] - strb r1, [r0] - adds r2, 0x1 - cmp r2, 0x3 - ble _080B243A - bl sub_80AFA5C - bl sub_80B0588 - bl sub_80AEF50 - bl sub_80B1118 - movs r0, 0x1 - bl sub_80B1FD0 - bl sub_80AFFA0 - ldr r0, _080B2478 @ =gTasks - adds r1, r6, r4 - lsls r1, 3 - adds r1, r0 - movs r0, 0x1 - strh r0, [r1, 0x8] - b _080B24FC - .align 2, 0 -_080B2470: .4byte gSharedMem + 0x19218 -_080B2474: .4byte gUnknown_02038696 -_080B2478: .4byte gTasks -_080B247C: - ldr r0, _080B24C0 @ =gIsLinkContest - ldrb r0, [r0] - ands r1, r0 - cmp r1, 0 - beq _080B24D0 - ldr r2, _080B24C4 @ =gSharedMem + 0x19204 - ldrb r0, [r2, 0x7] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r2, 0x7] - bl sub_80AE074 - lsls r0, 24 - cmp r0, 0 - beq _080B249E - bl sub_80AF438 -_080B249E: - ldr r4, _080B24C8 @ =sub_80C8C80 - adds r0, r4, 0 - movs r1, 0 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080B24CC @ =sub_80AD8DC - adds r1, r4, 0 - bl SetTaskFuncWithFollowupFunc - bl sub_80AF860 - movs r0, 0x2 - strh r0, [r5, 0x8] - b _080B24FC - .align 2, 0 -_080B24C0: .4byte gIsLinkContest -_080B24C4: .4byte gSharedMem + 0x19204 -_080B24C8: .4byte sub_80C8C80 -_080B24CC: .4byte sub_80AD8DC -_080B24D0: - bl sub_80AF438 - b _080B24E2 -_080B24D6: - ldr r0, _080B24E8 @ =gSharedMem + 0x19204 - ldrb r1, [r0, 0x7] - movs r0, 0x4 - ands r0, r1 - cmp r0, 0 - bne _080B24FC -_080B24E2: - movs r0, 0x3 - strh r0, [r5, 0x8] - b _080B24FC - .align 2, 0 -_080B24E8: .4byte gSharedMem + 0x19204 -_080B24EC: - bl sub_80AF120 - bl sub_80AEB30 - movs r0, 0 - strh r0, [r5, 0x8] - ldr r0, _080B2504 @ =sub_80B253C - str r0, [r5] -_080B24FC: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B2504: .4byte sub_80B253C - thumb_func_end sub_80B2400 - - thumb_func_start sub_80B2508 -sub_80B2508: @ 80B2508 - push {lr} - lsls r0, 24 - lsrs r2, r0, 24 - ldr r1, _080B2530 @ =gUnknown_030041B4 - ldrh r0, [r1] - adds r0, 0x7 - strh r0, [r1] - lsls r0, 16 - asrs r0, 16 - cmp r0, 0xA0 - ble _080B252C - ldr r0, _080B2534 @ =gTasks - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r0 - ldr r0, _080B2538 @ =sub_80ADCDC - str r0, [r1] -_080B252C: - pop {r0} - bx r0 - .align 2, 0 -_080B2530: .4byte gUnknown_030041B4 -_080B2534: .4byte gTasks -_080B2538: .4byte sub_80ADCDC - thumb_func_end sub_80B2508 - - thumb_func_start sub_80B253C -sub_80B253C: @ 80B253C - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080B255C @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - ldrh r2, [r1, 0xC] - movs r3, 0xC - ldrsh r0, [r1, r3] - cmp r0, 0x9 - bgt _080B2560 - adds r0, r2, 0x1 - strh r0, [r1, 0xC] - b _080B259C - .align 2, 0 -_080B255C: .4byte gTasks -_080B2560: - ldrh r3, [r1, 0xA] - movs r4, 0xA - ldrsh r0, [r1, r4] - cmp r0, 0 - bne _080B257E - ldrh r2, [r1, 0x8] - movs r4, 0x8 - ldrsh r0, [r1, r4] - cmp r0, 0x10 - bne _080B257A - adds r0, r3, 0x1 - strh r0, [r1, 0xA] - b _080B259C -_080B257A: - adds r0, r2, 0x1 - b _080B259A -_080B257E: - ldrh r0, [r1, 0x8] - movs r3, 0x8 - ldrsh r2, [r1, r3] - cmp r2, 0 - bne _080B2598 - strh r2, [r1, 0xA] - strh r2, [r1, 0xC] - ldr r0, _080B2594 @ =sub_80B25A4 - str r0, [r1] - b _080B259C - .align 2, 0 -_080B2594: .4byte sub_80B25A4 -_080B2598: - subs r0, 0x1 -_080B259A: - strh r0, [r1, 0x8] -_080B259C: - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_80B253C - - thumb_func_start sub_80B25A4 -sub_80B25A4: @ 80B25A4 - push {r4,lr} - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080B25C4 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r4, r1, r2 - ldrh r1, [r4, 0xC] - movs r2, 0xC - ldrsh r0, [r4, r2] - cmp r0, 0x9 - bgt _080B25C8 - adds r0, r1, 0x1 - strh r0, [r4, 0xC] - b _080B25D8 - .align 2, 0 -_080B25C4: .4byte gTasks -_080B25C8: - movs r0, 0 - strh r0, [r4, 0xC] - movs r0, 0x61 - movs r1, 0 - bl PlaySE12WithPanning - ldr r0, _080B25E0 @ =sub_80B2508 - str r0, [r4] -_080B25D8: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B25E0: .4byte sub_80B2508 - thumb_func_end sub_80B25A4 - - thumb_func_start sub_80B25E4 -sub_80B25E4: @ 80B25E4 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - movs r6, 0 - ldr r5, _080B26B4 @ =gSprites -_080B25F6: - bl AllocOamMatrix - lsls r1, r6, 2 - ldr r2, _080B26B8 @ =gSharedMem + 0x19338 - mov r8, r2 - adds r4, r1, r2 - ldrb r1, [r4] - lsls r3, r1, 4 - adds r3, r1 - lsls r3, 2 - adds r3, r5 - lsls r0, 24 - lsrs r0, 24 - movs r1, 0x1F - ands r0, r1 - lsls r0, 1 - ldrb r1, [r3, 0x3] - movs r7, 0x3F - negs r7, r7 - adds r2, r7, 0 - ands r1, r2 - orrs r1, r0 - strb r1, [r3, 0x3] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - ldrb r2, [r0, 0x1] - movs r3, 0x4 - negs r3, r3 - adds r1, r3, 0 - ands r2, r1 - movs r1, 0x1 - orrs r2, r1 - strb r2, [r0, 0x1] - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - mov r1, r9 - bl StartSpriteAffineAnim - mov r7, r9 - cmp r7, 0x2 - bne _080B267A - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - bl AnimateSprite - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r5 - adds r0, 0x3E - ldrb r1, [r0] - movs r3, 0x5 - negs r3, r3 - adds r2, r3, 0 - ands r1, r2 - strb r1, [r0] -_080B267A: - adds r6, 0x1 - cmp r6, 0x3 - ble _080B25F6 - ldr r0, _080B26BC @ =sub_80B26C8 - movs r1, 0x5 - bl CreateTask - lsls r0, 24 - lsrs r0, 24 - ldr r2, _080B26C0 @ =gTasks - lsls r1, r0, 2 - adds r1, r0 - lsls r1, 3 - adds r1, r2 - mov r7, r9 - strh r7, [r1, 0x8] - ldr r2, _080B26C4 @ =0xfffffecc - add r2, r8 - ldrb r0, [r2, 0x7] - movs r1, 0x2 - orrs r0, r1 - strb r0, [r2, 0x7] - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B26B4: .4byte gSprites -_080B26B8: .4byte gSharedMem + 0x19338 -_080B26BC: .4byte sub_80B26C8 -_080B26C0: .4byte gTasks -_080B26C4: .4byte 0xfffffecc - thumb_func_end sub_80B25E4 - - thumb_func_start sub_80B26C8 -sub_80B26C8: @ 80B26C8 - push {r4-r6,lr} - lsls r0, 24 - lsrs r6, r0, 24 - ldr r2, _080B2750 @ =gSprites - ldr r4, _080B2754 @ =gSharedMem + 0x19338 - ldrb r1, [r4] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - adds r0, 0x3F - ldrb r0, [r0] - lsls r0, 26 - cmp r0, 0 - bge _080B274A - ldr r0, _080B2758 @ =gTasks - lsls r1, r6, 2 - adds r1, r6 - lsls r1, 3 - adds r1, r0 - ldrb r0, [r1, 0x8] - cmp r0, 0x1 - bne _080B2718 - adds r5, r2, 0 - movs r3, 0x4 - adds r2, r4, 0 - movs r4, 0x3 -_080B26FE: - ldrb r0, [r2] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r5 - adds r1, 0x3E - ldrb r0, [r1] - orrs r0, r3 - strb r0, [r1] - adds r2, 0x4 - subs r4, 0x1 - cmp r4, 0 - bge _080B26FE -_080B2718: - movs r4, 0 -_080B271A: - lsls r0, r4, 2 - ldr r5, _080B2754 @ =gSharedMem + 0x19338 - adds r0, r5 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _080B2750 @ =gSprites - adds r0, r1 - bl FreeSpriteOamMatrix - adds r4, 0x1 - cmp r4, 0x3 - ble _080B271A - ldr r0, _080B275C @ =0xfffffecc - adds r2, r5, r0 - ldrb r1, [r2, 0x7] - movs r0, 0x3 - negs r0, r0 - ands r0, r1 - strb r0, [r2, 0x7] - adds r0, r6, 0 - bl DestroyTask -_080B274A: - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B2750: .4byte gSprites -_080B2754: .4byte gSharedMem + 0x19338 -_080B2758: .4byte gTasks -_080B275C: .4byte 0xfffffecc - thumb_func_end sub_80B26C8 - - thumb_func_start sub_80B2760 -sub_80B2760: @ 80B2760 - push {lr} - lsls r0, 16 - lsrs r1, r0, 16 - movs r0, 0xB1 - lsls r0, 1 - cmp r1, r0 - bls _080B2770 - movs r1, 0x1 -_080B2770: - adds r0, r1, 0 - pop {r1} - bx r1 - thumb_func_end sub_80B2760 - - thumb_func_start sub_80B2778 -sub_80B2778: @ 80B2778 - push {lr} - lsls r0, 16 - lsrs r1, r0, 16 - ldr r0, _080B278C @ =0x0000019b - cmp r1, r0 - bls _080B2786 - movs r1, 0 -_080B2786: - adds r0, r1, 0 - pop {r1} - bx r1 - .align 2, 0 -_080B278C: .4byte 0x0000019b - thumb_func_end sub_80B2778 - - thumb_func_start sub_80B2790 -sub_80B2790: @ 80B2790 - push {r4-r7,lr} - lsls r0, 24 - lsrs r6, r0, 24 - lsls r0, r6, 3 - subs r0, r6 - lsls r0, 2 - ldr r4, _080B27F0 @ =gSharedMem + 0x19260 - adds r0, r4 - ldrh r0, [r0, 0x6] - bl sub_80B2760 - lsls r0, 16 - lsrs r5, r0, 16 - ldr r1, _080B27F4 @ =gContestMons - lsls r0, r6, 6 - adds r0, r1 - ldrh r0, [r0] - bl sub_80B2778 - lsls r0, 16 - lsrs r7, r0, 16 - adds r4, 0xE8 - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x14 - bl memset - bl battle_anim_clear_some_data - ldr r1, _080B27F8 @ =gBattleMonForms - movs r2, 0 - adds r0, r1, 0x3 -_080B27D0: - strb r2, [r0] - subs r0, 0x1 - cmp r0, r1 - bge _080B27D0 - cmp r5, 0x90 - beq _080B2848 - cmp r5, 0x90 - bgt _080B2806 - cmp r5, 0x4C - beq _080B2898 - cmp r5, 0x4C - bgt _080B27FC - cmp r5, 0xD - beq _080B2898 - b _080B28BE - .align 2, 0 -_080B27F0: .4byte gSharedMem + 0x19260 -_080B27F4: .4byte gContestMons -_080B27F8: .4byte gBattleMonForms -_080B27FC: - cmp r5, 0x82 - beq _080B2898 - cmp r5, 0x8F - beq _080B2898 - b _080B28BE -_080B2806: - cmp r5, 0xD8 - beq _080B2880 - cmp r5, 0xD8 - bgt _080B2814 - cmp r5, 0xAE - beq _080B2822 - b _080B28BE -_080B2814: - cmp r5, 0xDA - beq _080B288C - movs r0, 0x88 - lsls r0, 1 - cmp r5, r0 - beq _080B2848 - b _080B28BE -_080B2822: - ldr r0, _080B2840 @ =gBaseStats - lsls r1, r7, 3 - subs r1, r7 - lsls r1, 2 - adds r1, r0 - ldrb r0, [r1, 0x6] - cmp r0, 0x7 - beq _080B2838 - ldrb r0, [r1, 0x7] - cmp r0, 0x7 - bne _080B28B8 -_080B2838: - ldr r1, _080B2844 @ =gUnknown_0202F7C4 - movs r0, 0 - b _080B28BC - .align 2, 0 -_080B2840: .4byte gBaseStats -_080B2844: .4byte gUnknown_0202F7C4 -_080B2848: - lsls r0, r6, 3 - subs r0, r6 - lsls r0, 2 - ldr r4, _080B2878 @ =gSharedMem + 0x19260 - adds r0, r4 - ldrb r5, [r0, 0x1B] - ldr r6, _080B287C @ =gContestMons - lsls r5, 6 - adds r0, r5, r6 - ldrh r0, [r0] - bl sub_80B2778 - adds r4, 0xE8 - strh r0, [r4, 0x2] - adds r6, 0x38 - adds r5, r6 - ldr r0, [r5] - str r0, [r4, 0x10] - ldrb r0, [r4, 0x4] - movs r1, 0x1 - orrs r0, r1 - strb r0, [r4, 0x4] - b _080B28BE - .align 2, 0 -_080B2878: .4byte gSharedMem + 0x19260 -_080B287C: .4byte gContestMons -_080B2880: - ldr r1, _080B2888 @ =gHappinessMoveAnim - movs r0, 0xFF - b _080B28BC - .align 2, 0 -_080B2888: .4byte gHappinessMoveAnim -_080B288C: - ldr r1, _080B2894 @ =gHappinessMoveAnim - movs r0, 0 - b _080B28BC - .align 2, 0 -_080B2894: .4byte gHappinessMoveAnim -_080B2898: - ldr r0, _080B28B0 @ =gSharedMem + 0x19204 - adds r2, r0, 0 - adds r2, 0x5A - ldrb r1, [r2] - cmp r1, 0 - bne _080B28B8 - movs r0, 0x2 - strb r0, [r2] - ldr r0, _080B28B4 @ =gUnknown_0202F7C4 - strb r1, [r0] - b _080B28BE - .align 2, 0 -_080B28B0: .4byte gSharedMem + 0x19204 -_080B28B4: .4byte gUnknown_0202F7C4 -_080B28B8: - ldr r1, _080B28C8 @ =gUnknown_0202F7C4 - movs r0, 0x1 -_080B28BC: - strb r0, [r1] -_080B28BE: - bl sub_80B2968 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_080B28C8: .4byte gUnknown_0202F7C4 - thumb_func_end sub_80B2790 - - thumb_func_start sub_80B28CC -sub_80B28CC: @ 80B28CC - push {r4,lr} - ldr r4, _080B28EC @ =gSharedMem + 0x19348 - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x14 - bl memset - subs r4, 0xEA - ldrb r0, [r4] - cmp r0, 0 - beq _080B28E6 - subs r0, 0x1 - strb r0, [r4] -_080B28E6: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B28EC: .4byte gSharedMem + 0x19348 - thumb_func_end sub_80B28CC - - thumb_func_start sub_80B28F0 -sub_80B28F0: @ 80B28F0 - push {r4-r6,lr} - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r6, _080B2924 @ =gSharedMem + 0x19348 - strb r4, [r6, 0x5] - ldr r5, _080B2928 @ =gContestMons - lsls r4, 6 - adds r0, r4, r5 - ldrh r0, [r0] - bl sub_80B2778 - strh r0, [r6] - adds r0, r5, 0 - adds r0, 0x38 - adds r0, r4, r0 - ldr r0, [r0] - str r0, [r6, 0x8] - adds r5, 0x3C - adds r4, r5 - ldr r0, [r4] - str r0, [r6, 0xC] - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_080B2924: .4byte gSharedMem + 0x19348 -_080B2928: .4byte gContestMons - thumb_func_end sub_80B28F0 - - thumb_func_start sub_80B292C -sub_80B292C: @ 80B292C - push {lr} - ldr r0, _080B2958 @ =SpriteCallbackDummy - bl CreateInvisibleSpriteWithCallback - ldr r1, _080B295C @ =gObjectBankIDs - strb r0, [r1, 0x3] - ldr r0, _080B2960 @ =gBankTarget - ldrb r0, [r0] - adds r0, r1 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _080B2964 @ =gSprites - adds r0, r1 - bl InitSpriteAffineAnim - bl sub_80B2968 - pop {r0} - bx r0 - .align 2, 0 -_080B2958: .4byte SpriteCallbackDummy -_080B295C: .4byte gObjectBankIDs -_080B2960: .4byte gBankTarget -_080B2964: .4byte gSprites - thumb_func_end sub_80B292C - - thumb_func_start sub_80B2968 -sub_80B2968: @ 80B2968 - push {r4,lr} - ldr r0, _080B29AC @ =gObjectBankIDs - ldrb r0, [r0, 0x3] - lsls r4, r0, 4 - adds r4, r0 - lsls r4, 2 - ldr r0, _080B29B0 @ =gSprites - adds r4, r0 - movs r0, 0 - strh r0, [r4, 0x24] - strh r0, [r4, 0x26] - movs r0, 0x3 - movs r1, 0 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x20] - movs r0, 0x3 - movs r1, 0x1 - bl sub_8077ABC - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4, 0x22] - adds r4, 0x3E - ldrb r0, [r4] - movs r1, 0x4 - orrs r0, r1 - strb r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_080B29AC: .4byte gObjectBankIDs -_080B29B0: .4byte gSprites - thumb_func_end sub_80B2968 - - thumb_func_start sub_80B29B4 -sub_80B29B4: @ 80B29B4 - push {lr} - lsls r0, 16 - lsrs r0, 16 - ldr r2, _080B29D4 @ =gBattleMoves - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 2 - adds r1, r2 - ldrb r0, [r1, 0x6] - cmp r0, 0x20 - bhi _080B2A6C - lsls r0, 2 - ldr r1, _080B29D8 @ =_080B29DC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080B29D4: .4byte gBattleMoves -_080B29D8: .4byte _080B29DC - .align 2, 0 -_080B29DC: - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A60 - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A60 - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A6C - .4byte _080B2A6C -_080B2A60: - ldr r1, _080B2A68 @ =gBankTarget - movs r0, 0x2 - b _080B2A70 - .align 2, 0 -_080B2A68: .4byte gBankTarget -_080B2A6C: - ldr r1, _080B2A78 @ =gBankTarget - movs r0, 0x3 -_080B2A70: - strb r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_080B2A78: .4byte gBankTarget - thumb_func_end sub_80B29B4 - - thumb_func_start sub_80B2A7C -sub_80B2A7C: @ 80B2A7C - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x4 - lsls r0, 24 - lsrs r0, 24 - mov r9, r0 - bl Random - lsls r0, 16 - lsrs r0, 16 - movs r1, 0x3 - bl __umodsi3 - lsls r0, 24 - lsrs r7, r0, 24 - movs r6, 0 - ldr r1, _080B2AC8 @ =gUnknown_02038690 - ldrb r0, [r1] - cmp r0, 0 - beq _080B2AB6 -_080B2AA8: - adds r6, 0x1 - cmp r6, 0x2 - bgt _080B2AB6 - adds r0, r6, r1 - ldrb r0, [r0] - cmp r0, 0 - bne _080B2AA8 -_080B2AB6: - mov r0, r9 - cmp r0, 0xFF - bne _080B2AD0 - ldr r0, _080B2ACC @ =gContestPlayerMonIndex - ldrb r0, [r0] - cmp r6, r0 - beq _080B2AD0 - movs r0, 0 - b _080B2C38 - .align 2, 0 -_080B2AC8: .4byte gUnknown_02038690 -_080B2ACC: .4byte gContestPlayerMonIndex -_080B2AD0: - ldr r0, _080B2AE4 @ =gScriptContestCategory - ldrh r0, [r0] - cmp r0, 0x4 - bhi _080B2B16 - lsls r0, 2 - ldr r1, _080B2AE8 @ =_080B2AEC - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_080B2AE4: .4byte gScriptContestCategory -_080B2AE8: .4byte _080B2AEC - .align 2, 0 -_080B2AEC: - .4byte _080B2B16 - .4byte _080B2B00 - .4byte _080B2B04 - .4byte _080B2B08 - .4byte _080B2B0E -_080B2B00: - adds r0, r7, 0x3 - b _080B2B12 -_080B2B04: - adds r0, r7, 0x6 - b _080B2B12 -_080B2B08: - adds r0, r7, 0 - adds r0, 0x9 - b _080B2B12 -_080B2B0E: - adds r0, r7, 0 - adds r0, 0xC -_080B2B12: - lsls r0, 24 - lsrs r7, r0, 24 -_080B2B16: - mov r1, r9 - cmp r1, 0xFE - beq _080B2BC4 - mov r0, r9 - movs r1, 0x1 - bl sub_80B2C4C - adds r4, r0, 0 - lsls r4, 24 - ldr r2, _080B2B98 @ =gSaveBlock1 - lsrs r4, 19 - ldr r0, _080B2B9C @ =0x00002dfc - adds r1, r2, r0 - adds r1, r4, r1 - ldr r5, _080B2BA0 @ =gContestMons - lsls r6, 6 - adds r0, r5, 0 - adds r0, 0x38 - adds r0, r6, r0 - ldr r0, [r0] - str r0, [r1] - adds r1, r4, r2 - mov r8, r1 - adds r0, r6, r5 - ldrh r1, [r0] - ldr r0, _080B2BA4 @ =0x00002e04 - add r0, r8 - strh r1, [r0] - movs r0, 0xB8 - lsls r0, 6 - adds r1, r2, r0 - adds r1, r4, r1 - adds r0, r5, 0 - adds r0, 0x3C - adds r0, r6, r0 - ldr r0, [r0] - str r0, [r1] - ldr r1, _080B2BA8 @ =0x00002e07 - adds r0, r2, r1 - adds r0, r4, r0 - adds r1, r5, 0x2 - adds r1, r6, r1 - str r2, [sp] - bl StringCopy - ldr r2, [sp] - ldr r0, _080B2BAC @ =0x00002e12 - adds r2, r0 - adds r4, r2 - adds r5, 0xD - adds r6, r5 - adds r0, r4, 0 - adds r1, r6, 0 - bl StringCopy - mov r1, r9 - cmp r1, 0xFF - beq _080B2BB8 - ldr r0, _080B2BB0 @ =gScriptContestCategory - ldrh r1, [r0] - ldr r0, _080B2BB4 @ =0x00002e06 - add r0, r8 - strb r1, [r0] - b _080B2C36 - .align 2, 0 -_080B2B98: .4byte gSaveBlock1 -_080B2B9C: .4byte 0x00002dfc -_080B2BA0: .4byte gContestMons -_080B2BA4: .4byte 0x00002e04 -_080B2BA8: .4byte 0x00002e07 -_080B2BAC: .4byte 0x00002e12 -_080B2BB0: .4byte gScriptContestCategory -_080B2BB4: .4byte 0x00002e06 -_080B2BB8: - ldr r0, _080B2BC0 @ =0x00002e06 - add r0, r8 - strb r7, [r0] - b _080B2C36 - .align 2, 0 -_080B2BC0: .4byte 0x00002e06 -_080B2BC4: - ldr r5, _080B2C14 @ =gSharedMem + 0x15DE0 - ldr r2, _080B2C18 @ =gContestMons - lsls r4, r6, 6 - adds r0, r2, 0 - adds r0, 0x38 - adds r0, r4, r0 - ldr r0, [r0] - str r0, [r5] - adds r0, r2, 0 - adds r0, 0x3C - adds r0, r4, r0 - ldr r0, [r0] - str r0, [r5, 0x4] - adds r0, r4, r2 - ldrh r0, [r0] - strh r0, [r5, 0x8] - adds r0, r5, 0 - adds r0, 0xB - adds r1, r2, 0x2 - adds r1, r4, r1 - str r2, [sp] - bl StringCopy - ldr r0, _080B2C1C @ =gIsLinkContest - ldrb r1, [r0] - movs r0, 0x1 - ands r0, r1 - ldr r2, [sp] - cmp r0, 0 - beq _080B2C24 - adds r0, r5, 0 - adds r0, 0x16 - lsls r1, r6, 3 - subs r1, r6 - lsls r1, 2 - ldr r2, _080B2C20 @ =gLinkPlayers + 0x8 - adds r1, r2 - bl StringCopy - b _080B2C32 - .align 2, 0 -_080B2C14: .4byte gSharedMem + 0x15DE0 -_080B2C18: .4byte gContestMons -_080B2C1C: .4byte gIsLinkContest -_080B2C20: .4byte gLinkPlayers + 0x8 -_080B2C24: - adds r0, r5, 0 - adds r0, 0x16 - adds r1, r2, 0 - adds r1, 0xD - adds r1, r4, r1 - bl StringCopy -_080B2C32: - ldr r0, _080B2C48 @ =gSharedMem + 0x15DE0 - strb r7, [r0, 0xA] -_080B2C36: - movs r0, 0x1 -_080B2C38: - add sp, 0x4 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_080B2C48: .4byte gSharedMem + 0x15DE0 - thumb_func_end sub_80B2A7C - thumb_func_start sub_80B2C4C sub_80B2C4C: @ 80B2C4C push {r4-r7,lr} diff --git a/include/battle.h b/include/battle.h index 3b37c0853..dda71e562 100644 --- a/include/battle.h +++ b/include/battle.h @@ -3,6 +3,22 @@ #include "sprite.h" +#define F_TARGET_SELECTED_POKEMON 0 +#define F_TARGET_SPECIAL (1 << 0) +#define F_TARGET_UNK2 (1 << 1) +#define F_TARGET_RANDOM (1 << 2) +#define F_TARGET_BOTH_ENEMIES (1 << 3) +#define F_TARGET_USER (1 << 4) +#define F_TARGET_ALL_EXCEPT_USER (1 << 5) +#define F_TARGET_ENEMY_SIDE (1 << 6) + +#define F_MAKES_CONTACT (1 << 0) +#define F_AFFECTED_BY_PROTECT (1 << 1) +#define F_AFFECTED_BY_MAGIC_COAT (1 << 2) +#define F_AFFECTED_BY_SNATCH (1 << 3) +#define F_MIRROR_MOVE_COMPATIBLE (1 << 4) +#define F_AFFECTED_BY_KINGS_ROCK (1 << 5) + #define BATTLE_TYPE_DOUBLE 0x0001 #define BATTLE_TYPE_LINK 0x0002 #define BATTLE_TYPE_WILD 0x0004 diff --git a/include/battle_anim.h b/include/battle_anim.h index 77f7aed21..9decb8f95 100644 --- a/include/battle_anim.h +++ b/include/battle_anim.h @@ -3,22 +3,12 @@ #include "sprite.h" -#define REG_BGnCNT_BITFIELD(n) (*(struct BGCntrlBitfield *)REG_ADDR_BG##n##CNT) +#define REG_BGnCNT_BITFIELD(n) (*(vBgCnt *)REG_ADDR_BG##n##CNT) #define REG_BG0CNT_BITFIELD REG_BGnCNT_BITFIELD(0) #define REG_BG1CNT_BITFIELD REG_BGnCNT_BITFIELD(1) #define REG_BG2CNT_BITFIELD REG_BGnCNT_BITFIELD(2) #define REG_BG3CNT_BITFIELD REG_BGnCNT_BITFIELD(3) -struct BGCntrlBitfield -{ - volatile u16 priority:2; - volatile u16 charBaseBlock:2; - volatile u16 field_0_2:4; - volatile u16 field_1_0:5; - volatile u16 areaOverflowMode:1; - volatile u16 screenSize:2; -}; - struct BattleAnimBackground { void *image; @@ -46,6 +36,8 @@ struct UnknownStruct3 extern void (*gAnimScriptCallback)(void); extern u8 gAnimScriptActive; +extern u8 gHappinessMoveAnim; +extern u8 gUnknown_0202F7C4; void ExecuteMoveAnim(u16 move); void DoMoveAnim(const u8 *const moveAnims[], u16 b, u8 c); diff --git a/include/contest.h b/include/contest.h index 9f8c263a4..55f39d002 100644 --- a/include/contest.h +++ b/include/contest.h @@ -71,7 +71,7 @@ void sub_80AE82C(u8); u8 sub_80AEB1C(u16); void sub_80AF668(void); void sub_80B0F28(u8); -int sub_80B2A7C(u8); //Don't know return type size +bool8 sub_80B2A7C(u8); u8 sub_80B2C4C(u8, u8); void sub_80B2D1C(void); diff --git a/include/gba/macro.h b/include/gba/macro.h index a0edf2a49..d9d10c0a9 100644 --- a/include/gba/macro.h +++ b/include/gba/macro.h @@ -86,8 +86,8 @@ #define DmaCopyLarge(dmaNum, src, dest, size, block, bit) \ { \ - const void *_src = src; \ - void *_dest = dest; \ + const u8 *_src = src; \ + u8 *_dest = dest; \ u32 _size = size; \ while (1) \ { \ @@ -104,25 +104,28 @@ } #define DmaClearLarge(dmaNum, dest, size, block, bit) \ -{ \ - u32 _size = size; \ - while (1) \ - { \ - DmaFill##bit(dmaNum, 0, dest, (block)); \ - dest += (block); \ - _size -= (block); \ - if (_size <= (block)) \ - { \ - DmaFill##bit(dmaNum, 0, dest, _size); \ - break; \ - } \ - } \ +{ \ + const u8 *_dest = dest; \ + u32 _size = size; \ + while (1) \ + { \ + DmaFill##bit(dmaNum, 0, _dest, (block)); \ + _dest += (block); \ + _size -= (block); \ + if (_size <= (block)) \ + { \ + DmaFill##bit(dmaNum, 0, _dest, _size); \ + break; \ + } \ + } \ } #define DmaCopyLarge16(dmaNum, src, dest, size, block) DmaCopyLarge(dmaNum, src, dest, size, block, 16) - #define DmaCopyLarge32(dmaNum, src, dest, size, block) DmaCopyLarge(dmaNum, src, dest, size, block, 32) +#define DmaClearLarge16(dmaNum, dest, size, block) DmaClearLarge(dmaNum, dest, size, block, 16) +#define DmaClearLarge32(dmaNum, dest, size, block) DmaClearLarge(dmaNum, dest, size, block, 32) + #define DmaCopyDefvars(dmaNum, src, dest, size, bit) \ { \ const void *_src = src; \ diff --git a/include/gba/types.h b/include/gba/types.h index 480619d21..33ae7df9a 100644 --- a/include/gba/types.h +++ b/include/gba/types.h @@ -28,6 +28,17 @@ typedef u8 bool8; typedef u16 bool16; typedef u32 bool32; +struct BgCnt +{ + u16 priority:2; + u16 charBaseBlock:2; + u16 dummy:4; + u16 screenBaseBlock:5; + u16 areaOverflowMode:1; + u16 screenSize:2; +}; +typedef volatile struct BgCnt vBgCnt; + struct PlttData { u16 r:5; // red diff --git a/include/global.h b/include/global.h index 620806d1a..330e047fd 100644 --- a/include/global.h +++ b/include/global.h @@ -632,6 +632,16 @@ struct RecordMixingGift struct RecordMixingGiftData data; }; +struct ContestWinner +{ + /*0x00*/ u32 unk0; // personality + /*0x04*/ u32 unk4; // otId + /*0x08*/ u16 unk8; // species + /*0x0A*/ u8 unkA; + /*0x0B*/ u8 unkB[0x16-0xB]; + /*0x16*/ u8 unk16[0x20-0x16]; +}; + // there should be enough flags for all 412 slots // each slot takes up 8 flags // if the value is not divisible by 8, we need to account for the reminder as well @@ -710,8 +720,14 @@ struct SaveBlock1 /* 0x02025734 */ /*0x2D90*/ u8 filler_2D90[0x4]; /*0x2D94*/ union MauvilleMan mauvilleMan; /*0x2DD4*/ struct EasyChatPair easyChatPairs[5]; //Dewford trend [0] and some other stuff +#if 0 + // I don't think this is right. /*0x2DFC*/ u8 filler_2DFC[0x8]; /*0x2E04*/ SB_Struct sbStruct; +#else + /*0x2DFC*/ struct ContestWinner contestWinners[4]; + /*0x2E7C*/ u8 filler_2E7C[0x2F9C-0x2E7C]; +#endif /*0x2F9C*/ struct DayCare daycare; /*0x30B8*/ struct LinkBattleRecord linkBattleRecords[5]; /*0x3108*/ u8 filler_3108[8]; diff --git a/include/graphics.h b/include/graphics.h index b3417a30f..f94450f86 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -48,6 +48,14 @@ extern const u8 gContest2Pal[]; extern const u8 gMonFootprint_QuestionMark[]; +extern const u8 gContestNextTurnGfx[]; +extern const u8 gContestNextTurnNumbersGfx[]; +extern const u8 gContestNextTurnRandomGfx[]; +extern const u8 gBattleAnimSpriteSheet_264[]; +extern const u8 gBattleAnimSpritePalette_264[]; +extern const u8 gBattleAnimSpritePalette_265[]; +extern const u8 gBattleAnimSpritePalette_067[]; +extern const u8 gBattleAnimSpritePalette_068[]; extern const u8 gContestApplauseGfx[]; extern const u8 gContestApplauseMeterGfx[]; extern const u16 gContestPal[]; diff --git a/src/battle/reshow_battle_screen.c b/src/battle/reshow_battle_screen.c index 14f465352..03b5660fe 100644 --- a/src/battle/reshow_battle_screen.c +++ b/src/battle/reshow_battle_screen.c @@ -198,15 +198,9 @@ static void CB2_ReshowBattleScreenAfterMenu(void) static void sub_807B06C(void) { - struct BGCntrlBitfield *regBgcnt1, *regBgcnt2; - sub_800D6D4(); - - regBgcnt1 = (void*)(®_BG1CNT); - regBgcnt1->charBaseBlock = 0; - - regBgcnt2 = (void*)(®_BG2CNT); - regBgcnt2->charBaseBlock = 0; + ((vBgCnt *)®_BG1CNT)->charBaseBlock = 0; + ((vBgCnt *)®_BG2CNT)->charBaseBlock = 0; } static bool8 LoadAppropiateBankSprite(u8 bank) diff --git a/src/contest.c b/src/contest.c index 9ffe5e20e..210d09548 100644 --- a/src/contest.c +++ b/src/contest.c @@ -3,6 +3,7 @@ #include "constants/map_objects.h" #include "constants/songs.h" #include "constants/species.h" +#include "battle.h" #include "battle_anim.h" #include "blend_palette.h" #include "contest.h" @@ -128,14 +129,15 @@ struct UnknownContestStruct1 u8 unk16; u8 unk17; u8 unk18; - u8 unk19; + u8 unk19; // turn number u8 unk1A; u8 unk1B; }; struct UnknownContestStruct3 { - u8 filler0[2]; + u8 unk0; + u8 unk1; //u8 unk2_0:1; //u8 unk2_1:1; u8 unk2; // maybe a bitfield @@ -145,8 +147,8 @@ struct UnknownContestStruct3 // possibly the same as UnknownContestStruct3? struct UnknownContestStruct4 { - u8 unk0; - u8 unk1; + u8 unk0; // sprite ID + u8 unk1; // sprite ID u8 unk2_0:1; u8 unk2_1:1; u8 unk2_2:1; @@ -174,6 +176,18 @@ struct UnknownContestStruct7 u8 filler12[2]; }; +struct UnknownContestStruct8 +{ + u16 unk0; + u16 unk2; + u8 unk4_0:1; + u8 unk5; + u8 filler6[2]; + u32 unk8; + u32 unkC; + u32 unk10; +}; + #if 0 struct Shared19260 { @@ -189,6 +203,7 @@ struct Shared19260 #endif #define shared15800 (gSharedMem + 0x15800) +#define shared15DE0 (*(struct ContestWinner *)(gSharedMem + 0x15DE0)) #define shared16800 (gSharedMem + 0x16800) #define shared18000 (*(struct Shared18000 *)(gSharedMem + 0x18000)) #define shared19204 (*(struct Shared19204 *)(gSharedMem + 0x19204)) @@ -198,12 +213,13 @@ struct Shared19260 // These are separate structs because sub_80AC2CC requires that to match. #define shared19260_ ((struct UnknownContestStruct1 *)(gSharedMem + 0x19260)) -#define shared192D0 (gSharedMem + 0x192D0) +//#define shared192D0 (gSharedMem + 0x192D0) #define shared192D0_ (*(struct UnknownContestStruct7 *)(gSharedMem + 0x192D0)) #define shared192E4 (gSharedMem + 0x192E4) #define shared19328 (*(struct UnknownContestStruct5 *)(gSharedMem + 0x19328)) #define shared19338 ((struct UnknownContestStruct4 *)(gSharedMem + 0x19338)) -#define shared19348 ((struct UnknownContestStruct3 *)(gSharedMem + 0x19348)) +//#define shared19348 ((struct UnknownContestStruct3 *)(gSharedMem + 0x19348)) +#define shared19348_ (*(struct UnknownContestStruct8 *)(gSharedMem + 0x19348)) struct UnknownContestStruct6 { @@ -444,20 +460,27 @@ void sub_80B1DDC(void); void sub_80B1DFC(u8); void sub_80B1EA8(s8, s8); void sub_80B1F4C(u8); -void sub_80B1FD0(); +void sub_80B1FD0(bool8); +const u8 *sub_80B208C(u8); void sub_80B20C4(void); -u8 sub_80B214C(u8); +bool8 sub_80B214C(u8); void sub_80B2184(void); void sub_80B2280(void); void sub_80B237C(u8); -void sub_80B25E4(); -u16 sub_80B2760(); +void sub_80B23BC(u8); +void sub_80B2400(u8); +void sub_80B253C(u8); +void sub_80B25A4(u8); +void sub_80B25E4(u8); +void sub_80B26C8(u8); +u16 sub_80B2760(u16); u16 sub_80B2778(u16); -void sub_80B2790(); -void sub_80B28CC(); -void sub_80B28F0(); +void sub_80B2790(u8); +void sub_80B28CC(int); +void sub_80B28F0(u8); void sub_80B292C(void); -void sub_80B29B4(); +void sub_80B2968(void); +void sub_80B29B4(u16); void nullsub_89(u8 taskId) @@ -469,6 +492,7 @@ void ResetLinkContestBoolean(void) gIsLinkContest = FALSE; } +// Contest_ResetGpuRegs void sub_80AB1BC(void) { u16 savedIme; @@ -539,6 +563,7 @@ void sub_80AB350(void) FillPalette(0x7E3F, 0xF3, 2); } +// ClearContestVars void sub_80AB398(void) { s32 i; @@ -569,6 +594,7 @@ void sub_80AB398(void) sub_80B159C(); } +// CB2_StartContest void sub_80AB47C(void) { switch (gMain.state) @@ -906,7 +932,7 @@ void sub_80ABCDC(u8 taskId) u8 *r5 = sp8; if (shared19260_[gContestPlayerMonIndex].unk8 != 0 - && sub_80B214C(gContestPlayerMonIndex) != 0 + && sub_80B214C(gContestPlayerMonIndex) && AreMovesContestCombo(shared19260_[gContestPlayerMonIndex].unk8, r4) && shared19260_[gContestPlayerMonIndex].unk15_4) { @@ -1151,7 +1177,7 @@ void sub_80AC2CC(u8 taskId) case 3: for (r6 = 0; r6 < 4; r6++) gBattleMonForms[r6] = 0; - memset(shared19348, 0, 20); + memset(&shared19348_, 0, sizeof(shared19348_)); sub_80B28F0(shared19204.unk19215); spriteId = sub_80AE9FC( gContestMons[shared19204.unk19215].species, @@ -1297,7 +1323,7 @@ void sub_80AC2CC(u8 taskId) gTasks[taskId].data[0] = 47; return; case 47: - sub_80B1FD0(1); + sub_80B1FD0(TRUE); gTasks[taskId].data[0] = 12; return; case 12: @@ -1876,7 +1902,7 @@ void sub_80AD960(u8 taskId) void sub_80ADA1C(u8 taskId) { - sub_80B1FD0(0); + sub_80B1FD0(FALSE); gTasks[taskId].data[0] = 0; gTasks[taskId].data[1] = 0; gTasks[taskId].func = sub_80ADA4C; @@ -2761,7 +2787,7 @@ void sub_80AEF50(void) } } -u16 sub_80AEFE8(int unused, u8 b) +u16 sub_80AEFE8(u8 unused, u8 b) { u16 var = 0; @@ -3724,6 +3750,7 @@ void sub_80B0588(void) sub_80B05A4(i); } +// TODO: Try to write this better void sub_80B05A4(u8 a) { u32 var; @@ -4459,6 +4486,7 @@ void unref_sub_80B0EE8(s32 *a, s32 b) } } +// something to do with contest NPC opponents, I think. void sub_80B0F28(u8 a) { u8 sp0[4]; @@ -4597,7 +4625,7 @@ void sub_80B114C(u8 a) shared19260_[a].unk2 += shared19260_[a].unkD; shared19260_[a].unk16 = 0; shared19260_[a].unk15_6 = 0; - if (sub_80B214C(a) != 0) + if (sub_80B214C(a)) { bool8 r2 = AreMovesContestCombo(shared19260_[a].unk8, shared19260_[a].unk6); @@ -4999,7 +5027,6 @@ void sub_80B1DFC(u8 taskId) register u32 r4 asm("r4") = taskId * 4; gTasks[taskId].data[10] = 0; - gTasks[taskId].data[10] = 0; if (gTasks[taskId].data[11] == 0) { { @@ -5039,44 +5066,521 @@ void sub_80B1DFC(u8 taskId) } } +#define tBlendColor data[0] +#define tBlendCoeff data[1] + void sub_80B1EA8(s8 a, s8 b) { u8 taskId = CreateTask(sub_80B1F4C, 10); - u16 r7; - u8 r5; + u16 blendColor; + u8 blendCoeff; u8 r3; if (a > 0) { - r7 = 0x237E; + blendColor = RGB(30, 27, 8); if (b > 0) { - r5 = 0; + blendCoeff = 0; r3 = shared19204.unk19217 * 3; } else { - r5 = shared19204.unk19217 * 3; + blendCoeff = shared19204.unk19217 * 3; r3 = 0; } } else { - r7 = 0; + blendColor = 0; if (b > 0) { - r5 = 0; + blendCoeff = 0; r3 = 12; } else { - r5 = 12; + blendCoeff = 12; r3 = 0; } } - gTasks[taskId].data[0] = r7; - gTasks[taskId].data[1] = r5; + gTasks[taskId].tBlendColor = blendColor; + gTasks[taskId].tBlendCoeff = blendCoeff; gTasks[taskId].data[2] = b; gTasks[taskId].data[3] = r3; shared19204.unk1920B_0 = 0; } + +void sub_80B1F4C(u8 taskId) +{ + if (gTasks[taskId].data[10]++ >= 0) + { + gTasks[taskId].data[10] = 0; + if (gTasks[taskId].data[2] > 0) + gTasks[taskId].tBlendCoeff++; + else + gTasks[taskId].tBlendCoeff--; + BlendPalette(17, 1, gTasks[taskId].tBlendCoeff, gTasks[taskId].tBlendColor); + BlendPalette(26, 1, gTasks[taskId].tBlendCoeff, gTasks[taskId].tBlendColor); + if (gTasks[taskId].tBlendCoeff == gTasks[taskId].data[3]) + { + DestroyTask(taskId); + shared19204.unk1920B_0 = 0; + } + } +} + +#undef tBlendColor +#undef tBlendCoeff + +void sub_80B1FD0(bool8 a) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + if (shared19260_[i].unk10_6 != 0 && a) + { + CpuCopy32( + sub_80B208C(i), + (void *)(VRAM + 0x10000 + (gSprites[shared19338[i].unk1].oam.tileNum + 5) * 32), + 64); + gSprites[shared19338[i].unk1].pos1.y = gUnknown_083CA33C[gUnknown_02038696[i]]; + gSprites[shared19338[i].unk1].invisible = FALSE; + } + else + { + gSprites[shared19338[i].unk1].invisible = TRUE; + } + } +} + +// GetTurnNumberGfx +const u8 *sub_80B208C(u8 a) +{ + if (shared19260_[a].unk10_6 != 1) + return gContestNextTurnRandomGfx; + else + return gContestNextTurnNumbersGfx + shared19260_[a].unk19 * 64; +} + +void sub_80B20C4(void) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + if (shared192D0_.unkD[i] != 0 && !sub_80AF59C(i)) + { + u8 r4 = gUnknown_02038696[i] * 5 + 2; + u16 r0 = sub_80AEFE8(i, 3); + + *(u16 *)(VRAM + 0xC000 + r4 * 64 + 0x28) = r0; + *(u16 *)(VRAM + 0xC000 + r4 * 64 + 0x2A) = r0 + 1; + *(u16 *)(VRAM + 0xC000 + (r4 + 1) * 64 + 0x28) = r0 + 16; + *(u16 *)(VRAM + 0xC000 + (r4 + 1) * 64 + 0x2A) = r0 + 17; + PlaySE(SE_C_PASI); + } + } +} + +bool8 sub_80B214C(u8 a) +{ + if (shared19260_[a].unk15_0 || shared19260_[a].unkC_0) + return FALSE; + else + return TRUE; +} + +void sub_80B2184(void) +{ + s32 i; + + ((vBgCnt *)®_BG1CNT)->priority = 0; + ((vBgCnt *)®_BG1CNT)->screenSize = 1; + ((vBgCnt *)®_BG1CNT)->areaOverflowMode = 0; + + gUnknown_030042C0 = DISPLAY_WIDTH; + gUnknown_030041B4 = DISPLAY_HEIGHT; + REG_BG1HOFS = DISPLAY_WIDTH; + REG_BG1VOFS = DISPLAY_HEIGHT; + + DmaClear32(3, (void *)(VRAM + 0xF000), 0x1000); + LZDecompressVram(gUnknown_08D17C3C, (void *)(VRAM + 0xF000)); + + ((vBgCnt *)®_BG1CNT)->charBaseBlock = 0; + + for (i = 0; i < 4; i++) + { + gSprites[shared19338[i].unk0].oam.priority = 1; + gSprites[shared19338[i].unk1].oam.priority = 1; + } + + ((vBgCnt *)®_BG2CNT)->priority = 1; + ((vBgCnt *)®_BG0CNT)->priority = 1; + ((vBgCnt *)®_BG1CNT)->screenSize = 2; +} + +void sub_80B2280(void) +{ + s32 i; + + DmaClearLarge32(3, (void *)(VRAM + 0x8000), 0x2000, 0x1000); + DmaClear32(3, (void *)(VRAM + 0xF000), 0x1000); + + gUnknown_030042C0 = 0; + gUnknown_030041B4 = 0; + + ((vBgCnt *)®_BG1CNT)->priority = 1; + ((vBgCnt *)®_BG1CNT)->screenSize = 0; + ((vBgCnt *)®_BG1CNT)->areaOverflowMode = 0; + ((vBgCnt *)®_BG1CNT)->charBaseBlock = 2; + + for (i = 0; i < 4; i++) + { + gSprites[shared19338[i].unk0].oam.priority = 0; + gSprites[shared19338[i].unk1].oam.priority = 0; + } +} + +void sub_80B237C(u8 taskId) +{ + gUnknown_030042C0 = 0; + gUnknown_030041B4 = DISPLAY_HEIGHT; + PlaySE12WithPanning(SE_C_MAKU_D, 0); + gTasks[taskId].func = sub_80B23BC; +} + +void sub_80B23BC(u8 taskId) +{ + gUnknown_030041B4 -= 7; + if (gUnknown_030041B4 < 0) + gUnknown_030041B4 = 0; + if (*(u16 *)&gUnknown_030041B4 == 0) // Why cast? + { + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].func = sub_80B2400; + } +} + +void sub_80B2400(u8 taskId) +{ + s32 i; + + switch (gTasks[taskId].data[0]) + { + case 0: + for (i = 0; i < 4; i++) + shared19204.unk19218[i] = gUnknown_02038696[i]; + sub_80AFA5C(); + sub_80B0588(); + sub_80AEF50(); + sub_80B1118(); + sub_80B1FD0(TRUE); + sub_80AFFA0(); + gTasks[taskId].data[0] = 1; + break; + case 1: + if (gIsLinkContest & 1) + { + u8 taskId2; + + shared19204.unk1920B_2 = 1; + if (sub_80AE074()) + sub_80AF438(); + taskId2 = CreateTask(sub_80C8C80, 0); + SetTaskFuncWithFollowupFunc(taskId2, sub_80C8C80, sub_80AD8DC); + sub_80AF860(); + gTasks[taskId].data[0] = 2; + } + else + { + sub_80AF438(); + gTasks[taskId].data[0] = 3; + } + break; + case 2: + if (!shared19204.unk1920B_2) + gTasks[taskId].data[0] = 3; + break; + case 3: + sub_80AF120(); + sub_80AEB30(); + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = sub_80B253C; + break; + } +} + +void sub_80B2508(u8 taskId) +{ + gUnknown_030041B4 += 7; + if (gUnknown_030041B4 > DISPLAY_HEIGHT) + gTasks[taskId].func = sub_80ADCDC; +} + +void sub_80B253C(u8 taskId) +{ + if (gTasks[taskId].data[2] < 10) + { + gTasks[taskId].data[2]++; + } + else + { + if (gTasks[taskId].data[1] == 0) + { + if (gTasks[taskId].data[0] == 16) + gTasks[taskId].data[1]++; + else + gTasks[taskId].data[0]++; + } + else + { + if (gTasks[taskId].data[0] == 0) + { + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[2] = 0; + gTasks[taskId].func = sub_80B25A4; + } + else + { + gTasks[taskId].data[0]--; + } + } + } +} + +void sub_80B25A4(u8 taskId) +{ + if (gTasks[taskId].data[2] < 10) + { + gTasks[taskId].data[2]++; + } + else + { + gTasks[taskId].data[2] = 0; + PlaySE12WithPanning(SE_C_MAKU_U, 0); + gTasks[taskId].func = sub_80B2508; + } +} + +void sub_80B25E4(u8 a) +{ + s32 i; + u8 taskId; + + for (i = 0; i < 4; i++) + { + gSprites[shared19338[i].unk0].oam.matrixNum = AllocOamMatrix(); + gSprites[shared19338[i].unk0].oam.affineMode = 1; + StartSpriteAffineAnim(&gSprites[shared19338[i].unk0], a); + if (a == 2) + { + AnimateSprite(&gSprites[shared19338[i].unk0]); + gSprites[shared19338[i].unk0].invisible = FALSE; + } + } + taskId = CreateTask(sub_80B26C8, 5); + gTasks[taskId].data[0] = a; + shared19204.unk1920B_1 = 1; +} + +void sub_80B26C8(u8 taskId) +{ + s32 i; + + if (gSprites[shared19338[0].unk0].affineAnimEnded) + { + if ((u8)gTasks[taskId].data[0] == 1) + { + for (i = 0; i < 4; i++) + gSprites[shared19338[i].unk0].invisible = TRUE; + } + for (i = 0; i < 4; i++) + FreeSpriteOamMatrix(&gSprites[shared19338[i].unk0]); + shared19204.unk1920B_1 = 0; + DestroyTask(taskId); + } +} + +// SanitizeMove +u16 sub_80B2760(u16 a) +{ + if (a > 354) + a = 1; + return a; +} + +// SanitizeSpecies +u16 sub_80B2778(u16 species) +{ + if (species >= NUM_SPECIES) + species = SPECIES_NONE; + return species; +} + +void sub_80B2790(u8 a) +{ + s32 i; + u16 r5 = sub_80B2760(shared19260_[a].unk6); + u16 r7 = sub_80B2778(gContestMons[a].species); + u8 r5_2; + + memset(&shared19348_, 0, sizeof(shared19348_)); + battle_anim_clear_some_data(); + for (i = 0; i < 4; i++) + gBattleMonForms[i] = 0; + switch (r5) + { + case 0xAE: + if (gBaseStats[r7].type1 == 7 || gBaseStats[r7].type2 == 7) + gUnknown_0202F7C4 = 0; + else + gUnknown_0202F7C4 = 1; + break; + case 0x90: + case 0x110: + r5_2 = shared19260_[a].unk1B; + shared19348_.unk2 = sub_80B2778(gContestMons[r5_2].species); + shared19348_.unk10 = gContestMons[r5_2].personality; + shared19348_.unk4_0 = 1; + break; + case 0xD8: + gHappinessMoveAnim = 0xFF; + break; + case 0xDA: + gHappinessMoveAnim = 0; + break; + case 0x4C: + case 0xD: + case 0x82: + case 0x8F: + if (shared19204.unk1925E == 0) + { + shared19204.unk1925E = 2; + gUnknown_0202F7C4 = 0; + } + else + { + gUnknown_0202F7C4 = 1; + } + break; + } + sub_80B2968(); +} + +void sub_80B28CC(int unused) +{ + memset(&shared19348_, 0, sizeof(shared19348_)); + if (shared19204.unk1925E != 0) + shared19204.unk1925E--; +} + +void sub_80B28F0(u8 a) +{ + shared19348_.unk5 = a; + shared19348_.unk0 = sub_80B2778(gContestMons[a].species); + shared19348_.unk8 = gContestMons[a].personality; + shared19348_.unkC = gContestMons[a].otId; +} + +void sub_80B292C(void) +{ + gObjectBankIDs[3] = CreateInvisibleSpriteWithCallback(SpriteCallbackDummy); + InitSpriteAffineAnim(&gSprites[gObjectBankIDs[gBankTarget]]); + sub_80B2968(); +} + +void sub_80B2968(void) +{ + struct Sprite *sprite = &gSprites[gObjectBankIDs[3]]; + + sprite->pos2.x = 0; + sprite->pos2.y = 0; + sprite->pos1.x = sub_8077ABC(3, 0); + sprite->pos1.y = sub_8077ABC(3, 1); + sprite->invisible = TRUE; +} + +void sub_80B29B4(u16 a) +{ + switch (gBattleMoves[a].target) + { + case F_TARGET_UNK2: + case F_TARGET_USER: + gBankTarget = 2; + break; + case F_TARGET_SELECTED_POKEMON: + case F_TARGET_RANDOM: + case F_TARGET_BOTH_ENEMIES: + case F_TARGET_ALL_EXCEPT_USER: + default: + gBankTarget = 3; + break; + } +} + +// SaveContestWinner +bool8 sub_80B2A7C(u8 a) +{ + s32 i; + u8 r7 = Random() % 3; + + for (i = 0; i < 3; i++) + { + if (gUnknown_02038690[i] == 0) + break; + } + if (a == 0xFF && i != gContestPlayerMonIndex) + return FALSE; + //_080B2AD0 + switch (gScriptContestCategory) + { + case 0: + r7 += 0; + break; + case 1: + r7 += 3; + break; + case 2: + r7 += 6; + break; + case 3: + r7 += 9; + break; + case 4: + r7 += 12; + break; + } + //_080B2B16 + if (a != 0xFE) + { + u8 r4 = sub_80B2C4C(a, 1); + + gSaveBlock1.contestWinners[r4].personality = gContestMons[i].personality; + gSaveBlock1.contestWinners[r4].species = gContestMons[i].species; + gSaveBlock1.contestWinners[r4].otId = gContestMons[i].otId; + StringCopy(gSaveBlock1.contestWinners[r4].nickname, gContestMons[i].nickname); + StringCopy(gSaveBlock1.contestWinners[r4].trainerName, gContestMons[i].trainerName); + if (a != 0xFF) + gSaveBlock1.contestWinners[r4].contestCategory = gScriptContestCategory; + else + gSaveBlock1.contestWinners[r4].contestCategory = r7; + } + //_080B2BC4 + else + { + shared15DE0.personality = gContestMons[i].personality; + shared15DE0.otId = gContestMons[i].otId; + shared15DE0.unk8 = gContestMons[i].species; + StringCopy(shared15DE0.nickname, gContestMons[i].nickname); + if (gIsLinkContest & 1) + StringCopy(shared15DE0.trainerName, gLinkPlayers[i].name); + else + StringCopy(shared15DE0.trainerName, gContestMons[i].trainerName); + shared15DE0.contestCategory = r7; + } + return TRUE; +} diff --git a/src/scene/new_game.c b/src/scene/new_game.c index ee042a0de..e3d6996ac 100644 --- a/src/scene/new_game.c +++ b/src/scene/new_game.c @@ -89,7 +89,8 @@ void sub_8052DA8(void) sub_80B2D1C(); for (i = 0; i < 5; i++) - gSaveBlock1.sbStruct.unkSB1.sb1_2EFC_struct[i] = gUnknown_08216604; + gSaveBlock1.contestWinners[i] = gUnknown_08216604; + //gSaveBlock1.sbStruct.unkSB1.sb1_2EFC_struct[i] = gUnknown_08216604; } void ZeroBattleTowerData(void) |