diff --git a/asm/code_0801CEC0.s b/asm/code_0801CEC0.s deleted file mode 100644 index e7fbc193..00000000 --- a/asm/code_0801CEC0.s +++ /dev/null @@ -1,863 +0,0 @@ - .include "asm/macros.inc" - - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_0801CFA8 -sub_0801CFA8: @ 0x0801CFA8 - push {r4, r5, lr} - adds r5, r0, #0 - ldr r0, _0801CFCC @ =gPaletteList - movs r1, #0x40 - bl MemClear - movs r4, #0 -_0801CFB6: - adds r0, r4, #0 - bl sub_0801CFD0 - adds r4, #1 - cmp r4, #5 - bls _0801CFB6 - adds r0, r5, #0 - bl sub_0801D000 - pop {r4, r5, pc} - .align 2, 0 -_0801CFCC: .4byte gPaletteList - - thumb_func_start sub_0801CFD0 -sub_0801CFD0: @ 0x0801CFD0 - lsls r0, r0, #2 - ldr r1, _0801CFF8 @ =gPaletteList - adds r0, r0, r1 - ldrb r2, [r0] - movs r1, #0x10 - rsbs r1, r1, #0 - ands r1, r2 - movs r2, #4 - orrs r1, r2 - movs r2, #0xf - ands r1, r2 - movs r2, #0x10 - orrs r1, r2 - strb r1, [r0] - movs r1, #0x80 - strb r1, [r0, #1] - ldr r1, _0801CFFC @ =0x0000FFFF - strh r1, [r0, #2] - bx lr - .align 2, 0 -_0801CFF8: .4byte gPaletteList -_0801CFFC: .4byte 0x0000FFFF - - thumb_func_start sub_0801D000 -sub_0801D000: @ 0x0801D000 - push {lr} - adds r2, r0, #0 - ldr r0, _0801D024 @ =gScreenTransition - movs r1, #0 - cmp r2, #0 - beq _0801D00E - movs r1, #0xf -_0801D00E: - adds r0, #0x2f - strb r1, [r0] - cmp r2, #0 - beq _0801D028 - bl CleanUpObjPalettes - movs r0, #0xf - bl sub_0801CFD0 - b _0801D03A - .align 2, 0 -_0801D024: .4byte gScreenTransition -_0801D028: - ldr r3, _0801D03C @ =gUnk_02001A3C - ldrb r1, [r3] - movs r0, #0xf - ands r0, r1 - cmp r0, #4 - bne _0801D03A - strb r2, [r3] - strb r2, [r3, #1] - strh r2, [r3, #2] -_0801D03A: - pop {pc} - .align 2, 0 -_0801D03C: .4byte gUnk_02001A3C - - thumb_func_start LoadObjPalette -LoadObjPalette: @ 0x0801D040 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #4 - str r0, [sp] - adds r6, r1, #0 - adds r0, r6, #0 - bl FindPalette - adds r5, r0, #0 - cmp r5, #0 - bge _0801D0E8 - cmp r6, #0x15 - bhi _0801D064 - movs r4, #1 - b _0801D074 -_0801D064: - ldr r0, _0801D100 @ =gUnk_08133368 - adds r1, r6, #0 - subs r1, #0x16 - lsls r1, r1, #2 - adds r1, r1, r0 - ldrb r4, [r1, #3] - movs r0, #0xf - ands r4, r0 -_0801D074: - adds r0, r4, #0 - bl FindFreeObjPalette - adds r5, r0, #0 - cmp r5, #0 - bge _0801D090 - bl CleanUpObjPalettes - adds r0, r4, #0 - bl FindFreeObjPalette - adds r5, r0, #0 - cmp r5, #0 - blt _0801D0E8 -_0801D090: - lsls r1, r5, #2 - ldr r0, _0801D104 @ =gPaletteList - adds r3, r1, r0 - movs r0, #0 - strh r6, [r3, #2] - strb r0, [r3, #1] - movs r2, #0x10 - rsbs r2, r2, #0 - lsls r0, r4, #4 - movs r1, #3 - orrs r0, r1 - strb r0, [r3] - subs r4, #1 - cmp r4, #0 - beq _0801D0E0 - movs r0, #0 - mov sl, r0 - movs r1, #0 - mov r8, r1 - movs r0, #0xf - mov sb, r0 - mov ip, r2 - movs r7, #2 -_0801D0BE: - adds r3, #4 - mov r1, r8 - strh r1, [r3, #2] - mov r0, sl - strb r0, [r3, #1] - lsls r2, r4, #4 - ldrb r1, [r3] - mov r0, sb - ands r0, r1 - orrs r0, r2 - mov r1, ip - ands r0, r1 - orrs r0, r7 - strb r0, [r3] - subs r4, #1 - cmp r4, #0 - bne _0801D0BE -_0801D0E0: - adds r0, r6, #0 - adds r1, r5, #0 - bl LoadObjPaletteAtIndex -_0801D0E8: - ldr r0, [sp] - adds r1, r5, #0 - bl SetEntityObjPalette - adds r0, r5, #0 - add sp, #4 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0801D100: .4byte gUnk_08133368 -_0801D104: .4byte gPaletteList - - thumb_func_start FindPalette -FindPalette: @ 0x0801D108 - push {lr} - adds r2, r0, #0 - cmp r2, #5 - bhi _0801D116 - b _0801D12E -_0801D112: - adds r0, r1, #0 - b _0801D12E -_0801D116: - movs r1, #6 - ldr r0, _0801D130 @ =gPaletteList - adds r0, #0x18 -_0801D11C: - ldrh r3, [r0, #2] - cmp r2, r3 - beq _0801D112 - adds r0, #4 - adds r1, #1 - cmp r1, #0xf - bls _0801D11C - movs r0, #1 - rsbs r0, r0, #0 -_0801D12E: - pop {pc} - .align 2, 0 -_0801D130: .4byte gPaletteList - - thumb_func_start FindFreeObjPalette -FindFreeObjPalette: @ 0x0801D134 - push {r4, lr} - adds r4, r0, #0 - movs r1, #0 - movs r2, #6 - ldr r0, _0801D154 @ =gPaletteList - adds r3, r0, #0 - adds r3, #0x18 -_0801D142: - ldrb r0, [r3] - lsls r0, r0, #0x1c - cmp r0, #0 - bne _0801D158 - adds r1, #1 - cmp r4, r1 - bhi _0801D15A - b _0801D180 - .align 2, 0 -_0801D154: .4byte gPaletteList -_0801D158: - movs r1, #0 -_0801D15A: - adds r3, #4 - adds r2, #1 - cmp r2, #0xf - bls _0801D142 - movs r1, #0 - movs r2, #6 - ldr r0, _0801D188 @ =gPaletteList - adds r3, r0, #0 - adds r3, #0x18 -_0801D16C: - ldrb r0, [r3] - lsls r0, r0, #0x1c - lsrs r0, r0, #0x1c - cmp r0, #1 - bgt _0801D18C - cmp r0, #0 - blt _0801D18C - adds r1, #1 - cmp r4, r1 - bhi _0801D18E -_0801D180: - subs r0, r1, #1 - subs r0, r2, r0 - b _0801D19A - .align 2, 0 -_0801D188: .4byte gPaletteList -_0801D18C: - movs r1, #0 -_0801D18E: - adds r3, #4 - adds r2, #1 - cmp r2, #0xf - bls _0801D16C - movs r0, #1 - rsbs r0, r0, #0 -_0801D19A: - pop {r4, pc} - - thumb_func_start SetEntityObjPalette -SetEntityObjPalette: @ 0x0801D19C - push {r4, r5, r6, r7, lr} - adds r4, r0, #0 - adds r3, r1, #0 - cmp r3, #0 - bge _0801D1A8 - movs r3, #0 -_0801D1A8: - adds r0, r4, #0 - adds r0, #0x28 - ldrb r0, [r0] - subs r0, #1 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x7e - bls _0801D1BE - adds r0, r4, #0 - adds r0, #0x27 - strb r3, [r0] -_0801D1BE: - movs r0, #0xf - adds r1, r3, #0 - ands r1, r0 - ldrb r2, [r4, #0x1a] - movs r5, #0x10 - rsbs r5, r5, #0 - adds r0, r5, #0 - ands r0, r2 - orrs r0, r1 - movs r2, #0xf - adds r1, r3, #0 - ands r1, r2 - lsls r1, r1, #4 - ands r0, r2 - orrs r0, r1 - strb r0, [r4, #0x1a] - lsls r1, r3, #2 - ldr r0, _0801D22C @ =gPaletteList - adds r4, r1, r0 - ldr r0, [r4] - lsls r0, r0, #0x1c - lsrs r0, r0, #0x1c - cmp r0, #4 - beq _0801D22A - ldrb r0, [r4, #1] - adds r0, #1 - strb r0, [r4, #1] - ldr r0, [r4] - lsls r0, r0, #0x18 - lsrs r3, r0, #0x1c - ldrb r1, [r4] - adds r0, r5, #0 - ands r0, r1 - movs r1, #3 - orrs r0, r1 - strb r0, [r4] - subs r3, #1 - cmp r3, #0 - beq _0801D22A - movs r7, #0xf - adds r6, r5, #0 - movs r5, #2 -_0801D212: - adds r4, #4 - lsls r2, r3, #4 - ldrb r1, [r4] - adds r0, r7, #0 - ands r0, r1 - orrs r0, r2 - ands r0, r6 - orrs r0, r5 - strb r0, [r4] - subs r3, #1 - cmp r3, #0 - bne _0801D212 -_0801D22A: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0801D22C: .4byte gPaletteList - - thumb_func_start UnloadOBJPalette -UnloadOBJPalette: @ 0x0801D230 - push {lr} - adds r0, #0x27 - ldrb r2, [r0] - movs r1, #0 - strb r1, [r0] - adds r0, r2, #0 - bl sub_0801D244 - pop {pc} - .align 2, 0 - - thumb_func_start sub_0801D244 -sub_0801D244: @ 0x0801D244 - push {r4, r5, r6, lr} - lsls r0, r0, #2 - ldr r1, _0801D288 @ =gPaletteList - adds r2, r0, r1 - ldr r0, [r2] - lsls r0, r0, #0x1c - lsrs r0, r0, #0x1c - cmp r0, #3 - bne _0801D284 - ldrb r0, [r2, #1] - subs r0, #1 - strb r0, [r2, #1] - lsls r0, r0, #0x18 - cmp r0, #0 - bne _0801D284 - ldr r0, [r2] - lsls r0, r0, #0x18 - lsrs r3, r0, #0x1c - movs r5, #0 - movs r6, #0x10 - rsbs r6, r6, #0 - movs r4, #1 -_0801D270: - strb r5, [r2, #1] - ldrb r1, [r2] - adds r0, r6, #0 - ands r0, r1 - orrs r0, r4 - strb r0, [r2] - adds r2, #4 - subs r3, #1 - cmp r3, #0 - bne _0801D270 -_0801D284: - pop {r4, r5, r6, pc} - .align 2, 0 -_0801D288: .4byte gPaletteList - - thumb_func_start sub_0801D28C -sub_0801D28C: @ 0x0801D28C - push {lr} - adds r3, r1, #0 - adds r0, #0x27 - ldrb r2, [r0] - ldr r1, _0801D2B0 @ =gPaletteList - lsls r0, r2, #2 - adds r1, r0, r1 - ldrb r0, [r1] - lsls r0, r0, #0x1c - lsrs r0, r0, #0x1c - cmp r0, #3 - bne _0801D2AE - strh r3, [r1, #2] - adds r0, r3, #0 - adds r1, r2, #0 - bl LoadObjPaletteAtIndex -_0801D2AE: - pop {pc} - .align 2, 0 -_0801D2B0: .4byte gPaletteList - - thumb_func_start ChangeObjPalette -ChangeObjPalette: @ 0x0801D2B4 - push {r4, r5, lr} - adds r4, r0, #0 - adds r5, r1, #0 - bl UnloadOBJPalette - adds r0, r4, #0 - adds r1, r5, #0 - bl LoadObjPalette - pop {r4, r5, pc} - - thumb_func_start LoadObjPaletteAtIndex -LoadObjPaletteAtIndex: @ 0x0801D2C8 - push {r4, lr} - adds r3, r0, #0 - ldr r2, _0801D2F8 @ =gUsedPalettes - adds r4, r1, #0 - adds r4, #0x10 - movs r1, #1 - lsls r1, r4 - ldr r0, [r2] - orrs r0, r1 - str r0, [r2] - cmp r3, #5 - bls _0801D33C - cmp r3, #0x15 - bne _0801D300 - ldr r2, _0801D2FC @ =gPaletteBuffer - adds r0, r2, #0 - adds r0, #0x78 - ldrh r0, [r0] - lsls r1, r4, #5 - adds r1, r1, r2 - movs r2, #0x20 - bl MemFill16 - b _0801D33C - .align 2, 0 -_0801D2F8: .4byte gUsedPalettes -_0801D2FC: .4byte gPaletteBuffer -_0801D300: - cmp r3, #0x14 - bhi _0801D31C - subs r0, r3, #6 - lsls r0, r0, #5 - ldr r1, _0801D318 @ =gPaletteBuffer - adds r0, r0, r1 - adds r1, r4, #0 - movs r2, #1 - bl LoadPalettes - b _0801D33C - .align 2, 0 -_0801D318: .4byte gPaletteBuffer -_0801D31C: - ldr r1, _0801D340 @ =gUnk_08133368 - adds r0, r3, #0 - subs r0, #0x16 - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - lsrs r2, r0, #0x18 - movs r1, #0xf - ands r2, r1 - ldr r1, _0801D344 @ =0x00FFFFFF - ands r0, r1 - ldr r1, _0801D348 @ =gGlobalGfxAndPalettes - adds r0, r0, r1 - adds r1, r4, #0 - bl LoadPalettes -_0801D33C: - pop {r4, pc} - .align 2, 0 -_0801D340: .4byte gUnk_08133368 -_0801D344: .4byte 0x00FFFFFF -_0801D348: .4byte gGlobalGfxAndPalettes - - thumb_func_start CleanUpObjPalettes -CleanUpObjPalettes: @ 0x0801D34C - push {r4, r5, r6, r7, lr} - sub sp, #0x10 - movs r2, #0 - movs r3, #0 - ldr r1, _0801D37C @ =gPaletteList -_0801D356: - mov r4, sp - adds r0, r4, r2 - strb r2, [r0] - ldrb r0, [r1] - lsls r0, r0, #0x1c - lsrs r0, r0, #0x1c - cmp r0, #1 - bgt _0801D370 - cmp r0, #0 - blt _0801D370 - strb r3, [r1] - strb r3, [r1, #1] - strh r3, [r1, #2] -_0801D370: - adds r1, #4 - adds r2, #1 - cmp r2, #0xf - bls _0801D356 - movs r4, #6 - b _0801D390 - .align 2, 0 -_0801D37C: .4byte gPaletteList -_0801D380: - cmp r4, r1 - ble _0801D390 - mov r2, sp - adds r0, r2, r4 - strb r1, [r0] - adds r0, r4, #0 - bl sub_0801D48C -_0801D390: - adds r0, r4, #1 - bl sub_0801D458 - adds r4, r0, #0 - cmp r4, #0 - beq _0801D3AC - movs r0, #1 - bl FindFreeObjPalette - adds r1, r0, #0 - movs r0, #1 - rsbs r0, r0, #0 - cmp r1, r0 - bne _0801D380 -_0801D3AC: - movs r1, #0 - ldr r4, _0801D450 @ =gEntityLists - mov ip, r4 -_0801D3B2: - lsls r0, r1, #3 - mov r2, ip - adds r3, r0, r2 - adds r0, r3, #0 - ldr r3, [r3, #4] - adds r5, r1, #1 - cmp r0, r3 - beq _0801D444 - movs r7, #0x10 - rsbs r7, r7, #0 - adds r4, r0, #0 - ldr r6, _0801D454 @ =gUnk_020000C0 -_0801D3CA: - ldrb r0, [r3, #8] - cmp r0, #9 - beq _0801D43E - adds r1, r3, #0 - adds r1, #0x28 - ldrb r0, [r1] - subs r0, #1 - lsls r0, r0, #0x18 - lsrs r0, r0, #0x18 - cmp r0, #0x7e - bhi _0801D40C - ldrb r1, [r1] - lsls r1, r1, #6 - adds r1, r1, r6 - ldrb r0, [r1, #5] - add r0, sp - ldrb r0, [r0] - strb r0, [r1, #5] - ldrb r0, [r1, #0x15] - add r0, sp - ldrb r0, [r0] - strb r0, [r1, #0x15] - adds r2, r1, #0 - adds r2, #0x25 - ldrb r0, [r2] - add r0, sp - ldrb r0, [r0] - strb r0, [r2] - adds r1, #0x35 - ldrb r0, [r1] - add r0, sp - ldrb r0, [r0] - strb r0, [r1] -_0801D40C: - adds r1, r3, #0 - adds r1, #0x27 - ldrb r0, [r1] - add r0, sp - ldrb r0, [r0] - strb r0, [r1] - ldrb r2, [r3, #0x1a] - lsls r0, r2, #0x1c - lsrs r0, r0, #0x1c - add r0, sp - ldrb r1, [r0] - movs r0, #0xf - ands r1, r0 - adds r0, r7, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, #0x1a] - lsrs r1, r0, #4 - add r1, sp - ldrb r2, [r1] - lsls r2, r2, #4 - movs r1, #0xf - ands r0, r1 - orrs r0, r2 - strb r0, [r3, #0x1a] -_0801D43E: - ldr r3, [r3, #4] - cmp r4, r3 - bne _0801D3CA -_0801D444: - adds r1, r5, #0 - cmp r1, #8 - bls _0801D3B2 - add sp, #0x10 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0801D450: .4byte gEntityLists -_0801D454: .4byte gUnk_020000C0 - - thumb_func_start sub_0801D458 -sub_0801D458: @ 0x0801D458 - push {lr} - adds r2, r0, #0 - cmp r2, #0xf - bhi _0801D488 - ldr r1, _0801D47C @ =gPaletteList - lsls r0, r2, #2 - adds r1, r0, r1 -_0801D466: - ldrb r0, [r1] - lsls r0, r0, #0x1c - lsrs r0, r0, #0x1c - cmp r0, #0 - blt _0801D478 - cmp r0, #1 - ble _0801D480 - cmp r0, #4 - beq _0801D480 -_0801D478: - adds r0, r2, #0 - b _0801D48A - .align 2, 0 -_0801D47C: .4byte gPaletteList -_0801D480: - adds r1, #4 - adds r2, #1 - cmp r2, #0xf - bls _0801D466 -_0801D488: - movs r0, #0 -_0801D48A: - pop {pc} - - thumb_func_start sub_0801D48C -sub_0801D48C: @ 0x0801D48C - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - sub sp, #4 - adds r6, r0, #0 - adds r3, r1, #0 - ldr r0, _0801D50C @ =gPaletteList - mov r8, r0 - lsls r0, r6, #2 - mov r1, r8 - adds r4, r0, r1 - ldrb r0, [r4] - lsrs r5, r0, #4 - subs r5, #1 - movs r0, #1 - rsbs r0, r0, #0 - cmp r5, r0 - beq _0801D4F8 - ldr r2, _0801D510 @ =gPaletteBuffer - lsls r0, r3, #5 - movs r1, #0x80 - lsls r1, r1, #2 - adds r0, r0, r1 - adds r7, r0, r2 - lsls r0, r3, #2 - add r8, r0 - lsls r0, r6, #5 - adds r0, r0, r1 - adds r6, r0, r2 - movs r3, #0 -_0801D4C8: - ldr r0, [r4] - mov r1, r8 - adds r1, #4 - mov r8, r1 - subs r1, #4 - stm r1!, {r0} - strb r3, [r4] - strb r3, [r4, #1] - strh r3, [r4, #2] - adds r0, r6, #0 - adds r1, r7, #0 - movs r2, #0x20 - str r3, [sp] - bl MemCopy - adds r6, #0x20 - adds r4, #4 - adds r7, #0x20 - subs r5, #1 - movs r0, #1 - rsbs r0, r0, #0 - ldr r3, [sp] - cmp r5, r0 - bne _0801D4C8 -_0801D4F8: - ldr r0, _0801D514 @ =gUsedPalettes - ldr r1, [r0] - ldr r2, _0801D518 @ =0xFFFF0000 - orrs r1, r2 - str r1, [r0] - add sp, #4 - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0801D50C: .4byte gPaletteList -_0801D510: .4byte gPaletteBuffer -_0801D514: .4byte gUsedPalettes -_0801D518: .4byte 0xFFFF0000 - - thumb_func_start sub_0801D51C -sub_0801D51C: @ 0x0801D51C - push {r4, lr} - adds r2, r0, #0 - ldr r0, _0801D58C @ =0x05F5E0FF - cmp r2, r0 - bhi _0801D5A0 - ldr r1, _0801D590 @ =0x00989680 - adds r0, r2, #0 - bl Div - adds r4, r0, #0 - lsls r4, r4, #0x1c - ldr r2, _0801D594 @ =0x000F4240 - adds r0, r1, #0 - adds r1, r2, #0 - bl Div - lsls r0, r0, #0x18 - adds r4, r4, r0 - ldr r2, _0801D598 @ =0x000186A0 - adds r0, r1, #0 - adds r1, r2, #0 - bl Div - lsls r0, r0, #0x14 - adds r4, r4, r0 - ldr r2, _0801D59C @ =0x00002710 - adds r0, r1, #0 - adds r1, r2, #0 - bl Div - lsls r0, r0, #0x10 - adds r4, r4, r0 - movs r2, #0xfa - lsls r2, r2, #2 - adds r0, r1, #0 - adds r1, r2, #0 - bl Div - lsls r0, r0, #0xc - adds r4, r4, r0 - adds r0, r1, #0 - movs r1, #0x64 - bl Div - lsls r0, r0, #8 - adds r4, r4, r0 - adds r0, r1, #0 - movs r1, #0xa - bl Div - lsls r0, r0, #4 - adds r4, r4, r0 - adds r4, r4, r1 - adds r0, r4, #0 - b _0801D5A2 - .align 2, 0 -_0801D58C: .4byte 0x05F5E0FF -_0801D590: .4byte 0x00989680 -_0801D594: .4byte 0x000F4240 -_0801D598: .4byte 0x000186A0 -_0801D59C: .4byte 0x00002710 -_0801D5A0: - ldr r0, _0801D5A4 @ =0x99999999 -_0801D5A2: - pop {r4, pc} - .align 2, 0 -_0801D5A4: .4byte 0x99999999 - - thumb_func_start ReadBit -ReadBit: @ 0x0801D5A8 - lsrs r2, r1, #3 - adds r0, r0, r2 - ldrb r0, [r0] - movs r2, #7 - ands r2, r1 - asrs r0, r2 - movs r1, #1 - ands r0, r1 - bx lr - .align 2, 0 - - thumb_func_start WriteBit -WriteBit: @ 0x0801D5BC - lsrs r2, r1, #3 - adds r3, r0, r2 - movs r2, #7 - ands r1, r2 - movs r2, #1 - lsls r2, r1 - ldrb r0, [r3] - adds r1, r0, #0 - orrs r1, r2 - strb r1, [r3] - ands r0, r2 - bx lr - - thumb_func_start ClearBit -ClearBit: @ 0x0801D5D4 - lsrs r2, r1, #3 - adds r3, r0, r2 - movs r2, #7 - ands r1, r2 - movs r2, #1 - lsls r2, r1 - ldrb r0, [r3] - adds r1, r0, #0 - bics r1, r2 - strb r1, [r3] - ands r0, r2 - bx lr diff --git a/asm/code_0805436C.s b/asm/code_0805436C.s index 2def72dc..f8afffbf 100644 --- a/asm/code_0805436C.s +++ b/asm/code_0805436C.s @@ -75,7 +75,7 @@ sub_08054920: @ 0x08054920 bl MessageInitialize bl sub_0806F38C ldr r1, _08054948 @ =gUnk_080C9CBC - ldr r0, _0805494C @ =gUnk_02022740 + ldr r0, _0805494C @ =gFuseInfo ldrb r0, [r0, #3] lsls r0, r0, #3 adds r0, r0, r1 @@ -89,7 +89,7 @@ sub_08054920: @ 0x08054920 b _08054962 .align 2, 0 _08054948: .4byte gUnk_080C9CBC -_0805494C: .4byte gUnk_02022740 +_0805494C: .4byte gFuseInfo _08054950: .4byte gUnk_02032EC0 _08054954: ldr r1, _08054964 @ =gUnk_02032EC0 diff --git a/asm/non_matching/color/CleanUpObjPalettes.inc b/asm/non_matching/color/CleanUpObjPalettes.inc new file mode 100644 index 00000000..f59b5a92 --- /dev/null +++ b/asm/non_matching/color/CleanUpObjPalettes.inc @@ -0,0 +1,141 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + sub sp, #0x10 + movs r2, #0 + movs r3, #0 + ldr r1, _0801D37C @ =gPaletteList +_0801D356: + mov r4, sp + adds r0, r4, r2 + strb r2, [r0] + ldrb r0, [r1] + lsls r0, r0, #0x1c + lsrs r0, r0, #0x1c + cmp r0, #1 + bgt _0801D370 + cmp r0, #0 + blt _0801D370 + strb r3, [r1] + strb r3, [r1, #1] + strh r3, [r1, #2] +_0801D370: + adds r1, #4 + adds r2, #1 + cmp r2, #0xf + bls _0801D356 + movs r4, #6 + b _0801D390 + .align 2, 0 +_0801D37C: .4byte gPaletteList +_0801D380: + cmp r4, r1 + ble _0801D390 + mov r2, sp + adds r0, r2, r4 + strb r1, [r0] + adds r0, r4, #0 + bl sub_0801D48C +_0801D390: + adds r0, r4, #1 + bl sub_0801D458 + adds r4, r0, #0 + cmp r4, #0 + beq _0801D3AC + movs r0, #1 + bl FindFreeObjPalette + adds r1, r0, #0 + movs r0, #1 + rsbs r0, r0, #0 + cmp r1, r0 + bne _0801D380 +_0801D3AC: + movs r1, #0 + ldr r4, _0801D450 @ =gEntityLists + mov ip, r4 +_0801D3B2: + lsls r0, r1, #3 + mov r2, ip + adds r3, r0, r2 + adds r0, r3, #0 + ldr r3, [r3, #4] + adds r5, r1, #1 + cmp r0, r3 + beq _0801D444 + movs r7, #0x10 + rsbs r7, r7, #0 + adds r4, r0, #0 + ldr r6, _0801D454 @ =gUnk_020000C0 +_0801D3CA: + ldrb r0, [r3, #8] + cmp r0, #9 + beq _0801D43E + adds r1, r3, #0 + adds r1, #0x28 + ldrb r0, [r1] + subs r0, #1 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0x7e + bhi _0801D40C + ldrb r1, [r1] + lsls r1, r1, #6 + adds r1, r1, r6 + ldrb r0, [r1, #5] + add r0, sp + ldrb r0, [r0] + strb r0, [r1, #5] + ldrb r0, [r1, #0x15] + add r0, sp + ldrb r0, [r0] + strb r0, [r1, #0x15] + adds r2, r1, #0 + adds r2, #0x25 + ldrb r0, [r2] + add r0, sp + ldrb r0, [r0] + strb r0, [r2] + adds r1, #0x35 + ldrb r0, [r1] + add r0, sp + ldrb r0, [r0] + strb r0, [r1] +_0801D40C: + adds r1, r3, #0 + adds r1, #0x27 + ldrb r0, [r1] + add r0, sp + ldrb r0, [r0] + strb r0, [r1] + ldrb r2, [r3, #0x1a] + lsls r0, r2, #0x1c + lsrs r0, r0, #0x1c + add r0, sp + ldrb r1, [r0] + movs r0, #0xf + ands r1, r0 + adds r0, r7, #0 + ands r0, r2 + orrs r0, r1 + strb r0, [r3, #0x1a] + lsrs r1, r0, #4 + add r1, sp + ldrb r2, [r1] + lsls r2, r2, #4 + movs r1, #0xf + ands r0, r1 + orrs r0, r2 + strb r0, [r3, #0x1a] +_0801D43E: + ldr r3, [r3, #4] + cmp r4, r3 + bne _0801D3CA +_0801D444: + adds r1, r5, #0 + cmp r1, #8 + bls _0801D3B2 + add sp, #0x10 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0801D450: .4byte gEntityLists +_0801D454: .4byte gUnk_020000C0 + .syntax divided diff --git a/asm/non_matching/color/FindFreeObjPalette.inc b/asm/non_matching/color/FindFreeObjPalette.inc new file mode 100644 index 00000000..a6a641cd --- /dev/null +++ b/asm/non_matching/color/FindFreeObjPalette.inc @@ -0,0 +1,60 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + movs r1, #0 + movs r2, #6 + ldr r0, _0801D154 @ =gPaletteList + adds r3, r0, #0 + adds r3, #0x18 +_0801D142: + ldrb r0, [r3] + lsls r0, r0, #0x1c + cmp r0, #0 + bne _0801D158 + adds r1, #1 + cmp r4, r1 + bhi _0801D15A + b _0801D180 + .align 2, 0 +_0801D154: .4byte gPaletteList +_0801D158: + movs r1, #0 +_0801D15A: + adds r3, #4 + adds r2, #1 + cmp r2, #0xf + bls _0801D142 + movs r1, #0 + movs r2, #6 + ldr r0, _0801D188 @ =gPaletteList + adds r3, r0, #0 + adds r3, #0x18 +_0801D16C: + ldrb r0, [r3] + lsls r0, r0, #0x1c + lsrs r0, r0, #0x1c + cmp r0, #1 + bgt _0801D18C + cmp r0, #0 + blt _0801D18C + adds r1, #1 + cmp r4, r1 + bhi _0801D18E +_0801D180: + subs r0, r1, #1 + subs r0, r2, r0 + b _0801D19A + .align 2, 0 +_0801D188: .4byte gPaletteList +_0801D18C: + movs r1, #0 +_0801D18E: + adds r3, #4 + adds r2, #1 + cmp r2, #0xf + bls _0801D16C + movs r0, #1 + rsbs r0, r0, #0 +_0801D19A: + pop {r4, pc} + .syntax divided diff --git a/asm/non_matching/color/FindPalette.inc b/asm/non_matching/color/FindPalette.inc new file mode 100644 index 00000000..c21b6db3 --- /dev/null +++ b/asm/non_matching/color/FindPalette.inc @@ -0,0 +1,28 @@ + .syntax unified + push {lr} + adds r2, r0, #0 + cmp r2, #5 + bhi _0801D116 + b _0801D12E +_0801D112: + adds r0, r1, #0 + b _0801D12E +_0801D116: + movs r1, #6 + ldr r0, _0801D130 @ =gPaletteList + adds r0, #0x18 +_0801D11C: + ldrh r3, [r0, #2] + cmp r2, r3 + beq _0801D112 + adds r0, #4 + adds r1, #1 + cmp r1, #0xf + bls _0801D11C + movs r0, #1 + rsbs r0, r0, #0 +_0801D12E: + pop {pc} + .align 2, 0 +_0801D130: .4byte gPaletteList + .syntax divided diff --git a/asm/non_matching/color/LoadObjPalette.inc b/asm/non_matching/color/LoadObjPalette.inc new file mode 100644 index 00000000..e92d382a --- /dev/null +++ b/asm/non_matching/color/LoadObjPalette.inc @@ -0,0 +1,100 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #4 + str r0, [sp] + adds r6, r1, #0 + adds r0, r6, #0 + bl FindPalette + adds r5, r0, #0 + cmp r5, #0 + bge _0801D0E8 + cmp r6, #0x15 + bhi _0801D064 + movs r4, #1 + b _0801D074 +_0801D064: + ldr r0, _0801D100 @ =gUnk_08133368 + adds r1, r6, #0 + subs r1, #0x16 + lsls r1, r1, #2 + adds r1, r1, r0 + ldrb r4, [r1, #3] + movs r0, #0xf + ands r4, r0 +_0801D074: + adds r0, r4, #0 + bl FindFreeObjPalette + adds r5, r0, #0 + cmp r5, #0 + bge _0801D090 + bl CleanUpObjPalettes + adds r0, r4, #0 + bl FindFreeObjPalette + adds r5, r0, #0 + cmp r5, #0 + blt _0801D0E8 +_0801D090: + lsls r1, r5, #2 + ldr r0, _0801D104 @ =gPaletteList + adds r3, r1, r0 + movs r0, #0 + strh r6, [r3, #2] + strb r0, [r3, #1] + movs r2, #0x10 + rsbs r2, r2, #0 + lsls r0, r4, #4 + movs r1, #3 + orrs r0, r1 + strb r0, [r3] + subs r4, #1 + cmp r4, #0 + beq _0801D0E0 + movs r0, #0 + mov sl, r0 + movs r1, #0 + mov r8, r1 + movs r0, #0xf + mov sb, r0 + mov ip, r2 + movs r7, #2 +_0801D0BE: + adds r3, #4 + mov r1, r8 + strh r1, [r3, #2] + mov r0, sl + strb r0, [r3, #1] + lsls r2, r4, #4 + ldrb r1, [r3] + mov r0, sb + ands r0, r1 + orrs r0, r2 + mov r1, ip + ands r0, r1 + orrs r0, r7 + strb r0, [r3] + subs r4, #1 + cmp r4, #0 + bne _0801D0BE +_0801D0E0: + adds r0, r6, #0 + adds r1, r5, #0 + bl LoadObjPaletteAtIndex +_0801D0E8: + ldr r0, [sp] + adds r1, r5, #0 + bl SetEntityObjPalette + adds r0, r5, #0 + add sp, #4 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0801D100: .4byte gUnk_08133368 +_0801D104: .4byte gPaletteList + .syntax divided diff --git a/asm/non_matching/color/LoadObjPaletteAtIndex.inc b/asm/non_matching/color/LoadObjPaletteAtIndex.inc new file mode 100644 index 00000000..43d8ab8e --- /dev/null +++ b/asm/non_matching/color/LoadObjPaletteAtIndex.inc @@ -0,0 +1,63 @@ + .syntax unified + push {r4, lr} + adds r3, r0, #0 + ldr r2, _0801D2F8 @ =gUsedPalettes + adds r4, r1, #0 + adds r4, #0x10 + movs r1, #1 + lsls r1, r4 + ldr r0, [r2] + orrs r0, r1 + str r0, [r2] + cmp r3, #5 + bls _0801D33C + cmp r3, #0x15 + bne _0801D300 + ldr r2, _0801D2FC @ =gPaletteBuffer + adds r0, r2, #0 + adds r0, #0x78 + ldrh r0, [r0] + lsls r1, r4, #5 + adds r1, r1, r2 + movs r2, #0x20 + bl MemFill16 + b _0801D33C + .align 2, 0 +_0801D2F8: .4byte gUsedPalettes +_0801D2FC: .4byte gPaletteBuffer +_0801D300: + cmp r3, #0x14 + bhi _0801D31C + subs r0, r3, #6 + lsls r0, r0, #5 + ldr r1, _0801D318 @ =gPaletteBuffer + adds r0, r0, r1 + adds r1, r4, #0 + movs r2, #1 + bl LoadPalettes + b _0801D33C + .align 2, 0 +_0801D318: .4byte gPaletteBuffer +_0801D31C: + ldr r1, _0801D340 @ =gUnk_08133368 + adds r0, r3, #0 + subs r0, #0x16 + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r0, [r0] + lsrs r2, r0, #0x18 + movs r1, #0xf + ands r2, r1 + ldr r1, _0801D344 @ =0x00FFFFFF + ands r0, r1 + ldr r1, _0801D348 @ =gGlobalGfxAndPalettes + adds r0, r0, r1 + adds r1, r4, #0 + bl LoadPalettes +_0801D33C: + pop {r4, pc} + .align 2, 0 +_0801D340: .4byte gUnk_08133368 +_0801D344: .4byte 0x00FFFFFF +_0801D348: .4byte gGlobalGfxAndPalettes + .syntax divided diff --git a/asm/non_matching/color/SetEntityObjPalette.inc b/asm/non_matching/color/SetEntityObjPalette.inc new file mode 100644 index 00000000..38a34a20 --- /dev/null +++ b/asm/non_matching/color/SetEntityObjPalette.inc @@ -0,0 +1,80 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + adds r4, r0, #0 + adds r3, r1, #0 + cmp r3, #0 + bge _0801D1A8 + movs r3, #0 +_0801D1A8: + adds r0, r4, #0 + adds r0, #0x28 + ldrb r0, [r0] + subs r0, #1 + lsls r0, r0, #0x18 + lsrs r0, r0, #0x18 + cmp r0, #0x7e + bls _0801D1BE + adds r0, r4, #0 + adds r0, #0x27 + strb r3, [r0] +_0801D1BE: + movs r0, #0xf + adds r1, r3, #0 + ands r1, r0 + ldrb r2, [r4, #0x1a] + movs r5, #0x10 + rsbs r5, r5, #0 + adds r0, r5, #0 + ands r0, r2 + orrs r0, r1 + movs r2, #0xf + adds r1, r3, #0 + ands r1, r2 + lsls r1, r1, #4 + ands r0, r2 + orrs r0, r1 + strb r0, [r4, #0x1a] + lsls r1, r3, #2 + ldr r0, _0801D22C @ =gPaletteList + adds r4, r1, r0 + ldr r0, [r4] + lsls r0, r0, #0x1c + lsrs r0, r0, #0x1c + cmp r0, #4 + beq _0801D22A + ldrb r0, [r4, #1] + adds r0, #1 + strb r0, [r4, #1] + ldr r0, [r4] + lsls r0, r0, #0x18 + lsrs r3, r0, #0x1c + ldrb r1, [r4] + adds r0, r5, #0 + ands r0, r1 + movs r1, #3 + orrs r0, r1 + strb r0, [r4] + subs r3, #1 + cmp r3, #0 + beq _0801D22A + movs r7, #0xf + adds r6, r5, #0 + movs r5, #2 +_0801D212: + adds r4, #4 + lsls r2, r3, #4 + ldrb r1, [r4] + adds r0, r7, #0 + ands r0, r1 + orrs r0, r2 + ands r0, r6 + orrs r0, r5 + strb r0, [r4] + subs r3, #1 + cmp r3, #0 + bne _0801D212 +_0801D22A: + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0801D22C: .4byte gPaletteList + .syntax divided diff --git a/asm/non_matching/color/sub_0801D000.inc b/asm/non_matching/color/sub_0801D000.inc new file mode 100644 index 00000000..5fb7e436 --- /dev/null +++ b/asm/non_matching/color/sub_0801D000.inc @@ -0,0 +1,34 @@ + .syntax unified + push {lr} + adds r2, r0, #0 + ldr r0, _0801D024 @ =gScreenTransition + movs r1, #0 + cmp r2, #0 + beq _0801D00E + movs r1, #0xf +_0801D00E: + adds r0, #0x2f + strb r1, [r0] + cmp r2, #0 + beq _0801D028 + bl CleanUpObjPalettes + movs r0, #0xf + bl sub_0801CFD0 + b _0801D03A + .align 2, 0 +_0801D024: .4byte gScreenTransition +_0801D028: + ldr r3, _0801D03C @ =gUnk_02001A3C + ldrb r1, [r3] + movs r0, #0xf + ands r0, r1 + cmp r0, #4 + bne _0801D03A + strb r2, [r3] + strb r2, [r3, #1] + strh r2, [r3, #2] +_0801D03A: + pop {pc} + .align 2, 0 +_0801D03C: .4byte gUnk_02001A3C + .syntax divided diff --git a/asm/non_matching/color/sub_0801D244.inc b/asm/non_matching/color/sub_0801D244.inc new file mode 100644 index 00000000..e787b46f --- /dev/null +++ b/asm/non_matching/color/sub_0801D244.inc @@ -0,0 +1,39 @@ + .syntax unified + push {r4, r5, r6, lr} + lsls r0, r0, #2 + ldr r1, _0801D288 @ =gPaletteList + adds r2, r0, r1 + ldr r0, [r2] + lsls r0, r0, #0x1c + lsrs r0, r0, #0x1c + cmp r0, #3 + bne _0801D284 + ldrb r0, [r2, #1] + subs r0, #1 + strb r0, [r2, #1] + lsls r0, r0, #0x18 + cmp r0, #0 + bne _0801D284 + ldr r0, [r2] + lsls r0, r0, #0x18 + lsrs r3, r0, #0x1c + movs r5, #0 + movs r6, #0x10 + rsbs r6, r6, #0 + movs r4, #1 +_0801D270: + strb r5, [r2, #1] + ldrb r1, [r2] + adds r0, r6, #0 + ands r0, r1 + orrs r0, r4 + strb r0, [r2] + adds r2, #4 + subs r3, #1 + cmp r3, #0 + bne _0801D270 +_0801D284: + pop {r4, r5, r6, pc} + .align 2, 0 +_0801D288: .4byte gPaletteList + .syntax divided diff --git a/asm/non_matching/color/sub_0801D48C.inc b/asm/non_matching/color/sub_0801D48C.inc new file mode 100644 index 00000000..2c51c2f1 --- /dev/null +++ b/asm/non_matching/color/sub_0801D48C.inc @@ -0,0 +1,71 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + sub sp, #4 + adds r6, r0, #0 + adds r3, r1, #0 + ldr r0, _0801D50C @ =gPaletteList + mov r8, r0 + lsls r0, r6, #2 + mov r1, r8 + adds r4, r0, r1 + ldrb r0, [r4] + lsrs r5, r0, #4 + subs r5, #1 + movs r0, #1 + rsbs r0, r0, #0 + cmp r5, r0 + beq _0801D4F8 + ldr r2, _0801D510 @ =gPaletteBuffer + lsls r0, r3, #5 + movs r1, #0x80 + lsls r1, r1, #2 + adds r0, r0, r1 + adds r7, r0, r2 + lsls r0, r3, #2 + add r8, r0 + lsls r0, r6, #5 + adds r0, r0, r1 + adds r6, r0, r2 + movs r3, #0 +_0801D4C8: + ldr r0, [r4] + mov r1, r8 + adds r1, #4 + mov r8, r1 + subs r1, #4 + stm r1!, {r0} + strb r3, [r4] + strb r3, [r4, #1] + strh r3, [r4, #2] + adds r0, r6, #0 + adds r1, r7, #0 + movs r2, #0x20 + str r3, [sp] + bl MemCopy + adds r6, #0x20 + adds r4, #4 + adds r7, #0x20 + subs r5, #1 + movs r0, #1 + rsbs r0, r0, #0 + ldr r3, [sp] + cmp r5, r0 + bne _0801D4C8 +_0801D4F8: + ldr r0, _0801D514 @ =gUsedPalettes + ldr r1, [r0] + ldr r2, _0801D518 @ =0xFFFF0000 + orrs r1, r2 + str r1, [r0] + add sp, #4 + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0801D50C: .4byte gPaletteList +_0801D510: .4byte gPaletteBuffer +_0801D514: .4byte gUsedPalettes +_0801D518: .4byte 0xFFFF0000 + .syntax divided diff --git a/asm/non_matching/common/ClearBit.inc b/asm/non_matching/common/ClearBit.inc new file mode 100644 index 00000000..0d34ceb5 --- /dev/null +++ b/asm/non_matching/common/ClearBit.inc @@ -0,0 +1,14 @@ + .syntax unified + lsrs r2, r1, #3 + adds r3, r0, r2 + movs r2, #7 + ands r1, r2 + movs r2, #1 + lsls r2, r1 + ldrb r0, [r3] + adds r1, r0, #0 + bics r1, r2 + strb r1, [r3] + ands r0, r2 + bx lr + .syntax divided diff --git a/asm/non_matching/common/DrawDungeonFeatures.inc b/asm/non_matching/common/DrawDungeonFeatures.inc new file mode 100644 index 00000000..706d8c96 --- /dev/null +++ b/asm/non_matching/common/DrawDungeonFeatures.inc @@ -0,0 +1,179 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x14 + adds r4, r0, #0 + bl CheckHasMap + cmp r0, #0 + bne _0801DDB8 + b _0801DEEA +_0801DDB8: + ldr r1, _0801DDD8 @ =gUnk_080C9C50 + ldr r0, _0801DDDC @ =gArea + ldrb r0, [r0, #3] + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r1, [r0] + lsls r0, r4, #2 + adds r0, r0, r1 + ldr r4, [r0] + ldr r0, _0801DDE0 @ =gUnk_02019EE0 + movs r1, #0x80 + lsls r1, r1, #8 + bl MemClear + b _0801DEE2 + .align 2, 0 +_0801DDD8: .4byte gUnk_080C9C50 +_0801DDDC: .4byte gArea +_0801DDE0: .4byte gUnk_02019EE0 +_0801DDE4: + ldrb r0, [r4] + ldrb r1, [r4, #1] + movs r2, #3 + bl GetRoomProperty + adds r6, r0, #0 + adds r0, r4, #0 + bl sub_0801DF10 + adds r5, r0, #0 + movs r0, #0 + str r0, [sp, #0xc] + ldrh r2, [r4] + ldr r0, _0801DE14 @ =gUnk_02032EC0 + ldrh r3, [r0, #0x20] + ldr r1, _0801DE18 @ =0x0000FFFF + ands r1, r2 + ldr r0, _0801DE18 @ =0x0000FFFF + ands r0, r3 + cmp r1, r0 + bne _0801DE1C + movs r3, #8 + b _0801DE36 + .align 2, 0 +_0801DE14: .4byte gUnk_02032EC0 +_0801DE18: .4byte 0x0000FFFF +_0801DE1C: + bl HasDungeonSmallKey + cmp r0, #0 + beq _0801DE28 + movs r0, #2 + str r0, [sp, #0xc] +_0801DE28: + adds r0, r6, #0 + adds r1, r5, #0 + bl sub_0801DF90 + cmp r0, #0 + beq _0801DE38 + movs r3, #3 +_0801DE36: + str r3, [sp, #0xc] +_0801DE38: + ldrb r1, [r4, #2] + movs r0, #1 + ands r0, r1 + cmp r0, #0 + beq _0801DE46 + movs r0, #0 + str r0, [sp, #0xc] +_0801DE46: + adds r3, r4, #0 + adds r3, #8 + str r3, [sp, #0x10] + ldr r0, [sp, #0xc] + cmp r0, #0 + beq _0801DEE0 + ldr r2, _0801DEF8 @ =0x040000D4 + ldr r0, [r4, #4] + ldr r1, _0801DEFC @ =gMapData + adds r0, r0, r1 + str r0, [r2] + ldr r0, _0801DF00 @ =gUnk_02019EE0 + str r0, [r2, #4] + ldr r0, _0801DF04 @ =0x84000100 + str r0, [r2, #8] + ldr r0, [r2, #8] + ldr r0, _0801DF08 @ =gAreaRoomHeaders + ldrb r2, [r4] + lsls r2, r2, #2 + adds r2, r2, r0 + ldrb r1, [r4, #1] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #1 + ldr r2, [r2] + adds r2, r2, r0 + ldrh r0, [r2] + lsrs r0, r0, #4 + str r0, [sp] + ldrh r0, [r2, #2] + ldr r1, _0801DF0C @ =0x000007FF + ands r0, r1 + lsrs r0, r0, #4 + str r0, [sp, #4] + ldrh r0, [r2, #4] + lsrs r7, r0, #4 + ldrh r0, [r2, #6] + lsrs r0, r0, #4 + mov sl, r0 + adds r0, r7, #3 + lsrs r0, r0, #2 + str r0, [sp, #8] + movs r6, #0 + cmp r6, sl + bhs _0801DEE0 +_0801DEA0: + ldr r3, [sp, #8] + adds r1, r6, #0 + muls r1, r3, r1 + ldr r0, _0801DF00 @ =gUnk_02019EE0 + adds r1, r1, r0 + mov r8, r1 + movs r5, #0 + adds r0, r6, #1 + mov sb, r0 + cmp r5, r7 + bhs _0801DEDA +_0801DEB6: + ldr r3, [sp] + adds r4, r3, r5 + adds r0, r5, #0 + mov r1, r8 + bl sub_0801DF60 + ldr r1, [sp, #0xc] + bl sub_0801DF78 + adds r2, r0, #0 + adds r0, r4, #0 + ldr r3, [sp, #4] + adds r1, r3, r6 + bl sub_0801DF28 + adds r5, #1 + cmp r5, r7 + blo _0801DEB6 +_0801DEDA: + mov r6, sb + cmp r6, sl + blo _0801DEA0 +_0801DEE0: + ldr r4, [sp, #0x10] +_0801DEE2: + ldrb r0, [r4] + cmp r0, #0 + beq _0801DEEA + b _0801DDE4 +_0801DEEA: + add sp, #0x14 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0801DEF8: .4byte 0x040000D4 +_0801DEFC: .4byte gMapData +_0801DF00: .4byte gUnk_02019EE0 +_0801DF04: .4byte 0x84000100 +_0801DF08: .4byte gAreaRoomHeaders +_0801DF0C: .4byte 0x000007FF + .syntax divided diff --git a/asm/non_matching/common/DrawDungeonMap.inc b/asm/non_matching/common/DrawDungeonMap.inc new file mode 100644 index 00000000..8d218546 --- /dev/null +++ b/asm/non_matching/common/DrawDungeonMap.inc @@ -0,0 +1,221 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + sub sp, #4 + adds r4, r0, #0 + adds r5, r1, #0 + adds r1, r2, #0 + adds r0, r5, #0 + bl MemClear + movs r0, #1 + strb r0, [r5] + ldr r2, _0801DBE4 @ =gScreenTransition + ldrh r0, [r2, #0x1c] + lsrs r0, r0, #4 + movs r1, #0x7f + ands r0, r1 + strb r0, [r5, #1] + ldrh r0, [r2, #0x1e] + lsrs r0, r0, #4 + ands r0, r1 + strb r0, [r5, #2] + adds r5, #3 + ldr r1, _0801DBE8 @ =gUnk_080C9C50 + ldr r0, _0801DBEC @ =gArea + ldrb r0, [r0, #3] + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r0, [r0] + lsls r4, r4, #2 + adds r4, r4, r0 + ldr r6, [r4] + b _0801DD3A + .align 2, 0 +_0801DBE4: .4byte gScreenTransition +_0801DBE8: .4byte gUnk_080C9C50 +_0801DBEC: .4byte gArea +_0801DBF0: + ldrb r0, [r6] + ldrb r1, [r6, #1] + movs r2, #3 + bl GetRoomProperty + adds r4, r0, #0 + cmp r4, #0 + bne _0801DC04 + adds r6, #8 + b _0801DD3A +_0801DC04: + adds r0, r6, #0 + bl sub_0801DF10 + mov r8, r0 + bl HasDungeonBigKey + movs r1, #8 + adds r1, r1, r6 + mov sb, r1 + cmp r0, #0 + beq _0801DCAE + ldrb r0, [r4] + cmp r0, #0 + beq _0801DCAE + movs r3, #0xfc + lsls r3, r3, #2 + ldr r7, _0801DC84 @ =0x000007FF +_0801DC26: + ldrb r0, [r4] + cmp r0, #3 + bgt _0801DCA6 + cmp r0, #2 + blt _0801DCA6 + ldrb r1, [r4, #1] + mov r0, r8 + str r3, [sp] + bl CheckLocalFlagByBank + ldr r3, [sp] + cmp r0, #0 + bne _0801DCA6 + ldr r0, _0801DC88 @ =gAreaRoomHeaders + ldrb r2, [r6] + lsls r2, r2, #2 + adds r2, r2, r0 + ldrb r1, [r6, #1] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #1 + ldr r1, [r2] + adds r2, r1, r0 + movs r0, #2 + strb r0, [r5] + ldrb r0, [r4] + cmp r0, #2 + bne _0801DC8C + ldrh r0, [r4, #4] + lsls r0, r0, #4 + ands r0, r3 + movs r1, #8 + orrs r0, r1 + ldrh r1, [r2] + ands r1, r7 + adds r0, r0, r1 + asrs r0, r0, #4 + strb r0, [r5, #1] + ldrh r0, [r4, #4] + lsrs r0, r0, #2 + ands r0, r3 + movs r1, #8 + orrs r0, r1 + ldrh r1, [r2, #2] + ands r1, r7 + b _0801DC9E + .align 2, 0 +_0801DC84: .4byte 0x000007FF +_0801DC88: .4byte gAreaRoomHeaders +_0801DC8C: + ldrh r0, [r2] + ands r0, r7 + ldrh r1, [r4, #4] + adds r0, r0, r1 + asrs r0, r0, #4 + strb r0, [r5, #1] + ldrh r0, [r2, #2] + ands r0, r7 + ldrh r1, [r4, #6] +_0801DC9E: + adds r0, r0, r1 + asrs r0, r0, #4 + strb r0, [r5, #2] + adds r5, #3 +_0801DCA6: + adds r4, #8 + ldrb r0, [r4] + cmp r0, #0 + bne _0801DC26 +_0801DCAE: + bl HasDungeonBigKey + cmp r0, #0 + beq _0801DD16 + ldrb r1, [r6, #2] + movs r0, #2 + ands r0, r1 + cmp r0, #0 + beq _0801DD16 + ldr r0, _0801DD4C @ =gArea + ldrb r0, [r0, #3] + adds r0, #1 + bl CheckGlobalFlag + cmp r0, #0 + bne _0801DD16 + ldr r0, _0801DD50 @ =gAreaRoomHeaders + ldrb r2, [r6] + lsls r2, r2, #2 + adds r2, r2, r0 + ldrb r1, [r6, #1] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #1 + ldr r1, [r2] + adds r2, r1, r0 + movs r0, #4 + strb r0, [r5] + ldrh r0, [r2, #4] + lsrs r0, r0, #1 + ldrh r1, [r2] + adds r0, r0, r1 + asrs r1, r0, #4 + adds r0, r1, #0 + cmp r1, #0 + bge _0801DCF8 + adds r0, #0x7f +_0801DCF8: + asrs r0, r0, #7 + lsls r0, r0, #7 + subs r0, r1, r0 + strb r0, [r5, #1] + ldrh r0, [r2, #6] + lsrs r0, r0, #1 + ldrh r2, [r2, #2] + adds r0, r0, r2 + asrs r1, r0, #4 + adds r0, r1, #0 + asrs r0, r0, #7 + lsls r0, r0, #7 + subs r0, r1, r0 + strb r0, [r5, #2] + adds r5, #3 +_0801DD16: + ldr r2, _0801DD54 @ =gScreenTransition + ldrh r0, [r6] + ldrh r1, [r2, #0x16] + cmp r0, r1 + bne _0801DD38 + movs r0, #3 + strb r0, [r5] + ldrh r0, [r2, #0x18] + lsrs r0, r0, #4 + movs r1, #0x7f + ands r0, r1 + strb r0, [r5, #1] + ldrh r0, [r2, #0x1a] + lsrs r0, r0, #4 + ands r0, r1 + strb r0, [r5, #2] + adds r5, #3 +_0801DD38: + mov r6, sb +_0801DD3A: + ldrb r0, [r6] + cmp r0, #0 + beq _0801DD42 + b _0801DBF0 +_0801DD42: + add sp, #4 + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0801DD4C: .4byte gArea +_0801DD50: .4byte gAreaRoomHeaders +_0801DD54: .4byte gScreenTransition + .syntax divided diff --git a/asm/non_matching/common/WriteBit.inc b/asm/non_matching/common/WriteBit.inc new file mode 100644 index 00000000..7986e488 --- /dev/null +++ b/asm/non_matching/common/WriteBit.inc @@ -0,0 +1,14 @@ + .syntax unified + lsrs r2, r1, #3 + adds r3, r0, r2 + movs r2, #7 + ands r1, r2 + movs r2, #1 + lsls r2, r1 + ldrb r0, [r3] + adds r1, r0, #0 + orrs r1, r2 + strb r1, [r3] + ands r0, r2 + bx lr + .syntax divided diff --git a/asm/non_matching/common/sub_0801D898.inc b/asm/non_matching/common/sub_0801D898.inc new file mode 100644 index 00000000..571024f1 --- /dev/null +++ b/asm/non_matching/common/sub_0801D898.inc @@ -0,0 +1,39 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + adds r5, r0, #0 + adds r4, r1, #0 + adds r6, r2, #0 + movs r0, #0x80 + lsls r0, r0, #8 + ands r0, r3 + movs r1, #0x20 + mov ip, r1 + cmp r0, #0 + beq _0801D8B2 + movs r0, #0x40 + mov ip, r0 +_0801D8B2: + ldr r0, _0801D8D8 @ =0x00007FFF + ands r3, r0 + ldr r1, _0801D8DC @ =0x040000D4 + movs r2, #0x80 + lsls r2, r2, #0x18 + orrs r2, r6 + lsls r7, r6, #1 + mov r0, ip + lsls r6, r0, #1 +_0801D8C4: + str r4, [r1] + str r5, [r1, #4] + str r2, [r1, #8] + ldr r0, [r1, #8] + adds r4, r4, r7 + adds r5, r5, r6 + subs r3, #1 + cmp r3, #0 + bne _0801D8C4 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0801D8D8: .4byte 0x00007FFF +_0801D8DC: .4byte 0x040000D4 + .syntax divided diff --git a/asm/non_matching/common/sub_0801DF28.inc b/asm/non_matching/common/sub_0801DF28.inc new file mode 100644 index 00000000..4d22a8f0 --- /dev/null +++ b/asm/non_matching/common/sub_0801DF28.inc @@ -0,0 +1,28 @@ + .syntax unified + push {r4, lr} + lsrs r4, r1, #3 + lsls r4, r4, #4 + lsrs r3, r0, #3 + adds r4, r4, r3 + lsls r4, r4, #5 + ldr r3, _0801DF58 @ =gUnk_0201AEE0 + adds r4, r4, r3 + movs r3, #7 + ands r1, r3 + lsls r1, r1, #2 + adds r4, r4, r1 + ands r0, r3 + lsls r0, r0, #2 + lsls r2, r0 + ldr r1, _0801DF5C @ =gUnk_080C9460 + adds r0, r0, r1 + ldr r1, [r4] + ldr r0, [r0] + ands r1, r0 + orrs r1, r2 + str r1, [r4] + pop {r4, pc} + .align 2, 0 +_0801DF58: .4byte gUnk_0201AEE0 +_0801DF5C: .4byte gUnk_080C9460 + .syntax divided diff --git a/asm/non_matching/common/sub_0801DFB4.inc b/asm/non_matching/common/sub_0801DFB4.inc new file mode 100644 index 00000000..2dfd039c --- /dev/null +++ b/asm/non_matching/common/sub_0801DFB4.inc @@ -0,0 +1,44 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + mov r8, r0 + adds r4, r1, #0 + adds r5, r2, #0 + adds r6, r3, #0 + ldr r7, _0801E004 @ =gFuseInfo + adds r0, r7, #0 + movs r1, #0x10 + bl MemClear + strh r4, [r7, #6] + strh r5, [r7, #8] + strh r6, [r7, #0xa] + mov r0, r8 + str r0, [r7, #0xc] + ldr r0, _0801E008 @ =gUnk_03003DF0 + ldrb r0, [r0, #2] + strb r0, [r7, #3] + mov r1, r8 + cmp r1, #0 + beq _0801DFF8 + ldrb r1, [r1, #0x11] + lsls r0, r1, #0x1c + lsrs r0, r0, #0x1c + strb r0, [r7, #4] + movs r0, #0x10 + rsbs r0, r0, #0 + ands r0, r1 + movs r1, #2 + orrs r0, r1 + mov r1, r8 + strb r0, [r1, #0x11] +_0801DFF8: + movs r0, #0 + strb r0, [r7] + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0801E004: .4byte gFuseInfo +_0801E008: .4byte gUnk_03003DF0 + .syntax divided diff --git a/asm/non_matching/common/sub_0801E24C.inc b/asm/non_matching/common/sub_0801E24C.inc new file mode 100644 index 00000000..c82cd2ad --- /dev/null +++ b/asm/non_matching/common/sub_0801E24C.inc @@ -0,0 +1,40 @@ + .syntax unified + push {r4, r5, lr} + lsls r1, r1, #1 + ldr r2, _0801E278 @ =gUnk_02018EE0 + adds r5, r1, r2 + movs r3, #0 + adds r2, r0, #0 + lsls r4, r2, #1 + movs r0, #3 + subs r1, r0, r4 + cmp r3, r2 + bgt _0801E28E + adds r4, r4, r5 +_0801E264: + lsls r0, r3, #1 + adds r0, r0, r5 + strh r2, [r0] + strh r3, [r4] + cmp r1, #0 + bge _0801E27C + adds r1, #6 + lsls r0, r3, #2 + adds r1, r1, r0 + b _0801E288 + .align 2, 0 +_0801E278: .4byte gUnk_02018EE0 +_0801E27C: + adds r1, #0xa + subs r0, r3, r2 + lsls r0, r0, #2 + adds r1, r1, r0 + subs r4, #2 + subs r2, #1 +_0801E288: + adds r3, #1 + cmp r3, r2 + ble _0801E264 +_0801E28E: + pop {r4, r5, pc} + .syntax divided diff --git a/asm/non_matching/common/sub_0801E290.inc b/asm/non_matching/common/sub_0801E290.inc new file mode 100644 index 00000000..29e1bcc4 --- /dev/null +++ b/asm/non_matching/common/sub_0801E290.inc @@ -0,0 +1,75 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sb + mov r6, r8 + push {r6, r7} + mov ip, r0 + adds r6, r2, #0 + ldr r0, _0801E2BC @ =gUnk_03003DE4 + ldrb r0, [r0] + lsls r2, r0, #2 + adds r2, r2, r0 + lsls r2, r2, #9 + lsls r0, r1, #1 + ldr r3, _0801E2C0 @ =gUnk_02017AA0 + adds r0, r0, r3 + adds r2, r2, r0 + adds r4, r2, #0 + adds r5, r1, #0 + mov sb, r5 + ldr r0, _0801E2C4 @ =gUnk_02018EE0 + mov r8, r0 + b _0801E30A + .align 2, 0 +_0801E2BC: .4byte gUnk_03003DE4 +_0801E2C0: .4byte gUnk_02017AA0 +_0801E2C4: .4byte gUnk_02018EE0 +_0801E2C8: + mov r1, r8 + movs r3, #0 + ldrsh r0, [r1, r3] + movs r7, #2 + add r8, r7 + mov r3, ip + subs r1, r3, r0 + adds r3, r3, r0 + cmp r1, #0 + bge _0801E2DE + movs r1, #0 +_0801E2DE: + cmp r3, #0xef + ble _0801E2E4 + movs r3, #0xf0 +_0801E2E4: + mov r7, sb + lsls r0, r7, #0x10 + lsrs r0, r0, #0x10 + cmp r0, #0x9f + bhi _0801E2F2 + strb r3, [r4] + strb r1, [r4, #1] +_0801E2F2: + lsls r0, r5, #0x10 + lsrs r0, r0, #0x10 + cmp r0, #0x9f + bhi _0801E2FE + strb r3, [r2] + strb r1, [r2, #1] +_0801E2FE: + subs r4, #2 + adds r2, #2 + movs r0, #1 + rsbs r0, r0, #0 + add sb, r0 + adds r5, #1 +_0801E30A: + adds r0, r6, #0 + subs r6, #1 + cmp r0, #0 + bne _0801E2C8 + pop {r3, r4} + mov r8, r3 + mov sb, r4 + pop {r4, r5, r6, r7, pc} + .align 2, 0 + .syntax divided diff --git a/asm/non_matching/common/sub_0801E31C.inc b/asm/non_matching/common/sub_0801E31C.inc new file mode 100644 index 00000000..7db12fb7 --- /dev/null +++ b/asm/non_matching/common/sub_0801E31C.inc @@ -0,0 +1,189 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #0x20 + str r0, [sp] + str r1, [sp, #4] + mov sl, r2 + mov sb, r3 + ldr r0, _0801E3AC @ =gUnk_03003DE4 + ldrb r1, [r0] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #9 + ldr r1, _0801E3B0 @ =gUnk_02017AA0 + adds r0, r0, r1 + movs r1, #0xa0 + lsls r1, r1, #4 + bl MemClear + cmp sl, sb + bge _0801E3DC + movs r6, #0 + mov r8, sl + mov r7, r8 + mov r0, r8 + lsls r1, r0, #1 + movs r0, #3 + subs r5, r0, r1 + cmp r6, r8 + ble _0801E35E + b _0801E45E +_0801E35E: + mov r1, r8 + lsls r0, r1, #2 + ldr r4, _0801E3B4 @ =gUnk_02018EE0 + adds r0, r0, r4 + str r0, [sp, #0x10] + mov r1, sb + mov r0, r8 + muls r0, r1, r0 + str r0, [sp, #0x14] + movs r3, #0 +_0801E372: + adds r0, r3, #0 + mov r1, sl + str r3, [sp, #0x18] + bl Div + adds r4, r0, #0 + lsls r4, r4, #0x10 + lsrs r4, r4, #0x10 + str r4, [sp, #0x1c] + ldr r0, [sp, #0x14] + mov r1, sl + bl Div + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + lsls r2, r6, #2 + ldr r4, _0801E3B4 @ =gUnk_02018EE0 + adds r1, r2, r4 + str r0, [r1] + ldr r0, [sp, #0x1c] + ldr r1, [sp, #0x10] + str r0, [r1] + ldr r3, [sp, #0x18] + cmp r5, #0 + bge _0801E3B8 + adds r0, r5, #6 + adds r5, r0, r2 + b _0801E3D2 + .align 2, 0 +_0801E3AC: .4byte gUnk_03003DE4 +_0801E3B0: .4byte gUnk_02017AA0 +_0801E3B4: .4byte gUnk_02018EE0 +_0801E3B8: + adds r1, r5, #0 + adds r1, #0xa + subs r0, r6, r7 + lsls r0, r0, #2 + adds r5, r1, r0 + ldr r4, [sp, #0x10] + subs r4, #4 + str r4, [sp, #0x10] + ldr r0, [sp, #0x14] + mov r1, sb + subs r0, r0, r1 + str r0, [sp, #0x14] + subs r7, #1 +_0801E3D2: + add r3, sb + adds r6, #1 + cmp r6, r7 + ble _0801E372 + b _0801E45E +_0801E3DC: + movs r6, #0 + mov r8, sb + mov r7, r8 + mov r4, r8 + lsls r1, r4, #1 + movs r0, #3 + subs r5, r0, r1 + cmp r6, r8 + bgt _0801E45E + lsls r0, r4, #2 + ldr r1, _0801E438 @ =gUnk_02018EE0 + adds r0, r0, r1 + str r0, [sp, #8] + mov r0, sl + mov r4, r8 + muls r4, r0, r4 + str r4, [sp, #0xc] + movs r3, #0 +_0801E400: + adds r0, r3, #0 + mov r1, sb + str r3, [sp, #0x18] + bl Div + adds r4, r0, #0 + lsls r4, r4, #0x10 + lsrs r4, r4, #0x10 + str r4, [sp, #0x1c] + ldr r0, [sp, #0xc] + mov r1, sb + bl Div + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + lsls r2, r6, #2 + ldr r4, _0801E438 @ =gUnk_02018EE0 + adds r1, r2, r4 + str r0, [r1] + ldr r0, [sp, #0x1c] + ldr r1, [sp, #8] + str r0, [r1] + ldr r3, [sp, #0x18] + cmp r5, #0 + bge _0801E43C + adds r0, r5, #6 + adds r5, r0, r2 + b _0801E456 + .align 2, 0 +_0801E438: .4byte gUnk_02018EE0 +_0801E43C: + adds r1, r5, #0 + adds r1, #0xa + subs r0, r6, r7 + lsls r0, r0, #2 + adds r5, r1, r0 + ldr r4, [sp, #8] + subs r4, #4 + str r4, [sp, #8] + ldr r0, [sp, #0xc] + mov r1, sl + subs r0, r0, r1 + str r0, [sp, #0xc] + subs r7, #1 +_0801E456: + add r3, sl + adds r6, #1 + cmp r6, r7 + ble _0801E400 +_0801E45E: + ldr r0, [sp] + ldr r1, [sp, #4] + mov r2, r8 + bl sub_0801E290 + ldr r0, _0801E48C @ =gUnk_03003DE4 + ldrb r1, [r0] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #9 + ldr r1, _0801E490 @ =gUnk_02017AA0 + adds r0, r0, r1 + ldr r1, _0801E494 @ =0x04000040 + ldr r2, _0801E498 @ =0xA2600001 + bl sub_0805622C + add sp, #0x20 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0801E48C: .4byte gUnk_03003DE4 +_0801E490: .4byte gUnk_02017AA0 +_0801E494: .4byte 0x04000040 +_0801E498: .4byte 0xA2600001 + .syntax divided diff --git a/asm/non_matching/common/sub_0801E49C.inc b/asm/non_matching/common/sub_0801E49C.inc new file mode 100644 index 00000000..46bd1ebc --- /dev/null +++ b/asm/non_matching/common/sub_0801E49C.inc @@ -0,0 +1,211 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + sub sp, #8 + mov r8, r0 + str r1, [sp, #4] + mov sb, r2 + adds r5, r3, #0 + ldr r0, _0801E5E4 @ =0x0000FFFF + movs r2, #0xf0 + lsls r2, r2, #3 + ldr r1, _0801E5E8 @ =gUnk_02018EE0 + bl MemFill16 + adds r3, r5, #0 + subs r3, #0x40 + movs r2, #0xff + ands r3, r2 + ldr r1, _0801E5EC @ =gSineTable + adds r0, r3, #0 + adds r0, #0x40 + lsls r0, r0, #1 + adds r0, r0, r1 + movs r4, #0 + ldrsh r0, [r0, r4] + mov r4, sb + muls r4, r0, r4 + adds r0, r4, #0 + asrs r0, r0, #8 + mov r4, r8 + adds r7, r4, r0 + lsls r0, r3, #1 + adds r0, r0, r1 + movs r3, #0 + ldrsh r0, [r0, r3] + mov r4, sb + muls r4, r0, r4 + adds r0, r4, #0 + asrs r0, r0, #8 + ldr r3, [sp, #4] + adds r3, r3, r0 + mov sl, r3 + adds r3, r5, #0 + adds r3, #0x68 + ands r3, r2 + adds r0, r3, #0 + adds r0, #0x40 + lsls r0, r0, #1 + adds r0, r0, r1 + movs r4, #0 + ldrsh r0, [r0, r4] + mov r4, sb + muls r4, r0, r4 + adds r0, r4, #0 + asrs r0, r0, #8 + mov r4, r8 + adds r6, r4, r0 + lsls r0, r3, #1 + adds r0, r0, r1 + movs r3, #0 + ldrsh r0, [r0, r3] + mov r4, sb + muls r4, r0, r4 + adds r0, r4, #0 + asrs r0, r0, #8 + ldr r3, [sp, #4] + adds r4, r3, r0 + adds r3, r5, #0 + subs r3, #0xe8 + ands r3, r2 + adds r0, r3, #0 + adds r0, #0x40 + lsls r0, r0, #1 + adds r0, r0, r1 + movs r2, #0 + ldrsh r0, [r0, r2] + mov r2, sb + muls r2, r0, r2 + adds r0, r2, #0 + asrs r0, r0, #8 + mov r2, r8 + adds r5, r2, r0 + lsls r0, r3, #1 + adds r0, r0, r1 + movs r3, #0 + ldrsh r0, [r0, r3] + mov r1, sb + muls r1, r0, r1 + adds r0, r1, #0 + asrs r0, r0, #8 + ldr r2, [sp, #4] + adds r2, r2, r0 + mov r8, r2 + movs r0, #0 + str r0, [sp] + adds r0, r7, #0 + mov r1, sl + adds r2, r6, #0 + adds r3, r4, #0 + bl sub_0801E64C + movs r0, #1 + str r0, [sp] + adds r0, r7, #0 + mov r1, sl + adds r2, r5, #0 + mov r3, r8 + bl sub_0801E64C + movs r0, #2 + str r0, [sp] + adds r0, r6, #0 + adds r1, r4, #0 + adds r2, r5, #0 + mov r3, r8 + bl sub_0801E64C + ldr r5, _0801E5F0 @ =gUnk_03003DE4 + ldrb r1, [r5] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #9 + ldr r6, _0801E5F4 @ =gUnk_02017AA0 + adds r0, r0, r6 + movs r1, #0xa0 + lsls r1, r1, #4 + bl MemClear + ldr r2, _0801E5E8 @ =gUnk_02018EE0 + ldrb r1, [r5] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #9 + adds r1, r0, r6 + movs r3, #0xa0 + mov sl, r3 +_0801E5B0: + ldr r7, [r2] + ldr r6, [r2, #4] + ldr r5, [r2, #8] + adds r2, #0xc + cmp r7, r6 + ble _0801E5C2 + adds r4, r7, #0 + adds r7, r6, #0 + adds r6, r4, #0 +_0801E5C2: + cmp r7, r5 + ble _0801E5CC + adds r4, r7, #0 + adds r7, r5, #0 + adds r5, r4, #0 +_0801E5CC: + cmp r6, r5 + ble _0801E5D6 + adds r4, r6, #0 + adds r6, r5, #0 + adds r5, r4, #0 +_0801E5D6: + movs r0, #1 + rsbs r0, r0, #0 + cmp r7, r0 + beq _0801E5F8 + strb r5, [r1] + strb r7, [r1, #1] + b _0801E60A + .align 2, 0 +_0801E5E4: .4byte 0x0000FFFF +_0801E5E8: .4byte gUnk_02018EE0 +_0801E5EC: .4byte gSineTable +_0801E5F0: .4byte gUnk_03003DE4 +_0801E5F4: .4byte gUnk_02017AA0 +_0801E5F8: + cmp r6, r7 + beq _0801E602 + strb r5, [r1] + strb r6, [r1, #1] + b _0801E60A +_0801E602: + cmp r5, r7 + beq _0801E60A + strb r7, [r1, #1] + strb r7, [r1] +_0801E60A: + movs r4, #1 + rsbs r4, r4, #0 + add sl, r4 + adds r1, #2 + mov r0, sl + cmp r0, #0 + bgt _0801E5B0 + ldr r0, _0801E63C @ =gUnk_03003DE4 + ldrb r1, [r0] + lsls r0, r1, #2 + adds r0, r0, r1 + lsls r0, r0, #9 + ldr r1, _0801E640 @ =gUnk_02017AA0 + adds r0, r0, r1 + ldr r1, _0801E644 @ =0x04000040 + ldr r2, _0801E648 @ =0xA2600001 + bl sub_0805622C + add sp, #8 + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0801E63C: .4byte gUnk_03003DE4 +_0801E640: .4byte gUnk_02017AA0 +_0801E644: .4byte 0x04000040 +_0801E648: .4byte 0xA2600001 + .syntax divided diff --git a/asm/non_matching/common/sub_0801E64C.inc b/asm/non_matching/common/sub_0801E64C.inc new file mode 100644 index 00000000..03076c44 --- /dev/null +++ b/asm/non_matching/common/sub_0801E64C.inc @@ -0,0 +1,72 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + adds r5, r0, #0 + adds r4, r1, #0 + adds r6, r3, #0 + ldr r7, _0801E6C4 @ =gUnk_02018EE0 + cmp r4, #0 + bge _0801E65E + cmp r6, #0 + blt _0801E6C2 +_0801E65E: + cmp r4, #0x9f + ble _0801E666 + cmp r6, #0x9f + bgt _0801E6C2 +_0801E666: + cmp r4, r6 + ble _0801E676 + adds r1, r4, #0 + adds r4, r6, #0 + adds r6, r1, #0 + adds r1, r5, #0 + adds r5, r2, #0 + adds r2, r1, #0 +_0801E676: + cmp r4, r6 + beq _0801E6C2 + subs r0, r2, r5 + lsls r0, r0, #0x10 + subs r1, r6, r4 + bl Div + adds r3, r0, #0 + cmp r4, #0 + bge _0801E694 + rsbs r0, r4, #0 + muls r0, r3, r0 + asrs r0, r0, #0x10 + adds r5, r5, r0 + movs r4, #0 +_0801E694: + cmp r6, #0x9f + ble _0801E69A + movs r6, #0x9f +_0801E69A: + lsls r2, r5, #0x10 + lsls r0, r4, #1 + adds r0, r0, r4 + ldr r1, [sp, #0x14] + adds r0, r0, r1 + lsls r0, r0, #2 + adds r7, r0, r7 +_0801E6A8: + cmp r5, #0 + bge _0801E6AE + movs r5, #0 +_0801E6AE: + cmp r5, #0xf0 + ble _0801E6B4 + movs r5, #0xf0 +_0801E6B4: + str r5, [r7] + adds r2, r2, r3 + asrs r5, r2, #0x10 + adds r4, #1 + adds r7, #0xc + cmp r4, r6 + ble _0801E6A8 +_0801E6C2: + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0801E6C4: .4byte gUnk_02018EE0 + .syntax divided diff --git a/asm/non_matching/common/sub_0801E6C8.inc b/asm/non_matching/common/sub_0801E6C8.inc new file mode 100644 index 00000000..7bb2b576 --- /dev/null +++ b/asm/non_matching/common/sub_0801E6C8.inc @@ -0,0 +1,59 @@ + .syntax unified + push {r4, r5, r6, lr} + adds r4, r0, #0 + subs r0, r4, #1 + cmp r0, #0x63 + bhi _0801E722 + movs r1, #0 + ldr r5, _0801E724 @ =gFuseInfo + ldr r3, _0801E728 @ =gUnk_02002C01 + movs r2, #0xf1 +_0801E6DA: + adds r0, r1, r3 + ldrb r6, [r0] + cmp r4, r6 + bne _0801E6E4 + strb r2, [r0] +_0801E6E4: + adds r1, #1 + cmp r1, #0x7f + bls _0801E6DA + ldr r0, [r5, #0xc] + bl sub_08002632 + adds r1, r0, #0 + subs r0, r1, #1 + cmp r0, #0x7e + bhi _0801E70A + ldr r0, _0801E72C @ =gSave + ldr r2, _0801E730 @ =0x000001C1 + adds r0, r0, r2 + adds r1, r1, r0 + ldrb r0, [r1] + cmp r0, #0xf1 + bne _0801E70A + movs r0, #0xf2 + strb r0, [r1] +_0801E70A: + movs r1, #0 + ldr r0, _0801E734 @ =gUnk_03003DF0 + movs r2, #0xf1 + adds r0, #0xb +_0801E712: + ldrb r3, [r0] + cmp r4, r3 + bne _0801E71A + strb r2, [r0] +_0801E71A: + adds r0, #0xc + adds r1, #1 + cmp r1, #0x1f + bls _0801E712 +_0801E722: + pop {r4, r5, r6, pc} + .align 2, 0 +_0801E724: .4byte gFuseInfo +_0801E728: .4byte gUnk_02002C01 +_0801E72C: .4byte gSave +_0801E730: .4byte 0x000001C1 +_0801E734: .4byte gUnk_03003DF0 + .syntax divided diff --git a/asm/non_matching/common/sub_0801E738.inc b/asm/non_matching/common/sub_0801E738.inc new file mode 100644 index 00000000..a6a3df28 --- /dev/null +++ b/asm/non_matching/common/sub_0801E738.inc @@ -0,0 +1,51 @@ + .syntax unified + push {r4, lr} + adds r4, r0, #0 + bl sub_0801E82C + adds r0, r4, #0 + subs r0, #0x65 + cmp r0, #0x10 + bhi _0801E790 + adds r0, r4, #0 + bl sub_0801E8B0 + adds r1, r0, #0 + cmp r1, #0 + bge _0801E76E + movs r1, #0 + ldr r0, _0801E794 @ =gSave + movs r3, #0x8c + lsls r3, r3, #1 + adds r2, r0, r3 + ldrb r0, [r2] + cmp r0, #0 + beq _0801E76E +_0801E764: + adds r1, #1 + adds r0, r1, r2 + ldrb r0, [r0] + cmp r0, #0 + bne _0801E764 +_0801E76E: + cmp r1, #0x11 + bhi _0801E790 + ldr r2, _0801E794 @ =gSave + movs r3, #0x8c + lsls r3, r3, #1 + adds r0, r2, r3 + adds r0, r1, r0 + strb r4, [r0] + adds r3, #0x13 + adds r0, r2, r3 + adds r1, r1, r0 + ldrb r0, [r1] + adds r0, #1 + cmp r0, #0x63 + ble _0801E78E + movs r0, #0x63 +_0801E78E: + strb r0, [r1] +_0801E790: + pop {r4, pc} + .align 2, 0 +_0801E794: .4byte gSave + .syntax divided diff --git a/asm/non_matching/common/sub_0801E82C.inc b/asm/non_matching/common/sub_0801E82C.inc new file mode 100644 index 00000000..3f0f200b --- /dev/null +++ b/asm/non_matching/common/sub_0801E82C.inc @@ -0,0 +1,69 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + ldr r1, _0801E8AC @ =gUnk_02002B54 + movs r5, #0 + adds r2, r1, #4 +_0801E83C: + ldrb r0, [r2, #0x13] + adds r3, r1, #4 + mov sl, r3 + cmp r0, #0 + bne _0801E848 + strb r0, [r2] +_0801E848: + adds r2, #1 + adds r5, #1 + cmp r5, #0x12 + bls _0801E83C + movs r0, #0 + strb r0, [r1, #0x16] + adds r2, r1, #0 + adds r2, #0x29 + strb r0, [r2] + movs r5, #0 + movs r0, #0x17 + adds r0, r0, r1 + mov sb, r0 + movs r3, #0x18 + adds r3, r3, r1 + mov r8, r3 + adds r7, r1, #4 + adds r6, r1, #5 +_0801E86C: + mov r1, sl + adds r0, r1, r5 + ldrb r0, [r0] + subs r0, #0x65 + cmp r0, #0x10 + bls _0801E890 + movs r4, #0x12 + subs r4, r4, r5 + adds r0, r6, #0 + adds r1, r7, #0 + adds r2, r4, #0 + bl MemCopy + mov r0, r8 + mov r1, sb + adds r2, r4, #0 + bl MemCopy +_0801E890: + movs r3, #1 + add sb, r3 + add r8, r3 + adds r7, #1 + adds r6, #1 + adds r5, #1 + cmp r5, #0x11 + bls _0801E86C + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .align 2, 0 +_0801E8AC: .4byte gUnk_02002B54 + .syntax divided diff --git a/asm/non_matching/common/sub_0801E99C.inc b/asm/non_matching/common/sub_0801E99C.inc new file mode 100644 index 00000000..7bbda3c9 --- /dev/null +++ b/asm/non_matching/common/sub_0801E99C.inc @@ -0,0 +1,112 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, r8 + push {r7} + bl sub_08002632 + mov r8, r0 + ldr r1, _0801E9E4 @ =gUnk_08001DCC + lsls r0, r0, #2 + adds r0, r0, r1 + ldr r7, [r0] + movs r0, #0x67 + bl GetInventoryValue + cmp r0, #0 + beq _0801EA56 + ldr r1, _0801E9E8 @ =gSave + ldrb r0, [r7] + ldrb r2, [r1, #8] + cmp r0, r2 + bhi _0801EA56 + ldr r2, _0801E9EC @ =0x000001C1 + adds r0, r1, r2 + add r0, r8 + ldrb r5, [r0] + subs r2, #0x80 + adds r0, r1, r2 + add r0, r8 + ldrb r6, [r0] + adds r4, r6, r7 +_0801E9D6: + cmp r5, #0xf1 + beq _0801E9F6 + cmp r5, #0xf1 + bhi _0801E9F0 + cmp r5, #0 + beq _0801E9F6 + b _0801EA10 + .align 2, 0 +_0801E9E4: .4byte gUnk_08001DCC +_0801E9E8: .4byte gSave +_0801E9EC: .4byte 0x000001C1 +_0801E9F0: + cmp r5, #0xf2 + beq _0801EA0A + b _0801EA10 +_0801E9F6: + ldrb r5, [r4, #5] + cmp r5, #0 + beq _0801EA10 + cmp r5, #0xff + beq _0801EA14 + adds r0, r5, #0 + bl CheckKinstoneFused + cmp r0, #0 + beq _0801EA10 +_0801EA0A: + adds r4, #1 + adds r6, #1 + ldrb r5, [r4, #5] +_0801EA10: + cmp r5, #0xff + bne _0801EA1C +_0801EA14: + adds r0, r7, #0 + bl sub_0801EA74 + adds r5, r0, #0 +_0801EA1C: + cmp r5, #0 + beq _0801EA32 + cmp r5, #0xf2 + beq _0801E9D6 + adds r0, r5, #0 + bl CheckKinstoneFused + cmp r0, #0 + beq _0801EA34 + movs r5, #0xf1 + b _0801E9D6 +_0801EA32: + movs r5, #0xf3 +_0801EA34: + ldr r1, _0801EA5C @ =gSave + ldr r2, _0801EA60 @ =0x000001C1 + adds r0, r1, r2 + add r0, r8 + strb r5, [r0] + subs r2, #0x80 + adds r0, r1, r2 + add r0, r8 + strb r6, [r0] + bl Random + ldrb r4, [r7, #1] + movs r1, #0x64 + bl __modsi3 + cmp r4, r0 + bhi _0801EA64 +_0801EA56: + movs r0, #0 + b _0801EA6E + .align 2, 0 +_0801EA5C: .4byte gSave +_0801EA60: .4byte 0x000001C1 +_0801EA64: + subs r0, r5, #1 + cmp r0, #0x63 + bls _0801EA6C + movs r5, #0 +_0801EA6C: + adds r0, r5, #0 +_0801EA6E: + pop {r3} + mov r8, r3 + pop {r4, r5, r6, r7, pc} + .syntax divided diff --git a/asm/non_matching/common/zFree.inc b/asm/non_matching/common/zFree.inc new file mode 100644 index 00000000..7ff819a2 --- /dev/null +++ b/asm/non_matching/common/zFree.inc @@ -0,0 +1,58 @@ + .syntax unified + push {r4, r5, lr} + ldr r3, _0801DA44 @ =gzHeap + subs r1, r0, r3 + ldr r0, _0801DA48 @ =0x00000FFF + cmp r1, r0 + bhi _0801DA74 + adds r4, r3, #0 + ldrh r5, [r4] + adds r4, #2 + movs r2, #0 + cmp r2, r5 + bhs _0801DA74 + ldrh r0, [r4] + cmp r0, r1 + bne _0801DA4C + lsls r0, r5, #2 + subs r1, r3, #2 + adds r0, r0, r1 + ldrh r1, [r0] + strh r1, [r4] + strh r2, [r0] + adds r0, #2 + ldrh r1, [r0] + strh r1, [r4, #2] + strh r2, [r0] + subs r0, r5, #1 + strh r0, [r3] + b _0801DA74 + .align 2, 0 +_0801DA44: .4byte gzHeap +_0801DA48: .4byte 0x00000FFF +_0801DA4C: + adds r4, #4 + adds r2, #1 + cmp r2, r5 + bhs _0801DA74 + ldrh r0, [r4] + cmp r0, r1 + bne _0801DA4C + lsls r1, r5, #2 + ldr r3, _0801DA78 @ =gUnk_0203553E + adds r1, r1, r3 + ldrh r0, [r1] + strh r0, [r4] + movs r2, #0 + strh r2, [r1] + adds r1, #2 + ldrh r0, [r1] + strh r0, [r4, #2] + strh r2, [r1] + subs r0, r5, #1 + strh r0, [r3, #2] +_0801DA74: + pop {r4, r5, pc} + .align 2, 0 +_0801DA78: .4byte gUnk_0203553E + .syntax divided diff --git a/asm/non_matching/common/zMalloc.inc b/asm/non_matching/common/zMalloc.inc new file mode 100644 index 00000000..742dd67c --- /dev/null +++ b/asm/non_matching/common/zMalloc.inc @@ -0,0 +1,171 @@ + .syntax unified + push {r4, r5, r6, r7, lr} + mov r7, sl + mov r6, sb + mov r5, r8 + push {r5, r6, r7} + mov ip, r0 + movs r0, #3 + add ip, r0 + subs r0, #7 + mov r1, ip + ands r1, r0 + mov ip, r1 + ldr r6, _0801D90C @ =gzHeap + mov sb, r6 + ldrh r7, [r6] + movs r5, #1 + movs r3, #0x80 + lsls r3, r3, #5 + add r3, sb + subs r4, r3, r1 + movs r2, #0 + b _0801D926 + .align 2, 0 +_0801D90C: .4byte gzHeap +_0801D910: + cmp r1, r4 + bhi _0801D918 + cmp r3, r0 + bls _0801D952 +_0801D918: + cmp r4, r1 + bhi _0801D920 + cmp r0, r3 + bls _0801D952 +_0801D920: + adds r0, r2, #1 + lsls r0, r0, #0x10 + lsrs r2, r0, #0x10 +_0801D926: + cmp r2, r7 + bhs _0801D94A + lsls r0, r2, #2 + add r0, sb + ldrh r1, [r0, #2] + ldr r6, _0801D95C @ =gzHeap + adds r1, r1, r6 + ldrh r0, [r0, #4] + adds r0, r0, r6 + cmp r1, r4 + bhi _0801D940 + cmp r4, r0 + bls _0801D952 +_0801D940: + cmp r1, r3 + bhi _0801D910 + cmp r3, r0 + bhi _0801D910 + movs r5, #0 +_0801D94A: + lsls r0, r7, #2 + mov sl, r0 + cmp r5, #0 + bne _0801D9D8 +_0801D952: + movs r1, #0 + mov r8, r1 + lsls r6, r7, #2 + mov sl, r6 + b _0801D970 + .align 2, 0 +_0801D95C: .4byte gzHeap +_0801D960: + movs r5, #0 +_0801D962: + mov r0, r8 + adds r0, #1 + lsls r0, r0, #0x10 + lsrs r0, r0, #0x10 + mov r8, r0 + cmp r8, r7 + bhs _0801D9D4 +_0801D970: + mov r1, r8 + lsls r0, r1, #2 + add r0, sb + ldrh r0, [r0, #2] + ldr r6, _0801D994 @ =gzHeap + adds r3, r0, r6 + mov r0, ip + subs r4, r3, r0 + movs r5, #0 + mov r0, sl + adds r0, #2 + add r0, sb + adds r0, #4 + cmp r4, r0 + blo _0801D962 + movs r5, #1 + movs r2, #0 + b _0801D9AE + .align 2, 0 +_0801D994: .4byte gzHeap +_0801D998: + cmp r1, r4 + bhi _0801D9A0 + cmp r3, r0 + bls _0801D960 +_0801D9A0: + cmp r4, r1 + bhi _0801D9A8 + cmp r0, r3 + bls _0801D960 +_0801D9A8: + adds r0, r2, #1 + lsls r0, r0, #0x10 + lsrs r2, r0, #0x10 +_0801D9AE: + cmp r2, r7 + bhs _0801D9D0 + lsls r0, r2, #2 + add r0, sb + ldrh r1, [r0, #2] + adds r1, r1, r6 + ldrh r0, [r0, #4] + adds r0, r0, r6 + cmp r1, r4 + bhi _0801D9C6 + cmp r4, r0 + blo _0801D960 +_0801D9C6: + cmp r1, r3 + bhs _0801D998 + cmp r3, r0 + bhi _0801D998 + movs r5, #0 +_0801D9D0: + cmp r5, #0 + beq _0801D962 +_0801D9D4: + cmp r5, #0 + beq _0801DA00 +_0801D9D8: + ldr r0, _0801D9FC @ =gUnk_02035542 + mov r1, sl + adds r2, r1, r0 + subs r3, r0, #2 + subs r1, r4, r3 + strh r1, [r2] + adds r0, #2 + add r0, sl + add r1, ip + strh r1, [r0] + adds r0, r7, #1 + strh r0, [r3] + adds r0, r4, #0 + mov r1, ip + bl MemClear + adds r0, r4, #0 + b _0801DA02 + .align 2, 0 +_0801D9FC: .4byte gUnk_02035542 +_0801DA00: + movs r0, #0 +_0801DA02: + pop {r3, r4, r5} + mov r8, r3 + mov sb, r4 + mov sl, r5 + pop {r4, r5, r6, r7, pc} + .syntax divided diff --git a/asm/non_matching/textbox/sub_08056FEC.inc b/asm/non_matching/textbox/sub_08056FEC.inc index aa1b66b2..d8cd552f 100644 --- a/asm/non_matching/textbox/sub_08056FEC.inc +++ b/asm/non_matching/textbox/sub_08056FEC.inc @@ -5,7 +5,7 @@ sub sp, #8 adds r2, r0, #0 adds r5, r1, #0 - bl sub_0801D51C + bl DecToHex adds r2, r0, #0 ldr r0, _08057040 @ =0x0FFFFFFF ands r2, r0 diff --git a/asm/object/object9.s b/asm/object/object9.s index 83e07658..2cbdec01 100644 --- a/asm/object/object9.s +++ b/asm/object/object9.s @@ -17,7 +17,7 @@ Object9: @ 0x0808386C rsbs r0, r1, #0 orrs r0, r1 lsrs r2, r0, #0x1f - ldr r0, _080838CC @ =gUnk_02022740 + ldr r0, _080838CC @ =gFuseInfo ldrb r0, [r0] cmp r0, #2 bgt _08083894 @@ -58,7 +58,7 @@ _080838B6: pop {r4, pc} .align 2, 0 _080838C8: .4byte gPlayerState -_080838CC: .4byte gUnk_02022740 +_080838CC: .4byte gFuseInfo _080838D0: .4byte gMessage _080838D4: .4byte gUnk_03003DF0 _080838D8: .4byte gUnk_0811F754 diff --git a/asm/object/objectB3.s b/asm/object/objectB3.s index 4111e371..41d6458f 100644 --- a/asm/object/objectB3.s +++ b/asm/object/objectB3.s @@ -64,7 +64,7 @@ _080A0A5E: orrs r1, r3 strb r1, [r4, #0x1b] ldr r1, _080A0ABC @ =gUnk_080C9CBC - ldr r0, _080A0AC0 @ =gUnk_02022740 + ldr r0, _080A0AC0 @ =gFuseInfo ldrb r0, [r0, #3] lsls r0, r0, #3 adds r0, r0, r1 @@ -78,7 +78,7 @@ _080A0AB0: .align 2, 0 _080A0AB8: .4byte gUnk_08124A20 _080A0ABC: .4byte gUnk_080C9CBC -_080A0AC0: .4byte gUnk_02022740 +_080A0AC0: .4byte gFuseInfo thumb_func_start sub_080A0AC4 sub_080A0AC4: @ 0x080A0AC4 diff --git a/asm/subtask.s b/asm/subtask.s index fe5e7913..d6bb7811 100644 --- a/asm/subtask.s +++ b/asm/subtask.s @@ -186,7 +186,7 @@ sub_080A3DB8: @ 0x080A3DB8 ldrb r1, [r0, #1] cmp r1, #6 bne _080A3DEE - ldr r0, _080A3DE0 @ =gUnk_02022740 + ldr r0, _080A3DE0 @ =gFuseInfo strb r1, [r0] ldrb r0, [r0, #3] lsls r0, r0, #3 @@ -200,20 +200,20 @@ sub_080A3DB8: @ 0x080A3DB8 b _080A3DF8 .align 2, 0 _080A3DDC: .4byte gMenu -_080A3DE0: .4byte gUnk_02022740 +_080A3DE0: .4byte gFuseInfo _080A3DE4: .4byte gUnk_080C9CBC _080A3DE8: bl sub_080A71DC b _080A3DF8 _080A3DEE: - ldr r1, _080A3DFC @ =gUnk_02022740 + ldr r1, _080A3DFC @ =gFuseInfo movs r0, #5 strb r0, [r1] bl sub_080A71DC _080A3DF8: pop {pc} .align 2, 0 -_080A3DFC: .4byte gUnk_02022740 +_080A3DFC: .4byte gFuseInfo thumb_func_start sub_080A3E00 sub_080A3E00: @ 0x080A3E00 @@ -267,7 +267,7 @@ sub_080A3E48: @ 0x080A3E48 lsls r0, r0, #3 adds r0, r0, r2 ldrb r1, [r0, #5] - ldr r0, _080A3E80 @ =gUnk_02022740 + ldr r0, _080A3E80 @ =gFuseInfo ldrb r0, [r0, #3] lsls r0, r0, #3 adds r0, r0, r2 @@ -283,7 +283,7 @@ sub_080A3E48: @ 0x080A3E48 .align 2, 0 _080A3E78: .4byte gUnk_080C9CBC _080A3E7C: .4byte gMenu -_080A3E80: .4byte gUnk_02022740 +_080A3E80: .4byte gFuseInfo _080A3E84: movs r2, #0 movs r0, #2 @@ -407,7 +407,7 @@ sub_080A3F68: @ 0x080A3F68 movs r0, #5 strb r0, [r5, #1] ldr r4, _080A3FB8 @ =gUnk_02002C81 - ldr r0, _080A3FBC @ =gUnk_02022740 + ldr r0, _080A3FBC @ =gFuseInfo ldrb r1, [r0, #3] adds r0, r4, #0 bl WriteBit @@ -439,7 +439,7 @@ _080A3F96: .align 2, 0 _080A3FB4: .4byte gMenu _080A3FB8: .4byte gUnk_02002C81 -_080A3FBC: .4byte gUnk_02022740 +_080A3FBC: .4byte gFuseInfo _080A3FC0: .4byte 0xFFFFFED6 _080A3FC4: .4byte 0xFFFFFED5 _080A3FC8: .4byte 0x00000702 @@ -924,14 +924,14 @@ _080A42C4: _080A42C6: ldr r0, _080A42D8 @ =gOamCmd strh r4, [r0] - ldr r0, _080A42DC @ =gUnk_02022740 + ldr r0, _080A42DC @ =gFuseInfo ldrb r0, [r0, #3] movs r1, #0 bl sub_080A42E0 pop {r4, r5, pc} .align 2, 0 _080A42D8: .4byte gOamCmd -_080A42DC: .4byte gUnk_02022740 +_080A42DC: .4byte gFuseInfo thumb_func_start sub_080A42E0 sub_080A42E0: @ 0x080A42E0 @@ -1150,7 +1150,7 @@ sub_080A4468: @ 0x080A4468 strb r1, [r0, #2] ldr r0, [r0, #4] strb r1, [r0, #3] - ldr r0, _080A448C @ =gUnk_02022740 + ldr r0, _080A448C @ =gFuseInfo ldrb r0, [r0, #3] bl sub_0801E6C8 ldr r0, _080A4490 @ =gMenu @@ -1160,7 +1160,7 @@ sub_080A4468: @ 0x080A4468 pop {pc} .align 2, 0 _080A4488: .4byte gUnk_03003DF0 -_080A448C: .4byte gUnk_02022740 +_080A448C: .4byte gFuseInfo _080A4490: .4byte gMenu thumb_func_start sub_080A4494 @@ -1181,7 +1181,7 @@ sub_080A4494: @ 0x080A4494 adds r0, r4, #0 movs r2, #0x80 bl sub_080A44E0 - ldr r0, _080A44DC @ =gUnk_02022740 + ldr r0, _080A44DC @ =gFuseInfo ldr r0, [r0, #0xc] bl sub_08002632 adds r0, r4, #0 @@ -1196,7 +1196,7 @@ _080A44D0: .align 2, 0 _080A44D4: .4byte gTextGfxBuffer _080A44D8: .4byte gUnk_02002AC0 -_080A44DC: .4byte gUnk_02022740 +_080A44DC: .4byte gFuseInfo thumb_func_start sub_080A44E0 sub_080A44E0: @ 0x080A44E0 @@ -1237,7 +1237,7 @@ _080A4524: .4byte 0x06010000 thumb_func_start sub_080A4528 sub_080A4528: @ 0x080A4528 push {r4, lr} - ldr r0, _080A4540 @ =gUnk_02022740 + ldr r0, _080A4540 @ =gFuseInfo ldr r2, [r0, #0xc] ldrb r0, [r2, #8] cmp r0, #7 @@ -1248,7 +1248,7 @@ sub_080A4528: @ 0x080A4528 bl CreateNPC b _080A4550 .align 2, 0 -_080A4540: .4byte gUnk_02022740 +_080A4540: .4byte gFuseInfo _080A4544: cmp r0, #3 bne _080A45A2 diff --git a/asm/subtask2.s b/asm/subtask2.s index e62c568e..ceadbd8e 100644 --- a/asm/subtask2.s +++ b/asm/subtask2.s @@ -1258,13 +1258,13 @@ _080A5CFA: sub_080A5CFC: @ 0x080A5CFC push {r4, lr} adds r4, r0, #0 - bl sub_0801DDA0 + bl DrawDungeonFeatures bl LoadDungeonMap ldr r1, _080A5D18 @ =gUnk_02019EE0 movs r2, #0x80 lsls r2, r2, #3 adds r0, r4, #0 - bl sub_0801DBA0 + bl DrawDungeonMap pop {r4, pc} .align 2, 0 _080A5D18: .4byte gUnk_02019EE0 @@ -3818,7 +3818,7 @@ sub_080A6B04: @ 0x080A6B04 bl sub_080A4D34 movs r0, #6 bl sub_080A4DB8 - ldr r0, _080A6BF0 @ =gUnk_02022740 + ldr r0, _080A6BF0 @ =gFuseInfo ldrb r2, [r0, #3] lsls r2, r2, #3 ldr r0, _080A6BF4 @ =gUnk_080C9CBC @@ -3925,7 +3925,7 @@ _080A6BD4: mov r8, r3 pop {r4, r5, r6, r7, pc} .align 2, 0 -_080A6BF0: .4byte gUnk_02022740 +_080A6BF0: .4byte gFuseInfo _080A6BF4: .4byte gUnk_080C9CBC _080A6BF8: .4byte gUnk_080FE320 _080A6BFC: .4byte gMenu diff --git a/asm/utils.s b/asm/utils.s deleted file mode 100644 index d3ffd9a8..00000000 --- a/asm/utils.s +++ /dev/null @@ -1,2677 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_0801D898 -sub_0801D898: @ 0x0801D898 - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - adds r4, r1, #0 - adds r6, r2, #0 - movs r0, #0x80 - lsls r0, r0, #8 - ands r0, r3 - movs r1, #0x20 - mov ip, r1 - cmp r0, #0 - beq _0801D8B2 - movs r0, #0x40 - mov ip, r0 -_0801D8B2: - ldr r0, _0801D8D8 @ =0x00007FFF - ands r3, r0 - ldr r1, _0801D8DC @ =0x040000D4 - movs r2, #0x80 - lsls r2, r2, #0x18 - orrs r2, r6 - lsls r7, r6, #1 - mov r0, ip - lsls r6, r0, #1 -_0801D8C4: - str r4, [r1] - str r5, [r1, #4] - str r2, [r1, #8] - ldr r0, [r1, #8] - adds r4, r4, r7 - adds r5, r5, r6 - subs r3, #1 - cmp r3, #0 - bne _0801D8C4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0801D8D8: .4byte 0x00007FFF -_0801D8DC: .4byte 0x040000D4 - - thumb_func_start zMalloc -zMalloc: @ 0x0801D8E0 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - mov ip, r0 - movs r0, #3 - add ip, r0 - subs r0, #7 - mov r1, ip - ands r1, r0 - mov ip, r1 - ldr r6, _0801D90C @ =gzHeap - mov sb, r6 - ldrh r7, [r6] - movs r5, #1 - movs r3, #0x80 - lsls r3, r3, #5 - add r3, sb - subs r4, r3, r1 - movs r2, #0 - b _0801D926 - .align 2, 0 -_0801D90C: .4byte gzHeap -_0801D910: - cmp r1, r4 - bhi _0801D918 - cmp r3, r0 - bls _0801D952 -_0801D918: - cmp r4, r1 - bhi _0801D920 - cmp r0, r3 - bls _0801D952 -_0801D920: - adds r0, r2, #1 - lsls r0, r0, #0x10 - lsrs r2, r0, #0x10 -_0801D926: - cmp r2, r7 - bhs _0801D94A - lsls r0, r2, #2 - add r0, sb - ldrh r1, [r0, #2] - ldr r6, _0801D95C @ =gzHeap - adds r1, r1, r6 - ldrh r0, [r0, #4] - adds r0, r0, r6 - cmp r1, r4 - bhi _0801D940 - cmp r4, r0 - bls _0801D952 -_0801D940: - cmp r1, r3 - bhi _0801D910 - cmp r3, r0 - bhi _0801D910 - movs r5, #0 -_0801D94A: - lsls r0, r7, #2 - mov sl, r0 - cmp r5, #0 - bne _0801D9D8 -_0801D952: - movs r1, #0 - mov r8, r1 - lsls r6, r7, #2 - mov sl, r6 - b _0801D970 - .align 2, 0 -_0801D95C: .4byte gzHeap -_0801D960: - movs r5, #0 -_0801D962: - mov r0, r8 - adds r0, #1 - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - mov r8, r0 - cmp r8, r7 - bhs _0801D9D4 -_0801D970: - mov r1, r8 - lsls r0, r1, #2 - add r0, sb - ldrh r0, [r0, #2] - ldr r6, _0801D994 @ =gzHeap - adds r3, r0, r6 - mov r0, ip - subs r4, r3, r0 - movs r5, #0 - mov r0, sl - adds r0, #2 - add r0, sb - adds r0, #4 - cmp r4, r0 - blo _0801D962 - movs r5, #1 - movs r2, #0 - b _0801D9AE - .align 2, 0 -_0801D994: .4byte gzHeap -_0801D998: - cmp r1, r4 - bhi _0801D9A0 - cmp r3, r0 - bls _0801D960 -_0801D9A0: - cmp r4, r1 - bhi _0801D9A8 - cmp r0, r3 - bls _0801D960 -_0801D9A8: - adds r0, r2, #1 - lsls r0, r0, #0x10 - lsrs r2, r0, #0x10 -_0801D9AE: - cmp r2, r7 - bhs _0801D9D0 - lsls r0, r2, #2 - add r0, sb - ldrh r1, [r0, #2] - adds r1, r1, r6 - ldrh r0, [r0, #4] - adds r0, r0, r6 - cmp r1, r4 - bhi _0801D9C6 - cmp r4, r0 - blo _0801D960 -_0801D9C6: - cmp r1, r3 - bhs _0801D998 - cmp r3, r0 - bhi _0801D998 - movs r5, #0 -_0801D9D0: - cmp r5, #0 - beq _0801D962 -_0801D9D4: - cmp r5, #0 - beq _0801DA00 -_0801D9D8: - ldr r0, _0801D9FC @ =gUnk_02035542 - mov r1, sl - adds r2, r1, r0 - subs r3, r0, #2 - subs r1, r4, r3 - strh r1, [r2] - adds r0, #2 - add r0, sl - add r1, ip - strh r1, [r0] - adds r0, r7, #1 - strh r0, [r3] - adds r0, r4, #0 - mov r1, ip - bl MemClear - adds r0, r4, #0 - b _0801DA02 - .align 2, 0 -_0801D9FC: .4byte gUnk_02035542 -_0801DA00: - movs r0, #0 -_0801DA02: - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - - thumb_func_start zFree -zFree: @ 0x0801DA0C - push {r4, r5, lr} - ldr r3, _0801DA44 @ =gzHeap - subs r1, r0, r3 - ldr r0, _0801DA48 @ =0x00000FFF - cmp r1, r0 - bhi _0801DA74 - adds r4, r3, #0 - ldrh r5, [r4] - adds r4, #2 - movs r2, #0 - cmp r2, r5 - bhs _0801DA74 - ldrh r0, [r4] - cmp r0, r1 - bne _0801DA4C - lsls r0, r5, #2 - subs r1, r3, #2 - adds r0, r0, r1 - ldrh r1, [r0] - strh r1, [r4] - strh r2, [r0] - adds r0, #2 - ldrh r1, [r0] - strh r1, [r4, #2] - strh r2, [r0] - subs r0, r5, #1 - strh r0, [r3] - b _0801DA74 - .align 2, 0 -_0801DA44: .4byte gzHeap -_0801DA48: .4byte 0x00000FFF -_0801DA4C: - adds r4, #4 - adds r2, #1 - cmp r2, r5 - bhs _0801DA74 - ldrh r0, [r4] - cmp r0, r1 - bne _0801DA4C - lsls r1, r5, #2 - ldr r3, _0801DA78 @ =gUnk_0203553E - adds r1, r1, r3 - ldrh r0, [r1] - strh r0, [r4] - movs r2, #0 - strh r2, [r1] - adds r1, #2 - ldrh r0, [r1] - strh r0, [r4, #2] - strh r2, [r1] - subs r0, r5, #1 - strh r0, [r3, #2] -_0801DA74: - pop {r4, r5, pc} - .align 2, 0 -_0801DA78: .4byte gUnk_0203553E - - thumb_func_start zMallocInit -zMallocInit: @ 0x0801DA7C - push {lr} - ldr r0, _0801DA8C @ =gzHeap - movs r1, #0x80 - lsls r1, r1, #5 - bl MemClear - pop {pc} - .align 2, 0 -_0801DA8C: .4byte gzHeap - - thumb_func_start DispReset -DispReset: @ 0x0801DA90 - push {r4, r5, lr} - adds r4, r0, #0 - ldr r1, _0801DAEC @ =gMain - ldrb r0, [r1] - movs r3, #0 - movs r0, #1 - strb r0, [r1] - ldr r0, _0801DAF0 @ =gUnk_03003DE0 - strb r3, [r0] - ldr r0, _0801DAF4 @ =gFadeControl - strb r3, [r0] - ldr r5, _0801DAF8 @ =gScreen - adds r0, r5, #0 - adds r0, #0x6d - strb r3, [r0] - subs r0, #1 - strb r3, [r0] - ldr r1, _0801DAFC @ =0x040000B0 - ldrh r2, [r1, #0xa] - ldr r0, _0801DB00 @ =0x0000C5FF - ands r0, r2 - strh r0, [r1, #0xa] - ldrh r2, [r1, #0xa] - ldr r0, _0801DB04 @ =0x00007FFF - ands r0, r2 - strh r0, [r1, #0xa] - ldrh r0, [r1, #0xa] - movs r0, #0x80 - lsls r0, r0, #0x13 - strh r3, [r0] - bl ClearOAM - bl sub_0801DB34 - ldr r0, _0801DB08 @ =0x0600C000 - movs r1, #0x20 - bl MemClear - ldr r0, _0801DB0C @ =gBG0Buffer - movs r1, #0x80 - lsls r1, r1, #4 - bl MemClear - strh r4, [r5, #0xe] - pop {r4, r5, pc} - .align 2, 0 -_0801DAEC: .4byte gMain -_0801DAF0: .4byte gUnk_03003DE0 -_0801DAF4: .4byte gFadeControl -_0801DAF8: .4byte gScreen -_0801DAFC: .4byte 0x040000B0 -_0801DB00: .4byte 0x0000C5FF -_0801DB04: .4byte 0x00007FFF -_0801DB08: .4byte 0x0600C000 -_0801DB0C: .4byte gBG0Buffer - - thumb_func_start ClearOAM -ClearOAM: @ 0x0801DB10 - push {r4, lr} - ldr r3, _0801DB30 @ =gUnk_03000020 - movs r1, #0xe0 - lsls r1, r1, #0x13 - movs r0, #0x80 - movs r4, #0xa8 - lsls r4, r4, #2 - adds r2, r4, #0 -_0801DB20: - strh r2, [r3] - adds r3, #8 - strh r2, [r1] - adds r1, #8 - subs r0, #1 - cmp r0, #0 - bne _0801DB20 - pop {r4, pc} - .align 2, 0 -_0801DB30: .4byte gUnk_03000020 - - thumb_func_start sub_0801DB34 -sub_0801DB34: @ 0x0801DB34 - push {r4, lr} - ldr r4, _0801DB6C @ =gScreen - adds r0, r4, #0 - movs r1, #0x7c - bl MemClear - ldr r0, _0801DB70 @ =gBG0Buffer - str r0, [r4, #0x10] - ldr r0, _0801DB74 @ =0x00001F0C - strh r0, [r4, #8] - ldr r0, _0801DB78 @ =gBG1Buffer - str r0, [r4, #0x1c] - ldr r0, _0801DB7C @ =0x00001C01 - strh r0, [r4, #0x14] - ldr r0, _0801DB80 @ =gBG2Buffer - str r0, [r4, #0x28] - ldr r0, _0801DB84 @ =0x00001D02 - strh r0, [r4, #0x20] - ldr r0, _0801DB88 @ =gBG3Buffer - str r0, [r4, #0x34] - ldr r0, _0801DB8C @ =0x00001E03 - strh r0, [r4, #0x2c] - movs r0, #0xa0 - lsls r0, r0, #1 - strh r0, [r4] - ldr r0, _0801DB90 @ =0x0000FFFF - strh r0, [r4, #6] - pop {r4, pc} - .align 2, 0 -_0801DB6C: .4byte gScreen -_0801DB70: .4byte gBG0Buffer -_0801DB74: .4byte 0x00001F0C -_0801DB78: .4byte gBG1Buffer -_0801DB7C: .4byte 0x00001C01 -_0801DB80: .4byte gBG2Buffer -_0801DB84: .4byte 0x00001D02 -_0801DB88: .4byte gBG3Buffer -_0801DB8C: .4byte 0x00001E03 -_0801DB90: .4byte 0x0000FFFF - - thumb_func_start sub_0801DB94 -sub_0801DB94: @ 0x0801DB94 - ldr r0, _0801DB9C @ =gScreenTransition - ldrh r0, [r0, #0x1e] - lsrs r0, r0, #0xb - bx lr - .align 2, 0 -_0801DB9C: .4byte gScreenTransition - - thumb_func_start sub_0801DBA0 -sub_0801DBA0: @ 0x0801DBA0 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - sub sp, #4 - adds r4, r0, #0 - adds r5, r1, #0 - adds r1, r2, #0 - adds r0, r5, #0 - bl MemClear - movs r0, #1 - strb r0, [r5] - ldr r2, _0801DBE4 @ =gScreenTransition - ldrh r0, [r2, #0x1c] - lsrs r0, r0, #4 - movs r1, #0x7f - ands r0, r1 - strb r0, [r5, #1] - ldrh r0, [r2, #0x1e] - lsrs r0, r0, #4 - ands r0, r1 - strb r0, [r5, #2] - adds r5, #3 - ldr r1, _0801DBE8 @ =gUnk_080C9C50 - ldr r0, _0801DBEC @ =gArea - ldrb r0, [r0, #3] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - lsls r4, r4, #2 - adds r4, r4, r0 - ldr r6, [r4] - b _0801DD3A - .align 2, 0 -_0801DBE4: .4byte gScreenTransition -_0801DBE8: .4byte gUnk_080C9C50 -_0801DBEC: .4byte gArea -_0801DBF0: - ldrb r0, [r6] - ldrb r1, [r6, #1] - movs r2, #3 - bl GetRoomProperty - adds r4, r0, #0 - cmp r4, #0 - bne _0801DC04 - adds r6, #8 - b _0801DD3A -_0801DC04: - adds r0, r6, #0 - bl sub_0801DF10 - mov r8, r0 - bl HasDungeonBigKey - movs r1, #8 - adds r1, r1, r6 - mov sb, r1 - cmp r0, #0 - beq _0801DCAE - ldrb r0, [r4] - cmp r0, #0 - beq _0801DCAE - movs r3, #0xfc - lsls r3, r3, #2 - ldr r7, _0801DC84 @ =0x000007FF -_0801DC26: - ldrb r0, [r4] - cmp r0, #3 - bgt _0801DCA6 - cmp r0, #2 - blt _0801DCA6 - ldrb r1, [r4, #1] - mov r0, r8 - str r3, [sp] - bl CheckLocalFlagByBank - ldr r3, [sp] - cmp r0, #0 - bne _0801DCA6 - ldr r0, _0801DC88 @ =gAreaRoomHeaders - ldrb r2, [r6] - lsls r2, r2, #2 - adds r2, r2, r0 - ldrb r1, [r6, #1] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #1 - ldr r1, [r2] - adds r2, r1, r0 - movs r0, #2 - strb r0, [r5] - ldrb r0, [r4] - cmp r0, #2 - bne _0801DC8C - ldrh r0, [r4, #4] - lsls r0, r0, #4 - ands r0, r3 - movs r1, #8 - orrs r0, r1 - ldrh r1, [r2] - ands r1, r7 - adds r0, r0, r1 - asrs r0, r0, #4 - strb r0, [r5, #1] - ldrh r0, [r4, #4] - lsrs r0, r0, #2 - ands r0, r3 - movs r1, #8 - orrs r0, r1 - ldrh r1, [r2, #2] - ands r1, r7 - b _0801DC9E - .align 2, 0 -_0801DC84: .4byte 0x000007FF -_0801DC88: .4byte gAreaRoomHeaders -_0801DC8C: - ldrh r0, [r2] - ands r0, r7 - ldrh r1, [r4, #4] - adds r0, r0, r1 - asrs r0, r0, #4 - strb r0, [r5, #1] - ldrh r0, [r2, #2] - ands r0, r7 - ldrh r1, [r4, #6] -_0801DC9E: - adds r0, r0, r1 - asrs r0, r0, #4 - strb r0, [r5, #2] - adds r5, #3 -_0801DCA6: - adds r4, #8 - ldrb r0, [r4] - cmp r0, #0 - bne _0801DC26 -_0801DCAE: - bl HasDungeonBigKey - cmp r0, #0 - beq _0801DD16 - ldrb r1, [r6, #2] - movs r0, #2 - ands r0, r1 - cmp r0, #0 - beq _0801DD16 - ldr r0, _0801DD4C @ =gArea - ldrb r0, [r0, #3] - adds r0, #1 - bl CheckGlobalFlag - cmp r0, #0 - bne _0801DD16 - ldr r0, _0801DD50 @ =gAreaRoomHeaders - ldrb r2, [r6] - lsls r2, r2, #2 - adds r2, r2, r0 - ldrb r1, [r6, #1] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #1 - ldr r1, [r2] - adds r2, r1, r0 - movs r0, #4 - strb r0, [r5] - ldrh r0, [r2, #4] - lsrs r0, r0, #1 - ldrh r1, [r2] - adds r0, r0, r1 - asrs r1, r0, #4 - adds r0, r1, #0 - cmp r1, #0 - bge _0801DCF8 - adds r0, #0x7f -_0801DCF8: - asrs r0, r0, #7 - lsls r0, r0, #7 - subs r0, r1, r0 - strb r0, [r5, #1] - ldrh r0, [r2, #6] - lsrs r0, r0, #1 - ldrh r2, [r2, #2] - adds r0, r0, r2 - asrs r1, r0, #4 - adds r0, r1, #0 - asrs r0, r0, #7 - lsls r0, r0, #7 - subs r0, r1, r0 - strb r0, [r5, #2] - adds r5, #3 -_0801DD16: - ldr r2, _0801DD54 @ =gScreenTransition - ldrh r0, [r6] - ldrh r1, [r2, #0x16] - cmp r0, r1 - bne _0801DD38 - movs r0, #3 - strb r0, [r5] - ldrh r0, [r2, #0x18] - lsrs r0, r0, #4 - movs r1, #0x7f - ands r0, r1 - strb r0, [r5, #1] - ldrh r0, [r2, #0x1a] - lsrs r0, r0, #4 - ands r0, r1 - strb r0, [r5, #2] - adds r5, #3 -_0801DD38: - mov r6, sb -_0801DD3A: - ldrb r0, [r6] - cmp r0, #0 - beq _0801DD42 - b _0801DBF0 -_0801DD42: - add sp, #4 - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0801DD4C: .4byte gArea -_0801DD50: .4byte gAreaRoomHeaders -_0801DD54: .4byte gScreenTransition - - thumb_func_start sub_0801DD58 -sub_0801DD58: @ 0x0801DD58 - ldr r2, _0801DD7C @ =gAreaRoomHeaders - lsls r0, r0, #2 - adds r0, r0, r2 - lsls r2, r1, #2 - adds r2, r2, r1 - lsls r2, r2, #1 - ldr r3, [r0] - adds r3, r3, r2 - ldr r0, _0801DD80 @ =gArea - ldr r1, _0801DD84 @ =0x0000085C - adds r0, r0, r1 - ldr r2, [r0] - ldrh r1, [r3] - strh r1, [r2, #4] - ldr r1, [r0] - ldrh r0, [r3, #2] - strh r0, [r1, #6] - bx lr - .align 2, 0 -_0801DD7C: .4byte gAreaRoomHeaders -_0801DD80: .4byte gArea -_0801DD84: .4byte 0x0000085C - - thumb_func_start LoadDungeonMap -LoadDungeonMap: @ 0x0801DD88 - push {lr} - ldr r0, _0801DD98 @ =gUnk_0201AEE0 - ldr r1, _0801DD9C @ =0x06006000 - movs r2, #0x80 - lsls r2, r2, #6 - bl LoadResourceAsync - pop {pc} - .align 2, 0 -_0801DD98: .4byte gUnk_0201AEE0 -_0801DD9C: .4byte 0x06006000 - - thumb_func_start sub_0801DDA0 -sub_0801DDA0: @ 0x0801DDA0 - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #0x14 - adds r4, r0, #0 - bl CheckHasMap - cmp r0, #0 - bne _0801DDB8 - b _0801DEEA -_0801DDB8: - ldr r1, _0801DDD8 @ =gUnk_080C9C50 - ldr r0, _0801DDDC @ =gArea - ldrb r0, [r0, #3] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r1, [r0] - lsls r0, r4, #2 - adds r0, r0, r1 - ldr r4, [r0] - ldr r0, _0801DDE0 @ =gUnk_02019EE0 - movs r1, #0x80 - lsls r1, r1, #8 - bl MemClear - b _0801DEE2 - .align 2, 0 -_0801DDD8: .4byte gUnk_080C9C50 -_0801DDDC: .4byte gArea -_0801DDE0: .4byte gUnk_02019EE0 -_0801DDE4: - ldrb r0, [r4] - ldrb r1, [r4, #1] - movs r2, #3 - bl GetRoomProperty - adds r6, r0, #0 - adds r0, r4, #0 - bl sub_0801DF10 - adds r5, r0, #0 - movs r0, #0 - str r0, [sp, #0xc] - ldrh r2, [r4] - ldr r0, _0801DE14 @ =gUnk_02032EC0 - ldrh r3, [r0, #0x20] - ldr r1, _0801DE18 @ =0x0000FFFF - ands r1, r2 - ldr r0, _0801DE18 @ =0x0000FFFF - ands r0, r3 - cmp r1, r0 - bne _0801DE1C - movs r3, #8 - b _0801DE36 - .align 2, 0 -_0801DE14: .4byte gUnk_02032EC0 -_0801DE18: .4byte 0x0000FFFF -_0801DE1C: - bl HasDungeonSmallKey - cmp r0, #0 - beq _0801DE28 - movs r0, #2 - str r0, [sp, #0xc] -_0801DE28: - adds r0, r6, #0 - adds r1, r5, #0 - bl sub_0801DF90 - cmp r0, #0 - beq _0801DE38 - movs r3, #3 -_0801DE36: - str r3, [sp, #0xc] -_0801DE38: - ldrb r1, [r4, #2] - movs r0, #1 - ands r0, r1 - cmp r0, #0 - beq _0801DE46 - movs r0, #0 - str r0, [sp, #0xc] -_0801DE46: - adds r3, r4, #0 - adds r3, #8 - str r3, [sp, #0x10] - ldr r0, [sp, #0xc] - cmp r0, #0 - beq _0801DEE0 - ldr r2, _0801DEF8 @ =0x040000D4 - ldr r0, [r4, #4] - ldr r1, _0801DEFC @ =gMapData - adds r0, r0, r1 - str r0, [r2] - ldr r0, _0801DF00 @ =gUnk_02019EE0 - str r0, [r2, #4] - ldr r0, _0801DF04 @ =0x84000100 - str r0, [r2, #8] - ldr r0, [r2, #8] - ldr r0, _0801DF08 @ =gAreaRoomHeaders - ldrb r2, [r4] - lsls r2, r2, #2 - adds r2, r2, r0 - ldrb r1, [r4, #1] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #1 - ldr r2, [r2] - adds r2, r2, r0 - ldrh r0, [r2] - lsrs r0, r0, #4 - str r0, [sp] - ldrh r0, [r2, #2] - ldr r1, _0801DF0C @ =0x000007FF - ands r0, r1 - lsrs r0, r0, #4 - str r0, [sp, #4] - ldrh r0, [r2, #4] - lsrs r7, r0, #4 - ldrh r0, [r2, #6] - lsrs r0, r0, #4 - mov sl, r0 - adds r0, r7, #3 - lsrs r0, r0, #2 - str r0, [sp, #8] - movs r6, #0 - cmp r6, sl - bhs _0801DEE0 -_0801DEA0: - ldr r3, [sp, #8] - adds r1, r6, #0 - muls r1, r3, r1 - ldr r0, _0801DF00 @ =gUnk_02019EE0 - adds r1, r1, r0 - mov r8, r1 - movs r5, #0 - adds r0, r6, #1 - mov sb, r0 - cmp r5, r7 - bhs _0801DEDA -_0801DEB6: - ldr r3, [sp] - adds r4, r3, r5 - adds r0, r5, #0 - mov r1, r8 - bl sub_0801DF60 - ldr r1, [sp, #0xc] - bl sub_0801DF78 - adds r2, r0, #0 - adds r0, r4, #0 - ldr r3, [sp, #4] - adds r1, r3, r6 - bl sub_0801DF28 - adds r5, #1 - cmp r5, r7 - blo _0801DEB6 -_0801DEDA: - mov r6, sb - cmp r6, sl - blo _0801DEA0 -_0801DEE0: - ldr r4, [sp, #0x10] -_0801DEE2: - ldrb r0, [r4] - cmp r0, #0 - beq _0801DEEA - b _0801DDE4 -_0801DEEA: - add sp, #0x14 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0801DEF8: .4byte 0x040000D4 -_0801DEFC: .4byte gMapData -_0801DF00: .4byte gUnk_02019EE0 -_0801DF04: .4byte 0x84000100 -_0801DF08: .4byte gAreaRoomHeaders -_0801DF0C: .4byte 0x000007FF - - thumb_func_start sub_0801DF10 -sub_0801DF10: @ 0x0801DF10 - push {lr} - adds r1, r0, #0 - ldrb r0, [r1, #3] - cmp r0, #1 - bne _0801DF20 - movs r0, #0xc0 - lsls r0, r0, #2 - b _0801DF26 -_0801DF20: - ldrb r0, [r1] - bl GetFlagBankOffset -_0801DF26: - pop {pc} - - thumb_func_start sub_0801DF28 -sub_0801DF28: @ 0x0801DF28 - push {r4, lr} - lsrs r4, r1, #3 - lsls r4, r4, #4 - lsrs r3, r0, #3 - adds r4, r4, r3 - lsls r4, r4, #5 - ldr r3, _0801DF58 @ =gUnk_0201AEE0 - adds r4, r4, r3 - movs r3, #7 - ands r1, r3 - lsls r1, r1, #2 - adds r4, r4, r1 - ands r0, r3 - lsls r0, r0, #2 - lsls r2, r0 - ldr r1, _0801DF5C @ =gUnk_080C9460 - adds r0, r0, r1 - ldr r1, [r4] - ldr r0, [r0] - ands r1, r0 - orrs r1, r2 - str r1, [r4] - pop {r4, pc} - .align 2, 0 -_0801DF58: .4byte gUnk_0201AEE0 -_0801DF5C: .4byte gUnk_080C9460 - - thumb_func_start sub_0801DF60 -sub_0801DF60: @ 0x0801DF60 - adds r3, r0, #0 - lsrs r0, r3, #2 - adds r0, r0, r1 - ldrb r0, [r0] - movs r2, #3 - adds r1, r2, #0 - bics r1, r3 - lsls r1, r1, #1 - asrs r0, r1 - ands r0, r2 - bx lr - .align 2, 0 - - thumb_func_start sub_0801DF78 -sub_0801DF78: @ 0x0801DF78 - push {lr} - cmp r0, #2 - beq _0801DF88 - cmp r0, #2 - blo _0801DF8E - cmp r0, #3 - beq _0801DF8C - b _0801DF8E -_0801DF88: - adds r0, r1, #0 - b _0801DF8E -_0801DF8C: - movs r0, #7 -_0801DF8E: - pop {pc} - - thumb_func_start sub_0801DF90 -sub_0801DF90: @ 0x0801DF90 - push {lr} - adds r2, r1, #0 - cmp r0, #0 - bne _0801DFAA - b _0801DFB0 -_0801DF9A: - ldrb r1, [r0, #1] - adds r0, r2, #0 - bl CheckLocalFlagByBank - b _0801DFB2 -_0801DFA4: - cmp r1, #1 - beq _0801DF9A - adds r0, #8 -_0801DFAA: - ldrb r1, [r0] - cmp r1, #0 - bne _0801DFA4 -_0801DFB0: - movs r0, #0 -_0801DFB2: - pop {pc} - - thumb_func_start sub_0801DFB4 -sub_0801DFB4: @ 0x0801DFB4 - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - mov r8, r0 - adds r4, r1, #0 - adds r5, r2, #0 - adds r6, r3, #0 - ldr r7, _0801E004 @ =gUnk_02022740 - adds r0, r7, #0 - movs r1, #0x10 - bl MemClear - strh r4, [r7, #6] - strh r5, [r7, #8] - strh r6, [r7, #0xa] - mov r0, r8 - str r0, [r7, #0xc] - ldr r0, _0801E008 @ =gUnk_03003DF0 - ldrb r0, [r0, #2] - strb r0, [r7, #3] - mov r1, r8 - cmp r1, #0 - beq _0801DFF8 - ldrb r1, [r1, #0x11] - lsls r0, r1, #0x1c - lsrs r0, r0, #0x1c - strb r0, [r7, #4] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r1 - movs r1, #2 - orrs r0, r1 - mov r1, r8 - strb r0, [r1, #0x11] -_0801DFF8: - movs r0, #0 - strb r0, [r7] - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0801E004: .4byte gUnk_02022740 -_0801E008: .4byte gUnk_03003DF0 - - thumb_func_start sub_0801E00C -sub_0801E00C: @ 0x0801E00C - push {r4, lr} - ldr r1, _0801E024 @ =gUnk_080C9CAC - ldr r4, _0801E028 @ =gUnk_02022740 - ldrb r0, [r4, #1] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - ldrb r0, [r4] - pop {r4, pc} - .align 2, 0 -_0801E024: .4byte gUnk_080C9CAC -_0801E028: .4byte gUnk_02022740 - - thumb_func_start sub_0801E02C -sub_0801E02C: @ 0x0801E02C - push {r4, lr} - ldr r4, _0801E040 @ =gUnk_02022740 - ldrh r0, [r4, #6] - bl sub_0801E0E0 - movs r0, #3 - strb r0, [r4] - movs r0, #1 - strb r0, [r4, #1] - pop {r4, pc} - .align 2, 0 -_0801E040: .4byte gUnk_02022740 - - thumb_func_start sub_0801E044 -sub_0801E044: @ 0x0801E044 - push {lr} - ldr r0, _0801E06C @ =gMessage - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - bne _0801E06A - movs r0, #4 - movs r1, #0 - bl MenuFadeIn - ldr r0, _0801E070 @ =gUnk_02022740 - movs r1, #4 - strb r1, [r0] - movs r1, #2 - strb r1, [r0, #1] - movs r0, #0x6b - bl SoundReq -_0801E06A: - pop {pc} - .align 2, 0 -_0801E06C: .4byte gMessage -_0801E070: .4byte gUnk_02022740 - - thumb_func_start sub_0801E074 -sub_0801E074: @ 0x0801E074 - push {lr} - ldr r0, _0801E084 @ =gUnk_02022740 - ldrb r1, [r0] - cmp r1, #5 - beq _0801E088 - cmp r1, #6 - beq _0801E08C - b _0801E098 - .align 2, 0 -_0801E084: .4byte gUnk_02022740 -_0801E088: - ldrh r0, [r0, #8] - b _0801E08E -_0801E08C: - ldrh r0, [r0, #0xa] -_0801E08E: - bl sub_0801E0E0 - ldr r1, _0801E09C @ =gUnk_02022740 - movs r0, #3 - strb r0, [r1, #1] -_0801E098: - pop {pc} - .align 2, 0 -_0801E09C: .4byte gUnk_02022740 - - thumb_func_start sub_0801E0A0 -sub_0801E0A0: @ 0x0801E0A0 - push {r4, lr} - ldr r0, _0801E0D8 @ =gMessage - ldrb r1, [r0] - movs r0, #0x7f - ands r0, r1 - cmp r0, #0 - bne _0801E0D4 - ldr r4, _0801E0DC @ =gUnk_02022740 - ldr r3, [r4, #0xc] - cmp r3, #0 - beq _0801E0C8 - ldrb r0, [r4, #4] - movs r1, #0xf - ands r1, r0 - ldrb r2, [r3, #0x11] - movs r0, #0x10 - rsbs r0, r0, #0 - ands r0, r2 - orrs r0, r1 - strb r0, [r3, #0x11] -_0801E0C8: - ldrb r0, [r4] - movs r1, #1 - cmp r0, #6 - bne _0801E0D2 - movs r1, #2 -_0801E0D2: - strb r1, [r4] -_0801E0D4: - pop {r4, pc} - .align 2, 0 -_0801E0D8: .4byte gMessage -_0801E0DC: .4byte gUnk_02022740 - - thumb_func_start sub_0801E0E0 -sub_0801E0E0: @ 0x0801E0E0 - push {lr} - adds r2, r0, #0 - cmp r2, #0 - beq _0801E102 - ldr r0, _0801E0F8 @ =gUnk_02022740 - ldr r1, [r0, #0xc] - cmp r1, #0 - beq _0801E0FC - adds r0, r2, #0 - bl MessageNoOverlap - b _0801E102 - .align 2, 0 -_0801E0F8: .4byte gUnk_02022740 -_0801E0FC: - adds r0, r2, #0 - bl MessageFromTarget -_0801E102: - pop {pc} - - thumb_func_start sub_0801E104 -sub_0801E104: @ 0x0801E104 - ldr r1, _0801E118 @ =gScreen - ldrh r2, [r1] - ldr r0, _0801E11C @ =0x00009FFF - ands r0, r2 - movs r2, #0 - strh r0, [r1] - adds r1, #0x6c - strb r2, [r1] - bx lr - .align 2, 0 -_0801E118: .4byte gScreen -_0801E11C: .4byte 0x00009FFF - - thumb_func_start sub_0801E120 -sub_0801E120: @ 0x0801E120 - ldr r3, _0801E14C @ =gScreen - ldrh r1, [r3] - movs r2, #0x80 - lsls r2, r2, #6 - adds r0, r2, #0 - movs r2, #0 - orrs r0, r1 - strh r0, [r3] - adds r1, r3, #0 - adds r1, #0x60 - ldr r0, _0801E150 @ =0x00003F37 - strh r0, [r1] - adds r1, #2 - movs r0, #0x3f - strh r0, [r1] - adds r0, r3, #0 - adds r0, #0x58 - strh r2, [r0] - subs r1, #6 - movs r0, #0xa0 - strh r0, [r1] - bx lr - .align 2, 0 -_0801E14C: .4byte gScreen -_0801E150: .4byte 0x00003F37 - - thumb_func_start sub_0801E154 -sub_0801E154: @ 0x0801E154 - push {lr} - movs r1, #0 - bl sub_0801E24C - pop {pc} - .align 2, 0 - - thumb_func_start sub_0801E160 -sub_0801E160: @ 0x0801E160 - push {r4, r5, r6, lr} - mov r6, sb - mov r5, r8 - push {r5, r6} - adds r6, r0, #0 - mov r8, r1 - mov sb, r2 - ldr r5, _0801E1A8 @ =gUnk_03003DE4 - ldrb r1, [r5] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #9 - ldr r4, _0801E1AC @ =gUnk_02017AA0 - adds r0, r0, r4 - movs r1, #0xa0 - lsls r1, r1, #4 - bl MemClear - adds r0, r6, #0 - mov r1, r8 - mov r2, sb - bl sub_0801E290 - ldrb r1, [r5] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #9 - adds r0, r0, r4 - ldr r1, _0801E1B0 @ =0x04000040 - ldr r2, _0801E1B4 @ =0xA2600001 - bl sub_0805622C - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, pc} - .align 2, 0 -_0801E1A8: .4byte gUnk_03003DE4 -_0801E1AC: .4byte gUnk_02017AA0 -_0801E1B0: .4byte 0x04000040 -_0801E1B4: .4byte 0xA2600001 - - thumb_func_start sub_0801E1B8 -sub_0801E1B8: @ 0x0801E1B8 - push {r4, lr} - ldr r2, _0801E1E8 @ =gScreen - mov ip, r2 - ldrh r3, [r2] - movs r4, #0x80 - lsls r4, r4, #6 - adds r2, r4, #0 - movs r4, #0 - orrs r2, r3 - mov r3, ip - strh r2, [r3] - mov r2, ip - adds r2, #0x60 - strh r0, [r2] - mov r0, ip - adds r0, #0x62 - strh r1, [r0] - subs r0, #0xa - strh r4, [r0] - mov r1, ip - adds r1, #0x5c - movs r0, #0xa0 - strh r0, [r1] - pop {r4, pc} - .align 2, 0 -_0801E1E8: .4byte gScreen - - thumb_func_start sub_0801E1EC -sub_0801E1EC: @ 0x0801E1EC - push {r4, r5, r6, lr} - mov r6, sb - mov r5, r8 - push {r5, r6} - mov r8, r0 - mov sb, r1 - adds r4, r2, #0 - ldr r6, _0801E23C @ =gUnk_03003DE4 - ldrb r1, [r6] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #9 - ldr r5, _0801E240 @ =gUnk_02017AA0 - adds r0, r0, r5 - movs r1, #0xa0 - lsls r1, r1, #4 - bl MemClear - adds r0, r4, #0 - movs r1, #0 - bl sub_0801E24C - mov r0, r8 - mov r1, sb - adds r2, r4, #0 - bl sub_0801E290 - ldrb r1, [r6] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #9 - adds r0, r0, r5 - ldr r1, _0801E244 @ =0x04000040 - ldr r2, _0801E248 @ =0xA2600001 - bl sub_0805622C - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, pc} - .align 2, 0 -_0801E23C: .4byte gUnk_03003DE4 -_0801E240: .4byte gUnk_02017AA0 -_0801E244: .4byte 0x04000040 -_0801E248: .4byte 0xA2600001 - - thumb_func_start sub_0801E24C -sub_0801E24C: @ 0x0801E24C - push {r4, r5, lr} - lsls r1, r1, #1 - ldr r2, _0801E278 @ =gUnk_02018EE0 - adds r5, r1, r2 - movs r3, #0 - adds r2, r0, #0 - lsls r4, r2, #1 - movs r0, #3 - subs r1, r0, r4 - cmp r3, r2 - bgt _0801E28E - adds r4, r4, r5 -_0801E264: - lsls r0, r3, #1 - adds r0, r0, r5 - strh r2, [r0] - strh r3, [r4] - cmp r1, #0 - bge _0801E27C - adds r1, #6 - lsls r0, r3, #2 - adds r1, r1, r0 - b _0801E288 - .align 2, 0 -_0801E278: .4byte gUnk_02018EE0 -_0801E27C: - adds r1, #0xa - subs r0, r3, r2 - lsls r0, r0, #2 - adds r1, r1, r0 - subs r4, #2 - subs r2, #1 -_0801E288: - adds r3, #1 - cmp r3, r2 - ble _0801E264 -_0801E28E: - pop {r4, r5, pc} - - thumb_func_start sub_0801E290 -sub_0801E290: @ 0x0801E290 - push {r4, r5, r6, r7, lr} - mov r7, sb - mov r6, r8 - push {r6, r7} - mov ip, r0 - adds r6, r2, #0 - ldr r0, _0801E2BC @ =gUnk_03003DE4 - ldrb r0, [r0] - lsls r2, r0, #2 - adds r2, r2, r0 - lsls r2, r2, #9 - lsls r0, r1, #1 - ldr r3, _0801E2C0 @ =gUnk_02017AA0 - adds r0, r0, r3 - adds r2, r2, r0 - adds r4, r2, #0 - adds r5, r1, #0 - mov sb, r5 - ldr r0, _0801E2C4 @ =gUnk_02018EE0 - mov r8, r0 - b _0801E30A - .align 2, 0 -_0801E2BC: .4byte gUnk_03003DE4 -_0801E2C0: .4byte gUnk_02017AA0 -_0801E2C4: .4byte gUnk_02018EE0 -_0801E2C8: - mov r1, r8 - movs r3, #0 - ldrsh r0, [r1, r3] - movs r7, #2 - add r8, r7 - mov r3, ip - subs r1, r3, r0 - adds r3, r3, r0 - cmp r1, #0 - bge _0801E2DE - movs r1, #0 -_0801E2DE: - cmp r3, #0xef - ble _0801E2E4 - movs r3, #0xf0 -_0801E2E4: - mov r7, sb - lsls r0, r7, #0x10 - lsrs r0, r0, #0x10 - cmp r0, #0x9f - bhi _0801E2F2 - strb r3, [r4] - strb r1, [r4, #1] -_0801E2F2: - lsls r0, r5, #0x10 - lsrs r0, r0, #0x10 - cmp r0, #0x9f - bhi _0801E2FE - strb r3, [r2] - strb r1, [r2, #1] -_0801E2FE: - subs r4, #2 - adds r2, #2 - movs r0, #1 - rsbs r0, r0, #0 - add sb, r0 - adds r5, #1 -_0801E30A: - adds r0, r6, #0 - subs r6, #1 - cmp r0, #0 - bne _0801E2C8 - pop {r3, r4} - mov r8, r3 - mov sb, r4 - pop {r4, r5, r6, r7, pc} - .align 2, 0 - - thumb_func_start sub_0801E31C -sub_0801E31C: @ 0x0801E31C - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #0x20 - str r0, [sp] - str r1, [sp, #4] - mov sl, r2 - mov sb, r3 - ldr r0, _0801E3AC @ =gUnk_03003DE4 - ldrb r1, [r0] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #9 - ldr r1, _0801E3B0 @ =gUnk_02017AA0 - adds r0, r0, r1 - movs r1, #0xa0 - lsls r1, r1, #4 - bl MemClear - cmp sl, sb - bge _0801E3DC - movs r6, #0 - mov r8, sl - mov r7, r8 - mov r0, r8 - lsls r1, r0, #1 - movs r0, #3 - subs r5, r0, r1 - cmp r6, r8 - ble _0801E35E - b _0801E45E -_0801E35E: - mov r1, r8 - lsls r0, r1, #2 - ldr r4, _0801E3B4 @ =gUnk_02018EE0 - adds r0, r0, r4 - str r0, [sp, #0x10] - mov r1, sb - mov r0, r8 - muls r0, r1, r0 - str r0, [sp, #0x14] - movs r3, #0 -_0801E372: - adds r0, r3, #0 - mov r1, sl - str r3, [sp, #0x18] - bl Div - adds r4, r0, #0 - lsls r4, r4, #0x10 - lsrs r4, r4, #0x10 - str r4, [sp, #0x1c] - ldr r0, [sp, #0x14] - mov r1, sl - bl Div - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - lsls r2, r6, #2 - ldr r4, _0801E3B4 @ =gUnk_02018EE0 - adds r1, r2, r4 - str r0, [r1] - ldr r0, [sp, #0x1c] - ldr r1, [sp, #0x10] - str r0, [r1] - ldr r3, [sp, #0x18] - cmp r5, #0 - bge _0801E3B8 - adds r0, r5, #6 - adds r5, r0, r2 - b _0801E3D2 - .align 2, 0 -_0801E3AC: .4byte gUnk_03003DE4 -_0801E3B0: .4byte gUnk_02017AA0 -_0801E3B4: .4byte gUnk_02018EE0 -_0801E3B8: - adds r1, r5, #0 - adds r1, #0xa - subs r0, r6, r7 - lsls r0, r0, #2 - adds r5, r1, r0 - ldr r4, [sp, #0x10] - subs r4, #4 - str r4, [sp, #0x10] - ldr r0, [sp, #0x14] - mov r1, sb - subs r0, r0, r1 - str r0, [sp, #0x14] - subs r7, #1 -_0801E3D2: - add r3, sb - adds r6, #1 - cmp r6, r7 - ble _0801E372 - b _0801E45E -_0801E3DC: - movs r6, #0 - mov r8, sb - mov r7, r8 - mov r4, r8 - lsls r1, r4, #1 - movs r0, #3 - subs r5, r0, r1 - cmp r6, r8 - bgt _0801E45E - lsls r0, r4, #2 - ldr r1, _0801E438 @ =gUnk_02018EE0 - adds r0, r0, r1 - str r0, [sp, #8] - mov r0, sl - mov r4, r8 - muls r4, r0, r4 - str r4, [sp, #0xc] - movs r3, #0 -_0801E400: - adds r0, r3, #0 - mov r1, sb - str r3, [sp, #0x18] - bl Div - adds r4, r0, #0 - lsls r4, r4, #0x10 - lsrs r4, r4, #0x10 - str r4, [sp, #0x1c] - ldr r0, [sp, #0xc] - mov r1, sb - bl Div - lsls r0, r0, #0x10 - lsrs r0, r0, #0x10 - lsls r2, r6, #2 - ldr r4, _0801E438 @ =gUnk_02018EE0 - adds r1, r2, r4 - str r0, [r1] - ldr r0, [sp, #0x1c] - ldr r1, [sp, #8] - str r0, [r1] - ldr r3, [sp, #0x18] - cmp r5, #0 - bge _0801E43C - adds r0, r5, #6 - adds r5, r0, r2 - b _0801E456 - .align 2, 0 -_0801E438: .4byte gUnk_02018EE0 -_0801E43C: - adds r1, r5, #0 - adds r1, #0xa - subs r0, r6, r7 - lsls r0, r0, #2 - adds r5, r1, r0 - ldr r4, [sp, #8] - subs r4, #4 - str r4, [sp, #8] - ldr r0, [sp, #0xc] - mov r1, sl - subs r0, r0, r1 - str r0, [sp, #0xc] - subs r7, #1 -_0801E456: - add r3, sl - adds r6, #1 - cmp r6, r7 - ble _0801E400 -_0801E45E: - ldr r0, [sp] - ldr r1, [sp, #4] - mov r2, r8 - bl sub_0801E290 - ldr r0, _0801E48C @ =gUnk_03003DE4 - ldrb r1, [r0] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #9 - ldr r1, _0801E490 @ =gUnk_02017AA0 - adds r0, r0, r1 - ldr r1, _0801E494 @ =0x04000040 - ldr r2, _0801E498 @ =0xA2600001 - bl sub_0805622C - add sp, #0x20 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0801E48C: .4byte gUnk_03003DE4 -_0801E490: .4byte gUnk_02017AA0 -_0801E494: .4byte 0x04000040 -_0801E498: .4byte 0xA2600001 - - thumb_func_start sub_0801E49C -sub_0801E49C: @ 0x0801E49C - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - sub sp, #8 - mov r8, r0 - str r1, [sp, #4] - mov sb, r2 - adds r5, r3, #0 - ldr r0, _0801E5E4 @ =0x0000FFFF - movs r2, #0xf0 - lsls r2, r2, #3 - ldr r1, _0801E5E8 @ =gUnk_02018EE0 - bl MemFill16 - adds r3, r5, #0 - subs r3, #0x40 - movs r2, #0xff - ands r3, r2 - ldr r1, _0801E5EC @ =gSineTable - adds r0, r3, #0 - adds r0, #0x40 - lsls r0, r0, #1 - adds r0, r0, r1 - movs r4, #0 - ldrsh r0, [r0, r4] - mov r4, sb - muls r4, r0, r4 - adds r0, r4, #0 - asrs r0, r0, #8 - mov r4, r8 - adds r7, r4, r0 - lsls r0, r3, #1 - adds r0, r0, r1 - movs r3, #0 - ldrsh r0, [r0, r3] - mov r4, sb - muls r4, r0, r4 - adds r0, r4, #0 - asrs r0, r0, #8 - ldr r3, [sp, #4] - adds r3, r3, r0 - mov sl, r3 - adds r3, r5, #0 - adds r3, #0x68 - ands r3, r2 - adds r0, r3, #0 - adds r0, #0x40 - lsls r0, r0, #1 - adds r0, r0, r1 - movs r4, #0 - ldrsh r0, [r0, r4] - mov r4, sb - muls r4, r0, r4 - adds r0, r4, #0 - asrs r0, r0, #8 - mov r4, r8 - adds r6, r4, r0 - lsls r0, r3, #1 - adds r0, r0, r1 - movs r3, #0 - ldrsh r0, [r0, r3] - mov r4, sb - muls r4, r0, r4 - adds r0, r4, #0 - asrs r0, r0, #8 - ldr r3, [sp, #4] - adds r4, r3, r0 - adds r3, r5, #0 - subs r3, #0xe8 - ands r3, r2 - adds r0, r3, #0 - adds r0, #0x40 - lsls r0, r0, #1 - adds r0, r0, r1 - movs r2, #0 - ldrsh r0, [r0, r2] - mov r2, sb - muls r2, r0, r2 - adds r0, r2, #0 - asrs r0, r0, #8 - mov r2, r8 - adds r5, r2, r0 - lsls r0, r3, #1 - adds r0, r0, r1 - movs r3, #0 - ldrsh r0, [r0, r3] - mov r1, sb - muls r1, r0, r1 - adds r0, r1, #0 - asrs r0, r0, #8 - ldr r2, [sp, #4] - adds r2, r2, r0 - mov r8, r2 - movs r0, #0 - str r0, [sp] - adds r0, r7, #0 - mov r1, sl - adds r2, r6, #0 - adds r3, r4, #0 - bl sub_0801E64C - movs r0, #1 - str r0, [sp] - adds r0, r7, #0 - mov r1, sl - adds r2, r5, #0 - mov r3, r8 - bl sub_0801E64C - movs r0, #2 - str r0, [sp] - adds r0, r6, #0 - adds r1, r4, #0 - adds r2, r5, #0 - mov r3, r8 - bl sub_0801E64C - ldr r5, _0801E5F0 @ =gUnk_03003DE4 - ldrb r1, [r5] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #9 - ldr r6, _0801E5F4 @ =gUnk_02017AA0 - adds r0, r0, r6 - movs r1, #0xa0 - lsls r1, r1, #4 - bl MemClear - ldr r2, _0801E5E8 @ =gUnk_02018EE0 - ldrb r1, [r5] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #9 - adds r1, r0, r6 - movs r3, #0xa0 - mov sl, r3 -_0801E5B0: - ldr r7, [r2] - ldr r6, [r2, #4] - ldr r5, [r2, #8] - adds r2, #0xc - cmp r7, r6 - ble _0801E5C2 - adds r4, r7, #0 - adds r7, r6, #0 - adds r6, r4, #0 -_0801E5C2: - cmp r7, r5 - ble _0801E5CC - adds r4, r7, #0 - adds r7, r5, #0 - adds r5, r4, #0 -_0801E5CC: - cmp r6, r5 - ble _0801E5D6 - adds r4, r6, #0 - adds r6, r5, #0 - adds r5, r4, #0 -_0801E5D6: - movs r0, #1 - rsbs r0, r0, #0 - cmp r7, r0 - beq _0801E5F8 - strb r5, [r1] - strb r7, [r1, #1] - b _0801E60A - .align 2, 0 -_0801E5E4: .4byte 0x0000FFFF -_0801E5E8: .4byte gUnk_02018EE0 -_0801E5EC: .4byte gSineTable -_0801E5F0: .4byte gUnk_03003DE4 -_0801E5F4: .4byte gUnk_02017AA0 -_0801E5F8: - cmp r6, r7 - beq _0801E602 - strb r5, [r1] - strb r6, [r1, #1] - b _0801E60A -_0801E602: - cmp r5, r7 - beq _0801E60A - strb r7, [r1, #1] - strb r7, [r1] -_0801E60A: - movs r4, #1 - rsbs r4, r4, #0 - add sl, r4 - adds r1, #2 - mov r0, sl - cmp r0, #0 - bgt _0801E5B0 - ldr r0, _0801E63C @ =gUnk_03003DE4 - ldrb r1, [r0] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #9 - ldr r1, _0801E640 @ =gUnk_02017AA0 - adds r0, r0, r1 - ldr r1, _0801E644 @ =0x04000040 - ldr r2, _0801E648 @ =0xA2600001 - bl sub_0805622C - add sp, #8 - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0801E63C: .4byte gUnk_03003DE4 -_0801E640: .4byte gUnk_02017AA0 -_0801E644: .4byte 0x04000040 -_0801E648: .4byte 0xA2600001 - - thumb_func_start sub_0801E64C -sub_0801E64C: @ 0x0801E64C - push {r4, r5, r6, r7, lr} - adds r5, r0, #0 - adds r4, r1, #0 - adds r6, r3, #0 - ldr r7, _0801E6C4 @ =gUnk_02018EE0 - cmp r4, #0 - bge _0801E65E - cmp r6, #0 - blt _0801E6C2 -_0801E65E: - cmp r4, #0x9f - ble _0801E666 - cmp r6, #0x9f - bgt _0801E6C2 -_0801E666: - cmp r4, r6 - ble _0801E676 - adds r1, r4, #0 - adds r4, r6, #0 - adds r6, r1, #0 - adds r1, r5, #0 - adds r5, r2, #0 - adds r2, r1, #0 -_0801E676: - cmp r4, r6 - beq _0801E6C2 - subs r0, r2, r5 - lsls r0, r0, #0x10 - subs r1, r6, r4 - bl Div - adds r3, r0, #0 - cmp r4, #0 - bge _0801E694 - rsbs r0, r4, #0 - muls r0, r3, r0 - asrs r0, r0, #0x10 - adds r5, r5, r0 - movs r4, #0 -_0801E694: - cmp r6, #0x9f - ble _0801E69A - movs r6, #0x9f -_0801E69A: - lsls r2, r5, #0x10 - lsls r0, r4, #1 - adds r0, r0, r4 - ldr r1, [sp, #0x14] - adds r0, r0, r1 - lsls r0, r0, #2 - adds r7, r0, r7 -_0801E6A8: - cmp r5, #0 - bge _0801E6AE - movs r5, #0 -_0801E6AE: - cmp r5, #0xf0 - ble _0801E6B4 - movs r5, #0xf0 -_0801E6B4: - str r5, [r7] - adds r2, r2, r3 - asrs r5, r2, #0x10 - adds r4, #1 - adds r7, #0xc - cmp r4, r6 - ble _0801E6A8 -_0801E6C2: - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0801E6C4: .4byte gUnk_02018EE0 - - thumb_func_start sub_0801E6C8 -sub_0801E6C8: @ 0x0801E6C8 - push {r4, r5, r6, lr} - adds r4, r0, #0 - subs r0, r4, #1 - cmp r0, #0x63 - bhi _0801E722 - movs r1, #0 - ldr r5, _0801E724 @ =gUnk_02022740 - ldr r3, _0801E728 @ =gUnk_02002C01 - movs r2, #0xf1 -_0801E6DA: - adds r0, r1, r3 - ldrb r6, [r0] - cmp r4, r6 - bne _0801E6E4 - strb r2, [r0] -_0801E6E4: - adds r1, #1 - cmp r1, #0x7f - bls _0801E6DA - ldr r0, [r5, #0xc] - bl sub_08002632 - adds r1, r0, #0 - subs r0, r1, #1 - cmp r0, #0x7e - bhi _0801E70A - ldr r0, _0801E72C @ =gSave - ldr r2, _0801E730 @ =0x000001C1 - adds r0, r0, r2 - adds r1, r1, r0 - ldrb r0, [r1] - cmp r0, #0xf1 - bne _0801E70A - movs r0, #0xf2 - strb r0, [r1] -_0801E70A: - movs r1, #0 - ldr r0, _0801E734 @ =gUnk_03003DF0 - movs r2, #0xf1 - adds r0, #0xb -_0801E712: - ldrb r3, [r0] - cmp r4, r3 - bne _0801E71A - strb r2, [r0] -_0801E71A: - adds r0, #0xc - adds r1, #1 - cmp r1, #0x1f - bls _0801E712 -_0801E722: - pop {r4, r5, r6, pc} - .align 2, 0 -_0801E724: .4byte gUnk_02022740 -_0801E728: .4byte gUnk_02002C01 -_0801E72C: .4byte gSave -_0801E730: .4byte 0x000001C1 -_0801E734: .4byte gUnk_03003DF0 - - thumb_func_start sub_0801E738 -sub_0801E738: @ 0x0801E738 - push {r4, lr} - adds r4, r0, #0 - bl sub_0801E82C - adds r0, r4, #0 - subs r0, #0x65 - cmp r0, #0x10 - bhi _0801E790 - adds r0, r4, #0 - bl sub_0801E8B0 - adds r1, r0, #0 - cmp r1, #0 - bge _0801E76E - movs r1, #0 - ldr r0, _0801E794 @ =gSave - movs r3, #0x8c - lsls r3, r3, #1 - adds r2, r0, r3 - ldrb r0, [r2] - cmp r0, #0 - beq _0801E76E -_0801E764: - adds r1, #1 - adds r0, r1, r2 - ldrb r0, [r0] - cmp r0, #0 - bne _0801E764 -_0801E76E: - cmp r1, #0x11 - bhi _0801E790 - ldr r2, _0801E794 @ =gSave - movs r3, #0x8c - lsls r3, r3, #1 - adds r0, r2, r3 - adds r0, r1, r0 - strb r4, [r0] - adds r3, #0x13 - adds r0, r2, r3 - adds r1, r1, r0 - ldrb r0, [r1] - adds r0, #1 - cmp r0, #0x63 - ble _0801E78E - movs r0, #0x63 -_0801E78E: - strb r0, [r1] -_0801E790: - pop {r4, pc} - .align 2, 0 -_0801E794: .4byte gSave - - thumb_func_start sub_0801E798 -sub_0801E798: @ 0x0801E798 - push {r4, lr} - bl sub_0801E8B0 - adds r1, r0, #0 - cmp r1, #0 - blt _0801E7C4 - ldr r2, _0801E7C8 @ =gSave - ldr r3, _0801E7CC @ =0x0000012B - adds r0, r2, r3 - adds r3, r1, r0 - ldrb r0, [r3] - subs r0, #1 - cmp r0, #0 - bgt _0801E7C2 - movs r4, #0x8c - lsls r4, r4, #1 - adds r0, r2, r4 - adds r0, r1, r0 - movs r1, #0 - strb r1, [r0] - movs r0, #0 -_0801E7C2: - strb r0, [r3] -_0801E7C4: - pop {r4, pc} - .align 2, 0 -_0801E7C8: .4byte gSave -_0801E7CC: .4byte 0x0000012B - - thumb_func_start sub_0801E7D0 -sub_0801E7D0: @ 0x0801E7D0 - push {lr} - bl sub_0801E8B0 - adds r1, r0, #0 - cmp r1, #0 - blt _0801E7F0 - ldr r0, _0801E7E8 @ =gSave - ldr r2, _0801E7EC @ =0x0000012B - adds r0, r0, r2 - adds r0, r1, r0 - ldrb r0, [r0] - b _0801E7F2 - .align 2, 0 -_0801E7E8: .4byte gSave -_0801E7EC: .4byte 0x0000012B -_0801E7F0: - movs r0, #0 -_0801E7F2: - pop {pc} - - thumb_func_start CheckKinstoneFused -CheckKinstoneFused: @ 0x0801E7F4 - push {lr} - adds r1, r0, #0 - subs r0, r1, #1 - cmp r0, #0x63 - bhi _0801E80C - ldr r0, _0801E808 @ =gUnk_02002C81 - bl ReadBit - b _0801E80E - .align 2, 0 -_0801E808: .4byte gUnk_02002C81 -_0801E80C: - movs r0, #0 -_0801E80E: - pop {pc} - - thumb_func_start sub_0801E810 -sub_0801E810: @ 0x0801E810 - push {lr} - adds r1, r0, #0 - subs r0, r1, #1 - cmp r0, #0x63 - bhi _0801E828 - ldr r0, _0801E824 @ =gUnk_02002C8E - bl ReadBit - b _0801E82A - .align 2, 0 -_0801E824: .4byte gUnk_02002C8E -_0801E828: - movs r0, #0 -_0801E82A: - pop {pc} - - thumb_func_start sub_0801E82C -sub_0801E82C: @ 0x0801E82C - push {r4, r5, r6, r7, lr} - mov r7, sl - mov r6, sb - mov r5, r8 - push {r5, r6, r7} - ldr r1, _0801E8AC @ =gUnk_02002B54 - movs r5, #0 - adds r2, r1, #4 -_0801E83C: - ldrb r0, [r2, #0x13] - adds r3, r1, #4 - mov sl, r3 - cmp r0, #0 - bne _0801E848 - strb r0, [r2] -_0801E848: - adds r2, #1 - adds r5, #1 - cmp r5, #0x12 - bls _0801E83C - movs r0, #0 - strb r0, [r1, #0x16] - adds r2, r1, #0 - adds r2, #0x29 - strb r0, [r2] - movs r5, #0 - movs r0, #0x17 - adds r0, r0, r1 - mov sb, r0 - movs r3, #0x18 - adds r3, r3, r1 - mov r8, r3 - adds r7, r1, #4 - adds r6, r1, #5 -_0801E86C: - mov r1, sl - adds r0, r1, r5 - ldrb r0, [r0] - subs r0, #0x65 - cmp r0, #0x10 - bls _0801E890 - movs r4, #0x12 - subs r4, r4, r5 - adds r0, r6, #0 - adds r1, r7, #0 - adds r2, r4, #0 - bl MemCopy - mov r0, r8 - mov r1, sb - adds r2, r4, #0 - bl MemCopy -_0801E890: - movs r3, #1 - add sb, r3 - add r8, r3 - adds r7, #1 - adds r6, #1 - adds r5, #1 - cmp r5, #0x11 - bls _0801E86C - pop {r3, r4, r5} - mov r8, r3 - mov sb, r4 - mov sl, r5 - pop {r4, r5, r6, r7, pc} - .align 2, 0 -_0801E8AC: .4byte gUnk_02002B54 - - thumb_func_start sub_0801E8B0 -sub_0801E8B0: @ 0x0801E8B0 - push {lr} - adds r2, r0, #0 - movs r1, #0 - ldr r3, _0801E8C4 @ =gUnk_02002B58 -_0801E8B8: - adds r0, r1, r3 - ldrb r0, [r0] - cmp r2, r0 - bne _0801E8C8 - adds r0, r1, #0 - b _0801E8D2 - .align 2, 0 -_0801E8C4: .4byte gUnk_02002B58 -_0801E8C8: - adds r1, #1 - cmp r1, #0x11 - bls _0801E8B8 - movs r0, #1 - rsbs r0, r0, #0 -_0801E8D2: - pop {pc} - - thumb_func_start sub_0801E8D4 -sub_0801E8D4: @ 0x0801E8D4 -.ifdef DEMO_JP - push {r4, r5, lr} - movs r5, #0xa -_0801E914: - adds r0, r5, #0 - bl CheckKinstoneFused - cmp r0, #0 - beq _0801E9C4 - adds r0, r5, #0 - bl sub_0801E810 - cmp r0, #0 - bne _0801E9C4 - ldr r1, _0801E94C @ =0x080C9500 - lsls r0, r5, #3 - adds r0, r0, r1 - ldrb r1, [r0, #4] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #2 - ldr r1, _0801E950 @ =0x080FDB04 - adds r2, r0, r1 - ldrh r3, [r2, #0x12] - ldrb r0, [r2, #0x10] - cmp r0, #9 - bhi _0801E9B0 - lsls r0, r0, #2 - ldr r1, _0801E954 @ =_0801E958 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0801E94C: .4byte 0x080C9500 -_0801E950: .4byte 0x080FDB04 -_0801E954: .4byte _0801E958 -_0801E958: @ jump table - .4byte _0801E980 @ case 0 - .4byte _0801E984 @ case 1 - .4byte _0801E988 @ case 2 - .4byte _0801E98C @ case 3 - .4byte _0801E990 @ case 4 - .4byte _0801E994 @ case 5 - .4byte _0801E99A @ case 6 - .4byte _0801E9A0 @ case 7 - .4byte _0801E9A6 @ case 8 - .4byte _0801E9AC @ case 9 -_0801E980: - movs r4, #0 - b _0801E9B0 -_0801E984: - ldrb r4, [r2, #0x11] - b _0801E9B0 -_0801E988: - movs r4, #0xf - b _0801E9B0 -_0801E98C: - movs r4, #0x10 - b _0801E9B0 -_0801E990: - movs r4, #0x11 - b _0801E9B0 -_0801E994: - movs r4, #4 - movs r3, #0x83 - b _0801E9B0 -_0801E99A: - movs r4, #4 - movs r3, #0x84 - b _0801E9B0 -_0801E9A0: - movs r4, #4 - movs r3, #0x87 - b _0801E9B0 -_0801E9A6: - movs r4, #4 - movs r3, #0x88 - b _0801E9B0 -_0801E9AC: - movs r4, #4 - movs r3, #0x8b -_0801E9B0: - adds r0, r4, #0 - adds r1, r3, #0 - bl sub_0807CB24 - cmp r0, #0 - beq _0801E9C4 - ldr r0, _0801E9CC @ =gUnk_02002C8E - adds r1, r5, #0 - bl WriteBit -_0801E9C4: - adds r5, #1 - cmp r5, #0x64 - bls _0801E914 - pop {r4, r5, pc} - .align 2, 0 -_0801E9CC: .4byte gUnk_02002C8E - -.else -.ifdef JP - push {r4, r5, lr} - movs r4, #0xa -_0801E8BC: - adds r0, r4, #0 - bl CheckKinstoneFused - cmp r0, #0 - beq _0801E93A - adds r0, r4, #0 - bl sub_0801E810 - cmp r0, #0 - bne _0801E93A - ldr r1, _0801E8F4 @ =gUnk_080FC3E4 - lsls r0, r4, #3 - adds r0, r0, r1 - ldrb r1, [r0, #4] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #2 - ldr r1, _0801E8F8 @ =gUnk_080FE320 - adds r2, r0, r1 - ldrb r0, [r2, #0x10] - cmp r0, #4 - bhi _0801E926 - lsls r0, r0, #2 - ldr r1, _0801E8FC @ =_0801E900 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0801E8F4: .4byte gUnk_080C9CBC -_0801E8F8: .4byte gUnk_080FE320 -_0801E8FC: .4byte _0801E900 -_0801E900: @ jump table - .4byte _0801E914 @ case 0 - .4byte _0801E918 @ case 1 - .4byte _0801E91C @ case 2 - .4byte _0801E920 @ case 3 - .4byte _0801E924 @ case 4 -_0801E914: - movs r5, #0 - b _0801E926 -_0801E918: - ldrb r5, [r2, #0x11] - b _0801E926 -_0801E91C: - movs r5, #0xf - b _0801E926 -_0801E920: - movs r5, #0x10 - b _0801E926 -_0801E924: - movs r5, #0x11 -_0801E926: - ldrh r1, [r2, #0x12] - adds r0, r5, #0 - bl sub_0807CB24 - cmp r0, #0 - beq _0801E93A - ldr r0, _0801E944 @ =0x02002C8E - adds r1, r4, #0 - bl WriteBit -_0801E93A: - adds r4, #1 - cmp r4, #0x64 - bls _0801E8BC - pop {r4, r5, pc} - .align 2, 0 -_0801E944: .4byte 0x02002C8E -.else -.ifdef EU - push {r4, r5, lr} - movs r4, #0xa -_0801E910: - adds r0, r4, #0 - bl CheckKinstoneFused - cmp r0, #0 - beq _0801E98E - adds r0, r4, #0 - bl sub_0801E810 - cmp r0, #0 - bne _0801E98E - ldr r1, _0801E948 @ =gUnk_080C9CBC - lsls r0, r4, #3 - adds r0, r0, r1 - ldrb r1, [r0, #4] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #2 - ldr r1, _0801E94C @ =gUnk_080FE320 - adds r2, r0, r1 - ldrb r0, [r2, #0x10] - cmp r0, #4 - bhi _0801E97A - lsls r0, r0, #2 - ldr r1, _0801E950 @ =_0801E954 - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0801E948: .4byte gUnk_080C9CBC -_0801E94C: .4byte gUnk_080FE320 -_0801E950: .4byte _0801E954 -_0801E954: @ jump table - .4byte _0801E968 @ case 0 - .4byte _0801E96C @ case 1 - .4byte _0801E970 @ case 2 - .4byte _0801E974 @ case 3 - .4byte _0801E978 @ case 4 -_0801E968: - movs r5, #0 - b _0801E97A -_0801E96C: - ldrb r5, [r2, #0x11] - b _0801E97A -_0801E970: - movs r5, #0xf - b _0801E97A -_0801E974: - movs r5, #0x10 - b _0801E97A -_0801E978: - movs r5, #0x11 -_0801E97A: - ldrh r1, [r2, #0x12] - adds r0, r5, #0 - bl sub_0807CB24 - cmp r0, #0 - beq _0801E98E - ldr r0, _0801E998 @ =gUnk_02002C8E - adds r1, r4, #0 - bl WriteBit -_0801E98E: - adds r4, #1 - cmp r4, #0x64 - bls _0801E910 - pop {r4, r5, pc} - .align 2, 0 -_0801E998: .4byte gUnk_02002C8E - -.else - push {r4, r5, lr} - movs r5, #0xa -_0801E8D8: - adds r0, r5, #0 - bl CheckKinstoneFused - cmp r0, #0 - beq _0801E990 - adds r0, r5, #0 - bl sub_0801E810 - cmp r0, #0 - bne _0801E990 - ldr r1, _0801E910 @ =gUnk_080C9CBC - lsls r0, r5, #3 - adds r0, r0, r1 - ldrb r1, [r0, #4] - lsls r0, r1, #2 - adds r0, r0, r1 - lsls r0, r0, #2 - ldr r1, _0801E914 @ =gUnk_080FE320 - adds r2, r0, r1 - ldrh r3, [r2, #0x12] - ldrb r0, [r2, #0x10] - cmp r0, #0xa - bhi _0801E97C - lsls r0, r0, #2 - ldr r1, _0801E918 @ =_0801E91C - adds r0, r0, r1 - ldr r0, [r0] - mov pc, r0 - .align 2, 0 -_0801E910: .4byte gUnk_080C9CBC -_0801E914: .4byte gUnk_080FE320 -_0801E918: .4byte _0801E91C -_0801E91C: @ jump table - .4byte _0801E948 @ case 0 - .4byte _0801E94C @ case 1 - .4byte _0801E950 @ case 2 - .4byte _0801E954 @ case 3 - .4byte _0801E958 @ case 4 - .4byte _0801E95C @ case 5 - .4byte _0801E962 @ case 6 - .4byte _0801E968 @ case 7 - .4byte _0801E96E @ case 8 - .4byte _0801E972 @ case 9 - .4byte _0801E978 @ case 10 -_0801E948: - movs r4, #0 - b _0801E97C -_0801E94C: - ldrb r4, [r2, #0x11] - b _0801E97C -_0801E950: - movs r4, #0xf - b _0801E97C -_0801E954: - movs r4, #0x10 - b _0801E97C -_0801E958: - movs r4, #0x11 - b _0801E97C -_0801E95C: - movs r4, #4 - movs r3, #0x83 - b _0801E97C -_0801E962: - movs r4, #4 - movs r3, #0x84 - b _0801E97C -_0801E968: - movs r4, #4 - movs r3, #0x87 - b _0801E97C -_0801E96E: - movs r4, #4 - b _0801E97A -_0801E972: - movs r4, #4 - movs r3, #0x8b - b _0801E97C -_0801E978: - movs r4, #5 -_0801E97A: - movs r3, #0x88 -_0801E97C: - adds r0, r4, #0 - adds r1, r3, #0 - bl sub_0807CB24 - cmp r0, #0 - beq _0801E990 - ldr r0, _0801E998 @ =gUnk_02002C8E - adds r1, r5, #0 - bl WriteBit -_0801E990: - adds r5, #1 - cmp r5, #0x64 - bls _0801E8D8 - pop {r4, r5, pc} - .align 2, 0 -_0801E998: .4byte gUnk_02002C8E -.endif -.endif -.endif - - thumb_func_start sub_0801E99C -sub_0801E99C: @ 0x0801E99C - push {r4, r5, r6, r7, lr} - mov r7, r8 - push {r7} - bl sub_08002632 - mov r8, r0 - ldr r1, _0801E9E4 @ =gUnk_08001DCC - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r7, [r0] - movs r0, #0x67 - bl GetInventoryValue - cmp r0, #0 - beq _0801EA56 - ldr r1, _0801E9E8 @ =gSave - ldrb r0, [r7] - ldrb r2, [r1, #8] - cmp r0, r2 - bhi _0801EA56 - ldr r2, _0801E9EC @ =0x000001C1 - adds r0, r1, r2 - add r0, r8 - ldrb r5, [r0] - subs r2, #0x80 - adds r0, r1, r2 - add r0, r8 - ldrb r6, [r0] - adds r4, r6, r7 -_0801E9D6: - cmp r5, #0xf1 - beq _0801E9F6 - cmp r5, #0xf1 - bhi _0801E9F0 - cmp r5, #0 - beq _0801E9F6 - b _0801EA10 - .align 2, 0 -_0801E9E4: .4byte gUnk_08001DCC -_0801E9E8: .4byte gSave -_0801E9EC: .4byte 0x000001C1 -_0801E9F0: - cmp r5, #0xf2 - beq _0801EA0A - b _0801EA10 -_0801E9F6: - ldrb r5, [r4, #5] - cmp r5, #0 - beq _0801EA10 - cmp r5, #0xff - beq _0801EA14 - adds r0, r5, #0 - bl CheckKinstoneFused - cmp r0, #0 - beq _0801EA10 -_0801EA0A: - adds r4, #1 - adds r6, #1 - ldrb r5, [r4, #5] -_0801EA10: - cmp r5, #0xff - bne _0801EA1C -_0801EA14: - adds r0, r7, #0 - bl sub_0801EA74 - adds r5, r0, #0 -_0801EA1C: - cmp r5, #0 - beq _0801EA32 - cmp r5, #0xf2 - beq _0801E9D6 - adds r0, r5, #0 - bl CheckKinstoneFused - cmp r0, #0 - beq _0801EA34 - movs r5, #0xf1 - b _0801E9D6 -_0801EA32: - movs r5, #0xf3 -_0801EA34: - ldr r1, _0801EA5C @ =gSave - ldr r2, _0801EA60 @ =0x000001C1 - adds r0, r1, r2 - add r0, r8 - strb r5, [r0] - subs r2, #0x80 - adds r0, r1, r2 - add r0, r8 - strb r6, [r0] - bl Random - ldrb r4, [r7, #1] - movs r1, #0x64 - bl __modsi3 - cmp r4, r0 - bhi _0801EA64 -_0801EA56: - movs r0, #0 - b _0801EA6E - .align 2, 0 -_0801EA5C: .4byte gSave -_0801EA60: .4byte 0x000001C1 -_0801EA64: - subs r0, r5, #1 - cmp r0, #0x63 - bls _0801EA6C - movs r5, #0 -_0801EA6C: - adds r0, r5, #0 -_0801EA6E: - pop {r3} - mov r8, r3 - pop {r4, r5, r6, r7, pc} - - thumb_func_start sub_0801EA74 -sub_0801EA74: @ 0x0801EA74 - push {r4, r5, r6, lr} - bl Random - movs r1, #0x12 - bl __modsi3 - adds r5, r0, #0 - movs r6, #0 -_0801EA84: - ldr r0, _0801EA98 @ =gUnk_080CA11C - adds r0, r5, r0 - ldrb r4, [r0] - adds r0, r4, #0 - bl CheckKinstoneFused - cmp r0, #0 - bne _0801EA9C - adds r0, r4, #0 - b _0801EAAE - .align 2, 0 -_0801EA98: .4byte gUnk_080CA11C -_0801EA9C: - adds r0, r5, #1 - movs r1, #0x12 - bl __modsi3 - adds r5, r0, #0 - adds r6, #1 - cmp r6, #0x11 - bls _0801EA84 - movs r0, #0xf2 -_0801EAAE: - pop {r4, r5, r6, pc} diff --git a/include/asm.h b/include/asm.h index fa0476ba..f250ebb1 100644 --- a/include/asm.h +++ b/include/asm.h @@ -3,8 +3,6 @@ #include "global.h" -struct Entity_; - extern u32 Random(void); extern void sub_08000152(u32, u32, u32); extern u32 GetTileTypeByEntity(struct Entity_*); diff --git a/include/color.h b/include/color.h new file mode 100644 index 00000000..14ab24a9 --- /dev/null +++ b/include/color.h @@ -0,0 +1,21 @@ +#ifndef COLOR_H +#define COLOR_H + +#include "global.h" + +typedef struct { + u8 _0; + u8 _1; + u16 _2; +} Palette; +extern Palette gPaletteList[]; + +void sub_0801CFA8(u32 a1); +void sub_0801D000(u32 a1); +void LoadObjPalette(struct Entity_*, u32); +void UnloadOBJPalette(struct Entity_* entity); +void sub_0801D244(u32); +void sub_0801D28C(struct Entity_* entity, u32 palette); +void ChangeObjPalette(struct Entity_* entity, u32 palette); + +#endif // COLOR_H diff --git a/include/utils.h b/include/common.h similarity index 87% rename from include/utils.h rename to include/common.h index 8cb3e8d1..a971ed21 100644 --- a/include/utils.h +++ b/include/common.h @@ -1,5 +1,5 @@ -#ifndef UTILS_H -#define UTILS_H +#ifndef COMMON_H +#define COMMON_H #include "global.h" @@ -13,6 +13,11 @@ typedef struct { extern Input gInput; +void LoadPalettes(const u8*, s32, s32); +void LoadPaletteGroup(u32 group); +void SetColor(u32 colorIndex, u32 color); +void SetFillColor(u32 color, u32 arg1); + /** * Fill memory with 16 bit value. */ @@ -38,11 +43,6 @@ void MemCopy(const void* src, void* dest, u32 size); */ void ReadKeyInput(void); -void LoadPalettes(const u8*, s32, s32); -void LoadPaletteGroup(u32 group); -void SetColor(u32 colorIndex, u32 color); -void SetFillColor(u32 color, u32 arg1); - /** * Allocate memory on heap. * @@ -66,10 +66,12 @@ void zFree(void* ptr); /** * Reset All display hardware registers. * - * @param updateHUD bool32 Request refresh of HUD layer (bg 0) + * @param refresh bool32 Request refresh of HUD layer (bg 0) */ -void DispReset(bool32 updateHUD); +void DispReset(bool32 refresh); u32 CheckPlayerProximity(u32, u32, u32, u32); -#endif +void sub_0801E1EC(u32, u32, u32); + +#endif // COMMON_H diff --git a/include/enemy.h b/include/enemy.h index c4ef561e..1a8fc7f2 100644 --- a/include/enemy.h +++ b/include/enemy.h @@ -7,7 +7,7 @@ #include "sound.h" #include "effects.h" #include "flags.h" -#include "utils.h" +#include "common.h" #include "entity.h" diff --git a/include/entity.h b/include/entity.h index 597c5367..e3fca5d4 100644 --- a/include/entity.h +++ b/include/entity.h @@ -3,6 +3,7 @@ #define ENTITY_H #include "global.h" +#include "color.h" #include "sprite.h" #define MAX_ENTITIES 71 diff --git a/include/flags.h b/include/flags.h index 1d3080ae..10224374 100644 --- a/include/flags.h +++ b/include/flags.h @@ -25,10 +25,10 @@ void SetLocalFlag(u32); void SetLocalFlagByBank(u32, u32); void SetRoomFlag(u32); -extern u32 ReadBit(u32*, u32); -extern u32 CheckBits(u32*, u32, u32); -extern void WriteBit(u32*, u32); -extern void ClearBit(u32*, u32); +extern u32 ReadBit(void*, u32); +extern u32 CheckBits(void*, u32, u32); +extern u32 WriteBit(void*, u32); +extern u32 ClearBit(void*, u32); extern u32 gGlobalFlags; extern u32 gRoomFlags; diff --git a/include/functions.h b/include/functions.h index 79fe5c2d..0a6c0ca9 100644 --- a/include/functions.h +++ b/include/functions.h @@ -44,7 +44,6 @@ extern void sub_0805EC9C(); extern void sub_0805EC60(Entity*); extern void sub_0806D0B0(Entity*); extern void sub_0806D02C(Entity*); -extern void ChangeObjPalette(Entity*, u32); extern void sub_0806FD3C(Entity*); extern void sub_0805ED14(u32*); extern void sub_080A7C18(u32, u32, u32); @@ -101,10 +100,8 @@ extern void sub_0804ED18(); extern void sub_080AF2E4(void); extern void sub_0804F578(void); extern void sub_08059994(void); -extern s32 sub_0801CFA8(u32); extern void sub_080ADA14(u32, u32); // trampoline to sub_080B27F4 extern void sub_0801E1B8(u32, u32); -extern void sub_0801E1EC(s32, s32, s32); extern void sub_080A3B74(void); extern void sub_080A4054(void); extern void sub_0801C1D4(void); @@ -169,7 +166,7 @@ extern void sub_0806F62C(Entity*, u32, u32); extern void sub_080A1ED0(u32, u32, u32); extern u32 sub_0806F5B0(u32); extern void sub_0801DFB4(Entity*, u32, u32, u32); -extern void sub_0801E00C(); +extern u32 sub_0801E00C(void); extern void sub_08078790(Entity*, u32); extern void sub_080788E0(Entity*); extern void sub_08078B48(void); @@ -200,6 +197,4 @@ extern void sub_080042D0(Entity*, u32, u16); extern u32 sub_080002A8(u32, u32, u32); extern void sub_080806BC(u32, u32, u32, u32); -extern void LoadObjPalette(Entity*, u32); - #endif diff --git a/include/global.h b/include/global.h index e7eddd31..512a903d 100644 --- a/include/global.h +++ b/include/global.h @@ -101,4 +101,7 @@ union SplitHWord { #define FORCE_WORD_ALIGNED __attribute__((packed, aligned(2))) +/* forward decls */ +struct Entity_; + #endif // GUARD_GLOBAL_H diff --git a/include/kinstone.h b/include/kinstone.h new file mode 100644 index 00000000..8760673d --- /dev/null +++ b/include/kinstone.h @@ -0,0 +1,28 @@ +#ifndef KINSTONE_H +#define KINSTONE_H + +#include "global.h" + +typedef struct { + u8 unk[4]; + u32 unk2; + u32 unk4; +} Unk_struct; +extern Unk_struct gUnk_03003DF0[]; + +typedef struct { + u8 _0; + u8 action; + u8 _2; + u8 _3; + u8 _4; + u8 _5; + u16 _6; + u16 _8; + u16 _a; + Entity* ent; +} FuseInfo; +static_assert(sizeof(FuseInfo) == 0x10); +extern FuseInfo gFuseInfo; + +#endif // KINSTONE_H diff --git a/include/main.h b/include/main.h index d18e54c0..eda7676c 100644 --- a/include/main.h +++ b/include/main.h @@ -78,6 +78,8 @@ void InitScreen(u32 screen); void InitDMA(void); +void sub_0805622C(void* a1, u32 a2, u32 a3); + extern void sub_08056208(void); extern void ResetPalettes(void); diff --git a/include/npc.h b/include/npc.h index 3e049fb0..3ad4beff 100644 --- a/include/npc.h +++ b/include/npc.h @@ -3,7 +3,7 @@ #include "global.h" #include "asm.h" -#include "utils.h" +#include "common.h" #include "sound.h" #include "effects.h" diff --git a/include/object.h b/include/object.h index 84f9c02c..d4792ecf 100644 --- a/include/object.h +++ b/include/object.h @@ -3,7 +3,7 @@ #include "global.h" #include "asm.h" -#include "utils.h" +#include "common.h" #include "sound.h" #include "flags.h" diff --git a/include/room.h b/include/room.h index 59c6e094..fb2e8398 100644 --- a/include/room.h +++ b/include/room.h @@ -124,8 +124,8 @@ typedef struct { u8 dungeon_room; s16 dungeon_x; s16 dungeon_y; - s16 dungeon_map_x; - s16 dungeon_map_y; + u16 dungeon_map_x; + u16 dungeon_map_y; s16 overworld_map_x; s16 overworld_map_y; u8 field_0x24[0x8]; diff --git a/include/save.h b/include/save.h index 5df71806..9dbba7ff 100644 --- a/include/save.h +++ b/include/save.h @@ -41,9 +41,13 @@ typedef struct { /*0x086*/ u8 filler86[0x2]; /*0x088*/ PlayerWorldStatus saved_status; /*0x0A8*/ Stats stats; - /*0x0D0*/ u8 fillerD0[0x71]; + /*0x0D0*/ u8 fillerD0[0x48]; + /*0x118*/ u8 unk118[0x13]; + /*0x12B*/ u8 unk12B[0x16]; /*0x141*/ u8 unk141[128]; - /*0x1C1*/ u8 unk1C1[155]; + /*0x1C1*/ u8 unk1C1[128]; + /*0x241*/ u8 unk241[13]; + /*0x24E*/ u8 unk24E[14]; /*0x25C*/ u8 flags[0x200]; /*0x45C*/ u8 unk45C[0x10]; /*0x46C*/ u8 unk46C[0x20]; diff --git a/include/screen.h b/include/screen.h index 784224a8..a5b05623 100644 --- a/include/screen.h +++ b/include/screen.h @@ -62,7 +62,7 @@ typedef struct { /*0x38*/ BgControls controls; /*0x6c*/ u8 _6c; /*0x6d*/ u8 _6d; - /*0x70*/ u32 _70; + /*0x70*/ void* _70; /*0x74*/ u32 _74; /*0x78*/ u32 _78; } Screen; diff --git a/include/structures.h b/include/structures.h index 014b0abe..1f368dcd 100644 --- a/include/structures.h +++ b/include/structures.h @@ -135,7 +135,6 @@ typedef struct { } PriorityHandler; extern PriorityHandler gPriorityHandler; -extern u8 gUnk_02022740[]; extern u8 gUnk_02034490[]; typedef struct { diff --git a/linker.ld b/linker.ld index 572a7fb8..fc7f630c 100644 --- a/linker.ld +++ b/linker.ld @@ -79,7 +79,7 @@ SECTIONS { . = 0x00022030; gUnk_02022030 = .; . = 0x00022130; gUnk_02022130 = .; . = 0x00022730; gUnk_02022730 = .; - . = 0x00022740; gUnk_02022740 = .; + . = 0x00022740; gFuseInfo = .; . = 0x00022750; gPlayerScriptExecutionContext = .; . = 0x00022780; gTextRender = .; . = 0x000227DC; gUnk_020227DC = .; @@ -315,9 +315,8 @@ SECTIONS { src/playerItem/playerItemCellOverwriteSet.o(.text); asm/ui.o(.text); src/ui.o(.text); - asm/code_0801CEC0.o(.text); /* utils.c */ - src/utils.o(.text); - asm/utils.o(.text); + src/color.o(.text); + src/common.o(.text); /* enemies */ src/enemy/octorok.o(.text); src/enemy/chuchu.o(.text); diff --git a/src/code_0805436C.c b/src/code_0805436C.c index d0df011a..eade294e 100644 --- a/src/code_0805436C.c +++ b/src/code_0805436C.c @@ -3,7 +3,7 @@ #include "room.h" #include "menu.h" #include "area.h" -#include "utils.h" +#include "common.h" #include "save.h" #include "item.h" diff --git a/src/code_08078778.c b/src/code_08078778.c index 32e422ff..643cd7bc 100644 --- a/src/code_08078778.c +++ b/src/code_08078778.c @@ -1,14 +1,7 @@ #include "global.h" #include "entity.h" #include "functions.h" - -typedef struct { - u8 unk[4]; - u32 unk2; - u32 unk4; -} Unk_struct; - -extern Unk_struct gUnk_03003DF0[]; +#include "kinstone.h" void sub_08078778(Entity* ent) { sub_0807887C(ent, 1, 0); diff --git a/src/collision.c b/src/collision.c index d39cb4a2..44f53719 100644 --- a/src/collision.c +++ b/src/collision.c @@ -3,7 +3,7 @@ #include "entity.h" #include "player.h" #include "save.h" -#include "utils.h" +#include "common.h" #include "functions.h" #include "enemy.h" #include "object.h" diff --git a/src/color.c b/src/color.c new file mode 100644 index 00000000..8a69184a --- /dev/null +++ b/src/color.c @@ -0,0 +1,84 @@ +#include "global.h" +#include "entity.h" +#include "common.h" +#include "color.h" + +void LoadObjPaletteAtIndex(u32 a1, u32 a2); + +static void sub_0801CFD0(u32 a1); + +void sub_0801CFA8(u32 a1) { + u32 i; + + MemClear(gPaletteList, 0x40); + for (i = 0; i < 6; ++i) { + sub_0801CFD0(i); + } + sub_0801D000(a1); +} + +void sub_0801CFD0(u32 a1) { + Palette* p = &gPaletteList[a1]; + p->_0 = ((s8)p->_0 & ~0xf) | 4; + p->_0 = (p->_0 & 0xf) | 0x10; + p->_1 = 0x80; + p->_2 = 0xFFFF; +} + +ASM_FUNC("asm/non_matching/color/sub_0801D000.inc", void sub_0801D000(u32 a1)); + +ASM_FUNC("asm/non_matching/color/LoadObjPalette.inc", void LoadObjPalette(Entity* entity, u32 a2)); + +ASM_FUNC("asm/non_matching/color/FindPalette.inc", s32 FindPalette(u32 a1)); + +ASM_FUNC("asm/non_matching/color/FindFreeObjPalette.inc", u32 FindFreeObjPalette(u32 a1)); + +ASM_FUNC("asm/non_matching/color/SetEntityObjPalette.inc", void SetEntityObjPalette(Entity* entity, u32 palette)); + +void UnloadOBJPalette(Entity* entity) { + u8* p = &entity->spriteAnimation[1]; + u32 idx = *p; + *p = 0; + sub_0801D244(idx); +} + +ASM_FUNC("asm/non_matching/color/sub_0801D244.inc", void sub_0801D244(u32 a1)); + +void sub_0801D28C(Entity* entity, u32 palette) { + u32 c = entity->spriteAnimation[1]; + Palette* list = gPaletteList; + Palette* p = &list[c]; + u32 lo = (u32)(p->_0 << 0x1C) >> 0x1C; + + if (lo == 3) { + p->_2 = palette; + LoadObjPaletteAtIndex(palette, c); + } +} + +void ChangeObjPalette(Entity* entity, u32 a2) { + UnloadOBJPalette(entity); + LoadObjPalette(entity, a2); +} + +ASM_FUNC("asm/non_matching/color/LoadObjPaletteAtIndex.inc", void LoadObjPaletteAtIndex(u32 a1, u32 a2)); + +ASM_FUNC("asm/non_matching/color/CleanUpObjPalettes.inc", void CleanUpObjPalettes(void)); + +u32 sub_0801D458(u32 a1) { + u32 i; + for (i = a1; i < 16; i++) { + s32 tmp = ((u32)gPaletteList[i]._0 << 28) >> 28; + switch (tmp) { + case 0: + case 1: + case 4: + continue; + default: + return i; + } + } + return 0; +} + +ASM_FUNC("asm/non_matching/color/sub_0801D48C.inc", void sub_0801D48C(u32 a1, u32 a2)); diff --git a/src/common.c b/src/common.c new file mode 100644 index 00000000..2a8fef53 --- /dev/null +++ b/src/common.c @@ -0,0 +1,681 @@ +#include "global.h" +#include "asm.h" +#include "common.h" +#include "structures.h" +#include "screen.h" +#include "main.h" +#include "area.h" +#include "room.h" +#include "fileScreen.h" +#include "game.h" +#include "flags.h" +#include "kinstone.h" +#include "functions.h" +#include "message.h" + +typedef struct { + u8 _0; + u8 _1; + u8 _2; + u8 _3; +} DungeonLayout; + +extern u8 gUnk_03003DE0; +extern u8 gzHeap[0x1000]; +extern u8 gUnk_0201AEE0[0x2000]; +extern u8 gUnk_080CA11C[]; + +extern void (*gUnk_080C9CAC[])(void); + +static void StoreKeyInput(Input* input, u32 keyInput); +void ClearOAM(void); +void ResetScreenRegs(void); +void sub_0801E0E0(u32); +void sub_0801E24C(u32, u32); +void sub_0801E290(u32, u32, u32); +s32 sub_0801E8B0(u32); + +extern u32 sub_0807CB24(u32, u32); + +typedef struct { + u16 paletteId; + u8 destPaletteNum; + u8 numPalettes; +} PaletteGroup; + +typedef struct { + union { + int raw; + struct { + u8 filler0[0x3]; + u8 unk3; + } bytes; + } unk0; + u32 dest; + u32 unk8; +} GfxItem; + +typedef struct { + u8 filler[0xA00]; +} struct_02017AA0; +extern struct_02017AA0 gUnk_02017AA0[]; +extern u8 gUnk_03003DE4; + +typedef struct { + u8 _0[4]; + u8 evt_type; + u8 _5[3]; +} struct_080C9CBC; +extern struct_080C9CBC gUnk_080C9CBC[]; + +typedef struct { + u8 evt_type; + u8 entity_idx; + u8 _2[6]; + u16 x; + u16 y; + u8 _c[4]; + u8 _10; + u8 _11; + u16 flag; +} struct_080FE320; +extern struct_080FE320 gUnk_080FE320[]; + +extern const PaletteGroup* gPaletteGroups[]; +extern const u8 gGlobalGfxAndPalettes[]; +extern u32 gUsedPalettes; +extern u16 gPaletteBuffer[]; +extern const GfxItem* gGfxGroups[]; + +u32 DecToHex(u32 value) { + u32 result; + register u32 r1 asm("r1"); + + if (value >= 100000000) { + return 0x99999999; + } + + result = Div(value, 10000000) * 0x10000000; + result += Div(r1, 1000000) * 0x1000000; + result += Div(r1, 100000) * 0x100000; + result += Div(r1, 10000) * 0x10000; + result += Div(r1, 1000) * 0x1000; + result += Div(r1, 100) * 0x100; + result += Div(r1, 10) * 0x10; + return result + r1; +} + +u32 ReadBit(void* src, u32 bit) { + return (*((u8*)src + bit / 8) >> (bit % 8)) & 1; +} + +NONMATCH("asm/non_matching/common/WriteBit.inc", u32 WriteBit(void* src, u32 bit)) { + u8* b; + u32 mask; + u32 orig; + + b = (u8*)(bit / 8 + (u32)src); + mask = 1 << (bit % 8); + orig = *b; + *b |= mask; + orig &= mask; + return orig; +} +END_NONMATCH + +NONMATCH("asm/non_matching/common/ClearBit.inc", u32 ClearBit(void* src, u32 bit)) { + u8* b; + u32 mask; + u32 orig; + + b = (u8*)(bit / 8 + (u32)src); + mask = 1 << (bit % 8); + orig = *b; + *b &= ~mask; + orig &= mask; + return orig; +} +END_NONMATCH + +void MemFill16(u32 value, void* dest, u32 size) { + DmaFill16(3, value, dest, size); +} + +void MemFill32(u32 value, void* dest, u32 size) { + DmaFill32(3, value, dest, size); +} + +void MemClear(void* dest, u32 size) { + u32 zero = 0; + + // alignment check + switch (((uintptr_t)dest | size) % 4) { + case 0: + MemFill32(0, dest, size); + break; + case 2: + MemFill16(0, dest, size); + break; + default: + do { + *(u8*)dest = zero; + dest++; + size--; + } while (size != 0); + } +} + +void MemCopy(const void* src, void* dest, u32 size) { + switch (((uintptr_t)src | (uintptr_t)dest | size) % 4) { + case 0: + DmaCopy32(3, src, dest, size); + break; + case 2: + DmaCopy16(3, src, dest, size); + break; + default: + do { + *(u8*)dest = *(u8*)src; + src++; + dest++; + } while (--size); + } +} + +void ReadKeyInput(void) { + u32 keyInput = ~REG_KEYINPUT & KEYS_MASK; + StoreKeyInput(&gInput, keyInput); +} + +static void StoreKeyInput(Input* input, u32 keyInput) { + u32 heldKeys = input->heldKeys; + u32 difference = keyInput & ~heldKeys; + input->newKeys = difference; + if (keyInput == heldKeys) { + if (--input->unk7 == 0) { + input->unk7 = 4; + input->unk4 = keyInput; + } else { + input->unk4 = 0; + } + } else { + input->unk7 = 20; + input->unk4 = difference; + } + input->heldKeys = keyInput; +} + +void LoadPaletteGroup(u32 group) { + const PaletteGroup* paletteGroup = gPaletteGroups[group]; + while (1) { + u32 destPaletteNum = paletteGroup->destPaletteNum; + u32 numPalettes = paletteGroup->numPalettes & 0xF; + if (numPalettes == 0) { + numPalettes = 16; + } + LoadPalettes(&gGlobalGfxAndPalettes[paletteGroup->paletteId * 32], destPaletteNum, numPalettes); + if ((paletteGroup->numPalettes & 0x80) == 0) { + break; + } + paletteGroup++; + } +} + +void LoadPalettes(const u8* src, s32 destPaletteNum, s32 numPalettes) { + u16* dest; + u32 size = numPalettes * 32; + u32 usedPalettesMask = 1 << destPaletteNum; + while (--numPalettes > 0) { + usedPalettesMask |= (usedPalettesMask << 1); + } + gUsedPalettes |= usedPalettesMask; + dest = &gPaletteBuffer[destPaletteNum * 16]; + DmaCopy32(3, src, dest, size); +} + +void SetColor(u32 colorIndex, u32 color) { + gPaletteBuffer[colorIndex] = color; + gUsedPalettes |= 1 << (colorIndex / 16); +} + +void SetFillColor(u32 color, u32 disable_layers) { + if (disable_layers) { + gScreen.lcd.displayControlMask = ~(DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON); + } else { + gScreen.lcd.displayControlMask = ~0; + } + SetColor(0, color); +} + +void LoadGfxGroup(u32 group) { + u32 terminator; + u32 dmaCtrl; + int gfxOffset; + const u8* src; + u32 dest; + int size; + const GfxItem* gfxItem = gGfxGroups[group]; + while (1) { + u32 loadGfx = FALSE; + u32 ctrl = gfxItem->unk0.bytes.unk3; + ctrl &= 0xF; + switch (ctrl) { + case 0x7: + loadGfx = TRUE; + break; + case 0xD: + return; + case 0xE: + if (gSaveHeader->gameLanguage != 0 && gSaveHeader->gameLanguage != 1) { + loadGfx = TRUE; + } + break; + case 0xF: + if (gSaveHeader->gameLanguage != 0) { + loadGfx = TRUE; + } + break; + default: + if (ctrl == gSaveHeader->gameLanguage) { + loadGfx = TRUE; + } + break; + } + + if (loadGfx) { + gfxOffset = gfxItem->unk0.raw & 0xFFFFFF; + src = &gGlobalGfxAndPalettes[gfxOffset]; + dest = gfxItem->dest; + size = gfxItem->unk8; + dmaCtrl = 0x80000000; + if (size < 0) { + if (dest >= VRAM) { + LZ77UnCompVram(src, (void*)dest); + } else { + LZ77UnCompWram(src, (void*)dest); + } + } else { + DmaSet(3, src, dest, dmaCtrl | ((u32)size >> 1)); + } + } + + terminator = gfxItem->unk0.bytes.unk3; + terminator &= 0x80; + gfxItem++; + if (!terminator) { + break; + } + } +} + +// regalloc +NONMATCH("asm/non_matching/common/sub_0801D898.inc", void sub_0801D898(void* dest, void* src, u32 word, u32 size)) { + u32 v6; + u32 i; + + if (size & 0x8000) + v6 = 0x40; + else + v6 = 0x20; + + i = size & ~0x8000; + do { + DmaSet(3, src, dest, word | 0x80000000) src += word * 2; + dest += v6 * 2; + } while (--i); +} +END_NONMATCH + +ASM_FUNC("asm/non_matching/common/zMalloc.inc", void* zMalloc(u32 size)); + +ASM_FUNC("asm/non_matching/common/zFree.inc", void zFree(void* ptr)); + +void zMallocInit(void) { + MemClear(gzHeap, sizeof(gzHeap)); +} + +void DispReset(bool32 refresh) { + gMain.interruptFlag = 1; + gUnk_03003DE0 = 0; + gFadeControl.active = 0; + gScreen._6d = 0; + gScreen._6c = 0; + DmaStop(0); + REG_DISPCNT = 0; + ClearOAM(); + ResetScreenRegs(); + MemClear((void*)0x600C000, 0x20); + MemClear(gBG0Buffer, 0x800); + gScreen.bg0.updated = refresh; +} + +void ClearOAM(void) { + u8* d = (u8*)gUnk_03000000.oam; + u8* mem = (u8*)0x07000000; + u32 i; + for (i = 128; i != 0; --i) { + *(u16*)d = 0x2A0; + d += 8; + *(u16*)mem = 0x2A0; + mem += 8; + } +} + +void ResetScreenRegs(void) { + MemClear(&gScreen, sizeof(gScreen)); + gScreen.bg0.tilemap = &gBG0Buffer; + gScreen.bg0.control = 0x1F0C; + gScreen.bg1.tilemap = &gBG1Buffer; + gScreen.bg1.control = 0x1C01; + gScreen.bg2.tilemap = &gBG2Buffer; + gScreen.bg2.control = 0x1D02; + gScreen.bg3.tilemap = &gBG3Buffer; + gScreen.bg3.control = 0x1E03; + gScreen.lcd.displayControl = 0x140; + gScreen.lcd.displayControlMask = 0xffff; +} + +u32 sub_0801DB94(void) { + return gScreenTransition.player_status.dungeon_map_y >> 11; +} + +ASM_FUNC("asm/non_matching/common/DrawDungeonMap.inc", void DrawDungeonMap(u32 floor, struct_02019EE0* data, u32 size)); + +void sub_0801DD58(u32 area, u32 room) { + RoomHeader* hdr = gAreaRoomHeaders[area] + room; + gArea.pCurrentRoomInfo->map_x = hdr->map_x; + gArea.pCurrentRoomInfo->map_y = hdr->map_y; +} + +void LoadDungeonMap(void) { + LoadResourceAsync(gUnk_0201AEE0, 0x6006000, sizeof(gUnk_0201AEE0)); +} + +ASM_FUNC("asm/non_matching/common/DrawDungeonFeatures.inc", void DrawDungeonFeatures(u32 room, void* data, u32 size)); + +u32 sub_0801DF10(DungeonLayout* lyt) { + u32 offset; + + if (lyt->_3 == 1) + offset = 0x300; + else + offset = GetFlagBankOffset(lyt->_0); + return offset; +} + +ASM_FUNC("asm/non_matching/common/sub_0801DF28.inc", void sub_0801DF28(u32 a1, u32 a2, u32 a3)); + +u32 sub_0801DF60(u32 a1, u8* p) { + return (p[a1 >> 2] >> (2 * (~a1 & 3))) & 3; +} + +u32 sub_0801DF78(u32 a1, u32 a2) { + switch (a1) { + case 0: + case 1: + default: + return a1; + case 2: + return a2; + case 3: + return 7; + } +} + +u32 sub_0801DF90(u8* a1, u32 a2) { + if (a1 == NULL) + return 0; + + for (; *a1 != 0; a1 += 8) { + if (*a1 == 1) + return CheckLocalFlagByBank(a2, a1[1]); + } + return 0; +} + +void sub_0801DFB4(Entity* entity, u32 a2, u32 a3, u32 a4) { + MemClear(&gFuseInfo, sizeof(gFuseInfo)); + gFuseInfo._6 = a2; + gFuseInfo._8 = a3; + gFuseInfo._a = a4; + gFuseInfo.ent = entity; + gFuseInfo._3 = gUnk_03003DF0[0].unk[2]; + if (entity != NULL) { + gFuseInfo._4 = entity->updatePriority; + entity->updatePriority = 2; + } + gFuseInfo._0 = 0; +} + +u32 sub_0801E00C(void) { + gUnk_080C9CAC[gFuseInfo.action](); + return gFuseInfo._0; +} + +void sub_0801E02C(void) { + sub_0801E0E0(gFuseInfo._6); + gFuseInfo._0 = 3; + gFuseInfo.action = 1; +} + +void sub_0801E044(void) { + if ((gMessage.doTextBox & 0x7F) == 0) { + MenuFadeIn(4, 0); + gFuseInfo._0 = 4; + gFuseInfo.action = 2; + SoundReq(0x6b); + } +} + +void sub_0801E074(void) { + u32 tmp; + switch (gFuseInfo._0) { + case 5: + tmp = gFuseInfo._8; + break; + case 6: + tmp = gFuseInfo._a; + break; + default: + return; + } + sub_0801E0E0(tmp); + gFuseInfo.action = 3; +} + +void sub_0801E0A0(void) { + if ((gMessage.doTextBox & 0x7f) == 0) { + if (gFuseInfo.ent != NULL) { + gFuseInfo.ent->updatePriority = gFuseInfo._4; + } + gFuseInfo._0 = gFuseInfo._0 == 6 ? 2 : 1; + } +} + +void sub_0801E0E0(u32 idx) { + if (idx != 0) { + if (gFuseInfo.ent != NULL) { + MessageNoOverlap(idx, gFuseInfo.ent); + } else { + MessageFromTarget(idx); + } + } +} + +void sub_0801E104(void) { + gScreen.lcd.displayControl &= ~0x6000; + gScreen._6c = 0; +} + +void sub_0801E120(void) { + gScreen.lcd.displayControl |= 0x2000; + gScreen.controls.windowInsideControl = 0x3F37; + gScreen.controls.windowOutsideControl = 0x3F; + gScreen.controls.window0HorizontalDimensions = 0; + gScreen.controls.window0VerticalDimensions = 160; +} + +void sub_0801E154(u32 a1) { + sub_0801E24C(a1, 0); +} + +void sub_0801E160(u32 a1, u32 a2, u32 a3) { + MemClear(&gUnk_02017AA0[gUnk_03003DE4], sizeof(gUnk_02017AA0[gUnk_03003DE4])); + sub_0801E290(a1, a2, a3); + sub_0805622C(&gUnk_02017AA0[gUnk_03003DE4], 0x4000040, 0xA2600001); +} + +void sub_0801E1B8(u32 a1, u32 a2) { + gScreen.lcd.displayControl |= 0x2000; + gScreen.controls.windowInsideControl = a1; + gScreen.controls.windowOutsideControl = a2; + gScreen.controls.window0HorizontalDimensions = 0; + gScreen.controls.window0VerticalDimensions = 160; +} + +void sub_0801E1EC(u32 a1, u32 a2, u32 a3) { + MemClear(&gUnk_02017AA0[gUnk_03003DE4], sizeof(gUnk_02017AA0[gUnk_03003DE4])); + sub_0801E24C(a3, 0); + sub_0801E290(a1, a2, a3); + sub_0805622C(&gUnk_02017AA0[gUnk_03003DE4], 0x4000040, 0xA2600001); +} + +ASM_FUNC("asm/non_matching/common/sub_0801E24C.inc", void sub_0801E24C(u32 a1, u32 a2)); + +ASM_FUNC("asm/non_matching/common/sub_0801E290.inc", void sub_0801E290(u32 a1, u32 a2, u32 a3)); + +ASM_FUNC("asm/non_matching/common/sub_0801E31C.inc", void sub_0801E31C(u32 a1, u32 a2, u32 a3, u32 a4)); + +ASM_FUNC("asm/non_matching/common/sub_0801E49C.inc", void sub_0801E49C(u32 a1, u32 a2, u32 a3, u32 a4)); + +ASM_FUNC("asm/non_matching/common/sub_0801E64C.inc", void sub_0801E64C(u32 a1, u32 a2, u32 a3, u32 a4, u32 a5)); + +ASM_FUNC("asm/non_matching/common/sub_0801E6C8.inc", void sub_0801E6C8(u32 a1)); + +ASM_FUNC("asm/non_matching/common/sub_0801E738.inc", void sub_0801E738(u32 a1)); + +void sub_0801E798(u32 a1) { + s32 idx = sub_0801E8B0(a1); + if (idx >= 0) { + s32 next = gSave.unk12B[idx] - 1; + if (next <= 0) { + gSave.unk118[idx] = 0; + next = 0; + } + gSave.unk12B[idx] = next; + } +} + +u32 sub_0801E7D0(u32 a1) { + s32 tmp = sub_0801E8B0(a1); + if (tmp < 0) { + return 0; + } + return gSave.unk12B[tmp]; +} + +u32 CheckKinstoneFused(u32 idx) { + if (idx > 100 || idx < 1) { + return 0; + } + return ReadBit(&gSave.unk241, idx); +} + +u32 sub_0801E810(u32 idx) { + if (idx > 100 || idx < 1) { + return 0; + } + return ReadBit(&gSave.unk24E, idx); +} + +ASM_FUNC("asm/non_matching/common/sub_0801E82C.inc", void sub_0801E82C(void)); + +s32 sub_0801E8B0(u32 idx) { + u32 i; + + for (i = 0; i < 18; ++i) { + if (idx == gSave.unk118[i]) + return i; + } + return -1; +} + +void sub_0801E8D4(void) { + u32 i; + for (i = 10; i <= 100; ++i) { + if (CheckKinstoneFused(i) && !sub_0801E810(i)) { + u32 evt_type = gUnk_080C9CBC[i].evt_type; + struct_080FE320* s = &gUnk_080FE320[evt_type]; +#if !defined EU && !defined JP + u32 flag = s->flag; +#endif + u32 tmp; + switch (s->_10) { + case 0: + tmp = 0; + break; + case 1: + tmp = s->_11; + break; + case 2: + tmp = 0xf; + break; + case 3: + tmp = 0x10; + break; + case 4: + tmp = 0x11; + break; +#if !defined EU && !defined JP + case 5: + tmp = 4; + flag = 0x83; + break; + case 6: + tmp = 4; + flag = 0x84; + break; + case 7: + tmp = 4; + flag = 0x87; + break; + case 8: + tmp = 4; + flag = 0x88; + break; + case 9: + tmp = 4; + flag = 0x8b; + break; +#ifndef DEMO_JP + case 10: + tmp = 5; + flag = 0x88; + break; +#endif +#endif + } +#if !defined EU && !defined JP + if (sub_0807CB24(tmp, flag)) { +#else + if (sub_0807CB24(tmp, s->flag)) { +#endif + WriteBit(&gSave.unk24E, i); + } + } + } +} + +ASM_FUNC("asm/non_matching/common/sub_0801E99C.inc", u32 sub_0801E99C(u32 a1)); + +u32 sub_0801EA74(void) { + s32 r = (s32)Random() % 18; + u32 i; + for (i = 0; i < 18; ++i) { + u32 n = gUnk_080CA11C[r]; + if (!CheckKinstoneFused(n)) + return n; + r = (r + 1) % 18; + } + return 0xF2; +} diff --git a/src/coord.c b/src/coord.c index cf8548fc..3ee708e6 100644 --- a/src/coord.c +++ b/src/coord.c @@ -2,7 +2,7 @@ #include "area.h" #include "player.h" #include "coord.h" -#include "utils.h" +#include "common.h" #include "sound.h" #include "room.h" #include "functions.h" diff --git a/src/debugScreen.c b/src/debugScreen.c index b3300574..9eded432 100644 --- a/src/debugScreen.c +++ b/src/debugScreen.c @@ -1,6 +1,6 @@ #include "global.h" #include "sound.h" -#include "utils.h" +#include "common.h" #include "functions.h" #include "main.h" #include "menu.h" diff --git a/src/demoScreen.c b/src/demoScreen.c index daec74d7..2f6ad402 100644 --- a/src/demoScreen.c +++ b/src/demoScreen.c @@ -1,7 +1,7 @@ #include "global.h" #include "functions.h" #include "main.h" -#include "utils.h" +#include "common.h" #include "message.h" #include "fileScreen.h" #include "screen.h" diff --git a/src/dungeon.c b/src/dungeon.c new file mode 100644 index 00000000..dc4f98a6 --- /dev/null +++ b/src/dungeon.c @@ -0,0 +1 @@ +#include "global.h" diff --git a/src/enemy/code_080300AC.c b/src/enemy/code_080300AC.c index d1af8248..e3f5c2ef 100644 --- a/src/enemy/code_080300AC.c +++ b/src/enemy/code_080300AC.c @@ -1,5 +1,5 @@ #include "global.h" -#include "utils.h" +#include "common.h" #include "functions.h" void sub_080300AC(void) { diff --git a/src/enterPortalSubtask.c b/src/enterPortalSubtask.c index c9f70c55..0387751a 100644 --- a/src/enterPortalSubtask.c +++ b/src/enterPortalSubtask.c @@ -2,7 +2,7 @@ #include "entity.h" #include "area.h" #include "main.h" -#include "utils.h" +#include "common.h" #include "screen.h" #include "object.h" #include "functions.h" diff --git a/src/entity.c b/src/entity.c index 79040e23..bdbe2e55 100644 --- a/src/entity.c +++ b/src/entity.c @@ -1,5 +1,5 @@ #include "global.h" -#include "utils.h" +#include "common.h" #include "functions.h" #include "area.h" #include "message.h" @@ -15,7 +15,6 @@ void sub_0805EE88(void); void ClearAllDeletedEntities(void); void DeleteAllEntities(void); void sub_0805E98C(void); -extern void UnloadOBJPalette(); extern void sub_0806FE84(); extern void sub_08078954(); extern void sub_08017744(Entity*); diff --git a/src/fade.c b/src/fade.c index f6abc39c..04cd34e5 100644 --- a/src/fade.c +++ b/src/fade.c @@ -2,7 +2,7 @@ #include "structures.h" #include "functions.h" #include "screen.h" -#include "utils.h" +#include "common.h" static u32 sub_080501C0(FadeControl* ctl); static u32 sub_08050230(FadeControl* ctl); diff --git a/src/fileScreen.c b/src/fileScreen.c index ae44ecb0..691c5999 100644 --- a/src/fileScreen.c +++ b/src/fileScreen.c @@ -1,6 +1,6 @@ #include "fileScreen.h" #include "main.h" -#include "utils.h" +#include "common.h" #include "screen.h" #include "menu.h" #include "message.h" diff --git a/src/flags.c b/src/flags.c index 1c153b5a..57f49892 100644 --- a/src/flags.c +++ b/src/flags.c @@ -13,13 +13,13 @@ u32 CheckLocalFlag(u32 flag) { } u32 CheckFlags(u32 flags) { - s32 type; - s32 index; - s32 length; + u32 type; + u32 index; + u32 length; index = flags & 0x3ff; length = (((flags & (0xf0) << 0x6) >> 0xa) + 1); type = (flags & 0xc000) >> 0xe; - switch ((u32)type) { + switch (type) { case 2: return CheckRoomFlags(index, length); case 0: @@ -40,7 +40,6 @@ u32 CheckRoomFlag(u32 flag) { } u32 CheckLocalFlagsByBank(u32 offset, u32 flag, u32 length) { - return CheckBits(&gGlobalFlags, offset + flag, length); } @@ -67,13 +66,13 @@ void SetLocalFlag(u32 flag) { } void SetFlag(u32 flag) { - s32 uVar1; - s32 index; + u32 type; + u32 index; if (flag != 0) { index = flag & 0x3ff; - uVar1 = (flag & 0xc000) >> 0xe; - switch ((u32)uVar1) { + type = (flag & 0xc000) >> 0xe; + switch (type) { case 2: SetRoomFlag(index); return; @@ -104,12 +103,12 @@ void ClearLocalFlag(u32 flag) { } void ClearFlag(u32 flag) { - s32 uVar1; - s32 index; + u32 type; + u32 index; index = flag & 0x3ff; - uVar1 = (flag & 0xc000) >> 0xe; - switch ((u32)uVar1) { + type = (flag & 0xc000) >> 0xe; + switch (type) { case 2: ClearRoomFlag(index); return; diff --git a/src/game.c b/src/game.c index 33054701..034d9076 100644 --- a/src/game.c +++ b/src/game.c @@ -7,7 +7,7 @@ #include "main.h" #include "flags.h" #include "save.h" -#include "utils.h" +#include "common.h" #include "fileScreen.h" #include "menu.h" #include "functions.h" diff --git a/src/main.c b/src/main.c index 9a2a5dbe..1ce5d2bb 100644 --- a/src/main.c +++ b/src/main.c @@ -2,7 +2,7 @@ #include "functions.h" #include "main.h" #include "screen.h" -#include "utils.h" +#include "common.h" #include "save.h" #include "message.h" #include "interrupts.h" @@ -244,7 +244,7 @@ void sub_08056208() { gScreen._6d = 0; } -void sub_0805622C(u32 a1, u32 a2, u32 a3) { +void sub_0805622C(void* a1, u32 a2, u32 a3) { gScreen._70 = a1; gScreen._74 = a2; gScreen._78 = a3; diff --git a/src/manager/manager10.c b/src/manager/manager10.c index adfbf44c..607463a5 100644 --- a/src/manager/manager10.c +++ b/src/manager/manager10.c @@ -5,7 +5,7 @@ #include "area.h" #include "sound.h" #include "screen.h" -#include "utils.h" +#include "common.h" #include "fileScreen.h" #include "functions.h" diff --git a/src/manager/manager14.c b/src/manager/manager14.c index 05c6a46e..a3771fe9 100644 --- a/src/manager/manager14.c +++ b/src/manager/manager14.c @@ -19,7 +19,6 @@ const u16 gUnk_08108588[] = { 0x1000, 0xF01, 0xE02, 0xD03, 0xC04, 0xB05, 0xA06, const u16 gUnk_0810859A[] = { 0x808, 0x907, 0xA06, 0x907 }; -extern void sub_0805622C(u16*, u32, u32); extern u16 gUnk_02017AA0[]; void sub_08059E80(Manager14*); diff --git a/src/manager/manager1A.c b/src/manager/manager1A.c index a0eb2a8b..2ad78228 100644 --- a/src/manager/manager1A.c +++ b/src/manager/manager1A.c @@ -3,7 +3,7 @@ #include "flags.h" #include "room.h" #include "screen.h" -#include "utils.h" +#include "common.h" #include "object.h" #include "functions.h" diff --git a/src/manager/manager2C.c b/src/manager/manager2C.c index 125dcc5b..c8b3f63d 100644 --- a/src/manager/manager2C.c +++ b/src/manager/manager2C.c @@ -1,7 +1,7 @@ #include "manager.h" #include "asm.h" #include "functions.h" -#include "utils.h" +#include "common.h" typedef struct { struct Manager manager; diff --git a/src/manager/manager32.c b/src/manager/manager32.c index 1e6580d8..77e3d955 100644 --- a/src/manager/manager32.c +++ b/src/manager/manager32.c @@ -3,7 +3,7 @@ #include "room.h" #include "functions.h" #include "area.h" -#include "utils.h" +#include "common.h" #include "game.h" typedef struct { diff --git a/src/manager/manager39.c b/src/manager/manager39.c index bf69d08a..b43de6e8 100644 --- a/src/manager/manager39.c +++ b/src/manager/manager39.c @@ -3,7 +3,7 @@ #include "screen.h" #include "area.h" #include "message.h" -#include "utils.h" +#include "common.h" #include "game.h" #include "functions.h" diff --git a/src/manager/managerB.c b/src/manager/managerB.c index 2219470c..6d0fc1fe 100644 --- a/src/manager/managerB.c +++ b/src/manager/managerB.c @@ -3,7 +3,7 @@ #include "flags.h" #include "room.h" #include "area.h" -#include "utils.h" +#include "common.h" #include "sound.h" /* diff --git a/src/manager/managerC.c b/src/manager/managerC.c index fc77cfc6..e8790891 100644 --- a/src/manager/managerC.c +++ b/src/manager/managerC.c @@ -9,7 +9,7 @@ #include "functions.h" #include "save.h" #include "area.h" -#include "utils.h" +#include "common.h" typedef struct { Manager manager; diff --git a/src/manager/managerF.c b/src/manager/managerF.c index 15fa53fa..3fb57bc2 100644 --- a/src/manager/managerF.c +++ b/src/manager/managerF.c @@ -7,7 +7,7 @@ #include "functions.h" #include "area.h" #include "message.h" -#include "utils.h" +#include "common.h" #include "tiles.h" #include "object.h" #include "item.h" diff --git a/src/message.c b/src/message.c index 586bee15..1383e0e6 100644 --- a/src/message.c +++ b/src/message.c @@ -2,7 +2,7 @@ #include "sound.h" #include "asm.h" #include "room.h" -#include "utils.h" +#include "common.h" #include "functions.h" #include "message.h" #include "save.h" @@ -35,7 +35,7 @@ extern void sub_0805EF40(Token* tok, const u8*); extern void RecoverUI(u32 bottomPt, u32 topPt); extern void RefreshUI(void); extern void sub_0805F918(u32, u32, u32); -extern u32 sub_0801D51C(u32, u8*, u32); +extern u32 DecToHex(u32, u8*, u32); u32 sub_08056FEC(u32, u8*); u32 GetCharacter(Token* tok); @@ -831,7 +831,7 @@ NONMATCH("asm/non_matching/textbox/sub_08056FEC.inc", u32 sub_08056FEC(u32 this, int iVar4; u8 local_1c[8]; - uVar1 = sub_0801D51C(this, param_2, this); + uVar1 = DecToHex(this, param_2, this); uVar1 = uVar1 & 0xfffffff; iVar4 = 0; do { diff --git a/src/npc/zeldaFollower.c b/src/npc/zeldaFollower.c index fc0890fb..5cbaa03f 100644 --- a/src/npc/zeldaFollower.c +++ b/src/npc/zeldaFollower.c @@ -1,7 +1,7 @@ #include "global.h" #include "entity.h" #include "functions.h" -#include "utils.h" +#include "common.h" extern void sub_08068318(Entity*); extern void sub_0806854C(Entity*, u32*); diff --git a/src/npcUtils.c b/src/npcUtils.c index e4739226..d44f3336 100644 --- a/src/npcUtils.c +++ b/src/npcUtils.c @@ -5,6 +5,7 @@ #include "definitions.h" #include "save.h" #include "npc.h" +#include "kinstone.h" extern const NPCDefinition gNPCDefinitions[]; @@ -287,7 +288,7 @@ u32 UpdateFuseInteraction(Entity* ent) { u32 ret; sub_0801E00C(); ret = -1; - switch (gUnk_02022740[0]) { + switch (gFuseInfo._0) { default: ret = 0; break; diff --git a/src/object/lockedDoor.c b/src/object/lockedDoor.c index 6f23a9d8..5a38d7a1 100644 --- a/src/object/lockedDoor.c +++ b/src/object/lockedDoor.c @@ -6,6 +6,7 @@ #include "functions.h" #include "effects.h" #include "game.h" +#include "common.h" void sub_08083338(Entity*); void sub_080834B4(Entity*); diff --git a/src/player.c b/src/player.c index 65af62d8..dad3ec08 100644 --- a/src/player.c +++ b/src/player.c @@ -4,7 +4,7 @@ #include "entity.h" #include "player.h" #include "message.h" -#include "utils.h" +#include "common.h" #include "area.h" #include "item.h" #include "save.h" diff --git a/src/playerItem/playerItemPacciCane.c b/src/playerItem/playerItemPacciCane.c index 23d16cd3..471f180e 100644 --- a/src/playerItem/playerItemPacciCane.c +++ b/src/playerItem/playerItemPacciCane.c @@ -1,7 +1,7 @@ #include "entity.h" #include "sound.h" #include "functions.h" -#include "utils.h" +#include "common.h" #include "message.h" #include "save.h" diff --git a/src/playerItem/playerItemSwordBeam.c b/src/playerItem/playerItemSwordBeam.c index 0d72189d..671c13b5 100644 --- a/src/playerItem/playerItemSwordBeam.c +++ b/src/playerItem/playerItemSwordBeam.c @@ -4,6 +4,7 @@ #include "functions.h" #include "sound.h" #include "effects.h" +#include "common.h" extern void (*const gUnk_080B43F4[])(Entity*); diff --git a/src/playerItemUtils.c b/src/playerItemUtils.c index be571896..1dd23ad1 100644 --- a/src/playerItemUtils.c +++ b/src/playerItemUtils.c @@ -1,7 +1,7 @@ #include "entity.h" #include "functions.h" #include "save.h" -#include "utils.h" +#include "common.h" #include "sound.h" #include "flags.h" #include "message.h" diff --git a/src/projectile/winder.c b/src/projectile/winder.c index 0075763c..7a0471e6 100644 --- a/src/projectile/winder.c +++ b/src/projectile/winder.c @@ -1,7 +1,7 @@ #include "entity.h" #include "asm.h" #include "functions.h" -#include "utils.h" +#include "common.h" extern void (*const Winder_Actions[])(Entity*); extern const u8 gUnk_0812A6BC[]; diff --git a/src/room.c b/src/room.c index d752abfb..660fcacd 100644 --- a/src/room.c +++ b/src/room.c @@ -3,7 +3,7 @@ #include "room.h" #include "flags.h" #include "functions.h" -#include "utils.h" +#include "common.h" #include "object.h" #include "game.h" diff --git a/src/roomInit.c b/src/roomInit.c index 384c7b79..3872b39e 100644 --- a/src/roomInit.c +++ b/src/roomInit.c @@ -1,7 +1,7 @@ #include "global.h" #include "main.h" -#include "utils.h" +#include "common.h" #include "functions.h" diff --git a/src/script.c b/src/script.c index b2648251..96b6abf9 100644 --- a/src/script.c +++ b/src/script.c @@ -6,6 +6,7 @@ #include "object.h" #include "npc.h" +#include "kinstone.h" #include "functions.h" @@ -1154,7 +1155,7 @@ void ScriptCommand_0807E9F0(Entity* entity, ScriptExecutionContext* context) { u32 tmp; sub_0801E00C(); tmp = 1; - switch (gUnk_02022740[0]) { + switch (gFuseInfo._0) { case 2: gPlayerState.controlMode = CONTROL_DISABLED; gUnk_02034490[0] = tmp; diff --git a/src/sound.c b/src/sound.c index 32dc20c4..aa12853b 100644 --- a/src/sound.c +++ b/src/sound.c @@ -2,7 +2,7 @@ #include "main.h" #include "gba/m4a.h" #include "sound.h" -#include "utils.h" +#include "common.h" #define IS_BGM(song) ((song)-1 <= NUM_BGM - 1) #define IS_SFX(song) ((song)-1 > NUM_BGM - 1) diff --git a/src/sub_0807CA18.c b/src/sub_0807CA18.c index 6a342989..01768a24 100644 --- a/src/sub_0807CA18.c +++ b/src/sub_0807CA18.c @@ -1,6 +1,6 @@ #include "global.h" #include "save.h" -#include "utils.h" +#include "common.h" extern void sub_0807C960(); diff --git a/src/text.c b/src/text.c index 7dc44443..2ca3d929 100644 --- a/src/text.c +++ b/src/text.c @@ -1,5 +1,5 @@ #include "global.h" -#include "utils.h" +#include "common.h" #include "structures.h" #include "functions.h" #include "asm.h" diff --git a/src/title.c b/src/title.c index b31c67e8..7f65c343 100644 --- a/src/title.c +++ b/src/title.c @@ -1,7 +1,7 @@ #include "sound.h" #include "main.h" #include "entity.h" -#include "utils.h" +#include "common.h" #include "screen.h" #include "object.h" #include "message.h" diff --git a/src/utils.c b/src/utils.c deleted file mode 100644 index f8ae7c2d..00000000 --- a/src/utils.c +++ /dev/null @@ -1,205 +0,0 @@ -#include "global.h" -#include "utils.h" -#include "structures.h" -#include "screen.h" - -static void StoreKeyInput(Input* input, u32 keyInput); - -typedef struct { - u16 paletteId; - u8 destPaletteNum; - u8 numPalettes; -} PaletteGroup; - -typedef struct { - union { - int raw; - struct { - u8 filler0[0x3]; - u8 unk3; - } bytes; - } unk0; - u32 dest; - u32 unk8; -} GfxItem; - -extern const PaletteGroup* gPaletteGroups[]; -extern const u8 gGlobalGfxAndPalettes[]; -extern u32 gUsedPalettes; -extern u16 gPaletteBuffer[]; -extern const GfxItem* gGfxGroups[]; - -void MemFill16(u32 value, void* dest, u32 size) { - DmaFill16(3, value, dest, size); -} - -void MemFill32(u32 value, void* dest, u32 size) { - DmaFill32(3, value, dest, size); -} - -void MemClear(void* dest, u32 size) { - u32 zero = 0; - - // alignment check - switch (((intptr_t)dest | size) % 4) { - case 0: - MemFill32(0, dest, size); - break; - case 2: - MemFill16(0, dest, size); - break; - default: - do { - *(u8*)dest = zero; - dest++; - size--; - } while (size != 0); - } -} - -void MemCopy(const void* src, void* dest, u32 size) { - switch (((intptr_t)src | (intptr_t)dest | size) % 4) { - case 0: - DmaCopy32(3, src, dest, size); - break; - case 2: - DmaCopy16(3, src, dest, size); - break; - default: - do { - *(u8*)dest = *(u8*)src; - src++; - dest++; - } while (--size); - } -} - -void ReadKeyInput(void) { - u32 keyInput = ~REG_KEYINPUT & KEYS_MASK; - StoreKeyInput(&gInput, keyInput); -} - -static void StoreKeyInput(Input* input, u32 keyInput) { - u32 heldKeys = input->heldKeys; - u32 difference = keyInput & ~heldKeys; - input->newKeys = difference; - if (keyInput == heldKeys) { - if (--input->unk7 == 0) { - input->unk7 = 4; - input->unk4 = keyInput; - } else { - input->unk4 = 0; - } - } else { - input->unk7 = 20; - input->unk4 = difference; - } - input->heldKeys = keyInput; -} - -void LoadPaletteGroup(u32 group) { - const PaletteGroup* paletteGroup = gPaletteGroups[group]; - while (1) { - u32 destPaletteNum = paletteGroup->destPaletteNum; - u32 numPalettes = paletteGroup->numPalettes & 0xF; - if (numPalettes == 0) { - numPalettes = 16; - } - LoadPalettes(&gGlobalGfxAndPalettes[paletteGroup->paletteId * 32], destPaletteNum, numPalettes); - if ((paletteGroup->numPalettes & 0x80) == 0) { - break; - } - paletteGroup++; - } -} - -void LoadPalettes(const u8* src, s32 destPaletteNum, s32 numPalettes) { - u16* dest; - u32 size = numPalettes * 32; - u32 usedPalettesMask = 1 << destPaletteNum; - while (--numPalettes > 0) { - usedPalettesMask |= (usedPalettesMask << 1); - } - gUsedPalettes |= usedPalettesMask; - dest = &gPaletteBuffer[destPaletteNum * 16]; - DmaCopy32(3, src, dest, size); -} - -void SetColor(u32 colorIndex, u32 color) { - gPaletteBuffer[colorIndex] = color; - gUsedPalettes |= 1 << (colorIndex / 16); -} - -void SetFillColor(u32 color, u32 disable_layers) { - if (disable_layers) { - gScreen.lcd.displayControlMask = ~(DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON); - } else { - gScreen.lcd.displayControlMask = ~0; - } - SetColor(0, color); -} - -void LoadGfxGroup(u32 group) { - u32 terminator; - u32 dmaCtrl; - int gfxOffset; - const u8* src; - u32 dest; - int size; - const GfxItem* gfxItem = gGfxGroups[group]; - while (1) { - u32 loadGfx = FALSE; - u32 ctrl = gfxItem->unk0.bytes.unk3; - ctrl &= 0xF; - switch (ctrl) { - case 0x7: - loadGfx = TRUE; - break; - case 0xD: - return; - case 0xE: - if (gSaveHeader->gameLanguage != 0 && gSaveHeader->gameLanguage != 1) { - loadGfx = TRUE; - } - break; - case 0xF: - if (gSaveHeader->gameLanguage != 0) { - loadGfx = TRUE; - } - break; - default: - if (ctrl == gSaveHeader->gameLanguage) { - loadGfx = TRUE; - } - break; - } - - if (loadGfx) { - gfxOffset = gfxItem->unk0.raw & 0xFFFFFF; - src = &gGlobalGfxAndPalettes[gfxOffset]; - dest = gfxItem->dest; - size = gfxItem->unk8; - dmaCtrl = 0x80000000; - if (size < 0) { - if (dest >= VRAM) { - LZ77UnCompVram(src, (void*)dest); - } else { - LZ77UnCompWram(src, (void*)dest); - } - } else { - DmaSet(3, src, dest, dmaCtrl | ((u32)size >> 1)); - } - } - - terminator = gfxItem->unk0.bytes.unk3; - terminator &= 0x80; - gfxItem++; - if (!terminator) { - break; - } - } -} - -/* TODO: - clear OAM, zMalloc, etc. -*/