55 lines
1.3 KiB
JavaScript
55 lines
1.3 KiB
JavaScript
import { parseJSON } from '../codegen.js';
|
|
import { insts2hex, getDrawTextOpt, getFillRectParams } from '../asm';
|
|
import { measureText } from '../text.js';
|
|
import { int2hex } from '../utils.js';
|
|
export const lskey = 'config/AttemptCounter';
|
|
|
|
export const defaultConfig = {
|
|
x: 152,
|
|
y: 125,
|
|
fontSize: 32,
|
|
fgRGB: 0xffff99,
|
|
fgA: 0xff,
|
|
fgRGB2: null,
|
|
fgA2: null,
|
|
bgRGB: 0x000000,
|
|
bgA: 0x40,
|
|
bgLeft: 4,
|
|
bgRight: 6,
|
|
bgTop: 4,
|
|
bgBot: 3,
|
|
duration: 60,
|
|
};
|
|
|
|
export const getPreviewText = () => '88\n99';
|
|
|
|
/** @returns {typeof defaultConfig} */
|
|
export function getConfig() {
|
|
const config =
|
|
(typeof localStorage !== 'undefined' && parseJSON(localStorage.getItem(lskey))) || {};
|
|
return {
|
|
...defaultConfig,
|
|
...config,
|
|
text: getPreviewText(),
|
|
};
|
|
}
|
|
|
|
/**
|
|
* @param {keyof typeof import('../addrs.js').ctxSpOff} version
|
|
* @param {string=} baseCode
|
|
*/
|
|
export default function codegen(version, baseCode) {
|
|
if (!baseCode) return '';
|
|
|
|
const config = getConfig();
|
|
|
|
let code = baseCode;
|
|
code += '077F0479 0000002B';
|
|
code += int2hex(config.duration, 1);
|
|
code += '25640A256400'; // fmt = "%d\n%d"
|
|
code += insts2hex(getDrawTextOpt(config));
|
|
code += insts2hex(getFillRectParams(config, measureText(getPreviewText(), version)));
|
|
code += '0000000000'; // padding
|
|
|
|
return code.replace(/\s/g, '');
|
|
}
|