mirror of
https://github.com/pret/pmd-sky.git
synced 2026-03-21 17:25:15 -05:00
ov11_022EC27C nonmatching
This commit is contained in:
parent
0a39f52159
commit
4e29e16ad4
|
|
@ -328,6 +328,7 @@
|
|||
.public ov11_022EBFC8
|
||||
.public ov11_022EC08C
|
||||
.public ov11_022EC240
|
||||
.public ov11_022EC27C
|
||||
.public ov11_02316AFC
|
||||
.public ov11_02316B04
|
||||
.public ov11_02316B14
|
||||
|
|
@ -1766,7 +1767,6 @@
|
|||
.public ov11_02320C58
|
||||
.public ov11_02320C6C
|
||||
.public ov11_02320C80
|
||||
.public ov11_02320C94
|
||||
.public ov11_02320CA8
|
||||
.public ov11_02320CB8
|
||||
.public ov11_02320CC8
|
||||
|
|
@ -1,765 +1,8 @@
|
|||
.include "asm/macros.inc"
|
||||
.include "overlay_11_022EC27C.inc"
|
||||
.include "overlay_11_022ECD24.inc"
|
||||
|
||||
.text
|
||||
|
||||
arm_func_start ov11_022EC27C
|
||||
ov11_022EC27C: ; 0x022EC27C
|
||||
stmdb sp!, {r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
||||
sub sp, sp, #0x13c
|
||||
mov sl, r0
|
||||
ldrb r0, [sl, #0x2bc]
|
||||
mov r4, r1
|
||||
cmp r0, #0
|
||||
moveq r0, #6
|
||||
streq r0, [sp]
|
||||
movne r0, #0xf
|
||||
strne r0, [sp]
|
||||
mvn r0, #0
|
||||
cmp r4, r0
|
||||
mov r0, sl
|
||||
bne _022EC2BC
|
||||
bl ov11_022EC08C
|
||||
b _022ECCF4
|
||||
_022EC2BC:
|
||||
bl ov11_022EBFC8
|
||||
mov r0, #1
|
||||
strh r0, [sl]
|
||||
mov r0, #0
|
||||
strb r0, [sl, #0x1c0]
|
||||
add r0, sl, #0x100
|
||||
strh r4, [r0, #0xbe]
|
||||
ldrsh r1, [r0, #0xbe]
|
||||
add r0, sp, #0xcc
|
||||
bl LoadBackgroundAttributes
|
||||
ldr r1, _022ECCFC ; =ov11_02320C58
|
||||
add r0, sp, #0x4c
|
||||
add r2, sp, #0xcc
|
||||
bl sprintf
|
||||
ldr r2, [sp]
|
||||
add r1, sp, #0x4c
|
||||
add r0, sl, #0x174
|
||||
bl LoadFileFromRom
|
||||
ldr r1, _022ECD00 ; =ov11_02320C6C
|
||||
add r0, sp, #0x4c
|
||||
add r2, sp, #0xd6
|
||||
bl sprintf
|
||||
ldr r2, _022ECD04 ; =0x0000030F
|
||||
add r0, sl, #0x184
|
||||
add r1, sp, #0x4c
|
||||
bl LoadFileFromRom
|
||||
ldr r1, _022ECD08 ; =ov11_02320C80
|
||||
add r0, sp, #0x4c
|
||||
add r2, sp, #0xe0
|
||||
bl sprintf
|
||||
ldr r2, _022ECD04 ; =0x0000030F
|
||||
add r0, sl, #0x18c
|
||||
add r1, sp, #0x4c
|
||||
bl LoadFileFromRom
|
||||
ldr r1, [sl, #0x184]
|
||||
ldr r0, [sl, #0x174]
|
||||
ldrh r2, [r1]
|
||||
str r0, [sp, #0x28]
|
||||
ldr r5, [sl, #0x18c]
|
||||
cmp r2, #0
|
||||
beq _022EC3A0
|
||||
ldrh r0, [r1, #2]
|
||||
mov r2, r2, lsr #1
|
||||
add r2, r1, r2, lsl #1
|
||||
cmp r0, #0
|
||||
str r2, [sp, #0x44]
|
||||
moveq r2, #0
|
||||
moveq r0, #1
|
||||
streq r2, [sp, #0x48]
|
||||
streq r0, [sl, #0x1c4]
|
||||
beq _022EC3B0
|
||||
mov r0, r0, lsr #1
|
||||
add r2, r1, r0, lsl #1
|
||||
mov r0, #2
|
||||
str r2, [sp, #0x48]
|
||||
str r0, [sl, #0x1c4]
|
||||
b _022EC3B0
|
||||
_022EC3A0:
|
||||
mov r0, #0
|
||||
str r0, [sp, #0x44]
|
||||
str r0, [sp, #0x48]
|
||||
str r0, [sl, #0x1c4]
|
||||
_022EC3B0:
|
||||
ldr r0, [sp, #0x28]
|
||||
add r2, sl, #0xea
|
||||
ldrb r3, [r0]
|
||||
add r0, sl, #0x100
|
||||
add r1, r1, #4
|
||||
strh r3, [r0, #0xea]
|
||||
ldr r0, [sp, #0x28]
|
||||
ldrb r3, [r0, #2]
|
||||
add r0, r2, #0x100
|
||||
str r0, [sp, #0x40]
|
||||
strh r3, [r0, #2]
|
||||
mov r0, #0
|
||||
_022EC3E0:
|
||||
add r4, sl, #0x1c8
|
||||
mov r2, #0xc
|
||||
add r3, sp, #0x44
|
||||
ldr r3, [r3, r0, lsl #2]
|
||||
mla r4, r0, r2, r4
|
||||
cmp r3, #0
|
||||
mov r6, #0
|
||||
beq _022EC42C
|
||||
ldrh r2, [r1], #2
|
||||
strh r2, [r4]
|
||||
_022EC408:
|
||||
ldrh r3, [r1], #2
|
||||
add r2, r4, r6, lsl #1
|
||||
add r6, r6, #1
|
||||
strh r3, [r2, #2]
|
||||
cmp r6, #4
|
||||
blt _022EC408
|
||||
ldrh r2, [r1], #2
|
||||
strh r2, [r4, #0xa]
|
||||
b _022EC44C
|
||||
_022EC42C:
|
||||
strh r6, [r4]
|
||||
mov r3, r6
|
||||
_022EC434:
|
||||
add r2, r4, r6, lsl #1
|
||||
add r6, r6, #1
|
||||
strh r3, [r2, #2]
|
||||
cmp r6, #4
|
||||
blt _022EC434
|
||||
strh r3, [r4, #0xa]
|
||||
_022EC44C:
|
||||
add r0, r0, #1
|
||||
cmp r0, #2
|
||||
blt _022EC3E0
|
||||
ldrb r1, [r5]
|
||||
add r0, sl, #0x200
|
||||
str r0, [sp, #0x34]
|
||||
strb r1, [sl, #0x1e0]
|
||||
ldrb r0, [r5, #1]
|
||||
add r4, sl, #0x1e0
|
||||
ldr r2, _022ECD0C ; =ov11_02324CBC
|
||||
strb r0, [r4, #1]
|
||||
ldrb r3, [r5, #4]
|
||||
ldr r0, [sp, #0x28]
|
||||
mov r1, #0x28
|
||||
add r0, r0, #4
|
||||
strb r3, [r4, #2]
|
||||
str r0, [sp, #0x1c]
|
||||
ldrb r0, [r5, #5]
|
||||
mov sb, #0
|
||||
strb r0, [r4, #3]
|
||||
ldrb r0, [r5, #6]
|
||||
strh r0, [r4, #4]
|
||||
ldrb r0, [r5, #8]
|
||||
strh r0, [r4, #6]
|
||||
ldrb r0, [r5, #0xa]
|
||||
strh r0, [r4, #8]
|
||||
ldr r0, [sp, #0x34]
|
||||
ldrb r3, [sl, #0x2bc]
|
||||
ldrsh r0, [r0, #0xc2]
|
||||
ldr r2, [r2]
|
||||
smulbb r6, r3, r1
|
||||
mov r0, r0, lsl #0x14
|
||||
add r7, r2, #0x98
|
||||
mov r8, r0, lsr #0x10
|
||||
b _022EC524
|
||||
_022EC4D8:
|
||||
add r0, r8, #1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r1, r8
|
||||
mov r8, r0, lsr #0x10
|
||||
ldr r2, _022ECD10 ; =ov11_02320BF4
|
||||
add r0, r7, r6
|
||||
bl sub_0200A590
|
||||
ldr r2, [sp, #0x1c]
|
||||
add r0, r7, r6
|
||||
mov r1, r8
|
||||
mov r3, #0xf
|
||||
bl sub_0200A5B0
|
||||
add r0, r8, #0xf
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r8, r0, lsr #0x10
|
||||
ldr r0, [sp, #0x1c]
|
||||
add sb, sb, #1
|
||||
add r0, r0, #0x3c
|
||||
str r0, [sp, #0x1c]
|
||||
_022EC524:
|
||||
ldr r0, [sp, #0x40]
|
||||
ldrsh r0, [r0]
|
||||
cmp sb, r0
|
||||
bge _022EC544
|
||||
ldr r0, [sp, #0x34]
|
||||
ldrsh r0, [r0, #0xc4]
|
||||
cmp sb, r0
|
||||
blt _022EC4D8
|
||||
_022EC544:
|
||||
add r0, sl, #0x200
|
||||
str r0, [sp, #0x38]
|
||||
b _022EC5A8
|
||||
_022EC550:
|
||||
add r0, r8, #1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r1, r8
|
||||
mov r8, r0, lsr #0x10
|
||||
ldr r2, _022ECD10 ; =ov11_02320BF4
|
||||
add r0, r7, r6
|
||||
bl sub_0200A590
|
||||
mov r0, #1
|
||||
str r0, [sp, #0x18]
|
||||
_022EC574:
|
||||
add r0, r8, #1
|
||||
mov r0, r0, lsl #0x10
|
||||
mov r1, r8
|
||||
mov r8, r0, lsr #0x10
|
||||
ldr r2, _022ECD14 ; =ov11_02320BE8
|
||||
add r0, r7, r6
|
||||
bl sub_0200A590
|
||||
ldr r0, [sp, #0x18]
|
||||
add r0, r0, #1
|
||||
str r0, [sp, #0x18]
|
||||
cmp r0, #0x10
|
||||
blt _022EC574
|
||||
add sb, sb, #1
|
||||
_022EC5A8:
|
||||
ldr r0, [sp, #0x38]
|
||||
ldrsh r0, [r0, #0xc4]
|
||||
cmp sb, r0
|
||||
blt _022EC550
|
||||
add r0, r7, r6
|
||||
bl sub_0200A504
|
||||
add r0, sl, #0x200
|
||||
ldrsh r0, [r0, #0xbe]
|
||||
mov r8, #0
|
||||
str r0, [sp, #0x20]
|
||||
b _022EC9A0
|
||||
_022EC5D4:
|
||||
add r0, sp, #0x44
|
||||
ldr r0, [r0, r8, lsl #2]
|
||||
str r0, [sp, #0x24]
|
||||
cmp r0, #0
|
||||
beq _022EC990
|
||||
mov r0, #0xc
|
||||
mul r1, r8, r0
|
||||
add r0, sl, #0x200
|
||||
ldrsh r2, [r0, #0xc6]
|
||||
add r6, sl, #0x1c8
|
||||
add sb, r6, r1
|
||||
ldrsh r1, [r6, r1]
|
||||
ldrb r3, [sl, #0x2bc]
|
||||
ldr r0, _022ECD18 ; =ov11_02320C18
|
||||
mov r7, #0
|
||||
add r3, r0, r3, lsl #3
|
||||
ldr r0, [sp, #0x20]
|
||||
ldr r6, [sp, #0x24]
|
||||
ldr r0, [r3, r0, lsl #2]
|
||||
str r7, [sp, #0x14]
|
||||
add fp, r0, r2, lsl #5
|
||||
add r0, fp, r1, lsl #5
|
||||
str r0, [sp, #0x10]
|
||||
mov r3, r7
|
||||
mov r2, r7
|
||||
mov r1, r7
|
||||
mov r0, r7
|
||||
_022EC640:
|
||||
strh r0, [fp], #2
|
||||
add r1, r1, #1
|
||||
cmp r1, #0x10
|
||||
blt _022EC640
|
||||
b _022EC774
|
||||
_022EC654:
|
||||
ldrb r0, [r6]
|
||||
add r1, r6, #1
|
||||
mov r6, r1
|
||||
cmp r0, #0x80
|
||||
bge _022EC6D8
|
||||
cmp r0, #0x7f
|
||||
ldreqb ip, [r1, #1]
|
||||
ldreqb r0, [r1]
|
||||
addeq r6, r1, #2
|
||||
orreq r0, r0, ip, lsl #8
|
||||
beq _022EC68C
|
||||
cmp r0, #0x7e
|
||||
ldreqb r0, [r1]
|
||||
addeq r6, r1, #1
|
||||
_022EC68C:
|
||||
cmp r3, #0
|
||||
ldrneb r1, [r6], #1
|
||||
movne r3, #0
|
||||
subne r0, r0, #1
|
||||
orrne r1, r2, r1, lsl #8
|
||||
strneh r1, [fp], #2
|
||||
mov r1, #0
|
||||
b _022EC6C4
|
||||
_022EC6AC:
|
||||
ldrb lr, [r6, #1]
|
||||
ldrb ip, [r6], #2
|
||||
add r1, r1, #2
|
||||
str ip, [sp, #0x2c]
|
||||
orr ip, ip, lr, lsl #8
|
||||
strh ip, [fp], #2
|
||||
_022EC6C4:
|
||||
cmp r1, r0
|
||||
blt _022EC6AC
|
||||
movle r3, #1
|
||||
ldrleb r2, [r6], #1
|
||||
b _022EC774
|
||||
_022EC6D8:
|
||||
cmp r0, #0xc0
|
||||
bge _022EC6FC
|
||||
cmp r0, #0xbf
|
||||
ldreqb r0, [r1]
|
||||
addeq r6, r1, #1
|
||||
str r7, [sp, #0x14]
|
||||
subne r0, r0, #0x80
|
||||
ldrb r7, [r6], #1
|
||||
b _022EC734
|
||||
_022EC6FC:
|
||||
cmp r0, #0xe0
|
||||
bge _022EC718
|
||||
cmp r0, #0xdf
|
||||
ldreqb r0, [r1]
|
||||
addeq r6, r1, #1
|
||||
subne r0, r0, #0xc0
|
||||
b _022EC734
|
||||
_022EC718:
|
||||
cmp r0, #0xff
|
||||
ldreqb r0, [r1]
|
||||
addeq r6, r1, #1
|
||||
ldr r1, [sp, #0x14]
|
||||
subne r0, r0, #0xe0
|
||||
str r7, [sp, #0x14]
|
||||
mov r7, r1
|
||||
_022EC734:
|
||||
cmp r3, #0
|
||||
orrne r1, r2, r7, lsl #8
|
||||
strneh r1, [fp], #2
|
||||
orr r1, r7, r7, lsl #8
|
||||
mov r1, r1, lsl #0x10
|
||||
mov r2, r1, lsr #0x10
|
||||
movne r3, #0
|
||||
subne r0, r0, #1
|
||||
mov r1, #0
|
||||
b _022EC764
|
||||
_022EC75C:
|
||||
strh r2, [fp], #2
|
||||
add r1, r1, #2
|
||||
_022EC764:
|
||||
cmp r1, r0
|
||||
blt _022EC75C
|
||||
movle r3, #1
|
||||
movle r2, r7
|
||||
_022EC774:
|
||||
ldr r0, [sp, #0x10]
|
||||
cmp fp, r0
|
||||
blo _022EC654
|
||||
ldr r0, [sp, #0x24]
|
||||
ldrsh r7, [sb]
|
||||
sub r0, r6, r0
|
||||
tst r0, #1
|
||||
addne r6, r6, #1
|
||||
add r0, sl, #0x200
|
||||
ldr r2, _022ECD1C ; =0x0000FFFF
|
||||
mov r3, #0
|
||||
b _022EC7BC
|
||||
_022EC7A4:
|
||||
mov r1, r3
|
||||
_022EC7A8:
|
||||
strh r2, [fp], #2
|
||||
add r1, r1, #1
|
||||
cmp r1, #0x10
|
||||
blt _022EC7A8
|
||||
add r7, r7, #1
|
||||
_022EC7BC:
|
||||
ldrsh r1, [r0, #0xc8]
|
||||
cmp r7, r1
|
||||
blt _022EC7A4
|
||||
add r0, sl, #0x200
|
||||
add r1, sl, r8, lsl #2
|
||||
ldr ip, [r1, #0x2dc]
|
||||
ldrsh r7, [r0, #0xc2]
|
||||
ldrsh r2, [r0, #0xc6]
|
||||
mov r1, #1
|
||||
mov r3, ip
|
||||
strh r1, [r0, #0xb8]
|
||||
orr r0, r2, r7, lsl #12
|
||||
mov r0, r0, lsl #0x10
|
||||
ldrsh r1, [sb, #0xa]
|
||||
str r0, [sp, #0x3c]
|
||||
sub r0, r1, #1
|
||||
add r0, r0, r0, lsl #3
|
||||
add r7, ip, r0, lsl #1
|
||||
mov r0, #0
|
||||
b _022EC890
|
||||
_022EC80C:
|
||||
ldrb r1, [r6]
|
||||
add r2, r6, #1
|
||||
mov r6, r2
|
||||
cmp r1, #0xc0
|
||||
blt _022EC844
|
||||
mov r2, #0xc0
|
||||
b _022EC838
|
||||
_022EC828:
|
||||
ldrb fp, [r6], #1
|
||||
add r2, r2, #1
|
||||
mov fp, fp, lsl #8
|
||||
strh fp, [r3], #2
|
||||
_022EC838:
|
||||
cmp r2, r1
|
||||
ble _022EC828
|
||||
b _022EC890
|
||||
_022EC844:
|
||||
cmp r1, #0x80
|
||||
blt _022EC878
|
||||
ldrb fp, [r2]
|
||||
add r6, r2, #1
|
||||
mov r2, #0x80
|
||||
mov fp, fp, lsl #0x18
|
||||
mov fp, fp, lsr #0x10
|
||||
b _022EC86C
|
||||
_022EC864:
|
||||
strh fp, [r3], #2
|
||||
add r2, r2, #1
|
||||
_022EC86C:
|
||||
cmp r2, r1
|
||||
ble _022EC864
|
||||
b _022EC890
|
||||
_022EC878:
|
||||
mov r2, #0
|
||||
b _022EC888
|
||||
_022EC880:
|
||||
strh r0, [r3], #2
|
||||
add r2, r2, #1
|
||||
_022EC888:
|
||||
cmp r2, r1
|
||||
ble _022EC880
|
||||
_022EC890:
|
||||
cmp r3, r7
|
||||
blo _022EC80C
|
||||
mov r3, ip
|
||||
b _022EC928
|
||||
_022EC8A0:
|
||||
ldrb r2, [r6]
|
||||
add r0, r6, #1
|
||||
mov r6, r0
|
||||
cmp r2, #0xc0
|
||||
blt _022EC8E4
|
||||
mov r0, #0xc0
|
||||
b _022EC8D8
|
||||
_022EC8BC:
|
||||
str r3, [sp, #0xc]
|
||||
ldrh fp, [r3], #2
|
||||
ldrb r1, [r6], #1
|
||||
add r0, r0, #1
|
||||
orr fp, fp, r1
|
||||
ldr r1, [sp, #0xc]
|
||||
strh fp, [r1]
|
||||
_022EC8D8:
|
||||
cmp r0, r2
|
||||
ble _022EC8BC
|
||||
b _022EC928
|
||||
_022EC8E4:
|
||||
cmp r2, #0x80
|
||||
blt _022EC920
|
||||
add r6, r0, #1
|
||||
ldrb lr, [r0]
|
||||
mov fp, #0x80
|
||||
b _022EC914
|
||||
_022EC8FC:
|
||||
str r3, [sp, #8]
|
||||
ldrh r0, [r3], #2
|
||||
add fp, fp, #1
|
||||
orr r1, r0, lr
|
||||
ldr r0, [sp, #8]
|
||||
strh r1, [r0]
|
||||
_022EC914:
|
||||
cmp fp, r2
|
||||
ble _022EC8FC
|
||||
b _022EC928
|
||||
_022EC920:
|
||||
add r0, r2, #1
|
||||
add r3, r3, r0, lsl #1
|
||||
_022EC928:
|
||||
cmp r3, r7
|
||||
blo _022EC8A0
|
||||
ldrsh r0, [sb, #0xa]
|
||||
mov r3, #1
|
||||
add r0, r0, r0, lsl #3
|
||||
add r1, ip, r0, lsl #1
|
||||
mov r0, #0
|
||||
b _022EC96C
|
||||
_022EC948:
|
||||
mov r2, r0
|
||||
_022EC94C:
|
||||
ldrh fp, [r7, #-2]!
|
||||
ldr r6, [sp, #0x3c]
|
||||
add r2, r2, #1
|
||||
add r6, fp, r6, lsr #16
|
||||
cmp r2, #9
|
||||
strh r6, [r1, #-2]!
|
||||
blt _022EC94C
|
||||
add r3, r3, #1
|
||||
_022EC96C:
|
||||
ldrsh r2, [sb, #0xa]
|
||||
cmp r3, r2
|
||||
blt _022EC948
|
||||
mov r1, #0
|
||||
mov r0, r1
|
||||
_022EC980:
|
||||
add r1, r1, #1
|
||||
cmp r1, #9
|
||||
strh r0, [ip], #2
|
||||
blt _022EC980
|
||||
_022EC990:
|
||||
ldr r0, [sp, #0x20]
|
||||
add r8, r8, #1
|
||||
add r0, r0, #1
|
||||
str r0, [sp, #0x20]
|
||||
_022EC9A0:
|
||||
add r0, sl, #0x200
|
||||
ldrsh r0, [r0, #0xc0]
|
||||
cmp r8, r0
|
||||
blt _022EC5D4
|
||||
add r0, sl, #0x2e4
|
||||
add r1, r5, #0xc
|
||||
add r2, sl, #0x2bc
|
||||
add r3, sl, #0x1e0
|
||||
bl ov11_022EE2D4
|
||||
mov r1, r0
|
||||
str r1, [sl, #0x1f0]
|
||||
ldr r0, [sl, #0x2d8]
|
||||
cmp r0, #0
|
||||
beq _022EC9EC
|
||||
add r2, sl, #0x200
|
||||
ldrsh r3, [r2, #0xce]
|
||||
ldr r5, [sl, #0x2d4]
|
||||
mov r2, r4
|
||||
blx r5
|
||||
_022EC9EC:
|
||||
mov r1, #0
|
||||
ldr r0, [sp, #0x40]
|
||||
strb r1, [sl, #0x1ee]
|
||||
ldrsh r2, [r0, #2]
|
||||
add r0, sl, #4
|
||||
cmp r2, #0
|
||||
beq _022ECAA4
|
||||
ldr r2, [sp, #0x40]
|
||||
mov r3, #1
|
||||
ldrsh r5, [r2]
|
||||
ldr r2, [sp, #0x28]
|
||||
mov r7, r1
|
||||
add r4, r2, #4
|
||||
rsb r2, r5, r5, lsl #4
|
||||
add r2, r4, r2, lsl #2
|
||||
str r2, [sl, #0x1f4]
|
||||
strb r3, [sl, #0x1f8]
|
||||
strb r3, [sl, #0x1f9]
|
||||
strb r3, [sl, #0x1fa]
|
||||
strb r3, [sl, #0x1fb]
|
||||
add r3, r2, r5, lsl #2
|
||||
strb r1, [sl, #0x1bc]
|
||||
add r5, sl, #0x200
|
||||
mov r6, r1
|
||||
b _022ECA84
|
||||
_022ECA50:
|
||||
ldrsh r4, [r2, #2]
|
||||
add r1, r1, #1
|
||||
cmp r4, #0
|
||||
strgt r3, [r0, #4]
|
||||
ldrgtsh r4, [r2, #2]
|
||||
add r2, r2, #4
|
||||
strle r7, [r0, #4]
|
||||
strh r6, [r0]
|
||||
rsbgt r4, r4, r4, lsl #4
|
||||
strh r6, [r0, #2]
|
||||
str r6, [r0, #8]
|
||||
addgt r3, r3, r4, lsl #2
|
||||
add r0, r0, #0xc
|
||||
_022ECA84:
|
||||
ldr r4, [sp, #0x40]
|
||||
ldrsh r4, [r4]
|
||||
cmp r1, r4
|
||||
bge _022ECABC
|
||||
ldrsh r4, [r5, #0xc4]
|
||||
cmp r1, r4
|
||||
blt _022ECA50
|
||||
b _022ECABC
|
||||
_022ECAA4:
|
||||
str r1, [sl, #0x1f4]
|
||||
strb r1, [sl, #0x1f8]
|
||||
strb r1, [sl, #0x1f9]
|
||||
strb r1, [sl, #0x1fa]
|
||||
strb r1, [sl, #0x1fb]
|
||||
strb r1, [sl, #0x1bc]
|
||||
_022ECABC:
|
||||
mov r2, #0
|
||||
b _022ECADC
|
||||
_022ECAC4:
|
||||
strh r2, [r0]
|
||||
strh r2, [r0, #2]
|
||||
str r2, [r0, #8]
|
||||
str r2, [r0, #4]
|
||||
add r1, r1, #1
|
||||
add r0, r0, #0xc
|
||||
_022ECADC:
|
||||
cmp r1, #0x10
|
||||
blt _022ECAC4
|
||||
mov r7, #0
|
||||
add r4, sl, #0xc4
|
||||
mov sb, r7
|
||||
mov r5, r7
|
||||
mov r8, #0x2c
|
||||
_022ECAF8:
|
||||
mul r0, r7, r8
|
||||
add r6, r4, r0
|
||||
strb sb, [r4, r0]
|
||||
strb sb, [r6, #1]
|
||||
strh sb, [r6, #4]
|
||||
strh sb, [r6, #2]
|
||||
add r0, r6, #8
|
||||
bl ZInit8
|
||||
str r5, [r6, #0x10]
|
||||
str r5, [r6, #0x18]
|
||||
str r5, [r6, #0x14]
|
||||
str r5, [r6, #0x20]
|
||||
str r5, [r6, #0x1c]
|
||||
add r7, r7, #1
|
||||
str r5, [r6, #0x24]
|
||||
str r5, [r6, #0x28]
|
||||
cmp r7, #4
|
||||
blt _022ECAF8
|
||||
add r0, sl, #0x200
|
||||
ldrsh r7, [r0, #0xbe]
|
||||
b _022ECC80
|
||||
_022ECB4C:
|
||||
mov r0, #0xc
|
||||
mul r2, r5, r0
|
||||
add r0, sl, #0x200
|
||||
add r3, sl, #0x1c8
|
||||
ldrsh r1, [r0, #0xc6]
|
||||
ldrsh r0, [r3, r2]
|
||||
cmp r5, #0
|
||||
moveq r8, #0
|
||||
add r1, r1, r0
|
||||
add r0, r3, r2
|
||||
movne r8, #2
|
||||
cmp r5, #0
|
||||
moveq sb, #0
|
||||
str r0, [sp, #4]
|
||||
add r0, sl, #0xc4
|
||||
ldrb r6, [sl, #0x2bc]
|
||||
ldr r4, _022ECD18 ; =ov11_02320C18
|
||||
movne sb, #4
|
||||
add r4, r4, r6, lsl #3
|
||||
ldr r4, [r4, r7, lsl #2]
|
||||
mov r6, #0
|
||||
add fp, r4, r1, lsl #5
|
||||
str r0, [sp, #0x30]
|
||||
_022ECBA8:
|
||||
ldr r0, [sp, #0x30]
|
||||
mov r1, #0x2c
|
||||
mla r4, r8, r1, r0
|
||||
mov r0, #0xa
|
||||
mul r0, sb, r0
|
||||
add r1, sp, #0xcc
|
||||
add r1, r1, r0
|
||||
ldrsb r1, [r1, #0x1e]
|
||||
cmp r1, #0
|
||||
beq _022ECC64
|
||||
ldrb r1, [sl, #0x2bc]
|
||||
cmp r1, #0
|
||||
bne _022ECC64
|
||||
add r1, sp, #0xea
|
||||
add r2, r1, r0
|
||||
ldr r1, _022ECD20 ; =ov11_02320C94
|
||||
add r0, sp, #0x4c
|
||||
bl sprintf
|
||||
ldr r2, [sp]
|
||||
add r0, r4, #8
|
||||
add r1, sp, #0x4c
|
||||
bl LoadFileFromRom
|
||||
mov r0, #1
|
||||
strb r0, [r4]
|
||||
strb r0, [r4, #1]
|
||||
ldr r3, [r4, #8]
|
||||
ldr r0, [sp, #4]
|
||||
str r3, [r4, #0x10]
|
||||
add r1, r0, r6, lsl #1
|
||||
ldrsh r0, [r3, #2]
|
||||
add r2, r3, #4
|
||||
str r2, [r4, #0x18]
|
||||
add r0, r2, r0, lsl #2
|
||||
str r2, [r4, #0x14]
|
||||
str r0, [r4, #0x20]
|
||||
str r0, [r4, #0x1c]
|
||||
mov r0, #0
|
||||
strh r0, [r4, #2]
|
||||
ldr r0, [r4, #0x18]
|
||||
ldr r0, [r0]
|
||||
strh r0, [r4, #4]
|
||||
str fp, [r4, #0x24]
|
||||
ldrsh r0, [r1, #2]
|
||||
mov r0, r0, lsl #5
|
||||
str r0, [r4, #0x28]
|
||||
ldrsh r0, [r1, #2]
|
||||
add fp, fp, r0, lsl #5
|
||||
_022ECC64:
|
||||
add r6, r6, #1
|
||||
cmp r6, #2
|
||||
add sb, sb, #1
|
||||
add r8, r8, #1
|
||||
blt _022ECBA8
|
||||
add r5, r5, #1
|
||||
add r7, r7, #1
|
||||
_022ECC80:
|
||||
add r0, sl, #0x200
|
||||
ldrsh r0, [r0, #0xc0]
|
||||
cmp r5, r0
|
||||
blt _022ECB4C
|
||||
cmp r0, #0
|
||||
mov r0, sl
|
||||
ble _022ECCA8
|
||||
mov r1, #1
|
||||
bl ov11_022EE620
|
||||
b _022ECCB0
|
||||
_022ECCA8:
|
||||
mov r1, #0
|
||||
bl ov11_022EE620
|
||||
_022ECCB0:
|
||||
ldr r1, [sl, #0x228]
|
||||
add r0, sl, #0x210
|
||||
blx r1
|
||||
mov r1, #1
|
||||
add r0, sl, #0x184
|
||||
strb r1, [sl, #0x2ba]
|
||||
bl PointsToZero
|
||||
cmp r0, #0
|
||||
bne _022ECCDC
|
||||
add r0, sl, #0x184
|
||||
bl UnloadFile
|
||||
_022ECCDC:
|
||||
add r0, sl, #0x18c
|
||||
bl PointsToZero
|
||||
cmp r0, #0
|
||||
bne _022ECCF4
|
||||
add r0, sl, #0x18c
|
||||
bl UnloadFile
|
||||
_022ECCF4:
|
||||
add sp, sp, #0x13c
|
||||
ldmia sp!, {r4, r5, r6, r7, r8, sb, sl, fp, pc}
|
||||
.align 2, 0
|
||||
_022ECCFC: .word ov11_02320C58
|
||||
_022ECD00: .word ov11_02320C6C
|
||||
_022ECD04: .word 0x0000030F
|
||||
_022ECD08: .word ov11_02320C80
|
||||
_022ECD0C: .word ov11_02324CBC
|
||||
_022ECD10: .word ov11_02320BF4
|
||||
_022ECD14: .word ov11_02320BE8
|
||||
_022ECD18: .word ov11_02320C18
|
||||
_022ECD1C: .word 0x0000FFFF
|
||||
_022ECD20: .word ov11_02320C94
|
||||
arm_func_end ov11_022EC27C
|
||||
|
||||
arm_func_start LoadMapType10
|
||||
LoadMapType10: ; 0x022ECD24
|
||||
stmdb sp!, {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}
|
||||
|
|
@ -48,6 +48,14 @@ typedef struct SubStruct_0
|
|||
//u8 fillC; // Filler byte removed in Sky, present in Red
|
||||
} SubStruct_0;
|
||||
|
||||
struct BpaHeader
|
||||
{
|
||||
u8 numTiles; // The number of individual tiles.
|
||||
s16 numFrames; // The number of frames for each tile.
|
||||
s32 durationPerFrame[0]; // Settings for each frame. One entry per frame.
|
||||
// Tiles data below
|
||||
};
|
||||
|
||||
// Was 0x24 in Red...
|
||||
typedef struct SubStruct_3E0
|
||||
{
|
||||
|
|
@ -56,13 +64,12 @@ typedef struct SubStruct_3E0
|
|||
s16 unk2;
|
||||
s16 unk4;
|
||||
struct iovec bpaFile;
|
||||
//const struct BpaHeader *unkC; hm...
|
||||
const void *unk10;
|
||||
const struct BpaHeader *unk10;
|
||||
const void *unk14;
|
||||
const void *unk18;
|
||||
const void *unk1C;
|
||||
void *unk20;
|
||||
u32 unk24;
|
||||
void *unk24;
|
||||
u32 unk28;
|
||||
} SubStruct_3E0;
|
||||
|
||||
|
|
@ -80,7 +87,7 @@ typedef struct SubStruct_52C
|
|||
s16 unk12; // 0x53E
|
||||
s16 unk14;
|
||||
s16 unk16;
|
||||
void *unk18; // Maybe void (*unk14)(void *, const void *, BmaHeader *, s32); // TODO: fix void * to proper ptr types 0x540
|
||||
void (*unk18)(void *, const void *, void *, s32); // TODO: fix void * to proper ptr types 0x540
|
||||
} SubStruct_52C;
|
||||
|
||||
struct UnkGroundBg_1A0
|
||||
|
|
@ -243,5 +250,6 @@ void ov11_022EBF60(GroundBg *groundBg);
|
|||
void ov11_022EBFC8(GroundBg *groundBg);
|
||||
void ov11_022EC08C(GroundBg *groundBg);
|
||||
void ov11_022EC240(GroundBg *groundBg, s32 bgId);
|
||||
void ov11_022EC27C(GroundBg *groundBg, s32 bgId);
|
||||
|
||||
#endif //PMDSKY_OVERLAY_11_022EBB40_H
|
||||
|
|
|
|||
2
main.lsf
2
main.lsf
|
|
@ -185,7 +185,7 @@ Overlay OVY_11
|
|||
After OVY_10
|
||||
Object asm/overlay_11.o
|
||||
Object src/overlay_11_022EBB40.o
|
||||
Object asm/overlay_11_022EC27C.o
|
||||
Object asm/overlay_11_022ECD24.o
|
||||
}
|
||||
Overlay OVY_12
|
||||
{
|
||||
|
|
|
|||
|
|
@ -8,6 +8,13 @@
|
|||
#define RGB_UNK 3
|
||||
#define RGB_FIELDS_COUNT 4
|
||||
|
||||
#define SWAP(a, b, temp) \
|
||||
{ \
|
||||
temp = a; \
|
||||
a = b; \
|
||||
b = temp; \
|
||||
}
|
||||
|
||||
typedef struct RGB_Array
|
||||
{
|
||||
u8 c[RGB_FIELDS_COUNT];
|
||||
|
|
@ -44,6 +51,9 @@ extern BOOL PointsToZero(struct iovec* ptr);
|
|||
extern void UnloadFile(struct iovec* ptr);
|
||||
extern void sub_0200A590(struct UnkStruct_2324CBC_Sub98 *, s32 id, const RGB_Array *src);
|
||||
extern void sub_0200A504(struct UnkStruct_2324CBC_Sub98 *);
|
||||
extern s32 sprintf(u8* str, const u8* format, ...);
|
||||
extern void LoadFileFromRom(struct iovec* iov, const char* filepath, u32 flags);
|
||||
extern void sub_0200A5B0(struct UnkStruct_2324CBC_Sub98 *, s32 id, const RGB_Array *src, s32);
|
||||
|
||||
#define FREE_AND_SET_NULL(ptr) \
|
||||
{ \
|
||||
|
|
@ -94,6 +104,7 @@ void sub_0206367C(struct UnkGroundBg_1A0 *);
|
|||
void sub_020635C8(struct UnkGroundBg_194 *);
|
||||
void sub_020635D8(struct UnkGroundBg_194 *);
|
||||
void ov11_022EE620(GroundBg *groundBg, s32 a1);
|
||||
const u8 *ov11_022EE2D4(u16 **dstArray, const void *bmaData, SubStruct_52C *a2, BmaHeader *bmaHeader); // BmaLayerNrlDecompressor
|
||||
|
||||
struct ConstFileData
|
||||
{
|
||||
|
|
@ -185,8 +196,8 @@ void ov11_022EBC18(GroundBg *groundBg, const SubStruct_52C *a1)
|
|||
unkPtr->unk18 = 0;
|
||||
unkPtr->unk14 = 0;
|
||||
unkPtr->unk20 = 0;
|
||||
unkPtr->unk1C = 0;
|
||||
unkPtr->unk28 = unkPtr->unk24 = 0;
|
||||
unkPtr->unk24 = unkPtr->unk1C = 0;
|
||||
unkPtr->unk28 = 0;
|
||||
}
|
||||
|
||||
for (i = 0; i < NUM_LAYERS; i++) {
|
||||
|
|
@ -304,8 +315,8 @@ void ov11_022EC08C(GroundBg *groundBg)
|
|||
unkPtr->unk18 = 0;
|
||||
unkPtr->unk14 = 0;
|
||||
unkPtr->unk20 = 0;
|
||||
unkPtr->unk1C = 0;
|
||||
unkPtr->unk28 = unkPtr->unk24 = 0;
|
||||
unkPtr->unk24 = unkPtr->unk1C = 0;
|
||||
unkPtr->unk28 = 0;
|
||||
}
|
||||
|
||||
unkId = groundBg->unk52C.unk0;
|
||||
|
|
@ -340,3 +351,424 @@ void ov11_022EC240(GroundBg *groundBg, s32 bgId)
|
|||
LoadBackgroundAttributes(&entry, groundBg->unk1BE); // This loads bg attributes and doesn't do anything with them.
|
||||
}
|
||||
}
|
||||
|
||||
extern const char ov11_02320C58[];
|
||||
extern const char ov11_02320C94[];
|
||||
extern const char ov11_02320C6C[];
|
||||
extern const char ov11_02320C80[];
|
||||
extern void *ov11_02320C18[][2]; // Vram ptrs
|
||||
|
||||
// Regswaps - https://decomp.me/scratch/0bm90
|
||||
void ov11_022EC27C(GroundBg *groundBg, s32 bgId)
|
||||
{
|
||||
u32 flags;
|
||||
s32 sp20;
|
||||
void *sp44[2];
|
||||
struct bg_list_entry entry;
|
||||
u8 textBuf[0x80];
|
||||
const u16 *bpcData;
|
||||
const void *bplData;
|
||||
s32 i, j;
|
||||
struct UnkStruct_2324CBC_Sub98 *unkSubPtr;
|
||||
const RGB_Array *rgbPal;
|
||||
s32 unk0Id;
|
||||
SubStruct_0 *sub0Ptr;
|
||||
s32 unk3E0Id;
|
||||
BmaHeader *bmaHeader;
|
||||
BplHeader *bplHeader;
|
||||
const void *bmaData;
|
||||
u16 palId;
|
||||
s32 r7;
|
||||
|
||||
flags = (groundBg->unk52C.unk0 == 0) ? 6 : 15;
|
||||
if (bgId == -1) {
|
||||
ov11_022EC08C(groundBg);
|
||||
return;
|
||||
}
|
||||
ov11_022EBFC8(groundBg);
|
||||
groundBg->newUnk0 = 1;
|
||||
groundBg->unk1C0 = 0;
|
||||
groundBg->unk1BE = bgId;
|
||||
LoadBackgroundAttributes(&entry, groundBg->unk1BE);
|
||||
|
||||
sprintf(textBuf, ov11_02320C58, entry.bpl.name);
|
||||
LoadFileFromRom(&groundBg->bplFile, textBuf, flags);
|
||||
|
||||
sprintf(textBuf, ov11_02320C6C, entry.bpc.name);
|
||||
LoadFileFromRom(&groundBg->bpcFile, textBuf, 0x30F);
|
||||
|
||||
sprintf(textBuf, ov11_02320C80, entry.bma.name);
|
||||
LoadFileFromRom(&groundBg->bmaFile, textBuf, 0x30F);
|
||||
|
||||
bplData = groundBg->bplFile.iov_base;
|
||||
bpcData = groundBg->bpcFile.iov_base;
|
||||
bmaData = groundBg->bmaFile.iov_base;
|
||||
|
||||
if (bpcData[0] != 0) {
|
||||
sp44[0] = bpcData + bpcData[0] / 2;
|
||||
if (bpcData[1] == 0) {
|
||||
sp44[1] = 0;
|
||||
groundBg->unk1C4 = 1;
|
||||
}
|
||||
else {
|
||||
sp44[1] = bpcData + bpcData[1] / 2;
|
||||
groundBg->unk1C4 = 2;
|
||||
}
|
||||
}
|
||||
else {
|
||||
sp44[0] = 0;
|
||||
sp44[1] = 0;
|
||||
groundBg->unk1C4 = 0;
|
||||
}
|
||||
bpcData += 2;
|
||||
|
||||
bplHeader = &groundBg->bplHeader;
|
||||
bplHeader->numPalettes = *(u8 *)(bplData); bplData += 2;
|
||||
bplHeader->hasPalAnimations = *(u8 *)(bplData); bplData += 2;
|
||||
|
||||
for (i = 0; i < NUM_LAYERS; i++) {
|
||||
LayerSpecs *layerSpecs = &groundBg->layerSpecs[i];
|
||||
s32 r6;
|
||||
if (sp44[i] != NULL) {
|
||||
layerSpecs->numTiles = *bpcData++;
|
||||
for (r6 = 0; r6 < MAX_BPA_SLOTS; r6++) {
|
||||
layerSpecs->bpaSlotNumTiles[r6] = *bpcData++;
|
||||
}
|
||||
layerSpecs->numChunks = *bpcData++;
|
||||
}
|
||||
else {
|
||||
layerSpecs->numTiles = 0;
|
||||
for (r6 = 0; r6 < MAX_BPA_SLOTS; r6++) {
|
||||
layerSpecs->bpaSlotNumTiles[r6] = 0;
|
||||
}
|
||||
layerSpecs->numChunks = 0;
|
||||
}
|
||||
}
|
||||
|
||||
bmaHeader = &groundBg->bmaHeader;
|
||||
bmaHeader->mapWidthTiles = *(u8 *)(bmaData); bmaData += 1;
|
||||
bmaHeader->mapHeightTiles = *(u8 *)(bmaData); bmaData += 1;
|
||||
/*bmaHeader->tilingWidth* = *(u8 *)(bmaData);*/ bmaData += 1;
|
||||
/*bmaHeader->tilingHeight* = *(u8 *)(bmaData);*/ bmaData += 1;
|
||||
bmaHeader->mapWidthChunks = *(u8 *)(bmaData); bmaData += 1;
|
||||
bmaHeader->mapHeightChunks = *(u8 *)(bmaData); bmaData += 1;
|
||||
bmaHeader->numLayers = *(u8 *)(bmaData); bmaData += 2;
|
||||
bmaHeader->hasDataLayer = *(u8 *)(bmaData); bmaData += 2;
|
||||
bmaHeader->hasCollision = *(u8 *)(bmaData); bmaData += 2;
|
||||
|
||||
rgbPal = bplData;
|
||||
unkSubPtr = &ov11_02324CBC->unk98[groundBg->unk52C.unk0];
|
||||
palId = groundBg->unk52C.unk6 * 16;
|
||||
for (i = 0; i < bplHeader->numPalettes && i < groundBg->unk52C.unk8; i++) {
|
||||
sub_0200A590(unkSubPtr, palId++, &ov11_02320BF4);
|
||||
sub_0200A5B0(unkSubPtr, palId, rgbPal, 15);
|
||||
palId += 15;
|
||||
rgbPal += 15;
|
||||
}
|
||||
for (; i < groundBg->unk52C.unk8; i++) {
|
||||
sub_0200A590(unkSubPtr, palId++, &ov11_02320BF4);
|
||||
for (j = 1; j < 16; j++) {
|
||||
sub_0200A590(unkSubPtr, palId++, &ov11_02320BE8);
|
||||
}
|
||||
}
|
||||
sub_0200A504(unkSubPtr);
|
||||
|
||||
// Bpc decompressor
|
||||
sp20 = groundBg->unk52C.unk2;
|
||||
for (i = 0; i < groundBg->unk52C.unk4; sp20++, i++) {
|
||||
const u8 *srcStart = sp44[i];
|
||||
if (srcStart != NULL) {
|
||||
s32 k; // r1
|
||||
u16 unkOrVal;
|
||||
s32 nbWordsToOutput;
|
||||
u16 *tilemapR7, *tilemapR3, *tilemapR12;
|
||||
LayerSpecs *layerSpecs = &groundBg->layerSpecs[i]; // r9
|
||||
s32 r3 = groundBg->unk52C.unk0;
|
||||
u16 *dstR11 = ov11_02320C18[r3][sp20] + groundBg->unk52C.unkA * 32; // r11 fp
|
||||
u16 *dstSP10 = ov11_02320C18[r3][sp20] + layerSpecs->numTiles * 32; // sp 10
|
||||
const u8 *src = srcStart; // r6
|
||||
u16 leftoverVal2 = 0; // r7
|
||||
u16 leftoverBuf = 0; // sp #0x14
|
||||
u16 leftoverVal1 = 0; // r2
|
||||
bool8 hasLeftover = FALSE; // r3
|
||||
|
||||
for (s32 k = 0; k < 16; k++) {
|
||||
*dstR11++ = 0;
|
||||
}
|
||||
|
||||
// Copy tiles
|
||||
while (dstR11 < dstSP10) {
|
||||
s32 nbbytestocopy;
|
||||
s32 cmd = *src++;
|
||||
if (cmd < 0x80) {
|
||||
if (cmd == 0x7f) {
|
||||
nbbytestocopy = (src[1] << 8) | src[0]; src += 2;
|
||||
}
|
||||
else if (cmd == 0x7e) {
|
||||
nbbytestocopy = *src++;
|
||||
}
|
||||
else {
|
||||
nbbytestocopy = cmd;
|
||||
}
|
||||
|
||||
if (hasLeftover) {
|
||||
*dstR11++ = leftoverVal1 | (*src++ << 8);
|
||||
hasLeftover = FALSE;
|
||||
nbbytestocopy--;
|
||||
}
|
||||
|
||||
for (k = 0; k < nbbytestocopy; k += 2) {
|
||||
u16 word = (src[1] << 8) | src[0]; src += 2;
|
||||
*dstR11++ = word;
|
||||
}
|
||||
|
||||
if (k <= nbbytestocopy) {
|
||||
hasLeftover = TRUE;
|
||||
leftoverVal1 = *src++;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (cmd < 0xC0) {
|
||||
if (cmd == 0xBf) {
|
||||
nbbytestocopy = *src;
|
||||
src++;
|
||||
}
|
||||
else {
|
||||
nbbytestocopy = cmd - 0x80;
|
||||
}
|
||||
|
||||
leftoverBuf = leftoverVal2;
|
||||
leftoverVal2 = *src++;
|
||||
}
|
||||
else if (cmd < 0xE0) {
|
||||
if (cmd == 0xDF) {
|
||||
nbbytestocopy = *src++;
|
||||
}
|
||||
else {
|
||||
nbbytestocopy = cmd - 0xC0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
u16 tmp;
|
||||
if (cmd == 0xFF) {
|
||||
nbbytestocopy = *src++;
|
||||
}
|
||||
else {
|
||||
nbbytestocopy = cmd - 0xE0;
|
||||
}
|
||||
|
||||
SWAP(leftoverBuf, leftoverVal2, tmp);
|
||||
}
|
||||
|
||||
if (hasLeftover) {
|
||||
*dstR11++ = leftoverVal1 | (leftoverVal2 << 8);
|
||||
hasLeftover = FALSE;
|
||||
nbbytestocopy--;
|
||||
}
|
||||
leftoverVal1 = leftoverVal2 | (leftoverVal2 << 8);
|
||||
|
||||
for (k = 0; k < nbbytestocopy; k += 2) {
|
||||
*dstR11++ = leftoverVal1;
|
||||
}
|
||||
|
||||
if (k <= nbbytestocopy) {
|
||||
hasLeftover = TRUE;
|
||||
leftoverVal1 = leftoverVal2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Align by 2
|
||||
if ((src - srcStart) & 1) {
|
||||
src++;
|
||||
}
|
||||
|
||||
// Copy tilemaps
|
||||
for (r7 = layerSpecs->numTiles; r7 < groundBg->unk52C.unkC; r7++) {
|
||||
for (k = 0; k < 16; k++) {
|
||||
*dstR11++ = 0xFFFF;
|
||||
}
|
||||
}
|
||||
|
||||
unkOrVal = (groundBg->unk52C.unk6 << 12) | groundBg->unk52C.unkA;
|
||||
tilemapR12 = groundBg->unk2DC[i];
|
||||
tilemapR3 = tilemapR12;
|
||||
groundBg->unk2B8 = 1;
|
||||
nbWordsToOutput = (layerSpecs->numChunks - 1) * 9;
|
||||
tilemapR7 = tilemapR12 + nbWordsToOutput;
|
||||
// Decompress and copy upper table
|
||||
while (tilemapR3 < tilemapR7) {
|
||||
s32 k;
|
||||
s32 cmd = *src++;
|
||||
|
||||
if (cmd >= 0xC0) {
|
||||
for (k = 0xC0; k <= cmd; k++) {
|
||||
u16 word = *src++ << 8;
|
||||
*tilemapR3++ = word;
|
||||
}
|
||||
}
|
||||
else if (cmd >= 0x80) {
|
||||
u16 word = *src++ << 8;
|
||||
for (k = 0x80; k <= cmd; k++) {
|
||||
*tilemapR3++ = word;
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (k = 0; k <= cmd; k++) {
|
||||
*tilemapR3++ = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
// Decompress and copy lower table
|
||||
tilemapR3 = tilemapR12;
|
||||
while (tilemapR3 < tilemapR7) {
|
||||
s32 k;
|
||||
s32 cmd = *src++;
|
||||
|
||||
if (cmd >= 0xC0) {
|
||||
for (k = 0xC0; k <= cmd; k++) {
|
||||
u16 *currDst = tilemapR3++;
|
||||
*currDst |= *src++;
|
||||
}
|
||||
}
|
||||
else if (cmd >= 0x80) {
|
||||
u8 param = *src++;
|
||||
for (k = 0x80; k <= cmd; k++) {
|
||||
u16 *currDst = tilemapR3++;
|
||||
*currDst |= param;
|
||||
}
|
||||
}
|
||||
else {
|
||||
tilemapR3 += cmd + 1;
|
||||
}
|
||||
}
|
||||
|
||||
// ?
|
||||
s32 unk = (layerSpecs->numChunks * 9);
|
||||
u16 *dst = tilemapR12 + unk;
|
||||
s32 id;
|
||||
for (id = 1; id < layerSpecs->numChunks; id++) {
|
||||
for (k = 0; k < 9; k++) {
|
||||
*(--dst) = *(--tilemapR7) + unkOrVal;
|
||||
}
|
||||
}
|
||||
|
||||
for (k = 0; k < 9; k++) {
|
||||
*tilemapR12++ = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bmaData = ov11_022EE2D4(groundBg->unk2E4, bmaData, &groundBg->unk52C, &groundBg->bmaHeader);
|
||||
groundBg->unk1F0 = bmaData;
|
||||
if (groundBg->unk2D8 != NULL) {
|
||||
groundBg->unk52C.unk18(groundBg->unk2D8, bmaData, bmaHeader, groundBg->unk52C.unk12);
|
||||
}
|
||||
|
||||
groundBg->unk1EE = 0;
|
||||
sub0Ptr = groundBg->unk0;
|
||||
unk0Id = 0;
|
||||
|
||||
if (bplHeader->hasPalAnimations) {
|
||||
s32 numPals = bplHeader->numPalettes * 15;
|
||||
const AnimationSpecification *animSpecifications = bplData + (numPals * 4);
|
||||
const RGB_Array *animationPalette = ((void *) animSpecifications) + bplHeader->numPalettes * 4;
|
||||
|
||||
groundBg->animationSpecifications = animSpecifications;
|
||||
groundBg->unk1F8 = 1;
|
||||
groundBg->unk1F9 = 1;
|
||||
groundBg->unk1FA = 1;
|
||||
groundBg->unk1FB = 1;
|
||||
groundBg->unk1BC = 0;
|
||||
for (; unk0Id < bplHeader->numPalettes && unk0Id < groundBg->unk52C.unk8; unk0Id++, sub0Ptr++, animSpecifications++) {
|
||||
if (animSpecifications->numFrames > 0) {
|
||||
sub0Ptr->unk4 = animationPalette;
|
||||
animationPalette += animSpecifications->numFrames * 15;
|
||||
}
|
||||
else {
|
||||
sub0Ptr->unk4 = NULL;
|
||||
}
|
||||
sub0Ptr->unk0 = 0;
|
||||
sub0Ptr->unk2 = 0;
|
||||
sub0Ptr->unk8 = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
groundBg->animationSpecifications = NULL;
|
||||
groundBg->unk1F8 = 0;
|
||||
groundBg->unk1F9 = 0;
|
||||
groundBg->unk1FA = 0;
|
||||
groundBg->unk1FB = 0;
|
||||
groundBg->unk1BC = 0;
|
||||
}
|
||||
|
||||
for (; unk0Id < UNK_0_ARR_COUNT; unk0Id++, sub0Ptr++) {
|
||||
sub0Ptr->unk0 = 0;
|
||||
sub0Ptr->unk2 = 0;
|
||||
sub0Ptr->unk4 = sub0Ptr->unk8 = 0;
|
||||
}
|
||||
|
||||
for (unk3E0Id = 0; unk3E0Id < UNK_3E0_ARR_COUNT; unk3E0Id++) {
|
||||
SubStruct_3E0 *sub3E0 = &groundBg->unk3E0[unk3E0Id];
|
||||
sub3E0->unk0 = 0;
|
||||
sub3E0->unk1 = 0;
|
||||
sub3E0->unk4 = 0;
|
||||
sub3E0->unk2 = 0;
|
||||
ZInit8(&sub3E0->bpaFile);
|
||||
sub3E0->unk10 = 0;
|
||||
sub3E0->unk18 = 0;
|
||||
sub3E0->unk14 = 0;
|
||||
sub3E0->unk20 = 0;
|
||||
sub3E0->unk24 = sub3E0->unk1C = 0;
|
||||
sub3E0->unk28 = 0;
|
||||
}
|
||||
|
||||
r7 = groundBg->unk52C.unk2;
|
||||
s32 r5;
|
||||
for (r5 = 0; r5 < groundBg->unk52C.unk4; r5++, r7++) {
|
||||
LayerSpecs *layerSpecs = &groundBg->layerSpecs[r5];
|
||||
s32 vramId = (groundBg->unk52C.unkA + layerSpecs->numTiles);
|
||||
void *vramPtr = ov11_02320C18[groundBg->unk52C.unk0][r7] + (vramId * 32);
|
||||
s32 r8 = (r5 == 0) ? 0 : 2;
|
||||
s32 r9 = (r5 == 0) ? 0 : 4;
|
||||
layerSpecs = &groundBg->layerSpecs[r5];
|
||||
s32 r6;
|
||||
|
||||
for (r6 = 0; r6 < 2; r6++, r9++, r8++) {
|
||||
|
||||
SubStruct_3E0 *sub3E0 = &groundBg->unk3E0[r8];
|
||||
if (entry.others_bpa[r9].name[0] != '\0' && groundBg->unk52C.unk0 == 0) {
|
||||
const struct BpaHeader *bpaHeader;
|
||||
const void *r1, *r0;
|
||||
|
||||
sprintf(textBuf, ov11_02320C94, entry.others_bpa[r9].name);
|
||||
LoadFileFromRom(&sub3E0->bpaFile, textBuf, flags);
|
||||
sub3E0->unk0 = 1;
|
||||
sub3E0->unk1 = 1;
|
||||
bpaHeader = sub3E0->bpaFile.iov_base;
|
||||
sub3E0->unk10 = bpaHeader;
|
||||
r1 = &bpaHeader->durationPerFrame;
|
||||
r0 = r1 + bpaHeader->numFrames * 4;
|
||||
sub3E0->unk14 = sub3E0->unk18 = r1;
|
||||
sub3E0->unk1C = sub3E0->unk20 = r0;
|
||||
sub3E0->unk2 = 0;
|
||||
sub3E0->unk4 = *((u32 *)sub3E0->unk18); // hm...
|
||||
sub3E0->unk24 = vramPtr;
|
||||
sub3E0->unk28 = layerSpecs->bpaSlotNumTiles[r6] * 32;
|
||||
|
||||
vramPtr += layerSpecs->bpaSlotNumTiles[r6] * 32;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (groundBg->unk52C.unk4 > 0) {
|
||||
ov11_022EE620(groundBg, 1);
|
||||
}
|
||||
else {
|
||||
ov11_022EE620(groundBg, 0);
|
||||
}
|
||||
groundBg->mapRender[0].tilemapRenderFunc(&groundBg->mapRender[0]);
|
||||
groundBg->unk2BA = 1;
|
||||
TRY_CLOSE_FILE(groundBg->bpcFile);
|
||||
TRY_CLOSE_FILE(groundBg->bmaFile);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user