fix: 录像验证

This commit is contained in:
unanmed 2025-10-14 18:12:24 +08:00
parent 991d94568b
commit 0856c12aee
12 changed files with 75 additions and 210 deletions

View File

@ -48,6 +48,7 @@ export function patchDamage() {
} }
function renderThumbnailDamage(col: EnemyCollection) { function renderThumbnailDamage(col: EnemyCollection) {
if (main.replayChecking) return;
core.status.damage.data = []; core.status.damage.data = [];
core.status.damage.extraData = []; core.status.damage.extraData = [];

View File

@ -2,7 +2,9 @@
export function initUI() { export function initUI() {
if (main.mode === 'editor') return; if (main.mode === 'editor') return;
const { mainUi, fixedUi, mainSetting } = Mota.require('@motajs/legacy-ui'); if (!main.replayChecking) {
const { mainUi, fixedUi, mainSetting } =
Mota.require('@motajs/legacy-ui');
ui.prototype.drawBook = function () { ui.prototype.drawBook = function () {
if (!core.isReplaying()) return mainUi.open('book'); if (!core.isReplaying()) return mainUi.open('book');
@ -20,16 +22,6 @@ export function initUI() {
if (!core.isReplaying()) return mainUi.open('fly'); if (!core.isReplaying()) return mainUi.open('fly');
}; };
control.prototype.updateStatusBar_update = function () {
core.control.updateNextFrame = false;
if (!core.isPlaying() || core.hasFlag('__statistics__')) return;
core.control.controldata.updateStatusBar();
if (!core.control.noAutoEvents) core.checkAutoEvents();
core.control._updateStatusBar_setToolboxIcon();
core.control.noAutoEvents = true;
Mota.require('@user/data-base').hook.emit('statusBarUpdate');
};
control.prototype.showStatusBar = function () { control.prototype.showStatusBar = function () {
if (main.mode === 'editor') return; if (main.mode === 'editor') return;
core.removeFlag('hideStatusBar'); core.removeFlag('hideStatusBar');
@ -54,3 +46,14 @@ export function initUI() {
core.updateStatusBar(); core.updateStatusBar();
}; };
} }
control.prototype.updateStatusBar_update = function () {
core.control.updateNextFrame = false;
if (!core.isPlaying() || core.hasFlag('__statistics__')) return;
core.control.controldata.updateStatusBar();
if (!core.control.noAutoEvents) core.checkAutoEvents();
core.control._updateStatusBar_setToolboxIcon();
core.control.noAutoEvents = true;
Mota.require('@user/data-base').hook.emit('statusBarUpdate');
};
}

View File

@ -66,7 +66,7 @@ editor_uievent_wrapper = function (editor) {
} }
core.saveCanvas('uievent'); core.saveCanvas('uievent');
core.status.event.selection = data.selected || 0; core.status.event.selection = data.selected || 0;
core.drawChoices(core.replaceText(data.text), data.choices, data.width, 'uievent'); core.drawChoices2(core.replaceText(data.text), data.choices, data.width, 'uievent');
core.status.event.selection = null; core.status.event.selection = null;
core.loadCanvas('uievent'); core.loadCanvas('uievent');
return; return;

View File

@ -320,6 +320,8 @@ core.prototype.initSync = function (coreData, callback) {
this._init_platform(); this._init_platform();
this._init_others(); this._init_others();
core.initStatus.maps = core.maps._initMaps();
core.loader._load(function () { core.loader._load(function () {
core._afterLoadResources(callback); core._afterLoadResources(callback);
}); });

View File

@ -42,7 +42,7 @@ events.prototype._startGame_start = function (hard, seed, route, callback) {
core.firstData.hero, core.firstData.hero,
hard, hard,
null, null,
core.cloneArray(core.initStatus.maps) core.clone(core.initStatus.maps)
); );
core.setHeroLoc('x', -1); core.setHeroLoc('x', -1);
core.setHeroLoc('y', -1); core.setHeroLoc('y', -1);
@ -1566,6 +1566,10 @@ events.prototype.__action_doAsyncFunc = function (isAsync, func) {
}; };
events.prototype._action_text = function (data) { events.prototype._action_text = function (data) {
if (main.replayChecking) {
core.doAction();
return;
}
if (this.__action_checkReplaying()) return; if (this.__action_checkReplaying()) return;
const Store = Mota.require('@user/client-modules').TextboxStore; const Store = Mota.require('@user/client-modules').TextboxStore;
const { textbox = 'main-textbox', text, icon = 'none', title = '' } = data; const { textbox = 'main-textbox', text, icon = 'none', title = '' } = data;
@ -1595,6 +1599,10 @@ events.prototype._action_text = function (data) {
}; };
events.prototype._action_autoText = function (data) { events.prototype._action_autoText = function (data) {
if (main.replayChecking) {
core.doAction();
return;
}
if (this.__action_checkReplaying()) return; if (this.__action_checkReplaying()) return;
const Store = Mota.require('@user/client-modules').TextboxStore; const Store = Mota.require('@user/client-modules').TextboxStore;
const { textbox = 'main-textbox', text, icon = 'none', title = '' } = data; const { textbox = 'main-textbox', text, icon = 'none', title = '' } = data;
@ -1641,6 +1649,10 @@ events.prototype._action__label = function (data, x, y, prefix) {
}; };
events.prototype._action_setText = function (data) { events.prototype._action_setText = function (data) {
if (main.replayChecking) {
core.doAction();
return;
}
const isNil = value => value === null || value === void 0; const isNil = value => value === null || value === void 0;
const { textbox = 'main-textbox' } = data; const { textbox = 'main-textbox' } = data;
const Store = Mota.require('@user/client-modules').TextboxStore; const Store = Mota.require('@user/client-modules').TextboxStore;
@ -1743,7 +1755,7 @@ events.prototype._action_confirm = function (data, x, y, prefix) {
}; };
events.prototype._action_choices = function (data, x, y, prefix) { events.prototype._action_choices = function (data, x, y, prefix) {
core.ui.drawChoices( core.ui.drawChoices2(
core.replaceText(data.text, prefix), core.replaceText(data.text, prefix),
data.choices, data.choices,
data.width data.width

View File

@ -3682,112 +3682,12 @@ maps.prototype._moveDetachedBlock = function (
opacity, opacity,
canvases canvases
) { ) {
var height = blockInfo.height, // Deprecated.
posX = blockInfo.posX,
posY = blockInfo.posY,
image = blockInfo.image;
var headCanvas = canvases.headCanvas,
bodyCanvas = canvases.bodyCanvas,
damageCanvas = canvases.damageCanvas;
if (headCanvas) {
core.dymCanvas[headCanvas].clearRect(0, 0, 32, height);
core.dymCanvas[headCanvas].drawImage(
image,
posX * 32,
posY * height,
32,
height - 32,
0,
0,
32,
height - 32
);
core.relocateCanvas(
headCanvas,
nowX - core.bigmap.offsetX,
nowY + 32 - height - core.bigmap.offsetY
);
core.setOpacity(headCanvas, opacity);
}
if (bodyCanvas) {
if (blockInfo.bigImage) {
var face = blockInfo.face;
if (!blockInfo.faceIds) face = 'down';
else if (!blockInfo.faceIds[face]) {
// 维持此时朝向
face = 'down';
for (var f in blockInfo.faceIds) {
if (blockInfo.faceIds[f] == blockInfo.id) {
face = f;
}
}
}
var bigImageInfo = this._getBigImageInfo(
blockInfo.bigImage,
face,
blockInfo.posX
);
var per_width = bigImageInfo.per_width,
per_height = bigImageInfo.per_height;
core.dymCanvas[bodyCanvas].clearRect(
0,
0,
bigImageInfo.per_width,
bigImageInfo.per_height
);
core.dymCanvas[bodyCanvas].drawImage(
blockInfo.bigImage,
bigImageInfo.sx,
bigImageInfo.sy,
per_width,
per_height,
0,
0,
per_width,
per_height
);
core.relocateCanvas(
bodyCanvas,
nowX - core.bigmap.offsetX + bigImageInfo.dx,
nowY - core.bigmap.offsetY + bigImageInfo.dy
);
core.setOpacity(bodyCanvas, opacity);
} else {
core.dymCanvas[bodyCanvas].clearRect(0, 0, 32, 32);
core.dymCanvas[bodyCanvas].drawImage(
image,
posX * 32,
posY * height + height - 32,
32,
32,
0,
0,
32,
32
);
core.relocateCanvas(
bodyCanvas,
nowX - core.bigmap.offsetX,
nowY - core.bigmap.offsetY
);
core.setOpacity(bodyCanvas, opacity);
}
}
if (damageCanvas) {
core.relocateCanvas(
damageCanvas,
nowX - core.bigmap.offsetX,
nowY - core.bigmap.offsetY
);
core.setOpacity(damageCanvas, opacity);
}
}; };
////// 删除独立的block canvas ////// ////// 删除独立的block canvas //////
maps.prototype._deleteDetachedBlock = function (canvases) { maps.prototype._deleteDetachedBlock = function (canvases) {
core.deleteCanvas(canvases.headCanvas); // Deprecated.
core.deleteCanvas(canvases.bodyCanvas);
core.deleteCanvas(canvases.damageCanvas);
}; };
maps.prototype._getAndRemoveBlock = function (x, y) { maps.prototype._getAndRemoveBlock = function (x, y) {

View File

@ -2228,7 +2228,7 @@ ui.prototype.textImage = function (content, lineHeight) {
}; };
////// 绘制一个选项界面 ////// ////// 绘制一个选项界面 //////
ui.prototype.drawChoices = async function (content, choices, width, noRoute) { ui.prototype.drawChoices2 = async function (content, choices, width, noRoute) {
if (main.replayChecking) { if (main.replayChecking) {
const selected = (() => { const selected = (() => {
const route = core.status.replay.toReplay[0]; const route = core.status.replay.toReplay[0];
@ -2238,6 +2238,7 @@ ui.prototype.drawChoices = async function (content, choices, width, noRoute) {
return Number(route.slice(8)); return Number(route.slice(8));
} }
})(); })();
core.status.replay.toReplay.shift();
core.insertAction(choices[selected].action); core.insertAction(choices[selected].action);
core.doAction(); core.doAction();
} else { } else {
@ -2295,6 +2296,7 @@ ui.prototype.drawConfirmBox = async function (
return Number(route.slice(8)) === 1; return Number(route.slice(8)) === 1;
} }
})(); })();
core.status.replay.toReplay.shift();
if (confirm) { if (confirm) {
yesCallback?.(); yesCallback?.();
} else { } else {

View File

@ -109,7 +109,7 @@ function main() {
this.canvas = {}; this.canvas = {};
this.__VERSION__ = '2.10.0'; this.__VERSION__ = '2.10.0';
this.__VERSION_CODE__ = 510; this.__VERSION_CODE__ = 610;
} }
// >>>> body end // >>>> body end
@ -183,15 +183,12 @@ main.prototype.loadSync = function (mode, callback) {
coreData[t] = main[t]; coreData[t] = main[t];
}); });
core.initSync(coreData, callback); core.initSync(coreData, () => {});
main.loading.emit('coreInit'); main.loading.emit('coreInit');
core.initStatus.maps = core.maps._initMaps();
core.resize(); core.resize();
main.core = core; main.core = core;
core.completeAchievement = () => 0; callback?.();
core.plugin = { drawLight: 0 };
}; };
main.prototype.loadAsync = async function (mode, callback) { main.prototype.loadAsync = async function (mode, callback) {

View File

@ -185,9 +185,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
}, },
"flags": {}, "flags": {},
"followers": [], "followers": [],
"steps": 0, "steps": 0
"magicDef": 0,
"magicRed": 0
}, },
"startCanvas": [ "startCanvas": [
{ {

View File

@ -17,6 +17,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
core.status.played = true; core.status.played = true;
// 初始化人物,图标,统计信息 // 初始化人物,图标,统计信息
core.status.hero = core.clone(hero); core.status.hero = core.clone(hero);
core.status.hero.buff ??= {};
window.hero = core.status.hero; window.hero = core.status.hero;
window.flags = core.status.hero.flags; window.flags = core.status.hero.flags;
core.events.setHeroIcon(core.status.hero.image, true); core.events.setHeroIcon(core.status.hero.image, true);
@ -56,27 +57,6 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
} else { } else {
flags.autoSkill ??= true; flags.autoSkill ??= true;
} }
// 兼容性调整
const h = core.status.hero;
if (h.magicDef === void 0 || h.magicDef === null) {
h.magicDef = 0;
}
if (!core.status.hero.buff) {
const buff = {};
core.status.hero.buff = buff;
const toDelete = [];
for (const [key, value] of Object.entries(flags)) {
if (/__\w+_buff__/.test(key)) {
const name = key.slice(2, -7);
buff[name] = value;
toDelete.push(key);
}
}
toDelete.forEach(v => {
delete flags[v];
});
}
}, },
win: function (reason, norank, noexit) { win: function (reason, norank, noexit) {
// 游戏获胜事件 // 游戏获胜事件
@ -88,12 +68,6 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
core.status.extraEvent = core.clone(core.status.event); core.status.extraEvent = core.clone(core.status.event);
} }
if (reason === '智慧之始') {
core.status.hero.hp +=
core.itemCount('yellowKey') * 5000 +
core.itemCount('blueKey') * 15000;
}
// 游戏获胜事件 // 游戏获胜事件
core.ui.closePanel(); core.ui.closePanel();
var replaying = core.isReplaying(); var replaying = core.isReplaying();
@ -171,21 +145,6 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
if (bgm instanceof Array) bgm = bgm[0]; if (bgm instanceof Array) bgm = bgm[0];
if (!core.hasFlag('__bgm__')) core.playBgm(bgm); if (!core.hasFlag('__bgm__')) core.playBgm(bgm);
} }
// 更改画面色调
var color = core.getFlag('__color__', null);
if (!color && core.status.maps[floorId].color)
color = core.status.maps[floorId].color;
core.clearMap('curtain');
core.status.curtainColor = color;
if (color)
core.fillRect(
'curtain',
0,
0,
core._PX_,
core._PY_,
core.arrayToRGBA(color)
);
// 更改天气 // 更改天气
var weather = core.getFlag('__weather__', null); var weather = core.getFlag('__weather__', null);
if (!weather && core.status.maps[floorId].weather) if (!weather && core.status.maps[floorId].weather)
@ -234,8 +193,6 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
core.visitFloor(floorId); core.visitFloor(floorId);
} }
} }
// if (!flags.debug && !main.replayChecking)
// Mota.require('completion_r').checkVisitedFloor();
Mota.require('@user/data-base').hook.emit( Mota.require('@user/data-base').hook.emit(
'afterChangeFloor', 'afterChangeFloor',
floorId floorId
@ -348,16 +305,6 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
core.removeFlag('__fromLoad__'); core.removeFlag('__fromLoad__');
if (callback) callback(); if (callback) callback();
Mota.r(() => {
if (flags.onChase) {
const chase = Mota.require(
'@user/legacy-plugin-client'
);
const controller = chase.initChase(0);
controller.start(true);
}
});
}); });
Mota.require('@user/data-base').hook.emit('loadData'); Mota.require('@user/data-base').hook.emit('loadData');

View File

@ -13,6 +13,8 @@ import { RequiredData, RequiredIconsData, ResourceType } from './types';
import { splitResource, SplittedResource } from './build-resource'; import { splitResource, SplittedResource } from './build-resource';
import { formatSize } from './utils'; import { formatSize } from './utils';
const DEBUG_REPLAY = true;
const ansi = { const ansi = {
clear: '\x1b[2J\x1b[0f' clear: '\x1b[2J\x1b[0f'
}; };
@ -92,7 +94,8 @@ async function buildData(outDir: string, entry: string) {
name: 'ProcessData', name: 'ProcessData',
fileName: 'data', fileName: 'data',
formats: ['iife'] formats: ['iife']
} },
minify: !DEBUG_REPLAY
} }
} satisfies UserConfig); } satisfies UserConfig);

View File

@ -759,10 +759,10 @@ interface Ui {
textImage(content: string, lineHeight?: number): HTMLCanvasElement; textImage(content: string, lineHeight?: number): HTMLCanvasElement;
/** /**
* @deprecated `getChoices` \ * @deprecated 使 `getChoices` \
* * drawChoices
*/ */
drawChoices( drawChoices2(
content: string, content: string,
choices: object[], choices: object[],
width?: number, width?: number,