sub_800829C

This commit is contained in:
DizzyEggg
2024-09-25 11:07:23 +02:00
parent 751674c27a
commit 82986f2b74
2 changed files with 177 additions and 518 deletions

View File

@@ -5,499 +5,7 @@
.text
thumb_func_start sub_8007FA8
sub_8007FA8:
adds r3, r0, 0
lsrs r0, r3, 28
lsrs r1, r3, 20
movs r2, 0xF0
ands r1, r2
orrs r0, r1
lsrs r1, r3, 12
movs r2, 0xF0
lsls r2, 4
ands r1, r2
orrs r0, r1
lsrs r1, r3, 4
movs r2, 0xF0
lsls r2, 8
ands r1, r2
orrs r0, r1
lsls r1, r3, 4
movs r2, 0xF0
lsls r2, 12
ands r1, r2
orrs r0, r1
lsls r1, r3, 12
movs r2, 0xF0
lsls r2, 16
ands r1, r2
orrs r0, r1
lsls r1, r3, 20
movs r2, 0xF0
lsls r2, 20
ands r1, r2
orrs r0, r1
lsls r3, 28
orrs r0, r3
bx lr
thumb_func_end sub_8007FA8
thumb_func_start sub_8007FEC
sub_8007FEC:
push {r4-r6,lr}
mov r6, r9
mov r5, r8
push {r5,r6}
sub sp, 0x14
mov r8, r0
mov r9, r1
ldr r4, [sp, 0x2C]
ldr r5, [sp, 0x30]
ldr r6, [sp, 0x34]
ldr r0, _08008024
ldr r1, _08008028
str r2, [sp]
str r3, [sp, 0x4]
str r4, [sp, 0x8]
str r5, [sp, 0xC]
str r6, [sp, 0x10]
mov r2, r8
mov r3, r9
bl sub_8008030
add sp, 0x14
pop {r3,r4}
mov r8, r3
mov r9, r4
pop {r4-r6}
pop {r0}
bx r0
.align 2, 0
_08008024: .4byte gUnknown_2027370
_08008028: .4byte gUnknown_202B038
thumb_func_end sub_8007FEC
thumb_func_start nullsub_161
nullsub_161:
bx lr
thumb_func_end nullsub_161
thumb_func_start sub_8008030
sub_8008030:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x10
str r1, [sp]
ldr r1, [sp, 0x30]
mov r8, r1
ldr r6, [sp, 0x3C]
lsls r1, r2, 3
adds r1, r2
lsls r1, 3
adds r5, r0, r1
adds r0, r3, 0
cmp r3, 0
bge _08008054
adds r0, r3, 0x7
_08008054:
asrs r3, r0, 3
mov r0, r8
cmp r0, 0
bge _0800805E
adds r0, 0x7
_0800805E:
asrs r0, 3
mov r8, r0
ldr r0, [sp, 0x34]
cmp r0, 0
bge _0800806A
adds r0, 0x7
_0800806A:
asrs r0, 3
str r0, [sp, 0x34]
ldr r0, [sp, 0x38]
cmp r0, 0
bge _08008076
adds r0, 0x7
_08008076:
asrs r0, 3
str r0, [sp, 0x38]
ldr r2, [sp, 0x40]
lsls r2, 12
str r2, [sp, 0x40]
movs r1, 0x8
ldrsh r0, [r5, r1]
cmp r8, r0
blt _0800808A
b _08008194
_0800808A:
movs r2, 0x4
ldrsh r0, [r5, r2]
mov r1, r8
muls r1, r0
adds r0, r1, 0
ldr r1, [sp, 0x34]
adds r2, r3, r1
adds r0, r2
lsls r0, 5
ldr r1, [r5, 0x18]
adds r1, r0
mov r10, r1
movs r3, 0
str r3, [sp, 0x4]
str r2, [sp, 0xC]
ldr r0, [sp, 0x38]
cmp r3, r0
bge _08008194
_080080AE:
ldr r7, [sp, 0xC]
mov r4, r10
mov r1, r8
adds r1, 0x1
str r1, [sp, 0x8]
ldr r2, [sp, 0x34]
cmp r2, 0
ble _08008172
mov r9, r2
_080080C0:
subs r7, 0x1
subs r4, 0x20
movs r3, 0x4
ldrsh r0, [r5, r3]
cmp r7, r0
bge _08008164
ldr r0, [r5, 0x3C]
cmp r0, r4
bls _080080D4
str r4, [r5, 0x3C]
_080080D4:
ldm r6!, {r0}
bl sub_8007FA8
str r0, [r4]
ldm r6!, {r0}
bl sub_8007FA8
str r0, [r4, 0x4]
ldm r6!, {r0}
bl sub_8007FA8
str r0, [r4, 0x8]
ldm r6!, {r0}
bl sub_8007FA8
str r0, [r4, 0xC]
ldm r6!, {r0}
bl sub_8007FA8
str r0, [r4, 0x10]
ldm r6!, {r0}
bl sub_8007FA8
str r0, [r4, 0x14]
ldm r6!, {r0}
bl sub_8007FA8
str r0, [r4, 0x18]
ldm r6!, {r0}
bl sub_8007FA8
str r0, [r4, 0x1C]
adds r1, r4, 0
adds r1, 0x20
ldr r0, [r5, 0x40]
cmp r0, r1
bcs _08008120
str r1, [r5, 0x40]
_08008120:
movs r1, 0x2
ldrsh r0, [r5, r1]
add r0, r8
movs r2, 0
ldrsh r1, [r5, r2]
adds r1, r7
lsls r1, 1
lsls r0, 6
ldr r3, [sp]
adds r0, r3
adds r1, r0
ldrh r0, [r1]
ldr r3, _08008160
adds r2, r3, 0
ands r0, r2
strh r0, [r1]
movs r1, 0x2
ldrsh r0, [r5, r1]
add r0, r8
movs r2, 0
ldrsh r1, [r5, r2]
adds r1, r7
lsls r1, 1
lsls r0, 6
ldr r3, [sp]
adds r0, r3
adds r1, r0
ldrh r2, [r1]
ldr r0, [sp, 0x40]
orrs r0, r2
strh r0, [r1]
b _08008166
.align 2, 0
_08008160: .4byte 0x00000fff
_08008164:
adds r6, 0x20
_08008166:
movs r0, 0x1
negs r0, r0
add r9, r0
mov r1, r9
cmp r1, 0
bne _080080C0
_08008172:
ldr r2, [sp, 0x8]
mov r8, r2
ldr r0, [r5, 0x20]
lsls r0, 2
add r10, r0
movs r3, 0x20
add r10, r3
movs r1, 0x8
ldrsh r0, [r5, r1]
cmp r8, r0
bge _08008194
ldr r2, [sp, 0x4]
adds r2, 0x1
str r2, [sp, 0x4]
ldr r3, [sp, 0x38]
cmp r2, r3
blt _080080AE
_08008194:
add sp, 0x10
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_8008030
thumb_func_start sub_80081A4
sub_80081A4:
push {r4-r7,lr}
mov r7, r10
mov r6, r9
mov r5, r8
push {r5-r7}
sub sp, 0x4
str r1, [sp]
lsls r1, r0, 3
adds r1, r0
lsls r1, 3
ldr r0, _08008234
adds r6, r1, r0
lsls r3, 7
ldr r0, _08008238
adds r3, r0
ldr r0, [sp]
cmp r0, 0
bge _080081CA
adds r0, 0x7
_080081CA:
asrs r0, 3
str r0, [sp]
adds r0, r2, 0
cmp r2, 0
bge _080081D6
adds r0, r2, 0x7
_080081D6:
asrs r2, r0, 3
movs r0, 0x2
mov r9, r0
mov r10, r0
movs r1, 0x8
ldrsh r0, [r6, r1]
cmp r2, r0
bge _08008262
movs r7, 0x4
ldrsh r0, [r6, r7]
muls r0, r2
ldr r1, [sp]
adds r0, r1
lsls r0, 5
ldr r1, [r6, 0x28]
adds r5, r1, r0
movs r7, 0
mov r8, r7
_080081FA:
ldr r4, [sp]
adds r1, r5, 0
adds r2, 0x1
mov r12, r2
mov r0, r9
cmp r0, 0
beq _08008248
mov r2, r9
_0800820A:
movs r7, 0x4
ldrsh r0, [r6, r7]
cmp r4, r0
bge _0800823C
ldm r3!, {r0}
stm r1!, {r0}
ldm r3!, {r0}
stm r1!, {r0}
ldm r3!, {r0}
stm r1!, {r0}
ldm r3!, {r0}
stm r1!, {r0}
ldm r3!, {r0}
stm r1!, {r0}
ldm r3!, {r0}
stm r1!, {r0}
ldm r3!, {r0}
stm r1!, {r0}
ldm r3!, {r0}
stm r1!, {r0}
b _08008240
.align 2, 0
_08008234: .4byte gUnknown_2027370
_08008238: .4byte gUnknown_80B86B4
_0800823C:
adds r1, 0x20
adds r3, 0x20
_08008240:
adds r4, 0x1
subs r2, 0x1
cmp r2, 0
bne _0800820A
_08008248:
mov r2, r12
ldr r0, [r6, 0x20]
lsls r0, 2
adds r5, r0
adds r5, 0x20
movs r1, 0x8
ldrsh r0, [r6, r1]
cmp r2, r0
bge _08008262
movs r7, 0x1
add r8, r7
cmp r8, r10
blt _080081FA
_08008262:
add sp, 0x4
pop {r3-r5}
mov r8, r3
mov r9, r4
mov r10, r5
pop {r4-r7}
pop {r0}
bx r0
thumb_func_end sub_80081A4
thumb_func_start sub_8008274
sub_8008274:
push {r4,lr}
sub sp, 0x4
adds r4, r0, 0
adds r3, r1, 0
ldr r0, _08008290
ldr r1, _08008294
str r2, [sp]
adds r2, r4, 0
bl sub_800829C
add sp, 0x4
pop {r4}
pop {r0}
bx r0
.align 2, 0
_08008290: .4byte gUnknown_2027370
_08008294: .4byte gUnknown_202B038
thumb_func_end sub_8008274
thumb_func_start nullsub_162
nullsub_162:
bx lr
thumb_func_end nullsub_162
thumb_func_start sub_800829C
sub_800829C:
push {r4-r7,lr}
mov r7, r8
push {r7}
mov r8, r1
ldr r7, [sp, 0x18]
lsls r1, r2, 3
adds r1, r2
lsls r1, 3
adds r4, r0, r1
lsls r7, 12
ldr r0, [r4, 0x18]
movs r1, 0x4
ldrsh r2, [r4, r1]
movs r5, 0x8
ldrsh r1, [r4, r5]
lsls r1, 5
muls r1, r2
adds r2, r3, 0
bl DecompressAT
movs r2, 0
movs r1, 0x8
ldrsh r0, [r4, r1]
cmp r2, r0
bge _08008312
movs r0, 0x4
ldrsh r5, [r4, r0]
mov r12, r5
_080082D4:
adds r5, r2, 0x1
mov r1, r12
cmp r1, 0
ble _08008308
movs r0, 0x2
ldrsh r1, [r4, r0]
adds r1, r2
movs r2, 0
ldrsh r0, [r4, r2]
lsls r1, 6
ldr r6, _08008330
lsls r0, 1
adds r0, r1
mov r1, r8
adds r2, r0, r1
movs r0, 0x4
ldrsh r3, [r4, r0]
_080082F6:
ldrh r1, [r2]
adds r0, r6, 0
ands r0, r1
orrs r0, r7
strh r0, [r2]
adds r2, 0x2
subs r3, 0x1
cmp r3, 0
bne _080082F6
_08008308:
adds r2, r5, 0
movs r1, 0x8
ldrsh r0, [r4, r1]
cmp r2, r0
blt _080082D4
_08008312:
ldr r0, [r4, 0x28]
str r0, [r4, 0x30]
ldr r0, [r4, 0x1C]
str r0, [r4, 0x34]
ldr r0, [r4, 0x2C]
str r0, [r4, 0x38]
adds r1, r4, 0
adds r1, 0x44
movs r0, 0x1
strb r0, [r1]
pop {r3}
mov r8, r3
pop {r4-r7}
pop {r0}
bx r0
.align 2, 0
_08008330: .4byte 0x00000fff
thumb_func_end sub_800829C
thumb_func_start sub_8008334
sub_8008334:

