Compare commits

..

21 Commits

Author SHA1 Message Date
bb41bad059 Merge branch 'status-itcfangye' into story-laodeng 2025-01-27 00:13:47 +08:00
4609a85797 backlog制作完毕,cgText重构 2025-01-27 00:07:59 +08:00
4936449f67 winskin增加缩放倍率,楼传修复,部分战斗动画 2025-01-25 22:25:57 +08:00
1eec945d93 Merge branch 'story' into status-itcfangye 2025-01-24 21:50:12 +08:00
d5fde8eaca git屏蔽_save和config.json改动记录 2025-01-24 19:25:13 +08:00
6c4515a3ef _save和config.json移除git列表 2025-01-24 19:21:50 +08:00
089956431f 字体修改 2025-01-24 19:18:55 +08:00
13f3a69173 捕获点击 2025-01-24 00:05:25 +08:00
df22828641 修复music隐藏列表 2025-01-23 23:59:06 +08:00
4ef2280dc1 gitgnore 2025-01-23 23:53:30 +08:00
egamerainy1022
a10e4018b4 BUG二次修复 2025-01-23 23:50:40 +08:00
d36f936f6f 修复music bug 2025-01-23 22:53:29 +08:00
f2c4d83671 默认第一手显示 2025-01-23 22:30:25 +08:00
83dfd91c2a 事件描述 2025-01-23 22:28:35 +08:00
e7413191f9 更改事件颜色 2025-01-23 22:27:02 +08:00
38979d5040 隐藏歌单 2025-01-23 22:25:18 +08:00
c1263db1af Merge branch 'story' of https://gitea.mota.press/Dove/Eustia into story 2025-01-23 21:47:03 +08:00
c5c1e12d8b 音乐拼接等 2025-01-23 21:46:59 +08:00
egamerainy1022
6ba9415c32 补充剧情音乐 2025-01-23 21:10:20 +08:00
b3da61870c Merge branch 'main' into status-itcfangye 2025-01-22 16:25:05 +08:00
24807dffe0 getDamageInfo+getEnemyInfo 2025-01-12 21:32:54 +08:00
28 changed files with 15269 additions and 12027 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
_saves/
_server/config.json

View File

@ -1 +0,0 @@
1

View File

@ -1 +0,0 @@
N4IgZgNg9lBOCSATEAuEBnALrApjzADAIwgA0IAFjrFKqAJYC2AhgOY6qXVQB0A7jgBGABzIhmAOybNMHFGGYR0OchOaM5IAMLMmYiADdURchWEsAHqgCct66dEoiBF+RZrLqALQmQ75qgE5DIA1sauIIg4YOFBflExKHHownjISW5QEjgAnoHkOBaOcTgAjgCu9OY4EpioANoAuuT0sozodCAAxllYkpgdKKCCMGFO5JB5TgC+5JgwSnSzIGWVwoOg6HxwiCQzy9BdnYj0uF2Y9Fmc5aLkVigArORTzsuQbBsgrTiMACL4uggqGw5RUIHKygAQvgBDUADL0VgUOooEFggD66OUOEQmOMAHYAGwEawADgATOSACxxTGwSS49EE4lkyk04K4ZiDeqgDyaAA65SpOAIgkFDy6VPJYhY6wa2l0jAoUA0IEas156gFQpFYvKEqlMuYcpQ9RAACt6OVWOVJGqNSA+ZxBcLReLJdK3MbuSAANIAFQAavbSJrVWhBfjyYTyZHyWASF6TWaA4GAGLS9Whx1a53lKMxuMJo3JkCsKAQRAhXIhsPa116g2evze+WCegUCHlWhZut513Md2GpM+y3MKCYSSsWs58MgF0iwf6j0ln3oKgSVgSAzK1W92f1xdD5uytcUejb3ccfdOiP56Ox+/Fkfyy048cz2/z++Fp+JlullguD4MQYhAXghDNjaU5dBQU5iNBm6wVOzYWPQ45oVOoF3OhUCYZuBCobh+GsAAzJ+uYoBI5QQBAL6miAOT0BUJA3pR1G0fRZpMRUmYOreHF0QBPo8eU5FseGglcYxzFChRkk0UJp7yqJDzyXIUnCSpsmEupqCacpDGifielUYp0miaSpkGa2RmydY1nmVpdksQQ9rNBgIRVKgChKGCcGwOktLogFiBaBWcB4mguDIOQmLfIwAASF6YFFTRxeiEA4MwBg4HCUBdFFwDLJiBj0Og3yMp04EgXsaLLIIMJ4BIACCmCTl0IS/DIARmZxICYswOD0GlHmYic6DMIIWVVUMGDYBBoGmvURCkQ8zRNOqbwVtAAiwNyHlYDgJq+H0FxYPQXSfPMk4QP6TByOSDxEEQUpRjwhJ2C91hPN05SwLA93hkQDxUtYPCkXYUNQ4SDj5CAggyJgWXw4wWQ1hkKxFPDiPtVl3UsOw8PCFA5VZATbByCUFjYMwFNE5jaO5b8pw4OcEBTHEiISHAOAAMqyCaySTrAKKElSDykTwVLTMsoWcKu1ULbVnSyg0QQa6Qmva1ruv1D4pAG0bJgG0ExuGyblsWxbzQa1t5A0OUsicL6UAZloVKsAAvGIBiKKCGzLLl+2XBIebWDgpGIOKggPAQkbMNY0flNYhHx/qpKg+6BBgIK1iEkQMTkDa9DpCA5LMIghKEog1iFYgYBgFS6JUqSifooIVKEmA6JgIgU0EDgNJV3gYgXMD+KkficfWKRBBSi40xAA==

View File

