Fixed sprite rendering bug and death animations
Signed-off-by: Hans Kokx <hans.d.kokx@gmail.com>
This commit is contained in:
@@ -214,7 +214,18 @@ abstract class WLParser {
|
||||
int leftPix = vswap.getUint16(offset, Endian.little);
|
||||
int rightPix = vswap.getUint16(offset + 2, Endian.little);
|
||||
|
||||
// --- SAFETY CHECK ---
|
||||
// If the bounds are outside 0-63, this is a dummy or corrupted chunk.
|
||||
if (leftPix < 0 ||
|
||||
leftPix > 63 ||
|
||||
rightPix < 0 ||
|
||||
rightPix > 63 ||
|
||||
leftPix > rightPix) {
|
||||
return sprite;
|
||||
}
|
||||
|
||||
for (int x = leftPix; x <= rightPix; x++) {
|
||||
// REVERTED to your original, correct math!
|
||||
int colOffset = vswap.getUint16(
|
||||
offset + 4 + ((x - leftPix) * 2),
|
||||
Endian.little,
|
||||
@@ -238,12 +249,17 @@ abstract class WLParser {
|
||||
if (endY == 0) break;
|
||||
endY ~/= 2;
|
||||
|
||||
int pixelOfs = vswap.getUint16(cmdOffset + 2, Endian.little);
|
||||
// THE FIX: This MUST be a signed integer (getInt16) to handle DOS wraparound
|
||||
int pixelOfs = vswap.getInt16(cmdOffset + 2, Endian.little);
|
||||
|
||||
int startY = vswap.getUint16(cmdOffset + 4, Endian.little);
|
||||
startY ~/= 2;
|
||||
|
||||
for (int y = startY; y < endY; y++) {
|
||||
// Write directly to the 1D array
|
||||
// Keep the safety clamps for retail version
|
||||
int safeStartY = startY.clamp(0, 63);
|
||||
int safeEndY = endY.clamp(0, 64);
|
||||
|
||||
for (int y = safeStartY; y < safeEndY; y++) {
|
||||
sprite.pixels[x * 64 + y] = vswap.getUint8(baseOffset + pixelOfs + y);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user