feat: 新建最后一区

This commit is contained in:
unanmed 2024-10-01 10:35:27 +08:00
parent 42f611b357
commit ac3b0c0fc2
21 changed files with 331 additions and 56 deletions

View File

@ -6,6 +6,7 @@ public/project/items.js
public/project/floors/*.js
public/project/maps.js
public/project/icons.js
public/project/enemys.js
public/_server/**/*.js
script/**/*.js
public/editor.html

View File

@ -303,6 +303,12 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
"_docs": "同化范围",
"_data": "同化范围"
},
"horn": {
"_leaf": true,
"_type": "textarea",
"_docs": "战争号角",
"_data": "战争号角"
},
"specialHalo": {
"_leaf": true,
"_type": "popCheckboxSet",

View File

@ -104,7 +104,11 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"MT90",
"MT91",
"MT92",
"MT93"
"MT93",
"MT94",
"MT95",
"MT96",
"MT97"
],
"floorPartitions": [
[

View File

@ -155,7 +155,7 @@ var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 =
"E603": {"name":"极昼蝠","hp":8000,"atk":1750,"def":1000,"money":1,"exp":65,"point":0,"special":[23],"day":100},
"E605": {"name":"乾坤之卫","hp":30000,"atk":7500,"def":2000,"money":4,"exp":300,"point":0,"special":[30],"translation":[2,2]},
"E606": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E607": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E607": {"name":"呐喊之魂","hp":40000,"atk":20000,"def":4000,"money":8,"exp":800,"point":0,"special":[29,30],"specialHalo":[27],"haloRange":3,"iceCore":null,"fireCore":10,"translation":[1,0]},
"E608": {"name":"寒冰护卫","hp":20000,"atk":2750,"def":2000,"money":3,"exp":225,"point":0,"special":[]},
"E609": {"name":"具形雪人","hp":7500,"atk":2250,"def":1250,"money":2,"exp":90,"point":0,"special":[25],"melt":15},
"E610": {"name":"高冷雪人","hp":10000,"atk":2500,"def":1500,"money":2,"exp":150,"point":0,"special":[25],"melt":25},
@ -179,12 +179,12 @@ var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 =
"E666": {"name":"苍蓝之灵-视","hp":150000,"atk":8000,"def":2000,"money":10,"exp":2500,"point":0,"special":[29],"n":5,"specialHalo":[4],"haloRange":5},
"E667": {"name":"苍之蓝","hp":50000,"atk":6000,"def":2000,"money":5,"exp":500,"point":0,"special":[29],"together":25,"specialHalo":[8],"haloRange":3},
"E668": {"name":"冰封护卫","hp":30000,"atk":7000,"def":2500,"money":5,"exp":550,"point":0,"special":[29],"specialHalo":[26],"iceCore":15,"haloRange":3},
"E669": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E669": {"name":"苍蓝禁卫","hp":75000,"atk":16000,"def":8000,"money":10,"exp":1000,"point":0,"special":[33],"horn":[5,1,1]},
"E670": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E671": {"name":"圣殿骑士","hp":60000,"atk":12000,"def":4000,"money":7,"exp":750,"point":0,"special":[1],"crit":300},
"E672": {"name":"坚固骑士","hp":7500,"atk":10000,"def":0,"money":8,"exp":800,"point":0,"special":[29],"specialHalo":[3],"haloRange":2},
"E673": {"name":"苍蓝之灵-域","hp":250000,"atk":12000,"def":3000,"money":10,"exp":2500,"point":0,"special":[]},
"E674": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E674": {"name":"进攻亡灵","hp":80000,"atk":14000,"def":5000,"money":7,"exp":700,"point":0,"special":[29,30],"specialHalo":[12],"haloRange":3,"translation":[0,-1]},
"E675": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E676": {"name":"冲锋骷髅","hp":50000,"atk":8000,"def":4000,"money":6,"exp":500,"point":0,"special":[12]},
"E677": {"name":"骷髅巫师","hp":150000,"atk":2000,"def":5000,"money":5,"exp":600,"point":0,"special":[13],"crit":null},
@ -195,7 +195,7 @@ var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 =
"E682": {"name":"苍蓝聚形","hp":25000,"atk":7000,"def":4000,"money":5,"exp":400,"point":0,"special":[8],"together":20},
"E683": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E684": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E685": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E685": {"name":"守卫队长","hp":100000,"atk":14000,"def":4000,"money":10,"exp":1000,"point":0,"special":[28,29],"specialHalo":[32],"paleShield":20,"haloRange":3,"assimilateRange":2},
"E686": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E687": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E688": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
@ -203,5 +203,13 @@ var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 =
"E690": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E691": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E692": {"name":"苍蓝之灵-圣","hp":150000,"atk":15000,"def":5000,"money":20,"exp":5000,"point":0,"special":[4,28],"paleShield":25},
"E693": {"name":"苍蓝之灵-战","hp":250000,"atk":25000,"def":6000,"money":20,"exp":5000,"point":0,"special":[32],"assimilateRange":6}
"E693": {"name":"苍蓝之灵-战","hp":250000,"atk":25000,"def":6000,"money":20,"exp":5000,"point":0,"special":[32],"assimilateRange":6},
"E698": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E699": {"name":"苍蓝朝拜者","hp":80000,"atk":12000,"def":6000,"money":9,"exp":900,"point":0,"special":[1,30],"crit":400,"translation":[0,1]},
"E700": {"name":"亡语之魂","hp":75000,"atk":10000,"def":9000,"money":8,"exp":800,"point":0,"special":[29,30],"haloRange":3,"specialHalo":[25],"melt":15,"translation":[-1,0]},
"E701": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E702": {"name":"防守之魂","hp":10000,"atk":12000,"def":4000,"money":0,"exp":0,"point":0,"special":[3,29,30],"specialHalo":[26],"iceCore":10,"translation":[1,0],"haloRange":3},
"E703": {"name":"新敌人","hp":40000,"atk":16000,"def":6000,"money":8,"exp":800,"point":0,"special":[29,30],"specialHalo":[27],"haloRange":3,"iceCore":null,"fireCore":10,"translation":[1,0],"displayIdInBook":null},
"E704": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"E705": {"name":"新敌人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]}
}

View File

@ -35,6 +35,13 @@ main.floors.MT72=
7,
14
]
},
"7,7": {
"floorId": "MT94",
"loc": [
7,
7
]
}
},
"beforeBattle": {},

