silphscope 1.2.9 → 1.2.11
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/main.js +1 -1
- package/package.json +1 -1
- package/rom-configs/firered.js +4 -1
- package/src/graphics/mons/render-mon-icon.js +7 -8
- package/src/graphics/mons/render-mons.js +5 -13
- package/src/graphics/mons/resolvers/mon-icon-palette-resolver.js +9 -0
- package/src/graphics/mons/resolvers/mon-icon-resolver.js +8 -0
- package/src/graphics/mons/resolvers/mon-sprite-palette-resolver.js +13 -0
- package/src/graphics/mons/resolvers/mon-sprite-resolver.js +19 -0
- package/src/graphics/mons/resolvers/mon-front-sprite-resolver.js +0 -15
package/main.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { renderMon } from "./src/graphics/mons/render-mons.js";
|
|
2
2
|
import { renderMonIcon } from "./src/graphics/mons/render-mon-icon.js";
|
|
3
3
|
import { renderMonFoot } from "./src/graphics/mons/render-mon-foot.js";
|
|
4
|
-
import { extract } from "./src/graphics/extract.js";
|
|
4
|
+
import { extract } from "./src/graphics/extract.js"; // random message for a commit lol
|
|
5
5
|
|
|
6
6
|
export { renderMon, renderMonIcon, renderMonFoot, extract };
|
|
7
7
|
|
package/package.json
CHANGED
package/rom-configs/firered.js
CHANGED
|
@@ -6,6 +6,9 @@ export const firered = {
|
|
|
6
6
|
monFrontSprites: 0x2350AC,
|
|
7
7
|
monBackSprites: 0x23654C,
|
|
8
8
|
monPalettes: 0x23730C,
|
|
9
|
-
monShinyPalettes: 0x2380CC
|
|
9
|
+
monShinyPalettes: 0x2380CC,
|
|
10
|
+
monIconTable: 0x3D37A0,
|
|
11
|
+
monIconPaletteIndices: 0x3D3E80,
|
|
12
|
+
monIconPaletteTable: 0x3D4038,
|
|
10
13
|
} // if this works out... well hehe... :D
|
|
11
14
|
}
|
|
@@ -5,6 +5,8 @@ import { extract } from "../extract.js";
|
|
|
5
5
|
import { PNG } from "pngjs";
|
|
6
6
|
import fs from "fs";
|
|
7
7
|
import { render4bppImage } from "../render-4bpp-image.js";
|
|
8
|
+
import { resolveMonIcon } from "./resolvers/mon-icon-resolver.js";
|
|
9
|
+
import { resolveMonIconPalette } from "./resolvers/mon-icon-palette-resolver.js";
|
|
8
10
|
|
|
9
11
|
const streamToBuffer = (stream) => new Promise((resolve, reject) => {
|
|
10
12
|
const chunks = [];
|
|
@@ -13,7 +15,7 @@ const streamToBuffer = (stream) => new Promise((resolve, reject) => {
|
|
|
13
15
|
stream.on("error", reject);
|
|
14
16
|
});
|
|
15
17
|
|
|
16
|
-
export async function renderMonIcon(monName, mons,
|
|
18
|
+
export async function renderMonIcon(monName, mons, reader, rom, options = {}) {
|
|
17
19
|
const { outputDir = null } = options;
|
|
18
20
|
|
|
19
21
|
if (!rom || !(rom instanceof Uint8Array || Buffer.isBuffer(rom))) {
|
|
@@ -25,13 +27,12 @@ export async function renderMonIcon(monName, mons, assets, iconPalettes, rom, op
|
|
|
25
27
|
throw new Error(`Missing mon entry for ${monName}`);
|
|
26
28
|
}
|
|
27
29
|
|
|
28
|
-
const iconAsset =
|
|
29
|
-
|
|
30
|
+
const iconAsset = resolveMonIcon(mon, reader);
|
|
31
|
+
const iconPalette = resolveMonIconPalette(mon, reader);
|
|
32
|
+
if (!iconAsset || !iconPalette) throw new Error(`Missing icon asset for ${monName}`);
|
|
30
33
|
|
|
31
34
|
const iconData = extract(iconAsset, rom);
|
|
32
|
-
const
|
|
33
|
-
const palSize = 32;
|
|
34
|
-
const rawIconPalData = extract(iconPalettes, rom);
|
|
35
|
+
const rawIconPalData = extract(iconPalette, rom);
|
|
35
36
|
const width = 32;
|
|
36
37
|
const height = 64;
|
|
37
38
|
|
|
@@ -40,8 +41,6 @@ export async function renderMonIcon(monName, mons, assets, iconPalettes, rom, op
|
|
|
40
41
|
paletteData: rawIconPalData.data,
|
|
41
42
|
width,
|
|
42
43
|
height,
|
|
43
|
-
paletteOffset: palIndex * palSize,
|
|
44
|
-
paletteSize: palSize
|
|
45
44
|
});
|
|
46
45
|
|
|
47
46
|
const frameHeight = 32;
|
|
@@ -7,7 +7,8 @@ import { extract } from "../extract.js";
|
|
|
7
7
|
import { renderMonIcon } from "./render-mon-icon.js";
|
|
8
8
|
import { renderMonFoot } from "./render-mon-foot.js";
|
|
9
9
|
import { render4bppImage } from "../render-4bpp-image.js";
|
|
10
|
-
import {
|
|
10
|
+
import { resolveMonSprite } from "./resolvers/mon-sprite-resolver.js";
|
|
11
|
+
import { resolveMonPalette } from "./resolvers/mon-sprite-palette-resolver.js";
|
|
11
12
|
|
|
12
13
|
const streamToBuffer = (stream) => new Promise((resolve, reject) => {
|
|
13
14
|
const chunks = [];
|
|
@@ -30,9 +31,7 @@ export async function renderMon(monName, mons, assets, reader, rom, options = {}
|
|
|
30
31
|
}
|
|
31
32
|
|
|
32
33
|
if (icon === true) {
|
|
33
|
-
|
|
34
|
-
if (!comboPal) throw new Error("Missing gMonIconPalettes asset");
|
|
35
|
-
await renderMonIcon(monName, mons, assets, comboPal, rom, { outputDir });
|
|
34
|
+
await renderMonIcon(monName, mons, reader, rom, { outputDir });
|
|
36
35
|
}
|
|
37
36
|
if (footprint === true) {
|
|
38
37
|
await renderMonFoot(monName, mons, assets, rom, { outputDir });
|
|
@@ -43,15 +42,8 @@ export async function renderMon(monName, mons, assets, reader, rom, options = {}
|
|
|
43
42
|
throw new Error(`Missing mon: ${monName}`);
|
|
44
43
|
}
|
|
45
44
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
monPic = resolveMonFrontSprite(mon, reader); // I wonder if this will work :O
|
|
49
|
-
} else {
|
|
50
|
-
const picName = mon.backPics;
|
|
51
|
-
monPic = assets.find(a => a.name === picName);
|
|
52
|
-
}
|
|
53
|
-
const palType = variant === "shiny" ? mon.shinyPalette : mon.normPalette;
|
|
54
|
-
const monPal = assets.find(a => a.name === palType);
|
|
45
|
+
const monPic = resolveMonSprite(mon, reader, side); // I wonder if this will work :O
|
|
46
|
+
const monPal = resolveMonPalette(mon, reader, variant);
|
|
55
47
|
|
|
56
48
|
if (!monPic || !monPal) {
|
|
57
49
|
throw new Error(`Missing assets for: ${monName}`);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export function resolveMonIconPalette(mon, reader) { // I kinda think this might be wrong... but erm who knows :o maybe I got it right first try lol
|
|
2
|
+
const indexTable = reader.getTable("monIconPaletteIndices");
|
|
3
|
+
const paletteIndex = reader.readU8(indexTable + mon.index);
|
|
4
|
+
const paletteTable = reader.getTable("monIconPaletteTable");
|
|
5
|
+
const palettePtr = reader.readPointer(paletteTable + paletteIndex * 4);
|
|
6
|
+
return {
|
|
7
|
+
offset: palettePtr
|
|
8
|
+
};
|
|
9
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function resolveMonPalette(mon, romReader, variant) {
|
|
2
|
+
const tableName = variant === "shiny"
|
|
3
|
+
? "monShinyPalettes"
|
|
4
|
+
: "monPalettes";
|
|
5
|
+
const table = romReader.getTable(tableName);
|
|
6
|
+
const entryOffset = table + mon.index * 8;
|
|
7
|
+
const ptr = romReader.readPointer(entryOffset);
|
|
8
|
+
return {
|
|
9
|
+
name: `mon_${mon.name}_${variant}_palette`,
|
|
10
|
+
offset: ptr,
|
|
11
|
+
size: 40 // I hope thats right... from what I can tell all front/back pal's are 40 in size...
|
|
12
|
+
}
|
|
13
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// so the idea of "resolvers" is to essentially replace this line in the asset extraction:
|
|
2
|
+
// const monPic = assets.find(a => a.name === picName);
|
|
3
|
+
// of course though thats for the mon stuff specifically however!
|
|
4
|
+
// this time instead of needing a giant lookup table we use this thingy
|
|
5
|
+
// plus our rom-config to just infer all of this from the table in the ROM itself... in theory..
|
|
6
|
+
|
|
7
|
+
export function resolveMonSprite(mon, romReader, side) {
|
|
8
|
+
const tableName = side === "back"
|
|
9
|
+
? "monBackSprites"
|
|
10
|
+
: "monFrontSprites";
|
|
11
|
+
const table = romReader.getTable(tableName);
|
|
12
|
+
const entryOffset = table + mon.index * 8;
|
|
13
|
+
const ptr = romReader.readPointer(entryOffset);
|
|
14
|
+
return {
|
|
15
|
+
name: `mon_${mon.name}_${side}`, // really not needed anymore lol this was just for testing... but erm its ok for now I guess :p
|
|
16
|
+
offset: ptr
|
|
17
|
+
// just realized something... later resolvers will need a size value for assets not in need of lz77 decompressing... luckily these don't but erm... yea.. this could get slightly complicated...
|
|
18
|
+
};
|
|
19
|
+
}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
// so the idea of "resolvers" is to essentially replace this line in the asset extraction:
|
|
2
|
-
// const monPic = assets.find(a => a.name === picName);
|
|
3
|
-
// of course though thats for the mon stuff specifically however!
|
|
4
|
-
// this time instead of needing a giant lookup table we use this thingy
|
|
5
|
-
// plus our rom-config to just infer all of this from the table in the ROM itself... in theory..
|
|
6
|
-
|
|
7
|
-
export function resolveMonFrontSprite(mon, romReader) {
|
|
8
|
-
const table = romReader.getTable("monFrontSprites");
|
|
9
|
-
const entryOffset = table + mon.index * 8;
|
|
10
|
-
const ptr = romReader.readPointer(entryOffset);
|
|
11
|
-
return {
|
|
12
|
-
name: `mon_${mon.name}_front`,
|
|
13
|
-
offset: ptr
|
|
14
|
-
};
|
|
15
|
-
}
|