View File

@@ -1,6 +1,7 @@
#include "global.h"
#include "text1.h"
#include "text2.h"
#include "decompress.h"
// data.s
extern const u32 gUnknown_80B853C[16];
@@ -2475,51 +2476,201 @@ UNUSED static void nullsub_160(void)
void sub_8007E64(UnkTextStruct1 *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a5, s32 a6, u32 *a7, u32 a8)
{
s32 i, j;
UnkTextStruct1 *r4 = &a0[a2];
UnkTextStruct1 *strPtr = &a0[a2];
a3 /= 8;
a4 /= 8;
a5 /= 8;
a6 /= 8;
a8 *= 4096;
if (a4 < r4->unk8) {
s32 id = (r4->unk4 * a4) + a3;
u32 *r8 = &r4->unk18[id * 8];
if (a4 < strPtr->unk8) {
s32 id = (strPtr->unk4 * a4) + a3;
u32 *unk18Ptr = &strPtr->unk18[id * 8];
for (i = 0; i < a6; i++) {
s32 r6 = a3;
u32 *r3 = r8;
s32 xMaybe = a3;
u32 *loopUnk18Ptr = unk18Ptr;
for (j = 0; j < a5; j++) {
if (r6 < r4->unk4) {
if (r4->unk3C > r3) {
r4->unk3C = r3;
if (xMaybe < strPtr->unk4) {
if (strPtr->unk3C > loopUnk18Ptr) {
strPtr->unk3C = loopUnk18Ptr;
}
*(r3++) = *(a7++);
*(r3++) = *(a7++);
*(r3++) = *(a7++);
*(r3++) = *(a7++);
*(r3++) = *(a7++);
*(r3++) = *(a7++);
*(r3++) = *(a7++);
*(r3++) = *a7;
if (r4->unk40 < r3) {
r4->unk40 = r3;
*(loopUnk18Ptr++) = *(a7++);
*(loopUnk18Ptr++) = *(a7++);
*(loopUnk18Ptr++) = *(a7++);
*(loopUnk18Ptr++) = *(a7++);
*(loopUnk18Ptr++) = *(a7++);
*(loopUnk18Ptr++) = *(a7++);
*(loopUnk18Ptr++) = *(a7++);
*(loopUnk18Ptr++) = *a7;
if (strPtr->unk40 < loopUnk18Ptr) {
strPtr->unk40 = loopUnk18Ptr;
}
a7++;
a1[r4->unk2 + a4][r4->unk0 + r6] &= 0xFFF;
a1[r4->unk2 + a4][r4->unk0 + r6] |= a8;
a1[strPtr->unk2 + a4][strPtr->unk0 + xMaybe] &= 0xFFF;
a1[strPtr->unk2 + a4][strPtr->unk0 + xMaybe] |= a8;
}
else {
r3 += 8;
loopUnk18Ptr += 8;
a7 += 8;
}
r6++;
xMaybe++;
}
a4++;
r8 += r4->unk20;
r8 += 8;
if (a4 >= r4->unk8)
unk18Ptr += strPtr->unk20;
unk18Ptr += 8;
if (a4 >= strPtr->unk8)
break;
}
}
}
u32 sub_8007FA8(u32 a0)
{
u32 r0;
r0 = (a0 >> 28) & 0xF;
r0 |= (a0 >> 20) & 0xF0;
r0 |= (a0 >> 12) & 0xF00;
r0 |= (a0 >> 4) & 0xF000;
r0 |= (a0 << 4) & 0xF0000;
r0 |= (a0 << 12) & 0xF00000;
r0 |= (a0 << 20) & 0xF000000;
r0 |= (a0 << 28) & 0xF0000000;
return r0;
}
void sub_8008030(UnkTextStruct1 *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a5, s32 a6, u32 *a7, u32 a8);
UNUSED void sub_8007FEC(u32 a0, u32 a1, u32 a2, u32 a3, u32 a4, u32 *a5, u32 a6)
{
sub_8008030(gUnknown_2027370, gUnknown_202B038[0], a0, a1, a2, a3, a4, a5, a6);
}
void nullsub_161(void) {}
// Similar to sub_8007E64
void sub_8008030(UnkTextStruct1 *a0, u16 a1[32][32], u32 a2, s32 a3, s32 a4, s32 a5, s32 a6, u32 *a7, u32 a8)
{
s32 i, j;
UnkTextStruct1 *strPtr = &a0[a2];
a3 /= 8;
a4 /= 8;
a5 /= 8;
a6 /= 8;
a8 *= 4096;
if (a4 < strPtr->unk8) {
u32 *unk18Ptr = &strPtr->unk18[((strPtr->unk4 * a4) + (a3 + a5)) * 8];
for (i = 0; i < a6; i++) {
s32 xMaybe = a3 + a5;
u32 *loopUnk18Ptr = unk18Ptr;
for (j = 0; j < a5; j++) {
xMaybe--;
loopUnk18Ptr -= 8;
if (xMaybe < strPtr->unk4) {
if (strPtr->unk3C > loopUnk18Ptr) {
strPtr->unk3C = loopUnk18Ptr;
}
loopUnk18Ptr[0] = sub_8007FA8(*(a7++));
loopUnk18Ptr[1] = sub_8007FA8(*(a7++));
loopUnk18Ptr[2] = sub_8007FA8(*(a7++));
loopUnk18Ptr[3] = sub_8007FA8(*(a7++));
loopUnk18Ptr[4] = sub_8007FA8(*(a7++));
loopUnk18Ptr[5] = sub_8007FA8(*(a7++));
loopUnk18Ptr[6] = sub_8007FA8(*(a7++));
loopUnk18Ptr[7] = sub_8007FA8(*(a7++));
if (strPtr->unk40 < loopUnk18Ptr + 8) {
strPtr->unk40 = loopUnk18Ptr + 8;
}
a1[strPtr->unk2 + a4][strPtr->unk0 + xMaybe] &= 0xFFF;
a1[strPtr->unk2 + a4][strPtr->unk0 + xMaybe] |= a8;
}
else {
a7 += 8;
}
}
a4++;
unk18Ptr += strPtr->unk20;
unk18Ptr += 8;
if (a4 >= strPtr->unk8)
break;
}
}
}
extern const u32 gUnknown_80B86B4[][32];
// Similar to sub_8007E64
UNUSED void sub_80081A4(s32 a0, s32 a3, s32 a4, s32 a7Id)
{
s32 i, j, a5, a6;
UnkTextStruct1 *strPtr = &gUnknown_2027370[a0];
const u32 *a7 = gUnknown_80B86B4[a7Id];
a3 /= 8;
a4 /= 8;
a5 = 2;
a6 = 2;
if (a4 < strPtr->unk8) {
s32 id = (strPtr->unk4 * a4) + a3;
u32 *unk18Ptr = &strPtr->unk28[id * 8];
for (i = 0; i < a6; i++) {
s32 xMaybe = a3;
u32 *loopUnk18Ptr = unk18Ptr;
for (j = 0; j < a5; j++) {
if (xMaybe < strPtr->unk4) {
*(loopUnk18Ptr++) = *(a7++);
*(loopUnk18Ptr++) = *(a7++);
*(loopUnk18Ptr++) = *(a7++);
*(loopUnk18Ptr++) = *(a7++);
*(loopUnk18Ptr++) = *(a7++);
*(loopUnk18Ptr++) = *(a7++);
*(loopUnk18Ptr++) = *(a7++);
*(loopUnk18Ptr++) = *a7;
a7++;
}
else {
loopUnk18Ptr += 8;
a7 += 8;
}
xMaybe++;
}
a4++;
unk18Ptr += strPtr->unk20;
unk18Ptr += 8;
if (a4 >= strPtr->unk8)
break;
}
}
}
void sub_800829C(UnkTextStruct1 *a0, u16 a1[32][32], s32 a2, const u8 *compressedData, u32 a4);
void sub_8008274(s32 a0, const u8 *compressedData, s32 a2)
{
sub_800829C(gUnknown_2027370, gUnknown_202B038[0], a0, compressedData, a2);
}
void nullsub_162() {}
void sub_800829C(UnkTextStruct1 *a0, u16 a1[32][32], s32 a2, const u8 *compressedData, u32 a4)
{
s32 i, j;
UnkTextStruct1 *strPtr = &a0[a2];
a4 *= 4096;
DecompressAT((u8 *)strPtr->unk18, (strPtr->unk4 * 32) * strPtr->unk8, compressedData);
for (i = 0; i < strPtr->unk8; i++) {
for (j = 0; j < strPtr->unk4; j++) {
a1[strPtr->unk2 + i][strPtr->unk0 + j] &= 0xFFF;
a1[strPtr->unk2 + i][strPtr->unk0 + j] |= a4;
}
}
strPtr->unk30 = strPtr->unk28;
strPtr->unk34 = strPtr->unk1C;
strPtr->unk38 = strPtr->unk2C;
strPtr->unk44 = 1;
}