View File

@ -0,0 +1,73 @@
main.floors.MT94=
{
"floorId": "MT94",
"title": "苍蓝之殿-中",
"name": "94",
"width": 15,
"height": 15,
"canFlyTo": true,
"canFlyFrom": true,
"canUseQuickShop": true,
"cannotViewMap": false,
"images": [],
"ratio": 8,
"defaultGround": "T650",
"bgm": "palaceNorth.mp3",
"firstArrive": [],
"eachArrive": [],
"parallelDo": "",
"events": {
"7,2": [
"这里是漏怪检测,会检测\r[gold]第二章所有\r[]区域是否有遗漏怪物",
{
"type": "function",
"function": "function(){\nconst enemy = Mota.Plugin.require('remainEnemy_g').getRemainEnemyString(core.floorIds.slice(40, 107));\nif (enemy.length === 0) {\n\tcore.insertAction(['当前无剩余怪物!', { \"type\": \"hide\", \"remove\": true }, ]);\n} else {\n\tcore.insertAction(enemy);\n}\n}"
}
]
},
"changeFloor": {
"7,7": {
"floorId": "MT72",
"loc": [
7,
7
]
}
},
"beforeBattle": {},
"afterBattle": {},
"afterGetItem": {},
"afterOpenDoor": {},
"autoEvent": {},
"cannotMove": {},
"cannotMoveIn": {},
"map": [
[648,648,648,648,648,648,648, 91,648,648,648,648,648,648,648],
[648, 0, 0, 0, 0,648,466,468,467,648, 0, 0, 0, 0,648],
[648, 0,648,648,648,648,648,516,648,648, 0, 0,648, 0,648],
[648, 0, 0, 0, 0, 0, 0, 0, 0,648,648,648,648, 0,648],
[648,648,648,648, 0,648, 0, 0, 0, 0, 0, 0,648, 0,648],
[648, 0, 0,648, 0,648,648, 0,648,648, 0, 0,648, 0,648],
[648, 0,648,648, 0,648,487, 0,487,648, 0,648,648, 0,648],
[ 92, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 94],
[648, 0,648,648,648,648,487, 0,487,648, 0,648,648,648,648],
[648, 0, 0, 0, 0,648,648, 0,648,648, 0, 0, 0, 0,648],
[648,648,648,648, 0,648, 0, 0, 0,648,648,648,648, 0,648],
[648, 0, 0, 0, 0,648, 0,648, 0, 0, 0, 0,648, 0,648],
[648, 0,648,648,648,648, 0,648,648,648, 0,648,648, 0,648],
[648, 0, 0, 0, 0, 0, 0, 0, 0,648, 0, 0, 0, 0,648],
[648,648,648,648,648,648,648, 93,648,648,648,648,648,648,648]
],
"bgmap": [
],
"fgmap": [
],
"bg2map": [
],
"fg2map": [
]
}

