Map Tiled Horizontal and Vertical flip flags onto GTE equivalents

This commit is contained in:
Lucas Scharenbroich 2021-08-14 21:22:21 -05:00
parent 232f94d30e
commit 1492ac3b36
2 changed files with 29 additions and 4 deletions

View File

@ -386,7 +386,7 @@ App_TileMapBG0
dw 41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41
dw 41,41,56,21,21,21,21,59,41,41,41,41,41,41,41,41
dw 41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41
dw 41,41,57,2147483705,41,41,41,41,41,41,41,41,41,41,41,41
dw 41,41,57,569,41,41,41,41,41,41,41,41,41,41,41,41
dw 41,41,41,41,41,41,41,41,15,16,17,18,41,41,41,41
dw 41,41,41,41,41,41,41,41,41,41,41,41,19,20,21,22
dw 41,41,41,41,41,41,41,41,41,41,41,41,19,20,21,22
@ -402,7 +402,7 @@ App_TileMapBG0
dw 41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41
dw 41,56,21,62,21,21,62,21,59,41,41,41,41,41,41,41
dw 41,41,41,41,41,41,41,41,42,43,42,43,42,43,41,41
dw 41,56,21,62,2147483704,41,41,41,41,41,41,41,41,41,41,41
dw 41,56,21,62,568,41,41,41,41,41,41,41,41,41,41,41
dw 42,43,41,41,41,41,41,41,19,20,21,22,41,41,41,41
dw 41,41,41,41,41,41,41,41,41,41,41,41,19,20,21,22
dw 41,41,41,41,42,43,42,43,41,41,41,41,19,20,21,22
@ -418,7 +418,7 @@ App_TileMapBG0
dw 41,41,41,41,41,41,41,41,41,41,41,41,41,41,41,41
dw 56,21,21,21,21,21,21,21,21,59,41,41,41,41,41,41
dw 41,41,41,41,41,41,41,44,45,45,45,45,45,45,46,41
dw 56,21,21,21,21,2147483704,41,41,41,41,41,41,41,41,41,44
dw 56,21,21,21,21,568,41,41,41,41,41,41,41,41,41,44
dw 45,45,46,41,41,41,41,41,19,20,21,22,41,41,41,41
dw 41,41,41,41,41,41,41,41,41,41,41,41,19,20,21,22
dw 41,41,41,44,45,45,45,45,46,41,41,41,19,20,21,22

View File

@ -219,7 +219,7 @@ function emitLayerData(sb, layer) {
const chunks = [];
const tileIDs = layer.data;
for (let i = 0; i < tileIDs.length; i += N) {
chunks.push(tileIDs.slice(i, i + N))
chunks.push(tileIDs.slice(i, i + N).map(t => convertTileID(t)))
}
// Tiled starts numbering its tiles at 1. This is OK since Tile 0 is reserved in
// GTE, also
@ -228,4 +228,29 @@ function emitLayerData(sb, layer) {
}
return sb;
}
/**
* Map the bit flags used in Tiled to compatible values in GTE
*/
function convertTileID(tileId) {
const GTE_VFLIP_BIT = 0x0400;
const GTE_HFLIP_BIT = 0x0200;
const TILED_VFLIP_BIT = 0x40000000;
const TILED_HFLIP_BIT = 0x80000000;
const TILED_DFLIP_BIT = 0x20000000;
// We don't support the flipped diagonally flag or tile values greater than 511
if ((tileId & TILED_DFLIP_BIT) !== 0) {
throw new Error('Diagonally flipped bits are not supported: tileId = ' + tileId.toString(16));
}
const hflip = (tileId & TILED_HFLIP_BIT) !== 0;
const vflip = (tileId & TILED_VFLIP_BIT) !== 0;
if ((tileId & 0x1FFFFFFF) > 511) {
throw new Error('A maximum of 511 tiles are supported');
}
return (tileId & 0x1FFFFFFF) + (hflip ? GTE_HFLIP_BIT : 0) + (vflip ? GTE_VFLIP_BIT : 0);
}