56 lines
1.3 KiB
JavaScript
56 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, '');
|
||
|
}
|