Merge pull request #238 from notyourav/clr

color.c, utils->common.c
This commit is contained in:
notyourav
2022-01-01 18:29:08 -08:00
committed by GitHub
95 changed files with 3196 additions and 3867 deletions
-863
View File
@@ -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
+2 -2
View File
@@ -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
@@ -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
@@ -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
+28
View File
@@ -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
+100
View File
@@ -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
@@ -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
@@ -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
+34
View File
@@ -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
+39
View File
@@ -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
+71
View File
@@ -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
+14
View File
@@ -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
@@ -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
+221
View File
@@ -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
+14
View File
@@ -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
+39
View File
@@ -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
+28
View File
@@ -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
+44
View File
@@ -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
+40
View File
@@ -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
+75
View File
@@ -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
+189
View File
@@ -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
+211
View File
@@ -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
+72
View File
@@ -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
+59
View File
@@ -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
+51
View File
@@ -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
+69
View File
@@ -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
+112
View File
@@ -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
+58
View File
@@ -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
+171
View File
@@ -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
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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
+2 -2
View File
@@ -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
+16 -16
View File
@@ -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
+4 -4
View File
@@ -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
-2677
View File
File diff suppressed because it is too large Load Diff
-2
View File
@@ -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_*);
+21
View File
@@ -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
+12 -10
View File
@@ -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
+1 -1
View File
@@ -7,7 +7,7 @@
#include "sound.h"
#include "effects.h"
#include "flags.h"
#include "utils.h"
#include "common.h"
#include "entity.h"
+1
View File
@@ -3,6 +3,7 @@
#define ENTITY_H
#include "global.h"
#include "color.h"
#include "sprite.h"
#define MAX_ENTITIES 71
+4 -4
View File
@@ -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;
+1 -6
View File
@@ -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
+3
View File
@@ -101,4 +101,7 @@ union SplitHWord {
#define FORCE_WORD_ALIGNED __attribute__((packed, aligned(2)))
/* forward decls */
struct Entity_;
#endif // GUARD_GLOBAL_H
+28
View File
@@ -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
+2
View File
@@ -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);
+1 -1
View File
@@ -3,7 +3,7 @@
#include "global.h"
#include "asm.h"
#include "utils.h"
#include "common.h"
#include "sound.h"
#include "effects.h"
+1 -1
View File
@@ -3,7 +3,7 @@
#include "global.h"
#include "asm.h"
#include "utils.h"
#include "common.h"
#include "sound.h"
#include "flags.h"
+2 -2
View File
@@ -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];
+6 -2
View File
@@ -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];
+1 -1
View File
@@ -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;
-1
View File
@@ -135,7 +135,6 @@ typedef struct {
} PriorityHandler;
extern PriorityHandler gPriorityHandler;
extern u8 gUnk_02022740[];
extern u8 gUnk_02034490[];
typedef struct {
+3 -4
View File
@@ -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);
+1 -1
View File
@@ -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"
+1 -8
View File
@@ -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);
+1 -1
View File
@@ -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"
+84
View File
@@ -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));
+681
View File
@@ -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;
}
+1 -1
View File
@@ -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"
+1 -1
View File
@@ -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"
+1 -1
View File
@@ -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"
+1
View File
@@ -0,0 +1 @@
#include "global.h"
+1 -1
View File
@@ -1,5 +1,5 @@
#include "global.h"
#include "utils.h"
#include "common.h"
#include "functions.h"
void sub_080300AC(void) {
+1 -1
View File
@@ -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"
+1 -2
View File
@@ -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*);
+1 -1
View File
@@ -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);
+1 -1
View File
@@ -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"
+12 -13
View File
@@ -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;
+1 -1
View File
@@ -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"
+2 -2
View File
@@ -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;
+1 -1
View File
@@ -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"
-1
View File
@@ -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*);
+1 -1
View File
@@ -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"
+1 -1
View File
@@ -1,7 +1,7 @@
#include "manager.h"
#include "asm.h"
#include "functions.h"
#include "utils.h"
#include "common.h"
typedef struct {
struct Manager manager;
+1 -1
View File
@@ -3,7 +3,7 @@
#include "room.h"
#include "functions.h"
#include "area.h"
#include "utils.h"
#include "common.h"
#include "game.h"
typedef struct {
+1 -1
View File
@@ -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"
+1 -1
View File
@@ -3,7 +3,7 @@
#include "flags.h"
#include "room.h"
#include "area.h"
#include "utils.h"
#include "common.h"
#include "sound.h"
/*
+1 -1
View File
@@ -9,7 +9,7 @@
#include "functions.h"
#include "save.h"
#include "area.h"
#include "utils.h"
#include "common.h"
typedef struct {
Manager manager;
+1 -1
View File
@@ -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"
+3 -3
View File
@@ -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 {
+1 -1
View File
@@ -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*);
+2 -1
View File
@@ -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;
+1
View File
@@ -6,6 +6,7 @@
#include "functions.h"
#include "effects.h"
#include "game.h"
#include "common.h"
void sub_08083338(Entity*);
void sub_080834B4(Entity*);
+1 -1
View File
@@ -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"
+1 -1
View File
@@ -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"
+1
View File
@@ -4,6 +4,7 @@
#include "functions.h"
#include "sound.h"
#include "effects.h"
#include "common.h"
extern void (*const gUnk_080B43F4[])(Entity*);
+1 -1
View File
@@ -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"
+1 -1
View File
@@ -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[];
+1 -1
View File
@@ -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"
+1 -1
View File
@@ -1,7 +1,7 @@
#include "global.h"
#include "main.h"
#include "utils.h"
#include "common.h"
#include "functions.h"
+2 -1
View File
@@ -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;
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -1,6 +1,6 @@
#include "global.h"
#include "save.h"
#include "utils.h"
#include "common.h"
extern void sub_0807C960();
+1 -1
View File
@@ -1,5 +1,5 @@
#include "global.h"
#include "utils.h"
#include "common.h"
#include "structures.h"
#include "functions.h"
#include "asm.h"
+1 -1
View File
@@ -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"
-205
View File
@@ -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.
*/