Merge branch 'status-itcfangye' into story-laodeng

This commit is contained in:
草莓 2025-01-27 00:13:47 +08:00
commit bb41bad059
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
| stopAsync_s
| op_s
| setmusics_s
| introAndLoop_s
| battle_s
| battle_1_s
| openDoor_s
@ -963,8 +965,7 @@ action
| animationDrawable_s
| over_s
| overlist_s
| playStereo_s
| moveStereo_s
| cgtextList_s
| pass_s
;
@ -1123,22 +1124,33 @@ overtextEmpty
var 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
: '背景' EvalString? '回忆滤镜' Bool? '移除对话框' Bool? '头像' EvalString?'名字' EvalString?'坐标PX' Number'打字间隔' Int? BGNL? Newline
: '背景' EvalString? '回忆滤镜' Bool? '移除对话框' Bool? '剧情库序列' Int '头像' EvalString?'坐标PX' Number'打字间隔' Int? BGNL? Newline
'自动等待时长' Int '音频文件(需在全塔属性——使用音效注册)'EvalString? BGNL? Newline
EvalString? BGNL? Newline textcgDrawingList+? Newline
textcgDrawingList+? Newline
/* cgtext_s
tooltip : cgtext显示一段包含cg的文字剧情
helpUrl : /_docs/#/instruction
allImages : ['EvalString_0','EvalString_1']
allSounds : ['EvalString_3']
default : ["bg_5043.webp",false,"face_050445.webp",false,"菲奥奈",-300,0,2000,"","这句话显示在对话框内",[{ "name":"tati_050145a.webp" , "px": 100,"filter":false }]]
allSounds : ['EvalString_2']
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 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;
*/;
textcgDrawingList
@ -2612,6 +2624,23 @@ var code = '{"type": "setq"'+IdString_0+'},\n';
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
: 'cg回廊获取cg 文件名'EvalString?'不填为清空cg获取记录' Newline
@ -2621,12 +2650,26 @@ tooltip : setcgscg回廊中的cg获取
helpUrl : /_docs/#/instruction
default : [""]
allImages : ['EvalString_0']
colour : this.imageColor
colour : this.soundColor
EvalString_0 = EvalString_0 ? (', "img": "'+EvalString_0+'"') : '';
var code = '{"type": "setcgs"'+EvalString_0+'},\n';
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
: '图片放缩' '图片编号' 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;
*/;
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
: '播放系统音效' NameMap_List '停止之前音效' Bool? '音调' IntString? '等待播放完毕' Bool? Newline

View File

