+
+
diff --git a/main.js b/main.js
index 05f0435..0295c32 100644
--- a/main.js
+++ b/main.js
@@ -276,7 +276,7 @@ main.prototype.init = function (mode, callback) {
coreData[t] = main[t];
});
main.core.init(coreData, callback);
- main.core.resize();
+ core.resize();
// 自动放缩最大化
if (!main.replayChecking) {
if (core.getLocalStorage("autoScale") == null) {
diff --git a/project/data.js b/project/data.js
index 2d71931..5326837 100644
--- a/project/data.js
+++ b/project/data.js
@@ -35,10 +35,15 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"guangchang3",
"guangchang4",
"guangchang6",
- "guangchang5"
+ "guangchang5",
+ "jiaocheng01",
+ "jiaocheng02"
],
"floorPartitions": [],
"images": [
+ "005-Attack03.webp",
+ "012-Heal01.webp",
+ "015-Fire01.webp",
"HPGaugeEnemy_A.webp",
"HPGaugeEnemy_B.webp",
"LOGO.webp",
@@ -455,6 +460,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"r.webp",
"sound.webp",
"status.webp",
+ "statusBackground.webp",
"suiji.webp",
"tati_020101.webp",
"tati_020101a.webp",
@@ -786,6 +792,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"tati_120128.webp",
"tati_120131.webp",
"tati_120132.webp",
+ "tati_310101.webp",
"tati_340101.webp",
"tati_340101a.webp",
"tati_340101y.webp",
@@ -941,6 +948,143 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"aiy020000160.opus",
"aiy020000170.opus",
"aiy020000180.opus",
+ "aiy020000190.ogg",
+ "aiy020000200.ogg",
+ "aiy020000210.ogg",
+ "aiy020000220.ogg",
+ "aiy020000230.ogg",
+ "aiy020000240.ogg",
+ "aiy020000250.ogg",
+ "aiy020000260.ogg",
+ "aiy020000270.ogg",
+ "aiy020000280.ogg",
+ "aiy020000290.ogg",
+ "aiy020000300.ogg",
+ "aiy020000310.ogg",
+ "aiy020000320.ogg",
+ "aiy020000330.ogg",
+ "aiy020000340.ogg",
+ "aiy020000350.ogg",
+ "aiy020000360.ogg",
+ "aiy020000370.ogg",
+ "aiy030000010.ogg",
+ "aiy030000020.ogg",
+ "aiy030000030.ogg",
+ "aiy030000050.ogg",
+ "aiy030000060.ogg",
+ "aiy030000070.ogg",
+ "aiy030000080.ogg",
+ "aiy030000090.ogg",
+ "aiy030000100.ogg",
+ "aiy030000110.ogg",
+ "aiy030000120.ogg",
+ "aiy030000130.ogg",
+ "aiy050000010.ogg",
+ "aiy050000020.ogg",
+ "aiy050000030.ogg",
+ "aiy050000040.ogg",
+ "aiy050000050.ogg",
+ "aiy050000060.ogg",
+ "aiy050000070.ogg",
+ "aiy050000080.ogg",
+ "aiy050000090.ogg",
+ "aiy050000100.ogg",
+ "aiy050000110.ogg",
+ "aiy050000120.ogg",
+ "aiy120000020.ogg",
+ "aiy120000030.ogg",
+ "aiy120000040.ogg",
+ "aiy120000050.ogg",
+ "aiy120000060.ogg",
+ "aiy120000070.ogg",
+ "aiy120000080.ogg",
+ "aiy120000090.ogg",
+ "aiy120000100.ogg",
+ "aiy120000110.ogg",
+ "aiy120000120.ogg",
+ "aiy120000130.ogg",
+ "aiy120000140.ogg",
+ "aiy120000150.ogg",
+ "aiy120000160.ogg",
+ "aiy120000170.ogg",
+ "aiy120000180.ogg",
+ "aiy120000190.ogg",
+ "aiy120000200.ogg",
+ "aiy120000210.ogg",
+ "aiy120000220.ogg",
+ "aiy120000230.ogg",
+ "aiy120000240.ogg",
+ "aiy120000250.ogg",
+ "aiy120000260.ogg",
+ "aiy120000270.ogg",
+ "aiy120000280.ogg",
+ "aiy120000290.ogg",
+ "aiy120000300.ogg",
+ "aiy120000310.ogg",
+ "aiy120000320.ogg",
+ "aiy120000330.ogg",
+ "aiy120000340.ogg",
+ "aiy120000350.ogg",
+ "aiy120000360.ogg",
+ "aiy120000370.ogg",
+ "aiy120000380.ogg",
+ "aiy120000390.ogg",
+ "aiy120000400.ogg",
+ "aiy120000410.ogg",
+ "aiy120000420.ogg",
+ "aiy120000430.ogg",
+ "aiy120000440.ogg",
+ "aiy120000450.ogg",
+ "aiy120000460.ogg",
+ "aiy120000470.ogg",
+ "aiy120000480.ogg",
+ "aiy120000490.ogg",
+ "aiy120000500.ogg",
+ "aiy120000510.ogg",
+ "aiy120000520.ogg",
+ "aiy120000530.ogg",
+ "aiy120000540.ogg",
+ "aiy120000550.ogg",
+ "aiy120000560.ogg",
+ "aiy120000570.ogg",
+ "aiy120000580.ogg",
+ "aiy120000590.ogg",
+ "aiy120000600.ogg",
+ "aiy120000610.ogg",
+ "aiy120000620.ogg",
+ "aiy120000630.ogg",
+ "aiy120000640.ogg",
+ "aiy120000650.ogg",
+ "aiy120000670.ogg",
+ "aiy120000680.ogg",
+ "aiy120000690.ogg",
+ "aiy130000010.ogg",
+ "aiy130000020.ogg",
+ "aiy150000010.ogg",
+ "aiy150000020.ogg",
+ "aiy150000030.ogg",
+ "aiy150000040.ogg",
+ "aiy150000050.ogg",
+ "aiy150000060.ogg",
+ "aiy150000070.ogg",
+ "aiy150000080.ogg",
+ "aiy150000090.ogg",
+ "aiy150000100.ogg",
+ "aiy150000110.ogg",
+ "aiy150000120.ogg",
+ "aiy150000130.ogg",
+ "aiy150000140.ogg",
+ "aiy150000150.ogg",
+ "aiy150000160.ogg",
+ "aiy150000170.ogg",
+ "aiy150000180.ogg",
+ "aiy150000190.ogg",
+ "aiy150000200.ogg",
+ "aiy150000210.ogg",
+ "aiy150000220.ogg",
+ "aiy150000230.ogg",
+ "aiy150000240.ogg",
+ "aiy150000250.ogg",
"aiy310000010.opus",
"aiy310000020.opus",
"aiy310000030.opus",
@@ -970,6 +1114,170 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"aiy310000280.opus",
"aiy310000290.opus",
"aiy310000300.opus",
+ "aiy310000310.ogg",
+ "aiy310000320.ogg",
+ "aiy310000330.ogg",
+ "aiy310000340.ogg",
+ "aiy310000350.ogg",
+ "aiy310000360.ogg",
+ "aiy310000370.ogg",
+ "aiy310000380.ogg",
+ "aiy310000390.ogg",
+ "aiy310000400.ogg",
+ "aiy310000410.ogg",
+ "aiy310000420.ogg",
+ "aiy310000430.ogg",
+ "aiy310000440.ogg",
+ "aiy310000450.ogg",
+ "aiy310000460.ogg",
+ "aiy310000470.ogg",
+ "aiy310000480.ogg",
+ "aiy310000490.ogg",
+ "aiy310000510.ogg",
+ "aiy310000520.ogg",
+ "aiy310000530.ogg",
+ "aiy310000540.ogg",
+ "aiy310000550.ogg",
+ "aiy310000560.ogg",
+ "aiy310000570.ogg",
+ "aiy310000580.ogg",
+ "aiy310000590.ogg",
+ "aiy310000600.ogg",
+ "aiy310000610.ogg",
+ "aiy310000620.ogg",
+ "aiy310000630.ogg",
+ "aiy310000640.ogg",
+ "aiy310000650.ogg",
+ "aiy310000660.ogg",
+ "aiy310000670.ogg",
+ "aiy310000680.ogg",
+ "aiy310000690.ogg",
+ "aiy310000700.ogg",
+ "aiy310000710.ogg",
+ "aiy310000720.ogg",
+ "aiy310000730.ogg",
+ "aiy310000740.ogg",
+ "aiy310000750.ogg",
+ "aiy310000760.ogg",
+ "aiy310000770.ogg",
+ "aiy310000780.ogg",
+ "aiy310000790.ogg",
+ "aiy310000800.ogg",
+ "aiy310000810.ogg",
+ "aiy310000820.ogg",
+ "aiy310000830.ogg",
+ "aiy310000840.ogg",
+ "aiy310000850.ogg",
+ "aiy310000860.ogg",
+ "aiy310000870.ogg",
+ "aiy310000880.ogg",
+ "aiy310000890.ogg",
+ "aiy310000900.ogg",
+ "aiy310000910.ogg",
+ "aiy310000920.ogg",
+ "aiy310000930.ogg",
+ "aiy310000940.ogg",
+ "aiy310000950.ogg",
+ "aiy310000960.ogg",
+ "aiy310000970.ogg",
+ "aiy310000980.ogg",
+ "aiy310000990.ogg",
+ "aiy310001000.ogg",
+ "aiy310001010.ogg",
+ "aiy310001027.ogg",
+ "aiy310001030.ogg",
+ "aiy310001040.ogg",
+ "aiy310001050.ogg",
+ "aiy310001060.ogg",
+ "aiy310001070.ogg",
+ "aiy310001080.ogg",
+ "aiy310001090.ogg",
+ "aiy310001100.ogg",
+ "aiy310001110.ogg",
+ "aiy310001120.ogg",
+ "aiy310001130.ogg",
+ "aiy310001140.ogg",
+ "aiy310001150.ogg",
+ "aiy310001160.ogg",
+ "aiy310001170.ogg",
+ "aiy310001180.ogg",
+ "aiy310001190.ogg",
+ "aiy310001200.ogg",
+ "aiy310001210.ogg",
+ "aiy310001220.ogg",
+ "aiy310001230.ogg",
+ "aiy310001240.ogg",
+ "aiy310001250.ogg",
+ "aiy310001260.ogg",
+ "aiy310001270.ogg",
+ "aiy310001280.ogg",
+ "aiy310001290.ogg",
+ "aiy310001300.ogg",
+ "aiy310001310.ogg",
+ "aiy310001320.ogg",
+ "aiy310001330.ogg",
+ "aiy310001340.ogg",
+ "aiy310001350.ogg",
+ "aiy310001360.ogg",
+ "aiy310001370.ogg",
+ "aiy310001380.ogg",
+ "aiy310001390.ogg",
+ "aiy320000010.ogg",
+ "aiy320000020.ogg",
+ "aiy320000030.ogg",
+ "aiy320000040.ogg",
+ "aiy320000050.ogg",
+ "aiy320000060.ogg",
+ "aiy320000070.ogg",
+ "aiy320000080.ogg",
+ "aiy320000090.ogg",
+ "aiy320000100.ogg",
+ "aiy320000110.ogg",
+ "aiy320000120.ogg",
+ "aiy320000135.ogg",
+ "aiy320000140.ogg",
+ "aiy340000010.ogg",
+ "aiy340000020.ogg",
+ "aiy340000030.ogg",
+ "aiy340000040.ogg",
+ "aiy340000050.ogg",
+ "aiy340000060.ogg",
+ "aiy340000070.ogg",
+ "aiy340000080.ogg",
+ "aiy340000090.ogg",
+ "aiy340000100.ogg",
+ "aiy340000110.ogg",
+ "aiy340000120.ogg",
+ "aiy340000140.ogg",
+ "aiy340000150.ogg",
+ "aiy340000160.ogg",
+ "aiy340000170.ogg",
+ "aiy340000180.ogg",
+ "aiy340000190.ogg",
+ "aiy340000200.ogg",
+ "aiy340000210.ogg",
+ "aiy340000220.ogg",
+ "aiy340000230.ogg",
+ "aiy340000240.ogg",
+ "aiy340000250.ogg",
+ "aiy340000260.ogg",
+ "aiy340000270.ogg",
+ "aiy340000280.ogg",
+ "aiy340000290.ogg",
+ "aiy340000300.ogg",
+ "aiy340000310.ogg",
+ "aiy340000320.ogg",
+ "aiy340000330.ogg",
+ "aiy340000340.ogg",
+ "aiy340000350.ogg",
+ "aiy340000360.ogg",
+ "aiy340000370.ogg",
+ "aiy340000380.ogg",
+ "aiy340000390.ogg",
+ "aiy340000400.ogg",
+ "aiy340000410.ogg",
+ "aiy340000420.ogg",
+ "aiy340000430.ogg",
"aiy350000010.opus",
"aiy350000020.opus",
"aiy350000030.opus",
@@ -993,6 +1301,52 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"aiy350000210.opus",
"aiy350000220.opus",
"aiy350000230.opus",
+ "aiy350000240.ogg",
+ "aiy350000250.ogg",
+ "aiy350000260.ogg",
+ "aiy430000010.ogg",
+ "aiy430000020.ogg",
+ "aiy430000030.ogg",
+ "aiy430000040.ogg",
+ "aiy430000050.ogg",
+ "aiy430000060.ogg",
+ "aiy430000070.ogg",
+ "aiy430000080.ogg",
+ "aiy430000090.ogg",
+ "aiy430000100.ogg",
+ "aiy430000110.ogg",
+ "aiy430000120.ogg",
+ "aiy430000130.ogg",
+ "aiy430000140.ogg",
+ "aiy430000150.ogg",
+ "aiy430000160.ogg",
+ "aiy430000170.ogg",
+ "aiy430000180.ogg",
+ "aiy430000190.ogg",
+ "aiy430000200.ogg",
+ "aiy430000210.ogg",
+ "aiy430000220.ogg",
+ "aiy430000230.ogg",
+ "aiy430000240.ogg",
+ "aiy430000250.ogg",
+ "aiy430000260.ogg",
+ "aiy430000270.ogg",
+ "aiy430000280.ogg",
+ "aiy430000290.ogg",
+ "aiy440000010.ogg",
+ "aiy440000020.ogg",
+ "aiy440000030.ogg",
+ "aiy440000040.ogg",
+ "aiy440000050.ogg",
+ "aiy440000060.ogg",
+ "aiy440000070.ogg",
+ "aiy440000080.ogg",
+ "aiy440000090.ogg",
+ "aiy440000100.ogg",
+ "aiy440000110.ogg",
+ "aiy440000120.ogg",
+ "aiy510000010.ogg",
+ "aiy510000020.ogg",
"aiy710000010.opus",
"aiy710000020.opus",
"aiy710000030.opus",
@@ -1006,8 +1360,68 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"aiy710000110.opus",
"aiy710000120.opus",
"aiy710000130.opus",
+ "aiy720000010.ogg",
+ "aiy730000010.ogg",
+ "aiy740000010.ogg",
+ "aiy750000010.ogg",
+ "aiy750000020.ogg",
+ "aiy750000030.ogg",
+ "aiy750000040.ogg",
+ "aiy750000050.ogg",
+ "aiy750000060.ogg",
+ "aiy750000070.ogg",
+ "aiy750000080.ogg",
+ "aiy750000090.ogg",
+ "aiy750000100.ogg",
+ "aiy750000110.ogg",
+ "aiy750000120.ogg",
+ "aiy750000130.ogg",
+ "aiy750000140.ogg",
+ "aiy750000150.ogg",
+ "aiy750000160.ogg",
+ "aiy750000170.ogg",
+ "aiy750000180.ogg",
+ "aiy750000190.ogg",
+ "aiy750000200.ogg",
+ "aiy750000210.ogg",
+ "aiy750000220.ogg",
+ "aiy750000230.ogg",
+ "aiy750000240.ogg",
+ "aiy750000250.ogg",
+ "aiy750000260.ogg",
+ "aiy750000270.ogg",
+ "aiy750000280.ogg",
+ "aiy750000290.ogg",
+ "aiy750000300.ogg",
+ "aiy750000310.ogg",
+ "aiy750000320.ogg",
+ "aiy750000330.ogg",
+ "aiy750000340.ogg",
+ "aiy800000010.ogg",
+ "aiy800000020.ogg",
+ "aiy800000030.ogg",
+ "aiy800000040.ogg",
+ "aiy800000050.ogg",
+ "aiy800000060.ogg",
+ "aiy800000070.ogg",
+ "aiy800000080.ogg",
+ "aiy800000090.ogg",
+ "aiy800000100.ogg",
+ "aiy810000010.ogg",
+ "aiy810000020.ogg",
+ "aiy810000030.ogg",
+ "aiy810000040.ogg",
+ "aiy810000050.ogg",
+ "aiy810000060.ogg",
+ "aiy810000070.ogg",
"aiy820000010.opus",
"aiy820000020.opus",
+ "aiy860000010.ogg",
+ "aiy860000020.ogg",
+ "aiy860000030.ogg",
+ "aiy860000040.ogg",
+ "aiy860000050.ogg",
+ "aiy860000060.ogg",
"attack.opus",
"bomb.opus",
"cancel.opus",
@@ -1108,7 +1522,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"title": "秽翼的尤斯蒂娅",
"name": "Eustia",
"version": "鸽子窝造塔小队",
- "floorId": "guangchang",
+ "floorId": "jiaocheng01",
"hero": {
"image": "hero.webp",
"animate": false,
@@ -1118,10 +1532,10 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"hp": 1000,
"manamax": -1,
"mana": 0,
- "atk": 100,
- "def": 100,
- "mdef": 0,
- "speed": 10,
+ "atk": 30,
+ "def": 20,
+ "mdef": 100,
+ "speed": 20,
"money": 0,
"exp": 0,
"equipment": [],
@@ -1133,18 +1547,20 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"loc": {
"direction": "up",
"x": 6,
- "y": 10
+ "y": 12
},
"flags": {
"itemDetail": true,
- "useBetweenLight": true
+ "useBetweenLight": true,
+ "__mdef_buff__": 0,
+ "popmove": true
},
"followers": [],
"steps": 0,
"matk": 0,
- "spell": 0,
+ "spell": 20,
"spelldef": 0,
- "mhp": 0
+ "mhp": 100
},
"startCanvas": [
{
@@ -1499,9 +1915,33 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
}
],
"startText": [
+ {
+ "type": "if",
+ "condition": "false",
+ "true": [
+ {
+ "type": "setText"
+ },
+ {
+ "type": "setHeroOpacity",
+ "opacity": 0
+ },
+ {
+ "type": "setCurtain",
+ "color": [
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ "time": 500,
+ "keep": true
+ }
+ ]
+ },
{
"type": "function",
- "function": "function(){\ncore.getItem('book',1);core.getItem('fly',1)\n}"
+ "function": "function(){\ncore.getItem('book', 1);\ncore.getItem('fly', 1);\n}"
},
{
"type": "insert",
@@ -1510,6 +1950,16 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
{
"type": "insert",
"name": "强制横屏"
+ },
+ {
+ "type": "if",
+ "condition": "false",
+ "true": [
+ {
+ "type": "insert",
+ "name": "chapter0"
+ }
+ ]
}
],
"shops": [
@@ -1678,13 +2128,13 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"lavaDamage": 100,
"poisonDamage": 10,
"weakValue": 20,
- "redGem": 3,
- "blueGem": 3,
+ "redGem": 2,
+ "blueGem": 2,
"greenGem": 5,
"redPotion": 100,
"bluePotion": 250,
"yellowPotion": 500,
- "greenPotion": 800,
+ "greenPotion": 900,
"breakArmor": 0.9,
"counterAttack": 0.1,
"purify": 3,
@@ -1692,7 +2142,8 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"animateSpeed": 300,
"moveSpeed": 100,
"statusCanvasRowsOnMobile": 3,
- "floorChangeTime": 500
+ "floorChangeTime": 500,
+ "yellowGem": 2
},
"flags": {
"statusBarItems": [
diff --git a/project/enemys.js b/project/enemys.js
index 8c80082..265b918 100644
--- a/project/enemys.js
+++ b/project/enemys.js
@@ -1,84 +1,84 @@
var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 =
{
- "greenSlime": {"name":"绿头怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"magic":false,"mdef":0},
- "redSlime": {"name":"红头怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[],"value":10,"magic":false},
- "blackSlime": {"name":"青头怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "slimelord": {"name":"怪王","hp":100,"atk":120,"def":0,"money":10,"exp":0,"point":0,"special":[1,9]},
- "bat": {"name":"小蝙蝠","hp":100,"atk":120,"def":0,"money":2,"exp":0,"point":0,"special":[1],"mdef":0,"speed":15},
- "bigBat": {"name":"大蝙蝠","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "redBat": {"name":"红蝙蝠","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
- "vampire": {"name":"冥灵魔王","hp":888,"atk":888,"def":888,"money":888,"exp":888,"point":0,"special":[6],"n":8},
- "skeleton": {"name":"骷髅人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "skeletonCaptain": {"name":"骷髅队长","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "zombie": {"name":"兽人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"magic":false},
- "zombieKnight": {"name":"兽人武士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "rock": {"name":"石头人","hp":50,"atk":50,"def":0,"money":3,"exp":0,"point":0,"special":3},
- "bluePriest": {"name":"初级法师","hp":100,"atk":120,"def":0,"money":3,"exp":0,"point":1,"special":[9]},
- "redPriest": {"name":"高级法师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "brownWizard": {"name":"初级巫师","hp":100,"atk":120,"def":0,"money":16,"exp":0,"point":0,"special":15,"value":100,"range":2},
- "redWizard": {"name":"高级巫师","hp":1000,"atk":1200,"def":0,"money":160,"exp":0,"point":0,"special":15,"value":200,"zoneSquare":true},
- "swordsman": {"name":"双手剑士","hp":100,"atk":120,"def":0,"money":6,"exp":3,"point":0,"special":4},
- "soldier": {"name":"冥战士","hp":120,"atk":50,"def":8,"money":10,"exp":7,"point":0,"special":0},
- "yellowKnight": {"name":"金骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "redKnight": {"name":"红骑士","hp":500,"atk":200,"def":50,"money":0,"exp":0,"point":0,"special":[7]},
- "darkKnight": {"name":"黑骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "blueKnight": {"name":"蓝骑士","hp":100,"atk":120,"def":0,"money":9,"exp":0,"point":0,"special":8},
- "goldSlime": {"name":"黄头怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "poisonSkeleton": {"name":"紫骷髅","hp":50,"atk":60,"def":70,"money":80,"exp":0,"point":0,"special":13},
- "poisonBat": {"name":"紫蝙蝠","hp":100,"atk":120,"def":0,"money":14,"exp":0,"point":0,"special":13},
- "skeletonPriest": {"name":"骷髅法师","hp":100,"atk":100,"def":0,"money":0,"exp":0,"point":0,"special":18,"value":20},
- "skeletonKing": {"name":"骷髅王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "evilHero": {"name":"迷失勇者","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "demonPriest": {"name":"魔神法师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "goldHornSlime": {"name":"金角怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "silverSlime": {"name":"银头怪","hp":100,"atk":120,"def":0,"money":15,"exp":0,"point":0,"special":14},
+ "greenSlime": {"name":"绿头怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "redSlime": {"name":"红头怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[],"value":10,"mdef":0,"spell":0,"speed":1},
+ "blackSlime": {"name":"青头怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "slimelord": {"name":"怪王","hp":790,"atk":48,"def":8,"money":10,"exp":0,"point":0,"special":[],"mdef":0,"spell":0,"speed":20},
+ "bat": {"name":"小蝙蝠","hp":100,"atk":50,"def":30,"money":2,"exp":0,"point":0,"special":[1],"mdef":0,"speed":15,"spell":0},
+ "bigBat": {"name":"大蝙蝠","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "redBat": {"name":"红蝙蝠","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[],"mdef":0,"spell":0,"speed":1},
+ "vampire": {"name":"冥灵魔王","hp":888,"atk":888,"def":888,"money":888,"exp":888,"point":0,"special":[6],"n":8,"mdef":0,"spell":0,"speed":1},
+ "skeleton": {"name":"骷髅人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "skeletonCaptain": {"name":"骷髅队长","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "zombie": {"name":"兽人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[22],"mdef":0,"spell":0,"speed":1},
+ "zombieKnight": {"name":"兽人武士","hp":10000,"atk":100,"def":100,"money":0,"exp":0,"point":0,"special":[22],"speed":10,"mdef":0,"damage2":20,"spell":0},
+ "rock": {"name":"石头人","hp":50,"atk":50,"def":0,"money":3,"exp":0,"point":0,"special":3,"damage2":15,"mdef":0,"spell":0,"speed":1},
+ "bluePriest": {"name":"初级法师","hp":100,"atk":120,"def":0,"money":3,"exp":0,"point":1,"special":[9],"mdef":0,"spell":0,"speed":1},
+ "redPriest": {"name":"高级法师","hp":162,"atk":0,"def":1,"money":0,"exp":0,"point":0,"special":[1],"mdef":0,"spell":308,"speed":14},
+ "brownWizard": {"name":"初级巫师","hp":162,"atk":120,"def":1,"money":16,"exp":0,"point":0,"special":[],"value":null,"range":2,"mdef":0,"spell":66,"speed":14},
+ "redWizard": {"name":"高级巫师","hp":1000,"atk":1200,"def":0,"money":160,"exp":0,"point":0,"special":15,"value":200,"zoneSquare":true,"mdef":0,"spell":0,"speed":1},
+ "swordsman": {"name":"双手剑士","hp":100,"atk":120,"def":0,"money":6,"exp":3,"point":0,"special":4,"mdef":0,"spell":0,"speed":1},
+ "soldier": {"name":"冥战士","hp":120,"atk":50,"def":8,"money":10,"exp":7,"point":0,"special":0,"mdef":0,"spell":0,"speed":8},
+ "yellowKnight": {"name":"金骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "redKnight": {"name":"红骑士","hp":500,"atk":200,"def":50,"money":0,"exp":0,"point":0,"special":[7],"mdef":0,"spell":0,"speed":1},
+ "darkKnight": {"name":"黑骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "blueKnight": {"name":"蓝骑士","hp":100,"atk":120,"def":0,"money":9,"exp":0,"point":0,"special":8,"mdef":0,"spell":0,"speed":1},
+ "goldSlime": {"name":"黄头怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "poisonSkeleton": {"name":"紫骷髅","hp":50,"atk":60,"def":70,"money":80,"exp":0,"point":0,"special":13,"mdef":0,"spell":0,"speed":1},
+ "poisonBat": {"name":"紫蝙蝠","hp":100,"atk":120,"def":0,"money":14,"exp":0,"point":0,"special":13,"mdef":0,"spell":0,"speed":1},
+ "skeletonPriest": {"name":"骷髅法师","hp":100,"atk":100,"def":0,"money":0,"exp":0,"point":0,"special":18,"value":20,"mdef":0,"spell":0,"speed":1},
+ "skeletonKing": {"name":"骷髅王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "evilHero": {"name":"迷失勇者","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "demonPriest": {"name":"魔神法师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "goldHornSlime": {"name":"金角怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "silverSlime": {"name":"银头怪","hp":100,"atk":120,"def":0,"money":15,"exp":0,"point":0,"special":14,"mdef":0,"spell":0,"speed":1},
"whiteHornSlime": {"name":"尖角怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "redSwordsman": {"name":"剑王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
- "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":0,"bigImage":null},
- "princessEnemy": {"name":"假公主","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "angel": {"name":"天使","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "elemental": {"name":"元素生物","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "steelGuard": {"name":"铁守卫","hp":50,"atk":50,"def":50,"money":0,"exp":0,"point":0,"special":[18],"value":20},
- "evilBat": {"name":"邪恶蝙蝠","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "silverSlimelord": {"name":"银怪王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "goldSlimelord": {"name":"金怪王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "skeletonWarrior": {"name":"骷髅士兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "whiteSlimeman": {"name":"水银战士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "slimeman": {"name":"影子战士","hp":100,"atk":0,"def":0,"money":11,"exp":0,"point":0,"special":[9],"atkValue":2,"defValue":3},
- "yellowGateKeeper": {"name":"初级卫兵","hp":80,"atk":25,"def":5,"money":3,"exp":1,"point":0,"special":0},
- "blueGateKeeper": {"name":"中级卫兵","hp":80,"atk":25,"def":5,"money":3,"exp":1,"point":0,"special":0},
- "redGateKeeper": {"name":"高级卫兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "magicMaster": {"name":"黑暗大法师","hp":100,"atk":120,"def":0,"money":12,"exp":0,"point":0,"special":11,"value":0.3333333333333333,"add":true,"notBomb":true},
- "devilWarrior": {"name":"魔神武士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "fairyEnemy": {"name":"仙子","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "dragon": {"name":"魔龙","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"bigImage":null},
- "skeletonKnight": {"name":"骷髅武士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "skeletonPresbyter": {"name":"骷髅巫师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "ironRock": {"name":"铁面人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "grayRock": {"name":"灰色石头人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "yellowPriest": {"name":"中级法师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "evilPrincess": {"name":"痛苦魔女","hp":1000,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[10]},
+ "redSwordsman": {"name":"剑王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[],"mdef":0,"spell":0,"speed":1},
+ "poisonZombie": {"name":"绿兽人","hp":100,"atk":120,"def":0,"money":13,"exp":0,"point":0,"special":[12],"mdef":0,"spell":0,"speed":1},
+ "octopus": {"name":"血影","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"bigImage":null,"mdef":0,"spell":0,"speed":1},
+ "princessEnemy": {"name":"假公主","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "angel": {"name":"天使","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "elemental": {"name":"元素生物","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "steelGuard": {"name":"铁守卫","hp":50,"atk":50,"def":50,"money":0,"exp":0,"point":0,"special":[18],"value":20,"mdef":0,"spell":0,"speed":1},
+ "evilBat": {"name":"邪恶蝙蝠","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "silverSlimelord": {"name":"银怪王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "goldSlimelord": {"name":"金怪王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "skeletonWarrior": {"name":"骷髅士兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "whiteSlimeman": {"name":"水银战士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "slimeman": {"name":"影子战士","hp":100,"atk":0,"def":0,"money":11,"exp":0,"point":0,"special":[9],"atkValue":2,"defValue":3,"mdef":0,"spell":0,"speed":1},
+ "yellowGateKeeper": {"name":"初级卫兵","hp":80,"atk":25,"def":5,"money":3,"exp":1,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "blueGateKeeper": {"name":"中级卫兵","hp":80,"atk":25,"def":5,"money":3,"exp":1,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "redGateKeeper": {"name":"高级卫兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "magicMaster": {"name":"黑暗大法师","hp":100,"atk":120,"def":0,"money":12,"exp":0,"point":0,"special":11,"value":0.3333333333333333,"add":true,"notBomb":true,"mdef":0,"spell":0,"speed":1},
+ "devilWarrior": {"name":"魔神武士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "fairyEnemy": {"name":"仙子","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "dragon": {"name":"魔龙","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"bigImage":null,"mdef":0,"spell":0,"speed":1},
+ "skeletonKnight": {"name":"骷髅武士","hp":330,"atk":113,"def":2,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":20},
+ "skeletonPresbyter": {"name":"骷髅巫师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "ironRock": {"name":"铁面人","hp":111,"atk":97,"def":37,"money":0,"exp":0,"point":0,"special":[3],"mdef":0,"spell":0,"speed":14},
+ "grayRock": {"name":"灰色石头人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "yellowPriest": {"name":"中级法师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "evilPrincess": {"name":"痛苦魔女","hp":1000,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[10],"mdef":0,"spell":0,"speed":1},
"blademaster": {"name":"剑圣","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "evilFairy": {"name":"黑暗仙子","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "greenKnight": {"name":"强盾骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "bowman": {"name":"初级弓兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "watcherSlime": {"name":"邪眼怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "devilKnight": {"name":"恶灵骑士","hp":150,"atk":100,"def":50,"money":0,"exp":0,"point":0,"special":[1,5,7,8]},
- "grayPriest": {"name":"混沌法师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "greenGateKeeper": {"name":"卫兵队长","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "ghostSoldier": {"name":"冥队长","hp":200,"atk":100,"def":50,"money":0,"exp":0,"point":0,"special":8},
- "frostBat": {"name":"寒蝙蝠","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "blackKing": {"name":"黑衣魔王","hp":1000,"atk":500,"def":0,"money":1000,"exp":1000,"point":0,"special":0,"notBomb":true},
- "yellowKing": {"name":"黄衣魔王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "greenKing": {"name":"青衣武士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "redKing": {"name":"红衣魔王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "blueKing": {"name":"白衣武士","hp":100,"atk":120,"def":0,"money":17,"exp":0,"point":0,"special":[16]},
- "keiskeiFairy": {"name":"铃兰花妖","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "tulipFairy": {"name":"郁金香花妖","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "purpleBowman": {"name":"高级弓兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
- "bearDown": {"name":"熊出没","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[],"faceIds":{"down":"bearDown","left":"bearLeft","right":"bearRight","up":"bearUp"},"bigImage":"bear.png"},
- "bearLeft": {"name":"熊出没","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[],"faceIds":{"down":"bearDown","left":"bearLeft","right":"bearRight","up":"bearUp"}},
- "bearRight": {"name":"熊出没","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[],"faceIds":{"down":"bearDown","left":"bearLeft","right":"bearRight","up":"bearUp"}},
- "bearUp": {"name":"熊出没","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[],"faceIds":{"down":"bearDown","left":"bearLeft","right":"bearRight","up":"bearUp"}}
+ "evilFairy": {"name":"黑暗仙子","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "greenKnight": {"name":"强盾骑士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "bowman": {"name":"初级弓兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "watcherSlime": {"name":"邪眼怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "devilKnight": {"name":"恶灵骑士","hp":150,"atk":100,"def":50,"money":0,"exp":0,"point":0,"special":[1,5,7,8],"mdef":0,"spell":0,"speed":1},
+ "grayPriest": {"name":"混沌法师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "greenGateKeeper": {"name":"卫兵队长","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "ghostSoldier": {"name":"冥队长","hp":200,"atk":100,"def":50,"money":0,"exp":0,"point":0,"special":8,"mdef":0,"spell":0,"speed":1},
+ "frostBat": {"name":"寒蝙蝠","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "blackKing": {"name":"黑衣魔王","hp":1000,"atk":500,"def":0,"money":1000,"exp":1000,"point":0,"special":0,"notBomb":true,"mdef":0,"spell":0,"speed":1},
+ "yellowKing": {"name":"黄衣魔王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "greenKing": {"name":"青衣武士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "redKing": {"name":"红衣魔王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "blueKing": {"name":"白衣武士","hp":100,"atk":120,"def":0,"money":17,"exp":0,"point":0,"special":[16],"mdef":0,"spell":0,"speed":1},
+ "keiskeiFairy": {"name":"铃兰花妖","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "tulipFairy": {"name":"郁金香花妖","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "purpleBowman": {"name":"高级弓兵","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"mdef":0,"spell":0,"speed":1},
+ "bearDown": {"name":"熊出没","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[],"faceIds":{"down":"bearDown","left":"bearLeft","right":"bearRight","up":"bearUp"},"bigImage":"bear.png","mdef":0,"spell":0,"speed":1},
+ "bearLeft": {"name":"熊出没","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[],"faceIds":{"down":"bearDown","left":"bearLeft","right":"bearRight","up":"bearUp"},"mdef":0,"spell":0,"speed":1},
+ "bearRight": {"name":"熊出没","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[],"faceIds":{"down":"bearDown","left":"bearLeft","right":"bearRight","up":"bearUp"},"mdef":0,"spell":0,"speed":1},
+ "bearUp": {"name":"熊出没","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[],"faceIds":{"down":"bearDown","left":"bearLeft","right":"bearRight","up":"bearUp"},"mdef":0,"spell":0,"speed":1}
}
\ No newline at end of file
diff --git a/project/events.js b/project/events.js
index 71a864c..9f5e38e 100644
--- a/project/events.js
+++ b/project/events.js
@@ -154,996 +154,1010 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
"time": 50
},
{
- "type": "changebg",
- "img1": "",
- "memory1": false,
- "img2": "",
- "memory2": false,
- "time": 30,
- "style": "引入"
- },
- {
- "type": "over",
- "text": "人生不如意事,十常居七八。",
- "image": "",
- "memory": false,
- "time": 50,
- "hidetime": 30,
- "sound": "",
- "textColor": [
- 255,
- 255,
- 255,
- 1
- ],
- "boldColor": [
- 0,
- 0,
- 0,
- 1
- ],
- "font": "bold 48px Verdana"
- },
- {
- "type": "over",
- "text": "世间的万物皆被装缀着不公的色彩。",
- "image": "",
- "memory": false,
- "time": 50,
- "hidetime": 30,
- "sound": "",
- "textColor": [
- 255,
- 255,
- 255,
- 1
- ],
- "boldColor": [
- 0,
- 0,
- 0,
- 1
- ],
- "font": "bold 48px Verdana"
- },
- {
- "type": "over",
- "text": "没错,就像——",
- "image": "",
- "memory": false,
- "time": 50,
- "hidetime": 30,
- "sound": "",
- "textColor": [
- 255,
- 255,
- 255,
- 1
- ],
- "boldColor": [
- 0,
- 0,
- 0,
- 1
- ],
- "font": "bold 48px Verdana"
- },
- {
- "type": "over",
- "text": "十几年前的那一天,",
- "image": "",
- "memory": false,
- "time": 50,
- "hidetime": 30,
- "sound": "",
- "textColor": [
- 255,
- 255,
- 255,
- 1
- ],
- "boldColor": [
- 0,
- 0,
- 0,
- 1
- ],
- "font": "bold 48px Verdana"
- },
- {
- "type": "over",
- "text": "在都市的角落,同许多的生命共同消逝一般。",
- "image": "",
- "memory": false,
- "time": 50,
- "hidetime": 30,
- "sound": "",
- "textColor": [
- 255,
- 255,
- 255,
- 1
- ],
- "boldColor": [
- 0,
- 0,
- 0,
- 1
- ],
- "font": "bold 48px Verdana"
- },
- {
- "type": "over",
- "text": "没错,就像——",
- "image": "",
- "memory": false,
- "time": 50,
- "hidetime": 30,
- "sound": "",
- "textColor": [
- 255,
- 255,
- 255,
- 1
- ],
- "boldColor": [
- 0,
- 0,
- 0,
- 1
- ],
- "font": "bold 48px Verdana"
- },
- {
- "type": "over",
- "text": "十几年前的那天起以来,",
- "image": "",
- "memory": false,
- "time": 50,
- "hidetime": 30,
- "sound": "",
- "textColor": [
- 255,
- 255,
- 255,
- 1
- ],
- "boldColor": [
- 0,
- 0,
- 0,
- 1
- ],
- "font": "bold 48px Verdana"
- },
- {
- "type": "over",
- "text": "无数的生命被那无法逃脱的污泥囚禁一样。",
- "image": "",
- "memory": false,
- "time": 50,
- "hidetime": 30,
- "sound": "",
- "textColor": [
- 255,
- 255,
- 255,
- 1
- ],
- "boldColor": [
- 0,
- 0,
- 0,
- 1
- ],
- "font": "bold 48px Verdana"
- },
- {
- "type": "over",
- "text": "人生不如意事,十常居七八。",
- "image": "",
- "memory": false,
- "time": 50,
- "hidetime": 30,
- "sound": "",
- "textColor": [
- 255,
- 255,
- 255,
- 1
- ],
- "boldColor": [
- 0,
- 0,
- 0,
- 1
- ],
- "font": "bold 48px Verdana"
- },
- {
- "type": "over",
- "text": "世间的万物皆被装缀着不公的色彩。",
- "image": "",
- "memory": false,
- "time": 50,
- "hidetime": 30,
- "sound": "",
- "textColor": [
- 255,
- 255,
- 255,
- 1
- ],
- "boldColor": [
- 0,
- 0,
- 0,
- 1
- ],
- "font": "bold 48px Verdana"
- },
- {
- "type": "over",
- "text": "没错,就像——",
- "image": "",
- "memory": false,
- "time": 50,
- "hidetime": 30,
- "sound": "",
- "textColor": [
- 255,
- 255,
- 255,
- 1
- ],
- "boldColor": [
- 0,
- 0,
- 0,
- 1
- ],
- "font": "bold 48px Verdana"
- },
- {
- "type": "over",
- "text": "如今,这一天。",
- "image": "",
- "memory": false,
- "time": 50,
- "hidetime": 30,
- "sound": "",
- "textColor": [
- 255,
- 255,
- 255,
- 1
- ],
- "boldColor": [
- 0,
- 0,
- 0,
- 1
- ],
- "font": "bold 48px Verdana"
- },
- {
- "type": "changebg",
- "img1": "",
- "memory1": false,
- "img2": "other_0001.webp",
- "memory2": false,
- "time": 30,
- "style": "场景切换"
- },
- {
- "type": "playBgm",
- "name": "Blood_Stain.opus",
- "keep": true
- },
- {
- "type": "cgtextList",
- "textList": "chapter0"
- },
- {
- "type": "cgtext",
- "bg": "other_0001.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "0",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "confirm",
+ "text": "跳过傻逼不能点点点快进的旁白",
+ "yes": [],
+ "no": [
{
- "name": "",
- "px": 100,
- "filter": false
+ "type": "changebg",
+ "img1": "",
+ "memory1": false,
+ "img2": "",
+ "memory2": false,
+ "time": 30,
+ "style": "引入"
+ },
+ {
+ "type": "over",
+ "text": "人生不如意事,十常居七八。",
+ "image": "",
+ "memory": false,
+ "time": 50,
+ "hidetime": 30,
+ "sound": "",
+ "textColor": [
+ 255,
+ 255,
+ 255,
+ 1
+ ],
+ "boldColor": [
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ "font": "bold 48px Verdana"
+ },
+ {
+ "type": "over",
+ "text": "世间的万物皆被装缀着不公的色彩。",
+ "image": "",
+ "memory": false,
+ "time": 50,
+ "hidetime": 30,
+ "sound": "",
+ "textColor": [
+ 255,
+ 255,
+ 255,
+ 1
+ ],
+ "boldColor": [
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ "font": "bold 48px Verdana"
+ },
+ {
+ "type": "over",
+ "text": "没错,就像——",
+ "image": "",
+ "memory": false,
+ "time": 50,
+ "hidetime": 30,
+ "sound": "",
+ "textColor": [
+ 255,
+ 255,
+ 255,
+ 1
+ ],
+ "boldColor": [
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ "font": "bold 48px Verdana"
+ },
+ {
+ "type": "over",
+ "text": "十几年前的那一天,",
+ "image": "",
+ "memory": false,
+ "time": 50,
+ "hidetime": 30,
+ "sound": "",
+ "textColor": [
+ 255,
+ 255,
+ 255,
+ 1
+ ],
+ "boldColor": [
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ "font": "bold 48px Verdana"
+ },
+ {
+ "type": "over",
+ "text": "在都市的角落,同许多的生命共同消逝一般。",
+ "image": "",
+ "memory": false,
+ "time": 50,
+ "hidetime": 30,
+ "sound": "",
+ "textColor": [
+ 255,
+ 255,
+ 255,
+ 1
+ ],
+ "boldColor": [
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ "font": "bold 48px Verdana"
+ },
+ {
+ "type": "over",
+ "text": "没错,就像——",
+ "image": "",
+ "memory": false,
+ "time": 50,
+ "hidetime": 30,
+ "sound": "",
+ "textColor": [
+ 255,
+ 255,
+ 255,
+ 1
+ ],
+ "boldColor": [
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ "font": "bold 48px Verdana"
+ },
+ {
+ "type": "over",
+ "text": "十几年前的那天起以来,",
+ "image": "",
+ "memory": false,
+ "time": 50,
+ "hidetime": 30,
+ "sound": "",
+ "textColor": [
+ 255,
+ 255,
+ 255,
+ 1
+ ],
+ "boldColor": [
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ "font": "bold 48px Verdana"
+ },
+ {
+ "type": "over",
+ "text": "无数的生命被那无法逃脱的污泥囚禁一样。",
+ "image": "",
+ "memory": false,
+ "time": 50,
+ "hidetime": 30,
+ "sound": "",
+ "textColor": [
+ 255,
+ 255,
+ 255,
+ 1
+ ],
+ "boldColor": [
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ "font": "bold 48px Verdana"
+ },
+ {
+ "type": "over",
+ "text": "人生不如意事,十常居七八。",
+ "image": "",
+ "memory": false,
+ "time": 50,
+ "hidetime": 30,
+ "sound": "",
+ "textColor": [
+ 255,
+ 255,
+ 255,
+ 1
+ ],
+ "boldColor": [
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ "font": "bold 48px Verdana"
+ },
+ {
+ "type": "over",
+ "text": "世间的万物皆被装缀着不公的色彩。",
+ "image": "",
+ "memory": false,
+ "time": 50,
+ "hidetime": 30,
+ "sound": "",
+ "textColor": [
+ 255,
+ 255,
+ 255,
+ 1
+ ],
+ "boldColor": [
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ "font": "bold 48px Verdana"
+ },
+ {
+ "type": "over",
+ "text": "没错,就像——",
+ "image": "",
+ "memory": false,
+ "time": 50,
+ "hidetime": 30,
+ "sound": "",
+ "textColor": [
+ 255,
+ 255,
+ 255,
+ 1
+ ],
+ "boldColor": [
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ "font": "bold 48px Verdana"
+ },
+ {
+ "type": "over",
+ "text": "如今,这一天。",
+ "image": "",
+ "memory": false,
+ "time": 50,
+ "hidetime": 30,
+ "sound": "",
+ "textColor": [
+ 255,
+ 255,
+ 255,
+ 1
+ ],
+ "boldColor": [
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ "font": "bold 48px Verdana"
}
]
},
{
- "type": "cgtext",
- "bg": "other_0001.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "1",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "confirm",
+ "text": "我他妈要全跳了",
+ "yes": [],
+ "no": [
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "other_0001.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "2",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "changebg",
+ "img1": "",
+ "memory1": false,
+ "img2": "other_0001.webp",
+ "memory2": false,
+ "time": 30,
+ "style": "场景切换"
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "changebg",
- "img1": "other_0001.webp",
- "memory1": false,
- "img2": "bg_3563.webp",
- "memory2": false,
- "time": 30,
- "style": "场景切换"
- },
- {
- "type": "cgtext",
- "bg": "bg_3563.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "3",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "playBgm",
+ "name": "Blood_Stain.opus",
+ "keep": true
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3563.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "4",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "cgtextList",
+ "textList": "chapter000"
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3563.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "5",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "cgtext",
+ "bg": "other_0001.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "0",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3563.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "6",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "cgtext",
+ "bg": "other_0001.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "1",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3563.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "7",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "cgtext",
+ "bg": "other_0001.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "2",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3563.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "8",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "changebg",
+ "img1": "other_0001.webp",
+ "memory1": false,
+ "img2": "bg_3563.webp",
+ "memory2": false,
+ "time": 30,
+ "style": "场景切换"
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3563.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "9",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "cgtext",
+ "bg": "bg_3563.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "3",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3563.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "10",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "cgtext",
+ "bg": "bg_3563.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "4",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "changebg",
- "img1": "bg_3563.webp",
- "memory1": false,
- "img2": "other_0002.webp",
- "memory2": false,
- "time": 30,
- "style": "场景切换"
- },
- {
- "type": "cgtext",
- "bg": "other_0002.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "11",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "cgtext",
+ "bg": "bg_3563.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "5",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "other_0002.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "12",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "cgtext",
+ "bg": "bg_3563.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "6",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "other_0002.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "13",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "cgtext",
+ "bg": "bg_3563.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "7",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "other_0002.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "14",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "cgtext",
+ "bg": "bg_3563.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "8",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "other_0002.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "15",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "cgtext",
+ "bg": "bg_3563.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "9",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "other_0002.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "16",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "cgtext",
+ "bg": "bg_3563.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "10",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "other_0002.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "17",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "changebg",
+ "img1": "bg_3563.webp",
+ "memory1": false,
+ "img2": "other_0002.webp",
+ "memory2": false,
+ "time": 30,
+ "style": "场景切换"
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "other_0002.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "18",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "cgtext",
+ "bg": "other_0002.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "11",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "changebg",
- "img1": "other_0002.webp",
- "memory1": false,
- "img2": "other_0001.webp",
- "memory2": false,
- "time": 30,
- "style": "场景切换"
- },
- {
- "type": "cgtext",
- "bg": "other_0001.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "19",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "cgtext",
+ "bg": "other_0002.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "12",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "changebg",
- "img1": "other_0001.webp",
- "memory1": false,
- "img2": "other_0003.webp",
- "memory2": false,
- "time": 30,
- "style": "场景切换"
- },
- {
- "type": "cgtext",
- "bg": "other_0003.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "20",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "cgtext",
+ "bg": "other_0002.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "13",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "other_0003.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "21",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "cgtext",
+ "bg": "other_0002.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "14",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "changebg",
- "img1": "other_0003.webp",
- "memory1": false,
- "img2": "",
- "memory2": false,
- "time": 30,
- "style": "场景切换"
- },
- {
- "type": "cgtext",
- "bg": "",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "22",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "cgtext",
+ "bg": "other_0002.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "15",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "changebg",
- "img1": "",
- "memory1": false,
- "img2": "other_0003.webp",
- "memory2": false,
- "time": 30,
- "style": "场景切换"
- },
- {
- "type": "cgtext",
- "bg": "other_0003.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "23",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "cgtext",
+ "bg": "other_0002.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "16",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "other_0003.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "24",
- "time": 50,
- "wait": 1000,
- "bodyList": [
+ "type": "cgtext",
+ "bg": "other_0002.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "17",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "changebg",
- "img1": "other_0003.webp",
- "memory1": false,
- "img2": "",
- "memory2": false,
- "time": 30,
- "style": "场景切换"
- },
- {
- "type": "cgtext",
- "bg": "",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "25",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "cgtext",
+ "bg": "other_0002.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "18",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "26",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "changebg",
+ "img1": "other_0002.webp",
+ "memory1": false,
+ "img2": "other_0001.webp",
+ "memory2": false,
+ "time": 30,
+ "style": "场景切换"
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "27",
- "time": 30,
- "wait": 2000,
- "bodyList": [
+ "type": "cgtext",
+ "bg": "other_0001.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "19",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "28",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "changebg",
+ "img1": "other_0001.webp",
+ "memory1": false,
+ "img2": "other_0003.webp",
+ "memory2": false,
+ "time": 30,
+ "style": "场景切换"
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "29",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "cgtext",
+ "bg": "other_0003.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "20",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "30",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "cgtext",
+ "bg": "other_0003.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "21",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
{
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "31",
- "time": 30,
- "wait": 1000,
- "bodyList": [
+ "type": "changebg",
+ "img1": "other_0003.webp",
+ "memory1": false,
+ "img2": "",
+ "memory2": false,
+ "time": 30,
+ "style": "场景切换"
+ },
{
- "name": "",
- "px": 100,
- "filter": false
+ "type": "cgtext",
+ "bg": "",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "22",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
+ {
+ "type": "changebg",
+ "img1": "",
+ "memory1": false,
+ "img2": "other_0003.webp",
+ "memory2": false,
+ "time": 30,
+ "style": "场景切换"
+ },
+ {
+ "type": "cgtext",
+ "bg": "other_0003.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "23",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
+ {
+ "type": "cgtext",
+ "bg": "other_0003.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "24",
+ "time": 50,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
+ {
+ "type": "changebg",
+ "img1": "other_0003.webp",
+ "memory1": false,
+ "img2": "",
+ "memory2": false,
+ "time": 30,
+ "style": "场景切换"
+ },
+ {
+ "type": "cgtext",
+ "bg": "",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "25",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
+ {
+ "type": "cgtext",
+ "bg": "",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "26",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
+ {
+ "type": "cgtext",
+ "bg": "",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "27",
+ "time": 30,
+ "wait": 2000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
+ {
+ "type": "cgtext",
+ "bg": "",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "28",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
+ {
+ "type": "cgtext",
+ "bg": "",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "29",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
+ {
+ "type": "cgtext",
+ "bg": "",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "30",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
+ {
+ "type": "cgtext",
+ "bg": "",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "31",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
}
]
},
@@ -1151,1973 +1165,6 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
"type": "playBgm",
"name": "Blind_Alley.opus",
"keep": true
- },
- {
- "type": "changebg",
- "img1": "",
- "memory1": false,
- "img2": "bg_6004.webp",
- "memory2": false,
- "time": 30,
- "style": "场景切换"
- },
- {
- "type": "cgtext",
- "bg": "bg_6004.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "32",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_6004.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "33",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_6004.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "34",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_6004.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "35",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_6004.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "36",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_6004.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "37",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "changebg",
- "img1": "bg_6004.webp",
- "memory1": false,
- "img2": "other_0004.webp",
- "memory2": false,
- "time": 30,
- "style": "场景切换"
- },
- {
- "type": "cgtext",
- "bg": "other_0004.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "38",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "other_0004.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "39",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "other_0004.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "40",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "changebg",
- "img1": "other_0004.webp",
- "memory1": false,
- "img2": "bg_3601.webp",
- "memory2": false,
- "time": 30,
- "style": "场景切换"
- },
- {
- "type": "cgtext",
- "bg": "bg_3601.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "41",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3601.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "42",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3601.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "43",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "changebg",
- "img1": "bg_3601.webp",
- "memory1": false,
- "img2": "bg_3531.webp",
- "memory2": false,
- "time": 30,
- "style": "场景切换"
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "44",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "45",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "46",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "47",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "48",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "49",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "50",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "51",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "52",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "53",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "54",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "55",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "56",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "57",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "58",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "59",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "60",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "61",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "62",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "63",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "64",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "65",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "66",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "67",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "68",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "69",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "70",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "71",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "72",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "73",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "74",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "75",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "76",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "77",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "78",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "79",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "80",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "81",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "82",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "83",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "84",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "85",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "86",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "87",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "88",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "89",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "90",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "91",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "92",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "93",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "94",
- "time": 30,
- "wait": 2000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "95",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "96",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "97",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "98",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "99",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "100",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "101",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "102",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "103",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "104",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "105",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "106",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "107",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "108",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "109",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "110",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "111",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "112",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "113",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "114",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "115",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "changebg",
- "img1": "bg_3531.webp",
- "memory1": false,
- "img2": "bg_3601.webp",
- "memory2": false,
- "time": 30,
- "style": "场景切换"
- },
- {
- "type": "cgtext",
- "bg": "bg_3601.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "116",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3601.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "117",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3601.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "118",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3601.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "119",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3601.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "120",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3601.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "121",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3601.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "122",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3601.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "123",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3601.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "124",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "cgtext",
- "bg": "bg_3601.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "125",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "changebg",
- "img1": "bg_3601.webp",
- "memory1": false,
- "img2": "bg_3531.webp",
- "memory2": false,
- "time": 30,
- "style": "场景切换"
- },
- {
- "type": "cgtext",
- "bg": "bg_3531.webp",
- "memory": false,
- "WindowSkin": false,
- "head": {
- "name": "",
- "px": -300
- },
- "index": "126",
- "time": 30,
- "wait": 1000,
- "bodyList": [
- {
- "name": "",
- "px": 100,
- "filter": false
- }
- ]
- },
- {
- "type": "changebg",
- "img1": "bg_3531.webp",
- "memory1": false,
- "img2": "",
- "memory2": false,
- "time": 30,
- "style": "引出"
- },
- {
- "type": "comment",
- "text": "好多立绘,先更这点(吐槽一下)"
}
],
"chapter01": [
@@ -10763,6 +8810,650 @@ var events_c12a15a8_c380_4b28_8144_256cba95f760 =
"stopbefore": false
}
]
+ },
+ {
+ "type": "setanimate",
+ "name": "Fire01",
+ "px": 48,
+ "py": 48,
+ "width": 192,
+ "height": 192,
+ "allFarme": 15,
+ "imageList": [
+ {
+ "image": "015-Fire01.webp",
+ "beforefarme": 0,
+ "globalAlpha": 100,
+ "cx": 192,
+ "cy": 0,
+ "cw": 192,
+ "ch": 192,
+ "x": 0,
+ "y": 0,
+ "w": 96,
+ "h": 96,
+ "afterfarme": 3,
+ "acx": 192,
+ "acy": 0,
+ "acw": 192,
+ "ach": 192,
+ "ax": 0,
+ "ay": 0,
+ "aw": 96,
+ "ah": 96
+ },
+ {
+ "image": "015-Fire01.webp",
+ "beforefarme": 4,
+ "globalAlpha": 100,
+ "cx": 384,
+ "cy": 0,
+ "cw": 192,
+ "ch": 192,
+ "x": 0,
+ "y": 0,
+ "w": 96,
+ "h": 96,
+ "afterfarme": 6,
+ "acx": 384,
+ "acy": 0,
+ "acw": 192,
+ "ach": 192,
+ "ax": 0,
+ "ay": 0,
+ "aw": 96,
+ "ah": 96
+ },
+ {
+ "image": "015-Fire01.webp",
+ "beforefarme": 7,
+ "globalAlpha": 100,
+ "cx": 576,
+ "cy": 0,
+ "cw": 192,
+ "ch": 192,
+ "x": 0,
+ "y": 0,
+ "w": 96,
+ "h": 96,
+ "afterfarme": 9,
+ "acx": 576,
+ "acy": 0,
+ "acw": 192,
+ "ach": 192,
+ "ax": 0,
+ "ay": 0,
+ "aw": 96,
+ "ah": 96
+ },
+ {
+ "image": "015-Fire01.webp",
+ "beforefarme": 10,
+ "globalAlpha": 100,
+ "cx": 768,
+ "cy": 0,
+ "cw": 192,
+ "ch": 192,
+ "x": 0,
+ "y": 0,
+ "w": 96,
+ "h": 96,
+ "afterfarme": 12,
+ "acx": 768,
+ "acy": 0,
+ "acw": 192,
+ "ach": 192,
+ "ax": 0,
+ "ay": 0,
+ "aw": 96,
+ "ah": 96
+ },
+ {
+ "image": "015-Fire01.webp",
+ "beforefarme": 13,
+ "globalAlpha": 100,
+ "cx": 960,
+ "cy": 0,
+ "cw": 192,
+ "ch": 192,
+ "x": 0,
+ "y": 0,
+ "w": 96,
+ "h": 96,
+ "afterfarme": 15,
+ "acx": 960,
+ "acy": 0,
+ "acw": 192,
+ "ach": 192,
+ "ax": 0,
+ "ay": 0,
+ "aw": 96,
+ "ah": 96
+ }
+ ],
+ "soundList": [
+ {
+ "sound": "",
+ "startfarme": 0,
+ "stopbefore": false
+ }
+ ]
+ },
+ {
+ "type": "setanimate",
+ "name": "Fire02",
+ "px": 48,
+ "py": 48,
+ "width": 192,
+ "height": 192,
+ "allFarme": 15,
+ "imageList": [
+ {
+ "image": "015-Fire01.webp",
+ "beforefarme": 0,
+ "globalAlpha": 100,
+ "cx": 192,
+ "cy": 192,
+ "cw": 192,
+ "ch": 192,
+ "x": 0,
+ "y": 0,
+ "w": 96,
+ "h": 96,
+ "afterfarme": 3,
+ "acx": 192,
+ "acy": 192,
+ "acw": 192,
+ "ach": 192,
+ "ax": 0,
+ "ay": 0,
+ "aw": 96,
+ "ah": 96
+ },
+ {
+ "image": "015-Fire01.webp",
+ "beforefarme": 4,
+ "globalAlpha": 100,
+ "cx": 384,
+ "cy": 192,
+ "cw": 192,
+ "ch": 192,
+ "x": 0,
+ "y": 0,
+ "w": 96,
+ "h": 96,
+ "afterfarme": 6,
+ "acx": 384,
+ "acy": 192,
+ "acw": 192,
+ "ach": 192,
+ "ax": 0,
+ "ay": 0,
+ "aw": 96,
+ "ah": 96
+ },
+ {
+ "image": "015-Fire01.webp",
+ "beforefarme": 7,
+ "globalAlpha": 100,
+ "cx": 576,
+ "cy": 192,
+ "cw": 192,
+ "ch": 192,
+ "x": 0,
+ "y": 0,
+ "w": 96,
+ "h": 96,
+ "afterfarme": 9,
+ "acx": 576,
+ "acy": 192,
+ "acw": 192,
+ "ach": 192,
+ "ax": 0,
+ "ay": 0,
+ "aw": 96,
+ "ah": 96
+ },
+ {
+ "image": "015-Fire01.webp",
+ "beforefarme": 10,
+ "globalAlpha": 100,
+ "cx": 768,
+ "cy": 192,
+ "cw": 192,
+ "ch": 192,
+ "x": 0,
+ "y": 0,
+ "w": 96,
+ "h": 96,
+ "afterfarme": 12,
+ "acx": 768,
+ "acy": 192,
+ "acw": 192,
+ "ach": 192,
+ "ax": 0,
+ "ay": 0,
+ "aw": 96,
+ "ah": 96
+ },
+ {
+ "image": "015-Fire01.webp",
+ "beforefarme": 13,
+ "globalAlpha": 100,
+ "cx": 960,
+ "cy": 192,
+ "cw": 192,
+ "ch": 192,
+ "x": 0,
+ "y": 0,
+ "w": 96,
+ "h": 96,
+ "afterfarme": 15,
+ "acx": 960,
+ "acy": 192,
+ "acw": 192,
+ "ach": 192,
+ "ax": 0,
+ "ay": 0,
+ "aw": 96,
+ "ah": 96
+ }
+ ],
+ "soundList": [
+ {
+ "sound": "",
+ "startfarme": 0,
+ "stopbefore": false
+ }
+ ]
+ },
+ {
+ "type": "setanimate",
+ "name": "005-Attack03",
+ "px": 48,
+ "py": 48,
+ "width": 192,
+ "height": 192,
+ "allFarme": 15,
+ "imageList": [
+ {
+ "image": "005-Attack03.webp",
+ "beforefarme": 0,
+ "globalAlpha": 100,
+ "cx": 0,
+ "cy": 0,
+ "cw": 192,
+ "ch": 192,
+ "x": 0,
+ "y": 0,
+ "w": 96,
+ "h": 96,
+ "afterfarme": 3,
+ "acx": 0,
+ "acy": 0,
+ "acw": 192,
+ "ach": 192,
+ "ax": 0,
+ "ay": 0,
+ "aw": 96,
+ "ah": 96
+ },
+ {
+ "image": "005-Attack03.webp",
+ "beforefarme": 4,
+ "globalAlpha": 100,
+ "cx": 192,
+ "cy": 0,
+ "cw": 192,
+ "ch": 192,
+ "x": 0,
+ "y": 0,
+ "w": 96,
+ "h": 96,
+ "afterfarme": 6,
+ "acx": 192,
+ "acy": 0,
+ "acw": 192,
+ "ach": 192,
+ "ax": 0,
+ "ay": 0,
+ "aw": 96,
+ "ah": 96
+ },
+ {
+ "image": "005-Attack03.webp",
+ "beforefarme": 7,
+ "globalAlpha": 100,
+ "cx": 384,
+ "cy": 0,
+ "cw": 192,
+ "ch": 192,
+ "x": 0,
+ "y": 0,
+ "w": 96,
+ "h": 96,
+ "afterfarme": 9,
+ "acx": 384,
+ "acy": 0,
+ "acw": 192,
+ "ach": 192,
+ "ax": 0,
+ "ay": 0,
+ "aw": 96,
+ "ah": 96
+ },
+ {
+ "image": "005-Attack03.webp",
+ "beforefarme": 10,
+ "globalAlpha": 100,
+ "cx": 576,
+ "cy": 0,
+ "cw": 192,
+ "ch": 192,
+ "x": 0,
+ "y": 0,
+ "w": 96,
+ "h": 96,
+ "afterfarme": 12,
+ "acx": 576,
+ "acy": 0,
+ "acw": 192,
+ "ach": 192,
+ "ax": 0,
+ "ay": 0,
+ "aw": 96,
+ "ah": 96
+ },
+ {
+ "image": "005-Attack03.webp",
+ "beforefarme": 13,
+ "globalAlpha": 100,
+ "cx": 768,
+ "cy": 0,
+ "cw": 192,
+ "ch": 192,
+ "x": 0,
+ "y": 0,
+ "w": 96,
+ "h": 96,
+ "afterfarme": 15,
+ "acx": 768,
+ "acy": 0,
+ "acw": 192,
+ "ach": 192,
+ "ax": 0,
+ "ay": 0,
+ "aw": 96,
+ "ah": 96
+ }
+ ],
+ "soundList": [
+ {
+ "sound": "",
+ "startfarme": 0,
+ "stopbefore": false
+ }
+ ]
+ },
+ {
+ "type": "setanimate",
+ "name": "012-Heal01",
+ "px": 48,
+ "py": 48,
+ "width": 192,
+ "height": 192,
+ "allFarme": 15,
+ "imageList": [
+ {
+ "image": "012-Heal01.webp",
+ "beforefarme": 0,
+ "globalAlpha": 100,
+ "cx": 0,
+ "cy": 0,
+ "cw": 192,
+ "ch": 192,
+ "x": 0,
+ "y": 0,
+ "w": 96,
+ "h": 96,
+ "afterfarme": 3,
+ "acx": 0,
+ "acy": 0,
+ "acw": 192,
+ "ach": 192,
+ "ax": 0,
+ "ay": 0,
+ "aw": 96,
+ "ah": 96
+ },
+ {
+ "image": "012-Heal01.webp",
+ "beforefarme": 4,
+ "globalAlpha": 100,
+ "cx": 192,
+ "cy": 0,
+ "cw": 192,
+ "ch": 192,
+ "x": 0,
+ "y": 0,
+ "w": 96,
+ "h": 96,
+ "afterfarme": 6,
+ "acx": 192,
+ "acy": 0,
+ "acw": 192,
+ "ach": 192,
+ "ax": 0,
+ "ay": 0,
+ "aw": 96,
+ "ah": 96
+ },
+ {
+ "image": "012-Heal01.webp",
+ "beforefarme": 7,
+ "globalAlpha": 100,
+ "cx": 384,
+ "cy": 0,
+ "cw": 192,
+ "ch": 192,
+ "x": 0,
+ "y": 0,
+ "w": 96,
+ "h": 96,
+ "afterfarme": 9,
+ "acx": 384,
+ "acy": 0,
+ "acw": 192,
+ "ach": 192,
+ "ax": 0,
+ "ay": 0,
+ "aw": 96,
+ "ah": 96
+ },
+ {
+ "image": "012-Heal01.webp",
+ "beforefarme": 10,
+ "globalAlpha": 100,
+ "cx": 576,
+ "cy": 0,
+ "cw": 192,
+ "ch": 192,
+ "x": 0,
+ "y": 0,
+ "w": 96,
+ "h": 96,
+ "afterfarme": 12,
+ "acx": 576,
+ "acy": 0,
+ "acw": 192,
+ "ach": 192,
+ "ax": 0,
+ "ay": 0,
+ "aw": 96,
+ "ah": 96
+ },
+ {
+ "image": "012-Heal01.webp",
+ "beforefarme": 13,
+ "globalAlpha": 100,
+ "cx": 768,
+ "cy": 0,
+ "cw": 192,
+ "ch": 192,
+ "x": 0,
+ "y": 0,
+ "w": 96,
+ "h": 96,
+ "afterfarme": 15,
+ "acx": 768,
+ "acy": 0,
+ "acw": 192,
+ "ach": 192,
+ "ax": 0,
+ "ay": 0,
+ "aw": 96,
+ "ah": 96
+ }
+ ],
+ "soundList": [
+ {
+ "sound": "",
+ "startfarme": 0,
+ "stopbefore": false
+ }
+ ]
+ }
+ ],
+ "chapter06": null,
+ "chapter07": null,
+ "chapter000001": [
+ {
+ "type": "changebg",
+ "img1": "",
+ "memory1": false,
+ "img2": "",
+ "memory2": false,
+ "time": 30,
+ "style": "场景切换"
+ },
+ {
+ "type": "cgtextList",
+ "textList": "chapter001"
+ },
+ {
+ "type": "cgtext",
+ "bg": "",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "0",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
+ {
+ "type": "cgtext",
+ "bg": "",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "1",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
+ {
+ "type": "cgtext",
+ "bg": "",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "2",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ },
+ {
+ "type": "cgtext",
+ "bg": "",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "3",
+ "time": 30,
+ "wait": 1000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 100,
+ "filter": false
+ }
+ ]
+ }
+ ],
+ "chapter00002": [
+ {
+ "type": "changebg",
+ "img1": "",
+ "memory1": false,
+ "img2": "bg_3531.webp",
+ "memory2": false,
+ "time": 30,
+ "style": "引入"
+ },
+ {
+ "type": "cgtextList",
+ "textList": "chapter002"
+ },
+ {
+ "type": "cgtext",
+ "bg": "bg_3531.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "0",
+ "time": 0,
+ "wait": 2000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 0,
+ "filter": false
+ }
+ ]
}
]
},
diff --git a/project/floors/KTV.js b/project/floors/KTV.js
index 163573d..4d25a2e 100644
--- a/project/floors/KTV.js
+++ b/project/floors/KTV.js
@@ -11,7 +11,189 @@ main.floors.KTV=
"images": [],
"ratio": 1,
"defaultGround": "grass",
- "firstArrive": [],
+ "firstArrive": [
+ {
+ "type": "changebg",
+ "img1": "",
+ "memory1": false,
+ "img2": "bg_3531.webp",
+ "memory2": false,
+ "time": 30,
+ "style": "引入"
+ },
+ {
+ "type": "cgtextList",
+ "textList": "chapter002"
+ },
+ {
+ "type": "cgtext",
+ "bg": "bg_3531.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "0",
+ "time": 0,
+ "wait": 2000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 0,
+ "filter": false
+ }
+ ]
+ },
+ {
+ "type": "cgtext",
+ "bg": "bg_3531.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "1",
+ "time": 0,
+ "wait": 2000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 0,
+ "filter": false
+ }
+ ]
+ },
+ {
+ "type": "cgtext",
+ "bg": "bg_3531.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "2",
+ "time": 0,
+ "wait": 2000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 0,
+ "filter": false
+ }
+ ]
+ },
+ {
+ "type": "cgtext",
+ "bg": "bg_3531.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "3",
+ "time": 0,
+ "wait": 2000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 0,
+ "filter": false
+ }
+ ]
+ },
+ {
+ "type": "cgtext",
+ "bg": "bg_3531.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "4",
+ "time": 0,
+ "wait": 2000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 0,
+ "filter": false
+ }
+ ]
+ },
+ {
+ "type": "cgtext",
+ "bg": "bg_3531.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "5",
+ "time": 0,
+ "wait": 2000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 0,
+ "filter": false
+ }
+ ]
+ },
+ {
+ "type": "cgtext",
+ "bg": "bg_3531.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "6",
+ "time": 0,
+ "wait": 2000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 0,
+ "filter": false
+ }
+ ]
+ },
+ {
+ "type": "cgtext",
+ "bg": "bg_3531.webp",
+ "memory": false,
+ "WindowSkin": false,
+ "head": {
+ "name": "",
+ "px": -300
+ },
+ "index": "7",
+ "time": 0,
+ "wait": 2000,
+ "bodyList": [
+ {
+ "name": "",
+ "px": 0,
+ "filter": false
+ }
+ ]
+ },
+ {
+ "type": "setHeroOpacity",
+ "opacity": 1
+ },
+ {
+ "type": "setCurtain",
+ "time": 1000
+ }
+ ],
"eachArrive": [],
"parallelDo": "",
"events": {},
@@ -47,7 +229,7 @@ main.floors.KTV=
[ 17,71797,71797,71797,71797,71797,71797,71797,71797,71797, 90, 17, 0],
[ 17,90211,90211,90211,90211,71877,90211,90211, 0,90587, 0, 17, 0],
[ 17,90541,90542,90543, 17,71761, 17, 17,71288,71116, 0, 17, 0],
- [ 17, 0,30216, 0, 0, 0, 0, 0, 0,71257, 0, 17, 0],
+ [ 17, 0,30216, 0, 0,123, 0, 0, 0,71257, 0, 17, 0],
[ 17, 0, 0, 0,71568,71754,20167, 0, 0,71265, 0, 17, 0],
[ 17, 0, 0, 0,71887, 0, 0, 0,60160,71265, 0, 17, 0],
[ 17,71340, 17, 17, 0, 0, 0, 17, 17,70568, 0,71796,71797],
diff --git a/project/floors/changguan1.js b/project/floors/changguan1.js
index a971ace..d9960dd 100644
--- a/project/floors/changguan1.js
+++ b/project/floors/changguan1.js
@@ -11,7 +11,36 @@ main.floors.changguan1=
"images": [],
"ratio": 1,
"defaultGround": "grass2",
- "firstArrive": [],
+ "firstArrive": [
+ {
+ "type": "setCurtain",
+ "time": 1000
+ },
+ {
+ "type": "autoText",
+ "text": "通称——",
+ "time": 2000
+ },
+ {
+ "type": "setCurtain",
+ "color": [
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ "time": 1000,
+ "keep": true
+ },
+ {
+ "type": "changeFloor",
+ "floorId": "changguan2",
+ "loc": [
+ 0,
+ 0
+ ]
+ }
+ ],
"eachArrive": [],
"parallelDo": "",
"events": {},
diff --git a/project/floors/changguan2.js b/project/floors/changguan2.js
index 83991f9..05464ca 100644
--- a/project/floors/changguan2.js
+++ b/project/floors/changguan2.js
@@ -11,7 +11,36 @@ main.floors.changguan2=
"images": [],
"ratio": 1,
"defaultGround": "X20003",
- "firstArrive": [],
+ "firstArrive": [
+ {
+ "type": "setCurtain",
+ "time": 1000
+ },
+ {
+ "type": "autoText",
+ "text": "《牢狱》",
+ "time": 2000
+ },
+ {
+ "type": "setCurtain",
+ "color": [
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ "time": 1000,
+ "keep": true
+ },
+ {
+ "type": "changeFloor",
+ "floorId": "KTV",
+ "loc": [
+ 10,
+ 8
+ ]
+ }
+ ],
"eachArrive": [],
"parallelDo": "",
"events": {},
diff --git a/project/floors/guangchang.js b/project/floors/guangchang.js
index e37a32b..d2eda6c 100644
--- a/project/floors/guangchang.js
+++ b/project/floors/guangchang.js
@@ -11,7 +11,250 @@ main.floors.guangchang=
"images": [],
"ratio": 1,
"defaultGround": "X90078",
- "firstArrive": [],
+ "firstArrive": [
+ {
+ "type": "setCurtain",
+ "time": 1000
+ },
+ {
+ "type": "setText",
+ "position": "center"
+ },
+ {
+ "type": "move",
+ "loc": [
+ 6,
+ 7
+ ],
+ "time": 500,
+ "keep": true,
+ "async": true,
+ "steps": [
+ "up:1",
+ "left:1",
+ "up:2"
+ ]
+ },
+ {
+ "type": "sleep",
+ "time": 400
+ },
+ {
+ "type": "move",
+ "loc": [
+ 8,
+ 8
+ ],
+ "time": 500,
+ "keep": true,
+ "async": true,
+ "steps": [
+ "up:1",
+ "left:2"
+ ]
+ },
+ {
+ "type": "sleep",
+ "time": 500
+ },
+ {
+ "type": "move",
+ "loc": [
+ 4,
+ 9
+ ],
+ "time": 500,
+ "keep": true,
+ "steps": [
+ "right:1"
+ ]
+ },
+ {
+ "type": "waitAsync"
+ },
+ {
+ "type": "autoText",
+ "text": "浮游都市,《诺瓦斯·艾蒂尔》。",
+ "time": 2000
+ },
+ {
+ "type": "move",
+ "loc": [
+ 6,
+ 5
+ ],
+ "time": 500,
+ "keep": true,
+ "async": true,
+ "steps": [
+ "up:2"
+ ]
+ },
+ {
+ "type": "move",
+ "loc": [
+ 6,
+ 7
+ ],
+ "time": 500,
+ "keep": true,
+ "steps": [
+ "up:1"
+ ]
+ },
+ {
+ "type": "waitAsync"
+ },
+ {
+ "type": "sleep",
+ "time": 2000
+ },
+ {
+ "type": "move",
+ "loc": [
+ 6,
+ 3
+ ],
+ "time": 500,
+ "async": true,
+ "steps": [
+ "down:9"
+ ]
+ },
+ {
+ "type": "move",
+ "loc": [
+ 5,
+ 4
+ ],
+ "time": 500,
+ "keep": true,
+ "async": true,
+ "steps": [
+ "up:1",
+ "right:1"
+ ]
+ },
+ {
+ "type": "move",
+ "loc": [
+ 6,
+ 6
+ ],
+ "time": 300,
+ "keep": true,
+ "async": true,
+ "steps": [
+ "right:2"
+ ]
+ },
+ {
+ "type": "sleep",
+ "time": 1000
+ },
+ {
+ "type": "move",
+ "loc": [
+ 8,
+ 6
+ ],
+ "time": 500,
+ "keep": true,
+ "steps": [
+ "left:1"
+ ]
+ },
+ {
+ "type": "sleep",
+ "time": 2000
+ },
+ {
+ "type": "waitAsync"
+ },
+ {
+ "type": "jump",
+ "from": [
+ 7,
+ 6
+ ],
+ "to": [
+ 7,
+ 6
+ ],
+ "time": 500,
+ "keep": true,
+ "async": true
+ },
+ {
+ "type": "move",
+ "loc": [
+ 6,
+ 3
+ ],
+ "time": 500,
+ "async": true,
+ "steps": [
+ "up:2"
+ ]
+ },
+ {
+ "type": "move",
+ "loc": [
+ 7,
+ 9
+ ],
+ "time": 500,
+ "async": true,
+ "steps": [
+ "up:1",
+ "right:3"
+ ]
+ },
+ {
+ "type": "setCurtain",
+ "color": [
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ "time": 1000,
+ "keep": true
+ },
+ {
+ "type": "waitAsync"
+ },
+ {
+ "type": "setBlock",
+ "number": "0",
+ "loc": [
+ [
+ 5,
+ 9
+ ],
+ [
+ 7,
+ 6
+ ],
+ [
+ 4,
+ 4
+ ],
+ [
+ 6,
+ 3
+ ]
+ ]
+ },
+ {
+ "type": "changeFloor",
+ "floorId": "guangchang2",
+ "loc": [
+ 0,
+ 0
+ ]
+ }
+ ],
"eachArrive": [],
"parallelDo": "",
"events": {},
@@ -50,13 +293,13 @@ main.floors.guangchang=
[120007,120007,120007,120007,120020, 0, 91, 0, 0,130187,130188,130189,130190],
[120015,120015,120015,120015,120028, 0, 0, 0, 0,120144,120145,120146,120147],
[130172,130173,130174,130175, 0, 0, 0, 0,71320,120152,120153,120154,120155],
- [130180,130181,130182,130183,200199, 0, 0, 0,71328,120160,120161,120162,120163],
- [130188,130189,130190,130191, 0, 0, 0, 0,71336,120168,120169,120170,120171],
- [130196,130197,130198,130199,140087, 0, 0, 0, 0,120176,140020,140020,140020],
+ [130180,130181,130182,130183,200199, 0, 0,122,71328,120160,120161,120162,120163],
+ [130188,130189,130190,130191,121, 0, 0, 0,71336,120168,120169,120170,120171],
+ [130196,130197,130198,130199,140087, 0,121, 0, 0,120176,140020,140020,140020],
[130204, 0,130206,130207,140095, 0, 0, 0, 0, 0,140028,140028,140028],
- [ 0, 0,130214,130215,140103, 0, 0, 0, 0, 0, 0, 0, 0],
- [ 0, 0,130214,120172,140111, 0, 0, 0, 0, 0, 0, 0, 94],
- [ 0, 0, 0,120180, 0, 0, 0, 0, 0,200199, 0, 0, 0],
+ [ 0, 0,130214,130215,140103, 0,121, 0, 0, 0, 0, 0, 0],
+ [ 0, 0,130214,120172,140111, 0, 0, 0,123, 0, 0, 0, 94],
+ [ 0, 0, 0,120180,121, 0, 0,121, 0,200199, 0, 0, 0],
[140107,140108,140109,362,363, 0, 0, 0,361,362,362,362,362],
[210186,210186,210186,210186,210179, 0, 0, 0,210179,210185,210186,210186,210186],
[210178,210178,210178,210178,210171, 0, 93, 0,210171,210177,210178,210178,210178]
diff --git a/project/floors/guangchang2.js b/project/floors/guangchang2.js
index 8d4286f..075f31b 100644
--- a/project/floors/guangchang2.js
+++ b/project/floors/guangchang2.js
@@ -11,7 +11,35 @@ main.floors.guangchang2=
"images": [],
"ratio": 1,
"defaultGround": "X90078",
- "firstArrive": [],
+ "firstArrive": [
+ {
+ "type": "setCurtain",
+ "time": 1000
+ },
+ {
+ "type": "sleep",
+ "time": 2000
+ },
+ {
+ "type": "setCurtain",
+ "color": [
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ "time": 1000,
+ "keep": true
+ },
+ {
+ "type": "changeFloor",
+ "floorId": "guangchang5",
+ "loc": [
+ 0,
+ 0
+ ]
+ }
+ ],
"eachArrive": [],
"parallelDo": "",
"events": {},
diff --git a/project/floors/guangchang3.js b/project/floors/guangchang3.js
index 57aedab..d26c896 100644
--- a/project/floors/guangchang3.js
+++ b/project/floors/guangchang3.js
@@ -11,7 +11,35 @@ main.floors.guangchang3=
"images": [],
"ratio": 1,
"defaultGround": "X90078",
- "firstArrive": [],
+ "firstArrive": [
+ {
+ "type": "setCurtain",
+ "time": 1000
+ },
+ {
+ "type": "sleep",
+ "time": 2000
+ },
+ {
+ "type": "setCurtain",
+ "color": [
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ "time": 1000,
+ "keep": true
+ },
+ {
+ "type": "changeFloor",
+ "floorId": "guangchang4",
+ "loc": [
+ 0,
+ 0
+ ]
+ }
+ ],
"eachArrive": [],
"parallelDo": "",
"events": {},
diff --git a/project/floors/guangchang4.js b/project/floors/guangchang4.js
index dce94bd..c94cccf 100644
--- a/project/floors/guangchang4.js
+++ b/project/floors/guangchang4.js
@@ -11,7 +11,36 @@ main.floors.guangchang4=
"images": [],
"ratio": 1,
"defaultGround": "X90078",
- "firstArrive": [],
+ "firstArrive": [
+ {
+ "type": "setCurtain",
+ "time": 1000
+ },
+ {
+ "type": "autoText",
+ "text": "是被险峻的峭壁环绕,与世隔绝的,都市的最底部",
+ "time": 2000
+ },
+ {
+ "type": "setCurtain",
+ "color": [
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ "time": 1000,
+ "keep": true
+ },
+ {
+ "type": "changeFloor",
+ "floorId": "changguan1",
+ "loc": [
+ 0,
+ 0
+ ]
+ }
+ ],
"eachArrive": [],
"parallelDo": "",
"events": {},
diff --git a/project/floors/guangchang5.js b/project/floors/guangchang5.js
index 6bdd243..5ff68fb 100644
--- a/project/floors/guangchang5.js
+++ b/project/floors/guangchang5.js
@@ -11,7 +11,36 @@ main.floors.guangchang5=
"images": [],
"ratio": 1,
"defaultGround": "X90078",
- "firstArrive": [],
+ "firstArrive": [
+ {
+ "type": "setCurtain",
+ "time": 1000
+ },
+ {
+ "type": "autoText",
+ "text": "《特别受灾地区》——",
+ "time": 2000
+ },
+ {
+ "type": "setCurtain",
+ "color": [
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ "time": 1000,
+ "keep": true
+ },
+ {
+ "type": "changeFloor",
+ "floorId": "guangchang3",
+ "loc": [
+ 0,
+ 0
+ ]
+ }
+ ],
"eachArrive": [],
"parallelDo": "",
"events": {},
diff --git a/project/floors/jiaocheng01.js b/project/floors/jiaocheng01.js
new file mode 100644
index 0000000..7e78739
--- /dev/null
+++ b/project/floors/jiaocheng01.js
@@ -0,0 +1,77 @@
+main.floors.jiaocheng01=
+{
+ "floorId": "jiaocheng01",
+ "title": "广场",
+ "name": "1",
+ "width": 13,
+ "height": 13,
+ "canFlyTo": true,
+ "canFlyFrom": true,
+ "canUseQuickShop": true,
+ "images": [],
+ "ratio": 1,
+ "defaultGround": "X90078",
+ "firstArrive": [],
+ "eachArrive": [],
+ "parallelDo": "",
+ "events": {
+ "0,11": [
+ "宝石介绍:攻防法速\n加点量:2/2/5/2"
+ ],
+ "12,11": [
+ "血瓶介绍:不同大小"
+ ]
+ },
+ "changeFloor": {
+ "6,0": {
+ "floorId": "jiaocheng02",
+ "loc": [
+ 6,
+ 12
+ ]
+ }
+ },
+ "beforeBattle": {},
+ "afterBattle": {},
+ "afterGetItem": {
+ "6,9": [
+ "\t[黄钥匙,yellowKey]可以打开一扇黄门,使用后会消失"
+ ]
+ },
+ "afterOpenDoor": {
+ "8,10": [
+ "\t[黄门,yellowDoor]消耗一把黄钥匙"
+ ]
+ },
+ "autoEvent": {},
+ "cannotMove": {},
+ "cannotMoveIn": {},
+ "map": [
+ [ 1, 1, 1, 1, 1, 1, 91, 1, 1, 1, 1, 1, 1],
+ [ 1, 22, 0, 1, 22, 1, 0, 1, 0, 0, 23, 22, 1],
+ [ 1, 21, 0, 1, 81, 1, 84, 1, 83, 1, 1, 1, 1],
+ [ 1, 82, 1, 1, 0, 0, 0, 81, 0, 83, 0, 24, 1],
+ [ 1, 0, 0, 82, 0, 1, 81, 1, 82, 1, 1, 1, 1],
+ [ 1, 21, 1, 1, 0, 1, 22, 1, 0, 0, 21, 23, 1],
+ [ 1, 1, 1, 1, 83, 1, 1, 1, 1, 1, 1, 1, 1],
+ [ 27, 0, 28, 1, 0, 0, 82, 0, 22, 1, 31, 0, 32],
+ [ 0, 0, 0, 1, 21, 1, 1, 1, 0, 1, 0, 0, 0],
+ [ 29, 0, 30, 1, 23, 1, 21, 1, 0, 1, 34, 0, 33],
+ [ 1, 1, 1, 1, 1, 1, 0, 1, 81, 1, 1, 1, 1],
+ [129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129],
+ [ 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1]
+],
+ "areas": "牢狱",
+ "bgmap": [
+
+],
+ "fgmap": [
+
+],
+ "bg2map": [
+
+],
+ "fg2map": [
+
+]
+}
\ No newline at end of file
diff --git a/project/floors/jiaocheng02.js b/project/floors/jiaocheng02.js
new file mode 100644
index 0000000..9d5616e
--- /dev/null
+++ b/project/floors/jiaocheng02.js
@@ -0,0 +1,72 @@
+main.floors.jiaocheng02=
+{
+ "floorId": "jiaocheng02",
+ "title": "广场",
+ "name": "1",
+ "width": 13,
+ "height": 13,
+ "canFlyTo": true,
+ "canFlyFrom": true,
+ "canUseQuickShop": true,
+ "images": [],
+ "ratio": 1,
+ "defaultGround": "X90078",
+ "firstArrive": [],
+ "eachArrive": [],
+ "parallelDo": "",
+ "events": {
+ "5,11": [
+ "教程初始属性:\n1000HP,30攻击,20防御,20速度,20法强(*100%=20护盾)\n绿血瓶此处900,红血瓶100"
+ ],
+ "0,0": [
+ "匕首:速度+20"
+ ],
+ "12,0": [
+ "法杖:魔攻比例10%,魔防比例0%"
+ ]
+ },
+ "changeFloor": {
+ "6,12": {
+ "floorId": "jiaocheng01",
+ "loc": [
+ 6,
+ 0
+ ]
+ }
+ },
+ "beforeBattle": {},
+ "afterBattle": {},
+ "afterGetItem": {},
+ "afterOpenDoor": {},
+ "autoEvent": {},
+ "cannotMove": {},
+ "cannotMoveIn": {},
+ "map": [
+ [129, 1, 27, 1, 28, 1, 91, 1, 29, 1, 30, 1,129],
+ [ 70, 1, 82, 1, 82, 1,236, 1, 82, 1, 82, 1,375],
+ [ 0, 83, 0, 29, 0, 33, 0, 31, 0, 23, 0, 83, 0],
+ [ 1, 1, 1, 1, 1, 1,219, 1, 1, 1, 1, 1, 1],
+ [ 0, 22, 0, 31, 0, 31, 0, 1, 27, 1, 30, 1, 30],
+ [ 81, 1, 81, 1, 81, 1, 22, 1, 27, 1, 30, 1, 27],
+ [ 29, 1, 31, 1, 31, 1,218, 1, 82, 1, 82, 1, 82],
+ [ 28, 1, 28, 1, 29, 1, 0, 81, 0, 33, 0, 21, 0],
+ [ 1, 1, 1, 1, 1, 1,240, 1, 1, 1, 1, 1, 1],
+ [ 0, 33, 0, 21, 0, 29, 0, 1, 27, 1, 28, 1, 31],
+ [ 83, 1, 83, 1, 83, 1,204, 1, 81, 1, 81, 1, 81],
+ [ 28, 1, 30, 1, 27,129, 0,204, 0, 33, 0, 23, 0],
+ [ 1, 1, 1, 1, 1, 1, 93, 1, 1, 1, 1, 1, 1]
+],
+ "areas": "牢狱",
+ "bgmap": [
+
+],
+ "fgmap": [
+
+],
+ "bg2map": [
+
+],
+ "fg2map": [
+
+]
+}
\ No newline at end of file
diff --git a/project/floors/xiaoxiang01.js b/project/floors/xiaoxiang01.js
index 2e55dad..85f6bd0 100644
--- a/project/floors/xiaoxiang01.js
+++ b/project/floors/xiaoxiang01.js
@@ -55,9 +55,9 @@ main.floors.xiaoxiang01=
[120147, 0, 32, 0,200199, 0,201029,225,110132,224, 0, 0,90675],
[120164,225,200998,200999,201037, 81,201029, 0, 0, 0,110116, 0, 94],
[120172, 0,222, 0,221, 0,201029, 81,110116,225,110137,110138,90650],
- [120180,201037,201037, 81,201037,201037,201037, 0,110124, 0, 81, 31,90658],
+ [120180,201037,201037, 81,201037,201037,201037,246,110124, 0, 81, 31,90658],
[ 92, 32, 32, 22, 21,80089, 31, 0,110132, 0,110122,110122,110197],
- [140,110191, 21, 21, 21,80089, 0, 0, 81, 0,222, 29,110197],
+ [140,110191, 21, 21, 21,80089, 0,246, 81, 0,222, 29,110197],
[140,140,140,110191,80083,80097, 93,110138,110138,140189,140,140,140]
],
"areas": "牢狱",
diff --git a/project/floors/yiqu7.js b/project/floors/yiqu7.js
index d47401f..e2e082b 100644
--- a/project/floors/yiqu7.js
+++ b/project/floors/yiqu7.js
@@ -1,29 +1,29 @@
main.floors.yiqu7=
{
-"floorId": "yiqu7",
-"title": "主塔 7 层",
-"name": "7",
-"width": 13,
-"height": 13,
-"canFlyTo": true,
-"canFlyFrom": true,
-"canUseQuickShop": true,
-"images": [],
-"ratio": 1,
-"defaultGround": "grass2",
-"firstArrive": [],
-"eachArrive": [],
-"parallelDo": "",
-"events": {},
-"changeFloor": {},
-"beforeBattle": {},
-"afterBattle": {},
-"afterGetItem": {},
-"afterOpenDoor": {},
-"autoEvent": {},
-"cannotMove": {},
-"cannotMoveIn": {},
-"map": [
+ "floorId": "yiqu7",
+ "title": "主塔 7 层",
+ "name": "7",
+ "width": 13,
+ "height": 13,
+ "canFlyTo": true,
+ "canFlyFrom": true,
+ "canUseQuickShop": true,
+ "images": [],
+ "ratio": 1,
+ "defaultGround": "grass2",
+ "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],
@@ -38,4 +38,16 @@ main.floors.yiqu7=
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
],
+ "bgmap": [
+
+],
+ "fgmap": [
+
+],
+ "bg2map": [
+
+],
+ "fg2map": [
+
+]
}
\ No newline at end of file
diff --git a/project/functions.js b/project/functions.js
index a9ae699..459927d 100644
--- a/project/functions.js
+++ b/project/functions.js
@@ -82,168 +82,168 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
});
},
"lose": function (reason) {
- // 游戏失败事件
- core.ui.closePanel();
- var replaying = core.isReplaying();
- core.stopReplay();
- core.waitHeroToStop(function () {
- core.drawText(
- ["\t[" + (reason || "结局1") + "]你死了。\n如题。"],
- function () {
- core.events.gameOver(null, replaying);
- }
- );
- });
- },
+ // 游戏失败事件
+ core.ui.closePanel();
+ var replaying = core.isReplaying();
+ core.stopReplay();
+ core.waitHeroToStop(function () {
+ core.drawText(
+ ["\t[" + (reason || "结局1") + "]你死了。\n如题。"],
+ function () {
+ core.events.gameOver(null, replaying);
+ }
+ );
+ });
+},
"changingFloor": function (floorId, heroLoc) {
- // 正在切换楼层过程中执行的操作;此函数的执行时间是“屏幕完全变黑“的那一刻
- // floorId为要切换到的楼层ID;heroLoc表示勇士切换到的位置
+ // 正在切换楼层过程中执行的操作;此函数的执行时间是“屏幕完全变黑“的那一刻
+ // floorId为要切换到的楼层ID;heroLoc表示勇士切换到的位置
- // ---------- 此时还没有进行切换,当前floorId还是原来的 ---------- //
- var currentId = core.status.floorId || null; // 获得当前的floorId,可能为null
- var fromLoad = core.hasFlag("__fromLoad__"); // 是否是读档造成的切换
- var isFlying = core.hasFlag("__isFlying__"); // 是否是楼传造成的切换
- if (!fromLoad && !(isFlying && currentId == floorId)) {
- if (!core.hasFlag("__leaveLoc__")) core.setFlag("__leaveLoc__", {});
- if (currentId != null)
- core.getFlag("__leaveLoc__")[currentId] = core.clone(
- core.status.hero.loc
- );
- }
+ // ---------- 此时还没有进行切换,当前floorId还是原来的 ---------- //
+ var currentId = core.status.floorId || null; // 获得当前的floorId,可能为null
+ var fromLoad = core.hasFlag("__fromLoad__"); // 是否是读档造成的切换
+ var isFlying = core.hasFlag("__isFlying__"); // 是否是楼传造成的切换
+ if (!fromLoad && !(isFlying && currentId == floorId)) {
+ if (!core.hasFlag("__leaveLoc__")) core.setFlag("__leaveLoc__", {});
+ if (currentId != null)
+ core.getFlag("__leaveLoc__")[currentId] = core.clone(
+ core.status.hero.loc
+ );
+ }
- // 可以对currentId进行判定,比如删除某些自定义图层等
- // if (currentId == 'MT0') {
- // core.deleteAllCanvas();
- // }
+ // 可以对currentId进行判定,比如删除某些自定义图层等
+ // if (currentId == 'MT0') {
+ // core.deleteAllCanvas();
+ // }
- // 根据分区信息自动砍层与恢复
- if (core.autoRemoveMaps) core.autoRemoveMaps(floorId);
+ // 根据分区信息自动砍层与恢复
+ if (core.autoRemoveMaps) core.autoRemoveMaps(floorId);
- // 重置画布尺寸
- core.maps.resizeMap(floorId);
- // 设置勇士的位置
- heroLoc.direction = core.turnDirection(heroLoc.direction);
- core.status.hero.loc = heroLoc;
- // 检查重生怪并重置
- if (!fromLoad) {
- core.extractBlocks(floorId);
- core.status.maps[floorId].blocks.forEach(function (block) {
- if (block.disable && core.enemys.hasSpecial(block.event.id, 23)) {
- block.disable = false;
- core.setMapBlockDisabled(floorId, block.x, block.y, false);
- core.maps._updateMapArray(floorId, block.x, block.y);
- }
- });
- core.control.gatherFollowers();
- }
+ // 重置画布尺寸
+ core.maps.resizeMap(floorId);
+ // 设置勇士的位置
+ heroLoc.direction = core.turnDirection(heroLoc.direction);
+ core.status.hero.loc = heroLoc;
+ // 检查重生怪并重置
+ if (!fromLoad) {
+ core.extractBlocks(floorId);
+ core.status.maps[floorId].blocks.forEach(function (block) {
+ if (block.disable && core.enemys.hasSpecial(block.event.id, 23)) {
+ block.disable = false;
+ core.setMapBlockDisabled(floorId, block.x, block.y, false);
+ core.maps._updateMapArray(floorId, block.x, block.y);
+ }
+ });
+ core.control.gatherFollowers();
+ }
- // ---------- 重绘新地图;这一步将会设置core.status.floorId ---------- //
- core.drawMap(floorId);
+ // ---------- 重绘新地图;这一步将会设置core.status.floorId ---------- //
+ core.drawMap(floorId);
- // 切换楼层BGM
- if (core.status.maps[floorId].bgm) {
- var bgm = core.status.maps[floorId].bgm;
- if (bgm instanceof Array)
- bgm = bgm[Math.floor(Math.random() * bgm.length)]; // 多个bgm则随机播放一个
- if (!core.hasFlag("__bgm__")) core.playBgm(bgm);
- } else if (fromLoad && !core.hasFlag("__bgm__")) {
- core.pauseBgm();
- }
- // 更改画面色调
- var color = core.getFlag("__color__", null);
- if (!color && core.status.maps[floorId].color)
- color = core.status.maps[floorId].color;
- core.clearMap("curtain");
- core.status.curtainColor = color;
- if (color)
- core.fillRect(
- "curtain",
- 0,
- 0,
- core._PX_ || core.__PIXELS__,
- core._PY_ || core.__PIXELS__,
- core.arrayToRGBA(color)
- );
- // 更改天气
- var weather = core.getFlag("__weather__", null);
- if (!weather && core.status.maps[floorId].weather)
- weather = core.status.maps[floorId].weather;
- if (weather) core.setWeather(weather[0], weather[1]);
- else core.setWeather();
+ // 切换楼层BGM
+ if (core.status.maps[floorId].bgm) {
+ var bgm = core.status.maps[floorId].bgm;
+ if (bgm instanceof Array)
+ bgm = bgm[Math.floor(Math.random() * bgm.length)]; // 多个bgm则随机播放一个
+ if (!core.hasFlag("__bgm__")) core.playBgm(bgm);
+ } else if (fromLoad && !core.hasFlag("__bgm__")) {
+ core.pauseBgm();
+ }
+ // 更改画面色调
+ var color = core.getFlag("__color__", null);
+ if (!color && core.status.maps[floorId].color)
+ color = core.status.maps[floorId].color;
+ core.clearMap("curtain");
+ core.status.curtainColor = color;
+ if (color)
+ core.fillRect(
+ "curtain",
+ 0,
+ 0,
+ core._PX_ || core.__PIXELS__,
+ core._PY_ || core.__PIXELS__,
+ core.arrayToRGBA(color)
+ );
+ // 更改天气
+ var weather = core.getFlag("__weather__", null);
+ if (!weather && core.status.maps[floorId].weather)
+ weather = core.status.maps[floorId].weather;
+ if (weather) core.setWeather(weather[0], weather[1]);
+ else core.setWeather();
- // ...可以新增一些其他内容,比如创建个画布在右上角显示什么内容等等
- },
+ // ...可以新增一些其他内容,比如创建个画布在右上角显示什么内容等等
+},
"afterChangeFloor": function (floorId) {
- // 转换楼层结束的事件;此函数会在整个楼层切换完全结束后再执行
- // floorId是切换到的楼层
+ // 转换楼层结束的事件;此函数会在整个楼层切换完全结束后再执行
+ // floorId是切换到的楼层
- // 如果是读档,则进行检查(是否需要恢复事件)
- if (core.hasFlag("__fromLoad__")) {
- core.events.recoverEvents(core.getFlag("__events__"));
- core.removeFlag("__events__");
- } else {
- // 每次抵达楼层执行的事件
- core.insertAction(core.floors[floorId].eachArrive);
- core.ui.statusBar._update_map();
- // 首次抵达楼层时执行的事件(后插入,先执行)
- if (!core.hasVisitedFloor(floorId)) {
- core.insertAction(core.floors[floorId].firstArrive);
- core.visitFloor(floorId);
- core.plugin.bfs();
- }
- }
- },
+ // 如果是读档,则进行检查(是否需要恢复事件)
+ if (core.hasFlag("__fromLoad__")) {
+ core.events.recoverEvents(core.getFlag("__events__"));
+ core.removeFlag("__events__");
+ } else {
+ // 每次抵达楼层执行的事件
+ core.insertAction(core.floors[floorId].eachArrive);
+ core.ui.statusBar._update_map();
+ // 首次抵达楼层时执行的事件(后插入,先执行)
+ if (!core.hasVisitedFloor(floorId)) {
+ core.insertAction(core.floors[floorId].firstArrive);
+ core.visitFloor(floorId);
+ core.plugin.bfs();
+ }
+ }
+},
"flyTo": function (toId, callback) {
- // 楼层传送器的使用,从当前楼层飞往toId
- // 如果不能飞行请返回false
+ // 楼层传送器的使用,从当前楼层飞往toId
+ // 如果不能飞行请返回false
- var fromId = core.status.floorId;
+ var fromId = core.status.floorId;
- // 检查能否飞行
- if (
- !core.status.maps[fromId].canFlyFrom ||
- !core.status.maps[toId].canFlyTo ||
- !core.hasVisitedFloor(toId)
- ) {
- core.playSound("操作失败");
- core.drawTip("无法飞往" + core.status.maps[toId].title + "!", "fly");
- return false;
- }
+ // 检查能否飞行
+ if (
+ !core.status.maps[fromId].canFlyFrom ||
+ !core.status.maps[toId].canFlyTo ||
+ !core.hasVisitedFloor(toId)
+ ) {
+ core.playSound("操作失败");
+ core.drawTip("无法飞往" + core.status.maps[toId].title + "!", "fly");
+ return false;
+ }
- // 平面塔模式
- var stair = null,
- loc = null;
- if (core.flags.flyRecordPosition) {
- loc = core.getFlag("__leaveLoc__", {})[toId] || null;
- }
- if (
- core.status.maps[toId].flyPoint != null &&
- core.status.maps[toId].flyPoint.length == 2
- ) {
- stair = "flyPoint";
- }
- if (stair == null && loc == null) {
- // 获得两个楼层的索引,以决定是上楼梯还是下楼梯
- var fromIndex = core.floorIds.indexOf(fromId),
- toIndex = core.floorIds.indexOf(toId);
- var stair = fromIndex <= toIndex ? "downFloor" : "upFloor";
- // 地下层:同层传送至上楼梯
- if (fromIndex == toIndex && core.status.maps[fromId].underGround)
- stair = "upFloor";
- }
+ // 平面塔模式
+ var stair = null,
+ loc = null;
+ if (core.flags.flyRecordPosition) {
+ loc = core.getFlag("__leaveLoc__", {})[toId] || null;
+ }
+ if (
+ core.status.maps[toId].flyPoint != null &&
+ core.status.maps[toId].flyPoint.length == 2
+ ) {
+ stair = "flyPoint";
+ }
+ if (stair == null && loc == null) {
+ // 获得两个楼层的索引,以决定是上楼梯还是下楼梯
+ var fromIndex = core.floorIds.indexOf(fromId),
+ toIndex = core.floorIds.indexOf(toId);
+ var stair = fromIndex <= toIndex ? "downFloor" : "upFloor";
+ // 地下层:同层传送至上楼梯
+ if (fromIndex == toIndex && core.status.maps[fromId].underGround)
+ stair = "upFloor";
+ }
- // 记录录像
- core.status.route.push("fly:" + toId);
- // 传送
- core.ui.closePanel();
- core.setFlag("__isFlying__", true);
- core.changeFloor(toId, stair, loc, null, function () {
- core.removeFlag("__isFlying__");
- if (callback) callback();
- });
+ // 记录录像
+ core.status.route.push("fly:" + toId);
+ // 传送
+ core.ui.closePanel();
+ core.setFlag("__isFlying__", true);
+ core.changeFloor(toId, stair, loc, null, function () {
+ core.removeFlag("__isFlying__");
+ if (callback) callback();
+ });
- return true;
- },
+ return true;
+},
"beforeBattle": function (enemyId, x, y) {
// 战斗前触发的事件,可以加上一些战前特效(详见下面支援的例子)
// 此函数在“检测能否战斗和自动存档”【之后】执行。如果需要更早的战前事件,请在插件中覆重写 core.events.doSystemEvent 函数。
@@ -282,32 +282,43 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
return true;
},
- "afterBattle": function (enemyId, x, y) {
+ "afterBattle": async function (enemyId, x, y) {
// 战斗结束后触发的事件
-
- var enemy = core.material.enemys[enemyId];
+ var enemy = core.getEnemyInfo(enemyId, hero, x, y)
var special = enemy.special;
-
// 播放战斗音效和动画
// 默认播放的动画;你也可以使用
- var animate = "hand"; // 默认动画
+ var animate = 'hand'; // 默认动画
// 检查当前装备是否存在攻击动画
var equipId = core.getEquip(0);
if (equipId && (core.material.items[equipId].equip || {}).animate)
animate = core.material.items[equipId].equip.animate;
// 你也可以在这里根据自己的需要,比如enemyId或special或flag来修改播放的动画效果
// if (enemyId == '...') animate = '...';
+ if (core.getFlag('noAnimate')) {
+ // 检查该动画是否存在SE,如果不存在则使用默认音效
+ if (!(core.material.animates[animate] || {}).se)
+ core.playSound('attack.mp3');
- // 检查该动画是否存在SE,如果不存在则使用默认音效
- if (!(core.material.animates[animate] || {}).se)
- core.playSound("attack.opus");
-
- // 播放动画;如果不存在坐标(强制战斗)则播放到勇士自身
- if (x != null && y != null) core.drawAnimate(animate, x, y);
- else core.drawHeroAnimate(animate);
-
+ // 播放动画;如果不存在坐标(强制战斗)则播放到勇士自身
+ if (x != null && y != null)
+ core.drawAnimate(animate, x, y);
+ else
+ core.drawHeroAnimate(animate);
+ }
// 获得战斗伤害信息
var damageInfo = core.getDamageInfo(enemyId, null, x, y) || {};
+ if ((!core.getFlag("noAnimate") || damageInfo.damage >= core.status.hero.hp) && (!main.replayChecking && !core.isReplaying())) await core.attackAnimate(
+ enemyId,
+ damageInfo.start[0],
+ damageInfo.start[1],
+ damageInfo.start[2],
+ damageInfo.start[3],
+ damageInfo.heroDiffList,
+ damageInfo.enemyDiffList,
+ damageInfo.heroanimateList,
+ damageInfo.enemyanimateList
+ )
// 战斗伤害
var damage = damageInfo.damage;
// 当前战斗回合数,可用于战后所需的判定
@@ -316,7 +327,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
if (damage == null || damage >= core.status.hero.hp) {
core.status.hero.hp = 0;
core.updateStatusBar(false, true);
- core.events.lose("战斗失败");
+ core.events.lose('战斗失败');
return;
}
@@ -336,8 +347,8 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
var money = guards.reduce(function (curr, g) {
return curr + core.material.enemys[g[2]].money;
}, core.getEnemyValue(enemy, "money", x, y));
- if (core.hasItem("coin")) money *= 2; // 幸运金币:双倍
- if (core.hasFlag("curse")) money = 0; // 诅咒效果
+ if (core.hasItem('coin')) money *= 2; // 幸运金币:双倍
+ if (core.hasFlag('curse')) money = 0; // 诅咒效果
core.status.hero.money += money;
core.status.hero.statistics.money += money;
@@ -345,32 +356,32 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
var exp = guards.reduce(function (curr, g) {
return curr + core.material.enemys[g[2]].exp;
}, core.getEnemyValue(enemy, "exp", x, y));
- if (core.hasFlag("curse")) exp = 0;
+ if (core.hasFlag('curse')) exp = 0;
core.status.hero.exp += exp;
core.status.hero.statistics.exp += exp;
var hint = "打败 " + core.getEnemyValue(enemy, "name", x, y);
- if (core.flags.statusBarItems.indexOf("enableMoney") >= 0)
- hint += "," + core.getStatusLabel("money") + "+" + money; // hint += ",金币+" + money;
- if (core.flags.statusBarItems.indexOf("enableExp") >= 0)
- hint += "," + core.getStatusLabel("exp") + "+" + exp; // hint += ",经验+" + exp;
+ if (core.flags.statusBarItems.indexOf('enableMoney') >= 0)
+ hint += ',' + core.getStatusLabel('money') + '+' + money; // hint += ",金币+" + money;
+ if (core.flags.statusBarItems.indexOf('enableExp') >= 0)
+ hint += ',' + core.getStatusLabel('exp') + '+' + exp; // hint += ",经验+" + exp;
core.drawTip(hint, enemy.id);
// 中毒
if (core.enemys.hasSpecial(special, 12)) {
- core.triggerDebuff("get", "poison");
+ core.triggerDebuff('get', 'poison');
}
// 衰弱
if (core.enemys.hasSpecial(special, 13)) {
- core.triggerDebuff("get", "weak");
+ core.triggerDebuff('get', 'weak');
}
// 诅咒
if (core.enemys.hasSpecial(special, 14)) {
- core.triggerDebuff("get", "curse");
+ core.triggerDebuff('get', 'curse');
}
// 仇恨怪物将仇恨值减半
if (core.enemys.hasSpecial(special, 17)) {
- core.setFlag("hatred", Math.floor(core.getFlag("hatred", 0) / 2));
+ core.setFlag('hatred', Math.floor(core.getFlag('hatred', 0) / 2));
}
// 自爆
if (core.enemys.hasSpecial(special, 19)) {
@@ -379,45 +390,41 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
}
// 退化
if (core.enemys.hasSpecial(special, 21)) {
- core.status.hero.atk -= enemy.atkValue || 0;
- core.status.hero.def -= enemy.defValue || 0;
+ core.status.hero.atk -= (enemy.atkValue || 0);
+ core.status.hero.def -= (enemy.defValue || 0);
if (core.status.hero.atk < 0) core.status.hero.atk = 0;
if (core.status.hero.def < 0) core.status.hero.def = 0;
}
// 增加仇恨值
- core.setFlag("hatred", core.getFlag("hatred", 0) + core.values.hatred);
+ core.setFlag('hatred', core.getFlag('hatred', 0) + core.values.hatred);
// 战后的技能处理,比如扣除魔力值
- if (core.flags.statusBarItems.indexOf("enableSkill") >= 0) {
+ if (core.flags.statusBarItems.indexOf('enableSkill') >= 0) {
// 检测当前开启的技能类型
- var skill = core.getFlag("skill", 0);
- if (skill == 1) {
- // 技能1:二倍斩
+ var skill = core.getFlag('skill', 0);
+ if (skill == 1) { // 技能1:二倍斩
core.status.hero.mana -= 5; // 扣除5点魔力值
}
// 关闭技能
- core.setFlag("skill", 0);
- core.setFlag("skillName", "无");
+ core.setFlag('skill', 0);
+ core.setFlag('skillName', '无');
}
+
// 事件的处理
var todo = [];
// 加点事件
- var point =
- guards.reduce(function (curr, g) {
- return curr + core.material.enemys[g[2]].point;
- }, core.getEnemyValue(enemy, "point", x, y)) || 0;
+ var point = guards.reduce(function (curr, g) {
+ return curr + core.material.enemys[g[2]].point;
+ }, core.getEnemyValue(enemy, "point", x, y)) || 0;
if (core.flags.enableAddPoint && point > 0) {
- core.push(todo, [{ type: "insert", name: "加点事件", args: [point] }]);
+ core.push(todo, [{ "type": "insert", "name": "加点事件", "args": [point] }]);
}
// 战后事件
if (core.status.floorId != null) {
- core.push(
- todo,
- core.floors[core.status.floorId].afterBattle[x + "," + y]
- );
+ core.push(todo, core.floors[core.status.floorId].afterBattle[x + "," + y]);
}
core.push(todo, enemy.afterBattle);
@@ -434,9 +441,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
if (todo.length > 0) core.insertAction(todo, x, y);
// 删除该点设置的怪物信息
- delete((flags.enemyOnPoint || {})[core.status.floorId] || {})[
- x + "," + y
- ];
+ delete((flags.enemyOnPoint || {})[core.status.floorId] || {})[x + "," + y];
// 因为removeBlock和hideBlock都会刷新状态栏,因此将删除部分移动到这里并保证刷新只执行一次,以提升效率
if (core.getBlock(x, y) != null) {
@@ -451,8 +456,11 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
}
// 如果已有事件正在处理中
- if (core.status.event.id == null) core.continueAutomaticRoute();
- else core.clearContinueAutomaticRoute();
+ if (core.status.event.id == null)
+ core.continueAutomaticRoute();
+ else
+ core.clearContinueAutomaticRoute();
+
},
"afterOpenDoor": function (doorId, x, y) {
// 开一个门后触发的事件
@@ -524,222 +532,223 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
},
"enemys": {
"getSpecials": function () {
- // 获得怪物的特殊属性,每一行定义一个特殊属性。
- // 分为五项,第一项为该特殊属性的数字,第二项为特殊属性的名字,第三项为特殊属性的描述
- // 第四项为该特殊属性的颜色,可以写十六进制 #RRGGBB 或者 [r,g,b,a] 四元数组
- // 第五项为该特殊属性的标记;目前 1 代表是地图类技能(需要进行遍历全图)
- // 名字和描述可以直接写字符串,也可以写个function将怪物传进去
- return [
- [1, "先攻", "怪物首先攻击", "#ffcc33"],
- [3, "坚固", "怪物防御不小于角色攻击-1", "#c0b088"],
- [
- 6,
- function (enemy) {
- return (enemy.n || "") + "连击";
- },
- function (enemy) {
- return "怪物每回合攻击" + (enemy.n || 4) + "次";
- },
- "#ffee77",
- ],
- [
- 7,
- "破甲",
- function (enemy) {
- return (
- "战斗前,怪物附加角色防御的" +
- Math.floor(
- 100 * (enemy.breakArmor || core.values.breakArmor || 0)
- ) +
- "%作为伤害"
- );
- },
- "#88c0ff",
- ],
- [
- 8,
- "反击",
- function (enemy) {
- return (
- "战斗时,怪物每回合附加角色攻击的" +
- Math.floor(
- 100 * (enemy.counterAttack || core.values.counterAttack || 0)
- ) +
- "%作为伤害,无视角色防御"
- );
- },
- "#ffaa44",
- ],
- [
- 9,
- "净化",
- function (enemy) {
- return (
- "战斗前,怪物附加角色护盾的" +
- (enemy.purify || core.values.purify) +
- "倍作为伤害"
- );
- },
- "#80eed6",
- ],
- [10, "模仿", "怪物的攻防和角色攻防相等", "#b0c0dd"],
- [
- 11,
- "吸血",
- function (enemy) {
- return (
- "战斗前,怪物首先吸取角色的" +
- Math.floor(100 * enemy.vampire || 0) +
- "%生命(约" +
- Math.floor((enemy.vampire || 0) * core.getStatus("hp")) +
- "点)作为伤害" +
- (enemy.add ? ",并把伤害数值加到自身生命上" : "")
- );
- },
- "#dd4448",
- ],
- [
- 12,
- "中毒",
- "战斗后,角色陷入中毒状态,每一步损失生命" +
- core.values.poisonDamage +
- "点",
- "#99ee88",
- ],
- [
- 13,
- "衰弱",
- "战斗后,角色陷入衰弱状态,攻防暂时下降" +
- (core.values.weakValue >= 1
- ? core.values.weakValue + "点"
- : parseInt(core.values.weakValue * 100) + "%"),
- "#f0bbcc",
- ],
- [
- 14,
- "诅咒",
- "战斗后,角色陷入诅咒状态,战斗无法获得金币和经验",
- "#bbeef0",
- ],
- [
- 15,
- "领域",
- function (enemy) {
- return (
- "经过怪物周围" +
- (enemy.zoneSquare ? "九宫格" : "十字") +
- "范围内" +
- (enemy.range || 1) +
- "格时自动减生命" +
- (enemy.zone || 0) +
- "点"
- );
- },
- "#c677dd",
- ],
- [16, "夹击", "经过两只相同的怪物中间,角色生命值变成一半", "#bb99ee"],
- [
- 17,
- "仇恨",
- "战斗前,怪物附加之前积累的仇恨值作为伤害;战斗后,释放一半的仇恨值。(每杀死一个怪物获得" +
- (core.values.hatred || 0) +
- "点仇恨值)",
- "#b0b666",
- ],
- [
- 18,
- "阻击",
- function (enemy) {
- return (
- "经过怪物周围" +
- (enemy.zoneSquare ? "九宫格" : "十字") +
- "时自动减生命" +
- (enemy.repulse || 0) +
- "点,同时怪物后退一格"
- );
- },
- "#8888e6",
- ],
- [19, "自爆", "战斗后角色的生命值变成1", "#ff6666"],
- [20, "无敌", "角色无法打败怪物,除非拥有十字架", "#aaaaaa"],
- [
- 21,
- "退化",
- function (enemy) {
- return (
- "战斗后角色永久下降" +
- (enemy.atkValue || 0) +
- "点攻击和" +
- (enemy.defValue || 0) +
- "点防御"
- );
- },
- ],
- [
- 22,
- "固伤",
- function (enemy) {
- return (
- "战斗前,怪物对角色造成" +
- (enemy.damage || 0) +
- "点固定伤害,未开启负伤时无视角色护盾。"
- );
- },
- "#ff9977",
- ],
- [23, "重生", "怪物被击败后,角色转换楼层则怪物将再次出现", "#a0e0ff"],
- [
- 24,
- "激光",
- function (enemy) {
- return "经过怪物同行或同列时自动减生命" + (enemy.laser || 0) + "点";
- },
- "#dda0dd",
- ],
- [
- 25,
- "光环",
- function (enemy) {
- return (
- (enemy.range != null
- ? (enemy.haloSquare ? "该怪物九宫格" : "该怪物十字") +
- enemy.haloRange +
- "格范围内"
- : "同楼层所有") +
- "怪物生命提升" +
- (enemy.hpBuff || 0) +
- "%,攻击提升" +
- (enemy.atkBuff || 0) +
- "%,防御提升" +
- (enemy.defBuff || 0) +
- "%," +
- (enemy.haloAdd ? "可叠加" : "不可叠加")
- );
- },
- "#e6e099",
- 1,
- ],
- [
- 26,
- "支援",
- "当周围一圈的怪物受到攻击时将上前支援,并组成小队战斗。",
- "#77c0b6",
- 1,
- ],
- [
- 27,
- "捕捉",
- function (enemy) {
- return (
- "当走到怪物周围" +
- (enemy.zoneSquare ? "九宫格" : "十字") +
- "时会强制进行战斗。"
- );
- },
- "#c0ddbb",
- ],
- ];
- },
+ // 获得怪物的特殊属性,每一行定义一个特殊属性。
+ // 分为五项,第一项为该特殊属性的数字,第二项为特殊属性的名字,第三项为特殊属性的描述
+ // 第四项为该特殊属性的颜色,可以写十六进制 #RRGGBB 或者 [r,g,b,a] 四元数组
+ // 第五项为该特殊属性的标记;目前 1 代表是地图类技能(需要进行遍历全图)
+ // 名字和描述可以直接写字符串,也可以写个function将怪物传进去
+ return [
+ [1, "先攻", "怪物首先攻击", "#ffcc33"], //√
+ //[2, "魔攻", "怪物无视角色的防御", "#bbb0ff"],
+ [3, "坚固", "怪物防御不小于角色攻击-1", "#c0b088"], //√
+ [
+ 6,
+ function (enemy) {
+ return (enemy.n || "") + "连击";
+ },
+ function (enemy) {
+ return "怪物每回合攻击" + (enemy.n || 4) + "次";
+ },
+ "#ffee77",
+ ], //想改成“以XX%、XX%攻击力各攻击一次”
+ [
+ 7,
+ "破甲",
+ function (enemy) {
+ return (
+ "怪物无视角色防御的" +
+ Math.floor(
+ 100 * (enemy.breakArmor || core.values.breakArmor || 0)
+ ) +
+ "%"
+ );
+ },
+ "#88c0ff",
+ ], //√
+ [
+ 8,
+ "反击",
+ function (enemy) {
+ return (
+ "战斗时,怪物每回合附加角色攻击的" +
+ Math.floor(
+ 100 * (enemy.counterAttack || core.values.counterAttack || 0)
+ ) +
+ "%作为伤害,无视角色防御"
+ );
+ },
+ "#ffaa44",
+ ],
+ [
+ 9,
+ "净化",
+ function (enemy) {
+ return (
+ "战斗前,怪物附加角色护盾的" +
+ (enemy.purify || core.values.purify) +
+ "倍作为伤害"
+ );
+ },
+ "#80eed6",
+ ],
+ [10, "模仿", "怪物的攻防和角色攻防相等", "#b0c0dd"],
+ [
+ 11,
+ "吸血",
+ function (enemy) {
+ return (
+ "战斗前,怪物首先吸取角色的" +
+ Math.floor(100 * enemy.vampire || 0) +
+ "%生命(约" +
+ Math.floor((enemy.vampire || 0) * core.getStatus("hp")) +
+ "点)作为伤害" +
+ (enemy.add ? ",并把伤害数值加到自身生命上" : "")
+ );
+ },
+ "#dd4448",
+ ],
+ [
+ 12,
+ "中毒",
+ "战斗后,角色陷入中毒状态,每一步损失生命" +
+ core.values.poisonDamage +
+ "点",
+ "#99ee88",
+ ],
+ [
+ 13,
+ "衰弱",
+ "战斗后,角色陷入衰弱状态,攻防暂时下降" +
+ (core.values.weakValue >= 1 ?
+ core.values.weakValue + "点" :
+ parseInt(core.values.weakValue * 100) + "%"),
+ "#f0bbcc",
+ ],
+ [
+ 14,
+ "诅咒",
+ "战斗后,角色陷入诅咒状态,战斗无法获得金币和经验",
+ "#bbeef0",
+ ],
+ [
+ 15,
+ "领域",
+ function (enemy) {
+ return (
+ "经过怪物周围" +
+ (enemy.zoneSquare ? "九宫格" : "十字") +
+ "范围内" +
+ (enemy.range || 1) +
+ "格时自动减生命" +
+ (enemy.zone || 0) +
+ "点"
+ );
+ },
+ "#c677dd",
+ ],
+ [16, "夹击", "经过两只相同的怪物中间,角色生命值变成一半", "#bb99ee"],
+ [
+ 17,
+ "仇恨",
+ "战斗前,怪物附加之前积累的仇恨值作为伤害;战斗后,释放一半的仇恨值。(每杀死一个怪物获得" +
+ (core.values.hatred || 0) +
+ "点仇恨值)",
+ "#b0b666",
+ ],
+ [
+ 18,
+ "阻击",
+ function (enemy) {
+ return (
+ "经过怪物周围" +
+ (enemy.zoneSquare ? "九宫格" : "十字") +
+ "时自动减生命" +
+ (enemy.repulse || 0) +
+ "点,同时怪物后退一格"
+ );
+ },
+ "#8888e6",
+ ],
+ [19, "自爆", "战斗后角色的生命值变成1", "#ff6666"],
+ [20, "无敌", "角色无法打败怪物,除非拥有十字架", "#aaaaaa"],
+ [
+ 21,
+ "退化",
+ function (enemy) {
+ return (
+ "战斗后角色永久下降" +
+ (enemy.atkValue || 0) +
+ "点攻击和" +
+ (enemy.defValue || 0) +
+ "点防御"
+ );
+ },
+ ],
+ [
+ 22,
+ "固伤",
+ function (enemy) {
+ return (
+ "战斗前,怪物对角色造成" +
+ (enemy.damage || 0) +
+ "点固定伤害,未开启负伤时无视角色护盾。"
+ );
+ },
+ "#ff9977",
+ ],
+ [23, "重生", "怪物被击败后,角色转换楼层则怪物将再次出现", "#a0e0ff"],
+ [
+ 24,
+ "激光",
+ function (enemy) {
+ return "经过怪物同行或同列时自动减生命" + (enemy.laser || 0) + "点";
+ },
+ "#dda0dd",
+ ],
+ [
+ 25,
+ "光环",
+ function (enemy) {
+ return (
+ (enemy.range != null ?
+ (enemy.haloSquare ? "该怪物九宫格" : "该怪物十字") +
+ enemy.haloRange +
+ "格范围内" :
+ "同楼层所有") +
+ "怪物生命提升" +
+ (enemy.hpBuff || 0) +
+ "%,攻击提升" +
+ (enemy.atkBuff || 0) +
+ "%,防御提升" +
+ (enemy.defBuff || 0) +
+ "%," +
+ (enemy.haloAdd ? "可叠加" : "不可叠加")
+ );
+ },
+ "#e6e099",
+ 1,
+ ],
+ [
+ 26,
+ "支援",
+ "当周围一圈的怪物受到攻击时将上前支援,并组成小队战斗。",
+ "#77c0b6",
+ 1,
+ ],
+ [
+ 27,
+ "捕捉",
+ function (enemy) {
+ return (
+ "当走到怪物周围" +
+ (enemy.zoneSquare ? "九宫格" : "十字") +
+ "时会强制进行战斗。"
+ );
+ },
+ "#c0ddbb",
+ ],
+ ];
+},
"getEnemyInfo": function (enemy, hero, x, y, floorId) {
// 获得某个怪物变化后的数据;该函数将被伤害计算和怪物手册使用
// 例如:坚固、模仿、仿攻等等
@@ -756,19 +765,20 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
hero_def = core.getRealStatusOrDefault(hero, "def"),
hero_mdef = core.getRealStatusOrDefault(hero, "mdef"),
hero_speed = core.getRealStatusOrDefault(hero, "speed");
-
+ var mon_id = core.getEnemyValue(enemy, "id", x, y, floorId),
+ mon_name = core.getEnemyValue(enemy, "name", x, y, floorId);
var mon_hp = core.getEnemyValue(enemy, "hp", x, y, floorId),
mon_atk = core.getEnemyValue(enemy, "atk", x, y, floorId),
mon_def = core.getEnemyValue(enemy, "def", x, y, floorId),
- mon_mdef = core.getEnemyValue(enemy, "mdef", x, y, floorId),
- mon_speed = core.getEnemyValue(enemy, "speed", x, y, floorId),
+ mon_mdef = core.getEnemyValue(enemy, "mdef", x, y, floorId) || 0,
+ mon_spell = core.getEnemyValue(enemy, "spell", x, y, floorId) || 0,
+ mon_speed = core.getEnemyValue(enemy, "speed", x, y, floorId) || 1,
mon_special = core.getEnemyValue(enemy, "special", x, y, floorId);
var mon_money = core.getEnemyValue(enemy, "money", x, y, floorId),
mon_exp = core.getEnemyValue(enemy, "exp", x, y, floorId),
mon_point = core.getEnemyValue(enemy, "point", x, y, floorId);
var mon_barrier = 0,
- mon_absorb_damage = 0,
- mon_magic = core.getEnemyValue(enemy, "magic", x, y, floorId);
+ mon_absorb_damage = 0;
// 模仿
if (core.hasSpecial(mon_special, 10)) {
mon_atk = hero_atk;
@@ -780,7 +790,6 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
}
var guards = [];
-
// 光环和支援检查
if (!core.status.checkBlock) core.status.checkBlock = {};
@@ -876,10 +885,13 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
// 也可以按需增加各种自定义内容
return {
+ id: mon_id,
+ name: mon_name,
hp: Math.floor(mon_hp),
atk: Math.floor(mon_atk),
def: Math.floor(mon_def),
mdef: Math.floor(mon_mdef),
+ spell: Math.floor(mon_spell),
speed: Math.floor(mon_speed),
barrier: Math.floor(mon_barrier),
absorb: Math.floor(mon_absorb_damage),
@@ -887,7 +899,6 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
exp: Math.floor(mon_exp),
point: Math.floor(mon_point),
special: mon_special,
- magic: mon_magic,
guards: guards, // 返回支援情况
};
},
@@ -907,12 +918,24 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
hero_def = core.getRealStatusOrDefault(hero, "def"),
hero_matk = core.getRealStatusOrDefault(hero, "matk"),
hero_mdef = core.getRealStatusOrDefault(hero, "mdef"),
+ hero_mhp = core.getRealStatusOrDefault(hero, "mhp"),
hero_speed = core.getRealStatusOrDefault(hero, "speed"),
hero_spell = core.getRealStatusOrDefault(hero, "spell"),
origin_hero_hp = core.getStatusOrDefault(hero, "hp"),
origin_hero_atk = core.getStatusOrDefault(hero, "atk"),
origin_hero_def = core.getStatusOrDefault(hero, "def");
+ //编辑器特判
+ if (main.mode == "editor") {
+ hero_hp = hero?.hp ?? core.status.hero.hp,
+ hero_atk = hero?.atk ?? core.status.hero.atk,
+ hero_def = hero?.def ?? core.status.hero.def,
+ hero_matk = hero?.matk ?? core.status.hero.matk,
+ hero_mdef = hero?.mdef ?? core.status.hero.mdef,
+ hero_mhp = hero?.mhp ?? core.status.hero.mhp,
+ hero_speed = hero?.speed ?? core.status.hero.speed,
+ hero_spell = hero?.spell ?? core.status.hero.spell;
+ }
// 怪物的各项数据
// 对坚固模仿等处理扔到了脚本编辑-getEnemyInfo之中
var enemyInfo = core.enemys.getEnemyInfo(enemy, hero, x, y, floorId);
@@ -920,11 +943,13 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
mon_atk = enemyInfo.atk,
mon_def = enemyInfo.def,
mon_mdef = enemyInfo.mdef,
+ mon_spell = enemyInfo.spell,
mon_speed = enemyInfo.speed,
mon_special = enemyInfo.special,
mon_absorb_damage = enemyInfo.absorb,
mon_barrier = enemyInfo.barrier;
-
+ const { lcm, gcd } = core.plugin.utils
+ const equip0 = core.getEquip(0)
//---第一部分:静态属性修正---
//此处写入静态影响勇士属性的勇士或怪物技能(静态影响怪物属性的技能于getEnemyInfo中写入)
// 技能的处理
@@ -932,11 +957,21 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
// 开启了技能1:二倍斩
hero_atk *= 2; // 计算时攻击力翻倍
}
+
+ // 破甲
+ if (core.hasSpecial(mon_special, 7))
+ hero_def -= Math.floor(
+ (enemy.breakArmor || core.values.breakArmor) * hero_def
+ );
+
//勇士属性取整
hero_atk = Math.max(0, Math.floor(hero_atk));
hero_def = Math.max(0, Math.floor(hero_def));
- hero_mdef = Math.max(0, Math.floor(hero_mdef));
hero_speed = Math.max(0, Math.floor(hero_speed));
+ hero_spell = Math.max(0, Math.floor(hero_spell));
+ hero_matk = Math.min(100, Math.max(0, Math.floor(hero_matk)));
+ hero_mdef = Math.min(100, Math.max(0, Math.floor(hero_mdef)));
+ hero_mhp = Math.min(100, Math.max(0, Math.floor(hero_mhp)));
// 如果是无敌属性,且勇士未持有十字架
if (core.hasSpecial(mon_special, 20) && !core.hasItem("cross"))
@@ -963,166 +998,319 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
}
//——第二部分:变量定义和初始赋值——
- // 每回合怪物对勇士造成的战斗伤害
- let per_damage = Math.max(mon_atk - hero_def, 0);
- //if (enemyInfo.magic) per_damage = Math.max(mon_atk - hero_mdef, 0);
- //
- let hero_per_damage = Math.max(hero_atk - mon_def, 0);
- //if (hero_magic) hero_per_damage = Math.max(hero_atk - mon_mdef, 0);
+ let hero_per_damage = Math.max(hero_atk - mon_def, 0),
+
+ hero_per_mdamage = Math.floor((hero_spell * hero_matk / 100) * (100 - mon_mdef) / 100);
let damage = 0,
hero_turn = 0,
mon_turn = 0;
+ let equipInfo = [] //回合生效的装备列表
+
+ for (let i = 0; i < 5; i++) {
+ const a = core.plugin.equip[core.getEquip(i)]
+ if (a) equipInfo.push(a)
+ }
+
+ //处理回合条长度
+ let oneTurn = [hero_speed, mon_speed];
+ if (equipInfo.length > 0) {
+ for (let i = 0; i < equipInfo.length; i++) {
+ equipInfo[i].now = 0;
+ equipInfo[i].isAttack = false;
+ oneTurn.push(equipInfo[i].speed);
+ }
+ }
+ //需要变更
+
+ const onegcd = gcd(...oneTurn) //最大公约数
+ oneTurn = lcm(...oneTurn) //单次回合长度
+ //在这里处理equip的初始位置now
+ equipInfo.forEach(v => {
+ switch (v.id) {
+ case "sword1":
+ default:
+ v.now = 0
+ break
+ }
+ v.onAttack = false
+ if (v.now === oneTurn) v.onAttack = true //增加正在攻击的标志
+ })
+ const heroinfo = { hp: hero_hp, atk: hero_atk, def: hero_def, mdef: (!hero?.mdef || hero?.mdef === 100) ? hero_mdef : hero.mdef, spell: hero_spell, mhp: Math.floor(hero_spell * hero_mhp / 100), matk: Math.floor(hero_spell * hero_matk / 100), speed: hero_speed, now: 0, isAttack: false } //勇士属性
+ const enemyinfo = { hp: mon_hp, atk: mon_atk, def: mon_def, mdef: mon_mdef, spell: mon_spell, speed: mon_speed, special: mon_special, now: 0, onAttack: false, isAttack: false } //怪物属性
+ //先攻,先攻为怪物和勇士勇士行动前怪物出第一刀
+ if (core.hasSpecial(mon_special, 1)) {
+ enemyinfo.now = oneTurn
+ enemyinfo.onAttack = true
+ }
+ const start = [core.clone(heroinfo), core.clone(enemyinfo), core.clone(equipInfo), oneTurn] //记录开始战斗时的属性并转发
//---第三部分:递归开始---
- let length = hero_speed * mon_speed;
- let heroDiffPerTurn = [],
- enemyDiffPerTurn = [];
-
- for (
- let now_mon_hp = mon_hp,
- last_mon_hp = mon_hp,
- mon_length = length,
- hero_length = length,
- mon_time = 0,
- hero_time = 0; now_mon_hp > 0;
+ const heroDiffList = [],
+ enemyDiffList = [],
+ heroanimateList = [],
+ enemyanimateList = [];
+ let beforehp = enemyinfo.hp
+ while (
+ enemyinfo.hp > 0
) {
- //勇士和怪物的长度
- mon_time = mon_length / mon_speed;
- hero_time = hero_length / hero_speed;
- if (
- mon_time < hero_time ||
- ((mon_time == hero_time) && mon_speed > hero_speed)
- ) {
- //怪物攻击的回合
- //这里计算怪物攻击时发生的各种变化
+ let onattack = false
+ const hero_diff = {},
+ enemy_diff = {},
+ hero_animate = [],
+ enemy_animate = [];
+ if (enemyinfo.onAttack) { //怪物先攻的场合
+ //这里计算怪物攻击时发生的各种变化,同时计入enemy_diff
+ let mon_damage = 0
+ let hero_damage = 0
+ //伤害计算
+ let per_damage = Math.max(enemyinfo.atk - heroinfo.def, 0),
+ per_mdamage = Math.floor(enemyinfo.spell * (100 - heroinfo.mdef) / 100);
- //伤害与回合增加
- damage += per_damage;
+ //这里记录伤害触发后的属性变化和动画,同时计入diff、damage(不要在此直接修改heroinfo和enemyinfo)
if (core.hasSpecial(mon_special, 6)) {
- mon_turn += enemy.n;
+ hero_damage += per_damage * enemy.n + per_mdamage * enemy.n
} else {
- mon_turn += 1;
+ hero_damage += per_damage + per_mdamage
}
- //重新为长度赋值
- mon_length = length;
- hero_length = hero_length - mon_time * hero_speed;
- } else {
+ let animate = core.plugin.enemyanimate[enemy.id] ?? "sword"
+ //这里可通过if更改默认的怪物攻击特效
+ hero_animate.push(animate) //勇士身上绘制sword动画
+ if (heroinfo.mhp + (hero_diff.mhp ?? 0) - hero_damage >= 0) {
+ hero_diff.mhp = (hero_diff.mhp ?? 0) - hero_damage
+ hero_damage = 0
+ hero_diff.hp = (hero_diff.hp ?? 0) - hero_damage
+ } else {
+ hero_damage -= heroinfo.mhp + (hero_diff.mhp ?? 0)
+ hero_diff.mhp = (hero_diff.mhp ?? 0) - heroinfo.mhp - (hero_diff.mhp ?? 0)
+
+ hero_diff.hp = (hero_diff.hp ?? 0) - hero_damage
+ }
+
+ damage += hero_damage
+ enemyinfo.onAttack = false
+ enemyinfo.now = 0
+ onattack = true
+
+ }
+ equipInfo.forEach(v => {
+ if (v.onAttack) {
+ let mon_damage = 0
+ let hero_damage = 0
+ //这里写生效装备的技能效果,同时对双方属性的修改计入diff(不要在此直接修改heroinfo和enemyinfo)
+ let animate = core.plugin.equipanimate[v.id] ?? "sword"
+ //这里可通过if更改默认的道具特效
+ enemy_animate.push(animate) //勇士身上绘制动画
+
+ v.now = 0
+ v.onAttack = false
+ onattack = true
+ }
+ })
+ if (onattack) { //先手处理完毕后的数据处理
+ heroDiffList.push(hero_diff)
+ enemyDiffList.push(enemy_diff)
+ heroanimateList.push(hero_animate)
+ enemyanimateList.push(enemy_animate)
+ //处理属性变化
+ for (let v in hero_diff) {
+ heroinfo[v] += hero_diff[v]
+ }
+ for (let v in enemy_diff) {
+ enemyinfo[v] += enemy_diff[v]
+ }
+ continue //进入下一循环
+ }
+ heroinfo.now += heroinfo.speed
+ enemyinfo.now += enemyinfo.speed
+ equipInfo.forEach(v => {
+ v.now += v.speed
+ })
+
+ if (
+ heroinfo.now >= oneTurn
+ ) {
//勇士攻击的回合
- // 这里计算勇士攻击时发生的各种变化
+ let mon_damage = 0
+ let hero_damage = 0
+ //这里计算勇士攻击时发生的各种变化
- // 伤害与回合数增加
- now_mon_hp -= hero_per_damage;
- hero_turn += 1; //勇士回合+1,如果有勇士每回合多次攻击的情况,在这里写判断
- // 无法战斗计算
- if (hero_turn % 50 == 0) {
- if (now_mon_hp >= last_mon_hp) return null;
- last_mon_hp = now_mon_hp;
- }
- //重新为长度赋值
- hero_length = length;
- mon_length = mon_length - hero_time * mon_speed;
+ //伤害计算
+ let per_damage = Math.max(heroinfo.atk - enemyinfo.def, 0)
+ let per_mdamage = Math.max(Math.floor(heroinfo.matk * (100 - enemyinfo.mdef) / 100), 0)
+ mon_damage = per_damage + per_mdamage
+ //这里记录伤害触发后的属性变化和动画,同时计入diff(不要在此直接修改heroinfo和enemyinfo)
+ let animate = core.plugin.heroanimate[equip0] ?? "sword"
+ //这里可通过if更改默认的武器攻击特效
+ enemy_animate.push(animate)
+
+
+ enemy_diff.hp = (enemy_diff.hp ?? 0) - mon_damage
+ heroinfo.now -= oneTurn
+ hero_turn++
+ onattack = true
}
- let hero_diff = {},
- mon_diff = {};
- //这里插入汇总勇士和怪物在此回合结束时的情况数值,用以跑条动画读取
- heroDiffPerTurn.push(hero_diff);
- enemyDiffPerTurn.push(mon_diff); //将勇士和怪物此回合结束时的属性变动保存到heroPerInfo和enemyPerInfo中,用以跑条动画读取
+
+
+ if (enemyinfo.now >= oneTurn) {
+ //怪物攻击的回合
+ let mon_damage = 0
+ let hero_damage = 0
+ //伤害计算
+ let per_damage = Math.max(enemyinfo.atk - heroinfo.def, 0),
+ per_mdamage = Math.floor(enemyinfo.spell * (100 - heroinfo.mdef) / 100);
+
+ //这里记录伤害触发后的属性变化和动画,同时计入diff、damage(不要在此直接修改heroinfo和enemyinfo)
+ if (core.hasSpecial(mon_special, 6)) {
+ hero_damage += per_damage * enemy.n + per_mdamage * enemy.n
+ } else {
+ hero_damage += per_damage + per_mdamage
+ }
+ let animate = core.plugin.enemyanimate[enemy.id] ?? "sword"
+ //这里可通过if更改默认的怪物攻击特效
+ hero_animate.push(animate) //勇士身上绘制sword动画
+ if (heroinfo.mhp + (hero_diff.mhp ?? 0) - hero_damage >= 0) {
+ hero_diff.mhp = (hero_diff.mhp ?? 0) - hero_damage
+ hero_damage = 0
+ hero_diff.hp = (hero_diff.hp ?? 0) - hero_damage
+ } else {
+ hero_damage -= heroinfo.mhp + (hero_diff.mhp ?? 0)
+ hero_diff.mhp = (hero_diff.mhp ?? 0) - heroinfo.mhp - (hero_diff.mhp ?? 0)
+
+ hero_diff.hp = (hero_diff.hp ?? 0) - hero_damage
+ }
+
+ damage += hero_damage
+ enemyinfo.now -= oneTurn
+ mon_turn++
+ onattack = true
+ }
+ equipInfo.forEach(v => {
+ if (v.now >= oneTurn) {
+ let mon_damage = 0
+ let hero_damage = 0
+ //这里写生效装备的技能效果,同时对双方属性的修改计入diff(不要在此直接修改heroinfo和enemyinfo)
+ let animate = core.plugin.equipanimate[v.id] ?? "sword"
+ //这里可通过if更改默认的道具特效
+ enemy_animate.push(animate) //怪物身上绘制动画
+
+ v.now -= oneTurn
+ onattack = true
+ }
+
+ })
+ if (onattack) {
+ //处理完毕后的数据处理
+ heroDiffList.push(hero_diff)
+ enemyDiffList.push(enemy_diff)
+ heroanimateList.push(hero_animate)
+ enemyanimateList.push(enemy_animate)
+ //处理属性变化
+ for (let v in hero_diff) {
+ heroinfo[v] += hero_diff[v]
+ }
+ for (let v in enemy_diff) {
+ enemyinfo[v] += enemy_diff[v]
+ }
+
+ //出手50回合怪物生命未降低直接判负,避免死循环
+ if (hero_turn === 50) {
+
+ if (enemyinfo.hp >= beforehp) {
+ return null
+ }
+ }
+ }
+
}
- //下面这些还没修改
- // 连击
- if (core.hasSpecial(mon_special, 6)) per_damage *= enemy.n || 2;
-
- // 每回合的反击伤害;反击是按照勇士的攻击次数来计算回合
- let counterDamage = 0;
- if (core.hasSpecial(mon_special, 8))
- counterDamage += Math.floor(
- (enemy.counterAttack || core.values.counterAttack) * hero_atk
- );
-
- // 先攻
- if (core.hasSpecial(mon_special, 1)) init_damage += per_damage;
-
- // 破甲
- if (core.hasSpecial(mon_special, 7))
- init_damage += Math.floor(
- (enemy.breakArmor || core.values.breakArmor) * hero_def
- );
-
- // 净化
- if (core.hasSpecial(mon_special, 9))
- init_damage += Math.floor(
- (enemy.purify || core.values.purify) * hero_mdef
- );
- //上面这些还没修改
- //勇士护盾计算
- let barrier = hero_mdef;
+ //下面这些还没修改,原有技能除先攻、连击外暂时全部移除,所有技能需要在上方的模拟循环中做修正
+ /*
+ // 每回合的反击伤害;反击是按照勇士的攻击次数来计算回合
+ let counterDamage = 0;
+ if (core.hasSpecial(mon_special, 8))
+ counterDamage += Math.floor(
+ (enemy.counterAttack || core.values.counterAttack) * hero_atk
+ );
- // ------ 支援 ----- //
- // 这个递归最好想明白为什么,flag:__extraTurn__是怎么用的
- /*var guards = core.getFlag("__guards__" + x + "_" + y, enemyInfo.guards);
- var guard_before_current_enemy = false; // ------ 支援怪是先打(true)还是后打(false)?
- turn += core.getFlag("__extraTurn__", 0);
- if (guards.length > 0) {
- if (!guard_before_current_enemy) { // --- 先打当前怪物,记录当前回合数
- core.setFlag("__extraTurn__", turn);
- }
- // 获得那些怪物组成小队战斗
- for (var i = 0; i < guards.length; i++) {
- var gx = guards[i][0],
- gy = guards[i][1],
- gid = guards[i][2];
- // 递归计算支援怪伤害信息,这里不传x,y保证不会重复调用
- // 这里的mdef传0,因为护盾应该只会被计算一次
- var info = core.enemys.getDamageInfo(core.material.enemys[gid], { hp: origin_hero_hp, atk: origin_hero_atk, def: origin_hero_def, mdef: 0 });
- if (info == null) { // 小队中任何一个怪物不可战斗,直接返回null
- core.removeFlag("__extraTurn__");
- return null;
+
+ // 净化
+ if (core.hasSpecial(mon_special, 9))
+ init_damage += Math.floor(
+ (enemy.purify || core.values.purify) * hero_mdef
+ );
+ //上面这些还没修改
+ //勇士护盾计算
+ let barrier = Math.floor(hero_spell * hero_mhp / 100);
+
+
+ // ------ 支援 ----- //
+ // 这个递归最好想明白为什么,flag:__extraTurn__是怎么用的
+ /*var guards = core.getFlag("__guards__" + x + "_" + y, enemyInfo.guards);
+ var guard_before_current_enemy = false; // ------ 支援怪是先打(true)还是后打(false)?
+ turn += core.getFlag("__extraTurn__", 0);
+ if (guards.length > 0) {
+ if (!guard_before_current_enemy) { // --- 先打当前怪物,记录当前回合数
+ core.setFlag("__extraTurn__", turn);
+ }
+ // 获得那些怪物组成小队战斗
+ for (var i = 0; i < guards.length; i++) {
+ var gx = guards[i][0],
+ gy = guards[i][1],
+ gid = guards[i][2];
+ // 递归计算支援怪伤害信息,这里不传x,y保证不会重复调用
+ // 这里的mdef传0,因为护盾应该只会被计算一次
+ var info = core.enemys.getDamageInfo(core.material.enemys[gid], { hp: origin_hero_hp, atk: origin_hero_atk, def: origin_hero_def, mdef: 0 });
+ if (info == null) { // 小队中任何一个怪物不可战斗,直接返回null
+ core.removeFlag("__extraTurn__");
+ return null;
+ }
+ // 已经进行的回合数
+ core.setFlag("__extraTurn__", info.turn);
+ init_damage += info.damage;
+ }
+ if (guard_before_current_enemy) { // --- 先打支援怪物,增加当前回合数
+ turn += core.getFlag("__extraTurn__", 0);
}
- // 已经进行的回合数
- core.setFlag("__extraTurn__", info.turn);
- init_damage += info.damage;
}
- if (guard_before_current_enemy) { // --- 先打支援怪物,增加当前回合数
- turn += core.getFlag("__extraTurn__", 0);
- }
- }
- core.removeFlag("__extraTurn__");*/
+ core.removeFlag("__extraTurn__");*/
// ------ 支援END ------ //
+ /*
+ // 最终伤害:初始伤害 + 怪物对勇士造成的伤害 + 反击伤害
+ damage += init_damage + hero_turn * counterDamage;
+ // 再扣去护盾
+ damage -= barrier;
- // 最终伤害:初始伤害 + 怪物对勇士造成的伤害 + 反击伤害
- damage += init_damage + hero_turn * counterDamage;
- // 再扣去护盾
- damage -= barrier;
-
- // 检查是否允许负伤
- if (!core.flags.enableNegativeDamage) damage = Math.max(0, damage);
-
- // 最后处理仇恨和固伤(因为这两个不能被护盾减伤)
- if (core.hasSpecial(mon_special, 17)) {
- // 仇恨
- damage += core.getFlag("hatred", 0);
- }
- if (core.hasSpecial(mon_special, 22)) {
- // 固伤
- damage += enemy.damage || 0;
- }
+ // 检查是否允许负伤
+ if (!core.flags.enableNegativeDamage) damage = Math.max(0, damage);
+ // 最后处理仇恨和固伤(因为这两个不能被护盾减伤)
+ if (core.hasSpecial(mon_special, 17)) {
+ // 仇恨
+ damage += core.getFlag("hatred", 0);
+ }
+ if (core.hasSpecial(mon_special, 22)) {
+ // 固伤
+ damage += enemy.damage2 || 0;
+ }
+ */
return {
+ start: start,
mon_hp: Math.floor(mon_hp),
mon_atk: Math.floor(mon_atk),
mon_def: Math.floor(mon_def),
mon_mdef: Math.floor(mon_mdef),
- init_damage: Math.floor(init_damage),
- per_damage: Math.floor(per_damage),
- hero_per_damage: Math.floor(hero_per_damage),
- turn: Math.floor(hero_turn),
+ mon_speed: Math.floor(mon_speed),
+ heroDiffList: heroDiffList,
+ enemyDiffList: enemyDiffList,
+ heroanimateList: heroanimateList,
+ enemyanimateList: enemyanimateList,
+ hero_turn: Math.floor(hero_turn),
mon_turn: Math.floor(mon_turn),
- damage: Math.floor(damage),
+ damage: Math.floor(damage)
};
/*TODO:怪物手册的修改(需要修改这里return的内容以及一些战后判断)
1. 显示怪物是魔攻还是物攻(在怪物名字上做颜色变化,物攻是黄色,魔攻是蓝色)
@@ -1388,6 +1576,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
version: core.firstData.version,
guid: core.getGuid(),
time: new Date().getTime(),
+ 'material': core.clone(core.material.enemys)
};
return data;
},
@@ -1402,6 +1591,8 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
core.maps.loadMap(data.maps, null, data.hero.flags),
data.values
);
+ //如果作者造塔想随时修改怪物属性平衡数值,请注释下面这行。该行作用为保存怪物当前属性,用以储存临时修改的怪物属性。
+ core.material.enemys = data.material ?? core.material.enemys;
core.status.route = core.decodeRoute(data.route);
core.control._bindRoutePush();
// 文字属性,全局属性
@@ -1450,31 +1641,30 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
if (play) core.doAction();
},
"getStatusLabel": function (name) {
- // 返回某个状态英文名的对应中文标签,如atk -> 攻击,def -> 防御等。
- // 请注意此项仅影响 libs/ 下的内容(如绘制怪物手册、数据统计等)
- // 自行定义的(比如获得道具效果)中用到的“攻击+3”等需要自己去对应地方修改
+ // 返回某个状态英文名的对应中文标签,如atk -> 攻击,def -> 防御等。
+ // 请注意此项仅影响 libs/ 下的内容(如绘制怪物手册、数据统计等)
+ // 自行定义的(比如获得道具效果)中用到的“攻击+3”等需要自己去对应地方修改
- return (
- {
- name: "名称",
- lv: "等级",
- hpmax: "生命上限",
- hp: "生命",
- manamax: "魔力上限",
- mana: "魔力",
- atk: "攻击",
- def: "防御",
- spell: "法强",
- matk: "魔攻比例",
- mdef: "护盾比例",
- speed: "速度",
- money: "金币",
- exp: "经验",
- point: "加点",
- steps: "步数",
- }[name] || name
- );
- },
+ return ({
+ name: "名称",
+ lv: "等级",
+ hpmax: "生命上限",
+ hp: "生命",
+ manamax: "魔力上限",
+ mana: "魔力",
+ atk: "攻击",
+ def: "防御",
+ spell: "法强",
+ matk: "魔攻比例",
+ mhp: "护盾比例",
+ mdef: "法抗",
+ speed: "速度",
+ money: "金币",
+ exp: "经验",
+ point: "加点",
+ steps: "步数",
+ } [name] || name);
+},
"triggerDebuff": function (action, type) {
// 毒衰咒效果的获得与解除
// action:获得还是解除;'get'表示获得,'remove'表示解除
@@ -1533,13 +1723,13 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
}
},
"updateStatusBar": function () {
- // 更新状态栏
- core.ui.statusBar.update();
- // 更新阻激夹域的伤害值
- core.updateCheckBlock();
- // 更新全地图显伤
- core.updateDamage();
- },
+ // 更新状态栏
+ core.ui.statusBar.update();
+ // 更新阻激夹域的伤害值
+ core.updateCheckBlock();
+ // 更新全地图显伤
+ core.updateDamage();
+},
"updateCheckBlock": function (floorId) {
// 领域、夹击、阻击等的伤害值计算
floorId = floorId || core.status.floorId;
@@ -1793,119 +1983,114 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
};
},
"moveOneStep": function (callback) {
- // 勇士每走一步后执行的操作。callback为行走完毕后的回调
- // 这个函数执行在“刚走完”的时候,即还没有检查该点的事件和领域伤害等。
- // 请注意:瞬间移动不会执行该函数。如果要控制能否瞬间移动有三种方法:
- // 1. 将全塔属性中的cannotMoveDirectly这个开关勾上,即可在全塔中全程禁止使用瞬移。
- // 2, 将楼层属性中的cannotMoveDirectly这个开关勾上,即禁止在该层楼使用瞬移。
- // 3. 将flag:cannotMoveDirectly置为true,即可使用flag控制在某段剧情范围内禁止瞬移。
+ // 勇士每走一步后执行的操作。callback为行走完毕后的回调
+ // 这个函数执行在“刚走完”的时候,即还没有检查该点的事件和领域伤害等。
+ // 请注意:瞬间移动不会执行该函数。如果要控制能否瞬间移动有三种方法:
+ // 1. 将全塔属性中的cannotMoveDirectly这个开关勾上,即可在全塔中全程禁止使用瞬移。
+ // 2, 将楼层属性中的cannotMoveDirectly这个开关勾上,即禁止在该层楼使用瞬移。
+ // 3. 将flag:cannotMoveDirectly置为true,即可使用flag控制在某段剧情范围内禁止瞬移。
- // 增加步数
- core.status.hero.steps++;
- // 更新跟随者状态,并绘制
- core.updateFollowers();
- core.drawHero();
- // 检查中毒状态的扣血和死亡
- if (core.hasFlag("poison")) {
- core.status.hero.statistics.poisonDamage += core.values.poisonDamage;
- core.status.hero.hp -= core.values.poisonDamage;
- if (core.status.hero.hp <= 0) {
- core.status.hero.hp = 0;
- core.updateStatusBar(false, true);
- core.events.lose();
- return;
- } else {
- core.updateStatusBar(false, true);
- }
- }
+ // 增加步数
+ core.status.hero.steps++;
+ // 更新跟随者状态,并绘制
+ core.updateFollowers();
+ core.drawHero();
+ // 检查中毒状态的扣血和死亡
+ if (core.hasFlag("poison")) {
+ core.status.hero.statistics.poisonDamage += core.values.poisonDamage;
+ core.status.hero.hp -= core.values.poisonDamage;
+ if (core.status.hero.hp <= 0) {
+ core.status.hero.hp = 0;
+ core.updateStatusBar(false, true);
+ core.events.lose();
+ return;
+ } else {
+ core.updateStatusBar(false, true);
+ }
+ }
- // 从v2.7开始,每一步行走不会再刷新状态栏。
- // 如果有特殊要求(如每走一步都加buff之类),可手动取消注释下面这一句:
- // core.updateStatusBar(true, true);
+ // 从v2.7开始,每一步行走不会再刷新状态栏。
+ // 如果有特殊要求(如每走一步都加buff之类),可手动取消注释下面这一句:
+ // core.updateStatusBar(true, true);
- // 检查自动事件
- core.checkAutoEvents();
+ // 检查自动事件
+ core.checkAutoEvents();
- // ------ 检查目标点事件 ------ //
- // 无事件的道具(如血瓶)需要优先于阻激夹域判定
- var nowx = core.getHeroLoc("x"),
- nowy = core.getHeroLoc("y");
- var block = core.getBlock(nowx, nowy);
- var hasTrigger = false;
- if (
- block != null &&
- block.event.trigger == "getItem" &&
- !core.floors[core.status.floorId].afterGetItem[nowx + "," + nowy]
- ) {
- hasTrigger = true;
- core.trigger(nowx, nowy, callback);
- }
- // 执行目标点的阻激夹域事件
- core.checkBlock();
+ // ------ 检查目标点事件 ------ //
+ // 无事件的道具(如血瓶)需要优先于阻激夹域判定
+ var nowx = core.getHeroLoc("x"),
+ nowy = core.getHeroLoc("y");
+ var block = core.getBlock(nowx, nowy);
+ var hasTrigger = false;
+ if (
+ block != null &&
+ block.event.trigger == "getItem" &&
+ !core.floors[core.status.floorId].afterGetItem[nowx + "," + nowy]
+ ) {
+ hasTrigger = true;
+ core.trigger(nowx, nowy, callback);
+ }
+ // 执行目标点的阻激夹域事件
+ core.checkBlock();
- // 执行目标点的script和事件
- if (!hasTrigger) core.trigger(nowx, nowy, callback);
+ // 执行目标点的script和事件
+ if (!hasTrigger) core.trigger(nowx, nowy, callback);
- // 检查该点是否是滑冰
- if (core.onSki()) {
- // 延迟到事件最后执行,因为这之前可能有阻激夹域动画
- core.insertAction({ type: "moveAction" }, null, null, null, true);
- }
+ // 检查该点是否是滑冰
+ if (core.onSki()) {
+ // 延迟到事件最后执行,因为这之前可能有阻激夹域动画
+ core.insertAction({ type: "moveAction" }, null, null, null, true);
+ }
- // ------ 检查目标点事件 END ------ //
+ // ------ 检查目标点事件 END ------ //
- // 如需强行终止行走可以在这里条件判定:
- // core.stopAutomaticRoute();
- },
+ // 如需强行终止行走可以在这里条件判定:
+ // core.stopAutomaticRoute();
+},
"moveDirectly": function (x, y, ignoreSteps) {
- // 瞬间移动;x,y为要瞬间移动的点;ignoreSteps为减少的步数,可能之前已经被计算过
- // 返回true代表成功瞬移,false代表没有成功瞬移
+ // 瞬间移动;x,y为要瞬间移动的点;ignoreSteps为减少的步数,可能之前已经被计算过
+ // 返回true代表成功瞬移,false代表没有成功瞬移
- // 判定能否瞬移到该点
- if (ignoreSteps == null) ignoreSteps = core.canMoveDirectly(x, y);
- if (ignoreSteps >= 0) {
- // 中毒也允许瞬移
- if (core.hasFlag("poison")) {
- var damage = ignoreSteps * core.values.poisonDamage;
- if (damage >= core.status.hero.hp) return false;
- core.status.hero.statistics.poisonDamage += damage;
- core.status.hero.hp -= damage;
- }
+ // 判定能否瞬移到该点
+ if (ignoreSteps == null) ignoreSteps = core.canMoveDirectly(x, y);
+ if (ignoreSteps >= 0) {
+ // 中毒也允许瞬移
+ if (core.hasFlag("poison")) {
+ var damage = ignoreSteps * core.values.poisonDamage;
+ if (damage >= core.status.hero.hp) return false;
+ core.status.hero.statistics.poisonDamage += damage;
+ core.status.hero.hp -= damage;
+ }
- core.clearMap("hero");
- if (
- core.bigmap.width * 32 === core.bigmap.height * 32 &&
- core.bigmap.width * 32 === core.__PIXELS__
- )
- core.addPopMove(
- 32 * core.status.hero.loc.x + 16,
- 32 * core.status.hero.loc.y + 16,
- 32 * x + 16,
- 32 * y + 16
- );
- // 获得勇士最后的朝向
- var lastDirection = core.status.route[core.status.route.length - 1];
- if (["left", "right", "up", "down"].indexOf(lastDirection) >= 0)
- core.setHeroLoc("direction", lastDirection);
- // 设置坐标,并绘制
- core.control._moveDirectyFollowers(x, y);
- core.status.hero.loc.x = x;
- core.status.hero.loc.y = y;
- core.drawHero();
- // 记录录像
- core.status.route.push("move:" + x + ":" + y);
- // 统计信息
- core.status.hero.statistics.moveDirectly++;
- core.status.hero.statistics.ignoreSteps += ignoreSteps;
- if (core.hasFlag("poison")) {
- core.updateStatusBar(false, true);
- }
+ core.clearMap("hero");
+ if (
+ core.bigmap.width * 32 === core.bigmap.height * 32 &&
+ core.bigmap.width * 32 === core.__PIXELS__
+ )
+ if (core.getFlag('popmove')) core.addPopMove(32 * core.status.hero.loc.x + 16, 32 * core.status.hero.loc.y + 16, 32 * x + 16, 32 * y + 16);
+ // 获得勇士最后的朝向
+ var lastDirection = core.status.route[core.status.route.length - 1];
+ if (["left", "right", "up", "down"].indexOf(lastDirection) >= 0)
+ core.setHeroLoc("direction", lastDirection);
+ // 设置坐标,并绘制
+ core.control._moveDirectyFollowers(x, y);
+ core.status.hero.loc.x = x;
+ core.status.hero.loc.y = y;
+ core.drawHero();
+ // 记录录像
+ core.status.route.push("move:" + x + ":" + y);
+ // 统计信息
+ core.status.hero.statistics.moveDirectly++;
+ core.status.hero.statistics.ignoreSteps += ignoreSteps;
+ if (core.hasFlag("poison")) {
+ core.updateStatusBar(false, true);
+ }
- core.checkRouteFolding();
- return true;
- }
- return false;
- },
+ core.checkRouteFolding();
+ return true;
+ }
+ return false;
+},
"parallelDo": function (timestamp) {
// 并行事件处理,可以在这里写任何需要并行处理的脚本或事件
// 该函数将被系统反复执行,每次执行间隔视浏览器或设备性能而定,一般约为16.6ms一次
diff --git a/project/images/005-Attack03.webp b/project/images/005-Attack03.webp
new file mode 100644
index 0000000..09df0ff
Binary files /dev/null and b/project/images/005-Attack03.webp differ
diff --git a/project/images/012-Heal01.webp b/project/images/012-Heal01.webp
new file mode 100644
index 0000000..23c2c6d
Binary files /dev/null and b/project/images/012-Heal01.webp differ
diff --git a/project/images/015-Fire01.webp b/project/images/015-Fire01.webp
new file mode 100644
index 0000000..acd799f
Binary files /dev/null and b/project/images/015-Fire01.webp differ
diff --git a/project/images/statusBackground.webp b/project/images/statusBackground.webp
new file mode 100644
index 0000000..498f5d8
Binary files /dev/null and b/project/images/statusBackground.webp differ
diff --git a/project/images/tati_310101.webp b/project/images/tati_310101.webp
new file mode 100644
index 0000000..e5a5dce
Binary files /dev/null and b/project/images/tati_310101.webp differ
diff --git a/project/items.js b/project/items.js
index 95ed773..aa455cd 100644
--- a/project/items.js
+++ b/project/items.js
@@ -37,61 +37,23 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
"canUseItemEffect": "true"
},
"greenGem": {
- "cls": "tools",
+ "cls": "items",
"name": "绿宝石",
- "text": ",护盾+${core.values.greenGem}",
- "itemEffect": "core.status.hero.mdef += core.values.greenGem * core.status.thisMap.ratio",
- "itemEffectTip": ",护盾+${core.values.greenGem * core.status.thisMap.ratio}",
- "useItemEffect": "core.status.hero.mdef += core.values.greenGem",
+ "text": ",法强+${core.values.greenGem}",
+ "itemEffect": "core.status.hero.spell += core.values.greenGem * core.status.thisMap.ratio",
+ "itemEffectTip": ",法强+${core.values.greenGem * core.status.thisMap.ratio}",
+ "useItemEffect": "core.status.hero.spell += core.values.greenGem",
"canUseItemEffect": "true"
},
"yellowGem": {
"cls": "items",
"name": "黄宝石",
- "text": "可以进行加点",
- "itemEffect": "core.status.hero.hp+=1000;core.status.hero.atk+=6;core.status.hero.def+=6;core.status.hero.mdef+=10;",
- "itemEffectTip": ",全属性提升",
- "useItemEvent": [
- {
- "type": "choices",
- "choices": [
- {
- "text": "攻击+1",
- "action": [
- {
- "type": "setValue",
- "name": "status:atk",
- "operator": "+=",
- "value": "1"
- }
- ]
- },
- {
- "text": "防御+2",
- "action": [
- {
- "type": "setValue",
- "name": "status:def",
- "operator": "+=",
- "value": "2"
- }
- ]
- },
- {
- "text": "生命+200",
- "action": [
- {
- "type": "setValue",
- "name": "status:hp",
- "operator": "+=",
- "value": "200"
- }
- ]
- }
- ]
- }
- ],
- "canUseItemEffect": "true"
+ "text": ",速度+${core.values.yellowGem}",
+ "itemEffect": "core.status.hero.speed += core.values.yellowGem * core.status.thisMap.ratio",
+ "itemEffectTip": ",速度+${core.values.yellowGem * core.status.thisMap.ratio}",
+ "useItemEvent": null,
+ "canUseItemEffect": "true",
+ "useItemEffect": "core.status.hero.spell += core.values.yellowGem"
},
"redPotion": {
"cls": "items",
@@ -130,18 +92,20 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
"canUseItemEffect": "true"
},
"sword0": {
- "cls": "items",
- "name": "破旧的剑",
+ "cls": "equips",
+ "name": "基础匕首",
"text": "一把已经生锈的剑",
"equip": {
"type": 0,
"animate": "sword",
"value": {
- "atk": 0
- }
+ "speed": 20
+ },
+ "percentage": {}
},
"itemEffect": "core.status.hero.atk += 0",
- "itemEffectTip": ",攻击+0"
+ "itemEffectTip": ",攻击+0",
+ "equipCls": "匕首"
},
"sword1": {
"cls": "equips",
@@ -150,10 +114,10 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
"equip": {
"type": 0,
"animate": "sword",
- "value": {
- "atk": 10
- },
- "percentage": {}
+ "value": {},
+ "percentage": {
+ "mdef": 10
+ }
},
"itemEffect": "core.status.hero.atk += 10",
"itemEffectTip": ",攻击+10",
@@ -166,10 +130,10 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
"equip": {
"type": "武器",
"animate": "sword",
- "value": {
- "atk": 20
- },
- "percentage": {}
+ "value": {},
+ "percentage": {
+ "mdef": 20
+ }
},
"itemEffect": "core.status.hero.atk += 20",
"itemEffectTip": ",攻击+20",
@@ -247,10 +211,10 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
"text": "一个很普通的铁盾",
"equip": {
"type": 1,
- "value": {
- "def": 10
- },
- "percentage": {}
+ "value": {},
+ "percentage": {
+ "mdef": 10
+ }
},
"itemEffect": "core.status.hero.def += 10",
"itemEffectTip": ",防御+10",
@@ -310,13 +274,15 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
"itemEffectTip": ",防御+100,护盾+100"
},
"superPotion": {
- "cls": "items",
+ "cls": "tools",
"name": "圣水",
"itemEffect": "core.status.hero.hp *= 2",
"itemEffectTip": ",生命值翻倍",
"useItemEffect": "core.status.hero.hp *= 2;core.playSound('回血');",
"canUseItemEffect": "true",
- "text": "生命值翻倍"
+ "text": "生命值翻倍",
+ "canBatchUse": "true",
+ "hideInReplay": true
},
"book": {
"cls": "constants",
@@ -593,9 +559,18 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
"canUseItemEffect": "true"
},
"I375": {
- "cls": "items",
- "name": "新物品",
- "canUseItemEffect": "true"
+ "cls": "equips",
+ "name": "基础法杖",
+ "canUseItemEffect": "true",
+ "equipCls": "法杖",
+ "equip": {
+ "type": 0,
+ "value": {
+ "matk": 10,
+ "mhp": -100
+ },
+ "percentage": {}
+ }
},
"I396": {
"cls": "items",
diff --git a/project/plugins.js b/project/plugins.js
index 7033fe6..df24c93 100644
--- a/project/plugins.js
+++ b/project/plugins.js
@@ -197,6 +197,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
core.registerEvent("cgtext", function (data) {
if (!main.replayChecking && !core.isReplaying()) {
core.ui.cgText.image = data.bg;
+ core.ui.cgText.nobg = data.nobg ?? false;
core.ui.cgText.memory = data.memory;
core.ui.cgText.head = core.clone(data.head);
core.ui.cgText.index = data.index;
@@ -303,8 +304,6 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height);
lightDec = core.clamp(lightDec, 0, 1);
-
- // 绘制每个灯光效果
ctx.globalCompositeOperation = "destination-out";
lights.forEach(function (light) {
// 坐标,半径,中心不透明度
@@ -692,207 +691,207 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
};
},
"fiveLayers": function () {
- // 是否启用五图层(增加背景2层和前景2层) 将__enable置为true即会启用;启用后请保存后刷新编辑器
- // 背景层2将会覆盖背景层 被事件层覆盖 前景层2将会覆盖前景层
- // 另外 请注意加入两个新图层 会让大地图的性能降低一些
- // 插件作者:ad
- var __enable = true;
- if (!__enable) return;
+ // 是否启用五图层(增加背景2层和前景2层) 将__enable置为true即会启用;启用后请保存后刷新编辑器
+ // 背景层2将会覆盖背景层 被事件层覆盖 前景层2将会覆盖前景层
+ // 另外 请注意加入两个新图层 会让大地图的性能降低一些
+ // 插件作者:ad
+ var __enable = true;
+ if (!__enable) return;
- // 创建新图层
- function createCanvas(name, zIndex) {
- if (!name) return;
- var canvas = document.createElement("canvas");
- canvas.id = name;
- canvas.className = "gameCanvas anti-aliasing";
- // 编辑器模式下设置zIndex会导致加入的图层覆盖优先级过高
- if (main.mode != "editor") canvas.style.zIndex = zIndex || 0;
- // 将图层插入进游戏内容
- document.getElementById("gameDraw").appendChild(canvas);
- var ctx = canvas.getContext("2d");
- core.canvas[name] = ctx;
- canvas.width = core._PX_ || core.__PIXELS__;
- canvas.height = core._PY_ || core.__PIXELS__;
- return canvas;
- }
+ // 创建新图层
+ function createCanvas(name, zIndex) {
+ if (!name) return;
+ var canvas = document.createElement("canvas");
+ canvas.id = name;
+ canvas.className = "gameCanvas anti-aliasing";
+ // 编辑器模式下设置zIndex会导致加入的图层覆盖优先级过高
+ if (main.mode != "editor") canvas.style.zIndex = zIndex || 0;
+ // 将图层插入进游戏内容
+ document.getElementById("gameDraw").appendChild(canvas);
+ var ctx = canvas.getContext("2d");
+ core.canvas[name] = ctx;
+ canvas.width = core._PX_ || core.__PIXELS__;
+ canvas.height = core._PY_ || core.__PIXELS__;
+ return canvas;
+ }
- var bg2Canvas = createCanvas("bg2", 20);
- var fg2Canvas = createCanvas("fg2", 63);
- // 大地图适配
- core.bigmap.canvas = [
- "bg2",
- "fg2",
- "bg",
- "event",
- "event2",
- "fg",
- "damage",
- ];
- core.initStatus.bg2maps = {};
- core.initStatus.fg2maps = {};
+ var bg2Canvas = createCanvas("bg2", 20);
+ var fg2Canvas = createCanvas("fg2", 63);
+ // 大地图适配
+ core.bigmap.canvas = [
+ "bg2",
+ "fg2",
+ "bg",
+ "event",
+ "event2",
+ "fg",
+ "damage",
+ ];
+ core.initStatus.bg2maps = {};
+ core.initStatus.fg2maps = {};
- if (main.mode == "editor") {
- /*插入编辑器的图层 不做此步新增图层无法在编辑器显示*/
- // 编辑器图层覆盖优先级 eui > efg > fg(前景层) > event2(48*32图块的事件层) > event(事件层) > bg(背景层)
- // 背景层2(bg2) 插入事件层(event)之前(即bg与event之间)
- document
- .getElementById("mapEdit")
- .insertBefore(bg2Canvas, document.getElementById("event"));
- // 前景层2(fg2) 插入编辑器前景(efg)之前(即fg之后)
- document
- .getElementById("mapEdit")
- .insertBefore(fg2Canvas, document.getElementById("ebm"));
- // 原本有三个图层 从4开始添加
- var num = 4;
- // 新增图层存入editor.dom中
- editor.dom.bg2c = core.canvas.bg2.canvas;
- editor.dom.bg2Ctx = core.canvas.bg2;
- editor.dom.fg2c = core.canvas.fg2.canvas;
- editor.dom.fg2Ctx = core.canvas.fg2;
- editor.dom.maps.push("bg2map", "fg2map");
- editor.dom.canvas.push("bg2", "fg2");
+ if (main.mode == "editor") {
+ /*插入编辑器的图层 不做此步新增图层无法在编辑器显示*/
+ // 编辑器图层覆盖优先级 eui > efg > fg(前景层) > event2(48*32图块的事件层) > event(事件层) > bg(背景层)
+ // 背景层2(bg2) 插入事件层(event)之前(即bg与event之间)
+ document
+ .getElementById("mapEdit")
+ .insertBefore(bg2Canvas, document.getElementById("event"));
+ // 前景层2(fg2) 插入编辑器前景(efg)之前(即fg之后)
+ document
+ .getElementById("mapEdit")
+ .insertBefore(fg2Canvas, document.getElementById("ebm"));
+ // 原本有三个图层 从4开始添加
+ var num = 4;
+ // 新增图层存入editor.dom中
+ editor.dom.bg2c = core.canvas.bg2.canvas;
+ editor.dom.bg2Ctx = core.canvas.bg2;
+ editor.dom.fg2c = core.canvas.fg2.canvas;
+ editor.dom.fg2Ctx = core.canvas.fg2;
+ editor.dom.maps.push("bg2map", "fg2map");
+ editor.dom.canvas.push("bg2", "fg2");
- // 创建编辑器上的按钮
- var createCanvasBtn = function (name) {
- // 电脑端创建按钮
- var input = document.createElement("input");
- // layerMod4/layerMod5
- var id = "layerMod" + num++;
- // bg2map/fg2map
- var value = name + "map";
- input.type = "radio";
- input.name = "layerMod";
- input.id = id;
- input.value = value;
- editor.dom[id] = input;
- input.onchange = function () {
- editor.uifunctions.setLayerMod(value);
- };
- return input;
- };
+ // 创建编辑器上的按钮
+ var createCanvasBtn = function (name) {
+ // 电脑端创建按钮
+ var input = document.createElement("input");
+ // layerMod4/layerMod5
+ var id = "layerMod" + num++;
+ // bg2map/fg2map
+ var value = name + "map";
+ input.type = "radio";
+ input.name = "layerMod";
+ input.id = id;
+ input.value = value;
+ editor.dom[id] = input;
+ input.onchange = function () {
+ editor.uifunctions.setLayerMod(value);
+ };
+ return input;
+ };
- var createCanvasBtn_mobile = function (name) {
- // 手机端往选择列表中添加子选项
- var input = document.createElement("option");
- var id = "layerMod" + num++;
- var value = name + "map";
- input.name = "layerMod";
- input.value = value;
- editor.dom[id] = input;
- return input;
- };
- if (!editor.isMobile) {
- var input = createCanvasBtn("bg2");
- var input2 = createCanvasBtn("fg2");
- // 获取事件层及其父节点
- var child = document.getElementById("layerMod"),
- parent = child.parentNode;
- // 背景层2插入事件层前
- parent.insertBefore(input, child);
- // 不能直接更改背景层2的innerText 所以创建文本节点
- var txt = document.createTextNode("bg2");
- // 插入事件层前(即新插入的背景层2前)
- parent.insertBefore(txt, child);
- // 向最后插入前景层2(即插入前景层后)
- parent.appendChild(input2);
- var txt2 = document.createTextNode("fg2");
- parent.appendChild(txt2);
- parent.childNodes[2].replaceWith("bg");
- parent.childNodes[6].replaceWith("事件");
- parent.childNodes[8].replaceWith("fg");
- } else {
- var input = createCanvasBtn_mobile("bg2");
- var input2 = createCanvasBtn_mobile("fg2");
- // 手机端因为是选项 所以可以直接改innerText
- input.innerText = "背景层2";
- input2.innerText = "前景层2";
- var parent = document.getElementById("layerMod");
- parent.insertBefore(input, parent.children[1]);
- parent.appendChild(input2);
- }
- }
+ var createCanvasBtn_mobile = function (name) {
+ // 手机端往选择列表中添加子选项
+ var input = document.createElement("option");
+ var id = "layerMod" + num++;
+ var value = name + "map";
+ input.name = "layerMod";
+ input.value = value;
+ editor.dom[id] = input;
+ return input;
+ };
+ if (!editor.isMobile) {
+ var input = createCanvasBtn("bg2");
+ var input2 = createCanvasBtn("fg2");
+ // 获取事件层及其父节点
+ var child = document.getElementById("layerMod"),
+ parent = child.parentNode;
+ // 背景层2插入事件层前
+ parent.insertBefore(input, child);
+ // 不能直接更改背景层2的innerText 所以创建文本节点
+ var txt = document.createTextNode("bg2");
+ // 插入事件层前(即新插入的背景层2前)
+ parent.insertBefore(txt, child);
+ // 向最后插入前景层2(即插入前景层后)
+ parent.appendChild(input2);
+ var txt2 = document.createTextNode("fg2");
+ parent.appendChild(txt2);
+ parent.childNodes[2].replaceWith("bg");
+ parent.childNodes[6].replaceWith("事件");
+ parent.childNodes[8].replaceWith("fg");
+ } else {
+ var input = createCanvasBtn_mobile("bg2");
+ var input2 = createCanvasBtn_mobile("fg2");
+ // 手机端因为是选项 所以可以直接改innerText
+ input.innerText = "背景层2";
+ input2.innerText = "前景层2";
+ var parent = document.getElementById("layerMod");
+ parent.insertBefore(input, parent.children[1]);
+ parent.appendChild(input2);
+ }
+ }
- var _loadFloor_doNotCopy = core.maps._loadFloor_doNotCopy;
- core.maps._loadFloor_doNotCopy = function () {
- return ["bg2map", "fg2map"].concat(_loadFloor_doNotCopy());
- };
- ////// 绘制背景和前景层 //////
- core.maps._drawBg_draw = function (floorId, toDrawCtx, cacheCtx, config) {
- config.ctx = cacheCtx;
- core.maps._drawBg_drawBackground(floorId, config);
- // ------ 调整这两行的顺序来控制是先绘制贴图还是先绘制背景图块;后绘制的覆盖先绘制的。
- core.maps._drawFloorImages(
- floorId,
- config.ctx,
- "bg",
- null,
- null,
- config.onMap
- );
- core.maps._drawBgFgMap(floorId, "bg", config);
- if (config.onMap) {
- core.drawImage(
- toDrawCtx,
- cacheCtx.canvas,
- core.bigmap.v2 ? -32 : 0,
- core.bigmap.v2 ? -32 : 0
- );
- core.clearMap("bg2");
- core.clearMap(cacheCtx);
- }
- core.maps._drawBgFgMap(floorId, "bg2", config);
- if (config.onMap)
- core.drawImage(
- "bg2",
- cacheCtx.canvas,
- core.bigmap.v2 ? -32 : 0,
- core.bigmap.v2 ? -32 : 0
- );
- config.ctx = toDrawCtx;
- };
- core.maps._drawFg_draw = function (floorId, toDrawCtx, cacheCtx, config) {
- config.ctx = cacheCtx;
- // ------ 调整这两行的顺序来控制是先绘制贴图还是先绘制前景图块;后绘制的覆盖先绘制的。
- core.maps._drawFloorImages(
- floorId,
- config.ctx,
- "fg",
- null,
- null,
- config.onMap
- );
- core.maps._drawBgFgMap(floorId, "fg", config);
- if (config.onMap) {
- core.drawImage(
- toDrawCtx,
- cacheCtx.canvas,
- core.bigmap.v2 ? -32 : 0,
- core.bigmap.v2 ? -32 : 0
- );
- core.clearMap("fg2");
- core.clearMap(cacheCtx);
- }
- core.maps._drawBgFgMap(floorId, "fg2", config);
- if (config.onMap)
- core.drawImage(
- "fg2",
- cacheCtx.canvas,
- core.bigmap.v2 ? -32 : 0,
- core.bigmap.v2 ? -32 : 0
- );
- config.ctx = toDrawCtx;
- };
- ////// 移动判定 //////
- core.maps._generateMovableArray_arrays = function (floorId) {
- return {
- bgArray: this.getBgMapArray(floorId),
- fgArray: this.getFgMapArray(floorId),
- eventArray: this.getMapArray(floorId),
- bg2Array: this._getBgFgMapArray("bg2", floorId),
- fg2Array: this._getBgFgMapArray("fg2", floorId),
- };
- };
-},
+ var _loadFloor_doNotCopy = core.maps._loadFloor_doNotCopy;
+ core.maps._loadFloor_doNotCopy = function () {
+ return ["bg2map", "fg2map"].concat(_loadFloor_doNotCopy());
+ };
+ ////// 绘制背景和前景层 //////
+ core.maps._drawBg_draw = function (floorId, toDrawCtx, cacheCtx, config) {
+ config.ctx = cacheCtx;
+ core.maps._drawBg_drawBackground(floorId, config);
+ // ------ 调整这两行的顺序来控制是先绘制贴图还是先绘制背景图块;后绘制的覆盖先绘制的。
+ core.maps._drawFloorImages(
+ floorId,
+ config.ctx,
+ "bg",
+ null,
+ null,
+ config.onMap
+ );
+ core.maps._drawBgFgMap(floorId, "bg", config);
+ if (config.onMap) {
+ core.drawImage(
+ toDrawCtx,
+ cacheCtx.canvas,
+ core.bigmap.v2 ? -32 : 0,
+ core.bigmap.v2 ? -32 : 0
+ );
+ core.clearMap("bg2");
+ core.clearMap(cacheCtx);
+ }
+ core.maps._drawBgFgMap(floorId, "bg2", config);
+ if (config.onMap)
+ core.drawImage(
+ "bg2",
+ cacheCtx.canvas,
+ core.bigmap.v2 ? -32 : 0,
+ core.bigmap.v2 ? -32 : 0
+ );
+ config.ctx = toDrawCtx;
+ };
+ core.maps._drawFg_draw = function (floorId, toDrawCtx, cacheCtx, config) {
+ config.ctx = cacheCtx;
+ // ------ 调整这两行的顺序来控制是先绘制贴图还是先绘制前景图块;后绘制的覆盖先绘制的。
+ core.maps._drawFloorImages(
+ floorId,
+ config.ctx,
+ "fg",
+ null,
+ null,
+ config.onMap
+ );
+ core.maps._drawBgFgMap(floorId, "fg", config);
+ if (config.onMap) {
+ core.drawImage(
+ toDrawCtx,
+ cacheCtx.canvas,
+ core.bigmap.v2 ? -32 : 0,
+ core.bigmap.v2 ? -32 : 0
+ );
+ core.clearMap("fg2");
+ core.clearMap(cacheCtx);
+ }
+ core.maps._drawBgFgMap(floorId, "fg2", config);
+ if (config.onMap)
+ core.drawImage(
+ "fg2",
+ cacheCtx.canvas,
+ core.bigmap.v2 ? -32 : 0,
+ core.bigmap.v2 ? -32 : 0
+ );
+ config.ctx = toDrawCtx;
+ };
+ ////// 移动判定 //////
+ core.maps._generateMovableArray_arrays = function (floorId) {
+ return {
+ bgArray: this.getBgMapArray(floorId),
+ fgArray: this.getFgMapArray(floorId),
+ eventArray: this.getMapArray(floorId),
+ bg2Array: this._getBgFgMapArray("bg2", floorId),
+ fg2Array: this._getBgFgMapArray("fg2", floorId),
+ };
+ };
+ },
"itemShop": function () {
// 道具商店相关的插件
// 可在全塔属性-全局商店中使用「道具商店」事件块进行编辑(如果找不到可以在入口方块中找)
@@ -2523,1804 +2522,1984 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
})();
},
"statusBar": function () {
- main.dom.floorMsgGroup.style.display = "none";
- main.dom.statusBar.style.display = "none";
- main.dom.toolBar.style.display = "none";
- //所有数据*3是为了实现高清画布
- const GAMEVIEW_WIDTH = 676 * 3; //横屏画面宽度
- const GAMEVIEW_HEIGHT = 416 * 3; //横屏画面高度
+ main.dom.floorMsgGroup.style.display = "none";
+ main.dom.statusBar.style.display = "none";
+ main.dom.toolBar.style.display = "none";
+ //所有数据*3是为了实现高清画布
+ const GAMEVIEW_WIDTH = 676 * 3; //横屏画面宽度
+ const GAMEVIEW_HEIGHT = 416 * 3; //横屏画面高度
- const GAMEVIEW_WIDTH_VERTICAL = 416 * 3; //竖屏画面宽度
- const GAMEVIEW_HEIGHT_VERTICAL = 676 * 3; //竖屏画面高度
+ const GAMEVIEW_WIDTH_VERTICAL = 416 * 3; //竖屏画面宽度
+ const GAMEVIEW_HEIGHT_VERTICAL = 676 * 3; //竖屏画面高度
- const BAR_WIDTH = 130 * 3; //横屏左侧额外距离(即边栏宽度)
- const BAR_HEIGHT_VERTICAL = 130 * 3; //竖屏上侧额外距离(即边栏高度)
- const BORDER_WIDTH = 0; //游戏画面左侧偏移距离
- const BORDER_HEIGHT = 0; //游戏画面上侧偏移距离
+ const BAR_WIDTH = 130 * 3; //横屏左侧额外距离(即边栏宽度)
+ const BAR_HEIGHT_VERTICAL = 130 * 3; //竖屏上侧额外距离(即边栏高度)
+ const BORDER_WIDTH = 0; //游戏画面左侧偏移距离
+ const BORDER_HEIGHT = 0; //游戏画面上侧偏移距离
- const ITEM_BOX_LEFT = 549 * 3; //横屏道具栏左侧距离(右侧边栏需增加BAR_WIDTH+GAMEVIEW_HEIGHT)
- const ITEM_BOX_TOP = 155 * 3; //横屏道具栏上侧距离
- const ITEM_BOX_LEFT_VERTICAL = 160 * 3; //竖屏道具栏左侧距离
- const ITEM_BOX_TOP_VERTICAL = 549 * 3; //竖屏道具栏上侧距离(下侧边栏需增加BAR_HEIGHT_VERTICAL+GAMEVIEW_WIDTH_VERTICAL)
+ const ITEM_BOX_LEFT = 549 * 3; //横屏道具栏左侧距离(右侧边栏需增加BAR_WIDTH+GAMEVIEW_HEIGHT)
+ const ITEM_BOX_TOP = 175 * 3; //横屏道具栏上侧距离
+ const ITEM_BOX_LEFT_VERTICAL = 160 * 3; //竖屏道具栏左侧距离
+ const ITEM_BOX_TOP_VERTICAL = 549 * 3; //竖屏道具栏上侧距离(下侧边栏需增加BAR_HEIGHT_VERTICAL+GAMEVIEW_WIDTH_VERTICAL)
- const EQUIP_BLOCK_LEFT = 549 * 3; //横屏装备栏左侧距离(右侧边栏需增加BAR_WIDTH+GAMEVIEW_HEIGHT)
- const EQUIP_BLOCK_TOP = 10 * 3; //横屏装备栏上侧距离
- const EQUIP_BLOCK_LEFT_VERTICAL = 10 * 3; //竖屏装备栏左侧距离
- const EQUIP_BLOCK_TOP_VERTICAL = 549 * 3; //竖屏装备栏上侧距离(下侧边栏需增加BAR_HEIGHT_VERTICAL+GAMEVIEW_WIDTH_VERTICAL)
+ const EQUIP_BLOCK_LEFT = 549 * 3; //横屏装备栏左侧距离(右侧边栏需增加BAR_WIDTH+GAMEVIEW_HEIGHT)
+ const EQUIP_BLOCK_TOP = 10 * 3; //横屏装备栏上侧距离
+ const EQUIP_BLOCK_LEFT_VERTICAL = 10 * 3; //竖屏装备栏左侧距离
+ const EQUIP_BLOCK_TOP_VERTICAL = 549 * 3; //竖屏装备栏上侧距离(下侧边栏需增加BAR_HEIGHT_VERTICAL+GAMEVIEW_WIDTH_VERTICAL)
- const MAP_BLOCK_LEFT = 551 * 3; //横屏小地图左侧距离(右侧边栏需增加BAR_WIDTH+GAMEVIEW_HEIGHT)
- const MAP_BLOCK_TOP = 0; //横屏小地图上侧距离
- const MAP_BLOCK_LEFT_VERTICAL = 0; //竖屏小地图左侧距离
- const MAP_BLOCK_TOP_VERTICAL = 551 * 3; //竖屏小地图上侧距离(下侧边栏需增加BAR_HEIGHT_VERTICAL+GAMEVIEW_WIDTH_VERTICAL)
+ const MAP_BLOCK_LEFT = 551 * 3; //横屏小地图左侧距离(右侧边栏需增加BAR_WIDTH+GAMEVIEW_HEIGHT)
+ const MAP_BLOCK_TOP = 0; //横屏小地图上侧距离
+ const MAP_BLOCK_LEFT_VERTICAL = 0; //竖屏小地图左侧距离
+ const MAP_BLOCK_TOP_VERTICAL = 551 * 3; //竖屏小地图上侧距离(下侧边栏需增加BAR_HEIGHT_VERTICAL+GAMEVIEW_WIDTH_VERTICAL)
- const KEY_BLOCK_LEFT = EQUIP_BLOCK_LEFT; //横屏钥匙栏左侧距离(右侧边栏需增加BAR_WIDTH+GAMEVIEW_HEIGHT)
- const KEY_BLOCK_TOP = 110 * 3; //横屏钥匙栏上侧距离
- const KEY_BLOCK_LEFT_VERTICAL = 110 * 3; //竖屏钥匙栏左侧距离
- const KEY_BLOCK_TOP_VERTICAL = EQUIP_BLOCK_TOP_VERTICAL; //竖屏钥匙栏上侧距离(下侧边栏需增加BAR_HEIGHT_VERTICAL+GAMEVIEW_WIDTH_VERTICAL)
+ const KEY_BLOCK_LEFT = EQUIP_BLOCK_LEFT; //横屏钥匙栏左侧距离(右侧边栏需增加BAR_WIDTH+GAMEVIEW_HEIGHT)
+ const KEY_BLOCK_TOP = 130 * 3; //横屏钥匙栏上侧距离
+ const KEY_BLOCK_LEFT_VERTICAL = 110 * 3; //竖屏钥匙栏左侧距离
+ const KEY_BLOCK_TOP_VERTICAL = EQUIP_BLOCK_TOP_VERTICAL; //竖屏钥匙栏上侧距离(下侧边栏需增加BAR_HEIGHT_VERTICAL+GAMEVIEW_WIDTH_VERTICAL)
- const INFO_BLOCK_LEFT = 10 * 3; //横屏道具说明左侧距离(右侧边栏需增加BAR_WIDTH+GAMEVIEW_HEIGHT)
- const INFO_BLOCK_TOP = 180 * 3; //横屏道具说明上侧距离
- const INFO_BLOCK_LEFT_VERTICAL = 113 * 3; //竖屏道具说明左侧距离
- const INFO_BLOCK_TOP_VERTICAL = 8 * 3; //竖屏道具说明上侧距离(下侧边栏需增加BAR_HEIGHT_VERTICAL+GAMEVIEW_WIDTH_VERTICAL)
+ const INFO_BLOCK_LEFT = 10 * 3; //横屏道具说明左侧距离(右侧边栏需增加BAR_WIDTH+GAMEVIEW_HEIGHT)
+ const INFO_BLOCK_TOP = 290 * 3; //横屏道具说明上侧距离
+ const INFO_BLOCK_LEFT_VERTICAL = 113 * 3; //竖屏道具说明左侧距离
+ const INFO_BLOCK_TOP_VERTICAL = 8 * 3; //竖屏道具说明上侧距离(下侧边栏需增加BAR_HEIGHT_VERTICAL+GAMEVIEW_WIDTH_VERTICAL)
- const TOOL_BOX_LEFT = EQUIP_BLOCK_LEFT; //横屏工具栏左侧距离(右侧边栏需增加BAR_WIDTH+GAMEVIEW_HEIGHT)
- const TOOL_BOX_TOP = 348 * 3; //横屏工具栏上侧距离
- const TOOL_BOX_LEFT_VERTICAL = 348 * 3; //竖屏工具栏左侧距离
- const TOOL_BOX_TOP_VERTICAL = 549 * 3; //竖屏工具栏上侧距离(下侧边栏需增加BAR_HEIGHT_VERTICAL+GAMEVIEW_WIDTH_VERTICAL)
+ const TOOL_BOX_LEFT = EQUIP_BLOCK_LEFT; //横屏工具栏左侧距离(右侧边栏需增加BAR_WIDTH+GAMEVIEW_HEIGHT)
+ const TOOL_BOX_TOP = 348 * 3; //横屏工具栏上侧距离
+ const TOOL_BOX_LEFT_VERTICAL = 348 * 3; //竖屏工具栏左侧距离
+ const TOOL_BOX_TOP_VERTICAL = 549 * 3; //竖屏工具栏上侧距离(下侧边栏需增加BAR_HEIGHT_VERTICAL+GAMEVIEW_WIDTH_VERTICAL)
- const TOOL_ICON_OUTER_SIZE = 34 * 3;
+ const TOOL_ICON_OUTER_SIZE = 34 * 3;
- const TEXT_COLOR = "#FFFFFF"; //默认文字颜色
- const globalAlpha = 0.7; //默认底框透明度
- const FORCE_COUNTABLE_ITEMS = ["centerFly"]; //常态显示数量的非永久道具,如果道具不在此数组中,则只有道具多余1时显示数量
+ const TEXT_COLOR = "#FFFFFF"; //默认文字颜色
+ const globalAlpha = 0.7; //默认底框透明度
+ const FORCE_COUNTABLE_ITEMS = ["centerFly"]; //常态显示数量的非永久道具,如果道具不在此数组中,则只有道具多余1时显示数量
- const outerBackground = document.createElement("canvas"); //背景画布设置
- let globalAlphafloor = 0,
- globalAlphafloorStatus = 4;
- outerBackground.style.position = "absolute";
- outerBackground.style.zIndex = 5;
- outerBackground.id = "outerBackground";
- main.dom.outerBackground = outerBackground;
- main.dom.startPanel.insertAdjacentElement("afterend", outerBackground);
+ const outerBackground = document.createElement("canvas"); //背景画布设置
+ let globalAlphafloor = 0,
+ globalAlphafloorStatus = 4;
+ outerBackground.style.position = "absolute";
+ outerBackground.style.zIndex = 5;
+ outerBackground.id = "outerBackground";
+ main.dom.outerBackground = outerBackground;
+ main.dom.startPanel.insertAdjacentElement("afterend", outerBackground);
- const outerUI = document.createElement("canvas"); //额外ui画布设置(状态栏所有绘制、点击都在额外ui上)
- outerUI.style.position = "absolute";
- outerUI.style.zIndex = 165;
- outerUI.id = "outerUI";
+ const outerUI = document.createElement("canvas"); //额外ui画布设置(状态栏所有绘制、点击都在额外ui上)
+ outerUI.style.position = "absolute";
+ outerUI.style.zIndex = 165;
+ outerUI.id = "outerUI";
- main.dom.outerUI = outerUI;
- outerBackground.insertAdjacentElement("afterend", outerUI);
- setTimeout(function () {
- // Should be executed immediately after init()
- main.canvas.outerUI = outerUI.getContext("2d");
- });
- outerUI.onclick = function (e) {
- try {
- e.preventDefault();
- if (!core.isPlaying()) return false;
- const left = core.dom.gameGroup.offsetLeft;
- const top = core.dom.gameGroup.offsetTop;
- const px = Math.floor((e.clientX - left) / core.domStyle.scale),
- py = Math.floor((e.clientY - top) / core.domStyle.scale);
- core.ui.statusBar.onclick(px * 3, py * 3);
- } catch (ee) {
- main.log(ee);
- }
- };
+ main.dom.outerUI = outerUI;
+ outerBackground.insertAdjacentElement("afterend", outerUI);
+ setTimeout(function () {
+ // Should be executed immediately after init()
+ main.canvas.outerUI = outerUI.getContext("2d");
+ });
+ outerUI.onclick = function (e) {
+ try {
+ e.preventDefault();
+ if (!core.isPlaying()) return false;
+ const left = core.dom.gameGroup.offsetLeft;
+ const top = core.dom.gameGroup.offsetTop;
+ const px = Math.floor((e.clientX - left) / core.domStyle.scale),
+ py = Math.floor((e.clientY - top) / core.domStyle.scale);
+ core.ui.statusBar.onclick(px * 3, py * 3);
+ } catch (ee) {
+ main.log(ee);
+ }
+ };
- const _resize_gameGroup = function (obj) {
- //游戏画面自适应调节
- const gameGroup = core.dom.gameGroup;
- gameGroup.style.width = obj.totalWidth + "px";
- gameGroup.style.height = obj.totalHeight + "px";
- gameGroup.style.left = (obj.clientWidth - obj.totalWidth) / 2 + "px";
- gameGroup.style.top = (obj.clientHeight - obj.totalHeight) / 2 + "px";
- //floorMsgGroup为切换楼层中生效,显示时间可通过‘全塔属性’——‘切换楼层时间’或游戏内设置调整
- //显示内容为游戏名/版本号/楼层名
- // floorMsgGroup
- var floorMsgGroup = core.dom.floorMsgGroup;
- var globalAttribute =
- core.status.globalAttribute || core.initStatus.globalAttribute;
- floorMsgGroup.style = globalAttribute.floorChangingStyle;
- floorMsgGroup.style.height = floorMsgGroup.style.width =
- (GAMEVIEW_HEIGHT / 3) * core.domStyle.scale + "px";
- floorMsgGroup.style.fontSize = 16 * core.domStyle.scale + "px";
+ const _resize_gameGroup = function (obj) {
+ //游戏画面自适应调节
+ const gameGroup = core.dom.gameGroup;
+ gameGroup.style.width = obj.totalWidth + "px";
+ gameGroup.style.height = obj.totalHeight + "px";
+ gameGroup.style.left = (obj.clientWidth - obj.totalWidth) / 2 + "px";
+ gameGroup.style.top = (obj.clientHeight - obj.totalHeight) / 2 + "px";
+ //floorMsgGroup为切换楼层中生效,显示时间可通过‘全塔属性’——‘切换楼层时间’或游戏内设置调整
+ //显示内容为游戏名/版本号/楼层名
+ // floorMsgGroup
+ var floorMsgGroup = core.dom.floorMsgGroup;
+ var globalAttribute =
+ core.status.globalAttribute || core.initStatus.globalAttribute;
+ floorMsgGroup.style = globalAttribute.floorChangingStyle;
+ floorMsgGroup.style.height = floorMsgGroup.style.width =
+ (GAMEVIEW_HEIGHT / 3) * core.domStyle.scale + "px";
+ floorMsgGroup.style.fontSize = 16 * core.domStyle.scale + "px";
- if (core.domStyle.isVertical) {
- floorMsgGroup.style.left = "0px";
- floorMsgGroup.style.top =
- ((GAMEVIEW_HEIGHT_VERTICAL / 3 - GAMEVIEW_WIDTH_VERTICAL / 3) *
- core.domStyle.scale) /
- 2 +
- "px";
- } else {
- floorMsgGroup.style.left =
- ((GAMEVIEW_WIDTH / 3 - GAMEVIEW_HEIGHT / 3) * core.domStyle.scale) /
- 2 +
- "px";
- floorMsgGroup.style.top = "0px";
- }
- core.dom.musicBtn.style.right =
- (obj.clientWidth - obj.totalWidth) / 2 + "px";
- core.dom.musicBtn.style.bottom =
- (obj.clientHeight - obj.totalHeight) / 2 - 27 + "px";
- let startBackground = core.domStyle.isVertical
- ? main.styles.startVerticalBackground || main.styles.startBackground
- : main.styles.startBackground;
- if (main.dom.startBackground.getAttribute("__src__") != startBackground) {
- main.dom.startBackground.setAttribute("__src__", startBackground);
- main.dom.startBackground.src = startBackground;
- }
- const span = document
- .getElementById("startButtons")
- .getElementsByTagName("span");
- let font = (GAMEVIEW_WIDTH / 100) * core.domStyle.scale;
- if (core.domStyle.isVertical)
- font = ((GAMEVIEW_WIDTH_VERTICAL * 2) / 100) * core.domStyle.scale;
+ if (core.domStyle.isVertical) {
+ floorMsgGroup.style.left = "0px";
+ floorMsgGroup.style.top =
+ ((GAMEVIEW_HEIGHT_VERTICAL / 3 - GAMEVIEW_WIDTH_VERTICAL / 3) *
+ core.domStyle.scale) /
+ 2 +
+ "px";
+ } else {
+ floorMsgGroup.style.left =
+ ((GAMEVIEW_WIDTH / 3 - GAMEVIEW_HEIGHT / 3) * core.domStyle.scale) /
+ 2 +
+ "px";
+ floorMsgGroup.style.top = "0px";
+ }
+ core.dom.musicBtn.style.right =
+ (obj.clientWidth - obj.totalWidth) / 2 + "px";
+ core.dom.musicBtn.style.bottom =
+ (obj.clientHeight - obj.totalHeight) / 2 - 27 + "px";
+ let startBackground = core.domStyle.isVertical ?
+ main.styles.startVerticalBackground || main.styles.startBackground :
+ main.styles.startBackground;
+ if (main.dom.startBackground.getAttribute("__src__") != startBackground) {
+ main.dom.startBackground.setAttribute("__src__", startBackground);
+ main.dom.startBackground.src = startBackground;
+ }
+ const span = document
+ .getElementById("startButtons")
+ .getElementsByTagName("span");
+ let font = (GAMEVIEW_WIDTH / 100) * core.domStyle.scale;
+ if (core.domStyle.isVertical)
+ font = ((GAMEVIEW_WIDTH_VERTICAL * 2) / 100) * core.domStyle.scale;
- core.dom.playGame.style.fontSize = font + "px";
- core.dom.loadGame.style.fontSize = font + "px";
- core.dom.CGMode.style.fontSize = font + "px";
- core.dom.musicMode.style.fontSize = font + "px";
- core.dom.replayGame.style.fontSize = font + "px";
- core.dom.startButtonGroup.style.padding = font * 0.3 + "px 25px";
- };
- const _resize_canvas = function (obj) {
- //自适应画布
- main.dom.outerBackground.style.width = obj.totalWidth + "px";
- main.dom.outerBackground.style.height = obj.totalHeight + "px";
- main.dom.outerUI.style.width = obj.totalWidth + "px";
- main.dom.outerUI.style.height = obj.totalHeight + "px";
- if (main.dom.CGUI) {
- main.dom.CGUI.style.width = obj.totalWidth + 3 + "px";
- main.dom.CGUI.style.height = obj.totalHeight + 3 + "px";
- }
- if (main.dom.music) {
- main.dom.music.style.width = obj.totalWidth + 3 + "px";
- main.dom.music.style.height = obj.totalHeight + 3 + "px";
- }
- if (main.dom.cgText) {
- main.dom.cgText.style.width = obj.totalWidth + 3 + "px";
- main.dom.cgText.style.height = obj.totalHeight + 3 + "px";
- }
- if (main.dom.logcanvas) {
- main.dom.logcanvas.style.width = obj.totalWidth + 3 + "px";
- main.dom.logcanvas.style.height = obj.totalHeight + 3 + "px";
- }
- if (main.dom.over) {
- main.dom.over.style.width = obj.totalWidth + 3 + "px";
- main.dom.over.style.height = obj.totalHeight + 3 + "px";
- }
- if (main.dom.video) {
- main.dom.video.style.width = obj.totalWidth + 3 + "px";
- main.dom.video.style.height = obj.totalHeight + 3 + "px";
- if (core.domStyle.isVertical)
- main.dom.video.style.width = obj.totalHeight + 3 + "px";
- if (core.domStyle.isVertical)
- main.dom.video.style.height = obj.totalWidth + 3 + "px";
- main.dom.video.style.top = "50%";
- main.dom.video.style.left = "50%";
+ core.dom.playGame.style.fontSize = font + "px";
+ core.dom.loadGame.style.fontSize = font + "px";
+ core.dom.CGMode.style.fontSize = font + "px";
+ core.dom.musicMode.style.fontSize = font + "px";
+ core.dom.replayGame.style.fontSize = font + "px";
+ core.dom.startButtonGroup.style.padding = font * 0.3 + "px 25px";
+ };
+ const _resize_canvas = function (obj) {
+ //自适应画布
+ main.dom.outerBackground.style.width = obj.totalWidth + "px";
+ main.dom.outerBackground.style.height = obj.totalHeight + "px";
+ main.dom.outerUI.style.width = obj.totalWidth + "px";
+ main.dom.outerUI.style.height = obj.totalHeight + "px";
+ if (main.dom.CGUI) {
+ main.dom.CGUI.style.width = obj.totalWidth + 3 + "px";
+ main.dom.CGUI.style.height = obj.totalHeight + 3 + "px";
+ }
+ if (main.dom.music) {
+ main.dom.music.style.width = obj.totalWidth + 3 + "px";
+ main.dom.music.style.height = obj.totalHeight + 3 + "px";
+ }
+ if (main.dom.cgText) {
+ main.dom.cgText.style.width = obj.totalWidth + 3 + "px";
+ main.dom.cgText.style.height = obj.totalHeight + 3 + "px";
+ }
+ if (main.dom.logcanvas) {
+ main.dom.logcanvas.style.width = obj.totalWidth + 3 + "px";
+ main.dom.logcanvas.style.height = obj.totalHeight + 3 + "px";
+ }
+ if (main.dom.over) {
+ main.dom.over.style.width = obj.totalWidth + 3 + "px";
+ main.dom.over.style.height = obj.totalHeight + 3 + "px";
+ }
+ if (main.dom.book) {
+ main.dom.book.style.width = obj.totalWidth + 3 + "px";
+ main.dom.book.style.height = obj.totalHeight + 3 + "px";
+ }
+ if (main.dom.video) {
+ main.dom.video.style.width = obj.totalWidth + 3 + "px";
+ main.dom.video.style.height = obj.totalHeight + 3 + "px";
+ if (core.domStyle.isVertical)
+ main.dom.video.style.width = obj.totalHeight + 3 + "px";
+ if (core.domStyle.isVertical)
+ main.dom.video.style.height = obj.totalWidth + 3 + "px";
+ main.dom.video.style.top = "50%";
+ main.dom.video.style.left = "50%";
- main.dom.video.style.transform = "translate(-50%,-50%)";
+ main.dom.video.style.transform = "translate(-50%,-50%)";
- if (core.domStyle.isVertical)
- main.dom.video.style.transform = "translate(-50%,-50%) rotate(90deg)";
- }
- if (main.dom.video1) {
- main.dom.video1.style.width = obj.totalWidth + 3 + "px";
- main.dom.video1.style.height = obj.totalHeight + 3 + "px";
- }
+ if (core.domStyle.isVertical)
+ main.dom.video.style.transform = "translate(-50%,-50%) rotate(90deg)";
+ }
+ if (main.dom.video1) {
+ main.dom.video1.style.width = obj.totalWidth + 3 + "px";
+ main.dom.video1.style.height = obj.totalHeight + 3 + "px";
+ }
- const innerSize = obj.canvasWidth * core.domStyle.scale + "px";
- for (let i = 0; i < core.dom.gameCanvas.length; ++i)
- core.dom.gameCanvas[i].style.width = core.dom.gameCanvas[
- i
- ].style.height = innerSize;
- core.dom.gif.style.width = core.dom.gif.style.height = innerSize;
- core.dom.gif2.style.width = core.dom.gif2.style.height = innerSize;
+ main.dom.boss1.style.width = obj.totalWidth + 3 + "px";
+ main.dom.boss1.style.height = obj.totalHeight + 3 + "px";
- core.dom.gameDraw.style.width = core.dom.gameDraw.style.height =
- innerSize;
- core.dom.gameDraw.style.top =
- obj.gameDrawBox.top * core.domStyle.scale + "px";
- core.dom.gameDraw.style.left =
- obj.gameDrawBox.left * core.domStyle.scale + "px";
- // resize bigmap
- core.bigmap.canvas.forEach(function (cn) {
- const ratio = core.canvas[cn].canvas.hasAttribute("isHD")
- ? core.domStyle.ratio
- : 1;
- core.canvas[cn].canvas.style.width =
- (innerSize / ratio) * core.domStyle.scale + "px";
- core.canvas[cn].canvas.style.height =
- (innerSize / ratio) * core.domStyle.scale + "px";
- });
- // resize dynamic canvas
- for (const name in core.dymCanvas) {
- const ctx = core.dymCanvas[name],
- canvas = ctx.canvas;
- const ratio = canvas.hasAttribute("isHD") ? core.domStyle.ratio : 1;
- canvas.style.width = (innerSize / ratio) * core.domStyle.scale + "px";
- canvas.style.height = (innerSize / ratio) * core.domStyle.scale + "px";
- canvas.style.left =
- parseFloat(canvas.getAttribute("_left")) * core.domStyle.scale + "px";
- canvas.style.top =
- parseFloat(canvas.getAttribute("_top")) * core.domStyle.scale + "px";
- }
- // resize next
- main.dom.next.style.width = main.dom.next.style.height =
- 5 * core.domStyle.scale + "px";
- main.dom.next.style.borderBottomWidth =
- main.dom.next.style.borderRightWidth = 4 * core.domStyle.scale + "px";
- };
- const bgctx = main.dom.outerBackground.getContext("2d");
- const uictx = main.dom.outerUI.getContext("2d");
- let now = 0;
- core.registerAnimationFrame("lightFloor", true, function (timestamp) {
- if (timestamp - now > 1000 / 60) {
- now = timestamp;
- globalAlphafloor += globalAlphafloorStatus;
- if (globalAlphafloor === 100) globalAlphafloorStatus = -2;
- if (globalAlphafloor === 0) globalAlphafloorStatus = 2;
+ main.dom.boss2.style.width = obj.totalWidth + 3 + "px";
+ main.dom.boss2.style.height = obj.totalHeight + 3 + "px";
- if (core.domStyle.isVertical) {
- core.clearMap(
- uictx,
- MAP_BLOCK_LEFT_VERTICAL,
- MAP_BLOCK_TOP_VERTICAL,
- 340,
- 360
- );
- if (core.status.event.id === "viewMaps") {
- core.ui.statusBar._update_map(core.status.event.data.floorId);
- } else {
- core.ui.statusBar._update_map();
- }
+ main.dom.boss3.style.width = obj.totalWidth + 3 + "px";
+ main.dom.boss3.style.height = obj.totalHeight + 3 + "px";
- uictx.globalAlpha = globalAlphafloor / 100;
- core.drawImage(
- uictx,
- "green.webp",
- MAP_BLOCK_LEFT_VERTICAL + 135,
- MAP_BLOCK_TOP_VERTICAL + 170
- );
- uictx.globalAlpha = 1;
- } else {
- core.clearMap(uictx, MAP_BLOCK_LEFT, MAP_BLOCK_TOP, 340, 360);
- if (core.status.event.id === "viewMaps") {
- core.ui.statusBar._update_map(core.status.event.data.floorId);
- } else {
- core.ui.statusBar._update_map();
- }
- uictx.globalAlpha = globalAlphafloor / 100;
- core.drawImage(
- uictx,
- "green.webp",
- MAP_BLOCK_LEFT + 150,
- MAP_BLOCK_TOP + 180
- );
- uictx.globalAlpha = 1;
- }
- }
- });
+ main.dom.boss4.style.width = obj.totalWidth + 3 + "px";
+ main.dom.boss4.style.height = obj.totalHeight + 3 + "px";
- core.control.resize = function () {
- //自适应,可实现横竖屏切换
- if (main.mode == "editor") return;
+ main.dom.boss5.style.width = obj.totalWidth + 3 + "px";
+ main.dom.boss5.style.height = obj.totalHeight + 3 + "px";
+ main.dom.boss6.style.width = obj.totalWidth + 3 + "px";
+ main.dom.boss6.style.height = obj.totalHeight + 3 + "px";
+ main.dom.boss7.style.width = obj.totalWidth + 3 + "px";
+ main.dom.boss7.style.height = obj.totalHeight + 3 + "px";
+ main.dom.boss8.style.width = obj.totalWidth + 3 + "px";
+ main.dom.boss8.style.height = obj.totalHeight + 3 + "px";
- const clientWidth = main.dom.body.clientWidth,
- clientHeight = main.dom.body.clientHeight;
- const canvasWidth = core.__PIXELS__;
+ main.dom.boss.style.width = obj.totalWidth + 3 + "px";
+ main.dom.boss.style.height = obj.totalHeight + 3 + "px";
- const isVertical = clientHeight > clientWidth;
- core.domStyle.isVertical = isVertical;
+ const innerSize = obj.canvasWidth * core.domStyle.scale + "px";
+ for (let i = 0; i < core.dom.gameCanvas.length; ++i)
+ core.dom.gameCanvas[i].style.width = core.dom.gameCanvas[
+ i
+ ].style.height = innerSize;
+ core.dom.gif.style.width = core.dom.gif.style.height = innerSize;
+ core.dom.gif2.style.width = core.dom.gif2.style.height = innerSize;
- const totalWidth = isVertical
- ? GAMEVIEW_WIDTH_VERTICAL / 3
- : GAMEVIEW_WIDTH / 3,
- totalHeight = isVertical
- ? GAMEVIEW_HEIGHT_VERTICAL / 3
- : GAMEVIEW_HEIGHT / 3;
+ core.dom.gameDraw.style.width = core.dom.gameDraw.style.height =
+ innerSize;
+ core.dom.gameDraw.style.top =
+ obj.gameDrawBox.top * core.domStyle.scale + "px";
+ core.dom.gameDraw.style.left =
+ obj.gameDrawBox.left * core.domStyle.scale + "px";
+ // resize bigmap
+ core.bigmap.canvas.forEach(function (cn) {
+ const ratio = core.canvas[cn].canvas.hasAttribute("isHD") ?
+ core.domStyle.ratio :
+ 1;
+ core.canvas[cn].canvas.style.width =
+ (innerSize / ratio) * core.domStyle.scale + "px";
+ core.canvas[cn].canvas.style.height =
+ (innerSize / ratio) * core.domStyle.scale + "px";
+ });
+ // resize dynamic canvas
+ for (const name in core.dymCanvas) {
+ const ctx = core.dymCanvas[name],
+ canvas = ctx.canvas;
+ const ratio = canvas.hasAttribute("isHD") ? core.domStyle.ratio : 1;
+ canvas.style.width = (innerSize / ratio) * core.domStyle.scale + "px";
+ canvas.style.height = (innerSize / ratio) * core.domStyle.scale + "px";
+ canvas.style.left =
+ parseFloat(canvas.getAttribute("_left")) * core.domStyle.scale + "px";
+ canvas.style.top =
+ parseFloat(canvas.getAttribute("_top")) * core.domStyle.scale + "px";
+ }
+ // resize next
+ main.dom.next.style.width = main.dom.next.style.height =
+ 5 * core.domStyle.scale + "px";
+ main.dom.next.style.borderBottomWidth =
+ main.dom.next.style.borderRightWidth = 4 * core.domStyle.scale + "px";
+ };
+ const bgctx = main.dom.outerBackground.getContext("2d");
+ const uictx = main.dom.outerUI.getContext("2d");
+ let now = 0;
+ core.registerAnimationFrame("lightFloor", true, function (timestamp) {
+ if (timestamp - now > 1000 / 60) {
+ now = timestamp;
+ globalAlphafloor += globalAlphafloorStatus;
+ if (globalAlphafloor === 100) globalAlphafloorStatus = -2;
+ if (globalAlphafloor === 0) globalAlphafloorStatus = 2;
- const maxRatio = Math.min(
- clientWidth / totalWidth,
- clientHeight / totalHeight
- );
+ if (core.domStyle.isVertical) {
+ core.clearMap(
+ uictx,
+ MAP_BLOCK_LEFT_VERTICAL,
+ MAP_BLOCK_TOP_VERTICAL,
+ 340,
+ 360
+ );
+ if (core.status.event.id === "viewMaps") {
+ core.ui.statusBar._update_map(core.status.event.data.floorId);
+ } else {
+ core.ui.statusBar._update_map();
+ }
- core.domStyle.availableScale = [];
- [1, 1.25, 1.5, 1.75, 2].forEach(function (v) {
- if (maxRatio >= v) {
- core.domStyle.availableScale.push(v);
- }
- });
+ uictx.globalAlpha = globalAlphafloor / 100;
+ core.drawImage(
+ uictx,
+ "green.webp",
+ MAP_BLOCK_LEFT_VERTICAL + 135,
+ MAP_BLOCK_TOP_VERTICAL + 170
+ );
+ uictx.globalAlpha = 1;
+ } else {
+ core.clearMap(uictx, MAP_BLOCK_LEFT, MAP_BLOCK_TOP, 340, 360);
+ if (core.status.event.id === "viewMaps") {
+ core.ui.statusBar._update_map(core.status.event.data.floorId);
+ } else {
+ core.ui.statusBar._update_map();
+ }
+ uictx.globalAlpha = globalAlphafloor / 100;
+ core.drawImage(
+ uictx,
+ "green.webp",
+ MAP_BLOCK_LEFT + 150,
+ MAP_BLOCK_TOP + 180
+ );
+ uictx.globalAlpha = 1;
+ }
+ }
+ });
- if (core.domStyle.availableScale.indexOf(core.domStyle.scale) < 0) {
- core.domStyle.scale = Math.min(1, maxRatio);
- } else if (
- core.getLocalStorage("scale") == null &&
- core.domStyle.availableScale.length >= 2
- ) {
- core.domStyle.scale =
- core.domStyle.availableScale[core.domStyle.availableScale.length - 2];
- core.setLocalStorage("scale", core.domStyle.scale);
- }
+ core.control.resize = function () {
+ //自适应,可实现横竖屏切换
+ if (main.mode == "editor") return;
- const totalWidthScaled = totalWidth * core.domStyle.scale,
- totalHeightScaled = totalHeight * core.domStyle.scale;
+ const clientWidth = main.dom.body.clientWidth,
+ clientHeight = main.dom.body.clientHeight;
+ const canvasWidth = core.__PIXELS__;
- const gameDrawBox = isVertical
- ? {
- left: BORDER_WIDTH / 3,
- top: BAR_HEIGHT_VERTICAL / 3 + BORDER_HEIGHT / 3,
- }
- : { left: BAR_WIDTH / 3 + BORDER_WIDTH / 3, top: BORDER_HEIGHT / 3 };
+ const isVertical = clientHeight > clientWidth;
+ core.domStyle.isVertical = isVertical;
- const obj = {
- clientWidth: clientWidth,
- clientHeight: clientHeight,
- canvasWidth: canvasWidth,
- totalWidth: totalWidthScaled,
- totalHeight: totalHeightScaled,
- gameDrawBox: gameDrawBox,
- globalAttribute:
- core.status.globalAttribute || core.initStatus.globalAttribute,
- };
+ const totalWidth = isVertical ?
+ GAMEVIEW_WIDTH_VERTICAL / 3 :
+ GAMEVIEW_WIDTH / 3,
+ totalHeight = isVertical ?
+ GAMEVIEW_HEIGHT_VERTICAL / 3 :
+ GAMEVIEW_HEIGHT / 3;
- _resize_gameGroup(obj);
- _resize_canvas(obj);
+ const maxRatio = Math.min(
+ clientWidth / totalWidth,
+ clientHeight / totalHeight
+ );
- if (core.status.automaticRoute == null) core.status.automaticRoute = {};
- core.updateStatusBar();
- if (main.dom.CGUI && main.dom.CGUI.style.display === "block")
- core.ui.CG.update();
- if (main.dom.music && main.dom.music.style.display === "block")
- core.ui.music.update();
- if (main.dom.cgText && main.dom.cgText.style.display === "block")
- core.ui.cgText.update();
- if (main.dom.logcanvas && main.dom.logcanvas.style.display === "block")
- core.ui.cgText.update();
- };
+ core.domStyle.availableScale = [];
+ [1, 1.25, 1.5, 1.75, 2].forEach(function (v) {
+ if (maxRatio >= v) {
+ core.domStyle.availableScale.push(v);
+ }
+ });
- class StatusBar {
- constructor() {
- //道具栏列表
- this.itemMx = [
- //空位用‘none’填充,当前ui至多4列6行
- ["book", "wand", "none", "fly"],
- ["cross", "superPotion", "pickaxe"],
- ["bomb", "centerFly", "upFly"],
- ["none", "none", "none"],
- ["downFly", "knife", "snow"],
- ["bigKey", "earthquake", "coin"],
- ];
- }
- //初始化内容(工具栏/录像操作执行函数)
- init() {
- this.toolbarAction = [
- [
- main.core.openKeyBoard,
- main.core.openQuickShop,
- core.openToolbox,
- core.doSL,
- ],
- [main.core.openSettings, main.core.save, main.core.load, core.doSL],
- ];
- this.replayAction = [
- [core.triggerReplay, core.stopReplay, core.rewindReplay],
- [core.speedDownReplay, core.speedUpReplay, core.saveReplay],
- ];
- }
- //更新
- update() {
- this._update_background(); //更新背景
- this._update_props(); //更新属性
- //this._update_items(); //更新道具
- //this._update_equips(); //更新装备
- //this._update_keys(); //更新钥匙
- //this._update_infoWindow(); //更新道具说明
- this._update_toolBox(); //更新工具栏
- this._redrawMap();
- }
- _redrawMap() {
- if (core.domStyle.isVertical) {
- core.clearMap(
- uictx,
- MAP_BLOCK_LEFT_VERTICAL,
- MAP_BLOCK_TOP_VERTICAL,
- 340,
- 360
- );
- this._update_map();
- uictx.globalAlpha = globalAlphafloor / 100;
- core.drawImage(
- uictx,
- "green.webp",
- MAP_BLOCK_LEFT_VERTICAL + 125,
- MAP_BLOCK_TOP_VERTICAL + 170
- );
- uictx.globalAlpha = 1;
- } else {
- core.clearMap(uictx, MAP_BLOCK_LEFT, MAP_BLOCK_TOP, 340, 360);
- this._update_map();
- uictx.globalAlpha = globalAlphafloor / 100;
- core.drawImage(
- uictx,
- "green.webp",
- MAP_BLOCK_LEFT + 150,
- MAP_BLOCK_TOP + 170
- );
- uictx.globalAlpha = 1;
- }
- }
- //更新背景
- _update_background() {
- if (core.domStyle.isVertical) {
- bgctx.canvas.width = GAMEVIEW_WIDTH_VERTICAL;
- bgctx.canvas.height = GAMEVIEW_HEIGHT_VERTICAL;
- uictx.canvas.width = GAMEVIEW_WIDTH_VERTICAL;
- uictx.canvas.height = GAMEVIEW_HEIGHT_VERTICAL;
+ if (core.domStyle.availableScale.indexOf(core.domStyle.scale) < 0) {
+ core.domStyle.scale = Math.min(1, maxRatio);
+ } else if (
+ core.getLocalStorage("scale") == null &&
+ core.domStyle.availableScale.length >= 2
+ ) {
+ core.domStyle.scale =
+ core.domStyle.availableScale[core.domStyle.availableScale.length - 2];
+ core.setLocalStorage("scale", core.domStyle.scale);
+ }
- const bg = core.material.images.images["status.webp"]; //竖屏背景(上)
- bgctx.drawImage(
- bg,
- 0,
- 0,
- GAMEVIEW_WIDTH_VERTICAL,
- BAR_HEIGHT_VERTICAL
- );
- const bg2 = core.material.images.images["status.webp"]; //竖屏背景(下)
- bgctx.drawImage(
- bg2,
- 0,
- BAR_HEIGHT_VERTICAL + GAMEVIEW_WIDTH_VERTICAL,
- GAMEVIEW_WIDTH_VERTICAL,
- BAR_HEIGHT_VERTICAL
- );
- bgctx.globalAlpha = globalAlpha;
- bgctx.globalAlpha = 1;
- core.setTextAlign("outerUI", "center");
- } else {
- bgctx.canvas.width = GAMEVIEW_WIDTH;
- bgctx.canvas.height = GAMEVIEW_HEIGHT;
- uictx.canvas.width = GAMEVIEW_WIDTH;
- uictx.canvas.height = GAMEVIEW_HEIGHT;
+ const totalWidthScaled = totalWidth * core.domStyle.scale,
+ totalHeightScaled = totalHeight * core.domStyle.scale;
- const bg = core.material.images.images["status.webp"]; //横屏背景(左)
- bgctx.drawImage(bg, 0, 0, BAR_WIDTH, GAMEVIEW_HEIGHT);
- const bg2 = core.material.images.images["status.webp"]; //横屏背景(右)
- bgctx.drawImage(
- bg2,
- BAR_WIDTH + GAMEVIEW_HEIGHT,
- 0,
- BAR_WIDTH,
- GAMEVIEW_HEIGHT
- );
- bgctx.globalAlpha = globalAlpha;
+ const gameDrawBox = isVertical ? {
+ left: BORDER_WIDTH / 3,
+ top: BAR_HEIGHT_VERTICAL / 3 + BORDER_HEIGHT / 3,
+ } : { left: BAR_WIDTH / 3 + BORDER_WIDTH / 3, top: BORDER_HEIGHT / 3 };
- bgctx.globalAlpha = 1;
- core.setTextAlign("outerUI", "center");
- }
- }
- // 更新属性
- _update_props(updatedFloorTitle) {
- if (!updatedFloorTitle && core.status.floorId) {
- updatedFloorTitle = core.status.maps[core.status.floorId].title;
- }
- const statusList = ["hp", "atk", "def", "money"]; //属性列表,图标在函数复写core.statusBar.icons中声明,数字为project\materials\icons.png中的图标序号(可使用便捷ps追加,第一个序号为0)
- const drawStatusList = (baseX, baseY) => {
- let curh = baseY;
- core.setTextAlign("outerUI", "right");
- statusList.forEach((item) => {
- // 绘制图标
- core.drawIcon(
- "outerUI",
- item,
- baseX - 95 * 3,
- curh - 18 * 3,
- 22 * 3,
- 22 * 3
- );
+ const obj = {
+ clientWidth: clientWidth,
+ clientHeight: clientHeight,
+ canvasWidth: canvasWidth,
+ totalWidth: totalWidthScaled,
+ totalHeight: totalHeightScaled,
+ gameDrawBox: gameDrawBox,
+ globalAttribute: core.status.globalAttribute || core.initStatus.globalAttribute,
+ };
- // 四舍五入
- core.status.hero[item] = Math.round(core.status.hero[item]);
- // 大数据格式化
- core.fillBoldText1(
- "outerUI",
- core.getRealStatus(item),
- baseX,
- curh,
- TEXT_COLOR,
- "#000000",
- 6
- );
- curh += 24 * 3;
- if (curh > 130 * 3 && core.domStyle.isVertical) {
- curh = 24 * 3;
- baseX += 105 * 3;
- }
- });
- core.setTextAlign("outerUI", "center");
- };
- if (core.domStyle.isVertical) {
- core.clearMap("outerUI", 10 * 3, 0, 210 * 3, 120 * 3);
- core.setFont("outerUI", "bold 42px Verdana");
- if (updatedFloorTitle) {
- core.fillBoldText1(
- "outerUI",
- updatedFloorTitle,
- 60 * 3,
- 22 * 3,
- TEXT_COLOR,
- "#000000",
- 6
- );
- }
- //drawStatusList(96 * 3, 46 * 3);
- //core.drawImage("outerUI", "lane1.png", 0, 0)
- core.drawImage("outerUI", "cao.webp", 0, 0);
- } else {
- core.clearMap("outerUI", 10 * 3, 40 * 3, 105 * 3, 250 * 3);
- core.setFont("outerUI", "bold 48px Verdana");
- if (updatedFloorTitle) {
- core.fillBoldText1(
- "outerUI",
- updatedFloorTitle,
- 62 * 3,
- 41 * 3,
- TEXT_COLOR,
- "#000000",
- 6
- );
- }
- //drawStatusList(110 * 3, 93 * 3);
- //core.drawImage("outerUI", "lane1.png", 0, 30)
- core.drawImage(
- "outerUI",
- "cao.webp",
- 0,
- 0,
- 400,
- 350,
- 0,
- 30,
- 360,
- 315
- );
- }
- }
- _update_items() {
- //更新道具栏
- const drawItemMx = (drawFn) => {
- for (let i = 0; i < this.itemMx.length; i++) {
- for (let j = 0; j < this.itemMx[i].length; j++) {
- var item = this.itemMx[i][j];
- drawFn(i, j, item);
- }
- }
- };
- const drawItem = (item, posx, posy) => {
- const icon = core.material.icons.items[item],
- image = core.material.images.items;
- core.drawImage(
- "outerUI",
- image,
- 0,
- 32 * icon,
- 32,
- 32,
- posx,
- posy,
- 30 * 3,
- 30 * 3
- );
- const cnt = core.itemCount(item);
- if (
- (core.items.items[item].cls === "tools" && cnt > 1) ||
- FORCE_COUNTABLE_ITEMS.includes(item)
- ) {
- core.fillText(
- "outerUI",
- cnt,
- posx + 25 * 3,
- posy + 28 * 3,
- "#FFFFFF",
- "bold 36px Verdana"
- );
- }
- };
- if (core.domStyle.isVertical) {
- core.clearMap(
- "outerUI",
- ITEM_BOX_LEFT_VERTICAL,
- ITEM_BOX_TOP_VERTICAL,
- 185 * 3,
- 125 * 3
- );
+ _resize_gameGroup(obj);
+ _resize_canvas(obj);
- drawItemMx((i, j, item) => {
- if (core.hasItem(item)) {
- const posx = ITEM_BOX_LEFT_VERTICAL + i * 30 * 3,
- posy = ITEM_BOX_TOP_VERTICAL + j * 31 * 3;
- drawItem(item, posx, posy);
- }
- });
- } else {
- core.clearMap(
- "outerUI",
- ITEM_BOX_LEFT,
- ITEM_BOX_TOP,
- 125 * 3,
- 185 * 3
- );
+ if (core.status.automaticRoute == null) core.status.automaticRoute = {};
+ core.updateStatusBar();
+ if (main.dom.CGUI && main.dom.CGUI.style.display === "block")
+ core.ui.CG.update();
+ if (main.dom.music && main.dom.music.style.display === "block")
+ core.ui.music.update();
+ if (main.dom.cgText && main.dom.cgText.style.display === "block")
+ core.ui.cgText.update();
+ if (main.dom.logcanvas && main.dom.logcanvas.style.display === "block")
+ core.ui.cgText.update();
+ if (main.dom.boss1 && main.dom.boss1.style.display === "block")
+ core.ui.boss.update();
+ };
- drawItemMx((i, j, item) => {
- if (core.hasItem(item)) {
- const posx = ITEM_BOX_LEFT + j * 30 * 3,
- posy = ITEM_BOX_TOP + i * 31 * 3;
- drawItem(item, posx, posy);
- }
- });
- }
- }
+ class StatusBar {
+ constructor() {
+ //道具栏列表
+ this.itemMx = [
+ //空位用‘none’填充,当前ui至多4列6行
+ ["book", "wand", "none", "fly"],
+ ["cross", "superPotion", "pickaxe"],
+ ["bomb", "centerFly", "upFly"],
+ ["none", "none", "none"],
+ ["downFly", "knife", "snow"],
+ ["bigKey", "earthquake", "coin"],
+ ];
+ }
+ //初始化内容(工具栏/录像操作执行函数)
+ init() {
+ this.toolbarAction = [
+ [
+ main.core.openKeyBoard,
+ main.core.openQuickShop,
+ core.openToolbox,
+ core.doSL,
+ ],
+ [main.core.openSettings, main.core.save, main.core.load, core.doSL],
+ ];
+ this.replayAction = [
+ [core.triggerReplay, core.stopReplay, core.rewindReplay],
+ [
+ core.speedDownReplay,
+ core.speedUpReplay,
+ function () {
+ core.control._replay_SL();
+ },
+ ],
+ ];
+ }
+ //更新
+ update() {
+ this._update_background(); //更新背景
+ this._update_props(); //更新属性
+ this._update_items(); //更新道具
+ //this._update_equips(); //更新装备
+ this._update_keys(); //更新钥匙
+ //this._update_infoWindow(); //更新道具说明
+ this._update_toolBox(); //更新工具栏
+ this._redrawMap();
+ }
+ _redrawMap() {
+ if (core.domStyle.isVertical) {
+ core.clearMap(
+ uictx,
+ MAP_BLOCK_LEFT_VERTICAL,
+ MAP_BLOCK_TOP_VERTICAL,
+ 340,
+ 360
+ );
+ this._update_map();
+ uictx.globalAlpha = globalAlphafloor / 100;
+ core.drawImage(
+ uictx,
+ "green.webp",
+ MAP_BLOCK_LEFT_VERTICAL + 125,
+ MAP_BLOCK_TOP_VERTICAL + 170
+ );
+ uictx.globalAlpha = 1;
+ } else {
+ core.clearMap(uictx, MAP_BLOCK_LEFT, MAP_BLOCK_TOP, 340, 360);
+ this._update_map();
+ uictx.globalAlpha = globalAlphafloor / 100;
+ core.drawImage(
+ uictx,
+ "green.webp",
+ MAP_BLOCK_LEFT + 150,
+ MAP_BLOCK_TOP + 170
+ );
+ uictx.globalAlpha = 1;
+ }
+ }
+ //更新背景
+ _update_background() {
+ if (core.domStyle.isVertical) {
+ bgctx.canvas.width = GAMEVIEW_WIDTH_VERTICAL;
+ bgctx.canvas.height = GAMEVIEW_HEIGHT_VERTICAL;
+ uictx.canvas.width = GAMEVIEW_WIDTH_VERTICAL;
+ uictx.canvas.height = GAMEVIEW_HEIGHT_VERTICAL;
- _update_map(floorId = core.status.floorId) {
- const x = core.domStyle.isVertical
- ? MAP_BLOCK_LEFT_VERTICAL
- : MAP_BLOCK_LEFT;
- const y = core.domStyle.isVertical
- ? MAP_BLOCK_TOP_VERTICAL
- : MAP_BLOCK_TOP;
+ const bg = core.material.images.images["status.webp"]; //竖屏背景(上)
+ bgctx.drawImage(
+ bg,
+ 0,
+ 0,
+ GAMEVIEW_WIDTH_VERTICAL,
+ BAR_HEIGHT_VERTICAL
+ );
+ const bg2 = core.material.images.images["status.webp"]; //竖屏背景(下)
+ bgctx.drawImage(
+ bg2,
+ 0,
+ BAR_HEIGHT_VERTICAL + GAMEVIEW_WIDTH_VERTICAL,
+ GAMEVIEW_WIDTH_VERTICAL,
+ BAR_HEIGHT_VERTICAL
+ );
+ bgctx.globalAlpha = globalAlpha;
+ bgctx.globalAlpha = 1;
+ core.setTextAlign("outerUI", "center");
+ } else {
+ bgctx.canvas.width = GAMEVIEW_WIDTH;
+ bgctx.canvas.height = GAMEVIEW_HEIGHT;
+ uictx.canvas.width = GAMEVIEW_WIDTH;
+ uictx.canvas.height = GAMEVIEW_HEIGHT;
- if (!floorId) return;
- const info = core.plugin.getMapDrawInfo(floorId, Infinity, true);
- core.setTextAlign("outerUI", "center");
+ const bg = core.material.images.images["status.webp"]; //横屏背景(左)
+ bgctx.drawImage(bg, 0, 0, BAR_WIDTH, GAMEVIEW_HEIGHT);
+ const bg2 = core.material.images.images["status.webp"]; //横屏背景(右)
+ bgctx.drawImage(
+ bg2,
+ BAR_WIDTH + GAMEVIEW_HEIGHT,
+ 0,
+ BAR_WIDTH,
+ GAMEVIEW_HEIGHT
+ );
+ bgctx.globalAlpha = globalAlpha;
- core.plugin.drawSmallMap(uictx, info, floorId, x, y, 300, 300);
- }
+ bgctx.globalAlpha = 1;
+ core.setTextAlign("outerUI", "center");
+ }
+ }
+ // 更新属性
+ _update_props(updatedFloorTitle) {
+ if (!updatedFloorTitle && core.status.floorId) {
+ updatedFloorTitle = core.status.maps[core.status.floorId].title;
+ }
+ const statusList = [
+ "hp",
+ "atk",
+ "def",
+ "spell",
+ "mdef",
+ "matk",
+ "mhp",
+ "speed",
+ "money",
+ ]; //属性列表,图标在函数复写core.statusBar.icons中声明,数字为project\materials\icons.png中的图标序号(可使用便捷ps追加,第一个序号为0)
+ const drawStatusList = (baseX, baseY) => {
+ let curh = baseY;
+ core.setTextAlign("outerUI", "right");
+ statusList.forEach((item) => {
+ // 绘制图标
+ /*core.drawIcon(
+ "outerUI",
+ item,
+ baseX - 95 * 3,
+ curh - 18 * 3,
+ 22 * 3,
+ 22 * 3
+ );*/
+ core.strokeRect("outerUI", baseX - 96 * 3,
+ curh - 16 * 3, 100 * 3, 22 * 3, "#FFFFFF", 3)
+ core.setFont("outerUI", "bold 24px Verdana");
+ core.fillBoldText1(
+ "outerUI",
+ core.getStatusLabel(item),
+ baseX - 65 * 3,
+ curh - 4 * 3,
+ TEXT_COLOR,
+ "#000000",
+ 6
+ );
+ core.setFont("outerUI", "bold 36px Verdana");
+ // 四舍五入
+ core.status.hero[item] = Math.round(core.status.hero[item]);
+ let text = core.getRealStatus(item);
+ // 大数据格式化
+ switch (item) {
+ case "mdef":
+ text += "%";
+ break;
+ case "matk":
+ case "mhp":
+ text = `${Math.floor(core.getRealStatus("spell")* core.getRealStatus(item)/100)}(${text})%`;
+ break;
+ }
+ core.fillBoldText1(
+ "outerUI",
+ text,
+ baseX,
+ curh,
+ TEXT_COLOR,
+ "#000000",
+ 6
+ );
- _update_equips() {
- return;
- core.setFont("outerUI", "bold 48px Verdana");
- const drawEquip = (baseX, baseY, id, color, back) => {
- if (!id)
- core.fillText(
- "outerUI",
- back,
- baseX + 20 * 3,
- baseY + 22 * 3,
- color
- );
- else {
- var icon = core.material.icons.items[id];
- core.drawImage(
- "outerUI",
- core.material.images.items,
- 0,
- 32 * icon,
- 32,
- 32,
- baseX + 5 * 3,
- baseY,
- 32 * 3,
- 32 * 3
- );
- }
- };
- if (core.domStyle.isVertical) {
- core.clearMap(
- "outerUI",
- EQUIP_BLOCK_LEFT_VERTICAL,
- EQUIP_BLOCK_TOP_VERTICAL,
- 90 * 3,
- 130 * 3
- );
- drawEquip(
- EQUIP_BLOCK_LEFT_VERTICAL,
- EQUIP_BLOCK_TOP_VERTICAL,
- core.getEquip(0),
- "#D1CEFF",
- "无"
- );
- drawEquip(
- EQUIP_BLOCK_LEFT_VERTICAL + 45 * 3,
- EQUIP_BLOCK_TOP_VERTICAL,
- core.getEquip(1),
- "#D1CEFF",
- "无"
- );
- drawEquip(
- EQUIP_BLOCK_LEFT_VERTICAL,
- EQUIP_BLOCK_TOP_VERTICAL + 45 * 3,
- core.getEquip(2),
- "#D1CEFF",
- "无"
- );
- drawEquip(
- EQUIP_BLOCK_LEFT_VERTICAL + 45 * 3,
- EQUIP_BLOCK_TOP_VERTICAL + 45 * 3,
- core.getEquip(3),
- "#D1CEFF",
- "无"
- );
- drawEquip(
- EQUIP_BLOCK_LEFT_VERTICAL,
- EQUIP_BLOCK_TOP_VERTICAL + 90 * 3,
- core.getEquip(4),
- "#D1CEFF",
- "无"
- );
- drawEquip(
- EQUIP_BLOCK_LEFT_VERTICAL + 45 * 3,
- EQUIP_BLOCK_TOP_VERTICAL + 90 * 3,
- core.getEquip(5),
- "#D1CEFF",
- "无"
- );
- } else {
- core.clearMap(
- "outerUI",
- EQUIP_BLOCK_LEFT,
- EQUIP_BLOCK_TOP,
- 130 * 3,
- 95 * 3
- );
- drawEquip(
- EQUIP_BLOCK_LEFT,
- EQUIP_BLOCK_TOP,
- core.getEquip(0),
- "#D1CEFF",
- "无"
- );
- drawEquip(
- EQUIP_BLOCK_LEFT + 42 * 3,
- EQUIP_BLOCK_TOP,
- core.getEquip(1),
- "#D1CEFF",
- "无"
- );
- drawEquip(
- EQUIP_BLOCK_LEFT + 85 * 3,
- EQUIP_BLOCK_TOP,
- core.getEquip(2),
- "#D1CEFF",
- "无"
- );
- drawEquip(
- EQUIP_BLOCK_LEFT,
- EQUIP_BLOCK_TOP + 45 * 3,
- core.getEquip(3),
- "#D1CEFF",
- "无"
- );
- drawEquip(
- EQUIP_BLOCK_LEFT + 42 * 3,
- EQUIP_BLOCK_TOP + 45 * 3,
- core.getEquip(4),
- "#D1CEFF",
- "无"
- );
- drawEquip(
- EQUIP_BLOCK_LEFT + 85 * 3,
- EQUIP_BLOCK_TOP + 45 * 3,
- core.getEquip(5),
- "#D1CEFF",
- "无"
- );
- }
- }
- _update_keys() {
- const drawKeyList = (baseX, baseY) => {
- const todraw = [],
- keyList = ["yellowKey", "blueKey", "redKey", "greenKey"];
- let total = 0;
- keyList.forEach(function (key, i) {
- todraw[i] = core.itemCount(key);
- total += todraw[i];
- });
+ curh += 24 * 3;
+ if (curh > 130 * 3 && core.domStyle.isVertical) {
+ curh = 24 * 3;
+ baseX += 105 * 3;
+ }
+ });
+ core.setTextAlign("outerUI", "center");
+ };
+ if (core.domStyle.isVertical) {
+ core.clearMap("outerUI", 10 * 3, 0, 210 * 3, 120 * 3);
+ core.setFont("outerUI", "bold 42px Verdana");
+ if (updatedFloorTitle) {
+ core.fillBoldText1(
+ "outerUI",
+ updatedFloorTitle,
+ 60 * 3,
+ 22 * 3,
+ TEXT_COLOR,
+ "#000000",
+ 6
+ );
+ }
+ drawStatusList(96 * 3, 46 * 3);
+ //core.drawImage("outerUI", "lane1.png", 0, 0)
+ //core.drawImage("outerUI", "cao.webp", 0, 0);
+ } else {
+ core.clearMap("outerUI", 10 * 3, 40 * 3, 105 * 3, 250 * 3);
+ core.setFont("outerUI", "bold 48px Verdana");
+ if (updatedFloorTitle) {
+ core.fillBoldText1(
+ "outerUI",
+ updatedFloorTitle,
+ 62 * 3,
+ 41 * 3,
+ TEXT_COLOR,
+ "#000000",
+ 6
+ );
+ }
+ drawStatusList(110 * 3, 93 * 3);
+ //core.drawImage("outerUI", "lane1.png", 0, 30);
+ core.drawImage(
+ "outerUI",
+ "cao.webp",
+ 0,
+ 0,
+ 400,
+ 350,
+ 0,
+ 30,
+ 360,
+ 315
+ );
+ }
+ }
+ _update_items() {
+ //更新道具栏
+ const drawItemMx = (drawFn) => {
+ for (let i = 0; i < this.itemMx.length; i++) {
+ for (let j = 0; j < this.itemMx[i].length; j++) {
+ var item = this.itemMx[i][j];
+ drawFn(i, j, item);
+ }
+ }
+ };
+ const drawItem = (item, posx, posy) => {
+ const icon = core.material.icons.items[item],
+ image = core.material.images.items;
+ core.drawImage(
+ "outerUI",
+ image,
+ 0,
+ 32 * icon,
+ 32,
+ 32,
+ posx,
+ posy,
+ 30 * 3,
+ 30 * 3
+ );
+ const cnt = core.itemCount(item);
+ if (
+ (core.items.items[item].cls === "tools" && cnt > 1) ||
+ FORCE_COUNTABLE_ITEMS.includes(item)
+ ) {
+ core.fillText(
+ "outerUI",
+ cnt,
+ posx + 25 * 3,
+ posy + 28 * 3,
+ "#FFFFFF",
+ "bold 36px Verdana"
+ );
+ }
+ };
+ if (core.domStyle.isVertical) {
+ core.clearMap(
+ "outerUI",
+ ITEM_BOX_LEFT_VERTICAL,
+ ITEM_BOX_TOP_VERTICAL,
+ 185 * 3,
+ 125 * 3
+ );
- let dn = 3;
- for (let i = 0; i <= dn; i++) {
- let delta = i * 32 * 3;
+ drawItemMx((i, j, item) => {
+ if (core.hasItem(item)) {
+ const posx = ITEM_BOX_LEFT_VERTICAL + i * 30 * 3,
+ posy = ITEM_BOX_TOP_VERTICAL + j * 31 * 3;
+ drawItem(item, posx, posy);
+ }
+ });
+ } else {
+ core.clearMap(
+ "outerUI",
+ ITEM_BOX_LEFT,
+ ITEM_BOX_TOP,
+ 125 * 3,
+ 185 * 3
+ );
- if (core.domStyle.isVertical) {
- this.drawKey(keyList[i], baseX, baseY + delta);
- } else {
- this.drawKey(keyList[i], baseX + delta, baseY);
- }
+ drawItemMx((i, j, item) => {
+ if (core.hasItem(item)) {
+ const posx = ITEM_BOX_LEFT + j * 30 * 3,
+ posy = ITEM_BOX_TOP + i * 31 * 3;
+ drawItem(item, posx, posy);
+ }
+ });
+ }
+ }
- core.setFont("outerUI", "bold 48px Verdana");
- core.setTextAlign("outerUI", "left");
- if (core.domStyle.isVertical) {
- core.fillText(
- "outerUI",
- todraw[i],
- baseX + 20 * 3,
- baseY + 14 * 3 + delta,
- TEXT_COLOR
- );
- } else {
- core.fillText(
- "outerUI",
- todraw[i],
- baseX + delta,
- baseY + 32 * 3,
- TEXT_COLOR
- );
- }
- }
- };
- if (core.domStyle.isVertical) {
- core.clearMap(
- "outerUI",
- KEY_BLOCK_LEFT_VERTICAL,
- KEY_BLOCK_TOP_VERTICAL,
- 45 * 3,
- 130 * 3
- );
- drawKeyList(
- KEY_BLOCK_LEFT_VERTICAL + 3 * 3,
- KEY_BLOCK_TOP_VERTICAL + 5 * 3
- );
- } else {
- core.clearMap(
- "outerUI",
- KEY_BLOCK_LEFT,
- KEY_BLOCK_TOP,
- 130 * 3,
- 45 * 3
- );
- drawKeyList(KEY_BLOCK_LEFT + 10 * 3, KEY_BLOCK_TOP);
- }
- }
- drawKey(key, x, y) {
- let sx = 0,
- sy = 0;
+ _update_map(floorId = core.status.floorId) {
+ const x = core.domStyle.isVertical ?
+ MAP_BLOCK_LEFT_VERTICAL :
+ MAP_BLOCK_LEFT;
+ const y = core.domStyle.isVertical ?
+ MAP_BLOCK_TOP_VERTICAL :
+ MAP_BLOCK_TOP;
- if (key == "yellowKey") sx += 13;
- else if (key == "blueKey") sx += 26;
- else if (key == "greenKey") sx += 39;
+ if (!floorId) return;
+ const info = core.plugin.getMapDrawInfo(floorId, Infinity, true);
+ core.setTextAlign("outerUI", "center");
- core.drawImage(
- "outerUI",
- "maba.webp",
- sx,
- sy,
- 13,
- 26,
- x,
- y,
- 13 * 3,
- 26 * 3
- );
- }
- _update_infoWindow() {
- const itemId = this.selectedItem;
- let text = "";
- if (this.selectedItem) {
- text = core.replaceText(core.material.items[itemId]?.text);
- if (text[0] == "," || text[0] == ",") text = text.substring(1);
- }
- if (core.domStyle.isVertical) {
- core.clearMap(
- "outerUI",
- INFO_BLOCK_LEFT_VERTICAL,
- INFO_BLOCK_TOP_VERTICAL,
- 300 * 3,
- 120 * 3
- );
+ core.plugin.drawSmallMap(uictx, info, floorId, x, y, 300, 300);
+ }
- if (this.selectedItem) {
- const icon = core.material.icons.items[itemId];
- core.setTextAlign("outerUI", "left");
- core.fillText(
- "outerUI",
- core.material.items[itemId].name,
- INFO_BLOCK_LEFT_VERTICAL + 50 * 3,
- INFO_BLOCK_TOP_VERTICAL + 27 * 3,
- "#D1CEFF"
- );
- core.drawImage(
- "outerUI",
- core.material.images.items,
- 0,
- 32 * icon,
- 32,
- 32,
- INFO_BLOCK_LEFT_VERTICAL + 10 * 3,
- INFO_BLOCK_TOP_VERTICAL + 8 * 3,
- 32 * 3,
- 32 * 3
- );
- core.ui.drawTextContent("outerUI", text, {
- left: INFO_BLOCK_LEFT_VERTICAL + 10 * 3,
- top: INFO_BLOCK_TOP_VERTICAL + 40 * 3,
- maxWidth: 275 * 3,
- color: "#D1CEFF",
- fontSize: 36,
- });
- }
- } else {
- core.clearMap(
- "outerUI",
- INFO_BLOCK_LEFT,
- INFO_BLOCK_TOP,
- 115 * 3,
- 230 * 3
- );
+ _update_equips() {
+ return;
+ core.setFont("outerUI", "bold 48px Verdana");
+ const drawEquip = (baseX, baseY, id, color, back) => {
+ if (!id)
+ core.fillText(
+ "outerUI",
+ back,
+ baseX + 20 * 3,
+ baseY + 22 * 3,
+ color
+ );
+ else {
+ var icon = core.material.icons.items[id];
+ core.drawImage(
+ "outerUI",
+ core.material.images.items,
+ 0,
+ 32 * icon,
+ 32,
+ 32,
+ baseX + 5 * 3,
+ baseY,
+ 32 * 3,
+ 32 * 3
+ );
+ }
+ };
+ if (core.domStyle.isVertical) {
+ core.clearMap(
+ "outerUI",
+ EQUIP_BLOCK_LEFT_VERTICAL,
+ EQUIP_BLOCK_TOP_VERTICAL,
+ 90 * 3,
+ 130 * 3
+ );
+ drawEquip(
+ EQUIP_BLOCK_LEFT_VERTICAL,
+ EQUIP_BLOCK_TOP_VERTICAL,
+ core.getEquip(0),
+ "#D1CEFF",
+ "无"
+ );
+ drawEquip(
+ EQUIP_BLOCK_LEFT_VERTICAL + 45 * 3,
+ EQUIP_BLOCK_TOP_VERTICAL,
+ core.getEquip(1),
+ "#D1CEFF",
+ "无"
+ );
+ drawEquip(
+ EQUIP_BLOCK_LEFT_VERTICAL,
+ EQUIP_BLOCK_TOP_VERTICAL + 45 * 3,
+ core.getEquip(2),
+ "#D1CEFF",
+ "无"
+ );
+ drawEquip(
+ EQUIP_BLOCK_LEFT_VERTICAL + 45 * 3,
+ EQUIP_BLOCK_TOP_VERTICAL + 45 * 3,
+ core.getEquip(3),
+ "#D1CEFF",
+ "无"
+ );
+ drawEquip(
+ EQUIP_BLOCK_LEFT_VERTICAL,
+ EQUIP_BLOCK_TOP_VERTICAL + 90 * 3,
+ core.getEquip(4),
+ "#D1CEFF",
+ "无"
+ );
+ drawEquip(
+ EQUIP_BLOCK_LEFT_VERTICAL + 45 * 3,
+ EQUIP_BLOCK_TOP_VERTICAL + 90 * 3,
+ core.getEquip(5),
+ "#D1CEFF",
+ "无"
+ );
+ } else {
+ core.clearMap(
+ "outerUI",
+ EQUIP_BLOCK_LEFT,
+ EQUIP_BLOCK_TOP,
+ 130 * 3,
+ 95 * 3
+ );
+ drawEquip(
+ EQUIP_BLOCK_LEFT,
+ EQUIP_BLOCK_TOP,
+ core.getEquip(0),
+ "#D1CEFF",
+ "无"
+ );
+ drawEquip(
+ EQUIP_BLOCK_LEFT + 42 * 3,
+ EQUIP_BLOCK_TOP,
+ core.getEquip(1),
+ "#D1CEFF",
+ "无"
+ );
+ drawEquip(
+ EQUIP_BLOCK_LEFT + 85 * 3,
+ EQUIP_BLOCK_TOP,
+ core.getEquip(2),
+ "#D1CEFF",
+ "无"
+ );
+ drawEquip(
+ EQUIP_BLOCK_LEFT,
+ EQUIP_BLOCK_TOP + 45 * 3,
+ core.getEquip(3),
+ "#D1CEFF",
+ "无"
+ );
+ drawEquip(
+ EQUIP_BLOCK_LEFT + 42 * 3,
+ EQUIP_BLOCK_TOP + 45 * 3,
+ core.getEquip(4),
+ "#D1CEFF",
+ "无"
+ );
+ drawEquip(
+ EQUIP_BLOCK_LEFT + 85 * 3,
+ EQUIP_BLOCK_TOP + 45 * 3,
+ core.getEquip(5),
+ "#D1CEFF",
+ "无"
+ );
+ }
+ }
+ _update_keys() {
+ const drawKeyList = (baseX, baseY) => {
+ const todraw = [],
+ keyList = ["yellowKey", "blueKey", "redKey", "greenKey"];
+ let total = 0;
+ keyList.forEach(function (key, i) {
+ todraw[i] = core.itemCount(key);
+ total += todraw[i];
+ });
- if (this.selectedItem) {
- const icon = core.material.icons.items[itemId];
- core.setTextAlign("outerUI", "center");
- core.fillText(
- "outerUI",
- core.material.items[itemId].name,
- INFO_BLOCK_LEFT + 60 * 3,
- INFO_BLOCK_TOP + 25 * 3,
- "#D1CEFF"
- );
- core.drawImage(
- "outerUI",
- core.material.images.items,
- 0,
- 32 * icon,
- 32,
- 32,
- INFO_BLOCK_LEFT + 45 * 3,
- INFO_BLOCK_TOP + 30 * 3,
- 32 * 3,
- 32 * 3
- );
- core.ui.drawTextContent("outerUI", text, {
- left: INFO_BLOCK_LEFT + 10 * 3,
- top: INFO_BLOCK_TOP + 60 * 3,
- maxWidth: 105 * 3,
- color: "#D1CEFF",
- fontSize: 36,
- });
- }
- }
- }
- showItemInfo(itemId) {
- //展示道具说明
- this.selectedItem = itemId;
- this._update_infoWindow();
- }
- clearItemInfo() {
- //清除道具说明
- this.selectedItem = null;
- this._update_infoWindow();
- }
- _update_toolBox() {
- const tools = core.isReplaying()
- ? [
- [core.status.replay.pausing ? "play" : "pause", "stop", "rewind"],
- ["speedDown", "speedUp", "save"],
- ]
- : [
- ["keyboard", "shop", "pack", "T332"],
- ["settings", "save", "load", "T331"],
- ];
- if (core.domStyle.isVertical) {
- core.clearMap(
- "outerUI",
- TOOL_BOX_LEFT_VERTICAL,
- TOOL_BOX_TOP_VERTICAL,
- 115,
- 130
- );
+ let dn = 3;
+ for (let i = 0; i <= dn; i++) {
+ let delta = i * 32 * 3;
- for (let i = 0; i < tools.length; i++) {
- for (let j = 0; j < tools[i].length; j++) {
- core.drawIcon(
- "outerUI",
- tools[i][j],
- TOOL_BOX_LEFT_VERTICAL + i * 31 * 3,
- TOOL_BOX_TOP_VERTICAL + j * 31 * 3,
- 30 * 3,
- 30 * 3
- );
- }
- }
- } else {
- core.clearMap(
- "outerUI",
- TOOL_BOX_LEFT,
- TOOL_BOX_TOP,
- 130 * 3,
- 80 * 3
- );
+ if (core.domStyle.isVertical) {
+ this.drawKey(keyList[i], baseX, baseY + delta);
+ } else {
+ this.drawKey(keyList[i], baseX + delta, baseY);
+ }
- for (let i = 0; i < tools.length; i++) {
- for (let j = 0; j < tools[i].length; j++) {
- core.drawIcon(
- "outerUI",
- tools[i][j],
- TOOL_BOX_LEFT + j * 31 * 3,
- TOOL_BOX_TOP + i * 31 * 3,
- 30 * 3,
- 30 * 3
- );
- }
- }
- }
- }
- onclick(x, y) {
- const makeBox = ([x, y], [w, h]) => {
- return [
- [x, y],
- [x + w, y + h],
- ];
- };
- const gridify = ([x, y], [gw, gh]) => {
- return [Math.floor(x / gw), Math.floor(y / gh)];
- };
- const useItem = (itemId) => {
- if (!core.hasItem(itemId)) return;
+ core.setFont("outerUI", "bold 48px Verdana");
+ core.setTextAlign("outerUI", "left");
+ if (core.domStyle.isVertical) {
+ core.fillText(
+ "outerUI",
+ todraw[i],
+ baseX + 20 * 3,
+ baseY + 14 * 3 + delta,
+ TEXT_COLOR
+ );
+ } else {
+ core.fillText(
+ "outerUI",
+ todraw[i],
+ baseX + delta,
+ baseY + 32 * 3,
+ TEXT_COLOR
+ );
+ }
+ }
+ };
+ if (core.domStyle.isVertical) {
+ core.clearMap(
+ "outerUI",
+ KEY_BLOCK_LEFT_VERTICAL,
+ KEY_BLOCK_TOP_VERTICAL,
+ 45 * 3,
+ 130 * 3
+ );
+ drawKeyList(
+ KEY_BLOCK_LEFT_VERTICAL + 3 * 3,
+ KEY_BLOCK_TOP_VERTICAL + 5 * 3
+ );
+ } else {
+ core.clearMap(
+ "outerUI",
+ KEY_BLOCK_LEFT,
+ KEY_BLOCK_TOP,
+ 130 * 3,
+ 45 * 3
+ );
+ drawKeyList(KEY_BLOCK_LEFT + 10 * 3, KEY_BLOCK_TOP);
+ }
+ }
+ drawKey(key, x, y) {
+ let sx = 0,
+ sy = 0;
- if (itemId != this.selectedItem) {
- this.showItemInfo(itemId);
- } else {
- switch (itemId) {
- case "centerFly":
- core.ui._drawCenterFly();
- break;
- case "book":
- core.openBook(true);
- break;
- case "wand":
- core.insertAction({
- type: "useItem",
- id: itemId,
- });
- break;
- case "fly":
- core.useItem(itemId);
- break;
- default:
- core.useItem(itemId);
- }
- }
- };
- const inRect = ([x, y], [[sx, sy], [dx, dy]]) => {
- return sx <= x && x <= dx && sy <= y && y <= dy;
- };
- const relativeTo = ([x, y], [ax, ay]) => {
- return [x - ax, y - ay];
- };
- const pos = [x, y];
- if (core.domStyle.isVertical) {
- const itemBox = makeBox(
- [ITEM_BOX_LEFT_VERTICAL, ITEM_BOX_TOP_VERTICAL],
- [30 * 6 * 3, 31 * 4 * 3]
- );
- if (inRect(pos, itemBox)) {
- const [gx, gy] = gridify(relativeTo(pos, itemBox[0]), [
- 30 * 3,
- 31 * 3,
- ]);
- const itemId = this.itemMx[gx][gy];
- if (
- (core.status.event.id == "viewMaps" ||
- core.status.event.id == "fly") &&
- itemId === "book"
- )
- core.openBook(true);
- if (
- core.isReplaying() ||
- core.status.lockControl ||
- core.isMoving()
- )
- return;
- useItem(itemId);
- return;
- }
- const toolBox = makeBox(
- [TOOL_BOX_LEFT_VERTICAL, TOOL_BOX_TOP_VERTICAL],
- [31 * 2 * 3, 31 * 4 * 3]
- );
- if (inRect(pos, toolBox)) {
- const [col, row] = gridify(relativeTo(pos, toolBox[0]), [
- 31 * 3,
- 31 * 3,
- ]);
- if (core.status.lockControl || core.isMoving()) return;
- if (core.isReplaying()) {
- this.replayAction[col][row].call(core);
- } else if (core.isPlaying()) {
- if (col === 0 && row === 3) {
- core.doSL("autoSave", "load");
- } else if (col === 1 && row === 3) {
- core.doSL("autoSave", "reload");
- } else {
- this.toolbarAction[col][row].call(core, true);
- }
- }
- return;
- }
- const mapBox = makeBox(
- [MAP_BLOCK_LEFT_VERTICAL, MAP_BLOCK_TOP_VERTICAL],
- [350, 350]
- );
- if (inRect(pos, mapBox)) {
- if (
- core.isReplaying() ||
- core.status.lockControl ||
- core.isMoving()
- )
- return;
- core.useItem("fly");
- return;
- }
- /*const equipBox = makeBox([EQUIP_BLOCK_LEFT_VERTICAL, EQUIP_BLOCK_TOP_VERTICAL], [90 * 3, 130 * 3])
+ if (key == "yellowKey") sx += 13;
+ else if (key == "blueKey") sx += 26;
+ else if (key == "greenKey") sx += 39;
+
+ core.drawImage(
+ "outerUI",
+ "maba.webp",
+ sx,
+ sy,
+ 13,
+ 26,
+ x,
+ y,
+ 13 * 3,
+ 26 * 3
+ );
+ }
+ _update_infoWindow() {
+ const itemId = this.selectedItem;
+ let text = "";
+ if (this.selectedItem) {
+ text = core.replaceText(core.material.items[itemId]?.text);
+ if (text[0] == "," || text[0] == ",") text = text.substring(1);
+ }
+ if (core.domStyle.isVertical) {
+ core.clearMap(
+ "outerUI",
+ INFO_BLOCK_LEFT_VERTICAL,
+ INFO_BLOCK_TOP_VERTICAL,
+ 300 * 3,
+ 120 * 3
+ );
+
+ if (this.selectedItem) {
+ const icon = core.material.icons.items[itemId];
+ core.setTextAlign("outerUI", "left");
+ core.fillText(
+ "outerUI",
+ core.material.items[itemId].name,
+ INFO_BLOCK_LEFT_VERTICAL + 50 * 3,
+ INFO_BLOCK_TOP_VERTICAL + 27 * 3,
+ "#D1CEFF"
+ );
+ core.drawImage(
+ "outerUI",
+ core.material.images.items,
+ 0,
+ 32 * icon,
+ 32,
+ 32,
+ INFO_BLOCK_LEFT_VERTICAL + 10 * 3,
+ INFO_BLOCK_TOP_VERTICAL + 8 * 3,
+ 32 * 3,
+ 32 * 3
+ );
+ core.ui.drawTextContent("outerUI", text, {
+ left: INFO_BLOCK_LEFT_VERTICAL + 10 * 3,
+ top: INFO_BLOCK_TOP_VERTICAL + 40 * 3,
+ maxWidth: 275 * 3,
+ color: "#D1CEFF",
+ fontSize: 24,
+ });
+ }
+ } else {
+ core.clearMap(
+ "outerUI",
+ INFO_BLOCK_LEFT,
+ INFO_BLOCK_TOP,
+ 115 * 3,
+ 230 * 3
+ );
+ core.setFont("outerUI", "bold 36px Verdana")
+ if (this.selectedItem) {
+ const icon = core.material.icons.items[itemId];
+ core.setTextAlign("outerUI", "center");
+ core.fillText(
+ "outerUI",
+ core.material.items[itemId].name,
+ INFO_BLOCK_LEFT + 60 * 3,
+ INFO_BLOCK_TOP + 25 * 3,
+ "#D1CEFF"
+ );
+ core.drawImage(
+ "outerUI",
+ core.material.images.items,
+ 0,
+ 32 * icon,
+ 32,
+ 32,
+ INFO_BLOCK_LEFT + 45 * 3,
+ INFO_BLOCK_TOP + 30 * 3,
+ 32 * 3,
+ 32 * 3
+ );
+ core.ui.drawTextContent("outerUI", text, {
+ left: INFO_BLOCK_LEFT + 10 * 3,
+ top: INFO_BLOCK_TOP + 60 * 3,
+ maxWidth: 105 * 3,
+ color: "#D1CEFF",
+ fontSize: 24,
+ });
+ }
+ }
+ }
+ showItemInfo(itemId) {
+ //展示道具说明
+ this.selectedItem = itemId;
+ this._update_infoWindow();
+ }
+ clearItemInfo() {
+ //清除道具说明
+ this.selectedItem = null;
+ this._update_infoWindow();
+ }
+ _update_toolBox() {
+ const tools = core.isReplaying() ? [
+ [core.status.replay.pausing ? "play" : "pause", "stop", "rewind"],
+ ["speedDown", "speedUp", "save"],
+ ] : [
+ ["keyboard", "shop", "pack", "T332"],
+ ["settings", "save", "load", "T331"],
+ ];
+ if (core.domStyle.isVertical) {
+ core.clearMap(
+ "outerUI",
+ TOOL_BOX_LEFT_VERTICAL,
+ TOOL_BOX_TOP_VERTICAL,
+ 115,
+ 130
+ );
+
+ for (let i = 0; i < tools.length; i++) {
+ for (let j = 0; j < tools[i].length; j++) {
+ core.drawIcon(
+ "outerUI",
+ tools[i][j],
+ TOOL_BOX_LEFT_VERTICAL + i * 31 * 3,
+ TOOL_BOX_TOP_VERTICAL + j * 31 * 3,
+ 30 * 3,
+ 30 * 3
+ );
+ }
+ }
+ } else {
+ core.clearMap(
+ "outerUI",
+ TOOL_BOX_LEFT,
+ TOOL_BOX_TOP,
+ 130 * 3,
+ 80 * 3
+ );
+
+ for (let i = 0; i < tools.length; i++) {
+ for (let j = 0; j < tools[i].length; j++) {
+ core.drawIcon(
+ "outerUI",
+ tools[i][j],
+ TOOL_BOX_LEFT + j * 31 * 3,
+ TOOL_BOX_TOP + i * 31 * 3,
+ 30 * 3,
+ 30 * 3
+ );
+ }
+ }
+ }
+ }
+ onclick(x, y) {
+ const makeBox = ([x, y], [w, h]) => {
+ return [
+ [x, y],
+ [x + w, y + h],
+ ];
+ };
+ const gridify = ([x, y], [gw, gh]) => {
+ return [Math.floor(x / gw), Math.floor(y / gh)];
+ };
+ const useItem = (itemId) => {
+ if (!core.hasItem(itemId)) return;
+
+ if (itemId != this.selectedItem) {
+ this.showItemInfo(itemId);
+ } else {
+ switch (itemId) {
+ case "centerFly":
+ core.ui._drawCenterFly();
+ break;
+ case "book":
+ core.openBook(true);
+ break;
+ case "wand":
+ core.insertAction({
+ type: "useItem",
+ id: itemId,
+ });
+ break;
+ case "fly":
+ core.useItem(itemId);
+ break;
+ default:
+ core.useItem(itemId);
+ }
+ }
+ };
+ const inRect = ([x, y], [
+ [sx, sy],
+ [dx, dy]
+ ]) => {
+ return sx <= x && x <= dx && sy <= y && y <= dy;
+ };
+ const relativeTo = ([x, y], [ax, ay]) => {
+ return [x - ax, y - ay];
+ };
+ const pos = [x, y];
+ if (core.domStyle.isVertical) {
+ const itemBox = makeBox(
+ [ITEM_BOX_LEFT_VERTICAL, ITEM_BOX_TOP_VERTICAL],
+ [30 * 6 * 3, 31 * 4 * 3]
+ );
+ if (inRect(pos, itemBox)) {
+ const [gx, gy] = gridify(relativeTo(pos, itemBox[0]), [
+ 30 * 3,
+ 31 * 3,
+ ]);
+ const itemId = this.itemMx[gx][gy];
+ if (
+ (core.status.event.id == "viewMaps" ||
+ core.status.event.id == "fly") &&
+ itemId === "book"
+ )
+ core.openBook(true);
+ if (
+ core.isReplaying() ||
+ core.status.lockControl ||
+ core.isMoving()
+ )
+ return;
+ useItem(itemId);
+ return;
+ }
+ const toolBox = makeBox(
+ [TOOL_BOX_LEFT_VERTICAL, TOOL_BOX_TOP_VERTICAL],
+ [31 * 2 * 3, 31 * 4 * 3]
+ );
+ if (inRect(pos, toolBox)) {
+ const [col, row] = gridify(relativeTo(pos, toolBox[0]), [
+ 31 * 3,
+ 31 * 3,
+ ]);
+ if (core.status.lockControl || core.isMoving()) return;
+ if (core.isReplaying()) {
+ this.replayAction[col][row].call(core);
+ } else if (core.isPlaying()) {
+ if (col === 0 && row === 3) {
+ core.doSL("autoSave", "load");
+ } else if (col === 1 && row === 3) {
+ core.doSL("autoSave", "reload");
+ } else {
+ this.toolbarAction[col][row].call(core, true);
+ }
+ }
+ return;
+ }
+ const mapBox = makeBox(
+ [MAP_BLOCK_LEFT_VERTICAL, MAP_BLOCK_TOP_VERTICAL],
+ [350, 350]
+ );
+ if (inRect(pos, mapBox)) {
+ if (
+ core.isReplaying() ||
+ core.status.lockControl ||
+ core.isMoving()
+ )
+ return;
+ core.useItem("fly");
+ return;
+ }
+ /*const equipBox = makeBox([EQUIP_BLOCK_LEFT_VERTICAL, EQUIP_BLOCK_TOP_VERTICAL], [90 * 3, 130 * 3])
if (inRect(pos, equipBox)) {
if (core.isReplaying() || core.status.lockControl || core.isMoving()) return;
core.openEquipbox(true)
return;
}*/
- } else {
- const mapBox = makeBox([MAP_BLOCK_LEFT, MAP_BLOCK_TOP], [350, 350]);
- if (inRect(pos, mapBox)) {
- if (
- core.isReplaying() ||
- core.status.lockControl ||
- core.isMoving()
- )
- return;
- core.useItem("fly");
- return;
- }
- /*
+ } else {
+ const mapBox = makeBox([MAP_BLOCK_LEFT, MAP_BLOCK_TOP], [350, 350]);
+ if (inRect(pos, mapBox)) {
+ if (
+ core.isReplaying() ||
+ core.status.lockControl ||
+ core.isMoving()
+ )
+ return;
+ core.useItem("fly");
+ return;
+ }
+ /*
const equipBox = makeBox([EQUIP_BLOCK_LEFT, EQUIP_BLOCK_TOP], [130, 95])
if (inRect(pos, equipBox)) {
if (core.isReplaying() || core.status.lockControl || core.isMoving()) return;
core.openEquipbox(true)
return;
}*/
- const itemBox = makeBox(
- [ITEM_BOX_LEFT, ITEM_BOX_TOP],
- [31 * 4 * 3, 30 * 6 * 3]
- );
- if (inRect(pos, itemBox)) {
- const [gx, gy] = gridify(relativeTo(pos, itemBox[0]), [
- 31 * 3,
- 30 * 3,
- ]);
- const itemId = this.itemMx[gy][gx];
- if (
- (core.status.event.id == "viewMaps" ||
- core.status.event.id == "fly") &&
- itemId === "book"
- )
- core.openBook(true);
- if (
- core.isReplaying() ||
- core.status.lockControl ||
- core.isMoving()
- )
- return;
- useItem(itemId);
- return;
- }
- const toolBox = makeBox(
- [TOOL_BOX_LEFT, TOOL_BOX_TOP],
- [31 * 4 * 3, 31 * 2 * 3]
- );
- if (inRect(pos, toolBox)) {
- const [row, col] = gridify(relativeTo(pos, toolBox[0]), [
- 31 * 3,
- 31 * 3,
- ]);
- if (core.status.lockControl || core.isMoving()) return;
- if (core.isReplaying()) {
- this.replayAction[col][row].call(core);
- } else if (core.isPlaying()) {
- if (col === 0 && row === 3) {
- core.doSL("autoSave", "load");
- } else if (col === 1 && row === 3) {
- core.doSL("autoSave", "reload");
- } else {
- this.toolbarAction[col][row].call(core, true);
- }
- }
- return;
- }
- }
- }
- }
+ const itemBox = makeBox(
+ [ITEM_BOX_LEFT, ITEM_BOX_TOP],
+ [31 * 4 * 3, 30 * 6 * 3]
+ );
+ if (inRect(pos, itemBox)) {
+ const [gx, gy] = gridify(relativeTo(pos, itemBox[0]), [
+ 31 * 3,
+ 30 * 3,
+ ]);
+ const itemId = this.itemMx[gy][gx];
+ if (
+ (core.status.event.id == "viewMaps" ||
+ core.status.event.id == "fly") &&
+ itemId === "book"
+ )
+ core.openBook(true);
+ if (
+ core.isReplaying() ||
+ core.status.lockControl ||
+ core.isMoving()
+ )
+ return;
+ useItem(itemId);
+ return;
+ }
+ const toolBox = makeBox(
+ [TOOL_BOX_LEFT, TOOL_BOX_TOP],
+ [31 * 4 * 3, 31 * 2 * 3]
+ );
+ if (inRect(pos, toolBox)) {
+ const [row, col] = gridify(relativeTo(pos, toolBox[0]), [
+ 31 * 3,
+ 31 * 3,
+ ]);
+ if (core.status.lockControl || core.isMoving()) return;
+ if (core.isReplaying()) {
+ this.replayAction[col][row].call(core);
+ } else if (core.isPlaying()) {
+ if (col === 0 && row === 3) {
+ core.doSL("autoSave", "load");
+ } else if (col === 1 && row === 3) {
+ core.doSL("autoSave", "reload");
+ } else {
+ this.toolbarAction[col][row].call(core, true);
+ }
+ }
+ return;
+ }
+ }
+ }
+ }
- core.ui.statusBar = new StatusBar();
+ core.ui.statusBar = new StatusBar();
- core.control.clearStatusBar = function () {
- core.clearMap("outerUI");
- };
- // init() called in `afterLoadResources`.
- },
+ core.control.clearStatusBar = function () {
+ core.clearMap("outerUI");
+ };
+ // init() called in `afterLoadResources`.
+},
"override": function () {
- core.statusBar.icons = {
- floor: 0,
- name: null,
- lv: 1,
- hpmax: 2,
- hp: 3,
- atk: 4,
- def: 5,
- mdef: 6,
- money: 7,
- exp: 8,
- up: 9,
- book: 10,
- fly: 11,
- toolbox: 12,
- keyboard: 13,
- shop: 14,
- save: 15,
- load: 16,
- settings: 17,
- play: 18,
- pause: 19,
- stop: 20,
- speedDown: 21,
- speedUp: 22,
- rewind: 23,
- equipbox: 24,
- mana: 25,
- skill: 26,
- exit: 27,
- btn1: 28,
- btn2: 29,
- btn3: 30,
- btn4: 31,
- btn5: 32,
- btn6: 33,
- btn7: 34,
- alt: 35,
- keys: 36,
- help: 37,
- battle: 38,
- };
- core.actions._getClickLoc = function (x, y) {
- var size = 32 * core.domStyle.scale;
- var left = main.dom.gameDraw.offsetLeft + main.dom.gameGroup.offsetLeft;
- var top = main.dom.gameDraw.offsetTop + main.dom.gameGroup.offsetTop;
- var loc = {
- x: Math.max(x - left, 0),
- y: Math.max(y - top, 0),
- size: size,
- };
- return loc;
- };
- core.ui._drawWindowSelector = function (background, x, y, w, h) {
- w = Math.round(w) + 48;
- h = Math.round(h);
- var ctx = core.ui.createCanvas("_selector", x - 24, y, w, h, 165);
- ctx.canvas.id = "";
- this._drawSelector(ctx, background, w, h);
- };
+ core.statusBar.icons = {
+ floor: 0,
+ name: null,
+ lv: 1,
+ hpmax: 2,
+ hp: 3,
+ atk: 4,
+ def: 5,
+ mdef: 6,
+ money: 7,
+ exp: 8,
+ up: 9,
+ book: 10,
+ fly: 11,
+ toolbox: 12,
+ keyboard: 13,
+ shop: 14,
+ save: 15,
+ load: 16,
+ settings: 17,
+ play: 18,
+ pause: 19,
+ stop: 20,
+ speedDown: 21,
+ speedUp: 22,
+ rewind: 23,
+ equipbox: 24,
+ mana: 25,
+ skill: 26,
+ exit: 27,
+ btn1: 28,
+ btn2: 29,
+ btn3: 30,
+ btn4: 31,
+ btn5: 32,
+ btn6: 33,
+ btn7: 34,
+ alt: 35,
+ keys: 36,
+ help: 37,
+ battle: 38,
+ };
+ core.actions._getClickLoc = function (x, y) {
+ var size = 32 * core.domStyle.scale;
+ var left = main.dom.gameDraw.offsetLeft + main.dom.gameGroup.offsetLeft;
+ var top = main.dom.gameDraw.offsetTop + main.dom.gameGroup.offsetTop;
+ var loc = {
+ x: Math.max(x - left, 0),
+ y: Math.max(y - top, 0),
+ size: size,
+ };
+ return loc;
+ };
+ /* core.ui._drawWindowSelector = function (background, x, y, w, h) {
+ w = Math.round(w) + 48;
+ h = Math.round(h);
+ var ctx = core.ui.createCanvas("_selector", x - 24, y, w, h, 165);
+ ctx.canvas.id = "";
+ this._drawSelector(ctx, background, w, h);
+ };
- core.ui._drawSelector = function (ctx, background, w, h, left, top) {
- left = left || 0;
- top = top || 0;
- ctx = this.getContextByName(ctx);
- if (!ctx) return;
- if (typeof background == "string")
- background = core.material.images.images[background];
- if (!(background instanceof Image)) return;
- // badge
- ctx.drawImage(background, 132, 68, 24, 24, left + 4, top + 4, 24, 24);
- ctx.drawImage(
- background,
- 132,
- 68,
- 24,
- 24,
- w - left - 28,
- top + 4,
- 24,
- 24
- );
- };
+ core.ui._drawSelector = function (ctx, background, w, h, left, top) {
+ left = left || 0;
+ top = top || 0;
+ ctx = this.getContextByName(ctx);
+ if (!ctx) return;
+ if (typeof background == "string")
+ background = core.material.images.images[background];
+ if (!(background instanceof Image)) return;
+ // badge
+ ctx.drawImage(background, 132, 68, 24, 24, left + 4, top + 4, 24, 24);
+ ctx.drawImage(
+ background,
+ 132,
+ 68,
+ 24,
+ 24,
+ w - left - 28,
+ top + 4,
+ 24,
+ 24
+ );
+ };*/
- enemys.prototype._nextCriticals_useBinarySearch = function (
- enemy,
- info,
- number,
- x,
- y,
- floorId
- ) {
- var mon_hp = info.mon_hp,
- hero_atk = core.status.hero.atk,
- mon_def = info.mon_def,
- pre = info.damage;
- var list = [];
- var start_atk = hero_atk;
- if (info.__over__) {
- start_atk += info.__overAtk__;
- list.push([info.__overAtk__, -info.damage]);
- }
- var calNext = function (currAtk, maxAtk) {
- var start = Math.floor(currAtk),
- end = Math.floor(maxAtk);
- if (start > end) return null;
+ enemys.prototype._nextCriticals_useBinarySearch = function (
+ enemy,
+ info,
+ number,
+ x,
+ y,
+ floorId
+ ) {
+ var mon_hp = info.mon_hp,
+ hero_atk = core.status.hero.atk,
+ mon_def = info.mon_def,
+ pre = info.damage;
+ var list = [];
+ var start_atk = hero_atk;
+ if (info.__over__) {
+ start_atk += info.__overAtk__;
+ list.push([info.__overAtk__, -info.damage]);
+ }
+ var calNext = function (currAtk, maxAtk) {
+ var start = Math.floor(currAtk),
+ end = Math.floor(maxAtk);
+ if (start > end) return null;
- while (start < end) {
- var mid = Math.floor((start + end) / 2);
- if (mid - start > end - mid) mid--;
- var nextInfo = core.enemys.getDamageInfo(
- enemy,
- { atk: mid },
- x,
- y,
- floorId
- );
- if (nextInfo == null || typeof nextInfo == "number") return null;
- if (pre > nextInfo.damage) end = mid;
- else start = mid + 1;
- }
- var nextInfo = core.enemys.getDamageInfo(
- enemy,
- { atk: start },
- x,
- y,
- floorId
- );
- return nextInfo == null ||
- typeof nextInfo == "number" ||
- nextInfo.damage >= pre
- ? null
- : [start, nextInfo.damage];
- };
- var currAtk = start_atk;
- while (true) {
- var next = calNext(currAtk + 1, Number.MAX_SAFE_INTEGER, pre);
- if (next == null) break;
- currAtk = next[0];
- pre = next[1];
- list.push([currAtk - hero_atk, info.damage - pre]);
- if (pre <= 0 && !core.flags.enableNegativeDamage) break;
- if (list.length >= number) break;
- }
- if (list.length == 0) list.push([0, 0]);
- return list;
- };
- core.ui.clearMap = function (name, x, y, width, height) {
- if (name == "all") {
- for (var m in core.canvas) {
- core.canvas[m].clearRect(
- -32,
- -32,
- core.canvas[m].canvas.width + 32,
- core.canvas[m].canvas.height + 32
- );
- }
- core.clearMap("outerUI");
- core.dom.gif.innerHTML = "";
- core.removeGlobalAnimate();
- core.deleteCanvas(function (one) {
- return one.startsWith("_bigImage_");
- });
- core.setWeather(null);
- } else {
- var ctx = this.getContextByName(name);
- if (ctx)
- ctx.clearRect(
- x || 0,
- y || 0,
- width || ctx.canvas.width,
- height || ctx.canvas.height
- );
- }
- };
- events.prototype.openBook = function (fromUserAction) {
- if (core.isReplaying()) return;
- // 如果能恢复事件(从callBook事件触发)
- if (
- core.status.event.id == "book" &&
- core.events.recoverEvents(core.status.event.interval)
- )
- return;
- // 当前是book,且从“浏览地图”打开
- if (core.status.event.id == "book" && core.status.event.ui) {
- core.status.boxAnimateObjs = [];
- core.ui._drawViewMaps(core.status.event.ui);
- return;
- }
- // 从“浏览地图”页面打开
- if (core.status.event.id == "viewMaps" || core.status.event.id == "fly") {
- fromUserAction = false;
- core.status.event.ui = core.status.event.data;
- }
- if (!this._checkStatus("book", fromUserAction, true)) return;
- core.playSound("打开界面");
- core.useItem("book", true);
- };
- ////// 怪物手册界面时,放开某个键的操作 //////
- core.actions._keyUpBook = function (keycode) {
- if (keycode == 27 || keycode == 88) {
- core.playSound("取消");
- if (core.events.recoverEvents(core.status.event.interval)) {
- return;
- } else if (core.status.event.ui != null) {
- core.status.boxAnimateObjs = [];
- if (typeof core.status.event.ui === "number") {
- core.status.event.id = "fly";
- core.ui.drawFly(core.status.event.ui);
- } else {
- core.ui._drawViewMaps(core.status.event.ui);
- }
- } else core.ui.closePanel();
- return;
- }
- if (keycode == 13 || keycode == 32 || keycode == 67) {
- var data = core.status.event.data;
- if (data != null) {
- core.ui._drawBookDetail(data);
- }
- return;
- }
- };
- ////// 怪物手册界面的点击操作 //////
- actions.prototype._clickBook = function (x, y) {
- var pageinfo = core.ui._drawBook_pageinfo();
- // 上一页
- if (
- (x == this._HX_ - 2 || x == this._HX_ - 3) &&
- y === core._HEIGHT_ - 1
- ) {
- core.playSound("光标移动");
- core.ui.drawBook(core.status.event.data - pageinfo.per_page);
- return;
- }
- // 下一页
- if (
- (x == this._HX_ + 2 || x == this._HX_ + 3) &&
- y === core._HEIGHT_ - 1
- ) {
- core.playSound("光标移动");
- core.ui.drawBook(core.status.event.data + pageinfo.per_page);
- return;
- }
- // 返回
- if (x >= this.LAST - 2 && y === core._HEIGHT_ - 1) {
- core.playSound("取消");
- if (core.events.recoverEvents(core.status.event.interval)) {
- return;
- } else if (core.status.event.ui != null) {
- core.status.boxAnimateObjs = [];
- if (typeof core.status.event.ui === "number") {
- core.status.event.id = "fly";
- core.ui.drawFly(core.status.event.ui);
- } else {
- core.ui._drawViewMaps(core.status.event.ui);
- }
- } else core.ui.closePanel();
- return;
- }
- // 怪物信息
- var data = core.status.event.data;
- if (data != null && y < core._HEIGHT_ - 1) {
- var per_page = pageinfo.per_page,
- page = parseInt(data / per_page);
- var u = (core._HEIGHT_ - 1) / per_page;
- for (var i = 0; i < per_page; ++i) {
- if (y >= u * i && y < u * (i + 1)) {
- var index = per_page * page + i;
- core.ui.drawBook(index);
- core.ui._drawBookDetail(index);
- break;
- }
- }
- return;
- }
- return;
- };
+ while (start < end) {
+ var mid = Math.floor((start + end) / 2);
+ if (mid - start > end - mid) mid--;
+ var nextInfo = core.enemys.getDamageInfo(
+ enemy, { atk: mid },
+ x,
+ y,
+ floorId
+ );
+ if (nextInfo == null || typeof nextInfo == "number") return null;
+ if (pre > nextInfo.damage) end = mid;
+ else start = mid + 1;
+ }
+ var nextInfo = core.enemys.getDamageInfo(
+ enemy, { atk: start },
+ x,
+ y,
+ floorId
+ );
+ return nextInfo == null ||
+ typeof nextInfo == "number" ||
+ nextInfo.damage >= pre ?
+ null : [start, nextInfo.damage];
+ };
+ var currAtk = start_atk;
+ while (true) {
+ var next = calNext(currAtk + 1, Number.MAX_SAFE_INTEGER, pre);
+ if (next == null) break;
+ currAtk = next[0];
+ pre = next[1];
+ list.push([currAtk - hero_atk, info.damage - pre]);
+ if (pre <= 0 && !core.flags.enableNegativeDamage) break;
+ if (list.length >= number) break;
+ }
+ if (list.length == 0) list.push([0, 0]);
+ return list;
+ };
+ core.ui.clearMap = function (name, x, y, width, height) {
+ if (name == "all") {
+ for (var m in core.canvas) {
+ core.canvas[m].clearRect(
+ -32,
+ -32,
+ core.canvas[m].canvas.width + 32,
+ core.canvas[m].canvas.height + 32
+ );
+ }
+ core.clearMap("outerUI");
+ core.dom.gif.innerHTML = "";
+ core.removeGlobalAnimate();
+ core.deleteCanvas(function (one) {
+ return one.startsWith("_bigImage_");
+ });
+ core.setWeather(null);
+ } else {
+ var ctx = this.getContextByName(name);
+ if (ctx)
+ ctx.clearRect(
+ x || 0,
+ y || 0,
+ width || ctx.canvas.width,
+ height || ctx.canvas.height
+ );
+ }
+ };
+ events.prototype.openBook = function (fromUserAction) {
+ if (core.isReplaying()) return;
+ // 如果能恢复事件(从callBook事件触发)
+ if (
+ core.status.event.id == "book" &&
+ core.events.recoverEvents(core.status.event.interval)
+ )
+ return;
+ // 当前是book,且从“浏览地图”打开
+ if (core.status.event.id == "book" && core.status.event.ui) {
+ core.status.boxAnimateObjs = [];
+ core.ui._drawViewMaps(core.status.event.ui);
+ return;
+ }
+ // 从“浏览地图”页面打开
+ if (core.status.event.id == "viewMaps" || core.status.event.id == "fly") {
+ fromUserAction = false;
+ core.status.event.ui = core.status.event.data;
+ }
+ if (!this._checkStatus("book", fromUserAction, true)) return;
+ core.playSound("打开界面");
+ core.useItem("book", true);
+ };
+ ////// 怪物手册界面时,放开某个键的操作 //////
+ core.actions._keyUpBook = function (keycode) {
+ if (keycode == 27 || keycode == 88) {
+ core.playSound("取消");
+ if (core.events.recoverEvents(core.status.event.interval)) {
+ return;
+ } else if (core.status.event.ui != null) {
+ core.status.boxAnimateObjs = [];
+ if (typeof core.status.event.ui === "number") {
+ core.status.event.id = "fly";
+ core.ui.drawFly(core.status.event.ui);
+ } else {
+ core.ui._drawViewMaps(core.status.event.ui);
+ }
+ } else core.ui.closePanel();
+ return;
+ }
+ if (keycode == 13 || keycode == 32 || keycode == 67) {
+ var data = core.status.event.data;
+ if (data != null) {
+ core.ui._drawBookDetail(data);
+ }
+ return;
+ }
+ };
+ ////// 怪物手册界面的点击操作 //////
+ actions.prototype._clickBook = function (x, y) {
+ var pageinfo = core.ui._drawBook_pageinfo();
+ // 上一页
+ if (
+ (x == this._HX_ - 2 || x == this._HX_ - 3) &&
+ y === core._HEIGHT_ - 1
+ ) {
+ core.playSound("光标移动");
+ core.ui.drawBook(core.status.event.data - pageinfo.per_page);
+ return;
+ }
+ // 下一页
+ if (
+ (x == this._HX_ + 2 || x == this._HX_ + 3) &&
+ y === core._HEIGHT_ - 1
+ ) {
+ core.playSound("光标移动");
+ core.ui.drawBook(core.status.event.data + pageinfo.per_page);
+ return;
+ }
+ // 返回
+ if (x >= this.LAST - 2 && y === core._HEIGHT_ - 1) {
+ core.playSound("取消");
+ if (core.events.recoverEvents(core.status.event.interval)) {
+ return;
+ } else if (core.status.event.ui != null) {
+ core.status.boxAnimateObjs = [];
+ if (typeof core.status.event.ui === "number") {
+ core.status.event.id = "fly";
+ core.ui.drawFly(core.status.event.ui);
+ } else {
+ core.ui._drawViewMaps(core.status.event.ui);
+ }
+ } else core.ui.closePanel();
+ return;
+ }
+ // 怪物信息
+ var data = core.status.event.data;
+ if (data != null && y < core._HEIGHT_ - 1) {
+ var per_page = pageinfo.per_page,
+ page = parseInt(data / per_page);
+ var u = (core._HEIGHT_ - 1) / per_page;
+ for (var i = 0; i < per_page; ++i) {
+ if (y >= u * i && y < u * (i + 1)) {
+ var index = per_page * page + i;
+ core.ui.drawBook(index);
+ core.ui._drawBookDetail(index);
+ break;
+ }
+ }
+ return;
+ }
+ return;
+ };
- ////// 执行当前自定义事件列表中的下一个事件 //////
- events.prototype.doAction = function () {
- // 清空boxAnimate和UI层
- clearInterval(core.status.event.interval);
- clearTimeout(core.status.event.interval);
- clearInterval(core.status.event.animateUI);
- core.status.event.interval = null;
- delete core.status.event.aniamteUI;
- if (core.status.gameOver || core.status.replay.failed) return;
- // 判定是否执行完毕
- if (this._doAction_finishEvents()) return;
- core.clearUI();
- var floorId = core.status.event.data.floorId || core.status.floorId;
- // 当前点坐标和前缀
- var x = core.status.event.data.x,
- y = core.status.event.data.y;
- var prefix = [
- floorId || ":f",
- x != null ? x : "x",
- y != null ? y : "y",
- ].join("@");
- var current = core.status.event.data.list[0];
- if (this._popEvents(current, prefix)) return;
- // 当前要执行的事件
- var data = current.todo.shift();
- core.status.event.data.current = data;
- if (typeof data == "string") data = { type: "text", text: data };
- // 该事件块已经被禁用
- if (data._disabled) return core.doAction();
- if (data.type !== "cgtext") {
- core.unregisterAnimationFrame("skip");
- core.setFlag("skip", false);
- }
- data.floorId = data.floorId || floorId;
- core.status.event.data.type = data.type;
- this.doEvent(data, x, y, prefix);
- return;
- };
+ ////// 执行当前自定义事件列表中的下一个事件 //////
+ events.prototype.doAction = function () {
+ // 清空boxAnimate和UI层
+ clearInterval(core.status.event.interval);
+ clearTimeout(core.status.event.interval);
+ clearInterval(core.status.event.animateUI);
+ core.status.event.interval = null;
+ delete core.status.event.aniamteUI;
+ if (core.status.gameOver || core.status.replay.failed) return;
+ // 判定是否执行完毕
+ if (this._doAction_finishEvents()) return;
+ core.clearUI();
+ var floorId = core.status.event.data.floorId || core.status.floorId;
+ // 当前点坐标和前缀
+ var x = core.status.event.data.x,
+ y = core.status.event.data.y;
+ var prefix = [
+ floorId || ":f",
+ x != null ? x : "x",
+ y != null ? y : "y",
+ ].join("@");
+ var current = core.status.event.data.list[0];
+ if (this._popEvents(current, prefix)) return;
+ // 当前要执行的事件
+ var data = current.todo.shift();
+ core.status.event.data.current = data;
+ if (typeof data == "string") data = { type: "text", text: data };
+ // 该事件块已经被禁用
+ if (data._disabled) return core.doAction();
+ if (data.type !== "cgtext") {
+ core.unregisterAnimationFrame("skip");
+ core.setFlag("skip", false);
+ }
+ data.floorId = data.floorId || floorId;
+ core.status.event.data.type = data.type;
+ this.doEvent(data, x, y, prefix);
+ return;
+ };
- ////// 在某个canvas上绘制粗体 //////
- core.fillBoldText1 = function (
- name,
- text,
- x,
- y,
- style,
- strokeStyle,
- lineWidth,
- font,
- maxWidth
- ) {
- var ctx = this.getContextByName(name);
- if (!ctx) return;
- if (font) ctx.font = font;
- if (!style) style = ctx.fillStyle;
- style = core.arrayToRGBA(style);
- if (!strokeStyle) strokeStyle = "#000000";
- strokeStyle = core.arrayToRGBA(strokeStyle);
- if (maxWidth != null) {
- this.setFontForMaxWidth(ctx, text, maxWidth);
- }
- ctx.strokeStyle = strokeStyle;
+ ////// 在某个canvas上绘制粗体 //////
+ core.fillBoldText1 = function (
+ name,
+ text,
+ x,
+ y,
+ style,
+ strokeStyle,
+ lineWidth,
+ font,
+ maxWidth
+ ) {
+ var ctx = this.getContextByName(name);
+ if (!ctx) return;
+ if (font) ctx.font = font;
+ if (!style) style = ctx.fillStyle;
+ style = core.arrayToRGBA(style);
+ if (!strokeStyle) strokeStyle = "#000000";
+ strokeStyle = core.arrayToRGBA(strokeStyle);
+ if (maxWidth != null) {
+ this.setFontForMaxWidth(ctx, text, maxWidth);
+ }
+ ctx.strokeStyle = strokeStyle;
- if (!lineWidth) lineWidth = 2;
- ctx.lineWidth = lineWidth;
- ctx.strokeText(text, x, y);
- ctx.fillStyle = style;
- ctx.fillText(text, x, y);
- };
- ////// 绘制 WindowSkin
- ui.prototype.drawWindowSkin = function (
- background,
- ctx,
- x,
- y,
- w,
- h,
- direction,
- px,
- py,
- size = 1
- ) {
- background = background || core.status.textAttribute.background;
+ if (!lineWidth) lineWidth = 2;
+ ctx.lineWidth = lineWidth;
+ ctx.strokeText(text, x, y);
+ ctx.fillStyle = style;
+ ctx.fillText(text, x, y);
+ };
+ ////// 绘制 WindowSkin
+ ui.prototype.drawWindowSkin = function (
+ background,
+ ctx,
+ x,
+ y,
+ w,
+ h,
+ direction,
+ px,
+ py,
+ size = 1
+ ) {
+ background = background || core.status.textAttribute.background;
- // 仿RM窗口皮肤 ↓
- // 绘制背景
- core.drawImage(
- ctx,
- background,
- 0,
- 0,
- 128,
- 128,
- x + 2 * size,
- y + 2 * size,
- w - 4 * size,
- h - 4 * size
- );
- // 绘制边框
- // 上方
- core.drawImage(
- ctx,
- background,
- 128,
- 0,
- 16,
- 16,
- x,
- y,
- 16 * size,
- 16 * size
- );
- for (var dx = 0; dx < w - 64 * size; dx += 32 * size) {
- core.drawImage(
- ctx,
- background,
- 144,
- 0,
- 32,
- 16,
- x + dx + 16 * size,
- y,
- 32 * size,
- 16 * size
- );
- core.drawImage(
- ctx,
- background,
- 144,
- 48,
- 32,
- 16,
- x + dx + 16 * size,
- y + h - 16 * size,
- 32 * size,
- 16 * size
- );
- }
- core.drawImage(
- ctx,
- background,
- 144,
- 0,
- (w - dx - 32 * size) / size,
- 16,
- x + dx + 16 * size,
- y,
- w - dx - 32 * size,
- 16 * size
- );
- core.drawImage(
- ctx,
- background,
- 144,
- 48,
- (w - dx - 32 * size) / size,
- 16,
- x + dx + 16 * size,
- y + h - 16 * size,
- w - dx - 32 * size,
- 16 * size
- );
- core.drawImage(
- ctx,
- background,
- 176,
- 0,
- 16,
- 16,
- x + w - 16 * size,
- y,
- 16 * size,
- 16 * size
- );
- // 左右
- for (var dy = 0; dy < h - 64 * size; dy += 32 * size) {
- core.drawImage(
- ctx,
- background,
- 128,
- 16,
- 16,
- 32,
- x,
- y + dy + 16 * size,
- 16 * size,
- 32 * size
- );
- core.drawImage(
- ctx,
- background,
- 176,
- 16,
- 16,
- 32,
- x + w - 16 * size,
- y + dy + 16 * size,
- 16 * size,
- 32 * size
- );
- }
- core.drawImage(
- ctx,
- background,
- 128,
- 16,
- 16,
- (h - dy - 32 * size) / size,
- x,
- y + dy + 16 * size,
- 16 * size,
- h - dy - 32 * size
- );
- core.drawImage(
- ctx,
- background,
- 176,
- 16,
- 16,
- (h - dy - 32 * size) / size,
- x + w - 16 * size,
- y + dy + 16 * size,
- 16 * size,
- h - dy - 32 * size
- );
- //下方
- core.drawImage(
- ctx,
- background,
- 128,
- 48,
- 16,
- 16,
- x,
- y + h - 16 * size,
- 16 * size,
- 16 * size
- );
- core.drawImage(
- ctx,
- background,
- 176,
- 48,
- 16,
- 16,
- x + w - 16 * size,
- y + h - 16 * size,
- 16 * size,
- 16 * size
- );
+ // 仿RM窗口皮肤 ↓
+ // 绘制背景
+ core.drawImage(
+ ctx,
+ background,
+ 0,
+ 0,
+ 128,
+ 128,
+ x + 2 * size,
+ y + 2 * size,
+ w - 4 * size,
+ h - 4 * size
+ );
+ // 绘制边框
+ // 上方
+ core.drawImage(
+ ctx,
+ background,
+ 128,
+ 0,
+ 16,
+ 16,
+ x,
+ y,
+ 16 * size,
+ 16 * size
+ );
+ for (var dx = 0; dx < w - 64 * size; dx += 32 * size) {
+ core.drawImage(
+ ctx,
+ background,
+ 144,
+ 0,
+ 32,
+ 16,
+ x + dx + 16 * size,
+ y,
+ 32 * size,
+ 16 * size
+ );
+ core.drawImage(
+ ctx,
+ background,
+ 144,
+ 48,
+ 32,
+ 16,
+ x + dx + 16 * size,
+ y + h - 16 * size,
+ 32 * size,
+ 16 * size
+ );
+ }
+ core.drawImage(
+ ctx,
+ background,
+ 144,
+ 0,
+ (w - dx - 32 * size) / size,
+ 16,
+ x + dx + 16 * size,
+ y,
+ w - dx - 32 * size,
+ 16 * size
+ );
+ core.drawImage(
+ ctx,
+ background,
+ 144,
+ 48,
+ (w - dx - 32 * size) / size,
+ 16,
+ x + dx + 16 * size,
+ y + h - 16 * size,
+ w - dx - 32 * size,
+ 16 * size
+ );
+ core.drawImage(
+ ctx,
+ background,
+ 176,
+ 0,
+ 16,
+ 16,
+ x + w - 16 * size,
+ y,
+ 16 * size,
+ 16 * size
+ );
+ // 左右
+ for (var dy = 0; dy < h - 64 * size; dy += 32 * size) {
+ core.drawImage(
+ ctx,
+ background,
+ 128,
+ 16,
+ 16,
+ 32,
+ x,
+ y + dy + 16 * size,
+ 16 * size,
+ 32 * size
+ );
+ core.drawImage(
+ ctx,
+ background,
+ 176,
+ 16,
+ 16,
+ 32,
+ x + w - 16 * size,
+ y + dy + 16 * size,
+ 16 * size,
+ 32 * size
+ );
+ }
+ core.drawImage(
+ ctx,
+ background,
+ 128,
+ 16,
+ 16,
+ (h - dy - 32 * size) / size,
+ x,
+ y + dy + 16 * size,
+ 16 * size,
+ h - dy - 32 * size
+ );
+ core.drawImage(
+ ctx,
+ background,
+ 176,
+ 16,
+ 16,
+ (h - dy - 32 * size) / size,
+ x + w - 16 * size,
+ y + dy + 16 * size,
+ 16 * size,
+ h - dy - 32 * size
+ );
+ //下方
+ core.drawImage(
+ ctx,
+ background,
+ 128,
+ 48,
+ 16,
+ 16,
+ x,
+ y + h - 16 * size,
+ 16 * size,
+ 16 * size
+ );
+ core.drawImage(
+ ctx,
+ background,
+ 176,
+ 48,
+ 16,
+ 16,
+ x + w - 16 * size,
+ y + h - 16 * size,
+ 16 * size,
+ 16 * size
+ );
- // arrow
- if (px != null && py != null) {
- if (direction == "up") {
- core.drawImage(
- ctx,
- background,
- 128,
- 96,
- 32,
- 32,
- px,
- y + h - 3 * size,
- 32 * size,
- 32 * size
- );
- } else if (direction == "down") {
- core.drawImage(
- ctx,
- background,
- 160,
- 96,
- 32,
- 32,
- px,
- y - 29 * size,
- 32 * size,
- 32 * size
- );
- }
- }
- // 仿RM窗口皮肤 ↑
- };
- events.prototype.battle = function (id, x, y, force, callback) {
- core.saveAndStopAutomaticRoute();
- id = id || core.getBlockId(x, y);
- const cls = core.getClsFromId(id);
- if (!id || !cls || !(cls === "enemys" || cls === "enemy48"))
- return core.clearContinueAutomaticRoute(callback);
- // 非强制战斗
- if (!core.enemys.canBattle(id, x, y) && !force && !core.status.event.id) {
- core.stopSound();
- core.playSound("操作失败");
- core.drawTip("你打不过此怪物!", id);
- return core.clearContinueAutomaticRoute(callback);
- }
- // 自动存档
- if (!core.status.event.id) core.autosave(true);
- // 战前事件
- if (!this.beforeBattle(id, x, y))
- return core.clearContinueAutomaticRoute(callback);
- // 战后事件
- this.afterBattle(id, x, y);
- if (callback) callback();
- };
- },
+ // arrow
+ if (px != null && py != null) {
+ if (direction == "up") {
+ core.drawImage(
+ ctx,
+ background,
+ 128,
+ 96,
+ 32,
+ 32,
+ px,
+ y + h - 3 * size,
+ 32 * size,
+ 32 * size
+ );
+ } else if (direction == "down") {
+ core.drawImage(
+ ctx,
+ background,
+ 160,
+ 96,
+ 32,
+ 32,
+ px,
+ y - 29 * size,
+ 32 * size,
+ 32 * size
+ );
+ }
+ }
+ // 仿RM窗口皮肤 ↑
+ };
+ events.prototype.battle = function (id, x, y, force, callback) {
+ core.saveAndStopAutomaticRoute();
+ id = id || core.getBlockId(x, y);
+ const cls = core.getClsFromId(id);
+ if (!id || !cls || !(cls === "enemys" || cls === "enemy48"))
+ return core.clearContinueAutomaticRoute(callback);
+ // 非强制战斗
+ if (core.enemys.getDamage(id, x, y) === null && !force && !core.status.event.id) {
+ core.stopSound();
+ core.playSound("操作失败");
+ core.drawTip("你打不过此怪物!", id);
+ return core.clearContinueAutomaticRoute(callback);
+ }
+ // 自动存档
+ if (!core.status.event.id) core.autosave(true);
+ // 战前事件
+ if (!this.beforeBattle(id, x, y))
+ return core.clearContinueAutomaticRoute(callback);
+ // 战后事件
+ this.afterBattle(id, x, y);
+ if (callback) callback();
+ };
+ actions.prototype._sys_ondown_lockControl = function (x, y, px, py) {
+ if (core.status.played && !core.status.lockControl) return false;
+
+ switch (core.status.event.id) {
+ case "battle":
+ core.plugin.battle_onclick(x, y, px, py);
+ break;
+ case "centerFly":
+ this._clickCenterFly(x, y, px, py);
+ break;
+ case "book":
+ this._clickBook(x, y, px, py);
+ break;
+ case "book-detail":
+ this._clickBookDetail(x, y, px, py);
+ break;
+ case "fly":
+ this._clickFly(x, y, px, py);
+ break;
+ case "viewMaps":
+ this._clickViewMaps(x, y, px, py);
+ break;
+ case "switchs":
+ this._clickSwitchs(x, y, px, py);
+ break;
+ case "switchs-sounds":
+ this._clickSwitchs_sounds(x, y, px, py);
+ break;
+ case "switchs-display":
+ this._clickSwitchs_display(x, y, px, py);
+ break;
+ case "switchs-action":
+ this._clickSwitchs_action(x, y, px, py);
+ break;
+ case "settings":
+ this._clickSettings(x, y, px, py);
+ break;
+ case "selectShop":
+ this._clickQuickShop(x, y, px, py);
+ break;
+ case "equipbox":
+ this._clickEquipbox(x, y, px, py);
+ break;
+ case "toolbox":
+ this._clickToolbox(x, y, px, py);
+ break;
+ case "save":
+ case "load":
+ case "replayLoad":
+ case "replayRemain":
+ case "replaySince":
+ this._clickSL(x, y, px, py);
+ break;
+ case "confirmBox":
+ this._clickConfirmBox(x, y, px, py);
+ break;
+ case "keyBoard":
+ this._clickKeyBoard(x, y, px, py);
+ break;
+ case "action":
+ this._clickAction(x, y, px, py);
+ break;
+ case "text":
+ core.drawText();
+ break;
+ case "notes":
+ this._clickNotes(x, y, px, py);
+ break;
+ case "syncSave":
+ this._clickSyncSave(x, y, px, py);
+ break;
+ case "syncSelect":
+ this._clickSyncSelect(x, y, px, py);
+ break;
+ case "localSaveSelect":
+ this._clickLocalSaveSelect(x, y, px, py);
+ break;
+ case "storageRemove":
+ this._clickStorageRemove(x, y, px, py);
+ break;
+ case "cursor":
+ this._clickCursor(x, y, px, py);
+ break;
+ case "replay":
+ this._clickReplay(x, y, px, py);
+ break;
+ case "gameInfo":
+ this._clickGameInfo(x, y, px, py);
+ break;
+ case "about":
+ case "help":
+ core.ui.closePanel();
+ break;
+ }
+
+ // --- 长按判定
+ if (core.timeout.onDownTimeout == null) {
+ core.timeout.onDownTimeout = setTimeout(function () {
+ if (core.interval.onDownInterval == null) {
+ core.interval.onDownInterval = setInterval(function () {
+ if (!core.actions.longClick(x, y, px, py)) {
+ clearInterval(core.interval.onDownInterval);
+ core.interval.onDownInterval = null;
+ }
+ }, 40);
+ }
+ }, 500);
+ }
+ return true;
+ };
+ core.registerAction(
+ "ondown",
+ "_sys_ondown_lockControl",
+ core.actions._sys_ondown_lockControl,
+ 30
+ );
+},
"额外信息": function () {
/* 宝石血瓶左下角显示数值
* 注意!!!不要在道具属性中直接操作flags,使用core.status.hero.flags或core.setFlag系列函数代替!
@@ -4478,708 +4657,956 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
}
}
},
- "编辑器显伤": function () {
+ "跳伤": function () {
// 在此增加新插件
- /////// 用户设置 ///////
- // 将__enable置为false将关闭插件
- var __enable = true;
- // 魔防攻速之类的属性可以在这里加 ['atk', 'def', 'mdef']
- var heroStatus = ["atk", "def", "mdef", "hp"];
- // saveHero为true 将会把每次造塔测试时的角色数据存下来 否则会读取初始属性
- // 用不着可以关了 节约缓存空间 (虽然根本没多少 还没一个存档大
- // 也可以手动清理 控制台输入core.removeLocalStorage('editorHero')即可
- var saveHero = true;
-
- // 下为具体实现 懒得写注释了 大概就是写HTML然后注册交互
- if (!__enable || main.mode != "editor") return;
- core.plugin.initEditorDamage = false;
- if (heroStatus.length >= 4 && !editor.isMobile)
- editor.dom.mid2.style.top = 650 + 30 * (heroStatus.length - 3) + "px";
- editor.statusRatio = core.getLocalStorage("statusRatio", 1);
- editor.saveHero = saveHero;
- editor._heroStatus = heroStatus;
- editor.dom.mapEdit.appendChild(core.canvas.damage.canvas);
- var HTML =
- "
";
-
- //if (heroStatus.length >= 4 && !editor.isMobile) editor.dom.mid2.style.top = 650 + 30 * (heroStatus.length - 3) + 'px';
- heroStatus.forEach(function (status) {
- var id = status + "set",
- id2 = status + "add",
- id3 = status + "rec",
- id4 = status + "help";
- HTML +=
- "
";
- });
- document.getElementById("viewportButtons").innerHTML = HTML;
- ["set", "add", "rec", "help"].forEach(function (e) {
- heroStatus.forEach(function (status) {
- editor.dom[status + e] = document.getElementById(status + e);
- });
- });
- var _hasItem = core.items.hasItem;
- core.items.hasItem = function (itemId) {
- if (itemId == "book" && main.mode == "editor") return true;
- return _hasItem.call(core.items, itemId);
- };
- if (main.mode == "editor") {
- var applyList = [
- "getDamageString",
- "nextCriticals",
- "getEnemyInfo",
- "getEnemyValue",
- ];
- applyList.forEach(function (name) {
- var func = core.enemys[name];
- core.enemys[name] = function () {
- var args =
- arguments.length === 1
- ? [arguments[0]]
- : Array.apply(null, arguments);
- if (typeof args[0] == "string") args[0] = core.enemys.enemys[args[0]];
- return func.apply(core.enemys, args);
- };
- });
+ /**
+ 函数使用说明
+ Dove.MorePerform.ShowDamagePop.PopDamage(
+ 'ui', // 画布名称或画布2d上下文对象
+ 100, 200, // 位置 (x, y)
+ -50, // 伤害值
+ 24, // 字体大小
+ "宋体",//字体
+ '#FF0000', // 字体颜色
+ '#000000', // 描边颜色
+ 0.5, // 水平速度 (speedX)
+ -10, // 垂直速度 (speedY)
+ 0.5, // 重力 (gravity)
+ 120 // 显示时长(帧数)
+ */
+ if (!core.registerAnimationFrame) {
+ throw new Error("require 2.6.1 or higher version");
}
- ////// 获得勇士属性 //////
- core.control.getStatus = function (name) {
- if (!core.status.hero) return null;
- if (name == "x" || name == "y" || name == "direction")
- return this.getHeroLoc(name);
- /*if ( main.mode == 'editor' && !core.hasFlag('__statistics__')) {
+ window.Dove = window.Dove || {};
+ Dove.MorePerform = Dove.MorePerform || {};
+
+ Dove.MorePerform.ShowDamagePop = {};
+ Dove.MorePerform.ShowDamagePop.version = 1.0;
+
+ Dove.MorePerform.ShowDamagePop.AllPopingCanvas = [];
+
+ // 每帧的处理
+ Dove.MorePerform.ShowDamagePop.Update = function () {
+ this.AllPopingCanvas = this.AllPopingCanvas.filter(function (spr) {
+ spr.update();
+ return spr.isAlive();
+ });
+ if (!this.AllPopingCanvas.length) PopSprite._count = 0;
+ };
+
+ // 弹出伤害气泡
+ Dove.MorePerform.ShowDamagePop.PopDamage = function (
+ canvasName,
+ x,
+ y,
+ damageValue,
+ fontSize,
+ font,
+ fontColor,
+ outlineColor,
+ speedX,
+ speedY,
+ gravity,
+ duration
+ ) {
+ if (damageValue) {
+ var poper = new PopSprite(
+ canvasName,
+ x,
+ y,
+ damageValue,
+ fontSize,
+ font,
+ fontColor,
+ outlineColor,
+ speedX,
+ speedY,
+ gravity,
+ duration
+ );
+ Dove.MorePerform.ShowDamagePop.AllPopingCanvas.push(poper);
+ }
+ };
+
+ // 战斗发生前后记录生命值并处理
+ Dove.MorePerform.ShowDamagePop.OnBattle = core.events.battle;
+ core.events.battle = function () {
+ var hpBeforeBattle = core.status.hero.hp;
+ Dove.MorePerform.ShowDamagePop.OnBattle.apply(core.events, arguments);
+ if (core.getFlag("noAnimate"))
+ Dove.MorePerform.ShowDamagePop.PopDamage(
+ "ui", // 默认画布名称
+ core.getHeroLoc("x") * 32, // 英雄位置 x
+ core.getHeroLoc("y") * 32, // 英雄位置 y
+ Math.floor(core.status.hero.hp - hpBeforeBattle), // 伤害值
+ 16, // 默认字体大小
+ "Arial", //默认字体
+ null, // 默认颜色
+ null, // 默认描边颜色
+ null, // 默认水平速度
+ null, // 默认垂直速度
+ null, // 默认重力
+ 90 // 默认显示时长(帧数)
+ );
+ };
+ let time = 0;
+ // 注册每帧事件
+ core.registerAnimationFrame("ShowDamagePop", true, (temptime) => {
+ if (temptime - time > 1000 / 60) {
+ time = temptime;
+
+ Dove.MorePerform.ShowDamagePop.Update.bind(
+ Dove.MorePerform.ShowDamagePop
+ )();
+ }
+ });
+
+ // 弹出精灵类
+ function PopSprite(
+ canvasName,
+ x,
+ y,
+ damage,
+ fontSize,
+ font,
+ fontColor,
+ outlineColor,
+ speedX,
+ speedY,
+ gravity,
+ duration
+ ) {
+ this.initialize.apply(this, arguments);
+ }
+
+ PopSprite.prototype = Object.create(Object.prototype);
+ PopSprite.prototype.constructor = PopSprite;
+
+ // 常量
+ PopSprite._count = 0;
+ PopSprite._baseZOrder = 50;
+ PopSprite._floorDis = 20;
+
+ // 初始化
+ PopSprite.prototype.initialize = function (
+ canvasName,
+ x,
+ y,
+ damage,
+ fontSize,
+ font,
+ fontColor,
+ outlineColor,
+ speedX,
+ speedY,
+ gravity,
+ duration
+ ) {
+ this._canvasName = canvasName ?? "ui"; // 默认画布名称
+ this._x = x;
+ this._y = y;
+ this._damage = damage;
+ this._fontSize = fontSize ?? 16; // 默认字体大小
+ this._font = font ?? "Arial";
+ this._fontColor = fontColor ?? (damage > 0 ? "#22FF44" : "lightcoral"); // 默认颜色
+ this._outlineColor = outlineColor ?? "#FFFFFF"; // 默认描边颜色
+ this._speedX = speedX ?? -1 + Math.random() * 2; // 水平速度,默认随机
+ this._speedY = speedY ?? -3 - Math.random() * 4; // 垂直速度,默认随机
+ this._gravity = gravity ?? 0.3; // 重力加速度,默认 0.3
+ this._duration = duration ?? 180; // 显示时长(帧数),默认 180 帧
+ this.initAllMembers();
+ this.requestCanvas();
+ };
+
+ // 自更新
+ PopSprite.prototype.update = function () {
+ if (this._timer < this._duration) {
+ // 使用传入的显示时长
+ this._x += this._vx;
+ this._y += this._vy;
+ this._vy += this._gravity;
+ if (this._y >= this._floorY) {
+ this._y = this._floorY;
+ this._vy *= -0.75; // 反弹衰减
+ }
+ core.relocateCanvas(this._symbol, this._x, this._y);
+ core.setOpacity(this._symbol, 1 - this._timer / this._duration); // 根据显示时长设置透明度
+ } else {
+ this.dispose();
+ }
+ this._timer++;
+ };
+
+ // 申请并描绘canvas
+ PopSprite.prototype.requestCanvas = function () {
+ core.createCanvas(
+ this._symbol,
+ this._x,
+ this._y,
+ this._width + 4,
+ this._height + 4,
+ this._z
+ );
+
+ var canvas = core.getContextByName(this._symbol);
+ canvas.font = this._fontSize + "px " + this._font; // 动态设置字体大小
+ canvas.fillStyle = this._fontColor; // 动态设置字体颜色
+ canvas.strokeStyle = this._outlineColor; // 动态设置描边颜色
+ canvas.strokeText(this._text, 2, this._height);
+ canvas.fillText(this._text, 2, this._height);
+ };
+
+ // 初始化所有成员变量
+ PopSprite.prototype.initAllMembers = function () {
+ this._text = String(this._damage);
+ var uiContext = core.ui.getContextByName(this._canvasName); // 使用指定画布
+ uiContext.font = this._fontSize + "px " + this._font; // 动态设置字体大小
+ var textRect = uiContext.measureText(this._text);
+ this._width = textRect.width + 4;
+ this._height = this._fontSize + 4; // 动态设置高度
+ this._z = uiContext.canvas.style.zIndex
+ ? Number(uiContext.canvas.style.zIndex) + PopSprite._count
+ : PopSprite._baseZOrder + PopSprite._count;
+ this._symbol = "popSprite" + PopSprite._count++;
+ this._alive = true;
+ this._vx = this._speedX; // 使用传入的水平速度
+ this._vy = this._speedY; // 使用传入的垂直速度
+ this._floorY = this._y + PopSprite._floorDis;
+ this._timer = 0;
+ };
+
+ // 判断是否存活
+ PopSprite.prototype.isAlive = function () {
+ return this._alive;
+ };
+
+ // 释放
+ PopSprite.prototype.dispose = function () {
+ this._alive = false;
+ core.deleteCanvas(this._symbol);
+ };
+ },
+ "编辑器显伤": function () {
+ // 在此增加新插件
+ /////// 用户设置 ///////
+ // 将__enable置为false将关闭插件
+ var __enable = true;
+ // 魔防攻速之类的属性可以在这里加 ['atk', 'def', 'mdef']
+ var heroStatus = [
+ "atk",
+ "def",
+ "spell",
+ "mdef",
+ "matk",
+ "mhp",
+ "speed",
+ "hp",
+ ];
+ // saveHero为true 将会把每次造塔测试时的角色数据存下来 否则会读取初始属性
+ // 用不着可以关了 节约缓存空间 (虽然根本没多少 还没一个存档大
+ // 也可以手动清理 控制台输入core.removeLocalStorage('editorHero')即可
+ var saveHero = true;
+
+ // 下为具体实现 懒得写注释了 大概就是写HTML然后注册交互
+ if (!__enable || main.mode != "editor") return;
+ core.plugin.initEditorDamage = false;
+ if (heroStatus.length >= 4 && !editor.isMobile) {
+ editor.dom.mid2.style.top = 650 + 30 * (heroStatus.length - 3) + "px";
+ editor.dom.mid.style.height = 730 + "px";
+ document.querySelector("#mid .tools").style.height = 280 + "px";
+ }
+ editor.statusRatio = core.getLocalStorage("statusRatio", 1);
+ editor.saveHero = saveHero;
+ editor._heroStatus = heroStatus;
+ editor.dom.mapEdit.appendChild(core.canvas.damage.canvas);
+ const viewportButtons = document.getElementById("viewportButtons");
+
+ var HTML =
+ "
";
+
+ //if (heroStatus.length >= 4 && !editor.isMobile) editor.dom.mid2.style.top = 650 + 30 * (heroStatus.length - 3) + 'px';
+ heroStatus.forEach(function (status) {
+ var id = status + "set",
+ id2 = status + "add",
+ id3 = status + "rec",
+ id4 = status + "help";
+ HTML +=
+ "
" +
+ core.getStatusLabel(status) +
+ "
";
+ });
+ document.getElementById("viewportButtons").innerHTML = HTML;
+ ["set", "add", "rec", "help"].forEach(function (e) {
+ heroStatus.forEach(function (status) {
+ editor.dom[status + e] = document.getElementById(status + e);
+ });
+ });
+ var _hasItem = core.items.hasItem;
+ core.items.hasItem = function (itemId) {
+ if (itemId == "book" && main.mode == "editor") return true;
+ return _hasItem.call(core.items, itemId);
+ };
+ if (main.mode == "editor") {
+ var applyList = [
+ "getDamageString",
+ "nextCriticals",
+ "getEnemyInfo",
+ "getEnemyValue",
+ ];
+ applyList.forEach(function (name) {
+ var func = core.enemys[name];
+ core.enemys[name] = function () {
+ var args =
+ arguments.length === 1 ?
+ [arguments[0]] :
+ Array.apply(null, arguments);
+ if (typeof args[0] == "string") args[0] = core.enemys.enemys[args[0]];
+ return func.apply(core.enemys, args);
+ };
+ });
+ }
+
+ ////// 获得勇士属性 //////
+ core.control.getStatus = function (name) {
+ if (!core.status.hero) return null;
+ if (name == "x" || name == "y" || name == "direction")
+ return this.getHeroLoc(name);
+ /*if ( main.mode == 'editor' && !core.hasFlag('__statistics__')) {
return data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d.firstData.hero[name];
}*/
- return core.status.hero[name];
- };
+ return core.status.hero[name];
+ };
- core.control.updateDamage = function (floorId, ctx) {
- floorId = floorId || core.status.floorId;
- if (!floorId || core.status.gameOver) return;
- var onMap = ctx == null;
- if (main.mode == "editor") {
- ctx = core.canvas.damage;
- core.updateCheckBlock();
- core.clearMap(ctx);
- if (editor.uivalues.bigmap) return;
- }
+ core.control.updateDamage = function (floorId, ctx) {
+ floorId = floorId || core.status.floorId;
+ if (!floorId || core.status.gameOver) return;
+ var onMap = ctx == null;
+ if (main.mode == "editor") {
+ ctx = core.canvas.damage;
+ core.updateCheckBlock();
+ core.clearMap(ctx);
+ if (editor.uivalues.bigmap) return;
+ }
- // 没有怪物手册
- if (!core.hasItem("book")) return;
- core.status.damage.posX = core.bigmap.posX;
- core.status.damage.posY = core.bigmap.posY;
- if (!onMap) {
- var width = core.floors[floorId].width,
- height = core.floors[floorId].height;
- // 地图过大的缩略图不绘制显伤
- if (width * height > core.bigmap.threshold) return;
- }
- this._updateDamage_damage(floorId, onMap);
- this._updateDamage_extraDamage(floorId, onMap);
- this.drawDamage(ctx);
- };
+ // 没有怪物手册
+ if (!core.hasItem("book")) return;
+ core.status.damage.posX = core.bigmap.posX;
+ core.status.damage.posY = core.bigmap.posY;
+ if (!onMap) {
+ var width = core.floors[floorId].width,
+ height = core.floors[floorId].height;
+ // 地图过大的缩略图不绘制显伤
+ if (width * height > core.bigmap.threshold) return;
+ }
+ this._updateDamage_damage(floorId, onMap);
+ this._updateDamage_extraDamage(floorId, onMap);
+ this.drawDamage(ctx);
+ };
- core.control.drawDamage = function (ctx) {
- if (
- core.status.gameOver ||
- !core.status.damage /* || main.mode != 'play'*/
- )
- return;
- var onMap = false;
- if (ctx == null) {
- ctx = core.canvas.damage;
- core.clearMap("damage");
- onMap = true;
- }
+ core.control.drawDamage = function (ctx) {
+ if (
+ core.status.gameOver ||
+ !core.status.damage /* || main.mode != 'play'*/
+ )
+ return;
+ var onMap = false;
+ if (ctx == null) {
+ ctx = core.canvas.damage;
+ core.clearMap("damage");
+ onMap = true;
+ }
- if (onMap && core.bigmap.v2) {
- // 检查是否需要重算...
- if (
- Math.abs(core.bigmap.posX - core.status.damage.posX) >=
- core.bigmap.extend - 1 ||
- Math.abs(core.bigmap.posY - core.status.damage.posY) >=
- core.bigmap.extend - 1
- ) {
- return this.updateDamage();
- }
- }
- return this._drawDamage_draw(ctx, onMap);
- };
+ if (onMap && core.bigmap.v2) {
+ // 检查是否需要重算...
+ if (
+ Math.abs(core.bigmap.posX - core.status.damage.posX) >=
+ core.bigmap.extend - 1 ||
+ Math.abs(core.bigmap.posY - core.status.damage.posY) >=
+ core.bigmap.extend - 1
+ ) {
+ return this.updateDamage();
+ }
+ }
+ return this._drawDamage_draw(ctx, onMap);
+ };
- ////// 以x,y的形式返回每个点的事件 //////
- core.maps.getMapBlocksObj = function (floorId, noCache) {
- floorId = floorId || core.status.floorId;
- if (
- core.status.mapBlockObjs[floorId] &&
- !noCache &&
- main.mode != "editor"
- )
- return core.status.mapBlockObjs[floorId];
+ ////// 以x,y的形式返回每个点的事件 //////
+ core.maps.getMapBlocksObj = function (floorId, noCache) {
+ floorId = floorId || core.status.floorId;
+ if (
+ core.status.mapBlockObjs[floorId] &&
+ !noCache &&
+ main.mode != "editor"
+ )
+ return core.status.mapBlockObjs[floorId];
- var obj = {};
- core.extractBlocks(floorId);
- core.status.maps[floorId].blocks.forEach(function (block) {
- obj[block.x + "," + block.y] = block;
- });
- core.status.mapBlockObjs[floorId] = obj;
- return obj;
- };
+ var obj = {};
+ core.extractBlocks(floorId);
+ core.status.maps[floorId].blocks.forEach(function (block) {
+ obj[block.x + "," + block.y] = block;
+ });
+ core.status.mapBlockObjs[floorId] = obj;
+ return obj;
+ };
- this.bignum = function (num, defaultValue) {
- if (num == null || num == "") return defaultValue;
- num = num + "";
- var list = {
- w: 1e4,
- e: 1e8,
- z: 1e12,
- j: 1e16,
- g: 1e20,
- };
- // 浮点数问题
- function checkFloat(num) {
- if (!core.isset(num)) return 0;
- num = num + "";
- var index = num.indexOf(".");
- if (index < 0) return 0;
- else return num.slice(index + 1).length;
- }
- var index = num.search(/w|e|z|j|g/);
- if (index <= 0) {
- num = parseInt(num);
- if (core.isset(num)) return num;
- else {
- alert("不正确的输入");
- return defaultValue;
- }
- }
- for (; index > 0; index = num.search(/w|e|z|j|g/)) {
- var p = num[index],
- q = list[p],
- n = num.slice(0, index),
- m = Math.pow(10, checkFloat(n));
- num = (n * m * q) / m + num.slice(index + 1);
- }
- return parseInt(num);
- };
+ this.bignum = function (num, defaultValue) {
+ if (num == null || num == "") return defaultValue;
+ num = num + "";
+ var list = {
+ w: 1e4,
+ e: 1e8,
+ z: 1e12,
+ j: 1e16,
+ g: 1e20,
+ };
+ // 浮点数问题
+ function checkFloat(num) {
+ if (!core.isset(num)) return 0;
+ num = num + "";
+ var index = num.indexOf(".");
+ if (index < 0) return 0;
+ else return num.slice(index + 1).length;
+ }
+ var index = num.search(/w|e|z|j|g/);
+ if (index <= 0) {
+ num = parseInt(num);
+ if (core.isset(num)) return num;
+ else {
+ alert("不正确的输入");
+ return defaultValue;
+ }
+ }
+ for (; index > 0; index = num.search(/w|e|z|j|g/)) {
+ var p = num[index],
+ q = list[p],
+ n = num.slice(0, index),
+ m = Math.pow(10, checkFloat(n));
+ num = (n * m * q) / m + num.slice(index + 1);
+ }
+ return parseInt(num);
+ };
- this.updateEditorDamage = function (noSave) {
- core.updateDamage();
- heroStatus.forEach(function (status) {
- editor.dom[status + "set"].value = core.status.hero[status];
- });
- if (!noSave && editor.saveHero)
- core.setLocalStorage("editorHero", core.status.hero);
- };
+ this.updateEditorDamage = function (noSave) {
+ core.updateDamage();
+ heroStatus.forEach(function (status) {
+ editor.dom[status + "set"].value = core.status.hero[status];
+ });
+ if (!noSave && editor.saveHero)
+ core.setLocalStorage("editorHero", core.status.hero);
+ };
- var _resizeMap = core.maps.resizeMap;
- core.maps.resizeMap = function (floorId) {
- _resizeMap.call(core.maps, floorId);
- if (!core.plugin.initEditorDamage && main.mode == "editor") {
- core.plugin.initEditorDamage = true;
- var editorHero = core.getLocalStorage("editorHero");
- if (editorHero && saveHero) core.status.hero = editorHero;
- else core.removeLocalStorage("editorHero");
- editor._heroStatus.forEach(function (e) {
- editor.dom[e + "set"].onchange = function () {
- var status = this.id.slice(0, -3);
- core.status.hero[status] = core.bignum(
- this.value,
- core.status.hero[status]
- );
- core.updateEditorDamage();
- };
- editor.dom[e + "add"].onclick = function () {
- var status = this.id.slice(0, -3);
- core.status.hero[status] += editor.statusRatio;
- core.updateEditorDamage();
- };
- editor.dom[e + "rec"].onclick = function () {
- var status = this.id.slice(0, -3);
- core.status.hero[status] -= editor.statusRatio;
- core.updateEditorDamage();
- };
- editor.dom[e + "help"].onclick = function () {
- var status = this.id.slice(0, -4),
- name = core.getStatusLabel(status);
- var ratio = parseInt(
- prompt(
- "当前属性:" +
- name +
- "\n现在的点击按钮变化值:" +
- editor.statusRatio +
- ",请输入按下一次+/-按钮的属性变化量,可以写4w 10.2e这种字母缩写"
- )
- );
- if (!core.isset(ratio)) {
- printe("不合法的输入");
- return;
- }
- editor.statusRatio = ratio;
- core.setLocalStorage("statusRatio", ratio);
- };
- });
- var _updateMap = editor.updateMap;
- editor.updateMap = function () {
- _updateMap.call(editor);
- core.updateEditorDamage(true);
- };
- editor.mode.onmode = function (mode, callback) {
- if (editor_mode.mode != mode) {
- if (mode === "save") {
- editor_mode.doActionList(
- editor_mode.mode,
- editor_mode.actionList,
- function () {
- if (callback) callback();
- core.updateEditorDamage();
- }
- );
- }
- if (editor_mode.mode === "nextChange" && mode)
- editor_mode.showMode(mode);
- if (mode !== "save") editor_mode.mode = mode;
- editor_mode.actionList = [];
- }
- };
- }
- };
- },
+ var _resizeMap = core.maps.resizeMap;
+ core.maps.resizeMap = function (floorId) {
+ _resizeMap.call(core.maps, floorId);
+ if (!core.plugin.initEditorDamage && main.mode == "editor") {
+ core.plugin.initEditorDamage = true;
+ var editorHero = core.getLocalStorage("editorHero");
+ if (editorHero && saveHero) core.status.hero = editorHero;
+ else core.removeLocalStorage("editorHero");
+ editor._heroStatus.forEach(function (e) {
+ editor.dom[e + "set"].onchange = function () {
+ var status = this.id.slice(0, -3);
+ core.status.hero[status] = core.bignum(
+ this.value,
+ core.status.hero[status]
+ );
+ if (status === "mdef" && core.status.hero[status] > 100)
+ core.status.hero[status] = 100;
+ core.updateEditorDamage();
+ };
+ editor.dom[e + "add"].onclick = function () {
+ var status = this.id.slice(0, -3);
+ core.status.hero[status] += editor.statusRatio;
+ if (status === "mdef" && core.status.hero[status] > 100)
+ core.status.hero[status] = 100;
+ core.updateEditorDamage();
+ };
+ editor.dom[e + "rec"].onclick = function () {
+ var status = this.id.slice(0, -3);
+ core.status.hero[status] -= editor.statusRatio;
+ core.updateEditorDamage();
+ };
+ editor.dom[e + "help"].onclick = function () {
+ var status = this.id.slice(0, -4),
+ name = core.getStatusLabel(status);
+ var ratio = parseInt(
+ prompt(
+ "当前属性:" +
+ name +
+ "\n现在的点击按钮变化值:" +
+ editor.statusRatio +
+ ",请输入按下一次+/-按钮的属性变化量,可以写4w 10.2e这种字母缩写"
+ )
+ );
+ if (!core.isset(ratio)) {
+ printe("不合法的输入");
+ return;
+ }
+ editor.statusRatio = ratio;
+ core.setLocalStorage("statusRatio", ratio);
+ };
+ });
+ var _updateMap = editor.updateMap;
+ editor.updateMap = function () {
+ _updateMap.call(editor);
+ core.updateEditorDamage(true);
+ };
+ editor.mode.onmode = function (mode, callback) {
+ if (editor_mode.mode != mode) {
+ if (mode === "save") {
+ editor_mode.doActionList(
+ editor_mode.mode,
+ editor_mode.actionList,
+ function () {
+ if (callback) callback();
+ core.updateEditorDamage();
+ }
+ );
+ }
+ if (editor_mode.mode === "nextChange" && mode)
+ editor_mode.showMode(mode);
+ if (mode !== "save") editor_mode.mode = mode;
+ editor_mode.actionList = [];
+ }
+ };
+ }
+ };
+},
"手册区分特殊属性": function () {
- // 在此增加新插件
- this.arrsame = function (Arraya, Arrayb) {
- let a = Arraya || [];
- let b = Arrayb || [];
- if (typeof a === "number") a = [a];
- if (typeof b === "number") b = [b];
- let c = [...a, ...b];
- for (const i of c)
- if (!a.includes(i) || !b.includes(i)) {
- return false;
- }
- return true;
- };
- enemys.prototype.getCurrentEnemys = function (floorId) {
- floorId = floorId || core.status.floorId;
- var enemys = [],
- used = {};
- core.extractBlocks(floorId);
- core.status.maps[floorId].blocks.forEach(function (block) {
- if (!block.disable && block.event.cls.indexOf("enemy") == 0) {
- this._getCurrentEnemys_addEnemy(
- block.event.id,
- enemys,
- used,
- block.x,
- block.y,
- floorId
- );
- }
- }, this);
- return this._getCurrentEnemys_sort(enemys);
- };
+ // 在此增加新插件
+ this.arrsame = function (Arraya, Arrayb) {
+ let a = Arraya || [];
+ let b = Arrayb || [];
+ if (typeof a === "number") a = [a];
+ if (typeof b === "number") b = [b];
+ let c = [...a, ...b];
+ for (const i of c)
+ if (!a.includes(i) || !b.includes(i)) {
+ return false;
+ }
+ return true;
+ };
+ enemys.prototype.getCurrentEnemys = function (floorId) {
+ floorId = floorId || core.status.floorId;
+ var enemys = [],
+ used = {};
+ core.extractBlocks(floorId);
+ core.status.maps[floorId].blocks.forEach(function (block) {
+ if (!block.disable && block.event.cls.indexOf("enemy") == 0) {
+ this._getCurrentEnemys_addEnemy(
+ block.event.id,
+ enemys,
+ used,
+ block.x,
+ block.y,
+ floorId
+ );
+ }
+ }, this);
+ return this._getCurrentEnemys_sort(enemys);
+ };
- enemys.prototype._getCurrentEnemys_getEnemy = function (enemyId) {
- var enemy = core.material.enemys[enemyId];
- if (!enemy) return null;
+ enemys.prototype._getCurrentEnemys_getEnemy = function (enemyId) {
+ var enemy = core.material.enemys[enemyId];
+ if (!enemy) return null;
- // 检查朝向;displayIdInBook
- return (
- core.material.enemys[enemy.displayIdInBook] ||
- core.material.enemys[(enemy.faceIds || {}).down] ||
- enemy
- );
- };
+ // 检查朝向;displayIdInBook
+ return (
+ core.material.enemys[enemy.displayIdInBook] ||
+ core.material.enemys[(enemy.faceIds || {}).down] ||
+ enemy
+ );
+ };
- enemys.prototype._getCurrentEnemys_addEnemy = function (
- enemyId,
- enemys,
- used,
- x,
- y,
- floorId
- ) {
- var enemy = this._getCurrentEnemys_getEnemy(enemyId);
- if (enemy == null) return;
+ enemys.prototype._getCurrentEnemys_addEnemy = function (
+ enemyId,
+ enemys,
+ used,
+ x,
+ y,
+ floorId
+ ) {
+ var enemy = this._getCurrentEnemys_getEnemy(enemyId);
+ if (enemy == null) return;
- var id = enemy.id;
+ var id = enemy.id;
- var enemyInfo = this.getEnemyInfo(enemy, null, null, null, floorId);
- var locEnemyInfo = this.getEnemyInfo(enemy, null, x, y, floorId);
- if (
- !core.flags.enableEnemyPoint ||
- (locEnemyInfo.atk == enemyInfo.atk &&
- locEnemyInfo.def == enemyInfo.def &&
- locEnemyInfo.hp == enemyInfo.hp &&
- core.plugin.arrsame(locEnemyInfo.special, enemyInfo.special))
- ) {
- x = null;
- y = null;
- } else {
- // 检查enemys里面是否使用了存在的内容
- for (var i = 0; i < enemys.length; ++i) {
- var one = enemys[i];
- if (
- id == one.id &&
- one.locs != null &&
- locEnemyInfo.atk == one.atk &&
- locEnemyInfo.def == one.def &&
- locEnemyInfo.hp == one.hp &&
- core.plugin.arrsame(locEnemyInfo.special, one.special)
- ) {
- one.locs.push([x, y]);
- return;
- }
- }
- enemyInfo = locEnemyInfo;
- }
+ var enemyInfo = this.getEnemyInfo(enemy, null, null, null, floorId);
+ var locEnemyInfo = this.getEnemyInfo(enemy, null, x, y, floorId);
+ if (
+ !core.flags.enableEnemyPoint ||
+ (locEnemyInfo.atk == enemyInfo.atk &&
+ locEnemyInfo.def == enemyInfo.def &&
+ locEnemyInfo.hp == enemyInfo.hp &&
+ core.plugin.arrsame(locEnemyInfo.special, enemyInfo.special))
+ ) {
+ x = null;
+ y = null;
+ } else {
+ // 检查enemys里面是否使用了存在的内容
+ for (var i = 0; i < enemys.length; ++i) {
+ var one = enemys[i];
+ if (
+ id == one.id &&
+ one.locs != null &&
+ locEnemyInfo.atk == one.atk &&
+ locEnemyInfo.def == one.def &&
+ locEnemyInfo.hp == one.hp &&
+ core.plugin.arrsame(locEnemyInfo.special, one.special)
+ ) {
+ one.locs.push([x, y]);
+ return;
+ }
+ }
+ enemyInfo = locEnemyInfo;
+ }
- var id = enemy.id + ":" + x + ":" + y;
- if (used[id]) return;
- used[id] = true;
+ var id = enemy.id + ":" + x + ":" + y;
+ if (used[id]) return;
+ used[id] = true;
- var specialText = core.enemys.getSpecialText(enemy, x, y, floorId);
- var specialColor = core.enemys.getSpecialColor(enemy, x, y, floorId);
+ var specialText = core.enemys.getSpecialText(enemy, x, y, floorId);
+ var specialColor = core.enemys.getSpecialColor(enemy, x, y, floorId);
- var critical = this.nextCriticals(enemy, 1, x, y, floorId);
- if (critical.length > 0) critical = critical[0];
+ var critical = this.nextCriticals(enemy, 1, x, y, floorId);
+ if (critical.length > 0) critical = critical[0];
+ var criticalSpeed = core.nextCriticals_speed(enemy, 1, x, y, floorId);
+ if (criticalSpeed.length > 0) criticalSpeed = criticalSpeed[0];
+ var criticalSpell = core.nextCriticals_spell(enemy, 1, x, y, floorId);
+ if (criticalSpell.length > 0) criticalSpell = criticalSpell[0];
+ var e = core.clone(enemy);
+ for (var v in enemyInfo) {
+ e[v] = enemyInfo[v];
+ }
+ if (x != null && y != null) {
+ e.locs = [
+ [x, y]
+ ];
+ }
+ e.name = core.getEnemyValue(enemy, "name", x, y, floorId);
+ e.specialText = specialText;
+ e.specialColor = specialColor;
+ e.damage = this.getDamage(enemy, x, y, floorId);
+ e.critical = critical[0];
+ e.criticalDamage = critical[1];
+ e.criticalAtk = [critical[0], critical[1]];
+ e.criticalSpeed = criticalSpeed;
+ e.criticalSpell = criticalSpell;
+ e.defDamage = this._getCurrentEnemys_addEnemy_defDamage(
+ enemy,
+ x,
+ y,
+ floorId
+ );
+ enemys.push(e);
+ };
- var e = core.clone(enemy);
- for (var v in enemyInfo) {
- e[v] = enemyInfo[v];
- }
- if (x != null && y != null) {
- e.locs = [[x, y]];
- }
- e.name = core.getEnemyValue(enemy, "name", x, y, floorId);
- e.specialText = specialText;
- e.specialColor = specialColor;
- e.damage = this.getDamage(enemy, x, y, floorId);
- e.critical = critical[0];
- e.criticalDamage = critical[1];
- e.defDamage = this._getCurrentEnemys_addEnemy_defDamage(
- enemy,
- x,
- y,
- floorId
- );
- enemys.push(e);
- };
+ enemys.prototype._getCurrentEnemys_addEnemy_defDamage = function (
+ enemy,
+ x,
+ y,
+ floorId
+ ) {
+ var ratio = core.status.maps[floorId || core.status.floorId].ratio || 1;
+ return this.getDefDamage(enemy, ratio, x, y, floorId);
+ };
- enemys.prototype._getCurrentEnemys_addEnemy_defDamage = function (
- enemy,
- x,
- y,
- floorId
- ) {
- var ratio = core.status.maps[floorId || core.status.floorId].ratio || 1;
- return this.getDefDamage(enemy, ratio, x, y, floorId);
- };
+ enemys.prototype._getCurrentEnemys_sort = function (enemys) {
+ return enemys.sort(function (a, b) {
+ if (a.damage == b.damage) {
+ return a.money - b.money;
+ }
+ if (a.damage == null) {
+ return 1;
+ }
+ if (b.damage == null) {
+ return -1;
+ }
+ return a.damage - b.damage;
+ });
+ };
- enemys.prototype._getCurrentEnemys_sort = function (enemys) {
- return enemys.sort(function (a, b) {
- if (a.damage == b.damage) {
- return a.money - b.money;
- }
- if (a.damage == null) {
- return 1;
- }
- if (b.damage == null) {
- return -1;
- }
- return a.damage - b.damage;
- });
- };
+ ////// 获得所有特殊属性的名称 //////
+ enemys.prototype.getSpecialText = function (enemy, x, y, floorId) {
+ if (typeof enemy == "string")
+ enemy = this.getEnemyInfo(enemy, null, x, y, floorId);
+ if (!enemy) return [];
+ var special = enemy.special;
+ var text = [];
- ////// 获得所有特殊属性的名称 //////
- enemys.prototype.getSpecialText = function (enemy, x, y, floorId) {
- if (typeof enemy == "string")
- enemy = this.getEnemyInfo(enemy, null, x, y, floorId);
- if (!enemy) return [];
- var special = enemy.special;
- var text = [];
+ var specials = this.getSpecials();
+ if (specials) {
+ for (var i = 0; i < specials.length; i++) {
+ if (this.hasSpecial(special, specials[i][0]))
+ text.push(this._calSpecialContent(enemy, specials[i][1]));
+ }
+ }
+ return text;
+ };
- var specials = this.getSpecials();
- if (specials) {
- for (var i = 0; i < specials.length; i++) {
- if (this.hasSpecial(special, specials[i][0]))
- text.push(this._calSpecialContent(enemy, specials[i][1]));
- }
- }
- return text;
- };
+ ////// 获得所有特殊属性的颜色 //////
+ enemys.prototype.getSpecialColor = function (enemy, x, y, floorId) {
+ if (typeof enemy == "string")
+ enemy = this.getEnemyInfo(enemy, null, x, y, floorId);
+ if (!enemy) return [];
+ var special = enemy.special;
+ var colors = [];
- ////// 获得所有特殊属性的颜色 //////
- enemys.prototype.getSpecialColor = function (enemy, x, y, floorId) {
- if (typeof enemy == "string")
- enemy = this.getEnemyInfo(enemy, null, x, y, floorId);
- if (!enemy) return [];
- var special = enemy.special;
- var colors = [];
+ var specials = this.getSpecials();
+ if (specials) {
+ for (var i = 0; i < specials.length; i++) {
+ if (this.hasSpecial(special, specials[i][0]))
+ colors.push(specials[i][3] || null);
+ }
+ }
+ return colors;
+ };
- var specials = this.getSpecials();
- if (specials) {
- for (var i = 0; i < specials.length; i++) {
- if (this.hasSpecial(special, specials[i][0]))
- colors.push(specials[i][3] || null);
- }
- }
- return colors;
- };
+ ////// 获得所有特殊属性的额外标记 //////
+ enemys.prototype.getSpecialFlag = function (enemy, x, y, floorId) {
+ if (typeof enemy == "string")
+ enemy = getEnemyInfo(enemy, null, x, y, floorId);
+ if (!enemy) return [];
+ var special = enemy.special;
+ var flag = 0;
- ////// 获得所有特殊属性的额外标记 //////
- enemys.prototype.getSpecialFlag = function (enemy, x, y, floorId) {
- if (typeof enemy == "string")
- enemy = getEnemyInfo(enemy, null, x, y, floorId);
- if (!enemy) return [];
- var special = enemy.special;
- var flag = 0;
+ var specials = this.getSpecials();
+ if (specials) {
+ for (var i = 0; i < specials.length; i++) {
+ if (this.hasSpecial(special, specials[i][0]))
+ flag |= specials[i][4] || 0;
+ }
+ }
+ return flag;
+ };
- var specials = this.getSpecials();
- if (specials) {
- for (var i = 0; i < specials.length; i++) {
- if (this.hasSpecial(special, specials[i][0]))
- flag |= specials[i][4] || 0;
- }
- }
- return flag;
- };
+ ////// 获得每个特殊属性的说明 //////
+ enemys.prototype.getSpecialHint = function (enemy, special) {
+ var specials = this.getSpecials();
+ if (special == null) {
+ if (specials == null) return [];
+ var hints = [];
+ for (var i = 0; i < specials.length; i++) {
+ if (this.hasSpecial(enemy, specials[i][0]))
+ hints.push(
+ "\r[" +
+ core.arrayToRGBA(specials[i][3] || "#FF6A6A") +
+ "]\\d" +
+ this._calSpecialContent(enemy, specials[i][1]) +
+ ":\\d\r[]" +
+ this._calSpecialContent(enemy, specials[i][2])
+ );
+ }
+ return hints;
+ }
- ////// 获得每个特殊属性的说明 //////
- enemys.prototype.getSpecialHint = function (enemy, special) {
- var specials = this.getSpecials();
- if (special == null) {
- if (specials == null) return [];
- var hints = [];
- for (var i = 0; i < specials.length; i++) {
- if (this.hasSpecial(enemy, specials[i][0]))
- hints.push(
- "\r[" +
- core.arrayToRGBA(specials[i][3] || "#FF6A6A") +
- "]\\d" +
- this._calSpecialContent(enemy, specials[i][1]) +
- ":\\d\r[]" +
- this._calSpecialContent(enemy, specials[i][2])
- );
- }
- return hints;
- }
-
- if (specials == null) return "";
- for (var i = 0; i < specials.length; i++) {
- if (special == specials[i][0])
- return (
- "\r[#FF6A6A]\\d" +
- this._calSpecialContent(enemy, specials[i][1]) +
- ":\\d\r[]" +
- this._calSpecialContent(enemy, specials[i][2])
- );
- }
- return "";
- };
- ui.prototype._drawBook_drawName = function (
- index,
- enemy,
- top,
- left,
- width
- ) {
- // 绘制第零列(名称和特殊属性)
- // 如果需要添加自己的比如怪物的称号等,也可以在这里绘制
- core.setTextAlign("ui", "center");
- if (core.enemys.getSpecialText(enemy).length == 0) {
- core.fillText(
- "ui",
- enemy.name,
- left + width / 2,
- top + 35,
- "#DDDDDD",
- this._buildFont(17, true),
- width
- );
- } else {
- core.fillText(
- "ui",
- enemy.name,
- left + width / 2,
- top + 28,
- "#DDDDDD",
- this._buildFont(17, true),
- width
- );
- switch (core.enemys.getSpecialText(enemy).length) {
- case 1:
- core.fillText(
- "ui",
- core.enemys.getSpecialText(enemy)[0],
- left + width / 2,
- top + 50,
- core.arrayToRGBA(
- (core.enemys.getSpecialColor(enemy) || [])[0] || "#FF6A6A"
- ),
- this._buildFont(15, true),
- width
- );
- break;
- case 2:
- // Step 1: 计算字体
- var text =
- core.enemys.getSpecialText(enemy)[0] +
- " " +
- core.enemys.getSpecialText(enemy)[1];
- core.setFontForMaxWidth(
- "ui",
- text,
- width,
- this._buildFont(15, true)
- );
- // Step 2: 计算总宽度
- var totalWidth = core.calWidth("ui", text);
- var leftWidth = core.calWidth(
- "ui",
- core.enemys.getSpecialText(enemy)[0]
- );
- var rightWidth = core.calWidth(
- "ui",
- core.enemys.getSpecialText(enemy)[1]
- );
- // Step 3: 绘制
- core.fillText(
- "ui",
- core.enemys.getSpecialText(enemy)[0],
- left + (width + leftWidth - totalWidth) / 2,
- top + 50,
- core.arrayToRGBA(
- (core.enemys.getSpecialColor(enemy) || [])[0] || "#FF6A6A"
- )
- );
- core.fillText(
- "ui",
- core.enemys.getSpecialText(enemy)[1],
- left + (width + totalWidth - rightWidth) / 2,
- top + 50,
- core.arrayToRGBA(
- (core.enemys.getSpecialColor(enemy) || [])[1] || "#FF6A6A"
- )
- );
- break;
- default:
- core.fillText(
- "ui",
- "多属性...",
- left + width / 2,
- top + 50,
- "#FF6A6A",
- this._buildFont(15, true),
- width
- );
- }
- }
- };
- ui.prototype._drawBookDetail_getInfo = function (index) {
- var floorId =
- core.floorIds[(core.status.event.ui || {}).index] ||
- core.status.floorId;
- // 清除浏览地图时的光环缓存
- if (floorId != core.status.floorId && core.status.checkBlock) {
- core.status.checkBlock.cache = {};
- }
- var enemys = core.enemys.getCurrentEnemys(floorId);
- console.log(123);
- if (enemys.length == 0) return [];
- index = core.clamp(index, 0, enemys.length - 1);
- var enemy = enemys[index];
- var texts = core.enemys.getSpecialHint(enemy);
- if (texts.length == 0) texts.push("该怪物无特殊属性。");
- if (enemy.description) texts.push(enemy.description + "\r");
- this._drawBookDetail_getTexts(enemy, floorId, texts);
- texts.push("");
- return [enemy, texts];
- };
- },
+ if (specials == null) return "";
+ for (var i = 0; i < specials.length; i++) {
+ if (special == specials[i][0])
+ return (
+ "\r[#FF6A6A]\\d" +
+ this._calSpecialContent(enemy, specials[i][1]) +
+ ":\\d\r[]" +
+ this._calSpecialContent(enemy, specials[i][2])
+ );
+ }
+ return "";
+ };
+ ui.prototype._drawBook_drawName = function (
+ index,
+ enemy,
+ top,
+ left,
+ width
+ ) {
+ // 绘制第零列(名称和特殊属性)
+ // 如果需要添加自己的比如怪物的称号等,也可以在这里绘制
+ core.setTextAlign("ui", "center");
+ if (core.enemys.getSpecialText(enemy).length == 0) {
+ core.fillText(
+ "ui",
+ enemy.name,
+ left + width / 2,
+ top + 35,
+ "#DDDDDD",
+ this._buildFont(17, true),
+ width
+ );
+ } else {
+ core.fillText(
+ "ui",
+ enemy.name,
+ left + width / 2,
+ top + 28,
+ "#DDDDDD",
+ this._buildFont(17, true),
+ width
+ );
+ switch (core.enemys.getSpecialText(enemy).length) {
+ case 1:
+ core.fillText(
+ "ui",
+ core.enemys.getSpecialText(enemy)[0],
+ left + width / 2,
+ top + 50,
+ core.arrayToRGBA(
+ (core.enemys.getSpecialColor(enemy) || [])[0] || "#FF6A6A"
+ ),
+ this._buildFont(15, true),
+ width
+ );
+ break;
+ case 2:
+ // Step 1: 计算字体
+ var text =
+ core.enemys.getSpecialText(enemy)[0] +
+ " " +
+ core.enemys.getSpecialText(enemy)[1];
+ core.setFontForMaxWidth(
+ "ui",
+ text,
+ width,
+ this._buildFont(15, true)
+ );
+ // Step 2: 计算总宽度
+ var totalWidth = core.calWidth("ui", text);
+ var leftWidth = core.calWidth(
+ "ui",
+ core.enemys.getSpecialText(enemy)[0]
+ );
+ var rightWidth = core.calWidth(
+ "ui",
+ core.enemys.getSpecialText(enemy)[1]
+ );
+ // Step 3: 绘制
+ core.fillText(
+ "ui",
+ core.enemys.getSpecialText(enemy)[0],
+ left + (width + leftWidth - totalWidth) / 2,
+ top + 50,
+ core.arrayToRGBA(
+ (core.enemys.getSpecialColor(enemy) || [])[0] || "#FF6A6A"
+ )
+ );
+ core.fillText(
+ "ui",
+ core.enemys.getSpecialText(enemy)[1],
+ left + (width + totalWidth - rightWidth) / 2,
+ top + 50,
+ core.arrayToRGBA(
+ (core.enemys.getSpecialColor(enemy) || [])[1] || "#FF6A6A"
+ )
+ );
+ break;
+ default:
+ core.fillText(
+ "ui",
+ "多属性...",
+ left + width / 2,
+ top + 50,
+ "#FF6A6A",
+ this._buildFont(15, true),
+ width
+ );
+ }
+ }
+ };
+ ui.prototype._drawBookDetail_getInfo = function (index) {
+ var floorId =
+ core.floorIds[(core.status.event.ui || {}).index] ||
+ core.status.floorId;
+ // 清除浏览地图时的光环缓存
+ if (floorId != core.status.floorId && core.status.checkBlock) {
+ core.status.checkBlock.cache = {};
+ }
+ var enemys = core.enemys.getCurrentEnemys(floorId);
+ console.log(123);
+ if (enemys.length == 0) return [];
+ index = core.clamp(index, 0, enemys.length - 1);
+ var enemy = enemys[index];
+ var texts = core.enemys.getSpecialHint(enemy);
+ if (texts.length == 0) texts.push("该怪物无特殊属性。");
+ if (enemy.description) texts.push(enemy.description + "\r");
+ this._drawBookDetail_getTexts(enemy, floorId, texts);
+ texts.push("");
+ return [enemy, texts];
+ };
+},
"一防减伤": function () {
- // 在此增加新插件
- ui.prototype._drawBook_drawRow3 = function (
- index,
- enemy,
- top,
- left,
- width,
- position
- ) {
- // 绘制第三行
- core.setTextAlign("ui", "left");
- var b13 = this._buildFont(13, true),
- f13 = this._buildFont(13, false);
- var col1 = left,
- col2 = left + (width * 9) / 25,
- col3 = left + (width * 17) / 25;
- core.fillText("ui", "临界", col1, position, "#DDDDDD", f13);
- core.fillText(
- "ui",
- core.formatBigNumber(enemy.critical || 0),
- col1 + 30,
- position,
- null,
- b13
- );
- core.fillText("ui", "减伤", col2, position, null, f13);
- core.fillText(
- "ui",
- core.formatBigNumber(enemy.criticalDamage || 0),
- col2 + 30,
- position,
- null,
- b13
- );
- //core.fillText('ui', '加防', col3, position, null, f13);
- core.fillText("ui", "1防", col3, position, null, f13);
- core.fillText(
- "ui",
- core.formatBigNumber(enemy.defDamage || 0),
- col3 + 30,
- position,
- null,
- b13
- );
- };
- ////// 1防减伤计算 //////
- enemys.prototype.getDefDamage = function (enemy, k, x, y, floorId) {
- if (typeof enemy == "string") enemy = core.material.enemys[enemy];
- k = k || 1;
- var nowDamage = this._getDamage(enemy, null, x, y, floorId);
- var nextDamage = this._getDamage(
- enemy,
- { def: core.status.hero.def + k },
- x,
- y,
- floorId
- );
- if (nowDamage == null || nextDamage == null) return "???";
- return nowDamage - nextDamage;
- };
- //防御倍数
- enemys.prototype._getCurrentEnemys_addEnemy_defDamage = function (
- enemy,
- x,
- y,
- floorId
- ) {
- var ratio = core.status.maps[floorId || core.status.floorId].ratio || 1;
- //第一行为按照ratio值计算减防,第二行为1防减伤
- //return this.getDefDamage(enemy, ratio, x, y, floorId);
- return this.getDefDamage(enemy, null, x, y, floorId);
- };
- },
+ // 在此增加新插件
+ //
+
+ ui.prototype._drawBook_drawRow3 = function (
+ index,
+ enemy,
+ top,
+ left,
+ width,
+ position
+ ) {
+ // 绘制第三行
+ core.setTextAlign("ui", "left");
+ var b13 = this._buildFont(13, true),
+ f13 = this._buildFont(13, false);
+ var col1 = left,
+ col2 = left + (width * 9) / 25,
+ col3 = left + (width * 17) / 25;
+ core.fillText('ui', '攻击临界', col1 - 50, position, '#DDDDDD', f13);
+ core.fillText('ui', `[${core.formatBigNumber(enemy.criticalAtk?.[0] || 0)},${core.formatBigNumber(enemy.criticalAtk?.[1] || 0)}]`, col1 + 10, position, null, b13);
+ core.fillText('ui', '法强临界', col2 - 33, position, null, f13);
+ core.fillText('ui', `[${core.formatBigNumber(enemy.criticalSpell[0] || 0)},${core.formatBigNumber(enemy.criticalSpell?.[1] || 0)}]`, col2 + 27, position, null, b13);
+ //core.fillText('ui', '加防', col3, position, null, f13);
+ core.fillText("ui", "1防", col3, position, null, f13);
+ core.fillText(
+ "ui",
+ core.formatBigNumber(enemy.defDamage || 0),
+ col3 + 30,
+ position,
+ null,
+ b13
+ );
+ };
+ ////// 1防减伤计算 //////
+ enemys.prototype.getDefDamage = function (enemy, k, x, y, floorId) {
+ if (typeof enemy == "string") enemy = core.material.enemys[enemy];
+ k = k || 1;
+ var nowDamage = this._getDamage(enemy, null, x, y, floorId);
+ var nextDamage = this._getDamage(
+ enemy, { def: core.status.hero.def + k },
+ x,
+ y,
+ floorId
+ );
+ if (nowDamage == null || nextDamage == null) return "???";
+ return nowDamage - nextDamage;
+ };
+ //防御倍数
+ enemys.prototype._getCurrentEnemys_addEnemy_defDamage = function (
+ enemy,
+ x,
+ y,
+ floorId
+ ) {
+ var ratio = core.status.maps[floorId || core.status.floorId].ratio || 1;
+ //第一行为按照ratio值计算减防,第二行为1防减伤
+ //return this.getDefDamage(enemy, ratio, x, y, floorId);
+ return this.getDefDamage(enemy, null, x, y, floorId);
+ };
+},
"新道具栏/装备栏": function () {
- // 在此增加新插件
+ // 这个插件有点离谱 个人觉得参数过多只会降低可读性,还不如硬编码
+
// 注:///// *** 裹起来的区域: 该区域内参数可以随意更改调整ui绘制 不会影响总体布局
// 请尽量修改该区域而不是其他区域 修改的时候最好可以对照现有ui修改
@@ -5194,7 +5621,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
///// ***
// 背景设置
- this.drawBoxBackground = function (ctx) {
+ function drawBoxBackground(ctx) {
core.setTextAlign(ctx, "left");
core.clearMap(ctx);
core.deleteCanvas("_selector");
@@ -5276,7 +5703,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
var arrow_width = 20;
var arrow_style = "white";
// 暂时只能是1 否则不太行 等待新样板(2.7.3)之后对drawArrow做优化
- var arrow_lineWidth = 1;
+ var arrow_lineWidth = 2;
// 右箭头
var rightArrow_right = leftbar_right - 10;
// 道具内栏顶部坐标 本质是通过该项 控制(道具栏顶部文字和箭头)与道具内栏顶部的间隔
@@ -5337,7 +5764,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
var bottomSpace = 8;
///// ***
- core.drawItemListbox_setPageBtn(
+ drawItemListbox_setPageBtn(
ctx,
pageBtn_left,
pageBtn_right,
@@ -5349,7 +5776,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
var page = info.page || 1;
var pageFontSize = pageBtn_radius * 2 - 4;
var pageFont = core.ui._buildFont(pageFontSize);
- core.setPageItems(page);
+ setPageItems(page);
var num = itemNum;
if (core.status.event.id == "equipbox") num -= 5;
var maxPage = info.maxPage;
@@ -5364,7 +5791,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
pageText_color,
pageFont
);
- core.addUIEventListener(
+ addUIEventListener(
start_x,
start_y,
leftbar_right - start_x,
@@ -5393,9 +5820,9 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
oneItemHeight: oneItemHeight,
},
};
- };
+ }
- this.drawItemListbox = function (ctx, obj) {
+ function drawItemListbox(ctx, obj) {
ctx = ctx || core.canvas.ui;
var itembar_x = obj.x,
itembar_y = obj.y,
@@ -5437,7 +5864,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
itembar_style
);
core.setAlpha(ctx, 1);
- var pageItems = core.setPageItems(page);
+ var pageItems = setPageItems(page);
var marginHeight = itembar_marginHeightRatio * oneItemHeight;
core.setTextBaseline(ctx, "middle");
var originColor = itemName_color;
@@ -5446,7 +5873,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
var item = pageItems[i];
// 设置某个的字体颜色的一个例子
// if (item.id == "xxx") itemName_color = "green";
- core.drawItemListbox_drawItem(
+ drawItemListbox_drawItem(
ctx,
item_x,
item_right,
@@ -5467,9 +5894,9 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
);
item_y += oneItemHeight;
}
- };
+ }
- this.drawToolboxRightbar = function (ctx, obj) {
+ function drawToolboxRightbar(ctx, obj) {
ctx = ctx || core.canvas.ui;
var info = core.status.thisUIEventInfo || {};
var page = info.page || 1,
@@ -5546,7 +5973,6 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
cls: "equips",
name: "未知装备",
text: "一无所有,又何尝不是一种装备",
- equipCls: "无",
equip: {
type: "装备",
},
@@ -5560,9 +5986,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
itemName = item.name,
itemText = item.text;
itemText = core.replaceText(itemText);
- if (itemText[0] == "," || itemText[0] == ",")
- itemText = itemText.substring(1);
-
+ if (!itemText) itemText = "该道具无描述。";
/* 一个根据道具id修改道具名字(右栏)的例子
* if (item.id == "xxx") itemNameColor = "red";
*/
@@ -5620,6 +6044,11 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
var compare2;
if (item.equipCls === "双手剑")
compare2 = core.compareEquipment(null, core.getEquip(1));
+ if (
+ item.equipCls === "盾牌" &&
+ core.material.items[core.getEquip(0)]?.equipCls === "双手剑"
+ )
+ compare2 = core.compareEquipment(null, core.getEquip(0));
if (info.select.action == "unload")
compare = core.compareEquipment(null, item.id);
// --- 变化值...
@@ -5636,10 +6065,27 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
(compare2?.percentage[name] || 0))) /
100
);
+ if (name === "mdef") {
+ var nowValue = core.getRealStatus(name);
+ var newValue = Math.round(
+ (core.getStatus(name) -
+ (compare.value[name] || 0) -
+ (compare2?.value[name] || 0)) *
+ (1 -
+ (1 - core.getBuff(name)) *
+ (compare.percentage[name] || 1) *
+ (compare2?.percentage[name] || 1))
+ );
+ }
if (nowValue == newValue) continue;
var color = newValue > nowValue ? "#00FF00" : "#FF0000";
nowValue = core.formatBigNumber(nowValue);
newValue = core.formatBigNumber(newValue);
+
+ if (name === "mdef") {
+ nowValue += "%";
+ newValue += "%";
+ }
statusText +=
core.getStatusLabel(name) +
" " +
@@ -5689,9 +6135,9 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
///// ***
// 获取圆心位置
- var btn_x = btnRight - btnRadius - btnBorderWidth / 2,
- btn_y = btnBottom - btnRadius - btnBorderWidth / 2;
- core.drawToolbox_setExitBtn(
+ var btn_x = btnRight - btnRadius - btnBorderWidth / 2;
+ btn_y = btnBottom - btnRadius - btnBorderWidth / 2;
+ drawToolbox_setExitBtn(
ctx,
btn_x,
btn_y,
@@ -5703,14 +6149,16 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
///// *** 使用按钮设置
var useBtnHeight = btnRadius * 2;
// 这里不设置useBtnWidth而是根据各项数据自动得出width
- var useBtnRadius = useBtnHeight / 2;
+ var useBtnRadius = useBtnHeight / 4;
var useBtn_x = rightbar_x + 4,
useBtn_y = btnBottom - useBtnHeight;
var useBtnBorderStyle = "#fff";
var useBtnBorderWidth = btnBorderWidth;
+ const batchUseBtn_x = useBtn_x + 50; // 个人觉得,搞这么多参数还不如硬编码
+ const hideBtn_y = useBtn_y - useBtnHeight - 8;
///// ***
- core.drawToolbox_setUseBtn(
+ drawToolbox_setUseBtn(
ctx,
useBtn_x,
useBtn_y,
@@ -5719,9 +6167,36 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
useBtnBorderStyle,
useBtnBorderWidth
);
- };
+ if (core.status.event.id === "toolbox") {
+ drawToolbox_setBatchUseBtn(
+ ctx,
+ batchUseBtn_x,
+ useBtn_y,
+ useBtnRadius,
+ useBtnHeight,
+ useBtnBorderStyle,
+ useBtnBorderWidth
+ );
+ }
+ drawToolbox_setHideBtn(
+ ctx,
+ useBtn_x,
+ hideBtn_y,
+ useBtnRadius,
+ useBtnHeight,
+ useBtnBorderStyle,
+ useBtnBorderWidth
+ );
+ drawToolbox_setShowHideBtn(
+ ctx,
+ rightbar_x,
+ useBtn_y,
+ useBtnHeight,
+ useBtnBorderStyle
+ );
+ }
- this.drawEquipbox_drawOthers = function (ctx, obj) {
+ function drawEquipbox_drawOthers(ctx, obj) {
var info = core.status.thisUIEventInfo;
///// *** 装备格设置
@@ -5788,7 +6263,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
var borderStyle = selectBorder
? box_selectBorderStyle
: box_borderStyle;
- core.drawEquipbox_drawOne(
+ drawEquipbox_drawOne(
ctx,
name,
id,
@@ -5805,7 +6280,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
var todo = new Function(
"core.clickOneEquipbox('" + id + "'," + i + ")"
);
- core.addUIEventListener(
+ addUIEventListener(
box_x - box_borderWidth / 2,
box_y - box_borderWidth / 2,
oneBoxWidth,
@@ -5880,7 +6355,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
var borderStyle = selectBorder
? box_selectBorderStyle
: box_borderStyle;
- core.drawEquipbox_drawOne(
+ drawEquipbox_drawOne(
ctx,
name,
id,
@@ -5897,7 +6372,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
var todo = new Function(
"core.clickOneEquipbox('" + id + "'," + i + ")"
);
- core.addUIEventListener(
+ addUIEventListener(
box_x - box_borderWidth / 2,
box_y - box_borderWidth / 2,
oneBoxWidth,
@@ -5906,16 +6381,16 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
);
box_x += space_x + oneBoxWidth;
}
- };
+ }
this.drawToolbox = function (ctx) {
ctx = ctx || core.canvas.ui;
core.status.thisEventClickArea = [];
- var info = core.drawBoxBackground(ctx);
+ var info = drawBoxBackground(ctx);
info.itemNum = itemNum;
- core.drawItemListbox(ctx, info.obj);
- core.drawToolboxRightbar(ctx, info);
+ drawItemListbox(ctx, info.obj);
+ drawToolboxRightbar(ctx, info);
core.setTextBaseline(ctx, "alphabetic");
core.setTextAlign("left");
};
@@ -5924,18 +6399,18 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
this.drawEquipbox = function (ctx) {
ctx = ctx || core.canvas.ui;
core.status.thisEventClickArea = [];
- var info = core.drawBoxBackground(ctx);
+ var info = drawBoxBackground(ctx);
info.itemNum = itemNum - reduceItem;
info.obj.y += info.obj.oneItemHeight * reduceItem;
info.obj.height -= info.obj.oneItemHeight * reduceItem;
- core.drawItemListbox(ctx, info.obj);
- core.drawEquipbox_drawOthers(ctx, info);
- core.drawToolboxRightbar(ctx, info);
+ drawItemListbox(ctx, info.obj);
+ drawEquipbox_drawOthers(ctx, info);
+ drawToolboxRightbar(ctx, info);
core.setTextBaseline(ctx, "alphabetic");
core.setTextAlign("left");
};
- this.drawEquipbox_drawOne = function (
+ function drawEquipbox_drawOne(
ctx,
name,
id,
@@ -5972,11 +6447,14 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
var tx = (x + x + lineWidth / 2 + width) / 2,
ty = y + height + (lineWidth / 2) * 3 + space;
core.fillText(ctx, name, tx, ty, color, font);
+
+ core.setAlpha(ctx, 1);
+
core.setTextBaseline(ctx, "alphabetic");
core.setTextAlign("left");
- };
+ }
- this.drawItemListbox_drawItem = function (
+ function drawItemListbox_drawItem(
ctx,
left,
right,
@@ -6003,6 +6481,14 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
style,
core.ui._buildFont(fontSize)
);
+
+ const hideInfo = core.getFlag("hideInfo", {});
+ if (
+ item &&
+ (hideInfo.hasOwnProperty(id) ? hideInfo[id] : item.hideInToolbox)
+ )
+ core.setAlpha(ctx, 0.5);
+
if (name != "???")
core.drawIcon(
ctx,
@@ -6024,18 +6510,21 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
core.ui._buildFont(fontSize),
maxWidth
);
- var todo = new Function("core.clickItemFunc('" + id + "');");
- core.addUIEventListener(left, top, right - left, height, todo);
- };
+ core.setAlpha(ctx, 1);
- this.setPageItems = function (page) {
+ var todo = new Function("core.clickItemFunc('" + id + "');");
+ addUIEventListener(left, top, right - left, height, todo);
+ }
+
+ function setPageItems(page) {
var num = itemNum;
if (core.status.event.id == "equipbox") num -= reduceItem;
var info = core.status.thisUIEventInfo;
if (!info) return;
page = page || info.page;
var items = core.getToolboxItems(
- core.status.event.id == "toolbox" ? "all" : "equips"
+ core.status.event.id == "toolbox" ? "all" : "equips",
+ core.getFlag("showHideItem", false)
);
info.allItems = items;
var maxPage = Math.ceil(items.length / num);
@@ -6046,12 +6535,12 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
if (items.length == 0 && pageItems.length == 0) info.index = null;
if (pageItems.length == 0 && info.page > 1) {
info.page = Math.max(1, info.page - 1);
- return core.setPageItems(info.page);
+ return setPageItems(info.page);
}
return pageItems;
- };
+ }
- this.drawToolbox_setExitBtn = function (ctx, x, y, r, style, lineWidth) {
+ function drawToolbox_setExitBtn(ctx, x, y, r, style, lineWidth) {
core.strokeCircle(ctx, x, y, r, style, lineWidth);
ctx.textAlign = "center";
ctx.textBaseline = "middle";
@@ -6071,10 +6560,10 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
var todo = function () {
core.closePanel();
};
- core.addUIEventListener(x - r, y - r, r * 2, r * 2, todo);
- };
+ addUIEventListener(x - r, y - r, r * 2, r * 2, todo);
+ }
- this.drawToolbox_setUseBtn = function (ctx, x, y, r, h, style, lineWidth) {
+ function drawToolbox_setUseBtn(ctx, x, y, r, h, style, lineWidth) {
core.setTextAlign(ctx, "left");
core.setTextBaseline(ctx, "top");
var fontSize = h - 4;
@@ -6089,10 +6578,182 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
var todo = function () {
core.useSelectItemInBox();
};
- core.addUIEventListener(x, y, w, h, todo);
+ addUIEventListener(x, y, w, h, todo);
+ }
+
+ function getSelectedItem() {
+ var info = core.status.thisUIEventInfo;
+ if (
+ !(
+ info &&
+ info.select.id &&
+ ["toolbox", "equipbox"].includes(core.status.event.id)
+ )
+ ) {
+ core.drawFailTip("发生了未知错误!");
+ return;
+ }
+ return info.select.id;
+ }
+
+ function batchUse(item, count) {
+ try {
+ const itemCount = core.itemCount(item);
+ if (count > itemCount) count = itemCount;
+ core.closePanel();
+ for (let i = 0; i < count; i++) {
+ if (core.canUseItem(item)) core.useItem(item);
+ else return;
+ }
+ } catch (e) {
+ console.error(e);
+ core.drawFailTip("批量使用时出现未知错误!");
+ }
+ }
+
+ function drawToolbox_setBatchUseBtn(ctx, x, y, r, h, style, lineWidth) {
+ try {
+ const selectedItem = getSelectedItem();
+ let canBatchUse = eval(core.material.items[selectedItem]?.canBatchUse);
+ if (!canBatchUse) return;
+ } catch (error) {
+ console.error(error);
+ return;
+ }
+ core.setTextAlign(ctx, "left");
+ core.setTextBaseline(ctx, "top");
+ var fontSize = h - 4;
+ var font = core.ui._buildFont(fontSize);
+ var text = "批量使用";
+ var w = core.calWidth(ctx, text, font) + 2 * r + lineWidth / 2;
+
+ core.strokeRoundRect(ctx, x, y, w, h, r, style, lineWidth);
+ core.fillText(ctx, text, x + r, y + lineWidth / 2 + 2, style, font);
+
+ var todo = function () {
+ core.utils.myprompt("输入要使用该物品的次数(0~99)。", null, (value) => {
+ value = parseInt(value);
+ const id = getSelectedItem();
+
+ if (Number.isNaN(value) || value < 0 || value > 99) {
+ core.drawFailTip("输入不合法!");
+ return;
+ }
+ if (!core.canUseItem(id)) {
+ core.drawFailTip("当前无法使用该道具!");
+ return;
+ }
+ core.closePanel();
+ batchUse(id, value);
+ });
+ };
+ addUIEventListener(x, y, w, h, todo);
+ }
+
+ function drawToolbox_setHideBtn(ctx, x, y, r, h, style, lineWidth) {
+ core.setTextAlign(ctx, "left");
+ core.setTextBaseline(ctx, "top");
+ var fontSize = h - 4;
+ var font = core.ui._buildFont(fontSize);
+ var text = "显示/隐藏";
+ var w = core.calWidth(ctx, text, font) + 2 * r + lineWidth / 2;
+
+ core.strokeRoundRect(ctx, x, y, w, h, r, style, lineWidth);
+ core.fillText(ctx, text, x + r, y + lineWidth / 2 + 2, style, font);
+
+ var todo = function () {
+ //debugger;
+ var id = getSelectedItem();
+ let hideInfo = core.getFlag("hideInfo", {});
+ console.log(id);
+ if (hideInfo.hasOwnProperty(id)) {
+ hideInfo[id] = !hideInfo[id];
+ core.setFlag("hideInfo", hideInfo);
+ } else {
+ hideInfo[id] = !core.material.items[id].hideInToolbox;
+ core.setFlag("hideInfo", hideInfo);
+ }
+ if (core.status.event.id === "toolbox") core.plugin.drawToolbox();
+ else if (core.status.event.id === "equipbox")
+ core.plugin.drawEquipbox();
+ };
+ addUIEventListener(x, y, w, h, todo);
+ }
+
+ ui.prototype.getToolboxItems = function (cls, showHide) {
+ let list = Object.keys(core.status.hero.items[cls] || {});
+ if (cls === "all") {
+ for (let name in core.status.hero.items) {
+ if (name == "equips") continue;
+ list = list.concat(Object.keys(core.status.hero.items[name]));
+ }
+ if (!showHide)
+ list = list.filter(function (id2) {
+ const hideInfo = core.getFlag("hideInfo", {});
+ if (hideInfo.hasOwnProperty(id2)) return !hideInfo[id2];
+ else return !core.material.items[id2].hideInToolbox;
+ });
+ list = list.sort();
+ return list;
+ }
+ if (cls === "equips") {
+ if (!showHide)
+ list = list.filter(function (id2) {
+ const hideInfo = core.getFlag("hideInfo", {});
+ if (hideInfo.hasOwnProperty(id2)) return !hideInfo[id2];
+ else return !core.material.items[id2].hideInToolbox;
+ });
+
+ list = list.sort();
+ return list;
+ }
+ if (this.uidata.getToolboxItems) {
+ return this.uidata.getToolboxItems(cls, showHide);
+ }
+ if (!showHide)
+ list = list.filter(function (id2) {
+ return !core.material.items[id2].hideInToolbox;
+ });
+ list = list.sort();
+ return list;
};
- this.drawItemListbox_setPageBtn = function (
+ function drawToolbox_setShowHideBtn(ctx, x, y, h, style) {
+ core.setTextAlign(ctx, "left");
+ core.setTextBaseline(ctx, "top");
+ var fontSize = h - 6;
+ var font = core.ui._buildFont(fontSize);
+ var text = "显示隐藏";
+ var w = core.calWidth(ctx, text, font);
+ h += 4;
+ const squareSize = h - 6;
+
+ x -= w + squareSize + 26;
+
+ const border = 2;
+ core.fillRect(ctx, x, y, squareSize, squareSize, " #F5F5F5");
+ if (core.hasFlag("showHideItem")) {
+ core.fillRect(
+ ctx,
+ x + border,
+ y + border,
+ squareSize - 2 * border,
+ squareSize - 2 * border,
+ "lime"
+ );
+ }
+ core.fillText(ctx, text, x + squareSize + 2, y + 4, style, font);
+
+ var todo = function () {
+ core.setFlag("showHideItem", !core.getFlag("showHideItem", false));
+ if (core.status.event.id === "toolbox") core.plugin.drawToolbox();
+ else if (core.status.event.id === "equipbox")
+ core.plugin.drawEquipbox();
+ };
+ addUIEventListener(x, y, w, h, todo);
+ }
+
+ function drawItemListbox_setPageBtn(
ctx,
left,
right,
@@ -6119,7 +6780,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
var todo = function () {
core.addItemListboxPage(-1);
};
- core.addUIEventListener(x - r - 2, y - r - 2, r * 2 + 4, r * 2 + 4, todo);
+ addUIEventListener(x - r - 2, y - r - 2, r * 2 + 4, r * 2 + 4, todo);
x = right - offset;
core.fillPolygon(
@@ -6135,8 +6796,8 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
var todo = function () {
core.addItemListboxPage(1);
};
- core.addUIEventListener(x - r - 2, y - r - 2, r * 2 + 4, r * 2 + 4, todo);
- };
+ addUIEventListener(x - r - 2, y - r - 2, r * 2 + 4, r * 2 + 4, todo);
+ }
this.clickItemFunc = function (id) {
var info = core.status.thisUIEventInfo;
@@ -6145,7 +6806,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
info.select = {};
info.select.id = id;
core.setIndexAndSelect("index");
- core.refreshBox();
+ refreshBox();
};
this.clickOneEquipbox = function (id, type) {
@@ -6159,31 +6820,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
type: type,
action: "unload",
};
- return core.refreshBox();
- };
-
- core.ui.getToolboxItems = function (cls) {
- var list = Object.keys(core.status.hero.items[cls] || {});
- if (cls == "all") {
- for (var name in core.status.hero.items) {
- if (name == "equips") continue;
- list = list.concat(Object.keys(core.status.hero.items[name]));
- }
- return list
- .filter(function (id) {
- return !core.material.items[id].hideInToolbox;
- })
- .sort();
- }
-
- if (this.uidata.getToolboxItems) {
- return this.uidata.getToolboxItems(cls);
- }
- return list
- .filter(function (id) {
- return !core.material.items[id].hideInToolbox;
- })
- .sort();
+ return refreshBox();
};
this.useSelectItemInBox = function () {
@@ -6210,6 +6847,14 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
core.status.route.push("unEquip:" + 1);
});
}
+ if (
+ equipCls0 === "双手剑" &&
+ !(equipClsid === "饰品" || equipClsid === "护具")
+ ) {
+ core.unloadEquip(0, function () {
+ core.status.route.push("unEquip:" + 0);
+ });
+ }
core.loadEquip(id, function () {
core.status.route.push("equip:" + id);
info.select.type = type;
@@ -6221,7 +6866,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
core.unloadEquip(type, function () {
core.status.route.push("unEquip:" + type);
info.select.type = type;
- //info.select.action = 'load'
+ info.select.action = "load";
core.setIndexAndSelect("select");
core.drawEquipbox();
});
@@ -6229,28 +6874,18 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
}
core.updateStatusBar();
};
+
this.setIndexAndSelect = function (toChange) {
var info = core.status.thisUIEventInfo;
if (!info) return;
- core.setPageItems(info.page);
+ setPageItems(info.page);
var index = info.index || 1;
var items = info.pageItems;
- if (info.select.type != null) {
- var type = info.select.type;
- id = core.getEquip(type);
- info.index = null;
- info.select = {
- id: id,
- action: "unload",
- type: type,
- };
- return;
- } else {
- info.select.action = null;
- info.select.type = null;
- if (toChange == "index") info.index = items.indexOf(info.select.id) + 1;
- info.select.id = items[info.index - 1];
- }
+
+ info.select.action = null;
+ info.select.type = null;
+ if (toChange == "index") info.index = items.indexOf(info.select.id) + 1;
+ info.select.id = items[info.index - 1];
};
this.addItemListboxPage = function (num) {
@@ -6262,9 +6897,9 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
if (info.page <= 0) info.page = maxPage;
if (info.page > maxPage) info.page = 1;
info.index = 1;
- core.setPageItems(info.page);
+ setPageItems(info.page);
core.setIndexAndSelect("select");
- core.refreshBox();
+ refreshBox();
};
this.addItemListboxIndex = function (num) {
@@ -6276,7 +6911,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
if (info.index <= 0) info.index = 1;
if (info.index > maxItem) info.index = maxItem;
core.setIndexAndSelect("select");
- core.refreshBox();
+ refreshBox();
};
this.addEquipboxType = function (num) {
@@ -6293,7 +6928,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
var m = Math.abs(info.select.type);
if (info.select.type < 0) info.select.type = max - m;
core.setIndexAndSelect("select");
- core.refreshBox();
+ refreshBox();
return;
}
};
@@ -6357,7 +6992,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
if (info.index == 1) {
info.select.type = core.status.globalAttribute.equipName.length - 1;
core.setIndexAndSelect();
- return core.refreshBox();
+ return refreshBox();
}
if (info.index) return core.addItemListboxIndex(-1);
return core.addEquipboxType(-1 * info.equips);
@@ -6403,7 +7038,6 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
"inEventClickAction",
function (x, y, px, py) {
if (!core.status.thisEventClickArea) return false;
- // console.log(px + "," + py);
var info = core.status.thisEventClickArea;
for (var i = 0; i < info.length; i++) {
var obj = info[i];
@@ -6430,7 +7064,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
51
);
- this.addUIEventListener = function (x, y, width, height, todo) {
+ function addUIEventListener(x, y, width, height, todo) {
if (!core.status.thisEventClickArea) return;
var obj = {
x: x,
@@ -6440,7 +7074,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
todo: todo,
};
core.status.thisEventClickArea.push(obj);
- };
+ }
this.initThisEventInfo = function () {
core.status.thisUIEventInfo = {
@@ -6450,11 +7084,11 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
core.status.thisEventClickArea = [];
};
- this.refreshBox = function () {
+ function refreshBox() {
if (!core.status.event.id) return;
if (core.status.event.id == "toolbox") core.drawToolbox();
else core.drawEquipbox();
- };
+ }
core.ui.closePanel = function () {
if (core.status.hero && core.status.hero.flags) {
@@ -6543,13 +7177,16 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
core.status.event.id = "toolbox";
core.initThisEventInfo();
var info = core.status.thisUIEventInfo;
- var items = core.getToolboxItems("all");
- core.setPageItems(1);
+ var items = core.getToolboxItems(
+ "all",
+ core.getFlag("showHideItem", false)
+ );
+ setPageItems(1);
var index = items.indexOf(itemId) + 1;
info.page = Math.ceil(index / info.maxItem);
info.index = index % info.maxItem || info.maxItem;
core.setIndexAndSelect("select");
- core.setPageItems(info.page);
+ setPageItems(info.page);
core.drawToolbox();
setTimeout(function () {
core.ui.closePanel();
@@ -6561,29 +7198,46 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
core.control._replayAction_equip = function (action) {
if (action.indexOf("equip:") != 0) return false;
var itemId = action.substring(6);
- var items = core.getToolboxItems("equips");
+ var items = core.getToolboxItems(
+ "equips",
+ core.getFlag("showHideItem", false)
+ );
var index = items.indexOf(itemId) + 1;
- if (index < 1) return false;
+ if (index < 1) {
+ core.removeFlag("__doNotCheckAutoEvents__");
+ return false;
+ }
+
+ var cb = function () {
+ var next = core.status.replay.toReplay[0] || "";
+ if (!next.startsWith("equip:") && !next.startsWith("unEquip:")) {
+ core.removeFlag("__doNotCheckAutoEvents__");
+ core.checkAutoEvents();
+ }
+ core.replay();
+ };
+ core.setFlag("__doNotCheckAutoEvents__", true);
+
core.status.route.push(action);
if (
core.material.items[itemId].hideInReplay ||
core.status.replay.speed == 24
) {
- core.loadEquip(itemId, core.replay);
+ core.loadEquip(itemId, cb);
return true;
}
core.status.event.id = "equipbox";
core.initThisEventInfo();
var info = core.status.thisUIEventInfo;
- core.setPageItems(1);
+ setPageItems(1);
info.page = Math.ceil(index / info.maxItem);
info.index = index % info.maxItem || info.maxItem;
core.setIndexAndSelect("select");
- core.setPageItems(info.page);
+ setPageItems(info.page);
core.drawEquipbox();
setTimeout(function () {
core.ui.closePanel();
- core.loadEquip(itemId, core.replay);
+ core.loadEquip(itemId, cb);
}, core.control.__replay_getTimeout());
return true;
};
@@ -6591,26 +7245,39 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
core.control._replayAction_unEquip = function (action) {
if (action.indexOf("unEquip:") != 0) return false;
var equipType = parseInt(action.substring(8));
- if (!core.isset(equipType)) return false;
+ if (!core.isset(equipType)) {
+ core.removeFlag("__doNotCheckAutoEvents__");
+ return false;
+ }
+
+ var cb = function () {
+ var next = core.status.replay.toReplay[0] || "";
+ if (!next.startsWith("equip:") && !next.startsWith("unEquip:")) {
+ core.removeFlag("__doNotCheckAutoEvents__");
+ core.checkAutoEvents();
+ }
+ core.replay();
+ };
+ core.setFlag("__doNotCheckAutoEvents__", true);
+
core.status.route.push(action);
if (core.status.replay.speed == 24) {
- core.unloadEquip(equipType, core.replay);
+ core.unloadEquip(equipType, cb);
return true;
}
core.status.event.id = "equipbox";
core.initThisEventInfo();
var info = core.status.thisUIEventInfo;
- core.setPageItems(1);
+ setPageItems(1);
info.select.type = equipType;
core.setIndexAndSelect();
core.drawEquipbox();
setTimeout(function () {
core.ui.closePanel();
- core.unloadEquip(equipType, core.replay);
+ core.unloadEquip(equipType, cb);
}, core.control.__replay_getTimeout());
return true;
};
-
core.registerReplayAction("item", core.control._replayAction_item);
core.registerReplayAction("equip", core.control._replayAction_equip);
core.registerReplayAction("unEquip", core.control._replayAction_unEquip);
@@ -8317,7 +8984,42 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
return arr;
}
}
+ /**
+ * 图片叠加滤镜
+ * @param {img} image 需要叠加的图片,
+ * @param {color} style 需要叠加的颜色
+ */
+ function imagelighter(image, style) {
+ // 创建一个canvas元素
+ const canvas = document.createElement("canvas");
+ const ctx = canvas.getContext("2d");
+ // 设置canvas的尺寸与图片相同
+ canvas.width = image.width;
+ canvas.height = image.height;
+ ctx.drawImage(image, 0, 0);
+ // 创建一个临时canvas用于红色滤镜
+ const tempCanvas = document.createElement("canvas");
+ const tempCtx = tempCanvas.getContext("2d");
+ tempCanvas.width = image.width;
+ tempCanvas.height = image.height;
+
+ // 在临时canvas上绘制红色滤镜
+ tempCtx.fillStyle = style ?? "rgba(255, 0, 0, 0.5)"; // 半透明红色
+ tempCtx.fillRect(0, 0, tempCanvas.width, tempCanvas.height);
+ // 使用lighter混合模式叠加红色滤镜
+ ctx.globalCompositeOperation = "lighter";
+ ctx.drawImage(tempCanvas, 0, 0);
+ // 使用destination-in混合模式保留原始图片的透明度
+ ctx.globalCompositeOperation = "destination-in";
+ ctx.drawImage(image, 0, 0);
+
+ // 恢复默认混合模式
+ ctx.globalCompositeOperation = "source-over";
+
+ // 返回处理后的canvas
+ return canvas;
+ }
/**
* 获取一个方向的反方向
* @example backDir('up'); // 'down'
@@ -8671,6 +9373,35 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
yellowgreen: "#9acd32",
transparent: "#0000",
};
+ // 计算两个数的最大公约数
+ function gcdOfTwo(a, b) {
+ while (b !== 0) {
+ let temp = b;
+ b = a % b;
+ a = temp;
+ }
+ return a;
+ }
+
+ // 计算任意项整数的最大公约数
+ function gcd(...numbers) {
+ if (numbers.length < 2) {
+ throw new Error("至少需要两个数");
+ }
+ return numbers.reduce((a, b) => gcdOfTwo(a, b));
+ }
+ // 计算两个数的最小公倍数
+ function lcmOfTwo(a, b) {
+ return (a * b) / gcdOfTwo(a, b);
+ }
+
+ // 计算任意项整数的最小公倍数
+ function lcm(...numbers) {
+ if (numbers.length < 2) {
+ throw new Error("至少需要两个数");
+ }
+ return numbers.reduce((a, b) => lcmOfTwo(a, b));
+ }
if (has(core.plugin.utils)) {
throw new ReferenceError(
@@ -8678,6 +9409,11 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
);
}
core.plugin.utils = {
+ imagelighter,
+ gcdOfTwo,
+ lcmOfTwo,
+ gcd,
+ lcm,
has,
slide,
backDir,
@@ -14871,6 +15607,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
core.clearContinueAutomaticRoute();
core.status.replay.animate = true;
clearInterval(core.interval.onDownInterval);
+ delete core.animateFrame.tip;
core.interval.onDownInterval = "tmp";
this._changeFloor_beforeChange(info, block, callback);
@@ -14885,7 +15622,8 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
block &&
block?.event &&
!main.replayChecking &&
- !core.isReplaying()
+ !core.isReplaying() &&
+ !core.getFlag("__isFlying__", false)
) {
const dirEntries = allChangeEntries.find(
(v) => v[1] === block.event.id
@@ -15170,6 +15908,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
class cgText {
constructor() {
+ this.nobg = false;
//绘制需要的变量
this.image = "";
this.head = { name: "face_050445.webp", px: -300 };
@@ -15229,7 +15968,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
(!core.domStyle.isVertical && inRect(pos, backbox))
) {
core.clearMap(logctx);
- core.stopSound()
+ core.stopSound();
main.dom.logcanvas.style.display = "none";
this.log = false;
} else if (
@@ -15246,16 +15985,26 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
core.clearMap(logctx);
if (this.page < this.overpage) this.page++;
this.logdraw(this.page);
- } else if ((core.domStyle.isVertical && inRect(pos, soundboxVertical)) ||
- (!core.domStyle.isVertical && inRect(pos, soundbox))) {
+ } else if (
+ (core.domStyle.isVertical && inRect(pos, soundboxVertical)) ||
+ (!core.domStyle.isVertical && inRect(pos, soundbox))
+ ) {
if (core.domStyle.isVertical) {
- const sound = this.textList[(this.page - 1) * 6 + Math.min(Math.floor((px - 198) / 150), 5)][2]
- core.stopSound()
- core.playSound(sound)
+ const sound =
+ this.textList[
+ (this.page - 1) * 6 +
+ Math.min(Math.floor((px - 198) / 150), 5)
+ ][2];
+ core.stopSound();
+ core.playSound(sound);
} else {
- const sound = this.textList[(this.page - 1) * 6 + Math.min(Math.floor((py - 150) / 150), 5)][2]
- core.stopSound()
- core.playSound(sound)
+ const sound =
+ this.textList[
+ (this.page - 1) * 6 +
+ Math.min(Math.floor((py - 150) / 150), 5)
+ ][2];
+ core.stopSound();
+ core.playSound(sound);
}
}
} else {
@@ -15568,7 +16317,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
const name = this.textList[i][0] ?
"【" + this.textList[i][0] + "】" :
"";
- const sound = this.textList[i][2]
+ const sound = this.textList[i][2];
if (name) {
core.fillBoldText1(
logctx,
@@ -15581,7 +16330,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
core.ui._buildFont(42, true)
);
}
- if (sound) core.drawImage(logctx, "sound.webp", 550, posy + 30)
+ if (sound) core.drawImage(logctx, "sound.webp", 550, posy + 30);
if (text.length < 30) {
core.fillBoldText1(
logctx,
@@ -15703,14 +16452,15 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
ctx.canvas.width = 2028;
ctx.canvas.height = 1248;
}
-
- if (img) {
- //绘制背景
- if (this.memory) ctx.filter = "sepia(50%)";
- ctx.drawImage(img, 0, 0, 2028, 1248);
- ctx.filter = "none";
- } else {
- core.fillRect(ctx, 0, 0, 2028, 1248);
+ if (this.nobg) {} else {
+ if (img) {
+ //绘制背景
+ if (this.memory) ctx.filter = "sepia(50%)";
+ ctx.drawImage(img, 0, 0, 2028, 1248);
+ ctx.filter = "none";
+ } else {
+ core.fillRect(ctx, 0, 0, 2028, 1248);
+ }
}
this.bodyList.forEach((v) => {
//绘制立绘
@@ -16409,53 +17159,2245 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
};
},
"回合制boss战": function () {
- // 在此增加新插件
- const boss = document.createElement("canvas"); //boss战画布设置
- boss.style.position = "absolute";
- boss.style.zIndex = 300;
- boss.style.display = "none";
- boss.id = "boss";
- main.dom.gameGroup.insertAdjacentElement("afterend", boss);
- boss.style.top = "50%";
- boss.style.left = "50%";
- boss.style.transform = "translate(-50%,-50%)";
- const ctx = boss.getContext("2d");
- main.dom.boss = boss;
- boss.onclick = function (e) {
- try {
- e.preventDefault();
- if (core.isPlaying()) return false;
- const left = core.dom.gameGroup.offsetLeft;
- const top = core.dom.gameGroup.offsetTop;
- const px = Math.floor((e.clientX - left) / core.domStyle.scale),
- py = Math.floor((e.clientY - top) / core.domStyle.scale);
- core.ui.boss.onclick(px * 3, py * 3);
- } catch (ee) {
- main.log(ee);
- }
- };
- class boss1 {
- constructor() {
- this.bg = "";
- }
- cavans() {
- if (core.domStyle.isVertical) {
- ctx.canvas.width = 1248;
- ctx.canvas.height = 2028;
+ // 在此增加新插件
+ const boss = document.createElement("canvas"); //boss战画布设置
+ boss.style.position = "absolute";
+ boss.style.zIndex = 310;
+ boss.style.display = "none";
+ boss.id = "boss";
+ main.dom.gameGroup.insertAdjacentElement("afterend", boss);
+ boss.style.top = "50%";
+ boss.style.left = "50%";
+ boss.style.transform = "translate(-50%,-50%)";
+ const ctx = boss.getContext("2d");
+ main.dom.boss = boss;
+ const boss1 = document.createElement("canvas"); //boss战画布设置
+ boss1.style.position = "absolute";
+ boss1.style.zIndex = 300;
+ boss1.style.display = "none";
+ boss1.id = "boss1";
+ main.dom.gameGroup.insertAdjacentElement("afterend", boss1);
+ boss1.style.top = "50%";
+ boss1.style.left = "50%";
+ boss1.style.transform = "translate(-50%,-50%)";
+ const ctx1 = boss1.getContext("2d");
+ main.dom.boss1 = boss1;
+ const boss2 = document.createElement("canvas"); //boss战画布设置
+ boss2.style.position = "absolute";
+ boss2.style.zIndex = 301;
+ boss2.style.display = "none";
+ boss2.id = "boss2";
+ main.dom.gameGroup.insertAdjacentElement("afterend", boss2);
+ boss2.style.top = "50%";
+ boss2.style.left = "50%";
+ boss2.style.transform = "translate(-50%,-50%)";
+ main.dom.boss2 = boss2;
+ const ctx2 = boss2.getContext("2d");
+ const boss3 = document.createElement("canvas"); //boss战画布设置
+ boss3.style.position = "absolute";
+ boss3.style.zIndex = 302;
+ boss3.style.display = "none";
+ boss3.id = "boss3";
+ main.dom.gameGroup.insertAdjacentElement("afterend", boss3);
+ boss3.style.top = "50%";
+ boss3.style.left = "50%";
+ boss3.style.transform = "translate(-50%,-50%)";
+ main.dom.boss3 = boss3;
+ const ctx3 = boss3.getContext("2d");
+ const boss4 = document.createElement("canvas"); //boss战画布设置
+ boss4.style.position = "absolute";
+ boss4.style.zIndex = 303;
+ boss4.style.display = "none";
+ boss4.id = "boss4";
+ main.dom.gameGroup.insertAdjacentElement("afterend", boss4);
+ boss4.style.top = "50%";
+ boss4.style.left = "50%";
+ boss4.style.transform = "translate(-50%,-50%)";
+ const ctx4 = boss4.getContext("2d");
+ main.dom.boss4 = boss4;
+ const boss5 = document.createElement("canvas"); //boss战画布设置
+ boss5.style.position = "absolute";
+ boss5.style.zIndex = 304;
+ boss5.style.display = "none";
+ boss5.id = "boss5";
+ main.dom.gameGroup.insertAdjacentElement("afterend", boss5);
+ boss5.style.top = "50%";
+ boss5.style.left = "50%";
+ boss5.style.transform = "translate(-50%,-50%)";
+ const ctx5 = boss5.getContext("2d");
+ main.dom.boss5 = boss5;
- core.setTextAlign(ctx, "center");
- } else {
- ctx.canvas.width = 2028;
- ctx.canvas.height = 1248;
+ const boss6 = document.createElement("canvas"); //boss战画布设置
+ boss6.style.position = "absolute";
+ boss6.style.zIndex = 305;
+ boss6.style.display = "none";
+ boss6.id = "boss6";
+ main.dom.gameGroup.insertAdjacentElement("afterend", boss6);
+ boss6.style.top = "50%";
+ boss6.style.left = "50%";
+ boss6.style.transform = "translate(-50%,-50%)";
+ const ctx6 = boss6.getContext("2d");
+ main.dom.boss6 = boss6;
+ const boss7 = document.createElement("canvas"); //boss战画布设置
+ boss7.style.position = "absolute";
+ boss7.style.zIndex = 306;
+ boss7.style.display = "none";
+ boss7.id = "boss7";
+ main.dom.gameGroup.insertAdjacentElement("afterend", boss7);
+ boss7.style.top = "50%";
+ boss7.style.left = "50%";
+ boss7.style.transform = "translate(-50%,-50%)";
+ const ctx7 = boss7.getContext("2d");
+ main.dom.boss7 = boss7;
+ const boss8 = document.createElement("canvas"); //boss战画布设置
+ boss8.style.position = "absolute";
+ boss8.style.zIndex = 307;
+ boss8.style.display = "none";
+ boss8.id = "boss8";
+ main.dom.gameGroup.insertAdjacentElement("afterend", boss8);
+ boss8.style.top = "50%";
+ boss8.style.left = "50%";
+ boss8.style.transform = "translate(-50%,-50%)";
+ const ctx8 = boss8.getContext("2d");
+ main.dom.boss8 = boss8;
+ const { imagelighter } = core.plugin.utils;
- core.setTextAlign(ctx, "center");
- }
- }
- start() {}
- onclick(px, py) {}
- }
- core.ui.boss = new boss1();
- },
+ function getClick() {
+ return new Promise((resolve) => {
+ function handleBossClick(e) {
+ try {
+ e.preventDefault();
+ if (!core.isPlaying()) return false;
+
+ const left = core.dom.gameGroup.offsetLeft;
+ const top = core.dom.gameGroup.offsetTop;
+ const px = Math.floor((e.clientX - left) / core.domStyle.scale),
+ py = Math.floor((e.clientY - top) / core.domStyle.scale);
+
+ let x, y;
+ if (core.domStyle.isVertical) {
+ x = py * 3;
+ y = 1248 - px * 3;
+ } else {
+ x = px * 3;
+ y = py * 3;
+ }
+ core.ui.boss.click(x, y);
+
+ if (
+ x > 1050 &&
+ x < 1450 &&
+ y > 250 &&
+ y < 390 &&
+ !core.ui.boss.show &&
+ core.ui.boss.hasEnemy()
+ ) {
+ // 移除事件监听器
+ boss.removeEventListener("click", handleBossClick);
+ resolve("普通攻击"); //有小怪时点击普通攻击
+ return; // 退出函数
+ }
+ if (
+ x > 850 &&
+ x < 1250 &&
+ y > 250 &&
+ y < 390 &&
+ !core.ui.boss.show &&
+ !core.ui.boss.hasEnemy()
+ ) {
+ // 移除事件监听器
+ boss.removeEventListener("click", handleBossClick);
+ resolve("普通攻击"); //无小怪时点击普通攻击
+ return; // 退出函数
+ }
+ } catch (ee) {
+ main.log(ee);
+ }
+ }
+ boss.addEventListener("click", handleBossClick);
+ });
+ }
+ const { sleep } = core.plugin.utils;
+
+ class Boss {
+ constructor() {
+ //绘制需要的变量
+ this.enemyfarme = 0;
+ this.bg = "bg_3512.webp";
+ this.heroImage = "tati_310101.webp";
+ this.hero = {
+ id: "hero",
+ name: "凯伊姆",
+ hp: 1000,
+ atk: 150,
+ def: 100,
+ spell: 100,
+ speed: 10,
+ mdef: 10,
+ };
+ this.boss = {
+ name: "菲奥奈",
+ id: "angel",
+ image: "tati_050143.webp",
+ hp: 1000,
+ atk: 200,
+ def: 100,
+ speed: 10,
+ mdef: 10,
+ skill: ["普通攻击", "重斩"],
+ index: 0,
+ };
+ this.enemy = [];
+ this.enemy = [{
+ name: "小蝙蝠",
+ id: "bat",
+ image: "tati_020125a.webp",
+ hp: 1000,
+ atk: 100,
+ def: 20,
+ speed: 10,
+ mdef: 10,
+ skill: ["普通攻击", "重斩"],
+ index: 0,
+ },
+ {
+ name: "红蝙蝠",
+ id: "redBat",
+ image: "tati_050301.webp",
+ hp: 1000,
+ atk: 100,
+ def: 120,
+ speed: 10,
+ mdef: 10,
+ skill: ["普通攻击", "重斩"],
+ index: 0,
+ },
+ {
+ name: "大蝙蝠",
+ id: "bigBat",
+ image: "tati_120101.webp",
+ hp: 1000,
+ atk: 100,
+ def: 100,
+ speed: 10,
+ mdef: 10,
+ skill: ["普通攻击", "重斩"],
+ index: 0,
+ },
+ {
+ name: "绿色史莱姆",
+ id: "greenSlime",
+ image: "tati_340115.webp",
+ hp: 1000,
+ atk: 100,
+ def: 100,
+ speed: 10,
+ mdef: 10,
+ skill: ["普通攻击", "重斩"],
+ index: 0,
+ },
+ {
+ name: "红色史莱姆",
+ id: "redSlime",
+ image: "tati_430101.webp",
+ hp: 1000,
+ atk: 100,
+ def: 100,
+ speed: 10,
+ mdef: 10,
+ skill: ["普通攻击", "重斩"],
+ index: 0,
+ },
+ {
+ name: "黑色史莱姆",
+ id: "blackSlime",
+ image: "tati_440101.webp",
+ hp: 1000,
+ atk: 100,
+ def: 100,
+ speed: 10,
+ mdef: 10,
+ skill: ["普通攻击", "重斩"],
+ index: 0,
+ },
+ ];
+ this.selection = "boss";
+ this.herobuff = [
+ { id: "sword1", count: 1 },
+ { id: "fly", count: 30 },
+ ];
+ this.bossbuff = [
+ { id: "fly", count: 2 },
+ { id: "book", count: 12, hp: 100 },
+ ];
+ this.enemybuff = [
+ [],
+ [],
+ [],
+ [],
+ [],
+ []
+ ];
+ this.skills = {
+ //技能列表,便于调用(可通过this.skills[name]调用)
+ 菲奥奈: ["普通攻击", "重斩"],
+ };
+ this.skillShow = {
+ //技能说明
+ 普通攻击: "常规攻击形式,伤害为自身攻击-对手防御",
+ };
+
+ this.turn = 0;
+ this.playingAnimate = new Set();
+ this.playerTurn = false;
+ this.show = false;
+ }
+ buffshow(a) {
+ //buff说明(均未实装,之后改为实际需要的buff)
+ let text = "";
+ switch (a.id) {
+ case "sword1":
+ text = `\r[rgb(30,66,30)]剑气:\r造成伤害提升\r[red]${
+ 10 * a.count
+ }%\r`;
+ break;
+ case "fly":
+ text = `羽翼守护:接下来\r[gold]${a.count}回合\r不受速度差值影响`;
+ break;
+ case "book":
+ text = `恢复之书:接下来\r[#000033]${a.count}回合\r,每回合行动时回复\r[green]${a.hp}\r点生命`;
+ break;
+ }
+ return text;
+ }
+ shake(hero) {
+ let time = 0,
+ farme = 0;
+
+ const xlist = [Math.random() * 40 + 10, Math.random() * -40 - 10, 0];
+ return new Promise((resolve) => {
+ core.registerAnimationFrame("shake", true, (temptime) => {
+ if (temptime - time > 1000 / 60) {
+ time = temptime;
+
+ const x = xlist[Math.floor(farme / 5) % 3];
+ if (hero) {
+ const img = imagelighter(
+ core.material.images.images[this.heroImage]
+ );
+ core.clearMap(ctx2);
+ if (core.domStyle.isVertical) {
+ ctx2.canvas.width = 1248;
+ ctx2.canvas.height = 2028;
+ ctx2.save(); //保存设置
+ ctx2.translate(1248, 0); //重新定位右上角为基准
+ ctx2.rotate(Math.PI / 2); //旋转90度
+ } else {
+ ctx2.canvas.width = 2028;
+ ctx2.canvas.height = 1248;
+ }
+
+ core.drawImage(ctx2, img, x, 168, 750, 1080);
+ ctx2.restore();
+ } else {
+ core.clearMap(ctx3);
+ if (core.domStyle.isVertical) {
+ ctx3.canvas.width = 1248;
+ ctx3.canvas.height = 2028;
+ ctx3.save(); //保存设置
+ ctx3.translate(1248, 0); //重新定位右上角为基准
+ ctx3.rotate(Math.PI / 2); //旋转90度
+ } else {
+ ctx3.canvas.width = 2028;
+ ctx3.canvas.height = 1248;
+ }
+ if (this.selection === "boss" || this.selection === "") {
+ const img = imagelighter(
+ core.material.images.images[this.boss.image]
+ );
+ core.drawImage(ctx3, img, 1400 + x, 168, 750, 1080);
+ } else {
+ const img = imagelighter(
+ core.material.images.images[
+ this.enemy[this.selection].image
+ ]
+ );
+ core.drawImage(ctx3, img, 1400 + x, 168, 750, 1080);
+ }
+
+ ctx3.restore();
+ }
+ farme++;
+ if (farme > 30) {
+ core.unregisterAnimationFrame("shake");
+
+ this.drawhero();
+ this.drawboss();
+ resolve();
+ }
+ }
+ });
+ });
+ }
+ popDamage(damage, onhero) {
+ if (core.domStyle.isVertical) {
+ ctx.canvas.width = 1248;
+ ctx.canvas.height = 2028;
+ ctx.save(); //保存设置
+ ctx.translate(1248, 0); //重新定位右上角为基准
+ ctx.rotate(Math.PI / 2); //旋转90度
+ } else {
+ ctx.canvas.width = 2028;
+ ctx.canvas.height = 1248;
+ }
+ let color = "#FFFFFF";
+ if (typeof damage === "number") {
+ color = damage < 0 ? "#22FF44" : "lightcoral";
+ }
+ let farme = 0,
+ time = 0;
+ let posx = onhero ? 300 : 1800;
+ const speed = 9;
+ return new Promise((resolve) => {
+ core.registerAnimationFrame("popDamageonboss", true, (temptime) => {
+ if (temptime - time > 1000 / 60) {
+ time = temptime;
+ core.clearMap(ctx);
+ core.setTextAlign(ctx, "center");
+ core.fillBoldText1(
+ ctx,
+ damage,
+ posx,
+ 800 - speed * farme,
+ color,
+ "#000000",
+ 6,
+ "bold 72px Arial"
+ );
+ farme++;
+ ctx2.restore();
+ if (farme > 30) {
+ core.unregisterAnimationFrame("popDamageonboss");
+
+ core.clearMap(ctx);
+ resolve();
+ }
+ }
+ });
+ });
+ }
+ async skill(sk, a, b) {
+ //a为发起方属性,sk为技能名
+ let damage = 0;
+ switch (
+ sk //所有技能效果及动画写在这里
+ ) {
+ case "普通攻击":
+ damage = Math.max(a.atk - b.def, 0); //基础伤害
+ damage = Math.floor((damage * a.speed) / b.speed); //速度比值伤害加成
+ b.hp -= damage; //承受伤害
+ if (b.id === "hero")
+ core.status.hero.statistics.battleDamage += damage; //数据统计记录伤害
+ if (damage === 0) damage = "抵抗";
+
+ switch (
+ a.id //根据id选取不同的特效
+ ) {
+ case "hero":
+ this.popDamage(damage, false);
+ if (damage > 0 && typeof damage !== "string") this.shake(false);
+ await this.playanimate("sword", 1800, 800);
+ break;
+ case "angel":
+ this.popDamage(damage, true);
+ if (damage > 0 && typeof damage !== "string") this.shake(true);
+ await this.playanimate("sword", 350, 800); //播放动画sword
+
+ break;
+ case "bat":
+ this.popDamage(damage, true);
+ if (damage > 0 && typeof damage !== "string") this.shake(true);
+ await this.playanimate("sword", 350, 800); //播放动画sword
+
+ break;
+ case "redBat":
+ this.popDamage(damage, true);
+ if (damage > 0 && typeof damage !== "string") this.shake(true);
+ await this.playanimate("Fire01", 350, 800); //播放动画Fire01
+ break;
+ case "bigBat":
+ this.popDamage(damage, true);
+ if (damage > 0 && typeof damage !== "string") this.shake(true);
+ await this.playanimate("Fire02", 350, 800); //播放动画Fire02
+ break;
+ case "greenSlime":
+ this.popDamage(damage, true);
+ if (damage > 0 && typeof damage !== "string") this.shake(true);
+ await this.playanimate("005-Attack03", 350, 800); //播放动画005-Attack03
+ break;
+ case "redSlime":
+ this.popDamage(damage, true);
+ if (damage > 0 && typeof damage !== "string") this.shake(true);
+ await this.playanimate("012-Heal01", 350, 800); //播放动画012-Heal01
+ break;
+ case "blackSlime":
+ this.popDamage(damage, true);
+ if (damage > 0 && typeof damage !== "string") this.shake(true);
+ await this.playanimate("sword", 350, 800); //播放动画sword
+ break;
+ }
+ break; //下面写其余技能
+ }
+ await sleep(500); //等待1000ms
+ }
+
+ click(px, py) {
+ //点击效果
+ const makeBox = ([x, y], [w, h]) => {
+ return [
+ [x, y],
+ [x + w, y + h],
+ ];
+ };
+ const inRect = ([x, y], [
+ [sx, sy],
+ [dx, dy]
+ ]) => {
+ return sx <= x && x <= dx && sy <= y && y <= dy;
+ };
+ const pos = [px, py];
+ if (main.replayChecking || core.isReplaying()) return;
+ const enemyStatusBox = makeBox([50, 50], [1900, 200]),
+ heroStatusBox = makeBox([600, 920], [900, 300]),
+ bossBox = makeBox([800, 300], [100, 150]),
+ enemyBox = makeBox([700, 500], [300, 300]),
+ imageBox = makeBox([1500, 250], [550, 1000]);
+ if (this.show) {
+ //清除展示画面
+ this.show = !this.show;
+ core.clearMap(ctx8);
+ } else {
+ if (
+ inRect(pos, enemyStatusBox) &&
+ this.selection !== "" &&
+ this.selection !== "boss" &&
+ this.hasEnemy()
+ ) {
+ //绘制怪物详情
+ this.show = !this.show;
+ this.moreShow(this.selection);
+ } else if (
+ inRect(pos, enemyStatusBox) &&
+ (!this.hasEnemy() || this.selection === "boss")
+ ) {
+ //绘制boss详情
+ this.show = !this.show;
+ this.moreShow("boss");
+ } else if (inRect(pos, heroStatusBox)) {
+ //绘制勇士详情
+ this.show = !this.show;
+ this.moreShow("hero");
+ } else if (inRect(pos, bossBox) && this.hasEnemy()) {
+ //切换selection为boss
+ this.selection = "boss";
+ this.update();
+ } else if (inRect(pos, enemyBox) && this.hasEnemy()) {
+ //切换selection为enemy
+ const symbol =
+ Math.floor((px - 700) / 100) + Math.floor((py - 500) / 150) * 3;
+
+ if (this.enemy[symbol] && this.enemy[symbol].hp > 0) {
+ this.selection = symbol;
+ this.update();
+ }
+ }
+ }
+ }
+ drawchoose() {
+ if (core.domStyle.isVertical) {
+ ctx7.canvas.width = 1248;
+ ctx7.canvas.height = 2028;
+ ctx7.save(); //保存设置
+ ctx7.translate(1248, 0); //重新定位右上角为基准
+ ctx7.rotate(Math.PI / 2); //旋转90度
+ } else {
+ ctx7.canvas.width = 2028;
+ ctx7.canvas.height = 1248;
+ }
+ boss7.style.display = "block";
+ core.clearMap(ctx7);
+ if (this.hasEnemy()) {
+ core.drawWindowSkin(
+ "winskin.webp",
+ ctx7,
+ 1050,
+ 250,
+ 400,
+ 660,
+ null,
+ null,
+ null,
+ 3
+ );
+ core.fillBoldText1(
+ ctx7,
+ "普通攻击",
+ 1120,
+ 350,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ "bold 64px Verdana"
+ );
+ core.drawLine(ctx7, 1050, 390, 1450, 390, "#FFFFFF", 6);
+ } else {
+ core.drawWindowSkin(
+ "winskin.webp",
+ ctx7,
+ 850,
+ 250,
+ 400,
+ 660,
+ null,
+ null,
+ null,
+ 3
+ );
+ core.fillBoldText1(
+ ctx7,
+ "普通攻击",
+ 920,
+ 350,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ "bold 64px Verdana"
+ );
+ core.drawLine(ctx7, 850, 390, 1250, 390, "#FFFFFF", 6);
+ }
+ }
+ moreShow(select) {
+ if (core.domStyle.isVertical) {
+ ctx8.canvas.width = 1248;
+ ctx8.canvas.height = 2028;
+ ctx8.save(); //保存设置
+ ctx8.translate(1248, 0); //重新定位右上角为基准
+ ctx8.rotate(Math.PI / 2); //旋转90度
+ } else {
+ ctx8.canvas.width = 2028;
+ ctx8.canvas.height = 1248;
+ }
+ core.clearMap(ctx8);
+ core.fillRect(ctx8, 100, 100, 1800, 1000, "rgba(0,0,0,0.7)");
+ core.drawWindowSkin(
+ "winskin.webp",
+ ctx8,
+ 100,
+ 100,
+ 1800,
+ 1000,
+ null,
+ null,
+ null,
+ 3
+ );
+ let posy = 200;
+ switch (select) {
+ case "hero":
+ //勇士技能/buff
+ core.fillBoldText1(
+ ctx8,
+ this.hero.name,
+ 1000,
+ posy,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ "bold 48px Verdana"
+ );
+ posy += 100;
+ if (this.herobuff.length === 0) {
+ core.fillBoldText1(
+ ctx8,
+ "当前无特殊状态",
+ 200,
+ posy,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ "bold 48px Verdana"
+ );
+ posy += 100;
+ } else {
+ this.herobuff.forEach((v) => {
+ core.drawTextContent(ctx8, this.buffshow(v), {
+ left: 200,
+ top: posy,
+ bold: true,
+ color: "#FFFFFF",
+ align: "left",
+ fontSize: 48,
+ time: 0,
+ font: "Verdana",
+ maxWidth: 1600,
+ });
+ posy += 100;
+ });
+ }
+ posy += 50;
+ core.fillBoldText1(
+ ctx8,
+ "技能说明",
+ 1000,
+ posy,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ "bold 48px Verdana"
+ );
+ posy += 100;
+ core.fillBoldText1(
+ ctx8,
+ "普通攻击:" + this.skillShow["普通攻击"],
+ 200,
+ posy,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ "bold 48px Verdana"
+ );
+ break;
+ case "boss":
+ core.fillBoldText1(
+ ctx8,
+ this.boss.name,
+ 1000,
+ posy,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ "bold 48px Verdana"
+ );
+ posy += 100;
+ //boss技能/buff
+ if (this.bossbuff.length === 0) {
+ core.fillBoldText1(
+ ctx8,
+ "当前无特殊状态",
+ 200,
+ posy,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ "bold 48px Verdana"
+ );
+ posy += 100;
+ } else {
+ this.bossbuff.forEach((v) => {
+ core.drawTextContent(ctx8, this.buffshow(v), {
+ left: 200,
+ top: posy,
+ bold: true,
+ color: "#FFFFFF",
+ align: "left",
+ fontSize: 48,
+ time: 0,
+ font: "Verdana",
+ maxWidth: 1600,
+ });
+ posy += 100;
+ });
+ }
+ posy += 50;
+ core.fillBoldText1(
+ ctx8,
+ "当前技能",
+ 1000,
+ posy,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ "bold 48px Verdana"
+ );
+ posy += 100;
+ core.fillBoldText1(
+ ctx8,
+ this.boss.skill[this.boss.index] +
+ this.skillShow[this.boss.skill[this.boss.index]],
+ 200,
+ posy,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ "bold 48px Verdana"
+ );
+ break;
+ default:
+ const enemy = this.enemy[select];
+ const enemybuff = this.enemybuff[select];
+ core.fillBoldText1(
+ ctx8,
+ enemy.name,
+ 1000,
+ posy,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ "bold 48px Verdana"
+ );
+ posy += 100;
+ if (enemybuff.length === 0) {
+ core.fillBoldText1(
+ ctx8,
+ "当前无特殊状态",
+ 200,
+ posy,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ "bold 48px Verdana"
+ );
+ posy += 100;
+ } else {
+ enemybuff.forEach((v) => {
+ core.drawTextContent(ctx8, this.buffshow(v), {
+ left: 200,
+ top: posy,
+ bold: true,
+ color: "#FFFFFF",
+ align: "left",
+ fontSize: 48,
+ time: 0,
+ font: "Verdana",
+ maxWidth: 1600,
+ });
+ posy += 100;
+ });
+ }
+ posy += 50;
+ core.fillBoldText1(
+ ctx8,
+ "当前技能",
+ 1000,
+ posy,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ "bold 48px Verdana"
+ );
+ posy += 100;
+ core.fillBoldText1(
+ ctx8,
+ enemy.skill[enemy.index] +
+ this.skillShow[enemy.skill[enemy.index]],
+ 200,
+ posy,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ "bold 48px Verdana"
+ );
+ break;
+ }
+ ctx8.restore();
+ }
+ hasEnemy() {
+ let enemy = false;
+ this.enemy.forEach((v) => {
+ if (v.hp > 0) enemy = true;
+ });
+ return enemy;
+ }
+ async bossStart() {
+ boss.style.display = "block";
+ this.selection = "boss";
+ this.playerturn = false;
+ this.show = false;
+ this.turn = 0;
+ core.lockControl();
+ await this.blackBg();
+ this.moveboss();
+ await this.movehero();
+ await this.moveStatus();
+ this.update();
+ this.fight();
+ }
+ async bossEnd() {
+ hero.hp = this.hero.hp;
+ this.selection = "boss";
+ await this.close();
+
+ core.unlockControl();
+ core.updateStatusBar();
+ if (hero.hp <= 0) {
+ hero.hp = 0;
+ core.events.lose("BOSS战失败");
+ }
+ }
+ async fight() {
+ await this.drawturn();
+ const fightList = [];
+ fightList.push(["hero", this.hero.speed]);
+ if (this.boss.hp > 0) fightList.push(["boss", this.boss.speed]);
+ this.enemy.forEach((v, i) => {
+ if (v.id && v.hp > 0) fightList.push([i, v.speed]);
+ });
+ fightList.sort((a, b) => b[1] - a[1]);
+ let damage;
+ for (const v of fightList) {
+ switch (v[0]) {
+ case "hero":
+ this.drawchoose();
+ const skill = await getClick();
+ let select = this.boss;
+ if (this.selection !== "" && this.selection !== "boss")
+ select = this.enemy[this.selection];
+ this.skill(skill, this.hero, select);
+
+ core.clearMap(ctx7);
+ break;
+ case "boss":
+ if (this.boss.hp > 0) {
+ this.selection = "boss";
+ this.update();
+ await sleep(500); //等待500ms
+ //这里写boss技能的效果
+ this.skill(
+ this.boss.skill[this.boss.index],
+ this.boss,
+ this.hero
+ );
+
+ this.boss.index++;
+ if (this.boss.index >= this.boss.skill.length)
+ this.boss.index = 0;
+ }
+ break;
+ default:
+ const enemy = this.enemy[v[0]];
+ if (enemy.hp > 0) {
+ this.selection = v[0];
+ this.update();
+ await sleep(500); //等待500ms
+ this.skill(enemy.skill[enemy.index], enemy, this.hero);
+ enemy.index++;
+ if (enemy.index >= enemy.skill.length) enemy.index = 0;
+ }
+ break;
+ }
+ await sleep(1000);
+ this.selection = "";
+ this.update();
+ }
+ let end = true;
+ if (this.boss.hp > 0) end = false;
+ this.enemy.forEach((v) => {
+ if (v.hp > 0) end = false;
+ });
+
+ if (this.hero.hp <= 0) end = true;
+ if (end) {
+ this.bossEnd();
+ } else {
+ this.fight();
+ }
+ }
+ drawturn() {
+ boss8.style.display = "block";
+ this.turn += 1;
+ let time = 0,
+ frame = 0,
+ frame2 = 0,
+ right = 1,
+ once = 10;
+ return new Promise((resolve) => {
+ core.registerAnimationFrame("drawturn", true, (temptime) => {
+ if (temptime - time > 1000 / 60) {
+ time = temptime;
+ frame += 1 * right;
+ core.clearMap(ctx);
+ if (core.domStyle.isVertical) {
+ ctx.canvas.width = 1248;
+ ctx.canvas.height = 2028;
+ ctx.save(); //保存设置
+ ctx.translate(1248, 0); //重新定位右上角为基准
+ ctx.rotate(Math.PI / 2); //旋转90度
+ } else {
+ ctx.canvas.width = 2028;
+ ctx.canvas.height = 1248;
+ }
+
+ core.fillRect(
+ ctx,
+ 0,
+ 624 - once * frame,
+ 2028,
+ once * frame * 2,
+ "rgba(0,0,0,0.7)"
+ );
+ core.setTextAlign(ctx, "center");
+ core.fillBoldText1(
+ ctx,
+ "ROUND " + this.turn,
+ 1014,
+ 624,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(frame * 5, true)
+ );
+ if (1014 - once * frame * 7 <= 0) {
+ frame -= 1;
+ frame2++;
+
+ if (frame2 > 30) right = -1;
+ }
+ if (frame < 0) {
+ core.clearMap(ctx);
+ core.unregisterAnimationFrame("drawturn");
+ resolve();
+ }
+ }
+ });
+ });
+ }
+ drawenemy() {
+ let block,
+ time = 0;
+
+ boss5.style.display = "block";
+ core.registerAnimationFrame("enemyanimate", true, (temptime) => {
+ if (temptime - time > 1000 / 60) {
+ time = temptime;
+ this.enemyfarme += 1;
+ let animate = Math.floor(this.enemyfarme / 30),
+ posx = 700,
+ posy = 500;
+ core.clearMap(ctx5);
+ if (core.domStyle.isVertical) {
+ ctx5.canvas.width = 1248;
+ ctx5.canvas.height = 2028;
+ ctx5.save(); //保存设置
+ ctx5.translate(1248, 0); //重新定位右上角为基准
+ ctx5.rotate(Math.PI / 2); //旋转90度
+ } else {
+ ctx5.canvas.width = 2028;
+ ctx5.canvas.height = 1248;
+ }
+
+ if (this.hasEnemy()) {
+ core.drawWindowSkin(
+ "winskin.webp",
+ ctx5,
+ 650,
+ 250,
+ 400,
+ 660,
+ null,
+ null,
+ null,
+ 3
+ );
+ if (this.selection === "boss")
+ core.strokeRect(ctx5, 800, 300, 100, 150, "yellow", 6);
+ const bossBlock = core.getBlockInfo(this.boss.id);
+ core.drawImage(
+ ctx5,
+ bossBlock.image,
+ 32 * (animate % 4),
+ bossBlock.posY * 48,
+ 32,
+ 48,
+ 800,
+ 300,
+ 96,
+ 144
+ );
+ core.drawImage(
+ ctx5,
+ "hero.webp",
+ 32 * (animate % 4),
+ 144,
+ 32,
+ 48,
+ 800,
+ 750,
+ 96,
+ 144
+ );
+ for (let i = 0; i < this.enemy.length; i++) {
+ if (this.enemy[i].id && this.enemy[i].hp > 0) {
+ block = core.getBlockInfo(this.enemy[i].id);
+ } else {
+ posx += 100;
+ if (i === 2) {
+ posx = 700;
+ posy += 150;
+ }
+ continue;
+ }
+
+ if (block.cls === "enemys") {
+ core.drawImage(
+ ctx5,
+ block.image,
+ 32 * (animate % 2),
+ block.posY * 32,
+ 32,
+ 32,
+ posx,
+ posy,
+ 96,
+ 96
+ );
+ if (this.selection === i)
+ core.strokeRect(ctx5, posx, posy, 100, 100, "yellow", 6);
+ } else {
+ core.drawImage(
+ ctx5,
+ block.image,
+ 32 * (animate % 4),
+ block.posY * 48,
+ 32,
+ 48,
+ posx,
+ posy,
+ 96,
+ 144
+ );
+ if (this.selection === i)
+ core.strokeRect(ctx5, posx, posy, 100, 150, "yellow", 6);
+ }
+
+ posx += 100;
+ if (i === 2) {
+ posx = 700;
+ posy += 150;
+ }
+ }
+ }
+
+ ctx5.restore();
+ }
+ });
+ }
+ drawhero() {
+ core.clearMap(ctx2);
+ if (core.domStyle.isVertical) {
+ ctx2.canvas.width = 1248;
+ ctx2.canvas.height = 2028;
+ ctx2.save(); //保存设置
+ ctx2.translate(1248, 0); //重新定位右上角为基准
+ ctx2.rotate(Math.PI / 2); //旋转90度
+ } else {
+ ctx2.canvas.width = 2028;
+ ctx2.canvas.height = 1248;
+ }
+ core.drawImage(ctx2, this.heroImage, 0, 168, 750, 1080);
+ ctx2.restore();
+ }
+ movehero() {
+ boss2.style.display = "block";
+ core.clearMap(ctx2);
+ let time = 0,
+ px = -200;
+ return new Promise((resolve) => {
+ core.registerAnimationFrame("moveheroImage", true, (temptime) => {
+ if (temptime - time > 1000 / 60) {
+ time = temptime;
+ core.clearMap(ctx2);
+ if (core.domStyle.isVertical) {
+ ctx2.canvas.width = 1248;
+ ctx2.canvas.height = 2028;
+ ctx2.save(); //保存设置
+ ctx2.translate(1248, 0); //重新定位右上角为基准
+ ctx2.rotate(Math.PI / 2); //旋转90度
+ } else {
+ ctx2.canvas.width = 2028;
+ ctx2.canvas.height = 1248;
+ }
+ core.drawImage(ctx2, this.heroImage, px, 168, 750, 1080);
+ px += 10;
+ ctx2.restore();
+ if (px >= 0) {
+ core.unregisterAnimationFrame("moveheroImage");
+ this.drawhero();
+ resolve();
+ }
+ }
+ });
+ });
+ }
+ update() {
+ core.drawImage(ctx1, this.bg, 0, 0, 2028, 1248);
+ this.drawboss();
+ this.drawhero();
+ this.drawStatus();
+ let dodraw = false;
+ for (let i = 0; i < this.enemy.length; i++) {
+ if (this.enemy[i].id && this.enemy[i].hp > 0) {
+ dodraw = true;
+ }
+ }
+ if (dodraw === true) this.drawenemy();
+ }
+ playanimate(name, x, y, scalex = 10, scaley = 10) {
+ const one = {
+ name: name,
+ x: x,
+ y: y,
+ scalex: scalex,
+ scaley: scaley,
+ farme: 0,
+ };
+ let time = 0;
+ boss6.style.display = "block";
+ return new Promise((resolve) => {
+ core.registerAnimationFrame("animateboss", true, (timestamp) => {
+ if (timestamp - time > 1000 / 60) {
+ time = timestamp;
+ core.clearMap(ctx6);
+
+ const data = flags["animate_" + one.name];
+ if (core.domStyle.isVertical) {
+ ctx6.canvas.width = 1248;
+ ctx6.canvas.height = 2028;
+ ctx6.save(); //保存设置
+ ctx6.translate(1248, 0); //重新定位右上角为基准
+ ctx6.rotate(Math.PI / 2); //旋转90度
+ } else {
+ ctx6.canvas.width = 2028;
+ ctx6.canvas.height = 1248;
+ }
+
+ if (!data) {
+ core.unregisterAnimationFrame("animateboss");
+ resolve();
+ } else {
+ data.imageList.forEach(function (image) {
+ if (
+ one.farme >= (image.beforefarme ?? 0) &&
+ one.farme <= (image.afterfarme ?? data.allFarme)
+ ) {
+ const img = core.material.images.images?.[image.image];
+ if (img) {
+ const gla = image.globalAlpha ?? 100;
+ const agla = image.aglobalAlpha ?? gla,
+ beforefarme = image.beforefarme ?? 0;
+ const afterfarme = image.afterfarme ?? data.allFarme;
+
+ ctx6.globalAlpha =
+ (gla +
+ ((agla - gla) * (one.farme - beforefarme)) /
+ (afterfarme - beforefarme || 1)) /
+ 100;
+
+ const cx =
+ (image.cx ?? 0) +
+ (((image.acx ?? 0) - (image.cx ?? 0)) *
+ (one.farme - beforefarme)) /
+ (afterfarme - beforefarme || 1),
+ cy =
+ (image.cy ?? 0) +
+ (((image.acy ?? 0) - (image.cy ?? 0)) *
+ (one.farme - beforefarme)) /
+ (afterfarme - beforefarme || 1),
+ cw =
+ (image.cw ?? img.width) +
+ (((image.acw ?? img.width) -
+ (image.cw ?? img.width)) *
+ (one.farme - beforefarme)) /
+ (afterfarme - beforefarme || 1),
+ ch =
+ (image.ch ?? img.height) +
+ (((image.acw ?? img.height) -
+ (image.cw ?? img.height)) *
+ (one.farme - beforefarme)) /
+ (afterfarme - beforefarme || 1),
+ x =
+ (image.x ?? 0) +
+ (((image.ax ?? 0) - (image.x ?? 0)) *
+ (one.farme - beforefarme)) /
+ (afterfarme - beforefarme || 1),
+ y =
+ (image.y ?? 0) +
+ (((image.ay ?? 0) - (image.y ?? 0)) *
+ (one.farme - beforefarme)) /
+ (afterfarme - beforefarme || 1),
+ w =
+ (image.w ?? one.width) +
+ (((image.aw ?? one.width) - (image.w ?? one.width)) *
+ (one.farme - beforefarme)) /
+ (afterfarme - beforefarme || 1),
+ h =
+ (image.h ?? one.height) +
+ (((image.aw ?? one.height) -
+ (image.w ?? one.height)) *
+ (one.farme - beforefarme)) /
+ (afterfarme - beforefarme || 1),
+ angle =
+ (Math.PI *
+ ((image.image.angle ?? 0) +
+ (((image.aangle ?? 0) -
+ (image.image.angle ?? 0)) *
+ (one.farme - beforefarme)) /
+ (afterfarme - beforefarme || 1))) /
+ 180;
+
+ core.drawImage(
+ ctx6,
+ img,
+ cx,
+ cy,
+ cw,
+ ch,
+ one.x + (x - data.px) * one.scalex,
+ one.y + (y - data.py) * one.scaley,
+ w * one.scalex,
+ h * one.scaley,
+ angle
+ );
+ }
+ }
+ });
+ data.soundList.forEach(function (sound) {
+ const lisen =
+ sound.sound &&
+ core.sounds[sound.sound] &&
+ core.musicStatus.soundStatus;
+ if (one.farme == sound.startfarme && lisen) {
+ if (sound.stopbefore) core.stopSound();
+ core.playSound(sound.sound);
+ }
+ });
+ one.farme++;
+ ctx6.restore();
+ if (one.farme > data.allFarme) {
+ core.clearMap(ctx6);
+ core.unregisterAnimationFrame("animateboss");
+ resolve();
+ }
+ }
+ }
+ });
+ });
+ }
+
+ drawboss() {
+ core.clearMap(ctx3);
+ if (core.domStyle.isVertical) {
+ ctx3.canvas.width = 1248;
+ ctx3.canvas.height = 2028;
+ ctx3.save(); //保存设置
+ ctx3.translate(1248, 0); //重新定位右上角为基准
+ ctx3.rotate(Math.PI / 2); //旋转90度
+ } else {
+ ctx3.canvas.width = 2028;
+ ctx3.canvas.height = 1248;
+ }
+ if (this.selection === "boss" || this.selection === "") {
+ core.drawImage(ctx3, this.boss.image, 1400, 168, 750, 1080);
+ } else {
+ core.drawImage(
+ ctx3,
+ this.enemy[this.selection].image,
+ 1400,
+ 168,
+ 750,
+ 1080
+ );
+ }
+
+ ctx3.restore();
+ }
+ moveboss() {
+ boss3.style.display = "block";
+ core.clearMap(ctx3);
+ let time = 0,
+ px = 1600;
+ return new Promise((resolve) => {
+ core.registerAnimationFrame("movebossImage", true, (temptime) => {
+ if (temptime - time > 1000 / 60) {
+ time = temptime;
+ core.clearMap(ctx3);
+ if (core.domStyle.isVertical) {
+ ctx3.canvas.width = 1248;
+ ctx3.canvas.height = 2028;
+ ctx3.save(); //保存设置
+ ctx3.translate(1248, 0); //重新定位右上角为基准
+ ctx3.rotate(Math.PI / 2); //旋转90度
+ } else {
+ ctx3.canvas.width = 2028;
+ ctx3.canvas.height = 1248;
+ }
+ core.drawImage(ctx3, this.boss.image, px, 168, 750, 1080);
+ px -= 10;
+ ctx3.restore();
+ if (px <= 1400) {
+ core.unregisterAnimationFrame("movebossImage");
+ this.drawboss();
+ resolve();
+ }
+ }
+ });
+ });
+ }
+ drawStatus() {
+ core.clearMap(ctx4);
+ if (core.domStyle.isVertical) {
+ ctx4.canvas.width = 1248;
+ ctx4.canvas.height = 2028;
+ ctx4.save(); //保存设置
+ ctx4.translate(1248, 0); //重新定位右上角为基准
+ ctx4.rotate(Math.PI / 2); //旋转90度
+ } else {
+ ctx4.canvas.width = 2028;
+ ctx4.canvas.height = 1248;
+ }
+ core.drawWindowSkin(
+ "winskin.webp",
+ ctx4,
+ 600,
+ 920,
+ 900,
+ 300,
+ null,
+ null,
+ null,
+ 3
+ );
+ core.fillBoldText1(
+ ctx4,
+ hero.name,
+ 630,
+ 1000,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "状态",
+ 880,
+ 1000,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "生命 " + this.hero.hp,
+ 630,
+ 1070,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "攻击 " + this.hero.atk,
+ 630,
+ 1120,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "防御 " + this.hero.def,
+ 630,
+ 1170,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "法强 " + this.hero.spell,
+ 1080,
+ 1070,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "法抗 " + this.hero.mdef + "%",
+ 1080,
+ 1120,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "速度 " + this.hero.speed,
+ 1080,
+ 1170,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ let posx = 980;
+ this.herobuff.forEach((v) => {
+ if (v) {
+ core.drawIcon(ctx4, v.id, posx, 950, 64, 64);
+ core.setTextAlign(ctx4, "right");
+ core.fillBoldText1(
+ ctx4,
+ v.count,
+ posx + 50,
+ 1000,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(24, true)
+ );
+ core.setTextAlign(ctx4, "left");
+ posx += 80;
+ }
+ });
+
+ if (this.selection === "boss" || !this.hasEnemy()) {
+ core.drawWindowSkin(
+ "winskin.webp",
+ ctx4,
+ 50,
+ 50,
+ 1900,
+ 200,
+ null,
+ null,
+ null,
+ 3
+ );
+ core.fillBoldText1(
+ ctx4,
+ this.boss.name,
+ 100,
+ 120,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "状态",
+ 500,
+ 120,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "当前技能",
+ 1400,
+ 120,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ const bosstext = this.boss.skill[this.boss.index];
+ core.fillBoldText1(
+ ctx4,
+ bosstext,
+ 1600,
+ 120,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "生命 " + this.boss.hp,
+ 100,
+ 220,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "攻击 " + this.boss.atk,
+ 500,
+ 220,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "防御 " + this.boss.def,
+ 900,
+ 220,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "法抗 " + this.boss.mdef + "%",
+ 1300,
+ 220,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "速度 " + this.boss.speed,
+ 1700,
+ 220,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ let posx = 600;
+ this.bossbuff.forEach((v) => {
+ if (v) {
+ core.drawIcon(ctx4, v.id, posx, 80, 64, 64);
+ core.setTextAlign(ctx4, "right");
+ core.fillBoldText1(
+ ctx4,
+ v.count,
+ posx + 50,
+ 130,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(24, true)
+ );
+ core.setTextAlign(ctx4, "left");
+ posx += 80;
+ }
+ });
+ } else if (this.selection === "") {} else {
+ core.drawWindowSkin(
+ "winskin.webp",
+ ctx4,
+ 50,
+ 50,
+ 1900,
+ 200,
+ null,
+ null,
+ null,
+ 3
+ );
+ core.fillBoldText1(
+ ctx4,
+ this.enemy[this.selection].name,
+ 100,
+ 120,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "状态",
+ 500,
+ 120,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "当前技能",
+ 1400,
+ 120,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ const enemytext =
+ this.enemy[this.selection].skill[this.enemy[this.selection].index];
+ core.fillBoldText1(
+ ctx4,
+ enemytext,
+ 1600,
+ 120,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "生命 " + this.enemy[this.selection].hp,
+ 100,
+ 220,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "攻击 " + this.enemy[this.selection].atk,
+ 500,
+ 220,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "防御 " + this.enemy[this.selection].def,
+ 900,
+ 220,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "法抗 " + this.enemy[this.selection].mdef + "%",
+ 1300,
+ 220,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "速度 " + this.enemy[this.selection].speed,
+ 1700,
+ 220,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ let posx = 600;
+ this.enemybuff[this.selection].forEach((v) => {
+ if (v) {
+ core.drawIcon(ctx4, v.id, posx, 80, 64, 64);
+ core.setTextAlign(ctx4, "right");
+ core.fillBoldText1(
+ ctx4,
+ v.count,
+ posx + 50,
+ 130,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(24, true)
+ );
+ core.setTextAlign(ctx4, "left");
+ posx += 80;
+ }
+ });
+ }
+ ctx4.restore();
+ }
+ moveStatus() {
+ boss4.style.display = "block";
+ let time = 0,
+ posy = 400;
+ return new Promise((resolve) => {
+ core.registerAnimationFrame("moveStatus", true, (temptime) => {
+ if (temptime - time > 1000 / 60) {
+ time = temptime;
+ core.clearMap(ctx4);
+ if (core.domStyle.isVertical) {
+ ctx4.canvas.width = 1248;
+ ctx4.canvas.height = 2028;
+ ctx4.save(); //保存设置
+ ctx4.translate(1248, 0); //重新定位右上角为基准
+ ctx4.rotate(Math.PI / 2); //旋转90度
+ } else {
+ ctx4.canvas.width = 2028;
+ ctx4.canvas.height = 1248;
+ }
+ core.drawWindowSkin(
+ "winskin.webp",
+ ctx4,
+ 600,
+ 920 + posy,
+ 900,
+ 300,
+ null,
+ null,
+ null,
+ 3
+ );
+ core.fillBoldText1(
+ ctx4,
+ hero.name,
+ 630,
+ 1000 + posy,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "状态",
+ 880,
+ 1000 + posy,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "生命 " + this.hero.hp,
+ 630,
+ 1070 + posy,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "攻击 " + this.hero.atk,
+ 630,
+ 1120 + posy,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "防御 " + this.hero.def,
+ 630,
+ 1170 + posy,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "法强 " + this.hero.spell,
+ 1080,
+ 1070 + posy,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "法抗 " + this.hero.mdef + "%",
+ 1080,
+ 1120 + posy,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "速度 " + this.hero.speed,
+ 1080,
+ 1170 + posy,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ let posx = 980;
+ this.herobuff.forEach((v) => {
+ if (v) {
+ core.drawIcon(ctx4, v.id, posx, 950 + posy, 64, 64);
+ core.setTextAlign(ctx4, "right");
+ core.fillBoldText1(
+ ctx4,
+ v.count,
+ posx + 50,
+ 1000 + posy,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(24, true)
+ );
+ core.setTextAlign(ctx4, "left");
+ posx += 80;
+ }
+ });
+ if (this.selection === "boss") {
+ core.drawWindowSkin(
+ "winskin.webp",
+ ctx4,
+ 50,
+ 50 - posy / 2,
+ 1900,
+ 200,
+ null,
+ null,
+ null,
+ 3
+ );
+ core.fillBoldText1(
+ ctx4,
+ this.boss.name,
+ 100,
+ 120 - posy / 2,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "状态",
+ 500,
+ 120 - posy / 2,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "生命 " + this.boss.hp,
+ 100,
+ 220 - posy / 2,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "攻击 " + this.boss.atk,
+ 500,
+ 220 - posy / 2,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "防御 " + this.boss.def,
+ 900,
+ 220 - posy / 2,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "法抗 " + this.boss.mdef + "%",
+ 1300,
+ 220 - posy / 2,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "速度 " + this.boss.speed,
+ 1700,
+ 220 - posy / 2,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ let posx = 600;
+ this.bossbuff.forEach((v) => {
+ if (v) {
+ core.drawIcon(ctx4, v.id, posx, 80 - posy / 2, 64, 64);
+ core.setTextAlign(ctx4, "right");
+ core.fillBoldText1(
+ ctx4,
+ v.count,
+ posx + 50,
+ 130 - posy / 2,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(24, true)
+ );
+ core.setTextAlign(ctx4, "left");
+ posx += 80;
+ }
+ });
+ } else if (this.selection === "") {} else {
+ core.drawWindowSkin(
+ "winskin.webp",
+ ctx4,
+ 50,
+ 50 - posy / 2,
+ 1900,
+ 200,
+ null,
+ null,
+ null,
+ 3
+ );
+ core.fillBoldText1(
+ ctx4,
+ this.enemy[this.selection].name,
+ 100,
+ 120 - posy / 2,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "状态",
+ 500,
+ 120 - posy / 2,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "生命 " + this.enemy[this.selection].hp,
+ 100,
+ 220 - posy / 2,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "攻击 " + this.enemy[this.selection].atk,
+ 500,
+ 220 - posy / 2,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "防御 " + this.enemy[this.selection].def,
+ 900,
+ 220 - posy / 2,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "法抗 " + this.enemy[this.selection].mdef + "%",
+ 1300,
+ 220 - posy / 2,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ core.fillBoldText1(
+ ctx4,
+ "速度 " + this.enemy[this.selection].speed,
+ 1700,
+ 220 - posy / 2,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(44, true)
+ );
+ let posx = 600;
+ this.enemybuff[this.selection].forEach((v) => {
+ if (v) {
+ core.drawIcon(ctx4, v.id, posx, 80 - posy / 2, 64, 64);
+ core.setTextAlign(ctx4, "right");
+ core.fillBoldText1(
+ ctx4,
+ v.count,
+ posx + 50,
+ 130 - posy / 2,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(24, true)
+ );
+ core.setTextAlign(ctx4, "left");
+ posx += 80;
+ }
+ });
+ }
+ ctx4.restore();
+ posy -= 10;
+ if (posy <= 0) {
+ core.unregisterAnimationFrame("moveStatus");
+ this.drawStatus();
+ resolve();
+ }
+ }
+ });
+ });
+ }
+ close() {
+ let globalAlpha = 0,
+ time = 0;
+ return new Promise((resolve) => {
+ core.registerAnimationFrame("closeblack", true, (temptime) => {
+ if (temptime - time > 1000 / 60) {
+ time = temptime;
+ core.clearMap(ctx);
+ if (core.domStyle.isVertical) {
+ ctx.canvas.width = 1248;
+ ctx.canvas.height = 2028;
+ ctx.save(); //保存设置
+ ctx.translate(1248, 0); //重新定位右上角为基准
+ ctx.rotate(Math.PI / 2); //旋转90度
+ } else {
+ ctx.canvas.width = 2028;
+ ctx.canvas.height = 1248;
+ }
+
+ ctx.globalAlpha = globalAlpha;
+
+ core.fillRect(ctx, 0, 0, 2028, 1248);
+ globalAlpha += 1 / 30;
+ ctx.restore();
+ if (globalAlpha > 1) {
+ time = 0;
+ globalAlpha = 1;
+ core.unregisterAnimationFrame("closeblack");
+ core.unregisterAnimationFrame("enemyanimate");
+ boss1.style.display = "none";
+ boss2.style.display = "none";
+ boss3.style.display = "none";
+ boss4.style.display = "none";
+ boss5.style.display = "none";
+ boss6.style.display = "none";
+ boss7.style.display = "none";
+ boss8.style.display = "none";
+
+ core.registerAnimationFrame("closeblack2", true, (temptime) => {
+ if (temptime - time > 1000 / 60) {
+ time = temptime;
+ core.clearMap(ctx);
+ if (core.domStyle.isVertical) {
+ ctx.canvas.width = 1248;
+ ctx.canvas.height = 2028;
+ ctx.save(); //保存设置
+ ctx.translate(1248, 0); //重新定位右上角为基准
+ ctx.rotate(Math.PI / 2); //旋转90度
+ } else {
+ ctx.canvas.width = 2028;
+ ctx.canvas.height = 1248;
+ }
+ ctx.globalAlpha = globalAlpha;
+ core.fillRect(ctx, 0, 0, 2028, 1248, "#000000");
+ ctx.restore();
+ globalAlpha -= 1 / 30;
+ if (globalAlpha < 0) {
+ core.unregisterAnimationFrame("closeblack2");
+
+ boss.style.display = "none";
+
+ resolve();
+ }
+ }
+ });
+ }
+ }
+ });
+ });
+ }
+
+ blackBg() {
+ let globalAlpha = 0,
+ time = 0,
+ img = core.material.images.images[this.bg];
+ boss1.style.display = "block";
+ return new Promise((resolve) => {
+ core.registerAnimationFrame("bossblack", true, (temptime) => {
+ if (temptime - time > 1000 / 60) {
+ time = temptime;
+ core.clearMap(ctx1);
+ if (core.domStyle.isVertical) {
+ ctx1.canvas.width = 1248;
+ ctx1.canvas.height = 2028;
+ ctx1.save(); //保存设置
+ ctx1.translate(1248, 0); //重新定位右上角为基准
+ ctx1.rotate(Math.PI / 2); //旋转90度
+ } else {
+ ctx1.canvas.width = 2028;
+ ctx1.canvas.height = 1248;
+ }
+
+ ctx1.globalAlpha = globalAlpha;
+
+ core.fillRect(ctx1, 0, 0, 2028, 1248);
+ globalAlpha += 1 / 30;
+ ctx1.restore();
+ if (globalAlpha > 1) {
+ time = 0;
+ globalAlpha = 0;
+ core.unregisterAnimationFrame("bossblack");
+ core.registerAnimationFrame("bossBg", true, (temptime) => {
+ if (temptime - time > 1000 / 60) {
+ time = temptime;
+ core.clearMap(ctx1);
+ if (core.domStyle.isVertical) {
+ ctx1.canvas.width = 1248;
+ ctx1.canvas.height = 2028;
+ ctx1.save(); //保存设置
+ ctx1.translate(1248, 0); //重新定位右上角为基准
+ ctx1.rotate(Math.PI / 2); //旋转90度
+ } else {
+ ctx1.canvas.width = 2028;
+ ctx1.canvas.height = 1248;
+ }
+
+ ctx1.globalAlpha = 1;
+ core.fillRect(ctx1, 0, 0, 2028, 1248);
+ ctx1.globalAlpha = globalAlpha;
+ if (img) ctx1.drawImage(img, 0, 0, 2028, 1248);
+ ctx1.restore();
+ globalAlpha += 1 / 30;
+ if (globalAlpha > 1) {
+ core.unregisterAnimationFrame("bossBg");
+ resolve();
+ }
+ }
+ });
+ }
+ }
+ });
+ });
+ }
+ }
+ core.ui.boss = new Boss();
+},
"剧情视频引用": function () {
// 在此增加新插件
let a;
@@ -16762,1153 +19704,1150 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
};
},
"musicMode": function () {
- // 在此增加新插件
- const music = document.createElement("canvas");
- music.style.position = "absolute";
- music.style.zIndex = 300;
- music.style.display = "none";
- music.id = "music";
- main.dom.gameGroup.insertAdjacentElement("afterend", music);
- music.style.top = "50%";
- music.style.left = "50%";
- music.style.transform = "translate(-50%,-50%)";
- const ctx = music.getContext("2d");
- main.dom.music = music;
-
- const audio = core.plugin.audioSystem.bgmController;
-
- let page = 0; //初始页面
-
- let isvolume = false;
-
- function shuffle(arr) {
- let n = arr.length,
- random;
- while (n) {
- random = (Math.random() * n--) >>> 0;
- [arr[n], arr[random]] = [arr[random], arr[n]];
- }
- return arr;
- }
- music.addEventListener("mousedown", function (e) {
- e.stopPropagation();
- const left = core.dom.gameGroup.offsetLeft;
- const top = core.dom.gameGroup.offsetTop;
- const px = Math.floor((e.clientX - left) / core.domStyle.scale),
- py = Math.floor((e.clientY - top) / core.domStyle.scale);
- core.ui.music.mousedown(px * 3, py * 3);
- });
- music.addEventListener("mousemove", function (e) {
- e.stopPropagation();
- const left = core.dom.gameGroup.offsetLeft;
- const top = core.dom.gameGroup.offsetTop;
- const px = Math.floor((e.clientX - left) / core.domStyle.scale),
- py = Math.floor((e.clientY - top) / core.domStyle.scale);
- core.ui.music.mousemove(px * 3, py * 3);
- });
- music.addEventListener("mouseup", function (e) {
- e.stopPropagation();
-
- isvolume = false;
- });
- music.addEventListener("mouseleave", function (e) {
- e.stopPropagation();
-
- isvolume = false;
- });
- music.addEventListener("touchstart", function (e) {
- e.preventDefault();
- const left = core.dom.gameGroup.offsetLeft;
- const top = core.dom.gameGroup.offsetTop;
- const px = Math.floor(
- (e.touches[0].clientX - left) / core.domStyle.scale
- ),
- py = Math.floor((e.touches[0].clientY - top) / core.domStyle.scale);
- core.ui.music.mousedown(px * 3, py * 3);
- });
- music.addEventListener("touchmove", function (e) {
- e.stopPropagation();
- const left = core.dom.gameGroup.offsetLeft;
- const top = core.dom.gameGroup.offsetTop;
- const px = Math.floor(
- (e.touches[0].clientX - left) / core.domStyle.scale
- ),
- py = Math.floor((e.touches[0].clientY - top) / core.domStyle.scale);
- core.ui.music.mousemove(px * 3, py * 3);
- });
- music.addEventListener("touchend", function (e) {
- e.stopPropagation();
-
- isvolume = false;
- });
- music.addEventListener("touchcancel", function (e) {
- e.stopPropagation();
-
- isvolume = false;
- });
-
- class musicclass {
- constructor() {
- this.musics = ["theme.mp3"];
- //music列表
- //需全塔属性注册并保存在bgms文件夹,每个数组为显示的一页内容
- this.musicMx = [
- [
- "Crawler.opus",
- "Blood_Stain.opus",
- "Blind_Alley.opus",
- "Halbmond.opus",
- ],
- ["theme.mp3", "op.opus", "Asphodelus_Ceui.opus", "ed.opus"],
- ];
- //音乐别名(将在播放器内显示的音乐名,music列表内的都要有对应歌名)
- this.musicname = {
- "Asphodelus_Ceui.opus": "Asphodelus (Full.ver)",
- "Blind_Alley.opus": "Blind Alley",
- "Crawler.opus": "Crawler",
- "op.opus": "Asphodelus",
- "theme.mp3": "One of Episodes",
- "ed.opus": "親愛なる世界へ",
- "Blood_Stain.opus": "Blood Stain",
- "Halbmond.opus": "Halbmond",
- };
- this.selection = [0, 0];
- this.stop = false;
- this.type = "xunhuan";
- this.randomList = [];
- this.random = 0;
- }
-
- //更新
- update() {
- this.background();
- this.drawUI();
- }
- background() {
- //画布大小设置
- if (core.domStyle.isVertical) {
- music.width = 1248;
- music.height = 2028;
- } else {
- music.width = 2028;
- music.height = 1248;
- }
- }
-
- mousedown(px, py) {
- //鼠标按下时
-
- const makeBox = ([x, y], [w, h]) => {
- return [
- [x, y],
- [x + w, y + h],
- ];
- };
- const inRect = ([x, y], [
- [sx, sy],
- [dx, dy]
- ]) => {
- return sx <= x && x <= dx && sy <= y && y <= dy;
- };
- const pos = [px, py];
- const backbox = makeBox([15, 35], [210, 90]);
- if (inRect(pos, backbox)) {
- //离开按钮是一致的,其余的记区分横竖屏
- music.style.display = "none";
- core.clearMap(ctx);
-
- core.unregisterAnimationFrame("music");
- core.restart();
-
- return;
- }
- if (core.domStyle.isVertical) {
- //竖屏
-
- const pageupbox = makeBox([100, 1230], [200, 100]);
- const pagedownbox = makeBox([950, 1230], [200, 100]);
- const musicbox = makeBox(
- [100, 200],
- [1048, this.musicMx[page].length * 100]
- );
- const beforebox = makeBox([120, 1620], [100, 100]);
- const afterbox = makeBox([780, 1620], [100, 100]);
- const playbox = makeBox([420, 1580], [200, 200]);
- const typebox = makeBox([1040, 1600], [120, 120]);
-
- const volumebox = makeBox([250, 1940], [1050, 20]);
- if (inRect(pos, pageupbox)) {
- if (page !== 0) page -= 1;
- return;
- }
- if (inRect(pos, pagedownbox)) {
- if (page !== this.musicMx.length - 1) page += 1;
- return;
- }
- if (inRect(pos, playbox)) {
- if (this.stop) {
- this.stop = !this.stop;
-
- core.resumeBgm();
- } else {
- this.stop = !this.stop;
- core.pauseBgm();
- }
- return;
- }
- if (inRect(pos, beforebox)) {
- this.stop = false;
- switch (this.type) {
- case "danqu":
- core.playBgm(
- main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
- main.core.ui.music.selection[1]
- ],
- 0
- );
-
- page = this.selection[0];
-
- break;
- case "xunhuan":
- for (;;) {
- if (this.selection[1] === 0) {
- if (this.selection[0] === 0) {
- this.selection[0] = this.musicMx.length - 1;
- this.selection[1] =
- this.musicMx[this.selection[0]].length - 1;
- } else {
- this.selection[0] -= 1;
- this.selection[1] =
- this.musicMx[this.selection[0]].length - 1;
- }
- } else {
- this.selection[1] -= 1;
- }
- this.random = this.randomList.indexOf(
- this.musicMx[this.selection[0]][this.selection[1]]
- );
- page = this.selection[0];
- if (
- this.musics.includes(
- this.musicMx[this.selection[0]][this.selection[1]]
- ) ||
- page !== this.musicMx.length - 1
- )
- break;
- }
- core.playBgm(
- main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
- main.core.ui.music.selection[1]
- ],
- 0
- );
-
- break;
- case "suiji":
- for (;;) {
- if (this.random > 0) {
- this.random -= 1;
- } else {
- this.random = this.randomList.length - 1;
- }
- this.selection[0] = this.musicMx.findIndex((v) =>
- v.includes(this.randomList[this.random])
- );
- this.selection[1] = this.musicMx[this.selection[0]].indexOf(
- this.randomList[this.random]
- );
-
- page = this.selection[0];
- if (
- this.musics.includes(
- this.musicMx[this.selection[0]][this.selection[1]]
- ) ||
- page !== this.musicMx.length - 1
- )
- break;
- }
- core.playBgm(
- main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
- main.core.ui.music.selection[1]
- ],
- 0
- );
-
- break;
- }
- return;
- }
- if (inRect(pos, afterbox)) {
- this.stop = false;
- switch (this.type) {
- case "danqu":
- core.playBgm(
- main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
- main.core.ui.music.selection[1]
- ],
- 0
- );
-
- page = this.selection[0];
- break;
- case "xunhuan":
- for (;;) {
- if (
- this.selection[1] ===
- this.musicMx[this.selection[0]].length - 1
- ) {
- if (this.selection[0] === this.musicMx.length - 1) {
- this.selection[0] = 0;
- this.selection[1] = 0;
- } else {
- this.selection[0] += 1;
- this.selection[1] = 0;
- }
- } else {
- this.selection[1] += 1;
- }
- this.random = this.randomList.indexOf(
- this.musicMx[this.selection[0]][this.selection[1]]
- );
- page = this.selection[0];
- if (
- this.musics.includes(
- this.musicMx[this.selection[0]][this.selection[1]]
- ) ||
- page !== this.musicMx.length - 1
- )
- break;
- }
- core.playBgm(
- main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
- main.core.ui.music.selection[1]
- ],
- 0
- );
-
- break;
- case "suiji":
- for (;;) {
- if (this.random < this.randomList.length - 1) {
- this.random += 1;
- } else {
- this.random = 0;
- }
- this.selection[0] = this.musicMx.findIndex((v) =>
- v.includes(this.randomList[this.random])
- );
- this.selection[1] = this.musicMx[this.selection[0]].indexOf(
- this.randomList[this.random]
- );
-
- page = this.selection[0];
- if (
- this.musics.includes(
- this.musicMx[this.selection[0]][this.selection[1]]
- ) ||
- page !== this.musicMx.length - 1
- )
- break;
- }
- core.playBgm(
- main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
- main.core.ui.music.selection[1]
- ],
- 0
- );
-
- break;
- }
- return;
- }
- if (inRect(pos, typebox)) {
- switch (this.type) {
- case "danqu":
- this.type = "xunhuan";
- break;
- case "xunhuan":
- this.type = "suiji";
- break;
- case "suiji":
- this.type = "danqu";
- break;
- }
- return;
- }
- if (inRect(pos, musicbox)) {
- const index = Math.floor((py - 200) / 100);
- if (page !== this.selection[0] || index !== this.selection[1]) {
- if (
- this.musics.includes(this.musicMx[page][index]) ||
- page !== this.musicMx.length - 1
- ) {
- this.selection[0] = page;
-
- this.selection[1] = index;
- this.randomList.indexOf(
- this.musicMx[this.selection[0]][this.selection[1]]
- );
-
- core.playBgm(
- main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
- main.core.ui.music.selection[1]
- ],
- 0
- );
-
- this.stop = false;
- }
- } else {
- if (this.stop) {
- this.stop = !this.stop;
- core.resumeBgm();
- } else {
- this.stop = !this.stop;
- core.pauseBgm();
- }
- }
- return;
- }
-
- if (inRect(pos, volumebox)) {
- const time = Math.min(Math.max((px - 250) / 800, 0), 1);
- audio.setVolume(time);
- core.plugin.audioSystem.soundPlayer.setVolume(time);
- isvolume = true;
- }
- } else {
- //横屏
- const pageupbox = makeBox([1050, 1100], [200, 100]);
- const pagedownbox = makeBox([1550, 1100], [200, 100]);
- const musicbox = makeBox(
- [900, 100],
- [1000, this.musicMx[page].length * 100]
- );
- const beforebox = makeBox([60, 620], [100, 100]);
- const afterbox = makeBox([450, 620], [100, 100]);
- const playbox = makeBox([200, 570], [200, 200]);
- const typebox = makeBox([620, 600], [120, 120]);
-
- const volumebox = makeBox([100, 990], [600, 20]);
- if (inRect(pos, pageupbox)) {
- if (page !== 0) page -= 1;
- return;
- }
- if (inRect(pos, pagedownbox)) {
- if (page !== this.musicMx.length - 1) page += 1;
- return;
- }
- if (inRect(pos, playbox)) {
- if (this.stop) {
- this.stop = !this.stop;
- core.resumeBgm();
- } else {
- this.stop = !this.stop;
- core.pauseBgm();
- }
- return;
- }
- if (inRect(pos, beforebox)) {
- this.stop = false;
- switch (this.type) {
- case "danqu":
- core.playBgm(
- main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
- main.core.ui.music.selection[1]
- ],
- 0
- );
-
- page = this.selection[0];
-
- break;
- case "xunhuan":
- for (;;) {
- if (this.selection[1] === 0) {
- if (this.selection[0] === 0) {
- this.selection[0] = this.musicMx.length - 1;
- this.selection[1] =
- this.musicMx[this.selection[0]].length - 1;
- } else {
- this.selection[0] -= 1;
- this.selection[1] =
- this.musicMx[this.selection[0]].length - 1;
- }
- } else {
- this.selection[1] -= 1;
- }
- this.random = this.randomList.indexOf(
- this.musicMx[this.selection[0]][this.selection[1]]
- );
- page = this.selection[0];
-
- if (
- this.musics.includes(
- this.musicMx[this.selection[0]][this.selection[1]]
- ) ||
- page !== this.musicMx.length - 1
- )
- break;
- }
- core.playBgm(
- main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
- main.core.ui.music.selection[1]
- ],
- 0
- );
-
- break;
- case "suiji":
- for (;;) {
- if (this.random > 0) {
- this.random -= 1;
- } else {
- this.random = this.randomList.length - 1;
- }
- this.selection[0] = this.musicMx.findIndex((v) =>
- v.includes(this.randomList[this.random])
- );
- this.selection[1] = this.musicMx[this.selection[0]].indexOf(
- this.randomList[this.random]
- );
-
- page = this.selection[0];
-
- if (
- this.musics.includes(
- this.musicMx[this.selection[0]][this.selection[1]]
- ) ||
- page !== this.musicMx.length - 1
- )
- break;
- }
- core.playBgm(
- main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
- main.core.ui.music.selection[1]
- ],
- 0
- );
-
- break;
- }
- return;
- }
- if (inRect(pos, afterbox)) {
- this.stop = false;
- switch (this.type) {
- case "danqu":
- core.playBgm(
- main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
- main.core.ui.music.selection[1]
- ],
- 0
- );
-
- page = this.selection[0];
- break;
- case "xunhuan":
- for (;;) {
- if (
- this.selection[1] ===
- this.musicMx[this.selection[0]].length - 1
- ) {
- if (this.selection[0] === this.musicMx.length - 1) {
- this.selection[0] = 0;
- this.selection[1] = 0;
- } else {
- this.selection[0] += 1;
- this.selection[1] = 0;
- }
- } else {
- this.selection[1] += 1;
- }
- this.randomList.findIndex(
- (v) =>
- v === this.musicMx[this.selection[0]][this.selection[1]]
- );
- page = this.selection[0];
-
- if (
- this.musics.includes(
- this.musicMx[this.selection[0]][this.selection[1]]
- ) ||
- page !== this.musicMx.length - 1
- )
- break;
- }
- core.playBgm(
- main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
- main.core.ui.music.selection[1]
- ],
- 0
- );
-
- break;
- case "suiji":
- for (;;) {
- if (this.random < this.randomList.length - 1) {
- this.random += 1;
- } else {
- this.random = 0;
- }
- this.selection[0] = this.musicMx.findIndex((v) =>
- v.includes(this.randomList[this.random])
- );
- this.selection[1] = this.musicMx[this.selection[0]].indexOf(
- main.core.ui.music.randomList[main.core.ui.music.random]
- );
-
- page = this.selection[0];
- if (
- this.musics.includes(
- this.musicMx[this.selection[0]][this.selection[1]]
- ) ||
- page !== this.musicMx.length - 1
- )
- break;
- }
- core.playBgm(
- main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
- main.core.ui.music.selection[1]
- ],
- 0
- );
-
- break;
- }
- return;
- }
- if (inRect(pos, typebox)) {
- switch (this.type) {
- case "danqu":
- this.type = "xunhuan";
- break;
- case "xunhuan":
- this.type = "suiji";
- break;
- case "suiji":
- this.type = "danqu";
- break;
- }
- return;
- }
- if (inRect(pos, musicbox)) {
- const index = Math.floor((py - 100) / 100);
- if (page !== this.selection[0] || index !== this.selection[1]) {
- if (
- this.musics.includes(this.musicMx[page][index]) ||
- page !== this.musicMx.length - 1
- ) {
- this.selection[0] = page;
- this.selection[1] = index;
- this.randomList.indexOf(
- (v) =>
- v === this.musicMx[this.selection[0]][this.selection[1]]
- );
-
- core.playBgm(
- main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
- main.core.ui.music.selection[1]
- ],
- 0
- );
- this.stop = false;
- }
- } else {
- if (this.stop) {
- this.stop = !this.stop;
- core.resumeBgm();
- } else {
- this.stop = !this.stop;
- core.pauseBgm();
- }
- }
- return;
- }
-
- if (inRect(pos, volumebox)) {
- const time = Math.min(Math.max((px - 100) / 600, 0), 1);
- audio.setVolume(time);
- core.plugin.audioSystem.soundPlayer.setVolume(time);
- isvolume = true;
- }
- }
- }
- mousemove(px, py) {
- if (isvolume) {
- if (core.domStyle.isVertical) {
- const time = Math.min(Math.max((px - 250) / 800, 0), 1);
- audio.setVolume(time);
- core.plugin.audioSystem.soundPlayer.setVolume(time);
- } else {
- const time = Math.min(Math.max((px - 100) / 600, 0), 1);
- audio.setVolume(time);
- core.plugin.audioSystem.soundPlayer.setVolume(time);
- }
- }
- }
-
- drawUI() {
- //绘制页面
- core.clearMap(music);
- const bgVertical = core.material.images.images["bg_2010.webp"]; //竖屏背景
- const bg = core.material.images.images["bg_5043.webp"]; //竖屏背景
- if (core.domStyle.isVertical) {
- //竖屏
-
- core.fillRect(ctx, 0, 0, 1248, 2028, "#000000"); //黑色背景
- ctx.globalAlpha = 0.3; //透明度
- if (bgVertical)
- ctx.drawImage(bgVertical, 0, 0, 1280, 1500, 0, 0, 1248, 2028); //绘制半透明背景图片
- ctx.globalAlpha = 1; //恢复为不透明
-
- core.setTextAlign(ctx, "center");
- core.fillBoldText1(
- ctx,
- "◀离开",
- 110,
- 100,
- "#FFFFFF",
- "#000000",
- 6,
- core.ui._buildFont(66, true)
- );
-
- ctx.strokeStyle = "#FFFFFF";
- ctx.lineWidth = 3;
- ctx.beginPath();
- ctx.moveTo(100, 200);
- ctx.lineTo(1148, 200);
-
- ctx.stroke();
- let posy = 300;
- const indexList = this.musicMx[page];
- core.setTextAlign(ctx, "left");
- for (let i = 0; i < indexList.length; i++) {
- const text = this.musicname[indexList[i]];
- if (
- this.musics.includes(this.musicMx[page][i]) ||
- page !== this.musicMx.length - 1
- ) {
- core.fillBoldText1(
- ctx,
- text,
- 150,
- posy - 30,
- page === this.selection[0] && i === this.selection[1] ?
- "#FFFFFF" :
- "#444444",
- "#000000",
- 6,
- core.ui._buildFont(66, true)
- );
-
- ctx.strokeStyle = "#FFFFFF";
- ctx.lineWidth = 3;
- ctx.beginPath();
- ctx.moveTo(100, posy);
- ctx.lineTo(1148, posy);
- ctx.stroke();
- }
- posy += 100;
- }
- ctx.beginPath();
- ctx.moveTo(100, 1210);
- ctx.lineTo(1148, 1210);
- ctx.moveTo(100, 1200);
- ctx.lineTo(1148, 1200);
- ctx.stroke();
-
- core.fillBoldText1(
- ctx,
- "上一页",
- 100,
- 1300,
- page === 0 ? "#444444" : "#FFFFFF",
- "#000000",
- 6,
- core.ui._buildFont(66, true)
- );
-
- core.fillBoldText1(
- ctx,
- page + 1 + "/" + this.musicMx.length,
- 580,
- 1300,
- "#FFFFFF",
- "#000000",
- 6,
- core.ui._buildFont(66, true)
- );
- core.fillBoldText1(
- ctx,
- "下一页",
- 950,
- 1300,
- page === this.musicMx.length - 1 ? "#444444" : "#FFFFFF",
- "#000000",
- 6,
- core.ui._buildFont(66, true)
- );
-
- ctx.strokeStyle = "#ffffff";
- ctx.lineWidth = 3;
-
- core.fillBoldText(
- ctx,
- "|",
- 100,
- 1697,
- "#FFFFFF",
- 6,
- core.ui._buildFont(96, true)
- );
- core.fillBoldText(
- ctx,
- "◀",
- 115,
- 1700,
- "#FFFFFF",
- 6,
- core.ui._buildFont(96, true)
- );
-
- ctx.beginPath();
- ctx.arc(505, 1670, 80, 0, 3 * Math.PI);
- ctx.stroke();
- core.fillText(
- ctx,
- "|",
- 835,
- 1697,
- "#FFFFFF",
- core.ui._buildFont(96, true)
- );
- core.fillText(
- ctx,
- "▶",
- 785,
- 1700,
- "#FFFFFF",
- core.ui._buildFont(96, true)
- );
-
- if (this.stop) {
- core.fillText(
- ctx,
- "▶",
- 473,
- 1700,
- "#FFFFFF",
- core.ui._buildFont(96, true)
- );
- } else {
- core.fillText(
- ctx,
- "||",
- 453,
- 1700,
- "#FFFFFF",
- core.ui._buildFont(96, true)
- );
- }
-
- const img = core.material.images.images[this.type + ".webp"];
- if (img) ctx.drawImage(img, 1000, 1555, 200, 200);
- core.setTextAlign(ctx, "center");
- ctx.font = "bold 52px Verdana";
- ctx.fillText("当前歌曲", 625, 1397);
- ctx.fillText(
- this.musicname[this.musicMx[this.selection[0]][this.selection[1]]],
- 625,
- 1507
- );
-
- ctx.fillStyle = "#ffffff";
- ctx.font = "bold 48px Verdana";
- ctx.fillText("音量", 150, 1970);
- ctx.lineWidth = 3;
- ctx.beginPath();
- ctx.moveTo(250, 1950);
- ctx.lineTo(1050, 1950);
- ctx.stroke();
- ctx.strokeStyle = "#ffffff";
- ctx.lineWidth = 9;
- ctx.fillStyle = "rgba(255,255,255,0.5)";
-
- ctx.beginPath();
- ctx.moveTo(250, 1950);
- ctx.lineTo(800 * audio.getVolume() + 250, 1950);
- ctx.stroke();
- ctx.beginPath();
- ctx.arc(800 * audio.getVolume() + 250, 1950, 10, 0, 2 * Math.PI);
- ctx.fill();
- core.fillBoldText1(
- ctx,
- Math.floor(100 * audio.getVolume()),
- 1120,
- 1970,
- "#FFFFFF",
- "#000000",
- 6,
- core.ui._buildFont(56, true)
- );
- } else {
- //横屏
-
- core.fillRect(ctx, 0, 0, 2028, 1248, "#000000"); //黑色背景
- ctx.globalAlpha = 0.5; //透明度
- if (bg) ctx.drawImage(bg, 0, 0, 1280, 720, 0, 0, 2028, 1248); //绘制半透明背景图片
- ctx.globalAlpha = 1; //恢复为不透明
- core.setTextAlign(ctx, "center");
-
- core.fillBoldText1(
- ctx,
- "◀离开",
- 110,
- 100,
- "#FFFFFF",
- "#000000",
- 6,
- core.ui._buildFont(66, true)
- );
-
- ctx.strokeStyle = "#FFFFFF";
- ctx.lineWidth = 3;
- ctx.beginPath();
- ctx.moveTo(800, 100);
- ctx.lineTo(800, 1148);
- ctx.moveTo(900, 100);
- ctx.lineTo(1900, 100);
- ctx.stroke();
- let posy = 200;
- const indexList = this.musicMx[page];
- core.setTextAlign(ctx, "left");
- for (let i = 0; i < indexList.length; i++) {
- const text = this.musicname[indexList[i]];
- if (
- this.musics.includes(this.musicMx[page][i]) ||
- page !== this.musicMx.length - 1
- ) {
- core.fillBoldText1(
- ctx,
- text,
- 950,
- posy - 30,
- page === this.selection[0] && i === this.selection[1] ?
- "#FFFFFF" :
- "#444444",
- "#000000",
- 6,
- core.ui._buildFont(66, true)
- );
-
- ctx.strokeStyle = "#FFFFFF";
- ctx.lineWidth = 3;
- ctx.beginPath();
- ctx.moveTo(900, posy);
- ctx.lineTo(1900, posy);
- ctx.stroke();
- }
- posy += 100;
- }
- core.fillBoldText1(
- ctx,
- "上一页",
- 1050,
- 1200 - 30,
- page === 0 ? "#444444" : "#FFFFFF",
- "#000000",
- 6,
- core.ui._buildFont(66, true)
- );
-
- core.fillBoldText1(
- ctx,
- page + 1 + "/" + this.musicMx.length,
- 1350,
- 1200 - 30,
- "#FFFFFF",
- "#000000",
- 6,
- core.ui._buildFont(66, true)
- );
- core.fillBoldText1(
- ctx,
- "下一页",
- 1550,
- 1200 - 30,
- page === this.musicMx.length - 1 ? "#444444" : "#FFFFFF",
- "#000000",
- 6,
- core.ui._buildFont(66, true)
- );
- ctx.strokeStyle = "#ffffff";
- ctx.lineWidth = 3;
-
- core.fillText(
- ctx,
- "|",
- 55,
- 697,
- "#FFFFFF",
- core.ui._buildFont(96, true)
- );
- core.fillText(
- ctx,
- "◀",
- 70,
- 700,
- "#FFFFFF",
- core.ui._buildFont(96, true)
- );
-
- ctx.beginPath();
- ctx.arc(295, 670, 80, 0, 2 * Math.PI);
- ctx.stroke();
- if (this.stop) {
- core.fillText(
- ctx,
- "▶",
- 265,
- 700,
- "#FFFFFF",
- core.ui._buildFont(96, true)
- );
- } else {
- core.fillText(
- ctx,
- "||",
- 245,
- 700,
- "#FFFFFF",
- core.ui._buildFont(96, true)
- );
- }
- core.fillText(
- ctx,
- "|",
- 495,
- 697,
- "#FFFFFF",
- core.ui._buildFont(96, true)
- );
- core.fillText(
- ctx,
- "▶",
- 450,
- 700,
- "#FFFFFF",
- core.ui._buildFont(96, true)
- );
-
- ctx.font = "bold 48px Verdana";
- ctx.fillText("音量", 350, 900);
- ctx.beginPath();
- ctx.moveTo(100, 1000);
- ctx.lineTo(700, 1000);
- ctx.stroke();
- ctx.strokeStyle = "#ffffff";
- ctx.lineWidth = 9;
- ctx.fillStyle = "rgba(255,255,255,0.5)";
-
- ctx.beginPath();
- ctx.moveTo(100, 1000);
- ctx.lineTo(600 * audio.getVolume() + 100, 1000);
- ctx.stroke();
- ctx.beginPath();
- ctx.arc(600 * audio.getVolume() + 100, 1000, 10, 0, 2 * Math.PI);
- ctx.fill();
- core.fillBoldText1(
- ctx,
- Math.floor(100 * audio.getVolume()),
- 720,
- 1010,
- "#FFFFFF",
- "#000000",
- 6,
- core.ui._buildFont(56, true)
- );
- const img = core.material.images.images[this.type + ".webp"];
- if (img) ctx.drawImage(img, 580, 560, 200, 200);
- core.setTextAlign(ctx, "center");
- ctx.font = "bold 48px Verdana";
- ctx.fillText("当前歌曲", 400, 297);
- ctx.fillText(
- this.musicname[this.musicMx[this.selection[0]][this.selection[1]]],
- 400,
- 397
- );
- }
- }
- }
- core.ui.music = new musicclass();
- main.dom.musicMode.onclick = function () {
- //点击开始页面的CG MODE进入cg回廊
- if (
- (core.getLocalStorage("musics") &&
- core.getLocalStorage("musics").length === 0) ||
- !core.getLocalStorage("musics")
- )
- core.setLocalStorage("musics", ["theme.mp3"]);
- core.ui.music.musics = core.getLocalStorage("musics");
- core.playBgm(
- main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
- main.core.ui.music.selection[1]
- ],
- 0
- );
-
- const arr = main.core.ui.music.musicMx.flat(Infinity);
- main.core.ui.music.randomList = shuffle(arr);
- main.core.ui.music.random = main.core.ui.music.randomList.indexOf(
- main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
- main.core.ui.music.selection[1]
- ]
- );
- page = 0;
- music.style.display = "block";
- let time = 0;
- core.registerAnimationFrame("music", null, (temptime) => {
- if (temptime > time + 1000 / 60) {
- time = temptime;
- main.core.ui.music.update();
- const duration =
- core.plugin.audioSystem.bgmController.player.getRoute(
- "bgms." +
- main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
- main.core.ui.music.selection[1]
- ]
- ).duration;
-
- const currentTime =
- core.plugin.audioSystem.bgmController.player.getRoute(
- "bgms." +
- main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
- main.core.ui.music.selection[1]
- ]
- ).currentTime;
- if (currentTime && duration && duration - currentTime < 0.05) {
- if (core.domStyle.isVertical) {
- core.ui.music.mousedown(830, 1770);
- } else {
- core.ui.music.mousedown(475, 765);
- }
- }
- }
- });
- };
- loader.prototype.loadOneMusic = function (name) {
- /* var music = new Audio();
+ // 在此增加新插件
+ const music = document.createElement("canvas");
+ music.style.position = "absolute";
+ music.style.zIndex = 300;
+ music.style.display = "none";
+ music.id = "music";
+ main.dom.gameGroup.insertAdjacentElement("afterend", music);
+ music.style.top = "50%";
+ music.style.left = "50%";
+ music.style.transform = "translate(-50%,-50%)";
+ const ctx = music.getContext("2d");
+ main.dom.music = music;
+
+ const audio = core.plugin.audioSystem.bgmController;
+
+ let page = 0; //初始页面
+
+ let isvolume = false;
+
+ function shuffle(arr) {
+ let n = arr.length,
+ random;
+ while (n) {
+ random = (Math.random() * n--) >>> 0;
+ [arr[n], arr[random]] = [arr[random], arr[n]];
+ }
+ return arr;
+ }
+ music.addEventListener("mousedown", function (e) {
+ e.stopPropagation();
+ const left = core.dom.gameGroup.offsetLeft;
+ const top = core.dom.gameGroup.offsetTop;
+ const px = Math.floor((e.clientX - left) / core.domStyle.scale),
+ py = Math.floor((e.clientY - top) / core.domStyle.scale);
+ core.ui.music.mousedown(px * 3, py * 3);
+ });
+ music.addEventListener("mousemove", function (e) {
+ e.stopPropagation();
+ const left = core.dom.gameGroup.offsetLeft;
+ const top = core.dom.gameGroup.offsetTop;
+ const px = Math.floor((e.clientX - left) / core.domStyle.scale),
+ py = Math.floor((e.clientY - top) / core.domStyle.scale);
+ core.ui.music.mousemove(px * 3, py * 3);
+ });
+ music.addEventListener("mouseup", function (e) {
+ e.stopPropagation();
+
+ isvolume = false;
+ });
+ music.addEventListener("mouseleave", function (e) {
+ e.stopPropagation();
+
+ isvolume = false;
+ });
+ music.addEventListener("touchstart", function (e) {
+ e.preventDefault();
+ const left = core.dom.gameGroup.offsetLeft;
+ const top = core.dom.gameGroup.offsetTop;
+ const px = Math.floor(
+ (e.touches[0].clientX - left) / core.domStyle.scale
+ ),
+ py = Math.floor((e.touches[0].clientY - top) / core.domStyle.scale);
+ core.ui.music.mousedown(px * 3, py * 3);
+ });
+ music.addEventListener("touchmove", function (e) {
+ e.stopPropagation();
+ const left = core.dom.gameGroup.offsetLeft;
+ const top = core.dom.gameGroup.offsetTop;
+ const px = Math.floor(
+ (e.touches[0].clientX - left) / core.domStyle.scale
+ ),
+ py = Math.floor((e.touches[0].clientY - top) / core.domStyle.scale);
+ core.ui.music.mousemove(px * 3, py * 3);
+ });
+ music.addEventListener("touchend", function (e) {
+ e.stopPropagation();
+
+ isvolume = false;
+ });
+ music.addEventListener("touchcancel", function (e) {
+ e.stopPropagation();
+
+ isvolume = false;
+ });
+
+ class musicclass {
+ constructor() {
+ this.musics = ["theme.mp3"];
+ //music列表
+ //需全塔属性注册并保存在bgms文件夹,每个数组为显示的一页内容
+ this.musicMx = [
+ [
+ "Crawler.opus",
+ "Blood_Stain.opus",
+ "Blind_Alley.opus",
+ "Halbmond.opus",
+ ],
+ ["theme.mp3", "op.opus", "Asphodelus_Ceui.opus", "ed.opus"],
+ ];
+ //音乐别名(将在播放器内显示的音乐名,music列表内的都要有对应歌名)
+ this.musicname = {
+ "Asphodelus_Ceui.opus": "Asphodelus (Full.ver)",
+ "Blind_Alley.opus": "Blind Alley",
+ "Crawler.opus": "Crawler",
+ "op.opus": "Asphodelus",
+ "theme.mp3": "One of Episodes",
+ "ed.opus": "親愛なる世界へ",
+ "Blood_Stain.opus": "Blood Stain",
+ "Halbmond.opus": "Halbmond",
+ };
+ this.selection = [0, 0];
+ this.stop = false;
+ this.type = "xunhuan";
+ this.randomList = [];
+ this.random = 0;
+ }
+
+ //更新
+ update() {
+ this.background();
+ this.drawUI();
+ }
+ background() {
+ //画布大小设置
+ if (core.domStyle.isVertical) {
+ music.width = 1248;
+ music.height = 2028;
+ } else {
+ music.width = 2028;
+ music.height = 1248;
+ }
+ }
+
+ mousedown(px, py) {
+ //鼠标按下时
+
+ const makeBox = ([x, y], [w, h]) => {
+ return [
+ [x, y],
+ [x + w, y + h],
+ ];
+ };
+ const inRect = ([x, y], [[sx, sy], [dx, dy]]) => {
+ return sx <= x && x <= dx && sy <= y && y <= dy;
+ };
+ const pos = [px, py];
+ const backbox = makeBox([15, 35], [210, 90]);
+ if (inRect(pos, backbox)) {
+ //离开按钮是一致的,其余的记区分横竖屏
+ music.style.display = "none";
+ core.clearMap(ctx);
+
+ core.unregisterAnimationFrame("music");
+ core.restart();
+
+ return;
+ }
+ if (core.domStyle.isVertical) {
+ //竖屏
+
+ const pageupbox = makeBox([100, 1230], [200, 100]);
+ const pagedownbox = makeBox([950, 1230], [200, 100]);
+ const musicbox = makeBox(
+ [100, 200],
+ [1048, this.musicMx[page].length * 100]
+ );
+ const beforebox = makeBox([120, 1620], [100, 100]);
+ const afterbox = makeBox([780, 1620], [100, 100]);
+ const playbox = makeBox([420, 1580], [200, 200]);
+ const typebox = makeBox([1040, 1600], [120, 120]);
+
+ const volumebox = makeBox([250, 1940], [1050, 20]);
+ if (inRect(pos, pageupbox)) {
+ if (page !== 0) page -= 1;
+ return;
+ }
+ if (inRect(pos, pagedownbox)) {
+ if (page !== this.musicMx.length - 1) page += 1;
+ return;
+ }
+ if (inRect(pos, playbox)) {
+ if (this.stop) {
+ this.stop = !this.stop;
+
+ core.resumeBgm();
+ } else {
+ this.stop = !this.stop;
+ core.pauseBgm();
+ }
+ return;
+ }
+ if (inRect(pos, beforebox)) {
+ this.stop = false;
+ switch (this.type) {
+ case "danqu":
+ core.playBgm(
+ main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+ main.core.ui.music.selection[1]
+ ],
+ 0
+ );
+
+ page = this.selection[0];
+
+ break;
+ case "xunhuan":
+ for (;;) {
+ if (this.selection[1] === 0) {
+ if (this.selection[0] === 0) {
+ this.selection[0] = this.musicMx.length - 1;
+ this.selection[1] =
+ this.musicMx[this.selection[0]].length - 1;
+ } else {
+ this.selection[0] -= 1;
+ this.selection[1] =
+ this.musicMx[this.selection[0]].length - 1;
+ }
+ } else {
+ this.selection[1] -= 1;
+ }
+ this.random = this.randomList.indexOf(
+ this.musicMx[this.selection[0]][this.selection[1]]
+ );
+ page = this.selection[0];
+ if (
+ this.musics.includes(
+ this.musicMx[this.selection[0]][this.selection[1]]
+ ) ||
+ page !== this.musicMx.length - 1
+ )
+ break;
+ }
+ core.playBgm(
+ main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+ main.core.ui.music.selection[1]
+ ],
+ 0
+ );
+
+ break;
+ case "suiji":
+ for (;;) {
+ if (this.random > 0) {
+ this.random -= 1;
+ } else {
+ this.random = this.randomList.length - 1;
+ }
+ this.selection[0] = this.musicMx.findIndex((v) =>
+ v.includes(this.randomList[this.random])
+ );
+ this.selection[1] = this.musicMx[this.selection[0]].indexOf(
+ this.randomList[this.random]
+ );
+
+ page = this.selection[0];
+ if (
+ this.musics.includes(
+ this.musicMx[this.selection[0]][this.selection[1]]
+ ) ||
+ page !== this.musicMx.length - 1
+ )
+ break;
+ }
+ core.playBgm(
+ main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+ main.core.ui.music.selection[1]
+ ],
+ 0
+ );
+
+ break;
+ }
+ return;
+ }
+ if (inRect(pos, afterbox)) {
+ this.stop = false;
+ switch (this.type) {
+ case "danqu":
+ core.playBgm(
+ main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+ main.core.ui.music.selection[1]
+ ],
+ 0
+ );
+
+ page = this.selection[0];
+ break;
+ case "xunhuan":
+ for (;;) {
+ if (
+ this.selection[1] ===
+ this.musicMx[this.selection[0]].length - 1
+ ) {
+ if (this.selection[0] === this.musicMx.length - 1) {
+ this.selection[0] = 0;
+ this.selection[1] = 0;
+ } else {
+ this.selection[0] += 1;
+ this.selection[1] = 0;
+ }
+ } else {
+ this.selection[1] += 1;
+ }
+ this.random = this.randomList.indexOf(
+ this.musicMx[this.selection[0]][this.selection[1]]
+ );
+ page = this.selection[0];
+ if (
+ this.musics.includes(
+ this.musicMx[this.selection[0]][this.selection[1]]
+ ) ||
+ page !== this.musicMx.length - 1
+ )
+ break;
+ }
+ core.playBgm(
+ main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+ main.core.ui.music.selection[1]
+ ],
+ 0
+ );
+
+ break;
+ case "suiji":
+ for (;;) {
+ if (this.random < this.randomList.length - 1) {
+ this.random += 1;
+ } else {
+ this.random = 0;
+ }
+ this.selection[0] = this.musicMx.findIndex((v) =>
+ v.includes(this.randomList[this.random])
+ );
+ this.selection[1] = this.musicMx[this.selection[0]].indexOf(
+ this.randomList[this.random]
+ );
+
+ page = this.selection[0];
+ if (
+ this.musics.includes(
+ this.musicMx[this.selection[0]][this.selection[1]]
+ ) ||
+ page !== this.musicMx.length - 1
+ )
+ break;
+ }
+ core.playBgm(
+ main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+ main.core.ui.music.selection[1]
+ ],
+ 0
+ );
+
+ break;
+ }
+ return;
+ }
+ if (inRect(pos, typebox)) {
+ switch (this.type) {
+ case "danqu":
+ this.type = "xunhuan";
+ break;
+ case "xunhuan":
+ this.type = "suiji";
+ break;
+ case "suiji":
+ this.type = "danqu";
+ break;
+ }
+ return;
+ }
+ if (inRect(pos, musicbox)) {
+ const index = Math.floor((py - 200) / 100);
+ if (page !== this.selection[0] || index !== this.selection[1]) {
+ if (
+ this.musics.includes(this.musicMx[page][index]) ||
+ page !== this.musicMx.length - 1
+ ) {
+ this.selection[0] = page;
+
+ this.selection[1] = index;
+ this.randomList.indexOf(
+ this.musicMx[this.selection[0]][this.selection[1]]
+ );
+
+ core.playBgm(
+ main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+ main.core.ui.music.selection[1]
+ ],
+ 0
+ );
+
+ this.stop = false;
+ }
+ } else {
+ if (this.stop) {
+ this.stop = !this.stop;
+ core.resumeBgm();
+ } else {
+ this.stop = !this.stop;
+ core.pauseBgm();
+ }
+ }
+ return;
+ }
+
+ if (inRect(pos, volumebox)) {
+ const time = Math.min(Math.max((px - 250) / 800, 0), 1);
+ audio.setVolume(time);
+ core.plugin.audioSystem.soundPlayer.setVolume(time);
+ isvolume = true;
+ }
+ } else {
+ //横屏
+ const pageupbox = makeBox([1050, 1100], [200, 100]);
+ const pagedownbox = makeBox([1550, 1100], [200, 100]);
+ const musicbox = makeBox(
+ [900, 100],
+ [1000, this.musicMx[page].length * 100]
+ );
+ const beforebox = makeBox([60, 620], [100, 100]);
+ const afterbox = makeBox([450, 620], [100, 100]);
+ const playbox = makeBox([200, 570], [200, 200]);
+ const typebox = makeBox([620, 600], [120, 120]);
+
+ const volumebox = makeBox([100, 990], [600, 20]);
+ if (inRect(pos, pageupbox)) {
+ if (page !== 0) page -= 1;
+ return;
+ }
+ if (inRect(pos, pagedownbox)) {
+ if (page !== this.musicMx.length - 1) page += 1;
+ return;
+ }
+ if (inRect(pos, playbox)) {
+ if (this.stop) {
+ this.stop = !this.stop;
+ core.resumeBgm();
+ } else {
+ this.stop = !this.stop;
+ core.pauseBgm();
+ }
+ return;
+ }
+ if (inRect(pos, beforebox)) {
+ this.stop = false;
+ switch (this.type) {
+ case "danqu":
+ core.playBgm(
+ main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+ main.core.ui.music.selection[1]
+ ],
+ 0
+ );
+
+ page = this.selection[0];
+
+ break;
+ case "xunhuan":
+ for (;;) {
+ if (this.selection[1] === 0) {
+ if (this.selection[0] === 0) {
+ this.selection[0] = this.musicMx.length - 1;
+ this.selection[1] =
+ this.musicMx[this.selection[0]].length - 1;
+ } else {
+ this.selection[0] -= 1;
+ this.selection[1] =
+ this.musicMx[this.selection[0]].length - 1;
+ }
+ } else {
+ this.selection[1] -= 1;
+ }
+ this.random = this.randomList.indexOf(
+ this.musicMx[this.selection[0]][this.selection[1]]
+ );
+ page = this.selection[0];
+
+ if (
+ this.musics.includes(
+ this.musicMx[this.selection[0]][this.selection[1]]
+ ) ||
+ page !== this.musicMx.length - 1
+ )
+ break;
+ }
+ core.playBgm(
+ main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+ main.core.ui.music.selection[1]
+ ],
+ 0
+ );
+
+ break;
+ case "suiji":
+ for (;;) {
+ if (this.random > 0) {
+ this.random -= 1;
+ } else {
+ this.random = this.randomList.length - 1;
+ }
+ this.selection[0] = this.musicMx.findIndex((v) =>
+ v.includes(this.randomList[this.random])
+ );
+ this.selection[1] = this.musicMx[this.selection[0]].indexOf(
+ this.randomList[this.random]
+ );
+
+ page = this.selection[0];
+
+ if (
+ this.musics.includes(
+ this.musicMx[this.selection[0]][this.selection[1]]
+ ) ||
+ page !== this.musicMx.length - 1
+ )
+ break;
+ }
+ core.playBgm(
+ main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+ main.core.ui.music.selection[1]
+ ],
+ 0
+ );
+
+ break;
+ }
+ return;
+ }
+ if (inRect(pos, afterbox)) {
+ this.stop = false;
+ switch (this.type) {
+ case "danqu":
+ core.playBgm(
+ main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+ main.core.ui.music.selection[1]
+ ],
+ 0
+ );
+
+ page = this.selection[0];
+ break;
+ case "xunhuan":
+ for (;;) {
+ if (
+ this.selection[1] ===
+ this.musicMx[this.selection[0]].length - 1
+ ) {
+ if (this.selection[0] === this.musicMx.length - 1) {
+ this.selection[0] = 0;
+ this.selection[1] = 0;
+ } else {
+ this.selection[0] += 1;
+ this.selection[1] = 0;
+ }
+ } else {
+ this.selection[1] += 1;
+ }
+ this.randomList.findIndex(
+ (v) =>
+ v === this.musicMx[this.selection[0]][this.selection[1]]
+ );
+ page = this.selection[0];
+
+ if (
+ this.musics.includes(
+ this.musicMx[this.selection[0]][this.selection[1]]
+ ) ||
+ page !== this.musicMx.length - 1
+ )
+ break;
+ }
+ core.playBgm(
+ main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+ main.core.ui.music.selection[1]
+ ],
+ 0
+ );
+
+ break;
+ case "suiji":
+ for (;;) {
+ if (this.random < this.randomList.length - 1) {
+ this.random += 1;
+ } else {
+ this.random = 0;
+ }
+ this.selection[0] = this.musicMx.findIndex((v) =>
+ v.includes(this.randomList[this.random])
+ );
+ this.selection[1] = this.musicMx[this.selection[0]].indexOf(
+ main.core.ui.music.randomList[main.core.ui.music.random]
+ );
+
+ page = this.selection[0];
+ if (
+ this.musics.includes(
+ this.musicMx[this.selection[0]][this.selection[1]]
+ ) ||
+ page !== this.musicMx.length - 1
+ )
+ break;
+ }
+ core.playBgm(
+ main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+ main.core.ui.music.selection[1]
+ ],
+ 0
+ );
+
+ break;
+ }
+ return;
+ }
+ if (inRect(pos, typebox)) {
+ switch (this.type) {
+ case "danqu":
+ this.type = "xunhuan";
+ break;
+ case "xunhuan":
+ this.type = "suiji";
+ break;
+ case "suiji":
+ this.type = "danqu";
+ break;
+ }
+ return;
+ }
+ if (inRect(pos, musicbox)) {
+ const index = Math.floor((py - 100) / 100);
+ if (page !== this.selection[0] || index !== this.selection[1]) {
+ if (
+ this.musics.includes(this.musicMx[page][index]) ||
+ page !== this.musicMx.length - 1
+ ) {
+ this.selection[0] = page;
+ this.selection[1] = index;
+ this.randomList.indexOf(
+ (v) =>
+ v === this.musicMx[this.selection[0]][this.selection[1]]
+ );
+
+ core.playBgm(
+ main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+ main.core.ui.music.selection[1]
+ ],
+ 0
+ );
+ this.stop = false;
+ }
+ } else {
+ if (this.stop) {
+ this.stop = !this.stop;
+ core.resumeBgm();
+ } else {
+ this.stop = !this.stop;
+ core.pauseBgm();
+ }
+ }
+ return;
+ }
+
+ if (inRect(pos, volumebox)) {
+ const time = Math.min(Math.max((px - 100) / 600, 0), 1);
+ audio.setVolume(time);
+ core.plugin.audioSystem.soundPlayer.setVolume(time);
+ isvolume = true;
+ }
+ }
+ }
+ mousemove(px, py) {
+ if (isvolume) {
+ if (core.domStyle.isVertical) {
+ const time = Math.min(Math.max((px - 250) / 800, 0), 1);
+ audio.setVolume(time);
+ core.plugin.audioSystem.soundPlayer.setVolume(time);
+ } else {
+ const time = Math.min(Math.max((px - 100) / 600, 0), 1);
+ audio.setVolume(time);
+ core.plugin.audioSystem.soundPlayer.setVolume(time);
+ }
+ }
+ }
+
+ drawUI() {
+ //绘制页面
+ core.clearMap(music);
+ const bgVertical = core.material.images.images["bg_2010.webp"]; //竖屏背景
+ const bg = core.material.images.images["bg_5043.webp"]; //竖屏背景
+ if (core.domStyle.isVertical) {
+ //竖屏
+
+ core.fillRect(ctx, 0, 0, 1248, 2028, "#000000"); //黑色背景
+ ctx.globalAlpha = 0.3; //透明度
+ if (bgVertical)
+ ctx.drawImage(bgVertical, 0, 0, 1280, 1500, 0, 0, 1248, 2028); //绘制半透明背景图片
+ ctx.globalAlpha = 1; //恢复为不透明
+
+ core.setTextAlign(ctx, "center");
+ core.fillBoldText1(
+ ctx,
+ "◀离开",
+ 110,
+ 100,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(66, true)
+ );
+
+ ctx.strokeStyle = "#FFFFFF";
+ ctx.lineWidth = 3;
+ ctx.beginPath();
+ ctx.moveTo(100, 200);
+ ctx.lineTo(1148, 200);
+
+ ctx.stroke();
+ let posy = 300;
+ const indexList = this.musicMx[page];
+ core.setTextAlign(ctx, "left");
+ for (let i = 0; i < indexList.length; i++) {
+ const text = this.musicname[indexList[i]];
+ if (
+ this.musics.includes(this.musicMx[page][i]) ||
+ page !== this.musicMx.length - 1
+ ) {
+ core.fillBoldText1(
+ ctx,
+ text,
+ 150,
+ posy - 30,
+ page === this.selection[0] && i === this.selection[1]
+ ? "#FFFFFF"
+ : "#444444",
+ "#000000",
+ 6,
+ core.ui._buildFont(66, true)
+ );
+
+ ctx.strokeStyle = "#FFFFFF";
+ ctx.lineWidth = 3;
+ ctx.beginPath();
+ ctx.moveTo(100, posy);
+ ctx.lineTo(1148, posy);
+ ctx.stroke();
+ }
+ posy += 100;
+ }
+ ctx.beginPath();
+ ctx.moveTo(100, 1210);
+ ctx.lineTo(1148, 1210);
+ ctx.moveTo(100, 1200);
+ ctx.lineTo(1148, 1200);
+ ctx.stroke();
+
+ core.fillBoldText1(
+ ctx,
+ "上一页",
+ 100,
+ 1300,
+ page === 0 ? "#444444" : "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(66, true)
+ );
+
+ core.fillBoldText1(
+ ctx,
+ page + 1 + "/" + this.musicMx.length,
+ 580,
+ 1300,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(66, true)
+ );
+ core.fillBoldText1(
+ ctx,
+ "下一页",
+ 950,
+ 1300,
+ page === this.musicMx.length - 1 ? "#444444" : "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(66, true)
+ );
+
+ ctx.strokeStyle = "#ffffff";
+ ctx.lineWidth = 3;
+
+ core.fillBoldText(
+ ctx,
+ "|",
+ 100,
+ 1697,
+ "#FFFFFF",
+ 6,
+ core.ui._buildFont(96, true)
+ );
+ core.fillBoldText(
+ ctx,
+ "◀",
+ 115,
+ 1700,
+ "#FFFFFF",
+ 6,
+ core.ui._buildFont(96, true)
+ );
+
+ ctx.beginPath();
+ ctx.arc(505, 1670, 80, 0, 3 * Math.PI);
+ ctx.stroke();
+ core.fillText(
+ ctx,
+ "|",
+ 835,
+ 1697,
+ "#FFFFFF",
+ core.ui._buildFont(96, true)
+ );
+ core.fillText(
+ ctx,
+ "▶",
+ 785,
+ 1700,
+ "#FFFFFF",
+ core.ui._buildFont(96, true)
+ );
+
+ if (this.stop) {
+ core.fillText(
+ ctx,
+ "▶",
+ 473,
+ 1700,
+ "#FFFFFF",
+ core.ui._buildFont(96, true)
+ );
+ } else {
+ core.fillText(
+ ctx,
+ "||",
+ 453,
+ 1700,
+ "#FFFFFF",
+ core.ui._buildFont(96, true)
+ );
+ }
+
+ const img = core.material.images.images[this.type + ".webp"];
+ if (img) ctx.drawImage(img, 1000, 1555, 200, 200);
+ core.setTextAlign(ctx, "center");
+ ctx.font = "bold 52px Verdana";
+ ctx.fillText("当前歌曲", 625, 1397);
+ ctx.fillText(
+ this.musicname[this.musicMx[this.selection[0]][this.selection[1]]],
+ 625,
+ 1507
+ );
+
+ ctx.fillStyle = "#ffffff";
+ ctx.font = "bold 48px Verdana";
+ ctx.fillText("音量", 150, 1970);
+ ctx.lineWidth = 3;
+ ctx.beginPath();
+ ctx.moveTo(250, 1950);
+ ctx.lineTo(1050, 1950);
+ ctx.stroke();
+ ctx.strokeStyle = "#ffffff";
+ ctx.lineWidth = 9;
+ ctx.fillStyle = "rgba(255,255,255,0.5)";
+
+ ctx.beginPath();
+ ctx.moveTo(250, 1950);
+ ctx.lineTo(800 * audio.getVolume() + 250, 1950);
+ ctx.stroke();
+ ctx.beginPath();
+ ctx.arc(800 * audio.getVolume() + 250, 1950, 10, 0, 2 * Math.PI);
+ ctx.fill();
+ core.fillBoldText1(
+ ctx,
+ Math.floor(100 * audio.getVolume()),
+ 1120,
+ 1970,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(56, true)
+ );
+ } else {
+ //横屏
+
+ core.fillRect(ctx, 0, 0, 2028, 1248, "#000000"); //黑色背景
+ ctx.globalAlpha = 0.5; //透明度
+ if (bg) ctx.drawImage(bg, 0, 0, 1280, 720, 0, 0, 2028, 1248); //绘制半透明背景图片
+ ctx.globalAlpha = 1; //恢复为不透明
+ core.setTextAlign(ctx, "center");
+
+ core.fillBoldText1(
+ ctx,
+ "◀离开",
+ 110,
+ 100,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(66, true)
+ );
+
+ ctx.strokeStyle = "#FFFFFF";
+ ctx.lineWidth = 3;
+ ctx.beginPath();
+ ctx.moveTo(800, 100);
+ ctx.lineTo(800, 1148);
+ ctx.moveTo(900, 100);
+ ctx.lineTo(1900, 100);
+ ctx.stroke();
+ let posy = 200;
+ const indexList = this.musicMx[page];
+ core.setTextAlign(ctx, "left");
+ for (let i = 0; i < indexList.length; i++) {
+ const text = this.musicname[indexList[i]];
+ if (
+ this.musics.includes(this.musicMx[page][i]) ||
+ page !== this.musicMx.length - 1
+ ) {
+ core.fillBoldText1(
+ ctx,
+ text,
+ 950,
+ posy - 30,
+ page === this.selection[0] && i === this.selection[1]
+ ? "#FFFFFF"
+ : "#444444",
+ "#000000",
+ 6,
+ core.ui._buildFont(66, true)
+ );
+
+ ctx.strokeStyle = "#FFFFFF";
+ ctx.lineWidth = 3;
+ ctx.beginPath();
+ ctx.moveTo(900, posy);
+ ctx.lineTo(1900, posy);
+ ctx.stroke();
+ }
+ posy += 100;
+ }
+ core.fillBoldText1(
+ ctx,
+ "上一页",
+ 1050,
+ 1200 - 30,
+ page === 0 ? "#444444" : "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(66, true)
+ );
+
+ core.fillBoldText1(
+ ctx,
+ page + 1 + "/" + this.musicMx.length,
+ 1350,
+ 1200 - 30,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(66, true)
+ );
+ core.fillBoldText1(
+ ctx,
+ "下一页",
+ 1550,
+ 1200 - 30,
+ page === this.musicMx.length - 1 ? "#444444" : "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(66, true)
+ );
+ ctx.strokeStyle = "#ffffff";
+ ctx.lineWidth = 3;
+
+ core.fillText(
+ ctx,
+ "|",
+ 55,
+ 697,
+ "#FFFFFF",
+ core.ui._buildFont(96, true)
+ );
+ core.fillText(
+ ctx,
+ "◀",
+ 70,
+ 700,
+ "#FFFFFF",
+ core.ui._buildFont(96, true)
+ );
+
+ ctx.beginPath();
+ ctx.arc(295, 670, 80, 0, 2 * Math.PI);
+ ctx.stroke();
+ if (this.stop) {
+ core.fillText(
+ ctx,
+ "▶",
+ 265,
+ 700,
+ "#FFFFFF",
+ core.ui._buildFont(96, true)
+ );
+ } else {
+ core.fillText(
+ ctx,
+ "||",
+ 245,
+ 700,
+ "#FFFFFF",
+ core.ui._buildFont(96, true)
+ );
+ }
+ core.fillText(
+ ctx,
+ "|",
+ 495,
+ 697,
+ "#FFFFFF",
+ core.ui._buildFont(96, true)
+ );
+ core.fillText(
+ ctx,
+ "▶",
+ 450,
+ 700,
+ "#FFFFFF",
+ core.ui._buildFont(96, true)
+ );
+
+ ctx.font = "bold 48px Verdana";
+ ctx.fillText("音量", 350, 900);
+ ctx.beginPath();
+ ctx.moveTo(100, 1000);
+ ctx.lineTo(700, 1000);
+ ctx.stroke();
+ ctx.strokeStyle = "#ffffff";
+ ctx.lineWidth = 9;
+ ctx.fillStyle = "rgba(255,255,255,0.5)";
+
+ ctx.beginPath();
+ ctx.moveTo(100, 1000);
+ ctx.lineTo(600 * audio.getVolume() + 100, 1000);
+ ctx.stroke();
+ ctx.beginPath();
+ ctx.arc(600 * audio.getVolume() + 100, 1000, 10, 0, 2 * Math.PI);
+ ctx.fill();
+ core.fillBoldText1(
+ ctx,
+ Math.floor(100 * audio.getVolume()),
+ 720,
+ 1010,
+ "#FFFFFF",
+ "#000000",
+ 6,
+ core.ui._buildFont(56, true)
+ );
+ const img = core.material.images.images[this.type + ".webp"];
+ if (img) ctx.drawImage(img, 580, 560, 200, 200);
+ core.setTextAlign(ctx, "center");
+ ctx.font = "bold 48px Verdana";
+ ctx.fillText("当前歌曲", 400, 297);
+ ctx.fillText(
+ this.musicname[this.musicMx[this.selection[0]][this.selection[1]]],
+ 400,
+ 397
+ );
+ }
+ }
+ }
+ core.ui.music = new musicclass();
+ main.dom.musicMode.onclick = function () {
+ //点击开始页面的CG MODE进入cg回廊
+ if (
+ (core.getLocalStorage("musics") &&
+ core.getLocalStorage("musics").length === 0) ||
+ !core.getLocalStorage("musics")
+ )
+ core.setLocalStorage("musics", ["theme.mp3"]);
+ core.ui.music.musics = core.getLocalStorage("musics");
+ core.playBgm(
+ main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+ main.core.ui.music.selection[1]
+ ],
+ 0
+ );
+
+ const arr = main.core.ui.music.musicMx.flat(Infinity);
+ main.core.ui.music.randomList = shuffle(arr);
+ main.core.ui.music.random = main.core.ui.music.randomList.indexOf(
+ main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+ main.core.ui.music.selection[1]
+ ]
+ );
+ page = 0;
+ music.style.display = "block";
+ let time = 0;
+ core.registerAnimationFrame("music", null, (temptime) => {
+ if (temptime > time + 1000 / 60) {
+ time = temptime;
+ main.core.ui.music.update();
+ const duration =
+ core.plugin.audioSystem.bgmController.player.getRoute(
+ "bgms." +
+ main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+ main.core.ui.music.selection[1]
+ ]
+ ).duration;
+
+ const currentTime =
+ core.plugin.audioSystem.bgmController.player.getRoute(
+ "bgms." +
+ main.core.ui.music.musicMx[main.core.ui.music.selection[0]][
+ main.core.ui.music.selection[1]
+ ]
+ ).currentTime;
+ if (currentTime && duration && duration - currentTime < 0.05) {
+ if (core.domStyle.isVertical) {
+ core.ui.music.mousedown(830, 1770);
+ } else {
+ core.ui.music.mousedown(475, 765);
+ }
+ }
+ }
+ });
+ };
+ loader.prototype.loadOneMusic = function (name) {
+ /* var music = new Audio();
music.preload = "none";
if (main.bgmRemote)
music.src = main.bgmRemoteRoot + core.firstData.name + "/" + name;
else music.src = "project/bgms/" + name;
music.loop = "loop";
core.material.bgms[name] = music;*/
- };
-},
+ };
+ },
"横屏切换": function () {
// 在此增加新插件
this.triggerFullscreen = async function (full) {
@@ -18036,7 +20975,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
core.plugin.playing.add(data);
};
core.registerAnimationFrame("animateonmap", true, function (timestamp) {
- if (timestamp - thistime > 1000 / 60) {
+ if (timestamp - thistime > 1000 / 30) {
thistime = timestamp;
core.clearMap(anctx);
core.plugin.playing.forEach((one) => {
@@ -18525,1044 +21464,2220 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
};
},
"回合战斗动画": function () {
+ // 在此增加新插件
+ const animateAttack = document.createElement("canvas"); //画布设置
+ animateAttack.style.zIndex = 80;
+ animateAttack.id = "animateAttack";
+ animateAttack.classList.add("gameCanvas", "anti-aliasing");
+ animateAttack.style.display = "block";
+ animateAttack.width = 416;
+ animateAttack.height = 416;
+ animateAttack.style.width = core.__PIXELS__ * core.domStyle.scale + "px";
+ animateAttack.style.height = core.__PIXELS__ * core.domStyle.scale + "px";
+ main.dom.animateAttack = animateAttack;
+ const ctx = animateAttack.getContext("2d");
+ core.plugin.playingattack = new Set();
+ const ctx6 = main.dom.animate2.getContext("2d");
+ let easy = false;
+ const { imagelighter } = core.plugin.utils;
+
+ function playanimate(name, x, y, scalex = 1, scaley = 1) {
+ const data = {
+ name: name,
+ x: x,
+ y: y,
+ scalex: scalex,
+ scaley: scaley,
+ farme: 0,
+ };
+ core.plugin.playingattack.add(data);
+ }
+
+ function playinganimate() {
+ let time = 0;
+ if (core.plugin.playingattack.size === 0) return Promise.resolve();
+ return new Promise((resolve) => {
+ core.registerAnimationFrame("animateenemyattack", true, (timestamp) => {
+ if (timestamp - time > 1000 / 60) {
+ time = timestamp;
+ core.clearMap(ctx6);
+
+ core.plugin.playingattack.forEach((one) => {
+ const data = flags["animate_" + one.name];
+
+ if (!data) {
+ core.plugin.playingattack.delete(one);
+ if (core.plugin.playingattack.size === 0) {
+ core.unregisterAnimationFrame("animateenemyattack");
+ resolve();
+ }
+ } else {
+ data.imageList.forEach(function (image) {
+ if (
+ one.farme >= (image.beforefarme ?? 0) &&
+ one.farme <= (image.afterfarme ?? data.allFarme)
+ ) {
+ const img = core.material.images.images?.[image.image];
+ if (img) {
+ const gla = image.globalAlpha ?? 100;
+ const agla = image.aglobalAlpha ?? gla,
+ beforefarme = image.beforefarme ?? 0;
+ const afterfarme = image.afterfarme ?? data.allFarme;
+
+ ctx6.globalAlpha =
+ (gla +
+ ((agla - gla) * (one.farme - beforefarme)) /
+ (afterfarme - beforefarme || 1)) /
+ 100;
+
+ const cx =
+ (image.cx ?? 0) +
+ (((image.acx ?? 0) - (image.cx ?? 0)) *
+ (one.farme - beforefarme)) /
+ (afterfarme - beforefarme || 1),
+ cy =
+ (image.cy ?? 0) +
+ (((image.acy ?? 0) - (image.cy ?? 0)) *
+ (one.farme - beforefarme)) /
+ (afterfarme - beforefarme || 1),
+ cw =
+ (image.cw ?? img.width) +
+ (((image.acw ?? img.width) -
+ (image.cw ?? img.width)) *
+ (one.farme - beforefarme)) /
+ (afterfarme - beforefarme || 1),
+ ch =
+ (image.ch ?? img.height) +
+ (((image.acw ?? img.height) -
+ (image.cw ?? img.height)) *
+ (one.farme - beforefarme)) /
+ (afterfarme - beforefarme || 1),
+ x =
+ (image.x ?? 0) +
+ (((image.ax ?? 0) - (image.x ?? 0)) *
+ (one.farme - beforefarme)) /
+ (afterfarme - beforefarme || 1),
+ y =
+ (image.y ?? 0) +
+ (((image.ay ?? 0) - (image.y ?? 0)) *
+ (one.farme - beforefarme)) /
+ (afterfarme - beforefarme || 1),
+ w =
+ (image.w ?? one.width) +
+ (((image.aw ?? one.width) - (image.w ?? one.width)) *
+ (one.farme - beforefarme)) /
+ (afterfarme - beforefarme || 1),
+ h =
+ (image.h ?? one.height) +
+ (((image.aw ?? one.height) -
+ (image.w ?? one.height)) *
+ (one.farme - beforefarme)) /
+ (afterfarme - beforefarme || 1),
+ angle =
+ (Math.PI *
+ ((image.image.angle ?? 0) +
+ (((image.aangle ?? 0) -
+ (image.image.angle ?? 0)) *
+ (one.farme - beforefarme)) /
+ (afterfarme - beforefarme || 1))) /
+ 180;
+
+ core.drawImage(
+ ctx6,
+ img,
+ cx,
+ cy,
+ cw,
+ ch,
+ one.x + (x - data.px) * one.scalex,
+ one.y + (y - data.py) * one.scaley,
+ w * one.scalex,
+ h * one.scaley,
+ angle
+ );
+ }
+ }
+ });
+ data.soundList.forEach(function (sound) {
+ const lisen =
+ sound.sound &&
+ core.sounds[sound.sound] &&
+ core.musicStatus.soundStatus;
+ if (one.farme == sound.startfarme && lisen) {
+ if (sound.stopbefore) core.stopSound();
+ core.playSound(sound.sound);
+ }
+ });
+ one.farme++;
+ ctx6.restore();
+ if (one.farme > data.allFarme) {
+ core.clearMap(ctx6);
+ core.plugin.playingattack.delete(one);
+ if (core.plugin.playingattack.size === 0) {
+ core.unregisterAnimationFrame("animateenemyattack");
+ resolve();
+ }
+ }
+ }
+ });
+ }
+ });
+ });
+ }
+
+ main.dom.gameDraw.appendChild(animateAttack);
+ const { lcm, gcd } = core.plugin.utils;
+
+ function animateonAttack(name, onenemy) {
+ if (onenemy) {
+ playanimate(name, 290, 180);
+ } else {
+ playanimate(name, 130, 180);
+ }
+ }
+
+ this.attackAnimate = function (
+ enemyId,
+ heroInfo,
+ enemyInfo,
+ equipInfo,
+ oneTurn,
+ heroDiffList,
+ enemyDiffList,
+ heroanimateList,
+ enemyanimateList
+ ) {
+ //参数分别为怪物id、真实属性,战斗信息,特殊装备(如火焰风衣)属性特殊装备属性为以元组{equipId,oneDamage,speed,now:0}构成的数组(列出每个需要计算的特殊装备,没有则为空数组或不填)
+ core.lockControl();
+ core.clearMap(ctx);
+ core.status.event.id = "attackAnimate";
+ let turn = 0;
+ enemyInfo.id = enemyId;
+ enemyInfo.cls = core.getClsFromId(enemyId);
+ enemyInfo.name = core.material.enemys[enemyId].name;
+ let max = heroInfo.speed
+ if (enemyInfo.speed > max) max = enemyInfo.speed
+ equipInfo.forEach(v => { if (v.speed > max) max = v.speed })
+ let i = 0
+ while (oneTurn * i / max < 15) {
+ i++
+ }
+ if (heroInfo.onAttack) heroInfo.now *= i
+ if (enemyInfo.onAttack) enemyInfo.now *= i
+ equipInfo.forEach(v => { if (v.onAttack) v.now *= i })
+ oneTurn *= i
+ console.log([oneTurn, heroInfo.now, enemyInfo.now])
+ let time = 0,
+ farme = 0;
+ return new Promise((res) => {
+ core.plugin.battle_onclick = function (x, y, px, py) {
+ const makeBox = ([x, y], [w, h]) => {
+ return [
+ [x, y],
+ [x + w, y + h],
+ ];
+ };
+ const inRect = ([x, y], [
+ [sx, sy],
+ [dx, dy]
+ ]) => {
+ 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]);
+ 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)
+ ) {
+ core.status.event.id = "";
+ core.unregisterAnimationFrame("attackAnimate");
+ core.clearMap(ctx);
+ core.closePanel();
+ res();
+ }
+ };
+ async function drawAttackAnimate(
+ heroInfo,
+ oneTurn,
+ enemyInfo,
+ equipInfo,
+ farme,
+ heroDiffList,
+ enemyDiffList,
+ heroanimateList,
+ enemyanimateList
+ ) {
+ core.lockControl();
+ core.status.event.id = "battle";
+
+ let attack = false;
+ if (heroInfo.isAttack) attack = true;
+ if (enemyInfo.isAttack) attack = true;
+ equipInfo.forEach(function (v) {
+ if (v.isAttack) attack = true;
+ });
+ let onAttack = false;
+ if (heroInfo.onAttack) onAttack = true;
+ if (enemyInfo.onAttack) onAttack = true;
+ equipInfo.forEach(function (v) {
+ if (v.onAttack) onAttack = true;
+ });
+ core.clearMap(ctx);
+ let animate = Math.floor(farme / 30);
+ if (easy) {
+ core.fillRect(ctx, 64, 52, 288, 212, "rgba(0,0,0,0.5)");
+ core.strokeRect(ctx, 64, 52, 288, 212, "rgba(255,255,255,0.5)", 4);
+ core.setTextAlign(ctx, "center");
+ core.fillBoldText(
+ ctx,
+ hero.name,
+ 127,
+ 148,
+ "#FFFFFF",
+ "#000000",
+ "bold 14px Verdana"
+ );
+ core.setTextAlign(ctx, "left");
+ core.drawIcon(ctx, "hp", 70, 210, 16, 16);
+ core.fillBoldText(
+ ctx,
+ "生命 " + core.formatBigNumber(heroInfo.hp, true),
+ 90,
+ 225,
+ "#FFFFFF",
+ "#000000",
+ "bold 14px Arial"
+ );
+
+ core.fillBoldText(
+ ctx,
+ "详细模式",
+ 90,
+ 250,
+ "#FFFF60",
+ "#000000",
+ "bold 18px Verdana"
+ );
+
+ core.strokeRect(ctx, 112, 159, 32, 48, "rgba(255,255,255,1)", 1);
+ let img =
+ attack && heroDiffList[turn].hp < 0 ?
+ imagelighter(core.material.images.images["hero.webp"]) :
+ attack && heroDiffList[turn].hp > 0 ?
+ imagelighter(
+ core.material.images.images["hero.webp"],
+ "rgba(0, 255, 0, 0.5)"
+ ) :
+ core.material.images.images["hero.webp"];
+ core.drawImage(
+ ctx,
+ img,
+ 32 * (animate % 4),
+ 0,
+ 32,
+ 48,
+ 112,
+ 159,
+ 32,
+ 48
+ );
+
+ core.setTextAlign(ctx, "center");
+ core.fillBoldText(
+ ctx,
+ enemyInfo.name,
+ 289,
+ 148,
+ "#FFFFFF",
+ "#000000",
+ "bold 14px Verdana"
+ );
+
+ core.setTextAlign(ctx, "right");
+ if (enemyInfo.cls === "enemys") {
+ core.strokeRect(ctx, 272, 175, 32, 32, "rgba(255,255,255,1)", 1);
+ let img =
+ attack && enemyDiffList[turn].hp < 0 ?
+ imagelighter(core.getBlockInfo(enemyInfo.id).image) :
+ attack && enemyDiffList[turn].hp > 0 ?
+ imagelighter(
+ core.getBlockInfo(enemyInfo.id).image,
+ "rgba(0, 255, 0, 0.5)"
+ ) :
+ core.getBlockInfo(enemyInfo.id).image;
+ core.drawImage(
+ ctx,
+ img,
+ 32 * (animate % 2),
+ core.getBlockInfo(enemyInfo.id).posY * 32,
+ 32,
+ 32,
+ 272,
+ 175,
+ 32,
+ 32
+ );
+ } else {
+ core.strokeRect(ctx, 272, 159, 32, 48, "rgba(255,255,255,1)", 1);
+ let img =
+ attack && enemyDiffList[turn].hp < 0 ?
+ imagelighter(core.getBlockInfo(enemyInfo.id).image) :
+ attack && enemyDiffList[turn].hp > 0 ?
+ imagelighter(
+ core.getBlockInfo(enemyInfo.id).image,
+ "rgba(0, 255, 0, 0.5)"
+ ) :
+ core.getBlockInfo(enemyInfo.id).image;
+ core.drawImage(
+ ctx,
+ img,
+ 32 * (animate % 4),
+ core.getBlockInfo(enemyInfo.id).posY * 48,
+ 32,
+ 48,
+ 272,
+ 159,
+ 32,
+ 48
+ );
+ }
+ core.drawIcon(ctx, "hp", 330, 210, 16, 16);
+
+ core.fillBoldText(
+ ctx,
+ core.formatBigNumber(enemyInfo.hp, true) + " 生命",
+ 330,
+ 225,
+ "#FFFFFF",
+ "#000000",
+ "bold 14px Verdana"
+ );
+ core.fillBoldText(
+ ctx,
+ "跳过",
+ 330,
+ 250,
+ "#FFFF60",
+ "#000000",
+ "bold 18px Verdana"
+ );
+
+ core.fillBoldText(
+ ctx,
+ "V",
+ 219,
+ 183,
+ "#FFFFFF",
+ "#000000",
+ "bold 48px pala"
+ );
+ core.fillBoldText(
+ ctx,
+ "s",
+ 231,
+ 183,
+ "#FFFFFF",
+ "#000000",
+ "bold 36px pala"
+ );
+
+ if (!attack && !onAttack) enemyInfo.now += enemyInfo.speed;
+ 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.closePath();
+ ctx.fill();
+
+ 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,
+ 48,
+ enemynow - 16,
+ 58,
+ 32,
+ 48
+ );
+ }
+ core.drawLine(ctx, 100, 125, 315, 125, "#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.closePath();
+
+ ctx.fill();
+
+ core.drawIcon(ctx, v.id, vnow - 16, 54, 32, 32);
+ });
+ if (!attack && !onAttack) 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.closePath();
+
+ ctx.fill();
+ core.drawImage(
+ ctx,
+ "hero.webp",
+ 0,
+ 0,
+ 32,
+ 48,
+ heronow - 16,
+ 58,
+ 32,
+ 48
+ );
+ } 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);
+ core.setTextAlign(ctx, "center");
+ core.fillBoldText(
+ ctx,
+ hero.name,
+ 127,
+ 148,
+ "#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.fillBoldText(
+ ctx,
+ "生命 " + core.formatBigNumber(heroInfo.hp, true),
+ 90,
+ 225,
+ "#FFFFFF",
+ "#000000",
+ "bold 14px Arial"
+ );
+
+ core.fillBoldText(
+ ctx,
+ "攻击 " + core.formatBigNumber(heroInfo.atk),
+ 90,
+ 245,
+ "#FFFFFF",
+ "#000000",
+ "bold 14px Arial"
+ );
+ core.fillBoldText(
+ ctx,
+ "防御 " + core.formatBigNumber(heroInfo.def),
+ 90,
+ 265,
+ "#FFFFFF",
+ "#000000",
+ "bold 14px Arial"
+ );
+ core.fillBoldText(
+ ctx,
+ "法强 " + core.formatBigNumber(heroInfo.spell),
+ 90,
+ 285,
+ "#FFFFFF",
+ "#000000",
+ "bold 14px Arial"
+ );
+ core.fillBoldText(
+ ctx,
+ "法攻 " + core.formatBigNumber(heroInfo.matk),
+ 90,
+ 305,
+ "#FFFFFF",
+ "#000000",
+ "bold 14px Arial"
+ );
+ core.fillBoldText(
+ ctx,
+ "护盾 " + core.formatBigNumber(heroInfo.mhp),
+ 90,
+ 325,
+ "#FFFFFF",
+ "#000000",
+ "bold 14px Arial"
+ );
+ core.fillBoldText(
+ ctx,
+ "法抗 " + heroInfo.mdef + "%",
+ 90,
+ 345,
+ "#FFFFFF",
+ "#000000",
+ "bold 14px Arial"
+ );
+ core.fillBoldText(
+ ctx,
+ "速度 " + core.formatBigNumber(heroInfo.speed),
+ 90,
+ 365,
+ "#FFFFFF",
+ "#000000",
+ "bold 14px Arial"
+ );
+
+ core.strokeRect(ctx, 112, 159, 32, 48, "rgba(255,255,255,1)", 1);
+ let img =
+ attack && heroDiffList[turn].hp < 0 ?
+ imagelighter(core.material.images.images["hero.webp"]) :
+ attack && heroDiffList[turn].hp > 0 ?
+ imagelighter(
+ core.material.images.images["hero.webp"],
+ "rgba(0, 255, 0, 0.5)"
+ ) :
+ core.material.images.images["hero.webp"];
+ core.drawImage(
+ ctx,
+ img,
+ 32 * (animate % 4),
+ 0,
+ 32,
+ 48,
+ 112,
+ 159,
+ 32,
+ 48
+ );
+
+ core.setTextAlign(ctx, "center");
+ core.fillBoldText(
+ ctx,
+ enemyInfo.name,
+ 289,
+ 148,
+ "#FFFFFF",
+ "#000000",
+ "bold 14px Verdana"
+ );
+
+ core.setTextAlign(ctx, "right");
+ if (enemyInfo.cls === "enemys") {
+ core.strokeRect(ctx, 272, 175, 32, 32, "rgba(255,255,255,1)", 1);
+ let img =
+ attack && enemyDiffList[turn].hp < 0 ?
+ imagelighter(core.getBlockInfo(enemyInfo.id).image) :
+ attack && enemyDiffList[turn].hp > 0 ?
+ imagelighter(
+ core.getBlockInfo(enemyInfo.id).image,
+ "rgba(0, 255, 0, 0.5)"
+ ) :
+ core.getBlockInfo(enemyInfo.id).image;
+ core.drawImage(
+ ctx,
+ img,
+ 32 * (animate % 2),
+ core.getBlockInfo(enemyInfo.id).posY * 32,
+ 32,
+ 32,
+ 272,
+ 175,
+ 32,
+ 32
+ );
+ } else {
+ core.strokeRect(ctx, 272, 159, 32, 48, "rgba(255,255,255,1)", 1);
+ let img =
+ attack && enemyDiffList[turn].hp < 0 ?
+ imagelighter(core.getBlockInfo(enemyInfo.id).image) :
+ attack && enemyDiffList[turn].hp > 0 ?
+ imagelighter(
+ core.getBlockInfo(enemyInfo.id).image,
+ "rgba(0, 255, 0, 0.5)"
+ ) :
+ core.getBlockInfo(enemyInfo.id).image;
+ core.drawImage(
+ ctx,
+ img,
+ 32 * (animate % 4),
+ core.getBlockInfo(enemyInfo.id).posY * 48,
+ 32,
+ 48,
+ 272,
+ 159,
+ 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.fillBoldText(
+ ctx,
+ core.formatBigNumber(enemyInfo.hp, true) + " 生命",
+ 330,
+ 225,
+ "#FFFFFF",
+ "#000000",
+ "bold 14px Arial"
+ );
+ core.fillBoldText(
+ ctx,
+ core.formatBigNumber(enemyInfo.atk) + " 攻击",
+ 330,
+ 245,
+ "#FFFFFF",
+ "#000000",
+ "bold 14px Arial"
+ );
+ core.fillBoldText(
+ ctx,
+ core.formatBigNumber(enemyInfo.def) + " 防御",
+ 330,
+ 265,
+ "#FFFFFF",
+ "#000000",
+ "bold 14px Arial"
+ );
+ core.fillBoldText(
+ ctx,
+ (enemyInfo.spell ?? 0) + " 法强",
+ 330,
+ 285,
+ "#FFFFFF",
+ "#000000",
+ "bold 14px Arial"
+ );
+ core.fillBoldText(
+ ctx,
+ (enemyInfo.mdef ?? 0) * 100 + "% 法抗",
+ 330,
+ 305,
+ "#FFFFFF",
+ "#000000",
+ "bold 14px Arial"
+ );
+ core.fillBoldText(
+ ctx,
+ core.formatBigNumber(enemyInfo.speed) + " 速度",
+ 330,
+ 325,
+ "#FFFFFF",
+ "#000000",
+ "bold 14px Arial"
+ );
+ core.fillBoldText(
+ ctx,
+ "简易模式",
+ 330,
+ 345,
+ "#FFFF60",
+ "#000000",
+ "bold 16px Verdana"
+ );
+ core.fillBoldText(
+ ctx,
+ "跳过",
+ 330,
+ 365,
+ "#FFFF60",
+ "#000000",
+ "bold 16px Verdana"
+ );
+
+ core.fillBoldText(
+ ctx,
+ "V",
+ 219,
+ 183,
+ "#FFFFFF",
+ "#000000",
+ "bold 48px pala"
+ );
+ core.fillBoldText(
+ ctx,
+ "s",
+ 231,
+ 183,
+ "#FFFFFF",
+ "#000000",
+ "bold 36px pala"
+ );
+
+ if (!attack && !onAttack) enemyInfo.now += enemyInfo.speed;
+ 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.closePath();
+ ctx.fill();
+
+ 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);
+ 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.closePath();
+
+ ctx.fill();
+
+ core.drawIcon(ctx, v.id, vnow - 16, 54, 32, 32);
+ });
+ if (!attack && !onAttack) 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.closePath();
+
+ ctx.fill();
+ core.drawImage(
+ ctx,
+ "hero.webp",
+ 0,
+ 0,
+ 32,
+ 48,
+ heronow - 16,
+ 58,
+ 32,
+ 48
+ );
+ }
+ let nowattacking = false;
+ if (heroInfo.now >= oneTurn && !heroInfo.isAttack) {
+ heroInfo.onAttack = false;
+ heroInfo.isAttack = true;
+ nowattacking = true;
+ }
+ if (enemyInfo.now >= oneTurn && !enemyInfo.isAttack) {
+ enemyInfo.onAttack = false;
+ enemyInfo.isAttack = true;
+ nowattacking = true;
+ }
+ const equipanimate = [];
+ equipInfo.forEach((v) => {
+ if (v.now >= oneTurn && !v.isAttack) {
+ v.isAttack = true;
+ v.onAttack = false;
+ nowattacking = true;
+ equipanimate.push(v);
+ }
+ });
+ if (!attack && nowattacking) {
+ let herodamage = enemyDiffList[turn].hp;
+ if (herodamage > 0) herodamage = "+" + herodamage;
+ let text = herodamage === 0 ? "抵抗" : herodamage;
+
+ Dove.MorePerform.ShowDamagePop.PopDamage(
+ ctx, // 默认画布名称
+ 270, // 英雄位置 x
+ 160, // 英雄位置 y
+ text, // 伤害值
+ 18, // 默认字体大小
+ "Arial", //默认字体
+ typeof text === "string" && text.startsWith("+") ?
+ "#22FF44" :
+ typeof text === "string" ?
+ "#FFFFFF" :
+ null, // 默认颜色
+ text === "抵抗" ? "#000000" : null, // 默认描边颜色
+ 0, // 默认水平速度
+ -1, // 默认垂直速度
+ 0, // 默认重力
+ 90 // 默认显示时长(帧数)
+ );
+ for (const v in enemyDiffList[turn]) {
+ enemyInfo[v] += enemyDiffList[turn][v];
+ }
+ enemyanimateList[turn].forEach((v) => animateonAttack(v, true));
+ let enemydamage = heroDiffList[turn].hp;
+ if (enemydamage > 0) enemydamage = "+" + enemydamage;
+ text = enemydamage === 0 ? "抵抗" : enemydamage;
+ Dove.MorePerform.ShowDamagePop.PopDamage(
+ ctx, // 默认画布名称
+ 110, // 英雄位置 x
+ 160, // 英雄位置 y
+ text, // 伤害值
+ 18, // 默认字体大小
+ "Arial", //默认字体
+ typeof text === "string" && text.startsWith("+") ?
+ "#22FF44" :
+ typeof text === "string" ?
+ "#FFFFFF" :
+ null, // 默认颜色
+ text === "抵抗" ? "#000000" : null, // 默认描边颜色
+ 0, // 默认水平速度
+ -1, // 默认垂直速度
+ 0, // 默认重力
+ 90 // 默认显示时长(帧数)
+ );
+ for (const v in heroDiffList[turn]) {
+ heroInfo[v] += heroDiffList[turn][v];
+ }
+ heroanimateList[turn].forEach((v) => animateonAttack(v, false));
+
+ if (enemyDiffList[turn] < 0) enemyInfo.inAttack = true;
+ if (heroDiffList[turn] < 0) heroInfo.inAttack = true;
+ if (heroInfo.hp < 0) heroInfo.hp = 0;
+ if (enemyInfo.hp < 0) enemyInfo.hp = 0;
+ await Promise.all([
+ await playinganimate(),
+ new Promise((resolve) => {
+ if (heroInfo.isAttack) {
+ heroInfo.now = 0;
+ heroInfo.isAttack = false;
+ }
+ resolve();
+ }),
+ new Promise((resolve) => {
+ if (enemyInfo.isAttack) {
+ enemyInfo.now = 0;
+ enemyInfo.isAttack = false;
+ }
+ resolve();
+ }),
+ new Promise((resolve) => {
+ if (equipanimate.length > 0) {
+ equipanimate.forEach((v) => {
+ v.now = 0;
+ v.isAttack = false;
+ });
+ }
+ resolve();
+ }),
+ new Promise((resolve) => {
+ turn++;
+ resolve();
+ }),
+ ]);
+
+ if (heroInfo.hp <= 0 || enemyInfo.hp <= 0) {
+ core.status.event.id = "";
+ core.unregisterAnimationFrame("attackAnimate");
+ core.clearMap(ctx);
+ core.closePanel();
+ res();
+ }
+ }
+ }
+ core.registerAnimationFrame("attackAnimate", true, (temptime) => {
+ if (temptime - time > 1000 / 60) {
+ time = temptime;
+ drawAttackAnimate(
+ heroInfo,
+ oneTurn,
+ enemyInfo,
+ equipInfo,
+ farme,
+ heroDiffList,
+ enemyDiffList,
+ heroanimateList,
+ enemyanimateList
+ );
+
+ farme++;
+ }
+ });
+ });
+ };
+},
+ "剧情内容": function () {
+ // 每项为一个数组,第一项是名字,第二项是对话内容,第三项为音频文件名(没有则不需要第三项)
+ // 回放只会在同一个this下回放,进入剧情前请以事件块声明进入哪个剧情数组
+ this.chapter000 = [
+ ["", "这些天,街道不曾下雨。"],
+ ["", "所以,那浸湿地面的,定是那些女孩们流落的鲜血无疑。"],
+ ["", "我蹲在充斥着铁锈味般恶臭的小巷中,悠闲地如是想着。"],
+ ["", "扑哧。"],
+ ["", "耳旁再次响起象征着某个女孩子死去的声音。"],
+ ["", "再一次——"],
+ ["", "再一次。"],
+ ["", "女子们被肢解成单纯的肉块。"],
+ ["", "我任由流下的血浸满全身,屏住自己的呼吸。"],
+ ["", "祈求自己能拥有从猎人手中逃脱的幸运。"],
+ ["", "扑哧。"],
+ ["", "直到刚才,我们还坐在去往娼馆的马车的路上。"],
+ ["", "而在这之中的某些人,已经不在这个世上了。"],
+ ["", "不,应该把“某些”换成“几乎所有”才更为恰当吧。"],
+ ["", "恐怕,不久之后我也会变成小巷中血腥的装饰品。"],
+ ["", "我是为了得到这种死法,才辛苦苟活至今的吗?"],
+ ["", "来个人告诉我啊——"],
+ ["", "谁都好。"],
+ ["", "来人啊!!"],
+ ["少女", "「呃······!?」", "aiy010000010.opus"], //小动物01
+ ["", "漆黑的物体充斥了我的整个视野"],
+ ["", "我很快意识到,那是只很大的脚。"],
+ ["", "必须要出声求救。"],
+ ["", "可是,耳中却只能听到自己的牙关不停交战的声音。"],
+ ["", "我是如此的无助。"],
+ ["", "逃跑也好,道歉也罢。"],
+ ["", "就连抬头看一眼将要杀掉我的人的面孔都做不到。"],
+ ["少女", "「······被杀」", "aiy010000020.opus"], //小动物02
+ ["", "会被杀。"],
+ ["", "会被杀!!"],
+ ["", "来自内心深处的冰冷预感,渐渐地在体内蔓延开来。"],
+ ["少女", "「不,不要······」", "aiy010000030.opus"], //小动物03
+ ]
+ this.chapter001 = [
+ ["", "浮游都市,《诺瓦斯·艾蒂尔》。"],
+ ["", "《特别受灾地区》——"],
+ ["", "通称,《牢狱》"],
+ ["", "是被险峻的峭壁环绕,与世隔绝的,都市的最底部。"],
+ ]
+ this.chapter002 = [
+ ["年轻人", "「放开我!」", "aiy710000010.opus"], //龙套1-01
+ ["年轻人", "「我只是在帮那个女人而已!」", "aiy710000020.opus"], //龙套1-02
+ ["年轻人", "「你们没听到吗!?」", "aiy710000030.opus"], //龙套1-03
+ ["年轻人", "「她是被受骗才会被卖到娼馆来的」", "aiy710000040.opus"], //龙套1-04
+ [
+ "年轻人",
+ "「用肮脏的手段把钱借给她父母的,就是你们这些家伙吧!?」",
+ "aiy710000050.opus",
+ ], //龙套1-05
+ ["年轻人", "「给我说些什么啊」", "aiy710000060.opus"], //龙套1-06
+ ["凯伊姆", "「这些话等到了娼馆再说吧」", "aiy310000010.opus"], //男主01
+ ["凯伊姆", "「我来抓你,只是受雇于人而已」", "aiy310000020.opus"], //男主02
+ ["", "我走进娼馆《莉莉乌姆》的接待室。"],
+ ["", "正在桌旁整理账簿的奥兹停下手头的工作,抬起头向我看来。"],
+ ["奥兹", "「这不是凯伊姆先生吗,辛苦了」", "aiy350000010.opus"], //金锁高官01
+ ["奥兹", "「委托已经完成了吗?」", "aiy350000020.opus"], //金锁高官02
+ ["凯伊姆", "「啊啊,是这家伙没错吧」", "aiy310000030.opus"], //男主03
+ ["", "奥兹用只要接触到就能杀人般的眼神在男人脸上搜过。"],
+ ["奥兹", "「没错,就是这个人」", "aiy350000030.opus"], //金锁高官03
+ ["凯伊姆", "「是么」", "aiy310000040.opus"], //男主04
+ ["年轻人", "「你,你们要对我做什么」", "aiy710000070.opus"], //龙套1-07
+ ["奥兹", "「······」", "aiy350000040.opus"], //金锁高官04
+ ["", "奥兹用一个眼神,就让男人闭上了嘴。"],
+ ["", "然后,向我这边转过身来。"],
+ ["奥兹", "「抱歉啊,总是麻烦你去做这些无聊的事」", "aiy350000050.opus"], //金锁高官05
+ ["奥兹", "「都怪我们这边的年轻人太没用」", "aiy350000060.opus"], //金锁高官06
+ ["凯伊姆", "「客套话就免了」", "aiy310000050.opus"], //男主05
+ ["奥兹", "「这还真是失礼了」", "aiy350000070.opus"], //金锁高官07
+ ["奥兹", "「喂,来个人」", "aiy350000080.opus"], //金锁高官08
+ ["光头男人", "「是」", "aiy820000010.opus"], //龙套2-01
+ ["奥兹", "「凯伊姆先生做完工作回来了」", "aiy350000090.opus"], //金锁高官09
+ ["光头男人", "「是,是,那个······」", "aiy820000020.opus"], //龙套2-02
+ ["奥兹", "「我是要你拿些酒来,这个蠢材!」", "aiy350000100.opus"], //金锁高官10
+ ["", "喀!"],
+ ["", "奥兹扔出的烟灰缸砸中了手下的额头。"],
+ ["", "鲜血四溅。"],
+ ["凯伊姆", "「不用这么麻烦」", "aiy310000060.opus"], //男主06
+ ["凯伊姆", "「我接下来要去《菲诺列塔》」", "aiy310000070.opus"], //男主07
+ ["奥兹", "「喔唷」", "aiy350000110.opus"], //金锁高官11
+ [
+ "奥兹",
+ "「既然如此,我就不留您在这里喝难饮的劣质酒了」",
+ "aiy350000120.opus",
+ ], //金锁高官12
+ ["", "奥兹斜眼看着正捂住额头呻吟的手下,轻描淡写地说道。"],
+ ["凯伊姆", "「用这些钱去买药」", "aiy310000080.opus"], //男主08
+ ["", "我将几枚铜钱仍在那个手下的身前。"],
+ ["奥兹", "「凯伊姆先生,不用对他们这么好」", "aiy350000130.opus"], //金锁高官13
+ ["凯伊姆", "「无妨」", "aiy310000090.opus"], //男主09
+ ["凯伊姆", "「话说回来,那个要落跑的女人呢?」", "aiy310000100.opus"], //男主10
+ [
+ "奥兹",
+ "「我把她交给那些年轻人了,现在应该正在体会人生的严苛吧」",
+ "aiy350000140.opus",
+ ], //金锁高官14
+ [
+ "奥兹",
+ "「正好,趁此机会凯伊姆先生也来享受一番如何?」",
+ "aiy350000150.opus",
+ ], //金锁高官15
+ ["年轻人", "「你,你们这些家伙,要对她做什么!?」", "aiy710000080.opus"], //龙套1-08
+ ["", "咣!"],
+ ["", "奥兹给了他一拳。"],
+ ["", "一击即倒。"],
+ ["", "喀,咚,咯!"],
+ ["", "奥兹毫不留情地向男人的脸上踩去。"],
+ ["年轻人", "「咕······呃咳······」", "aiy710000090.opus"], //龙套1-09
+ ["", "折断的牙齿伴着血泡被吐出。"],
+ ["", "这份白色在鲜红色的液体中格外显眼。"],
+ [
+ "年轻人",
+ "「你们以为做出这种事······卫兵会坐视不理吗······」",
+ "aiy710000100.opus",
+ ], //龙套1-10
+ ["奥兹", "「啊啊,不会坐视不理的」", "aiy350000160.opus"], //金锁高官16
+ [
+ "奥兹",
+ "「应该会拿出你的钱包,和我们商量如何瓜分吧」",
+ "aiy350000170.opus",
+ ], //金锁高官17
+ ["年轻人", "「那,那种事······」", "aiy710000110.opus"], //龙套1-11
+ ["", "这在牢狱是理所当然的事。"],
+ ["奥兹", "「怎么,头一回来牢狱么?」", "aiy350000180.opus"], //金锁高官18
+ ["", "男人点了点头。"],
+ [
+ "奥兹",
+ "「为了被骗的女人而来到牢狱,真是个规矩人啊」",
+ "aiy350000190.opus",
+ ], //金锁高官19
+ ["奥兹", "「······前提是,被骗的人不是你」", "aiy350000200.opus"], //金锁高官20
+ ["年轻人", "「你说······我被骗了?」", "aiy710000120.opus"], //龙套1-12
+ ["年轻人", "「那,那是怎么回事!?」", "aiy710000130.opus"], //龙套1-13
+ ["奥兹", "「不用急,今天晚上会好好告诉你的」", "aiy350000210.opus"], //金锁高官21
+ ["", "奥兹抓起男人的脸。"],
+ ["", "为引诱客人的怜悯之心而装纯,是娼妇的惯用手段。"],
+ ["", "双亲被骗而借钱,结果作为抵押而将自己卖到这里,这是典型的说法。"],
+ [
+ "",
+ "如果只是头脑发热而成为常客也就罢了,这次的男人热血过头,居然想出了要带女人私奔的计划。",
+ ],
+ [
+ "",
+ "虽然女人半开玩笑地予以拒绝,但不知天高地厚的这家伙还是拉着她逃跑了。",
+ ],
+ ["", "不过,想要逃脱追击本来就是不可能的任务。"],
+ ["", "但即便如此,这种事情还是会一再的出现。"],
+ ["", "说谎的女人和被骗的男人。"],
+ ["", "在娼馆街,这是令人看到生厌的日常的风景。"],
+ ["凯伊姆", "「我要走了」", "aiy310000110.opus"], //男主11
+ ["奥兹", "「好的,下次再麻烦您」", "aiy350000220.opus"], //金锁高官22
+ ["奥兹", "「之后吉克先生会将谢礼交给您的」", "aiy350000230.opus"], //金锁高官23
+ ["凯伊姆", "「啊啊」", "aiy310000120.opus"], //男主12
+ ["", "我背向奥兹走出娼馆。"],
+ ["凯伊姆", "「······?」", "aiy310000130.opus"], //男主13
+ ["", "从远方传来微弱的歌声。"],
+ ["", "是关卡广场的方向。"],
+ ["", "对了。"],
+ ["", "今天有觐见圣女的仪式。"],
+ ["", "当代的圣女伊莲——"],
+ ["", "俗称《盲眼之圣女》,据说即使在历代的圣女中,人气也是数一数二的。"],
+ ["", "广场上的人估计相当多吧。"],
+ ["", "虽然我也想去看看她长什么样,不过要在人潮中挤来挤去就免了。"],
+ ["", "还是老老实实去菲诺列塔喝烧酒吧。"],
+ ["", "正当我这样想着的时候,一个身影自小巷的那头走来。"],
+ ["凯伊姆", "「艾莉斯」", "aiy310000140.opus"], //男主14
+ ];
+ this.chapter01 = [
+ ["艾莉斯", "「啊,凯伊姆」", "aiy020000005.opus"], //医生00.5
+ ["艾莉斯", "「正好,我还想要去找你呢」", "aiy020000010.opus"], //医生01
+ [
+ "艾莉斯",
+ "「没想到凯伊姆会主动出现······这是命运吗?」",
+ "aiy020000020.opus",
+ ], //医生02
+ ["凯伊姆", "「显然不是吧」", "aiy310000150.opus"], //男主15
+ ["艾莉斯", "「啊,是么」", "aiy020000030.opus"], //医生03
+ ["", "艾莉斯挑了挑整齐的双眉,微微地哼了一声。"],
+ [
+ "",
+ "虽然是个相当引人注目的美人,但她这个将亲切儿子丢入无底深渊的性格,为自己扣了不少的分",
+ ],
+ ["", "给人印象最深的,就是那潭水般的双瞳。"],
+ ["", "在漆黑的瞳孔中,完全看不出感情的波动。"],
+ ["艾莉斯", "「喜欢我的眼睛吗?」", "aiy020000040.opus"], //医生04
+ ["艾莉斯", "「如果想要的话就给你吧?」", "aiy020000050.opus"], //医生05
+ ["凯伊姆", "「用不着」", "aiy310000160.opus"], //男主16
+ ["艾莉斯", "「阿拉,可惜」", "aiy020000060.opus"], //医生06
+ ["凯伊姆", "「那么,找我有什么事」", "aiy310000170.opus"], //男主17
+ ["艾莉斯", "「梅尔特的钱好像被偷了」", "aiy020000070.opus"], //医生07
+ ["凯伊姆", "「钱被偷了?都几岁了还这么没用」", "aiy310000180.opus"], //男主18
+ ["艾莉斯", "「不要对我说啊」", "aiy020000080.opus"], //医生08
+ [
+ "凯伊姆",
+ "「那家伙,该不会说要让我去抓那个小偷吧?」",
+ "aiy310000190.opus",
+ ], //男主19
+ ["艾莉斯", "「就是这样」", "aiy020000090.opus"], //医生09
+ ["凯伊姆", "「笨蛋吗」", "aiy310000200.opus"], //男主20
+ ["凯伊姆", "「如果是小钱的话,就当做是买个教训吧」", "aiy310000210.opus"], //男主21
+ ["艾莉斯", "「说起来,被盗的是这个月的上纳金」", "aiy020000100.opus"], //医生10
+ ["凯伊姆", "「你说什么?」", "aiy310000220.opus"], //男主22
+ ["艾莉斯", "「用这些钱买教训,也太过奢侈了呢」", "aiy020000110.opus"], //医生11
+ ["凯伊姆", "「知道了,我去找」", "aiy310000230.opus"], //男主23
+ ["凯伊姆", "「小偷的特征呢」", "aiy310000240.opus"], //男主24
+ ["艾莉斯", "「男孩子」", "aiy020000120.opus"], //医生12
+ ["艾莉斯", "「······而且,背后有翅膀」", "aiy020000130.opus"], //医生13
+ [
+ "艾莉斯",
+ "「虽然姑且是藏在身后,但是仔细观察的话是很明显的」",
+ "aiy020000140.opus",
+ ], //医生14
+ ["凯伊姆", "「羽化病吗」", "aiy310000250.opus"], //男主25
+ [
+ "艾莉斯",
+ "「那些人可是毫不留情的,所以即使是为了那个孩子,也要赶快抓到他」",
+ "aiy020000150.opus",
+ ], //医生15
+ ["凯伊姆", "「注意到他逃窜的方向了吗?」", "aiy310000260.opus"], //男主26
+ ["艾莉斯", "「广场那边」", "aiy020000160.opus"], //医生16
+ [
+ "艾莉斯",
+ "「虽然刚才《不蚀金锁》的人去追了,不过多半是······」",
+ "aiy020000170.opus",
+ ], //医生17
+ ["凯伊姆", "「偏偏还是广场吗」", "aiy310000280.opus"], //男主28
+ ["艾莉斯", "「今天是觐见圣女大人的日子」", "aiy020000180.opus"], //医生18
+ ["凯伊姆", "「我知道」", "aiy310000290.opus"], //男主29
+ ["凯伊姆", "「尽量找找看就好」", "aiy310000300.opus"], //男主30
+ ];
+ this.chapter02 = [
+ ["不蚀金锁成员", "「凯伊姆先生,凯伊姆先生」", "aiy860000010.ogg"],
+ [
+ "不蚀金锁成员",
+ "「您已经和艾莉斯大夫见过面了吗?」",
+ "aiy860000020.ogg",
+ ],
+ ["凯伊姆", "「啊啊,所以才会追过来的」", "aiy310000310.ogg"], //男主31
+ ["凯伊姆", "「看到小偷了吗?」", "aiy310000320.ogg"], //男主32
+ [
+ "不蚀金锁成员",
+ "「没有,他向广场那边逃了过去,今天这么拥挤,我们也只能放弃了」",
+ "aiy860000030.ogg",
+ ],
+ [
+ "不蚀金锁成员",
+ "「不过,我也只是刚好在店里所以才追了过去,并不是受人所托」",
+ "aiy860000040.ogg",
+ ],
+ ["不蚀金锁成员", "「我已经准备撤退了」", "aiy860000050.ogg"],
+ ["不蚀金锁成员", "「凯伊姆先生还要继续追吗?」", "aiy860000060.ogg"],
+ ["凯伊姆", "「啊啊」", "aiy310000330.ogg"], //男主33
+ ["", "做完情报交换之后,我跟男人道别。"],
+ ["凯伊姆", "「和我想的一样啊······」", "aiy310000340.ogg"], //男主34
+ ["", "在牢狱中最大的广场上,聚集着看不到尽头的人群。"],
+ ["", "就算是来参见圣女祈祷,这人数也太多了点吧。"],
+ ["", "自然,我也找不到逃跑的孩子。"],
+ ["", "是混杂到人群中了吧。"],
+ ["", "如果已经从广场上脱身了的话,就更难发现了。"],
+ ["", "只好赌他还在这里了。"],
+ ["", "我先移动到了一个视野良好的地方。"],
+ ["", "从这里,一眼就可以看到人群的变化。"],
+ ["", "广场还是沸腾起来。"],
+ ["", "抬头望去,原来是在天台之上出现了一个人影"],
+ ["", "但是,与周围的期待不同,现身的是一名中年的神官。"],
+ ["", "骂声四溢。"],
+ ["", "神官则是笑着摆正衣领"],
+ ["神官", "「从现在开始,举行谒见的仪式」", "aiy440000010.ogg"], //神官01
+ [
+ "神官",
+ "「在参见那位大人之前,我希望牢狱的诸位再次思考这个《诺瓦斯·艾蒂尔》存在的意义······」",
+ "aiy440000020.ogg",
+ ], //神官02
+ [
+ "神官",
+ "「初代圣女伊莲大人,便是也难怪这崇高的祈祷之力,令《诺瓦斯·艾蒂尔》浮在空中,拯救了我们的祖先」",
+ "aiy440000030.ogg",
+ ], //神官03
+ [
+ "神官",
+ "「这之后的几百年来,传承了初代大人力量的历代圣女伊莲大人,让这里留在了空中」",
+ "aiy440000040.ogg",
+ ], //神官04
+ [
+ "神官",
+ "「这座都市是被圣女大人守护的人类最后的圣域,而我们则是被选召的虔诚的信徒」",
+ "aiy440000050.ogg",
+ ], //神官05
+ [
+ "神官",
+ "「怀着对圣女的感激祈祷吧,感谢圣女伊莲吧!并献上祈祷!」",
+ "aiy440000060.ogg",
+ ], //神官06
+ ["圣女", "「不忘感谢与祈祷,神才会拯救我们」", "aiy030000010.ogg"], //圣女01
+ ["圣女", "「与我一起,向神虔诚地祈祷吧」", "aiy030000020.ogg"], //圣女02
+ ["", "广场上欢声雷动。"],
+ ["", "圣女没有回应喧嚣的人声,而是静静地合上双眼面向广场。"],
+ ["", "虽然感觉有些冷淡,但总比像个傻瓜似的笑着向这群人挥手要强。"],
+ ["", "她掌握着这条街道,还有在这条街上生活的人的命运。"],
+ ["", "比起揽得人气,她更想要为了街道的继续存在而献出全力。"],
+ ["", "也是为了不让《大崩落》的惨剧再度发生。"],
+ ["", "十几年前的那场悲剧。"],
+ [
+ "",
+ "虽然在我脑海中的记忆已经相当模糊,但哪怕只是稍有触及,不快的感觉都会在胸口蔓延开。",
+ ],
+ ["凯伊姆", "「······」", "aiy310000350.ogg"], //男主35
+ ["", "这时我才想起,现在不是我在这里看圣女的时候。"],
+ ["女声", "「——っ!?」", "aiy510000010.ogg"],
+ ["围观的女人", "「羽,羽化病人!?」", "aiy510000020.ogg"],
+ ["围观的中年人", "「喂,谁去叫下羽狩」", "aiy720000010.ogg"],
+ [
+ "惊慌的观众",
+ "「你这家伙不要靠近我,要是传染了可怎么办」",
+ "aiy730000010.ogg",
+ ],
+ ["粗鲁的观众", "「你这小鬼赶快滚开」", "aiy740000010.ogg"],
+ ["凯伊姆", "「接下来」", "aiy310000360.ogg"], //男主36
+ ["圣女", "「发生什么事了?看上去似乎很嘈杂」", "aiy030000030.ogg"], //圣女03
+ [
+ "随从",
+ "「似乎是某个人逃跑了······具体的我也不是很清楚」",
+ "aiy130000010.ogg",
+ ], //侍从01
+ [
+ "神官",
+ "「圣女大人,继续待在天台上可能会出事,请您先回到室内吧」",
+ "aiy440000070.ogg",
+ ], //神官07
+ [
+ "圣女",
+ "「不用在意我,比起那个,我更关心究竟发生了什么事」",
+ "aiy030000050.ogg",
+ ], //圣女05
+ ["神官", "「对不起,我真的不知道」", "aiy440000080.ogg"], //神官08
+ ["圣女", "「······是吗」", "aiy030000060.ogg"], //圣女06
+ ["男", "「恕我僭越,请准许我说明情况」", "aiy320000010.ogg"], //男主他哥01
+ ["男", "「在来觐见的人群中出现了《羽化病》的患者」", "aiy320000020.ogg"], //男主他哥02
+ ["男", "「围观的人群因而产生了骚动」", "aiy320000030.ogg"], //男主他哥03
+ [
+ "男",
+ "「现在,《防疫局》已经派遣了部队。我想不久之后,他们就会安静下来了」",
+ "aiy320000040.ogg",
+ ], //男主他哥04
+ ["圣女", "「羽化病······」", "aiy030000070.ogg"], //圣女07
+ ["男", "「怎么了?」", "aiy320000050.ogg"], //男主他哥05
+ ["圣女", "「没什么」", "aiy030000080.ogg"], //圣女08
+ ["圣女", "「辛苦了,你的名字是?」", "aiy030000090.ogg"], //圣女09
+ [
+ "男",
+ "「属下是在防疫局任职的,鲁基乌斯· 迪斯·米利尤」",
+ "aiy320000060.ogg",
+ ], //男主他哥06
+ [
+ "神官",
+ "「噢噢,阁下就是鲁基乌斯卿吗,我听说过你的传闻」",
+ "aiy440000090.ogg",
+ ], //神官09
+ ["神官", "「阁下是在工作上相当出色的人呢」", "aiy440000100.ogg"], //神官10
+ ["鲁基乌斯", "「不敢当」", "aiy320000070.ogg"], //男主他哥07
+ [
+ "鲁基乌斯",
+ "「话说回来,这次是属下警备工作的失职。让圣女大人见到这不成体统的一面,请您见谅」",
+ "aiy320000080.ogg",
+ ], //男主他哥08
+ [
+ "圣女",
+ "「即使是目不见物的我,也能感受到聚集于此的民众数量之多。警备工作难以展开也在情理之中」",
+ "aiy030000100.ogg",
+ ], //圣女10
+ ["鲁基乌斯", "「属下不胜惶恐」", "aiy320000090.ogg"], //男主他哥09
+ [
+ "鲁基乌斯",
+ "「接下来属下还要回到工作岗位上,在这里就先告退了」",
+ "aiy320000100.ogg",
+ ], //男主他哥10
+ ["圣女", "「鲁基乌斯先生」", "aiy030000110.ogg"], //圣女11
+ ["鲁基乌斯", "「属下在」", "aiy320000110.ogg"], //男主他哥11
+ ["圣女", "「你是怎样看待羽狩的工作的呢?」", "aiy030000120.ogg"], //圣女12
+ ["神官", "「圣,圣女大人」", "aiy440000110.ogg"], //神官11
+ [
+ "鲁基乌斯",
+ "「防疫局的工作是国王陛下赐予的重要职务。属下非常荣幸能够为这个都市的繁荣尽一份微薄之力」",
+ "aiy320000120.ogg",
+ ], //男主他哥12
+ ["神官", "「不,不亏是鲁基乌斯卿,相当优秀的想法」", "aiy440000120.ogg"], //神官12
+ ["圣女", "「是吗。辛苦你了」", "aiy030000130.ogg"], //圣女13
+ ["随从", "「圣女大人······」", "aiy130000020.ogg"], //侍从02
+ ["鲁基乌斯", "「······」", "aiy320000135.ogg"], //男主他哥13
+ ["鲁基乌斯", "「那么,属下就回岗位去了」", "aiy320000140.ogg"], //男主他哥14
+ ];
+ this.chapter03 = [
+ ["", "从羽化病的少年纷乱的足音中,可以听得出相当的疲劳。"],
+ ["", "显然,他并没有想到我会捷足先登吧。"],
+ ["", "少年惶恐地回头看了一眼后,微微露出安心的表情,双手拄在膝盖上。。"],
+ ["凯伊姆", "「辛苦你了」", "aiy310000370.ogg"], //男主37
+ ["羽化病患少年", "「稀!?」", "aiy750000010.ogg"],
+ ["凯伊姆", "「逃到贫民区是个不错的想法」", "aiy310000380.ogg"], //男主38
+ ["羽化病患少年", "「你,你是,羽狩吗?」", "aiy750000020.ogg"],
+ ["凯伊姆", "「不是」", "aiy310000390.ogg"], //男主39
+ [
+ "羽化病患少年",
+ "「什,什么啊······混蛋,不要吓我啊」",
+ "aiy750000030.ogg",
+ ],
+ ["凯伊姆", "「我对令你受惊这件事致以歉意」", "aiy310000400.ogg"], //男主40
+ ["凯伊姆", "「作为回报,麻烦你把从店里偷的钱交出来吧」", "aiy310000410.ogg"], //男主41
+ ["羽化病患少年", "「钱?你在说什么」", "aiy750000040.ogg"],
+ ["凯伊姆", "「你要找的腰上的东西,掉在你身后了」", "aiy310000420.ogg"], //男主42
+ ["羽化病患少年", "「哎?」", "aiy750000050.ogg"],
+ ["羽化病患少年", "「呃呀」", "aiy750000060.ogg"],
+ ["羽化病患少年", "「你······你这混蛋」", "aiy750000070.ogg"],
+ ["凯伊姆", "「······」", "aiy310000430.ogg"], //男主43
+ ["凯伊姆", "「把偷的钱交出来」", "aiy310000440.ogg"], //男主44
+ ["羽化病患少年", "「我不知道你在······咕」", "aiy750000080.ogg"],
+ [
+ "羽化病患少年",
+ "「你,你说是我偷的······有什么证据吗」",
+ "aiy750000090.ogg",
+ ],
+ ["凯伊姆", "「你还挺倔的啊」", "aiy310000450.ogg"], //男主45
+ ["凯伊姆", "「不过,给我听好了」", "aiy310000460.ogg"], //男主46
+ ["凯伊姆", "「你偷的那些钱,是要上缴给《不蚀金锁》的上纳金」", "aiy310000470.ogg"], //男主47
+ ["凯伊姆", "「而且,钱的主人是从前和吉克颇有渊源的女人」", "aiy310000480.ogg"], //男主48
+ ["羽化病患少年", "「吉克?」", "aiy750000100.ogg"],
+ ["凯伊姆", "「他是《不蚀金锁》的主人,这么说你就明白了吧」", "aiy310000490.ogg"], //男主49
+ ["羽化病患少年", "「哎?哎?怎么会······」", "aiy750000110.ogg"],
+ ["凯伊姆", "「再问你一遍,钱在哪里?」", "aiy310000510.ogg"], //男主51
+ ["羽化病患少年", "「是,是,是,在我的怀里」", "aiy750000120.ogg"],
+ ["凯伊姆", "「你没有擅自拿掉一部分吧」", "aiy310000520.ogg"], //男主52
+ ["羽化病患少年", "「是,是的」", "aiy7500000130.ogg"],
+ [
+ "羽化病患少年",
+ "「那,那个,您是《不蚀金锁》的人吗?」",
+ "aiy750000140.ogg",
+ ],
+ ["凯伊姆", "「算是吧」", "aiy310000530.ogg"], //男主53
+ [
+ "羽化病患少年",
+ "「我什么都可以做,请您一定要帮帮我」",
+ "aiy750000150.ogg",
+ ],
+ ["凯伊姆", "「抱歉,我并没有兴趣去帮助他人」", "aiy310000540.ogg"], //男主54
+ [
+ "羽化病患少年",
+ "「我什么······什么,都会做的······」",
+ "aiy750000160.ogg",
+ ],
+ ["羽化病患少年", "「我一直都是生活在下层的」", "aiy750000170.ogg"],
+ [
+ "羽化病患少年",
+ "「可是,不知何时染上了羽化病······背后长出了翅膀······」",
+ "aiy750000180.ogg",
+ ],
+ [
+ "羽化病患少年",
+ "「被寄宿工作的店赶了出来,只得流落到牢狱这里」",
+ "aiy750000190.ogg",
+ ],
+ [
+ "羽化病患少年",
+ "「因为独自实在是饿的不行了,所以才会偷这些钱的」",
+ "aiy750000200.ogg",
+ ],
+ [
+ "羽化病患少年",
+ "「我明明没有做任何坏事······为什么······会遇到这种事······」",
+ "aiy750000210.ogg",
+ ],
+ ["凯伊姆", "「谁知道」", "aiy310000550.ogg"], //男主55
+ [
+ "羽化病患少年",
+ "「呜······呜呜······接下来,要对我做什么?」",
+ "aiy750000220.ogg",
+ ],
+ ["凯伊姆", "「我要把你带到组织那里」", "aiy310000560.ogg"], //男主56
+ ["羽化病患少年", "「怎,怎么这样」", "aiy750000230.ogg"],
+ ["凯伊姆", "「不过,那样做的前提是你不是羽化病人」", "aiy310000570.ogg"], //男主57
+ ["凯伊姆", "「组织也没有笨到把羽化病人招待到家里的程度」", "aiy310000580.ogg"], //男主58
+ ["羽化病患少年", "「那么,是要放我逃走吗?」", "aiy750000240.ogg"],
+ ["凯伊姆", "「我要让你学到教训」", "aiy310000590.ogg"], //男主59
+ ["凯伊姆", "「如果换做是组织的制裁,至少要有断条胳膊的觉悟」", "aiy310000600.ogg"], //男主60
+ ["凯伊姆", "「你的运气不错」", "aiy310000610.ogg"], //男主61
+ ["羽化病患少年", "「唔······啊,是的······」", "aiy750000250.ogg"],
+ ["凯伊姆", "「滚」", "aiy310000620.ogg"], //男主62
+ ["羽化病患少年", "「非常感谢」", "aiy750000260.ogg"],
+ ["羽化病患少年", "「唔啊!?」", "aiy750000270.ogg"],
+ ["男", "「到这里就结束了,羽化病人」", "aiy430000010.ogg"], //兰格01
+ ["男", "「确认他的翅膀」", "aiy430000020.ogg"], //兰格02
+ ["", "趁还没有被卷入麻烦的事情之前,赶快离开这里吧"],
+ ["羽狩的指挥者", "「那边的那个人」", "aiy430000030.ogg"], //兰格03
+ ["凯伊姆", "「······有什么事?」", "aiy310000630.ogg"], //男主63
+ ["羽狩的指挥者", "「可以稍微让我问几句话吗」", "aiy430000040.ogg"], //兰格04
+ ["凯伊姆", "「······」", "aiy310000640.ogg"], //男主64
+ ["凯伊姆", "「啊啊,无妨」", "aiy310000650.ogg"], //男主65
+ ["羽狩的指挥者", "「感谢您的合作」", "aiy430000050.ogg"], //兰格05
+ ["", "队长殷勤地致以谢礼。"],
+ ["", "而在他的眼前,少年的衣服已经被他的补下们扯破。"],
+ ["", "在瘦骨嶙峋的裸露后背上,长有纯白的羽翼。"],
+ ["红发的羽狩", "「副队长,确认翅膀的持有了」"],
+ ["羽狩的副队长", "「保护他」", "aiy430000060.ogg"], //兰格06
+ ["羽化病患少年", "「不要······请原谅,我······」", "aiy750000280.ogg"],
+ [
+ "羽狩的副队长",
+ "「我们只是要带你去治愈院治疗羽化病,不是什么应该感到害怕的事情」",
+ "aiy430000070.ogg",
+ ], //兰格07
+ ["羽化病患少年", "「可是,可是」", "aiy750000290.ogg"],
+ ["羽狩的副队长", "「没关系的」", "aiy430000080.ogg"], //兰格08
+ ["羽化病患少年", "「······哥,哥哥」", "aiy750000300.ogg"],
+ ["羽狩的副队长", "「你是羽化病人的亲属吗?」", "aiy430000090.ogg"], //兰格09
+ ["凯伊姆", "「只是路人而已」", "aiy310000660.ogg"], //男主66
+ ["凯伊姆", "「顺带一提,我也没有打算找你们的麻烦」", "aiy310000670.ogg"], //男主67
+ [
+ "羽狩的副队长",
+ "「前几天,有个和你说了同样的话的人,在我们背向他的瞬间对我们发动了袭击」",
+ "aiy430000100.ogg",
+ ], //兰格10
+ ["羽狩的副队长", "「我的一个部下就此永久失去了半截胳膊」", "aiy430000110.ogg"], //兰格11
+ ["凯伊姆", "「我表示同情」", "aiy310000680.ogg"], //男主68
+ ["凯伊姆", "「我马上就会消失的,这样就没问题了吧?」", "aiy310000690.ogg"], //男主69
+ ["羽狩的副队长", "「嘛,不要这么慌张」", "aiy430000120.ogg"], //兰格12
+ ["", "副队长看着羽化的少年。"],
+ ["羽狩的副队长", "「你与这个人是什么关系?没有被他殴打吗?」", "aiy430000130.ogg"], //兰格13
+ ["羽化病患少年", "「没,没有」", "aiy750000310.ogg"],
+ [
+ "羽狩的副队长",
+ "「如何对我们保持合作,你就可以在治愈院得到优先的治疗」",
+ "aiy430000140.ogg",
+ ], //兰格14
+ ["羽化病患少年", "「······」", "aiy750000320.ogg"],
+ [
+ "羽化病患少年",
+ "「那个人,是《不蚀金锁》的组织成员······」",
+ "aiy750000330.ogg",
+ ],
+ [
+ "羽化病患少年",
+ "「突然说让我拿出钱来,我刚一拒绝他就打我」",
+ "aiy750000340.ogg",
+ ],
+ ["羽狩的副队长", "「原来如此······」", "aiy430000150.ogg"], //兰格15
+ [
+ "羽狩的副队长",
+ "「那位少年说你是《不蚀金锁》的一员,不知此事是否属实?」",
+ "aiy430000160.ogg",
+ ], //兰格16
+ ["凯伊姆", "「当然不是」", "aiy310000700.ogg"], //男主70
+ ["凯伊姆", "「我只是从那里接受工作而已,并不是他们的成员」", "aiy310000710.ogg"], //男主71
+ ["羽狩的副队长", "「你的意思是说,少年在说谎吗?」", "aiy430000170.ogg"], //兰格17
+ ["凯伊姆", "「啊啊」", "aiy310000720.ogg"], //男主72
+ [
+ "凯伊姆",
+ "「如果你们和组织有关系的话,只要问问我是不是那里的成员就能明白事实了吧」",
+ "aiy310000730.ogg",
+ ], //男主73
+ ["羽狩的副队长", "「就算我去询问,也无法从他们那里得到事实」", "aiy430000180.ogg"], //兰格18
+ [
+ "羽狩的副队长",
+ "「《不蚀金锁》的那些人一向都不对我们合作,我对此深感困扰」",
+ "aiy430000190.ogg",
+ ], //兰格19
+ ["凯伊姆", "「真是辛苦啊」", "aiy310000740.ogg"], //男主74
+ ["羽狩的副队长", "「说的是啊」", "aiy430000200.ogg"], //兰格20
+ ["羽狩的副队长", "「其实,砍下我部下胳膊的似乎也是组织的成员呢」", "aiy430000210.ogg"], //兰格21
+ [
+ "羽狩的副队长",
+ "「无需如此警戒,我只是想在看守所向你咨询一些事情而已」",
+ "aiy430000220.ogg",
+ ], //兰格22
+ [
+ "羽狩的副队长",
+ "「如果能够知晓牢狱与组织的事情,我们也可以尽可能地对更多的羽化病人进行保护」",
+ "aiy430000230.ogg",
+ ], //兰格23
+ ["羽狩的副队长", "「那和整条街道的和平也是紧密相关的吧?」", "aiy430000240.ogg"], //兰格24
+ ["凯伊姆", "「我知道,你们有逮捕干扰狩猎羽化病人的权力」", "aiy310000750.ogg"], //男主75
+ [
+ "凯伊姆",
+ "「但是,我没有对你们做出任何干扰,为什么要对我如此纠缠不休呢」",
+ "aiy310000760.ogg",
+ ], //男主76
+ ["羽狩的副队长", "「那些话,我们会在看守所对你详细说明的」", "aiy430000250.ogg"], //兰格25
+ ["凯伊姆", "「······」", "aiy310000770.ogg"], //男主77
+ ["", "在这里起争执的话,就会被羽狩加害。"],
+ ["", "就算能从这里脱身,今后只要碰面就会产生纠纷也是摆明的事情。"],
+ ["", "就算逃跑,也没有好的结果。"],
+ ["", "正当我想要打圆场的时候,刚才的气氛一瞬间产生了转变。"],
+ ["", "发生了什么事······"],
+ ["???", "「我认为,那位先生是正确的」", "aiy050000010.ogg"], //菲奥奈01
+ ["", "羽狩们一起回头。"],
+ ["", "而在他们视线的焦点处,"],
+ ["", "伫立着一位女性。"],
+ ["", "在端正的容颜下,代表着强烈意志的双眉十分显眼。"],
+ ["", "身体的柔软与紧紧包裹在其身上的羽狩制服,两者显得十分的不搭配。"],
+ ["", "我还是第一次看到女性的羽狩。"],
+ ["羽狩的副队长", "「队长,这是获得《不蚀金锁》情报的好机会」", "aiy430000260.ogg"], //兰格26
+ [
+ "羽狩的队长",
+ "「兰格副队长,就算是为了获得情报,也不能做出恫吓的发言啊」",
+ "aiy050000020.ogg",
+ ], //菲奥奈02
+ ["兰格副队长", "「我并没有打算去恫吓他······」", "aiy430000270.ogg"], //兰格27
+ ["羽狩的队长", "「告诉我那个被砍掉胳膊的队员的名字」", "aiy050000030.ogg"], //菲奥奈03
+ ["羽狩的队长", "「我会去探望他的」", "aiy050000040.ogg"], //菲奥奈04
+ ["兰格副队长", "「那个是······」", "aiy430000280.ogg"], //兰格28
+ ["羽狩的队长", "「我知道,你一直在为有所收获而努力工作」", "aiy050000050.ogg"], //菲奥奈05
+ ["羽狩的队长", "「但是,正因为我们的工作是为民众提供帮助」", "aiy050000060.ogg"], //菲奥奈06
+ ["羽狩的队长", "「所以就更不能损害人与人之间的信赖」", "aiy050000070.ogg"], //菲奥奈07
+ ["兰格副队长", "「我会铭记在心」", "aiy430000290.ogg"], //兰格29
+ ["羽狩的队长", "「这位先生,我的部下失礼了」", "aiy050000080.ogg"], //菲奥奈08
+ ["凯伊姆", "「只要不对我再来一次就好」", "aiy310000780.ogg"], //男主78
+ ["羽狩的队长", "「请稍等」", "aiy050000090.ogg"], //菲奥奈09
+ ["凯伊姆", "「有什么事?」", "aiy310000790.ogg"], //男主79
+ ["羽狩的队长", "「我想确认一件事」", "aiy050000100.ogg"], //菲奥奈10
+ ["羽狩的队长", "「你真的不是《不蚀金锁》的成员吗?」", "aiy050000110.ogg"], //菲奥奈11
+ ["凯伊姆", "「真的」", "aiy310000800.ogg"], //男主80
+ ["凯伊姆", "「如果我说是的话,你有什么打算?」", "aiy310000810.ogg"], //男主81
+ ["羽狩的队长", "「我听过传闻,说他们是用依靠暴力而得的钱在生活」", "aiy050000120.ogg"], //菲奥奈12
+ ["凯伊姆", "「······这样啊」", "aiy310000820.ogg"], //男主82
+ ["凯伊姆", "「如果能有收获就好了啊」", "aiy310000830.ogg"], //男主83
+ ];
+ this.chapter04 = [
+ ["梅尔特", "「欢迎光临」", "aiy120000020.ogg"], //老板娘01,文件序号是以2开始,后续全部加1
+ ["梅尔特", "「辛苦了」", "aiy120000030.ogg"], //老板娘02
+ ["梅尔特", "「抱歉,又拜托给你了个这么麻烦的工作」", "aiy120000040.ogg"], //老板娘03
+ ["凯伊姆", "「没什么,比想象中完成的更容易」", "aiy310000840.ogg"], //男主84
+ ["梅尔特", "「那就好」", "aiy120000050.ogg"], //老板娘04
+ ["梅尔特", "「这是我的一点谢意」", "aiy120000060.ogg"], //老板娘05
+ ["凯伊姆", "「味道有些变化啊」", "aiy310000850.ogg"], //男主85
+ ["梅尔特", "「啊,被发现了?」", "aiy120000070.ogg"], //老板娘06
+ ["梅尔特", "「最近,没能到手什么好的原料呢」", "aiy120000080.ogg"], //老板娘07
+ ["凯伊姆", "「去拜托吉克如何?」", "aiy310000860.ogg"], //男主86
+ [
+ "梅尔特",
+ "「话是这么说,但是总不能用店里采购的这种小事去麻烦他吧······」",
+ "aiy120000090.ogg"
+ ], //老板娘08
+ ["凯伊姆", "「那希望你也不要来麻烦我」", "aiy310000870.ogg"], //男主87
+ ["梅尔特", "「那 是 两 码 事」", "aiy120000100.ogg"], //老板娘09
+ ["梅尔特", "「再说,凯伊姆是靠着工作来生活的吧」", "aiy120000110.ogg"], //老板娘10
+ [
+ "梅尔特",
+ "「而且,自己的钱被偷了这么害羞的事,向凯伊姆以外的其他人都说不出口」",
+ "aiy120000120.ogg"
+ ], //老板娘11
+ ["凯伊姆", "「反正,也已经传到吉克的耳朵里了」", "aiy310000880.ogg"], //男主88
+ ["梅尔特", "「这是面子问题啊,面子问题」", "aiy120000130.ogg"], //老板娘12
+ ["凯伊姆", "「嘛,算了」", "aiy310000890.ogg"], //男主89
+ ["凯伊姆", "「这样就好了吧?」", "aiy310000900.ogg"], //男主90
+ ["梅尔特", "「这是钱包呢」", "aiy120000140.ogg"], //老板娘13
+ ["梅尔特", "「嗯,东西没少」", "aiy120000150.ogg"], //老板娘14
+ ["梅尔特", "「太好啦—这个月的上纳金,我可全部都放在里面了呢」", "aiy120000160.ogg"], //老板娘15
+ ["梅尔特", "「如果没有找到的话,说不定就又会被送到娼馆里了呢」", "aiy120000170.ogg"], //老板娘16
+ ["凯伊姆", "「在那边不是来钱更快吗?」", "aiy310000910.ogg"], //男主91
+ ["梅尔特", "「阿拉,你是在说我还能有魅力吗?」", "aiy120000180.ogg"], //老板娘17
+ ["凯伊姆", "「这是客套话而已」", "aiy310000920.ogg"], //男主92
+ ["梅尔特", "「欺负人」", "aiy120000190.ogg"], //老板娘18
+ ["梅尔特", "「总而言之,今天帮大忙了」", "aiy120000200.ogg"], //老板娘19
+ ["梅尔特", "「谢礼嘛······」", "aiy120000210.ogg"], //老板娘20
+ ["凯伊姆", "「就记在账单上吧」", "aiy310000930.ogg"], //男主93
+ ["梅尔特", "「了解—盛谢惠顾了哦?」", "aiy120000220.ogg"], //老板娘21
+ ["", "喀啷喀啷"],
+ ["", "门铃响起"],
+ ["", "喧哗瞬间安静下来。"],
+ ["", "进来的人是吉克。"],
+ ["", "是掌控着牢狱的组织之一,《不蚀金锁》的头目。"],
+ ["", "不仅组织的成员,就连店内一般的客人也对他以注目礼表示敬意。"],
+ ["吉克", "「各位继续吧」", "aiy340000010.ogg"], //吉克01
+ ["", "仿佛停滞的时钟重新转动了一般,店内恢复了热闹的气氛。"],
+ ["吉克", "「抱歉,今天拜托你去做了无聊的工作」。", "aiy340000020.ogg"], //吉克02
+ ["凯伊姆", "「不用介意」", "aiy310000940.ogg"], //男主94
+ ["", "吉克轻轻点了点头,在我右边坐了下来"],
+ ["凯伊姆", "「逃跑的男人怎么样了?」", "aiy310000950.ogg"], //男主95
+ ["吉克", "「嗯?已经不在这个世上了」。", "aiy340000030.ogg"], //吉克03
+ ["吉克", "「有什么想要知道的事吗?」", "aiy340000040.ogg"], //吉克04
+ ["凯伊姆", "「不,没什么」", "aiy310000960.ogg"], //男主96
+ ["吉克", "「那个无聊的家伙,完全没有趣味呢」", "aiy340000050.ogg"], //吉克05
+ ["吉克", "「真希望他也替我负责清扫的部下也考虑考虑」", "aiy340000060.ogg"], //吉克06
+ ["凯伊姆", "「真是灾难啊」", "aiy310000970.ogg"], //男主97
+ ["吉克", "「比起那个,我听说了哦。你去追羽化病人了啊」", "aiy340000070.ogg"], //吉克07
+ ["凯伊姆", "「消息真灵通」", "aiy310000980.ogg"], //男主98
+ ["吉克", "「梅尔特也注意点」", "aiy340000080.ogg"], //吉克08
+ ["吉克", "「你丢钱已经不是一回两回了」", "aiy340000090.ogg"], //吉克09
+ ["梅尔特", "「好的—我会注意的。」", "aiy120000230.ogg"], //老板娘22
+ ["梅尔特", "「吉克还是平常的点单吧」", "aiy120000240.ogg"], //老板娘23
+ ["梅尔特", "「凯伊姆要再来一杯吗?」", "aiy120000250.ogg"], //老板娘24
+ ["", "我们用眼神点头示意后,梅尔特开始准备起酒来。"],
+ ["", "悠然地吐出眼圈后,吉克取出一个纸包放在柜台上。"],
+ ["吉克", "「这是抓捕逃跑男人的报酬」", "aiy340000100.ogg"], //吉克10
+ ["凯伊姆", "「下次有什么事再告诉我」", "aiy310000990.ogg"], //男主99
+ ["梅尔特", "「来,久等了」", "aiy120000260.ogg"], //老板娘25
+ ["凯伊姆", "「话说回来梅尔特,为什么会被那种孩子偷到钱?」", "aiy310001000.ogg"], //男主100
+ ["吉克", "「让我猜猜看」", "aiy340000110.ogg"], //吉克11
+ ["吉克", "「是那个吧,看某个特立独行的男人入迷了,所以就有了空隙?」", "aiy340000120.ogg"], //吉克12
+ ["梅尔特", "「可惜—」", "aiy120000270.ogg"], //老板娘26
+ ["梅尔特", "「事实恰恰相反,是那家伙一直在纠缠我」", "aiy120000280.ogg"], //老板娘27
+ ["凯伊姆", "「完全把你当成新进的女佣了么」", "aiy310001010.ogg"], //男主101
+ ["梅尔特", "「我从前可是很有名的,不会被当成这种下人吧」", "aiy120000290.ogg"], //老板娘28
+ ["梅尔特", "「······而且,我没法对对我这么钟情的人发火啊」", "aiy120000300.ogg"], //老板娘29
+ ["凯伊姆&吉克", "「你傻啊」", "aiy310001027.ogg"], //男主102.7,吉克13.5
+ ["梅尔特", "「异口同声呢,不亏是兄弟」", "aiy120000310.ogg"], //老板娘30
+ ["凯伊姆", "「别用这种称呼,怪恶心的」", "aiy310001030.ogg"], //男主103
+ ["吉克", "「说得没错」", "aiy340000140.ogg"], //吉克14
+ ["吉克", "「······说起来······」", "aiy340000150.ogg"], //吉克15
+ ["梅尔特", "「怎么了?」", "aiy120000320.ogg"], //老板娘31
+ ["吉克", "「有件事我一直很在意,我和凯伊姆,哪个是哥哥啊?」", "aiy340000160.ogg"], //吉克16
+ ["凯伊姆", "「你也说这么无聊的话题」", "aiy310001040.ogg"], //男主104
+ ["吉克", "「不,这是很重要的事情」", "aiy340000170.ogg"], //吉克17
+ ["吉克", "「梅尔特,事实是怎么样的?」", "aiy340000180.ogg"], //吉克18
+ ["梅尔特", "「啊~是怎么样的呢~」", "aiy120000330.ogg"], //老板娘32
+ ["梅尔特", "「我忘记了」", "aiy120000340.ogg"], //老板娘33
+ ["吉克", "「骗人」", "aiy340000190.ogg"], //吉克19
+ ["梅尔特", "「我说真的」", "aiy120000350.ogg"], //老板娘34
+ ["梅尔特", "「嘛,如果想起来了的话,就算是卸载艺术上我也会公诸于众的」", "aiy120000360.ogg"], //老板娘35
+ ["吉克", "「喔唷」", "aiy340000200.ogg"], //吉克20
+ ["吉克", "「那么,我就不能比你先死了啊」", "aiy340000210.ogg"], //吉克21
+ ["梅尔特", "「蒙你费心」", "aiy120000370.ogg"], //老板娘36
+ ["梅尔特", "「顺带一提,有传言说吃过我们这里的料理后可以长生不老哦?」", "aiy120000380.ogg"], //老板娘37
+ ["吉克", "「好,来两份炖菜,记得加腊肠」", "aiy340000220.ogg"], //吉克22
+ ["梅尔特", "「多谢惠顾」", "aiy120000390.ogg"], //老板娘38
+ ["", "微微一笑后,梅尔特去厨房传达点单。"],
+ ["凯伊姆", "「吉克······」", "aiy310001050.ogg"], //男主105
+ ["吉克", "「啊,不好了」", "aiy340000230.ogg"], //吉克23
+ ["凯伊姆", "「话题扯远了」", "aiy310001060.ogg"], //男主106
+ ["梅尔特", "「什么话题来着?」", "aiy120000400.ogg"], //老板娘39
+ ["凯伊姆", "「关于为什么你的钱会被偷这件事」", "aiy310001070.ogg"], //男主107
+ ["凯伊姆", "「丢钱的时候以你来说,应该不会全无察觉吧?」", "aiy310001080.ogg"], //男主108
+ ["梅尔特", "「算是吧,被偷的时候确实也想过要抓住他」", "aiy120000410.ogg"], //老板娘40
+ ["梅尔特", "「但是,我注意到了那个孩子背后的鼓起呢」", "aiy120000420.ogg"], //老板娘41
+ ["凯伊姆", "「所以就不由自主地放他逃跑了?」", "aiy310001090.ogg"], //男主109
+ ["吉克", "「就算你想羽化病人施恩,也不会得到任何回报哦」", "aiy340000240.ogg"], //吉克24
+ ["梅尔特", "「我知道」", "aiy120000430.ogg"], //老板娘42
+ ["梅尔特", "「正因为知道,所以之后才会拜托凯伊姆去将钱取回的」", "aiy120000440.ogg"], //老板娘43
+ ["梅尔特", "「可是,呢······」", "aiy120000450.ogg"], //老板娘44
+ ["梅尔特", "「果然还是很矛盾呢」", "aiy120000460.ogg"], //老板娘45
+ ["梅尔特", "「明明是自己放他逃跑的,之后又拜托别人去抓他」", "aiy120000470.ogg"], //老板娘46
+ ["梅尔特", "「但是,在那一刹那······应该说是,突然露出了真心吧」", "aiy120000480.ogg"], //老板娘47
+ ["梅尔特", "「真的,只是自我满足而已」", "aiy120000490.ogg"], //老板娘48
+ ["凯伊姆", "「对于那个孩子来说不是很幸运么」", "aiy310001100.ogg"], //男主110
+ ["凯伊姆", "「在被《不蚀金锁》抓到之前,就被羽狩保护了」", "aiy310001110.ogg"], //男主111
+ ["凯伊姆", "「现在应该已经躺在治愈院的床上了」", "aiy310001120.ogg"], //男主112
+ ["吉克", "「如果被我们抓到的话,嘛,至少也会断掉一根胳膊吧」", "aiy340000250.ogg"], //吉克25
+ ["凯伊姆", "「比起失去胳膊,这不是个很好地结局吗」", "aiy310001130.ogg"], //男主113
+ ["吉克", "「多亏梅尔特的一念之善,那个小子的胳膊被救下来了」", "aiy340000260.ogg"], //吉克26
+ ["吉克", "「对我来说,不能去管教他稍微有点可惜就是了」", "aiy340000270.ogg"], //吉克27
+ ["凯伊姆", "「我姑且是给了他两三拳」", "aiy310001140.ogg"], //男主114
+ ["吉克", "「你这不是很善解人意么」", "aiy340000280.ogg"], //吉克28
+ ["梅尔特", "「没有帮他的忙啊」", "aiy120000500.ogg"], //老板娘49
+ ["凯伊姆", "「你给我用常识考虑考虑」", "aiy310001150.ogg"], //男主115
+ ["梅尔特", "「本来,就算羽化病人不被羽狩带走而导致羽化病扩散,在牢狱里死亡的理由也要多少就有多少」", "aiy120000510.ogg"], //老板娘50
+ ["梅尔特", "「没事到如今多一个病人,也不会有什么改变的吧」", "aiy120000520.ogg"], //老板娘51
+ ["梅尔特", "「那么,那么些羽化病人为什么就不能和我们一起开心地生活呢」", "aiy120000530.ogg"], //老板娘52
+ ["吉克", "「像梅尔特这样思考的人少之又少」", "aiy340000290.ogg"], //吉克29
+ ["凯伊姆", "「就算早晚都会死去,为了今日的苟活而努力拼搏也是人之常情」", "aiy310001160.ogg"], //男主116
+ ["梅尔特", "「我知道」", "aiy120000540.ogg"], //老板娘53
+ ["梅尔特", "「别介意,我刚才只是顺口说说」", "aiy120000550.ogg"], //老板娘54
+ ["", "喀啷喀啷"],
+ ["梅尔特", "「辛苦了,艾莉斯」", "aiy120000560.ogg"], //老板娘55
+ ["艾莉斯", "「嗯」", "aiy020000190.ogg"], //医生19
+ ["", "用不可爱的声音随口回应后,艾莉斯理所当然般地在我左边的座位坐下"],
+ ["", "梅尔特什么都没有问,就开始准备起茶来"],
+ ["梅尔特", "「多亏你去帮忙叫凯伊姆了呢」", "aiy120000570.ogg"], //老板娘56
+ ["艾莉斯", "「不客气」", "aiy020000200.ogg"], //医生20
+ ["艾莉斯", "「我从店里出去以后不久就看到他了,这是我们被命运之绳紧紧相连的证明呢」", "aiy020000210.ogg"], //医生21
+ ["凯伊姆", "「那还真是糟糕」", "aiy310001170.ogg"], //男主117
+ ["艾莉斯", "「用不着这么害羞的」", "aiy020000220.ogg"], //医生22
+ ["凯伊姆", "「用茶堵上你的嘴吧」", "aiy310001180.ogg"], //男主118
+ ["艾莉斯", "「好」", "aiy020000230.ogg"], //医生23
+ ["梅尔特", "「司空见惯的风景呢」", "aiy120000580.ogg"], //老板娘57
+ ["凯伊姆", "「你在那之后去做什么了?」", "aiy310001190.ogg"], //男主119
+ ["艾莉斯", "「去莉莉乌姆照顾患病的女孩子了」", "aiy020000240.ogg"], //医生24
+ ["艾莉斯", "「好像是毒品上瘾,费了很大劲才止住她的胡闹」", "aiy020000250.ogg"], //医生25
+ ["艾莉斯", "「希望你能好好管理下自己店里的娼妇呢」", "aiy020000260.ogg"], //医生26
+ ["吉克", "「抱歉啊」", "aiy340000300.ogg"], //吉克30
+ ["吉克", "「为表歉意,就让我来给艾莉斯诊疗一下吧」", "aiy340000310.ogg"], //吉克31
+ ["艾莉斯", "「去死吧」", "aiy020000270.ogg"], //医生27
+ ["梅尔特", "「是什么药?」", "aiy120000590.ogg"], //老板娘58
+ ["吉克", "「是最近上市的一种药」", "aiy340000320.ogg"], //吉克32
+ ["吉克", "「虽然中毒的可能性很低,但只要中毒便会一发而不可收拾」", "aiy340000330.ogg"], //吉克33
+ ["艾莉斯", "「知道了」", "aiy020000280.ogg"], //医生28
+ ["吉克", "「虽然我也许没有时间去管教她,不过我还是会注意的」", "aiy340000340.ogg"], //吉克34
+ ["艾莉斯", "「毒药的主人是吉克吗?」", "aiy020000290.ogg"], //医生29
+ ["吉克", "「《不蚀金锁》不卖药,这是从先代定下的规矩」", "aiy340000350.ogg"], //吉克35
+ ["艾莉斯", "「抱歉,开玩笑的」", "aiy020000300.ogg"], //医生30
+ ["吉克", "「关于药的出处,这边也会调查的」", "aiy340000360.ogg"], //吉克36
+ ["吉克", "「如果有什么传闻的话记得告诉我」", "aiy340000370.ogg"], //吉克37
+ ["艾莉斯", "「知道了」", "aiy020000310.ogg"], //医生31
+ ["艾莉斯", "「麻药中毒的人真麻烦呢,又不能完全治好」", "aiy020000320.ogg"], //医生32
+ ["艾莉斯", "「既然要悄悄的打,那就也悄悄地去死不就好了」", "aiy020000330.ogg"], //医生33
+ ["", "喀啷喀啷"],
+ ["奥兹", "「吉克大人,抱歉打扰你开心的时光」", "aiy350000240.ogg"], //金锁高官24
+ ["吉克", "「怎么了」", "aiy340000380.ogg"], //吉克38
+ ["奥兹", "「请将耳朵凑过来」", "aiy350000250.ogg"], //金锁高官25
+ ["吉克", "「······知道了」", "aiy340000390.ogg"], //吉克39
+ ["吉克", "「凯伊姆,一会到娼馆来一趟」", "aiy340000400.ogg"], //吉克40
+ ["凯伊姆", "「啊啊」", "aiy310001200.ogg"], //男主120
+ ["吉克", "「噢,我都给忘了」", "aiy340000410.ogg"], //吉克41
+ ["吉克", "「让这里的大家都开心一下」", "aiy340000420.ogg"], //吉克42
+ ["梅尔特", "「收到」", "aiy120000600.ogg"], //老板娘59
+ ["吉克", "「我走了」", "aiy340000430.ogg"], //吉克43
+ ["奥兹", "「好」", "aiy350000260.ogg"], //金锁高官26
+ ["", "梆梆"],
+ ["梅尔特", "「大家静静,有个好消息」", "aiy120000610.ogg"], //老板娘60
+ ["梅尔特", "「今天有个『大人物』要请客哦」", "aiy120000620.ogg"], //老板娘61
+ ["艾莉斯", "「吉克还是一如既往的大方」", "aiy020000340.ogg"], //医生34
+ ["梅尔特", "「果然,头目就应该像这样呢」", "aiy120000630.ogg"], //老板娘62
+ ["凯伊姆", "「他的做法是继承先代的」", "aiy310001210.ogg"], //男主121
+ ["梅尔特", "「又来了又来了」", "aiy120000640.ogg"], //老板娘63
+ ["梅尔特", "「他想要赶上先代还早了十年呢」", "aiy120000650.ogg"], //老板娘64
+ ["凯伊姆", "「有些太严厉了吧」", "aiy310001220.ogg"], //男主122
+ ["艾莉斯", "「说起来,吉克有什么事」", "aiy020000350.ogg"], //医生35
+ ["梅尔特", "「既然要叫上凯伊姆,再怎么说也不是什么小事吧?」", "aiy120000670.ogg"], //老板娘66
+ ["凯伊姆", "「说的也是」", "aiy310001230.ogg"], //男主123
+ ["艾莉斯", "「我期待看到你光荣负伤的样子」", "aiy020000360.ogg"], //医生36
+ ["凯伊姆", "「不要为人的不幸祈求啊」", "aiy310001240.ogg"], //男主124
+ ["梅尔特", "「来,喝完这杯就去加油工作吧」", "aiy120000680.ogg"], //老板娘67
+ ["凯伊姆", "「啊啊」", "aiy310001250.ogg"], //男主125
+ ["凯伊姆", "「我走了」", "aiy310001260.ogg"], //男主126
+ ["艾莉斯", "「加油(受伤)吧」", "aiy020000370.ogg"], //医生37
+ ["梅尔特", "「一路走好」", "aiy120000690.ogg"], //老板娘68
+ ];
+ this.chapter05 = [
+ ["", "今晚的娼馆街比平常来得更加热闹"],
+ ["", "视线中可以看到很多生客。"],
+ ["莉莎", "「呀——!」", "aiy150000010.ogg"], //三小只C01
+ ["莉莎", "「呐,凯伊姆凯伊姆凯伊姆」", "aiy150000020.ogg"], //三小只C02
+ ["莉莎", "「我难道没有魅力吗?」", "aiy150000030.ogg"], //三小只C03
+ ["凯伊姆", "「突然之间怎么了」", "aiy310001270.ogg"], //男主127
+ ["莉莎", "「因为因为因为,明明这么热闹,却只有我没有接到客人」", "aiy150000040.ogg"], //三小只C04
+ ["莉莎", "「亏我还对他们说,我会用超绝的技巧让他们舒服得如同化作夜明的流星般呢」", "aiy150000050.ogg"], //三小只C05
+ ["凯伊姆", "「那个台词太糟糕了」", "aiy310001280.ogg"], //男主128
+ ["莉莎", "「哎—什么啊,这可是我昨天花了一晚上考虑出来的呢」", "aiy150000060.ogg"], //三小只C06
+ ["凯伊姆", "「去睡觉,不要用你那空空如也的脑袋去考虑这种无聊事」", "aiy310001290.ogg"], //男主129
+ ["莉莎", "「好过分!?」", "aiy150000070.ogg"], //三小只C07
+ ["凯伊姆", "「你看看周围,今天有很多新客人吧?」", "aiy310001300.ogg"], //男主130
+ ["莉莎", "「嗯~~」", "aiy150000080.ogg"], //三小只C08
+ ["莉莎", "「啊,你这么一说还真是」", "aiy150000090.ogg"], //三小只C09
+ ["凯伊姆", "「他们心里都很紧张,不可能会被你这种强拉的手法钓上钩吧」", "aiy310001310.ogg"], //男主131
+ ["莉莎", "「这样啊,是不想欲仙欲死吗?」", "aiy150000100.ogg"], //三小只C10
+ ["凯伊姆", "「不,没有男人不会希望那样的」", "aiy310001320.ogg"], //男主132
+ ["凯伊姆", "「不过,强来是不行的。去让他们被温柔地包容着化作流星吧」", "aiy310001330.ogg"], //男主133
+ ["莉莎", "「原—来如此」", "aiy150000110.ogg"], //三小只C11
+ ["莉莎", "「凯伊姆肯定很有娼妇的才能哦」", "aiy150000120.ogg"], //三小只C12
+ ["凯伊姆", "「没有」", "aiy310001340.ogg"], //男主134
+ ["凯伊姆", "「好了,你赶紧去赚钱吧」", "aiy310001350.ogg"], //男主135
+ ["莉莎", "「收到—」", "aiy150000130.ogg"], //三小只C13
+ ["", "莉莎精神满满地回答后,就啪嗒啪嗒地跑开了。"],
+ ["莉莎", "「呐—那边的大哥哥,和我一起化作星光吧—」", "aiy150000140.ogg"], //三小只C14
+ ["", "这家伙"],
+ ["", "非要用这么麻烦的说法么。"],
+ ["", "咚"],
+ ["莉莎", "「呀」", "aiy150000150.ogg"], //三小只C15
+ ["大胡子醉汉", "「好疼」", "aiy800000010.ogg"],
+ ["", "突然,莉莎与一个男人相撞。"],
+ ["", "虽然男人可以摆出派头,但从那虚浮的脚步可以看出他相当的醉意。"],
+ ["莉莎", "「好疼疼,对不起」", "aiy150000160.ogg"], //三小只C16
+ ["大胡子醉汉", "「这不是道歉就能了事的事吧,大姐—」", "aiy800000020.ogg"],
+ ["大胡子醉汉", "「哟,穿得相当清凉啊,喂」", "aiy800000030.ogg"],
+ ["大肚子的醉汉", "「喂—怎么了?」", "aiy810000010.ogg"],
+ ["大胡子醉汉", "「这位小姐特意往我身上撞呢」", "aiy800000040.ogg"],
+ ["大肚子的醉汉", "「喂喂喂喂,你是要做什么」", "aiy810000020.ogg"],
+ ["莉莎", "「呜哎—所以我都说对不起了啊」", "aiy150000170.ogg"], //三小只C17
+ ["莉莎", "「对,对了。作为冲撞的补偿,我会给您提供很好的服务的,怎么样?」", "aiy150000180.ogg"], //三小只C18
+ ["大胡子醉汉", "「是免费的吧?」", "aiy800000050.ogg"],
+ ["莉莎", "「那个······这,这姑且也是工作······免费就太」", "aiy150000190.ogg"], //三小只C19
+ ["大肚子的醉汉", "「真是的,娼妇就是这种人。钱,钱,钱,完全没有做人的诚意」", "aiy810000030.ogg"],
+ ["大胡子醉汉", "「好—你这家伙。我给你钱,你现在就在这里给我服务」", "aiy800000060.ogg"],
+ ["莉莎", "「这,这该怎么说呢,稍微有些过了吧,在这里做很害羞的」", "aiy150000200.ogg"], //三小只C20
+ ["大胡子醉汉", "「你除了晃腰以外还有用得着脑子的地方吗?别说这种像个人说的话啊」", "aiy800000070.ogg"],
+ ["大肚子的醉汉", "「啊啊?这些钱不够吗?」", "aiy810000040.ogg"],
+ ["大胡子醉汉", "「来,赶快把脚张开让我O,你们最喜欢这种事了吧?」", "aiy800000080.ogg"],
+ ["莉莎", "「是,是认真的吗······这些人」", "aiy150000210.ogg"], //三小只C21
+ ["大肚子的醉汉", "「赶快做」", "aiy810000050.ogg"],
+ ["莉莎", "「呃······」", "aiy150000220.ogg"], //三小只C22
+ ["凯伊姆", "「喂」", "aiy310001360.ogg"], //男主136
+ ["大肚子的醉汉", "「啊?」", "aiy810000060.ogg"],
+ ["凯伊姆", "「即便是娼妇,也有不能出售的东西」", "aiy310001370.ogg"], //男主137
+ ["", "喀"],
+ ["", "我一拳击中男人被酒精染红的脸,"],
+ ["大胡子醉汉", "「咦」", "aiy800000090.ogg"],
+ ["", "嘎"],
+ ["", "再一拳击中另一个人的腹部。"],
+ ["大肚子的醉汉", "「咕······」", "aiy810000070.ogg"],
+ ["大胡子醉汉", "「唔······」", "aiy800000100.ogg"],
+ ["", "两人像两只毛虫般躺在地上蠕动着挣扎"],
+ ["", "一时半会应该起不来了吧"],
+ ["莉莎", "「凯伊姆先生,太迟了太迟了太迟了」", "aiy150000230.ogg"], //三小只C23
+ ["凯伊姆", "「都是你闯出的祸吧」", "aiy310001380.ogg"], //男主138
+ ["莉莎", "「话是,那么说,可是」", "aiy150000240.ogg"], //三小只C24
+ ["凯伊姆", "「赶快回莉莉乌姆去」", "aiy310001390.ogg"], //男主139
+ ["莉莎", "「唔,嗯。谢了,凯伊姆。再见」", "aiy150000250.ogg"], //三小只C25
+ ["", "久留无用"],
+ ];
+ this.chapter06 = [
+ ["", "漂浮的紫烟与甜美香醇的空气。"],
+
+
+ ];
+},
+ "动画及周期装备映射": function () {
+ // 在此增加新插件
+ this.equip = {
+ //所有回合中的装备及速度
+ sword1: { id: "sword1", speed: 10 },
+ };
+ this.heroanimate = {
+ //勇士武器对应的动画(key为主手武器ID,value为帧动画名)
+ sword1: "sword",
+ };
+ this.enemyanimate = {
+ //怪物对应的动画(key为怪物ID,value为帧动画名)
+ bat: "sword",
+ };
+ this.equipanimate = {
+ //勇士周期性装备对应的动画(key为装备Id,value为帧动画名)
+ shield0: "sword",
+ };
+},
+ "勇士法抗乘算叠加": function () {
// 在此增加新插件
- const animateAttack = document.createElement("canvas"); //画布设置
- animateAttack.style.zIndex = 80;
- animateAttack.id = "animateAttack";
- animateAttack.classList.add("gameCanvas", "anti-aliasing");
- animateAttack.style.display = "block";
- animateAttack.width = 416;
- animateAttack.height = 416;
- animateAttack.style.width = core.__PIXELS__ * core.domStyle.scale + "px";
- animateAttack.style.height = core.__PIXELS__ * core.domStyle.scale + "px";
- main.dom.animateAttack = animateAttack;
- const ctx = animateAttack.getContext("2d");
-
- main.dom.gameDraw.appendChild(animateAttack);
-
- this.drawAttackAnimate = function (
- heroInfo,
- oneTurn,
- enemyInfo,
- equipInfo,
- farme,
- damageInfo
+ items.prototype.compareEquipment = function (
+ compareEquipId,
+ beComparedEquipId
) {
- let attack = false;
- if (heroInfo.isAttack) attack = true;
- if (enemyInfo.isAttack) attack = true;
- equipInfo.forEach(function (v) {
- if (v.isAttack) attack = true;
- });
- core.clearMap(ctx);
- let animate = Math.floor(farme / 30);
- core.fillRect(ctx, 64, 64, 288, 288, "rgba(0,0,0,0.5)");
- core.strokeRect(ctx, 64, 64, 288, 288, "rgba(255,255,255,0.5)", 4);
- core.setTextAlign(ctx, "center");
- core.fillBoldText(
- ctx,
- hero.name,
- 127,
- 128,
- "#FFFFFF",
- "#000000",
- "bold 14px pala"
- );
- core.setTextAlign(ctx, "left");
- core.drawIcon(ctx, "hp", 70, 190, 16, 16);
- core.drawIcon(ctx, "atk", 70, 210, 16, 16);
- core.drawIcon(ctx, "def", 70, 230, 16, 16);
- core.drawIcon(ctx, "I374", 70, 250, 16, 16);
- core.drawIcon(ctx, "I375", 70, 270, 16, 16);
- core.drawIcon(ctx, "mdef", 70, 290, 16, 16);
- core.drawIcon(ctx, "amulet", 70, 310, 16, 16);
- core.drawIcon(ctx, "jumpShoes", 70, 330, 16, 16);
- core.fillBoldText(
- ctx,
- "生命 " +
- core.formatBigNumber(heroInfo.hp, true) +
- " / " +
- core.formatBigNumber(heroInfo.hpmax, true),
- 90,
- 205,
- "#FFFFFF",
- "#000000",
- "bold 14px pala"
- );
- core.fillBoldText(
- ctx,
- "攻击 " + core.formatBigNumber(heroInfo.atk),
- 90,
- 225,
- "#FFFFFF",
- "#000000",
- "bold 14px pala"
- );
- core.fillBoldText(
- ctx,
- "防御 " + core.formatBigNumber(heroInfo.def),
- 90,
- 245,
- "#FFFFFF",
- "#000000",
- "bold 14px pala"
- );
- core.fillBoldText(
- ctx,
- "法强 " + core.formatBigNumber(heroInfo.spell),
- 90,
- 265,
- "#FFFFFF",
- "#000000",
- "bold 14px pala"
- );
- core.fillBoldText(
- ctx,
- "法攻 " +
- core.formatBigNumber((heroInfo.matk / 100) * heroInfo.spell) +
- "(" +
- heroInfo.matk +
- "%)",
- 90,
- 285,
- "#FFFFFF",
- "#000000",
- "bold 14px pala"
- );
- core.fillBoldText(
- ctx,
- "护盾 " +
- core.formatBigNumber((heroInfo.mhp / 100) * heroInfo.spell) +
- "(" +
- heroInfo.mhp +
- "%)",
- 90,
- 305,
- "#FFFFFF",
- "#000000",
- "bold 14px pala"
- );
- core.fillBoldText(
- ctx,
- "法抗 " + heroInfo.mdef + "%",
- 90,
- 325,
- "#FFFFFF",
- "#000000",
- "bold 14px pala"
- );
- core.fillBoldText(
- ctx,
- "速度 " + core.formatBigNumber(heroInfo.speed),
- 90,
- 345,
- "#FFFFFF",
- "#000000",
- "bold 14px pala"
- );
+ var result = { value: {}, percentage: {} };
+ var first = core.material.items[compareEquipId],
+ second = core.material.items[beComparedEquipId];
+ for (var one in result) {
+ for (var name in core.status.hero) {
+ if (name === "mdef" && one === "percentage") {
+ var ans = 1;
+ if (first?.equip?.[one]?.[name])
+ ans *= 1 - (first.equip[one][name] || 0) / 100;
- core.strokeRect(ctx, 112, 139, 32, 48, "rgba(255,255,255,1)", 1);
- core.drawImage(
- ctx,
- "hero.webp",
- 32 * (animate % 4),
- 0,
- 32,
- 48,
- 112,
- 139,
- 32,
- 48
- );
+ if (second?.equip?.[one]?.[name])
+ ans /= 1 - (second.equip[one][name] || 0) / 100;
- core.setTextAlign(ctx, "center");
- core.fillBoldText(
- ctx,
- enemyInfo.name,
- 289,
- 128,
- "#FFFFFF",
- "#000000",
- "bold 14px pala"
- );
-
- core.setTextAlign(ctx, "right");
- if (enemyInfo.cls === "enemys") {
- core.strokeRect(ctx, 272, 155, 32, 32, "rgba(255,255,255,1)", 1);
-
- core.drawImage(
- ctx,
- core.getBlockInfo(enemyInfo.id).image,
- 32 * (animate % 2),
- core.getBlockInfo(enemyInfo.id).posY * 32,
- 32,
- 32,
- 272,
- 155,
- 32,
- 32
- );
- } else {
- core.strokeRect(ctx, 272, 139, 32, 48, "rgba(255,255,255,1)", 1);
-
- core.drawImage(
- ctx,
- core.getBlockInfo(enemyInfo.id).image,
- 32 * (animate % 4),
- core.getBlockInfo(enemyInfo.id).posY * 48,
- 32,
- 48,
- 272,
- 139,
- 32,
- 48
- );
- }
- core.drawIcon(ctx, "hp", 330, 190, 16, 16);
- core.drawIcon(ctx, "atk", 330, 210, 16, 16);
- core.drawIcon(ctx, "def", 330, 230, 16, 16);
- core.drawIcon(ctx, "amulet", 330, 250, 16, 16);
- core.drawIcon(ctx, "jumpShoes", 330, 270, 16, 16);
- core.fillBoldText(
- ctx,
- core.formatBigNumber(enemyInfo.hp, true) + " 生命",
- 330,
- 205,
- "#FFFFFF",
- "#000000",
- "bold 14px pala"
- );
- core.fillBoldText(
- ctx,
- core.formatBigNumber(enemyInfo.atk) + " 攻击",
- 330,
- 225,
- "#FFFFFF",
- "#000000",
- "bold 14px pala"
- );
- core.fillBoldText(
- ctx,
- core.formatBigNumber(enemyInfo.def) + " 防御",
- 330,
- 245,
- "#FFFFFF",
- "#000000",
- "bold 14px pala"
- );
-
- core.fillBoldText(
- ctx,
- (enemyInfo.mdef ?? 0) * 100 + "% 法抗",
- 330,
- 265,
- "#FFFFFF",
- "#000000",
- "bold 14px pala"
- );
- core.fillBoldText(
- ctx,
- core.formatBigNumber(enemyInfo.speed) + " 速度",
- 330,
- 285,
- "#FFFFFF",
- "#000000",
- "bold 14px pala"
- );
- core.fillBoldText(
- ctx,
- "V",
- 219,
- 163,
- "#FFFFFF",
- "#000000",
- "bold 48px pala"
- );
- core.fillBoldText(
- ctx,
- "s",
- 231,
- 163,
- "#FFFFFF",
- "#000000",
- "bold 36px pala"
- );
-
- if (!attack) enemyInfo.now += (enemyInfo.speed / oneTurn) * 215;
- let enemynow = Math.min(100 + enemyInfo.now, 315);
- ctx.fillStyle = "#FFFFFF";
- ctx.beginPath();
- ctx.moveTo(enemynow, 100);
- ctx.lineTo(enemynow + 3, 90);
- ctx.lineTo(enemynow - 3, 90);
- ctx.closePath();
- ctx.fill();
-
- if (enemyInfo.cls === "enemys") {
- core.drawImage(
- ctx,
- core.getBlockInfo(enemyInfo.id).image,
- 32,
- core.getBlockInfo(enemyInfo.id).posY * 32,
- 32,
- 32,
- enemynow - 16,
- 64,
- 32,
- 32
- );
- } else {
- core.drawImage(
- ctx,
- core.getBlockInfo(enemyInfo.id).image,
- 32,
- core.getBlockInfo(enemyInfo.id).posY * 48,
- 32,
- 19,
- enemynow - 16,
- 70,
- 32,
- 19
- );
- }
- core.drawLine(ctx, 100, 105, 315, 105, "#FFFFFF", 5);
- equipInfo.forEach(function (v) {
- if (!attack) v.now += (v.speed / oneTurn) * 215;
- let vnow = Math.min(100 + v.now, 315);
- ctx.beginPath();
- ctx.moveTo(vnow, 100);
- ctx.lineTo(vnow + 3, 90);
- ctx.lineTo(vnow - 3, 90);
- ctx.closePath();
-
- ctx.fill();
-
- core.drawIcon(ctx, v.id, vnow - 16, 64, 32, 32);
- });
- if (!attack) heroInfo.now += (heroInfo.speed / oneTurn) * 215;
- let heronow = Math.min(100 + heroInfo.now, 315);
- ctx.beginPath();
- ctx.moveTo(heronow, 100);
- ctx.lineTo(heronow + 3, 90);
- ctx.lineTo(heronow - 3, 90);
- ctx.closePath();
-
- ctx.fill();
- core.drawImage(ctx, "hero.webp", 0, 0, 32, 19, heronow - 16, 70, 32, 19);
-
- if (heroInfo.now >= 215 && !heroInfo.isAttack) {
- heroInfo.isAttack = true;
- animateOnAttack("sword", true, () => {
- heroInfo.now -= 215;
- heroInfo.isAttack = false;
- });
- }
- if (enemyInfo.now >= 215 && !enemyInfo.isAttack) {
- enemyInfo.isAttack = true;
- animateOnAttack("sword", false, () => {
- enemyInfo.now -= 215;
- enemyInfo.isAttack = false;
- });
- }
- equipInfo.forEach((v) => {
- if (v.now >= 215 && !v.isAttack) {
- v.isAttack = true;
-
- animateOnAttack("sword", true, () => {
- v.now -= 215;
- v.isAttack = false;
- });
+ if (ans != 1) result[one][name] = ans;
+ } else if (name === "mdef" && one === "value") {
+ var ans = 0;
+ if (first) ans -= ((first.equip || {})[one] || {})[name] || 0;
+ if (second) ans += ((second.equip || {})[one] || {})[name] || 0;
+ if (ans != 0) result[one][name] = ans;
+ } else {
+ if (typeof core.status.hero[name] == "number") {
+ var ans = 0;
+ if (first) ans += ((first.equip || {})[one] || {})[name] || 0;
+ if (second) ans -= ((second.equip || {})[one] || {})[name] || 0;
+ if (ans != 0) result[one][name] = ans;
+ }
+ }
}
- });
+ }
+ return result;
};
+ let a = 1;
+ items.prototype._loadEquipEffect = function (equipId, unloadEquipId) {
+ // 比较能力值
+ var result = core.compareEquipment(equipId, unloadEquipId);
- function animateOnAttack(name, onenemy, callback) {
- if (onenemy) {
- core.playanimate(name, 290, 160, null, 1, 1, callback);
- } else {
- core.playanimate(name, 130, 160, null, 1, 1, callback);
- }
- }
-
- this.attackAnimate = function (
- enemyId,
- enemyInfo,
- damageInfo,
- equipInfo = []
- ) {
- //参数分别为怪物真实属性,战斗信息,特殊装备(如火焰风衣)属性特殊装备属性为以元组{equipId,oneDamage,speed,now:0}构成的数组(列出每个需要计算的特殊装备,没有则为空数组或不填)
- core.lockControl();
- core.clearMap(ctx);
- core.status.event.id = "attackAnimate";
- let hero_hp = core.getRealStatusOrDefault(hero, "hp"),
- hero_atk = core.getRealStatusOrDefault(hero, "atk"),
- hero_def = core.getRealStatusOrDefault(hero, "def"),
- hero_spell = core.getRealStatusOrDefault(hero, "spell"),
- hero_matk = core.getRealStatusOrDefault(hero, "matk"),
- hero_mdef = core.getRealStatusOrDefault(hero, "mdef"),
- hero_speed = core.getRealStatusOrDefault(hero, "speed"),
- hero_hpmax = core.getRealStatusOrDefault(hero, "hpmax"),
- hero_mhp = core.getRealStatusOrDefault(hero, "mhp");
- const heroInfo = {
- hp: hero_hp,
- hpmax: hero_hpmax,
- atk: hero_atk,
- def: hero_def,
- spell: hero_spell,
- mhp: hero_mhp,
- matk: hero_matk,
- mdef: hero_mdef,
- speed: hero_speed,
- now: 0,
- isAttack: false,
- };
- enemyInfo.id = enemyId;
- enemyInfo.cls = core.getClsFromId(enemyId);
- enemyInfo.name = core.material.enemys[enemyId].name;
- enemyInfo.now = 0;
- enemyInfo.isAttack = false;
- let oneTurn = heroInfo.speed + enemyInfo.speed;
- if (equipInfo.length > 0) {
- for (let i; i < equipInfo.length - 1; i++) {
- equipInfo[i].now = 0;
- equipInfo[i].isAttack = false;
- oneTurn += equipInfo[i].speed;
+ for (var name in result.percentage) {
+ if (name === "mdef") {
+ a *= result.percentage[name];
+ core.setBuff(name, 1 - a);
+ } else {
+ core.addBuff(name, result.percentage[name] / 100);
}
}
- oneTurn *= 25;
- let time = 0,
- farme = 0;
-
- core.registerAnimationFrame("attackAnimate", true, (temptime) => {
- if (temptime - time > 1000 / 60) {
- time = temptime;
- this.drawAttackAnimate(
- heroInfo,
- oneTurn,
- enemyInfo,
- equipInfo,
- farme,
- damageInfo
- );
- farme++;
- }
- });
+ for (var name in result.value)
+ core.status.hero[name] += result.value[name];
};
},
- "剧情内容": function () {
- // 在此增加新插件
- // 每项为一个数组,第一项是名字,第二项是对话内容
- // 回放只会在同一个this下回放,进入剧情前请以事件块声明进入哪个剧情数组
- // 可以自由添加,但不能与已有插件及函数名相同,可以使用中文。
- this.chapter0 = [
- ["", "这些天,街道不曾下雨。"],
- ["", "所以,那浸湿地面的,定是那些女孩们流落的鲜血无疑。"],
- ["", "我蹲在充斥着铁锈味般恶臭的小巷中,悠闲地如是想着。"],
- ["", "扑哧。"],
- ["", "耳旁再次响起象征着某个女孩子死去的声音。"],
- ["", "再一次——"],
- ["", "再一次。"],
- ["", "女子们被肢解成单纯的肉块。"],
- ["", "我任由流下的血浸满全身,屏住自己的呼吸。"],
- ["", "祈求自己能拥有从猎人手中逃脱的幸运。"],
- ["", "扑哧。"],
- ["", "直到刚才,我们还坐在去往娼馆的马车的路上。"],
- ["", "而在这之中的某些人,已经不在这个世上了。"],
- ["", "不,应该把“某些”换成“几乎所有”才更为恰当吧。"],
- ["", "恐怕,不久之后我也会变成小巷中血腥的装饰品。"],
- ["", "我是为了得到这种死法,才辛苦苟活至今的吗?"],
- ["", "来个人告诉我啊——"],
- ["", "谁都好。"],
- ["", "来人啊!!"],
- ["少女", "「呃······!?」", "aiy010000010.opus"], //小动物01
- ["", "漆黑的物体充斥了我的整个视野"],
- ["", "我很快意识到,那是只很大的脚。"],
- ["", "必须要出声求救。"],
- ["", "可是,耳中却只能听到自己的牙关不停交战的声音。"],
- ["", "我是如此的无助。"],
- ["", "逃跑也好,道歉也罢。"],
- ["", "就连抬头看一眼将要杀掉我的人的面孔都做不到。"],
- ["少女", "「······被杀」", "aiy010000020.opus"], //小动物02
- ["", "会被杀。"],
- ["", "会被杀!!"],
- ["", "来自内心深处的冰冷预感,渐渐地在体内蔓延开来。"],
- ["少女", "「不,不要······」", "aiy010000030.opus"], //小动物03
- ["", "浮游都市,《诺瓦斯·艾蒂尔》。"],
- ["", "《特别受灾地区》——"],
- ["", "通称,《牢狱》"],
- ["", "是被险峻的峭壁环绕,与世隔绝的,都市的最底部。"],
- ["年轻人", "「放开我!」", "aiy710000010.opus"], //龙套1-01
- ["年轻人", "「我只是在帮那个女人而已!」", "aiy710000020.opus"], //龙套1-02
- ["年轻人", "「你们没听到吗!?」", "aiy710000030.opus"], //龙套1-03
- ["年轻人", "「她是被受骗才会被卖到娼馆来的」", "aiy710000040.opus"], //龙套1-04
- [
- "年轻人",
- "「用肮脏的手段把钱借给她父母的,就是你们这些家伙吧!?」",
- "aiy710000050.opus",
- ], //龙套1-05
- ["年轻人", "「给我说些什么啊」", "aiy710000060.opus"], //龙套1-06
- ["凯伊姆", "「这些话等到了娼馆再说吧」", "aiy310000010.opus"], //男主01
- ["凯伊姆", "「我来抓你,只是受雇于人而已」", "aiy310000020.opus"], //男主02
- ["", "我走进娼馆《莉莉乌姆》的接待室。"],
- ["", "正在桌旁整理账簿的奥兹停下手头的工作,抬起头向我看来。"],
- ["奥兹", "「这不是凯伊姆先生吗,辛苦了」", "aiy350000010.opus"], //金锁高官01
- ["奥兹", "「委托已经完成了吗?」", "aiy350000020.opus"], //金锁高官02
- ["凯伊姆", "「啊啊,是这家伙没错吧」", "aiy310000030.opus"], //男主03
- ["", "奥兹用只要接触到就能杀人般的眼神在男人脸上搜过。"],
- ["奥兹", "「没错,就是这个人」", "aiy350000030.opus"], //金锁高官03
- ["凯伊姆", "「是么」", "aiy310000040.opus"], //男主04
- ["年轻人", "「你,你们要对我做什么」", "aiy710000070.opus"], //龙套1-07
- ["奥兹", "「······」", "aiy350000040.opus"], //金锁高官04
- ["", "奥兹用一个眼神,就让男人闭上了嘴。"],
- ["", "然后,向我这边转过身来。"],
- ["奥兹", "「抱歉啊,总是麻烦你去做这些无聊的事」", "aiy350000050.opus"], //金锁高官05
- ["奥兹", "「都怪我们这边的年轻人太没用」", "aiy350000060.opus"], //金锁高官06
- ["凯伊姆", "「客套话就免了」", "aiy310000050.opus"], //男主05
- ["奥兹", "「这还真是失礼了」", "aiy350000070.opus"], //金锁高官07
- ["奥兹", "「喂,来个人」", "aiy350000080.opus"], //金锁高官08
- ["光头男人", "「是」", "aiy820000010.opus"], //龙套2-01
- ["奥兹", "「凯伊姆先生做完工作回来了」", "aiy350000090.opus"], //金锁高官09
- ["光头男人", "「是,是,那个······」", "aiy820000020.opus"], //龙套2-02
- ["奥兹", "「我是要你拿些酒来,这个蠢材!」", "aiy350000100.opus"], //金锁高官10
- ["", "喀!"],
- ["", "奥兹扔出的烟灰缸砸中了手下的额头。"],
- ["", "鲜血四溅。"],
- ["凯伊姆", "「不用这么麻烦」", "aiy310000060.opus"], //男主06
- ["凯伊姆", "「我接下来要去《菲诺列塔》」", "aiy310000070.opus"], //男主07
- ["奥兹", "「喔唷」", "aiy350000110.opus"], //金锁高官11
- [
- "奥兹",
- "「既然如此,我就不留您在这里喝难饮的劣质酒了」",
- "aiy350000120.opus",
- ], //金锁高官12
- ["", "奥兹斜眼看着正捂住额头呻吟的手下,轻描淡写地说道。"],
- ["凯伊姆", "「用这些钱去买药」", "aiy310000080.opus"], //男主08
- ["", "我将几枚铜钱仍在那个手下的身前。"],
- ["奥兹", "「凯伊姆先生,不用对他们这么好」", "aiy350000130.opus"], //金锁高官13
- ["凯伊姆", "「无妨」", "aiy310000090.opus"], //男主09
- ["凯伊姆", "「话说回来,那个要落跑的女人呢?」", "aiy310000100.opus"], //男主10
- [
- "奥兹",
- "「我把她交给那些年轻人了,现在应该正在体会人生的严苛吧」",
- "aiy350000140.opus",
- ], //金锁高官14
- [
- "奥兹",
- "「正好,趁此机会凯伊姆先生也来享受一番如何?」",
- "aiy350000150.opus",
- ], //金锁高官15
- ["年轻人", "「你,你们这些家伙,要对她做什么!?」", "aiy710000080.opus"], //龙套1-08
- ["", "咣!"],
- ["", "奥兹给了他一拳。"],
- ["", "一击即倒。"],
- ["", "喀,咚,咯!"],
- ["", "奥兹毫不留情地向男人的脸上踩去。"],
- ["年轻人", "「咕······呃咳······」", "aiy710000090.opus"], //龙套1-09
- ["", "折断的牙齿伴着血泡被吐出。"],
- ["", "这份白色在鲜红色的液体中格外显眼。"],
- [
- "年轻人",
- "「你们以为做出这种事······卫兵会坐视不理吗······」",
- "aiy710000100.opus",
- ], //龙套1-10
- ["奥兹", "「啊啊,不会坐视不理的」", "aiy350000160.opus"], //金锁高官16
- [
- "奥兹",
- "「应该会拿出你的钱包,和我们商量如何瓜分吧」",
- "aiy350000170.opus",
- ], //金锁高官17
- ["年轻人", "「那,那种事······」", "aiy710000110.opus"], //龙套1-11
- ["", "这在牢狱是理所当然的事。"],
- ["奥兹", "「怎么,头一回来牢狱么?」", "aiy350000180.opus"], //金锁高官18
- ["", "男人点了点头。"],
- [
- "奥兹",
- "「为了被骗的女人而来到牢狱,真是个规矩人啊」",
- "aiy350000190.opus",
- ], //金锁高官19
- ["奥兹", "「······前提是,被骗的人不是你」", "aiy350000200.opus"], //金锁高官20
- ["年轻人", "「你说······我被骗了?」", "aiy710000120.opus"], //龙套1-12
- ["年轻人", "「那,那是怎么回事!?」", "aiy710000130.opus"], //龙套1-13
- ["奥兹", "「不用急,今天晚上会好好告诉你的」", "aiy350000210.opus"], //金锁高官21
- ["", "奥兹抓起男人的脸。"],
- ["", "为引诱客人的怜悯之心而装纯,是娼妇的惯用手段。"],
- ["", "双亲被骗而借钱,结果作为抵押而将自己卖到这里,这是典型的说法。"],
- [
- "",
- "如果只是头脑发热而成为常客也就罢了,这次的男人热血过头,居然想出了要带女人私奔的计划。",
- ],
- [
- "",
- "虽然女人半开玩笑地予以拒绝,但不知天高地厚的这家伙还是拉着她逃跑了。",
- ],
- ["", "不过,想要逃脱追击本来就是不可能的任务。"],
- ["", "但即便如此,这种事情还是会一再的出现。"],
- ["", "说谎的女人和被骗的男人。"],
- ["", "在娼馆街,这是令人看到生厌的日常的风景。"],
- ["凯伊姆", "「我要走了」", "aiy310000110.opus"], //男主11
- ["奥兹", "「好的,下次再麻烦您」", "aiy350000220.opus"], //金锁高官22
- ["奥兹", "「之后吉克先生会将谢礼交给您的」", "aiy350000230.opus"], //金锁高官23
- ["凯伊姆", "「啊啊」", "aiy310000120.opus"], //男主12
- ["", "我背向奥兹走出娼馆。"],
- ["凯伊姆", "「······?」", "aiy310000130.opus"], //男主13
- ["", "从远方传来微弱的歌声。"],
- ["", "是关卡广场的方向。"],
- ["", "对了。"],
- ["", "今天有觐见圣女的仪式。"],
- ["", "当代的圣女伊莲——"],
- ["", "俗称《盲眼之圣女》,据说即使在历代的圣女中,人气也是数一数二的。"],
- ["", "广场上的人估计相当多吧。"],
- ["", "虽然我也想去看看她长什么样,不过要在人潮中挤来挤去就免了。"],
- ["", "还是老老实实去菲诺列塔喝烧酒吧。"],
- ["", "正当我这样想着的时候,一个身影自小巷的那头走来。"],
- ["凯伊姆", "「艾莉斯」", "aiy310000140.opus"], //男主14
- ];
- this.chapter01 = [
- ["艾莉斯", "「啊,凯伊姆」", "aiy020000005.opus"], //医生00.5
- ["艾莉斯", "「正好,我还想要去找你呢」", "aiy020000010.opus"], //医生01
- [
- "艾莉斯",
- "「没想到凯伊姆会主动出现······这是命运吗?」",
- "aiy020000020.opus",
- ], //医生02
- ["凯伊姆", "「显然不是吧」", "aiy310000150.opus"], //男主15
- ["艾莉斯", "「啊,是么」", "aiy020000030.opus"], //医生03
- ["", "艾莉斯挑了挑整齐的双眉,微微地哼了一声。"],
- [
- "",
- "虽然是个相当引人注目的美人,但她这个将亲切儿子丢入无底深渊的性格,为自己扣了不少的分",
- ],
- ["", "给人印象最深的,就是那潭水般的双瞳。"],
- ["", "在漆黑的瞳孔中,完全看不出感情的波动。"],
- ["艾莉斯", "「喜欢我的眼睛吗?」", "aiy020000040.opus"], //医生04
- ["艾莉斯", "「如果想要的话就给你吧?」", "aiy020000050.opus"], //医生05
- ["凯伊姆", "「用不着」", "aiy310000160.opus"], //男主16
- ["艾莉斯", "「阿拉,可惜」", "aiy020000060.opus"], //医生06
- ["凯伊姆", "「那么,找我有什么事」", "aiy310000170.opus"], //男主17
- ["艾莉斯", "「梅尔特的钱好像被偷了」", "aiy020000070.opus"], //医生07
- ["凯伊姆", "「钱被偷了?都几岁了还这么没用」", "aiy310000180.opus"], //男主18
- ["艾莉斯", "「不要对我说啊」", "aiy020000080.opus"], //医生08
- [
- "凯伊姆",
- "「那家伙,该不会说要让我去抓那个小偷吧?」",
- "aiy310000190.opus",
- ], //男主19
- ["艾莉斯", "「就是这样」", "aiy020000090.opus"], //医生09
- ["凯伊姆", "「笨蛋吗」", "aiy310000200.opus"], //男主20
- ["凯伊姆", "「如果是小钱的话,就当做是买个教训吧」", "aiy310000210.opus"], //男主21
- ["艾莉斯", "「说起来,被盗的是这个月的上纳金」", "aiy020000100.opus"], //医生10
- ["凯伊姆", "「你说什么?」", "aiy310000220.opus"], //男主22
- ["艾莉斯", "「用这些钱买教训,也太过奢侈了呢」", "aiy020000110.opus"], //医生11
- ["凯伊姆", "「知道了,我去找」", "aiy310000230.opus"], //男主23
- ["凯伊姆", "「小偷的特征呢」", "aiy310000240.opus"], //男主24
- ["艾莉斯", "「男孩子」", "aiy020000120.opus"], //医生12
- ["艾莉斯", "「······而且,背后有翅膀」", "aiy020000130.opus"], //医生13
- [
- "艾莉斯",
- "「虽然姑且是藏在身后,但是仔细观察的话是很明显的」",
- "aiy020000140.opus",
- ], //医生14
- ["凯伊姆", "「羽化病吗」", "aiy310000250.opus"], //男主25
- [
- "艾莉斯",
- "「那些人可是毫不留情的,所以即使是为了那个孩子,也要赶快抓到他」",
- "aiy020000150.opus",
- ], //医生15
- ["凯伊姆", "「注意到他逃窜的方向了吗?」", "aiy310000260.opus"], //男主26
- ["艾莉斯", "「广场那边」", "aiy020000160.opus"], //医生16
- [
- "艾莉斯",
- "「虽然刚才《不蚀金锁》的人去追了,不过多半是······」",
- "aiy020000170.opus",
- ], //医生17
- ["凯伊姆", "「偏偏还是广场吗」", "aiy310000280.opus"], //男主28
- ["艾莉斯", "「今天是觐见圣女大人的日子」", "aiy020000180.opus"], //医生18
- ["凯伊姆", "「我知道」", "aiy310000290.opus"], //男主29
- ["凯伊姆", "「尽量找找看就好」", "aiy310000300.opus"], //男主30
- ];
- this.chapter02 = [
- ["不蚀金锁成员", "「凯伊姆先生,凯伊姆先生」"],
- ["不蚀金锁成员", "「您已经和艾莉斯大夫见过面了吗?」"],
- ["凯伊姆", "「啊啊,所以才会追过来的」"], //男主31
- ["凯伊姆", "「看到小偷了吗?」"], //男主32
- [
- "不蚀金锁成员",
- "「没有,他向广场那边逃了过去,今天这么拥挤,我们也只能放弃了」",
- ],
- [
- "不蚀金锁成员",
- "「不过,我也只是刚好在店里所以才追了过去,并不是受人所托」",
- ],
- ["不蚀金锁成员", "「我已经准备撤退了」"],
- ["不蚀金锁成员", "「凯伊姆先生还要继续追吗?」"],
- ["凯伊姆", "「啊啊」"], //男主33
- ["", "做完情报交换之后,我跟男人道别。"],
- ["凯伊姆", "「和我想的一样啊······」"], //男主34
- ["", "在牢狱中最大的广场上,聚集着看不到尽头的人群。"],
- ["", "就算是来参见圣女祈祷,这人数也太多了点吧。"],
- ["", "自然,我也找不到逃跑的孩子。"],
- ["", "是混杂到人群中了吧。"],
- ["", "如果已经从广场上脱身了的话,就更难发现了。"],
- ["", "只好赌他还在这里了。"],
- ["", "我先移动到了一个视野良好的地方。"],
- ["", "从这里,一眼就可以看到人群的变化。"],
- ["", "广场还是沸腾起来。"],
- ["", "抬头望去,原来是在天台之上出现了一个人影"],
- ["", "但是,与周围的期待不同,现身的是一名中年的神官。"],
- ["", "骂声四溢。"],
- ["", "神官则是笑着摆正衣领"],
- ["神官", "「从现在开始,举行谒见的仪式」"],
- [
- "神官",
- "「在参见那位大人之前,我希望牢狱的诸位再次思考这个《诺瓦斯·艾蒂尔》存在的意义······」",
- ],
- [
- "神官",
- "「初代圣女伊莲大人,便是也难怪这崇高的祈祷之力,令《诺瓦斯·艾蒂尔》浮在空中,拯救了我们的祖先」",
- ],
- [
- "神官",
- "「这之后的几百年来,传承了初代大人力量的历代圣女伊莲大人,让这里留在了空中」",
- ],
- [
- "神官",
- "「这座都市是被圣女大人守护的人类最后的圣域,而我们则是被选召的虔诚的信徒」",
- ],
- ["神官", "「怀着对圣女的感激祈祷吧,感谢圣女伊莲吧!并献上祈祷!」"],
- ["圣女", "「不忘感谢与祈祷,神才会拯救我们」"],
- ["圣女", "「与我一起,向神虔诚地祈祷吧」"],
- ["", "广场上欢声雷动。"],
- ["", "圣女没有回应喧嚣的人声,而是静静地合上双眼面向广场。"],
- ["", "虽然感觉有些冷淡,但总比像个傻瓜似的笑着向这群人挥手要强。"],
- ["", "她掌握着这条街道,还有在这条街上生活的人的命运。"],
- ["", "比起揽得人气,她更想要为了街道的继续存在而献出全力。"],
- ["", "也是为了不让《大崩落》的惨剧再度发生。"],
- ["", "十几年前的那场悲剧。"],
- [
- "",
- "虽然在我脑海中的记忆已经相当模糊,但哪怕只是稍有触及,不快的感觉都会在胸口蔓延开。",
- ],
- ["凯伊姆", "「······」"], //男主35
- ["", "这时我才想起,现在不是我在这里看圣女的时候。"],
- ["女声", "「——っ!?」"],
- ["围观的女人", "「羽,羽化病人!?」"],
- ["围观的中年人", "「喂,谁去叫下羽狩」"],
- ["惊慌的观众", "「你这家伙不要靠近我,要是传染了可怎么办」"],
- ["粗鲁的观众", "「你这小鬼赶快滚开」"],
- ["凯伊姆", "「接下来」"],
- ["圣女", "「发生什么事了?看上去似乎很嘈杂」"],
- ["随从", "「似乎是某个人逃跑了······具体的我也不是很清楚」"],
- ["神官", "「圣女大人,继续待在天台上可能会出事,请您先回到室内吧」"],
- ["圣女", "「不用在意我,比起那个,我更关心究竟发生了什么事」"],
- ["神官", "「对不起,我真的不知道」"],
- ["圣女", "「······是吗」"],
- ["男", "「恕我僭越,请准许我说明情况」"],
- ["男", "「在来觐见的人群中出现了《羽化病》的患者」"],
- ["男", "「围观的人群因而产生了骚动」"],
- [
- "男",
- "「现在,《防疫局》已经派遣了部队。我想不久之后,他们就会安静下来了」",
- ],
- ["圣女", "「羽化病······」"],
- ["男", "「怎么了?」"],
- ["圣女", "「没什么」"],
- ["圣女", "「辛苦了,你的名字是?」"],
- ["男", "「属下是在防疫局任职的,鲁基乌斯· 迪斯·米利尤」"],
- ["神官", "「噢噢,阁下就是鲁基乌斯卿吗,我听说过你的传闻」"],
- ["神官", "「阁下是在工作上相当出色的人呢」"],
- ["鲁基乌斯", "「不敢当」"],
- [
- "鲁基乌斯",
- "「话说回来,这次是属下警备工作的失职。让圣女大人见到这不成体统的一面,请您见谅」",
- ],
- [
- "圣女",
- "「即使是目不见物的我,也能感受到聚集于此的民众数量之多。警备工作难以展开也在情理之中」",
- ],
- ["鲁基乌斯", "「属下不胜惶恐」"],
- ["鲁基乌斯", "「接下来属下还要回到工作岗位上,在这里就先告退了」"],
- ["圣女", "「鲁基乌斯先生」"],
- ["鲁基乌斯", "「属下在」"],
- ["圣女", "「你是怎样看待羽狩的工作的呢?」"],
- ["神官", "「圣,圣女大人」"],
- [
- "鲁基乌斯",
- "「防疫局的工作是国王陛下赐予的重要职务。属下非常荣幸能够为这个都市的繁荣尽一份微薄之力」",
- ],
- ["神官", "「不,不亏是鲁基乌斯卿,相当优秀的想法」"],
- ["圣女", "「是吗。辛苦你了」"],
- ["随从", "「圣女大人······」"],
- ["鲁基乌斯", "「······」"],
- ["鲁基乌斯", "「那么,属下就回岗位去了」"],
- ];
- this.chapter03 = [
- ["", "从羽化病的少年纷乱的足音中,可以听得出相当的疲劳。"],
- ["", "显然,他并没有想到我会捷足先登吧。"],
- ["", "少年惶恐地回头看了一眼后,微微露出安心的表情,双手拄在膝盖上。。"],
- ["凯伊姆", "「辛苦你了」"], //男主37
- ["羽化病患少年", "「稀!?」"],
- ["凯伊姆", "「逃到贫民区是个不错的想法」"], //男主38
- ["羽化病患少年", "「你,你是,羽狩吗?」"],
- ["凯伊姆", "「不是」"], //男主39
- ["羽化病患少年", "「什,什么啊······混蛋,不要吓我啊」"],
- ["凯伊姆", "「我对令你受惊这件事致以歉意」"], //男主40
- ["凯伊姆", "「作为回报,麻烦你把从店里偷的钱交出来吧」"], //男主41
- ["羽化病患少年", "「钱?你在说什么」"],
- ["凯伊姆", "「你要找的腰上的东西,掉在你身后了」"], //男主42
- ["羽化病患少年", "「哎?」"],
- ["羽化病患少年", "「呃呀」"],
- ["羽化病患少年", "「你······你这混蛋」"],
- ["凯伊姆", "「······」"], //男主43
- ["凯伊姆", "「把偷的钱交出来」"], //男主44
- ["羽化病患少年", "「我不知道你在······咕」"],
- ["羽化病患少年", "「你,你说是我偷的······有什么证据吗」"],
- ["凯伊姆", "「你还挺倔的啊」"], //男主45
- ["凯伊姆", "「不过,给我听好了」"], //男主46
- ["凯伊姆", "「你偷的那些钱,是要上缴给《不蚀金锁》的上纳金」"], //男主47
- ["凯伊姆", "「而且,钱的主人是从前和吉克颇有渊源的女人」"], //男主48
- ["羽化病患少年", "「吉克?」"],
- ["凯伊姆", "「他是《不蚀金锁》的主人,这么说你就明白了吧」"], //男主49
- ["羽化病患少年", "「哎?哎?怎么会······」"],
- ["凯伊姆", "「再问你一遍,钱在哪里?」"], //男主50
- ["羽化病患少年", "「是,是,是,在我的怀里」"],
- ["凯伊姆", "「你没有擅自拿掉一部分吧」"], //男主51
- ["羽化病患少年", "「是,是的」"],
- ["羽化病患少年", "「那,那个,您是《不蚀金锁》的人吗?」"],
- ["凯伊姆", "「算是吧」"], //男主52
- ["羽化病患少年", "「我什么都可以做,请您一定要帮帮我」"],
- ["凯伊姆", "「抱歉,我并没有兴趣去帮助他人」"], //男主53+54
- ["羽化病患少年", "「我什么······什么,都会做的······」"],
- ["羽化病患少年", "「我一直都是生活在下层的」"],
- [
- "羽化病患少年",
- "「可是,不知何时染上了羽化病······背后长出了翅膀······」",
- ],
- ["羽化病患少年", "「被寄宿工作的店赶了出来,只得流落到牢狱这里」"],
- ["羽化病患少年", "「因为独自实在是饿的不行了,所以才会偷这些钱的」"],
- [
- "羽化病患少年",
- "「我明明没有做任何坏事······为什么······会遇到这种事······」",
- ],
- ["凯伊姆", "「谁知道」"], //男主55
- ["羽化病患少年", "「呜······呜呜······接下来,要对我做什么?」"],
- ["凯伊姆", "「我要把你带到组织那里」"], //男主56
- ["羽化病患少年", "「怎,怎么这样」"],
- ["凯伊姆", "「不过,那样做的前提是你不是羽化病人」"],
- ["凯伊姆", "「组织也没有笨到把羽化病人招待到家里的程度」"],
- ["羽化病患少年", "「那么,是要放我逃走吗?」"],
- ["凯伊姆", "「我要让你学到教训」"],
- ["凯伊姆", "「如果换做是组织的制裁,至少要有断条胳膊的觉悟」"],
- ["凯伊姆", "「你的运气不错」"],
- ["羽化病患少年", "「唔······啊,是的······」"],
- ["凯伊姆", "「滚」"],
- ["羽化病患少年", "「非常感谢」"],
- ["羽化病患少年", "「唔啊!?」"],
- ["男", "「到这里就结束了,羽化病人」"],
- ["男", "「确认他的翅膀」"],
- ["", "趁还没有被卷入麻烦的事情之前,赶快离开这里吧"],
- ["羽狩的队长", "「那边的那个人」"],
- ["凯伊姆", "「······有什么事?」"],
- ["羽狩的队长", "「可以稍微让我问几句话吗」"],
- ["凯伊姆", "「······」"],
- ["凯伊姆", "「啊啊,无妨」"],
- ["羽狩的队长", "「感谢您的合作」"],
- ["", "队长殷勤地致以谢礼。"],
- ["", "而在他的眼前,少年的衣服已经被他的补下们扯破。"],
- ["", "在瘦骨嶙峋的裸露后背上,长有纯白的羽翼。"],
- ["红发的羽狩", "「副队长,确认翅膀的持有了」"],
- ["羽狩的副队长", "「保护他」"],
- ["羽化病患少年", "「不要······请原谅,我······」"],
- [
- "羽狩的副队长",
- "「我们只是要带你去治愈院治疗羽化病,不是什么应该感到害怕的事情」",
- ],
- ["羽化病患少年", "「可是,可是」"],
- ["羽狩的副队长", "「没关系的」"],
- ["羽化病患少年", "「······哥,哥哥」"],
- ["羽狩的副队长", "「你是羽化病人的亲属吗?」"],
- ["凯伊姆", "「只是路人而已」"],
- ["凯伊姆", "「顺带一提,我也没有打算找你们的麻烦」"],
- [
- "羽狩的副队长",
- "「前几天,有个和你说了同样的话的人,在我们背向他的瞬间对我们发动了袭击」",
- ],
- ["羽狩的副队长", "「我的一个部下就此永久失去了半截胳膊」"],
- ["凯伊姆", "「我表示同情」"],
- ["凯伊姆", "「我马上就会消失的,这样就没问题了吧?」"],
- ["羽狩的副队长", "「嘛,不要这么慌张」"],
- ["", "副队长看着羽化的少年。"],
- ["羽狩的副队长", "「你与这个人是什么关系?没有被他殴打吗?」"],
- ["羽化病患少年", "「没,没有」"],
- [
- "羽狩的副队长",
- "「如何对我们保持合作,你就可以在治愈院得到优先的治疗」",
- ],
- ["羽化病患少年", "「······」"],
- ["羽化病患少年", "「那个人,是《不蚀金锁》的组织成员······」"],
- ["羽化病患少年", "「突然说让我拿出钱来,我刚一拒绝他就打我」"],
- ["羽狩的副队长", "「原来如此······」"],
- [
- "羽狩的副队长",
- "「那位少年说你是《不蚀金锁》的一员,不知此事是否属实?」",
- ],
- ["凯伊姆", "「当然不是」"],
- ["凯伊姆", "「我只是从那里接受工作而已,并不是他们的成员」"],
- ["羽狩的副队长", "「你的意思是说,少年在说谎吗?」"],
- ["凯伊姆", "「啊啊」"],
- [
- "凯伊姆",
- "「如果你们和组织有关系的话,只要问问我是不是那里的成员就能明白事实了吧」",
- ],
- ["羽狩的副队长", "「就算我去询问,也无法从他们那里得到事实」"],
- [
- "羽狩的副队长",
- "「《不蚀金锁》的那些人一向都不对我们合作,我对此深感困扰」",
- ],
- ["凯伊姆", "「真是辛苦啊」"],
- ["羽狩的副队长", "「说的是啊」"],
- ["羽狩的副队长", "「其实,砍下我部下胳膊的似乎也是组织的成员呢」"],
- [
- "羽狩的副队长",
- "「无需如此警戒,我只是想在看守所向你咨询一些事情而已」",
- ],
- [
- "羽狩的副队长",
- "「如果能够知晓牢狱与组织的事情,我们也可以尽可能地对更多的羽化病人进行保护」",
- ],
- ["羽狩的副队长", "「那和整条街道的和平也是紧密相关的吧?」"],
- ["凯伊姆", "「我知道,你们有逮捕干扰狩猎羽化病人的权力」"],
- [
- "凯伊姆",
- "「但是,我没有对你们做出任何干扰,为什么要对我如此纠缠不休呢」",
- ],
- ["羽狩的副队长", "「那些话,我们会在看守所对你详细说明的」"],
- ["凯伊姆", "「······」"],
- ["", "在这里起争执的话,就会被羽狩加害。"],
- ["", "就算能从这里脱身,今后只要碰面就会产生纠纷也是摆明的事情。"],
- ["", "就算逃跑,也没有好的结果。"],
- ["", "正当我想要打圆场的时候,刚才的气氛一瞬间产生了转变。"],
- ["", "发生了什么事······"],
- ["???", "「我认为,那位先生是正确的」"],
- ["", "羽狩们一起回头。"],
- ["", "而在他们视线的焦点处,"],
- ["", "伫立着一位女性。"],
- ["", "在端正的容颜下,代表着强烈意志的双眉十分显眼。"],
- ["", "身体的柔软与紧紧包裹在其身上的羽狩制服,两者显得十分的不搭配。"],
- ["", "我还是第一次看到女性的羽狩。"],
- ["羽狩的副队长", "「队长,这是获得《不蚀金锁》情报的好机会」"],
- [
- "羽狩的队长",
- "「兰格副队长,就算是为了获得情报,也不能做出恫吓的发言啊」",
- ],
- ["兰格副队长", "「我并没有打算去恫吓他······」"],
- ["羽狩的队长", "「告诉我那个被砍掉胳膊的队员的名字」"],
- ["羽狩的队长", "「我会去探望他的」"],
- ["兰格副队长", "「那个是······」"],
- ["羽狩的队长", "「我知道,你一直在为有所收获而努力工作」"],
- ["羽狩的队长", "「但是,正因为我们的工作是为民众提供帮助」"],
- ["羽狩的队长", "「所以就更不能损害人与人之间的信赖」"],
- ["兰格副队长", "「我会铭记在心」"],
- ["羽狩的队长", "「这位先生,我的部下失礼了」"],
- ["凯伊姆", "「只要不对我再来一次就好」"],
- ["羽狩的队长", "「请稍等」"],
- ["凯伊姆", "「有什么事?」"],
- ["羽狩的队长", "「我想确认一件事」"],
- ["羽狩的队长", "「你真的不是《不蚀金锁》的成员吗?」"],
- ["凯伊姆", "「真的」"],
- ["凯伊姆", "「如果我说是的话,你有什么打算?」"],
- ["羽狩的队长", "「我听过传闻,说他们是用依靠暴力而得的钱在生活」"],
- ["凯伊姆", "「······这样啊」"],
- ["凯伊姆", "「如果能有收获就好了啊」"],
- ];
- this.chapter04 = [
- ["梅尔特", "「欢迎光临」"],
- ["梅尔特", "「辛苦了」"],
- ["梅尔特", "「抱歉,又拜托给你了个这么麻烦的工作」"],
- ["凯伊姆", "「没什么,比想象中完成的更容易」"],
- ["梅尔特", "「那就好」"],
- ["梅尔特", "「这是我的一点谢意」"],
- ["凯伊姆", "「味道有些变化啊」"],
- ["梅尔特", "「啊,被发现了?」"],
- ["梅尔特", "「最近,没能到手什么好的原料呢」"],
- ["凯伊姆", "「去拜托吉克如何?」"],
- [
- "梅尔特",
- "「话是这么说,但是总不能用店里采购的这种小事去麻烦他吧······」",
- ],
- ["凯伊姆", "「那希望你也不要来麻烦我」"],
- ["梅尔特", "「那 是 两 码 事」"],
- ["梅尔特", "「再说,凯伊姆是靠着工作来生活的吧」"],
- [
- "梅尔特",
- "「而且,自己的钱被偷了这么害羞的事,向凯伊姆意外的其他人都说不出口」",
- ],
- ["凯伊姆", "「反正,也已经传到吉克的耳朵里了」"],
- ["梅尔特", "「这是面子问题啊,面子问题」"],
- ["凯伊姆", "「嘛,算了」"],
- ["凯伊姆", "「这样就好了吧?」"],
- ["梅尔特", "「这是钱包呢」"],
- ["梅尔特", "「嗯,东西没少」"],
- ["梅尔特", "「太好啦—这个月的上纳金,我可全部都放在里面了呢」"],
- ["梅尔特", "「如果没有找到的话,说不定就又会被送到娼馆里了呢」"],
- ["凯伊姆", "「在那边不是来钱更快吗?」"],
- ["梅尔特", "「阿拉,你是在说我还能有魅力吗?」"],
- ["凯伊姆", "「这是客套话而已」"],
- ["梅尔特", "「欺负人」"],
- ["梅尔特", "「总而言之,今天帮大忙了」"],
- ["梅尔特", "「谢礼嘛······」"],
- ["凯伊姆", "「就记在账单上吧」"],
- ["梅尔特", "「了解—盛谢惠顾了哦?」"],
- ["", "喀啷喀啷"],
- ["", "门铃响起"],
- ["", "喧哗瞬间安静下来。"],
- ["", "进来的人是吉克。"],
- ["", "是掌控着牢狱的组织之一,《不蚀金锁》的头目。"],
- ["", "不仅组织的成员,就连店内一般的客人也对他以注目礼表示敬意。"],
- ["吉克", "「各位继续吧」"],
- ["", "仿佛停滞的时钟重新转动了一般,店内恢复了热闹的气氛。"],
- ["吉克", "「抱歉,今天拜托你去做了无聊的工作」。"],
- ["凯伊姆", "「不用介意」"],
- ["", "吉克轻轻点了点头,在我右边坐了下来"],
- ["凯伊姆", "「逃跑的男人怎么样了?」"],
- ["吉克", "「嗯?已经不在这个世上了」。"],
- ["吉克", "「有什么想要知道的事吗?」"],
- ["凯伊姆", "「不,没什么」"],
- ["吉克", "「那个无聊的家伙,完全没有趣味呢」"],
- ["吉克", "「真希望他也替我负责清扫的部下也考虑考虑」"],
- ["凯伊姆", "「真是灾难啊」"],
- ["吉克", "「比起那个,我听说了哦。你去追羽化病人了啊」"],
- ["凯伊姆", "「消息真灵通」"],
- ["吉克", "「梅尔特也注意点」"],
- ["吉克", "「你丢钱已经不是一回两回了」"],
- ["梅尔特", "「好的—我会注意的。」"],
- ["梅尔特", "「吉克还是平常的点单吧」"],
- ["梅尔特", "「凯伊姆要再来一杯吗?」"],
- ["", "我们用眼神点头示意后,梅尔特开始准备起酒来。"],
- ["", "悠然地吐出眼圈后,吉克取出一个纸包放在柜台上。"],
- ["吉克", "「这是抓捕逃跑男人的报酬」"],
- ["凯伊姆", "「下次有什么事再告诉我」"],
- ["梅尔特", "「来,久等了」"],
- ["凯伊姆", "「话说回来梅尔特,为什么会被那种孩子偷到钱?」"],
- ["吉克", "「让我猜猜看」"],
- ["吉克", "「是那个吧,看某个特立独行的男人入迷了,所以就有了空隙?」"],
- ["梅尔特", "「可惜—」"],
- ["梅尔特", "「事实恰恰相反,是那家伙一直在纠缠我」"],
- ["凯伊姆", "「完全把你当成新进的女佣了么」"],
- ["梅尔特", "「我从前可是很有名的,不会被当成这种下人吧」"],
- ["梅尔特", "「······而且,我没法对对我这么钟情的人发火啊」"],
- ["凯伊姆&吉克", "「你傻啊」"],
- ["梅尔特", "「异口同声呢,不亏是兄弟」"],
- ["凯伊姆", "「别用这种称呼,怪恶心的」"],
- ["吉克", "「说得没错」"],
- ["吉克", "「······说起来······」"],
- ["梅尔特", "「怎么了?」"],
- ["吉克", "「有件事我一直很在意,我和凯伊姆,哪个是哥哥啊?」"],
- ["凯伊姆", "「你也说这么无聊的话题」"],
- ["吉克", "「不,这是很重要的事情」"],
- ["吉克", "「梅尔特,事实是怎么样的?」"],
- ["梅尔特", "「啊~是怎么样的呢~」"],
- ["梅尔特", "「我忘记了」"],
- ["吉克", "「骗人」"],
- ];
- }
+ "攻速临界": function () {
+ // 在此增加新插件
+ //临界表
+ core.ui._drawBookDetail_turnAndCriticals = function (enemy, floorId, texts) {
+ // 临界表
+ var criticals = core.enemys.nextCriticals(enemy.id, 8, enemy.x, enemy.y, floorId).map(function (v) {
+ return core.formatBigNumber(v[0]) + ":" + core.formatBigNumber(v[1]);
+ });
+ while (criticals[0] == '0:0') criticals.shift();
+ texts.push("\r[#FF6A6A]\\d攻击临界表:\\d\r[]" + JSON.stringify(criticals));
+ var criticals_spell = core.nextCriticals_spell(enemy.id, 8, enemy.x, enemy.y, floorId).map(function (v) {
+ return core.formatBigNumber(v[0]) + ":" + core.formatBigNumber(v[1]);
+ });
+ while (criticals_spell[0] == '0:0') criticals_spell.shift();
+ texts.push("\r[#FF6A6A]\\d法强临界表:\\d\r[]" + JSON.stringify(criticals_spell));
+ var criticals_speed = core.nextCriticals_speed(enemy.id, 8, enemy.x, enemy.y, floorId).map(function (v) {
+ return core.formatBigNumber(v[0]) + ":" + core.formatBigNumber(v[1]);
+ });
+ while (criticals_speed[0] == '0:0') criticals_speed.shift();
+ texts.push("\r[#FF6A6A]\\d速度临界表:\\d\r[]" + JSON.stringify(criticals_speed));
+
+ }
+ //攻速临界计算
+ core.nextCriticals_speed = function (enemy, number, x, y, floorId) {
+ if (typeof enemy == 'string') enemy = core.material.enemys[enemy];
+ number = number || 1;
+
+ var info = core.getDamageInfo(enemy, null, x, y, floorId);
+ if (info == null) { // 如果未破防...
+ return [
+ ['?', '?']
+ ];
+ }
+
+ if (typeof info == 'number') {
+ return [
+ [0, 0]
+ ];
+ }
+ return core.enemys._nextSpeedCriticals_useBinarySearch(enemy, info, number, x, y, floorId);
+ }
+ enemys.prototype._nextSpeedCriticals_useBinarySearch = function (enemy, info, number, x, y, floorId) {
+ var mon_hp = info.mon_hp,
+ hero_speed = core.status.hero.speed,
+ mon_def = info.mon_def,
+ pre = info.damage;
+ var list = [];
+ var start_speed = hero_speed;
+
+ var calNext = function (currSpeed, maxSpeed) {
+ var start = Math.floor(currSpeed),
+ end = Math.floor(maxSpeed);
+ if (start > end) return null;
+
+ while (start < end) {
+ var mid = Math.floor((start + end) / 2);
+ if (mid - start > end - mid) mid--;
+ var nextInfo = core.enemys.getDamageInfo(enemy, { "speed": mid }, x, y, floorId);
+ if (nextInfo == null || (typeof nextInfo == 'number')) return null;
+ if (pre > nextInfo.damage) end = mid;
+ else start = mid + 1;
+ }
+ var nextInfo = core.enemys.getDamageInfo(enemy, { "speed": start }, x, y, floorId);
+ return nextInfo == null || (typeof nextInfo == 'number') || nextInfo.damage >= pre ? null : [start, nextInfo.damage];
+ }
+ var currSpeed = start_speed;
+ while (true) {
+ var next = calNext(currSpeed + 1, Number.MAX_SAFE_INTEGER, pre);
+ if (next == null) break;
+ currSpeed = next[0];
+ pre = next[1];
+ list.push([currSpeed - hero_speed, info.damage - pre]);
+ if (pre <= 0 && !core.flags.enableNegativeDamage) break;
+ if (list.length >= number) break;
+ }
+ if (list.length == 0) list.push([0, 0]);
+ return list;
+ }
+ //法强临界计算
+ core.nextCriticals_spell = function (enemy, number, x, y, floorId) {
+ if (typeof enemy == 'string') enemy = core.material.enemys[enemy];
+ number = number || 1;
+
+ var info = core.getDamageInfo(enemy, null, x, y, floorId);
+ if (info == null) { // 如果未破防...
+ return [
+ ['?', '?']
+ ];
+ }
+
+ if (typeof info == 'number') {
+ return [
+ [0, 0]
+ ];
+ }
+ return core.enemys._nextSpellCriticals_useBinarySearch(enemy, info, number, x, y, floorId);
+ }
+ enemys.prototype._nextSpellCriticals_useBinarySearch = function (enemy, info, number, x, y, floorId) {
+ var mon_hp = info.mon_hp,
+ hero_spell = core.status.hero.spell,
+ mon_def = info.mon_def,
+ turn = info.mon_turn,
+ pre = info.damage;
+ var list = [];
+ var start_spell = hero_spell;
+
+ var calNext = function (currSpell, maxSpell) {
+ var start = Math.floor(currSpell),
+ end = Math.floor(maxSpell);
+ if (start > end) return null;
+
+ while (start < end) {
+ var mid = Math.floor((start + end) / 2);
+ if (mid - start > end - mid) mid--;
+ var nextInfo = core.enemys.getDamageInfo(enemy, { "spell": mid }, x, y, floorId);
+ if (nextInfo == null || (typeof nextInfo == 'number')) return null;
+ if (turn > nextInfo.mon_turn) end = mid;
+ else start = mid + 1;
+ }
+ var nextInfo = core.enemys.getDamageInfo(enemy, { "spell": start }, x, y, floorId);
+ return nextInfo == null || (typeof nextInfo == 'number') || nextInfo.mon_turn >= turn ? null : [start, nextInfo.damage];
+ }
+ var currSpell = start_spell;
+ while (true) {
+ var next = calNext(currSpell + 1, Number.MAX_SAFE_INTEGER, pre, turn);
+ if (next == null) break;
+ currSpell = next[0];
+ pre = next[1];
+ list.push([currSpell - hero_spell, info.damage - pre]);
+ if (pre <= 0 && !core.flags.enableNegativeDamage) break;
+ if (list.length >= number) break;
+ }
+ if (list.length == 0) list.push([0, 0]);
+ return list;
+ }
+},
+ "手册(临时)": function () {
+ // 在此增加新插件
+ ui.prototype._drawBook_drawContent = function (index, enemy, top, left) {
+ var width = core._PX_ - left; // 9 : 8 : 8 划分三列
+ this._drawBook_drawRow1(index, enemy, top, left, width, top + 20);
+ this._drawBook_drawRow4(index, enemy, top, left, width, top + 38);
+ this._drawBook_drawRow2(index, enemy, top, left, width, top + 56);
+ this._drawBook_drawRow3(index, enemy, top, left, width, top + 74);
+ this._drawBook_drawRow5(index, enemy, top, left, width, top + 90);
+ }
+
+ ui.prototype._drawBook_drawRow4 = function (index, enemy, top, left, width, position) {
+ // 绘制第一行
+ core.setTextAlign('ui', 'left');
+ var b13 = this._buildFont(13, true),
+ f13 = this._buildFont(13, false);
+ var col1 = left,
+ col2 = left + width * 9 / 25,
+ col3 = left + width * 17 / 25;
+ core.fillText('ui', core.getStatusLabel('speed'), col1, position, '#DDDDDD', f13);
+ core.fillText('ui', core.formatBigNumber(enemy.speed || 0), col1 + 30, position, null, b13);
+ core.fillText('ui', core.getStatusLabel('spell'), col2, position, null, f13);
+ core.fillText('ui', core.formatBigNumber(enemy.spell || 0), col2 + 30, position, null, b13);
+ core.fillText('ui', core.getStatusLabel('mdef'), col3, position, null, f13);
+ core.fillText('ui', core.formatBigNumber(enemy.mdef || 0) + "%", col3 + 30, position, null, b13);
+ }
+ ui.prototype._drawBook_drawRow5 = function (index, enemy, top, left, width, position) {
+ // 绘制第一行
+ core.setTextAlign('ui', 'left');
+ var b13 = this._buildFont(13, true),
+ f13 = this._buildFont(13, false);
+ var col1 = left,
+ col2 = left + width * 13 / 25;
+ core.fillText('ui', '速度临界', col1 - 120, position, '#DDDDDD', f13);
+ core.fillText('ui', `[${core.formatBigNumber(enemy.criticalSpeed?.[0] || 0)},${core.formatBigNumber(enemy.criticalSpeed?.[1] || 0)}]`, col1 - 60, position, null, b13);
+
+ core.fillText('ui', "勇士出手次数", col1, position, '#DDDDDD', f13);
+ core.fillText('ui', core.getDamageInfo(enemy, null) ? core.getDamageInfo(enemy, null).hero_turn : '???', col1 + 80, position, null, b13);
+ core.fillText('ui', "怪物出手次数", col2, position, null, f13);
+ core.fillText('ui', core.getDamageInfo(enemy, null) ? core.getDamageInfo(enemy, null).mon_turn : '???', col2 + 80, position, null, b13);
+
+ }
+ ui.prototype._drawBook_pageinfo = function () {
+ var per_page = 4;
+ var padding_top = 12; // 距离顶端像素
+ var per_height = (core._PY_ - 32 - padding_top) / per_page;
+ return { per_page: per_page, padding_top: padding_top, per_height: per_height };
+ }
+},
+ "新怪物手册": function () {
+ // 在此增加新插件
+ const book = document.createElement("canvas"); //创建怪物手册画布
+ book.style.position = "absolute";
+ book.style.zIndex = 400;
+ book.style.display = "none";
+ book.id = "book";
+ main.dom.gameGroup.insertAdjacentElement("afterend", book);
+ book.style.top = "50%";
+ book.style.left = "50%";
+ book.style.transform = "translate(-50%,-50%)";
+ const ctx = book.getContext("2d");
+ main.dom.book = book
+
+ book.onclick = function (e) { //画布点击监听
+ try {
+ e.preventDefault();
+ const left = core.dom.gameGroup.offsetLeft;
+ const top = core.dom.gameGroup.offsetTop;
+ const px = Math.floor((e.clientX - left) / core.domStyle.scale),
+ py = Math.floor((e.clientY - top) / core.domStyle.scale);
+
+ let x, y;
+ if (core.domStyle.isVertical) { //对竖屏进行坐标转换
+ x = py * 3;
+ y = 1248 - px * 3;
+ } else {
+ x = px * 3;
+ y = py * 3;
+ }
+ bookclick(x, y)
+ } catch (ee) {
+ main.log(ee);
+ }
+ }
+
+ function bookclick(x, y) { //点击画布(x,y)触发的效果
+ const makeBox = ([x, y], [w, h]) => { //创建点击检测区域
+ return [
+ [x, y],
+ [x + w, y + h],
+ ];
+ };
+ const pos = [x, y]; //创建点击坐标pos
+ const inRect = ([x, y], [ //检测点击坐标是否在检测区域中
+ [sx, sy],
+ [dx, dy]
+ ]) => {
+ return sx <= x && x <= dx && sy <= y && y <= dy;
+ };
+ /**
+ * 使用范例
+ *const backbox = makeBox([15, 35], [210, 90]);
+ *if(inRect(pos,backbox)){}
+ */
+ }
+ this.drawBook = function (floorId = core.status.floorId) {
+ if (core.domStyle.isVertical) { //对竖屏进行绘制坐标变换,只需要考虑横屏绘制,竖屏将自适应转置
+ ctx.canvas.width = 1248;
+ ctx.canvas.height = 2028;
+ ctx.save(); //保存设置
+ ctx.translate(1248, 0); //重新定位右上角为基准
+ ctx.rotate(Math.PI / 2); //旋转90度
+ } else {
+ ctx.canvas.width = 2028;
+ ctx.canvas.height = 1248;
+ }
+ //在这里写绘制内容,只写横屏就行
+
+ ctx.restore(); //恢复变换前的坐标,否则将连续转置
+ }
+}
}
\ No newline at end of file
diff --git a/project/sounds/aiy020000190.ogg b/project/sounds/aiy020000190.ogg
new file mode 100644
index 0000000..8212ba6
Binary files /dev/null and b/project/sounds/aiy020000190.ogg differ
diff --git a/project/sounds/aiy020000200.ogg b/project/sounds/aiy020000200.ogg
new file mode 100644
index 0000000..8f710f0
Binary files /dev/null and b/project/sounds/aiy020000200.ogg differ
diff --git a/project/sounds/aiy020000210.ogg b/project/sounds/aiy020000210.ogg
new file mode 100644
index 0000000..e4f719f
Binary files /dev/null and b/project/sounds/aiy020000210.ogg differ
diff --git a/project/sounds/aiy020000220.ogg b/project/sounds/aiy020000220.ogg
new file mode 100644
index 0000000..cf59706
Binary files /dev/null and b/project/sounds/aiy020000220.ogg differ
diff --git a/project/sounds/aiy020000230.ogg b/project/sounds/aiy020000230.ogg
new file mode 100644
index 0000000..c7469e0
Binary files /dev/null and b/project/sounds/aiy020000230.ogg differ
diff --git a/project/sounds/aiy020000240.ogg b/project/sounds/aiy020000240.ogg
new file mode 100644
index 0000000..dc062c2
Binary files /dev/null and b/project/sounds/aiy020000240.ogg differ
diff --git a/project/sounds/aiy020000250.ogg b/project/sounds/aiy020000250.ogg
new file mode 100644
index 0000000..19608c4
Binary files /dev/null and b/project/sounds/aiy020000250.ogg differ
diff --git a/project/sounds/aiy020000260.ogg b/project/sounds/aiy020000260.ogg
new file mode 100644
index 0000000..fc86122
Binary files /dev/null and b/project/sounds/aiy020000260.ogg differ
diff --git a/project/sounds/aiy020000270.ogg b/project/sounds/aiy020000270.ogg
new file mode 100644
index 0000000..8a9e875
Binary files /dev/null and b/project/sounds/aiy020000270.ogg differ
diff --git a/project/sounds/aiy020000280.ogg b/project/sounds/aiy020000280.ogg
new file mode 100644
index 0000000..804c47b
Binary files /dev/null and b/project/sounds/aiy020000280.ogg differ
diff --git a/project/sounds/aiy020000290.ogg b/project/sounds/aiy020000290.ogg
new file mode 100644
index 0000000..46e1502
Binary files /dev/null and b/project/sounds/aiy020000290.ogg differ
diff --git a/project/sounds/aiy020000300.ogg b/project/sounds/aiy020000300.ogg
new file mode 100644
index 0000000..d5445c7
Binary files /dev/null and b/project/sounds/aiy020000300.ogg differ
diff --git a/project/sounds/aiy020000310.ogg b/project/sounds/aiy020000310.ogg
new file mode 100644
index 0000000..e197805
Binary files /dev/null and b/project/sounds/aiy020000310.ogg differ
diff --git a/project/sounds/aiy020000320.ogg b/project/sounds/aiy020000320.ogg
new file mode 100644
index 0000000..eadca46
Binary files /dev/null and b/project/sounds/aiy020000320.ogg differ
diff --git a/project/sounds/aiy020000330.ogg b/project/sounds/aiy020000330.ogg
new file mode 100644
index 0000000..24af673
Binary files /dev/null and b/project/sounds/aiy020000330.ogg differ
diff --git a/project/sounds/aiy020000340.ogg b/project/sounds/aiy020000340.ogg
new file mode 100644
index 0000000..34d7e41
Binary files /dev/null and b/project/sounds/aiy020000340.ogg differ
diff --git a/project/sounds/aiy020000350.ogg b/project/sounds/aiy020000350.ogg
new file mode 100644
index 0000000..25d0572
Binary files /dev/null and b/project/sounds/aiy020000350.ogg differ
diff --git a/project/sounds/aiy020000360.ogg b/project/sounds/aiy020000360.ogg
new file mode 100644
index 0000000..e46bc3e
Binary files /dev/null and b/project/sounds/aiy020000360.ogg differ
diff --git a/project/sounds/aiy020000370.ogg b/project/sounds/aiy020000370.ogg
new file mode 100644
index 0000000..f929ecb
Binary files /dev/null and b/project/sounds/aiy020000370.ogg differ
diff --git a/project/sounds/aiy030000010.ogg b/project/sounds/aiy030000010.ogg
new file mode 100644
index 0000000..9b9d46d
Binary files /dev/null and b/project/sounds/aiy030000010.ogg differ
diff --git a/project/sounds/aiy030000020.ogg b/project/sounds/aiy030000020.ogg
new file mode 100644
index 0000000..a0f4ebb
Binary files /dev/null and b/project/sounds/aiy030000020.ogg differ
diff --git a/project/sounds/aiy030000030.ogg b/project/sounds/aiy030000030.ogg
new file mode 100644
index 0000000..14a2ca8
Binary files /dev/null and b/project/sounds/aiy030000030.ogg differ
diff --git a/project/sounds/aiy030000050.ogg b/project/sounds/aiy030000050.ogg
new file mode 100644
index 0000000..9bc3077
Binary files /dev/null and b/project/sounds/aiy030000050.ogg differ
diff --git a/project/sounds/aiy030000060.ogg b/project/sounds/aiy030000060.ogg
new file mode 100644
index 0000000..ff055c2
Binary files /dev/null and b/project/sounds/aiy030000060.ogg differ
diff --git a/project/sounds/aiy030000070.ogg b/project/sounds/aiy030000070.ogg
new file mode 100644
index 0000000..2e7dcba
Binary files /dev/null and b/project/sounds/aiy030000070.ogg differ
diff --git a/project/sounds/aiy030000080.ogg b/project/sounds/aiy030000080.ogg
new file mode 100644
index 0000000..efc3d38
Binary files /dev/null and b/project/sounds/aiy030000080.ogg differ
diff --git a/project/sounds/aiy030000090.ogg b/project/sounds/aiy030000090.ogg
new file mode 100644
index 0000000..8f9fb91
Binary files /dev/null and b/project/sounds/aiy030000090.ogg differ
diff --git a/project/sounds/aiy030000100.ogg b/project/sounds/aiy030000100.ogg
new file mode 100644
index 0000000..0dbf5bc
Binary files /dev/null and b/project/sounds/aiy030000100.ogg differ
diff --git a/project/sounds/aiy030000110.ogg b/project/sounds/aiy030000110.ogg
new file mode 100644
index 0000000..f722e49
Binary files /dev/null and b/project/sounds/aiy030000110.ogg differ
diff --git a/project/sounds/aiy030000120.ogg b/project/sounds/aiy030000120.ogg
new file mode 100644
index 0000000..53ac3bf
Binary files /dev/null and b/project/sounds/aiy030000120.ogg differ
diff --git a/project/sounds/aiy030000130.ogg b/project/sounds/aiy030000130.ogg
new file mode 100644
index 0000000..aa157af
Binary files /dev/null and b/project/sounds/aiy030000130.ogg differ
diff --git a/project/sounds/aiy050000010.ogg b/project/sounds/aiy050000010.ogg
new file mode 100644
index 0000000..6a9a4a2
Binary files /dev/null and b/project/sounds/aiy050000010.ogg differ
diff --git a/project/sounds/aiy050000020.ogg b/project/sounds/aiy050000020.ogg
new file mode 100644
index 0000000..9b9cdf8
Binary files /dev/null and b/project/sounds/aiy050000020.ogg differ
diff --git a/project/sounds/aiy050000030.ogg b/project/sounds/aiy050000030.ogg
new file mode 100644
index 0000000..d328ca8
Binary files /dev/null and b/project/sounds/aiy050000030.ogg differ
diff --git a/project/sounds/aiy050000040.ogg b/project/sounds/aiy050000040.ogg
new file mode 100644
index 0000000..cc11d60
Binary files /dev/null and b/project/sounds/aiy050000040.ogg differ
diff --git a/project/sounds/aiy050000050.ogg b/project/sounds/aiy050000050.ogg
new file mode 100644
index 0000000..590349f
Binary files /dev/null and b/project/sounds/aiy050000050.ogg differ
diff --git a/project/sounds/aiy050000060.ogg b/project/sounds/aiy050000060.ogg
new file mode 100644
index 0000000..a77d3ba
Binary files /dev/null and b/project/sounds/aiy050000060.ogg differ
diff --git a/project/sounds/aiy050000070.ogg b/project/sounds/aiy050000070.ogg
new file mode 100644
index 0000000..9213193
Binary files /dev/null and b/project/sounds/aiy050000070.ogg differ
diff --git a/project/sounds/aiy050000080.ogg b/project/sounds/aiy050000080.ogg
new file mode 100644
index 0000000..29a2c70
Binary files /dev/null and b/project/sounds/aiy050000080.ogg differ
diff --git a/project/sounds/aiy050000090.ogg b/project/sounds/aiy050000090.ogg
new file mode 100644
index 0000000..b0e5931
Binary files /dev/null and b/project/sounds/aiy050000090.ogg differ
diff --git a/project/sounds/aiy050000100.ogg b/project/sounds/aiy050000100.ogg
new file mode 100644
index 0000000..59e7ebc
Binary files /dev/null and b/project/sounds/aiy050000100.ogg differ
diff --git a/project/sounds/aiy050000110.ogg b/project/sounds/aiy050000110.ogg
new file mode 100644
index 0000000..e198a48
Binary files /dev/null and b/project/sounds/aiy050000110.ogg differ
diff --git a/project/sounds/aiy050000120.ogg b/project/sounds/aiy050000120.ogg
new file mode 100644
index 0000000..ac4bf72
Binary files /dev/null and b/project/sounds/aiy050000120.ogg differ
diff --git a/project/sounds/aiy120000020.ogg b/project/sounds/aiy120000020.ogg
new file mode 100644
index 0000000..10d2ae0
Binary files /dev/null and b/project/sounds/aiy120000020.ogg differ
diff --git a/project/sounds/aiy120000030.ogg b/project/sounds/aiy120000030.ogg
new file mode 100644
index 0000000..2a0dc02
Binary files /dev/null and b/project/sounds/aiy120000030.ogg differ
diff --git a/project/sounds/aiy120000040.ogg b/project/sounds/aiy120000040.ogg
new file mode 100644
index 0000000..f9f0f66
Binary files /dev/null and b/project/sounds/aiy120000040.ogg differ
diff --git a/project/sounds/aiy120000050.ogg b/project/sounds/aiy120000050.ogg
new file mode 100644
index 0000000..0cb03e6
Binary files /dev/null and b/project/sounds/aiy120000050.ogg differ
diff --git a/project/sounds/aiy120000060.ogg b/project/sounds/aiy120000060.ogg
new file mode 100644
index 0000000..bdf482e
Binary files /dev/null and b/project/sounds/aiy120000060.ogg differ
diff --git a/project/sounds/aiy120000070.ogg b/project/sounds/aiy120000070.ogg
new file mode 100644
index 0000000..c8822ac
Binary files /dev/null and b/project/sounds/aiy120000070.ogg differ
diff --git a/project/sounds/aiy120000080.ogg b/project/sounds/aiy120000080.ogg
new file mode 100644
index 0000000..3cd1ff4
Binary files /dev/null and b/project/sounds/aiy120000080.ogg differ
diff --git a/project/sounds/aiy120000090.ogg b/project/sounds/aiy120000090.ogg
new file mode 100644
index 0000000..306c3d4
Binary files /dev/null and b/project/sounds/aiy120000090.ogg differ
diff --git a/project/sounds/aiy120000100.ogg b/project/sounds/aiy120000100.ogg
new file mode 100644
index 0000000..d6597f6
Binary files /dev/null and b/project/sounds/aiy120000100.ogg differ
diff --git a/project/sounds/aiy120000110.ogg b/project/sounds/aiy120000110.ogg
new file mode 100644
index 0000000..a322097
Binary files /dev/null and b/project/sounds/aiy120000110.ogg differ
diff --git a/project/sounds/aiy120000120.ogg b/project/sounds/aiy120000120.ogg
new file mode 100644
index 0000000..acb82fb
Binary files /dev/null and b/project/sounds/aiy120000120.ogg differ
diff --git a/project/sounds/aiy120000130.ogg b/project/sounds/aiy120000130.ogg
new file mode 100644
index 0000000..8f231aa
Binary files /dev/null and b/project/sounds/aiy120000130.ogg differ
diff --git a/project/sounds/aiy120000140.ogg b/project/sounds/aiy120000140.ogg
new file mode 100644
index 0000000..d3bbbb2
Binary files /dev/null and b/project/sounds/aiy120000140.ogg differ
diff --git a/project/sounds/aiy120000150.ogg b/project/sounds/aiy120000150.ogg
new file mode 100644
index 0000000..47f6a04
Binary files /dev/null and b/project/sounds/aiy120000150.ogg differ
diff --git a/project/sounds/aiy120000160.ogg b/project/sounds/aiy120000160.ogg
new file mode 100644
index 0000000..214c63b
Binary files /dev/null and b/project/sounds/aiy120000160.ogg differ
diff --git a/project/sounds/aiy120000170.ogg b/project/sounds/aiy120000170.ogg
new file mode 100644
index 0000000..35d2f1b
Binary files /dev/null and b/project/sounds/aiy120000170.ogg differ
diff --git a/project/sounds/aiy120000180.ogg b/project/sounds/aiy120000180.ogg
new file mode 100644
index 0000000..3417af8
Binary files /dev/null and b/project/sounds/aiy120000180.ogg differ
diff --git a/project/sounds/aiy120000190.ogg b/project/sounds/aiy120000190.ogg
new file mode 100644
index 0000000..37a6a52
Binary files /dev/null and b/project/sounds/aiy120000190.ogg differ
diff --git a/project/sounds/aiy120000200.ogg b/project/sounds/aiy120000200.ogg
new file mode 100644
index 0000000..18eefb3
Binary files /dev/null and b/project/sounds/aiy120000200.ogg differ
diff --git a/project/sounds/aiy120000210.ogg b/project/sounds/aiy120000210.ogg
new file mode 100644
index 0000000..67784d0
Binary files /dev/null and b/project/sounds/aiy120000210.ogg differ
diff --git a/project/sounds/aiy120000220.ogg b/project/sounds/aiy120000220.ogg
new file mode 100644
index 0000000..1e9d440
Binary files /dev/null and b/project/sounds/aiy120000220.ogg differ
diff --git a/project/sounds/aiy120000230.ogg b/project/sounds/aiy120000230.ogg
new file mode 100644
index 0000000..dc4d494
Binary files /dev/null and b/project/sounds/aiy120000230.ogg differ
diff --git a/project/sounds/aiy120000240.ogg b/project/sounds/aiy120000240.ogg
new file mode 100644
index 0000000..88a9404
Binary files /dev/null and b/project/sounds/aiy120000240.ogg differ
diff --git a/project/sounds/aiy120000250.ogg b/project/sounds/aiy120000250.ogg
new file mode 100644
index 0000000..44e9970
Binary files /dev/null and b/project/sounds/aiy120000250.ogg differ
diff --git a/project/sounds/aiy120000260.ogg b/project/sounds/aiy120000260.ogg
new file mode 100644
index 0000000..c93d37b
Binary files /dev/null and b/project/sounds/aiy120000260.ogg differ
diff --git a/project/sounds/aiy120000270.ogg b/project/sounds/aiy120000270.ogg
new file mode 100644
index 0000000..97235e0
Binary files /dev/null and b/project/sounds/aiy120000270.ogg differ
diff --git a/project/sounds/aiy120000280.ogg b/project/sounds/aiy120000280.ogg
new file mode 100644
index 0000000..7153660
Binary files /dev/null and b/project/sounds/aiy120000280.ogg differ
diff --git a/project/sounds/aiy120000290.ogg b/project/sounds/aiy120000290.ogg
new file mode 100644
index 0000000..8c4db5b
Binary files /dev/null and b/project/sounds/aiy120000290.ogg differ
diff --git a/project/sounds/aiy120000300.ogg b/project/sounds/aiy120000300.ogg
new file mode 100644
index 0000000..875d1f7
Binary files /dev/null and b/project/sounds/aiy120000300.ogg differ
diff --git a/project/sounds/aiy120000310.ogg b/project/sounds/aiy120000310.ogg
new file mode 100644
index 0000000..8720a02
Binary files /dev/null and b/project/sounds/aiy120000310.ogg differ
diff --git a/project/sounds/aiy120000320.ogg b/project/sounds/aiy120000320.ogg
new file mode 100644
index 0000000..c86806b
Binary files /dev/null and b/project/sounds/aiy120000320.ogg differ
diff --git a/project/sounds/aiy120000330.ogg b/project/sounds/aiy120000330.ogg
new file mode 100644
index 0000000..0f21adc
Binary files /dev/null and b/project/sounds/aiy120000330.ogg differ
diff --git a/project/sounds/aiy120000340.ogg b/project/sounds/aiy120000340.ogg
new file mode 100644
index 0000000..a055a78
Binary files /dev/null and b/project/sounds/aiy120000340.ogg differ
diff --git a/project/sounds/aiy120000350.ogg b/project/sounds/aiy120000350.ogg
new file mode 100644
index 0000000..0711a4f
Binary files /dev/null and b/project/sounds/aiy120000350.ogg differ
diff --git a/project/sounds/aiy120000360.ogg b/project/sounds/aiy120000360.ogg
new file mode 100644
index 0000000..358c450
Binary files /dev/null and b/project/sounds/aiy120000360.ogg differ
diff --git a/project/sounds/aiy120000370.ogg b/project/sounds/aiy120000370.ogg
new file mode 100644
index 0000000..6381050
Binary files /dev/null and b/project/sounds/aiy120000370.ogg differ
diff --git a/project/sounds/aiy120000380.ogg b/project/sounds/aiy120000380.ogg
new file mode 100644
index 0000000..b80c4f0
Binary files /dev/null and b/project/sounds/aiy120000380.ogg differ
diff --git a/project/sounds/aiy120000390.ogg b/project/sounds/aiy120000390.ogg
new file mode 100644
index 0000000..c608bba
Binary files /dev/null and b/project/sounds/aiy120000390.ogg differ
diff --git a/project/sounds/aiy120000400.ogg b/project/sounds/aiy120000400.ogg
new file mode 100644
index 0000000..656ae27
Binary files /dev/null and b/project/sounds/aiy120000400.ogg differ
diff --git a/project/sounds/aiy120000410.ogg b/project/sounds/aiy120000410.ogg
new file mode 100644
index 0000000..5f04e20
Binary files /dev/null and b/project/sounds/aiy120000410.ogg differ
diff --git a/project/sounds/aiy120000420.ogg b/project/sounds/aiy120000420.ogg
new file mode 100644
index 0000000..86e91fa
Binary files /dev/null and b/project/sounds/aiy120000420.ogg differ
diff --git a/project/sounds/aiy120000430.ogg b/project/sounds/aiy120000430.ogg
new file mode 100644
index 0000000..957e986
Binary files /dev/null and b/project/sounds/aiy120000430.ogg differ
diff --git a/project/sounds/aiy120000440.ogg b/project/sounds/aiy120000440.ogg
new file mode 100644
index 0000000..45231db
Binary files /dev/null and b/project/sounds/aiy120000440.ogg differ
diff --git a/project/sounds/aiy120000450.ogg b/project/sounds/aiy120000450.ogg
new file mode 100644
index 0000000..ad04858
Binary files /dev/null and b/project/sounds/aiy120000450.ogg differ
diff --git a/project/sounds/aiy120000460.ogg b/project/sounds/aiy120000460.ogg
new file mode 100644
index 0000000..d35ded8
Binary files /dev/null and b/project/sounds/aiy120000460.ogg differ
diff --git a/project/sounds/aiy120000470.ogg b/project/sounds/aiy120000470.ogg
new file mode 100644
index 0000000..546a039
Binary files /dev/null and b/project/sounds/aiy120000470.ogg differ
diff --git a/project/sounds/aiy120000480.ogg b/project/sounds/aiy120000480.ogg
new file mode 100644
index 0000000..65f673a
Binary files /dev/null and b/project/sounds/aiy120000480.ogg differ
diff --git a/project/sounds/aiy120000490.ogg b/project/sounds/aiy120000490.ogg
new file mode 100644
index 0000000..36a5df2
Binary files /dev/null and b/project/sounds/aiy120000490.ogg differ
diff --git a/project/sounds/aiy120000500.ogg b/project/sounds/aiy120000500.ogg
new file mode 100644
index 0000000..db40172
Binary files /dev/null and b/project/sounds/aiy120000500.ogg differ
diff --git a/project/sounds/aiy120000510.ogg b/project/sounds/aiy120000510.ogg
new file mode 100644
index 0000000..0da2bbd
Binary files /dev/null and b/project/sounds/aiy120000510.ogg differ
diff --git a/project/sounds/aiy120000520.ogg b/project/sounds/aiy120000520.ogg
new file mode 100644
index 0000000..30618ea
Binary files /dev/null and b/project/sounds/aiy120000520.ogg differ
diff --git a/project/sounds/aiy120000530.ogg b/project/sounds/aiy120000530.ogg
new file mode 100644
index 0000000..63424e5
Binary files /dev/null and b/project/sounds/aiy120000530.ogg differ
diff --git a/project/sounds/aiy120000540.ogg b/project/sounds/aiy120000540.ogg
new file mode 100644
index 0000000..a491c40
Binary files /dev/null and b/project/sounds/aiy120000540.ogg differ
diff --git a/project/sounds/aiy120000550.ogg b/project/sounds/aiy120000550.ogg
new file mode 100644
index 0000000..1adb571
Binary files /dev/null and b/project/sounds/aiy120000550.ogg differ
diff --git a/project/sounds/aiy120000560.ogg b/project/sounds/aiy120000560.ogg
new file mode 100644
index 0000000..eafe149
Binary files /dev/null and b/project/sounds/aiy120000560.ogg differ
diff --git a/project/sounds/aiy120000570.ogg b/project/sounds/aiy120000570.ogg
new file mode 100644
index 0000000..f25d9d2
Binary files /dev/null and b/project/sounds/aiy120000570.ogg differ
diff --git a/project/sounds/aiy120000580.ogg b/project/sounds/aiy120000580.ogg
new file mode 100644
index 0000000..503d4e0
Binary files /dev/null and b/project/sounds/aiy120000580.ogg differ
diff --git a/project/sounds/aiy120000590.ogg b/project/sounds/aiy120000590.ogg
new file mode 100644
index 0000000..0fa071e
Binary files /dev/null and b/project/sounds/aiy120000590.ogg differ
diff --git a/project/sounds/aiy120000600.ogg b/project/sounds/aiy120000600.ogg
new file mode 100644
index 0000000..6d22156
Binary files /dev/null and b/project/sounds/aiy120000600.ogg differ
diff --git a/project/sounds/aiy120000610.ogg b/project/sounds/aiy120000610.ogg
new file mode 100644
index 0000000..95b2a7d
Binary files /dev/null and b/project/sounds/aiy120000610.ogg differ
diff --git a/project/sounds/aiy120000620.ogg b/project/sounds/aiy120000620.ogg
new file mode 100644
index 0000000..f03cf8f
Binary files /dev/null and b/project/sounds/aiy120000620.ogg differ
diff --git a/project/sounds/aiy120000630.ogg b/project/sounds/aiy120000630.ogg
new file mode 100644
index 0000000..5420074
Binary files /dev/null and b/project/sounds/aiy120000630.ogg differ
diff --git a/project/sounds/aiy120000640.ogg b/project/sounds/aiy120000640.ogg
new file mode 100644
index 0000000..a204879
Binary files /dev/null and b/project/sounds/aiy120000640.ogg differ
diff --git a/project/sounds/aiy120000650.ogg b/project/sounds/aiy120000650.ogg
new file mode 100644
index 0000000..257b817
Binary files /dev/null and b/project/sounds/aiy120000650.ogg differ
diff --git a/project/sounds/aiy120000670.ogg b/project/sounds/aiy120000670.ogg
new file mode 100644
index 0000000..b603efe
Binary files /dev/null and b/project/sounds/aiy120000670.ogg differ
diff --git a/project/sounds/aiy120000680.ogg b/project/sounds/aiy120000680.ogg
new file mode 100644
index 0000000..32f2bdd
Binary files /dev/null and b/project/sounds/aiy120000680.ogg differ
diff --git a/project/sounds/aiy120000690.ogg b/project/sounds/aiy120000690.ogg
new file mode 100644
index 0000000..89a831c
Binary files /dev/null and b/project/sounds/aiy120000690.ogg differ
diff --git a/project/sounds/aiy130000010.ogg b/project/sounds/aiy130000010.ogg
new file mode 100644
index 0000000..fe0e4e2
Binary files /dev/null and b/project/sounds/aiy130000010.ogg differ
diff --git a/project/sounds/aiy130000020.ogg b/project/sounds/aiy130000020.ogg
new file mode 100644
index 0000000..6e13850
Binary files /dev/null and b/project/sounds/aiy130000020.ogg differ
diff --git a/project/sounds/aiy150000010.ogg b/project/sounds/aiy150000010.ogg
new file mode 100644
index 0000000..0659452
Binary files /dev/null and b/project/sounds/aiy150000010.ogg differ
diff --git a/project/sounds/aiy150000020.ogg b/project/sounds/aiy150000020.ogg
new file mode 100644
index 0000000..798a9fc
Binary files /dev/null and b/project/sounds/aiy150000020.ogg differ
diff --git a/project/sounds/aiy150000030.ogg b/project/sounds/aiy150000030.ogg
new file mode 100644
index 0000000..9022052
Binary files /dev/null and b/project/sounds/aiy150000030.ogg differ
diff --git a/project/sounds/aiy150000040.ogg b/project/sounds/aiy150000040.ogg
new file mode 100644
index 0000000..c6e6233
Binary files /dev/null and b/project/sounds/aiy150000040.ogg differ
diff --git a/project/sounds/aiy150000050.ogg b/project/sounds/aiy150000050.ogg
new file mode 100644
index 0000000..8764aee
Binary files /dev/null and b/project/sounds/aiy150000050.ogg differ
diff --git a/project/sounds/aiy150000060.ogg b/project/sounds/aiy150000060.ogg
new file mode 100644
index 0000000..e305004
Binary files /dev/null and b/project/sounds/aiy150000060.ogg differ
diff --git a/project/sounds/aiy150000070.ogg b/project/sounds/aiy150000070.ogg
new file mode 100644
index 0000000..e2d173a
Binary files /dev/null and b/project/sounds/aiy150000070.ogg differ
diff --git a/project/sounds/aiy150000080.ogg b/project/sounds/aiy150000080.ogg
new file mode 100644
index 0000000..8bed0cf
Binary files /dev/null and b/project/sounds/aiy150000080.ogg differ
diff --git a/project/sounds/aiy150000090.ogg b/project/sounds/aiy150000090.ogg
new file mode 100644
index 0000000..8c35672
Binary files /dev/null and b/project/sounds/aiy150000090.ogg differ
diff --git a/project/sounds/aiy150000100.ogg b/project/sounds/aiy150000100.ogg
new file mode 100644
index 0000000..0fda997
Binary files /dev/null and b/project/sounds/aiy150000100.ogg differ
diff --git a/project/sounds/aiy150000110.ogg b/project/sounds/aiy150000110.ogg
new file mode 100644
index 0000000..2e7da86
Binary files /dev/null and b/project/sounds/aiy150000110.ogg differ
diff --git a/project/sounds/aiy150000120.ogg b/project/sounds/aiy150000120.ogg
new file mode 100644
index 0000000..1e6adc7
Binary files /dev/null and b/project/sounds/aiy150000120.ogg differ
diff --git a/project/sounds/aiy150000130.ogg b/project/sounds/aiy150000130.ogg
new file mode 100644
index 0000000..bdbefb9
Binary files /dev/null and b/project/sounds/aiy150000130.ogg differ
diff --git a/project/sounds/aiy150000140.ogg b/project/sounds/aiy150000140.ogg
new file mode 100644
index 0000000..5ec6eda
Binary files /dev/null and b/project/sounds/aiy150000140.ogg differ
diff --git a/project/sounds/aiy150000150.ogg b/project/sounds/aiy150000150.ogg
new file mode 100644
index 0000000..28fad01
Binary files /dev/null and b/project/sounds/aiy150000150.ogg differ
diff --git a/project/sounds/aiy150000160.ogg b/project/sounds/aiy150000160.ogg
new file mode 100644
index 0000000..54bb342
Binary files /dev/null and b/project/sounds/aiy150000160.ogg differ
diff --git a/project/sounds/aiy150000170.ogg b/project/sounds/aiy150000170.ogg
new file mode 100644
index 0000000..44543c4
Binary files /dev/null and b/project/sounds/aiy150000170.ogg differ
diff --git a/project/sounds/aiy150000180.ogg b/project/sounds/aiy150000180.ogg
new file mode 100644
index 0000000..16682cc
Binary files /dev/null and b/project/sounds/aiy150000180.ogg differ
diff --git a/project/sounds/aiy150000190.ogg b/project/sounds/aiy150000190.ogg
new file mode 100644
index 0000000..74b719a
Binary files /dev/null and b/project/sounds/aiy150000190.ogg differ
diff --git a/project/sounds/aiy150000200.ogg b/project/sounds/aiy150000200.ogg
new file mode 100644
index 0000000..c6c73df
Binary files /dev/null and b/project/sounds/aiy150000200.ogg differ
diff --git a/project/sounds/aiy150000210.ogg b/project/sounds/aiy150000210.ogg
new file mode 100644
index 0000000..bb1182b
Binary files /dev/null and b/project/sounds/aiy150000210.ogg differ
diff --git a/project/sounds/aiy150000220.ogg b/project/sounds/aiy150000220.ogg
new file mode 100644
index 0000000..3babde5
Binary files /dev/null and b/project/sounds/aiy150000220.ogg differ
diff --git a/project/sounds/aiy150000230.ogg b/project/sounds/aiy150000230.ogg
new file mode 100644
index 0000000..a51169e
Binary files /dev/null and b/project/sounds/aiy150000230.ogg differ
diff --git a/project/sounds/aiy150000240.ogg b/project/sounds/aiy150000240.ogg
new file mode 100644
index 0000000..6ff7544
Binary files /dev/null and b/project/sounds/aiy150000240.ogg differ
diff --git a/project/sounds/aiy150000250.ogg b/project/sounds/aiy150000250.ogg
new file mode 100644
index 0000000..1b3acf8
Binary files /dev/null and b/project/sounds/aiy150000250.ogg differ
diff --git a/project/sounds/aiy310000310.ogg b/project/sounds/aiy310000310.ogg
new file mode 100644
index 0000000..7d1eda9
Binary files /dev/null and b/project/sounds/aiy310000310.ogg differ
diff --git a/project/sounds/aiy310000320.ogg b/project/sounds/aiy310000320.ogg
new file mode 100644
index 0000000..2793e41
Binary files /dev/null and b/project/sounds/aiy310000320.ogg differ
diff --git a/project/sounds/aiy310000330.ogg b/project/sounds/aiy310000330.ogg
new file mode 100644
index 0000000..f3806c3
Binary files /dev/null and b/project/sounds/aiy310000330.ogg differ
diff --git a/project/sounds/aiy310000340.ogg b/project/sounds/aiy310000340.ogg
new file mode 100644
index 0000000..a640644
Binary files /dev/null and b/project/sounds/aiy310000340.ogg differ
diff --git a/project/sounds/aiy310000350.ogg b/project/sounds/aiy310000350.ogg
new file mode 100644
index 0000000..ea5352e
Binary files /dev/null and b/project/sounds/aiy310000350.ogg differ
diff --git a/project/sounds/aiy310000360.ogg b/project/sounds/aiy310000360.ogg
new file mode 100644
index 0000000..5eefa11
Binary files /dev/null and b/project/sounds/aiy310000360.ogg differ
diff --git a/project/sounds/aiy310000370.ogg b/project/sounds/aiy310000370.ogg
new file mode 100644
index 0000000..91a7a46
Binary files /dev/null and b/project/sounds/aiy310000370.ogg differ
diff --git a/project/sounds/aiy310000380.ogg b/project/sounds/aiy310000380.ogg
new file mode 100644
index 0000000..7ba0311
Binary files /dev/null and b/project/sounds/aiy310000380.ogg differ
diff --git a/project/sounds/aiy310000390.ogg b/project/sounds/aiy310000390.ogg
new file mode 100644
index 0000000..3c877e9
Binary files /dev/null and b/project/sounds/aiy310000390.ogg differ
diff --git a/project/sounds/aiy310000400.ogg b/project/sounds/aiy310000400.ogg
new file mode 100644
index 0000000..df3e50c
Binary files /dev/null and b/project/sounds/aiy310000400.ogg differ
diff --git a/project/sounds/aiy310000410.ogg b/project/sounds/aiy310000410.ogg
new file mode 100644
index 0000000..69ad557
Binary files /dev/null and b/project/sounds/aiy310000410.ogg differ
diff --git a/project/sounds/aiy310000420.ogg b/project/sounds/aiy310000420.ogg
new file mode 100644
index 0000000..1a50529
Binary files /dev/null and b/project/sounds/aiy310000420.ogg differ
diff --git a/project/sounds/aiy310000430.ogg b/project/sounds/aiy310000430.ogg
new file mode 100644
index 0000000..980b7af
Binary files /dev/null and b/project/sounds/aiy310000430.ogg differ
diff --git a/project/sounds/aiy310000440.ogg b/project/sounds/aiy310000440.ogg
new file mode 100644
index 0000000..68e063a
Binary files /dev/null and b/project/sounds/aiy310000440.ogg differ
diff --git a/project/sounds/aiy310000450.ogg b/project/sounds/aiy310000450.ogg
new file mode 100644
index 0000000..991e23c
Binary files /dev/null and b/project/sounds/aiy310000450.ogg differ
diff --git a/project/sounds/aiy310000460.ogg b/project/sounds/aiy310000460.ogg
new file mode 100644
index 0000000..7208098
Binary files /dev/null and b/project/sounds/aiy310000460.ogg differ
diff --git a/project/sounds/aiy310000470.ogg b/project/sounds/aiy310000470.ogg
new file mode 100644
index 0000000..fe71d8f
Binary files /dev/null and b/project/sounds/aiy310000470.ogg differ
diff --git a/project/sounds/aiy310000480.ogg b/project/sounds/aiy310000480.ogg
new file mode 100644
index 0000000..11bc4fe
Binary files /dev/null and b/project/sounds/aiy310000480.ogg differ
diff --git a/project/sounds/aiy310000490.ogg b/project/sounds/aiy310000490.ogg
new file mode 100644
index 0000000..4a8c1a5
Binary files /dev/null and b/project/sounds/aiy310000490.ogg differ
diff --git a/project/sounds/aiy310000510.ogg b/project/sounds/aiy310000510.ogg
new file mode 100644
index 0000000..5f98abb
Binary files /dev/null and b/project/sounds/aiy310000510.ogg differ
diff --git a/project/sounds/aiy310000520.ogg b/project/sounds/aiy310000520.ogg
new file mode 100644
index 0000000..5dbe058
Binary files /dev/null and b/project/sounds/aiy310000520.ogg differ
diff --git a/project/sounds/aiy310000530.ogg b/project/sounds/aiy310000530.ogg
new file mode 100644
index 0000000..317a75e
Binary files /dev/null and b/project/sounds/aiy310000530.ogg differ
diff --git a/project/sounds/aiy310000540.ogg b/project/sounds/aiy310000540.ogg
new file mode 100644
index 0000000..ebdceab
Binary files /dev/null and b/project/sounds/aiy310000540.ogg differ
diff --git a/project/sounds/aiy310000550.ogg b/project/sounds/aiy310000550.ogg
new file mode 100644
index 0000000..735881c
Binary files /dev/null and b/project/sounds/aiy310000550.ogg differ
diff --git a/project/sounds/aiy310000560.ogg b/project/sounds/aiy310000560.ogg
new file mode 100644
index 0000000..a631836
Binary files /dev/null and b/project/sounds/aiy310000560.ogg differ
diff --git a/project/sounds/aiy310000570.ogg b/project/sounds/aiy310000570.ogg
new file mode 100644
index 0000000..cd365e2
Binary files /dev/null and b/project/sounds/aiy310000570.ogg differ
diff --git a/project/sounds/aiy310000580.ogg b/project/sounds/aiy310000580.ogg
new file mode 100644
index 0000000..1ff4d98
Binary files /dev/null and b/project/sounds/aiy310000580.ogg differ
diff --git a/project/sounds/aiy310000590.ogg b/project/sounds/aiy310000590.ogg
new file mode 100644
index 0000000..d6d161a
Binary files /dev/null and b/project/sounds/aiy310000590.ogg differ
diff --git a/project/sounds/aiy310000600.ogg b/project/sounds/aiy310000600.ogg
new file mode 100644
index 0000000..3afd47d
Binary files /dev/null and b/project/sounds/aiy310000600.ogg differ
diff --git a/project/sounds/aiy310000610.ogg b/project/sounds/aiy310000610.ogg
new file mode 100644
index 0000000..fdcb28b
Binary files /dev/null and b/project/sounds/aiy310000610.ogg differ
diff --git a/project/sounds/aiy310000620.ogg b/project/sounds/aiy310000620.ogg
new file mode 100644
index 0000000..b9d5791
Binary files /dev/null and b/project/sounds/aiy310000620.ogg differ
diff --git a/project/sounds/aiy310000630.ogg b/project/sounds/aiy310000630.ogg
new file mode 100644
index 0000000..b564e34
Binary files /dev/null and b/project/sounds/aiy310000630.ogg differ
diff --git a/project/sounds/aiy310000640.ogg b/project/sounds/aiy310000640.ogg
new file mode 100644
index 0000000..d976e60
Binary files /dev/null and b/project/sounds/aiy310000640.ogg differ
diff --git a/project/sounds/aiy310000650.ogg b/project/sounds/aiy310000650.ogg
new file mode 100644
index 0000000..ea7b117
Binary files /dev/null and b/project/sounds/aiy310000650.ogg differ
diff --git a/project/sounds/aiy310000660.ogg b/project/sounds/aiy310000660.ogg
new file mode 100644
index 0000000..95f02d0
Binary files /dev/null and b/project/sounds/aiy310000660.ogg differ
diff --git a/project/sounds/aiy310000670.ogg b/project/sounds/aiy310000670.ogg
new file mode 100644
index 0000000..17df42a
Binary files /dev/null and b/project/sounds/aiy310000670.ogg differ
diff --git a/project/sounds/aiy310000680.ogg b/project/sounds/aiy310000680.ogg
new file mode 100644
index 0000000..032a9b8
Binary files /dev/null and b/project/sounds/aiy310000680.ogg differ
diff --git a/project/sounds/aiy310000690.ogg b/project/sounds/aiy310000690.ogg
new file mode 100644
index 0000000..9d99453
Binary files /dev/null and b/project/sounds/aiy310000690.ogg differ
diff --git a/project/sounds/aiy310000700.ogg b/project/sounds/aiy310000700.ogg
new file mode 100644
index 0000000..7cefbff
Binary files /dev/null and b/project/sounds/aiy310000700.ogg differ
diff --git a/project/sounds/aiy310000710.ogg b/project/sounds/aiy310000710.ogg
new file mode 100644
index 0000000..dc5eb5a
Binary files /dev/null and b/project/sounds/aiy310000710.ogg differ
diff --git a/project/sounds/aiy310000720.ogg b/project/sounds/aiy310000720.ogg
new file mode 100644
index 0000000..fd37fd3
Binary files /dev/null and b/project/sounds/aiy310000720.ogg differ
diff --git a/project/sounds/aiy310000730.ogg b/project/sounds/aiy310000730.ogg
new file mode 100644
index 0000000..94a4631
Binary files /dev/null and b/project/sounds/aiy310000730.ogg differ
diff --git a/project/sounds/aiy310000740.ogg b/project/sounds/aiy310000740.ogg
new file mode 100644
index 0000000..db5f537
Binary files /dev/null and b/project/sounds/aiy310000740.ogg differ
diff --git a/project/sounds/aiy310000750.ogg b/project/sounds/aiy310000750.ogg
new file mode 100644
index 0000000..90573c8
Binary files /dev/null and b/project/sounds/aiy310000750.ogg differ
diff --git a/project/sounds/aiy310000760.ogg b/project/sounds/aiy310000760.ogg
new file mode 100644
index 0000000..43f2522
Binary files /dev/null and b/project/sounds/aiy310000760.ogg differ
diff --git a/project/sounds/aiy310000770.ogg b/project/sounds/aiy310000770.ogg
new file mode 100644
index 0000000..fccf1f1
Binary files /dev/null and b/project/sounds/aiy310000770.ogg differ
diff --git a/project/sounds/aiy310000780.ogg b/project/sounds/aiy310000780.ogg
new file mode 100644
index 0000000..d1d04ee
Binary files /dev/null and b/project/sounds/aiy310000780.ogg differ
diff --git a/project/sounds/aiy310000790.ogg b/project/sounds/aiy310000790.ogg
new file mode 100644
index 0000000..2cfa70b
Binary files /dev/null and b/project/sounds/aiy310000790.ogg differ
diff --git a/project/sounds/aiy310000800.ogg b/project/sounds/aiy310000800.ogg
new file mode 100644
index 0000000..4400a66
Binary files /dev/null and b/project/sounds/aiy310000800.ogg differ
diff --git a/project/sounds/aiy310000810.ogg b/project/sounds/aiy310000810.ogg
new file mode 100644
index 0000000..4066404
Binary files /dev/null and b/project/sounds/aiy310000810.ogg differ
diff --git a/project/sounds/aiy310000820.ogg b/project/sounds/aiy310000820.ogg
new file mode 100644
index 0000000..29c5807
Binary files /dev/null and b/project/sounds/aiy310000820.ogg differ
diff --git a/project/sounds/aiy310000830.ogg b/project/sounds/aiy310000830.ogg
new file mode 100644
index 0000000..84770ef
Binary files /dev/null and b/project/sounds/aiy310000830.ogg differ
diff --git a/project/sounds/aiy310000840.ogg b/project/sounds/aiy310000840.ogg
new file mode 100644
index 0000000..5b44741
Binary files /dev/null and b/project/sounds/aiy310000840.ogg differ
diff --git a/project/sounds/aiy310000850.ogg b/project/sounds/aiy310000850.ogg
new file mode 100644
index 0000000..0900773
Binary files /dev/null and b/project/sounds/aiy310000850.ogg differ
diff --git a/project/sounds/aiy310000860.ogg b/project/sounds/aiy310000860.ogg
new file mode 100644
index 0000000..e31d562
Binary files /dev/null and b/project/sounds/aiy310000860.ogg differ
diff --git a/project/sounds/aiy310000870.ogg b/project/sounds/aiy310000870.ogg
new file mode 100644
index 0000000..5c9f936
Binary files /dev/null and b/project/sounds/aiy310000870.ogg differ
diff --git a/project/sounds/aiy310000880.ogg b/project/sounds/aiy310000880.ogg
new file mode 100644
index 0000000..0938bb7
Binary files /dev/null and b/project/sounds/aiy310000880.ogg differ
diff --git a/project/sounds/aiy310000890.ogg b/project/sounds/aiy310000890.ogg
new file mode 100644
index 0000000..89e43c5
Binary files /dev/null and b/project/sounds/aiy310000890.ogg differ
diff --git a/project/sounds/aiy310000900.ogg b/project/sounds/aiy310000900.ogg
new file mode 100644
index 0000000..e809e52
Binary files /dev/null and b/project/sounds/aiy310000900.ogg differ
diff --git a/project/sounds/aiy310000910.ogg b/project/sounds/aiy310000910.ogg
new file mode 100644
index 0000000..ffb6b5b
Binary files /dev/null and b/project/sounds/aiy310000910.ogg differ
diff --git a/project/sounds/aiy310000920.ogg b/project/sounds/aiy310000920.ogg
new file mode 100644
index 0000000..f470e54
Binary files /dev/null and b/project/sounds/aiy310000920.ogg differ
diff --git a/project/sounds/aiy310000930.ogg b/project/sounds/aiy310000930.ogg
new file mode 100644
index 0000000..494d15f
Binary files /dev/null and b/project/sounds/aiy310000930.ogg differ
diff --git a/project/sounds/aiy310000940.ogg b/project/sounds/aiy310000940.ogg
new file mode 100644
index 0000000..de36a9d
Binary files /dev/null and b/project/sounds/aiy310000940.ogg differ
diff --git a/project/sounds/aiy310000950.ogg b/project/sounds/aiy310000950.ogg
new file mode 100644
index 0000000..9abfea9
Binary files /dev/null and b/project/sounds/aiy310000950.ogg differ
diff --git a/project/sounds/aiy310000960.ogg b/project/sounds/aiy310000960.ogg
new file mode 100644
index 0000000..394ddcb
Binary files /dev/null and b/project/sounds/aiy310000960.ogg differ
diff --git a/project/sounds/aiy310000970.ogg b/project/sounds/aiy310000970.ogg
new file mode 100644
index 0000000..aefe802
Binary files /dev/null and b/project/sounds/aiy310000970.ogg differ
diff --git a/project/sounds/aiy310000980.ogg b/project/sounds/aiy310000980.ogg
new file mode 100644
index 0000000..9c7ea85
Binary files /dev/null and b/project/sounds/aiy310000980.ogg differ
diff --git a/project/sounds/aiy310000990.ogg b/project/sounds/aiy310000990.ogg
new file mode 100644
index 0000000..5808076
Binary files /dev/null and b/project/sounds/aiy310000990.ogg differ
diff --git a/project/sounds/aiy310001000.ogg b/project/sounds/aiy310001000.ogg
new file mode 100644
index 0000000..2dba8fb
Binary files /dev/null and b/project/sounds/aiy310001000.ogg differ
diff --git a/project/sounds/aiy310001010.ogg b/project/sounds/aiy310001010.ogg
new file mode 100644
index 0000000..a647a12
Binary files /dev/null and b/project/sounds/aiy310001010.ogg differ
diff --git a/project/sounds/aiy310001027.ogg b/project/sounds/aiy310001027.ogg
new file mode 100644
index 0000000..9d31c17
Binary files /dev/null and b/project/sounds/aiy310001027.ogg differ
diff --git a/project/sounds/aiy310001030.ogg b/project/sounds/aiy310001030.ogg
new file mode 100644
index 0000000..c0f363e
Binary files /dev/null and b/project/sounds/aiy310001030.ogg differ
diff --git a/project/sounds/aiy310001040.ogg b/project/sounds/aiy310001040.ogg
new file mode 100644
index 0000000..2d36a51
Binary files /dev/null and b/project/sounds/aiy310001040.ogg differ
diff --git a/project/sounds/aiy310001050.ogg b/project/sounds/aiy310001050.ogg
new file mode 100644
index 0000000..7b3d406
Binary files /dev/null and b/project/sounds/aiy310001050.ogg differ
diff --git a/project/sounds/aiy310001060.ogg b/project/sounds/aiy310001060.ogg
new file mode 100644
index 0000000..5a7c2c1
Binary files /dev/null and b/project/sounds/aiy310001060.ogg differ
diff --git a/project/sounds/aiy310001070.ogg b/project/sounds/aiy310001070.ogg
new file mode 100644
index 0000000..4ecc17a
Binary files /dev/null and b/project/sounds/aiy310001070.ogg differ
diff --git a/project/sounds/aiy310001080.ogg b/project/sounds/aiy310001080.ogg
new file mode 100644
index 0000000..d97e943
Binary files /dev/null and b/project/sounds/aiy310001080.ogg differ
diff --git a/project/sounds/aiy310001090.ogg b/project/sounds/aiy310001090.ogg
new file mode 100644
index 0000000..dc60205
Binary files /dev/null and b/project/sounds/aiy310001090.ogg differ
diff --git a/project/sounds/aiy310001100.ogg b/project/sounds/aiy310001100.ogg
new file mode 100644
index 0000000..13d7d7d
Binary files /dev/null and b/project/sounds/aiy310001100.ogg differ
diff --git a/project/sounds/aiy310001110.ogg b/project/sounds/aiy310001110.ogg
new file mode 100644
index 0000000..040c120
Binary files /dev/null and b/project/sounds/aiy310001110.ogg differ
diff --git a/project/sounds/aiy310001120.ogg b/project/sounds/aiy310001120.ogg
new file mode 100644
index 0000000..458e4f7
Binary files /dev/null and b/project/sounds/aiy310001120.ogg differ
diff --git a/project/sounds/aiy310001130.ogg b/project/sounds/aiy310001130.ogg
new file mode 100644
index 0000000..7daea21
Binary files /dev/null and b/project/sounds/aiy310001130.ogg differ
diff --git a/project/sounds/aiy310001140.ogg b/project/sounds/aiy310001140.ogg
new file mode 100644
index 0000000..7d54e19
Binary files /dev/null and b/project/sounds/aiy310001140.ogg differ
diff --git a/project/sounds/aiy310001150.ogg b/project/sounds/aiy310001150.ogg
new file mode 100644
index 0000000..b06bdc9
Binary files /dev/null and b/project/sounds/aiy310001150.ogg differ
diff --git a/project/sounds/aiy310001160.ogg b/project/sounds/aiy310001160.ogg
new file mode 100644
index 0000000..3ec510b
Binary files /dev/null and b/project/sounds/aiy310001160.ogg differ
diff --git a/project/sounds/aiy310001170.ogg b/project/sounds/aiy310001170.ogg
new file mode 100644
index 0000000..d96b1e2
Binary files /dev/null and b/project/sounds/aiy310001170.ogg differ
diff --git a/project/sounds/aiy310001180.ogg b/project/sounds/aiy310001180.ogg
new file mode 100644
index 0000000..88cffb2
Binary files /dev/null and b/project/sounds/aiy310001180.ogg differ
diff --git a/project/sounds/aiy310001190.ogg b/project/sounds/aiy310001190.ogg
new file mode 100644
index 0000000..e35c481
Binary files /dev/null and b/project/sounds/aiy310001190.ogg differ
diff --git a/project/sounds/aiy310001200.ogg b/project/sounds/aiy310001200.ogg
new file mode 100644
index 0000000..9c30d38
Binary files /dev/null and b/project/sounds/aiy310001200.ogg differ
diff --git a/project/sounds/aiy310001210.ogg b/project/sounds/aiy310001210.ogg
new file mode 100644
index 0000000..cfe51c7
Binary files /dev/null and b/project/sounds/aiy310001210.ogg differ
diff --git a/project/sounds/aiy310001220.ogg b/project/sounds/aiy310001220.ogg
new file mode 100644
index 0000000..e7d5e61
Binary files /dev/null and b/project/sounds/aiy310001220.ogg differ
diff --git a/project/sounds/aiy310001230.ogg b/project/sounds/aiy310001230.ogg
new file mode 100644
index 0000000..4aa7064
Binary files /dev/null and b/project/sounds/aiy310001230.ogg differ
diff --git a/project/sounds/aiy310001240.ogg b/project/sounds/aiy310001240.ogg
new file mode 100644
index 0000000..9342811
Binary files /dev/null and b/project/sounds/aiy310001240.ogg differ
diff --git a/project/sounds/aiy310001250.ogg b/project/sounds/aiy310001250.ogg
new file mode 100644
index 0000000..15a6960
Binary files /dev/null and b/project/sounds/aiy310001250.ogg differ
diff --git a/project/sounds/aiy310001260.ogg b/project/sounds/aiy310001260.ogg
new file mode 100644
index 0000000..dab5516
Binary files /dev/null and b/project/sounds/aiy310001260.ogg differ
diff --git a/project/sounds/aiy310001270.ogg b/project/sounds/aiy310001270.ogg
new file mode 100644
index 0000000..d531b49
Binary files /dev/null and b/project/sounds/aiy310001270.ogg differ
diff --git a/project/sounds/aiy310001280.ogg b/project/sounds/aiy310001280.ogg
new file mode 100644
index 0000000..2e749a4
Binary files /dev/null and b/project/sounds/aiy310001280.ogg differ
diff --git a/project/sounds/aiy310001290.ogg b/project/sounds/aiy310001290.ogg
new file mode 100644
index 0000000..c2e81a6
Binary files /dev/null and b/project/sounds/aiy310001290.ogg differ
diff --git a/project/sounds/aiy310001300.ogg b/project/sounds/aiy310001300.ogg
new file mode 100644
index 0000000..904940f
Binary files /dev/null and b/project/sounds/aiy310001300.ogg differ
diff --git a/project/sounds/aiy310001310.ogg b/project/sounds/aiy310001310.ogg
new file mode 100644
index 0000000..a7f25b0
Binary files /dev/null and b/project/sounds/aiy310001310.ogg differ
diff --git a/project/sounds/aiy310001320.ogg b/project/sounds/aiy310001320.ogg
new file mode 100644
index 0000000..1b06256
Binary files /dev/null and b/project/sounds/aiy310001320.ogg differ
diff --git a/project/sounds/aiy310001330.ogg b/project/sounds/aiy310001330.ogg
new file mode 100644
index 0000000..8525810
Binary files /dev/null and b/project/sounds/aiy310001330.ogg differ
diff --git a/project/sounds/aiy310001340.ogg b/project/sounds/aiy310001340.ogg
new file mode 100644
index 0000000..44b81fe
Binary files /dev/null and b/project/sounds/aiy310001340.ogg differ
diff --git a/project/sounds/aiy310001350.ogg b/project/sounds/aiy310001350.ogg
new file mode 100644
index 0000000..2291f96
Binary files /dev/null and b/project/sounds/aiy310001350.ogg differ
diff --git a/project/sounds/aiy310001360.ogg b/project/sounds/aiy310001360.ogg
new file mode 100644
index 0000000..2114e7b
Binary files /dev/null and b/project/sounds/aiy310001360.ogg differ
diff --git a/project/sounds/aiy310001370.ogg b/project/sounds/aiy310001370.ogg
new file mode 100644
index 0000000..d7df9be
Binary files /dev/null and b/project/sounds/aiy310001370.ogg differ
diff --git a/project/sounds/aiy310001380.ogg b/project/sounds/aiy310001380.ogg
new file mode 100644
index 0000000..fac86f0
Binary files /dev/null and b/project/sounds/aiy310001380.ogg differ
diff --git a/project/sounds/aiy310001390.ogg b/project/sounds/aiy310001390.ogg
new file mode 100644
index 0000000..e543b6f
Binary files /dev/null and b/project/sounds/aiy310001390.ogg differ
diff --git a/project/sounds/aiy320000010.ogg b/project/sounds/aiy320000010.ogg
new file mode 100644
index 0000000..54d6db5
Binary files /dev/null and b/project/sounds/aiy320000010.ogg differ
diff --git a/project/sounds/aiy320000020.ogg b/project/sounds/aiy320000020.ogg
new file mode 100644
index 0000000..d98d94e
Binary files /dev/null and b/project/sounds/aiy320000020.ogg differ
diff --git a/project/sounds/aiy320000030.ogg b/project/sounds/aiy320000030.ogg
new file mode 100644
index 0000000..574f903
Binary files /dev/null and b/project/sounds/aiy320000030.ogg differ
diff --git a/project/sounds/aiy320000040.ogg b/project/sounds/aiy320000040.ogg
new file mode 100644
index 0000000..613c27f
Binary files /dev/null and b/project/sounds/aiy320000040.ogg differ
diff --git a/project/sounds/aiy320000050.ogg b/project/sounds/aiy320000050.ogg
new file mode 100644
index 0000000..b35ca98
Binary files /dev/null and b/project/sounds/aiy320000050.ogg differ
diff --git a/project/sounds/aiy320000060.ogg b/project/sounds/aiy320000060.ogg
new file mode 100644
index 0000000..0365def
Binary files /dev/null and b/project/sounds/aiy320000060.ogg differ
diff --git a/project/sounds/aiy320000070.ogg b/project/sounds/aiy320000070.ogg
new file mode 100644
index 0000000..52e3d11
Binary files /dev/null and b/project/sounds/aiy320000070.ogg differ
diff --git a/project/sounds/aiy320000080.ogg b/project/sounds/aiy320000080.ogg
new file mode 100644
index 0000000..9a2afef
Binary files /dev/null and b/project/sounds/aiy320000080.ogg differ
diff --git a/project/sounds/aiy320000090.ogg b/project/sounds/aiy320000090.ogg
new file mode 100644
index 0000000..608f2e1
Binary files /dev/null and b/project/sounds/aiy320000090.ogg differ
diff --git a/project/sounds/aiy320000100.ogg b/project/sounds/aiy320000100.ogg
new file mode 100644
index 0000000..b97a61c
Binary files /dev/null and b/project/sounds/aiy320000100.ogg differ
diff --git a/project/sounds/aiy320000110.ogg b/project/sounds/aiy320000110.ogg
new file mode 100644
index 0000000..f15348f
Binary files /dev/null and b/project/sounds/aiy320000110.ogg differ
diff --git a/project/sounds/aiy320000120.ogg b/project/sounds/aiy320000120.ogg
new file mode 100644
index 0000000..3adda1d
Binary files /dev/null and b/project/sounds/aiy320000120.ogg differ
diff --git a/project/sounds/aiy320000135.ogg b/project/sounds/aiy320000135.ogg
new file mode 100644
index 0000000..79ed386
Binary files /dev/null and b/project/sounds/aiy320000135.ogg differ
diff --git a/project/sounds/aiy320000140.ogg b/project/sounds/aiy320000140.ogg
new file mode 100644
index 0000000..0b7add2
Binary files /dev/null and b/project/sounds/aiy320000140.ogg differ
diff --git a/project/sounds/aiy340000010.ogg b/project/sounds/aiy340000010.ogg
new file mode 100644
index 0000000..1687505
Binary files /dev/null and b/project/sounds/aiy340000010.ogg differ
diff --git a/project/sounds/aiy340000020.ogg b/project/sounds/aiy340000020.ogg
new file mode 100644
index 0000000..f05a1e8
Binary files /dev/null and b/project/sounds/aiy340000020.ogg differ
diff --git a/project/sounds/aiy340000030.ogg b/project/sounds/aiy340000030.ogg
new file mode 100644
index 0000000..915b664
Binary files /dev/null and b/project/sounds/aiy340000030.ogg differ
diff --git a/project/sounds/aiy340000040.ogg b/project/sounds/aiy340000040.ogg
new file mode 100644
index 0000000..72259c5
Binary files /dev/null and b/project/sounds/aiy340000040.ogg differ
diff --git a/project/sounds/aiy340000050.ogg b/project/sounds/aiy340000050.ogg
new file mode 100644
index 0000000..ca136d2
Binary files /dev/null and b/project/sounds/aiy340000050.ogg differ
diff --git a/project/sounds/aiy340000060.ogg b/project/sounds/aiy340000060.ogg
new file mode 100644
index 0000000..8bcb94b
Binary files /dev/null and b/project/sounds/aiy340000060.ogg differ
diff --git a/project/sounds/aiy340000070.ogg b/project/sounds/aiy340000070.ogg
new file mode 100644
index 0000000..364be3b
Binary files /dev/null and b/project/sounds/aiy340000070.ogg differ
diff --git a/project/sounds/aiy340000080.ogg b/project/sounds/aiy340000080.ogg
new file mode 100644
index 0000000..6e6f1da
Binary files /dev/null and b/project/sounds/aiy340000080.ogg differ
diff --git a/project/sounds/aiy340000090.ogg b/project/sounds/aiy340000090.ogg
new file mode 100644
index 0000000..1da2a78
Binary files /dev/null and b/project/sounds/aiy340000090.ogg differ
diff --git a/project/sounds/aiy340000100.ogg b/project/sounds/aiy340000100.ogg
new file mode 100644
index 0000000..718db86
Binary files /dev/null and b/project/sounds/aiy340000100.ogg differ
diff --git a/project/sounds/aiy340000110.ogg b/project/sounds/aiy340000110.ogg
new file mode 100644
index 0000000..46d5be6
Binary files /dev/null and b/project/sounds/aiy340000110.ogg differ
diff --git a/project/sounds/aiy340000120.ogg b/project/sounds/aiy340000120.ogg
new file mode 100644
index 0000000..f1003c3
Binary files /dev/null and b/project/sounds/aiy340000120.ogg differ
diff --git a/project/sounds/aiy340000140.ogg b/project/sounds/aiy340000140.ogg
new file mode 100644
index 0000000..7a475e9
Binary files /dev/null and b/project/sounds/aiy340000140.ogg differ
diff --git a/project/sounds/aiy340000150.ogg b/project/sounds/aiy340000150.ogg
new file mode 100644
index 0000000..01b5107
Binary files /dev/null and b/project/sounds/aiy340000150.ogg differ
diff --git a/project/sounds/aiy340000160.ogg b/project/sounds/aiy340000160.ogg
new file mode 100644
index 0000000..710abca
Binary files /dev/null and b/project/sounds/aiy340000160.ogg differ
diff --git a/project/sounds/aiy340000170.ogg b/project/sounds/aiy340000170.ogg
new file mode 100644
index 0000000..7fc073b
Binary files /dev/null and b/project/sounds/aiy340000170.ogg differ
diff --git a/project/sounds/aiy340000180.ogg b/project/sounds/aiy340000180.ogg
new file mode 100644
index 0000000..575d8b4
Binary files /dev/null and b/project/sounds/aiy340000180.ogg differ
diff --git a/project/sounds/aiy340000190.ogg b/project/sounds/aiy340000190.ogg
new file mode 100644
index 0000000..155b411
Binary files /dev/null and b/project/sounds/aiy340000190.ogg differ
diff --git a/project/sounds/aiy340000200.ogg b/project/sounds/aiy340000200.ogg
new file mode 100644
index 0000000..bf6dc4a
Binary files /dev/null and b/project/sounds/aiy340000200.ogg differ
diff --git a/project/sounds/aiy340000210.ogg b/project/sounds/aiy340000210.ogg
new file mode 100644
index 0000000..3b4e1b1
Binary files /dev/null and b/project/sounds/aiy340000210.ogg differ
diff --git a/project/sounds/aiy340000220.ogg b/project/sounds/aiy340000220.ogg
new file mode 100644
index 0000000..1b46e59
Binary files /dev/null and b/project/sounds/aiy340000220.ogg differ
diff --git a/project/sounds/aiy340000230.ogg b/project/sounds/aiy340000230.ogg
new file mode 100644
index 0000000..a2462c7
Binary files /dev/null and b/project/sounds/aiy340000230.ogg differ
diff --git a/project/sounds/aiy340000240.ogg b/project/sounds/aiy340000240.ogg
new file mode 100644
index 0000000..91690e5
Binary files /dev/null and b/project/sounds/aiy340000240.ogg differ
diff --git a/project/sounds/aiy340000250.ogg b/project/sounds/aiy340000250.ogg
new file mode 100644
index 0000000..321f997
Binary files /dev/null and b/project/sounds/aiy340000250.ogg differ
diff --git a/project/sounds/aiy340000260.ogg b/project/sounds/aiy340000260.ogg
new file mode 100644
index 0000000..137c284
Binary files /dev/null and b/project/sounds/aiy340000260.ogg differ
diff --git a/project/sounds/aiy340000270.ogg b/project/sounds/aiy340000270.ogg
new file mode 100644
index 0000000..b94bbb4
Binary files /dev/null and b/project/sounds/aiy340000270.ogg differ
diff --git a/project/sounds/aiy340000280.ogg b/project/sounds/aiy340000280.ogg
new file mode 100644
index 0000000..e685598
Binary files /dev/null and b/project/sounds/aiy340000280.ogg differ
diff --git a/project/sounds/aiy340000290.ogg b/project/sounds/aiy340000290.ogg
new file mode 100644
index 0000000..6965511
Binary files /dev/null and b/project/sounds/aiy340000290.ogg differ
diff --git a/project/sounds/aiy340000300.ogg b/project/sounds/aiy340000300.ogg
new file mode 100644
index 0000000..f0c9ccd
Binary files /dev/null and b/project/sounds/aiy340000300.ogg differ
diff --git a/project/sounds/aiy340000310.ogg b/project/sounds/aiy340000310.ogg
new file mode 100644
index 0000000..886e7ba
Binary files /dev/null and b/project/sounds/aiy340000310.ogg differ
diff --git a/project/sounds/aiy340000320.ogg b/project/sounds/aiy340000320.ogg
new file mode 100644
index 0000000..c7b1ab1
Binary files /dev/null and b/project/sounds/aiy340000320.ogg differ
diff --git a/project/sounds/aiy340000330.ogg b/project/sounds/aiy340000330.ogg
new file mode 100644
index 0000000..b07b430
Binary files /dev/null and b/project/sounds/aiy340000330.ogg differ
diff --git a/project/sounds/aiy340000340.ogg b/project/sounds/aiy340000340.ogg
new file mode 100644
index 0000000..07fab33
Binary files /dev/null and b/project/sounds/aiy340000340.ogg differ
diff --git a/project/sounds/aiy340000350.ogg b/project/sounds/aiy340000350.ogg
new file mode 100644
index 0000000..4fff4de
Binary files /dev/null and b/project/sounds/aiy340000350.ogg differ
diff --git a/project/sounds/aiy340000360.ogg b/project/sounds/aiy340000360.ogg
new file mode 100644
index 0000000..1d9fa8f
Binary files /dev/null and b/project/sounds/aiy340000360.ogg differ
diff --git a/project/sounds/aiy340000370.ogg b/project/sounds/aiy340000370.ogg
new file mode 100644
index 0000000..a0e6e1e
Binary files /dev/null and b/project/sounds/aiy340000370.ogg differ
diff --git a/project/sounds/aiy340000380.ogg b/project/sounds/aiy340000380.ogg
new file mode 100644
index 0000000..0f4b917
Binary files /dev/null and b/project/sounds/aiy340000380.ogg differ
diff --git a/project/sounds/aiy340000390.ogg b/project/sounds/aiy340000390.ogg
new file mode 100644
index 0000000..021d193
Binary files /dev/null and b/project/sounds/aiy340000390.ogg differ
diff --git a/project/sounds/aiy340000400.ogg b/project/sounds/aiy340000400.ogg
new file mode 100644
index 0000000..3f217a7
Binary files /dev/null and b/project/sounds/aiy340000400.ogg differ
diff --git a/project/sounds/aiy340000410.ogg b/project/sounds/aiy340000410.ogg
new file mode 100644
index 0000000..95f46c9
Binary files /dev/null and b/project/sounds/aiy340000410.ogg differ
diff --git a/project/sounds/aiy340000420.ogg b/project/sounds/aiy340000420.ogg
new file mode 100644
index 0000000..7ed6067
Binary files /dev/null and b/project/sounds/aiy340000420.ogg differ
diff --git a/project/sounds/aiy340000430.ogg b/project/sounds/aiy340000430.ogg
new file mode 100644
index 0000000..cfc1202
Binary files /dev/null and b/project/sounds/aiy340000430.ogg differ
diff --git a/project/sounds/aiy350000240.ogg b/project/sounds/aiy350000240.ogg
new file mode 100644
index 0000000..e549bdd
Binary files /dev/null and b/project/sounds/aiy350000240.ogg differ
diff --git a/project/sounds/aiy350000250.ogg b/project/sounds/aiy350000250.ogg
new file mode 100644
index 0000000..3994c71
Binary files /dev/null and b/project/sounds/aiy350000250.ogg differ
diff --git a/project/sounds/aiy350000260.ogg b/project/sounds/aiy350000260.ogg
new file mode 100644
index 0000000..f8e3492
Binary files /dev/null and b/project/sounds/aiy350000260.ogg differ
diff --git a/project/sounds/aiy430000010.ogg b/project/sounds/aiy430000010.ogg
new file mode 100644
index 0000000..356ddcd
Binary files /dev/null and b/project/sounds/aiy430000010.ogg differ
diff --git a/project/sounds/aiy430000020.ogg b/project/sounds/aiy430000020.ogg
new file mode 100644
index 0000000..9efe052
Binary files /dev/null and b/project/sounds/aiy430000020.ogg differ
diff --git a/project/sounds/aiy430000030.ogg b/project/sounds/aiy430000030.ogg
new file mode 100644
index 0000000..c67ff9b
Binary files /dev/null and b/project/sounds/aiy430000030.ogg differ
diff --git a/project/sounds/aiy430000040.ogg b/project/sounds/aiy430000040.ogg
new file mode 100644
index 0000000..b05463e
Binary files /dev/null and b/project/sounds/aiy430000040.ogg differ
diff --git a/project/sounds/aiy430000050.ogg b/project/sounds/aiy430000050.ogg
new file mode 100644
index 0000000..5374b90
Binary files /dev/null and b/project/sounds/aiy430000050.ogg differ
diff --git a/project/sounds/aiy430000060.ogg b/project/sounds/aiy430000060.ogg
new file mode 100644
index 0000000..6b44c40
Binary files /dev/null and b/project/sounds/aiy430000060.ogg differ
diff --git a/project/sounds/aiy430000070.ogg b/project/sounds/aiy430000070.ogg
new file mode 100644
index 0000000..68fbcc8
Binary files /dev/null and b/project/sounds/aiy430000070.ogg differ
diff --git a/project/sounds/aiy430000080.ogg b/project/sounds/aiy430000080.ogg
new file mode 100644
index 0000000..f3ab8e1
Binary files /dev/null and b/project/sounds/aiy430000080.ogg differ
diff --git a/project/sounds/aiy430000090.ogg b/project/sounds/aiy430000090.ogg
new file mode 100644
index 0000000..a0487d9
Binary files /dev/null and b/project/sounds/aiy430000090.ogg differ
diff --git a/project/sounds/aiy430000100.ogg b/project/sounds/aiy430000100.ogg
new file mode 100644
index 0000000..3b111ed
Binary files /dev/null and b/project/sounds/aiy430000100.ogg differ
diff --git a/project/sounds/aiy430000110.ogg b/project/sounds/aiy430000110.ogg
new file mode 100644
index 0000000..472e8ea
Binary files /dev/null and b/project/sounds/aiy430000110.ogg differ
diff --git a/project/sounds/aiy430000120.ogg b/project/sounds/aiy430000120.ogg
new file mode 100644
index 0000000..16e11b0
Binary files /dev/null and b/project/sounds/aiy430000120.ogg differ
diff --git a/project/sounds/aiy430000130.ogg b/project/sounds/aiy430000130.ogg
new file mode 100644
index 0000000..87aaa6e
Binary files /dev/null and b/project/sounds/aiy430000130.ogg differ
diff --git a/project/sounds/aiy430000140.ogg b/project/sounds/aiy430000140.ogg
new file mode 100644
index 0000000..460a7de
Binary files /dev/null and b/project/sounds/aiy430000140.ogg differ
diff --git a/project/sounds/aiy430000150.ogg b/project/sounds/aiy430000150.ogg
new file mode 100644
index 0000000..a33a5bd
Binary files /dev/null and b/project/sounds/aiy430000150.ogg differ
diff --git a/project/sounds/aiy430000160.ogg b/project/sounds/aiy430000160.ogg
new file mode 100644
index 0000000..24971e2
Binary files /dev/null and b/project/sounds/aiy430000160.ogg differ
diff --git a/project/sounds/aiy430000170.ogg b/project/sounds/aiy430000170.ogg
new file mode 100644
index 0000000..a76c57b
Binary files /dev/null and b/project/sounds/aiy430000170.ogg differ
diff --git a/project/sounds/aiy430000180.ogg b/project/sounds/aiy430000180.ogg
new file mode 100644
index 0000000..aaf40ca
Binary files /dev/null and b/project/sounds/aiy430000180.ogg differ
diff --git a/project/sounds/aiy430000190.ogg b/project/sounds/aiy430000190.ogg
new file mode 100644
index 0000000..81ef542
Binary files /dev/null and b/project/sounds/aiy430000190.ogg differ
diff --git a/project/sounds/aiy430000200.ogg b/project/sounds/aiy430000200.ogg
new file mode 100644
index 0000000..57f8c8d
Binary files /dev/null and b/project/sounds/aiy430000200.ogg differ
diff --git a/project/sounds/aiy430000210.ogg b/project/sounds/aiy430000210.ogg
new file mode 100644
index 0000000..6a02c00
Binary files /dev/null and b/project/sounds/aiy430000210.ogg differ
diff --git a/project/sounds/aiy430000220.ogg b/project/sounds/aiy430000220.ogg
new file mode 100644
index 0000000..cc0e4be
Binary files /dev/null and b/project/sounds/aiy430000220.ogg differ
diff --git a/project/sounds/aiy430000230.ogg b/project/sounds/aiy430000230.ogg
new file mode 100644
index 0000000..a8ef1f3
Binary files /dev/null and b/project/sounds/aiy430000230.ogg differ
diff --git a/project/sounds/aiy430000240.ogg b/project/sounds/aiy430000240.ogg
new file mode 100644
index 0000000..6236846
Binary files /dev/null and b/project/sounds/aiy430000240.ogg differ
diff --git a/project/sounds/aiy430000250.ogg b/project/sounds/aiy430000250.ogg
new file mode 100644
index 0000000..806ecfb
Binary files /dev/null and b/project/sounds/aiy430000250.ogg differ
diff --git a/project/sounds/aiy430000260.ogg b/project/sounds/aiy430000260.ogg
new file mode 100644
index 0000000..8872913
Binary files /dev/null and b/project/sounds/aiy430000260.ogg differ
diff --git a/project/sounds/aiy430000270.ogg b/project/sounds/aiy430000270.ogg
new file mode 100644
index 0000000..2d61e3e
Binary files /dev/null and b/project/sounds/aiy430000270.ogg differ
diff --git a/project/sounds/aiy430000280.ogg b/project/sounds/aiy430000280.ogg
new file mode 100644
index 0000000..142bcbe
Binary files /dev/null and b/project/sounds/aiy430000280.ogg differ
diff --git a/project/sounds/aiy430000290.ogg b/project/sounds/aiy430000290.ogg
new file mode 100644
index 0000000..808500c
Binary files /dev/null and b/project/sounds/aiy430000290.ogg differ
diff --git a/project/sounds/aiy440000010.ogg b/project/sounds/aiy440000010.ogg
new file mode 100644
index 0000000..a8dad86
Binary files /dev/null and b/project/sounds/aiy440000010.ogg differ
diff --git a/project/sounds/aiy440000020.ogg b/project/sounds/aiy440000020.ogg
new file mode 100644
index 0000000..c9a14fd
Binary files /dev/null and b/project/sounds/aiy440000020.ogg differ
diff --git a/project/sounds/aiy440000030.ogg b/project/sounds/aiy440000030.ogg
new file mode 100644
index 0000000..fe311cc
Binary files /dev/null and b/project/sounds/aiy440000030.ogg differ
diff --git a/project/sounds/aiy440000040.ogg b/project/sounds/aiy440000040.ogg
new file mode 100644
index 0000000..2b98283
Binary files /dev/null and b/project/sounds/aiy440000040.ogg differ
diff --git a/project/sounds/aiy440000050.ogg b/project/sounds/aiy440000050.ogg
new file mode 100644
index 0000000..65e8f38
Binary files /dev/null and b/project/sounds/aiy440000050.ogg differ
diff --git a/project/sounds/aiy440000060.ogg b/project/sounds/aiy440000060.ogg
new file mode 100644
index 0000000..7911ca1
Binary files /dev/null and b/project/sounds/aiy440000060.ogg differ
diff --git a/project/sounds/aiy440000070.ogg b/project/sounds/aiy440000070.ogg
new file mode 100644
index 0000000..79ceecd
Binary files /dev/null and b/project/sounds/aiy440000070.ogg differ
diff --git a/project/sounds/aiy440000080.ogg b/project/sounds/aiy440000080.ogg
new file mode 100644
index 0000000..d165741
Binary files /dev/null and b/project/sounds/aiy440000080.ogg differ
diff --git a/project/sounds/aiy440000090.ogg b/project/sounds/aiy440000090.ogg
new file mode 100644
index 0000000..816a91f
Binary files /dev/null and b/project/sounds/aiy440000090.ogg differ
diff --git a/project/sounds/aiy440000100.ogg b/project/sounds/aiy440000100.ogg
new file mode 100644
index 0000000..e0cbe17
Binary files /dev/null and b/project/sounds/aiy440000100.ogg differ
diff --git a/project/sounds/aiy440000110.ogg b/project/sounds/aiy440000110.ogg
new file mode 100644
index 0000000..475cf95
Binary files /dev/null and b/project/sounds/aiy440000110.ogg differ
diff --git a/project/sounds/aiy440000120.ogg b/project/sounds/aiy440000120.ogg
new file mode 100644
index 0000000..ebdc162
Binary files /dev/null and b/project/sounds/aiy440000120.ogg differ
diff --git a/project/sounds/aiy510000010.ogg b/project/sounds/aiy510000010.ogg
new file mode 100644
index 0000000..5ab3fc0
Binary files /dev/null and b/project/sounds/aiy510000010.ogg differ
diff --git a/project/sounds/aiy510000020.ogg b/project/sounds/aiy510000020.ogg
new file mode 100644
index 0000000..57f77d7
Binary files /dev/null and b/project/sounds/aiy510000020.ogg differ
diff --git a/project/sounds/aiy720000010.ogg b/project/sounds/aiy720000010.ogg
new file mode 100644
index 0000000..5ae9b67
Binary files /dev/null and b/project/sounds/aiy720000010.ogg differ
diff --git a/project/sounds/aiy730000010.ogg b/project/sounds/aiy730000010.ogg
new file mode 100644
index 0000000..ab0d410
Binary files /dev/null and b/project/sounds/aiy730000010.ogg differ
diff --git a/project/sounds/aiy740000010.ogg b/project/sounds/aiy740000010.ogg
new file mode 100644
index 0000000..b5b010f
Binary files /dev/null and b/project/sounds/aiy740000010.ogg differ
diff --git a/project/sounds/aiy750000010.ogg b/project/sounds/aiy750000010.ogg
new file mode 100644
index 0000000..0b8ceb4
Binary files /dev/null and b/project/sounds/aiy750000010.ogg differ
diff --git a/project/sounds/aiy750000020.ogg b/project/sounds/aiy750000020.ogg
new file mode 100644
index 0000000..f260c12
Binary files /dev/null and b/project/sounds/aiy750000020.ogg differ
diff --git a/project/sounds/aiy750000030.ogg b/project/sounds/aiy750000030.ogg
new file mode 100644
index 0000000..93faa55
Binary files /dev/null and b/project/sounds/aiy750000030.ogg differ
diff --git a/project/sounds/aiy750000040.ogg b/project/sounds/aiy750000040.ogg
new file mode 100644
index 0000000..7592d4b
Binary files /dev/null and b/project/sounds/aiy750000040.ogg differ
diff --git a/project/sounds/aiy750000050.ogg b/project/sounds/aiy750000050.ogg
new file mode 100644
index 0000000..bf95779
Binary files /dev/null and b/project/sounds/aiy750000050.ogg differ
diff --git a/project/sounds/aiy750000060.ogg b/project/sounds/aiy750000060.ogg
new file mode 100644
index 0000000..b0f81b8
Binary files /dev/null and b/project/sounds/aiy750000060.ogg differ
diff --git a/project/sounds/aiy750000070.ogg b/project/sounds/aiy750000070.ogg
new file mode 100644
index 0000000..d2edb4d
Binary files /dev/null and b/project/sounds/aiy750000070.ogg differ
diff --git a/project/sounds/aiy750000080.ogg b/project/sounds/aiy750000080.ogg
new file mode 100644
index 0000000..a0ffff8
Binary files /dev/null and b/project/sounds/aiy750000080.ogg differ
diff --git a/project/sounds/aiy750000090.ogg b/project/sounds/aiy750000090.ogg
new file mode 100644
index 0000000..aefcdb3
Binary files /dev/null and b/project/sounds/aiy750000090.ogg differ
diff --git a/project/sounds/aiy750000100.ogg b/project/sounds/aiy750000100.ogg
new file mode 100644
index 0000000..4057d0c
Binary files /dev/null and b/project/sounds/aiy750000100.ogg differ
diff --git a/project/sounds/aiy750000110.ogg b/project/sounds/aiy750000110.ogg
new file mode 100644
index 0000000..e76d3be
Binary files /dev/null and b/project/sounds/aiy750000110.ogg differ
diff --git a/project/sounds/aiy750000120.ogg b/project/sounds/aiy750000120.ogg
new file mode 100644
index 0000000..41d7788
Binary files /dev/null and b/project/sounds/aiy750000120.ogg differ
diff --git a/project/sounds/aiy750000130.ogg b/project/sounds/aiy750000130.ogg
new file mode 100644
index 0000000..161f900
Binary files /dev/null and b/project/sounds/aiy750000130.ogg differ
diff --git a/project/sounds/aiy750000140.ogg b/project/sounds/aiy750000140.ogg
new file mode 100644
index 0000000..fda459c
Binary files /dev/null and b/project/sounds/aiy750000140.ogg differ
diff --git a/project/sounds/aiy750000150.ogg b/project/sounds/aiy750000150.ogg
new file mode 100644
index 0000000..8422fce
Binary files /dev/null and b/project/sounds/aiy750000150.ogg differ
diff --git a/project/sounds/aiy750000160.ogg b/project/sounds/aiy750000160.ogg
new file mode 100644
index 0000000..62f8163
Binary files /dev/null and b/project/sounds/aiy750000160.ogg differ
diff --git a/project/sounds/aiy750000170.ogg b/project/sounds/aiy750000170.ogg
new file mode 100644
index 0000000..b9fe06e
Binary files /dev/null and b/project/sounds/aiy750000170.ogg differ
diff --git a/project/sounds/aiy750000180.ogg b/project/sounds/aiy750000180.ogg
new file mode 100644
index 0000000..b7fb85f
Binary files /dev/null and b/project/sounds/aiy750000180.ogg differ
diff --git a/project/sounds/aiy750000190.ogg b/project/sounds/aiy750000190.ogg
new file mode 100644
index 0000000..1d7b4a8
Binary files /dev/null and b/project/sounds/aiy750000190.ogg differ
diff --git a/project/sounds/aiy750000200.ogg b/project/sounds/aiy750000200.ogg
new file mode 100644
index 0000000..68d41da
Binary files /dev/null and b/project/sounds/aiy750000200.ogg differ
diff --git a/project/sounds/aiy750000210.ogg b/project/sounds/aiy750000210.ogg
new file mode 100644
index 0000000..faf634b
Binary files /dev/null and b/project/sounds/aiy750000210.ogg differ
diff --git a/project/sounds/aiy750000220.ogg b/project/sounds/aiy750000220.ogg
new file mode 100644
index 0000000..1b931cf
Binary files /dev/null and b/project/sounds/aiy750000220.ogg differ
diff --git a/project/sounds/aiy750000230.ogg b/project/sounds/aiy750000230.ogg
new file mode 100644
index 0000000..3c31602
Binary files /dev/null and b/project/sounds/aiy750000230.ogg differ
diff --git a/project/sounds/aiy750000240.ogg b/project/sounds/aiy750000240.ogg
new file mode 100644
index 0000000..ad8501c
Binary files /dev/null and b/project/sounds/aiy750000240.ogg differ
diff --git a/project/sounds/aiy750000250.ogg b/project/sounds/aiy750000250.ogg
new file mode 100644
index 0000000..3ebaffe
Binary files /dev/null and b/project/sounds/aiy750000250.ogg differ
diff --git a/project/sounds/aiy750000260.ogg b/project/sounds/aiy750000260.ogg
new file mode 100644
index 0000000..c45ca4d
Binary files /dev/null and b/project/sounds/aiy750000260.ogg differ
diff --git a/project/sounds/aiy750000270.ogg b/project/sounds/aiy750000270.ogg
new file mode 100644
index 0000000..ad0c25d
Binary files /dev/null and b/project/sounds/aiy750000270.ogg differ
diff --git a/project/sounds/aiy750000280.ogg b/project/sounds/aiy750000280.ogg
new file mode 100644
index 0000000..2b1a3bc
Binary files /dev/null and b/project/sounds/aiy750000280.ogg differ
diff --git a/project/sounds/aiy750000290.ogg b/project/sounds/aiy750000290.ogg
new file mode 100644
index 0000000..11d69ae
Binary files /dev/null and b/project/sounds/aiy750000290.ogg differ
diff --git a/project/sounds/aiy750000300.ogg b/project/sounds/aiy750000300.ogg
new file mode 100644
index 0000000..145e3b3
Binary files /dev/null and b/project/sounds/aiy750000300.ogg differ
diff --git a/project/sounds/aiy750000310.ogg b/project/sounds/aiy750000310.ogg
new file mode 100644
index 0000000..aac984e
Binary files /dev/null and b/project/sounds/aiy750000310.ogg differ
diff --git a/project/sounds/aiy750000320.ogg b/project/sounds/aiy750000320.ogg
new file mode 100644
index 0000000..175ab60
Binary files /dev/null and b/project/sounds/aiy750000320.ogg differ
diff --git a/project/sounds/aiy750000330.ogg b/project/sounds/aiy750000330.ogg
new file mode 100644
index 0000000..dd13862
Binary files /dev/null and b/project/sounds/aiy750000330.ogg differ
diff --git a/project/sounds/aiy750000340.ogg b/project/sounds/aiy750000340.ogg
new file mode 100644
index 0000000..46c6c87
Binary files /dev/null and b/project/sounds/aiy750000340.ogg differ
diff --git a/project/sounds/aiy800000010.ogg b/project/sounds/aiy800000010.ogg
new file mode 100644
index 0000000..f7c1058
Binary files /dev/null and b/project/sounds/aiy800000010.ogg differ
diff --git a/project/sounds/aiy800000020.ogg b/project/sounds/aiy800000020.ogg
new file mode 100644
index 0000000..e5233c7
Binary files /dev/null and b/project/sounds/aiy800000020.ogg differ
diff --git a/project/sounds/aiy800000030.ogg b/project/sounds/aiy800000030.ogg
new file mode 100644
index 0000000..4b9d26c
Binary files /dev/null and b/project/sounds/aiy800000030.ogg differ
diff --git a/project/sounds/aiy800000040.ogg b/project/sounds/aiy800000040.ogg
new file mode 100644
index 0000000..64cca36
Binary files /dev/null and b/project/sounds/aiy800000040.ogg differ
diff --git a/project/sounds/aiy800000050.ogg b/project/sounds/aiy800000050.ogg
new file mode 100644
index 0000000..20c4b22
Binary files /dev/null and b/project/sounds/aiy800000050.ogg differ
diff --git a/project/sounds/aiy800000060.ogg b/project/sounds/aiy800000060.ogg
new file mode 100644
index 0000000..baf6f0a
Binary files /dev/null and b/project/sounds/aiy800000060.ogg differ
diff --git a/project/sounds/aiy800000070.ogg b/project/sounds/aiy800000070.ogg
new file mode 100644
index 0000000..09b6793
Binary files /dev/null and b/project/sounds/aiy800000070.ogg differ
diff --git a/project/sounds/aiy800000080.ogg b/project/sounds/aiy800000080.ogg
new file mode 100644
index 0000000..42f1925
Binary files /dev/null and b/project/sounds/aiy800000080.ogg differ
diff --git a/project/sounds/aiy800000090.ogg b/project/sounds/aiy800000090.ogg
new file mode 100644
index 0000000..0d1df0d
Binary files /dev/null and b/project/sounds/aiy800000090.ogg differ
diff --git a/project/sounds/aiy800000100.ogg b/project/sounds/aiy800000100.ogg
new file mode 100644
index 0000000..6f1ecbc
Binary files /dev/null and b/project/sounds/aiy800000100.ogg differ
diff --git a/project/sounds/aiy810000010.ogg b/project/sounds/aiy810000010.ogg
new file mode 100644
index 0000000..141c976
Binary files /dev/null and b/project/sounds/aiy810000010.ogg differ
diff --git a/project/sounds/aiy810000020.ogg b/project/sounds/aiy810000020.ogg
new file mode 100644
index 0000000..f755114
Binary files /dev/null and b/project/sounds/aiy810000020.ogg differ
diff --git a/project/sounds/aiy810000030.ogg b/project/sounds/aiy810000030.ogg
new file mode 100644
index 0000000..ece7da3
Binary files /dev/null and b/project/sounds/aiy810000030.ogg differ
diff --git a/project/sounds/aiy810000040.ogg b/project/sounds/aiy810000040.ogg
new file mode 100644
index 0000000..d600ea7
Binary files /dev/null and b/project/sounds/aiy810000040.ogg differ
diff --git a/project/sounds/aiy810000050.ogg b/project/sounds/aiy810000050.ogg
new file mode 100644
index 0000000..b3975f8
Binary files /dev/null and b/project/sounds/aiy810000050.ogg differ
diff --git a/project/sounds/aiy810000060.ogg b/project/sounds/aiy810000060.ogg
new file mode 100644
index 0000000..f6cf315
Binary files /dev/null and b/project/sounds/aiy810000060.ogg differ
diff --git a/project/sounds/aiy810000070.ogg b/project/sounds/aiy810000070.ogg
new file mode 100644
index 0000000..0944056
Binary files /dev/null and b/project/sounds/aiy810000070.ogg differ
diff --git a/project/sounds/aiy860000010.ogg b/project/sounds/aiy860000010.ogg
new file mode 100644
index 0000000..d6ffe53
Binary files /dev/null and b/project/sounds/aiy860000010.ogg differ
diff --git a/project/sounds/aiy860000020.ogg b/project/sounds/aiy860000020.ogg
new file mode 100644
index 0000000..8157a6f
Binary files /dev/null and b/project/sounds/aiy860000020.ogg differ
diff --git a/project/sounds/aiy860000030.ogg b/project/sounds/aiy860000030.ogg
new file mode 100644
index 0000000..f428615
Binary files /dev/null and b/project/sounds/aiy860000030.ogg differ
diff --git a/project/sounds/aiy860000040.ogg b/project/sounds/aiy860000040.ogg
new file mode 100644
index 0000000..cd1a1eb
Binary files /dev/null and b/project/sounds/aiy860000040.ogg differ
diff --git a/project/sounds/aiy860000050.ogg b/project/sounds/aiy860000050.ogg
new file mode 100644
index 0000000..e0cf702
Binary files /dev/null and b/project/sounds/aiy860000050.ogg differ
diff --git a/project/sounds/aiy860000060.ogg b/project/sounds/aiy860000060.ogg
new file mode 100644
index 0000000..c540697
Binary files /dev/null and b/project/sounds/aiy860000060.ogg differ
diff --git a/styles.css b/styles.css
index e300825..139471b 100644
--- a/styles.css
+++ b/styles.css
@@ -583,3 +583,36 @@ p#name {
transition: transform 1.5s ease-out;
-webkit-transition: transform 1.5s ease-out;
}
+/* ====== 新增加载界面样式 ====== */
+@media screen and (max-width: 600px) {
+ .loading-slide {
+ width: 100%
+ }
+}
+#startTopGallery {
+ position: absolute;
+ width: 85%;
+ height: 85%;
+ top: 10%;
+ left:7.5%;
+ perspective: 1000px;
+}
+
+.loading-slide {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ background-size: cover;
+ background-position: center;
+ opacity: 0;
+ object-fit: contain;
+ transform: translateX(100%) rotateY(30deg);
+ transition: all 1s cubic-bezier(0.4, 0, 0.2, 1);
+ border-radius: 10px;
+ box-shadow: 0 8px 20px rgba(0,0,0,0.4);
+}
+
+.loading-slide.active {
+ opacity: 1;
+ transform: translateX(0) rotateY(0);
+}