Some function sync with Sky

This commit is contained in:
DizzyEggg 2025-07-20 22:02:26 +02:00
parent 4efcaa5486
commit eb1d128dcd
3 changed files with 32 additions and 27 deletions

View File

@ -1,6 +1,5 @@
.section .rodata
.align 2
.if MODERN == 0
.incbin "data/unknown_unused/unk_9D02950.bin"
.endif

View File

@ -603,68 +603,68 @@ static void _UncompressCell(void *dst_, u16 *chunkDimensions, const void *src_,
static const u8 *BmaLayerNrlDecompressor(u16 **dstArray, const void *bmaData, SubStruct_52C *a2, BmaHeader *bmaHeader)
{
s32 i, j, k, l;
s32 i, k, j, l;
const u8 *src = bmaData;
for (i = 0; i < a2->numLayers; i++) {
// Interestingly enough it's swapped in Sky dstArray[a2->numLayers - i - 1]
u16 *dst = dstArray[i];
for (j = 0; j < bmaHeader->mapHeightChunks; j++) {
k = 0;
if (j == 0) {
while (k < bmaHeader->mapWidthChunks) {
s32 val = *src++;
if (val > 191) {
for (l = 191; l < val; l++) {
s32 cmd = *src++;
if (cmd >= 0xc0) {
for (l = 0xC0; l <= cmd; l++) {
s32 dstVal = src[0] | (src[1] << 8) | (src[2] << 16); src += 3;
*dst++ = dstVal & 0xFFF;
*dst++ = (dstVal >> 12) & 0xFFF;
}
k += (val - 191) * 2;
k += (cmd - 0xBF) * 2;
}
else if (val > 127) {
else if (cmd >= 0x80) {
s32 dstVal = src[0] | (src[1] << 8) | (src[2] << 16); src += 3;
for (l = 127; l < val; l++) {
for (l = 0x80; l <= cmd; l++) {
*dst++ = dstVal & 0xFFF;
*dst++ = (dstVal >> 12) & 0xFFF;
}
k += (val - 127) * 2;
k += (cmd - 0x7F) * 2;
}
else {
for (l = 0; l <= val; l++) {
for (l = 0; l <= cmd; l++) {
*dst++ = 0;
*dst++ = 0;
}
k += (val + 1) * 2;
k += (cmd + 1) * 2;
}
}
}
else {
u16 *ptrVal = dst - 64;
while (k < bmaHeader->mapWidthChunks) {
s32 val = *src++;
if (val > 191) {
for (l = 191; l < val; l++) {
s32 cmd = *src++;
if (cmd >= 0xC0) {
for (l = 0xC0; l <= cmd; l++) {
s32 dstVal = src[0] | (src[1] << 8) | (src[2] << 16); src += 3;
*dst++ = (dstVal & 0xFFF) ^ *ptrVal++;
*dst++ = ((dstVal >> 12) & 0xFFF) ^ *ptrVal++;
*dst++ = *ptrVal++ ^ (dstVal & 0xFFF);
*dst++ = *ptrVal++ ^ ((dstVal >> 12) & 0xFFF);
}
k += (val - 191) * 2;
k += (cmd - 0xBF) * 2;
}
else if (val > 127) {
else if (cmd >= 0x80) {
s32 dstVal = src[0] | (src[1] << 8) | (src[2] << 16); src += 3;
for (l = 127; l < val; l++) {
*dst++ = (dstVal & 0xFFF) ^ *ptrVal++;
*dst++ = ((dstVal >> 12) & 0xFFF) ^ *ptrVal++;
for (l = 0x80; l <= cmd; l++) {
*dst++ = *ptrVal++ ^ (dstVal & 0xFFF);
*dst++ = *ptrVal++ ^ ((dstVal >> 12) & 0xFFF);
}
k += (val - 127) * 2;
k += (cmd - 0x7F) * 2;
}
else {
for (l = 0; l <= val; l++) {
for (l = 0; l <= cmd; l++) {
*dst++ = *ptrVal++;
*dst++ = *ptrVal++;
}
k += (val + 1) * 2;
k += (cmd + 1) * 2;
}
}
}

View File

@ -87,7 +87,13 @@ void sub_80ADD9C(OpenedFile **a0, OpenedFile **a1, u32 *a2, void *a3, u16 *a4, c
static s32 sub_80ADF8C(s32 a0, s32 a1, s32 a2, s32 a3, u16 *a4, s32 a5)
{
s32 ret = a5;
if (a0 >= 0 && a1 >= 0 && a0 < a2 && a1 < a3) {
if (a0 < 0)
return ret;
if (a1 < 0)
return ret;
if (a0 >= a2)
return ret;
if (a1 < a3) {
ret = a4[a0 + (a1 * a2)];
}
return ret;