@ -542,6 +542,12 @@ MotaActionParser = function () {
);
}
break;
case "cgtextList":
this.next = MotaActionBlocks["cgtextList_s"].xmlText([
data.textList,
this.next,
]);
break;
case "cgtext": // cg对话框
var buildcgDrawing = function (obj) {
obj = MotaActionFunctions.processcgDrawing(obj || []);
@ -563,13 +569,12 @@ MotaActionParser = function () {
data.bg,
data.memory,
data.WindowSkin,
data.index,
data.head.name,
data.name || "",
data.head.px || -300,
data.time,
data.wait,
data.sound,
data.text,
buildcgDrawing(data.bodyList),
this.next,
]);
@ -620,6 +625,20 @@ MotaActionParser = function () {
case "setcgs":
this.next = MotaActionBlocks["setcgs_s"].xmlText([data.img, this.next]);
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": // 注释
this.next = MotaActionBlocks["comment_s"].xmlText([
this.EvalString_Multi(data.text),
@ -1506,27 +1525,6 @@ MotaActionParser = function () {
]);
}
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":
var knownItems = MotaActionBlocks["NameMap_List"].options.map(function (
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",
"_range": "typeof(thiseval)=='string' || thiseval==null",
"_data": "音乐鉴赏"
},
"intro&loop": {
"_leaf": true,
"_type": "textarea",
"_range": "typeof(thiseval)=='string' || thiseval==null",
"_data": "背景音乐拼接"
}
}
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) {
if (!(fonts instanceof Array) || fonts.length == 0) return;
var style = document.createElement("style");
style.type = "text/css";
var html = "";
fonts.forEach(function (font) {
html +=
@ -910,7 +909,7 @@ main.prototype.listen = function () {
////// 点击“开始游戏”时 //////
main.dom.playGame.onclick = function () {
main.dom.startButtons.style.display = "none";
main.core.control.checkBgm();
main.core.checkBgm();
if (main.levelChoose.length == 0) {
core.events.startGame("");
@ -923,13 +922,13 @@ main.prototype.listen = function () {
////// 点击“载入游戏”时 //////
main.dom.loadGame.onclick = function () {
main.core.control.checkBgm();
main.core.checkBgm();
main.core.load();
};
////// 点击“录像回放”时 //////
main.dom.replayGame.onclick = function () {
main.core.control.checkBgm();
main.core.checkBgm();
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"
],
"bgms": [
"Ascension.opus",
"Asphodelus_Ceui.opus",
"Blind_Alley.opus",
"Blood_Stain.opus",
"Crawler.opus",
"Halbmond.opus",
"ed.opus",
"op.opus",
"theme.opus"
],
@ -994,7 +998,6 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"aiy820000010.opus",
"aiy820000020.opus",
"attack.opus",
"attack.opus",
"bomb.opus",
"cancel.opus",
"centerFly.opus",
@ -1019,6 +1022,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
],
"fonts": [
"HATTEN",
"Verdana",
"number",
"pala",
"simhei"
@ -1441,7 +1445,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
},
{
"type": "function",
"function": "function(){\ncore.control.checkBgm()\n}"
"function": "function(){\ncore.checkBgm()\n}"
},
{
"type": "if",
@ -1489,6 +1493,10 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"type": "setValue",
"name": "item:fly",
"value": "1"
},
{
"type": "insert",
"name": "强制横屏"
}
],
"shops": [

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -26,58 +26,31 @@ main.floors.street01=
"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": [
{
"type": "insert",
"name": "chapter04"
}
],
"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"
"name": "chapter01"
}
]
},

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) {
// 正在切换楼层过程中执行的操作;此函数的执行时间是“屏幕完全变黑“的那一刻
// floorId为要切换到的楼层IDheroLoc表示勇士切换到的位置
// 正在切换楼层过程中执行的操作;此函数的执行时间是“屏幕完全变黑“的那一刻
// floorId为要切换到的楼层IDheroLoc表示勇士切换到的位置
// ---------- 此时还没有进行切换当前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();
// }
// 根据分区信息自动砍层与恢复
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进行判定比如删除某些自定义图层等
// if (currentId == 'MT0') {
// core.deleteAllCanvas();
// }
// ---------- 重绘新地图这一步将会设置core.status.floorId ---------- //
core.drawMap(floorId);
// 根据分区信息自动砍层与恢复
if (core.autoRemoveMaps) core.autoRemoveMaps(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();
// 重置画布尺寸
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) {
// 转换楼层结束的事件;此函数会在整个楼层切换完全结束后再执行
// floorId是切换到的楼层
@ -531,15 +531,21 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
var hero_hp = core.getRealStatusOrDefault(hero, 'hp'),
hero_atk = core.getRealStatusOrDefault(hero, 'atk'),
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),
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_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);
// 模仿
if (core.hasSpecial(mon_special, 10)) {
mon_atk = hero_atk;
@ -633,10 +639,15 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
"hp": Math.floor(mon_hp),
"atk": Math.floor(mon_atk),
"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),
"exp": Math.floor(mon_exp),
"point": Math.floor(mon_point),
"special": mon_special,
"magic": mon_magic,
"guards": guards, // 返回支援情况
};
},
@ -655,15 +666,13 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
hero_atk = core.getRealStatusOrDefault(hero, 'atk'),
hero_def = core.getRealStatusOrDefault(hero, 'def'),
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_atk = core.getStatusOrDefault(hero, 'atk'),
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之中
@ -671,23 +680,34 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
var mon_hp = enemyInfo.hp,
mon_atk = enemyInfo.atk,
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二倍斩
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"))
return null; // 不可战斗
// 战前造成的额外伤害(可被护盾抵消)
var init_damage = 0;
let init_damage = 0;
// 吸血
if (core.hasSpecial(mon_special, 11)) {
var vampire_damage = hero_hp * enemy.vampire;
let vampire_damage = hero_hp * enemy.vampire;
// 如果有神圣盾免疫吸血等可以在这里写
// 也可以用hasItem和hasEquip来判定装备
@ -701,17 +721,60 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
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);
// 每回合的反击伤害;反击是按照勇士的攻击次数来计算回合
var counterDamage = 0;
let counterDamage = 0;
if (core.hasSpecial(mon_special, 8))
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))
init_damage += Math.floor((enemy.purify || core.values.purify) * hero_mdef);
// 勇士每回合对怪物造成的伤害
var hero_per_damage = Math.max(hero_atk - mon_def, 0);
// 如果没有破防,则不可战斗
if (hero_per_damage <= 0) return null;
// 勇士的攻击回合数;为怪物生命除以每回合伤害向上取整
var turn = Math.ceil(mon_hp / hero_per_damage);
//上面这些还没修改
//勇士护盾计算
let barrier = hero_mdef;
if (enemyInfo.magic) barrier = hero_def;
// ------ 支援 ----- //
// 这个递归最好想明白为什么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)
turn += core.getFlag("__extraTurn__", 0);
if (guards.length > 0) {
@ -764,13 +822,13 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
turn += core.getFlag("__extraTurn__", 0);
}
}
core.removeFlag("__extraTurn__");
core.removeFlag("__extraTurn__");*/
// ------ 支援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)
@ -788,12 +846,18 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
"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(turn),
"turn": Math.floor(hero_turn),
"mon_turn": Math.floor(mon_turn),
"damage": Math.floor(damage)
};
/*TODO:return
1. 显示怪物是魔攻还是物攻在怪物名字上做颜色变化物攻是黄色魔攻是蓝色
2. 一防减伤是物防还是魔防由怪物是物攻还是魔攻来转换
3. 特殊战斗的怪物在怪物手册里伤害写为特殊战*/
}
},
"actions": {
@ -824,7 +888,9 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
core.openBook(true);
break;
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;
case 65: // A读取自动存档回退
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": "可以自由往来去过的楼层",
"hideInReplay": 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})();"
},
"coin": {

File diff suppressed because it is too large Load Diff

View File

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