diff --git a/_saves/Eustia_autoSave b/_saves/Eustia_autoSave
index e5caddf..a0e7916 100644
--- a/_saves/Eustia_autoSave
+++ b/_saves/Eustia_autoSave
@@ -1 +1 @@
-N4IgZgNg9lBOCSATEAuEBnALrApjzADAIwgA0IAFjrFKqAJYC2AhgOY6qXVQB0A7jgBGABzIhmAOybNMHFGGYR0OchOaM5IAMLMmYiADdURchWEsAHsYI3TolERsFyLNZesvJzVM/GYA1h4giDhgQYwhYQ6+jFASOACePuQ4Fva+OACOAK705jgSmKgA2gC65PSyjOh0IADGcViSmDUooIIwgQ7kkEkOAL7kmDBKdIMgWbnCrcD949B1tYj0uHWY9HGc2aLkVigArOR9AJzjkGwzIJU4jAAi+LoQqNjZKiDZygBC+AIFADL0VgUIooF5vAD64OUOEQkNQABYAGwAdgAHAAmDH7Y7kSGwSSw8EIlEYrE48S4ZitYqgNyaAA62XhOAIgkZ+zq8PRYhY0xK2l0jAoUA0IFKg1p6gZTJZbOyHK5POYfJQxRAACt6NlWNlJGKJSA6ZxGczWezOdzPCq1QBpAAqADV9aRJaK0IzkejEeiPeiwCQrdSQPaHQAxbnil2GqXG7Ke72+/1K60gVhQCCIfyJZ2u6WmuUKy0gXlBwT0CgfbK0SO52Om5jmxWB/ma5hQTCSVg56NukAmlkN+UW5NB9BUCSsCQGYWims9vMDxtFkv8sf0Kczjhzo3uuNen17pPN1Ua+gwtvdnd9vcJw8B4vK0fYPCEe9YXD4AhFnWduoUTtiD+E5/p2RYWPQbbgZ2xBiFBUBQROX6wRB8EQROADMl4xigEjZBAEDHmqCT0DkJDbthuH4YRIDETkEYGjulEEQ+Ka0dkmHkW6THUWx8JYVxeHMSuJ5sfs/FyNxLFBmxiLiagknCURJFxnJOGCTxymoqpCmPvybHHNp6lSXpymOPq5QYP4eSoAoShvP+sDICgviQg5iBaOmcBwmguDILi4LXIwAAS66YN5ZT+RAODMAYOB/FAdTebM/kGPQ6DXIStTvi+MGgrArzjIIPx4BIACCmAdnU/i3DI3hqVRICQswOD0OFFn/s+TnouQ6BWfhySWfQ+EAHLYdeiL7CyYiQss6DMIIUWZW0GDPp+JCqsURDoui5RlOKZzptAAiwNSFlYDgKrdQ+AQDegwh4E5jg9dgQRsPQQShUEDQSOEb2LPIijKM9MhpesdSXMMHYQHaTByEQaIYsino8PsTgEIiRCoqi5B1NksCwDDbqIqiSLwjw5JmANggyJgUXGC4cTZs5KRpFTNNRTVLDsANwhQGlcSc2wcgZBY2DMIL3PM8WUCxbcKw4GsEB9FdgISHAOAAMqyJdwOwCCyJbcixw8PCcymMwjmcCOWWra+tS8iUzhO6Qzuuy7pDFAAtCY3ukL7/smM4Ad+z7ochyH5Su/t5A0NksicH88AOqwAAapXqqVtylZkrAAF6lQAog6ADipUSFnfzqgAsgAigAvA3YgGIorwzOMsUnRsP27scODoYg7KCKjHrMMcA/ZMcX4EOyqL7PC5oEGAjLHBjYTkDq9BOcEdRgOh6KCFj4LMJjYDgvCzXHEfiJgIlYDHKi6HIogiBEIizDogQYjrG68PoYixPIn2OhFe6JTZAA=
\ No newline at end of file
+N4IgZgNg9lBOCSATEAuEBnALrApjzADAIwgA0IAFjrFKqAJYC2AhgOY6qXVQB0A7jgBGABzIhmAOybNMHFGGYR0OchOaM5IAMLMmYiADdURchWEsAHqgCct66dEoiBF+RZrLqALQmQ75qgE5DIA1sauIIg4YOFBflExKHHownjISW5QEjgAnoHkOBaOcTgAjgCu9OY4EpioANoAuuT0sozodCAAxllYkpgdKKCCMGFO5JB5TgC+5JgwSnSzIGWVwoOg6HxwiCQzy9BdnYj0uF2Y9Fmc5aLkVigArORTzsuQbBsgrTiMACL4uggqGw5RUIHKygAQvgBDUADL0VgUOooEFggD66OUOEQmOMAHYAGwEawADgATOSACxxTGwSS49EE4lkyk04K4ZiDeqgDyaAA65SpOAIgkFDy6VPJYhY6wa2l0jAoUA0IEas156gFQpFYvKEqlMuYcpQ9RAACt6OVWOVJGqNSA+ZxBcLReLJdK3MbuSAANIAFQAavbSJrVWhBfjyYTyZHyWASF6TWaA4GAGLS9Whx1a53lKMxuMJo3JkCsKAQRAhXIhsPa116g2evze+WCegUCHlWhZut513Md2GpM+y3MKCYSSsWs58MgF0iwf6j0ln3oKgSVgSAzK1W92f1xdD5uytcUejb3ccfdOiP56Ox+/Fkfyy048cz2/z++Fp+JlullguD4MQYhAXghDNjaU5dBQU5iNBm6wVOzYWPQ45oVOoF3OhUCYZuBCobh+GsAAzJ+uYoBI5QQBAL6miAOT0BUJA3pR1G0fRZpMRUmYOreHF0QBPo8eU5FseGglcYxzFChRkk0UJp7yqJDzyXIUnCSpsmEupqCacpDGifielUYp0miaSpkGa2RmydY1nmVpdksQQ9rNBgIRVKgChKGCcGwOktLogFiBaBWcB4mguDIOQmLfIwAASF6YFFTRxeiEA4MwBg4HCUBdFFwDLJiBj0Og3yMp04EgXsaLLIIMJ4BIACCmCTl0IS/DIARmZxICYswOD0GlHmYic6DMIIWVVUMGDYBBoGmvURCkQ8zRNOqbwVtAAiwNyHlYDgJq+H0FxYPQXSfPMk4QP6TByOSDxEEQUpRjwhJ2C91hPN05SwLA93hkQDxUtYPCkXYUNQ4SDj5CAggyJgWXw4wWQ1hkKxFPDiPtVl3UsOw8PCFA5VZATbByCUFjYMwFNE5jaO5b8pw4OcEBTHEiISHAOAAMqyCaySTrAKKElSDykTwVLTMsoWcKu1ULbVnSyg0QQa6Qmva1ruv1D4pAG0bJgG0ExuGyblsWxbzQa1t5A0OUsicL6UAZloVKsAAvGIBiKKCGzLLl+2XBIebWDgpGIOKggPAQkbMNY0flNYhHx/qpKg+6BBgIK1iEkQMTkDa9DpCA5LMIghKEog1iFYgYBgFS6JUqSifooIVKEmA6JgIgU0EDgNJV3gYgXMD+KkficfWKRBBSi40xAA==
diff --git a/_server/MotaAction.g4 b/_server/MotaAction.g4
index 296d8a1..10b3ad5 100644
--- a/_server/MotaAction.g4
+++ b/_server/MotaAction.g4
@@ -958,6 +958,8 @@ action
| removeMouse_s
| drawWarning_s
| addPop_s
+ | setq_s
+ | setcgs_s
| animationDrawable_s
| over_s
| overlist_s
@@ -2241,12 +2243,12 @@ setanimate_s
tooltip : setanimate:设置帧动画/特效(此项仅储存,不播放)
helpUrl : /_docs/#/instruction
default : ["sword","","",192,192,60]
-colour : this.soundColor
+colour : this.imageColor
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';
+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;
*/;
@@ -2320,9 +2322,9 @@ deleteanimate_s
/* deleteanimate_s
tooltip : deleteanimate:删除储存的帧动画
helpUrl : /_docs/#/instruction
-default : [""]
+default : ["zone"]
-colour : this.soundColor
+colour : this.imageColor
var code = '{"type": "deleteanimate", "name": "'+EvalString_0+'"},\n';
return code;
@@ -2336,7 +2338,7 @@ tooltip : playanimate:播放帧动画,选择跟随勇士后x、y将失效改
helpUrl : /_docs/#/instruction
default : ["zone","","",false,"",""]
-colour : this.soundColor
+colour : this.imageColor
IntString_0 = IntString_0 ? (', "x": '+IntString_0+'') : '';
IntString_1 = IntString_1 ? (', "y": '+IntString_1+'') : '';
if(EvalString_1&&!/^(0|([1-9][0-9]*))(\.[\d]+)?$/.test(EvalString_1))throw new Error("此项仅能填写小数、整数或不填");
@@ -2354,7 +2356,7 @@ clearanimate_s
tooltip : clearanimate:清空正在播放的帧动画
helpUrl : /_docs/#/instruction
-colour : this.soundColor
+colour : this.imageColor
var code = '{"type": "clearanimate"},\n';
return code;
@@ -2402,7 +2404,7 @@ stopAnimate_s
tooltip : stopAnimate:停止所有动画
helpUrl : /_docs/#/instruction
default : [false]
-colour : this.soundColor
+colour : this.imageColor
Bool_0 = Bool_0?', "doCallback": true':'';
var code = '{"type": "stopAnimate"'+Bool_0+'},\n';
return code;
@@ -2596,6 +2598,35 @@ var code = '{"type": "rotateImage", "code": '+NInt_0+loc+', "angle": '+NInt_1+Mo
return code;
*/;
+setq_s
+ : '设置任务目标楼层'IdString?'不填为清空当前任务指引' Newline
+
+/* setq_s
+tooltip : setq:设置任务目标楼层(显示在小地图)
+helpUrl : /_docs/#/instruction
+default : [""]
+allFloorIds : ['IdString_0']
+colour : this.soundColor
+IdString_0 = IdString_0 ? (', "id": "'+IdString_0+'"') : '';
+var code = '{"type": "setq"'+IdString_0+'},\n';
+return code;
+*/;
+
+
+setcgs_s
+ : 'cg回廊获取cg 文件名'EvalString?'不填为清空cg获取记录' Newline
+
+/* setcgs_s
+tooltip : setcgs:cg回廊中的cg获取
+helpUrl : /_docs/#/instruction
+default : [""]
+allImages : ['EvalString_0']
+colour : this.imageColor
+EvalString_0 = EvalString_0 ? (', "img": "'+EvalString_0+'"') : '';
+var code = '{"type": "setcgs"'+EvalString_0+'},\n';
+return code;
+*/;
+
scaleImage_s
: '图片放缩' '图片编号' NInt '中心点像素' 'x' PosString? 'y' PosString? '移动方式' MoveMode_List BGNL? '放缩比例' Number '动画时间' Int '不等待执行完毕' Bool Newline
@@ -2615,6 +2646,7 @@ var code = '{"type": "scaleImage", "code": '+NInt_0+loc+', "scale": '+Number_0+M
return code;
*/;
+
animationDrawable_s
: '帧动画' '总显示帧数' IntString '底色' ColorString? Colour '底色不透明度' IntString? BGNL?Newline
'图片序列(同一帧后面覆盖先前的,默认起始帧为0,结束帧为最后一帧)'BGNL?Newline
@@ -4596,8 +4628,8 @@ EnemyPoint_List
/*EnemyPoint_List ['hp','atk','def','money','exp','point','name']*/;
Equip_List
- : '生命'|'生命上限'|'攻击'|'防御'|'护盾'|'魔力'|'魔力上限'
- /*Equip_List ['hp','hpmax','atk','def','mdef','mana','manamax']*/;
+ : '生命'|'生命上限'|'攻击'|'防御'|'法强'|'魔力'|'魔力上限'|'速度'
+ /*Equip_List ['hp','hpmax','atk','def','mdef','mana','manamax','speed']*/;
Key_List
: '黄钥匙'|'蓝钥匙'|'红钥匙'|'绿钥匙'|'铁门钥匙'
diff --git a/_server/MotaActionParser.js b/_server/MotaActionParser.js
index 68e1d9c..06c2081 100644
--- a/_server/MotaActionParser.js
+++ b/_server/MotaActionParser.js
@@ -614,6 +614,12 @@ MotaActionParser = function () {
this.next,
]);
break;
+ case "setq":
+ this.next = MotaActionBlocks["setq_s"].xmlText([data.id, this.next]);
+ break;
+ case "setcgs":
+ this.next = MotaActionBlocks["setcgs_s"].xmlText([data.img, this.next]);
+ break;
case "comment": // 注释
this.next = MotaActionBlocks["comment_s"].xmlText([
this.EvalString_Multi(data.text),
@@ -645,6 +651,7 @@ MotaActionParser = function () {
this.next,
]);
break;
+
case "addPop":
this.next = MotaActionBlocks["addPop_s"].xmlText([
data.value,
@@ -770,18 +777,18 @@ MotaActionParser = function () {
break;
case "deleteanimate":
this.next = MotaActionBlocks["deleteanimate_s"].xmlText([
- this.name,
+ data.name,
this.next,
]);
break;
case "playanimate":
this.next = MotaActionBlocks["playanimate_s"].xmlText([
- this.name,
- this.x,
- this.y,
- this.hero,
- this.scalex,
- this.scaley,
+ data.name,
+ data.x,
+ data.y,
+ data.hero,
+ data.scalex,
+ data.scaley,
this.next,
]);
break;
@@ -840,6 +847,7 @@ MotaActionParser = function () {
this.next,
]);
break;
+
case "tip":
this.next = MotaActionBlocks["tip_s"].xmlText([
data.text,
diff --git a/_server/config.json b/_server/config.json
index 2f57734..79984e9 100644
--- a/_server/config.json
+++ b/_server/config.json
@@ -1 +1 @@
-{"viewportLoc":[0,0],"editorLastFloorId":"shinvhome","lastUsed":[{"idnum":210,"id":"skeletonWarrior","images":"enemys","y":9,"recent":1735825145197,"frequent":4},{"idnum":21,"id":"yellowKey","images":"items","y":0,"recent":1735824906066,"frequent":14},{"idnum":81,"id":"yellowDoor","images":"animates","y":4,"recent":1735824901122,"frequent":26},{"idnum":214,"id":"zombieKnight","images":"enemys","y":13,"recent":1735824888165,"frequent":2},{"idnum":82,"id":"blueDoor","images":"animates","y":5,"recent":1735824878838,"frequent":4},{"idnum":32,"id":"bluePotion","images":"items","y":21,"recent":1735824871469,"frequent":2},{"idnum":28,"id":"blueGem","images":"items","y":17,"recent":1735824867878,"frequent":6},{"idnum":27,"id":"redGem","images":"items","y":16,"recent":1735824864181,"frequent":5},{"idnum":22,"id":"blueKey","images":"items","y":1,"recent":1735824852246,"frequent":4},{"idnum":140,"id":"autotile4","images":"autotile","y":0,"recent":1735824840165,"frequent":138},{"idnum":209,"id":"skeleton","images":"enemys","y":8,"recent":1735824813505,"frequent":2},{"idnum":94,"id":"rightPortal","images":"animates","y":25,"recent":1735824733893,"frequent":6},{"idnum":92,"id":"leftPortal","images":"animates","y":24,"recent":1735824084823,"frequent":2},{"idnum":91,"id":"upPortal","images":"animates","y":26,"recent":1735821889246,"frequent":2},{"idnum":85,"id":"specialDoor","images":"animates","y":8,"recent":1735820976103,"frequent":3},{"idnum":93,"id":"downPortal","images":"animates","y":23,"recent":1735820969951,"frequent":2},{"idnum":89,"id":"portal","images":"animates","y":17,"recent":1735820958612,"frequent":1},{"idnum":26,"id":"bigKey","images":"items","y":6,"recent":1735820920269,"frequent":1},{"idnum":34,"id":"yellowPotion","images":"items","y":23,"recent":1735820909149,"frequent":1},{"idnum":33,"id":"greenPotion","images":"items","y":22,"recent":1735820906301,"frequent":1},{"idnum":83,"id":"redDoor","images":"animates","y":6,"recent":1735820844323,"frequent":2},{"idnum":247,"id":"magicMaster","images":"enemys","y":46,"recent":1735820830425,"frequent":1},{"idnum":20160,"id":"X20160","images":"5.png","x":0,"y":20,"isTile":true,"recent":1735398503013,"frequent":2},{"idnum":20168,"id":"X20168","images":"5.png","x":0,"y":21,"isTile":true,"recent":1735398496973,"frequent":3},{"idnum":20176,"id":"X20176","images":"5.png","x":0,"y":22,"isTile":true,"recent":1735398485125,"frequent":1},{"idnum":71742,"id":"X71742","images":"11.png","x":6,"y":217,"isTile":true,"recent":1735398452693,"frequent":1},{"idnum":71750,"id":"X71750","images":"11.png","x":6,"y":218,"isTile":true,"recent":1735398448325,"frequent":1},{"idnum":71751,"id":"X71751","images":"11.png","x":7,"y":218,"isTile":true,"recent":1735398443645,"frequent":1},{"idnum":71783,"id":"X71783","images":"11.png","x":7,"y":222,"isTile":true,"recent":1735398426909,"frequent":7},{"idnum":71799,"id":"X71799","images":"11.png","x":7,"y":224,"isTile":true,"recent":1735398421365,"frequent":5},{"idnum":71826,"id":"X71826","images":"11.png","x":2,"y":228,"isTile":true,"recent":1735398415661,"frequent":2},{"idnum":71818,"id":"X71818","images":"11.png","x":2,"y":227,"isTile":true,"recent":1735398413269,"frequent":3},{"idnum":224,"id":"swordsman","images":"enemys","y":23,"recent":1735398341974,"frequent":6},{"idnum":71842,"id":"X71842","images":"11.png","x":2,"y":230,"isTile":true,"recent":1735398315069,"frequent":1},{"idnum":71834,"id":"X71834","images":"11.png","x":2,"y":229,"isTile":true,"recent":1735398312437,"frequent":1},{"idnum":110114,"id":"X110114","images":"C4.png","x":2,"y":14,"isTile":true,"recent":1735398246502,"frequent":6},{"idnum":110122,"id":"X110122","images":"C4.png","x":2,"y":15,"isTile":true,"recent":1735398239998,"frequent":1},{"idnum":110028,"id":"X110028","images":"C4.png","x":4,"y":3,"isTile":true,"recent":1735398198709,"frequent":2},{"idnum":110020,"id":"X110020","images":"C4.png","x":4,"y":2,"isTile":true,"recent":1735398191398,"frequent":2},{"idnum":71791,"id":"X71791","images":"11.png","x":7,"y":223,"isTile":true,"recent":1735398163774,"frequent":3},{"idnum":71785,"id":"X71785","images":"11.png","x":1,"y":223,"isTile":true,"recent":1735398120734,"frequent":2},{"idnum":71784,"id":"X71784","images":"11.png","x":0,"y":223,"isTile":true,"recent":1735398118318,"frequent":3},{"idnum":71793,"id":"X71793","images":"11.png","x":1,"y":224,"isTile":true,"recent":1735398115446,"frequent":2},{"idnum":71792,"id":"X71792","images":"11.png","x":0,"y":224,"isTile":true,"recent":1735398113142,"frequent":2},{"idnum":71787,"id":"X71787","images":"11.png","x":3,"y":223,"isTile":true,"recent":1735398102326,"frequent":1},{"idnum":71786,"id":"X71786","images":"11.png","x":2,"y":223,"isTile":true,"recent":1735398099430,"frequent":1},{"idnum":71795,"id":"X71795","images":"11.png","x":3,"y":224,"isTile":true,"recent":1735398097359,"frequent":1},{"idnum":71794,"id":"X71794","images":"11.png","x":2,"y":224,"isTile":true,"recent":1735398094982,"frequent":1},{"idnum":130006,"id":"X130006","images":"C2.png","x":6,"y":0,"isTile":true,"recent":1735398082894,"frequent":3},{"idnum":130011,"id":"X130011","images":"C2.png","x":3,"y":1,"isTile":true,"recent":1735398078792,"frequent":2},{"idnum":71817,"id":"X71817","images":"11.png","x":1,"y":227,"isTile":true,"recent":1735398027294,"frequent":3},{"idnum":71837,"id":"X71837","images":"11.png","x":5,"y":229,"isTile":true,"recent":1735398013126,"frequent":1},{"idnum":71829,"id":"X71829","images":"11.png","x":5,"y":228,"isTile":true,"recent":1735398008166,"frequent":1},{"idnum":71821,"id":"X71821","images":"11.png","x":5,"y":227,"isTile":true,"recent":1735398005430,"frequent":1},{"idnum":71836,"id":"X71836","images":"11.png","x":4,"y":229,"isTile":true,"recent":1735397997622,"frequent":1},{"idnum":71828,"id":"X71828","images":"11.png","x":4,"y":228,"isTile":true,"recent":1735397993455,"frequent":1},{"idnum":71820,"id":"X71820","images":"11.png","x":4,"y":227,"isTile":true,"recent":1735397989903,"frequent":1},{"idnum":30217,"id":"X30217","images":"4.png","x":1,"y":27,"isTile":true,"recent":1735397944838,"frequent":3},{"idnum":110012,"id":"X110012","images":"C4.png","x":4,"y":1,"isTile":true,"recent":1735397929366,"frequent":2},{"idnum":100485,"id":"X100485","images":"Outside_B.png","x":5,"y":20,"isTile":true,"recent":1735397919927,"frequent":2},{"idnum":100436,"id":"X100436","images":"Outside_B.png","x":4,"y":18,"isTile":true,"recent":1735397880486,"frequent":1},{"idnum":100437,"id":"X100437","images":"Outside_B.png","x":5,"y":18,"isTile":true,"recent":1735397877086,"frequent":1},{"idnum":100461,"id":"X100461","images":"Outside_B.png","x":5,"y":19,"isTile":true,"recent":1735397868606,"frequent":1},{"idnum":100460,"id":"X100460","images":"Outside_B.png","x":4,"y":19,"isTile":true,"recent":1735397843448,"frequent":2},{"idnum":100484,"id":"X100484","images":"Outside_B.png","x":4,"y":20,"isTile":true,"recent":1735397840545,"frequent":2},{"idnum":40136,"id":"X40136","images":"3.png","x":0,"y":17,"isTile":true,"recent":1735397799150,"frequent":1},{"idnum":40144,"id":"X40144","images":"3.png","x":0,"y":18,"isTile":true,"recent":1735397796038,"frequent":2},{"idnum":30227,"id":"X30227","images":"4.png","x":3,"y":28,"isTile":true,"recent":1735397775591,"frequent":2},{"idnum":30214,"id":"X30214","images":"4.png","x":6,"y":26,"isTile":true,"recent":1735397768303,"frequent":1},{"idnum":30218,"id":"X30218","images":"4.png","x":2,"y":27,"isTile":true,"recent":1735397761062,"frequent":1},{"idnum":120041,"id":"X120041","images":"C3.png","x":1,"y":5,"isTile":true,"recent":1735397710494,"frequent":1},{"idnum":120042,"id":"X120042","images":"C3.png","x":2,"y":5,"isTile":true,"recent":1735397702167,"frequent":2},{"idnum":120006,"id":"X120006","images":"C3.png","x":6,"y":0,"isTile":true,"recent":1735397659951,"frequent":5},{"idnum":120014,"id":"X120014","images":"C3.png","x":6,"y":1,"isTile":true,"recent":1735397644591,"frequent":4},{"idnum":120090,"id":"X120090","images":"C3.png","x":2,"y":11,"isTile":true,"recent":1735397629759,"frequent":3},{"idnum":120150,"id":"X120150","images":"C3.png","x":6,"y":18,"isTile":true,"recent":1735397613207,"frequent":3},{"idnum":120166,"id":"X120166","images":"C3.png","x":6,"y":20,"isTile":true,"recent":1735397574639,"frequent":1},{"idnum":140170,"id":"X140170","images":"C1.png","x":2,"y":21,"isTile":true,"recent":1735397516295,"frequent":1},{"idnum":110119,"id":"X110119","images":"C4.png","x":7,"y":14,"isTile":true,"recent":1735397434752,"frequent":3},{"idnum":80083,"id":"X80083","images":"6.png","x":3,"y":10,"isTile":true,"recent":1735397403120,"frequent":6},{"idnum":80082,"id":"X80082","images":"6.png","x":2,"y":10,"isTile":true,"recent":1735397393215,"frequent":2},{"idnum":71824,"id":"X71824","images":"11.png","x":0,"y":228,"isTile":true,"recent":1735397302354,"frequent":1},{"idnum":71816,"id":"X71816","images":"11.png","x":0,"y":227,"isTile":true,"recent":1735397300089,"frequent":1},{"idnum":71825,"id":"X71825","images":"11.png","x":1,"y":228,"isTile":true,"recent":1735397296728,"frequent":1},{"idnum":71841,"id":"X71841","images":"11.png","x":1,"y":230,"isTile":true,"recent":1735397274905,"frequent":1},{"idnum":71840,"id":"X71840","images":"11.png","x":0,"y":230,"isTile":true,"recent":1735397272160,"frequent":1},{"idnum":71833,"id":"X71833","images":"11.png","x":1,"y":229,"isTile":true,"recent":1735397269433,"frequent":1},{"idnum":71832,"id":"X71832","images":"11.png","x":0,"y":229,"isTile":true,"recent":1735397266704,"frequent":1},{"idnum":71815,"id":"X71815","images":"11.png","x":7,"y":226,"isTile":true,"recent":1735397232288,"frequent":1},{"idnum":71807,"id":"X71807","images":"11.png","x":7,"y":225,"isTile":true,"recent":1735397229624,"frequent":1},{"idnum":71827,"id":"X71827","images":"11.png","x":3,"y":228,"isTile":true,"recent":1735397220728,"frequent":1},{"idnum":71819,"id":"X71819","images":"11.png","x":3,"y":227,"isTile":true,"recent":1735397218496,"frequent":1},{"idnum":120173,"id":"X120173","images":"C3.png","x":5,"y":21,"isTile":true,"recent":1735397183385,"frequent":3},{"idnum":120174,"id":"X120174","images":"C3.png","x":6,"y":21,"isTile":true,"recent":1735397125953,"frequent":6},{"idnum":120134,"id":"X120134","images":"C3.png","x":6,"y":16,"isTile":true,"recent":1735396971049,"frequent":1},{"idnum":130173,"id":"X130173","images":"C2.png","x":5,"y":21,"isTile":true,"recent":1735396958897,"frequent":1},{"idnum":120109,"id":"X120109","images":"C3.png","x":5,"y":13,"isTile":true,"recent":1735396928298,"frequent":2},{"idnum":120117,"id":"X120117","images":"C3.png","x":5,"y":14,"isTile":true,"recent":1735396877690,"frequent":1},{"idnum":120125,"id":"X120125","images":"C3.png","x":5,"y":15,"isTile":true,"recent":1735396864194,"frequent":6},{"idnum":70169,"id":"X70169","images":"11.png","x":1,"y":21,"isTile":true,"recent":1735396825666,"frequent":3},{"idnum":70161,"id":"X70161","images":"11.png","x":1,"y":20,"isTile":true,"recent":1735396814418,"frequent":3},{"idnum":70145,"id":"X70145","images":"11.png","x":1,"y":18,"isTile":true,"recent":1735396802466,"frequent":14},{"idnum":70146,"id":"X70146","images":"11.png","x":2,"y":18,"isTile":true,"recent":1735396788810,"frequent":1},{"idnum":70144,"id":"X70144","images":"11.png","x":0,"y":18,"isTile":true,"recent":1735396782475,"frequent":4},{"idnum":100386,"id":"X100386","images":"Outside_B.png","x":2,"y":16,"isTile":true,"recent":1735396757386,"frequent":1},{"idnum":100362,"id":"X100362","images":"Outside_B.png","x":2,"y":15,"isTile":true,"recent":1735396754546,"frequent":1},{"idnum":100385,"id":"X100385","images":"Outside_B.png","x":1,"y":16,"isTile":true,"recent":1735396751066,"frequent":1},{"idnum":100384,"id":"X100384","images":"Outside_B.png","x":0,"y":16,"isTile":true,"recent":1735396747826,"frequent":1},{"idnum":100361,"id":"X100361","images":"Outside_B.png","x":1,"y":15,"isTile":true,"recent":1735396745106,"frequent":2},{"idnum":100360,"id":"X100360","images":"Outside_B.png","x":0,"y":15,"isTile":true,"recent":1735396742682,"frequent":3},{"idnum":90196,"id":"X90196","images":"12.png","x":4,"y":24,"isTile":true,"recent":1735396698234,"frequent":1},{"idnum":90195,"id":"X90195","images":"12.png","x":3,"y":24,"isTile":true,"recent":1735396695530,"frequent":1},{"idnum":90194,"id":"X90194","images":"12.png","x":2,"y":24,"isTile":true,"recent":1735396691098,"frequent":1},{"idnum":90187,"id":"X90187","images":"12.png","x":3,"y":23,"isTile":true,"recent":1735396687866,"frequent":3},{"idnum":90186,"id":"X90186","images":"12.png","x":2,"y":23,"isTile":true,"recent":1735396672410,"frequent":1},{"idnum":31,"id":"redPotion","images":"items","y":20,"recent":1735396611866,"frequent":7},{"idnum":221,"id":"yellowGateKeeper","images":"enemys","y":20,"recent":1735396537794,"frequent":4},{"idnum":222,"id":"blueGateKeeper","images":"enemys","y":21,"recent":1735396534626,"frequent":3},{"idnum":226,"id":"yellowKnight","images":"enemys","y":25,"recent":1735396460524,"frequent":1},{"idnum":225,"id":"soldier","images":"enemys","y":24,"recent":1735396456036,"frequent":1},{"idnum":326,"id":"tulipFairy","images":"enemys","y":72,"recent":1735396229196,"frequent":1},{"idnum":141,"id":"autotile8","images":"autotile","y":0,"recent":1735391328901,"frequent":2},{"idnum":30,"id":"yellowGem","images":"items","y":19,"recent":1735391294213,"frequent":1},{"idnum":44,"id":"shield5","images":"items","y":59,"recent":1735391193096,"frequent":1},{"idnum":138,"id":"blueTrader","images":"npcs","y":13,"recent":1735391190680,"frequent":1},{"idnum":43,"id":"sword5","images":"items","y":54,"recent":1735391188576,"frequent":1}]}
\ No newline at end of file
+{ "viewportLoc": [0, 0], "editorLastFloorId": "jiedao" }
diff --git a/_server/editor_blocklyconfig.js b/_server/editor_blocklyconfig.js
index be72015..6c99618 100644
--- a/_server/editor_blocklyconfig.js
+++ b/_server/editor_blocklyconfig.js
@@ -1,705 +1,908 @@
-editor_blocklyconfig=(function(){
-// start mark sfergsvae
+editor_blocklyconfig = function () {
+ // start mark sfergsvae
+ (function () {
+ var getCategory = function (name, custom) {
+ for (var node of document.getElementById("toolbox").children) {
+ if (node.getAttribute("name") == name) return node;
+ }
+ var node = document.createElement("category");
+ node.setAttribute("name", name);
+ if (custom) node.setAttribute("custom", custom);
+ document.getElementById("toolbox").appendChild(node);
+ return node;
+ };
-
-(function(){
- var getCategory = function(name,custom){
- for(var node of document.getElementById('toolbox').children) {
- if(node.getAttribute('name')==name) return node;
- }
- var node = document.createElement('category');
- node.setAttribute('name',name);
- if(custom)node.setAttribute('custom',custom);
- document.getElementById('toolbox').appendChild(node);
- return node;
- }
-
- var toolboxObj = {
- '入口方块':[
- '',
- MotaActionFunctions.actionParser.parse([
- "欢迎使用事件编辑器",
- "本事件触发一次后会消失",
- {"type": "hide", "time": 500},
- ],'event'),
- MotaActionFunctions.actionParser.parse({
- "condition": "flag:__door__===2",
- "currentFloor": true,
- "priority": 0,
- "delayExecute": false,
- "multiExecute": false,
- "data": [
- {"type": "openDoor", "loc": [10,5]}
- ],
- },'autoEvent'),
- MotaActionBlocks['changeFloor_m'].xmlText(),
- MotaActionFunctions.actionParser.parse([{
- "id": "shop1",
- "text": "\t[贪婪之神,moneyShop]勇敢的武士啊, 给我${20+2*flag:shop1}金币就可以:",
- "textInList": "1F金币商店",
- "choices": [
- {"text": "生命+800", "need": "status:money>=20+2*flag:shop1", "action": [
- {"type": "comment", "text": "新版商店中需要手动扣减金币和增加访问次数"},
- {"type": "setValue", "name": "status:money", "operator": "-=", "value": "20+2*flag:shop1"},
- {"type": "setValue", "name": "flag:shop1", "operator": "+=", "value": "1"},
- {"type": "setValue", "name": "status:hp", "operator": "+=", "value": "800"}
- ]}
- ]
- },{
- "id": "itemShop",
- "item": true,
- "textInList": "道具商店",
- "choices": [
- {"id": "yellowKey", "number": 10, "money": 10}
- ]
- },{
- "id": "keyShop1",
- "textInList": "回收钥匙商店",
- "commonEvent": "回收钥匙商店",
- "args": ""
- }],'shop'),
- MotaActionBlocks['common_m'].xmlText(),
- MotaActionBlocks['beforeBattle_m'].xmlText(),
- MotaActionBlocks['afterBattle_m'].xmlText(),
- MotaActionBlocks['afterGetItem_m'].xmlText(),
- MotaActionBlocks['afterOpenDoor_m'].xmlText(),
- MotaActionBlocks['firstArrive_m'].xmlText(),
- MotaActionBlocks['eachArrive_m'].xmlText(),
- MotaActionBlocks['level_m'].xmlText(),
- MotaActionFunctions.actionParser.parse([
- ['MTx', '']
- ], 'floorPartition'),
- MotaActionBlocks['commonEvent_m'].xmlText(),
- MotaActionBlocks['item_m'].xmlText(),
- MotaActionFunctions.actionParser.parse([
- {"title":"简单", "name": "Easy", "hard": 1, "action": [
- {"type": "comment", "text": "在这里写该难度需执行的事件"}
- ]}
- ], 'levelChoose'),
- MotaActionFunctions.actionParser.parse({
- "type": 0, "value": {"atk": 10}, "percentage": {"speed": 10},
- }, 'equip'),
- MotaActionFunctions.actionParser.parse([{
- "name": "bg.jpg", "x": 0, "y": 0, "canvas": "bg"
- }], 'floorImage'),
- MotaActionFunctions.actionParser.parse({
- "time": 160, "openSound": "door.mp3", "closeSound": "door.mp3", "keys": {"yellowKey": 1, "orangeKey": 1}
- }, 'doorInfo'),
- MotaActionBlocks['faceIds_m'].xmlText(),
- MotaActionBlocks['mainStyle_m'].xmlText(),
- MotaActionFunctions.actionParser.parse({
- "背景音乐": "bgm.mp3", "确定": "confirm.mp3", "攻击": "attack.mp3", "背景图": "bg.jpg", "领域": "zone", "文件名": "file.jpg"
- }, 'nameMap'),
- MotaActionFunctions.actionParser.parse([
- {"name": "hero.png", "width": 32, "height": 32, "prefix": "hero_"},
- ], 'splitImages'),
- ],
- '显示文字':[
- MotaActionBlocks['text_0_s'].xmlText(),
- MotaActionBlocks['text_1_s'].xmlText(),
- MotaActionFunctions.actionParser.parseList("\t[小妖精,fairy]\f[fairy.png,0,0]欢迎使用事件编辑器(双击方块可直接预览)"),
- MotaActionBlocks['moveTextBox_s'].xmlText(),
- MotaActionBlocks['clearTextBox_s'].xmlText(),
- MotaActionBlocks['comment_s'].xmlText(),
- MotaActionBlocks['autoText_s'].xmlText(),
- MotaActionBlocks['scrollText_s'].xmlText(),
- MotaActionBlocks['setText_s'].xmlText(),
- MotaActionBlocks['tip_s'].xmlText(),
- MotaActionBlocks['confirm_s'].xmlText(),
- MotaActionBlocks['choices_s'].xmlText([
- '选择剑或者盾','流浪者','man',0,'',MotaActionBlocks['choicesContext'].xmlText([
- '剑','','',null,'','',MotaActionFunctions.actionParser.parseList([{"type": "openDoor", "loc": [3,3]}]),
- ])
- ]),
- MotaActionBlocks['win_s'].xmlText(),
- MotaActionBlocks['lose_s'].xmlText(),
- MotaActionBlocks['restart_s'].xmlText(),
- ],
- '数据相关':[
- MotaActionBlocks['setValue_s'].xmlText([
- MotaActionBlocks['idIdList_e'].xmlText(['status','生命']), '=', '', false
- ]),
- MotaActionBlocks['setEnemy_s'].xmlText(),
- MotaActionBlocks['setEnemyOnPoint_s'].xmlText(),
- MotaActionBlocks['resetEnemyOnPoint_s'].xmlText(),
- MotaActionBlocks['moveEnemyOnPoint_s'].xmlText(),
- MotaActionBlocks['moveEnemyOnPoint_1_s'].xmlText(),
- MotaActionBlocks['setEquip_s'].xmlText(),
- MotaActionBlocks['setFloor_s'].xmlText(),
- MotaActionBlocks['setGlobalAttribute_s'].xmlText(),
- MotaActionBlocks['setGlobalValue_s'].xmlText(),
- MotaActionBlocks['setGlobalFlag_s'].xmlText(),
- MotaActionBlocks['setNameMap_s'].xmlText(),
- MotaActionBlocks['input_s'].xmlText(),
- MotaActionBlocks['input2_s'].xmlText(),
- MotaActionBlocks['update_s'].xmlText(),
- MotaActionBlocks['moveAction_s'].xmlText(),
- MotaActionBlocks['changeFloor_s'].xmlText(),
- MotaActionBlocks['changePos_s'].xmlText(),
- MotaActionBlocks['battle_s'].xmlText(),
- MotaActionBlocks['useItem_s'].xmlText(),
- MotaActionBlocks['loadEquip_s'].xmlText(),
- MotaActionBlocks['unloadEquip_s'].xmlText(),
- MotaActionBlocks['openShop_s'].xmlText(),
- MotaActionBlocks['disableShop_s'].xmlText(),
- MotaActionBlocks['setHeroIcon_s'].xmlText(),
- MotaActionBlocks['follow_s'].xmlText(),
- MotaActionBlocks['unfollow_s'].xmlText(),
- ],
- '地图处理':[
- MotaActionBlocks['battle_1_s'].xmlText(),
- MotaActionBlocks['openDoor_s'].xmlText(),
- MotaActionBlocks['closeDoor_s'].xmlText(),
- MotaActionBlocks['show_s'].xmlText(),
- MotaActionBlocks['hide_s'].xmlText(),
- MotaActionBlocks['setBlock_s'].xmlText(),
- MotaActionBlocks['setBlockOpacity_s'].xmlText(),
- MotaActionBlocks['setBlockFilter_s'].xmlText(),
- MotaActionBlocks['turnBlock_s'].xmlText(),
- MotaActionBlocks['moveHero_s'].xmlText(),
- MotaActionBlocks['move_s'].xmlText(),
- MotaActionBlocks['jumpHero_s'].xmlText(),
- MotaActionBlocks['jumpHero_1_s'].xmlText(),
- MotaActionBlocks['jump_s'].xmlText(),
- MotaActionBlocks['jump_1_s'].xmlText(),
- MotaActionBlocks['showBgFgMap_s'].xmlText(),
- MotaActionBlocks['hideBgFgMap_s'].xmlText(),
- MotaActionBlocks['setBgFgBlock_s'].xmlText(),
- MotaActionBlocks['showFloorImg_s'].xmlText(),
- MotaActionBlocks['hideFloorImg_s'].xmlText(),
- ],
- '事件控制':[
- MotaActionBlocks['if_1_s'].xmlText(),
- MotaActionBlocks['if_s'].xmlText(),
- MotaActionFunctions.actionParser.parseList({"type": "switch", "condition": "判别值", "caseList": [
- {"action": [{"type": "comment", "text": "当判别值是值的场合执行此事件"}]},
- {"case": "default", "action": [{"type": "comment", "text": "当没有符合的值的场合执行default事件"}]},
- ]}),
- MotaActionFunctions.actionParser.parseList({"type": "for", "name": "temp:A", "from": "0", "to": "12", "step": "1", "data": []}),
- MotaActionFunctions.actionParser.parseList({"type": "forEach", "name": "temp:A", "list": ["status:atk","status:def"], "data": []}),
- MotaActionBlocks['while_s'].xmlText(),
- MotaActionBlocks['dowhile_s'].xmlText(),
- MotaActionBlocks['break_s'].xmlText(),
- MotaActionBlocks['continue_s'].xmlText(),
- MotaActionBlocks['exit_s'].xmlText(),
- MotaActionBlocks['trigger_s'].xmlText(),
- MotaActionBlocks['insert_1_s'].xmlText(),
- MotaActionBlocks['insert_2_s'].xmlText(),
- ],
- '特效表现':[
- MotaActionBlocks['sleep_s'].xmlText(),
- MotaActionFunctions.actionParser.parseList({"type": "wait", "timeout": 0, "data": [
- {"case": "keyboard", "keycode": "13,32", "action": [{"type": "comment", "text": "当按下回车(keycode=13)或空格(keycode=32)时执行此事件\n超时剩余时间会写入flag:timeout"}]},
- {"case": "mouse", "px": [0,32], "py": [0,32], "action": [{"type": "comment", "text": "当点击地图左上角时执行此事件\n超时剩余时间会写入flag:timeout"}]},
- {"case": "condition", "condition": "flag:type==0\n&&flag:keycode==13", "action": [{"type": "comment", "text": "当满足自定义条件时会执行此事件\n超时剩余时间会写入flag:timeout"}]},
- {"case": "timeout", "action": [{"type": "comment", "text": "当超时未操作时执行此事件"}]},
- ]}),
- MotaActionBlocks['waitAsync_s'].xmlText(),
- MotaActionBlocks['stopAsync_s'].xmlText(),
- MotaActionBlocks['vibrate_s'].xmlText(),
- MotaActionBlocks['animate_s'].xmlText(),
- MotaActionBlocks['animate_1_s'].xmlText(),
- MotaActionBlocks['stopAnimate_s'].xmlText(),
- MotaActionBlocks['setViewport_s'].xmlText(),
- MotaActionBlocks['setViewport_1_s'].xmlText(),
- MotaActionBlocks['lockViewport_s'].xmlText(),
- MotaActionBlocks['showStatusBar_s'].xmlText(),
- MotaActionBlocks['hideStatusBar_s'].xmlText(),
- MotaActionBlocks['setHeroOpacity_s'].xmlText(),
- MotaActionBlocks['setCurtain_0_s'].xmlText(),
- MotaActionBlocks['setCurtain_1_s'].xmlText(),
- MotaActionBlocks['screenFlash_s'].xmlText(),
- MotaActionBlocks['setWeather_s'].xmlText(),
- MotaActionBlocks['callBook_s'].xmlText(),
- MotaActionBlocks['callSave_s'].xmlText(),
- MotaActionBlocks['autoSave_s'].xmlText(),
- MotaActionBlocks['forbidSave_s'].xmlText(),
- MotaActionBlocks['callLoad_s'].xmlText(),
- ],
- '音像处理':[
- MotaActionBlocks['showImage_s'].xmlText(),
- MotaActionBlocks['showImage_1_s'].xmlText(),
- MotaActionBlocks['hideImage_s'].xmlText(),
- MotaActionBlocks['showTextImage_s'].xmlText(),
- MotaActionBlocks['moveImage_s'].xmlText(),
- MotaActionBlocks['rotateImage_s'].xmlText(),
- MotaActionBlocks['scaleImage_s'].xmlText(),
- MotaActionBlocks['showGif_s'].xmlText(),
- MotaActionBlocks['playBgm_s'].xmlText(),
- MotaActionBlocks['pauseBgm_s'].xmlText(),
- MotaActionBlocks['resumeBgm_s'].xmlText(),
- MotaActionBlocks['loadBgm_s'].xmlText(),
- MotaActionBlocks['freeBgm_s'].xmlText(),
- MotaActionBlocks['playSound_s'].xmlText(),
- MotaActionBlocks['playSound_1_s'].xmlText(),
- MotaActionBlocks['stopSound_s'].xmlText(),
- MotaActionBlocks['setVolume_s'].xmlText(),
- MotaActionBlocks['setBgmSpeed_s'].xmlText(),
- ],
- 'UI绘制':[
- MotaActionBlocks['previewUI_s'].xmlText(),
- MotaActionBlocks['clearMap_s'].xmlText(),
- MotaActionBlocks['setAttribute_s'].xmlText(),
- MotaActionBlocks['setFilter_s'].xmlText(),
- MotaActionBlocks['fillText_s'].xmlText(),
- MotaActionBlocks['fillBoldText_s'].xmlText(),
- MotaActionBlocks['drawTextContent_s'].xmlText(),
- MotaActionBlocks['fillRect_s'].xmlText(),
- MotaActionBlocks['strokeRect_s'].xmlText(),
- MotaActionBlocks['drawLine_s'].xmlText(),
- MotaActionBlocks['drawArrow_s'].xmlText(),
- MotaActionBlocks['fillPolygon_s'].xmlText(),
- MotaActionBlocks['strokePolygon_s'].xmlText(),
- MotaActionBlocks['fillEllipse_s'].xmlText(),
- MotaActionBlocks['strokeEllipse_s'].xmlText(),
- MotaActionBlocks['fillArc_s'].xmlText(),
- MotaActionBlocks['strokeArc_s'].xmlText(),
- MotaActionBlocks['drawImage_s'].xmlText(),
- MotaActionBlocks['drawImage_1_s'].xmlText(),
- MotaActionBlocks['drawIcon_s'].xmlText(),
- MotaActionBlocks['drawBackground_s'].xmlText(),
- MotaActionBlocks['drawSelector_s'].xmlText(),
- MotaActionBlocks['drawSelector_1_s'].xmlText(),
- ],
- '原生脚本':[
- MotaActionBlocks['function_s'].xmlText(),
- MotaActionBlocks['unknown_s'].xmlText(),
- ],
- '值块':[
- MotaActionBlocks['setValue_s'].xmlText([
- MotaActionBlocks['idIdList_e'].xmlText(['status','生命']), '=', '', false
- ]),
- MotaActionBlocks['expression_arithmetic_0'].xmlText(),
- MotaActionBlocks['idFlag_e'].xmlText(),
- MotaActionBlocks['idTemp_e'].xmlText(),
- MotaActionBlocks['negate_e'].xmlText(),
- MotaActionBlocks['unaryOperation_e'].xmlText(),
- MotaActionBlocks['bool_e'].xmlText(),
- MotaActionBlocks['idString_e'].xmlText(),
- MotaActionBlocks['idIdList_e'].xmlText(),
- MotaActionBlocks['idFixedList_e'].xmlText(),
- MotaActionBlocks['enemyattr_e'].xmlText(),
- MotaActionBlocks['blockId_e'].xmlText(),
- MotaActionBlocks['blockNumber_e'].xmlText(),
- MotaActionBlocks['blockCls_e'].xmlText(),
- MotaActionBlocks['hasEquip_e'].xmlText(),
- MotaActionBlocks['equip_e'].xmlText(),
- MotaActionBlocks['nextXY_e'].xmlText(),
- MotaActionBlocks['isReplaying_e'].xmlText(),
- MotaActionBlocks['hasVisitedFloor_e'].xmlText(),
- MotaActionBlocks['isShopVisited_e'].xmlText(),
- MotaActionBlocks['canBattle_e'].xmlText(),
- MotaActionBlocks['damage_e'].xmlText(),
- MotaActionBlocks['damage_1_e'].xmlText(),
- MotaActionBlocks['rand_e'].xmlText(),
- MotaActionBlocks['evalString_e'].xmlText(),
- ],
- '常见事件模板':[
- '',
- MotaActionFunctions.actionParser.parseList({"type": "if", "condition": "!core.musicStatus.bgmStatus",
- "true": [
- "\t[系统提示]你当前音乐处于关闭状态,本塔开音乐游戏效果更佳"
- ],
- "false": []
- }),
- '',
- MotaActionFunctions.actionParser.parse([
- {
- "type": "if",
- "condition": "switch:A",
- "true": [
- "\t[行商,trader]\b[this]这是购买我的道具后我给玩家的提示。",
- {
- "type": "comment",
- "text": "下一条指令可视情况使用或不使用"
- },
- {
- "type": "hide",
- "remove": true,
- "time": 250
- }
+ var toolboxObj = {
+ 入口方块: [
+ '',
+ MotaActionFunctions.actionParser.parse(
+ [
+ "欢迎使用事件编辑器",
+ "本事件触发一次后会消失",
+ { type: "hide", time: 500 },
],
- "false": [
+ "event"
+ ),
+ MotaActionFunctions.actionParser.parse(
+ {
+ condition: "flag:__door__===2",
+ currentFloor: true,
+ priority: 0,
+ delayExecute: false,
+ multiExecute: false,
+ data: [{ type: "openDoor", loc: [10, 5] }],
+ },
+ "autoEvent"
+ ),
+ MotaActionBlocks["changeFloor_m"].xmlText(),
+ MotaActionFunctions.actionParser.parse(
+ [
{
- "type": "confirm",
- "text": "我有3把黄钥匙,\n你出50金币就卖给你。",
- "yes": [
+ id: "shop1",
+ text: "\t[贪婪之神,moneyShop]勇敢的武士啊, 给我${20+2*flag:shop1}金币就可以:",
+ textInList: "1F金币商店",
+ choices: [
{
- "type": "if",
- "condition": "status:money>=50",
- "true": [
+ text: "生命+800",
+ need: "status:money>=20+2*flag:shop1",
+ action: [
{
- "type": "setValue",
- "name": "status:money",
- "operator": "-=",
- "value": "50"
+ type: "comment",
+ text: "新版商店中需要手动扣减金币和增加访问次数",
},
{
- "type": "setValue",
- "name": "item:yellowKey",
- "operator": "+=",
- "value": "3"
+ type: "setValue",
+ name: "status:money",
+ operator: "-=",
+ value: "20+2*flag:shop1",
},
{
- "type": "playSound",
- "name": "确定",
- "stop": true
+ type: "setValue",
+ name: "flag:shop1",
+ operator: "+=",
+ value: "1",
},
{
- "type": "setValue",
- "name": "switch:A",
- "value": "true"
- }
+ type: "setValue",
+ name: "status:hp",
+ operator: "+=",
+ value: "800",
+ },
],
- "false": [
- {
- "type": "playSound",
- "name": "操作失败"
- },
- "\t[行商,trader]\b[this]你的金币不足!"
- ]
- }
+ },
],
- "no": []
- }
- ]
- }
- ], 'event'),
- '',
- MotaActionFunctions.actionParser.parse([
- {
- "type": "comment",
- "text": "全地图选中一个点,需要用鼠标或触屏操作"
- },
- {
- "type": "setValue",
- "name": "temp:X",
- "value": "status:x"
- },
- {
- "type": "setValue",
- "name": "temp:Y",
- "value": "status:y"
- },
- {
- "type": "tip",
- "text": "再次点击闪烁位置确认"
- },
- {
- "type": "while",
- "condition": "true",
- "data": [
- {
- "type": "drawSelector",
- "image": "winskin.png",
- "code": 1,
- "x": "32*temp:X",
- "y": "32*temp:Y",
- "width": 32,
- "height": 32
},
{
- "type": "wait"
+ id: "itemShop",
+ item: true,
+ textInList: "道具商店",
+ choices: [{ id: "yellowKey", number: 10, money: 10 }],
},
{
- "type": "if",
- "condition": "(flag:type === 1)",
- "true": [
+ id: "keyShop1",
+ textInList: "回收钥匙商店",
+ commonEvent: "回收钥匙商店",
+ args: "",
+ },
+ ],
+ "shop"
+ ),
+ MotaActionBlocks["common_m"].xmlText(),
+ MotaActionBlocks["beforeBattle_m"].xmlText(),
+ MotaActionBlocks["afterBattle_m"].xmlText(),
+ MotaActionBlocks["afterGetItem_m"].xmlText(),
+ MotaActionBlocks["afterOpenDoor_m"].xmlText(),
+ MotaActionBlocks["firstArrive_m"].xmlText(),
+ MotaActionBlocks["eachArrive_m"].xmlText(),
+ MotaActionBlocks["level_m"].xmlText(),
+ MotaActionFunctions.actionParser.parse([["MTx", ""]], "floorPartition"),
+ MotaActionBlocks["commonEvent_m"].xmlText(),
+ MotaActionBlocks["item_m"].xmlText(),
+ MotaActionFunctions.actionParser.parse(
+ [
+ {
+ title: "简单",
+ name: "Easy",
+ hard: 1,
+ action: [{ type: "comment", text: "在这里写该难度需执行的事件" }],
+ },
+ ],
+ "levelChoose"
+ ),
+ MotaActionFunctions.actionParser.parse(
+ {
+ type: 0,
+ value: { atk: 10 },
+ percentage: { speed: 10 },
+ },
+ "equip"
+ ),
+ MotaActionFunctions.actionParser.parse(
+ [
+ {
+ name: "bg.jpg",
+ x: 0,
+ y: 0,
+ canvas: "bg",
+ },
+ ],
+ "floorImage"
+ ),
+ MotaActionFunctions.actionParser.parse(
+ {
+ time: 160,
+ openSound: "door.mp3",
+ closeSound: "door.mp3",
+ keys: { yellowKey: 1, orangeKey: 1 },
+ },
+ "doorInfo"
+ ),
+ MotaActionBlocks["faceIds_m"].xmlText(),
+ MotaActionBlocks["mainStyle_m"].xmlText(),
+ MotaActionFunctions.actionParser.parse(
+ {
+ 背景音乐: "bgm.mp3",
+ 确定: "confirm.mp3",
+ 攻击: "attack.mp3",
+ 背景图: "bg.jpg",
+ 领域: "zone",
+ 文件名: "file.jpg",
+ },
+ "nameMap"
+ ),
+ MotaActionFunctions.actionParser.parse(
+ [{ name: "hero.png", width: 32, height: 32, prefix: "hero_" }],
+ "splitImages"
+ ),
+ ],
+ 显示文字: [
+ MotaActionBlocks["text_0_s"].xmlText(),
+ MotaActionBlocks["text_1_s"].xmlText(),
+ MotaActionFunctions.actionParser.parseList(
+ "\t[小妖精,fairy]\f[fairy.png,0,0]欢迎使用事件编辑器(双击方块可直接预览)"
+ ),
+ MotaActionBlocks["moveTextBox_s"].xmlText(),
+ MotaActionBlocks["clearTextBox_s"].xmlText(),
+ MotaActionBlocks["comment_s"].xmlText(),
+ MotaActionBlocks["autoText_s"].xmlText(),
+ MotaActionBlocks["scrollText_s"].xmlText(),
+ MotaActionBlocks["setText_s"].xmlText(),
+ MotaActionBlocks["tip_s"].xmlText(),
+ MotaActionBlocks["confirm_s"].xmlText(),
+ MotaActionBlocks["choices_s"].xmlText([
+ "选择剑或者盾",
+ "流浪者",
+ "man",
+ 0,
+ "",
+ MotaActionBlocks["choicesContext"].xmlText([
+ "剑",
+ "",
+ "",
+ null,
+ "",
+ "",
+ MotaActionFunctions.actionParser.parseList([
+ { type: "openDoor", loc: [3, 3] },
+ ]),
+ ]),
+ ]),
+ MotaActionBlocks["win_s"].xmlText(),
+ MotaActionBlocks["lose_s"].xmlText(),
+ MotaActionBlocks["restart_s"].xmlText(),
+ ],
+ 数据相关: [
+ MotaActionBlocks["setValue_s"].xmlText([
+ MotaActionBlocks["idIdList_e"].xmlText(["status", "生命"]),
+ "=",
+ "",
+ false,
+ ]),
+ MotaActionBlocks["setEnemy_s"].xmlText(),
+ MotaActionBlocks["setEnemyOnPoint_s"].xmlText(),
+ MotaActionBlocks["resetEnemyOnPoint_s"].xmlText(),
+ MotaActionBlocks["moveEnemyOnPoint_s"].xmlText(),
+ MotaActionBlocks["moveEnemyOnPoint_1_s"].xmlText(),
+ MotaActionBlocks["setEquip_s"].xmlText(),
+ MotaActionBlocks["setFloor_s"].xmlText(),
+ MotaActionBlocks["setGlobalAttribute_s"].xmlText(),
+ MotaActionBlocks["setGlobalValue_s"].xmlText(),
+ MotaActionBlocks["setGlobalFlag_s"].xmlText(),
+ MotaActionBlocks["setNameMap_s"].xmlText(),
+ MotaActionBlocks["input_s"].xmlText(),
+ MotaActionBlocks["input2_s"].xmlText(),
+ MotaActionBlocks["update_s"].xmlText(),
+ MotaActionBlocks["moveAction_s"].xmlText(),
+ MotaActionBlocks["changeFloor_s"].xmlText(),
+ MotaActionBlocks["changePos_s"].xmlText(),
+ MotaActionBlocks["battle_s"].xmlText(),
+ MotaActionBlocks["useItem_s"].xmlText(),
+ MotaActionBlocks["loadEquip_s"].xmlText(),
+ MotaActionBlocks["unloadEquip_s"].xmlText(),
+ MotaActionBlocks["openShop_s"].xmlText(),
+ MotaActionBlocks["disableShop_s"].xmlText(),
+ MotaActionBlocks["setHeroIcon_s"].xmlText(),
+ MotaActionBlocks["follow_s"].xmlText(),
+ MotaActionBlocks["unfollow_s"].xmlText(),
+ ],
+ 地图处理: [
+ MotaActionBlocks["battle_1_s"].xmlText(),
+ MotaActionBlocks["openDoor_s"].xmlText(),
+ MotaActionBlocks["closeDoor_s"].xmlText(),
+ MotaActionBlocks["show_s"].xmlText(),
+ MotaActionBlocks["hide_s"].xmlText(),
+ MotaActionBlocks["setBlock_s"].xmlText(),
+ MotaActionBlocks["setBlockOpacity_s"].xmlText(),
+ MotaActionBlocks["setBlockFilter_s"].xmlText(),
+ MotaActionBlocks["turnBlock_s"].xmlText(),
+ MotaActionBlocks["moveHero_s"].xmlText(),
+ MotaActionBlocks["move_s"].xmlText(),
+ MotaActionBlocks["jumpHero_s"].xmlText(),
+ MotaActionBlocks["jumpHero_1_s"].xmlText(),
+ MotaActionBlocks["jump_s"].xmlText(),
+ MotaActionBlocks["jump_1_s"].xmlText(),
+ MotaActionBlocks["showBgFgMap_s"].xmlText(),
+ MotaActionBlocks["hideBgFgMap_s"].xmlText(),
+ MotaActionBlocks["setBgFgBlock_s"].xmlText(),
+ MotaActionBlocks["showFloorImg_s"].xmlText(),
+ MotaActionBlocks["hideFloorImg_s"].xmlText(),
+ ],
+ 事件控制: [
+ MotaActionBlocks["if_1_s"].xmlText(),
+ MotaActionBlocks["if_s"].xmlText(),
+ MotaActionFunctions.actionParser.parseList({
+ type: "switch",
+ condition: "判别值",
+ caseList: [
+ {
+ action: [
+ { type: "comment", text: "当判别值是值的场合执行此事件" },
+ ],
+ },
+ {
+ case: "default",
+ action: [
{
- "type": "if",
- "condition": "((temp:X===flag:x)&&(temp:Y===flag:y))",
- "true": [
+ type: "comment",
+ text: "当没有符合的值的场合执行default事件",
+ },
+ ],
+ },
+ ],
+ }),
+ MotaActionFunctions.actionParser.parseList({
+ type: "for",
+ name: "temp:A",
+ from: "0",
+ to: "12",
+ step: "1",
+ data: [],
+ }),
+ MotaActionFunctions.actionParser.parseList({
+ type: "forEach",
+ name: "temp:A",
+ list: ["status:atk", "status:def"],
+ data: [],
+ }),
+ MotaActionBlocks["while_s"].xmlText(),
+ MotaActionBlocks["dowhile_s"].xmlText(),
+ MotaActionBlocks["break_s"].xmlText(),
+ MotaActionBlocks["continue_s"].xmlText(),
+ MotaActionBlocks["exit_s"].xmlText(),
+ MotaActionBlocks["trigger_s"].xmlText(),
+ MotaActionBlocks["insert_1_s"].xmlText(),
+ MotaActionBlocks["insert_2_s"].xmlText(),
+ ],
+ 特效表现: [
+ MotaActionBlocks["sleep_s"].xmlText(),
+ MotaActionFunctions.actionParser.parseList({
+ type: "wait",
+ timeout: 0,
+ data: [
+ {
+ case: "keyboard",
+ keycode: "13,32",
+ action: [
+ {
+ type: "comment",
+ text: "当按下回车(keycode=13)或空格(keycode=32)时执行此事件\n超时剩余时间会写入flag:timeout",
+ },
+ ],
+ },
+ {
+ case: "mouse",
+ px: [0, 32],
+ py: [0, 32],
+ action: [
+ {
+ type: "comment",
+ text: "当点击地图左上角时执行此事件\n超时剩余时间会写入flag:timeout",
+ },
+ ],
+ },
+ {
+ case: "condition",
+ condition: "flag:type==0\n&&flag:keycode==13",
+ action: [
+ {
+ type: "comment",
+ text: "当满足自定义条件时会执行此事件\n超时剩余时间会写入flag:timeout",
+ },
+ ],
+ },
+ {
+ case: "timeout",
+ action: [{ type: "comment", text: "当超时未操作时执行此事件" }],
+ },
+ ],
+ }),
+ MotaActionBlocks["waitAsync_s"].xmlText(),
+ MotaActionBlocks["stopAsync_s"].xmlText(),
+ MotaActionBlocks["vibrate_s"].xmlText(),
+ MotaActionBlocks["animate_s"].xmlText(),
+ MotaActionBlocks["animate_1_s"].xmlText(),
+ MotaActionBlocks["stopAnimate_s"].xmlText(),
+ MotaActionBlocks["setViewport_s"].xmlText(),
+ MotaActionBlocks["setViewport_1_s"].xmlText(),
+ MotaActionBlocks["lockViewport_s"].xmlText(),
+ MotaActionBlocks["showStatusBar_s"].xmlText(),
+ MotaActionBlocks["hideStatusBar_s"].xmlText(),
+ MotaActionBlocks["setHeroOpacity_s"].xmlText(),
+ MotaActionBlocks["setCurtain_0_s"].xmlText(),
+ MotaActionBlocks["setCurtain_1_s"].xmlText(),
+ MotaActionBlocks["screenFlash_s"].xmlText(),
+ MotaActionBlocks["setWeather_s"].xmlText(),
+ MotaActionBlocks["callBook_s"].xmlText(),
+ MotaActionBlocks["callSave_s"].xmlText(),
+ MotaActionBlocks["autoSave_s"].xmlText(),
+ MotaActionBlocks["forbidSave_s"].xmlText(),
+ MotaActionBlocks["callLoad_s"].xmlText(),
+ ],
+ 音像处理: [
+ MotaActionBlocks["showImage_s"].xmlText(),
+ MotaActionBlocks["showImage_1_s"].xmlText(),
+ MotaActionBlocks["hideImage_s"].xmlText(),
+ MotaActionBlocks["showTextImage_s"].xmlText(),
+ MotaActionBlocks["moveImage_s"].xmlText(),
+ MotaActionBlocks["rotateImage_s"].xmlText(),
+ MotaActionBlocks["scaleImage_s"].xmlText(),
+ MotaActionBlocks["showGif_s"].xmlText(),
+ MotaActionBlocks["playBgm_s"].xmlText(),
+ MotaActionBlocks["pauseBgm_s"].xmlText(),
+ MotaActionBlocks["resumeBgm_s"].xmlText(),
+ MotaActionBlocks["loadBgm_s"].xmlText(),
+ MotaActionBlocks["freeBgm_s"].xmlText(),
+ MotaActionBlocks["playSound_s"].xmlText(),
+ MotaActionBlocks["playSound_1_s"].xmlText(),
+ MotaActionBlocks["stopSound_s"].xmlText(),
+ MotaActionBlocks["setVolume_s"].xmlText(),
+ MotaActionBlocks["setBgmSpeed_s"].xmlText(),
+ ],
+ UI绘制: [
+ MotaActionBlocks["previewUI_s"].xmlText(),
+ MotaActionBlocks["clearMap_s"].xmlText(),
+ MotaActionBlocks["setAttribute_s"].xmlText(),
+ MotaActionBlocks["setFilter_s"].xmlText(),
+ MotaActionBlocks["fillText_s"].xmlText(),
+ MotaActionBlocks["fillBoldText_s"].xmlText(),
+ MotaActionBlocks["drawTextContent_s"].xmlText(),
+ MotaActionBlocks["fillRect_s"].xmlText(),
+ MotaActionBlocks["strokeRect_s"].xmlText(),
+ MotaActionBlocks["drawLine_s"].xmlText(),
+ MotaActionBlocks["drawArrow_s"].xmlText(),
+ MotaActionBlocks["fillPolygon_s"].xmlText(),
+ MotaActionBlocks["strokePolygon_s"].xmlText(),
+ MotaActionBlocks["fillEllipse_s"].xmlText(),
+ MotaActionBlocks["strokeEllipse_s"].xmlText(),
+ MotaActionBlocks["fillArc_s"].xmlText(),
+ MotaActionBlocks["strokeArc_s"].xmlText(),
+ MotaActionBlocks["drawImage_s"].xmlText(),
+ MotaActionBlocks["drawImage_1_s"].xmlText(),
+ MotaActionBlocks["drawIcon_s"].xmlText(),
+ MotaActionBlocks["drawBackground_s"].xmlText(),
+ MotaActionBlocks["drawSelector_s"].xmlText(),
+ MotaActionBlocks["drawSelector_1_s"].xmlText(),
+ ],
+ 原生脚本: [
+ MotaActionBlocks["function_s"].xmlText(),
+ MotaActionBlocks["unknown_s"].xmlText(),
+ ],
+ 值块: [
+ MotaActionBlocks["setValue_s"].xmlText([
+ MotaActionBlocks["idIdList_e"].xmlText(["status", "生命"]),
+ "=",
+ "",
+ false,
+ ]),
+ MotaActionBlocks["expression_arithmetic_0"].xmlText(),
+ MotaActionBlocks["idFlag_e"].xmlText(),
+ MotaActionBlocks["idTemp_e"].xmlText(),
+ MotaActionBlocks["negate_e"].xmlText(),
+ MotaActionBlocks["unaryOperation_e"].xmlText(),
+ MotaActionBlocks["bool_e"].xmlText(),
+ MotaActionBlocks["idString_e"].xmlText(),
+ MotaActionBlocks["idIdList_e"].xmlText(),
+ MotaActionBlocks["idFixedList_e"].xmlText(),
+ MotaActionBlocks["enemyattr_e"].xmlText(),
+ MotaActionBlocks["blockId_e"].xmlText(),
+ MotaActionBlocks["blockNumber_e"].xmlText(),
+ MotaActionBlocks["blockCls_e"].xmlText(),
+ MotaActionBlocks["hasEquip_e"].xmlText(),
+ MotaActionBlocks["equip_e"].xmlText(),
+ MotaActionBlocks["nextXY_e"].xmlText(),
+ MotaActionBlocks["isReplaying_e"].xmlText(),
+ MotaActionBlocks["hasVisitedFloor_e"].xmlText(),
+ MotaActionBlocks["isShopVisited_e"].xmlText(),
+ MotaActionBlocks["canBattle_e"].xmlText(),
+ MotaActionBlocks["damage_e"].xmlText(),
+ MotaActionBlocks["damage_1_e"].xmlText(),
+ MotaActionBlocks["rand_e"].xmlText(),
+ MotaActionBlocks["evalString_e"].xmlText(),
+ ],
+ 常见事件模板: [
+ '',
+ MotaActionFunctions.actionParser.parseList({
+ type: "if",
+ condition: "!core.musicStatus.bgmStatus",
+ true: ["\t[系统提示]你当前音乐处于关闭状态,本塔开音乐游戏效果更佳"],
+ false: [],
+ }),
+ '',
+ MotaActionFunctions.actionParser.parse(
+ [
+ {
+ type: "if",
+ condition: "switch:A",
+ true: [
+ "\t[行商,trader]\b[this]这是购买我的道具后我给玩家的提示。",
+ {
+ type: "comment",
+ text: "下一条指令可视情况使用或不使用",
+ },
+ {
+ type: "hide",
+ remove: true,
+ time: 250,
+ },
+ ],
+ false: [
+ {
+ type: "confirm",
+ text: "我有3把黄钥匙,\n你出50金币就卖给你。",
+ yes: [
{
- "type": "break",
- "n": 1
- }
- ]
+ type: "if",
+ condition: "status:money>=50",
+ true: [
+ {
+ type: "setValue",
+ name: "status:money",
+ operator: "-=",
+ value: "50",
+ },
+ {
+ type: "setValue",
+ name: "item:yellowKey",
+ operator: "+=",
+ value: "3",
+ },
+ {
+ type: "playSound",
+ name: "确定",
+ stop: true,
+ },
+ {
+ type: "setValue",
+ name: "switch:A",
+ value: "true",
+ },
+ ],
+ false: [
+ {
+ type: "playSound",
+ name: "操作失败",
+ },
+ "\t[行商,trader]\b[this]你的金币不足!",
+ ],
+ },
+ ],
+ no: [],
},
- {
- "type": "setValue",
- "name": "temp:X",
- "value": "flag:x"
- },
- {
- "type": "setValue",
- "name": "temp:Y",
- "value": "flag:y"
- }
- ]
- }
- ]
- },
- {
- "type": "drawSelector",
- "code": 1
- },
- {
- "type": "comment",
- "text": "流程进行到这里可以对[X,Y]点进行处理,比如"
- },
- {
- "type": "closeDoor",
- "id": "yellowDoor",
- "loc": [
- "temp:X",
- "temp:Y"
- ]
- }
- ],'event'),
- '',
- MotaActionFunctions.actionParser.parse([
- {
- "type": "comment",
- "text": "多阶段boss,请直接作为战后事件使用"
- },
- {
- "type": "setValue",
- "name": "switch:A",
- "operator": "+=",
- "value": "1"
- },
- {
- "type": "switch",
- "condition": "switch:A",
- "caseList": [
+ ],
+ },
+ ],
+ "event"
+ ),
+ '',
+ MotaActionFunctions.actionParser.parse(
+ [
{
- "case": "1",
- "action": [
- {
- "type": "setBlock",
- "number": "redSlime"
- },
- "\t[2阶段boss,redSlime]\b[this]你以为你已经打败我了吗?没听说过史莱姆有九条命吗?"
- ]
+ type: "comment",
+ text: "全地图选中一个点,需要用鼠标或触屏操作",
},
{
- "case": "2",
- "action": [
- {
- "type": "setBlock",
- "number": "blackSlime"
- },
- "\t[3阶段boss,blackSlime]\b[this]不能消灭我的,只会让我更强大!"
- ]
+ type: "setValue",
+ name: "temp:X",
+ value: "status:x",
},
{
- "case": "3",
- "action": [
- {
- "type": "setBlock",
- "number": "slimelord"
- },
- "\t[4阶段boss,slimelord]\b[this]我还能打!"
- ]
+ type: "setValue",
+ name: "temp:Y",
+ value: "status:y",
},
{
- "case": "4",
- "action": [
- "\t[4阶段boss,slimelord]我一定会回来的!"
- ]
- }
- ]
- }
- ],'afterBattle'),
- ],
- '最近使用事件':[
- '',
- ]
- }
- var toolboxgap = ''
- //xml_text = MotaActionFunctions.actionParser.parse(obj,type||'event')
- //MotaActionBlocks['idString_e'].xmlText()
+ type: "tip",
+ text: "再次点击闪烁位置确认",
+ },
+ {
+ type: "while",
+ condition: "true",
+ data: [
+ {
+ type: "drawSelector",
+ image: "winskin.png",
+ code: 1,
+ x: "32*temp:X",
+ y: "32*temp:Y",
+ width: 32,
+ height: 32,
+ },
+ {
+ type: "wait",
+ },
+ {
+ type: "if",
+ condition: "(flag:type === 1)",
+ true: [
+ {
+ type: "if",
+ condition: "((temp:X===flag:x)&&(temp:Y===flag:y))",
+ true: [
+ {
+ type: "break",
+ n: 1,
+ },
+ ],
+ },
+ {
+ type: "setValue",
+ name: "temp:X",
+ value: "flag:x",
+ },
+ {
+ type: "setValue",
+ name: "temp:Y",
+ value: "flag:y",
+ },
+ ],
+ },
+ ],
+ },
+ {
+ type: "drawSelector",
+ code: 1,
+ },
+ {
+ type: "comment",
+ text: "流程进行到这里可以对[X,Y]点进行处理,比如",
+ },
+ {
+ type: "closeDoor",
+ id: "yellowDoor",
+ loc: ["temp:X", "temp:Y"],
+ },
+ ],
+ "event"
+ ),
+ '',
+ MotaActionFunctions.actionParser.parse(
+ [
+ {
+ type: "comment",
+ text: "多阶段boss,请直接作为战后事件使用",
+ },
+ {
+ type: "setValue",
+ name: "switch:A",
+ operator: "+=",
+ value: "1",
+ },
+ {
+ type: "switch",
+ condition: "switch:A",
+ caseList: [
+ {
+ case: "1",
+ action: [
+ {
+ type: "setBlock",
+ number: "redSlime",
+ },
+ "\t[2阶段boss,redSlime]\b[this]你以为你已经打败我了吗?没听说过史莱姆有九条命吗?",
+ ],
+ },
+ {
+ case: "2",
+ action: [
+ {
+ type: "setBlock",
+ number: "blackSlime",
+ },
+ "\t[3阶段boss,blackSlime]\b[this]不能消灭我的,只会让我更强大!",
+ ],
+ },
+ {
+ case: "3",
+ action: [
+ {
+ type: "setBlock",
+ number: "slimelord",
+ },
+ "\t[4阶段boss,slimelord]\b[this]我还能打!",
+ ],
+ },
+ {
+ case: "4",
+ action: ["\t[4阶段boss,slimelord]我一定会回来的!"],
+ },
+ ],
+ },
+ ],
+ "afterBattle"
+ ),
+ ],
+ 最近使用事件: [
+ '',
+ ],
+ };
+ var toolboxgap = '';
+ //xml_text = MotaActionFunctions.actionParser.parse(obj,type||'event')
+ //MotaActionBlocks['idString_e'].xmlText()
- for (var name in toolboxObj){
- var custom = null;
- if(name=='最近使用事件')custom='searchBlockCategory';
- if(name=='入口方块')custom='entranceCategory';
- getCategory(name,custom).innerHTML = toolboxObj[name].join(toolboxgap);
- }
-
-var blocklyArea = document.getElementById('blocklyArea');
-var blocklyDiv = document.getElementById('blocklyDiv');
-var workspace = Blockly.inject(blocklyDiv,{
- media: '_server/blockly/media/',
- toolbox: document.getElementById('toolbox'),
- zoom:{
- controls: true,
- wheel: false,//滚轮改为上下(shift:左右)翻滚
- startScale: 1.0,
- maxScale: 3,
- minScale: 0.3,
- scaleSpeed: 1.08
- },
- trashcan: false,
-});
-
-editor_blockly.isCommonEntry = function () {
- var commonEntries = ['beforeBattle', 'afterBattle', 'afterOpenDoor', 'firstArrive', 'eachArrive', 'commonEvent', 'item'];
- return commonEntries.indexOf(editor_blockly.entryType) >= 0;
-}
-
-editor_blockly.entranceCategoryCallback = function(workspace) {
- var list=toolboxObj['入口方块']
- var xmlList = [];
- var eventType = (editor_blockly.isCommonEntry() ? 'common' : editor_blockly.entryType)+'_m';
- for(var ii=0,blockText;blockText=list[ii];ii++){
- if(new RegExp('').exec(blockText)){
- var block = Blockly.Xml.textToDom(''+blockText+'').firstChild;
- block.setAttribute("gap", 5);
- xmlList.push(block);
+ for (var name in toolboxObj) {
+ var custom = null;
+ if (name == "最近使用事件") custom = "searchBlockCategory";
+ if (name == "入口方块") custom = "entranceCategory";
+ getCategory(name, custom).innerHTML = toolboxObj[name].join(toolboxgap);
}
- }
- return xmlList;
-}
-workspace.registerToolboxCategoryCallback(
- 'entranceCategory', editor_blockly.entranceCategoryCallback);
+ var blocklyArea = document.getElementById("blocklyArea");
+ var blocklyDiv = document.getElementById("blocklyDiv");
+ var workspace = Blockly.inject(blocklyDiv, {
+ media: "_server/blockly/media/",
+ toolbox: document.getElementById("toolbox"),
+ zoom: {
+ controls: true,
+ wheel: false, //滚轮改为上下(shift:左右)翻滚
+ startScale: 1.0,
+ maxScale: 3,
+ minScale: 0.3,
+ scaleSpeed: 1.08,
+ },
+ trashcan: false,
+ });
-editor_blockly.searchBlockCategoryCallback = function(workspace) {
- var xmlList = [];
- var labels = editor_blockly.searchBlock();
- for (var i = 0; i < labels.length; i++) {
- var blockText = '' +
- MotaActionBlocks[labels[i]].xmlText() +
- '';
- var block = Blockly.Xml.textToDom(blockText).firstChild;
- block.setAttribute("gap", 5);
- xmlList.push(block);
- }
- return xmlList;
-};
+ editor_blockly.isCommonEntry = function () {
+ var commonEntries = [
+ "beforeBattle",
+ "afterBattle",
+ "afterOpenDoor",
+ "firstArrive",
+ "eachArrive",
+ "commonEvent",
+ "item",
+ ];
+ return commonEntries.indexOf(editor_blockly.entryType) >= 0;
+ };
-workspace.registerToolboxCategoryCallback(
- 'searchBlockCategory', editor_blockly.searchBlockCategoryCallback);
-
-var onresize = function(e) {
- blocklyDiv.style.width = blocklyArea.offsetWidth + 'px';
- blocklyDiv.style.height = blocklyArea.offsetHeight + 'px';
- Blockly.svgResize(workspace);
-};
-if(typeof editor !== "undefined" && !editor.isMobile)window.addEventListener('resize', onresize, false);
-onresize();
-//Blockly.svgResize(workspace);
-
-//Blockly.bindEventWithChecks_(workspace.svgGroup_,"wheel",workspace,function(e){});
-document.getElementById('blocklyDiv').onmousewheel = function(e){
- //console.log(e);
- e.preventDefault();
- var hvScroll = e.shiftKey?'hScroll':'vScroll';
- var mousewheelOffsetValue=20/380*workspace.scrollbar[hvScroll].handleLength_*3;
- workspace.scrollbar[hvScroll].handlePosition_+=( ((e.deltaY||0)+(e.detail||0)) >0?mousewheelOffsetValue:-mousewheelOffsetValue);
- workspace.scrollbar[hvScroll].onScroll_();
- // workspace.setScale(workspace.scale);
-}
-
-var doubleClickCheck=[[0,'abc']];
-function omitedcheckUpdateFunction(event) {
- if(event.type==='create'){
- editor_blockly.addIntoLastUsedType(event.blockId);
- }
- if(event.type==='ui' && event.element == 'click'){
- var newClick = [new Date().getTime(),event.blockId];
- var lastClick = doubleClickCheck.shift();
- doubleClickCheck.push(newClick);
- if(newClick[0]-lastClick[0]<500){
- if(newClick[1]===lastClick[1]){
- editor_blockly.doubleClickBlock(newClick[1]);
- }
- }
- }
- // Only handle these events
- if (["create", "move", "change", "delete"].indexOf(event.type) < 0) return;
- if(editor_blockly.workspace.topBlocks_.length>=2){
- editor_blockly.setValue('入口方块只能有一个');
- return;
- }
- var eventType = editor_blockly.entryType;
- if(editor_blockly.workspace.topBlocks_.length==1){
- var blockType = editor_blockly.workspace.topBlocks_[0].type;
- if(blockType!==eventType+'_m' && !(editor_blockly.isCommonEntry() && blockType == 'common_m')){
- editor_blockly.setValue('入口方块类型错误');
- return;
- }
- }
- try {
- var code = Blockly.JavaScript.workspaceToCode(workspace).replace(/\\(i|c|d|e|g|z)/g, '\\\\$1');
- editor_blockly.setValue(code);
- } catch (error) {
- editor_blockly.setValue(String(error));
- if (error instanceof OmitedError){
- var blockName = error.blockName;
- var varName = error.varName;
- var block = error.block;
- }
- // console.log(error);
- }
- }
-
- workspace.addChangeListener(omitedcheckUpdateFunction);
-
- workspace.addChangeListener(Blockly.Events.disableOrphans);
-
- editor_blockly.workspace = workspace;
-
- MotaActionFunctions.workspace = function(){
- return editor_blockly.workspace;
- }
-
- // 因为在editor_blockly.parse里已经HTML转义过一次了,所以这里要覆盖掉以避免在注释中出现<等
- MotaActionFunctions.xmlText = function (ruleName,inputs,isShadow,comment,collapsed,disabled) {
- var rule = MotaActionBlocks[ruleName];
- var blocktext = isShadow?'shadow':'block';
- var xmlText = [];
- xmlText.push('<'+blocktext+' type="'+ruleName+'"'+(collapsed ? ' collapsed="true"' : '')+(disabled ? ' disabled="true"' : '')+'>');
- if(!inputs)inputs=[];
- for (var ii=0,inputType;inputType=rule.argsType[ii];ii++) {
- var input = inputs[ii];
- var _input = '';
- var noinput = (input===null || input===undefined);
- if(noinput && inputType==='field' && MotaActionBlocks[rule.argsGrammarName[ii]].type!=='field_dropdown') continue;
- if(noinput && inputType==='field') {
- noinput = false;
- input = rule.fieldDefault(rule.args[ii])
- }
- if(noinput) input = '';
- if(inputType==='field' && MotaActionBlocks[rule.argsGrammarName[ii]].type==='field_checkbox')input=input?'TRUE':'FALSE';
- if(inputType!=='field') {
- var subList = false;
- var subrulename = rule.argsGrammarName[ii];
- var subrule = MotaActionBlocks[subrulename];
- if (subrule instanceof Array) {
- subrulename=subrule[subrule.length-1];
- subrule = MotaActionBlocks[subrulename];
- subList = true;
- }
- _input = subrule.xmlText([],true);
- if(noinput && !subList && !isShadow) {
- //无输入的默认行为是: 如果语句块的备选方块只有一个,直接代入方块
- input = subrule.xmlText();
+ editor_blockly.entranceCategoryCallback = function (workspace) {
+ var list = toolboxObj["入口方块"];
+ var xmlList = [];
+ var eventType =
+ (editor_blockly.isCommonEntry() ? "common" : editor_blockly.entryType) +
+ "_m";
+ for (var ii = 0, blockText; (blockText = list[ii]); ii++) {
+ if (new RegExp('').exec(blockText)) {
+ var block = Blockly.Xml.textToDom(
+ "" + blockText + ""
+ ).firstChild;
+ block.setAttribute("gap", 5);
+ xmlList.push(block);
}
}
- xmlText.push('<'+inputType+' name="'+rule.args[ii]+'">');
- xmlText.push(_input+input);
- xmlText.push(''+inputType+'>');
- }
- if(comment){
- xmlText.push('');
- xmlText.push(comment);
- xmlText.push('');
- }
- var next = inputs[rule.args.length];
- if (next) {//next
- xmlText.push('');
- xmlText.push(next);
- xmlText.push('');
- }
- xmlText.push(''+blocktext+'>');
- return xmlText.join('');
- }
-})();
+ return xmlList;
+ };
+ workspace.registerToolboxCategoryCallback(
+ "entranceCategory",
+ editor_blockly.entranceCategoryCallback
+ );
+ editor_blockly.searchBlockCategoryCallback = function (workspace) {
+ var xmlList = [];
+ var labels = editor_blockly.searchBlock();
+ for (var i = 0; i < labels.length; i++) {
+ var blockText =
+ "" + MotaActionBlocks[labels[i]].xmlText() + "";
+ var block = Blockly.Xml.textToDom(blockText).firstChild;
+ block.setAttribute("gap", 5);
+ xmlList.push(block);
+ }
+ return xmlList;
+ };
-// end mark sfergsvae
-}).toString().split('// start mark sfergsvae')[1].split('// end mark sfergsvae')[0]
+ workspace.registerToolboxCategoryCallback(
+ "searchBlockCategory",
+ editor_blockly.searchBlockCategoryCallback
+ );
+
+ var onresize = function (e) {
+ blocklyDiv.style.width = blocklyArea.offsetWidth + "px";
+ blocklyDiv.style.height = blocklyArea.offsetHeight + "px";
+ Blockly.svgResize(workspace);
+ };
+ if (typeof editor !== "undefined" && !editor.isMobile)
+ window.addEventListener("resize", onresize, false);
+ onresize();
+ //Blockly.svgResize(workspace);
+
+ //Blockly.bindEventWithChecks_(workspace.svgGroup_,"wheel",workspace,function(e){});
+ document.getElementById("blocklyDiv").onmousewheel = function (e) {
+ //console.log(e);
+ e.preventDefault();
+ var hvScroll = e.shiftKey ? "hScroll" : "vScroll";
+ var mousewheelOffsetValue =
+ (20 / 380) * workspace.scrollbar[hvScroll].handleLength_ * 3;
+ workspace.scrollbar[hvScroll].handlePosition_ +=
+ (e.deltaY || 0) + (e.detail || 0) > 0
+ ? mousewheelOffsetValue
+ : -mousewheelOffsetValue;
+ workspace.scrollbar[hvScroll].onScroll_();
+ // workspace.setScale(workspace.scale);
+ };
+
+ var doubleClickCheck = [[0, "abc"]];
+ function omitedcheckUpdateFunction(event) {
+ if (event.type === "create") {
+ editor_blockly.addIntoLastUsedType(event.blockId);
+ }
+ if (event.type === "ui" && event.element == "click") {
+ var newClick = [new Date().getTime(), event.blockId];
+ var lastClick = doubleClickCheck.shift();
+ doubleClickCheck.push(newClick);
+ if (newClick[0] - lastClick[0] < 500) {
+ if (newClick[1] === lastClick[1]) {
+ editor_blockly.doubleClickBlock(newClick[1]);
+ }
+ }
+ }
+ // Only handle these events
+ if (["create", "move", "change", "delete"].indexOf(event.type) < 0)
+ return;
+ if (editor_blockly.workspace.topBlocks_.length >= 2) {
+ editor_blockly.setValue("入口方块只能有一个");
+ return;
+ }
+ var eventType = editor_blockly.entryType;
+ if (editor_blockly.workspace.topBlocks_.length == 1) {
+ var blockType = editor_blockly.workspace.topBlocks_[0].type;
+ if (
+ blockType !== eventType + "_m" &&
+ !(editor_blockly.isCommonEntry() && blockType == "common_m")
+ ) {
+ editor_blockly.setValue("入口方块类型错误");
+ return;
+ }
+ }
+ try {
+ var code = Blockly.JavaScript.workspaceToCode(workspace).replace(
+ /\\(i|c|d|e|g|z)/g,
+ "\\\\$1"
+ );
+ editor_blockly.setValue(code);
+ } catch (error) {
+ editor_blockly.setValue(String(error));
+ if (error instanceof OmitedError) {
+ var blockName = error.blockName;
+ var varName = error.varName;
+ var block = error.block;
+ }
+ // console.log(error);
+ }
+ }
+
+ workspace.addChangeListener(omitedcheckUpdateFunction);
+
+ workspace.addChangeListener(Blockly.Events.disableOrphans);
+
+ editor_blockly.workspace = workspace;
+
+ MotaActionFunctions.workspace = function () {
+ return editor_blockly.workspace;
+ };
+
+ // 因为在editor_blockly.parse里已经HTML转义过一次了,所以这里要覆盖掉以避免在注释中出现<等
+ MotaActionFunctions.xmlText = function (
+ ruleName,
+ inputs,
+ isShadow,
+ comment,
+ collapsed,
+ disabled
+ ) {
+ var rule = MotaActionBlocks[ruleName];
+ var blocktext = isShadow ? "shadow" : "block";
+ var xmlText = [];
+ xmlText.push(
+ "<" +
+ blocktext +
+ ' type="' +
+ ruleName +
+ '"' +
+ (collapsed ? ' collapsed="true"' : "") +
+ (disabled ? ' disabled="true"' : "") +
+ ">"
+ );
+ if (!inputs) inputs = [];
+ for (var ii = 0, inputType; (inputType = rule.argsType[ii]); ii++) {
+ var input = inputs[ii];
+ var _input = "";
+ var noinput = input === null || input === undefined;
+ if (
+ noinput &&
+ inputType === "field" &&
+ MotaActionBlocks[rule.argsGrammarName[ii]].type !== "field_dropdown"
+ )
+ continue;
+ if (noinput && inputType === "field") {
+ noinput = false;
+ input = rule.fieldDefault(rule.args[ii]);
+ }
+ if (noinput) input = "";
+ if (
+ inputType === "field" &&
+ MotaActionBlocks[rule.argsGrammarName[ii]].type === "field_checkbox"
+ )
+ input = input ? "TRUE" : "FALSE";
+ if (inputType !== "field") {
+ var subList = false;
+ var subrulename = rule.argsGrammarName[ii];
+ var subrule = MotaActionBlocks[subrulename];
+ if (subrule instanceof Array) {
+ subrulename = subrule[subrule.length - 1];
+ subrule = MotaActionBlocks[subrulename];
+ subList = true;
+ }
+ _input = subrule.xmlText([], true);
+ if (noinput && !subList && !isShadow) {
+ //无输入的默认行为是: 如果语句块的备选方块只有一个,直接代入方块
+ input = subrule.xmlText();
+ }
+ }
+ xmlText.push("<" + inputType + ' name="' + rule.args[ii] + '">');
+ xmlText.push(_input + input);
+ xmlText.push("" + inputType + ">");
+ }
+ if (comment) {
+ xmlText.push("");
+ xmlText.push(comment);
+ xmlText.push("");
+ }
+ var next = inputs[rule.args.length];
+ if (next) {
+ //next
+ xmlText.push("");
+ xmlText.push(next);
+ xmlText.push("");
+ }
+ xmlText.push("" + blocktext + ">");
+ return xmlText.join("");
+ };
+ })();
+
+ // end mark sfergsvae
+}
+ .toString()
+ .split("// start mark sfergsvae")[1]
+ .split("// end mark sfergsvae")[0];
diff --git a/_server/table/comment.js b/_server/table/comment.js
index b417a50..f8660c0 100644
--- a/_server/table/comment.js
+++ b/_server/table/comment.js
@@ -187,24 +187,18 @@ var comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
"def": {
"_leaf": true,
"_type": "textarea",
- "_data": "物理防御力"
+ "_data": "防御力"
},
"mdef": {
"_leaf": true,
"_type": "textarea",
- "_data": "魔法防御力"
+ "_data": "法抗(写为小数)"
},
"speed": {
"_leaf": true,
"_type": "textarea",
"_data": "速度"
},
- "magic": {
- "_leaf": true,
- "_type": "checkbox",
- "_docs": "是否为魔法攻击",
- "_data": "勾选以魔法攻击计算,不勾选以物理攻击计算"
- },
"money": {
"_leaf": true,
"_type": "textarea",
diff --git a/_server/table/data.comment.js b/_server/table/data.comment.js
index de82674..3a76bd7 100644
--- a/_server/table/data.comment.js
+++ b/_server/table/data.comment.js
@@ -89,7 +89,7 @@ var data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
"_range": "editor.mode.checkUnique(thiseval)",
"_directory": "./project/bgms/",
"_transform": (function (one) {
- if (one.endsWith('.mp3') || one.endsWith('.ogg') || one.endsWith('.wav') || one.endsWith('.m4a') || one.endsWith('.flac'))
+ if (one.endsWith('.mp3') || one.endsWith('.ogg') || one.endsWith('.wav') || one.endsWith('.m4a') || one.endsWith('.flac') || one.endsWith('.opus'))
return one;
return null;
}).toString(),
@@ -102,7 +102,7 @@ var data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
"_range": "editor.mode.checkUnique(thiseval)",
"_directory": "./project/sounds/",
"_transform": (function (one) {
- if (one.endsWith('.mp3') || one.endsWith('.ogg') || one.endsWith('.wav') || one.endsWith('.m4a') || one.endsWith('.flac'))
+ if (one.endsWith('.mp3') || one.endsWith('.ogg') || one.endsWith('.wav') || one.endsWith('.m4a') || one.endsWith('.flac') || one.endsWith('.opus'))
return one;
return null;
}).toString(),
@@ -147,7 +147,7 @@ var data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
"_type": "material",
"_directory": "./project/bgms/",
"_transform": (function (one) {
- if (one.endsWith('.mp3') || one.endsWith('.ogg') || one.endsWith('.wav') || one.endsWith('.m4a') || one.endsWith('.flac'))
+ if (one.endsWith('.mp3') || one.endsWith('.ogg') || one.endsWith('.wav') || one.endsWith('.m4a') || one.endsWith('.flac') || one.endsWith('.opus'))
return one;
return null;
}).toString(),
@@ -262,44 +262,19 @@ var data_comment_c456ea59_6018_45ef_8bcc_211a24c627dc = {
"def": {
"_leaf": true,
"_type": "textarea",
- "_data": "物理防御"
+ "_data": "防御"
},
"mdef": {
"_leaf": true,
"_type": "textarea",
- "_data": "魔法防御"
+ "_data": "法强"
},
"speed": {
"_leaf": true,
"_type": "textarea",
- "_data": "攻击速度"
- },
- "str": {
- "_leaf": true,
- "_type": "textarea",
- "_data": "力量"
- },
- "agi": {
- "_leaf": true,
- "_type": "textarea",
- "_data": "敏捷"
- },
- "int": {
- "_leaf": true,
- "_type": "textarea",
- "_data": "智力"
- },
- "con": {
- "_leaf": true,
- "_type": "textarea",
- "_data": "体质"
- },
- "magic": {
- "_leaf": true,
- "_type": "checkbox",
- "_docs": "攻击类型",
- "_data": "攻击类型是否是魔法"
+ "_data": "速度"
},
+
"money": {
"_leaf": true,
"_type": "textarea",
diff --git a/index.html b/index.html
index dceab9b..c49e005 100644
--- a/index.html
+++ b/index.html
@@ -213,6 +213,9 @@
+
+
+
diff --git a/libs/thirdparty/codec-parser.min.js b/libs/thirdparty/codec-parser.min.js
new file mode 100644
index 0000000..fb4ac2e
--- /dev/null
+++ b/libs/thirdparty/codec-parser.min.js
@@ -0,0 +1 @@
+var CodecParser=function(e){"use strict";const t=Symbol,s=(()=>{const e="left",t="center",s="right";return["","front ","side ","rear "].map((i=>[[e,s],[e,s,t],[e,t,s],[t,e,s],[t]].flatMap((e=>e.map((e=>i+e)).join(", ")))))})(),i="LFE",r="monophonic (mono)",n="stereo",a="surround",o=(e,...t)=>`${[r,n,`linear ${a}`,"quadraphonic",`5.0 ${a}`,`5.1 ${a}`,`6.1 ${a}`,`7.1 ${a}`][e-1]} (${t.join(", ")})`,h=[r,o(2,s[0][0]),o(3,s[0][2]),o(4,s[1][0],s[3][0]),o(5,s[1][2],s[3][0]),o(6,s[1][2],s[3][0],i),o(7,s[1][2],s[2][0],s[3][4],i),o(8,s[1][2],s[2][0],s[3][0],i)],c=48e3,l=44100,u=32e3,d=24e3,p=22050,_=16e3,m=8e3,g="absoluteGranulePosition",f="bandwidth",b="bitDepth",C="bitrate",y=C+"Maximum",S=C+"Minimum",w=C+"Nominal",P="buffer",k=P+"Fullness",v="codec",F=v+"Frames",x="coupledStreamCount",H="crc",I=H+"16",M=H+"32",U="data",O="description",N="duration",$="emphasis",A="hasOpusPadding",R="header",B="isContinuedPacket",L="isCopyrighted",D="isFirstPage",T="isHome",E="isLastPage",G="isOriginal",z="isPrivate",q="isVbr",V="layer",j="length",W="mode",J=W+"Extension",K="mpeg",Q=K+"Version",X="numberAACFrames",Y="outputGain",Z="preSkip",ee="profile",te=t(),se="protection",ie="rawData",re="segments",ne="subarray",ae="version",oe="vorbis",he=oe+"Comments",ce=oe+"Setup",le="block",ue=le+"ingStrategy",de=t(),pe=le+"Size",_e=le+"size0",me=le+"size1",ge=t(),fe="channel",be=fe+"MappingFamily",Ce=fe+"MappingTable",ye=fe+"Mode",Se=t(),we=fe+"s",Pe="copyright",ke=Pe+"Id",ve=Pe+"IdStart",Fe="frame",xe=Fe+"Count",He=Fe+"Length",Ie="Number",Me=Fe+Ie,Ue=Fe+"Padding",Oe=Fe+"Size",Ne="Rate",$e="inputSample"+Ne,Ae="page",Re=Ae+"Checksum",Be=t(),Le=Ae+"SegmentTable",De=Ae+"Sequence"+Ie,Te="sample",Ee=Te+Ie,Ge=Te+Ne,ze=t(),qe=Te+"s",Ve="stream",je=Ve+"Count",We=Ve+"Info",Je=Ve+"Serial"+Ie,Ke=Ve+"StructureVersion",Qe="total",Xe=Qe+"BytesOut",Ye=Qe+"Duration",Ze=Qe+"Samples",et=t(),tt=t(),st=t(),it=t(),rt=t(),nt=t(),at=t(),ot=t(),ht=t(),ct=t(),lt=t(),ut=t(),dt=t(),pt=t(),_t=t(),mt=t(),gt=t(),ft=t(),bt=Uint8Array,Ct=DataView,yt="reserved",St="bad",wt="free",Pt="none",kt="16bit CRC",vt=(e,t,s)=>{for(let i=0;i0;e--)r=s(r);e[i]=r}return e},Ft=vt(new bt(256),(e=>e),(e=>128&e?7^e<<1:e<<1)),xt=[vt(new Uint16Array(256),(e=>e<<8),(e=>e<<1^(32768&e?32773:0)))],Ht=[vt(new Uint32Array(256),(e=>e),(e=>e>>>1^3988292384*(1&e)))];for(let e=0;e<15;e++){xt.push(new Uint16Array(256)),Ht.push(new Uint32Array(256));for(let t=0;t<=255;t++)xt[e+1][t]=xt[0][xt[e][t]>>>8]^xt[e][t]<<8,Ht[e+1][t]=Ht[e][t]>>>8^Ht[0][255&Ht[e][t]]}const It=e=>{const t=e[j],s=t-16;let i=0,r=0;for(;r<=s;)i=Ht[15][255&(e[r++]^i)]^Ht[14][255&(e[r++]^i>>>8)]^Ht[13][255&(e[r++]^i>>>16)]^Ht[12][e[r++]^i>>>24]^Ht[11][e[r++]]^Ht[10][e[r++]]^Ht[9][e[r++]]^Ht[8][e[r++]]^Ht[7][e[r++]]^Ht[6][e[r++]]^Ht[5][e[r++]]^Ht[4][e[r++]]^Ht[3][e[r++]]^Ht[2][e[r++]]^Ht[1][e[r++]]^Ht[0][e[r++]];for(;r!==t;)i=Ht[0][255&(i^e[r++])]^i>>>8;return~i},Mt=(...e)=>{const t=new bt(e.reduce(((e,t)=>e+t[j]),0));return e.reduce(((e,s)=>(t.set(s,e),e+s[j])),0),t},Ut=e=>String.fromCharCode(...e),Ot=[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15],Nt=e=>Ot[15&e]<<4|Ot[e>>4];class $t{constructor(e){this._data=e,this._pos=8*e[j]}set position(e){this._pos=e}get position(){return this._pos}read(e){const t=Math.floor(this._pos/8),s=this._pos%8;this._pos-=e;return(Nt(this._data[t-1])<<8)+Nt(this._data[t])>>7-s&255}}class At{constructor(e,t){this._onCodecHeader=e,this._onCodecUpdate=t,this[_t]()}[mt](){this._isEnabled=!0}[_t](){this._headerCache=new Map,this._codecUpdateData=new WeakMap,this._codecHeaderSent=!1,this._codecShouldUpdate=!1,this._bitrate=null,this._isEnabled=!1}[pt](e,t){if(this._onCodecUpdate){this._bitrate!==e&&(this._bitrate=e,this._codecShouldUpdate=!0);const s=this._codecUpdateData.get(this._headerCache.get(this._currentHeader));this._codecShouldUpdate&&s&&this._onCodecUpdate({bitrate:e,...s},t),this._codecShouldUpdate=!1}}[ht](e){const t=this._headerCache.get(e);return t&&this._updateCurrentHeader(e),t}[ct](e,t,s){this._isEnabled&&(this._codecHeaderSent||(this._onCodecHeader({...t}),this._codecHeaderSent=!0),this._updateCurrentHeader(e),this._headerCache.set(e,t),this._codecUpdateData.set(t,s))}_updateCurrentHeader(e){this._onCodecUpdate&&e!==this._currentHeader&&(this._codecShouldUpdate=!0,this._currentHeader=e)}}const Rt=new WeakMap,Bt=new WeakMap;class Lt{constructor(e,t){this._codecParser=e,this._headerCache=t}*[at](){let e;for(;;){if(e=yield*this.Frame[lt](this._codecParser,this._headerCache,0),e)return e;this._codecParser[tt](1)}}*[ot](e){let t=yield*this[at]();const s=Bt.get(t)[j];if(e||this._codecParser._flushing||(yield*this.Header[ht](this._codecParser,this._headerCache,s)))return this._headerCache[mt](),this._codecParser[tt](s),this._codecParser[it](t),t;this._codecParser[rt](`Missing ${Fe} at ${s} bytes from current position.`,`Dropping current ${Fe} and trying again.`),this._headerCache[_t](),this._codecParser[tt](1)}}class Dt{constructor(e,t){Bt.set(this,{[R]:e}),this[U]=t}}class Tt extends Dt{static*[lt](e,t,s,i,r){const n=yield*e[ht](s,i,r);if(n){const e=Rt.get(n)[He],i=Rt.get(n)[qe];return new t(n,(yield*s[et](e,r))[ne](0,e),i)}return null}constructor(e,t,s){super(e,t),this[R]=e,this[qe]=s,this[N]=s/e[Ge]*1e3,this[Me]=null,this[Xe]=null,this[Ze]=null,this[Ye]=null,Bt.get(this)[j]=t[j]}}const Et="unsynchronizationFlag",Gt="extendedHeaderFlag",zt="experimentalFlag",qt="footerPresent";class Vt{static*getID3v2Header(e,t,s){const i={};let r=yield*e[et](3,s);if(73!==r[0]||68!==r[1]||51!==r[2])return null;if(r=yield*e[et](10,s),i[ae]=`id3v2.${r[3]}.${r[4]}`,15&r[5])return null;if(i[Et]=!!(128&r[5]),i[Gt]=!!(64&r[5]),i[zt]=!!(32&r[5]),i[qt]=!!(16&r[5]),128&r[6]||128&r[7]||128&r[8]||128&r[9])return null;const n=r[6]<<21|r[7]<<14|r[8]<<7|r[9];return i[j]=10+n,new Vt(i)}constructor(e){this[ae]=e[ae],this[Et]=e[Et],this[Gt]=e[Gt],this[zt]=e[zt],this[qt]=e[qt],this[j]=e[j]}}class jt{constructor(e){Rt.set(this,e),this[b]=e[b],this[C]=null,this[we]=e[we],this[ye]=e[ye],this[Ge]=e[Ge]}}const Wt={0:[wt,wt,wt,wt,wt],16:[32,32,32,32,8],240:[St,St,St,St,St]},Jt=(e,t,s)=>8*((e+s)%t+t)*(1<<(e+s)/t)-8*t*(t/8|0);for(let e=2;e<15;e++)Wt[e<<4]=[32*e,Jt(e,4,0),Jt(e,4,-1),Jt(e,8,4),Jt(e,8,0)];const Kt="bands ",Qt=" to 31",Xt={0:Kt+4+Qt,16:Kt+8+Qt,32:Kt+12+Qt,48:Kt+16+Qt},Yt="bitrateIndex",Zt="v2",es="v1",ts="Intensity stereo ",ss=", MS stereo ",is="on",rs="off",ns={0:ts+rs+ss+rs,16:ts+is+ss+rs,32:ts+rs+ss+is,48:ts+is+ss+is},as={0:{[O]:yt},2:{[O]:"Layer III",[Ue]:1,[J]:ns,[es]:{[Yt]:2,[qe]:1152},[Zt]:{[Yt]:4,[qe]:576}},4:{[O]:"Layer II",[Ue]:1,[J]:Xt,[qe]:1152,[es]:{[Yt]:1},[Zt]:{[Yt]:4}},6:{[O]:"Layer I",[Ue]:4,[J]:Xt,[qe]:384,[es]:{[Yt]:0},[Zt]:{[Yt]:3}}},os="MPEG Version ",hs="ISO/IEC ",cs={0:{[O]:`${os}2.5 (later extension of MPEG 2)`,[V]:Zt,[Ge]:{0:11025,4:12e3,8:m,12:yt}},8:{[O]:yt},16:{[O]:`${os}2 (${hs}13818-3)`,[V]:Zt,[Ge]:{0:p,4:d,8:_,12:yt}},24:{[O]:`${os}1 (${hs}11172-3)`,[V]:es,[Ge]:{0:l,4:c,8:u,12:yt}},length:j},ls={0:kt,1:Pt},us={0:Pt,1:"50/15 ms",2:yt,3:"CCIT J.17"},ds={0:{[we]:2,[O]:n},64:{[we]:2,[O]:"joint "+n},128:{[we]:2,[O]:"dual channel"},192:{[we]:1,[O]:r}};class ps extends jt{static*[ht](e,t,s){const i={},r=yield*Vt.getID3v2Header(e,t,s);r&&(yield*e[et](r[j],s),e[tt](r[j]));const n=yield*e[et](4,s),a=Ut(n[ne](0,4)),o=t[ht](a);if(o)return new ps(o);if(255!==n[0]||n[1]<224)return null;const h=cs[24&n[1]];if(h[O]===yt)return null;const c=6&n[1];if(as[c][O]===yt)return null;const l={...as[c],...as[c][h[V]]};if(i[Q]=h[O],i[V]=l[O],i[qe]=l[qe],i[se]=ls[1&n[1]],i[j]=4,i[C]=Wt[240&n[2]][l[Yt]],i[C]===St)return null;if(i[Ge]=h[Ge][12&n[2]],i[Ge]===yt)return null;if(i[Ue]=2&n[2]&&l[Ue],i[z]=!!(1&n[2]),i[He]=Math.floor(125*i[C]*i[qe]/i[Ge]+i[Ue]),!i[He])return null;const u=192&n[3];if(i[ye]=ds[u][O],i[we]=ds[u][we],i[J]=l[J][48&n[3]],i[L]=!!(8&n[3]),i[G]=!!(4&n[3]),i[$]=us[3&n[3]],i[$]===yt)return null;i[b]=16;{const{length:e,frameLength:s,samples:r,...n}=i;t[ct](a,i,n)}return new ps(i)}constructor(e){super(e),this[C]=e[C],this[$]=e[$],this[Ue]=e[Ue],this[L]=e[L],this[G]=e[G],this[z]=e[z],this[V]=e[V],this[J]=e[J],this[Q]=e[Q],this[se]=e[se]}}class _s extends Tt{static*[lt](e,t,s){return yield*super[lt](ps,_s,e,t,s)}constructor(e,t,s){super(e,t,s)}}class ms extends Lt{constructor(e,t,s){super(e,t),this.Frame=_s,this.Header=ps,s(this[v])}get[v](){return K}*[ut](){return yield*this[ot]()}}const gs={0:"MPEG-4",8:"MPEG-2"},fs={0:"valid",2:St,4:St,6:St},bs={0:kt,1:Pt},Cs={0:"AAC Main",64:"AAC LC (Low Complexity)",128:"AAC SSR (Scalable Sample Rate)",192:"AAC LTP (Long Term Prediction)"},ys={0:96e3,4:88200,8:64e3,12:c,16:l,20:u,24:d,28:p,32:_,36:12e3,40:11025,44:m,48:7350,52:yt,56:yt,60:"frequency is written explicitly"},Ss={0:{[we]:0,[O]:"Defined in AOT Specific Config"},64:{[we]:1,[O]:r},128:{[we]:2,[O]:o(2,s[0][0])},192:{[we]:3,[O]:o(3,s[1][3])},256:{[we]:4,[O]:o(4,s[1][3],s[3][4])},320:{[we]:5,[O]:o(5,s[1][3],s[3][0])},384:{[we]:6,[O]:o(6,s[1][3],s[3][0],i)},448:{[we]:8,[O]:o(8,s[1][3],s[2][0],s[3][0],i)}};class ws extends jt{static*[ht](e,t,s){const i={},r=yield*e[et](7,s),n=Ut([r[0],r[1],r[2],252&r[3]|3&r[6]]),a=t[ht](n);if(a)Object.assign(i,a);else{if(255!==r[0]||r[1]<240)return null;if(i[Q]=gs[8&r[1]],i[V]=fs[6&r[1]],i[V]===St)return null;const e=1&r[1];i[se]=bs[e],i[j]=e?7:9,i[te]=192&r[2],i[ze]=60&r[2];const s=2&r[2];if(i[ee]=Cs[i[te]],i[Ge]=ys[i[ze]],i[Ge]===yt)return null;i[z]=!!s,i[Se]=448&(r[2]<<8|r[3]),i[ye]=Ss[i[Se]][O],i[we]=Ss[i[Se]][we],i[G]=!!(32&r[3]),i[T]=!!(8&r[3]),i[ke]=!!(8&r[3]),i[ve]=!!(4&r[3]),i[b]=16,i[qe]=1024,i[X]=3&r[6];{const{length:e,channelModeBits:s,profileBits:r,sampleRateBits:a,frameLength:o,samples:h,numberAACFrames:c,...l}=i;t[ct](n,i,l)}}if(i[He]=8191&(r[3]<<11|r[4]<<3|r[5]>>5),!i[He])return null;const o=2047&(r[5]<<6|r[6]>>2);return i[k]=2047===o?"VBR":o,new ws(i)}constructor(e){super(e),this[ke]=e[ke],this[ve]=e[ve],this[k]=e[k],this[T]=e[T],this[G]=e[G],this[z]=e[z],this[V]=e[V],this[j]=e[j],this[Q]=e[Q],this[X]=e[X],this[ee]=e[ee],this[se]=e[se]}get audioSpecificConfig(){const e=Rt.get(this),t=e[te]+64<<5|e[ze]<<5|e[Se]>>3,s=new bt(2);return new Ct(s[P]).setUint16(0,t,!1),s}}class Ps extends Tt{static*[lt](e,t,s){return yield*super[lt](ws,Ps,e,t,s)}constructor(e,t,s){super(e,t,s)}}class ks extends Lt{constructor(e,t,s){super(e,t),this.Frame=Ps,this.Header=ws,s(this[v])}get[v](){return"aac"}*[ut](){return yield*this[ot]()}}class vs extends Tt{static _getFrameFooterCrc16(e){return(e[e[j]-2]<<8)+e[e[j]-1]}static[ft](e){const t=vs._getFrameFooterCrc16(e),s=(e=>{const t=e[j],s=t-16;let i=0,r=0;for(;r<=s;)i^=e[r++]<<8|e[r++],i=xt[15][i>>8]^xt[14][255&i]^xt[13][e[r++]]^xt[12][e[r++]]^xt[11][e[r++]]^xt[10][e[r++]]^xt[9][e[r++]]^xt[8][e[r++]]^xt[7][e[r++]]^xt[6][e[r++]]^xt[5][e[r++]]^xt[4][e[r++]]^xt[3][e[r++]]^xt[2][e[r++]]^xt[1][e[r++]]^xt[0][e[r++]];for(;r!==t;)i=(255&i)<<8^xt[0][i>>8^e[r++]];return i})(e[ne](0,-2));return t===s}constructor(e,t,s){t[We]=s,t[I]=vs._getFrameFooterCrc16(e),super(t,e,Rt.get(t)[qe])}}const Fs="get from STREAMINFO metadata block",xs={0:"Fixed",1:"Variable"},Hs={0:yt,16:192};for(let e=2;e<16;e++)Hs[e<<4]=e<6?576*2**(e-2):2**e;const Is={0:Fs,1:88200,2:176400,3:192e3,4:m,5:_,6:p,7:d,8:u,9:l,10:c,11:96e3,15:St},Ms={0:{[we]:1,[O]:r},16:{[we]:2,[O]:o(2,s[0][0])},32:{[we]:3,[O]:o(3,s[0][1])},48:{[we]:4,[O]:o(4,s[1][0],s[3][0])},64:{[we]:5,[O]:o(5,s[1][1],s[3][0])},80:{[we]:6,[O]:o(6,s[1][1],i,s[3][0])},96:{[we]:7,[O]:o(7,s[1][1],i,s[3][4],s[2][0])},112:{[we]:8,[O]:o(8,s[1][1],i,s[3][0],s[2][0])},128:{[we]:2,[O]:`${n} (left, diff)`},144:{[we]:2,[O]:`${n} (diff, right)`},160:{[we]:2,[O]:`${n} (avg, diff)`},176:yt,192:yt,208:yt,224:yt,240:yt},Us={0:Fs,2:8,4:12,6:yt,8:16,10:20,12:24,14:yt};class Os extends jt{static _decodeUTF8Int(e){if(e[0]>254)return null;if(e[0]<128)return{value:e[0],length:1};let t=1;for(let s=64;s&e[0];s>>=1)t++;let s=t-1,i=0,r=0;for(;s>0;r+=6,s--){if(128!=(192&e[s]))return null;i|=(63&e[s])<>t)<{let t=0;const s=e[j];for(let i=0;i!==s;i++)t=Ft[t^e[i]];return t})(i[ne](0,r[j]-1)))return null;if(!a){const{blockingStrategyBits:e,frameNumber:s,sampleNumber:i,samples:a,sampleRateBits:o,blockSizeBits:h,crc:c,length:l,...u}=r;t[ct](n,r,u)}return new Os(r)}constructor(e){super(e),this[I]=null,this[ue]=e[ue],this[pe]=e[pe],this[Me]=e[Me],this[Ee]=e[Ee],this[We]=null}}class Ns extends Lt{constructor(e,t,s){super(e,t),this.Frame=vs,this.Header=Os,s(this[v])}get[v](){return"flac"}*_getNextFrameSyncOffset(e){const t=yield*this._codecParser[et](2,0),s=t[j]-2;for(;e{const t=Os[gt](e,this._headerCache);if(t)return new vs(e,t,this._streamInfo);this._codecParser[rt]("Failed to parse Ogg FLAC frame","Skipping invalid FLAC frame")})).filter((e=>!!e))),e}}class $s{static*[ht](e,t,s){const i={};let r=yield*e[et](28,s);if(79!==r[0]||103!==r[1]||103!==r[2]||83!==r[3])return null;i[Ke]=r[4];if(248&r[5])return null;i[E]=!!(4&r[5]),i[D]=!!(2&r[5]),i[B]=!!(1&r[5]);const n=new Ct(bt.from(r[ne](0,28))[P]);i[g]=((e,t)=>{try{return e.getBigInt64(t,!0)}catch{const s=128&e.getUint8(t+7)?-1:1;let i=e.getUint32(t,!0),r=e.getUint32(t+4,!0);return-1===s&&(i=1+~i,r=1+~r),r>1048575&&console.warn("This platform does not support BigInt"),s*(i+r*2**32)}})(n,6),i[Je]=n.getInt32(14,!0),i[De]=n.getInt32(18,!0),i[Re]=n.getInt32(22,!0);const a=r[26];i[j]=a+27,r=yield*e[et](i[j],s),i[He]=0,i[Le]=[],i[Be]=bt.from(r[ne](27,i[j]));for(let e=0,t=0;e{const t=Ws[gt](this._identificationHeader,e,this._headerCache);if(t){null===this._preSkipRemaining&&(this._preSkipRemaining=t[Z]);let s=t[Oe]*t[xe]/1e3*t[Ge];return this._preSkipRemaining>0&&(this._preSkipRemaining-=s,s=this._preSkipRemaining<0?-this._preSkipRemaining:0),new Rs(e,t,s)}this._codecParser[nt]("Failed to parse Ogg Opus Header","Not a valid Ogg Opus file")}))),e}}class Ks extends Tt{constructor(e,t,s){super(t,e,s)}}const Qs={};for(let e=0;e<8;e++)Qs[e+6]=2**(6+e);class Xs extends jt{static[gt](e,t,s,i){if(e[j]<30)throw new Error("Out of data while inside an Ogg Page");const r=Ut(e[ne](0,30)),n=t[ht](r);if(n)return new Xs(n);const a={[j]:30};if("vorbis"!==r.substr(0,7))return null;a[U]=bt.from(e[ne](0,30));const o=new Ct(a[U][P]);if(a[ae]=o.getUint32(7,!0),0!==a[ae])return null;if(a[we]=e[11],a[ye]=h[a[we]-1]||"application defined",a[Ge]=o.getUint32(12,!0),a[y]=o.getInt32(16,!0),a[w]=o.getInt32(20,!0),a[S]=o.getInt32(24,!0),a[me]=Qs[(240&e[28])>>4],a[_e]=Qs[15&e[28]],a[_e]>a[me])return null;if(1!==e[29])return null;a[b]=32,a[ce]=i,a[he]=s;{const{length:e,data:s,version:i,vorbisSetup:n,vorbisComments:o,...h}=a;t[ct](r,a,h)}return new Xs(a)}constructor(e){super(e),this[y]=e[y],this[S]=e[S],this[w]=e[w],this[_e]=e[_e],this[me]=e[me],this[U]=e[U],this[he]=e[he],this[ce]=e[ce]}}class Ys extends Lt{constructor(e,t,s){super(e,t),this.Frame=Ks,s(this[v]),this._identificationHeader=null,this._setupComplete=!1,this._prevBlockSize=null}get[v](){return oe}[dt](e){e[F]=[];for(const t of Bt.get(e)[re])if(1===t[0])this._headerCache[mt](),this._identificationHeader=e[U],this._setupComplete=!1;else if(3===t[0])this._vorbisComments=t;else if(5===t[0])this._vorbisSetup=t,this._mode=this._parseSetupHeader(t),this._setupComplete=!0;else if(this._setupComplete){const s=Xs[gt](this._identificationHeader,this._headerCache,this._vorbisComments,this._vorbisSetup);s?e[F].push(new Ks(t,s,this._getSamples(t,s))):this._codecParser[logError]("Failed to parse Ogg Vorbis Header","Not a valid Ogg Vorbis file")}return e}_getSamples(e,t){const s=this._mode.blockFlags[e[0]>>1&this._mode.mask]?t[me]:t[_e],i=null===this._prevBlockSize?0:(this._prevBlockSize+s)/4;return this._prevBlockSize=s,i}_parseSetupHeader(e){const t=new $t(e),s={count:0,blockFlags:[]};for(;1&~t.read(1););let i;for(;s.count<64&&t.position>0;){Nt(t.read(8));let e=0;for(;0===t.read(8)&&e++<3;);if(4!==e){1+((126&Nt(i))>>1)!==s.count&&this._codecParser[rt]("vorbis derived mode count did not match actual mode count");break}i=t.read(7),s.blockFlags.unshift(1&i),t.position+=6,s.count++}return s.mask=(1<1&&e[De]>1&&this._codecParser[rt]("Unexpected gap in Ogg Page Sequence Number.",`Expected: ${this._pageSequenceNumber+1}, Got: ${e[De]}`),this._pageSequenceNumber=e[De]}_parsePage(e){null===this._isSupported&&(this._pageSequenceNumber=e[De],this._isSupported=this._checkCodecSupport(e)),this._checkPageSequenceNumber(e);const t=Bt.get(e),s=Rt.get(t[R]);let i=0;if(t[re]=s[Le].map((t=>e[U][ne](i,i+=t))),this._continuedPacket[j]&&(t[re][0]=Mt(this._continuedPacket,t[re][0]),this._continuedPacket=new bt),255===s[Be][s[Be][j]-1]&&(this._continuedPacket=Mt(this._continuedPacket,t[re].pop())),null!==this._previousAbsoluteGranulePosition&&(e[qe]=Number(e[g]-this._previousAbsoluteGranulePosition)),this._previousAbsoluteGranulePosition=e[g],this._isSupported){const t=this._parser[dt](e);return this._codecParser[it](t),t}return e}}class ei extends Lt{constructor(e,t,s){super(e,t),this._onCodec=s,this.Frame=As,this.Header=$s,this._streams=new Map,this._currentSerialNumber=null}get[v](){const e=this._streams.get(this._currentSerialNumber);return e?e.codec:""}*[ut](){const e=yield*this[ot](!0);this._currentSerialNumber=e[Je];let t=this._streams.get(this._currentSerialNumber);return t||(t=new Zs(this._codecParser,this._headerCache,this._onCodec),this._streams.set(this._currentSerialNumber,t)),e[E]&&this._streams.delete(this._currentSerialNumber),t._parsePage(e)}}const ti=()=>{};const si=g,ii=f,ri=b,ni=C,ai=y,oi=S,hi=w,ci=P,li=k,ui=v,di=F,pi=x,_i=H,mi=I,gi=M,fi=U,bi=O,Ci=N,yi=$,Si=A,wi=R,Pi=B,ki=L,vi=D,Fi=T,xi=E,Hi=G,Ii=z,Mi=q,Ui=V,Oi=j,Ni=W,$i=J,Ai=K,Ri=Q,Bi=X,Li=Y,Di=Z,Ti=ee,Ei=se,Gi=ie,zi=re,qi=ne,Vi=ae,ji=oe,Wi=he,Ji=ce,Ki=ue,Qi=pe,Xi=_e,Yi=me,Zi=be,er=Ce,tr=ye,sr=we,ir=ke,rr=ve,nr=Fe,ar=xe,or=He,hr=Me,cr=Ue,lr=Oe,ur=$e,dr=Re,pr=Le,_r=De,mr=Ee,gr=Ge,fr=qe,br=je,Cr=We,yr=Je,Sr=Ke,wr=Xe,Pr=Ye,kr=Ze;return e.CodecParser=class{constructor(e,{onCodec:t,onCodecHeader:s,onCodecUpdate:i,enableLogging:r=!1,enableFrameCRC32:n=!0}={}){this._inputMimeType=e,this._onCodec=t||ti,this._onCodecHeader=s||ti,this._onCodecUpdate=i,this._enableLogging=r,this._crc32=n?It:ti,this[_t]()}get[v](){return this._parser?this._parser[v]:""}[_t](){this._headerCache=new At(this._onCodecHeader,this._onCodecUpdate),this._generator=this._getGenerator(),this._generator.next()}*flush(){this._flushing=!0;for(let e=this._generator.next();e.value;e=this._generator.next())yield e.value;this._flushing=!1,this[_t]()}*parseChunk(e){for(let t=this._generator.next(e);t.value;t=this._generator.next())yield t.value}parseAll(e){return[...this.parseChunk(e),...this.flush()]}*_getGenerator(){if(this._inputMimeType.match(/aac/))this._parser=new ks(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/mpeg/))this._parser=new ms(this,this._headerCache,this._onCodec);else if(this._inputMimeType.match(/flac/))this._parser=new Ns(this,this._headerCache,this._onCodec);else{if(!this._inputMimeType.match(/ogg/))throw new Error(`Unsupported Codec ${mimeType}`);this._parser=new ei(this,this._headerCache,this._onCodec)}for(this._frameNumber=0,this._currentReadPosition=0,this._totalBytesIn=0,this._totalBytesOut=0,this._totalSamples=0,this._sampleRate=void 0,this._rawData=new Uint8Array(0);;){const e=yield*this._parser[ut]();e&&(yield e)}}*[et](e=0,t=0){let s;for(;this._rawData[j]<=e+t;){if(s=yield,this._flushing)return this._rawData[ne](t);s&&(this._totalBytesIn+=s[j],this._rawData=Mt(this._rawData,s))}return this._rawData[ne](t)}[tt](e){this._currentReadPosition+=e,this._rawData=this._rawData[ne](e)}[st](e){this._sampleRate=e[R][Ge],e[R][C]=e[N]>0?8*Math.round(e[U][j]/e[N]):0,e[Me]=this._frameNumber++,e[Xe]=this._totalBytesOut,e[Ze]=this._totalSamples,e[Ye]=this._totalSamples/this._sampleRate*1e3,e[M]=this._crc32(e[U]),this._headerCache[pt](e[R][C],e[Ye]),this._totalBytesOut+=e[U][j],this._totalSamples+=e[qe]}[it](e){if(e[F]){if(e[E]){let t=e[qe];e[F].forEach((e=>{const s=e[qe];t0?t:0,e[N]=e[qe]/e[R][Ge]*1e3),t-=s,this[st](e)}))}else e[qe]=0,e[F].forEach((t=>{e[qe]+=t[qe],this[st](t)}));e[N]=e[qe]/this._sampleRate*1e3||0,e[Ze]=this._totalSamples,e[Ye]=this._totalSamples/this._sampleRate*1e3||0,e[Xe]=this._totalBytesOut}else this[st](e)}_log(e,t){if(this._enableLogging){const s=[`${v}: ${this[v]}`,`inputMimeType: ${this._inputMimeType}`,`readPosition: ${this._currentReadPosition}`,`totalBytesIn: ${this._totalBytesIn}`,`${Xe}: ${this._totalBytesOut}`],i=Math.max(...s.map((e=>e[j])));t.push(`--stats--${"-".repeat(i-9)}`,...s,"-".repeat(i)),e("codec-parser",t.reduce(((e,t)=>e+"\n "+t),""))}}[rt](...e){this._log(console.warn,e)}[nt](...e){this._log(console.error,e)}},e.absoluteGranulePosition=si,e.bandwidth=ii,e.bitDepth=ri,e.bitrate=ni,e.bitrateMaximum=ai,e.bitrateMinimum=oi,e.bitrateNominal=hi,e.blockSize=Qi,e.blockingStrategy=Ki,e.blocksize0=Xi,e.blocksize1=Yi,e.buffer=ci,e.bufferFullness=li,e.channelMappingFamily=Zi,e.channelMappingTable=er,e.channelMode=tr,e.channels=sr,e.codec=ui,e.codecFrames=di,e.copyrightId=ir,e.copyrightIdStart=rr,e.coupledStreamCount=pi,e.crc=_i,e.crc16=mi,e.crc32=gi,e.data=fi,e.description=bi,e.duration=Ci,e.emphasis=yi,e.frame=nr,e.frameCount=ar,e.frameLength=or,e.frameNumber=hr,e.framePadding=cr,e.frameSize=lr,e.hasOpusPadding=Si,e.header=wi,e.inputSampleRate=ur,e.isContinuedPacket=Pi,e.isCopyrighted=ki,e.isFirstPage=vi,e.isHome=Fi,e.isLastPage=xi,e.isOriginal=Hi,e.isPrivate=Ii,e.isVbr=Mi,e.layer=Ui,e.length=Oi,e.mode=Ni,e.modeExtension=$i,e.mpeg=Ai,e.mpegVersion=Ri,e.numberAACFrames=Bi,e.outputGain=Li,e.pageChecksum=dr,e.pageSegmentTable=pr,e.pageSequenceNumber=_r,e.preSkip=Di,e.profile=Ti,e.protection=Ei,e.rawData=Gi,e.sampleNumber=mr,e.sampleRate=gr,e.samples=fr,e.segments=zi,e.streamCount=br,e.streamInfo=Cr,e.streamSerialNumber=yr,e.streamStructureVersion=Sr,e.subarray=qi,e.totalBytesOut=wr,e.totalDuration=Pr,e.totalSamples=kr,e.version=Vi,e.vorbis=ji,e.vorbisComments=Wi,e.vorbisSetup=Ji,e}({});
diff --git a/libs/thirdparty/ogg-opus-decoder.min.js b/libs/thirdparty/ogg-opus-decoder.min.js
new file mode 100644
index 0000000..9525201
Binary files /dev/null and b/libs/thirdparty/ogg-opus-decoder.min.js differ
diff --git a/libs/thirdparty/ogg-vorbis-decoder.min.js b/libs/thirdparty/ogg-vorbis-decoder.min.js
new file mode 100644
index 0000000..0f030ae
--- /dev/null
+++ b/libs/thirdparty/ogg-vorbis-decoder.min.js
@@ -0,0 +1,195 @@
+/* Copyright 2021-2023 Ethan Halsall. This file is part of wasm-audio-decoders. https://github.com/eshaz/wasm-audio-decoders */
+var t,s;t=this,s=function(t,s){const i=(t,s=4294967295,i=79764919)=>{const e=new Int32Array(256);let r,n,h,o=s;for(r=0;r<256;r++){for(h=r<<24,n=8;n>0;--n)h=2147483648&h?h<<1^i:h<<1;e[r]=h}for(r=0;r>24^t[r])];return o},e=(t,s=i)=>{const e=t=>new Uint8Array(t.length/2).map(((s,i)=>parseInt(t.substring(2*i,2*(i+1)),16))),r=t=>e(t)[0],n=new Map;[,8364,,8218,402,8222,8230,8224,8225,710,8240,352,8249,338,,381,,,8216,8217,8220,8221,8226,8211,8212,732,8482,353,8250,339,,382,376].forEach(((t,s)=>n.set(t,s)));const h=new Uint8Array(t.length);let o,a,l,c=!1,u=0,U=42,d=t.length>13&&"dynEncode"===t.substring(0,9),f=0;d&&(f=11,a=r(t.substring(9,f)),a<=1&&(f+=2,U=r(t.substring(11,f))),1===a&&(f+=8,l=(t=>new DataView(e(t).buffer).getInt32(0,!0))(t.substring(13,f))));const p=256-U;for(let i=f;i255){const t=n.get(o);t&&(o=t+127)}c&&(c=!1,o-=64),h[u++]=o0?o+p:o-U}else c=!0;const M=h.subarray(0,u);if(d&&1===a){const t=s(M);if(t!==l){const s="Decode failed crc32 validation";throw console.error("`simple-yenc`\n",s+"\n","Expected: "+l+"; Got: "+t+"\n","Visit https://github.com/eshaz/simple-yenc for more information"),Error(s)}}return M};function r(){const t=Uint8Array,s=Float32Array;r.t||Object.defineProperties(r,{t:{value:new WeakMap},u:{value(t,s){r.t.set(t,Promise.resolve(s))}},U:{value(t,s){let i=r.t.get(t);return i||(s?i=WebAssembly.compile(e(s)):(s=t.M,i=r.Y(s).then((t=>WebAssembly.compile(t)))),r.t.set(t,i)),i}},T:{value(t,i){let e=new s(i),r=0,n=0;for(;r({O:t,channelData:s,samplesDecoded:i,sampleRate:e,bitDepth:r})},v:{value(t,s,i,e,n,h){let o,a,l=[];for(o=0;o{const e=String.raw`dynEncode0114db91da9bu*ttt$#U¤¤U¤¤3yzzss|yusvuyÚ&4<054<,5T44^T44<(6U~J(44< ~A544U~6J0444545 444J0444J,4U4U
Ò7U454U4Z4U4U^/6545T4T44BU~64CU~O4U54U~5 U5T4B4Z!4U~5U5U5T4U~6U4ZTU5U5T44~4O4U2ZTU5T44Z!4B6T44U~64B6U~O44U~4O4U~54U~5 44~C4~54U~5 44~5454U4B6Ub!444~UO4U~5 U54U4ZTU#44U$464<4~B6^4<444~U~B4U~54U544~544~U5 µUä#UJUè#5TT4U0ZTTUX5U5T4T4Uà#~4OU4U $~C4~54U~5 T44$6U\!TTT4UaT4<6T4<64<Z!44~4N4<U~5 4UZ!4U±_TU#44UU6UÔ~B$544$6U\!4U6U¤#~B44Uä#~B$~64<6_TU#444U~B~6~54<Y!44<_!T4Y!4<64~444~AN44<U~6J4U5 44J4U[!U#44UO4U~54U~5 U54 7U6844J44J 4UJ4UJ04VK(44<J44<J$4U´~54U~5 4U¤~5!TTT4U$5"U5TTTTTTT4U$"4VK,U54<(6U~64<$6_!4< 64~6A54A544U~6#J(U54A4U[!44J(44#~A4U6UUU
[!4464~64_!4<64~54<6T4<4]TU5 T4Y!44~44~AN4U~54U~54U5 44J(44J UÄA!U5U#UôJU"UÔJU#UÔ"JU#U´"JT4U´ZTU5T4UôZTU5T4UDZTU5T4U$[T44~UO4U~5 UÔUô4U~U´$.U5T4UP[T4U~4~UO4U~5 U#<U#<4U~U2$.UÄUN 44 ~UO4U~5 44!~UO4U~5 4U~4~UO4U~5 44J44J(U5 44U¤~J@44Uä~J<44UD~J844U~J44U$54U$5U54U$54U1^4U1^!4U~54U~5U54U~6U4U^/65T4T4U$54U~4BU~4O4U54U~5 UU'464U'_/54UU~5T4T4U~4BU~UO4U54U~5 U54Uä~4U¤~4U~U'$!44~5U5T44\T44U<~$6U\!4U#aT4U~4U~4O4U~5 U5U5U5TTT4U$"4YTU5 4U4~C5U5 U5U5444$4~64~\TU5 4U~4U~5T4Y!44O4U~54U~54U5 4CYTU5 4Uä~4U¤~4U~4$6TU54U\!44Bæ4Bä~[!4U~4UD~4U~4U~4$6TU54U\!44B4B~[!44U<~4U4~$5 4U"U#$544"Y!454U^!44<J44<(J454U~84UN!#%'+/37?GOWgw·×÷Uä;U9$%& !"#`;r.U(r,e).then((t=>WebAssembly.instantiate(t,{}))).then((({exports:e})=>{const r=new Map(Object.entries(e)),n=r.get("puff"),h=r.get("memory").buffer,o=new t(h),a=new DataView(h);let l=r.get("__heap_base");const c=s.length,u=l;l+=4,a.setInt32(u,c,!0);const U=l;l+=c,o.set(s,U);const d=l;l+=4,a.setInt32(d,o.byteLength-l,!0),n(l,d,U,u),i(o.slice(l,l+a.getInt32(d,!0)))}))}))}}}),Object.defineProperty(this,"M",{enumerable:!0,get:()=>this.B}),this.F=(t,s,i)=>{let e=[],r=0;for(;r{const e=this.B.V(s.BYTES_PER_ELEMENT*t);return i&&this.S.add(e),{H:e,$:t,C:new s(this.B.I,e,t)}},this.free=()=>{this.S.forEach((t=>{this.B.free(t)})),this.S.clear()},this.J=t=>{const s=[],i=new Uint8Array(this.B.I);for(let e=i[t];0!==e;e=i[++t])s.push(e);return String.fromCharCode.apply(null,s)},this.P=(t,s,i,e,r,n)=>{t.push({message:s,frameLength:i,frameNumber:e,inputBytes:r,outputSamples:n})},this.instantiate=(t,s)=>(s&&r.u(t,s),this.B=new t(r).instantiate(),this.S=new Set,this.B.ready.then((()=>this)))}class n extends((()=>globalThis.Worker||s)()){constructor(t,s,i,e){r.t||new r;let n=r.t.get(i);if(!n){let t,s="text/javascript",h=`'use strict';(${""+((t,s,i)=>{let e,r,n=new Promise((t=>{r=t}));self.onmessage=({data:{id:h,command:o,data:a}})=>{let l,c=n,u={id:h};"init"===o?(Object.defineProperties(t,{D:{value:s},N:{value:i},module:{value:a.module},Z:{value:!0}}),e=new t(a.options),r()):"free"===o?e.free():"ready"===o?c=c.then((()=>e.ready)):"reset"===o?c=c.then((()=>e.reset())):(Object.assign(u,e[o](Array.isArray(a)?a.map((t=>new Uint8Array(t))):new Uint8Array(a))),l=u.channelData?u.channelData.map((t=>t.buffer)):[]),c.then((()=>self.postMessage(u,l)))}})})(${i}, ${r}, ${e})`;try{t=void 0!==process.versions.node}catch{}n=t?`data:${s};base64,${Buffer.from(h).toString("base64")}`:URL.createObjectURL(new Blob([h],{type:s})),r.t.set(i,n)}super(n,{name:s}),this.K=Number.MIN_SAFE_INTEGER,this.R=new Map,this.onmessage=({data:t})=>{const{id:s,...i}=t;this.R.get(s)(i),this.R.delete(s)},new e(r).U().then((s=>{this.G("init",{module:s,options:t})}))}async G(t,s){return new Promise((i=>{this.postMessage({command:t,id:this.K,data:s}),this.R.set(this.K++,i)}))}get ready(){return this.G("ready")}async free(){await this.G("free").finally((()=>{this.terminate()}))}async reset(){await this.G("reset")}}const h=(t,s)=>{Object.defineProperty(t,"name",{value:s})},o=Symbol,a=(()=>{const t="left",s="center",i="right";return["","front ","side ","rear "].map((e=>[[t,i],[t,i,s],[t,s,i],[s,t,i],[s]].flatMap((t=>t.map((t=>e+t)).join(", ")))))})(),l="LFE",c="monophonic (mono)",u="stereo",U="surround",d=(t,...s)=>`${[c,u,"linear "+U,"quadraphonic","5.0 "+U,"5.1 "+U,"6.1 "+U,"7.1 "+U][t-1]} (${s.join(", ")})`,f=[c,d(2,a[0][0]),d(3,a[0][2]),d(4,a[1][0],a[3][0]),d(5,a[1][2],a[3][0]),d(6,a[1][2],a[3][0],l),d(7,a[1][2],a[2][0],a[3][4],l),d(8,a[1][2],a[2][0],a[3][0],l)],p=48e3,M=44100,y=32e3,m=24e3,w=22050,g=16e3,Y=8e3,T="absoluteGranulePosition",b="bandwidth",A="bitDepth",O="bitrate",v=O+"Maximum",B=O+"Minimum",F=O+"Nominal",_="buffer",V=_+"Fullness",k="codec",S=k+"Frames",q="coupledStreamCount",H="crc",$=H+"16",C=H+"32",I="data",j="description",J="duration",x="emphasis",P="hasOpusPadding",D="header",E="isContinuedPacket",N="isCopyrighted",Z="isFirstPage",z="isHome",K="isLastPage",Q="isOriginal",R="isPrivate",G="isVbr",X="layer",L="length",W="mode",tt=W+"Extension",st="mpeg",it=st+"Version",et="numberAACFrames",rt="outputGain",nt="preSkip",ht="profile",ot=o(),at="protection",lt="segments",ct="subarray",ut="version",Ut="vorbis",dt=Ut+"Comments",ft=Ut+"Setup",pt="block",Mt=pt+"ingStrategy",yt=o(),mt=pt+"Size",wt=pt+"size0",gt=pt+"size1",Yt=o(),Tt="channel",bt=Tt+"MappingFamily",At=Tt+"MappingTable",Ot=Tt+"Mode",vt=o(),Bt=Tt+"s",Ft="copyright",_t=Ft+"Id",Vt=Ft+"IdStart",kt="frame",St=kt+"Count",qt=kt+"Length",Ht="Number",$t=kt+Ht,Ct=kt+"Padding",It=kt+"Size",jt="Rate",Jt="inputSample"+jt,xt="page",Pt=xt+"Checksum",Dt=o(),Et=xt+"SegmentTable",Nt=xt+"Sequence"+Ht,Zt="sample",zt=Zt+Ht,Kt=Zt+jt,Qt=o(),Rt=Zt+"s",Gt="stream",Xt=Gt+"Count",Lt=Gt+"Info",Wt=Gt+"Serial"+Ht,ts=Gt+"StructureVersion",ss="total",is=ss+"BytesOut",es=ss+"Duration",rs=ss+"Samples",ns=o(),hs=o(),os=o(),as=o(),ls=o(),cs=o(),us=o(),Us=o(),ds=o(),fs=o(),ps=o(),Ms=o(),ys=o(),ms=o(),ws=o(),gs=o(),Ys=o(),Ts=o(),bs=Uint8Array,As=DataView,Os="reserved",vs="bad",Bs="free",Fs="none",_s="16bit CRC",Vs=(t,s,i)=>{for(let e=0;e0;t--)r=i(r);t[e]=r}return t},ks=Vs(new bs(256),(t=>t),(t=>128&t?7^t<<1:t<<1)),Ss=[Vs(new Uint16Array(256),(t=>t<<8),(t=>t<<1^(32768&t?32773:0)))],qs=[Vs(new Uint32Array(256),(t=>t),(t=>t>>>1^3988292384*(1&t)))];for(let Ye=0;Ye<15;Ye++){Ss.push(new Uint16Array(256)),qs.push(new Uint32Array(256));for(let t=0;t<=255;t++)Ss[Ye+1][t]=Ss[0][Ss[Ye][t]>>>8]^Ss[Ye][t]<<8,qs[Ye+1][t]=qs[Ye][t]>>>8^qs[0][255&qs[Ye][t]]}const Hs=t=>{const s=t[L],i=s-16;let e=0,r=0;for(;r<=i;)e=qs[15][255&(t[r++]^e)]^qs[14][255&(t[r++]^e>>>8)]^qs[13][255&(t[r++]^e>>>16)]^qs[12][t[r++]^e>>>24]^qs[11][t[r++]]^qs[10][t[r++]]^qs[9][t[r++]]^qs[8][t[r++]]^qs[7][t[r++]]^qs[6][t[r++]]^qs[5][t[r++]]^qs[4][t[r++]]^qs[3][t[r++]]^qs[2][t[r++]]^qs[1][t[r++]]^qs[0][t[r++]];for(;r!==s;)e=qs[0][255&(e^t[r++])]^e>>>8;return~e},$s=(...t)=>{const s=new bs(t.reduce(((t,s)=>t+s[L]),0));return t.reduce(((t,i)=>(s.set(i,t),t+i[L])),0),s},Cs=t=>String.fromCharCode(...t),Is=[0,8,4,12,2,10,6,14,1,9,5,13,3,11,7,15],js=t=>Is[15&t]<<4|Is[t>>4];class Js{constructor(t){this.X=t,this.L=8*t[L]}set position(t){this.L=t}get position(){return this.L}read(t){const s=Math.floor(this.L/8),i=this.L%8;return this.L-=t,(js(this.X[s-1])<<8)+js(this.X[s])>>7-i&255}}class xs{constructor(t,s){this.W=t,this.tt=s,this[ws]()}[gs](){this.st=!0}[ws](){this.it=new Map,this.et=new WeakMap,this.rt=!1,this.nt=!1,this.ht=null,this.st=!1}[ms](t,s){if(this.tt){this.ht!==t&&(this.ht=t,this.nt=!0);const i=this.et.get(this.it.get(this.ot));this.nt&&i&&this.tt({lt:t,...i},s),this.nt=!1}}[ds](t){const s=this.it.get(t);return s&&this.ct(t),s}[fs](t,s,i){this.st&&(this.rt||(this.W({...s}),this.rt=!0),this.ct(t),this.it.set(t,s),this.et.set(s,i))}ct(t){this.tt&&t!==this.ot&&(this.nt=!0,this.ot=t)}}const Ps=new WeakMap,Ds=new WeakMap;class Es{constructor(t,s){this.ut=t,this.it=s}*[us](){let t;for(;;){if(t=yield*this.Ut[ps](this.ut,this.it,0),t)return t;this.ut[hs](1)}}*[Us](t){let s=yield*this[us]();const i=Ds.get(s)[L];if(t||this.ut.dt||(yield*this.ft[ds](this.ut,this.it,i)))return this.it[gs](),this.ut[hs](i),this.ut[as](s),s;this.ut[ls](`Missing ${kt} at ${i} bytes from current position.`,`Dropping current ${kt} and trying again.`),this.it[ws](),this.ut[hs](1)}}class Ns{constructor(t,s){Ds.set(this,{[D]:t}),this[I]=s}}class Zs extends Ns{static*[ps](t,s,i,e,r){const n=yield*t[ds](i,e,r);if(n){const t=Ps.get(n)[qt],e=Ps.get(n)[Rt];return new s(n,(yield*i[ns](t,r))[ct](0,t),e)}return null}constructor(t,s,i){super(t,s),this[D]=t,this[Rt]=i,this[J]=i/t[Kt]*1e3,this[$t]=null,this[is]=null,this[rs]=null,this[es]=null,Ds.get(this)[L]=s[L]}}const zs="unsynchronizationFlag",Ks="extendedHeaderFlag",Qs="experimentalFlag",Rs="footerPresent";class Gs{static*Mt(t,s,i){const e={};let r=yield*t[ns](3,i);if(73!==r[0]||68!==r[1]||51!==r[2])return null;if(r=yield*t[ns](10,i),e[ut]=`id3v2.${r[3]}.${r[4]}`,15&r[5])return null;if(e[zs]=!!(128&r[5]),e[Ks]=!!(64&r[5]),e[Qs]=!!(32&r[5]),e[Rs]=!!(16&r[5]),128&r[6]||128&r[7]||128&r[8]||128&r[9])return null;const n=r[6]<<21|r[7]<<14|r[8]<<7|r[9];return e[L]=10+n,new Gs(e)}constructor(t){this[ut]=t[ut],this[zs]=t[zs],this[Ks]=t[Ks],this[Qs]=t[Qs],this[Rs]=t[Rs],this[L]=t[L]}}class Xs{constructor(t){Ps.set(this,t),this[A]=t[A],this[O]=null,this[Bt]=t[Bt],this[Ot]=t[Ot],this[Kt]=t[Kt]}}const Ls={0:[Bs,Bs,Bs,Bs,Bs],16:[32,32,32,32,8],240:[vs,vs,vs,vs,vs]},Ws=(t,s,i)=>8*((t+i)%s+s)*(1<<(t+i)/s)-8*s*(s/8|0);for(let Ye=2;Ye<15;Ye++)Ls[Ye<<4]=[32*Ye,Ws(Ye,4,0),Ws(Ye,4,-1),Ws(Ye,8,4),Ws(Ye,8,0)];const ti="bands ",si=" to 31",ii={0:ti+4+si,16:ti+8+si,32:ti+12+si,48:ti+16+si},ei="bitrateIndex",ri="v2",ni="v1",hi="Intensity stereo ",oi=", MS stereo ",ai="on",li="off",ci={0:hi+li+oi+li,16:hi+ai+oi+li,32:hi+li+oi+ai,48:hi+ai+oi+ai},ui={0:{[j]:Os},2:{[j]:"Layer III",[Ct]:1,[tt]:ci,[ni]:{[ei]:2,[Rt]:1152},[ri]:{[ei]:4,[Rt]:576}},4:{[j]:"Layer II",[Ct]:1,[tt]:ii,[Rt]:1152,[ni]:{[ei]:1},[ri]:{[ei]:4}},6:{[j]:"Layer I",[Ct]:4,[tt]:ii,[Rt]:384,[ni]:{[ei]:0},[ri]:{[ei]:3}}},Ui="MPEG Version ",di="ISO/IEC ",fi={0:{[j]:Ui+"2.5 (later extension of MPEG 2)",[X]:ri,[Kt]:{0:11025,4:12e3,8:Y,12:Os}},8:{[j]:Os},16:{[j]:`${Ui}2 (${di}13818-3)`,[X]:ri,[Kt]:{0:w,4:m,8:g,12:Os}},24:{[j]:`${Ui}1 (${di}11172-3)`,[X]:ni,[Kt]:{0:M,4:p,8:y,12:Os}},length:L},pi={0:_s,1:Fs},Mi={0:Fs,1:"50/15 ms",2:Os,3:"CCIT J.17"},yi={0:{[Bt]:2,[j]:u},64:{[Bt]:2,[j]:"joint "+u},128:{[Bt]:2,[j]:"dual channel"},192:{[Bt]:1,[j]:c}};class mi extends Xs{static*[ds](t,s,i){const e={},r=yield*Gs.Mt(t,s,i);r&&(yield*t[ns](r[L],i),t[hs](r[L]));const n=yield*t[ns](4,i),h=Cs(n[ct](0,4)),o=s[ds](h);if(o)return new mi(o);if(255!==n[0]||n[1]<224)return null;const a=fi[24&n[1]];if(a[j]===Os)return null;const l=6&n[1];if(ui[l][j]===Os)return null;const c={...ui[l],...ui[l][a[X]]};if(e[it]=a[j],e[X]=c[j],e[Rt]=c[Rt],e[at]=pi[1&n[1]],e[L]=4,e[O]=Ls[240&n[2]][c[ei]],e[O]===vs)return null;if(e[Kt]=a[Kt][12&n[2]],e[Kt]===Os)return null;if(e[Ct]=2&n[2]&&c[Ct],e[R]=!!(1&n[2]),e[qt]=Math.floor(125*e[O]*e[Rt]/e[Kt]+e[Ct]),!e[qt])return null;const u=192&n[3];if(e[Ot]=yi[u][j],e[Bt]=yi[u][Bt],e[tt]=c[tt][48&n[3]],e[N]=!!(8&n[3]),e[Q]=!!(4&n[3]),e[x]=Mi[3&n[3]],e[x]===Os)return null;e[A]=16;{const{length:t,frameLength:i,yt:r,...n}=e;s[fs](h,e,n)}return new mi(e)}constructor(t){super(t),this[O]=t[O],this[x]=t[x],this[Ct]=t[Ct],this[N]=t[N],this[Q]=t[Q],this[R]=t[R],this[X]=t[X],this[tt]=t[tt],this[it]=t[it],this[at]=t[at]}}class wi extends Zs{static*[ps](t,s,i){return yield*super[ps](mi,wi,t,s,i)}constructor(t,s,i){super(t,s,i)}}class gi extends Es{constructor(t,s,i){super(t,s),this.Ut=wi,this.ft=mi,i(this[k])}get[k](){return st}*[Ms](){return yield*this[Us]()}}const Yi={0:"MPEG-4",8:"MPEG-2"},Ti={0:"valid",2:vs,4:vs,6:vs},bi={0:_s,1:Fs},Ai={0:"AAC Main",64:"AAC LC (Low Complexity)",128:"AAC SSR (Scalable Sample Rate)",192:"AAC LTP (Long Term Prediction)"},Oi={0:96e3,4:88200,8:64e3,12:p,16:M,20:y,24:m,28:w,32:g,36:12e3,40:11025,44:Y,48:7350,52:Os,56:Os,60:"frequency is written explicitly"},vi={0:{[Bt]:0,[j]:"Defined in AOT Specific Config"},64:{[Bt]:1,[j]:c},128:{[Bt]:2,[j]:d(2,a[0][0])},192:{[Bt]:3,[j]:d(3,a[1][3])},256:{[Bt]:4,[j]:d(4,a[1][3],a[3][4])},320:{[Bt]:5,[j]:d(5,a[1][3],a[3][0])},384:{[Bt]:6,[j]:d(6,a[1][3],a[3][0],l)},448:{[Bt]:8,[j]:d(8,a[1][3],a[2][0],a[3][0],l)}};class Bi extends Xs{static*[ds](t,s,i){const e={},r=yield*t[ns](7,i),n=Cs([r[0],r[1],r[2],252&r[3]|3&r[6]]),h=s[ds](n);if(h)Object.assign(e,h);else{if(255!==r[0]||r[1]<240)return null;if(e[it]=Yi[8&r[1]],e[X]=Ti[6&r[1]],e[X]===vs)return null;const t=1&r[1];e[at]=bi[t],e[L]=t?7:9,e[ot]=192&r[2],e[Qt]=60&r[2];const i=2&r[2];if(e[ht]=Ai[e[ot]],e[Kt]=Oi[e[Qt]],e[Kt]===Os)return null;e[R]=!!i,e[vt]=448&(r[2]<<8|r[3]),e[Ot]=vi[e[vt]][j],e[Bt]=vi[e[vt]][Bt],e[Q]=!!(32&r[3]),e[z]=!!(8&r[3]),e[_t]=!!(8&r[3]),e[Vt]=!!(4&r[3]),e[A]=16,e[Rt]=1024,e[et]=3&r[6];{const{length:t,wt:i,gt:r,Yt:h,frameLength:o,yt:a,Tt:l,...c}=e;s[fs](n,e,c)}}if(e[qt]=8191&(r[3]<<11|r[4]<<3|r[5]>>5),!e[qt])return null;const o=2047&(r[5]<<6|r[6]>>2);return e[V]=2047===o?"VBR":o,new Bi(e)}constructor(t){super(t),this[_t]=t[_t],this[Vt]=t[Vt],this[V]=t[V],this[z]=t[z],this[Q]=t[Q],this[R]=t[R],this[X]=t[X],this[L]=t[L],this[it]=t[it],this[et]=t[et],this[ht]=t[ht],this[at]=t[at]}get bt(){const t=Ps.get(this),s=t[ot]+64<<5|t[Qt]<<5|t[vt]>>3,i=new bs(2);return new As(i[_]).setUint16(0,s,!1),i}}class Fi extends Zs{static*[ps](t,s,i){return yield*super[ps](Bi,Fi,t,s,i)}constructor(t,s,i){super(t,s,i)}}class _i extends Es{constructor(t,s,i){super(t,s),this.Ut=Fi,this.ft=Bi,i(this[k])}get[k](){return"aac"}*[Ms](){return yield*this[Us]()}}class Vi extends Zs{static At(t){return(t[t[L]-2]<<8)+t[t[L]-1]}static[Ts](t){const s=Vi.At(t),i=(t=>{const s=t[L],i=s-16;let e=0,r=0;for(;r<=i;)e^=t[r++]<<8|t[r++],e=Ss[15][e>>8]^Ss[14][255&e]^Ss[13][t[r++]]^Ss[12][t[r++]]^Ss[11][t[r++]]^Ss[10][t[r++]]^Ss[9][t[r++]]^Ss[8][t[r++]]^Ss[7][t[r++]]^Ss[6][t[r++]]^Ss[5][t[r++]]^Ss[4][t[r++]]^Ss[3][t[r++]]^Ss[2][t[r++]]^Ss[1][t[r++]]^Ss[0][t[r++]];for(;r!==s;)e=(255&e)<<8^Ss[0][e>>8^t[r++]];return e})(t[ct](0,-2));return s===i}constructor(t,s,i){s[Lt]=i,s[$]=Vi.At(t),super(s,t,Ps.get(s)[Rt])}}const ki="get from STREAMINFO metadata block",Si={0:"Fixed",1:"Variable"},qi={0:Os,16:192};for(let Ye=2;Ye<16;Ye++)qi[Ye<<4]=Ye<6?576*2**(Ye-2):2**Ye;const Hi={0:ki,1:88200,2:176400,3:192e3,4:Y,5:g,6:w,7:m,8:y,9:M,10:p,11:96e3,15:vs},$i={0:{[Bt]:1,[j]:c},16:{[Bt]:2,[j]:d(2,a[0][0])},32:{[Bt]:3,[j]:d(3,a[0][1])},48:{[Bt]:4,[j]:d(4,a[1][0],a[3][0])},64:{[Bt]:5,[j]:d(5,a[1][1],a[3][0])},80:{[Bt]:6,[j]:d(6,a[1][1],l,a[3][0])},96:{[Bt]:7,[j]:d(7,a[1][1],l,a[3][4],a[2][0])},112:{[Bt]:8,[j]:d(8,a[1][1],l,a[3][0],a[2][0])},128:{[Bt]:2,[j]:u+" (left, diff)"},144:{[Bt]:2,[j]:u+" (diff, right)"},160:{[Bt]:2,[j]:u+" (avg, diff)"},176:Os,192:Os,208:Os,224:Os,240:Os},Ci={0:ki,2:8,4:12,6:Os,8:16,10:20,12:24,14:Os};class Ii extends Xs{static Ot(t){if(t[0]>254)return null;if(t[0]<128)return{value:t[0],length:1};let s=1;for(let n=64;n&t[0];n>>=1)s++;let i=s-1,e=0,r=0;for(;i>0;r+=6,i--){if(128!=(192&t[i]))return null;e|=(63&t[i])<>s)<{let s=0;const i=t[L];for(let e=0;e!==i;e++)s=ks[s^t[e]];return s})(e[ct](0,r[L]-1)))return null;if(!h){const{vt:t,frameNumber:i,Bt:e,yt:h,Yt:o,Ft:a,_t:l,length:c,...u}=r;s[fs](n,r,u)}return new Ii(r)}constructor(t){super(t),this[$]=null,this[Mt]=t[Mt],this[mt]=t[mt],this[$t]=t[$t],this[zt]=t[zt],this[Lt]=null}}class ji extends Es{constructor(t,s,i){super(t,s),this.Ut=Vi,this.ft=Ii,i(this[k])}get[k](){return"flac"}*Vt(t){const s=yield*this.ut[ns](2,0),i=s[L]-2;for(;t{const s=Ii[Ys](t,this.it);if(s)return new Vi(t,s,this.kt);this.ut[ls]("Failed to parse Ogg FLAC frame","Skipping invalid FLAC frame")})).filter((t=>!!t))),t}}class Ji{static*[ds](t,s,i){const e={};let r=yield*t[ns](28,i);if(79!==r[0]||103!==r[1]||103!==r[2]||83!==r[3])return null;if(e[ts]=r[4],248&r[5])return null;e[K]=!!(4&r[5]),e[Z]=!!(2&r[5]),e[E]=!!(1&r[5]);const n=new As(bs.from(r[ct](0,28))[_]);e[T]=(t=>{try{return t.getBigInt64(6,!0)}catch{const s=128&t.getUint8(13)?-1:1;let i=t.getUint32(6,!0),e=t.getUint32(10,!0);return-1===s&&(i=1+~i,e=1+~e),e>1048575&&console.warn("This platform does not support BigInt"),s*(i+e*2**32)}})(n),e[Wt]=n.getInt32(14,!0),e[Nt]=n.getInt32(18,!0),e[Pt]=n.getInt32(22,!0);const h=r[26];e[L]=h+27,r=yield*t[ns](e[L],i),e[qt]=0,e[Et]=[],e[Dt]=bs.from(r[ct](27,e[L]));for(let o=0,a=0;o{const s=Li[Ys](this.Ht,t,this.it);if(s){null===this.$t&&(this.$t=s[nt]);let i=s[It]*s[St]/1e3*s[Kt];return this.$t>0&&(this.$t-=i,i=this.$t<0?-this.$t:0),new Pi(t,s,i)}this.ut[cs]("Failed to parse Ogg Opus Header","Not a valid Ogg Opus file")}))),t}}class te extends Zs{constructor(t,s,i){super(s,t,i)}}const se={};for(let Ye=0;Ye<8;Ye++)se[Ye+6]=2**(6+Ye);class ie extends Xs{static[Ys](t,s,i,e){if(t[L]<30)throw Error("Out of data while inside an Ogg Page");const r=Cs(t[ct](0,30)),n=s[ds](r);if(n)return new ie(n);const h={[L]:30};if("vorbis"!==r.substr(0,7))return null;h[I]=bs.from(t[ct](0,30));const o=new As(h[I][_]);if(h[ut]=o.getUint32(7,!0),0!==h[ut])return null;if(h[Bt]=t[11],h[Ot]=f[h[Bt]-1]||"application defined",h[Kt]=o.getUint32(12,!0),h[v]=o.getInt32(16,!0),h[F]=o.getInt32(20,!0),h[B]=o.getInt32(24,!0),h[gt]=se[(240&t[28])>>4],h[wt]=se[15&t[28]],h[wt]>h[gt])return null;if(1!==t[29])return null;h[A]=32,h[ft]=e,h[dt]=i;{const{length:t,data:i,version:e,Ct:n,It:o,...a}=h;s[fs](r,h,a)}return new ie(h)}constructor(t){super(t),this[v]=t[v],this[B]=t[B],this[F]=t[F],this[wt]=t[wt],this[gt]=t[gt],this[I]=t[I],this[dt]=t[dt],this[ft]=t[ft]}}class ee extends Es{constructor(t,s,i){super(t,s),this.Ut=te,i(this[k]),this.Ht=null,this.jt=!1,this.Jt=null}get[k](){return Ut}[ys](t){t[S]=[];for(const s of Ds.get(t)[lt])if(1===s[0])this.it[gs](),this.Ht=t[I],this.jt=!1;else if(3===s[0])this.xt=s;else if(5===s[0])this.Pt=s,this.Dt=this.Et(s),this.jt=!0;else if(this.jt){const i=ie[Ys](this.Ht,this.it,this.xt,this.Pt);i?t[S].push(new te(s,i,this.Nt(s,i))):this.ut[logError]("Failed to parse Ogg Vorbis Header","Not a valid Ogg Vorbis file")}return t}Nt(t,s){const i=this.Dt.Zt[t[0]>>1&this.Dt.mask]?s[gt]:s[wt],e=null===this.Jt?0:(this.Jt+i)/4;return this.Jt=i,e}Et(t){const s=new Js(t),i={count:0,Zt:[]};for(;1&~s.read(1););let e;for(;i.count<64&&s.position>0;){js(s.read(8));let t=0;for(;0===s.read(8)&&t++<3;);if(4!==t){1+((126&js(e))>>1)!==i.count&&this.ut[ls]("vorbis derived mode count did not match actual mode count");break}e=s.read(7),i.Zt.unshift(1&e),s.position+=6,i.count++}return i.mask=(1<1&&t[Nt]>1&&this.ut[ls]("Unexpected gap in Ogg Page Sequence Number.",`Expected: ${this.ss+1}, Got: ${t[Nt]}`),this.ss=t[Nt]}es(t){null===this.Rt&&(this.ss=t[Nt],this.Rt=this.Wt(t)),this.ts(t);const s=Ds.get(t),i=Ps.get(s[D]);let e=0;if(s[lt]=i[Et].map((s=>t[I][ct](e,e+=s))),this.Kt[L]&&(s[lt][0]=$s(this.Kt,s[lt][0]),this.Kt=new bs),255===i[Dt][i[Dt][L]-1]&&(this.Kt=$s(this.Kt,s[lt].pop())),null!==this.Gt&&(t[Rt]=Number(t[T]-this.Gt)),this.Gt=t[T],this.Rt){const s=this.Lt[ys](t);return this.ut[as](s),s}return t}}class ne extends Es{constructor(t,s,i){super(t,s),this.zt=i,this.Ut=xi,this.ft=Ji,this.rs=new Map,this.ns=null}get[k](){const t=this.rs.get(this.ns);return t?t.hs:""}*[Ms](){const t=yield*this[Us](!0);this.ns=t[Wt];let s=this.rs.get(this.ns);return s||(s=new re(this.ut,this.it,this.zt),this.rs.set(this.ns,s)),t[K]&&this.rs.delete(this.ns),s.es(t)}}const he=()=>{};class oe{constructor(t,{os:s,ls:i,cs:e,us:r=!1,Us:n=!0}={}){this.ds=t,this.zt=s||he,this.W=i||he,this.tt=e,this.fs=r,this.ps=n?Hs:he,this[ws]()}get[k](){return this.Lt?this.Lt[k]:""}[ws](){this.it=new xs(this.W,this.tt),this.Ms=this.ys(),this.Ms.next()}*flush(){this.dt=!0;for(let t=this.Ms.next();t.value;t=this.Ms.next())yield t.value;this.dt=!1,this[ws]()}*ws(t){for(let s=this.Ms.next(t);s.value;s=this.Ms.next())yield s.value}parseAll(t){return[...this.ws(t),...this.flush()]}*ys(){if(this.ds.match(/aac/))this.Lt=new _i(this,this.it,this.zt);else if(this.ds.match(/mpeg/))this.Lt=new gi(this,this.it,this.zt);else if(this.ds.match(/flac/))this.Lt=new ji(this,this.it,this.zt);else{if(!this.ds.match(/ogg/))throw Error("Unsupported Codec "+mimeType);this.Lt=new ne(this,this.it,this.zt)}for(this.gs=0,this.Ys=0,this.Ts=0,this.bs=0,this.As=0,this.Os=void 0,this.vs=new Uint8Array(0);;){const t=yield*this.Lt[Ms]();t&&(yield t)}}*[ns](t=0,s=0){let i;for(;this.vs[L]<=t+s;){if(i=yield,this.dt)return this.vs[ct](s);i&&(this.Ts+=i[L],this.vs=$s(this.vs,i))}return this.vs[ct](s)}[hs](t){this.Ys+=t,this.vs=this.vs[ct](t)}[os](t){this.Os=t[D][Kt],t[D][O]=t[J]>0?8*Math.round(t[I][L]/t[J]):0,t[$t]=this.gs++,t[is]=this.bs,t[rs]=this.As,t[es]=this.As/this.Os*1e3,t[C]=this.ps(t[I]),this.it[ms](t[D][O],t[es]),this.bs+=t[I][L],this.As+=t[Rt]}[as](t){if(t[S]){if(t[K]){let s=t[Rt];t[S].forEach((t=>{const i=t[Rt];s0?s:0,t[J]=t[Rt]/t[D][Kt]*1e3),s-=i,this[os](t)}))}else t[Rt]=0,t[S].forEach((s=>{t[Rt]+=s[Rt],this[os](s)}));t[J]=t[Rt]/this.Os*1e3||0,t[rs]=this.As,t[es]=this.As/this.Os*1e3||0,t[is]=this.bs}else this[os](t)}Bs(t,s){if(this.fs){const i=[`${k}: ${this[k]}`,"inputMimeType: "+this.ds,"readPosition: "+this.Ys,"totalBytesIn: "+this.Ts,`${is}: ${this.bs}`],e=Math.max(...i.map((t=>t[L])));s.push("--stats--"+"-".repeat(e-9),...i,"-".repeat(e)),t("codec-parser",s.reduce(((t,s)=>t+"\n "+s),""))}}[ls](...t){this.Bs(console.warn,t)}[cs](...t){this.Bs(console.error,t)}}const ae=S,le=I,ce=D,ue=K,Ue=dt,de=ft,fe=rs;function pe(t){function s(){}for(var i=new Uint8Array(123),e=25;e>=0;--e)i[48+e]=52+e,i[65+e]=e,i[97+e]=26+e;var r,n;i[43]=62,i[47]=63,pe.M||Object.defineProperty(pe,"M",{get:()=>String.raw`dynEncode01a33fc84f8dïoØå§ä³¨s¢þéõ?§æQ¬·ñì>_åè£Mí'
ËÏÊí çåzmòeúaݧ¢é,î= 9z
ó¡= $.JõT¬K'¨®ç äÓ·ßéàäà(u¾Ã÷¯ÃìÍ H¶3KQtí;Çø=}ÉóX=}Çã»°£)½SÉVy{oEqûUHhéì8÷7ó[¼iÖ¨A2º»È(ä+Ú»Ðé*7ç}ìÏÖ@ü¿À¿B;?=}A?>ýÿûüÿ~{xÎ#ë5X.]J
+=Mi=M°UH
+5⪱ÀéOmrn¿¯2Ljª{ ÝájÔÖ ±Û©bÕé)j{èüül8üàJr/¡¨²Ýþ^UÜàÈO6Ü
jÙ5èâ×að1ºHH=M2Û6íÊóI̧[TÜïÚÉ) ÁW|âßHeF,l Ì¥'0Äb8ÏKßè!eJ
+vÑz& WrnV"5Ê ñ ýkwP4Ãp¨¸RAx[p¼Ïó;7>ÃÑþ¨VU?°Rq9~òQÚwI=} fòÔ·rñ¾ª¸gðx7QE5-±®MßÂãl?£ÁãÃE óØ{ËÒÂÌ@µz5fñ}.;¾ê%Mi_³ZU@å.Éñî¾ÞmÄt×¢.,ä²BB;æ¤äûûZ_¡V)ªAUµ¾BfÈé Ò&§¦$¢»ôåÀk£z(_zÜ^r>ï ¾b>Áð/ªÄDTçQlÄIÒ°Q}:8_þ!@ßvñ!Oö
+\\ebVpȱÖ~\¥NÐ'eBb·#ÈN¥Y ßà#W´0a]¼!þ½\n×ØT¿¿¶çÉSîäx7óÎ6ñI-ììùpfåh¸Çú,cµÔeiÂeicÓÂç#ê²up¹aÛÝb0¼þ7Ü>F3ÞÔTþñfkï±bxööfÙ±
6HÎÊß6 Ò°ÂyV¶Á?»@?{¨Q¥+=}¥±ÿÔÌá9%û!>Âì&¸Õ@ÓUùq÷?ñqt¿çIU+÷gy+5sä
+¼¬åíGÖ®S1K;
B\©fhXd)ºÐ¿²Uw ûûX15°Ò1LÁ-;j= piN:}îºB¯ÅÉwXtô§¶¸3y¶¯oJáàL¸jÎn®În -¸ýûÄàsT½ÎòÓÄes ´{OsèÚÎþ´Çå9SekFTV³úK-÷WE¾OÔ
+µR½ø*ÙvVèJ°§¼Å¤ªàCsr²^Õvü3ããÔ¯/´ Poü|$RÞ§KuÉ#þ [ªß{¦ÑVú>ý>Ôws~~9=Mz¶-Úhiò>ñ²1düÿ!ü>ý>í¾¿ñèµÀ /«~yæ¨Êwórb0©ì! ~°»Ïøj§Ý#ß88÷AlÛ¦3¹ÇS8oK:xÜ×'dAkÉÜ<É;)3ÀbÐ{í«Û5?þ
+ÈNøRÙá¾¹/+ß>Û¾6åô}mzQ|p÷M¼ðjÑí©;2½&Ì#g×g|/[k*Zõ8ZvãXçàFª¯a*÷«ª+V,\¨rÏâ'É:G-àëW£óÿî8rpÿ ]k=Mîéû|]´$Î"îáVìD_d%~m¢>aj%U6¨^8"b ]¥®}lìïèÈfõlÔÖçÝÜIÃqÜ;ñ°[ÙåTàÆä>í÷õ{¯oí½3*iúD¿gÔæÁ@sÙ ÑèÚ=MÉkáÑüçuêÕÙðw¨ À³Fô~{ï_µ9Ѭ5,}í5×0ÿ>_6l*{îò)¯GjE7(aôrÃbôÚjǽ T°ÜÃÄgk;ß_ßÂÖûÄRZðùÒ¸§=MX*gê[ÉXÚ©^uN~u~®
+:Õ_NøWëP\^WpÀttØ÷2ÿ2wTØï2þ2v6y6;VÌÛI÷?ªê̶^&>&í£F]VBf¨Tße|þîõ¹ù±úÁ$]ö wáyÏV.îbÁÛÆ.Þð¡ØÛ ïtnZ$þ:KÌòñÓð?«»
±lâ¶
+SÓÿZ·©'7
+s%»4äcL+øÈ{
+^ÑKCU¨n9ðÑ~g³/rÓV$
+[cÉ6 &(¿ôqðx úÆ6 ÞYSÇO×Èò{-L;áèÚÆUhk(öyÄè7´Þ1CY¤Dèé×40,ä$Em9¦S£"¨üÇkUô¹Ë UgÎ{>%[2\ösiUîçÓ.À¨ãôÂÏûÇ~që¤
+$¼À&*ãhæM#Ïî8å#ûûU@·I§aÂú[Hc°c¥öém¶«è䪪#÷ñg;ß¾óº/9í? g~ïB9¨'Süß.),gi±Æèzåëf¹,Èâ^k¿|Ð= ÿÉUvî©ñÚÍÖÙ"&|ª[Å¢lyD¸ÖÏñI´QCÑWõÈà°zÈ2_Ǹß(ËÒ¹pi}çkUÌ-PV$MÍ)}éD×q¹{¤aä.|í+/ýºIë¸××I¥^bü½ö?Ñ/Æ°uCH¥g±|¹MÞ#L²ææûºÿ'îA-÷B¿7<ÞÔ9ì&Ô¢fÓ1EãÈ/ cE%5ÙO£.uK~¨¸;Ëíô°ÿu7uRö¦×³
®= °~£30ÈöpIìxû)þÏXËyeyo I%Ùý°ðà8Kð!9¡C£'Ý Y0¶±Ú}îùÛÆze"ߦ[ÌM
÷qA?¬;QWetbW¬ýÛ)aWet+*¾j¥h8Î
+ÉëÎ
+~øqù|ô*= DÑW©â
+q'$iÇùçÆ®sç4|¶¢USæK|cÅÀ(46?µ#ËM0÷rYNAP÷r¦á«Ò×{²¶ÁØäpg´eÂÝ|¸ìH=MïmÿOn@óå+(÷ÐMI3ìñÈóåÓz*^,áÿJ²Úz* [Òíxê|fpûÂûûBf4þs*þs*ö [ñÂbG²ÐnjÄ%Àßñ«Zù\è¬è K-ÚÈ®Û×ÎVyT´1bØüJÅZÕüJÅÚ=}<ó´nul/6|@{æÔî½àb|é ª³½wTAª³uêÀ.¸NvÎæSUL-÷hrH7ÙV
+VÕ-pL¿ã.PÒ¿êÃÿqÎÁEk
ܦÙÇéÙ²l¥(t³pOYúHpcÖ¸óæÞy5½¶ÎÕ9ȳ³²ô³2§'6´É»_9É^¿Ï«;ÙËa&rbf±_ZØÀª%#Îh?Ã;zÀVj¿2lúêGÂ^hì
+ÊÀþßðTGximü1Oå®&¥ïßµecË/9/ÍNÍê¤MÎü´M
+]Fökj®òJ¤C©K'îO§GiÆb6ô¡ØfÒéþh°¶À= µfaGHߵѬÃàÖO¥*Ýh·s-#ýtúø*³D¡S6(t,ÀF0(´¡¿n,ÙádýY@²íÛâÀnhé9ÿ{~@øJèT\VåÔOó¢üdrí¦ür
+¨&
+ÝJB¸V%trQóÓOVåâ SBi¾ÿÚçÜÄ6OLi.p·Å(ÕxD¨
+D¨¼¬Øª¼L9¯¨ÌÓn¤°BªbêtÓ«óÚ;[K°èî¦AÀÎ0ý'ð§|ÌÒÌ÷´rq½óĵazûû8m´Ê/V:È&®¬ØÌZ&Uk£r¿Ãî9>ÊRrѤçÅz"ÈBw&!Aúÿüd&ù¤º¤ûë©ÿ?þlâSwÉ£kl¾2Â9²bÏáz«®k(Ȫ-Ðgýuäƪaß÷Ðî5A3*®ÖÖ»·GV@øb1r#éof:&z:ryG~qbf ÜV\Q°%¿¦cåþ¤6á0n"ÕaÕ:¬®{ $îN³ºüÜ~=}Ä6¬ÁÛÏÓ¥Y¬ÆmÝÜÀ,ØAà64æ0kÐÇiL#=MMôk%9ÿ[þ|Ä[Á<