From ac3b0c0fc2b0bc4be13655a6795f215e8a5e33a7 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Tue, 1 Oct 2024 10:35:27 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=BB=BA=E6=9C=80=E5=90=8E?= =?UTF-8?q?=E4=B8=80=E5=8C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .prettierignore | 1 + public/_server/table/comment.js | 6 +++ public/project/data.js | 6 ++- public/project/enemys.js | 18 +++++-- public/project/floors/MT72.js | 7 +++ public/project/floors/MT94.js | 73 ++++++++++++++++++++++++++++ public/project/floors/MT95.js | 45 +++++++++++++++++ public/project/floors/MT96.js | 45 +++++++++++++++++ public/project/floors/MT97.js | 45 +++++++++++++++++ public/project/icons.js | 10 +++- public/project/maps.js | 8 +++ public/project/materials/enemys.png | Bin 228736 -> 239330 bytes src/core/fx/shadow.ts | 50 ++----------------- src/core/render/preset/damage.ts | 12 +++++ src/game/enemy/damage.ts | 13 ++++- src/game/enemy/special.ts | 14 ++++++ src/plugin/fx/gameCanvas.ts | 4 +- src/source/cls.d.ts | 8 +++ src/source/data.d.ts | 4 ++ src/source/maps.d.ts | 16 ++++++ src/types/enemy.d.ts | 2 + 21 files changed, 331 insertions(+), 56 deletions(-) create mode 100644 public/project/floors/MT94.js create mode 100644 public/project/floors/MT95.js create mode 100644 public/project/floors/MT96.js create mode 100644 public/project/floors/MT97.js diff --git a/.prettierignore b/.prettierignore index 38d01af..d7dd646 100644 --- a/.prettierignore +++ b/.prettierignore @@ -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 diff --git a/public/_server/table/comment.js b/public/_server/table/comment.js index 3d5a2e8..a2e36f0 100644 --- a/public/_server/table/comment.js +++ b/public/_server/table/comment.js @@ -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", diff --git a/public/project/data.js b/public/project/data.js index d432f77..436108d 100644 --- a/public/project/data.js +++ b/public/project/data.js @@ -104,7 +104,11 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = "MT90", "MT91", "MT92", - "MT93" + "MT93", + "MT94", + "MT95", + "MT96", + "MT97" ], "floorPartitions": [ [ diff --git a/public/project/enemys.js b/public/project/enemys.js index 9dad46c..f0409a3 100644 --- a/public/project/enemys.js +++ b/public/project/enemys.js @@ -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":[]} } \ No newline at end of file diff --git a/public/project/floors/MT72.js b/public/project/floors/MT72.js index 273c0af..d642ec2 100644 --- a/public/project/floors/MT72.js +++ b/public/project/floors/MT72.js @@ -35,6 +35,13 @@ main.floors.MT72= 7, 14 ] + }, + "7,7": { + "floorId": "MT94", + "loc": [ + 7, + 7 + ] } }, "beforeBattle": {}, diff --git a/public/project/floors/MT94.js b/public/project/floors/MT94.js new file mode 100644 index 0000000..1ebdb8a --- /dev/null +++ b/public/project/floors/MT94.js @@ -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": [ + +] +} \ No newline at end of file diff --git a/public/project/floors/MT95.js b/public/project/floors/MT95.js new file mode 100644 index 0000000..dee9edc --- /dev/null +++ b/public/project/floors/MT95.js @@ -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] +], +} \ No newline at end of file diff --git a/public/project/floors/MT96.js b/public/project/floors/MT96.js new file mode 100644 index 0000000..2d87837 --- /dev/null +++ b/public/project/floors/MT96.js @@ -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] +], +} \ No newline at end of file diff --git a/public/project/floors/MT97.js b/public/project/floors/MT97.js new file mode 100644 index 0000000..d3f926e --- /dev/null +++ b/public/project/floors/MT97.js @@ -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] +], +} \ No newline at end of file diff --git a/public/project/icons.js b/public/project/icons.js index a39dc0e..c840cd2 100644 --- a/public/project/icons.js +++ b/public/project/icons.js @@ -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, diff --git a/public/project/maps.js b/public/project/maps.js index 2a6239d..037ffa3 100644 --- a/public/project/maps.js +++ b/public/project/maps.js @@ -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"]}, diff --git a/public/project/materials/enemys.png b/public/project/materials/enemys.png index 4c5417b11694a93911acaee81306e10a203c953c..a1e0f098576d85d5e13e50e067de03a916a16c06 100644 GIT binary patch delta 23803 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 { 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); diff --git a/src/core/render/preset/damage.ts b/src/core/render/preset/damage.ts index d54ecdf..d73e959 100644 --- a/src/core/render/preset/damage.ts +++ b/src/core/render/preset/damage.ts @@ -365,6 +365,18 @@ export class Damage extends Sprite { }; 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); + } } /** diff --git a/src/game/enemy/damage.ts b/src/game/enemy/damage.ts index 063fda8..7051161 100644 --- a/src/game/enemy/damage.ts +++ b/src/game/enemy/damage.ts @@ -74,7 +74,7 @@ export const haloSpecials: Set = new Set([ ]); /** 不可被同化的属性 */ export const unassimilatable: Set = new Set(haloSpecials); -unassimilatable.add(8).add(30); +unassimilatable.add(8).add(30).add(33); /** 特殊属性对应 */ export const specialValue: Map[]> = 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 { // 此时已经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)); diff --git a/src/game/enemy/special.ts b/src/game/enemy/special.ts index d31feca..d52627c 100644 --- a/src/game/enemy/special.ts +++ b/src/game/enemy/special.ts @@ -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' } ]; diff --git a/src/plugin/fx/gameCanvas.ts b/src/plugin/fx/gameCanvas.ts index 8e1ae48..71837ea 100644 --- a/src/plugin/fx/gameCanvas.ts +++ b/src/plugin/fx/gameCanvas.ts @@ -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%)' ] // 童心佬的滤镜( ); diff --git a/src/source/cls.d.ts b/src/source/cls.d.ts index 3fb1080..2765531 100644 --- a/src/source/cls.d.ts +++ b/src/source/cls.d.ts @@ -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'; diff --git a/src/source/data.d.ts b/src/source/data.d.ts index c31d280..810ffc5 100644 --- a/src/source/data.d.ts +++ b/src/source/data.d.ts @@ -103,6 +103,10 @@ type FloorIds = | 'MT91' | 'MT92' | 'MT93' + | 'MT94' + | 'MT95' + | 'MT96' + | 'MT97' type ImageIds = | 'IQ.png' diff --git a/src/source/maps.d.ts b/src/source/maps.d.ts index 6cac3ac..f65fc26 100644 --- a/src/source/maps.d.ts +++ b/src/source/maps.d.ts @@ -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'; diff --git a/src/types/enemy.d.ts b/src/types/enemy.d.ts index 0291243..64df847 100644 --- a/src/types/enemy.d.ts +++ b/src/types/enemy.d.ts @@ -91,6 +91,8 @@ type Enemy = { specialHalo?: number[]; translation?: [number, number]; + /** 战争号角 */ + horn?: [number, number, number]; /** 大怪物绑定贴图 */ bigImage?: ImageIds;