diff --git a/Codes.xml b/Codes.xml index 6023346..1b91e93 100644 --- a/Codes.xml +++ b/Codes.xml @@ -1237,8 +1237,8 @@ Quarterframe Timer (Experimental) QFタイマー Noki Doki, sup39(サポミク) - 1.1 - Apr 22, 2022 + 1.2 + Oct 16, 2022 drawText drawText diff --git a/changelog.md b/changelog.md index c637a3d..e3abbc1 100644 --- a/changelog.md +++ b/changelog.md @@ -1,4 +1,7 @@ # Changelog +## Oct 16, 2022 +\[QFT v1.2] Fix QFT background when 112\*fontSize is not an integer + ## Jun 8, 2022 ### Fixed 'Shine Get Timer' stopping on any cutscene started after touching a Shine Shoutouts to plankton for touching the Pinna 1 Shine before its spawn cutscene started, in which case the timer would stop around 8 seconds early. diff --git a/site/.vuepress/components/codes/qft/codegen.js b/site/.vuepress/components/codes/qft/codegen.js index 3540027..62c35d6 100644 --- a/site/.vuepress/components/codes/qft/codegen.js +++ b/site/.vuepress/components/codes/qft/codegen.js @@ -37,10 +37,8 @@ export function getConfig() { }; } -const int16 = (x) => - (x < 0 ? x + 0x10000 : x).toString(16).padStart(4, '0').slice(-4).toUpperCase(); -const int32 = (x) => - (x < 0 ? x + 0x100000000 : x).toString(16).padStart(8, '0').slice(-8).toUpperCase(); +/** @param {number} x */ +const inst2gecko = (x) => (x >>> 0).toString(16).toUpperCase().padStart(8, '0'); import * as GMSJ01 from './code/GMSJ01.js'; import * as GMSE01 from './code/GMSE01.js'; @@ -68,6 +66,7 @@ export const codes = { GMSJ01, GMSE01, GMSP01, GMSJ0A }; bl 817fxxxx ****/ const freezeCodeAddr = 0x817f0348; +/** @param {keyof typeof codes} version */ export default function codegen(version) { const config = getConfig(); const { freezeCodeInfo, baseCode, r13off } = codes[version] ?? {}; @@ -99,7 +98,7 @@ export default function codegen(version) { 0x60000000, 0x00000000, ] - .map(int32) + .map(inst2gecko) .join(''); } else { // handle regular freezing code later @@ -124,7 +123,7 @@ export default function codegen(version) { 0x916c00bc, // stw r11, 0xBC(r12) 0x00000000, ]) - .map(int32) + .map(inst2gecko) .join(''); } else { const code04 = []; @@ -160,7 +159,7 @@ export default function codegen(version) { code07.push(0); } // apply code - code += [...code04, ...code07].map(int32).join(''); + code += [...code04, ...code07].map(inst2gecko).join(''); } // ui (GMSJ01/GMSJ0A only) @@ -175,7 +174,7 @@ export default function codegen(version) { x + width * scale, // x2 y, // y2 ] - .map(int32) + .map(inst2gecko) .join(''); code += '25753a253032752e2530337500000000'; // fmt /* fontSize, fgColor, bgColor */ @@ -184,7 +183,7 @@ export default function codegen(version) { const fgColor = (config.fgRGB & 0xffffff) * 256 + (config.fgA & 0xff); const fgColor2 = ((config.fgRGB2 ?? config.fgRGB) & 0xffffff) * 256 + ((config.fgA2 ?? config.fgA) & 0xff); - code += [fontSize, fgColor, fgColor2, bgColor].map(int32).join(''); + code += [fontSize, fgColor, fgColor2, bgColor].map(inst2gecko).join(''); } return code.replace(/\s/g, '');