Revert "Merge branch 'Isometric-Dev' into master"

This reverts commit ae0648fccc, reversing
changes made to d7243e8265.
This commit is contained in:
Justin Marshall
2020-08-06 15:50:30 -07:00
parent ae0648fccc
commit 6685b5d51a
433 changed files with 8487 additions and 172344 deletions
+233
View File
@@ -707,3 +707,236 @@ extern "C" int LCW_Comp(const void* src, void* dst, unsigned int bytes)
return putp - putstart;
}
// jmarshall end
extern "C" int LCW_Uncomp_CS(const void* src, void* dst, unsigned int bytes)
{
//captainslog_assert(src != nullptr);
//captainslog_assert(dst != nullptr);
uint8_t* putstart = static_cast<uint8_t*>(dst);
uint8_t* putend = putstart + bytes;
uint8_t* putp = putstart;
const uint8_t* getp = static_cast<const uint8_t*>(src);
// const uint8_t *getstart = getp;
// If first byte is 0, the all offsets are relative to current position. Otherwise some are absolute to the start of the
// buffer, meaning only ~64KB can be compressed effectively. Compressor implemented in this file uses size to determine
// compression scheme used.
if (*getp == 0) {
// captainslog_debug("LCW Relative Decompression... ");
getp++;
while (putp < putend) {
uint8_t flag;
uint16_t cpysize;
uint16_t offset;
flag = *getp++;
if (flag & 0x80) {
if (flag & 0x40) {
cpysize = (flag & 0x3F) + 3;
// long set 0b11111110
if (flag == 0xFE) {
cpysize = *getp++;
cpysize += (*getp++) << 8;
if (cpysize > putend - putp) {
cpysize = putend - putp;
}
// captainslog_debug("0b11111110 Source Pos %ld, Dest Pos %ld, Count %d", source - sstart - 3, dest -
// start, cpysize);
memset(putp, (*getp++), cpysize);
putp += cpysize;
}
else {
uint8_t* s;
// long move, abs 0b11111111
if (flag == 0xFF) {
cpysize = *getp++;
cpysize += (*getp++) << 8;
if (cpysize > putend - putp) {
cpysize = putend - putp;
}
offset = *getp++;
offset += (*getp++) << 8;
// extended format for VQA32 and large WSA files.
s = putp - offset;
// captainslog_debug("0b11111111 Source Pos %ld, Dest Pos %ld, Count %d, Offset %d", source - sstart -
// 5, dest - start, cpysize, offset);
for (; cpysize > 0; --cpysize) {
*putp++ = *s++;
}
// short move abs 0b11??????
}
else {
if (cpysize > putend - putp) {
cpysize = putend - putp;
}
offset = *getp++;
offset += (*getp++) << 8;
// extended format for VQA32 and large WSA files.
s = putp - offset;
// captainslog_debug("0b11?????? Source Pos %ld, Dest Pos %ld, Count %d, Offset %d", source - sstart -
// 3, dest - start, cpysize, offset);
for (; cpysize > 0; --cpysize) {
*putp++ = *s++;
}
}
}
// short copy 0b10??????
}
else {
if (flag == 0x80) {
// captainslog_debug("0b10?????? Source Pos %ld, Dest Pos %ld, Count %d", source - sstart - 1, dest -
// start, 0);
return putp - putstart;
}
cpysize = flag & 0x3F;
if (cpysize > putend - putp) {
cpysize = putend - putp;
}
// captainslog_debug("0b10?????? Source Pos %ld, Dest Pos %ld, Count %d", source - sstart - 1, dest - start,
// cpysize);
for (; cpysize > 0; --cpysize) {
*putp++ = *getp++;
}
}
// short move rel 0b0???????
}
else {
cpysize = (flag >> 4) + 3;
if (cpysize > putend - putp) {
cpysize = putend - putp;
}
offset = ((flag & 0xF) << 8) + (*getp++);
// captainslog_debug("0b0??????? Source Pos %ld, Dest Pos %ld, Count %d, Offset %d", source - sstart - 2, dest -
// start, cpysize, offset);
for (; cpysize > 0; --cpysize) {
*putp = *(putp - offset);
putp++;
}
}
}
}
else {
// captainslog_debug("LCW Decompression... ");
while (putp < putend) {
uint8_t flag;
uint16_t cpysize;
uint16_t offset;
flag = *getp++;
if (flag & 0x80) {
if (flag & 0x40) {
cpysize = (flag & 0x3F) + 3;
// long set 0b11111110
if (flag == 0xFE) {
cpysize = *getp++;
cpysize += (*getp++) << 8;
if (cpysize > putend - putp) {
cpysize = putend - putp;
}
// captainslog_debug("0b11111110 Source Pos %ld, Dest Pos %ld, Count %d", source - sstart - 3, dest -
// start, cpysize);
memset(putp, (*getp++), cpysize);
putp += cpysize;
}
else {
uint8_t* s;
// long move, abs 0b11111111
if (flag == 0xFF) {
cpysize = *getp++;
cpysize += (*getp++) << 8;
if (cpysize > putend - putp) {
cpysize = putend - putp;
}
offset = *getp++;
offset += (*getp++) << 8;
s = putstart + offset;
// captainslog_debug("0b11111111 Source Pos %ld, Dest Pos %ld, Count %d, Offset %d", source - sstart -
// 5, dest - start, cpysize, offset);
for (; cpysize > 0; --cpysize) {
*putp++ = *s++;
}
// short move abs 0b11??????
}
else {
if (cpysize > putend - putp) {
cpysize = putend - putp;
}
offset = *getp++;
offset += (*getp++) << 8;
s = putstart + offset;
// captainslog_debug("0b11?????? Source Pos %ld, Dest Pos %ld, Count %d, Offset %d", source - sstart -
// 3, dest - start, cpysize, offset);
for (; cpysize > 0; --cpysize) {
*putp++ = *s++;
}
}
}
// short copy 0b10??????
}
else {
if (flag == 0x80) {
// captainslog_debug("0b10?????? Source Pos %ld, Dest Pos %ld, Count %d", source - sstart - 1, dest -
// start, 0);
return putp - putstart;
}
cpysize = flag & 0x3F;
if (cpysize > putend - putp) {
cpysize = putend - putp;
}
// captainslog_debug("0b10?????? Source Pos %ld, Dest Pos %ld, Count %d", source - sstart - 1, dest - start,
// cpysize);
for (; cpysize > 0; --cpysize) {
*putp++ = *getp++;
}
}
// short move rel 0b0???????
}
else {
cpysize = (flag >> 4) + 3;
if (cpysize > putend - putp) {
cpysize = putend - putp;
}
offset = ((flag & 0xF) << 8) + (*getp++);
// captainslog_debug("0b0??????? Source Pos %ld, Dest Pos %ld, Count %d, Offset %d", source - sstart - 2, dest -
// start, cpysize, offset);
for (; cpysize > 0; --cpysize) {
*putp = *(putp - offset);
putp++;
}
}
}
}
return putp - putstart;
}