Compare commits

..

4 Commits

Author SHA1 Message Date
cd2de674e4 fix: 自动文本事件块 2025-10-12 13:32:41 +08:00
f940d8eaad fix: 构建问题 2025-10-12 13:15:05 +08:00
2d613a2de6 fix: 动画和音效被误删 2025-10-12 12:57:41 +08:00
96038b466c chore: 部分特殊属性 2025-10-12 12:52:01 +08:00
21 changed files with 95 additions and 1271 deletions

View File

@ -633,9 +633,7 @@ export class DamageEnemy implements IDamageEnemy {
if ( if (
block && block &&
block.event.noPass && block.event.noPass &&
block.event.cls !== 'enemys' && block.event.cls !== 'enemys'
block.id !== 141 &&
block.id !== 151
) { ) {
break; break;
} }
@ -874,7 +872,7 @@ export class DamageEnemy implements IDamageEnemy {
} }
// 霜冻 // 霜冻
if (info.special.has(20) && !core.hasEquip('I589')) { if (info.special.has(20)) {
return ( return (
info.def + info.def +
info.hp / (1 - this.enemy.ice! / 100) - info.hp / (1 - this.enemy.ice! / 100) -
@ -951,7 +949,7 @@ export function calDamageWith(
} }
// 霜冻 // 霜冻
if (special.has(20) && !core.hasEquip('I589')) { if (special.has(20)) {
heroPerDamage *= 1 - info.ice! / 100; heroPerDamage *= 1 - info.ice! / 100;
} }

View File

@ -24,13 +24,13 @@ export const specials: SpecialDeclaration[] = [
}, },
{ {
code: 1, code: 1,
name: '致命一击', name: '先攻',
desc: enemy => `怪物每5回合触发一次强力攻击造成${enemy.crit}%的伤害`, desc: `怪物首先攻击`,
color: '#fc3' color: '#fc3'
}, },
{ {
code: 2, code: 2,
name: '恶毒', name: '魔攻',
desc: '怪物攻击无视勇士的防御', desc: '怪物攻击无视勇士的防御',
color: '#bbb0ff' color: '#bbb0ff'
}, },
@ -60,63 +60,68 @@ export const specials: SpecialDeclaration[] = [
}, },
{ {
code: 7, code: 7,
name: '饥渴', name: '破甲',
desc: enemy => desc: enemy =>
`战斗前,怪物降低勇士${enemy.hungry}%的攻击,并加在自己身上`, `战斗前,附加角色防御的${enemy.breakArmor ?? core.values.breakArmor}%作为伤害`,
color: '#b67' color: '#fe7'
}, },
{ {
code: 8, code: 8,
name: '抱团', name: '反击',
desc: enemy => desc: enemy =>
`怪物周围5×5范围内每有一个拥有该属性的怪物不包括自身则对方攻防就增加${enemy.together}%(线性叠加)` + `战斗时,怪物每回合附加角色攻击的${enemy.counterAttack ?? core.values.counterAttack}%作为伤害,无视角色防御`,
`,受加成怪物会在右上角以绿色字体显示当前周围有多少个怪物`,
color: '#fa4' color: '#fa4'
}, },
{ {
code: 9, code: 9,
name: '绝对防御', name: '净化',
desc: '怪物的奇特护甲可以让勇士的额外攻击失效,攻击变为基础攻击+额外攻击', desc: enemy =>
`战斗前,怪物附加角色护盾的${enemy.purify ?? core.values.purify}倍作为伤害`,
color: '#80eed6' color: '#80eed6'
}, },
{ {
code: 10, code: 10,
name: '勇气之刃', name: '模仿',
desc: enemy => `怪物第一回合造成${enemy.courage}%的伤害`, desc: `怪物的攻防与勇士相同`,
color: '#b0c0dd' color: '#b0c0dd'
}, },
{ {
code: 11, code: 11,
name: '勇气冲锋', name: '吸血',
desc: enemy => desc: enemy => {
`怪物首先攻击,造成${enemy.charge}%的伤害并眩晕勇士5回合`, const vampire = enemy.vampire ?? 10;
return (
`战斗前,怪物首先吸取角色的${vampire}%生命` +
`(约${Math.floor((vampire / 100) * getHeroStatusOn('hp'))}点)作为伤害` +
(enemy.add ? `,并把伤害数值加到自身生命上` : ``)
);
},
color: '#ff00d2' color: '#ff00d2'
}, },
{ {
code: 12, code: 12,
name: '追猎', name: '中毒',
desc: '当勇士移动到该怪物的水平或竖直方向上时,怪物向勇士移动一格', desc: () =>
`战斗后,角色陷入中毒状态,每一步损失生命${core.values.poisonDamage}`,
color: '#9e8' color: '#9e8'
}, },
{ {
code: 13, code: 13,
name: '魔攻', name: '衰弱',
desc: '怪物攻击无视勇士的防御', desc: '怪物攻击无视勇士的防御',
color: '#bbb0ff' color: '#f0bbcc'
}, },
{ {
code: 14, code: 14,
name: '智慧之源', name: '诅咒',
desc: '困难难度下简单难度没有效果战斗后怪物会吸取勇士30%的智慧(勇士智慧向下取整至整十)加在本层的拥有该属性的怪物攻击上', desc: '战斗后,角色陷入诅咒状态,战斗无法获得金币和经验',
color: '#bbeef0' color: '#bbeef0'
}, },
{ {
code: 15, code: 15,
name: '突刺', name: '领域',
desc: enemy => desc: enemy =>
`勇士走到怪物怪物周围四格时,怪物对勇士造成${core.formatBigNumber( `经过怪物周围${enemy.zoneSquare ? '九宫格' : '十字'}范围内${enemy.range}格时自动减生命${enemy.zone}`,
Math.max((enemy.value || 0) - getHeroStatusOn('def'))
)}`,
color: '#c677dd' color: '#c677dd'
}, },
{ {

View File

@ -558,19 +558,11 @@ export class HeroMover extends ObjectMoverBase {
const showDir = toDir(this.faceDir); const showDir = toDir(this.faceDir);
// 前方不能移动 // 前方不能移动
if ( if (code === HeroMoveCode.CannotMove || code === HeroMoveCode.Hit) {
code === HeroMoveCode.CannotMove ||
code === HeroMoveCode.Hit ||
code === HeroMoveCode.LoopHit
) {
controller.stop(); controller.stop();
this.onCannotMove(showDir); this.onCannotMove(showDir);
if (code === HeroMoveCode.Hit) { if (code === HeroMoveCode.Hit) {
core.trigger(nx, ny); core.trigger(nx, ny);
} else if (code === HeroMoveCode.LoopHit) {
const floor = core.status.thisMap;
if (x === 0) core.trigger(floor.width - 1, y);
else core.trigger(0, y);
} }
core.checkRouteFolding(); core.checkRouteFolding();
return; return;

View File

@ -4,11 +4,7 @@ const potionItems: AllIdsOf<'items'>[] = [
'redPotion', 'redPotion',
'bluePotion', 'bluePotion',
'yellowPotion', 'yellowPotion',
'greenPotion', 'greenPotion'
'I482',
'I484',
'I487',
'I491'
]; ];
export function createHook() { export function createHook() {

View File

@ -972,7 +972,6 @@ comment_s
/* comment_s /* comment_s
tooltip : comment添加一段会被游戏跳过的注释内容 tooltip : comment添加一段会被游戏跳过的注释内容
helpUrl : /_docs/#/instruction helpUrl : /_docs/#/instruction
doubleclicktext : EvalString_Multi_0
default : ["可以在这里写添加任何注释内容"] default : ["可以在这里写添加任何注释内容"]
colour : this.commentColor colour : this.commentColor
var code = '{"type": "comment", "text": "'+EvalString_Multi_0+'"},\n'; var code = '{"type": "comment", "text": "'+EvalString_Multi_0+'"},\n';
@ -986,7 +985,6 @@ autoText_s
/* autoText_s /* autoText_s
tooltip : autoText自动剧情文本,用户无法跳过自动剧情文本,大段剧情文本请添加“是否跳过剧情”的提示 tooltip : autoText自动剧情文本,用户无法跳过自动剧情文本,大段剧情文本请添加“是否跳过剧情”的提示
helpUrl : /_docs/#/instruction helpUrl : /_docs/#/instruction
doubleclicktext : EvalString_Multi_0
allIds : ['EvalString_1'] allIds : ['EvalString_1']
default : ["","","","","","","",3000,"用户无法跳过自动剧情文本,大段剧情文本请添加“是否跳过剧情”的提示"] default : ["","","","","","","",3000,"用户无法跳过自动剧情文本,大段剧情文本请添加“是否跳过剧情”的提示"]
EvalString_0= EvalString_0 ? (', "title": "'+EvalString_0+'"') : ''; EvalString_0= EvalString_0 ? (', "title": "'+EvalString_0+'"') : '';
@ -997,7 +995,7 @@ IntString_1= IntString_1 ? (', "y": '+IntString_1) : '';
IntString_2= IntString_2 ? (', "width": '+IntString_2) : ''; IntString_2= IntString_2 ? (', "width": '+IntString_2) : '';
IntString_3= IntString_3 ? (', "height": '+IntString_3) : ''; IntString_3= IntString_3 ? (', "height": '+IntString_3) : '';
Int_0= ', "time": '+Int_0; Int_0= ', "time": '+Int_0;
var code = '{"type": "autoText"'+EvalString_0+EvalString_1+EvalString_2+IntString_0+IntString_1+IntString_2+IntString_3+Int0+', "text": "'+EvalString_Multi_0+'},\n'; var code = '{"type": "autoText"'+EvalString_0+EvalString_1+EvalString_2+IntString_0+IntString_1+IntString_2+IntString_3+Int_0+', "text": "'+EvalString_Multi_0+'"},\n';
return code; return code;
*/; */;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1 @@
{"ratio":2,"bitmaps":["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAD6SURBVHhe7dQ9SsVAFAXg+MNTeAhaWCrWLsHGUlCwsHMXgo2NjZ31a1yBVtaCrSvQ1i24hSSegbuEBAS/Dw7M3JnqZEgHAAAAAAAAAAAAAP/NOI5rySI5GobhNDlJ9uuYqaXo9RR83Pf9U/KevGV/kxwkW+2D1FWmkmKXKfYuZf8k38lrZpeZHSaLusaU2ktOyRcp+zP5Sl6yv858t53VNaaWcrdT9mPSXvpHskrxO3XMnNpvJYW3F/+Q9XmNmVv7raT055R+n/VejZlbyt5M6VfJbdYbNWZureyUvkzOagQAAAAAAAAAAAAAAAAAAAAAAAAAAADwd3XdL135q9NaPZ6+AAAAAElFTkSuQmCC","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJ4SURBVHhe7de7alRRFMbx3DSIgqiNIBJsBUUESyutBAsLO9/CWtL4BtorlgFBRGIEEQwxMSBiMWouGo2TCyaTC0lmJjM5ey+/HVfeYPZB8P+DNefsS/WdxZ5zugAAAAAAAAAAAAAAAAAAAID/lZkdVnX7ELmkkA+C1rU3xngthHBf1xsa9+1vQmcdhK7qUdAXFPh4URSjur+r6vdt6DQP/ZDqkkL/ZlZs6jqh8WnfghzU1UcOQlclmop3fBk5KPA+hXxRYb9LiWtsujR0Oe5b0Gke+hUF/TaFLtHrh29BDgr9jEJOoReqeur2RPfTvgWdpnzTG8yAQm6oYgq8uWfWLvaD1y+vkNko3G6FPJ9CT7ZbZpVVs9m1/Ydw3bchB3X9+dTxqVLwk4tmH1T1VnjlW5CDGj11/XDq+HTgfFwye/rVbKpmNjzDx1N2Cn8jhb+qF8mRObOX381m1sPww4od8y3IQZn3KPzdogjNyorZ8xmzaXX9cjOe8y3IxcNvNtq2OV41ezFrttYMv30ZOSn8dOavqBrjC3+PnfVGvOfLyE0P4HH6qhr9Zfbmp7p/Lg74EnJT+LdbeyGk4F/PhfhgMp7yJeSm9/yTavza2HyIYwuhPTRkvb6E3NT5fQr/2cRS2HhfDfVB/Qn7EnJLf7rq/pvTq6H9uRa2fBplSOGrTixvhdrUWqj7NMqi8HsV/shsLez5FMq004qXq+th14cok879/upO+FKp2GGfQll09PSsNOLVxXq85VMoUzr7F7fDIx+iTOnNR8fP2UGOnvKl8NPx8+RTPOpTKFt6CH4LAAAAAAAAAAAAAAAAAAAAAAAAAACAf1RX1x9x4x3SPdhnTAAAAABJRU5ErkJggg==","","","","","","","","","","","","","","","","","",""],"frame_max":5,"frames":[[[0,8,32,30,100]],[[0,-16,32,50,130]],[[0,-24,40,80,150]],[[0,-48,24,90,180],[1,-8,40,100,255]],[[0,-56,24,100,200],[1,-8,24,100,255]]]}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -13,8 +13,11 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"bear.png", "bear.png",
"bg.jpg", "bg.jpg",
"brave.png", "brave.png",
"cloud.png",
"dragon.png", "dragon.png",
"fog.png",
"hero.png", "hero.png",
"sun.png",
"winskin.png" "winskin.png"
], ],
"tilesets": [ "tilesets": [

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

View File

@ -130,9 +130,9 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
"canUseItemEffect": "true" "canUseItemEffect": "true"
}, },
"sword0": { "sword0": {
"cls": "items", "cls": "equips",
"name": "破旧的剑", "name": "破旧的剑",
"text": "一把已经生锈的剑", "text": "可装备道具,记得至少留一个可装备道具,不然会构建失败。",
"equip": { "equip": {
"type": 0, "type": 0,
"animate": "sword", "animate": "sword",
@ -214,9 +214,9 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
"itemEffectTip": ",攻击+100" "itemEffectTip": ",攻击+100"
}, },
"shield0": { "shield0": {
"cls": "items", "cls": "equips",
"name": "破旧的盾", "name": "破旧的盾",
"text": "一个很破旧的铁盾", "text": "可装备道具,记得至少留一个可装备道具,不然会构建失败。",
"equip": { "equip": {
"type": 1, "type": 1,
"value": { "value": {

Binary file not shown.

View File

@ -166,20 +166,20 @@ export async function splitResource(
while (index < files.length) { while (index < files.length) {
let total = 0; let total = 0;
const start = index; const start = index;
for (let i = index; i < files.length; i++) { let i = index;
for (; i < files.length; i++) {
const file = files[i]; const file = files[i];
if (file.exceed) { if (file.exceed) {
if (i === index) i = index + 1; if (i === index) i = index + 1;
index = i;
break; break;
} else { } else {
total += file.stats.size; total += file.stats.size;
} }
if (total > limit) { if (total > limit) {
index = i;
break; break;
} }
} }
index = i;
const toZip = files.slice(start, index); const toZip = files.slice(start, index);
result.push(await compressFiles(toZip)); result.push(await compressFiles(toZip));
} }

View File

@ -10,56 +10,26 @@ type ImageIds =
| 'bear.png' | 'bear.png'
| 'bg.jpg' | 'bg.jpg'
| 'brave.png' | 'brave.png'
| 'cloud.png'
| 'dragon.png' | 'dragon.png'
| 'fog.png'
| 'hero.png' | 'hero.png'
| 'sun.png'
| 'winskin.png' | 'winskin.png'
type AnimationIds = type AnimationIds =
| 'amazed'
| 'angry'
| 'angry2'
| 'bulb'
| 'emm'
| 'explosion1'
| 'explosion2'
| 'explosion3'
| 'explosion4'
| 'fire'
| 'focus'
| 'fret'
| 'hand' | 'hand'
| 'ice'
| 'jianji'
| 'luv'
| 'magicAtk'
| 'stone'
| 'sweat'
| 'sweat2'
| 'sword' | 'sword'
| 'zone' | 'zone'
type SoundIds = type SoundIds =
| '008-System08.opus'
| '015-Jump01.opus'
| '050-Explosion03.opus'
| '051-Explosion04.opus'
| '087-Action02.opus'
| '094-Attack06.opus'
| '118-Fire02.opus'
| '119-Fire03.opus'
| '120-Ice01.opus'
| 'arrow.opus'
| 'attack.opus' | 'attack.opus'
| 'bomb.opus' | 'bomb.opus'
| 'cancel.opus' | 'cancel.opus'
| 'centerFly.opus' | 'centerFly.opus'
| 'chapter.opus'
| 'confirm.opus' | 'confirm.opus'
| 'cursor.opus' | 'cursor.opus'
| 'danger.opus'
| 'door.opus' | 'door.opus'
| 'drink.opus'
| 'electron.opus'
| 'equip.opus' | 'equip.opus'
| 'error.opus' | 'error.opus'
| 'floor.opus' | 'floor.opus'
@ -69,15 +39,10 @@ type SoundIds =
| 'jump.opus' | 'jump.opus'
| 'load.opus' | 'load.opus'
| 'open_ui.opus' | 'open_ui.opus'
| 'paper.opus'
| 'pickaxe.opus' | 'pickaxe.opus'
| 'quake.opus'
| 'recovery.opus' | 'recovery.opus'
| 'save.opus' | 'save.opus'
| 'shake.opus'
| 'shop.opus' | 'shop.opus'
| 'thunder.opus'
| 'tree.opus'
| 'zone.opus' | 'zone.opus'
type BgmIds = type BgmIds =

View File

@ -10,20 +10,19 @@ interface ItemDeclaration {
bluePotion: 'items'; bluePotion: 'items';
yellowPotion: 'items'; yellowPotion: 'items';
greenPotion: 'items'; greenPotion: 'items';
sword0: 'items'; sword0: 'equips';
sword1: 'equips'; sword1: 'items';
sword2: 'equips'; sword2: 'items';
sword3: 'items'; sword3: 'items';
sword4: 'items'; sword4: 'items';
sword5: 'items'; sword5: 'items';
shield0: 'items'; shield0: 'equips';
shield1: 'equips'; shield1: 'items';
shield2: 'equips'; shield2: 'items';
shield3: 'items'; shield3: 'items';
shield4: 'items'; shield4: 'items';
shield5: 'items'; shield5: 'items';
superPotion: 'items'; superPotion: 'items';
silverCoin: 'items';
book: 'constants'; book: 'constants';
fly: 'constants'; fly: 'constants';
coin: 'constants'; coin: 'constants';
@ -37,7 +36,7 @@ interface ItemDeclaration {
pickaxe: 'tools'; pickaxe: 'tools';
icePickaxe: 'tools'; icePickaxe: 'tools';
bomb: 'tools'; bomb: 'tools';
centerFly: 'constants'; centerFly: 'tools';
upFly: 'tools'; upFly: 'tools';
downFly: 'tools'; downFly: 'tools';
earthquake: 'tools'; earthquake: 'tools';
@ -49,150 +48,6 @@ interface ItemDeclaration {
lifeWand: 'tools'; lifeWand: 'tools';
jumpShoes: 'tools'; jumpShoes: 'tools';
skill1: 'constants'; skill1: 'constants';
wand: 'constants'; wand: 'items';
I319: 'items'; pack: 'items';
I320: 'items';
I321: 'items';
I322: 'constants';
I323: 'items';
I324: 'items';
I325: 'items';
I326: 'items';
I327: 'items';
I328: 'items';
I329: 'items';
I330: 'constants';
I376: 'items';
I377: 'items';
I378: 'items';
I379: 'items';
I380: 'items';
I381: 'items';
I382: 'items';
I383: 'items';
I384: 'items';
I385: 'items';
I386: 'items';
I387: 'items';
I388: 'items';
I389: 'items';
I390: 'items';
I391: 'items';
I392: 'items';
I393: 'items';
I394: 'items';
I395: 'items';
I396: 'items';
I397: 'items';
I398: 'items';
I399: 'items';
I400: 'items';
I401: 'items';
I402: 'items';
I403: 'items';
I404: 'items';
I405: 'items';
I406: 'items';
I407: 'items';
I408: 'items';
I409: 'items';
I410: 'items';
I411: 'items';
I412: 'items';
I413: 'items';
I414: 'items';
I415: 'items';
I416: 'items';
I417: 'items';
I418: 'items';
I419: 'items';
I420: 'items';
I421: 'items';
I422: 'items';
I423: 'items';
I424: 'items';
I425: 'items';
I426: 'items';
I427: 'items';
I428: 'items';
I429: 'items';
I430: 'items';
I431: 'items';
I432: 'items';
I433: 'items';
I434: 'items';
I435: 'items';
I436: 'items';
I437: 'items';
I438: 'items';
I439: 'items';
I440: 'items';
I441: 'items';
I442: 'items';
I443: 'items';
I444: 'items';
I445: 'items';
I446: 'items';
I447: 'items';
I448: 'items';
I449: 'items';
I450: 'items';
I451: 'items';
I452: 'items';
I453: 'items';
I454: 'items';
I455: 'items';
I456: 'items';
I457: 'items';
I458: 'items';
I459: 'items';
I460: 'items';
I461: 'items';
I462: 'items';
I463: 'items';
I464: 'items';
I465: 'items';
I466: 'items';
I467: 'items';
I468: 'items';
I469: 'items';
I470: 'items';
I471: 'items';
I472: 'items';
I473: 'items';
I474: 'items';
I475: 'items';
I476: 'items';
I477: 'items';
I478: 'items';
I479: 'items';
I480: 'items';
I481: 'items';
I482: 'items';
I483: 'items';
I484: 'items';
I485: 'items';
I486: 'items';
I487: 'items';
I488: 'items';
I489: 'items';
I490: 'items';
I491: 'items';
I558: 'constants';
I559: 'constants';
I560: 'constants';
I565: 'constants';
I574: 'items';
I575: 'equips';
I589: 'equips';
I641: 'equips';
I642: 'constants';
I662: 'equips';
I663: 'equips';
I664: 'equips';
I665: 'equips';
I694: 'items';
I695: 'items';
I696: 'items';
I697: 'items';
} }

File diff suppressed because it is too large Load Diff