Compare commits

...

2 Commits

Author SHA1 Message Date
6e2b99b4f8 Merge branch 'status' into story-laodeng 2025-01-06 17:01:56 +08:00
9e7f168956 帧动画/特效 2025-01-06 17:00:58 +08:00
8 changed files with 2038 additions and 1662 deletions

View File

@ -871,6 +871,10 @@ action
| disableShop_s | disableShop_s
| follow_s | follow_s
| unfollow_s | unfollow_s
| setanimate_s
| deleteanimate_s
| playanimate_s
| clearanimate_s
| animate_s | animate_s
| animate_1_s | animate_1_s
| stopAnimate_s | stopAnimate_s
@ -2221,6 +2225,136 @@ var code = '{"type": "vibrate", "direction": "'+Vibrate_List_0+'", "time": '+Int
return code; return code;
*/; */;
setanimate_s
: '新建 帧动画/特效' '名称' EvalString '参照点偏移像素x' IntString? 'y' IntString? '动画大小 宽' IntString '高' IntString '总帧数' IntString BGNL?Newline
'图片序列同一帧后面覆盖先前的默认起始帧为0结束帧为最后一帧)'BGNL?Newline
'(剪裁区域不填写为全图,绘制区域不填写为全画面)'BGNL?Newline
'(透明度100为不透明默认为不透明结束透明度默认与开始透明度相同'BGNL?Newline
animateDrawableimage+? Newline
'音频序列(到达对应帧进行播放)'BGNL?Newline
animateDrawablesound+? Newline
/* setanimate_s
tooltip : setanimate:设置帧动画/特效(此项仅储存,不播放)
helpUrl : /_docs/#/instruction
default : ["sword","","",192,192,60]
colour : this.soundColor
IntString_0 = IntString_0 ? (', "px": '+IntString_0+'') : '';
IntString_1 = IntString_1 ? (', "py": '+IntString_1+'') : '';
var imageList=animateDrawableimage_0?',"imageList": [\n'+animateDrawableimage_0.slice(0,-1)+'\n]':''
var soundList=animateDrawablesound_0?',"soundList": [\n'+animateDrawablesound_0.slice(0,-1)+'\n]':''
var code = '{"type": "setanimate", "name": "'+EvalString_0+'",'+IntString_0+IntString_1+' "width": '+IntString_2+', "height": '+IntString_3+', "allFarme": '+IntString_4+imageList+soundList+'},\n';
return code;
*/;
animateDrawableList
: animateDrawableimage
| animateDrawablesound
| animateDrawabletextEmpty;
animateDrawableimage
: '图片' EvalString? '起始帧' IntString? '起始透明度' IntString? BGNL? Newline
'剪裁坐标cx' IntString? 'cy' IntString? '宽' IntString? '高' IntString? '绘制坐标x'IntString? 'y' IntString? '宽' IntString? '高' IntString?'旋转角度'IntString? BGNL? Newline
'结束帧' IntString? '结束透明度' IntString? '剪裁坐标cx' IntString? 'cy' IntString? '宽' IntString? '高' IntString? '绘制坐标x'IntString? 'y' IntString? '宽' IntString? '高' IntString?'旋转角度'IntString? Newline
/* animateDrawableimage
tooltip : 帧动画图片列表
helpUrl : /_docs/#/instruction
default : ["","","","","","","","","","","","","","","","","","","","","","",""]
colour : this.subColor
allImages : ['EvalString_0']
if (IntString_1&&(IntString_1 < 0||IntString_1>100)) throw new Error('透明度范围为0-100,0为透明,100为不透明,不填默认为不透明')
if (IntString_12&&(IntString_12 < 0||IntString_12>100)) throw new Error('透明度范围为0-100,0为透明,100为不透明,不填默认为不透明')
IntString_0 = IntString_0 ? (', "beforefarme": '+IntString_0+'') : '';
IntString_1 = IntString_1 ? (', "globalAlpha": '+IntString_1+'') : '';
IntString_2 = IntString_2 ? (', "cx": '+IntString_2+'') : '';
IntString_3 = IntString_3 ? (', "cy": '+IntString_3+'') : '';
IntString_4 = IntString_4 ? (', "cw": '+IntString_4+'') : '';
IntString_5 = IntString_5 ? (', "ch": '+IntString_5+'') : '';
IntString_6 = IntString_6 ? (', "x": '+IntString_6+'') : '';
IntString_7 = IntString_7 ? (', "y": '+IntString_7+'') : '';
IntString_8 = IntString_8 ? (', "w": '+IntString_8+'') : '';
IntString_9 = IntString_9 ? (', "h": '+IntString_9+'') : '';
IntString_10 = IntString_10 ? (', "angle": '+IntString_10+'') : '';
IntString_11 = IntString_11 ? (', "afterfarme": '+IntString_11+'') : '';
IntString_12 = IntString_12 ? (', "aglobalAlpha": '+IntString_12+'') : '';
IntString_13 = IntString_13 ? (', "acx": '+IntString_13+'') : '';
IntString_14 = IntString_14 ? (', "acy": '+IntString_14+'') : '';
IntString_15 = IntString_15? (', "acw": '+IntString_15+'') : '';
IntString_16 = IntString_16 ? (', "ach": '+IntString_16+'') : '';
IntString_17 = IntString_17 ? (', "ax": '+IntString_17+'') : '';
IntString_18 = IntString_18 ? (', "ay": '+IntString_18+'') : '';
IntString_19 = IntString_19 ? (', "aw": '+IntString_19+'') : '';
IntString_20 = IntString_20 ? (', "ah": '+IntString_20+'') : '';
IntString_21 = IntString_21 ? (', "aangle": '+IntString_21+'') : '';
return '{ "image":"'+EvalString_0+'"'+IntString_0+IntString_1+IntString_2+IntString_3+IntString_4+IntString_5+IntString_6+IntString_7+IntString_8+IntString_9+IntString_10+IntString_11+IntString_12+IntString_13+IntString_14+IntString_15+IntString_16+IntString_17+IntString_18+IntString_19+IntString_20+IntString_21+'},'
*/;
animateDrawablesound
: '音效' EvalString? '起始帧' IntString '是否停止其他音效'Bool Newline
/* animateDrawablesound
tooltip : 帧动画配音
helpUrl : /_docs/#/instruction
default : ["",0,false]
colour : this.subColor
allSounds : ['EvalString_0']
return '{ "sound":"'+EvalString_0+'","startfarme":'+IntString_0+',"stopbefore":'+Bool_0+'},'
*/;
animateDrawabletextEmpty
: Newline
/* animateDrawabletextEmpty
var code = [];
return code;
*/;
deleteanimate_s
: '删除 帧动画/特效' '名称' EvalString Newline
/* deleteanimate_s
tooltip : deleteanimate:删除储存的帧动画
helpUrl : /_docs/#/instruction
default : [""]
colour : this.soundColor
var code = '{"type": "deleteanimate", "name": "'+EvalString_0+'"},\n';
return code;
*/;
playanimate_s
: '播放 帧动画/特效' '名称' EvalString '像素x' IntString? 'y' IntString? '跟随勇士' Bool 'x方向缩放' IntString? 'y方向缩放'IntString? Newline
/* playanimate_s
tooltip : playanimate:播放帧动画选择跟随勇士后x、y将失效改为勇士中心坐标
helpUrl : /_docs/#/instruction
default : ["zone","","",false,"",""]
colour : this.soundColor
IntString_0 = IntString_0 ? (', "x": '+IntString_0+'') : '';
IntString_1 = IntString_1 ? (', "y": '+IntString_1+'') : '';
IntString_2 = IntString_2 ? (', "scalex": '+IntString_2+'') : '';
IntString_3 = IntString_3 ? (', "scaley": '+IntString_3+'') : '';
var code = '{"type": "playanimate", "name": "'+EvalString_0+'"'+IntString_0+IntString_1+',"hero":'+Bool_0+IntString_2+IntString_3+'},\n';
return code;
*/;
clearanimate_s
: '清空正在播放的帧动画/特效'
/* clearanimate_s
tooltip : clearanimate:清空正在播放的帧动画
helpUrl : /_docs/#/instruction
colour : this.soundColor
var code = '{"type": "clearanimate"},\n';
return code;
*/;
animate_s animate_s
: '显示动画' EvalString '位置' 'x' PosString? 'y' PosString? '相对窗口坐标' Bool '不等待执行完毕' Bool Newline : '显示动画' EvalString '位置' 'x' PosString? 'y' PosString? '相对窗口坐标' Bool '不等待执行完毕' Bool Newline