View File

@ -0,0 +1,45 @@
main.floors.MT95=
{
"floorId": "MT95",
"title": "苍蓝之殿-中",
"name": "95",
"width": 15,
"height": 15,
"canFlyTo": true,
"canFlyFrom": true,
"canUseQuickShop": true,
"cannotViewMap": false,
"images": [],
"ratio": 8,
"defaultGround": "T650",
"bgm": "palaceNorth.mp3",
"firstArrive": [],
"eachArrive": [],
"parallelDo": "",
"events": {},
"changeFloor": {},
"beforeBattle": {},
"afterBattle": {},
"afterGetItem": {},
"afterOpenDoor": {},
"autoEvent": {},
"cannotMove": {},
"cannotMoveIn": {},
"map": [
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
],
}

View File

@ -0,0 +1,45 @@
main.floors.MT96=
{
"floorId": "MT96",
"title": "苍蓝之殿-中",
"name": "96",
"width": 15,
"height": 15,
"canFlyTo": true,
"canFlyFrom": true,
"canUseQuickShop": true,
"cannotViewMap": false,
"images": [],
"ratio": 8,
"defaultGround": "T650",
"bgm": "palaceNorth.mp3",
"firstArrive": [],
"eachArrive": [],
"parallelDo": "",
"events": {},
"changeFloor": {},
"beforeBattle": {},
"afterBattle": {},
"afterGetItem": {},
"afterOpenDoor": {},
"autoEvent": {},
"cannotMove": {},
"cannotMoveIn": {},
"map": [
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
],
}

View File

@ -0,0 +1,45 @@
main.floors.MT97=
{
"floorId": "MT97",
"title": "苍蓝之殿-中",
"name": "97",
"width": 15,
"height": 15,
"canFlyTo": true,
"canFlyFrom": true,
"canUseQuickShop": true,
"cannotViewMap": false,
"images": [],
"ratio": 8,
"defaultGround": "T650",
"bgm": "palaceNorth.mp3",
"firstArrive": [],
"eachArrive": [],
"parallelDo": "",
"events": {},
"changeFloor": {},
"beforeBattle": {},
"afterBattle": {},
"afterGetItem": {},
"afterOpenDoor": {},
"autoEvent": {},
"cannotMove": {},
"cannotMoveIn": {},
"map": [
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
],
}

View File

