@city41/gba-convertpng 0.0.21 → 0.0.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/background.js +8 -1
- package/dist/c.d.ts +3 -3
- package/dist/c.js +3 -3
- package/dist/canvas.d.ts +2 -1
- package/dist/canvas.js +10 -1
- package/dist/main.js +8 -1
- package/dist/palette.js +2 -1
- package/dist/sprite.js +2 -1
- package/dist/types.d.ts +3 -1
- package/package.json +1 -1
package/dist/background.js
CHANGED
|
@@ -31,8 +31,14 @@ function extractMap(allTilesThatFormImage, dedupedTiles) {
|
|
|
31
31
|
return map;
|
|
32
32
|
}
|
|
33
33
|
async function processBackground(bg) {
|
|
34
|
-
const canvas = await
|
|
34
|
+
// const canvas = await reduceColors(await createCanvasFromPath(bg.file), 16);
|
|
35
|
+
let canvas = await (0, canvas_1.createCanvasFromPath)(bg.file);
|
|
36
|
+
if (typeof bg.reduceColors === "undefined" || bg.reduceColors === true) {
|
|
37
|
+
canvas = await (0, canvas_1.reduceColors)(canvas, 16);
|
|
38
|
+
}
|
|
39
|
+
canvas = (0, canvas_1.roundUpToTileSize)(canvas);
|
|
35
40
|
const palette = (0, palette_1.extractPalette)(canvas, !bg.trimPalette);
|
|
41
|
+
console.log("palette size", palette.length);
|
|
36
42
|
const allTilesThatFormImage = (0, tile_1.extractTiles)(canvas, palette, 1);
|
|
37
43
|
const dedupedTiles = (0, tile_1.dedupeTiles)(allTilesThatFormImage);
|
|
38
44
|
const map = extractMap(allTilesThatFormImage, dedupedTiles);
|
|
@@ -40,6 +46,7 @@ async function processBackground(bg) {
|
|
|
40
46
|
palette[0] = bg.transparentColor;
|
|
41
47
|
}
|
|
42
48
|
return {
|
|
49
|
+
canvas,
|
|
43
50
|
background: bg,
|
|
44
51
|
tiles: dedupedTiles.flat(1),
|
|
45
52
|
palette,
|
package/dist/c.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
declare function toCinc(data: number[], width:
|
|
1
|
+
import { DataWidth } from "./types";
|
|
2
|
+
declare function toCinc(data: number[], width: DataWidth, numbersPerRow: number, bracketsOnOwnLine?: boolean): string;
|
|
3
3
|
declare function toCc(data: number[], width: "b" | "w" | "dw", numbersPerRow: number, variableName: string, fileNameRoot: string): string;
|
|
4
|
-
declare function toCh(data: number[],
|
|
4
|
+
declare function toCh(data: number[], dataWidth: DataWidth, variableName: string, extraContent?: string): string;
|
|
5
5
|
export { toCinc, toCc, toCh };
|
package/dist/c.js
CHANGED
|
@@ -48,9 +48,9 @@ function toCc(data, width, numbersPerRow, variableName, fileNameRoot) {
|
|
|
48
48
|
const ${dataType} ${variableName}[${variableName.toUpperCase()}_COUNT] = ${entries}; `;
|
|
49
49
|
return src;
|
|
50
50
|
}
|
|
51
|
-
function toCh(data,
|
|
52
|
-
const dataType = widthToDataType[
|
|
53
|
-
const dataSize = widthToSize[
|
|
51
|
+
function toCh(data, dataWidth, variableName, extraContent) {
|
|
52
|
+
const dataType = widthToDataType[dataWidth];
|
|
53
|
+
const dataSize = widthToSize[dataWidth];
|
|
54
54
|
const count = data.length;
|
|
55
55
|
const src = `#pragma once
|
|
56
56
|
#include <tonc.h>
|
package/dist/canvas.d.ts
CHANGED
|
@@ -2,4 +2,5 @@ import { Canvas } from "canvas";
|
|
|
2
2
|
declare function reduceColors(c: Canvas, maxColors: number): Promise<Canvas>;
|
|
3
3
|
declare function createCanvasFromPath(pngPath: string): Promise<Canvas>;
|
|
4
4
|
declare function forceCanvasToPalette(canvas: Canvas, palette: Canvas): Promise<Canvas>;
|
|
5
|
-
|
|
5
|
+
declare function roundUpToTileSize(canvas: Canvas): Canvas;
|
|
6
|
+
export { createCanvasFromPath, reduceColors, forceCanvasToPalette, roundUpToTileSize, };
|
package/dist/canvas.js
CHANGED
|
@@ -39,6 +39,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
39
39
|
exports.createCanvasFromPath = createCanvasFromPath;
|
|
40
40
|
exports.reduceColors = reduceColors;
|
|
41
41
|
exports.forceCanvasToPalette = forceCanvasToPalette;
|
|
42
|
+
exports.roundUpToTileSize = roundUpToTileSize;
|
|
42
43
|
const path = __importStar(require("node:path"));
|
|
43
44
|
const os = __importStar(require("node:os"));
|
|
44
45
|
const fsp = __importStar(require("node:fs/promises"));
|
|
@@ -130,7 +131,7 @@ async function forceCanvasToPalette(canvas, palette) {
|
|
|
130
131
|
.getImageData(0, 0, palette.width, palette.height);
|
|
131
132
|
for (let p = 0; p < canvasImageData.data.length; p += 4) {
|
|
132
133
|
const pixel = canvasImageData.data.slice(p, p + 4);
|
|
133
|
-
if (isMagenta(pixel)) {
|
|
134
|
+
if (isMagenta(pixel) || pixel[3] !== 255) {
|
|
134
135
|
continue;
|
|
135
136
|
}
|
|
136
137
|
const nearestPixel = findNearestColor(pixel, paletteImageData.data);
|
|
@@ -139,4 +140,12 @@ async function forceCanvasToPalette(canvas, palette) {
|
|
|
139
140
|
canvas.getContext("2d").putImageData(canvasImageData, 0, 0);
|
|
140
141
|
return canvas;
|
|
141
142
|
}
|
|
143
|
+
// given an input canvas, returns it with additional pixels to
|
|
144
|
+
// the left and bottom such that the canvas size is a multiple of 8
|
|
145
|
+
function roundUpToTileSize(canvas) {
|
|
146
|
+
const roundedCanvas = (0, canvas_1.createCanvas)(Math.ceil(canvas.width / 8) * 8, Math.ceil(canvas.height / 8) * 8);
|
|
147
|
+
const context = roundedCanvas.getContext("2d");
|
|
148
|
+
context.drawImage(canvas, 0, 0);
|
|
149
|
+
return roundedCanvas;
|
|
150
|
+
}
|
|
142
151
|
//# sourceMappingURL=canvas.js.map
|
package/dist/main.js
CHANGED
|
@@ -96,6 +96,13 @@ function getBitmapDefines(result) {
|
|
|
96
96
|
return `#define ${name.toUpperCase()}_WIDTH ${result.width}
|
|
97
97
|
#define ${name.toUpperCase()}_HEIGHT ${result.height}`;
|
|
98
98
|
}
|
|
99
|
+
function getTileWidthHeightDefines(result, file) {
|
|
100
|
+
const name = path.basename(file, ".png");
|
|
101
|
+
let tileWidth = result.canvas.width / 8;
|
|
102
|
+
let tileHeight = result.canvas.height / 8;
|
|
103
|
+
return `#define ${name.toUpperCase()}_TILE_WIDTH ${tileWidth}
|
|
104
|
+
#define ${name.toUpperCase()}_TILE_HEIGHT ${tileHeight}`;
|
|
105
|
+
}
|
|
99
106
|
function toSrcFiles(result, format) {
|
|
100
107
|
let file;
|
|
101
108
|
if ((0, sprite_1.isProcessBasicSpriteResult)(result)) {
|
|
@@ -206,7 +213,7 @@ function toSrcFiles(result, format) {
|
|
|
206
213
|
extension: "c",
|
|
207
214
|
},
|
|
208
215
|
{
|
|
209
|
-
src: (0, c_1.toCh)(result.tiles, "b", fileRoot + "_tiles"),
|
|
216
|
+
src: (0, c_1.toCh)(result.tiles, "b", fileRoot + "_tiles", getTileWidthHeightDefines(result, file)),
|
|
210
217
|
extension: "h",
|
|
211
218
|
},
|
|
212
219
|
],
|
package/dist/palette.js
CHANGED
|
@@ -62,6 +62,7 @@ function reduceCanvases(canvases) {
|
|
|
62
62
|
const paletteColors = Object.values(fullRgbColorMap);
|
|
63
63
|
const paletteSize = paletteColors.length;
|
|
64
64
|
if (paletteSize > 16) {
|
|
65
|
+
console.error(JSON.stringify(paletteColors));
|
|
65
66
|
throw new Error(`reduceCanvasees: final palette is too large: ${paletteSize}`);
|
|
66
67
|
}
|
|
67
68
|
// strip out transparency/magenta
|
|
@@ -83,7 +84,7 @@ function reduceCanvases(canvases) {
|
|
|
83
84
|
});
|
|
84
85
|
context.putImageData(imageData, 0, 0);
|
|
85
86
|
return {
|
|
86
|
-
palette:
|
|
87
|
+
palette: getForcedPalette(paletteCanvas),
|
|
87
88
|
canvas: paletteCanvas,
|
|
88
89
|
};
|
|
89
90
|
}
|
package/dist/sprite.js
CHANGED
|
@@ -34,6 +34,7 @@ async function processBasicSprite(sprite, forcedPaletteOverride) {
|
|
|
34
34
|
throw new Error(`sprite, ${sprite.file}, has no frames defined`);
|
|
35
35
|
}
|
|
36
36
|
let canvas = await (0, canvas_1.reduceColors)(await (0, canvas_1.createCanvasFromPath)(sprite.file), 16);
|
|
37
|
+
canvas = (0, canvas_1.roundUpToTileSize)(canvas);
|
|
37
38
|
let palette;
|
|
38
39
|
if (forcedPaletteOverride || sprite.forcePalette) {
|
|
39
40
|
const forcedPaletteCanvas = forcedPaletteOverride ??
|
|
@@ -75,7 +76,7 @@ async function processSharedPaletteSprites(sharedPaletteSprite) {
|
|
|
75
76
|
}
|
|
76
77
|
const { palette: commonPalette, canvas: forcedPaletteCanvas } = forcedPalette
|
|
77
78
|
? {
|
|
78
|
-
palette: (0, palette_1.
|
|
79
|
+
palette: (0, palette_1.getForcedPalette)(forcedPalette),
|
|
79
80
|
canvas: forcedPalette,
|
|
80
81
|
}
|
|
81
82
|
: (0, palette_1.reduceCanvases)(canvases);
|
package/dist/types.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Canvas } from "canvas";
|
|
2
2
|
export type Format = "C" | "C.inc" | "z80" | "pyz80" | "asz80" | "bin";
|
|
3
|
-
export type
|
|
3
|
+
export type DataWidth = "b" | "w" | "dw";
|
|
4
4
|
export type BasicSpriteSpec = {
|
|
5
5
|
file: string;
|
|
6
6
|
frames: number;
|
|
@@ -20,6 +20,7 @@ export type BackgroundSpec = {
|
|
|
20
20
|
file: string;
|
|
21
21
|
trimPalette?: boolean;
|
|
22
22
|
transparentColor?: number;
|
|
23
|
+
reduceColors?: boolean;
|
|
23
24
|
};
|
|
24
25
|
export type BitmapSpec = {
|
|
25
26
|
file: string;
|
|
@@ -44,6 +45,7 @@ export type ProcessSharedPaletteSpritesResult = {
|
|
|
44
45
|
palette: number[];
|
|
45
46
|
};
|
|
46
47
|
export type ProcessBackgroundResult = {
|
|
48
|
+
canvas: Canvas;
|
|
47
49
|
background: BackgroundSpec;
|
|
48
50
|
tiles: number[];
|
|
49
51
|
palette: number[];
|