diff --git a/public/libs/control.js b/public/libs/control.js index fd3e6cb..6328058 100644 --- a/public/libs/control.js +++ b/public/libs/control.js @@ -1502,7 +1502,6 @@ control.prototype.checkBlock = function () { core.updateStatusBar(false, true); } } - this._checkBlock_ambush(core.status.checkBlock.ambush[loc]); this._checkBlock_repulse(core.status.checkBlock.repulse[loc]); }; @@ -1533,42 +1532,6 @@ control.prototype._checkBlock_repulse = function (repulse) { core.insertAction(actions); }; -////// 捕捉 ////// -control.prototype._checkBlock_ambush = function (ambush) { - if (!ambush || ambush.length == 0) return; - // 捕捉效果 - var actions = []; - ambush.forEach(function (t) { - actions.push({ - type: 'move', - loc: [t[0], t[1]], - steps: [t[3]], - time: 250, - keep: false, - async: true - }); - }); - actions.push({ type: 'waitAsync' }); - // 强制战斗 - ambush.forEach(function (t) { - actions.push({ - type: 'function', - function: - 'function() { ' + - "core.battle('" + - t[2] + - "', " + - t[0] + - ',' + - t[1] + - ', true, core.doAction); ' + - '}', - async: true - }); - }); - core.insertAction(actions); -}; - ////// 更新全地图显伤 ////// control.prototype.updateDamage = function (floorId, ctx) { floorId = floorId || core.status.floorId; @@ -1701,9 +1664,9 @@ control.prototype._updateDamage_extraDamage = function (floorId, onMap) { }); } else { // 检查捕捉 - if (core.status.checkBlock.ambush[x + ',' + y]) { + if (core.status.checkBlock.mockery[x + ',' + y]) { core.status.damage.extraData.push({ - text: '!', + text: '嘲', px: 32 * x + 16, py: 32 * (y + 1) - 14, color: '#ffaa33', diff --git a/public/libs/maps.js b/public/libs/maps.js index 1438596..d51f369 100644 --- a/public/libs/maps.js +++ b/public/libs/maps.js @@ -1077,8 +1077,7 @@ maps.prototype._canMoveDirectly_checkNextPoint = function (blocksObj, x, y) { // 是否存在阻激夹域伤害 if (core.status.checkBlock.damage[index]) return false; if (core.status.checkBlock.repulse[index]) return false; - // 是否存在捕捉 - if (core.status.checkBlock.ambush[index]) return false; + if (core.status.checkBlock.mockery[index]) return false; return true; }; @@ -1175,8 +1174,7 @@ maps.prototype._automaticRoute_deepAdd = function (x, y, blocks) { } // 绕过存在伤害的地方 deepAdd += (core.status.checkBlock.damage[x + ',' + y] || 0) * 100; - // 绕过捕捉 - if (core.status.checkBlock.ambush[x + ',' + y]) deepAdd += 1000; + deepAdd += core.status.checkBlock.mockery[`${x},${y}`] ? 1000 : 0; return deepAdd; }; diff --git a/public/project/enemys.js b/public/project/enemys.js index 5355e32..34d99ff 100644 --- a/public/project/enemys.js +++ b/public/project/enemys.js @@ -1,10 +1,10 @@ var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 = { "greenSlime": {"name":"绿头怪","hp":100,"atk":11,"def":3,"money":0,"exp":1,"point":0,"special":[],"description":"一种极其低级的怪物,低级到普通人用手都可以打死。"}, - "redSlime": {"name":"红头怪","hp":120,"atk":16,"def":6,"money":0,"exp":2,"point":0,"special":[],"value":10}, - "blackSlime": {"name":"青头怪","hp":170,"atk":20,"def":8,"money":0,"exp":3,"point":0,"special":[]}, - "slimelord": {"name":"粘液王","hp":200,"atk":58,"def":24,"money":0,"exp":8,"point":0,"special":[]}, - "bat": {"name":"小蝙蝠","hp":60,"atk":15,"def":0,"money":0,"exp":2,"point":0,"special":[4]}, + "redSlime": {"name":"红头怪","hp":120,"atk":16,"def":6,"money":0,"exp":2,"point":0,"special":[],"value":10,"description":"即使是最弱的怪物,也有进化的时候,对吧?"}, + "blackSlime": {"name":"青头怪","hp":170,"atk":20,"def":8,"money":0,"exp":3,"point":0,"special":[],"description":"看,这就是最弱的怪物进化出的最强的怪物之一了"}, + "slimelord": {"name":"粘液王","hp":200,"atk":58,"def":24,"money":0,"exp":8,"point":0,"special":[],"description":"看上去黏糊糊的,实际也确实黏糊糊的,据说是史莱姆族的长老级人物"}, + "bat": {"name":"小蝙蝠","hp":60,"atk":15,"def":0,"money":0,"exp":2,"point":0,"special":[4],"description":"经常出现在山洞中,再平常不过了。但是这次它却有了攻击性。"}, "bigBat": {"name":"大蝙蝠","hp":150,"atk":17,"def":5,"money":0,"exp":4,"point":0,"special":[4],"crit":0,"charge":0,"courage":0,"together":0,"hungry":0,"value":100,"n":1000}, "redBat": {"name":"恐怖蝙蝠","hp":1200,"atk":260,"def":110,"money":1,"exp":32,"point":0,"special":[5]}, "vampire": {"name":"冥灵魔王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]}, @@ -32,7 +32,7 @@ var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 = "demonPriest": {"name":"魔神法师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]}, "goldHornSlime": {"name":"尖角怪","hp":1500,"atk":366,"def":166,"money":1,"exp":35,"point":0,"special":[]}, "silverSlime": {"name":"银头怪","hp":250,"atk":50,"def":20,"money":0,"exp":11,"point":0,"special":[2]}, - "whiteHornSlime": {"name":"尖角怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]}, + "whiteHornSlime": {"name":"恐怖尖角怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]}, "redSwordsman": {"name":"山间盗贼","hp":1000,"atk":175,"def":40,"money":1,"exp":24,"point":0,"special":[4],"n":8}, "poisonZombie": {"name":"绿兽人","hp":100,"atk":120,"def":0,"money":13,"exp":0,"point":0,"special":[12]}, "octopus": {"name":"血影","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]}, @@ -68,7 +68,7 @@ var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 = "bowman": {"name":"猎人","hp":500,"atk":100,"def":50,"money":0,"exp":16,"point":0,"special":[24],"value":75}, "liteBowman": {"name":"山间猎手","hp":1200,"atk":200,"def":60,"money":1,"exp":27,"point":0,"special":[24]}, "crimsonZombie": {"name":"勇气之兽","hp":1800,"atk":2000,"def":-100,"money":1,"exp":35,"point":0,"special":[]}, - "watcherSlime": {"name":"邪眼怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]}, + "watcherSlime": {"name":"邪眼史莱姆","hp":5000,"atk":900,"def":600,"money":1,"exp":50,"point":0,"special":[17]}, "mutantSlimeman": {"name":"变异史莱姆人","hp":350,"atk":70,"def":27,"money":0,"exp":13,"point":0,"special":[]}, "devilKnight": {"name":"恶灵骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]}, "grayPriest": {"name":"智慧法王","hp":3000,"atk":600,"def":250,"money":1,"exp":40,"point":0,"special":[13]}, @@ -122,5 +122,9 @@ var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 = "E549": {"name":"智慧之史","hp":1000,"atk":1000,"def":100,"money":1,"exp":35,"point":0,"special":[1],"crit":10000}, "E550": {"name":"智慧之兔","hp":1500,"atk":600,"def":200,"money":1,"exp":35,"point":0,"special":[8],"together":20}, "E556": {"name":"智慧之姆","hp":3000,"atk":800,"def":200,"money":1,"exp":45,"point":0,"special":[8],"together":20}, - "E557": {"name":"智慧之神","hp":10000,"atk":2000,"def":800,"money":10,"exp":500,"point":0,"special":[]} + "E557": {"name":"智慧之神","hp":10000,"atk":2000,"def":800,"money":10,"exp":500,"point":0,"special":[]}, + "E561": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]}, + "E562": {"name":"嘲讽剑客","hp":2000,"atk":1500,"def":600,"money":1,"exp":50,"point":0,"special":[19]}, + "E563": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]}, + "E564": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]} } \ No newline at end of file diff --git a/public/project/floors/MT22.js b/public/project/floors/MT22.js index b9e4461..8b929c9 100644 --- a/public/project/floors/MT22.js +++ b/public/project/floors/MT22.js @@ -29,7 +29,10 @@ main.floors.MT22= ], "3,9": [ "第二章的加点已开启,可以在技能树的前置技能下方选择", - "如果你玩过上个版本,直接跳到了本章,记得查看背包里面的各种道具,尤其是百科全书" + "如果你玩过上个版本,直接跳到了本章,记得查看背包里面的各种道具,尤其是百科全书,同时注意左边是你来的方向,那里还有些怪物" + ], + "7,9": [ + "对于电摇嘲讽的怪物,当一个点可以被多个怪物嘲讽时,会优先选择最靠左上角的怪物。其次,在进入嘲讽区域之前会自动存档" ] }, "changeFloor": { @@ -58,7 +61,7 @@ main.floors.MT22= [142,142,482,482,492, 0, 0,484, 0,494,484,491,484,143,143], [142,142,142,142,142, 0, 0, 0, 0,143,143,143,143,143,143], [ 92, 0, 0, 0,441, 0, 0,484, 0, 0, 0, 0, 0,143,143], - [143,143, 0,129, 0, 0, 0, 0, 0, 0, 0, 0, 0,143,143], + [143,143, 0,129, 0, 0, 0,129, 0, 0, 0, 0, 0,143,143], [143,143,492,143,492,143,492,143,492,143,492,143,492,143,143], [143,143,482,143,482,143,482,143,482,143,482,143,482,143,143], [143,143,482,143,482,143,482,143,482,143,482,143,482,143,143], diff --git a/public/project/floors/MT23.js b/public/project/floors/MT23.js index 7ff713f..4d351e4 100644 --- a/public/project/floors/MT23.js +++ b/public/project/floors/MT23.js @@ -36,8 +36,8 @@ main.floors.MT23= "map": [ [143,143,143,143,143,143,143,143,143,143,143,143, 91,143,143], [143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143], - [143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94], - [143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143], + [143, 0,275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 94], + [143, 0,562, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143], [ 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143], [143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143], [143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,143], diff --git a/public/project/functions.js b/public/project/functions.js index 48358f7..0b4392a 100644 --- a/public/project/functions.js +++ b/public/project/functions.js @@ -424,6 +424,9 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = { if (core.getFlag('bladeOn') && core.getFlag('blade')) { core.setFlag('blade', false); } + if (core.getFlag('shieldOn') && core.getFlag('shield')) { + core.setFlag('shield', false); + } // 事件的处理 var todo = []; @@ -447,11 +450,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = { ); } core.push(todo, enemy.afterBattle); - if ( - core.status.hero.loc.direction == 'up' || - core.status.hero.loc.direction == 'down' - ) - core.insertAction([{ type: 'moveAction' }]); + // 在这里增加其他的自定义事件需求 /* if (enemyId=='xxx') { @@ -694,14 +693,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = { '经过两只相同的怪物中间,勇士生命值变成一半', '#bb99ee' ], - [ - 17, - '仇恨', - '战斗前,怪物附加之前积累的仇恨值作为伤害;战斗后,释放一半的仇恨值。(每杀死一个怪物获得' + - (core.values.hatred || 0) + - '点仇恨值)', - '#b0b666' - ], + [17, '先攻', '战斗时怪物首先攻击', '#b0b666'], [ 18, '阻击', @@ -714,7 +706,12 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = { }, '#8888e6' ], - [19, '自爆', '战斗后勇士的生命值变成1', '#ff6666'], + [ + 19, + '电摇嘲讽', + '当勇士移动到怪物同行或同列时,勇士会直接冲向怪物,撞碎路上的所有地形和门,拾取路上的道具,与路上的怪物以及该怪物战斗', + '#ff6666' + ], [20, '无敌', '勇士无法打败怪物,除非拥有十字架', '#aaaaaa'], [ 21, @@ -990,6 +987,9 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = { // 战斗伤害不能为负值 if (per_damage < 0) per_damage = 0; + // 先攻 + if (core.hasSpecial(mon_special, 17)) damage += per_damage; + // 2连击 & 3连击 & N连击 if (core.hasSpecial(mon_special, 4)) per_damage *= 2; if (core.hasSpecial(mon_special, 5)) per_damage *= 3; @@ -1431,7 +1431,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = { var damage = {}, // 每个点的伤害值 type = {}, // 每个点的伤害类型 repulse = {}, // 每个点的阻击怪信息 - ambush = {}; // 每个点的捕捉信息 + mockery = {}; // 电摇嘲讽 var betweenAttackLocs = {}; // 所有可能的夹击点 var needCache = false; var canGoDeadZone = core.flags.canGoDeadZone; @@ -1528,7 +1528,6 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = { } } // 射击 - // 如果要防止激光伤害,可以直接简单的将 flag:no_laser 设为true if (enemy && core.hasSpecial(enemy.special, 24)) { var beyondVisual = false; for (var nx = 0; nx < width; nx++) { @@ -1618,6 +1617,22 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = { } } + // 电摇嘲讽 + if (enemy && core.hasSpecial(enemy.special, 19)) { + for (let nx = 0; nx < width; nx++) { + if (!core.noPass(nx, y)) { + mockery[`${nx},${y}`] ??= []; + mockery[`${nx},${y}`].push([x, y]); + } + } + for (let ny = 0; ny < height; ny++) { + if (!core.noPass(x, ny)) { + mockery[`${x},${ny}`] ??= []; + mockery[`${x},${ny}`].push([x, y]); + } + } + } + // 夹击;在这里提前计算所有可能的夹击点,具体计算逻辑在下面 // 如果要防止夹击伤害,可以简单的将 flag:no_betweenAttack 设为true if ( @@ -1721,7 +1736,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = { damage: damage, type: type, repulse: repulse, - ambush: ambush, + mockery, needCache: needCache, cache: {}, // clear cache haveHunt: haveHunt diff --git a/public/project/icons.js b/public/project/icons.js index 09d8edd..09f42a5 100644 --- a/public/project/icons.js +++ b/public/project/icons.js @@ -327,7 +327,11 @@ var icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 = "E549": 115, "E550": 116, "E556": 117, - "E557": 118 + "E557": 118, + "E561": 119, + "E562": 120, + "E563": 121, + "E564": 122 }, "enemy48": { "angel": 0, diff --git a/public/project/items.js b/public/project/items.js index 35600dd..1978445 100644 --- a/public/project/items.js +++ b/public/project/items.js @@ -97,8 +97,8 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "cls": "items", "name": "红血瓶", "text": ",生命+${core.values.redPotion}", - "itemEffect": "core.status.hero.hp += 100 * core.status.thisMap.ratio", - "itemEffectTip": ",生命+${100 * core.status.thisMap.ratio}", + "itemEffect": "core.status.hero.hp += 100 * core.status.thisMap.ratio * (1 + core.getSkillLevel(13) / 50)", + "itemEffectTip": ",生命+${100 * core.status.thisMap.ratio * (1 + core.getSkillLevel(13) / 50)}", "useItemEffect": "core.status.hero.hp += core.values.redPotion", "canUseItemEffect": "true" }, @@ -106,8 +106,8 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "cls": "items", "name": "蓝血瓶", "text": ",生命+${core.values.bluePotion}", - "itemEffect": "core.status.hero.hp += 200 * core.status.thisMap.ratio", - "itemEffectTip": ",生命+${200 * core.status.thisMap.ratio}", + "itemEffect": "core.status.hero.hp += 200 * core.status.thisMap.ratio * (1 + core.getSkillLevel(13) / 50)", + "itemEffectTip": ",生命+${200 * core.status.thisMap.ratio * (1 + core.getSkillLevel(13) / 50)}", "useItemEffect": "core.status.hero.hp += core.values.bluePotion", "canUseItemEffect": "true" }, @@ -115,8 +115,8 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "cls": "items", "name": "黄血瓶", "text": ",生命+${core.values.yellowPotion}", - "itemEffect": "core.status.hero.hp += 400 * core.status.thisMap.ratio", - "itemEffectTip": ",生命+${400 * core.status.thisMap.ratio}", + "itemEffect": "core.status.hero.hp += 400 * core.status.thisMap.ratio * (1 + core.getSkillLevel(13) / 50)", + "itemEffectTip": ",生命+${400 * core.status.thisMap.ratio * (1 + core.getSkillLevel(13) / 50)}", "useItemEffect": "core.status.hero.hp += core.values.yellowPotion", "canUseItemEffect": "true" }, @@ -124,8 +124,8 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "cls": "items", "name": "绿血瓶", "text": ",生命+${core.values.greenPotion}", - "itemEffect": "core.status.hero.hp += 800 * core.status.thisMap.ratio", - "itemEffectTip": ",生命+${800 * core.status.thisMap.ratio}", + "itemEffect": "core.status.hero.hp += 800 * core.status.thisMap.ratio * (1 + core.getSkillLevel(13) / 50)", + "itemEffectTip": ",生命+${800 * core.status.thisMap.ratio * (1 + core.getSkillLevel(13) / 50)}", "useItemEffect": "core.status.hero.hp += core.values.greenPotion", "canUseItemEffect": "true" }, @@ -1180,8 +1180,8 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "cls": "items", "name": "大红血瓶", "text": ",生命+${core.values.redPotion}", - "itemEffect": "core.status.hero.hp += 1000 * core.status.thisMap.ratio", - "itemEffectTip": ",生命+${1000 * core.status.thisMap.ratio}", + "itemEffect": "core.status.hero.hp += 1000 * core.status.thisMap.ratio * (1 + core.getSkillLevel(13) / 50)", + "itemEffectTip": ",生命+${1000 * core.status.thisMap.ratio * (1 + core.getSkillLevel(13) / 50)}", "useItemEffect": "core.status.hero.hp += core.values.redPotion", "canUseItemEffect": "true" }, @@ -1193,8 +1193,8 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "cls": "items", "name": "大蓝血瓶", "text": ",生命+${core.values.redPotion}", - "itemEffect": "core.status.hero.hp += 2000 * core.status.thisMap.ratio", - "itemEffectTip": ",生命+${2000 * core.status.thisMap.ratio}", + "itemEffect": "core.status.hero.hp += 2000 * core.status.thisMap.ratio * (1 + core.getSkillLevel(13) / 50)", + "itemEffectTip": ",生命+${2000 * core.status.thisMap.ratio * (1 + core.getSkillLevel(13) / 50)}", "useItemEffect": "core.status.hero.hp += core.values.redPotion", "canUseItemEffect": "true" }, @@ -1210,8 +1210,8 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "cls": "items", "name": "大绿血瓶", "text": ",生命+${core.values.redPotion}", - "itemEffect": "core.status.hero.hp += 8000 * core.status.thisMap.ratio", - "itemEffectTip": ",生命+${8000 * core.status.thisMap.ratio}", + "itemEffect": "core.status.hero.hp += 8000 * core.status.thisMap.ratio * (1 + core.getSkillLevel(13) / 50)", + "itemEffectTip": ",生命+${8000 * core.status.thisMap.ratio * (1 + core.getSkillLevel(13) / 50)}", "useItemEffect": "core.status.hero.hp += core.values.redPotion", "canUseItemEffect": "true" }, @@ -1231,8 +1231,8 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "cls": "items", "name": "大黄血瓶", "text": ",生命+${core.values.redPotion}", - "itemEffect": "core.status.hero.hp += 4000 * core.status.thisMap.ratio", - "itemEffectTip": ",生命+${4000 * core.status.thisMap.ratio}", + "itemEffect": "core.status.hero.hp += 4000 * core.status.thisMap.ratio * (1 + core.getSkillLevel(13) / 50)", + "itemEffectTip": ",生命+${4000 * core.status.thisMap.ratio * (1 + core.getSkillLevel(13) / 50)}", "useItemEffect": "core.status.hero.hp += core.values.redPotion", "canUseItemEffect": "true" }, diff --git a/public/project/maps.js b/public/project/maps.js index 9f940a1..caa9982 100644 --- a/public/project/maps.js +++ b/public/project/maps.js @@ -485,6 +485,10 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e = "558": {"cls":"items","id":"I558"}, "559": {"cls":"items","id":"I559"}, "560": {"cls":"items","id":"I560"}, + "561": {"cls":"enemys","id":"E561"}, + "562": {"cls":"enemys","id":"E562"}, + "563": {"cls":"enemys","id":"E563"}, + "564": {"cls":"enemys","id":"E564"}, "20037": {"cls":"tileset","id":"X20037","cannotOut":["up","left"],"cannotIn":["up","left"]}, "20038": {"cls":"tileset","id":"X20038","cannotOut":["up"],"cannotIn":["up"]}, "20039": {"cls":"tileset","id":"X20039","cannotOut":["up","right"],"cannotIn":["up","right"]}, diff --git a/public/project/materials/enemys.png b/public/project/materials/enemys.png index 8c8c688..0c154e6 100644 Binary files a/public/project/materials/enemys.png and b/public/project/materials/enemys.png differ diff --git a/public/project/plugins.js b/public/project/plugins.js index 2417f95..e870b6d 100644 --- a/public/project/plugins.js +++ b/public/project/plugins.js @@ -2227,7 +2227,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = { damaged[loc + direction] = true; core.drawHeroAnimate('hand'); core.status.hero.hp -= 1000; - core.addPop(x * 32 + 16, y * 32 + 16, 1000); + core.addPop(x * 32 + 16, y * 32 + 16, -1000); core.updateStatusBar(); if (core.status.hero.hp < 0) { clearInterval(skill1); @@ -2245,7 +2245,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = { damaged[loc + direction] = true; core.drawHeroAnimate('hand'); core.status.hero.hp -= 1000; - core.addPop(x * 32 + 16, y * 32 + 16, 1000); + core.addPop(x * 32 + 16, y * 32 + 16, -1000); core.updateStatusBar(); if (core.status.hero.hp < 0) { clearInterval(skill1); @@ -2376,7 +2376,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = { if (x == locs[index][0] && y == locs[index][1]) { core.drawHeroAnimate('hand'); core.status.hero.hp -= 5000; - core.addPop(x * 32 + 16, y * 32 + 16, 5000); + core.addPop(x * 32 + 16, y * 32 + 16, -5000); core.updateStatusBar(); if (core.status.hero.hp < 0) { core.status.hero.hp = 0; @@ -2552,7 +2552,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = { hy = core.status.hero.loc.y; if (Math.abs(hx - x) <= 1 && Math.abs(hy - y) <= 1) { core.status.hero.hp -= 3000 * power; - core.addPop(x * 32 + 16, y * 32 + 16, 3000 * power); + core.addPop(x * 32 + 16, y * 32 + 16, -3000 * power); core.updateStatusBar(); if (core.status.hero.hp < 0) { core.status.hero.hp = 0; @@ -2720,7 +2720,11 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = { ) { damaged[i] = true; core.status.hero.hp -= 3000; - core.addPop(x * 32 + 16, y * 32 + 16, 3000); + core.addPop( + x * 32 + 16, + y * 32 + 16, + -3000 + ); core.updateStatusBar(); core.playSound('electron.mp3'); if (core.status.hero.hp < 0) { @@ -3291,7 +3295,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = { hy = core.status.hero.loc.y; if (loc[0] == hx && loc[1] == hy) { core.status.hero.hp -= 3000; - core.addPop(x * 32 + 16, y * 32 + 16, 3000); + core.addPop(x * 32 + 16, y * 32 + 16, -3000); core.updateStatusBar(); if (core.status.hero.hp < 0) { core.status.hero.hp = 0; @@ -3336,7 +3340,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = { loc2[1]; if (n1 * n2 <= 0) { core.status.hero.hp -= damage; - core.addPop(x * 32 + 16, y * 32 + 16, damage); + core.addPop(x * 32 + 16, y * 32 + 16, -damage); core.updateStatusBar(); core.playSound('electron.mp3'); if (core.status.hero.hp < 0) { @@ -3362,7 +3366,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = { loc2[1]; if (n1 * n2 <= 0) { core.status.hero.hp -= damage; - core.addPop(x * 32 + 16, y * 32 + 16, damage); + core.addPop(x * 32 + 16, y * 32 + 16, -damage); core.updateStatusBar(); core.playSound('electron.mp3'); if (core.status.hero.hp < 0) { @@ -3380,7 +3384,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = { popupDamage: function () { // 伤害弹出 // 复写阻激夹域检测 - control.prototype.checkBlock = function () { + control.prototype.checkBlock = function (forceMockery) { var x = core.getHeroLoc('x'), y = core.getHeroLoc('y'), loc = x + ',' + y; @@ -3410,9 +3414,86 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = { core.updateStatusBar(); } } - this._checkBlock_ambush(core.status.checkBlock.ambush[loc]); this._checkBlock_repulse(core.status.checkBlock.repulse[loc]); + checkMockery(loc, forceMockery); }; + + control.prototype.moveHero = function (direction, callback) { + // 如果正在移动,直接return + if (core.status.heroMoving != 0) return; + if (core.isset(direction)) core.setHeroLoc('direction', direction); + + const nx = core.nextX(); + const ny = core.nextY(); + if (core.status.checkBlock.mockery[`${nx},${ny}`]) { + core.autosave(); + } + + if (callback) return this.moveAction(callback); + this._moveHero_moving(); + }; + + function checkMockery(loc, force) { + if (core.status.lockControl && !force) return; + const mockery = core.status.checkBlock.mockery[loc]; + if (mockery) { + mockery.sort((a, b) => + a[0] === b[0] ? a[1] - b[1] : a[0] - b[0] + ); + const action = []; + const [tx, ty] = mockery[0]; + let { x, y } = core.status.hero.loc; + const dir = + x > tx ? 'left' : x < tx ? 'right' : y > ty ? 'up' : 'down'; + const { x: dx, y: dy } = core.utils.scan[dir]; + + action.push({ type: 'changePos', direction: dir }); + const blocks = core.getMapBlocksObj(); + while (1) { + x += dx; + y += dy; + const block = blocks[`${x},${y}`]; + if (block) { + block.event.cls === ''; + if ( + [ + 'animates', + 'autotile', + 'tileset', + 'npcs', + 'npc48' + ].includes(block.event.cls) + ) { + action.push( + { + type: 'hide', + loc: [[x, y]], + remove: true, + time: 0 + }, + { + type: 'animate', + name: 'hand', + loc: [x, y], + async: true + } + ); + } + if (block.event.cls.startsWith('enemy')) { + action.push({ type: 'moveAction' }); + } + } + action.push({ type: 'moveAction' }); + if (x === tx && y === ty) break; + } + action.push({ + type: 'function', + function: `function() { core.checkBlock(true); }` + }); + action.push({ type: 'stopAsync' }); + core.insertAction(action); + } + } }, hotReload: function () { if (main.mode !== 'play' || main.replayChecking) return; diff --git a/src/data/desc.json b/src/data/desc.json index a9fd807..5fedfb8 100644 --- a/src/data/desc.json +++ b/src/data/desc.json @@ -33,6 +33,28 @@ "同时,几乎所有 ui 的退出按钮都在左上角。" ] }, + "about": { + "text": "关于游戏", + "condition": "true", + "desc": [ + "使用样板:Vite 魔塔样板", + "
", + "样板版本:V2.10.0", + "
", + "游戏开源地址:", + "https://github.com/unanmed/HumanBreak", + "
", + "游戏作者:古祠", + "
", + "BGM来源:网易云音乐", + "
", + "素材来源:大素材库、爱给网、网站素材库", + "
", + "特别鸣谢:无名甲烷菌", + "
", + "测试:" + ] + }, "tutorial": { "text": "新手教程", "condition": "true", diff --git a/src/source/cls.d.ts b/src/source/cls.d.ts index 839323b..abb45e3 100644 --- a/src/source/cls.d.ts +++ b/src/source/cls.d.ts @@ -484,6 +484,10 @@ interface IdToCls { I558: 'items'; I559: 'items'; I560: 'items'; + E561: 'enemys'; + E562: 'enemys'; + E563: 'enemys'; + E564: 'enemys'; X20037: 'tileset'; X20038: 'tileset'; X20039: 'tileset'; diff --git a/src/source/maps.d.ts b/src/source/maps.d.ts index 6ab18b5..c0c4e07 100644 --- a/src/source/maps.d.ts +++ b/src/source/maps.d.ts @@ -484,6 +484,10 @@ interface IdToNumber { I558: 558; I559: 559; I560: 560; + E561: 561; + E562: 562; + E563: 563; + E564: 564; X20037: 20037; X20038: 20038; X20039: 20039; @@ -1002,6 +1006,10 @@ interface NumberToId { 558: 'I558'; 559: 'I559'; 560: 'I560'; + 561: 'E561'; + 562: 'E562'; + 563: 'E563'; + 564: 'E564'; 20037: 'X20037'; 20038: 'X20038'; 20039: 'X20039';