mirror of
https://github.com/pret/pmd-red.git
synced 2026-10-01 13:28:04 -05:00
sub_803FE30
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user