@ -451,7 +451,15 @@ var icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 =
"E690": 196,
"E691": 197,
"E692": 198,
"E693": 199
"E693": 199,
"E698": 200,
"E699": 201,
"E700": 202,
"E701": 203,
"E702": 204,
"E703": 205,
"E704": 206,
"E705": 207
},
"enemy48": {
"angel": 0,

View File

@ -626,6 +626,14 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e =
"695": {"cls":"items","id":"I695"},
"696": {"cls":"items","id":"I696"},
"697": {"cls":"items","id":"I697"},
"698": {"cls":"enemys","id":"E698"},
"699": {"cls":"enemys","id":"E699"},
"700": {"cls":"enemys","id":"E700"},
"701": {"cls":"enemys","id":"E701"},
"702": {"cls":"enemys","id":"E702"},
"703": {"cls":"enemys","id":"E703"},
"704": {"cls":"enemys","id":"E704"},
"705": {"cls":"enemys","id":"E705"},
"20032": {"cls":"tileset","id":"X20032","cannotOut":["up","left"],"cannotIn":["up","left"]},
"20033": {"cls":"tileset","id":"X20033","cannotOut":["up"],"cannotIn":["up"]},
"20034": {"cls":"tileset","id":"X20034","cannotOut":["up","right"],"cannotIn":["up","right"]},

Binary file not shown.

Before

Width:  |  Height:  |  Size: 223 KiB

After

Width:  |  Height:  |  Size: 234 KiB

View File

@ -77,7 +77,7 @@ const hook = Mota.require('var', 'hook');
hook.once('reset', () => {
Shadow.init();
addLightFromBlock(
core.floorIds.slice(61, 70).concat(core.floorIds.slice(72, 81)).concat(core.floorIds.slice(85, 103)),
core.floorIds.slice(61, 70).concat(core.floorIds.slice(72, 81)).concat(core.floorIds.slice(85, 107)),
103,
{ decay: 50, r: 300, color: [0.9333, 0.6, 0.333, 0.3] },
{ background: [0, 0, 0, 0.2] },
@ -89,48 +89,12 @@ hook.once('reset', () => {
{ decay: 20, r: 150, color: [0.9333, 0.6, 0.333, 0.3], noShelter: true },
{ background: [0, 0, 0, 0.3] }
);
// Shadow.mount();
// 勇士身上的光源
// Mota.rewrite(core.control, 'drawHero', 'add', () => {
// if (core.getFlag('__heroOpacity__') !== 0) {
// const shadow = Shadow.now();
// if (shadow) {
// shadow.followHero.forEach(v => {
// shadow.modifyLight(v, {
// x: core.status.heroCenter.px,
// y: core.status.heroCenter.py + 8
// });
// });
// if (shadow.followHero.size > 0) shadow.requestRefresh();
// }
// }
// });
// 更新地形数据
// Mota.rewrite(core.maps, 'removeBlock', 'add', success => {
// if (success && !main.replayChecking) {
// Shadow.update(true);
// }
// return success;
// });
// Mota.rewrite(core.maps, 'setBlock', 'add', () => {
// if (!main.replayChecking) {
// Shadow.update(true);
// }
// });
Mota.rewrite(core.control, 'loadData', 'add', () => {
if (!main.replayChecking) {
Shadow.update(true);
LayerShadowExtends.shadowList.forEach(v => v.update());
}
});
// Mota.require('var', 'hook').on('changingFloor', (floorId) => {
// if (!main.replayChecking) {
// Shadow.clearBuffer();
// Shadow.update();
// setCanvasFilterByFloorId(floorId);
// }
// })
});
hook.on('reset', () => {
Shadow.update(true);
@ -1015,7 +979,6 @@ export class Shadow {
*/
static clearBuffer() {
const gl = this.gl;
const canvas = this.canvas;
gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer.depth.position);
gl.bufferData(gl.ARRAY_BUFFER, 0, gl.STATIC_DRAW);
@ -1037,11 +1000,6 @@ export class Shadow {
static update(nocache: boolean = false) {
const floor = core.status.floorId;
this.map[floor]?.requestRefresh(nocache);
if (!this.map[floor]) {
this.canvas.style.display = 'none';
} else {
this.canvas.style.display = 'block';
}
}
static now() {
@ -1348,8 +1306,10 @@ export class LayerShadowExtends implements ILayerRenderExtends {
this.sprite = new Sprite('static', false);
this.sprite.setHD(true);
this.sprite.size(layer.width, layer.height);
this.sprite.setRenderFn((canvas, transform) => {
canvas.ctx.drawImage(Shadow.canvas, 0, 0, layer.width, layer.height);
this.sprite.setRenderFn((canvas, transform) => {
if (Shadow.map[core.status.floorId]) {
canvas.ctx.drawImage(Shadow.canvas, 0, 0, layer.width, layer.height);
}
});
layer.appendChild(this.sprite);

View File

@ -365,6 +365,18 @@ export class Damage extends Sprite<EDamageEvent> {
};
block.add(dam4);
}
if (enemy.col && real.special.has(33)) {
const dam5: DamageRenderable = {
align: 'right',
baseline: 'top',
text: enemy.col.list.size.toString(),
color: '#fff866',
x: x * this.cellSize + this.cellSize - 1,
y: y * this.cellSize + 2,
strokeWidth: 3
};
block.add(dam5);
}
}
/**

View File

@ -74,7 +74,7 @@ export const haloSpecials: Set<number> = new Set([
]);
/** 不可被同化的属性 */
export const unassimilatable: Set<number> = new Set(haloSpecials);
unassimilatable.add(8).add(30);
unassimilatable.add(8).add(30).add(33);
/** 特殊属性对应 */
export const specialValue: Map<number, SelectKey<Enemy, number | undefined>[]> =
new Map();
@ -95,7 +95,8 @@ specialValue
.set(26, ['iceCore'])
.set(27, ['fireCore'])
.set(28, ['paleShield'])
.set(31, ['hpHalo']);
.set(31, ['hpHalo'])
.set(32, ['assimilateRange']);
interface EnemyCollectionEvent {
extract: [];
@ -365,6 +366,14 @@ export class DamageEnemy<T extends EnemyIds = EnemyIds> {
// 此时已经inject光环因此直接计算真实属性
const info = this.info;
if (info.special.has(33)) {
const count = this.col?.list.size ?? 0;
const [hp, atk, def] = this.enemy.horn ?? [0, 0, 0];
info.hpBuff_ += hp * count;
info.atkBuff_ += atk * count;
info.defBuff_ += def * count;
}
info.atk = Math.floor(info.atk * (info.atkBuff_ / 100 + 1));
info.def = Math.floor(info.def * (info.defBuff_ / 100 + 1));
info.hp = Math.floor(info.hp * (info.hpBuff_ / 100 + 1));

View File

@ -262,5 +262,19 @@ export const specials: SpecialDeclaration[] = [
`怪物会获得自身周围方形${enemy.assimilateRange}格范围内怪物的特殊属性(光环类属性除外),` +
`特殊属性数值间为${enemy.specialMultiply ? '乘算' : '加算'}关系`,
color: '#ffd366'
},
{
code: 33,
name: '战争号角',
desc: enemy => {
const [hp, atk, def] = enemy.horn ?? [];
let str = '地图上每存在一个怪物(包括自身),自身';
if (hp) str += `生命值增加${hp}%`;
if (atk) str += `攻击增加${atk}%`;
if (def) str += `防御增加${def}%`;
str += '线性叠加';
return str;
},
color: '#fff866'
}
];

View File

@ -13,9 +13,9 @@ function getCanvasFilterByFloorId(floorId: FloorIds = core.status.floorId) {
Mota.require('var', 'loading').once('coreInit', () => {
filterMap.push(
[['MT50', 'MT60', 'MT61'], 'brightness(80%)contrast(120%)'], // 童心佬的滤镜(
[['MT50', 'MT60', 'MT61'], 'contrast(120%)'], // 童心佬的滤镜(
[
core.floorIds.slice(61, 70).concat(core.floorIds.slice(72)),
core.floorIds.slice(61, 70).concat(core.floorIds.slice(72, 107)),
'contrast(120%)'
] // 童心佬的滤镜(
);

8
src/source/cls.d.ts vendored
View File

@ -625,6 +625,14 @@ interface IdToCls {
I695: 'items';
I696: 'items';
I697: 'items';
E698: 'enemys';
E699: 'enemys';
E700: 'enemys';
E701: 'enemys';
E702: 'enemys';
E703: 'enemys';
E704: 'enemys';
E705: 'enemys';
X20032: 'tileset';
X20033: 'tileset';
X20034: 'tileset';

View File

@ -103,6 +103,10 @@ type FloorIds =
| 'MT91'
| 'MT92'
| 'MT93'
| 'MT94'
| 'MT95'
| 'MT96'
| 'MT97'
type ImageIds =
| 'IQ.png'

16
src/source/maps.d.ts vendored
View File

@ -625,6 +625,14 @@ interface IdToNumber {
I695: 695;
I696: 696;
I697: 697;
E698: 698;
E699: 699;
E700: 700;
E701: 701;
E702: 702;
E703: 703;
E704: 704;
E705: 705;
X20032: 20032;
X20033: 20033;
X20034: 20034;
@ -1335,6 +1343,14 @@ interface NumberToId {
695: 'I695';
696: 'I696';
697: 'I697';
698: 'E698';
699: 'E699';
700: 'E700';
701: 'E701';
702: 'E702';
703: 'E703';
704: 'E704';
705: 'E705';
20032: 'X20032';
20033: 'X20033';
20034: 'X20034';

View File

@ -91,6 +91,8 @@ type Enemy<I extends EnemyIds = EnemyIds> = {
specialHalo?: number[];
translation?: [number, number];
/** 战争号角 */
horn?: [number, number, number];
/** 大怪物绑定贴图 */
bigImage?: ImageIds;