Compare commits
5 Commits
d5fde8eaca
...
4609a85797
Author | SHA1 | Date | |
---|---|---|---|
4609a85797 | |||
4936449f67 | |||
1eec945d93 | |||
b3da61870c | |||
24807dffe0 |
@ -965,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
|
||||||
;
|
;
|
||||||
|
|
||||||
@ -1125,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
|
||||||
@ -3078,39 +3088,8 @@ 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
|
||||||
|
|
||||||
|
@ -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,
|
||||||
]);
|
]);
|
||||||
@ -1520,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
|
||||||
|
@ -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': [] },
|
||||||
|
|
||||||
|
|
||||||
// --------------------------- 【图块属性】相关的表格配置 --------------------------- //
|
// --------------------------- 【图块属性】相关的表格配置 --------------------------- //
|
||||||
|
2891
libs/control.js
2891
libs/control.js
File diff suppressed because it is too large
Load Diff
2903
libs/events.js
2903
libs/events.js
File diff suppressed because it is too large
Load Diff
566
libs/loader.js
566
libs/loader.js
@ -1,27 +1,24 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
loader.js:负责对资源的加载
|
loader.js:负责对资源的加载
|
||||||
|
|
||||||
*/
|
*/
|
||||||
"use strict";
|
"use strict";
|
||||||
|
|
||||||
function loader () {
|
function loader() {
|
||||||
this._init();
|
this._init();
|
||||||
}
|
}
|
||||||
|
|
||||||
loader.prototype._init = function () {
|
loader.prototype._init = function () {};
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
////// 设置加载进度条进度 //////
|
////// 设置加载进度条进度 //////
|
||||||
loader.prototype._setStartProgressVal = function (val) {
|
loader.prototype._setStartProgressVal = function (val) {
|
||||||
core.dom.startTopProgress.style.width = val + '%';
|
core.dom.startTopProgress.style.width = val + "%";
|
||||||
}
|
};
|
||||||
|
|
||||||
////// 设置加载进度条提示文字 //////
|
////// 设置加载进度条提示文字 //////
|
||||||
loader.prototype._setStartLoadTipText = function (text) {
|
loader.prototype._setStartLoadTipText = function (text) {
|
||||||
core.dom.startTopLoadTips.innerText = text;
|
core.dom.startTopLoadTips.innerText = text;
|
||||||
}
|
};
|
||||||
|
|
||||||
loader.prototype._load = function (callback) {
|
loader.prototype._load = function (callback) {
|
||||||
this._loadMusics();
|
this._loadMusics();
|
||||||
@ -30,7 +27,7 @@ loader.prototype._load = function (callback) {
|
|||||||
} else {
|
} else {
|
||||||
this._load_sync(callback);
|
this._load_sync(callback);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
loader.prototype._load_sync = function (callback) {
|
loader.prototype._load_sync = function (callback) {
|
||||||
this._loadAnimates_sync();
|
this._loadAnimates_sync();
|
||||||
@ -39,13 +36,13 @@ loader.prototype._load_sync = function (callback) {
|
|||||||
core.loader._loadExtraImages_sync(function () {
|
core.loader._loadExtraImages_sync(function () {
|
||||||
core.loader._loadAutotiles_sync(function () {
|
core.loader._loadAutotiles_sync(function () {
|
||||||
core.loader._loadTilesets_sync(callback);
|
core.loader._loadTilesets_sync(callback);
|
||||||
})
|
|
||||||
})
|
|
||||||
});
|
});
|
||||||
}
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
loader.prototype._load_async = function (callback) {
|
loader.prototype._load_async = function (callback) {
|
||||||
core.loader._setStartLoadTipText('正在加载资源文件...');
|
core.loader._setStartLoadTipText("正在加载资源文件...");
|
||||||
const all = {};
|
const all = {};
|
||||||
|
|
||||||
const _makeOnProgress = function (name) {
|
const _makeOnProgress = function (name) {
|
||||||
@ -53,24 +50,31 @@ loader.prototype._load_async = function (callback) {
|
|||||||
return (loaded, total) => {
|
return (loaded, total) => {
|
||||||
all[name].loaded = loaded;
|
all[name].loaded = loaded;
|
||||||
all[name].total = total;
|
all[name].total = total;
|
||||||
let allLoaded = 0, allTotal = 0;
|
let allLoaded = 0,
|
||||||
|
allTotal = 0;
|
||||||
for (const one of Object.values(all)) {
|
for (const one of Object.values(all)) {
|
||||||
allLoaded += one.loaded;
|
allLoaded += one.loaded;
|
||||||
allTotal += one.total;
|
allTotal += one.total;
|
||||||
}
|
}
|
||||||
console.log(allLoaded. allTotal);
|
console.log(allLoaded.allTotal);
|
||||||
if (allTotal > 0) {
|
if (allTotal > 0) {
|
||||||
if (allLoaded == allTotal) {
|
if (allLoaded == allTotal) {
|
||||||
core.loader._setStartLoadTipText("正在处理资源文件... 请稍候...");
|
core.loader._setStartLoadTipText("正在处理资源文件... 请稍候...");
|
||||||
} else {
|
} else {
|
||||||
core.loader._setStartLoadTipText('正在加载资源文件... ' +
|
core.loader._setStartLoadTipText(
|
||||||
core.formatSize(allLoaded) + " / " + core.formatSize(allTotal) +
|
"正在加载资源文件... " +
|
||||||
" (" + (allLoaded / allTotal * 100).toFixed(2) + "%)");
|
core.formatSize(allLoaded) +
|
||||||
|
" / " +
|
||||||
|
core.formatSize(allTotal) +
|
||||||
|
" (" +
|
||||||
|
((allLoaded / allTotal) * 100).toFixed(2) +
|
||||||
|
"%)"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
core.loader._setStartProgressVal(allLoaded / allTotal * 100);
|
core.loader._setStartProgressVal((allLoaded / allTotal) * 100);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
};
|
||||||
const _makeOnFinished = function (name) {
|
const _makeOnFinished = function (name) {
|
||||||
return () => {
|
return () => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
@ -80,58 +84,121 @@ loader.prototype._load_async = function (callback) {
|
|||||||
}
|
}
|
||||||
callback();
|
callback();
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
}
|
};
|
||||||
|
|
||||||
if (main.splitChunkMap) {
|
if (main.splitChunkMap) {
|
||||||
this._loadAnimates_chunked(main.splitChunkMap.animates, _makeOnProgress, _makeOnFinished);
|
this._loadAnimates_chunked(
|
||||||
this._loadSounds_chunked(main.splitChunkMap.sounds, _makeOnProgress, _makeOnFinished);
|
main.splitChunkMap.animates,
|
||||||
this._loadMaterials_chunked(main.splitChunkMap.materials, _makeOnProgress, _makeOnFinished);
|
_makeOnProgress,
|
||||||
this._loadExtraImages_chunked(main.splitChunkMap.images, _makeOnProgress, _makeOnFinished);
|
_makeOnFinished
|
||||||
this._loadAutotiles_chunked(main.splitChunkMap.autotiles, _makeOnProgress, _makeOnFinished);
|
);
|
||||||
this._loadTilesets_chunked(main.splitChunkMap.tilesets, _makeOnProgress, _makeOnFinished);
|
this._loadSounds_chunked(
|
||||||
|
main.splitChunkMap.sounds,
|
||||||
|
_makeOnProgress,
|
||||||
|
_makeOnFinished
|
||||||
|
);
|
||||||
|
this._loadMaterials_chunked(
|
||||||
|
main.splitChunkMap.materials,
|
||||||
|
_makeOnProgress,
|
||||||
|
_makeOnFinished
|
||||||
|
);
|
||||||
|
this._loadExtraImages_chunked(
|
||||||
|
main.splitChunkMap.images,
|
||||||
|
_makeOnProgress,
|
||||||
|
_makeOnFinished
|
||||||
|
);
|
||||||
|
this._loadAutotiles_chunked(
|
||||||
|
main.splitChunkMap.autotiles,
|
||||||
|
_makeOnProgress,
|
||||||
|
_makeOnFinished
|
||||||
|
);
|
||||||
|
this._loadTilesets_chunked(
|
||||||
|
main.splitChunkMap.tilesets,
|
||||||
|
_makeOnProgress,
|
||||||
|
_makeOnFinished
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
this._loadAnimates_async(_makeOnProgress('animates'), _makeOnFinished('animates'));
|
this._loadAnimates_async(
|
||||||
this._loadSounds_async(_makeOnProgress('sounds'), _makeOnFinished('sounds'));
|
_makeOnProgress("animates"),
|
||||||
this._loadMaterials_async(_makeOnProgress('materials'), _makeOnFinished('materials'));
|
_makeOnFinished("animates")
|
||||||
this._loadExtraImages_async(_makeOnProgress('images'), _makeOnFinished('images'));
|
);
|
||||||
this._loadAutotiles_async(_makeOnProgress('autotiles'), _makeOnFinished('autotiles'));
|
this._loadSounds_async(
|
||||||
this._loadTilesets_async(_makeOnProgress('tilesets'), _makeOnFinished('tilesets'));
|
_makeOnProgress("sounds"),
|
||||||
|
_makeOnFinished("sounds")
|
||||||
|
);
|
||||||
|
this._loadMaterials_async(
|
||||||
|
_makeOnProgress("materials"),
|
||||||
|
_makeOnFinished("materials")
|
||||||
|
);
|
||||||
|
this._loadExtraImages_async(
|
||||||
|
_makeOnProgress("images"),
|
||||||
|
_makeOnFinished("images")
|
||||||
|
);
|
||||||
|
this._loadAutotiles_async(
|
||||||
|
_makeOnProgress("autotiles"),
|
||||||
|
_makeOnFinished("autotiles")
|
||||||
|
);
|
||||||
|
this._loadTilesets_async(
|
||||||
|
_makeOnProgress("tilesets"),
|
||||||
|
_makeOnFinished("tilesets")
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
// ----- 加载资源文件 ------ //
|
// ----- 加载资源文件 ------ //
|
||||||
|
|
||||||
loader.prototype._loadMaterials_sync = function (callback) {
|
loader.prototype._loadMaterials_sync = function (callback) {
|
||||||
this._setStartLoadTipText("正在加载资源文件...");
|
this._setStartLoadTipText("正在加载资源文件...");
|
||||||
this.loadImages("materials", core.materials, core.material.images, function () {
|
this.loadImages(
|
||||||
|
"materials",
|
||||||
|
core.materials,
|
||||||
|
core.material.images,
|
||||||
|
function () {
|
||||||
core.loader._loadMaterials_afterLoad();
|
core.loader._loadMaterials_afterLoad();
|
||||||
callback();
|
callback();
|
||||||
});
|
}
|
||||||
}
|
);
|
||||||
|
};
|
||||||
|
|
||||||
loader.prototype._loadMaterials_async = function (onprogress, onfinished) {
|
loader.prototype._loadMaterials_async = function (onprogress, onfinished) {
|
||||||
this.loadImagesFromZip('project/materials/materials.h5data', core.materials, core.material.images, onprogress, function () {
|
this.loadImagesFromZip(
|
||||||
|
"project/materials/materials.h5data",
|
||||||
|
core.materials,
|
||||||
|
core.material.images,
|
||||||
|
onprogress,
|
||||||
|
function () {
|
||||||
core.loader._loadMaterials_afterLoad();
|
core.loader._loadMaterials_afterLoad();
|
||||||
onfinished();
|
onfinished();
|
||||||
});
|
}
|
||||||
}
|
);
|
||||||
|
};
|
||||||
|
|
||||||
loader.prototype._loadMaterials_chunked = async function (chunks, makeOnProgress, makeOnFinished) {
|
loader.prototype._loadMaterials_chunked = async function (
|
||||||
await this._loadImagesFromChunks(chunks, core.materials, core.material.images, makeOnProgress, makeOnFinished);
|
chunks,
|
||||||
|
makeOnProgress,
|
||||||
|
makeOnFinished
|
||||||
|
) {
|
||||||
|
await this._loadImagesFromChunks(
|
||||||
|
chunks,
|
||||||
|
core.materials,
|
||||||
|
core.material.images,
|
||||||
|
makeOnProgress,
|
||||||
|
makeOnFinished
|
||||||
|
);
|
||||||
core.loader._loadMaterials_afterLoad();
|
core.loader._loadMaterials_afterLoad();
|
||||||
}
|
};
|
||||||
|
|
||||||
loader.prototype._loadMaterials_afterLoad = function () {
|
loader.prototype._loadMaterials_afterLoad = function () {
|
||||||
const images = core.splitImage(core.material.images['icons']);
|
const images = core.splitImage(core.material.images["icons"]);
|
||||||
for (let key in core.statusBar.icons) {
|
for (let key in core.statusBar.icons) {
|
||||||
if (typeof core.statusBar.icons[key] == 'number') {
|
if (typeof core.statusBar.icons[key] == "number") {
|
||||||
core.statusBar.icons[key] = images[core.statusBar.icons[key]];
|
core.statusBar.icons[key] = images[core.statusBar.icons[key]];
|
||||||
if (core.statusBar.image[key] != null)
|
if (core.statusBar.image[key] != null)
|
||||||
core.statusBar.image[key].src = core.statusBar.icons[key].src;
|
core.statusBar.image[key].src = core.statusBar.icons[key].src;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
// ------ 加载使用的图片 ------ //
|
// ------ 加载使用的图片 ------ //
|
||||||
|
|
||||||
@ -139,38 +206,54 @@ loader.prototype._loadExtraImages_sync = function (callback) {
|
|||||||
core.material.images.images = {};
|
core.material.images.images = {};
|
||||||
this._setStartLoadTipText("正在加载图片文件...");
|
this._setStartLoadTipText("正在加载图片文件...");
|
||||||
core.loadImages("images", core.images, core.material.images.images, callback);
|
core.loadImages("images", core.images, core.material.images.images, callback);
|
||||||
}
|
};
|
||||||
|
|
||||||
loader.prototype._loadExtraImages_async = function (onprogress, onfinished) {
|
loader.prototype._loadExtraImages_async = function (onprogress, onfinished) {
|
||||||
core.material.images.images = {};
|
core.material.images.images = {};
|
||||||
|
|
||||||
// Check .gif
|
// Check .gif
|
||||||
const gifs = images.filter(function (name) {
|
const gifs = images.filter(function (name) {
|
||||||
return name.toLowerCase().endsWith('.gif');
|
return name.toLowerCase().endsWith(".gif");
|
||||||
});
|
});
|
||||||
// gif没有被压缩在zip中,延迟加载...
|
// gif没有被压缩在zip中,延迟加载...
|
||||||
this._loadExtraImages_loadLazy(gifs);
|
this._loadExtraImages_loadLazy(gifs);
|
||||||
|
|
||||||
images = images.filter((name) => !name.toLowerCase().endsWith('.gif'));
|
images = images.filter((name) => !name.toLowerCase().endsWith(".gif"));
|
||||||
|
|
||||||
this.loadImagesFromZip('project/images/images.h5data', images, core.material.images.images, onprogress, onfinished);
|
this.loadImagesFromZip(
|
||||||
}
|
"project/images/images.h5data",
|
||||||
|
images,
|
||||||
|
core.material.images.images,
|
||||||
|
onprogress,
|
||||||
|
onfinished
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
loader.prototype._loadExtraImages_chunked = function (chunks, makeOnProgress, makeOnFinished) {
|
loader.prototype._loadExtraImages_chunked = function (
|
||||||
|
chunks,
|
||||||
|
makeOnProgress,
|
||||||
|
makeOnFinished
|
||||||
|
) {
|
||||||
core.material.images.images = {};
|
core.material.images.images = {};
|
||||||
let images = core.images;
|
let images = core.images;
|
||||||
|
|
||||||
// Check .gif
|
// Check .gif
|
||||||
const gifs = images.filter(function (name) {
|
const gifs = images.filter(function (name) {
|
||||||
return name.toLowerCase().endsWith('.gif');
|
return name.toLowerCase().endsWith(".gif");
|
||||||
});
|
});
|
||||||
// gif没有被压缩在zip中,延迟加载...
|
// gif没有被压缩在zip中,延迟加载...
|
||||||
this._loadExtraImages_loadLazy(gifs);
|
this._loadExtraImages_loadLazy(gifs);
|
||||||
|
|
||||||
images = images.filter((name) => !name.toLowerCase().endsWith('.gif'));
|
images = images.filter((name) => !name.toLowerCase().endsWith(".gif"));
|
||||||
|
|
||||||
this._loadImagesFromChunks(chunks, images, core.material.images.images, makeOnProgress, makeOnFinished);
|
this._loadImagesFromChunks(
|
||||||
}
|
chunks,
|
||||||
|
images,
|
||||||
|
core.material.images.images,
|
||||||
|
makeOnProgress,
|
||||||
|
makeOnFinished
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
loader.prototype._loadExtraImages_loadLazy = function (list) {
|
loader.prototype._loadExtraImages_loadLazy = function (list) {
|
||||||
list.forEach(function (gif) {
|
list.forEach(function (gif) {
|
||||||
@ -180,7 +263,7 @@ loader.prototype._loadExtraImages_loadLazy = function (list) {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}, this);
|
}, this);
|
||||||
}
|
};
|
||||||
|
|
||||||
// ------ 加载自动元件 ------ //
|
// ------ 加载自动元件 ------ //
|
||||||
|
|
||||||
@ -194,27 +277,43 @@ loader.prototype._loadAutotiles_sync = function (callback) {
|
|||||||
core.loader._loadAutotiles_afterLoad(keys, autotiles);
|
core.loader._loadAutotiles_afterLoad(keys, autotiles);
|
||||||
callback();
|
callback();
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
loader.prototype._loadAutotiles_async = function (onprogress, onfinished) {
|
loader.prototype._loadAutotiles_async = function (onprogress, onfinished) {
|
||||||
core.material.images.autotile = {};
|
core.material.images.autotile = {};
|
||||||
var keys = Object.keys(core.material.icons.autotile);
|
var keys = Object.keys(core.material.icons.autotile);
|
||||||
var autotiles = {};
|
var autotiles = {};
|
||||||
|
|
||||||
this.loadImagesFromZip('project/autotiles/autotiles.h5data', keys, autotiles, onprogress, function () {
|
this.loadImagesFromZip(
|
||||||
|
"project/autotiles/autotiles.h5data",
|
||||||
|
keys,
|
||||||
|
autotiles,
|
||||||
|
onprogress,
|
||||||
|
function () {
|
||||||
core.loader._loadAutotiles_afterLoad(keys, autotiles);
|
core.loader._loadAutotiles_afterLoad(keys, autotiles);
|
||||||
onfinished();
|
onfinished();
|
||||||
});
|
}
|
||||||
}
|
);
|
||||||
|
};
|
||||||
|
|
||||||
loader.prototype._loadAutotiles_chunked = async function (chunks, makeOnProgress, makeOnFinished) {
|
loader.prototype._loadAutotiles_chunked = async function (
|
||||||
|
chunks,
|
||||||
|
makeOnProgress,
|
||||||
|
makeOnFinished
|
||||||
|
) {
|
||||||
core.material.images.autotile = {};
|
core.material.images.autotile = {};
|
||||||
const keys = Object.keys(core.material.icons.autotile);
|
const keys = Object.keys(core.material.icons.autotile);
|
||||||
const autotiles = {};
|
const autotiles = {};
|
||||||
|
|
||||||
await this._loadImagesFromChunks(chunks, keys, autotiles, makeOnProgress, makeOnFinished);
|
await this._loadImagesFromChunks(
|
||||||
|
chunks,
|
||||||
|
keys,
|
||||||
|
autotiles,
|
||||||
|
makeOnProgress,
|
||||||
|
makeOnFinished
|
||||||
|
);
|
||||||
core.loader._loadAutotiles_afterLoad(keys, autotiles);
|
core.loader._loadAutotiles_afterLoad(keys, autotiles);
|
||||||
}
|
};
|
||||||
|
|
||||||
loader.prototype._loadAutotiles_afterLoad = function (keys, autotiles) {
|
loader.prototype._loadAutotiles_afterLoad = function (keys, autotiles) {
|
||||||
// autotile需要保证顺序
|
// autotile需要保证顺序
|
||||||
@ -225,33 +324,53 @@ loader.prototype._loadAutotiles_afterLoad = function (keys, autotiles) {
|
|||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
core.maps._makeAutotileEdges();
|
core.maps._makeAutotileEdges();
|
||||||
});
|
});
|
||||||
|
};
|
||||||
}
|
|
||||||
|
|
||||||
// ------ 加载额外素材 ------ //
|
// ------ 加载额外素材 ------ //
|
||||||
|
|
||||||
loader.prototype._loadTilesets_sync = function (callback) {
|
loader.prototype._loadTilesets_sync = function (callback) {
|
||||||
core.material.images.tilesets = {};
|
core.material.images.tilesets = {};
|
||||||
this._setStartLoadTipText("正在加载额外素材...");
|
this._setStartLoadTipText("正在加载额外素材...");
|
||||||
this.loadImages("tilesets", core.tilesets, core.material.images.tilesets, function () {
|
this.loadImages(
|
||||||
|
"tilesets",
|
||||||
|
core.tilesets,
|
||||||
|
core.material.images.tilesets,
|
||||||
|
function () {
|
||||||
core.loader._loadTilesets_afterLoad();
|
core.loader._loadTilesets_afterLoad();
|
||||||
callback();
|
callback();
|
||||||
});
|
}
|
||||||
}
|
);
|
||||||
|
};
|
||||||
|
|
||||||
loader.prototype._loadTilesets_async = function (onprogress, onfinished) {
|
loader.prototype._loadTilesets_async = function (onprogress, onfinished) {
|
||||||
core.material.images.tilesets = {};
|
core.material.images.tilesets = {};
|
||||||
this.loadImagesFromZip('project/tilesets/tilesets.h5data', core.tilesets, core.material.images.tilesets, onprogress, function () {
|
this.loadImagesFromZip(
|
||||||
|
"project/tilesets/tilesets.h5data",
|
||||||
|
core.tilesets,
|
||||||
|
core.material.images.tilesets,
|
||||||
|
onprogress,
|
||||||
|
function () {
|
||||||
core.loader._loadTilesets_afterLoad();
|
core.loader._loadTilesets_afterLoad();
|
||||||
onfinished();
|
onfinished();
|
||||||
});
|
}
|
||||||
}
|
);
|
||||||
|
};
|
||||||
|
|
||||||
loader.prototype._loadTilesets_chunked = async function (chunks, makeOnProgress, makeOnFinished) {
|
loader.prototype._loadTilesets_chunked = async function (
|
||||||
|
chunks,
|
||||||
|
makeOnProgress,
|
||||||
|
makeOnFinished
|
||||||
|
) {
|
||||||
core.material.images.tilesets = {};
|
core.material.images.tilesets = {};
|
||||||
await this._loadImagesFromChunks(chunks, core.tilesets, core.material.images.tilesets, makeOnProgress, makeOnFinished);
|
await this._loadImagesFromChunks(
|
||||||
|
chunks,
|
||||||
|
core.tilesets,
|
||||||
|
core.material.images.tilesets,
|
||||||
|
makeOnProgress,
|
||||||
|
makeOnFinished
|
||||||
|
);
|
||||||
core.loader._loadTilesets_afterLoad();
|
core.loader._loadTilesets_afterLoad();
|
||||||
}
|
};
|
||||||
|
|
||||||
loader.prototype._loadTilesets_afterLoad = function () {
|
loader.prototype._loadTilesets_afterLoad = function () {
|
||||||
// 检查宽高是32倍数,如果出错在控制台报错
|
// 检查宽高是32倍数,如果出错在控制台报错
|
||||||
@ -264,7 +383,7 @@ loader.prototype._loadTilesets_afterLoad = function () {
|
|||||||
console.warn("警告!" + imgName + "上的图块素材个数大于3000!");
|
console.warn("警告!" + imgName + "上的图块素材个数大于3000!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
// ------ 实际加载一系列图片 ------ //
|
// ------ 实际加载一系列图片 ------ //
|
||||||
|
|
||||||
@ -276,10 +395,9 @@ loader.prototype.loadImages = function (dir, names, toSave, callback) {
|
|||||||
var items = 0;
|
var items = 0;
|
||||||
for (var i = 0; i < names.length; i++) {
|
for (var i = 0; i < names.length; i++) {
|
||||||
this.loadImage(dir, names[i], function (id, image) {
|
this.loadImage(dir, names[i], function (id, image) {
|
||||||
core.loader._setStartLoadTipText('正在加载图片 ' + id + "...");
|
core.loader._setStartLoadTipText("正在加载图片 " + id + "...");
|
||||||
if (toSave[id] !== undefined) {
|
if (toSave[id] !== undefined) {
|
||||||
if (image != null)
|
if (image != null) toSave[id] = image;
|
||||||
toSave[id] = image;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
toSave[id] = image;
|
toSave[id] = image;
|
||||||
@ -288,46 +406,51 @@ loader.prototype.loadImages = function (dir, names, toSave, callback) {
|
|||||||
if (items == names.length) {
|
if (items == names.length) {
|
||||||
if (callback) callback();
|
if (callback) callback();
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
loader.prototype.loadImage = function (dir, imgName, callback) {
|
loader.prototype.loadImage = function (dir, imgName, callback) {
|
||||||
try {
|
try {
|
||||||
var name = imgName;
|
var name = imgName;
|
||||||
if (name.indexOf(".") < 0)
|
if (name.indexOf(".") < 0) name = name + ".png";
|
||||||
name = name + ".png";
|
|
||||||
var image = new Image();
|
var image = new Image();
|
||||||
image.onload = function () {
|
image.onload = function () {
|
||||||
image.setAttribute('_width', image.width);
|
image.setAttribute("_width", image.width);
|
||||||
image.setAttribute('_height', image.height);
|
image.setAttribute("_height", image.height);
|
||||||
callback(imgName, image);
|
callback(imgName, image);
|
||||||
}
|
};
|
||||||
image.onerror = function () {
|
image.onerror = function () {
|
||||||
callback(imgName, null);
|
callback(imgName, null);
|
||||||
}
|
};
|
||||||
image.src = 'project/' + dir + '/' + name + "?v=" + main.version;
|
image.src = "project/" + dir + "/" + name + "?v=" + main.version;
|
||||||
if (name.endsWith('.gif'))
|
if (name.endsWith(".gif")) callback(imgName, null);
|
||||||
callback(imgName, null);
|
} catch (e) {
|
||||||
}
|
|
||||||
catch (e) {
|
|
||||||
console.error(e);
|
console.error(e);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
// ------ 从zip中加载一系列图片 ------ //
|
// ------ 从zip中加载一系列图片 ------ //
|
||||||
|
|
||||||
loader.prototype.loadImagesFromZip = function (url, names, toSave, onprogress, onfinished) {
|
loader.prototype.loadImagesFromZip = function (
|
||||||
|
url,
|
||||||
|
names,
|
||||||
|
toSave,
|
||||||
|
onprogress,
|
||||||
|
onfinished
|
||||||
|
) {
|
||||||
if (!names || names.length == 0) {
|
if (!names || names.length == 0) {
|
||||||
if (onfinished) onfinished();
|
if (onfinished) onfinished();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
core.unzip(url + "?v=" + main.version, function (data) {
|
core.unzip(
|
||||||
|
url + "?v=" + main.version,
|
||||||
|
function (data) {
|
||||||
var cnt = 1;
|
var cnt = 1;
|
||||||
names.forEach(function (name) {
|
names.forEach(function (name) {
|
||||||
var imgName = name;
|
var imgName = name;
|
||||||
if (imgName.indexOf('.') < 0) imgName += '.png';
|
if (imgName.indexOf(".") < 0) imgName += ".png";
|
||||||
if (imgName in data) {
|
if (imgName in data) {
|
||||||
var img = new Image();
|
var img = new Image();
|
||||||
var url = URL.createObjectURL(data[imgName]);
|
var url = URL.createObjectURL(data[imgName]);
|
||||||
@ -335,21 +458,32 @@ loader.prototype.loadImagesFromZip = function (url, names, toSave, onprogress, o
|
|||||||
img.onload = function () {
|
img.onload = function () {
|
||||||
cnt--;
|
cnt--;
|
||||||
URL.revokeObjectURL(url);
|
URL.revokeObjectURL(url);
|
||||||
img.setAttribute('_width', img.width);
|
img.setAttribute("_width", img.width);
|
||||||
img.setAttribute('_height', img.height);
|
img.setAttribute("_height", img.height);
|
||||||
if (cnt == 0 && onfinished) onfinished();
|
if (cnt == 0 && onfinished) onfinished();
|
||||||
}
|
};
|
||||||
img.src = url;
|
img.src = url;
|
||||||
toSave[name] = img;
|
toSave[name] = img;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
cnt--;
|
cnt--;
|
||||||
if (cnt == 0 && onfinished) onfinished();
|
if (cnt == 0 && onfinished) onfinished();
|
||||||
}, null, false, onprogress);
|
},
|
||||||
}
|
null,
|
||||||
|
false,
|
||||||
|
onprogress
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
loader.prototype._loadImagesFromChunks = async function (chunks, names, toSave, makeOnProgress, makeOnFinished) {
|
loader.prototype._loadImagesFromChunks = async function (
|
||||||
await Promise.all(chunks.map((chunk) => {
|
chunks,
|
||||||
|
names,
|
||||||
|
toSave,
|
||||||
|
makeOnProgress,
|
||||||
|
makeOnFinished
|
||||||
|
) {
|
||||||
|
await Promise.all(
|
||||||
|
chunks.map((chunk) => {
|
||||||
const onfinished = makeOnFinished(chunk);
|
const onfinished = makeOnFinished(chunk);
|
||||||
const onprogress = makeOnProgress(chunk);
|
const onprogress = makeOnProgress(chunk);
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
@ -358,8 +492,9 @@ loader.prototype._loadImagesFromChunks = async function (chunks, names, toSave,
|
|||||||
resolve();
|
resolve();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}));
|
})
|
||||||
}
|
);
|
||||||
|
};
|
||||||
|
|
||||||
// ------ 加载动画文件 ------ //
|
// ------ 加载动画文件 ------ //
|
||||||
|
|
||||||
@ -368,37 +503,67 @@ loader.prototype._loadAnimates_sync = function () {
|
|||||||
|
|
||||||
if (main.supportBunch) {
|
if (main.supportBunch) {
|
||||||
if (core.animates.length > 0) {
|
if (core.animates.length > 0) {
|
||||||
core.http('GET', '__all_animates__?v=' + main.version + '&id=' + core.animates.join(','), null, function (content) {
|
core.http(
|
||||||
var u = content.split('@@@~~~###~~~@@@');
|
"GET",
|
||||||
|
"__all_animates__?v=" + main.version + "&id=" + core.animates.join(","),
|
||||||
|
null,
|
||||||
|
function (content) {
|
||||||
|
var u = content.split("@@@~~~###~~~@@@");
|
||||||
for (var i = 0; i < core.animates.length; ++i) {
|
for (var i = 0; i < core.animates.length; ++i) {
|
||||||
if (u[i] != '') {
|
if (u[i] != "") {
|
||||||
core.material.animates[core.animates[i]] = core.loader._loadAnimate(u[i]);
|
core.material.animates[core.animates[i]] =
|
||||||
|
core.loader._loadAnimate(u[i]);
|
||||||
} else {
|
} else {
|
||||||
console.error('无法找到动画文件' + core.animates[i] + '!');
|
console.error("无法找到动画文件" + core.animates[i] + "!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, "text/plain; charset=x-user-defined");
|
},
|
||||||
|
"text/plain; charset=x-user-defined"
|
||||||
|
);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
core.animates.forEach(function (t) {
|
core.animates.forEach(function (t) {
|
||||||
core.http('GET', 'project/animates/' + t + ".animate?v=" + main.version, null, function (content) {
|
core.http(
|
||||||
|
"GET",
|
||||||
|
"project/animates/" + t + ".animate?v=" + main.version,
|
||||||
|
null,
|
||||||
|
function (content) {
|
||||||
core.material.animates[t] = core.loader._loadAnimate(content);
|
core.material.animates[t] = core.loader._loadAnimate(content);
|
||||||
}, function (e) {
|
},
|
||||||
|
function (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
core.material.animates[t] = null;
|
core.material.animates[t] = null;
|
||||||
}, "text/plain; charset=x-user-defined")
|
},
|
||||||
|
"text/plain; charset=x-user-defined"
|
||||||
|
);
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
loader.prototype._loadAnimates_async = function (onprogress, onfinished) {
|
loader.prototype._loadAnimates_async = function (onprogress, onfinished) {
|
||||||
this._loadFileFromZip('project/animates/animates.h5data', this._saveAnimate, true, onprogress, onfinished);
|
this._loadFileFromZip(
|
||||||
}
|
"project/animates/animates.h5data",
|
||||||
|
this._saveAnimate,
|
||||||
|
true,
|
||||||
|
onprogress,
|
||||||
|
onfinished
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
loader.prototype._loadAnimates_chunked = function (chunks, makeOnProgress, makeOnFinished) {
|
loader.prototype._loadAnimates_chunked = function (
|
||||||
this._loadFileFromChunks(chunks, this._saveAnimate, true, makeOnProgress, makeOnFinished);
|
chunks,
|
||||||
}
|
makeOnProgress,
|
||||||
|
makeOnFinished
|
||||||
|
) {
|
||||||
|
this._loadFileFromChunks(
|
||||||
|
chunks,
|
||||||
|
this._saveAnimate,
|
||||||
|
true,
|
||||||
|
makeOnProgress,
|
||||||
|
makeOnFinished
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
loader.prototype._saveAnimate = function (animates, onfinished) {
|
loader.prototype._saveAnimate = function (animates, onfinished) {
|
||||||
for (var name in animates) {
|
for (var name in animates) {
|
||||||
@ -409,7 +574,7 @@ loader.prototype._saveAnimate = function (animates, onfinished) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
onfinished();
|
onfinished();
|
||||||
}
|
};
|
||||||
|
|
||||||
loader.prototype._loadAnimate = function (content) {
|
loader.prototype._loadAnimate = function (content) {
|
||||||
try {
|
try {
|
||||||
@ -422,8 +587,7 @@ loader.prototype._loadAnimate = function (content) {
|
|||||||
content.bitmaps.forEach(function (t2) {
|
content.bitmaps.forEach(function (t2) {
|
||||||
if (!t2) {
|
if (!t2) {
|
||||||
data.images.push(null);
|
data.images.push(null);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
try {
|
try {
|
||||||
var image = new Image();
|
var image = new Image();
|
||||||
image.src = t2;
|
image.src = t2;
|
||||||
@ -433,31 +597,30 @@ loader.prototype._loadAnimate = function (content) {
|
|||||||
data.images.push(null);
|
data.images.push(null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
});
|
||||||
data.frame = content.frame_max;
|
data.frame = content.frame_max;
|
||||||
data.frames = [];
|
data.frames = [];
|
||||||
content.frames.forEach(function (t2) {
|
content.frames.forEach(function (t2) {
|
||||||
var info = [];
|
var info = [];
|
||||||
t2.forEach(function (t3) {
|
t2.forEach(function (t3) {
|
||||||
info.push({
|
info.push({
|
||||||
'index': t3[0],
|
index: t3[0],
|
||||||
'x': t3[1],
|
x: t3[1],
|
||||||
'y': t3[2],
|
y: t3[2],
|
||||||
'zoom': t3[3],
|
zoom: t3[3],
|
||||||
'opacity': t3[4],
|
opacity: t3[4],
|
||||||
'mirror': t3[5] || 0,
|
mirror: t3[5] || 0,
|
||||||
'angle': t3[6] || 0,
|
angle: t3[6] || 0,
|
||||||
})
|
});
|
||||||
})
|
});
|
||||||
data.frames.push(info);
|
data.frames.push(info);
|
||||||
});
|
});
|
||||||
return data;
|
return data;
|
||||||
}
|
} catch (e) {
|
||||||
catch (e) {
|
|
||||||
console.error(e);
|
console.error(e);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
// ------ 加载音乐和音效 ------ //
|
// ------ 加载音乐和音效 ------ //
|
||||||
|
|
||||||
@ -467,22 +630,38 @@ loader.prototype._loadMusics = function () {
|
|||||||
});
|
});
|
||||||
// 直接开始播放
|
// 直接开始播放
|
||||||
core.playBgm(main.startBgm);
|
core.playBgm(main.startBgm);
|
||||||
}
|
};
|
||||||
|
|
||||||
loader.prototype._loadSounds_sync = function () {
|
loader.prototype._loadSounds_sync = function () {
|
||||||
this._setStartLoadTipText("正在加载音效文件...");
|
this._setStartLoadTipText("正在加载音效文件...");
|
||||||
core.sounds.forEach(function (t) {
|
core.sounds.forEach(function (t) {
|
||||||
core.loader.loadOneSound(t);
|
core.loader.loadOneSound(t);
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
loader.prototype._loadSounds_async = function (onprogress, onfinished) {
|
loader.prototype._loadSounds_async = function (onprogress, onfinished) {
|
||||||
this._loadFileFromZip('project/sounds/sounds.h5data', this._saveSounds, false, onprogress, onfinished);
|
this._loadFileFromZip(
|
||||||
}
|
"project/sounds/sounds.h5data",
|
||||||
|
this._saveSounds,
|
||||||
|
false,
|
||||||
|
onprogress,
|
||||||
|
onfinished
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
loader.prototype._loadSounds_chunked = function (chunks, makeOnProgress, makeOnFinished) {
|
loader.prototype._loadSounds_chunked = function (
|
||||||
this._loadFileFromChunks(chunks, this._saveSounds, false, makeOnProgress, makeOnFinished);
|
chunks,
|
||||||
}
|
makeOnProgress,
|
||||||
|
makeOnFinished
|
||||||
|
) {
|
||||||
|
this._loadFileFromChunks(
|
||||||
|
chunks,
|
||||||
|
this._saveSounds,
|
||||||
|
false,
|
||||||
|
makeOnProgress,
|
||||||
|
makeOnFinished
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
loader.prototype._saveSounds = function (data, onfinished) {
|
loader.prototype._saveSounds = function (data, onfinished) {
|
||||||
// 延迟解析
|
// 延迟解析
|
||||||
@ -494,25 +673,34 @@ loader.prototype._saveSounds = function (data, onfinished) {
|
|||||||
}
|
}
|
||||||
onfinished();
|
onfinished();
|
||||||
});
|
});
|
||||||
}
|
};
|
||||||
|
|
||||||
loader.prototype.loadOneMusic = function (name) {
|
loader.prototype.loadOneMusic = function (name) {
|
||||||
var music = new Audio();
|
var music = new Audio();
|
||||||
music.preload = 'none';
|
music.preload = "none";
|
||||||
if (main.bgmRemote) music.src = main.bgmRemoteRoot + core.firstData.name + '/' + name;
|
if (main.bgmRemote)
|
||||||
else music.src = 'project/bgms/' + name;
|
music.src = main.bgmRemoteRoot + core.firstData.name + "/" + name;
|
||||||
music.loop = 'loop';
|
else music.src = "project/bgms/" + name;
|
||||||
|
music.loop = "loop";
|
||||||
core.material.bgms[name] = music;
|
core.material.bgms[name] = music;
|
||||||
}
|
};
|
||||||
|
|
||||||
loader.prototype.loadOneSound = function (name) {
|
loader.prototype.loadOneSound = function (name) {
|
||||||
core.http('GET', 'project/sounds/' + name + "?v=" + main.version, null, function (data) {
|
core.http(
|
||||||
|
"GET",
|
||||||
|
"project/sounds/" + name + "?v=" + main.version,
|
||||||
|
null,
|
||||||
|
function (data) {
|
||||||
core.loader._loadOneSound_decodeData(name, data);
|
core.loader._loadOneSound_decodeData(name, data);
|
||||||
}, function (e) {
|
},
|
||||||
|
function (e) {
|
||||||
console.error(e);
|
console.error(e);
|
||||||
core.material.sounds[name] = null;
|
core.material.sounds[name] = null;
|
||||||
}, null, 'arraybuffer');
|
},
|
||||||
}
|
null,
|
||||||
|
"arraybuffer"
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
loader.prototype._loadOneSound_decodeData = function (name, data) {
|
loader.prototype._loadOneSound_decodeData = function (name, data) {
|
||||||
if (data instanceof Blob) {
|
if (data instanceof Blob) {
|
||||||
@ -520,23 +708,26 @@ loader.prototype._loadOneSound_decodeData = function (name, data) {
|
|||||||
blobReader.init(function () {
|
blobReader.init(function () {
|
||||||
blobReader.readUint8Array(0, blobReader.size, function (uint8) {
|
blobReader.readUint8Array(0, blobReader.size, function (uint8) {
|
||||||
core.loader._loadOneSound_decodeData(name, uint8.buffer);
|
core.loader._loadOneSound_decodeData(name, uint8.buffer);
|
||||||
})
|
});
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
core.musicStatus.audioContext.decodeAudioData(data, function (buffer) {
|
core.musicStatus.audioContext.decodeAudioData(
|
||||||
|
data,
|
||||||
|
function (buffer) {
|
||||||
core.material.sounds[name] = buffer;
|
core.material.sounds[name] = buffer;
|
||||||
}, function (e) {
|
},
|
||||||
console.error(e);
|
function (e) {
|
||||||
core.material.sounds[name] = null;
|
|
||||||
})
|
|
||||||
}
|
|
||||||
catch (e) {
|
|
||||||
console.error(e);
|
console.error(e);
|
||||||
core.material.sounds[name] = null;
|
core.material.sounds[name] = null;
|
||||||
}
|
}
|
||||||
}
|
);
|
||||||
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
|
core.material.sounds[name] = null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
loader.prototype.loadBgm = function (name) {
|
loader.prototype.loadBgm = function (name) {
|
||||||
name = core.getMappedName(name);
|
name = core.getMappedName(name);
|
||||||
@ -547,8 +738,7 @@ loader.prototype.loadBgm = function (name) {
|
|||||||
var index = core.musicStatus.cachedBgms.indexOf(name);
|
var index = core.musicStatus.cachedBgms.indexOf(name);
|
||||||
if (index >= 0) {
|
if (index >= 0) {
|
||||||
core.musicStatus.cachedBgms.splice(index, 1);
|
core.musicStatus.cachedBgms.splice(index, 1);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
// 预加载BGM
|
// 预加载BGM
|
||||||
this._preloadBgm(core.material.bgms[name]);
|
this._preloadBgm(core.material.bgms[name]);
|
||||||
// core.material.bgms[name].load();
|
// core.material.bgms[name].load();
|
||||||
@ -559,18 +749,20 @@ loader.prototype.loadBgm = function (name) {
|
|||||||
}
|
}
|
||||||
// 移动到缓存最前方
|
// 移动到缓存最前方
|
||||||
core.musicStatus.cachedBgms.unshift(name);
|
core.musicStatus.cachedBgms.unshift(name);
|
||||||
}
|
};
|
||||||
|
|
||||||
loader.prototype._preloadBgm = function (bgm) {
|
loader.prototype._preloadBgm = function (bgm) {
|
||||||
bgm.volume = 0;
|
bgm.volume = 0;
|
||||||
bgm.play();
|
bgm.play();
|
||||||
}
|
};
|
||||||
|
|
||||||
loader.prototype.freeBgm = function (name) {
|
loader.prototype.freeBgm = function (name) {
|
||||||
name = core.getMappedName(name);
|
name = core.getMappedName(name);
|
||||||
if (!core.material.bgms[name]) return;
|
if (!core.material.bgms[name]) return;
|
||||||
// 从cachedBgms中删除
|
// 从cachedBgms中删除
|
||||||
core.musicStatus.cachedBgms = core.musicStatus.cachedBgms.filter(function (t) {
|
core.musicStatus.cachedBgms = core.musicStatus.cachedBgms.filter(function (
|
||||||
|
t
|
||||||
|
) {
|
||||||
return t != name;
|
return t != name;
|
||||||
});
|
});
|
||||||
// 清掉缓存
|
// 清掉缓存
|
||||||
@ -584,16 +776,35 @@ loader.prototype.freeBgm = function (name) {
|
|||||||
setTimeout(function () {
|
setTimeout(function () {
|
||||||
core.loader.loadOneMusic(name);
|
core.loader.loadOneMusic(name);
|
||||||
}, 3000);
|
}, 3000);
|
||||||
}
|
};
|
||||||
|
|
||||||
loader.prototype._loadFileFromZip = function (url, save, convertToText, onprogress, onfinished) {
|
loader.prototype._loadFileFromZip = function (
|
||||||
core.unzip(url + '?v=' + main.version, function (data) {
|
url,
|
||||||
|
save,
|
||||||
|
convertToText,
|
||||||
|
onprogress,
|
||||||
|
onfinished
|
||||||
|
) {
|
||||||
|
core.unzip(
|
||||||
|
url + "?v=" + main.version,
|
||||||
|
function (data) {
|
||||||
save(data, onfinished);
|
save(data, onfinished);
|
||||||
}, null, convertToText, onprogress);
|
},
|
||||||
}
|
null,
|
||||||
|
convertToText,
|
||||||
|
onprogress
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
loader.prototype._loadFileFromChunks = async function (chunks, save, convertToText, makeOnProgress, makeOnFinished) {
|
loader.prototype._loadFileFromChunks = async function (
|
||||||
await Promise.all(chunks.map((chunk) => {
|
chunks,
|
||||||
|
save,
|
||||||
|
convertToText,
|
||||||
|
makeOnProgress,
|
||||||
|
makeOnFinished
|
||||||
|
) {
|
||||||
|
await Promise.all(
|
||||||
|
chunks.map((chunk) => {
|
||||||
const onfinished = makeOnFinished(chunk);
|
const onfinished = makeOnFinished(chunk);
|
||||||
const onprogress = makeOnProgress(chunk);
|
const onprogress = makeOnProgress(chunk);
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
@ -602,5 +813,6 @@ loader.prototype._loadFileFromChunks = async function (chunks, save, convertToTe
|
|||||||
resolve();
|
resolve();
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}));
|
})
|
||||||
}
|
);
|
||||||
|
};
|
||||||
|
6
main.js
6
main.js
@ -909,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("");
|
||||||
@ -922,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();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Binary file not shown.
BIN
project/bgms/theme.opus
Normal file
BIN
project/bgms/theme.opus
Normal file
Binary file not shown.
@ -905,7 +905,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
|
|||||||
"Halbmond.opus",
|
"Halbmond.opus",
|
||||||
"ed.opus",
|
"ed.opus",
|
||||||
"op.opus",
|
"op.opus",
|
||||||
"theme.mp3"
|
"theme.opus"
|
||||||
],
|
],
|
||||||
"sounds": [
|
"sounds": [
|
||||||
"aiy010000010.opus",
|
"aiy010000010.opus",
|
||||||
@ -998,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",
|
||||||
@ -1062,7 +1061,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
|
|||||||
"饰品",
|
"饰品",
|
||||||
"饰品"
|
"饰品"
|
||||||
],
|
],
|
||||||
"startBgm": "theme.mp3",
|
"startBgm": "theme.opus",
|
||||||
"styles": {
|
"styles": {
|
||||||
"startBackground": "project/images/background.webp",
|
"startBackground": "project/images/background.webp",
|
||||||
"startVerticalBackground": "project/images/backgroundvertical.webp",
|
"startVerticalBackground": "project/images/backgroundvertical.webp",
|
||||||
@ -1446,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",
|
||||||
|
@ -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]},
|
||||||
|
1430
project/events.js
1430
project/events.js
File diff suppressed because it is too large
Load Diff
@ -46,6 +46,12 @@ main.floors.street01=
|
|||||||
{
|
{
|
||||||
"type": "setmusics"
|
"type": "setmusics"
|
||||||
}
|
}
|
||||||
|
],
|
||||||
|
"6,11": [
|
||||||
|
{
|
||||||
|
"type": "insert",
|
||||||
|
"name": "chapter01"
|
||||||
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"changeFloor": {
|
"changeFloor": {
|
||||||
|
@ -160,7 +160,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
|||||||
|
|
||||||
// ...可以新增一些其他内容,比如创建个画布在右上角显示什么内容等等
|
// ...可以新增一些其他内容,比如创建个画布在右上角显示什么内容等等
|
||||||
|
|
||||||
},
|
},
|
||||||
"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 |
@ -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": {
|
||||||
|
2066
project/plugins.js
2066
project/plugins.js
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user