diff --git a/src/App.TileMapBG0.s b/src/App.TileMapBG0.s index ab7c26d..f7f4e69 100644 --- a/src/App.TileMapBG0.s +++ b/src/App.TileMapBG0.s @@ -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 diff --git a/tools/tiled2iigs.js b/tools/tiled2iigs.js index 4a2b44f..f7bdadb 100644 --- a/tools/tiled2iigs.js +++ b/tools/tiled2iigs.js @@ -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); } \ No newline at end of file