sub_803FE30

This commit is contained in:
DizzyEggg
2024-10-09 10:08:03 +02:00
parent 94b0d1cedd
commit 4b7e9c6597
3 changed files with 360 additions and 947 deletions

View File

@@ -6,954 +6,7 @@
.text
thumb_func_start sub_803F7BC
sub_803F7BC:
push {r4-r6,lr}
sub sp, 0x10
ldr r6, _0803F800
ldr r4, [r6]
ldr r0, _0803F804
adds r5, r4, r0
movs r1, 0
ldrsh r0, [r5, r1]
movs r2, 0x2
ldrsh r1, [r5, r2]
bl GetTile
ldrb r1, [r0, 0x9]
ldr r2, _0803F808
adds r0, r4, r2
ldrb r0, [r0]
cmp r0, 0
bne _0803F7F4
adds r2, 0x1
adds r0, r4, r2
ldrb r0, [r0]
cmp r0, 0
bne _0803F7F4
adds r2, 0xB
adds r0, r4, r2
ldrb r0, [r0]
cmp r0, 0
beq _0803F80C
_0803F7F4:
movs r0, 0
movs r1, 0
bl sub_8005838
b _0803F86A
.align 2, 0
_0803F800: .4byte gDungeon
_0803F804: .4byte 0x000181e8
_0803F808: .4byte 0x0001820b
_0803F80C:
cmp r1, 0xFF
bne _0803F82C
ldr r1, _0803F828
adds r0, r4, r1
ldrb r0, [r0]
movs r1, 0x2
cmp r0, 0x2
bne _0803F81E
movs r1, 0x1
_0803F81E:
movs r0, 0
bl sub_8005838
b _0803F86A
.align 2, 0
_0803F828: .4byte 0x00018209
_0803F82C:
lsls r0, r1, 3
subs r0, r1
lsls r0, 2
ldr r2, _0803F874
adds r0, r2
ldr r2, [r6]
adds r2, r0
movs r0, 0x8
ldrsh r1, [r5, r0]
ldr r0, [r2, 0xC]
subs r0, r1
str r0, [sp]
movs r0, 0xA
ldrsh r1, [r5, r0]
ldr r0, [r2, 0x10]
subs r0, r1
str r0, [sp, 0x4]
movs r0, 0x8
ldrsh r1, [r5, r0]
ldr r0, [r2, 0x14]
subs r0, r1
str r0, [sp, 0x8]
movs r0, 0xA
ldrsh r1, [r5, r0]
ldr r0, [r2, 0x18]
subs r0, r1
str r0, [sp, 0xC]
mov r0, sp
movs r1, 0x3
bl sub_8005838
_0803F86A:
add sp, 0x10
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_0803F874: .4byte 0x000104c4
thumb_func_end sub_803F7BC
thumb_func_start sub_803F878
sub_803F878:
push {r4-r7,lr}
mov r7, r8
push {r7}
adds r2, r0, 0
adds r6, r1, 0
ldr r0, _0803F92C
ldr r7, [r0]
ldr r0, _0803F930
adds r5, r7, r0
ldr r0, [r5, 0x8]
str r0, [r5, 0xC]
ldr r0, [r5]
str r0, [r5, 0x4]
adds r0, r2, 0
cmp r2, 0
bge _0803F89A
adds r0, 0xFF
_0803F89A:
asrs r0, 8
subs r0, 0x78
movs r1, 0
mov r8, r1
strh r0, [r5, 0x8]
adds r0, r6, 0
cmp r6, 0
bge _0803F8AC
adds r0, 0xFF
_0803F8AC:
asrs r0, 8
subs r0, 0x60
strh r0, [r5, 0xA]
movs r4, 0xC0
lsls r4, 5
adds r0, r2, 0
adds r1, r4, 0
bl __divsi3
strh r0, [r5]
adds r0, r6, 0
adds r1, r4, 0
bl __divsi3
strh r0, [r5, 0x2]
ldr r2, _0803F934
adds r0, r7, r2
mov r1, r8
strb r1, [r0]
adds r2, 0x1
adds r0, r7, r2
strb r1, [r0]
ldr r1, _0803F938
adds r0, r7, r1
mov r2, r8
strb r2, [r0]
adds r1, 0x5
adds r0, r7, r1
strb r2, [r0]
ldr r1, _0803F93C
ldr r0, [r1]
cmp r0, 0
beq _0803F8F6
movs r0, 0
str r0, [r1]
bl SetBGOBJEnableFlags
_0803F8F6:
movs r2, 0xC
ldrsh r1, [r5, r2]
movs r2, 0x8
ldrsh r0, [r5, r2]
subs r1, r0
cmp r1, 0
bge _0803F906
negs r1, r1
_0803F906:
cmp r1, 0x7
bgt _0803F91E
movs r0, 0xE
ldrsh r1, [r5, r0]
movs r2, 0xA
ldrsh r0, [r5, r2]
subs r1, r0
cmp r1, 0
bge _0803F91A
negs r1, r1
_0803F91A:
cmp r1, 0x7
ble _0803F940
_0803F91E:
bl sub_8049ED4
adds r1, r5, 0
adds r1, 0x2B
movs r0, 0x1
strb r0, [r1]
b _0803F984
.align 2, 0
_0803F92C: .4byte gDungeon
_0803F930: .4byte 0x000181e8
_0803F934: .4byte 0x0001820d
_0803F938: .4byte 0x00018211
_0803F93C: .4byte gUnknown_202EDFC
_0803F940:
movs r0, 0xC
ldrsh r1, [r5, r0]
movs r2, 0x8
ldrsh r0, [r5, r2]
cmp r1, r0
bge _0803F956
movs r0, 0xF0
movs r1, 0
bl sub_804A1F0
b _0803F962
_0803F956:
cmp r1, r0
ble _0803F962
movs r0, 0
movs r1, 0
bl sub_804A1F0
_0803F962:
movs r0, 0xE
ldrsh r1, [r5, r0]
movs r2, 0xA
ldrsh r0, [r5, r2]
cmp r1, r0
bge _0803F978
movs r0, 0
movs r1, 0xA0
bl sub_804A49C
b _0803F984
_0803F978:
cmp r1, r0
ble _0803F984
movs r0, 0
movs r1, 0
bl sub_804A49C
_0803F984:
bl sub_803F7BC
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_803F878
thumb_func_start GetCameraXPos
GetCameraXPos:
ldr r0, _0803F9A8
ldr r0, [r0]
ldr r1, _0803F9AC
adds r0, r1
movs r1, 0x8
ldrsh r0, [r0, r1]
adds r0, 0x78
lsls r0, 8
bx lr
.align 2, 0
_0803F9A8: .4byte gDungeon
_0803F9AC: .4byte 0x000181e8
thumb_func_end GetCameraXPos
thumb_func_start GetCameraYPos
GetCameraYPos:
ldr r0, _0803F9C4
ldr r0, [r0]
ldr r1, _0803F9C8
adds r0, r1
movs r1, 0xA
ldrsh r0, [r0, r1]
adds r0, 0x60
lsls r0, 8
bx lr
.align 2, 0
_0803F9C4: .4byte gDungeon
_0803F9C8: .4byte 0x000181e8
thumb_func_end GetCameraYPos
thumb_func_start sub_803F9CC
sub_803F9CC:
push {r4,r5,lr}
ldr r0, _0803FA24
ldr r1, [r0]
ldr r2, _0803FA28
adds r0, r1, r2
ldr r4, [r0]
movs r5, 0
ldr r2, _0803FA2C
adds r0, r1, r2
ldrb r0, [r0]
cmp r0, 0
bne _0803FA0C
ldr r2, _0803FA30
adds r0, r1, r2
ldrb r0, [r0]
cmp r0, 0
bne _0803FA0C
bl sub_800EC74
lsls r0, 24
cmp r0, 0
bne _0803FA0C
cmp r4, 0
beq _0803FA08
adds r0, r4, 0
bl GetEntityType
cmp r0, 0x1
bne _0803FA08
movs r5, 0x1
_0803FA08:
cmp r5, 0
bne _0803FA38
_0803FA0C:
ldr r0, _0803FA34
movs r2, 0
adds r0, 0x2
movs r1, 0x1C
_0803FA14:
strh r2, [r0]
adds r0, 0x2
subs r1, 0x1
cmp r1, 0
bge _0803FA14
bl sub_803F38C
b _0803FA3C
.align 2, 0
_0803FA24: .4byte gDungeon
_0803FA28: .4byte 0x000181f8
_0803FA2C: .4byte 0x0001356c
_0803FA30: .4byte 0x00018218
_0803FA34: .4byte gUnknown_202B038
_0803FA38:
bl sub_803FB74
_0803FA3C:
ldr r1, _0803FA48
movs r0, 0x1
strb r0, [r1]
pop {r4,r5}
pop {r0}
bx r0
.align 2, 0
_0803FA48: .4byte gUnknown_20274A5
thumb_func_end sub_803F9CC
thumb_func_start sub_803FA4C
sub_803FA4C:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x28
adds r4, r0, 0
mov r8, r1
lsls r2, 24
lsrs r2, 24
mov r12, r2
ldr r0, _0803FB4C
ldr r3, [r0]
ldr r0, _0803FB50
adds r0, r3, r0
str r0, [sp, 0x24]
ldr r7, _0803FB54
mov r1, sp
ldr r0, _0803FB58
ldm r0!, {r2,r5,r6}
stm r1!, {r2,r5,r6}
ldm r0!, {r2,r5,r6}
stm r1!, {r2,r5,r6}
ldm r0!, {r2,r5,r6}
stm r1!, {r2,r5,r6}
ldr r0, _0803FB5C
mov r10, r0
ldr r1, _0803FB60
mov r9, r1
ldr r2, [sp, 0x24]
movs r5, 0x3E
ldrsh r0, [r2, r5]
cmp r4, r0
bne _0803FA9C
ldr r6, _0803FB64
adds r0, r3, r6
movs r1, 0
ldrsh r0, [r0, r1]
cmp r8, r0
beq _0803FB3A
_0803FA9C:
mov r2, r12
cmp r2, 0
bne _0803FAA6
ldr r5, _0803FB68
mov r9, r5
_0803FAA6:
ldr r6, [sp, 0x24]
strh r4, [r6, 0x3E]
ldr r1, _0803FB64
adds r0, r3, r1
mov r2, r8
strh r2, [r0]
mov r5, r8
cmp r5, 0x5F
ble _0803FAC8
movs r5, 0x60
lsls r0, r4, 1
adds r0, r4
lsls r0, 5
mov r1, r8
bl __divsi3
adds r4, r0, 0
_0803FAC8:
movs r3, 0
mov r8, r3
movs r6, 0x58
mov r12, r6
_0803FAD0:
ldr r6, _0803FB6C
adds r2, r4, 0
adds r0, r5, 0
cmp r4, 0x7
ble _0803FADC
movs r2, 0x8
_0803FADC:
cmp r5, 0x7
ble _0803FAE2
movs r0, 0x8
_0803FAE2:
lsls r0, 2
mov r3, sp
adds r1, r3, r0
lsls r0, r2, 2
add r0, sp
ldr r2, [r0]
ldr r3, [r1]
adds r1, r3, 0
bics r1, r2
mov r0, r10
ands r1, r0
mov r0, r9
ands r0, r2
orrs r0, r1
ands r6, r3
mov r1, r8
stm r7!, {r1}
stm r7!, {r6}
stm r7!, {r0}
stm r7!, {r0}
stm r7!, {r0}
stm r7!, {r0}
stm r7!, {r6}
stm r7!, {r1}
subs r4, 0x8
subs r5, 0x8
cmp r4, 0
bge _0803FB1C
movs r4, 0
_0803FB1C:
cmp r5, 0
bge _0803FB22
movs r5, 0
_0803FB22:
movs r2, 0x8
negs r2, r2
add r12, r2
mov r3, r12
cmp r3, 0
bge _0803FAD0
ldr r0, _0803FB70
movs r2, 0xC0
lsls r2, 1
ldr r1, _0803FB54
bl sub_80098BC
_0803FB3A:
add sp, 0x28
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0803FB4C: .4byte gDungeon
_0803FB50: .4byte 0x000181e8
_0803FB54: .4byte gUnknown_3001018
_0803FB58: .4byte gUnknown_80F6490
_0803FB5C: .4byte 0x22222222
_0803FB60: .4byte 0x44444444
_0803FB64: .4byte 0x00018228
_0803FB68: .4byte 0x55555555
_0803FB6C: .4byte 0x77777777
_0803FB70: .4byte 0x06005980
thumb_func_end sub_803FA4C
thumb_func_start sub_803FB74
sub_803FB74:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x4
ldr r0, _0803FBE8
ldr r0, [r0]
ldr r1, _0803FBEC
adds r7, r0, r1
movs r4, 0
movs r2, 0
str r2, [sp]
ldr r0, [r7, 0x10]
ldr r0, [r0, 0x70]
movs r1, 0xE
ldrsh r3, [r0, r1]
mov r9, r3
movs r3, 0x10
ldrsh r2, [r0, r3]
mov r8, r2
ldrb r1, [r0, 0x9]
mov r10, r1
movs r2, 0xE
ldrsh r1, [r0, r2]
cmp r1, 0
ble _0803FBBA
mov r0, r8
cmp r0, 0
bge _0803FBB2
adds r0, 0x3
_0803FBB2:
asrs r0, 2
cmp r1, r0
bgt _0803FBBA
movs r4, 0x1
_0803FBBA:
ldr r0, [r7, 0x10]
ldr r0, [r0, 0x70]
movs r3, 0x9E
lsls r3, 1
adds r0, r3
ldr r0, [r0]
bl FixedPointToInt
cmp r0, 0
bne _0803FBD2
movs r0, 0x1
str r0, [sp]
_0803FBD2:
cmp r4, 0
beq _0803FBF4
ldr r0, _0803FBF0
ldr r0, [r0]
movs r1, 0x10
ands r0, r1
cmp r0, 0
beq _0803FBF4
movs r5, 0x20
movs r6, 0x20
b _0803FBF8
.align 2, 0
_0803FBE8: .4byte gDungeon
_0803FBEC: .4byte 0x000181e8
_0803FBF0: .4byte gUnknown_202EDCC
_0803FBF4:
movs r5, 0
movs r6, 0
_0803FBF8:
ldr r1, [sp]
cmp r1, 0
beq _0803FC0E
ldr r0, _0803FC20
ldr r0, [r0]
movs r1, 0x10
ands r0, r1
cmp r0, 0
beq _0803FC0E
movs r5, 0x30
movs r6, 0x30
_0803FC0E:
cmp r5, 0
bne _0803FC30
adds r0, r7, 0
adds r0, 0x2A
ldrb r0, [r0]
cmp r0, 0
beq _0803FC24
movs r5, 0x60
b _0803FC30
.align 2, 0
_0803FC20: .4byte gUnknown_202EDCC
_0803FC24:
ldr r0, _0803FCE4
ldr r0, [r0]
ldrb r0, [r0, 0xB]
cmp r0, 0
beq _0803FC30
movs r5, 0x40
_0803FC30:
cmp r6, 0
bne _0803FC40
ldr r0, _0803FCE4
ldr r0, [r0]
ldrb r0, [r0, 0xB]
cmp r0, 0
beq _0803FC40
movs r6, 0x40
_0803FC40:
movs r2, 0x36
ldrsh r0, [r7, r2]
cmp r0, r5
beq _0803FC78
strh r5, [r7, 0x36]
lsls r5, 2
ldr r4, _0803FCE8
adds r1, r5, r4
movs r0, 0xFC
bl SetBGPaletteBufferColorArray
adds r1, r4, 0x4
adds r1, r5, r1
movs r0, 0xFD
bl SetBGPaletteBufferColorArray
adds r1, r4, 0
adds r1, 0x8
adds r1, r5, r1
movs r0, 0xFE
bl SetBGPaletteBufferColorArray
adds r4, 0xC
adds r5, r4
movs r0, 0xFF
adds r1, r5, 0
bl SetBGPaletteBufferColorArray
_0803FC78:
movs r3, 0x38
ldrsh r0, [r7, r3]
cmp r0, r6
beq _0803FCB0
strh r6, [r7, 0x38]
lsls r5, r6, 2
ldr r4, _0803FCE8
adds r1, r5, r4
movs r0, 0xFC
bl nullsub_5
adds r1, r4, 0x4
adds r1, r5, r1
movs r0, 0xFD
bl nullsub_5
adds r1, r4, 0
adds r1, 0x8
adds r1, r5, r1
movs r0, 0xFE
bl nullsub_5
adds r4, 0xC
adds r5, r4
movs r0, 0xFF
adds r1, r5, 0
bl nullsub_5
_0803FCB0:
ldr r5, _0803FCEC
ldr r0, _0803FCF0
ldr r2, [r0]
ldr r0, _0803FCF4
adds r1, r2, r0
movs r3, 0x14
ldrsh r0, [r2, r3]
ldrb r1, [r1]
adds r6, r0, r1
movs r1, 0x3A
ldrsh r0, [r7, r1]
adds r4, r7, 0
adds r4, 0x2E
cmp r0, r6
beq _0803FD3E
strh r6, [r7, 0x3A]
ldr r3, _0803FCF8
adds r0, r2, r3
ldrb r0, [r0]
bl IsStairDirectionUp
lsls r0, 24
cmp r0, 0
beq _0803FCFC
movs r0, 0
b _0803FD00
.align 2, 0
_0803FCE4: .4byte gGameOptionsRef
_0803FCE8: .4byte gUnknown_202D068
_0803FCEC: .4byte gUnknown_202B038
_0803FCF0: .4byte gDungeon
_0803FCF4: .4byte 0x00000645
_0803FCF8: .4byte 0x00000644
_0803FCFC:
ldr r1, _0803FD20
adds r0, r1, 0
_0803FD00:
strh r0, [r5, 0x2]
cmp r6, 0x9
bgt _0803FD28
adds r1, r5, 0x4
adds r4, r7, 0
adds r4, 0x2E
ldrb r2, [r4]
adds r0, r6, 0
movs r3, 0x1
bl sub_803FE30
ldr r2, _0803FD24
adds r0, r2, 0
strh r0, [r5, 0x6]
b _0803FD3E
.align 2, 0
_0803FD20: .4byte 0x0000f2be
_0803FD24: .4byte 0x0000f2b8
_0803FD28:
adds r1, r5, 0x4
adds r4, r7, 0
adds r4, 0x2E
ldrb r2, [r4]
adds r0, r6, 0
movs r3, 0
bl sub_803FE30
ldr r3, _0803FE10
adds r0, r3, 0
strh r0, [r5, 0x8]
_0803FD3E:
movs r1, 0x3C
ldrsh r0, [r7, r1]
cmp r0, r10
beq _0803FD64
mov r2, r10
strh r2, [r7, 0x3C]
ldr r3, _0803FE14
adds r0, r3, 0
strh r0, [r5, 0xA]
ldr r1, _0803FE18
adds r0, r1, 0
strh r0, [r5, 0xC]
adds r1, r5, 0
adds r1, 0xE
ldrb r2, [r4]
mov r0, r10
movs r3, 0
bl sub_803FE30
_0803FD64:
movs r2, 0x3E
ldrsh r0, [r7, r2]
cmp r0, r9
beq _0803FD84
ldr r3, _0803FE1C
adds r0, r3, 0
strh r0, [r5, 0x12]
ldr r1, _0803FE20
adds r0, r1, 0
strh r0, [r5, 0x14]
adds r1, r5, 0
adds r1, 0x16
ldrb r2, [r4]
mov r0, r9
bl sub_803FF18
_0803FD84:
adds r6, r7, 0
adds r6, 0x40
movs r2, 0
ldrsh r0, [r6, r2]
cmp r0, r8
beq _0803FDA2
ldr r3, _0803FE24
adds r0, r3, 0
strh r0, [r5, 0x1C]
adds r1, r5, 0
adds r1, 0x1E
ldrb r2, [r4]
mov r0, r8
bl sub_803FF18
_0803FDA2:
ldrb r2, [r4]
mov r0, r9
mov r1, r8
bl sub_803FA4C
mov r0, r8
strh r0, [r6]
mov r1, r9
strh r1, [r7, 0x3E]
mov r0, r8
cmp r0, 0
bge _0803FDBC
adds r0, 0x7
_0803FDBC:
asrs r1, r0, 3
adds r4, r7, 0
adds r4, 0x42
strh r1, [r4]
movs r0, 0x7
mov r2, r8
ands r2, r0
cmp r2, 0
beq _0803FDD2
adds r0, r1, 0x1
strh r0, [r4]
_0803FDD2:
movs r3, 0
ldrsh r0, [r4, r3]
cmp r0, 0xB
ble _0803FDDE
movs r0, 0xC
strh r0, [r4]
_0803FDDE:
movs r1, 0
ldr r0, _0803FE28
movs r2, 0xB3
lsls r2, 2
adds r4, r2, 0
ldr r2, _0803FE2C
adds r3, r2, 0
adds r2, r0, 0
adds r2, 0x24
_0803FDF0:
adds r0, r1, r4
orrs r0, r3
strh r0, [r2]
adds r2, 0x2
adds r1, 0x1
cmp r1, 0xB
ble _0803FDF0
add sp, 0x4
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0803FE10: .4byte 0x0000f2b8
_0803FE14: .4byte 0x0000f2b9
_0803FE18: .4byte 0x0000f2ba
_0803FE1C: .4byte 0x0000f2bb
_0803FE20: .4byte 0x0000f2bc
_0803FE24: .4byte 0x0000f2bd
_0803FE28: .4byte gUnknown_202B038
_0803FE2C: .4byte 0xfffff000
thumb_func_end sub_803FB74
thumb_func_start sub_803FE30
sub_803FE30:
push {r4-r7,lr}
mov r7, r8
push {r7}
adds r5, r0, 0
adds r4, r1, 0
lsls r2, 24
lsrs r2, 24
adds r1, r2, 0
lsls r3, 24
lsrs r3, 24
mov r12, r3
movs r0, 0
cmp r2, 0
bne _0803FE4E
movs r0, 0x37
_0803FE4E:
cmp r5, 0x64
ble _0803FE70
cmp r2, 0
beq _0803FE60
ldr r1, _0803FE5C
adds r0, r1, 0
b _0803FE64
.align 2, 0
_0803FE5C: .4byte 0x0000f291
_0803FE60:
ldr r2, _0803FE6C
adds r0, r2, 0
_0803FE64:
strh r0, [r4]
strh r0, [r4, 0x2]
b _0803FF00
.align 2, 0
_0803FE6C: .4byte 0x0000f2c8
_0803FE70:
cmp r5, 0x64
bne _0803FEBC
ldr r1, _0803FE84
adds r0, r1, 0
strh r0, [r4]
ldr r2, _0803FE88
adds r0, r2, 0
strh r0, [r4, 0x2]
b _0803FF00
.align 2, 0
_0803FE84: .4byte 0x0000f294
_0803FE88: .4byte 0x0000f295
_0803FE8C:
ldr r1, _0803FEB4
lsls r0, r6, 3
adds r0, r6
adds r0, r2
lsls r0, 1
adds r0, r1
ldrh r0, [r0]
strh r0, [r4]
subs r0, r5, r3
adds r0, r7
movs r1, 0x96
lsls r1, 2
adds r0, r1
ldr r2, _0803FEB8
adds r1, r2, 0
orrs r0, r1
mov r1, r8
strh r0, [r1]
b _0803FF00
.align 2, 0
_0803FEB4: .4byte gUnknown_80F64D8
_0803FEB8: .4byte 0xfffff000
_0803FEBC:
adds r2, r4, 0x2
mov r8, r2
adds r7, r0, 0
adds r7, 0x30
cmp r5, 0x9
ble _0803FEE2
movs r6, 0
cmp r1, 0
bne _0803FED0
movs r6, 0x1
_0803FED0:
movs r2, 0
ldr r0, _0803FF0C
_0803FED4:
ldr r3, [r0]
cmp r3, r5
ble _0803FE8C
adds r0, 0x4
adds r2, 0x1
cmp r2, 0x8
ble _0803FED4
_0803FEE2:
mov r0, r12
cmp r0, 0
bne _0803FEF0
ldr r1, _0803FF10
adds r0, r1, 0
strh r0, [r4]
adds r4, 0x2
_0803FEF0:
adds r0, r5, r7
movs r2, 0x96
lsls r2, 2
adds r0, r2
ldr r2, _0803FF14
adds r1, r2, 0
orrs r0, r1
strh r0, [r4]
_0803FF00:
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_0803FF0C: .4byte gUnknown_80F64B4
_0803FF10: .4byte 0x0000f278
_0803FF14: .4byte 0xfffff000
thumb_func_end sub_803FE30
thumb_func_start sub_803FF18
sub_803FF18:

