From 3efc4710360dfd04c91789e73f1f8c8875048f38 Mon Sep 17 00:00:00 2001 From: kion Date: Mon, 23 Sep 2024 21:54:14 -0500 Subject: [PATCH 1/8] test to find logo --- bin/DEMO.BIN | Bin 0 -> 28672 bytes bin/LOGO.BIN | Bin 0 -> 26624 bytes test/logo.test.ts | 224 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 224 insertions(+) create mode 100644 bin/DEMO.BIN create mode 100644 bin/LOGO.BIN create mode 100644 test/logo.test.ts diff --git a/bin/DEMO.BIN b/bin/DEMO.BIN new file mode 100644 index 0000000000000000000000000000000000000000..bf797c68cae6ed019a27c488041a14bc0a48a4a9 GIT binary patch literal 28672 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 H7WlsaR%jcb literal 0 HcmV?d00001 diff --git a/test/logo.test.ts b/test/logo.test.ts new file mode 100644 index 0000000..5aafc3b --- /dev/null +++ b/test/logo.test.ts @@ -0,0 +1,224 @@ +/** + + Miku-Legends-2 + Copyright (C) 2024, DashGL Project + By Kion (kion@dashgl.com) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +**/ + +import { test, expect } from "bun:test"; +import { readFileSync, writeFileSync } from "fs"; +import { PNG } from "pngjs"; + +type Pixel = { + r: number; + g: number; + b: number; + a: number; +}; + +const wordToColor = (word: number): Pixel => { + const r = ((word >> 0x00) & 0x1f) << 3; + const g = ((word >> 0x05) & 0x1f) << 3; + const b = ((word >> 0x0a) & 0x1f) << 3; + const a = word > 0 ? 255 : 0; + return { r, g, b, a }; +}; + +const renderImage = (src: Buffer, pos: number) => { + const tim = { + type: src.readUInt32LE(0x00), + fullSize: src.readUInt32LE(0x04), + paletteX: src.readUInt16LE(0x0c), + paletteY: src.readUInt16LE(0x0e), + colorCount: src.readUInt16LE(0x10), + paletteCount: src.readUInt16LE(0x12), + imageX: src.readUInt16LE(0x14), + imageY: src.readUInt16LE(0x16), + width: src.readUInt16LE(0x18), + height: src.readUInt16LE(0x1a), + bitfieldSize: src.readUInt16LE(0x24), + payloadSize: src.readUInt16LE(0x26), + }; + + switch (tim.colorCount) { + case 16: + tim.width *= 4; + break; + case 256: + tim.width *= 2; + break; + default: + tim.paletteCount *= tim.colorCount / 16; + tim.colorCount = 16; + tim.width *= 4; + break; + } + + const { fullSize, bitfieldSize } = tim; + const bitfield: number[] = new Array(); + const target = Buffer.alloc(fullSize); + + // Read Bitfield + + const bitfieldBuffer = src.subarray(0x30, 0x30 + bitfieldSize); + let ofs = 0x30; + for (let i = 0; i < bitfieldSize; i += 4) { + const dword = src.readUInt32LE(ofs + i); + for (let k = 31; k > -1; k--) { + bitfield.push(dword & (1 << k) ? 1 : 0); + } + } + + ofs += bitfieldSize; + const payloadStart = 0; + + // Decompress + + let outOfs = 0; + let windowOfs = 0; + let cmdCount = 0; + let bytes = 0; + + for (let i = 0; i < bitfield.length; i++) { + const bit = bitfield[i]; + if (outOfs === fullSize) { + const payload = src.subarray(0x30 + bitfieldSize, ofs); + break; + } + + const word = src.readUInt16LE(ofs); + ofs += 2; + + switch (bit) { + case 0: + target.writeUInt16LE(word, outOfs); + outOfs += 2; + break; + case 1: + if (word === 0xffff) { + windowOfs += 0x2000; + cmdCount = 0; + bytes = 0; + } else { + cmdCount++; + const copyFrom = windowOfs + ((word >> 3) & 0x1fff); + const copyLen = ((word & 0x07) + 2) * 2; + bytes += copyLen; + for (let i = 0; i < copyLen; i++) { + target[outOfs++] = target[copyFrom + i]; + } + } + break; + } + } + + ofs = 0; + const { colorCount, paletteCount } = tim; + const palette: Pixel[][] = new Array(); + if (paletteCount > 0) { + for (let i = 0; i < paletteCount; i++) { + palette[i] = new Array(); + for (let k = 0; k < colorCount; k++) { + const word = target.readUInt16LE(ofs); + ofs += 2; + palette[i].push(wordToColor(word)); + } + } + } else if (tim.colorCount === 256) { + palette[0] = new Array(); + for (let i = 0; i < 256; i++) { + palette[0].push({ + r: i, + g: i, + b: i, + a: 255, + }); + } + } else { + palette[0] = new Array(); + for (let i = 0; i < 16; i++) { + palette[0].push({ + r: i * 16, + g: i * 16, + b: i * 16, + a: 255, + }); + } + } + + // Read the image data + const imageData: number[] = new Array(); + for (ofs; ofs < target.length; ofs++) { + const byte = target.readUInt8(ofs); + if (colorCount === 256) { + imageData.push(byte); + } else { + imageData.push(byte & 0xf); + imageData.push(byte >> 4); + } + } + + const { width, height } = tim; + const png = new PNG({ width, height }); + + let index = 0; + let dst = 0; + for (let y = 0; y < height; y++) { + for (var x = 0; x < width; x++) { + const colorIndex = imageData[index++]; + const { r, g, b, a } = palette[0][colorIndex!]; + png.data[dst++] = r; + png.data[dst++] = g; + png.data[dst++] = b; + png.data[dst++] = a; + } + } + + // Export file + const buffer = PNG.sync.write(png); + writeFileSync(`out/title_${pos.toString(16)}.png`, buffer); +}; + +test("it should search for textures in the file", () => { + const src = readFileSync("bin/TITLE.BIN"); + + for (let i = 0x20000; i < src.length; i += 0x800) { + const tim = { + type: src.readUInt32LE(i + 0x00), + fullSize: src.readUInt32LE(i + 0x04), + paletteX: src.readUInt16LE(i + 0x0c), + paletteY: src.readUInt16LE(i + 0x0e), + colorCount: src.readUInt16LE(i + 0x10), + paletteCount: src.readUInt16LE(i + 0x12), + imageX: src.readUInt16LE(i + 0x14), + imageY: src.readUInt16LE(i + 0x16), + width: src.readUInt16LE(i + 0x18), + height: src.readUInt16LE(i + 0x1a), + bitfieldSize: src.readUInt16LE(i + 0x24), + payloadSize: src.readUInt16LE(i + 0x26), + }; + + if (tim.type !== 2 && tim.type !== 3) { + continue; + } + + console.log("DOing offset: 0x%s", i.toString(16)); + console.log(tim); + renderImage(src.subarray(i), i); + break; + } +}); From e71e5a427e3c2dbc859266ce8779c81d65cc608c Mon Sep 17 00:00:00 2001 From: kion Date: Mon, 23 Sep 2024 22:07:48 -0500 Subject: [PATCH 2/8] search for palette --- test/logo.test.ts | 57 +++++++++++++++-------------------------------- 1 file changed, 18 insertions(+), 39 deletions(-) diff --git a/test/logo.test.ts b/test/logo.test.ts index 5aafc3b..a4a6ad2 100644 --- a/test/logo.test.ts +++ b/test/logo.test.ts @@ -38,7 +38,7 @@ const wordToColor = (word: number): Pixel => { return { r, g, b, a }; }; -const renderImage = (src: Buffer, pos: number) => { +const renderImage = (src: Buffer, pos: number, palette: Pixel[]) => { const tim = { type: src.readUInt32LE(0x00), fullSize: src.readUInt32LE(0x04), @@ -128,37 +128,6 @@ const renderImage = (src: Buffer, pos: number) => { ofs = 0; const { colorCount, paletteCount } = tim; - const palette: Pixel[][] = new Array(); - if (paletteCount > 0) { - for (let i = 0; i < paletteCount; i++) { - palette[i] = new Array(); - for (let k = 0; k < colorCount; k++) { - const word = target.readUInt16LE(ofs); - ofs += 2; - palette[i].push(wordToColor(word)); - } - } - } else if (tim.colorCount === 256) { - palette[0] = new Array(); - for (let i = 0; i < 256; i++) { - palette[0].push({ - r: i, - g: i, - b: i, - a: 255, - }); - } - } else { - palette[0] = new Array(); - for (let i = 0; i < 16; i++) { - palette[0].push({ - r: i * 16, - g: i * 16, - b: i * 16, - a: 255, - }); - } - } // Read the image data const imageData: number[] = new Array(); @@ -180,7 +149,7 @@ const renderImage = (src: Buffer, pos: number) => { for (let y = 0; y < height; y++) { for (var x = 0; x < width; x++) { const colorIndex = imageData[index++]; - const { r, g, b, a } = palette[0][colorIndex!]; + const { r, g, b, a } = palette[colorIndex!]; png.data[dst++] = r; png.data[dst++] = g; png.data[dst++] = b; @@ -190,13 +159,14 @@ const renderImage = (src: Buffer, pos: number) => { // Export file const buffer = PNG.sync.write(png); - writeFileSync(`out/title_${pos.toString(16)}.png`, buffer); + writeFileSync(`out/logos_${pos.toString(16)}.png`, buffer); }; test("it should search for textures in the file", () => { const src = readFileSync("bin/TITLE.BIN"); + const pals: Pixel[][] = []; - for (let i = 0x20000; i < src.length; i += 0x800) { + for (let i = 0; i < src.length; i += 0x800) { const tim = { type: src.readUInt32LE(i + 0x00), fullSize: src.readUInt32LE(i + 0x04), @@ -216,9 +186,18 @@ test("it should search for textures in the file", () => { continue; } - console.log("DOing offset: 0x%s", i.toString(16)); - console.log(tim); - renderImage(src.subarray(i), i); - break; + const palette: Pixel[] = []; + for (let k = 0; k < 16; k++) { + const word = src.readUInt16LE(i + 0x30 + k * 2); + palette.push(wordToColor(word)); + } + console.log(pals.length.toString(16)); + console.log("Offset: 0x%s", i.toString(16)); + pals.push(palette); } + + const img = src.subarray(0x20000); + pals.forEach((palette, index) => { + renderImage(img, index, palette); + }); }); From 216feb417a822109903f7d2ff7fee499e13ff23f Mon Sep 17 00:00:00 2001 From: kion Date: Tue, 24 Sep 2024 18:28:10 +0900 Subject: [PATCH 3/8] encode-no-jutsu --- src/EncodeTitle.ts | 144 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 144 insertions(+) diff --git a/src/EncodeTitle.ts b/src/EncodeTitle.ts index d953294..15b7037 100644 --- a/src/EncodeTitle.ts +++ b/src/EncodeTitle.ts @@ -30,6 +30,116 @@ type Command = { word: number; }; +const updateSmallLogo = (src: Buffer) => { + const tim = { + type: src.readUInt32LE(0x00), + fullSize: src.readUInt32LE(0x04), + paletteX: src.readUInt16LE(0x0c), + paletteY: src.readUInt16LE(0x0e), + colorCount: src.readUInt16LE(0x10), + paletteCount: src.readUInt16LE(0x12), + imageX: src.readUInt16LE(0x14), + imageY: src.readUInt16LE(0x16), + width: src.readUInt16LE(0x18), + height: src.readUInt16LE(0x1a), + bitfieldSize: src.readUInt16LE(0x24), + payloadSize: src.readUInt16LE(0x26), + }; + + tim.width *= 4; + + const { fullSize, bitfieldSize } = tim; + const bitfield: number[] = new Array(); + const target = Buffer.alloc(fullSize); + + // Read Bitfield + const bitfieldBuffer = src.subarray(0x30, 0x30 + bitfieldSize); + let ofs = 0x30; + for (let i = 0; i < bitfieldSize; i += 4) { + const dword = src.readUInt32LE(ofs + i); + for (let k = 31; k > -1; k--) { + bitfield.push(dword & (1 << k) ? 1 : 0); + } + } + + ofs += bitfieldSize; + const payloadStart = 0; + + // Decompress + + let outOfs = 0; + let windowOfs = 0; + let cmdCount = 0; + let bytes = 0; + + for (let i = 0; i < bitfield.length; i++) { + const bit = bitfield[i]; + if (outOfs === fullSize) { + const payload = src.subarray(0x30 + bitfieldSize, ofs); + break; + } + + const word = src.readUInt16LE(ofs); + ofs += 2; + + switch (bit) { + case 0: + target.writeUInt16LE(word, outOfs); + outOfs += 2; + break; + case 1: + if (word === 0xffff) { + windowOfs += 0x2000; + cmdCount = 0; + bytes = 0; + } else { + cmdCount++; + const copyFrom = windowOfs + ((word >> 3) & 0x1fff); + const copyLen = ((word & 0x07) + 2) * 2; + bytes += copyLen; + for (let i = 0; i < copyLen; i++) { + target[outOfs++] = target[copyFrom + i]; + } + } + break; + } + } + + // Read the image data + const imageData: number[] = new Array(); + for (ofs = 0; ofs < target.length; ofs++) { + const byte = target.readUInt8(ofs); + imageData.push(byte & 0xf); + imageData.push(byte >> 4); + } + + // Update title to debug palette + const { width, height } = tim; + let index = 0; + for (let y = 0; y < height; y++) { + for (var x = 0; x < width; x++) { + if (x >= 48 && x < 48 + 96) { + imageData[index] = Math.floor((x - 48) / 12); + if (y >= 64 + 20 && y < 64 + 40) { + imageData[index] += 8; + } + } + } + } + + // Re-encode the image data into a buffer + ofs = 0; + for (let i = 0; i < imageData.length; i += 2) { + const a = imageData[i] & 0x0f; + const b = imageData[i + 1] & 0x0f; + const byte = a | (b << 4); + target.writeUInt8(byte, ofs); + ofs++; + } + + return target; +}; + const encodeBitfield = (bits: boolean[]): Buffer => { const length = Math.ceil(bits.length / 32) * 4; let ofs = 0; @@ -434,6 +544,40 @@ const encodeTitle = (src: string) => { bin.writeInt16LE(bodyBitField.length, 0xf024); })(); + // Small logo debug + (() => { + const smallTex = Buffer.from(bin.subarray(0x20000)); + const update = updateSmallLogo(smallTex); + + const [bodyBitField, compressedBody] = compressNewTexture(update, 2); + const len = bodyBitField.length + compressedBody.length; + console.log("Smol logo: 0x%s", len.toString(16)); + + if (len <= 0x1800) { + console.log("too short!!!"); + } else if (len > 0x2000) { + console.log("too long"); + } else { + console.log("yaya!!!"); + } + + for (let i = 0x20030; i < 0x21af2; i++) { + bin[i] = 0; + } + + let ofs = 0x20030; + for (let i = 0; i < bodyBitField.length; i++) { + bin[ofs++] = bodyBitField[i]; + } + + for (let i = 0; i < compressedBody.length; i++) { + bin[ofs++] = compressedBody[i]; + } + + console.log("End: 0x%s", ofs.toString(16)); + bin.writeInt16LE(bodyBitField.length, 0x20024); + })(); + writeFileSync("out/TITLE.BIN", bin); }; From 54d039669d1587583e3efa74a90555e47c9e32a4 Mon Sep 17 00:00:00 2001 From: kion Date: Tue, 24 Sep 2024 21:06:47 +0900 Subject: [PATCH 4/8] track down game --- bin/GAME.BIN | Bin 0 -> 284672 bytes bin/SUBSCN.BIN | Bin 0 -> 231424 bytes index.ts | 2 ++ src/EncodeRom.ts | 1 + src/GAME.ts | 38 ++++++++++++++++++++++++++++++++++++++ test/logo.test.ts | 6 +++--- 6 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 bin/GAME.BIN create mode 100644 bin/SUBSCN.BIN create mode 100644 src/GAME.ts diff --git a/bin/GAME.BIN b/bin/GAME.BIN new file mode 100644 index 0000000000000000000000000000000000000000..a4908a7e0af9b675b645b5c80e36b925bd40a0d2 GIT binary patch literal 284672 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 kf7ZJ; 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�Exn}FfxrZY1 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 e02tH5>QbP5OiG?NSo>k+7)eg*Mo9NXt^l} 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 P9JtPb>m2xh;lTd_s3*xG literal 0 HcmV?d00001 diff --git a/index.ts b/index.ts index 07f72b2..c899655 100644 --- a/index.ts +++ b/index.ts @@ -22,6 +22,7 @@ import { replaceHunterSeeker, replaceDrillArm, } from "./src/EncodeWeapon"; +import { updateDemoLogo } from "./src/GAME"; encodeTitle("miku/title.png"); // process.exit(); @@ -212,6 +213,7 @@ replaceDrillArm("miku/weapons/PL00R10_001.obj"); encodeApronMegaman(); updateST03T("miku/apron/body-01.png", "miku/faces/ST03T.png"); updateSceneModel(); +updateDemoLogo(); /** Encode Rom diff --git a/src/EncodeRom.ts b/src/EncodeRom.ts index 60c9e62..8275437 100644 --- a/src/EncodeRom.ts +++ b/src/EncodeRom.ts @@ -572,6 +572,7 @@ const encodeRom = () => { "cut-ST1802T.BIN", "cut-ST1803.BIN", "cut-ST2501.BIN", + "GAME.BIN", ]; console.log("--- Replacing Cut Scene Textures ---"); diff --git a/src/GAME.ts b/src/GAME.ts new file mode 100644 index 0000000..cd80b1b --- /dev/null +++ b/src/GAME.ts @@ -0,0 +1,38 @@ +/** + + Miku-Legends-2 + Copyright (C) 2024, DashGL Project + By Kion (kion@dashgl.com) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +**/ + +import { readFileSync, writeFileSync } from "fs"; +import { encodeTexel } from "./EncodeTexture"; + +const updateDemoLogo = () => { + const bin = readFileSync("bin/GAME.BIN"); + const red = encodeTexel(255, 0, 0, 255); + + const palOfs = 0x44800; + for (let i = 0; i < 16; i++) { + bin.writeUInt16LE(red, palOfs + 0x30 + i * 2); + } + + writeFileSync("out/GAME.BIN", bin); +}; + +export default updateDemoLogo; +export { updateDemoLogo }; diff --git a/test/logo.test.ts b/test/logo.test.ts index a4a6ad2..6c9501a 100644 --- a/test/logo.test.ts +++ b/test/logo.test.ts @@ -163,7 +163,7 @@ const renderImage = (src: Buffer, pos: number, palette: Pixel[]) => { }; test("it should search for textures in the file", () => { - const src = readFileSync("bin/TITLE.BIN"); + const src = readFileSync("bin/GAME.BIN"); const pals: Pixel[][] = []; for (let i = 0; i < src.length; i += 0x800) { @@ -182,7 +182,7 @@ test("it should search for textures in the file", () => { payloadSize: src.readUInt16LE(i + 0x26), }; - if (tim.type !== 2 && tim.type !== 3) { + if (tim.type !== 2) { continue; } @@ -196,7 +196,7 @@ test("it should search for textures in the file", () => { pals.push(palette); } - const img = src.subarray(0x20000); + const img = src.subarray(0x041800); pals.forEach((palette, index) => { renderImage(img, index, palette); }); From ad35ab46d7a2436531399cca92b2c14314e523bd Mon Sep 17 00:00:00 2001 From: kion Date: Wed, 25 Sep 2024 00:54:05 +0900 Subject: [PATCH 5/8] update demo logo (but bad) --- index.ts | 2 +- miku/title-smol.png | Bin 0 -> 9574 bytes src/EncodeTitle.ts | 34 -------- src/GAME.ts | 186 +++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 183 insertions(+), 39 deletions(-) create mode 100644 miku/title-smol.png diff --git a/index.ts b/index.ts index c899655..021d98c 100644 --- a/index.ts +++ b/index.ts @@ -213,7 +213,7 @@ replaceDrillArm("miku/weapons/PL00R10_001.obj"); encodeApronMegaman(); updateST03T("miku/apron/body-01.png", "miku/faces/ST03T.png"); updateSceneModel(); -updateDemoLogo(); +updateDemoLogo("miku/title-smol.png"); /** Encode Rom diff --git a/miku/title-smol.png b/miku/title-smol.png new file mode 100644 index 0000000000000000000000000000000000000000..4590390e4bfd74c42e959c64286b6466d27c8b98 GIT binary patch literal 9574 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 { bin.writeInt16LE(bodyBitField.length, 0xf024); })(); - // Small logo debug - (() => { - const smallTex = Buffer.from(bin.subarray(0x20000)); - const update = updateSmallLogo(smallTex); - - const [bodyBitField, compressedBody] = compressNewTexture(update, 2); - const len = bodyBitField.length + compressedBody.length; - console.log("Smol logo: 0x%s", len.toString(16)); - - if (len <= 0x1800) { - console.log("too short!!!"); - } else if (len > 0x2000) { - console.log("too long"); - } else { - console.log("yaya!!!"); - } - - for (let i = 0x20030; i < 0x21af2; i++) { - bin[i] = 0; - } - - let ofs = 0x20030; - for (let i = 0; i < bodyBitField.length; i++) { - bin[ofs++] = bodyBitField[i]; - } - - for (let i = 0; i < compressedBody.length; i++) { - bin[ofs++] = compressedBody[i]; - } - - console.log("End: 0x%s", ofs.toString(16)); - bin.writeInt16LE(bodyBitField.length, 0x20024); - })(); - writeFileSync("out/TITLE.BIN", bin); }; diff --git a/src/GAME.ts b/src/GAME.ts index cd80b1b..ffe3aea 100644 --- a/src/GAME.ts +++ b/src/GAME.ts @@ -20,17 +20,195 @@ **/ import { readFileSync, writeFileSync } from "fs"; -import { encodeTexel } from "./EncodeTexture"; +import { + encodePalette, + encodeCutSceneTexture, + encodeTexel, + compressNewSegment, + encodeBitfield, +} from "./EncodeTexture"; -const updateDemoLogo = () => { +const compressData = (decompressed: Buffer) => { + const SEGMENT_LENGTH = 0x2000; + const segmentCount = Math.ceil(decompressed.length / SEGMENT_LENGTH); + const segments: Buffer[] = []; + for (let i = 0; i < segmentCount; i++) { + segments.push( + decompressed.subarray(i * SEGMENT_LENGTH, (i + 1) * SEGMENT_LENGTH), + ); + } + + const bucket: boolean[] = []; + const loads: Buffer[] = []; + segments.forEach((segment, index) => { + const { bits, outBuffer } = compressNewSegment(segment, 0); + bits.forEach((bit) => bucket.push(bit)); + loads.push(outBuffer); + }); + + const bitfied = encodeBitfield(bucket); + return [bitfied, Buffer.concat(loads)]; +}; + +const decompress = (src: Buffer) => { + const tim = { + type: src.readUInt32LE(0x00), + fullSize: src.readUInt32LE(0x04), + paletteX: src.readUInt16LE(0x0c), + paletteY: src.readUInt16LE(0x0e), + colorCount: src.readUInt16LE(0x10), + paletteCount: src.readUInt16LE(0x12), + imageX: src.readUInt16LE(0x14), + imageY: src.readUInt16LE(0x16), + width: src.readUInt16LE(0x18), + height: src.readUInt16LE(0x1a), + bitfieldSize: src.readUInt16LE(0x24), + payloadSize: src.readUInt16LE(0x26), + }; + + switch (tim.colorCount) { + case 16: + tim.width *= 4; + break; + case 256: + tim.width *= 2; + break; + default: + tim.paletteCount *= tim.colorCount / 16; + tim.colorCount = 16; + tim.width *= 4; + break; + } + + const { fullSize, bitfieldSize } = tim; + const bitfield: number[] = new Array(); + const target = Buffer.alloc(fullSize); + + // Read Bitfield + + const bitfieldBuffer = src.subarray(0x30, 0x30 + bitfieldSize); + let ofs = 0x30; + for (let i = 0; i < bitfieldSize; i += 4) { + const dword = src.readUInt32LE(ofs + i); + for (let k = 31; k > -1; k--) { + bitfield.push(dword & (1 << k) ? 1 : 0); + } + } + + ofs += bitfieldSize; + const payloadStart = 0; + + // Decompress + + let outOfs = 0; + let windowOfs = 0; + let cmdCount = 0; + let bytes = 0; + + for (let i = 0; i < bitfield.length; i++) { + const bit = bitfield[i]; + if (outOfs === fullSize) { + const payload = src.subarray(0x30 + bitfieldSize, ofs); + break; + } + + const word = src.readUInt16LE(ofs); + ofs += 2; + + switch (bit) { + case 0: + target.writeUInt16LE(word, outOfs); + outOfs += 2; + break; + case 1: + if (word === 0xffff) { + windowOfs += 0x2000; + cmdCount = 0; + bytes = 0; + } else { + cmdCount++; + const copyFrom = windowOfs + ((word >> 3) & 0x1fff); + const copyLen = ((word & 0x07) + 2) * 2; + bytes += copyLen; + for (let i = 0; i < copyLen; i++) { + target[outOfs++] = target[copyFrom + i]; + } + } + break; + } + } + + return target; +}; + +const updateDemoLogo = (pngPath: string) => { const bin = readFileSync("bin/GAME.BIN"); + const png = readFileSync(pngPath); + const red = encodeTexel(255, 0, 0, 255); + // Encode Image + const pal = encodePalette(png, []); + const img = encodeCutSceneTexture(pal, png); + + // Update Palette const palOfs = 0x44800; - for (let i = 0; i < 16; i++) { - bin.writeUInt16LE(red, palOfs + 0x30 + i * 2); + for (let i = 0; i < pal.length; i++) { + bin.writeUInt16LE(pal[i], palOfs + 0x30 + i * 2); + } + + // Update Image + const imgOfs = 0x041800; + // First thing we want to do is get the decompressed texture + const buffer = Buffer.from(bin.subarray(imgOfs)); + const decompressed = decompress(buffer); + + // Then we splice in our updated encoded texture + const height = 128; + const width = 256; + let inOfs = 0; + let outOfs = 0; + for (let y = 0; y < height; y++) { + for (var x = 0; x < width; x += 2) { + if (y >= 64 && y < 104) { + if (x >= 48 && x < 144) { + decompressed[outOfs] = img[inOfs]; + inOfs++; + } + } + outOfs++; + } + } + + // And then we compress and put it back in + const [bodyBitField, compressedBody] = compressData(decompressed, 0); + const len = bodyBitField.length + compressedBody.length; + console.log("Segment 2: 0x%s", len.toString(16)); + + for (let i = 0x41830; i < 0x432f2; i++) { + bin[i] = 0; } + let ofs = 0x41830; + for (let i = 0; i < bodyBitField.length; i++) { + bin[ofs++] = bodyBitField[i]; + } + + for (let i = 0; i < compressedBody.length; i++) { + bin[ofs++] = compressedBody[i]; + } + + if (ofs <= 0x43000) { + console.log("too short!!!"); + } else if (len > 0x43800) { + console.log("too long"); + } else { + console.log("yaya!!!"); + } + + console.log("End: 0x%s", ofs.toString(16)); + bin.writeInt16LE(bodyBitField.length, 0x41824); + writeFileSync("out/GAME.BIN", bin); }; From db76adcd8a9c2aa2c578d881bab0eb935b908b4a Mon Sep 17 00:00:00 2001 From: kion Date: Wed, 25 Sep 2024 08:29:11 +0900 Subject: [PATCH 6/8] update and confirm small logo --- src/GAME.ts | 95 +++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 85 insertions(+), 10 deletions(-) diff --git a/src/GAME.ts b/src/GAME.ts index ffe3aea..15878b2 100644 --- a/src/GAME.ts +++ b/src/GAME.ts @@ -20,14 +20,31 @@ **/ import { readFileSync, writeFileSync } from "fs"; +import { PNG } from "pngjs"; import { encodePalette, encodeCutSceneTexture, encodeTexel, compressNewSegment, encodeBitfield, + readPixel, } from "./EncodeTexture"; +type Pixel = { + r: number; + g: number; + b: number; + a: number; +}; + +const wordToColor = (word: number): Pixel => { + const r = ((word >> 0x00) & 0x1f) << 3; + const g = ((word >> 0x05) & 0x1f) << 3; + const b = ((word >> 0x0a) & 0x1f) << 3; + const a = word > 0 ? 255 : 0; + return { r, g, b, a }; +}; + const compressData = (decompressed: Buffer) => { const SEGMENT_LENGTH = 0x2000; const segmentCount = Math.ceil(decompressed.length / SEGMENT_LENGTH); @@ -138,18 +155,44 @@ const decompress = (src: Buffer) => { } } - return target; + const imageData: number[] = new Array(); + for (ofs = 0; ofs < target.length; ofs++) { + const byte = target.readUInt8(ofs); + imageData.push(byte & 0xf); + imageData.push(byte >> 4); + } + + return imageData; +}; + +const encodeImage = (src: Buffer) => { + const face = PNG.sync.read(src); + const { data, width, height } = face; + + let inOfs = 0; + const pal: number[] = []; + const img: number[] = []; + + for (let y = 0; y < height; y++) { + for (let x = 0; x < width; x += 2) { + const lowByte = readPixel(data, inOfs, pal); + img.push(lowByte); + inOfs += 4; + const highByte = readPixel(data, inOfs, pal); + img.push(highByte); + inOfs += 4; + } + } + + return { pal, img }; }; const updateDemoLogo = (pngPath: string) => { const bin = readFileSync("bin/GAME.BIN"); - const png = readFileSync(pngPath); - - const red = encodeTexel(255, 0, 0, 255); + const pngData = readFileSync(pngPath); // Encode Image - const pal = encodePalette(png, []); - const img = encodeCutSceneTexture(pal, png); + const { pal, img } = encodeImage(pngData); // Update Palette const palOfs = 0x44800; @@ -161,7 +204,7 @@ const updateDemoLogo = (pngPath: string) => { const imgOfs = 0x041800; // First thing we want to do is get the decompressed texture const buffer = Buffer.from(bin.subarray(imgOfs)); - const decompressed = decompress(buffer); + const imgData = decompress(buffer); // Then we splice in our updated encoded texture const height = 128; @@ -169,10 +212,10 @@ const updateDemoLogo = (pngPath: string) => { let inOfs = 0; let outOfs = 0; for (let y = 0; y < height; y++) { - for (var x = 0; x < width; x += 2) { + for (var x = 0; x < width; x++) { if (y >= 64 && y < 104) { if (x >= 48 && x < 144) { - decompressed[outOfs] = img[inOfs]; + imgData[outOfs] = img[inOfs]; inOfs++; } } @@ -180,8 +223,40 @@ const updateDemoLogo = (pngPath: string) => { } } + const decompressed = Buffer.alloc((width * height) / 2, 0); + + let index = 0; + for (let y = 0; y < height; y++) { + for (let x = 0; x < width; x += 2) { + const lowByte = imgData[index++]; + const highByte = imgData[index++]; + const byte = ((highByte << 4) | lowByte) & 0xff; + decompressed[outOfs++] = byte; + } + } + + // Write the + const png = new PNG({ width, height }); + + index = 0; + let dst = 0; + for (let y = 0; y < height; y++) { + for (var x = 0; x < width; x++) { + const colorIndex = imgData[index++]; + const { r, g, b, a } = wordToColor(pal[colorIndex!]); + png.data[dst++] = r; + png.data[dst++] = g; + png.data[dst++] = b; + png.data[dst++] = a; + } + } + + // Export file + const dat = PNG.sync.write(png); + writeFileSync(`out/smol.png`, dat); + // And then we compress and put it back in - const [bodyBitField, compressedBody] = compressData(decompressed, 0); + const [bodyBitField, compressedBody] = compressData(decompressed); const len = bodyBitField.length + compressedBody.length; console.log("Segment 2: 0x%s", len.toString(16)); From 71453b8ac384a3b70c39d62082b6cc44d6bfb846 Mon Sep 17 00:00:00 2001 From: kion Date: Wed, 25 Sep 2024 08:44:28 +0900 Subject: [PATCH 7/8] testing encoded image --- src/GAME.ts | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/src/GAME.ts b/src/GAME.ts index 15878b2..da87af5 100644 --- a/src/GAME.ts +++ b/src/GAME.ts @@ -223,22 +223,10 @@ const updateDemoLogo = (pngPath: string) => { } } - const decompressed = Buffer.alloc((width * height) / 2, 0); - - let index = 0; - for (let y = 0; y < height; y++) { - for (let x = 0; x < width; x += 2) { - const lowByte = imgData[index++]; - const highByte = imgData[index++]; - const byte = ((highByte << 4) | lowByte) & 0xff; - decompressed[outOfs++] = byte; - } - } - - // Write the + // Write the texture to png to confirm it's working' const png = new PNG({ width, height }); - index = 0; + let index = 0; let dst = 0; for (let y = 0; y < height; y++) { for (var x = 0; x < width; x++) { @@ -255,6 +243,21 @@ const updateDemoLogo = (pngPath: string) => { const dat = PNG.sync.write(png); writeFileSync(`out/smol.png`, dat); + // Convert the image data back to a 4bit encoded buffer + const decompressed = Buffer.alloc((width * height) / 2, 0); + + index = 0; + outOfs = 0; + for (let y = 0; y < height; y++) { + for (let x = 0; x < width; x += 2) { + const lowByte = imgData[index++]; + const highByte = imgData[index++]; + const byte = ((highByte << 4) | lowByte) & 0xff; + decompressed[outOfs] = byte; + outOfs++; + } + } + // And then we compress and put it back in const [bodyBitField, compressedBody] = compressData(decompressed); const len = bodyBitField.length + compressedBody.length; From d5f14bade3dbe12866c779f7b93efed84e104b1b Mon Sep 17 00:00:00 2001 From: kion Date: Wed, 25 Sep 2024 16:56:52 +0900 Subject: [PATCH 8/8] encode the textures --- miku/title-smol.png | Bin 9574 -> 6515 bytes out/.gitkeep | 0 src/GAME.ts | 155 +++++++------------------------------------- test/logo.test.ts | 2 +- 4 files changed, 23 insertions(+), 134 deletions(-) create mode 100644 out/.gitkeep diff --git a/miku/title-smol.png b/miku/title-smol.png index 4590390e4bfd74c42e959c64286b6466d27c8b98..d50b57872b2972aa6607609d61d5065952874163 100644 GIT binary patch delta 2909 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 Hu0mjf#Sfoj diff --git a/out/.gitkeep b/out/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/src/GAME.ts b/src/GAME.ts index da87af5..c7559fe 100644 --- a/src/GAME.ts +++ b/src/GAME.ts @@ -20,52 +20,7 @@ **/ import { readFileSync, writeFileSync } from "fs"; -import { PNG } from "pngjs"; -import { - encodePalette, - encodeCutSceneTexture, - encodeTexel, - compressNewSegment, - encodeBitfield, - readPixel, -} from "./EncodeTexture"; - -type Pixel = { - r: number; - g: number; - b: number; - a: number; -}; - -const wordToColor = (word: number): Pixel => { - const r = ((word >> 0x00) & 0x1f) << 3; - const g = ((word >> 0x05) & 0x1f) << 3; - const b = ((word >> 0x0a) & 0x1f) << 3; - const a = word > 0 ? 255 : 0; - return { r, g, b, a }; -}; - -const compressData = (decompressed: Buffer) => { - const SEGMENT_LENGTH = 0x2000; - const segmentCount = Math.ceil(decompressed.length / SEGMENT_LENGTH); - const segments: Buffer[] = []; - for (let i = 0; i < segmentCount; i++) { - segments.push( - decompressed.subarray(i * SEGMENT_LENGTH, (i + 1) * SEGMENT_LENGTH), - ); - } - - const bucket: boolean[] = []; - const loads: Buffer[] = []; - segments.forEach((segment, index) => { - const { bits, outBuffer } = compressNewSegment(segment, 0); - bits.forEach((bit) => bucket.push(bit)); - loads.push(outBuffer); - }); - - const bitfied = encodeBitfield(bucket); - return [bitfied, Buffer.concat(loads)]; -}; +import { encodeCutSceneTexture, compressNewTexture } from "./EncodeTexture"; const decompress = (src: Buffer) => { const tim = { @@ -155,44 +110,18 @@ const decompress = (src: Buffer) => { } } - const imageData: number[] = new Array(); - for (ofs = 0; ofs < target.length; ofs++) { - const byte = target.readUInt8(ofs); - imageData.push(byte & 0xf); - imageData.push(byte >> 4); - } - - return imageData; -}; - -const encodeImage = (src: Buffer) => { - const face = PNG.sync.read(src); - const { data, width, height } = face; - - let inOfs = 0; - const pal: number[] = []; - const img: number[] = []; - - for (let y = 0; y < height; y++) { - for (let x = 0; x < width; x += 2) { - const lowByte = readPixel(data, inOfs, pal); - img.push(lowByte); - inOfs += 4; - const highByte = readPixel(data, inOfs, pal); - img.push(highByte); - inOfs += 4; - } - } - - return { pal, img }; + return target; }; const updateDemoLogo = (pngPath: string) => { const bin = readFileSync("bin/GAME.BIN"); const pngData = readFileSync(pngPath); - // Encode Image - const { pal, img } = encodeImage(pngData); + const imgOfs = 0x041800; + const pal: number[] = []; + + const encodedLogo = encodeCutSceneTexture(pal, pngData); + const encodedTexture = decompress(Buffer.from(bin.subarray(imgOfs))); // Update Palette const palOfs = 0x44800; @@ -200,66 +129,26 @@ const updateDemoLogo = (pngPath: string) => { bin.writeUInt16LE(pal[i], palOfs + 0x30 + i * 2); } - // Update Image - const imgOfs = 0x041800; - // First thing we want to do is get the decompressed texture - const buffer = Buffer.from(bin.subarray(imgOfs)); - const imgData = decompress(buffer); - - // Then we splice in our updated encoded texture - const height = 128; - const width = 256; - let inOfs = 0; - let outOfs = 0; - for (let y = 0; y < height; y++) { - for (var x = 0; x < width; x++) { - if (y >= 64 && y < 104) { - if (x >= 48 && x < 144) { - imgData[outOfs] = img[inOfs]; - inOfs++; - } - } - outOfs++; - } - } + console.log("Encoded Logo: 0x%s", encodedLogo.length.toString(16)); + console.log("Encoded Texture: 0x%s", encodedTexture.length.toString(16)); - // Write the texture to png to confirm it's working' - const png = new PNG({ width, height }); - - let index = 0; - let dst = 0; - for (let y = 0; y < height; y++) { - for (var x = 0; x < width; x++) { - const colorIndex = imgData[index++]; - const { r, g, b, a } = wordToColor(pal[colorIndex!]); - png.data[dst++] = r; - png.data[dst++] = g; - png.data[dst++] = b; - png.data[dst++] = a; + let texOfs = 0x2000; + let logoOfs = 0; + for (let y = 0; y < 40; y++) { + texOfs += 24; + for (let x = 0; x < 48; x++) { + encodedTexture[texOfs++] = encodedLogo[logoOfs++]; } + texOfs += 56; } - // Export file - const dat = PNG.sync.write(png); - writeFileSync(`out/smol.png`, dat); - - // Convert the image data back to a 4bit encoded buffer - const decompressed = Buffer.alloc((width * height) / 2, 0); - - index = 0; - outOfs = 0; - for (let y = 0; y < height; y++) { - for (let x = 0; x < width; x += 2) { - const lowByte = imgData[index++]; - const highByte = imgData[index++]; - const byte = ((highByte << 4) | lowByte) & 0xff; - decompressed[outOfs] = byte; - outOfs++; - } - } + console.log("Logo Pos: 0x%s", logoOfs.toString(16)); - // And then we compress and put it back in - const [bodyBitField, compressedBody] = compressData(decompressed); + const [bodyBitField, compressedBody] = compressNewTexture( + Buffer.alloc(0), + encodedTexture, + 0, + ); const len = bodyBitField.length + compressedBody.length; console.log("Segment 2: 0x%s", len.toString(16)); diff --git a/test/logo.test.ts b/test/logo.test.ts index 6c9501a..61bff42 100644 --- a/test/logo.test.ts +++ b/test/logo.test.ts @@ -159,7 +159,7 @@ const renderImage = (src: Buffer, pos: number, palette: Pixel[]) => { // Export file const buffer = PNG.sync.write(png); - writeFileSync(`out/logos_${pos.toString(16)}.png`, buffer); + writeFileSync(`out/miku_${pos.toString(16)}.png`, buffer); }; test("it should search for textures in the file", () => {