@ -854,6 +854,8 @@ action
| waitAsync_s | waitAsync_s
| stopAsync_s | stopAsync_s
| op_s | op_s
| setmusics_s
| introAndLoop_s
| battle_s | battle_s
| battle_1_s | battle_1_s
| openDoor_s | openDoor_s
@ -963,8 +965,7 @@ action
| animationDrawable_s | animationDrawable_s
| over_s | over_s
| overlist_s | overlist_s
| playStereo_s | cgtextList_s
| moveStereo_s
| pass_s | pass_s
; ;
@ -1123,22 +1124,33 @@ overtextEmpty
var code = []; var code = [];
return code; return code;
*/; */;
cgtextList_s
: '切换剧情文本库' EvalString Newline
/* cgtextList_s
tooltip : cgtextList设置cg剧情文本库
helpUrl : /_docs/#/instruction
default : ["chapter0"]
var code = '{"type": "cgtextList", "textList":"'+EvalString_0+'"},\n';
return code;
*/;
cgtext_s cgtext_s
: '背景' EvalString? '回忆滤镜' Bool? '移除对话框' Bool? '头像' EvalString?'名字' EvalString?'坐标PX' Number'打字间隔' Int? BGNL? Newline : '背景' EvalString? '回忆滤镜' Bool? '移除对话框' Bool? '剧情库序列' Int '头像' EvalString?'坐标PX' Number'打字间隔' Int? BGNL? Newline
'自动等待时长' Int '音频文件(需在全塔属性——使用音效注册)'EvalString? BGNL? Newline '自动等待时长' Int '音频文件(需在全塔属性——使用音效注册)'EvalString? BGNL? Newline
EvalString? BGNL? Newline textcgDrawingList+? Newline textcgDrawingList+? Newline
/* cgtext_s /* cgtext_s
tooltip : cgtext显示一段包含cg的文字剧情 tooltip : cgtext显示一段包含cg的文字剧情
helpUrl : /_docs/#/instruction helpUrl : /_docs/#/instruction
allImages : ['EvalString_0','EvalString_1'] allImages : ['EvalString_0','EvalString_1']
allSounds : ['EvalString_3'] allSounds : ['EvalString_2']
default : ["bg_5043.webp",false,"face_050445.webp",false,"菲奥奈",-300,0,2000,"","这句话显示在对话框内",[{ "name":"tati_050145a.webp" , "px": 100,"filter":false }]] default : ["bg_5043.webp",false,false,0,"face_050445.webp",-300,0,2000,"","这句话显示在对话框内",[{ "name":"tati_050145a.webp" , "px": 100,"filter":false }]]
var head ='{ "name": "'+EvalString_1+'", "px": '+Number_0+' }' var head ='{ "name": "'+EvalString_1+'", "px": '+Number_0+' }'
var list=',"bodyList": [\n'+textcgDrawingList_0.slice(0,-1)+'\n]' var list=',"bodyList": [\n'+textcgDrawingList_0.slice(0,-1)+'\n]'
var code = '{"type": "cgtext", "bg":"'+EvalString_0+'","memory":'+Bool_0+',"WindowSkin":'+Bool_1+',"head":'+head+' ,"name":"'+EvalString_2+'","time":'+Int_0+',"wait":'+Int_1+',"sound":"'+EvalString_3+'","text": "'+EvalString_4+'"'+list+' },\n'; var code = '{"type": "cgtext", "bg":"'+EvalString_0+'","memory":'+Bool_0+',"WindowSkin":'+Bool_1+',"head":'+head+' ,"index":"'+Int_0+'","time":'+Int_1+',"wait":'+Int_2+',"sound":"'+EvalString_2+'"'+list+' },\n';
return code; return code;
*/; */;
textcgDrawingList textcgDrawingList
@ -2612,6 +2624,23 @@ var code = '{"type": "setq"'+IdString_0+'},\n';
return code; return code;
*/; */;
introAndLoop_s
: '前奏音乐文件'EvalString? '前奏音乐文件播放时长(可填小数,单位为秒)'EvalString'循环音乐文件'EvalString? Newline
/* introAndLoop_s
tooltip : introAndLoop设置任务目标楼层显示在小地图
helpUrl : /_docs/#/instruction
default : ["",1,""]
allBgms : ['EvalString_0','EvalString_2']
colour :this.imageColor
if(EvalString_1&&!/^(0|([1-9][0-9]*))(\.[\d]+)?$/.test(EvalString_1))throw new Error("此项仅能填写小数或整数,单位为秒");
EvalString_0 = EvalString_0 ? (', "intro": "'+EvalString_0+'"') : '';
EvalString_1= EvalString_1 ? (', "time": '+EvalString_1+'') : '';
EvalString_2 = EvalString_2 ? (', "loop": "'+EvalString_2+'"') : '';
var code = '{"type": "introAndLoop"'+EvalString_0+EvalString_1+EvalString_2+'},\n';
return code;
*/;
setcgs_s setcgs_s
: 'cg回廊获取cg 文件名'EvalString?'不填为清空cg获取记录' Newline : 'cg回廊获取cg 文件名'EvalString?'不填为清空cg获取记录' Newline
@ -2621,12 +2650,26 @@ tooltip : setcgscg回廊中的cg获取
helpUrl : /_docs/#/instruction helpUrl : /_docs/#/instruction
default : [""] default : [""]
allImages : ['EvalString_0'] allImages : ['EvalString_0']
colour : this.imageColor colour : this.soundColor
EvalString_0 = EvalString_0 ? (', "img": "'+EvalString_0+'"') : ''; EvalString_0 = EvalString_0 ? (', "img": "'+EvalString_0+'"') : '';
var code = '{"type": "setcgs"'+EvalString_0+'},\n'; var code = '{"type": "setcgs"'+EvalString_0+'},\n';
return code; return code;
*/; */;
setmusics_s
: '音乐鉴赏music 文件名'EvalString?'不填为清空music获取记录' Newline
/* setmusics_s
tooltip : setmusics音乐鉴赏中的隐藏music获取
helpUrl : /_docs/#/instruction
default : [""]
allBgms : ['EvalString_0']
colour : this.soundColor
EvalString_0 = EvalString_0 ? (', "bgm": "'+EvalString_0+'"') : '';
var code = '{"type": "setmusics"'+EvalString_0+'},\n';
return code;
*/;
scaleImage_s scaleImage_s
: '图片放缩' '图片编号' NInt '中心点像素' 'x' PosString? 'y' PosString? '移动方式' MoveMode_List BGNL? '放缩比例' Number '动画时间' Int '不等待执行完毕' Bool Newline : '图片放缩' '图片编号' NInt '中心点像素' 'x' PosString? 'y' PosString? '移动方式' MoveMode_List BGNL? '放缩比例' Number '动画时间' Int '不等待执行完毕' Bool Newline
@ -3045,38 +3088,7 @@ var code = '{"type": "playSound", "name": "'+EvalString_0+'"'+Bool_0+IntString_0
return code; return code;
*/; */;
playStereo_s
: '播放音效(立体音)' EvalString '左声道音量' Int '右声道音量' Int '启用立体音' Bool? Newline
/* playStereo_s
tooltip : playSound: 播放音效(立体音)
helpUrl : /_docs/#/instruction
default : ["item.mp3",1,1,true]
colour : this.imageColor
allSounds : ['EvalString_0']
material : ["./project/sounds/", "EvalString_0"]
var code = '{"type": "playStereo", "name": "'+EvalString_0+'", "left": '+Int_0+', "right": '+Int_1+', "split": '+Bool_0+'},\n';
return code;
*/;
moveStereo_s
: '播放渐变音效(立体音)' EvalString '左声道音量' Int '右声道音量' Int '启用立体音' Bool? BGNL? Newline
'左声道目标音量' Int '右声道目标音量' Int '渐变时长'Int Newline
/* moveStereo_s
tooltip : playSound: 播放渐变音效(立体音)
helpUrl : /_docs/#/instruction
default : ["item.mp3",1,1,true,10,10,1000]
colour : this.imageColor
allSounds : ['EvalString_0']
material : ["./project/sounds/", "EvalString_0"]
var code = '{"type": "moveStereo", "name": "'+EvalString_0+'", "left": '+Int_0+', "right": '+Int_1+', "split": '+Bool_0+', "leftTo": '+Int_2+', "rightTo": '+Int_3+', "time": '+Int_4+'},\n';
return code;
*/;
playSound_1_s playSound_1_s
: '播放系统音效' NameMap_List '停止之前音效' Bool? '音调' IntString? '等待播放完毕' Bool? Newline : '播放系统音效' NameMap_List '停止之前音效' Bool? '音调' IntString? '等待播放完毕' Bool? Newline

View File