View File

@ -703,6 +703,85 @@ MotaActionParser = function () {
this.next, this.next,
]); ]);
break; break;
case "setanimate":
var buildanimateDrawableimage = function (obj) {
obj = MotaActionFunctions.processanimateDrawableimage(obj || []);
var res = null;
for (var ii = obj.length - 1, one; (one = obj[ii]); ii--) {
res = MotaActionBlocks["animateDrawableimage"].xmlText([
one[0],
one[1],
one[2],
one[3],
one[4],
one[5],
one[6],
one[7],
one[8],
one[9],
one[10],
one[11],
one[12],
one[13],
one[14],
one[15],
one[16],
one[17],
one[18],
one[19],
one[20],
one[21],
one[22],
res,
]);
}
return res;
};
var buildanimateDrawablesound = function (obj) {
obj = MotaActionFunctions.processanimateDrawablesound(obj || []);
var res = null;
for (var ii = obj.length - 1, one; (one = obj[ii]); ii--) {
res = MotaActionBlocks["animateDrawablesound"].xmlText([
one[0],
one[1],
one[2],
res,
]);
}
return res;
};
this.next = MotaActionBlocks["setanimate_s"].xmlText([
data.name,
data.px,
data.py,
data.width,
data.height,
data.allFarme,
buildanimateDrawableimage(data.imageList),
buildanimateDrawablesound(data.soundList),
this.next,
]);
break;
case "clearanimate":
this.next = MotaActionBlocks["clearanimate_s"].xmlText([this.next]);
break;
case "deleteanimate":
this.next = MotaActionBlocks["deleteanimate_s"].xmlText([
this.name,
this.next,
]);
break;
case "playanimate":
this.next = MotaActionBlocks["playanimate_s"].xmlText([
this.name,
this.x,
this.y,
this.hero,
this.scalex,
this.scaley,
this.next,
]);
break;
case "animationDrawable": case "animationDrawable":
var buildanimationDrawableimage = function (obj) { var buildanimationDrawableimage = function (obj) {
obj = MotaActionFunctions.processanimationDrawableimage(obj || []); obj = MotaActionFunctions.processanimationDrawableimage(obj || []);
@ -2876,7 +2955,44 @@ MotaActionParser = function () {
}); });
return list; return list;
}; };
MotaActionFunctions.processanimateDrawableimage = function (overList) {
var list = [];
overList.forEach(function (one) {
list.push([
one.image,
one.beforefarme,
one.globalAlpha,
one.cx,
one.cy,
one.cw,
one.ch,
one.x,
one.y,
one.w,
one.h,
one.angle,
one.afterfarme,
one.aglobalAlpha,
one.acx,
one.acy,
one.acw,
one.ach,
one.ax,
one.ay,
one.aw,
one.ah,
one.aangle,
]);
});
return list;
};
MotaActionFunctions.processanimateDrawablesound = function (overList) {
var list = [];
overList.forEach(function (one) {
list.push([one.sound, one.startfarme, one.stopbefore]);
});
return list;
};
MotaActionFunctions.processMultiLoc = function (EvalString_0, EvalString_1) { MotaActionFunctions.processMultiLoc = function (EvalString_0, EvalString_1) {
var floorstr = ""; var floorstr = "";
if (EvalString_0 && EvalString_1) { if (EvalString_0 && EvalString_1) {

View File

@ -1,6 +1,6 @@
{ {
"viewportLoc": [0, 0], "viewportLoc": [0, 0],
"editorLastFloorId": "yiqu2", "editorLastFloorId": "jiedao",
"lastUsed": [ "lastUsed": [
{ {
"idnum": 210, "idnum": 210,

View File

@ -57,7 +57,6 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
"dl.webp", "dl.webp",
"dlr.webp", "dlr.webp",
"dr.webp", "dr.webp",
"dragon.webp",
"eve_010102.webp", "eve_010102.webp",
"eve_010203.webp", "eve_010203.webp",
"eve_010304.webp", "eve_010304.webp",
@ -406,14 +405,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d =
], ],
"font": "pala" "font": "pala"
}, },
"splitImages": [ "splitImages": null
{
"name": "dragon.webp",
"width": 384,
"height": 96,
"prefix": "dragon_"
}
]
}, },
"firstData": { "firstData": {
"title": "秽翼的尤斯蒂娅", "title": "秽翼的尤斯蒂娅",

View File

@ -35,7 +35,7 @@ var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 =
"whiteHornSlime": {"name":"尖角怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, "whiteHornSlime": {"name":"尖角怪","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"redSwordsman": {"name":"剑王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]}, "redSwordsman": {"name":"剑王","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":[]},
"poisonZombie": {"name":"绿兽人","hp":100,"atk":120,"def":0,"money":13,"exp":0,"point":0,"special":[12]}, "poisonZombie": {"name":"绿兽人","hp":100,"atk":120,"def":0,"money":13,"exp":0,"point":0,"special":[12]},
"octopus": {"name":"血影","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"bigImage":"dragon_1.webp"}, "octopus": {"name":"血影","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"bigImage":null},
"princessEnemy": {"name":"假公主","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, "princessEnemy": {"name":"假公主","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"angel": {"name":"天使","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, "angel": {"name":"天使","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"elemental": {"name":"元素生物","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, "elemental": {"name":"元素生物","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
@ -52,7 +52,7 @@ var enemys_fcae963b_31c9_42b4_b48c_bb48d09f3f80 =
"magicMaster": {"name":"黑暗大法师","hp":100,"atk":120,"def":0,"money":12,"exp":0,"point":0,"special":11,"value":0.3333333333333333,"add":true,"notBomb":true}, "magicMaster": {"name":"黑暗大法师","hp":100,"atk":120,"def":0,"money":12,"exp":0,"point":0,"special":11,"value":0.3333333333333333,"add":true,"notBomb":true},
"devilWarrior": {"name":"魔神武士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, "devilWarrior": {"name":"魔神武士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"fairyEnemy": {"name":"仙子","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, "fairyEnemy": {"name":"仙子","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"dragon": {"name":"魔龙","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"bigImage":"dragon_0.webp"}, "dragon": {"name":"魔龙","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0,"bigImage":null},
"skeletonKnight": {"name":"骷髅武士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, "skeletonKnight": {"name":"骷髅武士","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"skeletonPresbyter": {"name":"骷髅巫师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, "skeletonPresbyter": {"name":"骷髅巫师","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},
"ironRock": {"name":"铁面人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0}, "ironRock": {"name":"铁面人","hp":0,"atk":0,"def":0,"money":0,"exp":0,"point":0,"special":0},

View File

@ -1071,7 +1071,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
// TODO增加自己的一些读档处理 // TODO增加自己的一些读档处理
core.ui.statusBar.clearItemInfo() core.ui.statusBar.clearItemInfo()
core.ui.statusBar.update(); core.ui.statusBar.update();
core.plugin.playing.clear()
// 切换到对应的楼层 // 切换到对应的楼层
core.changeFloor(data.floorId, null, data.hero.loc, 0, function () { core.changeFloor(data.floorId, null, data.hero.loc, 0, function () {
// TODO可以在这里设置读档后播放BGM // TODO可以在这里设置读档后播放BGM

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

View File

@ -122,8 +122,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
data.image, data.image,
data.memory, data.memory,
data.hidetime || 30, data.hidetime || 30,
data.list || [ data.list || [{
{
text: "", text: "",
sound: "", sound: "",
time: 50, time: 50,
@ -131,8 +130,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
boldColor: "#000000", boldColor: "#000000",
font: "bold 48px Verdana", font: "bold 48px Verdana",
frame: 0, frame: 0,
}, }, ]
]
); );
} else { } else {
core.doAction(); core.doAction();
@ -158,6 +156,38 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
core.doAction(); core.doAction();
} }
}); });
core.registerEvent("setanimate", function (data) {
data.px = data.px ?? 0;
data.py = data.py ?? 0;
core.setanimate(data.name, data.px, data.py, data.width, data.height, data.allFarme, data.imageList, data.soundList)
core.doAction();
});
core.registerEvent("clearanimate", function (data) {
core.plugin.playing.clear()
core.doAction();
});
core.registerEvent("deleteanimate", function (data) {
core.deleteanimate(data.name)
core.doAction();
});
core.registerEvent("playanimate", function (data) {
if (!main.replayChecking && !core.isReplaying()) {
data.x = data.x ?? 0
data.y = data.y ?? 0
data.scalex = data.scalex ?? 1
data.scaley = data.scaley ?? 1
core.playanimate(data.name, data.x, data.y, data.hero, data.scalex, data.scaley)
core.doAction();
} else {
core.doAction();
}
});
core.registerEvent("cgtext", function (data) { core.registerEvent("cgtext", function (data) {
if (!main.replayChecking && !core.isReplaying()) { if (!main.replayChecking && !core.isReplaying()) {
core.ui.cgText.image = data.bg; core.ui.cgText.image = data.bg;
@ -2632,6 +2662,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
].style.height = innerSize; ].style.height = innerSize;
core.dom.gif.style.width = core.dom.gif.style.height = innerSize; core.dom.gif.style.width = core.dom.gif.style.height = innerSize;
core.dom.gif2.style.width = core.dom.gif2.style.height = innerSize; core.dom.gif2.style.width = core.dom.gif2.style.height = innerSize;
core.dom.gameDraw.style.width = core.dom.gameDraw.style.height = core.dom.gameDraw.style.width = core.dom.gameDraw.style.height =
innerSize; innerSize;
core.dom.gameDraw.style.top = core.dom.gameDraw.style.top =
@ -2660,7 +2691,6 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
canvas.style.top = canvas.style.top =
parseFloat(canvas.getAttribute("_top")) * core.domStyle.scale + "px"; parseFloat(canvas.getAttribute("_top")) * core.domStyle.scale + "px";
} }
// resize next // resize next
main.dom.next.style.width = main.dom.next.style.height = main.dom.next.style.width = main.dom.next.style.height =
5 * core.domStyle.scale + "px"; 5 * core.domStyle.scale + "px";
@ -2762,12 +2792,10 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
const totalWidthScaled = totalWidth * core.domStyle.scale, const totalWidthScaled = totalWidth * core.domStyle.scale,
totalHeightScaled = totalHeight * core.domStyle.scale; totalHeightScaled = totalHeight * core.domStyle.scale;
const gameDrawBox = isVertical ? const gameDrawBox = isVertical ? {
{
left: BORDER_WIDTH / 3, left: BORDER_WIDTH / 3,
top: BAR_HEIGHT_VERTICAL / 3 + BORDER_HEIGHT / 3, top: BAR_HEIGHT_VERTICAL / 3 + BORDER_HEIGHT / 3,
} : } : { left: BAR_WIDTH / 3 + BORDER_WIDTH / 3, top: BORDER_HEIGHT / 3 };
{ left: BAR_WIDTH / 3 + BORDER_WIDTH / 3, top: BORDER_HEIGHT / 3 };
const obj = { const obj = {
clientWidth: clientWidth, clientWidth: clientWidth,
@ -3402,12 +3430,10 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
this._update_infoWindow(); this._update_infoWindow();
} }
_update_toolBox() { _update_toolBox() {
const tools = core.isReplaying() ? const tools = core.isReplaying() ? [
[
[core.status.replay.pausing ? "play" : "pause", "stop", "rewind"], [core.status.replay.pausing ? "play" : "pause", "stop", "rewind"],
["speedDown", "speedUp", "save"], ["speedDown", "speedUp", "save"],
] : ] : [
[
["keyboard", "shop", "pack", "T332"], ["keyboard", "shop", "pack", "T332"],
["settings", "save", "load", "T331"], ["settings", "save", "load", "T331"],
]; ];
@ -8680,18 +8706,15 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
* @type {{[EvnetName:actionParserJson]}} * @type {{[EvnetName:actionParserJson]}}
*/ */
events_c12a15a8_c380_4b28_8144_256cba95f760.CommonEventTemplate = { events_c12a15a8_c380_4b28_8144_256cba95f760.CommonEventTemplate = {
检测音乐如果没有开启则系统提示开启: [ 检测音乐如果没有开启则系统提示开启: [{
{
type: "if", type: "if",
condition: "!core.musicStatus.bgmStatus", condition: "!core.musicStatus.bgmStatus",
true: [ true: [
"\t[系统提示]你当前音乐处于关闭状态,本塔开音乐游戏效果更佳", "\t[系统提示]你当前音乐处于关闭状态,本塔开音乐游戏效果更佳",
], ],
false: [], false: [],
}, }, ],
], 仿新新魔塔一次性商人: [{
仿新新魔塔一次性商人: [
{
type: "if", type: "if",
condition: "switch:A", condition: "switch:A",
true: [ true: [
@ -8706,16 +8729,13 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
time: 250, time: 250,
}, },
], ],
false: [ false: [{
{
type: "confirm", type: "confirm",
text: "我有3把黄钥匙\n你出50金币就卖给你。", text: "我有3把黄钥匙\n你出50金币就卖给你。",
yes: [ yes: [{
{
type: "if", type: "if",
condition: "status:money>=50", condition: "status:money>=50",
true: [ true: [{
{
type: "setValue", type: "setValue",
name: "status:money", name: "status:money",
operator: "-=", operator: "-=",
@ -8738,22 +8758,17 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
value: "true", value: "true",
}, },
], ],
false: [ false: [{
{
type: "playSound", type: "playSound",
name: "操作失败", name: "操作失败",
}, },
"\t[行商,trader]\b[this]你的金币不足!", "\t[行商,trader]\b[this]你的金币不足!",
], ],
}, }, ],
],
no: [], no: [],
}, }, ],
], }, ],
}, 全地图选中一个点: [{
],
全地图选中一个点: [
{
type: "comment", type: "comment",
text: "全地图选中一个点,需要用鼠标或触屏操作", text: "全地图选中一个点,需要用鼠标或触屏操作",
}, },
@ -8774,8 +8789,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
{ {
type: "while", type: "while",
condition: "true", condition: "true",
data: [ data: [{
{
type: "drawSelector", type: "drawSelector",
image: "winskin.webp", image: "winskin.webp",
code: 1, code: 1,
@ -8790,16 +8804,13 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
{ {
type: "if", type: "if",
condition: "(flag:type === 1)", condition: "(flag:type === 1)",
true: [ true: [{
{
type: "if", type: "if",
condition: "((temp:X===flag:x)&&(temp:Y===flag:y))", condition: "((temp:X===flag:x)&&(temp:Y===flag:y))",
true: [ true: [{
{
type: "break", type: "break",
n: 1, n: 1,
}, }, ],
],
}, },
{ {
type: "setValue", type: "setValue",
@ -8829,8 +8840,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
loc: ["temp:X", "temp:Y"], loc: ["temp:X", "temp:Y"],
}, },
], ],
多阶段Boss战斗: [ 多阶段Boss战斗: [{
{
type: "comment", type: "comment",
text: "多阶段boss请直接作为战后事件使用", text: "多阶段boss请直接作为战后事件使用",
}, },
@ -8843,11 +8853,9 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
{ {
type: "switch", type: "switch",
condition: "switch:A", condition: "switch:A",
caseList: [ caseList: [{
{
case: "1", case: "1",
action: [ action: [{
{
type: "setBlock", type: "setBlock",
number: "redSlime", number: "redSlime",
}, },
@ -8856,8 +8864,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
}, },
{ {
case: "2", case: "2",
action: [ action: [{
{
type: "setBlock", type: "setBlock",
number: "blackSlime", number: "blackSlime",
}, },
@ -8866,8 +8873,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
}, },
{ {
case: "3", case: "3",
action: [ action: [{
{
type: "setBlock", type: "setBlock",
number: "slimelord", number: "slimelord",
}, },
@ -9121,8 +9127,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
], ],
"event" "event"
), ),
MotaActionFunctions.actionParser.parse( MotaActionFunctions.actionParser.parse({
{
condition: "flag:__door__===2", condition: "flag:__door__===2",
currentFloor: true, currentFloor: true,
priority: 0, priority: 0,
@ -9134,17 +9139,14 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
), ),
MotaActionBlocks["changeFloor_m"].xmlText(), MotaActionBlocks["changeFloor_m"].xmlText(),
MotaActionFunctions.actionParser.parse( MotaActionFunctions.actionParser.parse(
[ [{
{
id: "shop1", id: "shop1",
text: "\t[贪婪之神,moneyShop]勇敢的武士啊, 给我${20+2*flag:shop1}金币就可以:", text: "\t[贪婪之神,moneyShop]勇敢的武士啊, 给我${20+2*flag:shop1}金币就可以:",
textInList: "1F金币商店", textInList: "1F金币商店",
choices: [ choices: [{
{
text: "生命+800", text: "生命+800",
need: "status:money>=20+2*flag:shop1", need: "status:money>=20+2*flag:shop1",
action: [ action: [{
{
type: "comment", type: "comment",
text: "新版商店中需要手动扣减金币和增加访问次数", text: "新版商店中需要手动扣减金币和增加访问次数",
}, },
@ -9167,8 +9169,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
value: "800", value: "800",
}, },
], ],
}, }, ],
],
}, },
{ {
id: "itemShop", id: "itemShop",
@ -9194,26 +9195,25 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
MotaActionBlocks["eachArrive_m"].xmlText(), MotaActionBlocks["eachArrive_m"].xmlText(),
MotaActionBlocks["level_m"].xmlText(), MotaActionBlocks["level_m"].xmlText(),
MotaActionFunctions.actionParser.parse( MotaActionFunctions.actionParser.parse(
[["MTx", ""]], [
["MTx", ""]
],
"floorPartition" "floorPartition"
), ),
MotaActionBlocks["commonEvent_m"].xmlText(), MotaActionBlocks["commonEvent_m"].xmlText(),
MotaActionBlocks["item_m"].xmlText(), MotaActionBlocks["item_m"].xmlText(),
MotaActionFunctions.actionParser.parse( MotaActionFunctions.actionParser.parse(
[ [{
{
title: "简单", title: "简单",
name: "Easy", name: "Easy",
hard: 1, hard: 1,
action: [ action: [
{ type: "comment", text: "在这里写该难度需执行的事件" }, { type: "comment", text: "在这里写该难度需执行的事件" },
], ],
}, }, ],
],
"levelChoose" "levelChoose"
), ),
MotaActionFunctions.actionParser.parse( MotaActionFunctions.actionParser.parse({
{
type: 0, type: 0,
value: { atk: 10 }, value: { atk: 10 },
percentage: { speed: 10 }, percentage: { speed: 10 },
@ -9221,18 +9221,15 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
"equip" "equip"
), ),
MotaActionFunctions.actionParser.parse( MotaActionFunctions.actionParser.parse(
[ [{
{
name: "bg.webp", name: "bg.webp",
x: 0, x: 0,
y: 0, y: 0,
canvas: "bg", canvas: "bg",
}, }, ],
],
"floorImage" "floorImage"
), ),
MotaActionFunctions.actionParser.parse( MotaActionFunctions.actionParser.parse({
{
time: 160, time: 160,
openSound: "door.mp3", openSound: "door.mp3",
closeSound: "door.mp3", closeSound: "door.mp3",
@ -9242,8 +9239,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
), ),
MotaActionBlocks["faceIds_m"].xmlText(), MotaActionBlocks["faceIds_m"].xmlText(),
MotaActionBlocks["mainStyle_m"].xmlText(), MotaActionBlocks["mainStyle_m"].xmlText(),
MotaActionFunctions.actionParser.parse( MotaActionFunctions.actionParser.parse({
{
背景音乐: "bgm.mp3", 背景音乐: "bgm.mp3",
确定: "confirm.mp3", 确定: "confirm.mp3",
攻击: "attack.mp3", 攻击: "attack.mp3",
@ -9265,14 +9261,12 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
"\t[小妖精,fairy]\f[fairy.webp,0,0]欢迎使用事件编辑器(双击方块可直接预览)" "\t[小妖精,fairy]\f[fairy.webp,0,0]欢迎使用事件编辑器(双击方块可直接预览)"
), ),
MotaActionBlocks["over_s"].xmlText(), MotaActionBlocks["over_s"].xmlText(),
MotaActionFunctions.actionParser.parseList([ MotaActionFunctions.actionParser.parseList([{
{
type: "overlist", type: "overlist",
image: "bg_5043.webp", image: "bg_5043.webp",
memory: false, memory: false,
hidetime: 30, hidetime: 30,
list: [ list: [{
{
text: "", text: "",
sound: "", sound: "",
time: 50, time: 50,
@ -9280,12 +9274,9 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
boldColor: "0,0,0,1", boldColor: "0,0,0,1",
font: "bold 48px Verdana", font: "bold 48px Verdana",
frame: 0, frame: 0,
}, }, ],
], }, ]),
}, MotaActionFunctions.actionParser.parseList([{
]),
MotaActionFunctions.actionParser.parseList([
{
type: "cgtext", type: "cgtext",
bg: "bg_5043.webp", bg: "bg_5043.webp",
memory: false, memory: false,
@ -9299,8 +9290,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
bodyList: [ bodyList: [
{ name: "tati_050145a.webp", px: 100, filter: false }, { name: "tati_050145a.webp", px: 100, filter: false },
], ],
}, }, ]),
]),
MotaActionBlocks["moveTextBox_s"].xmlText(), MotaActionBlocks["moveTextBox_s"].xmlText(),
MotaActionBlocks["clearTextBox_s"].xmlText(), MotaActionBlocks["clearTextBox_s"].xmlText(),
MotaActionBlocks["comment_s"].xmlText(), MotaActionBlocks["comment_s"].xmlText(),
@ -9394,20 +9384,17 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
MotaActionFunctions.actionParser.parseList({ MotaActionFunctions.actionParser.parseList({
type: "switch", type: "switch",
condition: "判别值", condition: "判别值",
caseList: [ caseList: [{
{
action: [ action: [
{ type: "comment", text: "当判别值是值的场合执行此事件" }, { type: "comment", text: "当判别值是值的场合执行此事件" },
], ],
}, },
{ {
case: "default", case: "default",
action: [ action: [{
{
type: "comment", type: "comment",
text: "当没有符合的值的场合执行default事件", text: "当没有符合的值的场合执行default事件",
}, }, ],
],
}, },
], ],
}), }),
@ -9440,37 +9427,30 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
MotaActionFunctions.actionParser.parseList({ MotaActionFunctions.actionParser.parseList({
type: "wait", type: "wait",
timeout: 0, timeout: 0,
data: [ data: [{
{
case: "keyboard", case: "keyboard",
keycode: "13,32", keycode: "13,32",
action: [ action: [{
{
type: "comment", type: "comment",
text: "当按下回车(keycode=13)或空格(keycode=32)时执行此事件\n超时剩余时间会写入flag:timeout", text: "当按下回车(keycode=13)或空格(keycode=32)时执行此事件\n超时剩余时间会写入flag:timeout",
}, }, ],
],
}, },
{ {
case: "mouse", case: "mouse",
px: [0, 32], px: [0, 32],
py: [0, 32], py: [0, 32],
action: [ action: [{
{
type: "comment", type: "comment",
text: "当点击地图左上角时执行此事件\n超时剩余时间会写入flag:timeout", text: "当点击地图左上角时执行此事件\n超时剩余时间会写入flag:timeout",
}, }, ],
],
}, },
{ {
case: "condition", case: "condition",
condition: "flag:type==0\n&&flag:keycode==13", condition: "flag:type==0\n&&flag:keycode==13",
action: [ action: [{
{
type: "comment", type: "comment",
text: "当满足自定义条件时会执行此事件\n超时剩余时间会写入flag:timeout", text: "当满足自定义条件时会执行此事件\n超时剩余时间会写入flag:timeout",
}, }, ],
],
}, },
{ {
case: "timeout", case: "timeout",
@ -9487,6 +9467,10 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
MotaActionBlocks["changeMouse_s"].xmlText(), MotaActionBlocks["changeMouse_s"].xmlText(),
MotaActionBlocks["removeMouse_s"].xmlText(), MotaActionBlocks["removeMouse_s"].xmlText(),
MotaActionBlocks["vibrate_s"].xmlText(), MotaActionBlocks["vibrate_s"].xmlText(),
MotaActionBlocks["setanimate_s"].xmlText(),
MotaActionBlocks["deleteanimate_s"].xmlText(),
MotaActionBlocks["playanimate_s"].xmlText(),
MotaActionBlocks["clearanimate_s"].xmlText(),
MotaActionBlocks["animate_s"].xmlText(), MotaActionBlocks["animate_s"].xmlText(),
MotaActionBlocks["animate_1_s"].xmlText(), MotaActionBlocks["animate_1_s"].xmlText(),
MotaActionBlocks["stopAnimate_s"].xmlText(), MotaActionBlocks["stopAnimate_s"].xmlText(),
@ -9508,6 +9492,10 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
], ],
音像处理: [ 音像处理: [
MotaActionBlocks["animationDrawable_s"].xmlText(), MotaActionBlocks["animationDrawable_s"].xmlText(),
MotaActionBlocks["setanimate_s"].xmlText(),
MotaActionBlocks["deleteanimate_s"].xmlText(),
MotaActionBlocks["playanimate_s"].xmlText(),
MotaActionBlocks["clearanimate_s"].xmlText(),
MotaActionBlocks["showImage_s"].xmlText(), MotaActionBlocks["showImage_s"].xmlText(),
MotaActionBlocks["showImage_1_s"].xmlText(), MotaActionBlocks["showImage_1_s"].xmlText(),
MotaActionBlocks["hideImage_s"].xmlText(), MotaActionBlocks["hideImage_s"].xmlText(),
@ -9684,10 +9672,11 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
var list = toolboxObj["入口方块"]; var list = toolboxObj["入口方块"];
var xmlList = []; var xmlList = [];
var eventType = var eventType =
(editor_blockly.isCommonEntry() (editor_blockly.isCommonEntry() ?
? "common" "common" :
: editor_blockly.entryType) + "_m"; editor_blockly.entryType) + "_m";
for (var ii = 0, blockText; (blockText = list[ii]); ii++) { for (var ii = 0, blockText;
(blockText = list[ii]); ii++) {
if ( if (
new RegExp('<block type="' + eventType + '">').exec(blockText) new RegExp('<block type="' + eventType + '">').exec(blockText)
) { ) {
@ -9742,14 +9731,16 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
var mousewheelOffsetValue = var mousewheelOffsetValue =
(20 / 380) * workspace.scrollbar[hvScroll].handleLength_ * 3; (20 / 380) * workspace.scrollbar[hvScroll].handleLength_ * 3;
workspace.scrollbar[hvScroll].handlePosition_ += workspace.scrollbar[hvScroll].handlePosition_ +=
(e.deltaY || 0) + (e.detail || 0) > 0 (e.deltaY || 0) + (e.detail || 0) > 0 ?
? mousewheelOffsetValue mousewheelOffsetValue :
: -mousewheelOffsetValue; -mousewheelOffsetValue;
workspace.scrollbar[hvScroll].onScroll_(); workspace.scrollbar[hvScroll].onScroll_();
// workspace.setScale(workspace.scale); // workspace.setScale(workspace.scale);
}; };
var doubleClickCheck = [[0, "abc"]]; var doubleClickCheck = [
[0, "abc"]
];
function omitedcheckUpdateFunction(event) { function omitedcheckUpdateFunction(event) {
if (event.type === "create") { if (event.type === "create") {
@ -9833,7 +9824,8 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
">" ">"
); );
if (!inputs) inputs = []; if (!inputs) inputs = [];
for (var ii = 0, inputType; (inputType = rule.argsType[ii]); ii++) { for (var ii = 0, inputType;
(inputType = rule.argsType[ii]); ii++) {
var input = inputs[ii]; var input = inputs[ii];
var _input = ""; var _input = "";
var noinput = input === null || input === undefined; var noinput = input === null || input === undefined;
@ -10142,10 +10134,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
core.__PIXELS__, core.__PIXELS__,
71 71
); );
core.dymCanvas.popMove.canvas.style.width = ctx.canvas.classList.add('gameCanvas', 'anti-aliasing')
core.__PIXELS__ * core.domStyle.scale + "px";
core.dymCanvas.popMove.canvas.style.height =
core.__PIXELS__ * core.domStyle.scale + "px";
core.clearMap(ctx); core.clearMap(ctx);
if (core.status.replay.speed <= 3 && !flags.stopPop) { if (core.status.replay.speed <= 3 && !flags.stopPop) {
var list = core.status.popMove || []; var list = core.status.popMove || [];
@ -12390,6 +12379,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
core.__PIXELS__, core.__PIXELS__,
90 90
); );
ctx.canvas.classList.add('gameCanvas', 'anti-aliasing')
core.clearMap(ctx); core.clearMap(ctx);
core.setTextAlign("pop", "left"); core.setTextAlign("pop", "left");
var list = core.status.pop || []; var list = core.status.pop || [];
@ -14223,7 +14213,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
core.musicStatus.soundStatus; core.musicStatus.soundStatus;
if (farme == one.startfarme && lisen) { if (farme == one.startfarme && lisen) {
if (one.stopbefore) core.stopSound(); if (one.stopbefore) core.stopSound();
core.playSound(sound); core.playSound(one.sound);
} }
}); });
farme++; farme++;
@ -14489,5 +14479,149 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 =
core.towebp(image); core.towebp(image);
}); });
}; };
},
"帧动画特效(游戏界面)": function () {
// 在此增加新插件
const animate2 = document.createElement("canvas"); //画布设置
animate2.style.zIndex = 71;
animate2.id = "animate2";
animate2.classList.add('gameCanvas', 'anti-aliasing')
animate2.style.display = "block"
animate2.width = 416
animate2.height = 416
animate2.style.width = core.__PIXELS__ * core.domStyle.scale + 'px'
animate2.style.height = core.__PIXELS__ * core.domStyle.scale + 'px'
main.dom.animate2 = animate2;
const anctx = animate2.getContext('2d')
main.dom.gameDraw.appendChild(animate2);
core.plugin.playing = new Set()
this.setanimate = function (name,
px,
py,
width,
height,
allFarme,
imageList,
soundList) {
const data = {
px: px,
py: py,
width: width,
height: height,
allFarme: allFarme,
imageList: imageList,
soundList: soundList
}
core.setFlag("animate_" + name, data)
}
this.deleteanimate = function (name) {
core.setFlag("animate_" + name)
}
let thistime = 0
this.playanimate = function (name, x, y, hero, scalex, scaley) {
const data = { name: name, x: x, y: y, hero: hero, scalex: scalex, scaley: scaley, farme: 0 }
core.plugin.playing.add(data)
}
core.registerAnimationFrame("animateonmap", true, function (timestamp) {
if (timestamp - thistime > 1000 / 60) {
thistime = timestamp;
core.clearMap(anctx)
core.plugin.playing.forEach(one => {
const data = flags["animate_" + one.name]
if (!data) {
core.plugin.playing.delete(one)
} else {
data.imageList.forEach(function (image) {
if (one.farme >= (image.beforefarme ?? 0) &&
one.farme <= (image.afterfarme ?? data.allFarme)
) {
const img = core.material.images.images?.[image.image];
if (img) {
const gla = image.globalAlpha ?? 100;
const agla = image.aglobalAlpha ?? gla,
beforefarme = image.beforefarme ?? 0;
const afterfarme = image.afterfarme ?? data.allFarme;
anctx.globalAlpha =
(gla +
((agla - gla) * (one.farme - beforefarme)) /
(afterfarme - beforefarme || 1)) /
100;
const cx =
(image.cx ?? 0) +
(((image.acx ?? 0) - (image.cx ?? 0)) *
(one.farme - beforefarme)) /
(afterfarme - beforefarme || 1),
cy =
(image.cy ?? 0) +
(((image.acy ?? 0) - (image.cy ?? 0)) *
(one.farme - beforefarme)) /
(afterfarme - beforefarme || 1),
cw =
(image.cw ?? img.width) +
(((image.acw ?? img.width) - (image.cw ?? img.width)) *
(one.farme - beforefarme)) /
(afterfarme - beforefarme || 1),
ch =
(image.ch ?? img.height) +
(((image.acw ?? img.height) - (image.cw ?? img.height)) *
(one.farme - beforefarme)) /
(afterfarme - beforefarme || 1),
x =
(image.x ?? 0) +
(((image.ax ?? 0) - (image.x ?? 0)) * (one.farme - beforefarme)) /
(afterfarme - beforefarme || 1),
y =
(image.y ?? 0) +
(((image.ay ?? 0) - (image.y ?? 0)) * (one.farme - beforefarme)) /
(afterfarme - beforefarme || 1),
w =
(image.w ?? one.width) +
(((image.aw ?? one.width) - (image.w ?? one.width)) *
(one.farme - beforefarme)) /
(afterfarme - beforefarme || 1),
h =
(image.h ?? one.height) +
(((image.aw ?? one.height) - (image.w ?? one.height)) *
(one.farme - beforefarme)) /
(afterfarme - beforefarme || 1),
angle = (Math.PI * (image.angel ?? 0) / 180) + ((Math.PI * (image.aangel ?? 0) / 180) - ((Math.PI * (image.angel ?? 0) / 180)) * (one.farme - beforefarme)) / (afterfarme - beforefarme || 1);
if (one.hero) {
let sx, sy;
if (core.status.heroMoving < 0) { sx = 0;
sy = 0 } else {
sx = core.utils.scan[core.status.hero.loc.direction].x * 4 * core.status.heroMoving
sy = core.utils.scan[core.status.hero.loc.direction].y * 4 * core.status.heroMoving
}
const herox = core.status.hero.loc.x * 32 + 16 + sx
const heroy = core.status.hero.loc.y * 32 + 16 + sy
core.drawImage(anctx, img, cx, cy, cw, ch, herox + (x - data.px) * one.scalex, heroy + (y - data.py) * one.scaley, w * one.scalex, h * one.scaley, angle)
} else { core.drawImage(anctx, img, cx, cy, cw, ch, one.x + (x - data.px) * one.scalex, one.y + (y - data.py) * one.scaley, w * one.scalex, h * one.scaley, angle); }
}
}
})
data.soundList.forEach(function (sound) {
const lisen = sound.sound && core.material.sounds[sound.sound] && core.musicStatus.soundStatus;
if (one.farme == sound.startfarme && lisen) {
if (sound.stopbefore) core.stopSound();
core.playSound(sound.sound);
}
})
one.farme++;
if (one.farme > data.allFarme) core.plugin.playing.delete(one)
}
})
}
})
} }
} }