mirror of
https://github.com/lscharen/iigs-game-engine.git
synced 2024-11-25 15:32:59 +00:00
55 lines
1.6 KiB
JavaScript
55 lines
1.6 KiB
JavaScript
// Generate seizzle tables
|
|
//
|
|
// Maps an 8-bit value of wwxxyyzz to a lookup table that takes each 2-bit
|
|
// value to a 16-bit pixel index. Zero always maps to zero. The input
|
|
// is three 4-bit values that define the targets for 1, 2, and 3.
|
|
|
|
// Run as: node swizzle.js label val1 val2 val3
|
|
if (process.argv.length !== 6) {
|
|
console.log(process.argv);
|
|
process.exit(1);
|
|
}
|
|
|
|
const output = process.stdout;
|
|
|
|
const values = [
|
|
0,
|
|
Number(process.argv[3]),
|
|
Number(process.argv[4]),
|
|
Number(process.argv[5]),
|
|
];
|
|
|
|
output.write(process.argv[2] + '\n');
|
|
for (let w = 0; w < 4; w++) {
|
|
for (let x = 0; x < 4; x++) {
|
|
output.write(' dw ');
|
|
const row = [];
|
|
for (let y = 0; y < 4; y++) {
|
|
for (let z = 0; z < 4; z++) {
|
|
// Because the NES PPU bits define the pixel order from high bit to low bit, but the
|
|
// 65816 is little endian, we need to swap the byte order in the mapping
|
|
/*
|
|
const target =
|
|
(values[w] * 4096) +
|
|
(values[x] * 256) +
|
|
(values[y] * 16) +
|
|
values[z];
|
|
*/
|
|
const target =
|
|
(values[w] * 16) +
|
|
(values[x] * 1) +
|
|
(values[y] * 4096) +
|
|
(values[z] * 256);
|
|
|
|
row.push(target);
|
|
}
|
|
}
|
|
// Output the values
|
|
output.write(row.map(s => '$' + s.toString(16).padStart(4, '0')).join(','));
|
|
|
|
// Line break
|
|
output.write('\n');
|
|
}
|
|
}
|
|
|