@ -542,6 +542,12 @@ MotaActionParser = function () {
); );
} }
break; break;
case "cgtextList":
this.next = MotaActionBlocks["cgtextList_s"].xmlText([
data.textList,
this.next,
]);
break;
case "cgtext": // cg对话框 case "cgtext": // cg对话框
var buildcgDrawing = function (obj) { var buildcgDrawing = function (obj) {
obj = MotaActionFunctions.processcgDrawing(obj || []); obj = MotaActionFunctions.processcgDrawing(obj || []);
@ -563,13 +569,12 @@ MotaActionParser = function () {
data.bg, data.bg,
data.memory, data.memory,
data.WindowSkin, data.WindowSkin,
data.index,
data.head.name, data.head.name,
data.name || "",
data.head.px || -300, data.head.px || -300,
data.time, data.time,
data.wait, data.wait,
data.sound, data.sound,
data.text,
buildcgDrawing(data.bodyList), buildcgDrawing(data.bodyList),
this.next, this.next,
]); ]);
@ -620,6 +625,20 @@ MotaActionParser = function () {
case "setcgs": case "setcgs":
this.next = MotaActionBlocks["setcgs_s"].xmlText([data.img, this.next]); this.next = MotaActionBlocks["setcgs_s"].xmlText([data.img, this.next]);
break; break;
case "setmusics":
this.next = MotaActionBlocks["setmusics_s"].xmlText([
data.bgm,
this.next,
]);
break;
case "introAndLoop":
this.next = MotaActionBlocks["introAndLoop_s"].xmlText([
data.intro,
data.time,
data.loop,
this.next,
]);
break;
case "comment": // 注释 case "comment": // 注释
this.next = MotaActionBlocks["comment_s"].xmlText([ this.next = MotaActionBlocks["comment_s"].xmlText([
this.EvalString_Multi(data.text), this.EvalString_Multi(data.text),
@ -1506,27 +1525,6 @@ MotaActionParser = function () {
]); ]);
} }
break; break;
case "playStereo":
this.next = MotaActionBlocks["playStereo_s"].xmlText([
data.name,
data.left,
data.right,
data.split || true,
this.next,
]);
break;
case "moveStereo":
this.next = MotaActionBlocks["moveStereo_s"].xmlText([
data.name,
data.left,
data.right,
data.split || true,
data.leftTo,
data.rightTo,
data.time,
this.next,
]);
break;
case "playSound": case "playSound":
var knownItems = MotaActionBlocks["NameMap_List"].options.map(function ( var knownItems = MotaActionBlocks["NameMap_List"].options.map(function (
one one

View File

@ -1 +0,0 @@
{ "viewportLoc": [0, 0], "editorLastFloorId": "jiedao" }

View File

@ -389,7 +389,7 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
} }
} }
}, },
"enemys_template": { 'name': '新敌人', 'hp': 0, 'atk': 0, 'def': 0, 'money': 0, 'exp': 0, 'point': 0, 'special': [] }, "enemys_template": { 'name': '新敌人', 'hp': 0, 'atk': 0, 'def': 0, 'mdef': 0, 'speed': 0, 'money': 0, 'exp': 0, 'point': 0, 'special': [] },
// --------------------------- 【图块属性】相关的表格配置 --------------------------- // // --------------------------- 【图块属性】相关的表格配置 --------------------------- //

View File

