重做战斗动画

This commit is contained in:
草莓 2025-03-21 11:04:13 +08:00
parent 3224b55f40
commit c2a2f74ba5
4 changed files with 122 additions and 140 deletions

View File

@ -119,7 +119,8 @@ var icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 =
"T363": 87,
"T364": 88,
"T365": 89,
"T397": 90
"T397": 90,
"T399": 91
},
"animates": {
"star": 0,

View File

@ -297,6 +297,7 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e =
"396": {"cls":"items","id":"I396"},
"397": {"cls":"items","id":"postman"},
"398": {"cls":"terrains","id":"T397"},
"399": {"cls":"terrains","id":"T399"},
"20034": {"cls":"tileset","id":"X20034","canPass":true},
"20154": {"cls":"tileset","id":"X20154","canPass":true},
"20216": {"cls":"tileset","id":"X20216","canPass":true},

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 51 KiB

View File

@ -21473,6 +21473,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
const ctx = animateAttack.getContext("2d");
core.plugin.playingattack = new Set();
const ctx6 = main.dom.animate2.getContext("2d");
const changeY = -30
let easy = false;
const { imagelighter } = core.plugin.utils;
@ -21625,9 +21626,9 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
function animateonAttack(name, onenemy) {
if (onenemy) {
playanimate(name, 290, 180);
playanimate(name, 290, 180 + changeY);
} else {
playanimate(name, 130, 180);
playanimate(name, 130, 180 + changeY);
}
}
@ -21678,20 +21679,30 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
return sx <= x && x <= dx && sy <= y && y <= dy;
};
const pos = [px, py];
const easybox = makeBox([90, 232], [80, 22]),
easyclosebox = makeBox([290, 232], [40, 22]),
uneasybox = makeBox([265, 330], [65, 20]),
uneasyclosebox = makeBox([290, 350], [40, 20]);
const easybox = makeBox([90, 232 + changeY], [80, 22]),
easyspeedbox = makeBox([290, 232 + changeY], [40, 22]),
uneasybox = makeBox([265, 330 + changeY], [65, 20]),
uneasyspeedbox = makeBox([290, 350 + changeY], [40, 20]),
uneasyClosebox = makeBox([265, 370 + changeY], [65, 20]),
easyClosebox = makeBox([290, 255 + changeY], [40, 20]);
if (inRect(pos, easybox) && easy) {
easy = false;
} else if (inRect(pos, uneasybox) && !easy) {
easy = true;
} else if (
(inRect(pos, easyclosebox) && easy) ||
(inRect(pos, uneasyclosebox) && !easy)
(inRect(pos, easyspeedbox) && easy) ||
(inRect(pos, uneasyspeedbox) && !easy)
) {
flags.qukly = !flags.qukly
} else if ((inRect(pos, easyClosebox) && easy) ||
(inRect(pos, uneasyClosebox) && !easy)
) {
core.status.event.id = "";
core.unregisterAnimationFrame("attackAnimate");
core.clearMap(ctx);
core.closePanel();
res();
}
};
async function drawAttackAnimate(
@ -21751,18 +21762,18 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
ctx,
hero.name,
127,
148,
148 + changeY,
"#FFFFFF",
"#000000",
"bold 14px Verdana"
);
core.setTextAlign(ctx, "left");
core.drawIcon(ctx, "hp", 70, 210, 16, 16);
core.drawIcon(ctx, "hp", 70, 210 + changeY, 16, 16);
core.fillBoldText(
ctx,
"生命 " + core.formatBigNumber(heroInfo.hp, true),
90,
225,
225 + changeY,
"#FFFFFF",
"#000000",
"bold 14px Arial"
@ -21772,13 +21783,13 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
ctx,
"详细模式",
90,
250,
250 + changeY,
"#FFFF60",
"#000000",
"bold 18px Verdana"
);
core.strokeRect(ctx, 112, 159, 32, 48, "rgba(255,255,255,1)", 1);
core.strokeRect(ctx, 112, 159 + changeY, 32, 48, "rgba(255,255,255,1)", 1);
let img =
attack && heroDiffList[turn].hp < 0 ?
imagelighter(core.material.images.images["hero.webp"]) :
@ -21796,7 +21807,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
32,
48,
112,
159,
159 + changeY,
32,
48
);
@ -21806,7 +21817,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
ctx,
enemyInfo.name,
289,
148,
148 + changeY,
"#FFFFFF",
"#000000",
"bold 14px Verdana"
@ -21814,7 +21825,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
core.setTextAlign(ctx, "right");
if (enemyInfo.cls === "enemys") {
core.strokeRect(ctx, 272, 175, 32, 32, "rgba(255,255,255,1)", 1);
core.strokeRect(ctx, 272, 175 + changeY, 32, 32, "rgba(255,255,255,1)", 1);
let img =
attack && enemyDiffList[turn].hp < 0 ?
imagelighter(core.getBlockInfo(enemyInfo.id).image) :
@ -21832,12 +21843,12 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
32,
32,
272,
175,
175 + changeY,
32,
32
);
} else {
core.strokeRect(ctx, 272, 159, 32, 48, "rgba(255,255,255,1)", 1);
core.strokeRect(ctx, 272, 159 + changeY, 32, 48, "rgba(255,255,255,1)", 1);
let img =
attack && enemyDiffList[turn].hp < 0 ?
imagelighter(core.getBlockInfo(enemyInfo.id).image) :
@ -21855,18 +21866,18 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
32,
48,
272,
159,
159 + changeY,
32,
48
);
}
core.drawIcon(ctx, "hp", 330, 210, 16, 16);
core.drawIcon(ctx, "hp", 330, 210 + changeY, 16, 16);
core.fillBoldText(
ctx,
core.formatBigNumber(enemyInfo.hp, true) + " 生命",
330,
225,
225 + changeY,
"#FFFFFF",
"#000000",
"bold 14px Verdana"
@ -21875,17 +21886,25 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
ctx,
flags.qukly ? "正常" : "极速",
330,
250,
250 + changeY,
"#FFFF60",
"#000000",
"bold 18px Verdana"
);
core.fillBoldText(
ctx,
"跳过",
330,
273 + changeY,
"#FFFF60",
"#000000",
"bold 18px Verdana"
);
core.fillBoldText(
ctx,
"V",
219,
183,
183 + changeY,
"#FFFFFF",
"#000000",
"bold 48px pala"
@ -21894,7 +21913,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
ctx,
"s",
231,
183,
183 + changeY,
"#FFFFFF",
"#000000",
"bold 36px pala"
@ -21904,26 +21923,26 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
let enemynow = Math.min(100 + (enemyInfo.now / oneTurn) * 215, 315);
ctx.fillStyle = "#FFFFFF";
ctx.beginPath();
ctx.moveTo(enemynow, 120);
ctx.lineTo(enemynow + 5, 110);
ctx.lineTo(enemynow - 5, 110);
ctx.moveTo(enemynow, 120 + changeY);
ctx.lineTo(enemynow + 5, 110 + changeY);
ctx.lineTo(enemynow - 5, 110 + changeY);
ctx.closePath();
ctx.fill();
core.drawIcon(ctx, 'T367', enemynow - 16, 74, 32, 32)
core.drawIcon(ctx, 'T397', enemynow - 16, 84 + changeY, 32, 32)
core.drawLine(ctx, 100, 125, 315, 125, "#FFFFFF", 5);
core.drawLine(ctx, 100, 125 + changeY, 315, 125 + changeY, "#FFFFFF", 5);
equipInfo.forEach(function (v) {
if (!attack && !onAttack) v.now += v.speed;
let vnow = Math.min(100 + (v.now / oneTurn) * 215, 315);
ctx.beginPath();
ctx.moveTo(vnow, 120);
ctx.lineTo(vnow + 5, 110);
ctx.lineTo(vnow - 5, 110);
ctx.moveTo(vnow, 120 + changeY);
ctx.lineTo(vnow + 5, 110 + changeY);
ctx.lineTo(vnow - 5, 110 + changeY);
ctx.closePath();
ctx.fill();
core.drawIcon(ctx, v.id, vnow - 16, 54, 32, 32);
core.drawIcon(ctx, v.id, vnow - 16, 84 + changeY, 32, 32);
});
if (!attack && !onAttack && !flags.qukly) heroInfo.now += hero.speed;
let heronow = Math.min(100 + (heroInfo.now / oneTurn) * 215, 315);
@ -21934,18 +21953,8 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
ctx.closePath();
ctx.fill();
core.drawImage(
ctx,
"hero.webp",
0,
0,
32,
48,
heronow - 16,
58,
32,
48
);
core.drawIcon(ctx, 'T399', heronow - 16 - 4, 84 - 4 + changeY, 40, 40)
} else {
core.fillRect(ctx, 64, 52, 288, 320, "rgba(0,0,0,0.5)");
core.strokeRect(ctx, 64, 52, 288, 320, "rgba(255,255,255,0.5)", 4);
@ -21954,25 +21963,25 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
ctx,
hero.name,
127,
148,
148 + changeY,
"#FFFFFF",
"#000000",
"bold 14px Verdana"
);
core.setTextAlign(ctx, "left");
core.drawIcon(ctx, "hp", 70, 210, 16, 16);
core.drawIcon(ctx, "atk", 70, 230, 16, 16);
core.drawIcon(ctx, "def", 70, 250, 16, 16);
core.drawIcon(ctx, "I374", 70, 270, 16, 16);
core.drawIcon(ctx, "I375", 70, 290, 16, 16);
core.drawIcon(ctx, "mdef", 70, 310, 16, 16);
core.drawIcon(ctx, "amulet", 70, 330, 16, 16);
core.drawIcon(ctx, "jumpShoes", 70, 350, 16, 16);
core.drawIcon(ctx, "hp", 70, 210 + changeY, 16, 16);
core.drawIcon(ctx, "atk", 70, 230 + changeY, 16, 16);
core.drawIcon(ctx, "def", 70, 250 + changeY, 16, 16);
core.drawIcon(ctx, "I374", 70, 270 + changeY, 16, 16);
core.drawIcon(ctx, "I375", 70, 290 + changeY, 16, 16);
core.drawIcon(ctx, "mdef", 70, 310 + changeY, 16, 16);
core.drawIcon(ctx, "amulet", 70, 330 + changeY, 16, 16);
core.drawIcon(ctx, "jumpShoes", 70, 350 + changeY, 16, 16);
core.fillBoldText(
ctx,
"生命 " + core.formatBigNumber(heroInfo.hp, true),
90,
225,
225 + changeY,
"#FFFFFF",
"#000000",
"bold 14px Arial"
@ -21982,7 +21991,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
ctx,
"攻击 " + core.formatBigNumber(heroInfo.atk),
90,
245,
245 + changeY,
"#FFFFFF",
"#000000",
"bold 14px Arial"
@ -21991,7 +22000,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
ctx,
"防御 " + core.formatBigNumber(heroInfo.def),
90,
265,
265 + changeY,
"#FFFFFF",
"#000000",
"bold 14px Arial"
@ -22000,7 +22009,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
ctx,
"法强 " + core.formatBigNumber(heroInfo.spell),
90,
285,
285 + changeY,
"#FFFFFF",
"#000000",
"bold 14px Arial"
@ -22009,7 +22018,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
ctx,
"法攻 " + core.formatBigNumber(heroInfo.matk),
90,
305,
305 + changeY,
"#FFFFFF",
"#000000",
"bold 14px Arial"
@ -22018,7 +22027,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
ctx,
"护盾 " + core.formatBigNumber(heroInfo.mhp),
90,
325,
325 + changeY,
"#FFFFFF",
"#000000",
"bold 14px Arial"
@ -22027,7 +22036,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
ctx,
"法抗 " + heroInfo.mdef + "%",
90,
345,
345 + changeY,
"#FFFFFF",
"#000000",
"bold 14px Arial"
@ -22036,13 +22045,13 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
ctx,
"速度 " + core.formatBigNumber(heroInfo.speed),
90,
365,
365 + changeY,
"#FFFFFF",
"#000000",
"bold 14px Arial"
);
core.strokeRect(ctx, 112, 159, 32, 48, "rgba(255,255,255,1)", 1);
core.strokeRect(ctx, 112, 159 + changeY, 32, 48, "rgba(255,255,255,1)", 1);
let img =
attack && heroDiffList[turn].hp < 0 ?
imagelighter(core.material.images.images["hero.webp"]) :
@ -22060,7 +22069,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
32,
48,
112,
159,
159 + changeY,
32,
48
);
@ -22070,7 +22079,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
ctx,
enemyInfo.name,
289,
148,
148 + changeY,
"#FFFFFF",
"#000000",
"bold 14px Verdana"
@ -22078,7 +22087,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
core.setTextAlign(ctx, "right");
if (enemyInfo.cls === "enemys") {
core.strokeRect(ctx, 272, 175, 32, 32, "rgba(255,255,255,1)", 1);
core.strokeRect(ctx, 272, 175 + changeY, 32, 32, "rgba(255,255,255,1)", 1);
let img =
attack && enemyDiffList[turn].hp < 0 ?
imagelighter(core.getBlockInfo(enemyInfo.id).image) :
@ -22096,12 +22105,12 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
32,
32,
272,
175,
175 + changeY,
32,
32
);
} else {
core.strokeRect(ctx, 272, 159, 32, 48, "rgba(255,255,255,1)", 1);
core.strokeRect(ctx, 272, 159 + changeY, 32, 48, "rgba(255,255,255,1)", 1);
let img =
attack && enemyDiffList[turn].hp < 0 ?
imagelighter(core.getBlockInfo(enemyInfo.id).image) :
@ -22119,22 +22128,22 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
32,
48,
272,
159,
159 + changeY,
32,
48
);
}
core.drawIcon(ctx, "hp", 330, 210, 16, 16);
core.drawIcon(ctx, "atk", 330, 230, 16, 16);
core.drawIcon(ctx, "def", 330, 250, 16, 16);
core.drawIcon(ctx, "I374", 330, 270, 16, 16);
core.drawIcon(ctx, "amulet", 330, 290, 16, 16);
core.drawIcon(ctx, "jumpShoes", 330, 310, 16, 16);
core.drawIcon(ctx, "hp", 330, 210 + changeY, 16, 16);
core.drawIcon(ctx, "atk", 330, 230 + changeY, 16, 16);
core.drawIcon(ctx, "def", 330, 250 + changeY, 16, 16);
core.drawIcon(ctx, "I374", 330, 270 + changeY, 16, 16);
core.drawIcon(ctx, "amulet", 330, 290 + changeY, 16, 16);
core.drawIcon(ctx, "jumpShoes", 330, 310 + changeY, 16, 16);
core.fillBoldText(
ctx,
core.formatBigNumber(enemyInfo.hp, true) + " 生命",
330,
225,
225 + changeY,
"#FFFFFF",
"#000000",
"bold 14px Arial"
@ -22143,7 +22152,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
ctx,
core.formatBigNumber(enemyInfo.atk) + " 攻击",
330,
245,
245 + changeY,
"#FFFFFF",
"#000000",
"bold 14px Arial"
@ -22152,7 +22161,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
ctx,
core.formatBigNumber(enemyInfo.def) + " 防御",
330,
265,
265 + changeY,
"#FFFFFF",
"#000000",
"bold 14px Arial"
@ -22161,7 +22170,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
ctx,
(enemyInfo.spell ?? 0) + " 法强",
330,
285,
285 + changeY,
"#FFFFFF",
"#000000",
"bold 14px Arial"
@ -22170,7 +22179,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
ctx,
(enemyInfo.mdef ?? 0) * 100 + "% 法抗",
330,
305,
305 + changeY,
"#FFFFFF",
"#000000",
"bold 14px Arial"
@ -22179,7 +22188,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
ctx,
core.formatBigNumber(enemyInfo.speed) + " 速度",
330,
325,
325 + changeY,
"#FFFFFF",
"#000000",
"bold 14px Arial"
@ -22188,7 +22197,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
ctx,
"简易模式",
330,
345,
345 + changeY,
"#FFFF60",
"#000000",
"bold 16px Verdana"
@ -22197,17 +22206,25 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
ctx,
flags.qukly ? "正常" : "极速",
330,
365,
365 + changeY,
"#FFFF60",
"#000000",
"bold 16px Verdana"
);
core.fillBoldText(
ctx,
"跳过",
330,
385 + changeY,
"#FFFF60",
"#000000",
"bold 16px Verdana"
);
core.fillBoldText(
ctx,
"V",
219,
183,
183 + changeY,
"#FFFFFF",
"#000000",
"bold 48px pala"
@ -22216,7 +22233,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
ctx,
"s",
231,
183,
183 + changeY,
"#FFFFFF",
"#000000",
"bold 36px pala"
@ -22226,74 +22243,37 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
let enemynow = Math.min(100 + (enemyInfo.now / oneTurn) * 215, 315);
ctx.fillStyle = "#FFFFFF";
ctx.beginPath();
ctx.moveTo(enemynow, 120);
ctx.lineTo(enemynow + 5, 110);
ctx.lineTo(enemynow - 5, 110);
ctx.moveTo(enemynow, 120 + changeY);
ctx.lineTo(enemynow + 5, 110 + changeY);
ctx.lineTo(enemynow - 5, 110 + changeY);
ctx.closePath();
ctx.fill();
core.drawIcon(ctx, 'T397', enemynow - 16, 84 + changeY, 32, 32)
if (enemyInfo.cls === "enemys") {
core.drawImage(
ctx,
core.getBlockInfo(enemyInfo.id).image,
32,
core.getBlockInfo(enemyInfo.id).posY * 32,
32,
32,
enemynow - 16,
74,
32,
32
);
} else {
core.drawImage(
ctx,
core.getBlockInfo(enemyInfo.id).image,
32,
core.getBlockInfo(enemyInfo.id).posY * 48,
32,
19,
enemynow - 16,
58,
32,
48
);
}
core.drawLine(ctx, 100, 125, 315, 125, "#FFFFFF", 5);
core.drawLine(ctx, 100, 125 + changeY, 315, 125 + changeY, "#FFFFFF", 5);
equipInfo.forEach(function (v) {
if (!attack && !onAttack) v.now += v.speed;
let vnow = Math.min(100 + (v.now / oneTurn) * 215, 315);
ctx.beginPath();
ctx.moveTo(vnow, 120);
ctx.lineTo(vnow + 5, 110);
ctx.lineTo(vnow - 5, 110);
ctx.moveTo(vnow, 120 + changeY);
ctx.lineTo(vnow + 5, 110 + changeY);
ctx.lineTo(vnow - 5, 110 + changeY);
ctx.closePath();
ctx.fill();
core.drawIcon(ctx, v.id, vnow - 16, 54, 32, 32);
core.drawIcon(ctx, v.id, vnow - 16, 84 + changeY, 32, 32);
});
if (!attack && !onAttack && !flags.qukly) heroInfo.now += hero.speed;
let heronow = Math.min(100 + (heroInfo.now / oneTurn) * 215, 315);
ctx.beginPath();
ctx.moveTo(heronow, 120);
ctx.lineTo(heronow + 5, 110);
ctx.lineTo(heronow - 5, 110);
ctx.moveTo(heronow, 120 + changeY);
ctx.lineTo(heronow + 5, 110 + changeY);
ctx.lineTo(heronow - 5, 110 + changeY);
ctx.closePath();
ctx.fill();
core.drawImage(
ctx,
"hero.webp",
0,
0,
32,
48,
heronow - 16,
58,
32,
48
);
core.drawIcon(ctx, 'T399', heronow - 16 - 4, 84 - 4 + changeY, 40, 40)
}
let nowattacking = false;
if (heroInfo.now >= oneTurn && !heroInfo.isAttack) {
@ -22323,7 +22303,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
Dove.MorePerform.ShowDamagePop.PopDamage(
ctx, // 默认画布名称
270, // 英雄位置 x
160, // 英雄位置 y
160 + changeY, // 英雄位置 y
text, // 伤害值
18, // 默认字体大小
"Arial", //默认字体
@ -22348,7 +22328,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
Dove.MorePerform.ShowDamagePop.PopDamage(
ctx, // 默认画布名称
110, // 英雄位置 x
160, // 英雄位置 y
160 + changeY, // 英雄位置 y
text, // 伤害值
18, // 默认字体大小
"Arial", //默认字体