View File

@@ -118,6 +118,7 @@ typedef struct UnkDungeonGlobal_unk181E8_sub
s16 unk3C; // x3C
s16 unk3E; // x3E
s16 unk40; // x40
s16 unk42; // x42
} UnkDungeonGlobal_unk181E8_sub; // x44
// Sizeof: 0x1C

View File

@@ -9,10 +9,13 @@
#include "code_8009804.h"
#include "code_803E46C.h"
#include "dungeon_util.h"
#include "code_800E9E4.h"
#include "dungeon_pokemon_attributes.h"
#include "dungeon_map_access.h"
#include "sprite.h"
#include "bg_control.h"
#include "game_options.h"
#include "code_800558C.h"
#include "dungeon_range.h"
#include "code_806CD90.h"
#include "dungeon_items.h"
@@ -1073,4 +1076,360 @@ void sub_803F580(u8 a0)
sub_803F7BC();
}
void sub_803F7BC(void)
{
UnkDungeonGlobal_unk181E8_sub *strPtr = &gDungeon->unk181e8;
Tile *tile = GetTile(strPtr->cameraPos.x, strPtr->cameraPos.y);
u32 roomId = tile->room;
if (strPtr->unk1820B != 0 || strPtr->unk1820C != 0 || strPtr->unk18217 != 0) {
sub_8005838(NULL, 0);
}
else if (roomId == 0xFF) {
u32 kind = (strPtr->visibilityRange == 2) ? 1 : 2;
sub_8005838(NULL, kind);
}
else {
s32 sp[4];
RoomData *room = &gDungeon->roomData[roomId];
sp[0] = room->unkC - strPtr->cameraPixelPos.x;
sp[1] = room->unk10 - strPtr->cameraPixelPos.y;
sp[2] = room->unk14 - strPtr->cameraPixelPos.x;
sp[3] = room->unk18 - strPtr->cameraPixelPos.y;
sub_8005838(sp, 3);
}
}
void sub_803F878(s32 a0, s32 a1)
{
UnkDungeonGlobal_unk181E8_sub *strPtr = &gDungeon->unk181e8;
strPtr->cameraPixelPosMirror = strPtr->cameraPixelPos;
strPtr->cameraPosMirror = strPtr->cameraPos;
strPtr->cameraPixelPos.x = (a0 / 256) - 120;
strPtr->cameraPixelPos.y = (a1 / 256) - 96;
strPtr->cameraPos.x = a0 / 6144;
strPtr->cameraPos.y = a1 / 6144;
strPtr->unk1820D = 0;
strPtr->unk1820E = 0;
strPtr->unk18211 = 0;
strPtr->unk18216 = 0;
if (gUnknown_202EDFC != 0) {
gUnknown_202EDFC = 0;
SetBGOBJEnableFlags(0);
}
if (abs(strPtr->cameraPixelPosMirror.x - strPtr->cameraPixelPos.x) > 7 || abs(strPtr->cameraPixelPosMirror.y - strPtr->cameraPixelPos.y) > 7) {
sub_8049ED4();
strPtr->unk18213 = 1;
}
else {
if (strPtr->cameraPixelPosMirror.x < strPtr->cameraPixelPos.x) {
sub_804A1F0(240, 0);
}
else if (strPtr->cameraPixelPosMirror.x > strPtr->cameraPixelPos.x) {
sub_804A1F0(0, 0);
}
if (strPtr->cameraPixelPosMirror.y < strPtr->cameraPixelPos.y) {
sub_804A49C(0, 160);
}
else if (strPtr->cameraPixelPosMirror.y > strPtr->cameraPixelPos.y) {
sub_804A49C(0, 0);
}
}
sub_803F7BC();
}
s32 GetCameraXPos(void)
{
UnkDungeonGlobal_unk181E8_sub *strPtr = &gDungeon->unk181e8;
return (strPtr->cameraPixelPos.x + 120) * 256;
}
s32 GetCameraYPos(void)
{
UnkDungeonGlobal_unk181E8_sub *strPtr = &gDungeon->unk181e8;
return (strPtr->cameraPixelPos.y + 96) * 256;
}
void sub_803FB74(void);
extern u8 gUnknown_20274A5;
void sub_803F9CC(void)
{
s32 i;
Entity *cameraTarget = gDungeon->unk181e8.cameraTarget;
bool32 r5 = FALSE;
if (gDungeon->unk1356C != 0 || gDungeon->unk181e8.unk18218 != 0 || sub_800EC74() != 0) {
r5 = FALSE;
}
else if (cameraTarget != NULL && GetEntityType(cameraTarget) == ENTITY_MONSTER) {
r5 = TRUE;
}
if (!r5) {
for (i = 1; i < 30; i++) {
gUnknown_202B038[0][0][i] = 0;
}
sub_803F38C();
}
else {
sub_803FB74();
}
gUnknown_20274A5 = 1;
}
extern u32 gUnknown_3001018[];
extern const u32 gUnknown_80F6490[];
void sub_803FA4C(s32 a0, s32 a1, bool8 a2)
{
s32 i;
s32 r5;
u32 r10, r9;
u32 sp[9];
UnkDungeonGlobal_unk181E8_sub *strPtr = &gDungeon->unk181e8;
u32 *dst = gUnknown_3001018;
memcpy(sp, gUnknown_80F6490, sizeof(sp));
r10 = 0x22222222;
r9 = 0x44444444;
if (a0 == strPtr->unk3E && a1 == strPtr->unk40)
return;
if (!a2) {
r9 = 0x55555555;
}
strPtr->unk3E = a0;
strPtr->unk40 = a1;
r5 = a1;
if (r5 >= 96) {
r5 = 96;
a0 = (a0 * 96) / a1;
}
for (i = 0; i < 96; i += 8) {
u32 val0, val1;
u32 val6 = 0x77777777;
s32 id1 = a0;
s32 id2 = r5;
if (a0 >= 8) {
id1 = 8;
}
if (r5 >= 8) {
id2 = 8;
}
val1 = sp[id2] & ~(sp[id1]);
val1 &= r10;
val0 = (sp[id1] & r9) | val1;
val6 = sp[id2] & val6;
*(dst++) = 0;
*(dst++) = val6;
*(dst++) = val0;
*(dst++) = val0;
*(dst++) = val0;
*(dst++) = val0;
*(dst++) = val6;
*(dst++) = 0;
a0 -= 8;
r5 -= 8;
if (a0 < 0) {
a0 = 0;
}
if (r5 < 0) {
r5 = 0;
}
}
sub_80098BC((void *) VRAM + 0x5980, gUnknown_3001018, 0x180);
}
extern s32 gUnknown_202EDCC;
// 2d array? possibly the same as gUnknown_202D06C TODO: merge the variables
extern u8 gUnknown_202D068[];
void sub_803FE30(s32 a0, u16 *a1, u8 a2, u8 a3);
void sub_803FF18(s32 a0, u16 *a1, u8 a2);
void sub_803FB74(void)
{
s32 i;
u16 *arrPtr;
s32 r5, r6, unkFloor;
UnkDungeonGlobal_unk181E8_sub *strPtr = &gDungeon->unk181e8;
bool32 lowHp = FALSE;
bool32 hungry = FALSE;
EntityInfo *entInfo = GetEntInfo(strPtr->cameraTarget);
s32 hp = entInfo->HP;
s32 maxHp = entInfo->maxHPStat;
s32 level = entInfo->level;
if (entInfo->HP > 0 && entInfo->HP <= entInfo->maxHPStat / 4) {
lowHp = TRUE;
}
// reloaded again
entInfo = GetEntInfo(strPtr->cameraTarget);
if (FixedPointToInt(entInfo->belly) == 0) {
hungry = TRUE;
}
if (lowHp && (gUnknown_202EDCC & 16) != 0) {
r5 = 32, r6 = 32;
}
else {
r5 = 0, r6 = 0;
}
if (hungry && (gUnknown_202EDCC & 16) != 0) {
r5 = 48, r6 = 48;
}
if (r5 == 0) {
if (strPtr->unk18212 != 0) {
r5 = 96;
}
else if (gGameOptionsRef->playerGender != MALE) {
r5 = 64;
}
}
if (r6 == 0) {
if (gGameOptionsRef->playerGender != MALE) {
r6 = 64;
}
}
if (strPtr->unk36 != r5) {
strPtr->unk36 = r5;
SetBGPaletteBufferColorArray(0xFC, &gUnknown_202D068[0 + r5 * 4]);
SetBGPaletteBufferColorArray(0xFD, &gUnknown_202D068[4 + r5 * 4]);
SetBGPaletteBufferColorArray(0xFE, &gUnknown_202D068[8 + r5 * 4]);
SetBGPaletteBufferColorArray(0xFF, &gUnknown_202D068[12 + r5 * 4]);
}
if (strPtr->unk38 != r6) {
strPtr->unk38 = r6;
nullsub_5(0xFC, &gUnknown_202D068[0 + r6 * 4]);
nullsub_5(0xFD, &gUnknown_202D068[4 + r6 * 4]);
nullsub_5(0xFE, &gUnknown_202D068[8 + r6 * 4]);
nullsub_5(0xFF, &gUnknown_202D068[12 + r6 * 4]);
}
arrPtr = gUnknown_202B038[0][0];
unkFloor = gDungeon->unk14 + gDungeon->dungeonLocation.floor;
if (strPtr->unk3A != unkFloor) {
strPtr->unk3A = unkFloor;
if (IsStairDirectionUp(gDungeon->dungeonLocation.id)) {
arrPtr[1] = 0;
}
else {
arrPtr[1] = 0xF2BE;
}
if (unkFloor < 10) {
sub_803FE30(unkFloor, &arrPtr[2], strPtr->unk18216, 1);
arrPtr[3] = 0xF2B8;
}
else {
sub_803FE30(unkFloor, &arrPtr[2], strPtr->unk18216, 0);
arrPtr[4] = 0xF2B8;
}
}
if (strPtr->unk3C != level) {
strPtr->unk3C = level;
arrPtr[5] = 0xF2B9;
arrPtr[6] = 0xF2BA;
sub_803FE30(level, &arrPtr[7], strPtr->unk18216, 0);
}
if (strPtr->unk3E != hp) {
arrPtr[9] = 0xF2BB;
arrPtr[10] = 0xF2BC;
sub_803FF18(hp, &arrPtr[11], strPtr->unk18216);
}
if (strPtr->unk40 != maxHp) {
arrPtr[14] = 0xF2BD;
sub_803FF18(maxHp, &arrPtr[15], strPtr->unk18216);
}
sub_803FA4C(hp, maxHp, strPtr->unk18216);
strPtr->unk40 = maxHp;
strPtr->unk3E = hp;
strPtr->unk42 = maxHp / 8;
if (maxHp % 8 != 0) {
strPtr->unk42++;
}
if (strPtr->unk42 >= 12) {
strPtr->unk42 = 12;
}
for (i = 0; i < 12; i++) {
gUnknown_202B038[0][0][18 + i] = (0x2CC + i) | 0xF000;
}
}
extern const s32 gUnknown_80F64B4[];
extern const u16 gUnknown_80F64D8[][9];
void sub_803FE30(s32 a0, u16 *a1, u8 a2, u8 a3)
{
s32 var = 0;
if (!a2) {
var = 55;
}
if (a0 > 100) {
if (a2) {
a1[0] = 0xF291;
a1[1] = 0xF291;
}
else {
a1[0] = 0xF2C8;
a1[1] = 0xF2C8;
}
}
else if (a0 == 100) {
a1[0] = 0xF294;
a1[1] = 0xF295;
}
else {
// I thought 'ptr' was a compiler generated variable, but I couldn't match the function without declaring it.
u16 *ptr = a1 + 1;
s32 r7 = var + 48;
if (a0 >= 10) {
s32 i;
s32 arrId = (a2 == 0) ? 1 : 0;
for (i = 0; i < 9; i++) {
#ifndef NONMATCHING
a1++;a1--; // Good old matching trick.
#endif // NONMATCHING
if (gUnknown_80F64B4[i] <= a0) {
*a1 = gUnknown_80F64D8[arrId][i];
*ptr = (((a0 - gUnknown_80F64B4[i]) + r7) + 0x258) | 0xF000;
return;
}
}
}
if (a3 == 0) {
*(a1++) = 0xF278;
}
*a1 = (a0 + r7 + 0x258) | 0xF000;
}
}
//