@ -122,6 +122,12 @@ var plugins_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
"_type": "textarea", "_type": "textarea",
"_range": "typeof(thiseval)=='string' || thiseval==null", "_range": "typeof(thiseval)=='string' || thiseval==null",
"_data": "音乐鉴赏" "_data": "音乐鉴赏"
},
"intro&loop": {
"_leaf": true,
"_type": "textarea",
"_range": "typeof(thiseval)=='string' || thiseval==null",
"_data": "背景音乐拼接"
} }
} }
if (obj[key]) return obj[key]; if (obj[key]) return obj[key];

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -492,7 +492,6 @@ main.prototype.selectButton = function (index) {
main.prototype.importFonts = function (fonts) { main.prototype.importFonts = function (fonts) {
if (!(fonts instanceof Array) || fonts.length == 0) return; if (!(fonts instanceof Array) || fonts.length == 0) return;
var style = document.createElement("style"); var style = document.createElement("style");
style.type = "text/css";
var html = ""; var html = "";
fonts.forEach(function (font) { fonts.forEach(function (font) {
html += html +=
@ -910,7 +909,7 @@ main.prototype.listen = function () {
////// 点击“开始游戏”时 ////// ////// 点击“开始游戏”时 //////
main.dom.playGame.onclick = function () { main.dom.playGame.onclick = function () {
main.dom.startButtons.style.display = "none"; main.dom.startButtons.style.display = "none";
main.core.control.checkBgm(); main.core.checkBgm();
if (main.levelChoose.length == 0) { if (main.levelChoose.length == 0) {
core.events.startGame(""); core.events.startGame("");
@ -923,13 +922,13 @@ main.prototype.listen = function () {
////// 点击“载入游戏”时 ////// ////// 点击“载入游戏”时 //////
main.dom.loadGame.onclick = function () { main.dom.loadGame.onclick = function () {
main.core.control.checkBgm(); main.core.checkBgm();
main.core.load(); main.core.load();
}; };
////// 点击“录像回放”时 ////// ////// 点击“录像回放”时 //////
main.dom.replayGame.onclick = function () { main.dom.replayGame.onclick = function () {
main.core.control.checkBgm(); main.core.checkBgm();
main.core.chooseReplayFile(); main.core.chooseReplayFile();
}; };

BIN
project/bgms/Ascension.opus Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
project/bgms/Halbmond.opus Normal file

Binary file not shown.

BIN
project/bgms/ed.opus Normal file

Binary file not shown.

Binary file not shown.

View File

@ -897,9 +897,13 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"zone" "zone"
], ],
"bgms": [ "bgms": [
"Ascension.opus",
"Asphodelus_Ceui.opus", "Asphodelus_Ceui.opus",
"Blind_Alley.opus", "Blind_Alley.opus",
"Blood_Stain.opus",
"Crawler.opus", "Crawler.opus",
"Halbmond.opus",
"ed.opus",
"op.opus", "op.opus",
"theme.opus" "theme.opus"
], ],
@ -994,7 +998,6 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"aiy820000010.opus", "aiy820000010.opus",
"aiy820000020.opus", "aiy820000020.opus",
"attack.opus", "attack.opus",
"attack.opus",
"bomb.opus", "bomb.opus",
"cancel.opus", "cancel.opus",
"centerFly.opus", "centerFly.opus",
@ -1019,6 +1022,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
], ],
"fonts": [ "fonts": [
"HATTEN", "HATTEN",
"Verdana",
"number", "number",
"pala", "pala",
"simhei" "simhei"
@ -1441,7 +1445,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
}, },
{ {
"type": "function", "type": "function",
"function": "function(){\ncore.control.checkBgm()\n}" "function": "function(){\ncore.checkBgm()\n}"
}, },
{ {
"type": "if", "type": "if",
@ -1489,6 +1493,10 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"type": "setValue", "type": "setValue",
"name": "item:fly", "name": "item:fly",
"value": "1" "value": "1"
},
{
"type": "insert",
"name": "强制横屏"
} }
], ],
"shops": [ "shops": [

View File

@ -1,7 +1,7 @@
var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 = var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 =
{ {
"greenSlime": {"name":"绿头怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, "greenSlime": {"name":"绿头怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"magic":false},
"redSlime": {"name":"红头怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[],"value":10}, "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}, "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]}, "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]}, "bat": {"name":"小蝙蝠","hp":100,"atk":120,"def":0,"money":2,"exp":0,"point":0,"special":[1]},

File diff suppressed because it is too large Load Diff

View File

@ -26,58 +26,31 @@ main.floors.street01=
"direction": "up" "direction": "up"
} }
], ],
"10,11": [
{
"type": "setmusics",
"bgm": "op.opus"
}
],
"10,10": [
{
"type": "setmusics",
"bgm": "ed.opus"
},
{
"type": "setmusics",
"bgm": "Asphodelus_Ceui.opus"
}
],
"10,9": [
{
"type": "setmusics"
}
],
"6,11": [ "6,11": [
{ {
"type": "insert", "type": "insert",
"name": "chapter04" "name": "chapter01"
}
],
"4,11": [
{
"type": "animationDrawable",
"allFarme": 300,
"color": [
0,
0,
0
],
"imageList": [
{
"image": "bg_1511.webp",
"beforefarme": 50,
"globalAlpha": 0,
"afterfarme": 250,
"aglobalAlpha": 100
},
{
"image": "eve_010304.webp",
"beforefarme": 70,
"globalAlpha": 0,
"afterfarme": 170,
"aglobalAlpha": 100,
"ax": 0,
"ay": 0
},
{
"image": "eve_010304.webp",
"beforefarme": 171,
"globalAlpha": 100,
"afterfarme": 270,
"aglobalAlpha": 100,
"ax": 800,
"ay": 0
}
],
"soundList": [
{
"sound": "",
"startfarme": 0,
"stopbefore": false
}
]
},
{
"type": "op"
} }
] ]
}, },

BIN
project/fonts/Verdana.ttf Normal file

Binary file not shown.

View File

@ -94,73 +94,73 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
}) })
}, },
"changingFloor": function (floorId, heroLoc) { "changingFloor": function (floorId, heroLoc) {
// 正在切换楼层过程中执行的操作;此函数的执行时间是“屏幕完全变黑“的那一刻 // 正在切换楼层过程中执行的操作;此函数的执行时间是“屏幕完全变黑“的那一刻
// floorId为要切换到的楼层IDheroLoc表示勇士切换到的位置 // floorId为要切换到的楼层IDheroLoc表示勇士切换到的位置
// ---------- 此时还没有进行切换当前floorId还是原来的 ---------- // // ---------- 此时还没有进行切换当前floorId还是原来的 ---------- //
var currentId = core.status.floorId || null; // 获得当前的floorId可能为null var currentId = core.status.floorId || null; // 获得当前的floorId可能为null
var fromLoad = core.hasFlag('__fromLoad__'); // 是否是读档造成的切换 var fromLoad = core.hasFlag('__fromLoad__'); // 是否是读档造成的切换
var isFlying = core.hasFlag('__isFlying__'); // 是否是楼传造成的切换 var isFlying = core.hasFlag('__isFlying__'); // 是否是楼传造成的切换
if (!fromLoad && !(isFlying && currentId == floorId)) { if (!fromLoad && !(isFlying && currentId == floorId)) {
if (!core.hasFlag("__leaveLoc__")) core.setFlag("__leaveLoc__", {}); if (!core.hasFlag("__leaveLoc__")) core.setFlag("__leaveLoc__", {});
if (currentId != null) core.getFlag("__leaveLoc__")[currentId] = core.clone(core.status.hero.loc); if (currentId != null) core.getFlag("__leaveLoc__")[currentId] = core.clone(core.status.hero.loc);
}
// 可以对currentId进行判定比如删除某些自定义图层等
// if (currentId == 'MT0') {
// core.deleteAllCanvas();
// }
// 根据分区信息自动砍层与恢复
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();
}
// 可以对currentId进行判定比如删除某些自定义图层等 // ---------- 重绘新地图这一步将会设置core.status.floorId ---------- //
// if (currentId == 'MT0') { core.drawMap(floorId);
// core.deleteAllCanvas();
// }
// 根据分区信息自动砍层与恢复 // 切换楼层BGM
if (core.autoRemoveMaps) core.autoRemoveMaps(floorId); 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();
// 重置画布尺寸 // ...可以新增一些其他内容,比如创建个画布在右上角显示什么内容等等
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);
// 切换楼层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) { "afterChangeFloor": function (floorId) {
// 转换楼层结束的事件;此函数会在整个楼层切换完全结束后再执行 // 转换楼层结束的事件;此函数会在整个楼层切换完全结束后再执行
// floorId是切换到的楼层 // floorId是切换到的楼层
@ -531,15 +531,21 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
var hero_hp = core.getRealStatusOrDefault(hero, 'hp'), var hero_hp = core.getRealStatusOrDefault(hero, 'hp'),
hero_atk = core.getRealStatusOrDefault(hero, 'atk'), hero_atk = core.getRealStatusOrDefault(hero, 'atk'),
hero_def = core.getRealStatusOrDefault(hero, 'def'), hero_def = core.getRealStatusOrDefault(hero, 'def'),
hero_mdef = core.getRealStatusOrDefault(hero, 'mdef'); hero_mdef = core.getRealStatusOrDefault(hero, 'mdef'),
hero_speed = core.getRealStatusOrDefault(hero, 'speed');
var mon_hp = core.getEnemyValue(enemy, 'hp', x, y, floorId), var mon_hp = core.getEnemyValue(enemy, 'hp', x, y, floorId),
mon_atk = core.getEnemyValue(enemy, 'atk', x, y, floorId), mon_atk = core.getEnemyValue(enemy, 'atk', x, y, floorId),
mon_def = core.getEnemyValue(enemy, 'def', 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_special = core.getEnemyValue(enemy, 'special', x, y, floorId); mon_special = core.getEnemyValue(enemy, 'special', x, y, floorId);
var mon_money = core.getEnemyValue(enemy, 'money', x, y, floorId), var mon_money = core.getEnemyValue(enemy, 'money', x, y, floorId),
mon_exp = core.getEnemyValue(enemy, 'exp', x, y, floorId), mon_exp = core.getEnemyValue(enemy, 'exp', x, y, floorId),
mon_point = core.getEnemyValue(enemy, 'point', 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);
// 模仿 // 模仿
if (core.hasSpecial(mon_special, 10)) { if (core.hasSpecial(mon_special, 10)) {
mon_atk = hero_atk; mon_atk = hero_atk;
@ -633,10 +639,15 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
"hp": Math.floor(mon_hp), "hp": Math.floor(mon_hp),
"atk": Math.floor(mon_atk), "atk": Math.floor(mon_atk),
"def": Math.floor(mon_def), "def": Math.floor(mon_def),
"mdef": Math.floor(mon_mdef),
"speed": Math.floor(mon_speed),
"barrier": Math.floor(mon_barrier),
"absorb": Math.floor(mon_absorb_damage),
"money": Math.floor(mon_money), "money": Math.floor(mon_money),
"exp": Math.floor(mon_exp), "exp": Math.floor(mon_exp),
"point": Math.floor(mon_point), "point": Math.floor(mon_point),
"special": mon_special, "special": mon_special,
"magic": mon_magic,
"guards": guards, // 返回支援情况 "guards": guards, // 返回支援情况
}; };
}, },
@ -655,15 +666,13 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
hero_atk = core.getRealStatusOrDefault(hero, 'atk'), hero_atk = core.getRealStatusOrDefault(hero, 'atk'),
hero_def = core.getRealStatusOrDefault(hero, 'def'), hero_def = core.getRealStatusOrDefault(hero, 'def'),
hero_mdef = core.getRealStatusOrDefault(hero, 'mdef'), hero_mdef = core.getRealStatusOrDefault(hero, 'mdef'),
hero_speed = core.getRealStatusOrDefault(hero, 'speed'),
hero_magic = core.getRealStatusOrDefault(hero, 'magic'),
origin_hero_hp = core.getStatusOrDefault(hero, 'hp'), origin_hero_hp = core.getStatusOrDefault(hero, 'hp'),
origin_hero_atk = core.getStatusOrDefault(hero, 'atk'), origin_hero_atk = core.getStatusOrDefault(hero, 'atk'),
origin_hero_def = core.getStatusOrDefault(hero, 'def'); origin_hero_def = core.getStatusOrDefault(hero, 'def');
// 勇士的负属性都按0计算
hero_hp = Math.max(0, hero_hp);
hero_atk = Math.max(0, hero_atk);
hero_def = Math.max(0, hero_def);
hero_mdef = Math.max(0, hero_mdef);
// 怪物的各项数据 // 怪物的各项数据
// 对坚固模仿等处理扔到了脚本编辑-getEnemyInfo之中 // 对坚固模仿等处理扔到了脚本编辑-getEnemyInfo之中
@ -671,23 +680,34 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
var mon_hp = enemyInfo.hp, var mon_hp = enemyInfo.hp,
mon_atk = enemyInfo.atk, mon_atk = enemyInfo.atk,
mon_def = enemyInfo.def, mon_def = enemyInfo.def,
mon_special = enemyInfo.special; mon_mdef = enemyInfo.mdef,
mon_speed = enemyInfo.speed,
mon_special = enemyInfo.special,
mon_absorb_damage = enemyInfo.absorb,
mon_barrier = enemyInfo.barrier;
//---第一部分:静态属性修正---
//此处写入静态影响勇士属性的勇士或怪物技能静态影响怪物属性的技能于getEnemyInfo中写入
// 技能的处理 // 技能的处理
if (core.getFlag('skill', 0) == 1) { // 开启了技能1二倍斩 if (core.getFlag('skill', 0) == 1) { // 开启了技能1二倍斩
hero_atk *= 2; // 计算时攻击力翻倍 hero_atk *= 2; // 计算时攻击力翻倍
} }
//勇士属性取整
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));
// 如果是无敌属性,且勇士未持有十字架 // 如果是无敌属性,且勇士未持有十字架
if (core.hasSpecial(mon_special, 20) && !core.hasItem("cross")) if (core.hasSpecial(mon_special, 20) && !core.hasItem("cross"))
return null; // 不可战斗 return null; // 不可战斗
// 战前造成的额外伤害(可被护盾抵消) // 战前造成的额外伤害(可被护盾抵消)
var init_damage = 0; let init_damage = 0;
// 吸血 // 吸血
if (core.hasSpecial(mon_special, 11)) { if (core.hasSpecial(mon_special, 11)) {
var vampire_damage = hero_hp * enemy.vampire; let vampire_damage = hero_hp * enemy.vampire;
// 如果有神圣盾免疫吸血等可以在这里写 // 如果有神圣盾免疫吸血等可以在这里写
// 也可以用hasItem和hasEquip来判定装备 // 也可以用hasItem和hasEquip来判定装备
@ -701,17 +721,60 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
init_damage += vampire_damage; init_damage += vampire_damage;
} }
//——第二部分:变量定义和初始赋值——
// 每回合怪物对勇士造成的战斗伤害 // 每回合怪物对勇士造成的战斗伤害
var per_damage = mon_atk - hero_def; let per_damage = Math.max(mon_atk - hero_def, 0);
if (enemyInfo.magic) per_damage = Math.max(mon_atk - hero_mdef, 0);
// 战斗伤害不能为负值 //
if (per_damage < 0) per_damage = 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 damage = 0,
hero_turn = 0,
mon_turn = 0;
//---第三部分:递归开始---
let length = hero_speed * mon_speed;
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;) { //勇士和怪物的长度
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))) { //怪物攻击的回合
//这里计算怪物攻击时发生的各种变化
//伤害与回合增加
damage += per_damage;
if (core.hasSpecial(mon_special, 6)) {
mon_turn += enemy.n;
} else {
mon_turn += 1;
}
//重新为长度赋值
mon_length = length;
hero_length = hero_length - mon_time * hero_speed;
} else { //勇士攻击的回合
// 这里计算勇士攻击时发生的各种变化
// 伤害与回合数增加
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;
}
}
//下面这些还没修改
// 连击 // 连击
if (core.hasSpecial(mon_special, 6)) per_damage *= (enemy.n || 2); if (core.hasSpecial(mon_special, 6)) per_damage *= (enemy.n || 2);
// 每回合的反击伤害;反击是按照勇士的攻击次数来计算回合 // 每回合的反击伤害;反击是按照勇士的攻击次数来计算回合
var counterDamage = 0; let counterDamage = 0;
if (core.hasSpecial(mon_special, 8)) if (core.hasSpecial(mon_special, 8))
counterDamage += Math.floor((enemy.counterAttack || core.values.counterAttack) * hero_atk); counterDamage += Math.floor((enemy.counterAttack || core.values.counterAttack) * hero_atk);
@ -725,19 +788,14 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
// 净化 // 净化
if (core.hasSpecial(mon_special, 9)) if (core.hasSpecial(mon_special, 9))
init_damage += Math.floor((enemy.purify || core.values.purify) * hero_mdef); init_damage += Math.floor((enemy.purify || core.values.purify) * hero_mdef);
//上面这些还没修改
// 勇士每回合对怪物造成的伤害 //勇士护盾计算
var hero_per_damage = Math.max(hero_atk - mon_def, 0); let barrier = hero_mdef;
if (enemyInfo.magic) barrier = hero_def;
// 如果没有破防,则不可战斗
if (hero_per_damage <= 0) return null;
// 勇士的攻击回合数;为怪物生命除以每回合伤害向上取整
var turn = Math.ceil(mon_hp / hero_per_damage);
// ------ 支援 ----- // // ------ 支援 ----- //
// 这个递归最好想明白为什么flag:__extraTurn__是怎么用的 // 这个递归最好想明白为什么flag:__extraTurn__是怎么用的
var guards = core.getFlag("__guards__" + x + "_" + y, enemyInfo.guards); /*var guards = core.getFlag("__guards__" + x + "_" + y, enemyInfo.guards);
var guard_before_current_enemy = false; // ------ 支援怪是先打(true)还是后打(false) var guard_before_current_enemy = false; // ------ 支援怪是先打(true)还是后打(false)
turn += core.getFlag("__extraTurn__", 0); turn += core.getFlag("__extraTurn__", 0);
if (guards.length > 0) { if (guards.length > 0) {
@ -764,13 +822,13 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
turn += core.getFlag("__extraTurn__", 0); turn += core.getFlag("__extraTurn__", 0);
} }
} }
core.removeFlag("__extraTurn__"); core.removeFlag("__extraTurn__");*/
// ------ 支援END ------ // // ------ 支援END ------ //
// 最终伤害:初始伤害 + 怪物对勇士造成的伤害 + 反击伤害 // 最终伤害:初始伤害 + 怪物对勇士造成的伤害 + 反击伤害
var damage = init_damage + (turn - 1) * per_damage + turn * counterDamage; damage += init_damage + hero_turn * counterDamage;
// 再扣去护盾 // 再扣去护盾
damage -= hero_mdef; damage -= barrier;
// 检查是否允许负伤 // 检查是否允许负伤
if (!core.flags.enableNegativeDamage) if (!core.flags.enableNegativeDamage)
@ -788,12 +846,18 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
"mon_hp": Math.floor(mon_hp), "mon_hp": Math.floor(mon_hp),
"mon_atk": Math.floor(mon_atk), "mon_atk": Math.floor(mon_atk),
"mon_def": Math.floor(mon_def), "mon_def": Math.floor(mon_def),
"mon_mdef": Math.floor(mon_mdef),
"init_damage": Math.floor(init_damage), "init_damage": Math.floor(init_damage),
"per_damage": Math.floor(per_damage), "per_damage": Math.floor(per_damage),
"hero_per_damage": Math.floor(hero_per_damage), "hero_per_damage": Math.floor(hero_per_damage),
"turn": Math.floor(turn), "turn": Math.floor(hero_turn),
"mon_turn": Math.floor(mon_turn),
"damage": Math.floor(damage) "damage": Math.floor(damage)
}; };
/*TODO:return
1. 显示怪物是魔攻还是物攻在怪物名字上做颜色变化物攻是黄色魔攻是蓝色
2. 一防减伤是物防还是魔防由怪物是物攻还是魔攻来转换
3. 特殊战斗的怪物在怪物手册里伤害写为特殊战*/
} }
}, },
"actions": { "actions": {
@ -824,7 +888,9 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
core.openBook(true); core.openBook(true);
break; break;
case 71: // G使用楼传器 case 71: // G使用楼传器
core.ui._drawViewMaps(core.floorIds.indexOf(core.status.floorId)); flags.canMoveFloor = core.canMoveFloor()
if (core.isPlaying()) core.ui._drawViewMaps(core.floorIds.indexOf(core.status.floorId));
core.status.route.push("key:71");
break; break;
case 65: // A读取自动存档回退 case 65: // A读取自动存档回退
core.doSL("autoSave", "load"); core.doSL("autoSave", "load");

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@ -332,7 +332,7 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a =
"text": "可以自由往来去过的楼层", "text": "可以自由往来去过的楼层",
"hideInReplay": true, "hideInReplay": true,
"hideInToolbox": true, "hideInToolbox": true,
"useItemEffect": "//core.ui.drawFly(core.floorIds.indexOf(core.status.floorId));\ncore.ui._drawViewMaps(core.floorIds.indexOf(core.status.floorId));", "useItemEffect": "//core.ui.drawFly(core.floorIds.indexOf(core.status.floorId));\nflags.canMoveFloor = core.canMoveFloor()\nif (core.isPlaying()) core.ui._drawViewMaps(core.floorIds.indexOf(core.status.floorId));",
"canUseItemEffect": "(function () {\n\tif (core.flags.flyNearStair && !core.nearStair() && !core.canMoveFloor())\n\t\treturn false;\n\treturn core.status.maps[core.status.floorId].canFlyFrom;\n})();" "canUseItemEffect": "(function () {\n\tif (core.flags.flyNearStair && !core.nearStair() && !core.canMoveFloor())\n\t\treturn false;\n\treturn core.status.maps[core.status.floorId].canFlyFrom;\n})();"
}, },
"coin": { "coin": {

File diff suppressed because it is too large Load Diff

View File

@ -1,534 +1,585 @@
html, body { html,
margin: 0; body {
padding: 0; margin: 0;
width: 100%; padding: 0;
height: 100%; width: 100%;
background-color: #000; height: 100%;
overflow: hidden; background-color: #000;
overflow: hidden;
} }
#gameGroup { #gameGroup {
position: absolute; position: absolute;
box-sizing: border-box; box-sizing: border-box;
-moz-box-sizing: border-box; -moz-box-sizing: border-box;
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
background-color: #000; background-color: #000;
} }
#mainTips { #mainTips {
color: #fff; color: #fff;
font-size: 0.8em; font-size: 0.8em;
position: fixed; position: fixed;
top: 10px; top: 10px;
left: 10px; left: 10px;
z-index: 370; z-index: 370;
} }
#musicBtn { #musicBtn {
position: fixed; position: fixed;
bottom: 3px; bottom: 3px;
right: 3px; right: 3px;
cursor: pointer; cursor: pointer;
z-index: 400; z-index: 400;
display: none; display: none;
} }
#enlargeBtn { #enlargeBtn {
position: fixed; position: fixed;
bottom: 3px; bottom: 3px;
right: 34px; right: 34px;
cursor: pointer; cursor: pointer;
z-index: 400; z-index: 400;
display: none; display: none;
} }
#startPanel { #startPanel {
width: 100%; width: 100%;
height: 100%; height: 100%;
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
background-color: #fff; background-color: #fff;
overflow: hidden; overflow: hidden;
z-index: 300; z-index: 300;
} }
#startTop { #startTop {
width: 100%; width: 100%;
height: 100%; height: 100%;
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
background-color: #000; background-color: #000;
z-index: 350; z-index: 350;
} }
#startTopProgressBar { #startTopProgressBar {
width: 90%; width: 90%;
height: 5%; height: 5%;
margin: 0 5%; margin: 0 5%;
position: absolute; position: absolute;
top: 5%; top: 5%;
background-color: #fff; background-color: #fff;
z-index: 15; z-index: 15;
} }
#startTopProgress { #startTopProgress {
width: 0%; width: 0%;
height: 100%; height: 100%;
background-color: #666; background-color: #666;
} }
#startTopLoadTips { #startTopLoadTips {
color: #fff; color: #fff;
font-size: 0.6em; font-size: 0.6em;
position: absolute; position: absolute;
top: 10%; top: 10%;
left: 5%; left: 5%;
z-index: 15; z-index: 15;
} }
#startTopHint { #startTopHint {
color: #66CCFF; color: #66ccff;
position: absolute; position: absolute;
bottom: 0; bottom: 0;
left: 5%; left: 5%;
z-index: 15; z-index: 15;
font-size: 1.1em; font-size: 1.1em;
} }
#startBackground { #startBackground {
position:absolute; position: absolute;
top:50%; top: 50%;
left:50%; left: 50%;
height: 100%; height: 100%;
width: 100%; width: 100%;
transform:translate(-50%,-50%); transform: translate(-50%, -50%);
z-index: 260; z-index: 260;
} }
#startLogo { #startLogo {
user-select: none; user-select: none;
position: absolute; position: absolute;
z-index: 290; z-index: 290;
left: 0; left: 0;
right: 0; right: 0;
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
margin-top: 8%; margin-top: 8%;
max-width: 100%; max-width: 100%;
text-align: center; text-align: center;
font: bold 0em STXingkai; font: bold 0em STXingkai;
color: #000000; color: #000000;
} }
#startTitle { #startTitle {
user-select: none; user-select: none;
position: absolute; position: absolute;
z-index: 280; z-index: 280;
} }
#startButtonGroup { #startButtonGroup {
width: auto; width: auto;
position: absolute; position: absolute;
text-align: center; text-align: center;
font-size: 1.4em; font-size: 1.4em;
display: none; display: none;
z-index: 310; z-index: 310;
bottom: 0; bottom: 0;
margin-bottom: 5%; margin-bottom: 5%;
left: 50%; left: 50%;
transform: translateX(-50%); transform: translateX(-50%);
padding: 15px 25px; padding: 15px 25px;
min-width: 100%; min-width: 100%;
/* default value */ /* default value */
background-color: #000000; background-color: #000000;
opacity: 0.55; opacity: 0.55;
color: #FFFFFF; color: #ffffff;
border: #FFFFFF 0px solid; border: #ffffff 0px solid;
caret-color: #ffffff; caret-color: #ffffff;
border-radius: 0px; border-radius: 0px;
} }
#startButtons { #startButtons {
display: none; display: none;
} }
#levelChooseButtons { #levelChooseButtons {
display: none; display: none;
} }
.startButton { .startButton {
width: 100%; width: 100%;
margin: 0; margin: 0;
font:1.2rem "pala", sans-serif; font: 1.2rem pala, sans-serif;
font-weight: normal; font-weight: normal;
display: block; display: block;
cursor: pointer; cursor: pointer;
padding: 0px 0; padding: 0px 0;
border-color: transparent; border-color: transparent;
border-width: 0px; border-width: 0px;
border-style: solid; border-style: solid;
border-radius: 0px; border-radius: 0px;
} }
.onChoiceAnimate { .onChoiceAnimate {
animation: onChoice 2s ease-in-out 0s infinite normal none running; animation: onChoice 2s ease-in-out 0s infinite normal none running;
} }
#floorMsgGroup { #floorMsgGroup {
position: absolute; position: absolute;
text-align: center; text-align: center;
display: none; display: none;
color: #fff; color: #fff;
background-color: #000; background-color: #000;
z-index: 230; z-index: 230;
} }
#logoLabel { #logoLabel {
margin-top: 8%; margin-top: 8%;
font: bold 3em STXingkai; font: bold 3em STXingkai;
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
} }
#versionLabel { #versionLabel {
margin-top: -3%; margin-top: -3%;
font-size: 1.2em; font-size: 1.2em;
font-weight: bold; font-weight: bold;
} }
#floorNameLabel { #floorNameLabel {
margin-top: 30px; margin-top: 30px;
font-size: 1.6em; font-size: 1.6em;
font-weight: bold; font-weight: bold;
} }
#statusBar { #statusBar {
position: absolute; position: absolute;
box-sizing: border-box; box-sizing: border-box;
-moz-box-sizing: border-box; -moz-box-sizing: border-box;
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
background: url(project/materials/ground.png) repeat; background: url(project/materials/ground.png) repeat;
z-index: 185; z-index: 185;
display: none; display: none;
top: 0; top: 0;
left: 0; left: 0;
padding: 3px; padding: 3px;
} }
#statusBar .status{ #statusBar .status {
position: relative; position: relative;
display: block; display: block;
float: left; float: left;
width: 100%; width: 100%;
} }
.status img{ .status img {
vertical-align: middle; vertical-align: middle;
width: auto; width: auto;
height: 100%; height: 100%;
max-height: 1.6em; max-height: 1.6em;
} }
#statusBar span{ #statusBar span {
font: bold italic 1.1em Verdana; font: bold italic 1.1em Verdana;
display: inline; display: inline;
} }
#statusBar p { #statusBar p {
display: inline-block; display: inline-block;
vertical-align: middle; vertical-align: middle;
width: 60%; width: 60%;
margin: 0; margin: 0;
color: white; color: white;
font: bold italic 1.1em Verdana; font: bold italic 1.1em Verdana;
white-space: nowrap; white-space: nowrap;
} }
#toolBar { #toolBar {
position: absolute; position: absolute;
background: url(project/materials/ground.png) repeat; background: url(project/materials/ground.png) repeat;
z-index: 210; z-index: 210;
box-sizing: border-box; box-sizing: border-box;
-moz-box-sizing: border-box; -moz-box-sizing: border-box;
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
display: none; display: none;
padding: 3px; padding: 3px;
} }
#toolBar .tools{ #toolBar .tools {
position: relative; position: relative;
display: block; display: block;
float: left; float: left;
} }
p#hard { p#hard {
width: 6em; width: 6em;
vertical-align: middle; vertical-align: middle;
display: inline-block; display: inline-block;
color: red; color: red;
font: bold normal 1.1em "Arial Black"; font: bold normal 1.1em "Arial Black";
text-align: center; text-align: center;
margin: 0 6px 6px 0; margin: 0 6px 6px 0;
word-break: keep-all; word-break: keep-all;
} }
span#poison, span#weak, span#curse, span#pickaxe, span#bomb, span#fly { span#poison,
font-style: normal; span#weak,
font-size: 1em; span#curse,
span#pickaxe,
span#bomb,
span#fly {
font-style: normal;
font-size: 1em;
} }
p#name { p#name {
font-style: normal; font-style: normal;
} }
.gameCanvas { .gameCanvas {
position: absolute; position: absolute;
box-sizing: border-box; box-sizing: border-box;
-moz-box-sizing: border-box; -moz-box-sizing: border-box;
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
} }
#gif { #gif {
z-index: 20; z-index: 20;
position: absolute; position: absolute;
overflow: hidden; overflow: hidden;
} }
#gif2 { #gif2 {
z-index: 90; z-index: 90;
position: absolute; position: absolute;
overflow: hidden; overflow: hidden;
} }
#gameDraw { #gameDraw {
position: absolute; position: absolute;
background: #000000; background: #000000;
overflow: hidden; overflow: hidden;
z-index: 185; z-index: 185;
} }
#bg { #bg {
z-index: 10; z-index: 10;
} }
#event { #event {
z-index: 30; z-index: 30;
} }
#hero { #hero {
z-index: 40; z-index: 40;
} }
#event2 { #event2 {
z-index: 50; z-index: 50;
} }
#fg { #fg {
z-index: 60; z-index: 60;
} }
#damage { #damage {
z-index: 65; z-index: 65;
} }
#animate { #animate {
z-index: 70; z-index: 70;
} }
#curtain { #curtain {
z-index: 125; z-index: 125;
} }
#ui { #ui {
z-index: 140; z-index: 140;
} }
#data { #data {
z-index: 170; z-index: 170;
} }
#inputDiv { #inputDiv {
display: none; display: none;
width: 100%; width: 100%;
height: 100%; height: 100%;
position: fixed; position: fixed;
top: 0; top: 0;
left: 0; left: 0;
background: rgba(127,127,127,0.6); background: rgba(127, 127, 127, 0.6);
z-index: 2000 z-index: 2000;
} }
#inputDialog { #inputDialog {
position: fixed; position: fixed;
top: 50%; top: 50%;
left: 50%; left: 50%;
transform: translate(-50%, -55%); transform: translate(-50%, -55%);
background: white; background: white;
width: 250px; width: 250px;
min-height: 50px; min-height: 50px;
} }
#inputMessage { #inputMessage {
word-wrap: break-word; word-wrap: break-word;
text-align: left; text-align: left;
margin-left: 8%; margin-left: 8%;
margin-right: 5%; margin-right: 5%;
} }
#inputBox { #inputBox {
margin-left: 8%; margin-left: 8%;
width: 80%; width: 80%;
margin-bottom: 10px; margin-bottom: 10px;
padding: 5px 3px; padding: 5px 3px;
border: 1px solid; border: 1px solid;
background: #F0F0F0; background: #f0f0f0;
} }
#inputYes { #inputYes {
margin-bottom: 15px; margin-bottom: 15px;
margin-left: 8%; margin-left: 8%;
} }
#inputNo { #inputNo {
float:right; float: right;
margin-right: 10%; margin-right: 10%;
} }
#_selector, ._uievent_selector { #_selector,
animation: selector 2s ease-in-out 0s infinite normal none running; ._uievent_selector {
animation: selector 2s ease-in-out 0s infinite normal none running;
} }
@-webkit-keyframes selector { @-webkit-keyframes selector {
0% { opacity: 0.95; } 0% {
50% { opacity: 0.55; } opacity: 0.95;
100% { opacity: 0.95; } }
50% {
opacity: 0.55;
}
100% {
opacity: 0.95;
}
} }
@keyframes selector { @keyframes selector {
0% { opacity: 0.95; } 0% {
50% { opacity: 0.55; } opacity: 0.95;
100% { opacity: 0.95; } }
50% {
opacity: 0.55;
}
100% {
opacity: 0.95;
}
} }
#next { #next {
width: 5px; width: 5px;
height: 5px; height: 5px;
display: none; display: none;
position: absolute; position: absolute;
transform: rotate(45deg); transform: rotate(45deg);
border-bottom-width: 4px; border-bottom-width: 4px;
border-bottom-style: solid; border-bottom-style: solid;
border-right-width: 4px; border-right-width: 4px;
border-right-style: solid; border-right-style: solid;
-webkit-animation: next .5s ease-in-out alternate infinite; -webkit-animation: next 0.5s ease-in-out alternate infinite;
animation: next .5s ease-in-out alternate infinite; animation: next 0.5s ease-in-out alternate infinite;
left: 0; left: 0;
top: 0; top: 0;
opacity: 0.7; opacity: 0.7;
z-index: 169; z-index: 169;
} }
@-webkit-keyframes next { @-webkit-keyframes next {
100% { 100% {
transform: rotate(45deg) translate(-3px, -3px); transform: rotate(45deg) translate(-3px, -3px);
} }
} }
@keyframes next { @keyframes next {
100% { 100% {
transform: rotate(45deg) translate(-3px, -3px); transform: rotate(45deg) translate(-3px, -3px);
} }
} }
#startImageBackgroundDiv { #startImageBackgroundDiv {
display: none; display: none;
width: 100%; width: 100%;
height: 100%; height: 100%;
position: fixed; position: fixed;
z-index: 10000; z-index: 10000;
} }
#startImageDiv { #startImageDiv {
width: 100%; width: 100%;
height: 100%; height: 100%;
position: fixed; position: fixed;
background: black; background: black;
opacity: 1; opacity: 1;
} }
#startImageLogo { #startImageLogo {
opacity: 0; opacity: 0;
max-width: 60%; max-width: 60%;
max-height: 60%; max-height: 60%;
position: fixed; position: fixed;
left: 50%; left: 50%;
top: 50%; top: 50%;
transform: translate(-50%, -50%); transform: translate(-50%, -50%);
} }
.startImageAnimation { .startImageAnimation {
-webkit-animation: startImage 4s ease-in-out 1s alternate 1; -webkit-animation: startImage 4s ease-in-out 1s alternate 1;
animation: startImage 4s ease-in-out 1s alternate 1; animation: startImage 4s ease-in-out 1s alternate 1;
} }
@-webkit-keyframes startImage { @-webkit-keyframes startImage {
0% { opacity: 0; } 0% {
60% { opacity: 1; } opacity: 0;
100% { opacity: 0; } }
60% {
opacity: 1;
}
100% {
opacity: 0;
}
} }
@keyframes startImage { @keyframes startImage {
0% { opacity: 0; } 0% {
60% { opacity: 1; } opacity: 0;
100% { opacity: 0; } }
60% {
opacity: 1;
}
100% {
opacity: 0;
}
} }
.startImageDivAnimation { .startImageDivAnimation {
-webkit-animation: startImageDivDisappear 2s ease-in-out 5s alternate 1; -webkit-animation: startImageDivDisappear 2s ease-in-out 5s alternate 1;
animation: startImageDivDisappear 2s ease-in-out 5s alternate 1; animation: startImageDivDisappear 2s ease-in-out 5s alternate 1;
} }
@-webkit-keyframes startImageDivDisappear { @-webkit-keyframes startImageDivDisappear {
0% { opacity: 1 } 0% {
100% { opacity: 0 } opacity: 1;
}
100% {
opacity: 0;
}
} }
@keyframes startImageDivDisappear { @keyframes startImageDivDisappear {
0% { opacity: 1 } 0% {
100% { opacity: 0 } opacity: 1;
}
100% {
opacity: 0;
}
} }
#ui-editor { #ui-editor {
z-index: 9999; z-index: 9999;
position: absolute; position: absolute;
overflow: visible; overflow: visible;
height: 100%; height: 100%;
} }
@font-face { @font-face {
font-family: Fira Code; font-family: Fira Code;
src: url(../src/fonts/FiraCode-Regular.ttf); src: url(../src/fonts/FiraCode-Regular.ttf);
} }
/* 注释下面这三行以开启抗锯齿 */ /* 注释下面这三行以开启抗锯齿 */
.anti-aliasing { .anti-aliasing {
image-rendering: pixelated; image-rendering: pixelated;
} }
.warning { .warning {
transition: left cubic-bezier(0, 0.9, 1, 0.1) 2.5s; transition: left cubic-bezier(0, 0.9, 1, 0.1) 2.5s;
-webkit-transition: left cubic-bezier(0, 0.9, 1, 0.1) 2.5s; -webkit-transition: left cubic-bezier(0, 0.9, 1, 0.1) 2.5s;
animation: warning 1s linear 0s alternate infinite; animation: warning 1s linear 0s alternate infinite;
-webkit-animation: warning 1s linear 0s alternate infinite; -webkit-animation: warning 1s linear 0s alternate infinite;
} }
@keyframes warning { @keyframes warning {
0 % { text-shadow: 0px 0px 9px rgba(255, 0, 0, 0.5), 0px 0px 6px rgb(129, 0, 0);} 0 % {
50 % { text-shadow: 0px 0px 30px rgba(255, 0, 0, 1), 0px 0px 6px rgb(129, 0, 0);} text-shadow: 0px 0px 9px rgba(255, 0, 0, 0.5), 0px 0px 6px rgb(129, 0, 0);
100 % { text-shadow: 0px 0px 9px rgba(255, 0, 0, 0.5), 0px 0px 6px rgb(129, 0, 0);} }
50 % {
text-shadow: 0px 0px 30px rgba(255, 0, 0, 1), 0px 0px 6px rgb(129, 0, 0);
}
100 % {
text-shadow: 0px 0px 9px rgba(255, 0, 0, 0.5), 0px 0px 6px rgb(129, 0, 0);
}
} }
@-webkit - keyframes warning { @-webkit - keyframes warning {
0 % { text-shadow: 0px 0px 9px rgba(255, 0, 0, 0.5), 0px 0px 6px rgb(129, 0, 0);} 0 % {
50 % { text-shadow: 0px 0px 30px rgba(255, 0, 0, 1), 0px 0px 6px rgb(129, 0, 0);} text-shadow: 0px 0px 9px rgba(255, 0, 0, 0.5), 0px 0px 6px rgb(129, 0, 0);
100 % { text-shadow: 0px 0px 9px rgba(255, 0, 0, 0.5), 0px 0px 6px rgb(129, 0, 0);} }
50 % {
text-shadow: 0px 0px 30px rgba(255, 0, 0, 1), 0px 0px 6px rgb(129, 0, 0);
}
100 % {
text-shadow: 0px 0px 9px rgba(255, 0, 0, 0.5), 0px 0px 6px rgb(129, 0, 0);
}
} }
.gameCanvas { .gameCanvas {
transition: transform 1.5s ease-out; transition: transform 1.5s ease-out;
-webkit-transition: transform 1.5s ease-out; -webkit-transition: transform 1.5s ease-out;
} }