mirror of
https://github.com/unanmed/HumanBreak.git
synced 2025-01-18 20:09:27 +08:00
修复部分录像bug
This commit is contained in:
parent
5e3f143db9
commit
7f7f48e8a6
4
.gitignore
vendored
4
.gitignore
vendored
@ -28,4 +28,6 @@ dist-ssr
|
|||||||
|
|
||||||
dist.zip
|
dist.zip
|
||||||
story.md
|
story.md
|
||||||
dist.rar
|
dist.rar
|
||||||
|
*.h5save
|
||||||
|
*.h5route
|
@ -1784,6 +1784,7 @@ control.prototype.startReplay = function (list) {
|
|||||||
core.status.replay.totalList = core.status.route.concat(list);
|
core.status.replay.totalList = core.status.route.concat(list);
|
||||||
core.status.replay.steps = 0;
|
core.status.replay.steps = 0;
|
||||||
core.status.replay.save = [];
|
core.status.replay.save = [];
|
||||||
|
core.plugin.replay.ready();
|
||||||
core.createCanvas('replay', 0, core._PY_ - 40, core._PX_, 40, 199);
|
core.createCanvas('replay', 0, core._PY_ - 40, core._PX_, 40, 199);
|
||||||
core.setOpacity('replay', 0.6);
|
core.setOpacity('replay', 0.6);
|
||||||
this._replay_drawProgress();
|
this._replay_drawProgress();
|
||||||
|
@ -29,6 +29,7 @@ events.prototype.startGame = function (hard, seed, route, callback) {
|
|||||||
core.plugin.loaded.value = false;
|
core.plugin.loaded.value = false;
|
||||||
|
|
||||||
if (main.mode != 'play') return;
|
if (main.mode != 'play') return;
|
||||||
|
core.plugin.skillTree.resetSkillLevel();
|
||||||
|
|
||||||
// 无动画的开始游戏
|
// 无动画的开始游戏
|
||||||
if (core.flags.startUsingCanvas || route != null) {
|
if (core.flags.startUsingCanvas || route != null) {
|
||||||
|
@ -76,7 +76,8 @@ items.prototype.getItemEffectTip = function (itemId) {
|
|||||||
|
|
||||||
////// 使用道具 //////
|
////// 使用道具 //////
|
||||||
items.prototype.useItem = function (itemId, noRoute, callback) {
|
items.prototype.useItem = function (itemId, noRoute, callback) {
|
||||||
const ignore = ['I560', 'I559'];
|
/** @type {AllIdsOf<'items'>[]} */
|
||||||
|
const ignore = ['I560', 'I559', 'skill1'];
|
||||||
if (
|
if (
|
||||||
!this.canUseItem(itemId) ||
|
!this.canUseItem(itemId) ||
|
||||||
(core.isReplaying() && ignore.includes(itemId))
|
(core.isReplaying() && ignore.includes(itemId))
|
||||||
@ -286,6 +287,7 @@ items.prototype.loadEquip = function (equipId, callback) {
|
|||||||
if (callback) callback();
|
if (callback) callback();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
core.status.route.push(`equip:${equipId}`);
|
||||||
|
|
||||||
this._realLoadEquip(
|
this._realLoadEquip(
|
||||||
type,
|
type,
|
||||||
@ -302,6 +304,7 @@ items.prototype.unloadEquip = function (equipType, callback) {
|
|||||||
if (callback) callback();
|
if (callback) callback();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
core.status.route.push(`unequip:${equipId}`);
|
||||||
|
|
||||||
this._realLoadEquip(equipType, null, unloadEquipId, callback);
|
this._realLoadEquip(equipType, null, unloadEquipId, callback);
|
||||||
};
|
};
|
||||||
|
@ -46,7 +46,7 @@ main.floors.MT16=
|
|||||||
"yes": [
|
"yes": [
|
||||||
{
|
{
|
||||||
"type": "setValue",
|
"type": "setValue",
|
||||||
"name": "flag:finishChase",
|
"name": "flag:finishChase1",
|
||||||
"value": "true"
|
"value": "true"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -87,6 +87,10 @@ main.floors.MT16=
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"no": [
|
"no": [
|
||||||
|
{
|
||||||
|
"type": "function",
|
||||||
|
"function": "function(){\ncore.plugin.replay.readyClip();\n}"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "choices",
|
"type": "choices",
|
||||||
"text": "请选择难度",
|
"text": "请选择难度",
|
||||||
@ -133,10 +137,6 @@ main.floors.MT16=
|
|||||||
{
|
{
|
||||||
"type": "function",
|
"type": "function",
|
||||||
"function": "function(){\ncore.status.maps.MT15.canFlyFrom = false\n}"
|
"function": "function(){\ncore.status.maps.MT15.canFlyFrom = false\n}"
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "function",
|
|
||||||
"function": "function(){\ncore.plugin.towerBoss.autoFixRouteBoss(true);\n}"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -38,9 +38,9 @@ main.floors.MT22=
|
|||||||
],
|
],
|
||||||
"3,9": [
|
"3,9": [
|
||||||
"第二章的加点已开启,可以在技能树的前置技能下方选择",
|
"第二章的加点已开启,可以在技能树的前置技能下方选择",
|
||||||
"注意学习是一个非常重要的技能,需要尽快点开",
|
|
||||||
"如果你玩过上个版本,直接跳到了本章,记得查看背包里面的各种道具,尤其是百科全书,同时注意左边是你来的方向,那里还有些怪物",
|
"如果你玩过上个版本,直接跳到了本章,记得查看背包里面的各种道具,尤其是百科全书,同时注意左边是你来的方向,那里还有些怪物",
|
||||||
"从现在开始,跳跃技能不再消耗生命值,别忘了你还有跳跃技能"
|
"从现在开始,跳跃技能不再消耗生命值,别忘了你还有跳跃技能",
|
||||||
|
"为了确保平衡与可玩性,从现在开始,无上之盾(第一章终极技能)效果变为1/10"
|
||||||
],
|
],
|
||||||
"7,9": [
|
"7,9": [
|
||||||
"百科全书中已解锁第二章需要特别说明的怪物属性,你可以在百科全书中查看",
|
"百科全书中已解锁第二章需要特别说明的怪物属性,你可以在百科全书中查看",
|
||||||
|
@ -141,12 +141,6 @@ main.floors.tower1=
|
|||||||
"time": 500
|
"time": 500
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"13,1": [
|
|
||||||
{
|
|
||||||
"type": "function",
|
|
||||||
"function": "function(){\nconsole.trace()\n}"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"7,14": [
|
"7,14": [
|
||||||
{
|
{
|
||||||
"type": "changeFloor",
|
"type": "changeFloor",
|
||||||
|
@ -104,16 +104,21 @@ main.floors.tower7=
|
|||||||
"floorId": "MT19"
|
"floorId": "MT19"
|
||||||
},
|
},
|
||||||
"现在前往东边",
|
"现在前往东边",
|
||||||
|
{
|
||||||
|
"type": "showStatusBar"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"type": "exit"
|
"type": "exit"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"no": [
|
"no": [
|
||||||
"该特殊战与青岚之光音乐天国特殊战类似,但相比于青岚的特殊战,该特殊战有了不少提升:\n1.动画效果更好,运行更加流畅\n2.boss技能多样,更加好玩\n3.气氛渲染地更好,更有沉浸感\n4.流程缩短,不再枯燥",
|
|
||||||
"屏幕上方有boss血条和提示等,请注意阅读",
|
"屏幕上方有boss血条和提示等,请注意阅读",
|
||||||
"总之,该特殊战你一定会觉得好玩的",
|
|
||||||
"注意:重新开始特殊战需要刷新页面!!!!!!!!!!!!",
|
"注意:重新开始特殊战需要刷新页面!!!!!!!!!!!!",
|
||||||
"下面,就让我们开始吧!"
|
"下面,就让我们开始吧!",
|
||||||
|
{
|
||||||
|
"type": "function",
|
||||||
|
"function": "function(){\ncore.plugin.replay.readyClip();\n}"
|
||||||
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -1126,7 +1126,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = {
|
|||||||
// 根据keyCode值来执行对应操作
|
// 根据keyCode值来执行对应操作
|
||||||
switch (keyCode) {
|
switch (keyCode) {
|
||||||
case 74: // J:打开技能树
|
case 74: // J:打开技能树
|
||||||
core.useItem('skill1');
|
core.useItem('skill1', true);
|
||||||
break;
|
break;
|
||||||
case 27: // ESC:打开菜单栏
|
case 27: // ESC:打开菜单栏
|
||||||
core.openSettings(true);
|
core.openSettings(true);
|
||||||
|
@ -4,6 +4,24 @@ import { studySkill, canStudySkill } from './study.js';
|
|||||||
|
|
||||||
const replayableSettings = ['autoSkill'];
|
const replayableSettings = ['autoSkill'];
|
||||||
|
|
||||||
|
let cliping = false;
|
||||||
|
let startIndex = 0;
|
||||||
|
|
||||||
|
export function ready() {}
|
||||||
|
|
||||||
|
export function readyClip() {
|
||||||
|
cliping = true;
|
||||||
|
return (startIndex = core.status.route.length - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function clip(...replace) {
|
||||||
|
if (!cliping) return;
|
||||||
|
cliping = false;
|
||||||
|
|
||||||
|
core.status.route.splice(startIndex);
|
||||||
|
core.status.route.push(...replace);
|
||||||
|
}
|
||||||
|
|
||||||
// 注册修改设置的录像操作
|
// 注册修改设置的录像操作
|
||||||
core.registerReplayAction('settings', name => {
|
core.registerReplayAction('settings', name => {
|
||||||
if (!name.startsWith('set:')) return false;
|
if (!name.startsWith('set:')) return false;
|
||||||
@ -12,6 +30,7 @@ core.registerReplayAction('settings', name => {
|
|||||||
if (typeof v !== 'boolean') return false;
|
if (typeof v !== 'boolean') return false;
|
||||||
if (!replayableSettings.includes(setting)) return false;
|
if (!replayableSettings.includes(setting)) return false;
|
||||||
flags[setting] = v;
|
flags[setting] = v;
|
||||||
|
core.status.route.push(name);
|
||||||
core.replay();
|
core.replay();
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
@ -20,6 +39,7 @@ core.registerReplayAction('upgradeSkill', name => {
|
|||||||
if (!name.startsWith('skill:')) return false;
|
if (!name.startsWith('skill:')) return false;
|
||||||
const skill = parseInt(name.slice(6));
|
const skill = parseInt(name.slice(6));
|
||||||
core.plugin.skillTree.upgradeSkill(skill);
|
core.plugin.skillTree.upgradeSkill(skill);
|
||||||
|
core.status.route.push(name);
|
||||||
core.replay();
|
core.replay();
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
@ -35,6 +55,7 @@ core.registerReplayAction('study', name => {
|
|||||||
const enemy = core.getEnemyInfo(id, void 0, x, y);
|
const enemy = core.getEnemyInfo(id, void 0, x, y);
|
||||||
if (!enemy.special.includes(num)) return false;
|
if (!enemy.special.includes(num)) return false;
|
||||||
studySkill(enemy, num);
|
studySkill(enemy, num);
|
||||||
|
core.status.route.push(name);
|
||||||
core.replay();
|
core.replay();
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
@ -47,6 +68,7 @@ core.registerReplayAction('openShop', name => {
|
|||||||
if (shopOpened) return false;
|
if (shopOpened) return false;
|
||||||
openedShopId = name.slice(9);
|
openedShopId = name.slice(9);
|
||||||
shopOpened = true;
|
shopOpened = true;
|
||||||
|
core.status.route.push(name);
|
||||||
core.replay();
|
core.replay();
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
@ -76,6 +98,7 @@ core.registerReplayAction('buy', name => {
|
|||||||
if (cost > core.status.hero.money) return false;
|
if (cost > core.status.hero.money) return false;
|
||||||
core.status.hero.money -= cost;
|
core.status.hero.money -= cost;
|
||||||
flags.itemShop[openedShopId][id] += type === 'buy' ? num : -num;
|
flags.itemShop[openedShopId][id] += type === 'buy' ? num : -num;
|
||||||
|
core.status.route.push(name);
|
||||||
core.replay();
|
core.replay();
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
@ -85,6 +108,13 @@ core.registerReplayAction('closeShop', name => {
|
|||||||
if (!shopOpened) return false;
|
if (!shopOpened) return false;
|
||||||
shopOpened = false;
|
shopOpened = false;
|
||||||
openedShopId = '';
|
openedShopId = '';
|
||||||
|
core.status.route.push(name);
|
||||||
core.replay();
|
core.replay();
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
core.plugin.replay = {
|
||||||
|
ready,
|
||||||
|
readyClip,
|
||||||
|
clip
|
||||||
|
};
|
||||||
|
@ -199,6 +199,10 @@ const skills = {
|
|||||||
|
|
||||||
core.plugin.skills = skills;
|
core.plugin.skills = skills;
|
||||||
|
|
||||||
|
export function resetSkillLevel() {
|
||||||
|
levels = [];
|
||||||
|
}
|
||||||
|
|
||||||
export function getSkillFromIndex(index) {
|
export function getSkillFromIndex(index) {
|
||||||
for (const [, skill] of Object.entries(skills)) {
|
for (const [, skill] of Object.entries(skills)) {
|
||||||
const s = skill.find(v => v.index === index);
|
const s = skill.find(v => v.index === index);
|
||||||
@ -311,5 +315,6 @@ core.plugin.skillTree = {
|
|||||||
saveSkillTree,
|
saveSkillTree,
|
||||||
loadSkillTree,
|
loadSkillTree,
|
||||||
upgradeSkill,
|
upgradeSkill,
|
||||||
openTree
|
openTree,
|
||||||
|
resetSkillLevel
|
||||||
};
|
};
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
///<reference path="../../../src/types/core.d.ts" />
|
///<reference path="../../../src/types/core.d.ts" />
|
||||||
|
import { clip } from './replay.js';
|
||||||
|
|
||||||
// 1000多行,改不动了,原来什么样就什么样吧
|
// 1000多行,改不动了,原来什么样就什么样吧
|
||||||
|
|
||||||
@ -16,23 +17,10 @@ function initTowerBoss() {
|
|||||||
seconds = 0;
|
seconds = 0;
|
||||||
heroHp = core.status.hero.hp;
|
heroHp = core.status.hero.hp;
|
||||||
dynamicChangeHp(0, 10000, 10000);
|
dynamicChangeHp(0, 10000, 10000);
|
||||||
autoFixRouteBoss(true);
|
|
||||||
core.insertAction([{ type: 'sleep', time: 1000, noSkip: true }]);
|
core.insertAction([{ type: 'sleep', time: 1000, noSkip: true }]);
|
||||||
setTimeout(bossCore, 1000);
|
setTimeout(bossCore, 1000);
|
||||||
}
|
}
|
||||||
// 录像自动修正
|
|
||||||
export function autoFixRouteBoss(isStart) {
|
|
||||||
var route = core.status.route;
|
|
||||||
if (isStart) {
|
|
||||||
// 开始修正 记录当前录像长度
|
|
||||||
flags.startFix = route.length - 1;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// 结束修正 删除录像 并追加跳过步骤
|
|
||||||
route.splice(flags.startFix);
|
|
||||||
route.push('choices:0');
|
|
||||||
delete flags.startFix;
|
|
||||||
}
|
|
||||||
// 血条
|
// 血条
|
||||||
function healthBar(now, total) {
|
function healthBar(now, total) {
|
||||||
var nowLength = (now / total) * 476; // 当前血量下绘制长度
|
var nowLength = (now / total) * 476; // 当前血量下绘制长度
|
||||||
@ -383,7 +371,7 @@ function bossCore() {
|
|||||||
clearInterval(interval);
|
clearInterval(interval);
|
||||||
clearInterval(flags.boom);
|
clearInterval(flags.boom);
|
||||||
core.status.hero.hp = heroHp;
|
core.status.hero.hp = heroHp;
|
||||||
core.plugin.towerBoss.autoFixRouteBoss(false);
|
clip('choices:0');
|
||||||
delete flags.__bgm__;
|
delete flags.__bgm__;
|
||||||
core.pauseBgm();
|
core.pauseBgm();
|
||||||
core.insertAction([
|
core.insertAction([
|
||||||
@ -1569,6 +1557,7 @@ function lineDamage(x1, y1, x2, y2, damage) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
core.plugin.towerBoss = {
|
core.plugin.towerBoss = {
|
||||||
initTowerBoss,
|
initTowerBoss
|
||||||
autoFixRouteBoss
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export {};
|
||||||
|
@ -576,7 +576,7 @@ export function para3(chase: Chase) {
|
|||||||
'MT14',
|
'MT14',
|
||||||
async () => {
|
async () => {
|
||||||
flags.finishChase1 = true;
|
flags.finishChase1 = true;
|
||||||
core.plugin.towerBoss.autoFixRouteBoss();
|
core.plugin.replay.clip('choices:0');
|
||||||
core.showStatusBar();
|
core.showStatusBar();
|
||||||
ani.time(750).apply('rect', 0);
|
ani.time(750).apply('rect', 0);
|
||||||
chase.end();
|
chase.end();
|
||||||
|
16
src/types/plugin.d.ts
vendored
16
src/types/plugin.d.ts
vendored
@ -25,10 +25,10 @@ interface PluginDeclaration
|
|||||||
*/
|
*/
|
||||||
utils: GamePluginUtils;
|
utils: GamePluginUtils;
|
||||||
loopMap: GamePluginLoopMap;
|
loopMap: GamePluginLoopMap;
|
||||||
towerBoss: GamePluginBoss;
|
|
||||||
skillTree: GamePluginSkillTree;
|
skillTree: GamePluginSkillTree;
|
||||||
study: GamePluginStudy;
|
study: GamePluginStudy;
|
||||||
hero: GamePluginHeroRealStatus;
|
hero: GamePluginHeroRealStatus;
|
||||||
|
replay: PluginReplay;
|
||||||
|
|
||||||
skills: Record<Chapter, Skill[]>;
|
skills: Record<Chapter, Skill[]>;
|
||||||
skillEffects: SkillEffects;
|
skillEffects: SkillEffects;
|
||||||
@ -125,14 +125,6 @@ interface GamePluginLoopMap {
|
|||||||
checkLoopMap(): void;
|
checkLoopMap(): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
interface GamePluginBoss {
|
|
||||||
/**
|
|
||||||
* 自动修复特殊boss战的录像
|
|
||||||
* @param isStart 是否要开始修剪录像
|
|
||||||
*/
|
|
||||||
autoFixRouteBoss(isStart?: boolean);
|
|
||||||
}
|
|
||||||
|
|
||||||
interface PluginUtils {
|
interface PluginUtils {
|
||||||
/**
|
/**
|
||||||
* 判定一个值是否不是undefined或null
|
* 判定一个值是否不是undefined或null
|
||||||
@ -436,6 +428,12 @@ interface PluginAchievement {
|
|||||||
checkVisitedFloor(): void;
|
checkVisitedFloor(): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface PluginReplay {
|
||||||
|
ready(): void;
|
||||||
|
readyClip(): number;
|
||||||
|
clip(...replace: string[]): void;
|
||||||
|
}
|
||||||
|
|
||||||
interface SkillEffects {
|
interface SkillEffects {
|
||||||
jumpIgnoreFloor: FloorIds[];
|
jumpIgnoreFloor: FloorIds[];
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user