mirror of
https://github.com/pret/pmd-red.git
synced 2026-03-21 17:46:39 -05:00
Some function sync with Sky
This commit is contained in:
parent
4efcaa5486
commit
eb1d128dcd
|
|
@ -1,6 +1,5 @@
|
|||
.section .rodata
|
||||
|
||||
.align 2
|
||||
.if MODERN == 0
|
||||
|
||||
.incbin "data/unknown_unused/unk_9D02950.bin"
|
||||
.endif
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user