diff options
-rw-r--r-- | asm/trade.s | 1499 | ||||
-rw-r--r-- | include/graphics.h | 1 | ||||
-rw-r--r-- | include/pokemon_icon.h | 1 | ||||
-rw-r--r-- | src/trade.c | 508 |
4 files changed, 507 insertions, 1502 deletions
diff --git a/asm/trade.s b/asm/trade.s index b77be0074..80d527445 100644 --- a/asm/trade.s +++ b/asm/trade.s @@ -5,1505 +5,6 @@ .text - thumb_func_start sub_804EFB4 -sub_804EFB4: @ 804EFB4 - push {r4-r6,lr} - sub sp, 0xC - adds r4, r1, 0 - adds r6, r2, 0 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 1 - adds r1, r0 - lsls r1, 1 - adds r1, 0x2 - lsls r4, 24 - asrs r4, 24 - adds r4, r1 - lsls r4, 24 - lsrs r4, 24 - movs r5, 0 - movs r0, 0 - movs r1, 0x2 - bl GetFontAttribute - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - movs r0, 0 - adds r1, r6, 0 - bl GetStringWidth - movs r2, 0x40 - subs r2, r0 - lsrs r2, 1 - lsls r2, 24 - lsrs r2, 24 - ldr r0, _0804F01C @ =gUnknown_8261F18 - str r0, [sp] - str r5, [sp, 0x4] - str r6, [sp, 0x8] - adds r0, r4, 0 - movs r1, 0 - movs r3, 0x4 - bl AddTextPrinterParameterized3 - adds r0, r4, 0 - bl PutWindowTilemap - adds r0, r4, 0 - movs r1, 0x3 - bl CopyWindowToVram - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0804F01C: .4byte gUnknown_8261F18 - thumb_func_end sub_804EFB4 - - thumb_func_start sub_804F020 -sub_804F020: @ 804F020 - push {r4-r7,lr} - sub sp, 0x34 - lsls r0, 24 - lsrs r6, r0, 24 - ldr r7, _0804F080 @ =gEnemyParty - cmp r6, 0 - bne _0804F030 - ldr r7, _0804F084 @ =gPlayerParty -_0804F030: - movs r4, 0 - ldr r0, _0804F088 @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x36 - adds r0, r6 - ldrb r0, [r0] - cmp r4, r0 - bcs _0804F076 - add r5, sp, 0x14 -_0804F042: - movs r0, 0x64 - muls r0, r4 - adds r0, r7, r0 - movs r1, 0x2 - mov r2, sp - bl GetMonData - adds r0, r5, 0 - mov r1, sp - bl StringCopy10 - adds r0, r6, 0 - adds r1, r4, 0 - adds r2, r5, 0 - bl sub_804EFB4 - adds r0, r4, 0x1 - lsls r0, 24 - lsrs r4, r0, 24 - ldr r0, _0804F088 @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x36 - adds r0, r6 - ldrb r0, [r0] - cmp r4, r0 - bcc _0804F042 -_0804F076: - add sp, 0x34 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804F080: .4byte gEnemyParty -_0804F084: .4byte gPlayerParty -_0804F088: .4byte gUnknown_2031DA8 - thumb_func_end sub_804F020 - - thumb_func_start sub_804F08C -sub_804F08C: @ 804F08C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x1C - ldr r4, [sp, 0x3C] - ldr r5, [sp, 0x40] - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - lsls r1, 24 - lsrs r7, r1, 24 - lsls r2, 24 - lsrs r2, 24 - mov r9, r2 - lsls r3, 24 - lsrs r3, 24 - mov r10, r3 - lsls r4, 24 - lsrs r4, 24 - lsls r5, 24 - lsrs r5, 24 - ldr r1, _0804F0E8 @ =gUnknown_8E9F1FC - movs r0, 0x6 - str r0, [sp] - movs r0, 0x3 - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - movs r0, 0x1 - adds r2, r4, 0 - adds r3, r5, 0 - bl CopyToBgTilemapBufferRect_ChangePalette - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - mov r0, r8 - cmp r0, 0 - bne _0804F0F0 - movs r0, 0x64 - muls r0, r7 - ldr r1, _0804F0EC @ =gPlayerParty - b _0804F0F6 - .align 2, 0 -_0804F0E8: .4byte gUnknown_8E9F1FC -_0804F0EC: .4byte gPlayerParty -_0804F0F0: - movs r0, 0x64 - muls r0, r7 - ldr r1, _0804F16C @ =gEnemyParty -_0804F0F6: - adds r0, r1 - movs r1, 0x38 - movs r2, 0 - bl GetMonData - lsls r0, 24 - lsrs r6, r0, 24 - ldr r4, _0804F170 @ =gUnknown_2031DA8 - ldr r5, [r4] - mov r1, r8 - lsls r2, r1, 1 - adds r1, r2, r1 - lsls r1, 1 - adds r1, r7, r1 - adds r0, r5, 0 - adds r0, 0x51 - adds r0, r1 - ldrb r0, [r0] - str r2, [sp, 0x18] - cmp r0, 0 - bne _0804F174 - adds r0, r6, 0 - movs r1, 0xA - bl __udivsi3 - lsls r0, 24 - lsrs r2, r0, 24 - mov r0, r10 - lsls r3, r0, 5 - cmp r2, 0 - beq _0804F148 - mov r1, r9 - adds r0, r1, r3 - lsls r0, 1 - movs r1, 0x8F - lsls r1, 4 - adds r5, r1 - adds r1, r5, r0 - adds r0, r2, 0 - adds r0, 0x60 - strh r0, [r1] -_0804F148: - ldr r4, [r4] - mov r1, r9 - adds r0, r1, r3 - adds r0, 0x1 - lsls r0, 1 - movs r3, 0x8F - lsls r3, 4 - adds r4, r3 - adds r4, r0 - adds r0, r6, 0 - movs r1, 0xA - bl __umodsi3 - lsls r0, 24 - lsrs r0, 24 - adds r0, 0x70 - strh r0, [r4] - b _0804F1B2 - .align 2, 0 -_0804F16C: .4byte gEnemyParty -_0804F170: .4byte gUnknown_2031DA8 -_0804F174: - mov r1, r10 - lsls r0, r1, 5 - mov r1, r9 - adds r3, r1, r0 - adds r1, r3, 0 - subs r1, 0x20 - lsls r1, 1 - movs r0, 0x8F - lsls r0, 4 - adds r2, r5, r0 - adds r1, r2, r1 - adds r0, r3, 0 - subs r0, 0x21 - lsls r0, 1 - adds r0, r2, r0 - ldrh r0, [r0] - strh r0, [r1] - adds r1, r3, 0 - subs r1, 0x1F - lsls r1, 1 - adds r1, r2, r1 - adds r0, r3, 0 - subs r0, 0x24 - lsls r0, 1 - adds r2, r0 - ldrh r2, [r2] - movs r3, 0x80 - lsls r3, 3 - adds r0, r3, 0 - orrs r0, r2 - strh r0, [r1] -_0804F1B2: - ldr r0, _0804F1D0 @ =gUnknown_2031DA8 - ldr r1, [r0] - ldr r0, [sp, 0x18] - add r0, r8 - lsls r0, 1 - adds r0, r7, r0 - adds r1, 0x51 - adds r1, r0 - ldrb r0, [r1] - cmp r0, 0 - beq _0804F1D4 - movs r2, 0x90 - lsls r2, 3 - b _0804F256 - .align 2, 0 -_0804F1D0: .4byte gUnknown_2031DA8 -_0804F1D4: - mov r0, r8 - cmp r0, 0 - bne _0804F200 - movs r0, 0x64 - adds r4, r7, 0 - muls r4, r0 - ldr r0, _0804F1FC @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - bl GetMonGender - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r4, 0 - movs r1, 0x2 - add r2, sp, 0xC - bl GetMonData - b _0804F21E - .align 2, 0 -_0804F1FC: .4byte gPlayerParty -_0804F200: - movs r0, 0x64 - adds r4, r7, 0 - muls r4, r0 - ldr r0, _0804F22C @ =gEnemyParty - adds r4, r0 - adds r0, r4, 0 - bl GetMonGender - lsls r0, 24 - lsrs r5, r0, 24 - adds r0, r4, 0 - movs r1, 0x2 - add r2, sp, 0xC - bl GetMonData -_0804F21E: - cmp r5, 0 - beq _0804F230 - cmp r5, 0xFE - beq _0804F244 - movs r2, 0x83 - b _0804F256 - .align 2, 0 -_0804F22C: .4byte gEnemyParty -_0804F230: - add r0, sp, 0xC - movs r1, 0 - bl NameHasGenderSymbol - lsls r0, 24 - movs r2, 0x83 - cmp r0, 0 - bne _0804F256 - movs r2, 0x84 - b _0804F256 -_0804F244: - add r0, sp, 0xC - movs r1, 0xFE - bl NameHasGenderSymbol - lsls r0, 24 - movs r2, 0x83 - cmp r0, 0 - bne _0804F256 - movs r2, 0x85 -_0804F256: - ldr r0, _0804F280 @ =gUnknown_2031DA8 - ldr r1, [r0] - mov r0, r10 - subs r0, 0x1 - lsls r0, 5 - add r0, r9 - adds r0, 0x1 - lsls r0, 1 - movs r3, 0x8F - lsls r3, 4 - adds r1, r3 - adds r1, r0 - strh r2, [r1] - 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 -_0804F280: .4byte gUnknown_2031DA8 - thumb_func_end sub_804F08C - - thumb_func_start sub_804F284 -sub_804F284: @ 804F284 - push {r4-r7,lr} - sub sp, 0x8 - lsls r0, 24 - lsrs r6, r0, 24 - movs r7, 0 - ldr r0, _0804F2DC @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x36 - adds r0, r6 - ldrb r0, [r0] - cmp r7, r0 - bge _0804F2D4 - lsls r0, r6, 1 - adds r0, r6 - ldr r1, _0804F2E0 @ =gUnknown_8261E5A - lsls r0, 2 - adds r5, r0, r1 - ldr r1, _0804F2E4 @ =gUnknown_8261E72 - adds r4, r0, r1 -_0804F2AA: - lsls r1, r7, 24 - lsrs r1, 24 - ldrb r2, [r5] - ldrb r3, [r5, 0x1] - ldrb r0, [r4] - str r0, [sp] - ldrb r0, [r4, 0x1] - str r0, [sp, 0x4] - adds r0, r6, 0 - bl sub_804F08C - adds r5, 0x2 - adds r4, 0x2 - adds r7, 0x1 - ldr r0, _0804F2DC @ =gUnknown_2031DA8 - ldr r0, [r0] - adds r0, 0x36 - adds r0, r6 - ldrb r0, [r0] - cmp r7, r0 - blt _0804F2AA -_0804F2D4: - add sp, 0x8 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804F2DC: .4byte gUnknown_2031DA8 -_0804F2E0: .4byte gUnknown_8261E5A -_0804F2E4: .4byte gUnknown_8261E72 - thumb_func_end sub_804F284 - - thumb_func_start sub_804F2E8 -sub_804F2E8: @ 804F2E8 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - lsls r0, 24 - lsrs r0, 24 - mov r12, r0 - movs r7, 0 - ldr r3, _0804F3A8 @ =gUnknown_2031DA8 - ldr r0, [r3] - adds r0, 0x36 - add r0, r12 - ldrb r0, [r0] - cmp r7, r0 - bge _0804F39A - ldr r6, _0804F3AC @ =gSprites - mov r9, r3 - mov r1, r12 - lsls r0, r1, 1 - add r0, r12 - lsls r2, r0, 1 - mov r10, r2 - ldr r1, _0804F3B0 @ =gTradeMonSpriteCoords - movs r2, 0 - mov r8, r2 - lsls r0, 2 - adds r5, r0, r1 -_0804F320: - mov r1, r9 - ldr r0, [r1] - mov r2, r10 - adds r4, r7, r2 - adds r0, 0x28 - adds r0, r4 - ldrb r0, [r0] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - adds r1, 0x3E - ldrb r2, [r1] - movs r0, 0x5 - negs r0, r0 - ands r0, r2 - strb r0, [r1] - mov r0, r9 - ldr r3, [r0] - adds r2, r3, 0 - adds r2, 0x28 - adds r2, r4 - ldrb r0, [r2] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - ldrb r0, [r5] - lsls r0, 3 - adds r0, 0xE - strh r0, [r1, 0x20] - ldrb r0, [r2] - lsls r1, r0, 4 - adds r1, r0 - lsls r1, 2 - adds r1, r6 - ldrb r0, [r5, 0x1] - lsls r0, 3 - subs r0, 0xC - strh r0, [r1, 0x22] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - mov r1, r8 - strh r1, [r0, 0x24] - ldrb r1, [r2] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - adds r0, r6 - mov r2, r8 - strh r2, [r0, 0x26] - adds r5, 0x2 - adds r7, 0x1 - adds r3, 0x36 - add r3, r12 - ldrb r3, [r3] - cmp r7, r3 - blt _0804F320 -_0804F39A: - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804F3A8: .4byte gUnknown_2031DA8 -_0804F3AC: .4byte gSprites -_0804F3B0: .4byte gTradeMonSpriteCoords - thumb_func_end sub_804F2E8 - - thumb_func_start sub_804F3B4 -sub_804F3B4: @ 804F3B4 - push {lr} - movs r0, 0x1 - bl rbox_fill_rectangle - movs r0, 0x1 - bl sub_804F020 - pop {r0} - bx r0 - thumb_func_end sub_804F3B4 - - thumb_func_start sub_804F3C8 -sub_804F3C8: @ 804F3C8 - push {r4-r6,lr} - sub sp, 0xC - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - ldr r1, _0804F430 @ =gTradePartyBoxTilemap - lsls r2, r4, 4 - subs r2, r4 - lsls r2, 24 - lsrs r2, 24 - movs r0, 0xF - str r0, [sp] - movs r0, 0x11 - str r0, [sp, 0x4] - movs r6, 0 - str r6, [sp, 0x8] - movs r0, 0x1 - movs r3, 0 - bl CopyToBgTilemapBufferRect_ChangePalette - movs r0, 0x1 - bl CopyBgTilemapBufferToVram - adds r0, r4, 0 - bl sub_804F284 - adds r0, r4, 0 - bl sub_804F020 - adds r0, r4, 0 - bl sub_804F2E8 - ldr r0, _0804F434 @ =gUnknown_8261ECC - ldr r0, [r0, 0x4] - ldr r5, _0804F438 @ =gUnknown_2031DA8 - ldr r1, [r5] - adds r1, 0x72 - ldrh r1, [r1] - lsls r1, 5 - ldr r2, _0804F43C @ =0x06010000 - adds r1, r2 - movs r2, 0x18 - bl sub_804F728 - ldr r0, [r5] - adds r0, 0x74 - adds r0, r4 - strb r6, [r0] - add sp, 0xC - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0804F430: .4byte gTradePartyBoxTilemap -_0804F434: .4byte gUnknown_8261ECC -_0804F438: .4byte gUnknown_2031DA8 -_0804F43C: .4byte 0x06010000 - thumb_func_end sub_804F3C8 - - thumb_func_start sub_804F440 -sub_804F440: @ 804F440 - push {lr} - sub sp, 0x8 - movs r0, 0x1E - str r0, [sp] - movs r0, 0x14 - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - movs r0, 0 - bl CopyBgTilemapBufferToVram - add sp, 0x8 - pop {r0} - bx r0 - thumb_func_end sub_804F440 - - thumb_func_start sub_804F464 -sub_804F464: @ 804F464 - push {lr} - sub sp, 0x8 - movs r0, 0x1E - str r0, [sp] - movs r0, 0x14 - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect_Palette0 - movs r0, 0 - bl CopyBgTilemapBufferToVram - add sp, 0x8 - pop {r0} - bx r0 - thumb_func_end sub_804F464 - - thumb_func_start sub_804F488 -sub_804F488: @ 804F488 - push {r4-r7,lr} - lsls r0, 16 - lsrs r5, r0, 16 - lsls r1, 24 - lsrs r6, r1, 24 - movs r3, 0 - ldr r4, _0804F4C8 @ =gUnknown_2031DA8 - mov r12, r4 - movs r7, 0x8D - lsls r7, 4 -_0804F49C: - mov r1, r12 - ldr r0, [r1] - lsls r1, r3, 3 - adds r2, r0, r1 - adds r0, r2, r7 - ldrb r0, [r0] - cmp r0, 0 - bne _0804F4D0 - ldr r3, _0804F4CC @ =0x000008d2 - adds r0, r2, r3 - strh r5, [r0] - adds r3, 0x2 - adds r0, r2, r3 - strb r6, [r0] - ldr r0, [r4] - adds r0, r1 - movs r1, 0x8D - lsls r1, 4 - adds r0, r1 - movs r1, 0x1 - strb r1, [r0] - b _0804F4D6 - .align 2, 0 -_0804F4C8: .4byte gUnknown_2031DA8 -_0804F4CC: .4byte 0x000008d2 -_0804F4D0: - adds r3, 0x1 - cmp r3, 0x3 - ble _0804F49C -_0804F4D6: - pop {r4-r7} - pop {r0} - bx r0 - thumb_func_end sub_804F488 - - thumb_func_start sub_804F4DC -sub_804F4DC: @ 804F4DC - push {r4,r5,lr} - movs r4, 0 - ldr r3, _0804F508 @ =gUnknown_2031DA8 -_0804F4E2: - ldr r0, [r3] - lsls r1, r4, 3 - adds r2, r0, r1 - movs r5, 0x8D - lsls r5, 4 - adds r0, r2, r5 - ldrb r0, [r0] - adds r5, r1, 0 - cmp r0, 0 - beq _0804F5AC - ldr r0, _0804F50C @ =0x000008d2 - adds r1, r2, r0 - ldrh r0, [r1] - cmp r0, 0 - beq _0804F510 - subs r0, 0x1 - strh r0, [r1] - b _0804F5AC - .align 2, 0 -_0804F508: .4byte gUnknown_2031DA8 -_0804F50C: .4byte 0x000008d2 -_0804F510: - ldr r1, _0804F524 @ =0x000008d4 - adds r0, r2, r1 - ldrb r0, [r0] - cmp r0, 0x8 - bhi _0804F59A - lsls r0, 2 - ldr r1, _0804F528 @ =_0804F52C - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0804F524: .4byte 0x000008d4 -_0804F528: .4byte _0804F52C - .align 2, 0 -_0804F52C: - .4byte _0804F550 - .4byte _0804F56C - .4byte _0804F574 - .4byte _0804F57C - .4byte _0804F57C - .4byte _0804F57C - .4byte _0804F584 - .4byte _0804F58C - .4byte _0804F594 -_0804F550: - bl bitmask_all_link_players_but_self - lsls r0, 24 - lsrs r0, 24 - ldr r1, _0804F568 @ =gUnknown_2031DA8 - ldr r1, [r1] - adds r1, 0x80 - movs r2, 0x14 - bl SendBlock - b _0804F59A - .align 2, 0 -_0804F568: .4byte gUnknown_2031DA8 -_0804F56C: - movs r0, 0 - bl sub_804F5BC - b _0804F59A -_0804F574: - movs r0, 0x2 - bl sub_804F5BC - b _0804F59A -_0804F57C: - movs r0, 0x3 - bl sub_804F5BC - b _0804F59A -_0804F584: - movs r0, 0x6 - bl sub_804F5BC - b _0804F59A -_0804F58C: - movs r0, 0x7 - bl sub_804F5BC - b _0804F59A -_0804F594: - movs r0, 0x8 - bl sub_804F5BC -_0804F59A: - ldr r0, _0804F5B8 @ =gUnknown_2031DA8 - ldr r1, [r0] - adds r1, r5 - movs r2, 0x8D - lsls r2, 4 - adds r1, r2 - movs r2, 0 - strb r2, [r1] - adds r3, r0, 0 -_0804F5AC: - adds r4, 0x1 - cmp r4, 0x3 - ble _0804F4E2 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0804F5B8: .4byte gUnknown_2031DA8 - thumb_func_end sub_804F4DC - - thumb_func_start sub_804F5BC -sub_804F5BC: @ 804F5BC - push {r4,lr} - sub sp, 0xC - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - movs r0, 0 - movs r1, 0x11 - bl FillWindowPixelBuffer - ldr r0, _0804F60C @ =gUnknown_8261EF4 - lsls r4, 2 - adds r4, r0 - ldr r2, [r4] - movs r0, 0x2 - str r0, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r0, 0 - str r0, [sp, 0x8] - movs r1, 0x3 - movs r3, 0 - bl AddTextPrinterParameterized - movs r0, 0 - movs r1, 0x14 - movs r2, 0xC - bl DrawTextBorderOuter - movs r0, 0 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - add sp, 0xC - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0804F60C: .4byte gUnknown_8261EF4 - thumb_func_end sub_804F5BC - - thumb_func_start sub_804F610 -sub_804F610: @ 804F610 - push {r4,lr} - sub sp, 0x8 - ldr r0, _0804F660 @ =gUnknown_2031DA8 - ldr r1, [r0] - adds r3, r1, 0 - adds r3, 0xA8 - ldrb r1, [r3] - adds r4, r0, 0 - cmp r1, 0xD - bhi _0804F64C - ldr r1, _0804F664 @ =gUnknown_2031C94 - ldrb r0, [r3] - lsls r0, 2 - adds r0, r1 - ldr r0, [r0] - str r0, [sp] - ldr r0, _0804F668 @ =0xffff0000 - ldr r2, [sp, 0x4] - ands r2, r0 - movs r0, 0x80 - lsls r0, 1 - orrs r2, r0 - str r2, [sp, 0x4] - ldrb r1, [r3] - adds r1, 0xC8 - lsls r1, 16 - ldr r0, _0804F66C @ =0x0000ffff - ands r0, r2 - orrs r0, r1 - str r0, [sp, 0x4] -_0804F64C: - ldr r0, [r4] - adds r0, 0xA8 - ldrb r0, [r0] - cmp r0, 0x11 - bhi _0804F71C - lsls r0, 2 - ldr r1, _0804F670 @ =_0804F674 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0804F660: .4byte gUnknown_2031DA8 -_0804F664: .4byte gUnknown_2031C94 -_0804F668: .4byte 0xffff0000 -_0804F66C: .4byte 0x0000ffff -_0804F670: .4byte _0804F674 - .align 2, 0 -_0804F674: - .4byte _0804F6BC - .4byte _0804F6BC - .4byte _0804F6BC - .4byte _0804F6BC - .4byte _0804F6BC - .4byte _0804F6BC - .4byte _0804F6BC - .4byte _0804F6BC - .4byte _0804F6C0 - .4byte _0804F6D8 - .4byte _0804F6D8 - .4byte _0804F6D8 - .4byte _0804F6D8 - .4byte _0804F6D8 - .4byte _0804F6DC - .4byte _0804F6E8 - .4byte _0804F6F4 - .4byte _0804F710 -_0804F6BC: - mov r0, sp - b _0804F6F6 -_0804F6C0: - mov r0, sp - bl LoadSpriteSheet - ldr r1, _0804F6D4 @ =gUnknown_2031DA8 - ldr r1, [r1] - adds r2, r1, 0 - adds r2, 0x72 - strh r0, [r2] - b _0804F6FE - .align 2, 0 -_0804F6D4: .4byte gUnknown_2031DA8 -_0804F6D8: - mov r0, sp - b _0804F6F6 -_0804F6DC: - ldr r0, _0804F6E4 @ =gUnknown_8261D00 - bl LoadSpritePalette - b _0804F6FA - .align 2, 0 -_0804F6E4: .4byte gUnknown_8261D00 -_0804F6E8: - ldr r0, _0804F6F0 @ =gUnknown_8261C60 - bl LoadSpritePalette - b _0804F6FA - .align 2, 0 -_0804F6F0: .4byte gUnknown_8261C60 -_0804F6F4: - ldr r0, _0804F708 @ =gUnknown_8261C58 -_0804F6F6: - bl LoadSpriteSheet -_0804F6FA: - ldr r0, _0804F70C @ =gUnknown_2031DA8 - ldr r1, [r0] -_0804F6FE: - adds r1, 0xA8 - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0804F71C - .align 2, 0 -_0804F708: .4byte gUnknown_8261C58 -_0804F70C: .4byte gUnknown_2031DA8 -_0804F710: - ldr r0, [r4] - adds r0, 0xA8 - movs r1, 0 - strb r1, [r0] - movs r0, 0x1 - b _0804F71E -_0804F71C: - movs r0, 0 -_0804F71E: - add sp, 0x8 - pop {r4} - pop {r1} - bx r1 - thumb_func_end sub_804F610 - - thumb_func_start sub_804F728 -sub_804F728: @ 804F728 - push {lr} - sub sp, 0x8 - ldr r2, _0804F744 @ =gDecompressionBuffer - str r2, [sp] - movs r2, 0x6 - str r2, [sp, 0x4] - movs r2, 0 - movs r3, 0 - bl sub_808BEB4 - add sp, 0x8 - pop {r0} - bx r0 - .align 2, 0 -_0804F744: .4byte gDecompressionBuffer - thumb_func_end sub_804F728 - - thumb_func_start sub_804F748 -sub_804F748: @ 804F748 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - lsls r0, 24 - lsrs r0, 24 - mov r8, r0 - cmp r0, 0 - beq _0804F760 - cmp r0, 0x1 - beq _0804F7F4 - b _0804F880 -_0804F760: - movs r7, 0 - ldr r1, _0804F7A0 @ =gUnknown_2031DA8 - ldr r0, [r1] - adds r0, 0x36 - ldrb r0, [r0] - cmp r7, r0 - blt _0804F770 - b _0804F880 -_0804F770: - adds r6, r1, 0 - movs r5, 0 - mov r9, r5 -_0804F776: - movs r0, 0x64 - adds r1, r7, 0 - muls r1, r0 - ldr r0, _0804F7A4 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x2D - bl GetMonData - adds r1, r0, 0 - cmp r1, 0x1 - bne _0804F7A8 - ldr r0, [r6] - adds r0, 0x45 - adds r0, r5 - mov r2, r9 - strb r2, [r0] - ldr r0, [r6] - adds r0, 0x51 - adds r0, r5 - b _0804F7D8 - .align 2, 0 -_0804F7A0: .4byte gUnknown_2031DA8 -_0804F7A4: .4byte gPlayerParty -_0804F7A8: - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - adds r1, r0, 0 - cmp r1, 0 - bne _0804F7C6 - ldr r0, [r6] - adds r0, 0x45 - adds r0, r5 - strb r1, [r0] - ldr r0, [r6] - adds r0, 0x51 - adds r0, r5 - b _0804F7D8 -_0804F7C6: - ldr r0, [r6] - adds r0, 0x45 - adds r0, r5 - movs r1, 0x1 - strb r1, [r0] - ldr r0, [r6] - adds r0, 0x51 - adds r0, r5 - mov r1, r9 -_0804F7D8: - strb r1, [r0] - ldr r0, _0804F7F0 @ =gUnknown_2031DA8 - adds r5, 0x1 - adds r7, 0x1 - ldr r0, [r0] - adds r0, 0x36 - add r0, r8 - ldrb r0, [r0] - cmp r7, r0 - blt _0804F776 - b _0804F880 - .align 2, 0 -_0804F7F0: .4byte gUnknown_2031DA8 -_0804F7F4: - movs r7, 0 - ldr r1, _0804F834 @ =gUnknown_2031DA8 - ldr r0, [r1] - adds r0, 0x37 - ldrb r0, [r0] - cmp r7, r0 - bge _0804F880 - adds r6, r1, 0 - movs r5, 0x6 - movs r2, 0 - mov r9, r2 -_0804F80A: - movs r0, 0x64 - adds r1, r7, 0 - muls r1, r0 - ldr r0, _0804F838 @ =gEnemyParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0x2D - bl GetMonData - adds r1, r0, 0 - cmp r1, 0x1 - bne _0804F83C - ldr r0, [r6] - adds r0, 0x45 - adds r0, r5 - mov r2, r9 - strb r2, [r0] - ldr r0, [r6] - adds r0, 0x51 - adds r0, r5 - b _0804F86C - .align 2, 0 -_0804F834: .4byte gUnknown_2031DA8 -_0804F838: .4byte gEnemyParty -_0804F83C: - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - adds r1, r0, 0 - cmp r1, 0 - bne _0804F85A - ldr r0, [r6] - adds r0, 0x45 - adds r0, r5 - strb r1, [r0] - ldr r0, [r6] - adds r0, 0x51 - adds r0, r5 - b _0804F86C -_0804F85A: - ldr r0, [r6] - adds r0, 0x45 - adds r0, r5 - movs r1, 0x1 - strb r1, [r0] - ldr r0, [r6] - adds r0, 0x51 - adds r0, r5 - mov r1, r9 -_0804F86C: - strb r1, [r0] - ldr r0, _0804F88C @ =gUnknown_2031DA8 - adds r5, 0x1 - adds r7, 0x1 - ldr r0, [r0] - adds r0, 0x36 - add r0, r8 - ldrb r0, [r0] - cmp r7, r0 - blt _0804F80A -_0804F880: - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804F88C: .4byte gUnknown_2031DA8 - thumb_func_end sub_804F748 - - thumb_func_start sub_804F890 -sub_804F890: @ 804F890 - push {r4-r7,lr} - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0 - beq _0804F8A0 - cmp r0, 0x1 - beq _0804F900 - b _0804F954 -_0804F8A0: - movs r6, 0 - ldr r1, _0804F8F8 @ =gUnknown_2031DA8 - ldr r0, [r1] - adds r0, 0x36 - ldrb r0, [r0] - cmp r6, r0 - bcs _0804F954 - adds r7, r1, 0 -_0804F8B0: - movs r0, 0x64 - adds r4, r6, 0 - muls r4, r0 - ldr r0, _0804F8FC @ =gPlayerParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 - adds r0, r4, 0 - movs r1, 0x3A - bl GetMonData - adds r1, r0, 0 - lsls r0, r5, 16 - asrs r0, 16 - lsls r1, 16 - asrs r1, 16 - bl GetHPBarLevel - ldr r1, [r7] - adds r1, 0x5D - adds r1, r6 - strb r0, [r1] - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - ldr r0, [r7] - adds r0, 0x36 - ldrb r0, [r0] - cmp r6, r0 - bcc _0804F8B0 - b _0804F954 - .align 2, 0 -_0804F8F8: .4byte gUnknown_2031DA8 -_0804F8FC: .4byte gPlayerParty -_0804F900: - movs r6, 0 - ldr r1, _0804F95C @ =gUnknown_2031DA8 - ldr r0, [r1] - adds r0, 0x37 - ldrb r0, [r0] - cmp r6, r0 - bcs _0804F954 - adds r7, r1, 0 -_0804F910: - movs r0, 0x64 - adds r4, r6, 0 - muls r4, r0 - ldr r0, _0804F960 @ =gEnemyParty - adds r4, r0 - adds r0, r4, 0 - movs r1, 0x39 - bl GetMonData - lsls r0, 16 - lsrs r5, r0, 16 - adds r0, r4, 0 - movs r1, 0x3A - bl GetMonData - adds r1, r0, 0 - lsls r0, r5, 16 - asrs r0, 16 - lsls r1, 16 - asrs r1, 16 - bl GetHPBarLevel - ldr r1, [r7] - adds r1, 0x63 - adds r1, r6 - strb r0, [r1] - adds r0, r6, 0x1 - lsls r0, 16 - lsrs r6, r0, 16 - ldr r0, [r7] - adds r0, 0x37 - ldrb r0, [r0] - cmp r6, r0 - bcc _0804F910 -_0804F954: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804F95C: .4byte gUnknown_2031DA8 -_0804F960: .4byte gEnemyParty - thumb_func_end sub_804F890 - - thumb_func_start sub_804F964 -sub_804F964: @ 804F964 - push {r4-r7,lr} - mov r7, r8 - push {r7} - movs r5, 0 -_0804F96C: - movs r4, 0 - ldr r2, _0804F9D0 @ =gUnknown_2031DA8 - ldr r0, [r2] - adds r0, 0x36 - adds r0, r5 - adds r1, r5, 0x1 - mov r8, r1 - ldrb r0, [r0] - cmp r4, r0 - bge _0804F9BE - adds r6, r2, 0 - lsls r0, r5, 1 - adds r0, r5 - lsls r7, r0, 1 -_0804F988: - ldr r2, [r6] - adds r3, r4, r7 - adds r0, r2, 0 - adds r0, 0x28 - adds r0, r3 - ldrb r1, [r0] - lsls r0, r1, 4 - adds r0, r1 - lsls r0, 2 - ldr r1, _0804F9D4 @ =gSprites - adds r0, r1 - adds r2, 0x5D - adds r2, r3 - ldrb r2, [r2] - movs r1, 0x4 - subs r1, r2 - lsls r1, 24 - lsrs r1, 24 - bl MonIcon_SetAnim - adds r4, 0x1 - ldr r0, [r6] - adds r0, 0x36 - adds r0, r5 - ldrb r0, [r0] - cmp r4, r0 - blt _0804F988 -_0804F9BE: - mov r5, r8 - cmp r5, 0x1 - ble _0804F96C - pop {r3} - mov r8, r3 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0804F9D0: .4byte gUnknown_2031DA8 -_0804F9D4: .4byte gSprites - thumb_func_end sub_804F964 - - thumb_func_start sub_804F9D8 -sub_804F9D8: @ 804F9D8 - push {r4,r5,lr} - movs r2, 0 - ldr r5, _0804FA08 @ =gSaveBlock1Ptr - ldr r4, _0804FA0C @ =0x0000309c - ldr r3, _0804FA10 @ =gUnknown_2031DA8 -_0804F9E2: - ldr r0, [r5] - adds r0, r4 - adds r1, r0, r2 - ldrb r0, [r1] - cmp r0, 0 - bne _0804F9FC - ldr r0, [r3] - adds r0, 0xA9 - adds r0, r2 - ldrb r0, [r0] - cmp r0, 0 - beq _0804F9FC - strb r0, [r1] -_0804F9FC: - adds r2, 0x1 - cmp r2, 0xA - ble _0804F9E2 - pop {r4,r5} - pop {r0} - bx r0 - .align 2, 0 -_0804FA08: .4byte gSaveBlock1Ptr -_0804FA0C: .4byte 0x0000309c -_0804FA10: .4byte gUnknown_2031DA8 - thumb_func_end sub_804F9D8 - - thumb_func_start sub_804FA14 -sub_804FA14: @ 804FA14 - push {r4-r7,lr} - mov r7, r9 - mov r6, r8 - push {r6,r7} - sub sp, 0x30 - mov r8, r0 - adds r7, r1, 0 - mov r9, r2 - movs r5, 0 - cmp r5, r7 - bge _0804FA4E - mov r6, sp -_0804FA2C: - movs r0, 0x64 - adds r4, r5, 0 - muls r4, r0 - add r4, r8 - adds r0, r4, 0 - movs r1, 0x41 - bl GetMonData - str r0, [r6, 0x18] - adds r0, r4, 0 - movs r1, 0xB - bl GetMonData - stm r6!, {r0} - adds r5, 0x1 - cmp r5, r7 - blt _0804FA2C -_0804FA4E: - bl IsNationalPokedexEnabled - mov r1, r9 - lsls r4, r1, 2 - cmp r0, 0 - bne _0804FA70 - add r0, sp, 0x18 - adds r0, r4 - ldr r0, [r0] - cmp r0, 0x97 - ble _0804FA68 - movs r0, 0x2 - b _0804FB24 -_0804FA68: - cmp r0, 0 - bne _0804FA70 - movs r0, 0x3 - b _0804FB24 -_0804FA70: - bl GetMultiplayerId - movs r1, 0x1 - eors r0, r1 - lsls r0, 24 - lsrs r0, 24 - lsls r1, r0, 3 - subs r1, r0 - lsls r1, 2 - ldr r0, _0804FAB0 @ =gLinkPlayers - adds r1, r0 - ldrb r0, [r1] - subs r0, 0x1 - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0x1 - bls _0804FAB8 - ldrb r1, [r1, 0x12] - movs r0, 0xF - ands r0, r1 - cmp r0, 0 - bne _0804FAB8 - add r0, sp, 0x18 - adds r0, r4 - ldr r1, [r0] - movs r0, 0xCE - lsls r0, 1 - cmp r1, r0 - bne _0804FAB4 - movs r0, 0x5 - b _0804FB24 - .align 2, 0 -_0804FAB0: .4byte gLinkPlayers -_0804FAB4: - cmp r1, 0x97 - bgt _0804FADE -_0804FAB8: - mov r1, sp - adds r0, r1, r4 - ldr r1, [r0] - movs r0, 0xCD - lsls r0, 1 - cmp r1, r0 - beq _0804FACA - cmp r1, 0x97 - bne _0804FAE2 -_0804FACA: - movs r0, 0x64 - mov r1, r9 - muls r1, r0 - adds r0, r1, 0 - add r0, r8 - movs r1, 0x50 - bl GetMonData - cmp r0, 0 - bne _0804FAE2 -_0804FADE: - movs r0, 0x4 - b _0804FB24 -_0804FAE2: - cmp r7, 0 - ble _0804FB00 - movs r3, 0xCE - lsls r3, 1 - movs r2, 0 - add r1, sp, 0x18 - adds r5, r7, 0 -_0804FAF0: - ldr r0, [r1] - cmp r0, r3 - bne _0804FAF8 - str r2, [r1] -_0804FAF8: - adds r1, 0x4 - subs r5, 0x1 - cmp r5, 0 - bne _0804FAF0 -_0804FB00: - movs r2, 0 - movs r5, 0 - cmp r2, r7 - bge _0804FB1A - add r1, sp, 0x18 -_0804FB0A: - cmp r5, r9 - beq _0804FB12 - ldr r0, [r1] - adds r2, r0 -_0804FB12: - adds r1, 0x4 - adds r5, 0x1 - cmp r5, r7 - blt _0804FB0A -_0804FB1A: - cmp r2, 0 - bne _0804FB22 - movs r0, 0x1 - b _0804FB24 -_0804FB22: - movs r0, 0 -_0804FB24: - add sp, 0x30 - pop {r3,r4} - mov r8, r3 - mov r9, r4 - pop {r4-r7} - pop {r1} - bx r1 - thumb_func_end sub_804FA14 - thumb_func_start sub_804FB34 sub_804FB34: @ 804FB34 push {r4-r7,lr} diff --git a/include/graphics.h b/include/graphics.h index 740818cd8..ba174b348 100644 --- a/include/graphics.h +++ b/include/graphics.h @@ -4218,5 +4218,6 @@ extern const u8 gMonIcon_QuestionMark[]; extern const u16 gUnknown_8E9CEDC[]; extern const u16 gUnknown_8E9CF5C[]; extern const u16 gUnknown_8E9E9FC[]; +extern const u16 gUnknown_8E9F1FC[]; #endif //GUARD_GRAPHICS_H diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h index e554d23e9..13228e55e 100644 --- a/include/pokemon_icon.h +++ b/include/pokemon_icon.h @@ -22,5 +22,6 @@ u8 CreateMonIcon(u16 species, SpriteCallback callback, s16 x, s16 y, u8 subprior u8 UpdateMonIconFrame(struct Sprite *sprite); void LoadMonIconPalette(u16 iconId); void FreeMonIconPalette(u16 iconId); +void MonIcon_SetAnim(struct Sprite * sprite, u8 animNum); #endif // GUARD_POKEMON_ICON_H diff --git a/src/trade.c b/src/trade.c index b0f3b0e90..765eb394d 100644 --- a/src/trade.c +++ b/src/trade.c @@ -21,6 +21,9 @@ #include "overworld.h" #include "battle_anim.h" #include "party_menu.h" +#include "daycare.h" +#include "event_data.h" +#include "battle_interface.h" #include "pokemon_summary_screen.h" #include "pokemon_storage_system.h" #include "new_menu_helpers.h" @@ -67,7 +70,7 @@ struct TradeResources u16 unk_2; u8 unk_4; } unk_8D0[4]; - /*0x08F0*/ u8 bg1TilemapBuffer[BG_SCREEN_SIZE]; + /*0x08F0*/ u16 tilemapBuffer[BG_SCREEN_SIZE / 2]; }; IWRAM_DATA vu16 gUnknown_3000E78; @@ -105,7 +108,7 @@ void sub_804F748(u8 side); void sub_804F890(u8 side); void sub_804F964(void); void sub_804F9D8(void); -u32 sub_804FA14(struct Pokemon * party, u8 partyCount, u8 cursorPos); +u32 sub_804FA14(struct Pokemon * party, int partyCount, int cursorPos); void LoadHeldItemIcons(void); void sub_8050138(void); @@ -123,10 +126,16 @@ extern const u8 gUnknown_8261D08[][4][6]; extern const u16 gTradePartyBoxTilemap[]; extern const u16 gTradeMovesBoxTilemap[]; extern const u8 gUnknown_8262055[][2]; +extern const u8 gUnknown_8261E5A[][12]; +extern const u8 gUnknown_8261E72[][12]; extern const u8 gUnknown_8261F18[]; extern const u8 gUnknown_8261EB6[]; extern const u8 gUnknown_8261EC7[]; extern const u8 gUnknown_841E09F[]; +extern const u8 *const gUnknown_8261EF4[]; +extern const struct SpritePalette gUnknown_8261D00; +extern const struct SpritePalette gUnknown_8261C60; +extern const struct SpriteSheet gUnknown_8261C58; void sub_804C600(void) { @@ -142,7 +151,7 @@ void sub_804C600(void) LoadPalette(gTMCaseMainWindowPalette, 0xD0, 0x14); ResetBgsAndClearDma3BusyFlags(FALSE); InitBgsFromTemplates(0, gUnknown_8261F1C, NELEMS(gUnknown_8261F1C)); - SetBgTilemapBuffer(1, gUnknown_2031DA8->bg1TilemapBuffer); + SetBgTilemapBuffer(1, gUnknown_2031DA8->tilemapBuffer); if (InitWindows(gUnknown_8261F2C)) { DeactivateAllTextPrinters(); @@ -3288,3 +3297,496 @@ void sub_804EED4(u8 *a0, u8 a1, u8 a2) StringAppend(a0, gUnknown_841E09F); } } + +void sub_804EFB4(u8 whichParty, u8 windowId, const u8 *str) +{ + u8 xPos; + s8 speed; + windowId += (whichParty * PARTY_SIZE) + 2; + speed = 0; + xPos = (64u - GetStringWidth(0, str, GetFontAttribute(0, FONTATTR_LETTER_SPACING))) / 2; + AddTextPrinterParameterized3(windowId, 0, xPos, 4, gUnknown_8261F18, speed, str); + PutWindowTilemap(windowId); + CopyWindowToVram(windowId, 3); +} + +void sub_804F020(u8 whichParty) +{ + u8 buff[20]; + u8 nickname[30]; + struct Pokemon * party = whichParty == 0 ? gPlayerParty : gEnemyParty; + u8 i; + for (i = 0; i < gUnknown_2031DA8->partyCounts[whichParty]; i++) + { + GetMonData(&party[i], MON_DATA_NICKNAME, buff); + StringCopy10(nickname, buff); + sub_804EFB4(whichParty, i, nickname); + } +} + +void sub_804F08C(u8 whichParty, u8 monIdx, u8 a2, u8 a3, u8 a4, u8 a5) +{ + u8 level; + u32 r2; + u8 gender; + u8 nickname[12]; + + CopyToBgTilemapBufferRect_ChangePalette(1, gUnknown_8E9F1FC, a4, a5, 6, 3, 0); + CopyBgTilemapBufferToVram(1); + + if (whichParty == 0) + level = GetMonData(&gPlayerParty[monIdx], MON_DATA_LEVEL, NULL); + else + level = GetMonData(&gEnemyParty[monIdx], MON_DATA_LEVEL, NULL); + + if (gUnknown_2031DA8->unk_51[whichParty][monIdx] == 0) + { + if (level / 10 != 0) + gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32)] = (level / 10) + 0x60; + + gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32) + 1] = (level % 10) + 0x70; + } + else + { + gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32) - 32] = gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32) - 33]; + gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32) - 31] = gUnknown_2031DA8->tilemapBuffer[a2 + (a3 * 32) - 36] | 0x400; + } + + if (gUnknown_2031DA8->unk_51[whichParty][monIdx] != 0) + { + r2 = 0x480; + } + else + { + if (whichParty == 0) + { + gender = GetMonGender(&gPlayerParty[monIdx]); + GetMonData(&gPlayerParty[monIdx], MON_DATA_NICKNAME, nickname); + } + else + { + gender = GetMonGender(&gEnemyParty[monIdx]); + GetMonData(&gEnemyParty[monIdx], MON_DATA_NICKNAME, nickname); + } + + switch (gender) + { + case MON_MALE: + r2 = !NameHasGenderSymbol(nickname, MON_MALE) ? 0x84 : 0x83; + break; + case MON_FEMALE: + r2 = !NameHasGenderSymbol(nickname, MON_FEMALE) ? 0x85 : 0x83; + break; + default: + r2 = 0x83; + break; + } + } + gUnknown_2031DA8->tilemapBuffer[(a3 - 1) * 32 + a2 + 1] = r2; +} + +#ifdef NONMATCHING +// Instruction swap when setting r5 and r4 +void sub_804F284(u8 whichParty) +{ + s32 i; + const u8 *r5; + const u8 *r4; + for (i = 0; i < gUnknown_2031DA8->partyCounts[whichParty]; i++) + { + r5 = gUnknown_8261E5A[whichParty]; + r4 = gUnknown_8261E72[whichParty]; + sub_804F08C(whichParty, i, r5[2 * i + 0], r5[2 * i + 1], r4[2 * i + 0], r4[2 * i + 1]); + } +} +#else +NAKED +void sub_804F284(u8 whichParty) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tsub sp, 0x8\n" + "\tlsls r0, 24\n" + "\tlsrs r6, r0, 24\n" + "\tmovs r7, 0\n" + "\tldr r0, _0804F2DC @ =gUnknown_2031DA8\n" + "\tldr r0, [r0]\n" + "\tadds r0, 0x36\n" + "\tadds r0, r6\n" + "\tldrb r0, [r0]\n" + "\tcmp r7, r0\n" + "\tbge _0804F2D4\n" + "\tlsls r0, r6, 1\n" + "\tadds r0, r6\n" + "\tldr r1, _0804F2E0 @ =gUnknown_8261E5A\n" + "\tlsls r0, 2\n" + "\tadds r5, r0, r1\n" + "\tldr r1, _0804F2E4 @ =gUnknown_8261E72\n" + "\tadds r4, r0, r1\n" + "_0804F2AA:\n" + "\tlsls r1, r7, 24\n" + "\tlsrs r1, 24\n" + "\tldrb r2, [r5]\n" + "\tldrb r3, [r5, 0x1]\n" + "\tldrb r0, [r4]\n" + "\tstr r0, [sp]\n" + "\tldrb r0, [r4, 0x1]\n" + "\tstr r0, [sp, 0x4]\n" + "\tadds r0, r6, 0\n" + "\tbl sub_804F08C\n" + "\tadds r5, 0x2\n" + "\tadds r4, 0x2\n" + "\tadds r7, 0x1\n" + "\tldr r0, _0804F2DC @ =gUnknown_2031DA8\n" + "\tldr r0, [r0]\n" + "\tadds r0, 0x36\n" + "\tadds r0, r6\n" + "\tldrb r0, [r0]\n" + "\tcmp r7, r0\n" + "\tblt _0804F2AA\n" + "_0804F2D4:\n" + "\tadd sp, 0x8\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0804F2DC: .4byte gUnknown_2031DA8\n" + "_0804F2E0: .4byte gUnknown_8261E5A\n" + "_0804F2E4: .4byte gUnknown_8261E72"); +} +#endif //NONMATCHING + +void sub_804F2E8(u8 whichParty) +{ + int i; + + for (i = 0; i < gUnknown_2031DA8->partyCounts[whichParty]; i++) + { + gSprites[gUnknown_2031DA8->partyIcons[whichParty][i]].invisible = FALSE; + gSprites[gUnknown_2031DA8->partyIcons[whichParty][i]].pos1.x = gTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][0] * 8 + 14; + gSprites[gUnknown_2031DA8->partyIcons[whichParty][i]].pos1.y = gTradeMonSpriteCoords[(whichParty * PARTY_SIZE) + i][1] * 8 - 12; + gSprites[gUnknown_2031DA8->partyIcons[whichParty][i]].pos2.x = 0; + gSprites[gUnknown_2031DA8->partyIcons[whichParty][i]].pos2.y = 0; + } +} + +void sub_804F3B4(void) +{ + rbox_fill_rectangle(1); + sub_804F020(1); +} + +void sub_804F3C8(u8 whichParty) +{ + CopyToBgTilemapBufferRect_ChangePalette(1, gTradePartyBoxTilemap, 15 * whichParty, 0, 15, 17, 0); + CopyBgTilemapBufferToVram(1); + sub_804F284(whichParty); + sub_804F020(whichParty); + sub_804F2E8(whichParty); + sub_804F728(gUnknown_8261ECC[1], (void *)OBJ_VRAM0 + 32 * gUnknown_2031DA8->unk_72, 24); + gUnknown_2031DA8->unk_74[whichParty] = 0; +} + +void sub_804F440(void) +{ + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); +} + +void sub_804F464(void) +{ + FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20); + CopyBgTilemapBufferToVram(0); +} + +void sub_804F488(u16 a0, u8 a1) +{ + int i; + for (i = 0; i < 4; i++) + { + if (!gUnknown_2031DA8->unk_8D0[i].unk_0) + { + gUnknown_2031DA8->unk_8D0[i].unk_2 = a0; + gUnknown_2031DA8->unk_8D0[i].unk_4 = a1; + gUnknown_2031DA8->unk_8D0[i].unk_0 = TRUE; + break; + } + } +} + +void sub_804F4DC(void) +{ + int i; + + for (i = 0; i < 4; i++) + { + if (gUnknown_2031DA8->unk_8D0[i].unk_0) + { + if (gUnknown_2031DA8->unk_8D0[i].unk_2) + { + gUnknown_2031DA8->unk_8D0[i].unk_2--; + } + else + { + switch (gUnknown_2031DA8->unk_8D0[i].unk_4) + { + case 0: + SendBlock(bitmask_all_link_players_but_self(), gUnknown_2031DA8->linkData, 20); + break; + case 1: + sub_804F5BC(0); + break; + case 2: + sub_804F5BC(2); + break; + case 3: + case 4: + case 5: + sub_804F5BC(3); + break; + case 6: + sub_804F5BC(6); + break; + case 7: + sub_804F5BC(7); + break; + case 8: + sub_804F5BC(8); + break; + } + gUnknown_2031DA8->unk_8D0[i].unk_0 = FALSE; + } + } + } +} + +void sub_804F5BC(u8 idx) +{ + FillWindowPixelBuffer(0, PIXEL_FILL(1)); + AddTextPrinterParameterized(0, 3, gUnknown_8261EF4[idx], 0, 2, 0xFF, NULL); + DrawTextBorderOuter(0, 0x014, 12); + PutWindowTilemap(0); + CopyWindowToVram(0, 3); +} + +bool8 sub_804F610(void) +{ + struct SpriteSheet sheet; + + if (gUnknown_2031DA8->unk_A8 < 14) + { + sheet.data = gUnknown_2031C94[gUnknown_2031DA8->unk_A8]; + sheet.size = 0x100; + sheet.tag = 200 + gUnknown_2031DA8->unk_A8; + } + + switch (gUnknown_2031DA8->unk_A8) + { + case 0 ... 7: + LoadSpriteSheet(&sheet); + gUnknown_2031DA8->unk_A8++; + break; + case 8: + gUnknown_2031DA8->unk_72 = LoadSpriteSheet(&sheet); + gUnknown_2031DA8->unk_A8++; + break; + case 9 ... 13: + LoadSpriteSheet(&sheet); + gUnknown_2031DA8->unk_A8++; + break; + case 14: + LoadSpritePalette(&gUnknown_8261D00); + gUnknown_2031DA8->unk_A8++; + break; + case 15: + LoadSpritePalette(&gUnknown_8261C60); + gUnknown_2031DA8->unk_A8++; + break; + case 16: + LoadSpriteSheet(&gUnknown_8261C58); + gUnknown_2031DA8->unk_A8++; + break; + case 17: + gUnknown_2031DA8->unk_A8 = 0; + return TRUE; + } + + return FALSE; +} + +void sub_804F728(const u8 *name, u8 *dest, u8 unused) +{ + sub_808BEB4(name, dest, 0, 0, gDecompressionBuffer, 6); +} + +void sub_804F748(u8 who) +{ + int i; + + switch (who) + { + case 0: + for (i = 0; i < gUnknown_2031DA8->partyCounts[who]; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) == TRUE) + { + gUnknown_2031DA8->unk_45[who][i] = 0; + gUnknown_2031DA8->unk_51[who][i] = 1; + } + else if (GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) + { + gUnknown_2031DA8->unk_45[who][i] = 0; + gUnknown_2031DA8->unk_51[who][i] = 0; + } + else + { + gUnknown_2031DA8->unk_45[who][i] = 1; + gUnknown_2031DA8->unk_51[who][i] = 0; + } + } + break; + case 1: + for (i = 0; i < gUnknown_2031DA8->partyCounts[who]; i++) + { + if (GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG) == TRUE) + { + gUnknown_2031DA8->unk_45[who][i] = 0; + gUnknown_2031DA8->unk_51[who][i] = 1; + } + else if (GetMonData(&gEnemyParty[i], MON_DATA_HP) == 0) + { + gUnknown_2031DA8->unk_45[who][i] = 0; + gUnknown_2031DA8->unk_51[who][i] = 0; + } + else + { + gUnknown_2031DA8->unk_45[who][i] = 1; + gUnknown_2031DA8->unk_51[who][i] = 0; + } + } + break; + } +} + +void sub_804F890(u8 who) +{ + u16 i, curHp, maxHp; + + switch (who) + { + case 0: + for (i = 0; i < gUnknown_2031DA8->partyCounts[0]; i++) + { + curHp = GetMonData(&gPlayerParty[i], MON_DATA_HP); + maxHp = GetMonData(&gPlayerParty[i], MON_DATA_MAX_HP); + gUnknown_2031DA8->unk_5D[0][i] = GetHPBarLevel(curHp, maxHp); + } + break; + case 1: + for (i = 0; i < gUnknown_2031DA8->partyCounts[1]; i++) + { + curHp = GetMonData(&gEnemyParty[i], MON_DATA_HP); + maxHp = GetMonData(&gEnemyParty[i], MON_DATA_MAX_HP); + gUnknown_2031DA8->unk_5D[1][i] = GetHPBarLevel(curHp, maxHp); + } + break; + } +} + +void sub_804F964(void) +{ + int i, j; + for (i = 0; i < 2; i++) + { + for (j = 0; j < gUnknown_2031DA8->partyCounts[i]; j++) + { + MonIcon_SetAnim(&gSprites[gUnknown_2031DA8->partyIcons[i][j]], 4 - gUnknown_2031DA8->unk_5D[i][j]); + } + } +} + +void sub_804F9D8(void) +{ + int i; + for (i = 0; i < 11; i++) + { + if (gSaveBlock1Ptr->giftRibbons[i] == 0 && gUnknown_2031DA8->unk_A9[i] != 0) + gSaveBlock1Ptr->giftRibbons[i] = gUnknown_2031DA8->unk_A9[i]; + } +} + +u32 sub_804FA14(struct Pokemon *party, int partyCount, int cursorPos) +{ + int i, sum; + struct LinkPlayer *player; + int species[6]; + int species2[6]; + + for (i = 0; i < partyCount; i++) + { + species2[i] = GetMonData(&party[i], MON_DATA_SPECIES2); + species[i] = GetMonData(&party[i], MON_DATA_SPECIES); + } + + if (!IsNationalPokedexEnabled()) + { + if (species2[cursorPos] > SPECIES_MEW) + { + return 2; + } + if (species2[cursorPos] == SPECIES_NONE) + { + return 3; + } + } + + player = &gLinkPlayers[GetMultiplayerId() ^ 1]; + if ((player->version & 0xFF) != VERSION_RUBY && + (player->version & 0xFF) != VERSION_SAPPHIRE) + { + if ((player->name[10] & 0xF) == 0) + { + if (species2[cursorPos] == SPECIES_EGG) + { + return 5; + } + + if (species2[cursorPos] > SPECIES_MEW) + { + return 4; + } + } + } + + if (species[cursorPos] == SPECIES_DEOXYS || species[cursorPos] == SPECIES_MEW) + { + if (!GetMonData(&party[cursorPos], MON_DATA_OBEDIENCE)) + { + return 4; + } + } + + for (i = 0; i < partyCount; i++) + { + if (species2[i] == SPECIES_EGG) + { + species2[i] = SPECIES_NONE; + } + } + + for (sum = 0, i = 0; i < partyCount; i++) + { + if (i != cursorPos) + { + sum += species2[i]; + } + } + + if (sum != 0) + { + return 0; + } + else + { + return 1; + } +} |