From c4626ec2966d8d31140fc3cd26fee505d7f817d2 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 22 Jan 2020 13:47:30 -0500 Subject: Finish rfu_union_tool decomp --- asm/rfu_union_tool.s | 815 ----------------------------------------- asm/union_room_battle.s | 555 ++++++++++++++++++++++++++++ data/rfu_union_tool.s | 22 -- data/union_room_battle.s | 22 ++ include/event_object_80688E4.h | 1 + ld_script.txt | 4 +- src/rfu_union_tool.c | 95 +++++ 7 files changed, 675 insertions(+), 839 deletions(-) delete mode 100644 asm/rfu_union_tool.s create mode 100644 asm/union_room_battle.s delete mode 100644 data/rfu_union_tool.s create mode 100644 data/union_room_battle.s diff --git a/asm/rfu_union_tool.s b/asm/rfu_union_tool.s deleted file mode 100644 index 12e5200bc..000000000 --- a/asm/rfu_union_tool.s +++ /dev/null @@ -1,815 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_811BE6C -sub_811BE6C: @ 811BE6C - push {r4,r5,lr} - adds r5, r0, 0 - bl sub_811B90C - movs r4, 0 -_0811BE76: - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_811BC68 - adds r4, 0x1 - cmp r4, 0x4 - ble _0811BE76 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_811BE6C - - thumb_func_start sub_811BE8C -sub_811BE8C: @ 811BE8C - push {r4,r5,lr} - ldr r2, _0811BEAC @ =gUnknown_203B088 - movs r1, 0 - str r1, [r2] - movs r5, 0 - ldr r4, [r0] -_0811BE98: - ldrb r0, [r4, 0x1A] - movs r1, 0x3 - ands r1, r0 - cmp r1, 0x1 - bne _0811BEB0 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_811BDA8 - b _0811BEBC - .align 2, 0 -_0811BEAC: .4byte gUnknown_203B088 -_0811BEB0: - cmp r1, 0x2 - bne _0811BEBC - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_811BE6C -_0811BEBC: - adds r4, 0x20 - adds r5, 0x1 - cmp r5, 0x7 - ble _0811BE98 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_811BE8C - - thumb_func_start sub_811BECC -sub_811BECC: @ 811BECC - ldr r1, _0811BED8 @ =gUnknown_203B088 - movs r0, 0x96 - lsls r0, 1 - str r0, [r1] - bx lr - .align 2, 0 -_0811BED8: .4byte gUnknown_203B088 - thumb_func_end sub_811BECC - - thumb_func_start sub_811BEDC -sub_811BEDC: @ 811BEDC - push {lr} - adds r2, r0, 0 - ldr r0, _0811BEFC @ =gUnknown_203B088 - ldr r1, [r0] - adds r1, 0x1 - str r1, [r0] - movs r0, 0x96 - lsls r0, 1 - cmp r1, r0 - bls _0811BEF6 - adds r0, r2, 0 - bl sub_811BE8C -_0811BEF6: - pop {r0} - bx r0 - .align 2, 0 -_0811BEFC: .4byte gUnknown_203B088 - thumb_func_end sub_811BEDC - - thumb_func_start sub_811BF00 -sub_811BF00: @ 811BF00 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0x18 - adds r5, r0, 0 - str r1, [sp, 0x4] - str r2, [sp, 0x8] - bl is_walking_or_running - cmp r0, 0 - bne _0811BF48 - b _0811BFEE -_0811BF1C: - ldr r4, _0811BF44 @ =gUnknown_8457116 - bl GetPlayerFacingDirection - lsls r0, 24 - lsrs r0, 24 - adds r0, r4 - ldrb r2, [r0] - adds r0, r6, 0 - ldr r1, [sp, 0xC] - bl sub_811C008 - ldr r0, [sp, 0x4] - strh r6, [r0] - mov r1, sp - ldrh r2, [r1, 0xC] - ldr r1, [sp, 0x8] - strh r2, [r1] - movs r0, 0x1 - b _0811BFF0 - .align 2, 0 -_0811BF44: .4byte gUnknown_8457116 -_0811BF48: - mov r4, sp - adds r4, 0x2 - mov r0, sp - adds r1, r4, 0 - bl GetXYCoordsOneStepInFrontOfPlayer - movs r0, 0 - str r0, [sp, 0xC] - ldr r0, _0811C000 @ =gUnknown_84570EC - adds r7, r5, 0 - movs r1, 0 - mov r10, r1 - adds r2, r0, 0x2 - str r2, [sp, 0x10] - str r0, [sp, 0x14] -_0811BF66: - movs r6, 0 - ldr r4, [sp, 0x14] - movs r0, 0 - ldrsh r4, [r4, r0] - mov r9, r4 - ldr r1, [sp, 0x10] - mov r8, r1 - ldr r5, _0811C004 @ =gUnknown_845710C -_0811BF76: - mov r2, r10 - adds r3, r2, r6 - mov r0, sp - movs r4, 0 - ldrsh r1, [r0, r4] - movs r0, 0 - ldrsb r0, [r5, r0] - add r0, r9 - adds r0, 0x7 - cmp r1, r0 - bne _0811BFCA - mov r1, sp - movs r2, 0x2 - ldrsh r0, [r1, r2] - mov r4, r8 - movs r2, 0 - ldrsh r1, [r4, r2] - movs r2, 0x1 - ldrsb r2, [r5, r2] - adds r1, r2 - adds r1, 0x7 - cmp r0, r1 - bne _0811BFCA - adds r0, r3, 0 - subs r0, 0x38 - lsls r0, 24 - lsrs r4, r0, 24 - adds r0, r4, 0 - bl sub_806916C - cmp r0, 0 - bne _0811BFCA - adds r0, r4, 0 - bl sub_8069294 - cmp r0, 0 - bne _0811BFCA - ldrb r1, [r7, 0x1A] - movs r0, 0x3 - ands r0, r1 - cmp r0, 0x1 - beq _0811BF1C -_0811BFCA: - adds r5, 0x2 - adds r6, 0x1 - cmp r6, 0x4 - ble _0811BF76 - adds r7, 0x20 - movs r4, 0x5 - add r10, r4 - ldr r0, [sp, 0x10] - adds r0, 0x4 - str r0, [sp, 0x10] - ldr r1, [sp, 0x14] - adds r1, 0x4 - str r1, [sp, 0x14] - ldr r2, [sp, 0xC] - adds r2, 0x1 - str r2, [sp, 0xC] - cmp r2, 0x7 - ble _0811BF66 -_0811BFEE: - movs r0, 0 -_0811BFF0: - add sp, 0x18 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r1} - bx r1 - .align 2, 0 -_0811C000: .4byte gUnknown_84570EC -_0811C004: .4byte gUnknown_845710C - thumb_func_end sub_811BF00 - - thumb_func_start sub_811C008 -sub_811C008: @ 811C008 - push {r4,lr} - adds r4, r0, 0 - adds r3, r1, 0 - lsls r1, r2, 24 - lsrs r1, 24 - lsls r0, r3, 2 - adds r0, r3 - subs r0, 0x38 - adds r0, r4 - lsls r0, 24 - lsrs r0, 24 - bl sub_8069058 - pop {r4} - pop {r0} - bx r0 - thumb_func_end sub_811C008 - - thumb_func_start sub_811C028 -sub_811C028: @ 811C028 - push {r4,r5,lr} - adds r5, r0, 0 - adds r4, r1, 0 - lsls r3, r4, 5 - adds r3, r2 - adds r2, r3, 0 - bl sub_811BBA0 - adds r2, r0, 0 - lsls r2, 24 - lsrs r2, 24 - adds r0, r5, 0 - adds r1, r4, 0 - bl sub_811C008 - pop {r4,r5} - pop {r0} - bx r0 - thumb_func_end sub_811C028 - - thumb_func_start sub_811C04C -sub_811C04C: @ 811C04C - push {r4-r7,lr} - movs r0, 0xA - bl sub_81173C0 - movs r4, 0 - movs r7, 0x64 - ldr r6, _0811C0CC @ =gPlayerParty - ldr r5, _0811C0D0 @ =gEnemyParty -_0811C05C: - ldr r0, _0811C0D4 @ =gSelectedOrderFromParty - adds r0, r4, r0 - ldrb r0, [r0] - subs r0, 0x1 - adds r1, r0, 0 - muls r1, r7 - adds r1, r6 - adds r0, r5, 0 - movs r2, 0x64 - bl memcpy - adds r5, 0x64 - adds r4, 0x1 - cmp r4, 0x1 - ble _0811C05C - ldr r4, _0811C0CC @ =gPlayerParty - movs r0, 0xFA - lsls r0, 1 - adds r5, r4, r0 -_0811C082: - adds r0, r4, 0 - bl ZeroMonData - adds r4, 0x64 - cmp r4, r5 - ble _0811C082 - ldr r4, _0811C0CC @ =gPlayerParty - movs r5, 0 - adds r6, r4, 0 - adds r6, 0x64 -_0811C096: - ldr r1, _0811C0D0 @ =gEnemyParty - adds r1, r5, r1 - adds r0, r4, 0 - movs r2, 0x64 - bl memcpy - adds r4, 0x64 - adds r5, 0x64 - cmp r4, r6 - ble _0811C096 - movs r0, 0x32 - bl IncrementGameStat - bl CalculatePlayerPartyCount - ldr r0, _0811C0D8 @ =gTrainerBattleOpponent_A - movs r2, 0xC0 - lsls r2, 4 - adds r1, r2, 0 - strh r1, [r0] - ldr r0, _0811C0DC @ =CB2_InitBattle - bl SetMainCallback2 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0811C0CC: .4byte gPlayerParty -_0811C0D0: .4byte gEnemyParty -_0811C0D4: .4byte gSelectedOrderFromParty -_0811C0D8: .4byte gTrainerBattleOpponent_A -_0811C0DC: .4byte CB2_InitBattle - thumb_func_end sub_811C04C - - thumb_func_start sub_811C0E0 -sub_811C0E0: @ 811C0E0 - push {r4-r6,lr} - mov r6, r10 - mov r5, r9 - mov r4, r8 - push {r4-r6} - sub sp, 0x18 - adds r5, r0, 0 - mov r10, r1 - adds r6, r2, 0 - ldr r4, [sp, 0x34] - lsls r5, 24 - lsrs r5, 24 - lsls r6, 24 - lsrs r6, 24 - lsls r3, 24 - lsrs r3, 24 - movs r0, 0x1 - mov r8, r0 - ldr r1, _0811C14C @ =gUnknown_84571A8 - mov r9, r1 - ldrb r0, [r1] - lsls r1, r0, 4 - orrs r1, r0 - lsls r1, 24 - lsrs r1, 24 - adds r0, r5, 0 - str r3, [sp, 0x14] - bl FillWindowPixelBuffer - mov r0, r8 - str r0, [sp] - str r0, [sp, 0x4] - mov r1, r9 - str r1, [sp, 0x8] - lsls r4, 24 - asrs r4, 24 - str r4, [sp, 0xC] - mov r0, r10 - str r0, [sp, 0x10] - adds r0, r5, 0 - movs r1, 0x3 - adds r2, r6, 0 - ldr r3, [sp, 0x14] - bl AddTextPrinterParameterized4 - add sp, 0x18 - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0811C14C: .4byte gUnknown_84571A8 - thumb_func_end sub_811C0E0 - - thumb_func_start sub_811C150 -sub_811C150: @ 811C150 - push {r4-r6,lr} - sub sp, 0x4 - adds r4, r0, 0 - adds r6, r1, 0 - adds r5, r2, 0 - movs r1, 0 - ldrsh r0, [r4, r1] - cmp r0, 0 - beq _0811C168 - cmp r0, 0x1 - beq _0811C196 - b _0811C1AA -_0811C168: - movs r0, 0 - movs r1, 0x1 - movs r2, 0xD - bl DrawTextBorderOuter - str r5, [sp] - movs r0, 0 - adds r1, r6, 0 - movs r2, 0 - movs r3, 0x2 - bl sub_811C0E0 - movs r0, 0 - bl PutWindowTilemap - movs r0, 0 - movs r1, 0x3 - bl CopyWindowToVram - ldrh r0, [r4] - adds r0, 0x1 - strh r0, [r4] - b _0811C1AA -_0811C196: - movs r0, 0 - bl IsTextPrinterActive - lsls r0, 16 - lsrs r0, 16 - cmp r0, 0 - bne _0811C1AA - strh r0, [r4] - movs r0, 0x1 - b _0811C1AC -_0811C1AA: - movs r0, 0 -_0811C1AC: - add sp, 0x4 - pop {r4-r6} - pop {r1} - bx r1 - thumb_func_end sub_811C150 - - thumb_func_start sub_811C1B4 -sub_811C1B4: @ 811C1B4 - push {lr} - bl LoadOam - bl ProcessSpriteCopyRequests - bl TransferPlttBuffer - pop {r0} - bx r0 - thumb_func_end sub_811C1B4 - - thumb_func_start sub_811C1C8 -sub_811C1C8: @ 811C1C8 - push {r4,lr} - sub sp, 0xC - ldr r1, _0811C1E8 @ =gMain - movs r2, 0x87 - lsls r2, 3 - adds r0, r1, r2 - ldrb r0, [r0] - adds r2, r1, 0 - cmp r0, 0x33 - bls _0811C1DE - b _0811C516 -_0811C1DE: - lsls r0, 2 - ldr r1, _0811C1EC @ =_0811C1F0 - adds r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0811C1E8: .4byte gMain -_0811C1EC: .4byte _0811C1F0 - .align 2, 0 -_0811C1F0: - .4byte _0811C2C0 - .4byte _0811C364 - .4byte _0811C38C - .4byte _0811C3B0 - .4byte _0811C400 - .4byte _0811C516 - .4byte _0811C4E4 - .4byte _0811C4C0 - .4byte _0811C4E4 - .4byte _0811C500 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C516 - .4byte _0811C48C - .4byte _0811C4A8 -_0811C2C0: - movs r0, 0 - movs r1, 0 - bl SetGpuReg - ldr r4, _0811C350 @ =gUnknown_203B08C - movs r0, 0x4 - bl AllocZeroed - str r0, [r4] - bl ResetSpriteData - bl FreeAllSpritePalettes - bl ResetTasks - movs r0, 0 - bl ResetBgsAndClearDma3BusyFlags - ldr r1, _0811C354 @ =gUnknown_8457194 - movs r0, 0 - movs r2, 0x1 - bl InitBgsFromTemplates - bl ResetTempTileDataBuffers - ldr r0, _0811C358 @ =gUnknown_8457198 - bl InitWindows - lsls r0, 16 - cmp r0, 0 - bne _0811C300 - b _0811C52A -_0811C300: - bl DeactivateAllTextPrinters - movs r0, 0 - bl ClearWindowTilemap - movs r0, 0 - movs r1, 0 - bl FillWindowPixelBuffer - movs r0, 0 - movs r1, 0x11 - bl FillWindowPixelBuffer - movs r0, 0x1E - str r0, [sp] - movs r0, 0x14 - str r0, [sp, 0x4] - movs r0, 0xF - str r0, [sp, 0x8] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillBgTilemapBufferRect - movs r0, 0 - movs r1, 0x1 - movs r2, 0xD0 - bl TextWindow_SetStdFrame0_WithPal - bl Menu_LoadStdPal - ldr r0, _0811C35C @ =sub_811C1B4 - bl SetVBlankCallback - ldr r1, _0811C360 @ =gMain - movs r0, 0x87 - lsls r0, 3 - adds r1, r0 - b _0811C4F2 - .align 2, 0 -_0811C350: .4byte gUnknown_203B08C -_0811C354: .4byte gUnknown_8457194 -_0811C358: .4byte gUnknown_8457198 -_0811C35C: .4byte sub_811C1B4 -_0811C360: .4byte gMain -_0811C364: - ldr r0, _0811C380 @ =gUnknown_203B08C - ldr r0, [r0] - ldr r1, _0811C384 @ =gUnknown_841E538 - movs r2, 0 - bl sub_811C150 - cmp r0, 0 - bne _0811C376 - b _0811C516 -_0811C376: - ldr r1, _0811C388 @ =gMain - movs r2, 0x87 - lsls r2, 3 - adds r1, r2 - b _0811C4F2 - .align 2, 0 -_0811C380: .4byte gUnknown_203B08C -_0811C384: .4byte gUnknown_841E538 -_0811C388: .4byte gMain -_0811C38C: - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0x10 - movs r3, 0 - bl BeginNormalPaletteFade - movs r0, 0 - bl ShowBg - ldr r1, _0811C3AC @ =gMain - movs r0, 0x87 - lsls r0, 3 - adds r1, r0 - b _0811C4F2 - .align 2, 0 -_0811C3AC: .4byte gMain -_0811C3B0: - bl UpdatePaletteFade - lsls r0, 24 - cmp r0, 0 - beq _0811C3BC - b _0811C516 -_0811C3BC: - ldr r4, _0811C3D8 @ =gBlockSendBuffer - adds r0, r4, 0 - movs r1, 0 - movs r2, 0x20 - bl memset - ldr r0, _0811C3DC @ =gSelectedOrderFromParty - ldrb r1, [r0] - ldrb r0, [r0, 0x1] - cmn r1, r0 - bne _0811C3E0 - movs r0, 0x52 - b _0811C3E2 - .align 2, 0 -_0811C3D8: .4byte gBlockSendBuffer -_0811C3DC: .4byte gSelectedOrderFromParty -_0811C3E0: - movs r0, 0x51 -_0811C3E2: - strb r0, [r4] - ldr r1, _0811C3F8 @ =gBlockSendBuffer - movs r0, 0 - movs r2, 0x20 - bl SendBlock - ldr r1, _0811C3FC @ =gMain - movs r2, 0x87 - lsls r2, 3 - adds r1, r2 - b _0811C4F2 - .align 2, 0 -_0811C3F8: .4byte gBlockSendBuffer -_0811C3FC: .4byte gMain -_0811C400: - bl GetBlockReceivedStatus - lsls r0, 24 - lsrs r0, 24 - cmp r0, 0x3 - beq _0811C40E - b _0811C516 -_0811C40E: - ldr r1, _0811C440 @ =gBlockRecvBuffer - ldrh r0, [r1] - cmp r0, 0x51 - bne _0811C448 - movs r2, 0x80 - lsls r2, 1 - adds r0, r1, r2 - ldrh r0, [r0] - cmp r0, 0x51 - bne _0811C448 - movs r0, 0x1 - negs r0, r0 - movs r1, 0 - str r1, [sp] - movs r2, 0 - movs r3, 0x10 - bl BeginNormalPaletteFade - ldr r0, _0811C444 @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - movs r1, 0x32 - b _0811C47E - .align 2, 0 -_0811C440: .4byte gBlockRecvBuffer -_0811C444: .4byte gMain -_0811C448: - bl sub_800AAC0 - ldr r4, _0811C46C @ =gBlockRecvBuffer - bl GetMultiplayerId - lsls r0, 24 - lsrs r0, 16 - adds r0, r4 - ldrh r0, [r0] - cmp r0, 0x52 - bne _0811C474 - ldr r0, _0811C470 @ =gMain - movs r2, 0x87 - lsls r2, 3 - adds r0, r2 - movs r1, 0x6 - b _0811C47E - .align 2, 0 -_0811C46C: .4byte gBlockRecvBuffer -_0811C470: .4byte gMain -_0811C474: - ldr r0, _0811C488 @ =gMain - movs r1, 0x87 - lsls r1, 3 - adds r0, r1 - movs r1, 0x8 -_0811C47E: - strb r1, [r0] - bl ResetBlockReceivedFlags - b _0811C516 - .align 2, 0 -_0811C488: .4byte gMain -_0811C48C: - bl UpdatePaletteFade - lsls r0, 24 - cmp r0, 0 - bne _0811C516 - bl sub_800AB9C - ldr r1, _0811C4A4 @ =gMain - movs r2, 0x87 - lsls r2, 3 - adds r1, r2 - b _0811C4F2 - .align 2, 0 -_0811C4A4: .4byte gMain -_0811C4A8: - bl IsLinkTaskFinished - lsls r0, 24 - cmp r0, 0 - beq _0811C516 - ldr r0, _0811C4BC @ =sub_811C04C - bl SetMainCallback2 - b _0811C516 - .align 2, 0 -_0811C4BC: .4byte sub_811C04C -_0811C4C0: - ldr r0, _0811C4D8 @ =gUnknown_203B08C - ldr r0, [r0] - ldr r1, _0811C4DC @ =gUnknown_841E58D - movs r2, 0x1 - bl sub_811C150 - cmp r0, 0 - beq _0811C516 - ldr r0, _0811C4E0 @ =CB2_ReturnToField - bl SetMainCallback2 - b _0811C516 - .align 2, 0 -_0811C4D8: .4byte gUnknown_203B08C -_0811C4DC: .4byte gUnknown_841E58D -_0811C4E0: .4byte CB2_ReturnToField -_0811C4E4: - ldr r0, _0811C4FC @ =gReceivedRemoteLinkPlayers - ldrb r0, [r0] - cmp r0, 0 - bne _0811C516 - movs r0, 0x87 - lsls r0, 3 - adds r1, r2, r0 -_0811C4F2: - ldrb r0, [r1] - adds r0, 0x1 - strb r0, [r1] - b _0811C516 - .align 2, 0 -_0811C4FC: .4byte gReceivedRemoteLinkPlayers -_0811C500: - ldr r0, _0811C534 @ =gUnknown_203B08C - ldr r0, [r0] - ldr r1, _0811C538 @ =gUnknown_841E572 - movs r2, 0x1 - bl sub_811C150 - cmp r0, 0 - beq _0811C516 - ldr r0, _0811C53C @ =CB2_ReturnToField - bl SetMainCallback2 -_0811C516: - bl RunTasks - bl RunTextPrinters - bl AnimateSprites - bl BuildOamBuffer - bl UpdatePaletteFade -_0811C52A: - add sp, 0xC - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0811C534: .4byte gUnknown_203B08C -_0811C538: .4byte gUnknown_841E572 -_0811C53C: .4byte CB2_ReturnToField - thumb_func_end sub_811C1C8 - - .align 2, 0 @ Don't pad with nop. diff --git a/asm/union_room_battle.s b/asm/union_room_battle.s new file mode 100644 index 000000000..d76f458a9 --- /dev/null +++ b/asm/union_room_battle.s @@ -0,0 +1,555 @@ + .include "asm/macros.inc" + .include "constants/constants.inc" + + .syntax unified + + .text + + thumb_func_start sub_811C04C +sub_811C04C: @ 811C04C + push {r4-r7,lr} + movs r0, 0xA + bl sub_81173C0 + movs r4, 0 + movs r7, 0x64 + ldr r6, _0811C0CC @ =gPlayerParty + ldr r5, _0811C0D0 @ =gEnemyParty +_0811C05C: + ldr r0, _0811C0D4 @ =gSelectedOrderFromParty + adds r0, r4, r0 + ldrb r0, [r0] + subs r0, 0x1 + adds r1, r0, 0 + muls r1, r7 + adds r1, r6 + adds r0, r5, 0 + movs r2, 0x64 + bl memcpy + adds r5, 0x64 + adds r4, 0x1 + cmp r4, 0x1 + ble _0811C05C + ldr r4, _0811C0CC @ =gPlayerParty + movs r0, 0xFA + lsls r0, 1 + adds r5, r4, r0 +_0811C082: + adds r0, r4, 0 + bl ZeroMonData + adds r4, 0x64 + cmp r4, r5 + ble _0811C082 + ldr r4, _0811C0CC @ =gPlayerParty + movs r5, 0 + adds r6, r4, 0 + adds r6, 0x64 +_0811C096: + ldr r1, _0811C0D0 @ =gEnemyParty + adds r1, r5, r1 + adds r0, r4, 0 + movs r2, 0x64 + bl memcpy + adds r4, 0x64 + adds r5, 0x64 + cmp r4, r6 + ble _0811C096 + movs r0, 0x32 + bl IncrementGameStat + bl CalculatePlayerPartyCount + ldr r0, _0811C0D8 @ =gTrainerBattleOpponent_A + movs r2, 0xC0 + lsls r2, 4 + adds r1, r2, 0 + strh r1, [r0] + ldr r0, _0811C0DC @ =CB2_InitBattle + bl SetMainCallback2 + pop {r4-r7} + pop {r0} + bx r0 + .align 2, 0 +_0811C0CC: .4byte gPlayerParty +_0811C0D0: .4byte gEnemyParty +_0811C0D4: .4byte gSelectedOrderFromParty +_0811C0D8: .4byte gTrainerBattleOpponent_A +_0811C0DC: .4byte CB2_InitBattle + thumb_func_end sub_811C04C + + thumb_func_start sub_811C0E0 +sub_811C0E0: @ 811C0E0 + push {r4-r6,lr} + mov r6, r10 + mov r5, r9 + mov r4, r8 + push {r4-r6} + sub sp, 0x18 + adds r5, r0, 0 + mov r10, r1 + adds r6, r2, 0 + ldr r4, [sp, 0x34] + lsls r5, 24 + lsrs r5, 24 + lsls r6, 24 + lsrs r6, 24 + lsls r3, 24 + lsrs r3, 24 + movs r0, 0x1 + mov r8, r0 + ldr r1, _0811C14C @ =gUnknown_84571A8 + mov r9, r1 + ldrb r0, [r1] + lsls r1, r0, 4 + orrs r1, r0 + lsls r1, 24 + lsrs r1, 24 + adds r0, r5, 0 + str r3, [sp, 0x14] + bl FillWindowPixelBuffer + mov r0, r8 + str r0, [sp] + str r0, [sp, 0x4] + mov r1, r9 + str r1, [sp, 0x8] + lsls r4, 24 + asrs r4, 24 + str r4, [sp, 0xC] + mov r0, r10 + str r0, [sp, 0x10] + adds r0, r5, 0 + movs r1, 0x3 + adds r2, r6, 0 + ldr r3, [sp, 0x14] + bl AddTextPrinterParameterized4 + add sp, 0x18 + pop {r3-r5} + mov r8, r3 + mov r9, r4 + mov r10, r5 + pop {r4-r6} + pop {r0} + bx r0 + .align 2, 0 +_0811C14C: .4byte gUnknown_84571A8 + thumb_func_end sub_811C0E0 + + thumb_func_start sub_811C150 +sub_811C150: @ 811C150 + push {r4-r6,lr} + sub sp, 0x4 + adds r4, r0, 0 + adds r6, r1, 0 + adds r5, r2, 0 + movs r1, 0 + ldrsh r0, [r4, r1] + cmp r0, 0 + beq _0811C168 + cmp r0, 0x1 + beq _0811C196 + b _0811C1AA +_0811C168: + movs r0, 0 + movs r1, 0x1 + movs r2, 0xD + bl DrawTextBorderOuter + str r5, [sp] + movs r0, 0 + adds r1, r6, 0 + movs r2, 0 + movs r3, 0x2 + bl sub_811C0E0 + movs r0, 0 + bl PutWindowTilemap + movs r0, 0 + movs r1, 0x3 + bl CopyWindowToVram + ldrh r0, [r4] + adds r0, 0x1 + strh r0, [r4] + b _0811C1AA +_0811C196: + movs r0, 0 + bl IsTextPrinterActive + lsls r0, 16 + lsrs r0, 16 + cmp r0, 0 + bne _0811C1AA + strh r0, [r4] + movs r0, 0x1 + b _0811C1AC +_0811C1AA: + movs r0, 0 +_0811C1AC: + add sp, 0x4 + pop {r4-r6} + pop {r1} + bx r1 + thumb_func_end sub_811C150 + + thumb_func_start sub_811C1B4 +sub_811C1B4: @ 811C1B4 + push {lr} + bl LoadOam + bl ProcessSpriteCopyRequests + bl TransferPlttBuffer + pop {r0} + bx r0 + thumb_func_end sub_811C1B4 + + thumb_func_start sub_811C1C8 +sub_811C1C8: @ 811C1C8 + push {r4,lr} + sub sp, 0xC + ldr r1, _0811C1E8 @ =gMain + movs r2, 0x87 + lsls r2, 3 + adds r0, r1, r2 + ldrb r0, [r0] + adds r2, r1, 0 + cmp r0, 0x33 + bls _0811C1DE + b _0811C516 +_0811C1DE: + lsls r0, 2 + ldr r1, _0811C1EC @ =_0811C1F0 + adds r0, r1 + ldr r0, [r0] + mov pc, r0 + .align 2, 0 +_0811C1E8: .4byte gMain +_0811C1EC: .4byte _0811C1F0 + .align 2, 0 +_0811C1F0: + .4byte _0811C2C0 + .4byte _0811C364 + .4byte _0811C38C + .4byte _0811C3B0 + .4byte _0811C400 + .4byte _0811C516 + .4byte _0811C4E4 + .4byte _0811C4C0 + .4byte _0811C4E4 + .4byte _0811C500 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C516 + .4byte _0811C48C + .4byte _0811C4A8 +_0811C2C0: + movs r0, 0 + movs r1, 0 + bl SetGpuReg + ldr r4, _0811C350 @ =gUnknown_203B08C + movs r0, 0x4 + bl AllocZeroed + str r0, [r4] + bl ResetSpriteData + bl FreeAllSpritePalettes + bl ResetTasks + movs r0, 0 + bl ResetBgsAndClearDma3BusyFlags + ldr r1, _0811C354 @ =gUnknown_8457194 + movs r0, 0 + movs r2, 0x1 + bl InitBgsFromTemplates + bl ResetTempTileDataBuffers + ldr r0, _0811C358 @ =gUnknown_8457198 + bl InitWindows + lsls r0, 16 + cmp r0, 0 + bne _0811C300 + b _0811C52A +_0811C300: + bl DeactivateAllTextPrinters + movs r0, 0 + bl ClearWindowTilemap + movs r0, 0 + movs r1, 0 + bl FillWindowPixelBuffer + movs r0, 0 + movs r1, 0x11 + bl FillWindowPixelBuffer + movs r0, 0x1E + str r0, [sp] + movs r0, 0x14 + str r0, [sp, 0x4] + movs r0, 0xF + str r0, [sp, 0x8] + movs r0, 0 + movs r1, 0 + movs r2, 0 + movs r3, 0 + bl FillBgTilemapBufferRect + movs r0, 0 + movs r1, 0x1 + movs r2, 0xD0 + bl TextWindow_SetStdFrame0_WithPal + bl Menu_LoadStdPal + ldr r0, _0811C35C @ =sub_811C1B4 + bl SetVBlankCallback + ldr r1, _0811C360 @ =gMain + movs r0, 0x87 + lsls r0, 3 + adds r1, r0 + b _0811C4F2 + .align 2, 0 +_0811C350: .4byte gUnknown_203B08C +_0811C354: .4byte gUnknown_8457194 +_0811C358: .4byte gUnknown_8457198 +_0811C35C: .4byte sub_811C1B4 +_0811C360: .4byte gMain +_0811C364: + ldr r0, _0811C380 @ =gUnknown_203B08C + ldr r0, [r0] + ldr r1, _0811C384 @ =gUnknown_841E538 + movs r2, 0 + bl sub_811C150 + cmp r0, 0 + bne _0811C376 + b _0811C516 +_0811C376: + ldr r1, _0811C388 @ =gMain + movs r2, 0x87 + lsls r2, 3 + adds r1, r2 + b _0811C4F2 + .align 2, 0 +_0811C380: .4byte gUnknown_203B08C +_0811C384: .4byte gUnknown_841E538 +_0811C388: .4byte gMain +_0811C38C: + movs r0, 0x1 + negs r0, r0 + movs r1, 0 + str r1, [sp] + movs r2, 0x10 + movs r3, 0 + bl BeginNormalPaletteFade + movs r0, 0 + bl ShowBg + ldr r1, _0811C3AC @ =gMain + movs r0, 0x87 + lsls r0, 3 + adds r1, r0 + b _0811C4F2 + .align 2, 0 +_0811C3AC: .4byte gMain +_0811C3B0: + bl UpdatePaletteFade + lsls r0, 24 + cmp r0, 0 + beq _0811C3BC + b _0811C516 +_0811C3BC: + ldr r4, _0811C3D8 @ =gBlockSendBuffer + adds r0, r4, 0 + movs r1, 0 + movs r2, 0x20 + bl memset + ldr r0, _0811C3DC @ =gSelectedOrderFromParty + ldrb r1, [r0] + ldrb r0, [r0, 0x1] + cmn r1, r0 + bne _0811C3E0 + movs r0, 0x52 + b _0811C3E2 + .align 2, 0 +_0811C3D8: .4byte gBlockSendBuffer +_0811C3DC: .4byte gSelectedOrderFromParty +_0811C3E0: + movs r0, 0x51 +_0811C3E2: + strb r0, [r4] + ldr r1, _0811C3F8 @ =gBlockSendBuffer + movs r0, 0 + movs r2, 0x20 + bl SendBlock + ldr r1, _0811C3FC @ =gMain + movs r2, 0x87 + lsls r2, 3 + adds r1, r2 + b _0811C4F2 + .align 2, 0 +_0811C3F8: .4byte gBlockSendBuffer +_0811C3FC: .4byte gMain +_0811C400: + bl GetBlockReceivedStatus + lsls r0, 24 + lsrs r0, 24 + cmp r0, 0x3 + beq _0811C40E + b _0811C516 +_0811C40E: + ldr r1, _0811C440 @ =gBlockRecvBuffer + ldrh r0, [r1] + cmp r0, 0x51 + bne _0811C448 + movs r2, 0x80 + lsls r2, 1 + adds r0, r1, r2 + ldrh r0, [r0] + cmp r0, 0x51 + bne _0811C448 + movs r0, 0x1 + negs r0, r0 + movs r1, 0 + str r1, [sp] + movs r2, 0 + movs r3, 0x10 + bl BeginNormalPaletteFade + ldr r0, _0811C444 @ =gMain + movs r1, 0x87 + lsls r1, 3 + adds r0, r1 + movs r1, 0x32 + b _0811C47E + .align 2, 0 +_0811C440: .4byte gBlockRecvBuffer +_0811C444: .4byte gMain +_0811C448: + bl sub_800AAC0 + ldr r4, _0811C46C @ =gBlockRecvBuffer + bl GetMultiplayerId + lsls r0, 24 + lsrs r0, 16 + adds r0, r4 + ldrh r0, [r0] + cmp r0, 0x52 + bne _0811C474 + ldr r0, _0811C470 @ =gMain + movs r2, 0x87 + lsls r2, 3 + adds r0, r2 + movs r1, 0x6 + b _0811C47E + .align 2, 0 +_0811C46C: .4byte gBlockRecvBuffer +_0811C470: .4byte gMain +_0811C474: + ldr r0, _0811C488 @ =gMain + movs r1, 0x87 + lsls r1, 3 + adds r0, r1 + movs r1, 0x8 +_0811C47E: + strb r1, [r0] + bl ResetBlockReceivedFlags + b _0811C516 + .align 2, 0 +_0811C488: .4byte gMain +_0811C48C: + bl UpdatePaletteFade + lsls r0, 24 + cmp r0, 0 + bne _0811C516 + bl sub_800AB9C + ldr r1, _0811C4A4 @ =gMain + movs r2, 0x87 + lsls r2, 3 + adds r1, r2 + b _0811C4F2 + .align 2, 0 +_0811C4A4: .4byte gMain +_0811C4A8: + bl IsLinkTaskFinished + lsls r0, 24 + cmp r0, 0 + beq _0811C516 + ldr r0, _0811C4BC @ =sub_811C04C + bl SetMainCallback2 + b _0811C516 + .align 2, 0 +_0811C4BC: .4byte sub_811C04C +_0811C4C0: + ldr r0, _0811C4D8 @ =gUnknown_203B08C + ldr r0, [r0] + ldr r1, _0811C4DC @ =gUnknown_841E58D + movs r2, 0x1 + bl sub_811C150 + cmp r0, 0 + beq _0811C516 + ldr r0, _0811C4E0 @ =CB2_ReturnToField + bl SetMainCallback2 + b _0811C516 + .align 2, 0 +_0811C4D8: .4byte gUnknown_203B08C +_0811C4DC: .4byte gUnknown_841E58D +_0811C4E0: .4byte CB2_ReturnToField +_0811C4E4: + ldr r0, _0811C4FC @ =gReceivedRemoteLinkPlayers + ldrb r0, [r0] + cmp r0, 0 + bne _0811C516 + movs r0, 0x87 + lsls r0, 3 + adds r1, r2, r0 +_0811C4F2: + ldrb r0, [r1] + adds r0, 0x1 + strb r0, [r1] + b _0811C516 + .align 2, 0 +_0811C4FC: .4byte gReceivedRemoteLinkPlayers +_0811C500: + ldr r0, _0811C534 @ =gUnknown_203B08C + ldr r0, [r0] + ldr r1, _0811C538 @ =gUnknown_841E572 + movs r2, 0x1 + bl sub_811C150 + cmp r0, 0 + beq _0811C516 + ldr r0, _0811C53C @ =CB2_ReturnToField + bl SetMainCallback2 +_0811C516: + bl RunTasks + bl RunTextPrinters + bl AnimateSprites + bl BuildOamBuffer + bl UpdatePaletteFade +_0811C52A: + add sp, 0xC + pop {r4} + pop {r0} + bx r0 + .align 2, 0 +_0811C534: .4byte gUnknown_203B08C +_0811C538: .4byte gUnknown_841E572 +_0811C53C: .4byte CB2_ReturnToField + thumb_func_end sub_811C1C8 + + .align 2, 0 @ Don't pad with nop. diff --git a/data/rfu_union_tool.s b/data/rfu_union_tool.s deleted file mode 100644 index f9988661e..000000000 --- a/data/rfu_union_tool.s +++ /dev/null @@ -1,22 +0,0 @@ -#include "constants/region_map.h" -#include "constants/flags.h" -#include "constants/moves.h" - .include "asm/macros.inc" - .include "constants/constants.inc" - .section .rodata - .align 2 - - .align 2 -gUnknown_8457194:: @ 8457194 - .2byte 0x01FC, 0x0000 @ BgTemplate - -gUnknown_8457198:: @ 8457198 - .byte 0x00, 0x02, 0x0F, 0x1A, 0x04, 0x0E @ window template - .2byte 0x0014 - - @ ??? - .byte -1, 0, 0, 0 - .byte 0, 0, 0, 0 - -gUnknown_84571A8:: @ 84571A8 - .byte 0x01, 0x02, 0x03, 0x00 diff --git a/data/union_room_battle.s b/data/union_room_battle.s new file mode 100644 index 000000000..f9988661e --- /dev/null +++ b/data/union_room_battle.s @@ -0,0 +1,22 @@ +#include "constants/region_map.h" +#include "constants/flags.h" +#include "constants/moves.h" + .include "asm/macros.inc" + .include "constants/constants.inc" + .section .rodata + .align 2 + + .align 2 +gUnknown_8457194:: @ 8457194 + .2byte 0x01FC, 0x0000 @ BgTemplate + +gUnknown_8457198:: @ 8457198 + .byte 0x00, 0x02, 0x0F, 0x1A, 0x04, 0x0E @ window template + .2byte 0x0014 + + @ ??? + .byte -1, 0, 0, 0 + .byte 0, 0, 0, 0 + +gUnknown_84571A8:: @ 84571A8 + .byte 0x01, 0x02, 0x03, 0x00 diff --git a/include/event_object_80688E4.h b/include/event_object_80688E4.h index 611a57e00..36040e0a5 100644 --- a/include/event_object_80688E4.h +++ b/include/event_object_80688E4.h @@ -10,5 +10,6 @@ void sub_8069124(u8 a0, bool8 a1); u32 sub_806916C(u8 a0); void sub_80691A4(u8 a0, u8 a1); void sub_8069094(u8 a0, u8 a1); +bool32 sub_8069294(u8 a0); #endif // GUARD_EVENT_OBJECT_80688E4_H diff --git a/ld_script.txt b/ld_script.txt index e1079704f..88f42388d 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -243,7 +243,7 @@ SECTIONS { src/quest_log.o(.text); src/union_room.o(.text); src/rfu_union_tool.o(.text); - asm/rfu_union_tool.o(.text); + asm/union_room_battle.o(.text); asm/pokemon_special_anim.o(.text); src/party_menu.o(.text); asm/union_room_chat.o(.text); @@ -530,7 +530,7 @@ SECTIONS { src/quest_log.o(.rodata); src/union_room.o(.rodata); src/rfu_union_tool.o(.rodata); - data/rfu_union_tool.o(.rodata); + data/union_room_battle.o(.rodata); data/union_room_message.o(.rodata); data/pokemon_special_anim.o(.rodata); src/party_menu.o(.rodata); diff --git a/src/rfu_union_tool.c b/src/rfu_union_tool.c index 74dfaadd1..3a1b566e6 100644 --- a/src/rfu_union_tool.c +++ b/src/rfu_union_tool.c @@ -524,3 +524,98 @@ void sub_811BDA8(u32 r5, struct GFtgtGname * r4) AGB_ASSERT_EX(0, ABSPATH("rfu_union_tool.c"), 979) } } + +void sub_811BE6C(u32 r5, struct GFtgtGname * unused) +{ + s32 i; + sub_811B90C(r5); + for (i = 0; i < 5; i++) + { + sub_811BC68(r5, i); + } +} + +void sub_811BE8C(struct UnkStruct_URoom *r0) +{ + s32 i; + struct UnkStruct_x20 * r4; + gUnknown_203B088 = 0; + for (i = 0, r4 = r0->field_0->arr; i < 8; i++) + { + if (r4[i].field_1A_0 == 1) + { + sub_811BDA8(i, &r4[i].unk.field_0); + } + else if (r4[i].field_1A_0 == 2) + { + sub_811BE6C(i, &r4[i].unk.field_0); + } + } +} + +void sub_811BECC(struct UnkStruct_URoom *unused) +{ + gUnknown_203B088 = 300; +} + +void sub_811BEDC(struct UnkStruct_URoom *r2) +{ + if (++gUnknown_203B088 > 300) + { + sub_811BE8C(r2); + } +} + +bool32 sub_811BF00(struct UnkStruct_Main0 *arg0, s16 *arg1, s16 *arg2, u8 *arg3) +{ + s16 x, y; + s32 i, j; + struct UnkStruct_x20 * r4; + if (!is_walking_or_running()) + { + return FALSE; + } + GetXYCoordsOneStepInFrontOfPlayer(&x, &y); + for (i = 0, r4 = arg0->arr; i < 8; i++) + { + for (j = 0; j < 5; j++) + { + s32 r3 = 5 * i + j; + if (x != gUnknown_84570EC[i][0] + gUnknown_845710C[j][0] + 7) + { + continue; + } + if (y != gUnknown_84570EC[i][1] + gUnknown_845710C[j][1] + 7) + { + continue; + } + if (sub_806916C(r3 - 0x38) != 0) + { + continue; + } + if (sub_8069294(r3 - 0x38) != 0) + { + continue; + } + if (r4[i].field_1A_0 != 1) + { + continue; + } + sub_811C008(j, i, gUnknown_8457116[GetPlayerFacingDirection()]); + *arg1 = j; + *arg2 = i; + return TRUE; + } + } + return FALSE; +} + +void sub_811C008(s32 arg0, s32 arg1, u8 arg2) +{ + sub_8069058(5 * arg1 - 0x38 + arg0, arg2); +} + +void sub_811C028(u32 arg0, u32 arg1, struct UnkStruct_Main0 *arg2) +{ + return sub_811C008(arg0, arg1, sub_811BBA0(arg0, arg1, &arg2->arr[arg1].unk.field_0)); +} -- cgit v1.2.3