@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.
@@ -31,8 +31,14 @@ function extractMap(allTilesThatFormImage, dedupedTiles) {
31
31
  return map;
32
32
  }
33
33
  async function processBackground(bg) {
34
- const canvas = await (0, canvas_1.reduceColors)(await (0, canvas_1.createCanvasFromPath)(bg.file), 16);
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 { Width } from "./types";
2
- declare function toCinc(data: number[], width: Width, numbersPerRow: number, bracketsOnOwnLine?: boolean): string;
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[], width: Width, variableName: string, extraContent?: string): string;
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, width, variableName, extraContent) {
52
- const dataType = widthToDataType[width];
53
- const dataSize = widthToSize[width];
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
- export { createCanvasFromPath, reduceColors, forceCanvasToPalette };
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: extractPalette(paletteCanvas),
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.extractPalette)(forcedPalette, false),
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 Width = "b" | "w" | "dw";
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[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@city41/gba-convertpng",
3
- "version": "0.0.21",
3
+ "version": "0.0.23",
4
4
  "description": "Converts png images to GBA tile format",
5
5
  "main": "index.js",
6
6
  "repository": "github.com/city41/gba-convertpng",