Improving compiler.

This commit is contained in:
2022-01-04 21:36:37 -08:00
parent c9ebb85d13
commit dfd205ce22
28 changed files with 500 additions and 183 deletions

88
scripts/gb2png.js Normal file
View File

@@ -0,0 +1,88 @@
const PNG = require('pngjs').PNG;
const fs = require('fs');
const {
TILE_WIDTH,
TILE_HEIGHT
} = require('./common');
const colorPixel = (id) => {
if(id === undefined) id = 3;
if(id === 3) return { r: 8, g: 24, b: 32 };
if(id === 2) return { r: 52, g: 104, b: 86 };
if(id === 1) return { r: 136, g: 192, b: 112 };
if(id === 0) return { r: 224, g: 248, b: 208 };
throw new Error();
}
const gb2png = (DATA, fileOut) => {
// Begin
const PIXELS = DATA.length / 2 * TILE_WIDTH;
const DATA_WIDTH = TILE_WIDTH;
const DATA_HEIGHT = PIXELS / DATA_WIDTH;
// Create output image
const imageData = new PNG({
width: DATA_WIDTH,
height: DATA_HEIGHT
});
// Convert data into pixels
const pixelsOut = [];
for(let i = 0; i < DATA.length; i += 2) {
const low = DATA[i];
const high = DATA[i+1];
for(let j = 0; j < 8; j++) {
const mask = 0x80 >> j;
const pixel = (low & mask ? 1 : 0) + (high & mask ? 2 : 0);
pixelsOut.push(pixel);
}
}
// Buffer data output
for(let y = 0; y < DATA_HEIGHT; y++) {
for(let x = 0; x < DATA_WIDTH; x++) {
const id = (DATA_WIDTH * y + x);
const color = colorPixel(pixelsOut[id]);
const idx = id << 2;
imageData.data[idx] = color.r;
imageData.data[idx+1] = color.g;
imageData.data[idx+2] = color.b;
imageData.data[idx+3] = 0xFF;
}
}
const buffer = PNG.sync.write(imageData, { });
fs.writeFileSync(fileOut, buffer);
}
// // Now work out tile data
// if(TILEMAP.length) {
// for(let i = 0; i < TILEMAP.length; i++) {
// const tileX = i % TILEMAP_WIDTH;
// const tileY = Math.floor(i / TILEMAP_WIDTH);
// const tile = TILEMAP[i];
// for(let j = 0; j < TILE_WIDTH*TILE_HEIGHT; j++) {
// const outI = (
// (tileX * TILE_WIDTH) + (tileY * TILE_HEIGHT * TILEMAP_PIXEL_WIDTH) +
// ((j % TILE_WIDTH) + (Math.floor(j / TILE_WIDTH) * TILEMAP_PIXEL_WIDTH))
// );
// const idx = outI << 2;
// const pixelI = (tile * TILE_WIDTH * TILE_HEIGHT) + j;
// const color = colorPixel(pixelsOut[pixelI]);
// tileData.data[idx] = color.r;
// tileData.data[idx+1] = color.g;
// tileData.data[idx+2] = color.b;
// tileData.data[idx+3] = 0xFF;
// }
// }
// const buffer2 = PNG.sync.write(tileData, { });
// fs.writeFileSync('out.png', buffer2);
// }
module.exports = {
gb2png
};